From d352eca494812424cb89c745c3bb8725f3ba78c4 Mon Sep 17 00:00:00 2001 From: ajstensland Date: Sun, 27 Oct 2019 19:10:03 -0400 Subject: [PATCH] Replaced including venv/ directory with requirements.txt --- README.md | 6 +- requirements.txt | 2 + venv/bin/activate | 76 - venv/bin/activate.csh | 37 - venv/bin/activate.fish | 75 - venv/bin/chardetect | 11 - venv/bin/crypto | 11 - venv/bin/decrypto | 11 - venv/bin/easy_install | 12 - venv/bin/easy_install-3.6 | 12 - venv/bin/naked | 11 - venv/bin/pip | 12 - venv/bin/pip3 | 12 - venv/bin/pip3.6 | 12 - venv/bin/pwm | 11 - venv/bin/python | Bin 4576440 -> 0 bytes venv/bin/python3 | Bin 4576440 -> 0 bytes venv/bin/python3.6 | Bin 4576440 -> 0 bytes .../Naked-0.1.31.dist-info/DESCRIPTION.rst | 36 - .../Naked-0.1.31.dist-info/INSTALLER | 1 - .../Naked-0.1.31.dist-info/METADATA | 61 - .../Naked-0.1.31.dist-info/RECORD | 118 - .../Naked-0.1.31.dist-info/WHEEL | 6 - .../Naked-0.1.31.dist-info/entry_points.txt | 3 - .../Naked-0.1.31.dist-info/pydist.json | 1 - .../Naked-0.1.31.dist-info/top_level.txt | 1 - .../python3.6/site-packages/Naked/__init__.py | 0 venv/lib/python3.6/site-packages/Naked/app.py | 229 - .../site-packages/Naked/commandline.py | 371 - .../site-packages/Naked/commands/__init__.py | 0 .../site-packages/Naked/commands/args.py | 120 - .../site-packages/Naked/commands/build.py | 40 - .../Naked/commands/classifier.py | 60 - .../site-packages/Naked/commands/dist.py | 93 - .../site-packages/Naked/commands/help.py | 17 - .../site-packages/Naked/commands/locate.py | 51 - .../site-packages/Naked/commands/make.py | 388 - .../site-packages/Naked/commands/profile.py | 56 - .../site-packages/Naked/commands/pyh.py | 48 - .../site-packages/Naked/commands/test.py | 204 - .../site-packages/Naked/commands/usage.py | 17 - .../site-packages/Naked/commands/version.py | 25 - .../site-packages/Naked/scratchpad.py | 28 - .../python3.6/site-packages/Naked/settings.py | 86 - .../site-packages/Naked/templates/__init__.py | 0 .../site-packages/Naked/templates/app_file.py | 101 - .../site-packages/Naked/templates/licenses.py | 140 - .../Naked/templates/manifest_in_file.py | 5 - .../Naked/templates/profiler_file.py | 45 - .../Naked/templates/pypush_file.py | 32 - .../Naked/templates/readme_md_file.py | 8 - .../Naked/templates/settings_file.py | 35 - .../Naked/templates/setup_cfg_file.py | 8 - .../Naked/templates/setup_py_file.py | 56 - .../site-packages/Naked/toolshed/__init__.py | 0 .../Naked/toolshed/benchmarking.py | 463 - .../Naked/toolshed/c/__init__.py | 0 .../Naked/toolshed/c/benchmarking.c | 16546 - .../Naked/toolshed/c/benchmarking.pyx | 463 - .../site-packages/Naked/toolshed/c/build.sh | 1 - .../site-packages/Naked/toolshed/c/casts.c | 5294 - .../site-packages/Naked/toolshed/c/casts.pyx | 117 - .../site-packages/Naked/toolshed/c/cstate.c | 3202 - .../site-packages/Naked/toolshed/c/cstate.pyx | 35 - .../Naked/toolshed/c/cythonize.sh | 15 - .../site-packages/Naked/toolshed/c/file.c | 12542 - .../site-packages/Naked/toolshed/c/file.pyx | 377 - .../site-packages/Naked/toolshed/c/ink.c | 4232 - .../site-packages/Naked/toolshed/c/ink.pyx | 106 - .../site-packages/Naked/toolshed/c/network.c | 10338 - .../Naked/toolshed/c/network.pyx | 352 - .../site-packages/Naked/toolshed/c/python.c | 2650 - .../site-packages/Naked/toolshed/c/python.pyx | 53 - .../site-packages/Naked/toolshed/c/setup.py | 18 - .../site-packages/Naked/toolshed/c/shell.c | 8175 - .../site-packages/Naked/toolshed/c/shell.pyx | 264 - .../site-packages/Naked/toolshed/c/system.c | 13040 - .../site-packages/Naked/toolshed/c/system.pyx | 554 - .../site-packages/Naked/toolshed/c/types.c | 24613 - .../site-packages/Naked/toolshed/c/types.pyx | 999 - .../site-packages/Naked/toolshed/casts.py | 119 - .../site-packages/Naked/toolshed/file.py | 376 - .../site-packages/Naked/toolshed/git.py | 7 - .../site-packages/Naked/toolshed/ink.py | 105 - .../site-packages/Naked/toolshed/iter.py | 14 - .../site-packages/Naked/toolshed/network.py | 351 - .../site-packages/Naked/toolshed/python.py | 53 - .../site-packages/Naked/toolshed/shell.py | 263 - .../site-packages/Naked/toolshed/state.py | 34 - .../site-packages/Naked/toolshed/system.py | 553 - .../site-packages/Naked/toolshed/types.py | 992 - .../PyYAML-3.13-py3.6.egg-info/PKG-INFO | 33 - .../PyYAML-3.13-py3.6.egg-info/SOURCES.txt | 27 - .../dependency_links.txt | 1 - .../installed-files.txt | 38 - .../PyYAML-3.13-py3.6.egg-info/top_level.txt | 2 - .../aadict-0.2.3.dist-info/DESCRIPTION.rst | 124 - .../aadict-0.2.3.dist-info/INSTALLER | 1 - .../aadict-0.2.3.dist-info/METADATA | 142 - .../aadict-0.2.3.dist-info/RECORD | 12 - .../aadict-0.2.3.dist-info/WHEEL | 5 - .../aadict-0.2.3.dist-info/metadata.json | 1 - .../aadict-0.2.3.dist-info/top_level.txt | 1 - .../aadict-0.2.3.dist-info/zip-safe | 1 - .../site-packages/aadict/__init__.py | 82 - .../python3.6/site-packages/aadict/test.py | 90 - .../asset-0.6.12.dist-info/DESCRIPTION.rst | 182 - .../asset-0.6.12.dist-info/INSTALLER | 1 - .../asset-0.6.12.dist-info/METADATA | 202 - .../asset-0.6.12.dist-info/RECORD | 26 - .../asset-0.6.12.dist-info/WHEEL | 5 - .../asset-0.6.12.dist-info/metadata.json | 1 - .../asset-0.6.12.dist-info/top_level.txt | 1 - .../asset-0.6.12.dist-info/zip-safe | 1 - .../python3.6/site-packages/asset/__init__.py | 29 - .../python3.6/site-packages/asset/isstr.py | 33 - .../python3.6/site-packages/asset/plugin.py | 442 - .../python3.6/site-packages/asset/resource.py | 314 - .../python3.6/site-packages/asset/symbol.py | 87 - .../lib/python3.6/site-packages/asset/test.py | 233 - .../site-packages/asset/test/data.csv | 2 - .../site-packages/asset/test/data/file1.nl | 2 - .../site-packages/asset/test/data/file2.nl | 1 - .../asset/test/data/subdir/subfile1.nl | 1 - .../site-packages/asset/test_plugin.py | 335 - .../DESCRIPTION.rst | 48 - .../certifi-2018.4.16.dist-info/INSTALLER | 1 - .../certifi-2018.4.16.dist-info/LICENSE.txt | 21 - .../certifi-2018.4.16.dist-info/METADATA | 71 - .../certifi-2018.4.16.dist-info/RECORD | 15 - .../certifi-2018.4.16.dist-info/WHEEL | 6 - .../certifi-2018.4.16.dist-info/metadata.json | 1 - .../certifi-2018.4.16.dist-info/top_level.txt | 1 - .../site-packages/certifi/__init__.py | 3 - .../site-packages/certifi/__main__.py | 2 - .../site-packages/certifi/cacert.pem | 4400 - .../python3.6/site-packages/certifi/core.py | 37 - .../chardet-3.0.4.dist-info/DESCRIPTION.rst | 70 - .../chardet-3.0.4.dist-info/INSTALLER | 1 - .../chardet-3.0.4.dist-info/METADATA | 96 - .../chardet-3.0.4.dist-info/RECORD | 91 - .../chardet-3.0.4.dist-info/WHEEL | 6 - .../chardet-3.0.4.dist-info/entry_points.txt | 3 - .../chardet-3.0.4.dist-info/metadata.json | 1 - .../chardet-3.0.4.dist-info/top_level.txt | 1 - .../site-packages/chardet/__init__.py | 39 - .../site-packages/chardet/big5freq.py | 386 - .../site-packages/chardet/big5prober.py | 47 - .../site-packages/chardet/chardistribution.py | 233 - .../chardet/charsetgroupprober.py | 106 - .../site-packages/chardet/charsetprober.py | 145 - .../site-packages/chardet/cli/__init__.py | 1 - .../site-packages/chardet/cli/chardetect.py | 85 - .../chardet/codingstatemachine.py | 88 - .../python3.6/site-packages/chardet/compat.py | 34 - .../site-packages/chardet/cp949prober.py | 49 - .../python3.6/site-packages/chardet/enums.py | 76 - .../site-packages/chardet/escprober.py | 101 - .../python3.6/site-packages/chardet/escsm.py | 246 - .../site-packages/chardet/eucjpprober.py | 92 - .../site-packages/chardet/euckrfreq.py | 195 - .../site-packages/chardet/euckrprober.py | 47 - .../site-packages/chardet/euctwfreq.py | 387 - .../site-packages/chardet/euctwprober.py | 46 - .../site-packages/chardet/gb2312freq.py | 283 - .../site-packages/chardet/gb2312prober.py | 46 - .../site-packages/chardet/hebrewprober.py | 292 - .../site-packages/chardet/jisfreq.py | 325 - .../python3.6/site-packages/chardet/jpcntx.py | 233 - .../chardet/langbulgarianmodel.py | 228 - .../chardet/langcyrillicmodel.py | 333 - .../site-packages/chardet/langgreekmodel.py | 225 - .../site-packages/chardet/langhebrewmodel.py | 200 - .../chardet/langhungarianmodel.py | 225 - .../site-packages/chardet/langthaimodel.py | 199 - .../site-packages/chardet/langturkishmodel.py | 193 - .../site-packages/chardet/latin1prober.py | 145 - .../site-packages/chardet/mbcharsetprober.py | 91 - .../site-packages/chardet/mbcsgroupprober.py | 54 - .../python3.6/site-packages/chardet/mbcssm.py | 572 - .../site-packages/chardet/sbcharsetprober.py | 132 - .../site-packages/chardet/sbcsgroupprober.py | 73 - .../site-packages/chardet/sjisprober.py | 92 - .../chardet/universaldetector.py | 286 - .../site-packages/chardet/utf8prober.py | 82 - .../site-packages/chardet/version.py | 9 - .../crypto-1.4.1.dist-info/DESCRIPTION.rst | 91 - .../crypto-1.4.1.dist-info/INSTALLER | 1 - .../crypto-1.4.1.dist-info/METADATA | 116 - .../crypto-1.4.1.dist-info/RECORD | 28 - .../crypto-1.4.1.dist-info/WHEEL | 6 - .../crypto-1.4.1.dist-info/entry_points.txt | 4 - .../crypto-1.4.1.dist-info/pydist.json | 1 - .../crypto-1.4.1.dist-info/top_level.txt | 1 - .../site-packages/crypto/__init__.py | 0 .../lib/python3.6/site-packages/crypto/app.py | 262 - .../site-packages/crypto/decryptoapp.py | 380 - .../site-packages/crypto/library/__init__.py | 0 .../site-packages/crypto/library/cryptor.py | 167 - .../site-packages/crypto/library/hash.py | 23 - .../site-packages/crypto/library/package.py | 45 - .../site-packages/crypto/settings.py | 104 - .../python3.6/site-packages/easy-install.pth | 2 - .../globre-0.1.5.dist-info/DESCRIPTION.rst | 159 - .../globre-0.1.5.dist-info/INSTALLER | 1 - .../globre-0.1.5.dist-info/METADATA | 176 - .../globre-0.1.5.dist-info/RECORD | 12 - .../globre-0.1.5.dist-info/WHEEL | 5 - .../globre-0.1.5.dist-info/metadata.json | 1 - .../globre-0.1.5.dist-info/top_level.txt | 1 - .../globre-0.1.5.dist-info/zip-safe | 1 - .../site-packages/globre/__init__.py | 230 - .../python3.6/site-packages/globre/test.py | 199 - .../idna-2.7.dist-info/INSTALLER | 1 - .../idna-2.7.dist-info/LICENSE.txt | 80 - .../site-packages/idna-2.7.dist-info/METADATA | 239 - .../site-packages/idna-2.7.dist-info/RECORD | 22 - .../site-packages/idna-2.7.dist-info/WHEEL | 6 - .../idna-2.7.dist-info/top_level.txt | 1 - .../python3.6/site-packages/idna/__init__.py | 2 - .../lib/python3.6/site-packages/idna/codec.py | 118 - .../python3.6/site-packages/idna/compat.py | 12 - venv/lib/python3.6/site-packages/idna/core.py | 399 - .../python3.6/site-packages/idna/idnadata.py | 1893 - .../python3.6/site-packages/idna/intranges.py | 53 - .../site-packages/idna/package_data.py | 2 - .../python3.6/site-packages/idna/uts46data.py | 8179 - .../DESCRIPTION.rst | 198 - .../passwordmeter-0.1.8.dist-info/INSTALLER | 1 - .../passwordmeter-0.1.8.dist-info/METADATA | 217 - .../passwordmeter-0.1.8.dist-info/RECORD | 19 - .../passwordmeter-0.1.8.dist-info/WHEEL | 5 - .../entry_points.txt | 3 - .../metadata.json | 1 - .../top_level.txt | 1 - .../passwordmeter-0.1.8.dist-info/zip-safe | 1 - .../site-packages/passwordmeter/__init__.py | 247 - .../site-packages/passwordmeter/cli.py | 103 - .../site-packages/passwordmeter/i18n.py | 19 - .../passwordmeter/res/common.txt | 10000 - .../passwordmeter/test_passwordmeter.py | 96 - .../INSTALLER | 1 - .../passwordstrength-0.2.4.dist-info/METADATA | 93 - .../passwordstrength-0.2.4.dist-info/RECORD | 16 - .../passwordstrength-0.2.4.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../database/google-10000-english.txt | 10000 - .../passwordstrength/database/leetspeak.yaml | 18 - .../passwordstrength/database/words.txt | 466544 --------------- .../site-packages/passwordstrength/dir.py | 12 - .../site-packages/passwordstrength/entropy.py | 97 - .../passwordstrength/passwordmeter.py | 274 - .../site-packages/passwordstrength/util.py | 25 - .../pip-10.0.1-py3.6.egg/EGG-INFO/PKG-INFO | 69 - .../pip-10.0.1-py3.6.egg/EGG-INFO/SOURCES.txt | 347 - .../EGG-INFO/dependency_links.txt | 1 - .../EGG-INFO/entry_points.txt | 5 - .../EGG-INFO/not-zip-safe | 1 - .../EGG-INFO/requires.txt | 8 - .../EGG-INFO/top_level.txt | 1 - .../pip-10.0.1-py3.6.egg/pip/__init__.py | 1 - .../pip-10.0.1-py3.6.egg/pip/__main__.py | 19 - .../pip/_internal/__init__.py | 246 - .../pip/_internal/basecommand.py | 373 - .../pip/_internal/baseparser.py | 240 - .../pip/_internal/build_env.py | 92 - .../pip/_internal/cache.py | 202 - .../pip/_internal/cmdoptions.py | 609 - .../pip/_internal/commands/__init__.py | 79 - .../pip/_internal/commands/check.py | 42 - .../pip/_internal/commands/completion.py | 94 - .../pip/_internal/commands/configuration.py | 227 - .../pip/_internal/commands/download.py | 233 - .../pip/_internal/commands/freeze.py | 96 - .../pip/_internal/commands/hash.py | 57 - .../pip/_internal/commands/help.py | 36 - .../pip/_internal/commands/install.py | 502 - .../pip/_internal/commands/list.py | 343 - .../pip/_internal/commands/search.py | 135 - .../pip/_internal/commands/show.py | 164 - .../pip/_internal/commands/uninstall.py | 71 - .../pip/_internal/commands/wheel.py | 179 - .../pip/_internal/compat.py | 235 - .../pip/_internal/configuration.py | 378 - .../pip/_internal/download.py | 922 - .../pip/_internal/exceptions.py | 249 - .../pip/_internal/index.py | 1117 - .../pip/_internal/locations.py | 194 - .../pip/_internal/models/__init__.py | 4 - .../pip/_internal/models/index.py | 15 - .../pip/_internal/operations/__init__.py | 0 .../pip/_internal/operations/check.py | 106 - .../pip/_internal/operations/freeze.py | 252 - .../pip/_internal/operations/prepare.py | 380 - .../pip/_internal/pep425tags.py | 317 - .../pip/_internal/req/__init__.py | 69 - .../pip/_internal/req/req_file.py | 338 - .../pip/_internal/req/req_install.py | 1115 - .../pip/_internal/req/req_set.py | 164 - .../pip/_internal/req/req_uninstall.py | 455 - .../pip/_internal/resolve.py | 354 - .../pip/_internal/status_codes.py | 8 - .../pip/_internal/utils/__init__.py | 0 .../pip/_internal/utils/appdirs.py | 258 - .../pip/_internal/utils/deprecation.py | 77 - .../pip/_internal/utils/encoding.py | 33 - .../pip/_internal/utils/filesystem.py | 28 - .../pip/_internal/utils/glibc.py | 84 - .../pip/_internal/utils/hashes.py | 94 - .../pip/_internal/utils/logging.py | 132 - .../pip/_internal/utils/misc.py | 851 - .../pip/_internal/utils/outdated.py | 163 - .../pip/_internal/utils/packaging.py | 70 - .../pip/_internal/utils/setuptools_build.py | 8 - .../pip/_internal/utils/temp_dir.py | 82 - .../pip/_internal/utils/typing.py | 29 - .../pip/_internal/utils/ui.py | 421 - .../pip/_internal/vcs/__init__.py | 471 - .../pip/_internal/vcs/bazaar.py | 113 - .../pip/_internal/vcs/git.py | 311 - .../pip/_internal/vcs/mercurial.py | 105 - .../pip/_internal/vcs/subversion.py | 271 - .../pip/_internal/wheel.py | 817 - .../pip/_vendor/__init__.py | 109 - .../pip/_vendor/appdirs.py | 604 - .../pip/_vendor/cachecontrol/__init__.py | 11 - .../pip/_vendor/cachecontrol/_cmd.py | 60 - .../pip/_vendor/cachecontrol/adapter.py | 134 - .../pip/_vendor/cachecontrol/cache.py | 39 - .../_vendor/cachecontrol/caches/__init__.py | 2 - .../_vendor/cachecontrol/caches/file_cache.py | 133 - .../cachecontrol/caches/redis_cache.py | 43 - .../pip/_vendor/cachecontrol/compat.py | 29 - .../pip/_vendor/cachecontrol/controller.py | 373 - .../pip/_vendor/cachecontrol/filewrapper.py | 78 - .../pip/_vendor/cachecontrol/heuristics.py | 138 - .../pip/_vendor/cachecontrol/serialize.py | 194 - .../pip/_vendor/cachecontrol/wrapper.py | 27 - .../pip/_vendor/certifi/__init__.py | 3 - .../pip/_vendor/certifi/__main__.py | 2 - .../pip/_vendor/certifi/cacert.pem | 4433 - .../pip/_vendor/certifi/core.py | 37 - .../pip/_vendor/chardet/__init__.py | 39 - .../pip/_vendor/chardet/big5freq.py | 386 - .../pip/_vendor/chardet/big5prober.py | 47 - .../pip/_vendor/chardet/chardistribution.py | 233 - .../pip/_vendor/chardet/charsetgroupprober.py | 106 - .../pip/_vendor/chardet/charsetprober.py | 145 - .../pip/_vendor/chardet/cli/__init__.py | 1 - .../pip/_vendor/chardet/cli/chardetect.py | 85 - .../pip/_vendor/chardet/codingstatemachine.py | 88 - .../pip/_vendor/chardet/compat.py | 34 - .../pip/_vendor/chardet/cp949prober.py | 49 - .../pip/_vendor/chardet/enums.py | 76 - .../pip/_vendor/chardet/escprober.py | 101 - .../pip/_vendor/chardet/escsm.py | 246 - .../pip/_vendor/chardet/eucjpprober.py | 92 - .../pip/_vendor/chardet/euckrfreq.py | 195 - .../pip/_vendor/chardet/euckrprober.py | 47 - .../pip/_vendor/chardet/euctwfreq.py | 387 - .../pip/_vendor/chardet/euctwprober.py | 46 - .../pip/_vendor/chardet/gb2312freq.py | 283 - .../pip/_vendor/chardet/gb2312prober.py | 46 - .../pip/_vendor/chardet/hebrewprober.py | 292 - .../pip/_vendor/chardet/jisfreq.py | 325 - .../pip/_vendor/chardet/jpcntx.py | 233 - .../pip/_vendor/chardet/langbulgarianmodel.py | 228 - .../pip/_vendor/chardet/langcyrillicmodel.py | 333 - .../pip/_vendor/chardet/langgreekmodel.py | 225 - .../pip/_vendor/chardet/langhebrewmodel.py | 200 - .../pip/_vendor/chardet/langhungarianmodel.py | 225 - .../pip/_vendor/chardet/langthaimodel.py | 199 - .../pip/_vendor/chardet/langturkishmodel.py | 193 - .../pip/_vendor/chardet/latin1prober.py | 145 - .../pip/_vendor/chardet/mbcharsetprober.py | 91 - .../pip/_vendor/chardet/mbcsgroupprober.py | 54 - .../pip/_vendor/chardet/mbcssm.py | 572 - .../pip/_vendor/chardet/sbcharsetprober.py | 132 - .../pip/_vendor/chardet/sbcsgroupprober.py | 73 - .../pip/_vendor/chardet/sjisprober.py | 92 - .../pip/_vendor/chardet/universaldetector.py | 286 - .../pip/_vendor/chardet/utf8prober.py | 82 - .../pip/_vendor/chardet/version.py | 9 - .../pip/_vendor/colorama/__init__.py | 7 - .../pip/_vendor/colorama/ansi.py | 102 - .../pip/_vendor/colorama/ansitowin32.py | 236 - .../pip/_vendor/colorama/initialise.py | 82 - .../pip/_vendor/colorama/win32.py | 156 - .../pip/_vendor/colorama/winterm.py | 162 - .../pip/_vendor/distlib/__init__.py | 23 - .../pip/_vendor/distlib/_backport/__init__.py | 6 - .../pip/_vendor/distlib/_backport/misc.py | 41 - .../pip/_vendor/distlib/_backport/shutil.py | 761 - .../_vendor/distlib/_backport/sysconfig.cfg | 84 - .../_vendor/distlib/_backport/sysconfig.py | 788 - .../pip/_vendor/distlib/_backport/tarfile.py | 2607 - .../pip/_vendor/distlib/compat.py | 1120 - .../pip/_vendor/distlib/database.py | 1336 - .../pip/_vendor/distlib/index.py | 516 - .../pip/_vendor/distlib/locators.py | 1292 - .../pip/_vendor/distlib/manifest.py | 393 - .../pip/_vendor/distlib/markers.py | 131 - .../pip/_vendor/distlib/metadata.py | 1091 - .../pip/_vendor/distlib/resources.py | 355 - .../pip/_vendor/distlib/scripts.py | 415 - .../pip/_vendor/distlib/t32.exe | Bin 92672 -> 0 bytes .../pip/_vendor/distlib/t64.exe | Bin 102400 -> 0 bytes .../pip/_vendor/distlib/util.py | 1755 - .../pip/_vendor/distlib/version.py | 736 - .../pip/_vendor/distlib/w32.exe | Bin 89088 -> 0 bytes .../pip/_vendor/distlib/w64.exe | Bin 99328 -> 0 bytes .../pip/_vendor/distlib/wheel.py | 984 - .../pip/_vendor/distro.py | 1104 - .../pip/_vendor/html5lib/__init__.py | 35 - .../pip/_vendor/html5lib/_ihatexml.py | 288 - .../pip/_vendor/html5lib/_inputstream.py | 923 - .../pip/_vendor/html5lib/_tokenizer.py | 1721 - .../pip/_vendor/html5lib/_trie/__init__.py | 14 - .../pip/_vendor/html5lib/_trie/_base.py | 37 - .../pip/_vendor/html5lib/_trie/datrie.py | 44 - .../pip/_vendor/html5lib/_trie/py.py | 67 - .../pip/_vendor/html5lib/_utils.py | 124 - .../pip/_vendor/html5lib/constants.py | 2947 - .../pip/_vendor/html5lib/filters/__init__.py | 0 .../filters/alphabeticalattributes.py | 29 - .../pip/_vendor/html5lib/filters/base.py | 12 - .../html5lib/filters/inject_meta_charset.py | 73 - .../pip/_vendor/html5lib/filters/lint.py | 93 - .../_vendor/html5lib/filters/optionaltags.py | 207 - .../pip/_vendor/html5lib/filters/sanitizer.py | 896 - .../_vendor/html5lib/filters/whitespace.py | 38 - .../pip/_vendor/html5lib/html5parser.py | 2791 - .../pip/_vendor/html5lib/serializer.py | 409 - .../_vendor/html5lib/treeadapters/__init__.py | 30 - .../_vendor/html5lib/treeadapters/genshi.py | 54 - .../pip/_vendor/html5lib/treeadapters/sax.py | 50 - .../_vendor/html5lib/treebuilders/__init__.py | 88 - .../pip/_vendor/html5lib/treebuilders/base.py | 417 - .../pip/_vendor/html5lib/treebuilders/dom.py | 236 - .../_vendor/html5lib/treebuilders/etree.py | 340 - .../html5lib/treebuilders/etree_lxml.py | 366 - .../_vendor/html5lib/treewalkers/__init__.py | 154 - .../pip/_vendor/html5lib/treewalkers/base.py | 252 - .../pip/_vendor/html5lib/treewalkers/dom.py | 43 - .../pip/_vendor/html5lib/treewalkers/etree.py | 130 - .../html5lib/treewalkers/etree_lxml.py | 213 - .../_vendor/html5lib/treewalkers/genshi.py | 69 - .../pip/_vendor/idna/__init__.py | 2 - .../pip/_vendor/idna/codec.py | 118 - .../pip/_vendor/idna/compat.py | 12 - .../pip/_vendor/idna/core.py | 387 - .../pip/_vendor/idna/idnadata.py | 1585 - .../pip/_vendor/idna/intranges.py | 53 - .../pip/_vendor/idna/package_data.py | 2 - .../pip/_vendor/idna/uts46data.py | 7634 - .../pip/_vendor/ipaddress.py | 2419 - .../pip/_vendor/lockfile/__init__.py | 347 - .../pip/_vendor/lockfile/linklockfile.py | 73 - .../pip/_vendor/lockfile/mkdirlockfile.py | 84 - .../pip/_vendor/lockfile/pidlockfile.py | 190 - .../pip/_vendor/lockfile/sqlitelockfile.py | 156 - .../pip/_vendor/lockfile/symlinklockfile.py | 70 - .../pip/_vendor/msgpack/__init__.py | 66 - .../pip/_vendor/msgpack/_version.py | 1 - .../pip/_vendor/msgpack/exceptions.py | 41 - .../pip/_vendor/msgpack/fallback.py | 977 - .../pip/_vendor/packaging/__about__.py | 21 - .../pip/_vendor/packaging/__init__.py | 14 - .../pip/_vendor/packaging/_compat.py | 30 - .../pip/_vendor/packaging/_structures.py | 70 - .../pip/_vendor/packaging/markers.py | 301 - .../pip/_vendor/packaging/requirements.py | 130 - .../pip/_vendor/packaging/specifiers.py | 774 - .../pip/_vendor/packaging/utils.py | 63 - .../pip/_vendor/packaging/version.py | 441 - .../pip/_vendor/pkg_resources/__init__.py | 3125 - .../pip/_vendor/pkg_resources/py31compat.py | 22 - .../pip/_vendor/progress/__init__.py | 127 - .../pip/_vendor/progress/bar.py | 88 - .../pip/_vendor/progress/counter.py | 48 - .../pip/_vendor/progress/helpers.py | 91 - .../pip/_vendor/progress/spinner.py | 44 - .../pip/_vendor/pyparsing.py | 5720 - .../pip/_vendor/pytoml/__init__.py | 3 - .../pip/_vendor/pytoml/core.py | 13 - .../pip/_vendor/pytoml/parser.py | 374 - .../pip/_vendor/pytoml/writer.py | 127 - .../pip/_vendor/requests/__init__.py | 123 - .../pip/_vendor/requests/__version__.py | 14 - .../pip/_vendor/requests/_internal_utils.py | 42 - .../pip/_vendor/requests/adapters.py | 525 - .../pip/_vendor/requests/api.py | 152 - .../pip/_vendor/requests/auth.py | 293 - .../pip/_vendor/requests/certs.py | 18 - .../pip/_vendor/requests/compat.py | 73 - .../pip/_vendor/requests/cookies.py | 542 - .../pip/_vendor/requests/exceptions.py | 122 - .../pip/_vendor/requests/help.py | 120 - .../pip/_vendor/requests/hooks.py | 34 - .../pip/_vendor/requests/models.py | 948 - .../pip/_vendor/requests/packages.py | 16 - .../pip/_vendor/requests/sessions.py | 737 - .../pip/_vendor/requests/status_codes.py | 91 - .../pip/_vendor/requests/structures.py | 105 - .../pip/_vendor/requests/utils.py | 904 - .../pip/_vendor/retrying.py | 267 - .../pip-10.0.1-py3.6.egg/pip/_vendor/six.py | 891 - .../pip/_vendor/urllib3/__init__.py | 97 - .../pip/_vendor/urllib3/_collections.py | 319 - .../pip/_vendor/urllib3/connection.py | 373 - .../pip/_vendor/urllib3/connectionpool.py | 905 - .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../contrib/_securetransport/__init__.py | 0 .../contrib/_securetransport/bindings.py | 593 - .../contrib/_securetransport/low_level.py | 343 - .../pip/_vendor/urllib3/contrib/appengine.py | 296 - .../pip/_vendor/urllib3/contrib/ntlmpool.py | 112 - .../pip/_vendor/urllib3/contrib/pyopenssl.py | 455 - .../urllib3/contrib/securetransport.py | 810 - .../pip/_vendor/urllib3/contrib/socks.py | 188 - .../pip/_vendor/urllib3/exceptions.py | 246 - .../pip/_vendor/urllib3/fields.py | 178 - .../pip/_vendor/urllib3/filepost.py | 94 - .../pip/_vendor/urllib3/packages/__init__.py | 5 - .../urllib3/packages/backports/__init__.py | 0 .../urllib3/packages/backports/makefile.py | 53 - .../_vendor/urllib3/packages/ordered_dict.py | 259 - .../pip/_vendor/urllib3/packages/six.py | 868 - .../packages/ssl_match_hostname/__init__.py | 19 - .../ssl_match_hostname/_implementation.py | 157 - .../pip/_vendor/urllib3/poolmanager.py | 440 - .../pip/_vendor/urllib3/request.py | 148 - .../pip/_vendor/urllib3/response.py | 626 - .../pip/_vendor/urllib3/util/__init__.py | 54 - .../pip/_vendor/urllib3/util/connection.py | 130 - .../pip/_vendor/urllib3/util/request.py | 118 - .../pip/_vendor/urllib3/util/response.py | 81 - .../pip/_vendor/urllib3/util/retry.py | 401 - .../pip/_vendor/urllib3/util/selectors.py | 581 - .../pip/_vendor/urllib3/util/ssl_.py | 341 - .../pip/_vendor/urllib3/util/timeout.py | 242 - .../pip/_vendor/urllib3/util/url.py | 230 - .../pip/_vendor/urllib3/util/wait.py | 40 - .../pip/_vendor/webencodings/__init__.py | 342 - .../pip/_vendor/webencodings/labels.py | 231 - .../pip/_vendor/webencodings/mklabels.py | 59 - .../pip/_vendor/webencodings/tests.py | 153 - .../_vendor/webencodings/x_user_defined.py | 325 - .../pkcs7-0.1.2-py3.6.egg-info/PKG-INFO | 10 - .../pkcs7-0.1.2-py3.6.egg-info/SOURCES.txt | 8 - .../dependency_links.txt | 1 - .../installed-files.txt | 7 - .../pkcs7-0.1.2-py3.6.egg-info/not-zip-safe | 1 - .../pkcs7-0.1.2-py3.6.egg-info/top_level.txt | 1 - .../python3.6/site-packages/pkcs7/__init__.py | 109 - .../progress-1.4-py3.6.egg-info/PKG-INFO | 150 - .../progress-1.4-py3.6.egg-info/SOURCES.txt | 14 - .../dependency_links.txt | 1 - .../installed-files.txt | 14 - .../progress-1.4-py3.6.egg-info/top_level.txt | 1 - .../site-packages/progress/__init__.py | 127 - .../python3.6/site-packages/progress/bar.py | 94 - .../site-packages/progress/counter.py | 48 - .../site-packages/progress/helpers.py | 91 - .../site-packages/progress/spinner.py | 44 - .../requests-2.19.1.dist-info/DESCRIPTION.rst | 1684 - .../requests-2.19.1.dist-info/INSTALLER | 1 - .../requests-2.19.1.dist-info/LICENSE.txt | 13 - .../requests-2.19.1.dist-info/METADATA | 1721 - .../requests-2.19.1.dist-info/RECORD | 44 - .../requests-2.19.1.dist-info/WHEEL | 6 - .../requests-2.19.1.dist-info/metadata.json | 1 - .../requests-2.19.1.dist-info/top_level.txt | 1 - .../site-packages/requests/__init__.py | 136 - .../site-packages/requests/__version__.py | 14 - .../site-packages/requests/_internal_utils.py | 42 - .../site-packages/requests/adapters.py | 530 - .../python3.6/site-packages/requests/api.py | 152 - .../python3.6/site-packages/requests/auth.py | 305 - .../python3.6/site-packages/requests/certs.py | 18 - .../site-packages/requests/compat.py | 71 - .../site-packages/requests/cookies.py | 546 - .../site-packages/requests/exceptions.py | 126 - .../python3.6/site-packages/requests/help.py | 120 - .../python3.6/site-packages/requests/hooks.py | 34 - .../site-packages/requests/models.py | 952 - .../site-packages/requests/packages.py | 14 - .../site-packages/requests/sessions.py | 741 - .../site-packages/requests/status_codes.py | 120 - .../site-packages/requests/structures.py | 103 - .../python3.6/site-packages/requests/utils.py | 976 - .../site-packages/setuptools-39.1.0-py3.6.egg | Bin 563197 -> 0 bytes .../python3.6/site-packages/setuptools.pth | 1 - .../DESCRIPTION.rst | 83 - .../shellescape-3.4.1.dist-info/INSTALLER | 1 - .../shellescape-3.4.1.dist-info/METADATA | 105 - .../shellescape-3.4.1.dist-info/RECORD | 13 - .../shellescape-3.4.1.dist-info/WHEEL | 6 - .../shellescape-3.4.1.dist-info/pydist.json | 1 - .../shellescape-3.4.1.dist-info/top_level.txt | 1 - .../site-packages/shellescape/__init__.py | 4 - .../site-packages/shellescape/main.py | 21 - .../site-packages/shellescape/settings.py | 15 - .../six-1.11.0.dist-info/DESCRIPTION.rst | 27 - .../six-1.11.0.dist-info/INSTALLER | 1 - .../six-1.11.0.dist-info/METADATA | 43 - .../site-packages/six-1.11.0.dist-info/RECORD | 9 - .../site-packages/six-1.11.0.dist-info/WHEEL | 6 - .../six-1.11.0.dist-info/metadata.json | 1 - .../six-1.11.0.dist-info/top_level.txt | 1 - venv/lib/python3.6/site-packages/six.py | 891 - .../urllib3-1.23.dist-info/DESCRIPTION.rst | 1040 - .../urllib3-1.23.dist-info/INSTALLER | 1 - .../urllib3-1.23.dist-info/LICENSE.txt | 19 - .../urllib3-1.23.dist-info/METADATA | 1077 - .../urllib3-1.23.dist-info/RECORD | 80 - .../urllib3-1.23.dist-info/WHEEL | 6 - .../urllib3-1.23.dist-info/metadata.json | 1 - .../urllib3-1.23.dist-info/top_level.txt | 1 - .../site-packages/urllib3/__init__.py | 97 - .../site-packages/urllib3/_collections.py | 332 - .../site-packages/urllib3/connection.py | 403 - .../site-packages/urllib3/connectionpool.py | 906 - .../site-packages/urllib3/contrib/__init__.py | 0 .../contrib/_securetransport/__init__.py | 0 .../contrib/_securetransport/bindings.py | 593 - .../contrib/_securetransport/low_level.py | 346 - .../urllib3/contrib/appengine.py | 305 - .../site-packages/urllib3/contrib/ntlmpool.py | 112 - .../urllib3/contrib/pyopenssl.py | 457 - .../urllib3/contrib/securetransport.py | 804 - .../site-packages/urllib3/contrib/socks.py | 192 - .../site-packages/urllib3/exceptions.py | 246 - .../python3.6/site-packages/urllib3/fields.py | 178 - .../site-packages/urllib3/filepost.py | 98 - .../urllib3/packages/__init__.py | 5 - .../urllib3/packages/backports/__init__.py | 0 .../urllib3/packages/backports/makefile.py | 53 - .../urllib3/packages/ordered_dict.py | 259 - .../site-packages/urllib3/packages/six.py | 868 - .../packages/ssl_match_hostname/__init__.py | 19 - .../ssl_match_hostname/_implementation.py | 157 - .../site-packages/urllib3/poolmanager.py | 449 - .../site-packages/urllib3/request.py | 150 - .../site-packages/urllib3/response.py | 676 - .../site-packages/urllib3/util/__init__.py | 54 - .../site-packages/urllib3/util/connection.py | 126 - .../site-packages/urllib3/util/queue.py | 21 - .../site-packages/urllib3/util/request.py | 118 - .../site-packages/urllib3/util/response.py | 81 - .../site-packages/urllib3/util/retry.py | 411 - .../site-packages/urllib3/util/ssl_.py | 396 - .../site-packages/urllib3/util/timeout.py | 242 - .../site-packages/urllib3/util/url.py | 230 - .../site-packages/urllib3/util/wait.py | 153 - .../python3.6/site-packages/yaml/__init__.py | 312 - .../python3.6/site-packages/yaml/composer.py | 139 - .../site-packages/yaml/constructor.py | 686 - .../lib/python3.6/site-packages/yaml/cyaml.py | 85 - .../python3.6/site-packages/yaml/dumper.py | 62 - .../python3.6/site-packages/yaml/emitter.py | 1137 - .../lib/python3.6/site-packages/yaml/error.py | 75 - .../python3.6/site-packages/yaml/events.py | 86 - .../python3.6/site-packages/yaml/loader.py | 40 - .../lib/python3.6/site-packages/yaml/nodes.py | 49 - .../python3.6/site-packages/yaml/parser.py | 589 - .../python3.6/site-packages/yaml/reader.py | 192 - .../site-packages/yaml/representer.py | 387 - .../python3.6/site-packages/yaml/resolver.py | 227 - .../python3.6/site-packages/yaml/scanner.py | 1444 - .../site-packages/yaml/serializer.py | 111 - .../python3.6/site-packages/yaml/tokens.py | 104 - venv/lib64 | 1 - venv/pip-selfcheck.json | 1 - venv/pyvenv.cfg | 3 - 675 files changed, 5 insertions(+), 754077 deletions(-) create mode 100644 requirements.txt delete mode 100644 venv/bin/activate delete mode 100644 venv/bin/activate.csh delete mode 100644 venv/bin/activate.fish delete mode 100755 venv/bin/chardetect delete mode 100755 venv/bin/crypto delete mode 100755 venv/bin/decrypto delete mode 100755 venv/bin/easy_install delete mode 100755 venv/bin/easy_install-3.6 delete mode 100755 venv/bin/naked delete mode 100755 venv/bin/pip delete mode 100755 venv/bin/pip3 delete mode 100755 venv/bin/pip3.6 delete mode 100755 venv/bin/pwm delete mode 100755 venv/bin/python delete mode 100755 venv/bin/python3 delete mode 100755 venv/bin/python3.6 delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/entry_points.txt delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/pydist.json delete mode 100644 venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/Naked/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/app.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commandline.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/args.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/build.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/classifier.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/dist.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/help.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/locate.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/make.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/profile.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/pyh.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/test.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/usage.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/commands/version.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/scratchpad.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/settings.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/app_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/licenses.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/manifest_in_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/profiler_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/pypush_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/readme_md_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/settings_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/setup_cfg_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/templates/setup_py_file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/benchmarking.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.pyx delete mode 100755 venv/lib/python3.6/site-packages/Naked/toolshed/c/build.sh delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.pyx delete mode 100755 venv/lib/python3.6/site-packages/Naked/toolshed/c/cythonize.sh delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/file.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/file.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/network.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/network.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/python.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/python.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/setup.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/system.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/system.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/types.c delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/c/types.pyx delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/casts.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/file.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/git.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/ink.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/iter.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/network.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/python.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/shell.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/state.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/system.py delete mode 100644 venv/lib/python3.6/site-packages/Naked/toolshed/types.py delete mode 100644 venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/PKG-INFO delete mode 100644 venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/SOURCES.txt delete mode 100644 venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/dependency_links.txt delete mode 100644 venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/installed-files.txt delete mode 100644 venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/zip-safe delete mode 100644 venv/lib/python3.6/site-packages/aadict/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/aadict/test.py delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/zip-safe delete mode 100644 venv/lib/python3.6/site-packages/asset/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/asset/isstr.py delete mode 100644 venv/lib/python3.6/site-packages/asset/plugin.py delete mode 100644 venv/lib/python3.6/site-packages/asset/resource.py delete mode 100644 venv/lib/python3.6/site-packages/asset/symbol.py delete mode 100644 venv/lib/python3.6/site-packages/asset/test.py delete mode 100644 venv/lib/python3.6/site-packages/asset/test/data.csv delete mode 100644 venv/lib/python3.6/site-packages/asset/test/data/file1.nl delete mode 100644 venv/lib/python3.6/site-packages/asset/test/data/file2.nl delete mode 100644 venv/lib/python3.6/site-packages/asset/test/data/subdir/subfile1.nl delete mode 100644 venv/lib/python3.6/site-packages/asset/test_plugin.py delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/LICENSE.txt delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/certifi/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/certifi/__main__.py delete mode 100644 venv/lib/python3.6/site-packages/certifi/cacert.pem delete mode 100644 venv/lib/python3.6/site-packages/certifi/core.py delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/chardet/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/big5freq.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/big5prober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/chardistribution.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/charsetgroupprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/charsetprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/cli/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/cli/chardetect.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/codingstatemachine.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/compat.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/cp949prober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/enums.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/escprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/escsm.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/eucjpprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/euckrfreq.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/euckrprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/euctwfreq.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/euctwprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/gb2312freq.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/gb2312prober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/hebrewprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/jisfreq.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/jpcntx.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langbulgarianmodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langcyrillicmodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langgreekmodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langhebrewmodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langhungarianmodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langthaimodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/langturkishmodel.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/latin1prober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/mbcharsetprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/mbcsgroupprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/mbcssm.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/sbcharsetprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/sbcsgroupprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/sjisprober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/universaldetector.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/utf8prober.py delete mode 100644 venv/lib/python3.6/site-packages/chardet/version.py delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/entry_points.txt delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/pydist.json delete mode 100644 venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/crypto/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/app.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/decryptoapp.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/library/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/library/cryptor.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/library/hash.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/library/package.py delete mode 100644 venv/lib/python3.6/site-packages/crypto/settings.py delete mode 100644 venv/lib/python3.6/site-packages/easy-install.pth delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/zip-safe delete mode 100644 venv/lib/python3.6/site-packages/globre/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/globre/test.py delete mode 100644 venv/lib/python3.6/site-packages/idna-2.7.dist-info/INSTALLER delete mode 100755 venv/lib/python3.6/site-packages/idna-2.7.dist-info/LICENSE.txt delete mode 100755 venv/lib/python3.6/site-packages/idna-2.7.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/idna-2.7.dist-info/RECORD delete mode 100755 venv/lib/python3.6/site-packages/idna-2.7.dist-info/WHEEL delete mode 100755 venv/lib/python3.6/site-packages/idna-2.7.dist-info/top_level.txt delete mode 100755 venv/lib/python3.6/site-packages/idna/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/idna/codec.py delete mode 100755 venv/lib/python3.6/site-packages/idna/compat.py delete mode 100755 venv/lib/python3.6/site-packages/idna/core.py delete mode 100755 venv/lib/python3.6/site-packages/idna/idnadata.py delete mode 100755 venv/lib/python3.6/site-packages/idna/intranges.py delete mode 100755 venv/lib/python3.6/site-packages/idna/package_data.py delete mode 100755 venv/lib/python3.6/site-packages/idna/uts46data.py delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/entry_points.txt delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/zip-safe delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter/cli.py delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter/i18n.py delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter/res/common.txt delete mode 100644 venv/lib/python3.6/site-packages/passwordmeter/test_passwordmeter.py delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/database/google-10000-english.txt delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/database/leetspeak.yaml delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/database/words.txt delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/dir.py delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/entropy.py delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/passwordmeter.py delete mode 100644 venv/lib/python3.6/site-packages/passwordstrength/util.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/PKG-INFO delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/SOURCES.txt delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/dependency_links.txt delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/entry_points.txt delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/not-zip-safe delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/requires.txt delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__main__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/basecommand.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/baseparser.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/build_env.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cache.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cmdoptions.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/check.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/completion.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/configuration.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/download.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/freeze.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/hash.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/help.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/install.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/list.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/search.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/show.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/uninstall.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/wheel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/configuration.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/download.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/exceptions.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/index.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/locations.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/index.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/check.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/freeze.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/prepare.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/pep425tags.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_file.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_install.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_set.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_uninstall.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/resolve.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/status_codes.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/appdirs.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/deprecation.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/encoding.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/filesystem.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/glibc.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/hashes.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/logging.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/misc.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/outdated.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/packaging.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/setuptools_build.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/temp_dir.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/typing.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/ui.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/bazaar.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/git.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/mercurial.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/subversion.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/wheel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/appdirs.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__main__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/cacert.pem delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/core.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5freq.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5prober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/chardistribution.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetgroupprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/chardetect.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/codingstatemachine.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cp949prober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/enums.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escsm.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/eucjpprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrfreq.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwfreq.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312freq.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312prober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/hebrewprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jisfreq.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jpcntx.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langbulgarianmodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langcyrillicmodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langgreekmodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhebrewmodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhungarianmodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langthaimodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langturkishmodel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/latin1prober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcharsetprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcsgroupprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcssm.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcharsetprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcsgroupprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sjisprober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/universaldetector.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/utf8prober.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/version.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/win32.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/database.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/index.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/locators.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/markers.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/resources.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py delete mode 100755 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/t32.exe delete mode 100755 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/t64.exe delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/util.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/version.py delete mode 100755 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/w32.exe delete mode 100755 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/w64.exe delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distro.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/serializer.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/genshi.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/sax.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/base.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/dom.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree_lxml.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/base.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/dom.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree_lxml.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/genshi.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/codec.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/core.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/idnadata.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/intranges.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/package_data.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/uts46data.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/ipaddress.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/linklockfile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/mkdirlockfile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/pidlockfile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/sqlitelockfile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/symlinklockfile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/_version.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/exceptions.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/fallback.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__about__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_structures.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/markers.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/requirements.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/specifiers.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/utils.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/version.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/py31compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/bar.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/counter.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/helpers.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/spinner.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pyparsing.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/core.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/parser.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/writer.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__version__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/_internal_utils.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/adapters.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/api.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/auth.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/certs.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/compat.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/cookies.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/exceptions.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/help.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/hooks.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/models.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/packages.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/sessions.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/status_codes.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/structures.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/utils.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/retrying.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/six.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/_collections.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connection.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connectionpool.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/bindings.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/low_level.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/appengine.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/ntlmpool.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/pyopenssl.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/securetransport.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/socks.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/exceptions.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/fields.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/filepost.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/makefile.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ordered_dict.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/six.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/poolmanager.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/request.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/response.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/connection.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/request.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/response.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/retry.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/selectors.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/ssl_.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/timeout.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/url.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/wait.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/labels.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/mklabels.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/tests.py delete mode 100644 venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/x_user_defined.py delete mode 100644 venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/PKG-INFO delete mode 100644 venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/SOURCES.txt delete mode 100644 venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/dependency_links.txt delete mode 100644 venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/installed-files.txt delete mode 100644 venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/not-zip-safe delete mode 100644 venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/pkcs7/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/PKG-INFO delete mode 100644 venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/SOURCES.txt delete mode 100644 venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/dependency_links.txt delete mode 100644 venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/installed-files.txt delete mode 100644 venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/progress/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/progress/bar.py delete mode 100644 venv/lib/python3.6/site-packages/progress/counter.py delete mode 100644 venv/lib/python3.6/site-packages/progress/helpers.py delete mode 100644 venv/lib/python3.6/site-packages/progress/spinner.py delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/LICENSE.txt delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/requests/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/requests/__version__.py delete mode 100644 venv/lib/python3.6/site-packages/requests/_internal_utils.py delete mode 100644 venv/lib/python3.6/site-packages/requests/adapters.py delete mode 100644 venv/lib/python3.6/site-packages/requests/api.py delete mode 100644 venv/lib/python3.6/site-packages/requests/auth.py delete mode 100644 venv/lib/python3.6/site-packages/requests/certs.py delete mode 100644 venv/lib/python3.6/site-packages/requests/compat.py delete mode 100644 venv/lib/python3.6/site-packages/requests/cookies.py delete mode 100644 venv/lib/python3.6/site-packages/requests/exceptions.py delete mode 100644 venv/lib/python3.6/site-packages/requests/help.py delete mode 100644 venv/lib/python3.6/site-packages/requests/hooks.py delete mode 100644 venv/lib/python3.6/site-packages/requests/models.py delete mode 100644 venv/lib/python3.6/site-packages/requests/packages.py delete mode 100644 venv/lib/python3.6/site-packages/requests/sessions.py delete mode 100644 venv/lib/python3.6/site-packages/requests/status_codes.py delete mode 100644 venv/lib/python3.6/site-packages/requests/structures.py delete mode 100644 venv/lib/python3.6/site-packages/requests/utils.py delete mode 100644 venv/lib/python3.6/site-packages/setuptools-39.1.0-py3.6.egg delete mode 100644 venv/lib/python3.6/site-packages/setuptools.pth delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/pydist.json delete mode 100644 venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/shellescape/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/shellescape/main.py delete mode 100644 venv/lib/python3.6/site-packages/shellescape/settings.py delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/INSTALLER delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/RECORD delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/WHEEL delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/metadata.json delete mode 100644 venv/lib/python3.6/site-packages/six-1.11.0.dist-info/top_level.txt delete mode 100644 venv/lib/python3.6/site-packages/six.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/DESCRIPTION.rst delete mode 100644 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/INSTALLER delete mode 100755 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/LICENSE.txt delete mode 100755 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/METADATA delete mode 100644 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/RECORD delete mode 100755 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/WHEEL delete mode 100755 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/metadata.json delete mode 100755 venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/top_level.txt delete mode 100755 venv/lib/python3.6/site-packages/urllib3/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/_collections.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/connection.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/connectionpool.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/bindings.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/low_level.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/appengine.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/ntlmpool.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/securetransport.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/contrib/socks.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/exceptions.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/fields.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/filepost.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/backports/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/backports/makefile.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/ordered_dict.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/six.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/poolmanager.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/request.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/response.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/__init__.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/connection.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/queue.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/request.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/response.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/retry.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/ssl_.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/timeout.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/url.py delete mode 100755 venv/lib/python3.6/site-packages/urllib3/util/wait.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/__init__.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/composer.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/constructor.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/cyaml.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/dumper.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/emitter.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/error.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/events.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/loader.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/nodes.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/parser.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/reader.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/representer.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/resolver.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/scanner.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/serializer.py delete mode 100644 venv/lib/python3.6/site-packages/yaml/tokens.py delete mode 120000 venv/lib64 delete mode 100644 venv/pip-selfcheck.json delete mode 100644 venv/pyvenv.cfg diff --git a/README.md b/README.md index f864f9a..b70a5af 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,10 @@ $ python3 Source.py ## Dependencies -You must have Python 3.x and Pycryptodome installed. In addition to this, several custom packages are included in the bin folder of the Repository.. +You must have Python 3.x with `pycryptodome` and `progress` installed. To install these packages, run the following command: ```sh - pip install pycryptodome - ``` +pip install -r requirements.txt +``` Leave a star and check out more amazing codes by Ankush Sharma diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e07463a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +pycryptodome==3.9.0 +progress==1.5 diff --git a/venv/bin/activate b/venv/bin/activate deleted file mode 100644 index 7cae29a..0000000 --- a/venv/bin/activate +++ /dev/null @@ -1,76 +0,0 @@ -# This file must be used with "source bin/activate" *from bash* -# you cannot run it directly - -deactivate () { - # reset old environment variables - if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then - PATH="${_OLD_VIRTUAL_PATH:-}" - export PATH - unset _OLD_VIRTUAL_PATH - fi - if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then - PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" - export PYTHONHOME - unset _OLD_VIRTUAL_PYTHONHOME - fi - - # This should detect bash and zsh, which have a hash command that must - # be called to get it to forget past commands. Without forgetting - # past commands the $PATH changes we made may not be respected - if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r - fi - - if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then - PS1="${_OLD_VIRTUAL_PS1:-}" - export PS1 - unset _OLD_VIRTUAL_PS1 - fi - - unset VIRTUAL_ENV - if [ ! "$1" = "nondestructive" ] ; then - # Self destruct! - unset -f deactivate - fi -} - -# unset irrelevant variables -deactivate nondestructive - -VIRTUAL_ENV="/home/ankush/PycharmProjects/Encryptor/venv" -export VIRTUAL_ENV - -_OLD_VIRTUAL_PATH="$PATH" -PATH="$VIRTUAL_ENV/bin:$PATH" -export PATH - -# unset PYTHONHOME if set -# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) -# could use `if (set -u; : $PYTHONHOME) ;` in bash -if [ -n "${PYTHONHOME:-}" ] ; then - _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" - unset PYTHONHOME -fi - -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then - _OLD_VIRTUAL_PS1="${PS1:-}" - if [ "x(venv) " != x ] ; then - PS1="(venv) ${PS1:-}" - else - if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" - else - PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" - fi - fi - export PS1 -fi - -# This should detect bash and zsh, which have a hash command that must -# be called to get it to forget past commands. Without forgetting -# past commands the $PATH changes we made may not be respected -if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then - hash -r -fi diff --git a/venv/bin/activate.csh b/venv/bin/activate.csh deleted file mode 100644 index db2fbbe..0000000 --- a/venv/bin/activate.csh +++ /dev/null @@ -1,37 +0,0 @@ -# This file must be used with "source bin/activate.csh" *from csh*. -# You cannot run it directly. -# Created by Davide Di Blasi . -# Ported to Python 3.3 venv by Andrew Svetlov - -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate' - -# Unset irrelevant variables. -deactivate nondestructive - -setenv VIRTUAL_ENV "/home/ankush/PycharmProjects/Encryptor/venv" - -set _OLD_VIRTUAL_PATH="$PATH" -setenv PATH "$VIRTUAL_ENV/bin:$PATH" - - -set _OLD_VIRTUAL_PROMPT="$prompt" - -if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then - if ("venv" != "") then - set env_name = "venv" - else - if (`basename "VIRTUAL_ENV"` == "__") then - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - set env_name = `basename \`dirname "$VIRTUAL_ENV"\`` - else - set env_name = `basename "$VIRTUAL_ENV"` - endif - endif - set prompt = "[$env_name] $prompt" - unset env_name -endif - -alias pydoc python -m pydoc - -rehash diff --git a/venv/bin/activate.fish b/venv/bin/activate.fish deleted file mode 100644 index b91500d..0000000 --- a/venv/bin/activate.fish +++ /dev/null @@ -1,75 +0,0 @@ -# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org) -# you cannot run it directly - -function deactivate -d "Exit virtualenv and return to normal shell environment" - # reset old environment variables - if test -n "$_OLD_VIRTUAL_PATH" - set -gx PATH $_OLD_VIRTUAL_PATH - set -e _OLD_VIRTUAL_PATH - end - if test -n "$_OLD_VIRTUAL_PYTHONHOME" - set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME - set -e _OLD_VIRTUAL_PYTHONHOME - end - - if test -n "$_OLD_FISH_PROMPT_OVERRIDE" - functions -e fish_prompt - set -e _OLD_FISH_PROMPT_OVERRIDE - functions -c _old_fish_prompt fish_prompt - functions -e _old_fish_prompt - end - - set -e VIRTUAL_ENV - if test "$argv[1]" != "nondestructive" - # Self destruct! - functions -e deactivate - end -end - -# unset irrelevant variables -deactivate nondestructive - -set -gx VIRTUAL_ENV "/home/ankush/PycharmProjects/Encryptor/venv" - -set -gx _OLD_VIRTUAL_PATH $PATH -set -gx PATH "$VIRTUAL_ENV/bin" $PATH - -# unset PYTHONHOME if set -if set -q PYTHONHOME - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME - set -e PYTHONHOME -end - -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" - # fish uses a function instead of an env var to generate the prompt. - - # save the current fish_prompt function as the function _old_fish_prompt - functions -c fish_prompt _old_fish_prompt - - # with the original prompt function renamed, we can override with our own. - function fish_prompt - # Save the return status of the last command - set -l old_status $status - - # Prompt override? - if test -n "(venv) " - printf "%s%s" "(venv) " (set_color normal) - else - # ...Otherwise, prepend env - set -l _checkbase (basename "$VIRTUAL_ENV") - if test $_checkbase = "__" - # special case for Aspen magic directories - # see http://www.zetadev.com/software/aspen/ - printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal) - else - printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal) - end - end - - # Restore the return status of the previous command. - echo "exit $old_status" | . - _old_fish_prompt - end - - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" -end diff --git a/venv/bin/chardetect b/venv/bin/chardetect deleted file mode 100755 index 8135630..0000000 --- a/venv/bin/chardetect +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from chardet.cli.chardetect import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/venv/bin/crypto b/venv/bin/crypto deleted file mode 100755 index da551e3..0000000 --- a/venv/bin/crypto +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from crypto.app import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/venv/bin/decrypto b/venv/bin/decrypto deleted file mode 100755 index 801b4b7..0000000 --- a/venv/bin/decrypto +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from crypto.decryptoapp import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/venv/bin/easy_install b/venv/bin/easy_install deleted file mode 100755 index 6bfc36a..0000000 --- a/venv/bin/easy_install +++ /dev/null @@ -1,12 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python -# EASY-INSTALL-ENTRY-SCRIPT: 'setuptools==39.1.0','console_scripts','easy_install' -__requires__ = 'setuptools==39.1.0' -import re -import sys -from pkg_resources import load_entry_point - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit( - load_entry_point('setuptools==39.1.0', 'console_scripts', 'easy_install')() - ) diff --git a/venv/bin/easy_install-3.6 b/venv/bin/easy_install-3.6 deleted file mode 100755 index 753da70..0000000 --- a/venv/bin/easy_install-3.6 +++ /dev/null @@ -1,12 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python -# EASY-INSTALL-ENTRY-SCRIPT: 'setuptools==39.1.0','console_scripts','easy_install-3.6' -__requires__ = 'setuptools==39.1.0' -import re -import sys -from pkg_resources import load_entry_point - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit( - load_entry_point('setuptools==39.1.0', 'console_scripts', 'easy_install-3.6')() - ) diff --git a/venv/bin/naked b/venv/bin/naked deleted file mode 100755 index beac5eb..0000000 --- a/venv/bin/naked +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from Naked.app import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/venv/bin/pip b/venv/bin/pip deleted file mode 100755 index 72ed380..0000000 --- a/venv/bin/pip +++ /dev/null @@ -1,12 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python -# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip' -__requires__ = 'pip==10.0.1' -import re -import sys -from pkg_resources import load_entry_point - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit( - load_entry_point('pip==10.0.1', 'console_scripts', 'pip')() - ) diff --git a/venv/bin/pip3 b/venv/bin/pip3 deleted file mode 100755 index 975ada3..0000000 --- a/venv/bin/pip3 +++ /dev/null @@ -1,12 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python -# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip3' -__requires__ = 'pip==10.0.1' -import re -import sys -from pkg_resources import load_entry_point - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit( - load_entry_point('pip==10.0.1', 'console_scripts', 'pip3')() - ) diff --git a/venv/bin/pip3.6 b/venv/bin/pip3.6 deleted file mode 100755 index ae1f9ff..0000000 --- a/venv/bin/pip3.6 +++ /dev/null @@ -1,12 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python -# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip3.6' -__requires__ = 'pip==10.0.1' -import re -import sys -from pkg_resources import load_entry_point - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit( - load_entry_point('pip==10.0.1', 'console_scripts', 'pip3.6')() - ) diff --git a/venv/bin/pwm b/venv/bin/pwm deleted file mode 100755 index 9057371..0000000 --- a/venv/bin/pwm +++ /dev/null @@ -1,11 +0,0 @@ -#!/home/ankush/PycharmProjects/Encryptor/venv/bin/python - -# -*- coding: utf-8 -*- -import re -import sys - -from passwordmeter.cli import main - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(main()) diff --git a/venv/bin/python b/venv/bin/python deleted file mode 100755 index 7828e4c6bc8067f2bc2c02123412cc532b3daa48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4576440 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

iLR?7f- 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 UkE{vnZXHO-rf{vzKJN-gXv;>7Pf- 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%0A(}W0CHQ``7Ph_B>srJEviiu6ux-UdyHxBC&V~&R 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∨>j98tCGTgaRxyM$LPrDy4~26o&o_3bT2=J0nT{ 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

v_ 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 t~U%+~L` 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%0AH<|3R#iz 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 ?6b2@Sq9{)w$|D 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

_^7#q_$ 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%0DePhGB}MzZ2!1i{Sm!K(2dv)3$B* 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 z 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

@=5r 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

P^ldr@XEjTk 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 z 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

QAqNas{K-E;)-F+3pO z>!GfN(@7@<2Rd0eL^$PI{1_hURybGVcNKnD;&-^0Hr3#qLI)76DZv3~13*w;!eJCx zB!a_`>#xC&fgseuK`1B|;V=|rIyejknGOykg-i#B2$1REFl&(J;1C1S92{auAtBA- zi5QUG;1C0=B)y%dU5OtburdJ$v2#@y4#IK`7Y@R5#kQ9VwQvwSmu2C696yFV^=kYW z6dHaw3<`Zd90rB<9u6|XHBvZ4=mtXfRroPHl<&QrUDxBs;B14=F2u|x;Nm45W`%9g z*@euq325yR&NcY)Gb+3j72df4A5hg?zJr60sOrx3*Wq_9egLiqa6Qsp4;U&Kt5kQ< zxdqNfK5gXFseC$>Pu+a#=2I7+y7+`xQXj()v7`?7rciyU)8MoAQX8+u4>?P1yaqqy znu{@T5N0F7u=-M`UWXsTq4H9vBG{=P!|!VRuEGxiPes7)>+wUlZiMSbxNd}Fz0rgU z9E9vf$Zmv0wWYccvI`+exT!7#?Lw4Yh_VX-QDdnt1SHL-PC-a48o)uMsJ+xF2nni9 zfofBz#1twqwEJ(ao(-b&}ki?xr+i-FM=gRa2du!?Qd+`H%N}tzPOJlA9HO>97iH|XC zPYq)pr0%=nVbH%heGX@Ca?2>Det3hy0x-JtUL8O%C#TLC9t1~7GKh+gxRl@~UjKlb z32>#r4%{&y%5FSkWVrw~bR-J*0>)E^;1SmRVf-5C^oS^v-!#O=G;EO2m;|06w%iD3 zdzv#>4q<8n0#E5X=s?qO6Xu_H;U=NpkcN); zZhVD-dKw#I9&yV{pHkh>BB!!C& z>|y6Wx(D~=4*Nibb{caxGJ5zhWX8pUG;Vu0b&fqUP8!;ywxeAu7ZN01x8t%ldXNU; zob(5XG2|i|f-v?L+AoVi-&h?!^W5@P_{pza2wgpewU>BsDmk?!7sU zo8~ckiia@J;NwQwG*l$#@*^)C5tnz~+6O)=h!L8*2=6fz9olI4}~-3y?_r zAjC3yY1n#~_cY{pkQVOvfI&GF3=a@((T04y0a~WJsa)DsgJNkAvrYC#5N-WM0qi6H zC|~i!Pgqc4R|EA0&xlBubJWK=1RhBJxW3dq;@Y(OBO(;|);+i5NzM7m!{BaYOiV<= z1ME(yx|mYm&^_q^RNeq+jxIWFEsZ6EG*+?Dm}2Fhz1AMx!wvWV+h~yC?ExQ#p{PgR zU@%1rfp@BQ$zJTyJ=|{}KzS$yfY7#sYXy%xVa*9w$I82yfRrb|#!V*@dN-I5OC|CTspVlheTxfsbV!al0&J{}B5RD}g^yOXY z^GOBtkY{o=tWYv=`!3A*nO(3qShw5-?HB5ACnjL&ow)TEcVnb?Vm5?JtJ#8ZZ%A|5 zg&4AGc}E&bzq>JC;r&oZK_700uJMcbA-g+vp_XAql;}IQpF=LPeTbvNcBZi%6b0hB z6%OVs_rgPa<4$MP`?fvXZpTMlZfv~5o>4E`xZd&w@oKoB0yMXED2=<$^j4<3$)jY| z8@-c6xD^-K_TQe~Y8OQ!yI7(AQra$dfnS4;m;=&)FgZN)1AZ7P?}Uq|UG54~JmPgH zez?~4Zn$^~B0~9b>xNx+ibuSnGPmGT>tX6O3;aQwu$fLosbf4#8j*w`o2C+ z_|jNr*^QDa^IZnwBy;xY_(T+wAnO8j&sJf=*1mhhN0@tHAm9~4~7m*`3u zOqTd8abkwVX9`KlN>{KjdE&ERVP_DZ zB|LUn;u%_ex)L6{diX41up5WZ5(d*(JY)V!SHfTh%V!C>egiriUL-5)*XzrA@Bw_2 zDq7#E-#Yc1L@ZUywF`v8M3=7MV{Xf5NfuKCJY#-9S3+WDz-K86W&?Z{EX)J=3|!n~ zjQ(#LAozGb7eCMv?ix&kEQ~JFG}xGiOB^X?n${Ze%wobtdT@~*T%-pV>A^*Ma0M3= zcRnMpX-<6T3NA~9XTin%ozH^H65?5KSx!6)F3Xvga>B*EyL^GUNb$s#m{@86Bqo*` z&k_?$y^+{C^=e77^db)y<~rW=nOmp}N^l-E1bB zjDf?ztmAIhaX0I@n{`YBFKJqGfrB7j*ii}x;b@5k4uW(+a{z}y$WgkWKY+t&a=k6eXjP~Z@QETs#3GT{(|T%`-z7&ycrd+8!~p|KJ;3{2M2#g^$}%XG0R zXfOm0p=B0uS3Q_#K#9AdC3y4V0+M3<5P69EM|~ zbg`S!WCk1tW*gBi1{?-v8`1a$90q1Xb+Msn*a8kQ*if`y0f!iDD4M8%Lku<)?NGoW z1{;dTCg2c*-GUY+;1GjNMzaxch`}bK#RoVDLi-MI5QNqo;2;QXH^4!pwA26xklWoTk~K)9AdDod3qlXG1%ZdqMzo;d^p5lgY)=39AdD+dBz?N zG1%ZdNT25Uc{m%}&!M=@^Yd^{b#IKLv)jEfvd%8|##lQ~ac_*ibAx+hI-Tp?8x!p8 zbZ<<#Gj#(U_vvsNN9XN@(m^-FR zhiIf(oL85RKqlehh`PKo3X(66rNdzqBwwCAheKqNFAtc*A>OHiMkd!x&lzGA$4lzi|JVp(N7$jw!m4*Ng7sD@HW`e}cL(^~=2ZhjEkWdE^-mVTr(Wvk?47N84fYX<#<9F4l&5( za15Erc5Yy@ys?)q9mYYv$J57Y96DyG)M*UGyAbKpVXP$74djGe1cAd?NrXH{42N-$ z(r{Q9csw!;2Y5Un3jU#3R-4oF*LNk!rYL1c!K}8m<_@ zAqH>Cq)P{?bGmehO?u(#5gcNZUa)$^Fr*Q#A;FQfNhw@Of)z(42Sf>6JBs|4**?8FSG-fkBl|dC0`|O z(h<&fN#IlDGr0&)d%&28oUbn&1$lo5KoR6dNuxOEQ$%KG*p0#5hQXye0t-;~*Kz#9!w9T{ncgF(o-m36#rw zSTWdJYu|fU`@r@=JnYkVjV9k$_PO?oISDxb)c39o;Smz*IBSQ;SbkQU->lt^HQUq0;=b8Z z+jA?q>4|lIAv=>>=f7ZWvb{Z-+y#(7Tk^-IvgPbpHCOgW4@!uRWOB!ZpA7*Hmi=J)3c63EY2{E6ahVSJrm&Q)j21;UeK#d0}UDHRLj`NCv9f)3wDjD=#=q3p~Z z>?@axWyVs@<}11Jj>aWpj$Q7@rpoL5@!UjqcDlN$zgVajWl(ZZkt`C!&sHk=$wF@2 zuNLKFy^M$iP?WAxEhCRw)NfrqKLr_5}g;RG#tI&|Sl40qrg1$BN@Q%elpY0w4?daeqHE z!Zs-@a<-iF*Yt1Qyk;G}o#t=BYql^hpSG;&@Wyjv#hFsElCS2Ag-Askm4vIdUW*Yl ze$ zm>bto81{&+r4RpdztGgScTb4#cOMY{@n2T?`*$u;`1{)Ry8uJZD<<;tc81|U(eO?% zfAB=b`^wifo~K{0{!&$<>`9Wo@@;uIb zj)#A|_ZaVq@ICMG-jl?Cf_DP^g!kLtiSoYMdk*}^cu(@$<@-~;l=#2rZ4~&4Ua$C1 z_xi+thBtJ)=N;!g(>wFG81J*a&xn7Lcc1vr@y>c2zdzSI2Y$kPp7$AfU*p{;ew%mB z;|X8ueNOz7y)VK~c+dCFdIG<&xzmd-2{IX(*3-=pW)pj{+Zqv;2($h zza;NH-dDv>d*2Yh*ZU^?Ro-UrJMzBG`>y!gy&u3o&fDSrSl)MeKNo+ucO0^t@cO;q z5r4qjCH|myf%wB-M*MTUDfp|r^SqbC_q-Q-bMpNn@1x?6c-PAJtoI#xANBqKg2 zdmZo--jw&3@ICJ(-kYS|_jzv-f7*Mi_%q&R;upMki(mBKBYw$yzxWq>SBPKs{$Biw z_Yv`{-j(9dde?}*-@8`)1K#!GU*dgM{Da;N;$Q0BEdEQq+urM{}b;i@K<@S@_t|5U+XQN=ZODyuL?imy~F#G z`0w(*E&jW`HRwm4_a1M%`0w>zDE|Ar8^r%x?_TlW?|o7H4|r|Tzdq=t#J}9zApRBJ zt>XWkw@v!jhrGWO|L?t9;3vEfdt0TSeboD`_=mk)#J|$}y!cmnThXr)-qqgy(!Z|p zzAFC5z2`|kyViS*^t0={-xU9P@3+MNg!ee{Kj}R|{7-pL693cQ>EeIJJ5&76dS}5; zc=KMbynoK?ekR{<^ezzpW^YvdTfI5)Z}+Yf{|@g?@$d4yXL;aG_jpf(pYZ<0^X2_t zy^ZqzL$62t|M9kq{}XRO{GWN}!}q*jcp3Psy8M=XVo-DgILveE-ivI_Rarg;uO`B-Y zcXnc@_&tf;;-?dP#P3bKNc_!-A@R2)_KM$^I9L3wiSxzZmbg&-?TL%T-;o#*|AmRH z_&XEh;_pgKh`&2AC4PURDE^*AS^R;-toScVTq6Ep;-%sbCEg|eaN+~v?@fG2{Bsf? z7XRGDN5wxcai#d@C$1L%g2XlAUzoU7{1+##7yqKfC&mB6#HYm{NqkoPOyUOdvx%F; zA5GjM{#fER@y8SQh@VT`EB-{{i{eivz9jxs;w$3k6W@iu%6m!T7xG?6TqfgFG4T%Z zONsZ3e{rG{<5j{dC$`BrRZUzkWh{2P%}HBg*4#tXQa)i_@YF+VO%t!F#cw@Z@-|GFHx) zs>O1J`nxKpR+#2;%2A%kj^&(gZDOoYoo-tz5#@_x@{B3sCCPGewhCPuv9~hCP=uJr zLKTtoi=)*n)ooD5n1+#gD-;pkOs+ar9QTV8$*g7wimggqlCd^j+bD~#p%WO}!>f1nJt8nm)m)FU)@oHx6wW~`!M%}!5O zFt^T3jAz(95++*JsKEMX%+iSpH72x&d{Si~HBwn>gct|(s!4}aoSrToU_z=~JUyB8 z@yB!6BYXS(c8jF`acDa}X2+lefbtP4R%n*dwoIrVrtiFP7^qDy8JnK1K(DOflINl( z{78-@Jw%OM%VXbpP{LM)gtF6>BI#%}U#0fS-!o{ml$4PDy(H4?{v!0Fqps3WOsNFP zrz$>GKkZOZ3A4~h3qhkslM)&POZ_#{vhtx3LBp_SC3@@w`RQo_RhjKjS-4zDYL)?# zQ&|*~s-kiknv84}D(KPKDm1zvYGf4Whd1{Pv7CLfciL|o&y{kjOGmERx>hlT$z9ixG>8fXM!XrN@60;BRHw2i zE(#-rAu*6gxG=(JDw+v$1N8QeN-nprZ7ups2{Zo*su`yb8a1XsPT`~&vBVjn{I((3 zEE<6Yvb92qoehx2X0dhw#ntHS#009vDaCz7#Rb`ly1oG_+NeQlIL*FxIc5#j*4Vx% ze+Xzl-~|K9xPv-#Q~;XD1fetNxymT(eAXvpK(i0!&yzD4-F| z!uqxHGM)oNp04<9dkWyTSV>VbtDxa9k|ZZ)3!*w^8|7wZ(ZJ{@=)Ir~<4tR$>P{UH zBK)rmC1I`t0?C#q$?#@otB7V~VmdpyX}COFU)2d0J1C}~G5n>2dnc#pAGhK*pwZ#-Mg`fW2sEQ(C$_vNOs zEa8@9h+9Ao%GrbD98fT_Btecq09k1|)Q{^jZL(g&de~gM+d`mbx!R1mSlN0$^gh{&PD=@NQeAibc zLdieAnX=YkNCfMxj6?c}(P5GiuCTgUAmX!P(F)Ro>NShXnZWRvTPKAa&0*}xqfPM{ z4TL5M8hR>=oNx(A>#s@TAgCEjC}{3RbhB1l39HA&(m^Lk)Z1$XZNwtQt1p|>8H@7ci`MnrxTIV=!kQbJt0E(u8$JUIvMg2C3TTwqogi{ zB-Ij6N||K#TO;)lUTh1=5~Qwm79n-iQjFBye9+N*GyfMa(Rtp&CY|@W`S;uz`rZt0 zx$iewyhm#~e|)SV%=c)#-!^#9pD0|^kPKt+<>LRI;rnN5e7@yh)Qmu`ln#t{pjl_f zsv~?p-5(Un!QfCX&iIqLYNd2CX4}DBogJ6dFH`J5oERI+$=GW138ClH+N-lA4E~s* z`+i%cGy(yqv<^O!5r4W;9h;iumzjJ)yzC|P4rI&nnlE765kKTEDPh9MCklaUli-s3 z^I2u$nvYG#9^FS3yb2vdq zgnCT1$BPGK2tQCPkNXttMjoe_z;20 zc_s|0xSZo$6ZMaVFcMJl=wL~G%(!uVh$#z)ea_#iU+LS=kVGUJoc86Qb#9WqAYh4G4{if0n9 zlv8=3Ong{qZW}`BO@>2lrA2jNvwQRyoB6A-D>cSFKKoEnoPE^Q2eN6dBYA#t7ILG` zj;S{&Lbd?2qke%BH6AfdKo>yFI>t31ZV-!fV8|r(DP&~d7RHll>@=g;L_sx}(NHzh zkX~FdL|;NYoE@mLpyCm)37fGs>By*ZT|j+& z0yWS>6+QrwC+RA*vEO0k?>0Ye{u+}zcG~-(`4^f$YJTHb>t8_(lh~Jd%;S%CJ>v;Y z1{;pB5IhcIaioZ`P`b5hi&Z(i=J{(lpZ!}Kt%|-n_c(?8^bK#r$D;;02 zI`9&SVqu5!nPC3-!jDlx%ChG{WMT+khubs z&JZFOCD1JI{O;;y^}Ch72lcsA>!oPzIPjL}{CDo$mDL;0wLoFpR_5r3g)8+gp?4va zYWbNQ)}Sw1>$jifHwv>hnLIZOt@$jr&QGJ15M#>_w=qb@3n?RK85(*OHDzf8OR%!+ zgBH-K#6-RfS-Uz_hR6vqR#f*^mt6C}0o`n}#}2#-R>`lG+GDk>h|xW-`Ijq-@#8A|sb6*Q}wUUr2$q;Yx^^oWd!+aQy|- zbuc4J4gQ4}1;V$SA`n4@^P_kj64&Vuf|Yz-?=W=(&(}}`h7HBjZl;x-ELJIriS(yC z0m9n@MEwKul(wVF3?l_7ei$;1Q{efhK!S12fw`ZoAaXM6=z~+83eLe4#w(#U6mC1< zzH>@Rr6T5i+_ld2QnZ#v0#e|?DNdd#YgrVk{zI!#&>Q8LM16)HS0byI9Ls`3K~>ct zQXf=mxsGTC8HK7gRG1@Sk+vx;hYwmION=^1e@Rzh6e*X*3X4s~MGnLv24qZTg_5I4 zTyg4zz8q>uo%w_O9};#F-fP0CGRJ1Fl6836zdN9FfQ(VWIjSkN#HRL6Y^A^qzOpHW zF06wrstWP~!?DFwf0ax+6!1rMO%D0Cu#1_uTaQ8Ww08zX?AE-A*}=7(dK_pD=869g4ro#XqR{FEqISt|+`Vr0^*Re`gGC_-_1|dtD6vBE^4` z?VI4J%w>Ia-kolC_F)jxMZD$`E5|l3FlhdLAsvF?gO)9K6Nm` zpv5DO7;C1{nfI1R%|Vu}pYuGY(z);luw!U{8rH;Yp`4rK%(ILl$~a3-mrPE`M3>mu z;RGRhQE_Zq9<1v(j^2arD?f3tUVSrAsXdTnl2+BiS)tvMtv7lE5(TzQIsItg04~oX z=hT(|Mime$J(^x3XBM^DwJHX!g2>AYxdYe(#$is>g~GGk79!IeYRzS*b+~u&gBP|? zrw^pGX9z7CH{{xm)W(i}|7H5LXYa6kgo#-jy_9sxSapkFU1V(_I3fXzEEYs4bTJWd z*q<18v?b9elbcaD&^UgxQ1g!(pN@Tg&|a52-@nkWeEC=t>=}sSE$oTDA8UO6-{^R8ta!&7K9Eg>zUz_+ zcYJc=OVB}FM`sXh>`2xbE5F2rGTr_I`oXRZlX&nlBSH)(gv#YWByM~?`erS!qnCvX zwEo=qJolF|`1uNVYf`SVuRJ~Dp#ZUDW=m!3osm%O;n_SgFB zO--Ck4xqp$#;OeKstyc%aXqO#Eww75vlE2*1v@MbhNsHPkYrWHjmQ|AxxZ5spStqp zdY)23y_p=3a!h}Q%aXQrIkY2hG{=;&s)C)&!44qThT7-DDJ(Po?Uvz@oMG{R5w8px zKrp3rbFg5kUZ-7{L+M(p?EYLl(+X8&LH1DkWSAXph(W~2MKI^W(8_VpY8OYyQDzDQ zTqH!xTJ=Ko2==Nr?pdyFQM-O*fK^Iym8~L3gX#{pvc{^IgX#Z;x^Vq9UOQ99-{rVM z2)NqxD4|ae(_>t+KDK2274nN?i}j%oef$Y|N#t*B9ue0oE(bqyw$AT<`h1P&1UvV7 zhUq!u@x@E@<5`^tuDV|1*{yx2iKvvMOM!*=u){1gYK+IAYMU4b^D+V779IH920e&E??DCul>!^L6$E@Q0lfmbXkHY<`!oOqio@5l>Q&IRHYoFT3bbNKaY~JGk7vlp*|1LWI z)(qZW*8DAeG78U>HU1A9{^~gX#R~sT!|#dVdj|j2eH#CvD>Qy5AM}(I|6PVZaC0<$ zuc+_?20uC5O|lM=8%oWQDum#QeN7Ln zounC1S}6>5&)5&k^#;>GbC(-y+%*$bzRgL-=Sdix7ZFO4ycq$Bc6c3PsrrLkH~X;7 zyWXv%P&dc3TUfQjc|YvtkRgZ@4(|2vBkij@{;}wnFW}G|+NL68!weZ!sSXO0OB4b5 z)||NG4J-&uGI1Ats8Gui1F5bFF+h#AG%@5Su>WoxR;FNX3YOg5Ye;L)Ow|=evgF-x zaibnaBE&v=jd^MMLnuaB#R3j;!SwmsG zbV8HN1Z5FV`vqv3Q!Sv5lR&{ZM0d9sMfWt~aHA#Gq31c7ji}HCn$qQ}Jj~B=KdGL9 zaCrro2`*Q?-2V_OzYGADy5lL@hh5yiPW6EDlN?DhZLDC7Eifx6Yh$PgE_-7|6f5Jb zW01r)kOV(~YmUn|VP;rzHPl7*jrbX*#9xnzQ}K!HOnw@NO*y4U{N-Y`XbE4W2PKhs zU6Io$Fqmzzz}#cMuB9(Mq*9#5_#4e8dOr@#T25@4jhV&a@#+X*rM4{WTY?)xt1^-= z2@&WfI+hT-(zvv~V?d(7umc^k+B1X7K#@W~H?-<-uH~d;5Q)!fO47#}`GTZx2``RO zQA4Q~!s&_PIubjR3vyv-rW46|GMaN)%SAlPRAID0v9~D{Z5m8k zOf^d3>^YQgmkERDRt6z&w6be8JvuGhtiwq#{>pOkrAzjf0u6*L5k8O z|BSz-{I4*69aKu$e7WsH?Wtf*qGg0HOz9$9gBA8jg|Uon%5s8N@Ey0P1cHR%i~&!h zw(z0j3i>@{u+&ajm2euGeIgmk6Gm1$F|9j=lLX2qWU|3I7dCuhk8@3R&*z;U8ssbC=rVcwsKMv!-4XJkv4%Em{ zPXXIemQ_hi%kD&IjM+Ry>=!E?j1~*sly^}us}XEPK}Kckl*=guOAG8D!0w|eT!=#T zx`^wrBeD7J23He~M~J;(vJjgF%`M8$}8CD`%UP;Q8p=bR6L-0mjgyWGhLZF!PF zN(s9(1t2JI*G$)Za8S!)G^$ZlS*cWjYy!UOm` zVPFL?w~gCPIzqoSIxn);srQNS6Xst`R8pq{+Q76+=Nk?{5s9!y4P^Nje93tOPT>rb zFg_O%_2$E`oO?{43Ld%x4dx%CP6 z{pqpzzIu%LK5F4JUykZ8YwuG1;g1cT+Nt_=r=OgEtHRy>wguB4JN;?R;J+~Zo|B{a z{$DHpV_u{B=fkH*;kCCYe6_(#rXP3l&l$d3r^&?NzTrRB@CW`gTE2xhYy8hK`0DRO z;kCa~_#V^W9zCpZSMT$0Q}{Wie@&VG*um%iQsF-__`uy!{GK-{{2qfJxWoovH^8*Dal6Z0(M~ETv@q@5c+o%q;D0G#^YE6a|1b@>ee`x#O;gP{DkQT{^ zZPU77ILibLG0q(X28KU5p9af4Fa^UbgknSp?jJ6UL$yDWg)NlHwhQri(K`QRV3r`j zK!%bwyU=9u&)rM$vO0Snt0mCg;=uTveIjm1j zah*Sz#TzfY;MXMdF73hMhK8>TXFTYQwz3>a+|bxl>sP>x95Lurvxp7ys_w=iKvCqI z023fO8K%DFo;ix7tqUud{&13kO@pEaXX4ZlwCij_b&-Bst^;c(0&sIO*d-c9j8cH18Bk|I%C;d%W!|h#ceteT|WjMAt$ies~tuS5h9?WFScB-EnxN z9uV=u=#UF5lRlG?o%NT4u1x}YUbQ)4!MNR-J=2*jv^F@zK+|f}zXd5U3u1#~aqU6A zoYv!>tdA(MTB`}|2d4&{&X~&(xE_LO@TLh?r_w%aoU6d zLRRC1SWx{u#DWq_vr}Qm{kY@P2eE6B2dMzmlt}}uezk~$;~8Qru{Z{a7KP7O*I*@! zx6jBCOdi$5rgWIoDjvXb4Q!5-+y^(DNKDbz^Q8Q-!gDWfm`6S&wGf)f$H*|rd~)+N z3UAifV9<>e3m$_ZLvjn7W;*e3YAysGovj>P)Y7&zjioM7X=ISV3)i>ZIN`Kh1>uln z3o?x0I06`zv}~QMIW5vfZW}+OqS?t~yix`Ql7JgVDi{X9rXA0UbT?~qWE6ylNq%%3 z5z2AvsObAPIKV0#CN(^l6CD6lODDA^r`)MVpll!mgw;c`J|u{lx?ot4t?Qy72Q?vX z=&Poo;Sqf~Ow`GlU#u{UP0beeRh*R3pe#zwU{|C;61A8~V>Y-#tlbCf9?Bw&sCsVD zvSy`4by_n81xC%-^pLFw&6*q1Cggk&M+Z4hq!9(@johvTHb%6Ocufs^*!uVC^3R zBZ*74FxbB5aZHJEs(Hd>3E?wV!D(Q za$Q)Al0L6<0A`i19C_==qWukQ`-HXs*#F_Swnzd_6sLhc=TGgL#^sUQB1OvRuTAwa&k=VcqD* z5h`4h$+T}q9Vsp_2JUQ@v$ixefH^m)NV}g-)-Zh0;yvzw;DJ<`sE+Z7EhP+S`DB-$ z-j<7f!!~ma#!O(!Oh$XL8zN1tQGrL}mrzttQSc8a*KdPxpTZ0Q`ILRv8nLttCrE)< z!>JO#>aHw}(vEak5xJfp?W?d23jGYRL{JD?wN8tITF+lVaniP|qxxKV#U*Z0u_6~= zV6ql4MrX1U`zYiJ3Ym^3#U?N}@p3;VD_vw_7nV~cowl;n<=hOd$3a+RAQ8zpe_~29 z+iV1vsajZrLz)U-@*KJ7v_X~DD;G~3*P!#ba1=Z9ri+u*sP`3gvonOGGU$||7Y&+1 zY&7v#tdWYOY*@^EKro^|G_66sGE&$nI|0IGP-x?Fyr)@SFx_SfDVX%b2N#P@(1NKM zSgB?KbInjDw9^PF>SY_kAW=6^P>tq5Zmi)6H9d_^!oh{&yXGI_b%f9%nL4d1u(B0w zh!(qJytY|d2g|#;LcBh)K3vLCBY@o(LX%-e6ItGN02@;3O)JK0(CQ>htbsSuJwhU# zzy+=xjE_+PiTp9bW6vKb8aw>t`%G)!cF!c!X+k0YPlQM5!35es&tjt3NxO!ne+QOjso zSy97CA5PZ$ur-X@@{s)_!a2dUl<~55G#fX0lu1jN#y4yX-AQ5Kbdo%Z|F8OK^IDJ&C8%du3zeuxWFx!{Kus~iw{AXUju zq7@S;KG?O)zi?;p=5StT4A$0YIhTL)!3u{Ulhm!x$(~qt zH&CVnrlBi`<`pm=AMh zBJ_c}L-)61P(bG0t!ZtYP?sa$i{qAl1XQvT(Y0f(B#fAf-3S%!1mTdB(XDnQGHoj4 z!)3y@crYMXf9ZLv*p!Vg3Keyk|>(1R2JfkVyez9n)dftoNzN#4D$W^+}DE4{L>){oKiz7C( zKa}_l-I?Xj>At5p-m>op6fd*i@SVRbq6X->R?9u`vfc9GkewH=o!z^_7?uu}`uoQ9 zs_d#wPY-Oe&Hs8rV$%@saU2>R>`U*qA)HtKsKmTUIt7=~-AF4US2DQ=*QAk`D~TGF z>71M+K1i9Pf}K_fhK0zyE6{#vsQ3aVw@t|r1&vAsip3EnA@G7rP+fsuihmhjaxmW9 z7AcnllcU%op;+7IEE|@qUGOd22GhIOTCuDU!HQLodSsPxU0fw<&_FecXke&WZnkhS zAe&^iGTp^sp%+kSRiX%@biou99F%-5U*MK4S@MRWBOTPa3cmq2;IJffe6>=FCLtHm zvtV@&ff#nnjjFP_%Qc@wg{@8d7Uh#-tITv^4IhT}Lwt@me8#5hPCY=j7CI9O8#|)z z6&~bxA`fAy$cvd$J8te=PU20PjLp#U7!r`(lv_k-iO)(L3L^@J*!0HXxp`X{)fI-! zS~sl7lq@s>BfuGAOUh9f=FKFsrDMGT2uMTf!KIf*fZi0F3KMRpcgLM;nXgu!A2|YIns@3 z^(5JL{4DxJS|wGh_wor*Qr3mapRbMgze&pm5ojk;K5w)Z5tvf21=(pR5M*)T&2%oS z`^y6HjE3nb;}MY*wV3p5)`LO-7EmC9$0-n>90iipkhmRWmqN!fU?G#iUS(`B)2!Av zE0?nqxK>4;P@iR8I(EwmpBladSHs~huzNHBJ5|L+;4BgF zW2Ez7e2Ur~h(wmVgb^Utx+w)duQUdxhRd759YiTvSE^(3!2$&5@t)m8%((Lxx=+0c z*!%Y%Ee-!}6L>TEF`mv1W}eLvCeCzvnB_Q$U<-n2ikX9$Ne zc_$Kt5%M&dyUdP4df-MgZW+hr>kTKj$RrT~C0!cFKBNGM8;4s*QEal*B_oL= zY59O4G>pDh&#>&Caa)zKg`1}#p}SyIki~H8X>Od`;&2|+5@F=9Ympx8-_gJA^iWI` zLvg!;Ka}3u#|@scCn#jpg=$I`fh_>z8f-uLgQAe^8B1)Fyd)I!F}dTIcM-$-G58X% z1;w~Eo*SK=gqt15P`(c_a1T!)rKrv~Qf628F6Sgo=H3=Zz=*NqZyL*NDyXr|xw8>T zNysoM&}=a&9H!%4MV4p`UMH@V(*+~a;8;=}kXu9sWik46e-Ce%Aj5HTl{JqMgo`$E zqs@1$f6mS6Ii8jFYZq>%{N-L}pUx1KyZq``b04<(o{R7p{U=zy=l)FjOU>}-53elV z?^*dvuTlJF$@l(B?f=!53HNi0FSAUzX6eMgpY=Yy_hhxj=gvQ6uF~?I_g-zcLov8# z@T|dCzd_6A@aL{n{QtLK%a!^Ig}d`nJqC~GC;r~7{U2-XQi>rQvUZAnei&X|$y-aR z_K_$(Ej&QFZ7mnajx{sh6}h@db;O%S*Q|+LVWg9)-CMf26?@7ydPC=Kx1oct(4xKL zWuobI`sQXMujX~Ogvms%?YX#T0`_CDBo*8}xK|)xYhdc3M8VZCk-?(6BtkX`zQt=f zAjP6zLo{O;HXB9q72Jd@PR}Q5X&zH)6$kAdzG0 zO*<}}O~qoZ7lF5UH_p1=@a+~#Lp2nM>vrpB3lA~>zOM=Y&RiYs7xj{@?CCzsxBtE< z|E_&}W$`-xePnKB{Ci=UaE^b^FB5KMrSm+;ze^UM<3j#*T0Y0WkH+Bh*DBoc@3{{~ z`FF-f1V=gTZZ?tQuZEeChw&*8t*{51>j<_`mR zFCDHKezWgxeDN)P$0g_HwSL_A;@zw1I(U!4-S|?od^z}n)xR5GYF|`*H$SKuyji~7 z_h$9{`_`^C7ts9qW$G~&{6TzmC2uXtxld?)&s%@+?Y*_w9zLvQ?X&jL_IdakVTqJ5 z{;ywu$}vd*?Lc_YgaD@B)qRZVcXdB#=|3ueJhbx1$E}|qHGc_GYzUfnc&2A+7-)%) z&G=6o<=>jf9}73EOb&?0=icwN{Lek^59L$M0JU2+-hVOpk;g{ip21x_&HT9h@l^}B z(sDP8*L@G2^LAM?+Q!sl;OxRXETWB3_^ zJNaY&DT?pp56|Gs<+E8mf8N@4Ar`^>gIqtc=$CkPHMc~NB|!d-TAw|iQ-99-{~Ic?D}S70a>M-lT3de{ zG5jMf;_oy3g% zum?y`v-N~{`Wk=d`i&1!{7!yY?MLMU{~x0AL+N!2uUQ7??up6|tKSfX_ZZyC4@Z7~ zL@)#S;fUhL%Nu_u{~I9(idXN3rnS2vT)Dc81rxVeR-+AhY`Vf}7Ov`apP~ozBg;AQ zc?hSih3=oqT)rS=zpfD#$)K`8M!SY5&Ps|8Y|0ywSgtze}&tdUNoM!5?VK=zi|*DBl0|{&U+Sw0&xiwvVuk`yQd~`6Hv#P_V2Yb-Pe2e(x^mPw;_9Q8=rg z&W}cR)JKy!{{5=g%6yFB7hL$)gabKUlE%-28ve z+R5!7I?|{4ckqR;YkLIxgPl=$&EQUdP&2sGzxAw;4i@VV9vr=atA&{U;Fuy`N^jue zf2j2b4|M;yvA6K_Tkdbsdck3|OLLnX5A3kO9lO)#jcnPmt#4>}WN60)ef9HlIOZ;f z4RE(XcDibhIMoDWZ1ysNJ85UDn>umw3Kr?6@DLo+!hzNaO^`|e*r>!^FeAl@2^@hl zWci|aFr<)&F}SiKz*?_6>&5%GM;LIE+89}^OK=Q)MJn)rF~048@Zsg(KeKe>`iZ%N zOY;#&cMraA`iXBv`S429nfqo8FaEyLh%DUvpFKSF;Q064fu+-P{QJ-{;T-?2Efa2~ z)#3Q}VT;f4=Zv*ez`y?}%Ae={Ey};WOQY}}gFF5`_X>qO{_U-h4j$#-PI7E~e(AyC z-<6f{?~3v7%C80gjvN|mzJ~Tk2lf2q^RH0;-DSS(Uor96eO~1M%*`(h;^r5bZ^!uB zBFv>fTx;XXz-8LMR>gv!W%*rrTeN?=U@l*W-=Xk$dA1pT&G6&!w^;gq6Zq>4e)z48 z<9GRJ=Ku5G*|_=lt&N}GHGIEC{KtPt)9q;yKVDzW%6Z%+N@un2C_Om(n78+4c*}j? zTr4$MFAK@e`K6`72{^%ioI)e)zg5+%tIA;vbk(xTB}J?`iz! zI{3Sz@E(Kzz{P)s!d?CLSpH5h`YydU3San7jlUUPxbLIuvm+OmBKxa&UUi*+@hmJ` z!!}k$eo7`(m029QR*b@Y^;IzF^l@+)s%3?Vd{(!kO@{*Flga zOAhF)8p)Vts>u+PT|e5meizr^78sih*C0xBajD&+Z?+0M3mayaOyk~&dK2OU7E^nzi8Hw&5KW?}xEv1V&td4RnuP@kT9eohwi6ihW)yZ<+Q-!{G+F^w zm>30zQ4iXObi@Up=)XFpjF5p|83zT-_pLTa6m!gZ(#BzYk^lG#J>R>XOl_ zb5$Z0H&!0o5Zb<}xx+_VLbOWST%0M*;=upr!OiX16a__r3=bbm5@pz^k$%}I6)S*sT$CFv>JRSfYZork&|X12|I&Vo^KUWt zDO2r037aqgOSra1vh{vyyM=PHfw!uyrdzHlRqGbMNXY1@Ig1dKCxod#C zI3G;EDSp7QUD~r2p&Er_iN1Kf$-SR$P5%9s;rlJ(KmHRY|F(#~*6?dB;-6vob1mXK zc_~JAi(VgR^0)URm3y50J@@04$w7-Ev=8LUZm576RNA`&2UMG5YQGZ$9%VIJ2&n z+*9qRaWrr5tj7hTEo~PH6glbW=#cB++I=-l1%b~+0yMpH0I0(Cm(0Fn_w~Hj>&*(j z?!p7uGF!Q5-GwkGNlmmCguPBnNzpJ!zHT5US&vEbF0ml*m%?OVRd4wYWj_?SUV!8p zL0ZEGIsmJHypTjM@sV40C_kEfq(1msxAN4#3qYS{}jca|4qd|+u-weN8#Ra3b$_7)Z1|^<4Sq|2bB^Uupf1UZ?F-`)0KMGCxo zu5hQn^?$K4z7@3ZEsF2v_Y0oZuS@^%e?-%tv-n;5-ks6(Gb>ELp?oLuYXb={8}IbN z*bm#8YM@EhafYhdvKYcwK^TKN_XpQGMMzdguXo=?l8;{s;aKT&m1SeuNoKd2L##r@ zWY9)j^&!oqaso4trH2DHaiHkf(zkV_ckfnRU~}0Fcy8oMKjTES%gFmcAw6T>#O@_v0>j+ zIH}bi+Bm1RcfrWk9sN6owg(M-j5X(y3)dTCms;DSf~L@95!VJ~3%Kv?f{~%~`!|nl z-L;pgBK^I)c7@&~H)@g+HYFLAziAVLSvEB?9oB;JLvE(Pjb+ot0_|4f%4V)|hVJ5V z<~WHR9aEtH*n_WSUcn3F#Joz21RxRc4v`A(kykUEZY*7NwT85Cz1^IZGVMSwpvB`$ zMvP)pk#+OfjgukrWIpRLqH>*X)95as(IBtGzzEHg)k>#p9oA<(7g9Ec$EWpOq{YGip=PwNJw+V8JVdtl2A%CQ5rN$JvlK`42!Vtz8=|lGz|-RWoLbq z)3W4dOqYdCM(KbR7MP00mF+6U)UDjPs*JU6xIHOkHRCr9J={-%w!_TR*}r2pX!EsB zY!9%Gl87y+Bh+H#R(HK{_d%(nI<-=i3`P-nV*^CYJ#aAsCchL(>+=rEx?q-Q0J&{}lNM_AP;DeTUL+$i)PvDJu&|a< zSjt5Z7a6#b7z2hG#_`!Pq!K0DB}WJHcjIZX+LQUjrVBp}IqF!d=^8`vueQcVp@b(OPV;C?W-qP#zmrP1MhMIsuT zh1KXn6=pW0*Wq-pMdNMHPx2m)MG2|;xuUl*N;JHF)tbq#z@#OnhmZy;NJy+9Yqd7a zd3JiT2;;<4Ge{5Plh~o>{ahikajik7D{UYVJ^wUz?dNxPoi6v1a5CGDt1&QSO=cxR zN>8L1qi;$XOrtP1JuAv?3Of=L+cua}=}3vWC?aoX_fAlxJWO109_w8o-yAg z((~7MNgg(Io*s&K5>x4De2z{8X*0Cj<>Is&yw1)Pai=G9iZDf(?38}M4W0pG3D>^Z zC)Kpifpuq$V!UG#m)A)v%Ow<@%+YD}#&aR0F%YXirH!iTNseYK*+~r56WG5LZEaod zaP6t08B=#OE!cahL_nI=SqLZL?n}B1x9&g@nu_3JOrar(pxzbh9fRV@uHn8xbU~T6 zUNEwK@7Arm)BPiR`gfhrJjj$<@Q2aH%d#RLcbi}l=3=VJR9T1nRjmu?as!7;n80>n z*gja?;Q|fscti(58O0DcD{%#!sLp)r%$oxg1j7a_-1H2>Nu2P#(xH%>iPF(CQhzFdffT>IQT)hQ6 zmYe_T>~yID#`OelLZ3H%!R79Q`8_x2JUI6GVR&^j|JIW7f2#U|+D}%dH)t)D2Oq0h z`y6c2KJ&Nz-)x^bYo7duH{Ju*{7;Afq09T(2&(`$6;M!-G!h`e; z{$HO_{L;Et2Z?c_sUqfo>b#-?~H}Zv^5U* zF$=f)7h2xTNsYtZ7>lp=%*Nrq8VgtQ8;ARTEL>)N<8a?F`tg3G`8#w<<8a5_5~G7Z zXdLdT7A|G+rC!)LT*|@?{7};^o!vOx_E@^Lr#BAw;#hg-wl)s;hq3sMp58dzOf1}? zp~m5Av2Zzd7X=Dw@>IBIfxH1OiLxd%8;S{&oU^QEs`E|!Pn;-|Wb ziaQ=-E4#ck3Y*MvGa(UV9;cV7>bB*k^SA+-=52;HnYUEAO#;vj%FaMU=#HN9j#2J4 z$Bm4b8fI}-qe4VMMK!eislHesVI7&T_iNQBbHNJu$jErUJTl^z-)uWVy>6k`#chu{ z+zGj5c#8|gOI~dwz9FQiu?%3!>{4kuKPEf6sVueIv$&0$n<{YGA#U-)C55(NCc0Lv zLrloMtWfvMHu(~+#G1%MYlk%XK73bd{rQkelWjAJ<>yLS$J;#R9kXmsnr*%T_uVL*WFS-JQIxG4-)4(cV*{#0ZYWPsD z3KGfA^cAZ4>OnkKkXX1K0y+#<6qpcm#Ox6@M}0mj4fm&EkpMR&bLoQtn5&>6(7dYn zuC7I;23mS%)~zp43l0(*8A#(U^^v~*;T^;0^JNIvWRCP>(Q9yBvMGFT|1K=A;X3+s z|CaQwJ^g*u=r<3Z-gR#J{Gkrp<%e3bD#8g0*_p$<%U#0SujM zX!ZKbm0fSsJK;zMsD(v6&h5;Rt_dmn`J@|HQBefQ0p*3KyNR5QCs>f6WB<638;f zSXLI6_|;bYuW*#!9ta!(1wbil6zgzPuNY- zEs|7Wv0|oW6Frs`u+MXb`+|b~36-@xTrbzpyG%-S+<<`f;b1pED+A^4MU^%#H!IuU zJGjg7UM9^_Xj4gDqW^^Pi4pV|z$ADOO#}P^w))ombdUpHYa7HMQ1%Jks}bD)-p<9M zfXCLk>Eb7e!Ie%IhVm7xre~+!xhHGtXi{jgjD=g{SEh=yxQCZZ>+B`)v{wIfhVQqCf1Tm? zw1|JJ;b&UJe_F5JuRHGQA=W|fv+uPQPHf5@bY_>{z8lCKilxVpSDK-ry9QBBK|hRA7~MOui=+k z#2+#IT8sEohJUC<{8_`FYZ3odhJUz4{5Ki?e2e(+HvA(k;(y5S7h1%>-tdpMh<}se zdp~Q9{_ipT)h*(G+3@`q@xN{OnHKSXV)(Td@t^Qb<9{vUKilxVpSM>3jwN=wc-#l` zo%|X59K4=scz%oN_ZfbwMf_32A7~NZ6{OUp{0`o%ewyk39iH=_X8VukzWF}+G(;Dya4-|g%c~N-Jbqar?;Sc;nMljv}p80DPo;3OX z$bT!mCZRm9=i>_hJ%bM;J(HG1A~`h@cGL%{a3p3 zwMX;keL&%VZtx@DiRLf!K83&C;D@$F@#jCK@XHN;`1mM%;XMj}thMiz~BpOV(@n= ze3i+c3%`iwFY^wC|M1J&euwW=c*4^6zozgthM#&)G=BdQg`e)?zatvIXYv21#h)>_ ztG~IoEB?=|{Ra&0=)-%f!na%e13!<(-*cJ5$KI=Uzvh1$g)bQXq{Dx5H2({4Qhd+q z|L|>!@6z`VD7kR+Mtx^2>Hz@x5T=`<~jKRNR^?&FV#dr0e`E$j;#o()B@VVD3{38Y*xH*cy@Mj8t zm%-<6Qn)LB?R5%&wZZ)uyyq_ze%!Z=zuu_$uKwpN{;h`Jb3-)#h1V*6r-Of1;jVnX z!GGK0@A*tL{@QC4|91^u`*akZd9}iyY4C+FMd6;o|G>q6e-u9Vr;6WU@YOMR#^5h- z{AEG$UH#2{S@FAE{tWKwXZ}?RKilBG(Wis^7XLf$*ZTG1aKqnf_zSO(=6~Up8h^jR zOY!_0e6PV*$Lep+;Lo%6seLM1KHuOc8r+M)=U<`eKgr>LQt@5;)(n2U!;iszga6dZ zU;0Ee{Y*{c|8IjIy*?WM{L2;ouMR&BH~jkyzHnVMe$U{4=-TJo(fBhK|E-3fis8@S zujzlv`uE{$6~E@`U&h++jfP({xNHCUKT-Tsrj)-N`MBZ-@Jkhbi^YHR8im(1dT;)Z z75+7Ydoj3Y@Dq)GkC^=9=(p!(ivJ1A-|CNP{0^RZslpE%{Ls}3ckMgBU*S_$e;I?j z{MQWr0mEOoDjL6U@XHLIF}RC=ZdT)ey~DpUhHvoywDK?bS&x4;ap6}K|N92dT%Hk# zgZCKxg%!ajxn zv*Gs`zN>%V;6v?q`@;Wc*fvmgCBXN;wQ9vyoIdd_gMR`{zep@G59XaU+ISmuNi(O zqxdIV`3K$~#qSwW`0qOS-^Snw^~^=fKXv{8rU$y?f@S2Q3T>JY&ihrr& z5ATY>2Nk~Www&Pk1`pbQyTY$=`Fp40yZp@$DEx0-`Q8zQ_Za+7Eq(86(e&r{DE=D_ zzWS?Cc#px4TKVUm5i9?0#s3Y{`y5V1;XS(){uHMdIxz}gc%j1AIQ`TAX!+>60` zEd4(+_@O_E=C5{(;!hgW;l_l}%ge_4~+qZ5Xlo=)p_G9TgElXj0DGlR^Arx9hfJI!{?C9fCXKu5^ z_A-1e7iTBABdeVjh;>hwnRDZYLosGNGNO6Lrcdm{l8DN=>TFq$v#YrV%?>sasmX>8 zANxD~BEpuF+}=o21F-AkXZ>Nk$rjm;CM|&ddLuLd3R?`cgj27m37An10fH@6Zc|nW zCJp6ks1ocAl`0+2RmRHs61KxO&H>uLdHS}s3VY0CAK2J*5!NG$h4$Pfy18%#X^xd< zN5*KqpI%#Qr}Rg&2+?!0-d@F-X>EnhE>JiqaXdk&wIhl9>$b7qt~D z9Tk{58y`WHW+y;P*pJ$lTDvx*9kWUM&&GS7cD-mFHMj2*?t<9nsYE2ZtH;U*(dv^p zHw#0SG?>x2{ik7o`x5Rv47JZX>4CPf8a84lunD+$V5D+z26j~URYJC61FKz(hSb3A zo@gIzOm@bWz$pq6A6iN}w(Vlfq2{n%RId_pR>{|~3!{pQC3N37{U*`)5(64p(SppQ z9nb+`%o$W+<~7t}3+!N*b7P?XgB{$$87m3-hTKA=<}*kXyq+l7n`t{lU82b4!I{w_ zc5h=-IjaJc zfNmwbAA`Uo#I2H_AFrFUTa*b+fA*nCAEO>jL@kxP2O5u;zl_>Ify8CaEE2sQ%sSBY zBjqpS4e5)EA^icSzf2vB=l17uXv&?Y3Q+;r-FS==>F$K2d%B@#NGeGssp+JurYhCl84!cY#p`lycerj*PzUAXwhLSr#JJ#fxoBTR;fi8D z+(1BDK*a_5{{Lrrx2iW)Nq5h{{pjEPrgGl1pYxpOJo_R2L~Ix}BiA;Mwhojxwzx)w z{p^m@hvBsu!WrOesal*Xo`F+P=slL47Ghk|TM2XmeLIW?VWqf#3Xnz2nIxhnjd%pf zZ}G0Ie!W@2^CTs@8)*Bu^YKSMq%jcN_GUdRdu|RuwjeGgf_*WTW9+=uOC+?bMaGAl zAWP8*#wLZIASEnqah%qL_@y)}N}LLDjQ0a(5Z=0F>O=f0^~E6$alz;VRbEDH%`zNh z@U8>jyTDp|P)s<9HJ59kk>TssLn1(!9R@E&K(sQ#wAt(zi*-N;J!Dov%xEODJbk>d zgNs!-i_z~2fn4DEg}-#Igy4?%Re_fc1LKkG-vV{W9-|33D9uMRtiYiwJh4unh5`Tj zPsJWw5s_C^SC{$nnAkg@msY-=NNr4;M8#LZC`fH9S0wCqIU$vy6ONgO3!w^BOu3 zI499>5HGNR@rk%gf@&6_E-?xdK~)ikZ)KG|H!Gq0(r$1igaXV!*kx(3bZ!>!j>0X_ zj`Do#0+BOrx69oxPs9`h#{twkElmgwt$#4q;F~U^&k?MN(YC8N%xW=`}Y{`yAb_mIcD$Ni7h!&waLhdBE&-Tp-!0k%yaQ9AP4A zToc|lE~-|{uR}R8d2DQaa`f)R2C-hV(Q>vL@ZyE*XFRfl{_PqSXGL_h;~|_FIf>x6$A*p_pX_D{ydOorz&3~hDqed! z)7Di!F?xtSjKKFfyk6x!jPwG#4=Yy z&_7o9=+NOSGy=MI#?~H=&p5jR7cE`OezSi-*!UIf-at?LL;J&H@FYHZy!#%+7k8yR z+k{hUxYnE)E)U$hO{}o&X)$=HIwK$9<_%b`@@*5lGP~NYc5UWc+H89+{Nst?F@!HY zeq=m?9|g4#No;pOBvg1jNkx)eksGo7=3x-H+a)4F)O{j&!7&Kf#AjGsb|rLyoC#?i z5eFC(7Awcd2JO3ORzTsGDrchh6Ia(kxB)Y0E}z;vQ?6Gl;=LauMBtm;rnXQq;R+2e zN?==x&gMW2X13*P9{&ZARz5d152t<5a?v1(r1fcU$hbj) zkW?fKh&X0ku_Q$ADbLKIdy30;Qdoa$0m*p9o`-PG&%B;;|vyn z&-qx%2?PQdJCZ1g$|J`oM-tyoj2=FGbc7Lr@iI-U`axg~es2$!Aqe>XV>uC%q5}lj zwLO9;{5V%dr8V(PyX*$5Q|^n!pbRyEgd%>)0@YVQpEgbd5Uee^TDc`{H-X&gvIGb~ zR~E(@%PMW@IZs~L*p*yaqjxgrm4blSRbS;9ZyF zY8b$g(({5d!n2^Yu>zlyWOq3K`PKy>Zg8An5V7_2Qyf1|FmZEwCBiNffABzq^^Y*q za`B-m9?t~F%pdEY0f?cSQs_AAvI2uTx$6iAQdN$x)J_)5U^Jy<)VoR{!hT22L3=t2 ziG9%<)0X2sYd~}pUuZ_`Ov;$H(>|x~+AO=p8E`$b{nM3dT(;-TC5W}sfql2#ga>y- z0>syVAZ2B+oB6p|d>oAhg888t2J8^LsfScpXaI1hB0+)Wy(8UsklE4*=K}6^E~u4j zV0I<0EBGKh8^Z4V5P=PXyg|B#>|nVpZ@CE;hjdFe6x%DBS7KWkDL@RY)2sw10ldzX zh^m1_Ahkko1-x4(!i%wqUdUU~wqol1U6lr6K$ig^2QT-IKB7_;=%>Gr0*|wM-!7gNv&^FyA(rsIN%@&hH?X{IEXKaykd3h zC5Q(g=e-ZBP^@P=JTcDKA5=OnL_!f)!h>HbJeL?18cC zvBVg4rp!Qkc0K#i>dI);TukG>e0sh-UyTk}h`r?i+_dku4q$&Bt6vusih5(mp%tKy zA%0=8NfpO1S^|CNYG+~DkRmJejhl$TG$ek4CGGAOP)yw$aas%rsYb#~c^oCoupich zz66LicvWqOKB&$MJ;{!7(3JB4p5d`=F3&(H=~M>-QkOx?qR_!At{p=3tWx2`M6MuE z6gNK)oRGCZvOKZtjU%=m8d~L99@G zPAgTs;hQlt5a~9INI>8EGDJL%Px}j$cs=&Mu$UBu6ANz+mQp+{1q6vAgxfOWr16pA zXxMS-I9@SH&9AW^XrsVbXSl==p^N~9zk2g|ZPu(euvTE%nzKYapw7l7csIaS0tg4v4Py<42ly82Q-LxMt0TwI#34)JK*M-!JQ%4hVEqiaFdjdR zwadETtZ9`1K*mDHbUv{;h+HtXfRR=zDO-&TiFli^c@?at28dZ4X7DLW8ED|eH+jgy zWemDMpA>4-70M0ntcFe0Fqn_{i!F8k;UrLoGdle*2$IKiZm#T+Kn|i8)Caj zGh*~yML8*G4ttb2fmEjwQyPnqA7{%PT=EUz4KG06C`BY--IZ4MEo^@Z(o2>|Lo9PT zrrqRe0~dpMfiXm2D>;O~qIkF(dSvWB^``ULF%t8->r#(rKDAO@APz8zO1RQaO8GL!wqDk0u33wb z7ohIBLi2Nb6UMVKOSpqDW?}TzmWwOhuiBQ+$Rj1mR)Y-{N}3kxO+W`u9_*dbr$#EhJhJ8FxDhP5O^!C<|yr z3VXwalIkk8PGlSt)m7GIbe=F-H}8S1Lp#~R7_B_51CgTQ6>oV|Di|e;?WAhU5E!FX zp6_EM)-SMNrMVctn+CC!Suh{9g?b8#YwhfsTrH<&TQHcfA{H^pK#`E}G&(65N@j$B zhGsV1ZJ1t}1zFwNfASQu>8sH>Mj^A0TbI>nP{jd7$I9=pn4Xaw2-m0(7SGTyqg*52 zyiF{8?KRaV%O+aF>Llt*e_J(T6;Mu}s@Gdx?kn|8NbUtRA*Hx=f}U+7{iz^Bd}n!x zlvF=GJcuoPFQ`UAG8U%SC?a#a(7wqwCH(*o(${IANi1gHs$zg|YiV4YH3S2mVs3AKNbnu2$~%K%4<)0dv9#SJ?NFP*pc$lY|@u%1)p2BUndow$dUZHKTzzAb5aELPhb5pFTGZPP~wSgkfakVUG~LjeLi-pD85 z(ZHbGWwq$i8Z3n7NG7W;c)#wusLn3$OlOG?Ot8lRI)66*z`?XD-Gg1^opCy%mB!TZD;2WIAC?BR&dK z3UUiFQc<%HiVTegV}~_>@t=gY1{oEvNGS;bM^Fu!S(w6v_&WUu z$A^N^5TzD1tPrAvDD*_ufRzPL^xk>cP|L!MP!1F+zz#!K9?eDs46$Gl@I#?^?2ILG zBj?Kb#iv)EqXQQxC)^V0S^8@8x>8(ACPG@k;TIu-?+uTdZBvPdAV7l>_?|0$J! z?Jz{)<5T0K2cg!T8ozt=AnT4#4IMsAy1A?*`7v~fhirin*d1oXJR6_v=5S1=CEOGT zsgf;>F(uOyqadn`#X1VME7AnIg*ArRnt)FLvYDF`<_8z#s+a*{sACgO5S%zVcF)k! zyE$C^d17c3gnkH-=H8>rJLRjT{yxNXUKwc4wLIugSzqdw>!o}JFQaqs@$xd6D?Ig% zsSAfrpf!Ice!D4xPKx(qTi4+@g(}DdjKyXV6E}8wuHvT()|K*TaQ5j^_}iBlzwK&= zp+8n527M#sV2p;)ba?hBjj`6xJP`!FkZ&{RIx=|hm1;SFY(IYf+R>${wqRMV6lxiC zC+gFRBZi>j=KDrS`4C$h!fm)DU>Eu?gl#KHA?;_H=kKKbq(MH~PY$1{mbGmic&B{1u`$Ps4Gq7PHM)#zZad!ezLR-hGf#8Z7DV z3tkPhgKW|zyMKAu`H$9d!g3CI6xPIYEI3plUj?g`88%>D!L|qP0(GxIw5Dpr+eYs4w2G}A$%vNOA)c5CBq!@sZnaqRr^A5iP_%rH6(NBVCxGPbBc*zk(#d1-28Hh@ zKE=uk9}ncmUJzLTsMA`nCq)@LeiZa!MR-ESkBLKSZa_I{q!=6Y@|~vv@L($#Eq`LB zJ}IS`30-*;$XHhi%8ZK81}wreq~l+ut> z!+@n8;6WaKgPbkV0L>-1D}Eaw;sQpM+ERNOj)0+~mqLkIh1-|Y61+v)%rAj!K^D+` z^YSOBOWxi5?A(fZhHMd8MX-moOW(%)xSl%rQq0v)_mJ@(pjMOlC-#!aB0gm)*cr^y zdnp(^xo@0_>%VOa34Yt18+TFnPdCs0u9vGYN?0`##^Pj+*HlV zU)OsFuWG{x1la8CP3V2LGc=zAY!cOIJ6b4Ga&2F zgW^!M^)96kOa%D$mrj?+$Jb#BGVurjksOq9>T>!tP^P>Lq!XWxt)q@m>R^f5wO>5f zx&7j~?%Eg9A-wWzv5k0XFGEneB9SNeDkM}qQXxqJn2K>08R#R2P(ib2V!BPPmw2~A zP@{m#;BWqI3=_ zDS5LKSBDTrPCP*-!~2(*w^XanV)>v0s!0DKV1U@l8o(443(_0@!lgrzxeNozXe3NT z23d*07@-PLN(CkiLeEJf?S>_A#FgQyNb5RK`0cp|5B$^x7$DYBTVO{!{Mw(NlyX80 z3rnNqoN^|z>;x-ql*mo2r9XGIV%VwFdEw$*UXUzZK9MTP@!DSWCc+W64|HujK30BI zTmyVXiG;8}ZjBGdEIo^}G^x`)mA&GDMziF@vdo>#w4eKzZY}1<5XLhA>D1PV0po`k zF_ao@Vjm!H*~DlTF|ds)HXAzvKT_8o!;cB^3}-g;5cJy4Q7Dw+TsjDYwNA$3Fm0OF z>O!q=E5oZWrryV0pl+`8#nHdO;K45t*afjY8e*Mi^2V*SBeWl+6#Lp{K(qGFLhV>KyL ziNLq5xW*47j3N;S6u}xr4wDidyn2mmI4o*yufA0%{=W2Z2uQ_xEnvy%irPHmL~p$WYGmj2`nm37GR4Ps~~6+ z5;-!Zkl!M5Z(H$Ei21b}NT$4cM*EH+M3LKl!#0ZwB3VQYgRjG751bYXLWdA>B>d{4 z03VU?&!!zqU1zE|Q%PiMN{RJbKHdKQ+1j!^G}H{y;1_P9*iEEFK9{hgy&MH&?RFp* zBEV$uMHQmO%!rBbiQU90l?h%>5Cf<$QG9Dex?U2X-LIxtaCg|ef=QJc;7m2% zJMIi`UprLkFVr@2TX^(3DSU^}KQJhf5Qf2Qxjx%mR+RzmWw&Yv=5G-8i8#aiS7Ayh z8sO&xJ^ejbEE55xu)zh^~yQ!ml849qVaQ6i#ir}6jN@tz7RA|J(a(+;nW;0bjR zha%Qvo!bFNfA@k0E?8;;uDFb{lf|VxAWxnQz`6(_(9@4U5aSX03^5i{?wHaflxzi$ z1U^V7TDTY7`rY527REWn-N)R8LPWyAmMVjg#a2l&LL+Z~}a%*NBWzh}?R%|ushLZ^yl5}f69a`-5Q)AG(bo`r=7zePyE zI??vCn{VQRmryGb!;HEWJ%-(Ourv!N%alG0I1n;ZT35hyNXZWiQO3W`PTW- z!*H9k^Xuw?x|BFB5V&krdI*f=_G~PE> zTkM9CccUVF0+n3gQSFG)l#DHzOc_XY(vVDnk&kpoVsn9D9VeA%iZ$a;TR3vv0$B=Z z$tc>P%g(r8WU!4%oU(wMiG^ z?QPw?88`1dLm)I(E3>gHke=0gEx`~1ib{#$!Al4hkU$rVOo(MyeKqVS#MGc!Lqnnv zhRGG;$s?|U+_0&p+cwK^=Bo&Yt>yv}_%I{^=2H!HF}B17FpDRxs&Nl8)sG}@U6zP| zl~W{+(`InL0k~3&0|6Omf*ghhW2^g?F3!dbQqbSl0Ge8$0IJCY>c_6)sP% zb$EKeu}<2nyvw_-{WSFYz(CU`Bzl9PKd}n{Rd__=p=VnG@HUfsjaL`KwOzrm>N{oZ zs3r{qt7BALJsq6u|N6{)gE;{hJW=NT|M~6}z}qqQmBnp)_g)FT_2&@+27bYXox(3k z%%Ut{NKX+FbLFz4Hvvhz;R^3{$atW4kBL9Om=CuMuG@64kU`{WC z1bl9F!GxYEQ+QU$LIucK2cl0AfH5i3aag8s7UFFP*6~L0#R51C)x*`XD@k}2gP-=- z5QF=a(ri?C;b0`)V)h^y#-#w(?9kNMec@POmWTFXyruky>>H!LLZ;V%&aQ84f~Ru= zRp2%z|0fN75`TSOTosAklWhatPW~67A`MzDd>;*oxLsj!viq`Uv@M7485Timr}vbL zkb(m5<#JiU`1r0YGYI?#NE145J& z=yN^hewevgi0;AXZg9LbRrq<56&Uy<{r-EFe|{*LU$gu_wSBC;So3`qAGQ3yu=iwIGLG)<@yMCRycQw&AWPUsO*7t zQq8p_Vc#`1!_cLW?usze69_u)?nVAdm@^k|L{wvo8qn)S!N%cVQ$!p-1SYnwBJDzc z7IyU-10r2s3|#okMTTsZlYxFXK7LuAnQC<@pTFBYGQ%!KG-!N&YRvod!rz!Z2O^_; zlyn<7Ty;vY86&IZWpqaHbLH^yaz)F^>W7$|p;3NB1n{J-Lm9wX30^`|p#owVHkau; z1oMDW!@ch{oD!r3VPr4}kP3K_qu5-+n;38vo}+08I0HPjg}3I+>!)F1kW&+lnWo}( zS6H>gLan5WLf}D3R6;xv1vw{&<&U}MQFH}@{IfL3ZKLNF$6WC0`i=;A7Q|hK@r*xs zA*Q^5hH56T($BE;i!6PerF$&B&(eLC9<{VAHohIVwB8nY zzu3|XR({#ie!o0oX@{5BSh`^4UvKH>TKZ=!?OsRku=Mqo|A&@-nx)@o=@CnR)Y6A6 zo%^uP-!F=%TDolc&$9H3E&a8Y{$fiHSo#J_zu3}uTl%P_AF}kzEbaH~LzZ5${BxFm zx~0F#($BE;_geaymVT3^zueMqxAa$9`u8pUJWKznrJauXu%-1>=5qgJ>2p^8n!nTa zS+(@jE&Yh4pJ(Y;Si0BJue9{7mY%fqeU?6E=_yMuTYAybPUoyx`l~H}EtUQbOP{p- z*IW9yrGLuOH(UBGmcGr>@38cpmVS?=4_NvmmcHH6|77VwOMlTvbbY?g($BK=kfon* z>02$m$I`c0`o)&sZ|Q@U{xVD7Z|S_Hmo5DiOTXIEyDj~lmi`(`|B$7>#L{oFbk)*t zvvkeUziH_^Ed4G^e}$#rZ|T6&AGP$?TKY4VewL-5^-*1)hb?`brR$dNx3qg$+-d2G z<=8DzL#nR8W^eZfVkEOrO(qClh*IW87 zOaG*$8|K^_TK=C}T4$BZ{jH_H%JM&9>C=|}4@-Z&rJwQlTJu$w z?y>YYSbD#u*DO6|=?5(Ra!WsG>6)cqZRs^jf1{>OP{jz|FrZ= zE&V=Azs%Afv-FIm|IN~~mVU~|b$)Y}ezv8bXz3d){Ul3|So)*(;kczgX6boL|GlMG zEd6myzt++pvh?>^`oorfqox1O(ibfK5ljENrENI5-?j8%L$H5k=_8JCFX{Y_TKYMb z9<%hVmL9kCq@`bC>6)b{Ed4q=Z`#SjV-B#Z5>!hXqd@Weo@$p$pd;M>+w9_-^E$#5|!Y0AB1=2H zbcdy#J{h;P(<3vMcKQP*|8r!V3Sht(fD258yq88dRs;uAew0R{G}3}UiVB)f(PrWXEQAEuoZK7(02BC;b%@ z=+EUoYyW(IAK29O+W3<<$fwQs>aXvQ#GkPE$oqqdQiEKn^a|!mGVxx3F@@&KPv=Fj zV5)3_2FpAUzyf<94^dARsHTE9p~ULMa#|?mDg7KKJ>O#P_wLR^F5(ZcDSut_u22y*zd2{ z?;qLk`!e`NhC&q|64hj-)NT|OF(VeXP!%z)hVm>%J-YJDq8Cg!HK@A+76U40Qy!Rr z;Bsu4seYH9cV@{PSp_~`4|Fn4tOY#yHelO{iYzn!!6F@BrlKdZO# zXIkI!pTsZ8!hagvWT*HKm`%Z{n;;}vXs@eAcnU3=NrdfW@Ex(;CvDyS&3>Q$Nxd(2 z{fYkGVCm=D??LjUM*NBnNp(K3sdR${(CZicPjtyQ~8O;kVrg`kR$*!3#%#; z;cZ_2jq;R)uf(tTD&d!r(&25+zpx2S2+Hv%oxd{geB>t@A)Gg=P_{=GxLqM z7|il$o+rm?>d?vHG`SK~*&&ihvozOaeK#kyQP zm$}vRQ{Kmv_kvH!}R@_#~-uXhYVm+5YGL()R!VP40iq?vG!!b$^%ry590V zmLB*^#fR^=^k3QUzu0f?Q=0#D`@PnFbL;y3dQaO1eqAbkkKtS2-&2-<)_(7{-!=RF zFZTNe`<=DlH`{N`+WSRIzs}OXW$E9s^hHa*-+n)Bzfb%}9rst+?+fkM$LGIX{!HM* z&M{y7>%`D(hu}xeADJ^?57^uSm`E{4PLM<-1WO6hXQBJRaPY3^&EO^wTt*wkAJQ(P z&9G_wTI={rFjpMr#_<~Gxf@kQ)7Z~A0Et)QVaHdiRqKe2jLI`hr*&BJw*oT$gwOgJ zx$N<`y;6vKLw$TB{TZ35i1(rXEkb!*(rkq18)LtMyD`-!!t%iU`3z!bqiHoZ#dT=b zjPMLnJ}hwE8|Ya)uqw7(Q0$>gQBz`>C0aFay5V5bm6u#1ei|Q}96iY^R&|;M@PqI= zT3XG+=V$@3wNd$arF;%MiR*qIVTXF*&NAU41lYn-c}86O@xUmbq(DP>wYkoyJ&1}; zJ(<+ET=(m5cl2qIC71q|)bZALb9^bEZ1?Km-zffYK70E8kH(8_`|tSvEaS}yY|a_T z4E&iPT}W7d;V~lHA$7l0Ol}W@la-J+eKn8Dc`jyh<+$hz@O&2XWp}>RztE3^$!C6H z)v9d+)k;_WBS*(Zjvfn2h+R&y32k}py>f(Ue-=ii)hc40Ca&BFO$*Jl#S-HeCA@?i z)p#7-OkyXjeZet#C*<1B_`%4L3vkok5UwF(XGc#9lAe zmn7Dpt(liJ1vclvpz}4esS5`wlK{`vXcQNCm4OkFf%vJQ6aj;hVt5ci7BTT{FCPxz z42&e~If{L2&MvC`KdvaS-Wr;$M*(vy+At1Ge|}o=@!*G(@VD_HO~=b_=kHHHK{aPs z4XNgGw~dc!yC1jwOR4<8@}KZTt-n#x`Ys1t`)GILio<^!{6r{_BVR*+Z3G!W7%jLy zl4%4ft`RuH;{sSFlP$$9$Rke)Lvtr;!p2(TfeLR_U}qDxM96?OLri~W==o{%<3;6s z=zmA-AP+B!9S0Yf>wycXaT?1&TndvV9xEKedA?(?B?isg{s$ki{kDB~`7l=k!)VST zfH^l}&Up-5M#v{>XRjwmrnd1rrBJb6vby-S#l>G-Tl{co`6DZfKe({?k#$WF2*%^Y zZeBnIn-w#CE)`xhMCdpH6J3_)+5BH%zy0>xW9RiYOMjjH-fh1V%X*%VTKa_j7VUS@ ze$U$Pn*FBFwyYnvJ!Zn6aFB{bHiV7nZfONwI~4-5=@>gILPfa7S^*o{8&MxPbD1s4 z0?GKWgwgn52i4BQs(mvEQUQSE%Bx8nB}1|!ybE~L!ZA&6V^Fb0l<@&hqVXXCIN13R z{pORQjvlp{l>=L&7W_z`hz>H|Jzo7ZHM*$kJaDUVf_zU{mmWL|ESf^ z?b_M;{hQSv++qDMex~+2y~FxnVfEK`SpPb!zrMrzd#wJ29oE0Y>Tm3@{!6U>#U0l7 z`ETy9e$D#NJ$+~J(=C1X)#n~c9B1b*)<4l59hImYOPurdd$rPMYnC_t8EtpX^2g65 z>9>Jv-Y6w|4gP~~(EM;dmLKb??Vrn5-}TY1mkrx#TdVtz|J~Z3{!DWG)BmFLdzX*@ zv&sBH%kR|FPwZ1mIv>B=HKxaZba7Fd@^S@hI9=|IHXheM4`h`4u~a#?_e!_dY5bk? zzuoqK*C%y-vdVwIm8-38U2fgVO?PN7tDp4uDO-oZf?Blr{HG26p7C|_Qsu%w>$p6B z<6m|Eue1Dte@W&~TmFQ#KmMs?{-(jlq}lgh_*cze^8x<5wtuJ1H}@hPpXUevrumbW zfBv76^*5~kPrpjfeJyqVE?ECBu=*G6{CWFpUBa&qH+Q{`FHGAX>GPQdj}w2O@cjg< zmj#c$UJl<`=OsOktn|x#{wcUyeAdqJak?MJAA?U#?%(v26#u>5;A6wqZ_OIme4^$% zemUQltiSmL&HsSauZ^Vg|3l&9Z!LfGU@||j{7-uQrzi6Vt^Ft1`fOa2%wPYkw*RHR zeqWZ%pU&y{p6m6Wl*|t--{JFo3O+B{{o(LAu$F>v%TKR&I^BTx#q46?1&z|ud`NT0 z3N05`w#v>;L2O&9&BAVGYAS36GGM&KpnOoQE&e$LjZ>m*+fq@bMy-hGf;u`;Ss%dj zcNQPw5LlBV9N(BeSFxPX1nyO7LQq%+16-`H6jbkyvGv2|$Wrl8e^IBgzgRS*`w4p+ z7t*eC?$v|h{wD+MYfwd5L-4Q&jU;1;GxR#NZS)`&y6;0eq_EIufd>N2`K4V5-^ZS z-WFRa&z51?Lg|Y1EuF+yPB%$wcQ-i^8$dpYHz#2;0%5k#%LkjDkqDahfP=hRqv!iz z0PqmRusM(_F#@SY-!d4J6;)uW&T#a)&~sJJVx|Zs-BJ-RX9~!bSK#Oaxd8r)Rr6*c zqiP^pFEsstM%ySze-PAcvD!}3gf}BLJ|;`-N9l>6}H^ zg(Zq4r9k?)Uv>P^oC)y~0d_!B z)%htd^3*aOpr#lG;yErPo7E@jxTH&^`4y4sSE`jhzP_+zkHuAI)jVMqB6+9`0Nz|j zi8UwvYBLgGU77^Aqqi7vcQ<@PJ8?+4yaD0}TAKzmZ3Y^{nejgxH7K%TGthSIDGMm1 zC7(DQmUoS66XEz`Xlas_Q(d=T!&by#gP{K>;?1^<0FvD*%t84A;T->hqN1O}frc#s zqVoVY;v7+)V)sf^^b=p*Mv3o)Us4Mnd2S*B)qy7oO;u4CAtB*tlvu zAb5r<0e7PLvt}-gtqs!RrM%OY5V#V@Th|relIpzpA_Kos={gIgNZzJS z(?yy!L2rmPgn=T^vE5|Wq3wBx4VrH*ElJ512;SBXNi-=Uo7gHGA(&9%xqu4=I!Nvj z_ChWNSrhKT&ii%MRyZYh*Ph)$e}BJP&S4Wd1Jy*xL9mT? zTB6YC_0^O$*L#j2Np z#7MCB8tC@h`GF0kYy-Z9Ic@v%WaXPXmrs_M{zvV1)AncMQ#&0;vfZnl z%G#fI+Wt)2033QZUZrw?PUD(>Wb1O5y4>feA05GT#{LX^Li-zxDkT2e_-EaZ4TFzq zOD76_4krHmIVuMmeD2QVVIQ{o(>tu61t009dVYp}W9_LsJ5S#Jy;aqtU%FS%yW@$C zK->NK_o;mKd@6s?^8duDM{Eg>n{?A(d^ChkC>#^~bn*Sq~ zzcH80&sqI%xBP)r{^nO`{a1MYY^uJszi9dEGs*nmSz7;u=NFUtgI0go@^h*Db?d*+ z@@vz{`qP$wt>te{CG!Kz|02u3`0`}_#&dOiAHP=DcjLii{;I(XUpSG> z&sqME<*(nL%wNA&$M+)3Upt=6AGG|ZSpKDB$^5{^_wi@z`Ua`|oYjA~rWf} zyv_12yd;^wX7KYmZ$Fj4`Ai-EKid9}k0IbR% z>sJ4RR)5^;JN{UIy4HWUg9>FTZ419f z_~oj$zvIR^KA!)pxxR|uc09yzE!+KJ;|Kn`s_pN%agOh{%NQH$-+DRq)A%txlMeVX z<4*4iH*&wMe!ADL>rX-71D$~QLC4+*6I=~yC?vARni`hmKlT%;?AiJ=meX+j_!_qKE3E*_9quSsWCk1#R-oLvWVDfMtj} zI48Y9;ZmvPQv#iQ(4wFEC%U9qKX3@t%M98F2{WU1|Mc8PJlG;U33-=6L6K%98kj2h zfgte4*`|#Z<^@I3=Lq%fy((pF&M-kSxWBm6ERB%&Kr3V5X6mGf8|4|ePKsheooagM z#$GRBMS6^a?vZdaJ)s?hf2OI!*%Gu`_$^it;aA!eo+q|8r2gULh>d9U`)B1=lv$vz zP#KHZ2pi7$$Yf&o@;3KxL}-HT?jMytW=<1s>lgNLM|-Hub)*V(;0zBwSz@rgH2|m{ zD>V)=UG6yE^@C7XYqT;Cm8U4o9CQQ;IK)LGP>tP`yF7*inQ+e7 z2ciW-k71naNipUNzvy{^!VVsfKms_!EAViIVGvY)^#wSHR^S>gQUgOaDi0`E@>B(j zS`{d)L4y_=s?fg;6SHtrrWU83Tl~wT*i%ve`GOt~u$qeJ@CQ&rskjW6by(0uNqK^? z-WwEvs9INS3oAXB*F+e#{a@!zzWyQmb^HFc>r{@@zE~j5b zQhqgP`R}#-wN(Ah=WG2VvugLdzL2aRSbnDw!l(1xYC!=H0nsS&AfBWWyDtde;+9ed zo{II(mWrq0I4TzYxqjE>MXoyJN6+BM)SFYpi9` z6nQCFNMO3T+bO}_%%NZ$4V#6GJT%JifJlT`7KEN!?k7C!spD3aB_YWj#e_ac&kT1a^(#Askvk&>7B>HeamBTqOf&I%$Dy!l%gr%WPOihJhtc zzV2K!KM6Y*b*-ZhJ2vYAo>nzQqq;viVR7?LO)t0bl`4P!#XnL)q-p6_*l!wszUr4% zpX1-ZEu)<0cYFSBF#Xf?ixjT?{N*g|?WKRGmlW>P-#z{DpH%%4c3VFAcs6%yKTomo zpSO0NWEI!@HQ(FG`aK5A2y=JWSPjIV5r%8Cqsf-O?Wfc~;?ghQCm9<*=#g8K<#w9- zE}P%_iq8Lx`Ij2)^I!REI=;<}e78RzKb>4(@5b%VYp-pe@8z<7hj9_W$d{5@ z5Rh|%K}2Ayg4#M`85Cg>Olr`tMBH?A?hLQU{mOFlY_fo;XV8Tv zhIJN;plE2z7D&`NEk&}qiEt!{GbKaA2qn}>tZ*gK9xZ7ooaQ`GIGog|)9&c%JUIzSZ-7)-&+hhMhAn zx8{GOeg_}c{!^c?c+&T0`oSMbwEa%oANMoz%<>q`dfvq@`u*3%fp7EC-ZFYH6(1oKl z4$iy6S}A{no8=6xV)0+dWDCiPg+laUU43>0M~#)$P6WVkwF0AWzDGQ}TsshL3j{`7 zEl`iq$98RHozD;0`3zEUvst;a=V8}!vc1~(WzjFm^SSv-t+#IHb3N5gYS>|NZ9wsF z_~CQ>52u&i@7Vnfv-MZ#dL~ynm-~`H>9^Xd=DYnvxBXmg`n3PF z@~^%=Y5()vY<)K8bsk>M*U{mB(aP;hwHMe#z1-`zx!&SwR$LMU3!etaMIh$5{(78C z#w?7J>l_cdG$;W{W1HjSj(w6pKbdj= zZWYN*WG`LsKXU)#Hx8uL=zwBxM-L!MPzDMg1 z+OOwl{T4DZE;M!A10x4BN?h5`pRxT&x02kLi{~O$+^LPGt?M_Xn%Xgbr$34>g z@PQzGFFp#Ck=$uceVS*|kkD9&3|GQ5M#Vn-s6Ge^#M(SrUNQi}0V5z)erO)@z+gT& zkm#e(!vQer7HJAL1uh3dJr&kK(BIE|#VZA+<`!bj<*m77 z;q)Eq`19g_QFyt=7Iyu`-K~4p{(jF36|bk^^Za)t&r{YuUii80%3b{SWH~>dE$upe ze6!AL^JkOwTFR$B1h;gz9;s@X$&GK>UjLa5b;w|>Fv!pVjs^Z1gZ?O|OW2=>YY_dR z2)u^EJp?G7d4wF!I0aE(-JOB>323S7@Sg?vupEtssc{d}GOCEf2Ub-vzY=PO9<|D`U^*YsPvgTLDU zNS5n(zHZZVvc66DUc3Fup0Dx$njCj(nXXupoS~gB{uw)8QO=If7n|sGw4!bbd*gtc zyjc*sG=8SymB3MgwTxGd-y%3ns0&y>b+i0`--Er0wR89m44$?N-zK+*d#HpmfJ6}v zdgRL~Tdb95Pa~A_LZZiHBJ2M7)r|8IbO{#&UEV(%uTR2Rr}Hs=hr;>VHqXa&m-lgU zb+S{zwc3?{`L4j)_wnxvwA~pW-+xbz?^E{OmRdn7vGYszuWTfwfyN+{%zL(otA&;|4G(AY5Dsse=U{2X8F4@9xv?Do3($>f0gC`-M6d$X)~4oy_WwL`@NXT|2g~qJN7$n_{H1*L;HT6 zuaDLD{ad&BUF+-fGs*SYu>22MI~$ho?SIU^@3Q*isrp~sqx<(1%isLzWcx3${3lv| zEtNlL`TzO?Z6}w?-?Z_4!t&3*DcSy)e67~|JIfDJ`2&{!7nXnF(PaITmj77h4)_>IU-(mUFsr-wU|MQlA=_ix*KW+JsTK-xpKe$fkw{H2nQu+5-{_8A% z{U?&`*DU|LEPo)C|2oTmt>tgLF3Uu-E_5Wc^LcKj8IK`Tt`1&nze$T>Qag{a{4z(dSwH!Bqa{q3-BO z#_vHWYQ$VdK=qXZ49;gD9Kf@8^2WPSCq2dBz=2?frX3OwJd}1p%}VhV1zq(jG@1~I z^A#D0*CD-z-2DvX?s>fPKwWDQ=FqE+GQ?+yqt6cz$4k9hy-ebV1kY@JwYE}SfL3=A z4=NNzGB%@rF*DHdGUT<3>A|f8s<BxL>sZ?25S;S~DEZDGMlIo}<@nssjF*u*s$_fl-VB*EF z^56|&dnig;F#$PKg0{A;XOO6VRrY6HseXmRz?r^2JgO&=uFzoF-UL86h*nxe>rO#M zy+Zq!D0mlC#@I%D_J|{#0aU;sFT+KQEJa8VL&1!wP%{tp>w`kjU|@R@Uqne!C{fCf zaN8_C7UOY<+Cw~#m>~>svBDtib*kv0hQ|VvTh?Vq_$hmR1A|6%e#x@f6y|Y-DCh|F z(XZB>XYn8flvpcbY05B3ecTK2?dl6>f~XnjGKz;?T;}VH{eaUj?uC1EVF74{%QqJ8 zJP-`1BxtN=v3HmyZ(d;7@u2rGkCPWesQHo@8V>weE~>3)B?oxN(hXy2Vozb@aRfMd zG>i~YjqYn>_L@ZsSs(e%@24Pidy9S?$` zypD;T&G$@A^+T^qS(B!Wh_bT2D<*$}*snF$zw;KLF|IQ@-p1!X;{Cp4e zssUhB7(*+^>^+*Op&hYQL!6qJ4M?Qw6g_f)$6*k#YBisOVLZ;;6khn?L1+}r$%yAx zv4Efi2#@dQt!E=1?BFZ3{lW~^&RUM!~MDhi|y zEr$dTufia(Udl6)zuwSXXXykuT|r9xdMmR_O+f;tl#1rwdIP<*SI?d6<G^T~Wc{d~pF0h2oVWaItm3rgyM0<#zRPdcH?)1PAH1x)^LenJ z@k$X-2{48$Vi8J>>RIe2-U$YhKe#1MI#+e{i$KfrjLf z6{WK9j-b{kHRq~*G%crH7Pgon+WJ$6fUwBZx8HoY?<=i}3q^sw?e67s$E{_8Po|&TG`ze1yW0Nx z+q>&$HSK5ol}8dqueN?NYkw};xlHd*VB<^-@(Lz0_s8{9*4J96 zefe(FKij!qpXlzqb~}~eJ>9`Yx9w$>d+Jvye!K9i+MnZ}+@#LO@zeQKez*8(ybj6{ z6u&8I_4x9RO|b(c$>j~=@=9-9nUe)Sug*B%pKtIp_`h}CuQdFuzx%O)AEEsUr<~dX z%>%1jZ03XF!2!C5v|*@#8IpjT$_t04YSkJ!S-u>|JBFT-{&qab72^{SkwcjSnRA*De3Y&2D1z&o$rSfBFHf@AvnGzf0z?TfX1_ zS@}QwHF~}-{;y>J)2FokeP$mOd@z|mXybd6jeplillhz0zstvKzp43tUN((>=ym$! zQZj$t@+-!-Tr@Zg=l^mY-!EAImwsRCdwyW~jvp@kMk?RhpZ#&=t9E@{^L>A&E&p#8 zZG8;idixtEwEwfVK7+rKY=6Vn@5wg4;QgBK^UvA(yz;&3SF(}9Uz;!0_OtM!e?Qni z1s5DJ{~%dGB7x58a~h%Sr6?LaA%_u#}eY|MFX{$sHgvKoNRH zCr5`S6{At*CyEfbHDXT8#x@#LkYs9o66Alt)rZq>*IguLj8;QrV6q&s$+Y>C>nn%c zkG`Jx>qn0UVePjId z`X6ihYV*&Bj6QNZ_0+I(p8sRJ+uvuM^1VH`)AzLh{_%s_?vwl5x9{(3{qx(Dj`Mo{ z+o}Jfqt>pyqviGd*Xw`zkG5~$%Q>CyY5&cFZ_oGNBPM?zoKZM&`FqaNUT(X;_uQ!S zyL56^s`_}QU!R1>tacBXpOnaC>FP@!N&MoKiJr5tDuPZyg7SS_#B!kfkw|OhVFx%) z>Mbd^GXt>k4#HIJ@$L*fAA;y|DuA;va9SzhrEF}8(UT8i0@WITNdPwn zP|_kdLi}6c4$LXbWcRZM{#U9!nCA!RbLd19TP36l*R#AVaF`00ccoOqvLN*30leBy ze+8tlpXHUkfvi9Ns`Li(KnxXG(QyMv5{&bVW|Fx-1GYch9T2ePC0PsGl}F08sikT~ zOd>+KvO&}^UcjP(MGauVl#e=~nrnH6hoy=*Ou<44ugl0G!VBYdYK>MRXb(>5Q9Xd# zGQ(Lw3H0nBh^%ZLs=wtXNLZMJHsn0jAM6D((H`_8h|}b!De8>CHH)VsH=RAAOgkJG zpDDp?4>p;w<4@sLLv#( zl?F9cxI|12Y-b-VJ`8NB9|La^Qr42^XC~B7nI1gWOWt~+(L%Y>L=(E#LgeWNtMq_D zq)Z{{nm)p^xYCLW{@h}*324^$-BFz$FRD{%1d{;uQ7oEl69#dD*%6YY1WlEp4Ol8r zd2em02}HQQJc2mxFw(#iUFb>21M?5rNLTXvZsbkVBdm-(C&QZwpaUbBD4;LxBiy+x zTBisUTz<6c>3Tn2V?eU;V|qV2U2^^jn(y+XHOp@YQ}J(p-^Rc3@243(lh!|+f2Q`6 zE`O!co#@+OLFc`GZ-;T1{$cP2Efbq|uO6~7Pe@O)(9 z?^_JM3#om-)FphMpV0kJRqvSW1mC%e!uNQ$_NQjm1W@;gw5!uji=|iv58}Lxe~Nd z3D-p8M{9+v==l3$2K^Bh%=jYXzn88s{63HYzvmxk_+4u# z99|ghaE_dQ7}RppD_0hN2cPrUz;8^NCBO5vB`2ybFl2<3$VgBBWsmNr*sP+HqlEH$!jWhi=z}J-Y|=M^bw= zwHHOQmr!y-_&%!ZnFZg2y_%nfZ?`Ymye?UP@HO4xn=Ja_n+^U4Q{%t%)!I+$^A$^W zg8z+kHm@$>f7h4jc-L3ETaRuha`6S)?$wr0#6_L0a!rR;iZ@k&8k3B+6z}GI#QWRo zd@uxd^(-a&Frz4+DbF>bAqo!@Xa;#Xw-GymqLcx581JEFh=rb^yM_^s!w%WdP%v~? zFf<(8byslLa4tF8q3HGSoEiK=>5NJOw6S+bk zI-Z|b=sCD>Pls_B{j%$+T5j`|SN8mje~q^LSe~Cy$<+3^T*=dc+anIgYy zc~xSEZ9rO`5aPiQOmsgGbNAszh#Iy0hsbWa-=+^^Xm@Z|6wpj0;&j_8HsDrQfI}x7 zd?+eEM{;XO{^YCgs6(e)HQ^GoAsLBid?_3 z7;XL-*kbVZ7?SYCwgAHIn8JW6HEAFA<8U#;SVcL2pt6{$ss|W!mAeIv7j>DDvm0&F zt8f^%y=>KBCER91%_^4PHvgtx*nSq#WNZ&ysailW`;Rm6z3VB?;O2Eg*YH$Nu?Mtl zP~b1@HRKnUbD;-i|jmp@#5lGabdU#IIs z?0-_GJdTF-#7Kz{dk@jT1;!PKA1RhYhy@+_uJZjFG0XBO)8103`PRoiO4QV#4Vd#5 zA1NyDLI`esbpW za2Q|c#Wj&%tFnN0la`}JZgn`k{!s#n2ROhP^Hksri#3zmyw9Fq?X zW8`fCd(%cn$yJbAr2os{MS?{H831X&8b7vqjt$SrzyJ(yV&N3Vq)!sJ8Qq+y*6~`M z#6p5+VLKTV#W6I`s6%@CaZ5xfqRqK=K=boE&_Vt*o*{qocCvo6&iAM6e5d*E zwa58UfJ`#cKc&@tAtmECm|0_ma2VOc5C$#C@Yy2XhM+8hgp^57?3#!fAcsxD?l+4bclaIe z1iyD(S@?ZU2K?q8XZ>&Pdle1`x`kg`mkq0zI*vO|P9Jz|;8*>A98!$?q%TkitVYp0 z719P`)#N?JM~c9)V&XEDl9{zig;qzh#`M}_luPl7_8GNSYN8^t( zd~STd!sq6Q&Nmal?Eb%C^!@Y?Tv_}&e&=HYpX#Ke*L}=YN0~uL9za9_nrblX#-*&+ zI>p){Md^Nn7oMi$y~Y-7`oHOVIDD<`O6EI%==b-g*(q=L{vH*XHhBgF9VPJ$Vgm6= zDK3FzskX{MmYI8q3_X2HEw`CyIM1v$vgn5cS@`!v2e``W=yJbXe5SzmWzFf^XD7!K zcs~Z;x%)JKy-R;fuiojmc1qj5+WhN5hQp!v5Zn}@FoDWrnGTQu5}0X~5&sjuk&cTa zsE$VO@SDqk->78!zp~)tu))WrRDqh&3GG|E{I8kv4TF!tAJTI>ZuoEQKRWP1Hl#JH zcljgK7A~4R`)b37@9+8*-rsrK-ypRh=O5?&4Tsa^{WfU$Vfsg|?EQA(*kg14)Bd^Q zo-2-!pvCZn7O#q!qy&UiF%qG~oI~>P(&a5N7f6e37z+^s2_c4}k;IizNa9{o@YAM0 zA|3wJebD&|)v{7%6^8qjt{|dn4ci%Rqr>k;2K@T{y75F^@9o~NlL(p&Ss3{Bcob~v zz?&6+-ejvw(x}_^O?1&f3O$DNUbXX;mLFYwyv~=!*BD&abFy|&*E<|=`VYHb2aO&G zy7b3PH>f7a}lRP_K%GWEpc4YCkK!* zq`9@6wUj%e3|t(=(*cv-v{5QX)k}_<$4a+iu!xO&b8;Kf4lAf<<|e^quQUx zx7m10vj24Zozjz2qlb6+to-pqQ%A=R9zTM)%pn{MI-P4S*A)7Y zH+tmA@nb`G9mX!o*;y{GN+H}xpjnX0rd?+wtxv}w~ zmmEh^;c+7&Uab`weOF@soGF*ivh-rT+QgF%MO=y4T++s~r*){uj~*W7=?S~ykkM1U z#P>Yr7@%nm#6D;qmLDEFGCnafIXQyCjZFrCVyTB-7v~#@3a@ULTK1mNg9k^BCd$Dr zlJC`67jtEV(J8K?^dzP{F?`SH{cJZJ3Flj%U4$o*l;~pV*iJV~hjK^9wlQ;*pFBD= zK6%fWpKQz+s_aU!hAA0t$xj}eIx==}gukOl$M|z_d>rvEUsWwbc@EH_H5y-3 zNjT=yIUoND0z4o$8boo}eQTtBXdXfR@7bq*6a&k8A36QF_6vG%{F&#UPUZ)e|5uiO zAyt3l=e7PvJ%1@#f7eeSU%E zKil$mrSdm^R@)CO|H5Lj{+i_%EPpUHzQFPaEdOG<{R`Uut=|89s(s7vbUzRCeVjU; z4-r7=X#~r7uYr^kV3zL!Ex36euBGLmr>}nYoc`CNEgSz!N|;w7QHI&`5%9wHD0RTw zTeE;dSckB*z$NK{IJML|+HJJ&v4wE)@(ybB&n{vzc&@v()#wZFYh2+4PFtwi#KU68 zsJ6$;6|yKe$g2JiuY0u2`lJiC)qtp6jfmKCblN`2kZrXuB#So8@sYUMUVSBm*aGW= zX4+=;IDNJC1lj%}&}-Z4fHe}dU1le2A4KBznvWBdnJp^}v3-!H+iPFRSh1&qR6vPb zIS{R#v3(H5+iO1}pgZ=#_CbelulrK zkzU1ea24XE-m;lX*V4{VAzP~S_4D{WyJ2-+3Mst|T088K7 zTwBHiBcAC|t3YiVH!Z4?!gd zNL^!$2xddjVI|3AUn*u7nB~5K2qwfxIY(rY`3OYvcjR%K=?0@!Hr2Ks+izEgLs>q} z97wE;L|;JE!bUJtwl={{sT8FUfJ~x z$^6Yf(EMk4zSVbpvu631j6Pa>h1U1{!16aOe`7V7zy2<5zhQW7`Vq}{`Y&hs!&ZND zB~}0TwEjUGU+tTc`D?$c`E|=5cug{Y@Ygl}C7%Dysr(JiU$yZCYnmU9@7FZ{sEu#E znXJG5PR;+=#zV5=wMH^O_ZynOX6;}2ddD2yATmDa5{>4`(>u>yu z*8gG4-$>ODto|!K|67vdo3{EkoXj7*Y6lT3gez0j?}#{v@)Ww`>!W-5{M{fJ1))AxE_YbkL%gVLC!L-Zy1(LO6={&-dvQxZ4k<^n;ATHxwu@cQ<{V^1Km|us+IDr zikPi3FqM7{WNy2OzsYJZKo|~wpXPx!-<3xo$imBN2pSC^$l?;*?BvPWdWi;D{(*-+ z!q7xCWFh!fuLl^_Go*02k_TB{s+=j;tCdqd$6nU+puU89>}9Ztm9Gp3EB7-ETO7sU z7L0ZSjf8iw2*J4Y(j{3G@EH)s&Q%fP87)blism>Eh3)WYPanN{W&O}(^KmaC!d39{Qnu5;BUv?FgAwAlGnc5AVCamz&m=A!upog%XO|!Fo3FR&fI9#1bI$a2Y#^N2I1~d&`Pptuj`J zgA2L+#FCQK!p`D9%p&%}Z?U1>hF}m507oVaE*#&eMxG071T)Z06AuyNpi2?JQ@DhH zwWv{v;ztn7oP93mLpdc7q=8{GRzOL{*kp||?3n~u+zV~kz%9X^TlVk0W&fT%LN507 z=i5(4j_`ITL#v3^$zZH}-V9qP(iX&{7bGS}0iO_#Tdo$|Cq+Cl744HuBeuc_;RR(D zDP_qqRA^We{s>?O`ty@81rt!oQY%fMO z>Z`nGZx^fVyIG5M7DF!BT|=EiN67Mw9|5F|0cL61NMNKEgiP@nyiOn_0&wLj_ZIqr z6@o7KZ-Ti~0Lon=L$0@BX#5oP9hO5GK!y#Hmn-P8fT!OM5Df$DU8U367T*%pTo%6l z!s-6P>6RPg|MJtF%SF`2DI<@RhA6BoPl==kzrd2a`2!&ie|eQix?I@}0Z!IGlthax zc-AVe+Hbir*H{5d@^yt#~SG&wI*j@Us1;xsq+&Z53l|N z2g6*xHXI4M(ppn zdIqew0;G|)#PQ^fA*heWrBk5{Q8ie|Sr%Y%d3O3-rPFg}-#7jzia%VxwsBF@>GIvC z2kub3u=zbn`E1Vm`Q;aD{`3!M{x#O{`X6h*FR=OpsrrMK{~XKT_^xF88}HHj70bWy zeaZZ3%fD#-kEiMfmj6!6zj!`bf8&p|{Xg*fsr+fn|1--UNcEqy{P$UY@SVx_*Waz} z|E=Y(e{V8>(DFO&1LAYfO~KB21tIg`0tQhrxFkqyHOaeQ(k@TH@yp+ZDgs&|Hw4yG z%gdqB8itD4e$;%}EHuE|XcDDcF`Le;rR{jLj^E+~l?t3H$Lh0G`H@IJaFi>hvzF7J zo0|phW}R^8%Z&xfyP;8q(P_Ll$K8mq*8np~#0^w~;?$5wdER=^bM%6(=$q*2=tF_ z->p9se?nK@9}G)%hznF>&mutmaV9*P=hp4()rF8AXjSI}@*27YzMV&40QFnKtz=@$ z67)B?>F1G&;X`r*O~Td_fWBIE`!<8fb4zE`kGLOry9dzPxDlqB5`)CH$L>E&Ek1)u zB}j#C8Xub+J!$K@^(b<=PkvDCFOsVpr4F6g`hC@Re`@RcA9!#3{NKAv?}x#=^*8FV zyT7`<|CZgp{gUEck0ZG8UQK&%mwrU?@Ok?k|0zv-e){*Lwr+zzs^!+a!26Qz`seg7 zG)|Sm3slIzJGc?@U#OO#WCs#H&{Kz6YNk04AuV?K0G00$)>bLy6*w{OvsACcV_m-x z_d&;4vJ?oQMrnTT0PWbIwnJZ~x`J4~uMdJXd{9F?g0dpfK#psvNI{ysxE_p-jj#uG z-{7mD%{nBKe9KeJTufdE>kVL8Qe%9`-i-&%dV{BpGDujt*xgert}N0PfjQPvrAN%J z`Nb(IIB1Afd}weK($7){rp=HA%CyA%I5L&dHgWaA;;;tgqZ5r*4I;$6In?(D1u%7L z{%9tOQUUa$a2;+BBTEUftUa9wLeYZIjovtBu`bAZYcYm5M!oQLK!)a%I`ru`t^ z-KG$O4t-b*jR~T34nfINEnT7MA*fehH46H4`cOR5!g9XI*Ex7K0(h*j#+hX?!3s3e z2L$m_Y(y*tf3V5dIbRtQF)Plfd&9GKtawT?_)I7 z?{xsXhXC8YqdZ%_y7l5&If$Zjg69ZdaZ!+CDY%%O;o2xN0kDR1>F-sRI+U*y@B|W| z)j8n*0{>%&zj^4a&Bf;kHW51wd}RL+fBmxlPcahfSv)a06R3N2P%)4&epr`r+{X@XT`q? z0v1FOo97LlD`SI~TA6-4#N8ZZvj**s9JDq-gjG83wc!l{8DfKaJH26~b38jubr31y zx!x-X9ujQa_DVa#f$FJariGS0<*cE0=0UJ!0RazkoezBj1!Fsb24q!w&fb6(WCH+b z-b1?2BoqA>!Zr-(xj{TdK5GbQiYkT0+?v861wte_HiQqw)XOzkJz&fLGjx@&7t0ME zqe?J+2(69?hLme{+8KS>lOzhoEjzvnyA7}(z^K@!X1TG5W;}o*tM~;#d~WlXx$!cV zv%5P_kG1gP!eO5))t6Se=~xQB35>rKr-I8VHE<1MHIpspV*rOcJVeigNP}FNwoBqX z#5_gME5Ll1c_UA{0Hd9G2>yN=N}UEN3=&DtN#04g#9~MnR}Hqspg@d{c=-yv0~&M? ziYCJy4*S<#4|_LMuS;AnMVB`?5WRB^PIQbkWWl1$Fi53Jlw^eHOdN}YV&0KE%x4X` zN7$6dN`&+rR)|=me4J^aEU>#gUkWeaz{8Uyz$s=V0yc!2(z)4^gq-I#&o@DOfN8^d z1e4mJQHg>Hu5nNS6mwOoK?!u@tWZ=2L;H|@95w`gfU$90pn7#F-*URu4+J9&$xq&T zaZ<(j7S;ZvDF_|p7)2Fobg^9RhvfnYp#j241Lp?ROH_oia&yg7tj!U zq$2#vW>@m0Y-6>xCOmLyDu#+7{zEmM0Swnid8f7mVTOd*6Ir2zjK|uM_B&Ua>yz~C zVzYAE`oMaL&H#%U4cS2q>ybACF$Siwf;#|_WCLbUNQ1E)*ef7l(tRED$HO9iZgiZ5zVkC zLwnLSh8Ge{Sa#MGmd0>Pm?!j~EIMUxoTp?-Z^AV3sz3u~CFlN{QY{X|dZYLy7&Z^E zbL2ymp_HYX;c*ATa;BNWgkV!;7(it&c{<0#s7ehbI1dhVR*pPO&1B;I>fr~Xmb`I3 zFQQy$8Y{GCU>FV9>jqYlP_O(O%ojnB&w=O@JHqgQCCvzZePTCJe?Zid?_sC2pbfC- zhA@Ns5qq^H_iG$=3cHDZ6_q7Nl#kywWEmJGL2xP8LQJ3(qXM~LPbI)WPk8~6JxbEE z{%Oks!u)6zT(B^5lEagf><}jx2nv+AQ2HRl5aYPoXn-|zGp!aI7Tc&Wq6G&68Ybvj zEG^Xvx{Lk8+|1q{dGcJtCOZQpKHCt6B0hyv{<0Z<1!7nIZm^3%139<39Tck}wx}pC zc^M12gB{=z6Gj6x87?Ce_i-`757Nx`0Wr3HfU*rD>7EDb_@XzL<4TM@!j-@+^7@VN zU_L(Vpf=fNY<8jI2*WWMR|6pZFwg<)7;!~lFZC@Q4vfqpKE{WH71a?bM;fpOFoi&? z35EqrW2USIbOt;DR0DJ91;a$h=Q@CG3ow1Ka&@r^##&+2T!NM{hctiU%)#x0Gm1);4rw1GNa=9)u(pfzt_RYbzbn zuPOl1fi+5$!9w_h1Ka4ANtS9{9<&gHqaLsX+;oB^ZhCK<;(tbl7Dj#+Ze5TP#cE-Y zXvT1VyQS?gi?APftYbndtdMoKRmNdNk0!w5>WX|o>Dt&0E+lPC&Lw0c?%2~H7lqZy zyTnSFJ~X5vD!YY9@r%6(&z>>~CJU3x4aIfyc~qC1FhfV%ylC|>(c%-1KN#x}WOlIf zhhGD(BwFj?c%i6ZZ9oyxC7}ed3UMNYU;{~Xy%xS+t~wB*A!CxB74KpKoP1Xff=hx= z0Hqm;eaL$*&&Ju!|JUBP0LgV$XSN?0XkOwGAc0LT4y;CwG#<+?FgAjgEr|#}G%E=N z7&F~7(<5~>kEUm2X~2*!0t-u$jbO>*;t@K43A+WX*Z}MBY-|FA0IL*BLMmHJrywk$ z*kyQB5_SpR?>mqG-urjo>DJSBEmI}kzW4l(^S{o2{&UWMju))vr(>5f-({PV%XnvM z`7%(ZkU-j`6PNrV5mL!!rccKldrTuHAU78ZfVNgdZlELXQwX;tR#wZIkXD|bB#WlA zEF{CYSchA?G&q2GO40qD1|rgW5;i4E?xi7>28JsU+C_S>;{`xB*&lGeFO#J3f(gtf zNhO8ZHQdm<&d6w!ZTip^f8etbX6oq1%@nwRt{+|D|2U&VO1&~Oj%^YY&v~<2vLE}x z?mY*@izx`A)RnD)RvQ>4&a0a9UD{v{d>}0|^E^%P0%sjD%aEAuvh=d;MAcp=;`93K zUL>oxXt=L(La##32`VvE&O!@Lkr~FoPrA`) zis=tEaI}D*5V@ntX;qs>eYnUf*B3z;Ik$H2xsD_a%nKy9EM9s2>Dn^RQ~_DynrceO z>}_Vy3kISijRs*v`O0c8E+JaGY(?BtTy`^HAk+5a$k%`bN!$R5CR(;Er# zC}#5ZW4x5p$NJ3DbrG6E!h>&^Vc@uN%S{jsO_bw7Zn!h;=R7h3Fjn;uP{gYg@j_|> z5yIv`0`*`;#+*fsfaTpJ_k%yxQ;yg=;UBN>ziu-}0}0JfGj2^N(hC z(*4w6xTh<6l0F(^K&m1;oeFQU+F*F&_{RBvWb-SD0iRYp;?L*${em6ZbG--ODOFWI ztaw!I>Giu^O!Kn}Z{MZQ-v7=xyIoiJBU*nb-{2p%`a9Nt4zFIM`D+K1F0a}8ad_`Sg>NxAwR`gQ z`yf30*R}l0X9mNcWbmrB-|P4Mml=Gm0Dkn|x+FarmEXNU@prqlc7$KW;BS1V&YzyG zhq(T?8T^FxUl?CQ@a}1C-$`3X4o^y2|9`ap>Dl-N_`UCu5}s-8>loc|{~kS~f8Gy8 zPjc*Fn#P{0A+9gqB!*w)bSX7#%qKhd?1Ds6gfqdRH8X*Cpfn|GTgW;DWQCED5UVsR zbr23@i{StOrzl53USR5`m<-C3{l@xo*$;vB%2v8pZ(O93Zb_X+8B&%Id>AwOp*Ypb zf{!&>xA0x*6%#Fn)n7xg-~yz)qJK0G5Rh#V=F0n(r4@)(m9xS@Rn*9rr}9fNTSISJ z2@n9x;chgQx^-~L#4PS-?*nhY_g>uRdx->DR+nL^>@$P~3(bcxQP2a+99j=%mqr4R z>Iq1d-!4I9&FHrM;5OM8kor)CNO`KT^z%n+2pBLef?AOqWK^2hstySpxX98>w{Fr? zGU3LPqw__$lob}@n})!Y@nFs6wB|8*oaPOUgNvAY;ugTPfbsN}xMq-if>);G5RKNO z!bURgre54=XALycCXt9(IiwK&04LZZVwi*Sbf6movek=AK00A}v3^L;VRQ_NlfCXv)z(%q$$BO)wZlwJI=T%|OmA91A9pA4>;fNO`aHkc%F9D4_fnp>;9L z%u5-JNTN;rEbAGxA!D9ks1HVfvxvvy)2W|%xgvJU1g6jF!64upqDE!xw9w=X(fhC`#qxlQIYQp9t%t&f7JAWEtKPP_;m1 zp@eAyY(>3nHAcoDIfL6^uxT0rr#ac@9P1ibzsv+Xe^OowLkemEXV}}01ZFeuq6S%( zO)L)L7CB?H5sOQUTg3Q)hhL>vskOTF^T5^ZHj#GbcgxMF8=X96R;h-au}b?2MlN>IIA zm;xU(R2=DmqG+u!uec2MI4H+^GHPKc!LGzDLTO3lk!>rpLG(hguI37fF@8su;l%_3 z%aFk-JNt{>4}mW)WpdEf&^J34*?I5h((JeF?;XaMWxoyjy&n}1k}{LN0@bX{2D>qY zg;)cSXlm0yjpx*CPKMUS$sR2Pj0@7iMGQg?*s50%cDN=8hvEwmc1NOQ)-C2b?$(Lo zObEMM=wi|oNWmdA;-(Bsm{toeGi^&2Nv2vOxqvDv8~O>qzi65Z5tX7W(g9##JQcJMtv)Py|V|FzkI-6@OS#8wkMI*x^_2_|PM9swh zDLSG&3~UM$Ut==oYpN9AS4o=T6cv*i8Z53SbbtL=jTB&Wc@9y7UH_ld=72d8U~wPe z5&}Wxizop?A(9@K>FCxU)#_(b9elP7|meA!}aXyzHKhgld5GOdzcb6+w zKd15yFXrACSpi$)B9xgRShBC| z-~S@;#f;8V#6fAz;c%3d8L8=>9hL)!PU<6vT2|06mmncFAqP`>!L!Oz!x_eUth$uz zJRf!`?nykOqd6(JF0u}1Npm@b4C=63T^#+6E+wkP4+ier4Z&!kLG~DC#X)1 zoyXPzT`i9r;%^qGggtU40UNNh308ad#8lq5bLS0H`*!Xpvo`^2|BMH`aExHp;O63E z!?U-+lQ#H!jCV`#sN;Gc*gz@r`seRukyj+}U5^%K4>&%C>457mBx8@-X##8l=adwN z7&-)P9Z;AZHWbD9fPtwruRJUGKJX}RnvJfa1*?o4S^DYvDx8DM25aRhYes9Zl-nVX z%tL{UM3yt-D9gDzJM{8fH(Hwj(_zpLC|4|23&}KxU-7r$PQ{$U3OdUOWcJXbBcq1W z>I|%bc%T&qYcsB3%4wb$8nYnGrybIa?WE68oVAWDOk>QDOe;`l@iZkd=2W;sU4fWL z;8b!_05SZsTRLj#>w;EkFSteq2NIz{@zRt2A#3X53$E0>=$Nw8K1#y_hS3Jl3BiAO z$H zSa6G)PFtyHNh_J#zUb>y<#xQ9~RHD22n)AweLzB2s`1fERSb4OLo>(r^?v zCox0(2DpyWK^)}JzaXHnDLsa`4$G8a>1}dsi%1`?B7%sp8treo=tezyM^_~2h@5A4 z8&%{Uj^UB4J69%*@K#jNjlu%Ip$649o>?(@l5CfIlbOq%A$Ka%N0D~Pv#i4ZK2-d+ zJWlI4X>s?kV>~N!phz=d1M3|`;_N1n6o=pnBS^SRH#bCv!iF0Gx_f;4ES7(=5qE>} z0lTXVPZ_^K6S!+Ns0yqtBBUW1r2!VF>zjMa4I@RIM{{9aum;>_TIH1M%uF_vSaCGV zM%_SI@Ck#SntKQ7fDDHD8XmihhU-~l@3Pmc2JE&4V)8Sa&X`n<0$*)rsy@Kj8#~fq zV{i5t{Lunym^E5{61(DcG>*=*4bO06*dYhjh;z5US6`3$C$b#mMw9q*) z^1B?`q99wsn$Y4mxo12TDq*z2M9IFiMCZ>u)$=N@Tn38v56APmd-La2|L*5SfA{B0 z?A$WpAMDw&b7b_n@3m*=u|B|%56$1dabOC!f9cq{tNW)jlCEb@&y@I&=-Gaxp7*Mc z&}Yw{QL?_*G5d1-Yg*sr?P~YZwt6Ra?&!;NHb2bWsB)9)5c|5KI*Z2lWmax1Pf5O| z?JO$qY=56fbUaFxa59%Fn%_9Tc%1Ea6_wZiU)rv!wXbM=USs1^i3)0d^FHbqvp*|6 z&Bn{{Poi-O^uprD_x@h-?LEcvS$jH9&A&&@46nZasz1oL`*>7u$Z(c_xcq4CJ6gZb z(%$8YzssMFTRR<|7~JJcl?dK8xXZVW+q(1oRqJQB59`GBk8Axdf0~Tooh=G?`PH45cqX^%?NJrz~|TIr{uu7ZF(bg1@utnmjHyb$t&>8XiW|=ZvU_6VLbyX zBQuD<+5w>_rD;3>M;uchwsKYzg^ZsNeH8#delSu>9mJ#cy#~f9%iHv6! zftkUbX*N>`QG6syA)=;CZy7qJ*&{O|Kw>}TRCeT|dD@PHv$)DkFo#VFnCWu8#!DG` zpD54ZX{sXmk%$-2ENjwUwY4K_9t(I_4wR1h!qJ<<<&%XL5c?qXB16qVb=e@~csP*E z2U7-@@C`C!P-PTkj<_$fj=2KHfu*L#3Y0otD~c=#7ZaD(hMKlW^2jp5(r-tVbXh3B*-KG}u4+no%-jfV@$%z&$np@dQS8?s4O3?gE_Y%N*~-GQp~o7oMivXl zYKKK0ZuU|l7XyIB_08!lkzj%xdFUUY8{v*6m4s^j5Y)?>q}eKDVmS#MT6aB3lNXIO z46BMd1ZuOCs9}Ej5f+)XXf{lV3B&+`vj|;Mzk<|_xR73KwZwP`zd)2Al4^p`97EV0 zEVSt*9L%XKN12ca(5yA?V@MU!3KbWSvuv-Vze6L8#PoO1%`g)k&u9=y;aOZpFw} zxwnxeEkb0klW!zJCEI^RcJYRFyO%Syf1T!~&wU-RTeWiR#>P9|_{uCY{MbqeG5IP>$ym8rB<~EEyU|l12>|)Gh%9%Vm z*+!+yvxM@MU5YArE{G$p)nfFw2#b*1)`0#{Y*o0N&?M~kSX;yD8e~7Z!_2y1_nz}z zoIxx6ERfIZ^i`ivt{Ms^ur6n2-a^7;HL!65stxiak49_1%*dJzsBtiO1#JbGGl#71i(OzsiI2 z^~dR5KHR%x{d8`>)E<&9F2Cq~;Ujv!y~GmueZzQO#r9oeMFpPXcbC7EwrRUBj`DAK zo!-yuJ#;YKeuk$nW+?llKmmF9i9-KPx;g z-{nu0&4clC`ABJ8;XZDa8+3iR{Hgo+!TE#yWNSWu$@05=r&r0tD>rKSE`RD>rEr&@ zBnEf+Q{~z`ykzi?np{13RvzB9`dvO%natPUHn`t=pSUy+uUh#oU)%7seEHSgihq#r z6!d>I9s6Frzhl5gqrX8OYY93RC?0Y8bN%l0xARo;Vop>!(`)_x02L#liV~{ZtCz zKL0CE8k|4SmtRu&#g4c=oql#Le++l}*)7QL^u3u3F5l^A<;jEL!{}p#Zr^Ls`n=}; z${!hB8ks+`7WbZ|>$7Ul?zQ>#+Sf7m!TF=kqqP4$-T7XhKj)9U=krfrKj(@+^7VUv z<$s)h746@{_?JN6&Jq7~uK0(W?yvOec}iDCrcZW$Yi~DtWY22l)aX;`F+ZnIdCH(~ z_x1U0*!j%YU$@|VG>pET>G|%yKEFACSag1J{;=r$;{4%#b-p^+=gV_NKdVMR2d$a= z;+y*?>;9|J=w6ItXXoI2_jmtfP9G*sUUjiGtZnCWUmtBdhdRGr-J|XG`M>rcrT-4^ z+^ldvAC-QVm#?&MQn;UwCLgK!T|QAUxbqi@;TOs`csvgAyBk=jSIRN?H}jBlQ=+OH z;I>dLGqwlUgJMK39$cwP&AHC-d+bn->{qRUUsyNeY$!=Y$pG6`DmF#c&=Tb>oLkzZ z7b|2lg6IG_^?G0`NDa>7icRs+P3?qgG^7DkdYL{9))n;V8X}|(Xj;FtJ@k+G0Ue`A zo*rHm(V<-xlzo}r(jv0WRqZA^56T!=@uIW(lUo{glC}=kz}8y^YQlooi@*>1Zou7J z^dfGaKtTjOZmJ-$yVd4BIrMyLQWD~Il*Pta?){=HXvv`$qILGsr7g54Z#J5=b?I*t zuW5x#7eOPYH=+Sz2DQOKa3pDmyyZNm(&PHNqnW#ARxp}Uw(GXE=fa?HE%^8zpdC-^ zH0Hle*0c?o4wnu{mDj~fAdiI<$(HL}Pm9I^@EhR;okM#DSMBHG0S@v%%GvHU@0E#t z3hlohLkKmw20+t}#gw#(kj6jKCWPTe3({%G`eXYRnAzl2%p9b3{zxQzcwyy(6*S-q zvtg!$=Kou#qQlUXb=IRCq)NGwHmMIN!y&D`1WD?Q7M&fE| z#k5jL*EoqaudE=N(V~WR!gR+h>nF=$Sk86-3tbQtbtYR^V51}2ps3n-&_Gui^LuP% z!X*rSIj1K5QlObNH6dVPT;MtgZ_&If370+L!r@*G8Fw8`lb|Ti`}y`EK}mB*U@OGF zM_Jhz3Yku~8zbu9LvMeGffKAxh`<6uYrC&sFuE0Rt|X5(|u7MGQkHV~Py8 zBM7S{-hj+DWL^AGpzSfvLS)#5%@$z>yPX@?s9_3CrV!CjY#}+2c8fB&Qyg5X+7I4_ z^=o4_xL<%knM6G2s17&pa38Ay!z8d*N2QN(;}YBNG%hJFFCPKnMPDNxR%3aNT?Y<` zHj{EqI~lW3wAPszAX)&yq_efmxQXzFF7YbWTNFJI!Kx&kJMi*?6?+u!tay!5835@3 z+4>pe)keQ8qi@)SdvA)Jwi*1xxf<{=FS3??1Ls}hmoZ6b7Bim5(%`6rZl|)91D8tV zA6Ur)x;OAzbYs7ti;Q+_vkeAw<^_FSIeUZGeJo^Qj#!DUA@z3y&-G3E6*D%Lw!ln7 zS{@9*w10ztK;Hes#%#Q9IWn7;Y5+s@K+YOgCKqUV6@52|uesIHxlUJiX$qOT!j8Zu zk@HWkHI@rV)ZqSC5?|EwBnJo~d@UA-xFVytN1htH9g43#XE{2Z41n0awI zb>>sT1KZj<&WqBn3u1Cv$%l>vbT=rY`x7#UXzh!?1IbHT6e!t)R7q?${diG0qTmJ58=D*_wT5s<( z^ZR)}YF6pnR&F-}RDL%vhmOGEb;IG&(uE8|ez^X=T~)b8b3w~*AIR5pA}VL{KP$ZZ zBF)!(p*;`iGfLj~dY64U`O!Q-i*B>M5c2=Ds>E2;}qShAIFYgCkwL9v( zZ2fd!cK_X$?qqZQ^fBJU-d}&wK}q8FS!0$Vp0}4gwvkJh6r}q-!}pN}e_=to*xsvZ z>CX1U<%1J1(tf+xDwwo+?)yUbHif(VZo=SBcau95?)|dC;BG(E`A{C-o6`C3bn(Oy zg)&xR)Uy9~`WyEnDbpJ8i_CfafS@^*F z519l!4Ggev4=KpbuLpM_eNo&iJ$2H?aosLK8x>5g(+OIBO*$~Sw78O62pEM2b=ke}> z!h`%If>#ah@|j8m??vq@!goI?flw{FlhEiLYPDj-CFLq<*RwATg>3#t$m24?Mv-RW zMl!|DNrZI@r`Hlf3`L5=-W(^FNi}!vd zI`84_IY7G_BR-;}6u&6$e?Tc|sx1#&8|aU!%#*QLWe$5L*fPPui9|Tno%2m;9N6%5 zwDw}NAe)6qcTQZv=Zls&C=G)$S@ZKgxhYEzfskh0*=7s2Dx`c@fG?(dGxYK;L~llk z2pEl?mUQwdqZZSXlA(8${5KSLxk7*|zXJ_H8QN-iDHzGygW?xm=rQqb6veXv_vFlv zY+N$$rxA<Ix%NS^cCT$@OyDbE4>K04H!p2xAdW1(#i?{t!{EcG@91$r; zzO?3%X~esd6$LXU4a1Ypy!Dvcg z&Xj)2{rd6Wsy-q2G4tYb;LNAo&ok9O`aOYMp_v!gvt&Nyex9lR@zF#06_>;3D$TsO zoIUd?_tWKwxsREb)75Xj_7;;r+A~w+NI!i)jT67g$~zVTl8>GnIcro+|Eu|z>>f3~ z>yH(Wo;^K7(|_1=@@`AFlIM3S(R-9FydJV&8$O$Fckf4JVT`Crzr&-u5~ zUF)ZF{aR;8d80PN^-s-@YrPj+#?CSAZ}*>A`I89#N`*UrSNfE~eLi+>SGeFTGshfqy)y`Gfp^RpCyT+t%-1f9E!Z zJKgL>@T$#Y-#0ecczFJj!CgPL;bU5VfLlKY|Bzo+xZ^kK_!Y?K_nP$^g&O}~``_6o z$7*=UcL$c@t!Wzsrp|9}qu^BK-DHbK^<*hRZ()Pb!R8!OW6lIyMap(W6cJ+4sB9d< z2Odj|-vtL_;da3|x>1z`_W(<;jM@Q+NZ>V`{7)vNpiGfL`lIWEfAV1E21K{R!WBU& zR7kK2vs86S9^8><0*={@1>hsa;|2gNxit1oO=C~)Y_-y;hQ_Ut*@SUk9X50`;LG#z ziOi|Kl^A3aIeiHX$4tHzA4_r$E{C5=`VD!9o=O5n`IVQ|FTq4~fO6@2NaYX8*#;+x zG;SphZ!qm9vzzj)7C;B(fYXIUji#JPpr)rVjvWx|Q=Md@hs^vgg7%o4?=#sY_^6ta-@-? zbiobG!b4E%7&DwXSp^p8(14^kKKAPmRViarSx%N`?Sz}3o$9~LrN5$&?62ETztX{B zGGZzR$t5)!b~s1Z4=}lQ18Yi43cMGV(U0g1@m`qd_9MbbiGyPYcVNO}a<&Zv^u7CO z%v?Ccx!fiC$2(pBdq#}2*cAVs_}Jj{Rp2*@vkGL>Rcb%gd6n`N_uAi(Y(v2>Z#1Ew zpq+jQD(lfN8KpyEr1_Jp2qLjax%&~sLQ?6+iyKWWu$e=kLuv+%G1LSUPm57Aw8C|F z%DQ|_c}o&1thcVAHiXe=8HgpfHzg|)p{j;p8@PXfMO{lWb&aDKyzUmfWh1!;^)a?- z0~lH;7A)RORenQ_s!wc#HK^~FO;$%ea;7K=g9Ukv=|>TE_TV9C2bS|`BwFg0WC~SG z&B8e&g#)WoGn~F`6+$jUhq8cOSGG&-B54fvo+ToNB$f-PG#2L&4hng&s8EwA6`=OW z;6FY^I>k=jjh&H6ED$m*ofi>s9MlTsBBMR9B9jpYTor-le&<1z}6^DS`a#3H1ek>8ei1?0uqNzganistvXUaIHT zu_(vde^Wj-`rP;0{U4*Hi!&C*4=LICvh!+PU)`^sTKUOqHDCKR`i$!x`u;aspT`ez z`>AssKO{^QT#mG*%#q!cYAa0%0lzn5am`#@@8^p-iTp-pUtiFve&e0v_GUw@b>Ez-Y|Ikhk1DC zUn_ir*B|At82s&4|Jt|n`4g*uSOi$RDygIofat% z3d2638?>`QEPr|FNNXl4UB3-1+d!gqE-W4wZW`E)^2?=cXFB5%piQ5jUEC;#h&j3? zca|~)63i?wEMd5 zwA$t!9u0V7d8%2PIb1s!VK}|CG!N=vLz)%CSm&i!VHfv_A(RY6R0_m_Yrq)zxw>c! zB0SlDyi1C(X)A}q+%tY$ZifohVUiSG4x3&;UB-<uk%`eqvr?f5kA=Yoe=|-f;%$LkcK*w$Lo&!SZ@33j1A!VjmO{kQ_ z4uyt{%`VaVIxffwE1a-X#G+1*Ln>S_x;@KVhv1iGSCWllIa(4N4s2+JO@=YY` z{n>HdEZd}*f(Rv8uFubbZC$}Gp)oko>V0)?F*1j1j%jYnq^&)>EzfLPxN@pI0oi-t z7)?Fi)U;*qr$;x3BG>GFuRMWJI_WF0?>N{mH>MdZ0Y6*9^<%q)1r>$@aqFQYv?Y*6 zB^B$SqaaD5;zJNU=7OGCW+e9Aj0~-Da1rtIW|J*jfcM7bGBE+eOQOQ)0T8=PH|86N z&MMQNb3N?RI76*0&0yt*c`D-<&CfyO_kbNbn{v5%tTBR5p^uBY7=lBd|JLc^%crI& zJ)N2wZ?4Xu*Du1q>^Ba?h4^P+zRDl@41BY<(|-hhWk?atW51D0;pg}2zg0dW2RwzB zr#(dF0+pZS`HQOEI~Z2fsQAC!@Nd64k8kDo^gXfXu=-*+$A*8$f2#QFTl)VetQ{wR zmTzC0V*Ou5?YrB`y?XuZ=MQT4cTTs$_8V;+?0Kr?R15n5RLeQl^xw2`@Nsf~)c!s> zt^E6`mh0)m{hVn2e9h{0yNihk{`Us=a*CdgXAJ*|<@ff)@bmtDhV!fU@AB)u9lZ~0 z&%}K^zb5`UPhZY-UU_?cewCv66VI>XR=>{|pI;BR`CT#iW3AxF+xIOI{8tTr^@!`@ z*fGdCY04}|0~+_%7yv1-gt#X{W{cNFAc^s`E)i54XfYzYe!PqbbvO*vmuFhoIUygB zjhP(YY^?PA)I3*KbOoOyQW-LyXEW0RED@ott^m-O*n>|p7V2?t}*>M zu$rG6pE@R2X_*9AYLd;`Hl(y9$u|8Gk^_X>KIacH;=Jeh=AmOX4;%wx_je- zY?K?1Z4BwgFWpow^MY2Z28AVkj2(ugj!h*KKzju%vB9fPEpiEsxmCjI#}JB=KX6|Z zH=%0Ft3|y~ail^kyb1Dw_lPguoxs$E$ND^SA%Tk0a?PzA8|U!C7ZgiiKSrGxG7suZ zsMd${r3`UXpw%)_h(P%e4Fn--cP=Nd%DB`aXRM*JYB5E_VUj3>Gj6^=RO;E$It6o z+cnxe?LKGybjPin-p+iw!u>JgKR4L^=y+B3x4p;Cxc|`Rk|i`M066e!4sUa8A1J_>l2F-TuAE+U4t@XkDFd`L};s z@vmAt^QWBQr53H9|7!fD;~PpEGCrQ}MAVIl zCsx1Lcc#w`H?Kdh&a`~b@8_JJ^}CPP+U>e8`Z=d-a3B9ATX%lW=|u2}S89Gg=d>gE z3k~k)oN5HW!{CnR*?xAT@$>Re*!NBW+|&8f`zzibe#iPJK0mduA8lMK`$tPxx+R}( z)cIYC=C`+}=vn#DodW8f&}aLD`i#@}UX;fthM({EqVajBjZZ8e9(8<5qmED1;Bz%T zUX71W@}CBe&xsp!d`?FEf#*Np&!X}9&>4jjqA@ZKTotH{x>df)OW{kZHRnjRQyJ**VB3Zy&?4aT-U!gq(4Wk z-^Zspq&#o`u&1AI{d`v>U-9#;r}J}_(}!X86v6%cH*uQhKQH&&hx8oj@BZ9n-ydW8 z8~^T4$3Nz;?=`t#;tB29nO=YWM9EM2wUEApuY1g%#4zJv$?e+W9?OBDp{Ixe?f9!)I zLY$sJ(G3m50;~fevZSuz$RczKhvC8GV87Hf?X<~O<2KmGy2BC`d{fR&r!|ncqd>U} z09)^|d5GZ08Y`PNWeRLDJOccqKOu!0Q=;kuf8+ zNns%y&@7t&-?Q^^e156i*Yp3QI<9Lro@q}*F8j^Xy3nrc=odTG2UZBS{!}T;PIhaMe zvpv;*L6L(yVIIb$tTkd4*fsUIz+|;ipNEgVW(^T)vIf7n3`qBS$r$ZT7#ON0vA!5k z3F@8@*6-!@){^)_gm@1;p>BjFwXD&lY2GHVA~Y$`qBeqd@FA|yW{)UHoldJ z5KJD+_ge%$|! z{ez0ZZ~rU(-Z8kB|5>Zw*LP_tk6+31-)ZHy-=*-2Yy>)gcBlMWH2B1;^YGpm6#iOY zr*F)|6N5XSzqY7w$L}7)&+P+x5&Uk0`#Iob1pkb|e|VdYU*~YX{;t8_^(3`3IDUJ+ z{@&;Bl=iuOLFILMc*o$*zb0?a!>b0r&D;M5g?skH@$0-^Vu(*F zwxZ)9n|QL9B6*D+wzqU!FOKS9or{_h3Y}z~(>8W~?v}&#)myiT6=!p)Ifgd|UQra1 zBx>o>?D*7_3&EzQ5V!PM+qOO1C0Vm$OS7Az9Qjw|pIK_IA|D){FoG@O{o*bRzfnSB zQJeC4vTw{kkGs}d0G($+?6J4LAl(i>R1ikMYmVHYLDFna{f!nfiM!xJ0EW<0>Qm6m z!Z?{#Y%O7*xbd*aQM3Xv+YIy+eKsi~7T&JWtaZ9kPHx=2YmeQ@v9YF91di4qXly0B za?m-1MOZI9cL|M>LAqu0tO}fNqZ0>detO*;=*nFlYXI?t2{JASHJ2nhO&DB}=b!^| zJ&1XL7DKt(C2=61jg|mgYxtd7#MOF~*P>Z?n3%SG z?blWiY(u6prQ2`?KxckF>aF_0Bl9)f0PxO&g*)=zP+vWYeoXKG>s>X>8^nMD|8d(o zQ%4Y#_S9d7)};NiZQCk}zMj4UT8(8eFrc+AGTpO-7)mW$mJuJMAx<0vnsA1XYir_W zAkB&erO3NOu}}heBr78w>RcBJez4`X@pB~cg_C*p)?DHNFV6Q|`OIf*tzB`|mDBav zt#CIsaplC*w?3ox^s8p-&%E-gdhMz!pLzA%6<5Q^e)@<61byE}-t$YP@#RDCN&(O6 zrEziJ-Ykt{64uAJU$=Y9O6{P%9b7yz&I^aLTM(mhoNw^va;P*uySli%x}eXMmO^Z+ z$h}MfMt7LZV85F4E3C4C|LJkQG|n3ifGyE0Nol-(Xlky72{LtP7J2;Tk!U;gJ%e<2_DVEps^`!B5EtyJ1?9};;>|8u^{zdQv$viVmotO#hu@;_DH(*NT8 zR{``7_ujkY_1|$}MH1g(AF51%zX$1~;!TfAG-|@Grez^OxSQ`M>^X zP3ic1J^s7};GbpkfBlo1|LdRB{KxfCBL4j6_-m=95~cC%Q!nq(r#1hfPiw{v2Jrel zzqfzI@?U2K9{Y^uKlT~Tzjm1dnE&zk7w3N!zA+_nN%G*7qKI8h| z8|AP5$}ve;{gtcb`H=7WNkH@a_~~1zbOJvfiGQBz#3QuA6OVY7B#G1eyFWjHRFBH! zzsvI9HDdlRATQ^R*Wb1LUCTdV9qaSU>-BN`3*=@0dH%IWDgJAZQv5v~lE|Ou_b16i zHh*b@<}Yo~{D;^%nLp3x&u;*h&ENiI&ENiI&Hw8k%+H`CQx<>z9saQ_$G>Otf-ih& vC&8r+k8_B;mJ)r0|G$f0tUvzq{6;3RgQBeT{f?`8d z>@8wLMFk5YHY}iG!;THVyE~Kff4*Plod2HlWOkq2+_`h_o!L#Y*(AA-^5N?vA%8N?614Q|oY;tP zVhflJdD|1wl)RODNVm%PIn)U79%{o?M=<;HmZJE~KK(k{*Gdiae5FPK!^>O!v#QL# z;I=x`%3nvjN54*nUnj$_lec!*e|ak(A3Zi2lkxMD*#g+3_XTuAxiOFbucdWq5w^sK z(c7<5hA{iDQWpKw#v`{Wc`JY21b7|o=l`$pu;N7AA1N+E?7zH~=V3r(M5yDS0g++- zA|s*`68j}OIreiL)IV;1e+OpVw0&CF({~Ef6P<5tig{ia_GylOzVFc3V%Iab-Zk5W zE(yD_-nVpUj($5lSwkBDXhNgXm^Gnm+BhyHZvsoGMsd}Y z#Zb^jR2LS-l~Bn7>JO(`W~$4hOnGWlcb7EEMZn6YoLB(?e6cIfiw{Z{jJRSkpJMB? z9r($7vv?OVUptvYtyQ+>QhX*Q0x?TPAQYKqG*U5?zN?y;QdV^nLj=^c*I^NIsqIOmow8^oyU=N zSGGE6?JmfmxDGCS0gn<=;tWBv*iOphc{PK#e4go8vC9NX?Bl*n19e&Dq(Tgh*{e?0**60 z)6*&WZ3^FlVkwJZVS`>NwmFp|q$WbfAk36Cmrv^V4y~j)vUr=_@V&w|0 zbvfJ%Ebcm%B-!1LvK_~wCfPz6n(1*G>nWo&3&;#aSD(X5lR1mUlrxnc7Ys4%IIu4W>B@tT+DK99jWxOuRE>){jIFyj@Oi3s))L3VnkNto)VLH+UBKb7S*Dp{fd-2w zaA64?LUs45YlX7yD2@_K?B>Oz#AUiHo)U+>o?=@yQ(Q`go{LC~cmSDy5`W%{8qO7gLn2y7DkCHH_OmfX9_^ z)G3xe|3V}5&6cu-%I=v|xt)p)i&Mtpc(a(=cc#ZK=C}%_@W_=Z$sp4ds|z=rVkg5e zd8*Pdu?yworYF)7aWZ(65})EK!F*s*VgX0M^3cc>umv)x4T|FFk2TfeI;6w%Yz{A( zTg;}YG#+IkGSjAd_nJs4jrDpiRXxb(a=|bpnkAxG862L3OG)&sOmlZ=i#Y-bF^|pd7ePO735j?o#F@Jpv-dLLRkOg`270b)%Z0 z8=FmamuXNuI!#d85KB94Zz`?#EGksx=?X)>-H|j8GahwE)L7Ho)Phe*q&_MvmIcM8 zECd2KKD;J_>XOX1Q)W|QXRa3&Pw~Nqeu_9bCCA;`i(*&Xbz!lTSQLHSfzhp`HbXR& z^6EGoM5Jm+)yV4cfhQ|jClN-Q+6qgWfMTd=^2T~*Df5FT4A zRF#@2&F9+rYUwIV!^Pa>GIcW!r7y_j>p+RJSrp4bvYL|u1wrwl6xi^EaVt}CPN z@-rwGuMiJzikV9>tAJ8sQ#O!F4$qZhL&?Fs5ODK3l$%TpW4x=%hkpJP(N(PfFaii z7S~OcV+Q8fE|gm4j_Oiwp{}34^ zibq*fEJupP`^`<94G7K6CtAMA%vUU?^#8P^)j6MR+D?VkaRLYl7 z>tt!%VgcnviNkmlSIp8cZ_pi+3{|I<5<`jgd8XC^h?8=LCcjw>XO+@kW-cmR6^fD- zyG3YIa1>=#m+(@Yqv>;jYk=#3n}B)%Ew`b)184-?2Q&d503HFJ0GsQ|cut^jp_CV&Uf2IvCx z06hTu00RImJ)t$m+a|a*gVqvYjrVP!wFUG6^aBh4&|(kmV1OfF2w)gsB)}Qq3h)4U z0%-Aqb_~D=;0q7}XqgD@B)mNZT7SS)ydMZ{5Z(@kb_PHM2*KP;Xu|+=0CNHJ0MUT? zfEd66Ksj84vh_^REn~%3Q z|F7qZV7mmc15ggw4cG^$02}~R0S*I>0BAV|?Fqbn61Oye3bs$<{j<VEKGQbZo6%Ysr z27~~@0J8vd0P_IRfLK5rAOWx#undp{NCD7GXF4DQuo{pF$O5bdWCL;lxqyv;&48_d z0zeT!3MdAY07?PnfL(ySfC|8V04)cgJp?!kI0iTYI1Q)szHsB86 zE}#L>2)GY;1fb;!w9RjT8r< z0^kDF0P28l09v%6?GDfb7+{X(jbPgt& zzyUB2;0T~)D73=>qwu}}S~q|@zysh3pk)lSV*$Q^34lp}$$$XBRKPUAbifRNTtZ+w z6hOam4hKX4A^}l=`2bpCp-liR#QTe&U5dAtL7N0f2BZSg0IL9USp(Z^0oj<7K${C# z57>yg&CqTI6aWeVQa}ly46qYG%N}U=0`>taFn18z!+;}z6PP;*?PASpnVB=jrZR|`yTKK?|*~#2jCCjFM!nrat%-gbOmSvv;n$+?f^YN4}dK>$a<5CAPs&<+I*2aEuW1~>y;0qy_~fDZsZ zai)9$;{iedEt8=20|Wr31A+k|fSCYVX5n@Yv=M-LfGEIxzyd%VARdqaSO{1INCYea zECnnBEC(b3QUUNzpUMExvKrbofNa2eKptQtU^8GVpa?*V6xve24nR2oK476L00#k8 zfWrV~b}ik-MX+hbOWD+e_j7HWzZlHZ)$ej*qV42)%Z9W}ug&dSc*5lD+u^}+ z`+T0u&g|M-Ip1Pu%nY5*q-2et{q4>-DARpA^>Pa@H<_K>y<2J4>A@+6sXFHu?me3~ z@T2L)PQSGawdNKa39DV_+3#hf<9PMWdfQ(`_0Y}9&wu?QXR77fd7E!8PE$)1>YjX_ zyDaFoiE}bb#eYi$ruq4jl z<%TIocPuyPvokkCt;1)wbIplWJ-n4V>Ng)5T|QUUwPE<9-63u2YwvE2xg#9={7Fv@ zvAN0Kf^*4H>_q=FO%_pScMiOK^We-s3#vB{JP^|FZfI)M+7cV?vzZ!W%D#G!{CG!w zf@k+F>kagjKR-yHSMm1p&eqrEQv&xKv+3OwafENaWPSU*F+aL__7M+S+~;+dxyB3r zK27?$w=p_TFWV$yTNAZyhuwt44cc}2bnW>1=0 zX5w$CH@?5?x9psSy?G^5Jl=G;dko)Kf4Tpg9{MV2p96FvFIbDh{=9aaYV@i(&~x$2 zqbgfgE;herU820c_svqC z+wLl(+Occ3qyPlt6XxQlX-b$$3knT*|EFYa@YMD z9qRVrPuYy=XI8gfZ`ymcwr+5WM&EsZN6#ysT(sHcOvQxau}O2)qPC}O`+Ru$x&rrC zJp%QH%=TY+yPwge+?{ooRGMn<`5rjfR<*c(cT=CJpR1Jbt_l0NWlTbxf98iRdrpM; zFBq=l;8&Z|!*$$MjU!oFeWQbVd?+0?zIj7Mbjxj%>w9iJQ85XkD!Hj*c20Z9W~YPv z7DrR@LW|y7lJu(cZ@x^?nHDh8tut2L^62rJOXe9t-<_vD{2u>y_5JkM6Gx^V`PDb= ztkcNR%Q`#T?|b@|-RRYS*OHX?6&b1(Z}fb#lZIT&u?|VKw>xM`X^!-+|5;^Ia>cu^ zjxlH2!IJH+p-)bfrA{<_Jvc6KLzUXevbzVCB+cnF%4}ik;pBa( z;|^Xpl=f`OXV2%`Ts<$k>EAk{-{5(#*|WB{_Rc8lUp;Go+&K6;KzQ+<*PkPWn^*4R zjwv7I_aJgnzS@PvFKTPlroGYFsJk}Azi33ul*F;KkA5`HT;4ev$He?wBDb2 z_Oi<0W~;ZV>rUkqxdyz;uCfT4a`&UdfU2)6cCYM+&22D!xxBYic*&-3ZF};itv-$4 ze)+Ff&t0A9q@sR&+1o91L#x?=Gg@yo{j8Ju)L#7i_Q{{r+6=qZ4^K?(9#wFoZbZhM zhttEaep$Z#@Q4A^6MjW+>d)(S_Uo4Uuie+QpWmP*TIeErx`SIoW$A>SV`n@oDUUEZ zA3B=-B`m}0Zc)tRD(4%n7gsAw?j0I=>05f7z2kfFcmKC){NvKZA&uT+IajQU!X8fi zGN{lXy`eVx((R-AaiZbJ$#GY;$4(5_nWNq>v`sI}b;XyG zm2La8Hr<$Fbx$<-^{XGnb>92`tj;KNoc!vqr~Q?q)Yk`7zj-dxoH2jwpYnmH-Ur*) zE=ze4v`ZuV&y_W=BvWfSc57>NB%>DHu@6o&KlJs+rM%^R%2&R#lOD15EpPZRDs1+Y z5Z<>aQQz<0$67K*efCsUa{R_Etx3aMQzVA^cZ_!>j&Fi zzg1qe{btS5)|ePrxUBL*^>krdr^dAV%g66RU_Z3%yImNq?Kwv)D7=l%5=DwdC82?CtKB(gvlp>zoyL@&~t8 z-Fk6$Ww$lMUDV;TJ?WU?`<$hOA>FH&le*=oj%Y=}*qkZB0)*z-FJtXvGb9;-H~AD276F7x&-=a@U)n{)>qQ^`C0^?AMS6`cng*3SvKclGc! z$EbtTdaxsloYc4UF?g3|vRPy+{N>fV({Mmr>lznx4Rtk>fp2-W!wce<^tm3EFm~kp zVefmzCh7&(3S&NS;*%>nBQ;0&G7}WvZn#;Q<*RI}*L8@?-h-P{KMN}_oM^Aed-nFU z#b2kL?&fc7He5MwruS~lgH3{Q<$jh*>a8`IIXefKH;J|7Ce_(~xbydCf4|dh@3%cxtJ90IeW0^`YnR0yk(E`Kd%hX=a_^BB z7JJieE}Zt=FsfUowCfq+xza z?2G@Nu;pi~+&`BUeABU;y=tZDvMXD&{A)a>J$S99e5@^SeqEDa@t9wMuGb2m|MD-G zb+h?T&tSjK`PK(=a_y_5XPgk{^xJAtnXt-&@7g-_1SV?%-J;N^`>E44))_b$X5%y_T) zRoSZwX5{F{#xxj2{?tyvyUEpt&FWY zRN2vekF&keEc0}Z`R&U?cHOCZZ|I)+i*xb4L)1pMrrt-rH|s1uxb@Pn5lMTtoGsHb z436k~?Q!Suwcpu(%gXe9-zVONAkXgUX@Bt)-gBl9;9;5 zCu=$8H@oO{+&@$n@hvUV`<_MYx7nqB4qk(MXu96*^1-0@1;?(QHCh8}a!tY$U)sLe z)tBO*_*Q6c>VxwAwpzzle(SNYH>bDFJh$ww)6?tu z1B`u-$EEl8Pijw+?hWEq|Jf$%39J@W-|vVy-P|+@C+MiT6G0 z+{lu#2WQt$6j_qubT5by`IcJE{76Q43gIMzNtiH27m}neps;j^A+a z7X{|Lui5^)jzErDeT={NwtE(Cy?NoiQ0?eA*XCXAI=o7t}AtROmFz0eZXV0TG*Ul39tMQM;Yd8C9+=iUU4wv<{JOk zWlIi4483stYVP3Ft?L~{kzWIh3O_B;)R=qBU`3X<&59lYS|6%q*XrJ%XcFC-ydXwr z>%00j0WHms<9NadZL4Cd#9fmDqH_C&dOC4JqO3Y}?b?8@v5BTf}fj(+`WmfPWV zjuDwHL#CbgaQr#l^!yGt2M>1)>GFG%T~^&!>9uYbV-_CTA=rNY0jqiGH;2#%?`mEQ&IBo-Z$*h?}>#w;9KT7sbA|FyHw{HY`<@_wbvt;pTD0Ro0fZE zq1ySRsIGaFTb6mWzFD4pee%twsY8;sKdx%_-LX`bv?EXSaDGQ6+h&6E@kpa{ZqG{{ zbeby;?X{@5E&JuqY0duO9;TncIi(+#;Bd}nXpuqC@kv=L)Cxx({dwo-=cQ_wUoLBn z)_J&e!tlsG{f_q>k;Ycvb70`ez6;%#HTyq~@>i8)zv&yC^EJL?MtId(N%j59?Ex-r z6TBuE*Ejnx+jQoC-@4C9U&GS<^qHxd{%5Tw->Teqv0il8 zDEp(<-sbJA1n*)66=^fiYLyb)$i-(UG9m}dWYXO zI)0&d`99pV=fH^S{QG;A${rfKJ^%K$$K{e!f!~xzUL55y>WT58?5=&U z{ryyO;BVKigPISo`Wq8q?O4}blXC9#bW^9*UlsSZoCYS^$eVjjW zDLZ7k$IQ{|CTyrVsaDk*$9~a!`&ivi?j}_?Ll5K?jlX_3-Pqr^Ou#TH>Xr9(DrJjrZ!$#E1f01*o@8G;6eBITTH@WXIuuUI5l{bgw zXMDUp`ukNAU570p>GuK;aQqC@S9c#KJM(If=k9X#3a8l*E0+D$@R_YSew&kd{|?`e z6$7SLoS8b?EL$K|ds5nwSr@*%&~)2}!O0fgl5$_#M-RL>_lHBuc+PE&fhm@pw9nmV zP*va0?tix_^TC7r)ip-vHXKK|-~;0Hp{f&D#Mzcuo5O>=&fY&n zc5=aDj!AT;=gBgk11A$tZ(s6QGu-jk{&8_<9?uQP*|v~VId{ zri|SKSI4T}UYZ#CB9Nn%GB(rc+lceIuYT{ht>0H%`Y@}4_ikTlAMulyhTXGwRW(K* zZECo=wJAL0&r$cfx?XIpNd^-Rz6jiZup_W&`&HT5Pdd>W6MGh4(^*?Ov23VIZIwkz z%Ed*y{XKfxFaEBh`Z+&uNYUo$8HF`gN3Z=zntWo(#}6BqjO9KK9QL8;=ljvMeU`2M z6&3M0yJ(EvuV`pH&nUA7Tpk=MOxY17D%>@iRr7{jX;bpWKK_If+u4x+0yd^&%(kt1bo^auNN~N_~ntd7v3#4($#F7a^cCF)dn{|c-z6F2li$b%S`U2Y3|XTe0R;$JTu$o?m5cmN?o7! zxA-dxTRBNrd*`F=^E{1~z8*TyYtY=KL3_4TOM>SmZCTc|UuW9Mp@uf63O;9#t9_9A zmLJgn9o5Ji?_}S)qE|r6jhwUMQKCG}ziK~DwQrwiS-0zghr~}}#hS9JR=T&SdvfcL z`tu+1-K%x8Lt<4{o^lvy;xfr6`{TuqU;amzR?cp)aF5+_T3`EKP`{hp9kGo=>n@dt zd%q6*QQ>TEn_?o_z1aH6nx^ENOaAz+?bCBj_fr$qHb%*OG6rZBt?@m+seQ$|*_}x* znkL44=h@iHUg-!nee%%S(=9t?=5I$Ay{PK-#hg|h%O%h9SbHzc5(&FmSn6jD`Y^h7 zu;*UQBmGXjZ;0eOrK{=(9W7n!tx`6{qoJJd_RX^Ir;U4lnthM?`L1TVQKQqY7~kV- zKWcgnxo>VgcCUAbvj30c9#is+Tw=7Zt~fvI+V5Zf>blR03ZCC-DTtUo=~2}Z-7M%tUZZL*tF z+M_t+>xW^H3%7YbcI^1MxnWJtsYOTT9Pgnsc*ZNU4@vsFj8lKKsDySMIIhKLnwSmqEY% zXAg`%wNbstf`+&IPs~XltCu0Vl=Eu;uN<2=y$M&l{1~z1dVz3Szc0_OWvfnZ60ClF zvbAhuZRVizeV@!!_Xg?N^sFCv^;FSO{n{^j%~7#BDmPXdf7G;T>i48+^b<{4>bRWG z-wUPl{to6RF7U9wXcQ|cNa(E8A9PPpZXcUGb!0_Jt1AEY;>RVQ2X2X(<@MR~qHY1z zrNJb~?_;IyWo}teVp?Qgc-%DJ{kr#aR_^Da zq4o_LpQC$9^4QA!Su?+8qz(F>UNy#OaQ9t&w}p31XZqEB9^Kndv%EvU@Yj{K-Zp`M zn-871q8=9LGJV6lzJ4p7#3#CFR(Q{vpD?IX`ZCzh^kKtne#-`PN;Xfq`KTKuI{j^s^o}ND{zc*g@o#gaN?@o>Ga)1578QKv(`}ZV16SrU4 zt`)U(Pc79a>-67!&(n?HKGgkW+*Y)vGpb|nwuKj4vh8-P$>}|RfS|UYjx^-zyr;8| zUfC`>5m(|fH%NON@1geVA-g`+OdnJ&>gTCs=h%_9bK}UneLpX%+To*n@yze-UDP*) zd0QJv8pn)pQB_X+yu`*YsB6WVDOux{_22c~-BtZpe#Ysq>61qPEWNiPWpelaF}ySV zFKOuv@VS2HfX<^h(~be})?d$^somCj%e*M<$dtUMV|n7ueZGYM{99${8Pt8INWAFd zEX{A>HWwG&czVKV;llo_zo(A8vez=}d8uy83eU=0c8lt@9c8z|;@zKp-8kAMDK8||LM^ZKbFp3(JXcl}a(dpp%S#&!T?!q=Z|^$FHcY)NHSe-cd}=E zV#OV^*LhpNzKI+%sLeAhddq{#`pj?l@2h!>)Q2A_6sQl|)OF<7b3=Oho;$Tdb?WuU zFH^Ei7E5+(uBrBT0^2bL8RqL!-uTvER;^|Kt=;+@d@T|ACYgVU<5l(k98{L%WueURPyG@`4=;@0S`wYrn?W{y*Fw0G}&Wt&^Wr|z*epZ&8WIl(r+(s6jqVvlj+ zqQJsjj_Q1&w%Pjwo1Wgd{7bU`>G=(Ic^n6=WhTp-Gy9D@cW773t<=vgaYZA`W3^U& z%$;=h=<{9v+m#yxo}AB<*Te&-dwszCyGP6Y{hqPo^*Vo^_Z$4O+&}41jo!I9-kddu z)XF~zV!fl9%DLH#q7pmqPFW1E3FK<-ShC%qFjHJhWoiza^eeSj)}yQS^VOFg7;7A; zsej{7@bV9Tw*RQG-LJdftNS)t=5Ir(|EYUVoqFUroZ=hkG$e5+K97CI9u4e(4b_)R(VeR!F==$1%9;s`hI{XvfmF&oRzbW&q$%1qCnoDE1_Frx?GW6q?$gc4=Bwmg7TbL(k&$>Ke#h{sE@5Y}DG7d|% z9e45D1<8(AalDtMvlIOKTY5Q0U4C?QWcpbrcwIzi;`4yYZ?Qj8;|y#EPUBv?ILfGi zv%Kd!$9)6OjDP=NM%gRZ6{$%ZKU`n3T5@%$!Md+8yCpLdJCYA9jAn0KQt*7z(YZ5) zb;ZiRS7+W`ySn4vilbwXhNO@7>UQLV!Muo^&C2gP9;^{Q*>lIwJRw5Jbq-Y)Z~er~jQ(wV929F{Md zG;w?UWmosRZzmt#^Vg!g@3Z(k6&({HTSFdT&<^ zS=_%%qwxy&G=GBLx zAI|JkOMIr;Pv!IIb&;RWEZBN<{)87V1xu`y1res3r5*;}AOE&=7oAbLEA?LGEOyeE zWg6#u_+aLzUgnk)T-WO#?;Gzu>Q-LJ@8k`(F8hzPUmo`TTvc0dR`{bUy057WZGTNw zCG-5bQzLe^xgDRgHTnWLL&~R>5P?2!M>MY^3a`%tQx6j6EdEbufTDD{5RE;I#%aLjLmk>+Q0sW@i(=}nl4d?w_1iH#e6}j;K4u*u2E3H zABXQS74gGV74xBR{hcEHZ(SAhYH*3YB7ORMTSffuZi;#Onpj2pPK0rVn<>`60@pb! zvNK*oF|Q6kYEYzq6=JD~SB2|C6!G-;$BOv=gz-8O_@3}{3PpD4@2?f{euO;UT&!51 zzAjmjol_Bt`CRzLmm>XeLSAMQ{CNRChErrGwwGeQl#nkG7*S+rDWTtm1Ut70`Y#E5 zIib$i6Xrz&VZ4X>DE9v~Tu-8CT=4;l`GbV|u_E~6PM81#w3*~udK|CPY^Fi~u0D71pCGWJ68$yf00mc0>ZpIM(Fn`p=fFuBdn`;2j^NgTB zoRF_UgnkbZ;>IHA4=212x<`oH%~6WuKbjE#Q-pQZfiREy5d6#~*wH5VIg(H(3kmjj z64pr%LcZwV%P6YDY(gBi5$cD&o?4L|cY;2Yi9-Fygm~5w-aj5A#KE1gK2In3xt>s; z!wLT1AjIblA-{eEeJ#TLRVC!nj^L*qVZ2)j>)T*Lzjq0BQbm}Le+cV;+E~T;rGGo6 zs7_uI@{&l1XB1(b$t1*w{{5Sxes>V;JR#I)UJu1~tO@-dBlOE7)NMP#&T>NiEFi28 z8wq*;L>Sj{feG%8hrH5{Y{F;b&HTMF=4$*B#g_GuwK!>=T;O?D?+|@66(Q{P!FbrbzmNWpF^m_ zG(z0Q5#qCwpdUq8H|`ShHI!g~1|bggZ}t_%vj?GmUJ&AToZ$a&LVh<9#^s%=*dHB& z{Srd_6A0riCLHgs1u5?LBOwm-eKi!t?Iod3B!qQ9oTJ#zV}k#BguGi2#xSDzB}FB9r^D#1<%VVyim7*`G9* znu}sPLkV@VmXP03ggDT@S5@R^GNB$;6Y|oNP|sHh{az#3pFz+cJVvpfhJ^8Q3HJ2~ zgnYFV?8E7d!hX*Y&iBFz z^}o$hv7J!DyjV)`pT5tXqBy{wQTM+7MDJUz_A46Dw))MMDpTNH*#Ah-g z4(|y0{YmgsjbMK*AwH#qdAFTlM?}z1Ak@h(!unHB@P8XY|2{!KnNYW12z~|;){T3F ze5DfnaUj&;0DHytGo4`PEFsSO3Hs3lem$X1bO`YoPl$s#A&+t8{BGGp`Sqn-k(qpa|rQ#MaUO@zZpgGsUpA*~f?z+a1SS{2PJ)2!tfHz z&nZOul12}Pm)ke!i+KLbNeu7KJi`6&95CPAm0=2CKGQPRAMuqEM;$qIT-mP`GNkxL9XA=0P)RqKtSa2nY|VDEBS)rkc`Yw>%nb0 zzs)LB7{(X#!feFbeL?YoX~;<5o>>1J;^}*w(y|W1rA2k4n)l6O_ThA$kycZr-|h+* zOoE(b9-$rth!>1Ran{HD5paO^N9Ky^WDJhmXfVt0`%s+a_wZ#KV}3Cd637Xxe_|@) zn{}r#Jfw*chfu^z4@1B~Q15WB#SFx^n;N%>4hZ#C90f&!-Xg;^6BW*Fvk!x1knME%P1+XvjE^<%D&VKl3;{^0J2 zuN#Q?3hZYngo~aR5??efF4kWq#{H_IdPtY&B@Xd+z9`Occ^eX4xW_fre|vMeoMGC- z*#F9IXr$}$vzuqr{pwS76-Zy+?{z3M+JA{7TE~>}z>1QPzVykz`n!b4|2m6*{l5w0 zrN`Ai`CtAp6e`WvP5+m7HAMZ&0@1oB!+!eoN4z-ElVKb&-zZ;a?xFfwg5&d9565R6 zBpSpV>wAtyd|fY?_#m(>FcLQh@iBOPTaNihu%6TLX~yxC$EP_4>GRxCeV&%vfrXuk zTQ#Z&`8~})!tz4%cEu1Vki}SkE?yt_yO95o4n`8akiJ+0O{V781+GX%uvM3{p<`vcBJ$da3Jz~hzmy`zS17WVYUkMH1#|I@uF?0-aaZLehBtQ zvgY6Uz78LE+A~pJf^poQ;dQcdTnJ;J4w<3m1S0!_EEMNGn12f|XW}pfW!4_^+3<3D z{TD4BK&7i+KJDG~c&j zewz{ErP-(+1ejlg?NhT*eWKY7_hp3oq3cj~`QJL64`olU5AoN_7z^?^7(pKBI1BFh zG5lO?|I$jtH%~!+cE@}WjF;9I;p6xa%wP1uesZTVjQlum5|8aSx-dK}%Z#+Z23IRM2?K2Nu;L;8Ft=Kk`#xSHx(_{j@Vi`aF$U3?GN>tc91;e#(xZ@uH~0JxymIz8&WaRW;my71xR2 z9jX)h-n+B}g94MU>Y2suK}80?=ZjC8QGz3 z|66YppgXz_dBgvWCpQ||5iEm(0io|_&xjr3CAlch^7{OY^Io^ljZq85>K~!-m^v^1 zcitIb`!VWho-V-pg^(sX4wWvbqDJ97ezrlp^bG_G1dR^v{kjm@7jG|PczM3M;d*oG zhvFu$lT~6IFbo8wig|?l*y^D3pPE`^AJbG7q?;L6;J^L)tVDKV zI-!t22H+Qbl%H=5L;Nz#55vdnN_-qgvkC6~8iwpNbKDutQ#cNx^ARubLHu^ie}ZX3 z$1UaqiVu`GBgx<=&9~R0ajn4mKYAgasz7%BV!m_}8drfO%9lL9j|Sm5-~G3Kf(?XN>|DT}cZ3^P0EpUPa z63S*8N*0ND(JGWFC_hG0EKq#-3EP-`KBB35s4F@SHTZm39?vT>?BRG+x z$0gc_?1OuZT-}U#K`zR#CLY%qd&D=FBYh}WM*4u;v>j?58khXI;0tQBKjm#Z7(IDB zBVb<8`jw%R7~T%a>LBjYDEi_xEe>tqN%?oijz{Cb7$ z?814h)JFN@VZO*0+2J2Sd2z)BVGnN5_U#rRI~`0f@BqgPW}WF-#xU~rO#}xTX1se* z-bGmdd2hs1M^GH-&vR)>48r}+M!fugmAKQfegTTZE~HM4#_O}zR#d$c^--72$%v==bE|@>;fc)VZ{=5EH&qa3H5282>$93q1k9WM4sFDw0 zJLyoaO#Jb@aKrqGaK!W0qH)RJKi$# z*nV^$#7m7({OSKcp~Xpr`2eK9k742d;1P)D??V2BV%`Va=ldZ2A(;Pz>p?OZtph09 zaPM(A?l9+3@lY5bE3keGo~L&B{8_&Kd*l2{x}nI(>qG|IlgG(I+3cPI?O<3sCYP?p!=2D!v;trj@v^R z7tJ^0&p)Az88O7iQ=T2lODg6!n<9M?&ZC@P9EEtQ295U}&f{U6cj-D5X92b|#2)$Y z^dJAH!pmuYcsEcz*J3{tpj>HQcyT6U!4li~k%IWjLR7c%wt5lty2BED`68gF0B z%W%JZ_%laZlrZmOhV*$ksM1zrz6Iw?u-b)TDllIMg-82iHv#!G7yA?43-OZLsf^|? z%-@8u}5_^4C~M9iFi>0@>8B)PlyAZmv#=yi@g4Otws7& z6RPJ>Y=8Gw#0%DC;UQW=Md(tas2uCeZ3z}ys{(emxn)>tHk;yBM>hc+jAk)*^k@XOa|6}GJ8b84D&mE~$WQwE4_YeLVEdoYx-l8ilxqTt zgDyU=lgDA{Y@|=oC%PaHuzoqNPpS&#SAJgY0&!sGSNXs5%i0Oqsq_;u7Jl-Pp@1LohGV>^75ubw!d z2MiEjxfSW7sKWnz;QDW#i|SCmE^WefWf$s(`os3KU|C@5L=&wi-7wF>eoD1azl$+{ zyC3d19<86nc)U`a7im6<1MD&~CKl<(j6mxEloKPX1|wdE^JRv4J?NLt%d7va^WSjY zN}Nz;lX1V(Cn7r%A>!rl?{0)6zC9N4^nYX0atidBy#L33HMTDug!Jj}(P;_A<88<5 zsv55Um#`qvaT8rb`cX)o@`ZHJJcZ|PSIn!z#HZ^=_UqqzF2s44TA=w0yNr0oAUl=g zQ2h+Y{>X+Rp3g%0(!~0UvJfxB-+y(-{HTR!ywd-S_aelf_J^|hw@yyuc`clR{GqQq zr{x@8$6^+s@h(6#6)3`X+{ze6UT;cZnvR3)=)ZM-atPw<)}#3d<-thMGQ^8rkbQX` zC-M>B{2TG||03;#f}!nK20*|;9GFL_f4Torvh2 zW8RdH#})o>d|Ywe3jD`0nkrboKdv{SbQZ&ysYpV$lWfn)saF>(X@X=j1#kHG6d_By0r*#Q$7M1H)OkKjS-B)eZSKUse`KKL&q~ET3O@0uj%j=))MW$Ll}|)R#6e0wv@>vJRg=cSrhl_Gl~!WAJMc78;|NL{6FVi z!=X^={EEJpGJ5jk$n+RwKV}@ND+lIT`0p-!9F+MZ|Hoqc9gr8gZn^)dTcc6PPCGsy ztHE}LKsxArRpR$wP_B%O1%GJ1?l_v)i?IF0#)y}kf`NdraNdKU4(a#%()o)R9+rJZ z&f)X?I&b9XYs}9wLUt%?6t`B)i^t%8??3=SqHw=`yP|Qm|7YE>UV-#Qczs4y2mfCP z>7)H`{)F;=5!-)`<4}jsKl@^SkQnKUOOT(iyfE@}B;tjYsII1A{+2W1WiDt&)BiP2 z%awK5&T9{5-`kLBsF$#?(EbQC0vO^LqA4Hje@rOyT>iaMcQ}8h>!JA@szZ4_*!Utl zcCE<1Dem{?OvLkiP`*_0#8?ION!tha9<)V2l z_a^}IMUPkT6vb^Yw&NR#_1n;KO@Lo;ijR0%PgLiS4o0l7|Ls%$J?}~mM*7kWL3Le=70!Agb7Y-ZI3CwxjqT#C%FN;$=cKFXmzXI}{jgN3?Jp!*s=b z?@e^R;Ch2dv~I}1r+AW&@+kXR#AwRn!@}#HU_FW(gprX^uuI$Lm(61K<)7yp!9qmy z?f5(yJqy>};PJMPM1IQGEBgO#wZTHnduL=AKU!rVJJcX#VG-!jG94CVy53?$|IU}_ zA-Lc9?u_07<`Mow6!Jpr%Opr&UZ24MG_Ox3{%76(1#Zy(+ey*7ghmbjy$t0+^D%1> zQ;h9r>t7W zEhl7$XNcHD$L(nEywV{V}NwVYw$yJ$G!q3sCpb!+f)Mx?OZ(R@r-IM9PwGmr59q4@Yx zw++o}cQ$(BbOO?s`k^|J+kb}FH!2e4wnNl#LMt{J^}mR9*B6m zVMsq8^YKY^9d@Hc(<6{&%pb|X`b*Gx2pTo~Zz>=2V^I8OV}G({Azpl7BEuZU<4T4F zijG4w{=7ZR61~6$@ zUxy-d&jcCj6M%S01d4Mpwm%G}4`Uy%hxV8c!sC+R_d8t7pM!bL9B1+8oN~S{3j4Ec z0;8#h^$$ZHY5M|vUEfJu(8l_-9eqlK&xhr9);VGOp9&ZY^7zEhM|MQ`x?K5je7sVlcF@B#YKc4DH5YNNkC-Sj<*EGbp zKS0M{luh_=bP?kDIWW;c=>PMjr5`xP__-be4zdU5>nC1kDw9xNUNO(YacU6K7g!?y z*JFO=9K=^XM0K(Y^W{)rbY8^%Xk7AmR^z&=+=S|<1J}>~d}OB?e-01j%E+XCnBRle z0r~f>l7YxRFZ5sgi}1Q3!SAymjEwY#6J}IbZp=OoKgEYY(R?$0zt#=wyW#lQjYs2} zi}@)-kiK*fs%Lp#eq>UByi$(oHxiaz?>X7NT+Zbkl5Dw5tC>xq@AA{l} z|2@b)ygpP;pTy{+(ZPRn!wDX(FVjXDsX^u`eJBjZ{$kWGeg7a@R$%?g`)K_^*{7)R z2&CU^4~0Psu9N31+*+CJ3@g$?pk6Y-~EI5Zz)j^e-WrPeaY#Ric^1BB!~Tes(fTa^e7I4buTdyI&vE>tFqupy z$uA{*3A?NYw92MLQNfkCfcmN!72ICbD2nzpZ~mG_)Ys$o1>ht`Ht(n+~0&hj^PZR(0R5% ze_}g>V?FrScIPwv$X!PKnSaxsH;KdM{a zF8Fx|o1AAyt%I02uI5Z>}5`W?!9zwW<{@UdS|4ljw%KG=!VIfedm#+Jm-L%+sn+wqP5 zzV>$FSI?(?{z&vslYEL-QEtKhcaXhJK0y5UYutO@K|0Ch^v55I&N1S%CC7*Xck}Cr zLx~^V#rRMbop&hCPb$8>F8milT>1j>uNHjXyGf@y%YeYwN#caV($rBzu zv&bRG3%-N+ocasp^S*8PLGEPHzn*d6Q^M~7!^VI0AAJr9=XIaexIJ3$P^wY1@KoYY z>p6@4BRi&F zR6J=B{!@zo#ShR<3WA>k28^Gv*^GEM3I2^y!lQ41Ag&uk{{wRgpXgfX@SXf8`VSWi ze=X&+nc#ogPw;EW|2=|l=q7xuh>7E(HgV4DEYW|Rdf8hFxHrgo1?@BJkN@U6;0a!J;avJjFeDpy;sVOEN;1*&n7+YheoH&~h~&8~*1O3}2pXu4OpM!<} zyM0AR&k4c|{5n_l+su=k*Li~9GeZ2t->CPWZO0Ej)lYbv>K~BxEAwvSXOHN_pMS{z z*051qo9MiQbi%p5OA%&mUP1|2J-gjfyKkg!(={*s^ah)#xz9{>t9?$symo5C`$kM%y zTbxTe3k3fT{`7gB2?SjHG>Q(DA0;{&uRf=7*CXzlFC^b+cl_|9PxesMbFc5v2b)2y zMt?@;IATG1dsKWRk>@&L?@q3z{WBLdNGWsn#Kace4*J;ay zuYP98ryV_nSM_|5+&#JjZsmS4=V20%9BzmC8U3~r^%&}+_e)>V{nQsfjiO_!#E-PE zhp_C|JjLg+M`0Ma=FRe7(O2I}``@~$AN7U(NoVR21SnkL9OkwVqs#Le%AcR&d41TC z*~84A8tvhSrx1U9G5xwl@;_7jPai_NdfZ2eqE(7xEwi|;3~^)b3XQuS4B#qCK5xjL z6L->n9u)oM@~^S^l+2OBKkQo4DPBp=cNBb%;>Nhn#T_etwhH`Mz`?bv@V|Q`=_Iyg zJiJSObdTay;uDl}QT%)p25)j3Uq$?5Mdz|!!h0?z{)NJSsZaPvQa;CvpB|(Mi&rl; z)v^DWC;SDBkoRxN8-9HP;jMZ<0Hbjfec^uE+w_Btc0TKN;#aj_0Q2+fCB?n!9i(uY z_+JD&GQCf1IbWFkb^q?9)ACEo?O*cKEw3XyIgfgIT6f(sSL13wbQ{6{SMaIlsjqM@ zZZ-mo$zgHRdh;vt$4Jjb9ws_pmz>*9q&(^M=xZM=em+Y+@3G0?S|&Sh`w=DZYl5RU zf<5azHp&3M{sXa?ey4Az9`}P>?D{ZG z|0olGs-5*ou!n;%al>!hx)FcY9KvVzZG_)<0O|BRNI3^O|52UXqW#|xKNo_&$!#V_ zd4{<0)5A$Wxp^b~+l!(vy~Aw$diG|)weOGRpAo^FeF@|o}Adi;8E1GS z&!?t-FZetdnA>yHzU0q$6`fZ(?&-pR3})kU(>e%Z^y_YzpTT?DfPm{0{uB9H<0jsl zambGa|3{nXJVJgxCHRZ(FW66Cz1AUr6nux1iQjq)?dM~VyIsAP5I%Dd<3QMdpNsTi z{1iV%`U;=XcP}73`DfNwQhRiGp#N*?J)B#6ebD5*M>N(Hm#!bC{3k!L!TAV&y-fa< zY}$YMAI0H`{mEyjA4;c-jve^H73dtCCcOGT_cy@*PjS1g0td(Sd;f{`OYmz;thi*nKdc$3!^Bu`qb~1D> z;S&pqf6L}%X!iA@qdpbFi(hLYb{lu*K63J;=xizbsjj8okCMV>?J0bn`wjg3Tl1Rw zF6p$3{(Okh=qH=rN0G$5Ebh(BYxJWDxU*6nCNpB4Y# zzMS~QJqced{?{X|8=Yz^2Euii=p6SR!e{b~OGgX7`X<5?zo%YK5S_b)-}b|^9CL~A z_f$R8W(_D@A<^2e$3GmanDJ1;L2KbKLSn{VzPM`xc(`1mu-gUe(m z8<4haUTxpxynZb?T!w{`!6y!7zIam(S=xi}b4Y zkez7T0N1*Hmf&wWmiTQ?GA^AW{yztSn128MH~QDs!mngC?$=?!xF!UDRq(MpIj;*O z|HQSVlRUanp7%k0#{bxn)X2X?XXq-!hj;4z5+4x!mJn}OP(C4E{R0Wk=(MW89p-h} z@uI(|(s>vC9{b_#omPT_9Cr@lmauGF{_-IV9#X&W3f#KR*rujHp0 z2VN1K%fXn@PiVhsZ^0)nCcG_AIcz6Be{&q+kc zu~oDyN-v7OFMTCmpuQ@S=kM+%{Q8`HWe z_{G)2Z+&^8W8NsgzDa&j{VpYQrRY>oApPR?%#W)C-*6t`t$NM{fBN;oLkVwb((lcx z+b34ju7dsitV;Z7h2_MtG-g?1ryOZ#?ztbMRD)>W!PrO0NbV#7bA4U9$ z*_`i;_&hdEc`hgwBn z?+;lk_%o|%S3Muv;E-U4+rrGut|nS3|EDzHi}Hj|A455RNObmwxC}qibK-jne&LNq zALqcE`q&p-MEo(G2Mcoe%^Kpj7RljdqVsu|C-}LPa@bYyFTIO&dcH{bko5lN0_Rm+ z*yt}WBCnYrP2NLznD2ESH=xWl9QQq<|Kdrc-+B|{!z+SskGN{{ZP9*ou=Cg6NBUC> z8pr+gK7>b)G|Kr1%h@4=rafj(t*eqDzV2(sZu!lJ%maKIFB+|I2ZNw;fIT_|vZ}#A5vS97A~MgH zP0!h_eY^PlHT``j$>(3KgpWPVI^mO&=ey*mNu66B7X7QhfX#Pi**OlG7XQBj+Xf$N zdVcdoga(68lxaWo`Y3v<<`qq*oDOFlMcas<>X$jMnXNeRF`@3#`z^tqUmvKDenQU) z9xwQ;!wHW%&vM9LG_MO`&nD-wog3x6I}G0VOq>D3#x=)(V*f??qWUh%=eL6Y=^)X+ zhkDsb@P`wG_b7heCHVB+HZIO>UXUYX3;w$C6yi^wLi@RVOTr(8{~A9%dN0Q^>FZ#K z%lSXHk^gPi6My`+`A%RK$wcQvaW4OpnE~ORer+jxo_LD$3iSz|r$OBl9| zTRn;NLx28{2vZI}422M`r06_xG~tofv-|m{ICr5qRz06|UK4!(cH&Q7MfqQ$`QEk* z;l(M!!#>MD43(QDLKh_`nu{!i(Bp@+*pKk;tj zPp0p8`ZAN~b);{Xe;4Cnu>ai^|EqegA**@qGerFA%bYL5sbAkiqA@ztdhgBYg1>R6 z@b$h&+|COG4Zo*py)X}P)$;z3@_yj+VdPWS%dH$Y*wyQ>LzmAFKIn7@MZP3`wS0Jq zLrxa_oy$ol((`C-g8wZ+_|!|ZpGnF8z8eTnq$q)J2>%kvr|n|KfiSOYMQ8F}`tSGN z${QBKzl{G0y+8JEqVqjCvcbo1WxW^poO2-It$MFTu=DQ$!RFh#q0t_8hT@D)tNM*6 zi2gkp!e^9^juQN)eF;xWKF86!M;3=_e1;(`e16P|2e>VGFfoH>;6u^qAwFB3ibhwNnL1#(gn{FAp5zp8zTuL}NM_@nV3ttb8$ zMSsg%D4*Xn$>*?3h~M&?E~l`$@DEx{_>}q{KNtLGHxk~ebGf4$_jRbr#vR*|{D=O) z>@x|U(DTtjU(+x@$5$Vo(ukrzK!67C*@hDPndt9>JZ1Ww5&tMB{OUZH_^rljJegg*fLG5nr64OfL*@qwe3jxIGzn}CU7ycjLPWY7GQyt`U>|unr zT!x9`dRcO~TmCgZx6!|@lD$PYQ7``y{VOV@lQ@%d`+?@Q|KWrebzUg=*XJNE<8x|+ zkqYkV*Xu`6zf=F>xLXVUB=9X>O*O?^+emeL_6b;x7K_IFr3R-?+N^- z@b~X0yyw&OyYL>Kmt;THy9vKUbUNly&J+K~eBB~C%V7pSU-i3WKG9Y3qv9Oe1Jvi& zj|HDp9~j}quk)@Zo#_3%L#A&AR|V<_&n)B@;S4Fd23#D-deonlI_%ouvuYZc?{bA=muIm2@!S6;uF!;oSq`yFNI9B>i zYW;GQ@E3}HLg%%@zR!ZUkxsFf`dTkJ9I18s%wwd#o#OU}3p8$;aR%wYuTQ9sZBZZZ zTY~Qp;?KLN-~Ghr6Y`^;AE1E270&;6hI##`&*886&nVgwYO?u8>&|q@0iv_z)r8M{ zo&1D+vGXj0qn>Zt_rL9C;!l6LabENH5xkFlens^6lbu)fJkfyoncGABs`{A+3I0|n z&f--|(|+!&yAyxxFGJ&-wmS^KB^-p7;zS)kC7c)B6aY z(7B-9g#W-HqVo#nfH30M&*l-{rv1Jz2!3Cl@al7nw;=1+yz>a3`61_fui*a{yiMmD zw-)^E`)k}DY9!#Fjlg2_N_;Wnm{$q^f{>3sLA~%(yiY>*&^n*?aJBI7fngh+$=%6k z=r5J#5}wpPh{8tn)spzpdne{dK2Pi__-`nmqh@h{JCJuwFY69(jJF>{8Q|kSihzTQ z(J6}FK)mw4-|$+8|G|Go(U~wOpYNQMLw>ArUt3Rj_20b?|C{iquOU2XFYLnAB7Rz6 zenw|Z>(<%AA6-LuTN?rquF&t@MSM=^`!bFfey{v`Y=GkiI`>{mI*A1R^k>`fhL`2P z$(B_P=n|a?$#YEKx3#U{FKFDh-KqB>`Q6Z|q+iszf&t0l?F$L-QD5Z=(b>l13Hqpc z%5#6=+iN*ZFXNxx;F!T*o`a%y0;KvD@-H&c>-Q1A=NAt*;9m&$F*?)lY4p1uBo5cF z-Uqdn2wi?P;faT6|91)gS=f)!naDKS$qLzRb&B}GkFMC?@b`%3HpPMd1nEzUeuw7! zDh6`;Z)v1|xAa(4U*fak=O=J9Yks`l_C~z%dUM{$F5VHtzKEl>Y<5-)A1-Ek7kc*9!kx7?R;9&moe<1NE&SrcF^ZMOkgimkJal^TqeKfDB2RLr%18;Vt z$$55EZ5eRtRgLk?J)|?K`DO**LUOBq5{`*0fBfNEtes>bVQCfc5s(#Vcf4|cK*;-ulX=)BpdeH1+B2RCM%l3wnSey5twr%j5_$vbKPCyUN$ zn6K%*=eG#dxPsmdsRXkR<MRi~pcO3dR zzf1n7U6}mU1A}ya4xpUFbCgdaFBp7Uef4v7R}ul-;K|FFXZIBU_XmD-zKhiGev5mE zKUoGrTt60__ej5y_GR87_){6ipD4A)A=6U8UVWrfoKL?9ecA_=rxIT$KhKDt55AZ9 zZHpj4Twy(OIo!wRm81RaEkD{tc3ahRG!TnlvyKz~Bh<^cwk7;Ip5JzxXWU)hWV1)9W9s zr(V6^A;C|7dI9mLzE8b8B>Wd8|F$0bOIWwsw!ZNn={=|tbM$+N-Rh8JQyub+cN4#= zeXADH|M9ho8_#ZN;Ad;arLm^>S|2Ss(|Ug748&`@eu;qT{EX34?v#GFy@~La*;&Vf zn*4hGX7Qu%9e`T>+Wki1>%C_%GrwLEoryowFT%R77lC4@XuD|ewRU0h*8>o^@iV3O ztNc=*p8gKPr+-U6L*BVPL3q_(Sc)s0%Y7Dgn$ekli1H78)Kj5ugSXBn{;9M4wy2|5 z_|rBfA1_gFTIWU zN%c8Lg@2gFZM&9y9wzu1NF2uhWYhadkDEhy@#D1Hlegdvo1I8_o6f^9YDG~V3s0ky z)brz)iGHi=1@*vX^BvME_%(YHKk-q@^CeCAWbxCY_mOrA|31|}lZP<=gucNmJJZga z-@Cg9;2KJIAG~xC;nNp!re6{MkAnTr zV|++3%td>_EY0tFn*8p|s_VwIe&1De<|3XOpX2IthPd=HCDp{Ny_F8P<<4CkUU`d&52~ zJN%5`J?f7IdG0+({F$F-oIj~CdPH$%O!XwA2kPIzXVdq@tpGur*OZ=T+1IH>(eDl= ze7x!VI!`SVUi^EXV}4cmzc`2RG1Xn~68vM=5S~avDaD_PV8u&MRZh0$b6zushOw-`4?}xx~1%FIIASUPWKFWdA@E+8+8UE~O{NlBa zAK-5uO#B(0hxyg!{&931=(xW>zQF;3etv}bE%rbqt|>Xdx8WwfpEU~;#P!g{{wo@Q z*%&_)=Vu*IB{=$;^gH!8=H>4T{yfMU{-nMy@)P3cqw<%D&vZEE9fIF1I&D{+^50VHg|W}juRkpO_sic~ z^`1S1Wxsa1n)IhW%lLMc;>li$!!w^-?085|e(ie;@u&Yd-~S#G{y}4eCl4o`lHjGI z2%jm^J|+I>C`{AzSUjka|NE<=-*j&0yKrQ~Z`;2S|BST3_lU-uzTYhgHeA1Y?=-a& zMTduYsPF$ej?;?v_IL&R%w{+*!9NXw8=dI__4s$ecRP>p);CDGP4gX=oTv1C0hbH^ z#JkD=^b?JC`*Dq%kY9kTU&ZT4f4sm5_7TA!&l8^1_ZRHDIX}n*{f;bhz(eBaGho~J zZ@q*3kE+1>r{pks6!pTN=zYX{N^@?SJe`1JLRZ#POl@0!c`w#;qR`{GN*kKUtlsQB4smEfPJoROaV zN?`h~mwznvzYh?6i`xk=o}YBcmb>wTEd~j1`5O73CHybu2%q^f6pagM#jj%#xQzbT z#~Am*x_igH39o8>8u&anLHKlMqaB`KCA_sK<#caUUcP>J!YA}zxS+3nmQg;{T_1G( zU=PRKN&KXq-w$>E$yomypRK2}a_g5~?hNw(Kk~o1#+|!f$MLCbKIj9C!d*1c<}?If3M*GM1HYxTXyVl z`fn4wI*0JYr)dv=72LM-41e-NosPe^;PyC-!J|RK!#SeUz=pxcC+Ux0+TL%AUV4Y% zdf&oM1V@vyx2odU;e!8VPs(9h=L&)xKHoz+W3wSxTs!*DD0(``^HEud`21hVr)3Mq zjU|%XHmgZzM$elp+KhyX?-6~y-}O$>|H3td_h^6lK*3Kwo$%s=lz+Fz-5h>ldYt^& z2FDEiZ=EK7%L7mZu7f3?9Um0^HKY^zy^r5O`1Jc0JN~ZzGm566CX@5n{j~FNZtBs) zY}`Gfwx+y4_h8~D{=|6uN%489)OdU1&f2iF0BIIL1%Q zm&i}x^Tmq^pSXv1a=hex(sknhX~IK4`8fnqqcg33)RgA?pw@kp`hHb}N55JX$Hp(| z@xQ~q)xpYZ*SNA4AMScIm--W;Xy9rM;oqzcL z9KxsG3WLNo+kfK662jYdB0nMTJa+}*lV4?AJx=&ffsX01wMmZ=%*O00(b{NN%l9RG zT<`G<_O>hJ>~^>X3=CI*Cl2Ab6Mf7Sdr2=}JVpHLeZLT|Upp(#x5?;S=h^hdSyy$l1mn(|h)qWuoZe4E1td zlU}}DA%0PLuG+B3=(zuJ-4+)lJE3-RQ4qBGg_Jnz31Z)fy;*$txez_p|k4WI3h zHrd;rh-1d*^iz*Gd~4xf*%d{tkY{xt7+Br)D$LLLY0>waqb&664#>gaQ%&*hM~6y2 zS2oIL*CWJ_`baY8s89A^yq5MnBl@R+j?3Z2g$_AM@Z4R5x9PpdfzII&qv5woK4BKg zD~11+`A%VX$)S4@;S=*4^*(wU;ZxsY{7GosSML%0PAc$4(Ro_qPBeWF)C|OK{ER(H z{T?iQYs(vaT5*qD;oOGoVOsC=-$D4>A5Hv;YlunjMqe3h8=Wcj0XPcYYu8SARHZ!U zZ_Wuku%7UqruX(7xEuA=Vhmd$2eH7_bKSTN<|3248_{;(4IGs25 z@n6x0;ILL7CYt(?ACUb-CC)3c8S(c}-5zx@zi+Vx;b&=HRlP47>A~n_Acr1s0#?M?g+=kwV(L8 z0sd?FRlSEC>htSqsKel6Rnos+ay}n!W$>aIDy~oX&nVja4$+aFJgIRzW&bS~^*ZL& z!aq6W9qmU4`?1%58U5+A7CUCJ&(s*^%Y4DA4guWamRI@>VCm@93dQu%IPi@{36Y(?Qz1xyl$6#qE6cLv*Kr$yKP)N zXV(-zpWKV|XV!E$Cc>RxJ^N~0y_b7`!GEXtGp;^%u;+V&e44&*t5fu=`d*vAiOvmL zZzj(rpHB)tXD!E_R$iDb_^UUFpZCsp$hhob_6dZKjnXpDmfme!#N?Tfes>X_$Kc-v zkM5yVZsdjdLHGC;ZJ>qcKBz>{{qE<7M&y7PWXS>mH2Hx13_F%#m{Jl z@ZxNF`}pM-laJBz-zWTKxZUVfwGTK?@b3f7;FI@|!k;9cD?>e? z^VKiT;tfAMg!nUhf9dZ8fBjs-qi<6VAufG=fbfYb!BuJ4z@aDFX= z7>%DEo!80=zWbGo1CKP-d%brPKVdIw!xijj<=Y6K+@2KPDLN0on|w|dAt+p7Ui&C+ z^yqnwU~ktPNII>XlmAbM|CdXmGu>#3eUN$sQ(egM;IG(SPE57Qmj(w?*eG zI7$@VxKeapfr4;_csK|-xO~oqgX6;Oe%Wy&gHL`q<9~l!@M{H6yg&)OTl}AWx#;VA z7!MZyUjzTjN5Kx~?5=TVFL2BQh5xm=gwNc~d94@x7e`P&(;sP+&k;Z~J`+cPFe#hN{?u{AKV9%6jwAoACvR{_822#6nc~Ax5U%PL{wq3vNcM1NBmS+Bv-w5! zP09h`*RNM(=dDMd>3@fOR6*J``9wD|Zntbh{Bg;xsP}|$6ukFhE5pZmwtokUCH@(Q zkxq44+5tarA^Z=rs|m@!m*8lf^59g7@>#h#KX`P1(izu#T<2)M?HJDZEItDP;)448 zx&Z;-`5&j9eD5uUZ+9u>5ak=~VGHQdqPRf$z*42%i`}$Ki|;QS_N2`AIy}DF0u=@QnVX{2J=^Yf*yu z)pHvC?sddH!=E}e>3Av0?fcT>_&-TM=<)3*i++XjtO);wHH0VheO_zizxUir`1tFb z?+aun`UuR-zb3Wr+d=TJ;6{@}&*QZ7VbPxfdj@Z7df(c82MYc_%u^4G&b~(zK6TZ6hlD=i zFBE4cPRTm_HsQZ{A@LK>Q=X3t{)+eG+d3t#yT>h|lO!)6bAM89l0Z+6U{#GldoU~d%u7epud59YxS3VyBlnb!FzN;`_W zSCdY%>HE}<8zFr9{*+S)`$~)M5`3C^d|31Sq2yd_dSBViZzq0H{(hMFS$;e1eEgwC zzuWIU#Gko|dVf~<+iKk%y#j;B_5U{K2L;8?mJ^AOKmEG-8q%2@J>UO682Q7l4M;cc z*PToK?-iT*uc#LScevj7b^a{E-%#9W*?|&+`}?){GU88s3I>2HtQS76dareo@;OEF z`Rm@qPrQT#jVtK4dmqBvz5~W^?Vx#Gupi+)$1HL^GQ2GQld`wuxy+jrN_d|Zo#MAi|6jtt1k*SA6MC=g1G0ywtKw7dG5({*z2Yvy z+g2=b$c_R3D#~H{_XyOuf*dYZ{+*cD>F_7~XB6#x0O_>uly%4|!S_MfbbH&9_}7Zh ztB_|6Uc7+((;6YatqhLGoBq@;3jForb;O@Ooq1$HbbjzQ!pF3)x2x`&JW}|2j}5&h ziarlEY~1K(j{9%nAEkNCe29MZEy16V9Zss>0yX(%uM0Lht=~by#dWCvjG}X;$F|c* zAK}Zda+UHdzS+2*dJ<)c^CQ1LS@>C?8N5g58Lk(+L-DXj@58}N{2D>rHoF~HfA2)W ze|0?JWBXB$!TzsVNBT3$k8etzTPjbr^q%b$82!+H10CZhsrUcP68$S+CkCI;_mt&D z=e<`8elzv{b>W`?#(ci&Kkq5{DT*hFras|AqLb9~=0^zs?^)7m-4Xx5RrQ~!^KU1- zP2blO;9K57c#F;n2RU!QhVZeajKe<>|DU{+@E$!^e$4(HV4FVC(Q{h~jl0)1geP>a z@;!o|pgN>_Iqe~wZHalmdTE*AW&>Zml}M^u}g{cU(z$ zRqvBg)Qtw=fQH}p-W87cE22jyNuE8w>~hFA1m6vcHvHt)lxK+B4_`+3n0+w;uF!YA zFvOX2XeYscFI1h-qCS$SMfb|CT0hTi8mYN^St6l>yH@+ zPL{r|fa6=<8P|JRk#79j31T<;i8DCgEoKq^`b~zvNAyh7`sfN6hT%`?y)IXa&MwL$ ztxfO2ICm}mYjSmCoSZY4bb9o>gNBW&iW_4ivXn_{67} z@Alc8@Fgf148PcPuK0oq;n9;E_cHNwG6IF+_gqgoBsK0z*OFhw zHQ#GaC!MJelFk)^Patp^{eIegQ;w(lrN-)3Yl~zSE$j+ zuB&6y@2GJ(oT}u8vwcp&7>oMLqxlS|{TEuRv!j^fP_~lA6o*sALb)b^)w!XeCT77) zjenCsF`LQt=Q2^zM0)(OF}kyb3Fp%_5)P}em(FCe#Y!|(&SqERP8&YVBi0J2g0te< zQm&FUoZLV<(;$n1Iv)B*^2T3(ZYaBHU8L8={J9DnL~oMFa6B-Y&t@vlQUgw3wvx^a zI=oUEbs+~T>Q9a7{Z)`6pp!W=EAm)E_fiOplZ)`v!8f4Nl0W?H}6B!{q_D zIQwnDVy@4Ox^Kwrc^>9HFkHx|%9V7fl1fE=L*>z7{Dht6@e4*!C>i=lCFeIB9rYJV ztBaM<$S~|TKFqEwrYlD7=;)lKOHvC<*=$E4Ux7_8Ex=YB*qyC(=KB^DGL_L{c0o2X zv^bqN`u<_35jZPbDx1|B31BZymj}DkLzVD%w{iGi@2_M_u$<0(C07|urc32)se`I9 zYKyX!`6K=P8VrAR(BnD^LnFiaWh2AA`iM++^rb85Zs-%-)N_eXor(YUdHpQ9^8E$p z9HVvRiz5{m$hvqoo$Km3UXksu9|-q!(@(N}?Fbzven@l#4--l_t1!U@;L`u@G$nNd zEk6)G?;OewL;Uqb!TqxIaJF1bXEu^QKEpUexpJjhGx%ghwlY%6FY8`e$`#@FVTe`v z)%n8Od}lsW=)=fOLoLYmr$>gG8R!^Hm*9`&z3C2UEj?UQ;Kq~L1Z%F2|2iwTgF3}S zXbTIaEMm-pl?%c&0{^wY`~E9I2m>~}3E9?6YDq4iZ8WHJhKDx6d9qZ(Uk;8-=+=x36E&^a7BKb%uy97oVIA}B~b2sEz z8_-DwEX>Q(Uo(d_CCwkLWV`Zx*>x7YE@9xx<@<+_I-uW3|Lj6?pNEK;^$()7MXO`x zMVV3tKLzb56h{MofZ2WVZ6YF)5XOR>t2$j8jV{6HA?S%-BZBVoL4;uZ;kIF8`uHfF zDU_q(LSKJ0gxM6M!O>!&67>TT4HX8CZnLz3_zg2N#PY=@d{{C>gpRzS%=3TYCs3ji zB8*edka{^YnC(jqWGks+DOW&79ZgwvQbs&L4#^Cb3N~2(&`5bOT05K_&I}i$fnm$n zsZ!LR88kLhc5lAYpUMobwmS!`(uuO`tkS@rR;nQR4)>NSg|(SzAe}=dDlzM<&6M*Q z7cV$SSCARNN^z~-U(9(K1(oFTtJ9Wuank^pD)QF83{X*xRU!~UF$6X&T^)aHYF^Y2 zZ_5K_<$)8l$qWyti}*X0>R(re^`tBK1G$vc0Yw(8_!Kfj1-L-21f}ONnZii1jDLc` ze5H^!K2YF*LCoHeK!2cQd?6u23Se#o1x&VB7#d1>f*wZk(O&?A{go_gr$DI)iIhzu zWoJ>+_tYE3T7fsFhdrfp0F*H(jVc_}m`J50!XW%o*5;bBWS?1Wz*K)aH>8Qetjb8) z(eP^H97wMHOmQSV1T96m{!||6Bj;{Y%C5yf3=i@^ftT(rz_iL0B!WpyhBk;gxOdbfWVUYwgqP9%MnUw!d%C~h>}J#_y%yO1539() zBNzqGM#Ag?1s8&5*$o)-8p(rFhAzWJ0m$VH$J~1$JB(7ygkxq7zc#w*zCO4fv;fiD zM=ppgO4T)ym&b6xN(ui(8VaM9hE1m?cq{`@WkB^vq!X%a-f|FpRQnoD5hIzS1xs4-W^?Q&AMub^cGQckml!}-F zlwpJWa2A{pGgGNG<$T@DAX8c$?g}!srB!hN0pFHDh)upO?C&#mo63Oc@sECB_nG&O zSbgn7b5g~uRml*Jg@BR;*D!0FN#zot;-euCf$ml#$RBGBJH&#F7oqu~)KEH)hz4u$ z0ANW1@-Sny&}srK7fmCSZkn+(m8wzpWk9Oe)~beWs^TE{BleOqVz&w1iCgH(=Q8eX zGJG2*TUtZEv+!d^mBSJPHsg8+E9s$h36?R6*yaXO8p;jlEW8hol9*JtjmUFgPb=`p8klAHWVQl$u*mPx0e;HUqpieUgC8vR~X$H{m z5x_hl?abIz3J6=Hia^RyCP`yeEC-YKnL+@}KyK5)mMqbgVdJ)6|1+dn!x%R zPHjy1Ecz`4#bMS=-RLRPV%e1n`cCkSk&07ndy|L1C2wGO5i0yxS}W zVfd^O@Zq|Cn1)d+gAH0_1sNShgxjSnB}}Y_0GANLP>o+0n1yhQ#qN?=idia(V=$z( zrgx;@IAN-=Pmn4Aw}@k=WueX(4F-zg>w*H}aZNPEQlV0i*(;zRj+$aIzDGL9`iDm>ehF#zeDYVyXfmh(=5!{#A{Qg zYe0Y&mp$@Y{tM+q-lI62z6E|Z#H zDy+`tlaOSmPY{Gs?PW*6Kf4#VACo#Go5`eCr>y&7YlmEV$XY`}#L^X%mZpnEEF6J4 z3jHKU7os4kXz=#FHR*gN+jq7#z)C<~g_w!L$(Okt)!HGQJ}Y!*pq*5EU*GcHi>!YI zb`~POU@nN33%G=@yR&Qv-PRF6%hGx^ODvW;bLn#55IUR}r}B7lJEmR$f9+-aW&gM5 z`rF9`LZv%Oc*IOY?7lkZv>UT-^iNQTOzD$*o=rO00c4n>~txQ_2f`4!}%C&WoZ<1U5G|)hqv5}F@#n~ zcd0pXUuq%N5p`5M*aXBd?N$zBq3k+Nj<%NuQfH;PMkNEW00YXVwX`CeE<4l9yDedx z&MO5-Vx-p^me9q5k>Mhwn925{pvUCet$s9pCP$@FV7V@6nzryQ$EM*Nl~UcgVf1zU z4^uwKm@PxTu~CRSEU3+rTv=`f;?8iB$V9kv{!n^#c3!I2f0a|Hc98?YgDAix^e^C= zPnk7!!PdIjy-JR*7|FwBV7k_}U6Wm&&&FJ&RxRu5SiYdsL_x=`(OsA>S6u0JW34PK zu}GbNKMX?4GGNXX)N2Ay<;tE^Kmu(aWEU)?J&r(wUHJ@}e~!BpB^C9$D4P#- zjW;u6YxtRwYMhmb@o3z7CIppb*|jb-G}Y<#c1t&UERb!9djZK&qq=eU!mV|To9k85 zy%^Lmq1b%3l*<@SO+>K{y)S|AgJo#eSTH*6w(P-e?JLn9SR1A(vGA9pWilhF1==b> zL_Pp}6q2@kU2u$l zjj_g92pTujv6;lZNsp;!x_yBr<|tQp_Rs=AW6Gxi&vwV@_7!zELiI`;7nPq`w!5a` zxv67jX6jviXXh$|!SO>Zw_C-r>CMGhQ=ZLp5E%igK`hKz)2VI-UFD?pSnM+cD>^O6 z_KplJ^<^cv!z#vz1bam3IEX|CugG3Jl0`^M*IRpfGfygl`^31 z*e@4B|HJ80YDu~`JG3HOw5(&2U)~)i>GHtz-BR$W1w`v6W>&8pLFh3)3{;b(LF!_a z`xBZ>fFcsEur2_oEyq%`rpER%6IGu=32?2On6bP#fOSm`vm0R^z3#kKeX<`2Bk0;d zmbh^POxP+@?slcH-2>QCv_J=;T@RuZ!OB8y$i|3F0zOP^ZAd5W-5p(Bpw$suRfhtM zXJN#I9Kwu=5wk@#kt-k(SgXq{#ES}!oYs3W}%RV zn{8*sT+y7!?p&UxmEGoUVg;F0tBi2c` zvB;oRC$)Q72qxiI^MHXVf>Q+93~CuGTS45?n-zGTZiAo|oo!1h-&e~35}4U0Ly8GW zNfAL8y&X`5g?i?(#^!Pab?jtYy&NQOvTD!g)sZ*8!SN;8Jiu{CZ>To9V1Tj3!R&{+ z%Ax8q{w=(8T6tht9#t1)hZt22;(^8(w#dtpko!N`z7=OD(S{6yp!GpQOW;-7ufhE( z+IH9s!E`YcQX3k{HG8DbSh^TS{~(4ts>>OKr1B2ybj9{{_8`kEQ(b$hls0vEyM*zQ zRd=WD)z|W9%1JE5TE`r}&b&>vg-k8-NQo=3HIIA=yIO4mS>bEBT0H`M6C);$N@M`u zvv6c+NVS`+cSY9LVrZq*rj}x8#l&;NtmjHmdQog zA3hJdRnB6eA>r|l*pfiB-jXmm*T4DYaxb7lyyz;Qlk4*uB0s|50JAQyg{OxY4+%hg z$x&4C`Nai95c4*xoK?gyzMzaIC-~U%nOA-xrJ15(jp;sff)4ZlhA9MIXe$i(;Mm31 zja7!Wp8%3W^}{ss^%7&jZaS8-nsDsJ2@jsLW+D=3*F2D9RZano0?xwi}q!mlO)CM~W-q zmu{K#^me2^<8K+#zG5OI&UkHb{4-y$fNvFzH%sDmYMoqEB9*NE!xV!ejX*8X3aPv{ zT@1^Ml%*5jsCQ}Amh#k@Eq}e|=348@FG(YtV?L=sBiN?F1`r*4(HULcxT;t%nqPvg z2Vb3ty+F#5J}0zeGm{fI|p^bRbvdl0CP)A6JgXKSug`vk&c zuO#FhhzhxP6$AXTLf-8K)TOj;wEW!3>b$?6WoMf-EQ(oixzhCo5|)tR^{6)1*i3ND z%JL8XsT{*!jE&0*^UYB4p}AkjVAlWLSO}eiRvxBpOHywv#lFoRTT^H@ukKnNLQBw} zucMhRQH&w!o6q=zB@*>;3r3s2otr4s5fM z&gBb(D2zc>DrOh%>F3%$t;J)Y2Qj}BJ0x{~ng?00s=kJ4D5UCe=a1xuaHa+5Fa|8g zeGKeO0!4zb!rj=U#nV_EtJke^7%eYM77LWvbwW4HKlhabrfmhihZl;;z$=}M6yj!! zh@v?$ZWvKtjoXBS)5gpAKJ2#Cm8R5(%g!7a{_LG+nRh!oe>xBaUMqdRqzh3JESkBX zgJfg+c{vZZUP^^_jMrQUEW^f_DGS=MeFA1=sttsKUeE~ZgN<6y0=`FE@66l0J+COv z%YTgp3KjQZ!^{3g*t98jq>E*1Rx2PlsS);e*t7?EHtc*40C&VZKynl&fMNY^L634V z!J2#9VD7)jis-Ic3nyPFrLld0+dQ~&?Nq0K^Ih}L*n2EAgl2JL46IevVdiLTQN}(a zo2kjx7HGyvV7?RGsrGU%o%f!l?>f|`Mk8<1w^3T_yF5n6^<^52SJ2jRsl`iIA?jn; z{sOG6ve>;v^%XjeH9kyAU?D3_2KLAS((wu4N_K{DZ1LIrJoJ{hAZGYBdBLlf71;E{ zpY@A+_fo*DS-C8m?JL8ALVp$QQ#*j>3-FCBt*gAs%2zMPFoLPi;yHP;s!wZZvs=a- zdJF#aT1a+f@}S!X8Pq8Qolg`Vu`Si+yDE?T%oUe_Hg>#pp{v`t)@fgd0n+F+EMOmB zZsEsUaNfuMjMJBAiQM$b>!R_VuXl>J%PHuuv86mB<^?*4^k zW&I8dMiJ>1Sfu1CzLJb#{D^^YNp?+R8s_0PTVK$*nX=4sD6(1?C72IYpugg(HTE3T z%=NAh=kk^@4oiAPu?bNFq{OWcmt^w;mBGb1ue@q)rp9D|IiHlQVBk3R*#s1}zetFT!cyJ=T>WeMx!nu|04bm4eP zslru$UC%l1TL83259+>k=rPl~r2Hg_WtyL3!ju$^aibNN?A~bwU@4%ID#Uw^=;UG} z@sfBAAl-Qf+x(Iu1kHwu!;RhNiv4Zdy)=XjP8WCq9y^~~jUPs?xjsaeO%GcR;4;)h z1w;``D)vo=3Y;;uz=xe0G@z`v=i$faJy?( zKTd~=i&jV2(jP=EVbiBWNki+m@-Ks9W$;_uEi%5jBOQA_K(T1;-jq$=78X!Ju$Q_v zNAvz%O)9v}WQPA6HgrP-(S~a%Ua$+SK2+G2QmdlAVN)0Q!;+@5&`!c`lwy?ZSai@^ zjjWg+YacsXQCwou}PTQuy-g*bK$ zJzEaYZn77Wh^isAVJnv#P;wwxo!t=#p#W3{XUKpsJ?;bvAS*Azo@;F}uryu4Q6D$+ zK!Xw6oWYu(Anqp>@UR4S9zlqf7>#NGXRE`x>Q~JFYHs4xyx?C^!`@OV$G>wMIjDp98|p_9B5X}%h;uO z#sg1<_)5-2;Zko91mnnx?3#MphFiomeZnpDK zUW&4|xnBjPSuf7SiADxGFjmP~it(cqbz9BGD-G6$v5Irlc4uM>3|dGn?6X}6xTdTR z*mZ5m9FBhDHqS)GQFNrRUNI5ZHf+mqOJFpeZNQSrJ&5yn3xinPGh!P7z&q3J7A0{8 z-ewi5NZE*DZO*GgYjWVpA>Ts-s;L!AtHMYrldY>~n+xRfkMe) zEeSQZ;~r>TdTHGB1j~UD2!z4}O#F7`k$y_Kb#aJ^AB+pVI6HOW93bq{7Lc`_8rVI0tS&ovzMr-t(rEz*SXx6MZ z8&-puYW;$u*Plh!f`a+V8{s;s6sK1+$=dwT!A|4IMkWhq^wl7%G#XzlZ?2*2uE4vQ zD4eEFSH9z|JO#x1eCdec&Un$y8p(Ty<&_0Hgku8)kLo}d(F?H9pmN00wXY6`{>2KGwU*rpqTu{S4iqx(FvKmO^l z8jpm+_d{rpSx&X17n1Ko5M(E&z6XH4uRw^sH5(~|bDM4#8+mr)#ue@i6SC61u8CpQ zJfu^fsE|N(Dz!G?VEVYDy^QsB6X3O_LhOpBPAe8H6~^TsjNb#XeTds+C=Gfx19FY> zL#r21hBqhUqT5LviW|y~q#Z6ZrowSAgy#+&_o@lk>`C@)L%PqHV(bq$MWyl78TNpz zMH!H^Q*2_ovABbh>_*Cgr=pGpzORnbYvl$&uwo{RB0|veRtiyvxs)l)h&sfK1d83VJ(+Gja&*PWvLA%rl9z-0)#{BKWLSSBu_gd_36}DH zf9Scz()0tqFbFM~FboC_hYdkDZb*QK`bK>SMP>@k$I#;n&fUq{jMx`P>j7-Z()^ck zO+N5JLp6gV(-u!*O=qQjf6i-}+N_#VGB~z#^5C#Oik=AkdXBlbrB^?=NVyI-A$OJI zV|<|U|I=czFs3#O5bO3-#c*t3=49}Tigqm<7f!*w>$?`+gXp_@?Qfe=TrKiwzR3vy z5KOViVS!mo4GliD7QQbZ(t@DGGhtypU}k6}xf!pfVjMbcRvq#3CpHte53ZBKf~po7 zf;-1mW}M2y7FWSU5ufP}&ezM4n_?B*A5f)Fh>@;)&L0c7!qbGso%=1#i4MtVd03qmB3dRSdPVv$7E_- zYc<)`nheOGwKFi5Nv+!O3Bk?nxKG#eIAVtgywM3QupcDY0TKf^Iv+L$Lws1)>Cl(LZ!Gh8N(AH;nJw>OhF-HvY`8d}U>=CI}MeJ3*s9Vs2vn9NMjPn&Mt2|SYrCf8VJ zgwU~QsL;zgkO5oOj%Pq*dn*v@iZY!9kRbH90Z^1?K%#&{wn{KzdE$#c-(fXsvI6eA zfOU(dao5XNgqoB3dT|g1uIm|7Sz5^BsY`VKu_Ew}v0EYh-Ja*BZDJ%7+{$!sFh8V6 zJPPZn*Gq?2{9g^<)sshh_xQ&8!-|W{) zwBC?BrC@HFu08ATIU`KBy!GmHQ%52|aiu?V$e>*35f(9pccySeZ#82PDB3VmfLG0SQTn^)+)$Y|G9Wbr1KiNdA5DsRVhRP)fD z>dwK18p}~F>Y>}DASbVbrSWka6Q+Gu6JuZ*{r~!zNu0h$h%KABtikM{MGNv~oZV>4 zyOh{4#1uulsX~uqv~0&@ZTYEgDTP>6tG&XijAq?fyI7QKJn0aR3Y)Yf}ISWs9+%ob9BexW9D?5JYkfg+ptU8WGRp{)||F+0~;_Y@Pz3S6m&FQ zm#9a%O$#)Brr1=gbDY5RJ8G+P5N9m+SuvFJz=Ac9AnrOJv~owA$}%6d?`zpe`#)Ca z_?Ct{gJ*beJf4m7f+NL+b&Zpa8r>{N=38eFj}{Cz9y*8%AyXd8ck9`}xV)*1vDm=l_mD+>Z;-yHWy1ihr@}|z+^uU8Zd!iD!N@e}y^We^K_6`5 zi67T&2y1S3?6$fFd%gM1my5(Ex^cG&O5&sR7F2EhO=AROp5N_>1w>&#Rfh+DFz2wD zj&Utoa7(}j4~O)EynNH>=;Pyn6yR|@VgX?f@A@tr2nHAQQd?ecMFeJSn&-jn+$DaV zE=(TJl#kSfc-COvZU1l2?WY>IZLKb`ij^`o|K^ZQWvy*3+L&HQ@nPX#O8 zw_`GRcyqY7&z}fo2a8*Dcv(o(L2Kc&r?*jS(F*!u*Nm60cp{PcA`z57Mfx@$Hw<|#I=FxdqJ*@(>k8JW8#R%*zmx^bS4RK zYt@-0RBrAV`^nK^@4D12S;E~kAXA$Q%~u`qv;2G+f`SW9`g)BRm)RSc7M;kBPP!)g zM_kf)2psPnQVAGhZnv6)kei>w_x#(PUK5fpq~uTMAX0Vl9Gb5R7)5Mp*c?Fotb<82 z-X2Pwl`ZvR<1e<<`o>EwKhCP<+_A{iY_VV)nen0Y4Z+T!A z8VHhIk;@EP>5e^Q6RkD7O)FkfdgnJ5r0&4ItZtQY;+8!u)ME6R=p3uN8OAWjrv|Oa zR1WuFmh|Z_<_ooD4JHIkGbJ#C4CaBq&Q!a~c%~0e_}e=*fmmCh8o|7tP4yChiP>ku zP=cq3kFl95LTA0j>{jIuNr4&`ExstKh{8d2qG@RGT+A741z>rf)o~ibG$a<7EB=ua}+TnJ7KZh_>P|p8de- zFyFfh3rR?|?nEa@GRJEtO?}^PTU}xS4_>@F^?Yl?LzjRxG!C^5y4pL&6f_Q8+3Rc& zGsC71EU)1(9hh6#?ML=O)wPA(k{Pkm6$vJt@uz$7k?jBnmz2f3$Jsm4yldwBF}6%r z%fBI58aLpgW+Q5v)X5@L3pTkGe)1gu^72T%VjYpS&zUmAdnKgTjZ-GFAYUQkk_AJZ z_NF)!TS${Go-nOY0msh3P=g9+Z4PI_yl8|ax}Dl%33%cgyf~O=V?2I91hpq3{eTnc zgKwBSch8-Fr;{%E^CjW1xQSG!!`z0==d1?XWP3)gX`YRLHa^}LmnG;3adRb(!EQ%k zAUF=*yb)^_CS1R$jH%dATJsp&{^X+l76k*$GzL~=qHHW;#SdR% z_sHJ$VUNUNC5^Tmm;rGTu`uMqsSBJukQ!?gi>`)VE25U3*2l2+i5k*%QO@FBs)*AJ zv9)2Ic4W!y46AhWGL7$x_Z(jE5%vqb!IWCLwqQ#-OQ{~GvHUUu9`h}f``Qbud3y(6 zjdkoEBNO++I9hwL6vPAr!(l7j*5EX( zYN=e4N>C0AIzhTnn zE?Tb*6|Ou69Y3_;mRKL=2T&Xgb1xM&p|4uZM(Q>=!h4Z6@-{Yz)CM(IvKGEh2;n&y zSXsCQ(vk%&%&i+KcG{l2wHsrzBwLmrqEw}>~j@-q3?uaHwPa_`2Q2t2It8Q*1S zk-3&_o{dFN-SKbRufu)5PBJ3 ztPzNw-eGuaqy}Q+iB+n_W@68U7x{dn4HKxYL|5CMyR?zLk%B}3 zYvP&za-M_HZ1Kzyr)ShEdrD|it* z?G-f^bi%R^r&Soc=BNA6Rq$8W7=v}qTwlVWfferdbAU3lVV$Bid(jp~IC}vz@naW8 zErrU|7GZpzz`HUQA8lG#s;bIG?U5_QYg>4d-Dm>xhjD-#?<98S!^^!?V*Ar^j-N?k z589kiQ@3gJaEAN0?WkH(aa^y#?ENE+K8!!zyzE`T2q!ovlIlh$4*#z2bMRmiSoH7? zRbeO4H15tHZwz{?nw`l_Y~nYXxebazf(6rudKL}U5#)zaI}I|J*A250JJhfX zosZo1msz&3mvO=# z_3#lUX$yUXAAjc9%$&X*i^7!-(Y@{ zc2kAoqv2lJDY&uIJ>Gl>zFAkG3uJF;z&(nk{`PPD87u~zH$1oGO=omHYR@kPOqB;K z7an~)c&%IWgvAHbsIR$fZgI^}x4qf)&J^=!+f4MA&IF%`ZILOckNb3LTYz(XWk4D) z(() z5!^ZqF+YcwT_da_iL=*ffi%7&9Ep(NS(i={fy3ey@6A&CKh!pFnsZW7oym6Xy_KwlAVZ-YR>)q6hEl7{%#~f(U48t;5 z*jY2YX#%LJGe>fKAEA9>cI7)4@FP!IR(Qd!P>J+gDFze;&ys&nMLd+pPU|L8h`2>v zIg=tHd}xy51Fs+A3Q9X1Je6+95FA#N^iuE_x~f=;d0X|r*o^NCZe-TJQpi;7MN~E$ z9I1ntL(ymEmKyLS2wM!c?}QDN_$i7Y#dv9Mr!DJDt?|60$;RHN44mej3V@V=u+tUn zf=JAEah8XlhI2zkE?4%qpM;fQT&SkmB=^&f{BFA%XCPsj5OT5yI6!3+5(BnXoXA%8 zm2U7YxWkBj?U8piaF5#ocr!DAmwT%dH*LaQ8a0jb0xOYRzCVSRUFY%rJMjPd$%TI# zUqQU8d!gv~D~y0uGK8pJOx&#ke*- zo^j~FvuSifuF33GX?SB=dKirxcWBF2ehLF=x8ZQP%wbd6g%)iZasIKKZ{R(siLnF? zs$=GP8q#K7__*#+H%vm6skg|&CURKdxZhb14O2sHh|S5m`~@!LVThYBKptAD*%19D z3`);bjbC@GeHR`Vsy;;Mb<0k|-4@oDm++W@n*HGcY6(Qk7z;@9BynbyEc%0Zf&!(7 zurA3JbFLGgRP(FTRUvyPG_=HQX@m7_I5KPsLVbtZX%{Q--5Gd8eJRu)8rx)B^KO+$ zzEW;z3Ur?7;mCG#K$tIL;6LKrX_BmYp;qi#A)JAxZ`~?Ej#XE?7`Og-nE6CFiy2sT z1=o5Zbqm_ibhP{ods1#zq1N~cDzjwUuYz&AR1`o%#t+u*!MrY$(@L3y;)5~x(`>1> zsL`^NPmn?6zM`>M7uGC|(gsGTqGVS#qEEBzUlU}4MEoigp)kw8HGB2ohEF}0%b$b& z#U6#%?I3fSLt!A+vHm0`ZmXSbt+n@{bv|yC(~06$d3@EHZ&THmiDoL+a>ukm*L@ox zEu#TxTpY;g!K!06z2J;0Eo0-FpL=H_E>u(!z|j0l$K3S%8(Qk$8Dg(3u`k-ez*b-J z9lBtMkP^kH#xehW&cy>1gzjk{UQLrv{eJv@3 z-B3;5OE3CXT^17g`lcFiqzR*fnmV+8Epg`Yq-zOpjEBivmwVv=ww7J);qXCRhnigN zfB)2~XG%P9gXmYdcorXx>r zXbOkj!?}%=ePN<4&Tan(TtiW7xNL))_QN{yh0NIFhdEMCbZx6j z@ls?xkIZ^W>CzDppZL;dcSSRFx10LaJtB+QWax3%ZI9dhV|&?@#9|vFGrjhhvQ<7l zm_4|OqY-Fh+MhnGsXHCNC>(#eX;`eK)-5O?9vi^ZSlBAEY~@QW#4mfJUo6%Xt8UyD z95xPa{-%8M9GiuUpW7E$8M)cn;WdA|iT%~+sMrNT5GTCvo3q>J-mrh;4P=i zKvZU#Hr|zioN?2JyEh%*!W*lzQpw!`a7=W2?ki>KO)}7=$;@e)jVM193{T(lg_mf84)<#jG+xGD1X{KN{`Z2x0< zj72AdU%!=Jz1{Y1FY`FVVYk~%q00gV*A2}3$KADDl&yJtXsorHfjpAsmbN>sSMyzIqVkL> z8xtZw+q45zd6;O^Ys8EM0+P1x85*zEyBWnE!HlW%Zj9LuiK+?5tE$pv%B?}A+tn_+s4DY7Nk{c#nRHEJQ3$YOcq4s33W-5)lCJQz{tjT=L}4F`UuEqhZOnH$dF z%g{_Kh_!ecWY3nwevPfeQlz^I3zw{82pSiapVzkWMsQwtGV&O*m&n*Kl6!k&<4A8& z8o_w0ev@bGeIE=czT|ovewGFUP`1Tb#=93Vd5#nAEQVPO&)(&ObK2ipbW7JH9KPCZ z?U>^JT$0Ia^PHhKrAC;t;fPjy&U8HKh53)Z5H|hbHfP?=d}Aqp1_oikc*suN*s_8* zXG06-qepn?p6=S$$s=~6quAZ;L&z*Kd%VrXOUnf~LP67Lzcb8BeQa$=?gY>-VKt8_ zGFy>dXAFxKL~LvP)hg_OaYijUv8kF{MCNz8+*MpS!gTm%^HdQ`P?~t-uiWvj%uT4( zlW}7bcYtF3h3rm*H)Z_I4F}$p#v5`b4>@0c3YlK;9ujj)S1Lb7IdkM4AB@@960C{A zNo;7w%y3_oCmp%8J~(g(&E_k%xaiH&;H%vj)l6~Kh76O9X0riCYrM;fK-)iu3V{t2 z)3hnG@J5AL$IiTvI*Ve?o*`R85M5kPCVjE9!8z~|BX_xi`7L(AY5?6Cz=FZEwXey@svuEAvCXo^Fc1ec%v)v(Z5xdWel#QD{V~*;XaFzoN{LrI$9u`5e z2DD#tfWS;)7R{b<^YnI&aNI0;1?^?VRG@t0<0Pg}Z4$v|7EC@TdvC@!+qfhnrlMt{ zaANz> z(0$d9Nu;a@%h1{F>%Oz$xNFInm!XB56=kpDv6s4H3ab}N11q5X@g#3Nhiw`70S(5F z8SNzl+3Q9FVVHYI<~cT&U#zjg9I@F@f?>gaGQ7AoW?C4WDa+|M-B5Hpb2gqIM;ixv z*T%D9vu?$XL@7h~LMMmOf6?TdW}spsP`8gY?`*{RBTPuUoREGm_Bt%qn|KGy%8h*y zQl~K+l(J;@Vl(B%8g*zi@9A9B85>XY8T8S+;|ByeLt+( zEjJaI=?$+a!U#>O&%9xG|Un!z?d_)Gj>fEdm%GUU^&RZq223Gk#vch zX8~D`u@bw9+j!e0&g}!|#4M-WbTPj-=tjgWRqsKi!qP6sod@d{bX^Er@a!!`+W855j|N9D9dh!`(r_JaW`tb|K`nWS$OQAXAhBE z$_UxbT#PyJJW6bD6Ltj0x;eAfCYPXXkWq;#arg2jA5DQH#3QQOkgbLyN%hbSYh13foHx^=6J=BStWu;x#A}oHBg})t-fY=gb(~D_v?&xY<{1qs0W9Ftenp;5JInZJMr^@%S zn03+`;VzHZA1ugVh0f%sUTt(c2xBdeFmQ3pOM{z_H64?sw9VdBNp*x6bMaRI%+QaC zLU)Djev{|wXI)G$XeKLkgDQq?Eyhs0=D@^;MnWDWar+&vm3Rx_40{HCOTPV2I(kc{ zcu^b5%C#`q>+N+L-iS7~?+3#kZ||8@3058R`%`XKnlB_54r$*9BvF1Agqn z6c}__rIHbjO#P+RxNY2xar?%{Ml%JKj0>XfFn{uuMN`qJBxiD`P2~$@to=UFpHlz#5gYC4jI=haWO&O#Kg5QhCu@)twsHws4+ir>w~F*`F$FCP|f`4 zt17I5m)$hi9g%vb%1qWeE}$S^%s#n}_JEels|q>`++mpeO8}nnh`&iG)~Y2d$H|im zMc&FzhvtoTA2XS@qz%8ZlVFCV}akBE|E@7(p{;@XFu&9i(>4 zuWHVDGkP!#1?85xB;S1oAHhn+;D=aWT$>dRuM9I5#|(RlW=y?Brh&1c{?ucr5Jss^|jBZwZu-F_AAJqZd^I7P|#F&e_MwWSdo4gL)?SNT6I6T^O zTO1H}Tq;tRiQS%z_1x0yaT&;%F&Uu>#`+Cu@9sn3rpdYrVu2k|ZcRmB&j&BOAq7(6 zn*I3gF~kE&XJ1Ma=~ZX%eihR$W4NRA!{)>hbHs0Y7(HpLNO%3BHw@rI-F?CHg zIxvXI@>@)Znp?o_Z&O2$t%1U>pl;HSwB0T8KGV^yM<0M33!`n>b>(AD9I1 zQ8Ksna8dL-UWU&w)S8)~cVAA50Vcs4IKxPZPwN6}j>QG~_0Htsr;fZ|6-Tpi zp9I6Wx!u}$I}aFBxW9|w&V_=pC;PmST>Hk3jB~p!+;?oZrGXs|e?f)~N4-zhy=kg` z*^6V$X&92rzDdM}Jma=$XpVUL6D(E@$(QYRxE^YA(d_)2@Ju;DJu-Kj*;*zh&kS9# zR^)ALl_4)D-+U8H{GKysN zdV81YiDS#^u=ue}Q_>e80^X&}vax65&8-}Fx{V0QSi1ckMtNqCN#s*Gcu@f-Mwq}z zRM7RJX2w>oOv;P_@S3^2ruK++KGrAPvcwPK;-YR!+P$gBEx~xsnNs1{6&tL1@mOys z<7teXxC$<{6NXxzJeNI^-pC9hI^beVBAFIt?+FC1XRcJoZehEmx`=^1|%X>8*o?6GH|yecEN;-zM` zdon>vSXC^pV&3N7=t3lBJtM>Lk0v4*+OrpPsF z(zzlu*B_QR*aFN8)L@rfGlE-o1$VMByAf}9Cx%(!rPs7Z^PrZLW$cd86uCo&c~$JU z)!f>Gx^tt#*~NH$_gpop)@|OT-pw4j$0(!Xn{JnF!Se1_Z))PUJv05sb)}O)w=E-5M9WYA^&_}xq@m{H@**^=IvsyG_PJY$9LfY+PpW{{zuVR{z zSRkyvv1UJqd&s=%#!V$KKe2HYlc8el{$OJ)3usFipjnWT)nIPOfOHh=%dn(OV)xM9 zH{6VsC%$Ff&TDH}XlK>&2B+~`5vJN=Bp~L|t!X!_ftMFs++~zEUYq^|VX2Kftl@m{ z1;ayDOs;`3a;6HPN0fmzytuKI=kSqV7_Lpl|2w?ECgYhhZxSb7-vYV&8uxfnOuR65G$igR?&rMN>GZgt^UjGo$h7d+$?A;%{O%%0i8$(Hna{4! zd6xh9-5I*aMlt8S&tq`ja{VT{-^Oo}_&!ELq8sDNgx*!uPF6ShHg3ES`OUb|kGVb- z6FcoDeoS}fUpK3(bxbV2-CdP_kFk!Gs~wAwy5ZPd!}vPZ^;lV;_HRv#l+;SNei#;m$2!| zq}Qa&%NfRiDd9h!Vg8xaB(*C8o@1HNUk|t-^N*j54O5YbGp3fA+%j%V>KH4kOeuYt z*qAgkOuCK7BA(xg@L|re&M>!Fql^!)OiXShBBe}gZ`VCbj`i?(xvnKw?qu~5GFPI1 zQ+E=q|M~YnIq-j84s`lA_15|~=f69}|1RY3_W6Cz{MY04uS5S&h5N6s`ky`fpDl_1 z?zn%y5-@4{er_4V@9*-v)AQdE#&?JQ|Bf^NXVsN|m1qBdD6Q{Gf5)_UePaH7-2AUz_kY~~PY(R2bKpPScK*}xZy)~u zz0`b{@9)yvU;F#ed&h9jZCL^Q4}bK-BnvapE1v}5kN)4r1lT)Y(r*TqA9`4m)cM5D z9nW`H=V^n?`80gbK8gOjTGQa4VVdv~mHPziLByc_^*XEbJ*~a&d3d)T`uW3HeClJ( zcEfv6xVLqW%QeEitSXmJoH3&(L;r=#CkXqjCtNo1J1!Q#O7Y**dd@xHN8BH4EqD2N z;cnJymmd-LN!CV}izU6sSX*5_N!)j_{^7Dof2Uab+I){QS;!&Fx>%0P$3dk}QhLPq zDatlSqUy;`|1ReBfYzE4OP_l+_BTQ4T(|W83YFg76Y)J=>0IgZ{)&{&)jaR7ROx8g zvA;5<9~VReB$#*D1ZP(pM_|1f_?SexlMh zDLq-~O-esW>D!h5s4B>2rT0_rBTBzcxo=bY$;$mfrJtg7t5>|R0+{ z%6+oZPgiesuD*X(lrzyR^(leBPrqZ*No}zSH>1QduK6?^(fzq3lexcI0EBzv+H!D3u=@F&NZ7=s+o6?6W_Xm|eOzBqdc>N!) z^dzNUqIAE~FI9T7(zBEvP0;P{s`UIuh zN-tD;p39l^fIN7R(h4vuTXl8(toZx!o^CzQn{~HdV$iHD*Y;@ z*C~CB(pM^dtkT0uAE)$9N*}NECZ%7k^zBN&M(NE;pP=-J(kCjtP3iBde&L|fuT}1? z2*pkQu<1z->&qq(q}7ulhWrXy-DfCO5d*Z5~VjQ{SKu^ls;GKZAvdy z`az}NsdTGPy#CKqdXm!bQo3L1cPl+v>Gvo-p!E4lPgVN8N>5Yz3u@ezq4YB4K1=Bf zlx{2iKBX5Zy>virT}r7u26-KdAJG z(oa<3v?=`|<^G`3A6B~6H(viAQF@ZnPf+FMSNdY*K3VCHDm|d|$CRF`bQ1$}GEM1E zDEApke^TjLN`Fe}w$f{rUZC`+l|Dh~OO#%y^j|4`y3(IfdXdt9t@Ki*KdbaIr9Y?i zDy9EM=`~7Uru4;1e_rXeN`FD=OO^hj((9D|lG0Zy{bi+xm0qXxO-f&`^d_ahs`Twj z|E1|5?z0waVeWlW^6XNxMmC}=xUaxe&(*L0JWTmfGdO+!~DLqx` z4N6Z_`WmHYC_Sw7ETykix~=qeN-t3QdZkZL`s+$BRQd*`PgnXzr57oElhR9-zFFyI zO5dXNDy9EX=`~9KlhPL}{SBqpD*a8RFID(wmh2 z7o~4k`d^jatn{~)9#Q(=l-{QF?MgqW^mmkQofxnGJCvTJ^mmo+SNh+To~-nLC_SL` ze=0py>F+5$P3g@_&rtgNO3zaIPNmyQ|3K*lO8-#l6O{gu(hHUTvC^k2{S&1ZDZNGM zrAptW^fINlD!oeSpDMjZ>ARJ_Sm~cBy;kXal)hByZA!0G`sYetsr0={4=a72(l;sn z3#B(H{Y#~9SNeXXH!J;s(j!WLP0cIYlzvdTKdAJtlx`)*>;EC8Cn^1~()~*RTItD3 z|3>KnrGKmRRHa9io~CqtBOycS2?=ozSxWDubX)12m0qCqM5Rwq`b8=~3zgngxu34| zW0YQ`^dzO1D!rT1%aq<-=~YTUR_QfL@1gX?O7E%kTBRSS^rcGoDZNhVex8C0^S?Q-KJ)rc{m7c2f&8ohoDLtUvXDIy)rDrL0l%A^eQl&d;zE-C6fy#ZA($7|UjnW4xeX-KdQF^V?&sF+TrKc&qPU-1N zU#ax-lpa?4`AXlU^b3{Vr1XoFzFp}VN^e$rrqUxyAFA{=r4Lj3L8V`;bgN&y{ts7r zlF~0xx?ky+Dm_{0SxOHmJ*f0lrDrQWP3a?)o}u&{rDrKUSLwFWFH?Gf(nl(Ng3@iJ z7b-nZ>C=@yO6f&Pzg+31O3zn%nbJoqy-Mj6?^3Ug=Frzgp?rm41!Vo0UF6=@F$*RC=4zCn^1)(yvvzb#lD^ z*Q<4&B&A=c-20X8Q~95)^y`)TfYN`Y^i-u!R(hJ!3zeRs^c$3(rSvIEx0OCs=>BUNKQhJHfw=4Y)r8g^muF@k)FI9S*((hFI zL8Z@Ax^+st{@y*Ay>8~g~tn}qd-=y?cmENTE-zt5((toG)W~HxC zdPM2JS9+V$S1SFW((9FOoffbEe^7do(pM|puk_cHo~-l+r3aM0M(L?a4=X)Q>1&mq zq4af1&rUFii%-=OpfO5dpTLZvq<-7fz$$qpsnbLJ$=t_&Aq*l?oRfR+rEWxRwuHb+$?;kKe!jUNq8^0H#sc4i+nt}PIxD|54l!&2e~h~ zMtB?f1ag`17V?SYBH?x9WOAW!J^3VZf$(y2KXR7vGV;mfG~p%WQ^*0~$H=FW{lbgL zr;#n;h2+!8ZQn5c_mKnSX5o3{GssQCv&sF*Vd0tNGs$(rQ^+agTH#6Lv&c2VW5_=s zmkEy||BzfHoJ~$87YYw04>4hZ)n4<`GCdy~&0Tf*JR z=aSpLmhva3k(-4NodHfKHwo`04ATqC@Vd?C3^cnkR= za*^;lat66jxSpIzE)ZT$9!kykevCYv>=#}{zJzQEFCOe+cocagxkxyhY?BLx zhm!Ni1;RtfqsUpp1Id?@(}eqz^T`3>e&o?)zi@Bz6=X}eJNZg-+aW1`asjzn_)q|R z6}d@xFL?|(EWC?6mRu*ilRS=GE4+g|o?IimjeIq^On3|V8gh~FI`RZ^p>REUBDp|# zIe8K}OL!UiT5_8367qHAfbe7F>&brMMdTlmE#Zaa$>g@Lr2NT+h#k?oOUXZaXODPc9-i3m-Zid^@>GcrST2IV`-3 zJcnE-ypvo^t`*)vE+N+lZzJD9E)(8Do=YwgUPmq^7Yf&t?<5xpFDK6CA^IMOLCg<67u8Zfbe7FC&+%` zMdT;RmheLIQ{=WUrTodYRz@)~m6 zJ}G~4nA|KpkGz)LBs`nEjvN-ANnTH`6P`kTom?wCiM)YaBRqz@kz6J`irh#p63!-X zA{Pn|C2uAd2oE7|A!i8>B>$0|CfuL=CvrfzANdWkU${5;)`&`PO+)Qp3o=1M4 z+$21kyptRjo=N_ITqit*{2{qkcoO*|a*gm9^2g*d;ZfvI$VI~01yOZ~j+uEf3$!+9j;X@~bKPNW{?P(N@la+C00a&K~2co+G2a-Hx_avyT7 z@D6fca*gmd@(JWJ;VtA7$wk8J$jRhF;d=5(>4hZ)n4<`GCdy~&0 zTf*JR=aSn#mGUR2k(-4NodixNHwo`04ATqC@Vd?C3^ zcnkR=a*^;lat66jxSpIzE)ZT$9!kykevCYv>=#}{zJzQEFCM$TqK-L zw#kLUL&REU zBDp|#Ie8K}OL!UiT5_8367qHAfbe7F>&brMMdTlmE#Zaa$>g>cDSvVyxmkD~`37>6 z@NDuFa#(mKc`CV1cnbMOa;@+r@=fF#;W6ZCh#k?oOUXZi`6ylZ(jB!iP=--%f54-b(k(-6*kr$AgglCiQBZq}&lFP|; z!c)i<$YsK#$oG?rgtN(2CA^IMOLCg<67u8Zfbe7F zC&+%`MdT;RmheLIQ{=Xfr2NUX!{0-Jy>=sA6}Jsqh%E*My{G{ zSxlD|c@7PI{8;C&wzJRp?`lUk*-lq`*fDduuPN#_&5DehVp(>mv#-IQxvRKyR#obR zYp-8FHuA=T?z~@G(k(LQ7kzM@*3;~0lI^T7>28OzaPVHVAT2#?FF0I#_zBDRQ25&Q z!K;Jg^PF#jt5|_l^=}yDv~={2*6oi>=h>#A~GT^mkj> z*x-1E>-e4JZWL%#y->R_RQ3{ZnBh9CGY%Ol#|vJli6&GIk>I$q>$uzt^->jTSB83? zak%X%lc-7YQ2VG*k1?TkHIAQf9S`P^WxeK$H)OL zN5b(%uH(PG;^qLCoxM=IS0_BhpQJ{S2wyLrNB*hhSU>oT2Hn^!QN1Pg~FT!-t8Ll(B1E4m6* z8pp@EjvqFTi*NN(!|Efs@}ZmFVlTLOu9$k$%3N9Dy1K#*CzdO$Fp?_|jxo8CJWFz= zvZj5mASYx)#>k}oWzWM;LdmJNa|pTl_g>dp4aeOqo(kZJ9f8$)7Fu(pS3(k-9t!Fh zX`rpX$ZZewk?kCN#F@0%@ockSjvw1l`@)kbmv8c%zu;1-H`<{tXQd)6*q@YSloM}` zBK6s>yFHPecZ;cm#qm|t&|!6PN>aYF({>somwn_%N%<;yn}SBCZ`?|?cC#CEQdp&} zhOFQ7l6xW}@9EBJd2vkmNi6K*42J7>!@UQ-Py;rU1Q}|I3N;ydQE(OVVnXS3D{|q} zeJpliR_h=;1n+j}Zi!puweh{IJSW#`?ZW{6&H%)nvCMWTKPCA_`@9~KawmdLVG!25 zu=6FAbu)PVde<_->^8FKP=Qfl$0N7LHdw2kM9_bM(TvPR^pT$466?Q;OFUI;#NBb_4W^VLvv4uz0(;0UlAje&&tj2#a?*fU=q2ig$ zkuJPU9kww@C9;oJiH_w(%3>G!^vOO}>*c5yT|#|QMmx>%>J;fU)~!o}I%KM;c_$#o z4Obwrx>#UOA+V#=u}xT4QgtkN4aWqiR_H)61UZc6Xxk2IaYGH#*{)$`pka2GMEfdU zgiR6`sBe+nJ0*wnoQ=MUYMkKc!&r_^C8yY-0ydX37`g3;90KY4Q{?4%I2;|C=C_^C za?^KXC=z+#eN@@XFl|7Rui^rp&-`@$=)BNn$;{3)*zr-Jiz5;4tYOI=PZz_c`HPwO z_s>B1{tznqb59`j1L&RYP!2pHH5dR#I}TuU)KK#x3-i6m z%edPpHPRDqFO8>Z6$3*I0*C?2bd8j$uW}J|2G}|p0uoh z*M9|f7t`oWE zm$=FsG%KtrNcZbVcewR8M@#n&j9nRhjf5|gZVvAo(%f|a822ls26@7{cf`}o6%^K> zRJR7*{4wD?v@Jp2>!l_pQ0szPdcD^2C; z$^Z27RC?C6Jc~TN^5}VbtC($HCGYRY^YnPsim9jJI&I9I0gu6i-7Oi4R<~X<^aUm{ zMO7pk1V5veRt+!vAN58OMGa{P8df|XU1(}PI@3U;^qdo96ahnmmYnYt;s12>4TZ`1 zPAOXC1mr0;kLIJ_brLWK8pMmKCN4$QN)z#99gK69gN8!~D=)Nb1LI zz%RYq%SzuY?U&XHC-XAjnm-2puGsg0BmiY>hc4a};r16MgZGN_huwui70yWeJ#aEE zlk@A5pFJEbqnMk}U_9>OXS>T8CsuQJEqk1oBT4qf=zJm>2? zbnWGz2HMqD4zn*t5@}b~FeB)gUCP|sy>$C3o?_;ra-q#h&-d;-9NZ!K^E$-4p%4Rl z`ksc{mdM7TF(EY;T=6)!;!9995>!b#13LPUE~ zSXV-h1-u+{*F+@0(vXOMm0vxOmRNq#F;hIU=)3c4s8?N%$S=R^`$F92l>G99gR{Kg z+UM6E><7VG&-c!+tg?TXUk~IUzY1gdHS58n=GS6b*HZcQ{bnWaBN<3nhgr$tdu3MA zhgV*?6ixUL7OvXQN@!lcGy_r0j+A*#Lf>D0X(uycpBC!oZ1SzxJZ)_xXlX+Xr#9$;exP8C}_5pRh{Kw?ktBz7=5 zEt5^PlqIsmSPF9&$|Cm-gFgg#{6q=tJ=e2P+J+Nv}{zf#CxTmi~wm$|H zVmLN3OWx{o5<4Uq54DUq$%(ir=JOryWP}TpdP8hppb=PUIlV8|VcO&p*d+kS^ zBcJp`5u#Up>NNSrH6jo4u<~7B1$VAVPm2y_8IIHUui?x&@&OiLIdTu3?w;?G;;Z1c zwT1=LW?06}8o0@=-0gc{IBG|*Iyah|4nLTS-FFgo*quY&6h zmxnI?8dc>3EZO6_qns{>gVk3il)Q~TEX6^O6*S$=97K>E81j4Ri&z{!_+or<__?NN z6f3u(;Scc4hw(G6-}`YM1}izo%PJX_!2OTfxp!SpWN1zKq4QJnrf!gg*^OP+Bc`bK zIUGNt*L6P4$FlER=sGY9iu~yAJ@zG7lI1~XL*(9*;0GNm(qFtG$#;4V zd?HnO<*z42eg!|HGe0ijazo@{01M;+e7B6jD*eB_IxjuWz4UeQOaFYYx-@Ev)%wh| zn)Kay&ek8<&Q81h!?uEPd5z&Pvd3;*TOePJMW@!Pk4+Bv?{D;*fy4Jwo!7?v1@Fb9hiJ=fsCuI`d$I|uBw&0Sz36YK$v zu*%VBXKQXEs$t3Ls2#Nld~&KDpYiJpAHY?&Rh5nEK*eZKkl zwAliEC*a68ARFOgA;P)J-^xsI^P5qUV7C<)+YZtgzeWMhB#u~yCTZcfZ*Aw)i*Rg* z&O_GzIyw=;h(NUO^E_(Ayc;PhAKV2l5?XFRLBOj;=Zzy|A}85ABH%{dIrYQeOto4v z>CQ>qj^oyl?eu&L2X&Y`sVWzhX*-Vm zRk?}gD7h*ZB}Oe!m5bKIqtvS0PUa}BDmTF#Wx#+}YUE33WCz7uVX=<4*P4aB2Q*2OU}B_@&5EXJb{i z&tCgkQdZUM<3Kp{Gz*|Ti^SBJ5bf>UMl58>!TIXaA^9dh(Fj+*4?8yszvqi=Dv zT8^SPT8<;%imMT;CVYJk!Fg;!xQKf}1Z~H^#@8aUc7S@Nob> z$}aADxa88ZySpYFF3G@Gr^6-b`09MPWFWq}94A1?D z*CxJnlhryjRz7GPS-ys-uw4V@Ddth}xm@db#1NM6PLAiq362j~Z9(lLJhJaP^$ zj7yz}OQnZ{D|wG_6+h}z5eK<=d!woc(W?For_;l$k{E*` zFYof4NaQDth{Qb>0{WCe-jjf%opRI(N89D7GmhSrqb@k&4gRuw5^=>iYPCAW7VI;S5cI(M;st;kLCtr*>{ela3}cpdnaDhj*XTC{4M?#^5V!S%8B+V^p| zNfd`l4-nk+bln&q$HjfX9?{2IOu>J%F&Z6>h9~L3%{vEITf@7hku_+%xO^#u$a(L{ z@vS_5WIZk3KQWpeT-*sW&^?h0vYDWq6dRL@E;6a`Ro=#Rrt;S@H!wHdv5+;b2Eh$L z5c$PhTuy(Ks#jPkZ$?7nlERLo^yJiykh< zx^T~}a8l13!lrOnv2X{!%UEBq0;eQN7&<0IBIudQcPEtm3Z5RPr$sSO+tIut2X{oH zEiG8$hn>Tv?}U>h;+mWOVWbFGzs$EH=PbG!3s>pk9OwP|^*V<6I)>-+VjW@_!o?87 zJ~$PR;bn+nUisHaCAIRYENma^Jz6;}?TYoHHC!5*gOz03JiGdGF<_X^0zVhaKURz!dIz!mWA~Y6!}I78 z+V>SBzBE3>#KnAYSd7+%A*)AOUs|qkA<56-|0fuBe3RD$fNXDbossaqj zc$8LEfFT)=GOGMo3OKvtuj8Enl0)+0#Se@;wRJRXzF?FVAr{wr-Smndf|nI57o>V7u(l zbt%))6`W$$mz+omhpk1--1U*oZ($j6f9V^T)lU7E{xEf{E=XtyAkO&-pF}bn(3Y3` zPA>zuYqpWoZ{l`{lJ09t(P>214nwNB?`ZF019suQlCcOBbvpn&#$51%I zadzfLG2_1bPeYNysN3Zm19s?Mv7(r1g)x=$Rdm9+stH*C-2T63YFko#)EVqA9%YvQ zx6WY247lxEPo%TzrHQl@V`;#f|HS67?z)lK)30GqvEStSU?Z>&SJKN z>XLx;R@{mh>#0m0<5uXmr~uMSIT08PvwkoFomB*#guiM8Ix8L}SB*et#iKyg2y|9F zO061!&WcBARU^<@@d)b&yQ?~5sDtH$5oY;d1eOm*c*_SPdX^L+kIz10mEc@N^*@ux z2o?(!ru&LCV|50tr=|2?@`Oi z418{mGO7wN&KYktW_`sFH)cf-R}~zrH)}Hm-`JtPA3w~D%*2vJ)m83_%k3B&ylqxo zZpYw&hgfmB9isytV#VclE^FWrD=xQVe1OAUX2sM`F1KLu)Lkz@yH5|}c86Pk z~Q!G4}piN(|ofM&jw-PEr(x?i6`N!_RPmEU$4YTM)Bc`u5t1d z9A*v5w&<-3&pL_YjibH0CR#<9)56<%Mu|YN2E*He;ng^l2+H;D0^xcO@~bg%2ELli z_4*l)lU>(1c`FXBG;_UibnhhgHIA}DwHM0u_VGkxVg|mN;TG5XM~lARA3?a@hx}?x zT!k+yMbfv!czoG)jgzZ+(!Jg@bnhho)i_!Na9I+^N7ay}e2Y##22S$#W}o-%e8x^bWL9*VioVuA!7TU^*s{yEm}9A$=49ZCWD-m9wnzm9>qKqOB+2r zPi2g4q#SDN?`q^;m8@AA|CQXxfXLVK(&q3995PeZ9B1PRzYX$n5du(M~0)Y->rlD5~%o`11AYN~J3m=dysW*JXaw!rlGGcH?DSjYGOG zlRdWhPIfuKZy1tUi5VumtK#8Zctm(~*YvSmw*_DBb>F1Y?z)I?@wKzl8P}A3zFA%E z5MnhTaXcIXFT;(8#2NHIAaM-7*4KFRcjfjs%I#~$?Xz?%^CaaisN6Apgn5Z^r`Cg! zPn$oQC?@I^eA~`QzpvLZ+J27oBTNhv6Q9O;gs~7`>U?Fi6p{WGD=fVbc=W8}@rhmB zvHq-bf62+b-zQE!gWu>`2N{st-=%M}r7%$g?zIo>w=)mU*$VG*`;D30@iG4|iT^M@ zWK0X^oZ^kFbJGj$? zS=Shjj;bdlAiAI61e$ZS@5el-3}et#+>2un?xJXnB)Ky@K$ma919ai3s2?O)(@DNKjZT|%kL#|vJ#*FwfwqG{Fix`h?U>fq8H&4_0g%G z%F1lYOU6HK*oUzh^BCOAbKYnuL%XyWe9C*Q&er;qVK&riM@32!bXZ`l6x3oR-mYGq zA|9}CdLEpLZ>)z@@Z8it+tt67(_A_6z5Lh6i`c7VhfE-`rRI_z_JY@WIkUbnV~s4r zxbef*$yF9sqGj_W+@QpRE3@!jUx!5mJc)*=^7WeS;y3{U?oeRcSz%=1%d8ixQwqCK z3tdqEQ!EEFfPMD!q9btO%Kg~1em+zo>}$ZGui{JCFJ#(J;j8-UX!>p}9H+kFudj`-%{S$6q`gw7NE2i8X6u(+?i;CCOw+&U*4>$agxKFAijJ;gbcI@(2{&TllA9P3a#B*ISb`IS2fhqW za<-wy?XVNB!};=WkOM8ar2#XD4Oc0tl2Y!vdi+%czhHP~vl*lLDn7+n0)yJ(g}7yN zJK}`9Bl*?Oq%=W}>}h4~y$(4U>N}PW78(ckfE|%P%elViQ+~q8ku}tCoB4MxzbyPt za3%Kx)Hgwu=7Pq77Bl7~UU*!}1ljAl=MT)7$UX28E10(BreIFS8B;KyB8W)0b*jD4 zaezM8!*O|QLJ9VgeP)&#Ux5-dYmMAU)F7*kIZj1N3DUMkRvcHxRva&K%Ma^`lX5FJ zmrfo%b#wWiPU0zhV?~cb_!(4*)NS=ub-{53h8bVu4y~*`{w=5aN~}FLV=8v!+T&+f zd;Do1`Y&FR}4y$Ej3`(H}eGNx-Cddf4LgZ9*@tc<#=q;|rd zNb+yu>mw$;k;)YqqvofaU!Q^$qJE%3sj6`i7P#S%tFza^A$B>3y5rVFm+A%4Z@>Na zz}7Q1omGav;udEu7SVrGR)+P|9BgP9)d`ywd^uaQtc`a0j?Vc5c9tLN@BI1R)8q3m zFC)v>Cq!!Mke7$gENP`EtJCwLG;no#6|0B6#;YFFoZm`@@{x!F$>P>?Fr>&~Jt!U* z%g>gM^#z?wQ)wpLT#)aC^QUgjsm_bq2R@0_li+}GusrOoQh%0kSyhFpDNA#l&8=aS z)9KD8d+Jvmb9Cc#-nzZX&){mg6?yLOOa+SHF}@Vp%NCqucfJmH-rvMhwU+~tpQED) zmVcU1f=7wG^g~+3^h+A0(oA!H+MzD7o+YdF|8K8Po1X1hpS<+DmOP&R>zIBdJtOkx z*HqFUe(8v$mqV(T8xu%gz->kk9@SQyjsDAPN3;GT?dYVVwxgzBOA=r&f~(P+;CUh# zbM{=Pv&7h!teNntNpEuGgVid%&!SW5P}IMGB*syaD)oJuYa8SBp7lMe)lKjJ1NHo$ z&$O@Sk@)%mccNs`SJ??WBKAiVD^fTLiVd=Sl_6vZ23i~}nKf^B7iiz2a`ai_ z+&=19cy2j-5Fwz0&wv-{=?lDr3EqM29c1yKrGXDyM157~ABsj%SgtjP@zZyQX#7q_ z5?W4xtH=VhPTX%vJa`{h)GGJKpCa7nt9TTF+PH&d509cCefL*@t8a_0-Q78-`o_W5 zs8FAe%yzv|*si?ASMea-V>@DbCrkifK(I(TJE`Q%(CpM&#Q|+OR^KT zV&`CzGdtDhOBv#MfvwAl40)uP}bp~fb8qLja8Mt0vXnb-ol0&=HX&v=#g8p06yxVqwGc%gkS6c1kpg zVAg)s1>>hTv5JCimemW{Be}6m(y_b_p5w9fqImQOIx|x+Dz>Y$)2e&Oc&>q=uKlP> z`G&LsZ`uiKotdf5>_LpWTQ)6|u>>LgN+@y6wu$D=4DTbA*u>cbMet-9cC);L#~P5$ zJ8&%7%(7-SHps3^>|c1Bv%$oAoR9WBpTPWG=c_mtf%D;N6nr&KqAK2luLK*LQSD)g zGbuTVbMSQsr{|M!;B3un%#~4Zo-;ma!TTKCmkbFu=K8a6(Uq6tLnaSFXEe6)555#$ z;6Vxy-vOM)D-3W|>EP*&J_c-B#V3O=B{Bjfvy7ngyYj6Hsnz z?nOh7e2I=3$td1gmciF@;Bf*cF&)lYK0xT9#JBIA3ctRJUn9Jn>hrCf%r;;7Iat`q z!Ae2sf;Bj8-?A+YIk@_-ti*5P6T$f^y3-BX0UbDrkKijevn}6QJ7*Mb73X3Cbl~lr zg#G#0$$ZQHw7grI((T95}Mj%Q4%56dC8rYmG z#pYZCn}fa5eII~Vw&rYOb8Oh0K9VIt8XaS7ytdtF8Kbk&goqt7SYjziYT1e6jK?Qb zlsc?v(AD76ot9nQCvKvGuu(XXHsEbLVGCTP zIz_NjNb5zYqh{P2N?iViYoGps3_;VRefst;*r&`rv`@o_A|_HSU*SAb7qd@~qTQmg z^~3pS-vxnNVM-@FI#qfjWCAqpEuRYku`lMaW9WE8*S&SIambEtu7E7wb4%amNv@1 zMA^4Q5rM>?A?W<-i!)kABj$+P{ovrr zxQUwZ-6qN#FKGM3O<%aniY?N7J+3Ue?$gg_1Q7fj>^AFpIu7LdjM&2&8|?*%g7djHF(|uYi2psDI1ay2W;N+-OpF| zV3XF1__8jq?s6mc@ZW*)!#`Truw9lXPPh|w56fP1(K9ed=Q1kx7t8f3@F}(oJ05Dq zF5*7I9+<|+60WRpOVOUl&2M1L$F&#iA1zNzVtCw$RKc727!JftauhMBo`mObG000f zIX0LGx#qYA-2&cakW@}{JQ|nXY&$j{Ea-!fLw4#g8v{KDYY@(s>il;w&@-mSj+vTI zS&HR}Ri(T>p3d^dmfLaJoaz#E1fQWJxcEX`_?ve90ONJE3;WcC??mLBE!oxipC9GQ zA4~m7ya-puupkXz?(p&?9P&@C$L}sZ#bodqZ?Zto#HX9Vm1j!=1~<+{0@8Q4oMJ+K zADHj-+<~t=C&)fyJr4QD@`r91Yhr(S2TbhSEi|z`|Au44&{r`L zF+wZ@`FwoG8waMt2EooQhoflUL4?Y1K3Br<(4XXF&--x-6=W{HU~ExGuA;HMfvVGY zCcebjUWEf1+n{S~gRZglRsI0c3N{9hFt~Yr(5Oej8;a>{e8I14cY^_zQ$99%#0TJR z2R8s4Kfa0$!`pRplF8D|d71pz5}nED=1c`XYL}hk6rr2jh~!OYH^*0ZTfwy-cL`Qs zk>=Q`t7!iRY_$`1q3$@gbabw<^i`e;^NX6dgpbp>^=T(TJdb0Ebq^Gpo-TCXBGn{>^U=PE1ol>!AmJ#)o1mhGjK>#h2&N9E zid;h3={pi%Qbo?e0jr2NSIG6MNX00`#_eI<(SOGtHaE$gJtQEIjK9M)L4(@}kS`&!bzinQF1ec5FxapB>OPlT-q?kUb(XJuCq6HCin|A}E0OcAyv%(i@0jQ$Hrx&yRNceh@}88= z1uMXMKr@ORTH<1;tn*xRiOn9bMDdx~;{u#^XOHt6nX(#uO3Kcro6z71bl@aTWZ>2F zu_Cu?^ewy7@)9tdwE^o}~9zZnl9*}*$$~`FKmR?9h`nJ}WjeRorbFndZ!KduzE5dxD z6Zg8Xj>pcyF22Y&0BhL30r@F~z5(M>ihKhePbq^--+*UQYUKNclv?@zZAzVduTBZ$ zTitKOjWDeJR9B?5LC3o?5sQ1}8B!bb%>dpd$c_T5XSkP%z+ za2Q8%7%L5XgthbC;>3+Pr$%8q^&8$wlCgfrWW@Kct(=A$+4|?m`AgWH<9TJdA8s}x zW6a2?%spE!w%Lpo%@remdAQwW%K2mi*Q-o;yJF*!v6z&mzJm3^Qm&+ivhYZ6sXy}e zMV(pV#X(F*vF*oM-;jn)Ot^{FbBsBWVV9>S@F{(H=s!9p%`QJXp=1aijzxWc?^*iQ! z8WhXbkGrYe_OHXE$j>9YDtFJcR#qYb)A^dv;L7{FL*aa1PB^%V<$wp2-l=~8CmWiO z9NumjeihPF{(1n3&BKEhl^00wGyLk$Cs~o;j6Tv#5}+a0OMb!4Hg}#A8Gr<#k9hj= zYq42)wY-=VFXYR2n&Shj`2Gv0kxwG+{}~GL9p=YO6GuFfD{+$#=W{+>$4Ix2Ty24h z9A2C@6-me|@0u{$Ilxi(&-=)GSMg#mynV)5*HCyC({vzm=U{mSiSsmaCa?Tl6qA{2 zNAWhZyz(DgBIF_)_lR%~GSMs;dapc#NgLmW49LRIK*CN`Mp4UoP^ICR$lFT@Kr8F5OGf}j{=Rq^ljRI??;p9G!ui%;R|U5aP3kb z;`lQ(Yq)kU;$_Pdf3}zwVGS)pKAx1@&5U{BoCJX^G|tGmfQ~H^A%|xm$eDbjD-C0ngB!o>tKd_L{$h4zm8$w?}q)l#QL2FOso@3*zY_N zvttcaoo{Bfk919OGk-(zFc!uSzU(Re0bcUj7->m@{X^&A?^qR%Xk3wRGx{LBkJp^V z2tSQDGPgFfU3x|L8k#LfYb?JG#WuWj8OtkL?2lai4jeTmPKCffJe9#@xl*6nkF88-0~}!wjd!?O&Y|?~f2Qj62W+c&!DMfo=18M4RnNii0IE zb`Vp?bor|KGfkeMfKd5yy8w1GfKwy@3;FpDN{3b_DScax^Vw+U{Z$`H8+b1$nG_!p2)DjjDqP1vyTw@p7Fw{M9 zr;LEY#eK?36D+JQE*?R=5G zKRp_`@F@w~SMh{|xpB>x(L1bFsL$9aI~ws{{V-zXdt{w&Q8)uPf;hQj2X-O8-F0>e z`Ul|Fm&`mDd&81iIQcOB5{kLyP9ziGCWF#<<2}|lLy4U?ddpa9v3JVgMWro4C|>y> zHoWp`Og$oXIeqY);2Tl-VP7{MG_%r##nvW8UKoIv+*qhku#=Ie0I0_pe-&S0FZhOr zr8u|Y_-m$#6}%x3w~!m$y#40)F4I^N%Td6f`B5p zASmLF+L0)Nf$oO1Ef}|vQAcrS)EReWk#ty_#RU))h_b10A7K-fAOiV+K6T&gEkT+2 z`90_VJ?G0gq~E*mu63*G)~#Drmo;JH>^ zdO70ub>>qks><_zT5DZ}HwWHW)KueNSciM_O|l+%8rQB=gOC?V9bX&i3cDNPFaOO& zIgsXXS{2`WBN*vrz5)LMQG-@EvWC+4-8kZ-MIx=y;d`zZca}; zYTkL=8Vok8w($8mJlm1f zh0gT;yZw{Mfo5LD{@e3B@_xv?d)I;-%h^hlof-*$qYfU!6 zZiA5O-&H&uV}_firN*o(IVIwu)sM_&fjLkj2%=I9Y1h#A`&C^yvQ^F6-M5%f9sfw1P%|5QtO5hG#E$F zeW{1@S6m(H!NvEL$2G*inUj=C{=6hq`T46Z)o&`2bEpxV#dp)Vc%4&;PtZk#K#BRB z4$!o`VPu_+vFbXJ`i{Hs2}iMRb*UFs26Mg}j!t2_)f=sgtxjNZR%O_ok8D^BT9*g@x$MOo&wYlmBEKI2H31++u8NpokLk1j)=;7+l)(uFtH|v5P zulg7C9@hPwyQz#q#JH5SWIm?{w`}KUxIC{2b5#Yn@c{@(&ic5SBaHRo_#$TwV-bXJ z0mpm;9j3J^lsyQ`st)A2@d`g*9>VrVV@1Im(HLX)@nB@x`OGb!JuOUbz#5x4?4)Qe zb#TV(BtxN^m>kDNpS-9cJB;x23G#R0#6#@9tsGeZyrf}ID$^j69-0c_&dNm})jelm z*S$*nGyhCA!f&C0m>Wp=DQepe+38I?15*=h(dZsv&N9Ql8N-%5>a}kG41x=Ln2V4H zp{=mba3xiY`D`@CIxbVSJrB_hnWN8WJL(fYt7(Vra**zMCKhZr^KP;zY<2LajL+I) zTeUdoew?XT<0m7P2DOi)W8C82nadc7M%g<^N1zKDJ8zlO18r73&8{QIgBJ>1?5$M- zZ0Zs8pa$UyzV-dVwmA66b%j=9pGN=w-bpTt=RNj15qb~}ApI?--x8C4lTLq<>AjI2 znt=+`S_lrR2hLzavp&M>61;}W`1A>%hV$t?K4tT1CZ7(l*zBZ zs^oAR!q)J$Am|gu7-p1Q^pxWQ=Lj)?h`O>AXuuNl@J1b{kMQPle!8wp;$sJpCRzi2 zc=>o+a=;|VNe&dGM-bE}Sb7tX&+Ip1oe;4AHN}brkgGiR76nfJ;DS+DNMFKV{sZMp zH>H!B&(@L5!|n&|+@Z~c(j(|SQi!^h~J97W3-U@Zi#E*nxb_5x40pugN~Zbb|riJHal5ir#;aLdn`=Fv+Gjy;J`{!RnAv3KtWd>UoNb!{>5Q6nTAio znuFC)fEj+V+Z8&FuuXP~VLwtSunnsdBgN7U-)1I~Lp_IED~Jg_Pr`3-Ah`Ir^omnn zgJxo1Z!`n@grQh>E`9(~Ojzyt4ve2WG3X>tm3}YL%gL3UxXZWqxwG+7cQ3B4Sj@dJ z>=rkvv4E^Ob=)93>VC;!<=-vxW7$UbYwEZjDj#A(&^_vQ@l@FaYyHeBw+UA%#L;cqR zeqDZ%<~-MEnR~n-kfZ9AlYVD^gY6EvBZy7Q3#{`1?%%Nn63Y${XJ*&nDRUN{-saN~ zKD~-3wHH#Lmfy_aU4Xp%g=a=0L~gkF3e)>g8oKve@dav_1z7dEHl?_$=^dBiDn3y) z38QluOi~jtmRdEGo=A|-kTmRC>p`>~+RG*`Vq=wj%H~r!pSt5Ip5H>AT7PwnJY|k_ z|8vMl7$SCls4aq?n1S;}$c5&(-D5~!C>$pyhA0(eu*X9X2FO}&b$A>Q<-v^R>dBul ze|Yd$&MLv28s>rOt!x?V?oX;_tf13gV3og8cG$(|1=~G#E0;!34~TM-=IIimB0$2O z;qU;SvF$>gfZekj5lO@w_DRG%S{+y^LZ1!)i92WFGc;C#tuaR!zKrQityD#R9G@ZH zBW@4zoMZ+ck#ralH@73ftSoMiGYD2;%fn%KpFq@IquzrYHmZCeWWk9$bBX+jZ3m$D z%!q4-Hn3>s)oH}=Co^WCBHX4D*cA366rjHb{605_KEA{40wSo=}_bc53sKO*?AlQ%XAmrSw5*BGVM!@x?u zoX(d!rZ<$Ac6=G0uCpC!h?j+5+Di;$pl)SK-m3=lmc7iEC%+S=ec2;?dHpstYV*g# zNT?vQXE%>5*QkHx-WV3R3OP*hGSbAg5KUDkc^TOhxZfN6h>{tR65xJ8yF>+JUrNL5_3RezK}WkGRHcd11N_ik?u~y zL$KpD$SE!zr2eovVG;(dS&4Dk1_TBvS{LY;jXc)RB6gON7=s<(8;G!TJX_YKsx#Ct1w4@+oaL=YvmU`1CoSOg=5* zlZz$h@M$yC-r>_MKE1}L>3n*QPiY*&<9yo75@md<+0P zCU)>4ldl8#VGN%x;gbs^QaN~vm)G2^ywtzl1#F z`a7*?kjJ+&Ziw@BNPT68J70&__jR=MRZn6<&10OeW9lng;(RTs?`tlA(nCIk`)CZZ zA(dNSZquntBUgMs=2oHzGZ2n^=D!3O&0U!i&BN#V@?hr_sfW+?~X zeFFkkKr4GaAzgf_Mf((RU|P9Cs6ygu4?>h7_IS=J#A#5s-%aRy-$5=e`c2H>+*x?8 zT}g@a`cF7bLdKp^;3yBF1S5R;&H;}zy*ZQd?((#SUiOu%U1}94l3(e+QWPASDhJrV zvF2dTjmRo&LY*otfPeRc+XMF$AOa zoP=Ps@cW1Uv#NMcD0?0l)mjKxlGN+l;w|J$vRU&q4UOj4kMY$EHk@~$vb3lUO7EQN<>+9_+!l1%lhYxv< z3+9Y|5s*HOlLbs4rN;`W5Iq+^?4W1xPJHJnW4IwJL{=z*Qb;qr67C= zo?gXwnWwifPZ4?CoAVCRU7jvHp};xj3&5Eg&>?Z=xG2sz=Uh&Fr(jM~*UIjdIpUu8`A2MCV=a3_3fv-aWg?o+AN*A+N|I`V%ZU?WyMl0tC z8p;_F?70@${m-h@^0T=6Jd7;1qS^FLFwu>lc!=fxVhUObjz-P6Zwb7uZFT<&9?YmK z=Om+#B|YRr@ZL1D*Vxnv-xqotWk8X+m7L3J^Kmkfq-YA1-+PI%`!abC7FcwxWf zs!tROR3m4^kHhZ23`STvfN|ku2N*w`f(s!Di|X$}>8x*1q`uX0`yFy+nP@XOHVs#! z!9Q&>CIz;1m~qb)uyz#zWGH9g!87ORV>9ekp8SyA&gB#=^P|;LHgcEKDmjl{2|}46 zeE4dsGnyYlvzT*nBwVN*VSrkJaU~fq}7cmI$x#^foV0+9# zq;7_$|7@k#hKFWkErYM?7lM|>%>>?>PKQZWBILeqID^M|_qM^KsKxvZ0deE@5c@7l z*hBny6PM`!+e2{wq*vb9DF9@0@gaUG))Uqzx6Xtiw`osjA6cd2rV~PAC8rq0|ExVk zXRP?n+AVG2BDhOZB8J^i$7=kLgJdBx*wah`W%UXhzOUICZ_akSyF97EoV)%GCVnQ| zm2v-_XS|3*k1$IR!Volfa!ncttrGdQj5>J~7ZyiG^;}es^!x-etL~DoKIvIR1Ke|N z9glE9B7ei{z7qJGvvoQ;Q+zX5lq$nt0vXE&5Q|!oaX*x61-5Y#}0;<2{t#5P? zcKf^|l8F}?1;))dtj`G#!1!t`ub1%)YnSbcZ zn*;2FR};|+tdV%I`EfAkrKi!**=VTx8PsR*cZz~Hr)nW4nDc8X`o8E!9D+$89?A#3 zzBPQeQkzPDKdiS91#n*yzkqQ;w8ILSvjD}g;YyJ{hYO_dg@`nkqD<5!pzVMvoPM~k z8$dnAZKx(*mvQR_34G|58#u)O<3s-|`4IV893P6<(gZe{fogR=!upVh_^YAPh*`I= z`Ld>omcw0$U<+7uwY-G2win)scM`uCtSc=v3p62C;i^RyaU~xITd)b{N{#$Ym_Lxy zfYn6l{U=5(zy`RflvZmtuwc$%q}p_FTdE4(Kw|H>($3nfx@)-^JRYSy>1MCnQi>6) zBWDFZs!_}+EQ=DdEqA<&FVOW}if^IKq}nlTBa%z=U)q0-*7d_)GblR<4z4jBYoMP{ zeQ|y$@}YbxR_fMf(2eVi!xkcbGdOvS{#WSv7m6gUSu25)peUiJ9m7f41QD7! z(d<2aI!LuRwYrS-NwA1pe0KZ?c7FM_YejEAdMtiCz%-LYIyC(RN#IYB{k z&O)s+Xc{H#zaHoN!Ltpd;U*@}^@YLfFt{quW#!Pbq|xT3H`ZVRLj5+Vv4;0zPhZIL zI2Yr=``OD;I}gHeZAh%S3=Y3aGR&Z;<%-|$7d!{m7rzKte1I?s>T)z&eX@pYFy}=k zosXnCcJ?qj9##~!3y2***Js2{`AxJFwJ40k-++7LV^_O8Juw1YT6htv@UM;u*bF64*<9nFRsx1N?_u)uOWF?5>JCUkE0w8{M4B!ihb7-z3*DY9CK*D zBX>TCXU$N8G<-C29-ixTP}-l^<^^)fw)da%90isLInC>pxz&Pn?9W*t>Ms9%yPHOKiN( z2GBfYD*j=ZjMh5vRdjzkOonIuAW5Jv4UezzTK$61tv6>c;vYab$Gu#r#OjTDf$vUy z+hDsig=cNP#J^X_;;XfZ>h{KTUnIGJ$b}_U8}N!-A+e# zbv?rFp&zv+0&i#*pGR5r&+z&2@Ly`P&V%zmDqXHC{a>oh>J-d*W*Q)T?X?17!}kg1 zA}rcFPAv%dCxk_);Io=dtUaohWCikxMr#DK!B8Ti0#qySYVGpsI@Qm&z$5^ZC72^? zgkH}=X{5(1VdGuBK=2RxFVrY{l`D>5`gpDcX05!aOjb5~?xiB@5SB>cFQEUanl5g= zhIC;Bx`QY+Egyizw4CMwj|UIb;g~UgeERLG^BT2<(fcVdP3V7s*b8zHuht4zrnt18_m_rDwTYytU=~{Cxs-E=c@~qa?@>g3b#3%waur`mBbMBS zK*FxG-0(JBq%9~R&XlC7_DI6_yre~;Ux=s4%#yUo@Y8@=j8S^BBba18WQoM6*Kuz{ ziaMWVfxVXA0le29(`!x1TD`YNtBN|(GGhNE z!Y0-57d2wPfzP;QCrrO?K;iiL7~)AE6AIx1+Pn`!CO(uMY>3>*K?hou#2iUsN<*#d zfo+1*om8|697?TswH288J|(}3gPAoC-vn;zeLQKOGkG`4Cd9Vw|47=do~{cFD}qVcqv6p&+;dOIHlAVzcdb^`(;u zMqmaf70`I}?#38a_auy^1D%&0uV^r*4j4h%S8S!yuHbQ9f#DPTGP{Y(1x~W0q^ew0 z$Ka%?c?d&{Ted0K@*3o?F{}dE+?9QS+!ZtI`YzJ-aW#St`oWlfU%^Tf&;!+W;2pF_ zLWfCUKkR6Uo}U35w}r7@*CH#~E{bBKcgOpf`h=>;d!c8-44p|T0UWNHBbMx_%<%Di z6rC-(-*aBSk+=j9{;gMGeqe=qs`WR(&6cx(L4_l~g4}3!U2pbUHNLaSs|axSSJ%CH zU6)74Obxo5F9zA+{%xApvNXBR;9Pg|r z^0hOlbEFj5jp)ZrN@IKdkwnLOEEpIHfuwy_&45g$gT89%A@M(uxXOm_DcE7N=Ow;!#sv8)1-e=m*j`ErD~PbB6DAd?O2g z`@IOy@jrrQY;Q%}D99H;=JT&@N}%7Vu)tiK&8K==u!d{j);3avU{gZjGuYYl~0akwv=2^2XDhFfO7L|kOzg`@Y zHH0imoLVoz&I2&&&_T3|{#sk5V=h(A1YqFFz(5;~mST+7+vp|X>+NP<4WFfA0Lpy{ zp2VFV3?;Ogi`E_EMf4HY#~>0W>|U)D!3K?DZ+Z3h8%-L%YS6aB)j1vH{LelLw+mQ5 z!<|*n5g8YPN|15kQe9zQ0$}f944?M+vY!8ijRih03g9M|Ju)*RYM8P+RJsJDY$S_2|0YEVx#tp8-=C%*g41a~puKNPK zIDoL;K-xv65B9EYYWTevItkx;01xWXUu|IDjxGR_N3J3yuLmR#{o*~4YD_r-wpg37c=%#?aqE3pDdpDTlQpMXD6MsZ~X&xG+#Do+0Bwt1o_mt;cSm8a_kF+lG1Qb!KFD zVfe?g58g%Dal)sMQv@`7N8sqhWzDM?y@+tNUIv1L{_-kj==Ud__e%YawMKs*4#GwL zd-c0|bH9xb(6WOO<=plzBFCJAJ(txV3FUbeSLpnGbbjwc8E$AJ)=nG>?nyq6K&jpX zZo~IJp1lW>^D4eZ{#o1b2XT9L;QwAUmW;xhuc+JHsQQ=4I}pcuXehe9P7muFVI$Z# zRgBl|u8;(1@4DT9HuEY>JsgHwA)iEgp`@qkbTUifpYR_|r~hag{Tx!&&%cngZs*}F z4y?WcBzfF=*($6*II>NJ9XwCp>iTucVQ$^z^t!q8Djq|Rt>bln0m&Cn#zDqGq=^~< zA%ZGilOd_;CMfSGn~!_lX@fxJd9!$QZ4Hvr`84Jxc6A4_TJIq(vcCk{g_;3>ftnL< z64bPY$9~tNfo$*3!t}`;3Pl$N*5*}wqCr|BO>2CT^jw`j9O)_uVI@ZYD*C8D*r8AV znXt{7oq;{k?Jz>q7dTMO^f}=?@iz`l$MccxQm}L;(*KG7*v!qfACo*qln8d-NSXAS zj1;nW*@nXr7uvo-KefU6JsJX3Ox)#6p)k53H~frHq4yrxo&tVaW6())o)@Zf*h9xE z-bX!eq*p<{h+i*S**z1kSlkR{Rn9|&F7?@7enod|rzuj-jR0(9KG5fiQm$+#Z52@l zt>J=asW0}l7>rMY!Nlc0*bk%&u_4%&hJ|%ds0;npMT2MGcoKlwc_q;^X9%C$T#xCb zg`d4X>$ACN4YN>#`h2j){uutP@5dH!;BIWyd^_3*ER+KPdqWK&6}+mcIdObS>2=S! zJh$6j_4E-{;UvHTZdzWS?d~XXB^HP}Vw36!`*iIf(q2?#^x=wnIbu9~#f-Sr`}^8J zCWH=SQ`TxGT3h#EEalWu3~7WF6?&aMvT>alW9bhoW_!HMw-Vsc)#ntP2-->o9oV#G z#@1bW+;Q@0@(~WJ5{`Jz-;sWTH9`tM}kHln#Mf z`F}u0ilV2pIfyf?wFjHK4=qCF23aqcnd4p z`N!K6?A~}LCKzz*!NxFsU}_#N5ird1V0)6R(ygMf+`5NK)Vzj!+9ZwV!a)Km+H;;vdBBTD%rHEky)MKAj|laR(BmRx z(Cea2KR;UNJVVo4D#4yWTcc1oF>Mk`I`p+vDU6>i~LdIV4JNXWAo(rMH$CfL*Qxmxa@Aky>m9w z#FYS++pavI^=$6;0xM5;fwLnZ6H@mtL6BO28@GjIbdVs0j0+!_-!E{$yDWVoCShwM4ebU5F6dXsRGn4C%ZNqt|rOqya!uR8N_4w zhyKEFFAsu6Le_3iR+EWRnDrRbMv3|S8dC!s3j=C4poQJ|R!YPD9|zWOa}Bkhk2%0e zAwgl0g<|F9Av|C^%{dp5IHur@l=7E824DcqxvKRPKWPN}H2hqZAu+ml>^(D?pe8<8-E%5`#CxZtT1U?69jE+N%A@Fu5 zWPlo}MVKoXp1zeagDq7wv+<+_dP+Rm^=Nb#YylBucT|E07<$E{Ngs_S7y>{9GziR( zUk8t$T`$@2IPV8zbc*Lz8BJD!N;ZwukZQ`mJ16c?##%Z6L@uO|B6P7vJqt3_$ z;Y}TL$n+j)6!IbCY@94GsMTIGX*ch_roX7D^N7E((G~F3lQw6))GhZg`e3h(UX*>p zs)3wyWP=#kjd-ys1py1_0Bj?%zeyP^uz1K&b@vuLQ9B^VvYdXy4|K!q!p( zUodnjCJP+j3)luudQ%yo+zZJ2ATq1%-wQS)P$Ig^Y)cR*T)ns%1_1c%nnxb0_U!`# zoR25LLzxHS@0&+-_=D4!r{xb=)K9<@kVNw@tn2IBVy~5suGxDnUEP=G3TmlgXv*T% z<~ClT^&yRg%Yc=^F#}O;IOS|=_yAjfYTy)xXTem0S*TG!Wg?+}9rgqi@!KOjFoOr^I#e=ti$JmlDBx+KvM)ka z|3*&mSL0)pAJr>AqkZvq)fpe`b)Kj)1|(tSOV6kW*ozXN-#tp5%kY4E)MosuVc*GI z;N9?hkXJpNZL?UM_H7{M(6BD2a_4hcdx_7oxNT$on+JgHaD7{hNOu%JaY)`Q4+=KT z4I5C8AA5SnHou`RNe8SfMP)AWfT+0NhWPHE330&MD4T}9#6WzgePog+K;jKaxCKk>Rd|~SGRxAircl^GKw(fn z0|VKDjFvl`wdn49Dah;rTC0y*9*ZCYsmQIn?P*@q5N%_|wY@myBM3M7h*=%jrb+@p z8J)Oic&(yMZF6%b=ruhMas9uBD2!G)D+B*2+MdYQUh;?M3Rq6s( z*8$~K2F{<@o|bpNir@o;8r*SSA3o$`vYM+y4QvVKSwa>NJ8gSjiCF__Qa3f4t|`+x*@tb(#jqOKL*?#!H>T+KSum$r+e&aQd2;*>v|Ef{y6n0!% z_y=03ehz#vDz|Eh3DT>LNKv`99IIm;L|PZ&k0UV8<=~T8AY$>QR?Yn3kMRZlfzZ+t z-LaYyUw(#YAowDT;}FG=8ZCx^RAR)CY$)~CxojMvzKuB2*e^H&5E{PkkVfXvya;kC z#N+MxxR92zD#nSyG{>uPH;#!cz1;hvsP;)h&Ku2b7Rnvg36o92aCn*aLPl47at& z)Pg4DtnaJ8#r*MiF@E*w$2s3?i2q)PK%pq4p7j9(g35Pc6yAU{8TBDrB71k%h4)Oa zfL9AnM}aM@I~F>yjDY!agtpLNHhfP26d)@Hyz7MqG@0{Z3PR9K@nta}6uBd7m%i^o!*BoAV}ai$VC*%hzWN1KZ~?)W zkNx&B;A`d)Is8O?e!zhEdex+3##cek2tbdtiURa^@Kpf%((Ms|Zb!_&{{&w(o<8;t zdyDmOks8Gg{~?|ZjRUe?Pl%^$ZG4>^5o{7KLD1dHmLO6Eks&J_U3}OrE7HTM03MGIvF=cw6C{?q zVq}N0LoW{v)tR?NR@Je|e+=(L99>s@FTj`U>?d)iQi{f0G3!4qI%NIVT@S1hw&vi5 zITZ&_5ChZ(L%6me4*D%#Vo~`H>jBp3WNaP8UrxbH0a9V~JN+#R14jT~*$z^EQ|4rQ z%ct=-tj50F1THT)6(cizV3=@Y;I-kSUPs;kP!zkLLIM;5fRw#KgLa`tol992$1?Xo z0CRLe;Eddw7nO>54Wxsi0GCNIuYB#|)<>~&g^0XN+N<)ME*N@&ZLtY?RR>+A>L(ii z16ZY|qkwFjR0UQlv1}!dmZGn=2aJ>v`qp1Rj;ya*p7}bK>>MDu61hyuNe8GTRgtXQv9pE6jNl6 zV(#tW|0iJ}ND;KffUHwd8vFu$+GoqH;J%lA%iR#Zs72W}Kfr#YQ0r6WDBCoH&t;SX z5Jk|5arsST4@E(Juaum9@;oniR^A*@nC`W=8OxAZv&4m-~!Dd5F`eu4RUfu*9zQ6G>~6DyzzBj@;(Ey>&f&2c{`bQAj= z&T(K=gmdIHIEJZ7SlzIHn12 zye-G}_+a=-McEUvKs5Z|lyEF&`L)mqN%=6#r$@^-cgkaT-#@W@EvQ;O{6Li5>9{{T zdDG8qI%oAKi1YhHDV52~i*l*zloMZ|Dbmyh*n1PU(6E!^)iE-HWik`v)dIlWx^8#E z01Pwa%8R_PwTa@I@<6JUyfA7;K^t4NgL^d&%SiPuGsF>Qy_xV3I{Gm7QM&@x@}yNi+%hQH|sK$C39?F46Jg#e$BA4Tleo`FLYI zSIi&$LYuu#+4Z!IP-+Dk*Q{xn@W}qg0uC58pqmzo;T0D=9 z&JX6qGYm>;NCL8K)u`n#K%f)k!s74L?k@y2JsY91dg%gatop%B7J|bqye1siN~Ic) z66f_|{^Pe8%p)t{k@Q}){;Vo(z5=^h(eeUEh?FUj4ORf`lPfaNGBqN6Ma!dW)iVG$ z85j_t5wc=`d1FQ+_2NQ3O8;?SexV)Ejj88fYpHXBm|&o&HcA#4O3_||;)&tk#it0q zYT#Vu)btZRYP<;TVSSgeJ~Ak~zG+T<%Omww#?@!Ni&u3Dz-IAWUjQ=~4~WnD4VF%7 zfm8sNV-b9(ATx_mi@D?e2@X7Yfi?O{KRD3hLbH6_H?dJ|dyOh;coXw<2zM0kQM_UZ z&as%KZh%~hzCr}PLwteck|crC^G6N`T|;=74AmiqTz!BaXy@lI?^2>_`^>*}F~Mf}nD ztETjA-Ld|bKrfg28`e3Mg*K}{myXO6kd`8~`ZG!=QGDTg*U!;^I%*6#!ZU-ujG08V zK-&zt7uh+rqe>fRQ$D%gk}vV}hSNT^ZI4ZFQ_&qR#DRtO&B=#QV;xNx?Hede2DTRj z_VV;D04XveLfXf9BB!7=eV_*^Mo#i5#r(>pB3=EMBBCYc0PEBDhVOeeh2tyI5024z z3==D0o_SqFz#RK4Jt}|y6fY6-To8H277;KF|LcU7H|~tBJVw4G*_DGNBj;)C5Z2qC z7_(so$LV3Apo#j~0EcH{_+XqJP$yLiyVQ59NvAwDWYGNXNXOWF1R7W;;W0Yj z(0}0&p;q-o4r0P!1ifB~lTvJ<6ZfXrj||ZLLR+agGgSuniD)0Z5;F?>IKT{KXP=#? z=i2P<8{ot41ol;k0?fM;$K_k%n0Y3U z>(?U@AJM!&>;dMU%|~?CxDwU7s0VGweC#f;d%K#s3hjTWPO#fwX75x1kRFAB&2`!j z)c(osXX^G}Je}j`skPoIAFcf+e|GybSL*SzeVP+sdJ%6Se2G1wFzIV$+d%3d)x;Yo zPMRYxlO6xQJ^t#!b?osK&liu$9>3iTVJO&|C)ndZaw5<^-X4GDe`1gS$qPrZ$A8~B zCi{JR{6~-t!g^ha(zeGxwEVxc$G`Vh4DA00_V~w#MWjJQaj*@DHC3=~SFf$Xf=$Ds zquJvZT=C!9<5#Uk)p7RtSNA_Qd;C=c>bJ+AE$M$?kALG546}|se#ML2hx`xOxW({>RCi?h0@<% zKt3nyiY_1*{pai(&akq8MEN()yD39|pl)E#1_t&O;IhEqTR&zW_>=kfXtw{M+R}ye z0C`H})0h*)pC}~8NT=p=BAw!{*+po3a$Z6n^@&SUZ*_YTf6y9m@-pzTm`gb4QTwQS4Z74~XHLjFm9fe1(brAGth6 zO;tADibI@b(1R5Pe&nXT!3I@!Hk6iU= zd$c=dD4Wz-$udi#LYabkZ3`5wj}2*K8b^On(;g}f2+Esoq7@4Cy3}i^8y0BJ_{^!krlhb05?No_fef(E;cc=|JXOevH!3u zx&mfOR!i_i**DlmCN-+6O53v>MkVS3bjh+eO^*DrNzMA+Ufja5_9->05?6e%eTCk} zT@@W`bfH_fFJR3Dx5}CQBlt>;eT?0|_u6U$ne#v<)+qGGE?JDnsC-B`&1|RbM`qwx z9Y0^7h;+k0hhw;uz@`8Q7kHewpv9>D$dh~zd?DV7aJ|L8RXuwKbTZt*VuHkxJ;o!H zjlBt~v1Vg;ruUJt_98W^VzssxX>647YWj%1NaNyM+jTTg<`TPPi>imHy-5BLEK>%T zsRmLIj={;=dtO_Ge4`6m-yUMA==fpA=-)qBC|EX_vZ3TA6NIWBoi2oXyqq_2XE*^q zBYIca*}jxAZX=ns%qm*1zCa&-U+{ek}UrYn_Yk!u86V=b^F7yyke1hi-Dy4mElGi zm^z#)za_L%qk3Wus-I;PCG986;Q45jWuQZ38Amw(U>VN&N#0<55U#PAil;Bu*4AEq z9ZayOI!#gKbI=C1ED$)cWzoB*c(4CpqYPS2$vIBK&XA}O_!=c!>G4R^N(8facfyA)eAS^{=i<)ymlx5IHAJkAJ~AQ%39@uskEw^ z9cRUMI()yZ!9w+=7`)~mb~79w>30V(Fp+<>-5uc{dUM{U6)I|uiZmTWjMSd}TJw)X zq`f2afYAH!6w!xps3n`V)}U96ahv!iKlBC5(vR2({Klz?^~H^Kl$S18;s71YxqnwY z|Iq!rH&vAA>Ng17){W?bE<^62&pTj`){1@@&D9I@M4t#VPeROU3XP$Om}=IgjfXSi)TsLeSKJX6o3RY4-WtMq86I z5Pjepw_=11M(j(@KpOM{9nd==J5U-G3K`^2dkO*v;RKk0bGqETt1xMQ*)Nl3YB0;BVJB?(crG9sE?QT^ z9Nn=3!h|_9m#Hr83q2QdrQyVeChHGx)6_hEr$jc6b#c~kJ(X0aX+;gEaxkVc)?8il zMT!h1oiLdrgy)jq&`Ris5RxEC)H}Z~>-n`x@m=*kz8-pvv-c~i-`S#KWauHt(DY|S zY_v~m>9c^Q&Sg_#0?3nEhi>8Pa#8veIfXFTo7dLE-crOz1kr}eTs?xGw$Y7DTx-6z0`<#>RYFge4| z3&I3{_N!O1npxk<5|FTcfx;B-5Ln~1ybeBLL5!j0s`U;&^g!B+}lW569-0hYNv5Dm{rO!rMEh0{nKa)6+D*U<*0UOwl0rGFM!E2-#=S3)!MouX z2fjCu>IlB}%?uIye%g~cau(#-6Un5{0Aj+cC>n}~Rkx!GN*%W4R%;k~r27#kN2yMW zIbx30DC5>QcEm&M5$8$d0`AaGM177u|0|b5e!2@vH>*3x81eVjz!4jNq5t~q`K3ZR zARZ<97Tfm8?3dVA&1YjP(S1aj8R_H~-6~O>K8CokJT#p+MCt7ox6CH)H1J%WlXEZ}kUyKHlP^t%u=%clCG zDQi=NjyRR(mp1(-_yhG{py@Xo!~X++pr=ux^waSN%10;S=(i8rw{DKKtNIL#@dvsR z2it(D;pee*J^n!ZvDu3H17(7=tT&Jo{36aD$iRmfyN==1Kt=t5cAy01U$w5G*5|Cm zuj>1@%`Y5(pa&X7`Gt-p5Y^{AAIC3Nc03Bd*rR@ca!G>4#Pf$Em6|`m--q6X5%!Q= zT-V>{Y0<|ZE%MeWPsJ>wYeW8s0w(Hzjj{i_tbL=l0c z6ebxy(kTQs$GBYE?$k#I{tY=N!5#tjys(LYb^k!&=irZZET+}XLv22;<)yIt+t?Tb z-@l(BQzm1+7Bi%#4~$M(QQVXPM6>CJ_`- zx~xBzNrSNcp-h@HW3nx%Q3nRfq{-Hb8r7&>@ny&Tj$QHHGR!K(%i$htLeyv{(XOr7 z1MVMdxlOr7qEbB%sqxt6k$lvJ21Wgp^@{^IL!) zMF{VA{AFf-X78^Y|AVgwL?`e&0_2bUWhQT_JAJ?7e;~WM6VJD&Z?U@h>tmTd$jW6h zJJ?^v`pfjX0@J7c5H_;oi96okqpYL&%Oq1ccj)UV4m@a*JK@{VB>ZItL0lpHHNT77 z-)euhx~wkiQyc6vKoL|m4eu{t*LcV@ZV%{pUuRoOy|3-cmg-o8>pkx8#cXJG*q1MmmbS8?HK$Y3;sTc_MCI&Rl{2 z3-Nw(mAnsHZcG}0;>fw>zO(k3#_5%#j6KVkVS!{A{3Q}kUAoU$Fh6;eF=){~W61nb z#+8Weukl6qMz}u;{48f?vCaPpm9R9g0RcUsg(3nVb3Qu6bHqMiXp)$M zza7_pA<$U0&$wnKhSlyvdGG$E@$hNDEW^*;!an0_LTkQCk)lH?El3+c@=~;fPUcMf ztBoadkzA{`ehgs~UY*FH+s6c;sdhtkQ!DU%@+kd`?b4v-1i3N!6ObdvjwFDcphlAx zz+DY+XD();UQ%fAmm2)nFoR5iRf@7|?#mjF;bEV%Ck=Rf91az@HF$#n2^YB7Ik+x7 zq4OC}Ev%`MlNv2gp#i&}?|rTjgiTiH=a_!BMO&5*W*HfO7mR-hsKg%sM;t%0$@ul? zHbTy>GrAu!x}P|@C00lDP4@%6&qD7t)jf@>3IlhztbBY|%iJ;aEcfF;pRTVphG(2M z*@ltx9}?YwH4f2TPJ99aeetZDm|tl;T*?i-h%iAgGL6FsXANRYZL$6{p&%j6tBFpU zNaZh{L5f^=kQ=124~mT!ZvhNSE?LeGQOqOnOlFtHq&D z*#}Y|??JPvPnv}F`MW@$4Sy~CK^iZHcdY-LWe-6n7_%~MhjHY&}wG6 zSF#NLhBUqs6tIBo6!bl00odt6i}WQcnUqepOQS-RW(kbsAW9t~-Gr^FplwYzYVHdf zn!ZO-22@nt7CfN+3gH31aXRg5q-n~^fws@ON!oJwH?foBd2hMKN_MtFKgW#6V^eZm zkM^NQKMN(Z&|^|)@Hcu~*c`Fn7LFnna{9qi!8$pINhaaq3_9yX!(Ym6J+4u#pBK#m% z-v2CqaBwNRTbCc~Lwb}S?8Muj%@6jTc1-->*XNFzA54Ig2T)D(gI3bzM1D{m{v&?S zOILDi{NNK*cWnIN9%)$fg9-XMhJNbsgOQTu&*ukkJ{!*us#3uZl3|2PC8*60!bsEn zpc}M#N8txAEs64jf9vO%@f-s`m?(w*m>=|VdZYQlGyjhAgHE05(YUEe;HBS$^AtL`^AI!OfxuvR~X02=UqN^SOfh{xVF9Wgu@zs zkrfmRf2x+ou`**dzS{lXVqyx@fuZsj&uRMnNz3WOu_TI|zFn4TWTKdVjV$BtVNyJ` z-D&s*Gl&WO%MN!BFdd1iMYSBolsxkl z1_J9S06Cbg_`qQ(%8sql?S#}SxzCvt_*#{hmSzpzgPuuiA7Byl?t!h5h z6{uE?7HSS40e6Eri;-GU${p@$Z-SN>a5o}{|I_)V>9Hv@e6QE%X~&^hROH|D20ksr zrx^YCG11qOrHS;FU;an*HFUxM6Mg+QpT$$#t-x#YpV8OS zj5_qSf9T3_BcZr4=j{A&M$HoV>nG4x?nQ>{nCPo7I3&g`5_4+DZ!6>JYo5Fxg}zdy z=+WqFlCDbjwbS(T@6p%2lI4GpzV?Np^nOG?$MokI=xdb}s%M`aM_+xPjHj=0O@zK) z3B}RZO-R-Bwc_)cH+&e$~3hdH^q@sfPZ zjg`}Svs0YD3wvTuUu<~BnStfz z{9i9LvzD7(mzxt0roY(OHQ{u*PEKqkYE7eXfs6?D; z_+YB_Cyx((hKJ-)Q7Ev=>^k4PWxilh*Ki(UO6pSzJSBN9DxhLX{5k;MGIw(3`Gm?z|HF`&6@4z{2h&S z;bNHl&rix)&B85pdE&oQq|k<^Ljq_Ors2Ss)r4nZ*H!%jON#=_3qc@7SqqBrapFM% z>D>t^gY(tEg8PFL7YLqttt8!NwkQ|n<`T<|fC*Frrc1vgoiLf5ROsNhj9u3>a&`4A zy{;BN2a8MTNMHdl4t)W}A)+Q~teyx7wq9JqQ05;%bqB zvhYI8eb=z}*9M;P-d~eE*$DFG->kW+ugb)n`WeozNTY<&KTsk_)|+ptrn0 zD_(Y(ys$hTFMpTbj>f-kub0@SX<{n`-;T6KIv}0(uaC}{^C)yyJuf0} zPdb}?G&&={BD@dCg*5T|NrL$g*W0e)`v3$po?v+^@JZGYe-=+u}}y z5L{ZF38NyMH+9md>ro4<;`6v;!Xj3R>Bcz&bg*+G+pXEr?bZUb*YdGg@ny4XHiT_R z^+)O-yA$@q`g{ueU3P-u4zm;cLYMg0HcDU4r2Y_LN3>w_;!}`x>YT-d*s17Q44ks! zdRTPJW`RNy)|g0Nd#$|h6ja^cWeY{R{&%0p;c3Gg8O04@cAwIGQW9`b%rwtLa~5F$ z>;?KFP#DG#E^vK;ZHpNwNKs?p7~`*mVB@~{qZ3`logl-=5sDn2U5zsm=M_8hA>3~k zq*^@QQDYI5#DOp7M~)N|!NMte^jkJioE|?!Ghq_$JHE~o{>7fcTvy!utXGG3CeDwx zRl(foUP#P>cx2%OxuqwD{~rW}e;1B2FBOOo9`6ty;er%`Nh(oSS<>%&DbzVo5G}#g z?hYS9_=8l4kQNc3BnX#e&DBS01yQM#sfS`*-w2i>AV*FC+E6Z3FZLlkq#yz5LyF>? zwaP))PwboNOj7$S`|V zk6lt7P-mdS`m`%ze+mkNPcFk+;4~>k%>z9`xbQRvig*#*MV$_u4W{~67bk~Z?Kzq7 zm+FnN^nBcD`s;Z96JOsy5Scu#zHczq3H5blecwM8sV}-1pk}e>poP>xbK*`?R}5d$ z@mkPRi1uYK<6ChSG5Zk-;}SWLHT->``7tLhVrl0PDDQggwRjE`Y`3BH)j0S$0*v;< zEAJ6xQs<(R{Q^J3`Ns@Y>wJ0P#`xk=r~lXrR%f(Mpd<5k^$q-}V7Ot5NzL{6$m^RJ zQNk#ji2P>Pg@s9r;4J)5h45;`o5=Z<`zdoNbQyP**@G6F2I)`OeKGpOe|Gu>mXAXU9;$|dz;WvWei%@uvN-$+$a9<7b#YOTt2B?CH%SK!zdks+3(W^Q<{_ie%6$=js^5y>JI-f14h4VRQSlC;(_sp>pgK08 z)DL(s%Lab=9(6!1@xlgg2b6GMVjE)$lm@kP^3!4d%qw5LAONbNKHy<_8Ec#~9W^ql zvf7J6=-Vw{AE}iavB(dO89(V}a1{I;_`CRdUTQ3U(mqZ-4a4`N;O8T|Tj{%ZqbS;I zOALyBg6~ljmAHfv6rF2bi+Rv^2M`Qs?BHn_5s@{PT!0KVo<48H{PH zTrgiidiI)Fd?hDE$hcsOXMP?L%S^$wvMMRHPX|Y+7Z_XY3iehB7*vp15{eZzk@N@Japz;Fx0 z?q+C`|9}?`7QQ8n1OX*9KbC$-C#u^>KUH7!&YKOsIEjr0Ho!bDAAH>h^h94uHX(|2 zq$ivCd1!N)%>K13l=`#1=ml_SE*$a_h4E~@2_dao2-Si`P`gHdQWV3bv9^|-yIOR|SA z8O~lXKlWR7ZiyY2UT>-xXD41AJ5IcK>!kLmw+3+;O~@PAG|UR05IMgg|F`eckTC7y z-~0t{)qo(BkBAV>)zv9bmxDR@`U6`-GjRPRO{Sl?$_Wr@__Te`=;1|yF^DD#_v@m- z@buE*=I3TOmjnZGIXBb(?P33B^EW>*IyamPF-Ecs;%_+j8vf)5O6UaJJkY1Vc+G$k z+XegQgOD2sb91q_HxBp7C+(GvG_%yG(^GKAs2S*!rjBo#tRFK~DjrSmxHOPOpB~zt z9bIbxIsO20UaMoZoqpw4NX5hF`4fJih?(#Bw9@(E@T5UaBWI4 z{3-jObU`M(ZfCJCp0f&J^ot;98<_6^%Cy@z2iZtl!S$>6t^%9?DiLUx3R1MtZLh8^cp>EDDZ6Jc=51)0yHf41R+eY)t zddHPgcU=8O9;V6b+AzRFCyPZMNTN_8N&pulN4uXi$|%8}!gj`Mlo98U%#Ie{o#*`l z+Po>~E*nPFOFl)SUXm7NLh5h7$pMVoDgl9yg1#WqjNwN}VO(*aPyhDqbbvbr?>3yZ z>lWgKmSn2w=|qnE{T5vQqTk1354BM>&(eTxM!;UbGuc(x1ox8Fs_&OL12%jsxkd+> zp95EaJ>MC%QAVa4*QJgLUE+Z(*B=?4H61naExP51+Us*86TA+hJOcf2Ud>?NRA`!{ zU`2N(U~QfEAwtnYqBZ=_3M?B!m-21J8-GI#D11F*Z3_%khx!n>cuR5{6eAA0c(kpO zN{LqVl9YOhr5ffAenJilKn@EIDXN$SEXog#?yoYZ!Q3!-enx&^2Zp}`#szg_sK%hX z>?^Yno(9m`r21Cb!E+ZI{(%5S^%_|R&0r@Bo}aaIN@Zknhu3C!6xn?piBD#5a0<3L z2w%Pjx4o0O#C2D%2O6$Dk=>CalTE#KLP$Mu@72XEB#Se?yg@}%M{pOtjOw1iZ@4pu zGw(kk*%ep-fn;^bao`S!r%eCSU~bx_!TilYzlKr?K_#P$nLoyx(ECMMXVQv-T_k$7 zc=qqc;IejQRTj#1!qYb4)!`Sx{6!$laoI&dL>Abs);ue;FX2>7%I6@CqQH>|{dX5M zHGKK}h7NyVC6n^~JNfQi+K6dA7TGupb6=|QF$1gu>|<0fjk5G3r34f~*?7-cyHO#U zksV1iM%kOlPA5^r51$*L!6hjOwF?RX3YjAp7xrqDVLW;Uz#pMIl4Edq>VG=^XYBDK zdI|Q5_W1V~1xvvHYSm5M?D6m9H;!NF@pp(F|HA0_Uy*zmKLXO!s!`d|@!!fX4i~9! z{QLFzJLvHbLv}KEedRbAyo_Ihq8x4f5_$!Uyn`9+F{hCr_$JlhAl*1UcM`~@rU?uK zq{P)0*&$I>dZ0myX8-b6$$p`oJ-zx|O*b(;Zxi)-2J&lqNDK~+i^xHmalYeHPl(;p zXQ%RxL2){JV>%z<1@qE7XCD38;9GJ}TzPChrs};NLsW4)0z>dx9T3&&Pb{SC?=L}n zCCb@rr(C-yp+sW(c>-E;=sU-1z*TOCv&ua)ma7~uM(=Geawg3#=q1Aa8uVB3`ERY0 zKaKhC6&$wX4SbtFC!Cq0?7{0DZMaYyBbuR3iv3~0$!$|@W^u-BX77f!6CfgUW=hKv0 zs27-%3f2yx|5{8VL%;%?#-*8X+ZxVmc874AI9m0%j972@mb#hg!HnT*!VjRDB*tMJ zV)))gqhuig)G-rL(0>Feh43Hu3x2KYH#8xi$ZwLhCRQ~BM)C|l1y zco6_BCh{0^lJ4$oMmv_0Q;8)IkI|Pw0JBsRRuh}@qY=nMQUrg&Evqcv*5dF<@97yp z5Fa61g-az7-hr@B$2*u&Wa+1d6Ew8i)5#1r5IEb2X9gOuUl*bKUxQ^a+)=AS9VstL zJ@p2g$3k2;tiBo4vy45Vo_6|suZ24i^nFB>7y(A(t8_ZjV?qpwibWeU80ldgiSn@_PFyMH)xNP@_`P_rVKKQmMIh_jgbYIHs$GRMqn;1z z%%*u(%xpFT-X+dvXHdpUNqm)?tG7qpd% zwJzKAmZZ8SjLoVl3f!2HR&A8)#Dz&_?;)wHm7@=Mj>#jGdo)Ph#hdX}^FzodL9t?Y}W~Ek4y5!!1i?3~Mcl z*CIgdQ73mpWNHALE?MVtdGI1?G3W|>Kd_0SK!m{W{Egs$5Y&ia?NU2Wj}|;4@?9q8 zs8BLFg{|}O>fm`Wr-_V*^Rbz_i#d1K9TIdXV2yfC{vzu{{J1Lcz0SBE3+r(u%+0Nv zqjPf|p7pK3!OMnQ*RvKdHp4$k`YSlac_3b8X}r>hA0N$$;_4NGe+dlphchC$TJlyR zc?l(KS9xIcppdd(At>0yah+SU$WBPIw%|`W4gvt`RP3om=~E4~M;YH~q*{mMx;pSz zcb*o7eksS0Fm3kiUJ{e->Uy$aweq;^RR{=hjz9ywK;$oYE(UXZ2$>ku9z!oUDLn$W zXJk9;H7JDW02*1Tx;wRC%{vnd3uV*eoV5ImT*OI})IF+^PA!B83tGwbKuBKBlWRN7 ze13+h1{|P-WZ$ELOA!tKRe%P3g-JU-u*PK`}hYX`!^^s!WG5s$?R zxpE=gU7qAgEfTK5FOXnyK65F6Ug$j)IFQRHEF?v;kXTuG)$+yF2Oa(~oFv%vuDbYo z7I5PC@U^AjOad?2vdE^xw*hZQo{EgkdItg`_QSZZ_g5!@n2Pr>7=NdfI|lX#x|MiBWym z&|!R4>h*_ES0yr-!Lx^L905)Q53=_J<$+n?i^&Z&oeTtPvYvKoLM{J@)&gd9J?klv zdWey@inU*6lt8ZM2Vjihe@{<`&D*S(@mhrV71+&o)cIqO&KGppAv_HGqevK=RpO5+ zneQVF9IArYHd;$W`eppz*c2Xmu1m`l`S>>vm2^7aGs8ydcw>?Ia9_Ti+$kzZp& z(Le~XSAX1rGKC#>h``p>j66j~YWPZOqI|&VuftPt&WHL9-vg)~f`thQGsosEsa!wD z$dZYN68+%IDCGnGX>LoY22s^YDBooB3HmC?i{@0FkuSN`W2gZkPbg8lH)wu4hOam! z532_|LsZ7^8h)9-nQED$Cbeqthr(cGd;IZ!B7z5XqfjcuQZ?mNa#w`#g)mCMID4eV zke3Beh_yipu?LIgN-@=@56c*S%Kaf%I*4PJ+VerQl>uml?5WukHim#@-9T92;9$xN zb{Ym~_zp@F(v>CZlTHy)zr^re6M>^&5l9%=Z|fm~PjNzY5(pMju!Ya%*E@6%U=$cT zKmnq9u`8+u-|9i3C&>tuvPL~rGms!dCfpEJCp0u5H-@G}zSn;tHgJ3Y4?baguQy;< z;7!jH=F~x*>?IP(eqLOI`VXbYf;9+aDqsn2sYK)tUPg^_M)Ed*5$t z2YoG3H?89w97rnuLIBT+Kk;xAAc&_TG7})+gQ`O&idkp={RnJmDM$%v9yy2EfR4|Ra)w@ zm7k40&sgu+#kjBXw9~x=2Hkdu-3FNp;2kPq*KasQMjf~gU##_*yhL4r!v&=I!&r3G zoe1G4Go~_j+4JSzu#S^;CR(?s_o<@_tXnHK4$#A>EhpL>=q&b}OLI4yV~Q38Y}5K? zpYE06AIknk0ofO?lFOQnEV1zg;`DD5cT#s$6ucoNKX^f$LAD98= zsCfpg`FdYc6u87R9(@nAn&&;Q6K)S=eCWVuW3S8$wyw=syBQc8!KXa$1F1=c!Fy6> z!RNq5?t;05uwdk`ROw0!Bz*M^1Fw+Gu<>Zd?X1SfU>}k!wxNMO;IqR}z94v6Mgaow zG6E<9zhj5JNwwd`nhalWe1{%5CC^*i%y_bLYFj_ra~U7yncmI6HCb7fXXarfY1sEB zdzYr*HEVxXW$2oh5Yu$z0GTjRFIVZv0 zpOiV%0fP!2%?3-ZnR&dx0|^90o(PC>+#*B;aRJ4V2+>4>b~Gr8D2h4`D1-af4XCVkH`3Dv zadgyq-NzYs9k)>gO#%UeJE9_r3hwpTBDeu=unfE*YbH4MP^Y_ew{G3KH8eE&!!Q@A3#uiKp*6aDvt_>=;J+?)q1LZWMMGvC2c6QO#A72t;jVIN za*u0RDk?fI=7DHgdLOsXh)8(R)#fQz?h49T{@7AGsKeyd)v2MS0yE7iwV+P=#lu9%K%uCd< z_JEguSml8gIBiJ<^HUkGsW7`T>Qlw=j(1}H`Eo9d&0rr+_CU(43xr`vlpBdI3wFv> zZAjIaO&s~*58&64?(lp$3zU^)j@6#1M(!m>f>q78!}Pmn%O6|JUPRvd{TqxkJa%Dt zP=QxpFTYcf1u`bt0!R?y60?zhTFXI+ET71ev4vParN-pt{^?Z7;(Qubh+P?&D&AjLI<2jOp@jWWP zw;12fZTs;WKyv#rVJrRk7}UykO1ak^RG>)?pg?J)#x^%)a86UG&l!B)uT^yuAoWZ6 zf0-9QEw9l{rGs{U zXK1tyUc2Uw=T#LanGQ^l)?CZyYs+m(pNqmnbPPI==6)^g#s5SrvgTRu zg>=mCs%3PXx~}9(&>=ds5yjJw4Hx>~WcNqVgZYDlvu74gvA}tWVj26$PM5tg2F`R; zvCNM~_7?*WF^%hzD`e$<$u`EV+`mxI7qZYI(^MqC%j_@sC-za}qppwjkM<8slp zKoBp2GTAzDl133{1EthXmnr=0xD)E%a;<|6SZvG|>_i8)%z_>0z&eN$2O}d-fZL}n z+{Y=0#9s+d|??On8{3nPe*0ZJ*W#IK)kGBtdr?yGW@E<|Agrd z?DAGlSbX2F5FG0m0~ldp{=X@Wz0@%gFJ2%UPq*lPuzR>ReEAOwNBM}Z@OTek<5RW}mQOFt7Wd*)C`49? zzlli~d^;7yiuhX?so#@zDE65x1fv%}M=T8);n=CYY;F*W!*u0($xry}SMiU?`-KJm zN@XK)VV5EYEK}zEMmB5?pa0a&TU#b3?-}Q<-z5OeU}*Ad{>4-a@Oe2~>DA`_tlU4D zOus!fhNg~1Lp=&oeS_^wyI03(9L&{r?k`xCqx6oWv~s$n%l%+YPHx!dYC93s4q_fzYg@% z)faSA1y)K1&QZ=^Puda0o}o=e_6pWB&1gJR?Z=U}ABjic6QT&`v>23+O)cT5YC_KT zOm=27-;)7EUXD#EDTqFz^RG^6_u$s!=Ki}UWbPx^!@xJbsPq0L(wKSwlCR9XS1KSc zaV|ZP9-y)keJh7wXg?)-vEXYISz-1NGO(DH?FqSH;~yz?R9~q}jl<%i&Ju*uWj)(7 z_rTf29tOdLcZZhfK$wq6P=XAXHj<0Sa;ortwi~NJ~6u zsj8iS2t_mXmHuss_$)GV8d5)rV8X=ooEiAduEMD#<_-J+1zjVJ@AP1caD}6h=Epld zjt~)r*fOF`)MwUE0Yujh)wOGtH(Y z_9e|9#6RNCSNZr7U2f$%C78)mXN!Yov$v)K3B^+1E_Zmifvq+lA{~T0?gDx(QCQQ< zpwAN1Vv`e>knG3!C(GZMj}k|BCz6qwj~a#G*6+0rY?#En`Pf5X>3V`5?pd5q4~g|m zdPWcBWD0KwbNjniy1`R$$0)i;>yY6$D}@MMRcqSu=#WZVRu8{lU)$Uc^ZNIK){*}83i=0snTYlzXdVb& zgc%3>rGJs0+2}nk~AS;tMqTWl#{yF~I*DWM=Tch>r}>bmT+YTgu-& z{NG7JO=?(qO=>9iH<7`agCR!GsCG48pdD-n2v2~A2}I2 zctmb!hE=TR8HwnY&P$||c@j+qf%$uN%Z5J?Rk+pMVH5WvQKUw+bNbnUz9(SMX*H9z zK=hvK*d;2z!+GFE-w?jEw*T@Pjw*}8V;Qw5J%u=fa?OTCdyYuS)ESG5Q|;+>vbN81F~m+_zvrs`YNdpfhbYZt#X zKuc5aYKE8CCEHYbPVRWp?`H8CPK_2hBF5_rIZVgMiQ82BaH^Y5*2QpGaME0y8Vc&# zMfOret`z)1V^;_>mWf(Lz39v7SM)snB0K-#_s^M+>w@{9 zbaC!{)Z#+ke>skFLfXA$5e=vv%hkx7N%5}_LtOb&mXX6JK5~}ycQ2h{s!%cdQu>u~ zbFlB1m-=UkZlUw7X8oZ1t(+aveQtfAlLv`k+C>nr?QT-agZz3Wm(=#zkQK2)398NFxf6o^0+ zr?JPlMx-SH2OHdGQF_ z7l$D)k)ooL(?Fy>SP>9~c!b#CgtNk^V{)#si)z{6T4m)_2Th)OphVf0CC+dqo~1+` z)1;y1C5%#Ss)uTGf9AJngsy$Ywm7pC=AQLZJ-U1T&eXo;k)3b0 zzFUe_k$aUVt`7Fe&z_Ngj+47zZUZlvr*dtaUgBYCH&=Fj(c|l-S}W#vjxxtlwvdA0^t1Ai~pezcB@Axdi3^=|1~6Q z=`;tP95rX)$!jxt@Gi)K=e31*X9iwvYFKc-leF;kd}oUM&f2XZGPG8+v%(Y&s#uJv zUR>Uz%C&nPodefucAtK2=l(iM(v~~;INaLTrXV>pwl&wrQ(7UXjg#`*00A6#C_-f$ z7Vx_aBAQ8rcx7+J@;aAOzU+ZVu^Fk*>3lKHlH>_tn|A)%E&9E`>-Sp_b54`z0zK2z zC~Ycd4mYlq!7B9lZB)#gL-D}K@~42l7HJhPej&wkRrXdiQrQP;Inmd7dXEB5U;l{Q z96k*FO?Gg~vv9cdFI;S{E*l58p=Wvae2ab%(C)RFR(_{j}{KYoI*TkyXDtQC`*W^gNMYmR_Fz z%F@djutL(5yWOpVTGy6=^ZV0f5>h)Ycvi-f?N8!T7G7JGf6>c%ZPruAs{BJJOuuv1 zQ&M(K!TOxcN8WncRXb+qR$|fQ&F%4&4(7wHr|89ihTN4>56lI40n^<8#2S z@;9=v2=;BtCfpjiUMpnQNaWzm8l3WHyP^;bX?dc;(hu};hF0+s*K>p^^DVS7P-(;R zGwcP^pBY15oXZW=Ldv-FmBD(x^7}UDEA)g#WQtr*_$?Dle2UD8%5n?Dov0AXmASVk zD!cJpPgHivt_L>)Iam2r?SuK}3vS>ye`%@X2qrHxd^t^N5?b+(1G5?VW$Ec0SEDmE zC{yb1t7T-~gUPvpEna5c<9y`JdoKlG=e-4{oijo2_@_|X=?}jt{l+Y|ef~3*t@KOm zDJ_bze0Y_d<&|igfx&d)?bcZS6FWL0bu>TC&RJO5j?9a*m#Rm@b{1}8IpzEV03NK< z2dR;}F5&~hH|x|b@t*H1wTVQ#hKBuvAu?9e1^Kn2ueG&6T(vZBB@LpyUA_MZ*6t?t z)A8bW!!!ifsDfU6S83xt9ii?Jyu=MUzmAi&()*zPTvy-TlggSeR^^nr$(0c$PWZCA zk#NTIw3Hc(tB45K`?Z2)%w~+Mu^lxs4khBy;!md-bU*7UrTf3ACML$NN!ZC+BX~I< z8Jc=9TUrn=PEL?Ti&`s69K^ZsA>9<~ezzfI1&>TdXolVvJ{c4eC! zlzGdQnM@hdl)pE*wDC5r)PGnjjASFg$;|So=ii4^3)Y$V<+gBS>($HqH1^0h4|$g< zI63YujxO`N0aTcLKqx78;Tb}iDj$L8Q-$k>+y}@flvA~sWhmWTsri)hkGEW<#Q%{J z!cu}(_RejkG`E#EKeO!M>MdIN1~C_)=}}i|B&D#P2wX714oinVrLP@!KrYj?w2s(| z_sjy8gYCDot0daRucr;=6FCF)>Sf;?=uFt7t%Hc^;?Tnw%=P_^4Bl448$$@uyjEjX|3)04TjlPIGpKf z(7sr^_i#0e{r9D?oZXtkr3iG9EGi`zUwF8$f1`40%LbnN*be27k};gV=i%X#M>BXB z{=6+X&{kHS{K^8GR-OZJyaQN5S_Th?XhFq8Oz?0B2p9bo{0`Lenso-$4wR-cS4 z$m6Y*(knF~-zLZwnJx#QUZNb>wV6ZEuWzz4y$h*GoUb22;)n<6p`Y<9a|k-n&Tqo7 z=k!NIT=dK0ZgW$ByZ5Q!#g7omJApo0tMuwj_FpAC@wQ;_ca*W&O_}ToWJhQDtxSq? zfvo-&*gt}}E~Tm5Gwjo1M-W-^hl&0547+I=Zb!~uy{BpSk;QyU#kxxED#4+R3ubrr z!8x`IieUHJPG6~f;`LyEzVoomId*=K5ApY~=h!#t2E~i-PHRq&)pP7R^06DGPj~I6 zh7CxK?1%GbDmJ?(JFeXJ;!f@$Bexsz}HE?g|7=92=EnoIu}>>zW>{}ivD?Pc=GB` zr9XMNI>PppYbTN8a&fidtN((q@`04nrvRr>STi=YvNX+wCa5eOCF+> z95od0q>lc=dk4?8*-v9r7{=8R+pE@G|8T2(k8piT>8f=8=^gP8XNLTXp$DrcI{xG( zo@HA7tY5CBdj`zbWIW3&upg;QLNU0dTn@5b|b^=chUbpckrv)5v)+1H8bEMZEbYf9%W6&!9ize^E^|m)*Sh z0uU+;^}+YF5(lAHKlq#d&Kw{mz5=TMGyjPEmhnu~5;(ab90LBg#X0DNVkJ8B(!Uk_ zJK2Fp_ms;B)*h14LVMX(AJ0sKbUnLlqP^1lSv#GW98t(op3S;*9zJ<@U|60UV=qtlrNB+*@sqddfDoJr(qHAazk0 zYqKsjcAy;9CWj0Zj=(9((9o2gnHlMfx*`+$Hp?S(j3N_Sm!w{B+}^>i%EZl-_8$@k z8Q@3oZSi=`(-u;SY?&%J(UxPB^C?RTZ?3e(&(MZ*@0ZxR;%E{%QcsLIZ27&zkgyEu zv(M`;Yh$(pvNJ%WXh2sS9js7tNsa6+<@Rx#wRP}Ha9<{{53{)Mr;sz_$@K3K2l{!c zY!&|;p@V+s%&_1me1-+xl=mLfv%b=ZcwZ_+)PAe zlS!${wyjI$L;rk=IeiH_zy2Ltu9R|F^4%Ka-`hcyGq5(JaqD(ICEU7woS*sY_Hz_P z>CnHj)m?|;loh(q(!o_v+Ojdq=F-6+i|+xyf$!!Owpv}b2`ic$jQ@%rraB-U0kSQ6 z=;5|^t6`r1B|Y?VpdX=18w}d@m`4x){+AuiRN>B!Z}nG3{kWtVxSF3TUh3Y{uqimxsvfS+dW;b=f8G+UGcW9`^!(6x>Pm97f2X>>tU+ebKlJX^W{6Eo zJVhbDg$%1dNC*5c*he}2m{1Kb&PDT061zm!d2ABecjCz(sPq@QGKc&Jx6B_ymVdeA z=Sc2a=}zF@IGB$Nt|zkL)b&p{@^IaQQnp_KTCaQ47Tt-W+eT|o2Q&>2-#S|7Qo^D2 zQGVv5^%J(N(x*qV)g4-AP&UIq(SQ8S$`dm36Xj2$FP?O~+ZQd4Ty1szuXSJalT zxw1$U&D`6OsAiFqO$mm{7D|9B z7vt32^Y0>S=owN*ygarJ=Jj_paw@tA?-G7YO6E#q%aDOm*G##EaMrTKKNU!^p&>#! z^{q=@P=&erhTG%>g!9Iw)N%fsin(@;^4?VP>SNBGx{7sGs*LSb->K39V zB!|@DR?jSR?lDxJ6!|E#)9Ct;%z0$0F5~2o66dYs#pShcZ)S`})aU6XJ~eRl6VfH( z<2GTYs1i%orGq65$QIWOB7L)$3+k5%4%SAvvO0TnLT6+_>^^X?m9}`Bq((0)k zrP}p_7fy7LbK=1n0@aiVz%{ycvV8eCcR+mwLfKLl#MzFsXz~yyw-^xCU(1Dfu?KpU;k3h899k-7zjC#-E6L2 z<<{WhNUv~=_0=W-ubnkB`b-NKf`9HI2>u^J@Y5=~h0?DD?Y*sfAG`qeUTS&)SG)n6 zBD}BGVj?%w^ny*q7vZ5PkH>8w2J0VC^x`epI`97Z4%SXpSS-O_%|hu3*;S+!J(!bU zwUzuN`O*&SsS4-PNu&H*F73buUg=Ap%gVE#9C{k%=Sq8xtNTu*f#WBIQ>R>tA~2p4 zIT~LIQ{m4t*ad&qvumID*X|j3V7_wZ$T6W%mG{>ce}}W%k&_4i2!H7l(!5=-;9t1o z-Z#U?h!ix1zl~>izmJb*;-Tx}ij>>YvnlgxzQn_gKkqqSH@-9+lbExk$^>Cdf;gWs zozJcBdwYI#cMN)U#3L-JBMJ-zv0~n&H;^nXe8@7B9}+-;_caN=D02HoNyVUoy``1F znKN1iBayRB-@P>q$21$YWy)XWIROc-MX9o&)Ul>WOK~sHK`A!hLCxV<(ZkoA9x71m z$~k<_D?(EkK<{SJhx!0heEz0WSJ=*T)D&+~``wgYV&|O>Lu~th0kO?`hoMO9v(#{g zX-fC*hCol>8I&WvvQWxBo?mW#xs=mLlcqaQqz3e94x>ef^9;2qLCXCIW@}&KnL$vv z>Q)XOF(zatEnzGf$sHiCs=` zd|5}};}dgGVr%ceD7{qmyK^h_A~>e;;)Z&9Xx0-FkH&e=M$B+B>*mZGWd8Feaz~xW zfWB#WwRtu!?dtql{XpI`9?Qdt-_<5x5sJ+lI8%rOEW{o#T=w0Qh5If(+%oOIf?Yy1 ztPSfzaFt)8|>G8_Nx@+z_sqSUx&-rjGq-Vdl9Uv zaeZP)$Sk^Em+x0o11c7(5;?Mg6?#9J>5ufgaq+|BLuTfERxZJ&D)$nwi0!WY^%7^O zSgi^*-uVvY&T{3Rq+Ee3_wB7x?x>(#|A$2WyK;Y~+(+aKyyaT1cTnyrq0lb2oEJZf zWXita%08xLw zV%1$tjb`F4n&o7D>2@jayM|LI5sRhr(2ro}D`*3D-)B!{_fF4fN-s9YOwaHe!H+pL zCB%#VJ9d+Q+xQNloc)jHcjN-5<`dSw??YSWZ(QEl)+c}T_dB$yFXQdMyzO9XlWU$6 zrqgig#}g2*h2{JXnMZk?8WsxoB*adt^1ydb3z-+S|LXUU|&`1OC@F>gPq`216t;FPhV#;YJmWL9NXnDrd~H)FGKrV){Sz&bq8+_szQBl`+@9(3J~R&%5AqoncC&2Xn( zNKG3je{}bjs{G+Y+WAtb+Nunn?Ix{_Zl0s^xZ`p%wknT{2G=`zjKWk1GeFFb5}o5M z9tUJ%hjTVtm}r{12a-BkoIY`mNbDmy-r-(OY4lsEBy^y1Ts1djXO_y@&P5Ml$SShq zQjpMW=~YOz!hpYkqv!6R@7?Jl8-?8uM8lqEPMN~qJKzVp{thNTk3MAmsUESP?de&_ z@4`gu)TuLCWq(|M>T6TEcT;r6bz?%Qa9PD0Q-+#;vy|s=nv|KwyxvAfDUI58lbaT7 zYR5J@J>PyKzTOaiko<`rcYK^4hu+oIdiAclTA$9$N2Px|xyxkEPdGsHZZ$K}pYq3Z z^w!1$KRM$L#rq_fsW}%SQ+FzkUn)7ff0DR~TE;f2?xp4G6$|`7bG1`ES1#(qTm4llCi+|Mn}8|Mn}8 z|MqK3`F|DizsAzSR}%tS$d&*5l9@06@63_^0#@Wdf47kTuAIt$SMJ+6Tao{+oXUUl zRsL(aHuB$=%gTRO_AxD+BmeJcBmZ5w*;;NZ@;@ja$bVOUoR;5;{13_p@}F{6{%7@H zVP7xf98)*;V|dLLDlmIZD`mZ!m1fC7qW(_0>ey7_XQKM{e=$$aN%X%;5(Y1^kAmb52kOsP+IDLcVT$7}S>4Z7qEZgj@SNJ+CnVe-);eUYtY!&zW}! zZW!qICy#_NL!B$0TgDc2-szT=mgVuH{Jm&q>-qR?vX+UpE*fa+LXl5Xip`(7Zz1-Y z<_m_FDlcyTEwPd0Y?Gr@Aj zYll5{o+T>GRdVc%vTnFWHtP%dfh}pn^auG>CELB}5~U5z4YRgnV$oX0N8&F1SZ(&a zw?ioXC*{ND&F->YYl`k6AmD+qm8|Spa0e%GuIM2z|AfrLwp`?Ri5y=NLawDMPo=DB zSEZb-hxt)Th#Q@#Na^B$zqS$6Coy?tvN3UTwnc)3wEE-uNBL9z)urxL?&FUmtcRYPW~c~ah4H&FlScd<)tJDO%;{S zL`I6OB{iu`1pVd6>4v5=Zx5N*c6ZTO7e~$<$}Pdvu2ZLqEWEOz_xoTbxtcQsQw#G4 zaToC^$N4`!hVmu;e?+=|4D`!X^Ge$~^AYx9A&jKVNn5K_%Jv6^s?f#RyIzXTSR~z6 zG+8{-VESg}p<#gSfO#2~jUc}!T>o@=s0!bp5Oxt!F8+SHM#!1{KVUC>YfC&Xx$XiKcH3NZW^uD@L&1&B25bsYH7Gm)9WeSMV-j(Bb))+RrtKMG6G zd?U|>(Nk@-)*Jdhh>`A|AG}ZQ5CI|Q77`4sTFhZ0=w>k8>RhQ!Uc zeStr?zT6^}V?}pef-s#g4T{E*vE{o<d|-{4VBw{AP23*75KI9!XI zejSZdpuBw(v@JJ%A6P7Xl<>>(M`hHae#%>69i>7L3)e>dEXhXwbbMu%e+e_ghvWam z|Gyq?6d9!4XpOmm{xqxsU&2Zs+pP0IP}2z5X)#B+VJXl(bJ37Sr_=BW| z1a`*1GCNsbd>kn7FW{e?{f~_ou`zSZ7EZoNXk6HFxR9A9?klg($a^?EIFl=LJX5t64<{ZL(?NjPc?&PJwk$996qYVW4S)f+#s zv5T?OkHkU^m56}N@pnZ4+E*?zVba@h{hJ*#@gWvq;yekSi2IiyVz!F6VxX;5#&iNU05b3(*AzIsRf(bAFGnAF?Vd=JQfx6_6^Y9e5 zhEdz|k6^}`ca3$3DrkL60L`!Pm~6ATP>>i5e;w{cGkz9qdoyQCV-K3T-2B(ccj)nE zUL*x(nTHW1IrI!I`ct4qSVNA+(8>SDPQ|E4Rgf(DOy2&f=((+xf2+sV%iHr6T8T+5 zPHeQ5@nw-7vb72)zoq5T(Ak-OJ18IflJKaXg?II&2aqO)TrDUs)Q&#WzpkfkM-nB< zht;;S>o?P0xBt}M^4;>=>&ghW(jMnC%1?fyz2H1BHLcj3eT3DNAD4Npa+>n!tFxN2 z$fH10zIPu;ZL6Ac?B z3Bp0G>j4MccwL}tp1FJQ{$)!OjIPxwuvHL*o@_Upl&gmyqw3LvUZrl19^H3);M&UR z1!5np{Nps4Y4Kb@*ln2pFoSLv?f6|_e>$~(3#2oWP33d*A8+H?mrL9k$se8!yxv#~7t z76SL;&k3zn@{iEWG}xiy2!=nOG;}7C>-u~iUa+~H>3=U6sh?8lFa(n`dq|QXburP@ zg|$`1o1%m9A3zj|_Iboo@%3S=)@Gk30n0}!LCB)4J|jR$l^hCfl|OQj#KDx*%VDNw z4_GAaM>+`*e@@44c547#h!C?g`NG|QL%E3jou0;uzG{D(I36wH*l-xLY|jJXE}u;n zoNIWEaPfv2LO*5riHW=dc`dCc_A~AN4f2vj^Q9y+;pjyKIXolz>wJ}p%vgGRUGJ#+ zvF3t?!+~V>g^vO~`ek_R&*rMX=!9w@`Pa#n9ZXeLU(=_w!+pM1lsDX?`1Rs)ZdNXmm2(wyeB%~ZZ{M6QeG8d?z^q7<%Xj<@4li?UB$1_w;1pT6NFQ|*RboG z=Q0Glg*Fc$85FnMk!l{|b?~;*+*+NZ`$1T_SEZn1eGjYp`6g^J_PvH9=_2XY{!j6m z&PyE87$MD3ORzMuD=VB2{~ z6^$7n@oU*r-L%k0H&E?4i$6452~QP=M?}!(m=;{9c|t@Y=2c0=yl~_&uTM?+aIX)K zEqZ-U<^`BOx0g?+j@RcO<#Y7!BjtDN->1t(G>)BEH7KJTqm*%uBmNR%$M2^_D$8jEzx=~?k4sN1(&zeo)#`Q%V+ME6B)TK)I zK$9GZBVC)z;F-S(;yCHZ5jz#o*kW_E{^c_7!iHn1%$p)7@yE1Ys(0-a_^uB4C_iq|?Zm4#h^YF4+c_ssz}L`M^H?TefFq z4%j0O*raU%`;N`K>5&iYmKnDXEnpH~!Tfk>-Y}2N0XEYCyWau(P-Mhb zyh3%+oF;`E5l`~pH1l`N^iDU7AK~E4b#QLp7930poL7BQn5i9dwMUK`$I!SBzpdJD zqKBEAPYRqKz4$^B1R=*w-S{p%EOHmWQp2br`I_}|gsS}d%KBezI@n;e<0L)s`>F`MP$imKkM^OvUOXCb59cLRY}Wew0cYxT*PaQ4oV*_<$LVRCWw1*!i5yGc~Z3Nd?ni7!yMvKC?gJw6+nj=$Z}>=WFnWtx(Q zW7+hdcbb_1ne>=+;vn`xN&$gI8D~8&eiP*cdoMc_e6{^HP{7$jYvUS9nxafUiQ7S{ zVDSqF;=yf!C>IdtzsCbx3zr2$_2OL|h;JN-aoYm%5#!^!z%j{=%DW_}#fy~p;#X6-;V0Lh728>e z;{;-?a`pwvE@nW4jnh5Y#m!G<*~L+mu`e*M8N$+sUS<83n&t9^(3h_=vq-)Q=`dft z%`>m>VEIKq^Dr5t4Kzn>vbWab2jL#>7W?P&({9dKD*n5CHr$O4XM6EDy$}MBGemzr zdC(yg`(sQgmMLOz-(MugZ+XJSmv^4T{_@1NEa3t4K$iseVhuyigl?z!TxV8x`psoL zYcN2Beyp0c&OAa{!F@UDR-=0Fs9>=%&!h^eSdD6(nW~Vtx>mhe68x^QJAE*>yp|=E zm*sXHAog~h8?-GDcWU8vX2Yvaj_DG}G8Y4Pq5!%bFuwC#C{JqXW8#v?e{2ieBSrj<_PCylBvQA#>j=I^l}XZ{-r7(2Sd&W4G1fVhWo{!+>wCRPm>^ z_G$sJ^J-?Kb5I*!f*i||_zxtdXsq&v3+Z9x3bXKgH)MI|sV@1MF9FIM&OU(ErgMJO zzwB!JiS_OeBhT4eD$l!;^SAGD5@byASGZ1Rz5tZJkY6CO|7Da%X0rWe6A8kfDRK3RX_a+rNMdrDXiWOMB8fqm*{Hg%i8XS_)^ z;$hi{<1$@WK1w#?XUj%>e56t~;%vXKE1ynDug^_x`+a-)-TM6xxBY&kyh*>GE?=g9 zpD$m--<<7Y4d)`d9WN7B%y|}G=-6a%50#xbhgd*7L;$ zA3>Uq4E_lqsa~2rzcH6>V6!H&nN4jjEr>~S($=h)`4*NoZkeBaBSQcaS);;86cw2R ztEf18wi|zU0L9AgkA*Qo!rt) zt|x~pnWKoRP;mZHJvWRa&2uO5&%Dw6(=e8Q8ZYD@Oy(z?E%&5qa{YoHo-FbuZt)-_ppvUZ!>*w2K=RwrK(RQv#&9mO1kliaRpylB$-As8(z0Bd${ z>18rr9wr-0TDSRnp2kf~;gRBq&|Ez?@s!}1bNhK$3hvMTBb5I?1?_}wv6-^`Oq@tI z{8Kzch+1{!32jZuZ9OIWuL`H0)<$7O1GE>(m0p7Pzh&Pfea+c7$@%Hm*iBZj$JI8u zaKnyQ;!+d1bwdrChYL;?^Ytd;W4)+o&u4;dTj$gOGxEOIL%UIU75636YlXhonXyZq z4#&Q!0X4X;{?amaUXt;3IF?50hpXF*SF-}GTm)8$IsO=gUKLnT4r!(lf=oI30uG1p z6>*1!USf}SvL9~yXm@^B=hL57e>Iw~o?|49To?YvBK~e|Vzt==(}N%wEabW)${EZE z4$SrX>FI1-+YTGgg@OH7ai&oHg0w%w5<3~nc!*bB{ zf!?Rk_wHTcOKjojo7z|0V$7pob(NWDYM8D)TxTY?>P&g@hsB7rg@1+aG;{S^T%Eo` zL6MMT_L!7t-lOP2wfD@aWyxhtrd@1J#|;b1yhJ-0S85vJ==J&8sTEumdQl&PSV|7> z9MsMYbq(Q-$GgD%pDoh!z)2Ne8{1Uo&3vEV@*vzf(yh5=?mv76m(-LWtJ7CSDx3sC z9rk7~mtutGFHU!}a<4k})pnHjX8$ami~Z8cn=OI1oLj?(=B9gO1w>XRo9$M3XB||q zl|_9^6p^B*B-Z6;EEST?{yKIXdOnwYy*BxpS)0kEdE@&|?4xg#8^tl+nHcCOSdl?1=@FXks2D#VPpRe!MV^qe>SuAvvMfb02xp#+I>aKrHD zlb)e?;SGPLHCb;kOtHxX4s_!38=oc!2UpBKK-__Q|5dU#mQY#Ju6J*f7aK#nE@E}X zGE6gGy}Z5TJzIE;5bw1^_(*fzS^8gpLciMjY2nz%RfKW)Q6H61exY!F*A~uozd&Dp zdjV$eOX_HG?~gd;MkI25a>Szki{w0gGS48)uerdJp2s=(vueL_U7{Nu6g3 zI}QdtvX@V7(FXjQ$U54{FaBQ~Y7gIZv9gs}PAc$Jy&k2RprKU=xXM$9KBm%Wn1=qW3XKY3%40+e@!@uIiI9r_7*{SH` zM*UYoKVl;rNN(&`t^^g906wwb$Twaq9u05Nxp@yrS~Ln$gw|Rdy%+((T!()+J3i_H{w+g0+RQHC{OO zQ+t_+SslXlM-@z6jmaYVoM#^eGW6MEZxrN^9ja~+%=s%x3a5_N zYyOmp{FOTXKb09+daF(q-sMnqtpjdaUtbs4s2wXX`y8Z_dD8b2iF(WQ?`y8oBWt@b#c?2J4lu|iH%aiJUB}VG^r*hlOOmrpOmJp`s+$C5M)q4=FE~46U~TVL^8IM0Pn`bl6grM{mu)NPZ|JRi^qf z_-lwre-a?uyem7L{5y;@amt)4Od>ts97}MNob|1`_1mgjvl*Oh?~oCRm~~w5k@q3Fj(~F3Vp=yc@-2Pp?3qN4bqEaR4DT%LZ->^d~>JRfhD$oBp?JOHd*Y3qL(@JnTuxf>JgGP?0m?-?(CyR7*c z)0D=*yO-#O_SJZs%wGkO(V!dk!dAhp^gl6Q=z(!s{E4=A0!MHRJug*dn* z<<4%r#7|NzwrF4u&k?yu2o!mX2)HNVF5JWpV0rYra7FXv?bBtdw^cMx=^{Z}$TbB_ zMASa^`V|u`8u!{4gp62qPX0H*_(YZgNcKY{bW$} zSNzHWe^>^8;Hz0(?_0sBOkChUZJPdS$<0g1E=1h+P=?vXim#qfjlWd5iPIyHrPo_V zI-O3)Zu}u~=cpXJ1<-1`o-IF;o1w+-jH0{jX#Be5hQ^0v-tMtRRP6a}dt!G}{iQpy zgw>zFYdCeH^oM&5uiO3*)5uF4N}~c=m_YG!h4cjYW`l;UiWHe0*0B1D|1N$X;%a_V zlmDuYArC91fi)K`=5rwAW96ZnELQZ)ExS~Y77NxB()mD9i3 z_?@+eRo{RNrukO{`cbtM07uCd#?;;WYg5HK@1_N1O9_`sk-7?*U3ni=Bq(#*&YL|S zNKl90nZH?nq_pnuMoGKA8omaZmai4CH&Z6&muRcg8JbIIMfE{(ZV=k^ZzI>7Q@t5i zwDtaH_slB_ii?CRoR<7%3zc0tDj@*AtqgGF%YIu zDl6ru5}GbS5EV5K8Xc?v^Ctzt59(J;?5bW?qAHU)8<@GKh!QU`2zXWl+vDF_;UOxdqLV~StY%BAz_8>r+}>fF zz)O)W2ja6nrV*v`+Oe;L^m1#z%FOp?+nR4yXfZ;a86OO|d9q9!R@nab&Gt7^PDG>) z(%%e@?fbBK{r#z@yBXCWS7+#Sl#ss8m||6rxK#oXC>hhYm$+9- zv}N}-ZBTPPko9ei?0ReXsA8N|h-vu}@+F|x**QIq9-zdhmedN$zR$j`jf*+tN*d60$d z>ya5={J{1Mk~<2?WnTPn`HjKn>SbalYMQqcs^o0Eou+1~%8VwzMV7N5NclgUwKQA- zd$o7t2--$R*V>L=v=^mBHn3Hw9+<18;=X??1yxT@cV>~q1tK7IJu*wOCS^Uwe)3q4 zo?VYqSJSuXdtjv-kmv16jfRc3sdm~F-DusZ^*CKEszK`da0>=;0Cn4i;_$u2`j}s~ z?e%dr5c25l&s1>hqjA=j>*E5lb$#qlMOh!b$0_S$!2f1_zz+x5^|2e^^47=p+5T>I zeQe*hzwhk{1QMAeyFOkdq0Rb`ePG-50cOp`uWgo>gu08NQzzeQta;$B0vuP1yPxAF z#M8lc_C-5KXOYL%MtRecwYHn1%4J?+jWn3Qqsv3`-c+<_jJfLzy=#m073m0Z+>CtB zTV|i_LH$!$W@KJTrvDSa=j|w1SY^A`EG15)!~K`*z2&_1cAsR*^*!^->uN@o!I#2( zkcPrSJB3r@OZ53=GanQwcHqsAkUj5i7Lwmd)@s?|lC?ZCR*m}KV}2(R-kYXkFv+QY z={;q=S8R&@KE6C$KeQlH6MwOmi7$v8N9a9hIqWqI#U9ka_9m8Q23E1h3nza}70yfz zZkV=Ybe~OP>vwb=+_#WQ1){T3tk0(AIrHj$(7yAn93g zdbccpt60yK3Jh)|3Znb#UBF+pTl{kf-AN62B2_pezC5~;$t>=(KIgnc`a!7?1r$gP zxIywqpV?=9a~8DjG)G8)Ck`bZ7lMG#6hAAzSS|7L=_H);;klvjys5%YBx}8}s2)WR z?%Y#Lux-@;ax{>5xg5iwp!ebQHm7D608w)yH6^QGPF63Qb&kub%E>y|W}WD=hUa7r zvsp*Dtg~$vO$=};mzsl*P{N1|Yy6>gLg+adE6i@mclSj)6S|`^z<(nTj)u(9y=~dO zrVk8pucrQKJ=vZoOjmTsmWiEFSfhQRf87X#Q@86tGixe(6=x-aLbv z1exg)-Iv6g;mL=HJe?k{e_r96e;uYb;Xj!#Rnpz09O~tapIiC#;$ou_2DYnMb9d9_ zHS3J>UCnd-=qx8JkvH{S15*K%3_lln#O_A4o!TT}*mVCQAp_Z1_Y?D zf(e^V3x@5;1;nH|Jire^oTbMhfcOonE?1YteSV$kh90K9h=vOm*Y;@<#kjWO{m21m z(szXF=S=T~iSVas6C3mpAjV1B^of>=8YyT72toxa-T{ICy6DEb6sxGy1L~0XbnrCcg}9o z>WMle?8mLLrV3T)n_@qSB{{nur`Tnz`*_a+qRL3cZKT*KMLkU=GM!}x9*L9 z&IF2N2F7`p?DSQ)o}qNkdyL_N=Gx>6ozu(co0$Ad@bBR!8R%4sGdowHe#fe;af!{8?@!i-*R5;NaR`G^+&38g= zoG!)Xj=%Rzw>sD-&^FIl7$QziIQAnRradBud(TMnh<3y3IV7kL|C-5eU!6RqF#0?4 z+mYX%{LbY6V)Mx>4)<9~K%%w$e^o8_{t8~Mt?xd&c0szZ|BG(@f9GA&J}f5kSTmN0 zg|Fk1uVkV9IF zbkr3uCy)9i`bBLL{qtuZ(Wvw-*S3;{<)-^(djC6|!YI3aEh%ms5S>3$x2sNH42Wjz zr2)|}lN7K-Alz~nAvZYzj!z_AUV@ev>SlZyS{Vw>_(|s2n|UTV*dEed^ONPBV6ax0 z+7Yu3kFl@t;1o-0p+?$cK!990qtuA?FBmQ>STu; zl3wA9x23G>{>$z9N7d~%V}T&3I@$SVuvP$CqrT4tx7K0F^|i_Od{6X{xB6%Hzr>sC zseHQ|7Y64a5ClvT3EMo!%99Pm7Z5$=Ly;%%f)vU0L-*|vs)k>{E!Zj`_|>f2mQkdN z;x~@s{8aGA+Lle|{X)+yjxG{^4MP}gt6)qmURmWxU+3v*XQH#f}h%jlOxep^O?>X zFY)VEn2x0nVWo1dwflaS2=KNFI;`A|wV2E8YAY5`*iE^~DjE*A3{@U4S00mgevS?3 z?K|$5E0bCjc^&Ud+7McMl*hA`))MzpU-rz$F@CWRg08B4H@9xl+{7C)An(qA^y1d$s>NzIUpH z3f~*Xum8aJPNK;F<$I3ry}LEOXV-i{`ow#IrTB6<>-dQIgiC+Pq93mx74omtWJ})? zHb>6*z920iSN}aepgm=zFY6s?BsGk5JA7e7mVT(`KSiJvREB^}Wck`Mie>oPclP2k zYN{81mW*xlwULwvCO4O_mE`a>%MZ6?ZaWmp`n5+>s!>^aVfotNy&c1eKPgN(=(O-Q z=YG|ezj@aR`_3?(zB%KNDGhTFBgn?{Tu|iR)NLok$ASkJJm=@F(&Ste@0)VWV4JKf@`O!Q&@fF0t~!iyyre z=6y&fn0Lt>tFJ2GUZCW(1>b(CQ~`PMdn7;0wZ)T3v{D^Y%#O*^qwm!^rn}d% zX6Y%`Agiazc(!-rVa=P>=h*QaDXpHr_3?DBu76x@1DmH!JUAFmIQg0kr?%p)=!zvB z)Z^6cW6kKbGM>w3F`kQLnbUruYNcp@>u3*Sj(BLL*4voAs`PKVw%;irmgT z`7{16JBCDQT#P!b1QREouMERBt zw(ap_vH=he0p5Jq(_ncK(w@F{PCsQ1LO3ZFvhsX{`o_UlLT0Z6FeYyz$Wvsyjc>+2 zDPXYJCsUQlC^t-MUg;W=1naAe;Ydfxvk%K7JrWzDT~oiqD5~)@-xI=E6`htUS~+tR zWFHyae?wwzO>$k8cheGSEj(k%@RMop#O|_7qPYvq5(In-H0%;7if!5WnqoHqLBI!mcG+He++Ln@7rp5hN*$JzbFiloJ zYbiPc$O2LdWU?U+o6mUv773>IgqQI&$tyM|i>`0`2I$%qWF=NrCwD8ikrmUiEPjDk z3p`T@sPuKBk6{cFXEQcJm>Xz-@gA_{c=yBCNe7IL z?gC1UUa)CTYikaTRzs0|SbBHMIWxX&{|~nPkGx7?d8VO#B%WSw-*1}1HJM`KIA9>G zPJSgm2?JGyj0-=lZis`*Sd@r0>wu zY0OY=J;-{WCvTdlG!w=q*5)o-aJO>1pYP;ddn}79RkY?BH`9IjWH$8x7qctPUg-;) z=0XCRdJ(z854(sS8p7PHYF@KB^bg=!+&@31X{l7$Wpk??dP{OKWFLXk0e03S)_-FlI>Mq$wrdnlJX#gg3zpAlzSI1NQHGBsRZ zRZv^sne&#_b5c9UewsFQ`}!vXnRVc-;gCHsE%80Vy*ga6G`b3r<@bP_Te|}n8t!8e zsra2E;||jR9~8uXZEvMU4*PP>KeR~^`Y-jZI(5hmoEFc z+T;%^HaAP#2%pdMsDZF}W}jQ^yY(l@^s>{ft3SKUo~M~ryF32zF#|HYPqozXt9&fm zdq-K2%0Ip^-^!*>tdGs6<393U#;V9d^(D-^|HE|o+e6xmQ$^=ZS8;QglDP7cb!P1j zN+$8Q1^(GIZFxy2q>Puio5Yr)1F0te1^i^4DTNM&wx*LBAZ+I>ZT*N81()Y$=!%1r zOh|#1(a9jJBsfQC-m=H3%7GUP}2hMvkhX>Q_u@Bym)k)@+mpa7tfRmp(FKkTp zZi4VYuNqPg&QUI)2{fWFxw_MWQ4cJhFRLTD4*P#is+YNtVw|;Hxi5Dt3Zr|Oy2&!3 zk*1dRg%qx}p;XdcGW>+HJWCQ=RLYS{fTZd_fTqfx7o8TAH!GUEB1w9sSIm*~s{gY8 zqR(afAM5oS{eO?Om+k)}6wB@Zbyxqt?f;kyv;FUp?LYi8+kauAZ&xROWp^OUR?sh) zZ~2|}Jl#?BgQhEYv6x1yW5Xbt&%Ppa2Ngy>CO6!&ka=#U9(MjrOtTDr1Ah~@|9D%B z$TPm`jW<@#B8``qlF+{?Ra7y>vFY8=pM*_6!iu$Qdif`gO>=Lo2f1=$S>nP)6T1FG zv)9hTu6c)UG44kub{erh@sZ@Q?is&^0Pn@u04r6rV)Cfau(4~8T2ixri8Wh`-z1_e zB8*?$70o-Jx~3L$4@p@@4HvP z$nt6yRE1V#>^OUdV=KA;!f`t6U2N;WK;;=5)Fr1fk9tsMoI|S9eymf^^VxqF%B-P>tlEVubnlqhdEX)_BX12P{YB9oZV^zU%^_>p{-O9JNkXz$^Lv9sW4aI!7TI5ovtC34@u}7AM zLNsKy$2?NqC?x4*)Oadn^%*l?>%DOm_2{M$j2T6}G!}H(kKuDfGkYl_;0c8Bm&Mco3Z zA5ss>W$WrFclVF8l)IwK^T`3NMn<=xQ@NiK$d`P2t<4bNZ_sN2bEz{Z^s$B}OnN7L2vmDv zswFCco%c5Md~5n&S$bXx&58Zd(er~rPnSfV$f4)q1;^GG;<(`G*~9*U9`;0_haElZ zSTMapEC^N)TWIyLfS!AOAoN@@$axsZRxp@I&JA0dEj{SuMNT`9d}l0+zN{p_P7!-uoW+U5EGLsN=$S#E{{<_jTdI9 z@p{%;z<=5cJ!PnIZ5}lqR%og5NN$2FH9j41(E;iL#sQwNj9hBW_^l*Y|JU~hm&m=r zs?d^*{DXVS?ZMSbR23}~$AlMr(auyzz(4C=aH98&Tu(?YkW0*~m0xulj!;4odsp06q+N?!FVxof80!p11uOhAg25aV;XbZA~l*eQBpf|2Y zgXkpA4`h$V8*x)8ZZ5iBjcx=$LLXU5Lv$(fJL!!mIq#TZL4F5oZ;O6Jmk&V0}5m_ zn~*)A^zI~j$%bzfpVJ4C{}u$-e-&Nx5^wU8BGC`zG73ZCnyr{M>yqE$XmK^a9NZW9 z*{Y6_maeq8zb}bQ>$5u&Bl{1yz-cM7X#sa2k0Hxk`~sI`wdO$nm3>~S=%hYlgo|v~ zQdGk)SxflFXU_XFLO1r+s64t0i~86jQ@7aF73)BW`8|tAv`Kb%Frh=g=q>)g8=|Lc zF4J-}vn5=MxGti_CAmQ5n`-m}Ex?ZN->_+nh}C*c#9S-Ig_jA%gi-doE1QbSqkyAW zZL+V{b{p6VvirEzeq9QXAT;=5b1)VV^lOMWRdf~|vSS|3FB!ABaXShN53vo&0?~ai z>orw$pe^4KLKs~DQ)x9f(UQeqSMo+!VC@~S#xjBU$6-KJ>cv30LH+ZDsAc~|@eZ=r z#vi1KX);TM!|RUw5h}qeGWeH!a=Xew0=HtdUJuHR_7fCS$r9XSXnaxNOto-E`{xGv z)?TZ+lXD}*(>KR5t(Ueoc-MbVk121=o)?L{4UZ-@e()75Andc190(G_OhxyFN6bO6LF^^%!5sQTkGxEOBTXvK;!6{;!F6Mn2M&w3n9Z#096d<~$htk5!zmt@;7{ z;B=HRvl#Bv66&1ESY%?#U_$;NvUA$!LRrPnzh?DK`onwFq=1FLs`>yHHm=N!&tJ9a z*WCK@3_?|oy*ZpJs_iuPurR;+!7E%S%b1Q?bgOhyaCPf0o*fRlJL5&itbboQKA+KvD}NNZb8W?a|vw z;pC9g#!ixSlS?{M#n3$Qs3x<_23oup1*LxY<{3Z9?%ta@T{2@u>x(k3e90kfJXYd| zk35m+E{F|zk6?sYGdON@vg$hRXol%U&qAXvqwB;<%JBDwH3VX@eXpkP%wqCjs4%1N zaeVoV;6dJS5)l_3yWR|ZQHSFtB9t`m-G_7+u4abQZL6sLAY%Jhp^exPyh|nq0CNq5 zV8u~w@~h~nvO&8vt22xmaP<5WmoLrbtW8?ve-&wzN0R)jdp~ zmGeVY_&>MI;Rd1l8OA0T{c=!U{W(P;E@R-aPGph^efc59C&U_Wl{r`wfdR=Fkl)-9 zMkD%@9XfV_YMh!6(l&`m0GLAmILVtck_!oqRkz+J`zE%79RfZnSZ7efq zX*oqEJ(c<9fcJPLNB;T_>?aV!jIVBm`f5_UU;4#4`FNW}I_n8n|9&)!nBw5&-tD28 z4=*QP()l03*@eW-U7}E-o!w6|ga7+o5(*vX;A7rKf8Ee{2?a5)n1Q*U9CBj>Gvzid zqOdqt;dY-XAq}M$1ELqdj$3NFxsUNfoj9)2AMAQB(;sx{YJOPTf3JqGJ3l;Pe9;YC<_%ggoa0GI0_)-KgYLU2U1@eT)0HskDU03Ocz%#|tENbcR z!}Z;Dafo;5@NmH!v5JEt`>=ECUYG9fOFbJu1LP(xRq03}u z)Z=T2!*M5vLmc;Og_-F(b=;E63FlNo_G6@uONBE3_h;|#bD7Hd{a>%&|Mj0&&3wQ6 z_Fa4JwbxpE?X}ld%1!|^?mkER-5EdrfAQTIpmHE(SSgz&_WLfZ&`SvMRC>d7hSf03 zGb!J$CZ*AtknJLI4jh1mFRQNg<_Qpz?yu8#Gy=smuO_R}$T5C5gbKlOzn^U<>~5ho zpdvD-A@5*>Wz`dVx9%FQ`x&H^RUcP$NbH4F^|^l~5}J8$La_Q<7`uC}TC<|6+59Qe zk%Jq$R%TC~)`x4eMMa1OaqgTVQPK2~%q^{{qYXdO6F7z$C*mioR_8n$axEb@n+M>z zg1vXDd~s_-S7Bp7s`$Pt-YqD8MNr&J6>r!=^Q1?}ddI0wp{~8&#lALsi$6nV@?+lL$#y8#q1nE} z^Ie5G#La2w1;Fn0DPG-Esh|)B1~Ha3$JL1qADyCUn1{qN40Hs!(W&!~6O)F3V|$Au z?SQW5ST^34v?LxHly3g=UzELxw8@kkR&5~+h3mLL(UOR$(L7HP&8y>6FhuKbaVT!@h`on3}f(q4iV*iW+N7h9fgeg(DKfMU)JTJQTit+Npxw9WypHvQYCT{mk|_(=_H z!v;~wz|EPVHmeCB5cOFQbGc{~u#chFJXZ4fM;=ka!nJ3z7w;|w>Wp>Aj>eM~Cu4K$ z;5QalfxNS6N#m)PX7A;DgAre~iIJVYhLN?UmhlQ$$7$Hu=_?T3tj*;^h^by2CL*tp zEI!PM%IdzL|3W@xX#snLDHgbzIrYQZwd|Xo&-0_*KaJK`<=Eo^^<(l=cMGjD!&o}k z^gH^L`XPsg2!{0y?Z)5J)cSfoEd|(@eEApe7DOz-=ASlmVvn6F+qDu-%$f{49B=z> z8Ot#7ZNM+I3)fo&KT{&-JE*>iuIgoHp(-_f66*#0kHC`7|C$#&^Pz`|nk`PD8-GFa zQYKN*ubR!r#yU654jO!w3NjT88~y@ z*4F;b<$o7W-5{#-r)V|X?`XOjd)kt|AU?}Ngv?D%vzQ`v_&bH`u7Pui;fxgrk?m`} z>6YD>{q&;YRnG3b*hv&k^c=VMa7M6qnlFq4LmJt>sZV6+{ASI-SWz&EbwIHVeFt*M z&R<8|jz1IzEgt`SEgq3-QI`^KKOeVm*U#^IHHbBcLe+#2vrv% zd{A9ZGoxtz&3cb@=Yw5&XvzOy-&4_`A9^%ZL9>7Sy=D(iHM=|eGuz4QIor0E`~O*c zzW41}vRs903qXSQ(kAv3>B{CdE_mu@M)M@~eprxFXwJ4zwMA0&SdZicR{j$-b*3(q zT9~y_YV8G$OQfM6f2rmfmdm=0P+LmjGIwvaco%~x5G@leiu`7;N4{e;>5P;Pmb{64 zXHQCNSW;S^ZQ0tI>V`>*6z;z0db_m`n~NP4csCzpwoUymg`SjK+}? zBORoSp$7L#R{ZG7Ygs$UP0I=jH_T4SbJp7*1ma*BuJ@@mO!)^EJ(i=sw+(u#u)Dxb zgq{aW+M*}8mI>5wM9NLkK}Uz{bk&%J!0L()j2jUbqh`40jY%h;tOmeZ>?9z`QaS#_ ztLe<(iP2R<9=29<&NC{nAM*+gh)VkX9;-P##cG0hpgWqUYR%32a{LhQ7|z0nvnc0@ zu_8~LuY-fPLl(TvUhVP#fw$qrodtF^ujYJU$DI-?4%aP$>dXC38$KCH(;PRAwik8M zv~AT6sriS=pu!wa3n@Wpvz;z9jWStkkZqz(F>?tel8;Edi_Rog{^E4+aP6lWmdIcB z7#=#xE^3I)1@BOiW%z5`0b(k;39}Lop4RX}YB)(zwU<&4D0r<2E zo?*XHt%AaBRNDkUaG9WGD=1;%+G&)KS{9XGV)8os7HL`tz_}@a%{=;=d=PuBvsFk} zaY&H-Nxlb^SsAty>j~wXeB7#_jA#~AdjVBL-&6z5-niQWihmGqdsv1QlY6`uK*;j_ zX-_1T;i!jNhGbdBWqp31Wt`8DiKJi|i!?VxSdL}bFPsj1f&S$_+3;0HuZ2~a-2o>{ zp>6#(1Kl<6TIlS$@k?y)+0adc!eHHUTY9^w63(@h4Tm={g{4$AkI_r zd&UiBOl2Z$VqnL}ktNUe`7B0#J;8t{aR zNJe#RvjFRvULx&K|Jr7qlx|<^k&s#bg=_r(di~Y5U1zKK2y00yy}{Zl_RI*tx*_m0 z86X8m@=;hacw!F=p{D}aq=FNHb zi&l(}Z9B2;jE~R|Cw45`ZuVY(D+(xJc?874bhaUV4fp6OTNwI)!YEUQb0S? zy5s)c)uxhk>~dRqEEN&LW*a*RQnO%Ac7Y*{ngLdZF#Ffb2#JRweE8UpvYgmMof&W6W(6b~V;)K0Shq z7j}FNNO*eK+Q`~4+y2e9kI7`HAM@a9jn7KQb-Z5_!T20z+=LV+lV>paX?@wTbZNMf z=m$sybZ2BtjGi>xHk0=whRjI&Zk@=hz@8bBdB1`D?P;#rdocC&T!6|_KT<=Qj3Lv^ zXEcDV!~Kn#W_S)bUl#-r>Pl zo4u{kp!Z9Zhu<2)B4l<`ds4T(M`$v}`7`-{oS)otrDO$rE8@DD{T24NuA`i|R1SOP z+W*frUxQ9EhAD$RjqLjv*i?#=9Ex?AtqHThmVb@%_SKf=D_QN=L<)lPqBB>1n#${S zhvm)Au6+%fD}Rp4+c6Y0na25&JwF}z+iw}%xCEJOmQ)2-Kdgm78{Q=e49ISB+xX0l zCD)Lr<%tho_{&o62ywc$G{~~ZM6jYsKmV7ExvwC78p<~2^sh)l?TyW9Z@Suh>4D#CFDr2G z_C0I+1?bCtN@%f81*Col>v%2V-&xibTtYf~_NAARHVbR25xG7a8v5x}|pWbd0hV@fNf zVHMXQgIY$Pbvyq3+Ox#Z&ibdg>yZowY0~Cuw<=f%t}c6fWBSW0BVhY;(O=6 z%_6P%OUW_aXQ8RH`cP}zpT2H)_|Ae3_Ha7!Zp!TXz}zu~9zOG@E`kE1BTzVnLF`el zZv3)7_5x+?eo;5t2c&TA324m#$N_bhQZ?p;n$0EQY2%m+twoE5eN9L-&Xv&`389u( zU3)cNgpRjsc_L+(^d5X`B=0GIvl=h1_Zsg;n_OMvU8;v*o3%7l<6U6iwZ9R}hjSku z$$Ey~Bu}@A)q>u}(YZ{90M4sWAh;CQj5#FWA(&B)Bb%$tg{nnIdaiH#kmjQCx2LhJ zX#77wp7f`Nu;IzC?X&$(jW_R~g6~6{B={ED_l4>AGiKA@N6%Z2W)#U*(BDKfh)vCs$}qB8UP!^t_t%sK49X>Yvhctn5vO3R+oj zMt;gpVAWSa4k^(1Akw1j-ijvEyZq$}y7j6vtgRp;#mcOkU}>mvi#Yh%tSn)}$-kob zIkhVS%}jP#2oz|qSk4LZ?q&F z;q|zX>qvvCQDP=_!_K~-;rWX%1!!azo5$y2bEs>Y4XV@+_61}&=f59W_R7Wb;oODe zaeidLs~3lu++F!zU6|?O_jzOq%XeHR*YXzi`SC_YYJSXZ#j?kWV~>k_JFHzpLDV7}UGPqwxfnsxjIvXg)e zFXe%W)x}M7$E0|&Ibp?C>^=D#nk}m17g4e+CFeX3-OPPyW16hYUKC8>dt+=L-}5dw zUoIXAZ_7~7bq@$z&<$S$?J`QsZsch2hgIeE8$EtY3IwM%I_A zgRFI%`dN7puH9b=k(s{|=fCzDt&O+6_h&?Yj4yHcuDd<;QQEzYxNRE>{=U6^FxAfaKJY@_0D4V?tB;~SKf72%WKV<7G3YOwZ!u&=M0Df9~1duEfFcaTo89lCgdxW$+5J~Y4Q2fT_7%a~zi27QIR^!kx3b9Hp0P!1 zdJb82F5q%0pEsDNMon$$!z1#auFA|~a~tg2_s-H67zHWamhZ9iz{kYFYpe9&{LX6^ zkT3RLyMhNxY)mXBffTfxLg}YjBBKfpQC>+6G z@r}FYtL3|za_7s76y6)I4U@%Q_56`k6cFo7FYSl;k)_Wu74eukk`Mu3$*sdYFRa+_ ze`>|IzVAmKp z-@4`2!?HFP>h!(m$PosAp|6eehmQ}LKBoq(wHgG9ox&outmbwL$OH08zN@mm5CkTP zZ+3D8i*Wb)sa{{<6)%v7cJ?jEA9`8)2*@;#G3Ju1 zCpQ-K9|iv!M^$AWO=j^%4!UU;oL;Eg#ly94smAcz@J6&`pWF*&rZHE2Usp+2#tJiT z&~;4D?kidw+-;4vRcluHn4EHM&?vCF&thN^^WFN67y>sN@wMW)B17xI7tOL>*6xhl zF$32n^SY@U#nEcgR__2bFd^|-!&|qFwC+8NVh0ku%e1eNtY$SprTZ;Yq zS0t(+N9$W2tdY-pRw9elDA!(Wdku%=mZMg8T{Zqsh!DFH=nil-n|F<~4*#xE;>f%K zgHLuQIgoGW^4*>0aSeYN%D121q2{rOp84MRMmMvcz%Y}X!Y{}E4GTpEE4Gi=f0t%& z5XD3#c8(^`LE!oOm#XS#%*dpICvDGT8aFe1sFufF2M3#0kES(zB7Ud$F&`=!rCiH= zaXB%cS(Ej8^F>!M!j7@|l!xTsnaWULatT1ui@)y40hK4kPKVys+2K4~_fM!K3+c(Z zyqhgw2jloOZ&7V@w_yeUd78#qWwtg>Qft5c+xFBFPz4pNL@DK=;gKW9+cAE-!IGG@ zavTd1g4S#lqh@pKopda5gD&A&Z`u(q-Co6pXz9ypOf2aNHjskBEYpOp7Eu?RqOKy9 z?3K=@g8CT(X=nm4k?tP^D#o%_vqDgUn&ORqH}lpj0YD4GwMhnreO9~ZFn>cw)H0qW z2^jnEsf$B{&^OBv{`VkKEI(#E-ey8b^~(Xv7nM~d$1qP#^YwBGhGA5)UeJ*jxmhF&WrYJ7>U_~ZulIOTGZ&% z#o{LJFvvAsk)771&X3G%))M}^GD3u!uj;thWsnbcdkD5?Ae(eY=lmKIB^9RqE5kzx&TM(@c!(xCw6&i#d#4Rd#bxo1 zT7i_DE#a8`TD`bd-v`0qyE`>9MhkCV6@-lg4jX0V|R3Z3?&m67jX53I|m-$ zkc#ha=TsI5?xu++X}>hqZ!niE=+LI(xicTRHg;3%G9JV*9kY||FUHB(B^CY!p^B3K#P@8uE=?a%e?O99qoehg)9nF; z6(!#W{fd2AQSx1E6{4$Q<{{~x#omQvrJen-pJdr}joV($Y6GULAKBq6GWI5x$%O;C z8>sFoczDZ4Gg9MI_J#%g%{1UIwYPx7s$xSbkWY$@ejxV4`fIqn~yc+EOW0&0yMVZbUC2uZoz`-oIba zr1@eb%W~@!Bt@B{ec|q69Nur_R@Pr0Rmu6bBo})sLVuo8nn0m6@fC8;%=S@MMlzi+mHQuB$pvZuB_2X9Ft}t2sSrj|a+>O!pnX_?=d^7kEgk zmZ!~DcoW)eW_T}Wtjx5Zv4`TXzZvXhjZAHkA)&Zwqjv>uv`g5dllUFz_LyFY%A(`s zcV(GbxULJ@gcKO~6Ibm{**!X9S#;hSuja-r%%671(OmTJ=||z@-|UTzIu1x=Pu^=< z+ckTWf+VdLZx5cMBM@;>KfgQgVmAbi$*Y+6rB^X^p=cX-C;icFX{;xsi9Mo;Q&haY zEskucOdM<-!&C|bQ*OH-bah0*sPGub&HLcws!;gWXGJf5r?tH3Pztj=)=dMOC*Y(0 zi$)(xa4Xf-G~KCL#S%9wu`+Rx^E#u78Yl4g+BWU~g|e}WsPvR;yYT>harU05&;0fWpv83gW6kPz(Os5t z?1;IsUuDS`@ip2%II)l$JqlRsH2twW)H=hmVE>9x6vnnjE+AALTEqkyik}=`0-zy9 z1(oi5;BvWc6Yf4l({xDD*!bSbFENQ^=xbnND;y+N1!K;W?)v_B;o6ya2(i#D1fGg| z?q#Z3@=HVBpDas^`Zo&z&QBA^WKHY)6;me_miBsxOYA0v;xECYXwOVPahH(T(m$9f z4np7>Sn?x`R!AVUKNzqh&TZvDQ(3Y)c5sDHnEV8>?^q#auvV?HtVrlm-d>g5qzta; zaR%w?ak#r}Rykv%^-mYg5Y3dV(Cy0wl&rKQwKUwlvS?Vi`z_1 z9-$ID+>Ngk*un~&961>JO~XvE=!S40wmOP&e;IcVj)j|tYcB>QgrM)ue0n%K@S=9J z+K1~Nz^dTN{yW}MS^rqkG6AHnR?@#hixYX z_1Hy~{tdm5El|3y8HC-pn(!^{q;7<3f6JlM+ZrWnE-!GqePCg|)Cs_`ohw;^Pn&8a z7H}C-0XNuw5q~5)g2!k(Mnl&d4YFvjgj$}rAUIN?L<)sUPRcGE$jJ&c=iqEeK%=!q zv&pVNK0=(2*_X-$dJyzEFmYtjtakB}RH1O=jk74%E+*Vh4-~5-2U?1#S%Q1HAXF<% zsMgly6*Yj;&aF1-S1bKWQ%D`UG`e`LgSo_nYp=AH%ppY+(lf_FC8Ek<&;E! zho4-{94c$WZ+P=}friCzGW6PpKj9;C&dW|>m20<1bu?2OI<_NjBGs}q0Q>dh5?7sfFoki>Q>ke9hott67w zV|7VHFuj$RXFJ_;tD8st^Tem&iP1!V5NCUq)MhnW&&Z-u(ST?|b96$$xx(EU2H#sU zYdCj`W-*Cy?PQSX)(@!8vvRn@1`0{>h8C@F3ppy#Zx;5W`LZ|EM4qA%44sb6g=^bu z6iU{`h6i-I(Yu%eaGZESe0P|7VYFtp<7~hhxsp87eGe&76OJE<6rpPTZIRRrjYElv z?c0VAJDwNxg8q#W3w58iLN#1_n2al%E@y?yvY-cjK92cX*TD{YWYZHUld>4@1(c@U zw9cW%&}MYIO*mBxKiyObOwr3|g86~NvQoID8XA>kgGbnHIm_X4!+UA=*5{PM^>^aJ zlzWD)z@?(yJ!AF9f7xn7?7Q{0itDKGhYP}cRI3QOAMum~($s~U>1Wm!T#DWi5)INq z8^7ik3|_Y#wZpWbq42#h{eW4A>j(qYnjFQi^m-zgFRDL(oBH!6xcVa0y2G#zB#+}) zFiuf_CwD&Baubmcavw^(kiW#jJ4O+q#LSYbZ5{g1YMNLyCv_3Moj(I}k5|av63pf*&f7Ll z=at@%;29us0Vr7z)1?-*Km!VWKDn4x-h%j#+)6v{e9R~{3kuDL@FtG)YB>{MVn%TR zZKJNQ6CVAP9;lAP{y|~x(l3oKk>xGr}BlL;DiZ%r_OU|{;6qCA z4z%Cok93xCGN)e3poL}TdH=WeA=5FD6Ec53C>MKZ*)Ac|^P5hbFBwVNPCxSNyZoI) zCJ`c|h$)kNlzujDf~>&c2ba)sdBeGtqozil1|;e8Axy>BP@l;YO?ZjNSccWUK_0U^ zT=xyoCikHw$Nv)lR@FjVbqhox-d32rpF$NSi{p98zmOyPDq(ZW#17yt)57YH9t1Dl z;w@~w6qs)cb`Ej_{SzGG&-Ey5i65uz&PXZ0Xf_|m!n7CQmDe~cg--8KJbAh-+Iujx zX0H?2F46w4w@?}H15M)!h{3$`M~q~Btk^^4;XBiV?-Va>nQgAZM5qDjZHc?uejooX ziinNu9Ics<7m9ldabVZE+#-cr$@j%g3S?{-oh(K38ioKtV-dg3uxn5==U>*sigml{ zJax$Gdv#yIxucQv@7*jvw6nZ5DZ5Cms#ud`qhJ|%GY z(WPcqZSk7_2E-+!^QJuM)}8&uRhY(KXB=v@Xl-51dH}QaZ1$66T#mg8V7}_olIn+V zgGgFi<_f-=^x1qp7PmU4mz+r5?0BGBjAM3U+j z1%EjVUO%;|KO)lZSYl-L=C%VjuTD;zl8(vPw|*5mI;4zS1Eg2Bn~c_NV1ENPy8s+^ z{I0268VT(L z!E(k?^DMeN7?pJ(f6??WH*ir4h(#6NW*L8^{{>IK{|OKBHU*EMiRGso7oJk~!EHgb zdc}^x6rLQgDVHhntJL_F&F%{un^VBAxtn3;4J8`NfrJSHL;En4WeeI2Wgv$b&kfn* zsV;4rGjq6>)gRBDbFtX_x81Ug4ydc>=k=jgiYY2qXJ zG0fDo0fNJ2zgo4yW2PW0)7~*`Yf%o&bOY%YFG~rkwz9GF38OGXEO@)Zs_Lg@n&a#Av(C|HB(b(C)KDqxtiQH1 z17QRIm_rs@%g*42pHLJUn?QhR!q)@34cD$0jDCJE+GI_Ey6V_#w5EN#hK)}u=)o#8 z7_LFt=?h%hA0HAEqTuU#SHWM3!6gNc2nyauhTSr1xCmI3vmwZ-R*o>+aCwmPvCWxq znY*lYQjpr@QisefRN32u)TdnP@pBJT>cc_moi4Q-B2gA(9WgKaE|3`W;k!eCH(aOf z*Z^PLUaELhl-nn}TvuDJ2jz%5{BQUX*JAtm2awu^M!FG$Zh3rIF{5b%(+30k{e!`P zo`qJUWDEmdr#4hepC+POvV4w-Q#^1 zn5u;u%0NB~zD^hRsoEaCrLkT8{E@W8@&kRdO-q;AmV~EmdeAG?gTJsZynPP_a`fW& zdvFnTn!R-oq=2U{EjO7b7i7in@xA3_i>W!zqxn4t4aUYwuvlvLo~DG7%&Hc(_h70$ zacJKg&g-ng_$UZ=3XfV`ofq}bw7V8(oHcmPQ&2?NoL=bR_7)8ScKeaZuUCa;<(xTt z7^#)v@+HN~PgEE|bJ{<42bS~B4c7^q8$FK(bK=}%XE~7OQ!3sVjqE|DsXR7tImY3~ zt|{0@U2?2-hG25W21V<~7B)Tu2(%u$0Ay*CbUT;bhcJ7=o7ZRLAF|KtFVN#0?HG-P z0)zQ{@BMuDF%s2Qxb7lyQWAE1e^lVSl=7|z$t$U)RxD5Vm)`2oB;;P27dUxP({xTmT)JZ)#G=ycRv$k}u_qIKu`o_3+@`#nD-HUURo zo6Vya*fnMRP3ZVx5}UnO_${)J*7x5Ds*Z*$<|{mMw4XPgoGDlN-X@wV@qXg>1$OnC1%kZeD4&>!e^F)_jmoCL+`P8Uub#^b$Fi(-VZ0S*^BUd z$9Qk$F#eQ36E}yZO1w$@o_y|hc)yGj$lKukaHuOwb_aMbqhPc59&PH!-fb{yhI#8U z@O_lU_vWMZnT`AwzW-_8mgsFpOS8jwt?+$rLl(a6-I-fO8fsip(~Ien5)Q z<6AR0-$jXOLO+KO`uPL-9pL;VLBOFja1J_mizb++%?@GP5dH=?28B|^nSj;mCiH)l z9ftmTmEq5%f_O~z|Zx!?1UyEIR=M$dl<``3r^ah1@@QZO9BUEz;oEd2 zpzoE@V2O7EzbB7(z8+#*BQ^K(C&*^^@FNv%&u} z^k`z7F_+iF@TGsJM}M&&P_{}nkGhaH6yuf z{1L1=en2%~uW5aOsrn@t&G|8yb!kB~ab7oK>xia+P3 z|FpbqYq$I>qu(U9Hm;V%RbAT}w(%8X>#)Bv`jSy#I=YNf;x*@))|s|S)co}<+cz9zwow<0KT`*^ zRMGMgxhBMK3St3jZIPG7@trjr#gqF6gyhT3m5q5!&R9`L1<}gW>ha$QYZOm<@;CAb zIeb)f#6*IB#so^RADCHi^vp!&3-Duhd(9Hg$lP;7i2}3#MY#SpYaP+l(qtORvruN} z7kVph9c*49&JqlaP$Z5tUKiVF>8SOU?qB}3EOxd)EF?zCW&e<~V7oY$&sF9>4+EAM z-=f%1wr@o>_qF8e=nWclD8~JN87GOCtx~P_+;$nQ#-G9*8i*rD|JfC`JLtAo$}WX7 zgf^yvy1b7agpldHG*5OmJa6X=eQ6u(N*N3fN`* zLUsc>*0i?bbEM%jm(Q?cRi$L}?%(t>;Z(iEE77@*sR|_`z4;v-vDqwpNMm%1{Z87# z5I>$V5=f3dm>h|ZS^xK9W|;M`5(efi#wYO$IaevC%FY?{#SokKoZ0nN*h7Zj5bsr; z8`QRQ<%+wmp5>VHKC&j4!+GTjj9sS;Si3^F1+1@|TGpB;UJ+eX1Eif* zKoajnAokK>0zm|xu}48K+!iN&CY!SD=gka0#vH_naO0C(Tl;y{2m&m)S~Bz99J?)& z=n)@Ii}peyFcPX5u@IAOPIGnBr;l4%)$HZZa8fJ$>;}{6&AgBw`2eL>L-MkQWM^x% zD4#yEXlHZOy$l>)QTInj9Mf2RVtL4Hc_WW|?aW7jVksR!ExxLL7hgwwXz_KnHfVF| z2esDxa>DpC1XI)#Om-oJygeX_^P6N|77kCaI1Iky4SPOi;A;6-nxBK;e+KKs+dpJ< zM*@f0G}4ak3+5;bW}EdNQ86_PiLcu*j_IVqINrtU6vlB`YpiI(|IL5n$)Hv9ZM9g6 z+Rm_)t_r|JN+9o`g?)0Mg%42%Ti!R5Ub0ekdwQI*L;O}2!F$)3lO2i&;A4tgYEJ#h zFpv|*A7_sKySg*sRIG!CJeNYAwWnp^Io{$p8=or!e3pHX!sinsEIt=mc^|oSC*Umt zUU2`SdF#ct`ky=9`Q|c)cCh7g&E8`{919WL(D`|YM%=!dtY0R^2-Bkd1Iq>%<%tu< z;cO7ZI=KmagW>Ns4QWo3b+|{WHlGOg@Z`84I)dBn*jBQ%)UsiHskml4iVVZ^Wbx0l)k$-F@0{h+53+04C2zWC0zkMwX3LEl^Gw2qlPHY)-!smLQ*wppwT)9!6nU5cLP2S|1+(=f}B3fLTZn3Xxu~)cu zIUQ2>F#X6+pZoqEb;k`pC!?30DvS2O=3lCOmCAoRAys~mE#D<5e;{QG(HF!?CSTL&YI)b`pV0I|OaF{jUk!h{DIN zvGZZNdHuOI^C6|L6i}z_&3UzU>l>!?B=!iH&N-IPnb%*H%JOniHQzw&EAaMgM#JeW z-;v3stMM~T?XzeJeRJX$5zm|NGhY^&yoarrz4}(fEczlWh~#IHFfbu)vu7s#pI}0Q z$ZA#k5}$mdNDt;$plNw0%@63`b*)t)(;KC+c`? zX@}L?qHd&uxMlWSPBUgX-9eO)|?-3WtlnErlt4 z?tYTB6W6^Nn_yHvmf`7lt3j)sJlLS4M-whGMXzXBtaa(-qM0_|dNnLEPd$?wok5h* z=$voXB1inZnqTbrJUQKt&s}EhgSPAM!&u_e%yP`#(vYr)zBER+*luM=R?)-NeXG7@ z#)EOv=gnaH*0OX)%`dyjUh55bGR5CpUJm&8yseDeMAV#?zcGr}yaP9XRIKz9EN?CK zrZaGBK5)Y)J3^YLSvU@Mfpj@KTS2*VmEF*!+Mlhk;{0$OfWYnuzD$&vU@iI?0_zAn z>?TgheEQNn0XhPFTYmYD<(J#8N>p{QY+~H93}Fo8D;@QfJkuUouIq#2LwxV- zX_mTAb*KD3rjuCH%dQ4eJ{ly z8MPZU-LeIZlX%gC?R0+Hd`oin{u%TMx&}A==YMp8MXgle7q~)M1N=FkkNO;H?=?5iq0XMAWOq<=jEo6z>GyIzN%Y8(TEs zt+&M+R|2ZGa3?dC?|oB;0YrfkV)vM5@3Tk@1AF{tlgGBa)$uI_x4b4iI=fJE7)efV z^CLh16UwWWK7P^p7OOZ~fsn}OO1Jvj$u>QC4V6f**p0(NvsC_Qmwvu&ELgwzk>oGX z^#VoR(cVBZ}bX;;7+)Iagl{iLGz^CrS%!gWHCsFb|fA%9a%|a(|5oR8oq|Uvv6nmfu?6b+aGZ~ zG8EC>asj4iM^j^&KsF_DJXK5}EmuD`4+DdRCL>QRKlsH>ra^5!73-cBmU!6t?%#wAC{DN^5v^Y)WhBWwnNt$2u+JjP13I zZYqCMx_qH6|7=kHpe!vTnqk@f>F^*Ik;v&8u+DgXwxU6TTdy!M^8-G8@r~#YAD(6h z6y(4kk@f^av1~Rd2cxrZjLx*402KND;wXcZs^CQENCO=+>Cm94c~@W2JgkkaK2` z^9}wHbNSDWVnI&dAZM9!s26JZbC7dDkn^f?KyIkv${;5v$az3HP*uoG!}g;5dv~6Xaa4oX*PGJ;+%S99^%f4LV-E#X~3k>q(akka3L?|PEZQM3GG%%89k z!_)4WLhp7DET(CDDp!zA!>=g)zWsff&E9a@Wcb;#D+r!si^`iN2gG;Vg?S+BgvVhAeA#H{8tB?SJ^M zkguPX)1_AvwCxHUwIy6)2S@wue+aqw2lm^)vmWw_HzJt-OvN<5+WP0)1aKdYa=FRXs*b4Bz zwd4;?{)KfidE&Y|g-YA*e*0^N#b<>Cz2rBZ)b7g{{E#|Lxai0JEThKIRXKB0)Hg5WJ zRSit+{NygowlsXv5s@d4kpFMo`Tx58&n?!?g^k|>Q=~Rtgf~u{Wn=X}00&2{b|BPV zecMzoZ_`yKG|=vkYBTF-nf-&3@f)^3%DXE*wj{DQpTd(N?rDV7|duK1CCmr-Ft1_7U* zN`)7x;OOUn?}yYAXoYc2ONM zL=tNmibp~I6};duI+UKod->jJdTojwM&W)u0_8|oI^rupO1t<>lFlH>Ocd$+k%4+1 zYoEENfl*=6mE#t}ol_esZi%tmt&sK~?_*W#;3S?96I`42A7Z)rX|Pxhffzn+{RmKS zVE67In{8&^{=kP89?o7PMUFpTI}7$Oed}uRRZJ;-7IJUu#pc6DR6Li8n5GIaskADt zz*;pK``DUISl(^2-&eFt3=-CC^zq<1p=r2pKPIhd>bFvFvR1scMOB(GO;HSPU1VmK zMxuC-TIuVrw5JeOc5()3Z-EO|Wt{73M!%s2GG3gu6%@tMwPU~h*de%U)E>rrzx)DL zjN#gS?eiP`3JhxsQIQHTXf-Rvg@05-R;_gDI2cc2PIOr*aEW& zflX8t)@0MIsmbp&5GEJZl?MxHO*?&<@w%33qi5b19ir{t@^^xSYoDV@2~+Dyl@qla zemBUKz@iYV)Y0wYDG5Qbyz<0|yu^SmJa%CRAj%QuW?gd*)AI)3iTNs;sF}^HvoT{O z5dzbz@o?QMf@SJL;n}f_vI`e5#Fx%yLRh=gdr`aS#^5g!{O{YOuV7|jT3+-=oAVU$ z6l07={TnvuW0a`KO?E4`_GuVT!|c;o zp2qT2TU1SB;XP{f$G*!$mv{ZK?=yJ-X>vla<3OHG5+GN=5|U$5e4$ZfZVpiRIhjUs2v^MUCkuPYOUcS0rc{WDCfB&~=7avQ zp_6%`=H6dp(OVv|m59&ZYOeijYW}99#r|q;M`-!^`$53+yZ?;V`t4s|sMrMDp;iu# z`|W?!L84;eyWjrH?ekFkeC@$X7Xa`>X2zS6m?f*iwNDAA`toN8J$2~&WSr>hwu=+d zZ`bDdH+`9SfQc2ZlaO|cmzS8jT9fBvwYT;7rPAzX`?CziW%pQtV6_2;=Bwy8*AXwA zsS|4WmIHH2SwRYZ;4#Ys|9E2JD5S0p+EI34^0>c9bu7&gY@nyT$yya7We~EpH01X@ z3~)IIK`V3-f4(EwsaQu0N_Y@Xii`E3@LBQ~yM!Y8X}L@Ki0zbK;pEHa~jcR+(bJ&0Q+YIXtO8#p>emUo}K(@jJ>U`1L zxC^$kv20TN-O{HbpB^CCD=DZSPLS4hq!WIhaR)NEOsS7a^*eQ8a239Drrz>j)!Xv; zmA*HWk){3PpqzY~$W|iT1x=>e2rzWBFxY52Qm&m`@FSgRg>~5Tw>$tS9xwVKJ{2PF z@r-@aj~vT)DHpQkdh%k+^`=}>%0e(ceq=bXQ*My2_RiwPmg}f;CuEnqnZ8qQ=FKWM zi5FY$OT<=Eu6pVAUfkc7(+D+tf9J)Pdqd?u$c#_0AAvxdQ+*S%Wr>q5n&E9^%PbO{ z(BN*e@**7O_@x&4n_~&+;8&fQwFhr@%gy9jLo(*n>3frAK0hQQ3x1-ebtKU712}nm zTsI=qK~6N0KUIGaiQDn>oW%ZDkeBc-R|y-C!W+q>@14YNMs!?M2fdrUV|W!zudDNA zZw#}_*Ls1R*XvSP@A$i!U^S7(t08O{%suKyC{!BTE%OrfZ`feB@Hl!({4%QtpWi&- zM>UHq7k(6CXBPC4duwJVWLxJVUCpYpR;UN|+NFzAeC{@Q7?OU8lOHdTZaS9Oq*u&K zw`(HXcM}==kj;rs z=UqP;PK5tiP$tiu_%2^;_Rb3mNf>j0hdT?LQWVKo$%MCiP+^;?lv4zF$C78kD^DEy z-IXf7|9bvZCVJ+QQ<>sOyO-qq3CSedvqny+|p?AyyT}_ ziC0U$SGZmNhG_BPB)Uec_M`_0Lcm1SCT|ig8ZOQBQ`LtV2yA1rrK{-?DK5@7DQVpB3`(cMd zw;*CW4?roAIp*AF9ix`ssp0JBP1{@QO@i(x|WLVHx8KX}gp6JWCFz8?@Y?UhfhQt&lT4&CSwx zI3I3jCTj%bNq)3>fE8J7)(Oo6@)$lBr_kLQZr5E5yVk$vNOZC6{mo3gE$$!q{VT-} z^=-g*S-@DwSfuQ<|LDt^KOjaSy1VdvBH@U&tdVT>2NWQ{IFancQF?jm%pgn_6-rGO z8yh~LC)Z!%XWqneg19o!OWy>F?)e2)2$ez-W?;EPtpB7=eBtBU|I|^u$)vQi-1Uih1m2r`P^ZdsUc@gT?LbRcmhqBRPi( zj__`@p3%=}udlOh$zLZ+oR$}HMpa6V`p94HvV_bt)9n|)Eu{mSSRi7}RDFaB(0j+m zTuR@&>1Vv*^2{s|AztEn=CpC1ReQQIzFnO8Avlw|5YVL`40es`I8tJ58*n&{WR7y5 z-@bz$-!?N@7cd4`v0|ewXP0dH$3znGf}AlNHhtj)$EIUdLH;V^+kDO^2Y+8zBQ@SJ zbs7H6S=$V}{g}JfEymHGIkgY=rp$fwveQja6ZmJm$-MpptjIi(QfgKLzj~R$zvWj0 z9lz?;roW(H4g)!2TDc5Bjvaspo^;GhU(XDJ$p^)Z{0_$@S#8H9$IUM}9NqmR15)Fi zUYqIT&?1dV;QDhEeeC7Az|63~T&Rll@Np7b-c(Pt4{vt1-KrLVwm%pA zZhx??q-p8>S*|N{s0Q711ip*2y40U}_j_I1i!L>4PtsIs8C~Pm)?~VZU5Bm&t{x*? zSJM2^+<&Va(bCjQr#_*H-}}%rQ&J!LqSkf&AJlKDPq#<^>&?z!KgE})ep^t;(D=J% z4Q6doE@_NsVs&MG8KEdPS0>tz^P(jiu07Ctr;wWgISRK^8>j@OfLdD=LWL#hO8dp! z1+uuds8yS!I=fTSJbqrZWbwE+NK_e{sr^`UEli~4@8&8{Xt{Y7y`|iZ$}W@JM`u;16HAiM7w_y?LMD) zIMHzb_pK~ME14o~^_I=JyNFEc2%|L8NcRCftF!}FTGeq<`oPOp5= zC5%<(U)=N1bmogLVK)-8HH=Lox6v?Yaqpl^o>{km-ZgveNzf0Jb;Q&(W!13y%~~(c z)LP_HN9u)baA+eyzy-BZv_YCuYY?r{LuT_6j_^0=3pm}Oxqe2_KfSq)r*LhZ&C1#g zh*7i6X21`qAGii3lk_@;g8GU4DvlgUTCtB#kHpZ;^bdB>~8)v`hoic^-eO=pq$qklvt>q^l<)`IC zD~DH^C3gh-4+~?1*nc?BE~LS5$n5UE8NVgFzsc9YhU|D?Z0+_awY5J%?WG;^*QZNm{Jwjt+VD@#33M+ zV>EM4Oqk7+dwjlgNcUZZ3N^mp<`O^T;(*MXy(T@9VJ>fC23V8jBP7N4ZrH$%TVviT zHneA0^&(tXAPQ*qo(XE3ZlIFI*5|yNu6p((AMs4m$NHlHXZflk6-YC{P2SFNS@F6I zw;|YT9}_xPaU#=xo3*9vla04YdhWBaqw3ntsYRqh%_67%6Fbn29_`xR%T>2-@|mvM za-y!Js@+O8>2u8utFeWkNW4Bv!!HmX<0%2KYuP}h2cB5RH zxxSbQgo~#ny!Gb}4rfQE($=-QQ*tkB@wRApo$y9xQa!c>GaWYTCK(yi2}*u)MZ*w3gS{AU`r;7g<=p zAwfT~u=a&={XTiSVrj#|Iz(@sUep^FRxw~df5>jUaY51oy?Gn;hVk2a$@-Ch&{Vb@ zx;tn(gX)^dQ354)sJsK$nuD$W1CsY4HP+Ld`KHDG&H=b~{{gv~W94SJ?t4C(=GxJc z6A={Y=NTOENkrEyx69WQd522;1!(K67Zjo zKIKX}`|g9Ok~u2bsXx$amuvpZRR==!W&A&*KBRJHUU8Fub#A|LneufTC!gV8-=*ZbF7b6y|N4&6lIuFg zzlheC71p1IpqgJ8t?yXDC7aV*4z=x<`|Zn1B<8TP#Sg|G0T2H9c-~iVe*3h|alqLe z|7FMB6Pe!#L`$?~-O>F8=}* zCo5lBEDQ!d;f2lz3yqKV)Fqk8`h)^@XTv`tazxCijY2B+e;9Ut|_p|Ne`-f`I4fx@ua zcvVNu^*imj$+sk}4=^+(n?!i2eF^V0n!{2#>a4*Iv37(aUCsxotyc)a`>#F^r23I| zByqFWKY25+Cx)Eb|_l`x1 z7oBI`JP1p%Ea_^qZ1$iV%R_TY`DJUcB7Iu3pQ@@{Z zc5g^#S@hDT0sX_FsQ2qcbc%#`1jWRH+AKpaVx;=onH;{VOHrz$Ptegkex*99C6vOD z=b1|iEux;S!o9CEd@fB-<}+4Jvq@=fc|h~WJ>G6=C%E;Jbu8+;?YQ~ghr8pYx4C_| z_Hnw1he+brScEIOx~&Eaqd6I529J^FNNZwI!h4LeT>VKw(0V-}@K(f|L8oC|7@mGQ zFMiKDis_!k65bN~-=Gh)Xd7!PHKHRvBM|NR+=o|JK&M*sV@kAY_;S5*U>U{w5}OZ1yVlz2TES7LrTfJ>u{7j4*W>#c|M~L{@rXjxO1QzazR7nA=N6~ zIaTW-)sj=zVa;rneZD{HJ~|cm3tg+huLe@hZ+o6R!Kd0#K`u0zSflQN`H&fMx7MJs zD&4CS<-l_^GV7_Qb{*f#yl%&M!U-&Wj~WM-v<52FE#lORb|T{hlA4#a_!qZe&nAcHPeaTPrW> zjnBR{D=16r|o$h(+_WCmTj52Aw?m19T>>^@rQz)h+ zyY8uLLQP#TMATyMn8V;l?9{It)OFJXhjc&y&yT2tT^dVT>f}%^w!u790qpTD(u6{dnjLJU4rXpiGKlWd`jntVkM|{QYgSwB}QaAij2%!AES@ zWp^o^BiSJ;D)qfJ(i_3{wX|d#a;=;|D;k%LwzfA~fH7#f$)zN?e%F|G1M4Ss3{U5h zXSmvuL{nLVW%u<@?^4wthTnbO>sAod*Y0w*-evJ-URU@hRMa$gG*ADsGsA!SmT2*k zXz_xI@N+9G+I<(TSw~p5F-3Xt73`&3x#36tc_v?{lid`S+Kv6u93Nop0Z?7RM%s-I z9}JW@e*#$a9?>%!ESATj2ejsQQWwN#HT1PF*lIDVVWLA*y2!4VBEy0&l`4qgQunFe zdOw>skoa}si{hAN@gp!MbVOI>=DB&7CB%0lqh6 zXBotxGYzfcz*2nSAoiRg+d?5K*V3-T*5!6!xZen*7Dl^!3n*9&v|NF=(meZ%6)yiG z&D=3U&y__8|A0?hYhI1ouUQy%GkSr!pJM6yS5n{dmb++S!T@s`nF^0wDv*k^LF(c_ za?1CZqArMPooxx3w=|kMVe00K*-c<1R#qTaia!%x3X{UT`Qj>JG<|=$+(`#3V6?)I z4(PDM@S{8VSHk8_E@;$VW~CN2u+$C(Hpq?$jr&eNu_yAZY3N`kC`QG%?n5mGvDPnB zfe#cJ{?$~XjSuK{GX@k&sxWG;vBT1sFPI~y>o9)?$6z! zX|L?yVv;hhN~l{t<*20iRcgN2OkJuSO`KS0$MD2{SLU9Q7_+$`TrcNOt96)mbEZ_(ce#nkU>#Y7ijJvYU>=%aI~RX)2gcorkcS*VI|Wo7@a=5^LfIu~ zTjexdcNcIt6-K96$}Y^_U$taszdxW`1(;)suQVN=&!NJ$wzq`g9t@JBy9o*6uvh%0>* z?=pl)Vx8hD?MISnaL)(2>}AM8)59foRQAI>`;oH%25sfWi}`Sk_vz>q%wU}T1Q+jx z=>UiM)sJ+eFs#PJR2t3WKy(oT@ZrDn9d~x8#B%HERDb=*#`dYc7E;Gt-d^z-)|AN- zp(?F|HFNXRuB(vnHwewsc!2Z?A4MJ?@0`orEQLi+0ET z{2SUqlFN1P+)&GYy9PG7qogy`EG)Ib`2zaXVkf0Xv1)cVcc4eH3`CDQ>l*YZEeS0P zva4u&eViH6nWo%lyM=4t6`8WXc1mhA7hPbfdNK)SpM7lRe4fQ63(W*&G9OV`Ywx6{ zADJIY(ag6Os-k8fa;LDN={87sG&7U62W1iq81tnRL4$^SP1OA(t+BnN4ECZSI+x{f zuKaE`pQ%!)sd69<*;JFyD$sp~`kv`vUunc@S{iq=(_XA?9x!iQ+ScF1_YMG#V7@s!weR3UTHO ztN6_q-X_g{tj2qJWU8l@OJvO_#n1T3@ro_Kox}YZ8eA9!@pyD9F~ucP@t`@MM=8e( zLn<0D1w4Xa3JYUL0mMCg*XeTinu91_1_`O4 zc4lvKblgKs;7c)q6$l?k@9w-4vfjpf{K>KB0RsFEp%K9M7l)&&I?9X`r?Zn%JgyWv z+$#-#sr_ca3fuCvk4{c?;q~*>$t=EhGhraCj`IR#CKQ^>DBwq$w%Ts219E*ha~Y>O zh5R-gZFw92Cl@b3Q8I$gTuV!4k=mg%OcF*R=uD<3nep=@CsE#w$5<+v*SE-^!L6@c z`2w@f9+yzMQ)|!78kad6f)1@di4Ju$_mZg-5%2$oi9GW47Td8d>5i>VX?|BzuFWVB z_ziyzI31U^wsitPrH$5~WH#O?XSGs4|2`UxhELo;RB6_i+$R5u=7b-)5C|OQl+!q8 z2Pwx~J&&v(PW&B(_7~P=EG_)VK~y&XuCmN!beefwXqNsAF54)wagK|Livq7yC=eXE zGrRdL$}oSIuL_n68{+VUHV4>*69z|t_J2y>~dy`!xM z?GGsbt-28}G6Dcx*DL4(F`j<~MXbAXQ~fXho&MhkOi)T%q5qzOw6`binRhu9pdLzx z&#@51BdM+j^23kZo859&*Y)*`UVaRpX}Q~s8QHdfS@UtLV#>0f@gpz&a!y-g5#w*Z zr(2M8xOS->>q#uhnR+W*&vFZ$MX`%zSK$C@qzZr>Dvk$!-;2>)3KbWTZwCAhDsID* zB^woAQ;_nxv}YEay)6}Rnk-y5MZjd1Gczcj$Zr03@o@;>YPn;EA6fi!YW{5iTGQ`m z&A*k*Kij|cW>?rA(@6n3ru?cIbr%)jc=IW3*Po_<#c7(qi63v}I^ho;HcS1;C6wP* zcQB7>WQEPQ{!iH4mF_rfZs7Qd?;S>SDQsR$ckk=}JJ>8EtU@+6@1-E+=kmwIX{zm< z0-N!;r7gL6r1>=!O0qxjyZHQo@D43Az~{A_Q}~>zAxo@ee*#pR`LHQygIqacEHXEe zo17q}e#OOE_)EoKAtFa_%5IA|%Wt&h_ak_N>-v#z%2N1QHiR$acc7MbUF`;_AGv|- z^m-$EA$=ojS25Yhlaw$csf+R22D-6^x`BGTjgQRj&98=;m@?UKxdPV_XT6(zN%1=P zkBh5uM+cjGx*SVJEK01>`p%jbN7iBai4o4{a+vNL^ljI z=ngOvIw-T`irgtP+a#|q*Qm8&2hl9zmwZg|!`jlUZf6ZzTYfkhpSi@MD*HcD^)FVUq zJm=-jgI`HDP2etDw$i}$q~|eI_uUzL@Mkt@hWYh$`XoixJBT{*cPKRbPP9?k#&LO> zn1>oTkHklnDAPBIe^%ntc3p`gfrYybm0;QSy|+)0A4z<_#>Z&K9Cjg-S|3>u+ePjf zb)CSrss1T*07v`xjjyTf+z&GDCC5u)ckU&R5_M(A9wLFi)zqz8VA>F!v8$+LE`Dw| zXL-<~ph59Ul)B&1v|~XD?#aOp_u3d1DLe2!sbO9ON9u@rZ7uTQX>)0)Ze60~x?LM{ zbAk6$F7<+B_FOC4$TrJ|>z>g!G0oep2q!Ph4ZrSTp}MPyeaTHLTHXrm0*Ra=Gv$J< ztv0ZV4(JJ7PVBDITs`|dX~&Wl+z$v4QdIy!<6=5#VhN^kKSIw3+sJ)Y*3j~&X#9FyN|kp23?;{f<7h=$Bu0o?3;M3R1ZoF6=zXEb|QoAI7ndnld{ zNxm95$~ADC%eHHe`(5@#WruBcpV2&1;}ib0=Kr9VW^WLG^pku7-jEePOZtMHbGg2E z=l9a?VnY(YT5+k4UC*T@FQRJ1Mb8R4vC9t+4r{mHzO&} zp~zT@>`)Z!y>nYhd6nA2#=#$RDoqtPX^T%vm{SAerH<<={we+s+0ACLTC0CyQtWD8 zBVbd@LzZ97w*7kEe94Rwzqb0NpI-r}+jh^1I{Ns$`Y2J?dTfeHzJhXnZ$E0mg^yU@FE zxIF+jFI@9BIMB(bCQem_39=muUE9T;rA^JhcI&u~b^PW^|7hLfSUZmrmG!-4-^Hx7 zCF);<)ohdO&wb&(6|4sG!nJpkS-i0_@x3-f{vYz*JU+@IdHkP{01?qAC@b-fYt*2i zpr}NGW*~tXm_pa*anIj~^`th&tkC$ei=jrb1?yBnQ>ZXCxdPk*eYL z=z4BTeB1OVnCwKk@F5L|Sn=nm129<{I$$x|^fAp6%6w!XLFj2G_SZ!|3`Q51hN|C; zEED5&EmAaRsWb4{x3wrBqFnyzo~~wM2b}%jdgYTKh}A>K^#tXdJj79^XY0N4x!hc| z(_%pz#~Y7nb~tyH`CH;y?s!mwY~1yMgp(xJv7c3)gwYo4wXODCxDVvF6Q3gf*kIyi z8RiX%mQzt=x5xzBAS##eVKCXdA$b8H@k#^|11c8=_?UU!om?+AdsveLIJ;xBb;ads zT{iaLA_89)Pua-5?axV@qxG@UQaJF zbTIbFtq3*k3H`;bgYN#K{n0H*C8IN3$OSb5l3OuEh4U?J zuWPE@jUxZZJyn0@`jy@rQ?nX*>)*V{DgGw#2)(VMBmL<8KxrJmwbIhO4l$iD{-nM3 z8&XBCt4s3uAvwGvP%JTCz4Xu<>oF#$RNcyeyD!_U?_L*s3+uZ#WctjUj!SWAfK$P_ z*^#&~yC`(P>OgWIIQgA0(QDF7ZjByaN|c)1Gt0HGYcr>E(u$Z*_a;;1BeXZZV*jRk&Uj?+ z%2dYeBy2HTMF;s`R0GDR8n);z{3lIIP3v4{-%gTPjYgzO=m@Rmo?p2K4ATofcqQV{ z(y8ak!1+eRjMR@-dK4d)%ZFwCo4>KnS;S7;AI?6&cLi5mvj69MmHVnaWxXJbFCBl& z1K#+P;w!$f#w<@SFnr!-d`kLa(wo!2H}W4I%%mTN`ONq<@egn0lZoNS(AzGh4pexd zLG93KFON<_C3D$|>&8Jo)Wfx#<*@ctxVX$d>nt<(>PYp3RGz=b&~vM_4?2oGcul=@ zhMXa^Mo5ZY9ZYr!r6y)L3%)FPzN9$ zybjj61Q;#n)UpxDeZH0d#&;_om+!IEsyTpWMKt$gm&GxHJy>JLOcvEMv`nAhnVeX(=C`k3S;D$~cD{>B=@VD3J?-_GQ zjo}rcbIhicB#2gJoU!Fi-Bx zM=)%2u==^&ycbO1)f8|t{}Ch*Y#pvsN<(5wc`z}&!UIU(5pm^M+W=rCMuDy2)R6c!8w;a zb0j)o%y)7Ty$evz21)-TE3Z2q&csWK{?(EEcLu3Up>ZXZ_5CxMm5vk$CVL4YgwF@K zbg8l1@HZIu2G&>9)VNZvggX-#q6eqmPt1a!x8hn?R9Nwiu$Z4tYa}L^cVlx@ zrPZ!yTRZihM6*Pxuvzohoxtd|T^bUf*5QKbiAI+$*ZG6WKouQkR8gxi2Mo=*%AkPu7hq`HN_MCZ3tPw0c@)&*@D9!Jing zP>yyX45&_a#ZXy8;tR2n_EThcrB5#YVlDK<;14A`dO{|c8eS4PROrYBF?H47SgC)L z1Es7aI(17X{CQpCE4G7CwJ{&!vV*FZ@Om^JM)XNt5TI{?fraT4U5x>XE0gcw9O)AJ|kYdtf?qK^nS z;B+Nx_DhrtCC;m?pm)KX~sCwTH(Pu2UnH{P++TZy82;RZ%-UG;O*9ttJW&@Pmu zLg!?vcKg-z4P#ORkr|FB0L3|`pg&Cy=cVs2=^Xr;ncv7)*7#rcI@efU#9wpV59SmH z+lK4suOvtM-8t@Dhg3**Z5>_-7Ko%eUqu1OiPJS=2hzOgPacRn_*4x0!#d8mhmDERspy2wZnPBAHF5e|eeiPX9Yc zufX{AY8puOoEu2RR{Gw`WU#X2(v#M_l|Nj;rXMzh(TSOxgmtI)&@$*fqoqOwmoK_$ z;EeGhnNh~GG%tC5+--L=K{SUkXD*t*ALME}kAe%Ejodqi2!MI=>=w`6(>#CAg1mNj zFQ=UT#duhF80q$D|KeQ7=Jd4_=6LcDVQ5Z*l*upgOyw+UL-3V=XnrPYsAeO_>=cVQ zoXYGtQI5KhT=-OzQ!A`lizM{6cp8ZUVOr&+T=9zocfea0BTW@Ve0d-dt8An!V$~Er zNee%tAKmg}a^+8#+s`dqktB&mBsTcle^bpjzZP4 zE{CJV+ae7f$YmPE#XjK7l_$!D6@XHCC{-1k=zW|iz{ngAfpXu@i`!DrQP`- z5NKL*vu;`>EeE90069f~jB|mUqKplUF>wTmVC2Xwh|w;HF*y)}4Ty^a(MNTxxKJ+E z;RTdQUT+@T;x(k33uRIc$_CCyAoE0N$W#}^MCTB<$S(Gqq66`Bxxcs$hBz{g;hz&!F(a%N!shdb9jXtW4Ze`3w(%#0`}agbLeOvnp6` zDF31r{lScjkBU_irNTXA2SJb3!qtf<^gtOWQIV~U4BCY`0 zPa29Dw4^fIPAG@~a3M0geML$K5HHS$D9gt2zs35H2_+-tb&1u0n0mBsykN&|!tn2h z%D)Y%i+6o1nA&I8U~jH@`ydcaSJ^Kz27^Vd!Rq%SU&vzgWUc`zvSzoyIsTbj8fk5O%`iQDM80O#smA2P~{jRBB- z*gyuci1Sok*P=iXiy_(AVa1OT!K^`-;j#P-q!o9NA3-y4<|fk+uFUn#+$8PLyBJJ6 z_H=Hb?yNpWdp@T{dL zY2e!oF#Ee>q=D$mUJI*eVUf15R$4g5ik~WSoTiQQfk30#(8yz@k>+h?#-OoU+LbCFBA8TK&v~RT6K0@1l_Nm%F*_z^F5Dm!1;KV@nS(Q_*_*fD5G;9_u z#BG{9$#|!UMW%`J<~6an{U-jxxq~LEUg@^;{B7DPL_=3R3kl;Q@Cs?*lSc~zMU8YD zIEe;wifEA$a)Ii*RW#8|?Ap@I)ig(F{fvq{n)w-E5RD=LJ&Hfer)?Or+}TwdDgDXf z^XPWk>DHXQ+lXJcwMR>9yJ%~lRQYQf>}E1ZHPT<&ypbxbc#v%=(q=umJNz4-mP*yu z>^}eu>dTvlTEelnq5h1X&NVbp)}bz5caip*DP_hNxj`i8l8Glkqwm*W!=vjF)b>dO z1jVjAECBmGa+(HAdPM&okjiRqJP7 z^s?&j%%!5$s1m zo(VS#?u~4HiDg;Ddfj>2B)a`^>nq{oJYN+78y70yU0gYuT2G-aY8@RY63IZV$f>8W zv^(P63XG3cHVR5Sz&<`EHf~d&18A>XgR|A#>{c^LtC=X(ObQg;Vumy<`WBF__*d(x zEag@vEzVXpp#94BmAr1BCS@yY(aIiGK|+0QEpXQz0+L!+$}hDVd9kO|`n*)IE%wfH z8#6DzF{AQoy(?SmI=9yQ$x5v^xS}CuL_^UH<_vpkT}K8hemrJlr<=?IAa-d!_`gU~ zwngmhyjourB(n&SfvI&Z69Dv3J_M*s2M2Z8ymPqxx72l-TUWDW@rd{pK-OWVW2r+LZaOBv$xikk>qQwEtem@R>&{6 zH0H{)9y*1a<$ON1K9`5ak1F?L6yolY`os#qb;}a}qR;oQPkc~c`lb~ZYt{x{>tooHzm$jSxADVNOh2w+JT{BgI`rV~BU1zZATAe<#V@w+ zWVb#&w_?IZq46WjWgXldWe8n*Xoa*fadP>{R8LWMS58Ra!x&eZ2w)Da?b!x1dH&O} zuH39oJTEPbodZf{Zf>N8=>ukN&UJ6TtL)xJipZ<_qE+-SJkVdgYT7rB*sG1)t52Q8 z#d;rYsY|S6Q=dQ4YL20pQ=d8mVfgWu^qnRj2DEaehf46VOQ>95{R;pEMyB%DIZYl- zoWVT8uze2UuH0i^1hNIo@soKKKb%v{gMYqq+k+^m!lxKAE^?iOn0jP2V5~80d-kj` z91?{!rc$jjDCZS{q7OvLu*ZFYg}3_SNLoLtMPzV9=EiGW`^XWzooW1p&Vf8rpBxud zo5!!JQ-4OAy@fcN+1R*BJOt+~k3Szz+mwpjDy5yJT|;Wx9;{OO>=ERKWI{`s)9gbC zjpo#xAeJIsrHnJHlvz@ZS*1)rmIuK@-pXKir;!Z#`a$>tS)+WL(`VAVw=*9~O>URF z+0zaK0jaZ!F+nY5RWP(FZ|0Srd*=dq^Q;#)U1F>K?0^b_lDqj6C6!jZ3~hu}zj#MSpV@ zLxsoZ@h9W_l0PmzpC#FszG;r2f{UHz-{A9=Sn>bxabYzU=cj>&XKVd8e+_eX*#7tU&mP`Aki?rr$U&?9Yjk;uaw~5ssRBz9JJYMT zAS!?FqwdwHqgL1~-@QfuAe9C$wAy7ra>RwixLa6L&`T@!G~cDCN!k)@rMg-&cwKgO zQOwcr{%f2w$eHCA#b03NEI|P%^f~`z843L4&?;e?=th?2D=9FOi*RLpnf%FzA16Q8 zvdNG9V;!xD+ah)EBP-xuA`Tw_N+7!6exZyNBeXoTkTaru_Fkez2=bn@VzWsLBsGuS zsY*uP)FQijl8fDXJn7Rk#}fiYko#hP(%b^)vSU8b8r2HO6--=G5lXD#NEA`AeNI%m zJx4I2B9*Nw(ogANY=5vLxEn=H^|%r$#7V0Mv1RjvH#z@3`;I5B{~CKg3OHPZqP#`) zw9jc#u(k98HhJ2|6e*Qkb33_wTT^jGWzB(+ex5ww)UzT|W6j}DYq~|gs;QXrq2W*K z!9|k?S#yUVcor9>mr1+#1`;CCE=Ngl@L6fC(iwP)#w5~RHEL3eAwP$-q)%X(7E>aDr!Bd6CT2qax=KT0E^c9?kMlXagvm&yKHcG+O_YA<-6_YP#iUMTBs6wuKQZygbAAI~-@bSoscJT2;79W4Juj;!kJ|x~#;;Q_K z7eWL_bGmo|Hk53^XJ-YvvYVmDXZmt6CTZH>k2! z)*ae9RGBDX&Pyl-Lp_Ot*$}zXj#VmZy!~GWJw26Ih_}q=l{)rL{gsuXh~2%-IS(92 zbSlarGXuj#4!o5~Ld|DcX0qbXcLauV?UX6;=I3Xw;B+5i*r+(^!$L9ke&hS>HaU=-N{M`g)(@-EVh4(6A(@ z(~KmL%GRyTig2uriCHo@h4CPSrwBQ{SukhuWj}H__8uH z3bb4Z<`Vn+*0%V;E1x%BHU2tdR4C#t4TqZE<9O#(%oQ#_{_p2*eek2)OZOA_(Zx$9 za)JHr0WLo-5bz9FaHHHP;n#VROSrL|<@I*Ck#&HFLBdJ1__8nR3;tx2fEmv}iT`@t zn?-e&|HSbr{C8JNTl{j;A$vI7bxfB3&NTT&jc-V_8hmfn_*TENnj9~dQ&^2e5S?Zm zvq4XAg!YB-wqi?MavbP*CCosb&sO@|krKImC-qPZNLGrb}&m<`H&v{X7TejtiyfpYr$36Uee3QP}@Mj=-{YqJjq((#P z+vU-kn;#Dvi2hSP7GWl7q??SJEBZOd?j_T@`#z(evmy6x1TFhf)Bp$HmD-y~CBV3o zoVfM_TftTQ$t+iA%_Tf)aeb^gazHw0+EX{HlQnmwE*e6qkwvlP;mQ8QvQXlAf8)ko zA|JMN>eeRt#KukCBJc9C6Zt#EmPb~`*F4R1>5J40{#rWubg6qe@#5cJ!IeGh!=ibj zShbqz%UMB_^5*AxGG3{yn|13V$hD9bETC3d#T3Ar@}z(`KTY#}=@xgqFp-pk`oW?{ z$vL5u`$3F@d&x3>a=(Q_CcB(BXD`;S+P|y&*>Cb;@InC{TQ5yBg}&OuEhM1qkG(eq z@j7qLo2-Rv*0SG#^qLLU^)gd3uYK&jS!>6q>fUtOxDe;M zs!Y&a4gzVAyLvfD^y+@T*61A+r$s)fuKrsh(cYH5^ek-n3Z=JM@IV~-uJmsmS|v7g zYzs$gZ<&A8aHa9BP0~pJJo#(Q9dKl{rLneg>j_g1=jAx>-nTGuYI_=k!r=SL;hA@1|*TM!y(H zghQ?ZmC2hQmapuekhtL1sN|7uJ8zK5*eirT7x0!tk@G08EbT|8YK{%{UT+_8gpM8V z0~YS*8Z#OhN(`uMNPO#jE3TU40-**+hkS;IL`T_k7{p0&W|P%5^T-hEY)9D9wh%Wv z=TFH7El~)M1XHcPNO(fumfDhmEw!DQuGARhyo{SAlp4LcA--z*Xlw4NzQ)Z5TCoo) z-MG18%JG$b-yf5 zqPY(%65lsp{(^HMuP*=61?$>jP}AWgzYKi|7CHU} zx9xO+FTFS8sd4k*a3ARuN=cyi=fUb#*6eCBJ}t=9oh~1I^Vi7xerxVYT^ctZ7kRlM z^}8;Vlf6-V+yjh-ziHgOQ~1l&h*ujo71dg|wKi@ZYu&P_w)EvlxAi5rjywATU)S*6 zp~P1*e{c^I_N^YNt6rruK)9`$+}HwI{iPctA9>j$Zw0GgvZ5UMnF;m&%2@oQ`#{GDL`|*$R@k00G zq3*{xAI%9U*SRT^b~P|Ak`%EnHeKPSoaUySBq`F=rfc1l8ciWY---<&(H%6o5i7%I zUk0W9#NG-#ei7qXG>Zd&jl}GV(ar4=Vo%L}AEZ_vF-Yte6WU^uraxA=L>V-c0*_d83qt1X!_&TwfGeIWGZ9@L& z@{D;nr7q#1Uijzzsm~Mu&%cqbHPsTIZXfZyn0483Ah%vs$Q-FsqD!QkY-a@R%!xXK z?*{0m3W|sQ3VP6&@)G9eW5l+0D6|;r-M(~6ZPl){4b`Ga&)@%vLlZEI8J2+1= zA#om+ve7F1o3AMp?|!9F;=%g?WONXS;By|sK4r!yJlyms9YPNGs1rGCub9_E3Gl!e z2=Et-;r?fY?HZ~-XZK&;aBHs8I0TX!6b|FpV(5xQT+|yBu5qzoPMX^=kV?qf8*DjI&v=pHd7bNZ7xVc+oH6Kxl zhj#+ZYq|L#Q1ns@H(T7wuEp=JI1aVw7?~qmXbm;WHtct_VQV4>8+xnb3U19e_DFk# znvYAVr1Fa1>T@IgY`li{#`i!=!6&v_5yZrLonm0EJzan&qk=d{C?Y{Pp!-5O7713$ z{0|5A$ezZ;&{A2lpicy%S62XPkQKjBfiW8W!sN-x>d$p0k&gbg)odGN= zd?4|%8WQZQkSJ<3;P#dx;}i=dt}c^}{#Armzfn8E>9_ z&Z$aubbSyqBGt3sh*b9q+Eo=u6o-m7GEf7=0_d?3fyBtt0O!*O63NG<7V4C60Xp3z zFzuVwKGDn`BP)J7RVI_7%ZcI>)PXa!Oi%imkSKEolI*Sj@~9Gy%y3Bc7 zfyRI@^}TFQl%P6P| z%YoN8W9u$fTy*P};aj`449~zZYgx)tt*AM^?+^ zklZhoSR3s9x%Y3dL6J4jHDY#|_VNf;?l40oEJyjr1^nA9b4nlzc*%4cak^WEOe@#F+ua zslW!$Lc%H-Pe|wtf&*Or4m{Z1*iD5&^dr4KX|26%h1xGvPkNyUxX8-bWjlM5-qQR@ zPw+U9R;$2yh|J=eE>l12pH9Ma40S5BJI~p_>&bhxPi0YLXFWn3k;VL);|LaG(BJu- zKRNlB?S;b~pUe~ZOq<+}1{k$qJAx@~gvj-q)iUh1#thT@V5*+}P zUr{5vtQD(PQInnT|45XVh@;pUd=DjyVGNn?QHSKT5 z%)8sp_T_vc1nCf0zeQXLrs@C#h^|y1<;`?&DN>m3TU+2D|Rmpm*;{JX5C$ zwd6-WhlJ)?E{VUbBGA+B!dx&e`BaZk=83&Z24=AeomW4xV#hLog1uh@uYp8Q>?LfA z9?#7Bn*Dx>K<){#`mlu)`vEiAanzQb-5~QxARW9_sGYH3UY&zZCbX*3_7yYHF+qdd z++@eZTH#0>SPmb(e{l60D_$xbmZ#ec;oZJ#FdtzrRcTBZm)zG=ETN>a{pbk%CW@=k zRAkHXFqz^YjA$thMN6p@Ekz}Fu)2B5exjj7%G+uu9(`2mraJbCsgQ%7z*WHI5+ z^ED%-&x7bT$7NBE(J*c+W-zBpx`qofEGbt9A!y?Oos8ByEJ^L|HJ zjN2{S%=7dfn9TF>t#sV$zfK*P{x-oWx%RrFF;Dw@zMwxsFT0b>{~BJ#IwxZSrSnUq->K@50CTxkb`csfjrXm#-7Xf#yV0Ti+&uTNDI0qH<&(jY$ET<7<$ewffn=Gp5Y|@e8 zDF>@D+`>w<$I^IWPdT_la;d{bl>@mlgl+6AgUMaj*PT>^m^_{7ExK{66@Q(nRRZo# zLj?;a_h4Jx`nnO4<7mwxlj1HkBD|kOI|NcEWdehCX9ZDeT{{BISWVrkmxVjc>Lk*( zz@syBgihh-hg0G z6_bp86ECF6wC{XJKGf6ngCb9CAC-!w@VUqhWRTJ1yhaA4Lx=jx5WxK``pQUYOLCC? z6$b*kT8A)|oDb-B#Tl0CmUA4>3nyV{mf58tLK$4gOfb$pN_7=`&ZDYrAxH7~aFXLf zGoy;7Hz~CkeQ{gMOiuc=al4S9p(@+>V^p8Zv)1=9;NQ|2T*XI=SHj5rCy!z_kbgXi zWx;)vWv2TmDAUJz@*w|X7nJ~beM}Hlr(fn}p=bSAkE}9GYMt3f zYwz|kY@`+*nfu7ct=CLdfmAKWWkj<*Ohi|bruuu%sfSl5wis~C6OziJN$o$Fb!tM1 z)%};JclYK88JE`FGE#miR-JVmcOeeLMBQs;Vb*k-sD3Q;$@fDnQn`OVTR9GcaCy%6 z(U0!uEUB!do2gsYp|buo)7F6!d@To|*0}z-x2*V;a-wWuSZ_|=%X*~~2+&S8POB_h zV8stc0g>-a*4gi!7FzLLMQ1X>t}+xl+m|7IjThw8p~`$#EDW{UctMhn2r_{s{DHkm zs#0xLZUd7Q#~oX?D0k!A zMQVDy48Wdz@BL9jY6PyA<BG%w~nMr;kUHcZeK^9Nmm;2RZ_H97w_87{Ftwb`P zu9>fx4l%6RF^KMgxqgxekbFPOqRY>(!8tNUzUO;b7F$u#$8>GjQ1nr-dU5!8Yi>W| zt&#BE06v<_4>SH5aXhLtw;ufZ^4A>hOw@It_26Rb+H;_Q!}Z+=QgxHDsQ-@1Nce^$ zKyiDUao9V{GE;D1^)`CzV%m31dt zNOg0V19Ik`QdFcKtI-s||6*NtB#fx&m`Vj?2o^PN!cnA4>-l+prxn(<7z{Iwn?MQ- zk_pVqb2}}wqJ#;9lwhZkscAioHSZ9 z@N7WmwI}PJja-{f(PUg>vQNfY$RC)kp=h=18r$EK7d3;!hZzm9In*1Yz#?mQl+L?O z5!5ZuJyzSL=D5f!4XH_8v_98A)}^K*{B6xn;dQCeuQsx;=(a^Q_{J8Oz9O!%xN(i$ z&)$rjK5gQ^QvuhR)*|`wrM(pS)GH8qCs_T46`cUvg?fJ-NL_{adfom;PP=m>5qdL3 zK!%(j$58zn3wAjgv8Ch)r0K<#hoviLv52%66;lFNn64+2C3A+%syiATkuwjYTf2w% z9BMU{92*?}657me(T!sx&l8Psw6Aaay{FX|)?|EP-4COtFI{wO5VzNFV8)y;j70e; z$IUDhUzpwx=YISb&3sz4m4)J9a6d|L!$R?eX*KT0Bp-9WFd^)D-)xZ+d1Jqm6oH|> zFi9EVrih&2J?9Ry`)LY?XIio2B+-b@oCFskdKER=51~-Wc>S|5JRp1NNrFaf%Cde} zcuoZ6Wg7|w<*27}f-QGQNq<&jr#g_^fZ(4Wfxv!F z*BYLV_BNej2qaz#rVub@90WJKk^TikfD>>Q7X?!#d$0ntX5Yl>N-53>r)B`)92p|~ z|5_k*q2YfqkBWMm<^OFNIyVCT6i7H;{FC~Ji&B&D4{t3JZ*q;ehg)h(H$*xk&4ybf~I0)b=}Wi>B!a^8oG##QVNkCMZTOE^c?3dqXU2r#Vp zi-ll!t~0FMg%tG{%g4&C=Hp57(F~8Zw&i}Tk&iM)B-M=yu1*QS`=+nrh>Xx}+jrX%M({RSP*-@?F@;v59;} zwAC@rrOP=i%+$9In0uke+~G!H>^p%hJ2jUJdw>1Uz=l_JWtMoEgMZbhU~f21DX%^S zD@KewIhFAL#2$j!8i*GIZa)I1ueYXo*wD_yR zBU*R`ZI@r8zqX^r)67CGUe)^l2eo+noHs$WtZ{IOsLmcfKc|%E1gq+#d3v;~$J!@U z8@d@)GjGkRi9Wo zGEpK}NVby0ymCc0e|#<|F3R7v5WHK3;3~9hKXUqQrq9o_-u% zduTM%b4n?+7-voJ&C&FHdTl*Ek_Oaf?L^6Q>}K(qejFNkm9O*Izv0tX2+=0YiEceS zvOw}5PSw%o0XaGz5qU5Rr>?P|yI-F^M3TAh&3!14zyI9Cv+MpKTv#)|7+4~*TlkS5 znUmxik$v37`Q4ROB+FGxvJV({b$MWcw?gt0*bUEd{&aMLXE94O z*>Ds(S-{jM9}=Snm(}CuMPK%c&5;T1t#`#7SwY~Gb=?=hG6y-^MgHgy2P%jd@s0#Q zv2=;Og(=XVs=qI~aZl^Ix8-xHexbg+X!49TTWZM7DXmYNZ$wh8XFG{K>dP$|5)MZ` zGcD3AHeC?+_T2iqA!79WkS`=3V#SK-0#CoRVw((vvuGzR-xVN-(prCXp>(H{72AjQ zuz}o)A0!QHyrU@Q_VHT#t4I$8rhZ*lKb9jb zyUU>&@!c^ac{zt!@qg1V%wEQqEfFF{@5+m23Yb8reI+I*{znig5lwu=<7vfzFYk<; z{CFnox-L*x{GD4FFcRwarEISje`kwbe55(9{G4F&F;#(OVe}>W{Ef%^toQ(YW5MM0 zGFhM?Sn*F>2rmGE?=qM8TZd;umdd=4r4Z4r(hhKo4`_I)|5-RA2U zuZ(Wo>55*k?bvV+{?4#w4`x8Sc;d?NMzva6Ar1!#CNC?)Wz8>S6i@Zv=$Jn`qpDlv z-e7W+i9+L!bE>^vnx;``2{1|&+Ny=)_!;~JKlX{6u*9goW5xbg^0BzM(AkoWLc6q| zPNf>ocq`!AbyFYY94JY~-;wiE8}hIpL6;R8i}sNt0e`MNVMYb5JHd+U($(|h2040A z7IuV{ta?dxG2_Q=NFFQbHICd3c8k45ysuplVq)G6CT189?pDHVka!ZWc9Ok)SDYK?(%kO4pT~liKiZiMiQ|l^))0$>2d$`wMk$GxOK>0 z{i5ly#%t9lZxquv$EjNJR#pJQKz`kPGNCTva|X~p!&h0JjLil;!92#QpH3>^?|+d+*V=N0b!s8EG-l)*>9kU36(CT zNHEz|LX?W$;>rV!QW62nbGf7Ys(Sx`FxNmdD}D%rGMHT0EQl74`YrGF=ljc>>#+4F z?-PcJH$(T-$w;_5=|X(HH+KDr+a=wK?ag0qKw#GF!~F_tU}k)`-!&vIV`J=N(nc=Q zn6j7pZhPkYZiTptZyAgxa8?E@Skr+TJDp{u`1XQ{(@WXkROQHdP4Hz7F|H$bGTYW0 z632oCu7;peWgq*+Pq*O6?as09qj2OBx(^?vZ>GHQ<2LniRbM=uU9DIR>Wqf9?i*e6JN&~+6xW@*igj_&bLY0$ z5271vvx_B9V#ipUWgL)dACfcA7MuazhI^XTLwMwIdVW%*2Vhy=ZqB*BA=2ZX7OMY z(P-{;ht<{9>TyTV~OGf{7y>IqgPdPszvhT7A4$T*ADv12Fnx#(8g}P^l4o zV85NwPxLb3PQhJxmtgV);~hFlYH=q3SBph0MF*r*>u_E6@~g|O;69y0Lp?nCgQh+sB)<$R}7Y{p=S>zvNGj8kn%} z+^{L}oE%g2T+yA@V-BqnFX)C%{=`zrR%bo-VfsPY+7SPW>Ok@r(pc1<_lPPEjz7I7 zkXXs3cef`;)K)v(V@hEwC0;Ku9NjqHy75_LL0$C&C48E;Uw!haEtHqrBI3U%0fD_y zdSS(XC2z^6WX0i646g~?flc;$;(d`K@+~p3wk~nM0C6soijya}41QV_G%++4ejCoK zHwv8lvC*+ykruODiJa(9K4uHbQRjvM#Gf2qc z>fzAPv6c#u%*7x*u{zyC$hf(Rt$`!nen3GeMWr6Pd zCh!+Iq^d$hUvI#{c2?|b%DPY_kFx=p(SKFr)ROU5yoqN={^+$l$tk6>2W6|>_iR^` zqTWl8bK}$spWL?FYTx|+PNM9y4UNwdBeL74B4H0JV*P@D6O%~d1HxU!wD|=>T)MiK zREleWI;IdUa#|)hsF%!BlY3_48!kCT2E*wR-;j+Sku|_Ai=!J4440yL$6f+Jd`)CG zT++J+qYFj-gwpf)+RobYGg8eW$oU(#FZ9wuowy-**yBBv-KrS9(lR+qz>KQPb;7Bo zqb1=5$0+EPP{8@M`yD2o{T72Aww%3^U%9Jx{HkCobbD=L@rG6YVr8tKawL5 zbxNu)D4CJ=C)zM#^~72$o+L|MwK8F(m-8Nm9o1i5=H~nszSJilGYk$g|3-e;PZ(TQ z%dtmD4kdJ>pFy5=CVo)JiN(X$Cu z;3c|P*YAtX+ix}9BgQGGjF+5!O0dtW*~R|1BE>}!U+=QN<<*IB^4l&xV1-|Q(UAhIMq;svT3&mPfw zM#QV@>qd*!;A3)Qo(YeNZq9_cg`r?!Jh_{h1R@eUZYF{1S7mw3OS^OEf?j}gUSK+r z3Y$>1q8krqOCEd4Qe#WQyCm4K@xCNIioP;mj79GI-Mpv&)*;vd0yY9z2#E2LaV_%4 z?)xf;ZI;FT_0su`hevt~@L{6jVH@FWqdU|%65dTdXI6Q+&mec=Ewv%kM+QpT?i5Ll zem(jT-o$+Y9pL&laAhLSVuB>e^=uYGuN;IC;O_g5aaT!6oY~pMC3bn79Gu7KGLKj)oH}K;hK3saWNpov?Ko(ps+CIR+;%! z1ipZB%6V5ZUFMPr4`aseOauV?h{WBPu{VB!!gxH|ioATZ+~7DDboUO^H4tQQNYq_0 zHHGtG)&iC|;6z5{m;EmR@ed{v`vJ-)mM96vSTTz>L^qDIV#_EQ-8jUG1?0>3W6dqK z(eL|3`bw=AYpL{qV1p_vHk~{?^|s=@WNbtq6RZ@OLui$LOZu-`U*{J#ml)gV_lH}t zcag*%>DjNNZ63jKW;{rQhg{nMH48g&sC0s>K;2HPOVbIPF)b~6ds#b!Dg=_!^CWoz z$}%Z81M=9B z1MO~eVVpy9;ealSe8%=yD}Ip+szyKw`t2iKP^KY8*7Ya3K=vfTZAg*Z5LqTjnXRo} zLzcem4W0cUp6YVWKLCJcZg75^io14&$H0c%06>8}o}9I_s+?o^l}hfUlEjyZ#Ylbh zFZ(LOY!UiaY%ZK27i+rGyN%R#CbF*$`|@)|)$dvHa|n9R9|rkq{Q}{8r<&~8mA@}m zK2&3LFLW*ucxsq(%E=%vLU~c1HJ{4%t*Amq3|>kkwexz~wEIJX+|{xe4#D-|MzudW z50J|7r3k1Y@Bjew?Tnr{Js3EWq&oF$+*(N1x>?3-YMPrAFz$rhI=qJV_?!twN!J$s zqM(Im(L%e&HSF^r0H?asZU1JSaP13z&vYwVUvA1pO?6`Muh(Dp$LIBTSD<+*m__qa zzC~4&)qQS$lz2}2e48b~&AJ3w73qAY_ydSSkigb?vJ^No&wrr)*ze@l?`@BqLpem> zLG<#V%NV<9#a5a5X30K{CfP2GVmIO~T`vY@=cw$*P}i=#lwH=WA~ia*h_ATzDhw>+ z*Zu#kH}Dbmfh%H)t=MWou0$_y>k%B!P0SjqYmlZ<;PU96w>=EuD}Ow^KrDok6YcIvVpQ z7Zlg}^n@V$jnVG1Au2tx;-hs=`-~N1NE!-=Qvi`p*nP|ZgC~LyoD*5biOeu2guVSP`%l8S4G~FBbL#^ ziMdPcx+JlQ`&Oo&6Bxe;J8DZHS+ckx$sRa771hnteidEYDX}~-9<-JGpoC&m?V`_$ z)4$BNhm-v~g_0#)M%Rz z*9hGY**T!Oi2qM?9;}Z`OXo=w-NTKP|L8~sX+@EnDZhVS`Si7#E{%Uu7SDrVwKn_f zL*qA@W1%?jkobo7FrPf#Ao(788yx?#!G3A@T)8;)EV|fDj}v$Z5-8@MBAZ}-gdKWV zF<(baVp{~%(dLU^l{ORA-1#D&6!C)f-Lm|o;D!K~w&%fc(H|a|L%m+tIfs@RWlmi# z5&{(*-%9*8ZR|vgA_t{Md-z(nO6q3BcV5erSGP19O>djl-bQPivL&9)E1_3iCu;>k z;n5?KB?Civgl<_R2NY;zW{o6ZNOnPHR=TVcuZ0vqov2WS?&s%0b@@&rp@TEG$_W-M z&bJPPUy=c?vcP_j99!AAr!UuSP4HXO7ZCzqS;78> z=%yp4Osz{S_eU3%%89PH5Nb+&kt@CaMZfPHNbEIZ3RhQ8KQ_4sa^r(QVpEp>(alF# z*Uy5T{E3yJ;$dY7vBVw-tI~!f3nKri)KEl~}OZ%Otw~HQoN(alF#0Ft>7YkxBb`~GK&mD zs4e1b;aZ^boTRL_!-~t9Zq8)|_zYBUuwoocXOL*Vp589L8@^M zt-ar5sE@*OYcu=(H@uY|HAgn9!_rplX0mf!O;NZ(yb7O8=Z^YmX?%TO+Go&UZhzld zLM($^8u}jzjsqx1DxO>_UQPoX3qg0V>K-(Kz-|O0ymlDJqg_<)H6d7y4W~b_kK^FHlOHJKO4dD1*{{N%QlUkhk4TCnh+c@!!nGc3> z9J}{2sY*6`1H6ACGn6 zJr^Dn_Zg(ZWlje!kkpsr~n#y``4p{#fUq4oXQY+n+9UXli zDD@FZIi6Y|5qgviFOR-@tE~HC#br~18%+s$!XJ$T#y3htZ|scYn^N)3bHGLN7o#PQ z%&e_-vwi~=Hwv1Q0U5IEXX^056Nt9eE7F_U0xF)=&wlqZmx{Yn-8`C=Q5`SGKW;{v z@YRRX1j9#O6W-&SHsKW0gcl`GUK3>gY`+P|WSek?X+mTs*xThOus2Dt_YFcw+vA8# z+O|EyK5M0|P6AVGHr;vt{!(HCsC4l1t*86!i~nfox;sGZvDD=3B;c~=m6PvJlCRFq zcd6t%R`Q)E`Gh~NJd!pAq)lUKlk+AN&6Uqm=ohP2kK^*l3YL0=A=XvjgRLvS4^mw9wbgtM2~O zB?bFW?Y%A)3R3dHh22)-3O;byU&}-cazzUh{2NED3$EIuQWPP!A{M@ z=!#_LmgQ&o28%^#`u`b0b9|(;rDW4ZVx@cpkR7q|6-GvVeVp`s@#C{&@ z0nYlrlYTviADOkO|LFeUa2Z*dYI_TI8_6khumAG?tNOFeVy*r4S!GnQ#F2d&x$?R6 z#ruhx2_VkO`ZQIW@Al-qA! ztb-ujO=beUh+g<-(fg-!P8JB0slC+xO`~9pr}R5{`Xum94l}nPD3e1b(wcBznIZW- z=*-OO33KeL4eUVc5}J_-pCDMwTc1;k1BaVAG(}5A(2{>82rKCa!X_%U0@3F)_P3Yx z@TH}_$-%w7cG)k_;Nw3F^p)+lCw-Cj^}lUT_=v*xoR@3Qo$tALvQKEIJ;_mY?IbX> zic37A$C-&PT&hbVm47Eq0_&u%5#%2yM?n?bw$7yt5&GYn!O$% z7qil4B{5pZaI(<_XQmoMHa+$e9XD%C(JkKlYXRNjEqfdNW|vFe?+aDtD3@r0{UX#&KVYwa zVT(Jz82xoy+{p;Y_2+DtXHOMj15U)g_FJ*((ffDgIvG*FJL>%h1-&m6J?gaFrn5b? zv&^aB<@pO}@q2b1EtYqcr~fa|J38^drT0m1d-UFLbqDnR@~}4aeowIXfZc^d4G?kg z4fsQKeD%l1%RBCP`5zq{jF*R%_wyOT(g<3^6jtnU(itskg!YCE+M15HWWkWp@Q(j0 z&$M9|J2EmiHs;ueov(ORg_HeK$-#U5+e2IPRUl)L!Gp-}LqS$EgG2M$4@l~R_B+eB zx$3wIT(68LA= z)le&T9T?+jm=%-wWS;zy56D;MO21b_$>9SVkoqg?l4C1F$x&Q1{5HPIsq+KlSNIdF zFaq_%(so6DH;>oa^!zc>`a@BrgsZgcgK>pg)C}!vL0K3$tm)IyO7Av zciCDAY!n!#W-BHhljP~hx>4nF!|$vb-nHKGn`uDS-t{Jx{~(ondc9YF7pXroHCK0Q zR zd}n_eV(9DL6V|_(U|x=}d0ik_v$p~^i=r+K(!|#VL`Xp_0)!kUD>u~59;sPJ^`rLz zR?HlSv$FrHG>6AD0tuW_Z?w9|x^Iy+cR8mt2dYuR7DYZ2f>Zq7WP_zu2A@PjMr*;VxW5-=4hRRU&ipaaniE}`= zTgv0(?t26&SElAn%2scVr1R{F-uY5`EgTC3tLZDfPJ&BDPp85YPsiEvrY*acp+Nj_ z^vU4(Ybx>kh#k}3%Kk2rvgzBQ2< zK`(`+g1t8qefpdXrd<9&qI)Od3u8QH0Doz20L0F{UJToLW1~@ka^8|iHCl>PqvggMM!Y6Tywvq;bc4*k%9^08IyD5zfb zGWZ#?=pHx#G}H)NKtE~1nP+EKD_`mJk~!XZp`Mvv%%fDERvFXFPicCAa>R)VodK@% zf)yL7&!;hNzX>G&aKBV5UTg{1SM4=+C{Ob>pus4YR=krI;rg;I z!{XQ(tzA;nPJEGO;tCkK@w?2r;d9=bhDw##Kcbs-NNc172Z2_O))f0<_wx&q4VxaC zD;F6j-nKtpA-25#yGAE4#)wu}(?%=gioRNi)*SAZ>xXE?V`zz?O7A4x5Gv6#AWH{D>$UU(EaXX_a9WWJk+RWU)ICnKB75b#y%}CUp0% zc47hRQizU4(_g*6J<-A81ch(|x)nDV6BDf8BZ>oqNhn#r?go?dAzGmuqY>i?X zC4`^^i=yYCvu>zRoKN4%UZetF+MC9grV_B_+$pr( zd~b66eI%`$%iMH)t+UvA?ui2SwGqivIFzmU8cb@=CjJ0lM2ieQyN3kTp~hWD0q1@a zIq}1B=XZjjqm^J%q>;Rl=PTGWK7kG2jE*brC31-EQ@k%8=&<^3ebNbO(dnpSs zx~d=TV-doNIJ+-TjwKn!KdYW?W*3yheT;eHSL4L+VFjY|8$qzUIOweYX_-Lh3oEKY zB&RQI*I)cSMbuq6ajJL!r|U58&oB%n$4yn&rOfE+YkZIV;sZS1zA34$%cI-+Evxa_ zJvmpM#v259vh!oSAzVEdqRy{v{lxD`R-JSU?B^7t+Q`c6`Xt%;44@%S)H8W1&mLG~ zb2+)RX$~9!H+;2^I0Hv;B6@B4{9X1@TjG1a2JO`1ohG+L{Lzni{^$p^yL9f(Hhr?< z=L#XCec%0;_(X4|Pw(*L)og5#Dwh;Tr<0k6I}$dOT_5zlU(4Q4+57U!rf)2;$Nd-d zn$$kMCUr!w4-*~Jt3=vHV5^~5=E|w1fz5ILU(aSRQ>U+la=ru{0 zu|sZ1vZizCC(P{84&Mqdr5gtMh8!F?!W%S)tbnd1Ze( zy@-09t>d9k9**gVUNf)jm|lPWpL}}V$J@_GuOQI8@m0@rNA&uzS0253nDO=EsoSI1 zm>;Fr3y*vBdY&h*<{hKg94#yKx-qZpe@idfJZ9#vac$^zu9?5aDZNCGSJ^DLk(v4H zl~~90`t~uU*C7I&@z2}#=%x2>@6h~pC(t~4-O96vHKSdeS{h33a?BoNQMX?xIix(Y zCy@qa3#(q7=pO5nJW>vCOxss7VVkxOrtO5)JOLo1fBqNqVQCxsyZTFMN8|OC zYk!3P|ImKB^Wj?FwnzUR*I(`gT9*Didl+piU;FpW8?TMsRDap`S8Zs!js8;lqvLfS z>6hv+d*{`>W8-!8qf%DJ>jyk}t^RMvYfj&+XrEpc9ntH6nH|%sPTH284^QCj=cAYN zNRD2g^6d4zExl&$mPfBYp04z|Wc2pvRq>s$flj&7u z#cs@>4!fy%HPqTlf=Yt@Tk z?AZFC8hDH^E<&29YlQy1do)vl_Z*-!Y=~S|>?s$p5rM{#BsM@MfeViO7e)2J%@>&q)fS7_fTPyxcBW|zJBE%Jm0fvrKgy~|EFs6<_)q8WdwdskGuQLKWF?D%}R z3|d+-iHpk48{!WLCGVFM9i@ic%m8vyjxchqef2dR)BWCumF^mNlI(mZZ`-H)t5Sb% zUZntx7I`a6pJeACa6EZh&$EZ=w%GY_*F5a>a`m6kcE+daD?Phy8=6Vr31nXWkdXNg z&}Z_F#0{=-jP4?b)Iwtad@N=Nj1{_2kD z_2pml>E-bDbI|Kf;CS@9m1hrSZRyp2mpppyY3Q}@$nDWf`}$+_+EY5E^eWG*dY z`Y%#Y==A|lUaNmPz1DR|FG=Z$UVC5FF};qL7P2Rv;mG1z(`e{L-*AaOIe=@x$mbb63ly{`B{BEjJ zs$KioEe|TCT>bJ!-ts8*f3%NP1I-&>NAuhfyn9wh;ytn_NpXZpu``<`~(ke?Mpw$g1dXuz_-3OvqRHO-A={r^HlYJLc^6HbO zwzu!%UP=thmZ;AwQLyg=D}P*b2w zAUS8X;2kEYX9~}(GP_H{xSO(@l8nCQ)BXzHGxz2C%T0}VVqJg|^B~LyV@=ha3rFh* zvzzG@wH~v(Y9y0>c$yF_XkQ#Qywyf~Ab2_2_eQEIiu{raXL}XGMY6xA2THKfKLylz zeD%tE`>NuD4UtAF3~BTT4+a3F?roLKZl*}N7CDq6z4D6i>f_ZD99!~-)A z>vwd{6CC>(K_45c^m$0>gFdX2Lv>5|VHj^5K*RS5c3i1VI$aXgC|*gM($VetD+=lP z){fD$A6+o|_Yno1X`h~x+NGx$(+lW%_vIbabKyN6J)3ya0rOwe^J;}5^t{T0u|0YQ zw207icwP}+`|;}0vrj=%Aw8EB=h1V2L(eDuJ3!A#KMy@u?ifAC-R;qHEKi<1>S%mU zY?q#5Y%iea3zIsg=i0kGdVa~%Pow7}3Pb4mcMrz)=s8u32tB9d72$OpuO2$JZ+DjW7?&s7~>1*x#iN1>AAmFDDrkc zufqR&e7AbKK8E&--_bp6hP&=((1s zTtC~NKV_pKmt(Zihs5|^Fh0+^sAGE0&2T7Cd{FmSv}X?#D?~}gZi#Z-;FyqUTbgm=z9WBIc9C2zG5e9m%gsC zuzvrR z_b5Z(XO7tc`U;AEM*7P6UOO;;$KB-7cPvlaqp#T2+NG~+Tr8k(%Wr?2zMszV==%vz zKZU*zDg>eL10IC!(RY#-5&B-1SA^Fwyn6IKr68%0zU$WK(RYBM@4EwbfWCsFpM$=a zspy<@hmd0X_J_tBJ^Iezsa^Vtzs1PsDy6OL_w{6RgE*&{ZRw^p?fS(9=Z$k>z_J*x1773@qdF*_g;pr!h ze}$mq--EE-@vlX6{O1*+4P$uCj{kzBHsk;6Jc_yV_q+XeVEl`J^XC}IuzUgU6aNgGs`RDDq`>DdX3v`SBI1yDtfXJN}&0#{L zmzGL!fzQ6V51tl2?fU;Q_a^XB6T^ z>Y%uwb}J5BusfQzX<)`}+(8|6Tt*!g0WpLv0dZjw0XG&G>e3*H3p@Fq=TzO>-3jpG z{NMS1pT8NB+*`Mnv!7F^P8C%1p}RkT`Vr4M2UOb?;|S_nlP@LN@+WP>J8vt=Ejjue z9$%HW348LOC;rP@>UyJd?*$g+!+m_C}0=(R9hUnzD8to0-j?5#dsy* z`3{PLljN#!rOifAG>aEm$d1ON*Hn}IqiJCUKo{LJtJ02T`r}rD7AWa#y3qSSYJ~2` zs_06iD_S(@NrM=(5ViXv9DqsG>(cd8ev7;KaoTObn6jy+DJqJ_~ac&dCuvlyb5U z)N?q_F5?CP`GCa=#rO%_4&h2JNDJUZ<@t^OH6Tq@^MDTkFV|H#p#Z%42mp@b zlzGuyyux|;E3&Jm;5jhy7T?S;^bsvu|91m<^&o;f@#kcHYRPFbo)xCS7k>z6ymE!H zhvQG4%_MJIl`MLOTViDXb{YTBr=Q9&W>p70TnUEL)oPOJ#R%|2o3o^N$z1k~;w5u~ zkml%pPoRT0+6&CJ!y7FbNopGkG@xyDU;qdeHAxIA68b@%sOK9vb_Qkva4*Orwg4tg zZ-B$D$DMUPSLmF;U6pu$=Ws7>Y6E-Y_#9J^agIIHXEf&JE>dyU?)(m~1F3Ny&C*Df z`$A#2W6J*Mb#f43Fd>r1318tQHYLL_@{<&?*7Oq^mq)zi+Q8e@K2Wz{4cKW3MB5i) z4H^&KPSx@YXX!EnPfIl))RAE|23ui0Gc=69!RkYc>g)_bLD8pp<>2@7Y^Tu-G!p38 z-@vfPNqk@w6wCrodg(yxGC}JMyyxXV98^|fcSWO=^VNTVe*|$yv80O2L0I}>@z26n z0cyD#*5RLb>hli|ZaL7l!k_UqA^t3W;gH}U=AEcLr)d7^FAy-a0lg8rPw?>c#`^s8 z5CAXyGXbwO|KuDe{4)}7q!(c#m%g5O)S<7g7dj0dcj!xv*5g}YLeggZ&}FGB@kfHC z2JOdE#6lLIe z@QEqxr_cH)>VbvMUNqh@fot)bV*=00VlR^Csd~JM+3AX^(4uk07xg$ z-tGfQ9f;6-2Az~eZ_V{mTOi%#N($Veq&>O!+hI2=%<~Okxv}6~7RO>Ge$90?R+v{A z0B&4^->LY=Ww729J4XS;EzE0U(H;)qg#^?`=>GM?00=^!L6}tpJ6k;qxCsH5j= z1D$kV%g7+m?;GKp#urE)mL{rye2<~~XtI8yy#T?6wnDwGB{@d^vl1LIum{vlU4P1D zx{w@mKh?3A7H(z=+)7v(eGi!}`o1T+v*ox&w5Y0*AE(-Qo35fUqa!GGsSMI5+t%s@ zlT|(S1av{pa4Vn&7()GWsj&RaR4VpSC+p>1)<@OW!6U?RgyI#BlyhW9tRG+vPiBVFsP$xg-e3dz` z!ve*coZByb$->u#Q$0~9kuRV_Pt$NF2J?STV2bO)>S#dFZpDoF((Yz3_^v&1-p48 zy8(+cIeT6Q_=PA-vgnUkq?Df&|KRLQw9xxPP3x_yVHgkf-Z8PWSN=u7O&Y)uOYxTj z4CbnPqrpsjK3cN>gvbhvaKshrBIBM%@n^QGkA6v7>ooQVIRzl3tQGw*2GG-$Os&=r zNSpQQW4FNkkh;DZ?Sv`MkWt0%6n}Zkx&+^@Z!1lBYg)n{B10yNVf!4ePzw0{+{RcG z0aUt`Ya+o|i)o|E>*Xo0djJJ^{VHB#)rtO%{noIc8oi^(1?x~gD0wShpC)(6L5g_D z`_PPX03;20WUX$1uo5p3H-qrA38OOUC*p=!{so%((~T5os5Z;WsEr#DGrF=#Bu*aw z4gFwdRas9+JzaH5EKxS{LUf_aD%Pq!lPoP*=?Na;$OH5sH6!0ZFVe4>?sNFt_3C)4 z%t(LQpZbt`pp28da+o{0x2<0`LYh_tHPN7&ZuPftqWIaQv z57`>!8w;wdDj|_ovy*@)x@kC%FDu4mU3mmgIHhzR9AT^CQG%>q{XFge#g`erQoo#_ zv5zTy0NwNbL=X~-JF15mc6rs2cWOzZ-NRbYJxKfEpZI@P@MiwV3|``$P**+e>9oL6 zRs5j__(hV90Hb8h>9qbOVD@(u+KG z?0)!6-8P2h{Wl_}a0%2}N-WA*yw+Ir|q-sEJrTUp(+ zf+ul>+gXtu!e=WO29NQ3yfJ>_{t2;m?YE9hPc!wE2yb0~meOiZQYeRYvklW*VZHy5 zF!{J&<%V*uLNmzl`^g@s;{P7+gxy+%iPuM{Ux6I^=cU7 zBQx)7e#5K3vi>6DXzD@W$o?~VafmJ=pharq%c*EupXO z?90T{wx|o)-yrFaVdR2pT~IrR67C9wQvwz8Ev5$K7yc*P(EjFy)X^_;HJ<-h1 z)R(my)R!&V^`JA|=MXZAe{1}z=UF$=RG8HttI5aVeN~FS183H&Z(DEtr&??H9DMxy z-0|BbkKexG_*TR5Sq=<-bRD)IAXD=t3Qrj!wRRo(fD+fJAD0Uf$Qo3)UdIp8^}MX` zL!cgT5Z@ub=Rh9%Y*cm{3%fe?w{u`&MT>!rY7{(`m**8MSA(AhpJ`WbHVmcL?{sXd z*YI1yNP=x>>^JRSbYBhNW*skXb0IJUQ{pcM|3x=HVDO>sj^+#q(oL}kqJ=9D1E|xE z9fzc~P9qycy@1AI)_A4^Ten`F*h=89`ApV{=ZSoLXT5*cOBxE(QSF2iVMOMq#;rwd z!?kMUQ%0r)TZww1Swv}aMF*Lm0mCx@!#_qkV0aO~C4<2bSNBy|V<)qIV8Xs0YZLhy zExNfPb^Q$R$@+^^)_*<_j@vm{PdOD1wuVD7;lLVikj^}PNoasyk2uD_gHC2ccmRMT zmSC*`3~q8~cf_}I9@ZrYt74oCrHLY_A$Ys7_ygxcyog2u!JOhm7J`!jod@r5pz{EJ zbD$$Z8G^allMYE)6+^IOd~v1wMZcsks0$1{e_NTLCmSmSJ+;TDQV;t0a0)zUF>ogE zq?7E@6N+=wN@BTF(o_iv9XBV+0{eI=gIZ}=5|A5QdkgXm1h+i+ovt9C(-2-DsF$C0 z2+D~IQ}`ASl_8{nmm7q!!g2sqFy;Ww3cn;cfHn)llR(Jgz?9b=kUH~r2exP6HwU&1 zK{|3=VuTAnPtf1YmPa!vsO7Uu5sqE>RhH08@JC4P&+bowf3-HTvM93edP4}S;Vj3b409W%z);A4%XqkNe!GzPbb1$tUbkhidt;iz`PfUE_(O4f9f`SQ>9X z0B^@RGuIMz1|l#TZ_n#`lC&=a=ex9jGvRH8|0=ZKJx{2V)IqqPTOaNp93|rfE`|L{ ztWxZz)NjYNl@LUWOeDEuu7r|DE%Qb@qD~!`E_ld`zhv-GbTdpkZ9Z6-sB{~D*`ZGp z<8HhhZA^@N7gidd(13oh9wQfpesDi)Vm*OTT+4Z8Ed|S21=GMSexzQ{#RprDrl$o- z^t3XGp7Q7_3EdS`M(VBOwhKF^Z%=ve`5cmE-(y}3|vEJ88YOZ z?~ec=VaLx$TtNpJMv@yKZ}kqyjTE5Yifbd()RWW%VoJTPMelwj{0p_Gg{Bjndn?*H z&YAI}2(rmK94MIYrkMCVog_EUlJo<@d^uFS7ztn+OL*U@p6zVQM zO`N^sQpDMjnvvM2Y7fGa(QV2I%TSkw}s+@`<|pEtheN0AxREHAZU4yYL>)taphs z=qlx^8S>-9M`*gjWkm}zKg4|NlI~6^20s?vIo3d5-l~>}@WkIU_Hygb@UC3*doxgI ze5NCpWWR+X2y!tYcl14EdL@C;M)th*rn`hckyy4Kd<8me4tr32)!fWmX5~Cj><2`P zW{ydj_tgkHHP}DDlGSWy==uAAAy=-t{#M{dECSbijCd^Fp>ss^V7SyOHA5Z+PVt8F zcsUT=sz@ybBtS`fKFOY|@Ae=b;x-aJafDtELoMF{=zB+-$*boPR*Api&d0F_;Qtk^ zdxO5V*q24c9iGMSkBTgrvYJ0o>6V!d%o{hpAFdsGR~m@_w~oJpQ^z3Y^{_uJ5Wp%c z9(7h}h1WEe!yey@(8o51Uw7f}iOJ(tt@?bUFG0eTjbipZZ08F-=7Ca{)slKAM!@w6832Tza^PM4-Wih|HXmd^@tC~A8ZJJiQ$7esX;i8 zA|LvPq(aQ&Tz>ML$Qd0}%L&42>;v_)JaC#f1b;8kPJP+UfC^#0c@!U4X=Zo&6MgvG z5==vB`m&qBp6-Z7#5e32FgbSXp$no{Kw>(+ByPc>FNwDa|4jsHajO6LRa3p*gZpnY z?{h$KE#f+^|9Cy8l~9mgZ{_y3*GV8B0}Sizu}_><9`O+)f?ZDs^Jc-m!QM|l_K>7O$}e*qmS@>TTbdkjR>k%$bXC`??zJ-pZV8i`?YmeK7F;48n)R`;}ihc!zA3{cgeg zUBEliI+mgj9N^cM?tJ_~YN(WyA6XY}#pAk6O`>u%fZ){m0b^=`f9&MCc8gZtHv((+ zuY#(gCxT`*`c-EHaqKnv)y4SQ;DPjE4B9+?ydEtGmqFJvcO9xPpJ`RVdMj3GecLoQ9rfJ?qikibMf1_|7p zgnfPQ2`B(xf?Xtki6#X|;6UL=ks{PKR>e;CmZHU^;IShk1ixxnBeU-IkQ4Q_ih7T4 zq2t`TwvK*LXX@`*WxA+cz@ejsh_S>MC(8?QsgvZzJucl~)B5}yWn+4+I%%~-H@MyT zEtz+cy!baBxbos3_(SBy3^pU(;G!Tv!u}cH29k}w!laW|3p$cKt&R)p%aQg#yq!)Q zM~jZd+ax+MawLr{44t4+!QIYkS0UzQFXFIM)QKJg$4f{*EHr2+W8MNZH?Hn<0L^|J z?_Ak&Q3`R5;VUCMPR5%gdm|~|XAu`}^5t~iC*w0ZU+zLfC`^;)jzpvun%4?*Kg}CD z7eqm}qXCQ9{2&1kv$Pn$F?_Cf;_gL z+k0BNui|TRxzGWUMabfqmB}njQ{UC$x;0pB*C=0_Q_6$$G58A42fofo;(K)$03BbR zm^(0XEgCs?db0dy%U2wH7TtHJgSU2wT(SO3Dg1?DdVDL)l&{phAjzjQi6mBKQeIHD zsgfqzVZ*!xe!svHY+l_srC_<;>@F)2?;-#DA}e9`Mt<={_A;GXsr_6!Qfe0>Lzle$ zCV^FN4+5l)6@EApU_fr^2IuCyE$Sm=lWFr4n+>M6bumF{Rg6bJ`nw8#*NxxtLb`%# z)e$pH{Yt|Jepc0RSgUAqCptE_PGTcNca40PO;w%r`=0@^c!dLRF@V339S<{!a*U1+ z>}yHD4nLZB69~_nbk*QdlsVBO+l?GbX&5chw-zqC3bz)P;MPLP1At;(flDR#+`%^U zqqx~nd2pv;wDmMJo3NYA5bOErxZb$zx}SP@VL zzCCe;{I@yu%Ql0=1s|XhW&ly zvb1J)NaQ?kY;>kCc5k+K?uK;r%MHBbp>>yA6C|asG$hpn{il%BJtPrxE$Ku2Jz7~V zi$$6&{eIk%{E<57Lp5MmmYAe^zZukZhTPoCHb|z_u>k1*5y{kr zLQ|?M;*KD%fg@7L%Y$X=OH8j$kXJ{v5%MaGXsyWtOY#f=3#XMI$|9Ee!wRvN1obD$vYx*O6w>l!Sx(uW;i#`booGXW8CZ znBk^4)+?mu-$u zZ=HUyK&>B$n-8&9K`T_>8}4WnDO+gR{}&9ClvIuDagp241jKOxZ)AxN*W74<)Fsy+ z>+%JOdCd!g2#`v!W&8po2Yk3(y{vF^U_h^EtF1kwfw<5~+v&-4lALD4Fs8NzXw4+? z9Ud1fPOQ=XV5j(v0xo^G6&Xmqh{r;G4BWkw@V??N8#`1kU=CzyDHq5pSZv>kPo~%> zerLgkO|$#H+JrxK^n4FB{DjTx0E;kWZNJ=N(ty_wLEXoX-v$OcTluBAL#=#&?no>D zk=$~$wDO;p%Y&@^7jvh|->>J=rLywh&8?Q7vvcW*r_gpDX&aX}pG6UlNM5t@u4z`q zPiO|=J^rSI@IJGT5#G0me8vW=xl;N`{%w$V4tt5dQqIq*t@q;{qOm)wjo4lgxQc;s z?)LMVJfsK{Ysp!GYRNA~(_hbi52oq=aU;#SFO5~KrXw&2(>2=olN(b+@jaIrQEW}R z2;GS|wqj#tb&aQ?Ek$yCB;f9ig>$8D0{9{ejFpvzM)=vP0~-VG;4on#@SM8v#+IBK zlg#hsJJ`0)&F>k3+X|LTG;6I&`wcV^S*TN?lNU+i$#dBV0!nB3;_k6^7>&f{<_~N6 z{^L+B-@}lcnw}u!u|-iVceZ5~ES`ncVVY}Io8M*3_(O&docpWSs+JqHvGE1_NbE1r zZ(uQJ$nZWlXrPKsk^U=W_^a-CTHn|o;(_*`PT5X8Rbzctg`7r;7G>dky&*T95td^i z3n7ohu6^%4SO2Jg0>gG6=?L*-bN}{Qb^Qz4*tr02)O-D?9iT7%pW=r*h9&sn#IpaK zA2xn?`26s}w!`6vN3T!ehnEo66Mp#c`V@Y+$$tob_$%7}hx~B;Ve!MZpZ~Y`;fo=M z%MUG>4IWu|0Dfq+_J87s;_H(5;TPcHQ2cPr)&~5LhVL~$yu|oVGC%y|-wA$rf;~6n zhbyKg@xwnZH~c{VZzWU%V|-K%&;`^AL#Y*p2a2c_pb#eJmg7AY!xZ`XbnaC7`Jzz> zuN#H%t|$a6e|GLVyiZXKV)VeHleiH>m$T494OxRpiTQ7Z-@yZlO;$I6=%F=|jYs&I z>j+Jl8LX~>33gEJw>E*HVTD_=Ih6x%2rY*!HhE8uLGtCbLQE7a;cqzvzD7!;D`0he znQDYtSL&&)K(OqxVIQJl>Q4M(EicvGTLeFW-UZdPo@mAB%g?Qf=Q+xR1q7+y>V({3 z*Hg!_YlIR$Jy7CEe1_h4C_4UHgJw|$Y8E3cFt{?A!6Nb*281i0$81BiiFY46^0}G^ zos01WQ}xsy~K*`!Mmp z@sHzw)ZyX(s#N?VwsHvkZ#p#oU#*9Km4tsE@Gti8gw52s+A|zU8(@?_63#7${_;ok z#j$~6D_>tFOJiUv-q09$OMX6Wl>duH`M)m8pI+iNc|Thmp%i0aAe1JB zpf{5i;T~%*QTYYE2TR`cqdL*Kh+=5X+u=bS9?6WKn23MX+X~Ryf1s=VgXcr@6Pn_6 zVLz|e4?-uwFQARP4oJc5x}6SYKTxf_G{|uO4L0^+j{QG@k3K8@xA5@*Jh}tpWA;YF z69-I1NyW$1ivIf!?%B*`cV6YX`Z^jDgp43xrVW#X5dhC%*d6uAnE11Dm3$U;V< z3NGco0D(0Gyv>FRb`5lr7*aY~GFhxM7HU;U{2w2|s9(r5g5oqaf4!b>HTdw}e_;2y zJ<>AiKU7lmwB~9eYpeR;^r?E~3ORZzn@u0%E$>#Zh4H*?pQcp__b1MBN-7eQZhRB= zy|oLak$N%A@18o9^B6j6QTL)`^HswhSHEDyhPwi_3t^ep+1dEV#Q8#JXI{+w{PPfv zYKq?^Ki?nu0ikHgRB-nxil(7=?-UQlSNT^uaoTL+}y2jIT$$eybXF zWrm&#pp~*m0k0|&WBB9&{gG9{Ltg;k^kG2pHo6sh!s=A4#=ag+HOj2;IQ(vx;vb2+ z)W`Qe;#)QxnZ?#7acBua>#HF=y`gc)=&fM30bz-7;4RGJ)Nx&XChtTv!#QyYHu8B@ z2cV9t+0@5i5B?tSS)pf#G;1R8+`U8~a#|QvO^Vi{lfaEcs76{=paAjVK+6LJ+JyG7 zE9>r)V+!#w{W6W=lU@)Ek310=KAIF)UtN3^e^JM~&RZ*Z;7m5j8ly$)o(ELD_|!OS zO96HJE^k78BWB{;&1u)42sOYleP(bm_pi=H_l z+Y{-DjrmOUqBrKP$=?H$+)HnDMd31Q;(Gjr6*_5(fKSzwzw_MqS{3h|Kz~z=j&3uP zX7+BOnHlp@PX{US(E6{>yYoneKG;&_ok8&Zjeo4VF=jF2{`nDtKD z_R?`Hri$pGMbdO;;9;G;QV0U_?`zHX+`7lc1oy@baa?ta2%9jwHT~A~)cuy=OO2}Kp@W)CAGLN}LV zwFf*Cl1w+KuMs%Uen6uT>oN4xTE1<46y|hb`jM0^(A%8;q@ypq8sEIcvBC5-9hrI= zy8TP0{Q%O(TG6k=zSQ)!tO0#pgHB!h+0YSBc{p@*v)|CscX(J&%D@(IjxUx6paOA} z9t*bAdq?mXJVSa!>W6?TF`Ma{1@3sD(`M*jbUQF@O&^Yg{Kmic;*h6$)NP9ZZREB^ z8-IsK@JWg*ho5SNj}-!FD#i%Xg!I|U3~!`q@O02fFdb(Z)Lm<2!TPo=Nfov4!%7`} zY?^`1szzd9mCli5kH-o>D7dClQct5Yp6D6wdoV8}xuQk#icG)K871gDwWhy?fs1?> zm7=H^GI5=tX1P@n#Ta5=SQQ%p*QCsYpR-Gv?r1HOI07hvecSBlvwP5XM)9-YXFOA>m0VB*H>Fw zc|EX5c`fH-qiOoIXNEV{2U7mHU_MMmVDa(}>h)Cyi>N1|x0{Y;X;`_eZV84Gg7Yf7kT4ZHPJU@WSm?_6;TASlEN6LwQ7ry$O z%MVW^&bh21JQ~SxzJ5GpbCjs}Q@!)&YLH2b=r|a`(nDe9P&zvt|{ZI7B@^PRy z$`_b0q0QJYO-ffnY#hwb3p~@WZr3-bb)U{4w{vzc4-?xoz{C1AgAQs*%?- z->Q5c9eHD%V&q%Z`L(8`kcyZ25OLm{{>fD#8&2Kus$SJycxaC%QUCjbz4+cq1u4-vw5a;} zD~KUmb);`cM)?GYFW6EN+Sdq}1U(G;jYRV>`Kn9V?`|p^hfz&JzCca)Ht{%b0p0xvH}uwH!IEPtMr@TCj_EZ!OT>&2{G2Pl+KND88;v> zmQ?pHd3|D>SlxLR7HdRAuZ3L>Jc^w$0==u>m&xE(1@AbHKaTEmIoVq=S*QCDyPxJz z2*!UD4W=f>H$K*_E70sA>AW1c0F~DTj-XT8#9juHK>j$AVjtAQAxu(RjRC>uD2NRf z6a7_mb2s!XrI##>8UG5>iq{C<{?K?^#3N1~@2RB?$9phky!_S>CAw!$oG)V<($21gnK zSJx>{2#Brf>i1Fr%!&pqW*`Eq7LX0}>t6AD@ZJV)!GQoB$-KCZamu9{q7+ zV?SO#1<>5PL!>&Sd^%FZ=1;*tpBuOo;CAt>mi~L+#`z}5Y46kj3 z*T}Vp2d_%z!KK3MhXDtK*EN6nufywzj~sZNOeym5?+1mK2k)!q5nda={r?KDrG!`U zw}%I>fvnb<3a|J29}r&W-1lFHSFa@wynZIPK8@W0SPciFuVr{&^)=!3{x^pWFZd%c zwUf0;s=uK=SghrR4Z-wT1T#26W)N7Tj{XRvEEg(1i2OZ}&tQe~Vg1ny;!y~vj#r61 zBMalsLHrJ{NGfZ+9ZsT^osnD3y|OWW*>CD3 z*yze2$lpPTqw;1<#oJkI;4X`nzxi8$c^daMPd}r5GJndPBEGvvzw3&3@eK|1 z_c{)C6b75Ten48?&{0Bf6UJroc~GHtr_83ccfx-DGNYQ!n{qygpUOJp+ksqT&qKfQ zJL#{h^oMltV&ntX>koI_n+|bfLZ^8GD(TFDmpM0|+~3x9oZs*R_7`lezb>rdt_tTS zbSblq|CE?tMco00O7KJIjt-vrN#_G0PP0<~9)Q5c@<0h{U*cV!cdp&l>sjVqwhPBV zvLLV)k2}p9>jIL~@UW(5TGMgS3GI$eIGeY#xN>A&Wls<4lZ6_$Jq0_PGp6o&Ce8JC z5aI>>Z6oQT5YiWJ9qEE<1CPjdlP4Xd8XQCSH0vOH^g7mxbvD5(<{XzUGj%kt>^Y-+n@lMhqkJ~;J` z*_ZQq-?m9?d{5>!&(429T zKI$?)i9RB8a6?iE90iZW?muTbXg z`~Dpd{eJp+hkpOq|Iq*MiT4Mir(wmKo(@QimyT^|*01F;@O=gG4dI%E?9yBjsvFdR zQo$DLgmuY9vcZIXtioJuJyN4?LoIFdH$CGsC<;rdNO9z4YeBUd@(ppQ&$o6o-Z4(~ zAvqvb+!BfAk_gR5z#|NH$fd~q_~+`eQxF@|_&V5n(=R$S|GYCG!9P4*iE~vS&7ArS z#!To#RK!mK-|M41-u(4oECbU8Pk@8Bet!QM(_`l_5ZK8a<`9-=M|? zPP6f_OB;P=>gg5G%)Q+_l}zJEoc z(TFjFLI!IJNj*nP3c>lh3_vG?{ixTv>3}}>A*;#>-^kih6!*_i)82sgrNIaz^F0n3 z?FCW2IM}5mw71c?+okAAWYe7S7zUJ+-T`TmDJt2jkUhwdxp7C+1HXmIl{fxkQr)L& zOf?~kQgV@bzKEK6d-I#p=G>-xeEZy%Y4O*MoSQS@rkm5$zaBjzExuIfOupHTZ|2;i zo8OP-iSz16N@wH|^=7KF(mte0fPUED2KqrfcJ*rxQCFO1@`NCkrK+}6EpMr-mQUL% zA>T0TAkN8o4#vqH$Vef_3_!4Nr?<9PV*9${^+24z8mOqmpt(Z3_6IKxZGejUXty_l zrqR|f{u-DZV&uY)x`t9*BRTnUBWXP!=QwZ}hk z+;#1~>WEk6yHB@DVMjrC0XNLYi7#sjAp^KYJ zBiHPYKWOG%GHdYd?(_cpO*pDJtz-t_DVr67-;$Yw?{eGq-Y><~NXN0B>&kasb5HTi z!K37L#!Zpldn3#I(Id||{;IUOc1CD}6as=DqM-+Gq zAw;d-_$SgWOH4(`g&(sa7sz;sH^ygbe+v76qp=V8H8=|aDlnLS&v?L2ZsJ7;sL(pl z#-hDmIlSW5{BOGW=2g9e|V0i^mfvl=$RtP}Pre2hTII0yb?mz>uWz z!?`o?0F#@#hUq&2zg2kwa35{lZ_o9N)V2u48-@0GtOw-0Y^ZT|YkCFDr1VB7%D1l9 zXf6(!uz*8whjhLS%zd|R(z#Xn72e<`0w>_Wd_azBRosskd_0urX*YUtuT+lu)V#YC z^YKH8jzq$-6=vR2tlR$3PRwaAe)kn_Mwtzt)%$arBtvC$SH06_FLRNO;};Y8y)~&1 z{?%Jo?b1Sf8e0!C|Ew%yjIR4pwtv*juiN9zbJf=LYUg{dbP84~exKRnrBVu938I0KKUCeq-$XsZ zOO(rz$Vd3@S@sjJ(sFOEY8QV8l(SzXqB7Z-i|5i(;V}0C( zRUQmvpCy6``E7KaZIjA??*LHyUwBtg9omzQF6?fgYK*5-9;);b(N5raF5X2}*X1tk z14u?zYk{^QoBO$-=f12_wWkEC9Cjyco>|&ATueu;Zyr=uchKIuee3E%-8y(E7Xagx z?Lpcd2;M=Ei!!K|7vyhPV`OpY?}UwEZbm8ENE?H7`|nP<8D%tT1TmblX(mt(%CvJ) zE|G8rs=Y0NYQ7elmZ~`k{=s-M(zTFzUj+)N;OG4K!Y#+@5-9yDamsq(RXqhbfHeT`8m+1RR#hp5G- z40Pw3X^Edjdl0Jh&gsS!L|3ru1`UBtm~0T*Q%`M~rtQF&qOb#3h`fI7-GqJD_8340 z6%CT~5mW_DVyp6DvTI^f7(uPV+Q6N2n z{`e-yZ$fkX_zJ(YCRKC&ZayMX8*r+nt}Hs{+iZ6>6-?Lm#d_rUkhkNH+y{|>G@2fm zQ%P3*0mwJf&uO5aQmWOp3vdP?+JvcgvM1+@GznT9fjJ{^;UN)n{YWLsMv9N2KP*yG zb3(O!)KqL2qjt@hIK?>(5)^@;i61@{(vt)<@`}AUNR!avSDqeVY6rDGjs^!xK+ z#p?VYR#^fJ-$U(0*6Wyx*SrD=68`zO8vqlP@UVLOUHs$dN5b?jftNpa)>FQ@KV)#9 z!n4qMpO`h5!}h~8n4QK6GzuE`SABXANz`kB%g;-X_Kg^$-QBYU#yU!K6 z-76N4FR-7)%fx*AkitW}p;}KDcxqkostX)7-p>Xuft$D_aE>+I)1_H(6_VDxPxyB1 z^22M)U+Ry{^XAX<7VaLCBMm*ZXdC<-`r94No4*s(I~HoDXuv7J{H^4W59ekvmq98R zxiKGqWE-;TWlSBbpolW@?t;1xME!eqsJC_Q3FId({j5jg+BN-~btL@Ru$}2JRu-Ffr9oWzPYSnP7}Uj|&D@BG8oq3Rab zz1Nrjd70-2o+J50vp`i2hEcQk@6r6RKK>r*!yl>E3%4ewqeHJ}e?gu7mJn3IUM@m7#4nB}P&1#7G@%XSGG0-L>stE?~!6AR9cBwm&}1OAPV zIbeJt5pUPxZxyw0Dl~!br2G?!Qt7}RNUzh(@@MO95lLXLG&dLYm&>`U$(=O)-3eUz zVLbp$xhSy)Dc=hB7~x?-9n$>s)ajklX=Nax(%eW1GMz-?f&wT+Rfes;Sm10J*!$6` zkq_4NVHhZN@XqdpOSh8dHr*tBZ9j?8V|2Mhbk`Cc!1Ezj*WGei(a@ zbCr~HNz_<~NXoT%B+6B4M5&=+(XdjXYa(%jnw#LNOr)Wqp|7?_4j#fPD5&mUu-F&5 zHmfXhSvKlr<(1U-5Php_#;NQ+=`bRF(WX|#Q!*bT{F^3kzGC6yx+brFG81=={S$H~ z5(HtCbJT{(ACmtAE_a@OiiHRm`(s`R zYQ`O*Pg}td83uLfkAS>UmHjI#GKb_8ExNjmF^?4Tz|&0f2j+)8-j<0Pc@90RLE3*O zP%FMh4^k2}L4W?p62Z|YHqRQ+e(MD;L}1uYy+TFb*)OIB;GE-UJX6BPfyvMgz`kzs zek*KlN6q`1jBJR%9y#{a=x|C|;iuN5vjEwW@-ao8=2k@xe#c51iId^#WuWRwG*8T5 zZV^=1w9rw>#C+ZSV$1`vI-H=ZTn~sP2#ZlWW^lfMry85h?iXxI?CuS=g+)8ivEab` zjzv2n*`nokd{&kAbe1!^M&)0zMQ&@P<1;!>9eonFed(2m@msc_c)J!SoHDK zdxr~;lI#RLegN11r|?)a?!N<%qfa;lJU;JnnDB_gzdbzqC_tpu@grBx_|M_7c)Q@u^wH}J^X#}Do9DlRwE@P zNeISO7>$jHh6SpIjd7rid!A~$A=$)8jlr( ze*^Rw=W%uqtjY871mS47v5474$LDzScY9+!VQMeBdo;$gDmS44lP9)&tuv~(TURyq zosq)_i*K^dnOk=J_rB2g`;kAKj=ck9%LWF+Q&Me9%?cL=aJ%d192Mh($OuFlM&tmC zS?Cic_^|An?ifAPIF`n!EO#FzTtt5zQQ&*7MxQ0KK}Bg*{3rOLI@Rqs_?G(nTe6|| zvC)I~9fkF0wukpp2U#$vpqg>&#QGcOxq~2o$eBb<bcvkfz@(qCIRmT`ZaJH*dx!X{0#g&rgi6zrQr`J;9oTu@4@LOEF0pZ?h_{CuzDdHyg295KK9H z0e#~*52G2|n`1r*(%C^0oD0urk$rT6-eQn8@n@3#7s<$GKo{=I!P9MU+nG7q0p|p) zjKmuCb|<}Ya5BXQ^JvKDTh){1u^hpHH#U^fge>nY%!>bwr;nI#gKn+KbYT!)vMRYh z;4NIK@9WSYJ7$yvax2XJ5lX6xANfmCER(cqVwt1!oLD9;KSUFA)w*Vc2#;~4LlEFG zrh;jzMSRY^*E*Jl-l#?u0lN5mXq}Vja}%FnbA_I->mNV@S`~5+mPz&@-PVtXs@L9d z`M-ir5DdVFC9Z{tX|(91>w$|g@Z3=hUv8%Ej;B(2E`2H_0Y#eeTTL8xOmTwB9@Ydl zI>+Ya;JTf<2;-r!Jxz4OU%RXXzMp|KlCY6lkw#!3NrO&AfhMX!WE|wBWT-_s+HK8b*b>DHQrO4}ACJe;ZXF<#CVxtNiNG3-be7wYDbX#v6d1`M z6A2;g>KW^pt}8`yRk;)@HcP=C+^qimH@`@RBI$=l!w?ebf@3Opp}%V+430ZXy; z{e|ni)}>1+4J)`m&z#<`n{wHZZ13Phf8_2w{2$6?7(N=2T~bqe4)TXWqn%xNI0oJF zN-Mh{JyT~`JiTWCBJd|A-~}AcZ05+Xt|Hh(H-Ji7N&MQXDB!eG)Kb#@kqCHLl`mtd zl+4?G))^m*@Ls5&B!u@wB>PZsTle$U9foA*Zc6uiHuyq&n|Y6~_J-E&^T%#&)WoS@ zz%zYsUF^c9;%Lx=YWEriuiQlK$ODW&gI*CqfK1AzHKk{G((GNN3DKL_#K^PtS@v?w z3GFsOTX3@8Wt&1jLey@jsQn0{c5(9k_85i}oq|0MEtfZmT%O0q^F%J6Mw*3wFM1*i z@GBPi|1X)}2l!B(hrkc`g!DMG0X@E`>9JEvIM0Mr+A#kI_{H^tKzz8{fr+wTf+(8_ z*-(p;D90M2yfwFtKNj?GmlH+&>`AkRQiy9m9Y*oZx=$=Pb;@sfH(-~Qn!xJ)L(f>7oSv~UIUavL@2^rH?A}vXT6v~J&`WlbpxdPA zhb9g^-$7YYErD{-bH`MAP7aAA_<{FLrO@-I2d3xQCp+}ay-Oz53q5bg1qcax9s_!Q z4zKBlNA|0A7r79v_<=NX*((R2=id!IWAn|W=a11kiJn=b$LLFp?2r8Zze>-Gk96qy z+}9KIJZz7qXT+zqeC4rfEnWL=xCa8FVQ`vBtr_YT)Yc{;pWqNODEo+t32osD9amz$w2w56}Gh>jVv_^RvDkDwdDC5R8}B*g^CIA{gqY zx1Ge^OnRGyjDZJ47Bf7)SQiv`*n|i*?{jM`CyGe z$|Ji`EYyx?2n+oK4ISbBGkzDcnIJkX1R`r$%BHfl$qZ(Y%a|Ava0hXfJznfzJ>^iKpan)~N2H_03R+ah_oHc56s%&Q6 zT*@@pu-?|zp=Ej${>XYHc|$g@Pm#?5PZP;pFmzW>?kqTsTa69-4H1@?>oaHP0`0n;4oilO?=XLR;G+%TE_P#*6 zlFnY68{A6zU_j10ssUAtdv*e1JEVvc-uopzL)D1zVHnV%b7vAo$pAb=)tBb@9OR z^mtJ5;&ip_H8w*6@(8dCBNt4pu>)0J)r&78vv_ie{p^)Yq_(h~UzbASA ziqr9!nZ&lI@THI^?rNegEmTIjJLFlXZm0u0((btELXhW>WO;j^$6>>|mkHYXY)Fzl zsQp0tUX(PK3^azC0DVK5i7_nneQsSEBK&(**;-UXc$W63M_Cb;mj|8)G7!0$cpfJc zFj=PMSgM#MSSKx$Pe$F6LiW2(bjY5!{gp+2!aWspe@ZX&`~){X6KOWst1eFWd1~yL zc<<8v79*cwCqh1RRd!+6YQ8fG?7Ui&J|dXi-8G!ZHUW}#*2D`zhQ7#-GV9H~WrZ94k$w7< zmLaK|1^wE7(4y`OZ~lG=?{nylTlZ7GLDqQ@YI%S)1H7>^94K9ERX)o>jPHi{RT0b2fQg)JnAhbTQDm&{Z3EBDX@eUDDqf@EC4)A&q?Ahno z0e~dz0Ny4_y2bhC{rye6;4_FK4$j0JH}OKtBgj`PJQ%_SNa~K=x-HlkfFPOF7v02X zCF~XEPuuz!e?B0#1>$|u3itj`Xd81F|Dmg4cZ>unC9)6(r<}XbpiUKh?=k- zF|ModB6+`@`{M=65lVuKukDYmFg=EPBR{6t(gTqous%=w^ZIP2IMFG-UH(#%^hEdz z*d@t516hAo_!<0R*y1ky>KFlKv0HJ~h-(JG#}hLk)D~@ssY=o@7oYHeLi$O9QXV=^ zQ_5W@97Mz3>S-cAqR30$7nFl8Xc~A69MtM(hc+d4s2RHqA5F%G#z+trqL0|ECgU`$ zOTYof#Lfmn3rX8ZUe8u_FFSw@cJA3!sKO)hV>DgzaW)>Sho1rMf=36s@dT@adJ6PB z)S+g^yR-*ZF)MT8Tn2J6>3I536PRIJ44(W0|2hpcA2qh7S5 z^O_Dkkt~-IpmY2R6R-LB9DywY-8q3{7!^Fn zjS9Z20GoESGlG%w_T13Woa917-+C8dLtrc$hKqfWg^dqfa(Hgl|^qu zpp^Wc03lmce1;Zk-jgJ@h4IdU0S(J*ZZNQf5ifRCZTB3sl|6rd1cO9|z%%HcSKHm> z*I`%I^)$JaUa>;6M6$E#&?N#2NKMXP??Z+LcD+wtnb+`{K?hDgvu7$3_qEbEJo1#ADPKBw)AN^AECZxoxY=4XdF^AGg)#Rfx$ z;ZW7CvkXeR=ji(oDRnAX4-E{N1Iq56W4DuTxF3N0wY>&Us@=1c{^bIJE%s4pGsT(? z=;M;I3^_*a^{lGQ$W^C*fyr>sbYWl>QUyw_s@z;0StSp%@XW{(8QfI9=zubjWwY!c0ud4J1%+~ z3malL$3Pa6r&i@-6#H^v?P8FYTzR~o;4{@zP-u56{?zhLj0cHFUyp$VHoO2y_1jF7 z4Cg-(-+?~DuD4_YlV*9nX4Q;Ff97$|O28_Ga!2W$EqxA-K{?eNckR%5kb9Jw{Ko^x zjMhbP0h$$l3Oz6yor4Tq3sMwKD|YZ%bO_*t;Eo?LX&jWs*Pfj2oU7+DAH(Zdg5@{ zU_;soY%14M41&0G)Dg=uFFKwOsdGd)A{mwTNRBHLM#=4hSu?uiTejVIypCnyry?Pzv)U6>onQpM) zF&IF8%*+`VX74sQKvmfKU;_sP>WiX)3>x zRgs1!_7o!^Rj1OXny@(&xJgn@;oO~Apw>@bZ){@jRQyQ`O9~J4VLG@M6RbOU83L9g z;79!Vmibw2el9gX*Wsu7qKTHVy}_N#_4RtA`b#Raq5kM>`MeA!9Ju@|FZ8@s$@?6G zBg+VnwP00T1f2`pp+10Wv>lO$T5BIDhG@x(~ljn5!$1NZx4#mFgL?X~=?6Sky3znU?ZJ-)(PYceC; zazX(D$!op22gZl8KEdc>7g^!HT!S2#)rwMVqd?;_N$jH;ngLX=|@-g@%TN9e1*RUHzN4+ zi7$V(56Q4)o{wR4Atu5&do&Jfh^d@fAF)%(gT=zV9}wO6Z@d-$UO)gM!-jJiPvlz_ z40ki!VugD^^Ak`wjLSvW`12V;gG`luaQZFuY0D66FNPD=A=c8W39f1rSqu3~m6qje_OmyCu9mq-&}Mq?g7GUOyL7kk zXCYkSA*}ep-|Q2N7VntSpPv<05u<=ON6cbb&seKG1}vm(4Uaz8SQE!Lg)ZparD<>} zBF^c|13(QSM_y$d+bQGdU^5C&;2rgK*><^F2WSe$P@fMEofS&UID= z%OL@7f@xGC2k+Xa3IoG_r}DDf;4j^tP=)Qj zu~w&eBe=JldbJax(wP7&a*49t{;}RRz|Z!`8Ug4A!H>7uD&VK26TFvF+r>|5WU+X^ zlHAYMQ2JsAXMz~gyermuo8i)i_?ZG{fUyzKv|oDt36~k?ar3|`ovXW>XH9H`&q_N( zb9|1C&2(P)Q<|GS1@p-`s#C^M#Lryd=i~8P{Dr8YiFa0b(-DwO4LU|B+4LQMeu~zj zH}!Y?CM53CMm0Ga_z5wA$sYK8m3=STYJ4%O0`)tx_5sZxAvT$Xtjpjnw`uNr_in$Tl6dl=9!PD{v2dmSuq7ham}F2_JP`QgWL zGw_?9-6Ryjl2uls)CC12{y&z&QD>fk{f>o9KgJI?5Oac4i34*Y9K8`ZB@Tas-di<6 z0Kk!t{>Uz{9t0$$V}kqUjb9bnrTe8xl?|?f^CVV`Z^idz%|4D77`p>5qW@w*a-A?9 zATk#dITykU=Iu`HOzyTO-VU0%q;r>xgG&)>zbIK=cZWUKq_k5D4;hexdEWTVJTn-6 z4)k*1&V8P(rvLb}Q$T;`To%hE{Q-=6r>EgTl}%1 zJNiM9co|L$g+JNNjm$kbKfp5qZF0T&Yt>&D3cNx6R(K`eYr@hyUf?tCB#Z=2fmvv@ zl}642>wObHSMxJA%7jdI`0^2Oj$;d%dG))?Jo}aJdyEgFv%)VyZIneef?RlpC4Va# zs5ABKc!$sjm>tidXNq7D2lz;QYnQ;%b?~VdV0VYsm33>{+bBcrCG)8-zr!cA^8l*T zgjfM7p<6Hqq8w`G5`hP1Ec`+e#vbAa;tytEO#ld5`Xd>+5a@a8FAEZ2sbVAHHv<;5 zC(miv!0DCoFmrGP!K%tI89#*-`J^m=Er{jfGEa>Fuo78}5&C8ElKS=yQ`?P@g=^Hrds5Z zU$EZ^Agt9c`}K@voT+UGc!@a0TKJ1K`F-#}apx{41ed`)X~(&wHQ>7iXZ*yo~kPRM{95v>CRi`KbwZi0f|ldh?F-Uu9e@ViDAlZpo(WijF3+d11*;b{F-@&4SfIo$+%tFZmO&TEZ4kG0ZeTjUBns?;8 zv46LT{kz+nY+pro8S@HVfP9#dNds%eI$yKu_*teukV9M0SM|Z^>&r2NKwE8tD?wW) zI_92hAIN+S=r+Vj$@Qm`!qZ8Qd&j>u(@65t8W5h#6o~^_`QTj>qY8CYvP`hm56-Y=5yDW<0?l_!?lc5)sMLtT%tBfwF3|$(TDTFV|mg+X{j~t8`igqBBpTPc`^+Z0;rJ zn;$S9sssNLwoeMMl;$G(uX;AuA<Vp6~t_=DPVhbiI>@>)S($+A# zzcuuQjU8yiW!`2xN;*}8z7}h@d3o>)P@pTXXpk1bZGoEAeqgG+@)OjVm^V!X~ms78i|F{p20W_Qj!I%qRX*3ky`bK@Oze| zjxzR1qu)SIOphJ5!5qF}Xi}Z;{lfv<9PMiELGVO;ojuyG%)t-(mxuH-xnb$(ZC*-u zyxF@-#A$QXUDyhbBl1Q1xCy^Ye72u#wX~8C%1D-uB^r-Lh5zCnVy;JNSA`RmyUKqrCRSeJHQUT)|!!QA8U zR)V=l-G1<3uGy*UB-6n$gUD81iJ32kaxvJY=;)upuueQRFaaq5A4A`GcKQoGdSi5+T?J>Y9{<R@DfCM}ip%vE?hD*)O+QceH@B*aIfBLDI)DB?v*#3OFJlwOr=#k0 z{1`+3$e}?Rz!kde0)q)_)qu6cZpt=Zw}wPzzK1&jlK?di9+!Akb$p?86@RScL)k{0 z4M#Ce&bFzo^w=R3GHofoAo9gcJI1C{PKt2N2J@pX2hN`iWj(nYy`fpOywU=LywUSJ zZttI_ww7R?a%U4FEG7^g2StZA|v~BV?G+ zf*b~kncq@0G#58!R#0AYe-2kx_rn6=hF#H8%2QTyzaE*BNJvP28$L$FFP%}jXHw4Z zFvTbzK<5I*#^FovT=0?TO*BSF&en~Ti=uV+u7Lb7>+X%P=NLbY4rlTG4ZzFFEK)J z5*{9Iunh(JkS`23&gRWiY91Wz#C=cP>>wkW`V|v4zXCMOOiL|c5zhTPp6c?nomfhx z12;K3$nHCSp{S`-v*f-21i3{?YM$$)@gwS+oLBJ!(2odT!uP--2B{=28^;%kq7LL1 zV-LRB3QXD`H5h_^*wq zFJvo|^(rJ_-wVoJTyR9%{Q0=?tFuIW@#Ulr{4G`t@xRy)I}zzBKb1v(D-oAfgalsh zM^y)eTKH#9!tdxxeGC(Lxk!Jr0g7ts<(M7)%?#{=!dz4cmC%;-tyu4G_EBl4T4?#z zm|^g1(i@xz?1L8K-bTUzn{DTSLS-Km5phJ|snW3_>d)Wis#|P@;*6(>U;839GIQlT zAA@w_@~e$s3O9gx0+)$n?+fiZ!kToFg!>RDN0ect5)`SQyR;NJp#(h&{m#rnKRA(@BkukhcT(QtSx%ZUIRt~T=>5V=j z#0SZeq>VeUiwO%zt4W(s4QN9BxZNRwz&mu$3%(LEcoW|l{D3O&JKpAbHGmR!8C%hD z*VoGc2N`Gmo>4J$$jxb)$b$uh-S?-`P)vRwXlu8{Gu==FQ0h~{nPg?`uV591> zM(`uaeTR!WG}3xzrJ@@G?@1nNsjOT!!r8Cvpv< zp~zo9p18Fl?*bL})A+|(H@2Q)W6tuJgSD_yNDu1K=57g=60F4#fiHqOAGcu^Np(K1 z;iM!Wtjbr*G9+O5Jz@@G@ghk)+8MZ!wAH&^`TPBzjp{^a5X49qQi(tSNCC6){jg_^fm$J=P0tFvYlUB93s7GEFIMC# zSR(e<_(#S|*~gxDmxU(wTk^6TI7;*9e}Xa9GGO;GHK zEm~?_Mva;jmr$`11)E6F8JsAsqSlpGMXej^jA8|X%|tT|13Xn9YinC-wQ6fy+bRW% z7}kJR#T}&z;&zS^!3_|V{J+2JK4)eELEGnf-_QGh`FzOCoaJ7w``Yg7zLq^~_9%+B z>RZ0*R{bKL48Fsk87%f5q;`A7f9CnHA>c@ef;H5L7nvFXg!!wu0vMaNbf%lAK<#3X zEw&9gM&)L)5iIG9tmo7W3jggiwx07VoJ zPAY$dE`3tUvq}dk+W-OP{;I651 zIzhSr!aE@)lJ#M@aZWReW`Bh^QKRKDcStSBbHNmfX-#}<$X^KF)?z~rs#RihfKw41@2GjD@eGcC zznOV1k?(&*sXe|I{I*xP-6xc3BK9UfeF0j>whg9Y&v$Ke@_nHkN#=+kV{@eiV8sE9 zwps8Jj+~Ydr`5Bg(cqBOt)LHR8Oqt_4HFhNZE_4j z2`4yHDuy9KTjRL#C)eFXxHH`-YaV8 zq5$<%H%@ll+0!uwsXgae??ts|r=r?3qx(E!Xgs6+!Jm;$A2mhVNQs)V8r@Y5UcX4x zRHCMYcrj5>GF@`0zgIYllPiXL&1|Ls!Z%3&&{s0HNb`!;Hg)PPe{GKfKl@?nsJBw5 z4yuS{b}E#sr8?x`*MslSDEl$U#L-JgEB-@4L>%cA1kp&Lb7uzGg`&BdwUg^G{}1wJ z?NCsN_UsrE=^Gqb_8O%7(arSNlo(LqL$5c;)D$RqEd8M#k$KYH^QOH6Z0y~_djo!=wCs5!xU0b*z4hQL zf^t~EcE^u>P{K8w!)jR^`nnu!Zv7-z-ty0nX&o$OU4t={BD|Fg z;P8R36f}g_{p&EH1q7N)*nh?V5ccQ9Ivx~TsCw7`W8{IxOdsSSH?gM8O!i0obd$At zf)>KI;HyB>vA)(GrIT4`>P4gt1rLN$AM=`7)5MqHJHnpyJ@G zTd5@962mE~MhEI=NgwVQq0q;AZp#a!Z?Ftl_@~cB-6)=imH1Z9yGVYO-IW?gzwl%j zDkoOOi~BFU>{N;y4ZlpK0IL(YYE3nNWHjeP8<-W*Dk&Z*Q70gS=8suaf53&9WvJyd zJd{_?nEa=~W=GM?vli#_MY(yPei^rhm~o4JxYvBBI&3P`BPR|gS+#b;h2E@7Dm?#$ zI}4C4W)d#gk0w;sdh>8r!XNcs{E@V!FgF5OnNuo zFGvcqoF6|*r@4hzEH|_lEvb&?nLakkU$ifYA#Bx&RH|X~kvTbvR5D9ev_GVN!ZOH3 zaYz1%Sfaw~*m>8n&d3ktC;DYq1d&xLdcP3Q^xXwAP7=@bGyk}UC) zZSf&kx(z0L8WT3Mq~a zfzGVf_zPcjIPkY3Prw!{mS9mmums}Qj3r#VElW6nOMdJ;hXMq!72>}Rj^N^DPuFW- z$Pcia!4LWu`GIVV@PmO)(OVeugR%aInZ>179TYQ67f5?TC2U|`HP`)z?)vw6!IpWS zbh>lqZr1(1CB+_{-KlGyBeHs9of<=_o#(E9Rie*pRu-w2@;b7;RR?%}7wpY992CK& zh%ajhvfmEAJY7Qnt-~)`9N~+1K`Fk-i8|yTY@0Yw^;2&RRt|9-}VO9ZORIH^- z{YB-^n=NNxMYA1Oxph1#$WwC-2bsfICdYd|a;9&pOthX#rW9|wguhSaWgn_a?dmVHv{W}k-z3$jbR%!`BvgFWZQvCCVUMT=QJ zNJtn)mMX6;*_%=|Z(lQoQ9B7y7>UYy5zS$@8A&JSyUbZKh}gDCqT zsxykf8Co2@rTq8r9vi;bfpTmS{;3$Meo2JCGFQE4>#uxM?oiU&B{W1K7lc78)TiI_ zFzE_;{gm`u{xGQiVca}1K|Hclk1VzPDAyU@AQemW4g3wi_Ts zF{;zQ=Vjj&Ymh>0hv`)E@UjQ1okFD~@Y3lspvDI6{!j@9`d>SSIwDRz3+=T>Bzov$I}UL*KXx7SC(To+5=Gdsh zB6hNI*^!}_{gs{wj}60kzt+R&EaK?!f&DeQO<436QO`*r!=lXIT6x)QySvW60u8je zO-ko;)=bwJ4h~v@_aA2>+L9*PvKmgA|Me5?d=0z2fo}Nm>h033KF%@ynoPsr@!Vcvn;i&1c_w8s0Lo_vi(OYmk%yW@xBX86CD*Rzc6bMpF5NhR;bS(?yRMP9Ifa85fumN+Ui z(95en0>en;GOm=6810zKCG}MF;Y<1KBVfK#VS)WfT(mgvY8i$#`mMUo=OQ%TU@)%5 zG`uRT5$0KC5P#CX;b@7{H#web_dkA^5pv9=O@8yqOaZGefKdgIXw)~1vY8D(dO57i zYJuGe3)*@b23W880y>X?YfzIF_6?BH&IK?Ot-!NVYk3Hbc03x|smR~0ymet6u`#Su z$FId#$xou|W&1@-@C|ylnikGJVEzaz{Q;yp2xPF2^y1dx|Met;y&2ZwmhSy?c#o2M ztkCccO5wPou&OWU)(CF-JO5ddZ!7+m%xw{i6MuV7M%!Ln8*RCO+>63;cQF$DK(GXHMHADgS_D^7S-C9vfHcc)s zGZ~g9%>5L^bgE*k>UgHio9i)NNl{w^yz^TAiyty|*5b6(zX#e*|NbrgDNWsmRcKSD zBe;V5Zam6CyfWy|io4&|RwK7RsPir#KroZ?=&oxU=Ux8NIPb!z#(863W37psD`tdEO$nR2xnc@y`+2S1-%V>X!`7CEt+f?eoACv$t?#C_)nRMp zlG1`0pMu!U6*Iq}H91Ul1r~s`RsdSqT5X}V`@f*I@!hmGHf(K1*xHmrYi(c9+Wp@w!EN;yv{ucN+rZ6Q0d8SywT0G-9HGE` zkW8096EdLX>U(_n_EK#@ z^>5EUFq3<5!p;mq0GkLZ6f>O=mzR_`YgA|J)Tw%)>Eq7yn=Oxn;Y5@7 z(=G`?aSJZ$&285XaAEP(e~O~XB`hN0QHC@zb@gF|GT0f)S`I9OKk+lN$0zbx!@xxT zfr^=KUcDzgt{v6odronmySDHdJj_n*K9$vm zE!ZOww*8hOhpUm_{^h43XZNRf|1L}_CcnG5Ma^l`v1m7bbUF|%m%2}-)bJG0|Lbz; zb*k42vo~K(3ER{r3HVYMxlB2`tN0mFeWtdK)&7Cj`xJm|`BKPaBl+%ps0zE7?sEKS z^D8H~3y_K@p?@8NU_|k~k%kgYvz>R}B)t1hc~sS#SNUJsoza+sA4zM?54w4ols&Hn zYcer^^S!*ju(DqE2Yk^vMk3dr2!YN>Z_7Rk1^8ng=m|FAT4yz0y&D@?s=Ah5{dLe3 z&^tmktLdN*Y<3QS9YRFF7MGouV$*4WB>24Te6>H+ZE|%;x|clSPweQU;cx`vWkt#I z%iJ$nEJW#Le@`#2;Pw4!^C)co8CRrPjQ8EyvG|B);-)|qyGAYyep>tIEzT}{z&S-7 z#Lm@->LI=c#J)tzqjpwxxkaki6XA7XemdX8BD9BDgz8mN=m|}wsY^+r;{LRu^_p@! z8z(1^^qF&5IYJ*~O2~;HY5wJjqf!+ECwstjFSMa;5R0k!e`}WAKW=`Lk1zJ`RQvwBCz{?C@n5+^B0rkcn#7Q-BK7MYu~gMY zJ4D0t=88LHbkN{p&ooesVUh5-oanOW60IO{e%S7bnl0XqKc_Q}P6Vv!?{;?1-?TTN zl8y;M)w1`Jmw?SmXF~&tZSbb4nnJJ_f7svWuVqK8IYUTsW6W19~NT(qgLS-AsqDQi%bjzvsw_ zB=2z%O7mm`6q_CM5}ohmK6d)}0Wx{YWwUNBqwMsLJsC!^3oXomf86^=ZpvN~-mKEi z4>1(jeu5nlOtj8&#w4o9ctXK$#WOYJK1^0E@>*J%ovZgyJho6+f$B!yz;MW&$BfvC z_OI~2z1B7+EiY(wX*g_EgJr)3-CtVC>E_@>)uYENTM=O%dX3rY+~BWlr8O^0{xpW+ z;R>`fbip&P_z(V`eRi#mYd#rZsLug{9`>@=sV_wm(*NbiQ!_c}PII}z1~!w!2nxOk zl%3zL*4n~)dQ}ALK2d2!)-9-{Wv5qbjDdtpxIS8nAMz78#(J{p84Di{;rQxzf#ZF2 z;@~*^`wM`xHh1Cu`MN(fx=(<(P8G4(jU+S4pBE%Hg2RTaj2$Wn$~1-<%G8;Ap9uJ2 zDdJ7R>Ra;VgCn_ktxr%E8B74Iboz+dopjLHT0czB7F1 zg>UoDPkBVE9WFJo?eJyR`O#mw34t`J*qi=NHdw9YwWn*aTyw2x{~kDE9NuUCDPRK9 z{{4CPumFSG!j3LeM^$v>Kbs=9uj!wi!PoWc25>1AJHOJd^y7+J)>3YAR8{0J@-IrZ z6Q52vfgSysxs~YbXOsk~i(#MqM~NEhA>zRAW$T4@EI`&g%_SYQUnOfgXgHMcN$g>U zgv#q~bgzT?xKI#AP&b#A;qsXB1~2)Bi%6__E$OBHm8f|Mrywu`58Bm6G>O)R%7z?a z%Iz+Hsh17Z^=yrpe~k*!5G}6cDoAjo_}bqChX5P(B)wPn9Pt07H}V+?jMfCmsKYomY^v2UwcX3B&GR*>T{dC=3lAH zZt?>ux3VTJYQseeBHeWGQKiwbPBI9UT!~R69|6~Pu>&pR~xRs4BJcaq&-qw0JcOH5Ptj@CCE?whZ{}q zN@n4Ze~X*5A^*8tWqiS9wB>)01i`I?;3|Go2p1+c{8HsyTn|ZvRXWZZM&IXiKYTR7 z*Hmm$W%#p3EnUPaGdTzU$iGf%+XtXLOn{IJosJhRlj&m;SS8bhIbMSfL~z*q{$kjg z#lrs9*1PwB+sF`JH`hGvI9wv%K#4`g_#?X03?_saGu=q(zvjgSP;UJFRBpI9j?7+R zlBZET5UMW_E=$|-JJ(LT|Fh<>9Zn-GzM~l7E+I3%a`4K+{G{yPb9wlDyDQ)ldb<=f zMCqOWVZTRqgxaB1^&qIGuBCo2aE;1`><}Uk8H$Haythby2^E_BouEJ(Fd>HiHDXRo zJhe%Sp1*{At2N6@Uhq!zbqxOHHytLf1qh{ygPaD!xGi;%-*H)C@a7}5&5i}}s3Vt! zZ&-6V)%|rA+N~X`&Sh};hbg{neNizCQd}kIyY5uk}mJ4 zMC%ox2x0oUCp%9;p7PBB?gmvL1uIYeM<@yXhmV)NxGMm|1!m2m+(tz@v#_7q27KGX z3icJAj#|mC9~~=8ZLx#wT}(1iQf1*|SNb8Xhf?P;#%&~rN|d$>-)mm+rr8%Xt?bLX z;ymX44w28)mipH**T&hPtZ`<$-@_eV0O`eVwhqH4SzO5LzE${go}f zc1LW%(=RL>1AEPntI@5QwBrZd}7db};oW-#DWEF`))+INtV&gPnvb+!@ zHM}V0V&p4d;!WSey-<07dX1x>O$Nd-krYAC6wij=A80&xmH)l}{zT4dCcQXh5sI>x zFBbs)Jqdmi_{{51>*?f1Qca|)-b}_m#Tt+~o!qdM60B!ipV$6HEVVwjzT@{Zn0~OS zh_5eyD+E%|VhFHqbXqG+gk*Z+VRN*Vc& z5#*{aE!TTP`R>0>)ieFjrbM6n>EbQ7hV}p*)^*OTWq~94wbl7^Yap9#@_s5sI zb9Fe5!EKzv)|Zuq_5{B|R1bm4K0sYO)b}rgk`t&meGKQaC-5gXqC6_vvfE8?|1&JF zr~maKwpYnuc)5-RIrGl<0O}N~j%plJNVplQ_mM_okbtd-JmN#gFX6TEguq zKw9xU(2%U)pyffWaP!JkZY;a5S}Pl$XfI=m80TvTGX2hDmej}Nz@SAJ4EN85n%)nDTHv8uH{j%xB_~ORG)YBJFFG>CKcu@qV7?*@-JZZ$8cE(@+?V`)=qd#kvyfOTQS& zI1AiF#75U9YK5o2xf?vK-QVRe>;=~g78wrnc9DOAtj2H2&8 zgL{>oWT)jM&>g|Xh{K=zfmI1_j6C*bX&H^%j8_ENk`y?^d+yZ(OWj;_BKZuR_O z;r$Z$-v4Lj6!rJpcXqMJ z_Fxt=?tPMb&PmF?q=7_N4S!@VYwf-0${#S$%pSAv|Cn^kO|Ybh=!^X~t?fa^u511^ zZ}ks<1%j;d9~*6aHhU8cW5Pa=!I4u>DKi_+ynzQ|a~*VXf6e|61wPqvuj!#R8`D?i zkJ*x9JyNZgl`E?A28neHK5UqX_T(`6X>Xc}^LVq4i+i(9h*vF5PoQ(`o%DrwKYyD( z>*dbZSH-|em1;Zka%Xzh6M*? zCN{14nmz3`?*Q#PzVH8*tue8?ABTEMB7ZgX-x&A*anmP~E6qyIKDdq1KE#(!@AfwD z#0A0Gh4<}Ndhp<<7VKEnux@N4}HP&dW*n7tfB{-z4_2IpUiXfYG*5} z_A0-x-AdPcEz0c55?=F@XbEezgcn|A1`2{X|6H`Z^+I^QXo+dvLKaD9gbvk8P2?jS{Gmn|+*T7g!5}z=>M0 z-+SdQ40yyqGp4)w8GTA7BarvTeGFUbape=ghGU;O^(3S_?_ffGbhXLQSrd1N`@2m* zI)jy@E*nvf=?V9Mvx}-YLLq_EslF=WH7)%# zk>g71aqAPga$Qa2a0+if&Igg9RyWd}yNru9I3xHi;gZ1TBots?i;UMqNBvaqf=Py$6GSPzGMw3!k>M#J$Vi*x-vajMdTlO^S3;IZoChTEMm-9cL=8m9@!gvtt!O?LvI%= zcla=P!{AQ;#Iyz6Z_MU&)SVO`+jMawM z&j?1bWh?e?DxH5y*!-)7B`@f4PJvre8%LQd!&t_m^}c|XLpcJ>m;C~mUnoMpe7In4 z>&x}`e#P}4X$4O$UYBw?C%)u%t4^$GTFQWj&IVk<%o5cD)Q}$>MeDHS_ma%>&!JwX z7{ypPv(aLnD#O}&kh^oC*YrG>Q|D3xZ=?<=t)5ISAP{ClvanC-I5?CODZrcELG2J+ zGHge(716=4ox^;GWIjvOJeK|@`F@A>%RED}n#66%jo22KCaRW`X-c)jYRJpDMDWnV ziX3|^vmE8D&BCbQu9 z_go8sk*_QEYR4Q>k-33Q+&K{=uaFgYHNH8#?w73BB`k!0_fh3C1lplvAzH!G*GOA8 z8jd74BV%SJm>izxd_lZeJUq;sKV|cd>HXXZ@e1E$a)r~ zs+iLTGJ;_h%&g2GPJLrx*o9yQ0InF^35yzF+zG=KN3<7GPvNf?Yh_{T+Q~p=Zzi@2C^MgBR zQkdWZyh@C%<|LdwRNW5Y4?yb?EY%mu&~<)(sl%il^uVsVj(_;iBDwJGBSLiWvTIS` zg7^93|L}&=crTOJ7`@qrpsu&P0YorNq)#h_Kc_2pJ^v%%kL}IBak0(R&LH`nK0T2; z38^_EG)?pr{H4JO{!8k=5=WSfDeo9y`-av%a~Cjgl!GBwiVIsnB9Ev1ez&5mVR>Zx zi4-r;xBtmtTLSvZ%;|V#hLfj#3Ij;L5<%IC(8xUE#457%>*_6(tQy5M#}9zh6*q@u zgSll_>{cC99G|{T>dj^ppP)yiO&eAI$h4!s~nEx`WrkTe^qWW7XZj z>v>|*+yK51ULEIe4_sz0t6iaO|6_Vw z_Ji)=b<=j>b=1M#!0Xt;0KO1jXQ;Ps;q{m4MR<*YOGfzhqVO(+*Kn?PftR_VvnfmD z&xy;oZ`xJpAlj4VhYYernj;54J#z4}r1JjgUt{tgxDU8*vym_Mt>cgae;#&b`n+NL zX2vH`qf$`@%$g?~3CCFA)b{6_9RF_eF(J<%c6QP`?y+I#B)-;`Xj;wT zQ(Lc&>+LgN~V0$D_D&Na5yF)82SvD)waE+yiNJo)jK`mrP&V&;8h&m56Vc zAIBQQW#THT@wrMgy;_Um=XqeZq{j~u`B6RUso>&G`>`IuwbpOy~gFP_>^4K zt-W8p_O!Cvws(6qt?_ETSsPHOhE&(KT(JfJz$M%wQT}c%-{~ZzGV_!AmVFFl<7O<0 zo!RmowL@^b@&kP4HA~Oufex!HQ1{T8Y4tU~$GH03ceZrA81C2V=A3z1;d*jQ2R^4$ z7#Wg#bRv*hE&ScGi}qt3cSQ2AZtlK36?z1q*VWBF^U6Xybz1`E2$0-&fDV2N3fcO& z--dC)B)jPJsruGEKRfFO(e8C5Y)*K$*T+OFHYK@Du_?v?GsIj^6S)T}lsIYdhI!wRP2dCPcR;?3UfO((Cdbhd zcvt3>L{laH7Zw&~F;$7ygO59NESzesm+hn0m3cPN>RKyU6Ks=rJWX+uqcKEB0aktx zI!)Rs;Vk$f-^hUbp>fFD+&|J8q4R%-*YK74sgkSpP0W9*mwyg%;3hZm)MrBiKR!sZ> zY`LN46g-Ic*E>z~M>o{G?M&RA*e0_Rl>9K15( zpP1T}UnJSIXtY0r$|Ch4hlR|@q%!xV>tX2-`O8sGX^lk&2U>MDbdo6oRZgJn+y;%(qOrPh9u@@Vt`krh(!Wq{5MY`@1o^w}*7%Ot_XXYu?5RW6qXd%a;Typ!u zcL_X?MyljH(cX~HaBo^-Zq4=XJZ)^GTLll9qbjo)UUMJoxmx)&IuAs98YFNP{bzIt z*E;;87vzxn_Pm)qrqaozfnBrfHj9r2p>20BT8QSqb?Qw2>-(YbthEd`l9R%bMqB^m z^Jo6CEHVGJUU-O5KR29bgFMEQcqRfTAq}Mi{GUxW7^Y$$b2^@RIe4k0KX(!?kTtJB zkrN_*w>o&7uMU6d8eO#0znOY*EO78Qet^Ol;#A?OA$N$EJxX)9NT!2BuioZ7GuVk2 zO6>oIdgdfn;A}_1+&V}uu{#%zyoqjXCq`Ph4T|W`SpPHpiewqvlf|P%s#40KU8&st zYvCOk7nI4&vNnGyas726vdeNO+8QhK>=mWT9=_U(z3Er+UNW~9`z?M*eD|6a_mF7a zbMq-60p3YjSK1M8wfymM`F_glfQkl3P6E1M?PxscE8#hQl`e3OUf!8LT-Cj%&`w!0 zq`J&6tgNF_lal2#y-&xEA)l}_p11t_2$R>#V>{D3+XPt=|5jaWof>5(>mLdTV!s88{5kTI_VMSk z;BG6F9%AVUy0_vO#PKp26n8)lUN9W1E%VQaNBbMXwz+6e+Cl_>#7=v0)5BiffFy-xqLAGedi20Y0Lyg^eI{hPwc(y z>OPF0=o+x?ST_4F4QD*_Wwv)H4|R5kPK|ptFCIRMWqcqthdkGD^~NV28r?7eo$^Xlij)@0|4Q#)dB=@b8$Y^Q2g^6 z8r@ApIz3Pv?f9^vv0+2ipV!cgZW@{rHgtd3(9E!*+Rtlfc{dHUg$=C_8(JMUH2U)z zDo2jH`$b?&wrgtD_6dym6pY4hzo9!TYQu*|^VzjQU=-dP8#Xk4`wiW05wcwyxU*u4 zHE?sq{b55hT|>7_0S!K{t>rwobz5y=TkFHNR)=lP_=2{|QAxLMtBh*~DfAtr^|4H6?88{;;i?VOwoq(AM&9+G-2iSZ$w>VA$63 zFKDYAmbMMNxMuLOPvFI;;I;Y-+EPsH)@{{>ZMn$T+bhO~ZLQz7t!<)ZOCw@ww@b9_ z{b9Q^`AoDb$3MEQKbk`%aXN(cKyTVN=);6jGWJeUf3s6yOBVS?dp6s~GtxjZzDr1w z8&cu#NGlTmoX27da}~~#6c0kBpKz#jb#K=3s4PzsW~Lr3bU%L;5h>Jbxz7Z*mpxk-Lw8V|7vTBksDN0t^OuejO!i*8E7K5C~$(y}Lcx^l` zs)g8HlXZc|tr<>?g(a=)X-=}xltw!tLniw7{>JsTxAn&DR4d#{lat;VEZx*azqdLr zb`tj%kAx?2xMwT4=3Ub|^eVgNt)2SWh4WbOvOU8%vK4JSm&i}8Xagu9f`lY2gi5*cemd+J1BlXCzhM>{r zr<1v_X8M3LOkv(1b_(5o^zxGf(25S?Sq)s_l4?me`lzw5aKRt;Lws&?YSiC_7)1Y) z-FW3=HUpvF+tt6a3?C=lOyVW#K08X6ZfWcI>u=s0?*72o>ohZj< zI+Sw!>w5~y@dXJb&I1^IxDh@262Xy*aEMFa>mEe8aEB zm>TKJdwz}OBu7kPf6D#aepJ+(KO4yXM@#OP_kIp4r63mv0*NgRc`COMGnyqK2ZLx{>yXSnn*cJ^*jLzg7v+<2!cmrooG|Dw$U`1b zHL;L~{6%^H{O5Vd6Zu|ymE;Uh*1SLQKgdH)IcX-dO)hdZnu@*BwcSbgU{A6tb%Ko8 zKE5&9&fzZ!RB*1)^1$`=vocZeyUDUFiB>LGEhKQIH;=sH_jcY&W|GoAzEH|Sxe5vi zhF{m%!gCD#8k!5{Ld`eiJ&lq?vq8siGJ=F`}nYAV36 zsXS?i(K13ZdZbjc>ghymd9n(B#&$0^0wRef=O#7iOu0c3-TaDw3Puv^b8-4;m)g8R zlX9uem;KIV1}435cD=fB#zU*Kf#0WoyOOYAzt%CTu~3re+f~f1U0L~V~A8Ctote{D&dxUC)l#-iK%0|CjLJ_u81gBmYOf4V*SHGu-i^;5i{?c=5FQB!nRz9Ju3CKF z<#7K90qx*paWq?k)9KL3CzlU>%$>qH%ZJXl2<4KhA9IQZkCoFY48d{yv=r#av_|Vf zZ4TO(SM|!tC!!gI+;J`q%`gfjtj#4rAIYM)aU6SO`rxwkcOuZPhxDmaN9<_+U%ckB zpj!nG_{(n91BG`IL*@(1ErXcBF2NYgnAM+E^Xcz zOF$xE+6mQWiW9$O3X@|xF+U)>iQB`Uo`M*6byi;Y58nkjPIMNbbVO6V;xCq(WgZY- z_AJd-vs2B5>H7(KHes7A^=Xwg{Voj%UPe%f-86p7Dg-w%xR8f;NvD3Y4Wf`veWZSt zyst*}dV|`9-))^{eHhIaSzmClemb^jIEp4(ilYRTcS#Q)d?;dcn11nZ9Cz)BSv_K` zQThlIQN$PnK>e03JNDbcRGsrZIg5ife*)`t4l zRz=_*ywT}fWg>o7d#I?aI)T5pSrs+cB_(Q?mt0aP`67Kw#on}`QvtY9H#>dnL9Quv z{b-#5)!MPp&D+v`sx%Do14VLk)OCA>+m8Pwo7Qm{3S+c<{8ZqsA6^vbYm)in-~&V#eTzFM z5AWR2>lQ2dmfj9yV!+jQ=`qgt*O_n zM@r-T&*V4qs4I5;#uOAv|8VLWPSqk33ixBR0o)Mr{dcgsZqykK>$>d`)pe78bJO|| zIgzkBftP;c4&#^5oOo~>-_Q@lW4k1RjY%%EQ#1|^qdWBiX=YrxL`uA%QVU%6;FZ4+ z$aEV)f@*!G=r@u8TxeEzB{Jr({0!xJX+60?){MkDM^7iKp4`sXko01zRMSE?HRU$2 zOjc8F=O0I;!TF*_%b}-Ll$&FXpx34kLxC^qZycH0y4N2`5VV(_Wat|fnd`uqKz%oefVMXY{tq+UVc?Gp&jh<@}u?L_y)m z?$7(dH~16ob4Qhy#G4nXK^y(^icS2uYZJ|L^i)x2`MrKdbb{9UbGu!bRIB~$BEpsk zHd^@nHRv%4SNh{t>ds_6QS3rYuh0eB(A8bFp$quwFC2rREcZbWW4%iK3%WV4o%cta z0x>&oo34t(Rg0vzKXDz~R_jl#{*3l#W}FiASV&O=rO0wfdMQc}$NNrtk!?|D3OT7g z+IP8X^M^mur=Yb=wbzktR5WY3T{zeDDZ0u6z9Ef{Xpkhd!`23dv&9`K5GH2j9pj7%196{{pO;=tCbRQQLc-3EOhmMCuoYt8c z5FExG_$TTQHOReeg&wSVIrDDER43osZ2UIQ+M&bXo^l4$bTitKK*_4BelV^^HZT}m zU-2GBD!!%K>c_@a7jq}~M5X`N^`4d>{gv+Y89XdVzOkcJp>ludbQwlYwiGbYkp=3_ zjn@C730==CkV{`L%B6D2r8%H$B#%;6&jgB9ihhd&4LmVCiutwh8rL)OE^vyI+h5GD z)gERV!|SdpVL5m9gyqORBT?1S@s$7EcSFw_*;kV}%f*HgKjx%){{XkmDdGBeS{QJN z?q6RqfjzkV2e#{v;6Hq&L-7+NZh&c}_KnpIBpfhY7mDLegiD(ePYT7)E1>vy=Y}Yb zp!Mu^nc$clE913TeQ?vsk7S`!`7x4r^#^sP@@EnCIQVH}kjLkT>?WMf=|Ile;aLA( z16Xe>v7C73&6J8MK9%UVv2JJ^n7&MI@u@gI7w0=$m+Eb)sLp z!c3k1i!#0!>~d3~t|F$#K?PMD$GV!86EChmve#aj=P2F07XV{0eT(vz@eJuzJ9J1` zUy)2znRoDhl)^;pb{i1ywue;gv96s=`bDVMwD!LDn`2=CM9bwSVKsobM#c+tHnK8U zLYu|@MPI!{U&8WDJ2oDXimgx9EV=6Mbw^$kcX=mMxeq#aiRNpxCH++gdiXd-^hH@l z>52K;5EXU0KoRN?6+r$j3-qwozqyP6hCh*Clrq1g7%VPB zDL(wU(AHM*FW(2!^XD&MfNTTIXl#5;DM?3=e|2Z$ zRaE5r5?=^=9~Ac=IHD&6Q+f{NHQ%Ghnp8@x7@w9H?$YI&{a9IsMUZU&-}LvrNttpd zTumJqthl9jPGesT=h8T)IlHrL-iRu(vlCqYo<&+>c+0T)EF6~)B?cj$kTM&iU}-I* zOz$MLiq*DU*_r66=4+nI1YsJnS{#*v;lK}myg8Pcm8iM6Jd=)`I#egdw)r%jsB%{lxHPSFlbN^S^G3r-ogwSVw>IHshH${=_p&<%8Aczxa+l zHILVk2l;?B7a$Qv3n>nKG+_YRy# ztBLTC>jc{NAOF}Z3+nZ)slg(b#ZNiKC$;4qR|NT~RUrdfGO#AC4X0LrcNmAfqD+h~TJWN6_A*YDexgBPzx}#X|US8%o zzXLxE=^-SHX!rL{ZQ~DGgf|YLg7!v(`@BC1-rcBZ0=6aP?rXq){2B-BT|;2^ZOEUG zLLLI!B(^I(oSrOTlXTR7^m+&EHCl=0waPQfP7TPpqNOA-DhDo(U2;yakjKRI+1zdx z1kO0hAW!_a=?eYXl}mUx-^Fv0=LRe5j%ucnl&s?z(Vx<0uATfnS{fOT4D*>?Iuep^ z!=el6el7@S9sVWCXJrM_N705rUQ9?QAO9|D2;+^q&MYy-47*7OfzzVvjs^O3qdofu zMqBlAGWIXC@VkpiE?T^^-#F@X)+eL~J1^fjZ?>a{pE2ta6(d_A-tE#vRO;-q(pKrf ztKBNe9&hIP2G)XQ!aXyjg*xw+#iEZ}+Unwq>sv0V*gHHwQOKG2C~#sA5dq4}-pn-; zka>dN(b44yexDiqwu|5SV~K*=H0kvO_`Tbdi4}WO3o1#ml+ZI+d4>%38~rC%3HDQM zRt1drn)lNa*DuoKw~4R&C19a;X;D==Oc!A1MYrd}1;y;cVw!6d;m z*m(!vAZl^4vN8&K?p8cEHU^xMec`U%;}A#Q>W~)7h0ID zf7WbMZwwIM*RbY^pqf`U85Qtv#yN8?3GAYgC1+<|)a4g@^TbmotN7Y4&k^&DBw za*4Csv%WWkfSDtO-i7m2{}1n(o?|_((@VJy%f1k;Q*MDwh*$vC#}kL){RCq64X!ho z)t2O?;6=I8Pa8xd!28@&fw#QPfv~^iBh--jGGlyN-&KF@;y>e@%{QWl^ku#0?GNdc zkWIEij!2IACgevpQ^1FUMw|IU>{w@zo%%Iaf5ywhdBEsOL8 z!or+*Nd-Gsccx^ke|(;^hvV}DFkc_U(J$hPA}rcK!p95zQoCN^^waEDZ4bJ}l=OZt z;F?oElq9e9f%D60Z+tfQp6zH2q4cZ?1Q9&|D6@_2retmb627{Kuk1d1z^`Ahw%3iy z_m4Nd6{FSpuGRV8)F1GA?U6%zWS)iN_r$lKkru}%IlFV&&|Y2!U1UDn;U^o}-##gs zg?H(rcmrNGONt&da%ANBjb|~Z^)k*BkS#9s7j%}=gm4v)l$7#Uv3$VFAqWA zA7tKY@c#TnL)D^W)1p{I>~Z3GOqpKipOl1Gj9?Z{?nQXk{B;ndi0#x2#NKsXoYIFs ze!*}(@OVe`e-iXR1Pb<-!C?ycfid)5ESQDg4K<&Vcc_4%k3(>Vpu@O?$FTs#`VI72 z21U%Cc4epmP^yO5phfS+W=>jpnZ4xJz2 zXQGBy8lN`Qtj{eoJPlDaUhr8Hib}hdYg-&EjK)w2e*%{Vb{yp3X4sU-ePa09Vfgx5 z3BI;@Q?Kk-R#tyxf5X>3LVO)qfKP<4J2`w!)I8DnPNL>L;VU7h7f1Nor3c}w>!jm0 z)9Rl$=%jK3D*TDZnUwIRDQ+@_DU%~aLz9O5S^Jm>XgpshT%3D@luMn+`}hG^=&!B%F;gtrn2& zqhK1S66uGzJt{_e^DZqrF<$}7u1e(=r*bPhc9CmIvSyu^{ft!y`x)b!dhH!H`+qsa zX^r@4(>Z=Id*H@$_l{7o_5+1LxKW@RDgtf#tDbczdP(to!12W&h|e3g>9^+Hck;t1 zBok&gpr(On7^(%sfiOgKy0Mc$7~;+_#34H+fUId(tiLx46p&F37(PF42J6T9YeQ~x z?kP|p`3&Us9;`6c?}gf-&tc$;_*Ucdxgg|*uu~pYcc{E-=b6=pQt|@oM}{Y;zT=yb zzJfng>gX;8zvJ`04#XBm+nWTul=8;OQTv!94>~%t{P=wTqa4rfYx2X5Z|H!~-j}SI zFMddbDZO~vz8uDP-$SY=mgKOTj$4cTxyS~CYd9I1A=)S}UD&~Eg@-9Fv(aDJ5!pdq zx;gd-=Zn8|S?6U3h3jm)S>83fCx2krO7WB=8y#ws{cB9-PwbSPPu$fqWnGInfTJ!| zkKi`b5|33O5`X=lKnIEW3piS`16gCK*ze=1R(P!z+!ne)&V8KD*E2MfOtuT^f{?}p zO|gXrd$2cxmfAq??uLsqC6_T>dRbrMfqZy5YLKpKsCv)vE2VT{oZohgkV>UPS&YE|w2L2eER2@TmmgTEH|oglVNRE))7 zJbA$n0^~1ud}D^r({+BlDp`du;JYzScbE^oe&Ts_4rM-s~oqzoi68E{mw%HN-NgI(n^<{08C*QVT>{C>K(h=l?T&WFsnM}l*( zTqsT(dsNh89(?T^QTr(f*%+@@gEby(1kAMMF2Nh1?C$=MKib-vaJ&aZ(@P4%rfrLu ze#QUkF#>GZ6d~2g7;^6AB$l61`CgPzS=>T`(Fw84p21l-e?|19O@zDQWk+(I_86Vm z%`t9(#1kJZXEAKOeapNSGC>2dY5bLSl-c0e&8c`QN4hjE6vANz=(i}rT1~mHIOY#G zIg}#`pf)aQqw;JABAwT?YPjpX1R=u-Up6jWkOyM?JU^_0ka=le=v!y@E~_&cSf6{* zc+8tpxl;W;FqP|-gjY}gRJlU8H$Ihn&z-l~bFU@)t;8I}*+H$ep4~x&72HTXgYcXW zkoGGv>8ENQ^QQkDL`JpRJwviv+<*qRjhjLL>E31ag#!ci!akrqeL%M@CSpiJ$-fm! zn{4#-NoV>8O1LBHL4-n}{tH;`jTDo)Ho>Mm8C$_=7}*PwD*IJMZSKvT=>f^yQz)<# z`j5(=JiIJe1BQ(QzYR5kJtW(1_Wxkghguyq6Wy$OspFL-HFa7;ZW1V|Pebkl`HqVE zKx*)tM&9?2XDq={wBWpO?i8+x22D?hZ*M)rdqpRb}o)ks_Vm>nb z5c8~WAddj_S1EpC+WN@BD+jY1{#FAC6Ww_e>(%RMWO}6jyphT+OH_TF?AL*Ij?5tM zrvz>%@(4b)YVcY^h_{mcKIu3x#FI*fwaPA|f2Z~@bGk8VJ?Hc_Z%=FlLn<>busc7P zRF(AC|4aDMY^86f4+K57ZYULdE^MpguMs_p%cc)<%rVAb*Cbcx+gUE;{ zLqe?f7jqsEJSbPECTW^aq*tYCUQ8cjRIc0^{+&87V9DYpXg4QgFY>xSjjLQZF~7$F zx;d~R_HpoI@ri={!``u;5M^gpRQhM|iWaYu_o8A)hN@M;DmXm*pfiqTA9N!7AoB4(@;YXab?Y#Le1svTA-5?wn1|Sv z6vq=5!{DGmsfy=a<*bMC5;KUjP_rI-vVD|eJ@n%K`D2{H;&D*OJXS&a@?_1Y6TclP z!s+9*Rc-kx517u|{0+W&vqm6H4hjRp2zr;5-%NcSdpkVk)S{v4jcX~k?Gj65E(>?S z2Ai&C3afh5M9TkSW`;6$VCPkMe)C-b!^k6Txriwuf`#NNsN+dLIFh9U*gcPDZ#s{y zhNYP}7vH6hpL1Sz9enmpzhW5;;W}m!mP1pUha)cG= z%m3tMv)3`x^lJ^dH-aG=GUqvkd=^|x)-3X-=~R+-SB{`v%lfd^|28cLBe?Eo28WjG zt?=!le-qz6qL!gF=l@&rZP(v+#kUf~+Hr4jij&G=+m%8={~}HlI%YNKZSZZE!Wg~~-wx2*UGc5y=m_7cR(~G8wXXcn@a^Kd zBECJjD#Ewkhjx!|lN`QnlZTzsFaCdxb~tt$#Ort(ktVRTOCnyB{-&|C^SJL=S|i`K zVQDXkV0C)Yv7_0+NN9snt$kJD#LJAVJ}+~OQC`Bm&`%xzn{b-HaAt&2VIFteY`i_M zTFt}7{(_k7gP9vK&DAX#Symm$UaRqhd{uld zy{|akk&B8QDIfa@`AaI}9eLLOCSCP zJn~At9pY?*>w@+0KUq=0$0qT=VcX+>@3CXOf@)%BhPx7<- z0XQu61vaWANjIJ#oFF24unSS14n$c{OasLrYA-7|hYlpd9haw*xaYs@tm&`Jyym9< zgNwtZ!2wxW3=-`M(c^>qUG6iKRxVGp>nFG8#cHL!C%R@?ix#91tew?c5@Y-LI~1Bu zA0b3ajLVIPhXW6z%-zU?)d1b?_gaT1hqEF}IT<29(I4S1!9u$k&WA|5F#kikH+4hG zDcPh-8|GCrU76)p>&-U5X&HDB=F4iL=te{zt*7?g@M9e^_f7AVAXi-!*KVy?P1|Hi zE5m68ZAuMY#XPmaY~gOl&mDX% zPwg_xQ~S>@d1@^)>bMy?%2GBVOH+HReIXUuIKC9OW~r*>_&0b{uVPxM*bAjOYtP!t za(r@%%)LUMPpiA}`FU$^V2tc{x5``VWhZi7xofYn+_j=x%U%0R`?9l_{TE*fxoiK- zkM48V?!Vt@W!uSJyCb(sa@XEKYFgoA2+nTu*XmqY`D;m4TU+)&%3s@Q1UH4zmTf10 z?Vlog-Cq7$txxksJQXIg6^pm=SOQ^}$5yw4PyW!=U)|O3I*Bvh`{_Q>x_8OerjQB` zH<0XKbh~+j`Qv7P)#KH{P zvG3BE_G3gF=+L|*7@>xrCF6@A?V@#+FNA0`)DJKFftL5haNVte*5PZFW3HHgZ)9H; z+pzq5&n$$~U#hlE4ir~I$7y4^jxp?Af9EsYg1y1`k{EB@lxFKT{~8mm2sKf^?@j%= zra%k@NesSG$QblC7w!D;RW(rau9sb|$C{2}bN7TU<*(ic6!8x~57@}zgmSS7v<$ES zU1@wdd&BBD%?glV!k`eK6D#BXx6vB3{2R}~qfGf>#?A0AUJe6X8{EV%HT>zhQY>oA z{FAt@XCLEPp^AA&z6^hsHw(QX_V_U)*(z;f_=DL3+-i|_369DLiE)s-ZGi_YtcA>i z;ODY9U(ZQ&95mUK@6eq`ul`;T-KwI1W$}eJ2Nse zG(dzmoZSr(UctpuBJ`T2LWG3aaa}0S3-q->H@Bg$e`@g1*XuU}R%f6Xq_fIW`clcd zdRhMq^rgL{KUkMS`Z@9O28@`G`JGHS||9D*Q~C99ZX z%D?zLi3E@?fv0 zoT9<)l5>i1`+f*F)okmM^Gy0geaoBgf}0ytCN9!-&~*qn&?vvKWJrcR+7#5bIV|p5l zo+{xXUIJgrk9(;66?wGtEzor9Rq@sl1Et0Ogdt%fbAFT{-j8R9anlH9GsOsDCEz@B zO`__3+9mx_I^KG`P9)=0K8Ax#C@*_tC_q#a>j{(LP3yk^_v<}>?|1&<%C>hQXjd8Mw@bCxIwCHPdU0RZ7&%%i0&{9a zKH8A$=D9JGrnS<}|JM2a$pXT9B@(UM#~W8apzf@?vlrrD@Ghy?W*ua(4So$VhWsz~ zcrcz{jG>|G!ypX~JHE(pg83r*kN_gY)EWr?nP69aRtM3 zb9{IBn;pef#5GVJO^NXcgMaoPV{i|2kW}koAqJCMxi5s0%%1{|c-cFJY)zBP%dAvA z?(c?tr&I>5e9`=czlV9vd0o#Fohke+6#MnE3T-y;Xw?R9IO;O+cZ(iv-Oa*>ntx;O z34J&EHK!NRcMaDI(&j=*o2~Iz1LbT`&*e|5NXDKG5Q#!EDI4LS>q1IxXr0W-zj=Yw zpC>%doM!m_tE_n8Ibj6%hmbWHAB5aeXcQN&dKs^ic4%peup4 zX8U+5A>WnHs65#iPsGq3Khg7z^@-eBW;GS(E#T=%bd_kGWK4Zmj$RB}UD$tE2BZW( z{{?JO<7-k%m zwz(X-Y;73WJ~FNzVcT(RpnX;S#-dA`eiU*_+&g%Z(E7^Igcz;QTmFil6dDb^6pHdq z$rW2qjZ@VZ#`|4r{t^R9dBnTuOU%AOWPudNW=P1C+h(a`o$`%DN*tEa|Ni(KW4BJf zHYLu9XYxWE2&(7aNMDweYU$`9-8+fi1&icZ_n8a{DH{7il5d0^q!*gY=3D-9m@B;V zfiNLPg0VyiF$S*%jj+MY&>-(&uwpNX+zY`!@uLwQ$i*%0I`Fbm3llZx5Qk(lAg3x9 zz~)=6xq@=%cIc#MRfEYIHl|5FYueG~rdF)bBiT#(1I&Uxjup~t z>9;eN9BmSx{$*J{9;kSorxUr`?Pb#1?nIk1T^ZqP3o5s3CP}RWD9MrEhcPqTfEle#@m|Sg(E6D3m#F~pYzq;*u!g{rpwoNw*BUIZd}igdHU+N zzt#sT8B!tbK%vmh38SV=D%(GmpM>wa>?8B`=a1q8AM6z( z)29H1C~U$PNM0s&%CX;DbQ(ia%GjH!*c)o;+F9DF4K#fce~?5C#N|!Dd^a?Zpx$>ZUDdQ3jyT&e-+M)IX00$ zov@@Q(>3zH#OdvV&N|$cR}U-qZd|LkX0>%zEUq3jPVd(>Jyu>fx0;q2t{l;MH`89% z^yxPe?F+RIWS5bHu=ysO)1O(j4o#lBs9qil8|sgXA)D@_&5`V^m&=2!;arrsZw}y! zH|s#91UY6y{RMjJwJ&jYfivs!qK9T;_66hIzr?xAl2uES8~x<`P2Wz;-`pcbHqV;p zCZ8On2|X}5fhQkl`QtjH_HO!5+e@J$Pu-v9@JynR2V<2l2lB5ja|iQ1#LIqn7h%Eh zs>9fO3rOSg71RY+zJ}785gZ~QM>8^S<_>&y156_Uw~Wix@q;Q zrcEjQ9{Z^KPcQVc2l6eI`-~s^XZEUF(r16mLAL^TCj8z0MQC_Wq`i})vL~9`Fetv> zo7NY2C-Rd4wc@;m_+UBt6ujo1^eVJm*|g~-@5WntllZ%0@obRNwUcaZLz{JThiSBnL=O33L;vQ;nHzR^>VG#zubRmbaW-aXA5SJTw~|l-4(G16(kL z1iRdVIB}G&n-k}ahMW&WspK2V1X${0=Jb?Ic0vXYx+2z-l49gj{rKjEm^bF z`*mBgsx6StLRHuDtzbBUUCMfqd`+QoXk=HppZi;mfIGt*?FPgxIr15>~Tq;SxS zp9Xh+*VAJN+YM8DLn4@K+YMV(bRGD<3Lo}n)yD6Mll==40k{bOn`}Li90q@c(n824 zYaaKe{*K?l8wENs>>OS@`b#NvbQ%t$d)^4IQ&ZPyYPHfs{S~9P zbP5K!N1N8HYTA5St#|X1rjIZ8ZeGyuePLFdb=NqD3J+?tPlK?6UTv2-dD%4}tv?J! zoDhMEgiQ>8SHm5>r|7b5KQKJmS{s^#SR&3#5eD*Yt*84pG3(Gz3XG`q|MKaM_(||B z1k=!@j2#2?x?w2q0AlOM7U2$H4R#zS_+_637nAu@tMQ*t+(Tu@dZIy}4%z@n$PXa6 zOgSjlnc1;!!@@pZc7%gX$tq3xZH%W6>An2hdpoMOx%`M{--W%fGWEHaX7d(KVTq+r zZ63U=X-%*C+!OV=w;TnHK4%xLvW<`gwhRv=jZIL>My0>Hr;yJS;U(yTrq$)xu19`tS^k*k>Y83%U)MCh`W`AmlG_4t z5|C(bLCl-C07_JUcz7~w&W0*2aGR^}6R-KNU|kk1S|_%~Ri^!3co^>QWa^cIh97y4 z;tmS`RD2-4={1lQ4kD?e?lX;!pe@2xIIl?M?z6YNW^!G227MWNc%GdiyJKn)p}+{n z@`Fxc?O(0Wt(iBp$_~LN!(t)<8N9R!c@W7}FZ)-1Ci9m|0XZ<3Z!IFvLQ>4`CA~2} zsRx_dEygqv3Z`-G4!m|4R+awNuu5kZk`iMY6t1Pi^MjDhheyMzU$C>RxiAb5cPs$9^KL z^~X0>1Rr_A4rs;yXQNIA2I20Ya}=&*yhMrJUER9`npaE3gpZn*%cn&Y7qs2rXo~@; zEh8o{I0`0QT+c4@bT)!qfksZAu7dBNd`Y#4SVs0k^~2CY&h^gMdjj)KF!jZT*BT?N z>s|yA!0=jT>r0OE7#%&lmQD*SV2rkC0=$%jx;cyoiT$ellW|>Am~+d0;8+7I3%%;0 zZ(uR~3^yo&t1JXYoWSf;sEojFB+l|+M z?13VlqC%I|vlj2Fz}F<&PmT;t!;lH2;b3 z;+5pv)Hm@<%Nxf^o#tiN!39R1nET&lp}HojW$ z+U7))V-Y?47e|3oE<&Kczm67A$HN;&NI;Y>5;;DWdxoG%lxXE#Em*w$QVJ`)uV5 z-muI6!`_>~M_D9|{|OKYDoha2cwy9_!2=ToH<3gq1Z1K?;(-J~!8_h4GZ2v@n29is zQCxMsuh-XW-CbRGML^BL6~I*iFBBEL@OcOdUI?h<_pR!F<_H0I-|O?f|Igpg$1wd= zAJx^>)z#J2)t#-*ijtL&HSDOi%HXcmKt&O^=l7%yqd5#qB|Zafsq!G`<(CyS`RY!h zMfV{7I3xcpK8kjlT?*sL-l+7akKMwg^)D!!3=x_f3f9eHOBIN6yG{2WZ~1D~aVb$= zE@C{5G?>w|V+z@fAPAp@1gLE+p2ujTFO)7d67pkcE<0*gBoUK{$PVr@P+_u%B`5xx zKe^4SM4Ghdgzh%w)@p%EHA7?@?3;C`)+M{-;j&A4X006|YwgSg8RmXZ zj<`HTaZfk?pX_>6SJKs7H$%lLiQUyk={58S)R`T0AZ8Q#5I$guZFW+>)CHQ0AfBNJ zRzMcN@ily~D2`X87kG^qyf*zUE?eEvg4b-Ovs1~Lh)zHwn0?`MgbQTPXZ5)pr;o2A zDiSAsT$>c(?W_G&0uD1>^5eS!Wi+l?)GE4QN4aE zI^$wcPssuG{)wnR2GsE2*VpSB=&dQf+H#2JRsr|cg~%JSv`hLU+4;^DkHlxYifi7_5j0#44Xq==_DAER;+{)XT-{S>U(RKGoGWM8 z9S)ltaP;dkU`BO+geTNSJeF_?~b4Fr4^MN|IJsj^G8+ty8j`1iGtiGDZnv%9?&UM{7 zC$C=SiC@gOa*LMH&1+QQuJg`$98XJO+1UO|g}emA4Pjgy#3l^M%DzQ8O?P6Xl@Pie z>tPtdJN@T!KVA0LarbpYqPlVCVgaF|3<#X=^y4Iwj?ZD9(lF-tH#f${=_0a*m(^!L z&v_*mGF-mFZ`QxSxRvpu3l6k{WSFgS&3%M&C?NfOwKwt0y$5c9kcUu3{r)l_X)h#X zzMd=zDsI6;agy5AVG`^H1CDnKbd-!9!*s}IHl(u2P5nBK1Q(HcmgB7SrwMUq$^C->AyLLVtp(ycGMqbk zz@;&>!*}}`Ufg^E_zGTIsLegGMvsj;dqrYhy5*EdKtVq0mFUl12^iEZUYl1Y+f zyVGqgIU-BkG!{si&eV9c)R+UCz#@k*vMqm0^oi#gbU9WE)J;A#PBGzy9Oq`#fVk8* zlnEZM6M`ce>nm;!96ZmuNI4Dz8CkHQ89%p@Ud36#@ja`Yg+dxU(#w+|J|vQn^fa_* zyq9L6&drypXxPqO;M&^<2{pfKqTE?a31i7r4Aw63gUc==ECwQJ>pqShC3)Dm=HUvZ z+_z((T!o?Bmk%T`KrskF+3tG**Bf3h|B16B^%jd34eZ8Oxu4)XE??z3gY*8+m_Y42 zO)*_59lw>DwAX(;HzjrM3)>z};k0!yBcboFf5)xeED3e9#J!1CJi#9!=FjrW*?Ph> zV`DC}f)lAu_CzY2ox_Jbgvih=W@r|C$|)22o1V<{?UaqJBXTZd9$8THS=KXtjcUhx zA!G}4+&Tsbv10;_PKTOxxY}ThT}FMFS$Mn&Sj|>rbR;-EC5meb!_z1Ako_Px(sAPq z?x~+9ZkD?j(V~6_o-60LJS6^%OpizJ7b>dfV~{iCPAWc<&XC2Nf1CCocA3XlI~)Ws z=SxRDb3Vi}`cHUOY2BFY+z=3@QGu(UimMAdrQEnt zg_f<4u5#eKWkFVOSSji_c1N~GHJ@R59MUAu5Jf(AH==rJ{1gtR>#jOff2}x)0R+*Ci zc)--N4rWQM*_fFym0%!Y-p`zoyb{PJ?PB3wA|q8{0tw9cRYKWe{R$pMi@~Adt&XC- z2{BvwSI>sEIE0HIj)vmI-h#{)+Un3j`1fQIa5skEnwAfh-o#Q_={)k2!7^cg zV9%qy=%e+1IDvEN0FxsD^>B7RAHb#XMZraGqf1O2b1035y9m)Bfd^Aw(<#Cf>aRjV z%sQDm0T3CO;oqQ^07KcIlTbj%ND(p3wd`ZZeekS-hzquFa{UBw}&>#Cc0K>11+i+2gZec49m!YDcH`fLA4mEvuL2sHlBrQ(ZcUDY~c zO-H|D;3QgwbAey{A~^r0pJsjrKt%2m1ou_jB6Yzf2|kZTU7)!;^ z;O*f4@DVPI;#=se)%c&${@KoW3?Uwc2aPeg=1w^9(+F+Hy;HcBzCj>ANs~X2GU93Uy>Wg= zcJ!2M1+Kn@8bT}GxtBPFIxXpqAV?iIN}gT$8G^n{VvvVzC1aGH3#t-e%8h_;Z2nVQ zE-|%R-m?4{ceKQpk&NPO>3+fw4?fp0Q0w%vf^}8XN@x6H#Qkk_KqFfjrQIB<%>)YcO}1^qrTss(0_Yht!86of^-?2T>;;V@pYJRy6huy zf-Dk&=nH=b4soTQHwr}IH?I6e>;5d~bCoirMgH7J`27yKjjbJN{Wk${>0+qtywu|7 z3qPpeI2~wqQrOk0FBHl}XfMwd%8J#B*!Trd(~rbV|jz>W~&#-t9`$^*TY`M z-g8riGd5OZaD1TVrVP%sD+${?j6BFwjguWH62Uj=xRP0e`-tL|S~l?F3}4+*WH~K5 ze*?I`?drg^>A&zaC`98A~7BZRaUwZ(;VdOJ;@G z<@LZqr-#Vb9Sy>(&hzxaOe{QB8Pl@pIA$~V$=0{tBdep~hTs9h1maMaijQ}e(*@Om zZgXbE3j=afC+TKLSvD$!jWw>EIEZx@PRtTc#J?F=;d$e*Ow50fjioHDndRpFXyUFj z2c1`Xh^}$oC|`IV@k~% zi<+;yOy`w4j~Pc;7fJP1)NoEB*JMf7eptl*ru80s&IR+E1G?zEEFm30a}sZwek$we1>+MmodHQJ#_Am{d}uVQK`DNTuCHu zXx@P$LQV`Gc;1bpeP8%_>3z-IbiN@BA6Hro*xEXR^H_9nV`X0$yioGa5(j8s?Y)}k z*laueTWk96qQYVsQm#<8bR@)MDbcX7aC#+^*y!?56t|`6_QKc(6xOjPF#g^~CmvS8ebtg+#-yG`JHw8NezsPGXyxJEQC%b19d$)W?7P2 znI5Tn6p!f$X3qwKp zHHLR=0NDJxY+7RSu<&AE_-r^)`uvRaxew|h{|Zm_AYaRy-g>++wOEgq+{2jNG5tvR zNhhtFBA;hFqwkSvZ&lQAmT)g@Z4^zlO6qfg2sqWlynI`Q%*pw_RLW~U%>6%8yU63( z*5W8JH)~(#JXoCQ!ji3KD|~VnUm^=iJEDZuG^Q6vBpPOid4FNmoZkyt){_sy%YJ(+ zqJhgW#oPemak)-)H@EKCvE!#zhpy;T&40nKA`6-}WIS744U-LCP+B*l1LgtW;0^v1 z-k$ilV`<;7gX*%76*mfb{yjUulD8kyQpyI3U-KQ(sPerIc30@hFl&ITZ=CNoZRZ@B z$hPu0qOe^VMh?hcI{;|}7q~k_L@KWVC|=STug~UGcQ2JyF*nw=9n;g(oRHKvw?E!DQEfKV#U01)-@ZfjshwdGSazSl3t4RPIvFu zPyFIpB0d2tiyD^8Yn-?5jaQmxU_bcIsiFzroWExmGdcX#JMakk3zYg7*sZl5ilS#*;zavuT^$@!A-~~_?nl<|8tiXuU_h~YDs)YqG@4gFWHDt?6_QEA-5VyhoeI+M8(;0N;kWfvIB_Dh z+?w2{mM7Xwl**loxFJjBFWR}tDHKVrxMhW%uQN8Th9|;}qA$S-ysskX z=j!O_YQoUlfSo2q|64kPgY!nQ}zGE~ELPWy)8-FMO0N!Evo5@}pb~m=%_<=Io+0 z@-D91zB}$@DG@QxO;uhpS05hgEHiadF$J*tWXfA;@H=N3w|oxFHzz~l;~YuguVAO} zsw&=VYfLSkwV%vrGEG|RN|eU9zEC%w&)@jMnNqesz^WJMPh0J1W}bqS_RU$< zn*DA?Ke-(;!sK3`^wu}B@(Q`9~)m@MUZoH|n zN@(oILp4T30uT`+-FL@N6d0DevTPs>=DVXi*lSi@?B%4BXE0QD;I7RiaZ;GYa&(+N zEcN}ik91N-{J&PaPq3081hZ4vx4Z=VJGWvWjPr*``P`U&Sy&88>||e--AT-MypD1WdLv3OPlEgMPZ6uR%WM_polGxYCdN|)aZG;Lq){0&u$dSzzw zd~+glo>s#d+a0e0uHMGUn%E=sWUaB2AeFkjc-F{P_hST{~Xw z=aNP7lGQwXGC3MvT6Jm4JT_%;>o?y&mxwBsE$T)woJj%4l(#ff> zoyYk@^v83Q0YxvofFhp$cs0VURuobbrn?wt=!<({^Q#hhp;70V>Ia!+g)>wlST0PUUmJrX@!pp?lTeI2 zdxyp!**xNGRsne(Od=DYB;jr`G9xbVOmx3oS zw9d~?S3>8l7sG0^(``m4vO+Ij{f%rGeLe^^RDvK|q6uGNhNZujC>|Zisaf62j@>c5)+^Z#|+``!n`e5OSrbx@{vu)s}mbI3S zq?rw^vGXxZVD;5>=uzo zVmP7UTGOpRU9>0N@`JDoOADCeFa9q_JJWFa>;Jfz z8iRi4=!rh)35J5$wU;QRLCjan8HP;!izW9SCigzhuOTMpMG5Om-q$UUB+t+2(5-Sh z6&>mDa9*Hh=`UQj&jL$6M~7|>M4-Y*ClKKQ_~xOGh`3;yb7I|IaNbP_-h`!?4?03! zlfFjNmNktvTcGKO1){wck`iB-$iegY6-j%Jzk$fvnZk|2&ylsG-I45%?f4LiVJG}{ zjhfDuB%GwWbgeEdxa)j!Cr!jf)67#fdA_65M`zlP!ed=zroGGMOzzj-B$_YZ_8l$Z zL?aGk+qy0;Z_KGhJY6?v2fjcPIrvD+SQ&F&io*jlrl*f{A4=i9(HYasuXiLO(hug? zCOQ#vPtS#$^0cH{0 zc0YwYk?%BP3c5!z#}dYmh=46i;^}`D-|!p%aeS9P`LEzR`QqK-D{Dz~5=^p%7*)#g z1n61deyKA;<{yH*{&%7h-69LepQnlQu@J=4hk+4M4;RbW2RS~E<()y^`orN{Ey}^t zcs>{!BhftiBF&{)X4Km%#+*Nn^<-G^2F}ZDG~0~Ou>rZxxd+RJ2t_dP43^R_fR zYQ*cX^F_R>+;CY;jQnj>sFMfG%2!`)P^F`~8i^rRs}rn{n0ahHoOd`%MZRV@uaC#m zWOi)-#&KE!MPuo+8|Kk6HabKEl*mfbYsAg?IUX{X4cYh1Up=wJAO?w2=F6XYQ+TcO zG19zI00LfYh2+#uj)rowzRL`qrJe*Uzn^{sTa}^f+b8Nm+zEsLD6=`-H<$>Pe zT=o{b6vM|g(=$`#ooR7T*}8CcGQXPXndX~k`Sp<)8NZ*~E*Zb%^M8<*l_+u|5UxTb5*%v+0)Y#p+joTgMyEwAQYM;q`^iGc z62xL!jrdw!Dx)-<91AeP#a|l#64c zfwwdnzKRo?sPC6gVoiC*lbcO**snzoevyA<86--%^7&92O?#4$PK5}TXwm)rt~vHr z{-%;I^sz{w*?ga23-&kLA}x1~l*=;ZF4S^o#mebudHUV=bjqKg&qRA2MaFqK(6as$ z=7@VbF?W*o?~$L)a>PE~`2^=bSSmPNdEAr5$tzJ&vIID=D8{=P@-vBdcN7ZH<6WK4 z@pUIvUOx9GM9Z^wzFN%##URd~aUDeVJ4yOV+_M2sE;G4ViIRjen{c_6Sak`m{vWf0 z9Rg3_RaCU@%12UylRQVfvqh{HJ(lrE3a`O&*fIgHbx472m3TD*V|#lC48XEhEBccf zJfDu+0i}r>A7=bum6)vK8Y^BfQd$-pH6Re=QRv{CGb}5-tZIL0YH4F2^@OJ{AXB;=Zc9`_t6VdmsCGSXi{up9m0*FZ)!fxA{1h7 z@R~q$81HZ67QCDtdfg!4`&7@DoGGE+?sx2lrG2q#V?=AU5N0a?9+(WV2l~pH=%QMQ z(T2d(;RYa_3Vxhf{3<<3ai1rhAb&>$TI%BR#kuNocBJA|Z^x7VRgiLT^`Tm`@!mVcjLjy~4r-iwIyw7Gjdc{a?aPB#PI#H9Abx#M!1#irw#uGfHUN`w z!_Z|>^bZXAIOt3}1542nm(4bBDP#mk>Uah;x<39z(mk=jmlk{!%;v~P_=K3MGqwwp zgq8=`g(c<*eI%34?&M`}5x>tL)i)Vl>dTtsFkUDG&w{_{Ap2uszD?>8mRy53f8}f5 z*Vr0lBTCIITI|n}SydH`$mA?MOJ~t3c_+?aE>jh)jVNYyh0VA|2MOCw1dPIFxAwaZ zMsJq$7eZmg+*s+?^h#%saz;Q|PVBzK1j1&y#MwODeAV0MqK^W|bv}%JUE~YbnXmcI zBKsB625%yt-+3|iWnu6Nz66}dVqZ`$gCqD>?%Za-1y3!;B3FFE$e#QUQW#MAk%gO1 zS>AVLc^k^|J`3b+2;_Yj$Xg!BTcJjuz7WTn;bL(_<&(Afc=HQabIehJJu_J6Xd5Q ztc`(M(;$PB5**|7uaNuaPe>ASN|3%%InQR0rX8R6b(~+|wXcl|cf5#+XyGRD`fptk zFH!LBln4lI<{j)uW4@zUH@^*Wd2fK)YYzvvyj8itT)@Z1?N< zcE480*EHt}iG3Hnsmi1V?!^*R^GdbSk;$^wd3G|!D4lM0ukT(C6+HW%zS8)v?=}fO z>b|2wCUO0XpFgsi(gJ6UJvk1{lmjfR_6LvYaP8X|YAWt+bL{eTwHU3@K zb5%k;*Tw6J4MVKH61k}-Lq)w!)O*G5>+O+H?|zB(K4u7(T(5lm=jwfhSHr!2H+&lF zx8YFdW4Y4Lm}`B}O3pVpCQD~0Iymwr%1Lq4#*R&2cPOs;f?;i_`BLsMVH4;-IQ7ep zY%Te}r*j(D4xqT$3UUHOV+?npIO8R!PpzQoL|(x0i+XQAMF6%j@zu+b=p!<@!~-S2 zluKZBfy~m>cja03EOS0H8z0`X=;70N^=C`V-ZH*8HkK9q7(C$gXz(XB&fhwx3v3Zu zKV()Yg~uUJzzni59X~g+QBA16dP?>QwD7asYs~kiGwz=%PKzG;3x2#W(}ns*ImUp^ zHk_#1hc7&d9IQJyQ)ci_W+c#4R-s5BlYb711PtjjSRr?9b#B#kprZ0|lGZtC(v>9VQZ7=S zEs#d7LUWGCN>W7tu+pk31uj9_7H0YNG9Vzo_7aR4;aTUMty{-WtrVr2S*c`7vJpKYIlF&bjhS&bG%(w6jWnTmr)5 zn0{kGqr!=7rJb5Z<=nDVhl%hCFf29qUnEFBGDb|aTz2Tb)2$t8I#*BKxZ~kjb6a}H z#~(iZ;A76FpAn8erDoB1Z$7Z+3iC-QRdm0UUoGWZ zuVLR_@9o=X$oFdb{*`=xO26wi?~(X6ujTh21a zk6<^#6@eO*li8#{(DXvR7VW(HYVvuyr>~edG%!PRB{xu0H03F_faolH6J|~p&zho( zg3H)%<(nvr=FE<+R6E3)ipsv+QeT_ zKp82KiWx2Ma$5L!&A~*CeGzBqxN5^v@8g5`egE{0S?62ft77D{tnh-++P|6={w*yy z#9Q)wvwD(|d+du@<>f06?|Jm(p{#b7`$b2xDzT!}w4^&rKct@p2W5v=(SvxU4GcHV z%Zu&0ysvDKP#Y#EsSQ)8hdpU&%{S>zHT9Ggd>?u{p_-~Giq~)A(?0>9{PysvIzcPi zReydsBHo{^AJCtH(jTUZa{xg$N~2sFL1(NT0-;{<8$ND&nx*ZdZ3%+fm#czWZ5H>C zNnGwC6B)BUw>oV=-pRa;)o&!$ z{dOad9BZjlIYGPbVa)o({a`+uPHaK3&=jnIEKW08*X3Y%8pIDV=m!gMTU^JfEl0Kd z(g>~uUR}X&y-#X?i>j;IcBl&w(PcthwE3`snItxbG;U9*f`J&^TU}>-wLb$x24ZSg zOM)2>Y3yb>MtGZo(%yG+XSEw_B?-NfdcR4CDJ&RpUiqYhNH1MAt^-03gjC;X%T8Ti z+Evj$Lr-O8Nyoq;Cwg#Gx?2fJtbE12gOxZ#_{4edP#r=fQ=qPrOV0aBlX6xPsKcvN ze59DhYn`_?n$wUc1Fl4^)CGrWLWw)H(vM9bj!1Buo@-#Gqz^zS_4+-7Lo;vG;vd!vEj$`F;49d zmA+df!uC8pv1cR^&@z$(1&cf_B6ede4%sGQ_`fWA9inuTb9a_U!Qe*-@M(w0gIH5q zGM$@n=@N-~Duy*#Iu>Ko`a1Nv4jUd0X4u{%0=IotVF~$->#>X-QaUzve*!XFl{A}G zuDoj2#9X&Xd(gt|0#tnQjA)T} zjWfjjd|}dQhZM8+6c@nZ!Gmgk1gGb^-^pV{&=J2bbHcZ9@jlw(>dH!Zy+pK_hw!Q6la})$XV`}-m>=G2W6|m3Bi}o>&l2v!+(vY(K-1U6y;&Ss`K$A?e#Tj3K`|X> z{J%-9>gSuYXTj@JjttcGzp`bYn0)umIVp8p!3WcQzWT}RG#7M8-5MzPE`%$AzJ$!Q zA3i=1EzT&bD`pGZRNCa8QkvQn9h%)Nk~pPwyoZ6%16weRIHz%Kp zzn$KXr`xMi{o&SN=g6M=J9TSmO(XHm-PF(r&4WaBoGyoNX1>ekye-AmRjDb#{aOx? z_%Tz)o0vD-P_4$NrV#q4;M>qwk<&WKc~*>XPYgt7%3>_C;DA6u?zCRUmeXl-Aksm- z3#$d;fWey&c6|{4kWwa@*)!ISv5)sMP2^4DlmvS+J9u%k{6TgK&fpT>+O~7XSKANX z*SF03@FNf%kB8`zvV!%#+vQeQY4mx682gZiL7}YRQu3UiKCR@8xT!B>@OrV22D`MbkW7HeB1a?5z{i`jiTXjHX?;goI)30b8pU)nG)X^2?}<*!C@a`H zwO1Jy-MYesT>I|3Akg$#M`y{Svf@*FWGc638G#u68)U(9PW5VA9GryapF!!xf~a$> z2f$E2Bt3W*vkOIy7$qZ8rtP2C$oq%Qofb+?Id2jC@i`4~&s8bl?oCUUKk6ksjiLGe zqb<$d{ea5>(NJ1ZE4E8almusU8E?6H_?REEn(-5r4~aQ6V{)%h4?Ge9$YL}!)Av9l zZea`O%7?`B3I>loQJMr($T*R`Ps_O237hIk2L5FR@O**4-Y$Hxz{lnTf398llLD`h z^3itTwE~|a<*!PH%YJ`e3QCGP^8JD%p9DUbe=k|#JAaaPm2UzGQduV@ipc)X-ctHJ$Ei(R!v2?KC~ z)GkCpdm5H8r1oq69g#^0O>AQPMJ;P@yB=$L3dQAO40Z6%j@LDzr)lWlr)bw|dnk%5 zX{~n&R^Aj%lYU^F>x$h%)*}tw3ANSM7&8R8+sS6-le0Apl}aauG^8pzYBM^O<>c&u_qSAVl`m~l#+}5 zp3FfOR)as0n|{$ztX(XMjUe@^{4j0{EiErK2-H1+)r(p7Xjhp9zk|zb&-a=2*cUe> zsGf|9Fhl2ER8GZ;u8|T|lt44Q@N_m$tZZ58f6KGwL(}ut$SJABQ}Nad$`nYMSv~4@+SOuZ8^E177@1dCGGXwupVjbFX_&{=eKqt*OF(A%U{dTm{CDFxD zq`V>GG*+*B>t(FNsj@UWP3DGdI)eMC_UqhsqnYxbP@gDjdl#oFV}K({b7HhGZ<>cn zk?~thpWV(n^yoo!5=Bx=W$24z-uW2!PX+fz!w+3qTl99aQ}Rb~k=n#GhqRgQ5Hx1# zk6GWhh{kN!cl^aS5>{`&BvFeeq>Yz=*=M!PjmWQNpT~xSa1ALQG!R)4BJ6#uyuN_4 z!Y)sSiUo3$(|ucpEKOj76!5Qkx->vzK=lNQEVc7vnc*c*J za*+kH$njK3_4d<3`(EbDSx4u&L(i3SIl`x^Y!Y5PhxA~kjuQ~#04AcfaR|qcxrKdw zwLek23A{iRk%eBSU=R31%XPHZg3?2q%KCn;R8GfIT@$~4k*7^1)L!UF(^iC1dxb$6^fJo#Exus~X z92znZTve*8tDukmR9CL;+ws@X8FfQaV}07s^0oSZWO$!LM1NRZYyuyQGR$xEPv__% zDh+($%lOPp9=#N+(=9mB%7XJ2C^g`8M({EhYJH;Te7f1x^N@(ruR9AKw-uy0#P+NVY%>7LxMfY*f z)V`Sh!@sb$dlJ*r$-pk8Hwkzk=n12Mlqb!K0D36~jC5yxv(P7anqHuGD!*hU!bHwB zB4n9_HT|S4Iw-@*igp*jAN?9U!fDze*|^aglx$uW`)jfNHW6OKa z%}3b3E{NZIm!E! z9k`;gWDxXjUH}1z1nx-A05KzsvTgX&JdED5(bkVzCM{^~GMO*A7G^yxl*P1M$_~D3 zA(NY3eAjIKw_n#nfp-X2}m-)pCdB|~lrie`m{lDiIqS5pIF8|usXBB@zG&8aB=a^+? zwcvbfu2>E8zAlqZ^MaNq(XXA+XTlR}^1jBb-|`gkKu#wuzaQ}C(Z+o0ygWl}L8n|J zoy}RqhvAvNzDO}hun<-*6Sb=QCD}Qat+za}U6!R@7knb356PWQG0om@1!=P1(33AN zzbQl|EztJe34{2%VA3(9#VWF#98HsY*W@1-Jco>FU8sza%6IeePxID$F$Acf$#)Os zGmh_q9_k!M51C-c{8=%PG@=DG`mLDodUMKQQYcz5{Oy$O43LX-%!pjF$wa^rTofZx2k};;Mo}iCic0*D zG5^v^HFZgcGTrxw$NYkAd&7m^X=^_adXHR6(Y;0B!v9&6v7b;}o!35#w@VDgc(Z5( zzuoRwZ5L@0w=c^6S}+fu>-8M*?lr7^<&U&nVp~2L@ITu!EqRX0-uRjRpAqZ7na^B$ zXHmuq<*C}J6M~gfbiGk09)=7wJX(h3bTI5L{f)*p9l_q3T~W<&(zOsdGj}sg!Wn@|KgoAMSNjLA%aijWC znrx#N1;?9?7}rbo^DwXIJ@Bs#cM#k1F$gL2x2f@ZrYF?XTlFi8=@D9+*F!aZM>bj5 z1JrCF?t!XJRa1-b9hkc34-?AExFAzoi}A92*Bt^3DLRUG76j&DkPz z(rv!`$Yl;2Yat=bD}S`;`>& zc*y1}H*Kv+q>Ru`+{ej2|r#!r3*d6hdQKK{Z_b8Wr=`4a1f|MJPd zMxA35`6b;64OH%u+9-iMigC)HwQlNBE*xg^h1N?wiFNZEjx-zBnzTOm#rWzP$|v|g z{sw>jnRg6DQG5+@QRQf1kJH=dFSrAwM08eZA##%7F92V7k*PrWYXoPDIS&7S_MLCk z+m_EpeM+K*{}B&kHo|}_sSO#VW0T?hoqOv{o*3UDKoVrtltjK8FL+eNWmPpz|0drp zy2^Cacp@49^c6+9E%Q4 z0c1j^CG*|8CZF=1a4LR?6G?3XUeIG?nrT-PsV~iucCfDLNJ$E*(Hl42B3p^}m zzryYlzM#UQbX{+|Ylme)UL{PFsAp)j(d6}F?@Gfk>R!cqaoce^m&7c>PMg1C99gQy zo@${-()_(cJ|x%o>gA?BVF#H*h15qasK6cWYr{k0{oCiy4d9I7_$Uo^l|I3(U+4;nS!ue?`x z0G+Z8b5pG>mWmBTO^c3`!3V2jX@vdHfm9<+t0p4U;qgaoN6hdAWMIy2yE8UtXDME2 zPjUS@;Xb}9vE}V3u~nBD8m=(&ae{F1E|e0CN%TULk`gUMPNS3n@P*%}0t~cr)(qf$ zsplGAXTPtLOc{hh7Jro~sX^*NUOA)xpu@!GQ6?(T*qjH-fT1?hgj7X&->tG=_0`_O z-|qsxW8M}@@#Cn^$oaV#Z3?lA^Ly<)a-{ekT;LnBGQ28?)k-VsbL?15BM)*i)5H~? z6Zrbme3MZQYY0v{o=@*<21#8c#U>Yp2J-LE($u6p{;qLHAX)7A?_9;PUKN8^(DEV8 z9c9Kd{l9yPy`3XwkFBSw*+XtX$^LLTl;D7wUrb8qlf&P0lvc*pDpdOM5oH>F0vw#3 zPiAJXYIqOKR*>d}QbJ?hSmqFUGiQPGT#bUYTBKGkgk&X?jv)nB`)+-XG4s_v$zQTB z6my|p3?u>PqIBzU&nV8%tT?q*$k94MHeqTsGY5?R8qYVIwoESQ$)W^@XV~e(>d=QNLtRLMwrKOA7PYae$IWthZJcw}3!G9!Y z0URQFBC~naoBaO?i_AxShjYfP<6q^|7u*Telh z{Zh2Xpy-!h5M>j5?$MknfuBD7ZZMMIolzLWYE28p?EQSV-%69pFfHjqpF}lmF6fC(Rc!~Y8mpL~A9TD}{%>Z|iKuJJqemAAmo6nGEq}%T*!g58j#>-s)9;FXV@O=^ft!J= zkD(WEk=Mvseu=y`BPpWl%=?wy_zCDAfUwUvzuc-HH5a3rW#~!i|f%5$qRy>h{(;{3(q3!CA|CEA!-h?sn!gI!A3JrgPNsMTPkO@P#{2 zizVnEiSch@g%bQBR6qGaOxnZ`BmPH%dcszQp)z*1ch6TbUHhv{$wU?NA7t@Fu|48@ z*5nP#LwzFB`{ER1$S!_LaqCrg;LHX@5W8TUmaD1TtBdn_XyC&T~J=M0oL+o6613lx}IrWTJE}6$du8X+vYrhq2{F@kpF| zxU8Z5sAqCGbhGIc=>c;`pnTnWE!e#RAyRzdOZn+uAlSz5^DAqWw zReFj8r_<#ql}S9VL<&hXP`m5hH>gQ-Zh<+aSNhDIssf1vAIkCgrJEVw8%GOo1s4nI zzaFN`|1y2QK|cJc(%@1EF3h7Y!Z3PnrW}>&OzCTosg(yX3^zf*OjnMd&3^5@!P(5d z_sX)FVDFui?eKR@_GTvACGx%El5EG3G;*8yDdNFpD8bGmT8;X{>WaJ zu|i4gT0|+WZq`;EJ+HCSfg@iz4H2n4N~8{ko(e?Tn8jpbb%>9bEGOjM!1#WqGWXc| zO)7;y=j-?SWxzA$%QrV1FE)H~VlF~Brca(6s&YmnAgN@H*%=E389FlMEVTIa`|*a8 zqy@whSd3yTTY=i2^D)06S_R^2)EmGsdx{2eft=DT6z4i4|L9uRaf@`_mX$>+t%mpD z&z#StAxen0@{z5Te@9Vc1vQW2+@?*ftYgw&-7?UPk765zeMr3{DP4C}PSDi~FQcqy z+s#zv7o(B0GFJ2qiY|(!{8H`Yo*}95D*}B&e0L2*RmMB8tFy_-SXtU zu1{lhKOveD=ULiv7Ju1YInVuG7Zx@3$xgyKFRUMQUlv=T*dXM*!T$@Kt0vhMifT}z zWdA@}K@$=!ojf!&gltXm)yp{w1j(doE>pozHrB~eLESaHX^|B=B6u^>9y+tPyhKUw zL}Nq{Ga{*DBU@?S$9SFS|x9QG?Y_B&wbMExlfJwZMtdwJ$ocG(A#ApptWyKXHy**>9HQ) z3E-JrGa3DiME8I>EsV`CLD+rz1gTy7tH<97=VaZ?3fb#im9gDvq9i%Ks00+8d9WOy z?ymg1BjV)=ZI~o~B+gxI{jlfbP$^NB2wF65H`T~pH_l(NaYQ=FIcBHqKtw%A_Llgk z-fF1$Sl7d~&J%a5>!Dum661pBdf0M`yft_XZ#A`jBuwu8sl_VcbjRYchr#14bp`_g zYXS{{^AH&mnA&U>J7wc=Mh4|_@Pu7fT;}V!($|+W&M0_`n}a(*`CjqG(D3YfF*KaW ze&&u7S)AHFgyk$dOqVR&3suiZN!i@Me(PHnEYX&JK9H3^+H3DKm?Q98qq`bFoW6E^ zak_1lCsj+tU6(f630o=9%=VyJUfHbnpj=cmHRrYm#qZKU)x$KYT@&w6&PRS^Y?vjj z_vWHzpv43);x-N2Wmwvv+w3>RoBgJdX1}7c#GjwSyNf!1Bn%Q$ClgX$wX zQAuWqwIlfXzKXa_i|k>Mu7bT`t>o!C9VxSr*#IUa@g6_%Rl@R<`&kOJ(w<&3TfI2Rjx- zZp!F@OQ!@PlAtzG!puiLq()!(?-cj$f}~Ri+}@T1h5(Kyccz!81PKW_y&^TRKYNC+ zcJRhp9w?QoqFvCBs1{Gd3yL-~yFq`Z`+@>}@j*ZO|+PFTha4>lww!dX+0 zv2}#Ku5D}>hvkYWpC2m5$`+qUq+z%B-XUkJ|~UZ<> zUR+p&pW9AtbF=R_eL?}{Rc`&7n>KNMXs0qTuFa$L(0hFD9$UJwLdyEai^3UM#H+Ii ztR8e3{(!jtWE&LRDhSy=KM5gBltK|R>K@%HKOpVX2S5$*m#7?aUISUV7`-aky}t1$ zar9p6q#fOf=}~ndka7cg%tBg@Qpivp3KOGG_>}jfwDJ!;CcXH(-(XVHzqU-wwJsfB z!^VEN0zT#uc)AI?;=M}TXt`iivLJkxRO&>;7R$o}grIfi-I%AvUD2tSo z2fK2eCP=u4RAMZgUQt@JiHkC=9Vb@E^9*TvK^0kA7P;6TOfzCj9pdX7)dBTU-Gu-r6jpx_gA5oc$GH?uieQ-d|2ep9P+3HZEtq=`_3b1$v9ta9zbW&fo9(pKAe=f>rufk;!R5IJazUN zi(_EIT~du(yhh>}#cn5r&crMXf3^m@1;kHju3Yq#C%O3SpR3ZTRvh}aIzMiK49hb$lvAG(-yfTLLy~?TyGDFCvukimYGlT zed}bsiNN&1-bzg}FIoD;%VRcfj*XJ`%_(GoZ%p-9$0^g|eoB_uNY)C5rayCLCGV9qtS*w!7ErRaq?vDaS@H>a>@4|dAPS76-rECWjvdeagtKvR4B0`SYlq&a~n1r zGR&qGaYt>tEGGJ+n)U67Sbv<+ug5w=Et3wBMOfbFCcM0Jim8zBr?LHo>FZpw&adW= z^tI(53Hp@UGj|#P9C=}4y7LCddX0#F3SY8Bg2cWY%a`1wF9-5PZnBdrBQa{a@Ufb= z6525ogp1+FZNAUs z%^VX6+!faV_V4z@&0HJv`oB~C(*NZ8rT@wGOaD>#5^y*$xyAdLWe5jj?`Yfq-S_YM zo!TF}Q~SeqYJVVK#wB6YmoJq`U-nDJ@kc$aK~DW^__a^}ta47p`U>Sw4h) z@L$YNp-%I6tj(k5Z_PyB~4_1t`dC5}tJU=;)o~$uFgWQc3EddRmVNDL0C%ZQ4 z{PBJ2tV5_eYmT&Sjb5nBvU=mk=O61ci}Owkv*~Os;6d=zK=f2P^(%qJ&Hcix&;c!D zj%zyEOrtYY@udV@E6R80>-xjQ({QJ4=%Qca-glRV4axGI71NmY%%|!N{ z(U8M>Kl{$164`P_g9Jo+EHV`BVWVW_=>w7TxlhO*HB=}!tkT;VI@IBv?(IDxYDA3$ z#xnLXQPPFs3j<8YsPYsX20gjeTr?rv|+bBi>$z5&{mOMEE5{>`_KRp-kc(_ClA zV`9))lqH)%3BW8@4I$;0AbY=4ZJ?ag;L!|3r*UIb1m!~l1;hC$PH}v&}8C=apNHlj#HN1y}0(Pu%*OKqMt*@@#IyOJZ&CX-ngMd&1apr zG-dh15~YLSBe^JDftpXz<_0?if1NhGW;<%E#09U}-oY2%%8%$2-pFd5J}F!3uWqQ$ zxE!_i?nWGT4)a3BPPTa_u5*6=c~6*B;lXv6&6a?&JXkSc+)@fX*l|uFlmq#ELmci* z$%9#czRpvngMVz;AWgQ&*+Jw)T*wa(bdaVr=t<0f%k+!C7b>A${nELlz@OFy!l8qacBP2nKTBkz@AD+>hb&iut)7*Dje%(I_&w5;;@PUbWM_F_+; zI5{q9{lNjMPDF?1E*Y8+T_@!-jJr`Q28+CHc?#+6y;*l;IOn4d9QvS|tVfzfOILCpd5A6Tc3Gb|WVb6{+1I-Ag-s=i z=LRaU+$#|Zs(=2=y1{4n#dL$(8>yw`A?K~DC1^QZ7uTO49WypDp6!4{l?+=nDjCuN zm8|&7PARk9f&4{&ntkIp>tg$0*p;ud_9jcNiiQ;E}ePvx$GIuc%NXy!zLF2oKAgy7wSiqgAnfNIt5vezW~3 z)J>$vaCX*{pvf}!)6tQEvgptXYr0y6Y+b?R7ZVWH#9)txeNGa4gL~wU(zj}uC8gmg z^QotP@~4Qb;2dIP02>wSb%M5gtdjN+CB%9NVdPvxp(+2)4@T2Vea(B~q>2klqZ&)uIofz-4dC4dl1PFJM0 zlC~&;c86fM7;&nVn$f9Q&eOTN@6*$csnQ%#ZadkB8KQDEA0t4l)Cu$q#w;m}+jPnx?IXxVQ4n%pd0cjXdmKe;U)sc{Ec* zASzCxeluEG!{c93)Z06c9DI*(t1m3~3ZWc4w#zd~z|3wlg92oy$>ihTaUOKs&d|D& zabnIbt2@1-tgfVdzQkFqzZB%lE9Ix?Ynz<+X9+UrjSA-Jv6u{Vlydy*Y2UH+$?$!` zd1!NqX|=gTaWin7g6w?VW&iIs{WtsH-|GKvB*=f3I>mE^4$#OCjW||WP=B#dCs0>X zp%j8Xk|<|m>^wiyTk?2Bl~Jjlo|SUr!O+UDjIT6fiB6=O^ZICg{A3Et-c5m)w+(%` zKH;4ww?{wDTKzJVE%Uu!rr2}d`+`3RS%1yjB0$Mo~zYO5}$*h8L;*kKY@* zZxDz)xhOGEc^S4HQOOp#+go-E%r;$4ujIWiLc>ur2CRAOI3gqj*VWLA=LVfmm5Tz= zj={;;9ON7~5a}p0!_%kr20ovIy=mDZ6-8AqSwUzK~>iZ@$zSLifdNPJGwRJN*8AAg^Ax9`9HX9iy9i1-1OD{5_) z2{rNyw4y!e?iLYie3!D7JC|jhJa>&O**ech^PGl+>ywwB(UV0`(f=Qn=?aRbUOfUr zYCMGK!AnmUn-SIk@!CS#JhnV$aPx)t(rHqXQFH8lWHWE0dG1fm9Rb3lX}3rX@|;>^ zfqgN}SNi~<cCsw&01$$k0wkQoCD(2 z^v`%S5w}=80%bkNE@bMA$$Rr2+xpkB27rx-1eZ@ICkZC*Umgk*kAq^_kZ__=kDdr{{`Cp z&&ucB%h>-T^ir1rzsH~c_PF;zV=<(WjZtG{FH-0ZyI@qVv zANFPm{gJdi{O+M;@h?j#+xES3)}yf~OKZeOFXq?I37#HUakvQnqh1(+V{gaHQ|f1P z5T4ganDbM=>6X&6R`38`5QEoZsl!T_BT)Np`#(|tw&!=MfBn}9^?wk9+xnLZG@*W$ zi{0UWzmz|tbW#HTw-H{~3W=`Y3-#he9F_cg$_X*fY$*^Ejwgdv=5Fnj-RKTOb<92>8x; zKTxo8+F=1c)#Rjxj%de6)U0Q6IVlk7Cb@$6!Hb1S_cidvp)tG+-#8iIWeyHrjoF{b zw~co&P5%UcXG4pZ>ko3iZhXqx!#~~P55fk2F#*e4Ap8E;;D2EZFEg%Ac?`28{0n0F z6#t`QxqbuxjQ?i(KhATWiG1VC-r!L-3I7{o`4s;vW4RRn$RrH!3HQf-D;*!N-~{0s z?*Vu`a!2Zkt;U22;Pz(*YGt6HTo{f&mf3o?!)$UeD6EA)P0_OF+VpF#>-B4;z@Lr5 zwLcHUpnpr|r$qeH#bdZFe!eqS>TD=j9`Frc>7mEFKJEBRC*apN*1qMN%oqkM1ivmZ zxZ=0n@vwg}89&|^VOl2A@T{G2RAz4v&3)TJQ|!8ij*0W{M&c4C@kwP2qh`T(R1B{8 zo)&{XEBHnxaj2BUAG=MaH**D=upazI z{gGJtSp5?d>%SrfxAj;2YxVbym5>x ztpkuKH!4nd(jRfXAN-#z-|0VCUgULNWAT~AJV(2Nhv$TUE*^oSBvJUkt$#!Wd_-^K zX~=Q(hn@3BE{x@WQu2>#lb^?}meEAKfw^Px+o1MGCHK)@ZlfQ?u(*p%T2OL6&`Q+) zRC4lOUHk>f85?Ia;Svr^!}@eEPj93RW6pA8vfshHSCsY`14v@qL6Z2M$aW+aY2s93 z{E@gr69xaSiSsmZ+rMd|k0z$$O-;7V2TBF29?`@rn&|V8CT`J0)dQM1Qxm7(tBHd& zaq?76e06|SaOX{$cu^By+^C7En)qFnCIXtcb)qJEXyW6bCO+9;D#)FniDxx&@pw%H zH8JN}O`M{MF4t&cPfd)uN)zvL(y%4%`71Q>m?k<@YT_zQjJQk_Cu-uEOEi(HiJuu| zXz-8yq=GZXY2sc@Jbr;DF4DvgV>EHBCWemI#MXVK%mbq|u}~9VkJQBNn(&{iiBX!k z>l{sFYhwLbn%LA!D!6~RCid(uiDS;x#NnD)J4_Q-YU21ZP0Z9p?P;3$cTKDgXrf6I zM-SD+Cz_ZxL=!)2Vr7XYGWU^ovIl8mfF>sSHF1_EmY=MN>ojq2ktS}_L#@jecd=@-R)DG({n&kPz3U2|VP5K;z`n7ak+u zqP_eQ6!K3@T7jSaom{!`)t=s4Vc{o%y)9Z0Qrg=3Cf-7WO?;lREcip4Bh1 zu-0!)oy`Wend`vy?_1dC7WSZl^=B5=e`#UO7IvM1Wil!2zqhdGEUd)9%9x||J1p!D z3)|1Y9%IVZUvFU(EUX0y0G=P+11w{p>HA0vYcQ~97;n7@BXk*PVRsqWZQ`RAE&BBs zY-;j;J*z@bJ<97Q9uIQkKiaEO%4eIp1Cd@U$?N>E*^r{pR5Qd>^OxOKbEs4^yhu@` znwzDXKig`)L=4f=j!9%0V0&?=h0QatLCBl>lPxS{VRZ&}3*x8#bPF40VHX=px)|75*8!`turv$%7-Yuc*zgpNR0~>TXusIfXkA)p;V7FWfY{<@^{`cEvZi-nzOU>_nh>su`B>u*fo z`xsd7^MLKJu$30J4f#xa7gYf3UTFI8l7+otU{4`o>yNas`z`Eo1KWVWtv}Jirdn9Y z!1|pH>{JW8(85X$>;@!o{U{3?Vqpgx*c?Q4{pA+c*TTMKO#sjB2hsm!Z(yGxz3cC`uy-x&8UwowF<<|fh0U|DVgvhQV!4Mcte1g(b1LPI zGgHQyVPP&y4|pEWno$2ITj!+~_L_lBWQnM6u&`1KyVJnt7XzDXVaHn7r3SX+6kw|? zth{knW&B9(XuxCs7-)<$^ zotqOXIl@%33F3fBj;-VcTS_yc&W2?^)Hm5 zf#xF&y@uNc?iJ`xUAvtrTcmEXiI_Lj!l&1~$4TbAM^za%tdzga)RW z20BxM1{(VqG6ZY`<95+NJ_=F&A8i9s+rUC}zlQ6ifq93;Nz~Oeum>e*V61K6t9uPn zo6_3v!S7JA>YHo>N7)9>k_IZJfr^9%9+E1ez0xQ_13R)!4{osyOxr~RC!)C3zh@g* z<``@~#mA_DMpB%g4vqKVXwyI^O3=W=wt+sjfv&q~U;ulR`t`PfO54DAX+Z7{I)6xL zV16g;C`$=g4qZDUCLIanZ22v2#RRl17?^4R9p_p=RrvEF3< zQ#TsuDh=$D(7+Z(g&wq`iqXK_!wiZ1wgG*AvTYCaEkoyxL*it3+*C5(R5HO<^7GxM z;TnOqt%NpP*nifaY_UAqVz~tjHL#O&bwUHVrU71>6)g9$4Lo2Q*k>0FY+z4Yf2M8V z<1Y<1Q>B4xg$#Rn4X{snS$#fx&7}kl{Pq8l_a5L;RnOn}2C^6sxKTl)5{()uQY1=A zl+{Ft*+@{7t_UcK*bBRWNJ-pXVOb)v0V)bMz>bZoB%vf=rKuoFQN(+Vh@#Rl@8>h; zmfa*2{rSVcd*p zy&p~(C-5zJ2;o`|+?()YNT_X=cO~Hz2kt=l?S1z9ri8C|;8O`3d+qmi2tVn-dvO1{ zak&HUApG+l;%}{s#AUPMCEfM}+|>Xsa?kf*0$_J#kK0X;g+IAC|3qNrn^-?Uh5#!K z%BaG+TwEEU_kOLcROR(HF<(=dx7p?Sp@`zz=_$m_OhB2fOw9Wg=5v=?Wxfuz6qpYZ zb7mc2)-o|$D9m+GO;zpN(gm|WFq5c&gqT|o0ke*Y*;iqnhWDyR=eH5ew}_c}5SZWAQhmpL zcC5WyYYX#+R)YB$F=y@v=DQ{)vV#&c(9*(u>;l2`5!1B~m=jFQ6BK4?3k&l$XdR$Z zAHnQ~z7H@lvGK<;Cy%u-zsncQOQiOzf!WT)T%$1Ec&~c24tfB}OeSVYE->qvnDZ3o z!BG}wE>sd=x`;WbD=@dlslGp}Fz<&$N|m_VS2d63uafiJ5c7U#N65im^Yi4S1HV4T&xAN0L~9!P9kPzXJDqA zm=`L{SFuhj%=uV4fq5@6XJ!Gjp^4c@VQzstL}Bj48VJnmi0R4%=609r`+h8JpnPMl zky874aFYPDJuwGe2Fyh!=4OT2m5ZHV_Jh*|m`TJe=>*Io6LXouEV#?UoP4KX9;^Un z%B8>@Vq(rwnDg(jFjt7DIJB9V`5D0MWMUR7%$;z!sM-(0y@J|HiMh2SFi$oyA5fU* z;XV9gMAlE6YWo&LFY|*9Jh6WguKzHe0?0Up;*Quq^Q)} z-NBoA3h>&PcpVg8C6-~qJJZ3-Yz(|QCSIkgcSL6sZ-;L8W9zBF+x)lc?@EQYtBZ;E zj)Rw<1iX1B-eU^yHn=gQ-q8+T${E0W)Wo}9;cdw=@p2rzk~4uf#Kb#K;q}Qi@lJN| z2Au`G%S^mq#J+WZ(bdHJ?kBq+t`y*%YT_j;y5zv+Bkh~x;LSV-c)uQ2{oSGJExy{s z8|L6;o(H@#6Yp(>*Ri{acbS8?H5GWzn|LD?-rI0dNxgL)y!@uX8*budDZFNIa|z!1 z9d4yro!t(Taxp9se?DD2k@4dc-zG+cjuVvlTqm4xq1O_iitNyjaxab zYnIp7!JF9!c=woiS1P;g()!!Es-U;JPykHdG0N{OY;@zR}woEYbu5s}42LW%EiFdKW>qEa2 z>pjE4OSu_%V@ZbyCAe`;MO$o36&3=C>;lU1Ehw$!Q_WM0g0xodi9fT7d_$$IQpu(B; zl@V^^!1D-y1VzJqKZ`I^o0#wv!c(wtn(!lpdt)gw;o*cYaNr?;;R?O_6uLq~fBlS{ zU4w_!Rt^Ps2A*o6t$0|Rk^>@T@Z&WAWnB|`H07fw@yIOyRKi0YxDMe?4!j4qh#83v zyo2y|EHdWzUlCs5z-5FdIq*EfgB*Ak;dTx@g>ZrcKSKCh2!E^pgy%Z&5W+zR?oGI_ z17AtFl>>Jm>~i3ygx5nTTm2`@#leK@5FYKodvFPc(cOV}5KeXAuL$pha5TR!BmAiY z&m%n3foBo+Iq($1UI%`Ja1#d}PWU$nH?#a9gqJ&TZ^F|Y_)5ZeIdBKUnGW2Pa3cpk zm9P$>WA&f#hYq|4*HIWn4!nc#Ee`w@;dBQsBV6Bs=Mnw@!oVzl7U2O7JcaN@4*Uq= zIu1OX@Hd$JR{sgV<-olOKkUF)67KE59SC3Gz)cDNz0EG~RKjZ=xDMf2fR$#r7gr`4 zDo(4T5p7oK;cJ5&ZZs3w)H|6E--G;2RK23i&>Q zZdl<8youoFc2U<6oN9xe2@bNsb_844;Q0i1+ZCNkaIp=ZKrm>7`*63I(E#2ARj)zt zD>x4n_zl4sHuwp_p*Hv-!899uli&fn3(pf=W`mOnPO`y#g1v0;eu8J&;LQYovU}8n z;9MK*LhwNwY)|kC8*EDOL>oMf;Cj2i2?Sf)WZ(ZNK(7t{Opt4Z>i#BzV{PzLf=}Dv zM+D!u!M6y0VS_UW{%nIq1l=~P6c9|Y!3PLlYJ-Cb_O`*E1n;-OY=V<)umi!_HrR~d zQX5Pn_?->bCAiN958%c&;}op1s=pNk+t}c@1aochGlI9+;1Yu4Z18P@t!!qPN$@Xw zKp!Kx#0DQGINk<_5$tY*w-7wt273|w-X72^3BGQF9SQmX>N``I_9E)Mv5FV=96pf_ z%}OLxVxF?FdnaKANE9&_0GzqsDg-|R^f#Eu=h5-#Eq5;m%>Vo+^AmVc+cNf)2?R2s z-Y^Q)IZq(xH41)lq0}I@9(}2Oz2TmzgP4YOXkNHW>V3>oKhl?}wFsu>qfD*Eq*VGV zwH8mN&Xm8?Q|HRxms3mR?;EMBGFME~#EbKsNoT zAvy)mX~cad;&u=wnu1jCzN@@}Vix8ai-7);1m?`{sB(}ZZ)yVK_#1x6?{J~3og4${ z0pM_;>%3q&JB8RnbFJJIzVrS4NBDk3I>KJlN{Yu^jTqCzuSga^M_wS;p85W1zW?sX?~}UY z{YO>bBY#QZy*d-Ps6hLDxbsKHeE&`D1RcVC1I@vt%<%%Q#;fqPNWGM!la{{o^v_l! z@o0@ZN@+Lk^axczH>Mqy>4u5K76kN-^(< zF{eYCWaa6?^Pc}O-wtG)%CwPamFz#kl3ctiEi&*>WfZ^ukC)%_zgWJR`i0a-Tvyex z8SEYy&tt{cj5~wZE`^({a8=B5-4Jf<#bawcq4lrrSDMxD0cZUy8^!?>W}t2#1#_>f+OAcsWW_i zp*8fyWLx81v)>!o|F_>0_#TOXKF0J0N~G~86F9xQLxwai;m^o*m;>E0NzcHOx8&vZ z3DA1v_%{6L^Y`2;i(rEO4sMn=7ohI@DqdB3LQFm&NYdE*C9#Ddng^p zRJfAGxYGJcNvO|O)s ze&`ZZqRp*GAPV6p-S^R9b!}p9m1`5bF*W!+lwIu#sN$`+!Ik)WZ((sQ_&DnigT0a6 z%Dli&Wl!B{UrhxDkLCTWSl<64Wb^)V{*2-Mcjcw#{di>YL-%#)OenXsMVs-?q7invuC{F!M6klff zLfC^Ro!=sSu`LiKoC4>)tQ>~?uu48^tRN-iH!luNuEJd$k?twp!I>k`yXM}&(iB{H zaYp{=TD83XQ@oKZND1B(W6uXDM$IuojsSRm+JCC#oO2t~CySGyVE^%~8el zw?{SlHc5vs#(iS)#R}hNC^UtIf-jP!1g3qRkJPy62GiPCyl(2lp8eSS)qSw^jC4yY zamE|tAto$Vk7`qUYf8;i+Z%aJLSsWaacYuz<(#RFy7i|QGD9JngF6B!)2tRj6sY{N z)e{@4slEC-b83$ldSmu-dY5O4t`I%NV<&Z|*hzh$z@F5*_%miwe%+ zyzo((Z&=S>v*&Z7n$K!}9*tge&;D2Rx_!Y>==Ci~QJr29ce{fFsBeqjj1;3`_j!2W zorVkRL~HVvD{hQd1583vBwECDw1UfHiTFXjO~lvuGlq!MGeM-t->ip8P<Y(DR@dZhF&)Bh0q?EJjEB=0)xtgdDI#VG{L41ETY| z4iy-Lh|NX}1<7|(HRXtUR!tdWalZ;AsA)}Sn>J2Tys=(D8lwL@GB_VKxv{Tm3-1|dPD)2Uo-ZpVj3c=#ZqfB5kC5Acvh ziyxIGegGFpl@h0+umx-QT$R`#VQBn#Iox2zY4UNt&;{}Th!xWBTF2#>`FfExp3L|x z-tNsz$*-M&!Fdz_+rH>NG}Nr=7S;AebJ_MHKF2*V6<1q)R4_)I6#W$ zXExnn-O_bA^466OQR>CQSIN8(j#?-kZyW(>v;b()E#i5M z<53?vs&SGkAoDU%U;`-30jv$bqXFF=G_yQ};vbB>g6F&OTtBBS@)KL~{|NG^ab6PS z(KyPZfsjXSI7XC5ub?YXpOieB27vO&cbbwv?y`7jv?7DbUCMWiOQ*p#wj7cq{gg!d zhmHP;9Qu{jiX7?_o6TDUP|H{Wq~;g+htkJa2Slm(nDgUwM3>oQ`gQ>%%zKW0X3Lp_ zQF5l)tySdA6ujgpHk@P187&k+)1q!%su*j@zntTmciWq(d6$Rw7%8%PBKrCb{i1GM5=2s8NW(u~2pK zp~z9Pr6oHdvgI89GX0*7rNy+LBAx>B$syQK#_b{xVy69*FW~u4crN17cpu;CDeeP^ zcoYp=E?~YlvAROixND1h^K)Y7 zKce&WKf&oW&wm_Y*1s~}{{LeB;}C&8|I0zGn&hph~Isae$SMwiV>(4{4JnH

iLR?7f- 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 UkE{vnZXHO-rf{vzKJN-gXv;>7Pf- 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%0A(}W0CHQ``7Ph_B>srJEviiu6ux-UdyHxBC&V~&R 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∨>j98tCGTgaRxyM$LPrDy4~26o&o_3bT2=J0nT{ zP<%;TB3zV0AblCllI+mcLQ!J%NnxdZM`t0M&SXqOFe+|mBBr6da^56d0up8l3Ge8o zB*b-(J(BSG9!UsQ_B==kP4=85{JrGzp(OmxhmdfQWOEJ@8fEnyB>c&FlW-wOm=yvS z#&ffkg#A!{Ph7a5M-tAHTJIreoP!Iifpsn}j7TmYO2XOaCgI$fh(45@dZyys$AIH$ z{XG+ME)TgoUs}#(&?Cs1E#$1ls+K~Xi;DC>&bhpTr6-Ec1jhz}v^+y@l#9CV#K z-sJURq@6ofs)SJ!nm*#=dXV$E_nHjPLE$@r^WhX8L#(brY0@Vew3Hk(%ZgSwb3?$l z;uEooC3OdMq%KT0I*=p>zPUV8MQLnC&Xnn7ZV5grjn#0`3#-tM(}ZWYaOM^(DyWRf zjPX!uH8jKH++ilaWJDCOI!;na+@Vr2P?{MsCaSv(Z!j6|56Hpu{V{8$BL)gMk8uQ_ zI|QgnawAKIMs=6vVB&cMXVDCZ>JD!Z@WgbB@K{}?LS@Jo3vO(P*l@GcZMe}5@sUHE zM#oqAZpwt)$2*XtixrpZ#}FtU2snkK(1pgXTCfw5uxaN(bqIm&{yeA^IGb|275(u_ zUbcw9bez73sPyYFnDHD&IoBz9V#wWR>PO0HA+VR{z!>~^zxt7KV2G5Ts*W9h40hHr zc6c9826@XJfXq|zvoLql{;Ltn2a1l(x<1|XyPMI;JCPa(eLln-LRRSkcb3az2qJ7P z*3djpbF&qF8bH>0kkXkrhn4&X2T*mje7n zb1D?Ue^f-r!AP#*n%lpZ#x4p zGUA*)?!tW9dMfXesa=@V28`{b#ly?}NZfn*bgT8Fw0QUhUy^wEi>bI00etv(W;GyTk{3+iU4D+L$J)17L^-RTa$a z>P>Og0mj8k)VmiLFLQerERBr^>j-0P=pnDp;ql0;<2;DKaMVPq)PX^I%CKu>eD~Gs z8W-O^UMnoQ=ZcE&kjh)M;f!NnbpV0!yJYu51LH|_-NBG0tnM780^_BH5)8UX)cobH9dCl7)^i9HfsgW!{=Ky+U@vrm^g z1EPDpWFWjZ5cVWF`#|(Aq3~(vKXl05BYJg!&O5_@mAIVy$~eFjH-Z%$wqqRd=J|)B zCm41vf$$jK7|PCocqXYr5)OGhqQiC$6OBf!r1j}AktPGFEMAe_UKW2iyR9rfHv24& zqRc*177t~gW|Bonf;(EXPvL^$?31{pHR#(68&=S_A?RCg``)sBa6p_kyb$>Wkq}2* zlw`NqS*TtXj9JLwIb?tfIzkSNtkZ^H3Oqt<08M{y==8p;)B9n*!$vp!vHh3J!^N}k zVBdo&{ewm4}qdJ$2P8Y-+&hw^P@Dw#g| z;L*hxw-DNEGSK?ac^U!p07}ez0y$~`v&6hJS_WRoh-PF2zC^abw+pNfxcDAFNJBK* zYn@qd6%5c&VL+zTSOp9HL*UXRgek4|JmeSp^NqjL)#C5;TXhVBXOn^V7dSoS7y2^{ zFiU}O3|r_w+!x~{UCWyBP%0ks3;nwcaIXU47`D*gV1SJZgku=uIt;L0fp834=zq=t zmnaa9VGI3>3~;dm;TX2izrX;WQ6L<{7W!u!U`&B<3|r`*Zh$it2)SM8A8&wD6$r<$ zh5j)HI8K3Z3|r_g#xr`XL7g1srMv;nm6%_Ki#Kr3MI*(@LCSC7E#V{Y6b4w_r@h7g zsE2IG1_9YfqRo3s?xkde3HWpZ5>7^7$+T8HBe%(f!w0+^fBZJ>3^sYrNS^pncl36v z?k%rw5~(tyB@;}~Oxl$3ty6pOf)Q>C0OgHL-7Z=5lu(b9fb_BG3Gfr0%;B*a&&X&p z;DDiYygaxPtXSJIYF&uxc_v2u`FK^&M1?24a1Fe_!0DNYsC5I(QlNU_VkKI3REv#1LO@8>Y0eBbpu?iK=r~kz-JVwUbqGr!vjd8 zlM?b#cU<#zrha8th)Xx9Ic>i(47di4XV@(}j#Pg3#%_vk9h))Uq@Rihd)IBha8NggPmr{rGB z7Ol(#B%BPEWt@lz2H_BhDfr_z&JX2BwO&RT5D(SDx?v7b{ug0jLP(B=i+H>YF|x{K zgH(i}$Ap?_pB5)kOArK!T0%yX0S8RRbjIy<5eDfj?@$s5171}a6rL0Y1Me?z9!dgX zFu*JYsxb61!hi=olmxBLlEhUwg^75*f; zmF$sg;Qa;e1!fpvmI74@VC&K;0S`EsL!vByfWYxiQb0&@F1V-%DUc9yI)R7|-qT?I&$*zJ zVkDiF3e3Z+&IJm8(nx`U_ZPSqm}h`l3REe;F11Pl9+KxK7~oz7suUPtqXJb546t5- zDg_3(M1d*=2Dn&(Dg_4ki~^PU4KSuaoeKI0k;6x#;=9JcBj`56;YIsP>ITeJxY>K1jV zMimk$^jxL^5t{vs#y;nz4xv%duT$F88Rh{<`I+-d?xpm^St4Db^GKvCrqIcR8*K`i zrXpS0f@GxYeri(^=}HAkv?(U!(n12UII2MjlBES#1-i6A1XuS7HBqOzgNmHdtR`@M z!XxFn)27HCX@?;2Rf3)ro|GU1?=Nug5Cj9vQlLr@_VrYP_+Sn}Fu=VER0%S`Mg^(_ z8DPBvRe}s~2_8V4SG-W`2UV2J*Twp^huHyjxrxL~%?=Ap!e{tk4oWb81?oIvfH4IsV;kU11uA13;8Z+_xb4C$fL17no3G>aYmeeK zNq8|OZpDi4NrAj{lmayjbKGxG=!I3RH10K;B9OOce(Mtj7b|^t_*D ze|%NB5Fic#fU~rQS}y?vobk3eo?|AJKy4bT#nT%h0yHD%V!GXUDKb$x(oE>iz4=n9 z>SE30bxzh2eZ3pFDqi>^D9=bDYz1Ii*^jR(XXa~+4_J~=)tYXAyiy53l`{jJsz4Pl z1LSplz|;u@eYDRneo&~H1?u;lR{z{G;S9KPfX|3-aq)(iu}^{g4hPiu7bJII9w zDjZYGgFhJ~VNC&`oTe+t)wvRCBA!-*QYO3sz9J!a;~5$8tQj7KQ;t6dfJ-E~D11AS zsRn#QgXy74R2!vAUc5HL#`W-=^QjVcP2?1w<*3G1JU5^U$Y?U)F!+k%WjzRo?K5w7 zJl$3Z>>XT)JpsN7mn&Sk9P!=;-e2H6xDfH)2AHKla5>_=v8y0CH1k0YE=0Vy0q#{G zxE%4`2H2=Ta5>_=4UkvMA~~2F@!kfwM1f#d#CsdyVg-UL5$|n)yh#wr!HkIaHo%wy z!HkIaHo%z*1T!Mu+W@C35X^{pZvz~sKrkcXy$x`*0{hxUpc0;~CnN9CJ?44cZbX1F z&$AE3e&(MIai!Y~wqPe+5nl)0*UC_6xE*owD8lJ6 z#aejYK;IZXcokeu3R-R4u!7L88~n^ zcizJ_fA$`(_$wYf&zk%+&zfoGwus=IgKS?%2OAW+$~f5||5ZsJn{qtrMHH~W;aP62 zfVMX6LF`RR=%bw4h+7ZC^(KuP=Nfr_*BuR$TKC+BGh!%3TW-lTvCWHaD#D1R`Cf=HqJ;y4z5}O zUms`WSNW99C&Uh}T7l*}BfrQeY?L`8(TS^8^wCB^+XqBe*}Oi$94+ZpmF+<+s_Z+X z$tjhe3#BQ5;A~W{dUE?fPszQM$F$4|SRqZu%7gAlqW351*G$cS9g3VrYwlUB30Bpj zrSwd4qF$?O+3HfZx|XdjWvgr1>Qc74maQ&jt83ZnQntF5tuAG&Yx^*76yLmB&vJK4 z*>v=skb9BPmEq?&;gld(Pd7zHrDNc{1tRE?@OsQANOqhnB=v1lZzUm_*W2FSHcG@H zp~wR(pYmf#lC_*8dFqtVG&1S3Ny#TfB56oNX+w%)U|d{(;zX2z&~DPK#GfQui9boT z5`U6xCH^GcO8iN}mH4}-T#4T!9pr|awC5n0Z0-K96HMu3m@43e(;4dKByDa^lIG?l zWp4HeBV6(vxg_A+Y$&9nPmXnNPLhiBS589*CAsb96v?=wcMg)tvCseeB*Pd~BSJwr zg_~lE#jJAJ0dS^n!1;cPjxZ*mS^H#-9&ko@G=<1O?wk=x!j4E1c0`inMi_EBBRnEn z(_kMc$5l4Y2$-$qY+p+52Ugu16gkA%i{*eP+DVW-2TnCV;BeAzP6CCA0^@JmL3J=U zh(Nx}ghJ~cPq@?l5n4XdZ56a(ypFMqa4|CIM|3=UKgnrw1BEjuMW%ogNU~cXNtHm7 zDuEtzf_jW}qTWBhowA8F&A+8Po}8kjPi)&jPhvYjPgk2jPfYtjPeNNjOs|AwL%|fRFXVm&IO^m zCy#vn-y)9?#BfV;cE^~llRKt4o!c?X>C}!%PG@$^aXPVMiqm-=GaMBkI>v%aUdIH3 z^B}zmex)9pt(Hjo!BT_a$&clD!3hmW@D_hy_DfwOMBakVW3_n}vedm+(5HAs3a!KC zvhOMi6WoxyPpk=HU*lyv6QH+Frb6~6{_63}OLy>1j*mYJ!`rGF+zD((mKu;k29p|) zLWYqVkU~b08jwN;ks6Rf#*iA2LWYo(os$^<1~9xHz=({NsG?%P&!6up)^_iV|^)$f0(9{S?R%ohx&UKC7|~1 z5}%bsPR3^eEnC(^EZYQVb&HlM3n47&OoUbvtDp`yp2Mg#$?0Rw|0}FYSP7*CRK@!R zXaky#W0S(!vZRu5t#s>BW;da!lMtJlI$qFn9$W>h(#zLz5-V};Yjf|xyLaVuRh#?c z`u6t3kq<6pz@Jq%K%mR|@^<*xGg(-=mhgRaa zilbPj!lD(I%O|~4K>~6t$37ea=?9Btd*RRBXW5TgO31YyUD-{kIUct$AH+O&pHFsY zUQ4fkopTr_IQzzae#d7;Ut&mL)(W04xlk{%MG$7!qe9byFoV9eUJzz?WJkzd_q9U6 zU6Nouki9yfQJCi-do_BMg8pG-uMTLK9mp<0m**gRb-)B-5~&BmR|iZSCXsp|e088p z7-m<(hl6O(0t{T{{=?+~gzwqTOn;8`iyGUx!5>*}Mcex@$hggK%|DJO z>xDi+=WL{=a-h2p4(;Y1%vHXC^+IVz1Q%P&zRe2_C$fJy{_B%7aw_)>`-~Oc%1nUa z3&y|hL&XQs99$YbVMT}FY1j}eS^y)Z^}@}*@UET1?zJL8WIk-P6`6~$jbS6K$bSQW zl69zNl68Hrsb3hI@!j55&uAL%#aW{OQhijID7)3Ez1w$Mm}Q%#%R4)6~8j0Llw$h$BgOed4#$wx1$hTFu-C5j36bKhkR;XV-9BE+_|I>LleVp5_f(8G%=T zpNyvuptkn<)=ETkZZBL@cp|-B)Ei?MJO~y}t6_Fj2(-ww-mh^(?};+EAO~qt-{YY1We^XmDD? zUShX3Ve6FV%GypHcBgn+ul4K-8>hNv6o01)eE3H3@!w`R1LBLCf1BZc9a1pte)PK) zy$+9dj8}7ml5Zko+sX4-;Nw7GxBVc6QjryM2HCN({v2#=B=SDr(*DwF6k!jSUz~<& z-Mkz%NL=}BZ)|R$fh#HsFcn=j_AAI2#?hmNHA`ndGASbw-+Cbk^%-B~1$OLaW`-d7 z(!w?NoRt)$khA)0Uk{88d_6EOaQ_Nvm(uro7=%f=qqcQzE&BVYb)ORDsC93zx3ggX z18-mY7sTN`*@~_>8nOo0*e{=CN4B?LCBzOEZL#KW!^d0V!=iao7%ZKMdEaemM~#E9 zDMrq)7o`X4i*t&X{5+$q=%8IM(qY#Z%YYGb-Uro$s3kF_Ds_ZBYi ztSTIv6>|RQpN*m>Sr2b3ah~_j!?TT3avv*mR+T!9&_Q9E`gUVJ_<}36e`+lMOpx72H>=hqW|BvUYN~<;X0q~TftmQ zicZYLnGjo8J`~Zsve&GZWcOuWe$ocI%qxl z2_y~0ln^D@U?mZ-pUQD3itV*ZG^(`lL@@k#ZiW?kkW>s0^JiGm-{CPBF2LX&#(@XH zSRg0lyvZ{aD)5?=XOiiu-+>_Uk!|s+_Hb(-Ywr7abxwi0z1H1*dB*w!g*B=3H2~!@ zWn;L;SA>NCJU6Xxug}Lr9sXc!*i;L^VE{HQpTVWaF8n1NEE~T4P7WTi>}C|yw>LA% z-tewA{Db_yy@BsoNNieZlGjeMt*YfX4#0YLJq{I*IFKe(kgwQjvLcUDy7sCPidKUuoaNZA zE{nczTlVsx6Uc>#2aDdfA`5^Xp6MUZUYQ+ixi42IqRPwMZ$RL5Tmkne)QXG&@I-c0 z=O(CF?54w_ zMtP3GDF?Pw!4q5Hk}LNaCr*6FlgfIsE0#?749eqt=@8`eAqweqyd$v{`8jf?iatIV zpOt5a4-5>}j}qw(*7u>nu(UBO4a)AQT$VV5h2$p+Z)yQ!0?zElNcQ<;ILUZO<+Wrv zCN2iwrILXIiC?T(n(Ag}?6Y9_lRQ3ryxTjSKQRhkdJh!xp&b2Y?We}S#=QvVKzQ@) zu1)}F7zFa)J{r-v%tQVGXjIlTFFY)aT_B|Coc}3OR zCFn|E25S#oIcGnrdQ;fFlEaDf7zU25-(DVFQ_-iy$t8#^S#Z>@J%uyYHdo~fsNnDd zfa^Pm<{NSNA?j@Khy#A2k5$E!(ceg+vgubzqRZ1AtrA^n|e@Jl!e~3*?1sdJXS|=SThaPwd)Vy)bE$`ztR<4Yi?oZ2ZaJVifiv z8FLS*)p6tEoJ!S9f@c}wp7RZ$4{x>PNR46nAEeCzvDv&!ku`c8^ zsjekD$j|W6olT5buX`3>p04PqUh*>a)1?pK=S4o*POnARj?HjSc$xlM4yYXd$5QVo zokV}HHj7XJN=kGqMkm+haOJG)tVX%(kxk`uP*f-@OnHLH)3- zTG1q)J-*L-=n|Bo@Y1Och@GqT7V{g z40QwZWmbN{df^TqJp?ntdv?w~HNuLHhJDH1(#%4djK1#fJVug}NUqJKP?=F0v}Sh| zFex1={=+gR;B30Xc8=N3Sv!0X%(%~(2_8UCUo!~Va175WtVy&VC0(GmgD0n;*D5Zv zSfi^)TZro_e^) zsE6Nb=&BxK6By%d&I9)6`$=Ug``Y1^xzrO^B)(PH(z!i%V`+x<8CPfFgZUkrkcTFm z`L*1ZfEiO{ryh0TYLNVyk$4tSGE%=)R^*SYcO1tVpgD<8Ir1Usth6F)y$?B1Yx(WK z5fbH2e@@U@g_EB!Y$bdo(8pwmdL7uItOsypYSEs`%OvyCjLN%!2s$0YWYQGWd6s0s z7wE<2OHfXe`bZD}tgC=3<63O^nlU6B#@eHzQ=?H|dXs$nerLs+bjwT94I^mf*Fm~` zqhdqBE=FyqW=Ox8Qo;9wLSM;9Jl%R>2737SO>rH^3g2&f7J91J0*r$g-cxmTAHZv3 z=V#d+B~W;i;~N*s0q6K#cLbd?=#ZfuI%E*~7R2YAl#%${dqQJfuafflpf0*6vG_^( zU^}ZSCJ>%i;v691A34k#aKS`9^4IK^*vDj|;+ke7-?JV@E=8^t{UP6?8*JxemG|1Q zJ3xE%IhP+`ROk*lO(V?s-)V8e`TJIoBhn(|xD@Zf(ONAjF3eCi9h4+@ z<#f<`sM2~xiXL|CLOXtYyE_f^68dYU26R^`5vix_m=UR_?_+)ud@EWZUpFh6i}rJ(hFg$^Sx8Sf%F?I;XwnS3k?BxN#}} zNtB++MEOZnE7F{X^Kr$wI)#I^o#Z?{ciGV0zeNpBRAk$+#|AlD6Q{-Ov%>9%YJ?^G4tVo+A`erUHGPb9H6|S-iR@u%6f%b*!D@z)1WeN_? z#aV#1GbY!1YA^xuZx6ELcAg!-BhM~chsQy<`vvEtt;N+Z#X0M&NIS8@XZu-mkMpVa zKqghqmaXAESrtQKw?dmgdsV-KwC7rQk-@Ddu2xBQ^v z;!wgLaxf`e6D(L?xSKr>h1FG)_-y4gEUa^_~C&!uj9Dv`=w2RJGjlx6k zl32;hm<>vn5S&Hu5Ipp;i{40msk#Dr=GaBYV>6NM%<7z~eki?fEcA4a6IzfXL-zn3 zm1KBIj!d+=VATBlK$-lk=vRbhD~n|UoU{OkxnU^$k;lZNpl)b834QJlr`nsAdGF|Y z!~0g`G_+*$zk5{FWsKOYfD~^o8?QuWrQ1 z_}N>ad_6~1@Q1MTAn8q-l=(;7D?gvOa&B9@du@7tg&VYfAVeMrfi8y$tLQ-GA<@(@ z-o=LB_piwHQjS9$v=d*Z35jF2yBn=FG7xR&*?O_zgNeL_Rp_r(cm+tDx4`yff448R zf4nQ*#z7Nxp8-a~U!aM+%jZO+)xFEtU;?+ zSo7bfD27jAXX;%(IjckQ$~(XQ2agDb&wk08e-(;;5l8uDq!xXl0$103{AF$8 zH(=@4hIF(G1~DB-CWqm#Co7B-)>8q9Q7E4MSL6fo%=8Z|Ji+BIl#S&fC)=O+)g@dX zV`WeED;U4wDsGga@9&5mbN zOUMW~Yptg~i&6qFqYXId6qE_Z2lftZd^hMEL6ZY58&mW7h*)+kSi9>=96=iDTT_ZV zoUX31Hzr0n+4Fj9AISftdPX_gqel)v$ZkR(u{)joY^Su}e*g{m%id>1D?D&ZG*quKd06q8$_W}Tt>sM&U zv6)d>z8*ye96FlZCOm<%?lz7nKfR_UHU2<_LGP!nL!iXVY5tT+gYv@R7AOECzsn5U2g6t3k~3k#yQ zkP8(iBO8T2wL~DpeP2SkHuxSUeylIcQ8?1}gG0$67$K4PUn{HKsX{xf*w6s?JMuCc z$upJ~Vh3m0k8x&f;_Y?V<1O{@Vx#g*Tl=CCEnCpqnx^N{$MY`$HTjORA>G_$@F#}U zO3P7+Y(IVgx1x6f*&UuLSL=HB0Pb0!uI?T9l-U1C4xUo49{Wr5@wEOL*`dGgmHv7Y z4P)(9U-!lbtPj$}{{&E=Sd->jUTk<##Pr`)n{@oJVD@cVrRlkZOMD9RBRT%WU6;!i zQ5AFP&?gH8GJNV6ygo^6+^Bi2KoTLm&QnTUGEh0mxFD?`ZpSJBMCtVdrYI4T6=!(; zq5a@q&oojm(2{ zfN7_p>0=9E)_XE95DU%CgBl!-%f4a4_jrQS9CVGbSVS=|?h*}cdUVnPRw~H8G8J>U zohkYP413m-KVs7+R^=r&=19%l3HZ$UuM?p$xUK;cEeNvDVd+b+YlK2>7im zTUbLw*v!sLt`7O&?SS3jFLUaH;r2}HsY5_!>-H4}29Q!nvEH+i#0!qlIGzgil>% z&HWkoVj2q9nDL+bP_5C2mQWwEV^lGw=lb5Hkus72k_2MKxq(-%M1FynhVi%HOrYRY zAoftd5@&Z=d|I2maTm}0-nhp(Y4>f|_&$`dzKLMb@mXNUf&LM(u`l-n0dqDsIa`B8 zM`raW6iG+KX8u*h^43PW;4whcC3xDyTu|94^wWZ8!R2_Q$Bc zo=m<%GhPlY8NPFsf08DKxD|vecZ0qaK_7O9xXW6!@jG{ipx3oPnZwwV$b?oa6)LQO zybZ{NC4?1VPw>XNg7vt$2u04}ehPHd0a?ykmYIC-!_5fX{8G7`MS_N7Aqe3ND07gV znB1_3Eeu-uFj!=zZ)KCu1OqJH0|MAG6ng?IYBU?8B=<8;dN%)&C9ykWvX=p^irX0< zZ-R<9roAK<`Vsaq)>zRK)Hu*m?qks4kDBGk#vZm3ZS26`jION@#=e8j@3N&}J@qzH zV^8EMZ@Z)h+a+}XdGn;~EBr_lGj6?l#c*GNy`GO^AfLLqfH9AR3B{Dl&=?II%5(QZ z0h0W{yjT}uZwnfo5-gHSCDBfz4H@9z8Pb2Hv|qR%kU zGMzp{W#>21`#zzMR82N}NuiE+>TyCQxXi0(3cPNiMA!lX6! zZMG)Y{b>iRZvo4l3sA!U@s9Q%(X6|!JVAz}CgiO=t;lmSwT{FF(1|4MXO!*Ox4lOIu*bGb`cVp~?o){aQtK)y8U04f4%}tyGFlbXxJS@xT?bNLx_47_b{H@3x zoPlXGk37PsIHtr9re3JSk3T9M0jW3hJmFDF1@z_5mO@z9pI-Nwsc2=cPH{^K|mt znG)@veA>f+9)zk?j-xFTy#i$Sb^Pf3293!n&0TEOEcv&34d{vca`5}AX+eiM zJ^piUg4^LN^d70^99o)x>bDsQA1*N>g&f#ShI25fJqS;W_iwUec5dm=gI2VLKrRr9 zR$Gw^SzGq;S}e;lta*c=7zeCh)|Xl@c=yJnZT(>l7k(l)qoNPC(DR`E1;bS^zf?~H zQw8Wf6y+1jkcwbBwIa_0kl0CagF4uG4+~a#E_SU5O(jSM#<3z_MuQVS&*sRsLVJiy zhCbj<>5J$#4xLDIEplFl%4Z~Ut1@A#g2aCuAZ~er77u|_#^l@K>&ia@_O7h5V;4`r z6KC9Iq>^l~W&4}HVdfWMAE@c2m@ITtb2jn@c{@4<8lI`Rh-{LoR`|M;7oi|Hg^`}I zUd?#Zg2oKt$``6y+Ny9JD;i!osKcsI%Zm;7Rba%KPP^lN3SIN@50hAPigo#nsfv+8smdeJC^$ZZoYU?hjC;_Jp$`_7%pYKV z{|EdQJ_*|X0$&2Lk$DiOeogrzKjt+xpL1-Qe+6n7iVurZ-?1I8F4_}Cw|kR0*s32c z|NJa)f>7%nJLzB)q;{d6m7(}uSbx}g!T3E1t9lh1g*)xQuKlodz&Z!3jCl6{E=TN6KsHoX1f3e3+ffN|xH&iR^hs|N!4P6amp~(OpC=i@&}AYdO(}LTa^R&M zjgU^z2KM9M1yCNJM8BZ(B4i0vzR4YuuK#e{!H@%*yH&_ER8(6zzv%}_{KVzZJ|MI1 zDCCCr#hy@(a=)PZTMY8=IqFzX&P0XmiExD4+snNR&*ayMPvp7O3qAP)e#@37xG8$| zfs55dDBM^aVR^p>LwSSCT$0~8fDVFr37iDhg+CJ;7c0xPTi%uqBTvIw0xe=Cuh*m{ z;IeO%Uf2YxHTC#jo_k!{Fq?D$zkW~T2m9xr@MiYJtQtV3ZNHN35<>OQ9REXdM z$xnUoDY5xwgV~Dw1IwskyPHA3#1j^*V5#}RbHsOW*Llm*`+f;?Liiv?fHZ?K99L{- zkMU_q+&Dyca%1eQ*f99Av{!sOQ8@=&S~8YbRNAmU;Q6tNuD%g-o{+hxqL53NBh91$ zd_G_(O z{9az-B)dn)mX#gHmiH=FFQc1JqEUMgwNZQXON&nb9Evm6i1mrBAHnDo9_+_>u&VOH zAoVG1=W@E0p*U^U5r-A}b%Y$;qq8${7+Rb-p}^cnw=m;}0wbLj;r(zytOW9jIjN;h z%U}(n2hj0p<+yabGW;ktso0IMrU@q7$ z`*)sn3Nhzx`Pzy}Y5Zl^*P_(+B~$@k0xPx`wg;TmO(mv1#$}QtFAB4Bc_h)0+LKo~ z>k1pOm+4H;E5H_bxF+8oo`2czGAgc*Zg}iQ>xZ@03-Ee>OxUUNB`na8xXreL=#@HO z(+es23=gl#9-EQDGqj)&99t2bxVothOrEo}82%aB`j4aaFn)wr=F}#x;%-DrK8~gN zo(O+I`CO6Kz5x8Cf=-*bjlc~oHVXZDTwG2d5h${1kc|gCRaM&YezHM^t;NmwlCg}0 zv5TM|j$X&a~uBy_)ZB6}EAA^&4uxNY5 z=jD5B7)Gb|3hcx0Yu^my-DbjGVf!{T{U^t{@QPfxi6fI)mwv6V#)}eI0efa04aZnOZD$157^7&UM{Xz$MRihwVo!jiU7*g+uetA!KFL|(A6y=Dep+)j z{zY5}4JU(Ou?!v=P8PAA`UL^;eo?7=d;qQH8B3K-4#NX*eJ~yx06RHdx}zJaLYUdV zV#n`;+r-1Q@UB<-N&j?duyji&D7xJ)+Ftp(j5QcEb1M7U6MJR)$7Y0EM^|0*H4Jm$ z6Sp9kzMmK$0B>GY$?G?47=|4Gs__ubuQ?ajeR6CD9Sc+R)BTnsy5F)vR)ugNqmyqI|KSDX`yKZa5Cbm;1hN+sO2ST)#CiHAxpQ>wID^F^=ZL^N^m zPvLm<%<2KZi%D=>@4U}(g9xNw2lClllV8B+b6RJee7W? zxf z0<#NQCEMI@3IsFz;Gep)R3Ah!KX+Fr}`?h3w1=Skikr z@MnMQURG)-CW(Ce#sU6{PuUJ!g5$Rga@$h+pLWUMx6z#XLGCcLbeF9DCL$l6XI!LWJ52%2%DQPilYpo|hBnm_{G*Z~AV6jT&N zRAxl!1{6qw-L3Sron%~QTt;O^9dX=sRFokQwg|X@3!;pQxZO*OAZpl@{O^0J?$SwE z{J!~qpGVTSZrxf=ojP^)!cQB})?I*v4Fu>u_!Q5x=%XOD;h=yaLtU!CWJKwez#5n0 zFZK~UA@|_4Y~~2;hiPx)^$%x+CWxyf%pKQ2?Lj!~h>GK2%$S=p$AQ z?8r`7Y?g$IP#W3Y7=j)|n3O&l#=VP;R~8eT6hJ#DS7jgY#5aZ~GSCxT!0yKIQ>iMR z!{Tz0T4O$)1>)p6Uu^%Qee0i;ipdwkVKES!=O_If{@wiNcfqd{c8c^t7_l$8Ptv7e zhrhth&&lC?PsqjV3A~hxB4=S>gVv&8jSvJerZUe_vd0gosBo(5 zd#ffh@G`tmbW3x1lqgsydWxO!UntN-Xoq>?9h%kvbF;jxYEzXdbh=qMr&Mbre2hi) zM=<2PVBf2JMslw7g7a67w(|ChVpp6(Cn3l!Fa=$ZkBGNE`Too`^g526222gotqi&# zpj(mW^y@9B-y)QQNy3r;2Kb~EsrkyQ+rv#a9isWt)X}kzX)(^r?zXUj}LA z-5D^3)(O9ddM-aV4P8QAb~j)S<_){UhF>R?2;352fD!`%KaeCp*xvg%j)GO_>cd$l z`6K6NgaZL&`q;4^mXCTuPv+I{!;Ek*1--TKYtYd1!y&?m(Gf;%Z#qS&p+`Avl=^f0 zvv-m6Du+iAEE?Eb)&Jm|%$4BG0mZCs*eID0BnY`CFv9oK@jbuFs2Bh{>F~kHne~AB zP7HYFQJOPy;Jz4ehc)~PfXE-24uzyiTAg~#vz}-Rja3ZwXEvsu6MxN>bO#amS3lnZ z{Cg9dxDIdeZ?OopxEg3fo>M55MbA z==B-{h6v0mbngrVA+aP~1KO{WWdjE%%Lb-_%QhIxmdO_dZ(wBgvrh3Ry27>-9tIte zy>K0s{B(3ZUz{U`Bq(!$_oagOYUN_mItjB{InZ4dtK#4%ynxmE8Px_WCwmw9lbyE* z6IXY_no;`yJ@L8}11!y#<6TtGFyR@oR|vVpbe!4~ambI$^T$W~Y_lHKq|mEgjIMcn z>%ayrKa=By4obbF;?;TW49~`|TW$O>s_#H|ScoExBf9~enO&{+Xv;Z2)QFb=PwI^5 z_aH+4#HH9U8$w?P6IbO}r^+e;pOgmq?Q69L`76|PCg6go2|u-C zNT`fFOXwVZIA)MOo|ctg z{wRgK56mv&X;a=4SwoitcqtD(QSx~+NiPS=0wmahw&;{|cPL#`=n6=CPv?z=ieXd^ zBtE0+FX)JVWOo%|W7&f;VLe&IA;7a&1{BId*B1jEIce;>!hh(tLi2=I4*w0Tu-O68 zU8%o##)r?)h5My7__0hc{Yh)qT8Nj5-p}4$`2k}2V`G84B6Na3IOd6rc$dvbAjEH| zy-%=#al-6`)*C7W=;j84Y9aO^$9fMQ)jYov(|cO=^1G6A0-p$d4c5iH8EHVc_+^aQ zg=%~$yoC@~H?AI-cJ_;+-VAkX7Nv*bQs;GT)&3iu05qv|KtgrfG7S{XQ1 z!Dm@=;Ke`XCnJ~flT$NM4y3b9Mxu3Kyd#3GW4}RL5Yx?5R!b8=u<(**%&htCJs`p4 z86RVhk?hrfx)7uYC^VnagW5La!vbWdYdIrZE*Cr=kQOe50qLAn>`jz3d$|cE!{OK^({<%95Ajv|I1*wkDvoszw$4 zjrl9(Rc((i>v#NW@v=$!RIOh&VMmHm3L9=%d)T6jMJ4c*ij{>nNF6>viIal-r7NYHX?b{fUa#w$%JW zPaWND;K*t29i#adBPx6<$W7G@X9`AiHM>icdNeACU4sjNC{=X8H7C-;%gS{1 zx1i7vhDj6}OX&{6gEce}ZPiwiINy@lnj{FOs8E2;hBylmqhc<3nk0_9|M`|UVX{Ld z9H5%N5xWr6x6Z*oQf?krBZMuCd9y(nS-OY=hm^uMtn9NZ1;+bu*JmOQZEPRGG z7$Ug@O?Mc>Cib9IkRJIOcEru9{pG2TgkP{jWPD)+M`!o_ZaC2b>?gK7=9|vgX)X=1 ztg=?w-@#`IAFWu6kI3|a9^{ja!(ZRH&lp8KNXtIL@%iJ~|K=C*L3yD8R4EFV*URSe z6u&9@{my<~4@UG$bM9CwY#wy3Tg?GIZ8i@|cl|I0}sD*J^qO2kQvlm_j`J=Uk3|KwcvIb(j&s zD3-%jA)fsV9pS5BzVo3d0}1x) z`%^^(wPydGEJ@BGO9~xN{cUskjQ{Ga)<5{4QW_1LE2|OC)%+TP^@7rfmaaf6=F5Kt zHsZX-=zaXwdun@GHtgr3oruhJZA}C4IAELDnnsw))-=Fm6B2|~BYH1;WIxTH&^h1{gU(0E1M+erJXCEU5w8{y zrGY48QW{YdS6j2_)rM;_%-hERe&{y!mljOEY3)E?=JUTkYNYxvkeCePREM*vy{p@G zK2qx7@C0;R1*LL&_o9;Xu(saQWeK z(u2b4W%$X|o%4y{sdvrwTXa8G=Ni8zfkq9(D22bPDpZsy{i}#P59h9UlhV0ijC_gX(mxf9)=KChZLu zM>c^9tOA~(IMJp0a^lG_;7OM#ew!uY6R)yqWi;a^@U^j>@W-$_5fgA!`aGVt{B%oA(Le>kp!yqSnMwCG& z{=#u<0XRC$7_m8o5Pc{IqhsMx;UNrl)}ySLn1-DJ4Xz@&4N9NI_$1M1bzU(G=L?dL zY%pTqv5<~cxT>Y|_EbkiEG&^1H0j$qt<6n*G(VI+Tpvvt#}XEjd>_U=!9xkkb>?t; z5-&u8He$2*lOP6}7DcATE4tJW`oiHG`F^qF8(o_ERL6#O4Xjr8BxE86?upRuK z^K;SHP*<6M2CEs2L%p(M(Fw;+z_DchYe$ES)KatKW^QGVenTr$uRvdjub|#pcDH%Y zssFp3eSZ4Re)&>oXaAEw({}cK^3vYfYW+R?`u>sLef@-uAK67;siPrR*dLMv(61Ke z!%b%{JLSJRpRX=)=JPRsrp@OKdAZN|th}h@`Aq(DpYtJ|kUT{^t>SyMiO`5v$$C+s z{_{8nS>1)!>ox|bH=8%;>2glyyS(nVTc|2;68S%P+1@`#0Q(D52-z-6hTW3uPx+9_!AFK#0e)me_Reb z(*UPy9orq-l(FZj!mzw7s)908H!|WB4j$&L*GQs zphkNPj0T=q&$Eis@m1VNN5&^6)NnoW;Tc7s)T|{?;F;UpE!T*h!;c*&VJvAcc*Q_J znd~g~YYb7@uSJ*$!fXkF)EHWC^~HDOHo8iS6EmWfY$i>Zq1!SQO7PyE zptVSOU{pfz@M@hYCxz^`_&0w`8|>PY3c^Jmdp z*1ic5UmZhNCE6n&xw&T+cscAuasNT?$6S19uGOfSMta zJ!&yd_Jh;61o_2(L*Me=v9`XYGnU3xiEH~SftIlj;@u`f#ie()zY;Q9i|W7+)d5`f zU;roXilYajI~tKF3rsn6-2<@mY-C(xR9_8(9GJb6D~!7WW6;skTL^K1!6dBT@%Mw> zR>OBPFuuoqsUGZE*EM3tqgpV&8XsjtF3)=})zpmYe**^t z@Y4j6&_#0@Q4(z%(Ze_m?WQU1m$CgakZZOdey+H(!iS7H9SDxfa{esE&j8GSfxe>< z-c!!+fr{7>MLv4d1R{&`UH=RXhj3ScK`B6RkqraF3to+*t(_zx@JO)1)YK0W(s~m=NdE!+AOndW>#a|PD&ahG{2-rFbc!o$ zEtcQh&R9}eHh9%Sil+BszJyVm_q^8{_GK8H8Ssxo9X4oGkmDUei}+pvan1t#1X<(K zH)~_q{@P$BYzO+W+wdfZ^HgvqHr%aQ}31}q8~CEMnqcrJ>|l7o68L$!Y%N=re3TNvNAPa7bQD*ZQ> zz4=VjP~mzx59t3$!8=Eg1=tSz(6t;qrEZTOq`SwKV~>4}Z#Cj@({Sr-kab$l1Ayi) zW@*QiD>&~_zW81QGjQIop*X(Ro%gneC9oxJGoqtq<^wUsskqsw2pN>ODUh5kFEIBA z;<5xJ(8t#!#~49?6}Fvz&F!CX_S)4KrCi&d;R|g451At@QhHuO-L>OAdpng+_Qm~|jg;kPLEBYlG38i*hJLdCX7Y`G6q4Buh- z(UwL)@9f@Rqdy7~f9>fRu}d*7$@n9|HxFih@*j^0E7nr@rLu^k#1tGSV*~E5yj|Wp{xb$6DNB&6JoHo6^EREih zZg4qavj&kx08GE`+MUWv0ENJg)dUcEGto8tm-j(enLdYf^(aMG>FwE^ni@7WeN9u- z^H89v=`_A`sOj@~@+Y#o2NR<~Ob39NF3nFx08c$XO-C;n=!u2xLI-oqaVNLatPU{)~pr#g;pb6e)RNah6?76jSDGa7;`u04~xiJD*VYY4>g%ZssgRxC$r)0Xk|4H2D3F7QZjt z-}kEp_w){mEyR`CAPo=UeRIku;kSJ~fX(-X8f$2X3B#TW*!^bTS z_1%wb`rz?gS2K-uL*I(uN&~p<93ENLC;gD};5YEyy3eH_`vP=lWUk#Op#P5V_4yMQ z%Gxrp*Sxu(HZI494!*|38=k^q53XVJ^M@g(Eu24(VQJL)gCKYzwmVuZ-wRTyEJhOo$7LwHitO?O?g!t>>AA%Y+l zLRNUb5V1c%{2Yl|YPQf=CQuU^*A87t3DXG5ZgSU0$^RdcZ4Rh3(yIbU`h-ly<3sKvA5@Q!|(AYN9C6xFLk%o2*-H9 z62DzlCp0aHgpTpuh=fFHCT=(!tsrpbx2t6rz_>iUiw>p0J7j`~UwD=oh$F>XQ)E;0 zLA4v6$IE}vEpEpim>=x6huwo@Tx#Ddgx7e5h#%I`uWKhA3%?7pmoH#W@T&Md7PH`FXg<2e0k*5V{(YxSxkPL4i=kIL7=O$;MzXZ`ROf*pO%_yhPJb zZqVY&S!7Q83pp*vX*vtY5tFA2ffDeQk1WYg)!6h()4_b16#EI^XK%>>yp}kAMFlOM zY!hmn6{@-oogrrCW9xFPnTP&?H=aJgre9nM&_ALiBaP(HF{iJTeMS64I01^eFbZci zB^-t(Wg=_|kwzeoEw*&}0b4@;H{dD~ne-hAql|Fa+@`dXVw(;myA<}t>wE2pd;@lA zJ?0p%FIv2{RpcA8i60gCvI)Q+gZJ?zi#NB5Z1TXKoCH9< zZ`hM=G>1L#&87jwJarJ8=e=j2NkBZlr@&@J{{n~y65Jlb?XkMvDAv_NGK)O4Xa(qH zH7KJd3?K;D_p%Xkgb6J7TQdad!hUP4{6Gm)ECmuMc^f~{;)f)j_ZM+n`VsL88 zsJ#b|u>A=SRc?eCkI?ZhbTz&D?#Zyd`iwb#U?1iEN>ygeIR^!iU$Uni7vJ32{e!vF zCLl|v?JtI`#dn^B_nPi3kia0ZC%~&z-Q@*K3pg9c-!J|!yA8+Fef_3kYRcE|I(ZKp zoJ^M61G(SD*N@3Ym9Jl^u2YN>C``gDp)gs%_@~qziVt8mVpA-4!UYQ&$wMO&? zkeP+}KO=Rr=ywnihv|>Rg)PnfAK?K}wE=b6##w*20Tf>Hqc{bpNMG|5Rzl zMBnMe=vy<i{v%%5bvv)Hk_kabdU4_IE4l&7@Z*F z+iL!9pW|DAY4F>_Jma%Aph2|`Dx}^<1nNJxnxpM*mWMW~ZccIWNx@_J{Vl_zyek`c zf+_at;k7jUjs$hO{6aI2RIK3~;ugJGuE1syAXt~;mz>K=|N60K;ZkoAFWAlVcWZF0 zFrvNDM6nv|NePovd1@FGIeJ*yjLJuMNcu z(K7b(KxB~Lf=^&3kHWHAio#x7&`yzY&vH*5^+2KxE}q!I6pWczQsbVbb(^~e;%yLU zjIBH$ZKM{9zDkfX+8xbUNSBJqD*7()K_Y7OZ82QKmM4*kQbbDVv2e>#)h}R|Ud!Pw z(f11m<1oMXZW}CUFdkXL0KP|Xbwk+Vuc}<=M4@k1aXq!R?+ikd!Jqvelyawk2Nbh9 z-{HDod^?hoBWcXkK;1X31Ih=$s9J)~_#jHcv(deHlLQJ@7}ay}3VLse7eXk?xo8sS zC8JKwx7xwxB$y!g((oKLqQA%2{^WF2n~Vge8Qko_I2?I!haa7?YS9I_kRl)cWS9$H zYiQJikQ@s})m#+ok;q*;MitGb&Tt-)I8U8nGBs7xJ%8Qj$SuAqAa_Jv41gyJZ~1CW z2Fx2(e}f7!vNcm(f)p>j3dKkn1jmbC7h zsf)uK{fQ3UksH1yh>$(-97dGb5ll?MIoUP{TZ;xcgcU%D_ZQl0UwtmXfD8*mlcBT0 zq^$~edn1?}lbLx1Q+&XYsS}Fhy$8VeE0FBG z&Yy`Sen<}ypW+L~=^C^&7;hJh_XoR9afVsxC9?2C8c79=ii81t zQy>GO;o+Da5{GqOW6z&HaHzsL7c2>HQ-?s5?kymBI@kqWZZ&T`1SlF=md7Xy=Wa_6 zy~C#~yc6xB3|sazi|6!i&EFWaPft}W4>dNLmX87qha`Ld#I^T; z@d$hTP2dQp>7}0b1M%L7A6YM5C`ei_U~lrgVyiDVX%&~b+x$S2cCkDWPrF#1h`Ty+ zA*o(hxM31`Ex%A^!M|$cTz6IlXH2gR=4Ak;rBq>xp7H3J2oh@HW(hg(VA@&_Zps;t zV=q(jp0!wL>RXh#tj_vH^J8jvS`W#mB}CP0!M@#?|2m0avE1BU3o@5sb(asYwG^^g ztyY>!hw&HXXXCjK>SURTzHg25QR52vvH@no6)IH zZeD|%AUcV zph8B11uKo}Pxvkwtjb3^u|0)R%|T+8s)HITNP+VzvA~m zn_zN=>7q{PP~|>52)@{So9?CC>38%O8359o-G)D5qoS8?Fb>sB_K&?U1UgO6u`plR zm$)4$Sg_fMZX_~t>QenP8)BgyvOsgL7HGoDJ~0EJ@SwW+;+ups;91`kp5a?ngSdaF z?=WBZaqDr^u<2Yf*eid|MU2?5Q?-Vn>nZvE_;uJoa)!-B0vOz0^SjJ1i1!Sd9*_%P zk0C&OTtO7?Xl)upnjV>$hmv7F%kb`J?;eW%8?+&q;B`spBl`t>2Mr{$bKC$Ejd+(o zj3RC;Yraqs(wX>`xwzNM@gKq>4#~$M)_FQtaX64d)5m1+ZK&uw?}WdWkFU-VOav$u ztQ18cz(5wv+o`1zAp3Kyf25BW#wUBnQ1NEXz)+wWBOY+|jTk&!@$pDh6X$Frmd$Dx zp_;k3j-CK%_Fon6pu&5%o+@tMMwE||!BR4kttV;0RZY;6;pn{y+Pd6RE&wqa##)7B z$&BciL_oz0;)pS-AH#DXc~K^^6BOfM_akhlUjQi=;Loso`k4U+qlaO?g+orVWC;@M zJM=zcf@n?8&j`a268En#F(9sBF@v~JC6MS-mb?UK?HYf#ola*!q|Y`5bhp6 zCDqHb9(7w0pL7ut@FNRh5CL39ZD(BZgrN9$iO3OT^gwjkn&K5%t@o-qau<~5sZ0wD z;?90@Bk%wzo>8BFRg#2wz=z;`;F&^<80rYUwF5ew`Dm6{?gN5xq4NNA9)gW+H)!^& z0Ft^wGj+Vi_h7--M)f!BX?*7htDdf^W)Z$k=AzwhD^}a>hTp64fTc=oW_JI5(E!7u z8i||(Tso`Xm!AXPNZfS+rRM3B;3P` zbJpFO4yo~C$&4xnf2Ahq{nhMH!%b!;PcP*sS~k9W1Oo|QSzMoWw+!Mp_!s<8L|uEy zRp(g<|HYLXFT}N%@MY|^#Z2Ca1j8qxrtoEcN;7A(*Vixr>lu^>B0u9iptBGBZ>=No zPL-UXN~l-`m2mNqif{=zC+qOb>sS;_c}MLZDy9J$n_sWUpz~bPQAj_a4TO+cu$fmG zYCkmI>mzB^k$-@)QxGjuk`SL8mG_A(*78#2cOyIoZN2J3py)CD2_BSP;G#D%PBDv{ z00UHS=PyR|WU0<@)U6yXbz=TRfiNAPvLG^x{LM%d-i!gzKLlT!;}Lj`QN~j84K|Y7 zxay4H&eg5)V_eM$m-2di&Q3a>^$B)V@>Z}_zvnKi%XBciV;*0{k>i+ZVxyX@$BL46 z`Frg_yv8Cae+ zIx)x{h?+aAvkoaBpCqrGiy~`~AP-?%ML_&XNc}C$!e4<3)-?Ph=egc*Clw1u1q)V` zmms(0J9ynFY6AP*V}e%{7SHFK2_^BYp@KG6FFcApv%lJh=d0)XtZG(#EeqqZI!ak3 zehL^MFPHbS_cNkXnYvI1r&^ov6~{#+=}BbI!?)(T1r3d=yCry^rk}+9HS>Ea*!_ z-a{OI{NQj{QYVDJQ8?U@*aCYlZ{7wnOzLhsTOmLLQ?Z@Lj41s$h*m%Mw-Fh-KuNO_ z0b|Uw(umcdju(;P4{tk^2_nyB8?3JM{m?rYbL5&Ah0>jHuQ0{tXom2<2z>=t%;i>G zF-cBrHwOg^k%ui-^e33O2Fndv5FG^oay-^e_yKyX+~1JcO3FcJc+Vo(TFq+q{f_(O z7AUPMF}#dk?^-cbM59qYqBCqfoi}8FFIA?VC0~s22a0E6@F*#m)9P1S*y{8bZ1y4z zEapkbF(>SWVqb@WePv>QX1}r7R}h2V0mZ(GQ>9Twy}I^>L_9jy&1PR$8Px;HAtXb8 z2K(A!ejsy2YLYYlblAoo13sbaosuBR@jv8RTjZfq@Qzqou*QfERSV{`9+3G1?xV=xc9;&pTesn*K7U1CLtq!> zwf^QcDWU#z=zrQW4nDeA;~=ibwQghE_PVYEpWI<5n?K$=9tZ9!Z$dC}8wDdrHwD-i zH?HBiC~;GcWOSyYFp!MKn;v|NEhjn)a>n0Imy33t?NHk3N;t&7Yps9^!r{lqo8i9$Wo%wNd>2<$uYaho-<6a*>a`D@=vnvJ0EGuO z1{soLLCLS6O+ITin0h7RU5(4dWFJWRsZGCI1OQv#HI)=r%j!6zGh(l^+9guzpsgXE zBNm5Z*1p_Sen@oL{O*{HM0Rk^n2ZszcaulA3Q3-V$mYy=mv``r>8lg{K47jC)7Z1K zG128Ulp=liC#j&RD$F1O@%fK_|rsojr0^ck>{Y) zuRwukJo6AfpUA#mj|b#GhfdFmJ}0t=qkIJLuBr}WlFy6u=SS;c;~9ORiK`#LF+)Eb znajWU&(;`Ays@J-mKbEl8!P>>9g*wC8xN2;WEE_j$ey%TW;#(iz5)*%cb254(W-Mu z#^1b$a!EC%qcgP>11ANF#3XmiP=%S37tO=S%(H)J&}w<8Ww`L!;~4BQW@*hL#$cNh zeuC8)i}R?29FD}8(7>*?OkQw;4eZc!)jkn>chM-C=Ci^qMiU=@7rS1~hkvIE4_ z;3{yA-}@P7z(WbqHOfsMZUjRCB1tG!gn11?`;y?PrE^;p&Z)_JtLB9B(;RabsM7=kqkt=Ra7F2rsVOdc)v6=;*-`GSG3 zPR&;QW`)YH(1u{=_%4QSagA0Xgf=sOw8R9!8^<$tPi{K;wJ|qcVi4%^&$tuCN5(1o zC?Lq>%-4Y9HQe!0$A=@g2l7F0A%SzL9YR>0lddCAO6UbcVEXM-E99(%r%az=xa!wUl+W) z0e;ai5X?r^Up2fZyu*WL5R+qQfE?w#z0{qY%&fbvVe30-4aXNQDQ9{VPx5Lbb|nfd zCdiR>N@nSG&60JsnXQ#r+Qq!ZYLc9d;K&+Bj?B!km(i$3{0`)%l8Q{V#5v`&((Hi# z_(#Yj+!hfp6+hynmOec3^1N0VH;?U=Q2CR$GGLkI^NJi$`6MoOyb_#T!0dd;pzYMG9q9J%C!EQpF3Wqrw7eQ{vf&;~fcB4@D{K zOU2j+UrlX8D^(d8;Jc}^F_il783<>o&_G=6drUs9Xq(NKA0mmq;!Wu)`XMR_K^%gD zmI&gyw@DBu`kZj}G=kXWRe3!u&*t(y^kb1PBR`{f;m$_5^44Z#<_E`r&J zz2rqfQT##ycLE1%nep2 zL5mWw8bW`+-YWDL@o=mtst*w1t>&?h2@$UUmPA;teTCFZnu(!w{)B(E7`U2h9T?Os zikHMUq5EoWlqp44sQBMvGdUi;n5{155g^fLS{bsmyc5l)f%x0Nij(s#rg8!v2)-&@ zU@9lJ?&5=vKkAugDPam8H_pb0QvYSALQv^yLf7()Y3%J0{;0n*Pdg864-TTS*qnA! z1i%@RpPicqs5j>cwx^6G`0JJ7jTm)@IMREHs)+W^2_naZs?D{9(st-E=p%<^AbTn9 zZ1V9MRmeur@0;HT;0~a>MR&@igPxUMgLP?DVSqW!0p=z@y$3cJab~1<_y<7rdhfHj z0j;8th7@z?(`2`>>K^z({?-(`1$B`qWeT!5+w{QU6Ih1p|KdLx(cjAZfjPzT_jP1b zr~sME5P6;$g3v2u#jVCx<&wZ()QLPdV$blqCbBQ=i95{cGhIK636!1V^=5C}Nk=yc zW-3FxpnE?oNN<1Cp?}6)T&RM@lY2`pLRoR-=gbi7o`?K0Bzbgnkkov*td|8$UBpf9@bM()GAP*E#b#|xj~NcxkJ5>Lxt|a30Hd* z1-xcf!qqNkcU6!cC~-q@Kop1!`+I5WGxLWp;GG7&T=UVS--t`J0}jU9V<^^z&UoM| z3_Ulr&(Ea(%pJmJ5Z8hI;!e!^P_|Dc=8l0@a{|yC$+*c-JfTpZIwqH*_!#kMOa|>WM-ugbwm^ojr{?FUd!e-~q|F zqmSW{Dkou{#0f=HB2Yqu?wU^cfD(0Y-`K2#lzbxuNiB*Sk)^5Rd9mJCL0QX z!Pslg+8}a%lpgp($n<6;N9=A!N%pJxUgvg+7V~RcuT8Eubb zB1Tf1*Tx>=!xy$Ea^#@5M(buw#Cf;|52o=%bNZ>cT_$U!)tnw-idO#OkOAgDk=#IV zwNtM>8HFT&Gq_L`P

v_ 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 t~U%+~L` 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%0AH<|3R#iz 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 ?6b2@Sq9{)w$|D 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

_^7#q_$ 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%0DePhGB}MzZ2!1i{Sm!K(2dv)3$B* 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 z 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

@=5r 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

P^ldr@XEjTk zCpzWD)6LzJ^iad{`st3jd{KjMs!n~pfzHA*T|>Hw(92(SbDVCCk4=!X$cZAFJLc(I zZ*7dKC+4SHGU-tTI$Oyl4l($hqA2D2Sc zSLolhQ{ze+^oo-~G>vcV4!#YRbsU(t^oay!OWEWV$z$_7e?>1m5&yKV`}^ zlLF-Q8CGKA@aPAnB@^R_Bya@<{3=UY{qy?w^3Pt8`_o;YT03LEms<0VUp(UfCJ(>w zzn|G>QR8)A`LO<)@JIJHyfO5&bAHfpSKHs3Pssm!_}a57M$G?mW9~O@c652e@e(KTl8FhBB#0LZ#49Yc`sa<$%TJs*sl27WlTJBJf`_S-u%pLZ zNHVd`F{gLv(LcYrRTn)C@%iiNaU(i)vMg3t7c~z{EX(J<Sgtf?^%F4WNTPB9_dsb|DjoA{@qFw0^!TK~#Vo^qV4pIW2EHR`D~S{cG7CFb0z zGBT8;gdV!1=X^5iE9t^T>~s`X{xbNfZpGt)WY!RCj{4=Iappu$rCzqS2jp0%% z^MY>({#Ec}K`pn{+R1$+Q`5G4nl^EUT|F{xulSqt=|2COYTU8Uq`5b;X(pbjGiQ-o z+u|*BO>d2}wz{b)pDt21(*w&+yn5zmRWtt7!~;WeWgIR8bbrTOdPBfmx>SW{(Lv$H zYeUdYZUz??RD^JU9+Y_Uo^G@TX>Pay!8Zqkq8ogSif%rsWOKeJ2s*hv2xN%vRCz=Cfmqj`(pB*u}+PzBRTzh2PRJQmIkEX{0QA;aYofVxe z9duQ?ww)eE?TD@BCkyHEHdg;+eO`J>@OzCQIn)FeVYrLVerITJPV7z!!IZh=%s7J@; zbabZmLAUOh+g9jafy50LQog57U1g}Jwoi^Y>#6RO%%6(sT#~ozs`1eg@7y_m=;a68zkJuPd~jOp^lR(hy87b!E2eCC zVZ=3CUtDwOTTlIN!*h>cdQ92vL+@F8^O?I&*!suKhy3Ki`jJ0AwP4X&%3 zwZ}()-+jpW5Bi&Der{yE?Dc{rPqnRR_|9)%-{pk4Pv*?~_c^;izU;PP*M4;UZPS}B zyQT2yhwge|&WCq@|Fx!Pr*xk3O5iuUKmFq3S--vE`+3ie&Uap(zi$3B5AGX%>?gN< z@T0>=-GA$X%P+q3H+x)r&(V$-{bGUeD0=LS4h5X%+Jxq2 zCZTBsg-6t=s8#SWDq>O8pompKf+AK#jm@n>l?W)Ps8LZ0A_hgz|GU=S`^=e1LJ@ub z&*yzVZ=mx#`+mQzz4lsf>HpzR7oXg}ch?;Q5B=aZ=iYwN)kofubIv8-y6elW-`E{_ z=inc|e*3pSG4GdOKll?5e6{=RbwB?7SGGRzsaK!!$RY1M?$P8iN7Vo7nsXYiUwv8I zkpmkq+kV9OQBQozKm58yw|R5FdgCjuEV}OK{SSOL>pjiS9Q68s-gj8br5o!0I=s2@ zs<)om`r6+fwx#{@4|Hr{dCA(!2L$rt>G?pr>-_s;j<_|qjP-uCm0ciq?U z$y1)GfAWUUUe+`By0$sD9Cr8(=bd@fAKtb36AcJS#$e4AAZB=ara(*@hNvd z_lvE&I<~I6EBiMav-&zOJKEoK&S6cL9C6Sq{TmxU)N)(h)Pw$(+T!un<9dHNcjuoT zIP#(DcOFuH-|YvVU3<#rFZ}hmO?%g`YbkwXYy0Z+FZ@4Lr8cId_rJT+&j=bbdaAX2~V znl+!R`2MEfc4l3@_`~PlwB@VUe&@?S8vDglPcJ`a{+#5B%9HP`yuRSCT|cQi`?~CR zzU}snpZ(T@H+8pME|5ms`L0 zfge|$*>%b*k6U)wLzh3-^wA6NSbOnZ+rRMIkLAASvA_QFx1W0Go*&#_^6U7!o4?Sz zCaX4kPV|krBR~A(Pe1s(uRLG!-j z_}hQK@ekWR8Grvd-+bMdKHvJDE1oF(-X$k5Ie68kdHE;Y_QwzXj22d12X4+kSY|^QZrA z=;Ob8@B8ll(k(^t#*)K&7d7wB{zcY*<$gALPPZ&{&DmlTYt8G^o!qm|Cc8}^}`RGa>XlJ8!jm>`^>6$E_wWf z@63C{Q>*<;$FF$olVAD9w}1MfsZYPA{mi%5ly|@7x}2}A{?SqUU!ShrH>}%NwfZ(~ zZf;3ad%LxF+xFC^`Lxqz{dlpze_<_Ljo<^RentqSHVkA3w!)N6(& z<||bd^Qos@xdctj;=yM5N~4bX$}3UGJS~a;O^eo+I;1gdi@>HWbmKsfgQtfBp|dPZ zhQAT}ByypWoKHBW)rw>w4r;PhhVCpvOXN%f2Q3sED06y@kzKTirSY~li-a_1lyj6E zj*t){jNQUN3cXIG1Hl5z69GNP%pB?RoE16Cm)rRC83A!^Z)o8uf@8F6X-Dz}9Prx> zdC(p_3lJ0$q)%yE5w(Np6U|o>L6jID_Th0(P_8sbXm95<>3Do?KslqC5(Y)ej4|W| zQk%=8WSBaq`XM_ZnykCAs)^dy>t_bFm*bYO$1~-F6xQXbe2}Szp03y()R{voTSiBuJjy7CA$@ zJK^;~TDq-~PoQB+YSykr%3?wvgKbQ3P$i6E#zR0q2uT z9oK<0iu6dYK%z$~4e{I4&I62wgk}fsd4?1(AsQ0A9%(fVT@-XRV=i<<%PZ9P8^Hh~ za~+Iop*y6K&|5Bj)d1hJ9gCgYw9^LhhW*I=ID5RVkm(`PfH9h%W4)~}m-~$2Onfu>3)QTf%WS&L zcb&C*ZON>b@@6`kWG^#+vsP59R|a(Cv?<8eh?}0$9usVD?CQ|O_z4j+=o6{O8D_F} zzNX{AJ?V6fyY4pT!|pQZ`Mfvj7&#O^5m} zgNA2##+^%RPg{G~rhs=jr7EZ-q=;B zq7Hd$rUKoPQaJ@sF+G^YW2cla_7*1dl%5$`*s_FGQ_91qcSUDjO|o$<_uI%HEUGT@ zLYJbQ+jzfG+s$2Qp?e8eB%1(4XXR<4UU7Rv5z>Nr)W&Sr3PBDEXQ51qRgg59Y{WyF zIT|}0Tr0IU`rw?4WwvT5~juUCA8NzEV%!I#@jVlj%-+^^V|% z{OVv$uBl$TG?$JnQpyrenxNOjtlh(wQG$vfi&&*>73>S*lpTA7>il@RC&U+vV1%lW zZK=qBEG^>E{{_hHNCihyNEzHC(;eJi1X&T4A^+9+>k{irtJddN7nX#q5gA>^d-&>N zWDbj*WRVq>N`$!b*CUjs8nIS9PhT5yswrnn#3P;}>l|`Y+0N6gd1NgDEGjc1LJ&)S z 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

QAqNas{K-E;)-F+3pO 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

iLR?7f- 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 UkE{vnZXHO-rf{vzKJN-gXv;>7Pf- z?tt_XzGz`YqiGd=4HSSQ)YjLM?0NS#$Sv~@-8Ir#H|%+FvwOCuV8Yh4;drIK3Jhu< z*1=i`a}k1vN_zLU2EEx<`$evLQXRRPb~C!N22zfCpX^h9G1}gzd<&d?AM1oUI+Qbj zs{YfCPrRbgD%X<>G{(1<((t@PM0qCX*hFa)fU?e~g5?H|hasylMx zH_Y@#Zb;Pcy;05c;Hk34dd8iN8U8Vx=OA0?4E5}jGx2Pm`K%6}DLwW7> zfhgfqB>q`*JN7r}n+kp1j^C!--=)v)>d5_zrP`y&{R<$hl#r-N?pJXNOZK&utXH`S zX_7lKG?W3!WJ#EZ5qC%lQ#~ZMIR;7}JkXXhF8RulGQY_bHs@!cb;4p>{^Qqi%l|uA zOY0kIkpJ(9{Ffg1@0A{nMU7G2U_yGeJq>^DPnC^3LVKkAf{WAi*KXG@hQm*GHBGs7 z)b)TtH^#;Ir$|;#dWVgVDNE&iPPDwAgkVH-RkP)NhvSp?yY%8MQSzR-gcz@)^xv}_ zIUVkgmb+0q<@7&Xz(4y=E#O*c4vLRj#NU5Ab`i&Y41yqfkHL5)lTH!O?O+UjJC*Q_ zvRKHvXDT|>aQ?(oAgl40b!7Z-YaP*oE75R_Md}%9Eos6jCq9L@<%KPt5${P)08khH zj$z|I78jM#TvQ%+>c#twr>phmS~h8fxqjjK?FQDH`XOt*kpyTB@mi*!$Ty=BYk=7= ztT!|7R3xdg-i$y??EawKx{#=9z1c-i$zqmapHI@C?Z*yDWo5FTX$ezfK0y7@;@JIL zGhU>a2jP*~HaEN;4%tLKbod~h!SL5nr-<}IlZIj?$-Yl~kfBXT@tsnJ#Hz>*C|Zmb zd_oW}27e-vC7eZ9V>A6kEjWo2JW@Xud+5lXQW}>R9+aLN1{{-v)t3~NNA>AuQTZri zb6pN-W#_u=!Jjd?F0`P$ILWe?110qXBmW%f zZ;0Ds{J$eyP1U;qGT-&bvLXblG4Fy}bPDmz%)u}M4APy|UhR#X%)eJwt_1@!g*86G z6)5H>ui2j^9;3Q1B9{lD7xPx1TJDvl(K??wGwWU7v7o4DO+mDj^8?`D=4@!Y^K z=P*zw>vkNCD-*5InXlITBSE6(pZmc7yZLu|Y82nZvf}3EHY={<&lpxLm6!iF=3nLm zAQtD}=6yn@e{x^JnNAlHt99Y;X6&Ceo4CG3&8N8YqUaKJUjcnD#p;3*TYhG%hG{`b z275g6^Ce;CYVvbB9{)r6+3(z_cE*n1S<=7mI(DH?;m?@yi?cdko|%bSDcimB*OG(E z9}jujGgh7s`VZu3r14cR4RA%=FV7s{>JeI7*rb;4D%KPDIWFAzLcH=0hP3MRB`?y@ zzrd`BG(H_q5t#X1#hF;2C9U#p_?T&xJ4x7z0EQ&?e&p?LJ{{@FY=x5 zsv$-4eK|n&y;L()zJFJ6{F@{01S!eaRNBQ{*?VVL_`G36PZ#{}@sRal*+_8id$E(F zyKk2AwBSV0RBFA}tTlcGYmLsh%|(Psp^v;q`f+cW1p07YjUD4l&bR02h5Q*a#>w*1 zVQ}1QjiYq>l)sd?35~%}R($V>C-{edNl4pMIhDC#Adlfu%H*~`_L9*{>PG?hoVTH0 zOAai`(|~(Hx1NAYo}TVf@Pyd+2)2oMvKv7v-q#CKvE?o1ofJ}HQSrSW-0CvQn$@-P zi47i?Xv}{$&hq>6HUzmIX&OE@Hh1FnNSU$wH73bZVtk>VU zUk!EXZ>(2F>C0sJ2z;3gE!6kaOJHwh7g4P<40D3B2$h%V=~FAxf^aOgyTfBm%XTp`?(-?9i38~US#=CZbcI-;oZ!ZY$PADg2U>#cQ~mJ`Cc zE%nXud%w#b>+fBII?&)HC%%8HOK)G-Z14)-chP|b<@)R6|E@&0-?lpd2Tp?Se=4dA zNmds`YgE~|tZHdgCK_j9#Pw336)7TSSZS0J^oj-bT@nMfLT~%xe$ZuCc$waGVSV;5 z!8`aMZbRA-J`7dbvd7%hx<>IwR-dfi-NIk+SbbLbvtB*Ihl}qXc?Uvp)^|e`9+*#m z?F>yg?^ci;&IxbWSoBP9DC1$HTX^e|nd7)_Zs}g><3)BXO@HuKX!{J|sZA1l3%f&; zMU34kG5OrsxUgazWJwSS%+O8V!I!p2&v_Hv&&dnY(gBPMJ;ZLTI2rPY1kH8k5vO7T zT(l~X6Iz=Vx?DPGD*M(vtJJq8xj9(I)ynuZ?a56QA94P93m;0!AKkICo)%)hPH*5> zey2oI&0u;JFG9`gJj(W=P=;0WllJ(e4L-Tj z{$xm?Q+N4B4i_^uc0i9e#;^bd#8td%{;E~6R)6_TIx;g|&}WY@UofIPJ8o{F55knm z3a{5YWtg*O8BSB33OO}; zvLMxcp5g#(G+81IlQ)J3{MSHESeBk1Ip40 z4~8Q_y?#NT`UZ)SkM10u9+g0#$r1ib_vK=k>E=6;%!tKcS&DNpB;%t&lqDpZUN7B| zGrU-W$X_|M(t=?;B)xXo^qQTg=w)q?*z8zU+Q54E4KRK8ydOz?_h~zo_r5AIVyPI` z{dYKYwE3}`K>G;nT3PX)wI1jXd8OliT-)incM-T>r&iDyJ|?l06#A1`6wUd!)9|4H zz1{1I--O$sQRJAyE6$g!FF?n`%djB(Mnh6g7)v5S-a`?*aoLhg(y*+9!*z>DE;GsB zuZy^DwFC#QsKQ5DP%KX{k&0)@9|51mlbR0M?J750@cCAik?5AgTb1AbfLZ@J#y z9~VT!je27BBV6fZgnSx4GXjX&I|ACR_Jr% z$O;@|mv&AZhJnb(SCD_aVy{PnHV+#S4e|jOP7T_c{ehTjN#e#-vJj19PZE#j#|I89)Ga&ZY+ zEO3^vn6EaJd2vRV{LA~c?Ad{mwOu7>Js=$UpiaPFEX<_+S9eq5LZlFc-;$5S|q9lJ+)G))so+w zO)2h=4;G$4&Iy0@$1HUou=thHceoaEAk@PUkNzc)p6ySNFwyy^x-$5`&&6>wCO^mG2Yqovx|( zH{iYAd6w)HQYDVM3Q!C3+!!}2pQt=R)Z~%Tlm@kYo@gqQd?7|fN8F>P3;;L8`IeQBwhxYrW=na6;y707ztpLm+;SS?Ifs% z`fI~@PBbgL0-pi)CGXDC62XOmgKlm7LF|TwH&v#7mpNz%XavhsYhEg=B(NJ_zBw5W zdb)qQD;W$Rcl4bP8pUB|uYRBxm-pZyz?k!!@aPk5BJ+xCp%na!CDyF}o6lge zel2(oUgMKh6cuR81)uHKE+`RJ1ZAYq*{aYIqp!oC;L|pxnc5TOieEXAc;r#_Ukk-^ zTQ9)#OIiK1Zp<2xHPA@IZhKK$r3h<$yfRaJwj2q-_f?2Is1%~B=g+9;xFOD!#(ID{ zwY*|F>0!Z7lvhl$VYFjvx$z(xNB_Wt=P>y`n!6u{8>9~#W$EHL5px&jQ*66Xdlw=at~hJm70M5{5qqyY(+HSqgE2afV_tZV#HT1kF+^!qRXZUBJnAlM zwwndQV7&l%qG@QMR{RNVqg(h8u%K&%zd`Cq7Mu^&IBh4K2`737@6&7H3?u5OR(kbz zbz>TfM2wX>Lr{mm>>NDCUTklH817NE&cYN-Z1C~z$u46u_Q{+fy$vw{c!k+$495#S z=Q2^O)FT`TM1lHCc*a>GGenJK-%=w7=q%iiLRolYRAO9&huLX+jPod0D`xIzP5Q;S zbV$Z%xmj$8#p0ApAG8m&Firt>TBY$GKF)87 z|AalK%AcHsWktr~EivcwM8Af_Mu>alia{c67P9S;eA#`WNR#u5aPh3hTeRJGgPgfH zMe9Hjt$MF}C{(GWnfOSdofpYWGJ}phAH2*XFW$&iNsH2xu%P_t=ZP2JIaO^A(98Y% z8c0`U#)dXee`CuyJnWoE1EMqN$!P~#fp77czZIsnp1~c;^=CyT))+6AE;wZtdKz+= z+)qc98?|0}fsfoM31}8RoP-a#hT*#cd}nZNj$VI`VEn>aME!%tUSu2+j;VF$Tt%Gp zyCpM0BQ#r|1Wu~ZV%EFPa60~^4||D1B{4n~BEvmzNV02qLx2t5$1h6Y5od`z*p~4A zY;-*F24gxTp3+A^3+HXK-CnH~He`v??~yn%iCXXVgIyIhBCC^K6_4njJ{P-REd3Mb z*EdJ(&(OP^{xDlgwf?XREm1xtAC-|mw6P7|yOkYjz8alM-usoTqicZo&9G!F8Mk({ zT!zx*XboC@a{eUs`35Y%{OtP?L%<6CDS=OlPt`j>qZi`gA3S8#2`5IIWut2OE)-X_ zmxpXf4$}_M|F{ZC*f(b=3$CC3=d-jK_}_w=@N8FnVXix*V+rIAW^dy8nlz%pQx z=2qi-__#bXf%DtiFn~jz%|hd`?NC&lgx~t`O^_1Uj9AB~h8HHbRUgU+KfBLIL1?k$ zBEeGV&R(1B@?ESdOEfEsi>eG{%*2^b7vzb|JuJ$KU!*=Y>vWf@73G50{D{R|o@9Iq z8#sD?nDxI>7+rr)_XmTW`it<6oh`s$tFy;dfBrYp>zMlUs@9Ji5=1)U=2@Y{nNcnA z;eK(FyP?^F%1K9Qfs(6oTqnG*Mtb~)v+@`Pvpw^K9v@yAOApA`!X_QP;V;n~s6tWt zDGjQOEf1Vh(O%|npghi-fmMPt6#=JlxD6aSPv^VR1P zQrNlDo3U@i4%yL2TdQA(HOQL*Z@w0y+lX^;_NSPGwRmXN-H2TU!`-VWP#+-2;BbWF zBx4`Tbw4K2#JB{d2EVt+_~ z=ur_hB67-%ao`!@g;uTcQ>ivizg6W4JZL!Ze=H2)YfqCx5BBFevI1wZ0BzBvE6 zK_V5G;dkp-<#*5JC=s%xjXwNh3LnTTm<4$KxV-N51BDMH5+&)Ie{0x8q2SD~}Q(62rZE8vSQlyu`0HF@hs(fCFe1 zY?YqwMV|rZUf{@hV#(b<8*BBGF!uCHOlCxG*p<=#!J=<^qXd$6>XEzspxq z>!U`XO*|b7s}^F;Sv{ehFsBxD14`Re@s^b1c=ixKvP=Kt0aZo-WsrE<#DiGMw9sFo zuASur5$-ZZo=_n!du=~u7@RDNjr*Yh$7p~WBT2I*GVD$~=A7v-ua7uJMKSVgi@83W zcDEXz*~_f)=|w>hx(5F$`SoM#=<(@@=a66YcSXrBYrWZ}m&0qtruRX4s!J0uk^)<) z0x83uh$=B=jAqF?XX!x@=L^4x9;dTWgek}JJE2jyzhWlV!Iss{xT9Z7|JZ>F$CN1|tQ9aWeI@DK|pRGa2d zc}!cZQL27@C`v(UM00l8s9b*zmj1@YYQ8MR(iJRF`Y4W(P$M4=ki&g9{-QA2A~h{p z+)ruqjnY3hi2mVw4~2Dn$Imt$EW(|m{dOFQfTP*dJw}u_WFmj z0UYn!N`-&6Y7@DquZ6zAzlwieX=(8f=`){tMv2jfLs@P8Gs`+tl|}m(pGd#Dt=Kdb#!Q`9cj;KF7jg) zeYhXEz|w~|_k^zN#RFR(M5C+d!>=ucBj!bW{G#<;Yx_TEsN%=3mr(vFefM@@puzZ8 zPii5|h+E)<5%NJBI@{1*DD3vWi=&s_Ao}lZs>}e&RQfOPuh&BD@vqbY{kOT4>wk}? zk#J+8(NwC)q@2o{Zt3kg5L^|7N}q@SKVPED-l!nAjJ=pR#?pLvLj(~jGwHDCF+C(Oy(?Y-DUtl%pD)X*)gNx;F zn+8vOlt)%V@8A=^HxALD(CW4yoM81Gvi<9(}Ryl>6-7Hz%Lw0ZHh7PZ9CBG#e}2I@kL3(Q6Q173LW z#Jw9AwZ=;hDCWo-x{Ojrv@2c<)`z2enGqKUT*sIlV z-Xa^^O54Z-!=}K?l^eGL5h#{3%*S}YWpUcP+SU{QF7^dE3ASKgM%TW?M8%g$-i+_m zzN$7a+xZ%fG)VCk_}+Qw|1~!Q>C?W0B*+f!!MWi`vN4jX$tK@@oTGu(+W;vR*)Gn+ekCO{fAbqp1Vz#3` zzisPco?AyRId-~Kkdqeb z<5sdpWK{)rO$@5Sjy|EyJ0<@>Yc2RE%=C~M#PZM`KfH^i>y?$4qY>KVB^WqWZ+K&F;kZig z-i>*M@e@G5ycWoF>jeo`=N7hGKqzAiN-t%gml_<&ATh5*TawRq!8^tNhfBSIvba*? z?6{R{_W6HD3fIpMg3^=Be6B7Md$O0c7W~b1##>$@f3$9h^48nuW|U}?PGUPTS`)H> zhqa-^+u{J&yTQ=yvVJAc?TU#|cm?{q1(K~4ty=1|3NAk~2R>VCw#*yY1x{Ux|EaND z0L{AZQh#w5EY5v~Asj4@tqAu|O;UOZ^0&SOePtz`%bWD4DAl?GgY2HAb}7NRMjerY z;6pagSi&xf$({lIamR8ov%c#^I{T=jVJ9EQpNXB!1NOtA6*pHvdL$0C%!TFS1m}Sv3 zH)fP6w5roHmq$1=9CBh=?^l`^#_7ecvvGiNFW9Hj8@D=Fc&5BqW}C@4BO0JMZHWko ztaJ7+U_2LEx2j8v)o~@~?8^?V!XT}rd(7uw00wZa+lpf{p?&@wZ(x6IE!Z9n$_s-) zyW&Rn1ZPy7;m892dC`N-XlCJ(Xbu^UZNXh7;@@7k6--EuM1|-;-<4W0AN6%E?6iQo zqn>_0*yDTT$CY`#D~_GUa=I)RL=Anyajb)mDf(IU@;w<%3tf*Thp$RHyDXKsZx zz64i*C71^hs&N@j_ahnot;v-x^5NFd!YtbZC z?|%1wWP^e9Y=i>NpQyfVl3Mugdh`O1T93n{iqoaVI4FRTE?J18Tp7Ey;BqOm`AV8L zW^LPsUuf;-uHq&N-(lh`U2Scm(3Jr$YL2G$!pq*=XkI<)75_`YRa$5m3e?+#C3FWP zuLZe3E+IYoK5Q3ZZX)_x9S`V&BRGw^gnujDcXqhEOWNKR<=(-S`dSMM;W($FFsK`F z7W73jS?$rY0b_+mhy~Vd1U5wnCrfnAB|tz3ZC>~fF7rQQr7s4lT>5jn;#K?)D-T@^ zEF9QJHWrnjx9V9FC^cAQ5JM09#5xFH!ElLFi@<3qH$d|n-G;uxOrC}3(ID;tHW7U$ zFT7O?iO-jg3{C~#L$|s846$Lz56@?d z;UbB$@!gE-4bFlhEb@(vAl^Z};cGn7$B$-=(T{1HSfX5?RdxR02tW^S!7p<`peUm^m^ud!Frp!>mq-Z; z0K0H?ISFC|NzPHbMZ2!zoWhkApmFDKO*=iIq9NoMro-Sw(DxQ>b|PfBZCc5aelrl! zf*lxRx{B3ZLncFpo3;|(A#tSzl`3H=Pi9bm-i3%UMi7&~YXKc&)cQbY86y!}i48h^ zz!}_gh1LQW5Mhj0Y7fh@?&%D4ZSqdG-Sa7lSa`qG=YHmHy7ZJEsGoa1O2b^yg6l*> zq3qKo8H)S47jJ z)%!w^a;*h|u1Sw!V@!R+{lZ=1;zUXc5=GpcPvH@}`Uw7_1Mmb{9X4Yx(C?9nX2Q*U zROr&X!U+S^_M6^dwI^XS+c=Xv*P|&XD&2q0!OvK%lswlTTA{hZ<>3`W3Vy2mZAifv zu3AGf_95E_27`&tVSMGK;>Z>9?VwbU6q1CCv0l4=BDjS|*L*M0`by7j@m+4AAMsUx z-=aw)pK?3LLq4A^y7 zeYL+*e+oVb6<&k%*ZSAX*~YAJS!^R^|5=+~sqe*mN!_jQ{7G|VY4iU^&pG^?@j^8_ zD=@}&uAjT_KGMDCZ=ikqd$S;K0vU?$&b`wl|EmI%(@w=BlK%w!H90KC%bb_-qYqZc zE`|>$=r_%$F9*NGcH)y6^*|#&G2VwXv&MPh9cD$%?TX&SBUbc0{-V7YwCdx0U!rl3 zl#&mMy4Y!!gb{vVd7`0N#`rxeQ90ML+pbmm!rs|J zxeeOHo5^w^=IKPApfj{TS){NzBshJ^{kkgg23qiKDQ}m4npxg#RUY?TFp?9iIJgt^ zEhjmp0;eaU+U9^no3uzf)=y0s{oXjl?Dqz{-=EOm{ zmU_eSbnT@=jdNdWweDuSbr+hgONnjWAggu8ozgpzJHl1h*q{D+tLoT~_#4$RhL8wX z8Exg$Owh%1(|X8>nUoVb5Fi|6Tqec{A)y<&bt-sAG0Jqa+`_1GEn1lYj>eaeB}E`X z@|;UC$xcV#X5a@qy(X&Djo9fcSqy9FX4i0uSwqXH8bImpcFU0?3i5*E@!L9cDW$?> zjf(!_P*E+^SYS~Bri{pLZT$J>h-hpWrq53-3a)Zvv;1Ixl|0*wBlK)n2#ORmDQ>_R zubmaW-x1yWK4e2K*J$VUfDoBeS`pXXRGmFQB{g zQL;917&$U@H~vKvlKW%I%c+3qbp~XH49S`+gMbMZq*cR9P1S#Y+bRzmx}hhC$6GNJ|66o~oxjS)V_e28;%&3}2JZ8|ci8UpwP=+3 zKCtgx|7qxCnYa3P%x4EP$|Nh$z=E!%r)u?ele*=ZzukDzO(St+~yq%UeH`#uP#a&eP}JGa%}>5cNr%Rd7Tq1bf& z1;E7`M>O0yQ-6XGJxGAOdWg8;&fQV>C05NGMHfG&tOWh5UYN{Lkf>dB3ef5qk z8!aa^NN=Ia9;%nrljRXAF?|M6=kCqyTC|gu+}nWz@gn!;q4D~H)1jl4;g_Y)>1EdY z-F!cd?`uKW*zadq@2|#FeI(xxQ14aTq`TKZA+QxM-why%dl?@)>#uDxLR2JyBP_X$ z89;qBQ`G{N0pu?yl2IRZMe~>BHwYi3a}8DBS8bPiXj+NZ0>Po)$avcB{GGxBGKu`v zmj7h(A8a@<9+Phpd`NJHbQ?%0A(}W0CHQ``7Ph_B>srJEviiu6ux-UdyHxBC&V~&R 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∨>j98tCGTgaRxyM$LPrDy4~26o&o_3bT2=J0nT{ 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

v_ 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 t~U%+~L` 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%0AH<|3R#iz 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 ?6b2@Sq9{)w$|D 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

_^7#q_$ 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%0DePhGB}MzZ2!1i{Sm!K(2dv)3$B* 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 z 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

@=5r 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

P^ldr@XEjTk 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 z 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

QAqNas{K-E;)-F+3pO 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 vC&8r+k8_B;mJ)r0|G$f0tUvzq{6;`_ is a new Python command line application framework that is in development. The current release is a stable, testing release. - -Updates --------- - -Changes, updates, and brief tutorials are available on the `developer log `_. - -QuickStart Guide ------------------- - -The quickstart guide is available at `http://docs.naked-py.com/quickstart.html `_. It demonstrates how the available tools can be incorporated into your development workflow, spanning the entire period from an empty project directory to your first PyPI version release. - -Documentation --------------- - -Documentation is in development at `http://docs.naked-py.com/ `_ - -Issue Reporting ----------------- - -Issue reporting is available on the `GitHub repository `_ - -Contribute ------------ - -I would greatly appreciate feedback from anyone who is testing the framework. Feel free to contact me on Twitter (@csimpkins) if you have questions, comments, or problems. Please use the issue reporting link above for bug reports. - -Example Application -------------------- - -`Status `_ was built from the ground up with the Naked Framework. If you'd like to check out the source, it is available on `GitHub `_ - - diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/METADATA b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/METADATA deleted file mode 100644 index 0662854..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/METADATA +++ /dev/null @@ -1,61 +0,0 @@ -Metadata-Version: 2.0 -Name: Naked -Version: 0.1.31 -Summary: A command line application framework -Home-page: http://naked-py.com -Author: Christopher Simpkins -Author-email: chris@zerolabs.net -License: MIT -Keywords: python,command line,system,application,framework,CLI -Platform: any -Classifier: Intended Audience :: Developers -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Dist: Naked -Requires-Dist: requests -Requires-Dist: pyyaml - -About ------- - -`Naked `_ is a new Python command line application framework that is in development. The current release is a stable, testing release. - -Updates --------- - -Changes, updates, and brief tutorials are available on the `developer log `_. - -QuickStart Guide ------------------- - -The quickstart guide is available at `http://docs.naked-py.com/quickstart.html `_. It demonstrates how the available tools can be incorporated into your development workflow, spanning the entire period from an empty project directory to your first PyPI version release. - -Documentation --------------- - -Documentation is in development at `http://docs.naked-py.com/ `_ - -Issue Reporting ----------------- - -Issue reporting is available on the `GitHub repository `_ - -Contribute ------------ - -I would greatly appreciate feedback from anyone who is testing the framework. Feel free to contact me on Twitter (@csimpkins) if you have questions, comments, or problems. Please use the issue reporting link above for bug reports. - -Example Application -------------------- - -`Status `_ was built from the ground up with the Naked Framework. If you'd like to check out the source, it is available on `GitHub `_ - - diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/RECORD b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/RECORD deleted file mode 100644 index f0d9223..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/RECORD +++ /dev/null @@ -1,118 +0,0 @@ -Naked/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Naked/app.py,sha256=ifeYxmcVb3aolzqZNzeQGF6rnTuJatyM3swhf68G5cc,11880 -Naked/commandline.py,sha256=OJ-ktVQWZeKMTbC1r446M0m1BZidwBQMA5hpXrTMK5U,18918 -Naked/scratchpad.py,sha256=NJ6NYQrmzVHDHOEagFcACuSp0C2FiyKhHwpZbz7VkXE,743 -Naked/settings.py,sha256=uXuD_QpSbaOL37N-p_4pk1Fsrb_uQpIl3wkg6uTR8Cw,2976 -Naked/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Naked/commands/args.py,sha256=DhW7JF2FNU0ns3P0RrcKM_aN8Pn51zfgLpa7edS7QoE,4681 -Naked/commands/build.py,sha256=SDs5d6s4aCyT6zKWpJ4CgYnu8VKx910CKRe-E9mFhS8,1040 -Naked/commands/classifier.py,sha256=NY4eOKDh3xiSJbJfvxN8D-YqjJrqc8qQ9e03vlPAf-A,1875 -Naked/commands/dist.py,sha256=qGG1l9Z1T882WvRjBKIs-UQWSbN9efaZkK-qSYTTVV4,3287 -Naked/commands/help.py,sha256=cQzrW2Axb4X_zR4JElmCaWUcE1xk2Sf9VpNO31FAimA,300 -Naked/commands/locate.py,sha256=9wZ_RSCNju1hWGkrUGDOSlWTPg6cbA4_cKJuAKW4sxs,1449 -Naked/commands/make.py,sha256=ikbMj3T24LExBaxgd465DBNNemqZb8y6RHHnKJTsQFY,18788 -Naked/commands/profile.py,sha256=Rz_rWwdqXy6WrWrPaDCBrsVBwpJrwRCrsnHtqj-LmZ0,1700 -Naked/commands/pyh.py,sha256=Bqfo513IKwPB0xY4YvtUSdvpSIetE9tW-gfTG2VoMqY,1071 -Naked/commands/test.py,sha256=-T_cXmbS5BoL7wKuC6VxQ0W8-Q-dcRl64fVZsiEj75g,6720 -Naked/commands/usage.py,sha256=ASp5GkdPHEd9Nz_rYNfjojI0KXmHMhmbs7ktte6LecY,305 -Naked/commands/version.py,sha256=kSPrr4blhbTST1SNUEKnnD9UrP9UW7s9ehos-qiM5as,789 -Naked/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Naked/templates/app_file.py,sha256=A874Fi7TBfX2O8uMEcYvNbpUvc15C-rrFbT9MLWOL0Q,5188 -Naked/templates/licenses.py,sha256=WF2mFsv8oH_xUdEJMY17oWxmjmShOagYBQRdGReIxxE,6052 -Naked/templates/manifest_in_file.py,sha256=9FkG7ZHdadisE-Uh7qdI69Hn-hfACTo7II8LG23bGBY,109 -Naked/templates/profiler_file.py,sha256=XSxC4nBng26j7NmmmOXHz2wZ4702FpAGntaNeQ8WGLw,1530 -Naked/templates/pypush_file.py,sha256=RUndgzH4y9LhYgka1oTvVB__yfvXdysNdK7qOzwONyE,586 -Naked/templates/readme_md_file.py,sha256=njESHWuw5heC2EjRe8m7BgY1Wv2gXMUSnf0SjXLLpB4,104 -Naked/templates/settings_file.py,sha256=bkCfQE_qp-tdXCwBdII_4IqaO2U5XJUyh-QvTypOW1s,1179 -Naked/templates/setup_cfg_file.py,sha256=Bl-AkoQWe2Ath13L68J6pnzVPyz0FRmr7vCKIdyeAkU,107 -Naked/templates/setup_py_file.py,sha256=Z2c0FpDTKnRP2txJB7fSCEkD17CnyTgIFOLCRlR_kgs,1769 -Naked/toolshed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Naked/toolshed/benchmarking.py,sha256=Dn5EXmR_wiAtG-mqWmBFQJ_i749_-hZ1-PxEBwSsAwQ,17235 -Naked/toolshed/casts.py,sha256=elaNlp0hBRJ_bFPTX-4eYB90gmPrbVPz_6TY4HFrbc8,5126 -Naked/toolshed/file.py,sha256=FnYhoVCgnTYU-WjedCLJFgsd9UkvbvJNt5J-ftWML3E,19941 -Naked/toolshed/git.py,sha256=WAX_snuOFpVIIBPRsIZXva24wK67MEBNZE5eST4fSDg,79 -Naked/toolshed/ink.py,sha256=9i_ZJpgpXtLqDs32OFGoeiNU7Ajo7xwKmI9FdCCcMt8,5436 -Naked/toolshed/iter.py,sha256=yUalH_tyXYtEqsFDuy2n5ZfussXmdFunzgA4W7Ydz9M,500 -Naked/toolshed/network.py,sha256=VpTSm6XQy2Pm_-atsqyt5vd9ZMnYFrJsfJhPwZ2R-js,19525 -Naked/toolshed/python.py,sha256=lY-Nb8nymApIyI4pWJNHst11VA8IJygBF62ASnjg9Yk,2158 -Naked/toolshed/shell.py,sha256=8hAdzS15TTzofHr2mRCLpf7ThTNiDVouQjWI18LSCNg,12605 -Naked/toolshed/state.py,sha256=_PnDMY5Vws9JXN6VdoQlNWwhZ1EwoiwUDu-qjl_Nmk4,1061 -Naked/toolshed/system.py,sha256=IeJhooglhxKbKiG5NYw6_ye8MeRKNSY5nOz1BZCZBNk,24660 -Naked/toolshed/types.py,sha256=xd_Bu_fKu0FbULD4EvwQ_OBYWMuBVj5r4pEx4Wm7riA,44532 -Naked/toolshed/c/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -Naked/toolshed/c/benchmarking.c,sha256=UDYMyo3eaMQB0cc28AfkyePULEQuvtqaFeZWK9DgzLM,880286 -Naked/toolshed/c/benchmarking.pyx,sha256=Dn5EXmR_wiAtG-mqWmBFQJ_i749_-hZ1-PxEBwSsAwQ,17235 -Naked/toolshed/c/build.sh,sha256=LEtZwrw9A6Tx4Z-tSf4kjSKFLTyX97xs5uoJBcitB8w,36 -Naked/toolshed/c/casts.c,sha256=bgEj7BmtKcHmMd1W5qIcOC8_KH5BP66z3x_tLMF4N7I,227012 -Naked/toolshed/c/casts.pyx,sha256=Jq6Wt3re7fS1-ry9uD4B38yfGi-CbwhxsLZl8HODNis,4813 -Naked/toolshed/c/cstate.c,sha256=qTe_e46gCtGYUdgt--ulHl9NaE4T_K7j7D5V93AUawA,134375 -Naked/toolshed/c/cstate.pyx,sha256=5EDxBjneKCRyEwQslZspCLl1A2i7dMtEIu1mfM75qpo,1089 -Naked/toolshed/c/cythonize.sh,sha256=-Fy5q0oMAqOKj5aFDfRuaQUPpqGrKCSDatPdFt0d_zI,256 -Naked/toolshed/c/file.c,sha256=DtLXGU5JzSJCDzC8tZxM0k_ucf3ONwepxB6Q1fipL1I,623270 -Naked/toolshed/c/file.pyx,sha256=ru3r-7QVgTubZ3sbbNO_jqF0o_qfJBYzfGSXPL7X18c,19965 -Naked/toolshed/c/ink.c,sha256=L0brN1oD-airTLFV378wfkLZ6r1MgAHozsl5GlaMjdo,185313 -Naked/toolshed/c/ink.pyx,sha256=r73b8N46boGa7Cerw88uPGk3luNQWgoE7SS2Ru4k0ys,5460 -Naked/toolshed/c/network.c,sha256=ft-bqnr3ervphD1IXiXN9krqZ6GJPmLA2OdrH9N8CaE,525661 -Naked/toolshed/c/network.pyx,sha256=-NX-7RFbN2DAsOdW4mvtNYnCP1GVHx8CQubmL7wjaQg,19549 -Naked/toolshed/c/python.c,sha256=E2rAQDq1pVgehMwDQenNF5ZZIBdpauHKA5TKFPWxBSk,111860 -Naked/toolshed/c/python.pyx,sha256=WTST5lYVqizCtAXbHZqd5HGOO9ywCCxP8dbzLB2tbcM,2157 -Naked/toolshed/c/setup.py,sha256=oOuer8J1ZqJxxWhXiYzmtPmyeaQy2FNQNp1c99AzF4U,654 -Naked/toolshed/c/shell.c,sha256=1CrgdwUQsHkkzKKvVYfmZoA6OaG23xqriKiO0a_secI,376470 -Naked/toolshed/c/shell.pyx,sha256=efpvnnT8cu6xXOGvhqd2MpMCiv2Z4Eau8VjRp9pAYSc,12629 -Naked/toolshed/c/system.c,sha256=bSRfuYZe8C5nIk2WZrcXm5eYeJZ-3OwD5gzx2jwUPtE,620280 -Naked/toolshed/c/system.pyx,sha256=bPjCcxkWLuS-X5CZgUC8Rkilc2x-S-X2e9MkvzEf-xw,24684 -Naked/toolshed/c/types.c,sha256=STvR0OE_PLkGros1B0vjepCZdhClEjjaCEkqyuZNMOc,1240797 -Naked/toolshed/c/types.pyx,sha256=ep0NkR_OFbmp96KaAx5mxPYYUTtc7V6L1qSkaLS_oq8,44721 -Naked-0.1.31.data/scripts/naked,sha256=Ps1mufxMkBG7wwaJHQ_nkMwOrPP1hTZLDH7YMNO4Y2E,285 -Naked-0.1.31.dist-info/DESCRIPTION.rst,sha256=26S5QwAzVdLRvvgm9ZsFe2VsF2f6xybGklQEMt0T05s,1450 -Naked-0.1.31.dist-info/entry_points.txt,sha256=-7nL8pc5fnKhIUINYqLDa1jd3y-8jynn9u5qF9EyjqU,42 -Naked-0.1.31.dist-info/METADATA,sha256=z7IWAlMC3eIlNc8RlWxJ1feuDhdlQtziBOXXzcZK-c8,2341 -Naked-0.1.31.dist-info/pydist.json,sha256=cSetsKYPMVxYIilVGZD_wtke5QtnHkWmKGTF5uDSV10,1119 -Naked-0.1.31.dist-info/RECORD,, -Naked-0.1.31.dist-info/top_level.txt,sha256=CG1yk0vViILO5nUzrfUqtOs-0IAsZBY1zLFGi3O-SCc,6 -Naked-0.1.31.dist-info/WHEEL,sha256=SXYYsi-y-rEGIva8sB8iKF6bAFD6YDhmqHX5hI3fc0o,110 -../../../bin/naked,sha256=DphCuP_Nceu7OS5avlTHosKMrCxyktHOT3B9EesVxG4,250 -Naked-0.1.31.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Naked/templates/__pycache__/__init__.cpython-36.pyc,, -Naked/templates/__pycache__/setup_cfg_file.cpython-36.pyc,, -Naked/templates/__pycache__/settings_file.cpython-36.pyc,, -Naked/templates/__pycache__/manifest_in_file.cpython-36.pyc,, -Naked/templates/__pycache__/readme_md_file.cpython-36.pyc,, -Naked/templates/__pycache__/licenses.cpython-36.pyc,, -Naked/templates/__pycache__/pypush_file.cpython-36.pyc,, -Naked/templates/__pycache__/profiler_file.cpython-36.pyc,, -Naked/templates/__pycache__/app_file.cpython-36.pyc,, -Naked/templates/__pycache__/setup_py_file.cpython-36.pyc,, -Naked/toolshed/c/__pycache__/__init__.cpython-36.pyc,, -Naked/toolshed/c/__pycache__/setup.cpython-36.pyc,, -Naked/toolshed/__pycache__/types.cpython-36.pyc,, -Naked/toolshed/__pycache__/python.cpython-36.pyc,, -Naked/toolshed/__pycache__/git.cpython-36.pyc,, -Naked/toolshed/__pycache__/__init__.cpython-36.pyc,, -Naked/toolshed/__pycache__/casts.cpython-36.pyc,, -Naked/toolshed/__pycache__/ink.cpython-36.pyc,, -Naked/toolshed/__pycache__/system.cpython-36.pyc,, -Naked/toolshed/__pycache__/benchmarking.cpython-36.pyc,, -Naked/toolshed/__pycache__/state.cpython-36.pyc,, -Naked/toolshed/__pycache__/shell.cpython-36.pyc,, -Naked/toolshed/__pycache__/iter.cpython-36.pyc,, -Naked/toolshed/__pycache__/file.cpython-36.pyc,, -Naked/toolshed/__pycache__/network.cpython-36.pyc,, -Naked/commands/__pycache__/profile.cpython-36.pyc,, -Naked/commands/__pycache__/pyh.cpython-36.pyc,, -Naked/commands/__pycache__/locate.cpython-36.pyc,, -Naked/commands/__pycache__/test.cpython-36.pyc,, -Naked/commands/__pycache__/__init__.cpython-36.pyc,, -Naked/commands/__pycache__/args.cpython-36.pyc,, -Naked/commands/__pycache__/usage.cpython-36.pyc,, -Naked/commands/__pycache__/classifier.cpython-36.pyc,, -Naked/commands/__pycache__/help.cpython-36.pyc,, -Naked/commands/__pycache__/make.cpython-36.pyc,, -Naked/commands/__pycache__/version.cpython-36.pyc,, -Naked/commands/__pycache__/build.cpython-36.pyc,, -Naked/commands/__pycache__/dist.cpython-36.pyc,, -Naked/__pycache__/__init__.cpython-36.pyc,, -Naked/__pycache__/settings.cpython-36.pyc,, -Naked/__pycache__/scratchpad.cpython-36.pyc,, -Naked/__pycache__/commandline.cpython-36.pyc,, -Naked/__pycache__/app.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/WHEEL b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/WHEEL deleted file mode 100644 index f2ddc35..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.22.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/entry_points.txt b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/entry_points.txt deleted file mode 100644 index e69cfe8..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -naked = Naked.app:main - diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/pydist.json b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/pydist.json deleted file mode 100644 index 9defc82..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/pydist.json +++ /dev/null @@ -1 +0,0 @@ -{"license": "MIT", "exports": {"console_scripts": {"naked": "Naked.app:main"}}, "document_names": {"description": "DESCRIPTION.rst"}, "name": "Naked", "metadata_version": "2.0", "contacts": [{"role": "author", "email": "chris@zerolabs.net", "name": "Christopher Simpkins"}], "generator": "bdist_wheel (0.22.0)", "commands": {"wrap_console": {"naked": "Naked.app:main"}}, "summary": "A command line application framework", "project_urls": {"Home": "http://naked-py.com"}, "platform": "any", "run_requires": [{"requires": ["Naked", "requests", "pyyaml"]}], "version": "0.1.31", "keywords": "python,command line,system,application,framework,CLI", "classifiers": ["Intended Audience :: Developers", "Natural Language :: English", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Topic :: Software Development :: Libraries :: Python Modules"], "extras": []} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/top_level.txt deleted file mode 100644 index 007f029..0000000 --- a/venv/lib/python3.6/site-packages/Naked-0.1.31.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -Naked diff --git a/venv/lib/python3.6/site-packages/Naked/__init__.py b/venv/lib/python3.6/site-packages/Naked/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/Naked/app.py b/venv/lib/python3.6/site-packages/Naked/app.py deleted file mode 100644 index 0b5218f..0000000 --- a/venv/lib/python3.6/site-packages/Naked/app.py +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -#------------------------------------------------------------------------------ -# Naked | A Python command line application framework -# Copyright 2014 Christopher Simpkins -# MIT License -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------------ -# c.cmd = Primary command ( ) -# c.cmd2 = Secondary command ( ) -# -# c.option(option_string, [bool argument_required]) = test for option with optional test for positional arg to the option -# c.option_with_arg(option_string) = test for option and mandatory positional argument to option test -# c.flag(flag_string) = test for presence of a "--option=argument" style flag -# -# c.arg(arg_string) = returns the next positional argument to the arg_string argument -# c.flag_arg(flag_string) = returns the flag assignment for a "--option=argument" style flag -#------------------------------------------------------------------------------------ - -# Application start -def main(): - import sys - from Naked.commandline import Command - #from Naked.toolshed.state import StateObject - from Naked.toolshed.system import stderr - - #------------------------------------------------------------------------------------------ - # [ Instantiate command line object ] - # used for all subsequent conditional logic in the CLI application - #------------------------------------------------------------------------------------------ - c = Command(sys.argv[0], sys.argv[1:]) - #------------------------------------------------------------------------------ - # [ Instantiate state object ] - #------------------------------------------------------------------------------ - #state = StateObject() - #------------------------------------------------------------------------------------------ - # [ Command Suite Validation ] - early validation of appropriate command syntax - # Test that user entered a primary command, print usage if not - #------------------------------------------------------------------------------------------ - if not c.command_suite_validates(): - from Naked.commands.usage import Usage - Usage().print_usage() - sys.exit(1) - #------------------------------------------------------------------------------------------ - # [ PRIMARY COMMAND LOGIC ] - # Test for primary commands and handle them - #------------------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ args ] - identify the parsed arguments for a command string (2)= help - #------------------------------------------------------------------------------ - if c.cmd == "args": - if c.cmd2 == "help": - from Naked.commands.args import help as args_help - args_help() - elif c.argc > 0: # there is an argument to where that is not help - from Naked.commands.args import Args - a = Args(c.arg_to_cmd) - a.run() - else: - stderr("The args command requires an example command as an argument. Use 'naked args help' for more information.", 1) - #------------------------------------------------------------------------------ - # [ build ] - build the C code in the Naked library (2)= help - #------------------------------------------------------------------------------ - elif c.cmd == "build": - if c.cmd2 == "help": - from Naked.commands.build import help as build_help - build_help() - else: - from Naked.commands.build import compile_c_code - import os, inspect - abs_dirpath = os.path.join(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))), "toolshed", "c") - compile_c_code(abs_dirpath) # function calls exit status code - #------------------------------------------------------------------------------ - # [ classify ] - search Python application classifiers and display to user (args)-search string - #------------------------------------------------------------------------------ - elif c.cmd == "classify": - if c.cmd2 == "help": - from Naked.commands.classifier import help as classifier_help - classifier_help() - else: - if c.second: # if search string was given - search_string = c.second - else: - search_string = "" # absence of search string detected in Classifier, defaults to the entire list instead of search - from Naked.commands.classifier import Classifier - c = Classifier(search_string) - c.run() - #------------------------------------------------------------------------------ - # [ dist ] - distribute source files to PyPI (2)=register, sdist, swheel, wheel, win, all, help - #------------------------------------------------------------------------------ - elif c.cmd == "dist": - if c.argc > 1: - from Naked.commands.dist import Dist - d = Dist() - if c.cmd2 == "register": # python setup.py register - d.run('register') - elif c.cmd2 == "sdist": # python setup.py sdist upload - d.run('sdist') - elif c.cmd2 == "swheel": # python setup.py sdist bdist_wheel upload - d.run('swheel') - elif c.cmd2 == "wheel": # python setup.py bdist_wheel upload - d.run('wheel') - elif c.cmd2 == "win": # python setup.py bdist_wininst upload - d.run('win') - elif c.cmd2 == "all": # python setup.py sdist bdist_wheel bdist_wininst upload - d.run('all') - elif c.cmd2 == "help": # help for command - from Naked.commands.dist import help as dist_help - dist_help() - else: - stderr("The naked dist secondary command was not recognized. Use 'naked dist help' for more information.", 1) - else: - stderr("Please enter a secondary command", 1) - #------------------------------------------------------------------------------ - # [ locate ] - locate Naked project files (2)= main, settings, setup, help - #------------------------------------------------------------------------------ - elif c.cmd == "locate": - from Naked.commands.locate import Locator - if c.cmd2 == "help": - from Naked.commands.locate import help as locate_help - locate_help() - elif c.cmd2 == "main": - l = Locator('main') - elif c.cmd2 == "settings": - l = Locator('settings') - elif c.cmd2 == "setup": - l = Locator('setup') - else: - l = Locator('') #handles error report to user - #------------------------------------------------------------------------------ - # [ make ] - make a new Naked project (2)=help (args)=project name - #------------------------------------------------------------------------------ - elif c.cmd == "make": - from Naked.commands.make import MakeController - if c.cmd2 == "help": - from Naked.commands.make import help as make_help - make_help() - if c.arg1: # arg1 is not help so use it as the argument to the make command - m = MakeController(c.arg1) - else: - m = MakeController(None) - m.run() - #------------------------------------------------------------------------------ - # [ profile ] - run the profiler.py file in the Naked project (2)=help - #------------------------------------------------------------------------------ - elif c.cmd == "profile": - if c.cmd2 == "help": - from Naked.commands.profile import help as profile_help - profile_help() - else: - from Naked.commands.profile import Profiler - p = Profiler() - p.run() - - #------------------------------------------------------------------------------ - # [ pyh ] - help for python built-in library modules, classes, methods, functions - #------------------------------------------------------------------------------ - elif c.cmd == "pyh": - if c.cmd2 == "help": - from Naked.commands.pyh import pyh_help - pyh_help() - else: - if c.argc > 1: - from Naked.commands.pyh import python_help - python_help(c.arg1) - else: - stderr("Please enter a query term with the pyh command. Use 'naked pyh help' for more information.", 1) - - #------------------------------------------------------------------------------ - # [ test ] - Run unit tests on the project (2)= help,nose,pytest,tox,unittest (see help for args) - #------------------------------------------------------------------------------ - elif c.cmd == "test": - if c.argc > 1: - if c.cmd2 == "help": - from Naked.commands.test import help as tox_help - tox_help() - elif c.cmd2 == "nose": - from Naked.commands.test import NoseTester - n = NoseTester() - n.run() - elif c.cmd2 == "pytest": - from Naked.commands.test import PyTester - p = PyTester() - p.run() - elif c.cmd2 == "tox": - from Naked.commands.test import ToxTester - if c.arg2: #user specified a python version to run with one of the tox version defs - t = ToxTester(c.arg2) #instantiate with the python version - else: - t = ToxTester() - t.run() - elif c.cmd2 == "unittest": - from Naked.commands.test import UnitTester - if c.arg2: - t = UnitTester(c.arg2) - t.run() - else: - stderr("Please include a unit test file path. Use 'naked test help' for more information.", 1) - else: - stderr("The secondary command was not recognized. Use 'naked test help' for more information.", 1) - else: - stderr("Please include a secondary command with the 'naked test' command. Use 'naked dist help' for more information.", 1) - - #------------------------------------------------------------------------------------------ - # [ NAKED FRAMEWORK COMMANDS ] - # Naked framework provides default help, usage, and version commands for all applications - # --> settings for user messages are assigned in the lib/PROJECT/settings.py file - #------------------------------------------------------------------------------------------ - elif c.help(): # User requested naked help (help.py module in commands directory) - from Naked.commands.help import Help - Help().print_help() - elif c.usage(): # user requested naked usage info (usage.py module in commands directory) - from Naked.commands.usage import Usage - Usage().print_usage() - elif c.version(): # user requested naked version (version.py module in commands directory) - from Naked.commands.version import Version - Version().print_version() - #------------------------------------------------------------------------------------------ - # [ DEFAULT MESSAGE FOR MATCH FAILURE ] - # Message to provide to the user when all above conditional logic fails to meet a true condition - #------------------------------------------------------------------------------------------ - else: - print("Could not complete the command that you entered. Please try again.") - sys.exit(1) #exit - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/Naked/commandline.py b/venv/lib/python3.6/site-packages/Naked/commandline.py deleted file mode 100644 index b51951f..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commandline.py +++ /dev/null @@ -1,371 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -from Naked.settings import debug as DEBUG_FLAG -##################################################################### -# [ Command class ] -# Command line command string object -# argv = list of command line arguments and options -# argc = count of command line arguments and options -# arg0 = first positional argument to command -# arg1 = second positional argument to command -# arglp = last positional argument to command -# cmd = primary command for command suite application (=arg0) -# cmd2 = secondary command for command suite application (=arg1) -# snippet for py block comment = #py + TAB -##################################################################### -class Command: - def __init__(self, app_path, argv): - self.argobj = Argument(argv) # create an Argument obj - self.optobj = Option(argv) # create an Option obj - self.app = app_path # path to application executable file - self.argv = argv # list of the command arguments argv[0] is first argument - self.argc = len(argv) # length of the argument list - self.arg0 = self.argobj._getArg(0) # define the first positional argument - self.arg1 = self.argobj._getArg(1) # define the second positional argument - self.arg2 = self.argobj._getArg(2) # define the third postitional argument - self.arg3 = self.argobj._getArg(3) # define the fourth positional argument - self.arg4 = self.argobj._getArg(4) # define the fifth positional argument - self.arglp = self.argobj._getArg(len(argv) - 1) # define the last positional argument - self.first = self.arg0 - self.second = self.arg1 - self.third = self.arg2 - self.fourth = self.arg3 - self.fifth = self.arg4 - self.last = self.arglp - self.arg_to_exec = self.arg0 # argument to the executable - self.arg_to_cmd = self.arg1 # argument to the primary command - self.cmd = self.arg0 # define the primary command variable as the first positional argument (user dependent & optional, may be something else) - self.cmd2 = self.arg1 # define the secondary command variable as the second positional argument (user dependent & optional, may be something else) - self.options = self.option_exists() # test for presence of at least one option (boolean) - self.flags = self.flag_exists() # test for presence of at least one flag (boolean) - - #------------------------------------------------------------------------------ - # [ app_validates_args method ] (boolean) - # Test whether app validates on the criterion arguments (argc) > 0, i.e. there is at least one argument to the executable - #------------------------------------------------------------------------------ - def app_validates_args(self): - try: - if self.argc > 0: - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Validation of application error in the app_validates() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------------------ - # [ arg method ] (string) - # Return the NEXT positional argument to a command line object (e.g. an option that requires an argument) - # arg_recipient = the positional argument (at position n) to test for next positional argument - # returns next positional argument string at position n + 1 - #------------------------------------------------------------------------------------------ - def arg(self, arg_recipient): - try: - recipient_position = self.argobj._getArgPosition(arg_recipient) - return self.argobj._getArgNext(recipient_position) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing argument with arg() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------------------ - # [ command method ] (boolean) - # Test that the command includes requested primary command suite command (cmd_str parameter) - # cmd_str = the command string to test for in command - # arugment_required = boolean - is an argument to this command required (default = no)? - # returns boolean for presence of the cmd_str - #------------------------------------------------------------------------------------------ - def command(self, cmd_str): - try: - if (cmd_str == self.cmd): - return True - else: - return False # if command is missing, return false - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing command with command() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [ command_arg method ] (string) - # Return the argument to the primary command as a string - #------------------------------------------------------------------------------ - def command_arg(self): - try: - return self.arg1 - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing command argument with command_arg() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [ command2_arg method ] (string) - # Return the argument to the secondary command as a string - #------------------------------------------------------------------------------ - def command2_arg(self): - try: - return self.arg2 - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing command argument with command_arg() method (Naked.commandline.py).") - raise e - #------------------------------------------------------------------------------------------ - # [ command_with_argument method ] (boolean) - # Test that the command includes requested primary command suite command (cmd_str parameter) and argument to it - # cmd_str = the command string to test for in command - # returns boolean for presence of the cmd_str AND presence of argument to the command - #------------------------------------------------------------------------------------------ - def command_with_argument(self, cmd_str): - try: - if (cmd_str == self.cmd): - argument_to_cmd = self.argobj._getArgNext(0) - if argument_to_cmd == "": # if the argument is missing, then return false - return False - else: - return True - else: - return False # if command is missing return false - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing command and argument with command_with_argument() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------------------ - # [ command_suite_validates method ] (boolean) - # Test that there is a primary command in a command suite application (to be used at the top level of logic for command line application) - # returns boolean for presence of the primary command - #------------------------------------------------------------------------------------------ - def command_suite_validates(self, accept_options_as_argument = True): - try: - if self.argc > 0: - if self.arg0.startswith("-") and accept_options_as_argument == False: - return False # if no command and option present, return False - else: - return True # if a primary command present, return True - else: - return False # if user only entered the application name, return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Command suite validation error with the command_suite_validation() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [ flag method ] (boolean) - # Test for presence of flag in the command - #------------------------------------------------------------------------------ - def flag(self, flag_string): - try: - for match_string in self.optobj: #iterate through the options and attempt to match beginning of option to the requested flag - if match_string.startswith(flag_string): - return True - else: - pass - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing flags with the flag() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [flag_arg method] (string) - # Return the argument string assigned to a flag - #------------------------------------------------------------------------------ - def flag_arg(self, flag_string): - try: - for match_string in self.optobj: - if match_string.startswith(flag_string) and '=' in match_string: - flag_list = match_string.split("=") #split the flag on the equal symbol = list with [option, argument] - return flag_list[1] #return the argument to the flag option - else: - pass - return "" # return an empty string if unable to parse the argument - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing flags with the flag_arg() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [ flag_exists method ] (boolean) - # Test for the presence of a flag style option (--flag=argument) in the command - #------------------------------------------------------------------------------ - def flag_exists(self): - try: - for item in self.optobj: - if '=' in item: #test for presence of an = symbol in the option - return True # if present return True - break - return False # if didn't match across all options, return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing flags with the flag_arg() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------------------ - # [ option method ] (boolean) - # Test that the command includes an option (option_string parameter) - # option_string = the option string to test for in the command - # arugment_required = boolean - is an argument to this option required (default = no)? - # returns boolean for presence of the cmd_str - #------------------------------------------------------------------------------------------ - def option(self, option_string, argument_required = False): - try: - if (option_string in self.optobj): - argument_to_option = self.argobj._getArgNext(self.argobj._getArgPosition(option_string)) - if argument_required and ( argument_to_option == "" or argument_to_option.startswith("-") ): - return False - else: - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing option with option() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [ option_arg method ] (string) - # Return the argument string to an option - #------------------------------------------------------------------------------ - def option_arg(self, option_string): - try: - return self.argobj._getArgNext(self.argobj._getArgPosition(option_string)) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error returning argument to option with option_arg() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------------------ - # [ option_with_arg method ] (boolean) - # Test that the command includes an option (option_string parameter) and argument to that option - # option_string = the option string to test for in the command - # arugment_required = boolean - is an argument to this option required (default = yes)? - # returns boolean for presence of the option_string AND the argument - #------------------------------------------------------------------------------------------ - # test that command includes an option (option_string parameter) that includes an argument (=option(option_string, True)) - def option_with_arg(self, option_string, argument_required = True): - try: - if (option_string in self.optobj): - argument_to_option = self.argobj._getArgNext(self.argobj._getArgPosition(option_string)) - if argument_required and ( argument_to_option == "" or argument_to_option.startswith("-") ): - return False # argument is either missing or is another option, return false - else: - return True - else: - return False # option is not present - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error parsing option and argument with option_with_arg() method (Naked.commandline.py).") - raise e - - #------------------------------------------------------------------------------ - # [ option_exists method ] (boolean) - # Test whether there are any options in the command string - # returns boolean value for test "Is there at least one option?" - #------------------------------------------------------------------------------ - def option_exists(self): - try: - if len(self.optobj) > 0: - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Error testing for the presence of at least one option with option_exists() method (Naked.commandline.py).") - raise e - #------------------------------------------------------------------------------ - # Naked provides the following commands for all applications that use the framework: - # -- help - # -- usage - # -- version - # These methods are accessed from the app.py module, main() as method calls on the command line object - # Parsing logic is coded below - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # Help Command/Option Handler - #------------------------------------------------------------------------------ - def help(self): - if ( (self.option("--help")) or (self.cmd == "help") or (self.option("-h")) ): - return True - else: - return False - - #------------------------------------------------------------------------------ - # Usage Command/Option Handler - #------------------------------------------------------------------------------ - def usage(self): - if ( (self.option("--usage")) or (self.cmd == "usage") ): - return True - else: - return False - - #------------------------------------------------------------------------------ - # Version Command/Option Handler - #------------------------------------------------------------------------------ - def version(self): - if ( (self.option("--version")) or (self.cmd == "version") or (self.option("-v"))): - return True - else: - return False - - #------------------------------------------------------------------------------ - # print the arguments with their corresponding argv list position to std out - #------------------------------------------------------------------------------ - def show_args(self): - x = 0 - for arg in self.argv: - print("argv[" + str(x) + "] = " + arg) - x = x + 1 - -#------------------------------------------------------------------------------ -# [ Argument Class ] -# all command line arguments (object inherited from Python list) -#------------------------------------------------------------------------------ -class Argument(list): - def __init__(self, argv): - self.argv = argv - list.__init__(self, self.argv) - - - # return argument at position specified by the 'position' parameter - def _getArg(self, position): - if ( self.argv ) and ( len(self.argv) > position ): - return self.argv[position] - else: - return "" - - # return position of user specified argument in the argument list - def _getArgPosition(self, test_arg): - if ( self.argv ): - if test_arg in self.argv: - return self.argv.index(test_arg) - else: - return -1 - - # return the argument at the next position following a user specified positional argument (e.g. for argument to an option in cmd) - def _getArgNext(self, position): - if len(self.argv) > (position + 1): - return self.argv[position + 1] - else: - return "" - -#------------------------------------------------------------------------------ -# [ Option Class ] -# Command line options (object inherited from Python list) -# Definition: string that begins with "-" (i.e. can be -h or --long) -#------------------------------------------------------------------------------ -class Option(list): - def __init__(self, argv): - self.argv = argv - list.__init__(self, self._make_option_list()) - - # make a list of the options in the command (defined as anything that starts with "-" character) - def _make_option_list(self): - optargv = [] - for x in self.argv: - if x.startswith("-"): - optargv.append(x) - return optargv diff --git a/venv/lib/python3.6/site-packages/Naked/commands/__init__.py b/venv/lib/python3.6/site-packages/Naked/commands/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/Naked/commands/args.py b/venv/lib/python3.6/site-packages/Naked/commands/args.py deleted file mode 100644 index 739ae81..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/args.py +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -from Naked.commandline import Command -from Naked.toolshed.system import exit_success -import shlex - -class Args: - def __init__(self, command_string): - self.com_string = command_string - - def run(self): - cmd_list = shlex.split(self.com_string) - c = Command(cmd_list[0], cmd_list[1:]) - print(' ') - print("•naked• Assuming that your Command object is instantiated as an instance named 'c', the command that you entered would be parsed as follows:") - print(' ') - print('Application') - print('-----------') - print('c.app = ' + c.app) - print(' ') - print('Argument List Length') - print('--------------------') - print('c.argc = ' + str(c.argc)) - print(' ') - print('Argument List Items') - print('-------------------') - print('c.argobj = ' + str(c.argobj)) - print(' ') - print('Arguments by Zero Indexed Start Position') - print('----------------------------------------') - print('c.arg0 = ' + c.arg0) - print('c.arg1 = ' + c.arg1) - print('c.arg2 = ' + c.arg2) - print('c.arg3 = ' + c.arg3) - print('c.arg4 = ' + c.arg4) - print(' ') - print('Arguments by Named Position') - print('---------------------------') - print('c.first = ' + c.first) - print('c.second = ' + c.second) - print('c.third = ' + c.third) - print('c.fourth = ' + c.fourth) - print('c.fifth = ' + c.fifth) - print(' ') - print('Last Positional Argument') - print('------------------------') - print('c.arglp = ' + c.arglp) - print('c.last = ' + c.last) - print(' ') - print('Primary & Secondary Commands') - print('----------------------------') - print('c.cmd = ' + c.cmd) - print('c.cmd2 = ' + c.cmd2) - print(' ') - print('Option Exists Tests') - print('------------------') - print('c.option_exists() = ' + str(c.option_exists())) - print('c.options = ' + str(c.options)) - print(' ') - print('Option Argument Assignment') - print('--------------------------') - if c.option_exists(): # if there are options, iterate through and print arguments to them - non_flag_options = False - for x in range(len(c.optobj)): - if '=' in c.optobj[x]: - continue # don't print flags, they are handled below - else: - print('c.arg("' + c.optobj[x] + '") = ' + c.arg(c.optobj[x])) - non_flag_options = True - if not non_flag_options: - print("There are no short or long options in the command.") - else: # otherwise, inform user that there are no options - print("There are no short options, long options, or flags in your command.") - print(' ') - print('Flag Exists Tests') - print('----------------') - print('c.flag_exists() = ' + str(c.flag_exists())) - print('c.flags = ' + str(c.flags)) - print(' ') - print('Flag Argument Assignment') - print('------------------------') - if c.flag_exists(): - for y in c.optobj: - if '=' in y: - the_flag = y.split('=')[0] - print('c.flag_arg("' + the_flag + '") = ' + c.flag_arg(the_flag)) - else: # provide message if there are no flags - print("There are no flag style arguments (--flag=argument) in your command.") - exit_success() - - -#------------------------------------------------------------------------------ -# [ help function ] - help for the where command -#------------------------------------------------------------------------------ -def help(): - from Naked.toolshed.system import exit_success - help_string = """ -Naked args Command Help -======================= -The args command displays information about the data that are parsed from a command string to Command object attributes and that are obtained from Command object methods. It is intended to help with the design of your application logic when you use the Naked command line parser. - -USAGE - naked args '' - -The command statement is a mandatory argument to the command. It should include a complete command as it would be entered on the command line, including the executable. The argument should be completely enclosed within quotes. - -SECONDARY COMMANDS - none - -OPTIONS - none - -EXAMPLE - naked args 'testapp save somestring --unicode -s --name=file.txt'""" - print(help_string) - exit_success() - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/build.py b/venv/lib/python3.6/site-packages/Naked/commands/build.py deleted file mode 100644 index ef3b0d6..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/build.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -from Naked.toolshed.system import exit_success -#------------------------------------------------------------------------------ -# [ compile_c_code function ] (--none--) -# compile C files in the lib/Naked/toolshed/c directory -#------------------------------------------------------------------------------ -def compile_c_code(abs_dirpath): - from Naked.toolshed.shell import execute - from os import chdir - - chdir(abs_dirpath) - print('•naked• Compiling the C source library files...') - success = execute("python setup.py build_ext --inplace") - if success: - print(' ') - print('•naked• C source code compile complete.') - exit_success() - -def help(): - help_string = """ -Naked build Command Help -======================== -The build command compiles the Naked C libraries. This requires an installed C compiler. - -USAGE - naked build - -SECONDARY COMMANDS - none - -OPTIONS - none""" - print(help_string) - exit_success() - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/classifier.py b/venv/lib/python3.6/site-packages/Naked/commands/classifier.py deleted file mode 100644 index 86c9bd0..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/classifier.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -from Naked.toolshed.system import exit_success - -class Classifier: - def __init__(self, search_string): - self.needle = search_string - self.url = 'https://pypi.python.org/pypi?%3Aaction=list_classifiers' - - def run(self): - from Naked.toolshed.network import HTTP - http = HTTP(self.url) # use the python.org url for the classifier list - - print('•naked• Pulling the classifier list from python.org...') - - res = http.get() # get the list - test_list = res.split('\n') # split on newlines - - if self.needle == "": # user did not enter a search string, print the entire list - print("•naked• You did not provide a search string. Here is the entire list:") - print(' ') - for item in test_list: - print(item) - else: # user entered a search string, find it - lower_needle = self.needle.lower() - print("•naked• Performing a case insensitive search for '" + self.needle + "'") - print(' ') - filtered_list = [ x for x in test_list if lower_needle in x.lower() ] #case insensitive match for the search string - for item in filtered_list: - print(item) - - exit_success() # exit with zero status code - -def help(): - help_string = """ -Naked classify Command Help -=========================== -The classify command performs a case-insensitive search of the PyPI application classifier list and displays the results. - -USAGE - naked classify [search string] - -The search string argument is optional. If you do not include a search string, the entire classifier list is displayed. - -SECONDARY COMMANDS - none - -OPTIONS - none - -EXAMPLES - naked classify - naked classify Internet -""" - print(help_string) - exit_success() - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/dist.py b/venv/lib/python3.6/site-packages/Naked/commands/dist.py deleted file mode 100644 index fd60855..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/dist.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import os -from Naked.toolshed.system import file_exists, stderr, exit_success -from Naked.toolshed.shell import run as shell_run - -class Dist: - def __init__(self): - self.register = "python setup.py register" - self.sdist = "python setup.py sdist upload" - self.wheel = "python setup.py bdist_wheel upload" - self.swheel = "python setup.py sdist bdist_wheel upload" - self.win = "python setup.py bdist_wininst upload" - self.all = "python setup.py sdist bdist_wheel bdist_wininst upload" - - #------------------------------------------------------------------------------ - # [ run method ] - iterates through up to 6 directories above current working - # directory and then runs command if setup.py found - #------------------------------------------------------------------------------ - def run(self, command): - setuppy_found = False - for i in range(6): # navigate up at most 4 directory levels to search for the setup.py file - if not self._is_setup_py_at_this_level(): - os.chdir(os.pardir) - else: - setuppy_found = True - self._run_dist_command(command) - break - if not setuppy_found: - stderr("Unable to locate the setup.py file for your project. Please confirm that you are in your project directory and try again.", 1) - else: - exit_success() - - # search for setup.py file - def _is_setup_py_at_this_level(self): - if file_exists('setup.py'): - return True - else: - return False - - # run the user requested command - def _run_dist_command(self, the_command): - if the_command in "register": - print('•naked• Running register...') - shell_run(self.register) - elif the_command in "sdist": - print('•naked• Running sdist...') - shell_run(self.sdist) - elif the_command in "wheel": - print('•naked• Running wheel...') - shell_run(self.wheel) - elif the_command in "swheel": - print('•naked• Running swheel...') - shell_run(self.swheel) - elif the_command in "win": - print('•naked• Running win...') - shell_run(self.win) - elif the_command in "all": - print('•naked• Running all...') - shell_run(self.all) - else: - stderr("Unrecognized command. Use 'naked dist help' to view the supported commands.", 1) - - -def help(): - help_string = """ -Naked dist Command Help -======================= -The dist secondary commands run the standard distutils 'python setup.py ' source/binary distribution commands. - -USAGE - naked dist - -SECONDARY COMMANDS python setup.py - all sdist bdist_wheel bdist_wininst upload - register register - sdist sdist upload - swheel sdist bdist_wheel upload - wheel bdist_wheel upload - win bdist_wininst upload - -OPTIONS - none - -EXAMPLES - naked dist register - naked dist sdist""" - print(help_string) - exit_success() - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/help.py b/venv/lib/python3.6/site-packages/Naked/commands/help.py deleted file mode 100644 index bc55243..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/help.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import Naked.settings -from Naked.toolshed.system import exit_success - -class Help: - def __init__(self): - self.help = Naked.settings.help - - def print_help(self): - print(self.help) - exit_success() - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/locate.py b/venv/lib/python3.6/site-packages/Naked/commands/locate.py deleted file mode 100644 index d490efd..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/locate.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import os -from Naked.toolshed.system import stderr, exit_success - -class Locator: - def __init__(self, needle): - self.needle = needle - self.location = self._display_location() - - def _display_location(self): - if self.needle == 'main': - main_path = os.path.join('', 'lib', '', 'app.py') - print("app.py : " + main_path) - exit_success() - elif self.needle == "settings": - settings_path = os.path.join('', 'lib', '','settings.py') - print("settings.py : " + settings_path) - exit_success() - elif self.needle == "setup": - setup_path = os.path.join('', 'setup.py') - print("setup.py : " + setup_path) - exit_success() - else: - stderr("Unable to process the command. Use 'naked locate help' for more information.", 1) - -def help(): - help_string = """ -Naked locate Command Help -========================= -The locate command identifies the file path to commonly used files in your project directory. - -USAGE - naked locate - -SECONDARY COMMANDS - main - the main application script file, app.py - setup - the setup.py file - settings - the project settings files, settings.py - -OPTIONS - none - -EXAMPLE - naked locate main""" - print(help_string) - exit_success() - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/make.py b/venv/lib/python3.6/site-packages/Naked/commands/make.py deleted file mode 100644 index def59ff..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/make.py +++ /dev/null @@ -1,388 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import Naked.toolshed.system as system -import Naked.toolshed.python as python -import Naked.toolshed.file as nfile -import Naked.toolshed.ink as ink -from Naked.toolshed.types import XDict, XString -from Naked.toolshed.system import make_dirs, make_path, exit_success -import datetime -import sys - -## TODO: Check for a local settings file (appname.yaml) -## TODO: make directories and files -#------------------------------------------------------------------------------ -# [ MakeController class ] -# Top level logic for the make command -#------------------------------------------------------------------------------ -class MakeController: - def __init__(self, app_name): - self.app_name = app_name - - def run(self): - if self.app_name == None: - i = InfoCompiler(None) - data_container = i.getSetupFileInfo() - else: - i = InfoCompiler(self.app_name) - data_container = i.getUserInfo() - - db = DirectoryBuilder(data_container) - db.build() - fb = FileBuilder(data_container) - if fb.build_and_write(): # file writes were successful - main_script_path = make_path(data_container.app_name, 'lib', data_container.app_name, 'app.py') - settings_path = make_path(data_container.app_name, 'lib', data_container.app_name, 'settings.py') - command_dir = make_path(data_container.app_name, 'lib', data_container.app_name, 'commands') - setuppy_path = make_path(data_container.app_name, 'setup.py') - print(" ") - print(data_container.app_name + " was successfully built.") - print(" ") - print("-----") - print("Main application script: " + main_script_path) - print("Settings file: " + settings_path) - print("Commands directory: " + command_dir) - print("setup.py file: " + setuppy_path) - print("-----") - print(" ") - print("Use 'python setup.py develop' from the top level of your project and you can begin testing your application with the executable, " + data_container.app_name) - exit_success() -#------------------------------------------------------------------------------ -# [ InfoCompiler class ] -# obtain information from user in order to build a new project -#------------------------------------------------------------------------------ -class InfoCompiler: - def __init__(self, app_name): - self.data = DataContainer() - self.data.app_name = app_name - self.displayed_info_flag = 0 - - def getUserInfo(self): - if not self.displayed_info_flag: - print("We need some information to create your project.") - self.displayed_info_flag = 1 - # If no project name, then query for it because this is mandatory - if self.data.app_name == None: - if python.is_py2: - response = raw_input("Please enter your application name (q=quit): ") - else: - response = input("Please enter your application name (q=quit): ") - if len(response) > 0: - if response == "q": - print("Aborted project build.") - sys.exit(0) # user requested quit - else: - if len(response.split()) > 1: # if more than one word - print("The application name must be a single word. Please try again.") - self.getUserInfo() - else: - self.data.app_name = response - else: - print("The Naked project will not build without an application name. Please try again.") - return self.getUserInfo() - # if project name already set, then obtain the other optional information - if python.is_py2(): - self.data.developer = raw_input("Enter the licensing developer or organization (q=quit): ") - if self.data.developer == "q": - print("Aborted the project build.") - sys.exit(0) - self.data.license = raw_input("Enter the license type (or leave blank, q=quit): ") - if self.data.license == "q": - print("Aborted the project build.") - sys.exit(0) - else: - self.data.developer = input("Enter the licensing developer or organization: ") - if self.data.developer == "q": - print("Aborted the project build.") - sys.exit(0) - self.data.license = input("Enter the license type (or leave blank): ") - if self.data.license == "q": - print("Aborted the project build.") - sys.exit(0) - if self.confirmData(): - return self.data - else: - print("Let's try again...") - return self.getUserInfo() # try again - - def getSetupFileInfo(self): - files = system.list_all_files_cwd() - if len(files) > 0: - setupfile_exists = False - for a_file in files: - if 'naked.yaml' == a_file.lower(): # accepts any permutation of upper/lower case 'naked.yaml' - print("Detected a Naked project YAML setup file (" + a_file + ").") - setupfile_exists = True - fr = nfile.FileReader(a_file) - the_yaml = fr.read_utf8() - self.parseYaml(the_yaml) - if setupfile_exists: - if self.confirmData(): - return self.data - else: - print("Aborted the project build.") - if python.is_py2(): - response = raw_input("Would you like to modify this information? (y/n) ") - else: - response = input("Would you like to modify this information? (y/n) ") - if response in ['y', 'Y', 'Yes', 'YES', 'yes']: - self.displayed_info_flag = 1 - self.data.app_name = None - return self.getUserInfo() # return the result from the getUserInfo command to the calling method - else: - sys.exit(0) - else: - return self.getUserInfo() # there are files but no setup file, use the manual entry method - else: - return self.getUserInfo() # there are no files in the directory, use the manual entry method - - - def parseYaml(self, yaml_string): - import yaml - the_yaml = yaml.load(yaml_string) - # Parse project name - if 'application' in the_yaml: - self.data.app_name = the_yaml['application'] - else: - print("Unable to find the application name ('application' field) in naked.yaml") - if python.is_py2: - response = raw_input("Please enter your application name: ") - else: - response = input("Please enter your application name: ") - if len(response) > 0: - self.data.app_name = response # assign the application name at CL if was not entered in file - else: - print("The Naked project will not build without an application name. Please try again.") - self.displayed_info_flag = 1 - self.getUserInfo() - # Parse developer - if 'developer' in the_yaml: - self.data.developer = the_yaml['developer'] # set developer - else: - self.data.developer = "" - # Parse license type - if 'license' in the_yaml: - self.data.license = the_yaml['license'] # set license - else: - self.data.license = "" - - - def confirmData(self): - templ_str = getHeaderTemplate() - template = ink.Template(templ_str) - renderer = ink.Renderer(template, {'app_name': self.data.app_name, 'developer': self.data.developer, 'license': self.data.license, 'year': self.data.year}) - display_header = renderer.render() - print("\nPlease confirm the information below:") - print(display_header) - - if python.is_py2(): - response = raw_input("Is this correct? (y/n) ") - else: - response = input("Is this correct? (y/n) ") - - if response in ['y', 'Y', 'yes', 'YES']: - return True - else: - self.data.app_name = None - return False - -#------------------------------------------------------------------------------ -# [ getHeaderTemplate function ] (string) -# returns the Ink header template for user confirmation -#------------------------------------------------------------------------------ -def getHeaderTemplate(): - templ_str = """ ----------------------------------------------------------- - {{app_name}} - Copyright {{year}} {{developer}} - {{license}} ----------------------------------------------------------- - """ - return templ_str - -#------------------------------------------------------------------------------ -# [ DataContainer class ] -# state maintenance object that holds project information -#------------------------------------------------------------------------------ -class DataContainer: - def __init__(self): - self.cwd = system.cwd() - self.year = str(datetime.datetime.now().year) - -#------------------------------------------------------------------------------ -# [ DirectoryBuilder class ] -# generation of directory structure for a new project -#------------------------------------------------------------------------------ -class DirectoryBuilder: - def __init__(self, data_container): - self.data_container = data_container - - def build(self): - top_level_dir = self.data_container.app_name - second_level_dirs = ['docs', 'lib', 'tests'] - lib_subdir = make_path(self.data_container.app_name, 'commands') - - for xdir in second_level_dirs: - make_dirs(make_path(top_level_dir, xdir)) - - make_dirs(make_path(top_level_dir, 'lib', lib_subdir)) - -#------------------------------------------------------------------------------ -# [ FileBuilder class ] -# generate the files for a new project -#------------------------------------------------------------------------------ -class FileBuilder: - def __init__(self, data_container): - self.data_container = data_container - self.file_dictionary = {} - - def build_and_write(self): - self._make_file_paths() # create the file paths for all generated files - self._render_file_strings() # create the rendered template strings - self._make_file_dictionary() # make the file path : file string dictionary - self.write_files() # write out to files - return True # if made it this far without exception, return True to calling method to confirm file writes - - # files are included in self.file_dictionary as key = filepath, value = filestring pairs - # write the files to disk - def write_files(self): - the_file_xdict = XDict(self.file_dictionary) - for filepath, file_string in the_file_xdict.xitems(): - fw = nfile.FileWriter(filepath) - try: - fw.write_utf8(file_string) - except TypeError as te: # catch unicode write errors - fw.write(file_string) - - def _make_file_paths(self): - from Naked.toolshed.system import make_path - - self.top_manifestin = make_path(self.data_container.app_name, 'MANIFEST.in') - self.top_readmemd = make_path(self.data_container.app_name, 'README.md') - self.top_setupcfg = make_path(self.data_container.app_name, 'setup.cfg') - self.top_setuppy = make_path(self.data_container.app_name, 'setup.py') - self.docs_license = make_path(self.data_container.app_name, 'docs', 'LICENSE') - self.docs_readmerst = make_path(self.data_container.app_name, 'docs', 'README.rst') - self.lib_initpy = make_path(self.data_container.app_name, 'lib', '__init__.py') - self.com_initpy = make_path(self.data_container.app_name, 'lib', self.data_container.app_name, 'commands', '__init__.py') - self.tests_initpy = make_path(self.data_container.app_name, 'tests', '__init__.py') - self.lib_profilerpy = make_path(self.data_container.app_name, 'lib', 'profiler.py') - self.lib_proj_initpy = make_path(self.data_container.app_name, 'lib', self.data_container.app_name, '__init__.py') - self.lib_proj_apppy = make_path(self.data_container.app_name, 'lib', self.data_container.app_name, 'app.py') - self.lib_proj_settingspy = make_path(self.data_container.app_name, 'lib', self.data_container.app_name, 'settings.py') - - def _render_file_strings(self): - from Naked.templates.manifest_in_file import manifest_file_string - from Naked.templates.readme_md_file import readme_md_string - from Naked.templates.setup_cfg_file import setup_cfg_string - from Naked.templates.setup_py_file import setup_py_string - from Naked.templates.profiler_file import profiler_file_string - from Naked.templates.app_file import app_file_string - from Naked.templates.settings_file import settings_file_string - - data_dict = self.data_container.__dict__ - - self.top_manifestin_rendered = manifest_file_string # no replacements necessary - self.top_readmemd_rendered = self._render_template(self._create_template(readme_md_string), data_dict) #requires app_name replacement - self.top_setupcfg_rendered = setup_cfg_string # no replacement necessary - self.top_setuppy_rendered = self._render_template(self._create_template(setup_py_string), data_dict) # requires app_name, developer replacements - self.docs_readmerst_rendered = "" # blank document stub write - self.lib_profilerpy_rendered = profiler_file_string # no replacement necessary - self.initpy_rendered = "" # blank __init__.py files - self.lib_proj_apppy_rendered = self._render_template(self._create_template(app_file_string), data_dict) # requires app_name, developer, license_name, year replacements - self.lib_proj_settingspy_rendered = self._render_template(self._create_template(settings_file_string), data_dict) # requires app_name replacement - - if len(self.data_container.license) > 0: - license = self.parse_licenses(self.data_container.license) # find the appropriate license template if the license was provided by user - if len(license) > 0: # could be empty string if fails to match a license template provided by Naked - self.docs_license_rendered = self._render_template(self._create_template(license), data_dict) - else: - self.docs_license_rendered = "" - - def _make_file_dictionary(self): - file_dictionary = {} - ## File path : file string key/value pairs > make as XString and encode as unicode for unicode file writes - file_dictionary[self.top_manifestin] = XString(self.top_manifestin_rendered).unicode().strip() - file_dictionary[self.top_readmemd] = XString(self.top_readmemd_rendered).unicode().strip() - file_dictionary[self.top_setupcfg] = XString(self.top_setupcfg_rendered).unicode().strip() - file_dictionary[self.top_setuppy] = XString(self.top_setuppy_rendered).unicode().strip() - file_dictionary[self.docs_license] = XString(self.docs_license_rendered).unicode().strip() - file_dictionary[self.docs_readmerst] = XString(self.docs_readmerst_rendered).unicode().strip() - file_dictionary[self.lib_initpy] = XString(self.initpy_rendered).unicode().strip() - file_dictionary[self.com_initpy] = XString(self.initpy_rendered).unicode().strip() - file_dictionary[self.tests_initpy] = XString(self.initpy_rendered).unicode().strip() - file_dictionary[self.lib_profilerpy] = XString(self.lib_profilerpy_rendered).unicode().strip() - file_dictionary[self.lib_proj_initpy] = XString(self.initpy_rendered).unicode().strip() - file_dictionary[self.lib_proj_apppy] = XString(self.lib_proj_apppy_rendered).unicode().strip() - file_dictionary[self.lib_proj_settingspy] = XString(self.lib_proj_settingspy_rendered).unicode().strip() - - self.file_dictionary = file_dictionary - - def _create_template(self, template_string): - return ink.Template(template_string) - - def _render_template(self, template, key_dict): - r = ink.Renderer(template, key_dict) - return r.render() - - def parse_licenses(self, license_string): - if len(license_string) > 0: - license = license_string.lower() # case insensitive matching, make lower case version - - if license.startswith('apache'): - from Naked.templates.licenses import apache_license - return apache_license - elif license.startswith('bsd'): - from Naked.templates.licenses import bsd_license - return bsd_license - elif license.startswith('gpl'): - from Naked.templates.licenses import gpl3_license - return gpl3_license - elif license.startswith('lgpl'): - from Naked.templates.licenses import lgpl_license - return lgpl_license - elif license.startswith('mit'): - from Naked.templates.licenses import mit_license - return mit_license - elif license.startswith('mozilla'): - from Naked.templates.licenses import mozilla_license - return mozilla_license - else: - return "" - -def help(): - from Naked.toolshed.system import exit_success - help_string = """ -Naked make Command Help -======================= -The make command builds a new Naked project. The project can be built from either responses that you give on the command line, or from a naked.yaml project settings file. - -USAGE - naked make [argument] - -The command should be run in the top level of the path where you would like to create your project. The argument to the make command is optional. If used, this is the name of your new project. It is not necessary to include the argument if you use a naked.yaml project settings file. - -The naked.yaml settings file has the following structure: - - application: - developer: - license: - -Place this in the top level of an empty directory and use `naked make` in the same directory. Naked will confirm your settings and then build the project directories and files from these settings. - -SECONDARY COMMANDS - none - -OPTIONS - none - -EXAMPLES - naked make - naked make testapp""" - print(help_string) - exit_success() - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/profile.py b/venv/lib/python3.6/site-packages/Naked/commands/profile.py deleted file mode 100644 index 47e8451..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/profile.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import os -from Naked.toolshed.system import file_exists, dir_exists, stderr, exit_success - -class Profiler: - def __init__(self, dir_levels = 6): - self.number_of_dir_levels = dir_levels # number of directory levels to bottom to top search - - def run(self): - lib_found = False - for i in range(self.number_of_dir_levels): - if not self._is_lib_at_this_level(): - os.chdir(os.pardir) - else: - lib_found = True - break - if lib_found: - os.chdir('lib') # chdir to the lib directory if it is found - if file_exists('profiler.py'): # confirm that profiler.py exists - os.system('python profiler.py') # run the profiler.py file - exit_success() - else: - stderr("Unable to locate a profiler.py file in your lib directory.", 1) - else: - stderr("Unable to locate your profiler.py file. Please navigate to your project directory.", 1) - - def _is_lib_at_this_level(self): - if dir_exists('lib'): - return True - else: - return False - - -def help(): - from Naked.toolshed.system import exit_success - help_string = """ -Naked profile Command Help -========================== -The profile command runs cProfile and pstats on the code that you enter in test code block of your PROJECT/lib/profiler.py file. - -USAGE - naked profile - -SECONDARY COMMANDS - none - -OPTIONS - none - -This command searches bottom to top (from the working directory) through up to 6 directory levels to identify the lib/profiler.py path.""" - - print(help_string) - exit_success() - diff --git a/venv/lib/python3.6/site-packages/Naked/commands/pyh.py b/venv/lib/python3.6/site-packages/Naked/commands/pyh.py deleted file mode 100644 index 674506f..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/pyh.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys - -def python_help(help_string): - try: - needle = help_string - if needle.startswith("'") and needle.endswith("'"): - needle = needle[1:-1] - elif needle.startswith('"') and needle.endswith('"'): - needle = needle[1:-1] - help(needle) - except Exception as e: - print(e) - sys.stderr.write("•naked• There was an error processing the query.") - sys.exit(1) - -def pyh_help(): - from Naked.toolshed.system import exit_success - help_string = """ -Naked pyh Command Help -====================== -The pyh command searches the built-in Python documentation for a query term. The query term can be a Python built-in module, class/type, method, or function. - -USAGE - naked pyh - -SECONDARY COMMANDS - none - -OPTIONS - none - -EXAMPLES - Module Docs: naked pyh sys - - Class Docs: naked pyh dict - - Method Docs: naked pyh dict.update - - Function Docs: naked pyh max""" - - print(help_string) - exit_success() - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/test.py b/venv/lib/python3.6/site-packages/Naked/commands/test.py deleted file mode 100644 index 6d29200..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/test.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import os -from Naked.toolshed.system import cwd, file_exists, dir_exists, stderr, exit_success - -#------------------------------------------------------------------------------ -# [ ToxTester class ] -# Run Tox on the project directory, by default runs all python versions in tox.ini -# Optional specify the version of Python to test in constructor (runs 'tox -e py') -# Optional specify the number of directory levels `dir_levels` to search bottom to top (default = 4) -#------------------------------------------------------------------------------ -class ToxTester: - def __init__(self, py_version="", dir_levels = 6): - self.py_version = py_version - self.number_of_dir_levels = dir_levels - - def run(self): - tox_found = False - for i in range(self.number_of_dir_levels): - if not self._is_tox_ini_at_this_level(): - os.chdir(os.pardir) - else: - tox_found = True - self._run_tox() - break - if not tox_found: - stderr("Unable to locate your tox.ini file. Please navigate to your project directory.", 1) - else: - exit_success() - - def _is_tox_ini_at_this_level(self): - if file_exists('tox.ini'): - return True - else: - return False - - def _run_tox(self): - if self.py_version == "": - os.system("tox") - else: - cmd_string = "tox -e" + self.py_version - os.system(cmd_string) - -#------------------------------------------------------------------------------ -# [ NoseTester class ] -# run nose tests from the tests directory (works from any level of the project) -# Optional specify the number of directory levels to search bottom to top (default = 4) -#------------------------------------------------------------------------------ -class NoseTester: - def __init__(self, dir_levels = 6): - self.number_of_dir_levels = dir_levels - - def run(self): - nose_found = False - for i in range(self.number_of_dir_levels): - if not self._is_testdir_at_this_level(): - os.chdir(os.pardir) - else: - nose_found = True - self._run_nose() - break - if not nose_found: - stderr("Unable to locate your testing directory", 1) - else: - exit_success() - - def _is_testdir_at_this_level(self): - if file_exists('setup.py'): - if dir_exists('tests'): - return True - else: - return False #found setup.py but no tests directory - else: - return False # setup.py not at this level - - def _run_nose(self): - os.system("nosetests --where=tests") - - -#------------------------------------------------------------------------------ -# [ PyTester class ] -# run py.test test runner in the tests directory -# Optional specify the number of directory levels to search bottom to top (default = 4) -#------------------------------------------------------------------------------ -class PyTester: - def __init__(self, dir_levels = 6): - self.number_of_dir_levels = dir_levels - - def run(self): - py_found = False - for i in range(self.number_of_dir_levels): - if not self._is_testdir_at_this_level(): - os.chdir(os.pardir) - else: - py_found = True - self._run_pytests() - break - if not py_found: - stderr("Unable to locate your testing directory", 1) - else: - exit_success() - - def _is_testdir_at_this_level(self): - if file_exists('setup.py'): - if dir_exists('tests'): - return True - else: - return False - else: - return False - - def _run_pytests(self): - os.chdir('tests') - os.system('py.test') - -#------------------------------------------------------------------------------ -# [ UnitTester class ] -# run Python unit tests with the built in unittest methods -# Optional specify the number of directory levels to search bottom to top (default = 4) -#------------------------------------------------------------------------------ -class UnitTester: - def __init__(self, the_unit_test, dir_levels = 6): - self.unittest = the_unit_test - self.number_of_dir_levels = dir_levels - - def run(self): - unit_found = False - for i in range(self.number_of_dir_levels): - if not self._is_testdir_at_this_level(): - os.chdir(os.pardir) - else: - unit_found = True - os.chdir('tests') - if file_exists(self.unittest): - self._run_unittest() - else: - stderr("The unit test file " + self.unittest + " could not be found in the tests directory.") - if not unit_found: - stderr("Unable to locate your testing directory", 1) - else: - exit_success() - - def _is_testdir_at_this_level(self): - if file_exists('setup.py'): - if dir_exists('tests'): - return True - else: - return False - else: - return False - - def _run_unittest(self): - cmd_string = "python " + self.unittest - os.system(cmd_string) - - -def help(): - help_string = """ -Naked test Command Help -======================= -The test command allows you to run unit tests from any working directory in your project. - -USAGE - naked test [argument] - -SECONDARY COMMANDS - nose - run the nose test runner on your project - pytest - run the py.test test runner on your project - tox - run the tox test runner on your project - unittest - run Python unit tests (built-in) - -ARGUMENTS - nose - -- does not take additional arguments - - pytest - -- does not take additional arguments - - tox [python version] - -- You can include an optional tox Python version argument to run your - tests with a single version of Python (instead of the versions - specified in the tox.ini file). By default, the versions specified - in your tox.ini file are run. - - unittest - -- Mandatory unit test file path (relative to the tests directory) - -OPTIONS - none - -EXAMPLES - naked test nose - naked test pytest - naked test tox - naked test tox py27 - naked test unittest test_app.py - -A bottom to top search (from the working directory) is performed over up to 6 directory levels to find the 'tests' directory.""" - print(help_string) - exit_success() - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/usage.py b/venv/lib/python3.6/site-packages/Naked/commands/usage.py deleted file mode 100644 index d297bdd..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/usage.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import Naked.settings -from Naked.toolshed.system import exit_success - -class Usage: - def __init__(self): - self.usage = Naked.settings.usage - - def print_usage(self): - print(self.usage) - exit_success() - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/commands/version.py b/venv/lib/python3.6/site-packages/Naked/commands/version.py deleted file mode 100644 index 46737f4..0000000 --- a/venv/lib/python3.6/site-packages/Naked/commands/version.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import Naked.settings -from Naked.toolshed.system import exit_success - -class Version: - def __init__(self): - self.major_version = Naked.settings.major_version - self.minor_version = Naked.settings.minor_version - self.patch_version = Naked.settings.patch_version - self.name = Naked.settings.app_name - self.app_version_string = self.name + " " + self.major_version + "." + self.minor_version + "." + self.patch_version - self.version_string = self.major_version + "." + self.minor_version + "." + self.patch_version - - def print_version(self): - print(self.app_version_string) - exit_success() - - def get_version(self): - return self.version_string - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/scratchpad.py b/venv/lib/python3.6/site-packages/Naked/scratchpad.py deleted file mode 100644 index cb26348..0000000 --- a/venv/lib/python3.6/site-packages/Naked/scratchpad.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# import sys -# from functools import wraps -# from Naked.toolshed.types import XMaxHeap, XMinHeap - -# def print_scratch(func): -# @wraps(func) -# def print_wrapper(*args, **kwargs): -# print(func(*args, **kwargs)) -# return print_wrapper - - -# def run_scratchpad(): -# # from Naked.toolshed.file import FileReader -# # from Naked.toolshed.types import XString, XUnicode - -# # r = FileReader('/Users/ces/Desktop/code/naked/tests/testfiles/unicode.txt') -# # test1 = r.read_utf8() -# # test2 = XUnicode(test1, {'a': 'b'}) -# # test3 = "Hey! It's Bengali ব য,and here is some more ২" -# # print(unicode(test2)) - - - -# if __name__ == '__main__': -# run_scratchpad() diff --git a/venv/lib/python3.6/site-packages/Naked/settings.py b/venv/lib/python3.6/site-packages/Naked/settings.py deleted file mode 100644 index e5daabd..0000000 --- a/venv/lib/python3.6/site-packages/Naked/settings.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -#------------------------------------------------------------------------------ -# Application Name -#------------------------------------------------------------------------------ -app_name = "naked" - -#------------------------------------------------------------------------------ -# Version Number -#------------------------------------------------------------------------------ -major_version = "0" -minor_version = "1" -patch_version = "31" - -#------------------------------------------------------------------------------ -# Debug Flag (switch to False for production release code) -#------------------------------------------------------------------------------ -debug = False - -#------------------------------------------------------------------------------ -# Usage String -#------------------------------------------------------------------------------ -usage = """ -Usage: naked [secondary command] [option(s)] [argument(s)] ---- Use 'naked help' for detailed help --- -""" - -#------------------------------------------------------------------------------ -# Help String -#------------------------------------------------------------------------------ -help = """ ---------------------------------------------------- - Naked - A Python command line application framework - Copyright 2014 Christopher Simpkins - MIT license ---------------------------------------------------- - -ABOUT - -The Naked framework includes the "naked" executable and the Python toolshed library. The naked executable is a command line tool for application development, testing, profiling, and deployment. The toolshed library contains numerous useful tools for application development that can be used through standard Python module imports. These features are detailed in the documentation (link below). - -USAGE - -The naked executable syntax is: - - naked [secondary command] [option(s)] [argument(s)] - -The is mandatory and includes one of the commands in the following section. The [bracketed] syntax structure is optional and dependent upon the primary command that you use. Use the command 'naked help' for details about a command. - -PRIMARY COMMANDS SECONDARY COMMANDS - - args help - build help - classify help - dist all•help•sdist•swheel•wheel•win - help - none - - locate main•help•settings•setup - make help - profile help - pyh help - test nose•pytest•tox•unittest - usage - none - - version - none - - -HELP - -To learn more about a primary command, use the following syntax: - - naked help - -DOCUMENTATION - - http://docs.naked-py.com - -SOURCE REPOSITORY - - https://github.com/chrissimpkins/naked - -ISSUE REPORTING - - https://github.com/chrissimpkins/naked/issues - -""" - diff --git a/venv/lib/python3.6/site-packages/Naked/templates/__init__.py b/venv/lib/python3.6/site-packages/Naked/templates/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/Naked/templates/app_file.py b/venv/lib/python3.6/site-packages/Naked/templates/app_file.py deleted file mode 100644 index ff5cf42..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/app_file.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS = app_name, developer, license_name, year -app_file_string = """ -#!/usr/bin/env python -# encoding: utf-8 - -#------------------------------------------------------------------------------ -# {{app_name}} -# Copyright {{year}} {{developer}} -# {{license}} -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------------ -# c.cmd = Primary command ({{app_name}} ) -# c.cmd2 = Secondary command ({{app_name}} ) -# -# c.arg_to_cmd = first positional argument to the primary command -# c.arg_to_cmd2 = first positional argument to the secondary command -# -# c.option(option_string, [bool argument_required]) = test for option with optional positional argument to option test -# c.option_with_arg(option_string) = test for option and mandatory positional argument to option -# c.flag(flag_string) = test for presence of a "option=argument" style flag -# -# c.arg(arg_string) = returns the next positional argument to the arg_string argument -# c.flag_arg(flag_string) = returns the flag assignment for a "--option=argument" style flag -#------------------------------------------------------------------------------------ - -# Application start -def main(): - import sys - from Naked.commandline import Command - from Naked.toolshed.state import StateObject - - #------------------------------------------------------------------------------------------ - # [ Instantiate command line object ] - # used for all subsequent conditional logic in the CLI application - #------------------------------------------------------------------------------------------ - c = Command(sys.argv[0], sys.argv[1:]) - #------------------------------------------------------------------------------ - # [ Instantiate state object ] - #------------------------------------------------------------------------------ - state = StateObject() - #------------------------------------------------------------------------------------------ - # [ Command Suite Validation ] - early validation of appropriate command syntax - # Test that user entered at least one argument to the executable, print usage if not - #------------------------------------------------------------------------------------------ - if not c.command_suite_validates(): - from {{app_name}}.settings import usage as {{app_name}}_usage - print({{app_name}}_usage) - sys.exit(1) - #------------------------------------------------------------------------------------------ - # [ NAKED FRAMEWORK COMMANDS ] - # Naked framework provides default help, usage, and version commands for all applications - # --> settings for user messages are assigned in the lib/{{app_name}}/settings.py file - #------------------------------------------------------------------------------------------ - if c.help(): # User requested {{app_name}} help information - from {{app_name}}.settings import help as {{app_name}}_help - print({{app_name}}_help) - sys.exit(0) - elif c.usage(): # User requested {{app_name}} usage information - from {{app_name}}.settings import usage as {{app_name}}_usage - print({{app_name}}_usage) - sys.exit(0) - elif c.version(): # User requested {{app_name}} version information - from {{app_name}}.settings import app_name, major_version, minor_version, patch_version - version_display_string = app_name + ' ' + major_version + '.' + minor_version + '.' + patch_version - print(version_display_string) - sys.exit(0) - #------------------------------------------------------------------------------------------ - # [ PRIMARY COMMAND LOGIC ] - # Enter your command line parsing logic below - #------------------------------------------------------------------------------------------ - - # [[ Example usage ]] ------------------------------->>> - # if c.cmd == 'hello': - # if c.cmd2 = 'world': - # if c.option('--print'): - # print('Hello World!') - # elif c.cmd == 'spam': - # if c.option_with_arg('--with'): - # friend_of_spam = c.arg('--with') # user enters {{app_name}} spam --with eggs - # print('spam and ' + friend_of_spam) # prints 'spam and eggs' - # elif c.cmd == 'naked': - # if c.flag("--language"): - # lang = c.flag_arg("--language") # user enters {{app_name}} naked --language=python - # print("Naked & " + lang) # prints 'Naked & python' - # End example --------------------------------------->>> - - #------------------------------------------------------------------------------------------ - # [ DEFAULT MESSAGE FOR MATCH FAILURE ] - # Message to provide to the user when all above conditional logic fails to meet a true condition - #------------------------------------------------------------------------------------------ - else: - print("Could not complete the command that you entered. Please try again.") - sys.exit(1) #exit - -if __name__ == '__main__': - main() -""" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/licenses.py b/venv/lib/python3.6/site-packages/Naked/templates/licenses.py deleted file mode 100644 index dfcbd7b..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/licenses.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# ALL LICENSES: VARS = year, developer - -#------------------------------------------------------------------------------ -# [ apache_license ] -# The Apache License -#------------------------------------------------------------------------------ -apache_license = """ -Copyright {{year}} {{developer}} - -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. -""" - -#------------------------------------------------------------------------------ -# [ bsd_license ] -# The BSD 2-clause license -#------------------------------------------------------------------------------ -bsd_license = """ -Copyright (c) {{year}}, {{developer}} -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" - -#------------------------------------------------------------------------------ -# [ gpl3_license ] -# The GPL v3 License -#------------------------------------------------------------------------------ -gpl3_license = """ -Copyright (C) {{year}} {{developer}} - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see [http://www.gnu.org/licenses/]. -""" - -#------------------------------------------------------------------------------ -# [lgpl_license ] -# The Lesser GPL license -#------------------------------------------------------------------------------ -lgpl_license = """ -Copyright (C) {{year}} {{developer}} - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 -USA -""" - -#------------------------------------------------------------------------------ -# [ mit_license ] -# The MIT License -#------------------------------------------------------------------------------ -mit_license = """ -The MIT License (MIT) - -Copyright (c) {{year}} {{developer}} - -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. -""" - -#------------------------------------------------------------------------------ -# [ mozilla_license ] -# The Mozilla Public license, v2.0 -#------------------------------------------------------------------------------ -mozilla_license = """ -Mozilla Public License, v.2.0 - -Copyright (c) {{year}} {{developer}} - -This Source Code Form is subject to the terms of the Mozilla Public License, v.2.0. - -If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -""" - diff --git a/venv/lib/python3.6/site-packages/Naked/templates/manifest_in_file.py b/venv/lib/python3.6/site-packages/Naked/templates/manifest_in_file.py deleted file mode 100644 index 16e1454..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/manifest_in_file.py +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS = --none-- -manifest_file_string = "recursive-include docs *" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/profiler_file.py b/venv/lib/python3.6/site-packages/Naked/templates/profiler_file.py deleted file mode 100644 index 2b5ccee..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/profiler_file.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS = --none-- -profiler_file_string = """ -#!/usr/bin/env python -# encoding: utf-8 - -import cProfile, pstats, StringIO - -def profile(): - #------------------------------------------------------------------------------ - # Setup a profile - #------------------------------------------------------------------------------ - pr = cProfile.Profile() - #------------------------------------------------------------------------------ - # Enter setup code below - #------------------------------------------------------------------------------ - # Optional: include setup code here - - - #------------------------------------------------------------------------------ - # Start profiler - #------------------------------------------------------------------------------ - pr.enable() - - #------------------------------------------------------------------------------ - # BEGIN profiled code block - #------------------------------------------------------------------------------ - # include profiled code here - - - #------------------------------------------------------------------------------ - # END profiled code block - #------------------------------------------------------------------------------ - pr.disable() - s = StringIO.StringIO() - sortby = 'cumulative' - ps = pstats.Stats(pr, stream=s).sort_stats(sortby) - ps.strip_dirs().sort_stats("time").print_stats() - print(s.getvalue()) - -if __name__ == '__main__': - profile() -""" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/pypush_file.py b/venv/lib/python3.6/site-packages/Naked/templates/pypush_file.py deleted file mode 100644 index 414c3cd..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/pypush_file.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS = year -pypush_file_string = """ -#!/bin/sh -# Scriptacular - pypush.sh -# Create a Python source distribution and push it to PyPI -# Copyright {{year}} Christopher Simpkins -# MIT License - - -# Build and push to PyPI -python setup.py sdist upload - -# Confirm that it worked -if (( $? )); then - echo "Unable to distribute your release to PyPI" >&2 - exit 1 -fi - -python setup.py bdist_wheel upload - -# Confirm that wheel distribution worked -if (( $? )); then - echo "Unable to distribute your wheel to PyPI" >&2 - exit 1 -fi - -# Exit success -exit 0 -""" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/readme_md_file.py b/venv/lib/python3.6/site-packages/Naked/templates/readme_md_file.py deleted file mode 100644 index 4bb5b0f..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/readme_md_file.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS: app_name -readme_md_string = """ -{{app_name}} -===== -""" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/settings_file.py b/venv/lib/python3.6/site-packages/Naked/templates/settings_file.py deleted file mode 100644 index ba5fddf..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/settings_file.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS = app_name -settings_file_string = """ -#!/usr/bin/env python -# encoding: utf-8 - -#------------------------------------------------------------------------------ -# Application Name -#------------------------------------------------------------------------------ -app_name = '{{app_name}}' - -#------------------------------------------------------------------------------ -# Version Number -#------------------------------------------------------------------------------ -major_version = "0" -minor_version = "1" -patch_version = "0" - -#------------------------------------------------------------------------------ -# Debug Flag (switch to False for production release code) -#------------------------------------------------------------------------------ -debug = True - -#------------------------------------------------------------------------------ -# Usage String -#------------------------------------------------------------------------------ -usage = '' - -#------------------------------------------------------------------------------ -# Help String -#------------------------------------------------------------------------------ -help = '' -""" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/setup_cfg_file.py b/venv/lib/python3.6/site-packages/Naked/templates/setup_cfg_file.py deleted file mode 100644 index b3c096d..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/setup_cfg_file.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS: --none-- -setup_cfg_string = """ -[wheel] -universal = 1 -""" diff --git a/venv/lib/python3.6/site-packages/Naked/templates/setup_py_file.py b/venv/lib/python3.6/site-packages/Naked/templates/setup_py_file.py deleted file mode 100644 index 3b1bc54..0000000 --- a/venv/lib/python3.6/site-packages/Naked/templates/setup_py_file.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -# VARS: app_name, developer, license -setup_py_string = (""" -import os -import re -from setuptools import setup, find_packages - - -def docs_read(fname): - return open(os.path.join(os.path.dirname(__file__), 'docs', fname)).read() - -def version_read(): - settings_file = open(os.path.join(os.path.dirname(__file__), 'lib', '{{app_name}}', 'settings.py')).read() - major_regex = """ + '"""' + """major_version\s*?=\s*?["']{1}(\d+)["']{1}""" + '"""' + '\n ' + - 'minor_regex = ' + '"""' + """minor_version\s*?=\s*?["']{1}(\d+)["']{1}""" + '"""' + '\n ' + - 'patch_regex = ' + '"""' + """patch_version\s*?=\s*?["']{1}(\d+)["']{1}""" + '"""' + '\n ' + - """major_match = re.search(major_regex, settings_file) - minor_match = re.search(minor_regex, settings_file) - patch_match = re.search(patch_regex, settings_file) - major_version = major_match.group(1) - minor_version = minor_match.group(1) - patch_version = patch_match.group(1) - if len(major_version) == 0: - major_version = 0 - if len(minor_version) == 0: - minor_version = 0 - if len(patch_version) == 0: - patch_version = 0 - return major_version + "." + minor_version + "." + patch_version - - -setup( - name='{{app_name}}', - version=version_read(), - description='', - long_description=(docs_read('README.rst')), - url='', - license='{{license}}', - author='{{developer}}', - author_email='', - platforms=['any'], - entry_points = { - 'console_scripts': [ - '{{app_name}} = {{app_name}}.app:main' - ], - }, - packages=find_packages("lib"), - package_dir={'': 'lib'}, - install_requires=['Naked'], - keywords='', - include_package_data=True, - classifiers=[], -) -""") diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/__init__.py b/venv/lib/python3.6/site-packages/Naked/toolshed/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/benchmarking.py b/venv/lib/python3.6/site-packages/Naked/toolshed/benchmarking.py deleted file mode 100644 index 63878bc..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/benchmarking.py +++ /dev/null @@ -1,463 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -import time -import gc -from functools import wraps - -#------------------------------------------------------------------------------ -# [ timer function decorator ] -# runs timed repetitions of the decorated function in a single trial -# default is 100,000 repetitions in the trial -# reports the results of the trial -# Usage example: -# from Naked.toolshed.benchmarking import timer -# @timer -# def myfunction(): -#------------------------------------------------------------------------------ -def timer(func, repetitions=100000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -#------------------------------------------------------------------------------ -# [ timer_X function decorators ] -# replicate the above decorator with different number of repetitions -#------------------------------------------------------------------------------ - -def timer_10(func, repetitions=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_100(func, repetitions=100): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_1k(func, repetitions=1000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_10k(func, repetitions=10000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_1m(func, repetitions=1000000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -#------------------------------------------------------------------------------ -# [ timer_trials_benchmark decorator function ] -# time a function and compare to a benchmark function -# default is 10 trials x 100,000 repetitions/trial for each function -# Results: -# - Mean of the 10 trials of the test function -# - standard deviation of the 10 trials (if numpy is available) -# - result for 100,000 repetitions of the benchmark function -# - ratio of the test : benchmark function results -# Usage example: -# from Naked.toolshed.benchmarking import timer_trials_benchmark -# @timer_trials_benchmark -# def myfunction(): -#------------------------------------------------------------------------------ -def timer_trials_benchmark(func, repetitions=100000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -#------------------------------------------------------------------------------ -# [ timer_trials_benchmark_X decorators ] -# additional benchmark decorators that replicate the above function with different # repetitions -#------------------------------------------------------------------------------ -def timer_trials_benchmark_10(func, repetitions=10, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_100(func, repetitions=100, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/__init__.py b/venv/lib/python3.6/site-packages/Naked/toolshed/c/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.c deleted file mode 100644 index c17440d..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.c +++ /dev/null @@ -1,16546 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:12 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__benchmarking -#define __PYX_HAVE_API__lib__Naked__toolshed__c__benchmarking -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "benchmarking.pyx", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m; - -/* "lib/Naked/toolshed/c/benchmarking.pyx":19 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":43 - * #------------------------------------------------------------------------------ - * - * def timer_10(func, repetitions=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":62 - * return wrapper - * - * def timer_100(func, repetitions=100): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":81 - * return wrapper - * - * def timer_1k(func, repetitions=1000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":100 - * return wrapper - * - * def timer_10k(func, repetitions=10000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":119 - * return wrapper - * - * def timer_1m(func, repetitions=1000000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":152 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; - PyObject *__pyx_v_trials; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":207 - * # additional benchmark decorators that replicate the above function with different # repetitions - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; - PyObject *__pyx_v_trials; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":258 - * return wrapper - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; - PyObject *__pyx_v_trials; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":309 - * return wrapper - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; - PyObject *__pyx_v_trials; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":360 - * return wrapper - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; - PyObject *__pyx_v_trials; -}; - - -/* "lib/Naked/toolshed/c/benchmarking.pyx":411 - * return wrapper - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m { - PyObject_HEAD - PyObject *__pyx_v_func; - PyObject *__pyx_v_repetitions; - PyObject *__pyx_v_trials; -}; - -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -#include - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ -#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 -static PyObject* __pyx_print = 0; -static PyObject* __pyx_print_kwargs = 0; -#endif - -static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.benchmarking' */ -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m = 0; -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.benchmarking" -int __pyx_module_is_main_lib__Naked__toolshed__c__benchmarking = 0; - -/* Implementation of 'lib.Naked.toolshed.c.benchmarking' */ -static PyObject *__pyx_builtin_range; -static PyObject *__pyx_builtin_sum; -static PyObject *__pyx_builtin_ImportError; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_timer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_2timer_10(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_4timer_100(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_6timer_1k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_10timer_1m(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_12timer_trials_benchmark(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_14timer_trials_benchmark_10(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_16timer_trials_benchmark_100(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_18timer_trials_benchmark_1k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_20timer_trials_benchmark_10k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1m(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials); /* proto */ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static char __pyx_k_[] = "()..."; -static char __pyx_k_L[] = "L"; -static char __pyx_k_i[] = "i"; -static char __pyx_k_j[] = "j"; -static char __pyx_k_n[] = "n"; -static char __pyx_k_x[] = "x"; -static char __pyx_k_y[] = "y"; -static char __pyx_k__2[] = " "; -static char __pyx_k__3[] = " : "; -static char __pyx_k_gc[] = "gc"; -static char __pyx_k_ie[] = "ie"; -static char __pyx_k_np[] = "np"; -static char __pyx_k__16[] = "()"; -static char __pyx_k__17[] = "."; -static char __pyx_k__19[] = ":\t"; -static char __pyx_k__20[] = "-"; -static char __pyx_k_end[] = "end"; -static char __pyx_k_run[] = "run"; -static char __pyx_k_sec[] = " sec"; -static char __pyx_k_std[] = "std"; -static char __pyx_k_sum[] = "sum"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_args[] = "args"; -static char __pyx_k_end2[] = "end2"; -static char __pyx_k_file[] = "file"; -static char __pyx_k_func[] = "func"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_mean[] = "mean"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_time[] = "time"; -static char __pyx_k_Ratio[] = "Ratio: "; -static char __pyx_k_Trial[] = "Trial "; -static char __pyx_k_array[] = "array"; -static char __pyx_k_flush[] = "flush"; -static char __pyx_k_numpy[] = "numpy"; -static char __pyx_k_print[] = "print"; -static char __pyx_k_range[] = "range"; -static char __pyx_k_start[] = "start"; -static char __pyx_k_timer[] = "timer"; -static char __pyx_k_wraps[] = "wraps"; -static char __pyx_k_write[] = "write"; -static char __pyx_k_enable[] = "enable"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_kwargs[] = "kwargs"; -static char __pyx_k_result[] = "result"; -static char __pyx_k_start2[] = "start2"; -static char __pyx_k_stdout[] = "stdout"; -static char __pyx_k_trials[] = "trials"; -static char __pyx_k_collect[] = "collect"; -static char __pyx_k_disable[] = "disable"; -static char __pyx_k_wrapper[] = "wrapper"; -static char __pyx_k_Mean_for[] = "Mean for "; -static char __pyx_k_Starting[] = "Starting "; -static char __pyx_k_timer_10[] = "timer_10"; -static char __pyx_k_timer_1k[] = "timer_1k"; -static char __pyx_k_timer_1m[] = "timer_1m"; -static char __pyx_k_functools[] = "functools"; -static char __pyx_k_timer_100[] = "timer_100"; -static char __pyx_k_timer_10k[] = "timer_10k"; -static char __pyx_k_ImportError[] = "ImportError"; -static char __pyx_k_repetitions[] = "repetitions"; -static char __pyx_k_result_list[] = "result_list"; -static char __pyx_k_repetitions_2[] = " repetitions: "; -static char __pyx_k_benchmark_list[] = "benchmark_list"; -static char __pyx_k_mean_benchmark[] = "mean_benchmark"; -static char __pyx_k_repetitions_of[] = " repetitions of "; -static char __pyx_k_Standard_Deviation[] = "Standard Deviation: "; -static char __pyx_k_Mean_per_repetition[] = "Mean per repetition: "; -static char __pyx_k_timer_locals_wrapper[] = "timer..wrapper"; -static char __pyx_k_of_benchmark_function[] = " of benchmark function:"; -static char __pyx_k_timer_trials_benchmark[] = "timer_trials_benchmark"; -static char __pyx_k_timer_10_locals_wrapper[] = "timer_10..wrapper"; -static char __pyx_k_timer_1k_locals_wrapper[] = "timer_1k..wrapper"; -static char __pyx_k_timer_1m_locals_wrapper[] = "timer_1m..wrapper"; -static char __pyx_k_Starting_timed_trials_of[] = "Starting timed trials of "; -static char __pyx_k_timer_100_locals_wrapper[] = "timer_100..wrapper"; -static char __pyx_k_timer_10k_locals_wrapper[] = "timer_10k..wrapper"; -static char __pyx_k_timer_trials_benchmark_10[] = "timer_trials_benchmark_10"; -static char __pyx_k_timer_trials_benchmark_1k[] = "timer_trials_benchmark_1k"; -static char __pyx_k_timer_trials_benchmark_1m[] = "timer_trials_benchmark_1m"; -static char __pyx_k_timer_trials_benchmark_100[] = "timer_trials_benchmark_100"; -static char __pyx_k_timer_trials_benchmark_10k[] = "timer_trials_benchmark_10k"; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/benchmarking.pyx"; -static char __pyx_k_lib_Naked_toolshed_c_benchmarkin[] = "lib.Naked.toolshed.c.benchmarking"; -static char __pyx_k_timer_trials_benchmark_100_local[] = "timer_trials_benchmark_100..wrapper"; -static char __pyx_k_timer_trials_benchmark_10_locals[] = "timer_trials_benchmark_10..wrapper"; -static char __pyx_k_timer_trials_benchmark_10k_local[] = "timer_trials_benchmark_10k..wrapper"; -static char __pyx_k_timer_trials_benchmark_1k_locals[] = "timer_trials_benchmark_1k..wrapper"; -static char __pyx_k_timer_trials_benchmark_1m_locals[] = "timer_trials_benchmark_1m..wrapper"; -static char __pyx_k_timer_trials_benchmark_locals_wr[] = "timer_trials_benchmark..wrapper"; -static PyObject *__pyx_kp_s_; -static PyObject *__pyx_n_s_ImportError; -static PyObject *__pyx_n_s_L; -static PyObject *__pyx_kp_s_Mean_for; -static PyObject *__pyx_kp_s_Mean_per_repetition; -static PyObject *__pyx_kp_s_Ratio; -static PyObject *__pyx_kp_s_Standard_Deviation; -static PyObject *__pyx_kp_s_Starting; -static PyObject *__pyx_kp_s_Starting_timed_trials_of; -static PyObject *__pyx_kp_s_Trial; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_kp_s__16; -static PyObject *__pyx_kp_s__17; -static PyObject *__pyx_kp_s__19; -static PyObject *__pyx_kp_s__2; -static PyObject *__pyx_kp_s__20; -static PyObject *__pyx_kp_s__3; -static PyObject *__pyx_n_s_args; -static PyObject *__pyx_n_s_array; -static PyObject *__pyx_n_s_benchmark_list; -static PyObject *__pyx_n_s_collect; -static PyObject *__pyx_n_s_disable; -static PyObject *__pyx_n_s_enable; -static PyObject *__pyx_n_s_end; -static PyObject *__pyx_n_s_end2; -static PyObject *__pyx_n_s_file; -static PyObject *__pyx_n_s_flush; -static PyObject *__pyx_n_s_func; -static PyObject *__pyx_n_s_functools; -static PyObject *__pyx_n_s_gc; -static PyObject *__pyx_n_s_i; -static PyObject *__pyx_n_s_ie; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_j; -static PyObject *__pyx_n_s_kwargs; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_benchmarkin; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_mean; -static PyObject *__pyx_n_s_mean_benchmark; -static PyObject *__pyx_n_s_n; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_np; -static PyObject *__pyx_n_s_numpy; -static PyObject *__pyx_kp_s_of_benchmark_function; -static PyObject *__pyx_n_s_print; -static PyObject *__pyx_n_s_range; -static PyObject *__pyx_n_s_repetitions; -static PyObject *__pyx_kp_s_repetitions_2; -static PyObject *__pyx_kp_s_repetitions_of; -static PyObject *__pyx_n_s_result; -static PyObject *__pyx_n_s_result_list; -static PyObject *__pyx_n_s_run; -static PyObject *__pyx_kp_s_sec; -static PyObject *__pyx_n_s_start; -static PyObject *__pyx_n_s_start2; -static PyObject *__pyx_n_s_std; -static PyObject *__pyx_n_s_stdout; -static PyObject *__pyx_n_s_sum; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_time; -static PyObject *__pyx_n_s_timer; -static PyObject *__pyx_n_s_timer_10; -static PyObject *__pyx_n_s_timer_100; -static PyObject *__pyx_n_s_timer_100_locals_wrapper; -static PyObject *__pyx_n_s_timer_10_locals_wrapper; -static PyObject *__pyx_n_s_timer_10k; -static PyObject *__pyx_n_s_timer_10k_locals_wrapper; -static PyObject *__pyx_n_s_timer_1k; -static PyObject *__pyx_n_s_timer_1k_locals_wrapper; -static PyObject *__pyx_n_s_timer_1m; -static PyObject *__pyx_n_s_timer_1m_locals_wrapper; -static PyObject *__pyx_n_s_timer_locals_wrapper; -static PyObject *__pyx_n_s_timer_trials_benchmark; -static PyObject *__pyx_n_s_timer_trials_benchmark_10; -static PyObject *__pyx_n_s_timer_trials_benchmark_100; -static PyObject *__pyx_n_s_timer_trials_benchmark_100_local; -static PyObject *__pyx_n_s_timer_trials_benchmark_10_locals; -static PyObject *__pyx_n_s_timer_trials_benchmark_10k; -static PyObject *__pyx_n_s_timer_trials_benchmark_10k_local; -static PyObject *__pyx_n_s_timer_trials_benchmark_1k; -static PyObject *__pyx_n_s_timer_trials_benchmark_1k_locals; -static PyObject *__pyx_n_s_timer_trials_benchmark_1m; -static PyObject *__pyx_n_s_timer_trials_benchmark_1m_locals; -static PyObject *__pyx_n_s_timer_trials_benchmark_locals_wr; -static PyObject *__pyx_n_s_trials; -static PyObject *__pyx_n_s_wrapper; -static PyObject *__pyx_n_s_wraps; -static PyObject *__pyx_n_s_write; -static PyObject *__pyx_n_s_x; -static PyObject *__pyx_n_s_y; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_10; -static PyObject *__pyx_int_50; -static PyObject *__pyx_int_100; -static PyObject *__pyx_int_1000; -static PyObject *__pyx_int_10000; -static PyObject *__pyx_int_100000; -static PyObject *__pyx_int_1000000; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__24; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__30; -static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__33; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__36; -static PyObject *__pyx_tuple__38; -static PyObject *__pyx_tuple__40; -static PyObject *__pyx_tuple__42; -static PyObject *__pyx_tuple__44; -static PyObject *__pyx_tuple__46; -static PyObject *__pyx_tuple__48; -static PyObject *__pyx_tuple__50; -static PyObject *__pyx_tuple__52; -static PyObject *__pyx_tuple__54; -static PyObject *__pyx_tuple__56; -static PyObject *__pyx_tuple__58; -static PyObject *__pyx_tuple__60; -static PyObject *__pyx_codeobj__5; -static PyObject *__pyx_codeobj__7; -static PyObject *__pyx_codeobj__9; -static PyObject *__pyx_codeobj__11; -static PyObject *__pyx_codeobj__13; -static PyObject *__pyx_codeobj__15; -static PyObject *__pyx_codeobj__22; -static PyObject *__pyx_codeobj__25; -static PyObject *__pyx_codeobj__28; -static PyObject *__pyx_codeobj__31; -static PyObject *__pyx_codeobj__34; -static PyObject *__pyx_codeobj__37; -static PyObject *__pyx_codeobj__39; -static PyObject *__pyx_codeobj__41; -static PyObject *__pyx_codeobj__43; -static PyObject *__pyx_codeobj__45; -static PyObject *__pyx_codeobj__47; -static PyObject *__pyx_codeobj__49; -static PyObject *__pyx_codeobj__51; -static PyObject *__pyx_codeobj__53; -static PyObject *__pyx_codeobj__55; -static PyObject *__pyx_codeobj__57; -static PyObject *__pyx_codeobj__59; -static PyObject *__pyx_codeobj__61; - -/* "lib/Naked/toolshed/c/benchmarking.pyx":19 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_1timer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_1timer = {__Pyx_NAMESTR("timer"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_1timer, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_1timer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_100000); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_timer(__pyx_self, __pyx_v_func, __pyx_v_repetitions); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":21 - * def timer(func, repetitions=100000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *__pyx_outer_scope; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":22 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * print(" ") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Starting, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":23 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * print(" ") - * # disable garbage collection - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":24 - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - * print(" ") # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":26 - * print(" ") - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * start = time.time() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":27 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * start = time.time() - * for x in range(repetitions): - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":28 - * gc.collect() - * gc.disable() - * start = time.time() # <<<<<<<<<<<<<< - * for x in range(repetitions): - * result = func(*args, **kwargs) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":29 - * gc.disable() - * start = time.time() - * for x in range(repetitions): # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":30 - * start = time.time() - * for x in range(repetitions): - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * gc.enable() # re-enable garbage collection - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":31 - * for x in range(repetitions): - * result = func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_end = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":32 - * result = func(*args, **kwargs) - * end = time.time() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_enable); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":33 - * end = time.time() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":34 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_sec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":35 - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":21 - * def timer(func, repetitions=100000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":19 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_timer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":20 - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":21 - * def timer(func, repetitions=100000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_1wrapper, 0, __pyx_n_s_timer_locals_wrapper, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":20 - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":36 - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":19 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":43 - * #------------------------------------------------------------------------------ - * - * def timer_10(func, repetitions=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_3timer_10(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_3timer_10 = {__Pyx_NAMESTR("timer_10"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_3timer_10, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_3timer_10(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_10 (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_10") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_10", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_10", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_2timer_10(__pyx_self, __pyx_v_func, __pyx_v_repetitions); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":45 - * def timer_10(func, repetitions=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *__pyx_outer_scope; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":46 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * print(" ") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Starting, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":47 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * print(" ") - * # disable garbage collection - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":48 - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - * print(" ") # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":50 - * print(" ") - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * start = time.time() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":51 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * start = time.time() - * for x in range(repetitions): - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":52 - * gc.collect() - * gc.disable() - * start = time.time() # <<<<<<<<<<<<<< - * for x in range(repetitions): - * result = func(*args, **kwargs) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":53 - * gc.disable() - * start = time.time() - * for x in range(repetitions): # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":54 - * start = time.time() - * for x in range(repetitions): - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * gc.enable() # re-enable garbage collection - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":55 - * for x in range(repetitions): - * result = func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_end = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":56 - * result = func(*args, **kwargs) - * end = time.time() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_enable); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":57 - * end = time.time() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":58 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_sec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":59 - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":45 - * def timer_10(func, repetitions=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_10.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":43 - * #------------------------------------------------------------------------------ - * - * def timer_10(func, repetitions=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_2timer_10(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_10", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":44 - * - * def timer_10(func, repetitions=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":45 - * def timer_10(func, repetitions=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10_1wrapper, 0, __pyx_n_s_timer_10_locals_wrapper, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":44 - * - * def timer_10(func, repetitions=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":60 - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_100(func, repetitions=100): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":43 - * #------------------------------------------------------------------------------ - * - * def timer_10(func, repetitions=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_10", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":62 - * return wrapper - * - * def timer_100(func, repetitions=100): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_100(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_100 = {__Pyx_NAMESTR("timer_100"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_100, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_100(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_100 (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_100); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_100") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_100", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_100", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_4timer_100(__pyx_self, __pyx_v_func, __pyx_v_repetitions); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":64 - * def timer_100(func, repetitions=100): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *__pyx_outer_scope; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":65 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * print(" ") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Starting, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":66 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * print(" ") - * # disable garbage collection - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":67 - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - * print(" ") # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":69 - * print(" ") - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * start = time.time() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":70 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * start = time.time() - * for x in range(repetitions): - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":71 - * gc.collect() - * gc.disable() - * start = time.time() # <<<<<<<<<<<<<< - * for x in range(repetitions): - * result = func(*args, **kwargs) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":72 - * gc.disable() - * start = time.time() - * for x in range(repetitions): # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":73 - * start = time.time() - * for x in range(repetitions): - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * gc.enable() # re-enable garbage collection - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":74 - * for x in range(repetitions): - * result = func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_end = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":75 - * result = func(*args, **kwargs) - * end = time.time() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_enable); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":76 - * end = time.time() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":77 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_sec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":78 - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":64 - * def timer_100(func, repetitions=100): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_100.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":62 - * return wrapper - * - * def timer_100(func, repetitions=100): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_4timer_100(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_100", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":63 - * - * def timer_100(func, repetitions=100): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":64 - * def timer_100(func, repetitions=100): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_100_1wrapper, 0, __pyx_n_s_timer_100_locals_wrapper, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":63 - * - * def timer_100(func, repetitions=100): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":79 - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_1k(func, repetitions=1000): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":62 - * return wrapper - * - * def timer_100(func, repetitions=100): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_100", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":81 - * return wrapper - * - * def timer_1k(func, repetitions=1000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_7timer_1k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_7timer_1k = {__Pyx_NAMESTR("timer_1k"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_7timer_1k, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_7timer_1k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_1k (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_1000); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_1k") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_1k", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_1k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_6timer_1k(__pyx_self, __pyx_v_func, __pyx_v_repetitions); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":83 - * def timer_1k(func, repetitions=1000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *__pyx_outer_scope; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":84 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * print(" ") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Starting, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":85 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * print(" ") - * # disable garbage collection - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":86 - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - * print(" ") # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":88 - * print(" ") - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * start = time.time() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":89 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * start = time.time() - * for x in range(repetitions): - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":90 - * gc.collect() - * gc.disable() - * start = time.time() # <<<<<<<<<<<<<< - * for x in range(repetitions): - * result = func(*args, **kwargs) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":91 - * gc.disable() - * start = time.time() - * for x in range(repetitions): # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":92 - * start = time.time() - * for x in range(repetitions): - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * gc.enable() # re-enable garbage collection - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":93 - * for x in range(repetitions): - * result = func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_end = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":94 - * result = func(*args, **kwargs) - * end = time.time() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_enable); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":95 - * end = time.time() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":96 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_sec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":97 - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":83 - * def timer_1k(func, repetitions=1000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_1k.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":81 - * return wrapper - * - * def timer_1k(func, repetitions=1000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_6timer_1k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_1k", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":82 - * - * def timer_1k(func, repetitions=1000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":83 - * def timer_1k(func, repetitions=1000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1k_1wrapper, 0, __pyx_n_s_timer_1k_locals_wrapper, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":82 - * - * def timer_1k(func, repetitions=1000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":98 - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_10k(func, repetitions=10000): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":81 - * return wrapper - * - * def timer_1k(func, repetitions=1000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_1k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":100 - * return wrapper - * - * def timer_10k(func, repetitions=10000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k = {__Pyx_NAMESTR("timer_10k"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_10k (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_10000); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_10k") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_10k", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_10k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10k(__pyx_self, __pyx_v_func, __pyx_v_repetitions); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":102 - * def timer_10k(func, repetitions=10000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *__pyx_outer_scope; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":103 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * print(" ") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Starting, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":104 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * print(" ") - * # disable garbage collection - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":105 - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - * print(" ") # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":107 - * print(" ") - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * start = time.time() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":108 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * start = time.time() - * for x in range(repetitions): - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":109 - * gc.collect() - * gc.disable() - * start = time.time() # <<<<<<<<<<<<<< - * for x in range(repetitions): - * result = func(*args, **kwargs) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":110 - * gc.disable() - * start = time.time() - * for x in range(repetitions): # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":111 - * start = time.time() - * for x in range(repetitions): - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * gc.enable() # re-enable garbage collection - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":112 - * for x in range(repetitions): - * result = func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_end = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":113 - * result = func(*args, **kwargs) - * end = time.time() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_enable); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":114 - * end = time.time() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":115 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_sec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":116 - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":102 - * def timer_10k(func, repetitions=10000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_10k.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":100 - * return wrapper - * - * def timer_10k(func, repetitions=10000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_10k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_10k", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":101 - * - * def timer_10k(func, repetitions=10000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":102 - * def timer_10k(func, repetitions=10000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k_1wrapper, 0, __pyx_n_s_timer_10k_locals_wrapper, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":101 - * - * def timer_10k(func, repetitions=10000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":117 - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_1m(func, repetitions=1000000): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":100 - * return wrapper - * - * def timer_10k(func, repetitions=10000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_10k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":119 - * return wrapper - * - * def timer_1m(func, repetitions=1000000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_11timer_1m(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_11timer_1m = {__Pyx_NAMESTR("timer_1m"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_11timer_1m, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_11timer_1m(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_1m (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_1000000); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_1m") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_1m", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_1m", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_10timer_1m(__pyx_self, __pyx_v_func, __pyx_v_repetitions); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":121 - * def timer_1m(func, repetitions=1000000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *__pyx_outer_scope; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":122 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * print(" ") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Starting, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":123 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * print(" ") - * # disable garbage collection - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":124 - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - * print(" ") # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":126 - * print(" ") - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * start = time.time() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":127 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * start = time.time() - * for x in range(repetitions): - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":128 - * gc.collect() - * gc.disable() - * start = time.time() # <<<<<<<<<<<<<< - * for x in range(repetitions): - * result = func(*args, **kwargs) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_start = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":129 - * gc.disable() - * start = time.time() - * for x in range(repetitions): # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_4 = __pyx_t_2; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":130 - * start = time.time() - * for x in range(repetitions): - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * gc.enable() # re-enable garbage collection - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_3); - __pyx_t_3 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":131 - * for x in range(repetitions): - * result = func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_end = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":132 - * result = func(*args, **kwargs) - * end = time.time() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_enable); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":133 - * end = time.time() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_collect); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":134 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_repetitions_of); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_kp_s__3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_sec); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":135 - * gc.collect() - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":121 - * def timer_1m(func, repetitions=1000000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_1m.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":119 - * return wrapper - * - * def timer_1m(func, repetitions=1000000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_10timer_1m(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_1m", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":120 - * - * def timer_1m(func, repetitions=1000000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":121 - * def timer_1m(func, repetitions=1000000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_8timer_1m_1wrapper, 0, __pyx_n_s_timer_1m_locals_wrapper, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":120 - * - * def timer_1m(func, repetitions=1000000): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":136 - * print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":119 - * return wrapper - * - * def timer_1m(func, repetitions=1000000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_1m", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":152 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_13timer_trials_benchmark(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_13timer_trials_benchmark = {__Pyx_NAMESTR("timer_trials_benchmark"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_13timer_trials_benchmark, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_13timer_trials_benchmark(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - PyObject *__pyx_v_trials = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_trials_benchmark (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,&__pyx_n_s_trials,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)__pyx_int_100000); - values[2] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trials); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_trials_benchmark") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - __pyx_v_trials = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_trials_benchmark", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_12timer_trials_benchmark(__pyx_self, __pyx_v_func, __pyx_v_repetitions, __pyx_v_trials); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":154 - * def timer_trials_benchmark(func, repetitions=100000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *__pyx_outer_scope; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_benchmark_list = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_y = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_L = NULL; - PyObject *__pyx_v_start2 = NULL; - CYTHON_UNUSED PyObject *__pyx_v_j = NULL; - long __pyx_v_i; - PyObject *__pyx_v_end2 = NULL; - PyObject *__pyx_v_n = NULL; - PyObject *__pyx_v_run = NULL; - PyObject *__pyx_v_mean = NULL; - PyObject *__pyx_v_mean_benchmark = NULL; - PyObject *__pyx_v_np = NULL; - PyObject *__pyx_v_array = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ie = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - Py_ssize_t __pyx_t_6; - PyObject *(*__pyx_t_7)(PyObject *); - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - long __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":155 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * result_list = [] - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Starting_timed_trials_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":156 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * result_list = [] - * benchmark_list = [] - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":157 - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - * result_list = [] # <<<<<<<<<<<<<< - * benchmark_list = [] - * # disable garbage collection - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":158 - * sys.stdout.flush() - * result_list = [] - * benchmark_list = [] # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_benchmark_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":160 - * benchmark_list = [] - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * for x in range(trials): - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":161 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * for x in range(trials): - * # test function - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":162 - * gc.collect() - * gc.disable() - * for x in range(trials): # <<<<<<<<<<<<<< - * # test function - * start = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_trials)) { __Pyx_RaiseClosureNameError("trials"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":164 - * for x in range(trials): - * # test function - * start = time.time() # <<<<<<<<<<<<<< - * for y in range(repetitions): - * func(*args, **kwargs) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":165 - * # test function - * start = time.time() - * for y in range(repetitions): # <<<<<<<<<<<<<< - * func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_7(__pyx_t_2); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":166 - * start = time.time() - * for y in range(repetitions): - * func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * result = func(*args, **kwargs) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":167 - * for y in range(repetitions): - * func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * result_list.append(end-start) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":168 - * func(*args, **kwargs) - * end = time.time() - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * result_list.append(end-start) - * # benchmark function - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":169 - * end = time.time() - * result = func(*args, **kwargs) - * result_list.append(end-start) # <<<<<<<<<<<<<< - * # benchmark function - * L = [] - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":171 - * result_list.append(end-start) - * # benchmark function - * L = [] # <<<<<<<<<<<<<< - * start2 = time.time() - * for j in range(repetitions): - */ - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_L, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":172 - * # benchmark function - * L = [] - * start2 = time.time() # <<<<<<<<<<<<<< - * for j in range(repetitions): - * for i in range(10): - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_start2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":173 - * L = [] - * start2 = time.time() - * for j in range(repetitions): # <<<<<<<<<<<<<< - * for i in range(10): - * L.append(i) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_7(__pyx_t_8); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9); - __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":174 - * start2 = time.time() - * for j in range(repetitions): - * for i in range(10): # <<<<<<<<<<<<<< - * L.append(i) - * end2 = time.time() - */ - for (__pyx_t_11 = 0; __pyx_t_11 < 10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":175 - * for j in range(repetitions): - * for i in range(10): - * L.append(i) # <<<<<<<<<<<<<< - * end2 = time.time() - * benchmark_list.append(end2 - start2) - */ - __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":176 - * for i in range(10): - * L.append(i) - * end2 = time.time() # <<<<<<<<<<<<<< - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":177 - * L.append(i) - * end2 = time.time() - * benchmark_list.append(end2 - start2) # <<<<<<<<<<<<<< - * sys.stdout.write(".") - * sys.stdout.flush() - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end2, __pyx_v_start2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_benchmark_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":178 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stdout); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":179 - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stdout); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flush); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":180 - * sys.stdout.write(".") - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(" ") - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_enable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":181 - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(" ") - * n = 1 - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":182 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(" ") # <<<<<<<<<<<<<< - * n = 1 - * for run in result_list: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":183 - * gc.collect() - * print(" ") - * n = 1 # <<<<<<<<<<<<<< - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_n = __pyx_int_1; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":184 - * print(" ") - * n = 1 - * for run in result_list: # <<<<<<<<<<<<<< - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - */ - __pyx_t_3 = __pyx_v_result_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_run, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":185 - * n = 1 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) # <<<<<<<<<<<<<< - * n += 1 - * print("-"*50) - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_n); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_n); - __Pyx_GIVEREF(__pyx_v_n); - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Trial, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_kp_s__19); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_run); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_run); - __Pyx_GIVEREF(__pyx_v_run); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":186 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 # <<<<<<<<<<<<<< - * print("-"*50) - * mean = sum(result_list)/len(result_list) - */ - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_n, __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_8); - __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":187 - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - * print("-"*50) # <<<<<<<<<<<<<< - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - */ - __pyx_t_3 = PyNumber_Multiply(__pyx_kp_s__20, __pyx_int_50); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":188 - * n += 1 - * print("-"*50) - * mean = sum(result_list)/len(result_list) # <<<<<<<<<<<<<< - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_result_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_mean = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":189 - * print("-"*50) - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_benchmark_list); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_benchmark_list); - __Pyx_GIVEREF(__pyx_v_benchmark_list); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_benchmark_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_mean_benchmark = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":190 - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") # <<<<<<<<<<<<<< - * try: - * import numpy as np - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_repetitions_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_mean); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_mean); - __Pyx_GIVEREF(__pyx_v_mean); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_sec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":191 - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: # <<<<<<<<<<<<<< - * import numpy as np - * array = np.array(result_list) - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/benchmarking.pyx":192 - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - * import numpy as np # <<<<<<<<<<<<<< - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_np = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":193 - * try: - * import numpy as np - * array = np.array(result_list) # <<<<<<<<<<<<<< - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_array = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":194 - * import numpy as np - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) # <<<<<<<<<<<<<< - * except ImportError as ie: - * pass - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_std); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_array); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_array); - __Pyx_GIVEREF(__pyx_v_array); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Standard_Deviation, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L20_try_end; - __pyx_L13_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":195 - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: # <<<<<<<<<<<<<< - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_ImportError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_ie = __pyx_t_3; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L14_exception_handled; - } - goto __pyx_L15_except_error; - __pyx_L15_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L1_error; - __pyx_L14_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L20_try_end:; - } - - /* "lib/Naked/toolshed/c/benchmarking.pyx":197 - * except ImportError as ie: - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_cur_scope->__pyx_v_repetitions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Mean_per_repetition, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_sec); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":198 - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") # <<<<<<<<<<<<<< - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_of_benchmark_function); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_mean_benchmark); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean_benchmark); - __Pyx_GIVEREF(__pyx_v_mean_benchmark); - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_sec); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":199 - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_v_mean_benchmark); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Ratio, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":200 - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":154 - * def timer_trials_benchmark(func, repetitions=100000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_benchmark_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_y); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_L); - __Pyx_XDECREF(__pyx_v_start2); - __Pyx_XDECREF(__pyx_v_j); - __Pyx_XDECREF(__pyx_v_end2); - __Pyx_XDECREF(__pyx_v_n); - __Pyx_XDECREF(__pyx_v_run); - __Pyx_XDECREF(__pyx_v_mean); - __Pyx_XDECREF(__pyx_v_mean_benchmark); - __Pyx_XDECREF(__pyx_v_np); - __Pyx_XDECREF(__pyx_v_array); - __Pyx_XDECREF(__pyx_v_ie); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":152 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_12timer_trials_benchmark(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_trials_benchmark", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_cur_scope->__pyx_v_trials = __pyx_v_trials; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":153 - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":154 - * def timer_trials_benchmark(func, repetitions=100000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1wrapper, 0, __pyx_n_s_timer_trials_benchmark_locals_wr, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":153 - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":201 - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":152 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":207 - * # additional benchmark decorators that replicate the above function with different # repetitions - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_15timer_trials_benchmark_10(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_15timer_trials_benchmark_10 = {__Pyx_NAMESTR("timer_trials_benchmark_10"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_15timer_trials_benchmark_10, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_15timer_trials_benchmark_10(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - PyObject *__pyx_v_trials = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_trials_benchmark_10 (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,&__pyx_n_s_trials,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)__pyx_int_10); - values[2] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trials); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_trials_benchmark_10") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - __pyx_v_trials = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_trials_benchmark_10", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_14timer_trials_benchmark_10(__pyx_self, __pyx_v_func, __pyx_v_repetitions, __pyx_v_trials); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":209 - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *__pyx_outer_scope; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_benchmark_list = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_y = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_L = NULL; - PyObject *__pyx_v_start2 = NULL; - CYTHON_UNUSED PyObject *__pyx_v_j = NULL; - long __pyx_v_i; - PyObject *__pyx_v_end2 = NULL; - PyObject *__pyx_v_n = NULL; - PyObject *__pyx_v_run = NULL; - PyObject *__pyx_v_mean = NULL; - PyObject *__pyx_v_mean_benchmark = NULL; - PyObject *__pyx_v_np = NULL; - PyObject *__pyx_v_array = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ie = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - Py_ssize_t __pyx_t_6; - PyObject *(*__pyx_t_7)(PyObject *); - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - long __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":210 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * result_list = [] - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Starting_timed_trials_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":211 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * result_list = [] - * benchmark_list = [] - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":212 - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - * result_list = [] # <<<<<<<<<<<<<< - * benchmark_list = [] - * # disable garbage collection - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":213 - * sys.stdout.flush() - * result_list = [] - * benchmark_list = [] # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_benchmark_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":215 - * benchmark_list = [] - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * for x in range(trials): - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":216 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * for x in range(trials): - * # test function - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":217 - * gc.collect() - * gc.disable() - * for x in range(trials): # <<<<<<<<<<<<<< - * # test function - * start = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_trials)) { __Pyx_RaiseClosureNameError("trials"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":219 - * for x in range(trials): - * # test function - * start = time.time() # <<<<<<<<<<<<<< - * for y in range(repetitions): - * func(*args, **kwargs) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":220 - * # test function - * start = time.time() - * for y in range(repetitions): # <<<<<<<<<<<<<< - * func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_7(__pyx_t_2); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":221 - * start = time.time() - * for y in range(repetitions): - * func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * result = func(*args, **kwargs) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":222 - * for y in range(repetitions): - * func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * result_list.append(end-start) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":223 - * func(*args, **kwargs) - * end = time.time() - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * result_list.append(end-start) - * # benchmark function - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":224 - * end = time.time() - * result = func(*args, **kwargs) - * result_list.append(end-start) # <<<<<<<<<<<<<< - * # benchmark function - * L = [] - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":226 - * result_list.append(end-start) - * # benchmark function - * L = [] # <<<<<<<<<<<<<< - * start2 = time.time() - * for j in range(repetitions): - */ - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_L, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":227 - * # benchmark function - * L = [] - * start2 = time.time() # <<<<<<<<<<<<<< - * for j in range(repetitions): - * for i in range(10): - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_start2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":228 - * L = [] - * start2 = time.time() - * for j in range(repetitions): # <<<<<<<<<<<<<< - * for i in range(10): - * L.append(i) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_7(__pyx_t_8); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9); - __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":229 - * start2 = time.time() - * for j in range(repetitions): - * for i in range(10): # <<<<<<<<<<<<<< - * L.append(i) - * end2 = time.time() - */ - for (__pyx_t_11 = 0; __pyx_t_11 < 10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":230 - * for j in range(repetitions): - * for i in range(10): - * L.append(i) # <<<<<<<<<<<<<< - * end2 = time.time() - * benchmark_list.append(end2 - start2) - */ - __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":231 - * for i in range(10): - * L.append(i) - * end2 = time.time() # <<<<<<<<<<<<<< - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":232 - * L.append(i) - * end2 = time.time() - * benchmark_list.append(end2 - start2) # <<<<<<<<<<<<<< - * sys.stdout.write(".") - * sys.stdout.flush() - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end2, __pyx_v_start2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_benchmark_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":233 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stdout); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":234 - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stdout); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flush); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":235 - * sys.stdout.write(".") - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(" ") - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_enable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":236 - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(" ") - * n = 1 - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":237 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(" ") # <<<<<<<<<<<<<< - * n = 1 - * for run in result_list: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":238 - * gc.collect() - * print(" ") - * n = 1 # <<<<<<<<<<<<<< - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_n = __pyx_int_1; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":239 - * print(" ") - * n = 1 - * for run in result_list: # <<<<<<<<<<<<<< - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - */ - __pyx_t_3 = __pyx_v_result_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_run, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":240 - * n = 1 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) # <<<<<<<<<<<<<< - * n += 1 - * print("-"*50) - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_n); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_n); - __Pyx_GIVEREF(__pyx_v_n); - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Trial, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_kp_s__19); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_run); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_run); - __Pyx_GIVEREF(__pyx_v_run); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":241 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 # <<<<<<<<<<<<<< - * print("-"*50) - * mean = sum(result_list)/len(result_list) - */ - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_n, __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_8); - __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":242 - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - * print("-"*50) # <<<<<<<<<<<<<< - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - */ - __pyx_t_3 = PyNumber_Multiply(__pyx_kp_s__20, __pyx_int_50); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":243 - * n += 1 - * print("-"*50) - * mean = sum(result_list)/len(result_list) # <<<<<<<<<<<<<< - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_result_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_mean = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":244 - * print("-"*50) - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_benchmark_list); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_benchmark_list); - __Pyx_GIVEREF(__pyx_v_benchmark_list); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_benchmark_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_mean_benchmark = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":245 - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") # <<<<<<<<<<<<<< - * try: - * import numpy as np - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_repetitions_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_mean); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_mean); - __Pyx_GIVEREF(__pyx_v_mean); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_sec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":246 - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: # <<<<<<<<<<<<<< - * import numpy as np - * array = np.array(result_list) - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/benchmarking.pyx":247 - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - * import numpy as np # <<<<<<<<<<<<<< - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_np = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":248 - * try: - * import numpy as np - * array = np.array(result_list) # <<<<<<<<<<<<<< - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_array = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":249 - * import numpy as np - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) # <<<<<<<<<<<<<< - * except ImportError as ie: - * pass - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_std); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_array); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_array); - __Pyx_GIVEREF(__pyx_v_array); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Standard_Deviation, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L20_try_end; - __pyx_L13_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":250 - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: # <<<<<<<<<<<<<< - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_ImportError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_ie = __pyx_t_3; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L14_exception_handled; - } - goto __pyx_L15_except_error; - __pyx_L15_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L1_error; - __pyx_L14_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L20_try_end:; - } - - /* "lib/Naked/toolshed/c/benchmarking.pyx":252 - * except ImportError as ie: - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_cur_scope->__pyx_v_repetitions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Mean_per_repetition, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_sec); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":253 - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") # <<<<<<<<<<<<<< - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_of_benchmark_function); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_mean_benchmark); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean_benchmark); - __Pyx_GIVEREF(__pyx_v_mean_benchmark); - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_sec); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":254 - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_v_mean_benchmark); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Ratio, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":255 - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":209 - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_benchmark_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_y); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_L); - __Pyx_XDECREF(__pyx_v_start2); - __Pyx_XDECREF(__pyx_v_j); - __Pyx_XDECREF(__pyx_v_end2); - __Pyx_XDECREF(__pyx_v_n); - __Pyx_XDECREF(__pyx_v_run); - __Pyx_XDECREF(__pyx_v_mean); - __Pyx_XDECREF(__pyx_v_mean_benchmark); - __Pyx_XDECREF(__pyx_v_np); - __Pyx_XDECREF(__pyx_v_array); - __Pyx_XDECREF(__pyx_v_ie); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":207 - * # additional benchmark decorators that replicate the above function with different # repetitions - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_14timer_trials_benchmark_10(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_trials_benchmark_10", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_cur_scope->__pyx_v_trials = __pyx_v_trials; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":208 - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":209 - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_10_1wrapper, 0, __pyx_n_s_timer_trials_benchmark_10_locals, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":208 - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":256 - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":207 - * # additional benchmark decorators that replicate the above function with different # repetitions - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":258 - * return wrapper - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_17timer_trials_benchmark_100(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_17timer_trials_benchmark_100 = {__Pyx_NAMESTR("timer_trials_benchmark_100"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_17timer_trials_benchmark_100, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_17timer_trials_benchmark_100(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - PyObject *__pyx_v_trials = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_trials_benchmark_100 (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,&__pyx_n_s_trials,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)__pyx_int_100); - values[2] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trials); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_trials_benchmark_100") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - __pyx_v_trials = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_trials_benchmark_100", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_100", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_16timer_trials_benchmark_100(__pyx_self, __pyx_v_func, __pyx_v_repetitions, __pyx_v_trials); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":260 - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *__pyx_outer_scope; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_benchmark_list = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_y = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_L = NULL; - PyObject *__pyx_v_start2 = NULL; - CYTHON_UNUSED PyObject *__pyx_v_j = NULL; - long __pyx_v_i; - PyObject *__pyx_v_end2 = NULL; - PyObject *__pyx_v_n = NULL; - PyObject *__pyx_v_run = NULL; - PyObject *__pyx_v_mean = NULL; - PyObject *__pyx_v_mean_benchmark = NULL; - PyObject *__pyx_v_np = NULL; - PyObject *__pyx_v_array = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ie = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - Py_ssize_t __pyx_t_6; - PyObject *(*__pyx_t_7)(PyObject *); - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - long __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":261 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * result_list = [] - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Starting_timed_trials_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":262 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * result_list = [] - * benchmark_list = [] - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":263 - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - * result_list = [] # <<<<<<<<<<<<<< - * benchmark_list = [] - * # disable garbage collection - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":264 - * sys.stdout.flush() - * result_list = [] - * benchmark_list = [] # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_benchmark_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":266 - * benchmark_list = [] - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * for x in range(trials): - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":267 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * for x in range(trials): - * # test function - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":268 - * gc.collect() - * gc.disable() - * for x in range(trials): # <<<<<<<<<<<<<< - * # test function - * start = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_trials)) { __Pyx_RaiseClosureNameError("trials"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":270 - * for x in range(trials): - * # test function - * start = time.time() # <<<<<<<<<<<<<< - * for y in range(repetitions): - * func(*args, **kwargs) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":271 - * # test function - * start = time.time() - * for y in range(repetitions): # <<<<<<<<<<<<<< - * func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_7(__pyx_t_2); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":272 - * start = time.time() - * for y in range(repetitions): - * func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * result = func(*args, **kwargs) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":273 - * for y in range(repetitions): - * func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * result_list.append(end-start) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":274 - * func(*args, **kwargs) - * end = time.time() - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * result_list.append(end-start) - * # benchmark function - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":275 - * end = time.time() - * result = func(*args, **kwargs) - * result_list.append(end-start) # <<<<<<<<<<<<<< - * # benchmark function - * L = [] - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":277 - * result_list.append(end-start) - * # benchmark function - * L = [] # <<<<<<<<<<<<<< - * start2 = time.time() - * for j in range(repetitions): - */ - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_L, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":278 - * # benchmark function - * L = [] - * start2 = time.time() # <<<<<<<<<<<<<< - * for j in range(repetitions): - * for i in range(10): - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_start2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":279 - * L = [] - * start2 = time.time() - * for j in range(repetitions): # <<<<<<<<<<<<<< - * for i in range(10): - * L.append(i) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_7(__pyx_t_8); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9); - __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":280 - * start2 = time.time() - * for j in range(repetitions): - * for i in range(10): # <<<<<<<<<<<<<< - * L.append(i) - * end2 = time.time() - */ - for (__pyx_t_11 = 0; __pyx_t_11 < 10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":281 - * for j in range(repetitions): - * for i in range(10): - * L.append(i) # <<<<<<<<<<<<<< - * end2 = time.time() - * benchmark_list.append(end2 - start2) - */ - __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":282 - * for i in range(10): - * L.append(i) - * end2 = time.time() # <<<<<<<<<<<<<< - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":283 - * L.append(i) - * end2 = time.time() - * benchmark_list.append(end2 - start2) # <<<<<<<<<<<<<< - * sys.stdout.write(".") - * sys.stdout.flush() - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end2, __pyx_v_start2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_benchmark_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":284 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stdout); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":285 - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stdout); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flush); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":286 - * sys.stdout.write(".") - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(" ") - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_enable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":287 - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(" ") - * n = 1 - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":288 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(" ") # <<<<<<<<<<<<<< - * n = 1 - * for run in result_list: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":289 - * gc.collect() - * print(" ") - * n = 1 # <<<<<<<<<<<<<< - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_n = __pyx_int_1; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":290 - * print(" ") - * n = 1 - * for run in result_list: # <<<<<<<<<<<<<< - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - */ - __pyx_t_3 = __pyx_v_result_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_run, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":291 - * n = 1 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) # <<<<<<<<<<<<<< - * n += 1 - * print("-"*50) - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_n); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_n); - __Pyx_GIVEREF(__pyx_v_n); - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Trial, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_kp_s__19); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_run); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_run); - __Pyx_GIVEREF(__pyx_v_run); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":292 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 # <<<<<<<<<<<<<< - * print("-"*50) - * mean = sum(result_list)/len(result_list) - */ - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_n, __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_8); - __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":293 - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - * print("-"*50) # <<<<<<<<<<<<<< - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - */ - __pyx_t_3 = PyNumber_Multiply(__pyx_kp_s__20, __pyx_int_50); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":294 - * n += 1 - * print("-"*50) - * mean = sum(result_list)/len(result_list) # <<<<<<<<<<<<<< - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_result_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_mean = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":295 - * print("-"*50) - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_benchmark_list); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_benchmark_list); - __Pyx_GIVEREF(__pyx_v_benchmark_list); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_benchmark_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_mean_benchmark = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":296 - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") # <<<<<<<<<<<<<< - * try: - * import numpy as np - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_repetitions_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_mean); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_mean); - __Pyx_GIVEREF(__pyx_v_mean); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_sec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":297 - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: # <<<<<<<<<<<<<< - * import numpy as np - * array = np.array(result_list) - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/benchmarking.pyx":298 - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - * import numpy as np # <<<<<<<<<<<<<< - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_np = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":299 - * try: - * import numpy as np - * array = np.array(result_list) # <<<<<<<<<<<<<< - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_array = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":300 - * import numpy as np - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) # <<<<<<<<<<<<<< - * except ImportError as ie: - * pass - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_std); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_array); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_array); - __Pyx_GIVEREF(__pyx_v_array); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Standard_Deviation, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L20_try_end; - __pyx_L13_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":301 - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: # <<<<<<<<<<<<<< - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_ImportError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_100.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_ie = __pyx_t_3; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L14_exception_handled; - } - goto __pyx_L15_except_error; - __pyx_L15_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L1_error; - __pyx_L14_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L20_try_end:; - } - - /* "lib/Naked/toolshed/c/benchmarking.pyx":303 - * except ImportError as ie: - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_cur_scope->__pyx_v_repetitions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Mean_per_repetition, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_sec); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":304 - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") # <<<<<<<<<<<<<< - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_of_benchmark_function); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_mean_benchmark); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean_benchmark); - __Pyx_GIVEREF(__pyx_v_mean_benchmark); - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_sec); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":305 - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_v_mean_benchmark); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Ratio, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":306 - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":260 - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_100.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_benchmark_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_y); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_L); - __Pyx_XDECREF(__pyx_v_start2); - __Pyx_XDECREF(__pyx_v_j); - __Pyx_XDECREF(__pyx_v_end2); - __Pyx_XDECREF(__pyx_v_n); - __Pyx_XDECREF(__pyx_v_run); - __Pyx_XDECREF(__pyx_v_mean); - __Pyx_XDECREF(__pyx_v_mean_benchmark); - __Pyx_XDECREF(__pyx_v_np); - __Pyx_XDECREF(__pyx_v_array); - __Pyx_XDECREF(__pyx_v_ie); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":258 - * return wrapper - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_16timer_trials_benchmark_100(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_trials_benchmark_100", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_cur_scope->__pyx_v_trials = __pyx_v_trials; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":259 - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":260 - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_100_1wrapper, 0, __pyx_n_s_timer_trials_benchmark_100_local, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":259 - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":307 - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":258 - * return wrapper - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_100", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":309 - * return wrapper - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_19timer_trials_benchmark_1k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_19timer_trials_benchmark_1k = {__Pyx_NAMESTR("timer_trials_benchmark_1k"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_19timer_trials_benchmark_1k, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_19timer_trials_benchmark_1k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - PyObject *__pyx_v_trials = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_trials_benchmark_1k (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,&__pyx_n_s_trials,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)__pyx_int_1000); - values[2] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trials); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_trials_benchmark_1k") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - __pyx_v_trials = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_trials_benchmark_1k", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_18timer_trials_benchmark_1k(__pyx_self, __pyx_v_func, __pyx_v_repetitions, __pyx_v_trials); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":311 - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *__pyx_outer_scope; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_benchmark_list = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_y = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_L = NULL; - PyObject *__pyx_v_start2 = NULL; - CYTHON_UNUSED PyObject *__pyx_v_j = NULL; - long __pyx_v_i; - PyObject *__pyx_v_end2 = NULL; - PyObject *__pyx_v_n = NULL; - PyObject *__pyx_v_run = NULL; - PyObject *__pyx_v_mean = NULL; - PyObject *__pyx_v_mean_benchmark = NULL; - PyObject *__pyx_v_np = NULL; - PyObject *__pyx_v_array = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ie = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - Py_ssize_t __pyx_t_6; - PyObject *(*__pyx_t_7)(PyObject *); - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - long __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":312 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * result_list = [] - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Starting_timed_trials_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":313 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * result_list = [] - * benchmark_list = [] - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":314 - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - * result_list = [] # <<<<<<<<<<<<<< - * benchmark_list = [] - * # disable garbage collection - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":315 - * sys.stdout.flush() - * result_list = [] - * benchmark_list = [] # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_benchmark_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":317 - * benchmark_list = [] - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * for x in range(trials): - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":318 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * for x in range(trials): - * # test function - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":319 - * gc.collect() - * gc.disable() - * for x in range(trials): # <<<<<<<<<<<<<< - * # test function - * start = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_trials)) { __Pyx_RaiseClosureNameError("trials"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":321 - * for x in range(trials): - * # test function - * start = time.time() # <<<<<<<<<<<<<< - * for y in range(repetitions): - * func(*args, **kwargs) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":322 - * # test function - * start = time.time() - * for y in range(repetitions): # <<<<<<<<<<<<<< - * func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_7(__pyx_t_2); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":323 - * start = time.time() - * for y in range(repetitions): - * func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * result = func(*args, **kwargs) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":324 - * for y in range(repetitions): - * func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * result_list.append(end-start) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":325 - * func(*args, **kwargs) - * end = time.time() - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * result_list.append(end-start) - * # benchmark function - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":326 - * end = time.time() - * result = func(*args, **kwargs) - * result_list.append(end-start) # <<<<<<<<<<<<<< - * # benchmark function - * L = [] - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":328 - * result_list.append(end-start) - * # benchmark function - * L = [] # <<<<<<<<<<<<<< - * start2 = time.time() - * for j in range(repetitions): - */ - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_L, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":329 - * # benchmark function - * L = [] - * start2 = time.time() # <<<<<<<<<<<<<< - * for j in range(repetitions): - * for i in range(10): - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_start2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":330 - * L = [] - * start2 = time.time() - * for j in range(repetitions): # <<<<<<<<<<<<<< - * for i in range(10): - * L.append(i) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_7(__pyx_t_8); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9); - __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":331 - * start2 = time.time() - * for j in range(repetitions): - * for i in range(10): # <<<<<<<<<<<<<< - * L.append(i) - * end2 = time.time() - */ - for (__pyx_t_11 = 0; __pyx_t_11 < 10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":332 - * for j in range(repetitions): - * for i in range(10): - * L.append(i) # <<<<<<<<<<<<<< - * end2 = time.time() - * benchmark_list.append(end2 - start2) - */ - __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":333 - * for i in range(10): - * L.append(i) - * end2 = time.time() # <<<<<<<<<<<<<< - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":334 - * L.append(i) - * end2 = time.time() - * benchmark_list.append(end2 - start2) # <<<<<<<<<<<<<< - * sys.stdout.write(".") - * sys.stdout.flush() - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end2, __pyx_v_start2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_benchmark_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":335 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stdout); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":336 - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stdout); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flush); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":337 - * sys.stdout.write(".") - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(" ") - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_enable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":338 - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(" ") - * n = 1 - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":339 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(" ") # <<<<<<<<<<<<<< - * n = 1 - * for run in result_list: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":340 - * gc.collect() - * print(" ") - * n = 1 # <<<<<<<<<<<<<< - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_n = __pyx_int_1; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":341 - * print(" ") - * n = 1 - * for run in result_list: # <<<<<<<<<<<<<< - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - */ - __pyx_t_3 = __pyx_v_result_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_run, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":342 - * n = 1 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) # <<<<<<<<<<<<<< - * n += 1 - * print("-"*50) - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_n); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_n); - __Pyx_GIVEREF(__pyx_v_n); - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Trial, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_kp_s__19); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_run); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_run); - __Pyx_GIVEREF(__pyx_v_run); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":343 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 # <<<<<<<<<<<<<< - * print("-"*50) - * mean = sum(result_list)/len(result_list) - */ - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_n, __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_8); - __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":344 - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - * print("-"*50) # <<<<<<<<<<<<<< - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - */ - __pyx_t_3 = PyNumber_Multiply(__pyx_kp_s__20, __pyx_int_50); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":345 - * n += 1 - * print("-"*50) - * mean = sum(result_list)/len(result_list) # <<<<<<<<<<<<<< - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_result_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_mean = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":346 - * print("-"*50) - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_benchmark_list); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_benchmark_list); - __Pyx_GIVEREF(__pyx_v_benchmark_list); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_benchmark_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_mean_benchmark = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":347 - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") # <<<<<<<<<<<<<< - * try: - * import numpy as np - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_repetitions_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_mean); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_mean); - __Pyx_GIVEREF(__pyx_v_mean); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_sec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":348 - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: # <<<<<<<<<<<<<< - * import numpy as np - * array = np.array(result_list) - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/benchmarking.pyx":349 - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - * import numpy as np # <<<<<<<<<<<<<< - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_np = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":350 - * try: - * import numpy as np - * array = np.array(result_list) # <<<<<<<<<<<<<< - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_array = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":351 - * import numpy as np - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) # <<<<<<<<<<<<<< - * except ImportError as ie: - * pass - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_std); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_array); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_array); - __Pyx_GIVEREF(__pyx_v_array); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Standard_Deviation, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L20_try_end; - __pyx_L13_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":352 - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: # <<<<<<<<<<<<<< - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_ImportError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1k.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_ie = __pyx_t_3; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L14_exception_handled; - } - goto __pyx_L15_except_error; - __pyx_L15_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L1_error; - __pyx_L14_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L20_try_end:; - } - - /* "lib/Naked/toolshed/c/benchmarking.pyx":354 - * except ImportError as ie: - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_cur_scope->__pyx_v_repetitions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Mean_per_repetition, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_sec); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":355 - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") # <<<<<<<<<<<<<< - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_of_benchmark_function); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_mean_benchmark); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean_benchmark); - __Pyx_GIVEREF(__pyx_v_mean_benchmark); - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_sec); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":356 - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_v_mean_benchmark); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Ratio, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":357 - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":311 - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1k.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_benchmark_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_y); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_L); - __Pyx_XDECREF(__pyx_v_start2); - __Pyx_XDECREF(__pyx_v_j); - __Pyx_XDECREF(__pyx_v_end2); - __Pyx_XDECREF(__pyx_v_n); - __Pyx_XDECREF(__pyx_v_run); - __Pyx_XDECREF(__pyx_v_mean); - __Pyx_XDECREF(__pyx_v_mean_benchmark); - __Pyx_XDECREF(__pyx_v_np); - __Pyx_XDECREF(__pyx_v_array); - __Pyx_XDECREF(__pyx_v_ie); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":309 - * return wrapper - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_18timer_trials_benchmark_1k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_trials_benchmark_1k", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_cur_scope->__pyx_v_trials = __pyx_v_trials; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":310 - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":311 - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1k_1wrapper, 0, __pyx_n_s_timer_trials_benchmark_1k_locals, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":310 - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":358 - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":309 - * return wrapper - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":360 - * return wrapper - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_21timer_trials_benchmark_10k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_21timer_trials_benchmark_10k = {__Pyx_NAMESTR("timer_trials_benchmark_10k"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_21timer_trials_benchmark_10k, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_21timer_trials_benchmark_10k(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - PyObject *__pyx_v_trials = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_trials_benchmark_10k (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,&__pyx_n_s_trials,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)__pyx_int_10000); - values[2] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trials); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_trials_benchmark_10k") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - __pyx_v_trials = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_trials_benchmark_10k", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_20timer_trials_benchmark_10k(__pyx_self, __pyx_v_func, __pyx_v_repetitions, __pyx_v_trials); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":362 - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *__pyx_outer_scope; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_benchmark_list = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_y = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_L = NULL; - PyObject *__pyx_v_start2 = NULL; - CYTHON_UNUSED PyObject *__pyx_v_j = NULL; - long __pyx_v_i; - PyObject *__pyx_v_end2 = NULL; - PyObject *__pyx_v_n = NULL; - PyObject *__pyx_v_run = NULL; - PyObject *__pyx_v_mean = NULL; - PyObject *__pyx_v_mean_benchmark = NULL; - PyObject *__pyx_v_np = NULL; - PyObject *__pyx_v_array = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ie = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - Py_ssize_t __pyx_t_6; - PyObject *(*__pyx_t_7)(PyObject *); - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - long __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":363 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * result_list = [] - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Starting_timed_trials_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 363; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":364 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * result_list = [] - * benchmark_list = [] - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":365 - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - * result_list = [] # <<<<<<<<<<<<<< - * benchmark_list = [] - * # disable garbage collection - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":366 - * sys.stdout.flush() - * result_list = [] - * benchmark_list = [] # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_benchmark_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":368 - * benchmark_list = [] - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * for x in range(trials): - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":369 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * for x in range(trials): - * # test function - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":370 - * gc.collect() - * gc.disable() - * for x in range(trials): # <<<<<<<<<<<<<< - * # test function - * start = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_trials)) { __Pyx_RaiseClosureNameError("trials"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":372 - * for x in range(trials): - * # test function - * start = time.time() # <<<<<<<<<<<<<< - * for y in range(repetitions): - * func(*args, **kwargs) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":373 - * # test function - * start = time.time() - * for y in range(repetitions): # <<<<<<<<<<<<<< - * func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_7(__pyx_t_2); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":374 - * start = time.time() - * for y in range(repetitions): - * func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * result = func(*args, **kwargs) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":375 - * for y in range(repetitions): - * func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * result_list.append(end-start) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":376 - * func(*args, **kwargs) - * end = time.time() - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * result_list.append(end-start) - * # benchmark function - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":377 - * end = time.time() - * result = func(*args, **kwargs) - * result_list.append(end-start) # <<<<<<<<<<<<<< - * # benchmark function - * L = [] - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":379 - * result_list.append(end-start) - * # benchmark function - * L = [] # <<<<<<<<<<<<<< - * start2 = time.time() - * for j in range(repetitions): - */ - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_L, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":380 - * # benchmark function - * L = [] - * start2 = time.time() # <<<<<<<<<<<<<< - * for j in range(repetitions): - * for i in range(10): - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_start2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":381 - * L = [] - * start2 = time.time() - * for j in range(repetitions): # <<<<<<<<<<<<<< - * for i in range(10): - * L.append(i) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_7(__pyx_t_8); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9); - __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":382 - * start2 = time.time() - * for j in range(repetitions): - * for i in range(10): # <<<<<<<<<<<<<< - * L.append(i) - * end2 = time.time() - */ - for (__pyx_t_11 = 0; __pyx_t_11 < 10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":383 - * for j in range(repetitions): - * for i in range(10): - * L.append(i) # <<<<<<<<<<<<<< - * end2 = time.time() - * benchmark_list.append(end2 - start2) - */ - __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":384 - * for i in range(10): - * L.append(i) - * end2 = time.time() # <<<<<<<<<<<<<< - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":385 - * L.append(i) - * end2 = time.time() - * benchmark_list.append(end2 - start2) # <<<<<<<<<<<<<< - * sys.stdout.write(".") - * sys.stdout.flush() - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end2, __pyx_v_start2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_benchmark_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 385; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":386 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stdout); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":387 - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stdout); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flush); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":388 - * sys.stdout.write(".") - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(" ") - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_enable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":389 - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(" ") - * n = 1 - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":390 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(" ") # <<<<<<<<<<<<<< - * n = 1 - * for run in result_list: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 390; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":391 - * gc.collect() - * print(" ") - * n = 1 # <<<<<<<<<<<<<< - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_n = __pyx_int_1; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":392 - * print(" ") - * n = 1 - * for run in result_list: # <<<<<<<<<<<<<< - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - */ - __pyx_t_3 = __pyx_v_result_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_run, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":393 - * n = 1 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) # <<<<<<<<<<<<<< - * n += 1 - * print("-"*50) - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_n); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_n); - __Pyx_GIVEREF(__pyx_v_n); - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Trial, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_kp_s__19); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_run); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_run); - __Pyx_GIVEREF(__pyx_v_run); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":394 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 # <<<<<<<<<<<<<< - * print("-"*50) - * mean = sum(result_list)/len(result_list) - */ - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_n, __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_8); - __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":395 - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - * print("-"*50) # <<<<<<<<<<<<<< - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - */ - __pyx_t_3 = PyNumber_Multiply(__pyx_kp_s__20, __pyx_int_50); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":396 - * n += 1 - * print("-"*50) - * mean = sum(result_list)/len(result_list) # <<<<<<<<<<<<<< - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_result_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_mean = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":397 - * print("-"*50) - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_benchmark_list); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_benchmark_list); - __Pyx_GIVEREF(__pyx_v_benchmark_list); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_benchmark_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_mean_benchmark = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":398 - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") # <<<<<<<<<<<<<< - * try: - * import numpy as np - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_repetitions_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_mean); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_mean); - __Pyx_GIVEREF(__pyx_v_mean); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_sec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":399 - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: # <<<<<<<<<<<<<< - * import numpy as np - * array = np.array(result_list) - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/benchmarking.pyx":400 - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - * import numpy as np # <<<<<<<<<<<<<< - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_np = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":401 - * try: - * import numpy as np - * array = np.array(result_list) # <<<<<<<<<<<<<< - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_array = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":402 - * import numpy as np - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) # <<<<<<<<<<<<<< - * except ImportError as ie: - * pass - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_std); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_array); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_array); - __Pyx_GIVEREF(__pyx_v_array); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Standard_Deviation, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L20_try_end; - __pyx_L13_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":403 - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: # <<<<<<<<<<<<<< - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_ImportError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10k.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_ie = __pyx_t_3; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L14_exception_handled; - } - goto __pyx_L15_except_error; - __pyx_L15_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L1_error; - __pyx_L14_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L20_try_end:; - } - - /* "lib/Naked/toolshed/c/benchmarking.pyx":405 - * except ImportError as ie: - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_cur_scope->__pyx_v_repetitions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Mean_per_repetition, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_sec); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":406 - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") # <<<<<<<<<<<<<< - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_of_benchmark_function); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_mean_benchmark); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean_benchmark); - __Pyx_GIVEREF(__pyx_v_mean_benchmark); - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_sec); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":407 - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_v_mean_benchmark); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Ratio, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":408 - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":362 - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10k.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_benchmark_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_y); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_L); - __Pyx_XDECREF(__pyx_v_start2); - __Pyx_XDECREF(__pyx_v_j); - __Pyx_XDECREF(__pyx_v_end2); - __Pyx_XDECREF(__pyx_v_n); - __Pyx_XDECREF(__pyx_v_run); - __Pyx_XDECREF(__pyx_v_mean); - __Pyx_XDECREF(__pyx_v_mean_benchmark); - __Pyx_XDECREF(__pyx_v_np); - __Pyx_XDECREF(__pyx_v_array); - __Pyx_XDECREF(__pyx_v_ie); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":360 - * return wrapper - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_20timer_trials_benchmark_10k(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_trials_benchmark_10k", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_cur_scope->__pyx_v_trials = __pyx_v_trials; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":361 - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":362 - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_26timer_trials_benchmark_10k_1wrapper, 0, __pyx_n_s_timer_trials_benchmark_10k_local, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":361 - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":409 - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":360 - * return wrapper - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_10k", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":411 - * return wrapper - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_23timer_trials_benchmark_1m(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_23timer_trials_benchmark_1m = {__Pyx_NAMESTR("timer_trials_benchmark_1m"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_23timer_trials_benchmark_1m, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_23timer_trials_benchmark_1m(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_func = 0; - PyObject *__pyx_v_repetitions = 0; - PyObject *__pyx_v_trials = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("timer_trials_benchmark_1m (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func,&__pyx_n_s_repetitions,&__pyx_n_s_trials,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)__pyx_int_1000000); - values[2] = ((PyObject *)__pyx_int_10); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_func)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_repetitions); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_trials); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "timer_trials_benchmark_1m") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_func = values[0]; - __pyx_v_repetitions = values[1]; - __pyx_v_trials = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("timer_trials_benchmark_1m", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1m", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1m(__pyx_self, __pyx_v_func, __pyx_v_repetitions, __pyx_v_trials); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":413 - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *__pyx_outer_scope; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_benchmark_list = NULL; - CYTHON_UNUSED PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_start = NULL; - CYTHON_UNUSED PyObject *__pyx_v_y = NULL; - PyObject *__pyx_v_end = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_L = NULL; - PyObject *__pyx_v_start2 = NULL; - CYTHON_UNUSED PyObject *__pyx_v_j = NULL; - long __pyx_v_i; - PyObject *__pyx_v_end2 = NULL; - PyObject *__pyx_v_n = NULL; - PyObject *__pyx_v_run = NULL; - PyObject *__pyx_v_mean = NULL; - PyObject *__pyx_v_mean_benchmark = NULL; - PyObject *__pyx_v_np = NULL; - PyObject *__pyx_v_array = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ie = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - Py_ssize_t __pyx_t_6; - PyObject *(*__pyx_t_7)(PyObject *); - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - long __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":414 - * @wraps(func) - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * result_list = [] - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stdout); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Starting_timed_trials_of, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s__16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":415 - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * result_list = [] - * benchmark_list = [] - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_stdout); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":416 - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - * result_list = [] # <<<<<<<<<<<<<< - * benchmark_list = [] - * # disable garbage collection - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":417 - * sys.stdout.flush() - * result_list = [] - * benchmark_list = [] # <<<<<<<<<<<<<< - * # disable garbage collection - * gc.collect() - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_benchmark_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":419 - * benchmark_list = [] - * # disable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * gc.disable() - * for x in range(trials): - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":420 - * # disable garbage collection - * gc.collect() - * gc.disable() # <<<<<<<<<<<<<< - * for x in range(trials): - * # test function - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_disable); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 420; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":421 - * gc.collect() - * gc.disable() - * for x in range(trials): # <<<<<<<<<<<<<< - * # test function - * start = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_trials)) { __Pyx_RaiseClosureNameError("trials"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":423 - * for x in range(trials): - * # test function - * start = time.time() # <<<<<<<<<<<<<< - * for y in range(repetitions): - * func(*args, **kwargs) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":424 - * # test function - * start = time.time() - * for y in range(repetitions): # <<<<<<<<<<<<<< - * func(*args, **kwargs) - * end = time.time() - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_1 = __pyx_t_7(__pyx_t_2); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_y, __pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":425 - * start = time.time() - * for y in range(repetitions): - * func(*args, **kwargs) # <<<<<<<<<<<<<< - * end = time.time() - * result = func(*args, **kwargs) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":426 - * for y in range(repetitions): - * func(*args, **kwargs) - * end = time.time() # <<<<<<<<<<<<<< - * result = func(*args, **kwargs) - * result_list.append(end-start) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":427 - * func(*args, **kwargs) - * end = time.time() - * result = func(*args, **kwargs) # <<<<<<<<<<<<<< - * result_list.append(end-start) - * # benchmark function - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":428 - * end = time.time() - * result = func(*args, **kwargs) - * result_list.append(end-start) # <<<<<<<<<<<<<< - * # benchmark function - * L = [] - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end, __pyx_v_start); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":430 - * result_list.append(end-start) - * # benchmark function - * L = [] # <<<<<<<<<<<<<< - * start2 = time.time() - * for j in range(repetitions): - */ - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_L, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":431 - * # benchmark function - * L = [] - * start2 = time.time() # <<<<<<<<<<<<<< - * for j in range(repetitions): - * for i in range(10): - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_start2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":432 - * L = [] - * start2 = time.time() - * for j in range(repetitions): # <<<<<<<<<<<<<< - * for i in range(10): - * L.append(i) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - } else { - __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_7(__pyx_t_8); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_j, __pyx_t_9); - __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":433 - * start2 = time.time() - * for j in range(repetitions): - * for i in range(10): # <<<<<<<<<<<<<< - * L.append(i) - * end2 = time.time() - */ - for (__pyx_t_11 = 0; __pyx_t_11 < 10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":434 - * for j in range(repetitions): - * for i in range(10): - * L.append(i) # <<<<<<<<<<<<<< - * end2 = time.time() - * benchmark_list.append(end2 - start2) - */ - __pyx_t_9 = __Pyx_PyInt_From_long(__pyx_v_i); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_L, __pyx_t_9); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":435 - * for i in range(10): - * L.append(i) - * end2 = time.time() # <<<<<<<<<<<<<< - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_time); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_time); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF_SET(__pyx_v_end2, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":436 - * L.append(i) - * end2 = time.time() - * benchmark_list.append(end2 - start2) # <<<<<<<<<<<<<< - * sys.stdout.write(".") - * sys.stdout.flush() - */ - __pyx_t_8 = PyNumber_Subtract(__pyx_v_end2, __pyx_v_start2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_benchmark_list, __pyx_t_8); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":437 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stdout); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":438 - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * gc.enable() # re-enable garbage collection - * gc.collect() - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stdout); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_flush); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":439 - * sys.stdout.write(".") - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection # <<<<<<<<<<<<<< - * gc.collect() - * print(" ") - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_enable); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":440 - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - * gc.collect() # <<<<<<<<<<<<<< - * print(" ") - * n = 1 - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_gc); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_collect); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":441 - * gc.enable() # re-enable garbage collection - * gc.collect() - * print(" ") # <<<<<<<<<<<<<< - * n = 1 - * for run in result_list: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":442 - * gc.collect() - * print(" ") - * n = 1 # <<<<<<<<<<<<<< - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - */ - __Pyx_INCREF(__pyx_int_1); - __pyx_v_n = __pyx_int_1; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":443 - * print(" ") - * n = 1 - * for run in result_list: # <<<<<<<<<<<<<< - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - */ - __pyx_t_3 = __pyx_v_result_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - for (;;) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_8); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_run, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":444 - * n = 1 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) # <<<<<<<<<<<<<< - * n += 1 - * print("-"*50) - */ - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_n); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_n); - __Pyx_GIVEREF(__pyx_v_n); - __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Trial, __pyx_t_9); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyNumber_Add(__pyx_t_8, __pyx_kp_s__19); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_run); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_run); - __Pyx_GIVEREF(__pyx_v_run); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":445 - * for run in result_list: - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 # <<<<<<<<<<<<<< - * print("-"*50) - * mean = sum(result_list)/len(result_list) - */ - __pyx_t_8 = PyNumber_InPlaceAdd(__pyx_v_n, __pyx_int_1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_n, __pyx_t_8); - __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":446 - * print("Trial " + str(n) + ":\t" + str(run)) - * n += 1 - * print("-"*50) # <<<<<<<<<<<<<< - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - */ - __pyx_t_3 = PyNumber_Multiply(__pyx_kp_s__20, __pyx_int_50); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":447 - * n += 1 - * print("-"*50) - * mean = sum(result_list)/len(result_list) # <<<<<<<<<<<<<< - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_result_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_mean = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":448 - * print("-"*50) - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_benchmark_list); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_benchmark_list); - __Pyx_GIVEREF(__pyx_v_benchmark_list); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PyList_GET_SIZE(__pyx_v_benchmark_list); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_mean_benchmark = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":449 - * mean = sum(result_list)/len(result_list) - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") # <<<<<<<<<<<<<< - * try: - * import numpy as np - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_repetitions_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_mean); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_mean); - __Pyx_GIVEREF(__pyx_v_mean); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_kp_s_sec); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":450 - * mean_benchmark = sum(benchmark_list)/len(benchmark_list) - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: # <<<<<<<<<<<<<< - * import numpy as np - * array = np.array(result_list) - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/benchmarking.pyx":451 - * print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - * try: - * import numpy as np # <<<<<<<<<<<<<< - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_np = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":452 - * try: - * import numpy as np - * array = np.array(result_list) # <<<<<<<<<<<<<< - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_result_list); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_result_list); - __Pyx_GIVEREF(__pyx_v_result_list); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_array = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":453 - * import numpy as np - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) # <<<<<<<<<<<<<< - * except ImportError as ie: - * pass - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_np, __pyx_n_s_std); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_array); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_array); - __Pyx_GIVEREF(__pyx_v_array); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_kp_s_Standard_Deviation, __pyx_t_3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L13_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L20_try_end; - __pyx_L13_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":454 - * array = np.array(result_list) - * print( "Standard Deviation: " + str(np.std(array))) - * except ImportError as ie: # <<<<<<<<<<<<<< - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_ImportError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1m.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_3, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_ie = __pyx_t_3; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L14_exception_handled; - } - goto __pyx_L15_except_error; - __pyx_L15_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L1_error; - __pyx_L14_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L20_try_end:; - } - - /* "lib/Naked/toolshed/c/benchmarking.pyx":456 - * except ImportError as ie: - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") # <<<<<<<<<<<<<< - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_cur_scope->__pyx_v_repetitions); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_kp_s_Mean_per_repetition, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_kp_s_sec); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":457 - * pass - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") # <<<<<<<<<<<<<< - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - */ - if (unlikely(!__pyx_cur_scope->__pyx_v_repetitions)) { __Pyx_RaiseClosureNameError("repetitions"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Mean_for, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_of_benchmark_function); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_mean_benchmark); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_mean_benchmark); - __Pyx_GIVEREF(__pyx_v_mean_benchmark); - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_kp_s_sec); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":458 - * print("Mean per repetition: " + str(mean/repetitions) + " sec") - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) # <<<<<<<<<<<<<< - * return result - * return wrapper - */ - __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_mean, __pyx_v_mean_benchmark); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Add(__pyx_kp_s_Ratio, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":459 - * print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - * print("Ratio: " + str(mean/mean_benchmark)) - * return result # <<<<<<<<<<<<<< - * return wrapper - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __Pyx_INCREF(__pyx_v_result); - __pyx_r = __pyx_v_result; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":413 - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1m.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_benchmark_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_start); - __Pyx_XDECREF(__pyx_v_y); - __Pyx_XDECREF(__pyx_v_end); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_L); - __Pyx_XDECREF(__pyx_v_start2); - __Pyx_XDECREF(__pyx_v_j); - __Pyx_XDECREF(__pyx_v_end2); - __Pyx_XDECREF(__pyx_v_n); - __Pyx_XDECREF(__pyx_v_run); - __Pyx_XDECREF(__pyx_v_mean); - __Pyx_XDECREF(__pyx_v_mean_benchmark); - __Pyx_XDECREF(__pyx_v_np); - __Pyx_XDECREF(__pyx_v_array); - __Pyx_XDECREF(__pyx_v_ie); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/benchmarking.pyx":411 - * return wrapper - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_12benchmarking_22timer_trials_benchmark_1m(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func, PyObject *__pyx_v_repetitions, PyObject *__pyx_v_trials) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *__pyx_cur_scope; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("timer_trials_benchmark_1m", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m(__pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_cur_scope->__pyx_v_repetitions = __pyx_v_repetitions; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_repetitions); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_repetitions); - __pyx_cur_scope->__pyx_v_trials = __pyx_v_trials; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_trials); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_trials); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":412 - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":413 - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_25timer_trials_benchmark_1m_1wrapper, 0, __pyx_n_s_timer_trials_benchmark_1m_locals, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_benchmarkin, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":412 - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_wrapper = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":460 - * print("Ratio: " + str(mean/mean_benchmark)) - * return result - * return wrapper # <<<<<<<<<<<<<< - * - * if __name__ == '__main__': - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":411 - * return wrapper - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.benchmarking.timer_trials_benchmark_1m", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct__timer"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_1_timer_10"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_2_timer_100"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_3_timer_1k"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_4_timer_10k"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_5_timer_1m"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - Py_CLEAR(p->__pyx_v_trials); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - if (p->__pyx_v_trials) { - e = (*v)(p->__pyx_v_trials, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_trials); - p->__pyx_v_trials = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_6_timer_trials_benchmark"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - Py_CLEAR(p->__pyx_v_trials); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - if (p->__pyx_v_trials) { - e = (*v)(p->__pyx_v_trials, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_trials); - p->__pyx_v_trials = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_7_timer_trials_benchmark_10"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - Py_CLEAR(p->__pyx_v_trials); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - if (p->__pyx_v_trials) { - e = (*v)(p->__pyx_v_trials, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_trials); - p->__pyx_v_trials = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_8_timer_trials_benchmark_100"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - Py_CLEAR(p->__pyx_v_trials); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - if (p->__pyx_v_trials) { - e = (*v)(p->__pyx_v_trials, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_trials); - p->__pyx_v_trials = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_9_timer_trials_benchmark_1k"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - Py_CLEAR(p->__pyx_v_trials); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - if (p->__pyx_v_trials) { - e = (*v)(p->__pyx_v_trials, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_trials); - p->__pyx_v_trials = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_10_timer_trials_benchmark_10k"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m[--__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - Py_CLEAR(p->__pyx_v_repetitions); - Py_CLEAR(p->__pyx_v_trials); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m[__pyx_freecount_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - if (p->__pyx_v_repetitions) { - e = (*v)(p->__pyx_v_repetitions, a); if (e) return e; - } - if (p->__pyx_v_trials) { - e = (*v)(p->__pyx_v_trials, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_repetitions); - p->__pyx_v_repetitions = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->__pyx_v_trials); - p->__pyx_v_trials = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.benchmarking.__pyx_scope_struct_11_timer_trials_benchmark_1m"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("benchmarking"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, - {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, - {&__pyx_n_s_L, __pyx_k_L, sizeof(__pyx_k_L), 0, 0, 1, 1}, - {&__pyx_kp_s_Mean_for, __pyx_k_Mean_for, sizeof(__pyx_k_Mean_for), 0, 0, 1, 0}, - {&__pyx_kp_s_Mean_per_repetition, __pyx_k_Mean_per_repetition, sizeof(__pyx_k_Mean_per_repetition), 0, 0, 1, 0}, - {&__pyx_kp_s_Ratio, __pyx_k_Ratio, sizeof(__pyx_k_Ratio), 0, 0, 1, 0}, - {&__pyx_kp_s_Standard_Deviation, __pyx_k_Standard_Deviation, sizeof(__pyx_k_Standard_Deviation), 0, 0, 1, 0}, - {&__pyx_kp_s_Starting, __pyx_k_Starting, sizeof(__pyx_k_Starting), 0, 0, 1, 0}, - {&__pyx_kp_s_Starting_timed_trials_of, __pyx_k_Starting_timed_trials_of, sizeof(__pyx_k_Starting_timed_trials_of), 0, 0, 1, 0}, - {&__pyx_kp_s_Trial, __pyx_k_Trial, sizeof(__pyx_k_Trial), 0, 0, 1, 0}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_kp_s__16, __pyx_k__16, sizeof(__pyx_k__16), 0, 0, 1, 0}, - {&__pyx_kp_s__17, __pyx_k__17, sizeof(__pyx_k__17), 0, 0, 1, 0}, - {&__pyx_kp_s__19, __pyx_k__19, sizeof(__pyx_k__19), 0, 0, 1, 0}, - {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, - {&__pyx_kp_s__20, __pyx_k__20, sizeof(__pyx_k__20), 0, 0, 1, 0}, - {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0}, - {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, - {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1}, - {&__pyx_n_s_benchmark_list, __pyx_k_benchmark_list, sizeof(__pyx_k_benchmark_list), 0, 0, 1, 1}, - {&__pyx_n_s_collect, __pyx_k_collect, sizeof(__pyx_k_collect), 0, 0, 1, 1}, - {&__pyx_n_s_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 0, 1, 1}, - {&__pyx_n_s_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 0, 1, 1}, - {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, - {&__pyx_n_s_end2, __pyx_k_end2, sizeof(__pyx_k_end2), 0, 0, 1, 1}, - {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, - {&__pyx_n_s_flush, __pyx_k_flush, sizeof(__pyx_k_flush), 0, 0, 1, 1}, - {&__pyx_n_s_func, __pyx_k_func, sizeof(__pyx_k_func), 0, 0, 1, 1}, - {&__pyx_n_s_functools, __pyx_k_functools, sizeof(__pyx_k_functools), 0, 0, 1, 1}, - {&__pyx_n_s_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 0, 1, 1}, - {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, - {&__pyx_n_s_ie, __pyx_k_ie, sizeof(__pyx_k_ie), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, - {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_benchmarkin, __pyx_k_lib_Naked_toolshed_c_benchmarkin, sizeof(__pyx_k_lib_Naked_toolshed_c_benchmarkin), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_mean, __pyx_k_mean, sizeof(__pyx_k_mean), 0, 0, 1, 1}, - {&__pyx_n_s_mean_benchmark, __pyx_k_mean_benchmark, sizeof(__pyx_k_mean_benchmark), 0, 0, 1, 1}, - {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_kp_s_of_benchmark_function, __pyx_k_of_benchmark_function, sizeof(__pyx_k_of_benchmark_function), 0, 0, 1, 0}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_repetitions, __pyx_k_repetitions, sizeof(__pyx_k_repetitions), 0, 0, 1, 1}, - {&__pyx_kp_s_repetitions_2, __pyx_k_repetitions_2, sizeof(__pyx_k_repetitions_2), 0, 0, 1, 0}, - {&__pyx_kp_s_repetitions_of, __pyx_k_repetitions_of, sizeof(__pyx_k_repetitions_of), 0, 0, 1, 0}, - {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, - {&__pyx_n_s_result_list, __pyx_k_result_list, sizeof(__pyx_k_result_list), 0, 0, 1, 1}, - {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, - {&__pyx_kp_s_sec, __pyx_k_sec, sizeof(__pyx_k_sec), 0, 0, 1, 0}, - {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, - {&__pyx_n_s_start2, __pyx_k_start2, sizeof(__pyx_k_start2), 0, 0, 1, 1}, - {&__pyx_n_s_std, __pyx_k_std, sizeof(__pyx_k_std), 0, 0, 1, 1}, - {&__pyx_n_s_stdout, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1}, - {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1}, - {&__pyx_n_s_timer, __pyx_k_timer, sizeof(__pyx_k_timer), 0, 0, 1, 1}, - {&__pyx_n_s_timer_10, __pyx_k_timer_10, sizeof(__pyx_k_timer_10), 0, 0, 1, 1}, - {&__pyx_n_s_timer_100, __pyx_k_timer_100, sizeof(__pyx_k_timer_100), 0, 0, 1, 1}, - {&__pyx_n_s_timer_100_locals_wrapper, __pyx_k_timer_100_locals_wrapper, sizeof(__pyx_k_timer_100_locals_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_timer_10_locals_wrapper, __pyx_k_timer_10_locals_wrapper, sizeof(__pyx_k_timer_10_locals_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_timer_10k, __pyx_k_timer_10k, sizeof(__pyx_k_timer_10k), 0, 0, 1, 1}, - {&__pyx_n_s_timer_10k_locals_wrapper, __pyx_k_timer_10k_locals_wrapper, sizeof(__pyx_k_timer_10k_locals_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_timer_1k, __pyx_k_timer_1k, sizeof(__pyx_k_timer_1k), 0, 0, 1, 1}, - {&__pyx_n_s_timer_1k_locals_wrapper, __pyx_k_timer_1k_locals_wrapper, sizeof(__pyx_k_timer_1k_locals_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_timer_1m, __pyx_k_timer_1m, sizeof(__pyx_k_timer_1m), 0, 0, 1, 1}, - {&__pyx_n_s_timer_1m_locals_wrapper, __pyx_k_timer_1m_locals_wrapper, sizeof(__pyx_k_timer_1m_locals_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_timer_locals_wrapper, __pyx_k_timer_locals_wrapper, sizeof(__pyx_k_timer_locals_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark, __pyx_k_timer_trials_benchmark, sizeof(__pyx_k_timer_trials_benchmark), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_10, __pyx_k_timer_trials_benchmark_10, sizeof(__pyx_k_timer_trials_benchmark_10), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_100, __pyx_k_timer_trials_benchmark_100, sizeof(__pyx_k_timer_trials_benchmark_100), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_100_local, __pyx_k_timer_trials_benchmark_100_local, sizeof(__pyx_k_timer_trials_benchmark_100_local), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_10_locals, __pyx_k_timer_trials_benchmark_10_locals, sizeof(__pyx_k_timer_trials_benchmark_10_locals), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_10k, __pyx_k_timer_trials_benchmark_10k, sizeof(__pyx_k_timer_trials_benchmark_10k), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_10k_local, __pyx_k_timer_trials_benchmark_10k_local, sizeof(__pyx_k_timer_trials_benchmark_10k_local), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_1k, __pyx_k_timer_trials_benchmark_1k, sizeof(__pyx_k_timer_trials_benchmark_1k), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_1k_locals, __pyx_k_timer_trials_benchmark_1k_locals, sizeof(__pyx_k_timer_trials_benchmark_1k_locals), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_1m, __pyx_k_timer_trials_benchmark_1m, sizeof(__pyx_k_timer_trials_benchmark_1m), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_1m_locals, __pyx_k_timer_trials_benchmark_1m_locals, sizeof(__pyx_k_timer_trials_benchmark_1m_locals), 0, 0, 1, 1}, - {&__pyx_n_s_timer_trials_benchmark_locals_wr, __pyx_k_timer_trials_benchmark_locals_wr, sizeof(__pyx_k_timer_trials_benchmark_locals_wr), 0, 0, 1, 1}, - {&__pyx_n_s_trials, __pyx_k_trials, sizeof(__pyx_k_trials), 0, 0, 1, 1}, - {&__pyx_n_s_wrapper, __pyx_k_wrapper, sizeof(__pyx_k_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_wraps, __pyx_k_wraps, sizeof(__pyx_k_wraps), 0, 0, 1, 1}, - {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, - {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, - {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":21 - * def timer(func, repetitions=100000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_tuple__4 = PyTuple_Pack(6, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_start, __pyx_n_s_x, __pyx_n_s_result, __pyx_n_s_end); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 21, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":45 - * def timer_10(func, repetitions=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_tuple__6 = PyTuple_Pack(6, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_start, __pyx_n_s_x, __pyx_n_s_result, __pyx_n_s_end); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 45, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":64 - * def timer_100(func, repetitions=100): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_tuple__8 = PyTuple_Pack(6, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_start, __pyx_n_s_x, __pyx_n_s_result, __pyx_n_s_end); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__8, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 64, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":83 - * def timer_1k(func, repetitions=1000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_tuple__10 = PyTuple_Pack(6, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_start, __pyx_n_s_x, __pyx_n_s_result, __pyx_n_s_end); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 83, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":102 - * def timer_10k(func, repetitions=10000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_tuple__12 = PyTuple_Pack(6, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_start, __pyx_n_s_x, __pyx_n_s_result, __pyx_n_s_end); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":121 - * def timer_1m(func, repetitions=1000000): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - * sys.stdout.flush() - */ - __pyx_tuple__14 = PyTuple_Pack(6, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_start, __pyx_n_s_x, __pyx_n_s_result, __pyx_n_s_end); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 121, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":178 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s__17); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":154 - * def timer_trials_benchmark(func, repetitions=100000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_tuple__21 = PyTuple_Pack(21, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_result_list, __pyx_n_s_benchmark_list, __pyx_n_s_x, __pyx_n_s_start, __pyx_n_s_y, __pyx_n_s_end, __pyx_n_s_result, __pyx_n_s_L, __pyx_n_s_start2, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_end2, __pyx_n_s_n, __pyx_n_s_run, __pyx_n_s_mean, __pyx_n_s_mean_benchmark, __pyx_n_s_np, __pyx_n_s_array, __pyx_n_s_ie); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(0, 0, 21, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 154, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":233 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s__17); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":209 - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_tuple__24 = PyTuple_Pack(21, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_result_list, __pyx_n_s_benchmark_list, __pyx_n_s_x, __pyx_n_s_start, __pyx_n_s_y, __pyx_n_s_end, __pyx_n_s_result, __pyx_n_s_L, __pyx_n_s_start2, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_end2, __pyx_n_s_n, __pyx_n_s_run, __pyx_n_s_mean, __pyx_n_s_mean_benchmark, __pyx_n_s_np, __pyx_n_s_array, __pyx_n_s_ie); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__24); - __Pyx_GIVEREF(__pyx_tuple__24); - __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(0, 0, 21, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 209, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":284 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s__17); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":260 - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_tuple__27 = PyTuple_Pack(21, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_result_list, __pyx_n_s_benchmark_list, __pyx_n_s_x, __pyx_n_s_start, __pyx_n_s_y, __pyx_n_s_end, __pyx_n_s_result, __pyx_n_s_L, __pyx_n_s_start2, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_end2, __pyx_n_s_n, __pyx_n_s_run, __pyx_n_s_mean, __pyx_n_s_mean_benchmark, __pyx_n_s_np, __pyx_n_s_array, __pyx_n_s_ie); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(0, 0, 21, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 260, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":335 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s__17); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":311 - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_tuple__30 = PyTuple_Pack(21, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_result_list, __pyx_n_s_benchmark_list, __pyx_n_s_x, __pyx_n_s_start, __pyx_n_s_y, __pyx_n_s_end, __pyx_n_s_result, __pyx_n_s_L, __pyx_n_s_start2, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_end2, __pyx_n_s_n, __pyx_n_s_run, __pyx_n_s_mean, __pyx_n_s_mean_benchmark, __pyx_n_s_np, __pyx_n_s_array, __pyx_n_s_ie); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__30); - __Pyx_GIVEREF(__pyx_tuple__30); - __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(0, 0, 21, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 311, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":386 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s__17); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":362 - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_tuple__33 = PyTuple_Pack(21, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_result_list, __pyx_n_s_benchmark_list, __pyx_n_s_x, __pyx_n_s_start, __pyx_n_s_y, __pyx_n_s_end, __pyx_n_s_result, __pyx_n_s_L, __pyx_n_s_start2, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_end2, __pyx_n_s_n, __pyx_n_s_run, __pyx_n_s_mean, __pyx_n_s_mean_benchmark, __pyx_n_s_np, __pyx_n_s_array, __pyx_n_s_ie); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(0, 0, 21, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 362, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":437 - * end2 = time.time() - * benchmark_list.append(end2 - start2) - * sys.stdout.write(".") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * gc.enable() # re-enable garbage collection - */ - __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s__17); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - - /* "lib/Naked/toolshed/c/benchmarking.pyx":413 - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - * sys.stdout.flush() - */ - __pyx_tuple__36 = PyTuple_Pack(21, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_result_list, __pyx_n_s_benchmark_list, __pyx_n_s_x, __pyx_n_s_start, __pyx_n_s_y, __pyx_n_s_end, __pyx_n_s_result, __pyx_n_s_L, __pyx_n_s_start2, __pyx_n_s_j, __pyx_n_s_i, __pyx_n_s_end2, __pyx_n_s_n, __pyx_n_s_run, __pyx_n_s_mean, __pyx_n_s_mean_benchmark, __pyx_n_s_np, __pyx_n_s_array, __pyx_n_s_ie); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__36); - __Pyx_GIVEREF(__pyx_tuple__36); - __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(0, 0, 21, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":19 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__38 = PyTuple_Pack(4, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__38); - __Pyx_GIVEREF(__pyx_tuple__38); - __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":43 - * #------------------------------------------------------------------------------ - * - * def timer_10(func, repetitions=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__40 = PyTuple_Pack(4, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__40); - __Pyx_GIVEREF(__pyx_tuple__40); - __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_10, 43, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":62 - * return wrapper - * - * def timer_100(func, repetitions=100): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__42 = PyTuple_Pack(4, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__42); - __Pyx_GIVEREF(__pyx_tuple__42); - __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_100, 62, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":81 - * return wrapper - * - * def timer_1k(func, repetitions=1000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__44 = PyTuple_Pack(4, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__44); - __Pyx_GIVEREF(__pyx_tuple__44); - __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_1k, 81, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":100 - * return wrapper - * - * def timer_10k(func, repetitions=10000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__46 = PyTuple_Pack(4, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__46); - __Pyx_GIVEREF(__pyx_tuple__46); - __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_10k, 100, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":119 - * return wrapper - * - * def timer_1m(func, repetitions=1000000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__48 = PyTuple_Pack(4, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__48); - __Pyx_GIVEREF(__pyx_tuple__48); - __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_1m, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":152 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__50 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_trials, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__50); - __Pyx_GIVEREF(__pyx_tuple__50); - __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_trials_benchmark, 152, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":207 - * # additional benchmark decorators that replicate the above function with different # repetitions - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__52 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_trials, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__52); - __Pyx_GIVEREF(__pyx_tuple__52); - __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_trials_benchmark_10, 207, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":258 - * return wrapper - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__54 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_trials, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__54); - __Pyx_GIVEREF(__pyx_tuple__54); - __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__54, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_trials_benchmark_100, 258, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":309 - * return wrapper - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__56 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_trials, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__56); - __Pyx_GIVEREF(__pyx_tuple__56); - __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_trials_benchmark_1k, 309, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":360 - * return wrapper - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__58 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_trials, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__58); - __Pyx_GIVEREF(__pyx_tuple__58); - __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_trials_benchmark_10k, 360, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/benchmarking.pyx":411 - * return wrapper - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_tuple__60 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_repetitions, __pyx_n_s_trials, __pyx_n_s_wrapper, __pyx_n_s_wrapper); if (unlikely(!__pyx_tuple__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__60); - __Pyx_GIVEREF(__pyx_tuple__60); - __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__60, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_timer_trials_benchmark_1m, 411, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_100 = PyInt_FromLong(100); if (unlikely(!__pyx_int_100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_1000 = PyInt_FromLong(1000); if (unlikely(!__pyx_int_1000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_10000 = PyInt_FromLong(10000L); if (unlikely(!__pyx_int_10000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_100000 = PyInt_FromLong(100000L); if (unlikely(!__pyx_int_100000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_1000000 = PyInt_FromLong(1000000L); if (unlikely(!__pyx_int_1000000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initbenchmarking(void); /*proto*/ -PyMODINIT_FUNC initbenchmarking(void) -#else -PyMODINIT_FUNC PyInit_benchmarking(void); /*proto*/ -PyMODINIT_FUNC PyInit_benchmarking(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_benchmarking(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("benchmarking"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__benchmarking) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.benchmarking")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.benchmarking", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct__timer; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10 = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_1_timer_10; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100 = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_2_timer_100; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_3_timer_1k; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_4_timer_10k; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_5_timer_1m; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_6_timer_trials_benchmark; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10 = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_7_timer_trials_benchmark_10; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100 = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_8_timer_trials_benchmark_100; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_9_timer_trials_benchmark_1k; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_10_timer_trials_benchmark_10k; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m = &__pyx_type_3lib_5Naked_8toolshed_1c_12benchmarking___pyx_scope_struct_11_timer_trials_benchmark_1m; - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/benchmarking.pyx":4 - * # encoding: utf-8 - * - * import sys # <<<<<<<<<<<<<< - * import time - * import gc - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":5 - * - * import sys - * import time # <<<<<<<<<<<<<< - * import gc - * from functools import wraps - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_time, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":6 - * import sys - * import time - * import gc # <<<<<<<<<<<<<< - * from functools import wraps - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_gc, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_gc, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":7 - * import time - * import gc - * from functools import wraps # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_wraps); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_wraps); - __Pyx_GIVEREF(__pyx_n_s_wraps); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_wraps); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_wraps, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":19 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer(func, repetitions=100000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_1timer, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":43 - * #------------------------------------------------------------------------------ - * - * def timer_10(func, repetitions=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_3timer_10, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_10, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":62 - * return wrapper - * - * def timer_100(func, repetitions=100): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_5timer_100, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_100, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":81 - * return wrapper - * - * def timer_1k(func, repetitions=1000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_7timer_1k, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_1k, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":100 - * return wrapper - * - * def timer_10k(func, repetitions=10000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_9timer_10k, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_10k, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":119 - * return wrapper - * - * def timer_1m(func, repetitions=1000000): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_11timer_1m, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_1m, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":152 - * # def myfunction(): - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark(func, repetitions=100000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_13timer_trials_benchmark, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_trials_benchmark, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":207 - * # additional benchmark decorators that replicate the above function with different # repetitions - * #------------------------------------------------------------------------------ - * def timer_trials_benchmark_10(func, repetitions=10, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_15timer_trials_benchmark_10, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_trials_benchmark_10, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":258 - * return wrapper - * - * def timer_trials_benchmark_100(func, repetitions=100, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_17timer_trials_benchmark_100, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_trials_benchmark_100, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":309 - * return wrapper - * - * def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_19timer_trials_benchmark_1k, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_trials_benchmark_1k, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":360 - * return wrapper - * - * def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_21timer_trials_benchmark_10k, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_trials_benchmark_10k, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":411 - * return wrapper - * - * def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): # <<<<<<<<<<<<<< - * @wraps(func) - * def wrapper(*args, **kwargs): - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_12benchmarking_23timer_trials_benchmark_1m, NULL, __pyx_n_s_lib_Naked_toolshed_c_benchmarkin); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_timer_trials_benchmark_1m, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":462 - * return wrapper - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_3) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/benchmarking.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.benchmarking", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.benchmarking"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static CYTHON_INLINE int __Pyx_CheckKeywordStrings( - PyObject *kwdict, - const char* function_name, - int kw_allowed) -{ - PyObject* key = 0; - Py_ssize_t pos = 0; -#if CPYTHON_COMPILING_IN_PYPY - if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) - goto invalid_keyword; - return 1; -#else - while (PyDict_Next(kwdict, &pos, &key, 0)) { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) - #endif - if (unlikely(!PyUnicode_Check(key))) - goto invalid_keyword_type; - } - if ((!kw_allowed) && unlikely(key)) - goto invalid_keyword; - return 1; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - return 0; -#endif -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif - return 0; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) { - PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname); -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static PyObject *__Pyx_GetStdout(void) { - PyObject *f = PySys_GetObject((char *)"stdout"); - if (!f) { - PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); - } - return f; -} -static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { - int i; - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { - PyObject* v; - if (PyFile_SoftSpace(f, 1)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - v = PyTuple_GET_ITEM(arg_tuple, i); - if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) - goto error; - if (PyString_Check(v)) { - char *s = PyString_AsString(v); - Py_ssize_t len = PyString_Size(v); - if (len > 0) { - switch (s[len-1]) { - case ' ': break; - case '\f': case '\r': case '\n': case '\t': case '\v': - PyFile_SoftSpace(f, 0); - break; - default: break; - } - } - } - } - if (newline) { - if (PyFile_WriteString("\n", f) < 0) - goto error; - PyFile_SoftSpace(f, 0); - } - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; -} -#else /* Python 3 has a print function */ -static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { - PyObject* kwargs = 0; - PyObject* result = 0; - PyObject* end_string; - if (unlikely(!__pyx_print)) { - __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); - if (!__pyx_print) - return -1; - } - if (stream) { - kwargs = PyDict_New(); - if (unlikely(!kwargs)) - return -1; - if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) - goto bad; - if (!newline) { - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - goto bad; - if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - goto bad; - } - Py_DECREF(end_string); - } - } else if (!newline) { - if (unlikely(!__pyx_print_kwargs)) { - __pyx_print_kwargs = PyDict_New(); - if (unlikely(!__pyx_print_kwargs)) - return -1; - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - return -1; - if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - return -1; - } - Py_DECREF(end_string); - } - kwargs = __pyx_print_kwargs; - } - result = PyObject_Call(__pyx_print, arg_tuple, kwargs); - if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) - Py_DECREF(kwargs); - if (!result) - return -1; - Py_DECREF(result); - return 0; -bad: - if (kwargs != __pyx_print_kwargs) - Py_XDECREF(kwargs); - return -1; -} -#endif - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static int __Pyx_PrintOne(PyObject* f, PyObject *o) { - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - if (PyFile_SoftSpace(f, 0)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) - goto error; - if (PyFile_WriteString("\n", f) < 0) - goto error; - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; - /* the line below is just to avoid C compiler - * warnings about unused functions */ - return __Pyx_Print(f, NULL, 0); -} -#else /* Python 3 has a print function */ -static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { - int res; - PyObject* arg_tuple = PyTuple_Pack(1, o); - if (unlikely(!arg_tuple)) - return -1; - res = __Pyx_Print(stream, arg_tuple, 1); - Py_DECREF(arg_tuple); - return res; -} -#endif - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.pyx deleted file mode 100644 index 63878bc..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/benchmarking.pyx +++ /dev/null @@ -1,463 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -import time -import gc -from functools import wraps - -#------------------------------------------------------------------------------ -# [ timer function decorator ] -# runs timed repetitions of the decorated function in a single trial -# default is 100,000 repetitions in the trial -# reports the results of the trial -# Usage example: -# from Naked.toolshed.benchmarking import timer -# @timer -# def myfunction(): -#------------------------------------------------------------------------------ -def timer(func, repetitions=100000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -#------------------------------------------------------------------------------ -# [ timer_X function decorators ] -# replicate the above decorator with different number of repetitions -#------------------------------------------------------------------------------ - -def timer_10(func, repetitions=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_100(func, repetitions=100): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_1k(func, repetitions=1000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_10k(func, repetitions=10000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -def timer_1m(func, repetitions=1000000): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting " + str(repetitions) + " repetitions of " + func.__name__ + "()...") - sys.stdout.flush() - print(" ") - # disable garbage collection - gc.collect() - gc.disable() - start = time.time() - for x in range(repetitions): - result = func(*args, **kwargs) - end = time.time() - gc.enable() # re-enable garbage collection - gc.collect() - print(str(repetitions) + " repetitions of " + func.__name__ + " : " + str(end-start) + " sec") - return result - return wrapper - -#------------------------------------------------------------------------------ -# [ timer_trials_benchmark decorator function ] -# time a function and compare to a benchmark function -# default is 10 trials x 100,000 repetitions/trial for each function -# Results: -# - Mean of the 10 trials of the test function -# - standard deviation of the 10 trials (if numpy is available) -# - result for 100,000 repetitions of the benchmark function -# - ratio of the test : benchmark function results -# Usage example: -# from Naked.toolshed.benchmarking import timer_trials_benchmark -# @timer_trials_benchmark -# def myfunction(): -#------------------------------------------------------------------------------ -def timer_trials_benchmark(func, repetitions=100000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -#------------------------------------------------------------------------------ -# [ timer_trials_benchmark_X decorators ] -# additional benchmark decorators that replicate the above function with different # repetitions -#------------------------------------------------------------------------------ -def timer_trials_benchmark_10(func, repetitions=10, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_100(func, repetitions=100, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_1k(func, repetitions=1000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_10k(func, repetitions=10000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -def timer_trials_benchmark_1m(func, repetitions=1000000, trials=10): - @wraps(func) - def wrapper(*args, **kwargs): - sys.stdout.write("Starting timed trials of " + func.__name__ + "()") - sys.stdout.flush() - result_list = [] - benchmark_list = [] - # disable garbage collection - gc.collect() - gc.disable() - for x in range(trials): - # test function - start = time.time() - for y in range(repetitions): - func(*args, **kwargs) - end = time.time() - result = func(*args, **kwargs) - result_list.append(end-start) - # benchmark function - L = [] - start2 = time.time() - for j in range(repetitions): - for i in range(10): - L.append(i) - end2 = time.time() - benchmark_list.append(end2 - start2) - sys.stdout.write(".") - sys.stdout.flush() - gc.enable() # re-enable garbage collection - gc.collect() - print(" ") - n = 1 - for run in result_list: - print("Trial " + str(n) + ":\t" + str(run)) - n += 1 - print("-"*50) - mean = sum(result_list)/len(result_list) - mean_benchmark = sum(benchmark_list)/len(benchmark_list) - print("Mean for " + str(repetitions) + " repetitions: " + str(mean) + " sec") - try: - import numpy as np - array = np.array(result_list) - print( "Standard Deviation: " + str(np.std(array))) - except ImportError as ie: - pass - print("Mean per repetition: " + str(mean/repetitions) + " sec") - print("Mean for " + str(repetitions) + " of benchmark function:" + str(mean_benchmark) + " sec") - print("Ratio: " + str(mean/mean_benchmark)) - return result - return wrapper - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/build.sh b/venv/lib/python3.6/site-packages/Naked/toolshed/c/build.sh deleted file mode 100755 index 35154d4..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/build.sh +++ /dev/null @@ -1 +0,0 @@ -python setup.py build_ext --inplace diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.c deleted file mode 100644 index 796941b..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.c +++ /dev/null @@ -1,5294 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:13 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__casts -#define __PYX_HAVE_API__lib__Naked__toolshed__c__casts -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "casts.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -#ifndef CYTHON_PROFILE - #define CYTHON_PROFILE 1 -#endif -#ifndef CYTHON_TRACE - #define CYTHON_TRACE 0 -#endif -#if CYTHON_TRACE - #undef CYTHON_PROFILE_REUSE_FRAME -#endif -#ifndef CYTHON_PROFILE_REUSE_FRAME - #define CYTHON_PROFILE_REUSE_FRAME 0 -#endif -#if CYTHON_PROFILE || CYTHON_TRACE - #include "compile.h" - #include "frameobject.h" - #include "traceback.h" - #if CYTHON_PROFILE_REUSE_FRAME - #define CYTHON_FRAME_MODIFIER static - #define CYTHON_FRAME_DEL - #else - #define CYTHON_FRAME_MODIFIER - #define CYTHON_FRAME_DEL Py_CLEAR(__pyx_frame) - #endif - #define __Pyx_TraceDeclarations \ - static PyCodeObject *__pyx_frame_code = NULL; \ - CYTHON_FRAME_MODIFIER PyFrameObject *__pyx_frame = NULL; \ - int __Pyx_use_tracing = 0; - #define __Pyx_TraceCall(funcname, srcfile, firstlineno) \ - if (unlikely(PyThreadState_GET()->use_tracing && \ - (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc)))) { \ - __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&__pyx_frame_code, &__pyx_frame, funcname, srcfile, firstlineno); \ - } - #define __Pyx_TraceException() \ - if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing && \ - (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc))) { \ - PyThreadState* tstate = PyThreadState_GET(); \ - tstate->use_tracing = 0; \ - PyObject *exc_info = __Pyx_GetExceptionTuple(); \ - if (exc_info) { \ - if (CYTHON_TRACE && tstate->c_tracefunc) \ - tstate->c_tracefunc( \ - tstate->c_traceobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ - tstate->c_profilefunc( \ - tstate->c_profileobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ - Py_DECREF(exc_info); \ - } \ - tstate->use_tracing = 1; \ - } - #define __Pyx_TraceReturn(result) \ - if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing) { \ - PyThreadState* tstate = PyThreadState_GET(); \ - tstate->use_tracing = 0; \ - if (CYTHON_TRACE && tstate->c_tracefunc) \ - tstate->c_tracefunc( \ - tstate->c_traceobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ - if (tstate->c_profilefunc) \ - tstate->c_profilefunc( \ - tstate->c_profileobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ - CYTHON_FRAME_DEL; \ - tstate->use_tracing = 1; \ - } - static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno); /*proto*/ - static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno); /*proto*/ -#else - #define __Pyx_TraceDeclarations - #define __Pyx_TraceCall(funcname, srcfile, firstlineno) - #define __Pyx_TraceException() - #define __Pyx_TraceReturn(result) -#endif /* CYTHON_PROFILE */ -#if CYTHON_TRACE - #define __Pyx_TraceLine(lineno) \ - if (unlikely(__Pyx_use_tracing) && unlikely(PyThreadState_GET()->use_tracing && PyThreadState_GET()->c_tracefunc)) { \ - PyThreadState* tstate = PyThreadState_GET(); \ - __pyx_frame->f_lineno = lineno; \ - tstate->use_tracing = 0; \ - tstate->c_tracefunc(tstate->c_traceobj, __pyx_frame, PyTrace_LINE, NULL); \ - tstate->use_tracing = 1; \ - } -#else - #define __Pyx_TraceLine(lineno) -#endif - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ -#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 -static PyObject* __pyx_print = 0; -static PyObject* __pyx_print_kwargs = 0; -#endif - -static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.casts' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.casts" -int __pyx_module_is_main_lib__Naked__toolshed__c__casts = 0; - -/* Implementation of 'lib.Naked.toolshed.c.casts' */ -static PyObject *__pyx_builtin_Exception; -static PyObject *__pyx_builtin_TypeError; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_nob(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_attributes); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_2xd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dictionary_arg, PyObject *__pyx_v_attributes); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_4xl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_list_arg, PyObject *__pyx_v_attributes); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_6xq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_queue_arg, PyObject *__pyx_v_attributes); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_8xset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_set_arg, PyObject *__pyx_v_attributes); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_10xfset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_set_arg, PyObject *__pyx_v_attributes); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_12xstr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_string_arg, PyObject *__pyx_v_attributes); /* proto */ -static char __pyx_k_2[] = "2"; -static char __pyx_k_e[] = "e"; -static char __pyx_k_te[] = "te"; -static char __pyx_k_xd[] = "xd"; -static char __pyx_k_xl[] = "xl"; -static char __pyx_k_xq[] = "xq"; -static char __pyx_k_end[] = "end"; -static char __pyx_k_nob[] = "nob"; -static char __pyx_k_XSet[] = "XSet"; -static char __pyx_k_arg1[] = "arg1"; -static char __pyx_k_file[] = "file"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_test[] = "test"; -static char __pyx_k_xset[] = "xset"; -static char __pyx_k_xstr[] = "xstr"; -static char __pyx_k_XDict[] = "XDict"; -static char __pyx_k_XFSet[] = "XFSet"; -static char __pyx_k_XList[] = "XList"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_print[] = "print"; -static char __pyx_k_xfset[] = "xfset"; -static char __pyx_k_A_test[] = "A test"; -static char __pyx_k_XQueue[] = "XQueue"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_test_2[] = "__test__"; -static char __pyx_k_XString[] = "XString"; -static char __pyx_k_set_arg[] = "set_arg"; -static char __pyx_k_list_arg[] = "list_arg"; -static char __pyx_k_Exception[] = "Exception"; -static char __pyx_k_TypeError[] = "TypeError"; -static char __pyx_k_queue_arg[] = "queue_arg"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_attributes[] = "attributes"; -static char __pyx_k_string_arg[] = "string_arg"; -static char __pyx_k_NakedObject[] = "NakedObject"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_dictionary_arg[] = "dictionary_arg"; -static char __pyx_k_Naked_toolshed_c_types[] = "Naked.toolshed.c.types"; -static char __pyx_k_lib_Naked_toolshed_c_casts[] = "lib.Naked.toolshed.c.casts"; -static char __pyx_k_Naked_Framework_Error_unable_to[] = "Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py)."; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/casts.pyx"; -static char __pyx_k_Attempted_to_cast_to_a_XDict_wit[] = "Attempted to cast to a XDict with an incompatible type"; -static char __pyx_k_Attempted_to_cast_to_a_XList_wit[] = "Attempted to cast to a XList with an incompatible type"; -static char __pyx_k_Attempted_to_cast_to_a_XQueue_wi[] = "Attempted to cast to a XQueue with an incompatible type"; -static char __pyx_k_Attempted_to_cast_to_a_XSet_with[] = "Attempted to cast to a XSet with an incompatible type"; -static char __pyx_k_Attempted_to_cast_to_a_XString_w[] = "Attempted to cast to a XString with an incompatible type"; -static char __pyx_k_Naked_Framework_Error_unable_to_2[] = "Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_3[] = "Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_4[] = "Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_5[] = "Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_6[] = "Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py)."; -static PyObject *__pyx_kp_s_2; -static PyObject *__pyx_kp_s_A_test; -static PyObject *__pyx_kp_s_Attempted_to_cast_to_a_XDict_wit; -static PyObject *__pyx_kp_s_Attempted_to_cast_to_a_XList_wit; -static PyObject *__pyx_kp_s_Attempted_to_cast_to_a_XQueue_wi; -static PyObject *__pyx_kp_s_Attempted_to_cast_to_a_XSet_with; -static PyObject *__pyx_kp_s_Attempted_to_cast_to_a_XString_w; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_n_s_Exception; -static PyObject *__pyx_n_s_NakedObject; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_4; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_5; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_6; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_Naked_toolshed_c_types; -static PyObject *__pyx_n_s_TypeError; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_n_s_XDict; -static PyObject *__pyx_n_s_XFSet; -static PyObject *__pyx_n_s_XList; -static PyObject *__pyx_n_s_XQueue; -static PyObject *__pyx_n_s_XSet; -static PyObject *__pyx_n_s_XString; -static PyObject *__pyx_n_s_arg1; -static PyObject *__pyx_n_s_attributes; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_dictionary_arg; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_end; -static PyObject *__pyx_n_s_file; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_casts; -static PyObject *__pyx_n_s_list_arg; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_nob; -static PyObject *__pyx_n_s_print; -static PyObject *__pyx_n_s_queue_arg; -static PyObject *__pyx_n_s_set_arg; -static PyObject *__pyx_n_s_string_arg; -static PyObject *__pyx_n_s_te; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_test_2; -static PyObject *__pyx_n_s_xd; -static PyObject *__pyx_n_s_xfset; -static PyObject *__pyx_n_s_xl; -static PyObject *__pyx_n_s_xq; -static PyObject *__pyx_n_s_xset; -static PyObject *__pyx_n_s_xstr; -static PyObject *__pyx_k_; -static PyObject *__pyx_k__2; -static PyObject *__pyx_k__4; -static PyObject *__pyx_k__6; -static PyObject *__pyx_k__8; -static PyObject *__pyx_k__10; -static PyObject *__pyx_k__12; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__22; -static PyObject *__pyx_tuple__24; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_codeobj__15; -static PyObject *__pyx_codeobj__17; -static PyObject *__pyx_codeobj__19; -static PyObject *__pyx_codeobj__21; -static PyObject *__pyx_codeobj__23; -static PyObject *__pyx_codeobj__25; -static PyObject *__pyx_codeobj__27; - -/* "lib/Naked/toolshed/c/casts.pyx":5 - * # cython: profile=True - * - * cdef inline int increment(object iterable, object test_string): # <<<<<<<<<<<<<< - * cdef int count = 0 - * cdef object thing - */ - -static CYTHON_INLINE int __pyx_f_3lib_5Naked_8toolshed_1c_5casts_increment(PyObject *__pyx_v_iterable, PyObject *__pyx_v_test_string) { - int __pyx_v_count; - PyObject *__pyx_v_thing = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *(*__pyx_t_3)(PyObject *); - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("increment", 0); - __Pyx_TraceCall("increment", __pyx_f[0], 5); - - /* "lib/Naked/toolshed/c/casts.pyx":6 - * - * cdef inline int increment(object iterable, object test_string): - * cdef int count = 0 # <<<<<<<<<<<<<< - * cdef object thing - * for thing in iterable: - */ - __pyx_v_count = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":8 - * cdef int count = 0 - * cdef object thing - * for thing in iterable: # <<<<<<<<<<<<<< - * if thing == test_string: - * count += 1 - */ - if (PyList_CheckExact(__pyx_v_iterable) || PyTuple_CheckExact(__pyx_v_iterable)) { - __pyx_t_1 = __pyx_v_iterable; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - __pyx_t_3 = NULL; - } else { - __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_iterable); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - for (;;) { - if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_4 = __pyx_t_3(__pyx_t_1); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_thing, __pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":9 - * cdef object thing - * for thing in iterable: - * if thing == test_string: # <<<<<<<<<<<<<< - * count += 1 - * return count - */ - __pyx_t_4 = PyObject_RichCompare(__pyx_v_thing, __pyx_v_test_string, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/casts.pyx":10 - * for thing in iterable: - * if thing == test_string: - * count += 1 # <<<<<<<<<<<<<< - * return count - * - */ - __pyx_v_count = (__pyx_v_count + 1); - goto __pyx_L5; - } - __pyx_L5:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":11 - * if thing == test_string: - * count += 1 - * return count # <<<<<<<<<<<<<< - * - * from Naked.toolshed.c.types import NakedObject, XFSet, XDict, XList, XQueue, XSet, XString - */ - __pyx_r = __pyx_v_count; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/casts.pyx":5 - * # cython: profile=True - * - * cdef inline int increment(object iterable, object test_string): # <<<<<<<<<<<<<< - * cdef int count = 0 - * cdef object thing - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_WriteUnraisable("lib.Naked.toolshed.c.casts.increment", __pyx_clineno, __pyx_lineno, __pyx_filename, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_thing); - __Pyx_TraceReturn(Py_None); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":20 - * # Cast a dictionary of attributes to a NakedObject with key>attribute mapping - * #------------------------------------------------------------------------------ - * def nob(attributes={}): # <<<<<<<<<<<<<< - * try: - * return NakedObject(attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_1nob(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_1nob = {__Pyx_NAMESTR("nob"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_1nob, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_1nob(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("nob (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_attributes,0}; - PyObject* values[1] = {0}; - values[0] = __pyx_k_; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "nob") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_attributes = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("nob", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.nob", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_nob(__pyx_self, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_nob(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_attributes) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("nob", 0); - __Pyx_TraceCall("nob", __pyx_f[0], 20); - - /* "lib/Naked/toolshed/c/casts.pyx":21 - * #------------------------------------------------------------------------------ - * def nob(attributes={}): - * try: # <<<<<<<<<<<<<< - * return NakedObject(attributes) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":22 - * def nob(attributes={}): - * try: - * return NakedObject(attributes) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":23 - * try: - * return NakedObject(attributes) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.nob", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":24 - * return NakedObject(attributes) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":25 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/casts.pyx":26 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":20 - * # Cast a dictionary of attributes to a NakedObject with key>attribute mapping - * #------------------------------------------------------------------------------ - * def nob(attributes={}): # <<<<<<<<<<<<<< - * try: - * return NakedObject(attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.nob", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":32 - * # Cast a Python dictionary to a XDict - * #------------------------------------------------------------------------------ - * def xd(dictionary_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XDict(dictionary_arg, attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_3xd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_3xd = {__Pyx_NAMESTR("xd"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_3xd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_3xd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_dictionary_arg = 0; - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xd (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dictionary_arg,&__pyx_n_s_attributes,0}; - PyObject* values[2] = {0,0}; - values[1] = __pyx_k__2; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dictionary_arg)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_dictionary_arg = values[0]; - __pyx_v_attributes = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xd", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_2xd(__pyx_self, __pyx_v_dictionary_arg, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_2xd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dictionary_arg, PyObject *__pyx_v_attributes) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("xd", 0); - __Pyx_TraceCall("xd", __pyx_f[0], 32); - - /* "lib/Naked/toolshed/c/casts.pyx":33 - * #------------------------------------------------------------------------------ - * def xd(dictionary_arg, attributes={}): - * try: # <<<<<<<<<<<<<< - * return XDict(dictionary_arg, attributes) - * except TypeError: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":34 - * def xd(dictionary_arg, attributes={}): - * try: - * return XDict(dictionary_arg, attributes) # <<<<<<<<<<<<<< - * except TypeError: - * raise TypeError("Attempted to cast to a XDict with an incompatible type") - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_XDict); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dictionary_arg); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dictionary_arg); - __Pyx_GIVEREF(__pyx_v_dictionary_arg); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":35 - * try: - * return XDict(dictionary_arg, attributes) - * except TypeError: # <<<<<<<<<<<<<< - * raise TypeError("Attempted to cast to a XDict with an incompatible type") - * except Exception as e: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xd", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - - /* "lib/Naked/toolshed/c/casts.pyx":36 - * return XDict(dictionary_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XDict with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/casts.pyx":37 - * except TypeError: - * raise TypeError("Attempted to cast to a XDict with an incompatible type") - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xd", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":38 - * raise TypeError("Attempted to cast to a XDict with an incompatible type") - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":39 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/casts.pyx":40 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":32 - * # Cast a Python dictionary to a XDict - * #------------------------------------------------------------------------------ - * def xd(dictionary_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XDict(dictionary_arg, attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":46 - * # Cast a Python list, set, or tuple to a XList - * #------------------------------------------------------------------------------ - * def xl(list_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XList(list_arg, attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_5xl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_5xl = {__Pyx_NAMESTR("xl"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_5xl, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_5xl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_list_arg = 0; - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xl (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_list_arg,&__pyx_n_s_attributes,0}; - PyObject* values[2] = {0,0}; - values[1] = __pyx_k__4; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_list_arg)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xl") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_list_arg = values[0]; - __pyx_v_attributes = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xl", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xl", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_4xl(__pyx_self, __pyx_v_list_arg, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_4xl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_list_arg, PyObject *__pyx_v_attributes) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("xl", 0); - __Pyx_TraceCall("xl", __pyx_f[0], 46); - - /* "lib/Naked/toolshed/c/casts.pyx":47 - * #------------------------------------------------------------------------------ - * def xl(list_arg, attributes={}): - * try: # <<<<<<<<<<<<<< - * return XList(list_arg, attributes) - * except TypeError: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":48 - * def xl(list_arg, attributes={}): - * try: - * return XList(list_arg, attributes) # <<<<<<<<<<<<<< - * except TypeError: - * raise TypeError("Attempted to cast to a XList with an incompatible type") - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_XList); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_list_arg); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_list_arg); - __Pyx_GIVEREF(__pyx_v_list_arg); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":49 - * try: - * return XList(list_arg, attributes) - * except TypeError: # <<<<<<<<<<<<<< - * raise TypeError("Attempted to cast to a XList with an incompatible type") - * except Exception as e: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xl", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - - /* "lib/Naked/toolshed/c/casts.pyx":50 - * return XList(list_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XList with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/casts.pyx":51 - * except TypeError: - * raise TypeError("Attempted to cast to a XList with an incompatible type") - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xl", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":52 - * raise TypeError("Attempted to cast to a XList with an incompatible type") - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":53 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/casts.pyx":54 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":46 - * # Cast a Python list, set, or tuple to a XList - * #------------------------------------------------------------------------------ - * def xl(list_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XList(list_arg, attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xl", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":60 - * # Cast a Python list, set, tuple to a XQueue - * #------------------------------------------------------------------------------ - * def xq(queue_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XQueue(queue_arg, attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_7xq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_7xq = {__Pyx_NAMESTR("xq"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_7xq, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_7xq(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_queue_arg = 0; - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xq (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_queue_arg,&__pyx_n_s_attributes,0}; - PyObject* values[2] = {0,0}; - values[1] = __pyx_k__6; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_queue_arg)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xq") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_queue_arg = values[0]; - __pyx_v_attributes = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xq", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xq", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_6xq(__pyx_self, __pyx_v_queue_arg, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_6xq(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_queue_arg, PyObject *__pyx_v_attributes) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("xq", 0); - __Pyx_TraceCall("xq", __pyx_f[0], 60); - - /* "lib/Naked/toolshed/c/casts.pyx":61 - * #------------------------------------------------------------------------------ - * def xq(queue_arg, attributes={}): - * try: # <<<<<<<<<<<<<< - * return XQueue(queue_arg, attributes) - * except TypeError: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":62 - * def xq(queue_arg, attributes={}): - * try: - * return XQueue(queue_arg, attributes) # <<<<<<<<<<<<<< - * except TypeError: - * raise TypeError("Attempted to cast to a XQueue with an incompatible type") - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_XQueue); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_queue_arg); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_queue_arg); - __Pyx_GIVEREF(__pyx_v_queue_arg); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":63 - * try: - * return XQueue(queue_arg, attributes) - * except TypeError: # <<<<<<<<<<<<<< - * raise TypeError("Attempted to cast to a XQueue with an incompatible type") - * except Exception as e: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xq", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - - /* "lib/Naked/toolshed/c/casts.pyx":64 - * return XQueue(queue_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XQueue with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/casts.pyx":65 - * except TypeError: - * raise TypeError("Attempted to cast to a XQueue with an incompatible type") - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xq", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":66 - * raise TypeError("Attempted to cast to a XQueue with an incompatible type") - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":67 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/casts.pyx":68 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":60 - * # Cast a Python list, set, tuple to a XQueue - * #------------------------------------------------------------------------------ - * def xq(queue_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XQueue(queue_arg, attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xq", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":74 - * # Cast a Python set to a XSet - * #------------------------------------------------------------------------------ - * def xset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XSet(set_arg, attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_9xset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_9xset = {__Pyx_NAMESTR("xset"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_9xset, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_9xset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_set_arg = 0; - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xset (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_set_arg,&__pyx_n_s_attributes,0}; - PyObject* values[2] = {0,0}; - values[1] = __pyx_k__8; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_set_arg)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xset") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_set_arg = values[0]; - __pyx_v_attributes = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xset", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_8xset(__pyx_self, __pyx_v_set_arg, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_8xset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_set_arg, PyObject *__pyx_v_attributes) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("xset", 0); - __Pyx_TraceCall("xset", __pyx_f[0], 74); - - /* "lib/Naked/toolshed/c/casts.pyx":75 - * #------------------------------------------------------------------------------ - * def xset(set_arg, attributes={}): - * try: # <<<<<<<<<<<<<< - * return XSet(set_arg, attributes) - * except TypeError: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":76 - * def xset(set_arg, attributes={}): - * try: - * return XSet(set_arg, attributes) # <<<<<<<<<<<<<< - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_XSet); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_set_arg); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_set_arg); - __Pyx_GIVEREF(__pyx_v_set_arg); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":77 - * try: - * return XSet(set_arg, attributes) - * except TypeError: # <<<<<<<<<<<<<< - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - * except Exception as e: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xset", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - - /* "lib/Naked/toolshed/c/casts.pyx":78 - * return XSet(set_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/casts.pyx":79 - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xset", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":80 - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":81 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/casts.pyx":82 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":74 - * # Cast a Python set to a XSet - * #------------------------------------------------------------------------------ - * def xset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XSet(set_arg, attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":88 - * # Cast a Python set to a XFSet - * #------------------------------------------------------------------------------ - * def xfset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XFSet(set_arg, attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_11xfset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_11xfset = {__Pyx_NAMESTR("xfset"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_11xfset, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_11xfset(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_set_arg = 0; - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xfset (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_set_arg,&__pyx_n_s_attributes,0}; - PyObject* values[2] = {0,0}; - values[1] = __pyx_k__10; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_set_arg)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xfset") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_set_arg = values[0]; - __pyx_v_attributes = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xfset", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xfset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_10xfset(__pyx_self, __pyx_v_set_arg, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_10xfset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_set_arg, PyObject *__pyx_v_attributes) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("xfset", 0); - __Pyx_TraceCall("xfset", __pyx_f[0], 88); - - /* "lib/Naked/toolshed/c/casts.pyx":89 - * #------------------------------------------------------------------------------ - * def xfset(set_arg, attributes={}): - * try: # <<<<<<<<<<<<<< - * return XFSet(set_arg, attributes) - * except TypeError: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":90 - * def xfset(set_arg, attributes={}): - * try: - * return XFSet(set_arg, attributes) # <<<<<<<<<<<<<< - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_XFSet); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_set_arg); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_set_arg); - __Pyx_GIVEREF(__pyx_v_set_arg); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":91 - * try: - * return XFSet(set_arg, attributes) - * except TypeError: # <<<<<<<<<<<<<< - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - * except Exception as e: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xfset", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - - /* "lib/Naked/toolshed/c/casts.pyx":92 - * return XFSet(set_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/casts.pyx":93 - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xfset", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":94 - * raise TypeError("Attempted to cast to a XSet with an incompatible type") - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":95 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/casts.pyx":96 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":88 - * # Cast a Python set to a XFSet - * #------------------------------------------------------------------------------ - * def xfset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XFSet(set_arg, attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xfset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/casts.pyx":102 - * # Cast a Python string to a XString - * #------------------------------------------------------------------------------ - * def xstr(string_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XString(string_arg, attributes) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_13xstr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_13xstr = {__Pyx_NAMESTR("xstr"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_13xstr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5casts_13xstr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_string_arg = 0; - PyObject *__pyx_v_attributes = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xstr (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_string_arg,&__pyx_n_s_attributes,0}; - PyObject* values[2] = {0,0}; - values[1] = __pyx_k__12; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_string_arg)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xstr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_string_arg = values[0]; - __pyx_v_attributes = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xstr", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xstr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5casts_12xstr(__pyx_self, __pyx_v_string_arg, __pyx_v_attributes); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5casts_12xstr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_string_arg, PyObject *__pyx_v_attributes) { - CYTHON_UNUSED PyObject *__pyx_v_te = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("xstr", 0); - __Pyx_TraceCall("xstr", __pyx_f[0], 102); - - /* "lib/Naked/toolshed/c/casts.pyx":103 - * #------------------------------------------------------------------------------ - * def xstr(string_arg, attributes={}): - * try: # <<<<<<<<<<<<<< - * return XString(string_arg, attributes) - * except TypeError as te: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/casts.pyx":104 - * def xstr(string_arg, attributes={}): - * try: - * return XString(string_arg, attributes) # <<<<<<<<<<<<<< - * except TypeError as te: - * raise TypeError("Attempted to cast to a XString with an incompatible type") - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_XString); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_string_arg); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_string_arg); - __Pyx_GIVEREF(__pyx_v_string_arg); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":105 - * try: - * return XString(string_arg, attributes) - * except TypeError as te: # <<<<<<<<<<<<<< - * raise TypeError("Attempted to cast to a XString with an incompatible type") - * except Exception as e: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xstr", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_te = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":106 - * return XString(string_arg, attributes) - * except TypeError as te: - * raise TypeError("Attempted to cast to a XString with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_Raise(__pyx_t_8, 0, 0, 0); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/casts.pyx":107 - * except TypeError as te: - * raise TypeError("Attempted to cast to a XString with an incompatible type") - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xstr", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/casts.pyx":108 - * raise TypeError("Attempted to cast to a XString with an incompatible type") - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * print("Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/casts.pyx":109 - * except Exception as e: - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Naked_Framework_Error_unable_to_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/casts.pyx":110 - * if DEBUG_FLAG: - * print("Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py).") - * raise e # <<<<<<<<<<<<<< - * - * if __name__ == '__main__': - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/casts.pyx":102 - * # Cast a Python string to a XString - * #------------------------------------------------------------------------------ - * def xstr(string_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XString(string_arg, attributes) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.casts.xstr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_te); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("casts"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0}, - {&__pyx_kp_s_A_test, __pyx_k_A_test, sizeof(__pyx_k_A_test), 0, 0, 1, 0}, - {&__pyx_kp_s_Attempted_to_cast_to_a_XDict_wit, __pyx_k_Attempted_to_cast_to_a_XDict_wit, sizeof(__pyx_k_Attempted_to_cast_to_a_XDict_wit), 0, 0, 1, 0}, - {&__pyx_kp_s_Attempted_to_cast_to_a_XList_wit, __pyx_k_Attempted_to_cast_to_a_XList_wit, sizeof(__pyx_k_Attempted_to_cast_to_a_XList_wit), 0, 0, 1, 0}, - {&__pyx_kp_s_Attempted_to_cast_to_a_XQueue_wi, __pyx_k_Attempted_to_cast_to_a_XQueue_wi, sizeof(__pyx_k_Attempted_to_cast_to_a_XQueue_wi), 0, 0, 1, 0}, - {&__pyx_kp_s_Attempted_to_cast_to_a_XSet_with, __pyx_k_Attempted_to_cast_to_a_XSet_with, sizeof(__pyx_k_Attempted_to_cast_to_a_XSet_with), 0, 0, 1, 0}, - {&__pyx_kp_s_Attempted_to_cast_to_a_XString_w, __pyx_k_Attempted_to_cast_to_a_XString_w, sizeof(__pyx_k_Attempted_to_cast_to_a_XString_w), 0, 0, 1, 0}, - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject, __pyx_k_NakedObject, sizeof(__pyx_k_NakedObject), 0, 0, 1, 1}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to, __pyx_k_Naked_Framework_Error_unable_to, sizeof(__pyx_k_Naked_Framework_Error_unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_2, __pyx_k_Naked_Framework_Error_unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_unable_to_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_3, __pyx_k_Naked_Framework_Error_unable_to_3, sizeof(__pyx_k_Naked_Framework_Error_unable_to_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_4, __pyx_k_Naked_Framework_Error_unable_to_4, sizeof(__pyx_k_Naked_Framework_Error_unable_to_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_5, __pyx_k_Naked_Framework_Error_unable_to_5, sizeof(__pyx_k_Naked_Framework_Error_unable_to_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_6, __pyx_k_Naked_Framework_Error_unable_to_6, sizeof(__pyx_k_Naked_Framework_Error_unable_to_6), 0, 0, 1, 0}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_c_types, __pyx_k_Naked_toolshed_c_types, sizeof(__pyx_k_Naked_toolshed_c_types), 0, 0, 1, 1}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_n_s_XDict, __pyx_k_XDict, sizeof(__pyx_k_XDict), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet, __pyx_k_XFSet, sizeof(__pyx_k_XFSet), 0, 0, 1, 1}, - {&__pyx_n_s_XList, __pyx_k_XList, sizeof(__pyx_k_XList), 0, 0, 1, 1}, - {&__pyx_n_s_XQueue, __pyx_k_XQueue, sizeof(__pyx_k_XQueue), 0, 0, 1, 1}, - {&__pyx_n_s_XSet, __pyx_k_XSet, sizeof(__pyx_k_XSet), 0, 0, 1, 1}, - {&__pyx_n_s_XString, __pyx_k_XString, sizeof(__pyx_k_XString), 0, 0, 1, 1}, - {&__pyx_n_s_arg1, __pyx_k_arg1, sizeof(__pyx_k_arg1), 0, 0, 1, 1}, - {&__pyx_n_s_attributes, __pyx_k_attributes, sizeof(__pyx_k_attributes), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_dictionary_arg, __pyx_k_dictionary_arg, sizeof(__pyx_k_dictionary_arg), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, - {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_casts, __pyx_k_lib_Naked_toolshed_c_casts, sizeof(__pyx_k_lib_Naked_toolshed_c_casts), 0, 0, 1, 1}, - {&__pyx_n_s_list_arg, __pyx_k_list_arg, sizeof(__pyx_k_list_arg), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_nob, __pyx_k_nob, sizeof(__pyx_k_nob), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_queue_arg, __pyx_k_queue_arg, sizeof(__pyx_k_queue_arg), 0, 0, 1, 1}, - {&__pyx_n_s_set_arg, __pyx_k_set_arg, sizeof(__pyx_k_set_arg), 0, 0, 1, 1}, - {&__pyx_n_s_string_arg, __pyx_k_string_arg, sizeof(__pyx_k_string_arg), 0, 0, 1, 1}, - {&__pyx_n_s_te, __pyx_k_te, sizeof(__pyx_k_te), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_test_2, __pyx_k_test_2, sizeof(__pyx_k_test_2), 0, 0, 1, 1}, - {&__pyx_n_s_xd, __pyx_k_xd, sizeof(__pyx_k_xd), 0, 0, 1, 1}, - {&__pyx_n_s_xfset, __pyx_k_xfset, sizeof(__pyx_k_xfset), 0, 0, 1, 1}, - {&__pyx_n_s_xl, __pyx_k_xl, sizeof(__pyx_k_xl), 0, 0, 1, 1}, - {&__pyx_n_s_xq, __pyx_k_xq, sizeof(__pyx_k_xq), 0, 0, 1, 1}, - {&__pyx_n_s_xset, __pyx_k_xset, sizeof(__pyx_k_xset), 0, 0, 1, 1}, - {&__pyx_n_s_xstr, __pyx_k_xstr, sizeof(__pyx_k_xstr), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/casts.pyx":36 - * return XDict(dictionary_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XDict with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Attempted_to_cast_to_a_XDict_wit); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "lib/Naked/toolshed/c/casts.pyx":50 - * return XList(list_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XList with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Attempted_to_cast_to_a_XList_wit); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "lib/Naked/toolshed/c/casts.pyx":64 - * return XQueue(queue_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XQueue with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_Attempted_to_cast_to_a_XQueue_wi); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "lib/Naked/toolshed/c/casts.pyx":78 - * return XSet(set_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Attempted_to_cast_to_a_XSet_with); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "lib/Naked/toolshed/c/casts.pyx":92 - * return XFSet(set_arg, attributes) - * except TypeError: - * raise TypeError("Attempted to cast to a XSet with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Attempted_to_cast_to_a_XSet_with); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "lib/Naked/toolshed/c/casts.pyx":106 - * return XString(string_arg, attributes) - * except TypeError as te: - * raise TypeError("Attempted to cast to a XString with an incompatible type") # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Attempted_to_cast_to_a_XString_w); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - - /* "lib/Naked/toolshed/c/casts.pyx":20 - * # Cast a dictionary of attributes to a NakedObject with key>attribute mapping - * #------------------------------------------------------------------------------ - * def nob(attributes={}): # <<<<<<<<<<<<<< - * try: - * return NakedObject(attributes) - */ - __pyx_tuple__14 = PyTuple_Pack(2, __pyx_n_s_attributes, __pyx_n_s_e); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_nob, 20, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/casts.pyx":32 - * # Cast a Python dictionary to a XDict - * #------------------------------------------------------------------------------ - * def xd(dictionary_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XDict(dictionary_arg, attributes) - */ - __pyx_tuple__16 = PyTuple_Pack(3, __pyx_n_s_dictionary_arg, __pyx_n_s_attributes, __pyx_n_s_e); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xd, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/casts.pyx":46 - * # Cast a Python list, set, or tuple to a XList - * #------------------------------------------------------------------------------ - * def xl(list_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XList(list_arg, attributes) - */ - __pyx_tuple__18 = PyTuple_Pack(3, __pyx_n_s_list_arg, __pyx_n_s_attributes, __pyx_n_s_e); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xl, 46, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/casts.pyx":60 - * # Cast a Python list, set, tuple to a XQueue - * #------------------------------------------------------------------------------ - * def xq(queue_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XQueue(queue_arg, attributes) - */ - __pyx_tuple__20 = PyTuple_Pack(3, __pyx_n_s_queue_arg, __pyx_n_s_attributes, __pyx_n_s_e); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xq, 60, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/casts.pyx":74 - * # Cast a Python set to a XSet - * #------------------------------------------------------------------------------ - * def xset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XSet(set_arg, attributes) - */ - __pyx_tuple__22 = PyTuple_Pack(3, __pyx_n_s_set_arg, __pyx_n_s_attributes, __pyx_n_s_e); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); - __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xset, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/casts.pyx":88 - * # Cast a Python set to a XFSet - * #------------------------------------------------------------------------------ - * def xfset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XFSet(set_arg, attributes) - */ - __pyx_tuple__24 = PyTuple_Pack(3, __pyx_n_s_set_arg, __pyx_n_s_attributes, __pyx_n_s_e); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__24); - __Pyx_GIVEREF(__pyx_tuple__24); - __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xfset, 88, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/casts.pyx":102 - * # Cast a Python string to a XString - * #------------------------------------------------------------------------------ - * def xstr(string_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XString(string_arg, attributes) - */ - __pyx_tuple__26 = PyTuple_Pack(4, __pyx_n_s_string_arg, __pyx_n_s_attributes, __pyx_n_s_te, __pyx_n_s_e); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xstr, 102, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initcasts(void); /*proto*/ -PyMODINIT_FUNC initcasts(void) -#else -PyMODINIT_FUNC PyInit_casts(void); /*proto*/ -PyMODINIT_FUNC PyInit_casts(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_casts(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("casts"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__casts) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.casts")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.casts", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/casts.pyx":13 - * return count - * - * from Naked.toolshed.c.types import NakedObject, XFSet, XDict, XList, XQueue, XSet, XString # <<<<<<<<<<<<<< - * from Naked.settings import debug as DEBUG_FLAG - * - */ - __pyx_t_1 = PyList_New(7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_NakedObject); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_NakedObject); - __Pyx_GIVEREF(__pyx_n_s_NakedObject); - __Pyx_INCREF(__pyx_n_s_XFSet); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_XFSet); - __Pyx_GIVEREF(__pyx_n_s_XFSet); - __Pyx_INCREF(__pyx_n_s_XDict); - PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_XDict); - __Pyx_GIVEREF(__pyx_n_s_XDict); - __Pyx_INCREF(__pyx_n_s_XList); - PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_XList); - __Pyx_GIVEREF(__pyx_n_s_XList); - __Pyx_INCREF(__pyx_n_s_XQueue); - PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_XQueue); - __Pyx_GIVEREF(__pyx_n_s_XQueue); - __Pyx_INCREF(__pyx_n_s_XSet); - PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_XSet); - __Pyx_GIVEREF(__pyx_n_s_XSet); - __Pyx_INCREF(__pyx_n_s_XString); - PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_XString); - __Pyx_GIVEREF(__pyx_n_s_XString); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_toolshed_c_types, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_NakedObject); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_NakedObject, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_XFSet); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XFSet, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_XDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XDict, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_XList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XList, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_XQueue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XQueue, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_XSet); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XSet, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_XString); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XString, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":14 - * - * from Naked.toolshed.c.types import NakedObject, XFSet, XDict, XList, XQueue, XSet, XString - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_debug); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":20 - * # Cast a dictionary of attributes to a NakedObject with key>attribute mapping - * #------------------------------------------------------------------------------ - * def nob(attributes={}): # <<<<<<<<<<<<<< - * try: - * return NakedObject(attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k_ = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_1nob, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_nob, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":32 - * # Cast a Python dictionary to a XDict - * #------------------------------------------------------------------------------ - * def xd(dictionary_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XDict(dictionary_arg, attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k__2 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_3xd, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_xd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":46 - * # Cast a Python list, set, or tuple to a XList - * #------------------------------------------------------------------------------ - * def xl(list_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XList(list_arg, attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k__4 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_5xl, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_xl, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":60 - * # Cast a Python list, set, tuple to a XQueue - * #------------------------------------------------------------------------------ - * def xq(queue_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XQueue(queue_arg, attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k__6 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_7xq, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_xq, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":74 - * # Cast a Python set to a XSet - * #------------------------------------------------------------------------------ - * def xset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XSet(set_arg, attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k__8 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_9xset, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_xset, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":88 - * # Cast a Python set to a XFSet - * #------------------------------------------------------------------------------ - * def xfset(set_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XFSet(set_arg, attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k__10 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_11xfset, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_xfset, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":102 - * # Cast a Python string to a XString - * #------------------------------------------------------------------------------ - * def xstr(string_arg, attributes={}): # <<<<<<<<<<<<<< - * try: - * return XString(string_arg, attributes) - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_k__12 = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5casts_13xstr, NULL, __pyx_n_s_lib_Naked_toolshed_c_casts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_xstr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":112 - * raise e - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * test = xstr("A test", {'arg1': '2'}) - * print(test) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_3) { - - /* "lib/Naked/toolshed/c/casts.pyx":113 - * - * if __name__ == '__main__': - * test = xstr("A test", {'arg1': '2'}) # <<<<<<<<<<<<<< - * print(test) - * print(test[0]) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_xstr); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_arg1, __pyx_kp_s_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_kp_s_A_test); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_A_test); - __Pyx_GIVEREF(__pyx_kp_s_A_test); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":114 - * if __name__ == '__main__': - * test = xstr("A test", {'arg1': '2'}) - * print(test) # <<<<<<<<<<<<<< - * print(test[0]) - * print(test.arg1) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_test); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":115 - * test = xstr("A test", {'arg1': '2'}) - * print(test) - * print(test[0]) # <<<<<<<<<<<<<< - * print(test.arg1) - * print(type(test)) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_test); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PrintOne(0, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":116 - * print(test) - * print(test[0]) - * print(test.arg1) # <<<<<<<<<<<<<< - * print(type(test)) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_test); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_arg1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PrintOne(0, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/casts.pyx":117 - * print(test[0]) - * print(test.arg1) - * print(type(test)) # <<<<<<<<<<<<<< - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_test); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (__Pyx_PrintOne(0, ((PyObject *)Py_TYPE(__pyx_t_2))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/casts.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=True - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.casts", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.casts"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -#if CYTHON_PROFILE -static int __Pyx_TraceSetupAndCall(PyCodeObject** code, - PyFrameObject** frame, - const char *funcname, - const char *srcfile, - int firstlineno) { - int retval; - PyThreadState* tstate = PyThreadState_GET(); - if (*frame == NULL || !CYTHON_PROFILE_REUSE_FRAME) { - if (*code == NULL) { - *code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno); - if (*code == NULL) return 0; - } - *frame = PyFrame_New( - tstate, /*PyThreadState *tstate*/ - *code, /*PyCodeObject *code*/ - __pyx_d, /*PyObject *globals*/ - 0 /*PyObject *locals*/ - ); - if (*frame == NULL) return 0; - if (CYTHON_TRACE && (*frame)->f_trace == NULL) { - Py_INCREF(Py_None); - (*frame)->f_trace = Py_None; - } -#if PY_VERSION_HEX < 0x030400B1 - } else { - (*frame)->f_tstate = tstate; -#endif - } - (*frame)->f_lineno = firstlineno; - tstate->use_tracing = 0; - #if CYTHON_TRACE - if (tstate->c_tracefunc) - tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL); - if (!tstate->c_profilefunc) - retval = 1; - else - #endif - retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0; - tstate->use_tracing = (tstate->c_profilefunc || - (CYTHON_TRACE && tstate->c_tracefunc)); - return tstate->use_tracing && retval; -} -static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyCodeObject *py_code = 0; - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - py_srcfile = PyString_FromString(srcfile); - #else - py_funcname = PyUnicode_FromString(funcname); - py_srcfile = PyUnicode_FromString(srcfile); - #endif - if (!py_funcname | !py_srcfile) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - #if PY_MAJOR_VERSION >= 3 - 0, /*int kwonlyargcount,*/ - #endif - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - firstlineno, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return py_code; -} -#endif /* CYTHON_PROFILE */ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, - CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, - int full_traceback) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); - if (full_traceback) { - Py_XINCREF(old_exc); - Py_XINCREF(old_val); - Py_XINCREF(old_tb); - __Pyx_ErrRestore(old_exc, old_val, old_tb); - PyErr_PrintEx(1); - } - #if PY_MAJOR_VERSION < 3 - ctx = PyString_FromString(name); - #else - ctx = PyUnicode_FromString(name); - #endif - __Pyx_ErrRestore(old_exc, old_val, old_tb); - if (!ctx) { - PyErr_WriteUnraisable(Py_None); - } else { - PyErr_WriteUnraisable(ctx); - Py_DECREF(ctx); - } -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static PyObject *__Pyx_GetStdout(void) { - PyObject *f = PySys_GetObject((char *)"stdout"); - if (!f) { - PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); - } - return f; -} -static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { - int i; - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { - PyObject* v; - if (PyFile_SoftSpace(f, 1)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - v = PyTuple_GET_ITEM(arg_tuple, i); - if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) - goto error; - if (PyString_Check(v)) { - char *s = PyString_AsString(v); - Py_ssize_t len = PyString_Size(v); - if (len > 0) { - switch (s[len-1]) { - case ' ': break; - case '\f': case '\r': case '\n': case '\t': case '\v': - PyFile_SoftSpace(f, 0); - break; - default: break; - } - } - } - } - if (newline) { - if (PyFile_WriteString("\n", f) < 0) - goto error; - PyFile_SoftSpace(f, 0); - } - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; -} -#else /* Python 3 has a print function */ -static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { - PyObject* kwargs = 0; - PyObject* result = 0; - PyObject* end_string; - if (unlikely(!__pyx_print)) { - __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); - if (!__pyx_print) - return -1; - } - if (stream) { - kwargs = PyDict_New(); - if (unlikely(!kwargs)) - return -1; - if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) - goto bad; - if (!newline) { - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - goto bad; - if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - goto bad; - } - Py_DECREF(end_string); - } - } else if (!newline) { - if (unlikely(!__pyx_print_kwargs)) { - __pyx_print_kwargs = PyDict_New(); - if (unlikely(!__pyx_print_kwargs)) - return -1; - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - return -1; - if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - return -1; - } - Py_DECREF(end_string); - } - kwargs = __pyx_print_kwargs; - } - result = PyObject_Call(__pyx_print, arg_tuple, kwargs); - if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) - Py_DECREF(kwargs); - if (!result) - return -1; - Py_DECREF(result); - return 0; -bad: - if (kwargs != __pyx_print_kwargs) - Py_XDECREF(kwargs); - return -1; -} -#endif - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static int __Pyx_PrintOne(PyObject* f, PyObject *o) { - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - if (PyFile_SoftSpace(f, 0)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) - goto error; - if (PyFile_WriteString("\n", f) < 0) - goto error; - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; - /* the line below is just to avoid C compiler - * warnings about unused functions */ - return __Pyx_Print(f, NULL, 0); -} -#else /* Python 3 has a print function */ -static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { - int res; - PyObject* arg_tuple = PyTuple_Pack(1, o); - if (unlikely(!arg_tuple)) - return -1; - res = __Pyx_Print(stream, arg_tuple, 1); - Py_DECREF(arg_tuple); - return res; -} -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.pyx deleted file mode 100644 index 9b53246..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/casts.pyx +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=True - -cdef inline int increment(object iterable, object test_string): - cdef int count = 0 - cdef object thing - for thing in iterable: - if thing == test_string: - count += 1 - return count - -from Naked.toolshed.c.types import NakedObject, XFSet, XDict, XList, XQueue, XSet, XString -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [ nob ] (NakedObject) -# Cast a dictionary of attributes to a NakedObject with key>attribute mapping -#------------------------------------------------------------------------------ -def nob(attributes={}): - try: - return NakedObject(attributes) - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xd function ] (XDict) -# Cast a Python dictionary to a XDict -#------------------------------------------------------------------------------ -def xd(dictionary_arg, attributes={}): - try: - return XDict(dictionary_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XDict with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xl function ] (XList) -# Cast a Python list, set, or tuple to a XList -#------------------------------------------------------------------------------ -def xl(list_arg, attributes={}): - try: - return XList(list_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XList with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xq function ] (XQueue) -# Cast a Python list, set, tuple to a XQueue -#------------------------------------------------------------------------------ -def xq(queue_arg, attributes={}): - try: - return XQueue(queue_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XQueue with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xset function ] (XSet) -# Cast a Python set to a XSet -#------------------------------------------------------------------------------ -def xset(set_arg, attributes={}): - try: - return XSet(set_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XSet with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xfset function ] (XFSet) -# Cast a Python set to a XFSet -#------------------------------------------------------------------------------ -def xfset(set_arg, attributes={}): - try: - return XFSet(set_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XSet with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xstr function ] (XString) -# Cast a Python string to a XString -#------------------------------------------------------------------------------ -def xstr(string_arg, attributes={}): - try: - return XString(string_arg, attributes) - except TypeError as te: - raise TypeError("Attempted to cast to a XString with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py).") - raise e - -if __name__ == '__main__': - test = xstr("A test", {'arg1': '2'}) - print(test) - print(test[0]) - print(test.arg1) - print(type(test)) diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.c deleted file mode 100644 index 249536f..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.c +++ /dev/null @@ -1,3202 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:16 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__cstate -#define __PYX_HAVE_API__lib__Naked__toolshed__c__cstate -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "cstate.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.cstate' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.cstate" -int __pyx_module_is_main_lib__Naked__toolshed__c__cstate = 0; - -/* Implementation of 'lib.Naked.toolshed.c.cstate' */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6cstate_11StateObject___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static char __pyx_k_[] = "~"; -static char __pyx_k__3[] = "*"; -static char __pyx_k_os[] = "os"; -static char __pyx_k_py[] = "py"; -static char __pyx_k_cwd[] = "cwd"; -static char __pyx_k_day[] = "day"; -static char __pyx_k_doc[] = "__doc__"; -static char __pyx_k_min[] = "min"; -static char __pyx_k_now[] = "now"; -static char __pyx_k_py2[] = "py2"; -static char __pyx_k_py3[] = "py3"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_hour[] = "hour"; -static char __pyx_k_init[] = "__init__"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_path[] = "path"; -static char __pyx_k_self[] = "self"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_year[] = "year"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_month[] = "month"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_is_py2[] = "is_py2"; -static char __pyx_k_is_py3[] = "is_py3"; -static char __pyx_k_minute[] = "minute"; -static char __pyx_k_module[] = "__module__"; -static char __pyx_k_pardir[] = "pardir"; -static char __pyx_k_second[] = "second"; -static char __pyx_k_defpath[] = "defpath"; -static char __pyx_k_prepare[] = "__prepare__"; -static char __pyx_k_datetime[] = "datetime"; -static char __pyx_k_platform[] = "platform"; -static char __pyx_k_py_major[] = "py_major"; -static char __pyx_k_py_minor[] = "py_minor"; -static char __pyx_k_py_patch[] = "py_patch"; -static char __pyx_k_qualname[] = "__qualname__"; -static char __pyx_k_metaclass[] = "__metaclass__"; -static char __pyx_k_user_path[] = "user_path"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_expanduser[] = "expanduser"; -static char __pyx_k_parent_dir[] = "parent_dir"; -static char __pyx_k_StateObject[] = "StateObject"; -static char __pyx_k_default_path[] = "default_path"; -static char __pyx_k_file_encoding[] = "file_encoding"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_string_encoding[] = "string_encoding"; -static char __pyx_k_py_major_version[] = "py_major_version"; -static char __pyx_k_py_minor_version[] = "py_minor_version"; -static char __pyx_k_py_patch_version[] = "py_patch_version"; -static char __pyx_k_StateObject___init[] = "StateObject.__init__"; -static char __pyx_k_getdefaultencoding[] = "getdefaultencoding"; -static char __pyx_k_getfilesystemencoding[] = "getfilesystemencoding"; -static char __pyx_k_Naked_toolshed_c_python[] = "Naked.toolshed.c.python"; -static char __pyx_k_Naked_toolshed_c_system[] = "Naked.toolshed.c.system"; -static char __pyx_k_lib_Naked_toolshed_c_cstate[] = "lib.Naked.toolshed.c.cstate"; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/cstate.pyx"; -static PyObject *__pyx_kp_s_; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_Naked_toolshed_c_python; -static PyObject *__pyx_n_s_Naked_toolshed_c_system; -static PyObject *__pyx_n_s_StateObject; -static PyObject *__pyx_n_s_StateObject___init; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_n_s__3; -static PyObject *__pyx_n_s_cwd; -static PyObject *__pyx_n_s_datetime; -static PyObject *__pyx_n_s_day; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_default_path; -static PyObject *__pyx_n_s_defpath; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_expanduser; -static PyObject *__pyx_n_s_file_encoding; -static PyObject *__pyx_n_s_getdefaultencoding; -static PyObject *__pyx_n_s_getfilesystemencoding; -static PyObject *__pyx_n_s_hour; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_is_py2; -static PyObject *__pyx_n_s_is_py3; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_cstate; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_min; -static PyObject *__pyx_n_s_minute; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_month; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_now; -static PyObject *__pyx_n_s_os; -static PyObject *__pyx_n_s_pardir; -static PyObject *__pyx_n_s_parent_dir; -static PyObject *__pyx_n_s_path; -static PyObject *__pyx_n_s_platform; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_py; -static PyObject *__pyx_n_s_py2; -static PyObject *__pyx_n_s_py3; -static PyObject *__pyx_n_s_py_major; -static PyObject *__pyx_n_s_py_major_version; -static PyObject *__pyx_n_s_py_minor; -static PyObject *__pyx_n_s_py_minor_version; -static PyObject *__pyx_n_s_py_patch; -static PyObject *__pyx_n_s_py_patch_version; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_second; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_string_encoding; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_user_path; -static PyObject *__pyx_n_s_year; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_codeobj__5; - -/* "lib/Naked/toolshed/c/cstate.pyx":13 - * - * class StateObject: - * def __init__(self): # <<<<<<<<<<<<<< - * now = datetime.datetime.now() - * self.py2 = py.is_py2() #truth test Python 2 interpreter - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6cstate_11StateObject_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6cstate_11StateObject_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6cstate_11StateObject_1__init__, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6cstate_11StateObject_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6cstate_11StateObject___init__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6cstate_11StateObject___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_now = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/cstate.pyx":14 - * class StateObject: - * def __init__(self): - * now = datetime.datetime.now() # <<<<<<<<<<<<<< - * self.py2 = py.is_py2() #truth test Python 2 interpreter - * self.py3 = py.is_py3() #truth test Python 3 interpreter - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_datetime); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_datetime); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_now); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_now = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":15 - * def __init__(self): - * now = datetime.datetime.now() - * self.py2 = py.is_py2() #truth test Python 2 interpreter # <<<<<<<<<<<<<< - * self.py3 = py.is_py3() #truth test Python 3 interpreter - * self.py_major = py.py_major_version() #Python major version - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_py); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_is_py2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_py2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":16 - * now = datetime.datetime.now() - * self.py2 = py.is_py2() #truth test Python 2 interpreter - * self.py3 = py.is_py3() #truth test Python 3 interpreter # <<<<<<<<<<<<<< - * self.py_major = py.py_major_version() #Python major version - * self.py_minor = py.py_minor_version() #Python minor version - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_py); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_is_py3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_py3, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":17 - * self.py2 = py.is_py2() #truth test Python 2 interpreter - * self.py3 = py.is_py3() #truth test Python 3 interpreter - * self.py_major = py.py_major_version() #Python major version # <<<<<<<<<<<<<< - * self.py_minor = py.py_minor_version() #Python minor version - * self.py_patch = py.py_patch_version() #Python patch version - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_py); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_py_major_version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_py_major, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":18 - * self.py3 = py.is_py3() #truth test Python 3 interpreter - * self.py_major = py.py_major_version() #Python major version - * self.py_minor = py.py_minor_version() #Python minor version # <<<<<<<<<<<<<< - * self.py_patch = py.py_patch_version() #Python patch version - * self.os = sys.platform #user operating system - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_py); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_py_minor_version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_py_minor, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":19 - * self.py_major = py.py_major_version() #Python major version - * self.py_minor = py.py_minor_version() #Python minor version - * self.py_patch = py.py_patch_version() #Python patch version # <<<<<<<<<<<<<< - * self.os = sys.platform #user operating system - * self.cwd = cwd() #current (present) working directory - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_py); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_py_patch_version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_py_patch, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":20 - * self.py_minor = py.py_minor_version() #Python minor version - * self.py_patch = py.py_patch_version() #Python patch version - * self.os = sys.platform #user operating system # <<<<<<<<<<<<<< - * self.cwd = cwd() #current (present) working directory - * self.parent_dir = os.pardir - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_platform); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_os, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":21 - * self.py_patch = py.py_patch_version() #Python patch version - * self.os = sys.platform #user operating system - * self.cwd = cwd() #current (present) working directory # <<<<<<<<<<<<<< - * self.parent_dir = os.pardir - * self.default_path = os.defpath - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_cwd); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cwd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":22 - * self.os = sys.platform #user operating system - * self.cwd = cwd() #current (present) working directory - * self.parent_dir = os.pardir # <<<<<<<<<<<<<< - * self.default_path = os.defpath - * self.user_path = os.path.expanduser("~") - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_pardir); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_parent_dir, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":23 - * self.cwd = cwd() #current (present) working directory - * self.parent_dir = os.pardir - * self.default_path = os.defpath # <<<<<<<<<<<<<< - * self.user_path = os.path.expanduser("~") - * self.string_encoding = sys.getdefaultencoding() - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_defpath); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_default_path, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":24 - * self.parent_dir = os.pardir - * self.default_path = os.defpath - * self.user_path = os.path.expanduser("~") # <<<<<<<<<<<<<< - * self.string_encoding = sys.getdefaultencoding() - * self.file_encoding = sys.getfilesystemencoding() - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_path); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_expanduser); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_user_path, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":25 - * self.default_path = os.defpath - * self.user_path = os.path.expanduser("~") - * self.string_encoding = sys.getdefaultencoding() # <<<<<<<<<<<<<< - * self.file_encoding = sys.getfilesystemencoding() - * self.hour = now.hour - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getdefaultencoding); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_string_encoding, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":26 - * self.user_path = os.path.expanduser("~") - * self.string_encoding = sys.getdefaultencoding() - * self.file_encoding = sys.getfilesystemencoding() # <<<<<<<<<<<<<< - * self.hour = now.hour - * self.min = now.minute - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_file_encoding, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":27 - * self.string_encoding = sys.getdefaultencoding() - * self.file_encoding = sys.getfilesystemencoding() - * self.hour = now.hour # <<<<<<<<<<<<<< - * self.min = now.minute - * self.year = now.year - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_now, __pyx_n_s_hour); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_hour, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":28 - * self.file_encoding = sys.getfilesystemencoding() - * self.hour = now.hour - * self.min = now.minute # <<<<<<<<<<<<<< - * self.year = now.year - * self.day = now.day - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_now, __pyx_n_s_minute); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_min, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":29 - * self.hour = now.hour - * self.min = now.minute - * self.year = now.year # <<<<<<<<<<<<<< - * self.day = now.day - * self.month = now.month - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_now, __pyx_n_s_year); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_year, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":30 - * self.min = now.minute - * self.year = now.year - * self.day = now.day # <<<<<<<<<<<<<< - * self.month = now.month - * self.second = now.second - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_now, __pyx_n_s_day); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_day, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":31 - * self.year = now.year - * self.day = now.day - * self.month = now.month # <<<<<<<<<<<<<< - * self.second = now.second - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_now, __pyx_n_s_month); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_month, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":32 - * self.day = now.day - * self.month = now.month - * self.second = now.second # <<<<<<<<<<<<<< - * - * if __name__ == '__main__': - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_now, __pyx_n_s_second); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_second, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":13 - * - * class StateObject: - * def __init__(self): # <<<<<<<<<<<<<< - * now = datetime.datetime.now() - * self.py2 = py.is_py2() #truth test Python 2 interpreter - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.cstate.StateObject.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_now); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("cstate"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_c_python, __pyx_k_Naked_toolshed_c_python, sizeof(__pyx_k_Naked_toolshed_c_python), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_c_system, __pyx_k_Naked_toolshed_c_system, sizeof(__pyx_k_Naked_toolshed_c_system), 0, 0, 1, 1}, - {&__pyx_n_s_StateObject, __pyx_k_StateObject, sizeof(__pyx_k_StateObject), 0, 0, 1, 1}, - {&__pyx_n_s_StateObject___init, __pyx_k_StateObject___init, sizeof(__pyx_k_StateObject___init), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, - {&__pyx_n_s_cwd, __pyx_k_cwd, sizeof(__pyx_k_cwd), 0, 0, 1, 1}, - {&__pyx_n_s_datetime, __pyx_k_datetime, sizeof(__pyx_k_datetime), 0, 0, 1, 1}, - {&__pyx_n_s_day, __pyx_k_day, sizeof(__pyx_k_day), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_default_path, __pyx_k_default_path, sizeof(__pyx_k_default_path), 0, 0, 1, 1}, - {&__pyx_n_s_defpath, __pyx_k_defpath, sizeof(__pyx_k_defpath), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_expanduser, __pyx_k_expanduser, sizeof(__pyx_k_expanduser), 0, 0, 1, 1}, - {&__pyx_n_s_file_encoding, __pyx_k_file_encoding, sizeof(__pyx_k_file_encoding), 0, 0, 1, 1}, - {&__pyx_n_s_getdefaultencoding, __pyx_k_getdefaultencoding, sizeof(__pyx_k_getdefaultencoding), 0, 0, 1, 1}, - {&__pyx_n_s_getfilesystemencoding, __pyx_k_getfilesystemencoding, sizeof(__pyx_k_getfilesystemencoding), 0, 0, 1, 1}, - {&__pyx_n_s_hour, __pyx_k_hour, sizeof(__pyx_k_hour), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_is_py2, __pyx_k_is_py2, sizeof(__pyx_k_is_py2), 0, 0, 1, 1}, - {&__pyx_n_s_is_py3, __pyx_k_is_py3, sizeof(__pyx_k_is_py3), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_cstate, __pyx_k_lib_Naked_toolshed_c_cstate, sizeof(__pyx_k_lib_Naked_toolshed_c_cstate), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, - {&__pyx_n_s_minute, __pyx_k_minute, sizeof(__pyx_k_minute), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_month, __pyx_k_month, sizeof(__pyx_k_month), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_now, __pyx_k_now, sizeof(__pyx_k_now), 0, 0, 1, 1}, - {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, - {&__pyx_n_s_pardir, __pyx_k_pardir, sizeof(__pyx_k_pardir), 0, 0, 1, 1}, - {&__pyx_n_s_parent_dir, __pyx_k_parent_dir, sizeof(__pyx_k_parent_dir), 0, 0, 1, 1}, - {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, - {&__pyx_n_s_platform, __pyx_k_platform, sizeof(__pyx_k_platform), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_py, __pyx_k_py, sizeof(__pyx_k_py), 0, 0, 1, 1}, - {&__pyx_n_s_py2, __pyx_k_py2, sizeof(__pyx_k_py2), 0, 0, 1, 1}, - {&__pyx_n_s_py3, __pyx_k_py3, sizeof(__pyx_k_py3), 0, 0, 1, 1}, - {&__pyx_n_s_py_major, __pyx_k_py_major, sizeof(__pyx_k_py_major), 0, 0, 1, 1}, - {&__pyx_n_s_py_major_version, __pyx_k_py_major_version, sizeof(__pyx_k_py_major_version), 0, 0, 1, 1}, - {&__pyx_n_s_py_minor, __pyx_k_py_minor, sizeof(__pyx_k_py_minor), 0, 0, 1, 1}, - {&__pyx_n_s_py_minor_version, __pyx_k_py_minor_version, sizeof(__pyx_k_py_minor_version), 0, 0, 1, 1}, - {&__pyx_n_s_py_patch, __pyx_k_py_patch, sizeof(__pyx_k_py_patch), 0, 0, 1, 1}, - {&__pyx_n_s_py_patch_version, __pyx_k_py_patch_version, sizeof(__pyx_k_py_patch_version), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_second, __pyx_k_second, sizeof(__pyx_k_second), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_string_encoding, __pyx_k_string_encoding, sizeof(__pyx_k_string_encoding), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_user_path, __pyx_k_user_path, sizeof(__pyx_k_user_path), 0, 0, 1, 1}, - {&__pyx_n_s_year, __pyx_k_year, sizeof(__pyx_k_year), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - return 0; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/cstate.pyx":24 - * self.parent_dir = os.pardir - * self.default_path = os.defpath - * self.user_path = os.path.expanduser("~") # <<<<<<<<<<<<<< - * self.string_encoding = sys.getdefaultencoding() - * self.file_encoding = sys.getfilesystemencoding() - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "lib/Naked/toolshed/c/cstate.pyx":13 - * - * class StateObject: - * def __init__(self): # <<<<<<<<<<<<<< - * now = datetime.datetime.now() - * self.py2 = py.is_py2() #truth test Python 2 interpreter - */ - __pyx_tuple__4 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_now); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 13, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initcstate(void); /*proto*/ -PyMODINIT_FUNC initcstate(void) -#else -PyMODINIT_FUNC PyInit_cstate(void); /*proto*/ -PyMODINIT_FUNC PyInit_cstate(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_cstate(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("cstate"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__cstate) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.cstate")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.cstate", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/cstate.pyx":5 - * # cython: profile=False - * - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * from Naked.toolshed.c.system import cwd - * import Naked.toolshed.c.python as py - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":6 - * - * from Naked.settings import debug as DEBUG_FLAG - * from Naked.toolshed.c.system import cwd # <<<<<<<<<<<<<< - * import Naked.toolshed.c.python as py - * import sys - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_cwd); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_cwd); - __Pyx_GIVEREF(__pyx_n_s_cwd); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_Naked_toolshed_c_system, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_cwd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_cwd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":7 - * from Naked.settings import debug as DEBUG_FLAG - * from Naked.toolshed.c.system import cwd - * import Naked.toolshed.c.python as py # <<<<<<<<<<<<<< - * import sys - * import os - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s__3); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__3); - __Pyx_GIVEREF(__pyx_n_s__3); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_toolshed_c_python, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_py, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":8 - * from Naked.toolshed.c.system import cwd - * import Naked.toolshed.c.python as py - * import sys # <<<<<<<<<<<<<< - * import os - * import datetime - */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":9 - * import Naked.toolshed.c.python as py - * import sys - * import os # <<<<<<<<<<<<<< - * import datetime - * - */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":10 - * import sys - * import os - * import datetime # <<<<<<<<<<<<<< - * - * class StateObject: - */ - __pyx_t_2 = __Pyx_Import(__pyx_n_s_datetime, 0, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_datetime, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":12 - * import datetime - * - * class StateObject: # <<<<<<<<<<<<<< - * def __init__(self): - * now = datetime.datetime.now() - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_StateObject, __pyx_n_s_StateObject, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_cstate, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/cstate.pyx":13 - * - * class StateObject: - * def __init__(self): # <<<<<<<<<<<<<< - * now = datetime.datetime.now() - * self.py2 = py.is_py2() #truth test Python 2 interpreter - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6cstate_11StateObject_1__init__, 0, __pyx_n_s_StateObject___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_cstate, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":12 - * import datetime - * - * class StateObject: # <<<<<<<<<<<<<< - * def __init__(self): - * now = datetime.datetime.now() - */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_StateObject, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_StateObject, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/cstate.pyx":34 - * self.second = now.second - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_3) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/cstate.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.cstate", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.cstate"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.pyx deleted file mode 100644 index 6493018..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/cstate.pyx +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -from Naked.settings import debug as DEBUG_FLAG -from Naked.toolshed.c.system import cwd -import Naked.toolshed.c.python as py -import sys -import os -import datetime - -class StateObject: - def __init__(self): - now = datetime.datetime.now() - self.py2 = py.is_py2() #truth test Python 2 interpreter - self.py3 = py.is_py3() #truth test Python 3 interpreter - self.py_major = py.py_major_version() #Python major version - self.py_minor = py.py_minor_version() #Python minor version - self.py_patch = py.py_patch_version() #Python patch version - self.os = sys.platform #user operating system - self.cwd = cwd() #current (present) working directory - self.parent_dir = os.pardir - self.default_path = os.defpath - self.user_path = os.path.expanduser("~") - self.string_encoding = sys.getdefaultencoding() - self.file_encoding = sys.getfilesystemencoding() - self.hour = now.hour - self.min = now.minute - self.year = now.year - self.day = now.day - self.month = now.month - self.second = now.second - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/cythonize.sh b/venv/lib/python3.6/site-packages/Naked/toolshed/c/cythonize.sh deleted file mode 100755 index 9e41c50..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/cythonize.sh +++ /dev/null @@ -1,15 +0,0 @@ -echo "Cythonizing .pyx files to C files" - -cython benchmarking.pyx -cython casts.pyx -cython file.pyx -cython ink.pyx -cython network.pyx -cython python.pyx -cython shell.pyx -cython cstate.pyx -cython system.pyx -cython types.pyx - - -echo "Cythonization is complete" diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/file.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/file.c deleted file mode 100644 index b5ecb22..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/file.c +++ /dev/null @@ -1,12542 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:13 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__file -#define __PYX_HAVE_API__lib__Naked__toolshed__c__file -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "file.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000) -static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { - PyObject *res; - PyTypeObject *tp = Py_TYPE(obj); -#if PY_MAJOR_VERSION < 3 - if (unlikely(PyInstance_Check(obj))) - return __Pyx_PyObject_GetAttrStr(obj, attr_name); -#endif - res = _PyType_Lookup(tp, attr_name); - if (likely(res)) { - descrgetfunc f = Py_TYPE(res)->tp_descr_get; - if (!f) { - Py_INCREF(res); - } else { - res = f(res, obj, (PyObject *)tp); - } - } else { - PyErr_SetObject(PyExc_AttributeError, attr_name); - } - return res; -} -#else -#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.file' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.file" -int __pyx_module_is_main_lib__Naked__toolshed__c__file = 0; - -/* Implementation of 'lib.Naked.toolshed.c.file' */ -static PyObject *__pyx_builtin_IOError; -static PyObject *__pyx_builtin_open; -static PyObject *__pyx_builtin_UnicodeEncodeError; -static PyObject *__pyx_builtin_Exception; -static PyObject *__pyx_builtin_RuntimeError; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_2IO___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_2append(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_4append_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_6gzip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_compression_level); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_8write(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_10write_as(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_the_encoding); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_12write_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_binary_data); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_14safe_write(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_16safe_write_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_file_data); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_18write_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_2read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_4read_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_6read_as(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_encoding); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_8readlines(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_10readlines_as(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dev_spec_encoding); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_12readlines_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_14read_gzip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_encoding); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_16read_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static char __pyx_k_a[] = "a"; -static char __pyx_k_e[] = "e"; -static char __pyx_k_f[] = "f"; -static char __pyx_k_r[] = "r"; -static char __pyx_k_w[] = "w"; -static char __pyx_k_IO[] = "IO"; -static char __pyx_k_gz[] = ".gz"; -static char __pyx_k_os[] = "os"; -static char __pyx_k_rb[] = "rb"; -static char __pyx_k_ue[] = "ue"; -static char __pyx_k_wb[] = "wb"; -static char __pyx_k_wt[] = "wt"; -static char __pyx_k__13[] = ""; -static char __pyx_k_doc[] = "__doc__"; -static char __pyx_k_ioe[] = "ioe"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_NFKD[] = "NFKD"; -static char __pyx_k_UTF8[] = "UTF8"; -static char __pyx_k_data[] = "data"; -static char __pyx_k_exit[] = "__exit__"; -static char __pyx_k_gzip[] = "gzip"; -static char __pyx_k_init[] = "__init__"; -static char __pyx_k_line[] = "line"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_mode[] = "mode"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_open[] = "open"; -static char __pyx_k_path[] = "path"; -static char __pyx_k_read[] = "read"; -static char __pyx_k_self[] = "self"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_text[] = "text"; -static char __pyx_k_utf8[] = "utf8"; -static char __pyx_k_UTF_8[] = "UTF-8"; -static char __pyx_k_close[] = "close"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_enter[] = "__enter__"; -static char __pyx_k_utf_8[] = "utf_8"; -static char __pyx_k_write[] = "write"; -static char __pyx_k_append[] = "append"; -static char __pyx_k_codecs[] = "codecs"; -static char __pyx_k_decode[] = "decode"; -static char __pyx_k_encode[] = "encode"; -static char __pyx_k_exists[] = "exists"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_module[] = "__module__"; -static char __pyx_k_reader[] = "reader"; -static char __pyx_k_stderr[] = "stderr"; -static char __pyx_k_writer[] = "writer"; -static char __pyx_k_IOError[] = "IOError"; -static char __pyx_k_UTF_8_2[] = "UTF_8"; -static char __pyx_k_os_path[] = "os.path"; -static char __pyx_k_prepare[] = "__prepare__"; -static char __pyx_k_read_as[] = "read_as"; -static char __pyx_k_utf_8_2[] = "utf-8"; -static char __pyx_k_appender[] = "appender"; -static char __pyx_k_encoding[] = "encoding"; -static char __pyx_k_endswith[] = "endswith"; -static char __pyx_k_filepath[] = "filepath"; -static char __pyx_k_qualname[] = "__qualname__"; -static char __pyx_k_read_bin[] = "read_bin"; -static char __pyx_k_write_as[] = "write_as"; -static char __pyx_k_Exception[] = "Exception"; -static char __pyx_k_IO___init[] = "IO.__init__"; -static char __pyx_k_data_list[] = "data_list"; -static char __pyx_k_file_data[] = "file_data"; -static char __pyx_k_metaclass[] = "__metaclass__"; -static char __pyx_k_norm_data[] = "norm_data"; -static char __pyx_k_norm_line[] = "norm_line"; -static char __pyx_k_norm_text[] = "norm_text"; -static char __pyx_k_normalize[] = "normalize"; -static char __pyx_k_read_gzip[] = "read_gzip"; -static char __pyx_k_read_utf8[] = "read_utf8"; -static char __pyx_k_readlines[] = "readlines"; -static char __pyx_k_write_bin[] = "write_bin"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_FileReader[] = "FileReader"; -static char __pyx_k_FileWriter[] = "FileWriter"; -static char __pyx_k_bin_reader[] = "bin_reader"; -static char __pyx_k_bin_writer[] = "bin_writer"; -static char __pyx_k_safe_write[] = "safe_write"; -static char __pyx_k_textstring[] = "textstring"; -static char __pyx_k_uni_reader[] = "uni_reader"; -static char __pyx_k_write_utf8[] = "write_utf8"; -static char __pyx_k_append_utf8[] = "append_utf8"; -static char __pyx_k_binary_data[] = "binary_data"; -static char __pyx_k_file_exists[] = "file_exists"; -static char __pyx_k_gzip_reader[] = "gzip_reader"; -static char __pyx_k_gzip_writer[] = "gzip_writer"; -static char __pyx_k_unicodedata[] = "unicodedata"; -static char __pyx_k_RuntimeError[] = "RuntimeError"; -static char __pyx_k_readlines_as[] = "readlines_as"; -static char __pyx_k_the_encoding[] = "the_encoding"; -static char __pyx_k_compresslevel[] = "compresslevel"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_readlines_utf8[] = "readlines_utf8"; -static char __pyx_k_safe_write_bin[] = "safe_write_bin"; -static char __pyx_k_system_default[] = "system_default"; -static char __pyx_k_FileReader_read[] = "FileReader.read"; -static char __pyx_k_FileWriter_gzip[] = "FileWriter.gzip"; -static char __pyx_k_FileWriter_write[] = "FileWriter.write"; -static char __pyx_k_FileReader___init[] = "FileReader.__init__"; -static char __pyx_k_FileWriter___init[] = "FileWriter.__init__"; -static char __pyx_k_FileWriter_append[] = "FileWriter.append"; -static char __pyx_k_compression_level[] = "compression_level"; -static char __pyx_k_dev_spec_encoding[] = "dev_spec_encoding"; -static char __pyx_k_FileReader_read_as[] = "FileReader.read_as"; -static char __pyx_k_UnicodeEncodeError[] = "UnicodeEncodeError"; -static char __pyx_k_modified_text_list[] = "modified_text_list"; -static char __pyx_k_FileReader_read_bin[] = "FileReader.read_bin"; -static char __pyx_k_FileWriter_write_as[] = "FileWriter.write_as"; -static char __pyx_k_FileReader_read_gzip[] = "FileReader.read_gzip"; -static char __pyx_k_FileReader_read_utf8[] = "FileReader.read_utf8"; -static char __pyx_k_FileReader_readlines[] = "FileReader.readlines"; -static char __pyx_k_FileWriter_write_bin[] = "FileWriter.write_bin"; -static char __pyx_k_FileWriter_safe_write[] = "FileWriter.safe_write"; -static char __pyx_k_FileWriter_write_utf8[] = "FileWriter.write_utf8"; -static char __pyx_k_Naked_toolshed_system[] = "Naked.toolshed.system"; -static char __pyx_k_FileWriter_append_utf8[] = "FileWriter.append_utf8"; -static char __pyx_k_FileReader_readlines_as[] = "FileReader.readlines_as"; -static char __pyx_k_FileReader_readlines_utf8[] = "FileReader.readlines_utf8"; -static char __pyx_k_FileWriter_safe_write_bin[] = "FileWriter.safe_write_bin"; -static char __pyx_k_lib_Naked_toolshed_c_file[] = "lib.Naked.toolshed.c.file"; -static char __pyx_k_Naked_Framework_Error_Unable_to[] = "Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to[] = "Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py)."; -static char __pyx_k_The_file_specified_for_the_text[] = "The file specified for the text append does not exist (Naked.toolshed.file.py:append)."; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/file.pyx"; -static char __pyx_k_The_text_encoding_was_not_specif[] = "The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as)."; -static char __pyx_k_The_text_file_encoding_was_not_s[] = "The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_2[] = "Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_3[] = "Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_4[] = "Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_5[] = "Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_6[] = "Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_7[] = "Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_8[] = "Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_9[] = "Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_2[] = "Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_3[] = "Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_4[] = "Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)"; -static char __pyx_k_The_file_specified_for_the_text_2[] = "The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_10[] = "Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_11[] = "Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_12[] = "Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_13[] = "Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_14[] = "Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_15[] = "Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py)."; -static char __pyx_k_The_text_file_encoding_was_not_s_2[] = "The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as)."; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_n_s_Exception; -static PyObject *__pyx_n_s_FileReader; -static PyObject *__pyx_n_s_FileReader___init; -static PyObject *__pyx_n_s_FileReader_read; -static PyObject *__pyx_n_s_FileReader_read_as; -static PyObject *__pyx_n_s_FileReader_read_bin; -static PyObject *__pyx_n_s_FileReader_read_gzip; -static PyObject *__pyx_n_s_FileReader_read_utf8; -static PyObject *__pyx_n_s_FileReader_readlines; -static PyObject *__pyx_n_s_FileReader_readlines_as; -static PyObject *__pyx_n_s_FileReader_readlines_utf8; -static PyObject *__pyx_n_s_FileWriter; -static PyObject *__pyx_n_s_FileWriter___init; -static PyObject *__pyx_n_s_FileWriter_append; -static PyObject *__pyx_n_s_FileWriter_append_utf8; -static PyObject *__pyx_n_s_FileWriter_gzip; -static PyObject *__pyx_n_s_FileWriter_safe_write; -static PyObject *__pyx_n_s_FileWriter_safe_write_bin; -static PyObject *__pyx_n_s_FileWriter_write; -static PyObject *__pyx_n_s_FileWriter_write_as; -static PyObject *__pyx_n_s_FileWriter_write_bin; -static PyObject *__pyx_n_s_FileWriter_write_utf8; -static PyObject *__pyx_n_s_IO; -static PyObject *__pyx_n_s_IOError; -static PyObject *__pyx_n_s_IO___init; -static PyObject *__pyx_n_s_NFKD; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_10; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_11; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_12; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_13; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_14; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_15; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_4; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_5; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_6; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_7; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_8; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_9; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_4; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_Naked_toolshed_system; -static PyObject *__pyx_n_s_RuntimeError; -static PyObject *__pyx_kp_s_The_file_specified_for_the_text; -static PyObject *__pyx_kp_s_The_file_specified_for_the_text_2; -static PyObject *__pyx_kp_s_The_text_encoding_was_not_specif; -static PyObject *__pyx_kp_s_The_text_file_encoding_was_not_s; -static PyObject *__pyx_kp_s_The_text_file_encoding_was_not_s_2; -static PyObject *__pyx_n_s_UTF8; -static PyObject *__pyx_kp_s_UTF_8; -static PyObject *__pyx_n_s_UTF_8_2; -static PyObject *__pyx_n_s_UnicodeEncodeError; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_kp_s__13; -static PyObject *__pyx_n_s_a; -static PyObject *__pyx_n_s_append; -static PyObject *__pyx_n_s_append_utf8; -static PyObject *__pyx_n_s_appender; -static PyObject *__pyx_n_s_bin_reader; -static PyObject *__pyx_n_s_bin_writer; -static PyObject *__pyx_n_s_binary_data; -static PyObject *__pyx_n_s_close; -static PyObject *__pyx_n_s_codecs; -static PyObject *__pyx_n_s_compression_level; -static PyObject *__pyx_n_s_compresslevel; -static PyObject *__pyx_n_s_data; -static PyObject *__pyx_n_s_data_list; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_decode; -static PyObject *__pyx_n_s_dev_spec_encoding; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_encode; -static PyObject *__pyx_n_s_encoding; -static PyObject *__pyx_n_s_endswith; -static PyObject *__pyx_n_s_enter; -static PyObject *__pyx_n_s_exists; -static PyObject *__pyx_n_s_exit; -static PyObject *__pyx_n_s_f; -static PyObject *__pyx_n_s_file_data; -static PyObject *__pyx_n_s_file_exists; -static PyObject *__pyx_n_s_filepath; -static PyObject *__pyx_kp_s_gz; -static PyObject *__pyx_n_s_gzip; -static PyObject *__pyx_n_s_gzip_reader; -static PyObject *__pyx_n_s_gzip_writer; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_ioe; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_file; -static PyObject *__pyx_n_s_line; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_mode; -static PyObject *__pyx_n_s_modified_text_list; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_norm_data; -static PyObject *__pyx_n_s_norm_line; -static PyObject *__pyx_n_s_norm_text; -static PyObject *__pyx_n_s_normalize; -static PyObject *__pyx_n_s_open; -static PyObject *__pyx_n_s_os; -static PyObject *__pyx_n_s_os_path; -static PyObject *__pyx_n_s_path; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_r; -static PyObject *__pyx_n_s_rb; -static PyObject *__pyx_n_s_read; -static PyObject *__pyx_n_s_read_as; -static PyObject *__pyx_n_s_read_bin; -static PyObject *__pyx_n_s_read_gzip; -static PyObject *__pyx_n_s_read_utf8; -static PyObject *__pyx_n_s_reader; -static PyObject *__pyx_n_s_readlines; -static PyObject *__pyx_n_s_readlines_as; -static PyObject *__pyx_n_s_readlines_utf8; -static PyObject *__pyx_n_s_safe_write; -static PyObject *__pyx_n_s_safe_write_bin; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_stderr; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_system_default; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_text; -static PyObject *__pyx_n_s_textstring; -static PyObject *__pyx_n_s_the_encoding; -static PyObject *__pyx_n_s_ue; -static PyObject *__pyx_n_s_uni_reader; -static PyObject *__pyx_n_s_unicodedata; -static PyObject *__pyx_n_s_utf8; -static PyObject *__pyx_n_s_utf_8; -static PyObject *__pyx_kp_s_utf_8_2; -static PyObject *__pyx_n_s_w; -static PyObject *__pyx_n_s_wb; -static PyObject *__pyx_n_s_write; -static PyObject *__pyx_n_s_write_as; -static PyObject *__pyx_n_s_write_bin; -static PyObject *__pyx_n_s_write_utf8; -static PyObject *__pyx_n_s_writer; -static PyObject *__pyx_n_s_wt; -static PyObject *__pyx_int_6; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__22; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__24; -static PyObject *__pyx_tuple__25; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__28; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__30; -static PyObject *__pyx_tuple__31; -static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__33; -static PyObject *__pyx_tuple__34; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__36; -static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__38; -static PyObject *__pyx_tuple__39; -static PyObject *__pyx_tuple__40; -static PyObject *__pyx_tuple__41; -static PyObject *__pyx_tuple__42; -static PyObject *__pyx_tuple__43; -static PyObject *__pyx_tuple__44; -static PyObject *__pyx_tuple__45; -static PyObject *__pyx_tuple__47; -static PyObject *__pyx_tuple__49; -static PyObject *__pyx_tuple__51; -static PyObject *__pyx_tuple__53; -static PyObject *__pyx_tuple__55; -static PyObject *__pyx_tuple__56; -static PyObject *__pyx_tuple__58; -static PyObject *__pyx_tuple__60; -static PyObject *__pyx_tuple__61; -static PyObject *__pyx_tuple__63; -static PyObject *__pyx_tuple__65; -static PyObject *__pyx_tuple__67; -static PyObject *__pyx_tuple__69; -static PyObject *__pyx_tuple__71; -static PyObject *__pyx_tuple__73; -static PyObject *__pyx_tuple__75; -static PyObject *__pyx_tuple__77; -static PyObject *__pyx_tuple__79; -static PyObject *__pyx_tuple__81; -static PyObject *__pyx_tuple__83; -static PyObject *__pyx_tuple__85; -static PyObject *__pyx_tuple__86; -static PyObject *__pyx_codeobj__46; -static PyObject *__pyx_codeobj__48; -static PyObject *__pyx_codeobj__50; -static PyObject *__pyx_codeobj__52; -static PyObject *__pyx_codeobj__54; -static PyObject *__pyx_codeobj__57; -static PyObject *__pyx_codeobj__59; -static PyObject *__pyx_codeobj__62; -static PyObject *__pyx_codeobj__64; -static PyObject *__pyx_codeobj__66; -static PyObject *__pyx_codeobj__68; -static PyObject *__pyx_codeobj__70; -static PyObject *__pyx_codeobj__72; -static PyObject *__pyx_codeobj__74; -static PyObject *__pyx_codeobj__76; -static PyObject *__pyx_codeobj__78; -static PyObject *__pyx_codeobj__80; -static PyObject *__pyx_codeobj__82; -static PyObject *__pyx_codeobj__84; -static PyObject *__pyx_codeobj__87; - -/* "lib/Naked/toolshed/c/file.pyx":13 - * #------------------------------------------------------------------------------ - * class IO: - * def __init__(self,filepath): # <<<<<<<<<<<<<< - * self.filepath = filepath - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_2IO_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_2IO_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_2IO_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_2IO_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.IO.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_2IO___init__(__pyx_self, __pyx_v_self, __pyx_v_filepath); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_2IO___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/file.pyx":14 - * class IO: - * def __init__(self,filepath): - * self.filepath = filepath # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_filepath, __pyx_v_filepath) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":13 - * #------------------------------------------------------------------------------ - * class IO: - * def __init__(self,filepath): # <<<<<<<<<<<<<< - * self.filepath = filepath - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.IO.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":21 - * #------------------------------------------------------------------------------ - * class FileWriter(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter___init__(__pyx_self, __pyx_v_self, __pyx_v_filepath); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/file.pyx":22 - * class FileWriter(IO): - * def __init__(self, filepath): - * IO.__init__(self, filepath) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_IO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":21 - * #------------------------------------------------------------------------------ - * class FileWriter(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":29 - * # Tests: test_IO.py:: test_file_ascii_readwrite_append, test_file_append_missingfile - * #------------------------------------------------------------------------------ - * def append(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_3append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_3append = {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_3append, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_3append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("append (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("append", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "append") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("append", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_2append(__pyx_self, __pyx_v_self, __pyx_v_text); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_2append(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_file_exists = NULL; - PyObject *__pyx_v_appender = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ue = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("append", 0); - - /* "lib/Naked/toolshed/c/file.pyx":30 - * #------------------------------------------------------------------------------ - * def append(self, text): - * try: # <<<<<<<<<<<<<< - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":31 - * def append(self, text): - * try: - * from Naked.toolshed.system import file_exists # <<<<<<<<<<<<<< - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_file_exists); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_file_exists); - __Pyx_GIVEREF(__pyx_n_s_file_exists); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_Naked_toolshed_system, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_file_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_file_exists = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":32 - * try: - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) # <<<<<<<<<<<<<< - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - * with open(self.filepath, 'a') as appender: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_file_exists, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = ((!__pyx_t_6) != 0); - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/file.pyx":33 - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") # <<<<<<<<<<<<<< - * with open(self.filepath, 'a') as appender: - * appender.write(text) - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - - /* "lib/Naked/toolshed/c/file.pyx":34 - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - * with open(self.filepath, 'a') as appender: # <<<<<<<<<<<<<< - * appender.write(text) - * except UnicodeEncodeError as ue: - */ - /*with:*/ { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_INCREF(__pyx_n_s_a); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_a); - __Pyx_GIVEREF(__pyx_n_s_a); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - __Pyx_INCREF(__pyx_t_9); - __pyx_v_appender = __pyx_t_9; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":35 - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - * with open(self.filepath, 'a') as appender: - * appender.write(text) # <<<<<<<<<<<<<< - * except UnicodeEncodeError as ue: - * self.append_utf8(text) #try writing as utf-8 - */ - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_appender, __pyx_n_s_write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":34 - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - * with open(self.filepath, 'a') as appender: # <<<<<<<<<<<<<< - * appender.write(text) - * except UnicodeEncodeError as ue: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_13 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_13, NULL); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_14); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_7 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_6 = ((!(__pyx_t_7 != 0)) != 0); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_ErrRestore(__pyx_t_4, __pyx_t_5, __pyx_t_9); - __pyx_t_4 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L3_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_8) { - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__2, NULL); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":36 - * with open(self.filepath, 'a') as appender: - * appender.write(text) - * except UnicodeEncodeError as ue: # <<<<<<<<<<<<<< - * self.append_utf8(text) #try writing as utf-8 - * except Exception as e: - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeEncodeError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_ue = __pyx_t_5; - - /* "lib/Naked/toolshed/c/file.pyx":37 - * appender.write(text) - * except UnicodeEncodeError as ue: - * self.append_utf8(text) #try writing as utf-8 # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_append_utf8); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_16, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/file.pyx":38 - * except UnicodeEncodeError as ue: - * self.append_utf8(text) #try writing as utf-8 - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/file.pyx":39 - * self.append_utf8(text) #try writing as utf-8 - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/file.pyx":40 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L35; - } - __pyx_L35:; - - /* "lib/Naked/toolshed/c/file.pyx":41 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":29 - * # Tests: test_IO.py:: test_file_ascii_readwrite_append, test_file_append_missingfile - * #------------------------------------------------------------------------------ - * def append(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_file_exists); - __Pyx_XDECREF(__pyx_v_appender); - __Pyx_XDECREF(__pyx_v_ue); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":48 - * # Tests: test_IO.py :: test_file_utf8_readwrite_append - * #------------------------------------------------------------------------------ - * def append_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_5append_utf8(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_5append_utf8 = {__Pyx_NAMESTR("append_utf8"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_5append_utf8, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_5append_utf8(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("append_utf8 (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("append_utf8", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "append_utf8") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("append_utf8", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_4append_utf8(__pyx_self, __pyx_v_self, __pyx_v_text); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_4append_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_file_exists = NULL; - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_text = NULL; - PyObject *__pyx_v_appender = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("append_utf8", 0); - - /* "lib/Naked/toolshed/c/file.pyx":49 - * #------------------------------------------------------------------------------ - * def append_utf8(self, text): - * try: # <<<<<<<<<<<<<< - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":50 - * def append_utf8(self, text): - * try: - * from Naked.toolshed.system import file_exists # <<<<<<<<<<<<<< - * if not file_exists(self.filepath): - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_file_exists); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_file_exists); - __Pyx_GIVEREF(__pyx_n_s_file_exists); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_Naked_toolshed_system, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_file_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_file_exists = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":51 - * try: - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): # <<<<<<<<<<<<<< - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") - * import codecs - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_file_exists, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = ((!__pyx_t_6) != 0); - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/file.pyx":52 - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") # <<<<<<<<<<<<<< - * import codecs - * import unicodedata - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - - /* "lib/Naked/toolshed/c/file.pyx":53 - * if not file_exists(self.filepath): - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") - * import codecs # <<<<<<<<<<<<<< - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_codecs = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":54 - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") - * import codecs - * import unicodedata # <<<<<<<<<<<<<< - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_unicodedata = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":55 - * import codecs - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write # <<<<<<<<<<<<<< - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: - * appender.write(norm_text) - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_norm_text = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":56 - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: # <<<<<<<<<<<<<< - * appender.write(norm_text) - * except Exception as e: - */ - /*with:*/ { - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_mode, __pyx_n_s_a) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_encoding, __pyx_n_s_utf_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - /*try:*/ { - __Pyx_INCREF(__pyx_t_5); - __pyx_v_appender = __pyx_t_5; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":57 - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: - * appender.write(norm_text) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_appender, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_v_norm_text); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_norm_text); - __Pyx_GIVEREF(__pyx_v_norm_text); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":56 - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: # <<<<<<<<<<<<<< - * appender.write(norm_text) - * except Exception as e: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_9, __pyx_t_5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_8, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_14); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_7 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_6 = ((!(__pyx_t_7 != 0)) != 0); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ErrRestore(__pyx_t_4, __pyx_t_9, __pyx_t_5); - __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); - goto __pyx_L3_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_10) { - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__5, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":58 - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: - * appender.write(norm_text) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_9, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_e = __pyx_t_9; - - /* "lib/Naked/toolshed/c/file.pyx":59 - * appender.write(norm_text) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/file.pyx":60 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L33; - } - __pyx_L33:; - - /* "lib/Naked/toolshed/c/file.pyx":61 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":48 - * # Tests: test_IO.py :: test_file_utf8_readwrite_append - * #------------------------------------------------------------------------------ - * def append_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.append_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_file_exists); - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_text); - __Pyx_XDECREF(__pyx_v_appender); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":71 - * # test_file_gzip_utf8_readwrite_explicit_decode - * #------------------------------------------------------------------------------ - * def gzip(self, text, compression_level=6): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_7gzip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_7gzip = {__Pyx_NAMESTR("gzip"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_7gzip, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_7gzip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - PyObject *__pyx_v_compression_level = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("gzip (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,&__pyx_n_s_compression_level,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)__pyx_int_6)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("gzip", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_compression_level); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gzip") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - __pyx_v_compression_level = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("gzip", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_6gzip(__pyx_self, __pyx_v_self, __pyx_v_text, __pyx_v_compression_level); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_6gzip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_compression_level) { - PyObject *__pyx_v_gzip = NULL; - PyObject *__pyx_v_gzip_writer = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ue = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_text = NULL; - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_binary_data = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("gzip", 0); - - /* "lib/Naked/toolshed/c/file.pyx":72 - * #------------------------------------------------------------------------------ - * def gzip(self, text, compression_level=6): - * try: # <<<<<<<<<<<<<< - * import gzip - * if not self.filepath.endswith(".gz"): - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":73 - * def gzip(self, text, compression_level=6): - * try: - * import gzip # <<<<<<<<<<<<<< - * if not self.filepath.endswith(".gz"): - * self.filepath = self.filepath + ".gz" - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_gzip, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_gzip = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":74 - * try: - * import gzip - * if not self.filepath.endswith(".gz"): # <<<<<<<<<<<<<< - * self.filepath = self.filepath + ".gz" - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_endswith); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = ((!__pyx_t_6) != 0); - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/file.pyx":75 - * import gzip - * if not self.filepath.endswith(".gz"): - * self.filepath = self.filepath + ".gz" # <<<<<<<<<<<<<< - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - * gzip_writer.write(text) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_kp_s_gz); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_filepath, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/file.pyx":76 - * if not self.filepath.endswith(".gz"): - * self.filepath = self.filepath + ".gz" - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: # <<<<<<<<<<<<<< - * gzip_writer.write(text) - * except UnicodeEncodeError as ue: - */ - /*with:*/ { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip, __pyx_n_s_open); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wb); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_n_s_wb); - __Pyx_GIVEREF(__pyx_n_s_wb); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_compresslevel, __pyx_v_compression_level) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_4); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - /*try:*/ { - __Pyx_INCREF(__pyx_t_8); - __pyx_v_gzip_writer = __pyx_t_8; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":77 - * self.filepath = self.filepath + ".gz" - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - * gzip_writer.write(text) # <<<<<<<<<<<<<< - * except UnicodeEncodeError as ue: - * import unicodedata - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_writer, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":76 - * if not self.filepath.endswith(".gz"): - * self.filepath = self.filepath + ".gz" - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: # <<<<<<<<<<<<<< - * gzip_writer.write(text) - * except UnicodeEncodeError as ue: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_14); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_7 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_6 = ((!(__pyx_t_7 != 0)) != 0); - if (__pyx_t_6) { - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ErrRestore(__pyx_t_4, __pyx_t_9, __pyx_t_8); - __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_8 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); - goto __pyx_L3_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_10) { - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__8, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":78 - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - * gzip_writer.write(text) - * except UnicodeEncodeError as ue: # <<<<<<<<<<<<<< - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeEncodeError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_ue = __pyx_t_9; - - /* "lib/Naked/toolshed/c/file.pyx":79 - * gzip_writer.write(text) - * except UnicodeEncodeError as ue: - * import unicodedata # <<<<<<<<<<<<<< - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * import codecs - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_unicodedata = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":80 - * except UnicodeEncodeError as ue: - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write # <<<<<<<<<<<<<< - * import codecs - * binary_data = codecs.encode(norm_text, "utf_8") - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_16, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_v_norm_text = __pyx_t_17; - __pyx_t_17 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":81 - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * import codecs # <<<<<<<<<<<<<< - * binary_data = codecs.encode(norm_text, "utf_8") - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - */ - __pyx_t_17 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_v_codecs = __pyx_t_17; - __pyx_t_17 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":82 - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * import codecs - * binary_data = codecs.encode(norm_text, "utf_8") # <<<<<<<<<<<<<< - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - * gzip_writer.write(binary_data) - */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_encode); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_INCREF(__pyx_v_norm_text); - PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_norm_text); - __Pyx_GIVEREF(__pyx_v_norm_text); - __Pyx_INCREF(__pyx_n_s_utf_8); - PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_n_s_utf_8); - __Pyx_GIVEREF(__pyx_n_s_utf_8); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_16, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_v_binary_data = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":83 - * import codecs - * binary_data = codecs.encode(norm_text, "utf_8") - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: # <<<<<<<<<<<<<< - * gzip_writer.write(binary_data) - * except Exception as e: - */ - /*with:*/ { - if (unlikely(!__pyx_v_gzip)) { __Pyx_RaiseUnboundLocalError("gzip"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip, __pyx_n_s_open); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_16); - __Pyx_GIVEREF(__pyx_t_16); - __Pyx_INCREF(__pyx_n_s_wb); - PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_n_s_wb); - __Pyx_GIVEREF(__pyx_n_s_wb); - __pyx_t_16 = 0; - __pyx_t_16 = PyDict_New(); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - if (PyDict_SetItem(__pyx_t_16, __pyx_n_s_compresslevel, __pyx_v_compression_level) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_17, __pyx_t_16); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_18, __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_16 = __Pyx_PyObject_LookupSpecial(__pyx_t_18, __pyx_n_s_enter); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L33_error;} - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L33_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_11); - /*try:*/ { - __Pyx_INCREF(__pyx_t_17); - __Pyx_XDECREF_SET(__pyx_v_gzip_writer, __pyx_t_17); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":84 - * binary_data = codecs.encode(norm_text, "utf_8") - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - * gzip_writer.write(binary_data) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_writer, __pyx_n_s_write); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L39_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L39_error;} - __Pyx_GOTREF(__pyx_t_18); - __Pyx_INCREF(__pyx_v_binary_data); - PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_v_binary_data); - __Pyx_GIVEREF(__pyx_v_binary_data); - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_t_18, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L39_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - } - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L46_try_end; - __pyx_L39_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":83 - * import codecs - * binary_data = codecs.encode(norm_text, "utf_8") - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: # <<<<<<<<<<<<<< - * gzip_writer.write(binary_data) - * except Exception as e: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_16, &__pyx_t_18, &__pyx_t_17) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L41_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_GOTREF(__pyx_t_18); - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_5 = PyTuple_Pack(3, __pyx_t_16, __pyx_t_18, __pyx_t_17); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L41_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_5, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L41_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_14); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_6 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L41_except_error;} - __pyx_t_7 = ((!(__pyx_t_6 != 0)) != 0); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_16); - __Pyx_GIVEREF(__pyx_t_18); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_ErrRestore(__pyx_t_16, __pyx_t_18, __pyx_t_17); - __pyx_t_16 = 0; __pyx_t_18 = 0; __pyx_t_17 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L41_except_error;} - } - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - goto __pyx_L40_exception_handled; - } - __pyx_L41_except_error:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); - goto __pyx_L5_except_error; - __pyx_L40_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); - __pyx_L46_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_10) { - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__9, NULL); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - goto __pyx_L38; - } - __pyx_L38:; - } - goto __pyx_L51; - __pyx_L33_error:; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L5_except_error; - __pyx_L51:; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/file.pyx":85 - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - * gzip_writer.write(binary_data) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_e = __pyx_t_9; - - /* "lib/Naked/toolshed/c/file.pyx":86 - * gzip_writer.write(binary_data) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/file.pyx":87 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_stderr); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_write); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - goto __pyx_L54; - } - __pyx_L54:; - - /* "lib/Naked/toolshed/c/file.pyx":88 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":71 - * # test_file_gzip_utf8_readwrite_explicit_decode - * #------------------------------------------------------------------------------ - * def gzip(self, text, compression_level=6): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_gzip); - __Pyx_XDECREF(__pyx_v_gzip_writer); - __Pyx_XDECREF(__pyx_v_ue); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_text); - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_binary_data); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":96 - * # test_file_utf8_write_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write(self, text): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wt') as writer: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_9write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_9write = {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_9write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_9write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("write (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("write", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("write", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_8write(__pyx_self, __pyx_v_self, __pyx_v_text); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_8write(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_writer = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ue = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - int __pyx_t_14; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("write", 0); - - /* "lib/Naked/toolshed/c/file.pyx":97 - * #------------------------------------------------------------------------------ - * def write(self, text): - * try: # <<<<<<<<<<<<<< - * with open(self.filepath, 'wt') as writer: - * writer.write(text) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":98 - * def write(self, text): - * try: - * with open(self.filepath, 'wt') as writer: # <<<<<<<<<<<<<< - * writer.write(text) - * except UnicodeEncodeError as ue: - */ - /*with:*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wt); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_wt); - __Pyx_GIVEREF(__pyx_n_s_wt); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_writer = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":99 - * try: - * with open(self.filepath, 'wt') as writer: - * writer.write(text) # <<<<<<<<<<<<<< - * except UnicodeEncodeError as ue: - * self.write_utf8(text) # attempt to write with utf-8 encoding - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_writer, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":98 - * def write(self, text): - * try: - * with open(self.filepath, 'wt') as writer: # <<<<<<<<<<<<<< - * writer.write(text) - * except UnicodeEncodeError as ue: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (__pyx_t_13 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __pyx_t_14 = ((!(__pyx_t_13 != 0)) != 0); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_7); - __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L18_exception_handled; - } - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - goto __pyx_L3_error; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - __pyx_L24_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_6) { - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__11, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - goto __pyx_L16; - } - __pyx_L16:; - } - goto __pyx_L29; - __pyx_L11_error:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L3_error; - __pyx_L29:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":100 - * with open(self.filepath, 'wt') as writer: - * writer.write(text) - * except UnicodeEncodeError as ue: # <<<<<<<<<<<<<< - * self.write_utf8(text) # attempt to write with utf-8 encoding - * except Exception as e: - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeEncodeError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ue = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":101 - * writer.write(text) - * except UnicodeEncodeError as ue: - * self.write_utf8(text) # attempt to write with utf-8 encoding # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_write_utf8); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_16, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/file.pyx":102 - * except UnicodeEncodeError as ue: - * self.write_utf8(text) # attempt to write with utf-8 encoding - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":103 - * self.write_utf8(text) # attempt to write with utf-8 encoding - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_14) { - - /* "lib/Naked/toolshed/c/file.pyx":104 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L34; - } - __pyx_L34:; - - /* "lib/Naked/toolshed/c/file.pyx":105 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":96 - * # test_file_utf8_write_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write(self, text): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wt') as writer: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_writer); - __Pyx_XDECREF(__pyx_v_ue); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":112 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas - * #------------------------------------------------------------------------------ - * def write_as(self, text, the_encoding=""): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_11write_as(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_11write_as = {__Pyx_NAMESTR("write_as"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_11write_as, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_11write_as(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - PyObject *__pyx_v_the_encoding = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("write_as (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,&__pyx_n_s_the_encoding,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject*)__pyx_kp_s__13)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("write_as", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_encoding); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_as") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - __pyx_v_the_encoding = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("write_as", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_10write_as(__pyx_self, __pyx_v_self, __pyx_v_text, __pyx_v_the_encoding); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_10write_as(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_the_encoding) { - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - int __pyx_t_14; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("write_as", 0); - - /* "lib/Naked/toolshed/c/file.pyx":113 - * #------------------------------------------------------------------------------ - * def write_as(self, text, the_encoding=""): - * try: # <<<<<<<<<<<<<< - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":114 - * def write_as(self, text, the_encoding=""): - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception # <<<<<<<<<<<<<< - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - * import codecs - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_the_encoding, __pyx_kp_s__13, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/file.pyx":115 - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - - /* "lib/Naked/toolshed/c/file.pyx":116 - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - * import codecs # <<<<<<<<<<<<<< - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - * f.write(text) - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_codecs = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":117 - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: # <<<<<<<<<<<<<< - * f.write(text) - * except Exception as e: - */ - /*with:*/ { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_encoding, __pyx_v_the_encoding) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_mode, __pyx_n_s_w) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_f = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":118 - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - * f.write(text) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":117 - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: # <<<<<<<<<<<<<< - * f.write(text) - * except Exception as e: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_13); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_14 = ((!(__pyx_t_4 != 0)) != 0); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ErrRestore(__pyx_t_6, __pyx_t_8, __pyx_t_7); - __pyx_t_6 = 0; __pyx_t_8 = 0; __pyx_t_7 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L3_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_9) { - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__15, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":119 - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - * f.write(text) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_e = __pyx_t_8; - - /* "lib/Naked/toolshed/c/file.pyx":120 - * f.write(text) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_14) { - - /* "lib/Naked/toolshed/c/file.pyx":121 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L33; - } - __pyx_L33:; - - /* "lib/Naked/toolshed/c/file.pyx":122 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":112 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas - * #------------------------------------------------------------------------------ - * def write_as(self, text, the_encoding=""): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":129 - * # Tests: test_IO.py :: test_file_bin_readwrite - * #------------------------------------------------------------------------------ - * def write_bin(self, binary_data): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wb') as bin_writer: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_13write_bin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_13write_bin = {__Pyx_NAMESTR("write_bin"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_13write_bin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_13write_bin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_binary_data = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("write_bin (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_binary_data,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_binary_data)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("write_bin", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_bin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_binary_data = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("write_bin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_12write_bin(__pyx_self, __pyx_v_self, __pyx_v_binary_data); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_12write_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_binary_data) { - PyObject *__pyx_v_bin_writer = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - int __pyx_t_14; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("write_bin", 0); - - /* "lib/Naked/toolshed/c/file.pyx":130 - * #------------------------------------------------------------------------------ - * def write_bin(self, binary_data): - * try: # <<<<<<<<<<<<<< - * with open(self.filepath, 'wb') as bin_writer: - * bin_writer.write(binary_data) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":131 - * def write_bin(self, binary_data): - * try: - * with open(self.filepath, 'wb') as bin_writer: # <<<<<<<<<<<<<< - * bin_writer.write(binary_data) - * except Exception as e: - */ - /*with:*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wb); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_wb); - __Pyx_GIVEREF(__pyx_n_s_wb); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_bin_writer = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":132 - * try: - * with open(self.filepath, 'wb') as bin_writer: - * bin_writer.write(binary_data) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_bin_writer, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_binary_data); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_binary_data); - __Pyx_GIVEREF(__pyx_v_binary_data); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":131 - * def write_bin(self, binary_data): - * try: - * with open(self.filepath, 'wb') as bin_writer: # <<<<<<<<<<<<<< - * bin_writer.write(binary_data) - * except Exception as e: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (__pyx_t_13 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __pyx_t_14 = ((!(__pyx_t_13 != 0)) != 0); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_7); - __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_7 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L18_exception_handled; - } - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - goto __pyx_L3_error; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - __pyx_L24_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_6) { - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__17, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - goto __pyx_L16; - } - __pyx_L16:; - } - goto __pyx_L29; - __pyx_L11_error:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L3_error; - __pyx_L29:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":133 - * with open(self.filepath, 'wb') as bin_writer: - * bin_writer.write(binary_data) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":134 - * bin_writer.write(binary_data) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_14) { - - /* "lib/Naked/toolshed/c/file.pyx":135 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L32; - } - __pyx_L32:; - - /* "lib/Naked/toolshed/c/file.pyx":136 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":129 - * # Tests: test_IO.py :: test_file_bin_readwrite - * #------------------------------------------------------------------------------ - * def write_bin(self, binary_data): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wb') as bin_writer: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_bin_writer); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":144 - * # Tests: test_IO.py :: test_file_ascii_safewrite, test_file_utf8_safewrite - * #------------------------------------------------------------------------------ - * def safe_write(self, text): # <<<<<<<<<<<<<< - * import os.path - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_15safe_write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_15safe_write = {__Pyx_NAMESTR("safe_write"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_15safe_write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_15safe_write(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("safe_write (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("safe_write", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "safe_write") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("safe_write", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_14safe_write(__pyx_self, __pyx_v_self, __pyx_v_text); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_14safe_write(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_writer = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ue = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("safe_write", 0); - - /* "lib/Naked/toolshed/c/file.pyx":145 - * #------------------------------------------------------------------------------ - * def safe_write(self, text): - * import os.path # <<<<<<<<<<<<<< - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - * try: - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_os_path, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_os = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":146 - * def safe_write(self, text): - * import os.path - * if not os.path.exists(self.filepath): # if the file does not exist, then can write # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wt') as writer: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_path); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_exists); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_5 = ((!__pyx_t_4) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/file.pyx":147 - * import os.path - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - * try: # <<<<<<<<<<<<<< - * with open(self.filepath, 'wt') as writer: - * writer.write(text) - */ - { - __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_8); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":148 - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - * try: - * with open(self.filepath, 'wt') as writer: # <<<<<<<<<<<<<< - * writer.write(text) - * return True - */ - /*with:*/ { - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_wt); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_wt); - __Pyx_GIVEREF(__pyx_n_s_wt); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - __Pyx_INCREF(__pyx_t_2); - __pyx_v_writer = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":149 - * try: - * with open(self.filepath, 'wt') as writer: - * writer.write(text) # <<<<<<<<<<<<<< - * return True - * except UnicodeEncodeError as ue: - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_writer, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":148 - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - * try: - * with open(self.filepath, 'wt') as writer: # <<<<<<<<<<<<<< - * writer.write(text) - * return True - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_13 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_14); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_4 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_ErrRestore(__pyx_t_3, __pyx_t_1, __pyx_t_2); - __pyx_t_3 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L4_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_9) { - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__19, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L4_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L4_error; - __pyx_L30:; - } - - /* "lib/Naked/toolshed/c/file.pyx":150 - * with open(self.filepath, 'wt') as writer: - * writer.write(text) - * return True # <<<<<<<<<<<<<< - * except UnicodeEncodeError as ue: - * self.write_utf8(text) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L8_try_return; - } - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L11_try_end; - __pyx_L4_error:; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":151 - * writer.write(text) - * return True - * except UnicodeEncodeError as ue: # <<<<<<<<<<<<<< - * self.write_utf8(text) - * return True - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeEncodeError); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_ue = __pyx_t_1; - - /* "lib/Naked/toolshed/c/file.pyx":152 - * return True - * except UnicodeEncodeError as ue: - * self.write_utf8(text) # <<<<<<<<<<<<<< - * return True - * except Exception as e: - */ - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_write_utf8); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_16, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":153 - * except UnicodeEncodeError as ue: - * self.write_utf8(text) - * return True # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L7_except_return; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L5_exception_handled; - } - - /* "lib/Naked/toolshed/c/file.pyx":154 - * self.write_utf8(text) - * return True - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_e = __pyx_t_1; - - /* "lib/Naked/toolshed/c/file.pyx":155 - * return True - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/file.pyx":156 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * else: - */ - __pyx_t_17 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_17, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L35; - } - __pyx_L35:; - - /* "lib/Naked/toolshed/c/file.pyx":157 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * else: - * return False # if file exists, do not write and return False - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L5_exception_handled; - } - goto __pyx_L6_except_error; - __pyx_L6_except_error:; - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); - goto __pyx_L1_error; - __pyx_L8_try_return:; - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); - goto __pyx_L0; - __pyx_L7_except_return:; - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); - goto __pyx_L0; - __pyx_L5_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); - __pyx_L11_try_end:; - } - } - /*else*/ { - - /* "lib/Naked/toolshed/c/file.pyx":159 - * raise e - * else: - * return False # if file exists, do not write and return False # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/file.pyx":144 - * # Tests: test_IO.py :: test_file_ascii_safewrite, test_file_utf8_safewrite - * #------------------------------------------------------------------------------ - * def safe_write(self, text): # <<<<<<<<<<<<<< - * import os.path - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_writer); - __Pyx_XDECREF(__pyx_v_ue); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":166 - * # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - * #------------------------------------------------------------------------------ - * def safe_write_bin(self, file_data): # <<<<<<<<<<<<<< - * try: - * import os.path - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_17safe_write_bin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_17safe_write_bin = {__Pyx_NAMESTR("safe_write_bin"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_17safe_write_bin, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_17safe_write_bin(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_file_data = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("safe_write_bin (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_file_data,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_data)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("safe_write_bin", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "safe_write_bin") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_file_data = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("safe_write_bin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_16safe_write_bin(__pyx_self, __pyx_v_self, __pyx_v_file_data); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_16safe_write_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_file_data) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_writer = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("safe_write_bin", 0); - - /* "lib/Naked/toolshed/c/file.pyx":167 - * #------------------------------------------------------------------------------ - * def safe_write_bin(self, file_data): - * try: # <<<<<<<<<<<<<< - * import os.path - * if not os.path.exists(self.filepath): - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":168 - * def safe_write_bin(self, file_data): - * try: - * import os.path # <<<<<<<<<<<<<< - * if not os.path.exists(self.filepath): - * with open(self.filepath, 'wb') as writer: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_os_path, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_os = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":169 - * try: - * import os.path - * if not os.path.exists(self.filepath): # <<<<<<<<<<<<<< - * with open(self.filepath, 'wb') as writer: - * writer.write(file_data) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_path); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_exists); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = ((!__pyx_t_7) != 0); - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/file.pyx":170 - * import os.path - * if not os.path.exists(self.filepath): - * with open(self.filepath, 'wb') as writer: # <<<<<<<<<<<<<< - * writer.write(file_data) - * return True - */ - /*with:*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wb); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_wb); - __Pyx_GIVEREF(__pyx_n_s_wb); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - __Pyx_INCREF(__pyx_t_5); - __pyx_v_writer = __pyx_t_5; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":171 - * if not os.path.exists(self.filepath): - * with open(self.filepath, 'wb') as writer: - * writer.write(file_data) # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_writer, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_file_data); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_file_data); - __Pyx_GIVEREF(__pyx_v_file_data); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":170 - * import os.path - * if not os.path.exists(self.filepath): - * with open(self.filepath, 'wb') as writer: # <<<<<<<<<<<<<< - * writer.write(file_data) - * return True - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_13 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_13, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_14); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_8 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_7 = ((!(__pyx_t_8 != 0)) != 0); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ErrRestore(__pyx_t_6, __pyx_t_4, __pyx_t_5); - __pyx_t_6 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L3_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_9) { - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__21, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - - /* "lib/Naked/toolshed/c/file.pyx":172 - * with open(self.filepath, 'wb') as writer: - * writer.write(file_data) - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/file.pyx":174 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":175 - * else: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":176 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/file.pyx":177 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L33; - } - __pyx_L33:; - - /* "lib/Naked/toolshed/c/file.pyx":178 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":166 - * # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - * #------------------------------------------------------------------------------ - * def safe_write_bin(self, file_data): # <<<<<<<<<<<<<< - * try: - * import os.path - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.safe_write_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_writer); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":188 - * # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_19write_utf8(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_19write_utf8 = {__Pyx_NAMESTR("write_utf8"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_19write_utf8, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileWriter_19write_utf8(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_text = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("write_utf8 (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_text,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("write_utf8", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_utf8") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_text = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("write_utf8", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_18write_utf8(__pyx_self, __pyx_v_self, __pyx_v_text); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileWriter_18write_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_ioe = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_text = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - char const *__pyx_t_12; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("write_utf8", 0); - - /* "lib/Naked/toolshed/c/file.pyx":189 - * #------------------------------------------------------------------------------ - * def write_utf8(self, text): - * try: # <<<<<<<<<<<<<< - * import codecs - * f = codecs.open(self.filepath, encoding='utf_8', mode='w') - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":190 - * def write_utf8(self, text): - * try: - * import codecs # <<<<<<<<<<<<<< - * f = codecs.open(self.filepath, encoding='utf_8', mode='w') - * except IOError as ioe: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_codecs = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":191 - * try: - * import codecs - * f = codecs.open(self.filepath, encoding='utf_8', mode='w') # <<<<<<<<<<<<<< - * except IOError as ioe: - * if DEBUG_FLAG: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_encoding, __pyx_n_s_utf_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_mode, __pyx_n_s_w) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_f = __pyx_t_7; - __pyx_t_7 = 0; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":192 - * import codecs - * f = codecs.open(self.filepath, encoding='utf_8', mode='w') - * except IOError as ioe: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_IOError); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_ioe = __pyx_t_5; - - /* "lib/Naked/toolshed/c/file.pyx":193 - * f = codecs.open(self.filepath, encoding='utf_8', mode='w') - * except IOError as ioe: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") - * raise ioe - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/file.pyx":194 - * except IOError as ioe: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise ioe - * try: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/file.pyx":195 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") - * raise ioe # <<<<<<<<<<<<<< - * try: - * import unicodedata - */ - __Pyx_Raise(__pyx_v_ioe, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":196 - * sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") - * raise ioe - * try: # <<<<<<<<<<<<<< - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - */ - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_1); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":197 - * raise ioe - * try: - * import unicodedata # <<<<<<<<<<<<<< - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * f.write(norm_text) - */ - __pyx_t_6 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_unicodedata = __pyx_t_6; - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":198 - * try: - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write # <<<<<<<<<<<<<< - * f.write(norm_text) - * except Exception as e: - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_norm_text = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":199 - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * f.write(norm_text) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_norm_text); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_norm_text); - __Pyx_GIVEREF(__pyx_v_norm_text); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":200 - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * f.write(norm_text) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/file.pyx":201 - * f.write(norm_text) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/file.pyx":202 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * finally: - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L27; - } - __pyx_L27:; - - /* "lib/Naked/toolshed/c/file.pyx":203 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * finally: - * f.close() - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L18_exception_handled; - } - goto __pyx_L19_except_error; - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); - goto __pyx_L15_error; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); - __pyx_L24_try_end:; - } - } - - /* "lib/Naked/toolshed/c/file.pyx":205 - * raise e - * finally: - * f.close() # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - /*finally:*/ { - /*normal exit:*/{ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L16; - } - /*exception exit:*/{ - __pyx_L15_error:; - __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0)) __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - __pyx_t_8 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename; - { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L29_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L29_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - } - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12; - goto __pyx_L1_error; - __pyx_L29_error:; - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - goto __pyx_L1_error; - } - __pyx_L16:; - } - - /* "lib/Naked/toolshed/c/file.pyx":188 - * # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileWriter.write_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_ioe); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_text); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":213 - * #------------------------------------------------------------------------------ - * class FileReader(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader___init__(__pyx_self, __pyx_v_self, __pyx_v_filepath); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/file.pyx":214 - * class FileReader(IO): - * def __init__(self, filepath): - * IO.__init__(self, filepath) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_IO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":213 - * #------------------------------------------------------------------------------ - * class FileReader(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":222 - * # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_read_missing_file, - * #------------------------------------------------------------------------------ - * def read(self): # <<<<<<<<<<<<<< - * try: - * return self.read_utf8() #reads everything as unicode in utf8 encoding - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_3read(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_3read = {__Pyx_NAMESTR("read"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_3read, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_3read(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("read (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_2read(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_2read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read", 0); - - /* "lib/Naked/toolshed/c/file.pyx":223 - * #------------------------------------------------------------------------------ - * def read(self): - * try: # <<<<<<<<<<<<<< - * return self.read_utf8() #reads everything as unicode in utf8 encoding - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":224 - * def read(self): - * try: - * return self.read_utf8() #reads everything as unicode in utf8 encoding # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_read_utf8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":225 - * try: - * return self.read_utf8() #reads everything as unicode in utf8 encoding - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") - */ - __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_6) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":226 - * return self.read_utf8() #reads everything as unicode in utf8 encoding - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/file.pyx":227 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/file.pyx":228 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":222 - * # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_read_missing_file, - * #------------------------------------------------------------------------------ - * def read(self): # <<<<<<<<<<<<<< - * try: - * return self.read_utf8() #reads everything as unicode in utf8 encoding - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":236 - * # Tests: test_IO.py :: test_file_bin_readwrite, test_file_read_bin_missing_file - * #------------------------------------------------------------------------------ - * def read_bin(self): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'rb') as bin_reader: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_5read_bin(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_5read_bin = {__Pyx_NAMESTR("read_bin"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_5read_bin, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_5read_bin(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("read_bin (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_4read_bin(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_4read_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_bin_reader = NULL; - PyObject *__pyx_v_data = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - int __pyx_t_14; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_bin", 0); - - /* "lib/Naked/toolshed/c/file.pyx":237 - * #------------------------------------------------------------------------------ - * def read_bin(self): - * try: # <<<<<<<<<<<<<< - * with open(self.filepath, 'rb') as bin_reader: - * data = bin_reader.read() - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":238 - * def read_bin(self): - * try: - * with open(self.filepath, 'rb') as bin_reader: # <<<<<<<<<<<<<< - * data = bin_reader.read() - * return data - */ - /*with:*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_rb); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_rb); - __Pyx_GIVEREF(__pyx_n_s_rb); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_bin_reader = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":239 - * try: - * with open(self.filepath, 'rb') as bin_reader: - * data = bin_reader.read() # <<<<<<<<<<<<<< - * return data - * except Exception as e: - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_bin_reader, __pyx_n_s_read); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_data = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":240 - * with open(self.filepath, 'rb') as bin_reader: - * data = bin_reader.read() - * return data # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_data); - __pyx_r = __pyx_v_data; - goto __pyx_L21_try_return; - } - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":238 - * def read_bin(self): - * try: - * with open(self.filepath, 'rb') as bin_reader: # <<<<<<<<<<<<<< - * data = bin_reader.read() - * return data - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (__pyx_t_13 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __pyx_t_14 = ((!(__pyx_t_13 != 0)) != 0); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ErrRestore(__pyx_t_4, __pyx_t_7, __pyx_t_5); - __pyx_t_4 = 0; __pyx_t_7 = 0; __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L18_exception_handled; - } - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - goto __pyx_L3_error; - __pyx_L21_try_return:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - goto __pyx_L14_return; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - __pyx_L24_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_6) { - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__26, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - goto __pyx_L16; - } - __pyx_L14_return: { - __pyx_t_10 = __pyx_r; - __pyx_r = 0; - if (__pyx_t_6) { - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__27, NULL); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __pyx_r = __pyx_t_10; - __pyx_t_10 = 0; - goto __pyx_L7_try_return; - } - __pyx_L16:; - } - goto __pyx_L29; - __pyx_L11_error:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L3_error; - __pyx_L29:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":241 - * data = bin_reader.read() - * return data - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/file.pyx":242 - * return data - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_14) { - - /* "lib/Naked/toolshed/c/file.pyx":243 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L32; - } - __pyx_L32:; - - /* "lib/Naked/toolshed/c/file.pyx":244 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":236 - * # Tests: test_IO.py :: test_file_bin_readwrite, test_file_read_bin_missing_file - * #------------------------------------------------------------------------------ - * def read_bin(self): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'rb') as bin_reader: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_bin_reader); - __Pyx_XDECREF(__pyx_v_data); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":252 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas, test_file_readas_missing_file - * #------------------------------------------------------------------------------ - * def read_as(self, the_encoding): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_7read_as(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_7read_as = {__Pyx_NAMESTR("read_as"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_7read_as, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_7read_as(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_the_encoding = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("read_as (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_the_encoding,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_encoding)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("read_as", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_as") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_the_encoding = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("read_as", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_6read_as(__pyx_self, __pyx_v_self, __pyx_v_the_encoding); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_6read_as(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_encoding) { - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_data = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - int __pyx_t_14; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_as", 0); - - /* "lib/Naked/toolshed/c/file.pyx":253 - * #------------------------------------------------------------------------------ - * def read_as(self, the_encoding): - * try: # <<<<<<<<<<<<<< - * if the_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":254 - * def read_as(self, the_encoding): - * try: - * if the_encoding == "": # <<<<<<<<<<<<<< - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - * import codecs - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_the_encoding, __pyx_kp_s__13, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/file.pyx":255 - * try: - * if the_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - - /* "lib/Naked/toolshed/c/file.pyx":256 - * if the_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - * import codecs # <<<<<<<<<<<<<< - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - * data = f.read() - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_codecs = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":257 - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: # <<<<<<<<<<<<<< - * data = f.read() - * return data - */ - /*with:*/ { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_encoding, __pyx_v_the_encoding) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_mode, __pyx_n_s_r) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_f = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":258 - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - * data = f.read() # <<<<<<<<<<<<<< - * return data - * except Exception as e: - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_read); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_data = __pyx_t_8; - __pyx_t_8 = 0; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":257 - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: # <<<<<<<<<<<<<< - * data = f.read() - * return data - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = PyTuple_Pack(3, __pyx_t_8, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_13); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_14 = ((!(__pyx_t_4 != 0)) != 0); - if (__pyx_t_14) { - __Pyx_GIVEREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6); - __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L3_error; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_9) { - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__30, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - goto __pyx_L17; - } - __pyx_L17:; - } - goto __pyx_L30; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - - /* "lib/Naked/toolshed/c/file.pyx":259 - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - * data = f.read() - * return data # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_data)) { __Pyx_RaiseUnboundLocalError("data"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } - __Pyx_INCREF(__pyx_v_data); - __pyx_r = __pyx_v_data; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":260 - * data = f.read() - * return data - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/file.pyx":261 - * return data - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_14 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_14 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_14) { - - /* "lib/Naked/toolshed/c/file.pyx":262 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L33; - } - __pyx_L33:; - - /* "lib/Naked/toolshed/c/file.pyx":263 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":252 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas, test_file_readas_missing_file - * #------------------------------------------------------------------------------ - * def read_as(self, the_encoding): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_data); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":271 - * # Tests: test_IO.py :: test_file_readlines, test_file_readlines_missing_file - * #------------------------------------------------------------------------------ - * def readlines(self): # <<<<<<<<<<<<<< - * try: - * return self.readlines_utf8() # read as utf8 encoded file - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_9readlines(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_9readlines = {__Pyx_NAMESTR("readlines"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_9readlines, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_9readlines(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("readlines (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_8readlines(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_8readlines(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("readlines", 0); - - /* "lib/Naked/toolshed/c/file.pyx":272 - * #------------------------------------------------------------------------------ - * def readlines(self): - * try: # <<<<<<<<<<<<<< - * return self.readlines_utf8() # read as utf8 encoded file - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":273 - * def readlines(self): - * try: - * return self.readlines_utf8() # read as utf8 encoded file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_readlines_utf8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":274 - * try: - * return self.readlines_utf8() # read as utf8 encoded file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") - */ - __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_6) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":275 - * return self.readlines_utf8() # read as utf8 encoded file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/file.pyx":276 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/file.pyx":277 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":271 - * # Tests: test_IO.py :: test_file_readlines, test_file_readlines_missing_file - * #------------------------------------------------------------------------------ - * def readlines(self): # <<<<<<<<<<<<<< - * try: - * return self.readlines_utf8() # read as utf8 encoded file - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":285 - * # Tests: test_IO.py :: - * #------------------------------------------------------------------------------ - * def readlines_as(self, dev_spec_encoding): # <<<<<<<<<<<<<< - * try: - * if dev_spec_encoding == "": - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_11readlines_as(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_11readlines_as = {__Pyx_NAMESTR("readlines_as"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_11readlines_as, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_11readlines_as(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_dev_spec_encoding = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("readlines_as (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_dev_spec_encoding,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dev_spec_encoding)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("readlines_as", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "readlines_as") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_dev_spec_encoding = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("readlines_as", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_10readlines_as(__pyx_self, __pyx_v_self, __pyx_v_dev_spec_encoding); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_10readlines_as(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dev_spec_encoding) { - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_reader = NULL; - PyObject *__pyx_v_data_list = NULL; - PyObject *__pyx_v_line = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - Py_ssize_t __pyx_t_13; - PyObject *(*__pyx_t_14)(PyObject *); - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_t_17; - int __pyx_t_18; - PyObject *__pyx_t_19 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("readlines_as", 0); - - /* "lib/Naked/toolshed/c/file.pyx":286 - * #------------------------------------------------------------------------------ - * def readlines_as(self, dev_spec_encoding): - * try: # <<<<<<<<<<<<<< - * if dev_spec_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":287 - * def readlines_as(self, dev_spec_encoding): - * try: - * if dev_spec_encoding == "": # <<<<<<<<<<<<<< - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - * import codecs - */ - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_dev_spec_encoding, __pyx_kp_s__13, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/file.pyx":288 - * try: - * if dev_spec_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - - /* "lib/Naked/toolshed/c/file.pyx":289 - * if dev_spec_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - * import codecs # <<<<<<<<<<<<<< - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - * data_list = [] - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_codecs = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":290 - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - * import codecs - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: # <<<<<<<<<<<<<< - * data_list = [] - * for line in reader: - */ - /*with:*/ { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_encoding, __pyx_v_dev_spec_encoding) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_mode, __pyx_n_s_r) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_8, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L12_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_reader = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":291 - * import codecs - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - * data_list = [] # <<<<<<<<<<<<<< - * for line in reader: - * data_list.append(line) - */ - __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_v_data_list = ((PyObject*)__pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":292 - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - * data_list = [] - * for line in reader: # <<<<<<<<<<<<<< - * data_list.append(line) - * return data_list - */ - if (PyList_CheckExact(__pyx_v_reader) || PyTuple_CheckExact(__pyx_v_reader)) { - __pyx_t_7 = __pyx_v_reader; __Pyx_INCREF(__pyx_t_7); __pyx_t_13 = 0; - __pyx_t_14 = NULL; - } else { - __pyx_t_13 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_reader); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_14 = Py_TYPE(__pyx_t_7)->tp_iternext; - } - for (;;) { - if (!__pyx_t_14 && PyList_CheckExact(__pyx_t_7)) { - if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_7)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - #endif - } else if (!__pyx_t_14 && PyTuple_CheckExact(__pyx_t_7)) { - if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_7)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - #else - __pyx_t_8 = PySequence_ITEM(__pyx_t_7, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - #endif - } else { - __pyx_t_8 = __pyx_t_14(__pyx_t_7); - if (unlikely(!__pyx_t_8)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_8); - } - __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_8); - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":293 - * data_list = [] - * for line in reader: - * data_list.append(line) # <<<<<<<<<<<<<< - * return data_list - * except Exception as e: - */ - __pyx_t_15 = __Pyx_PyList_Append(__pyx_v_data_list, __pyx_v_line); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L18_error;} - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":294 - * for line in reader: - * data_list.append(line) - * return data_list # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_data_list); - __pyx_r = __pyx_v_data_list; - goto __pyx_L22_try_return; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L25_try_end; - __pyx_L18_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":290 - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - * import codecs - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: # <<<<<<<<<<<<<< - * data_list = [] - * for line in reader: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = PyTuple_Pack(3, __pyx_t_7, __pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_5, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_16); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - __pyx_t_17 = ((!(__pyx_t_4 != 0)) != 0); - if (__pyx_t_17) { - __Pyx_GIVEREF(__pyx_t_7); - __Pyx_GIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_6); - __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_6 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L20_except_error;} - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L19_exception_handled; - } - __pyx_L20_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L3_error; - __pyx_L22_try_return:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L15_return; - __pyx_L19_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L25_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_9) { - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__34, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - goto __pyx_L17; - } - __pyx_L15_return: { - __pyx_t_12 = __pyx_r; - __pyx_r = 0; - if (__pyx_t_9) { - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__35, NULL); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __pyx_r = __pyx_t_12; - __pyx_t_12 = 0; - goto __pyx_L7_try_return; - } - __pyx_L17:; - } - goto __pyx_L32; - __pyx_L12_error:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L3_error; - __pyx_L32:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":295 - * data_list.append(line) - * return data_list - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") - */ - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 295; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_e = __pyx_t_8; - - /* "lib/Naked/toolshed/c/file.pyx":296 - * return data_list - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_17 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_17) { - - /* "lib/Naked/toolshed/c/file.pyx":297 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - goto __pyx_L35; - } - __pyx_L35:; - - /* "lib/Naked/toolshed/c/file.pyx":298 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":285 - * # Tests: test_IO.py :: - * #------------------------------------------------------------------------------ - * def readlines_as(self, dev_spec_encoding): # <<<<<<<<<<<<<< - * try: - * if dev_spec_encoding == "": - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_as", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_reader); - __Pyx_XDECREF(__pyx_v_data_list); - __Pyx_XDECREF(__pyx_v_line); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":306 - * # Tests: test_IO.py :: test_file_readlines_unicode, test_file_readlines_utf8_missing_file - * #------------------------------------------------------------------------------ - * def readlines_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_13readlines_utf8(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_13readlines_utf8 = {__Pyx_NAMESTR("readlines_utf8"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_13readlines_utf8, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_13readlines_utf8(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("readlines_utf8 (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_12readlines_utf8(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_12readlines_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_uni_reader = NULL; - PyObject *__pyx_v_modified_text_list = NULL; - PyObject *__pyx_v_line = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_line = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - Py_ssize_t __pyx_t_12; - PyObject *(*__pyx_t_13)(PyObject *); - int __pyx_t_14; - PyObject *__pyx_t_15 = NULL; - int __pyx_t_16; - int __pyx_t_17; - int __pyx_t_18; - PyObject *__pyx_t_19 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("readlines_utf8", 0); - - /* "lib/Naked/toolshed/c/file.pyx":307 - * #------------------------------------------------------------------------------ - * def readlines_utf8(self): - * try: # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":308 - * def readlines_utf8(self): - * try: - * import codecs # <<<<<<<<<<<<<< - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: - * modified_text_list = [] - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_codecs = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":309 - * try: - * import codecs - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: # <<<<<<<<<<<<<< - * modified_text_list = [] - * for line in uni_reader: - */ - /*with:*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_encoding, __pyx_kp_s_utf_8_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_mode, __pyx_n_s_r) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_7, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - /*try:*/ { - __Pyx_INCREF(__pyx_t_6); - __pyx_v_uni_reader = __pyx_t_6; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":310 - * import codecs - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: - * modified_text_list = [] # <<<<<<<<<<<<<< - * for line in uni_reader: - * import unicodedata - */ - __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_modified_text_list = ((PyObject*)__pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":311 - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: - * modified_text_list = [] - * for line in uni_reader: # <<<<<<<<<<<<<< - * import unicodedata - * norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use - */ - if (PyList_CheckExact(__pyx_v_uni_reader) || PyTuple_CheckExact(__pyx_v_uni_reader)) { - __pyx_t_6 = __pyx_v_uni_reader; __Pyx_INCREF(__pyx_t_6); __pyx_t_12 = 0; - __pyx_t_13 = NULL; - } else { - __pyx_t_12 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_uni_reader); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_13 = Py_TYPE(__pyx_t_6)->tp_iternext; - } - for (;;) { - if (!__pyx_t_13 && PyList_CheckExact(__pyx_t_6)) { - if (__pyx_t_12 >= PyList_GET_SIZE(__pyx_t_6)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_12); __Pyx_INCREF(__pyx_t_7); __pyx_t_12++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_6, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - #endif - } else if (!__pyx_t_13 && PyTuple_CheckExact(__pyx_t_6)) { - if (__pyx_t_12 >= PyTuple_GET_SIZE(__pyx_t_6)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_12); __Pyx_INCREF(__pyx_t_7); __pyx_t_12++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_6, __pyx_t_12); __pyx_t_12++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_13(__pyx_t_6); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_line, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":312 - * modified_text_list = [] - * for line in uni_reader: - * import unicodedata # <<<<<<<<<<<<<< - * norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use - * modified_text_list.append(norm_line) - */ - __pyx_t_7 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_unicodedata, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":313 - * for line in uni_reader: - * import unicodedata - * norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use # <<<<<<<<<<<<<< - * modified_text_list.append(norm_line) - * return modified_text_list - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_line); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_line); - __Pyx_GIVEREF(__pyx_v_line); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF_SET(__pyx_v_norm_line, __pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":314 - * import unicodedata - * norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use - * modified_text_list.append(norm_line) # <<<<<<<<<<<<<< - * return modified_text_list - * except Exception as e: - */ - __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_modified_text_list, __pyx_v_norm_line); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":315 - * norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use - * modified_text_list.append(norm_line) - * return modified_text_list # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_modified_text_list); - __pyx_r = __pyx_v_modified_text_list; - goto __pyx_L21_try_return; - } - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":309 - * try: - * import codecs - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: # <<<<<<<<<<<<<< - * modified_text_list = [] - * for line in uni_reader: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = PyTuple_Pack(3, __pyx_t_6, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_16 = __Pyx_PyObject_IsTrue(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (__pyx_t_16 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __pyx_t_17 = ((!(__pyx_t_16 != 0)) != 0); - if (__pyx_t_17) { - __Pyx_GIVEREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_ErrRestore(__pyx_t_6, __pyx_t_4, __pyx_t_5); - __pyx_t_6 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L18_exception_handled; - } - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); - goto __pyx_L3_error; - __pyx_L21_try_return:; - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); - goto __pyx_L14_return; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11); - __pyx_L24_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_8) { - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__37, NULL); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - goto __pyx_L16; - } - __pyx_L14_return: { - __pyx_t_11 = __pyx_r; - __pyx_r = 0; - if (__pyx_t_8) { - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__38, NULL); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __pyx_r = __pyx_t_11; - __pyx_t_11 = 0; - goto __pyx_L7_try_return; - } - __pyx_L16:; - } - goto __pyx_L31; - __pyx_L11_error:; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L3_error; - __pyx_L31:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":316 - * modified_text_list.append(norm_line) - * return modified_text_list - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") - */ - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":317 - * return modified_text_list - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_17 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_17 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_17) { - - /* "lib/Naked/toolshed/c/file.pyx":318 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - goto __pyx_L34; - } - __pyx_L34:; - - /* "lib/Naked/toolshed/c/file.pyx":319 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":306 - * # Tests: test_IO.py :: test_file_readlines_unicode, test_file_readlines_utf8_missing_file - * #------------------------------------------------------------------------------ - * def readlines_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.readlines_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_uni_reader); - __Pyx_XDECREF(__pyx_v_modified_text_list); - __Pyx_XDECREF(__pyx_v_line); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_line); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":329 - * # test_file_read_gzip_missing_file - * #------------------------------------------------------------------------------ - * def read_gzip(self, encoding="system_default"): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_15read_gzip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_15read_gzip = {__Pyx_NAMESTR("read_gzip"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_15read_gzip, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_15read_gzip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_encoding = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("read_gzip (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_encoding,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_n_s_system_default)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_encoding); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "read_gzip") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_encoding = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("read_gzip", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_14read_gzip(__pyx_self, __pyx_v_self, __pyx_v_encoding); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_14read_gzip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_encoding) { - PyObject *__pyx_v_gzip = NULL; - PyObject *__pyx_v_gzip_reader = NULL; - PyObject *__pyx_v_file_data = NULL; - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_data = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - int __pyx_t_12; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_t_16; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_gzip", 0); - - /* "lib/Naked/toolshed/c/file.pyx":330 - * #------------------------------------------------------------------------------ - * def read_gzip(self, encoding="system_default"): - * try: # <<<<<<<<<<<<<< - * import gzip - * with gzip.open(self.filepath, 'rb') as gzip_reader: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":331 - * def read_gzip(self, encoding="system_default"): - * try: - * import gzip # <<<<<<<<<<<<<< - * with gzip.open(self.filepath, 'rb') as gzip_reader: - * file_data = gzip_reader.read() - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_gzip, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_gzip = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":332 - * try: - * import gzip - * with gzip.open(self.filepath, 'rb') as gzip_reader: # <<<<<<<<<<<<<< - * file_data = gzip_reader.read() - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - */ - /*with:*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip, __pyx_n_s_open); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_INCREF(__pyx_n_s_rb); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_rb); - __Pyx_GIVEREF(__pyx_n_s_rb); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L11_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - /*try:*/ { - __Pyx_INCREF(__pyx_t_4); - __pyx_v_gzip_reader = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":333 - * import gzip - * with gzip.open(self.filepath, 'rb') as gzip_reader: - * file_data = gzip_reader.read() # <<<<<<<<<<<<<< - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - * import codecs - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_reader, __pyx_n_s_read); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_file_data = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":334 - * with gzip.open(self.filepath, 'rb') as gzip_reader: - * file_data = gzip_reader.read() - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: # <<<<<<<<<<<<<< - * import codecs - * file_data = codecs.decode(file_data, "utf-8") - */ - __Pyx_INCREF(__pyx_v_encoding); - __pyx_t_5 = __pyx_v_encoding; - __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_kp_s_utf_8_2, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - if (!__pyx_t_11) { - __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_utf8, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __pyx_t_13 = __pyx_t_12; - } else { - __pyx_t_13 = __pyx_t_11; - } - if (!__pyx_t_13) { - __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_utf_8, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __pyx_t_12 = __pyx_t_11; - } else { - __pyx_t_12 = __pyx_t_13; - } - if (!__pyx_t_12) { - __pyx_t_13 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_kp_s_UTF_8, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __pyx_t_11 = __pyx_t_13; - } else { - __pyx_t_11 = __pyx_t_12; - } - if (!__pyx_t_11) { - __pyx_t_12 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_UTF8, Py_EQ)); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __pyx_t_13 = __pyx_t_12; - } else { - __pyx_t_13 = __pyx_t_11; - } - if (!__pyx_t_13) { - __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_UTF_8_2, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __pyx_t_12 = __pyx_t_11; - } else { - __pyx_t_12 = __pyx_t_13; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_13 = (__pyx_t_12 != 0); - if (__pyx_t_13) { - - /* "lib/Naked/toolshed/c/file.pyx":335 - * file_data = gzip_reader.read() - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - * import codecs # <<<<<<<<<<<<<< - * file_data = codecs.decode(file_data, "utf-8") - * import unicodedata - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 335; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_codecs = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":336 - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - * import codecs - * file_data = codecs.decode(file_data, "utf-8") # <<<<<<<<<<<<<< - * import unicodedata - * norm_data = unicodedata.normalize('NFKD', file_data) # NKFD normalization of the unicode data before passing back to the caller - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_decode); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_file_data); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_file_data); - __Pyx_GIVEREF(__pyx_v_file_data); - __Pyx_INCREF(__pyx_kp_s_utf_8_2); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_kp_s_utf_8_2); - __Pyx_GIVEREF(__pyx_kp_s_utf_8_2); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_file_data, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":337 - * import codecs - * file_data = codecs.decode(file_data, "utf-8") - * import unicodedata # <<<<<<<<<<<<<< - * norm_data = unicodedata.normalize('NFKD', file_data) # NKFD normalization of the unicode data before passing back to the caller - * return norm_data - */ - __pyx_t_6 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_unicodedata = __pyx_t_6; - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":338 - * file_data = codecs.decode(file_data, "utf-8") - * import unicodedata - * norm_data = unicodedata.normalize('NFKD', file_data) # NKFD normalization of the unicode data before passing back to the caller # <<<<<<<<<<<<<< - * return norm_data - * else: - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_file_data); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_file_data); - __Pyx_GIVEREF(__pyx_v_file_data); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_norm_data = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":339 - * import unicodedata - * norm_data = unicodedata.normalize('NFKD', file_data) # NKFD normalization of the unicode data before passing back to the caller - * return norm_data # <<<<<<<<<<<<<< - * else: - * return file_data - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_norm_data); - __pyx_r = __pyx_v_norm_data; - goto __pyx_L21_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/file.pyx":341 - * return norm_data - * else: - * return file_data # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_file_data); - __pyx_r = __pyx_v_file_data; - goto __pyx_L21_try_return; - } - } - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":332 - * try: - * import gzip - * with gzip.open(self.filepath, 'rb') as gzip_reader: # <<<<<<<<<<<<<< - * file_data = gzip_reader.read() - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_14 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_14, NULL); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (__pyx_t_13 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __pyx_t_12 = ((!(__pyx_t_13 != 0)) != 0); - if (__pyx_t_12) { - __Pyx_GIVEREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_ErrRestore(__pyx_t_5, __pyx_t_4, __pyx_t_6); - __pyx_t_5 = 0; __pyx_t_4 = 0; __pyx_t_6 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L18_exception_handled; - } - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - goto __pyx_L3_error; - __pyx_L21_try_return:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - goto __pyx_L14_return; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - __pyx_L24_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_7) { - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__40, NULL); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - goto __pyx_L16; - } - __pyx_L14_return: { - __pyx_t_10 = __pyx_r; - __pyx_r = 0; - if (__pyx_t_7) { - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__41, NULL); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __pyx_r = __pyx_t_10; - __pyx_t_10 = 0; - goto __pyx_L7_try_return; - } - __pyx_L16:; - } - goto __pyx_L30; - __pyx_L11_error:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L3_error; - __pyx_L30:; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":342 - * else: - * return file_data - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") - */ - __pyx_t_16 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_16) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/file.pyx":343 - * return file_data - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_12) { - - /* "lib/Naked/toolshed/c/file.pyx":344 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_stderr); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - goto __pyx_L33; - } - __pyx_L33:; - - /* "lib/Naked/toolshed/c/file.pyx":345 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":329 - * # test_file_read_gzip_missing_file - * #------------------------------------------------------------------------------ - * def read_gzip(self, encoding="system_default"): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_gzip", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_gzip); - __Pyx_XDECREF(__pyx_v_gzip_reader); - __Pyx_XDECREF(__pyx_v_file_data); - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_data); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/file.pyx":355 - * # test_file_read_utf8_missing_file - * #------------------------------------------------------------------------------ - * def read_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_17read_utf8(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_17read_utf8 = {__Pyx_NAMESTR("read_utf8"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_17read_utf8, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_4file_10FileReader_17read_utf8(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("read_utf8 (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_16read_utf8(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_4file_10FileReader_16read_utf8(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_ioe = NULL; - PyObject *__pyx_v_textstring = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_text = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - char const *__pyx_t_12; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_utf8", 0); - - /* "lib/Naked/toolshed/c/file.pyx":356 - * #------------------------------------------------------------------------------ - * def read_utf8(self): - * try: # <<<<<<<<<<<<<< - * import codecs - * f = codecs.open(self.filepath, encoding='utf_8', mode='r') - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":357 - * def read_utf8(self): - * try: - * import codecs # <<<<<<<<<<<<<< - * f = codecs.open(self.filepath, encoding='utf_8', mode='r') - * except IOError as ioe: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_codecs = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":358 - * try: - * import codecs - * f = codecs.open(self.filepath, encoding='utf_8', mode='r') # <<<<<<<<<<<<<< - * except IOError as ioe: - * if DEBUG_FLAG: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_filepath); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_encoding, __pyx_n_s_utf_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_mode, __pyx_n_s_r) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_f = __pyx_t_7; - __pyx_t_7 = 0; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":359 - * import codecs - * f = codecs.open(self.filepath, encoding='utf_8', mode='r') - * except IOError as ioe: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_IOError); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_ioe = __pyx_t_5; - - /* "lib/Naked/toolshed/c/file.pyx":360 - * f = codecs.open(self.filepath, encoding='utf_8', mode='r') - * except IOError as ioe: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") - * raise ioe - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/file.pyx":361 - * except IOError as ioe: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise ioe - * try: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/file.pyx":362 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") - * raise ioe # <<<<<<<<<<<<<< - * try: - * textstring = f.read() - */ - __Pyx_Raise(__pyx_v_ioe, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/file.pyx":363 - * sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") - * raise ioe - * try: # <<<<<<<<<<<<<< - * textstring = f.read() - * import unicodedata - */ - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_1); - /*try:*/ { - - /* "lib/Naked/toolshed/c/file.pyx":364 - * raise ioe - * try: - * textstring = f.read() # <<<<<<<<<<<<<< - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_read); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_textstring = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":365 - * try: - * textstring = f.read() - * import unicodedata # <<<<<<<<<<<<<< - * norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns - * return norm_text - */ - __pyx_t_5 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_unicodedata = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":366 - * textstring = f.read() - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns # <<<<<<<<<<<<<< - * return norm_text - * except Exception as e: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_textstring); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_textstring); - __Pyx_GIVEREF(__pyx_v_textstring); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L17_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_norm_text = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":367 - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns - * return norm_text # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_norm_text); - __pyx_r = __pyx_v_norm_text; - goto __pyx_L21_try_return; - } - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L24_try_end; - __pyx_L17_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":368 - * norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns - * return norm_text - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/file.pyx":369 - * return norm_text - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/file.pyx":370 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * finally: - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L27; - } - __pyx_L27:; - - /* "lib/Naked/toolshed/c/file.pyx":371 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") - * raise e # <<<<<<<<<<<<<< - * finally: - * f.close() - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L18_exception_handled; - } - goto __pyx_L19_except_error; - __pyx_L19_except_error:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); - goto __pyx_L15_error; - __pyx_L21_try_return:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); - goto __pyx_L14_return; - __pyx_L18_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1); - __pyx_L24_try_end:; - } - } - - /* "lib/Naked/toolshed/c/file.pyx":373 - * raise e - * finally: - * f.close() # <<<<<<<<<<<<<< - * - * - */ - /*finally:*/ { - /*exception exit:*/{ - __pyx_L15_error:; - __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0)) __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - __pyx_t_8 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename; - { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L29_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L29_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - } - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12; - goto __pyx_L1_error; - __pyx_L29_error:; - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - goto __pyx_L1_error; - } - __pyx_L14_return: { - __pyx_t_15 = __pyx_r; - __pyx_r = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_15; - __pyx_t_15 = 0; - goto __pyx_L0; - } - } - - /* "lib/Naked/toolshed/c/file.pyx":355 - * # test_file_read_utf8_missing_file - * #------------------------------------------------------------------------------ - * def read_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.file.FileReader.read_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_ioe); - __Pyx_XDECREF(__pyx_v_textstring); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_text); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("file"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader, __pyx_k_FileReader, sizeof(__pyx_k_FileReader), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader___init, __pyx_k_FileReader___init, sizeof(__pyx_k_FileReader___init), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_read, __pyx_k_FileReader_read, sizeof(__pyx_k_FileReader_read), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_read_as, __pyx_k_FileReader_read_as, sizeof(__pyx_k_FileReader_read_as), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_read_bin, __pyx_k_FileReader_read_bin, sizeof(__pyx_k_FileReader_read_bin), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_read_gzip, __pyx_k_FileReader_read_gzip, sizeof(__pyx_k_FileReader_read_gzip), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_read_utf8, __pyx_k_FileReader_read_utf8, sizeof(__pyx_k_FileReader_read_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_readlines, __pyx_k_FileReader_readlines, sizeof(__pyx_k_FileReader_readlines), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_readlines_as, __pyx_k_FileReader_readlines_as, sizeof(__pyx_k_FileReader_readlines_as), 0, 0, 1, 1}, - {&__pyx_n_s_FileReader_readlines_utf8, __pyx_k_FileReader_readlines_utf8, sizeof(__pyx_k_FileReader_readlines_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter, __pyx_k_FileWriter, sizeof(__pyx_k_FileWriter), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter___init, __pyx_k_FileWriter___init, sizeof(__pyx_k_FileWriter___init), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_append, __pyx_k_FileWriter_append, sizeof(__pyx_k_FileWriter_append), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_append_utf8, __pyx_k_FileWriter_append_utf8, sizeof(__pyx_k_FileWriter_append_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_gzip, __pyx_k_FileWriter_gzip, sizeof(__pyx_k_FileWriter_gzip), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_safe_write, __pyx_k_FileWriter_safe_write, sizeof(__pyx_k_FileWriter_safe_write), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_safe_write_bin, __pyx_k_FileWriter_safe_write_bin, sizeof(__pyx_k_FileWriter_safe_write_bin), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_write, __pyx_k_FileWriter_write, sizeof(__pyx_k_FileWriter_write), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_write_as, __pyx_k_FileWriter_write_as, sizeof(__pyx_k_FileWriter_write_as), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_write_bin, __pyx_k_FileWriter_write_bin, sizeof(__pyx_k_FileWriter_write_bin), 0, 0, 1, 1}, - {&__pyx_n_s_FileWriter_write_utf8, __pyx_k_FileWriter_write_utf8, sizeof(__pyx_k_FileWriter_write_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_IO, __pyx_k_IO, sizeof(__pyx_k_IO), 0, 0, 1, 1}, - {&__pyx_n_s_IOError, __pyx_k_IOError, sizeof(__pyx_k_IOError), 0, 0, 1, 1}, - {&__pyx_n_s_IO___init, __pyx_k_IO___init, sizeof(__pyx_k_IO___init), 0, 0, 1, 1}, - {&__pyx_n_s_NFKD, __pyx_k_NFKD, sizeof(__pyx_k_NFKD), 0, 0, 1, 1}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to, __pyx_k_Naked_Framework_Error_Unable_to, sizeof(__pyx_k_Naked_Framework_Error_Unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_10, __pyx_k_Naked_Framework_Error_Unable_to_10, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_10), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_11, __pyx_k_Naked_Framework_Error_Unable_to_11, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_11), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_12, __pyx_k_Naked_Framework_Error_Unable_to_12, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_12), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_13, __pyx_k_Naked_Framework_Error_Unable_to_13, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_13), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_14, __pyx_k_Naked_Framework_Error_Unable_to_14, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_14), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_15, __pyx_k_Naked_Framework_Error_Unable_to_15, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_15), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_2, __pyx_k_Naked_Framework_Error_Unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_3, __pyx_k_Naked_Framework_Error_Unable_to_3, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_4, __pyx_k_Naked_Framework_Error_Unable_to_4, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_5, __pyx_k_Naked_Framework_Error_Unable_to_5, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_6, __pyx_k_Naked_Framework_Error_Unable_to_6, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_6), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_7, __pyx_k_Naked_Framework_Error_Unable_to_7, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_7), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_8, __pyx_k_Naked_Framework_Error_Unable_to_8, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_8), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_9, __pyx_k_Naked_Framework_Error_Unable_to_9, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_9), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to, __pyx_k_Naked_Framework_Error_unable_to, sizeof(__pyx_k_Naked_Framework_Error_unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_2, __pyx_k_Naked_Framework_Error_unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_unable_to_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_3, __pyx_k_Naked_Framework_Error_unable_to_3, sizeof(__pyx_k_Naked_Framework_Error_unable_to_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_4, __pyx_k_Naked_Framework_Error_unable_to_4, sizeof(__pyx_k_Naked_Framework_Error_unable_to_4), 0, 0, 1, 0}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_system, __pyx_k_Naked_toolshed_system, sizeof(__pyx_k_Naked_toolshed_system), 0, 0, 1, 1}, - {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, - {&__pyx_kp_s_The_file_specified_for_the_text, __pyx_k_The_file_specified_for_the_text, sizeof(__pyx_k_The_file_specified_for_the_text), 0, 0, 1, 0}, - {&__pyx_kp_s_The_file_specified_for_the_text_2, __pyx_k_The_file_specified_for_the_text_2, sizeof(__pyx_k_The_file_specified_for_the_text_2), 0, 0, 1, 0}, - {&__pyx_kp_s_The_text_encoding_was_not_specif, __pyx_k_The_text_encoding_was_not_specif, sizeof(__pyx_k_The_text_encoding_was_not_specif), 0, 0, 1, 0}, - {&__pyx_kp_s_The_text_file_encoding_was_not_s, __pyx_k_The_text_file_encoding_was_not_s, sizeof(__pyx_k_The_text_file_encoding_was_not_s), 0, 0, 1, 0}, - {&__pyx_kp_s_The_text_file_encoding_was_not_s_2, __pyx_k_The_text_file_encoding_was_not_s_2, sizeof(__pyx_k_The_text_file_encoding_was_not_s_2), 0, 0, 1, 0}, - {&__pyx_n_s_UTF8, __pyx_k_UTF8, sizeof(__pyx_k_UTF8), 0, 0, 1, 1}, - {&__pyx_kp_s_UTF_8, __pyx_k_UTF_8, sizeof(__pyx_k_UTF_8), 0, 0, 1, 0}, - {&__pyx_n_s_UTF_8_2, __pyx_k_UTF_8_2, sizeof(__pyx_k_UTF_8_2), 0, 0, 1, 1}, - {&__pyx_n_s_UnicodeEncodeError, __pyx_k_UnicodeEncodeError, sizeof(__pyx_k_UnicodeEncodeError), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_kp_s__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 1, 0}, - {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, - {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, - {&__pyx_n_s_append_utf8, __pyx_k_append_utf8, sizeof(__pyx_k_append_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_appender, __pyx_k_appender, sizeof(__pyx_k_appender), 0, 0, 1, 1}, - {&__pyx_n_s_bin_reader, __pyx_k_bin_reader, sizeof(__pyx_k_bin_reader), 0, 0, 1, 1}, - {&__pyx_n_s_bin_writer, __pyx_k_bin_writer, sizeof(__pyx_k_bin_writer), 0, 0, 1, 1}, - {&__pyx_n_s_binary_data, __pyx_k_binary_data, sizeof(__pyx_k_binary_data), 0, 0, 1, 1}, - {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, - {&__pyx_n_s_codecs, __pyx_k_codecs, sizeof(__pyx_k_codecs), 0, 0, 1, 1}, - {&__pyx_n_s_compression_level, __pyx_k_compression_level, sizeof(__pyx_k_compression_level), 0, 0, 1, 1}, - {&__pyx_n_s_compresslevel, __pyx_k_compresslevel, sizeof(__pyx_k_compresslevel), 0, 0, 1, 1}, - {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, - {&__pyx_n_s_data_list, __pyx_k_data_list, sizeof(__pyx_k_data_list), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, - {&__pyx_n_s_dev_spec_encoding, __pyx_k_dev_spec_encoding, sizeof(__pyx_k_dev_spec_encoding), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, - {&__pyx_n_s_encoding, __pyx_k_encoding, sizeof(__pyx_k_encoding), 0, 0, 1, 1}, - {&__pyx_n_s_endswith, __pyx_k_endswith, sizeof(__pyx_k_endswith), 0, 0, 1, 1}, - {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, - {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, - {&__pyx_n_s_file_data, __pyx_k_file_data, sizeof(__pyx_k_file_data), 0, 0, 1, 1}, - {&__pyx_n_s_file_exists, __pyx_k_file_exists, sizeof(__pyx_k_file_exists), 0, 0, 1, 1}, - {&__pyx_n_s_filepath, __pyx_k_filepath, sizeof(__pyx_k_filepath), 0, 0, 1, 1}, - {&__pyx_kp_s_gz, __pyx_k_gz, sizeof(__pyx_k_gz), 0, 0, 1, 0}, - {&__pyx_n_s_gzip, __pyx_k_gzip, sizeof(__pyx_k_gzip), 0, 0, 1, 1}, - {&__pyx_n_s_gzip_reader, __pyx_k_gzip_reader, sizeof(__pyx_k_gzip_reader), 0, 0, 1, 1}, - {&__pyx_n_s_gzip_writer, __pyx_k_gzip_writer, sizeof(__pyx_k_gzip_writer), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_ioe, __pyx_k_ioe, sizeof(__pyx_k_ioe), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_file, __pyx_k_lib_Naked_toolshed_c_file, sizeof(__pyx_k_lib_Naked_toolshed_c_file), 0, 0, 1, 1}, - {&__pyx_n_s_line, __pyx_k_line, sizeof(__pyx_k_line), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, - {&__pyx_n_s_modified_text_list, __pyx_k_modified_text_list, sizeof(__pyx_k_modified_text_list), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_norm_data, __pyx_k_norm_data, sizeof(__pyx_k_norm_data), 0, 0, 1, 1}, - {&__pyx_n_s_norm_line, __pyx_k_norm_line, sizeof(__pyx_k_norm_line), 0, 0, 1, 1}, - {&__pyx_n_s_norm_text, __pyx_k_norm_text, sizeof(__pyx_k_norm_text), 0, 0, 1, 1}, - {&__pyx_n_s_normalize, __pyx_k_normalize, sizeof(__pyx_k_normalize), 0, 0, 1, 1}, - {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1}, - {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, - {&__pyx_n_s_os_path, __pyx_k_os_path, sizeof(__pyx_k_os_path), 0, 0, 1, 1}, - {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1}, - {&__pyx_n_s_rb, __pyx_k_rb, sizeof(__pyx_k_rb), 0, 0, 1, 1}, - {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1}, - {&__pyx_n_s_read_as, __pyx_k_read_as, sizeof(__pyx_k_read_as), 0, 0, 1, 1}, - {&__pyx_n_s_read_bin, __pyx_k_read_bin, sizeof(__pyx_k_read_bin), 0, 0, 1, 1}, - {&__pyx_n_s_read_gzip, __pyx_k_read_gzip, sizeof(__pyx_k_read_gzip), 0, 0, 1, 1}, - {&__pyx_n_s_read_utf8, __pyx_k_read_utf8, sizeof(__pyx_k_read_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_reader, __pyx_k_reader, sizeof(__pyx_k_reader), 0, 0, 1, 1}, - {&__pyx_n_s_readlines, __pyx_k_readlines, sizeof(__pyx_k_readlines), 0, 0, 1, 1}, - {&__pyx_n_s_readlines_as, __pyx_k_readlines_as, sizeof(__pyx_k_readlines_as), 0, 0, 1, 1}, - {&__pyx_n_s_readlines_utf8, __pyx_k_readlines_utf8, sizeof(__pyx_k_readlines_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_safe_write, __pyx_k_safe_write, sizeof(__pyx_k_safe_write), 0, 0, 1, 1}, - {&__pyx_n_s_safe_write_bin, __pyx_k_safe_write_bin, sizeof(__pyx_k_safe_write_bin), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_system_default, __pyx_k_system_default, sizeof(__pyx_k_system_default), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, - {&__pyx_n_s_textstring, __pyx_k_textstring, sizeof(__pyx_k_textstring), 0, 0, 1, 1}, - {&__pyx_n_s_the_encoding, __pyx_k_the_encoding, sizeof(__pyx_k_the_encoding), 0, 0, 1, 1}, - {&__pyx_n_s_ue, __pyx_k_ue, sizeof(__pyx_k_ue), 0, 0, 1, 1}, - {&__pyx_n_s_uni_reader, __pyx_k_uni_reader, sizeof(__pyx_k_uni_reader), 0, 0, 1, 1}, - {&__pyx_n_s_unicodedata, __pyx_k_unicodedata, sizeof(__pyx_k_unicodedata), 0, 0, 1, 1}, - {&__pyx_n_s_utf8, __pyx_k_utf8, sizeof(__pyx_k_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 0, 1, 1}, - {&__pyx_kp_s_utf_8_2, __pyx_k_utf_8_2, sizeof(__pyx_k_utf_8_2), 0, 0, 1, 0}, - {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1}, - {&__pyx_n_s_wb, __pyx_k_wb, sizeof(__pyx_k_wb), 0, 0, 1, 1}, - {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, - {&__pyx_n_s_write_as, __pyx_k_write_as, sizeof(__pyx_k_write_as), 0, 0, 1, 1}, - {&__pyx_n_s_write_bin, __pyx_k_write_bin, sizeof(__pyx_k_write_bin), 0, 0, 1, 1}, - {&__pyx_n_s_write_utf8, __pyx_k_write_utf8, sizeof(__pyx_k_write_utf8), 0, 0, 1, 1}, - {&__pyx_n_s_writer, __pyx_k_writer, sizeof(__pyx_k_writer), 0, 0, 1, 1}, - {&__pyx_n_s_wt, __pyx_k_wt, sizeof(__pyx_k_wt), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_UnicodeEncodeError = __Pyx_GetBuiltinName(__pyx_n_s_UnicodeEncodeError); if (!__pyx_builtin_UnicodeEncodeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/file.pyx":33 - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") # <<<<<<<<<<<<<< - * with open(self.filepath, 'a') as appender: - * appender.write(text) - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_The_file_specified_for_the_text); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "lib/Naked/toolshed/c/file.pyx":34 - * if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - * with open(self.filepath, 'a') as appender: # <<<<<<<<<<<<<< - * appender.write(text) - * except UnicodeEncodeError as ue: - */ - __pyx_tuple__2 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "lib/Naked/toolshed/c/file.pyx":40 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "lib/Naked/toolshed/c/file.pyx":52 - * from Naked.toolshed.system import file_exists - * if not file_exists(self.filepath): - * raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") # <<<<<<<<<<<<<< - * import codecs - * import unicodedata - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_The_file_specified_for_the_text_2); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "lib/Naked/toolshed/c/file.pyx":56 - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - * with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: # <<<<<<<<<<<<<< - * appender.write(norm_text) - * except Exception as e: - */ - __pyx_tuple__5 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "lib/Naked/toolshed/c/file.pyx":60 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_2); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "lib/Naked/toolshed/c/file.pyx":74 - * try: - * import gzip - * if not self.filepath.endswith(".gz"): # <<<<<<<<<<<<<< - * self.filepath = self.filepath + ".gz" - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_gz); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "lib/Naked/toolshed/c/file.pyx":76 - * if not self.filepath.endswith(".gz"): - * self.filepath = self.filepath + ".gz" - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: # <<<<<<<<<<<<<< - * gzip_writer.write(text) - * except UnicodeEncodeError as ue: - */ - __pyx_tuple__8 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - - /* "lib/Naked/toolshed/c/file.pyx":83 - * import codecs - * binary_data = codecs.encode(norm_text, "utf_8") - * with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: # <<<<<<<<<<<<<< - * gzip_writer.write(binary_data) - * except Exception as e: - */ - __pyx_tuple__9 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "lib/Naked/toolshed/c/file.pyx":87 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "lib/Naked/toolshed/c/file.pyx":98 - * def write(self, text): - * try: - * with open(self.filepath, 'wt') as writer: # <<<<<<<<<<<<<< - * writer.write(text) - * except UnicodeEncodeError as ue: - */ - __pyx_tuple__11 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "lib/Naked/toolshed/c/file.pyx":104 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_3); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - - /* "lib/Naked/toolshed/c/file.pyx":115 - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_The_text_encoding_was_not_specif); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - - /* "lib/Naked/toolshed/c/file.pyx":117 - * raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: # <<<<<<<<<<<<<< - * f.write(text) - * except Exception as e: - */ - __pyx_tuple__15 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - - /* "lib/Naked/toolshed/c/file.pyx":121 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_2); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - - /* "lib/Naked/toolshed/c/file.pyx":131 - * def write_bin(self, binary_data): - * try: - * with open(self.filepath, 'wb') as bin_writer: # <<<<<<<<<<<<<< - * bin_writer.write(binary_data) - * except Exception as e: - */ - __pyx_tuple__17 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - - /* "lib/Naked/toolshed/c/file.pyx":135 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_4); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - - /* "lib/Naked/toolshed/c/file.pyx":148 - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - * try: - * with open(self.filepath, 'wt') as writer: # <<<<<<<<<<<<<< - * writer.write(text) - * return True - */ - __pyx_tuple__19 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - - /* "lib/Naked/toolshed/c/file.pyx":156 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * else: - */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_5); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - - /* "lib/Naked/toolshed/c/file.pyx":170 - * import os.path - * if not os.path.exists(self.filepath): - * with open(self.filepath, 'wb') as writer: # <<<<<<<<<<<<<< - * writer.write(file_data) - * return True - */ - __pyx_tuple__21 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - - /* "lib/Naked/toolshed/c/file.pyx":177 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_6); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); - - /* "lib/Naked/toolshed/c/file.pyx":194 - * except IOError as ioe: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise ioe - * try: - */ - __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_7); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - - /* "lib/Naked/toolshed/c/file.pyx":202 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * finally: - */ - __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_8); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__24); - __Pyx_GIVEREF(__pyx_tuple__24); - - /* "lib/Naked/toolshed/c/file.pyx":227 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_9); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - - /* "lib/Naked/toolshed/c/file.pyx":238 - * def read_bin(self): - * try: - * with open(self.filepath, 'rb') as bin_reader: # <<<<<<<<<<<<<< - * data = bin_reader.read() - * return data - */ - __pyx_tuple__26 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - __pyx_tuple__27 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - - /* "lib/Naked/toolshed/c/file.pyx":243 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_10); if (unlikely(!__pyx_tuple__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__28); - __Pyx_GIVEREF(__pyx_tuple__28); - - /* "lib/Naked/toolshed/c/file.pyx":255 - * try: - * if the_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - */ - __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_The_text_file_encoding_was_not_s); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - - /* "lib/Naked/toolshed/c/file.pyx":257 - * raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - * import codecs - * with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: # <<<<<<<<<<<<<< - * data = f.read() - * return data - */ - __pyx_tuple__30 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__30); - __Pyx_GIVEREF(__pyx_tuple__30); - - /* "lib/Naked/toolshed/c/file.pyx":262 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_11); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - - /* "lib/Naked/toolshed/c/file.pyx":276 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_12); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); - - /* "lib/Naked/toolshed/c/file.pyx":288 - * try: - * if dev_spec_encoding == "": - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - */ - __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_The_text_file_encoding_was_not_s_2); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - - /* "lib/Naked/toolshed/c/file.pyx":290 - * raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - * import codecs - * with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: # <<<<<<<<<<<<<< - * data_list = [] - * for line in reader: - */ - __pyx_tuple__34 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__34); - __Pyx_GIVEREF(__pyx_tuple__34); - __pyx_tuple__35 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - - /* "lib/Naked/toolshed/c/file.pyx":297 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_3); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__36); - __Pyx_GIVEREF(__pyx_tuple__36); - - /* "lib/Naked/toolshed/c/file.pyx":309 - * try: - * import codecs - * with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: # <<<<<<<<<<<<<< - * modified_text_list = [] - * for line in uni_reader: - */ - __pyx_tuple__37 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - __pyx_tuple__38 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__38); - __Pyx_GIVEREF(__pyx_tuple__38); - - /* "lib/Naked/toolshed/c/file.pyx":318 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_4); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__39); - __Pyx_GIVEREF(__pyx_tuple__39); - - /* "lib/Naked/toolshed/c/file.pyx":332 - * try: - * import gzip - * with gzip.open(self.filepath, 'rb') as gzip_reader: # <<<<<<<<<<<<<< - * file_data = gzip_reader.read() - * if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - */ - __pyx_tuple__40 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__40); - __Pyx_GIVEREF(__pyx_tuple__40); - __pyx_tuple__41 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__41); - __Pyx_GIVEREF(__pyx_tuple__41); - - /* "lib/Naked/toolshed/c/file.pyx":344 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_13); if (unlikely(!__pyx_tuple__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__42); - __Pyx_GIVEREF(__pyx_tuple__42); - - /* "lib/Naked/toolshed/c/file.pyx":361 - * except IOError as ioe: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise ioe - * try: - */ - __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_14); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__43); - __Pyx_GIVEREF(__pyx_tuple__43); - - /* "lib/Naked/toolshed/c/file.pyx":370 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") # <<<<<<<<<<<<<< - * raise e - * finally: - */ - __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_15); if (unlikely(!__pyx_tuple__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__44); - __Pyx_GIVEREF(__pyx_tuple__44); - - /* "lib/Naked/toolshed/c/file.pyx":13 - * #------------------------------------------------------------------------------ - * class IO: - * def __init__(self,filepath): # <<<<<<<<<<<<<< - * self.filepath = filepath - * - */ - __pyx_tuple__45 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_filepath); if (unlikely(!__pyx_tuple__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__45); - __Pyx_GIVEREF(__pyx_tuple__45); - __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 13, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":21 - * #------------------------------------------------------------------------------ - * class FileWriter(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_filepath); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__47); - __Pyx_GIVEREF(__pyx_tuple__47); - __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 21, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":29 - * # Tests: test_IO.py:: test_file_ascii_readwrite_append, test_file_append_missingfile - * #------------------------------------------------------------------------------ - * def append(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - __pyx_tuple__49 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_file_exists, __pyx_n_s_appender, __pyx_n_s_ue, __pyx_n_s_e); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__49); - __Pyx_GIVEREF(__pyx_tuple__49); - __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_append, 29, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":48 - * # Tests: test_IO.py :: test_file_utf8_readwrite_append - * #------------------------------------------------------------------------------ - * def append_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - __pyx_tuple__51 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_file_exists, __pyx_n_s_codecs, __pyx_n_s_unicodedata, __pyx_n_s_norm_text, __pyx_n_s_appender, __pyx_n_s_e); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__51); - __Pyx_GIVEREF(__pyx_tuple__51); - __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_append_utf8, 48, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":71 - * # test_file_gzip_utf8_readwrite_explicit_decode - * #------------------------------------------------------------------------------ - * def gzip(self, text, compression_level=6): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - __pyx_tuple__53 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_compression_level, __pyx_n_s_gzip, __pyx_n_s_gzip_writer, __pyx_n_s_ue, __pyx_n_s_unicodedata, __pyx_n_s_norm_text, __pyx_n_s_codecs, __pyx_n_s_binary_data, __pyx_n_s_e); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__53); - __Pyx_GIVEREF(__pyx_tuple__53); - __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(3, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_gzip, 71, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__55 = PyTuple_Pack(1, ((PyObject *)__pyx_int_6)); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__55); - __Pyx_GIVEREF(__pyx_tuple__55); - - /* "lib/Naked/toolshed/c/file.pyx":96 - * # test_file_utf8_write_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write(self, text): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wt') as writer: - */ - __pyx_tuple__56 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_writer, __pyx_n_s_ue, __pyx_n_s_e); if (unlikely(!__pyx_tuple__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__56); - __Pyx_GIVEREF(__pyx_tuple__56); - __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__56, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_write, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":112 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas - * #------------------------------------------------------------------------------ - * def write_as(self, text, the_encoding=""): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - */ - __pyx_tuple__58 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_the_encoding, __pyx_n_s_codecs, __pyx_n_s_f, __pyx_n_s_e); if (unlikely(!__pyx_tuple__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__58); - __Pyx_GIVEREF(__pyx_tuple__58); - __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__58, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_write_as, 112, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__60 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_s__13)); if (unlikely(!__pyx_tuple__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__60); - __Pyx_GIVEREF(__pyx_tuple__60); - - /* "lib/Naked/toolshed/c/file.pyx":129 - * # Tests: test_IO.py :: test_file_bin_readwrite - * #------------------------------------------------------------------------------ - * def write_bin(self, binary_data): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wb') as bin_writer: - */ - __pyx_tuple__61 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_binary_data, __pyx_n_s_bin_writer, __pyx_n_s_e); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__61); - __Pyx_GIVEREF(__pyx_tuple__61); - __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_write_bin, 129, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":144 - * # Tests: test_IO.py :: test_file_ascii_safewrite, test_file_utf8_safewrite - * #------------------------------------------------------------------------------ - * def safe_write(self, text): # <<<<<<<<<<<<<< - * import os.path - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - */ - __pyx_tuple__63 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_os, __pyx_n_s_writer, __pyx_n_s_ue, __pyx_n_s_e); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__63); - __Pyx_GIVEREF(__pyx_tuple__63); - __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_safe_write, 144, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":166 - * # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - * #------------------------------------------------------------------------------ - * def safe_write_bin(self, file_data): # <<<<<<<<<<<<<< - * try: - * import os.path - */ - __pyx_tuple__65 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_file_data, __pyx_n_s_os, __pyx_n_s_writer, __pyx_n_s_e); if (unlikely(!__pyx_tuple__65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__65); - __Pyx_GIVEREF(__pyx_tuple__65); - __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_safe_write_bin, 166, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":188 - * # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - __pyx_tuple__67 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_text, __pyx_n_s_codecs, __pyx_n_s_f, __pyx_n_s_ioe, __pyx_n_s_unicodedata, __pyx_n_s_norm_text, __pyx_n_s_e); if (unlikely(!__pyx_tuple__67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__67); - __Pyx_GIVEREF(__pyx_tuple__67); - __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_write_utf8, 188, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":213 - * #------------------------------------------------------------------------------ - * class FileReader(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - __pyx_tuple__69 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_filepath); if (unlikely(!__pyx_tuple__69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__69); - __Pyx_GIVEREF(__pyx_tuple__69); - __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":222 - * # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_read_missing_file, - * #------------------------------------------------------------------------------ - * def read(self): # <<<<<<<<<<<<<< - * try: - * return self.read_utf8() #reads everything as unicode in utf8 encoding - */ - __pyx_tuple__71 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_e); if (unlikely(!__pyx_tuple__71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__71); - __Pyx_GIVEREF(__pyx_tuple__71); - __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_read, 222, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":236 - * # Tests: test_IO.py :: test_file_bin_readwrite, test_file_read_bin_missing_file - * #------------------------------------------------------------------------------ - * def read_bin(self): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'rb') as bin_reader: - */ - __pyx_tuple__73 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_bin_reader, __pyx_n_s_data, __pyx_n_s_e); if (unlikely(!__pyx_tuple__73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__73); - __Pyx_GIVEREF(__pyx_tuple__73); - __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_read_bin, 236, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":252 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas, test_file_readas_missing_file - * #------------------------------------------------------------------------------ - * def read_as(self, the_encoding): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": - */ - __pyx_tuple__75 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_the_encoding, __pyx_n_s_codecs, __pyx_n_s_f, __pyx_n_s_data, __pyx_n_s_e); if (unlikely(!__pyx_tuple__75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__75); - __Pyx_GIVEREF(__pyx_tuple__75); - __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_read_as, 252, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":271 - * # Tests: test_IO.py :: test_file_readlines, test_file_readlines_missing_file - * #------------------------------------------------------------------------------ - * def readlines(self): # <<<<<<<<<<<<<< - * try: - * return self.readlines_utf8() # read as utf8 encoded file - */ - __pyx_tuple__77 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_e); if (unlikely(!__pyx_tuple__77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__77); - __Pyx_GIVEREF(__pyx_tuple__77); - __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_readlines, 271, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":285 - * # Tests: test_IO.py :: - * #------------------------------------------------------------------------------ - * def readlines_as(self, dev_spec_encoding): # <<<<<<<<<<<<<< - * try: - * if dev_spec_encoding == "": - */ - __pyx_tuple__79 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_dev_spec_encoding, __pyx_n_s_codecs, __pyx_n_s_reader, __pyx_n_s_data_list, __pyx_n_s_line, __pyx_n_s_e); if (unlikely(!__pyx_tuple__79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__79); - __Pyx_GIVEREF(__pyx_tuple__79); - __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(2, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_readlines_as, 285, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":306 - * # Tests: test_IO.py :: test_file_readlines_unicode, test_file_readlines_utf8_missing_file - * #------------------------------------------------------------------------------ - * def readlines_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - __pyx_tuple__81 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_codecs, __pyx_n_s_uni_reader, __pyx_n_s_modified_text_list, __pyx_n_s_line, __pyx_n_s_unicodedata, __pyx_n_s_norm_line, __pyx_n_s_e); if (unlikely(!__pyx_tuple__81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__81); - __Pyx_GIVEREF(__pyx_tuple__81); - __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_readlines_utf8, 306, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/file.pyx":329 - * # test_file_read_gzip_missing_file - * #------------------------------------------------------------------------------ - * def read_gzip(self, encoding="system_default"): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - __pyx_tuple__83 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_encoding, __pyx_n_s_gzip, __pyx_n_s_gzip_reader, __pyx_n_s_file_data, __pyx_n_s_codecs, __pyx_n_s_unicodedata, __pyx_n_s_norm_data, __pyx_n_s_e); if (unlikely(!__pyx_tuple__83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__83); - __Pyx_GIVEREF(__pyx_tuple__83); - __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_read_gzip, 329, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__85 = PyTuple_Pack(1, ((PyObject*)__pyx_n_s_system_default)); if (unlikely(!__pyx_tuple__85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__85); - __Pyx_GIVEREF(__pyx_tuple__85); - - /* "lib/Naked/toolshed/c/file.pyx":355 - * # test_file_read_utf8_missing_file - * #------------------------------------------------------------------------------ - * def read_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - __pyx_tuple__86 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_codecs, __pyx_n_s_f, __pyx_n_s_ioe, __pyx_n_s_textstring, __pyx_n_s_unicodedata, __pyx_n_s_norm_text, __pyx_n_s_e); if (unlikely(!__pyx_tuple__86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__86); - __Pyx_GIVEREF(__pyx_tuple__86); - __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_read_utf8, 355, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initfile(void); /*proto*/ -PyMODINIT_FUNC initfile(void) -#else -PyMODINIT_FUNC PyInit_file(void); /*proto*/ -PyMODINIT_FUNC PyInit_file(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_file(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("file"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__file) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.file")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.file", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/file.pyx":5 - * # cython: profile=False - * - * import sys # <<<<<<<<<<<<<< - * from Naked.settings import debug as DEBUG_FLAG - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":6 - * - * import sys - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":12 - * # interface for all local file IO classes - * #------------------------------------------------------------------------------ - * class IO: # <<<<<<<<<<<<<< - * def __init__(self,filepath): - * self.filepath = filepath - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_IO, __pyx_n_s_IO, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_file, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/file.pyx":13 - * #------------------------------------------------------------------------------ - * class IO: - * def __init__(self,filepath): # <<<<<<<<<<<<<< - * self.filepath = filepath - * - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_2IO_1__init__, 0, __pyx_n_s_IO___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":12 - * # interface for all local file IO classes - * #------------------------------------------------------------------------------ - * class IO: # <<<<<<<<<<<<<< - * def __init__(self,filepath): - * self.filepath = filepath - */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_IO, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_IO, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":20 - * # writes data to local files - * #------------------------------------------------------------------------------ - * class FileWriter(IO): # <<<<<<<<<<<<<< - * def __init__(self, filepath): - * IO.__init__(self, filepath) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_IO); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_FileWriter, __pyx_n_s_FileWriter, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_file, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/file.pyx":21 - * #------------------------------------------------------------------------------ - * class FileWriter(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_1__init__, 0, __pyx_n_s_FileWriter___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":29 - * # Tests: test_IO.py:: test_file_ascii_readwrite_append, test_file_append_missingfile - * #------------------------------------------------------------------------------ - * def append(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_3append, 0, __pyx_n_s_FileWriter_append, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_append, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":48 - * # Tests: test_IO.py :: test_file_utf8_readwrite_append - * #------------------------------------------------------------------------------ - * def append_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.system import file_exists - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_5append_utf8, 0, __pyx_n_s_FileWriter_append_utf8, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_append_utf8, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":71 - * # test_file_gzip_utf8_readwrite_explicit_decode - * #------------------------------------------------------------------------------ - * def gzip(self, text, compression_level=6): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_7gzip, 0, __pyx_n_s_FileWriter_gzip, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__55); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_gzip, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":96 - * # test_file_utf8_write_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write(self, text): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wt') as writer: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_9write, 0, __pyx_n_s_FileWriter_write, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_write, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":112 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas - * #------------------------------------------------------------------------------ - * def write_as(self, text, the_encoding=""): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": #if the developer did not include the encoding type, raise an exception - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_11write_as, 0, __pyx_n_s_FileWriter_write_as, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__60); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_write_as, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":129 - * # Tests: test_IO.py :: test_file_bin_readwrite - * #------------------------------------------------------------------------------ - * def write_bin(self, binary_data): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'wb') as bin_writer: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_13write_bin, 0, __pyx_n_s_FileWriter_write_bin, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_write_bin, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":144 - * # Tests: test_IO.py :: test_file_ascii_safewrite, test_file_utf8_safewrite - * #------------------------------------------------------------------------------ - * def safe_write(self, text): # <<<<<<<<<<<<<< - * import os.path - * if not os.path.exists(self.filepath): # if the file does not exist, then can write - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_15safe_write, 0, __pyx_n_s_FileWriter_safe_write, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_safe_write, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":166 - * # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - * #------------------------------------------------------------------------------ - * def safe_write_bin(self, file_data): # <<<<<<<<<<<<<< - * try: - * import os.path - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_17safe_write_bin, 0, __pyx_n_s_FileWriter_safe_write_bin, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_safe_write_bin, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":188 - * # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_raises_unicodeerror - * #------------------------------------------------------------------------------ - * def write_utf8(self, text): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileWriter_19write_utf8, 0, __pyx_n_s_FileWriter_write_utf8, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__68)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_write_utf8, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":20 - * # writes data to local files - * #------------------------------------------------------------------------------ - * class FileWriter(IO): # <<<<<<<<<<<<<< - * def __init__(self, filepath): - * IO.__init__(self, filepath) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_FileWriter, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_FileWriter, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":212 - * # filename assigned in constructor (inherited from IO class interface) - * #------------------------------------------------------------------------------ - * class FileReader(IO): # <<<<<<<<<<<<<< - * def __init__(self, filepath): - * IO.__init__(self, filepath) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_IO); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_FileReader, __pyx_n_s_FileReader, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_file, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/file.pyx":213 - * #------------------------------------------------------------------------------ - * class FileReader(IO): - * def __init__(self, filepath): # <<<<<<<<<<<<<< - * IO.__init__(self, filepath) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_1__init__, 0, __pyx_n_s_FileReader___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":222 - * # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_read_missing_file, - * #------------------------------------------------------------------------------ - * def read(self): # <<<<<<<<<<<<<< - * try: - * return self.read_utf8() #reads everything as unicode in utf8 encoding - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_3read, 0, __pyx_n_s_FileReader_read, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_read, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":236 - * # Tests: test_IO.py :: test_file_bin_readwrite, test_file_read_bin_missing_file - * #------------------------------------------------------------------------------ - * def read_bin(self): # <<<<<<<<<<<<<< - * try: - * with open(self.filepath, 'rb') as bin_reader: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_5read_bin, 0, __pyx_n_s_FileReader_read_bin, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_read_bin, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":252 - * # Tests: test_IO.py :: test_file_utf8_readas_writeas, test_file_readas_missing_file - * #------------------------------------------------------------------------------ - * def read_as(self, the_encoding): # <<<<<<<<<<<<<< - * try: - * if the_encoding == "": - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_7read_as, 0, __pyx_n_s_FileReader_read_as, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_read_as, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":271 - * # Tests: test_IO.py :: test_file_readlines, test_file_readlines_missing_file - * #------------------------------------------------------------------------------ - * def readlines(self): # <<<<<<<<<<<<<< - * try: - * return self.readlines_utf8() # read as utf8 encoded file - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_9readlines, 0, __pyx_n_s_FileReader_readlines, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_readlines, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":285 - * # Tests: test_IO.py :: - * #------------------------------------------------------------------------------ - * def readlines_as(self, dev_spec_encoding): # <<<<<<<<<<<<<< - * try: - * if dev_spec_encoding == "": - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_11readlines_as, 0, __pyx_n_s_FileReader_readlines_as, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_readlines_as, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":306 - * # Tests: test_IO.py :: test_file_readlines_unicode, test_file_readlines_utf8_missing_file - * #------------------------------------------------------------------------------ - * def readlines_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_13readlines_utf8, 0, __pyx_n_s_FileReader_readlines_utf8, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_readlines_utf8, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":329 - * # test_file_read_gzip_missing_file - * #------------------------------------------------------------------------------ - * def read_gzip(self, encoding="system_default"): # <<<<<<<<<<<<<< - * try: - * import gzip - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_15read_gzip, 0, __pyx_n_s_FileReader_read_gzip, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__84)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__85); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_read_gzip, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":355 - * # test_file_read_utf8_missing_file - * #------------------------------------------------------------------------------ - * def read_utf8(self): # <<<<<<<<<<<<<< - * try: - * import codecs - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_4file_10FileReader_17read_utf8, 0, __pyx_n_s_FileReader_read_utf8, NULL, __pyx_n_s_lib_Naked_toolshed_c_file, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_read_utf8, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":212 - * # filename assigned in constructor (inherited from IO class interface) - * #------------------------------------------------------------------------------ - * class FileReader(IO): # <<<<<<<<<<<<<< - * def __init__(self, filepath): - * IO.__init__(self, filepath) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_FileReader, __pyx_t_2, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_FileReader, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/file.pyx":376 - * - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_5) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/file.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.file", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.file"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; -#else - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); -#endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/file.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/file.pyx deleted file mode 100644 index 545948f..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/file.pyx +++ /dev/null @@ -1,377 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -import sys -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [ IO class ] -# interface for all local file IO classes -#------------------------------------------------------------------------------ -class IO: - def __init__(self,filepath): - self.filepath = filepath - -#------------------------------------------------------------------------------ -# [ FileWriter class ] -# writes data to local files -#------------------------------------------------------------------------------ -class FileWriter(IO): - def __init__(self, filepath): - IO.__init__(self, filepath) - - #------------------------------------------------------------------------------ - # [ append method ] - # Universal text file writer that appends to existing file using system default text encoding or utf-8 if throws unicode error - # Tests: test_IO.py:: test_file_ascii_readwrite_append, test_file_append_missingfile - #------------------------------------------------------------------------------ - def append(self, text): - try: - from Naked.toolshed.system import file_exists - if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - with open(self.filepath, 'a') as appender: - appender.write(text) - except UnicodeEncodeError as ue: - self.append_utf8(text) #try writing as utf-8 - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ append_utf8 method ] - # Text writer that appends text to existing file with utf-8 encoding - # Tests: test_IO.py :: test_file_utf8_readwrite_append - #------------------------------------------------------------------------------ - def append_utf8(self, text): - try: - from Naked.toolshed.system import file_exists - if not file_exists(self.filepath): - raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") - import codecs - import unicodedata - norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: - appender.write(norm_text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ gzip method (writer) ] - # writes data to gzip compressed file - # Note: adds .gz extension to filename if user did not specify it in the FileWriter class constructor - # Note: uses compresslevel = 6 as default to balance speed and compression level (which in general is not significantly less than 9) - # Tests: test_IO.py :: test_file_gzip_ascii_readwrite, test_file_gzip_utf8_readwrite, - # test_file_gzip_utf8_readwrite_explicit_decode - #------------------------------------------------------------------------------ - def gzip(self, text, compression_level=6): - try: - import gzip - if not self.filepath.endswith(".gz"): - self.filepath = self.filepath + ".gz" - with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - gzip_writer.write(text) - except UnicodeEncodeError as ue: - import unicodedata - norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - import codecs - binary_data = codecs.encode(norm_text, "utf_8") - with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - gzip_writer.write(binary_data) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ write method ] - # Universal text file writer that writes by system default or utf-8 encoded unicode if throws UnicdeEncodeError - # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_ascii_readwrite_missing_file, - # test_file_utf8_write_raises_unicodeerror - #------------------------------------------------------------------------------ - def write(self, text): - try: - with open(self.filepath, 'wt') as writer: - writer.write(text) - except UnicodeEncodeError as ue: - self.write_utf8(text) # attempt to write with utf-8 encoding - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ write_as method ] - # text file writer that uses developer specified text encoding - # Tests: test_IO.py :: test_file_utf8_readas_writeas - #------------------------------------------------------------------------------ - def write_as(self, text, the_encoding=""): - try: - if the_encoding == "": #if the developer did not include the encoding type, raise an exception - raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - import codecs - with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - f.write(text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ write_bin method ] - # binary data file writer - # Tests: test_IO.py :: test_file_bin_readwrite - #------------------------------------------------------------------------------ - def write_bin(self, binary_data): - try: - with open(self.filepath, 'wb') as bin_writer: - bin_writer.write(binary_data) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ safe_write method ] (boolean) - # Universal text file writer (writes in default encoding unless throws unicode error) that will NOT overwrite existing file at the requested filepath - # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - # Tests: test_IO.py :: test_file_ascii_safewrite, test_file_utf8_safewrite - #------------------------------------------------------------------------------ - def safe_write(self, text): - import os.path - if not os.path.exists(self.filepath): # if the file does not exist, then can write - try: - with open(self.filepath, 'wt') as writer: - writer.write(text) - return True - except UnicodeEncodeError as ue: - self.write_utf8(text) - return True - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") - raise e - else: - return False # if file exists, do not write and return False - - #------------------------------------------------------------------------------ - # [ safe_write_bin method ] - # Binary data file writer that will NOT overwrite existing file at the requested filepath - # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - #------------------------------------------------------------------------------ - def safe_write_bin(self, file_data): - try: - import os.path - if not os.path.exists(self.filepath): - with open(self.filepath, 'wb') as writer: - writer.write(file_data) - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") - raise e - - - #------------------------------------------------------------------------------ - # [ write_utf8 method ] - # Text file writer with explicit UTF-8 text encoding - # uses filepath from class constructor - # requires text to passed as a method parameter - # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_raises_unicodeerror - #------------------------------------------------------------------------------ - def write_utf8(self, text): - try: - import codecs - f = codecs.open(self.filepath, encoding='utf_8', mode='w') - except IOError as ioe: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") - raise ioe - try: - import unicodedata - norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - f.write(norm_text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") - raise e - finally: - f.close() - -#------------------------------------------------------------------------------ -# [ FileReader class ] -# reads data from local files -# filename assigned in constructor (inherited from IO class interface) -#------------------------------------------------------------------------------ -class FileReader(IO): - def __init__(self, filepath): - IO.__init__(self, filepath) - - #------------------------------------------------------------------------------ - # [ read method ] (string) - # Universal text file reader that will read utf-8 encoded unicode or non-unicode text as utf-8 - # returns string or unicode (py3 = string for unicode and non-unicode, py2 = str for non-unicode, unicode for unicode) - # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_read_missing_file, - #------------------------------------------------------------------------------ - def read(self): - try: - return self.read_utf8() #reads everything as unicode in utf8 encoding - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ read_bin method ] (binary byte string) - # Universal binary data file reader - # returns file contents in binary mode as binary byte strings - # Tests: test_IO.py :: test_file_bin_readwrite, test_file_read_bin_missing_file - #------------------------------------------------------------------------------ - def read_bin(self): - try: - with open(self.filepath, 'rb') as bin_reader: - data = bin_reader.read() - return data - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ read_as method ] (string with developer specified text encoding) - # Text file reader with developer specified text encoding - # returns file contents in developer specified text encoding - # Tests: test_IO.py :: test_file_utf8_readas_writeas, test_file_readas_missing_file - #------------------------------------------------------------------------------ - def read_as(self, the_encoding): - try: - if the_encoding == "": - raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - import codecs - with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - data = f.read() - return data - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ readlines method ] (list of strings) - # Read text from file line by line, uses utf8 encoding by default - # returns list of utf8 encoded file lines as strings - # Tests: test_IO.py :: test_file_readlines, test_file_readlines_missing_file - #------------------------------------------------------------------------------ - def readlines(self): - try: - return self.readlines_utf8() # read as utf8 encoded file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ readlines_as method ] (list of developer specified encoded strings) - # Read lines from file with developer specified text encoding - # Returns a list of developer specified encoded lines from the file - # Tests: test_IO.py :: - #------------------------------------------------------------------------------ - def readlines_as(self, dev_spec_encoding): - try: - if dev_spec_encoding == "": - raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - import codecs - with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - data_list = [] - for line in reader: - data_list.append(line) - return data_list - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ readlines_utf8 method ] (list of utf-8 encoded strings) - # Read text from unicode file by line - # Returns list of file unicode text lines as unicode strings - # Tests: test_IO.py :: test_file_readlines_unicode, test_file_readlines_utf8_missing_file - #------------------------------------------------------------------------------ - def readlines_utf8(self): - try: - import codecs - with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: - modified_text_list = [] - for line in uni_reader: - import unicodedata - norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use - modified_text_list.append(norm_line) - return modified_text_list - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") - raise e - - #------------------------------------------------------------------------------ - # [ read_gzip ] (byte string) - # reads data from a gzip compressed file - # returns the decompressed binary data from the file - # Note: if decompressing unicode file, set encoding="utf-8" - # Tests: test_IO.py :: test_file_gzip_ascii_readwrite, test_file_gzip_utf8_readwrite, - # test_file_read_gzip_missing_file - #------------------------------------------------------------------------------ - def read_gzip(self, encoding="system_default"): - try: - import gzip - with gzip.open(self.filepath, 'rb') as gzip_reader: - file_data = gzip_reader.read() - if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - import codecs - file_data = codecs.decode(file_data, "utf-8") - import unicodedata - norm_data = unicodedata.normalize('NFKD', file_data) # NKFD normalization of the unicode data before passing back to the caller - return norm_data - else: - return file_data - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ read_utf8 method ] (string) - # read data from a file with explicit UTF-8 encoding - # uses filepath from class constructor - # returns a unicode string containing the file data (unicode in py2, str in py3) - # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_append, - # test_file_read_utf8_missing_file - #------------------------------------------------------------------------------ - def read_utf8(self): - try: - import codecs - f = codecs.open(self.filepath, encoding='utf_8', mode='r') - except IOError as ioe: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") - raise ioe - try: - textstring = f.read() - import unicodedata - norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns - return norm_text - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") - raise e - finally: - f.close() - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.c deleted file mode 100644 index e34bfc1..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.c +++ /dev/null @@ -1,4232 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:14 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__ink -#define __PYX_HAVE_API__lib__Naked__toolshed__c__ink -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "ink.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if PY_VERSION_HEX < 0x02050000 -#ifndef PyAnySet_CheckExact -#define PyAnySet_CheckExact(ob) \ - ((ob)->ob_type == &PySet_Type || \ - (ob)->ob_type == &PyFrozenSet_Type) -#define PySet_New(iterable) \ - PyObject_CallFunctionObjArgs((PyObject *)&PySet_Type, (iterable), NULL) -#define Pyx_PyFrozenSet_New(iterable) \ - PyObject_CallFunctionObjArgs((PyObject *)&PyFrozenSet_Type, (iterable), NULL) -#define PySet_Size(anyset) \ - PyObject_Size((anyset)) -#define PySet_Contains(anyset, key) \ - PySequence_Contains((anyset), (key)) -#define PySet_Pop(set) \ - PyObject_CallMethod((set), (char*)"pop", NULL) -static CYTHON_INLINE int PySet_Clear(PyObject *set) { - PyObject *ret = PyObject_CallMethod(set, (char*)"clear", NULL); - if (!ret) return -1; - Py_DECREF(ret); return 0; -} -static CYTHON_INLINE int PySet_Discard(PyObject *set, PyObject *key) { - PyObject *ret = PyObject_CallMethod(set, (char*)"discard", (char*)"(O)", key); - if (!ret) return -1; - Py_DECREF(ret); return 0; -} -static CYTHON_INLINE int PySet_Add(PyObject *set, PyObject *key) { - PyObject *ret = PyObject_CallMethod(set, (char*)"add", (char*)"(O)", key); - if (!ret) return -1; - Py_DECREF(ret); return 0; -} -#endif /* PyAnySet_CheckExact (<= Py2.4) */ -#endif /* < Py2.5 */ - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.ink' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.ink" -int __pyx_module_is_main_lib__Naked__toolshed__c__ink = 0; - -/* Implementation of 'lib.Naked.toolshed.c.ink' */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_template_text, PyObject *__pyx_v_open_delimiter, PyObject *__pyx_v_close_delimiter, PyObject *__pyx_v_escape_regex); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template_2_make_var_list(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_template_text, PyObject *__pyx_v_escape_regex); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template_4_escape_regex_special_chars(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_test_escape_string); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Renderer___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_template, PyObject *__pyx_v_key, PyObject *__pyx_v_html_entities); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Renderer_2render(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static char __pyx_k_[] = "{{"; -static char __pyx_k__2[] = "}}"; -static char __pyx_k__3[] = "(.*?)"; -static char __pyx_k_re[] = "re"; -static char __pyx_k_cls[] = "cls"; -static char __pyx_k_doc[] = "__doc__"; -static char __pyx_k_key[] = "key"; -static char __pyx_k_new[] = "__new__"; -static char __pyx_k_obj[] = "obj"; -static char __pyx_k_cdel[] = "cdel"; -static char __pyx_k_init[] = "__init__"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_odel[] = "odel"; -static char __pyx_k_self[] = "self"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_value[] = "value"; -static char __pyx_k_escape[] = "escape"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_module[] = "__module__"; -static char __pyx_k_render[] = "render"; -static char __pyx_k_findall[] = "findall"; -static char __pyx_k_prepare[] = "__prepare__"; -static char __pyx_k_replace[] = "replace"; -static char __pyx_k_varlist[] = "varlist"; -static char __pyx_k_Renderer[] = "Renderer"; -static char __pyx_k_Template[] = "Template"; -static char __pyx_k_key_dict[] = "key_dict"; -static char __pyx_k_qualname[] = "__qualname__"; -static char __pyx_k_template[] = "template"; -static char __pyx_k_var_list[] = "var_list"; -static char __pyx_k_match_pat[] = "match_pat"; -static char __pyx_k_metaclass[] = "__metaclass__"; -static char __pyx_k_local_cdel[] = "local_cdel"; -static char __pyx_k_local_dict[] = "local_dict"; -static char __pyx_k_local_odel[] = "local_odel"; -static char __pyx_k_escape_regex[] = "escape_regex"; -static char __pyx_k_html_entities[] = "html_entities"; -static char __pyx_k_local_htmlent[] = "local_htmlent"; -static char __pyx_k_local_varlist[] = "local_varlist"; -static char __pyx_k_make_var_list[] = "_make_var_list"; -static char __pyx_k_template_text[] = "template_text"; -static char __pyx_k_Template___new[] = "Template.__new__"; -static char __pyx_k_local_template[] = "local_template"; -static char __pyx_k_open_delimiter[] = "open_delimiter"; -static char __pyx_k_open_match_pat[] = "open_match_pat"; -static char __pyx_k_replace_string[] = "replace_string"; -static char __pyx_k_Renderer___init[] = "Renderer.__init__"; -static char __pyx_k_Renderer_render[] = "Renderer.render"; -static char __pyx_k_close_delimiter[] = "close_delimiter"; -static char __pyx_k_close_match_pat[] = "close_match_pat"; -static char __pyx_k_xml_sax_saxutils[] = "xml.sax.saxutils"; -static char __pyx_k_test_escape_string[] = "test_escape_string"; -static char __pyx_k_Template__make_var_list[] = "Template._make_var_list"; -static char __pyx_k_lib_Naked_toolshed_c_ink[] = "lib.Naked.toolshed.c.ink"; -static char __pyx_k_escape_regex_special_chars[] = "_escape_regex_special_chars"; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/ink.pyx"; -static char __pyx_k_Template__escape_regex_special_c[] = "Template._escape_regex_special_chars"; -static PyObject *__pyx_kp_s_; -static PyObject *__pyx_n_s_Renderer; -static PyObject *__pyx_n_s_Renderer___init; -static PyObject *__pyx_n_s_Renderer_render; -static PyObject *__pyx_n_s_Template; -static PyObject *__pyx_n_s_Template___new; -static PyObject *__pyx_n_s_Template__escape_regex_special_c; -static PyObject *__pyx_n_s_Template__make_var_list; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_kp_s__2; -static PyObject *__pyx_kp_s__3; -static PyObject *__pyx_n_s_cdel; -static PyObject *__pyx_n_s_close_delimiter; -static PyObject *__pyx_n_s_close_match_pat; -static PyObject *__pyx_n_s_cls; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_escape; -static PyObject *__pyx_n_s_escape_regex; -static PyObject *__pyx_n_s_escape_regex_special_chars; -static PyObject *__pyx_n_s_findall; -static PyObject *__pyx_n_s_html_entities; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_key; -static PyObject *__pyx_n_s_key_dict; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_ink; -static PyObject *__pyx_n_s_local_cdel; -static PyObject *__pyx_n_s_local_dict; -static PyObject *__pyx_n_s_local_htmlent; -static PyObject *__pyx_n_s_local_odel; -static PyObject *__pyx_n_s_local_template; -static PyObject *__pyx_n_s_local_varlist; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_make_var_list; -static PyObject *__pyx_n_s_match_pat; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_obj; -static PyObject *__pyx_n_s_odel; -static PyObject *__pyx_n_s_open_delimiter; -static PyObject *__pyx_n_s_open_match_pat; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_re; -static PyObject *__pyx_n_s_render; -static PyObject *__pyx_n_s_replace; -static PyObject *__pyx_n_s_replace_string; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_template; -static PyObject *__pyx_n_s_template_text; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_test_escape_string; -static PyObject *__pyx_n_s_value; -static PyObject *__pyx_n_s_var_list; -static PyObject *__pyx_n_s_varlist; -static PyObject *__pyx_n_s_xml_sax_saxutils; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_codeobj__5; -static PyObject *__pyx_codeobj__8; -static PyObject *__pyx_codeobj__11; -static PyObject *__pyx_codeobj__13; -static PyObject *__pyx_codeobj__16; - -/* "lib/Naked/toolshed/c/ink.pyx":26 - * #------------------------------------------------------------------------------ - * class Template(str): - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): # <<<<<<<<<<<<<< - * obj = str.__new__(cls, template_text) - * obj.odel = open_delimiter - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Template_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cls = 0; - PyObject *__pyx_v_template_text = 0; - PyObject *__pyx_v_open_delimiter = 0; - PyObject *__pyx_v_close_delimiter = 0; - PyObject *__pyx_v_escape_regex = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_template_text,&__pyx_n_s_open_delimiter,&__pyx_n_s_close_delimiter,&__pyx_n_s_escape_regex,0}; - PyObject* values[5] = {0,0,0,0,0}; - values[2] = ((PyObject *)((PyObject*)__pyx_kp_s_)); - values[3] = ((PyObject *)((PyObject*)__pyx_kp_s__2)); - values[4] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_template_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_open_delimiter); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_close_delimiter); - if (value) { values[3] = value; kw_args--; } - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_escape_regex); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_cls = values[0]; - __pyx_v_template_text = values[1]; - __pyx_v_open_delimiter = values[2]; - __pyx_v_close_delimiter = values[3]; - __pyx_v_escape_regex = values[4]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Template.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template___new__(__pyx_self, __pyx_v_cls, __pyx_v_template_text, __pyx_v_open_delimiter, __pyx_v_close_delimiter, __pyx_v_escape_regex); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_template_text, PyObject *__pyx_v_open_delimiter, PyObject *__pyx_v_close_delimiter, PyObject *__pyx_v_escape_regex) { - PyObject *__pyx_v_obj = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__new__", 0); - - /* "lib/Naked/toolshed/c/ink.pyx":27 - * class Template(str): - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): - * obj = str.__new__(cls, template_text) # <<<<<<<<<<<<<< - * obj.odel = open_delimiter - * obj.cdel = close_delimiter - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cls); - __Pyx_GIVEREF(__pyx_v_cls); - __Pyx_INCREF(__pyx_v_template_text); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_template_text); - __Pyx_GIVEREF(__pyx_v_template_text); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":28 - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): - * obj = str.__new__(cls, template_text) - * obj.odel = open_delimiter # <<<<<<<<<<<<<< - * obj.cdel = close_delimiter - * obj.varlist = obj._make_var_list(template_text, escape_regex) #contains all unique parsed variables from the template in a list - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_obj, __pyx_n_s_odel, __pyx_v_open_delimiter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/ink.pyx":29 - * obj = str.__new__(cls, template_text) - * obj.odel = open_delimiter - * obj.cdel = close_delimiter # <<<<<<<<<<<<<< - * obj.varlist = obj._make_var_list(template_text, escape_regex) #contains all unique parsed variables from the template in a list - * return obj - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_obj, __pyx_n_s_cdel, __pyx_v_close_delimiter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/ink.pyx":30 - * obj.odel = open_delimiter - * obj.cdel = close_delimiter - * obj.varlist = obj._make_var_list(template_text, escape_regex) #contains all unique parsed variables from the template in a list # <<<<<<<<<<<<<< - * return obj - * - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_make_var_list); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_template_text); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_template_text); - __Pyx_GIVEREF(__pyx_v_template_text); - __Pyx_INCREF(__pyx_v_escape_regex); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_escape_regex); - __Pyx_GIVEREF(__pyx_v_escape_regex); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_obj, __pyx_n_s_varlist, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":31 - * obj.cdel = close_delimiter - * obj.varlist = obj._make_var_list(template_text, escape_regex) #contains all unique parsed variables from the template in a list - * return obj # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_obj); - __pyx_r = __pyx_v_obj; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/ink.pyx":26 - * #------------------------------------------------------------------------------ - * class Template(str): - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): # <<<<<<<<<<<<<< - * obj = str.__new__(cls, template_text) - * obj.odel = open_delimiter - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Template.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_obj); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/ink.pyx":38 - * # Returns a list of the variable names as strings - * #------------------------------------------------------------------------------ - * def _make_var_list(self, template_text, escape_regex=False): # <<<<<<<<<<<<<< - * if escape_regex: - * open_match_pat = self._escape_regex_special_chars(self.odel) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_3_make_var_list(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Template_3_make_var_list = {__Pyx_NAMESTR("_make_var_list"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_3_make_var_list, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_3_make_var_list(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_template_text = 0; - PyObject *__pyx_v_escape_regex = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_make_var_list (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_template_text,&__pyx_n_s_escape_regex,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_template_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_make_var_list", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_escape_regex); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_make_var_list") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_template_text = values[1]; - __pyx_v_escape_regex = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_make_var_list", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Template._make_var_list", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template_2_make_var_list(__pyx_self, __pyx_v_self, __pyx_v_template_text, __pyx_v_escape_regex); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template_2_make_var_list(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_template_text, PyObject *__pyx_v_escape_regex) { - PyObject *__pyx_v_open_match_pat = NULL; - PyObject *__pyx_v_close_match_pat = NULL; - PyObject *__pyx_v_match_pat = NULL; - PyObject *__pyx_v_var_list = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_make_var_list", 0); - - /* "lib/Naked/toolshed/c/ink.pyx":39 - * #------------------------------------------------------------------------------ - * def _make_var_list(self, template_text, escape_regex=False): - * if escape_regex: # <<<<<<<<<<<<<< - * open_match_pat = self._escape_regex_special_chars(self.odel) - * close_match_pat = self._escape_regex_special_chars(self.cdel) - */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_escape_regex); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { - - /* "lib/Naked/toolshed/c/ink.pyx":40 - * def _make_var_list(self, template_text, escape_regex=False): - * if escape_regex: - * open_match_pat = self._escape_regex_special_chars(self.odel) # <<<<<<<<<<<<<< - * close_match_pat = self._escape_regex_special_chars(self.cdel) - * match_pat = open_match_pat + r'(.*?)' + close_match_pat # capture group contains the variable name used between the opening and closing delimiters - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_escape_regex_special_chars); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_odel); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_open_match_pat = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":41 - * if escape_regex: - * open_match_pat = self._escape_regex_special_chars(self.odel) - * close_match_pat = self._escape_regex_special_chars(self.cdel) # <<<<<<<<<<<<<< - * match_pat = open_match_pat + r'(.*?)' + close_match_pat # capture group contains the variable name used between the opening and closing delimiters - * else: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_escape_regex_special_chars); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cdel); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_close_match_pat = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":42 - * open_match_pat = self._escape_regex_special_chars(self.odel) - * close_match_pat = self._escape_regex_special_chars(self.cdel) - * match_pat = open_match_pat + r'(.*?)' + close_match_pat # capture group contains the variable name used between the opening and closing delimiters # <<<<<<<<<<<<<< - * else: - * match_pat = self.odel + r'(.*?)' + self.cdel - */ - __pyx_t_4 = PyNumber_Add(__pyx_v_open_match_pat, __pyx_kp_s__3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = PyNumber_Add(__pyx_t_4, __pyx_v_close_match_pat); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_match_pat = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L3; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/ink.pyx":44 - * match_pat = open_match_pat + r'(.*?)' + close_match_pat # capture group contains the variable name used between the opening and closing delimiters - * else: - * match_pat = self.odel + r'(.*?)' + self.cdel # <<<<<<<<<<<<<< - * var_list = re.findall(match_pat, template_text) #generate a list that contains the capture group from the matches (i.e. the variables in the template) - * return set(var_list) # remove duplicate entries by converting to set (and lookup speed improvement from hashing) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_odel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_kp_s__3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cdel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_match_pat = __pyx_t_3; - __pyx_t_3 = 0; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/ink.pyx":45 - * else: - * match_pat = self.odel + r'(.*?)' + self.cdel - * var_list = re.findall(match_pat, template_text) #generate a list that contains the capture group from the matches (i.e. the variables in the template) # <<<<<<<<<<<<<< - * return set(var_list) # remove duplicate entries by converting to set (and lookup speed improvement from hashing) - * - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_findall); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_match_pat); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_match_pat); - __Pyx_GIVEREF(__pyx_v_match_pat); - __Pyx_INCREF(__pyx_v_template_text); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_template_text); - __Pyx_GIVEREF(__pyx_v_template_text); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_var_list = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":46 - * match_pat = self.odel + r'(.*?)' + self.cdel - * var_list = re.findall(match_pat, template_text) #generate a list that contains the capture group from the matches (i.e. the variables in the template) - * return set(var_list) # remove duplicate entries by converting to set (and lookup speed improvement from hashing) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_var_list); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_var_list); - __Pyx_GIVEREF(__pyx_v_var_list); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/ink.pyx":38 - * # Returns a list of the variable names as strings - * #------------------------------------------------------------------------------ - * def _make_var_list(self, template_text, escape_regex=False): # <<<<<<<<<<<<<< - * if escape_regex: - * open_match_pat = self._escape_regex_special_chars(self.odel) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Template._make_var_list", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_open_match_pat); - __Pyx_XDECREF(__pyx_v_close_match_pat); - __Pyx_XDECREF(__pyx_v_match_pat); - __Pyx_XDECREF(__pyx_v_var_list); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/ink.pyx":53 - * # Returns a string with the escaped character modifications - * #------------------------------------------------------------------------------ - * def _escape_regex_special_chars(self, test_escape_string): # <<<<<<<<<<<<<< - * return re.escape(test_escape_string) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_5_escape_regex_special_chars(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Template_5_escape_regex_special_chars = {__Pyx_NAMESTR("_escape_regex_special_chars"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_5_escape_regex_special_chars, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Template_5_escape_regex_special_chars(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - CYTHON_UNUSED PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_test_escape_string = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_escape_regex_special_chars (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_test_escape_string,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_test_escape_string)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_escape_regex_special_chars", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_escape_regex_special_chars") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_test_escape_string = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_escape_regex_special_chars", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Template._escape_regex_special_chars", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template_4_escape_regex_special_chars(__pyx_self, __pyx_v_self, __pyx_v_test_escape_string); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Template_4_escape_regex_special_chars(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_test_escape_string) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_escape_regex_special_chars", 0); - - /* "lib/Naked/toolshed/c/ink.pyx":54 - * #------------------------------------------------------------------------------ - * def _escape_regex_special_chars(self, test_escape_string): - * return re.escape(test_escape_string) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_re); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_escape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_test_escape_string); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_test_escape_string); - __Pyx_GIVEREF(__pyx_v_test_escape_string); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/ink.pyx":53 - * # Returns a string with the escaped character modifications - * #------------------------------------------------------------------------------ - * def _escape_regex_special_chars(self, test_escape_string): # <<<<<<<<<<<<<< - * return re.escape(test_escape_string) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Template._escape_regex_special_chars", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/ink.pyx":68 - * - * class Renderer: - * def __init__(self, template, key, html_entities=False): # <<<<<<<<<<<<<< - * self.odel = template.odel - * self.cdel = template.cdel - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Renderer_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Renderer_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Renderer_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Renderer_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_template = 0; - PyObject *__pyx_v_key = 0; - PyObject *__pyx_v_html_entities = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_template,&__pyx_n_s_key,&__pyx_n_s_html_entities,0}; - PyObject* values[4] = {0,0,0,0}; - values[3] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_template)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_html_entities); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_template = values[1]; - __pyx_v_key = values[2]; - __pyx_v_html_entities = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Renderer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Renderer___init__(__pyx_self, __pyx_v_self, __pyx_v_template, __pyx_v_key, __pyx_v_html_entities); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Renderer___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_template, PyObject *__pyx_v_key, PyObject *__pyx_v_html_entities) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/ink.pyx":69 - * class Renderer: - * def __init__(self, template, key, html_entities=False): - * self.odel = template.odel # <<<<<<<<<<<<<< - * self.cdel = template.cdel - * self.template = template - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_template, __pyx_n_s_odel); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_odel, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":70 - * def __init__(self, template, key, html_entities=False): - * self.odel = template.odel - * self.cdel = template.cdel # <<<<<<<<<<<<<< - * self.template = template - * self.html_entities = html_entities - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_template, __pyx_n_s_cdel); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cdel, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":71 - * self.odel = template.odel - * self.cdel = template.cdel - * self.template = template # <<<<<<<<<<<<<< - * self.html_entities = html_entities - * self.key_dict = key - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_template, __pyx_v_template) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/ink.pyx":72 - * self.cdel = template.cdel - * self.template = template - * self.html_entities = html_entities # <<<<<<<<<<<<<< - * self.key_dict = key - * - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_html_entities, __pyx_v_html_entities) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/ink.pyx":73 - * self.template = template - * self.html_entities = html_entities - * self.key_dict = key # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_key_dict, __pyx_v_key) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/ink.pyx":68 - * - * class Renderer: - * def __init__(self, template, key, html_entities=False): # <<<<<<<<<<<<<< - * self.odel = template.odel - * self.cdel = template.cdel - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Renderer.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/ink.pyx":80 - * # returns the rendered template as a string - * #------------------------------------------------------------------------------ - * def render(self): # <<<<<<<<<<<<<< - * # make local variables for the loop below (faster) - * local_dict = self.key_dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Renderer_3render(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Renderer_3render = {__Pyx_NAMESTR("render"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Renderer_3render, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_3ink_8Renderer_3render(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("render (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Renderer_2render(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_3ink_8Renderer_2render(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_local_dict = NULL; - PyObject *__pyx_v_local_template = NULL; - PyObject *__pyx_v_local_varlist = NULL; - PyObject *__pyx_v_local_odel = NULL; - PyObject *__pyx_v_local_cdel = NULL; - PyObject *__pyx_v_local_htmlent = NULL; - PyObject *__pyx_v_escape = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_value = NULL; - PyObject *__pyx_v_replace_string = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("render", 0); - - /* "lib/Naked/toolshed/c/ink.pyx":82 - * def render(self): - * # make local variables for the loop below (faster) - * local_dict = self.key_dict # <<<<<<<<<<<<<< - * local_template = self.template - * local_varlist = self.template.varlist - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_key_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_local_dict = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":83 - * # make local variables for the loop below (faster) - * local_dict = self.key_dict - * local_template = self.template # <<<<<<<<<<<<<< - * local_varlist = self.template.varlist - * local_odel = self.odel - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_template); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_local_template = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":84 - * local_dict = self.key_dict - * local_template = self.template - * local_varlist = self.template.varlist # <<<<<<<<<<<<<< - * local_odel = self.odel - * local_cdel = self.cdel - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_template); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_varlist); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_local_varlist = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":85 - * local_template = self.template - * local_varlist = self.template.varlist - * local_odel = self.odel # <<<<<<<<<<<<<< - * local_cdel = self.cdel - * local_htmlent = self.html_entities - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_odel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_local_odel = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":86 - * local_varlist = self.template.varlist - * local_odel = self.odel - * local_cdel = self.cdel # <<<<<<<<<<<<<< - * local_htmlent = self.html_entities - * if local_htmlent: - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cdel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_local_cdel = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":87 - * local_odel = self.odel - * local_cdel = self.cdel - * local_htmlent = self.html_entities # <<<<<<<<<<<<<< - * if local_htmlent: - * from xml.sax.saxutils import escape #from Python std lib - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_html_entities); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_local_htmlent = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":88 - * local_cdel = self.cdel - * local_htmlent = self.html_entities - * if local_htmlent: # <<<<<<<<<<<<<< - * from xml.sax.saxutils import escape #from Python std lib - * for key in local_dict: - */ - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_local_htmlent); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_3) { - - /* "lib/Naked/toolshed/c/ink.pyx":89 - * local_htmlent = self.html_entities - * if local_htmlent: - * from xml.sax.saxutils import escape #from Python std lib # <<<<<<<<<<<<<< - * for key in local_dict: - * if key in local_varlist: - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_escape); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_escape); - __Pyx_GIVEREF(__pyx_n_s_escape); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_xml_sax_saxutils, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_escape); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v_escape = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/ink.pyx":90 - * if local_htmlent: - * from xml.sax.saxutils import escape #from Python std lib - * for key in local_dict: # <<<<<<<<<<<<<< - * if key in local_varlist: - * value = local_dict[key] - */ - if (PyList_CheckExact(__pyx_v_local_dict) || PyTuple_CheckExact(__pyx_v_local_dict)) { - __pyx_t_1 = __pyx_v_local_dict; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_local_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":91 - * from xml.sax.saxutils import escape #from Python std lib - * for key in local_dict: - * if key in local_varlist: # <<<<<<<<<<<<<< - * value = local_dict[key] - * replace_string = local_odel + key + local_cdel - */ - __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_v_key, __pyx_v_local_varlist, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_6 = (__pyx_t_3 != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/ink.pyx":92 - * for key in local_dict: - * if key in local_varlist: - * value = local_dict[key] # <<<<<<<<<<<<<< - * replace_string = local_odel + key + local_cdel - * if local_htmlent: - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_local_dict, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":93 - * if key in local_varlist: - * value = local_dict[key] - * replace_string = local_odel + key + local_cdel # <<<<<<<<<<<<<< - * if local_htmlent: - * value = escape(value) #xml.sax.saxutils function - */ - __pyx_t_2 = PyNumber_Add(__pyx_v_local_odel, __pyx_v_key); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_v_local_cdel); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF_SET(__pyx_v_replace_string, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":94 - * value = local_dict[key] - * replace_string = local_odel + key + local_cdel - * if local_htmlent: # <<<<<<<<<<<<<< - * value = escape(value) #xml.sax.saxutils function - * local_template = local_template.replace(replace_string, value) - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_local_htmlent); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/ink.pyx":95 - * replace_string = local_odel + key + local_cdel - * if local_htmlent: - * value = escape(value) #xml.sax.saxutils function # <<<<<<<<<<<<<< - * local_template = local_template.replace(replace_string, value) - * return local_template - */ - if (unlikely(!__pyx_v_escape)) { __Pyx_RaiseUnboundLocalError("escape"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_escape, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_2); - __pyx_t_2 = 0; - goto __pyx_L7; - } - __pyx_L7:; - - /* "lib/Naked/toolshed/c/ink.pyx":96 - * if local_htmlent: - * value = escape(value) #xml.sax.saxutils function - * local_template = local_template.replace(replace_string, value) # <<<<<<<<<<<<<< - * return local_template - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_local_template, __pyx_n_s_replace); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_replace_string); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_replace_string); - __Pyx_GIVEREF(__pyx_v_replace_string); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF_SET(__pyx_v_local_template, __pyx_t_8); - __pyx_t_8 = 0; - goto __pyx_L6; - } - __pyx_L6:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":97 - * value = escape(value) #xml.sax.saxutils function - * local_template = local_template.replace(replace_string, value) - * return local_template # <<<<<<<<<<<<<< - * - * ##TODO : multiple file render method? - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_local_template); - __pyx_r = __pyx_v_local_template; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/ink.pyx":80 - * # returns the rendered template as a string - * #------------------------------------------------------------------------------ - * def render(self): # <<<<<<<<<<<<<< - * # make local variables for the loop below (faster) - * local_dict = self.key_dict - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.ink.Renderer.render", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_local_dict); - __Pyx_XDECREF(__pyx_v_local_template); - __Pyx_XDECREF(__pyx_v_local_varlist); - __Pyx_XDECREF(__pyx_v_local_odel); - __Pyx_XDECREF(__pyx_v_local_cdel); - __Pyx_XDECREF(__pyx_v_local_htmlent); - __Pyx_XDECREF(__pyx_v_escape); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_value); - __Pyx_XDECREF(__pyx_v_replace_string); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("ink"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, - {&__pyx_n_s_Renderer, __pyx_k_Renderer, sizeof(__pyx_k_Renderer), 0, 0, 1, 1}, - {&__pyx_n_s_Renderer___init, __pyx_k_Renderer___init, sizeof(__pyx_k_Renderer___init), 0, 0, 1, 1}, - {&__pyx_n_s_Renderer_render, __pyx_k_Renderer_render, sizeof(__pyx_k_Renderer_render), 0, 0, 1, 1}, - {&__pyx_n_s_Template, __pyx_k_Template, sizeof(__pyx_k_Template), 0, 0, 1, 1}, - {&__pyx_n_s_Template___new, __pyx_k_Template___new, sizeof(__pyx_k_Template___new), 0, 0, 1, 1}, - {&__pyx_n_s_Template__escape_regex_special_c, __pyx_k_Template__escape_regex_special_c, sizeof(__pyx_k_Template__escape_regex_special_c), 0, 0, 1, 1}, - {&__pyx_n_s_Template__make_var_list, __pyx_k_Template__make_var_list, sizeof(__pyx_k_Template__make_var_list), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, - {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0}, - {&__pyx_n_s_cdel, __pyx_k_cdel, sizeof(__pyx_k_cdel), 0, 0, 1, 1}, - {&__pyx_n_s_close_delimiter, __pyx_k_close_delimiter, sizeof(__pyx_k_close_delimiter), 0, 0, 1, 1}, - {&__pyx_n_s_close_match_pat, __pyx_k_close_match_pat, sizeof(__pyx_k_close_match_pat), 0, 0, 1, 1}, - {&__pyx_n_s_cls, __pyx_k_cls, sizeof(__pyx_k_cls), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_escape, __pyx_k_escape, sizeof(__pyx_k_escape), 0, 0, 1, 1}, - {&__pyx_n_s_escape_regex, __pyx_k_escape_regex, sizeof(__pyx_k_escape_regex), 0, 0, 1, 1}, - {&__pyx_n_s_escape_regex_special_chars, __pyx_k_escape_regex_special_chars, sizeof(__pyx_k_escape_regex_special_chars), 0, 0, 1, 1}, - {&__pyx_n_s_findall, __pyx_k_findall, sizeof(__pyx_k_findall), 0, 0, 1, 1}, - {&__pyx_n_s_html_entities, __pyx_k_html_entities, sizeof(__pyx_k_html_entities), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1}, - {&__pyx_n_s_key_dict, __pyx_k_key_dict, sizeof(__pyx_k_key_dict), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_ink, __pyx_k_lib_Naked_toolshed_c_ink, sizeof(__pyx_k_lib_Naked_toolshed_c_ink), 0, 0, 1, 1}, - {&__pyx_n_s_local_cdel, __pyx_k_local_cdel, sizeof(__pyx_k_local_cdel), 0, 0, 1, 1}, - {&__pyx_n_s_local_dict, __pyx_k_local_dict, sizeof(__pyx_k_local_dict), 0, 0, 1, 1}, - {&__pyx_n_s_local_htmlent, __pyx_k_local_htmlent, sizeof(__pyx_k_local_htmlent), 0, 0, 1, 1}, - {&__pyx_n_s_local_odel, __pyx_k_local_odel, sizeof(__pyx_k_local_odel), 0, 0, 1, 1}, - {&__pyx_n_s_local_template, __pyx_k_local_template, sizeof(__pyx_k_local_template), 0, 0, 1, 1}, - {&__pyx_n_s_local_varlist, __pyx_k_local_varlist, sizeof(__pyx_k_local_varlist), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_make_var_list, __pyx_k_make_var_list, sizeof(__pyx_k_make_var_list), 0, 0, 1, 1}, - {&__pyx_n_s_match_pat, __pyx_k_match_pat, sizeof(__pyx_k_match_pat), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, - {&__pyx_n_s_odel, __pyx_k_odel, sizeof(__pyx_k_odel), 0, 0, 1, 1}, - {&__pyx_n_s_open_delimiter, __pyx_k_open_delimiter, sizeof(__pyx_k_open_delimiter), 0, 0, 1, 1}, - {&__pyx_n_s_open_match_pat, __pyx_k_open_match_pat, sizeof(__pyx_k_open_match_pat), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1}, - {&__pyx_n_s_render, __pyx_k_render, sizeof(__pyx_k_render), 0, 0, 1, 1}, - {&__pyx_n_s_replace, __pyx_k_replace, sizeof(__pyx_k_replace), 0, 0, 1, 1}, - {&__pyx_n_s_replace_string, __pyx_k_replace_string, sizeof(__pyx_k_replace_string), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_template, __pyx_k_template, sizeof(__pyx_k_template), 0, 0, 1, 1}, - {&__pyx_n_s_template_text, __pyx_k_template_text, sizeof(__pyx_k_template_text), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_test_escape_string, __pyx_k_test_escape_string, sizeof(__pyx_k_test_escape_string), 0, 0, 1, 1}, - {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1}, - {&__pyx_n_s_var_list, __pyx_k_var_list, sizeof(__pyx_k_var_list), 0, 0, 1, 1}, - {&__pyx_n_s_varlist, __pyx_k_varlist, sizeof(__pyx_k_varlist), 0, 0, 1, 1}, - {&__pyx_n_s_xml_sax_saxutils, __pyx_k_xml_sax_saxutils, sizeof(__pyx_k_xml_sax_saxutils), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - return 0; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/ink.pyx":26 - * #------------------------------------------------------------------------------ - * class Template(str): - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): # <<<<<<<<<<<<<< - * obj = str.__new__(cls, template_text) - * obj.odel = open_delimiter - */ - __pyx_tuple__4 = PyTuple_Pack(6, __pyx_n_s_cls, __pyx_n_s_template_text, __pyx_n_s_open_delimiter, __pyx_n_s_close_delimiter, __pyx_n_s_escape_regex, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__4, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_new, 26, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__6 = PyTuple_Pack(3, ((PyObject*)__pyx_kp_s_), ((PyObject*)__pyx_kp_s__2), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "lib/Naked/toolshed/c/ink.pyx":38 - * # Returns a list of the variable names as strings - * #------------------------------------------------------------------------------ - * def _make_var_list(self, template_text, escape_regex=False): # <<<<<<<<<<<<<< - * if escape_regex: - * open_match_pat = self._escape_regex_special_chars(self.odel) - */ - __pyx_tuple__7 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_template_text, __pyx_n_s_escape_regex, __pyx_n_s_open_match_pat, __pyx_n_s_close_match_pat, __pyx_n_s_match_pat, __pyx_n_s_var_list); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(3, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_make_var_list, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__9 = PyTuple_Pack(1, ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "lib/Naked/toolshed/c/ink.pyx":53 - * # Returns a string with the escaped character modifications - * #------------------------------------------------------------------------------ - * def _escape_regex_special_chars(self, test_escape_string): # <<<<<<<<<<<<<< - * return re.escape(test_escape_string) - * - */ - __pyx_tuple__10 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_test_escape_string); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - __pyx_codeobj__11 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__10, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_escape_regex_special_chars, 53, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/ink.pyx":68 - * - * class Renderer: - * def __init__(self, template, key, html_entities=False): # <<<<<<<<<<<<<< - * self.odel = template.odel - * self.cdel = template.cdel - */ - __pyx_tuple__12 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_template, __pyx_n_s_key, __pyx_n_s_html_entities); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__12, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 68, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__14 = PyTuple_Pack(1, ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - - /* "lib/Naked/toolshed/c/ink.pyx":80 - * # returns the rendered template as a string - * #------------------------------------------------------------------------------ - * def render(self): # <<<<<<<<<<<<<< - * # make local variables for the loop below (faster) - * local_dict = self.key_dict - */ - __pyx_tuple__15 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_local_dict, __pyx_n_s_local_template, __pyx_n_s_local_varlist, __pyx_n_s_local_odel, __pyx_n_s_local_cdel, __pyx_n_s_local_htmlent, __pyx_n_s_escape, __pyx_n_s_key, __pyx_n_s_value, __pyx_n_s_replace_string); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(1, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_render, 80, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initink(void); /*proto*/ -PyMODINIT_FUNC initink(void) -#else -PyMODINIT_FUNC PyInit_ink(void); /*proto*/ -PyMODINIT_FUNC PyInit_ink(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_ink(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("ink"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__ink) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.ink")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.ink", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/ink.pyx":11 - * # MIT License - * #------------------------------------------------------------------------------ - * import re # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_re, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_re, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":25 - * # `escape_regex` boolean is a speedup, avoids Python escape of special regex chars if you do not need it - * #------------------------------------------------------------------------------ - * class Template(str): # <<<<<<<<<<<<<< - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): - * obj = str.__new__(cls, template_text) - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyString_Type)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PyString_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyString_Type)))); - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_Template, __pyx_n_s_Template, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/ink.pyx":26 - * #------------------------------------------------------------------------------ - * class Template(str): - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): # <<<<<<<<<<<<<< - * obj = str.__new__(cls, template_text) - * obj.odel = open_delimiter - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Template_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_Template___new, NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__6); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_new, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":38 - * # Returns a list of the variable names as strings - * #------------------------------------------------------------------------------ - * def _make_var_list(self, template_text, escape_regex=False): # <<<<<<<<<<<<<< - * if escape_regex: - * open_match_pat = self._escape_regex_special_chars(self.odel) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Template_3_make_var_list, 0, __pyx_n_s_Template__make_var_list, NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__8)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__9); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_make_var_list, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":53 - * # Returns a string with the escaped character modifications - * #------------------------------------------------------------------------------ - * def _escape_regex_special_chars(self, test_escape_string): # <<<<<<<<<<<<<< - * return re.escape(test_escape_string) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Template_5_escape_regex_special_chars, 0, __pyx_n_s_Template__escape_regex_special_c, NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__11)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_escape_regex_special_chars, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":25 - * # `escape_regex` boolean is a speedup, avoids Python escape of special regex chars if you do not need it - * #------------------------------------------------------------------------------ - * class Template(str): # <<<<<<<<<<<<<< - * def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): - * obj = str.__new__(cls, template_text) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_Template, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Template, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":67 - * #------------------------------------------------------------------------------ - * - * class Renderer: # <<<<<<<<<<<<<< - * def __init__(self, template, key, html_entities=False): - * self.odel = template.odel - */ - __pyx_t_1 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Renderer, __pyx_n_s_Renderer, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/ink.pyx":68 - * - * class Renderer: - * def __init__(self, template, key, html_entities=False): # <<<<<<<<<<<<<< - * self.odel = template.odel - * self.cdel = template.cdel - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Renderer_1__init__, 0, __pyx_n_s_Renderer___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__14); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":80 - * # returns the rendered template as a string - * #------------------------------------------------------------------------------ - * def render(self): # <<<<<<<<<<<<<< - * # make local variables for the loop below (faster) - * local_dict = self.key_dict - */ - __pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_3ink_8Renderer_3render, 0, __pyx_n_s_Renderer_render, NULL, __pyx_n_s_lib_Naked_toolshed_c_ink, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_render, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":67 - * #------------------------------------------------------------------------------ - * - * class Renderer: # <<<<<<<<<<<<<< - * def __init__(self, template, key, html_entities=False): - * self.odel = template.odel - */ - __pyx_t_2 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_Renderer, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Renderer, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/ink.pyx":102 - * - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - * # template = Template("This is a of the {{test}} of the {{document}} {{type}} and more of the {{test}} {{document}} {{type}}") - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_5) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/ink.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.ink", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.ink"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.pyx deleted file mode 100644 index 2e9934e..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/ink.pyx +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -#------------------------------------------------------------------------------ -# The Ink Templating System -# A lightweight, fast, flexible text templating system -# Copyright 2014 Christopher Simpkins -# MIT License -#------------------------------------------------------------------------------ -import re - -#------------------------------------------------------------------------------ -# Template class -# A template string class that is inherited from Python str -# Includes metadata about the template: -# odel = opening delimiter -# cdel = closing delimiter -# varlist = inclusive list of all variables in the template text (parsed in constructor) -# Delimiters: -# default = {{variable}} -# assign new opening and closing delimiters as parameters when you make a new Template instance -# `escape_regex` boolean is a speedup, avoids Python escape of special regex chars if you do not need it -#------------------------------------------------------------------------------ -class Template(str): - def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): - obj = str.__new__(cls, template_text) - obj.odel = open_delimiter - obj.cdel = close_delimiter - obj.varlist = obj._make_var_list(template_text, escape_regex) #contains all unique parsed variables from the template in a list - return obj - - #------------------------------------------------------------------------------ - # [ _make_var_list method ] (list of strings) - # Private method that parses the template string for all variables that match the delimiter pattern - # Returns a list of the variable names as strings - #------------------------------------------------------------------------------ - def _make_var_list(self, template_text, escape_regex=False): - if escape_regex: - open_match_pat = self._escape_regex_special_chars(self.odel) - close_match_pat = self._escape_regex_special_chars(self.cdel) - match_pat = open_match_pat + r'(.*?)' + close_match_pat # capture group contains the variable name used between the opening and closing delimiters - else: - match_pat = self.odel + r'(.*?)' + self.cdel - var_list = re.findall(match_pat, template_text) #generate a list that contains the capture group from the matches (i.e. the variables in the template) - return set(var_list) # remove duplicate entries by converting to set (and lookup speed improvement from hashing) - - #------------------------------------------------------------------------------ - # [ _escape_regex_special_chars method ] (string) - # Private method that escapes special regex metacharacters - # Returns a string with the escaped character modifications - #------------------------------------------------------------------------------ - def _escape_regex_special_chars(self, test_escape_string): - return re.escape(test_escape_string) - -#------------------------------------------------------------------------------ -# Renderer class -# Render the variable replacements in the ink template using a Python dictionary key argument -# Construct the instace of the Renderer with the Ink template and the dictionary key -# Run the renderer with the render method on the instance (e.g. r.render()) -# Parameters to constructor: -# - template = an Ink Template instance -# - key = a dictionary mapped key = variable name : value = variable replacement data -# - html_entities = encode html entities with HTML escaped characters (default = False = do not encode) -#------------------------------------------------------------------------------ - -class Renderer: - def __init__(self, template, key, html_entities=False): - self.odel = template.odel - self.cdel = template.cdel - self.template = template - self.html_entities = html_entities - self.key_dict = key - - #------------------------------------------------------------------------------ - # [ render method ] (string) - # renders the variable replacements in the Ink template - # returns the rendered template as a string - #------------------------------------------------------------------------------ - def render(self): - # make local variables for the loop below (faster) - local_dict = self.key_dict - local_template = self.template - local_varlist = self.template.varlist - local_odel = self.odel - local_cdel = self.cdel - local_htmlent = self.html_entities - if local_htmlent: - from xml.sax.saxutils import escape #from Python std lib - for key in local_dict: - if key in local_varlist: - value = local_dict[key] - replace_string = local_odel + key + local_cdel - if local_htmlent: - value = escape(value) #xml.sax.saxutils function - local_template = local_template.replace(replace_string, value) - return local_template - - ##TODO : multiple file render method? - - -if __name__ == '__main__': - pass - # template = Template("This is a of the {{test}} of the {{document}} {{type}} and more of the {{test}} {{document}} {{type}}") - # renderer = Renderer(template, {'test': 'ব য', 'document':'testing document', 'type':'of mine', 'bogus': 'bogus test'}) - # print(renderer.render()) diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/network.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/network.c deleted file mode 100644 index 1e6857d..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/network.c +++ /dev/null @@ -1,10338 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:14 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__network -#define __PYX_HAVE_API__lib__Naked__toolshed__c__network -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "network.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -#if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000) -static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { - PyObject *res; - PyTypeObject *tp = Py_TYPE(obj); -#if PY_MAJOR_VERSION < 3 - if (unlikely(PyInstance_Check(obj))) - return __Pyx_PyObject_GetAttrStr(obj, attr_name); -#endif - res = _PyType_Lookup(tp, attr_name); - if (likely(res)) { - descrgetfunc f = Py_TYPE(res)->tp_descr_get; - if (!f) { - Py_INCREF(res); - } else { - res = f(res, obj, (PyObject *)tp); - } - } else { - PyErr_SetObject(PyExc_AttributeError, attr_name); - } - return res; -} -#else -#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) -#endif - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ -#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 -static PyObject* __pyx_print = 0; -static PyObject* __pyx_print_kwargs = 0; -#endif - -static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.network' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.network" -int __pyx_module_is_main_lib__Naked__toolshed__c__network = 0; - -/* Implementation of 'lib.Naked.toolshed.c.network' */ -static PyObject *__pyx_builtin_Exception; -static PyObject *__pyx_builtin_open; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_url, PyObject *__pyx_v_request_timeout); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_2get(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_follow_redirects); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_4get_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_6get_bin_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_8get_txt_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_10head(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_12post(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_follow_redirects); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_14post_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_16post_bin_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_18post_txt_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_20response(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_22get_status_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_24post_status_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static char __pyx_k_[] = ""; -static char __pyx_k_e[] = "e"; -static char __pyx_k_f[] = "f"; -static char __pyx_k_w[] = "w"; -static char __pyx_k__2[] = "/"; -static char __pyx_k__4[] = "..."; -static char __pyx_k__6[] = " "; -static char __pyx_k_ce[] = "ce"; -static char __pyx_k_ok[] = "ok"; -static char __pyx_k_os[] = "os"; -static char __pyx_k_wb[] = "wb"; -static char __pyx_k_doc[] = "__doc__"; -static char __pyx_k_end[] = "end"; -static char __pyx_k_get[] = "get"; -static char __pyx_k_res[] = "res"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_url[] = "url"; -static char __pyx_k_HTTP[] = "HTTP"; -static char __pyx_k_exit[] = "__exit__"; -static char __pyx_k_file[] = "file"; -static char __pyx_k_head[] = "head"; -static char __pyx_k_init[] = "__init__"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_mode[] = "mode"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_open[] = "open"; -static char __pyx_k_post[] = "post"; -static char __pyx_k_self[] = "self"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_text[] = "text"; -static char __pyx_k_chunk[] = "chunk"; -static char __pyx_k_codes[] = "codes"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_enter[] = "__enter__"; -static char __pyx_k_flush[] = "flush"; -static char __pyx_k_fsync[] = "fsync"; -static char __pyx_k_print[] = "print"; -static char __pyx_k_split[] = "split"; -static char __pyx_k_utf_8[] = "utf-8"; -static char __pyx_k_write[] = "write"; -static char __pyx_k_codecs[] = "codecs"; -static char __pyx_k_decode[] = "decode"; -static char __pyx_k_exit_2[] = "exit"; -static char __pyx_k_fileno[] = "fileno"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_module[] = "__module__"; -static char __pyx_k_stderr[] = "stderr"; -static char __pyx_k_stdout[] = "stdout"; -static char __pyx_k_stream[] = "stream"; -static char __pyx_k_content[] = "content"; -static char __pyx_k_get_bin[] = "get_bin"; -static char __pyx_k_headers[] = "headers"; -static char __pyx_k_prepare[] = "__prepare__"; -static char __pyx_k_timeout[] = "timeout"; -static char __pyx_k_HTTP_get[] = "HTTP.get"; -static char __pyx_k_encoding[] = "encoding"; -static char __pyx_k_filepath[] = "filepath"; -static char __pyx_k_post_bin[] = "post_bin"; -static char __pyx_k_qualname[] = "__qualname__"; -static char __pyx_k_requests[] = "requests"; -static char __pyx_k_response[] = "response"; -static char __pyx_k_Exception[] = "Exception"; -static char __pyx_k_HTTP_head[] = "HTTP.head"; -static char __pyx_k_HTTP_post[] = "HTTP.post"; -static char __pyx_k_metaclass[] = "__metaclass__"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_chunk_size[] = "chunk_size"; -static char __pyx_k_exceptions[] = "exceptions"; -static char __pyx_k_HTTP___init[] = "HTTP.__init__"; -static char __pyx_k_file_exists[] = "file_exists"; -static char __pyx_k_status_code[] = "status_code"; -static char __pyx_k_HTTP_get_bin[] = "HTTP.get_bin"; -static char __pyx_k_iter_content[] = "iter_content"; -static char __pyx_k_HTTP_post_bin[] = "HTTP.post_bin"; -static char __pyx_k_HTTP_response[] = "HTTP.response"; -static char __pyx_k_get_status_ok[] = "get_status_ok"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_post_status_ok[] = "post_status_ok"; -static char __pyx_k_ConnectionError[] = "ConnectionError"; -static char __pyx_k_allow_redirects[] = "allow_redirects"; -static char __pyx_k_request_timeout[] = "request_timeout"; -static char __pyx_k_suppress_output[] = "suppress_output"; -static char __pyx_k_follow_redirects[] = "follow_redirects"; -static char __pyx_k_Download_complete[] = "Download complete."; -static char __pyx_k_HTTP_get_status_ok[] = "HTTP.get_status_ok"; -static char __pyx_k_get_bin_write_file[] = "get_bin_write_file"; -static char __pyx_k_get_txt_write_file[] = "get_txt_write_file"; -static char __pyx_k_overwrite_existing[] = "overwrite_existing"; -static char __pyx_k_HTTP_post_status_ok[] = "HTTP.post_status_ok"; -static char __pyx_k_post_bin_write_file[] = "post_bin_write_file"; -static char __pyx_k_post_txt_write_file[] = "post_txt_write_file"; -static char __pyx_k_Downloading_file_from[] = "Downloading file from "; -static char __pyx_k_Naked_toolshed_system[] = "Naked.toolshed.system"; -static char __pyx_k_HTTP_get_bin_write_file[] = "HTTP.get_bin_write_file"; -static char __pyx_k_HTTP_get_txt_write_file[] = "HTTP.get_txt_write_file"; -static char __pyx_k_HTTP_post_bin_write_file[] = "HTTP.post_bin_write_file"; -static char __pyx_k_HTTP_post_txt_write_file[] = "HTTP.post_txt_write_file"; -static char __pyx_k_lib_Naked_toolshed_c_network[] = "lib.Naked.toolshed.c.network"; -static char __pyx_k_Naked_Framework_Error_Unable_to[] = "Naked Framework Error: Unable to perform GET request with the URL "; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/network.pyx"; -static char __pyx_k_using_the_get_bin_write_file_me[] = " using the get_bin_write_file() method (Naked.toolshed.network.py)"; -static char __pyx_k_using_the_get_data_method_Naked[] = " using the get_data() method (Naked.toolshed.network.py)"; -static char __pyx_k_using_the_get_data_write_txt_me[] = " using the get_data_write_txt() method (Naked.toolshed.network.py)"; -static char __pyx_k_using_the_get_method_Naked_tool[] = " using the get() method (Naked.toolshed.network.py)"; -static char __pyx_k_using_the_post_data_write_bin_m[] = " using the post_data_write_bin() method (Naked.toolshed.network.py)"; -static char __pyx_k_Download_aborted_A_local_file_wi[] = "Download aborted. A local file with the requested filename exists on the path."; -static char __pyx_k_Naked_Framework_Error_Unable_to_2[] = "Naked Framework Error: Unable to perform GET request and write file with the URL "; -static char __pyx_k_Naked_Framework_Error_Unable_to_3[] = "Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_4[] = "Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_5[] = "Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_6[] = "Naked Framework Error: Unable to perform POST request and write file with the URL "; -static char __pyx_k_Naked_Framework_Error_Unable_to_7[] = "Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_8[] = "Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py)."; -static char __pyx_k_Naked_Framework_Error_Unable_to_9[] = "Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py)."; -static PyObject *__pyx_kp_s_; -static PyObject *__pyx_n_s_ConnectionError; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_kp_s_Download_aborted_A_local_file_wi; -static PyObject *__pyx_kp_s_Download_complete; -static PyObject *__pyx_kp_s_Downloading_file_from; -static PyObject *__pyx_n_s_Exception; -static PyObject *__pyx_n_s_HTTP; -static PyObject *__pyx_n_s_HTTP___init; -static PyObject *__pyx_n_s_HTTP_get; -static PyObject *__pyx_n_s_HTTP_get_bin; -static PyObject *__pyx_n_s_HTTP_get_bin_write_file; -static PyObject *__pyx_n_s_HTTP_get_status_ok; -static PyObject *__pyx_n_s_HTTP_get_txt_write_file; -static PyObject *__pyx_n_s_HTTP_head; -static PyObject *__pyx_n_s_HTTP_post; -static PyObject *__pyx_n_s_HTTP_post_bin; -static PyObject *__pyx_n_s_HTTP_post_bin_write_file; -static PyObject *__pyx_n_s_HTTP_post_status_ok; -static PyObject *__pyx_n_s_HTTP_post_txt_write_file; -static PyObject *__pyx_n_s_HTTP_response; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_4; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_5; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_6; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_7; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_8; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Unable_to_9; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_Naked_toolshed_system; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_kp_s__2; -static PyObject *__pyx_kp_s__4; -static PyObject *__pyx_kp_s__6; -static PyObject *__pyx_n_s_allow_redirects; -static PyObject *__pyx_n_s_ce; -static PyObject *__pyx_n_s_chunk; -static PyObject *__pyx_n_s_chunk_size; -static PyObject *__pyx_n_s_codecs; -static PyObject *__pyx_n_s_codes; -static PyObject *__pyx_n_s_content; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_decode; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_encoding; -static PyObject *__pyx_n_s_end; -static PyObject *__pyx_n_s_enter; -static PyObject *__pyx_n_s_exceptions; -static PyObject *__pyx_n_s_exit; -static PyObject *__pyx_n_s_exit_2; -static PyObject *__pyx_n_s_f; -static PyObject *__pyx_n_s_file; -static PyObject *__pyx_n_s_file_exists; -static PyObject *__pyx_n_s_fileno; -static PyObject *__pyx_n_s_filepath; -static PyObject *__pyx_n_s_flush; -static PyObject *__pyx_n_s_follow_redirects; -static PyObject *__pyx_n_s_fsync; -static PyObject *__pyx_n_s_get; -static PyObject *__pyx_n_s_get_bin; -static PyObject *__pyx_n_s_get_bin_write_file; -static PyObject *__pyx_n_s_get_status_ok; -static PyObject *__pyx_n_s_get_txt_write_file; -static PyObject *__pyx_n_s_head; -static PyObject *__pyx_n_s_headers; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_iter_content; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_network; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_mode; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_ok; -static PyObject *__pyx_n_s_open; -static PyObject *__pyx_n_s_os; -static PyObject *__pyx_n_s_overwrite_existing; -static PyObject *__pyx_n_s_post; -static PyObject *__pyx_n_s_post_bin; -static PyObject *__pyx_n_s_post_bin_write_file; -static PyObject *__pyx_n_s_post_status_ok; -static PyObject *__pyx_n_s_post_txt_write_file; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_print; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_request_timeout; -static PyObject *__pyx_n_s_requests; -static PyObject *__pyx_n_s_res; -static PyObject *__pyx_n_s_response; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_split; -static PyObject *__pyx_n_s_status_code; -static PyObject *__pyx_n_s_stderr; -static PyObject *__pyx_n_s_stdout; -static PyObject *__pyx_n_s_stream; -static PyObject *__pyx_n_s_suppress_output; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_text; -static PyObject *__pyx_n_s_timeout; -static PyObject *__pyx_n_s_url; -static PyObject *__pyx_kp_s_using_the_get_bin_write_file_me; -static PyObject *__pyx_kp_s_using_the_get_data_method_Naked; -static PyObject *__pyx_kp_s_using_the_get_data_write_txt_me; -static PyObject *__pyx_kp_s_using_the_get_method_Naked_tool; -static PyObject *__pyx_kp_s_using_the_post_data_write_bin_m; -static PyObject *__pyx_kp_s_utf_8; -static PyObject *__pyx_n_s_w; -static PyObject *__pyx_n_s_wb; -static PyObject *__pyx_n_s_write; -static PyObject *__pyx_int_10; -static PyObject *__pyx_int_2048; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__24; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__31; -static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__34; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__39; -static PyObject *__pyx_tuple__40; -static PyObject *__pyx_tuple__42; -static PyObject *__pyx_tuple__44; -static PyObject *__pyx_tuple__45; -static PyObject *__pyx_tuple__47; -static PyObject *__pyx_tuple__48; -static PyObject *__pyx_tuple__50; -static PyObject *__pyx_tuple__52; -static PyObject *__pyx_codeobj__22; -static PyObject *__pyx_codeobj__25; -static PyObject *__pyx_codeobj__28; -static PyObject *__pyx_codeobj__30; -static PyObject *__pyx_codeobj__33; -static PyObject *__pyx_codeobj__36; -static PyObject *__pyx_codeobj__38; -static PyObject *__pyx_codeobj__41; -static PyObject *__pyx_codeobj__43; -static PyObject *__pyx_codeobj__46; -static PyObject *__pyx_codeobj__49; -static PyObject *__pyx_codeobj__51; -static PyObject *__pyx_codeobj__53; - -/* "lib/Naked/toolshed/c/network.pyx":15 - * #------------------------------------------------------------------------------ - * class HTTP(): - * def __init__(self, url="", request_timeout=10): # <<<<<<<<<<<<<< - * self.url = url - * self.request_timeout = request_timeout - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_url = 0; - PyObject *__pyx_v_request_timeout = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_url,&__pyx_n_s_request_timeout,0}; - PyObject* values[3] = {0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_kp_s_)); - values[2] = ((PyObject *)((PyObject *)__pyx_int_10)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_url); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_request_timeout); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_url = values[1]; - __pyx_v_request_timeout = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP___init__(__pyx_self, __pyx_v_self, __pyx_v_url, __pyx_v_request_timeout); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_url, PyObject *__pyx_v_request_timeout) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/network.pyx":16 - * class HTTP(): - * def __init__(self, url="", request_timeout=10): - * self.url = url # <<<<<<<<<<<<<< - * self.request_timeout = request_timeout - * #------------------------------------------------------------------------------ - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_url, __pyx_v_url) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":17 - * def __init__(self, url="", request_timeout=10): - * self.url = url - * self.request_timeout = request_timeout # <<<<<<<<<<<<<< - * #------------------------------------------------------------------------------ - * # HTTP response properties (assignment occurs with the HTTP request methods) - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout, __pyx_v_request_timeout) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":21 - * # HTTP response properties (assignment occurs with the HTTP request methods) - * #------------------------------------------------------------------------------ - * self.res = None # assigned with the requests external library response object after a HTTP method call # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":15 - * #------------------------------------------------------------------------------ - * class HTTP(): - * def __init__(self, url="", request_timeout=10): # <<<<<<<<<<<<<< - * self.url = url - * self.request_timeout = request_timeout - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":32 - * # test_http_post_reponse_change, test_http_get_response_check - * #------------------------------------------------------------------------------ - * def get(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_3get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_3get = {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_3get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_3get(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_follow_redirects = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_follow_redirects,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)((PyObject *)Py_True)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_follow_redirects); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_follow_redirects = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_2get(__pyx_self, __pyx_v_self, __pyx_v_follow_redirects); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_2get(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_follow_redirects) { - PyObject *__pyx_v_response = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get", 0); - - /* "lib/Naked/toolshed/c/network.pyx":33 - * #------------------------------------------------------------------------------ - * def get(self, follow_redirects=True): - * try: # <<<<<<<<<<<<<< - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":34 - * def get(self, follow_redirects=True): - * try: - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) # <<<<<<<<<<<<<< - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.text - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_allow_redirects, __pyx_v_follow_redirects) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_response = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":35 - * try: - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class # <<<<<<<<<<<<<< - * return response.text - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":36 - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.text # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_text); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":37 - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.text - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":38 - * return response.text - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":39 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get() method (Naked.toolshed.network.py)") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":40 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get() method (Naked.toolshed.network.py)") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":41 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get() method (Naked.toolshed.network.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = PyNumber_Add(__pyx_kp_s_Naked_Framework_Error_Unable_to, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_using_the_get_method_Naked_tool); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":42 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get() method (Naked.toolshed.network.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":32 - * # test_http_post_reponse_change, test_http_get_response_check - * #------------------------------------------------------------------------------ - * def get(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":49 - * # returns data stream with raw binary data - * #------------------------------------------------------------------------------ - * def get_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_5get_bin(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_5get_bin = {__Pyx_NAMESTR("get_bin"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_5get_bin, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_5get_bin(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_bin (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_4get_bin(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_4get_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_response = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_bin", 0); - - /* "lib/Naked/toolshed/c/network.pyx":50 - * #------------------------------------------------------------------------------ - * def get_bin(self): - * try: # <<<<<<<<<<<<<< - * response = requests.get(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":51 - * def get_bin(self): - * try: - * response = requests.get(self.url, timeout=self.request_timeout) # <<<<<<<<<<<<<< - * self.res = response # assign the response object from requests to a property on the instance - * return response.content # return binary data instead of text (get() returns text) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_response = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":52 - * try: - * response = requests.get(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance # <<<<<<<<<<<<<< - * return response.content # return binary data instead of text (get() returns text) - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":53 - * response = requests.get(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance - * return response.content # return binary data instead of text (get() returns text) # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_content); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":54 - * self.res = response # assign the response object from requests to a property on the instance - * return response.content # return binary data instead of text (get() returns text) - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":55 - * return response.content # return binary data instead of text (get() returns text) - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":56 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get_data() method (Naked.toolshed.network.py)") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":57 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get_data() method (Naked.toolshed.network.py)") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":58 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get_data() method (Naked.toolshed.network.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = PyNumber_Add(__pyx_kp_s_Naked_Framework_Error_Unable_to, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_using_the_get_data_method_Naked); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":59 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get_data() method (Naked.toolshed.network.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":49 - * # returns data stream with raw binary data - * #------------------------------------------------------------------------------ - * def get_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":69 - * # Tests: test_NETWORK.py :: test_http_get_binary - * #------------------------------------------------------------------------------ - * def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_7get_bin_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_7get_bin_write_file = {__Pyx_NAMESTR("get_bin_write_file"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_7get_bin_write_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_7get_bin_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - PyObject *__pyx_v_suppress_output = 0; - PyObject *__pyx_v_overwrite_existing = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_bin_write_file (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,&__pyx_n_s_suppress_output,&__pyx_n_s_overwrite_existing,0}; - PyObject* values[4] = {0,0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_kp_s_)); - values[2] = ((PyObject *)((PyObject *)Py_False)); - values[3] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_output); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_overwrite_existing); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_bin_write_file") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - __pyx_v_suppress_output = values[2]; - __pyx_v_overwrite_existing = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_bin_write_file", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_6get_bin_write_file(__pyx_self, __pyx_v_self, __pyx_v_filepath, __pyx_v_suppress_output, __pyx_v_overwrite_existing); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_6get_bin_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_file_exists = NULL; - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_chunk = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *(*__pyx_t_16)(PyObject *); - PyObject *__pyx_t_17 = NULL; - int __pyx_t_18; - PyObject *__pyx_t_19 = NULL; - PyObject *__pyx_t_20 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_bin_write_file", 0); - __Pyx_INCREF(__pyx_v_filepath); - - /* "lib/Naked/toolshed/c/network.pyx":70 - * #------------------------------------------------------------------------------ - * def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: # <<<<<<<<<<<<<< - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":71 - * def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: - * import os # used for os.fsync() method in the write # <<<<<<<<<<<<<< - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_os = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":73 - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: # <<<<<<<<<<<<<< - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_overwrite_existing); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_6 = ((!__pyx_t_5) != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":74 - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists # <<<<<<<<<<<<<< - * if file_exists(filepath): - * if not suppress_output: - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_file_exists); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_file_exists); - __Pyx_GIVEREF(__pyx_n_s_file_exists); - __pyx_t_7 = __Pyx_Import(__pyx_n_s_Naked_toolshed_system, __pyx_t_4, -1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_file_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_file_exists = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":75 - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): # <<<<<<<<<<<<<< - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - */ - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_file_exists, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":76 - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - * if not suppress_output: # <<<<<<<<<<<<<< - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_6) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":77 - * if file_exists(filepath): - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") # <<<<<<<<<<<<<< - * return False - * if (filepath == "" and len(self.url) > 1): - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_aborted_A_local_file_wi) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/network.pyx":78 - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False # <<<<<<<<<<<<<< - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/network.pyx":79 - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - * if (filepath == "" and len(self.url) > 1): # <<<<<<<<<<<<<< - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_filepath, __pyx_kp_s_, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_5) { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_8 > 1); - __pyx_t_9 = __pyx_t_6; - } else { - __pyx_t_9 = __pyx_t_5; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":80 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_split); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_filepath, __pyx_t_7); - __pyx_t_7 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/network.pyx":81 - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: # <<<<<<<<<<<<<< - * sys.stdout.write("Downloading file from " + self.url + "...") - * sys.stdout.flush() - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":82 - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = PyNumber_Add(__pyx_kp_s_Downloading_file_from, __pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_10, __pyx_kp_s__4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":83 - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stdout); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_flush); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":84 - * sys.stdout.write("Downloading file from " + self.url + "...") - * sys.stdout.flush() - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) # <<<<<<<<<<<<<< - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_timeout, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_stream, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_response = __pyx_t_11; - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":85 - * sys.stdout.flush() - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response # <<<<<<<<<<<<<< - * with open(filepath, 'wb') as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":86 - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - */ - /*with:*/ { - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __Pyx_INCREF(__pyx_n_s_wb); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_n_s_wb); - __Pyx_GIVEREF(__pyx_n_s_wb); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_10, __pyx_n_s_exit); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_t_10, __pyx_n_s_enter); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_f = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":87 - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): # <<<<<<<<<<<<<< - * f.write(chunk) - * f.flush() - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_iter_content); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_chunk_size, __pyx_int_2048) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyList_CheckExact(__pyx_t_11) || PyTuple_CheckExact(__pyx_t_11)) { - __pyx_t_10 = __pyx_t_11; __Pyx_INCREF(__pyx_t_10); __pyx_t_8 = 0; - __pyx_t_16 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_16 = Py_TYPE(__pyx_t_10)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - for (;;) { - if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_10)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_10)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_11 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_11); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_11 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_10)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_10)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_11); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_11 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else { - __pyx_t_11 = __pyx_t_16(__pyx_t_10); - if (unlikely(!__pyx_t_11)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_11); - } - __Pyx_XDECREF_SET(__pyx_v_chunk, __pyx_t_11); - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":88 - * with open(filepath, 'wb') as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) # <<<<<<<<<<<<<< - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_chunk); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_chunk); - __Pyx_GIVEREF(__pyx_v_chunk); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":89 - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - * f.flush() # <<<<<<<<<<<<<< - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_flush); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":90 - * f.write(chunk) - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk # <<<<<<<<<<<<<< - * if not suppress_output: - * print(" ") - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_fsync); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_fileno); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L29_try_end; - __pyx_L22_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":86 - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyTuple_Pack(3, __pyx_t_10, __pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_7, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __pyx_t_9 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_4); - __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L23_exception_handled; - } - __pyx_L24_except_error:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - goto __pyx_L3_error; - __pyx_L23_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - __pyx_L29_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_12) { - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__5, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - goto __pyx_L21; - } - __pyx_L21:; - } - goto __pyx_L36; - __pyx_L16_error:; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L3_error; - __pyx_L36:; - } - - /* "lib/Naked/toolshed/c/network.pyx":91 - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: # <<<<<<<<<<<<<< - * print(" ") - * print("Download complete.") - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":92 - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - * print(" ") # <<<<<<<<<<<<<< - * print("Download complete.") - * return True # return True if successful write - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":93 - * if not suppress_output: - * print(" ") - * print("Download complete.") # <<<<<<<<<<<<<< - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_complete) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L37; - } - __pyx_L37:; - - /* "lib/Naked/toolshed/c/network.pyx":94 - * print(" ") - * print("Download complete.") - * return True # return True if successful write # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":95 - * print("Download complete.") - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_t_11); - __pyx_v_ce = __pyx_t_11; - - /* "lib/Naked/toolshed/c/network.pyx":96 - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":97 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_bin_write_file() method (Naked.toolshed.network.py)") - */ - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_11); - __pyx_v_e = __pyx_t_11; - - /* "lib/Naked/toolshed/c/network.pyx":98 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_bin_write_file() method (Naked.toolshed.network.py)") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":99 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_bin_write_file() method (Naked.toolshed.network.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __pyx_t_20 = PyNumber_Add(__pyx_kp_s_Naked_Framework_Error_Unable_to_2, __pyx_t_19); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = PyNumber_Add(__pyx_t_20, __pyx_kp_s_using_the_get_bin_write_file_me); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = PyTuple_New(1); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_19); - __Pyx_GIVEREF(__pyx_t_19); - __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_20, NULL); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - goto __pyx_L42; - } - __pyx_L42:; - - /* "lib/Naked/toolshed/c/network.pyx":100 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_bin_write_file() method (Naked.toolshed.network.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":69 - * # Tests: test_NETWORK.py :: test_http_get_binary - * #------------------------------------------------------------------------------ - * def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_file_exists); - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_chunk); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XDECREF(__pyx_v_filepath); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":109 - * # Tests: test_NETWORK.py :: test_http_get_text - * #------------------------------------------------------------------------------ - * def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_9get_txt_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_9get_txt_write_file = {__Pyx_NAMESTR("get_txt_write_file"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_9get_txt_write_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_9get_txt_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - PyObject *__pyx_v_suppress_output = 0; - PyObject *__pyx_v_overwrite_existing = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_txt_write_file (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,&__pyx_n_s_suppress_output,&__pyx_n_s_overwrite_existing,0}; - PyObject* values[4] = {0,0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_kp_s_)); - values[2] = ((PyObject *)((PyObject *)Py_False)); - values[3] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_output); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_overwrite_existing); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_txt_write_file") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - __pyx_v_suppress_output = values[2]; - __pyx_v_overwrite_existing = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_txt_write_file", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_8get_txt_write_file(__pyx_self, __pyx_v_self, __pyx_v_filepath, __pyx_v_suppress_output, __pyx_v_overwrite_existing); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_8get_txt_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_file_exists = NULL; - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_chunk = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *(*__pyx_t_16)(PyObject *); - PyObject *__pyx_t_17 = NULL; - int __pyx_t_18; - PyObject *__pyx_t_19 = NULL; - PyObject *__pyx_t_20 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_txt_write_file", 0); - __Pyx_INCREF(__pyx_v_filepath); - - /* "lib/Naked/toolshed/c/network.pyx":110 - * #------------------------------------------------------------------------------ - * def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: # <<<<<<<<<<<<<< - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":111 - * def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: - * import os # used for os.fsync() method in the write # <<<<<<<<<<<<<< - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_os = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":113 - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: # <<<<<<<<<<<<<< - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_overwrite_existing); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_6 = ((!__pyx_t_5) != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":114 - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists # <<<<<<<<<<<<<< - * if file_exists(filepath): - * if not suppress_output: - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_file_exists); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_file_exists); - __Pyx_GIVEREF(__pyx_n_s_file_exists); - __pyx_t_7 = __Pyx_Import(__pyx_n_s_Naked_toolshed_system, __pyx_t_4, -1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_file_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_file_exists = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":115 - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): # <<<<<<<<<<<<<< - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - */ - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_file_exists, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":116 - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - * if not suppress_output: # <<<<<<<<<<<<<< - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_6) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":117 - * if file_exists(filepath): - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") # <<<<<<<<<<<<<< - * return False - * if (filepath == "" and len(self.url) > 1): - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_aborted_A_local_file_wi) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/network.pyx":118 - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False # <<<<<<<<<<<<<< - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/network.pyx":119 - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - * if (filepath == "" and len(self.url) > 1): # <<<<<<<<<<<<<< - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_filepath, __pyx_kp_s_, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_5) { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_8 > 1); - __pyx_t_9 = __pyx_t_6; - } else { - __pyx_t_9 = __pyx_t_5; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":120 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_split); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_filepath, __pyx_t_7); - __pyx_t_7 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/network.pyx":121 - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: # <<<<<<<<<<<<<< - * sys.stdout.write("Downloading file from " + self.url + "...") - * sys.stdout.flush() - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":122 - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") # <<<<<<<<<<<<<< - * sys.stdout.flush() - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = PyNumber_Add(__pyx_kp_s_Downloading_file_from, __pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_10, __pyx_kp_s__4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":123 - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") - * sys.stdout.flush() # <<<<<<<<<<<<<< - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stdout); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_flush); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":124 - * sys.stdout.write("Downloading file from " + self.url + "...") - * sys.stdout.flush() - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) # <<<<<<<<<<<<<< - * self.res = response - * import codecs - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_timeout, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_stream, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_response = __pyx_t_11; - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":125 - * sys.stdout.flush() - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":126 - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * import codecs # <<<<<<<<<<<<<< - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - * for chunk in response.iter_content(chunk_size=2048): - */ - __pyx_t_11 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_v_codecs = __pyx_t_11; - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":127 - * self.res = response - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - */ - /*with:*/ { - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_mode, __pyx_n_s_w) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_encoding, __pyx_kp_s_utf_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - /*try:*/ { - __Pyx_INCREF(__pyx_t_10); - __pyx_v_f = __pyx_t_10; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":128 - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - * for chunk in response.iter_content(chunk_size=2048): # <<<<<<<<<<<<<< - * chunk = chunk.decode('utf-8') - * f.write(chunk) - */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_iter_content); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_chunk_size, __pyx_int_2048) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_7) || PyTuple_CheckExact(__pyx_t_7)) { - __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0; - __pyx_t_16 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_16 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - for (;;) { - if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_16(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_chunk, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":129 - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') # <<<<<<<<<<<<<< - * f.write(chunk) - * f.flush() - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_chunk, __pyx_n_s_decode); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF_SET(__pyx_v_chunk, __pyx_t_10); - __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":130 - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - * f.write(chunk) # <<<<<<<<<<<<<< - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_chunk); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_chunk); - __Pyx_GIVEREF(__pyx_v_chunk); - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_7, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":131 - * chunk = chunk.decode('utf-8') - * f.write(chunk) - * f.flush() # <<<<<<<<<<<<<< - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_flush); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":132 - * f.write(chunk) - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk # <<<<<<<<<<<<<< - * if not suppress_output: - * print(" ") - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_fsync); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_fileno); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L29_try_end; - __pyx_L22_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":127 - * self.res = response - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_10, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_7, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __pyx_t_9 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ErrRestore(__pyx_t_4, __pyx_t_10, __pyx_t_11); - __pyx_t_4 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L23_exception_handled; - } - __pyx_L24_except_error:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - goto __pyx_L3_error; - __pyx_L23_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - __pyx_L29_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_12) { - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__9, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - goto __pyx_L21; - } - __pyx_L21:; - } - goto __pyx_L36; - __pyx_L16_error:; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L3_error; - __pyx_L36:; - } - - /* "lib/Naked/toolshed/c/network.pyx":133 - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: # <<<<<<<<<<<<<< - * print(" ") - * print("Download complete.") - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":134 - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - * print(" ") # <<<<<<<<<<<<<< - * print("Download complete.") - * return True # return True if successful write - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":135 - * if not suppress_output: - * print(" ") - * print("Download complete.") # <<<<<<<<<<<<<< - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_complete) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L37; - } - __pyx_L37:; - - /* "lib/Naked/toolshed/c/network.pyx":136 - * print(" ") - * print("Download complete.") - * return True # return True if successful write # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":137 - * print("Download complete.") - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_t_11); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_ce = __pyx_t_10; - - /* "lib/Naked/toolshed/c/network.pyx":138 - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":139 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_data_write_txt() method (Naked.toolshed.network.py)") - */ - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_10, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_e = __pyx_t_10; - - /* "lib/Naked/toolshed/c/network.pyx":140 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_data_write_txt() method (Naked.toolshed.network.py)") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":141 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_data_write_txt() method (Naked.toolshed.network.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __pyx_t_20 = PyNumber_Add(__pyx_kp_s_Naked_Framework_Error_Unable_to_2, __pyx_t_19); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = PyNumber_Add(__pyx_t_20, __pyx_kp_s_using_the_get_data_write_txt_me); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = PyTuple_New(1); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_19); - __Pyx_GIVEREF(__pyx_t_19); - __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_20, NULL); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - goto __pyx_L42; - } - __pyx_L42:; - - /* "lib/Naked/toolshed/c/network.pyx":142 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_data_write_txt() method (Naked.toolshed.network.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":109 - * # Tests: test_NETWORK.py :: test_http_get_text - * #------------------------------------------------------------------------------ - * def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_file_exists); - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_chunk); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XDECREF(__pyx_v_filepath); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":153 - * # Tests: test_NETWORK.py :: test_http_head - * #------------------------------------------------------------------------------ - * def head(self): # <<<<<<<<<<<<<< - * try: - * response = requests.head(self.url, timeout=self.request_timeout) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_11head(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_11head = {__Pyx_NAMESTR("head"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_11head, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_11head(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("head (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_10head(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_10head(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_response = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("head", 0); - - /* "lib/Naked/toolshed/c/network.pyx":154 - * #------------------------------------------------------------------------------ - * def head(self): - * try: # <<<<<<<<<<<<<< - * response = requests.head(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":155 - * def head(self): - * try: - * response = requests.head(self.url, timeout=self.request_timeout) # <<<<<<<<<<<<<< - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.headers - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_head); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_response = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":156 - * try: - * response = requests.head(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class # <<<<<<<<<<<<<< - * return response.headers - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":157 - * response = requests.head(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.headers # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_headers); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":158 - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.headers - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.head", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":159 - * return response.headers - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":160 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.head", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":161 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":162 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":163 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":153 - * # Tests: test_NETWORK.py :: test_http_head - * #------------------------------------------------------------------------------ - * def head(self): # <<<<<<<<<<<<<< - * try: - * response = requests.head(self.url, timeout=self.request_timeout) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.head", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":171 - * # returns text from the URL as a string - * #------------------------------------------------------------------------------ - * def post(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_13post(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_13post = {__Pyx_NAMESTR("post"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_13post, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_13post(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_follow_redirects = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("post (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_follow_redirects,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)((PyObject *)Py_True)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_follow_redirects); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "post") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_follow_redirects = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("post", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_12post(__pyx_self, __pyx_v_self, __pyx_v_follow_redirects); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_12post(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_follow_redirects) { - PyObject *__pyx_v_response = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("post", 0); - - /* "lib/Naked/toolshed/c/network.pyx":172 - * #------------------------------------------------------------------------------ - * def post(self, follow_redirects=True): - * try: # <<<<<<<<<<<<<< - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":173 - * def post(self, follow_redirects=True): - * try: - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) # <<<<<<<<<<<<<< - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.text - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_post); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_allow_redirects, __pyx_v_follow_redirects) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_response = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":174 - * try: - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class # <<<<<<<<<<<<<< - * return response.text - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":175 - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.text # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_text); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":176 - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.text - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":177 - * return response.text - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":178 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":179 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":180 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exit_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":181 - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":171 - * # returns text from the URL as a string - * #------------------------------------------------------------------------------ - * def post(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":188 - * # returns binary data from the URL - * #------------------------------------------------------------------------------ - * def post_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_15post_bin(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_15post_bin = {__Pyx_NAMESTR("post_bin"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_15post_bin, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_15post_bin(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("post_bin (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_14post_bin(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_14post_bin(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_response = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("post_bin", 0); - - /* "lib/Naked/toolshed/c/network.pyx":189 - * #------------------------------------------------------------------------------ - * def post_bin(self): - * try: # <<<<<<<<<<<<<< - * response = requests.post(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":190 - * def post_bin(self): - * try: - * response = requests.post(self.url, timeout=self.request_timeout) # <<<<<<<<<<<<<< - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.content - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_post); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timeout, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_response = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":191 - * try: - * response = requests.post(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class # <<<<<<<<<<<<<< - * return response.content - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":192 - * response = requests.post(self.url, timeout=self.request_timeout) - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.content # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_content); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":193 - * self.res = response # assign the response object from requests to a property on the instance of HTTP class - * return response.content - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_t_7); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":194 - * return response.content - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":195 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":196 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":197 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_exit_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":198 - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":188 - * # returns binary data from the URL - * #------------------------------------------------------------------------------ - * def post_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":206 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_17post_bin_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_17post_bin_write_file = {__Pyx_NAMESTR("post_bin_write_file"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_17post_bin_write_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_17post_bin_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - PyObject *__pyx_v_suppress_output = 0; - PyObject *__pyx_v_overwrite_existing = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("post_bin_write_file (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,&__pyx_n_s_suppress_output,&__pyx_n_s_overwrite_existing,0}; - PyObject* values[4] = {0,0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_kp_s_)); - values[2] = ((PyObject *)((PyObject *)Py_False)); - values[3] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_output); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_overwrite_existing); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "post_bin_write_file") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - __pyx_v_suppress_output = values[2]; - __pyx_v_overwrite_existing = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("post_bin_write_file", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_16post_bin_write_file(__pyx_self, __pyx_v_self, __pyx_v_filepath, __pyx_v_suppress_output, __pyx_v_overwrite_existing); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_16post_bin_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_file_exists = NULL; - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_chunk = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *(*__pyx_t_16)(PyObject *); - PyObject *__pyx_t_17 = NULL; - int __pyx_t_18; - PyObject *__pyx_t_19 = NULL; - PyObject *__pyx_t_20 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("post_bin_write_file", 0); - __Pyx_INCREF(__pyx_v_filepath); - - /* "lib/Naked/toolshed/c/network.pyx":207 - * #------------------------------------------------------------------------------ - * def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: # <<<<<<<<<<<<<< - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":208 - * def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: - * import os # used for os.fsync() method in the write # <<<<<<<<<<<<<< - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_os = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":210 - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: # <<<<<<<<<<<<<< - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_overwrite_existing); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_6 = ((!__pyx_t_5) != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":211 - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists # <<<<<<<<<<<<<< - * if file_exists(filepath): - * if not suppress_output: - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_file_exists); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_file_exists); - __Pyx_GIVEREF(__pyx_n_s_file_exists); - __pyx_t_7 = __Pyx_Import(__pyx_n_s_Naked_toolshed_system, __pyx_t_4, -1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_file_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_file_exists = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":212 - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): # <<<<<<<<<<<<<< - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - */ - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_file_exists, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":213 - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - * if not suppress_output: # <<<<<<<<<<<<<< - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_6) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":214 - * if file_exists(filepath): - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") # <<<<<<<<<<<<<< - * return False - * if (filepath == "" and len(self.url) > 1): - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_aborted_A_local_file_wi) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/network.pyx":215 - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False # <<<<<<<<<<<<<< - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/network.pyx":216 - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - * if (filepath == "" and len(self.url) > 1): # <<<<<<<<<<<<<< - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_filepath, __pyx_kp_s_, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_5) { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_8 > 1); - __pyx_t_9 = __pyx_t_6; - } else { - __pyx_t_9 = __pyx_t_5; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":217 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_split); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_filepath, __pyx_t_7); - __pyx_t_7 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/network.pyx":218 - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: # <<<<<<<<<<<<<< - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - * sys.stdout.flush() - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":219 - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user # <<<<<<<<<<<<<< - * sys.stdout.flush() - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = PyNumber_Add(__pyx_kp_s_Downloading_file_from, __pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_10, __pyx_kp_s__4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":220 - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - * sys.stdout.flush() # <<<<<<<<<<<<<< - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stdout); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_flush); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":221 - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - * sys.stdout.flush() - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) # <<<<<<<<<<<<<< - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_post); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_timeout, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_stream, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_response = __pyx_t_11; - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":222 - * sys.stdout.flush() - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response # <<<<<<<<<<<<<< - * with open(filepath, 'wb') as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":223 - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - */ - /*with:*/ { - __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __Pyx_INCREF(__pyx_n_s_wb); - PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_n_s_wb); - __Pyx_GIVEREF(__pyx_n_s_wb); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_10, __pyx_n_s_exit); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_t_10, __pyx_n_s_enter); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - /*try:*/ { - __Pyx_INCREF(__pyx_t_7); - __pyx_v_f = __pyx_t_7; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":224 - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): # <<<<<<<<<<<<<< - * f.write(chunk) - * f.flush() - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_iter_content); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_chunk_size, __pyx_int_2048) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (PyList_CheckExact(__pyx_t_11) || PyTuple_CheckExact(__pyx_t_11)) { - __pyx_t_10 = __pyx_t_11; __Pyx_INCREF(__pyx_t_10); __pyx_t_8 = 0; - __pyx_t_16 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_16 = Py_TYPE(__pyx_t_10)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - for (;;) { - if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_10)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_10)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_11 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_11); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_11 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_10)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_10)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_8); __Pyx_INCREF(__pyx_t_11); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_11 = PySequence_ITEM(__pyx_t_10, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else { - __pyx_t_11 = __pyx_t_16(__pyx_t_10); - if (unlikely(!__pyx_t_11)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_11); - } - __Pyx_XDECREF_SET(__pyx_v_chunk, __pyx_t_11); - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":225 - * with open(filepath, 'wb') as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) # <<<<<<<<<<<<<< - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_chunk); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_chunk); - __Pyx_GIVEREF(__pyx_v_chunk); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":226 - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - * f.flush() # <<<<<<<<<<<<<< - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_flush); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":227 - * f.write(chunk) - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk # <<<<<<<<<<<<<< - * if not suppress_output: - * print(" ") - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_fsync); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_fileno); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L29_try_end; - __pyx_L22_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":223 - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyTuple_Pack(3, __pyx_t_10, __pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_7, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __pyx_t_9 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_4); - __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L23_exception_handled; - } - __pyx_L24_except_error:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - goto __pyx_L3_error; - __pyx_L23_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - __pyx_L29_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_12) { - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__14, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - goto __pyx_L21; - } - __pyx_L21:; - } - goto __pyx_L36; - __pyx_L16_error:; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L3_error; - __pyx_L36:; - } - - /* "lib/Naked/toolshed/c/network.pyx":228 - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: # <<<<<<<<<<<<<< - * print(" ") - * print("Download complete.") # provide user with completion information - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":229 - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - * print(" ") # <<<<<<<<<<<<<< - * print("Download complete.") # provide user with completion information - * return True # return True if successful write - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":230 - * if not suppress_output: - * print(" ") - * print("Download complete.") # provide user with completion information # <<<<<<<<<<<<<< - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_complete) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L37; - } - __pyx_L37:; - - /* "lib/Naked/toolshed/c/network.pyx":231 - * print(" ") - * print("Download complete.") # provide user with completion information - * return True # return True if successful write # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":232 - * print("Download complete.") # provide user with completion information - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_11, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_t_11); - __pyx_v_ce = __pyx_t_11; - - /* "lib/Naked/toolshed/c/network.pyx":233 - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":234 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - */ - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_11); - __pyx_v_e = __pyx_t_11; - - /* "lib/Naked/toolshed/c/network.pyx":235 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":236 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __pyx_t_20 = PyNumber_Add(__pyx_kp_s_Naked_Framework_Error_Unable_to_6, __pyx_t_19); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = PyNumber_Add(__pyx_t_20, __pyx_kp_s_using_the_post_data_write_bin_m); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = PyTuple_New(1); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_19); - __Pyx_GIVEREF(__pyx_t_19); - __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_20, NULL); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - goto __pyx_L42; - } - __pyx_L42:; - - /* "lib/Naked/toolshed/c/network.pyx":237 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":206 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_bin_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_file_exists); - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_chunk); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XDECREF(__pyx_v_filepath); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":245 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_19post_txt_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_19post_txt_write_file = {__Pyx_NAMESTR("post_txt_write_file"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_19post_txt_write_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_19post_txt_write_file(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_filepath = 0; - PyObject *__pyx_v_suppress_output = 0; - PyObject *__pyx_v_overwrite_existing = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("post_txt_write_file (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_filepath,&__pyx_n_s_suppress_output,&__pyx_n_s_overwrite_existing,0}; - PyObject* values[4] = {0,0,0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_kp_s_)); - values[2] = ((PyObject *)((PyObject *)Py_False)); - values[3] = ((PyObject *)((PyObject *)Py_False)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filepath); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_output); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_overwrite_existing); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "post_txt_write_file") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_filepath = values[1]; - __pyx_v_suppress_output = values[2]; - __pyx_v_overwrite_existing = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("post_txt_write_file", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_18post_txt_write_file(__pyx_self, __pyx_v_self, __pyx_v_filepath, __pyx_v_suppress_output, __pyx_v_overwrite_existing); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_18post_txt_write_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_filepath, PyObject *__pyx_v_suppress_output, PyObject *__pyx_v_overwrite_existing) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_file_exists = NULL; - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_codecs = NULL; - PyObject *__pyx_v_f = NULL; - PyObject *__pyx_v_chunk = NULL; - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *(*__pyx_t_16)(PyObject *); - PyObject *__pyx_t_17 = NULL; - int __pyx_t_18; - PyObject *__pyx_t_19 = NULL; - PyObject *__pyx_t_20 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("post_txt_write_file", 0); - __Pyx_INCREF(__pyx_v_filepath); - - /* "lib/Naked/toolshed/c/network.pyx":246 - * #------------------------------------------------------------------------------ - * def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: # <<<<<<<<<<<<<< - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":247 - * def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - * try: - * import os # used for os.fsync() method in the write # <<<<<<<<<<<<<< - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_os = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":249 - * import os # used for os.fsync() method in the write - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: # <<<<<<<<<<<<<< - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - */ - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_overwrite_existing); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_6 = ((!__pyx_t_5) != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":250 - * # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists # <<<<<<<<<<<<<< - * if file_exists(filepath): - * if not suppress_output: - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_file_exists); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_file_exists); - __Pyx_GIVEREF(__pyx_n_s_file_exists); - __pyx_t_7 = __Pyx_Import(__pyx_n_s_Naked_toolshed_system, __pyx_t_4, -1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_7, __pyx_n_s_file_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_file_exists = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":251 - * if not overwrite_existing: - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): # <<<<<<<<<<<<<< - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - */ - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_file_exists, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/network.pyx":252 - * from Naked.toolshed.system import file_exists - * if file_exists(filepath): - * if not suppress_output: # <<<<<<<<<<<<<< - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_6) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":253 - * if file_exists(filepath): - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") # <<<<<<<<<<<<<< - * return False - * if (filepath == "" and len(self.url) > 1): - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_aborted_A_local_file_wi) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/network.pyx":254 - * if not suppress_output: - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False # <<<<<<<<<<<<<< - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/network.pyx":255 - * print("Download aborted. A local file with the requested filename exists on the path.") - * return False - * if (filepath == "" and len(self.url) > 1): # <<<<<<<<<<<<<< - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_filepath, __pyx_kp_s_, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_5) { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_8 > 1); - __pyx_t_9 = __pyx_t_6; - } else { - __pyx_t_9 = __pyx_t_5; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":256 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_split); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_4, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF_SET(__pyx_v_filepath, __pyx_t_7); - __pyx_t_7 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/network.pyx":257 - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: # <<<<<<<<<<<<<< - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - * sys.stdout.flush() - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":258 - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user # <<<<<<<<<<<<<< - * sys.stdout.flush() - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stdout); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = PyNumber_Add(__pyx_kp_s_Downloading_file_from, __pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyNumber_Add(__pyx_t_10, __pyx_kp_s__4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":259 - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - * sys.stdout.flush() # <<<<<<<<<<<<<< - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stdout); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_flush); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/network.pyx":260 - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - * sys.stdout.flush() - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) # <<<<<<<<<<<<<< - * self.res = response - * import codecs - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_post); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = PyDict_New(); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_request_timeout); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_timeout, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_stream, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_v_response = __pyx_t_11; - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":261 - * sys.stdout.flush() - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response # <<<<<<<<<<<<<< - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_res, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":262 - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * import codecs # <<<<<<<<<<<<<< - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - */ - __pyx_t_11 = __Pyx_Import(__pyx_n_s_codecs, 0, -1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_v_codecs = __pyx_t_11; - __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":263 - * self.res = response - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - */ - /*with:*/ { - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_codecs, __pyx_n_s_open); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_7 = PyDict_New(); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_mode, __pyx_n_s_w) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_encoding, __pyx_kp_s_utf_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, __pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_12 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L16_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /*try:*/ { - { - __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - /*try:*/ { - __Pyx_INCREF(__pyx_t_10); - __pyx_v_f = __pyx_t_10; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":264 - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): # <<<<<<<<<<<<<< - * chunk = chunk.decode('utf-8') - * f.write(chunk) - */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_response, __pyx_n_s_iter_content); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_chunk_size, __pyx_int_2048) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_7) || PyTuple_CheckExact(__pyx_t_7)) { - __pyx_t_4 = __pyx_t_7; __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0; - __pyx_t_16 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_16 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - for (;;) { - if (!__pyx_t_16 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else if (!__pyx_t_16 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_16(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_chunk, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":265 - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') # <<<<<<<<<<<<<< - * f.write(chunk) - * f.flush() - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_chunk, __pyx_n_s_decode); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF_SET(__pyx_v_chunk, __pyx_t_10); - __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":266 - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - * f.write(chunk) # <<<<<<<<<<<<<< - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_chunk); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_chunk); - __Pyx_GIVEREF(__pyx_v_chunk); - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_7, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":267 - * chunk = chunk.decode('utf-8') - * f.write(chunk) - * f.flush() # <<<<<<<<<<<<<< - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_flush); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":268 - * f.write(chunk) - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk # <<<<<<<<<<<<<< - * if not suppress_output: - * print(" ") - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_fsync); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_fileno); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L22_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L29_try_end; - __pyx_L22_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":263 - * self.res = response - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - */ - /*except:*/ { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_10, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_7 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_7, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_17); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (__pyx_t_5 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - __pyx_t_9 = ((!(__pyx_t_5 != 0)) != 0); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ErrRestore(__pyx_t_4, __pyx_t_10, __pyx_t_11); - __pyx_t_4 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L23_exception_handled; - } - __pyx_L24_except_error:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - goto __pyx_L3_error; - __pyx_L23_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - __pyx_L29_try_end:; - } - } - /*finally:*/ { - /*normal exit:*/{ - if (__pyx_t_12) { - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__17, NULL); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - goto __pyx_L21; - } - __pyx_L21:; - } - goto __pyx_L36; - __pyx_L16_error:; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L3_error; - __pyx_L36:; - } - - /* "lib/Naked/toolshed/c/network.pyx":269 - * f.flush() - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: # <<<<<<<<<<<<<< - * print(" ") - * print("Download complete.") # provide user with completion information - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_output); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((!__pyx_t_9) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":270 - * os.fsync(f.fileno()) # flush all internal buffers to disk - * if not suppress_output: - * print(" ") # <<<<<<<<<<<<<< - * print("Download complete.") # provide user with completion information - * return True # return True if successful write - */ - if (__Pyx_PrintOne(0, __pyx_kp_s__6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/network.pyx":271 - * if not suppress_output: - * print(" ") - * print("Download complete.") # provide user with completion information # <<<<<<<<<<<<<< - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - */ - if (__Pyx_PrintOne(0, __pyx_kp_s_Download_complete) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L37; - } - __pyx_L37:; - - /* "lib/Naked/toolshed/c/network.pyx":272 - * print(" ") - * print("Download complete.") # provide user with completion information - * return True # return True if successful write # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":273 - * print("Download complete.") # provide user with completion information - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_t_11); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_11, &__pyx_t_10, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_ce = __pyx_t_10; - - /* "lib/Naked/toolshed/c/network.pyx":274 - * return True # return True if successful write - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":275 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - */ - __pyx_t_18 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_18) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_10, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_e = __pyx_t_10; - - /* "lib/Naked/toolshed/c/network.pyx":276 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/network.pyx":277 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_19, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_url); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __pyx_t_20 = PyNumber_Add(__pyx_kp_s_Naked_Framework_Error_Unable_to_6, __pyx_t_19); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - __pyx_t_19 = PyNumber_Add(__pyx_t_20, __pyx_kp_s_using_the_post_data_write_bin_m); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __pyx_t_20 = PyTuple_New(1); if (unlikely(!__pyx_t_20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_20); - PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_19); - __Pyx_GIVEREF(__pyx_t_19); - __pyx_t_19 = 0; - __pyx_t_19 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_20, NULL); if (unlikely(!__pyx_t_19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0; - __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0; - goto __pyx_L42; - } - __pyx_L42:; - - /* "lib/Naked/toolshed/c/network.pyx":278 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":245 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_txt_write_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_file_exists); - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_codecs); - __Pyx_XDECREF(__pyx_v_f); - __Pyx_XDECREF(__pyx_v_chunk); - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XDECREF(__pyx_v_filepath); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":287 - * # Tests: test_NETWORK.py :: test_http_get_response_check - * #------------------------------------------------------------------------------ - * def response(self): # <<<<<<<<<<<<<< - * try: - * return self.res - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_21response(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_21response = {__Pyx_NAMESTR("response"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_21response, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_21response(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("response (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_20response(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_20response(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("response", 0); - - /* "lib/Naked/toolshed/c/network.pyx":288 - * #------------------------------------------------------------------------------ - * def response(self): - * try: # <<<<<<<<<<<<<< - * return self.res - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":289 - * def response(self): - * try: - * return self.res # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":290 - * try: - * return self.res - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") - */ - __pyx_t_5 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_5) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.response", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/network.pyx":291 - * return self.res - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/network.pyx":292 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/network.pyx":293 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 293; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":287 - * # Tests: test_NETWORK.py :: test_http_get_response_check - * #------------------------------------------------------------------------------ - * def response(self): # <<<<<<<<<<<<<< - * try: - * return self.res - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.response", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":301 - * # Tests: test_NETWORK.py :: - * #------------------------------------------------------------------------------ - * def get_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.get() #run the get request - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_23get_status_ok(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_23get_status_ok = {__Pyx_NAMESTR("get_status_ok"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_23get_status_ok, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_23get_status_ok(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_status_ok (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_22get_status_ok(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_22get_status_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_status_ok", 0); - - /* "lib/Naked/toolshed/c/network.pyx":302 - * #------------------------------------------------------------------------------ - * def get_status_ok(self): - * try: # <<<<<<<<<<<<<< - * self.get() #run the get request - * if self.res and self.res.status_code: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":303 - * def get_status_ok(self): - * try: - * self.get() #run the get request # <<<<<<<<<<<<<< - * if self.res and self.res.status_code: - * return (self.res.status_code == requests.codes.ok) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":304 - * try: - * self.get() #run the get request - * if self.res and self.res.status_code: # <<<<<<<<<<<<<< - * return (self.res.status_code == requests.codes.ok) - * else: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_status_code); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_t_7; - } else { - __pyx_t_8 = __pyx_t_6; - } - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/network.pyx":305 - * self.get() #run the get request - * if self.res and self.res.status_code: - * return (self.res.status_code == requests.codes.ok) # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_status_code); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_codes); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ok); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/network.pyx":307 - * return (self.res.status_code == requests.codes.ok) - * else: - * return False # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":308 - * else: - * return False - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_t_9); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_status_ok", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":309 - * return False - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":310 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") - */ - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_status_ok", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":311 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") - * raise e - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/network.pyx":312 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_stderr); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L16; - } - __pyx_L16:; - - /* "lib/Naked/toolshed/c/network.pyx":313 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":301 - * # Tests: test_NETWORK.py :: - * #------------------------------------------------------------------------------ - * def get_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.get() #run the get request - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.get_status_ok", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/network.pyx":320 - * # Note: method runs its own post method, not necessary to run separately - * #------------------------------------------------------------------------------ - * def post_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.post() #run the post request - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_25post_status_ok(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_25post_status_ok = {__Pyx_NAMESTR("post_status_ok"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_25post_status_ok, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_7network_4HTTP_25post_status_ok(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("post_status_ok (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_24post_status_ok(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_7network_4HTTP_24post_status_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - CYTHON_UNUSED PyObject *__pyx_v_ce = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("post_status_ok", 0); - - /* "lib/Naked/toolshed/c/network.pyx":321 - * #------------------------------------------------------------------------------ - * def post_status_ok(self): - * try: # <<<<<<<<<<<<<< - * self.post() #run the post request - * if self.res and self.res.status_code: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/network.pyx":322 - * def post_status_ok(self): - * try: - * self.post() #run the post request # <<<<<<<<<<<<<< - * if self.res and self.res.status_code: - * return (self.res.status_code == requests.codes.ok) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_post); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":323 - * try: - * self.post() #run the post request - * if self.res and self.res.status_code: # <<<<<<<<<<<<<< - * return (self.res.status_code == requests.codes.ok) - * else: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_status_code); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_8 = __pyx_t_7; - } else { - __pyx_t_8 = __pyx_t_6; - } - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/network.pyx":324 - * self.post() #run the post request - * if self.res and self.res.status_code: - * return (self.res.status_code == requests.codes.ok) # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_res); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_status_code); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_codes); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ok); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_9; - __pyx_t_9 = 0; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/network.pyx":326 - * return (self.res.status_code == requests.codes.ok) - * else: - * return False # <<<<<<<<<<<<<< - * except requests.exceptions.ConnectionError as ce: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":327 - * else: - * return False - * except requests.exceptions.ConnectionError as ce: # <<<<<<<<<<<<<< - * return False - * except Exception as e: - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_requests); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_exceptions); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ConnectionError); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_t_9); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_status_ok", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ce = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":328 - * return False - * except requests.exceptions.ConnectionError as ce: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/network.pyx":329 - * except requests.exceptions.ConnectionError as ce: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") - */ - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_status_ok", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/network.pyx":330 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") - * raise e - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/network.pyx":331 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_stderr); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L16; - } - __pyx_L16:; - - /* "lib/Naked/toolshed/c/network.pyx":332 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") - * raise e # <<<<<<<<<<<<<< - * - * if __name__ == '__main__': - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/network.pyx":320 - * # Note: method runs its own post method, not necessary to run separately - * #------------------------------------------------------------------------------ - * def post_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.post() #run the post request - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.network.HTTP.post_status_ok", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ce); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("network"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_, __pyx_k_, sizeof(__pyx_k_), 0, 0, 1, 0}, - {&__pyx_n_s_ConnectionError, __pyx_k_ConnectionError, sizeof(__pyx_k_ConnectionError), 0, 0, 1, 1}, - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_kp_s_Download_aborted_A_local_file_wi, __pyx_k_Download_aborted_A_local_file_wi, sizeof(__pyx_k_Download_aborted_A_local_file_wi), 0, 0, 1, 0}, - {&__pyx_kp_s_Download_complete, __pyx_k_Download_complete, sizeof(__pyx_k_Download_complete), 0, 0, 1, 0}, - {&__pyx_kp_s_Downloading_file_from, __pyx_k_Downloading_file_from, sizeof(__pyx_k_Downloading_file_from), 0, 0, 1, 0}, - {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP, __pyx_k_HTTP, sizeof(__pyx_k_HTTP), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP___init, __pyx_k_HTTP___init, sizeof(__pyx_k_HTTP___init), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_get, __pyx_k_HTTP_get, sizeof(__pyx_k_HTTP_get), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_get_bin, __pyx_k_HTTP_get_bin, sizeof(__pyx_k_HTTP_get_bin), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_get_bin_write_file, __pyx_k_HTTP_get_bin_write_file, sizeof(__pyx_k_HTTP_get_bin_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_get_status_ok, __pyx_k_HTTP_get_status_ok, sizeof(__pyx_k_HTTP_get_status_ok), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_get_txt_write_file, __pyx_k_HTTP_get_txt_write_file, sizeof(__pyx_k_HTTP_get_txt_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_head, __pyx_k_HTTP_head, sizeof(__pyx_k_HTTP_head), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_post, __pyx_k_HTTP_post, sizeof(__pyx_k_HTTP_post), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_post_bin, __pyx_k_HTTP_post_bin, sizeof(__pyx_k_HTTP_post_bin), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_post_bin_write_file, __pyx_k_HTTP_post_bin_write_file, sizeof(__pyx_k_HTTP_post_bin_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_post_status_ok, __pyx_k_HTTP_post_status_ok, sizeof(__pyx_k_HTTP_post_status_ok), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_post_txt_write_file, __pyx_k_HTTP_post_txt_write_file, sizeof(__pyx_k_HTTP_post_txt_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_HTTP_response, __pyx_k_HTTP_response, sizeof(__pyx_k_HTTP_response), 0, 0, 1, 1}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to, __pyx_k_Naked_Framework_Error_Unable_to, sizeof(__pyx_k_Naked_Framework_Error_Unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_2, __pyx_k_Naked_Framework_Error_Unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_3, __pyx_k_Naked_Framework_Error_Unable_to_3, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_4, __pyx_k_Naked_Framework_Error_Unable_to_4, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_5, __pyx_k_Naked_Framework_Error_Unable_to_5, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_6, __pyx_k_Naked_Framework_Error_Unable_to_6, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_6), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_7, __pyx_k_Naked_Framework_Error_Unable_to_7, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_7), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_8, __pyx_k_Naked_Framework_Error_Unable_to_8, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_8), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_Unable_to_9, __pyx_k_Naked_Framework_Error_Unable_to_9, sizeof(__pyx_k_Naked_Framework_Error_Unable_to_9), 0, 0, 1, 0}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_system, __pyx_k_Naked_toolshed_system, sizeof(__pyx_k_Naked_toolshed_system), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, - {&__pyx_kp_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 0}, - {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0}, - {&__pyx_n_s_allow_redirects, __pyx_k_allow_redirects, sizeof(__pyx_k_allow_redirects), 0, 0, 1, 1}, - {&__pyx_n_s_ce, __pyx_k_ce, sizeof(__pyx_k_ce), 0, 0, 1, 1}, - {&__pyx_n_s_chunk, __pyx_k_chunk, sizeof(__pyx_k_chunk), 0, 0, 1, 1}, - {&__pyx_n_s_chunk_size, __pyx_k_chunk_size, sizeof(__pyx_k_chunk_size), 0, 0, 1, 1}, - {&__pyx_n_s_codecs, __pyx_k_codecs, sizeof(__pyx_k_codecs), 0, 0, 1, 1}, - {&__pyx_n_s_codes, __pyx_k_codes, sizeof(__pyx_k_codes), 0, 0, 1, 1}, - {&__pyx_n_s_content, __pyx_k_content, sizeof(__pyx_k_content), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_encoding, __pyx_k_encoding, sizeof(__pyx_k_encoding), 0, 0, 1, 1}, - {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, - {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1}, - {&__pyx_n_s_exceptions, __pyx_k_exceptions, sizeof(__pyx_k_exceptions), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_exit_2, __pyx_k_exit_2, sizeof(__pyx_k_exit_2), 0, 0, 1, 1}, - {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1}, - {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, - {&__pyx_n_s_file_exists, __pyx_k_file_exists, sizeof(__pyx_k_file_exists), 0, 0, 1, 1}, - {&__pyx_n_s_fileno, __pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 0, 1, 1}, - {&__pyx_n_s_filepath, __pyx_k_filepath, sizeof(__pyx_k_filepath), 0, 0, 1, 1}, - {&__pyx_n_s_flush, __pyx_k_flush, sizeof(__pyx_k_flush), 0, 0, 1, 1}, - {&__pyx_n_s_follow_redirects, __pyx_k_follow_redirects, sizeof(__pyx_k_follow_redirects), 0, 0, 1, 1}, - {&__pyx_n_s_fsync, __pyx_k_fsync, sizeof(__pyx_k_fsync), 0, 0, 1, 1}, - {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, - {&__pyx_n_s_get_bin, __pyx_k_get_bin, sizeof(__pyx_k_get_bin), 0, 0, 1, 1}, - {&__pyx_n_s_get_bin_write_file, __pyx_k_get_bin_write_file, sizeof(__pyx_k_get_bin_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_get_status_ok, __pyx_k_get_status_ok, sizeof(__pyx_k_get_status_ok), 0, 0, 1, 1}, - {&__pyx_n_s_get_txt_write_file, __pyx_k_get_txt_write_file, sizeof(__pyx_k_get_txt_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_head, __pyx_k_head, sizeof(__pyx_k_head), 0, 0, 1, 1}, - {&__pyx_n_s_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_iter_content, __pyx_k_iter_content, sizeof(__pyx_k_iter_content), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_network, __pyx_k_lib_Naked_toolshed_c_network, sizeof(__pyx_k_lib_Naked_toolshed_c_network), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_ok, __pyx_k_ok, sizeof(__pyx_k_ok), 0, 0, 1, 1}, - {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1}, - {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, - {&__pyx_n_s_overwrite_existing, __pyx_k_overwrite_existing, sizeof(__pyx_k_overwrite_existing), 0, 0, 1, 1}, - {&__pyx_n_s_post, __pyx_k_post, sizeof(__pyx_k_post), 0, 0, 1, 1}, - {&__pyx_n_s_post_bin, __pyx_k_post_bin, sizeof(__pyx_k_post_bin), 0, 0, 1, 1}, - {&__pyx_n_s_post_bin_write_file, __pyx_k_post_bin_write_file, sizeof(__pyx_k_post_bin_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_post_status_ok, __pyx_k_post_status_ok, sizeof(__pyx_k_post_status_ok), 0, 0, 1, 1}, - {&__pyx_n_s_post_txt_write_file, __pyx_k_post_txt_write_file, sizeof(__pyx_k_post_txt_write_file), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_request_timeout, __pyx_k_request_timeout, sizeof(__pyx_k_request_timeout), 0, 0, 1, 1}, - {&__pyx_n_s_requests, __pyx_k_requests, sizeof(__pyx_k_requests), 0, 0, 1, 1}, - {&__pyx_n_s_res, __pyx_k_res, sizeof(__pyx_k_res), 0, 0, 1, 1}, - {&__pyx_n_s_response, __pyx_k_response, sizeof(__pyx_k_response), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, - {&__pyx_n_s_status_code, __pyx_k_status_code, sizeof(__pyx_k_status_code), 0, 0, 1, 1}, - {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1}, - {&__pyx_n_s_stdout, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1}, - {&__pyx_n_s_stream, __pyx_k_stream, sizeof(__pyx_k_stream), 0, 0, 1, 1}, - {&__pyx_n_s_suppress_output, __pyx_k_suppress_output, sizeof(__pyx_k_suppress_output), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, - {&__pyx_n_s_timeout, __pyx_k_timeout, sizeof(__pyx_k_timeout), 0, 0, 1, 1}, - {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, - {&__pyx_kp_s_using_the_get_bin_write_file_me, __pyx_k_using_the_get_bin_write_file_me, sizeof(__pyx_k_using_the_get_bin_write_file_me), 0, 0, 1, 0}, - {&__pyx_kp_s_using_the_get_data_method_Naked, __pyx_k_using_the_get_data_method_Naked, sizeof(__pyx_k_using_the_get_data_method_Naked), 0, 0, 1, 0}, - {&__pyx_kp_s_using_the_get_data_write_txt_me, __pyx_k_using_the_get_data_write_txt_me, sizeof(__pyx_k_using_the_get_data_write_txt_me), 0, 0, 1, 0}, - {&__pyx_kp_s_using_the_get_method_Naked_tool, __pyx_k_using_the_get_method_Naked_tool, sizeof(__pyx_k_using_the_get_method_Naked_tool), 0, 0, 1, 0}, - {&__pyx_kp_s_using_the_post_data_write_bin_m, __pyx_k_using_the_post_data_write_bin_m, sizeof(__pyx_k_using_the_post_data_write_bin_m), 0, 0, 1, 0}, - {&__pyx_kp_s_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 0, 1, 0}, - {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1}, - {&__pyx_n_s_wb, __pyx_k_wb, sizeof(__pyx_k_wb), 0, 0, 1, 1}, - {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/network.pyx":80 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "lib/Naked/toolshed/c/network.pyx":86 - * response = requests.get(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - */ - __pyx_tuple__5 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "lib/Naked/toolshed/c/network.pyx":120 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "lib/Naked/toolshed/c/network.pyx":129 - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') # <<<<<<<<<<<<<< - * f.write(chunk) - * f.flush() - */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - - /* "lib/Naked/toolshed/c/network.pyx":127 - * self.res = response - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - */ - __pyx_tuple__9 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "lib/Naked/toolshed/c/network.pyx":162 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_3); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "lib/Naked/toolshed/c/network.pyx":180 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_4); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "lib/Naked/toolshed/c/network.pyx":197 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_5); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - - /* "lib/Naked/toolshed/c/network.pyx":217 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - */ - __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - - /* "lib/Naked/toolshed/c/network.pyx":223 - * response = requests.post(self.url, timeout=self.request_timeout, stream=True) - * self.res = response - * with open(filepath, 'wb') as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * f.write(chunk) - */ - __pyx_tuple__14 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - - /* "lib/Naked/toolshed/c/network.pyx":256 - * return False - * if (filepath == "" and len(self.url) > 1): - * filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified # <<<<<<<<<<<<<< - * if not suppress_output: - * sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s__2); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - - /* "lib/Naked/toolshed/c/network.pyx":265 - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') # <<<<<<<<<<<<<< - * f.write(chunk) - * f.flush() - */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - - /* "lib/Naked/toolshed/c/network.pyx":263 - * self.res = response - * import codecs - * with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data # <<<<<<<<<<<<<< - * for chunk in response.iter_content(chunk_size=2048): - * chunk = chunk.decode('utf-8') - */ - __pyx_tuple__17 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - - /* "lib/Naked/toolshed/c/network.pyx":292 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_7); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 292; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - - /* "lib/Naked/toolshed/c/network.pyx":312 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_8); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - - /* "lib/Naked/toolshed/c/network.pyx":331 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Unable_to_9); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - - /* "lib/Naked/toolshed/c/network.pyx":15 - * #------------------------------------------------------------------------------ - * class HTTP(): - * def __init__(self, url="", request_timeout=10): # <<<<<<<<<<<<<< - * self.url = url - * self.request_timeout = request_timeout - */ - __pyx_tuple__21 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_url, __pyx_n_s_request_timeout); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__23 = PyTuple_Pack(2, ((PyObject*)__pyx_kp_s_), ((PyObject *)__pyx_int_10)); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - - /* "lib/Naked/toolshed/c/network.pyx":32 - * # test_http_post_reponse_change, test_http_get_response_check - * #------------------------------------------------------------------------------ - * def get(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - __pyx_tuple__24 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_follow_redirects, __pyx_n_s_response, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__24); - __Pyx_GIVEREF(__pyx_tuple__24); - __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__26 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - - /* "lib/Naked/toolshed/c/network.pyx":49 - * # returns data stream with raw binary data - * #------------------------------------------------------------------------------ - * def get_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout) - */ - __pyx_tuple__27 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_response, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get_bin, 49, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":69 - * # Tests: test_NETWORK.py :: test_http_get_binary - * #------------------------------------------------------------------------------ - * def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_tuple__29 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_filepath, __pyx_n_s_suppress_output, __pyx_n_s_overwrite_existing, __pyx_n_s_os, __pyx_n_s_file_exists, __pyx_n_s_response, __pyx_n_s_f, __pyx_n_s_chunk, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(4, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get_bin_write_file, 69, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__31 = PyTuple_Pack(3, ((PyObject*)__pyx_kp_s_), ((PyObject *)Py_False), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - - /* "lib/Naked/toolshed/c/network.pyx":109 - * # Tests: test_NETWORK.py :: test_http_get_text - * #------------------------------------------------------------------------------ - * def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_tuple__32 = PyTuple_Pack(12, __pyx_n_s_self, __pyx_n_s_filepath, __pyx_n_s_suppress_output, __pyx_n_s_overwrite_existing, __pyx_n_s_os, __pyx_n_s_file_exists, __pyx_n_s_response, __pyx_n_s_codecs, __pyx_n_s_f, __pyx_n_s_chunk, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); - __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get_txt_write_file, 109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__34 = PyTuple_Pack(3, ((PyObject*)__pyx_kp_s_), ((PyObject *)Py_False), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__34); - __Pyx_GIVEREF(__pyx_tuple__34); - - /* "lib/Naked/toolshed/c/network.pyx":153 - * # Tests: test_NETWORK.py :: test_http_head - * #------------------------------------------------------------------------------ - * def head(self): # <<<<<<<<<<<<<< - * try: - * response = requests.head(self.url, timeout=self.request_timeout) - */ - __pyx_tuple__35 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_response, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_head, 153, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":171 - * # returns text from the URL as a string - * #------------------------------------------------------------------------------ - * def post(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - __pyx_tuple__37 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_follow_redirects, __pyx_n_s_response, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_post, 171, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__39 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__39); - __Pyx_GIVEREF(__pyx_tuple__39); - - /* "lib/Naked/toolshed/c/network.pyx":188 - * # returns binary data from the URL - * #------------------------------------------------------------------------------ - * def post_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout) - */ - __pyx_tuple__40 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_response, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__40); - __Pyx_GIVEREF(__pyx_tuple__40); - __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_post_bin, 188, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":206 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_tuple__42 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_filepath, __pyx_n_s_suppress_output, __pyx_n_s_overwrite_existing, __pyx_n_s_os, __pyx_n_s_file_exists, __pyx_n_s_response, __pyx_n_s_f, __pyx_n_s_chunk, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__42); - __Pyx_GIVEREF(__pyx_tuple__42); - __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(4, 0, 11, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_post_bin_write_file, 206, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__44 = PyTuple_Pack(3, ((PyObject*)__pyx_kp_s_), ((PyObject *)Py_False), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__44); - __Pyx_GIVEREF(__pyx_tuple__44); - - /* "lib/Naked/toolshed/c/network.pyx":245 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_tuple__45 = PyTuple_Pack(12, __pyx_n_s_self, __pyx_n_s_filepath, __pyx_n_s_suppress_output, __pyx_n_s_overwrite_existing, __pyx_n_s_os, __pyx_n_s_file_exists, __pyx_n_s_response, __pyx_n_s_codecs, __pyx_n_s_f, __pyx_n_s_chunk, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__45); - __Pyx_GIVEREF(__pyx_tuple__45); - __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(4, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_post_txt_write_file, 245, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__47 = PyTuple_Pack(3, ((PyObject*)__pyx_kp_s_), ((PyObject *)Py_False), ((PyObject *)Py_False)); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__47); - __Pyx_GIVEREF(__pyx_tuple__47); - - /* "lib/Naked/toolshed/c/network.pyx":287 - * # Tests: test_NETWORK.py :: test_http_get_response_check - * #------------------------------------------------------------------------------ - * def response(self): # <<<<<<<<<<<<<< - * try: - * return self.res - */ - __pyx_tuple__48 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_e); if (unlikely(!__pyx_tuple__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__48); - __Pyx_GIVEREF(__pyx_tuple__48); - __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_response, 287, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":301 - * # Tests: test_NETWORK.py :: - * #------------------------------------------------------------------------------ - * def get_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.get() #run the get request - */ - __pyx_tuple__50 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__50); - __Pyx_GIVEREF(__pyx_tuple__50); - __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get_status_ok, 301, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/network.pyx":320 - * # Note: method runs its own post method, not necessary to run separately - * #------------------------------------------------------------------------------ - * def post_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.post() #run the post request - */ - __pyx_tuple__52 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_ce, __pyx_n_s_e); if (unlikely(!__pyx_tuple__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__52); - __Pyx_GIVEREF(__pyx_tuple__52); - __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__52, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_post_status_ok, 320, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_2048 = PyInt_FromLong(2048); if (unlikely(!__pyx_int_2048)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initnetwork(void); /*proto*/ -PyMODINIT_FUNC initnetwork(void) -#else -PyMODINIT_FUNC PyInit_network(void); /*proto*/ -PyMODINIT_FUNC PyInit_network(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_network(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("network"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__network) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.network")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.network", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/network.pyx":5 - * # cython: profile=False - * - * import sys # <<<<<<<<<<<<<< - * import requests - * from Naked.settings import debug as DEBUG_FLAG - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":6 - * - * import sys - * import requests # <<<<<<<<<<<<<< - * from Naked.settings import debug as DEBUG_FLAG - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_requests, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_requests, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":7 - * import sys - * import requests - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":14 - * # Uses the requests external library to handle HTTP requests and response object (available on PyPI) - * #------------------------------------------------------------------------------ - * class HTTP(): # <<<<<<<<<<<<<< - * def __init__(self, url="", request_timeout=10): - * self.url = url - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_HTTP, __pyx_n_s_HTTP, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_network, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/network.pyx":15 - * #------------------------------------------------------------------------------ - * class HTTP(): - * def __init__(self, url="", request_timeout=10): # <<<<<<<<<<<<<< - * self.url = url - * self.request_timeout = request_timeout - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_1__init__, 0, __pyx_n_s_HTTP___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__23); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":32 - * # test_http_post_reponse_change, test_http_get_response_check - * #------------------------------------------------------------------------------ - * def get(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_3get, 0, __pyx_n_s_HTTP_get, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__26); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":49 - * # returns data stream with raw binary data - * #------------------------------------------------------------------------------ - * def get_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.get(self.url, timeout=self.request_timeout) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_5get_bin, 0, __pyx_n_s_HTTP_get_bin, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get_bin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":69 - * # Tests: test_NETWORK.py :: test_http_get_binary - * #------------------------------------------------------------------------------ - * def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_7get_bin_write_file, 0, __pyx_n_s_HTTP_get_bin_write_file, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__31); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get_bin_write_file, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":109 - * # Tests: test_NETWORK.py :: test_http_get_text - * #------------------------------------------------------------------------------ - * def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_9get_txt_write_file, 0, __pyx_n_s_HTTP_get_txt_write_file, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__33)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__34); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get_txt_write_file, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":153 - * # Tests: test_NETWORK.py :: test_http_head - * #------------------------------------------------------------------------------ - * def head(self): # <<<<<<<<<<<<<< - * try: - * response = requests.head(self.url, timeout=self.request_timeout) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_11head, 0, __pyx_n_s_HTTP_head, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_head, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":171 - * # returns text from the URL as a string - * #------------------------------------------------------------------------------ - * def post(self, follow_redirects=True): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_13post, 0, __pyx_n_s_HTTP_post, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__39); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_post, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":188 - * # returns binary data from the URL - * #------------------------------------------------------------------------------ - * def post_bin(self): # <<<<<<<<<<<<<< - * try: - * response = requests.post(self.url, timeout=self.request_timeout) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_15post_bin, 0, __pyx_n_s_HTTP_post_bin, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_post_bin, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":206 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_17post_bin_write_file, 0, __pyx_n_s_HTTP_post_bin_write_file, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__44); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_post_bin_write_file, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":245 - * # returns a boolean that indicates the success of the file write - * #------------------------------------------------------------------------------ - * def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): # <<<<<<<<<<<<<< - * try: - * import os # used for os.fsync() method in the write - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_19post_txt_write_file, 0, __pyx_n_s_HTTP_post_txt_write_file, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_tuple__47); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_post_txt_write_file, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":287 - * # Tests: test_NETWORK.py :: test_http_get_response_check - * #------------------------------------------------------------------------------ - * def response(self): # <<<<<<<<<<<<<< - * try: - * return self.res - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_21response, 0, __pyx_n_s_HTTP_response, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_response, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":301 - * # Tests: test_NETWORK.py :: - * #------------------------------------------------------------------------------ - * def get_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.get() #run the get request - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_23get_status_ok, 0, __pyx_n_s_HTTP_get_status_ok, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get_status_ok, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":320 - * # Note: method runs its own post method, not necessary to run separately - * #------------------------------------------------------------------------------ - * def post_status_ok(self): # <<<<<<<<<<<<<< - * try: - * self.post() #run the post request - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_7network_4HTTP_25post_status_ok, 0, __pyx_n_s_HTTP_post_status_ok, NULL, __pyx_n_s_lib_Naked_toolshed_c_network, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_post_status_ok, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":14 - * # Uses the requests external library to handle HTTP requests and response object (available on PyPI) - * #------------------------------------------------------------------------------ - * class HTTP(): # <<<<<<<<<<<<<< - * def __init__(self, url="", request_timeout=10): - * self.url = url - */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_HTTP, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_HTTP, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/network.pyx":334 - * raise e - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - * #------------------------------------------------------------------------------ - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_3) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/network.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.network", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.network"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static PyObject *__Pyx_GetStdout(void) { - PyObject *f = PySys_GetObject((char *)"stdout"); - if (!f) { - PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); - } - return f; -} -static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { - int i; - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { - PyObject* v; - if (PyFile_SoftSpace(f, 1)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - v = PyTuple_GET_ITEM(arg_tuple, i); - if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) - goto error; - if (PyString_Check(v)) { - char *s = PyString_AsString(v); - Py_ssize_t len = PyString_Size(v); - if (len > 0) { - switch (s[len-1]) { - case ' ': break; - case '\f': case '\r': case '\n': case '\t': case '\v': - PyFile_SoftSpace(f, 0); - break; - default: break; - } - } - } - } - if (newline) { - if (PyFile_WriteString("\n", f) < 0) - goto error; - PyFile_SoftSpace(f, 0); - } - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; -} -#else /* Python 3 has a print function */ -static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { - PyObject* kwargs = 0; - PyObject* result = 0; - PyObject* end_string; - if (unlikely(!__pyx_print)) { - __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); - if (!__pyx_print) - return -1; - } - if (stream) { - kwargs = PyDict_New(); - if (unlikely(!kwargs)) - return -1; - if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) - goto bad; - if (!newline) { - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - goto bad; - if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - goto bad; - } - Py_DECREF(end_string); - } - } else if (!newline) { - if (unlikely(!__pyx_print_kwargs)) { - __pyx_print_kwargs = PyDict_New(); - if (unlikely(!__pyx_print_kwargs)) - return -1; - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - return -1; - if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - return -1; - } - Py_DECREF(end_string); - } - kwargs = __pyx_print_kwargs; - } - result = PyObject_Call(__pyx_print, arg_tuple, kwargs); - if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) - Py_DECREF(kwargs); - if (!result) - return -1; - Py_DECREF(result); - return 0; -bad: - if (kwargs != __pyx_print_kwargs) - Py_XDECREF(kwargs); - return -1; -} -#endif - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static int __Pyx_PrintOne(PyObject* f, PyObject *o) { - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - if (PyFile_SoftSpace(f, 0)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) - goto error; - if (PyFile_WriteString("\n", f) < 0) - goto error; - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; - /* the line below is just to avoid C compiler - * warnings about unused functions */ - return __Pyx_Print(f, NULL, 0); -} -#else /* Python 3 has a print function */ -static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { - int res; - PyObject* arg_tuple = PyTuple_Pack(1, o); - if (unlikely(!arg_tuple)) - return -1; - res = __Pyx_Print(stream, arg_tuple, 1); - Py_DECREF(arg_tuple); - return res; -} -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/network.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/network.pyx deleted file mode 100644 index 34dadaf..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/network.pyx +++ /dev/null @@ -1,352 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -import sys -import requests -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -#[ HTTP class] -# handle HTTP requests -# Uses the requests external library to handle HTTP requests and response object (available on PyPI) -#------------------------------------------------------------------------------ -class HTTP(): - def __init__(self, url="", request_timeout=10): - self.url = url - self.request_timeout = request_timeout - #------------------------------------------------------------------------------ - # HTTP response properties (assignment occurs with the HTTP request methods) - #------------------------------------------------------------------------------ - self.res = None # assigned with the requests external library response object after a HTTP method call - - #------------------------------------------------------------------------------ - # [ get method ] (string) - - # HTTP GET request - returns text string - # returns data stream read from the URL (string) - # Default timeout = 10 s from class constructor - # Re-throws ConnectionError on failed connection (e.g. no site at URL) - # Test : test_NETWORK.py :: test_http_get, test_http_get_response_change, - # test_http_post_reponse_change, test_http_get_response_check - #------------------------------------------------------------------------------ - def get(self, follow_redirects=True): - try: - response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.text - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ get_data method ] (binary data) - # HTTP GET request, return binary data - # returns data stream with raw binary data - #------------------------------------------------------------------------------ - def get_bin(self): - try: - response = requests.get(self.url, timeout=self.request_timeout) - self.res = response # assign the response object from requests to a property on the instance - return response.content # return binary data instead of text (get() returns text) - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get_data() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ get_bin_write_file method ] (boolean) - # open HTTP data stream with GET request, make file with the returned binary data - # file path is passed to the method by the developer - # set suppress_output to True if you want to suppress the d/l status information that is printed to the standard output stream - # return True on successful pull and write to disk - # Tests: test_NETWORK.py :: test_http_get_binary - #------------------------------------------------------------------------------ - def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") - sys.stdout.flush() - response = requests.get(self.url, timeout=self.request_timeout, stream=True) - self.res = response - with open(filepath, 'wb') as f: # write as binary data - for chunk in response.iter_content(chunk_size=2048): - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_bin_write_file() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ get_txt_write_file method ] (boolean) - # open HTTP data stream with GET request, write file with utf-8 encoded text using returned text data - # file path is passed to the method by the developer (default is the base filename in the URL if not specified) - # return True on successful pull and write to disk - # Tests: test_NETWORK.py :: test_http_get_text - #------------------------------------------------------------------------------ - def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") - sys.stdout.flush() - response = requests.get(self.url, timeout=self.request_timeout, stream=True) - self.res = response - import codecs - with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - for chunk in response.iter_content(chunk_size=2048): - chunk = chunk.decode('utf-8') - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_data_write_txt() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ head method ] (dictionary of strings) - # HTTP HEAD request - # returns a dictionary of the header strings - # test for a specific header on either the response dictionary or the instance res property - # Usage example: - # content_type = instance.res['content-type'] - # Tests: test_NETWORK.py :: test_http_head - #------------------------------------------------------------------------------ - def head(self): - try: - response = requests.head(self.url, timeout=self.request_timeout) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.headers - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") - raise e - - - #------------------------------------------------------------------------------ - # [ post method ] (string) - # HTTP POST request for text - # returns text from the URL as a string - #------------------------------------------------------------------------------ - def post(self, follow_redirects=True): - try: - response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.text - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ post_bin method ] (binary data) - # HTTP POST request for binary data - # returns binary data from the URL - #------------------------------------------------------------------------------ - def post_bin(self): - try: - response = requests.post(self.url, timeout=self.request_timeout) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.content - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ post_bin_write_file method ] (boolean = success of write) - # HTTP POST request, write binary file with the response data - # default filepath is the basename of the URL file, may be set by passing an argument to the method - # returns a boolean that indicates the success of the file write - #------------------------------------------------------------------------------ - def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - sys.stdout.flush() - response = requests.post(self.url, timeout=self.request_timeout, stream=True) - self.res = response - with open(filepath, 'wb') as f: # write as binary data - for chunk in response.iter_content(chunk_size=2048): - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") # provide user with completion information - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ post_txt_write_file method ] (boolean = success of file write) - # HTTP POST request, write utf-8 encoded text file with the response data - # default filepath is the basename of the URL file, may be set by passing an argument to the method - # returns a boolean that indicates the success of the file write - #------------------------------------------------------------------------------ - def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - sys.stdout.flush() - response = requests.post(self.url, timeout=self.request_timeout, stream=True) - self.res = response - import codecs - with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - for chunk in response.iter_content(chunk_size=2048): - chunk = chunk.decode('utf-8') - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") # provide user with completion information - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ response method ] - # getter method for the requests library object that is assigned as a property - # on the HTTP class after a HTTP request method is run (e.g. get()) - # Note: must run one of the HTTP request verbs to assign this property before use of getter (=None by default) - # Tests: test_NETWORK.py :: test_http_get_response_check - #------------------------------------------------------------------------------ - def response(self): - try: - return self.res - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ get_status_ok method ] (boolean) - # return boolean whether HTTP response was in 200 status code range for GET request - # Note: this method runs its own GET request, does not need to be run separately - # Tests: test_NETWORK.py :: - #------------------------------------------------------------------------------ - def get_status_ok(self): - try: - self.get() #run the get request - if self.res and self.res.status_code: - return (self.res.status_code == requests.codes.ok) - else: - return False - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ post_status_ok method ] (boolean) - # return boolean whether HTTP response was in 200 status code range for POST request - # Note: method runs its own post method, not necessary to run separately - #------------------------------------------------------------------------------ - def post_status_ok(self): - try: - self.post() #run the post request - if self.res and self.res.status_code: - return (self.res.status_code == requests.codes.ok) - else: - return False - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") - raise e - -if __name__ == '__main__': - pass - #------------------------------------------------------------------------------ - # HTTP GET 1 - #------------------------------------------------------------------------------ - # http = HTTP("http://www.google.com") - # data = http.get() - # print(data) - # from Naked.toolshed.file import FileWriter - # w = FileWriter("testfile.txt") - # w.write_utf8(data) - #------------------------------------------------------------------------------ - # HTTP GET 2 - #------------------------------------------------------------------------------ - # http = HTTP() - # http.url = "http://www.google.com" - # print(http.get()) - - diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/python.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/python.c deleted file mode 100644 index e1a7e9c..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/python.c +++ /dev/null @@ -1,2650 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:15 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__python -#define __PYX_HAVE_API__lib__Naked__toolshed__c__python -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "python.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#ifndef CYTHON_PROFILE - #define CYTHON_PROFILE 1 -#endif -#ifndef CYTHON_TRACE - #define CYTHON_TRACE 0 -#endif -#if CYTHON_TRACE - #undef CYTHON_PROFILE_REUSE_FRAME -#endif -#ifndef CYTHON_PROFILE_REUSE_FRAME - #define CYTHON_PROFILE_REUSE_FRAME 0 -#endif -#if CYTHON_PROFILE || CYTHON_TRACE - #include "compile.h" - #include "frameobject.h" - #include "traceback.h" - #if CYTHON_PROFILE_REUSE_FRAME - #define CYTHON_FRAME_MODIFIER static - #define CYTHON_FRAME_DEL - #else - #define CYTHON_FRAME_MODIFIER - #define CYTHON_FRAME_DEL Py_CLEAR(__pyx_frame) - #endif - #define __Pyx_TraceDeclarations \ - static PyCodeObject *__pyx_frame_code = NULL; \ - CYTHON_FRAME_MODIFIER PyFrameObject *__pyx_frame = NULL; \ - int __Pyx_use_tracing = 0; - #define __Pyx_TraceCall(funcname, srcfile, firstlineno) \ - if (unlikely(PyThreadState_GET()->use_tracing && \ - (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc)))) { \ - __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&__pyx_frame_code, &__pyx_frame, funcname, srcfile, firstlineno); \ - } - #define __Pyx_TraceException() \ - if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing && \ - (PyThreadState_GET()->c_profilefunc || (CYTHON_TRACE && PyThreadState_GET()->c_tracefunc))) { \ - PyThreadState* tstate = PyThreadState_GET(); \ - tstate->use_tracing = 0; \ - PyObject *exc_info = __Pyx_GetExceptionTuple(); \ - if (exc_info) { \ - if (CYTHON_TRACE && tstate->c_tracefunc) \ - tstate->c_tracefunc( \ - tstate->c_traceobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ - tstate->c_profilefunc( \ - tstate->c_profileobj, __pyx_frame, PyTrace_EXCEPTION, exc_info); \ - Py_DECREF(exc_info); \ - } \ - tstate->use_tracing = 1; \ - } - #define __Pyx_TraceReturn(result) \ - if (unlikely(__Pyx_use_tracing) && PyThreadState_GET()->use_tracing) { \ - PyThreadState* tstate = PyThreadState_GET(); \ - tstate->use_tracing = 0; \ - if (CYTHON_TRACE && tstate->c_tracefunc) \ - tstate->c_tracefunc( \ - tstate->c_traceobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ - if (tstate->c_profilefunc) \ - tstate->c_profilefunc( \ - tstate->c_profileobj, __pyx_frame, PyTrace_RETURN, (PyObject*)result); \ - CYTHON_FRAME_DEL; \ - tstate->use_tracing = 1; \ - } - static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno); /*proto*/ - static int __Pyx_TraceSetupAndCall(PyCodeObject** code, PyFrameObject** frame, const char *funcname, const char *srcfile, int firstlineno); /*proto*/ -#else - #define __Pyx_TraceDeclarations - #define __Pyx_TraceCall(funcname, srcfile, firstlineno) - #define __Pyx_TraceException() - #define __Pyx_TraceReturn(result) -#endif /* CYTHON_PROFILE */ -#if CYTHON_TRACE - #define __Pyx_TraceLine(lineno) \ - if (unlikely(__Pyx_use_tracing) && unlikely(PyThreadState_GET()->use_tracing && PyThreadState_GET()->c_tracefunc)) { \ - PyThreadState* tstate = PyThreadState_GET(); \ - __pyx_frame->f_lineno = lineno; \ - tstate->use_tracing = 0; \ - tstate->c_tracefunc(tstate->c_traceobj, __pyx_frame, PyTrace_LINE, NULL); \ - tstate->use_tracing = 1; \ - } -#else - #define __Pyx_TraceLine(lineno) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.python' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.python" -int __pyx_module_is_main_lib__Naked__toolshed__c__python = 0; - -/* Implementation of 'lib.Naked.toolshed.c.python' */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_py_version(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_2py_major_version(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_4py_minor_version(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_6py_patch_version(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_8is_py2(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_10is_py3(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_is_py2[] = "is_py2"; -static char __pyx_k_is_py3[] = "is_py3"; -static char __pyx_k_py_version[] = "py_version"; -static char __pyx_k_version_info[] = "version_info"; -static char __pyx_k_py_major_version[] = "py_major_version"; -static char __pyx_k_py_minor_version[] = "py_minor_version"; -static char __pyx_k_py_patch_version[] = "py_patch_version"; -static char __pyx_k_lib_Naked_toolshed_c_python[] = "lib.Naked.toolshed.c.python"; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/python.pyx"; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_is_py2; -static PyObject *__pyx_n_s_is_py3; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_python; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_py_major_version; -static PyObject *__pyx_n_s_py_minor_version; -static PyObject *__pyx_n_s_py_patch_version; -static PyObject *__pyx_n_s_py_version; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_version_info; -static PyObject *__pyx_int_2; -static PyObject *__pyx_int_3; -static PyObject *__pyx_codeobj_; -static PyObject *__pyx_codeobj__2; -static PyObject *__pyx_codeobj__3; -static PyObject *__pyx_codeobj__4; -static PyObject *__pyx_codeobj__5; -static PyObject *__pyx_codeobj__6; - -/* "lib/Naked/toolshed/c/python.pyx":14 - * # [ py_version function ] (tuple of (major, minor, patch)) - * #------------------------------------------------------------------------------ - * def py_version(): # <<<<<<<<<<<<<< - * return (version_info[0], version_info[1], version_info[2]) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_1py_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6python_1py_version = {__Pyx_NAMESTR("py_version"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6python_1py_version, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_1py_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("py_version (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6python_py_version(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_py_version(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("py_version", 0); - __Pyx_TraceCall("py_version", __pyx_f[0], 14); - - /* "lib/Naked/toolshed/c/python.pyx":15 - * #------------------------------------------------------------------------------ - * def py_version(): - * return (version_info[0], version_info[1], version_info[2]) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/python.pyx":14 - * # [ py_version function ] (tuple of (major, minor, patch)) - * #------------------------------------------------------------------------------ - * def py_version(): # <<<<<<<<<<<<<< - * return (version_info[0], version_info[1], version_info[2]) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.python.py_version", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/python.pyx":21 - * # Return Python interpreter major version number - * #------------------------------------------------------------------------------ - * def py_major_version(): # <<<<<<<<<<<<<< - * return (version_info[0]) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_3py_major_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6python_3py_major_version = {__Pyx_NAMESTR("py_major_version"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6python_3py_major_version, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_3py_major_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("py_major_version (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6python_2py_major_version(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_2py_major_version(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("py_major_version", 0); - __Pyx_TraceCall("py_major_version", __pyx_f[0], 21); - - /* "lib/Naked/toolshed/c/python.pyx":22 - * #------------------------------------------------------------------------------ - * def py_major_version(): - * return (version_info[0]) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/python.pyx":21 - * # Return Python interpreter major version number - * #------------------------------------------------------------------------------ - * def py_major_version(): # <<<<<<<<<<<<<< - * return (version_info[0]) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.python.py_major_version", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/python.pyx":28 - * # Return Python interpreter minor version number - * #------------------------------------------------------------------------------ - * def py_minor_version(): # <<<<<<<<<<<<<< - * return (version_info[1]) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_5py_minor_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6python_5py_minor_version = {__Pyx_NAMESTR("py_minor_version"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6python_5py_minor_version, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_5py_minor_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("py_minor_version (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6python_4py_minor_version(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_4py_minor_version(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("py_minor_version", 0); - __Pyx_TraceCall("py_minor_version", __pyx_f[0], 28); - - /* "lib/Naked/toolshed/c/python.pyx":29 - * #------------------------------------------------------------------------------ - * def py_minor_version(): - * return (version_info[1]) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/python.pyx":28 - * # Return Python interpreter minor version number - * #------------------------------------------------------------------------------ - * def py_minor_version(): # <<<<<<<<<<<<<< - * return (version_info[1]) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.python.py_minor_version", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/python.pyx":35 - * # Return Python interpreter patch version number - * #------------------------------------------------------------------------------ - * def py_patch_version(): # <<<<<<<<<<<<<< - * return (version_info[2]) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_7py_patch_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6python_7py_patch_version = {__Pyx_NAMESTR("py_patch_version"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6python_7py_patch_version, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_7py_patch_version(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("py_patch_version (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6python_6py_patch_version(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_6py_patch_version(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("py_patch_version", 0); - __Pyx_TraceCall("py_patch_version", __pyx_f[0], 35); - - /* "lib/Naked/toolshed/c/python.pyx":36 - * #------------------------------------------------------------------------------ - * def py_patch_version(): - * return (version_info[2]) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/python.pyx":35 - * # Return Python interpreter patch version number - * #------------------------------------------------------------------------------ - * def py_patch_version(): # <<<<<<<<<<<<<< - * return (version_info[2]) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.python.py_patch_version", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/python.pyx":42 - * # Return truth result for question is interpreter running a version of Python 2 - * #------------------------------------------------------------------------------ - * def is_py2(): # <<<<<<<<<<<<<< - * return (version_info[0] == (2)) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_9is_py2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6python_9is_py2 = {__Pyx_NAMESTR("is_py2"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6python_9is_py2, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_9is_py2(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_py2 (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6python_8is_py2(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_8is_py2(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("is_py2", 0); - __Pyx_TraceCall("is_py2", __pyx_f[0], 42); - - /* "lib/Naked/toolshed/c/python.pyx":43 - * #------------------------------------------------------------------------------ - * def is_py2(): - * return (version_info[0] == (2)) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/python.pyx":42 - * # Return truth result for question is interpreter running a version of Python 2 - * #------------------------------------------------------------------------------ - * def is_py2(): # <<<<<<<<<<<<<< - * return (version_info[0] == (2)) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.python.is_py2", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/python.pyx":49 - * # Return truth result for question is interpreter running a version of Python 3 - * #------------------------------------------------------------------------------ - * def is_py3(): # <<<<<<<<<<<<<< - * return (version_info[0] == (3)) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_11is_py3(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6python_11is_py3 = {__Pyx_NAMESTR("is_py3"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6python_11is_py3, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6python_11is_py3(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_py3 (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6python_10is_py3(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6python_10is_py3(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_TraceDeclarations - __Pyx_RefNannySetupContext("is_py3", 0); - __Pyx_TraceCall("is_py3", __pyx_f[0], 49); - - /* "lib/Naked/toolshed/c/python.pyx":50 - * #------------------------------------------------------------------------------ - * def is_py3(): - * return (version_info[0] == (3)) # <<<<<<<<<<<<<< - * - * if __name__ == '__main__': - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/python.pyx":49 - * # Return truth result for question is interpreter running a version of Python 3 - * #------------------------------------------------------------------------------ - * def is_py3(): # <<<<<<<<<<<<<< - * return (version_info[0] == (3)) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.python.is_py3", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_TraceReturn(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("python"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_is_py2, __pyx_k_is_py2, sizeof(__pyx_k_is_py2), 0, 0, 1, 1}, - {&__pyx_n_s_is_py3, __pyx_k_is_py3, sizeof(__pyx_k_is_py3), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_python, __pyx_k_lib_Naked_toolshed_c_python, sizeof(__pyx_k_lib_Naked_toolshed_c_python), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_py_major_version, __pyx_k_py_major_version, sizeof(__pyx_k_py_major_version), 0, 0, 1, 1}, - {&__pyx_n_s_py_minor_version, __pyx_k_py_minor_version, sizeof(__pyx_k_py_minor_version), 0, 0, 1, 1}, - {&__pyx_n_s_py_patch_version, __pyx_k_py_patch_version, sizeof(__pyx_k_py_patch_version), 0, 0, 1, 1}, - {&__pyx_n_s_py_version, __pyx_k_py_version, sizeof(__pyx_k_py_version), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - return 0; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/python.pyx":14 - * # [ py_version function ] (tuple of (major, minor, patch)) - * #------------------------------------------------------------------------------ - * def py_version(): # <<<<<<<<<<<<<< - * return (version_info[0], version_info[1], version_info[2]) - * - */ - __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_py_version, 14, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/python.pyx":21 - * # Return Python interpreter major version number - * #------------------------------------------------------------------------------ - * def py_major_version(): # <<<<<<<<<<<<<< - * return (version_info[0]) - * - */ - __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_py_major_version, 21, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/python.pyx":28 - * # Return Python interpreter minor version number - * #------------------------------------------------------------------------------ - * def py_minor_version(): # <<<<<<<<<<<<<< - * return (version_info[1]) - * - */ - __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_py_minor_version, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/python.pyx":35 - * # Return Python interpreter patch version number - * #------------------------------------------------------------------------------ - * def py_patch_version(): # <<<<<<<<<<<<<< - * return (version_info[2]) - * - */ - __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_py_patch_version, 35, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/python.pyx":42 - * # Return truth result for question is interpreter running a version of Python 2 - * #------------------------------------------------------------------------------ - * def is_py2(): # <<<<<<<<<<<<<< - * return (version_info[0] == (2)) - * - */ - __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_is_py2, 42, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/python.pyx":49 - * # Return truth result for question is interpreter running a version of Python 3 - * #------------------------------------------------------------------------------ - * def is_py3(): # <<<<<<<<<<<<<< - * return (version_info[0] == (3)) - * - */ - __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_is_py3, 49, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initpython(void); /*proto*/ -PyMODINIT_FUNC initpython(void) -#else -PyMODINIT_FUNC PyInit_python(void); /*proto*/ -PyMODINIT_FUNC PyInit_python(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_python(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("python"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__python) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.python")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.python", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/python.pyx":5 - * # cython: profile=True - * - * from sys import version_info # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_version_info); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_version_info); - __Pyx_GIVEREF(__pyx_n_s_version_info); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_sys, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_version_info, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":14 - * # [ py_version function ] (tuple of (major, minor, patch)) - * #------------------------------------------------------------------------------ - * def py_version(): # <<<<<<<<<<<<<< - * return (version_info[0], version_info[1], version_info[2]) - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6python_1py_version, NULL, __pyx_n_s_lib_Naked_toolshed_c_python); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_version, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":21 - * # Return Python interpreter major version number - * #------------------------------------------------------------------------------ - * def py_major_version(): # <<<<<<<<<<<<<< - * return (version_info[0]) - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6python_3py_major_version, NULL, __pyx_n_s_lib_Naked_toolshed_c_python); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_major_version, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":28 - * # Return Python interpreter minor version number - * #------------------------------------------------------------------------------ - * def py_minor_version(): # <<<<<<<<<<<<<< - * return (version_info[1]) - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6python_5py_minor_version, NULL, __pyx_n_s_lib_Naked_toolshed_c_python); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_minor_version, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":35 - * # Return Python interpreter patch version number - * #------------------------------------------------------------------------------ - * def py_patch_version(): # <<<<<<<<<<<<<< - * return (version_info[2]) - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6python_7py_patch_version, NULL, __pyx_n_s_lib_Naked_toolshed_c_python); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_py_patch_version, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":42 - * # Return truth result for question is interpreter running a version of Python 2 - * #------------------------------------------------------------------------------ - * def is_py2(): # <<<<<<<<<<<<<< - * return (version_info[0] == (2)) - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6python_9is_py2, NULL, __pyx_n_s_lib_Naked_toolshed_c_python); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_py2, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":49 - * # Return truth result for question is interpreter running a version of Python 3 - * #------------------------------------------------------------------------------ - * def is_py3(): # <<<<<<<<<<<<<< - * return (version_info[0] == (3)) - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6python_11is_py3, NULL, __pyx_n_s_lib_Naked_toolshed_c_python); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_py3, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/python.pyx":52 - * return (version_info[0] == (3)) - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_3) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/python.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=True - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.python", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.python"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -#if CYTHON_PROFILE -static int __Pyx_TraceSetupAndCall(PyCodeObject** code, - PyFrameObject** frame, - const char *funcname, - const char *srcfile, - int firstlineno) { - int retval; - PyThreadState* tstate = PyThreadState_GET(); - if (*frame == NULL || !CYTHON_PROFILE_REUSE_FRAME) { - if (*code == NULL) { - *code = __Pyx_createFrameCodeObject(funcname, srcfile, firstlineno); - if (*code == NULL) return 0; - } - *frame = PyFrame_New( - tstate, /*PyThreadState *tstate*/ - *code, /*PyCodeObject *code*/ - __pyx_d, /*PyObject *globals*/ - 0 /*PyObject *locals*/ - ); - if (*frame == NULL) return 0; - if (CYTHON_TRACE && (*frame)->f_trace == NULL) { - Py_INCREF(Py_None); - (*frame)->f_trace = Py_None; - } -#if PY_VERSION_HEX < 0x030400B1 - } else { - (*frame)->f_tstate = tstate; -#endif - } - (*frame)->f_lineno = firstlineno; - tstate->use_tracing = 0; - #if CYTHON_TRACE - if (tstate->c_tracefunc) - tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL); - if (!tstate->c_profilefunc) - retval = 1; - else - #endif - retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0; - tstate->use_tracing = (tstate->c_profilefunc || - (CYTHON_TRACE && tstate->c_tracefunc)); - return tstate->use_tracing && retval; -} -static PyCodeObject *__Pyx_createFrameCodeObject(const char *funcname, const char *srcfile, int firstlineno) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyCodeObject *py_code = 0; - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - py_srcfile = PyString_FromString(srcfile); - #else - py_funcname = PyUnicode_FromString(funcname); - py_srcfile = PyUnicode_FromString(srcfile); - #endif - if (!py_funcname | !py_srcfile) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - #if PY_MAJOR_VERSION >= 3 - 0, /*int kwonlyargcount,*/ - #endif - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - firstlineno, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return py_code; -} -#endif /* CYTHON_PROFILE */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/python.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/python.pyx deleted file mode 100644 index 7eaf8b6..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/python.pyx +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=True - -from sys import version_info - -#------------------------------------------------------------------------------ -# Python Versions -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ py_version function ] (tuple of (major, minor, patch)) -#------------------------------------------------------------------------------ -def py_version(): - return (version_info[0], version_info[1], version_info[2]) - -#------------------------------------------------------------------------------ -# [ py_major_version function ] (integer) -# Return Python interpreter major version number -#------------------------------------------------------------------------------ -def py_major_version(): - return (version_info[0]) - -#------------------------------------------------------------------------------ -# [ py_minor_version function ] (integer) -# Return Python interpreter minor version number -#------------------------------------------------------------------------------ -def py_minor_version(): - return (version_info[1]) - -#------------------------------------------------------------------------------ -# [ py_patch_version function ] (integer) -# Return Python interpreter patch version number -#------------------------------------------------------------------------------ -def py_patch_version(): - return (version_info[2]) - -#------------------------------------------------------------------------------ -# [ is_py2 function ] (boolean) -# Return truth result for question is interpreter running a version of Python 2 -#------------------------------------------------------------------------------ -def is_py2(): - return (version_info[0] == (2)) - -#------------------------------------------------------------------------------ -# [ is_py3 function ] (boolean) -# Return truth result for question is interpreter running a version of Python 3 -#------------------------------------------------------------------------------ -def is_py3(): - return (version_info[0] == (3)) - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/setup.py b/venv/lib/python3.6/site-packages/Naked/toolshed/c/setup.py deleted file mode 100644 index 5593ed9..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/setup.py +++ /dev/null @@ -1,18 +0,0 @@ -from distutils.core import setup -from distutils.extension import Extension - -ext_bench = Extension("benchmarking", ["benchmarking.c"]) -ext_casts = Extension("casts", ["casts.c"]) -ext_file = Extension("file", ["file.c"]) -ext_ink = Extension("ink", ["ink.c"]) -ext_net = Extension("network", ["network.c"]) -ext_py = Extension("python", ["python.c"]) -ext_shell = Extension("shell", ["shell.c"]) -ext_state = Extension("cstate", ["cstate.c"]) -ext_sys = Extension("system", ["system.c"]) -ext_types = Extension("types", ["types.c"]) - - -setup( - ext_modules = [ext_bench, ext_casts, ext_file, ext_ink, ext_net, ext_py, ext_shell, ext_state, ext_sys, ext_types] -) diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.c deleted file mode 100644 index 9e5db7c..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.c +++ /dev/null @@ -1,8175 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:15 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__shell -#define __PYX_HAVE_API__lib__Naked__toolshed__c__shell -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "shell.pyx", -}; - -/*--- Type declarations ---*/ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ -#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 -static PyObject* __pyx_print = 0; -static PyObject* __pyx_print_kwargs = 0; -#endif - -static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.shell' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.shell" -int __pyx_module_is_main_lib__Naked__toolshed__c__shell = 0; - -/* Implementation of 'lib.Naked.toolshed.c.shell' */ -static PyObject *__pyx_builtin_TypeError; -static PyObject *__pyx_builtin_Exception; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_execute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_command); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_2run(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_command, PyObject *__pyx_v_suppress_stdout, PyObject *__pyx_v_suppress_stderr, PyObject *__pyx_v_suppress_exit_status_call); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_4muterun(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_command); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_6execute_rb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_8run_rb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments, PyObject *__pyx_v_suppress_stdout, PyObject *__pyx_v_suppress_stderr, PyObject *__pyx_v_suppress_exit_status_call); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_10muterun_rb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_12execute_js(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_14run_js(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments, PyObject *__pyx_v_suppress_stdout, PyObject *__pyx_v_suppress_stderr, PyObject *__pyx_v_suppress_exit_status_call); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_16muterun_js(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_2is_var(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_var_name); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_4get_var(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_var_name); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_6get_split_var_list(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_var_name); /* proto */ -static char __pyx_k_e[] = "e"; -static char __pyx_k__4[] = ""; -static char __pyx_k__6[] = " "; -static char __pyx_k_os[] = "os"; -static char __pyx_k_te[] = "te"; -static char __pyx_k_cpe[] = "cpe"; -static char __pyx_k_doc[] = "__doc__"; -static char __pyx_k_end[] = "end"; -static char __pyx_k_env[] = "env"; -static char __pyx_k_run[] = "run"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_call[] = "call"; -static char __pyx_k_exit[] = "exit"; -static char __pyx_k_file[] = "file"; -static char __pyx_k_init[] = "__init__"; -static char __pyx_k_keys[] = "keys"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_node[] = "node "; -static char __pyx_k_ruby[] = "ruby "; -static char __pyx_k_self[] = "self"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_vars[] = "vars"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_print[] = "print"; -static char __pyx_k_shell[] = "shell"; -static char __pyx_k_split[] = "split"; -static char __pyx_k_write[] = "write"; -static char __pyx_k_STDOUT[] = "STDOUT"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_is_var[] = "is_var"; -static char __pyx_k_module[] = "__module__"; -static char __pyx_k_output[] = "output"; -static char __pyx_k_run_js[] = "run_js"; -static char __pyx_k_run_rb[] = "run_rb"; -static char __pyx_k_stderr[] = "stderr"; -static char __pyx_k_stdout[] = "stdout"; -static char __pyx_k_command[] = "command"; -static char __pyx_k_environ[] = "environ"; -static char __pyx_k_execute[] = "execute"; -static char __pyx_k_get_var[] = "get_var"; -static char __pyx_k_muterun[] = "muterun"; -static char __pyx_k_pathsep[] = "pathsep"; -static char __pyx_k_prepare[] = "__prepare__"; -static char __pyx_k_exitcode[] = "exitcode"; -static char __pyx_k_qualname[] = "__qualname__"; -static char __pyx_k_response[] = "response"; -static char __pyx_k_var_name[] = "var_name"; -static char __pyx_k_Exception[] = "Exception"; -static char __pyx_k_TypeError[] = "TypeError"; -static char __pyx_k_arguments[] = "arguments"; -static char __pyx_k_file_path[] = "file_path"; -static char __pyx_k_metaclass[] = "__metaclass__"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_execute_js[] = "execute_js"; -static char __pyx_k_execute_rb[] = "execute_rb"; -static char __pyx_k_js_command[] = "js_command"; -static char __pyx_k_muterun_js[] = "muterun_js"; -static char __pyx_k_muterun_rb[] = "muterun_rb"; -static char __pyx_k_rb_command[] = "rb_command"; -static char __pyx_k_returncode[] = "returncode"; -static char __pyx_k_subprocess[] = "subprocess"; -static char __pyx_k_Environment[] = "Environment"; -static char __pyx_k_NakedObject[] = "NakedObject"; -static char __pyx_k_check_output[] = "check_output"; -static char __pyx_k_response_obj[] = "response_obj"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_suppress_stderr[] = "suppress_stderr"; -static char __pyx_k_suppress_stdout[] = "suppress_stdout"; -static char __pyx_k_CalledProcessError[] = "CalledProcessError"; -static char __pyx_k_Environment___init[] = "Environment.__init__"; -static char __pyx_k_Environment_is_var[] = "Environment.is_var"; -static char __pyx_k_get_split_var_list[] = "get_split_var_list"; -static char __pyx_k_Environment_get_var[] = "Environment.get_var"; -static char __pyx_k_Naked_toolshed_types[] = "Naked.toolshed.types"; -static char __pyx_k_suppress_exit_status_call[] = "suppress_exit_status_call"; -static char __pyx_k_lib_Naked_toolshed_c_shell[] = "lib.Naked.toolshed.c.shell"; -static char __pyx_k_Environment_get_split_var_list[] = "Environment.get_split_var_list"; -static char __pyx_k_Naked_Framework_Error_unable_to[] = "Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/shell.pyx"; -static char __pyx_k_Naked_Framework_Error_unable_to_2[] = "Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_3[] = "Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_4[] = "Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_5[] = "Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_6[] = "Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_7[] = "Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py)."; -static char __pyx_k_Naked_Framework_Error_unable_to_8[] = "Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell)."; -static char __pyx_k_Naked_Framework_Error_unable_to_9[] = "Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell)."; -static char __pyx_k_Naked_Framework_Error_unable_to_10[] = "Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell)."; -static PyObject *__pyx_n_s_CalledProcessError; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_n_s_Environment; -static PyObject *__pyx_n_s_Environment___init; -static PyObject *__pyx_n_s_Environment_get_split_var_list; -static PyObject *__pyx_n_s_Environment_get_var; -static PyObject *__pyx_n_s_Environment_is_var; -static PyObject *__pyx_n_s_Exception; -static PyObject *__pyx_n_s_NakedObject; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_10; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_4; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_5; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_6; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_7; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_8; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_9; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_Naked_toolshed_types; -static PyObject *__pyx_n_s_STDOUT; -static PyObject *__pyx_n_s_TypeError; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_kp_b__4; -static PyObject *__pyx_kp_s__4; -static PyObject *__pyx_kp_s__6; -static PyObject *__pyx_n_s_arguments; -static PyObject *__pyx_n_s_call; -static PyObject *__pyx_n_s_check_output; -static PyObject *__pyx_n_s_command; -static PyObject *__pyx_n_s_cpe; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_end; -static PyObject *__pyx_n_s_env; -static PyObject *__pyx_n_s_environ; -static PyObject *__pyx_n_s_execute; -static PyObject *__pyx_n_s_execute_js; -static PyObject *__pyx_n_s_execute_rb; -static PyObject *__pyx_n_s_exit; -static PyObject *__pyx_n_s_exitcode; -static PyObject *__pyx_n_s_file; -static PyObject *__pyx_n_s_file_path; -static PyObject *__pyx_n_s_get_split_var_list; -static PyObject *__pyx_n_s_get_var; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_is_var; -static PyObject *__pyx_n_s_js_command; -static PyObject *__pyx_n_s_keys; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_shell; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_muterun; -static PyObject *__pyx_n_s_muterun_js; -static PyObject *__pyx_n_s_muterun_rb; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_kp_s_node; -static PyObject *__pyx_n_s_os; -static PyObject *__pyx_n_s_output; -static PyObject *__pyx_n_s_pathsep; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_print; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_rb_command; -static PyObject *__pyx_n_s_response; -static PyObject *__pyx_n_s_response_obj; -static PyObject *__pyx_n_s_returncode; -static PyObject *__pyx_kp_s_ruby; -static PyObject *__pyx_n_s_run; -static PyObject *__pyx_n_s_run_js; -static PyObject *__pyx_n_s_run_rb; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_shell; -static PyObject *__pyx_n_s_split; -static PyObject *__pyx_n_s_stderr; -static PyObject *__pyx_n_s_stdout; -static PyObject *__pyx_n_s_subprocess; -static PyObject *__pyx_n_s_suppress_exit_status_call; -static PyObject *__pyx_n_s_suppress_stderr; -static PyObject *__pyx_n_s_suppress_stdout; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_te; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_var_name; -static PyObject *__pyx_n_s_vars; -static PyObject *__pyx_n_s_write; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__14; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__22; -static PyObject *__pyx_tuple__24; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_tuple__28; -static PyObject *__pyx_tuple__30; -static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__34; -static PyObject *__pyx_tuple__36; -static PyObject *__pyx_tuple__38; -static PyObject *__pyx_tuple__40; -static PyObject *__pyx_codeobj__17; -static PyObject *__pyx_codeobj__19; -static PyObject *__pyx_codeobj__21; -static PyObject *__pyx_codeobj__23; -static PyObject *__pyx_codeobj__25; -static PyObject *__pyx_codeobj__27; -static PyObject *__pyx_codeobj__29; -static PyObject *__pyx_codeobj__31; -static PyObject *__pyx_codeobj__33; -static PyObject *__pyx_codeobj__35; -static PyObject *__pyx_codeobj__37; -static PyObject *__pyx_codeobj__39; -static PyObject *__pyx_codeobj__41; - -/* "lib/Naked/toolshed/c/shell.pyx":16 - * # returns False if exit status != 0 - * #------------------------------------------------------------------------------ - * def execute(command): # <<<<<<<<<<<<<< - * try: - * response = subprocess.call(command, shell=True) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_1execute(PyObject *__pyx_self, PyObject *__pyx_v_command); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_1execute = {__Pyx_NAMESTR("execute"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_1execute, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_1execute(PyObject *__pyx_self, PyObject *__pyx_v_command) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("execute (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_execute(__pyx_self, ((PyObject *)__pyx_v_command)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_execute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_command) { - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_cpe = NULL; - CYTHON_UNUSED PyObject *__pyx_v_te = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("execute", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":17 - * #------------------------------------------------------------------------------ - * def execute(command): - * try: # <<<<<<<<<<<<<< - * response = subprocess.call(command, shell=True) - * if response == 0: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":18 - * def execute(command): - * try: - * response = subprocess.call(command, shell=True) # <<<<<<<<<<<<<< - * if response == 0: - * return True - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_call); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_command); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_command); - __Pyx_GIVEREF(__pyx_v_command); - __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_shell, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_response = __pyx_t_7; - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":19 - * try: - * response = subprocess.call(command, shell=True) - * if response == 0: # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_7 = PyObject_RichCompare(__pyx_v_response, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/shell.pyx":20 - * response = subprocess.call(command, shell=True) - * if response == 0: - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":22 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * except subprocess.CalledProcessError as cpe: - * try: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":23 - * else: - * return False - * except subprocess.CalledProcessError as cpe: # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(cpe.output) - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_CalledProcessError); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_cpe = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":24 - * return False - * except subprocess.CalledProcessError as cpe: - * try: # <<<<<<<<<<<<<< - * sys.stderr.write(cpe.output) - * except TypeError as te: - */ - { - __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":25 - * except subprocess.CalledProcessError as cpe: - * try: - * sys.stderr.write(cpe.output) # <<<<<<<<<<<<<< - * except TypeError as te: - * sys.stderr.write(str(cpe.output)) - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L14_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L14_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L14_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_output); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L14_error;} - __Pyx_GOTREF(__pyx_t_13); - __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L14_error;} - __Pyx_GOTREF(__pyx_t_14); - PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13); - __Pyx_GIVEREF(__pyx_t_13); - __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_14, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L14_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - } - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L21_try_end; - __pyx_L14_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":26 - * try: - * sys.stderr.write(cpe.output) - * except TypeError as te: # <<<<<<<<<<<<<< - * sys.stderr.write(str(cpe.output)) - * except Exception as e: - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_14); - __pyx_v_te = __pyx_t_14; - - /* "lib/Naked/toolshed/c/shell.pyx":27 - * sys.stderr.write(cpe.output) - * except TypeError as te: - * sys.stderr.write(str(cpe.output)) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_15 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_output); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_16); - __Pyx_GIVEREF(__pyx_t_16); - __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_17, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = PyTuple_New(1); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_16); - __Pyx_GIVEREF(__pyx_t_16); - __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_17, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L15_exception_handled; - } - goto __pyx_L16_except_error; - __pyx_L16_except_error:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - goto __pyx_L5_except_error; - __pyx_L15_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_L21_try_end:; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/shell.pyx":28 - * except TypeError as te: - * sys.stderr.write(str(cpe.output)) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":29 - * sys.stderr.write(str(cpe.output)) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_8) { - - /* "lib/Naked/toolshed/c/shell.pyx":30 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L26; - } - __pyx_L26:; - - /* "lib/Naked/toolshed/c/shell.pyx":31 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":16 - * # returns False if exit status != 0 - * #------------------------------------------------------------------------------ - * def execute(command): # <<<<<<<<<<<<<< - * try: - * response = subprocess.call(command, shell=True) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_cpe); - __Pyx_XDECREF(__pyx_v_te); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":44 - * # suppress_exit_status_call = False >> raise SystemExit with the returned status code - * #------------------------------------------------------------------------------ - * def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_3run(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_3run = {__Pyx_NAMESTR("run"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_3run, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_3run(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_command = 0; - PyObject *__pyx_v_suppress_stdout = 0; - PyObject *__pyx_v_suppress_stderr = 0; - PyObject *__pyx_v_suppress_exit_status_call = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("run (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_command,&__pyx_n_s_suppress_stdout,&__pyx_n_s_suppress_stderr,&__pyx_n_s_suppress_exit_status_call,0}; - PyObject* values[4] = {0,0,0,0}; - values[1] = ((PyObject *)Py_False); - values[2] = ((PyObject *)Py_False); - values[3] = ((PyObject *)Py_True); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_command)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_stdout); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_stderr); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_exit_status_call); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "run") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_command = values[0]; - __pyx_v_suppress_stdout = values[1]; - __pyx_v_suppress_stderr = values[2]; - __pyx_v_suppress_exit_status_call = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("run", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_2run(__pyx_self, __pyx_v_command, __pyx_v_suppress_stdout, __pyx_v_suppress_stderr, __pyx_v_suppress_exit_status_call); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_2run(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_command, PyObject *__pyx_v_suppress_stdout, PyObject *__pyx_v_suppress_stderr, PyObject *__pyx_v_suppress_exit_status_call) { - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_cpe = NULL; - CYTHON_UNUSED PyObject *__pyx_v_te = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("run", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":45 - * #------------------------------------------------------------------------------ - * def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - * try: # <<<<<<<<<<<<<< - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - * if not suppress_stdout: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":46 - * def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - * try: - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) # <<<<<<<<<<<<<< - * if not suppress_stdout: - * print(response) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_check_output); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_command); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_command); - __Pyx_GIVEREF(__pyx_v_command); - __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_STDOUT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_stderr, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_shell, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_response = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":47 - * try: - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - * if not suppress_stdout: # <<<<<<<<<<<<<< - * print(response) - * return response - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_stdout); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_10 = ((!__pyx_t_9) != 0); - if (__pyx_t_10) { - - /* "lib/Naked/toolshed/c/shell.pyx":48 - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - * if not suppress_stdout: - * print(response) # <<<<<<<<<<<<<< - * return response - * except subprocess.CalledProcessError as cpe: - */ - if (__Pyx_PrintOne(0, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":49 - * if not suppress_stdout: - * print(response) - * return response # <<<<<<<<<<<<<< - * except subprocess.CalledProcessError as cpe: - * if not suppress_stderr: # error in existing application (non-zero exit status) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_response); - __pyx_r = __pyx_v_response; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":50 - * print(response) - * return response - * except subprocess.CalledProcessError as cpe: # <<<<<<<<<<<<<< - * if not suppress_stderr: # error in existing application (non-zero exit status) - * try: - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_CalledProcessError); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_11 = PyErr_ExceptionMatches(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_11) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_cpe = __pyx_t_8; - - /* "lib/Naked/toolshed/c/shell.pyx":51 - * return response - * except subprocess.CalledProcessError as cpe: - * if not suppress_stderr: # error in existing application (non-zero exit status) # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(cpe.output) - */ - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_stderr); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __pyx_t_9 = ((!__pyx_t_10) != 0); - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/shell.pyx":52 - * except subprocess.CalledProcessError as cpe: - * if not suppress_stderr: # error in existing application (non-zero exit status) - * try: # <<<<<<<<<<<<<< - * sys.stderr.write(cpe.output) - * except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output - */ - { - __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":53 - * if not suppress_stderr: # error in existing application (non-zero exit status) - * try: - * sys.stderr.write(cpe.output) # <<<<<<<<<<<<<< - * except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output - * sys.stderr.write(str(cpe.output)) - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L15_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L15_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L15_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_output); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L15_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L15_error;} - __Pyx_GOTREF(__pyx_t_15); - PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_15, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L15_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - goto __pyx_L22_try_end; - __pyx_L15_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":54 - * try: - * sys.stderr.write(cpe.output) - * except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output # <<<<<<<<<<<<<< - * sys.stderr.write(str(cpe.output)) - * if not suppress_exit_status_call: - */ - __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_TypeError); - if (__pyx_t_11) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_15, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_15); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_15); - __pyx_v_te = __pyx_t_15; - - /* "lib/Naked/toolshed/c/shell.pyx":55 - * sys.stderr.write(cpe.output) - * except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output - * sys.stderr.write(str(cpe.output)) # <<<<<<<<<<<<<< - * if not suppress_exit_status_call: - * if cpe.returncode: - */ - __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_stderr); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_write); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_output); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_18); - PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17); - __Pyx_GIVEREF(__pyx_t_17); - __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_18, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_18); - PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17); - __Pyx_GIVEREF(__pyx_t_17); - __pyx_t_17 = 0; - __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_16, __pyx_t_18, NULL); if (unlikely(!__pyx_t_17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;} - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L16_exception_handled; - } - goto __pyx_L17_except_error; - __pyx_L17_except_error:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - goto __pyx_L5_except_error; - __pyx_L16_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - __pyx_L22_try_end:; - } - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":56 - * except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output - * sys.stderr.write(str(cpe.output)) - * if not suppress_exit_status_call: # <<<<<<<<<<<<<< - * if cpe.returncode: - * sys.exit(cpe.returncode) - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_suppress_exit_status_call); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __pyx_t_10 = ((!__pyx_t_9) != 0); - if (__pyx_t_10) { - - /* "lib/Naked/toolshed/c/shell.pyx":57 - * sys.stderr.write(str(cpe.output)) - * if not suppress_exit_status_call: - * if cpe.returncode: # <<<<<<<<<<<<<< - * sys.exit(cpe.returncode) - * else: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_returncode); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_10) { - - /* "lib/Naked/toolshed/c/shell.pyx":58 - * if not suppress_exit_status_call: - * if cpe.returncode: - * sys.exit(cpe.returncode) # <<<<<<<<<<<<<< - * else: - * sys.exit(1) - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_returncode); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L26; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":60 - * sys.exit(cpe.returncode) - * else: - * sys.exit(1) # <<<<<<<<<<<<<< - * return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) - * except Exception as e: - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_L26:; - goto __pyx_L25; - } - __pyx_L25:; - - /* "lib/Naked/toolshed/c/shell.pyx":61 - * else: - * sys.exit(1) - * return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/shell.pyx":62 - * sys.exit(1) - * return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") - */ - __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_11) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_e = __pyx_t_8; - - /* "lib/Naked/toolshed/c/shell.pyx":63 - * return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_10) { - - /* "lib/Naked/toolshed/c/shell.pyx":64 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L29; - } - __pyx_L29:; - - /* "lib/Naked/toolshed/c/shell.pyx":65 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":44 - * # suppress_exit_status_call = False >> raise SystemExit with the returned status code - * #------------------------------------------------------------------------------ - * def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_cpe); - __Pyx_XDECREF(__pyx_v_te); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":73 - * # return object attributes : stdout (bytes), stderr (bytes), exitcode (int) - * #------------------------------------------------------------------------------ - * def muterun(command): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.types import NakedObject - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_5muterun(PyObject *__pyx_self, PyObject *__pyx_v_command); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_5muterun = {__Pyx_NAMESTR("muterun"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_5muterun, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_5muterun(PyObject *__pyx_self, PyObject *__pyx_v_command) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("muterun (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_4muterun(__pyx_self, ((PyObject *)__pyx_v_command)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_4muterun(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_command) { - PyObject *__pyx_v_NakedObject = NULL; - PyObject *__pyx_v_response_obj = NULL; - PyObject *__pyx_v_response = NULL; - PyObject *__pyx_v_cpe = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_t_10; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("muterun", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":74 - * #------------------------------------------------------------------------------ - * def muterun(command): - * try: # <<<<<<<<<<<<<< - * from Naked.toolshed.types import NakedObject - * response_obj = NakedObject() - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":75 - * def muterun(command): - * try: - * from Naked.toolshed.types import NakedObject # <<<<<<<<<<<<<< - * response_obj = NakedObject() - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_NakedObject); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_NakedObject); - __Pyx_GIVEREF(__pyx_n_s_NakedObject); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_Naked_toolshed_types, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_NakedObject); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_NakedObject = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":76 - * try: - * from Naked.toolshed.types import NakedObject - * response_obj = NakedObject() # <<<<<<<<<<<<<< - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - * response_obj.stdout = response - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_NakedObject, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_response_obj = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":77 - * from Naked.toolshed.types import NakedObject - * response_obj = NakedObject() - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) # <<<<<<<<<<<<<< - * response_obj.stdout = response - * response_obj.exitcode = 0 - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_check_output); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_command); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_command); - __Pyx_GIVEREF(__pyx_v_command); - __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_STDOUT); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_stderr, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_shell, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_response = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":78 - * response_obj = NakedObject() - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - * response_obj.stdout = response # <<<<<<<<<<<<<< - * response_obj.exitcode = 0 - * response_obj.stderr = b"" - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_stdout, __pyx_v_response) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":79 - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - * response_obj.stdout = response - * response_obj.exitcode = 0 # <<<<<<<<<<<<<< - * response_obj.stderr = b"" - * return response_obj - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_exitcode, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":80 - * response_obj.stdout = response - * response_obj.exitcode = 0 - * response_obj.stderr = b"" # <<<<<<<<<<<<<< - * return response_obj - * except subprocess.CalledProcessError as cpe: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_stderr, __pyx_kp_b__4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":81 - * response_obj.exitcode = 0 - * response_obj.stderr = b"" - * return response_obj # <<<<<<<<<<<<<< - * except subprocess.CalledProcessError as cpe: - * response_obj.stdout = b"" - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_response_obj); - __pyx_r = __pyx_v_response_obj; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":82 - * response_obj.stderr = b"" - * return response_obj - * except subprocess.CalledProcessError as cpe: # <<<<<<<<<<<<<< - * response_obj.stdout = b"" - * response_obj.stderr = cpe.output - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_subprocess); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_CalledProcessError); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_cpe = __pyx_t_8; - - /* "lib/Naked/toolshed/c/shell.pyx":83 - * return response_obj - * except subprocess.CalledProcessError as cpe: - * response_obj.stdout = b"" # <<<<<<<<<<<<<< - * response_obj.stderr = cpe.output - * if cpe.returncode: - */ - if (unlikely(!__pyx_v_response_obj)) { __Pyx_RaiseUnboundLocalError("response_obj"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_stdout, __pyx_kp_b__4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":84 - * except subprocess.CalledProcessError as cpe: - * response_obj.stdout = b"" - * response_obj.stderr = cpe.output # <<<<<<<<<<<<<< - * if cpe.returncode: - * response_obj.exitcode = cpe.returncode - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_output); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - if (unlikely(!__pyx_v_response_obj)) { __Pyx_RaiseUnboundLocalError("response_obj"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_stderr, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":85 - * response_obj.stdout = b"" - * response_obj.stderr = cpe.output - * if cpe.returncode: # <<<<<<<<<<<<<< - * response_obj.exitcode = cpe.returncode - * else: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_returncode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_10) { - - /* "lib/Naked/toolshed/c/shell.pyx":86 - * response_obj.stderr = cpe.output - * if cpe.returncode: - * response_obj.exitcode = cpe.returncode # <<<<<<<<<<<<<< - * else: - * response_obj.exitcode = 1 - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_cpe, __pyx_n_s_returncode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - if (unlikely(!__pyx_v_response_obj)) { __Pyx_RaiseUnboundLocalError("response_obj"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_exitcode, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L13; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":88 - * response_obj.exitcode = cpe.returncode - * else: - * response_obj.exitcode = 1 # <<<<<<<<<<<<<< - * return response_obj - * except Exception as e: - */ - if (unlikely(!__pyx_v_response_obj)) { __Pyx_RaiseUnboundLocalError("response_obj"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - if (__Pyx_PyObject_SetAttrStr(__pyx_v_response_obj, __pyx_n_s_exitcode, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/shell.pyx":89 - * else: - * response_obj.exitcode = 1 - * return response_obj # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_response_obj)) { __Pyx_RaiseUnboundLocalError("response_obj"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - __Pyx_INCREF(__pyx_v_response_obj); - __pyx_r = __pyx_v_response_obj; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L6_except_return; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/shell.pyx":90 - * response_obj.exitcode = 1 - * return response_obj - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_8, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_e = __pyx_t_8; - - /* "lib/Naked/toolshed/c/shell.pyx":91 - * return response_obj - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_10) { - - /* "lib/Naked/toolshed/c/shell.pyx":92 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stderr); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L16; - } - __pyx_L16:; - - /* "lib/Naked/toolshed/c/shell.pyx":93 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":73 - * # return object attributes : stdout (bytes), stderr (bytes), exitcode (int) - * #------------------------------------------------------------------------------ - * def muterun(command): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.types import NakedObject - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_NakedObject); - __Pyx_XDECREF(__pyx_v_response_obj); - __Pyx_XDECREF(__pyx_v_response); - __Pyx_XDECREF(__pyx_v_cpe); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":103 - * # execute a ruby script file in a shell subprocess - * #------------------------------------------------------------------------------ - * def execute_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_7execute_rb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_7execute_rb = {__Pyx_NAMESTR("execute_rb"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_7execute_rb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_7execute_rb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_path = 0; - PyObject *__pyx_v_arguments = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("execute_rb (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_path,&__pyx_n_s_arguments,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_kp_s__4); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_path)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arguments); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "execute_rb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_file_path = values[0]; - __pyx_v_arguments = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("execute_rb", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_6execute_rb(__pyx_self, __pyx_v_file_path, __pyx_v_arguments); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_6execute_rb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments) { - PyObject *__pyx_v_rb_command = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("execute_rb", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":104 - * #------------------------------------------------------------------------------ - * def execute_rb(file_path, arguments=""): - * try: # <<<<<<<<<<<<<< - * if len(arguments) > 0: - * rb_command = 'ruby ' + file_path + " " + arguments - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":105 - * def execute_rb(file_path, arguments=""): - * try: - * if len(arguments) > 0: # <<<<<<<<<<<<<< - * rb_command = 'ruby ' + file_path + " " + arguments - * else: - */ - __pyx_t_4 = PyObject_Length(__pyx_v_arguments); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":106 - * try: - * if len(arguments) > 0: - * rb_command = 'ruby ' + file_path + " " + arguments # <<<<<<<<<<<<<< - * else: - * rb_command = 'ruby ' + file_path - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_ruby, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Add(__pyx_t_6, __pyx_kp_s__6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_arguments); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_rb_command = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":108 - * rb_command = 'ruby ' + file_path + " " + arguments - * else: - * rb_command = 'ruby ' + file_path # <<<<<<<<<<<<<< - * return execute(rb_command) # return result of execute() of the ruby file - * except Exception as e: - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_ruby, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_rb_command = __pyx_t_6; - __pyx_t_6 = 0; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":109 - * else: - * rb_command = 'ruby ' + file_path - * return execute(rb_command) # return result of execute() of the ruby file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_execute); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_rb_command); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_rb_command); - __Pyx_GIVEREF(__pyx_v_rb_command); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":110 - * rb_command = 'ruby ' + file_path - * return execute(rb_command) # return result of execute() of the ruby file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":111 - * return execute(rb_command) # return result of execute() of the ruby file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":112 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":113 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":103 - * # execute a ruby script file in a shell subprocess - * #------------------------------------------------------------------------------ - * def execute_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_rb_command); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":119 - * # execute a ruby script file in a shell subprocess, return the output - * #------------------------------------------------------------------------------ - * def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_9run_rb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_9run_rb = {__Pyx_NAMESTR("run_rb"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_9run_rb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_9run_rb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_path = 0; - PyObject *__pyx_v_arguments = 0; - PyObject *__pyx_v_suppress_stdout = 0; - PyObject *__pyx_v_suppress_stderr = 0; - PyObject *__pyx_v_suppress_exit_status_call = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("run_rb (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_path,&__pyx_n_s_arguments,&__pyx_n_s_suppress_stdout,&__pyx_n_s_suppress_stderr,&__pyx_n_s_suppress_exit_status_call,0}; - PyObject* values[5] = {0,0,0,0,0}; - values[1] = ((PyObject *)__pyx_kp_s__4); - values[2] = ((PyObject *)Py_False); - values[3] = ((PyObject *)Py_False); - values[4] = ((PyObject *)Py_True); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_path)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arguments); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_stdout); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_stderr); - if (value) { values[3] = value; kw_args--; } - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_exit_status_call); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "run_rb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_file_path = values[0]; - __pyx_v_arguments = values[1]; - __pyx_v_suppress_stdout = values[2]; - __pyx_v_suppress_stderr = values[3]; - __pyx_v_suppress_exit_status_call = values[4]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("run_rb", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_8run_rb(__pyx_self, __pyx_v_file_path, __pyx_v_arguments, __pyx_v_suppress_stdout, __pyx_v_suppress_stderr, __pyx_v_suppress_exit_status_call); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_8run_rb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments, PyObject *__pyx_v_suppress_stdout, PyObject *__pyx_v_suppress_stderr, PyObject *__pyx_v_suppress_exit_status_call) { - PyObject *__pyx_v_rb_command = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("run_rb", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":120 - * #------------------------------------------------------------------------------ - * def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - * try: # <<<<<<<<<<<<<< - * if len(arguments) > 0: - * rb_command = 'ruby ' + file_path + " " + arguments - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":121 - * def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - * try: - * if len(arguments) > 0: # <<<<<<<<<<<<<< - * rb_command = 'ruby ' + file_path + " " + arguments - * else: - */ - __pyx_t_4 = PyObject_Length(__pyx_v_arguments); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":122 - * try: - * if len(arguments) > 0: - * rb_command = 'ruby ' + file_path + " " + arguments # <<<<<<<<<<<<<< - * else: - * rb_command = 'ruby ' + file_path - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_ruby, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Add(__pyx_t_6, __pyx_kp_s__6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_arguments); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_rb_command = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":124 - * rb_command = 'ruby ' + file_path + " " + arguments - * else: - * rb_command = 'ruby ' + file_path # <<<<<<<<<<<<<< - * return run(rb_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of the ruby file - * except Exception as e: - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_ruby, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_rb_command = __pyx_t_6; - __pyx_t_6 = 0; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":125 - * else: - * rb_command = 'ruby ' + file_path - * return run(rb_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of the ruby file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_run); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_rb_command); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_rb_command); - __Pyx_GIVEREF(__pyx_v_rb_command); - __Pyx_INCREF(__pyx_v_suppress_stdout); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_suppress_stdout); - __Pyx_GIVEREF(__pyx_v_suppress_stdout); - __Pyx_INCREF(__pyx_v_suppress_stderr); - PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_suppress_stderr); - __Pyx_GIVEREF(__pyx_v_suppress_stderr); - __Pyx_INCREF(__pyx_v_suppress_exit_status_call); - PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_v_suppress_exit_status_call); - __Pyx_GIVEREF(__pyx_v_suppress_exit_status_call); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":126 - * rb_command = 'ruby ' + file_path - * return run(rb_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of the ruby file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":127 - * return run(rb_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of the ruby file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":128 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":129 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":119 - * # execute a ruby script file in a shell subprocess, return the output - * #------------------------------------------------------------------------------ - * def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_rb_command); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":134 - * # [ muterun_rb function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11muterun_rb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11muterun_rb = {__Pyx_NAMESTR("muterun_rb"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11muterun_rb, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11muterun_rb(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_path = 0; - PyObject *__pyx_v_arguments = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("muterun_rb (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_path,&__pyx_n_s_arguments,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_kp_s__4); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_path)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arguments); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "muterun_rb") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_file_path = values[0]; - __pyx_v_arguments = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("muterun_rb", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_10muterun_rb(__pyx_self, __pyx_v_file_path, __pyx_v_arguments); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_10muterun_rb(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments) { - PyObject *__pyx_v_rb_command = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("muterun_rb", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":135 - * #------------------------------------------------------------------------------ - * def muterun_rb(file_path, arguments=""): - * try: # <<<<<<<<<<<<<< - * if len(arguments) > 0: - * rb_command = 'ruby ' + file_path + " " + arguments - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":136 - * def muterun_rb(file_path, arguments=""): - * try: - * if len(arguments) > 0: # <<<<<<<<<<<<<< - * rb_command = 'ruby ' + file_path + " " + arguments - * else: - */ - __pyx_t_4 = PyObject_Length(__pyx_v_arguments); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":137 - * try: - * if len(arguments) > 0: - * rb_command = 'ruby ' + file_path + " " + arguments # <<<<<<<<<<<<<< - * else: - * rb_command = 'ruby ' + file_path - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_ruby, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Add(__pyx_t_6, __pyx_kp_s__6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_arguments); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_rb_command = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":139 - * rb_command = 'ruby ' + file_path + " " + arguments - * else: - * rb_command = 'ruby ' + file_path # <<<<<<<<<<<<<< - * return muterun(rb_command) # return result of muterun() of the ruby file - * except Exception as e: - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_ruby, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_rb_command = __pyx_t_6; - __pyx_t_6 = 0; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":140 - * else: - * rb_command = 'ruby ' + file_path - * return muterun(rb_command) # return result of muterun() of the ruby file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_muterun); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_rb_command); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_rb_command); - __Pyx_GIVEREF(__pyx_v_rb_command); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":141 - * rb_command = 'ruby ' + file_path - * return muterun(rb_command) # return result of muterun() of the ruby file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":142 - * return muterun(rb_command) # return result of muterun() of the ruby file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":143 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":144 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":134 - * # [ muterun_rb function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun_rb", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_rb_command); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":156 - * # returns False for unsuccessful (!=0) exit status code - * #------------------------------------------------------------------------------ - * def execute_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_13execute_js(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_13execute_js = {__Pyx_NAMESTR("execute_js"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_13execute_js, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_13execute_js(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_path = 0; - PyObject *__pyx_v_arguments = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("execute_js (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_path,&__pyx_n_s_arguments,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_kp_s__4); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_path)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arguments); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "execute_js") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_file_path = values[0]; - __pyx_v_arguments = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("execute_js", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_12execute_js(__pyx_self, __pyx_v_file_path, __pyx_v_arguments); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_12execute_js(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments) { - PyObject *__pyx_v_js_command = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("execute_js", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":157 - * #------------------------------------------------------------------------------ - * def execute_js(file_path, arguments=""): - * try: # <<<<<<<<<<<<<< - * if len(arguments) > 0: - * js_command = 'node ' + file_path + " " + arguments - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":158 - * def execute_js(file_path, arguments=""): - * try: - * if len(arguments) > 0: # <<<<<<<<<<<<<< - * js_command = 'node ' + file_path + " " + arguments - * else: - */ - __pyx_t_4 = PyObject_Length(__pyx_v_arguments); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":159 - * try: - * if len(arguments) > 0: - * js_command = 'node ' + file_path + " " + arguments # <<<<<<<<<<<<<< - * else: - * js_command = 'node ' + file_path - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_node, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Add(__pyx_t_6, __pyx_kp_s__6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_arguments); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_js_command = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":161 - * js_command = 'node ' + file_path + " " + arguments - * else: - * js_command = 'node ' + file_path # <<<<<<<<<<<<<< - * return execute(js_command) # return result of execute() of node.js file - * except Exception as e: - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_node, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_js_command = __pyx_t_6; - __pyx_t_6 = 0; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":162 - * else: - * js_command = 'node ' + file_path - * return execute(js_command) # return result of execute() of node.js file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_execute); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_js_command); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_js_command); - __Pyx_GIVEREF(__pyx_v_js_command); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":163 - * js_command = 'node ' + file_path - * return execute(js_command) # return result of execute() of node.js file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":164 - * return execute(js_command) # return result of execute() of node.js file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":165 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * #------------------------------------------------------------------------------ - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":166 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * #------------------------------------------------------------------------------ - * # [ run_js function ] (byte string or False) - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":156 - * # returns False for unsuccessful (!=0) exit status code - * #------------------------------------------------------------------------------ - * def execute_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.execute_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_js_command); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":176 - * # returns False if the subprocess exits with a non-zero exit code - * #------------------------------------------------------------------------------ - * def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_15run_js(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_15run_js = {__Pyx_NAMESTR("run_js"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_15run_js, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_15run_js(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_path = 0; - PyObject *__pyx_v_arguments = 0; - PyObject *__pyx_v_suppress_stdout = 0; - PyObject *__pyx_v_suppress_stderr = 0; - PyObject *__pyx_v_suppress_exit_status_call = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("run_js (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_path,&__pyx_n_s_arguments,&__pyx_n_s_suppress_stdout,&__pyx_n_s_suppress_stderr,&__pyx_n_s_suppress_exit_status_call,0}; - PyObject* values[5] = {0,0,0,0,0}; - values[1] = ((PyObject *)__pyx_kp_s__4); - values[2] = ((PyObject *)Py_False); - values[3] = ((PyObject *)Py_False); - values[4] = ((PyObject *)Py_True); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_path)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arguments); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_stdout); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_stderr); - if (value) { values[3] = value; kw_args--; } - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_suppress_exit_status_call); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "run_js") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_file_path = values[0]; - __pyx_v_arguments = values[1]; - __pyx_v_suppress_stdout = values[2]; - __pyx_v_suppress_stderr = values[3]; - __pyx_v_suppress_exit_status_call = values[4]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("run_js", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_14run_js(__pyx_self, __pyx_v_file_path, __pyx_v_arguments, __pyx_v_suppress_stdout, __pyx_v_suppress_stderr, __pyx_v_suppress_exit_status_call); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_14run_js(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments, PyObject *__pyx_v_suppress_stdout, PyObject *__pyx_v_suppress_stderr, PyObject *__pyx_v_suppress_exit_status_call) { - PyObject *__pyx_v_js_command = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("run_js", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":177 - * #------------------------------------------------------------------------------ - * def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - * try: # <<<<<<<<<<<<<< - * if len(arguments) > 0: - * js_command = 'node ' + file_path + " " + arguments - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":178 - * def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - * try: - * if len(arguments) > 0: # <<<<<<<<<<<<<< - * js_command = 'node ' + file_path + " " + arguments - * else: - */ - __pyx_t_4 = PyObject_Length(__pyx_v_arguments); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":179 - * try: - * if len(arguments) > 0: - * js_command = 'node ' + file_path + " " + arguments # <<<<<<<<<<<<<< - * else: - * js_command = 'node ' + file_path - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_node, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Add(__pyx_t_6, __pyx_kp_s__6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_arguments); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_js_command = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":181 - * js_command = 'node ' + file_path + " " + arguments - * else: - * js_command = 'node ' + file_path # <<<<<<<<<<<<<< - * return run(js_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of node.js file - * except Exception as e: - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_node, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_js_command = __pyx_t_6; - __pyx_t_6 = 0; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":182 - * else: - * js_command = 'node ' + file_path - * return run(js_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of node.js file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_run); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_js_command); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_js_command); - __Pyx_GIVEREF(__pyx_v_js_command); - __Pyx_INCREF(__pyx_v_suppress_stdout); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_suppress_stdout); - __Pyx_GIVEREF(__pyx_v_suppress_stdout); - __Pyx_INCREF(__pyx_v_suppress_stderr); - PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_suppress_stderr); - __Pyx_GIVEREF(__pyx_v_suppress_stderr); - __Pyx_INCREF(__pyx_v_suppress_exit_status_call); - PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_v_suppress_exit_status_call); - __Pyx_GIVEREF(__pyx_v_suppress_exit_status_call); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":183 - * js_command = 'node ' + file_path - * return run(js_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of node.js file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":184 - * return run(js_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of node.js file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":185 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":186 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":176 - * # returns False if the subprocess exits with a non-zero exit code - * #------------------------------------------------------------------------------ - * def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.run_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_js_command); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":191 - * # [ muterun_js function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_17muterun_js(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_17muterun_js = {__Pyx_NAMESTR("muterun_js"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_17muterun_js, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_17muterun_js(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_path = 0; - PyObject *__pyx_v_arguments = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("muterun_js (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_path,&__pyx_n_s_arguments,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_kp_s__4); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_path)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_arguments); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "muterun_js") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_file_path = values[0]; - __pyx_v_arguments = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("muterun_js", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_16muterun_js(__pyx_self, __pyx_v_file_path, __pyx_v_arguments); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_16muterun_js(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_path, PyObject *__pyx_v_arguments) { - PyObject *__pyx_v_js_command = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("muterun_js", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":192 - * #------------------------------------------------------------------------------ - * def muterun_js(file_path, arguments=""): - * try: # <<<<<<<<<<<<<< - * if len(arguments) > 0: - * js_command = 'node ' + file_path + " " + arguments - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":193 - * def muterun_js(file_path, arguments=""): - * try: - * if len(arguments) > 0: # <<<<<<<<<<<<<< - * js_command = 'node ' + file_path + " " + arguments - * else: - */ - __pyx_t_4 = PyObject_Length(__pyx_v_arguments); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":194 - * try: - * if len(arguments) > 0: - * js_command = 'node ' + file_path + " " + arguments # <<<<<<<<<<<<<< - * else: - * js_command = 'node ' + file_path - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_node, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyNumber_Add(__pyx_t_6, __pyx_kp_s__6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyNumber_Add(__pyx_t_7, __pyx_v_arguments); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_v_js_command = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L11; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":196 - * js_command = 'node ' + file_path + " " + arguments - * else: - * js_command = 'node ' + file_path # <<<<<<<<<<<<<< - * return muterun(js_command) # return result of muterun() of node.js file - * except Exception as e: - */ - __pyx_t_6 = PyNumber_Add(__pyx_kp_s_node, __pyx_v_file_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_v_js_command = __pyx_t_6; - __pyx_t_6 = 0; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/shell.pyx":197 - * else: - * js_command = 'node ' + file_path - * return muterun(js_command) # return result of muterun() of node.js file # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_muterun); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_js_command); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_js_command); - __Pyx_GIVEREF(__pyx_v_js_command); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":198 - * js_command = 'node ' + file_path - * return muterun(js_command) # return result of muterun() of node.js file - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":199 - * return muterun(js_command) # return result of muterun() of node.js file - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":200 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":201 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":191 - * # [ muterun_js function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.muterun_js", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_js_command); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":210 - * #------------------------------------------------------------------------------ - * class Environment(): - * def __init__(self): # <<<<<<<<<<<<<< - * self.env = os.environ - * self.vars = list(os.environ.keys()) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_1__init__, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment___init__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":211 - * class Environment(): - * def __init__(self): - * self.env = os.environ # <<<<<<<<<<<<<< - * self.vars = list(os.environ.keys()) - * - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_environ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_env, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":212 - * def __init__(self): - * self.env = os.environ - * self.vars = list(os.environ.keys()) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_environ); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_vars, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":210 - * #------------------------------------------------------------------------------ - * class Environment(): - * def __init__(self): # <<<<<<<<<<<<<< - * self.env = os.environ - * self.vars = list(os.environ.keys()) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":218 - * # return boolean for presence of a variable name in the shell environment - * #------------------------------------------------------------------------------ - * def is_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * return (var_name in self.vars) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_3is_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_3is_var = {__Pyx_NAMESTR("is_var"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_3is_var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_3is_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_var_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_var (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_var_name,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var_name)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("is_var", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "is_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_var_name = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("is_var", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.is_var", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_2is_var(__pyx_self, __pyx_v_self, __pyx_v_var_name); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_2is_var(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_var_name) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_var", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":219 - * #------------------------------------------------------------------------------ - * def is_var(self, var_name): - * try: # <<<<<<<<<<<<<< - * return (var_name in self.vars) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":220 - * def is_var(self, var_name): - * try: - * return (var_name in self.vars) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_vars); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PySequence_Contains(__pyx_v_var_name, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":221 - * try: - * return (var_name in self.vars) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") - */ - __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_6) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.is_var", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":222 - * return (var_name in self.vars) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") - * raise e - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/shell.pyx":223 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/shell.pyx":224 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":218 - * # return boolean for presence of a variable name in the shell environment - * #------------------------------------------------------------------------------ - * def is_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * return (var_name in self.vars) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.is_var", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":231 - * # returns empty string if the variable is not included in the environment variable list - * #------------------------------------------------------------------------------ - * def get_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_5get_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_5get_var = {__Pyx_NAMESTR("get_var"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_5get_var, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_5get_var(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_var_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_var (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_var_name,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var_name)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("get_var", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_var") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_var_name = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_var", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.get_var", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_4get_var(__pyx_self, __pyx_v_self, __pyx_v_var_name); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_4get_var(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_var_name) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_var", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":232 - * #------------------------------------------------------------------------------ - * def get_var(self, var_name): - * try: # <<<<<<<<<<<<<< - * if var_name in self.vars: - * return self.env[var_name] - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":233 - * def get_var(self, var_name): - * try: - * if var_name in self.vars: # <<<<<<<<<<<<<< - * return self.env[var_name] - * else: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_vars); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PySequence_Contains(__pyx_v_var_name, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/shell.pyx":234 - * try: - * if var_name in self.vars: - * return self.env[var_name] # <<<<<<<<<<<<<< - * else: - * return "" - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_env); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyObject_GetItem(__pyx_t_4, __pyx_v_var_name); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":236 - * return self.env[var_name] - * else: - * return "" # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_kp_s__4); - __pyx_r = __pyx_kp_s__4; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":237 - * else: - * return "" - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.get_var", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_4, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/shell.pyx":238 - * return "" - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/shell.pyx":239 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":240 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":231 - * # returns empty string if the variable is not included in the environment variable list - * #------------------------------------------------------------------------------ - * def get_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.get_var", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/shell.pyx":247 - * # if the variable name is not in the environment list, returns an empty list - * #------------------------------------------------------------------------------ - * def get_split_var_list(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_7get_split_var_list(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_7get_split_var_list = {__Pyx_NAMESTR("get_split_var_list"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_7get_split_var_list, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5shell_11Environment_7get_split_var_list(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_var_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_split_var_list (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_var_name,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_var_name)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("get_split_var_list", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_split_var_list") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_var_name = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_split_var_list", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.get_split_var_list", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_6get_split_var_list(__pyx_self, __pyx_v_self, __pyx_v_var_name); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5shell_11Environment_6get_split_var_list(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_var_name) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_split_var_list", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":248 - * #------------------------------------------------------------------------------ - * def get_split_var_list(self, var_name): - * try: # <<<<<<<<<<<<<< - * if var_name in self.vars: - * return self.env[var_name].split(os.pathsep) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":249 - * def get_split_var_list(self, var_name): - * try: - * if var_name in self.vars: # <<<<<<<<<<<<<< - * return self.env[var_name].split(os.pathsep) - * else: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_vars); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PySequence_Contains(__pyx_v_var_name, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/shell.pyx":250 - * try: - * if var_name in self.vars: - * return self.env[var_name].split(os.pathsep) # <<<<<<<<<<<<<< - * else: - * return [] - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_env); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = PyObject_GetItem(__pyx_t_4, __pyx_v_var_name); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_pathsep); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_8); - __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/shell.pyx":252 - * return self.env[var_name].split(os.pathsep) - * else: - * return [] # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":253 - * else: - * return [] - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") - */ - __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_9) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.get_split_var_list", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_e = __pyx_t_7; - - /* "lib/Naked/toolshed/c/shell.pyx":254 - * return [] - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/shell.pyx":255 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/shell.pyx":256 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/shell.pyx":247 - * # if the variable name is not in the environment list, returns an empty list - * #------------------------------------------------------------------------------ - * def get_split_var_list(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.shell.Environment.get_split_var_list", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("shell"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_CalledProcessError, __pyx_k_CalledProcessError, sizeof(__pyx_k_CalledProcessError), 0, 0, 1, 1}, - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s_Environment, __pyx_k_Environment, sizeof(__pyx_k_Environment), 0, 0, 1, 1}, - {&__pyx_n_s_Environment___init, __pyx_k_Environment___init, sizeof(__pyx_k_Environment___init), 0, 0, 1, 1}, - {&__pyx_n_s_Environment_get_split_var_list, __pyx_k_Environment_get_split_var_list, sizeof(__pyx_k_Environment_get_split_var_list), 0, 0, 1, 1}, - {&__pyx_n_s_Environment_get_var, __pyx_k_Environment_get_var, sizeof(__pyx_k_Environment_get_var), 0, 0, 1, 1}, - {&__pyx_n_s_Environment_is_var, __pyx_k_Environment_is_var, sizeof(__pyx_k_Environment_is_var), 0, 0, 1, 1}, - {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject, __pyx_k_NakedObject, sizeof(__pyx_k_NakedObject), 0, 0, 1, 1}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to, __pyx_k_Naked_Framework_Error_unable_to, sizeof(__pyx_k_Naked_Framework_Error_unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_10, __pyx_k_Naked_Framework_Error_unable_to_10, sizeof(__pyx_k_Naked_Framework_Error_unable_to_10), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_2, __pyx_k_Naked_Framework_Error_unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_unable_to_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_3, __pyx_k_Naked_Framework_Error_unable_to_3, sizeof(__pyx_k_Naked_Framework_Error_unable_to_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_4, __pyx_k_Naked_Framework_Error_unable_to_4, sizeof(__pyx_k_Naked_Framework_Error_unable_to_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_5, __pyx_k_Naked_Framework_Error_unable_to_5, sizeof(__pyx_k_Naked_Framework_Error_unable_to_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_6, __pyx_k_Naked_Framework_Error_unable_to_6, sizeof(__pyx_k_Naked_Framework_Error_unable_to_6), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_7, __pyx_k_Naked_Framework_Error_unable_to_7, sizeof(__pyx_k_Naked_Framework_Error_unable_to_7), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_8, __pyx_k_Naked_Framework_Error_unable_to_8, sizeof(__pyx_k_Naked_Framework_Error_unable_to_8), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_9, __pyx_k_Naked_Framework_Error_unable_to_9, sizeof(__pyx_k_Naked_Framework_Error_unable_to_9), 0, 0, 1, 0}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_types, __pyx_k_Naked_toolshed_types, sizeof(__pyx_k_Naked_toolshed_types), 0, 0, 1, 1}, - {&__pyx_n_s_STDOUT, __pyx_k_STDOUT, sizeof(__pyx_k_STDOUT), 0, 0, 1, 1}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_kp_b__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 0, 0}, - {&__pyx_kp_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 0}, - {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0}, - {&__pyx_n_s_arguments, __pyx_k_arguments, sizeof(__pyx_k_arguments), 0, 0, 1, 1}, - {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1}, - {&__pyx_n_s_check_output, __pyx_k_check_output, sizeof(__pyx_k_check_output), 0, 0, 1, 1}, - {&__pyx_n_s_command, __pyx_k_command, sizeof(__pyx_k_command), 0, 0, 1, 1}, - {&__pyx_n_s_cpe, __pyx_k_cpe, sizeof(__pyx_k_cpe), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, - {&__pyx_n_s_env, __pyx_k_env, sizeof(__pyx_k_env), 0, 0, 1, 1}, - {&__pyx_n_s_environ, __pyx_k_environ, sizeof(__pyx_k_environ), 0, 0, 1, 1}, - {&__pyx_n_s_execute, __pyx_k_execute, sizeof(__pyx_k_execute), 0, 0, 1, 1}, - {&__pyx_n_s_execute_js, __pyx_k_execute_js, sizeof(__pyx_k_execute_js), 0, 0, 1, 1}, - {&__pyx_n_s_execute_rb, __pyx_k_execute_rb, sizeof(__pyx_k_execute_rb), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_exitcode, __pyx_k_exitcode, sizeof(__pyx_k_exitcode), 0, 0, 1, 1}, - {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, - {&__pyx_n_s_file_path, __pyx_k_file_path, sizeof(__pyx_k_file_path), 0, 0, 1, 1}, - {&__pyx_n_s_get_split_var_list, __pyx_k_get_split_var_list, sizeof(__pyx_k_get_split_var_list), 0, 0, 1, 1}, - {&__pyx_n_s_get_var, __pyx_k_get_var, sizeof(__pyx_k_get_var), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_is_var, __pyx_k_is_var, sizeof(__pyx_k_is_var), 0, 0, 1, 1}, - {&__pyx_n_s_js_command, __pyx_k_js_command, sizeof(__pyx_k_js_command), 0, 0, 1, 1}, - {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_shell, __pyx_k_lib_Naked_toolshed_c_shell, sizeof(__pyx_k_lib_Naked_toolshed_c_shell), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_muterun, __pyx_k_muterun, sizeof(__pyx_k_muterun), 0, 0, 1, 1}, - {&__pyx_n_s_muterun_js, __pyx_k_muterun_js, sizeof(__pyx_k_muterun_js), 0, 0, 1, 1}, - {&__pyx_n_s_muterun_rb, __pyx_k_muterun_rb, sizeof(__pyx_k_muterun_rb), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_kp_s_node, __pyx_k_node, sizeof(__pyx_k_node), 0, 0, 1, 0}, - {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, - {&__pyx_n_s_output, __pyx_k_output, sizeof(__pyx_k_output), 0, 0, 1, 1}, - {&__pyx_n_s_pathsep, __pyx_k_pathsep, sizeof(__pyx_k_pathsep), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_rb_command, __pyx_k_rb_command, sizeof(__pyx_k_rb_command), 0, 0, 1, 1}, - {&__pyx_n_s_response, __pyx_k_response, sizeof(__pyx_k_response), 0, 0, 1, 1}, - {&__pyx_n_s_response_obj, __pyx_k_response_obj, sizeof(__pyx_k_response_obj), 0, 0, 1, 1}, - {&__pyx_n_s_returncode, __pyx_k_returncode, sizeof(__pyx_k_returncode), 0, 0, 1, 1}, - {&__pyx_kp_s_ruby, __pyx_k_ruby, sizeof(__pyx_k_ruby), 0, 0, 1, 0}, - {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1}, - {&__pyx_n_s_run_js, __pyx_k_run_js, sizeof(__pyx_k_run_js), 0, 0, 1, 1}, - {&__pyx_n_s_run_rb, __pyx_k_run_rb, sizeof(__pyx_k_run_rb), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_shell, __pyx_k_shell, sizeof(__pyx_k_shell), 0, 0, 1, 1}, - {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, - {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1}, - {&__pyx_n_s_stdout, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1}, - {&__pyx_n_s_subprocess, __pyx_k_subprocess, sizeof(__pyx_k_subprocess), 0, 0, 1, 1}, - {&__pyx_n_s_suppress_exit_status_call, __pyx_k_suppress_exit_status_call, sizeof(__pyx_k_suppress_exit_status_call), 0, 0, 1, 1}, - {&__pyx_n_s_suppress_stderr, __pyx_k_suppress_stderr, sizeof(__pyx_k_suppress_stderr), 0, 0, 1, 1}, - {&__pyx_n_s_suppress_stdout, __pyx_k_suppress_stdout, sizeof(__pyx_k_suppress_stdout), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_te, __pyx_k_te, sizeof(__pyx_k_te), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_var_name, __pyx_k_var_name, sizeof(__pyx_k_var_name), 0, 0, 1, 1}, - {&__pyx_n_s_vars, __pyx_k_vars, sizeof(__pyx_k_vars), 0, 0, 1, 1}, - {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/shell.pyx":30 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "lib/Naked/toolshed/c/shell.pyx":60 - * sys.exit(cpe.returncode) - * else: - * sys.exit(1) # <<<<<<<<<<<<<< - * return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) - * except Exception as e: - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "lib/Naked/toolshed/c/shell.pyx":64 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_2); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "lib/Naked/toolshed/c/shell.pyx":92 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_3); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "lib/Naked/toolshed/c/shell.pyx":112 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_4); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "lib/Naked/toolshed/c/shell.pyx":128 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_4); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - - /* "lib/Naked/toolshed/c/shell.pyx":143 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_5); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "lib/Naked/toolshed/c/shell.pyx":165 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * #------------------------------------------------------------------------------ - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_6); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "lib/Naked/toolshed/c/shell.pyx":185 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_6); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "lib/Naked/toolshed/c/shell.pyx":200 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_7); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - - /* "lib/Naked/toolshed/c/shell.pyx":223 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_8); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - - /* "lib/Naked/toolshed/c/shell.pyx":239 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_9); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); - - /* "lib/Naked/toolshed/c/shell.pyx":255 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_10); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - - /* "lib/Naked/toolshed/c/shell.pyx":16 - * # returns False if exit status != 0 - * #------------------------------------------------------------------------------ - * def execute(command): # <<<<<<<<<<<<<< - * try: - * response = subprocess.call(command, shell=True) - */ - __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_command, __pyx_n_s_response, __pyx_n_s_cpe, __pyx_n_s_te, __pyx_n_s_e); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_execute, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":44 - * # suppress_exit_status_call = False >> raise SystemExit with the returned status code - * #------------------------------------------------------------------------------ - * def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - */ - __pyx_tuple__18 = PyTuple_Pack(8, __pyx_n_s_command, __pyx_n_s_suppress_stdout, __pyx_n_s_suppress_stderr, __pyx_n_s_suppress_exit_status_call, __pyx_n_s_response, __pyx_n_s_cpe, __pyx_n_s_te, __pyx_n_s_e); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_run, 44, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":73 - * # return object attributes : stdout (bytes), stderr (bytes), exitcode (int) - * #------------------------------------------------------------------------------ - * def muterun(command): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.types import NakedObject - */ - __pyx_tuple__20 = PyTuple_Pack(6, __pyx_n_s_command, __pyx_n_s_NakedObject, __pyx_n_s_response_obj, __pyx_n_s_response, __pyx_n_s_cpe, __pyx_n_s_e); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_muterun, 73, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":103 - * # execute a ruby script file in a shell subprocess - * #------------------------------------------------------------------------------ - * def execute_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_tuple__22 = PyTuple_Pack(4, __pyx_n_s_file_path, __pyx_n_s_arguments, __pyx_n_s_rb_command, __pyx_n_s_e); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); - __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_execute_rb, 103, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":119 - * # execute a ruby script file in a shell subprocess, return the output - * #------------------------------------------------------------------------------ - * def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_tuple__24 = PyTuple_Pack(7, __pyx_n_s_file_path, __pyx_n_s_arguments, __pyx_n_s_suppress_stdout, __pyx_n_s_suppress_stderr, __pyx_n_s_suppress_exit_status_call, __pyx_n_s_rb_command, __pyx_n_s_e); if (unlikely(!__pyx_tuple__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__24); - __Pyx_GIVEREF(__pyx_tuple__24); - __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__24, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_run_rb, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":134 - * # [ muterun_rb function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_tuple__26 = PyTuple_Pack(4, __pyx_n_s_file_path, __pyx_n_s_arguments, __pyx_n_s_rb_command, __pyx_n_s_e); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_muterun_rb, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":156 - * # returns False for unsuccessful (!=0) exit status code - * #------------------------------------------------------------------------------ - * def execute_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_tuple__28 = PyTuple_Pack(4, __pyx_n_s_file_path, __pyx_n_s_arguments, __pyx_n_s_js_command, __pyx_n_s_e); if (unlikely(!__pyx_tuple__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__28); - __Pyx_GIVEREF(__pyx_tuple__28); - __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_execute_js, 156, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":176 - * # returns False if the subprocess exits with a non-zero exit code - * #------------------------------------------------------------------------------ - * def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_tuple__30 = PyTuple_Pack(7, __pyx_n_s_file_path, __pyx_n_s_arguments, __pyx_n_s_suppress_stdout, __pyx_n_s_suppress_stderr, __pyx_n_s_suppress_exit_status_call, __pyx_n_s_js_command, __pyx_n_s_e); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__30); - __Pyx_GIVEREF(__pyx_tuple__30); - __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_run_js, 176, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":191 - * # [ muterun_js function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_tuple__32 = PyTuple_Pack(4, __pyx_n_s_file_path, __pyx_n_s_arguments, __pyx_n_s_js_command, __pyx_n_s_e); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); - __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_muterun_js, 191, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":210 - * #------------------------------------------------------------------------------ - * class Environment(): - * def __init__(self): # <<<<<<<<<<<<<< - * self.env = os.environ - * self.vars = list(os.environ.keys()) - */ - __pyx_tuple__34 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__34); - __Pyx_GIVEREF(__pyx_tuple__34); - __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 210, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":218 - * # return boolean for presence of a variable name in the shell environment - * #------------------------------------------------------------------------------ - * def is_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * return (var_name in self.vars) - */ - __pyx_tuple__36 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_var_name, __pyx_n_s_e); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__36); - __Pyx_GIVEREF(__pyx_tuple__36); - __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_is_var, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":231 - * # returns empty string if the variable is not included in the environment variable list - * #------------------------------------------------------------------------------ - * def get_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - __pyx_tuple__38 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_var_name, __pyx_n_s_e); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__38); - __Pyx_GIVEREF(__pyx_tuple__38); - __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get_var, 231, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/shell.pyx":247 - * # if the variable name is not in the environment list, returns an empty list - * #------------------------------------------------------------------------------ - * def get_split_var_list(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - __pyx_tuple__40 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_var_name, __pyx_n_s_e); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__40); - __Pyx_GIVEREF(__pyx_tuple__40); - __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_get_split_var_list, 247, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initshell(void); /*proto*/ -PyMODINIT_FUNC initshell(void) -#else -PyMODINIT_FUNC PyInit_shell(void); /*proto*/ -PyMODINIT_FUNC PyInit_shell(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_shell(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("shell"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__shell) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.shell")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.shell", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/shell.pyx":5 - * # cython: profile=False - * - * import os # <<<<<<<<<<<<<< - * import sys - * import subprocess - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":6 - * - * import os - * import sys # <<<<<<<<<<<<<< - * import subprocess - * from Naked.settings import debug as DEBUG_FLAG - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":7 - * import os - * import sys - * import subprocess # <<<<<<<<<<<<<< - * from Naked.settings import debug as DEBUG_FLAG - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_subprocess, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_subprocess, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":8 - * import sys - * import subprocess - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":16 - * # returns False if exit status != 0 - * #------------------------------------------------------------------------------ - * def execute(command): # <<<<<<<<<<<<<< - * try: - * response = subprocess.call(command, shell=True) - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_1execute, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_execute, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":44 - * # suppress_exit_status_call = False >> raise SystemExit with the returned status code - * #------------------------------------------------------------------------------ - * def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_3run, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_run, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":73 - * # return object attributes : stdout (bytes), stderr (bytes), exitcode (int) - * #------------------------------------------------------------------------------ - * def muterun(command): # <<<<<<<<<<<<<< - * try: - * from Naked.toolshed.types import NakedObject - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_5muterun, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_muterun, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":103 - * # execute a ruby script file in a shell subprocess - * #------------------------------------------------------------------------------ - * def execute_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_7execute_rb, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_execute_rb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":119 - * # execute a ruby script file in a shell subprocess, return the output - * #------------------------------------------------------------------------------ - * def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_9run_rb, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_run_rb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":134 - * # [ muterun_rb function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_rb(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11muterun_rb, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_muterun_rb, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":156 - * # returns False for unsuccessful (!=0) exit status code - * #------------------------------------------------------------------------------ - * def execute_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_13execute_js, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_execute_js, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":176 - * # returns False if the subprocess exits with a non-zero exit code - * #------------------------------------------------------------------------------ - * def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_15run_js, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_run_js, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":191 - * # [ muterun_js function ] (NakedObject response object) - * #------------------------------------------------------------------------------ - * def muterun_js(file_path, arguments=""): # <<<<<<<<<<<<<< - * try: - * if len(arguments) > 0: - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_17muterun_js, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_muterun_js, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":209 - * # self.vars = the environment variable names list - * #------------------------------------------------------------------------------ - * class Environment(): # <<<<<<<<<<<<<< - * def __init__(self): - * self.env = os.environ - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Environment, __pyx_n_s_Environment, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_shell, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/shell.pyx":210 - * #------------------------------------------------------------------------------ - * class Environment(): - * def __init__(self): # <<<<<<<<<<<<<< - * self.env = os.environ - * self.vars = list(os.environ.keys()) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_1__init__, 0, __pyx_n_s_Environment___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__35)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":218 - * # return boolean for presence of a variable name in the shell environment - * #------------------------------------------------------------------------------ - * def is_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * return (var_name in self.vars) - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_3is_var, 0, __pyx_n_s_Environment_is_var, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_is_var, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":231 - * # returns empty string if the variable is not included in the environment variable list - * #------------------------------------------------------------------------------ - * def get_var(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_5get_var, 0, __pyx_n_s_Environment_get_var, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get_var, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":247 - * # if the variable name is not in the environment list, returns an empty list - * #------------------------------------------------------------------------------ - * def get_split_var_list(self, var_name): # <<<<<<<<<<<<<< - * try: - * if var_name in self.vars: - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5shell_11Environment_7get_split_var_list, 0, __pyx_n_s_Environment_get_split_var_list, NULL, __pyx_n_s_lib_Naked_toolshed_c_shell, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_get_split_var_list, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":209 - * # self.vars = the environment variable names list - * #------------------------------------------------------------------------------ - * class Environment(): # <<<<<<<<<<<<<< - * def __init__(self): - * self.env = os.environ - */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_Environment, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Environment, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/shell.pyx":259 - * - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - * # e = Environment() - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_3) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/shell.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.shell", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.shell"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static PyObject *__Pyx_GetStdout(void) { - PyObject *f = PySys_GetObject((char *)"stdout"); - if (!f) { - PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); - } - return f; -} -static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { - int i; - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { - PyObject* v; - if (PyFile_SoftSpace(f, 1)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - v = PyTuple_GET_ITEM(arg_tuple, i); - if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) - goto error; - if (PyString_Check(v)) { - char *s = PyString_AsString(v); - Py_ssize_t len = PyString_Size(v); - if (len > 0) { - switch (s[len-1]) { - case ' ': break; - case '\f': case '\r': case '\n': case '\t': case '\v': - PyFile_SoftSpace(f, 0); - break; - default: break; - } - } - } - } - if (newline) { - if (PyFile_WriteString("\n", f) < 0) - goto error; - PyFile_SoftSpace(f, 0); - } - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; -} -#else /* Python 3 has a print function */ -static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { - PyObject* kwargs = 0; - PyObject* result = 0; - PyObject* end_string; - if (unlikely(!__pyx_print)) { - __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); - if (!__pyx_print) - return -1; - } - if (stream) { - kwargs = PyDict_New(); - if (unlikely(!kwargs)) - return -1; - if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) - goto bad; - if (!newline) { - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - goto bad; - if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - goto bad; - } - Py_DECREF(end_string); - } - } else if (!newline) { - if (unlikely(!__pyx_print_kwargs)) { - __pyx_print_kwargs = PyDict_New(); - if (unlikely(!__pyx_print_kwargs)) - return -1; - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - return -1; - if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - return -1; - } - Py_DECREF(end_string); - } - kwargs = __pyx_print_kwargs; - } - result = PyObject_Call(__pyx_print, arg_tuple, kwargs); - if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) - Py_DECREF(kwargs); - if (!result) - return -1; - Py_DECREF(result); - return 0; -bad: - if (kwargs != __pyx_print_kwargs) - Py_XDECREF(kwargs); - return -1; -} -#endif - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static int __Pyx_PrintOne(PyObject* f, PyObject *o) { - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - if (PyFile_SoftSpace(f, 0)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) - goto error; - if (PyFile_WriteString("\n", f) < 0) - goto error; - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; - /* the line below is just to avoid C compiler - * warnings about unused functions */ - return __Pyx_Print(f, NULL, 0); -} -#else /* Python 3 has a print function */ -static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { - int res; - PyObject* arg_tuple = PyTuple_Pack(1, o); - if (unlikely(!arg_tuple)) - return -1; - res = __Pyx_Print(stream, arg_tuple, 1); - Py_DECREF(arg_tuple); - return res; -} -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.pyx deleted file mode 100644 index 728c9ac..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/shell.pyx +++ /dev/null @@ -1,264 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -import os -import sys -import subprocess -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [ execute function ] (boolean) -# run a shell command and print std out / std err to terminal -# returns True if exit status = 0 -# returns False if exit status != 0 -#------------------------------------------------------------------------------ -def execute(command): - try: - response = subprocess.call(command, shell=True) - if response == 0: - return True - else: - return False - except subprocess.CalledProcessError as cpe: - try: - sys.stderr.write(cpe.output) - except TypeError as te: - sys.stderr.write(str(cpe.output)) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") - raise e - - -#------------------------------------------------------------------------------ -# [ run function ] (bytes string or False) -# run a shell command -# default = -# success:: print to std out and return the std out string -# error:: print to stderr return False, suppress SystemExit on error to permit ongoing run of calling script -# suppress_stdout = True >> suppress std output stream print (returns string) -# suppress_stderr = True >> suppress std err stream print (returns False) -# suppress_exit_status_call = False >> raise SystemExit with the returned status code -#------------------------------------------------------------------------------ -def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - try: - response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - if not suppress_stdout: - print(response) - return response - except subprocess.CalledProcessError as cpe: - if not suppress_stderr: # error in existing application (non-zero exit status) - try: - sys.stderr.write(cpe.output) - except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output - sys.stderr.write(str(cpe.output)) - if not suppress_exit_status_call: - if cpe.returncode: - sys.exit(cpe.returncode) - else: - sys.exit(1) - return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") - raise e - - -#------------------------------------------------------------------------------ -# [ muterun function ] (NakedObject with attributes for stdout, stderr, exitcode) -# run a shell command and return a response object -# return object attributes : stdout (bytes), stderr (bytes), exitcode (int) -#------------------------------------------------------------------------------ -def muterun(command): - try: - from Naked.toolshed.types import NakedObject - response_obj = NakedObject() - response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - response_obj.stdout = response - response_obj.exitcode = 0 - response_obj.stderr = b"" - return response_obj - except subprocess.CalledProcessError as cpe: - response_obj.stdout = b"" - response_obj.stderr = cpe.output - if cpe.returncode: - response_obj.exitcode = cpe.returncode - else: - response_obj.exitcode = 1 - return response_obj - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") - raise e - - -#------------------------------------------------------------------------------ -# RUBY COMMAND EXECUTION -#------------------------------------------------------------------------------ -#------------------------------------------------------------------------------ -# [ execute_rb function ] (boolean) -# execute a ruby script file in a shell subprocess -#------------------------------------------------------------------------------ -def execute_rb(file_path, arguments=""): - try: - if len(arguments) > 0: - rb_command = 'ruby ' + file_path + " " + arguments - else: - rb_command = 'ruby ' + file_path - return execute(rb_command) # return result of execute() of the ruby file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ run_rb function ] (bytes string or False) -# execute a ruby script file in a shell subprocess, return the output -#------------------------------------------------------------------------------ -def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - try: - if len(arguments) > 0: - rb_command = 'ruby ' + file_path + " " + arguments - else: - rb_command = 'ruby ' + file_path - return run(rb_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of the ruby file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ muterun_rb function ] (NakedObject response object) -#------------------------------------------------------------------------------ -def muterun_rb(file_path, arguments=""): - try: - if len(arguments) > 0: - rb_command = 'ruby ' + file_path + " " + arguments - else: - rb_command = 'ruby ' + file_path - return muterun(rb_command) # return result of muterun() of the ruby file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# NODE.JS COMMAND EXECUTION -#------------------------------------------------------------------------------ -#------------------------------------------------------------------------------ -# [ execute_js function ] (boolean) -# execute a node.js script file in a shell subprocess -# stdout stream to terminal -# returns True for success (=0) exit status code -# returns False for unsuccessful (!=0) exit status code -#------------------------------------------------------------------------------ -def execute_js(file_path, arguments=""): - try: - if len(arguments) > 0: - js_command = 'node ' + file_path + " " + arguments - else: - js_command = 'node ' + file_path - return execute(js_command) # return result of execute() of node.js file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - raise e -#------------------------------------------------------------------------------ -# [ run_js function ] (byte string or False) -# execute a node.js script file in a shell subprocess -# print the standard output to the standard output stream by default -# set suppress_output to True to suppress stream to standard output. String is still returned to calling function -# set suppress_exit_status_call to True to suppress raising sys.exit on failures with shell subprocess exit status code (if available) or 1 if not available -# returns the standard output byte string from the subprocess executable on success -# returns False if the subprocess exits with a non-zero exit code -#------------------------------------------------------------------------------ -def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - try: - if len(arguments) > 0: - js_command = 'node ' + file_path + " " + arguments - else: - js_command = 'node ' + file_path - return run(js_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of node.js file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ muterun_js function ] (NakedObject response object) -#------------------------------------------------------------------------------ -def muterun_js(file_path, arguments=""): - try: - if len(arguments) > 0: - js_command = 'node ' + file_path + " " + arguments - else: - js_command = 'node ' + file_path - return muterun(js_command) # return result of muterun() of node.js file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ Environment Class ] -# shell environment variables class -# self.env = the environment variable dictionary -# self.vars = the environment variable names list -#------------------------------------------------------------------------------ -class Environment(): - def __init__(self): - self.env = os.environ - self.vars = list(os.environ.keys()) - - #------------------------------------------------------------------------------ - # [ is_var method ] (boolean) - # return boolean for presence of a variable name in the shell environment - #------------------------------------------------------------------------------ - def is_var(self, var_name): - try: - return (var_name in self.vars) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") - raise e - - #------------------------------------------------------------------------------ - # [ get_var method ] (string) - # get the variable value for a variable in the shell environment list - # returns empty string if the variable is not included in the environment variable list - #------------------------------------------------------------------------------ - def get_var(self, var_name): - try: - if var_name in self.vars: - return self.env[var_name] - else: - return "" - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") - raise e - - #------------------------------------------------------------------------------ - # [ get_split_var_list method ] (list of strings) - # return a list of strings split by OS dependent separator from the shell variable assigment string - # if the variable name is not in the environment list, returns an empty list - #------------------------------------------------------------------------------ - def get_split_var_list(self, var_name): - try: - if var_name in self.vars: - return self.env[var_name].split(os.pathsep) - else: - return [] - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") - raise e - - -if __name__ == '__main__': - pass - # e = Environment() - # pathlist = e.get_split_var_list("PATH") - # for item in pathlist: - # print(item) diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/system.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/system.c deleted file mode 100644 index 24565e9..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/system.c +++ /dev/null @@ -1,13040 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:16 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__system -#define __PYX_HAVE_API__lib__Naked__toolshed__c__system -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "system.pyx", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam; -struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam; - -/* "lib/Naked/toolshed/c/system.pyx":74 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile { - PyObject_HEAD - PyObject *__pyx_v_func; -}; - - -/* "lib/Naked/toolshed/c/system.pyx":94 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam { - PyObject_HEAD - PyObject *__pyx_v_func; -}; - - -/* "lib/Naked/toolshed/c/system.pyx":116 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ -struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam { - PyObject_HEAD - PyObject *__pyx_v_func; -}; - -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname); - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static int __Pyx_Print(PyObject*, PyObject *, int); /*proto*/ -#if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3 -static PyObject* __pyx_print = 0; -static PyObject* __pyx_print_kwargs = 0; -#endif - -static int __Pyx_PrintOne(PyObject* stream, PyObject *o); /*proto*/ - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.system' */ -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam = 0; -static PyTypeObject *__pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam = 0; -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.system" -int __pyx_module_is_main_lib__Naked__toolshed__c__system = 0; - -/* Implementation of 'lib.Naked.toolshed.c.system' */ -static PyObject *__pyx_builtin_Exception; -static PyObject *__pyx_builtin_OSError; -static PyObject *__pyx_builtin_SystemExit; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_filename(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_2file_extension(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_4directory(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_6make_path(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path_list); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_file_name, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_8currentdir_to_basefile(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_wrapper(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_dir, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_10currentdir_firstparam(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_12currentdir_lastparam(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_14fullpath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_name); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_16cwd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dir); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_18make_dirs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dirpath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_20file_exists(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_22is_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_24dir_exists(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dirpath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_26is_dir(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dirpath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_28file_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_30file_mod_time(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_32list_all_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dir); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_34list_filter_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_extension_filter, PyObject *__pyx_v_dir); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_36list_all_files_cwd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dir); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_38list_filter_files_cwd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_extension_filter, PyObject *__pyx_v_current_dir); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_40list_match_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_match_pattern, PyObject *__pyx_v_full_path); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_42is_link(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_44real_path(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_46stdout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_48stdout_xnl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_50stdout_iter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_iter); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_52stdout_iter_xnl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_iter); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_54stderr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text, PyObject *__pyx_v_exit); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_56stderr_xnl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text, PyObject *__pyx_v_exit); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_58exit_with_status(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exit); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_60exit_fail(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_62exit_success(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static char __pyx_k_e[] = "e"; -static char __pyx_k_x[] = "x"; -static char __pyx_k__8[] = ""; -static char __pyx_k_os[] = "os"; -static char __pyx_k__24[] = "."; -static char __pyx_k__36[] = "\n"; -static char __pyx_k_cwd[] = "cwd"; -static char __pyx_k_dir[] = "dir"; -static char __pyx_k_end[] = "end"; -static char __pyx_k_ose[] = "ose"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_args[] = "args"; -static char __pyx_k_exit[] = "exit"; -static char __pyx_k_file[] = "file"; -static char __pyx_k_func[] = "func"; -static char __pyx_k_glob[] = "glob"; -static char __pyx_k_iter[] = "iter"; -static char __pyx_k_join[] = "join"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "name"; -static char __pyx_k_path[] = "path"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_text[] = "text"; -static char __pyx_k_time[] = "time"; -static char __pyx_k_ctime[] = "ctime"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_errno[] = "errno"; -static char __pyx_k_isdir[] = "isdir"; -static char __pyx_k_print[] = "print"; -static char __pyx_k_wraps[] = "wraps"; -static char __pyx_k_write[] = "write"; -static char __pyx_k_EEXIST[] = "EEXIST"; -static char __pyx_k_exists[] = "exists"; -static char __pyx_k_getcwd[] = "getcwd"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_is_dir[] = "is_dir"; -static char __pyx_k_isfile[] = "isfile"; -static char __pyx_k_islink[] = "islink"; -static char __pyx_k_kwargs[] = "kwargs"; -static char __pyx_k_name_2[] = "__name__"; -static char __pyx_k_stderr[] = "stderr"; -static char __pyx_k_stdout[] = "stdout"; -static char __pyx_k_OSError[] = "OSError"; -static char __pyx_k_dirname[] = "dirname"; -static char __pyx_k_dirpath[] = "dirpath"; -static char __pyx_k_getsize[] = "getsize"; -static char __pyx_k_is_file[] = "is_file"; -static char __pyx_k_is_link[] = "is_link"; -static char __pyx_k_listdir[] = "listdir"; -static char __pyx_k_the_cwd[] = "the_cwd"; -static char __pyx_k_wrapper[] = "wrapper"; -static char __pyx_k_basename[] = "basename"; -static char __pyx_k_endswith[] = "endswith"; -static char __pyx_k_filename[] = "filename"; -static char __pyx_k_filepath[] = "filepath"; -static char __pyx_k_fullpath[] = "fullpath"; -static char __pyx_k_getmtime[] = "getmtime"; -static char __pyx_k_makedirs[] = "makedirs"; -static char __pyx_k_realpath[] = "realpath"; -static char __pyx_k_splitext[] = "splitext"; -static char __pyx_k_Exception[] = "Exception"; -static char __pyx_k_directory[] = "directory"; -static char __pyx_k_exit_fail[] = "exit_fail"; -static char __pyx_k_file_name[] = "file_name"; -static char __pyx_k_file_size[] = "file_size"; -static char __pyx_k_filenames[] = "filenames"; -static char __pyx_k_full_path[] = "full_path"; -static char __pyx_k_functools[] = "functools"; -static char __pyx_k_make_dirs[] = "make_dirs"; -static char __pyx_k_make_path[] = "make_path"; -static char __pyx_k_path_list[] = "path_list"; -static char __pyx_k_real_path[] = "real_path"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_SystemExit[] = "SystemExit"; -static char __pyx_k_dir_exists[] = "dir_exists"; -static char __pyx_k_startswith[] = "startswith"; -static char __pyx_k_stderr_xnl[] = "stderr_xnl"; -static char __pyx_k_stdout_xnl[] = "stdout_xnl"; -static char __pyx_k_current_dir[] = "current_dir"; -static char __pyx_k_file_exists[] = "file_exists"; -static char __pyx_k_stdout_iter[] = "stdout_iter"; -static char __pyx_k_exit_success[] = "exit_success"; -static char __pyx_k_file_mod_time[] = "file_mod_time"; -static char __pyx_k_match_pattern[] = "match_pattern"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_file_extension[] = "file_extension"; -static char __pyx_k_list_all_files[] = "list_all_files"; -static char __pyx_k_stdout_iter_xnl[] = "stdout_iter_xnl"; -static char __pyx_k_exit_with_status[] = "exit_with_status"; -static char __pyx_k_extension_filter[] = "extension_filter"; -static char __pyx_k_list_match_files[] = "list_match_files"; -static char __pyx_k_current_directory[] = "current_directory"; -static char __pyx_k_list_filter_files[] = "list_filter_files"; -static char __pyx_k_filenames_fullpath[] = "filenames_fullpath"; -static char __pyx_k_list_all_files_cwd[] = "list_all_files_cwd"; -static char __pyx_k_currentdir_lastparam[] = "currentdir_lastparam"; -static char __pyx_k_currentdir_firstparam[] = "currentdir_firstparam"; -static char __pyx_k_list_filter_files_cwd[] = "list_filter_files_cwd"; -static char __pyx_k_currentdir_to_basefile[] = "currentdir_to_basefile"; -static char __pyx_k_lib_Naked_toolshed_c_system[] = "lib.Naked.toolshed.c.system"; -static char __pyx_k_Naked_Framework_Error_Could_not[] = "Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to[] = "Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system)."; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/system.pyx"; -static char __pyx_k_Naked_Framework_Error_error_with[] = "Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system)."; -static char __pyx_k_currentdir_firstparam_locals_wra[] = "currentdir_firstparam..wrapper"; -static char __pyx_k_currentdir_lastparam_locals_wrap[] = "currentdir_lastparam..wrapper"; -static char __pyx_k_currentdir_to_basefile_locals_wr[] = "currentdir_to_basefile..wrapper"; -static char __pyx_k_Naked_Framework_Error_unable_to_2[] = "Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_3[] = "Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_4[] = "Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_5[] = "Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_6[] = "Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_7[] = "Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_8[] = "Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_9[] = "Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_error_with_2[] = "Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_error_with_3[] = "Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_error_with_4[] = "Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_error_with_5[] = "Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_error_with_6[] = "Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_error_with_7[] = "Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_10[] = "Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_11[] = "Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_12[] = "Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_13[] = "Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_14[] = "Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_15[] = "Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_16[] = "Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system)."; -static char __pyx_k_Naked_Framework_Error_unable_to_17[] = "Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system)."; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_n_s_EEXIST; -static PyObject *__pyx_n_s_Exception; -static PyObject *__pyx_kp_s_Naked_Framework_Error_Could_not; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with_4; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with_5; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with_6; -static PyObject *__pyx_kp_s_Naked_Framework_Error_error_with_7; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_10; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_11; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_12; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_13; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_14; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_15; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_16; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_17; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_2; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_3; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_4; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_5; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_6; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_7; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_8; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_9; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_OSError; -static PyObject *__pyx_n_s_SystemExit; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_kp_s__24; -static PyObject *__pyx_kp_s__36; -static PyObject *__pyx_kp_s__8; -static PyObject *__pyx_n_s_args; -static PyObject *__pyx_n_s_basename; -static PyObject *__pyx_n_s_ctime; -static PyObject *__pyx_n_s_current_dir; -static PyObject *__pyx_n_s_current_directory; -static PyObject *__pyx_n_s_currentdir_firstparam; -static PyObject *__pyx_n_s_currentdir_firstparam_locals_wra; -static PyObject *__pyx_n_s_currentdir_lastparam; -static PyObject *__pyx_n_s_currentdir_lastparam_locals_wrap; -static PyObject *__pyx_n_s_currentdir_to_basefile; -static PyObject *__pyx_n_s_currentdir_to_basefile_locals_wr; -static PyObject *__pyx_n_s_cwd; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_dir; -static PyObject *__pyx_n_s_dir_exists; -static PyObject *__pyx_n_s_directory; -static PyObject *__pyx_n_s_dirname; -static PyObject *__pyx_n_s_dirpath; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_end; -static PyObject *__pyx_n_s_endswith; -static PyObject *__pyx_n_s_errno; -static PyObject *__pyx_n_s_exists; -static PyObject *__pyx_n_s_exit; -static PyObject *__pyx_n_s_exit_fail; -static PyObject *__pyx_n_s_exit_success; -static PyObject *__pyx_n_s_exit_with_status; -static PyObject *__pyx_n_s_extension_filter; -static PyObject *__pyx_n_s_file; -static PyObject *__pyx_n_s_file_exists; -static PyObject *__pyx_n_s_file_extension; -static PyObject *__pyx_n_s_file_mod_time; -static PyObject *__pyx_n_s_file_name; -static PyObject *__pyx_n_s_file_size; -static PyObject *__pyx_n_s_filename; -static PyObject *__pyx_n_s_filenames; -static PyObject *__pyx_n_s_filenames_fullpath; -static PyObject *__pyx_n_s_filepath; -static PyObject *__pyx_n_s_full_path; -static PyObject *__pyx_n_s_fullpath; -static PyObject *__pyx_n_s_func; -static PyObject *__pyx_n_s_functools; -static PyObject *__pyx_n_s_getcwd; -static PyObject *__pyx_n_s_getmtime; -static PyObject *__pyx_n_s_getsize; -static PyObject *__pyx_n_s_glob; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_is_dir; -static PyObject *__pyx_n_s_is_file; -static PyObject *__pyx_n_s_is_link; -static PyObject *__pyx_n_s_isdir; -static PyObject *__pyx_n_s_isfile; -static PyObject *__pyx_n_s_islink; -static PyObject *__pyx_n_s_iter; -static PyObject *__pyx_n_s_join; -static PyObject *__pyx_n_s_kwargs; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_system; -static PyObject *__pyx_n_s_list_all_files; -static PyObject *__pyx_n_s_list_all_files_cwd; -static PyObject *__pyx_n_s_list_filter_files; -static PyObject *__pyx_n_s_list_filter_files_cwd; -static PyObject *__pyx_n_s_list_match_files; -static PyObject *__pyx_n_s_listdir; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_make_dirs; -static PyObject *__pyx_n_s_make_path; -static PyObject *__pyx_n_s_makedirs; -static PyObject *__pyx_n_s_match_pattern; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_name_2; -static PyObject *__pyx_n_s_os; -static PyObject *__pyx_n_s_ose; -static PyObject *__pyx_n_s_path; -static PyObject *__pyx_n_s_path_list; -static PyObject *__pyx_n_s_print; -static PyObject *__pyx_n_s_real_path; -static PyObject *__pyx_n_s_realpath; -static PyObject *__pyx_n_s_splitext; -static PyObject *__pyx_n_s_startswith; -static PyObject *__pyx_n_s_stderr; -static PyObject *__pyx_n_s_stderr_xnl; -static PyObject *__pyx_n_s_stdout; -static PyObject *__pyx_n_s_stdout_iter; -static PyObject *__pyx_n_s_stdout_iter_xnl; -static PyObject *__pyx_n_s_stdout_xnl; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_text; -static PyObject *__pyx_n_s_the_cwd; -static PyObject *__pyx_n_s_time; -static PyObject *__pyx_n_s_wrapper; -static PyObject *__pyx_n_s_wraps; -static PyObject *__pyx_n_s_write; -static PyObject *__pyx_n_s_x; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__12; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__18; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__20; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__22; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__25; -static PyObject *__pyx_tuple__26; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__28; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__30; -static PyObject *__pyx_tuple__31; -static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__33; -static PyObject *__pyx_tuple__34; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__38; -static PyObject *__pyx_tuple__39; -static PyObject *__pyx_tuple__40; -static PyObject *__pyx_tuple__41; -static PyObject *__pyx_tuple__43; -static PyObject *__pyx_tuple__45; -static PyObject *__pyx_tuple__47; -static PyObject *__pyx_tuple__49; -static PyObject *__pyx_tuple__51; -static PyObject *__pyx_tuple__53; -static PyObject *__pyx_tuple__55; -static PyObject *__pyx_tuple__57; -static PyObject *__pyx_tuple__59; -static PyObject *__pyx_tuple__61; -static PyObject *__pyx_tuple__63; -static PyObject *__pyx_tuple__65; -static PyObject *__pyx_tuple__67; -static PyObject *__pyx_tuple__69; -static PyObject *__pyx_tuple__71; -static PyObject *__pyx_tuple__73; -static PyObject *__pyx_tuple__75; -static PyObject *__pyx_tuple__77; -static PyObject *__pyx_tuple__79; -static PyObject *__pyx_tuple__81; -static PyObject *__pyx_tuple__83; -static PyObject *__pyx_tuple__85; -static PyObject *__pyx_tuple__87; -static PyObject *__pyx_tuple__89; -static PyObject *__pyx_tuple__91; -static PyObject *__pyx_tuple__93; -static PyObject *__pyx_tuple__95; -static PyObject *__pyx_tuple__97; -static PyObject *__pyx_tuple__99; -static PyObject *__pyx_codeobj__6; -static PyObject *__pyx_codeobj__10; -static PyObject *__pyx_codeobj__14; -static PyObject *__pyx_codeobj__42; -static PyObject *__pyx_codeobj__44; -static PyObject *__pyx_codeobj__46; -static PyObject *__pyx_codeobj__48; -static PyObject *__pyx_codeobj__50; -static PyObject *__pyx_codeobj__52; -static PyObject *__pyx_codeobj__54; -static PyObject *__pyx_codeobj__56; -static PyObject *__pyx_codeobj__58; -static PyObject *__pyx_codeobj__60; -static PyObject *__pyx_codeobj__62; -static PyObject *__pyx_codeobj__64; -static PyObject *__pyx_codeobj__66; -static PyObject *__pyx_codeobj__68; -static PyObject *__pyx_codeobj__70; -static PyObject *__pyx_codeobj__72; -static PyObject *__pyx_codeobj__74; -static PyObject *__pyx_codeobj__76; -static PyObject *__pyx_codeobj__78; -static PyObject *__pyx_codeobj__80; -static PyObject *__pyx_codeobj__82; -static PyObject *__pyx_codeobj__84; -static PyObject *__pyx_codeobj__86; -static PyObject *__pyx_codeobj__88; -static PyObject *__pyx_codeobj__90; -static PyObject *__pyx_codeobj__92; -static PyObject *__pyx_codeobj__94; -static PyObject *__pyx_codeobj__96; -static PyObject *__pyx_codeobj__98; -static PyObject *__pyx_codeobj__100; -static PyObject *__pyx_codeobj__101; -static PyObject *__pyx_codeobj__102; - -/* "lib/Naked/toolshed/c/system.pyx":20 - * # Tests: test_SYSTEM.py :: test_sys_filename - * #------------------------------------------------------------------------------ - * def filename(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.basename(filepath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_1filename(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_1filename = {__Pyx_NAMESTR("filename"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_1filename, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_1filename(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("filename (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_filename(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_filename(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("filename", 0); - - /* "lib/Naked/toolshed/c/system.pyx":21 - * #------------------------------------------------------------------------------ - * def filename(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.basename(filepath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":22 - * def filename(filepath): - * try: - * return os.path.basename(filepath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_basename); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":23 - * try: - * return os.path.basename(filepath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.filename", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":24 - * return os.path.basename(filepath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":25 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":26 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":20 - * # Tests: test_SYSTEM.py :: test_sys_filename - * #------------------------------------------------------------------------------ - * def filename(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.basename(filepath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.filename", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":33 - * # Tests: test_SYSTEM.py :: test_sys_file_extension - * #------------------------------------------------------------------------------ - * def file_extension(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.splitext(filepath)[1] - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_3file_extension(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_3file_extension = {__Pyx_NAMESTR("file_extension"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_3file_extension, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_3file_extension(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("file_extension (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_2file_extension(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_2file_extension(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("file_extension", 0); - - /* "lib/Naked/toolshed/c/system.pyx":34 - * #------------------------------------------------------------------------------ - * def file_extension(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.splitext(filepath)[1] - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":35 - * def file_extension(filepath): - * try: - * return os.path.splitext(filepath)[1] # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_splitext); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":36 - * try: - * return os.path.splitext(filepath)[1] - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_extension", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":37 - * return os.path.splitext(filepath)[1] - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":38 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":39 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":33 - * # Tests: test_SYSTEM.py :: test_sys_file_extension - * #------------------------------------------------------------------------------ - * def file_extension(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.splitext(filepath)[1] - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_extension", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":47 - * # Tests: test_SYSTEM.py :: test_sys_dir_path - * #------------------------------------------------------------------------------ - * def directory(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.dirname(filepath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_5directory(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_5directory = {__Pyx_NAMESTR("directory"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_5directory, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_5directory(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("directory (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_4directory(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_4directory(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("directory", 0); - - /* "lib/Naked/toolshed/c/system.pyx":48 - * #------------------------------------------------------------------------------ - * def directory(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.dirname(filepath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":49 - * def directory(filepath): - * try: - * return os.path.dirname(filepath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_dirname); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":50 - * try: - * return os.path.dirname(filepath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.directory", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":51 - * return os.path.dirname(filepath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":52 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":53 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":47 - * # Tests: test_SYSTEM.py :: test_sys_dir_path - * #------------------------------------------------------------------------------ - * def directory(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.dirname(filepath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.directory", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":60 - * # Tests: test_SYSTEM.py :: test_sys_make_filepath - * #------------------------------------------------------------------------------ - * def make_path(*path_list): # <<<<<<<<<<<<<< - * try: - * return os.path.join(*path_list) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_7make_path(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_7make_path = {__Pyx_NAMESTR("make_path"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_7make_path, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_7make_path(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_path_list = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("make_path (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "make_path", 0))) return NULL; - __Pyx_INCREF(__pyx_args); - __pyx_v_path_list = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_6make_path(__pyx_self, __pyx_v_path_list); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_path_list); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_6make_path(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path_list) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("make_path", 0); - - /* "lib/Naked/toolshed/c/system.pyx":61 - * #------------------------------------------------------------------------------ - * def make_path(*path_list): - * try: # <<<<<<<<<<<<<< - * return os.path.join(*path_list) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":62 - * def make_path(*path_list): - * try: - * return os.path.join(*path_list) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_join); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PySequence_Tuple(__pyx_v_path_list); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":63 - * try: - * return os.path.join(*path_list) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.make_path", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":64 - * return os.path.join(*path_list) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":65 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":66 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":60 - * # Tests: test_SYSTEM.py :: test_sys_make_filepath - * #------------------------------------------------------------------------------ - * def make_path(*path_list): # <<<<<<<<<<<<<< - * try: - * return os.path.join(*path_list) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.make_path", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":74 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_9currentdir_to_basefile(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_9currentdir_to_basefile = {__Pyx_NAMESTR("currentdir_to_basefile"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_9currentdir_to_basefile, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_9currentdir_to_basefile(PyObject *__pyx_self, PyObject *__pyx_v_func) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("currentdir_to_basefile (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_8currentdir_to_basefile(__pyx_self, ((PyObject *)__pyx_v_func)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":79 - * - * @wraps(func) - * def wrapper(file_name, *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() #get current working directory path - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_file_name = 0; - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - if (PyTuple_GET_SIZE(__pyx_args) > 1) { - __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); - if (unlikely(!__pyx_v_args)) { - __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_v_args); - } else { - __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); - } - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file_name,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - default: - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_file_name)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "wrapper") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - } - __pyx_v_file_name = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("wrapper", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; - __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_to_basefile.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_wrapper(__pyx_self, __pyx_v_file_name, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_file_name, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *__pyx_outer_scope; - PyObject *__pyx_v_current_directory = NULL; - PyObject *__pyx_v_full_path = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/system.pyx":80 - * @wraps(func) - * def wrapper(file_name, *args, **kwargs): - * current_directory = os.getcwd() #get current working directory path # <<<<<<<<<<<<<< - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - * return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_current_directory = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":81 - * def wrapper(file_name, *args, **kwargs): - * current_directory = os.getcwd() #get current working directory path - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path # <<<<<<<<<<<<<< - * return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument - * return wrapper - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_path); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_join); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_current_directory); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_current_directory); - __Pyx_GIVEREF(__pyx_v_current_directory); - __Pyx_INCREF(__pyx_v_file_name); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_file_name); - __Pyx_GIVEREF(__pyx_v_file_name); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_full_path = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":82 - * current_directory = os.getcwd() #get current working directory path - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - * return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument # <<<<<<<<<<<<<< - * return wrapper - * except Exception as e: - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_full_path); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_full_path); - __Pyx_GIVEREF(__pyx_v_full_path); - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/system.pyx":79 - * - * @wraps(func) - * def wrapper(file_name, *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() #get current working directory path - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_to_basefile.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_current_directory); - __Pyx_XDECREF(__pyx_v_full_path); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":74 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_8currentdir_to_basefile(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *__pyx_cur_scope; - PyObject *__pyx_v_wraps = NULL; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("currentdir_to_basefile", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile(__pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - - /* "lib/Naked/toolshed/c/system.pyx":75 - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): - * try: # <<<<<<<<<<<<<< - * from functools import wraps - * - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":76 - * def currentdir_to_basefile(func): - * try: - * from functools import wraps # <<<<<<<<<<<<<< - * - * @wraps(func) - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wraps); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_wraps); - __Pyx_GIVEREF(__pyx_n_s_wraps); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_wraps); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_wraps = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":78 - * from functools import wraps - * - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(file_name, *args, **kwargs): - * current_directory = os.getcwd() #get current working directory path - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_wraps, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":79 - * - * @wraps(func) - * def wrapper(file_name, *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() #get current working directory path - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - */ - __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_22currentdir_to_basefile_1wrapper, 0, __pyx_n_s_currentdir_to_basefile_locals_wr, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_system, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__6)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - - /* "lib/Naked/toolshed/c/system.pyx":78 - * from functools import wraps - * - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(file_name, *args, **kwargs): - * current_directory = os.getcwd() #get current working directory path - */ - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_wrapper = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":83 - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - * return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument - * return wrapper # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":84 - * return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument - * return wrapper - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_to_basefile", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":85 - * return wrapper - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":86 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":87 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":74 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_to_basefile", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wraps); - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":94 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_11currentdir_firstparam(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_11currentdir_firstparam = {__Pyx_NAMESTR("currentdir_firstparam"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_11currentdir_firstparam, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_11currentdir_firstparam(PyObject *__pyx_self, PyObject *__pyx_v_func) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("currentdir_firstparam (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_10currentdir_firstparam(__pyx_self, ((PyObject *)__pyx_v_func)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":99 - * - * @wraps(func) - * def wrapper(dir="", *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() - * return func(current_directory, *args, **kwargs) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - CYTHON_UNUSED PyObject *__pyx_v_dir = 0; - PyObject *__pyx_v_args = 0; - PyObject *__pyx_v_kwargs = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - if (PyTuple_GET_SIZE(__pyx_args) > 1) { - __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); - if (unlikely(!__pyx_v_args)) { - __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_v_args); - } else { - __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); - } - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dir,0}; - PyObject* values[1] = {0}; - values[0] = ((PyObject *)((PyObject*)__pyx_kp_s__8)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - default: - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dir); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, used_pos_args, "wrapper") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - default: - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - } - } - __pyx_v_dir = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0; - __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_firstparam.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_wrapper(__pyx_self, __pyx_v_dir, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_wrapper(PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_dir, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *__pyx_outer_scope; - PyObject *__pyx_v_current_directory = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/system.pyx":100 - * @wraps(func) - * def wrapper(dir="", *args, **kwargs): - * current_directory = os.getcwd() # <<<<<<<<<<<<<< - * return func(current_directory, *args, **kwargs) - * return wrapper - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_current_directory = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":101 - * def wrapper(dir="", *args, **kwargs): - * current_directory = os.getcwd() - * return func(current_directory, *args, **kwargs) # <<<<<<<<<<<<<< - * return wrapper - * except Exception as e: - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_current_directory); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_current_directory); - __Pyx_GIVEREF(__pyx_v_current_directory); - __pyx_t_2 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __pyx_v_kwargs; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/system.pyx":99 - * - * @wraps(func) - * def wrapper(dir="", *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() - * return func(current_directory, *args, **kwargs) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_firstparam.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_current_directory); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":94 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_10currentdir_firstparam(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *__pyx_cur_scope; - PyObject *__pyx_v_wraps = NULL; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("currentdir_firstparam", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam(__pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - - /* "lib/Naked/toolshed/c/system.pyx":95 - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): - * try: # <<<<<<<<<<<<<< - * from functools import wraps - * - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":96 - * def currentdir_firstparam(func): - * try: - * from functools import wraps # <<<<<<<<<<<<<< - * - * @wraps(func) - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wraps); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_wraps); - __Pyx_GIVEREF(__pyx_n_s_wraps); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_wraps); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_wraps = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":98 - * from functools import wraps - * - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(dir="", *args, **kwargs): - * current_directory = os.getcwd() - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_wraps, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":99 - * - * @wraps(func) - * def wrapper(dir="", *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() - * return func(current_directory, *args, **kwargs) - */ - __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_21currentdir_firstparam_1wrapper, 0, __pyx_n_s_currentdir_firstparam_locals_wra, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_system, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__11); - - /* "lib/Naked/toolshed/c/system.pyx":98 - * from functools import wraps - * - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(dir="", *args, **kwargs): - * current_directory = os.getcwd() - */ - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_wrapper = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":102 - * current_directory = os.getcwd() - * return func(current_directory, *args, **kwargs) - * return wrapper # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":103 - * return func(current_directory, *args, **kwargs) - * return wrapper - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_firstparam", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":104 - * return wrapper - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":105 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":106 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":94 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_firstparam", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wraps); - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":116 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_13currentdir_lastparam(PyObject *__pyx_self, PyObject *__pyx_v_func); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_13currentdir_lastparam = {__Pyx_NAMESTR("currentdir_lastparam"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_13currentdir_lastparam, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_13currentdir_lastparam(PyObject *__pyx_self, PyObject *__pyx_v_func) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("currentdir_lastparam (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_12currentdir_lastparam(__pyx_self, ((PyObject *)__pyx_v_func)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":121 - * - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * the_cwd = os.getcwd() - * return func(*args, current_dir=the_cwd) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_1wrapper = {__Pyx_NAMESTR("wrapper"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_1wrapper, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_args = 0; - CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wrapper (wrapper)", 0); - if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "wrapper", 1))) return NULL; - __pyx_v_kwargs = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); - if (unlikely(!__pyx_v_kwargs)) return NULL; - __Pyx_GOTREF(__pyx_v_kwargs); - __Pyx_INCREF(__pyx_args); - __pyx_v_args = __pyx_args; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_args); - __Pyx_XDECREF(__pyx_v_kwargs); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *__pyx_cur_scope; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *__pyx_outer_scope; - PyObject *__pyx_v_the_cwd = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wrapper", 0); - __pyx_outer_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *) __Pyx_CyFunction_GetClosure(__pyx_self); - __pyx_cur_scope = __pyx_outer_scope; - - /* "lib/Naked/toolshed/c/system.pyx":122 - * @wraps(func) - * def wrapper(*args, **kwargs): - * the_cwd = os.getcwd() # <<<<<<<<<<<<<< - * return func(*args, current_dir=the_cwd) - * return wrapper - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_the_cwd = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":123 - * def wrapper(*args, **kwargs): - * the_cwd = os.getcwd() - * return func(*args, current_dir=the_cwd) # <<<<<<<<<<<<<< - * return wrapper - * except Exception as e: - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } - __pyx_t_1 = PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_current_dir, __pyx_v_the_cwd) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/system.pyx":121 - * - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * the_cwd = os.getcwd() - * return func(*args, current_dir=the_cwd) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_lastparam.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_the_cwd); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":116 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_12currentdir_lastparam(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_func) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *__pyx_cur_scope; - PyObject *__pyx_v_wraps = NULL; - PyObject *__pyx_v_wrapper = 0; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("currentdir_lastparam", 0); - __pyx_cur_scope = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *)__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam(__pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_cur_scope); - __pyx_cur_scope->__pyx_v_func = __pyx_v_func; - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - - /* "lib/Naked/toolshed/c/system.pyx":117 - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): - * try: # <<<<<<<<<<<<<< - * from functools import wraps - * - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":118 - * def currentdir_lastparam(func): - * try: - * from functools import wraps # <<<<<<<<<<<<<< - * - * @wraps(func) - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_wraps); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_wraps); - __Pyx_GIVEREF(__pyx_n_s_wraps); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_functools, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_wraps); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_wraps = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":120 - * from functools import wraps - * - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * the_cwd = os.getcwd() - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_func); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_wraps, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":121 - * - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * the_cwd = os.getcwd() - * return func(*args, current_dir=the_cwd) - */ - __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_20currentdir_lastparam_1wrapper, 0, __pyx_n_s_currentdir_lastparam_locals_wrap, ((PyObject*)__pyx_cur_scope), __pyx_n_s_lib_Naked_toolshed_c_system, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - - /* "lib/Naked/toolshed/c/system.pyx":120 - * from functools import wraps - * - * @wraps(func) # <<<<<<<<<<<<<< - * def wrapper(*args, **kwargs): - * the_cwd = os.getcwd() - */ - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_wrapper = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":124 - * the_cwd = os.getcwd() - * return func(*args, current_dir=the_cwd) - * return wrapper # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_wrapper); - __pyx_r = __pyx_v_wrapper; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":125 - * return func(*args, current_dir=the_cwd) - * return wrapper - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_lastparam", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":126 - * return wrapper - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":127 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":128 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":116 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.currentdir_lastparam", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_wraps); - __Pyx_XDECREF(__pyx_v_wrapper); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":139 - * #------------------------------------------------------------------------------ - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function - * def fullpath(file_name): # <<<<<<<<<<<<<< - * try: - * return file_name - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_15fullpath(PyObject *__pyx_self, PyObject *__pyx_v_file_name); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_15fullpath = {__Pyx_NAMESTR("fullpath"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_15fullpath, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_15fullpath(PyObject *__pyx_self, PyObject *__pyx_v_file_name) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("fullpath (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_14fullpath(__pyx_self, ((PyObject *)__pyx_v_file_name)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_14fullpath(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_file_name) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - __Pyx_RefNannySetupContext("fullpath", 0); - - /* "lib/Naked/toolshed/c/system.pyx":140 - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function - * def fullpath(file_name): - * try: # <<<<<<<<<<<<<< - * return file_name - * except Exception as e: - */ - { - if (__pyx_t_1||__pyx_t_2||__pyx_t_3); else {/*mark used*/}; - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":141 - * def fullpath(file_name): - * try: - * return file_name # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_file_name); - __pyx_r = __pyx_v_file_name; - goto __pyx_L7_try_return; - } - goto __pyx_L10_try_end; - __pyx_L7_try_return:; - goto __pyx_L0; - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":139 - * #------------------------------------------------------------------------------ - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function - * def fullpath(file_name): # <<<<<<<<<<<<<< - * try: - * return file_name - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":156 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return dir - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_17cwd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_17cwd = {__Pyx_NAMESTR("cwd"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_17cwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_17cwd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_dir = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("cwd (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dir,0}; - PyObject* values[1] = {0}; - values[0] = ((PyObject *)__pyx_kp_s__8); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dir); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_dir = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("cwd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_16cwd(__pyx_self, __pyx_v_dir); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_16cwd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dir) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - __Pyx_RefNannySetupContext("cwd", 0); - - /* "lib/Naked/toolshed/c/system.pyx":157 - * @currentdir_firstparam - * def cwd(dir=""): - * try: # <<<<<<<<<<<<<< - * return dir - * except Exception as e: - */ - { - if (__pyx_t_1||__pyx_t_2||__pyx_t_3); else {/*mark used*/}; - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":158 - * def cwd(dir=""): - * try: - * return dir # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_dir); - __pyx_r = __pyx_v_dir; - goto __pyx_L7_try_return; - } - goto __pyx_L10_try_end; - __pyx_L7_try_return:; - goto __pyx_L0; - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":156 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return dir - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":176 - * # DOES NOT already exist - * #------------------------------------------------------------------------------ - * def make_dirs(dirpath): # <<<<<<<<<<<<<< - * try: - * import os - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_19make_dirs(PyObject *__pyx_self, PyObject *__pyx_v_dirpath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_19make_dirs = {__Pyx_NAMESTR("make_dirs"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_19make_dirs, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_19make_dirs(PyObject *__pyx_self, PyObject *__pyx_v_dirpath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("make_dirs (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_18make_dirs(__pyx_self, ((PyObject *)__pyx_v_dirpath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_18make_dirs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dirpath) { - PyObject *__pyx_v_os = NULL; - PyObject *__pyx_v_errno = NULL; - PyObject *__pyx_v_ose = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("make_dirs", 0); - - /* "lib/Naked/toolshed/c/system.pyx":177 - * #------------------------------------------------------------------------------ - * def make_dirs(dirpath): - * try: # <<<<<<<<<<<<<< - * import os - * import errno - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":178 - * def make_dirs(dirpath): - * try: - * import os # <<<<<<<<<<<<<< - * import errno - * os.makedirs(dirpath) - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_os = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":179 - * try: - * import os - * import errno # <<<<<<<<<<<<<< - * os.makedirs(dirpath) - * return True - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_errno, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_errno = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":180 - * import os - * import errno - * os.makedirs(dirpath) # <<<<<<<<<<<<<< - * return True - * except OSError as ose: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_os, __pyx_n_s_makedirs); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dirpath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dirpath); - __Pyx_GIVEREF(__pyx_v_dirpath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":181 - * import errno - * os.makedirs(dirpath) - * return True # <<<<<<<<<<<<<< - * except OSError as ose: - * if ose.errno != errno.EEXIST: # directory already exists - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":182 - * os.makedirs(dirpath) - * return True - * except OSError as ose: # <<<<<<<<<<<<<< - * if ose.errno != errno.EEXIST: # directory already exists - * if DEBUG_FLAG: - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_OSError); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.make_dirs", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_ose = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":183 - * return True - * except OSError as ose: - * if ose.errno != errno.EEXIST: # directory already exists # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_ose, __pyx_n_s_errno); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - if (unlikely(!__pyx_v_errno)) { __Pyx_RaiseUnboundLocalError("errno"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} } - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_errno, __pyx_n_s_EEXIST); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = PyObject_RichCompare(__pyx_t_8, __pyx_t_9, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_11) { - - /* "lib/Naked/toolshed/c/system.pyx":184 - * except OSError as ose: - * if ose.errno != errno.EEXIST: # directory already exists - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") - * raise ose - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_11) { - - /* "lib/Naked/toolshed/c/system.pyx":185 - * if ose.errno != errno.EEXIST: # directory already exists - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise ose - * else: - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/system.pyx":186 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") - * raise ose # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_Raise(__pyx_v_ose, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - } - /*else*/ { - - /* "lib/Naked/toolshed/c/system.pyx":188 - * raise ose - * else: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * raise e - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L6_except_return; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - - /* "lib/Naked/toolshed/c/system.pyx":189 - * else: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.make_dirs", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":190 - * return False - * except Exception as e: - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":176 - * # DOES NOT already exist - * #------------------------------------------------------------------------------ - * def make_dirs(dirpath): # <<<<<<<<<<<<<< - * try: - * import os - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.make_dirs", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_os); - __Pyx_XDECREF(__pyx_v_errno); - __Pyx_XDECREF(__pyx_v_ose); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":203 - * # Tests: test_SYSTEM.py :: test_file_exists - * #------------------------------------------------------------------------------ - * def file_exists(filepath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_21file_exists(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_21file_exists = {__Pyx_NAMESTR("file_exists"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_21file_exists, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_21file_exists(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("file_exists (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_20file_exists(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_20file_exists(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("file_exists", 0); - - /* "lib/Naked/toolshed/c/system.pyx":204 - * #------------------------------------------------------------------------------ - * def file_exists(filepath): - * try: # <<<<<<<<<<<<<< - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - * return True - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":205 - * def file_exists(filepath): - * try: - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_7) { - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_isfile); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __pyx_t_8; - } else { - __pyx_t_9 = __pyx_t_7; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":206 - * try: - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/system.pyx":208 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":209 - * else: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") - */ - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_exists", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":210 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") - * raise e - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":211 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_stderr); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/system.pyx":212 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":203 - * # Tests: test_SYSTEM.py :: test_file_exists - * #------------------------------------------------------------------------------ - * def file_exists(filepath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_exists", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":220 - * # test_sys_is_file_when_dir - * #------------------------------------------------------------------------------ - * def is_file(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.isfile(filepath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_23is_file(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_23is_file = {__Pyx_NAMESTR("is_file"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_23is_file, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_23is_file(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_file (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_22is_file(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_22is_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_file", 0); - - /* "lib/Naked/toolshed/c/system.pyx":221 - * #------------------------------------------------------------------------------ - * def is_file(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.isfile(filepath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":222 - * def is_file(filepath): - * try: - * return os.path.isfile(filepath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_isfile); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":223 - * try: - * return os.path.isfile(filepath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.is_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":224 - * return os.path.isfile(filepath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":225 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":226 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":220 - * # test_sys_is_file_when_dir - * #------------------------------------------------------------------------------ - * def is_file(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.isfile(filepath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.is_file", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":233 - * # Tests: test_SYSTEM.py :: test_dir_exists, test_dir_exists_missing_dir - * #------------------------------------------------------------------------------ - * def dir_exists(dirpath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_25dir_exists(PyObject *__pyx_self, PyObject *__pyx_v_dirpath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_25dir_exists = {__Pyx_NAMESTR("dir_exists"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_25dir_exists, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_25dir_exists(PyObject *__pyx_self, PyObject *__pyx_v_dirpath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("dir_exists (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_24dir_exists(__pyx_self, ((PyObject *)__pyx_v_dirpath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_24dir_exists(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dirpath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("dir_exists", 0); - - /* "lib/Naked/toolshed/c/system.pyx":234 - * #------------------------------------------------------------------------------ - * def dir_exists(dirpath): - * try: # <<<<<<<<<<<<<< - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - * return True - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":235 - * def dir_exists(dirpath): - * try: - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_exists); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dirpath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dirpath); - __Pyx_GIVEREF(__pyx_v_dirpath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_7) { - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_isdir); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dirpath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dirpath); - __Pyx_GIVEREF(__pyx_v_dirpath); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_9 = __pyx_t_8; - } else { - __pyx_t_9 = __pyx_t_7; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":236 - * try: - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/system.pyx":238 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":239 - * else: - * return False - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") - */ - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.dir_exists", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":240 - * return False - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":241 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_stderr); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_write); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/system.pyx":242 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":233 - * # Tests: test_SYSTEM.py :: test_dir_exists, test_dir_exists_missing_dir - * #------------------------------------------------------------------------------ - * def dir_exists(dirpath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.dir_exists", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":250 - * # test_sys_dir_is_dir_when_missing - * #------------------------------------------------------------------------------ - * def is_dir(dirpath): # <<<<<<<<<<<<<< - * try: - * return os.path.isdir(dirpath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_27is_dir(PyObject *__pyx_self, PyObject *__pyx_v_dirpath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_27is_dir = {__Pyx_NAMESTR("is_dir"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_27is_dir, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_27is_dir(PyObject *__pyx_self, PyObject *__pyx_v_dirpath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_dir (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_26is_dir(__pyx_self, ((PyObject *)__pyx_v_dirpath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_26is_dir(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dirpath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_dir", 0); - - /* "lib/Naked/toolshed/c/system.pyx":251 - * #------------------------------------------------------------------------------ - * def is_dir(dirpath): - * try: # <<<<<<<<<<<<<< - * return os.path.isdir(dirpath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":252 - * def is_dir(dirpath): - * try: - * return os.path.isdir(dirpath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_isdir); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dirpath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dirpath); - __Pyx_GIVEREF(__pyx_v_dirpath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":253 - * try: - * return os.path.isdir(dirpath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.is_dir", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":254 - * return os.path.isdir(dirpath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":255 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":256 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":250 - * # test_sys_dir_is_dir_when_missing - * #------------------------------------------------------------------------------ - * def is_dir(dirpath): # <<<<<<<<<<<<<< - * try: - * return os.path.isdir(dirpath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.is_dir", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":269 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_size - * #------------------------------------------------------------------------------ - * def file_size(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.getsize(filepath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_29file_size(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_29file_size = {__Pyx_NAMESTR("file_size"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_29file_size, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_29file_size(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("file_size (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_28file_size(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_28file_size(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("file_size", 0); - - /* "lib/Naked/toolshed/c/system.pyx":270 - * #------------------------------------------------------------------------------ - * def file_size(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.getsize(filepath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":271 - * def file_size(filepath): - * try: - * return os.path.getsize(filepath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_getsize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":272 - * try: - * return os.path.getsize(filepath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_size", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":273 - * return os.path.getsize(filepath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":274 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":275 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":269 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_size - * #------------------------------------------------------------------------------ - * def file_size(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.getsize(filepath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_size", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":282 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_mod - * #------------------------------------------------------------------------------ - * def file_mod_time(filepath): # <<<<<<<<<<<<<< - * try: - * import time - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_31file_mod_time(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_31file_mod_time = {__Pyx_NAMESTR("file_mod_time"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_31file_mod_time, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_31file_mod_time(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("file_mod_time (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_30file_mod_time(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_30file_mod_time(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_time = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("file_mod_time", 0); - - /* "lib/Naked/toolshed/c/system.pyx":283 - * #------------------------------------------------------------------------------ - * def file_mod_time(filepath): - * try: # <<<<<<<<<<<<<< - * import time - * return time.ctime(os.path.getmtime(filepath)) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":284 - * def file_mod_time(filepath): - * try: - * import time # <<<<<<<<<<<<<< - * return time.ctime(os.path.getmtime(filepath)) - * except Exception as e: - */ - __pyx_t_4 = __Pyx_Import(__pyx_n_s_time, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_time = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":285 - * try: - * import time - * return time.ctime(os.path.getmtime(filepath)) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_time, __pyx_n_s_ctime); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_getmtime); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":286 - * import time - * return time.ctime(os.path.getmtime(filepath)) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_mod_time", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":287 - * return time.ctime(os.path.getmtime(filepath)) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":288 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":289 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":282 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_mod - * #------------------------------------------------------------------------------ - * def file_mod_time(filepath): # <<<<<<<<<<<<<< - * try: - * import time - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.file_mod_time", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_time); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":302 - * # Tests: test_SYSTEM.py :: test_sys_list_all_files, test_sys_list_all_files_emptydir - * #------------------------------------------------------------------------------ - * def list_all_files(dir): # <<<<<<<<<<<<<< - * try: - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_33list_all_files(PyObject *__pyx_self, PyObject *__pyx_v_dir); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_33list_all_files = {__Pyx_NAMESTR("list_all_files"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_33list_all_files, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_33list_all_files(PyObject *__pyx_self, PyObject *__pyx_v_dir) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("list_all_files (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_32list_all_files(__pyx_self, ((PyObject *)__pyx_v_dir)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_32list_all_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dir) { - PyObject *__pyx_v_filenames = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - PyObject *(*__pyx_t_9)(PyObject *); - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_t_12; - int __pyx_t_13; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("list_all_files", 0); - - /* "lib/Naked/toolshed/c/system.pyx":303 - * #------------------------------------------------------------------------------ - * def list_all_files(dir): - * try: # <<<<<<<<<<<<<< - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - * return filenames - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":304 - * def list_all_files(dir): - * try: - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] # <<<<<<<<<<<<<< - * return filenames - * except Exception as e: - */ - __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_listdir); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dir); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dir); - __Pyx_GIVEREF(__pyx_v_dir); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PyList_CheckExact(__pyx_t_7) || PyTuple_CheckExact(__pyx_t_7)) { - __pyx_t_5 = __pyx_t_7; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - for (;;) { - if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_5)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_5)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_9(__pyx_t_5); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_isfile); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_path); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_join); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_dir); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_dir); - __Pyx_GIVEREF(__pyx_v_dir); - __Pyx_INCREF(__pyx_v_name); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_name); - __Pyx_GIVEREF(__pyx_v_name); - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __pyx_t_11 = 0; - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_12) { - if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_v_name))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L13; - } - __pyx_L13:; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_filenames = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":305 - * try: - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - * return filenames # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_filenames); - __pyx_r = __pyx_v_filenames; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":306 - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - * return filenames - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") - */ - __pyx_t_13 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_13) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_all_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":307 - * return filenames - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_12) { - - /* "lib/Naked/toolshed/c/system.pyx":308 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L16; - } - __pyx_L16:; - - /* "lib/Naked/toolshed/c/system.pyx":309 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":302 - * # Tests: test_SYSTEM.py :: test_sys_list_all_files, test_sys_list_all_files_emptydir - * #------------------------------------------------------------------------------ - * def list_all_files(dir): # <<<<<<<<<<<<<< - * try: - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_all_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_filenames); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":318 - * # Tests: test_SYSTEM.py :: test_sys_list_filter_files, test_sys_list_filter_files_nomatch - * #------------------------------------------------------------------------------ - * def list_filter_files(extension_filter, dir): # <<<<<<<<<<<<<< - * try: - * if not extension_filter.startswith("."): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_35list_filter_files(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_35list_filter_files = {__Pyx_NAMESTR("list_filter_files"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_35list_filter_files, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_35list_filter_files(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_extension_filter = 0; - PyObject *__pyx_v_dir = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("list_filter_files (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_extension_filter,&__pyx_n_s_dir,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_extension_filter)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dir)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("list_filter_files", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_filter_files") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_extension_filter = values[0]; - __pyx_v_dir = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("list_filter_files", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_filter_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_34list_filter_files(__pyx_self, __pyx_v_extension_filter, __pyx_v_dir); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_34list_filter_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_extension_filter, PyObject *__pyx_v_dir) { - PyObject *__pyx_v_filenames = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - PyObject *(*__pyx_t_11)(PyObject *); - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("list_filter_files", 0); - __Pyx_INCREF(__pyx_v_extension_filter); - - /* "lib/Naked/toolshed/c/system.pyx":319 - * #------------------------------------------------------------------------------ - * def list_filter_files(extension_filter, dir): - * try: # <<<<<<<<<<<<<< - * if not extension_filter.startswith("."): - * extension_filter = "." + extension_filter - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":320 - * def list_filter_files(extension_filter, dir): - * try: - * if not extension_filter.startswith("."): # <<<<<<<<<<<<<< - * extension_filter = "." + extension_filter - * filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_extension_filter, __pyx_n_s_startswith); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = ((!__pyx_t_6) != 0); - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/system.pyx":321 - * try: - * if not extension_filter.startswith("."): - * extension_filter = "." + extension_filter # <<<<<<<<<<<<<< - * filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - * return filenames - */ - __pyx_t_5 = PyNumber_Add(__pyx_kp_s__24, __pyx_v_extension_filter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF_SET(__pyx_v_extension_filter, __pyx_t_5); - __pyx_t_5 = 0; - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/system.pyx":322 - * if not extension_filter.startswith("."): - * extension_filter = "." + extension_filter - * filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] # <<<<<<<<<<<<<< - * return filenames - * except Exception as e: - */ - __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_listdir); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_dir); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_dir); - __Pyx_GIVEREF(__pyx_v_dir); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) { - __pyx_t_4 = __pyx_t_9; __Pyx_INCREF(__pyx_t_4); __pyx_t_10 = 0; - __pyx_t_11 = NULL; - } else { - __pyx_t_10 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_11 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - for (;;) { - if (!__pyx_t_11 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_11 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_9 = PySequence_ITEM(__pyx_t_4, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_9 = __pyx_t_11(__pyx_t_4); - if (unlikely(!__pyx_t_9)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_9); - } - __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_9); - __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_endswith); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_extension_filter); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_extension_filter); - __Pyx_GIVEREF(__pyx_v_extension_filter); - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (__pyx_t_7) { - if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_v_name))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - goto __pyx_L14; - } - __pyx_L14:; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_filenames = ((PyObject*)__pyx_t_5); - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":323 - * extension_filter = "." + extension_filter - * filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - * return filenames # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_filenames); - __pyx_r = __pyx_v_filenames; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":324 - * filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - * return filenames - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") - */ - __pyx_t_13 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_13) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_filter_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_12); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_e = __pyx_t_4; - - /* "lib/Naked/toolshed/c/system.pyx":325 - * return filenames - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/system.pyx":326 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L17; - } - __pyx_L17:; - - /* "lib/Naked/toolshed/c/system.pyx":327 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":318 - * # Tests: test_SYSTEM.py :: test_sys_list_filter_files, test_sys_list_filter_files_nomatch - * #------------------------------------------------------------------------------ - * def list_filter_files(extension_filter, dir): # <<<<<<<<<<<<<< - * try: - * if not extension_filter.startswith("."): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_filter_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_filenames); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XDECREF(__pyx_v_extension_filter); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":338 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def list_all_files_cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return list_all_files(dir) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_37list_all_files_cwd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_37list_all_files_cwd = {__Pyx_NAMESTR("list_all_files_cwd"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_37list_all_files_cwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_37list_all_files_cwd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_dir = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("list_all_files_cwd (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dir,0}; - PyObject* values[1] = {0}; - values[0] = ((PyObject *)__pyx_kp_s__8); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dir); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_all_files_cwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_dir = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("list_all_files_cwd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_all_files_cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_36list_all_files_cwd(__pyx_self, __pyx_v_dir); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_36list_all_files_cwd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dir) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("list_all_files_cwd", 0); - - /* "lib/Naked/toolshed/c/system.pyx":339 - * @currentdir_firstparam - * def list_all_files_cwd(dir=""): - * try: # <<<<<<<<<<<<<< - * return list_all_files(dir) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":340 - * def list_all_files_cwd(dir=""): - * try: - * return list_all_files(dir) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_list_all_files); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_dir); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_dir); - __Pyx_GIVEREF(__pyx_v_dir); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":341 - * try: - * return list_all_files(dir) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_all_files_cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":342 - * return list_all_files(dir) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":343 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":344 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":338 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def list_all_files_cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return list_all_files(dir) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_all_files_cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":355 - * #------------------------------------------------------------------------------ - * @currentdir_lastparam - * def list_filter_files_cwd(extension_filter, current_dir=""): # <<<<<<<<<<<<<< - * try: - * return list_filter_files(extension_filter, current_dir) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_39list_filter_files_cwd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_39list_filter_files_cwd = {__Pyx_NAMESTR("list_filter_files_cwd"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_39list_filter_files_cwd, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_39list_filter_files_cwd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_extension_filter = 0; - PyObject *__pyx_v_current_dir = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("list_filter_files_cwd (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_extension_filter,&__pyx_n_s_current_dir,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_kp_s__8); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_extension_filter)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_current_dir); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_filter_files_cwd") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_extension_filter = values[0]; - __pyx_v_current_dir = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("list_filter_files_cwd", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_filter_files_cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_38list_filter_files_cwd(__pyx_self, __pyx_v_extension_filter, __pyx_v_current_dir); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_38list_filter_files_cwd(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_extension_filter, PyObject *__pyx_v_current_dir) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("list_filter_files_cwd", 0); - - /* "lib/Naked/toolshed/c/system.pyx":356 - * @currentdir_lastparam - * def list_filter_files_cwd(extension_filter, current_dir=""): - * try: # <<<<<<<<<<<<<< - * return list_filter_files(extension_filter, current_dir) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":357 - * def list_filter_files_cwd(extension_filter, current_dir=""): - * try: - * return list_filter_files(extension_filter, current_dir) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_list_filter_files); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_extension_filter); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_extension_filter); - __Pyx_GIVEREF(__pyx_v_extension_filter); - __Pyx_INCREF(__pyx_v_current_dir); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_current_dir); - __Pyx_GIVEREF(__pyx_v_current_dir); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":358 - * try: - * return list_filter_files(extension_filter, current_dir) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_filter_files_cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":359 - * return list_filter_files(extension_filter, current_dir) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":360 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":361 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":355 - * #------------------------------------------------------------------------------ - * @currentdir_lastparam - * def list_filter_files_cwd(extension_filter, current_dir=""): # <<<<<<<<<<<<<< - * try: - * return list_filter_files(extension_filter, current_dir) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_filter_files_cwd", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":373 - * # Tests: test_SYSTEM.py :: test_sys_match_files, test_sys_match_files_fullpath - * #------------------------------------------------------------------------------ - * def list_match_files(match_pattern, full_path = False): # <<<<<<<<<<<<<< - * try: - * from glob import glob - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_41list_match_files(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_41list_match_files = {__Pyx_NAMESTR("list_match_files"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_41list_match_files, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_41list_match_files(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_match_pattern = 0; - PyObject *__pyx_v_full_path = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("list_match_files (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_match_pattern,&__pyx_n_s_full_path,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)Py_False); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_match_pattern)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_full_path); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_match_files") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_match_pattern = values[0]; - __pyx_v_full_path = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("list_match_files", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_match_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_40list_match_files(__pyx_self, __pyx_v_match_pattern, __pyx_v_full_path); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_40list_match_files(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_match_pattern, PyObject *__pyx_v_full_path) { - PyObject *__pyx_v_glob = NULL; - PyObject *__pyx_v_filenames = NULL; - PyObject *__pyx_v_filenames_fullpath = NULL; - PyObject *__pyx_v_cwd = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - Py_ssize_t __pyx_t_7; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - int __pyx_t_12; - PyObject *__pyx_t_13 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("list_match_files", 0); - - /* "lib/Naked/toolshed/c/system.pyx":374 - * #------------------------------------------------------------------------------ - * def list_match_files(match_pattern, full_path = False): - * try: # <<<<<<<<<<<<<< - * from glob import glob - * filenames = glob(match_pattern) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":375 - * def list_match_files(match_pattern, full_path = False): - * try: - * from glob import glob # <<<<<<<<<<<<<< - * filenames = glob(match_pattern) - * if full_path: - */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_n_s_glob); - PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_glob); - __Pyx_GIVEREF(__pyx_n_s_glob); - __pyx_t_5 = __Pyx_Import(__pyx_n_s_glob, __pyx_t_4, -1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_glob); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_4); - __pyx_v_glob = __pyx_t_4; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":376 - * try: - * from glob import glob - * filenames = glob(match_pattern) # <<<<<<<<<<<<<< - * if full_path: - * filenames_fullpath = [] - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_match_pattern); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_match_pattern); - __Pyx_GIVEREF(__pyx_v_match_pattern); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_glob, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_filenames = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":377 - * from glob import glob - * filenames = glob(match_pattern) - * if full_path: # <<<<<<<<<<<<<< - * filenames_fullpath = [] - * cwd = os.getcwd() - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_full_path); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/system.pyx":378 - * filenames = glob(match_pattern) - * if full_path: - * filenames_fullpath = [] # <<<<<<<<<<<<<< - * cwd = os.getcwd() - * for name in filenames: - */ - __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_filenames_fullpath = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":379 - * if full_path: - * filenames_fullpath = [] - * cwd = os.getcwd() # <<<<<<<<<<<<<< - * for name in filenames: - * name = os.path.join(cwd, name) #make the full path to the file - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_getcwd); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_cwd = __pyx_t_4; - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":380 - * filenames_fullpath = [] - * cwd = os.getcwd() - * for name in filenames: # <<<<<<<<<<<<<< - * name = os.path.join(cwd, name) #make the full path to the file - * filenames_fullpath.append(name) #add to the new list - */ - if (PyList_CheckExact(__pyx_v_filenames) || PyTuple_CheckExact(__pyx_v_filenames)) { - __pyx_t_4 = __pyx_v_filenames; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - } else { - __pyx_t_7 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_filenames); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - for (;;) { - if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_8(__pyx_t_4); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5); - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":381 - * cwd = os.getcwd() - * for name in filenames: - * name = os.path.join(cwd, name) #make the full path to the file # <<<<<<<<<<<<<< - * filenames_fullpath.append(name) #add to the new list - * return filenames_fullpath #then return that list - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_path); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_join); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_v_cwd); - PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_cwd); - __Pyx_GIVEREF(__pyx_v_cwd); - __Pyx_INCREF(__pyx_v_name); - PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_name); - __Pyx_GIVEREF(__pyx_v_name); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_10); - __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":382 - * for name in filenames: - * name = os.path.join(cwd, name) #make the full path to the file - * filenames_fullpath.append(name) #add to the new list # <<<<<<<<<<<<<< - * return filenames_fullpath #then return that list - * else: - */ - __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_filenames_fullpath, __pyx_v_name); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":383 - * name = os.path.join(cwd, name) #make the full path to the file - * filenames_fullpath.append(name) #add to the new list - * return filenames_fullpath #then return that list # <<<<<<<<<<<<<< - * else: - * return filenames - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_filenames_fullpath); - __pyx_r = __pyx_v_filenames_fullpath; - goto __pyx_L7_try_return; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/system.pyx":385 - * return filenames_fullpath #then return that list - * else: - * return filenames # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_filenames); - __pyx_r = __pyx_v_filenames; - goto __pyx_L7_try_return; - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":386 - * else: - * return filenames - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") - */ - __pyx_t_12 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_12) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_match_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_10, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_10); - __pyx_v_e = __pyx_t_10; - - /* "lib/Naked/toolshed/c/system.pyx":387 - * return filenames - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/system.pyx":388 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_stderr); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - goto __pyx_L16; - } - __pyx_L16:; - - /* "lib/Naked/toolshed/c/system.pyx":389 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":373 - * # Tests: test_SYSTEM.py :: test_sys_match_files, test_sys_match_files_fullpath - * #------------------------------------------------------------------------------ - * def list_match_files(match_pattern, full_path = False): # <<<<<<<<<<<<<< - * try: - * from glob import glob - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.list_match_files", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_glob); - __Pyx_XDECREF(__pyx_v_filenames); - __Pyx_XDECREF(__pyx_v_filenames_fullpath); - __Pyx_XDECREF(__pyx_v_cwd); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":401 - * # return boolean indicating whether the path is a symbolic link - * #------------------------------------------------------------------------------ - * def is_link(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.islink(filepath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_43is_link(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_43is_link = {__Pyx_NAMESTR("is_link"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_43is_link, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_43is_link(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("is_link (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_42is_link(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_42is_link(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("is_link", 0); - - /* "lib/Naked/toolshed/c/system.pyx":402 - * #------------------------------------------------------------------------------ - * def is_link(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.islink(filepath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":403 - * def is_link(filepath): - * try: - * return os.path.islink(filepath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_islink); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":404 - * try: - * return os.path.islink(filepath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.is_link", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":405 - * return os.path.islink(filepath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":406 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":407 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":401 - * # return boolean indicating whether the path is a symbolic link - * #------------------------------------------------------------------------------ - * def is_link(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.islink(filepath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.is_link", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":413 - * # return the real file path pointed to by a symbolic link - * #------------------------------------------------------------------------------ - * def real_path(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.realpath(filepath) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_45real_path(PyObject *__pyx_self, PyObject *__pyx_v_filepath); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_45real_path = {__Pyx_NAMESTR("real_path"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_45real_path, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_45real_path(PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("real_path (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_44real_path(__pyx_self, ((PyObject *)__pyx_v_filepath)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_44real_path(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_filepath) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("real_path", 0); - - /* "lib/Naked/toolshed/c/system.pyx":414 - * #------------------------------------------------------------------------------ - * def real_path(filepath): - * try: # <<<<<<<<<<<<<< - * return os.path.realpath(filepath) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":415 - * def real_path(filepath): - * try: - * return os.path.realpath(filepath) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_os); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_path); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_realpath); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_filepath); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filepath); - __Pyx_GIVEREF(__pyx_v_filepath); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":416 - * try: - * return os.path.realpath(filepath) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.real_path", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":417 - * return os.path.realpath(filepath) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":418 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":419 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":413 - * # return the real file path pointed to by a symbolic link - * #------------------------------------------------------------------------------ - * def real_path(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.realpath(filepath) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.real_path", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":431 - * # print to std output stream - * #------------------------------------------------------------------------------ - * def stdout(text): # <<<<<<<<<<<<<< - * try: - * print(text) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_47stdout(PyObject *__pyx_self, PyObject *__pyx_v_text); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_47stdout = {__Pyx_NAMESTR("stdout"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_47stdout, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_47stdout(PyObject *__pyx_self, PyObject *__pyx_v_text) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stdout (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_46stdout(__pyx_self, ((PyObject *)__pyx_v_text)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_46stdout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("stdout", 0); - - /* "lib/Naked/toolshed/c/system.pyx":432 - * #------------------------------------------------------------------------------ - * def stdout(text): - * try: # <<<<<<<<<<<<<< - * print(text) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":433 - * def stdout(text): - * try: - * print(text) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - if (__Pyx_PrintOne(0, __pyx_v_text) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - - /* "lib/Naked/toolshed/c/system.pyx":434 - * try: - * print(text) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") - */ - __pyx_t_4 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_4) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":435 - * print(text) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":436 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":437 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":431 - * # print to std output stream - * #------------------------------------------------------------------------------ - * def stdout(text): # <<<<<<<<<<<<<< - * try: - * print(text) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":443 - * # print to std output stream without a newline - * #------------------------------------------------------------------------------ - * def stdout_xnl(text): # <<<<<<<<<<<<<< - * try: - * sys.stdout.write(text) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_49stdout_xnl(PyObject *__pyx_self, PyObject *__pyx_v_text); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_49stdout_xnl = {__Pyx_NAMESTR("stdout_xnl"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_49stdout_xnl, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_49stdout_xnl(PyObject *__pyx_self, PyObject *__pyx_v_text) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stdout_xnl (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_48stdout_xnl(__pyx_self, ((PyObject *)__pyx_v_text)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_48stdout_xnl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("stdout_xnl", 0); - - /* "lib/Naked/toolshed/c/system.pyx":444 - * #------------------------------------------------------------------------------ - * def stdout_xnl(text): - * try: # <<<<<<<<<<<<<< - * sys.stdout.write(text) - * except Exception as e: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":445 - * def stdout_xnl(text): - * try: - * sys.stdout.write(text) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stdout); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":446 - * try: - * sys.stdout.write(text) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") - */ - __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_7) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":447 - * sys.stdout.write(text) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/system.pyx":448 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/system.pyx":449 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":443 - * # print to std output stream without a newline - * #------------------------------------------------------------------------------ - * def stdout_xnl(text): # <<<<<<<<<<<<<< - * try: - * sys.stdout.write(text) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":455 - * # print items in an iterable to the standard output stream with newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_51stdout_iter(PyObject *__pyx_self, PyObject *__pyx_v_iter); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_51stdout_iter = {__Pyx_NAMESTR("stdout_iter"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_51stdout_iter, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_51stdout_iter(PyObject *__pyx_self, PyObject *__pyx_v_iter) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stdout_iter (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_50stdout_iter(__pyx_self, ((PyObject *)__pyx_v_iter)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_50stdout_iter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_iter) { - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("stdout_iter", 0); - - /* "lib/Naked/toolshed/c/system.pyx":456 - * #------------------------------------------------------------------------------ - * def stdout_iter(iter): - * try: # <<<<<<<<<<<<<< - * for x in iter: - * stdout(x) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":457 - * def stdout_iter(iter): - * try: - * for x in iter: # <<<<<<<<<<<<<< - * stdout(x) - * except Exception as e: - */ - if (PyList_CheckExact(__pyx_v_iter) || PyTuple_CheckExact(__pyx_v_iter)) { - __pyx_t_4 = __pyx_v_iter; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_iter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":458 - * try: - * for x in iter: - * stdout(x) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_stdout); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_x); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":459 - * for x in iter: - * stdout(x) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - */ - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout_iter", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_e = __pyx_t_9; - - /* "lib/Naked/toolshed/c/system.pyx":460 - * stdout(x) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_11) { - - /* "lib/Naked/toolshed/c/system.pyx":461 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/system.pyx":462 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":455 - * # print items in an iterable to the standard output stream with newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout_iter", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":469 - * # print items in an iterable to the standard output stream without newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter_xnl(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_53stdout_iter_xnl(PyObject *__pyx_self, PyObject *__pyx_v_iter); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_53stdout_iter_xnl = {__Pyx_NAMESTR("stdout_iter_xnl"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_53stdout_iter_xnl, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_53stdout_iter_xnl(PyObject *__pyx_self, PyObject *__pyx_v_iter) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stdout_iter_xnl (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_52stdout_iter_xnl(__pyx_self, ((PyObject *)__pyx_v_iter)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_52stdout_iter_xnl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_iter) { - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("stdout_iter_xnl", 0); - - /* "lib/Naked/toolshed/c/system.pyx":470 - * #------------------------------------------------------------------------------ - * def stdout_iter_xnl(iter): - * try: # <<<<<<<<<<<<<< - * for x in iter: - * stdout_xnl(x) - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":471 - * def stdout_iter_xnl(iter): - * try: - * for x in iter: # <<<<<<<<<<<<<< - * stdout_xnl(x) - * except Exception as e: - */ - if (PyList_CheckExact(__pyx_v_iter) || PyTuple_CheckExact(__pyx_v_iter)) { - __pyx_t_4 = __pyx_v_iter; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_iter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":472 - * try: - * for x in iter: - * stdout_xnl(x) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_stdout_xnl); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_v_x); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":473 - * for x in iter: - * stdout_xnl(x) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - */ - __pyx_t_10 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_10) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout_iter_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __pyx_v_e = __pyx_t_9; - - /* "lib/Naked/toolshed/c/system.pyx":474 - * stdout_xnl(x) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (__pyx_t_11) { - - /* "lib/Naked/toolshed/c/system.pyx":475 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_stderr); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L15; - } - __pyx_L15:; - - /* "lib/Naked/toolshed/c/system.pyx":476 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":469 - * # print items in an iterable to the standard output stream without newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter_xnl(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stdout_iter_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":483 - * # optionally (i.e. if exit = nonzero integer) permits exit from application with developer defined exit code - * #------------------------------------------------------------------------------ - * def stderr(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text + "\n") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_55stderr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_55stderr = {__Pyx_NAMESTR("stderr"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_55stderr, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_55stderr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_text = 0; - PyObject *__pyx_v_exit = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stderr (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_text,&__pyx_n_s_exit,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_0); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exit); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stderr") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_text = values[0]; - __pyx_v_exit = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("stderr", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stderr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_54stderr(__pyx_self, __pyx_v_text, __pyx_v_exit); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_54stderr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text, PyObject *__pyx_v_exit) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("stderr", 0); - - /* "lib/Naked/toolshed/c/system.pyx":484 - * #------------------------------------------------------------------------------ - * def stderr(text, exit=0): - * try: # <<<<<<<<<<<<<< - * sys.stderr.write(text + "\n") - * if exit: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":485 - * def stderr(text, exit=0): - * try: - * sys.stderr.write(text + "\n") # <<<<<<<<<<<<<< - * if exit: - * raise SystemExit(exit) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stderr); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyNumber_Add(__pyx_v_text, __pyx_kp_s__36); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":486 - * try: - * sys.stderr.write(text + "\n") - * if exit: # <<<<<<<<<<<<<< - * raise SystemExit(exit) - * except Exception as e: - */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_exit); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/system.pyx":487 - * sys.stderr.write(text + "\n") - * if exit: - * raise SystemExit(exit) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_exit); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_exit); - __Pyx_GIVEREF(__pyx_v_exit); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_SystemExit, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":488 - * if exit: - * raise SystemExit(exit) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stderr", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/system.pyx":489 - * raise SystemExit(exit) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/system.pyx":490 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/system.pyx":491 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":483 - * # optionally (i.e. if exit = nonzero integer) permits exit from application with developer defined exit code - * #------------------------------------------------------------------------------ - * def stderr(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text + "\n") - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stderr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":497 - * # print to the standard error stream without a newline character after the `text` string - * #------------------------------------------------------------------------------ - * def stderr_xnl(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_57stderr_xnl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_57stderr_xnl = {__Pyx_NAMESTR("stderr_xnl"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_57stderr_xnl, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_57stderr_xnl(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_text = 0; - PyObject *__pyx_v_exit = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("stderr_xnl (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_text,&__pyx_n_s_exit,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)__pyx_int_0); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_text)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exit); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "stderr_xnl") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_text = values[0]; - __pyx_v_exit = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("stderr_xnl", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stderr_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_56stderr_xnl(__pyx_self, __pyx_v_text, __pyx_v_exit); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_56stderr_xnl(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_text, PyObject *__pyx_v_exit) { - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("stderr_xnl", 0); - - /* "lib/Naked/toolshed/c/system.pyx":498 - * #------------------------------------------------------------------------------ - * def stderr_xnl(text, exit=0): - * try: # <<<<<<<<<<<<<< - * sys.stderr.write(text) - * if exit: - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/system.pyx":499 - * def stderr_xnl(text, exit=0): - * try: - * sys.stderr.write(text) # <<<<<<<<<<<<<< - * if exit: - * raise SystemExit(exit) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_stderr); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_text); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_text); - __Pyx_GIVEREF(__pyx_v_text); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":500 - * try: - * sys.stderr.write(text) - * if exit: # <<<<<<<<<<<<<< - * raise SystemExit(exit) - * except Exception as e: - */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_exit); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/system.pyx":501 - * sys.stderr.write(text) - * if exit: - * raise SystemExit(exit) # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_exit); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_exit); - __Pyx_GIVEREF(__pyx_v_exit); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_SystemExit, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":502 - * if exit: - * raise SystemExit(exit) - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - */ - __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_8) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stderr_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/system.pyx":503 - * raise SystemExit(exit) - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - * raise e - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/system.pyx":504 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_stderr); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L14; - } - __pyx_L14:; - - /* "lib/Naked/toolshed/c/system.pyx":505 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/system.pyx":497 - * # print to the standard error stream without a newline character after the `text` string - * #------------------------------------------------------------------------------ - * def stderr_xnl(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.stderr_xnl", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":519 - * # Tests: test_SYSTEM.py :: test_sys_exit_with_code - * #------------------------------------------------------------------------------ - * def exit_with_status(exit=0): # <<<<<<<<<<<<<< - * raise SystemExit(exit) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_59exit_with_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_59exit_with_status = {__Pyx_NAMESTR("exit_with_status"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_59exit_with_status, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_59exit_with_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_exit = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("exit_with_status (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_exit,0}; - PyObject* values[1] = {0}; - values[0] = ((PyObject *)__pyx_int_0); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exit); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "exit_with_status") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_exit = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("exit_with_status", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.exit_with_status", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_58exit_with_status(__pyx_self, __pyx_v_exit); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_58exit_with_status(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_exit) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("exit_with_status", 0); - - /* "lib/Naked/toolshed/c/system.pyx":520 - * #------------------------------------------------------------------------------ - * def exit_with_status(exit=0): - * raise SystemExit(exit) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_exit); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_exit); - __Pyx_GIVEREF(__pyx_v_exit); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemExit, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":519 - * # Tests: test_SYSTEM.py :: test_sys_exit_with_code - * #------------------------------------------------------------------------------ - * def exit_with_status(exit=0): # <<<<<<<<<<<<<< - * raise SystemExit(exit) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.exit_with_status", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":527 - * # Tests: test_SYSTEM.py :: test_sys_exit_failure - * #------------------------------------------------------------------------------ - * def exit_fail(): # <<<<<<<<<<<<<< - * raise SystemExit(1) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_61exit_fail(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_61exit_fail = {__Pyx_NAMESTR("exit_fail"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_61exit_fail, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_61exit_fail(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("exit_fail (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_60exit_fail(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_60exit_fail(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("exit_fail", 0); - - /* "lib/Naked/toolshed/c/system.pyx":528 - * #------------------------------------------------------------------------------ - * def exit_fail(): - * raise SystemExit(1) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_SystemExit, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":527 - * # Tests: test_SYSTEM.py :: test_sys_exit_failure - * #------------------------------------------------------------------------------ - * def exit_fail(): # <<<<<<<<<<<<<< - * raise SystemExit(1) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.exit_fail", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/system.pyx":535 - * # Tests: test_SYSTEM.py :: test_sys_exit_success - * #------------------------------------------------------------------------------ - * def exit_success(): # <<<<<<<<<<<<<< - * raise SystemExit(0) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_63exit_success(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_6system_63exit_success = {__Pyx_NAMESTR("exit_success"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_6system_63exit_success, METH_NOARGS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_6system_63exit_success(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("exit_success (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_6system_62exit_success(__pyx_self); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_6system_62exit_success(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("exit_success", 0); - - /* "lib/Naked/toolshed/c/system.pyx":536 - * #------------------------------------------------------------------------------ - * def exit_success(): - * raise SystemExit(0) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_SystemExit, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":535 - * # Tests: test_SYSTEM.py :: test_sys_exit_success - * #------------------------------------------------------------------------------ - * def exit_success(): # <<<<<<<<<<<<<< - * raise SystemExit(0) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.system.exit_success", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *__pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile[--__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile[__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.system.__pyx_scope_struct__currentdir_to_basefile"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *__pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam[--__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam[__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.system.__pyx_scope_struct_1_currentdir_firstparam"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *__pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam[8]; -static int __pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam = 0; - -static PyObject *__pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (likely((__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam)))) { - o = (PyObject*)__pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam[--__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam]; - memset(o, 0, sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam(PyObject *o) { - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_func); - if ((__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam))) { - __pyx_freelist_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam[__pyx_freecount_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam++] = ((struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *)o; - if (p->__pyx_v_func) { - e = (*v)(p->__pyx_v_func, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *p = (struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam *)o; - tmp = ((PyObject*)p->__pyx_v_func); - p->__pyx_v_func = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("lib.Naked.toolshed.c.system.__pyx_scope_struct_2_currentdir_lastparam"), /*tp_name*/ - sizeof(struct __pyx_obj_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #else - 0, /*reserved*/ - #endif - 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_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam, /*tp_traverse*/ - __pyx_tp_clear_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - #if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ - #endif - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("system"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s_EEXIST, __pyx_k_EEXIST, sizeof(__pyx_k_EEXIST), 0, 0, 1, 1}, - {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, - {&__pyx_kp_s_Naked_Framework_Error_Could_not, __pyx_k_Naked_Framework_Error_Could_not, sizeof(__pyx_k_Naked_Framework_Error_Could_not), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with, __pyx_k_Naked_Framework_Error_error_with, sizeof(__pyx_k_Naked_Framework_Error_error_with), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with_2, __pyx_k_Naked_Framework_Error_error_with_2, sizeof(__pyx_k_Naked_Framework_Error_error_with_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with_3, __pyx_k_Naked_Framework_Error_error_with_3, sizeof(__pyx_k_Naked_Framework_Error_error_with_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with_4, __pyx_k_Naked_Framework_Error_error_with_4, sizeof(__pyx_k_Naked_Framework_Error_error_with_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with_5, __pyx_k_Naked_Framework_Error_error_with_5, sizeof(__pyx_k_Naked_Framework_Error_error_with_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with_6, __pyx_k_Naked_Framework_Error_error_with_6, sizeof(__pyx_k_Naked_Framework_Error_error_with_6), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_error_with_7, __pyx_k_Naked_Framework_Error_error_with_7, sizeof(__pyx_k_Naked_Framework_Error_error_with_7), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to, __pyx_k_Naked_Framework_Error_unable_to, sizeof(__pyx_k_Naked_Framework_Error_unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_10, __pyx_k_Naked_Framework_Error_unable_to_10, sizeof(__pyx_k_Naked_Framework_Error_unable_to_10), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_11, __pyx_k_Naked_Framework_Error_unable_to_11, sizeof(__pyx_k_Naked_Framework_Error_unable_to_11), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_12, __pyx_k_Naked_Framework_Error_unable_to_12, sizeof(__pyx_k_Naked_Framework_Error_unable_to_12), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_13, __pyx_k_Naked_Framework_Error_unable_to_13, sizeof(__pyx_k_Naked_Framework_Error_unable_to_13), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_14, __pyx_k_Naked_Framework_Error_unable_to_14, sizeof(__pyx_k_Naked_Framework_Error_unable_to_14), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_15, __pyx_k_Naked_Framework_Error_unable_to_15, sizeof(__pyx_k_Naked_Framework_Error_unable_to_15), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_16, __pyx_k_Naked_Framework_Error_unable_to_16, sizeof(__pyx_k_Naked_Framework_Error_unable_to_16), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_17, __pyx_k_Naked_Framework_Error_unable_to_17, sizeof(__pyx_k_Naked_Framework_Error_unable_to_17), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_2, __pyx_k_Naked_Framework_Error_unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_unable_to_2), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_3, __pyx_k_Naked_Framework_Error_unable_to_3, sizeof(__pyx_k_Naked_Framework_Error_unable_to_3), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_4, __pyx_k_Naked_Framework_Error_unable_to_4, sizeof(__pyx_k_Naked_Framework_Error_unable_to_4), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_5, __pyx_k_Naked_Framework_Error_unable_to_5, sizeof(__pyx_k_Naked_Framework_Error_unable_to_5), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_6, __pyx_k_Naked_Framework_Error_unable_to_6, sizeof(__pyx_k_Naked_Framework_Error_unable_to_6), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_7, __pyx_k_Naked_Framework_Error_unable_to_7, sizeof(__pyx_k_Naked_Framework_Error_unable_to_7), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_8, __pyx_k_Naked_Framework_Error_unable_to_8, sizeof(__pyx_k_Naked_Framework_Error_unable_to_8), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_9, __pyx_k_Naked_Framework_Error_unable_to_9, sizeof(__pyx_k_Naked_Framework_Error_unable_to_9), 0, 0, 1, 0}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_OSError, __pyx_k_OSError, sizeof(__pyx_k_OSError), 0, 0, 1, 1}, - {&__pyx_n_s_SystemExit, __pyx_k_SystemExit, sizeof(__pyx_k_SystemExit), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_kp_s__24, __pyx_k__24, sizeof(__pyx_k__24), 0, 0, 1, 0}, - {&__pyx_kp_s__36, __pyx_k__36, sizeof(__pyx_k__36), 0, 0, 1, 0}, - {&__pyx_kp_s__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 0, 1, 0}, - {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, - {&__pyx_n_s_basename, __pyx_k_basename, sizeof(__pyx_k_basename), 0, 0, 1, 1}, - {&__pyx_n_s_ctime, __pyx_k_ctime, sizeof(__pyx_k_ctime), 0, 0, 1, 1}, - {&__pyx_n_s_current_dir, __pyx_k_current_dir, sizeof(__pyx_k_current_dir), 0, 0, 1, 1}, - {&__pyx_n_s_current_directory, __pyx_k_current_directory, sizeof(__pyx_k_current_directory), 0, 0, 1, 1}, - {&__pyx_n_s_currentdir_firstparam, __pyx_k_currentdir_firstparam, sizeof(__pyx_k_currentdir_firstparam), 0, 0, 1, 1}, - {&__pyx_n_s_currentdir_firstparam_locals_wra, __pyx_k_currentdir_firstparam_locals_wra, sizeof(__pyx_k_currentdir_firstparam_locals_wra), 0, 0, 1, 1}, - {&__pyx_n_s_currentdir_lastparam, __pyx_k_currentdir_lastparam, sizeof(__pyx_k_currentdir_lastparam), 0, 0, 1, 1}, - {&__pyx_n_s_currentdir_lastparam_locals_wrap, __pyx_k_currentdir_lastparam_locals_wrap, sizeof(__pyx_k_currentdir_lastparam_locals_wrap), 0, 0, 1, 1}, - {&__pyx_n_s_currentdir_to_basefile, __pyx_k_currentdir_to_basefile, sizeof(__pyx_k_currentdir_to_basefile), 0, 0, 1, 1}, - {&__pyx_n_s_currentdir_to_basefile_locals_wr, __pyx_k_currentdir_to_basefile_locals_wr, sizeof(__pyx_k_currentdir_to_basefile_locals_wr), 0, 0, 1, 1}, - {&__pyx_n_s_cwd, __pyx_k_cwd, sizeof(__pyx_k_cwd), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_dir, __pyx_k_dir, sizeof(__pyx_k_dir), 0, 0, 1, 1}, - {&__pyx_n_s_dir_exists, __pyx_k_dir_exists, sizeof(__pyx_k_dir_exists), 0, 0, 1, 1}, - {&__pyx_n_s_directory, __pyx_k_directory, sizeof(__pyx_k_directory), 0, 0, 1, 1}, - {&__pyx_n_s_dirname, __pyx_k_dirname, sizeof(__pyx_k_dirname), 0, 0, 1, 1}, - {&__pyx_n_s_dirpath, __pyx_k_dirpath, sizeof(__pyx_k_dirpath), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, - {&__pyx_n_s_endswith, __pyx_k_endswith, sizeof(__pyx_k_endswith), 0, 0, 1, 1}, - {&__pyx_n_s_errno, __pyx_k_errno, sizeof(__pyx_k_errno), 0, 0, 1, 1}, - {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1}, - {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1}, - {&__pyx_n_s_exit_fail, __pyx_k_exit_fail, sizeof(__pyx_k_exit_fail), 0, 0, 1, 1}, - {&__pyx_n_s_exit_success, __pyx_k_exit_success, sizeof(__pyx_k_exit_success), 0, 0, 1, 1}, - {&__pyx_n_s_exit_with_status, __pyx_k_exit_with_status, sizeof(__pyx_k_exit_with_status), 0, 0, 1, 1}, - {&__pyx_n_s_extension_filter, __pyx_k_extension_filter, sizeof(__pyx_k_extension_filter), 0, 0, 1, 1}, - {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1}, - {&__pyx_n_s_file_exists, __pyx_k_file_exists, sizeof(__pyx_k_file_exists), 0, 0, 1, 1}, - {&__pyx_n_s_file_extension, __pyx_k_file_extension, sizeof(__pyx_k_file_extension), 0, 0, 1, 1}, - {&__pyx_n_s_file_mod_time, __pyx_k_file_mod_time, sizeof(__pyx_k_file_mod_time), 0, 0, 1, 1}, - {&__pyx_n_s_file_name, __pyx_k_file_name, sizeof(__pyx_k_file_name), 0, 0, 1, 1}, - {&__pyx_n_s_file_size, __pyx_k_file_size, sizeof(__pyx_k_file_size), 0, 0, 1, 1}, - {&__pyx_n_s_filename, __pyx_k_filename, sizeof(__pyx_k_filename), 0, 0, 1, 1}, - {&__pyx_n_s_filenames, __pyx_k_filenames, sizeof(__pyx_k_filenames), 0, 0, 1, 1}, - {&__pyx_n_s_filenames_fullpath, __pyx_k_filenames_fullpath, sizeof(__pyx_k_filenames_fullpath), 0, 0, 1, 1}, - {&__pyx_n_s_filepath, __pyx_k_filepath, sizeof(__pyx_k_filepath), 0, 0, 1, 1}, - {&__pyx_n_s_full_path, __pyx_k_full_path, sizeof(__pyx_k_full_path), 0, 0, 1, 1}, - {&__pyx_n_s_fullpath, __pyx_k_fullpath, sizeof(__pyx_k_fullpath), 0, 0, 1, 1}, - {&__pyx_n_s_func, __pyx_k_func, sizeof(__pyx_k_func), 0, 0, 1, 1}, - {&__pyx_n_s_functools, __pyx_k_functools, sizeof(__pyx_k_functools), 0, 0, 1, 1}, - {&__pyx_n_s_getcwd, __pyx_k_getcwd, sizeof(__pyx_k_getcwd), 0, 0, 1, 1}, - {&__pyx_n_s_getmtime, __pyx_k_getmtime, sizeof(__pyx_k_getmtime), 0, 0, 1, 1}, - {&__pyx_n_s_getsize, __pyx_k_getsize, sizeof(__pyx_k_getsize), 0, 0, 1, 1}, - {&__pyx_n_s_glob, __pyx_k_glob, sizeof(__pyx_k_glob), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_is_dir, __pyx_k_is_dir, sizeof(__pyx_k_is_dir), 0, 0, 1, 1}, - {&__pyx_n_s_is_file, __pyx_k_is_file, sizeof(__pyx_k_is_file), 0, 0, 1, 1}, - {&__pyx_n_s_is_link, __pyx_k_is_link, sizeof(__pyx_k_is_link), 0, 0, 1, 1}, - {&__pyx_n_s_isdir, __pyx_k_isdir, sizeof(__pyx_k_isdir), 0, 0, 1, 1}, - {&__pyx_n_s_isfile, __pyx_k_isfile, sizeof(__pyx_k_isfile), 0, 0, 1, 1}, - {&__pyx_n_s_islink, __pyx_k_islink, sizeof(__pyx_k_islink), 0, 0, 1, 1}, - {&__pyx_n_s_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 0, 1, 1}, - {&__pyx_n_s_join, __pyx_k_join, sizeof(__pyx_k_join), 0, 0, 1, 1}, - {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_system, __pyx_k_lib_Naked_toolshed_c_system, sizeof(__pyx_k_lib_Naked_toolshed_c_system), 0, 0, 1, 1}, - {&__pyx_n_s_list_all_files, __pyx_k_list_all_files, sizeof(__pyx_k_list_all_files), 0, 0, 1, 1}, - {&__pyx_n_s_list_all_files_cwd, __pyx_k_list_all_files_cwd, sizeof(__pyx_k_list_all_files_cwd), 0, 0, 1, 1}, - {&__pyx_n_s_list_filter_files, __pyx_k_list_filter_files, sizeof(__pyx_k_list_filter_files), 0, 0, 1, 1}, - {&__pyx_n_s_list_filter_files_cwd, __pyx_k_list_filter_files_cwd, sizeof(__pyx_k_list_filter_files_cwd), 0, 0, 1, 1}, - {&__pyx_n_s_list_match_files, __pyx_k_list_match_files, sizeof(__pyx_k_list_match_files), 0, 0, 1, 1}, - {&__pyx_n_s_listdir, __pyx_k_listdir, sizeof(__pyx_k_listdir), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_make_dirs, __pyx_k_make_dirs, sizeof(__pyx_k_make_dirs), 0, 0, 1, 1}, - {&__pyx_n_s_make_path, __pyx_k_make_path, sizeof(__pyx_k_make_path), 0, 0, 1, 1}, - {&__pyx_n_s_makedirs, __pyx_k_makedirs, sizeof(__pyx_k_makedirs), 0, 0, 1, 1}, - {&__pyx_n_s_match_pattern, __pyx_k_match_pattern, sizeof(__pyx_k_match_pattern), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, - {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1}, - {&__pyx_n_s_ose, __pyx_k_ose, sizeof(__pyx_k_ose), 0, 0, 1, 1}, - {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, - {&__pyx_n_s_path_list, __pyx_k_path_list, sizeof(__pyx_k_path_list), 0, 0, 1, 1}, - {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1}, - {&__pyx_n_s_real_path, __pyx_k_real_path, sizeof(__pyx_k_real_path), 0, 0, 1, 1}, - {&__pyx_n_s_realpath, __pyx_k_realpath, sizeof(__pyx_k_realpath), 0, 0, 1, 1}, - {&__pyx_n_s_splitext, __pyx_k_splitext, sizeof(__pyx_k_splitext), 0, 0, 1, 1}, - {&__pyx_n_s_startswith, __pyx_k_startswith, sizeof(__pyx_k_startswith), 0, 0, 1, 1}, - {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1}, - {&__pyx_n_s_stderr_xnl, __pyx_k_stderr_xnl, sizeof(__pyx_k_stderr_xnl), 0, 0, 1, 1}, - {&__pyx_n_s_stdout, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1}, - {&__pyx_n_s_stdout_iter, __pyx_k_stdout_iter, sizeof(__pyx_k_stdout_iter), 0, 0, 1, 1}, - {&__pyx_n_s_stdout_iter_xnl, __pyx_k_stdout_iter_xnl, sizeof(__pyx_k_stdout_iter_xnl), 0, 0, 1, 1}, - {&__pyx_n_s_stdout_xnl, __pyx_k_stdout_xnl, sizeof(__pyx_k_stdout_xnl), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, - {&__pyx_n_s_the_cwd, __pyx_k_the_cwd, sizeof(__pyx_k_the_cwd), 0, 0, 1, 1}, - {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1}, - {&__pyx_n_s_wrapper, __pyx_k_wrapper, sizeof(__pyx_k_wrapper), 0, 0, 1, 1}, - {&__pyx_n_s_wraps, __pyx_k_wraps, sizeof(__pyx_k_wraps), 0, 0, 1, 1}, - {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, - {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_OSError = __Pyx_GetBuiltinName(__pyx_n_s_OSError); if (!__pyx_builtin_OSError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_SystemExit = __Pyx_GetBuiltinName(__pyx_n_s_SystemExit); if (!__pyx_builtin_SystemExit) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/system.pyx":25 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "lib/Naked/toolshed/c/system.pyx":38 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_2); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "lib/Naked/toolshed/c/system.pyx":52 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_3); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "lib/Naked/toolshed/c/system.pyx":65 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_4); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "lib/Naked/toolshed/c/system.pyx":79 - * - * @wraps(func) - * def wrapper(file_name, *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() #get current working directory path - * full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - */ - __pyx_tuple__5 = PyTuple_Pack(5, __pyx_n_s_file_name, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_current_directory, __pyx_n_s_full_path); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - __pyx_codeobj__6 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__5, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 79, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":86 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "lib/Naked/toolshed/c/system.pyx":99 - * - * @wraps(func) - * def wrapper(dir="", *args, **kwargs): # <<<<<<<<<<<<<< - * current_directory = os.getcwd() - * return func(current_directory, *args, **kwargs) - */ - __pyx_tuple__9 = PyTuple_Pack(4, __pyx_n_s_dir, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_current_directory); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 99, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__11 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_s__8)); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - - /* "lib/Naked/toolshed/c/system.pyx":105 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with_2); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - - /* "lib/Naked/toolshed/c/system.pyx":121 - * - * @wraps(func) - * def wrapper(*args, **kwargs): # <<<<<<<<<<<<<< - * the_cwd = os.getcwd() - * return func(*args, current_dir=the_cwd) - */ - __pyx_tuple__13 = PyTuple_Pack(3, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_the_cwd); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wrapper, 121, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":127 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with_3); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - - /* "lib/Naked/toolshed/c/system.pyx":185 - * if ose.errno != errno.EEXIST: # directory already exists - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise ose - * else: - */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_Could_not); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - - /* "lib/Naked/toolshed/c/system.pyx":211 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with_4); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - - /* "lib/Naked/toolshed/c/system.pyx":225 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with_5); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); - - /* "lib/Naked/toolshed/c/system.pyx":241 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with_6); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - - /* "lib/Naked/toolshed/c/system.pyx":255 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_error_with_7); if (unlikely(!__pyx_tuple__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); - - /* "lib/Naked/toolshed/c/system.pyx":274 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_5); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - - /* "lib/Naked/toolshed/c/system.pyx":288 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_6); if (unlikely(!__pyx_tuple__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__22); - __Pyx_GIVEREF(__pyx_tuple__22); - - /* "lib/Naked/toolshed/c/system.pyx":308 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_7); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - - /* "lib/Naked/toolshed/c/system.pyx":320 - * def list_filter_files(extension_filter, dir): - * try: - * if not extension_filter.startswith("."): # <<<<<<<<<<<<<< - * extension_filter = "." + extension_filter - * filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - */ - __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s__24); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - - /* "lib/Naked/toolshed/c/system.pyx":326 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_8); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__26); - __Pyx_GIVEREF(__pyx_tuple__26); - - /* "lib/Naked/toolshed/c/system.pyx":343 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_9); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - - /* "lib/Naked/toolshed/c/system.pyx":360 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_10); if (unlikely(!__pyx_tuple__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__28); - __Pyx_GIVEREF(__pyx_tuple__28); - - /* "lib/Naked/toolshed/c/system.pyx":388 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_11); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - - /* "lib/Naked/toolshed/c/system.pyx":406 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_12); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__30); - __Pyx_GIVEREF(__pyx_tuple__30); - - /* "lib/Naked/toolshed/c/system.pyx":418 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_13); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - - /* "lib/Naked/toolshed/c/system.pyx":436 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_14); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); - - /* "lib/Naked/toolshed/c/system.pyx":448 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_15); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - - /* "lib/Naked/toolshed/c/system.pyx":461 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_16); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__34); - __Pyx_GIVEREF(__pyx_tuple__34); - - /* "lib/Naked/toolshed/c/system.pyx":475 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_16); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - - /* "lib/Naked/toolshed/c/system.pyx":490 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_17); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - - /* "lib/Naked/toolshed/c/system.pyx":504 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_17); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__38); - __Pyx_GIVEREF(__pyx_tuple__38); - - /* "lib/Naked/toolshed/c/system.pyx":528 - * #------------------------------------------------------------------------------ - * def exit_fail(): - * raise SystemExit(1) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_tuple__39 = PyTuple_Pack(1, __pyx_int_1); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__39); - __Pyx_GIVEREF(__pyx_tuple__39); - - /* "lib/Naked/toolshed/c/system.pyx":536 - * #------------------------------------------------------------------------------ - * def exit_success(): - * raise SystemExit(0) # <<<<<<<<<<<<<< - * - * - */ - __pyx_tuple__40 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__40); - __Pyx_GIVEREF(__pyx_tuple__40); - - /* "lib/Naked/toolshed/c/system.pyx":20 - * # Tests: test_SYSTEM.py :: test_sys_filename - * #------------------------------------------------------------------------------ - * def filename(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.basename(filepath) - */ - __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__41); - __Pyx_GIVEREF(__pyx_tuple__41); - __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_filename, 20, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":33 - * # Tests: test_SYSTEM.py :: test_sys_file_extension - * #------------------------------------------------------------------------------ - * def file_extension(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.splitext(filepath)[1] - */ - __pyx_tuple__43 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__43); - __Pyx_GIVEREF(__pyx_tuple__43); - __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_file_extension, 33, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":47 - * # Tests: test_SYSTEM.py :: test_sys_dir_path - * #------------------------------------------------------------------------------ - * def directory(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.dirname(filepath) - */ - __pyx_tuple__45 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__45); - __Pyx_GIVEREF(__pyx_tuple__45); - __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_directory, 47, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":60 - * # Tests: test_SYSTEM.py :: test_sys_make_filepath - * #------------------------------------------------------------------------------ - * def make_path(*path_list): # <<<<<<<<<<<<<< - * try: - * return os.path.join(*path_list) - */ - __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_path_list, __pyx_n_s_e); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__47); - __Pyx_GIVEREF(__pyx_tuple__47); - __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_make_path, 60, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":74 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - __pyx_tuple__49 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_wraps, __pyx_n_s_wrapper, __pyx_n_s_wrapper, __pyx_n_s_e); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__49); - __Pyx_GIVEREF(__pyx_tuple__49); - __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_currentdir_to_basefile, 74, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":94 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - __pyx_tuple__51 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_wraps, __pyx_n_s_wrapper, __pyx_n_s_wrapper, __pyx_n_s_e); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__51); - __Pyx_GIVEREF(__pyx_tuple__51); - __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_currentdir_firstparam, 94, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":116 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - __pyx_tuple__53 = PyTuple_Pack(5, __pyx_n_s_func, __pyx_n_s_wraps, __pyx_n_s_wrapper, __pyx_n_s_wrapper, __pyx_n_s_e); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__53); - __Pyx_GIVEREF(__pyx_tuple__53); - __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_currentdir_lastparam, 116, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":139 - * #------------------------------------------------------------------------------ - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function - * def fullpath(file_name): # <<<<<<<<<<<<<< - * try: - * return file_name - */ - __pyx_tuple__55 = PyTuple_Pack(2, __pyx_n_s_file_name, __pyx_n_s_e); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__55); - __Pyx_GIVEREF(__pyx_tuple__55); - __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_fullpath, 139, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":156 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return dir - */ - __pyx_tuple__57 = PyTuple_Pack(2, __pyx_n_s_dir, __pyx_n_s_e); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__57); - __Pyx_GIVEREF(__pyx_tuple__57); - __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_cwd, 156, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":176 - * # DOES NOT already exist - * #------------------------------------------------------------------------------ - * def make_dirs(dirpath): # <<<<<<<<<<<<<< - * try: - * import os - */ - __pyx_tuple__59 = PyTuple_Pack(5, __pyx_n_s_dirpath, __pyx_n_s_os, __pyx_n_s_errno, __pyx_n_s_ose, __pyx_n_s_e); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__59); - __Pyx_GIVEREF(__pyx_tuple__59); - __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_make_dirs, 176, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":203 - * # Tests: test_SYSTEM.py :: test_file_exists - * #------------------------------------------------------------------------------ - * def file_exists(filepath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - */ - __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__61); - __Pyx_GIVEREF(__pyx_tuple__61); - __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_file_exists, 203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":220 - * # test_sys_is_file_when_dir - * #------------------------------------------------------------------------------ - * def is_file(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.isfile(filepath) - */ - __pyx_tuple__63 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__63); - __Pyx_GIVEREF(__pyx_tuple__63); - __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_is_file, 220, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":233 - * # Tests: test_SYSTEM.py :: test_dir_exists, test_dir_exists_missing_dir - * #------------------------------------------------------------------------------ - * def dir_exists(dirpath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - */ - __pyx_tuple__65 = PyTuple_Pack(2, __pyx_n_s_dirpath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__65); - __Pyx_GIVEREF(__pyx_tuple__65); - __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_dir_exists, 233, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":250 - * # test_sys_dir_is_dir_when_missing - * #------------------------------------------------------------------------------ - * def is_dir(dirpath): # <<<<<<<<<<<<<< - * try: - * return os.path.isdir(dirpath) - */ - __pyx_tuple__67 = PyTuple_Pack(2, __pyx_n_s_dirpath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__67); - __Pyx_GIVEREF(__pyx_tuple__67); - __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_is_dir, 250, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":269 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_size - * #------------------------------------------------------------------------------ - * def file_size(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.getsize(filepath) - */ - __pyx_tuple__69 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__69); - __Pyx_GIVEREF(__pyx_tuple__69); - __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_file_size, 269, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":282 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_mod - * #------------------------------------------------------------------------------ - * def file_mod_time(filepath): # <<<<<<<<<<<<<< - * try: - * import time - */ - __pyx_tuple__71 = PyTuple_Pack(3, __pyx_n_s_filepath, __pyx_n_s_time, __pyx_n_s_e); if (unlikely(!__pyx_tuple__71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__71); - __Pyx_GIVEREF(__pyx_tuple__71); - __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_file_mod_time, 282, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":302 - * # Tests: test_SYSTEM.py :: test_sys_list_all_files, test_sys_list_all_files_emptydir - * #------------------------------------------------------------------------------ - * def list_all_files(dir): # <<<<<<<<<<<<<< - * try: - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - */ - __pyx_tuple__73 = PyTuple_Pack(4, __pyx_n_s_dir, __pyx_n_s_filenames, __pyx_n_s_e, __pyx_n_s_name); if (unlikely(!__pyx_tuple__73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__73); - __Pyx_GIVEREF(__pyx_tuple__73); - __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_list_all_files, 302, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":318 - * # Tests: test_SYSTEM.py :: test_sys_list_filter_files, test_sys_list_filter_files_nomatch - * #------------------------------------------------------------------------------ - * def list_filter_files(extension_filter, dir): # <<<<<<<<<<<<<< - * try: - * if not extension_filter.startswith("."): - */ - __pyx_tuple__75 = PyTuple_Pack(5, __pyx_n_s_extension_filter, __pyx_n_s_dir, __pyx_n_s_filenames, __pyx_n_s_e, __pyx_n_s_name); if (unlikely(!__pyx_tuple__75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__75); - __Pyx_GIVEREF(__pyx_tuple__75); - __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_list_filter_files, 318, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":338 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def list_all_files_cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return list_all_files(dir) - */ - __pyx_tuple__77 = PyTuple_Pack(2, __pyx_n_s_dir, __pyx_n_s_e); if (unlikely(!__pyx_tuple__77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__77); - __Pyx_GIVEREF(__pyx_tuple__77); - __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_list_all_files_cwd, 338, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":355 - * #------------------------------------------------------------------------------ - * @currentdir_lastparam - * def list_filter_files_cwd(extension_filter, current_dir=""): # <<<<<<<<<<<<<< - * try: - * return list_filter_files(extension_filter, current_dir) - */ - __pyx_tuple__79 = PyTuple_Pack(3, __pyx_n_s_extension_filter, __pyx_n_s_current_dir, __pyx_n_s_e); if (unlikely(!__pyx_tuple__79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__79); - __Pyx_GIVEREF(__pyx_tuple__79); - __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_list_filter_files_cwd, 355, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":373 - * # Tests: test_SYSTEM.py :: test_sys_match_files, test_sys_match_files_fullpath - * #------------------------------------------------------------------------------ - * def list_match_files(match_pattern, full_path = False): # <<<<<<<<<<<<<< - * try: - * from glob import glob - */ - __pyx_tuple__81 = PyTuple_Pack(8, __pyx_n_s_match_pattern, __pyx_n_s_full_path, __pyx_n_s_glob, __pyx_n_s_filenames, __pyx_n_s_filenames_fullpath, __pyx_n_s_cwd, __pyx_n_s_name, __pyx_n_s_e); if (unlikely(!__pyx_tuple__81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__81); - __Pyx_GIVEREF(__pyx_tuple__81); - __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_list_match_files, 373, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":401 - * # return boolean indicating whether the path is a symbolic link - * #------------------------------------------------------------------------------ - * def is_link(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.islink(filepath) - */ - __pyx_tuple__83 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__83); - __Pyx_GIVEREF(__pyx_tuple__83); - __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_is_link, 401, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":413 - * # return the real file path pointed to by a symbolic link - * #------------------------------------------------------------------------------ - * def real_path(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.realpath(filepath) - */ - __pyx_tuple__85 = PyTuple_Pack(2, __pyx_n_s_filepath, __pyx_n_s_e); if (unlikely(!__pyx_tuple__85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__85); - __Pyx_GIVEREF(__pyx_tuple__85); - __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_real_path, 413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":431 - * # print to std output stream - * #------------------------------------------------------------------------------ - * def stdout(text): # <<<<<<<<<<<<<< - * try: - * print(text) - */ - __pyx_tuple__87 = PyTuple_Pack(2, __pyx_n_s_text, __pyx_n_s_e); if (unlikely(!__pyx_tuple__87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__87); - __Pyx_GIVEREF(__pyx_tuple__87); - __pyx_codeobj__88 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__87, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_stdout, 431, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":443 - * # print to std output stream without a newline - * #------------------------------------------------------------------------------ - * def stdout_xnl(text): # <<<<<<<<<<<<<< - * try: - * sys.stdout.write(text) - */ - __pyx_tuple__89 = PyTuple_Pack(2, __pyx_n_s_text, __pyx_n_s_e); if (unlikely(!__pyx_tuple__89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__89); - __Pyx_GIVEREF(__pyx_tuple__89); - __pyx_codeobj__90 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__89, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_stdout_xnl, 443, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":455 - * # print items in an iterable to the standard output stream with newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - __pyx_tuple__91 = PyTuple_Pack(3, __pyx_n_s_iter, __pyx_n_s_x, __pyx_n_s_e); if (unlikely(!__pyx_tuple__91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__91); - __Pyx_GIVEREF(__pyx_tuple__91); - __pyx_codeobj__92 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__91, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_stdout_iter, 455, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":469 - * # print items in an iterable to the standard output stream without newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter_xnl(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - __pyx_tuple__93 = PyTuple_Pack(3, __pyx_n_s_iter, __pyx_n_s_x, __pyx_n_s_e); if (unlikely(!__pyx_tuple__93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__93); - __Pyx_GIVEREF(__pyx_tuple__93); - __pyx_codeobj__94 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__93, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_stdout_iter_xnl, 469, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":483 - * # optionally (i.e. if exit = nonzero integer) permits exit from application with developer defined exit code - * #------------------------------------------------------------------------------ - * def stderr(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text + "\n") - */ - __pyx_tuple__95 = PyTuple_Pack(3, __pyx_n_s_text, __pyx_n_s_exit, __pyx_n_s_e); if (unlikely(!__pyx_tuple__95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__95); - __Pyx_GIVEREF(__pyx_tuple__95); - __pyx_codeobj__96 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_stderr, 483, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":497 - * # print to the standard error stream without a newline character after the `text` string - * #------------------------------------------------------------------------------ - * def stderr_xnl(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text) - */ - __pyx_tuple__97 = PyTuple_Pack(3, __pyx_n_s_text, __pyx_n_s_exit, __pyx_n_s_e); if (unlikely(!__pyx_tuple__97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__97); - __Pyx_GIVEREF(__pyx_tuple__97); - __pyx_codeobj__98 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__97, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_stderr_xnl, 497, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__98)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":519 - * # Tests: test_SYSTEM.py :: test_sys_exit_with_code - * #------------------------------------------------------------------------------ - * def exit_with_status(exit=0): # <<<<<<<<<<<<<< - * raise SystemExit(exit) - * - */ - __pyx_tuple__99 = PyTuple_Pack(1, __pyx_n_s_exit); if (unlikely(!__pyx_tuple__99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__99); - __Pyx_GIVEREF(__pyx_tuple__99); - __pyx_codeobj__100 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__99, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_exit_with_status, 519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":527 - * # Tests: test_SYSTEM.py :: test_sys_exit_failure - * #------------------------------------------------------------------------------ - * def exit_fail(): # <<<<<<<<<<<<<< - * raise SystemExit(1) - * - */ - __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_exit_fail, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/system.pyx":535 - * # Tests: test_SYSTEM.py :: test_sys_exit_success - * #------------------------------------------------------------------------------ - * def exit_success(): # <<<<<<<<<<<<<< - * raise SystemExit(0) - * - */ - __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_exit_success, 535, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initsystem(void); /*proto*/ -PyMODINIT_FUNC initsystem(void) -#else -PyMODINIT_FUNC PyInit_system(void); /*proto*/ -PyMODINIT_FUNC PyInit_system(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_system(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("system"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__system) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.system")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.system", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile = &__pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct__currentdir_to_basefile; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam = &__pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_1_currentdir_firstparam; - if (PyType_Ready(&__pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam.tp_print = 0; - __pyx_ptype_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam = &__pyx_type_3lib_5Naked_8toolshed_1c_6system___pyx_scope_struct_2_currentdir_lastparam; - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/system.pyx":5 - * # cython: profile=False - * - * import sys # <<<<<<<<<<<<<< - * import os - * from Naked.settings import debug as DEBUG_FLAG - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":6 - * - * import sys - * import os # <<<<<<<<<<<<<< - * from Naked.settings import debug as DEBUG_FLAG - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":7 - * import sys - * import os - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":20 - * # Tests: test_SYSTEM.py :: test_sys_filename - * #------------------------------------------------------------------------------ - * def filename(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.basename(filepath) - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_1filename, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_filename, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":33 - * # Tests: test_SYSTEM.py :: test_sys_file_extension - * #------------------------------------------------------------------------------ - * def file_extension(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.splitext(filepath)[1] - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_3file_extension, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_extension, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":47 - * # Tests: test_SYSTEM.py :: test_sys_dir_path - * #------------------------------------------------------------------------------ - * def directory(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.dirname(filepath) - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_5directory, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_directory, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":60 - * # Tests: test_SYSTEM.py :: test_sys_make_filepath - * #------------------------------------------------------------------------------ - * def make_path(*path_list): # <<<<<<<<<<<<<< - * try: - * return os.path.join(*path_list) - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_7make_path, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_path, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":74 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile - * #------------------------------------------------------------------------------ - * def currentdir_to_basefile(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_9currentdir_to_basefile, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_currentdir_to_basefile, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":94 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg - * #------------------------------------------------------------------------------ - * def currentdir_firstparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_11currentdir_firstparam, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_currentdir_firstparam, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":116 - * # Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg - * #------------------------------------------------------------------------------ - * def currentdir_lastparam(func): # <<<<<<<<<<<<<< - * try: - * from functools import wraps - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_13currentdir_lastparam, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_currentdir_lastparam, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":138 - * # Tests: test_SYSTEM.py :: test_sys_full_path_to_file - * #------------------------------------------------------------------------------ - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function # <<<<<<<<<<<<<< - * def fullpath(file_name): - * try: - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_currentdir_to_basefile); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/system.pyx":139 - * #------------------------------------------------------------------------------ - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function - * def fullpath(file_name): # <<<<<<<<<<<<<< - * try: - * return file_name - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_15fullpath, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/system.pyx":138 - * # Tests: test_SYSTEM.py :: test_sys_full_path_to_file - * #------------------------------------------------------------------------------ - * @currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function # <<<<<<<<<<<<<< - * def fullpath(file_name): - * try: - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_fullpath, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":155 - * # Tests: test_SYSTEM.py :: test_sys_cwd_path - * #------------------------------------------------------------------------------ - * @currentdir_firstparam # <<<<<<<<<<<<<< - * def cwd(dir=""): - * try: - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_currentdir_firstparam); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/system.pyx":156 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return dir - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_17cwd, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/system.pyx":155 - * # Tests: test_SYSTEM.py :: test_sys_cwd_path - * #------------------------------------------------------------------------------ - * @currentdir_firstparam # <<<<<<<<<<<<<< - * def cwd(dir=""): - * try: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_cwd, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":176 - * # DOES NOT already exist - * #------------------------------------------------------------------------------ - * def make_dirs(dirpath): # <<<<<<<<<<<<<< - * try: - * import os - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_19make_dirs, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_make_dirs, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":203 - * # Tests: test_SYSTEM.py :: test_file_exists - * #------------------------------------------------------------------------------ - * def file_exists(filepath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_21file_exists, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_exists, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":220 - * # test_sys_is_file_when_dir - * #------------------------------------------------------------------------------ - * def is_file(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.isfile(filepath) - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_23is_file, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_file, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":233 - * # Tests: test_SYSTEM.py :: test_dir_exists, test_dir_exists_missing_dir - * #------------------------------------------------------------------------------ - * def dir_exists(dirpath): # <<<<<<<<<<<<<< - * try: - * if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_25dir_exists, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_dir_exists, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":250 - * # test_sys_dir_is_dir_when_missing - * #------------------------------------------------------------------------------ - * def is_dir(dirpath): # <<<<<<<<<<<<<< - * try: - * return os.path.isdir(dirpath) - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_27is_dir, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_dir, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":269 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_size - * #------------------------------------------------------------------------------ - * def file_size(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.getsize(filepath) - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_29file_size, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":282 - * # Tests: test_SYSTEM.py :: test_sys_meta_file_mod - * #------------------------------------------------------------------------------ - * def file_mod_time(filepath): # <<<<<<<<<<<<<< - * try: - * import time - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_31file_mod_time, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_mod_time, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":302 - * # Tests: test_SYSTEM.py :: test_sys_list_all_files, test_sys_list_all_files_emptydir - * #------------------------------------------------------------------------------ - * def list_all_files(dir): # <<<<<<<<<<<<<< - * try: - * filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_33list_all_files, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_all_files, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":318 - * # Tests: test_SYSTEM.py :: test_sys_list_filter_files, test_sys_list_filter_files_nomatch - * #------------------------------------------------------------------------------ - * def list_filter_files(extension_filter, dir): # <<<<<<<<<<<<<< - * try: - * if not extension_filter.startswith("."): - */ - __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_35list_filter_files, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_filter_files, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":337 - * # Tests: test_SYSTEM.py :: test_sys_list_all_files_cwd - * #------------------------------------------------------------------------------ - * @currentdir_firstparam # <<<<<<<<<<<<<< - * def list_all_files_cwd(dir=""): - * try: - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_currentdir_firstparam); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/system.pyx":338 - * #------------------------------------------------------------------------------ - * @currentdir_firstparam - * def list_all_files_cwd(dir=""): # <<<<<<<<<<<<<< - * try: - * return list_all_files(dir) - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_37list_all_files_cwd, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/system.pyx":337 - * # Tests: test_SYSTEM.py :: test_sys_list_all_files_cwd - * #------------------------------------------------------------------------------ - * @currentdir_firstparam # <<<<<<<<<<<<<< - * def list_all_files_cwd(dir=""): - * try: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_all_files_cwd, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":354 - * # Tests: test_SYSTEM.py :: test_sys_filter_files_cwd, test_sys_filter_files_cwd_nomatch - * #------------------------------------------------------------------------------ - * @currentdir_lastparam # <<<<<<<<<<<<<< - * def list_filter_files_cwd(extension_filter, current_dir=""): - * try: - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_currentdir_lastparam); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/system.pyx":355 - * #------------------------------------------------------------------------------ - * @currentdir_lastparam - * def list_filter_files_cwd(extension_filter, current_dir=""): # <<<<<<<<<<<<<< - * try: - * return list_filter_files(extension_filter, current_dir) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_39list_filter_files_cwd, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/system.pyx":354 - * # Tests: test_SYSTEM.py :: test_sys_filter_files_cwd, test_sys_filter_files_cwd_nomatch - * #------------------------------------------------------------------------------ - * @currentdir_lastparam # <<<<<<<<<<<<<< - * def list_filter_files_cwd(extension_filter, current_dir=""): - * try: - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_filter_files_cwd, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":373 - * # Tests: test_SYSTEM.py :: test_sys_match_files, test_sys_match_files_fullpath - * #------------------------------------------------------------------------------ - * def list_match_files(match_pattern, full_path = False): # <<<<<<<<<<<<<< - * try: - * from glob import glob - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_41list_match_files, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_match_files, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":401 - * # return boolean indicating whether the path is a symbolic link - * #------------------------------------------------------------------------------ - * def is_link(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.islink(filepath) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_43is_link, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_link, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":413 - * # return the real file path pointed to by a symbolic link - * #------------------------------------------------------------------------------ - * def real_path(filepath): # <<<<<<<<<<<<<< - * try: - * return os.path.realpath(filepath) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_45real_path, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_real_path, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":431 - * # print to std output stream - * #------------------------------------------------------------------------------ - * def stdout(text): # <<<<<<<<<<<<<< - * try: - * print(text) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_47stdout, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stdout, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":443 - * # print to std output stream without a newline - * #------------------------------------------------------------------------------ - * def stdout_xnl(text): # <<<<<<<<<<<<<< - * try: - * sys.stdout.write(text) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_49stdout_xnl, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stdout_xnl, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":455 - * # print items in an iterable to the standard output stream with newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_51stdout_iter, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stdout_iter, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":469 - * # print items in an iterable to the standard output stream without newlines after each string - * #------------------------------------------------------------------------------ - * def stdout_iter_xnl(iter): # <<<<<<<<<<<<<< - * try: - * for x in iter: - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_53stdout_iter_xnl, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stdout_iter_xnl, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":483 - * # optionally (i.e. if exit = nonzero integer) permits exit from application with developer defined exit code - * #------------------------------------------------------------------------------ - * def stderr(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text + "\n") - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_55stderr, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stderr, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 483; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":497 - * # print to the standard error stream without a newline character after the `text` string - * #------------------------------------------------------------------------------ - * def stderr_xnl(text, exit=0): # <<<<<<<<<<<<<< - * try: - * sys.stderr.write(text) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_57stderr_xnl, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_stderr_xnl, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":519 - * # Tests: test_SYSTEM.py :: test_sys_exit_with_code - * #------------------------------------------------------------------------------ - * def exit_with_status(exit=0): # <<<<<<<<<<<<<< - * raise SystemExit(exit) - * - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_59exit_with_status, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_exit_with_status, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":527 - * # Tests: test_SYSTEM.py :: test_sys_exit_failure - * #------------------------------------------------------------------------------ - * def exit_fail(): # <<<<<<<<<<<<<< - * raise SystemExit(1) - * - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_61exit_fail, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_exit_fail, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":535 - * # Tests: test_SYSTEM.py :: test_sys_exit_success - * #------------------------------------------------------------------------------ - * def exit_success(): # <<<<<<<<<<<<<< - * raise SystemExit(0) - * - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_6system_63exit_success, NULL, __pyx_n_s_lib_Naked_toolshed_c_system); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_exit_success, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/system.pyx":540 - * - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - * # #------------------------------------------------------------------------------ - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_4) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/system.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.system", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.system"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -static CYTHON_INLINE int __Pyx_CheckKeywordStrings( - PyObject *kwdict, - const char* function_name, - int kw_allowed) -{ - PyObject* key = 0; - Py_ssize_t pos = 0; -#if CPYTHON_COMPILING_IN_PYPY - if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) - goto invalid_keyword; - return 1; -#else - while (PyDict_Next(kwdict, &pos, &key, 0)) { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) - #endif - if (unlikely(!PyUnicode_Check(key))) - goto invalid_keyword_type; - } - if ((!kw_allowed) && unlikely(key)) - goto invalid_keyword; - return 1; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - return 0; -#endif -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif - return 0; -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) { - PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname); -} - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) { - PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname); -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static PyObject *__Pyx_GetStdout(void) { - PyObject *f = PySys_GetObject((char *)"stdout"); - if (!f) { - PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout"); - } - return f; -} -static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) { - int i; - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) { - PyObject* v; - if (PyFile_SoftSpace(f, 1)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - v = PyTuple_GET_ITEM(arg_tuple, i); - if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0) - goto error; - if (PyString_Check(v)) { - char *s = PyString_AsString(v); - Py_ssize_t len = PyString_Size(v); - if (len > 0) { - switch (s[len-1]) { - case ' ': break; - case '\f': case '\r': case '\n': case '\t': case '\v': - PyFile_SoftSpace(f, 0); - break; - default: break; - } - } - } - } - if (newline) { - if (PyFile_WriteString("\n", f) < 0) - goto error; - PyFile_SoftSpace(f, 0); - } - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; -} -#else /* Python 3 has a print function */ -static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) { - PyObject* kwargs = 0; - PyObject* result = 0; - PyObject* end_string; - if (unlikely(!__pyx_print)) { - __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print); - if (!__pyx_print) - return -1; - } - if (stream) { - kwargs = PyDict_New(); - if (unlikely(!kwargs)) - return -1; - if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0)) - goto bad; - if (!newline) { - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - goto bad; - if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - goto bad; - } - Py_DECREF(end_string); - } - } else if (!newline) { - if (unlikely(!__pyx_print_kwargs)) { - __pyx_print_kwargs = PyDict_New(); - if (unlikely(!__pyx_print_kwargs)) - return -1; - end_string = PyUnicode_FromStringAndSize(" ", 1); - if (unlikely(!end_string)) - return -1; - if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) { - Py_DECREF(end_string); - return -1; - } - Py_DECREF(end_string); - } - kwargs = __pyx_print_kwargs; - } - result = PyObject_Call(__pyx_print, arg_tuple, kwargs); - if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs)) - Py_DECREF(kwargs); - if (!result) - return -1; - Py_DECREF(result); - return 0; -bad: - if (kwargs != __pyx_print_kwargs) - Py_XDECREF(kwargs); - return -1; -} -#endif - -#if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3 -static int __Pyx_PrintOne(PyObject* f, PyObject *o) { - if (!f) { - if (!(f = __Pyx_GetStdout())) - return -1; - } - Py_INCREF(f); - if (PyFile_SoftSpace(f, 0)) { - if (PyFile_WriteString(" ", f) < 0) - goto error; - } - if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0) - goto error; - if (PyFile_WriteString("\n", f) < 0) - goto error; - Py_DECREF(f); - return 0; -error: - Py_DECREF(f); - return -1; - /* the line below is just to avoid C compiler - * warnings about unused functions */ - return __Pyx_Print(f, NULL, 0); -} -#else /* Python 3 has a print function */ -static int __Pyx_PrintOne(PyObject* stream, PyObject *o) { - int res; - PyObject* arg_tuple = PyTuple_Pack(1, o); - if (unlikely(!arg_tuple)) - return -1; - res = __Pyx_Print(stream, arg_tuple, 1); - Py_DECREF(arg_tuple); - return res; -} -#endif - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/system.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/system.pyx deleted file mode 100644 index 3c11a5d..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/system.pyx +++ /dev/null @@ -1,554 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -import sys -import os -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# -# FILE & DIRECTORY PATHS -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ filename function ] (string) -# returns file name from a file path (including the file extension) -# Tests: test_SYSTEM.py :: test_sys_filename -#------------------------------------------------------------------------------ -def filename(filepath): - try: - return os.path.basename(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ file_extension function ] (string) -# returns file extension from a filepath -# Tests: test_SYSTEM.py :: test_sys_file_extension -#------------------------------------------------------------------------------ -def file_extension(filepath): - try: - return os.path.splitext(filepath)[1] - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ directory function ] (string) -# returns directory path to the filepath -# Tests: test_SYSTEM.py :: test_sys_dir_path -#------------------------------------------------------------------------------ -def directory(filepath): - try: - return os.path.dirname(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ make_path function ] (string) -# returns OS independent file path from tuple of path components -# Tests: test_SYSTEM.py :: test_sys_make_filepath -#------------------------------------------------------------------------------ -def make_path(*path_list): - try: - return os.path.join(*path_list) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ currentdir_to_basefile decorator function ] (returns decorated original function) -# concatenates the absolute working directory path to the basename of file in the first parameter of the undecorated function -# Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile -#------------------------------------------------------------------------------ -def currentdir_to_basefile(func): - try: - from functools import wraps - - @wraps(func) - def wrapper(file_name, *args, **kwargs): - current_directory = os.getcwd() #get current working directory path - full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument - return wrapper - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ currentdir_firstparam decorator function ] (returns decorated original function) -# adds the current working directory as the first function parameter of the decorated function -# Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg -#------------------------------------------------------------------------------ -def currentdir_firstparam(func): - try: - from functools import wraps - - @wraps(func) - def wrapper(dir="", *args, **kwargs): - current_directory = os.getcwd() - return func(current_directory, *args, **kwargs) - return wrapper - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ currentdir_lastargument decorator function ] (returns decorated original function) -# adds the current working directory as the last function parameter of the decorated function -# Note: you cannot use other named arguments in the original function with this decorator -# Note: the current directory argument in the last position must be named current_dir -# Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg -#------------------------------------------------------------------------------ -def currentdir_lastparam(func): - try: - from functools import wraps - - @wraps(func) - def wrapper(*args, **kwargs): - the_cwd = os.getcwd() - return func(*args, current_dir=the_cwd) - return wrapper - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ fullpath function ] (string) -# returns the absolute path to a file that is in the current working directory -# file_name = the basename of the file in the current working directory -# Example usage where test.txt is in working directory: -# filepath = fullpath("test.txt") -# Tests: test_SYSTEM.py :: test_sys_full_path_to_file -#------------------------------------------------------------------------------ -@currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function -def fullpath(file_name): - try: - return file_name - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return absolute path to the file with the fullpath() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ cwd function ] (string) -# returns the current working directory path -# does not need to be called with an argument, the decorator assigns it -# Example usage: -# current_dir = cwd() -# Tests: test_SYSTEM.py :: test_sys_cwd_path -#------------------------------------------------------------------------------ -@currentdir_firstparam -def cwd(dir=""): - try: - return dir - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return the current working directory with the cwd() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# DIRECTORY WRITES -# -#------------------------------------------------------------------------------ - -## TODO: add tests -#------------------------------------------------------------------------------ -# [ make_dirs function ] (--none--) -# make a new directory path (recursive if multiple levels of depth) if it -# DOES NOT already exist -#------------------------------------------------------------------------------ -def make_dirs(dirpath): - try: - import os - import errno - os.makedirs(dirpath) - return True - except OSError as ose: - if ose.errno != errno.EEXIST: # directory already exists - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") - raise ose - else: - return False - except Exception as e: - raise e - -#------------------------------------------------------------------------------ -# -# FILE & DIRECTORY TESTING -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ file_exists function ] (boolean) -# return boolean for existence of file in specified path -# Tests: test_SYSTEM.py :: test_file_exists -#------------------------------------------------------------------------------ -def file_exists(filepath): - try: - if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ is_file function ] (boolean) -# returns boolean for determination of whether filepath is a file -# Tests: test_SYSTEM.py :: test_sys_is_file, test_sys_is_file_missing_file, -# test_sys_is_file_when_dir -#------------------------------------------------------------------------------ -def is_file(filepath): - try: - return os.path.isfile(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ dir_exists function ] (boolean) -# return boolean for existence of directory in specified path -# Tests: test_SYSTEM.py :: test_dir_exists, test_dir_exists_missing_dir -#------------------------------------------------------------------------------ -def dir_exists(dirpath): - try: - if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ is_dir function ] (boolean) -# returns boolean for determination of whether dirpath is a directory -# Tests: test_SYSTEM.py :: test_sys_dir_is_dir, test_sys_dir_is_dir_when_file, -# test_sys_dir_is_dir_when_missing -#------------------------------------------------------------------------------ -def is_dir(dirpath): - try: - return os.path.isdir(dirpath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# FILE METADATA -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ filesize function ] (int) -# return file size in bytes -# Tests: test_SYSTEM.py :: test_sys_meta_file_size -#------------------------------------------------------------------------------ -def file_size(filepath): - try: - return os.path.getsize(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ file_mod_time function ] (string) -# return the last file modification date/time -# Tests: test_SYSTEM.py :: test_sys_meta_file_mod -#------------------------------------------------------------------------------ -def file_mod_time(filepath): - try: - import time - return time.ctime(os.path.getmtime(filepath)) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# FILE LISTINGS -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ list_all_files function ] (list) -# returns a list of all files in developer specified directory -# Tests: test_SYSTEM.py :: test_sys_list_all_files, test_sys_list_all_files_emptydir -#------------------------------------------------------------------------------ -def list_all_files(dir): - try: - filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - return filenames - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ list_filter_files function ] (list) -# returns a list of files filtered by developer defined file extension in developer defined directory -# Usage example: -# filenames = list_filter_files("py", "tests") -# Tests: test_SYSTEM.py :: test_sys_list_filter_files, test_sys_list_filter_files_nomatch -#------------------------------------------------------------------------------ -def list_filter_files(extension_filter, dir): - try: - if not extension_filter.startswith("."): - extension_filter = "." + extension_filter - filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - return filenames - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ list_all_files_cwd function ] (list) -# returns a list of all files in the current working directory -# Note: does not require argument, the decorator assigns the cwd -# Usage example: -# file_list = list_all_files_cwd() -# Tests: test_SYSTEM.py :: test_sys_list_all_files_cwd -#------------------------------------------------------------------------------ -@currentdir_firstparam -def list_all_files_cwd(dir=""): - try: - return list_all_files(dir) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ list_filter_files_cwd function ] (list) -# returns a list of all files in the current working directory filtered by developer specified file extension -# Note: do not specify the second argument, decorator assigns it -# Usage example: -# file_list = list_filter_files_cwd(".py") -# Tests: test_SYSTEM.py :: test_sys_filter_files_cwd, test_sys_filter_files_cwd_nomatch -#------------------------------------------------------------------------------ -@currentdir_lastparam -def list_filter_files_cwd(extension_filter, current_dir=""): - try: - return list_filter_files(extension_filter, current_dir) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ list_match_files function ] (list) -# returns a list of all files that match the developer specified wildcard match pattern -# can optionally specify return of full path to the files (rather than relative path from cwd) by setting full_path to True -# Usage examples: -# file_list = list_match_files("*.py") -# file_list_fullpath = list_match_files("*.py", True) -# Tests: test_SYSTEM.py :: test_sys_match_files, test_sys_match_files_fullpath -#------------------------------------------------------------------------------ -def list_match_files(match_pattern, full_path = False): - try: - from glob import glob - filenames = glob(match_pattern) - if full_path: - filenames_fullpath = [] - cwd = os.getcwd() - for name in filenames: - name = os.path.join(cwd, name) #make the full path to the file - filenames_fullpath.append(name) #add to the new list - return filenames_fullpath #then return that list - else: - return filenames - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# SYMBOLIC LINK TESTING -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ is_link function ] (boolean) -# return boolean indicating whether the path is a symbolic link -#------------------------------------------------------------------------------ -def is_link(filepath): - try: - return os.path.islink(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ real_path function ] (string) -# return the real file path pointed to by a symbolic link -#------------------------------------------------------------------------------ -def real_path(filepath): - try: - return os.path.realpath(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# DATA STREAMS -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ stdout function ] -# print to std output stream -#------------------------------------------------------------------------------ -def stdout(text): - try: - print(text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stdout_xnl function ] -# print to std output stream without a newline -#------------------------------------------------------------------------------ -def stdout_xnl(text): - try: - sys.stdout.write(text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stdout_iter function ] -# print items in an iterable to the standard output stream with newlines after each string -#------------------------------------------------------------------------------ -def stdout_iter(iter): - try: - for x in iter: - stdout(x) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ stdout_iter_xnl function ] -# print items in an iterable to the standard output stream without newlines after each string -#------------------------------------------------------------------------------ -def stdout_iter_xnl(iter): - try: - for x in iter: - stdout_xnl(x) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stderr function ] -# print to std error stream -# optionally (i.e. if exit = nonzero integer) permits exit from application with developer defined exit code -#------------------------------------------------------------------------------ -def stderr(text, exit=0): - try: - sys.stderr.write(text + "\n") - if exit: - raise SystemExit(exit) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stderr_xnl function ] -# print to the standard error stream without a newline character after the `text` string -#------------------------------------------------------------------------------ -def stderr_xnl(text, exit=0): - try: - sys.stderr.write(text) - if exit: - raise SystemExit(exit) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# APPLICATION CONTROL -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ exit_with_status function ] -# application exit with developer specified exit status code (default = 0) -# use an exit status integer argument -# Tests: test_SYSTEM.py :: test_sys_exit_with_code -#------------------------------------------------------------------------------ -def exit_with_status(exit=0): - raise SystemExit(exit) - -#------------------------------------------------------------------------------ -# [ exit_fail function ] -# application exit with status code 1 -# Tests: test_SYSTEM.py :: test_sys_exit_failure -#------------------------------------------------------------------------------ -def exit_fail(): - raise SystemExit(1) - -#------------------------------------------------------------------------------ -# [ exit_success function] -# application exit with status code 0 -# Tests: test_SYSTEM.py :: test_sys_exit_success -#------------------------------------------------------------------------------ -def exit_success(): - raise SystemExit(0) - - - -if __name__ == '__main__': - pass - # #------------------------------------------------------------------------------ - # # Standard Output Tests - # #------------------------------------------------------------------------------ - # stdout("This is a test") - # for x in range(10): - # stdout_xnl(str(x) + " ") - # list_ten = ['10% ', '20% ', '30% ', '40% ', '50% ', '60% ', '70% ', '80% ', '90% ', '100%'] - # stdout_iter(list_ten) - # #------------------------------------------------------------------------------ - # # Standard Error Tests - # #------------------------------------------------------------------------------ - # stderr("This is a test") - # stderr("This is a test", 1) #exit with status code 1 diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/types.c b/venv/lib/python3.6/site-packages/Naked/toolshed/c/types.c deleted file mode 100644 index 2c314d3..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/types.c +++ /dev/null @@ -1,24613 +0,0 @@ -/* Generated by Cython 0.20.1 on Sun Mar 16 22:58:16 2014 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02040000 - #error Cython requires Python 2.4+. -#else -#define CYTHON_ABI "0_20_1" -#include /* For offsetof */ -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY -#define Py_OptimizeFlag 0 -#endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PY_FORMAT_SIZE_T "" - #define CYTHON_FORMAT_SSIZE_T "" - #define PyInt_FromSsize_t(z) PyInt_FromLong(z) - #define PyInt_AsSsize_t(o) __Pyx_PyInt_As_int(o) - #define PyNumber_Index(o) ((PyNumber_Check(o) && !PyFloat_Check(o)) ? PyNumber_Int(o) : \ - (PyErr_Format(PyExc_TypeError, \ - "expected index value, got %.200s", Py_TYPE(o)->tp_name), \ - (PyObject*)0)) - #define __Pyx_PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) && \ - !PyComplex_Check(o)) - #define PyIndex_Check __Pyx_PyIndex_Check - #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message) - #define __PYX_BUILD_PY_SSIZE_T "i" -#else - #define __PYX_BUILD_PY_SSIZE_T "n" - #define CYTHON_FORMAT_SSIZE_T "z" - #define __Pyx_PyIndex_Check PyIndex_Check -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt) - #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type) - #define Py_SIZE(ob) (((PyVarObject*)(ob))->ob_size) - #define PyVarObject_HEAD_INIT(type, size) \ - PyObject_HEAD_INIT(type) size, - #define PyType_Modified(t) - typedef struct { - void *buf; - PyObject *obj; - Py_ssize_t len; - Py_ssize_t itemsize; - int readonly; - int ndim; - char *format; - Py_ssize_t *shape; - Py_ssize_t *strides; - Py_ssize_t *suboffsets; - void *internal; - } Py_buffer; - #define PyBUF_SIMPLE 0 - #define PyBUF_WRITABLE 0x0001 - #define PyBUF_FORMAT 0x0004 - #define PyBUF_ND 0x0008 - #define PyBUF_STRIDES (0x0010 | PyBUF_ND) - #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES) - #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES) - #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES) - #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES) - #define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_FORMAT | PyBUF_WRITABLE) - #define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_FORMAT | PyBUF_WRITABLE) - typedef int (*getbufferproc)(PyObject *, Py_buffer *, int); - typedef void (*releasebufferproc)(PyObject *, Py_buffer *); -#endif -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyUnicode_FromString(s) PyUnicode_Decode(s, strlen(s), "UTF-8", "strict") -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3) - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x02060000 - #define Py_TPFLAGS_HAVE_VERSION_TAG 0 -#endif -#if PY_VERSION_HEX < 0x02060000 && !defined(Py_TPFLAGS_IS_ABSTRACT) - #define Py_TPFLAGS_IS_ABSTRACT 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PyBytesObject PyStringObject - #define PyBytes_Type PyString_Type - #define PyBytes_Check PyString_Check - #define PyBytes_CheckExact PyString_CheckExact - #define PyBytes_FromString PyString_FromString - #define PyBytes_FromStringAndSize PyString_FromStringAndSize - #define PyBytes_FromFormat PyString_FromFormat - #define PyBytes_DecodeEscape PyString_DecodeEscape - #define PyBytes_AsString PyString_AsString - #define PyBytes_AsStringAndSize PyString_AsStringAndSize - #define PyBytes_Size PyString_Size - #define PyBytes_AS_STRING PyString_AS_STRING - #define PyBytes_GET_SIZE PyString_GET_SIZE - #define PyBytes_Repr PyString_Repr - #define PyBytes_Concat PyString_Concat - #define PyBytes_ConcatAndDel PyString_ConcatAndDel -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj) || \ - PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if PY_VERSION_HEX < 0x02060000 - #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) - #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) - #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) - #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) -#else - #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) - #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) - #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ - (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ - (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ - (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),((char *)(n))) -#else - #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),(n)) - #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a)) - #define __Pyx_DelAttrString(o,n) PyObject_DelAttrString((o),(n)) -#endif -#if PY_VERSION_HEX < 0x02050000 - #define __Pyx_NAMESTR(n) ((char *)(n)) - #define __Pyx_DOCSTR(n) ((char *)(n)) -#else - #define __Pyx_NAMESTR(n) (n) - #define __Pyx_DOCSTR(n) (n) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__lib__Naked__toolshed__c__types -#define __PYX_HAVE_API__lib__Naked__toolshed__c__types -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromUString(s) __Pyx_PyObject_FromString((char*)s) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyByteArray_FromUString(s) __Pyx_PyByteArray_FromString((char*)s) -#define __Pyx_PyStr_FromUString(s) __Pyx_PyStr_FromString((char*)s) -#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return u_end - u - 1; -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - if (strcmp(PyBytes_AsString(default_encoding), "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - const char* default_encoding_c = PyBytes_AS_STRING(default_encoding); - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (ascii_chars_u == NULL) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (ascii_chars_b == NULL || strncmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - } - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys = NULL; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (sys == NULL) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - if (default_encoding == NULL) goto bad; - default_encoding_c = PyBytes_AS_STRING(default_encoding); - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(sys); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(sys); - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -#ifdef __GNUC__ - /* Test for GCC > 2.95 */ - #if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) - #else /* __GNUC__ > 2 ... */ - #define likely(x) (x) - #define unlikely(x) (x) - #endif /* __GNUC__ > 2 ... */ -#else /* __GNUC__ */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "types.pyx", -}; - -/*--- Type declarations ---*/ -struct __pyx_defaults; -typedef struct __pyx_defaults __pyx_defaults; -struct __pyx_defaults1; -typedef struct __pyx_defaults1 __pyx_defaults1; -struct __pyx_defaults2; -typedef struct __pyx_defaults2 __pyx_defaults2; -struct __pyx_defaults3; -typedef struct __pyx_defaults3 __pyx_defaults3; -struct __pyx_defaults4; -typedef struct __pyx_defaults4 __pyx_defaults4; -struct __pyx_defaults5; -typedef struct __pyx_defaults5 __pyx_defaults5; -struct __pyx_defaults6; -typedef struct __pyx_defaults6 __pyx_defaults6; -struct __pyx_defaults7; -typedef struct __pyx_defaults7 __pyx_defaults7; -struct __pyx_defaults8; -typedef struct __pyx_defaults8 __pyx_defaults8; -struct __pyx_defaults9; -typedef struct __pyx_defaults9 __pyx_defaults9; -struct __pyx_defaults10; -typedef struct __pyx_defaults10 __pyx_defaults10; -struct __pyx_defaults11; -typedef struct __pyx_defaults11 __pyx_defaults11; -struct __pyx_defaults12; -typedef struct __pyx_defaults12 __pyx_defaults12; -struct __pyx_defaults { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults1 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults2 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults3 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults4 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults5 { - PyObject *__pyx_arg_initial_iterable; - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults6 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults7 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults8 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults9 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults10 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults11 { - PyObject *__pyx_arg_attributes; -}; -struct __pyx_defaults12 { - PyObject *__pyx_arg_attributes; -}; -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); /*proto*/ - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif /* CYTHON_REFNANNY */ -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); /*proto*/ - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); /*proto*/ - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); /*proto*/ - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/ -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/ - -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); /*proto*/ - -#include - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); /*proto*/ - -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); /*proto*/ - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -static CYTHON_INLINE int __Pyx_IterFinish(void); /*proto*/ - -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); /*proto*/ - -static CYTHON_INLINE int __Pyx_PySequence_Contains(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -#if PY_VERSION_HEX < 0x02050000 -#ifndef PyAnySet_CheckExact -#define PyAnySet_CheckExact(ob) \ - ((ob)->ob_type == &PySet_Type || \ - (ob)->ob_type == &PyFrozenSet_Type) -#define PySet_New(iterable) \ - PyObject_CallFunctionObjArgs((PyObject *)&PySet_Type, (iterable), NULL) -#define Pyx_PyFrozenSet_New(iterable) \ - PyObject_CallFunctionObjArgs((PyObject *)&PyFrozenSet_Type, (iterable), NULL) -#define PySet_Size(anyset) \ - PyObject_Size((anyset)) -#define PySet_Contains(anyset, key) \ - PySequence_Contains((anyset), (key)) -#define PySet_Pop(set) \ - PyObject_CallMethod((set), (char*)"pop", NULL) -static CYTHON_INLINE int PySet_Clear(PyObject *set) { - PyObject *ret = PyObject_CallMethod(set, (char*)"clear", NULL); - if (!ret) return -1; - Py_DECREF(ret); return 0; -} -static CYTHON_INLINE int PySet_Discard(PyObject *set, PyObject *key) { - PyObject *ret = PyObject_CallMethod(set, (char*)"discard", (char*)"(O)", key); - if (!ret) return -1; - Py_DECREF(ret); return 0; -} -static CYTHON_INLINE int PySet_Add(PyObject *set, PyObject *key) { - PyObject *ret = PyObject_CallMethod(set, (char*)"add", (char*)"(O)", key); - if (!ret) return -1; - Py_DECREF(ret); return 0; -} -#endif /* PyAnySet_CheckExact (<= Py2.4) */ -#endif /* < Py2.5 */ - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /*proto*/ - -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - -#if PY_MAJOR_VERSION < 3 -#define __Pyx_PyString_Join __Pyx_PyBytes_Join -#define __Pyx_PyBaseString_Join(s, v) (PyUnicode_CheckExact(s) ? PyUnicode_Join(s, v) : __Pyx_PyBytes_Join(s, v)) -#else -#define __Pyx_PyString_Join PyUnicode_Join -#define __Pyx_PyBaseString_Join PyUnicode_Join -#endif -#if CYTHON_COMPILING_IN_CPYTHON - #if PY_MAJOR_VERSION < 3 - #define __Pyx_PyBytes_Join _PyString_Join - #else - #define __Pyx_PyBytes_Join _PyBytes_Join - #endif -#else -static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values); /*proto*/ -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - Py_SIZE(list) = len+1; - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( - PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, - PyObject** py_start, PyObject** py_stop, PyObject** py_slice, - int has_cstart, int has_cstop, int wraparound); - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -#define __Pyx_CyFunction_USED 1 -#include -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f) \ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f) \ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f) \ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g) \ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; - PyObject *func_dict; - PyObject *func_weakreflist; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; /* No-args super() class cell */ - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; /* Const defaults tuple */ - PyObject *defaults_kwdict; /* Const kwonly defaults dict */ - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; /* function annotations dict */ -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code) \ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __Pyx_CyFunction_init(void); - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); /*proto*/ -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); /*proto*/ - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); /*proto*/ - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static int __Pyx_check_binary_version(void); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); /*proto*/ - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ - - -/* Module declarations from 'lib.Naked.toolshed.c.types' */ -#define __Pyx_MODULE_NAME "lib.Naked.toolshed.c.types" -int __pyx_module_is_main_lib__Naked__toolshed__c__types = 0; - -/* Implementation of 'lib.Naked.toolshed.c.types' */ -static PyObject *__pyx_builtin_object; -static PyObject *__pyx_builtin_Exception; -static PyObject *__pyx_builtin_max; -static PyObject *__pyx_builtin_zip; -static PyObject *__pyx_builtin_min; -static PyObject *__pyx_builtin_sum; -static PyObject *__pyx_builtin_AttributeError; -static PyObject *__pyx_builtin_enumerate; -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_16__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_4_equal_type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_6_equal_attributes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_8__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_10__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_12equals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_14type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_40__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dict_obj, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_2__add__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_dict); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_4__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_dict); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_6__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_8__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_10equals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_12conditional_map_to_vals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_conditional_function, PyObject *__pyx_v_mapped_function); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_14map_to_vals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mapped_function); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_16val_xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_18max_val(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_20min_val(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_22sum_vals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_24val_count(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value_name); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_26val_count_ci(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value_name); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_28difference(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_dict); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_30intersection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_dict); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_32key_xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_34random(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_36random_sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_number_of_items); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_38xitems(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_56__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_list_obj, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_2__add__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_lists); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_4__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_list); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_6__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_8__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_10equals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_12join(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_separator); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_14postfix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_after); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_16prefix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_before); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_18surround(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_before, PyObject *__pyx_v_after); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_20max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_22min(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_24sum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_26count_duplicates(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_28remove_duplicates(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_30difference(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_list); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_32intersection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_list); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_34map_to_items(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mapped_function); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_36conditional_map_to_items(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_conditional_function, PyObject *__pyx_v_mapped_function); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_38count_ci(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_test_string); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_40random(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_42random_sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_number_of_items); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_44shuffle(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_46wildcard_match(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_wildcard); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_48multi_wildcard_match(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_wildcards); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_50xset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_52xfset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_54xtuple(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_12__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_2__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_4push(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_6pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_8pushpop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_10length(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_12__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_2__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_4push(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_6pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_8pushpop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_10length(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XQueue_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XQueue___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_initial_iterable, PyObject *__pyx_v_attributes, PyObject *__pyx_v_max_length, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_10__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_set_obj, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_2__lshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_set); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_4__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_set); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_6xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_8xfset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_10__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_set, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_4xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_6xset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_8type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_22__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_string_text, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_4type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_6concat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_strings); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_8contains(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_substring); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_10xsplit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_split_delimiter); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_12xsplit_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_split_delimiter); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_14begins(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_begin_string); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_16ends(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_end_string); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_18wildcard_match(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_wildcard); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_20unicode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_14__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_string_text, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_string_text, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_string_text, PyObject *__pyx_v_attributes, CYTHON_UNUSED PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_2__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_4__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_6__getattr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_attribute); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__cmp__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_string); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_10_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_12type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_6__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_tuple, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_4type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static char __pyx_k_e[] = "e"; -static char __pyx_k_x[] = "x"; -static char __pyx_k__5[] = ""; -static char __pyx_k__6[] = "|"; -static char __pyx_k__8[] = "["; -static char __pyx_k__9[] = "]"; -static char __pyx_k_eq[] = "__eq__"; -static char __pyx_k_ne[] = "__ne__"; -static char __pyx_k_re[] = "re"; -static char __pyx_k_wc[] = "wc"; -static char __pyx_k_add[] = "__add__"; -static char __pyx_k_cls[] = "cls"; -static char __pyx_k_cmp[] = "__cmp__"; -static char __pyx_k_doc[] = "__doc__"; -static char __pyx_k_key[] = "key"; -static char __pyx_k_len[] = "__len__"; -static char __pyx_k_max[] = "max"; -static char __pyx_k_min[] = "min"; -static char __pyx_k_new[] = "__new__"; -static char __pyx_k_obj[] = "obj"; -static char __pyx_k_pop[] = "pop"; -static char __pyx_k_str[] = "__str__"; -static char __pyx_k_sum[] = "sum"; -static char __pyx_k_sys[] = "sys"; -static char __pyx_k_zip[] = "zip"; -static char __pyx_k_NFKD[] = "NFKD"; -static char __pyx_k_XSet[] = "XSet"; -static char __pyx_k_dict[] = "__dict__"; -static char __pyx_k_ends[] = "ends"; -static char __pyx_k_iadd[] = "__iadd__"; -static char __pyx_k_init[] = "__init__"; -static char __pyx_k_item[] = "item"; -static char __pyx_k_join[] = "join"; -static char __pyx_k_keys[] = "keys"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_name[] = "__name__"; -static char __pyx_k_push[] = "push"; -static char __pyx_k_repr[] = "__repr__"; -static char __pyx_k_self[] = "self"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_type[] = "type"; -static char __pyx_k_xset[] = "xset"; -static char __pyx_k_UTF_8[] = "UTF-8"; -static char __pyx_k_XDict[] = "XDict"; -static char __pyx_k_XFSet[] = "XFSet"; -static char __pyx_k_XList[] = "XList"; -static char __pyx_k_after[] = "after"; -static char __pyx_k_count[] = "count"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_deque[] = "deque"; -static char __pyx_k_heapq[] = "heapq"; -static char __pyx_k_index[] = "_index"; -static char __pyx_k_items[] = "items"; -static char __pyx_k_lower[] = "lower"; -static char __pyx_k_queue[] = "_queue"; -static char __pyx_k_split[] = "split"; -static char __pyx_k_utf_8[] = "utf-8"; -static char __pyx_k_value[] = "value"; -static char __pyx_k_write[] = "write"; -static char __pyx_k_xfset[] = "xfset"; -static char __pyx_k_xlist[] = "xlist"; -static char __pyx_k_XQueue[] = "XQueue"; -static char __pyx_k_XTuple[] = "XTuple"; -static char __pyx_k_before[] = "before"; -static char __pyx_k_begins[] = "begins"; -static char __pyx_k_choice[] = "choice"; -static char __pyx_k_concat[] = "concat"; -static char __pyx_k_decode[] = "decode"; -static char __pyx_k_delim2[] = "delim2"; -static char __pyx_k_encode[] = "encode"; -static char __pyx_k_equals[] = "equals"; -static char __pyx_k_extend[] = "extend"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_length[] = "length"; -static char __pyx_k_lshift[] = "__lshift__"; -static char __pyx_k_module[] = "__module__"; -static char __pyx_k_object[] = "object"; -static char __pyx_k_prefix[] = "prefix"; -static char __pyx_k_random[] = "random"; -static char __pyx_k_result[] = "result"; -static char __pyx_k_sample[] = "sample"; -static char __pyx_k_stderr[] = "stderr"; -static char __pyx_k_update[] = "update"; -static char __pyx_k_values[] = "values"; -static char __pyx_k_xitems[] = "xitems"; -static char __pyx_k_xsplit[] = "xsplit"; -static char __pyx_k_xtuple[] = "xtuple"; -static char __pyx_k_XString[] = "XString"; -static char __pyx_k_fnmatch[] = "fnmatch"; -static char __pyx_k_getattr[] = "__getattr__"; -static char __pyx_k_heappop[] = "heappop"; -static char __pyx_k_index_2[] = "index"; -static char __pyx_k_max_val[] = "max_val"; -static char __pyx_k_min_val[] = "min_val"; -static char __pyx_k_postfix[] = "postfix"; -static char __pyx_k_prepare[] = "__prepare__"; -static char __pyx_k_pushpop[] = "pushpop"; -static char __pyx_k_set_obj[] = "set_obj"; -static char __pyx_k_shuffle[] = "shuffle"; -static char __pyx_k_str_obj[] = "str_obj"; -static char __pyx_k_strings[] = "strings"; -static char __pyx_k_subitem[] = "subitem"; -static char __pyx_k_the_key[] = "the_key"; -static char __pyx_k_the_set[] = "the_set"; -static char __pyx_k_tup_obj[] = "tup_obj"; -static char __pyx_k_unicode[] = "unicode"; -static char __pyx_k_wc_list[] = "wc_list"; -static char __pyx_k_XMaxHeap[] = "XMaxHeap"; -static char __pyx_k_XMinHeap[] = "XMinHeap"; -static char __pyx_k_XUnicode[] = "XUnicode"; -static char __pyx_k_contains[] = "contains"; -static char __pyx_k_count_ci[] = "count_ci"; -static char __pyx_k_dict_obj[] = "dict_obj"; -static char __pyx_k_heappush[] = "heappush"; -static char __pyx_k_list_obj[] = "list_obj"; -static char __pyx_k_new_dict[] = "new_dict"; -static char __pyx_k_priority[] = "priority"; -static char __pyx_k_qualname[] = "__qualname__"; -static char __pyx_k_str_list[] = "str_list"; -static char __pyx_k_sum_vals[] = "sum_vals"; -static char __pyx_k_surround[] = "surround"; -static char __pyx_k_the_list[] = "the_list"; -static char __pyx_k_wildcard[] = "wildcard"; -static char __pyx_k_Exception[] = "Exception"; -static char __pyx_k_XList_max[] = "XList.max"; -static char __pyx_k_XList_min[] = "XList.min"; -static char __pyx_k_XList_sum[] = "XList.sum"; -static char __pyx_k_XUnicode2[] = "XUnicode2"; -static char __pyx_k_XUnicode3[] = "XUnicode3"; -static char __pyx_k_attr_dict[] = "attr_dict"; -static char __pyx_k_enumerate[] = "enumerate"; -static char __pyx_k_iteritems[] = "iteritems"; -static char __pyx_k_key_xlist[] = "key_xlist"; -static char __pyx_k_metaclass[] = "__metaclass__"; -static char __pyx_k_norm_text[] = "norm_text"; -static char __pyx_k_normalize[] = "normalize"; -static char __pyx_k_other_obj[] = "other_obj"; -static char __pyx_k_separator[] = "separator"; -static char __pyx_k_substring[] = "substring"; -static char __pyx_k_temp_list[] = "temp_list"; -static char __pyx_k_the_tuple[] = "the_tuple"; -static char __pyx_k_val_count[] = "val_count"; -static char __pyx_k_val_xlist[] = "val_xlist"; -static char __pyx_k_wildcards[] = "wildcards"; -static char __pyx_k_DEBUG_FLAG[] = "DEBUG_FLAG"; -static char __pyx_k_XDict___eq[] = "XDict.__eq__"; -static char __pyx_k_XDict___ne[] = "XDict.__ne__"; -static char __pyx_k_XFSet_type[] = "XFSet.type"; -static char __pyx_k_XFSet_xset[] = "XFSet.xset"; -static char __pyx_k_XList___eq[] = "XList.__eq__"; -static char __pyx_k_XList___ne[] = "XList.__ne__"; -static char __pyx_k_XList_join[] = "XList.join"; -static char __pyx_k_XList_xset[] = "XList.xset"; -static char __pyx_k_XSet_xfset[] = "XSet.xfset"; -static char __pyx_k_XSet_xlist[] = "XSet.xlist"; -static char __pyx_k_XUnicode_2[] = "XUnicode_2"; -static char __pyx_k_XUnicode_3[] = "XUnicode_3"; -static char __pyx_k_attributes[] = "attributes"; -static char __pyx_k_difference[] = "difference"; -static char __pyx_k_end_string[] = "end_string"; -static char __pyx_k_equal_type[] = "_equal_type"; -static char __pyx_k_first_list[] = "first_list"; -static char __pyx_k_max_length[] = "max_length"; -static char __pyx_k_naked_type[] = "naked_type"; -static char __pyx_k_other_dict[] = "other_dict"; -static char __pyx_k_test_value[] = "test_value"; -static char __pyx_k_the_object[] = "the_object"; -static char __pyx_k_value_name[] = "value_name"; -static char __pyx_k_xsplit_set[] = "xsplit_set"; -static char __pyx_k_NakedObject[] = "NakedObject"; -static char __pyx_k_XDict___add[] = "XDict.__add__"; -static char __pyx_k_XFSet___new[] = "XFSet.__new__"; -static char __pyx_k_XFSet_xlist[] = "XFSet.xlist"; -static char __pyx_k_XList___add[] = "XList.__add__"; -static char __pyx_k_XList_xfset[] = "XList.xfset"; -static char __pyx_k_XSet___iadd[] = "XSet.__iadd__"; -static char __pyx_k_XSet___init[] = "XSet.__init__"; -static char __pyx_k_XTuple_type[] = "XTuple.type"; -static char __pyx_k_another_set[] = "another_set"; -static char __pyx_k_collections[] = "collections"; -static char __pyx_k_fnmatchcase[] = "fnmatchcase"; -static char __pyx_k_map_to_vals[] = "map_to_vals"; -static char __pyx_k_other_lists[] = "other_lists"; -static char __pyx_k_result_list[] = "result_list"; -static char __pyx_k_return_list[] = "return_list"; -static char __pyx_k_string_text[] = "string_text"; -static char __pyx_k_test_string[] = "test_string"; -static char __pyx_k_unicodedata[] = "unicodedata"; -static char __pyx_k_XDict___iadd[] = "XDict.__iadd__"; -static char __pyx_k_XDict___init[] = "XDict.__init__"; -static char __pyx_k_XDict_equals[] = "XDict.equals"; -static char __pyx_k_XDict_random[] = "XDict.random"; -static char __pyx_k_XDict_xitems[] = "XDict.xitems"; -static char __pyx_k_XList___iadd[] = "XList.__iadd__"; -static char __pyx_k_XList___init[] = "XList.__init__"; -static char __pyx_k_XList_equals[] = "XList.equals"; -static char __pyx_k_XList_prefix[] = "XList.prefix"; -static char __pyx_k_XList_random[] = "XList.random"; -static char __pyx_k_XList_xtuple[] = "XList.xtuple"; -static char __pyx_k_XMaxHeap_pop[] = "XMaxHeap.pop"; -static char __pyx_k_XMinHeap_pop[] = "XMinHeap.pop"; -static char __pyx_k_XString_ends[] = "XString.ends"; -static char __pyx_k_XString_type[] = "XString.type"; -static char __pyx_k_XTuple___new[] = "XTuple.__new__"; -static char __pyx_k_another_dict[] = "another_dict"; -static char __pyx_k_another_list[] = "another_list"; -static char __pyx_k_begin_string[] = "begin_string"; -static char __pyx_k_intersection[] = "intersection"; -static char __pyx_k_map_to_items[] = "map_to_items"; -static char __pyx_k_naked_type_2[] = "_naked_type_"; -static char __pyx_k_norm_unicode[] = "norm_unicode"; -static char __pyx_k_other_string[] = "other_string"; -static char __pyx_k_val_count_ci[] = "val_count_ci"; -static char __pyx_k_version_info[] = "version_info"; -static char __pyx_k_XDict_max_val[] = "XDict.max_val"; -static char __pyx_k_XDict_min_val[] = "XDict.min_val"; -static char __pyx_k_XList_postfix[] = "XList.postfix"; -static char __pyx_k_XList_shuffle[] = "XList.shuffle"; -static char __pyx_k_XMaxHeap_push[] = "XMaxHeap.push"; -static char __pyx_k_XMinHeap_push[] = "XMinHeap.push"; -static char __pyx_k_XQueue___init[] = "XQueue.__init__"; -static char __pyx_k_XSet___lshift[] = "XSet.__lshift__"; -static char __pyx_k_XString___new[] = "XString.__new__"; -static char __pyx_k_XUnicode_type[] = "XUnicode.type"; -static char __pyx_k_random_sample[] = "random_sample"; -static char __pyx_k_the_attribute[] = "the_attribute"; -static char __pyx_k_AttributeError[] = "AttributeError"; -static char __pyx_k_Naked_settings[] = "Naked.settings"; -static char __pyx_k_XDict_sum_vals[] = "XDict.sum_vals"; -static char __pyx_k_XList_count_ci[] = "XList.count_ci"; -static char __pyx_k_XList_surround[] = "XList.surround"; -static char __pyx_k_XMaxHeap___len[] = "XMaxHeap.__len__"; -static char __pyx_k_XMinHeap___len[] = "XMinHeap.__len__"; -static char __pyx_k_XString_begins[] = "XString.begins"; -static char __pyx_k_XString_concat[] = "XString.concat"; -static char __pyx_k_XString_xsplit[] = "XString.xsplit"; -static char __pyx_k_XUnicode___cmp[] = "XUnicode.__cmp__"; -static char __pyx_k_XUnicode___str[] = "XUnicode.__str__"; -static char __pyx_k_naked_u_string[] = "naked_u_string"; -static char __pyx_k_wildcard_match[] = "wildcard_match"; -static char __pyx_k_XDict_key_xlist[] = "XDict.key_xlist"; -static char __pyx_k_XDict_val_count[] = "XDict.val_count"; -static char __pyx_k_XDict_val_xlist[] = "XDict.val_xlist"; -static char __pyx_k_XMaxHeap___init[] = "XMaxHeap.__init__"; -static char __pyx_k_XMaxHeap_length[] = "XMaxHeap.length"; -static char __pyx_k_XMinHeap___init[] = "XMinHeap.__init__"; -static char __pyx_k_XMinHeap_length[] = "XMinHeap.length"; -static char __pyx_k_XString_unicode[] = "XString.unicode"; -static char __pyx_k_XUnicode___init[] = "XUnicode.__init__"; -static char __pyx_k_XUnicode___repr[] = "XUnicode.__repr__"; -static char __pyx_k_mapped_function[] = "mapped_function"; -static char __pyx_k_nkd_fnmatchcase[] = "nkd_fnmatchcase"; -static char __pyx_k_number_of_items[] = "number_of_items"; -static char __pyx_k_random_key_list[] = "random_key_list"; -static char __pyx_k_split_delimiter[] = "split_delimiter"; -static char __pyx_k_the_string_text[] = "the_string_text"; -static char __pyx_k_NakedObject___eq[] = "NakedObject.__eq__"; -static char __pyx_k_NakedObject___ne[] = "NakedObject.__ne__"; -static char __pyx_k_NakedObject_type[] = "NakedObject.type"; -static char __pyx_k_XDict_difference[] = "XDict.difference"; -static char __pyx_k_XList_difference[] = "XList.difference"; -static char __pyx_k_XMaxHeap_pushpop[] = "XMaxHeap.pushpop"; -static char __pyx_k_XMinHeap_pushpop[] = "XMinHeap.pushpop"; -static char __pyx_k_XString_contains[] = "XString.contains"; -static char __pyx_k_count_duplicates[] = "count_duplicates"; -static char __pyx_k_equal_attributes[] = "_equal_attributes"; -static char __pyx_k_getAttributeDict[] = "_getAttributeDict"; -static char __pyx_k_initial_iterable[] = "initial_iterable"; -static char __pyx_k_py_major_version[] = "py_major_version"; -static char __pyx_k_XDict_map_to_vals[] = "XDict.map_to_vals"; -static char __pyx_k_remove_duplicates[] = "remove_duplicates"; -static char __pyx_k_NakedObject___init[] = "NakedObject.__init__"; -static char __pyx_k_NakedObject_equals[] = "NakedObject.equals"; -static char __pyx_k_XDict_intersection[] = "XDict.intersection"; -static char __pyx_k_XDict_val_count_ci[] = "XDict.val_count_ci"; -static char __pyx_k_XList_intersection[] = "XList.intersection"; -static char __pyx_k_XList_map_to_items[] = "XList.map_to_items"; -static char __pyx_k_XString_xsplit_set[] = "XString.xsplit_set"; -static char __pyx_k_XUnicode___getattr[] = "XUnicode.__getattr__"; -static char __pyx_k_XDict_random_sample[] = "XDict.random_sample"; -static char __pyx_k_XList_random_sample[] = "XList.random_sample"; -static char __pyx_k_XList_wildcard_match[] = "XList.wildcard_match"; -static char __pyx_k_conditional_function[] = "conditional_function"; -static char __pyx_k_multi_wildcard_match[] = "multi_wildcard_match"; -static char __pyx_k_Naked_toolshed_python[] = "Naked.toolshed.python"; -static char __pyx_k_XList_count_duplicates[] = "XList.count_duplicates"; -static char __pyx_k_XString_wildcard_match[] = "XString.wildcard_match"; -static char __pyx_k_NakedObject__equal_type[] = "NakedObject._equal_type"; -static char __pyx_k_XFSet__getAttributeDict[] = "XFSet._getAttributeDict"; -static char __pyx_k_XList_remove_duplicates[] = "XList.remove_duplicates"; -static char __pyx_k_conditional_map_to_vals[] = "conditional_map_to_vals"; -static char __pyx_k_XTuple__getAttributeDict[] = "XTuple._getAttributeDict"; -static char __pyx_k_conditional_map_to_items[] = "conditional_map_to_items"; -static char __pyx_k_XString__getAttributeDict[] = "XString._getAttributeDict"; -static char __pyx_k_XList_multi_wildcard_match[] = "XList.multi_wildcard_match"; -static char __pyx_k_XUnicode__getAttributeDict[] = "XUnicode._getAttributeDict"; -static char __pyx_k_lib_Naked_toolshed_c_types[] = "lib.Naked.toolshed.c.types"; -static char __pyx_k_NakedObject__equal_attributes[] = "NakedObject._equal_attributes"; -static char __pyx_k_NakedObject__getAttributeDict[] = "NakedObject._getAttributeDict"; -static char __pyx_k_XDict_conditional_map_to_vals[] = "XDict.conditional_map_to_vals"; -static char __pyx_k_XList_conditional_map_to_items[] = "XList.conditional_map_to_items"; -static char __pyx_k_Naked_Framework_Error_unable_to[] = "Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)"; -static char __pyx_k_Users_ces_Desktop_code_naked_li[] = "/Users/ces/Desktop/code/naked/lib/Naked/toolshed/c/types.pyx"; -static char __pyx_k_XUnicode___init___locals_XUnicod[] = "XUnicode.__init__..XUnicode_2"; -static char __pyx_k_Naked_Framework_Error_unable_to_2[] = "Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)"; -static char __pyx_k_XUnicode___init___locals_XUnicod_2[] = "XUnicode.__init__..XUnicode_2.__new__"; -static char __pyx_k_XUnicode___init___locals_XUnicod_3[] = "XUnicode.__init__..XUnicode_3"; -static char __pyx_k_XUnicode___init___locals_XUnicod_4[] = "XUnicode.__init__..XUnicode_3.__new__"; -static PyObject *__pyx_n_s_AttributeError; -static PyObject *__pyx_n_s_DEBUG_FLAG; -static PyObject *__pyx_n_s_Exception; -static PyObject *__pyx_n_s_NFKD; -static PyObject *__pyx_n_s_NakedObject; -static PyObject *__pyx_n_s_NakedObject___eq; -static PyObject *__pyx_n_s_NakedObject___init; -static PyObject *__pyx_n_s_NakedObject___ne; -static PyObject *__pyx_n_s_NakedObject__equal_attributes; -static PyObject *__pyx_n_s_NakedObject__equal_type; -static PyObject *__pyx_n_s_NakedObject__getAttributeDict; -static PyObject *__pyx_n_s_NakedObject_equals; -static PyObject *__pyx_n_s_NakedObject_type; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to; -static PyObject *__pyx_kp_s_Naked_Framework_Error_unable_to_2; -static PyObject *__pyx_n_s_Naked_settings; -static PyObject *__pyx_n_s_Naked_toolshed_python; -static PyObject *__pyx_kp_s_UTF_8; -static PyObject *__pyx_kp_s_Users_ces_Desktop_code_naked_li; -static PyObject *__pyx_n_s_XDict; -static PyObject *__pyx_n_s_XDict___add; -static PyObject *__pyx_n_s_XDict___eq; -static PyObject *__pyx_n_s_XDict___iadd; -static PyObject *__pyx_n_s_XDict___init; -static PyObject *__pyx_n_s_XDict___ne; -static PyObject *__pyx_n_s_XDict_conditional_map_to_vals; -static PyObject *__pyx_n_s_XDict_difference; -static PyObject *__pyx_n_s_XDict_equals; -static PyObject *__pyx_n_s_XDict_intersection; -static PyObject *__pyx_n_s_XDict_key_xlist; -static PyObject *__pyx_n_s_XDict_map_to_vals; -static PyObject *__pyx_n_s_XDict_max_val; -static PyObject *__pyx_n_s_XDict_min_val; -static PyObject *__pyx_n_s_XDict_random; -static PyObject *__pyx_n_s_XDict_random_sample; -static PyObject *__pyx_n_s_XDict_sum_vals; -static PyObject *__pyx_n_s_XDict_val_count; -static PyObject *__pyx_n_s_XDict_val_count_ci; -static PyObject *__pyx_n_s_XDict_val_xlist; -static PyObject *__pyx_n_s_XDict_xitems; -static PyObject *__pyx_n_s_XFSet; -static PyObject *__pyx_n_s_XFSet___new; -static PyObject *__pyx_n_s_XFSet__getAttributeDict; -static PyObject *__pyx_n_s_XFSet_type; -static PyObject *__pyx_n_s_XFSet_xlist; -static PyObject *__pyx_n_s_XFSet_xset; -static PyObject *__pyx_n_s_XList; -static PyObject *__pyx_n_s_XList___add; -static PyObject *__pyx_n_s_XList___eq; -static PyObject *__pyx_n_s_XList___iadd; -static PyObject *__pyx_n_s_XList___init; -static PyObject *__pyx_n_s_XList___ne; -static PyObject *__pyx_n_s_XList_conditional_map_to_items; -static PyObject *__pyx_n_s_XList_count_ci; -static PyObject *__pyx_n_s_XList_count_duplicates; -static PyObject *__pyx_n_s_XList_difference; -static PyObject *__pyx_n_s_XList_equals; -static PyObject *__pyx_n_s_XList_intersection; -static PyObject *__pyx_n_s_XList_join; -static PyObject *__pyx_n_s_XList_map_to_items; -static PyObject *__pyx_n_s_XList_max; -static PyObject *__pyx_n_s_XList_min; -static PyObject *__pyx_n_s_XList_multi_wildcard_match; -static PyObject *__pyx_n_s_XList_postfix; -static PyObject *__pyx_n_s_XList_prefix; -static PyObject *__pyx_n_s_XList_random; -static PyObject *__pyx_n_s_XList_random_sample; -static PyObject *__pyx_n_s_XList_remove_duplicates; -static PyObject *__pyx_n_s_XList_shuffle; -static PyObject *__pyx_n_s_XList_sum; -static PyObject *__pyx_n_s_XList_surround; -static PyObject *__pyx_n_s_XList_wildcard_match; -static PyObject *__pyx_n_s_XList_xfset; -static PyObject *__pyx_n_s_XList_xset; -static PyObject *__pyx_n_s_XList_xtuple; -static PyObject *__pyx_n_s_XMaxHeap; -static PyObject *__pyx_n_s_XMaxHeap___init; -static PyObject *__pyx_n_s_XMaxHeap___len; -static PyObject *__pyx_n_s_XMaxHeap_length; -static PyObject *__pyx_n_s_XMaxHeap_pop; -static PyObject *__pyx_n_s_XMaxHeap_push; -static PyObject *__pyx_n_s_XMaxHeap_pushpop; -static PyObject *__pyx_n_s_XMinHeap; -static PyObject *__pyx_n_s_XMinHeap___init; -static PyObject *__pyx_n_s_XMinHeap___len; -static PyObject *__pyx_n_s_XMinHeap_length; -static PyObject *__pyx_n_s_XMinHeap_pop; -static PyObject *__pyx_n_s_XMinHeap_push; -static PyObject *__pyx_n_s_XMinHeap_pushpop; -static PyObject *__pyx_n_s_XQueue; -static PyObject *__pyx_n_s_XQueue___init; -static PyObject *__pyx_n_s_XSet; -static PyObject *__pyx_n_s_XSet___iadd; -static PyObject *__pyx_n_s_XSet___init; -static PyObject *__pyx_n_s_XSet___lshift; -static PyObject *__pyx_n_s_XSet_xfset; -static PyObject *__pyx_n_s_XSet_xlist; -static PyObject *__pyx_n_s_XString; -static PyObject *__pyx_n_s_XString___new; -static PyObject *__pyx_n_s_XString__getAttributeDict; -static PyObject *__pyx_n_s_XString_begins; -static PyObject *__pyx_n_s_XString_concat; -static PyObject *__pyx_n_s_XString_contains; -static PyObject *__pyx_n_s_XString_ends; -static PyObject *__pyx_n_s_XString_type; -static PyObject *__pyx_n_s_XString_unicode; -static PyObject *__pyx_n_s_XString_wildcard_match; -static PyObject *__pyx_n_s_XString_xsplit; -static PyObject *__pyx_n_s_XString_xsplit_set; -static PyObject *__pyx_n_s_XTuple; -static PyObject *__pyx_n_s_XTuple___new; -static PyObject *__pyx_n_s_XTuple__getAttributeDict; -static PyObject *__pyx_n_s_XTuple_type; -static PyObject *__pyx_n_s_XUnicode; -static PyObject *__pyx_n_s_XUnicode2; -static PyObject *__pyx_n_s_XUnicode3; -static PyObject *__pyx_n_s_XUnicode_2; -static PyObject *__pyx_n_s_XUnicode_3; -static PyObject *__pyx_n_s_XUnicode___cmp; -static PyObject *__pyx_n_s_XUnicode___getattr; -static PyObject *__pyx_n_s_XUnicode___init; -static PyObject *__pyx_n_s_XUnicode___init___locals_XUnicod; -static PyObject *__pyx_n_s_XUnicode___init___locals_XUnicod_2; -static PyObject *__pyx_n_s_XUnicode___init___locals_XUnicod_3; -static PyObject *__pyx_n_s_XUnicode___init___locals_XUnicod_4; -static PyObject *__pyx_n_s_XUnicode___repr; -static PyObject *__pyx_n_s_XUnicode___str; -static PyObject *__pyx_n_s_XUnicode__getAttributeDict; -static PyObject *__pyx_n_s_XUnicode_type; -static PyObject *__pyx_kp_s__5; -static PyObject *__pyx_kp_s__6; -static PyObject *__pyx_kp_s__8; -static PyObject *__pyx_kp_s__9; -static PyObject *__pyx_n_s_add; -static PyObject *__pyx_n_s_after; -static PyObject *__pyx_n_s_another_dict; -static PyObject *__pyx_n_s_another_list; -static PyObject *__pyx_n_s_another_set; -static PyObject *__pyx_n_s_attr_dict; -static PyObject *__pyx_n_s_attributes; -static PyObject *__pyx_n_s_before; -static PyObject *__pyx_n_s_begin_string; -static PyObject *__pyx_n_s_begins; -static PyObject *__pyx_n_s_choice; -static PyObject *__pyx_n_s_cls; -static PyObject *__pyx_n_s_cmp; -static PyObject *__pyx_n_s_collections; -static PyObject *__pyx_n_s_concat; -static PyObject *__pyx_n_s_conditional_function; -static PyObject *__pyx_n_s_conditional_map_to_items; -static PyObject *__pyx_n_s_conditional_map_to_vals; -static PyObject *__pyx_n_s_contains; -static PyObject *__pyx_n_s_count; -static PyObject *__pyx_n_s_count_ci; -static PyObject *__pyx_n_s_count_duplicates; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_decode; -static PyObject *__pyx_n_s_delim2; -static PyObject *__pyx_n_s_deque; -static PyObject *__pyx_n_s_dict; -static PyObject *__pyx_n_s_dict_obj; -static PyObject *__pyx_n_s_difference; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_e; -static PyObject *__pyx_n_s_encode; -static PyObject *__pyx_n_s_end_string; -static PyObject *__pyx_n_s_ends; -static PyObject *__pyx_n_s_enumerate; -static PyObject *__pyx_n_s_eq; -static PyObject *__pyx_n_s_equal_attributes; -static PyObject *__pyx_n_s_equal_type; -static PyObject *__pyx_n_s_equals; -static PyObject *__pyx_n_s_extend; -static PyObject *__pyx_n_s_first_list; -static PyObject *__pyx_n_s_fnmatch; -static PyObject *__pyx_n_s_fnmatchcase; -static PyObject *__pyx_n_s_getAttributeDict; -static PyObject *__pyx_n_s_getattr; -static PyObject *__pyx_n_s_heappop; -static PyObject *__pyx_n_s_heappush; -static PyObject *__pyx_n_s_heapq; -static PyObject *__pyx_n_s_iadd; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_index; -static PyObject *__pyx_n_s_index_2; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_initial_iterable; -static PyObject *__pyx_n_s_intersection; -static PyObject *__pyx_n_s_item; -static PyObject *__pyx_n_s_items; -static PyObject *__pyx_n_s_iteritems; -static PyObject *__pyx_n_s_join; -static PyObject *__pyx_n_s_key; -static PyObject *__pyx_n_s_key_xlist; -static PyObject *__pyx_n_s_keys; -static PyObject *__pyx_n_s_len; -static PyObject *__pyx_n_s_length; -static PyObject *__pyx_n_s_lib_Naked_toolshed_c_types; -static PyObject *__pyx_n_s_list_obj; -static PyObject *__pyx_n_s_lower; -static PyObject *__pyx_n_s_lshift; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_map_to_items; -static PyObject *__pyx_n_s_map_to_vals; -static PyObject *__pyx_n_s_mapped_function; -static PyObject *__pyx_n_s_max; -static PyObject *__pyx_n_s_max_length; -static PyObject *__pyx_n_s_max_val; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_min; -static PyObject *__pyx_n_s_min_val; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_multi_wildcard_match; -static PyObject *__pyx_n_s_naked_type; -static PyObject *__pyx_n_s_naked_type_2; -static PyObject *__pyx_n_s_naked_u_string; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_ne; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_new_dict; -static PyObject *__pyx_n_s_nkd_fnmatchcase; -static PyObject *__pyx_n_s_norm_text; -static PyObject *__pyx_n_s_norm_unicode; -static PyObject *__pyx_n_s_normalize; -static PyObject *__pyx_n_s_number_of_items; -static PyObject *__pyx_n_s_obj; -static PyObject *__pyx_n_s_object; -static PyObject *__pyx_n_s_other_dict; -static PyObject *__pyx_n_s_other_lists; -static PyObject *__pyx_n_s_other_obj; -static PyObject *__pyx_n_s_other_string; -static PyObject *__pyx_n_s_pop; -static PyObject *__pyx_n_s_postfix; -static PyObject *__pyx_n_s_prefix; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_priority; -static PyObject *__pyx_n_s_push; -static PyObject *__pyx_n_s_pushpop; -static PyObject *__pyx_n_s_py_major_version; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_queue; -static PyObject *__pyx_n_s_random; -static PyObject *__pyx_n_s_random_key_list; -static PyObject *__pyx_n_s_random_sample; -static PyObject *__pyx_n_s_re; -static PyObject *__pyx_n_s_remove_duplicates; -static PyObject *__pyx_n_s_repr; -static PyObject *__pyx_n_s_result; -static PyObject *__pyx_n_s_result_list; -static PyObject *__pyx_n_s_return_list; -static PyObject *__pyx_n_s_sample; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_separator; -static PyObject *__pyx_n_s_set_obj; -static PyObject *__pyx_n_s_shuffle; -static PyObject *__pyx_n_s_split; -static PyObject *__pyx_n_s_split_delimiter; -static PyObject *__pyx_n_s_stderr; -static PyObject *__pyx_n_s_str; -static PyObject *__pyx_n_s_str_list; -static PyObject *__pyx_n_s_str_obj; -static PyObject *__pyx_n_s_string_text; -static PyObject *__pyx_n_s_strings; -static PyObject *__pyx_n_s_subitem; -static PyObject *__pyx_n_s_substring; -static PyObject *__pyx_n_s_sum; -static PyObject *__pyx_n_s_sum_vals; -static PyObject *__pyx_n_s_surround; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_temp_list; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_test_string; -static PyObject *__pyx_n_s_test_value; -static PyObject *__pyx_n_s_the_attribute; -static PyObject *__pyx_n_s_the_key; -static PyObject *__pyx_n_s_the_list; -static PyObject *__pyx_n_s_the_object; -static PyObject *__pyx_n_s_the_set; -static PyObject *__pyx_n_s_the_string_text; -static PyObject *__pyx_n_s_the_tuple; -static PyObject *__pyx_n_s_tup_obj; -static PyObject *__pyx_n_s_type; -static PyObject *__pyx_n_s_unicode; -static PyObject *__pyx_n_s_unicodedata; -static PyObject *__pyx_n_s_update; -static PyObject *__pyx_kp_s_utf_8; -static PyObject *__pyx_n_s_val_count; -static PyObject *__pyx_n_s_val_count_ci; -static PyObject *__pyx_n_s_val_xlist; -static PyObject *__pyx_n_s_value; -static PyObject *__pyx_n_s_value_name; -static PyObject *__pyx_n_s_values; -static PyObject *__pyx_n_s_version_info; -static PyObject *__pyx_n_s_wc; -static PyObject *__pyx_n_s_wc_list; -static PyObject *__pyx_n_s_wildcard; -static PyObject *__pyx_n_s_wildcard_match; -static PyObject *__pyx_n_s_wildcards; -static PyObject *__pyx_n_s_write; -static PyObject *__pyx_n_s_x; -static PyObject *__pyx_n_s_xfset; -static PyObject *__pyx_n_s_xitems; -static PyObject *__pyx_n_s_xlist; -static PyObject *__pyx_n_s_xset; -static PyObject *__pyx_n_s_xsplit; -static PyObject *__pyx_n_s_xsplit_set; -static PyObject *__pyx_n_s_xtuple; -static PyObject *__pyx_n_s_zip; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_2; -static PyObject *__pyx_int_3; -static PyObject *__pyx_int_10; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__10; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__16; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__25; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__31; -static PyObject *__pyx_tuple__33; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__39; -static PyObject *__pyx_tuple__41; -static PyObject *__pyx_tuple__43; -static PyObject *__pyx_tuple__45; -static PyObject *__pyx_tuple__47; -static PyObject *__pyx_tuple__49; -static PyObject *__pyx_tuple__51; -static PyObject *__pyx_tuple__53; -static PyObject *__pyx_tuple__55; -static PyObject *__pyx_tuple__57; -static PyObject *__pyx_tuple__59; -static PyObject *__pyx_tuple__61; -static PyObject *__pyx_tuple__63; -static PyObject *__pyx_tuple__65; -static PyObject *__pyx_tuple__67; -static PyObject *__pyx_tuple__69; -static PyObject *__pyx_tuple__71; -static PyObject *__pyx_tuple__73; -static PyObject *__pyx_tuple__75; -static PyObject *__pyx_tuple__77; -static PyObject *__pyx_tuple__79; -static PyObject *__pyx_tuple__81; -static PyObject *__pyx_tuple__83; -static PyObject *__pyx_tuple__85; -static PyObject *__pyx_tuple__87; -static PyObject *__pyx_tuple__88; -static PyObject *__pyx_tuple__90; -static PyObject *__pyx_tuple__92; -static PyObject *__pyx_tuple__94; -static PyObject *__pyx_tuple__95; -static PyObject *__pyx_tuple__97; -static PyObject *__pyx_tuple__99; -static PyObject *__pyx_tuple__101; -static PyObject *__pyx_tuple__103; -static PyObject *__pyx_tuple__105; -static PyObject *__pyx_tuple__107; -static PyObject *__pyx_tuple__109; -static PyObject *__pyx_tuple__111; -static PyObject *__pyx_tuple__113; -static PyObject *__pyx_tuple__115; -static PyObject *__pyx_tuple__117; -static PyObject *__pyx_tuple__119; -static PyObject *__pyx_tuple__121; -static PyObject *__pyx_tuple__123; -static PyObject *__pyx_tuple__125; -static PyObject *__pyx_tuple__127; -static PyObject *__pyx_tuple__129; -static PyObject *__pyx_tuple__131; -static PyObject *__pyx_tuple__133; -static PyObject *__pyx_tuple__135; -static PyObject *__pyx_tuple__137; -static PyObject *__pyx_tuple__139; -static PyObject *__pyx_tuple__141; -static PyObject *__pyx_tuple__143; -static PyObject *__pyx_tuple__145; -static PyObject *__pyx_tuple__147; -static PyObject *__pyx_tuple__149; -static PyObject *__pyx_tuple__151; -static PyObject *__pyx_tuple__153; -static PyObject *__pyx_tuple__155; -static PyObject *__pyx_tuple__157; -static PyObject *__pyx_tuple__159; -static PyObject *__pyx_tuple__161; -static PyObject *__pyx_tuple__163; -static PyObject *__pyx_tuple__165; -static PyObject *__pyx_tuple__167; -static PyObject *__pyx_tuple__169; -static PyObject *__pyx_tuple__171; -static PyObject *__pyx_tuple__173; -static PyObject *__pyx_tuple__175; -static PyObject *__pyx_tuple__177; -static PyObject *__pyx_tuple__179; -static PyObject *__pyx_tuple__181; -static PyObject *__pyx_tuple__183; -static PyObject *__pyx_tuple__185; -static PyObject *__pyx_tuple__187; -static PyObject *__pyx_tuple__189; -static PyObject *__pyx_tuple__191; -static PyObject *__pyx_tuple__193; -static PyObject *__pyx_tuple__195; -static PyObject *__pyx_tuple__197; -static PyObject *__pyx_tuple__199; -static PyObject *__pyx_tuple__201; -static PyObject *__pyx_tuple__203; -static PyObject *__pyx_tuple__205; -static PyObject *__pyx_tuple__207; -static PyObject *__pyx_tuple__209; -static PyObject *__pyx_tuple__211; -static PyObject *__pyx_tuple__213; -static PyObject *__pyx_tuple__215; -static PyObject *__pyx_tuple__217; -static PyObject *__pyx_codeobj__12; -static PyObject *__pyx_codeobj__14; -static PyObject *__pyx_codeobj__18; -static PyObject *__pyx_codeobj__20; -static PyObject *__pyx_codeobj__22; -static PyObject *__pyx_codeobj__24; -static PyObject *__pyx_codeobj__26; -static PyObject *__pyx_codeobj__28; -static PyObject *__pyx_codeobj__30; -static PyObject *__pyx_codeobj__32; -static PyObject *__pyx_codeobj__34; -static PyObject *__pyx_codeobj__36; -static PyObject *__pyx_codeobj__38; -static PyObject *__pyx_codeobj__40; -static PyObject *__pyx_codeobj__42; -static PyObject *__pyx_codeobj__44; -static PyObject *__pyx_codeobj__46; -static PyObject *__pyx_codeobj__48; -static PyObject *__pyx_codeobj__50; -static PyObject *__pyx_codeobj__52; -static PyObject *__pyx_codeobj__54; -static PyObject *__pyx_codeobj__56; -static PyObject *__pyx_codeobj__58; -static PyObject *__pyx_codeobj__60; -static PyObject *__pyx_codeobj__62; -static PyObject *__pyx_codeobj__64; -static PyObject *__pyx_codeobj__66; -static PyObject *__pyx_codeobj__68; -static PyObject *__pyx_codeobj__70; -static PyObject *__pyx_codeobj__72; -static PyObject *__pyx_codeobj__74; -static PyObject *__pyx_codeobj__76; -static PyObject *__pyx_codeobj__78; -static PyObject *__pyx_codeobj__80; -static PyObject *__pyx_codeobj__82; -static PyObject *__pyx_codeobj__84; -static PyObject *__pyx_codeobj__86; -static PyObject *__pyx_codeobj__89; -static PyObject *__pyx_codeobj__91; -static PyObject *__pyx_codeobj__93; -static PyObject *__pyx_codeobj__96; -static PyObject *__pyx_codeobj__98; -static PyObject *__pyx_codeobj__100; -static PyObject *__pyx_codeobj__102; -static PyObject *__pyx_codeobj__104; -static PyObject *__pyx_codeobj__106; -static PyObject *__pyx_codeobj__108; -static PyObject *__pyx_codeobj__110; -static PyObject *__pyx_codeobj__112; -static PyObject *__pyx_codeobj__114; -static PyObject *__pyx_codeobj__116; -static PyObject *__pyx_codeobj__118; -static PyObject *__pyx_codeobj__120; -static PyObject *__pyx_codeobj__122; -static PyObject *__pyx_codeobj__124; -static PyObject *__pyx_codeobj__126; -static PyObject *__pyx_codeobj__128; -static PyObject *__pyx_codeobj__130; -static PyObject *__pyx_codeobj__132; -static PyObject *__pyx_codeobj__134; -static PyObject *__pyx_codeobj__136; -static PyObject *__pyx_codeobj__138; -static PyObject *__pyx_codeobj__140; -static PyObject *__pyx_codeobj__142; -static PyObject *__pyx_codeobj__144; -static PyObject *__pyx_codeobj__146; -static PyObject *__pyx_codeobj__148; -static PyObject *__pyx_codeobj__150; -static PyObject *__pyx_codeobj__152; -static PyObject *__pyx_codeobj__154; -static PyObject *__pyx_codeobj__156; -static PyObject *__pyx_codeobj__158; -static PyObject *__pyx_codeobj__160; -static PyObject *__pyx_codeobj__162; -static PyObject *__pyx_codeobj__164; -static PyObject *__pyx_codeobj__166; -static PyObject *__pyx_codeobj__168; -static PyObject *__pyx_codeobj__170; -static PyObject *__pyx_codeobj__172; -static PyObject *__pyx_codeobj__174; -static PyObject *__pyx_codeobj__176; -static PyObject *__pyx_codeobj__178; -static PyObject *__pyx_codeobj__180; -static PyObject *__pyx_codeobj__182; -static PyObject *__pyx_codeobj__184; -static PyObject *__pyx_codeobj__186; -static PyObject *__pyx_codeobj__188; -static PyObject *__pyx_codeobj__190; -static PyObject *__pyx_codeobj__192; -static PyObject *__pyx_codeobj__194; -static PyObject *__pyx_codeobj__196; -static PyObject *__pyx_codeobj__198; -static PyObject *__pyx_codeobj__200; -static PyObject *__pyx_codeobj__202; -static PyObject *__pyx_codeobj__204; -static PyObject *__pyx_codeobj__206; -static PyObject *__pyx_codeobj__208; -static PyObject *__pyx_codeobj__210; -static PyObject *__pyx_codeobj__212; -static PyObject *__pyx_codeobj__214; -static PyObject *__pyx_codeobj__216; -static PyObject *__pyx_codeobj__218; - -/* "lib/Naked/toolshed/c/types.pyx":17 - * class NakedObject(object): - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_16__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_NakedObject)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_NakedObject)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_NakedObject)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[3] = {0,0,0}; - __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); - values[1] = __pyx_dynamic_args->__pyx_arg_attributes; - values[2] = ((PyObject *)((PyObject*)__pyx_n_s_NakedObject)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_attributes = values[1]; - __pyx_v_naked_type = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject___init__(__pyx_self, __pyx_v_self, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":18 - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): - * if len(attributes) > 0: # <<<<<<<<<<<<<< - * for key in attributes: - * setattr(self, key, attributes[key]) - */ - __pyx_t_1 = PyObject_Length(__pyx_v_attributes); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = ((__pyx_t_1 > 0) != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":19 - * def __init__(self, attributes={}, naked_type='NakedObject'): - * if len(attributes) > 0: - * for key in attributes: # <<<<<<<<<<<<<< - * setattr(self, key, attributes[key]) - * setattr(self, '_naked_type_', naked_type) # maintain an attribute to keep track of the extension type - */ - if (PyList_CheckExact(__pyx_v_attributes) || PyTuple_CheckExact(__pyx_v_attributes)) { - __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_3); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5); - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":20 - * if len(attributes) > 0: - * for key in attributes: - * setattr(self, key, attributes[key]) # <<<<<<<<<<<<<< - * setattr(self, '_naked_type_', naked_type) # maintain an attribute to keep track of the extension type - * - */ - __pyx_t_5 = PyObject_GetItem(__pyx_v_attributes, __pyx_v_key); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PyObject_SetAttr(__pyx_v_self, __pyx_v_key, __pyx_t_5); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":21 - * for key in attributes: - * setattr(self, key, attributes[key]) - * setattr(self, '_naked_type_', naked_type) # maintain an attribute to keep track of the extension type # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_6 = PyObject_SetAttr(__pyx_v_self, __pyx_n_s_naked_type_2, __pyx_v_naked_type); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":17 - * class NakedObject(object): - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":27 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_3_getAttributeDict = {__Pyx_NAMESTR("_getAttributeDict"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_3_getAttributeDict, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_getAttributeDict (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_2_getAttributeDict(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_getAttributeDict", 0); - - /* "lib/Naked/toolshed/c/types.pyx":28 - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): - * return self.__dict__ # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":27 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject._getAttributeDict", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":34 - * # returns boolean for type of instance == type of test parameter instance - * #------------------------------------------------------------------------------ - * def _equal_type(self, other_obj): # <<<<<<<<<<<<<< - * return type(self) == type(other_obj) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_5_equal_type(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_5_equal_type = {__Pyx_NAMESTR("_equal_type"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_5_equal_type, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_5_equal_type(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_equal_type (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_equal_type", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_equal_type") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_equal_type", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject._equal_type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_4_equal_type(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_4_equal_type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_equal_type", 0); - - /* "lib/Naked/toolshed/c/types.pyx":35 - * #------------------------------------------------------------------------------ - * def _equal_type(self, other_obj): - * return type(self) == type(other_obj) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_self)), ((PyObject *)Py_TYPE(__pyx_v_other_obj)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":34 - * # returns boolean for type of instance == type of test parameter instance - * #------------------------------------------------------------------------------ - * def _equal_type(self, other_obj): # <<<<<<<<<<<<<< - * return type(self) == type(other_obj) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject._equal_type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":41 - * # returns boolean for instance.__dict__ == test parameter .__dict__ (attribute comparison) - * #------------------------------------------------------------------------------ - * def _equal_attributes(self, other_obj): # <<<<<<<<<<<<<< - * return self.__dict__ == other_obj.__dict__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_7_equal_attributes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_7_equal_attributes = {__Pyx_NAMESTR("_equal_attributes"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_7_equal_attributes, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_7_equal_attributes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_equal_attributes (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_equal_attributes", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_equal_attributes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_equal_attributes", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject._equal_attributes", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_6_equal_attributes(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_6_equal_attributes(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_equal_attributes", 0); - - /* "lib/Naked/toolshed/c/types.pyx":42 - * #------------------------------------------------------------------------------ - * def _equal_attributes(self, other_obj): - * return self.__dict__ == other_obj.__dict__ # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_other_obj, __pyx_n_s_dict); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":41 - * # returns boolean for instance.__dict__ == test parameter .__dict__ (attribute comparison) - * #------------------------------------------------------------------------------ - * def _equal_attributes(self, other_obj): # <<<<<<<<<<<<<< - * return self.__dict__ == other_obj.__dict__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject._equal_attributes", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":47 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_9__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_9__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_9__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_9__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_8__eq__(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_8__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__eq__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":48 - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): - * return self.equals(other_obj) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equals); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":47 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":53 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_11__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_11__ne__ = {__Pyx_NAMESTR("__ne__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_11__ne__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_11__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__ne__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ne__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_10__ne__(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_10__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__ne__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":54 - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): - * result = self.equals(other_obj) # <<<<<<<<<<<<<< - * if result: - * return False # reverse result of the equals method - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equals); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":55 - * def __ne__(self, other_obj): - * result = self.equals(other_obj) - * if result: # <<<<<<<<<<<<<< - * return False # reverse result of the equals method - * else: - */ - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/types.pyx":56 - * result = self.equals(other_obj) - * if result: - * return False # reverse result of the equals method # <<<<<<<<<<<<<< - * else: - * return True - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":58 - * return False # reverse result of the equals method - * else: - * return True # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":53 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":65 - * # **NEED TO OVERRIDE IN CLASSES THAT INHERIT - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * return self._equal_type(other_obj) and self._equal_attributes(other_obj) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_13equals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_13equals = {__Pyx_NAMESTR("equals"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_13equals, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_13equals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("equals (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("equals", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equals") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("equals", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.equals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_12equals(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_12equals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equals", 0); - - /* "lib/Naked/toolshed/c/types.pyx":66 - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): - * return self._equal_type(other_obj) and self._equal_attributes(other_obj) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equal_type); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equal_attributes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __pyx_t_5; - __pyx_t_5 = 0; - } else { - __pyx_t_1 = __pyx_t_3; - __pyx_t_3 = 0; - } - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":65 - * # **NEED TO OVERRIDE IN CLASSES THAT INHERIT - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * return self._equal_type(other_obj) and self._equal_attributes(other_obj) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.equals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":72 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_15type(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_15type = {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_15type, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_11NakedObject_15type(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("type (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_14type(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_14type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("type", 0); - - /* "lib/Naked/toolshed/c/types.pyx":73 - * #------------------------------------------------------------------------------ - * def type(self): - * if hasattr(self, '_naked_type_'): # <<<<<<<<<<<<<< - * return self._naked_type_ - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":74 - * def type(self): - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ # <<<<<<<<<<<<<< - * else: - * return None - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":76 - * return self._naked_type_ - * else: - * return None # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":72 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.NakedObject.type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":83 - * #------------------------------------------------------------------------------ - * class XDict(dict, NakedObject): - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): # <<<<<<<<<<<<<< - * dict.__init__(self, dict_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_40__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XDict)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XDict)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XDict)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_dict_obj = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_dict_obj,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults1 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XDict)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dict_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_dict_obj = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict___init__(__pyx_self, __pyx_v_self, __pyx_v_dict_obj, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_dict_obj, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":84 - * class XDict(dict, NakedObject): - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): - * dict.__init__(self, dict_obj) # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_dict_obj); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dict_obj); - __Pyx_GIVEREF(__pyx_v_dict_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":85 - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): - * dict.__init__(self, dict_obj) - * NakedObject.__init__(self, attributes, naked_type) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __Pyx_INCREF(__pyx_v_naked_type); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_naked_type); - __Pyx_GIVEREF(__pyx_v_naked_type); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":83 - * #------------------------------------------------------------------------------ - * class XDict(dict, NakedObject): - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): # <<<<<<<<<<<<<< - * dict.__init__(self, dict_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":96 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __add__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_3__add__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_3__add__ = {__Pyx_NAMESTR("__add__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_3__add__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_3__add__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_dict = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__add__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_dict,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__add__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__add__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_dict = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__add__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_2__add__(__pyx_self, __pyx_v_self, __pyx_v_other_dict); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_2__add__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_dict) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - Py_ssize_t __pyx_t_10; - PyObject *(*__pyx_t_11)(PyObject *); - int __pyx_t_12; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__add__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":97 - * #------------------------------------------------------------------------------ - * def __add__(self, other_dict): - * try: # <<<<<<<<<<<<<< - * self.update(other_dict) - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/types.pyx":98 - * def __add__(self, other_dict): - * try: - * self.update(other_dict) # <<<<<<<<<<<<<< - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_other_dict); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_other_dict); - __Pyx_GIVEREF(__pyx_v_other_dict); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":99 - * try: - * self.update(other_dict) - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): # <<<<<<<<<<<<<< - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - * if len(attr_dict) > 0: - */ - __pyx_t_7 = PyObject_HasAttr(__pyx_v_other_dict, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_7) { - __pyx_t_6 = __Pyx_GetAttr(__pyx_v_other_dict, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_XDict, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __pyx_t_8; - } else { - __pyx_t_9 = __pyx_t_7; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":100 - * self.update(other_dict) - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict # <<<<<<<<<<<<<< - * if len(attr_dict) > 0: - * for key in attr_dict: - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_other_dict, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_attr_dict = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":101 - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - * if len(attr_dict) > 0: # <<<<<<<<<<<<<< - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) - */ - __pyx_t_10 = PyObject_Length(__pyx_v_attr_dict); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_9 = ((__pyx_t_10 > 0) != 0); - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":102 - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - * if len(attr_dict) > 0: - * for key in attr_dict: # <<<<<<<<<<<<<< - * setattr(self, key, attr_dict[key]) - * return self - */ - if (PyList_CheckExact(__pyx_v_attr_dict) || PyTuple_CheckExact(__pyx_v_attr_dict)) { - __pyx_t_5 = __pyx_v_attr_dict; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0; - __pyx_t_11 = NULL; - } else { - __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_attr_dict); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = Py_TYPE(__pyx_t_5)->tp_iternext; - } - for (;;) { - if (!__pyx_t_11 && PyList_CheckExact(__pyx_t_5)) { - if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_11 && PyTuple_CheckExact(__pyx_t_5)) { - if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_6 = __pyx_t_11(__pyx_t_5); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":103 - * if len(attr_dict) > 0: - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) # <<<<<<<<<<<<<< - * return self - * except Exception as e: - */ - __pyx_t_6 = PyObject_GetItem(__pyx_v_attr_dict, __pyx_v_key); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_12 = PyObject_SetAttr(__pyx_v_self, __pyx_v_key, __pyx_t_6); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L12; - } - __pyx_L12:; - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/types.pyx":104 - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) - * return self # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":105 - * setattr(self, key, attr_dict[key]) - * return self - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - */ - __pyx_t_13 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_13) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/types.pyx":106 - * return self - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - * raise e - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":107 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_stderr); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L17; - } - __pyx_L17:; - - /* "lib/Naked/toolshed/c/types.pyx":108 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/types.pyx":96 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __add__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":115 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __iadd__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_5__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_5__iadd__ = {__Pyx_NAMESTR("__iadd__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_5__iadd__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_5__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_dict = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_dict,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__iadd__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_dict = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_4__iadd__(__pyx_self, __pyx_v_self, __pyx_v_other_dict); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_4__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_dict) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - Py_ssize_t __pyx_t_10; - PyObject *(*__pyx_t_11)(PyObject *); - int __pyx_t_12; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__iadd__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":116 - * #------------------------------------------------------------------------------ - * def __iadd__(self, other_dict): - * try: # <<<<<<<<<<<<<< - * self.update(other_dict) - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/types.pyx":117 - * def __iadd__(self, other_dict): - * try: - * self.update(other_dict) # <<<<<<<<<<<<<< - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_other_dict); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_other_dict); - __Pyx_GIVEREF(__pyx_v_other_dict); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":118 - * try: - * self.update(other_dict) - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): # <<<<<<<<<<<<<< - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - * if len(attr_dict) > 0: - */ - __pyx_t_7 = PyObject_HasAttr(__pyx_v_other_dict, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_7) { - __pyx_t_6 = __Pyx_GetAttr(__pyx_v_other_dict, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_XDict, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __pyx_t_8; - } else { - __pyx_t_9 = __pyx_t_7; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":119 - * self.update(other_dict) - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict # <<<<<<<<<<<<<< - * if len(attr_dict) > 0: - * for key in attr_dict: - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_other_dict, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_v_attr_dict = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":120 - * if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - * if len(attr_dict) > 0: # <<<<<<<<<<<<<< - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) - */ - __pyx_t_10 = PyObject_Length(__pyx_v_attr_dict); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_9 = ((__pyx_t_10 > 0) != 0); - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":121 - * attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - * if len(attr_dict) > 0: - * for key in attr_dict: # <<<<<<<<<<<<<< - * setattr(self, key, attr_dict[key]) - * return self - */ - if (PyList_CheckExact(__pyx_v_attr_dict) || PyTuple_CheckExact(__pyx_v_attr_dict)) { - __pyx_t_5 = __pyx_v_attr_dict; __Pyx_INCREF(__pyx_t_5); __pyx_t_10 = 0; - __pyx_t_11 = NULL; - } else { - __pyx_t_10 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_attr_dict); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = Py_TYPE(__pyx_t_5)->tp_iternext; - } - for (;;) { - if (!__pyx_t_11 && PyList_CheckExact(__pyx_t_5)) { - if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_11 && PyTuple_CheckExact(__pyx_t_5)) { - if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_10); __Pyx_INCREF(__pyx_t_6); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_6 = __pyx_t_11(__pyx_t_5); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":122 - * if len(attr_dict) > 0: - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) # <<<<<<<<<<<<<< - * return self - * except Exception as e: - */ - __pyx_t_6 = PyObject_GetItem(__pyx_v_attr_dict, __pyx_v_key); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_12 = PyObject_SetAttr(__pyx_v_self, __pyx_v_key, __pyx_t_6); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L12; - } - __pyx_L12:; - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/types.pyx":123 - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) - * return self # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":124 - * setattr(self, key, attr_dict[key]) - * return self - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - */ - __pyx_t_13 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_13) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_e = __pyx_t_6; - - /* "lib/Naked/toolshed/c/types.pyx":125 - * return self - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - * raise e - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":126 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_stderr); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L17; - } - __pyx_L17:; - - /* "lib/Naked/toolshed/c/types.pyx":127 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/types.pyx":115 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __iadd__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":132 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_7__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_7__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_7__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_7__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_6__eq__(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_6__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__eq__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":133 - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): - * return self.equals(other_obj) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equals); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":132 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":138 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_9__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_9__ne__ = {__Pyx_NAMESTR("__ne__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_9__ne__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_9__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__ne__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ne__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_8__ne__(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_8__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__ne__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":139 - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): - * result = self.equals(other_obj) # <<<<<<<<<<<<<< - * if result: - * return False # reverse result of the equals method - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equals); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":140 - * def __ne__(self, other_obj): - * result = self.equals(other_obj) - * if result: # <<<<<<<<<<<<<< - * return False # reverse result of the equals method - * else: - */ - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/types.pyx":141 - * result = self.equals(other_obj) - * if result: - * return False # reverse result of the equals method # <<<<<<<<<<<<<< - * else: - * return True - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":143 - * return False # reverse result of the equals method - * else: - * return True # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":138 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":149 - * # tests for equality of the XDict (type, attributes, dictionary equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if dict(self) == dict(other_obj): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_11equals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_11equals = {__Pyx_NAMESTR("equals"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_11equals, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_11equals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("equals (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("equals", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equals") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("equals", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.equals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_10equals(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_10equals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equals", 0); - - /* "lib/Naked/toolshed/c/types.pyx":150 - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): # <<<<<<<<<<<<<< - * if dict(self) == dict(other_obj): - * return True - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equal_type); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_4) { - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equal_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __pyx_t_5; - } else { - __pyx_t_6 = __pyx_t_4; - } - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":151 - * def equals(self, other_obj): - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if dict(self) == dict(other_obj): # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":152 - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if dict(self) == dict(other_obj): - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":154 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":156 - * return False - * else: - * return False # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":149 - * # tests for equality of the XDict (type, attributes, dictionary equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if dict(self) == dict(other_obj): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.equals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":167 - * # Test: test_xdict_conditional_map - * #------------------------------------------------------------------------------ - * def conditional_map_to_vals(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for key, value in self.xitems(): - * if conditional_function(key): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_13conditional_map_to_vals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_13conditional_map_to_vals = {__Pyx_NAMESTR("conditional_map_to_vals"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_13conditional_map_to_vals, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_13conditional_map_to_vals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_conditional_function = 0; - PyObject *__pyx_v_mapped_function = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("conditional_map_to_vals (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_conditional_function,&__pyx_n_s_mapped_function,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conditional_function)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("conditional_map_to_vals", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mapped_function)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("conditional_map_to_vals", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "conditional_map_to_vals") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_conditional_function = values[1]; - __pyx_v_mapped_function = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("conditional_map_to_vals", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.conditional_map_to_vals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_12conditional_map_to_vals(__pyx_self, __pyx_v_self, __pyx_v_conditional_function, __pyx_v_mapped_function); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_12conditional_map_to_vals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_conditional_function, PyObject *__pyx_v_mapped_function) { - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_value = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *(*__pyx_t_8)(PyObject *); - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("conditional_map_to_vals", 0); - - /* "lib/Naked/toolshed/c/types.pyx":168 - * #------------------------------------------------------------------------------ - * def conditional_map_to_vals(self, conditional_function, mapped_function): - * for key, value in self.xitems(): # <<<<<<<<<<<<<< - * if conditional_function(key): - * self[key] = mapped_function(value) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xitems); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_4(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { - PyObject* sequence = __pyx_t_2; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_5 = PyList_GET_ITEM(sequence, 0); - __pyx_t_6 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - #else - __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_8 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_unpacking_done; - __pyx_L5_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_L6_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5); - __pyx_t_5 = 0; - __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":169 - * def conditional_map_to_vals(self, conditional_function, mapped_function): - * for key, value in self.xitems(): - * if conditional_function(key): # <<<<<<<<<<<<<< - * self[key] = mapped_function(value) - * return self - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_key); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key); - __Pyx_GIVEREF(__pyx_v_key); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_conditional_function, __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":170 - * for key, value in self.xitems(): - * if conditional_function(key): - * self[key] = mapped_function(value) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_mapped_function, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_self, __pyx_v_key, __pyx_t_2) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L7; - } - __pyx_L7:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":171 - * if conditional_function(key): - * self[key] = mapped_function(value) - * return self # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":167 - * # Test: test_xdict_conditional_map - * #------------------------------------------------------------------------------ - * def conditional_map_to_vals(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for key, value in self.xitems(): - * if conditional_function(key): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.conditional_map_to_vals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_value); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":178 - * # Test: test_xdict_map_to_vals - * #------------------------------------------------------------------------------ - * def map_to_vals(self, mapped_function): # <<<<<<<<<<<<<< - * # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - * for key, value in self.xitems(): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_15map_to_vals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_15map_to_vals = {__Pyx_NAMESTR("map_to_vals"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_15map_to_vals, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_15map_to_vals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_mapped_function = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("map_to_vals (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mapped_function,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mapped_function)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("map_to_vals", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "map_to_vals") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_mapped_function = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("map_to_vals", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.map_to_vals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_14map_to_vals(__pyx_self, __pyx_v_self, __pyx_v_mapped_function); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_14map_to_vals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mapped_function) { - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_value = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *(*__pyx_t_8)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("map_to_vals", 0); - - /* "lib/Naked/toolshed/c/types.pyx":180 - * def map_to_vals(self, mapped_function): - * # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - * for key, value in self.xitems(): # <<<<<<<<<<<<<< - * self[key] = mapped_function(value) - * return self - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xitems); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_4(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { - PyObject* sequence = __pyx_t_2; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_5 = PyList_GET_ITEM(sequence, 0); - __pyx_t_6 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - #else - __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_8 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L6_unpacking_done; - __pyx_L5_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_L6_unpacking_done:; - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5); - __pyx_t_5 = 0; - __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":181 - * # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - * for key, value in self.xitems(): - * self[key] = mapped_function(value) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_mapped_function, __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_self, __pyx_v_key, __pyx_t_6) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":182 - * for key, value in self.xitems(): - * self[key] = mapped_function(value) - * return self # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":178 - * # Test: test_xdict_map_to_vals - * #------------------------------------------------------------------------------ - * def map_to_vals(self, mapped_function): # <<<<<<<<<<<<<< - * # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - * for key, value in self.xitems(): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.map_to_vals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_value); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":189 - * # Test: test_xdict_val_xlist - * #------------------------------------------------------------------------------ - * def val_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.values(), self._getAttributeDict()) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_17val_xlist(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_17val_xlist = {__Pyx_NAMESTR("val_xlist"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_17val_xlist, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_17val_xlist(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("val_xlist (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_16val_xlist(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_16val_xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("val_xlist", 0); - - /* "lib/Naked/toolshed/c/types.pyx":190 - * #------------------------------------------------------------------------------ - * def val_xlist(self): - * return XList(self.values(), self._getAttributeDict()) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_XList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_values); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":189 - * # Test: test_xdict_val_xlist - * #------------------------------------------------------------------------------ - * def val_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.values(), self._getAttributeDict()) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.val_xlist", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":196 - * # Test: test_xdict_max_val, test_xdict_max_val_strings (strings are alphabetic if not numerals) - * #------------------------------------------------------------------------------ - * def max_val(self): # <<<<<<<<<<<<<< - * return max(zip(self.values(), self.keys())) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_19max_val(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_19max_val = {__Pyx_NAMESTR("max_val"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_19max_val, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_19max_val(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("max_val (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_18max_val(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_18max_val(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("max_val", 0); - - /* "lib/Naked/toolshed/c/types.pyx":197 - * #------------------------------------------------------------------------------ - * def max_val(self): - * return max(zip(self.values(), self.keys())) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":196 - * # Test: test_xdict_max_val, test_xdict_max_val_strings (strings are alphabetic if not numerals) - * #------------------------------------------------------------------------------ - * def max_val(self): # <<<<<<<<<<<<<< - * return max(zip(self.values(), self.keys())) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.max_val", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":202 - * # [ min_val method ] (tuple of minimum value and associated key) - * #------------------------------------------------------------------------------ - * def min_val(self): # <<<<<<<<<<<<<< - * return min(zip(self.values(), self.keys())) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_21min_val(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_21min_val = {__Pyx_NAMESTR("min_val"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_21min_val, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_21min_val(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("min_val (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_20min_val(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_20min_val(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("min_val", 0); - - /* "lib/Naked/toolshed/c/types.pyx":203 - * #------------------------------------------------------------------------------ - * def min_val(self): - * return min(zip(self.values(), self.keys())) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":202 - * # [ min_val method ] (tuple of minimum value and associated key) - * #------------------------------------------------------------------------------ - * def min_val(self): # <<<<<<<<<<<<<< - * return min(zip(self.values(), self.keys())) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.min_val", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":209 - * # returns sum of all values in the dictionary - * #------------------------------------------------------------------------------ - * def sum_vals(self): # <<<<<<<<<<<<<< - * return sum(self.values()) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_23sum_vals(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_23sum_vals = {__Pyx_NAMESTR("sum_vals"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_23sum_vals, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_23sum_vals(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("sum_vals (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_22sum_vals(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_22sum_vals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("sum_vals", 0); - - /* "lib/Naked/toolshed/c/types.pyx":210 - * #------------------------------------------------------------------------------ - * def sum_vals(self): - * return sum(self.values()) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":209 - * # returns sum of all values in the dictionary - * #------------------------------------------------------------------------------ - * def sum_vals(self): # <<<<<<<<<<<<<< - * return sum(self.values()) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.sum_vals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":218 - * # Tests: test_xdict_val_count_string, test_xdict_val_count_integer - * #------------------------------------------------------------------------------ - * def val_count(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_25val_count(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_25val_count = {__Pyx_NAMESTR("val_count"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_25val_count, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_25val_count(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_value_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("val_count (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_value_name,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value_name)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("val_count", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "val_count") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_value_name = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("val_count", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.val_count", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_24val_count(__pyx_self, __pyx_v_self, __pyx_v_value_name); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_24val_count(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value_name) { - PyObject *__pyx_v_count = NULL; - PyObject *__pyx_v_test_value = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("val_count", 0); - - /* "lib/Naked/toolshed/c/types.pyx":219 - * #------------------------------------------------------------------------------ - * def val_count(self, value_name): - * count = 0 # <<<<<<<<<<<<<< - * for test_value in self.values(): - * if value_name == test_value: - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_v_count = __pyx_int_0; - - /* "lib/Naked/toolshed/c/types.pyx":220 - * def val_count(self, value_name): - * count = 0 - * for test_value in self.values(): # <<<<<<<<<<<<<< - * if value_name == test_value: - * count += 1 - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_4(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_test_value, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":221 - * count = 0 - * for test_value in self.values(): - * if value_name == test_value: # <<<<<<<<<<<<<< - * count += 1 - * return count - */ - __pyx_t_2 = PyObject_RichCompare(__pyx_v_value_name, __pyx_v_test_value, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":222 - * for test_value in self.values(): - * if value_name == test_value: - * count += 1 # <<<<<<<<<<<<<< - * return count - * - */ - __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_count, __pyx_int_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF_SET(__pyx_v_count, __pyx_t_2); - __pyx_t_2 = 0; - goto __pyx_L5; - } - __pyx_L5:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":223 - * if value_name == test_value: - * count += 1 - * return count # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_count); - __pyx_r = __pyx_v_count; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":218 - * # Tests: test_xdict_val_count_string, test_xdict_val_count_integer - * #------------------------------------------------------------------------------ - * def val_count(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.val_count", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_count); - __Pyx_XDECREF(__pyx_v_test_value); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":231 - * # Test: test_xdict_val_count_ci - * #------------------------------------------------------------------------------ - * def val_count_ci(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_27val_count_ci(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_27val_count_ci = {__Pyx_NAMESTR("val_count_ci"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_27val_count_ci, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_27val_count_ci(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_value_name = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("val_count_ci (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_value_name,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value_name)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("val_count_ci", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "val_count_ci") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_value_name = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("val_count_ci", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.val_count_ci", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_26val_count_ci(__pyx_self, __pyx_v_self, __pyx_v_value_name); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_26val_count_ci(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_value_name) { - PyObject *__pyx_v_count = NULL; - PyObject *__pyx_v_test_value = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - int __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("val_count_ci", 0); - - /* "lib/Naked/toolshed/c/types.pyx":232 - * #------------------------------------------------------------------------------ - * def val_count_ci(self, value_name): - * count = 0 # <<<<<<<<<<<<<< - * for test_value in self.values(): - * try: - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_v_count = __pyx_int_0; - - /* "lib/Naked/toolshed/c/types.pyx":233 - * def val_count_ci(self, value_name): - * count = 0 - * for test_value in self.values(): # <<<<<<<<<<<<<< - * try: - * if value_name.lower() in test_value.lower(): - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) { - __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_4(__pyx_t_1); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_test_value, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":234 - * count = 0 - * for test_value in self.values(): - * try: # <<<<<<<<<<<<<< - * if value_name.lower() in test_value.lower(): - * count += 1 - */ - { - __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); - /*try:*/ { - - /* "lib/Naked/toolshed/c/types.pyx":235 - * for test_value in self.values(): - * try: - * if value_name.lower() in test_value.lower(): # <<<<<<<<<<<<<< - * count += 1 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value_name, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_test_value, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_10 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_t_9, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_11 = (__pyx_t_10 != 0); - if (__pyx_t_11) { - - /* "lib/Naked/toolshed/c/types.pyx":236 - * try: - * if value_name.lower() in test_value.lower(): - * count += 1 # <<<<<<<<<<<<<< - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - * continue - */ - __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_count, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF_SET(__pyx_v_count, __pyx_t_9); - __pyx_t_9 = 0; - goto __pyx_L13; - } - __pyx_L13:; - } - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L12_try_end; - __pyx_L5_error:; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":237 - * if value_name.lower() in test_value.lower(): - * count += 1 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt # <<<<<<<<<<<<<< - * continue - * return count - */ - __pyx_t_12 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); - if (__pyx_t_12) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.val_count_ci", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/types.pyx":238 - * count += 1 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - * continue # <<<<<<<<<<<<<< - * return count - * - */ - goto __pyx_L15_except_continue; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L6_exception_handled; - __pyx_L15_except_continue:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L11_try_continue; - } - goto __pyx_L7_except_error; - __pyx_L7_except_error:; - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); - goto __pyx_L1_error; - __pyx_L11_try_continue:; - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); - goto __pyx_L3_continue; - __pyx_L6_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); - __pyx_L12_try_end:; - } - __pyx_L3_continue:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":239 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - * continue - * return count # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_count); - __pyx_r = __pyx_v_count; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":231 - * # Test: test_xdict_val_count_ci - * #------------------------------------------------------------------------------ - * def val_count_ci(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.val_count_ci", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_count); - __Pyx_XDECREF(__pyx_v_test_value); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":250 - * # Tests: test_xdict_key_difference, test_xdict_key_difference_when_none_present - * #------------------------------------------------------------------------------ - * def difference(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) - set(another_dict.keys()) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_29difference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_29difference = {__Pyx_NAMESTR("difference"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_29difference, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_29difference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_dict = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("difference (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_dict,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("difference", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "difference") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_dict = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("difference", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.difference", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_28difference(__pyx_self, __pyx_v_self, __pyx_v_another_dict); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_28difference(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_dict) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("difference", 0); - - /* "lib/Naked/toolshed/c/types.pyx":251 - * #------------------------------------------------------------------------------ - * def difference(self, another_dict): - * return set(self.keys()) - set(another_dict.keys()) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_another_dict, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":250 - * # Tests: test_xdict_key_difference, test_xdict_key_difference_when_none_present - * #------------------------------------------------------------------------------ - * def difference(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) - set(another_dict.keys()) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.difference", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":258 - * # Tests: test_xdict_key_intersection, test_xdict_key_intersection_when_none_present - * #------------------------------------------------------------------------------ - * def intersection(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) & set(another_dict.keys()) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_31intersection(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_31intersection = {__Pyx_NAMESTR("intersection"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_31intersection, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_31intersection(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_dict = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("intersection (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_dict,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_dict)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("intersection", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "intersection") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_dict = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("intersection", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.intersection", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_30intersection(__pyx_self, __pyx_v_self, __pyx_v_another_dict); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_30intersection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_dict) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("intersection", 0); - - /* "lib/Naked/toolshed/c/types.pyx":259 - * #------------------------------------------------------------------------------ - * def intersection(self, another_dict): - * return set(self.keys()) & set(another_dict.keys()) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_another_dict, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_And(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":258 - * # Tests: test_xdict_key_intersection, test_xdict_key_intersection_when_none_present - * #------------------------------------------------------------------------------ - * def intersection(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) & set(another_dict.keys()) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.intersection", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":266 - * # Test: test_xdict_key_xlist - * #------------------------------------------------------------------------------ - * def key_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.keys(), self._getAttributeDict()) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_33key_xlist(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_33key_xlist = {__Pyx_NAMESTR("key_xlist"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_33key_xlist, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_33key_xlist(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("key_xlist (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_32key_xlist(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_32key_xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("key_xlist", 0); - - /* "lib/Naked/toolshed/c/types.pyx":267 - * #------------------------------------------------------------------------------ - * def key_xlist(self): - * return XList(self.keys(), self._getAttributeDict()) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_XList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":266 - * # Test: test_xdict_key_xlist - * #------------------------------------------------------------------------------ - * def key_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.keys(), self._getAttributeDict()) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.key_xlist", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":274 - * # Test: test_xdict_key_random - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * from Naked.toolshed.python import py_major_version - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_35random(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_35random = {__Pyx_NAMESTR("random"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_35random, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_35random(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("random (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_34random(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_34random(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_random = NULL; - CYTHON_UNUSED PyObject *__pyx_v_py_major_version = NULL; - PyObject *__pyx_v_random_key_list = NULL; - PyObject *__pyx_v_the_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("random", 0); - - /* "lib/Naked/toolshed/c/types.pyx":275 - * #------------------------------------------------------------------------------ - * def random(self): - * import random # <<<<<<<<<<<<<< - * from Naked.toolshed.python import py_major_version - * random_key_list = random.sample(self.keys(), 1) - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_random = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":276 - * def random(self): - * import random - * from Naked.toolshed.python import py_major_version # <<<<<<<<<<<<<< - * random_key_list = random.sample(self.keys(), 1) - * the_key = random_key_list[0] - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_py_major_version); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_py_major_version); - __Pyx_GIVEREF(__pyx_n_s_py_major_version); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_toolshed_python, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_py_major_version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_py_major_version = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":277 - * import random - * from Naked.toolshed.python import py_major_version - * random_key_list = random.sample(self.keys(), 1) # <<<<<<<<<<<<<< - * the_key = random_key_list[0] - * return {the_key: self[the_key]} - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_sample); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_int_1); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_random_key_list = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":278 - * from Naked.toolshed.python import py_major_version - * random_key_list = random.sample(self.keys(), 1) - * the_key = random_key_list[0] # <<<<<<<<<<<<<< - * return {the_key: self[the_key]} - * - */ - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_random_key_list, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_the_key = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":279 - * random_key_list = random.sample(self.keys(), 1) - * the_key = random_key_list[0] - * return {the_key: self[the_key]} # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyObject_GetItem(__pyx_v_self, __pyx_v_the_key); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_3, __pyx_v_the_key, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":274 - * # Test: test_xdict_key_random - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * from Naked.toolshed.python import py_major_version - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.random", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_random); - __Pyx_XDECREF(__pyx_v_py_major_version); - __Pyx_XDECREF(__pyx_v_random_key_list); - __Pyx_XDECREF(__pyx_v_the_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":286 - * # Test: test_xdict_key_random_sample - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * random_key_list = random.sample(self.keys(), number_of_items) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_37random_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_37random_sample = {__Pyx_NAMESTR("random_sample"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_37random_sample, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_37random_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_number_of_items = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("random_sample (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_number_of_items,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_number_of_items)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("random_sample", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "random_sample") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_number_of_items = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("random_sample", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.random_sample", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_36random_sample(__pyx_self, __pyx_v_self, __pyx_v_number_of_items); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_36random_sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_number_of_items) { - PyObject *__pyx_v_random = NULL; - PyObject *__pyx_v_random_key_list = NULL; - PyObject *__pyx_v_new_dict = NULL; - PyObject *__pyx_v_item = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("random_sample", 0); - - /* "lib/Naked/toolshed/c/types.pyx":287 - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): - * import random # <<<<<<<<<<<<<< - * random_key_list = random.sample(self.keys(), number_of_items) - * new_dict = {} - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_random = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":288 - * def random_sample(self, number_of_items): - * import random - * random_key_list = random.sample(self.keys(), number_of_items) # <<<<<<<<<<<<<< - * new_dict = {} - * for item in random_key_list: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_sample); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_number_of_items); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_number_of_items); - __Pyx_GIVEREF(__pyx_v_number_of_items); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_random_key_list = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":289 - * import random - * random_key_list = random.sample(self.keys(), number_of_items) - * new_dict = {} # <<<<<<<<<<<<<< - * for item in random_key_list: - * new_dict[item] = self[item] - */ - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_new_dict = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":290 - * random_key_list = random.sample(self.keys(), number_of_items) - * new_dict = {} - * for item in random_key_list: # <<<<<<<<<<<<<< - * new_dict[item] = self[item] - * return new_dict - */ - if (PyList_CheckExact(__pyx_v_random_key_list) || PyTuple_CheckExact(__pyx_v_random_key_list)) { - __pyx_t_3 = __pyx_v_random_key_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_random_key_list); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":291 - * new_dict = {} - * for item in random_key_list: - * new_dict[item] = self[item] # <<<<<<<<<<<<<< - * return new_dict - * - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_self, __pyx_v_item); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - if (unlikely(PyDict_SetItem(__pyx_v_new_dict, __pyx_v_item, __pyx_t_2) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 291; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":292 - * for item in random_key_list: - * new_dict[item] = self[item] - * return new_dict # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_new_dict); - __pyx_r = __pyx_v_new_dict; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":286 - * # Test: test_xdict_key_random_sample - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * random_key_list = random.sample(self.keys(), number_of_items) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.random_sample", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_random); - __Pyx_XDECREF(__pyx_v_random_key_list); - __Pyx_XDECREF(__pyx_v_new_dict); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":300 - * # Test: test_xdict_xitems - * #------------------------------------------------------------------------------ - * def xitems(self): # <<<<<<<<<<<<<< - * from Naked.toolshed.python import py_major_version - * if py_major_version() > 2: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_39xitems(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_39xitems = {__Pyx_NAMESTR("xitems"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_39xitems, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XDict_39xitems(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xitems (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_38xitems(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_38xitems(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_py_major_version = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xitems", 0); - - /* "lib/Naked/toolshed/c/types.pyx":301 - * #------------------------------------------------------------------------------ - * def xitems(self): - * from Naked.toolshed.python import py_major_version # <<<<<<<<<<<<<< - * if py_major_version() > 2: - * return self.items() - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_py_major_version); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_py_major_version); - __Pyx_GIVEREF(__pyx_n_s_py_major_version); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_toolshed_python, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_py_major_version); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_py_major_version = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":302 - * def xitems(self): - * from Naked.toolshed.python import py_major_version - * if py_major_version() > 2: # <<<<<<<<<<<<<< - * return self.items() - * else: - */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_py_major_version, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_3) { - - /* "lib/Naked/toolshed/c/types.pyx":303 - * from Naked.toolshed.python import py_major_version - * if py_major_version() > 2: - * return self.items() # <<<<<<<<<<<<<< - * else: - * return self.iteritems() - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":305 - * return self.items() - * else: - * return self.iteritems() # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_iteritems); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":300 - * # Test: test_xdict_xitems - * #------------------------------------------------------------------------------ - * def xitems(self): # <<<<<<<<<<<<<< - * from Naked.toolshed.python import py_major_version - * if py_major_version() > 2: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XDict.xitems", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_py_major_version); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":312 - * #------------------------------------------------------------------------------ - * class XList(list, NakedObject): - * def __init__(self, list_obj, attributes={}, naked_type='XList'): # <<<<<<<<<<<<<< - * list.__init__(self, list_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_56__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XList)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XList)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XList)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_list_obj = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_list_obj,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults2 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XList)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_list_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_list_obj = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList___init__(__pyx_self, __pyx_v_self, __pyx_v_list_obj, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_list_obj, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":313 - * class XList(list, NakedObject): - * def __init__(self, list_obj, attributes={}, naked_type='XList'): - * list.__init__(self, list_obj) # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_list_obj); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_list_obj); - __Pyx_GIVEREF(__pyx_v_list_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":314 - * def __init__(self, list_obj, attributes={}, naked_type='XList'): - * list.__init__(self, list_obj) - * NakedObject.__init__(self, attributes, naked_type) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __Pyx_INCREF(__pyx_v_naked_type); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_naked_type); - __Pyx_GIVEREF(__pyx_v_naked_type); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":312 - * #------------------------------------------------------------------------------ - * class XList(list, NakedObject): - * def __init__(self, list_obj, attributes={}, naked_type='XList'): # <<<<<<<<<<<<<< - * list.__init__(self, list_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":324 - * # extends XList with one or more other lists (`*other_lists`) - * #------------------------------------------------------------------------------ - * def __add__(self, *other_lists): # <<<<<<<<<<<<<< - * try: - * for the_list in other_lists: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_3__add__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_3__add__ = {__Pyx_NAMESTR("__add__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_3__add__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_3__add__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_lists = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__add__ (wrapper)", 0); - if (PyTuple_GET_SIZE(__pyx_args) > 1) { - __pyx_v_other_lists = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); - if (unlikely(!__pyx_v_other_lists)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_v_other_lists); - } else { - __pyx_v_other_lists = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); - } - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - default: - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__add__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - } - __pyx_v_self = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__add__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_DECREF(__pyx_v_other_lists); __pyx_v_other_lists = 0; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_2__add__(__pyx_self, __pyx_v_self, __pyx_v_other_lists); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_other_lists); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_2__add__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_lists) { - PyObject *__pyx_v_the_list = NULL; - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - Py_ssize_t __pyx_t_11; - PyObject *(*__pyx_t_12)(PyObject *); - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - int __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__add__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":325 - * #------------------------------------------------------------------------------ - * def __add__(self, *other_lists): - * try: # <<<<<<<<<<<<<< - * for the_list in other_lists: - * # add attributes if it is an XList - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/types.pyx":326 - * def __add__(self, *other_lists): - * try: - * for the_list in other_lists: # <<<<<<<<<<<<<< - * # add attributes if it is an XList - * if hasattr(the_list, '_naked_type_') and (getattr(the_list, '_naked_type_') == 'XList'): - */ - __pyx_t_4 = __pyx_v_other_lists; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; - for (;;) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_6); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_the_list, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":328 - * for the_list in other_lists: - * # add attributes if it is an XList - * if hasattr(the_list, '_naked_type_') and (getattr(the_list, '_naked_type_') == 'XList'): # <<<<<<<<<<<<<< - * attr_dict = the_list._getAttributeDict() # get XList attribute dictionary - * if len(attr_dict) > 0: - */ - __pyx_t_7 = PyObject_HasAttr(__pyx_v_the_list, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_7) { - __pyx_t_6 = __Pyx_GetAttr(__pyx_v_the_list, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_XList, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_9 = __pyx_t_8; - } else { - __pyx_t_9 = __pyx_t_7; - } - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":329 - * # add attributes if it is an XList - * if hasattr(the_list, '_naked_type_') and (getattr(the_list, '_naked_type_') == 'XList'): - * attr_dict = the_list._getAttributeDict() # get XList attribute dictionary # <<<<<<<<<<<<<< - * if len(attr_dict) > 0: - * for key in attr_dict: - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_the_list, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_attr_dict, __pyx_t_10); - __pyx_t_10 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":330 - * if hasattr(the_list, '_naked_type_') and (getattr(the_list, '_naked_type_') == 'XList'): - * attr_dict = the_list._getAttributeDict() # get XList attribute dictionary - * if len(attr_dict) > 0: # <<<<<<<<<<<<<< - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) - */ - __pyx_t_11 = PyObject_Length(__pyx_v_attr_dict); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_9 = ((__pyx_t_11 > 0) != 0); - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":331 - * attr_dict = the_list._getAttributeDict() # get XList attribute dictionary - * if len(attr_dict) > 0: - * for key in attr_dict: # <<<<<<<<<<<<<< - * setattr(self, key, attr_dict[key]) - * # extend the XList items - */ - if (PyList_CheckExact(__pyx_v_attr_dict) || PyTuple_CheckExact(__pyx_v_attr_dict)) { - __pyx_t_10 = __pyx_v_attr_dict; __Pyx_INCREF(__pyx_t_10); __pyx_t_11 = 0; - __pyx_t_12 = NULL; - } else { - __pyx_t_11 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_v_attr_dict); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_12 = Py_TYPE(__pyx_t_10)->tp_iternext; - } - for (;;) { - if (!__pyx_t_12 && PyList_CheckExact(__pyx_t_10)) { - if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_10)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_10, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_12 && PyTuple_CheckExact(__pyx_t_10)) { - if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_10)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_11); __Pyx_INCREF(__pyx_t_6); __pyx_t_11++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_10, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_6 = __pyx_t_12(__pyx_t_10); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6); - __pyx_t_6 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":332 - * if len(attr_dict) > 0: - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) # <<<<<<<<<<<<<< - * # extend the XList items - * self.extend(the_list) - */ - __pyx_t_6 = PyObject_GetItem(__pyx_v_attr_dict, __pyx_v_key); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_13 = PyObject_SetAttr(__pyx_v_self, __pyx_v_key, __pyx_t_6); if (unlikely(__pyx_t_13 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L14; - } - __pyx_L14:; - goto __pyx_L13; - } - __pyx_L13:; - - /* "lib/Naked/toolshed/c/types.pyx":334 - * setattr(self, key, attr_dict[key]) - * # extend the XList items - * self.extend(the_list) # <<<<<<<<<<<<<< - * return self - * except Exception as e: - */ - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_extend); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_the_list); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_the_list); - __Pyx_GIVEREF(__pyx_v_the_list); - __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_6, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":335 - * # extend the XList items - * self.extend(the_list) - * return self # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":336 - * self.extend(the_list) - * return self - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - */ - __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_15) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_14, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 336; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_14); - __pyx_v_e = __pyx_t_14; - - /* "lib/Naked/toolshed/c/types.pyx":337 - * return self - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - * raise e - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_9 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (__pyx_t_9) { - - /* "lib/Naked/toolshed/c/types.pyx":338 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_stderr); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - goto __pyx_L19; - } - __pyx_L19:; - - /* "lib/Naked/toolshed/c/types.pyx":339 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/types.pyx":324 - * # extends XList with one or more other lists (`*other_lists`) - * #------------------------------------------------------------------------------ - * def __add__(self, *other_lists): # <<<<<<<<<<<<<< - * try: - * for the_list in other_lists: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_the_list); - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":345 - * # extends XList with one other list (`another_list`) - * #------------------------------------------------------------------------------ - * def __iadd__(self, another_list): # <<<<<<<<<<<<<< - * try: - * #add attributes if it is an XList - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_5__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_5__iadd__ = {__Pyx_NAMESTR("__iadd__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_5__iadd__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_5__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_list = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_list,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_list)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__iadd__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_list = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_4__iadd__(__pyx_self, __pyx_v_self, __pyx_v_another_list); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_4__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_list) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_v_e = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - PyObject *(*__pyx_t_10)(PyObject *); - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__iadd__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":346 - * #------------------------------------------------------------------------------ - * def __iadd__(self, another_list): - * try: # <<<<<<<<<<<<<< - * #add attributes if it is an XList - * if hasattr(another_list, '_naked_type_') and (getattr(another_list, '_naked_type_') == 'XList'): - */ - { - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "lib/Naked/toolshed/c/types.pyx":348 - * try: - * #add attributes if it is an XList - * if hasattr(another_list, '_naked_type_') and (getattr(another_list, '_naked_type_') == 'XList'): # <<<<<<<<<<<<<< - * attr_dict = another_list._getAttributeDict() # get XList attribute dictionary - * if len(attr_dict) > 0: - */ - __pyx_t_4 = PyObject_HasAttr(__pyx_v_another_list, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - if (__pyx_t_4) { - __pyx_t_5 = __Pyx_GetAttr(__pyx_v_another_list, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_XList, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __pyx_t_6; - } else { - __pyx_t_7 = __pyx_t_4; - } - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/types.pyx":349 - * #add attributes if it is an XList - * if hasattr(another_list, '_naked_type_') and (getattr(another_list, '_naked_type_') == 'XList'): - * attr_dict = another_list._getAttributeDict() # get XList attribute dictionary # <<<<<<<<<<<<<< - * if len(attr_dict) > 0: - * for key in attr_dict: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_another_list, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_attr_dict = __pyx_t_8; - __pyx_t_8 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":350 - * if hasattr(another_list, '_naked_type_') and (getattr(another_list, '_naked_type_') == 'XList'): - * attr_dict = another_list._getAttributeDict() # get XList attribute dictionary - * if len(attr_dict) > 0: # <<<<<<<<<<<<<< - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) - */ - __pyx_t_9 = PyObject_Length(__pyx_v_attr_dict); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_t_7 = ((__pyx_t_9 > 0) != 0); - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/types.pyx":351 - * attr_dict = another_list._getAttributeDict() # get XList attribute dictionary - * if len(attr_dict) > 0: - * for key in attr_dict: # <<<<<<<<<<<<<< - * setattr(self, key, attr_dict[key]) - * # extend the XList items - */ - if (PyList_CheckExact(__pyx_v_attr_dict) || PyTuple_CheckExact(__pyx_v_attr_dict)) { - __pyx_t_8 = __pyx_v_attr_dict; __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = 0; - __pyx_t_10 = NULL; - } else { - __pyx_t_9 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_attr_dict); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_10 = Py_TYPE(__pyx_t_8)->tp_iternext; - } - for (;;) { - if (!__pyx_t_10 && PyList_CheckExact(__pyx_t_8)) { - if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else if (!__pyx_t_10 && PyTuple_CheckExact(__pyx_t_8)) { - if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_8)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_5); __pyx_t_9++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_10(__pyx_t_8); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5); - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":352 - * if len(attr_dict) > 0: - * for key in attr_dict: - * setattr(self, key, attr_dict[key]) # <<<<<<<<<<<<<< - * # extend the XList items - * self.extend(another_list) - */ - __pyx_t_5 = PyObject_GetItem(__pyx_v_attr_dict, __pyx_v_key); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L3_error;}; - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_11 = PyObject_SetAttr(__pyx_v_self, __pyx_v_key, __pyx_t_5); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L12; - } - __pyx_L12:; - goto __pyx_L11; - } - __pyx_L11:; - - /* "lib/Naked/toolshed/c/types.pyx":354 - * setattr(self, key, attr_dict[key]) - * # extend the XList items - * self.extend(another_list) # <<<<<<<<<<<<<< - * return self - * except Exception as e: - */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_extend); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_another_list); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_another_list); - __Pyx_GIVEREF(__pyx_v_another_list); - __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_5, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":355 - * # extend the XList items - * self.extend(another_list) - * return self # <<<<<<<<<<<<<< - * except Exception as e: - * if DEBUG_FLAG: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L7_try_return; - } - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L10_try_end; - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":356 - * self.extend(another_list) - * return self - * except Exception as e: # <<<<<<<<<<<<<< - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - */ - __pyx_t_13 = PyErr_ExceptionMatches(__pyx_builtin_Exception); - if (__pyx_t_13) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_5, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_12); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_e = __pyx_t_5; - - /* "lib/Naked/toolshed/c/types.pyx":357 - * return self - * except Exception as e: - * if DEBUG_FLAG: # <<<<<<<<<<<<<< - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - * raise e - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG_FLAG); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/types.pyx":358 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_stderr); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - goto __pyx_L17; - } - __pyx_L17:; - - /* "lib/Naked/toolshed/c/types.pyx":359 - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - * raise e # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_Raise(__pyx_v_e, 0, 0, 0); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;} - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - goto __pyx_L4_exception_handled; - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L4_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - __pyx_L10_try_end:; - } - - /* "lib/Naked/toolshed/c/types.pyx":345 - * # extends XList with one other list (`another_list`) - * #------------------------------------------------------------------------------ - * def __iadd__(self, another_list): # <<<<<<<<<<<<<< - * try: - * #add attributes if it is an XList - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_e); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":364 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_7__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_7__eq__ = {__Pyx_NAMESTR("__eq__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_7__eq__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_7__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_6__eq__(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_6__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__eq__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":365 - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): - * return self.equals(other_obj) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equals); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":364 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":370 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_9__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_9__ne__ = {__Pyx_NAMESTR("__ne__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_9__ne__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_9__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__ne__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ne__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_8__ne__(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_8__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__ne__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":371 - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): - * result = self.equals(other_obj) # <<<<<<<<<<<<<< - * if result: - * return False # reverse result of the equals method - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equals); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":372 - * def __ne__(self, other_obj): - * result = self.equals(other_obj) - * if result: # <<<<<<<<<<<<<< - * return False # reverse result of the equals method - * else: - */ - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_result); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_4) { - - /* "lib/Naked/toolshed/c/types.pyx":373 - * result = self.equals(other_obj) - * if result: - * return False # reverse result of the equals method # <<<<<<<<<<<<<< - * else: - * return True - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":375 - * return False # reverse result of the equals method - * else: - * return True # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":370 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":381 - * # tests for equality of the XList (type, attributes, list equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if list(self) == list(other_obj): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_11equals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_11equals = {__Pyx_NAMESTR("equals"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_11equals, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_11equals(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_obj = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("equals (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_obj,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("equals", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equals") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_obj = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("equals", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.equals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_10equals(__pyx_self, __pyx_v_self, __pyx_v_other_obj); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_10equals(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_obj) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equals", 0); - - /* "lib/Naked/toolshed/c/types.pyx":382 - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): # <<<<<<<<<<<<<< - * if list(self) == list(other_obj): - * return True - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equal_type); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_4) { - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_equal_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __pyx_t_5; - } else { - __pyx_t_6 = __pyx_t_4; - } - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":383 - * def equals(self, other_obj): - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if list(self) == list(other_obj): # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_other_obj); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_other_obj); - __Pyx_GIVEREF(__pyx_v_other_obj); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":384 - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if list(self) == list(other_obj): - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":386 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":388 - * return False - * else: - * return False # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":381 - * # tests for equality of the XList (type, attributes, list equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if list(self) == list(other_obj): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.equals", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":402 - * # Pass separator character(s) as an argument to the method - * #------------------------------------------------------------------------------ - * def join(self, separator=""): # <<<<<<<<<<<<<< - * return separator.join(self) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_13join(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_13join = {__Pyx_NAMESTR("join"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_13join, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_13join(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_separator = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("join (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_separator,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)((PyObject*)__pyx_kp_s__5)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_separator); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "join") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_separator = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("join", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.join", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_12join(__pyx_self, __pyx_v_self, __pyx_v_separator); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_12join(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_separator) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("join", 0); - - /* "lib/Naked/toolshed/c/types.pyx":403 - * #------------------------------------------------------------------------------ - * def join(self, separator=""): - * return separator.join(self) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_separator, __pyx_n_s_join); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":402 - * # Pass separator character(s) as an argument to the method - * #------------------------------------------------------------------------------ - * def join(self, separator=""): # <<<<<<<<<<<<<< - * return separator.join(self) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.join", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":409 - * # Append a string to each list item string - * #------------------------------------------------------------------------------ - * def postfix(self, after): # <<<<<<<<<<<<<< - * return [ "".join([x, after]) for x in self ] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_15postfix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_15postfix = {__Pyx_NAMESTR("postfix"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_15postfix, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_15postfix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_after = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("postfix (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_after,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_after)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("postfix", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "postfix") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_after = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("postfix", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.postfix", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_14postfix(__pyx_self, __pyx_v_self, __pyx_v_after); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_14postfix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_after) { - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("postfix", 0); - - /* "lib/Naked/toolshed/c/types.pyx":410 - * #------------------------------------------------------------------------------ - * def postfix(self, after): - * return [ "".join([x, after]) for x in self ] # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_2 = __pyx_v_self; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_x); - PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __Pyx_INCREF(__pyx_v_after); - PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_after); - __Pyx_GIVEREF(__pyx_v_after); - __pyx_t_6 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":409 - * # Append a string to each list item string - * #------------------------------------------------------------------------------ - * def postfix(self, after): # <<<<<<<<<<<<<< - * return [ "".join([x, after]) for x in self ] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.postfix", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":416 - * # Prepend a string to each list item string - * #------------------------------------------------------------------------------ - * def prefix(self, before): # <<<<<<<<<<<<<< - * return [ "".join([before, x]) for x in self ] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_17prefix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_17prefix = {__Pyx_NAMESTR("prefix"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_17prefix, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_17prefix(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_before = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("prefix (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_before,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_before)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("prefix", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "prefix") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_before = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("prefix", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.prefix", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_16prefix(__pyx_self, __pyx_v_self, __pyx_v_before); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_16prefix(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_before) { - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("prefix", 0); - - /* "lib/Naked/toolshed/c/types.pyx":417 - * #------------------------------------------------------------------------------ - * def prefix(self, before): - * return [ "".join([before, x]) for x in self ] # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_2 = __pyx_v_self; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_before); - PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_before); - __Pyx_GIVEREF(__pyx_v_before); - __Pyx_INCREF(__pyx_v_x); - PyList_SET_ITEM(__pyx_t_5, 1, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __pyx_t_6 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 417; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":416 - * # Prepend a string to each list item string - * #------------------------------------------------------------------------------ - * def prefix(self, before): # <<<<<<<<<<<<<< - * return [ "".join([before, x]) for x in self ] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.prefix", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":423 - * # Surround each list item string with a before and after string argument passed to the method - * #------------------------------------------------------------------------------ - * def surround(self, before, after=""): # <<<<<<<<<<<<<< - * if after == "": - * after = before - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_19surround(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_19surround = {__Pyx_NAMESTR("surround"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_19surround, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_19surround(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_before = 0; - PyObject *__pyx_v_after = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("surround (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_before,&__pyx_n_s_after,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject*)__pyx_kp_s__5)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_before)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("surround", 0, 2, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_after); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "surround") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_before = values[1]; - __pyx_v_after = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("surround", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.surround", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_18surround(__pyx_self, __pyx_v_self, __pyx_v_before, __pyx_v_after); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_18surround(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_before, PyObject *__pyx_v_after) { - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - PyObject *(*__pyx_t_5)(PyObject *); - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("surround", 0); - __Pyx_INCREF(__pyx_v_after); - - /* "lib/Naked/toolshed/c/types.pyx":424 - * #------------------------------------------------------------------------------ - * def surround(self, before, after=""): - * if after == "": # <<<<<<<<<<<<<< - * after = before - * return [ "".join([before, x, after]) for x in self ] - */ - __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_after, __pyx_kp_s__5, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (__pyx_t_1) { - - /* "lib/Naked/toolshed/c/types.pyx":425 - * def surround(self, before, after=""): - * if after == "": - * after = before # <<<<<<<<<<<<<< - * return [ "".join([before, x, after]) for x in self ] - * - */ - __Pyx_INCREF(__pyx_v_before); - __Pyx_DECREF_SET(__pyx_v_after, __pyx_v_before); - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":426 - * if after == "": - * after = before - * return [ "".join([before, x, after]) for x in self ] # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_3 = __pyx_v_self; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_5 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_5 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_5 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_6 = __pyx_t_5(__pyx_t_3); - if (unlikely(!__pyx_t_6)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_6); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_before); - PyList_SET_ITEM(__pyx_t_6, 0, __pyx_v_before); - __Pyx_GIVEREF(__pyx_v_before); - __Pyx_INCREF(__pyx_v_x); - PyList_SET_ITEM(__pyx_t_6, 1, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __Pyx_INCREF(__pyx_v_after); - PyList_SET_ITEM(__pyx_t_6, 2, __pyx_v_after); - __Pyx_GIVEREF(__pyx_v_after); - __pyx_t_7 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_7))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":423 - * # Surround each list item string with a before and after string argument passed to the method - * #------------------------------------------------------------------------------ - * def surround(self, before, after=""): # <<<<<<<<<<<<<< - * if after == "": - * after = before - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.surround", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XDECREF(__pyx_v_after); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":434 - * # return maximum value from the list items - * #------------------------------------------------------------------------------ - * def max(self): # <<<<<<<<<<<<<< - * return max(self) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_21max(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_21max = {__Pyx_NAMESTR("max"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_21max, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_21max(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("max (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_20max(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_20max(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("max", 0); - - /* "lib/Naked/toolshed/c/types.pyx":435 - * #------------------------------------------------------------------------------ - * def max(self): - * return max(self) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_max, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":434 - * # return maximum value from the list items - * #------------------------------------------------------------------------------ - * def max(self): # <<<<<<<<<<<<<< - * return max(self) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.max", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":441 - * # return minimum value from the list items - * #------------------------------------------------------------------------------ - * def min(self): # <<<<<<<<<<<<<< - * return min(self) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_23min(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_23min = {__Pyx_NAMESTR("min"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_23min, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_23min(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("min (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_22min(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_22min(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("min", 0); - - /* "lib/Naked/toolshed/c/types.pyx":442 - * #------------------------------------------------------------------------------ - * def min(self): - * return min(self) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_min, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":441 - * # return minimum value from the list items - * #------------------------------------------------------------------------------ - * def min(self): # <<<<<<<<<<<<<< - * return min(self) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.min", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":448 - * # return the sum of all list items - * #------------------------------------------------------------------------------ - * def sum(self): # <<<<<<<<<<<<<< - * return sum(self) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_25sum(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_25sum = {__Pyx_NAMESTR("sum"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_25sum, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_25sum(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("sum (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_24sum(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_24sum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("sum", 0); - - /* "lib/Naked/toolshed/c/types.pyx":449 - * #------------------------------------------------------------------------------ - * def sum(self): - * return sum(self) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":448 - * # return the sum of all list items - * #------------------------------------------------------------------------------ - * def sum(self): # <<<<<<<<<<<<<< - * return sum(self) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.sum", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":458 - * # returns an integer count of number of duplicate values - * #------------------------------------------------------------------------------ - * def count_duplicates(self): # <<<<<<<<<<<<<< - * return len(self) - len(set(self)) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_27count_duplicates(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_27count_duplicates = {__Pyx_NAMESTR("count_duplicates"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_27count_duplicates, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_27count_duplicates(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("count_duplicates (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_26count_duplicates(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_26count_duplicates(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("count_duplicates", 0); - - /* "lib/Naked/toolshed/c/types.pyx":459 - * #------------------------------------------------------------------------------ - * def count_duplicates(self): - * return len(self) - len(set(self)) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_Length(__pyx_v_self); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_4 = PySet_Size(__pyx_t_3); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyInt_FromSsize_t((__pyx_t_1 - __pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":458 - * # returns an integer count of number of duplicate values - * #------------------------------------------------------------------------------ - * def count_duplicates(self): # <<<<<<<<<<<<<< - * return len(self) - len(set(self)) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.count_duplicates", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":465 - * # returns a new XList with duplicates removed - * #------------------------------------------------------------------------------ - * def remove_duplicates(self): # <<<<<<<<<<<<<< - * return XList( set(self), self._getAttributeDict() ) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_29remove_duplicates(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_29remove_duplicates = {__Pyx_NAMESTR("remove_duplicates"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_29remove_duplicates, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_29remove_duplicates(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("remove_duplicates (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_28remove_duplicates(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_28remove_duplicates(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("remove_duplicates", 0); - - /* "lib/Naked/toolshed/c/types.pyx":466 - * #------------------------------------------------------------------------------ - * def remove_duplicates(self): - * return XList( set(self), self._getAttributeDict() ) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_XList); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":465 - * # returns a new XList with duplicates removed - * #------------------------------------------------------------------------------ - * def remove_duplicates(self): # <<<<<<<<<<<<<< - * return XList( set(self), self._getAttributeDict() ) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.remove_duplicates", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":472 - * # returns a set containing items in XList that are not contained in `another_list` - * #------------------------------------------------------------------------------ - * def difference(self, another_list): # <<<<<<<<<<<<<< - * return set(self) - set(another_list) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_31difference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_31difference = {__Pyx_NAMESTR("difference"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_31difference, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_31difference(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_list = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("difference (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_list,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_list)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("difference", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "difference") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_list = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("difference", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.difference", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_30difference(__pyx_self, __pyx_v_self, __pyx_v_another_list); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_30difference(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_list) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("difference", 0); - - /* "lib/Naked/toolshed/c/types.pyx":473 - * #------------------------------------------------------------------------------ - * def difference(self, another_list): - * return set(self) - set(another_list) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_another_list); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_another_list); - __Pyx_GIVEREF(__pyx_v_another_list); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_Subtract(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":472 - * # returns a set containing items in XList that are not contained in `another_list` - * #------------------------------------------------------------------------------ - * def difference(self, another_list): # <<<<<<<<<<<<<< - * return set(self) - set(another_list) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.difference", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":479 - * # returns a set containing items that are in both XList and `another_list` - * #------------------------------------------------------------------------------ - * def intersection(self, another_list): # <<<<<<<<<<<<<< - * return set(self) & set(another_list) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_33intersection(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_33intersection = {__Pyx_NAMESTR("intersection"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_33intersection, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_33intersection(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_list = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("intersection (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_list,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_list)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("intersection", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "intersection") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_list = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("intersection", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.intersection", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_32intersection(__pyx_self, __pyx_v_self, __pyx_v_another_list); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_32intersection(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_list) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("intersection", 0); - - /* "lib/Naked/toolshed/c/types.pyx":480 - * #------------------------------------------------------------------------------ - * def intersection(self, another_list): - * return set(self) & set(another_list) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_another_list); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_another_list); - __Pyx_GIVEREF(__pyx_v_another_list); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyNumber_And(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":479 - * # returns a set containing items that are in both XList and `another_list` - * #------------------------------------------------------------------------------ - * def intersection(self, another_list): # <<<<<<<<<<<<<< - * return set(self) & set(another_list) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.intersection", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":489 - * # returns original XList with modification of each item based upon `mapped_function` - * #------------------------------------------------------------------------------ - * def map_to_items(self, mapped_function): # <<<<<<<<<<<<<< - * # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - * for index, item in enumerate(self): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_35map_to_items(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_35map_to_items = {__Pyx_NAMESTR("map_to_items"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_35map_to_items, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_35map_to_items(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_mapped_function = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("map_to_items (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mapped_function,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mapped_function)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("map_to_items", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "map_to_items") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_mapped_function = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("map_to_items", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.map_to_items", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_34map_to_items(__pyx_self, __pyx_v_self, __pyx_v_mapped_function); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_34map_to_items(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mapped_function) { - PyObject *__pyx_v_index = NULL; - PyObject *__pyx_v_item = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("map_to_items", 0); - - /* "lib/Naked/toolshed/c/types.pyx":491 - * def map_to_items(self, mapped_function): - * # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - * for index, item in enumerate(self): # <<<<<<<<<<<<<< - * self[index] = mapped_function(item) - * return self - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_t_1 = __pyx_int_0; - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_2 = __pyx_v_self; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5); - __pyx_t_5 = 0; - __Pyx_INCREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_1); - __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":492 - * # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - * for index, item in enumerate(self): - * self[index] = mapped_function(item) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_item); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_item); - __Pyx_GIVEREF(__pyx_v_item); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_mapped_function, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_self, __pyx_v_index, __pyx_t_6) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":493 - * for index, item in enumerate(self): - * self[index] = mapped_function(item) - * return self # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":489 - * # returns original XList with modification of each item based upon `mapped_function` - * #------------------------------------------------------------------------------ - * def map_to_items(self, mapped_function): # <<<<<<<<<<<<<< - * # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - * for index, item in enumerate(self): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.map_to_items", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":500 - * # `conditional_function` with change performed as defined in `mapped_function` - * #------------------------------------------------------------------------------ - * def conditional_map_to_items(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for index, item in enumerate(self): - * if conditional_function(item): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_37conditional_map_to_items(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_37conditional_map_to_items = {__Pyx_NAMESTR("conditional_map_to_items"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_37conditional_map_to_items, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_37conditional_map_to_items(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_conditional_function = 0; - PyObject *__pyx_v_mapped_function = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("conditional_map_to_items (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_conditional_function,&__pyx_n_s_mapped_function,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_conditional_function)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("conditional_map_to_items", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mapped_function)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("conditional_map_to_items", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "conditional_map_to_items") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_conditional_function = values[1]; - __pyx_v_mapped_function = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("conditional_map_to_items", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.conditional_map_to_items", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_36conditional_map_to_items(__pyx_self, __pyx_v_self, __pyx_v_conditional_function, __pyx_v_mapped_function); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_36conditional_map_to_items(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_conditional_function, PyObject *__pyx_v_mapped_function) { - PyObject *__pyx_v_index = NULL; - PyObject *__pyx_v_item = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("conditional_map_to_items", 0); - - /* "lib/Naked/toolshed/c/types.pyx":501 - * #------------------------------------------------------------------------------ - * def conditional_map_to_items(self, conditional_function, mapped_function): - * for index, item in enumerate(self): # <<<<<<<<<<<<<< - * if conditional_function(item): - * self[index] = mapped_function(item) - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_t_1 = __pyx_int_0; - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_2 = __pyx_v_self; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; - } - for (;;) { - if (!__pyx_t_4 && PyList_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_4 && PyTuple_CheckExact(__pyx_t_2)) { - if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_5); - __pyx_t_5 = 0; - __Pyx_INCREF(__pyx_t_1); - __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_1); - __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_int_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 501; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); - __pyx_t_1 = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":502 - * def conditional_map_to_items(self, conditional_function, mapped_function): - * for index, item in enumerate(self): - * if conditional_function(item): # <<<<<<<<<<<<<< - * self[index] = mapped_function(item) - * return self - */ - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_item); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_item); - __Pyx_GIVEREF(__pyx_v_item); - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_conditional_function, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_7) { - - /* "lib/Naked/toolshed/c/types.pyx":503 - * for index, item in enumerate(self): - * if conditional_function(item): - * self[index] = mapped_function(item) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_INCREF(__pyx_v_item); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_item); - __Pyx_GIVEREF(__pyx_v_item); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_mapped_function, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(PyObject_SetItem(__pyx_v_self, __pyx_v_index, __pyx_t_5) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L5; - } - __pyx_L5:; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":504 - * if conditional_function(item): - * self[index] = mapped_function(item) - * return self # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":500 - * # `conditional_function` with change performed as defined in `mapped_function` - * #------------------------------------------------------------------------------ - * def conditional_map_to_items(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for index, item in enumerate(self): - * if conditional_function(item): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.conditional_map_to_items", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":513 - * # returns an integer count of the number of case-insensitive items that match `test_string` - * #------------------------------------------------------------------------------ - * def count_ci(self, test_string): # <<<<<<<<<<<<<< - * count = 0 - * for item in self: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_39count_ci(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_39count_ci = {__Pyx_NAMESTR("count_ci"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_39count_ci, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_39count_ci(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_test_string = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("count_ci (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_test_string,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_test_string)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("count_ci", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count_ci") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_test_string = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("count_ci", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.count_ci", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_38count_ci(__pyx_self, __pyx_v_self, __pyx_v_test_string); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_38count_ci(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_test_string) { - PyObject *__pyx_v_count = NULL; - PyObject *__pyx_v_item = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *(*__pyx_t_3)(PyObject *); - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - int __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("count_ci", 0); - - /* "lib/Naked/toolshed/c/types.pyx":514 - * #------------------------------------------------------------------------------ - * def count_ci(self, test_string): - * count = 0 # <<<<<<<<<<<<<< - * for item in self: - * try: - */ - __Pyx_INCREF(__pyx_int_0); - __pyx_v_count = __pyx_int_0; - - /* "lib/Naked/toolshed/c/types.pyx":515 - * def count_ci(self, test_string): - * count = 0 - * for item in self: # <<<<<<<<<<<<<< - * try: - * if test_string.lower() in item.lower(): - */ - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_1 = __pyx_v_self; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - __pyx_t_3 = NULL; - } else { - __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; - } - for (;;) { - if (!__pyx_t_3 && PyList_CheckExact(__pyx_t_1)) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_3 && PyTuple_CheckExact(__pyx_t_1)) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_4 = __pyx_t_3(__pyx_t_1); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":516 - * count = 0 - * for item in self: - * try: # <<<<<<<<<<<<<< - * if test_string.lower() in item.lower(): - * count += 1 - */ - { - __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); - /*try:*/ { - - /* "lib/Naked/toolshed/c/types.pyx":517 - * for item in self: - * try: - * if test_string.lower() in item.lower(): # <<<<<<<<<<<<<< - * count += 1 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_test_string, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_10 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_t_9, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __pyx_t_11 = (__pyx_t_10 != 0); - if (__pyx_t_11) { - - /* "lib/Naked/toolshed/c/types.pyx":518 - * try: - * if test_string.lower() in item.lower(): - * count += 1 # <<<<<<<<<<<<<< - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - * continue - */ - __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_count, __pyx_int_1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L5_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF_SET(__pyx_v_count, __pyx_t_9); - __pyx_t_9 = 0; - goto __pyx_L13; - } - __pyx_L13:; - } - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L12_try_end; - __pyx_L5_error:; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":519 - * if test_string.lower() in item.lower(): - * count += 1 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt # <<<<<<<<<<<<<< - * continue - * return count - */ - __pyx_t_12 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError); - if (__pyx_t_12) { - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.count_ci", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;} - __Pyx_GOTREF(__pyx_t_9); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_4); - - /* "lib/Naked/toolshed/c/types.pyx":520 - * count += 1 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - * continue # <<<<<<<<<<<<<< - * return count - * - */ - goto __pyx_L15_except_continue; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L6_exception_handled; - __pyx_L15_except_continue:; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L11_try_continue; - } - goto __pyx_L7_except_error; - __pyx_L7_except_error:; - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); - goto __pyx_L1_error; - __pyx_L11_try_continue:; - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); - goto __pyx_L3_continue; - __pyx_L6_exception_handled:; - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7); - __pyx_L12_try_end:; - } - __pyx_L3_continue:; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":521 - * except AttributeError: # the test_value was not a string, catch exception and continue count attempt - * continue - * return count # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_count); - __pyx_r = __pyx_v_count; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":513 - * # returns an integer count of the number of case-insensitive items that match `test_string` - * #------------------------------------------------------------------------------ - * def count_ci(self, test_string): # <<<<<<<<<<<<<< - * count = 0 - * for item in self: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.count_ci", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_count); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":527 - * # returns a single item list with a random element from the original XList - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * return random.choice(self) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_41random(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_41random = {__Pyx_NAMESTR("random"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_41random, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_41random(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("random (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_40random(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_40random(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_random = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("random", 0); - - /* "lib/Naked/toolshed/c/types.pyx":528 - * #------------------------------------------------------------------------------ - * def random(self): - * import random # <<<<<<<<<<<<<< - * return random.choice(self) - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_random = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":529 - * def random(self): - * import random - * return random.choice(self) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_choice); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":527 - * # returns a single item list with a random element from the original XList - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * return random.choice(self) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.random", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_random); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":536 - * # number of items determined by the `number_of_items` argument - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * return random.sample(self, number_of_items) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_43random_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_43random_sample = {__Pyx_NAMESTR("random_sample"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_43random_sample, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_43random_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_number_of_items = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("random_sample (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_number_of_items,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_number_of_items)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("random_sample", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "random_sample") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_number_of_items = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("random_sample", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.random_sample", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_42random_sample(__pyx_self, __pyx_v_self, __pyx_v_number_of_items); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_42random_sample(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_number_of_items) { - PyObject *__pyx_v_random = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("random_sample", 0); - - /* "lib/Naked/toolshed/c/types.pyx":537 - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): - * import random # <<<<<<<<<<<<<< - * return random.sample(self, number_of_items) - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_random = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":538 - * def random_sample(self, number_of_items): - * import random - * return random.sample(self, number_of_items) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_sample); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_number_of_items); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_number_of_items); - __Pyx_GIVEREF(__pyx_v_number_of_items); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":536 - * # number of items determined by the `number_of_items` argument - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * return random.sample(self, number_of_items) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.random_sample", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_random); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":544 - * # randomly shuffle the contents of the list - * #------------------------------------------------------------------------------ - * def shuffle(self): # <<<<<<<<<<<<<< - * import random - * random.shuffle(self) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_45shuffle(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_45shuffle = {__Pyx_NAMESTR("shuffle"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_45shuffle, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_45shuffle(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("shuffle (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_44shuffle(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_44shuffle(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_random = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("shuffle", 0); - - /* "lib/Naked/toolshed/c/types.pyx":545 - * #------------------------------------------------------------------------------ - * def shuffle(self): - * import random # <<<<<<<<<<<<<< - * random.shuffle(self) - * return self - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_random = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":546 - * def shuffle(self): - * import random - * random.shuffle(self) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_random, __pyx_n_s_shuffle); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":547 - * import random - * random.shuffle(self) - * return self # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":544 - * # randomly shuffle the contents of the list - * #------------------------------------------------------------------------------ - * def shuffle(self): # <<<<<<<<<<<<<< - * import random - * random.shuffle(self) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.shuffle", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_random); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":556 - * # returns a list of items that match the `wildcard` argument - * #------------------------------------------------------------------------------ - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_47wildcard_match(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_47wildcard_match = {__Pyx_NAMESTR("wildcard_match"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_47wildcard_match, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_47wildcard_match(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_wildcard = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wildcard_match (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_wildcard,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_wildcard)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("wildcard_match", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wildcard_match") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_wildcard = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("wildcard_match", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.wildcard_match", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_46wildcard_match(__pyx_self, __pyx_v_self, __pyx_v_wildcard); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_46wildcard_match(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_wildcard) { - PyObject *__pyx_v_fnmatchcase = NULL; - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wildcard_match", 0); - - /* "lib/Naked/toolshed/c/types.pyx":557 - * #------------------------------------------------------------------------------ - * def wildcard_match(self, wildcard): - * if hasattr(self, 'nkd_fnmatchcase'): # <<<<<<<<<<<<<< - * fnmatchcase = self.nkd_fnmatchcase - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_nkd_fnmatchcase); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":558 - * def wildcard_match(self, wildcard): - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase # <<<<<<<<<<<<<< - * else: - * from fnmatch import fnmatchcase - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_nkd_fnmatchcase); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_fnmatchcase = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L3; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":560 - * fnmatchcase = self.nkd_fnmatchcase - * else: - * from fnmatch import fnmatchcase # <<<<<<<<<<<<<< - * self.nkd_fnmatchcase = fnmatchcase - * return [ x for x in self if fnmatchcase(x, wildcard) ] - */ - __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_s_fnmatchcase); - PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_fnmatchcase); - __Pyx_GIVEREF(__pyx_n_s_fnmatchcase); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_fnmatch, __pyx_t_3, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_fnmatchcase); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_fnmatchcase = __pyx_t_3; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":561 - * else: - * from fnmatch import fnmatchcase - * self.nkd_fnmatchcase = fnmatchcase # <<<<<<<<<<<<<< - * return [ x for x in self if fnmatchcase(x, wildcard) ] - * - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_nkd_fnmatchcase, __pyx_v_fnmatchcase) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":562 - * from fnmatch import fnmatchcase - * self.nkd_fnmatchcase = fnmatchcase - * return [ x for x in self if fnmatchcase(x, wildcard) ] # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_3 = __pyx_v_self; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_7); - __pyx_t_7 = 0; - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_x); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __Pyx_INCREF(__pyx_v_wildcard); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_wildcard); - __Pyx_GIVEREF(__pyx_v_wildcard); - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_fnmatchcase, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (__pyx_t_2) { - if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_v_x))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L6; - } - __pyx_L6:; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":556 - * # returns a list of items that match the `wildcard` argument - * #------------------------------------------------------------------------------ - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.wildcard_match", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_fnmatchcase); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":568 - * # returns a list of items that match one or more | separated wildcards passed as string - * #------------------------------------------------------------------------------ - * def multi_wildcard_match(self, wildcards): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_49multi_wildcard_match(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_49multi_wildcard_match = {__Pyx_NAMESTR("multi_wildcard_match"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_49multi_wildcard_match, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_49multi_wildcard_match(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_wildcards = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("multi_wildcard_match (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_wildcards,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_wildcards)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("multi_wildcard_match", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multi_wildcard_match") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_wildcards = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("multi_wildcard_match", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.multi_wildcard_match", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_48multi_wildcard_match(__pyx_self, __pyx_v_self, __pyx_v_wildcards); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_48multi_wildcard_match(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_wildcards) { - PyObject *__pyx_v_fnmatchcase = NULL; - PyObject *__pyx_v_wc_list = NULL; - PyObject *__pyx_v_return_list = NULL; - PyObject *__pyx_v_wc = NULL; - PyObject *__pyx_v_temp_list = NULL; - PyObject *__pyx_v_result = NULL; - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - PyObject *(*__pyx_t_9)(PyObject *); - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("multi_wildcard_match", 0); - - /* "lib/Naked/toolshed/c/types.pyx":569 - * #------------------------------------------------------------------------------ - * def multi_wildcard_match(self, wildcards): - * if hasattr(self, 'nkd_fnmatchcase'): # <<<<<<<<<<<<<< - * fnmatchcase = self.nkd_fnmatchcase - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_nkd_fnmatchcase); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":570 - * def multi_wildcard_match(self, wildcards): - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase # <<<<<<<<<<<<<< - * else: - * from fnmatch import fnmatchcase - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_nkd_fnmatchcase); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_fnmatchcase = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L3; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":572 - * fnmatchcase = self.nkd_fnmatchcase - * else: - * from fnmatch import fnmatchcase # <<<<<<<<<<<<<< - * self.nkd_fnmatchcase = fnmatchcase - * wc_list = wildcards.split('|') - */ - __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_s_fnmatchcase); - PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_fnmatchcase); - __Pyx_GIVEREF(__pyx_n_s_fnmatchcase); - __pyx_t_4 = __Pyx_Import(__pyx_n_s_fnmatch, __pyx_t_3, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_fnmatchcase); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_fnmatchcase = __pyx_t_3; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":573 - * else: - * from fnmatch import fnmatchcase - * self.nkd_fnmatchcase = fnmatchcase # <<<<<<<<<<<<<< - * wc_list = wildcards.split('|') - * return_list = [] - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_nkd_fnmatchcase, __pyx_v_fnmatchcase) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":574 - * from fnmatch import fnmatchcase - * self.nkd_fnmatchcase = fnmatchcase - * wc_list = wildcards.split('|') # <<<<<<<<<<<<<< - * return_list = [] - * for wc in wc_list: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_wildcards, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_wc_list = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":575 - * self.nkd_fnmatchcase = fnmatchcase - * wc_list = wildcards.split('|') - * return_list = [] # <<<<<<<<<<<<<< - * for wc in wc_list: - * temp_list = [ x for x in self if fnmatchcase(x, wc) ] - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_return_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":576 - * wc_list = wildcards.split('|') - * return_list = [] - * for wc in wc_list: # <<<<<<<<<<<<<< - * temp_list = [ x for x in self if fnmatchcase(x, wc) ] - * for result in temp_list: - */ - if (PyList_CheckExact(__pyx_v_wc_list) || PyTuple_CheckExact(__pyx_v_wc_list)) { - __pyx_t_3 = __pyx_v_wc_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_wc_list); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_4 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_wc, __pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":577 - * return_list = [] - * for wc in wc_list: - * temp_list = [ x for x in self if fnmatchcase(x, wc) ] # <<<<<<<<<<<<<< - * for result in temp_list: - * return_list.append(result) - */ - __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyList_CheckExact(__pyx_v_self) || PyTuple_CheckExact(__pyx_v_self)) { - __pyx_t_7 = __pyx_v_self; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_self); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext; - } - for (;;) { - if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_7)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_10 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_7)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_7)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_10 = __pyx_t_9(__pyx_t_7); - if (unlikely(!__pyx_t_10)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_10); - } - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_10); - __pyx_t_10 = 0; - __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_10); - __Pyx_INCREF(__pyx_v_x); - PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_x); - __Pyx_GIVEREF(__pyx_v_x); - __Pyx_INCREF(__pyx_v_wc); - PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_wc); - __Pyx_GIVEREF(__pyx_v_wc); - __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v_fnmatchcase, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - if (__pyx_t_2) { - if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_v_x))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - goto __pyx_L8; - } - __pyx_L8:; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF_SET(__pyx_v_temp_list, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":578 - * for wc in wc_list: - * temp_list = [ x for x in self if fnmatchcase(x, wc) ] - * for result in temp_list: # <<<<<<<<<<<<<< - * return_list.append(result) - * return return_list - */ - __pyx_t_4 = __pyx_v_temp_list; __Pyx_INCREF(__pyx_t_4); __pyx_t_8 = 0; - for (;;) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_4)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_result, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":579 - * temp_list = [ x for x in self if fnmatchcase(x, wc) ] - * for result in temp_list: - * return_list.append(result) # <<<<<<<<<<<<<< - * return return_list - * - */ - __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_return_list, __pyx_v_result); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":580 - * for result in temp_list: - * return_list.append(result) - * return return_list # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_return_list); - __pyx_r = __pyx_v_return_list; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":568 - * # returns a list of items that match one or more | separated wildcards passed as string - * #------------------------------------------------------------------------------ - * def multi_wildcard_match(self, wildcards): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.multi_wildcard_match", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_fnmatchcase); - __Pyx_XDECREF(__pyx_v_wc_list); - __Pyx_XDECREF(__pyx_v_return_list); - __Pyx_XDECREF(__pyx_v_wc); - __Pyx_XDECREF(__pyx_v_temp_list); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":589 - * # return an XSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(set(self), attr_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_51xset(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_51xset = {__Pyx_NAMESTR("xset"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_51xset, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_51xset(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xset (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_50xset(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_50xset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xset", 0); - - /* "lib/Naked/toolshed/c/types.pyx":590 - * #------------------------------------------------------------------------------ - * def xset(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XSet(set(self), attr_dict) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":591 - * def xset(self): - * attr_dict = self._getAttributeDict() - * return XSet(set(self), attr_dict) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XSet); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":589 - * # return an XSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(set(self), attr_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.xset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":597 - * # return an XFSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(set(self), attr_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_53xfset(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_53xfset = {__Pyx_NAMESTR("xfset"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_53xfset, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_53xfset(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xfset (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_52xfset(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_52xfset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xfset", 0); - - /* "lib/Naked/toolshed/c/types.pyx":598 - * #------------------------------------------------------------------------------ - * def xfset(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XFSet(set(self), attr_dict) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":599 - * def xfset(self): - * attr_dict = self._getAttributeDict() - * return XFSet(set(self), attr_dict) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XFSet); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":597 - * # return an XFSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(set(self), attr_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.xfset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":605 - * # returns an XTuple with XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xtuple(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XTuple(tuple(self), attr_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_55xtuple(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_55xtuple = {__Pyx_NAMESTR("xtuple"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_55xtuple, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XList_55xtuple(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xtuple (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_54xtuple(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_54xtuple(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xtuple", 0); - - /* "lib/Naked/toolshed/c/types.pyx":606 - * #------------------------------------------------------------------------------ - * def xtuple(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XTuple(tuple(self), attr_dict) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":607 - * def xtuple(self): - * attr_dict = self._getAttributeDict() - * return XTuple(tuple(self), attr_dict) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XTuple); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":605 - * # returns an XTuple with XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xtuple(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XTuple(tuple(self), attr_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XList.xtuple", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":615 - * from heapq import heappush, heappop - * class XMaxHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMaxHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_12__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XMaxHeap)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XMaxHeap)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XMaxHeap)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[3] = {0,0,0}; - __pyx_defaults3 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_self); - values[1] = __pyx_dynamic_args->__pyx_arg_attributes; - values[2] = ((PyObject *)((PyObject*)__pyx_n_s_XMaxHeap)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_attributes = values[1]; - __pyx_v_naked_type = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap___init__(__pyx_self, __pyx_v_self, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":616 - * class XMaxHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMaxHeap'): - * NakedObject.__init__(self, attributes, naked_type) # <<<<<<<<<<<<<< - * self._queue = [] - * self._index = 0 - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __Pyx_INCREF(__pyx_v_naked_type); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_naked_type); - __Pyx_GIVEREF(__pyx_v_naked_type); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":617 - * def __init__(self, attributes={}, naked_type='XMaxHeap'): - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] # <<<<<<<<<<<<<< - * self._index = 0 - * - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_queue, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":618 - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - * self._index = 0 # <<<<<<<<<<<<<< - * - * # length of the queue - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":615 - * from heapq import heappush, heappop - * class XMaxHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMaxHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":621 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_3__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_3__len__ = {__Pyx_NAMESTR("__len__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_3__len__, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_3__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_2__len__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_2__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__len__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":622 - * # length of the queue - * def __len__(self): - * return len(self._queue) # <<<<<<<<<<<<<< - * - * # O(log n) complexity - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":621 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":625 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_5push(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_5push = {__Pyx_NAMESTR("push"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_5push, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_5push(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_the_object = 0; - PyObject *__pyx_v_priority = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("push (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_the_object,&__pyx_n_s_priority,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_object)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("push", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_priority)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("push", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "push") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_the_object = values[1]; - __pyx_v_priority = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("push", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.push", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_4push(__pyx_self, __pyx_v_self, __pyx_v_the_object, __pyx_v_priority); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_4push(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("push", 0); - - /* "lib/Naked/toolshed/c/types.pyx":626 - * # O(log n) complexity - * def push(self, the_object, priority): - * heappush(self._queue, (-priority, self._index, the_object)) # <<<<<<<<<<<<<< - * self._index += 1 - * - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappush); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Negative(__pyx_v_priority); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_the_object); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_the_object); - __Pyx_GIVEREF(__pyx_v_the_object); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_2 = 0; - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":627 - * def push(self, the_object, priority): - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 # <<<<<<<<<<<<<< - * - * # O(log n) complexity - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":625 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.push", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":630 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_7pop(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_7pop = {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_7pop, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_7pop(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("pop (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_6pop(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_6pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pop", 0); - - /* "lib/Naked/toolshed/c/types.pyx":631 - * # O(log n) complexity - * def pop(self): - * if self._queue: # <<<<<<<<<<<<<< - * return heappop(self._queue)[-1] - * else: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":632 - * def pop(self): - * if self._queue: - * return heappop(self._queue)[-1] # <<<<<<<<<<<<<< - * else: - * return None - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":634 - * return heappop(self._queue)[-1] - * else: - * return None # <<<<<<<<<<<<<< - * - * # push new object and return the highest priority object - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":630 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":637 - * - * # push new object and return the highest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_9pushpop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_9pushpop = {__Pyx_NAMESTR("pushpop"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_9pushpop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_9pushpop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_the_object = 0; - PyObject *__pyx_v_priority = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("pushpop (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_the_object,&__pyx_n_s_priority,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_object)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("pushpop", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_priority)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("pushpop", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushpop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_the_object = values[1]; - __pyx_v_priority = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("pushpop", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.pushpop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_8pushpop(__pyx_self, __pyx_v_self, __pyx_v_the_object, __pyx_v_priority); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_8pushpop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pushpop", 0); - - /* "lib/Naked/toolshed/c/types.pyx":638 - * # push new object and return the highest priority object - * def pushpop(self, the_object, priority): - * heappush(self._queue, (-priority, self._index, the_object)) # <<<<<<<<<<<<<< - * self._index += 1 - * if self._queue: - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappush); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyNumber_Negative(__pyx_v_priority); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_the_object); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_the_object); - __Pyx_GIVEREF(__pyx_v_the_object); - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_2 = 0; - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":639 - * def pushpop(self, the_object, priority): - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_t_5, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":640 - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - * if self._queue: # <<<<<<<<<<<<<< - * return heappop(self._queue)[-1] - * else: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":641 - * self._index += 1 - * if self._queue: - * return heappop(self._queue)[-1] # <<<<<<<<<<<<<< - * else: - * return None # return None if the queue is empty - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappop); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_5, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":643 - * return heappop(self._queue)[-1] - * else: - * return None # return None if the queue is empty # <<<<<<<<<<<<<< - * - * # the length of the queue - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":637 - * - * # push new object and return the highest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.pushpop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":646 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_11length(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_11length = {__Pyx_NAMESTR("length"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_11length, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_11length(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("length (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_10length(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_10length(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("length", 0); - - /* "lib/Naked/toolshed/c/types.pyx":647 - * # the length of the queue - * def length(self): - * return len(self._queue) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":646 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMaxHeap.length", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":655 - * from heapq import heappush, heappop - * class XMinHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMinHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_12__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults4, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults4, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults4, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XMinHeap)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XMinHeap)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XMinHeap)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[3] = {0,0,0}; - __pyx_defaults4 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults4, __pyx_self); - values[1] = __pyx_dynamic_args->__pyx_arg_attributes; - values[2] = ((PyObject *)((PyObject*)__pyx_n_s_XMinHeap)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_attributes = values[1]; - __pyx_v_naked_type = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap___init__(__pyx_self, __pyx_v_self, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":656 - * class XMinHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMinHeap'): - * NakedObject.__init__(self, attributes, naked_type) # <<<<<<<<<<<<<< - * self._queue = [] - * self._index = 0 - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __Pyx_INCREF(__pyx_v_naked_type); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_naked_type); - __Pyx_GIVEREF(__pyx_v_naked_type); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":657 - * def __init__(self, attributes={}, naked_type='XMinHeap'): - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] # <<<<<<<<<<<<<< - * self._index = 0 - * - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_queue, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":658 - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - * self._index = 0 # <<<<<<<<<<<<<< - * - * - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":655 - * from heapq import heappush, heappop - * class XMinHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMinHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":662 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_3__len__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_3__len__ = {__Pyx_NAMESTR("__len__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_3__len__, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_3__len__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_2__len__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_2__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__len__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":663 - * # length of the queue - * def __len__(self): - * return len(self._queue) # <<<<<<<<<<<<<< - * - * # O(log n) complexity - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":662 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":666 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_5push(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_5push = {__Pyx_NAMESTR("push"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_5push, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_5push(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_the_object = 0; - PyObject *__pyx_v_priority = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("push (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_the_object,&__pyx_n_s_priority,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_object)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("push", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_priority)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("push", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "push") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_the_object = values[1]; - __pyx_v_priority = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("push", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.push", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_4push(__pyx_self, __pyx_v_self, __pyx_v_the_object, __pyx_v_priority); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_4push(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("push", 0); - - /* "lib/Naked/toolshed/c/types.pyx":667 - * # O(log n) complexity - * def push(self, the_object, priority): - * heappush(self._queue, (priority, self._index, the_object)) # <<<<<<<<<<<<<< - * self._index += 1 - * - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappush); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_priority); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_priority); - __Pyx_GIVEREF(__pyx_v_priority); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_the_object); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_the_object); - __Pyx_GIVEREF(__pyx_v_the_object); - __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":668 - * def push(self, the_object, priority): - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 # <<<<<<<<<<<<<< - * - * # O(log n) complexity - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":666 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.push", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":671 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_7pop(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_7pop = {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_7pop, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_7pop(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("pop (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_6pop(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_6pop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pop", 0); - - /* "lib/Naked/toolshed/c/types.pyx":672 - * # O(log n) complexity - * def pop(self): - * if self._queue: # <<<<<<<<<<<<<< - * return heappop(self._queue)[-1] - * else: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":673 - * def pop(self): - * if self._queue: - * return heappop(self._queue)[-1] # <<<<<<<<<<<<<< - * else: - * return None # return None if the queue is empty - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappop); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":675 - * return heappop(self._queue)[-1] - * else: - * return None # return None if the queue is empty # <<<<<<<<<<<<<< - * - * # push new object and return the lowest priority object - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":671 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":678 - * - * # push new object and return the lowest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_9pushpop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_9pushpop = {__Pyx_NAMESTR("pushpop"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_9pushpop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_9pushpop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_the_object = 0; - PyObject *__pyx_v_priority = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("pushpop (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_the_object,&__pyx_n_s_priority,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_object)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("pushpop", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_priority)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("pushpop", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushpop") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_the_object = values[1]; - __pyx_v_priority = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("pushpop", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.pushpop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_8pushpop(__pyx_self, __pyx_v_self, __pyx_v_the_object, __pyx_v_priority); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_8pushpop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_object, PyObject *__pyx_v_priority) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pushpop", 0); - - /* "lib/Naked/toolshed/c/types.pyx":679 - * # push new object and return the lowest priority object - * def pushpop(self, the_object, priority): - * heappush(self._queue, (priority, self._index, the_object)) # <<<<<<<<<<<<<< - * self._index += 1 - * if self._queue: - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappush); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_priority); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_priority); - __Pyx_GIVEREF(__pyx_v_priority); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_the_object); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_the_object); - __Pyx_GIVEREF(__pyx_v_the_object); - __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_2 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":680 - * def pushpop(self, the_object, priority): - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_int_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":681 - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - * if self._queue: # <<<<<<<<<<<<<< - * return heappop(self._queue)[-1] - * else: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":682 - * self._index += 1 - * if self._queue: - * return heappop(self._queue)[-1] # <<<<<<<<<<<<<< - * else: - * return None #return None if the queue is empty - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappop); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_4, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":684 - * return heappop(self._queue)[-1] - * else: - * return None #return None if the queue is empty # <<<<<<<<<<<<<< - * - * # the length of the queue - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":678 - * - * # push new object and return the lowest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.pushpop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":687 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_11length(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_11length = {__Pyx_NAMESTR("length"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_11length, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_11length(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("length (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_10length(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_10length(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("length", 0); - - /* "lib/Naked/toolshed/c/types.pyx":688 - * # the length of the queue - * def length(self): - * return len(self._queue) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_queue); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":687 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XMinHeap.length", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":697 - * from collections import deque - * class XQueue(deque, NakedObject): - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): # <<<<<<<<<<<<<< - * deque.__init__(self, initial_iterable, max_length) - * NakedObject.__init__(self, attributes, naked_type) - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XQueue_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_initial_iterable); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_initial_iterable); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_initial_iterable); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 1, __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject *)__pyx_int_10)); - PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_int_10)); - __Pyx_GIVEREF(((PyObject *)__pyx_int_10)); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XQueue)); - PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject*)__pyx_n_s_XQueue)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XQueue)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XQueue.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XQueue_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XQueue_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XQueue_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XQueue_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_initial_iterable = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_max_length = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_initial_iterable,&__pyx_n_s_attributes,&__pyx_n_s_max_length,&__pyx_n_s_naked_type,0}; - PyObject* values[5] = {0,0,0,0,0}; - __pyx_defaults5 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_self); - values[1] = __pyx_dynamic_args->__pyx_arg_initial_iterable; - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject *)__pyx_int_10)); - values[4] = ((PyObject *)((PyObject*)__pyx_n_s_XQueue)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_initial_iterable); - if (value) { values[1] = value; kw_args--; } - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_length); - if (value) { values[3] = value; kw_args--; } - } - case 4: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[4] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_initial_iterable = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_max_length = values[3]; - __pyx_v_naked_type = values[4]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XQueue.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XQueue___init__(__pyx_self, __pyx_v_self, __pyx_v_initial_iterable, __pyx_v_attributes, __pyx_v_max_length, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XQueue___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_initial_iterable, PyObject *__pyx_v_attributes, PyObject *__pyx_v_max_length, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":698 - * class XQueue(deque, NakedObject): - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - * deque.__init__(self, initial_iterable, max_length) # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_deque); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_initial_iterable); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_initial_iterable); - __Pyx_GIVEREF(__pyx_v_initial_iterable); - __Pyx_INCREF(__pyx_v_max_length); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_max_length); - __Pyx_GIVEREF(__pyx_v_max_length); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":699 - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - * deque.__init__(self, initial_iterable, max_length) - * NakedObject.__init__(self, attributes, naked_type) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __Pyx_INCREF(__pyx_v_naked_type); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_naked_type); - __Pyx_GIVEREF(__pyx_v_naked_type); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":697 - * from collections import deque - * class XQueue(deque, NakedObject): - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): # <<<<<<<<<<<<<< - * deque.__init__(self, initial_iterable, max_length) - * NakedObject.__init__(self, attributes, naked_type) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XQueue.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":708 - * #------------------------------------------------------------------------------ - * class XSet(set, NakedObject): - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): # <<<<<<<<<<<<<< - * set.__init__(self, set_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_10__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XSet)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XSet)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XSet)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_set_obj = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_set_obj,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults6 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XSet)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_set_obj)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_set_obj = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet___init__(__pyx_self, __pyx_v_self, __pyx_v_set_obj, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_set_obj, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":709 - * class XSet(set, NakedObject): - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): - * set.__init__(self, set_obj) # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_set_obj); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_set_obj); - __Pyx_GIVEREF(__pyx_v_set_obj); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":710 - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): - * set.__init__(self, set_obj) - * NakedObject.__init__(self, attributes, naked_type) # <<<<<<<<<<<<<< - * - * # << operator is overloaded to extend the XSet with a second set - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __Pyx_INCREF(__pyx_v_naked_type); - PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_naked_type); - __Pyx_GIVEREF(__pyx_v_naked_type); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":708 - * #------------------------------------------------------------------------------ - * class XSet(set, NakedObject): - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): # <<<<<<<<<<<<<< - * set.__init__(self, set_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":713 - * - * # << operator is overloaded to extend the XSet with a second set - * def __lshift__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_3__lshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_3__lshift__ = {__Pyx_NAMESTR("__lshift__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_3__lshift__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_3__lshift__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_set = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__lshift__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_set,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__lshift__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__lshift__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_set = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__lshift__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__lshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_2__lshift__(__pyx_self, __pyx_v_self, __pyx_v_another_set); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_2__lshift__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_set) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__lshift__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":714 - * # << operator is overloaded to extend the XSet with a second set - * def __lshift__(self, another_set): - * self.update(another_set) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_another_set); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_another_set); - __Pyx_GIVEREF(__pyx_v_another_set); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":715 - * def __lshift__(self, another_set): - * self.update(another_set) - * return self # <<<<<<<<<<<<<< - * - * # += operator overload to extend the XSet with a second set - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":713 - * - * # << operator is overloaded to extend the XSet with a second set - * def __lshift__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__lshift__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":718 - * - * # += operator overload to extend the XSet with a second set - * def __iadd__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_5__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_5__iadd__ = {__Pyx_NAMESTR("__iadd__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_5__iadd__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_5__iadd__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_another_set = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_another_set,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_another_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__iadd__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_another_set = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__iadd__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_4__iadd__(__pyx_self, __pyx_v_self, __pyx_v_another_set); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_4__iadd__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_another_set) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__iadd__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":719 - * # += operator overload to extend the XSet with a second set - * def __iadd__(self, another_set): - * self.update(another_set) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_update); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_another_set); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_another_set); - __Pyx_GIVEREF(__pyx_v_another_set); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":720 - * def __iadd__(self, another_set): - * self.update(another_set) - * return self # <<<<<<<<<<<<<< - * - * def xlist(self): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":718 - * - * # += operator overload to extend the XSet with a second set - * def __iadd__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":722 - * return self - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_7xlist(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_7xlist = {__Pyx_NAMESTR("xlist"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_7xlist, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_7xlist(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xlist (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_6xlist(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_6xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xlist", 0); - - /* "lib/Naked/toolshed/c/types.pyx":723 - * - * def xlist(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XList(list(self), attr_dict) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":724 - * def xlist(self): - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict) # <<<<<<<<<<<<<< - * - * def xfset(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XList); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":722 - * return self - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.xlist", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":726 - * return XList(list(self), attr_dict) - * - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(self, attr_dict) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_9xfset(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_9xfset = {__Pyx_NAMESTR("xfset"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_9xfset, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_4XSet_9xfset(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xfset (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_8xfset(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_8xfset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xfset", 0); - - /* "lib/Naked/toolshed/c/types.pyx":727 - * - * def xfset(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XFSet(self, attr_dict) - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":728 - * def xfset(self): - * attr_dict = self._getAttributeDict() - * return XFSet(self, attr_dict) # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XFSet); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":726 - * return XList(list(self), attr_dict) - * - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(self, attr_dict) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XSet.xfset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":736 - * #------------------------------------------------------------------------------ - * class XFSet(frozenset): - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): # <<<<<<<<<<<<<< - * set_obj = frozenset.__new__(cls, the_set) - * if len(attributes) > 0: - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_10__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XFSet)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XFSet)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XFSet)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cls = 0; - PyObject *__pyx_v_the_set = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_the_set,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults7 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XFSet)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_set)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_cls = values[0]; - __pyx_v_the_set = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet___new__(__pyx_self, __pyx_v_cls, __pyx_v_the_set, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_set, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_set_obj = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__new__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":737 - * class XFSet(frozenset): - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): - * set_obj = frozenset.__new__(cls, the_set) # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyFrozenSet_Type))), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cls); - __Pyx_GIVEREF(__pyx_v_cls); - __Pyx_INCREF(__pyx_v_the_set); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_the_set); - __Pyx_GIVEREF(__pyx_v_the_set); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_set_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":738 - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): - * set_obj = frozenset.__new__(cls, the_set) - * if len(attributes) > 0: # <<<<<<<<<<<<<< - * for key in attributes: - * setattr(set_obj, key, attributes[key]) - */ - __pyx_t_4 = PyObject_Length(__pyx_v_attributes); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 738; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":739 - * set_obj = frozenset.__new__(cls, the_set) - * if len(attributes) > 0: - * for key in attributes: # <<<<<<<<<<<<<< - * setattr(set_obj, key, attributes[key]) - * setattr(set_obj, '_naked_type_', naked_type) # set the naked extension type as an attribute (NakedObject does this for mutable classes) - */ - if (PyList_CheckExact(__pyx_v_attributes) || PyTuple_CheckExact(__pyx_v_attributes)) { - __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":740 - * if len(attributes) > 0: - * for key in attributes: - * setattr(set_obj, key, attributes[key]) # <<<<<<<<<<<<<< - * setattr(set_obj, '_naked_type_', naked_type) # set the naked extension type as an attribute (NakedObject does this for mutable classes) - * return set_obj - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_attributes, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyObject_SetAttr(__pyx_v_set_obj, __pyx_v_key, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":741 - * for key in attributes: - * setattr(set_obj, key, attributes[key]) - * setattr(set_obj, '_naked_type_', naked_type) # set the naked extension type as an attribute (NakedObject does this for mutable classes) # <<<<<<<<<<<<<< - * return set_obj - * - */ - __pyx_t_7 = PyObject_SetAttr(__pyx_v_set_obj, __pyx_n_s_naked_type_2, __pyx_v_naked_type); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":742 - * setattr(set_obj, key, attributes[key]) - * setattr(set_obj, '_naked_type_', naked_type) # set the naked extension type as an attribute (NakedObject does this for mutable classes) - * return set_obj # <<<<<<<<<<<<<< - * - * def _getAttributeDict(self): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_set_obj); - __pyx_r = __pyx_v_set_obj; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":736 - * #------------------------------------------------------------------------------ - * class XFSet(frozenset): - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): # <<<<<<<<<<<<<< - * set_obj = frozenset.__new__(cls, the_set) - * if len(attributes) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_set_obj); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":744 - * return set_obj - * - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_3_getAttributeDict = {__Pyx_NAMESTR("_getAttributeDict"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_3_getAttributeDict, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_getAttributeDict (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_2_getAttributeDict(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_getAttributeDict", 0); - - /* "lib/Naked/toolshed/c/types.pyx":745 - * - * def _getAttributeDict(self): - * return self.__dict__ # <<<<<<<<<<<<<< - * - * def xlist(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":744 - * return set_obj - * - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet._getAttributeDict", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":747 - * return self.__dict__ - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict, naked_type="XList") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_5xlist(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_5xlist = {__Pyx_NAMESTR("xlist"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_5xlist, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_5xlist(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xlist (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_4xlist(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_4xlist(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xlist", 0); - - /* "lib/Naked/toolshed/c/types.pyx":748 - * - * def xlist(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XList(list(self), attr_dict, naked_type="XList") - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":749 - * def xlist(self): - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict, naked_type="XList") # <<<<<<<<<<<<<< - * - * def xset(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XList); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = 0; - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_naked_type, __pyx_n_s_XList) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":747 - * return self.__dict__ - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict, naked_type="XList") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet.xlist", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":751 - * return XList(list(self), attr_dict, naked_type="XList") - * - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(self, attr_dict, naked_type="XSet") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_7xset(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_7xset = {__Pyx_NAMESTR("xset"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_7xset, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_7xset(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xset (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_6xset(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_6xset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_attr_dict = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xset", 0); - - /* "lib/Naked/toolshed/c/types.pyx":752 - * - * def xset(self): - * attr_dict = self._getAttributeDict() # <<<<<<<<<<<<<< - * return XSet(self, attr_dict, naked_type="XSet") - * - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_getAttributeDict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_attr_dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":753 - * def xset(self): - * attr_dict = self._getAttributeDict() - * return XSet(self, attr_dict, naked_type="XSet") # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_XSet); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_attr_dict); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_attr_dict); - __Pyx_GIVEREF(__pyx_v_attr_dict); - __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_naked_type, __pyx_n_s_XSet) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":751 - * return XList(list(self), attr_dict, naked_type="XList") - * - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(self, attr_dict, naked_type="XSet") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet.xset", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_attr_dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":759 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_9type(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_9type = {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_9type, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_5XFSet_9type(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("type (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_8type(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_8type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("type", 0); - - /* "lib/Naked/toolshed/c/types.pyx":760 - * #------------------------------------------------------------------------------ - * def type(self): - * if hasattr(self, '_naked_type_'): # <<<<<<<<<<<<<< - * return self._naked_type_ - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":761 - * def type(self): - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ # <<<<<<<<<<<<<< - * else: - * return None - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":763 - * return self._naked_type_ - * else: - * return None # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":759 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XFSet.type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":774 - * #------------------------------------------------------------------------------ - * class XString(str): - * def __new__(cls, string_text, attributes={}, naked_type='XString'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, string_text) - * if len(attributes) > 0: - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_22__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults8, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults8, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults8, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XString)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XString)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XString)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cls = 0; - PyObject *__pyx_v_string_text = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_string_text,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults8 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults8, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XString)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_string_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_cls = values[0]; - __pyx_v_string_text = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString___new__(__pyx_self, __pyx_v_cls, __pyx_v_string_text, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_string_text, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_str_obj = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__new__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":775 - * class XString(str): - * def __new__(cls, string_text, attributes={}, naked_type='XString'): - * str_obj = str.__new__(cls, string_text) # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cls); - __Pyx_GIVEREF(__pyx_v_cls); - __Pyx_INCREF(__pyx_v_string_text); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_string_text); - __Pyx_GIVEREF(__pyx_v_string_text); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_str_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":776 - * def __new__(cls, string_text, attributes={}, naked_type='XString'): - * str_obj = str.__new__(cls, string_text) - * if len(attributes) > 0: # <<<<<<<<<<<<<< - * for key in attributes: - * setattr(str_obj, key, attributes[key]) - */ - __pyx_t_4 = PyObject_Length(__pyx_v_attributes); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":777 - * str_obj = str.__new__(cls, string_text) - * if len(attributes) > 0: - * for key in attributes: # <<<<<<<<<<<<<< - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) - */ - if (PyList_CheckExact(__pyx_v_attributes) || PyTuple_CheckExact(__pyx_v_attributes)) { - __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":778 - * if len(attributes) > 0: - * for key in attributes: - * setattr(str_obj, key, attributes[key]) # <<<<<<<<<<<<<< - * setattr(str_obj, '_naked_type_', naked_type) - * return str_obj - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_attributes, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyObject_SetAttr(__pyx_v_str_obj, __pyx_v_key, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":779 - * for key in attributes: - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # <<<<<<<<<<<<<< - * return str_obj - * - */ - __pyx_t_7 = PyObject_SetAttr(__pyx_v_str_obj, __pyx_n_s_naked_type_2, __pyx_v_naked_type); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":780 - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) - * return str_obj # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_str_obj); - __pyx_r = __pyx_v_str_obj; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":774 - * #------------------------------------------------------------------------------ - * class XString(str): - * def __new__(cls, string_text, attributes={}, naked_type='XString'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, string_text) - * if len(attributes) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_str_obj); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":786 - * # returns a dictionary of the XString instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_3_getAttributeDict = {__Pyx_NAMESTR("_getAttributeDict"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_3_getAttributeDict, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_getAttributeDict (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_2_getAttributeDict(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_getAttributeDict", 0); - - /* "lib/Naked/toolshed/c/types.pyx":787 - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): - * return self.__dict__ # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":786 - * # returns a dictionary of the XString instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString._getAttributeDict", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":793 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_5type(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_5type = {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_5type, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_5type(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("type (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_4type(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_4type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("type", 0); - - /* "lib/Naked/toolshed/c/types.pyx":794 - * #------------------------------------------------------------------------------ - * def type(self): - * if hasattr(self, '_naked_type_'): # <<<<<<<<<<<<<< - * return self._naked_type_ - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":795 - * def type(self): - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ # <<<<<<<<<<<<<< - * else: - * return None - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":797 - * return self._naked_type_ - * else: - * return None # <<<<<<<<<<<<<< - * - * ## TODO: see where + vs. join breakpoint becomes important - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":793 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":800 - * - * ## TODO: see where + vs. join breakpoint becomes important - * def concat(self, *strings): # <<<<<<<<<<<<<< - * str_list = [] - * for x in strings: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_7concat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_7concat = {__Pyx_NAMESTR("concat"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_7concat, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_7concat(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - CYTHON_UNUSED PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_strings = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("concat (wrapper)", 0); - if (PyTuple_GET_SIZE(__pyx_args) > 1) { - __pyx_v_strings = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args)); - if (unlikely(!__pyx_v_strings)) { - __Pyx_RefNannyFinishContext(); - return NULL; - } - __Pyx_GOTREF(__pyx_v_strings); - } else { - __pyx_v_strings = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple); - } - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - default: - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "concat") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) < 1) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - } - __pyx_v_self = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("concat", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_DECREF(__pyx_v_strings); __pyx_v_strings = 0; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.concat", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_6concat(__pyx_self, __pyx_v_self, __pyx_v_strings); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_strings); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_6concat(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_strings) { - PyObject *__pyx_v_str_list = NULL; - PyObject *__pyx_v_x = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("concat", 0); - - /* "lib/Naked/toolshed/c/types.pyx":801 - * ## TODO: see where + vs. join breakpoint becomes important - * def concat(self, *strings): - * str_list = [] # <<<<<<<<<<<<<< - * for x in strings: - * str_list.append(x) - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_str_list = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":802 - * def concat(self, *strings): - * str_list = [] - * for x in strings: # <<<<<<<<<<<<<< - * str_list.append(x) - * return "".join(str_list) - */ - __pyx_t_1 = __pyx_v_strings; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_x, __pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":803 - * str_list = [] - * for x in strings: - * str_list.append(x) # <<<<<<<<<<<<<< - * return "".join(str_list) - * - */ - __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_str_list, __pyx_v_x); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":804 - * for x in strings: - * str_list.append(x) - * return "".join(str_list) # <<<<<<<<<<<<<< - * - * # fastest substring search truth test - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_v_str_list); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":800 - * - * ## TODO: see where + vs. join breakpoint becomes important - * def concat(self, *strings): # <<<<<<<<<<<<<< - * str_list = [] - * for x in strings: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.concat", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_str_list); - __Pyx_XDECREF(__pyx_v_x); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":807 - * - * # fastest substring search truth test - * def contains(self, substring): # <<<<<<<<<<<<<< - * return substring in self - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_9contains(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_9contains = {__Pyx_NAMESTR("contains"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_9contains, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_9contains(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_substring = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("contains (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_substring,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_substring)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("contains", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "contains") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_substring = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("contains", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.contains", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_8contains(__pyx_self, __pyx_v_self, __pyx_v_substring); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_8contains(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_substring) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("contains", 0); - - /* "lib/Naked/toolshed/c/types.pyx":808 - * # fastest substring search truth test - * def contains(self, substring): - * return substring in self # <<<<<<<<<<<<<< - * - * # split the string on one or more delimiters, return list - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_v_substring, __pyx_v_self, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":807 - * - * # fastest substring search truth test - * def contains(self, substring): # <<<<<<<<<<<<<< - * return substring in self - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.contains", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":812 - * # split the string on one or more delimiters, return list - * # if up to two chars, then uses str.split(), if more chars then use re.split - * def xsplit(self, split_delimiter): # <<<<<<<<<<<<<< - * length = len(split_delimiter) - * if length > 2: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_11xsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_11xsplit = {__Pyx_NAMESTR("xsplit"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_11xsplit, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_11xsplit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_split_delimiter = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xsplit (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_split_delimiter,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_split_delimiter)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("xsplit", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xsplit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_split_delimiter = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xsplit", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.xsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_10xsplit(__pyx_self, __pyx_v_self, __pyx_v_split_delimiter); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_10xsplit(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_split_delimiter) { - Py_ssize_t __pyx_v_length; - PyObject *__pyx_v_re = NULL; - PyObject *__pyx_v_delim2 = NULL; - PyObject *__pyx_v_first_list = NULL; - PyObject *__pyx_v_result_list = NULL; - PyObject *__pyx_v_item = NULL; - PyObject *__pyx_v_subitem = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - Py_ssize_t __pyx_t_8; - PyObject *(*__pyx_t_9)(PyObject *); - int __pyx_t_10; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xsplit", 0); - __Pyx_INCREF(__pyx_v_split_delimiter); - - /* "lib/Naked/toolshed/c/types.pyx":813 - * # if up to two chars, then uses str.split(), if more chars then use re.split - * def xsplit(self, split_delimiter): - * length = len(split_delimiter) # <<<<<<<<<<<<<< - * if length > 2: - * import re - */ - __pyx_t_1 = PyObject_Length(__pyx_v_split_delimiter); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_length = __pyx_t_1; - - /* "lib/Naked/toolshed/c/types.pyx":814 - * def xsplit(self, split_delimiter): - * length = len(split_delimiter) - * if length > 2: # <<<<<<<<<<<<<< - * import re - * split_delimiter = "".join([ '[', split_delimiter, ']' ]) - */ - __pyx_t_2 = ((__pyx_v_length > 2) != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":815 - * length = len(split_delimiter) - * if length > 2: - * import re # <<<<<<<<<<<<<< - * split_delimiter = "".join([ '[', split_delimiter, ']' ]) - * return re.split(split_delimiter, self) - */ - __pyx_t_3 = __Pyx_Import(__pyx_n_s_re, 0, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_re = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":816 - * if length > 2: - * import re - * split_delimiter = "".join([ '[', split_delimiter, ']' ]) # <<<<<<<<<<<<<< - * return re.split(split_delimiter, self) - * elif length > 1: - */ - __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_kp_s__8); - PyList_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s__8); - __Pyx_GIVEREF(__pyx_kp_s__8); - __Pyx_INCREF(__pyx_v_split_delimiter); - PyList_SET_ITEM(__pyx_t_3, 1, __pyx_v_split_delimiter); - __Pyx_GIVEREF(__pyx_v_split_delimiter); - __Pyx_INCREF(__pyx_kp_s__9); - PyList_SET_ITEM(__pyx_t_3, 2, __pyx_kp_s__9); - __Pyx_GIVEREF(__pyx_kp_s__9); - __pyx_t_4 = __Pyx_PyString_Join(__pyx_kp_s__5, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_split_delimiter, __pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":817 - * import re - * split_delimiter = "".join([ '[', split_delimiter, ']' ]) - * return re.split(split_delimiter, self) # <<<<<<<<<<<<<< - * elif length > 1: - * delim2 = split_delimiter[1] - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_re, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_split_delimiter); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_split_delimiter); - __Pyx_GIVEREF(__pyx_v_split_delimiter); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":818 - * split_delimiter = "".join([ '[', split_delimiter, ']' ]) - * return re.split(split_delimiter, self) - * elif length > 1: # <<<<<<<<<<<<<< - * delim2 = split_delimiter[1] - * first_list = self.split(split_delimiter[0]) - */ - __pyx_t_2 = ((__pyx_v_length > 1) != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":819 - * return re.split(split_delimiter, self) - * elif length > 1: - * delim2 = split_delimiter[1] # <<<<<<<<<<<<<< - * first_list = self.split(split_delimiter[0]) - * result_list = [] - */ - __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_split_delimiter, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_5); - __pyx_v_delim2 = __pyx_t_5; - __pyx_t_5 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":820 - * elif length > 1: - * delim2 = split_delimiter[1] - * first_list = self.split(split_delimiter[0]) # <<<<<<<<<<<<<< - * result_list = [] - * for item in first_list: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_split); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_split_delimiter, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_first_list = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":821 - * delim2 = split_delimiter[1] - * first_list = self.split(split_delimiter[0]) - * result_list = [] # <<<<<<<<<<<<<< - * for item in first_list: - * for subitem in item.split(delim2): - */ - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_result_list = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":822 - * first_list = self.split(split_delimiter[0]) - * result_list = [] - * for item in first_list: # <<<<<<<<<<<<<< - * for subitem in item.split(delim2): - * result_list.append(subitem) - */ - if (PyList_CheckExact(__pyx_v_first_list) || PyTuple_CheckExact(__pyx_v_first_list)) { - __pyx_t_3 = __pyx_v_first_list; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_1 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_first_list); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_1 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_4); __pyx_t_1++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_4 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_4)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_4); - } - __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_4); - __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":823 - * result_list = [] - * for item in first_list: - * for subitem in item.split(delim2): # <<<<<<<<<<<<<< - * result_list.append(subitem) - * return result_list - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_delim2); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_delim2); - __Pyx_GIVEREF(__pyx_v_delim2); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PyList_CheckExact(__pyx_t_7) || PyTuple_CheckExact(__pyx_t_7)) { - __pyx_t_5 = __pyx_t_7; __Pyx_INCREF(__pyx_t_5); __pyx_t_8 = 0; - __pyx_t_9 = NULL; - } else { - __pyx_t_8 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_9 = Py_TYPE(__pyx_t_5)->tp_iternext; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - for (;;) { - if (!__pyx_t_9 && PyList_CheckExact(__pyx_t_5)) { - if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_9 && PyTuple_CheckExact(__pyx_t_5)) { - if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_5)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_8); __Pyx_INCREF(__pyx_t_7); __pyx_t_8++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_7 = PySequence_ITEM(__pyx_t_5, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_7 = __pyx_t_9(__pyx_t_5); - if (unlikely(!__pyx_t_7)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_7); - } - __Pyx_XDECREF_SET(__pyx_v_subitem, __pyx_t_7); - __pyx_t_7 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":824 - * for item in first_list: - * for subitem in item.split(delim2): - * result_list.append(subitem) # <<<<<<<<<<<<<< - * return result_list - * else: - */ - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_result_list, __pyx_v_subitem); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":825 - * for subitem in item.split(delim2): - * result_list.append(subitem) - * return result_list # <<<<<<<<<<<<<< - * else: - * return self.split(split_delimiter) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_result_list); - __pyx_r = __pyx_v_result_list; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":827 - * return result_list - * else: - * return self.split(split_delimiter) # <<<<<<<<<<<<<< - * - * # split the string on one or more characters and return items in set - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_split_delimiter); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_split_delimiter); - __Pyx_GIVEREF(__pyx_v_split_delimiter); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_7; - __pyx_t_7 = 0; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":812 - * # split the string on one or more delimiters, return list - * # if up to two chars, then uses str.split(), if more chars then use re.split - * def xsplit(self, split_delimiter): # <<<<<<<<<<<<<< - * length = len(split_delimiter) - * if length > 2: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.xsplit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_re); - __Pyx_XDECREF(__pyx_v_delim2); - __Pyx_XDECREF(__pyx_v_first_list); - __Pyx_XDECREF(__pyx_v_result_list); - __Pyx_XDECREF(__pyx_v_item); - __Pyx_XDECREF(__pyx_v_subitem); - __Pyx_XDECREF(__pyx_v_split_delimiter); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":830 - * - * # split the string on one or more characters and return items in set - * def xsplit_set(self, split_delimiter): # <<<<<<<<<<<<<< - * return set(self.xsplit(split_delimiter)) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_13xsplit_set(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_13xsplit_set = {__Pyx_NAMESTR("xsplit_set"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_13xsplit_set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_13xsplit_set(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_split_delimiter = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("xsplit_set (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_split_delimiter,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_split_delimiter)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("xsplit_set", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xsplit_set") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_split_delimiter = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("xsplit_set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.xsplit_set", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_12xsplit_set(__pyx_self, __pyx_v_self, __pyx_v_split_delimiter); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_12xsplit_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_split_delimiter) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("xsplit_set", 0); - - /* "lib/Naked/toolshed/c/types.pyx":831 - * # split the string on one or more characters and return items in set - * def xsplit_set(self, split_delimiter): - * return set(self.xsplit(split_delimiter)) # <<<<<<<<<<<<<< - * - * # str begins with substring - faster than str.startswith() - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_xsplit); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_split_delimiter); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_split_delimiter); - __Pyx_GIVEREF(__pyx_v_split_delimiter); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":830 - * - * # split the string on one or more characters and return items in set - * def xsplit_set(self, split_delimiter): # <<<<<<<<<<<<<< - * return set(self.xsplit(split_delimiter)) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.xsplit_set", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":834 - * - * # str begins with substring - faster than str.startswith() - * def begins(self, begin_string): # <<<<<<<<<<<<<< - * return begin_string in self[0:len(begin_string)] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_15begins(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_15begins = {__Pyx_NAMESTR("begins"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_15begins, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_15begins(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_begin_string = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("begins (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_begin_string,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_string)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("begins", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "begins") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_begin_string = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("begins", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.begins", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_14begins(__pyx_self, __pyx_v_self, __pyx_v_begin_string); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_14begins(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_begin_string) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("begins", 0); - - /* "lib/Naked/toolshed/c/types.pyx":835 - * # str begins with substring - faster than str.startswith() - * def begins(self, begin_string): - * return begin_string in self[0:len(begin_string)] # <<<<<<<<<<<<<< - * - * # str ends with substring - faster than str.endswith() - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_Length(__pyx_v_begin_string); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_self, 0, __pyx_t_1, NULL, NULL, NULL, 1, 1, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_v_begin_string, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":834 - * - * # str begins with substring - faster than str.startswith() - * def begins(self, begin_string): # <<<<<<<<<<<<<< - * return begin_string in self[0:len(begin_string)] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.begins", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":838 - * - * # str ends with substring - faster than str.endswith() - * def ends(self, end_string): # <<<<<<<<<<<<<< - * return end_string in self[-len(end_string):] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_17ends(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_17ends = {__Pyx_NAMESTR("ends"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_17ends, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_17ends(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_end_string = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("ends (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_end_string,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_string)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("ends", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ends") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_end_string = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("ends", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.ends", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_16ends(__pyx_self, __pyx_v_self, __pyx_v_end_string); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_16ends(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_end_string) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("ends", 0); - - /* "lib/Naked/toolshed/c/types.pyx":839 - * # str ends with substring - faster than str.endswith() - * def ends(self, end_string): - * return end_string in self[-len(end_string):] # <<<<<<<<<<<<<< - * - * # case sensitive wildcard match on the XString (boolean returned) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyObject_Length(__pyx_v_end_string); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_self, (-__pyx_t_1), 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = (__Pyx_PySequence_Contains(__pyx_v_end_string, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":838 - * - * # str ends with substring - faster than str.endswith() - * def ends(self, end_string): # <<<<<<<<<<<<<< - * return end_string in self[-len(end_string):] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.ends", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":842 - * - * # case sensitive wildcard match on the XString (boolean returned) - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * from fnmatch import fnmatchcase - * return fnmatchcase(self, wildcard) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_19wildcard_match(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_19wildcard_match = {__Pyx_NAMESTR("wildcard_match"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_19wildcard_match, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_19wildcard_match(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_wildcard = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("wildcard_match (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_wildcard,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_wildcard)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("wildcard_match", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wildcard_match") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_wildcard = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("wildcard_match", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.wildcard_match", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_18wildcard_match(__pyx_self, __pyx_v_self, __pyx_v_wildcard); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_18wildcard_match(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_wildcard) { - PyObject *__pyx_v_fnmatchcase = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("wildcard_match", 0); - - /* "lib/Naked/toolshed/c/types.pyx":843 - * # case sensitive wildcard match on the XString (boolean returned) - * def wildcard_match(self, wildcard): - * from fnmatch import fnmatchcase # <<<<<<<<<<<<<< - * return fnmatchcase(self, wildcard) - * - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_fnmatchcase); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_fnmatchcase); - __Pyx_GIVEREF(__pyx_n_s_fnmatchcase); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_fnmatch, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_fnmatchcase); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_fnmatchcase = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":844 - * def wildcard_match(self, wildcard): - * from fnmatch import fnmatchcase - * return fnmatchcase(self, wildcard) # <<<<<<<<<<<<<< - * - * # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __Pyx_INCREF(__pyx_v_wildcard); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_wildcard); - __Pyx_GIVEREF(__pyx_v_wildcard); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_fnmatchcase, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":842 - * - * # case sensitive wildcard match on the XString (boolean returned) - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * from fnmatch import fnmatchcase - * return fnmatchcase(self, wildcard) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.wildcard_match", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_fnmatchcase); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":847 - * - * # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - * def unicode(self): # <<<<<<<<<<<<<< - * from sys import version_info - * from unicodedata import normalize - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_21unicode(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_21unicode = {__Pyx_NAMESTR("unicode"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_21unicode, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_7XString_21unicode(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("unicode (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_20unicode(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_20unicode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_version_info = NULL; - PyObject *__pyx_v_normalize = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("unicode", 0); - - /* "lib/Naked/toolshed/c/types.pyx":848 - * # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - * def unicode(self): - * from sys import version_info # <<<<<<<<<<<<<< - * from unicodedata import normalize - * if version_info[0] == 2: - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_version_info); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_version_info); - __Pyx_GIVEREF(__pyx_n_s_version_info); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_sys, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_version_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_version_info = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":849 - * def unicode(self): - * from sys import version_info - * from unicodedata import normalize # <<<<<<<<<<<<<< - * if version_info[0] == 2: - * return normalize('NFKD', self.decode('UTF-8')) - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_normalize); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_normalize); - __Pyx_GIVEREF(__pyx_n_s_normalize); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_unicodedata, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_normalize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v_normalize = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":850 - * from sys import version_info - * from unicodedata import normalize - * if version_info[0] == 2: # <<<<<<<<<<<<<< - * return normalize('NFKD', self.decode('UTF-8')) - * else: - */ - __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_version_info, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_3) { - - /* "lib/Naked/toolshed/c/types.pyx":851 - * from unicodedata import normalize - * if version_info[0] == 2: - * return normalize('NFKD', self.decode('UTF-8')) # <<<<<<<<<<<<<< - * else: - * return normalize('NFKD', self) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_normalize, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":853 - * return normalize('NFKD', self.decode('UTF-8')) - * else: - * return normalize('NFKD', self) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self); - __Pyx_GIVEREF(__pyx_v_self); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_normalize, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":847 - * - * # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - * def unicode(self): # <<<<<<<<<<<<<< - * from sys import version_info - * from unicodedata import normalize - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XString.unicode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_version_info); - __Pyx_XDECREF(__pyx_v_normalize); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":858 - * # this version works - * class XUnicode: - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): # <<<<<<<<<<<<<< - * import sys - * import unicodedata - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_14__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults9, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults9, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults9, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XUnicode)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XUnicode)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XUnicode)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_1__init__ = {__Pyx_NAMESTR("__init__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_1__init__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_string_text = 0; - PyObject *__pyx_v_attributes = 0; - CYTHON_UNUSED PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_string_text,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults9 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults9, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XUnicode)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_string_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_string_text = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode___init__(__pyx_self, __pyx_v_self, __pyx_v_string_text, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":864 - * - * class XUnicode_2(unicode): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): # <<<<<<<<<<<<<< - * str_obj = unicode.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XUnicode2)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XUnicode2)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XUnicode2)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__.XUnicode_2.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cls = 0; - PyObject *__pyx_v_the_string_text = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_the_string_text,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults11 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XUnicode2)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_string_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_cls = values[0]; - __pyx_v_the_string_text = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__.XUnicode_2.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2___new__(__pyx_self, __pyx_v_cls, __pyx_v_the_string_text, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_string_text, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_str_obj = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__new__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":865 - * class XUnicode_2(unicode): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): - * str_obj = unicode.__new__(cls, the_string_text) # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cls); - __Pyx_GIVEREF(__pyx_v_cls); - __Pyx_INCREF(__pyx_v_the_string_text); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_the_string_text); - __Pyx_GIVEREF(__pyx_v_the_string_text); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_str_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":866 - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): - * str_obj = unicode.__new__(cls, the_string_text) - * if len(attributes) > 0: # <<<<<<<<<<<<<< - * for key in attributes: - * setattr(str_obj, key, attributes[key]) - */ - __pyx_t_4 = PyObject_Length(__pyx_v_attributes); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 866; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":867 - * str_obj = unicode.__new__(cls, the_string_text) - * if len(attributes) > 0: - * for key in attributes: # <<<<<<<<<<<<<< - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode2 for Py 2 strings - */ - if (PyList_CheckExact(__pyx_v_attributes) || PyTuple_CheckExact(__pyx_v_attributes)) { - __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":868 - * if len(attributes) > 0: - * for key in attributes: - * setattr(str_obj, key, attributes[key]) # <<<<<<<<<<<<<< - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode2 for Py 2 strings - * return str_obj - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_attributes, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyObject_SetAttr(__pyx_v_str_obj, __pyx_v_key, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 868; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":869 - * for key in attributes: - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode2 for Py 2 strings # <<<<<<<<<<<<<< - * return str_obj - * - */ - __pyx_t_7 = PyObject_SetAttr(__pyx_v_str_obj, __pyx_n_s_naked_type_2, __pyx_v_naked_type); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":870 - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode2 for Py 2 strings - * return str_obj # <<<<<<<<<<<<<< - * - * class XUnicode_3(str): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_str_obj); - __pyx_r = __pyx_v_str_obj; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":864 - * - * class XUnicode_2(unicode): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): # <<<<<<<<<<<<<< - * str_obj = unicode.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__.XUnicode_2.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_str_obj); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":873 - * - * class XUnicode_3(str): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_2__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults12, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults12, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults12, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XUnicode3)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XUnicode3)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XUnicode3)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__.XUnicode_3.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cls = 0; - PyObject *__pyx_v_the_string_text = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_the_string_text,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults12 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults12, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XUnicode3)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_string_text)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_cls = values[0]; - __pyx_v_the_string_text = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__.XUnicode_3.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3___new__(__pyx_self, __pyx_v_cls, __pyx_v_the_string_text, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_string_text, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_str_obj = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__new__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":874 - * class XUnicode_3(str): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): - * str_obj = str.__new__(cls, the_string_text) # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cls); - __Pyx_GIVEREF(__pyx_v_cls); - __Pyx_INCREF(__pyx_v_the_string_text); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_the_string_text); - __Pyx_GIVEREF(__pyx_v_the_string_text); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_str_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":875 - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): - * str_obj = str.__new__(cls, the_string_text) - * if len(attributes) > 0: # <<<<<<<<<<<<<< - * for key in attributes: - * setattr(str_obj, key, attributes[key]) - */ - __pyx_t_4 = PyObject_Length(__pyx_v_attributes); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":876 - * str_obj = str.__new__(cls, the_string_text) - * if len(attributes) > 0: - * for key in attributes: # <<<<<<<<<<<<<< - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode3 for Py 3 strings - */ - if (PyList_CheckExact(__pyx_v_attributes) || PyTuple_CheckExact(__pyx_v_attributes)) { - __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":877 - * if len(attributes) > 0: - * for key in attributes: - * setattr(str_obj, key, attributes[key]) # <<<<<<<<<<<<<< - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode3 for Py 3 strings - * return str_obj - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_attributes, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyObject_SetAttr(__pyx_v_str_obj, __pyx_v_key, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 877; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":878 - * for key in attributes: - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode3 for Py 3 strings # <<<<<<<<<<<<<< - * return str_obj - * - */ - __pyx_t_7 = PyObject_SetAttr(__pyx_v_str_obj, __pyx_n_s_naked_type_2, __pyx_v_naked_type); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":879 - * setattr(str_obj, key, attributes[key]) - * setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode3 for Py 3 strings - * return str_obj # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_str_obj); - __pyx_r = __pyx_v_str_obj; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":873 - * - * class XUnicode_3(str): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__.XUnicode_3.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_str_obj); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":858 - * # this version works - * class XUnicode: - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): # <<<<<<<<<<<<<< - * import sys - * import unicodedata - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_string_text, PyObject *__pyx_v_attributes, CYTHON_UNUSED PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_sys = NULL; - PyObject *__pyx_v_unicodedata = NULL; - PyObject *__pyx_v_norm_text = NULL; - PyObject *__pyx_v_XUnicode_2 = NULL; - PyObject *__pyx_v_XUnicode_3 = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":859 - * class XUnicode: - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): - * import sys # <<<<<<<<<<<<<< - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', string_text) - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_sys = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":860 - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): - * import sys - * import unicodedata # <<<<<<<<<<<<<< - * norm_text = unicodedata.normalize('NFKD', string_text) - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_unicodedata, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_unicodedata = __pyx_t_1; - __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":861 - * import sys - * import unicodedata - * norm_text = unicodedata.normalize('NFKD', string_text) # <<<<<<<<<<<<<< - * - * class XUnicode_2(unicode): - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_unicodedata, __pyx_n_s_normalize); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_NFKD); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_NFKD); - __Pyx_GIVEREF(__pyx_n_s_NFKD); - __Pyx_INCREF(__pyx_v_string_text); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_string_text); - __Pyx_GIVEREF(__pyx_v_string_text); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_norm_text = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":863 - * norm_text = unicodedata.normalize('NFKD', string_text) - * - * class XUnicode_2(unicode): # <<<<<<<<<<<<<< - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): - * str_obj = unicode.__new__(cls, the_string_text) - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyUnicode_Type)))); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)(&PyUnicode_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyUnicode_Type)))); - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_3, __pyx_n_s_XUnicode_2, __pyx_n_s_XUnicode___init___locals_XUnicod, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":864 - * - * class XUnicode_2(unicode): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): # <<<<<<<<<<<<<< - * str_obj = unicode.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_XUnicode___init___locals_XUnicod_2, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults11), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults11, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_2_2__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_new, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":863 - * norm_text = unicodedata.normalize('NFKD', string_text) - * - * class XUnicode_2(unicode): # <<<<<<<<<<<<<< - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): - * str_obj = unicode.__new__(cls, the_string_text) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XUnicode_2, __pyx_t_3, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 863; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_XUnicode_2 = __pyx_t_4; - __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":872 - * return str_obj - * - * class XUnicode_3(str): # <<<<<<<<<<<<<< - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): - * str_obj = str.__new__(cls, the_string_text) - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyString_Type)))); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)((PyObject*)(&PyString_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyString_Type)))); - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_3, __pyx_n_s_XUnicode_3, __pyx_n_s_XUnicode___init___locals_XUnicod_3, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":873 - * - * class XUnicode_3(str): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_XUnicode___init___locals_XUnicod_4, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults12), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults12, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__init___10XUnicode_3_2__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_new, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":872 - * return str_obj - * - * class XUnicode_3(str): # <<<<<<<<<<<<<< - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): - * str_obj = str.__new__(cls, the_string_text) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XUnicode_3, __pyx_t_3, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_XUnicode_3 = __pyx_t_4; - __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":882 - * - * - * if sys.version_info[0] == 2: # <<<<<<<<<<<<<< - * self.obj = XUnicode_2(norm_text, attributes) - * self.norm_unicode = norm_text - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_sys, __pyx_n_s_version_info); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 882; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":883 - * - * if sys.version_info[0] == 2: - * self.obj = XUnicode_2(norm_text, attributes) # <<<<<<<<<<<<<< - * self.norm_unicode = norm_text - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_norm_text); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_norm_text); - __Pyx_GIVEREF(__pyx_v_norm_text); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_XUnicode_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_obj, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":884 - * if sys.version_info[0] == 2: - * self.obj = XUnicode_2(norm_text, attributes) - * self.norm_unicode = norm_text # <<<<<<<<<<<<<< - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - * elif sys.version_info[0] == 3: - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_norm_unicode, __pyx_v_norm_text) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":885 - * self.obj = XUnicode_2(norm_text, attributes) - * self.norm_unicode = norm_text - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string # <<<<<<<<<<<<<< - * elif sys.version_info[0] == 3: - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_obj); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_naked_u_string, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L3; - } - - /* "lib/Naked/toolshed/c/types.pyx":886 - * self.norm_unicode = norm_text - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - * elif sys.version_info[0] == 3: # <<<<<<<<<<<<<< - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sys, __pyx_n_s_version_info); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_int_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 886; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_6) { - - /* "lib/Naked/toolshed/c/types.pyx":887 - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - * elif sys.version_info[0] == 3: - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? # <<<<<<<<<<<<<< - * - * def __str__(self): - */ - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_norm_text); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_norm_text); - __Pyx_GIVEREF(__pyx_v_norm_text); - __Pyx_INCREF(__pyx_v_attributes); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_attributes); - __Pyx_GIVEREF(__pyx_v_attributes); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_XUnicode_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_naked_u_string, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":858 - * # this version works - * class XUnicode: - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): # <<<<<<<<<<<<<< - * import sys - * import unicodedata - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_sys); - __Pyx_XDECREF(__pyx_v_unicodedata); - __Pyx_XDECREF(__pyx_v_norm_text); - __Pyx_XDECREF(__pyx_v_XUnicode_2); - __Pyx_XDECREF(__pyx_v_XUnicode_3); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":889 - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - * - * def __str__(self): # <<<<<<<<<<<<<< - * # return self.naked_u_string - * return self.obj - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_3__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_3__str__ = {__Pyx_NAMESTR("__str__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_3__str__, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_3__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__str__ (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_2__str__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_2__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__str__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":891 - * def __str__(self): - * # return self.naked_u_string - * return self.obj # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_obj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":889 - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - * - * def __str__(self): # <<<<<<<<<<<<<< - * # return self.naked_u_string - * return self.obj - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":893 - * return self.obj - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.naked_u_string - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_5__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_5__repr__ = {__Pyx_NAMESTR("__repr__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_5__repr__, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_5__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_4__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_4__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":894 - * - * def __repr__(self): - * return self.naked_u_string # <<<<<<<<<<<<<< - * - * def __getattr__(self, the_attribute): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_u_string); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":893 - * return self.obj - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.naked_u_string - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":896 - * return self.naked_u_string - * - * def __getattr__(self, the_attribute): # <<<<<<<<<<<<<< - * return self.obj.__dict__[the_attribute] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_7__getattr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_7__getattr__ = {__Pyx_NAMESTR("__getattr__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_7__getattr__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_7__getattr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_the_attribute = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_the_attribute,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_attribute)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__getattr__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__getattr__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_the_attribute = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__getattr__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_6__getattr__(__pyx_self, __pyx_v_self, __pyx_v_the_attribute); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_6__getattr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_the_attribute) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getattr__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":897 - * - * def __getattr__(self, the_attribute): - * return self.obj.__dict__[the_attribute] # <<<<<<<<<<<<<< - * - * def __cmp__(self, other_string): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_obj); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dict); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_GetItem(__pyx_t_2, __pyx_v_the_attribute); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":896 - * return self.naked_u_string - * - * def __getattr__(self, the_attribute): # <<<<<<<<<<<<<< - * return self.obj.__dict__[the_attribute] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":899 - * return self.obj.__dict__[the_attribute] - * - * def __cmp__(self, other_string): # <<<<<<<<<<<<<< - * return hash(self.naked_u_string) == hash(other_string) - * # TODO: add check for same attributes - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_9__cmp__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_9__cmp__ = {__Pyx_NAMESTR("__cmp__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_9__cmp__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_9__cmp__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_other_string = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cmp__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_other_string,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_other_string)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__cmp__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cmp__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_other_string = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__cmp__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__cmp__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__cmp__(__pyx_self, __pyx_v_self, __pyx_v_other_string); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_8__cmp__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_other_string) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_hash_t __pyx_t_2; - Py_hash_t __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cmp__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":900 - * - * def __cmp__(self, other_string): - * return hash(self.naked_u_string) == hash(other_string) # <<<<<<<<<<<<<< - * # TODO: add check for same attributes - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_u_string); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = PyObject_Hash(__pyx_v_other_string); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_t_2 == __pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 900; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":899 - * return self.obj.__dict__[the_attribute] - * - * def __cmp__(self, other_string): # <<<<<<<<<<<<<< - * return hash(self.naked_u_string) == hash(other_string) - * # TODO: add check for same attributes - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.__cmp__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":907 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_11_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_11_getAttributeDict = {__Pyx_NAMESTR("_getAttributeDict"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_11_getAttributeDict, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_11_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_getAttributeDict (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_10_getAttributeDict(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_10_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_getAttributeDict", 0); - - /* "lib/Naked/toolshed/c/types.pyx":908 - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): - * return self.__dict__ # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":907 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode._getAttributeDict", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":914 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_13type(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_13type = {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_13type, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_8XUnicode_13type(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("type (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_12type(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_12type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("type", 0); - - /* "lib/Naked/toolshed/c/types.pyx":915 - * #------------------------------------------------------------------------------ - * def type(self): - * if hasattr(self, '_naked_type_'): # <<<<<<<<<<<<<< - * return self._naked_type_ - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":916 - * def type(self): - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ # <<<<<<<<<<<<<< - * else: - * return None - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":918 - * return self._naked_type_ - * else: - * return None # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":914 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XUnicode.type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":926 - * #------------------------------------------------------------------------------ - * class XTuple(tuple): - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): # <<<<<<<<<<<<<< - * tup_obj = tuple.__new__(cls, the_tuple) - * if len(attributes) > 0: - */ - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_6__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self)->__pyx_arg_attributes); - PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self)->__pyx_arg_attributes); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self)->__pyx_arg_attributes); - __Pyx_INCREF(((PyObject*)__pyx_n_s_XTuple)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_n_s_XTuple)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_XTuple)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_INCREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __Pyx_GIVEREF(Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XTuple.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XTuple_1__new__ = {__Pyx_NAMESTR("__new__"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_1__new__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cls = 0; - PyObject *__pyx_v_the_tuple = 0; - PyObject *__pyx_v_attributes = 0; - PyObject *__pyx_v_naked_type = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__new__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_the_tuple,&__pyx_n_s_attributes,&__pyx_n_s_naked_type,0}; - PyObject* values[4] = {0,0,0,0}; - __pyx_defaults10 *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_self); - values[2] = __pyx_dynamic_args->__pyx_arg_attributes; - values[3] = ((PyObject *)((PyObject*)__pyx_n_s_XTuple)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cls)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_the_tuple)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_attributes); - if (value) { values[2] = value; kw_args--; } - } - case 3: - if (kw_args > 0) { - PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_naked_type); - if (value) { values[3] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_cls = values[0]; - __pyx_v_the_tuple = values[1]; - __pyx_v_attributes = values[2]; - __pyx_v_naked_type = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XTuple.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple___new__(__pyx_self, __pyx_v_cls, __pyx_v_the_tuple, __pyx_v_attributes, __pyx_v_naked_type); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_the_tuple, PyObject *__pyx_v_attributes, PyObject *__pyx_v_naked_type) { - PyObject *__pyx_v_tup_obj = NULL; - PyObject *__pyx_v_key = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - int __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__new__", 0); - - /* "lib/Naked/toolshed/c/types.pyx":927 - * class XTuple(tuple): - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): - * tup_obj = tuple.__new__(cls, the_tuple) # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cls); - __Pyx_GIVEREF(__pyx_v_cls); - __Pyx_INCREF(__pyx_v_the_tuple); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_the_tuple); - __Pyx_GIVEREF(__pyx_v_the_tuple); - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_tup_obj = __pyx_t_3; - __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":928 - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): - * tup_obj = tuple.__new__(cls, the_tuple) - * if len(attributes) > 0: # <<<<<<<<<<<<<< - * for key in attributes: - * setattr(tup_obj, key, attributes[key]) - */ - __pyx_t_4 = PyObject_Length(__pyx_v_attributes); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = ((__pyx_t_4 > 0) != 0); - if (__pyx_t_5) { - - /* "lib/Naked/toolshed/c/types.pyx":929 - * tup_obj = tuple.__new__(cls, the_tuple) - * if len(attributes) > 0: - * for key in attributes: # <<<<<<<<<<<<<< - * setattr(tup_obj, key, attributes[key]) - * setattr(tup_obj, '_naked_type_', naked_type) - */ - if (PyList_CheckExact(__pyx_v_attributes) || PyTuple_CheckExact(__pyx_v_attributes)) { - __pyx_t_3 = __pyx_v_attributes; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_attributes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; - } - for (;;) { - if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_3)) { - if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - } else { - __pyx_t_2 = __pyx_t_6(__pyx_t_3); - if (unlikely(!__pyx_t_2)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - break; - } - __Pyx_GOTREF(__pyx_t_2); - } - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_2); - __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":930 - * if len(attributes) > 0: - * for key in attributes: - * setattr(tup_obj, key, attributes[key]) # <<<<<<<<<<<<<< - * setattr(tup_obj, '_naked_type_', naked_type) - * return tup_obj - */ - __pyx_t_2 = PyObject_GetItem(__pyx_v_attributes, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 930; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = PyObject_SetAttr(__pyx_v_tup_obj, __pyx_v_key, __pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 930; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "lib/Naked/toolshed/c/types.pyx":931 - * for key in attributes: - * setattr(tup_obj, key, attributes[key]) - * setattr(tup_obj, '_naked_type_', naked_type) # <<<<<<<<<<<<<< - * return tup_obj - * - */ - __pyx_t_7 = PyObject_SetAttr(__pyx_v_tup_obj, __pyx_n_s_naked_type_2, __pyx_v_naked_type); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":932 - * setattr(tup_obj, key, attributes[key]) - * setattr(tup_obj, '_naked_type_', naked_type) - * return tup_obj # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_tup_obj); - __pyx_r = __pyx_v_tup_obj; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":926 - * #------------------------------------------------------------------------------ - * class XTuple(tuple): - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): # <<<<<<<<<<<<<< - * tup_obj = tuple.__new__(cls, the_tuple) - * if len(attributes) > 0: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XTuple.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_tup_obj); - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":938 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XTuple_3_getAttributeDict = {__Pyx_NAMESTR("_getAttributeDict"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_3_getAttributeDict, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_3_getAttributeDict(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_getAttributeDict (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_2_getAttributeDict(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_2_getAttributeDict(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_getAttributeDict", 0); - - /* "lib/Naked/toolshed/c/types.pyx":939 - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): - * return self.__dict__ # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 939; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "lib/Naked/toolshed/c/types.pyx":938 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XTuple._getAttributeDict", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "lib/Naked/toolshed/c/types.pyx":945 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_5type(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XTuple_5type = {__Pyx_NAMESTR("type"), (PyCFunction)__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_5type, METH_O, __Pyx_DOCSTR(0)}; -static PyObject *__pyx_pw_3lib_5Naked_8toolshed_1c_5types_6XTuple_5type(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("type (wrapper)", 0); - __pyx_r = __pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_4type(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_4type(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("type", 0); - - /* "lib/Naked/toolshed/c/types.pyx":946 - * #------------------------------------------------------------------------------ - * def type(self): - * if hasattr(self, '_naked_type_'): # <<<<<<<<<<<<<< - * return self._naked_type_ - * else: - */ - __pyx_t_1 = PyObject_HasAttr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "lib/Naked/toolshed/c/types.pyx":947 - * def type(self): - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ # <<<<<<<<<<<<<< - * else: - * return None - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_naked_type_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 947; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "lib/Naked/toolshed/c/types.pyx":949 - * return self._naked_type_ - * else: - * return None # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - - /* "lib/Naked/toolshed/c/types.pyx":945 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("lib.Naked.toolshed.c.types.XTuple.type", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - __Pyx_NAMESTR("types"), - 0, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, - {&__pyx_n_s_DEBUG_FLAG, __pyx_k_DEBUG_FLAG, sizeof(__pyx_k_DEBUG_FLAG), 0, 0, 1, 1}, - {&__pyx_n_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 1}, - {&__pyx_n_s_NFKD, __pyx_k_NFKD, sizeof(__pyx_k_NFKD), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject, __pyx_k_NakedObject, sizeof(__pyx_k_NakedObject), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject___eq, __pyx_k_NakedObject___eq, sizeof(__pyx_k_NakedObject___eq), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject___init, __pyx_k_NakedObject___init, sizeof(__pyx_k_NakedObject___init), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject___ne, __pyx_k_NakedObject___ne, sizeof(__pyx_k_NakedObject___ne), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject__equal_attributes, __pyx_k_NakedObject__equal_attributes, sizeof(__pyx_k_NakedObject__equal_attributes), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject__equal_type, __pyx_k_NakedObject__equal_type, sizeof(__pyx_k_NakedObject__equal_type), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject__getAttributeDict, __pyx_k_NakedObject__getAttributeDict, sizeof(__pyx_k_NakedObject__getAttributeDict), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject_equals, __pyx_k_NakedObject_equals, sizeof(__pyx_k_NakedObject_equals), 0, 0, 1, 1}, - {&__pyx_n_s_NakedObject_type, __pyx_k_NakedObject_type, sizeof(__pyx_k_NakedObject_type), 0, 0, 1, 1}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to, __pyx_k_Naked_Framework_Error_unable_to, sizeof(__pyx_k_Naked_Framework_Error_unable_to), 0, 0, 1, 0}, - {&__pyx_kp_s_Naked_Framework_Error_unable_to_2, __pyx_k_Naked_Framework_Error_unable_to_2, sizeof(__pyx_k_Naked_Framework_Error_unable_to_2), 0, 0, 1, 0}, - {&__pyx_n_s_Naked_settings, __pyx_k_Naked_settings, sizeof(__pyx_k_Naked_settings), 0, 0, 1, 1}, - {&__pyx_n_s_Naked_toolshed_python, __pyx_k_Naked_toolshed_python, sizeof(__pyx_k_Naked_toolshed_python), 0, 0, 1, 1}, - {&__pyx_kp_s_UTF_8, __pyx_k_UTF_8, sizeof(__pyx_k_UTF_8), 0, 0, 1, 0}, - {&__pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_k_Users_ces_Desktop_code_naked_li, sizeof(__pyx_k_Users_ces_Desktop_code_naked_li), 0, 0, 1, 0}, - {&__pyx_n_s_XDict, __pyx_k_XDict, sizeof(__pyx_k_XDict), 0, 0, 1, 1}, - {&__pyx_n_s_XDict___add, __pyx_k_XDict___add, sizeof(__pyx_k_XDict___add), 0, 0, 1, 1}, - {&__pyx_n_s_XDict___eq, __pyx_k_XDict___eq, sizeof(__pyx_k_XDict___eq), 0, 0, 1, 1}, - {&__pyx_n_s_XDict___iadd, __pyx_k_XDict___iadd, sizeof(__pyx_k_XDict___iadd), 0, 0, 1, 1}, - {&__pyx_n_s_XDict___init, __pyx_k_XDict___init, sizeof(__pyx_k_XDict___init), 0, 0, 1, 1}, - {&__pyx_n_s_XDict___ne, __pyx_k_XDict___ne, sizeof(__pyx_k_XDict___ne), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_conditional_map_to_vals, __pyx_k_XDict_conditional_map_to_vals, sizeof(__pyx_k_XDict_conditional_map_to_vals), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_difference, __pyx_k_XDict_difference, sizeof(__pyx_k_XDict_difference), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_equals, __pyx_k_XDict_equals, sizeof(__pyx_k_XDict_equals), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_intersection, __pyx_k_XDict_intersection, sizeof(__pyx_k_XDict_intersection), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_key_xlist, __pyx_k_XDict_key_xlist, sizeof(__pyx_k_XDict_key_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_map_to_vals, __pyx_k_XDict_map_to_vals, sizeof(__pyx_k_XDict_map_to_vals), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_max_val, __pyx_k_XDict_max_val, sizeof(__pyx_k_XDict_max_val), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_min_val, __pyx_k_XDict_min_val, sizeof(__pyx_k_XDict_min_val), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_random, __pyx_k_XDict_random, sizeof(__pyx_k_XDict_random), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_random_sample, __pyx_k_XDict_random_sample, sizeof(__pyx_k_XDict_random_sample), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_sum_vals, __pyx_k_XDict_sum_vals, sizeof(__pyx_k_XDict_sum_vals), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_val_count, __pyx_k_XDict_val_count, sizeof(__pyx_k_XDict_val_count), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_val_count_ci, __pyx_k_XDict_val_count_ci, sizeof(__pyx_k_XDict_val_count_ci), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_val_xlist, __pyx_k_XDict_val_xlist, sizeof(__pyx_k_XDict_val_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_XDict_xitems, __pyx_k_XDict_xitems, sizeof(__pyx_k_XDict_xitems), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet, __pyx_k_XFSet, sizeof(__pyx_k_XFSet), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet___new, __pyx_k_XFSet___new, sizeof(__pyx_k_XFSet___new), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet__getAttributeDict, __pyx_k_XFSet__getAttributeDict, sizeof(__pyx_k_XFSet__getAttributeDict), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet_type, __pyx_k_XFSet_type, sizeof(__pyx_k_XFSet_type), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet_xlist, __pyx_k_XFSet_xlist, sizeof(__pyx_k_XFSet_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_XFSet_xset, __pyx_k_XFSet_xset, sizeof(__pyx_k_XFSet_xset), 0, 0, 1, 1}, - {&__pyx_n_s_XList, __pyx_k_XList, sizeof(__pyx_k_XList), 0, 0, 1, 1}, - {&__pyx_n_s_XList___add, __pyx_k_XList___add, sizeof(__pyx_k_XList___add), 0, 0, 1, 1}, - {&__pyx_n_s_XList___eq, __pyx_k_XList___eq, sizeof(__pyx_k_XList___eq), 0, 0, 1, 1}, - {&__pyx_n_s_XList___iadd, __pyx_k_XList___iadd, sizeof(__pyx_k_XList___iadd), 0, 0, 1, 1}, - {&__pyx_n_s_XList___init, __pyx_k_XList___init, sizeof(__pyx_k_XList___init), 0, 0, 1, 1}, - {&__pyx_n_s_XList___ne, __pyx_k_XList___ne, sizeof(__pyx_k_XList___ne), 0, 0, 1, 1}, - {&__pyx_n_s_XList_conditional_map_to_items, __pyx_k_XList_conditional_map_to_items, sizeof(__pyx_k_XList_conditional_map_to_items), 0, 0, 1, 1}, - {&__pyx_n_s_XList_count_ci, __pyx_k_XList_count_ci, sizeof(__pyx_k_XList_count_ci), 0, 0, 1, 1}, - {&__pyx_n_s_XList_count_duplicates, __pyx_k_XList_count_duplicates, sizeof(__pyx_k_XList_count_duplicates), 0, 0, 1, 1}, - {&__pyx_n_s_XList_difference, __pyx_k_XList_difference, sizeof(__pyx_k_XList_difference), 0, 0, 1, 1}, - {&__pyx_n_s_XList_equals, __pyx_k_XList_equals, sizeof(__pyx_k_XList_equals), 0, 0, 1, 1}, - {&__pyx_n_s_XList_intersection, __pyx_k_XList_intersection, sizeof(__pyx_k_XList_intersection), 0, 0, 1, 1}, - {&__pyx_n_s_XList_join, __pyx_k_XList_join, sizeof(__pyx_k_XList_join), 0, 0, 1, 1}, - {&__pyx_n_s_XList_map_to_items, __pyx_k_XList_map_to_items, sizeof(__pyx_k_XList_map_to_items), 0, 0, 1, 1}, - {&__pyx_n_s_XList_max, __pyx_k_XList_max, sizeof(__pyx_k_XList_max), 0, 0, 1, 1}, - {&__pyx_n_s_XList_min, __pyx_k_XList_min, sizeof(__pyx_k_XList_min), 0, 0, 1, 1}, - {&__pyx_n_s_XList_multi_wildcard_match, __pyx_k_XList_multi_wildcard_match, sizeof(__pyx_k_XList_multi_wildcard_match), 0, 0, 1, 1}, - {&__pyx_n_s_XList_postfix, __pyx_k_XList_postfix, sizeof(__pyx_k_XList_postfix), 0, 0, 1, 1}, - {&__pyx_n_s_XList_prefix, __pyx_k_XList_prefix, sizeof(__pyx_k_XList_prefix), 0, 0, 1, 1}, - {&__pyx_n_s_XList_random, __pyx_k_XList_random, sizeof(__pyx_k_XList_random), 0, 0, 1, 1}, - {&__pyx_n_s_XList_random_sample, __pyx_k_XList_random_sample, sizeof(__pyx_k_XList_random_sample), 0, 0, 1, 1}, - {&__pyx_n_s_XList_remove_duplicates, __pyx_k_XList_remove_duplicates, sizeof(__pyx_k_XList_remove_duplicates), 0, 0, 1, 1}, - {&__pyx_n_s_XList_shuffle, __pyx_k_XList_shuffle, sizeof(__pyx_k_XList_shuffle), 0, 0, 1, 1}, - {&__pyx_n_s_XList_sum, __pyx_k_XList_sum, sizeof(__pyx_k_XList_sum), 0, 0, 1, 1}, - {&__pyx_n_s_XList_surround, __pyx_k_XList_surround, sizeof(__pyx_k_XList_surround), 0, 0, 1, 1}, - {&__pyx_n_s_XList_wildcard_match, __pyx_k_XList_wildcard_match, sizeof(__pyx_k_XList_wildcard_match), 0, 0, 1, 1}, - {&__pyx_n_s_XList_xfset, __pyx_k_XList_xfset, sizeof(__pyx_k_XList_xfset), 0, 0, 1, 1}, - {&__pyx_n_s_XList_xset, __pyx_k_XList_xset, sizeof(__pyx_k_XList_xset), 0, 0, 1, 1}, - {&__pyx_n_s_XList_xtuple, __pyx_k_XList_xtuple, sizeof(__pyx_k_XList_xtuple), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap, __pyx_k_XMaxHeap, sizeof(__pyx_k_XMaxHeap), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap___init, __pyx_k_XMaxHeap___init, sizeof(__pyx_k_XMaxHeap___init), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap___len, __pyx_k_XMaxHeap___len, sizeof(__pyx_k_XMaxHeap___len), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap_length, __pyx_k_XMaxHeap_length, sizeof(__pyx_k_XMaxHeap_length), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap_pop, __pyx_k_XMaxHeap_pop, sizeof(__pyx_k_XMaxHeap_pop), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap_push, __pyx_k_XMaxHeap_push, sizeof(__pyx_k_XMaxHeap_push), 0, 0, 1, 1}, - {&__pyx_n_s_XMaxHeap_pushpop, __pyx_k_XMaxHeap_pushpop, sizeof(__pyx_k_XMaxHeap_pushpop), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap, __pyx_k_XMinHeap, sizeof(__pyx_k_XMinHeap), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap___init, __pyx_k_XMinHeap___init, sizeof(__pyx_k_XMinHeap___init), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap___len, __pyx_k_XMinHeap___len, sizeof(__pyx_k_XMinHeap___len), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap_length, __pyx_k_XMinHeap_length, sizeof(__pyx_k_XMinHeap_length), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap_pop, __pyx_k_XMinHeap_pop, sizeof(__pyx_k_XMinHeap_pop), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap_push, __pyx_k_XMinHeap_push, sizeof(__pyx_k_XMinHeap_push), 0, 0, 1, 1}, - {&__pyx_n_s_XMinHeap_pushpop, __pyx_k_XMinHeap_pushpop, sizeof(__pyx_k_XMinHeap_pushpop), 0, 0, 1, 1}, - {&__pyx_n_s_XQueue, __pyx_k_XQueue, sizeof(__pyx_k_XQueue), 0, 0, 1, 1}, - {&__pyx_n_s_XQueue___init, __pyx_k_XQueue___init, sizeof(__pyx_k_XQueue___init), 0, 0, 1, 1}, - {&__pyx_n_s_XSet, __pyx_k_XSet, sizeof(__pyx_k_XSet), 0, 0, 1, 1}, - {&__pyx_n_s_XSet___iadd, __pyx_k_XSet___iadd, sizeof(__pyx_k_XSet___iadd), 0, 0, 1, 1}, - {&__pyx_n_s_XSet___init, __pyx_k_XSet___init, sizeof(__pyx_k_XSet___init), 0, 0, 1, 1}, - {&__pyx_n_s_XSet___lshift, __pyx_k_XSet___lshift, sizeof(__pyx_k_XSet___lshift), 0, 0, 1, 1}, - {&__pyx_n_s_XSet_xfset, __pyx_k_XSet_xfset, sizeof(__pyx_k_XSet_xfset), 0, 0, 1, 1}, - {&__pyx_n_s_XSet_xlist, __pyx_k_XSet_xlist, sizeof(__pyx_k_XSet_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_XString, __pyx_k_XString, sizeof(__pyx_k_XString), 0, 0, 1, 1}, - {&__pyx_n_s_XString___new, __pyx_k_XString___new, sizeof(__pyx_k_XString___new), 0, 0, 1, 1}, - {&__pyx_n_s_XString__getAttributeDict, __pyx_k_XString__getAttributeDict, sizeof(__pyx_k_XString__getAttributeDict), 0, 0, 1, 1}, - {&__pyx_n_s_XString_begins, __pyx_k_XString_begins, sizeof(__pyx_k_XString_begins), 0, 0, 1, 1}, - {&__pyx_n_s_XString_concat, __pyx_k_XString_concat, sizeof(__pyx_k_XString_concat), 0, 0, 1, 1}, - {&__pyx_n_s_XString_contains, __pyx_k_XString_contains, sizeof(__pyx_k_XString_contains), 0, 0, 1, 1}, - {&__pyx_n_s_XString_ends, __pyx_k_XString_ends, sizeof(__pyx_k_XString_ends), 0, 0, 1, 1}, - {&__pyx_n_s_XString_type, __pyx_k_XString_type, sizeof(__pyx_k_XString_type), 0, 0, 1, 1}, - {&__pyx_n_s_XString_unicode, __pyx_k_XString_unicode, sizeof(__pyx_k_XString_unicode), 0, 0, 1, 1}, - {&__pyx_n_s_XString_wildcard_match, __pyx_k_XString_wildcard_match, sizeof(__pyx_k_XString_wildcard_match), 0, 0, 1, 1}, - {&__pyx_n_s_XString_xsplit, __pyx_k_XString_xsplit, sizeof(__pyx_k_XString_xsplit), 0, 0, 1, 1}, - {&__pyx_n_s_XString_xsplit_set, __pyx_k_XString_xsplit_set, sizeof(__pyx_k_XString_xsplit_set), 0, 0, 1, 1}, - {&__pyx_n_s_XTuple, __pyx_k_XTuple, sizeof(__pyx_k_XTuple), 0, 0, 1, 1}, - {&__pyx_n_s_XTuple___new, __pyx_k_XTuple___new, sizeof(__pyx_k_XTuple___new), 0, 0, 1, 1}, - {&__pyx_n_s_XTuple__getAttributeDict, __pyx_k_XTuple__getAttributeDict, sizeof(__pyx_k_XTuple__getAttributeDict), 0, 0, 1, 1}, - {&__pyx_n_s_XTuple_type, __pyx_k_XTuple_type, sizeof(__pyx_k_XTuple_type), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode, __pyx_k_XUnicode, sizeof(__pyx_k_XUnicode), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode2, __pyx_k_XUnicode2, sizeof(__pyx_k_XUnicode2), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode3, __pyx_k_XUnicode3, sizeof(__pyx_k_XUnicode3), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode_2, __pyx_k_XUnicode_2, sizeof(__pyx_k_XUnicode_2), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode_3, __pyx_k_XUnicode_3, sizeof(__pyx_k_XUnicode_3), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___cmp, __pyx_k_XUnicode___cmp, sizeof(__pyx_k_XUnicode___cmp), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___getattr, __pyx_k_XUnicode___getattr, sizeof(__pyx_k_XUnicode___getattr), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___init, __pyx_k_XUnicode___init, sizeof(__pyx_k_XUnicode___init), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___init___locals_XUnicod, __pyx_k_XUnicode___init___locals_XUnicod, sizeof(__pyx_k_XUnicode___init___locals_XUnicod), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___init___locals_XUnicod_2, __pyx_k_XUnicode___init___locals_XUnicod_2, sizeof(__pyx_k_XUnicode___init___locals_XUnicod_2), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___init___locals_XUnicod_3, __pyx_k_XUnicode___init___locals_XUnicod_3, sizeof(__pyx_k_XUnicode___init___locals_XUnicod_3), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___init___locals_XUnicod_4, __pyx_k_XUnicode___init___locals_XUnicod_4, sizeof(__pyx_k_XUnicode___init___locals_XUnicod_4), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___repr, __pyx_k_XUnicode___repr, sizeof(__pyx_k_XUnicode___repr), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode___str, __pyx_k_XUnicode___str, sizeof(__pyx_k_XUnicode___str), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode__getAttributeDict, __pyx_k_XUnicode__getAttributeDict, sizeof(__pyx_k_XUnicode__getAttributeDict), 0, 0, 1, 1}, - {&__pyx_n_s_XUnicode_type, __pyx_k_XUnicode_type, sizeof(__pyx_k_XUnicode_type), 0, 0, 1, 1}, - {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0}, - {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0}, - {&__pyx_kp_s__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 0, 1, 0}, - {&__pyx_kp_s__9, __pyx_k__9, sizeof(__pyx_k__9), 0, 0, 1, 0}, - {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1}, - {&__pyx_n_s_after, __pyx_k_after, sizeof(__pyx_k_after), 0, 0, 1, 1}, - {&__pyx_n_s_another_dict, __pyx_k_another_dict, sizeof(__pyx_k_another_dict), 0, 0, 1, 1}, - {&__pyx_n_s_another_list, __pyx_k_another_list, sizeof(__pyx_k_another_list), 0, 0, 1, 1}, - {&__pyx_n_s_another_set, __pyx_k_another_set, sizeof(__pyx_k_another_set), 0, 0, 1, 1}, - {&__pyx_n_s_attr_dict, __pyx_k_attr_dict, sizeof(__pyx_k_attr_dict), 0, 0, 1, 1}, - {&__pyx_n_s_attributes, __pyx_k_attributes, sizeof(__pyx_k_attributes), 0, 0, 1, 1}, - {&__pyx_n_s_before, __pyx_k_before, sizeof(__pyx_k_before), 0, 0, 1, 1}, - {&__pyx_n_s_begin_string, __pyx_k_begin_string, sizeof(__pyx_k_begin_string), 0, 0, 1, 1}, - {&__pyx_n_s_begins, __pyx_k_begins, sizeof(__pyx_k_begins), 0, 0, 1, 1}, - {&__pyx_n_s_choice, __pyx_k_choice, sizeof(__pyx_k_choice), 0, 0, 1, 1}, - {&__pyx_n_s_cls, __pyx_k_cls, sizeof(__pyx_k_cls), 0, 0, 1, 1}, - {&__pyx_n_s_cmp, __pyx_k_cmp, sizeof(__pyx_k_cmp), 0, 0, 1, 1}, - {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, - {&__pyx_n_s_concat, __pyx_k_concat, sizeof(__pyx_k_concat), 0, 0, 1, 1}, - {&__pyx_n_s_conditional_function, __pyx_k_conditional_function, sizeof(__pyx_k_conditional_function), 0, 0, 1, 1}, - {&__pyx_n_s_conditional_map_to_items, __pyx_k_conditional_map_to_items, sizeof(__pyx_k_conditional_map_to_items), 0, 0, 1, 1}, - {&__pyx_n_s_conditional_map_to_vals, __pyx_k_conditional_map_to_vals, sizeof(__pyx_k_conditional_map_to_vals), 0, 0, 1, 1}, - {&__pyx_n_s_contains, __pyx_k_contains, sizeof(__pyx_k_contains), 0, 0, 1, 1}, - {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, - {&__pyx_n_s_count_ci, __pyx_k_count_ci, sizeof(__pyx_k_count_ci), 0, 0, 1, 1}, - {&__pyx_n_s_count_duplicates, __pyx_k_count_duplicates, sizeof(__pyx_k_count_duplicates), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, - {&__pyx_n_s_delim2, __pyx_k_delim2, sizeof(__pyx_k_delim2), 0, 0, 1, 1}, - {&__pyx_n_s_deque, __pyx_k_deque, sizeof(__pyx_k_deque), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_dict_obj, __pyx_k_dict_obj, sizeof(__pyx_k_dict_obj), 0, 0, 1, 1}, - {&__pyx_n_s_difference, __pyx_k_difference, sizeof(__pyx_k_difference), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1}, - {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, - {&__pyx_n_s_end_string, __pyx_k_end_string, sizeof(__pyx_k_end_string), 0, 0, 1, 1}, - {&__pyx_n_s_ends, __pyx_k_ends, sizeof(__pyx_k_ends), 0, 0, 1, 1}, - {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, - {&__pyx_n_s_eq, __pyx_k_eq, sizeof(__pyx_k_eq), 0, 0, 1, 1}, - {&__pyx_n_s_equal_attributes, __pyx_k_equal_attributes, sizeof(__pyx_k_equal_attributes), 0, 0, 1, 1}, - {&__pyx_n_s_equal_type, __pyx_k_equal_type, sizeof(__pyx_k_equal_type), 0, 0, 1, 1}, - {&__pyx_n_s_equals, __pyx_k_equals, sizeof(__pyx_k_equals), 0, 0, 1, 1}, - {&__pyx_n_s_extend, __pyx_k_extend, sizeof(__pyx_k_extend), 0, 0, 1, 1}, - {&__pyx_n_s_first_list, __pyx_k_first_list, sizeof(__pyx_k_first_list), 0, 0, 1, 1}, - {&__pyx_n_s_fnmatch, __pyx_k_fnmatch, sizeof(__pyx_k_fnmatch), 0, 0, 1, 1}, - {&__pyx_n_s_fnmatchcase, __pyx_k_fnmatchcase, sizeof(__pyx_k_fnmatchcase), 0, 0, 1, 1}, - {&__pyx_n_s_getAttributeDict, __pyx_k_getAttributeDict, sizeof(__pyx_k_getAttributeDict), 0, 0, 1, 1}, - {&__pyx_n_s_getattr, __pyx_k_getattr, sizeof(__pyx_k_getattr), 0, 0, 1, 1}, - {&__pyx_n_s_heappop, __pyx_k_heappop, sizeof(__pyx_k_heappop), 0, 0, 1, 1}, - {&__pyx_n_s_heappush, __pyx_k_heappush, sizeof(__pyx_k_heappush), 0, 0, 1, 1}, - {&__pyx_n_s_heapq, __pyx_k_heapq, sizeof(__pyx_k_heapq), 0, 0, 1, 1}, - {&__pyx_n_s_iadd, __pyx_k_iadd, sizeof(__pyx_k_iadd), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, - {&__pyx_n_s_index_2, __pyx_k_index_2, sizeof(__pyx_k_index_2), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_initial_iterable, __pyx_k_initial_iterable, sizeof(__pyx_k_initial_iterable), 0, 0, 1, 1}, - {&__pyx_n_s_intersection, __pyx_k_intersection, sizeof(__pyx_k_intersection), 0, 0, 1, 1}, - {&__pyx_n_s_item, __pyx_k_item, sizeof(__pyx_k_item), 0, 0, 1, 1}, - {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, - {&__pyx_n_s_iteritems, __pyx_k_iteritems, sizeof(__pyx_k_iteritems), 0, 0, 1, 1}, - {&__pyx_n_s_join, __pyx_k_join, sizeof(__pyx_k_join), 0, 0, 1, 1}, - {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1}, - {&__pyx_n_s_key_xlist, __pyx_k_key_xlist, sizeof(__pyx_k_key_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1}, - {&__pyx_n_s_len, __pyx_k_len, sizeof(__pyx_k_len), 0, 0, 1, 1}, - {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1}, - {&__pyx_n_s_lib_Naked_toolshed_c_types, __pyx_k_lib_Naked_toolshed_c_types, sizeof(__pyx_k_lib_Naked_toolshed_c_types), 0, 0, 1, 1}, - {&__pyx_n_s_list_obj, __pyx_k_list_obj, sizeof(__pyx_k_list_obj), 0, 0, 1, 1}, - {&__pyx_n_s_lower, __pyx_k_lower, sizeof(__pyx_k_lower), 0, 0, 1, 1}, - {&__pyx_n_s_lshift, __pyx_k_lshift, sizeof(__pyx_k_lshift), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_map_to_items, __pyx_k_map_to_items, sizeof(__pyx_k_map_to_items), 0, 0, 1, 1}, - {&__pyx_n_s_map_to_vals, __pyx_k_map_to_vals, sizeof(__pyx_k_map_to_vals), 0, 0, 1, 1}, - {&__pyx_n_s_mapped_function, __pyx_k_mapped_function, sizeof(__pyx_k_mapped_function), 0, 0, 1, 1}, - {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, - {&__pyx_n_s_max_length, __pyx_k_max_length, sizeof(__pyx_k_max_length), 0, 0, 1, 1}, - {&__pyx_n_s_max_val, __pyx_k_max_val, sizeof(__pyx_k_max_val), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1}, - {&__pyx_n_s_min_val, __pyx_k_min_val, sizeof(__pyx_k_min_val), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_multi_wildcard_match, __pyx_k_multi_wildcard_match, sizeof(__pyx_k_multi_wildcard_match), 0, 0, 1, 1}, - {&__pyx_n_s_naked_type, __pyx_k_naked_type, sizeof(__pyx_k_naked_type), 0, 0, 1, 1}, - {&__pyx_n_s_naked_type_2, __pyx_k_naked_type_2, sizeof(__pyx_k_naked_type_2), 0, 0, 1, 1}, - {&__pyx_n_s_naked_u_string, __pyx_k_naked_u_string, sizeof(__pyx_k_naked_u_string), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_ne, __pyx_k_ne, sizeof(__pyx_k_ne), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_new_dict, __pyx_k_new_dict, sizeof(__pyx_k_new_dict), 0, 0, 1, 1}, - {&__pyx_n_s_nkd_fnmatchcase, __pyx_k_nkd_fnmatchcase, sizeof(__pyx_k_nkd_fnmatchcase), 0, 0, 1, 1}, - {&__pyx_n_s_norm_text, __pyx_k_norm_text, sizeof(__pyx_k_norm_text), 0, 0, 1, 1}, - {&__pyx_n_s_norm_unicode, __pyx_k_norm_unicode, sizeof(__pyx_k_norm_unicode), 0, 0, 1, 1}, - {&__pyx_n_s_normalize, __pyx_k_normalize, sizeof(__pyx_k_normalize), 0, 0, 1, 1}, - {&__pyx_n_s_number_of_items, __pyx_k_number_of_items, sizeof(__pyx_k_number_of_items), 0, 0, 1, 1}, - {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, - {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1}, - {&__pyx_n_s_other_dict, __pyx_k_other_dict, sizeof(__pyx_k_other_dict), 0, 0, 1, 1}, - {&__pyx_n_s_other_lists, __pyx_k_other_lists, sizeof(__pyx_k_other_lists), 0, 0, 1, 1}, - {&__pyx_n_s_other_obj, __pyx_k_other_obj, sizeof(__pyx_k_other_obj), 0, 0, 1, 1}, - {&__pyx_n_s_other_string, __pyx_k_other_string, sizeof(__pyx_k_other_string), 0, 0, 1, 1}, - {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1}, - {&__pyx_n_s_postfix, __pyx_k_postfix, sizeof(__pyx_k_postfix), 0, 0, 1, 1}, - {&__pyx_n_s_prefix, __pyx_k_prefix, sizeof(__pyx_k_prefix), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_priority, __pyx_k_priority, sizeof(__pyx_k_priority), 0, 0, 1, 1}, - {&__pyx_n_s_push, __pyx_k_push, sizeof(__pyx_k_push), 0, 0, 1, 1}, - {&__pyx_n_s_pushpop, __pyx_k_pushpop, sizeof(__pyx_k_pushpop), 0, 0, 1, 1}, - {&__pyx_n_s_py_major_version, __pyx_k_py_major_version, sizeof(__pyx_k_py_major_version), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_queue, __pyx_k_queue, sizeof(__pyx_k_queue), 0, 0, 1, 1}, - {&__pyx_n_s_random, __pyx_k_random, sizeof(__pyx_k_random), 0, 0, 1, 1}, - {&__pyx_n_s_random_key_list, __pyx_k_random_key_list, sizeof(__pyx_k_random_key_list), 0, 0, 1, 1}, - {&__pyx_n_s_random_sample, __pyx_k_random_sample, sizeof(__pyx_k_random_sample), 0, 0, 1, 1}, - {&__pyx_n_s_re, __pyx_k_re, sizeof(__pyx_k_re), 0, 0, 1, 1}, - {&__pyx_n_s_remove_duplicates, __pyx_k_remove_duplicates, sizeof(__pyx_k_remove_duplicates), 0, 0, 1, 1}, - {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1}, - {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1}, - {&__pyx_n_s_result_list, __pyx_k_result_list, sizeof(__pyx_k_result_list), 0, 0, 1, 1}, - {&__pyx_n_s_return_list, __pyx_k_return_list, sizeof(__pyx_k_return_list), 0, 0, 1, 1}, - {&__pyx_n_s_sample, __pyx_k_sample, sizeof(__pyx_k_sample), 0, 0, 1, 1}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_separator, __pyx_k_separator, sizeof(__pyx_k_separator), 0, 0, 1, 1}, - {&__pyx_n_s_set_obj, __pyx_k_set_obj, sizeof(__pyx_k_set_obj), 0, 0, 1, 1}, - {&__pyx_n_s_shuffle, __pyx_k_shuffle, sizeof(__pyx_k_shuffle), 0, 0, 1, 1}, - {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1}, - {&__pyx_n_s_split_delimiter, __pyx_k_split_delimiter, sizeof(__pyx_k_split_delimiter), 0, 0, 1, 1}, - {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1}, - {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1}, - {&__pyx_n_s_str_list, __pyx_k_str_list, sizeof(__pyx_k_str_list), 0, 0, 1, 1}, - {&__pyx_n_s_str_obj, __pyx_k_str_obj, sizeof(__pyx_k_str_obj), 0, 0, 1, 1}, - {&__pyx_n_s_string_text, __pyx_k_string_text, sizeof(__pyx_k_string_text), 0, 0, 1, 1}, - {&__pyx_n_s_strings, __pyx_k_strings, sizeof(__pyx_k_strings), 0, 0, 1, 1}, - {&__pyx_n_s_subitem, __pyx_k_subitem, sizeof(__pyx_k_subitem), 0, 0, 1, 1}, - {&__pyx_n_s_substring, __pyx_k_substring, sizeof(__pyx_k_substring), 0, 0, 1, 1}, - {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, - {&__pyx_n_s_sum_vals, __pyx_k_sum_vals, sizeof(__pyx_k_sum_vals), 0, 0, 1, 1}, - {&__pyx_n_s_surround, __pyx_k_surround, sizeof(__pyx_k_surround), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_temp_list, __pyx_k_temp_list, sizeof(__pyx_k_temp_list), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_test_string, __pyx_k_test_string, sizeof(__pyx_k_test_string), 0, 0, 1, 1}, - {&__pyx_n_s_test_value, __pyx_k_test_value, sizeof(__pyx_k_test_value), 0, 0, 1, 1}, - {&__pyx_n_s_the_attribute, __pyx_k_the_attribute, sizeof(__pyx_k_the_attribute), 0, 0, 1, 1}, - {&__pyx_n_s_the_key, __pyx_k_the_key, sizeof(__pyx_k_the_key), 0, 0, 1, 1}, - {&__pyx_n_s_the_list, __pyx_k_the_list, sizeof(__pyx_k_the_list), 0, 0, 1, 1}, - {&__pyx_n_s_the_object, __pyx_k_the_object, sizeof(__pyx_k_the_object), 0, 0, 1, 1}, - {&__pyx_n_s_the_set, __pyx_k_the_set, sizeof(__pyx_k_the_set), 0, 0, 1, 1}, - {&__pyx_n_s_the_string_text, __pyx_k_the_string_text, sizeof(__pyx_k_the_string_text), 0, 0, 1, 1}, - {&__pyx_n_s_the_tuple, __pyx_k_the_tuple, sizeof(__pyx_k_the_tuple), 0, 0, 1, 1}, - {&__pyx_n_s_tup_obj, __pyx_k_tup_obj, sizeof(__pyx_k_tup_obj), 0, 0, 1, 1}, - {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1}, - {&__pyx_n_s_unicode, __pyx_k_unicode, sizeof(__pyx_k_unicode), 0, 0, 1, 1}, - {&__pyx_n_s_unicodedata, __pyx_k_unicodedata, sizeof(__pyx_k_unicodedata), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_kp_s_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 0, 1, 0}, - {&__pyx_n_s_val_count, __pyx_k_val_count, sizeof(__pyx_k_val_count), 0, 0, 1, 1}, - {&__pyx_n_s_val_count_ci, __pyx_k_val_count_ci, sizeof(__pyx_k_val_count_ci), 0, 0, 1, 1}, - {&__pyx_n_s_val_xlist, __pyx_k_val_xlist, sizeof(__pyx_k_val_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1}, - {&__pyx_n_s_value_name, __pyx_k_value_name, sizeof(__pyx_k_value_name), 0, 0, 1, 1}, - {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, - {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, - {&__pyx_n_s_wc, __pyx_k_wc, sizeof(__pyx_k_wc), 0, 0, 1, 1}, - {&__pyx_n_s_wc_list, __pyx_k_wc_list, sizeof(__pyx_k_wc_list), 0, 0, 1, 1}, - {&__pyx_n_s_wildcard, __pyx_k_wildcard, sizeof(__pyx_k_wildcard), 0, 0, 1, 1}, - {&__pyx_n_s_wildcard_match, __pyx_k_wildcard_match, sizeof(__pyx_k_wildcard_match), 0, 0, 1, 1}, - {&__pyx_n_s_wildcards, __pyx_k_wildcards, sizeof(__pyx_k_wildcards), 0, 0, 1, 1}, - {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1}, - {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1}, - {&__pyx_n_s_xfset, __pyx_k_xfset, sizeof(__pyx_k_xfset), 0, 0, 1, 1}, - {&__pyx_n_s_xitems, __pyx_k_xitems, sizeof(__pyx_k_xitems), 0, 0, 1, 1}, - {&__pyx_n_s_xlist, __pyx_k_xlist, sizeof(__pyx_k_xlist), 0, 0, 1, 1}, - {&__pyx_n_s_xset, __pyx_k_xset, sizeof(__pyx_k_xset), 0, 0, 1, 1}, - {&__pyx_n_s_xsplit, __pyx_k_xsplit, sizeof(__pyx_k_xsplit), 0, 0, 1, 1}, - {&__pyx_n_s_xsplit_set, __pyx_k_xsplit_set, sizeof(__pyx_k_xsplit_set), 0, 0, 1, 1}, - {&__pyx_n_s_xtuple, __pyx_k_xtuple, sizeof(__pyx_k_xtuple), 0, 0, 1, 1}, - {&__pyx_n_s_zip, __pyx_k_zip, sizeof(__pyx_k_zip), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_max = __Pyx_GetBuiltinName(__pyx_n_s_max); if (!__pyx_builtin_max) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_zip = __Pyx_GetBuiltinName(__pyx_n_s_zip); if (!__pyx_builtin_zip) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 197; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_min = __Pyx_GetBuiltinName(__pyx_n_s_min); if (!__pyx_builtin_min) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_sum = __Pyx_GetBuiltinName(__pyx_n_s_sum); if (!__pyx_builtin_sum) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "lib/Naked/toolshed/c/types.pyx":107 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "lib/Naked/toolshed/c/types.pyx":126 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "lib/Naked/toolshed/c/types.pyx":338 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_2); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "lib/Naked/toolshed/c/types.pyx":358 - * except Exception as e: - * if DEBUG_FLAG: - * sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") # <<<<<<<<<<<<<< - * raise e - * - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_Naked_Framework_Error_unable_to_2); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "lib/Naked/toolshed/c/types.pyx":574 - * from fnmatch import fnmatchcase - * self.nkd_fnmatchcase = fnmatchcase - * wc_list = wildcards.split('|') # <<<<<<<<<<<<<< - * return_list = [] - * for wc in wc_list: - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s__6); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "lib/Naked/toolshed/c/types.pyx":851 - * from unicodedata import normalize - * if version_info[0] == 2: - * return normalize('NFKD', self.decode('UTF-8')) # <<<<<<<<<<<<<< - * else: - * return normalize('NFKD', self) - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_UTF_8); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "lib/Naked/toolshed/c/types.pyx":864 - * - * class XUnicode_2(unicode): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): # <<<<<<<<<<<<<< - * str_obj = unicode.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - __pyx_tuple__11 = PyTuple_Pack(6, __pyx_n_s_cls, __pyx_n_s_the_string_text, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_str_obj, __pyx_n_s_key); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_new, 864, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":873 - * - * class XUnicode_3(str): - * def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, the_string_text) - * if len(attributes) > 0: - */ - __pyx_tuple__13 = PyTuple_Pack(6, __pyx_n_s_cls, __pyx_n_s_the_string_text, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_str_obj, __pyx_n_s_key); if (unlikely(!__pyx_tuple__13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_new, 873, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":885 - * self.obj = XUnicode_2(norm_text, attributes) - * self.norm_unicode = norm_text - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string # <<<<<<<<<<<<<< - * elif sys.version_info[0] == 3: - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - - /* "lib/Naked/toolshed/c/types.pyx":887 - * self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - * elif sys.version_info[0] == 3: - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? # <<<<<<<<<<<<<< - * - * def __str__(self): - */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); - - /* "lib/Naked/toolshed/c/types.pyx":17 - * class NakedObject(object): - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_tuple__17 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_key); if (unlikely(!__pyx_tuple__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 17, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":27 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_getAttributeDict, 27, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":34 - * # returns boolean for type of instance == type of test parameter instance - * #------------------------------------------------------------------------------ - * def _equal_type(self, other_obj): # <<<<<<<<<<<<<< - * return type(self) == type(other_obj) - * - */ - __pyx_tuple__21 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_equal_type, 34, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":41 - * # returns boolean for instance.__dict__ == test parameter .__dict__ (attribute comparison) - * #------------------------------------------------------------------------------ - * def _equal_attributes(self, other_obj): # <<<<<<<<<<<<<< - * return self.__dict__ == other_obj.__dict__ - * - */ - __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_equal_attributes, 41, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":47 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_eq, 47, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":53 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - __pyx_tuple__27 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_other_obj, __pyx_n_s_result); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_ne, 53, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":65 - * # **NEED TO OVERRIDE IN CLASSES THAT INHERIT - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * return self._equal_type(other_obj) and self._equal_attributes(other_obj) - * - */ - __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_equals, 65, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":72 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_tuple__31 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_type, 72, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":83 - * #------------------------------------------------------------------------------ - * class XDict(dict, NakedObject): - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): # <<<<<<<<<<<<<< - * dict.__init__(self, dict_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_tuple__33 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_dict_obj, __pyx_n_s_attributes, __pyx_n_s_naked_type); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 83, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":96 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __add__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - __pyx_tuple__35 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_other_dict, __pyx_n_s_attr_dict, __pyx_n_s_key, __pyx_n_s_e); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_add, 96, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":115 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __iadd__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - __pyx_tuple__37 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_other_dict, __pyx_n_s_attr_dict, __pyx_n_s_key, __pyx_n_s_e); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_iadd, 115, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":132 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - __pyx_tuple__39 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__39); - __Pyx_GIVEREF(__pyx_tuple__39); - __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_eq, 132, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":138 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - __pyx_tuple__41 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_other_obj, __pyx_n_s_result); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__41); - __Pyx_GIVEREF(__pyx_tuple__41); - __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_ne, 138, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":149 - * # tests for equality of the XDict (type, attributes, dictionary equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if dict(self) == dict(other_obj): - */ - __pyx_tuple__43 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__43); - __Pyx_GIVEREF(__pyx_tuple__43); - __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_equals, 149, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":167 - * # Test: test_xdict_conditional_map - * #------------------------------------------------------------------------------ - * def conditional_map_to_vals(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for key, value in self.xitems(): - * if conditional_function(key): - */ - __pyx_tuple__45 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_conditional_function, __pyx_n_s_mapped_function, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__45); - __Pyx_GIVEREF(__pyx_tuple__45); - __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_conditional_map_to_vals, 167, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":178 - * # Test: test_xdict_map_to_vals - * #------------------------------------------------------------------------------ - * def map_to_vals(self, mapped_function): # <<<<<<<<<<<<<< - * # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - * for key, value in self.xitems(): - */ - __pyx_tuple__47 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_mapped_function, __pyx_n_s_key, __pyx_n_s_value); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__47); - __Pyx_GIVEREF(__pyx_tuple__47); - __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_map_to_vals, 178, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":189 - * # Test: test_xdict_val_xlist - * #------------------------------------------------------------------------------ - * def val_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.values(), self._getAttributeDict()) - * - */ - __pyx_tuple__49 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__49); - __Pyx_GIVEREF(__pyx_tuple__49); - __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_val_xlist, 189, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":196 - * # Test: test_xdict_max_val, test_xdict_max_val_strings (strings are alphabetic if not numerals) - * #------------------------------------------------------------------------------ - * def max_val(self): # <<<<<<<<<<<<<< - * return max(zip(self.values(), self.keys())) - * - */ - __pyx_tuple__51 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__51); - __Pyx_GIVEREF(__pyx_tuple__51); - __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_max_val, 196, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":202 - * # [ min_val method ] (tuple of minimum value and associated key) - * #------------------------------------------------------------------------------ - * def min_val(self): # <<<<<<<<<<<<<< - * return min(zip(self.values(), self.keys())) - * - */ - __pyx_tuple__53 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__53); - __Pyx_GIVEREF(__pyx_tuple__53); - __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_min_val, 202, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":209 - * # returns sum of all values in the dictionary - * #------------------------------------------------------------------------------ - * def sum_vals(self): # <<<<<<<<<<<<<< - * return sum(self.values()) - * - */ - __pyx_tuple__55 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__55); - __Pyx_GIVEREF(__pyx_tuple__55); - __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_sum_vals, 209, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":218 - * # Tests: test_xdict_val_count_string, test_xdict_val_count_integer - * #------------------------------------------------------------------------------ - * def val_count(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - __pyx_tuple__57 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_value_name, __pyx_n_s_count, __pyx_n_s_test_value); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__57); - __Pyx_GIVEREF(__pyx_tuple__57); - __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_val_count, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":231 - * # Test: test_xdict_val_count_ci - * #------------------------------------------------------------------------------ - * def val_count_ci(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - __pyx_tuple__59 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_value_name, __pyx_n_s_count, __pyx_n_s_test_value); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__59); - __Pyx_GIVEREF(__pyx_tuple__59); - __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_val_count_ci, 231, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":250 - * # Tests: test_xdict_key_difference, test_xdict_key_difference_when_none_present - * #------------------------------------------------------------------------------ - * def difference(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) - set(another_dict.keys()) - * - */ - __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_another_dict); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__61); - __Pyx_GIVEREF(__pyx_tuple__61); - __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_difference, 250, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":258 - * # Tests: test_xdict_key_intersection, test_xdict_key_intersection_when_none_present - * #------------------------------------------------------------------------------ - * def intersection(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) & set(another_dict.keys()) - * - */ - __pyx_tuple__63 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_another_dict); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__63); - __Pyx_GIVEREF(__pyx_tuple__63); - __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_intersection, 258, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":266 - * # Test: test_xdict_key_xlist - * #------------------------------------------------------------------------------ - * def key_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.keys(), self._getAttributeDict()) - * - */ - __pyx_tuple__65 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__65); - __Pyx_GIVEREF(__pyx_tuple__65); - __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_key_xlist, 266, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":274 - * # Test: test_xdict_key_random - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * from Naked.toolshed.python import py_major_version - */ - __pyx_tuple__67 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_random, __pyx_n_s_py_major_version, __pyx_n_s_random_key_list, __pyx_n_s_the_key); if (unlikely(!__pyx_tuple__67)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__67); - __Pyx_GIVEREF(__pyx_tuple__67); - __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_random, 274, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":286 - * # Test: test_xdict_key_random_sample - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * random_key_list = random.sample(self.keys(), number_of_items) - */ - __pyx_tuple__69 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_number_of_items, __pyx_n_s_random, __pyx_n_s_random_key_list, __pyx_n_s_new_dict, __pyx_n_s_item); if (unlikely(!__pyx_tuple__69)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__69); - __Pyx_GIVEREF(__pyx_tuple__69); - __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_random_sample, 286, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":300 - * # Test: test_xdict_xitems - * #------------------------------------------------------------------------------ - * def xitems(self): # <<<<<<<<<<<<<< - * from Naked.toolshed.python import py_major_version - * if py_major_version() > 2: - */ - __pyx_tuple__71 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_py_major_version); if (unlikely(!__pyx_tuple__71)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__71); - __Pyx_GIVEREF(__pyx_tuple__71); - __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xitems, 300, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":312 - * #------------------------------------------------------------------------------ - * class XList(list, NakedObject): - * def __init__(self, list_obj, attributes={}, naked_type='XList'): # <<<<<<<<<<<<<< - * list.__init__(self, list_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_tuple__73 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_list_obj, __pyx_n_s_attributes, __pyx_n_s_naked_type); if (unlikely(!__pyx_tuple__73)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__73); - __Pyx_GIVEREF(__pyx_tuple__73); - __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":324 - * # extends XList with one or more other lists (`*other_lists`) - * #------------------------------------------------------------------------------ - * def __add__(self, *other_lists): # <<<<<<<<<<<<<< - * try: - * for the_list in other_lists: - */ - __pyx_tuple__75 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_other_lists, __pyx_n_s_the_list, __pyx_n_s_attr_dict, __pyx_n_s_key, __pyx_n_s_e); if (unlikely(!__pyx_tuple__75)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__75); - __Pyx_GIVEREF(__pyx_tuple__75); - __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_add, 324, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":345 - * # extends XList with one other list (`another_list`) - * #------------------------------------------------------------------------------ - * def __iadd__(self, another_list): # <<<<<<<<<<<<<< - * try: - * #add attributes if it is an XList - */ - __pyx_tuple__77 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_another_list, __pyx_n_s_attr_dict, __pyx_n_s_key, __pyx_n_s_e); if (unlikely(!__pyx_tuple__77)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__77); - __Pyx_GIVEREF(__pyx_tuple__77); - __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_iadd, 345, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":364 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - __pyx_tuple__79 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__79)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__79); - __Pyx_GIVEREF(__pyx_tuple__79); - __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_eq, 364, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":370 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - __pyx_tuple__81 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_other_obj, __pyx_n_s_result); if (unlikely(!__pyx_tuple__81)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__81); - __Pyx_GIVEREF(__pyx_tuple__81); - __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_ne, 370, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":381 - * # tests for equality of the XList (type, attributes, list equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if list(self) == list(other_obj): - */ - __pyx_tuple__83 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_obj); if (unlikely(!__pyx_tuple__83)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__83); - __Pyx_GIVEREF(__pyx_tuple__83); - __pyx_codeobj__84 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__83, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_equals, 381, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":402 - * # Pass separator character(s) as an argument to the method - * #------------------------------------------------------------------------------ - * def join(self, separator=""): # <<<<<<<<<<<<<< - * return separator.join(self) - * - */ - __pyx_tuple__85 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_separator); if (unlikely(!__pyx_tuple__85)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__85); - __Pyx_GIVEREF(__pyx_tuple__85); - __pyx_codeobj__86 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__85, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_join, 402, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__86)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__87 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_s__5)); if (unlikely(!__pyx_tuple__87)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__87); - __Pyx_GIVEREF(__pyx_tuple__87); - - /* "lib/Naked/toolshed/c/types.pyx":409 - * # Append a string to each list item string - * #------------------------------------------------------------------------------ - * def postfix(self, after): # <<<<<<<<<<<<<< - * return [ "".join([x, after]) for x in self ] - * - */ - __pyx_tuple__88 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_after, __pyx_n_s_x); if (unlikely(!__pyx_tuple__88)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__88); - __Pyx_GIVEREF(__pyx_tuple__88); - __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_postfix, 409, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":416 - * # Prepend a string to each list item string - * #------------------------------------------------------------------------------ - * def prefix(self, before): # <<<<<<<<<<<<<< - * return [ "".join([before, x]) for x in self ] - * - */ - __pyx_tuple__90 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_before, __pyx_n_s_x); if (unlikely(!__pyx_tuple__90)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__90); - __Pyx_GIVEREF(__pyx_tuple__90); - __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_prefix, 416, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":423 - * # Surround each list item string with a before and after string argument passed to the method - * #------------------------------------------------------------------------------ - * def surround(self, before, after=""): # <<<<<<<<<<<<<< - * if after == "": - * after = before - */ - __pyx_tuple__92 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_before, __pyx_n_s_after, __pyx_n_s_x); if (unlikely(!__pyx_tuple__92)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__92); - __Pyx_GIVEREF(__pyx_tuple__92); - __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_surround, 423, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_tuple__94 = PyTuple_Pack(1, ((PyObject*)__pyx_kp_s__5)); if (unlikely(!__pyx_tuple__94)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__94); - __Pyx_GIVEREF(__pyx_tuple__94); - - /* "lib/Naked/toolshed/c/types.pyx":434 - * # return maximum value from the list items - * #------------------------------------------------------------------------------ - * def max(self): # <<<<<<<<<<<<<< - * return max(self) - * - */ - __pyx_tuple__95 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__95)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__95); - __Pyx_GIVEREF(__pyx_tuple__95); - __pyx_codeobj__96 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__95, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_max, 434, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__96)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":441 - * # return minimum value from the list items - * #------------------------------------------------------------------------------ - * def min(self): # <<<<<<<<<<<<<< - * return min(self) - * - */ - __pyx_tuple__97 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__97)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__97); - __Pyx_GIVEREF(__pyx_tuple__97); - __pyx_codeobj__98 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__97, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_min, 441, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__98)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":448 - * # return the sum of all list items - * #------------------------------------------------------------------------------ - * def sum(self): # <<<<<<<<<<<<<< - * return sum(self) - * - */ - __pyx_tuple__99 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__99)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__99); - __Pyx_GIVEREF(__pyx_tuple__99); - __pyx_codeobj__100 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__99, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_sum, 448, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":458 - * # returns an integer count of number of duplicate values - * #------------------------------------------------------------------------------ - * def count_duplicates(self): # <<<<<<<<<<<<<< - * return len(self) - len(set(self)) - * - */ - __pyx_tuple__101 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__101)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__101); - __Pyx_GIVEREF(__pyx_tuple__101); - __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__101, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_count_duplicates, 458, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":465 - * # returns a new XList with duplicates removed - * #------------------------------------------------------------------------------ - * def remove_duplicates(self): # <<<<<<<<<<<<<< - * return XList( set(self), self._getAttributeDict() ) - * - */ - __pyx_tuple__103 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__103)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__103); - __Pyx_GIVEREF(__pyx_tuple__103); - __pyx_codeobj__104 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_remove_duplicates, 465, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__104)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":472 - * # returns a set containing items in XList that are not contained in `another_list` - * #------------------------------------------------------------------------------ - * def difference(self, another_list): # <<<<<<<<<<<<<< - * return set(self) - set(another_list) - * - */ - __pyx_tuple__105 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_another_list); if (unlikely(!__pyx_tuple__105)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__105); - __Pyx_GIVEREF(__pyx_tuple__105); - __pyx_codeobj__106 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__105, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_difference, 472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__106)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":479 - * # returns a set containing items that are in both XList and `another_list` - * #------------------------------------------------------------------------------ - * def intersection(self, another_list): # <<<<<<<<<<<<<< - * return set(self) & set(another_list) - * - */ - __pyx_tuple__107 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_another_list); if (unlikely(!__pyx_tuple__107)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__107); - __Pyx_GIVEREF(__pyx_tuple__107); - __pyx_codeobj__108 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_intersection, 479, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":489 - * # returns original XList with modification of each item based upon `mapped_function` - * #------------------------------------------------------------------------------ - * def map_to_items(self, mapped_function): # <<<<<<<<<<<<<< - * # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - * for index, item in enumerate(self): - */ - __pyx_tuple__109 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_mapped_function, __pyx_n_s_index_2, __pyx_n_s_item); if (unlikely(!__pyx_tuple__109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__109); - __Pyx_GIVEREF(__pyx_tuple__109); - __pyx_codeobj__110 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_map_to_items, 489, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__110)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":500 - * # `conditional_function` with change performed as defined in `mapped_function` - * #------------------------------------------------------------------------------ - * def conditional_map_to_items(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for index, item in enumerate(self): - * if conditional_function(item): - */ - __pyx_tuple__111 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_conditional_function, __pyx_n_s_mapped_function, __pyx_n_s_index_2, __pyx_n_s_item); if (unlikely(!__pyx_tuple__111)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__111); - __Pyx_GIVEREF(__pyx_tuple__111); - __pyx_codeobj__112 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_conditional_map_to_items, 500, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__112)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":513 - * # returns an integer count of the number of case-insensitive items that match `test_string` - * #------------------------------------------------------------------------------ - * def count_ci(self, test_string): # <<<<<<<<<<<<<< - * count = 0 - * for item in self: - */ - __pyx_tuple__113 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_test_string, __pyx_n_s_count, __pyx_n_s_item); if (unlikely(!__pyx_tuple__113)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__113); - __Pyx_GIVEREF(__pyx_tuple__113); - __pyx_codeobj__114 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_count_ci, 513, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__114)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":527 - * # returns a single item list with a random element from the original XList - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * return random.choice(self) - */ - __pyx_tuple__115 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_random); if (unlikely(!__pyx_tuple__115)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__115); - __Pyx_GIVEREF(__pyx_tuple__115); - __pyx_codeobj__116 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__115, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_random, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__116)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":536 - * # number of items determined by the `number_of_items` argument - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * return random.sample(self, number_of_items) - */ - __pyx_tuple__117 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_number_of_items, __pyx_n_s_random); if (unlikely(!__pyx_tuple__117)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__117); - __Pyx_GIVEREF(__pyx_tuple__117); - __pyx_codeobj__118 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__117, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_random_sample, 536, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__118)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":544 - * # randomly shuffle the contents of the list - * #------------------------------------------------------------------------------ - * def shuffle(self): # <<<<<<<<<<<<<< - * import random - * random.shuffle(self) - */ - __pyx_tuple__119 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_random); if (unlikely(!__pyx_tuple__119)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__119); - __Pyx_GIVEREF(__pyx_tuple__119); - __pyx_codeobj__120 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__119, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_shuffle, 544, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__120)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":556 - * # returns a list of items that match the `wildcard` argument - * #------------------------------------------------------------------------------ - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - __pyx_tuple__121 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_wildcard, __pyx_n_s_fnmatchcase, __pyx_n_s_x); if (unlikely(!__pyx_tuple__121)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__121); - __Pyx_GIVEREF(__pyx_tuple__121); - __pyx_codeobj__122 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__121, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wildcard_match, 556, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":568 - * # returns a list of items that match one or more | separated wildcards passed as string - * #------------------------------------------------------------------------------ - * def multi_wildcard_match(self, wildcards): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - __pyx_tuple__123 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_wildcards, __pyx_n_s_fnmatchcase, __pyx_n_s_wc_list, __pyx_n_s_return_list, __pyx_n_s_wc, __pyx_n_s_temp_list, __pyx_n_s_result, __pyx_n_s_x); if (unlikely(!__pyx_tuple__123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__123); - __Pyx_GIVEREF(__pyx_tuple__123); - __pyx_codeobj__124 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__123, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_multi_wildcard_match, 568, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__124)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":589 - * # return an XSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(set(self), attr_dict) - */ - __pyx_tuple__125 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__125)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__125); - __Pyx_GIVEREF(__pyx_tuple__125); - __pyx_codeobj__126 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__125, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xset, 589, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__126)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":597 - * # return an XFSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(set(self), attr_dict) - */ - __pyx_tuple__127 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__127)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__127); - __Pyx_GIVEREF(__pyx_tuple__127); - __pyx_codeobj__128 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__127, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xfset, 597, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__128)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":605 - * # returns an XTuple with XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xtuple(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XTuple(tuple(self), attr_dict) - */ - __pyx_tuple__129 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__129)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__129); - __Pyx_GIVEREF(__pyx_tuple__129); - __pyx_codeobj__130 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__129, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xtuple, 605, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":615 - * from heapq import heappush, heappop - * class XMaxHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMaxHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - __pyx_tuple__131 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_attributes, __pyx_n_s_naked_type); if (unlikely(!__pyx_tuple__131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__131); - __Pyx_GIVEREF(__pyx_tuple__131); - __pyx_codeobj__132 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 615, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__132)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":621 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_tuple__133 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__133); - __Pyx_GIVEREF(__pyx_tuple__133); - __pyx_codeobj__134 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__133, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_len, 621, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":625 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_tuple__135 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_the_object, __pyx_n_s_priority); if (unlikely(!__pyx_tuple__135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__135); - __Pyx_GIVEREF(__pyx_tuple__135); - __pyx_codeobj__136 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__135, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_push, 625, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":630 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - __pyx_tuple__137 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__137); - __Pyx_GIVEREF(__pyx_tuple__137); - __pyx_codeobj__138 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__137, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_pop, 630, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__138)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":637 - * - * # push new object and return the highest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_tuple__139 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_the_object, __pyx_n_s_priority); if (unlikely(!__pyx_tuple__139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__139); - __Pyx_GIVEREF(__pyx_tuple__139); - __pyx_codeobj__140 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__139, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_pushpop, 637, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__140)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":646 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_tuple__141 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__141)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__141); - __Pyx_GIVEREF(__pyx_tuple__141); - __pyx_codeobj__142 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__141, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_length, 646, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__142)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":655 - * from heapq import heappush, heappop - * class XMinHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMinHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - __pyx_tuple__143 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_attributes, __pyx_n_s_naked_type); if (unlikely(!__pyx_tuple__143)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__143); - __Pyx_GIVEREF(__pyx_tuple__143); - __pyx_codeobj__144 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__143, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 655, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__144)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":662 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_tuple__145 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__145); - __Pyx_GIVEREF(__pyx_tuple__145); - __pyx_codeobj__146 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__145, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_len, 662, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__146)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":666 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_tuple__147 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_the_object, __pyx_n_s_priority); if (unlikely(!__pyx_tuple__147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__147); - __Pyx_GIVEREF(__pyx_tuple__147); - __pyx_codeobj__148 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__147, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_push, 666, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__148)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":671 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - __pyx_tuple__149 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__149); - __Pyx_GIVEREF(__pyx_tuple__149); - __pyx_codeobj__150 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__149, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_pop, 671, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__150)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":678 - * - * # push new object and return the lowest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_tuple__151 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_the_object, __pyx_n_s_priority); if (unlikely(!__pyx_tuple__151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__151); - __Pyx_GIVEREF(__pyx_tuple__151); - __pyx_codeobj__152 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__151, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_pushpop, 678, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":687 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_tuple__153 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__153); - __Pyx_GIVEREF(__pyx_tuple__153); - __pyx_codeobj__154 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__153, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_length, 687, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__154)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":697 - * from collections import deque - * class XQueue(deque, NakedObject): - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): # <<<<<<<<<<<<<< - * deque.__init__(self, initial_iterable, max_length) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_tuple__155 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_initial_iterable, __pyx_n_s_attributes, __pyx_n_s_max_length, __pyx_n_s_naked_type); if (unlikely(!__pyx_tuple__155)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__155); - __Pyx_GIVEREF(__pyx_tuple__155); - __pyx_codeobj__156 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__155, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 697, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__156)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":708 - * #------------------------------------------------------------------------------ - * class XSet(set, NakedObject): - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): # <<<<<<<<<<<<<< - * set.__init__(self, set_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_tuple__157 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_set_obj, __pyx_n_s_attributes, __pyx_n_s_naked_type); if (unlikely(!__pyx_tuple__157)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__157); - __Pyx_GIVEREF(__pyx_tuple__157); - __pyx_codeobj__158 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 708, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__158)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":713 - * - * # << operator is overloaded to extend the XSet with a second set - * def __lshift__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - __pyx_tuple__159 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_another_set); if (unlikely(!__pyx_tuple__159)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__159); - __Pyx_GIVEREF(__pyx_tuple__159); - __pyx_codeobj__160 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__159, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_lshift, 713, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__160)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":718 - * - * # += operator overload to extend the XSet with a second set - * def __iadd__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - __pyx_tuple__161 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_another_set); if (unlikely(!__pyx_tuple__161)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__161); - __Pyx_GIVEREF(__pyx_tuple__161); - __pyx_codeobj__162 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__161, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_iadd, 718, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__162)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":722 - * return self - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict) - */ - __pyx_tuple__163 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__163)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__163); - __Pyx_GIVEREF(__pyx_tuple__163); - __pyx_codeobj__164 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__163, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xlist, 722, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__164)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":726 - * return XList(list(self), attr_dict) - * - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(self, attr_dict) - */ - __pyx_tuple__165 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__165)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__165); - __Pyx_GIVEREF(__pyx_tuple__165); - __pyx_codeobj__166 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__165, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xfset, 726, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__166)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":736 - * #------------------------------------------------------------------------------ - * class XFSet(frozenset): - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): # <<<<<<<<<<<<<< - * set_obj = frozenset.__new__(cls, the_set) - * if len(attributes) > 0: - */ - __pyx_tuple__167 = PyTuple_Pack(6, __pyx_n_s_cls, __pyx_n_s_the_set, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_set_obj, __pyx_n_s_key); if (unlikely(!__pyx_tuple__167)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__167); - __Pyx_GIVEREF(__pyx_tuple__167); - __pyx_codeobj__168 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__167, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_new, 736, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__168)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":744 - * return set_obj - * - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_tuple__169 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__169)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__169); - __Pyx_GIVEREF(__pyx_tuple__169); - __pyx_codeobj__170 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__169, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_getAttributeDict, 744, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__170)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":747 - * return self.__dict__ - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict, naked_type="XList") - */ - __pyx_tuple__171 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__171)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__171); - __Pyx_GIVEREF(__pyx_tuple__171); - __pyx_codeobj__172 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__171, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xlist, 747, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__172)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":751 - * return XList(list(self), attr_dict, naked_type="XList") - * - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(self, attr_dict, naked_type="XSet") - */ - __pyx_tuple__173 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_attr_dict); if (unlikely(!__pyx_tuple__173)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__173); - __Pyx_GIVEREF(__pyx_tuple__173); - __pyx_codeobj__174 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__173, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xset, 751, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__174)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":759 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_tuple__175 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__175)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__175); - __Pyx_GIVEREF(__pyx_tuple__175); - __pyx_codeobj__176 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__175, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_type, 759, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__176)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":774 - * #------------------------------------------------------------------------------ - * class XString(str): - * def __new__(cls, string_text, attributes={}, naked_type='XString'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, string_text) - * if len(attributes) > 0: - */ - __pyx_tuple__177 = PyTuple_Pack(6, __pyx_n_s_cls, __pyx_n_s_string_text, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_str_obj, __pyx_n_s_key); if (unlikely(!__pyx_tuple__177)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__177); - __Pyx_GIVEREF(__pyx_tuple__177); - __pyx_codeobj__178 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_new, 774, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__178)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":786 - * # returns a dictionary of the XString instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_tuple__179 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__179)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__179); - __Pyx_GIVEREF(__pyx_tuple__179); - __pyx_codeobj__180 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__179, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_getAttributeDict, 786, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__180)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":793 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_tuple__181 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__181)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__181); - __Pyx_GIVEREF(__pyx_tuple__181); - __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_type, 793, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":800 - * - * ## TODO: see where + vs. join breakpoint becomes important - * def concat(self, *strings): # <<<<<<<<<<<<<< - * str_list = [] - * for x in strings: - */ - __pyx_tuple__183 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_strings, __pyx_n_s_str_list, __pyx_n_s_x); if (unlikely(!__pyx_tuple__183)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__183); - __Pyx_GIVEREF(__pyx_tuple__183); - __pyx_codeobj__184 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__183, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_concat, 800, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__184)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":807 - * - * # fastest substring search truth test - * def contains(self, substring): # <<<<<<<<<<<<<< - * return substring in self - * - */ - __pyx_tuple__185 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_substring); if (unlikely(!__pyx_tuple__185)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__185); - __Pyx_GIVEREF(__pyx_tuple__185); - __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_contains, 807, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":812 - * # split the string on one or more delimiters, return list - * # if up to two chars, then uses str.split(), if more chars then use re.split - * def xsplit(self, split_delimiter): # <<<<<<<<<<<<<< - * length = len(split_delimiter) - * if length > 2: - */ - __pyx_tuple__187 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_split_delimiter, __pyx_n_s_length, __pyx_n_s_re, __pyx_n_s_delim2, __pyx_n_s_first_list, __pyx_n_s_result_list, __pyx_n_s_item, __pyx_n_s_subitem); if (unlikely(!__pyx_tuple__187)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__187); - __Pyx_GIVEREF(__pyx_tuple__187); - __pyx_codeobj__188 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xsplit, 812, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__188)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":830 - * - * # split the string on one or more characters and return items in set - * def xsplit_set(self, split_delimiter): # <<<<<<<<<<<<<< - * return set(self.xsplit(split_delimiter)) - * - */ - __pyx_tuple__189 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_split_delimiter); if (unlikely(!__pyx_tuple__189)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__189); - __Pyx_GIVEREF(__pyx_tuple__189); - __pyx_codeobj__190 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_xsplit_set, 830, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__190)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":834 - * - * # str begins with substring - faster than str.startswith() - * def begins(self, begin_string): # <<<<<<<<<<<<<< - * return begin_string in self[0:len(begin_string)] - * - */ - __pyx_tuple__191 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_begin_string); if (unlikely(!__pyx_tuple__191)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__191); - __Pyx_GIVEREF(__pyx_tuple__191); - __pyx_codeobj__192 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__191, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_begins, 834, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__192)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":838 - * - * # str ends with substring - faster than str.endswith() - * def ends(self, end_string): # <<<<<<<<<<<<<< - * return end_string in self[-len(end_string):] - * - */ - __pyx_tuple__193 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_end_string); if (unlikely(!__pyx_tuple__193)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__193); - __Pyx_GIVEREF(__pyx_tuple__193); - __pyx_codeobj__194 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__193, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_ends, 838, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__194)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":842 - * - * # case sensitive wildcard match on the XString (boolean returned) - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * from fnmatch import fnmatchcase - * return fnmatchcase(self, wildcard) - */ - __pyx_tuple__195 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_wildcard, __pyx_n_s_fnmatchcase); if (unlikely(!__pyx_tuple__195)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__195); - __Pyx_GIVEREF(__pyx_tuple__195); - __pyx_codeobj__196 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_wildcard_match, 842, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__196)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":847 - * - * # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - * def unicode(self): # <<<<<<<<<<<<<< - * from sys import version_info - * from unicodedata import normalize - */ - __pyx_tuple__197 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_version_info, __pyx_n_s_normalize); if (unlikely(!__pyx_tuple__197)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__197); - __Pyx_GIVEREF(__pyx_tuple__197); - __pyx_codeobj__198 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__197, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_unicode, 847, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__198)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":858 - * # this version works - * class XUnicode: - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): # <<<<<<<<<<<<<< - * import sys - * import unicodedata - */ - __pyx_tuple__199 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_string_text, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_sys, __pyx_n_s_unicodedata, __pyx_n_s_norm_text, __pyx_n_s_XUnicode_2, __pyx_n_s_XUnicode_3); if (unlikely(!__pyx_tuple__199)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__199); - __Pyx_GIVEREF(__pyx_tuple__199); - __pyx_codeobj__200 = (PyObject*)__Pyx_PyCode_New(4, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__199, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_init, 858, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__200)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":889 - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - * - * def __str__(self): # <<<<<<<<<<<<<< - * # return self.naked_u_string - * return self.obj - */ - __pyx_tuple__201 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__201)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__201); - __Pyx_GIVEREF(__pyx_tuple__201); - __pyx_codeobj__202 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_str, 889, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__202)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":893 - * return self.obj - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.naked_u_string - * - */ - __pyx_tuple__203 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__203)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__203); - __Pyx_GIVEREF(__pyx_tuple__203); - __pyx_codeobj__204 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__203, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_repr, 893, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__204)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":896 - * return self.naked_u_string - * - * def __getattr__(self, the_attribute): # <<<<<<<<<<<<<< - * return self.obj.__dict__[the_attribute] - * - */ - __pyx_tuple__205 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_the_attribute); if (unlikely(!__pyx_tuple__205)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__205); - __Pyx_GIVEREF(__pyx_tuple__205); - __pyx_codeobj__206 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_getattr, 896, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__206)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":899 - * return self.obj.__dict__[the_attribute] - * - * def __cmp__(self, other_string): # <<<<<<<<<<<<<< - * return hash(self.naked_u_string) == hash(other_string) - * # TODO: add check for same attributes - */ - __pyx_tuple__207 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_other_string); if (unlikely(!__pyx_tuple__207)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__207); - __Pyx_GIVEREF(__pyx_tuple__207); - __pyx_codeobj__208 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_cmp, 899, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__208)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":907 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_tuple__209 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__209)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__209); - __Pyx_GIVEREF(__pyx_tuple__209); - __pyx_codeobj__210 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__209, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_getAttributeDict, 907, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__210)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":914 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_tuple__211 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__211)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__211); - __Pyx_GIVEREF(__pyx_tuple__211); - __pyx_codeobj__212 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__211, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_type, 914, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__212)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":926 - * #------------------------------------------------------------------------------ - * class XTuple(tuple): - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): # <<<<<<<<<<<<<< - * tup_obj = tuple.__new__(cls, the_tuple) - * if len(attributes) > 0: - */ - __pyx_tuple__213 = PyTuple_Pack(6, __pyx_n_s_cls, __pyx_n_s_the_tuple, __pyx_n_s_attributes, __pyx_n_s_naked_type, __pyx_n_s_tup_obj, __pyx_n_s_key); if (unlikely(!__pyx_tuple__213)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__213); - __Pyx_GIVEREF(__pyx_tuple__213); - __pyx_codeobj__214 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_new, 926, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__214)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":938 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_tuple__215 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__215)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__215); - __Pyx_GIVEREF(__pyx_tuple__215); - __pyx_codeobj__216 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__215, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_getAttributeDict, 938, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__216)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "lib/Naked/toolshed/c/types.pyx":945 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_tuple__217 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__217)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__217); - __Pyx_GIVEREF(__pyx_tuple__217); - __pyx_codeobj__218 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_ces_Desktop_code_naked_li, __pyx_n_s_type, 945, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__218)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC inittypes(void); /*proto*/ -PyMODINIT_FUNC inittypes(void) -#else -PyMODINIT_FUNC PyInit_types(void); /*proto*/ -PyMODINIT_FUNC PyInit_types(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_types(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4(__Pyx_NAMESTR("types"), __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_lib__Naked__toolshed__c__types) { - if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "lib.Naked.toolshed.c.types")) { - if (unlikely(PyDict_SetItemString(modules, "lib.Naked.toolshed.c.types", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "lib/Naked/toolshed/c/types.pyx":5 - * # cython: profile=False - * - * import sys # <<<<<<<<<<<<<< - * from Naked.settings import debug as DEBUG_FLAG - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":6 - * - * import sys - * from Naked.settings import debug as DEBUG_FLAG # <<<<<<<<<<<<<< - * - * #------------------------------------------------------------------------------ - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_debug); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_debug); - __Pyx_GIVEREF(__pyx_n_s_debug); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_Naked_settings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_debug); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG_FLAG, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":15 - * # Attribute accessors: hasattr, getattr, setattr, delattr - * #------------------------------------------------------------------------------ - * class NakedObject(object): # <<<<<<<<<<<<<< - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_builtin_object); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object); - __Pyx_GIVEREF(__pyx_builtin_object); - __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_NakedObject, __pyx_n_s_NakedObject, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/types.pyx":17 - * class NakedObject(object): - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): # <<<<<<<<<<<<<< - * if len(attributes) > 0: - * for key in attributes: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_1__init__, 0, __pyx_n_s_NakedObject___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_11NakedObject_16__defaults__); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":27 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_3_getAttributeDict, 0, __pyx_n_s_NakedObject__getAttributeDict, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_getAttributeDict, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":34 - * # returns boolean for type of instance == type of test parameter instance - * #------------------------------------------------------------------------------ - * def _equal_type(self, other_obj): # <<<<<<<<<<<<<< - * return type(self) == type(other_obj) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_5_equal_type, 0, __pyx_n_s_NakedObject__equal_type, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_equal_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":41 - * # returns boolean for instance.__dict__ == test parameter .__dict__ (attribute comparison) - * #------------------------------------------------------------------------------ - * def _equal_attributes(self, other_obj): # <<<<<<<<<<<<<< - * return self.__dict__ == other_obj.__dict__ - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_7_equal_attributes, 0, __pyx_n_s_NakedObject__equal_attributes, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_equal_attributes, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":47 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_9__eq__, 0, __pyx_n_s_NakedObject___eq, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_eq, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":53 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_11__ne__, 0, __pyx_n_s_NakedObject___ne, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ne, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":65 - * # **NEED TO OVERRIDE IN CLASSES THAT INHERIT - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * return self._equal_type(other_obj) and self._equal_attributes(other_obj) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_13equals, 0, __pyx_n_s_NakedObject_equals, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_equals, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":72 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_11NakedObject_15type, 0, __pyx_n_s_NakedObject_type, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":15 - * # Attribute accessors: hasattr, getattr, setattr, delattr - * #------------------------------------------------------------------------------ - * class NakedObject(object): # <<<<<<<<<<<<<< - * # initialize with an attributes dictionary {attribute_name: attribute_value} - * def __init__(self, attributes={}, naked_type='NakedObject'): - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_NakedObject, __pyx_t_2, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_NakedObject, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":82 - * # An inherited extension to the dictionary type - * #------------------------------------------------------------------------------ - * class XDict(dict, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): - * dict.__init__(self, dict_obj) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyDict_Type)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)((PyObject*)(&PyDict_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyDict_Type)))); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_XDict, __pyx_n_s_XDict, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/types.pyx":83 - * #------------------------------------------------------------------------------ - * class XDict(dict, NakedObject): - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): # <<<<<<<<<<<<<< - * dict.__init__(self, dict_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_1__init__, 0, __pyx_n_s_XDict___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults1), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults1, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XDict_40__defaults__); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":96 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __add__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_3__add__, 0, __pyx_n_s_XDict___add, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_add, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":115 - * # returns the updated XDict object - * #------------------------------------------------------------------------------ - * def __iadd__(self, other_dict): # <<<<<<<<<<<<<< - * try: - * self.update(other_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_5__iadd__, 0, __pyx_n_s_XDict___iadd, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_iadd, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":132 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_7__eq__, 0, __pyx_n_s_XDict___eq, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_eq, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":138 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_9__ne__, 0, __pyx_n_s_XDict___ne, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ne, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":149 - * # tests for equality of the XDict (type, attributes, dictionary equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if dict(self) == dict(other_obj): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_11equals, 0, __pyx_n_s_XDict_equals, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_equals, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":167 - * # Test: test_xdict_conditional_map - * #------------------------------------------------------------------------------ - * def conditional_map_to_vals(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for key, value in self.xitems(): - * if conditional_function(key): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_13conditional_map_to_vals, 0, __pyx_n_s_XDict_conditional_map_to_vals, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_conditional_map_to_vals, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":178 - * # Test: test_xdict_map_to_vals - * #------------------------------------------------------------------------------ - * def map_to_vals(self, mapped_function): # <<<<<<<<<<<<<< - * # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - * for key, value in self.xitems(): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_15map_to_vals, 0, __pyx_n_s_XDict_map_to_vals, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_map_to_vals, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":189 - * # Test: test_xdict_val_xlist - * #------------------------------------------------------------------------------ - * def val_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.values(), self._getAttributeDict()) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_17val_xlist, 0, __pyx_n_s_XDict_val_xlist, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_val_xlist, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":196 - * # Test: test_xdict_max_val, test_xdict_max_val_strings (strings are alphabetic if not numerals) - * #------------------------------------------------------------------------------ - * def max_val(self): # <<<<<<<<<<<<<< - * return max(zip(self.values(), self.keys())) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_19max_val, 0, __pyx_n_s_XDict_max_val, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_max_val, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":202 - * # [ min_val method ] (tuple of minimum value and associated key) - * #------------------------------------------------------------------------------ - * def min_val(self): # <<<<<<<<<<<<<< - * return min(zip(self.values(), self.keys())) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_21min_val, 0, __pyx_n_s_XDict_min_val, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_min_val, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":209 - * # returns sum of all values in the dictionary - * #------------------------------------------------------------------------------ - * def sum_vals(self): # <<<<<<<<<<<<<< - * return sum(self.values()) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_23sum_vals, 0, __pyx_n_s_XDict_sum_vals, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_sum_vals, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":218 - * # Tests: test_xdict_val_count_string, test_xdict_val_count_integer - * #------------------------------------------------------------------------------ - * def val_count(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_25val_count, 0, __pyx_n_s_XDict_val_count, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_val_count, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":231 - * # Test: test_xdict_val_count_ci - * #------------------------------------------------------------------------------ - * def val_count_ci(self, value_name): # <<<<<<<<<<<<<< - * count = 0 - * for test_value in self.values(): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_27val_count_ci, 0, __pyx_n_s_XDict_val_count_ci, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_val_count_ci, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":250 - * # Tests: test_xdict_key_difference, test_xdict_key_difference_when_none_present - * #------------------------------------------------------------------------------ - * def difference(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) - set(another_dict.keys()) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_29difference, 0, __pyx_n_s_XDict_difference, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_difference, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":258 - * # Tests: test_xdict_key_intersection, test_xdict_key_intersection_when_none_present - * #------------------------------------------------------------------------------ - * def intersection(self, another_dict): # <<<<<<<<<<<<<< - * return set(self.keys()) & set(another_dict.keys()) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_31intersection, 0, __pyx_n_s_XDict_intersection, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_intersection, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":266 - * # Test: test_xdict_key_xlist - * #------------------------------------------------------------------------------ - * def key_xlist(self): # <<<<<<<<<<<<<< - * return XList(self.keys(), self._getAttributeDict()) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_33key_xlist, 0, __pyx_n_s_XDict_key_xlist, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_key_xlist, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":274 - * # Test: test_xdict_key_random - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * from Naked.toolshed.python import py_major_version - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_35random, 0, __pyx_n_s_XDict_random, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__68)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_random, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":286 - * # Test: test_xdict_key_random_sample - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * random_key_list = random.sample(self.keys(), number_of_items) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_37random_sample, 0, __pyx_n_s_XDict_random_sample, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__70)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_random_sample, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":300 - * # Test: test_xdict_xitems - * #------------------------------------------------------------------------------ - * def xitems(self): # <<<<<<<<<<<<<< - * from Naked.toolshed.python import py_major_version - * if py_major_version() > 2: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XDict_39xitems, 0, __pyx_n_s_XDict_xitems, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_xitems, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":82 - * # An inherited extension to the dictionary type - * #------------------------------------------------------------------------------ - * class XDict(dict, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, dict_obj, attributes={}, naked_type='XDict'): - * dict.__init__(self, dict_obj) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XDict, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XDict, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":311 - * # An inherited extension to the list object that permits attachment of attributes - * #------------------------------------------------------------------------------ - * class XList(list, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, list_obj, attributes={}, naked_type='XList'): - * list.__init__(self, list_obj) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyList_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)(&PyList_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyList_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_XList, __pyx_n_s_XList, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/types.pyx":312 - * #------------------------------------------------------------------------------ - * class XList(list, NakedObject): - * def __init__(self, list_obj, attributes={}, naked_type='XList'): # <<<<<<<<<<<<<< - * list.__init__(self, list_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_1__init__, 0, __pyx_n_s_XList___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults2), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults2, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XList_56__defaults__); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":324 - * # extends XList with one or more other lists (`*other_lists`) - * #------------------------------------------------------------------------------ - * def __add__(self, *other_lists): # <<<<<<<<<<<<<< - * try: - * for the_list in other_lists: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_3__add__, 0, __pyx_n_s_XList___add, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_add, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":345 - * # extends XList with one other list (`another_list`) - * #------------------------------------------------------------------------------ - * def __iadd__(self, another_list): # <<<<<<<<<<<<<< - * try: - * #add attributes if it is an XList - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_5__iadd__, 0, __pyx_n_s_XList___iadd, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_iadd, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":364 - * # == overload - * #------------------------------------------------------------------------------ - * def __eq__(self, other_obj): # <<<<<<<<<<<<<< - * return self.equals(other_obj) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_7__eq__, 0, __pyx_n_s_XList___eq, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_eq, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":370 - * # != overload - * #------------------------------------------------------------------------------ - * def __ne__(self, other_obj): # <<<<<<<<<<<<<< - * result = self.equals(other_obj) - * if result: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_9__ne__, 0, __pyx_n_s_XList___ne, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ne, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":381 - * # tests for equality of the XList (type, attributes, list equality) - * #------------------------------------------------------------------------------ - * def equals(self, other_obj): # <<<<<<<<<<<<<< - * if self._equal_type(other_obj) and self._equal_attributes(other_obj): - * if list(self) == list(other_obj): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_11equals, 0, __pyx_n_s_XList_equals, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__84)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_equals, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":402 - * # Pass separator character(s) as an argument to the method - * #------------------------------------------------------------------------------ - * def join(self, separator=""): # <<<<<<<<<<<<<< - * return separator.join(self) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_13join, 0, __pyx_n_s_XList_join, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__86)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__87); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_join, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":409 - * # Append a string to each list item string - * #------------------------------------------------------------------------------ - * def postfix(self, after): # <<<<<<<<<<<<<< - * return [ "".join([x, after]) for x in self ] - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_15postfix, 0, __pyx_n_s_XList_postfix, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_postfix, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":416 - * # Prepend a string to each list item string - * #------------------------------------------------------------------------------ - * def prefix(self, before): # <<<<<<<<<<<<<< - * return [ "".join([before, x]) for x in self ] - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_17prefix, 0, __pyx_n_s_XList_prefix, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_prefix, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":423 - * # Surround each list item string with a before and after string argument passed to the method - * #------------------------------------------------------------------------------ - * def surround(self, before, after=""): # <<<<<<<<<<<<<< - * if after == "": - * after = before - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_19surround, 0, __pyx_n_s_XList_surround, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__94); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_surround, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":434 - * # return maximum value from the list items - * #------------------------------------------------------------------------------ - * def max(self): # <<<<<<<<<<<<<< - * return max(self) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_21max, 0, __pyx_n_s_XList_max, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__96)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_max, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":441 - * # return minimum value from the list items - * #------------------------------------------------------------------------------ - * def min(self): # <<<<<<<<<<<<<< - * return min(self) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_23min, 0, __pyx_n_s_XList_min, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__98)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_min, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":448 - * # return the sum of all list items - * #------------------------------------------------------------------------------ - * def sum(self): # <<<<<<<<<<<<<< - * return sum(self) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_25sum, 0, __pyx_n_s_XList_sum, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__100)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_sum, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":458 - * # returns an integer count of number of duplicate values - * #------------------------------------------------------------------------------ - * def count_duplicates(self): # <<<<<<<<<<<<<< - * return len(self) - len(set(self)) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_27count_duplicates, 0, __pyx_n_s_XList_count_duplicates, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__102)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_count_duplicates, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":465 - * # returns a new XList with duplicates removed - * #------------------------------------------------------------------------------ - * def remove_duplicates(self): # <<<<<<<<<<<<<< - * return XList( set(self), self._getAttributeDict() ) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_29remove_duplicates, 0, __pyx_n_s_XList_remove_duplicates, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__104)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_remove_duplicates, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":472 - * # returns a set containing items in XList that are not contained in `another_list` - * #------------------------------------------------------------------------------ - * def difference(self, another_list): # <<<<<<<<<<<<<< - * return set(self) - set(another_list) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_31difference, 0, __pyx_n_s_XList_difference, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__106)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_difference, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":479 - * # returns a set containing items that are in both XList and `another_list` - * #------------------------------------------------------------------------------ - * def intersection(self, another_list): # <<<<<<<<<<<<<< - * return set(self) & set(another_list) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_33intersection, 0, __pyx_n_s_XList_intersection, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__108)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_intersection, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":489 - * # returns original XList with modification of each item based upon `mapped_function` - * #------------------------------------------------------------------------------ - * def map_to_items(self, mapped_function): # <<<<<<<<<<<<<< - * # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - * for index, item in enumerate(self): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_35map_to_items, 0, __pyx_n_s_XList_map_to_items, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__110)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_map_to_items, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":500 - * # `conditional_function` with change performed as defined in `mapped_function` - * #------------------------------------------------------------------------------ - * def conditional_map_to_items(self, conditional_function, mapped_function): # <<<<<<<<<<<<<< - * for index, item in enumerate(self): - * if conditional_function(item): - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_37conditional_map_to_items, 0, __pyx_n_s_XList_conditional_map_to_items, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__112)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_conditional_map_to_items, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":513 - * # returns an integer count of the number of case-insensitive items that match `test_string` - * #------------------------------------------------------------------------------ - * def count_ci(self, test_string): # <<<<<<<<<<<<<< - * count = 0 - * for item in self: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_39count_ci, 0, __pyx_n_s_XList_count_ci, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__114)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_count_ci, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":527 - * # returns a single item list with a random element from the original XList - * #------------------------------------------------------------------------------ - * def random(self): # <<<<<<<<<<<<<< - * import random - * return random.choice(self) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_41random, 0, __pyx_n_s_XList_random, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__116)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_random, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":536 - * # number of items determined by the `number_of_items` argument - * #------------------------------------------------------------------------------ - * def random_sample(self, number_of_items): # <<<<<<<<<<<<<< - * import random - * return random.sample(self, number_of_items) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_43random_sample, 0, __pyx_n_s_XList_random_sample, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__118)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_random_sample, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":544 - * # randomly shuffle the contents of the list - * #------------------------------------------------------------------------------ - * def shuffle(self): # <<<<<<<<<<<<<< - * import random - * random.shuffle(self) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_45shuffle, 0, __pyx_n_s_XList_shuffle, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__120)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_shuffle, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":556 - * # returns a list of items that match the `wildcard` argument - * #------------------------------------------------------------------------------ - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_47wildcard_match, 0, __pyx_n_s_XList_wildcard_match, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__122)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_wildcard_match, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":568 - * # returns a list of items that match one or more | separated wildcards passed as string - * #------------------------------------------------------------------------------ - * def multi_wildcard_match(self, wildcards): # <<<<<<<<<<<<<< - * if hasattr(self, 'nkd_fnmatchcase'): - * fnmatchcase = self.nkd_fnmatchcase - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_49multi_wildcard_match, 0, __pyx_n_s_XList_multi_wildcard_match, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__124)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_multi_wildcard_match, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":589 - * # return an XSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(set(self), attr_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_51xset, 0, __pyx_n_s_XList_xset, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__126)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_xset, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":597 - * # return an XFSet with unique XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(set(self), attr_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_53xfset, 0, __pyx_n_s_XList_xfset, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__128)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_xfset, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 597; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":605 - * # returns an XTuple with XList item values and XList attributes - * #------------------------------------------------------------------------------ - * def xtuple(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XTuple(tuple(self), attr_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XList_55xtuple, 0, __pyx_n_s_XList_xtuple, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__130)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_xtuple, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":311 - * # An inherited extension to the list object that permits attachment of attributes - * #------------------------------------------------------------------------------ - * class XList(list, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, list_obj, attributes={}, naked_type='XList'): - * list.__init__(self, list_obj) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_XList, __pyx_t_2, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XList, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":613 - * # max heap queue - * #------------------------------------------------------------------------------ - * from heapq import heappush, heappop # <<<<<<<<<<<<<< - * class XMaxHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMaxHeap'): - */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_heappush); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_heappush); - __Pyx_GIVEREF(__pyx_n_s_heappush); - __Pyx_INCREF(__pyx_n_s_heappop); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_heappop); - __Pyx_GIVEREF(__pyx_n_s_heappop); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_heapq, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_heappush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_heappush, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_heappop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_heappop, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":614 - * #------------------------------------------------------------------------------ - * from heapq import heappush, heappop - * class XMaxHeap(NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, attributes={}, naked_type='XMaxHeap'): - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_XMaxHeap, __pyx_n_s_XMaxHeap, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/types.pyx":615 - * from heapq import heappush, heappop - * class XMaxHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMaxHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_1__init__, 0, __pyx_n_s_XMaxHeap___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__132)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults3), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults3, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_12__defaults__); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":621 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_3__len__, 0, __pyx_n_s_XMaxHeap___len, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__134)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_len, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":625 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_5push, 0, __pyx_n_s_XMaxHeap_push, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__136)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_push, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":630 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_7pop, 0, __pyx_n_s_XMaxHeap_pop, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__138)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_pop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":637 - * - * # push new object and return the highest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (-priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_9pushpop, 0, __pyx_n_s_XMaxHeap_pushpop, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__140)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_pushpop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":646 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMaxHeap_11length, 0, __pyx_n_s_XMaxHeap_length, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__142)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_length, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":614 - * #------------------------------------------------------------------------------ - * from heapq import heappush, heappop - * class XMaxHeap(NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, attributes={}, naked_type='XMaxHeap'): - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_XMaxHeap, __pyx_t_2, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMaxHeap, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":653 - * # min heap queue - * #------------------------------------------------------------------------------ - * from heapq import heappush, heappop # <<<<<<<<<<<<<< - * class XMinHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMinHeap'): - */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_heappush); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_heappush); - __Pyx_GIVEREF(__pyx_n_s_heappush); - __Pyx_INCREF(__pyx_n_s_heappop); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_heappop); - __Pyx_GIVEREF(__pyx_n_s_heappop); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_heapq, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_heappush); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_heappush, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_heappop); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_heappop, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":654 - * #------------------------------------------------------------------------------ - * from heapq import heappush, heappop - * class XMinHeap(NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, attributes={}, naked_type='XMinHeap'): - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_t_2, __pyx_n_s_XMinHeap, __pyx_n_s_XMinHeap, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - - /* "lib/Naked/toolshed/c/types.pyx":655 - * from heapq import heappush, heappop - * class XMinHeap(NakedObject): - * def __init__(self, attributes={}, naked_type='XMinHeap'): # <<<<<<<<<<<<<< - * NakedObject.__init__(self, attributes, naked_type) - * self._queue = [] - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_1__init__, 0, __pyx_n_s_XMinHeap___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__144)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults4), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults4, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_12__defaults__); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":662 - * - * # length of the queue - * def __len__(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_3__len__, 0, __pyx_n_s_XMinHeap___len, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__146)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_len, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":666 - * - * # O(log n) complexity - * def push(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_5push, 0, __pyx_n_s_XMinHeap_push, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__148)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_push, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":671 - * - * # O(log n) complexity - * def pop(self): # <<<<<<<<<<<<<< - * if self._queue: - * return heappop(self._queue)[-1] - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_7pop, 0, __pyx_n_s_XMinHeap_pop, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__150)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_pop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 671; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":678 - * - * # push new object and return the lowest priority object - * def pushpop(self, the_object, priority): # <<<<<<<<<<<<<< - * heappush(self._queue, (priority, self._index, the_object)) - * self._index += 1 - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_9pushpop, 0, __pyx_n_s_XMinHeap_pushpop, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__152)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_pushpop, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":687 - * - * # the length of the queue - * def length(self): # <<<<<<<<<<<<<< - * return len(self._queue) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XMinHeap_11length, 0, __pyx_n_s_XMinHeap_length, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__154)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_length, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":654 - * #------------------------------------------------------------------------------ - * from heapq import heappush, heappop - * class XMinHeap(NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, attributes={}, naked_type='XMinHeap'): - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_XMinHeap, __pyx_t_2, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMinHeap, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":695 - * # - * #------------------------------------------------------------------------------ - * from collections import deque # <<<<<<<<<<<<<< - * class XQueue(deque, NakedObject): - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_deque); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_deque); - __Pyx_GIVEREF(__pyx_n_s_deque); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_deque); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_deque, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 695; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":696 - * #------------------------------------------------------------------------------ - * from collections import deque - * class XQueue(deque, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - * deque.__init__(self, initial_iterable, max_length) - */ - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_deque); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_3, __pyx_n_s_XQueue, __pyx_n_s_XQueue, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":697 - * from collections import deque - * class XQueue(deque, NakedObject): - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): # <<<<<<<<<<<<<< - * deque.__init__(self, initial_iterable, max_length) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XQueue_1__init__, 0, __pyx_n_s_XQueue___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__156)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults5), 2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_4)->__pyx_arg_initial_iterable = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults5, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XQueue_2__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 697; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":696 - * #------------------------------------------------------------------------------ - * from collections import deque - * class XQueue(deque, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - * deque.__init__(self, initial_iterable, max_length) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_XQueue, __pyx_t_3, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XQueue, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 696; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":707 - * # Inherits from set and from NakedObject (see methods in NakedObject at top of this module - * #------------------------------------------------------------------------------ - * class XSet(set, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): - * set.__init__(self, set_obj) - */ - __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_NakedObject); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PySet_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)(&PySet_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PySet_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_XSet, __pyx_n_s_XSet, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":708 - * #------------------------------------------------------------------------------ - * class XSet(set, NakedObject): - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): # <<<<<<<<<<<<<< - * set.__init__(self, set_obj) - * NakedObject.__init__(self, attributes, naked_type) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_1__init__, 0, __pyx_n_s_XSet___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__158)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults6), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults6, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_4XSet_10__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_init, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":713 - * - * # << operator is overloaded to extend the XSet with a second set - * def __lshift__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_3__lshift__, 0, __pyx_n_s_XSet___lshift, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__160)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_lshift, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 713; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":718 - * - * # += operator overload to extend the XSet with a second set - * def __iadd__(self, another_set): # <<<<<<<<<<<<<< - * self.update(another_set) - * return self - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_5__iadd__, 0, __pyx_n_s_XSet___iadd, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__162)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_iadd, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":722 - * return self - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_7xlist, 0, __pyx_n_s_XSet_xlist, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__164)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_xlist, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":726 - * return XList(list(self), attr_dict) - * - * def xfset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XFSet(self, attr_dict) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_4XSet_9xfset, 0, __pyx_n_s_XSet_xfset, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__166)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_xfset, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":707 - * # Inherits from set and from NakedObject (see methods in NakedObject at top of this module - * #------------------------------------------------------------------------------ - * class XSet(set, NakedObject): # <<<<<<<<<<<<<< - * def __init__(self, set_obj, attributes={}, naked_type='XSet'): - * set.__init__(self, set_obj) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_XSet, __pyx_t_2, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XSet, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":735 - * # Immutable so there is no setter method, attributes must be set in the constructor - * #------------------------------------------------------------------------------ - * class XFSet(frozenset): # <<<<<<<<<<<<<< - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): - * set_obj = frozenset.__new__(cls, the_set) - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyFrozenSet_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)(&PyFrozenSet_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyFrozenSet_Type)))); - __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_XFSet, __pyx_n_s_XFSet, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":736 - * #------------------------------------------------------------------------------ - * class XFSet(frozenset): - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): # <<<<<<<<<<<<<< - * set_obj = frozenset.__new__(cls, the_set) - * if len(attributes) > 0: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_XFSet___new, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__168)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults7), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults7, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_5XFSet_10__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_new, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":744 - * return set_obj - * - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_3_getAttributeDict, 0, __pyx_n_s_XFSet__getAttributeDict, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__170)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_getAttributeDict, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 744; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":747 - * return self.__dict__ - * - * def xlist(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XList(list(self), attr_dict, naked_type="XList") - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_5xlist, 0, __pyx_n_s_XFSet_xlist, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__172)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_xlist, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":751 - * return XList(list(self), attr_dict, naked_type="XList") - * - * def xset(self): # <<<<<<<<<<<<<< - * attr_dict = self._getAttributeDict() - * return XSet(self, attr_dict, naked_type="XSet") - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_7xset, 0, __pyx_n_s_XFSet_xset, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__174)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_xset, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":759 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_5XFSet_9type, 0, __pyx_n_s_XFSet_type, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__176)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":735 - * # Immutable so there is no setter method, attributes must be set in the constructor - * #------------------------------------------------------------------------------ - * class XFSet(frozenset): # <<<<<<<<<<<<<< - * def __new__(cls, the_set, attributes={}, naked_type="XFSet"): - * set_obj = frozenset.__new__(cls, the_set) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_XFSet, __pyx_t_2, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XFSet, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":773 - * # Python 3: string (that permits unicode) by default, can normalize with XString().unicode() method - * #------------------------------------------------------------------------------ - * class XString(str): # <<<<<<<<<<<<<< - * def __new__(cls, string_text, attributes={}, naked_type='XString'): - * str_obj = str.__new__(cls, string_text) - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyString_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)(&PyString_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyString_Type)))); - __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_XString, __pyx_n_s_XString, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":774 - * #------------------------------------------------------------------------------ - * class XString(str): - * def __new__(cls, string_text, attributes={}, naked_type='XString'): # <<<<<<<<<<<<<< - * str_obj = str.__new__(cls, string_text) - * if len(attributes) > 0: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_XString___new, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__178)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults8), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults8, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_7XString_22__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_new, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":786 - * # returns a dictionary of the XString instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_3_getAttributeDict, 0, __pyx_n_s_XString__getAttributeDict, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__180)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_getAttributeDict, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":793 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_5type, 0, __pyx_n_s_XString_type, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__182)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":800 - * - * ## TODO: see where + vs. join breakpoint becomes important - * def concat(self, *strings): # <<<<<<<<<<<<<< - * str_list = [] - * for x in strings: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_7concat, 0, __pyx_n_s_XString_concat, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__184)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_concat, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":807 - * - * # fastest substring search truth test - * def contains(self, substring): # <<<<<<<<<<<<<< - * return substring in self - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_9contains, 0, __pyx_n_s_XString_contains, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__186)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_contains, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":812 - * # split the string on one or more delimiters, return list - * # if up to two chars, then uses str.split(), if more chars then use re.split - * def xsplit(self, split_delimiter): # <<<<<<<<<<<<<< - * length = len(split_delimiter) - * if length > 2: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_11xsplit, 0, __pyx_n_s_XString_xsplit, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__188)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_xsplit, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":830 - * - * # split the string on one or more characters and return items in set - * def xsplit_set(self, split_delimiter): # <<<<<<<<<<<<<< - * return set(self.xsplit(split_delimiter)) - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_13xsplit_set, 0, __pyx_n_s_XString_xsplit_set, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__190)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_xsplit_set, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":834 - * - * # str begins with substring - faster than str.startswith() - * def begins(self, begin_string): # <<<<<<<<<<<<<< - * return begin_string in self[0:len(begin_string)] - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_15begins, 0, __pyx_n_s_XString_begins, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__192)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_begins, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":838 - * - * # str ends with substring - faster than str.endswith() - * def ends(self, end_string): # <<<<<<<<<<<<<< - * return end_string in self[-len(end_string):] - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_17ends, 0, __pyx_n_s_XString_ends, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__194)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ends, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":842 - * - * # case sensitive wildcard match on the XString (boolean returned) - * def wildcard_match(self, wildcard): # <<<<<<<<<<<<<< - * from fnmatch import fnmatchcase - * return fnmatchcase(self, wildcard) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_19wildcard_match, 0, __pyx_n_s_XString_wildcard_match, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__196)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_wildcard_match, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":847 - * - * # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - * def unicode(self): # <<<<<<<<<<<<<< - * from sys import version_info - * from unicodedata import normalize - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_7XString_21unicode, 0, __pyx_n_s_XString_unicode, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__198)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_unicode, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":773 - * # Python 3: string (that permits unicode) by default, can normalize with XString().unicode() method - * #------------------------------------------------------------------------------ - * class XString(str): # <<<<<<<<<<<<<< - * def __new__(cls, string_text, attributes={}, naked_type='XString'): - * str_obj = str.__new__(cls, string_text) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_XString, __pyx_t_2, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XString, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 773; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":857 - * - * # this version works - * class XUnicode: # <<<<<<<<<<<<<< - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): - * import sys - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_XUnicode, __pyx_n_s_XUnicode, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - - /* "lib/Naked/toolshed/c/types.pyx":858 - * # this version works - * class XUnicode: - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): # <<<<<<<<<<<<<< - * import sys - * import unicodedata - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_1__init__, 0, __pyx_n_s_XUnicode___init, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__200)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_3, sizeof(__pyx_defaults9), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __Pyx_CyFunction_Defaults(__pyx_defaults9, __pyx_t_3)->__pyx_arg_attributes = __pyx_t_1; - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_3, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_8XUnicode_14__defaults__); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_init, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":889 - * self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - * - * def __str__(self): # <<<<<<<<<<<<<< - * # return self.naked_u_string - * return self.obj - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_3__str__, 0, __pyx_n_s_XUnicode___str, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__202)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_str, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":893 - * return self.obj - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return self.naked_u_string - * - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_5__repr__, 0, __pyx_n_s_XUnicode___repr, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__204)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_repr, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 893; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":896 - * return self.naked_u_string - * - * def __getattr__(self, the_attribute): # <<<<<<<<<<<<<< - * return self.obj.__dict__[the_attribute] - * - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_7__getattr__, 0, __pyx_n_s_XUnicode___getattr, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__206)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_getattr, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":899 - * return self.obj.__dict__[the_attribute] - * - * def __cmp__(self, other_string): # <<<<<<<<<<<<<< - * return hash(self.naked_u_string) == hash(other_string) - * # TODO: add check for same attributes - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_9__cmp__, 0, __pyx_n_s_XUnicode___cmp, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__208)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_cmp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":907 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_11_getAttributeDict, 0, __pyx_n_s_XUnicode__getAttributeDict, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__210)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_getAttributeDict, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":914 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_8XUnicode_13type, 0, __pyx_n_s_XUnicode_type, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__212)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyObject_SetItem(__pyx_t_2, __pyx_n_s_type, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":857 - * - * # this version works - * class XUnicode: # <<<<<<<<<<<<<< - * def __init__(self, string_text, attributes={}, naked_type='XUnicode'): - * import sys - */ - __pyx_t_3 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_XUnicode, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XUnicode, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":925 - * # - * #------------------------------------------------------------------------------ - * class XTuple(tuple): # <<<<<<<<<<<<<< - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): - * tup_obj = tuple.__new__(cls, the_tuple) - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)((PyObject*)(&PyTuple_Type)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)((PyObject*)(&PyTuple_Type)))); - __Pyx_GIVEREF(((PyObject *)((PyObject*)(&PyTuple_Type)))); - __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_t_2, __pyx_n_s_XTuple, __pyx_n_s_XTuple, (PyObject *) NULL, __pyx_n_s_lib_Naked_toolshed_c_types, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - - /* "lib/Naked/toolshed/c/types.pyx":926 - * #------------------------------------------------------------------------------ - * class XTuple(tuple): - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): # <<<<<<<<<<<<<< - * tup_obj = tuple.__new__(cls, the_tuple) - * if len(attributes) > 0: - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XTuple_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_XTuple___new, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__214)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults10), 1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults10, __pyx_t_4)->__pyx_arg_attributes = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_3lib_5Naked_8toolshed_1c_5types_6XTuple_6__defaults__); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_new, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":938 - * # returns a dictionary of the NakedObject instance attributes - * #------------------------------------------------------------------------------ - * def _getAttributeDict(self): # <<<<<<<<<<<<<< - * return self.__dict__ - * - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XTuple_3_getAttributeDict, 0, __pyx_n_s_XTuple__getAttributeDict, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__216)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_getAttributeDict, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":945 - * # returns the Naked type extension string that is set in the constructor for each object type - * #------------------------------------------------------------------------------ - * def type(self): # <<<<<<<<<<<<<< - * if hasattr(self, '_naked_type_'): - * return self._naked_type_ - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3lib_5Naked_8toolshed_1c_5types_6XTuple_5type, 0, __pyx_n_s_XTuple_type, NULL, __pyx_n_s_lib_Naked_toolshed_c_types, PyModule_GetDict(__pyx_m), ((PyObject *)__pyx_codeobj__218)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_type, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":925 - * # - * #------------------------------------------------------------------------------ - * class XTuple(tuple): # <<<<<<<<<<<<<< - * def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): - * tup_obj = tuple.__new__(cls, the_tuple) - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_XTuple, __pyx_t_2, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_XTuple, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 925; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "lib/Naked/toolshed/c/types.pyx":952 - * - * - * if __name__ == '__main__': # <<<<<<<<<<<<<< - * pass - * # no = nobj({"version":"1.0.1", "test":"code"}) - */ - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_main, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_6) { - goto __pyx_L2; - } - __pyx_L2:; - - /* "lib/Naked/toolshed/c/types.pyx":1 - * #!/usr/bin/env python # <<<<<<<<<<<<<< - * # encoding: utf-8 - * # cython: profile=False - */ - __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - if (__pyx_m) { - __Pyx_AddTraceback("init lib.Naked.toolshed.c.types", __pyx_clineno, __pyx_lineno, __pyx_filename); - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init lib.Naked.toolshed.c.types"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* Runtime support code */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif /* CYTHON_REFNANNY */ - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; -#endif - result = (*call)(func, arg, kw); -#if PY_VERSION_HEX >= 0x02060000 - Py_LeaveRecursiveCall(); -#endif - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (result) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_COMPILING_IN_CPYTHON -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) -#else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); -#endif - return PyObject_GetAttr(o, n); -} - -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - #if CYTHON_PEP393_ENABLED - if (unlikely(PyUnicode_READY(s1) < 0) || unlikely(PyUnicode_READY(s2) < 0)) - return -1; - #endif - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, length * kind); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -#else - PyErr_GetExcInfo(type, value, tb); -#endif -} -static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(type, value, tb); -#endif -} - -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_COMPILING_IN_CPYTHON - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - #if PY_VERSION_HEX < 0x02050000 - if (PyClass_Check(type)) { - #else - if (PyType_Check(type)) { - #endif -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - #if PY_VERSION_HEX < 0x02050000 - if (PyInstance_Check(type)) { - type = (PyObject*) ((PyInstanceObject*)type)->in_class; - Py_INCREF(type); - } else { - type = 0; - PyErr_SetString(PyExc_TypeError, - "raise: exception must be an old-style class or instance"); - goto raise_error; - } - #else - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - #endif - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else /* Python 3+ */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } - } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; - } - } - return 0; -#endif -} - -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; - } else { - return __Pyx_IterFinish(); - } - return 0; -} - -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck) { -#if CYTHON_COMPILING_IN_CPYTHON - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely((n >= 0) & (n < PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely((n >= 0) & (n < PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - return NULL; - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -#if !CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) { - return PyObject_CallMethodObjArgs(sep, __pyx_n_s_join, values, NULL) -} -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( - PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, - PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { -#if CYTHON_COMPILING_IN_CPYTHON - PyMappingMethods* mp; -#if PY_MAJOR_VERSION < 3 - PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; - if (likely(ms && ms->sq_slice)) { - if (!has_cstart) { - if (_py_start && (*_py_start != Py_None)) { - cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); - if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstart = 0; - } - if (!has_cstop) { - if (_py_stop && (*_py_stop != Py_None)) { - cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); - if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstop = PY_SSIZE_T_MAX; - } - if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { - Py_ssize_t l = ms->sq_length(obj); - if (likely(l >= 0)) { - if (cstop < 0) { - cstop += l; - if (cstop < 0) cstop = 0; - } - if (cstart < 0) { - cstart += l; - if (cstart < 0) cstart = 0; - } - } else { - if (PyErr_ExceptionMatches(PyExc_OverflowError)) - PyErr_Clear(); - else - goto bad; - } - } - return ms->sq_slice(obj, cstart, cstop); - } -#endif - mp = Py_TYPE(obj)->tp_as_mapping; - if (likely(mp && mp->mp_subscript)) -#endif - { - PyObject* result; - PyObject *py_slice, *py_start, *py_stop; - if (_py_slice) { - py_slice = *_py_slice; - } else { - PyObject* owned_start = NULL; - PyObject* owned_stop = NULL; - if (_py_start) { - py_start = *_py_start; - } else { - if (has_cstart) { - owned_start = py_start = PyInt_FromSsize_t(cstart); - if (unlikely(!py_start)) goto bad; - } else - py_start = Py_None; - } - if (_py_stop) { - py_stop = *_py_stop; - } else { - if (has_cstop) { - owned_stop = py_stop = PyInt_FromSsize_t(cstop); - if (unlikely(!py_stop)) { - Py_XDECREF(owned_start); - goto bad; - } - } else - py_stop = Py_None; - } - py_slice = PySlice_New(py_start, py_stop, Py_None); - Py_XDECREF(owned_start); - Py_XDECREF(owned_stop); - if (unlikely(!py_slice)) goto bad; - } -#if CYTHON_COMPILING_IN_CPYTHON - result = mp->mp_subscript(obj, py_slice); -#else - result = PyObject_GetItem(obj, py_slice); -#endif - if (!_py_slice) { - Py_DECREF(py_slice); - } - return result; - } - PyErr_Format(PyExc_TypeError, - "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); -bad: - return NULL; -} - -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) - value = Py_None; /* Mark as deleted */ - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) { -#else - if (unlikely(value == NULL || !PyString_Check(value))) { -#endif - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - Py_DECREF(res); - return 0; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -#ifndef PY_WRITE_RESTRICTED /* < Py2.5 */ -#define PY_WRITE_RESTRICTED WRITE_RESTRICTED -#endif -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {__Pyx_NAMESTR("__reduce__"), (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - op->func_weakreflist = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyMem_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - if (m->func_weakreflist != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return PyMethod_New(func, - type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -#if CYTHON_COMPILING_IN_PYPY -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - Py_ssize_t size; - switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) { - case METH_VARARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 0) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL) || PyDict_Size(kw) == 0) { - size = PyTuple_GET_SIZE(arg); - if (size == 1) - return (*meth)(self, PyTuple_GET_ITEM(arg, 0)); - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%zd given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -#else -static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return PyCFunction_Call(func, arg, kw); -} -#endif -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __Pyx_NAMESTR("cython_function_or_method"), /*tp_name*/ - sizeof(__pyx_CyFunctionObject), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor) __Pyx_CyFunction_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ -#if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ -#else - 0, /*reserved*/ -#endif - (reprfunc) __Pyx_CyFunction_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - __Pyx_CyFunction_Call, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags*/ - 0, /*tp_doc*/ - (traverseproc) __Pyx_CyFunction_traverse, /*tp_traverse*/ - (inquiry) __Pyx_CyFunction_clear, /*tp_clear*/ - 0, /*tp_richcompare*/ - offsetof(__pyx_CyFunctionObject, func_weakreflist), /* tp_weaklistoffse */ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_CyFunction_methods, /*tp_methods*/ - __pyx_CyFunction_members, /*tp_members*/ - __pyx_CyFunction_getsets, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __Pyx_CyFunction_descr_get, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - offsetof(__pyx_CyFunctionObject, func_dict),/*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - 0, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ -#if PY_VERSION_HEX >= 0x02060000 - 0, /*tp_version_tag*/ -#endif -#if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ -#endif -}; -static int __Pyx_CyFunction_init(void) { -#if !CYTHON_COMPILING_IN_PYPY - __pyx_CyFunctionType_type.tp_call = PyCFunction_Call; -#endif - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (__pyx_CyFunctionType == NULL) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyMem_Malloc(size); - if (!m->defaults) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - #if PY_VERSION_HEX >= 0x02050000 - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; /* try absolute import on failure */ - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } - #else - if (level>0) { - PyErr_SetString(PyExc_RuntimeError, "Relative import is not supported for Python <=2.4."); - goto bad; - } - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, NULL); - #endif -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func) \ - { \ - func_type value = func(x); \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - PyErr_SetString(PyExc_OverflowError, \ - (is_unsigned && unlikely(value < zero)) ? \ - "can't convert negative value to " #target_type : \ - "value too large to convert to " #target_type); \ - return (target_type) -1; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(long)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(long) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(long) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -} - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return (int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - if (sizeof(digit) <= sizeof(int)) { - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: return +(int) ((PyLongObject*)x)->ob_digit[0]; - case -1: return -(int) ((PyLongObject*)x)->ob_digit[0]; - } - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - #if PY_VERSION_HEX < 0x02050000 - return PyErr_Warn(NULL, message); - #else - return PyErr_WarnEx(NULL, message, 1); - #endif - } - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, /*int firstlineno,*/ - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_globals = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else /* Python 3+ has unicode identifiers */ - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif /*__PYX_DEFAULT_STRING_ENCODING_IS_ASCII*/ - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else /* PY_VERSION_HEX < 0x03030000 */ - if (PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_DATA_SIZE(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ - return PyUnicode_AsUTF8AndSize(o, length); -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII */ -#endif /* PY_VERSION_HEX < 0x03030000 */ - } else -#endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */ -#if !CYTHON_COMPILING_IN_PYPY -#if PY_VERSION_HEX >= 0x02060000 - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - #if PY_VERSION_HEX < 0x02060000 - return PyInt_AsSsize_t(b); - #else - return PyLong_AsSsize_t(b); - #endif - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { -#if PY_VERSION_HEX < 0x02050000 - if (ival <= LONG_MAX) - return PyInt_FromLong((long)ival); - else { - unsigned char *bytes = (unsigned char *) &ival; - int one = 1; int little = (int)*(unsigned char*)&one; - return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0); - } -#else - return PyInt_FromSize_t(ival); -#endif -} - - -#endif /* Py_PYTHON_H */ diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/c/types.pyx b/venv/lib/python3.6/site-packages/Naked/toolshed/c/types.pyx deleted file mode 100644 index 49840ac..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/c/types.pyx +++ /dev/null @@ -1,999 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# cython: profile=False - -import sys -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [[ NakedObject class ]] -# A generic Python object -# Assigns object attributes by key name in the dictionary argument to the constructor -# The methods are inherited by other mutable Naked object extension types -# Attribute accessors: hasattr, getattr, setattr, delattr -#------------------------------------------------------------------------------ -class NakedObject(object): - # initialize with an attributes dictionary {attribute_name: attribute_value} - def __init__(self, attributes={}, naked_type='NakedObject'): - if len(attributes) > 0: - for key in attributes: - setattr(self, key, attributes[key]) - setattr(self, '_naked_type_', naked_type) # maintain an attribute to keep track of the extension type - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the NakedObject instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ _equal_type method ] (boolean) - # returns boolean for type of instance == type of test parameter instance - #------------------------------------------------------------------------------ - def _equal_type(self, other_obj): - return type(self) == type(other_obj) - - #------------------------------------------------------------------------------ - # [ _equal_attributes metod ] (method) - # returns boolean for instance.__dict__ == test parameter .__dict__ (attribute comparison) - #------------------------------------------------------------------------------ - def _equal_attributes(self, other_obj): - return self.__dict__ == other_obj.__dict__ - - #------------------------------------------------------------------------------ - # == overload - #------------------------------------------------------------------------------ - def __eq__(self, other_obj): - return self.equals(other_obj) - - #------------------------------------------------------------------------------ - # != overload - #------------------------------------------------------------------------------ - def __ne__(self, other_obj): - result = self.equals(other_obj) - if result: - return False # reverse result of the equals method - else: - return True - - #------------------------------------------------------------------------------ - # [ equals method ] (boolean) - # equality testing based on type and attributes - # **NEED TO OVERRIDE IN CLASSES THAT INHERIT - #------------------------------------------------------------------------------ - def equals(self, other_obj): - return self._equal_type(other_obj) and self._equal_attributes(other_obj) - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - -#------------------------------------------------------------------------------ -# [[ XDict class ]] -# An inherited extension to the dictionary type -#------------------------------------------------------------------------------ -class XDict(dict, NakedObject): - def __init__(self, dict_obj, attributes={}, naked_type='XDict'): - dict.__init__(self, dict_obj) - NakedObject.__init__(self, attributes, naked_type) - - #------------------------------------------------------------------------------ - # XDict Operator Overloads - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # + overload - # overwrites existing keys with key:value pairs from new dictionaries if they are the same keys - # returns the updated XDict object - #------------------------------------------------------------------------------ - def __add__(self, other_dict): - try: - self.update(other_dict) - if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # +- overload - # overwrites existing keys with another_dict (right sided argument) keys if they are the same keys - # returns the updated XDict object - #------------------------------------------------------------------------------ - def __iadd__(self, other_dict): - try: - self.update(other_dict) - if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # == overload - #------------------------------------------------------------------------------ - def __eq__(self, other_obj): - return self.equals(other_obj) - - #------------------------------------------------------------------------------ - # != overload - #------------------------------------------------------------------------------ - def __ne__(self, other_obj): - result = self.equals(other_obj) - if result: - return False # reverse result of the equals method - else: - return True - - #------------------------------------------------------------------------------ - # [ equals method ] (boolean) - # tests for equality of the XDict (type, attributes, dictionary equality) - #------------------------------------------------------------------------------ - def equals(self, other_obj): - if self._equal_type(other_obj) and self._equal_attributes(other_obj): - if dict(self) == dict(other_obj): - return True - else: - return False - else: - return False - - #------------------------------------------------------------------------------ - # XDict Value Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ conditional_map_to_vals method ] (XDict) - # returns the original XDict with values that meet True condition in `conditional_function` - # modified as per the `mapped_function` with single value argument call - # Test: test_xdict_conditional_map - #------------------------------------------------------------------------------ - def conditional_map_to_vals(self, conditional_function, mapped_function): - for key, value in self.xitems(): - if conditional_function(key): - self[key] = mapped_function(value) - return self - - #------------------------------------------------------------------------------ - # [ map_to_vals method ] (XDict) - # returns the original XDict with all values modified as per the `mapped_function` - # Test: test_xdict_map_to_vals - #------------------------------------------------------------------------------ - def map_to_vals(self, mapped_function): - # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - for key, value in self.xitems(): - self[key] = mapped_function(value) - return self - - #------------------------------------------------------------------------------ - # [ val_xlist method ] (XList) - # return an XList of the values in the XDict - # Test: test_xdict_val_xlist - #------------------------------------------------------------------------------ - def val_xlist(self): - return XList(self.values(), self._getAttributeDict()) - - #------------------------------------------------------------------------------ - # [ max_val method ] (tuple of maximum value and associated key) - # Test: test_xdict_max_val, test_xdict_max_val_strings (strings are alphabetic if not numerals) - #------------------------------------------------------------------------------ - def max_val(self): - return max(zip(self.values(), self.keys())) - - #------------------------------------------------------------------------------ - # [ min_val method ] (tuple of minimum value and associated key) - #------------------------------------------------------------------------------ - def min_val(self): - return min(zip(self.values(), self.keys())) - - #------------------------------------------------------------------------------ - # [ sum_vals method ] (numeric return type dependent upon original value type) - # returns sum of all values in the dictionary - #------------------------------------------------------------------------------ - def sum_vals(self): - return sum(self.values()) - - #------------------------------------------------------------------------------ - # [ val_count method ] (integer) - # returns an integer value for the total count of `value_name` in the dictionary values - # Case sensitive test if comparing strings - # Tests: test_xdict_val_count_string, test_xdict_val_count_integer - #------------------------------------------------------------------------------ - def val_count(self, value_name): - count = 0 - for test_value in self.values(): - if value_name == test_value: - count += 1 - return count - - #------------------------------------------------------------------------------ - # [ value_count_ci method ] (integer) - # returns an integer value for the total count of case insensitive `value_name` - # strings/char in the dictionary values. Can include non-string types (ignores them) - # Test: test_xdict_val_count_ci - #------------------------------------------------------------------------------ - def val_count_ci(self, value_name): - count = 0 - for test_value in self.values(): - try: - if value_name.lower() in test_value.lower(): - count += 1 - except AttributeError: # the test_value was not a string, catch exception and continue count attempt - continue - return count - - - #------------------------------------------------------------------------------ - # XDict Key Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ difference method ] (difference set of keys) - # definition: keys that are included in self, but not in `another_dict` - # Tests: test_xdict_key_difference, test_xdict_key_difference_when_none_present - #------------------------------------------------------------------------------ - def difference(self, another_dict): - return set(self.keys()) - set(another_dict.keys()) - - #------------------------------------------------------------------------------ - # [ intersection method ] (intersection set of keys) - # definition: keys that are included in both self and `another_dict` - # Tests: test_xdict_key_intersection, test_xdict_key_intersection_when_none_present - #------------------------------------------------------------------------------ - def intersection(self, another_dict): - return set(self.keys()) & set(another_dict.keys()) - - #------------------------------------------------------------------------------ - # [ key_xlist method ] (XList) - # returns an XList of the keys in the XDict - # Test: test_xdict_key_xlist - #------------------------------------------------------------------------------ - def key_xlist(self): - return XList(self.keys(), self._getAttributeDict()) - - #------------------------------------------------------------------------------ - # [ random method ] (dictionary) - # return new Python dictionary with single, random key:value pair - # Test: test_xdict_key_random - #------------------------------------------------------------------------------ - def random(self): - import random - from Naked.toolshed.python import py_major_version - random_key_list = random.sample(self.keys(), 1) - the_key = random_key_list[0] - return {the_key: self[the_key]} - - #------------------------------------------------------------------------------ - # [ random_sample method ] (dictionary) - # return new Python dictionary with `number_of_items` random key:value pairs - # Test: test_xdict_key_random_sample - #------------------------------------------------------------------------------ - def random_sample(self, number_of_items): - import random - random_key_list = random.sample(self.keys(), number_of_items) - new_dict = {} - for item in random_key_list: - new_dict[item] = self[item] - return new_dict - - #------------------------------------------------------------------------------ - # [ xitems method ] (tuple) - # Generator method that returns tuples of every key, value in dictionary - # uses appropriate method from Python 2 and 3 interpreters - # Test: test_xdict_xitems - #------------------------------------------------------------------------------ - def xitems(self): - from Naked.toolshed.python import py_major_version - if py_major_version() > 2: - return self.items() - else: - return self.iteritems() - -#------------------------------------------------------------------------------ -# [[ XList class ]] -# An inherited extension to the list object that permits attachment of attributes -#------------------------------------------------------------------------------ -class XList(list, NakedObject): - def __init__(self, list_obj, attributes={}, naked_type='XList'): - list.__init__(self, list_obj) - NakedObject.__init__(self, attributes, naked_type) - - #------------------------------------------------------------------------------ - # XList Operator Overloads - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # + operator overload - # extends XList with one or more other lists (`*other_lists`) - #------------------------------------------------------------------------------ - def __add__(self, *other_lists): - try: - for the_list in other_lists: - # add attributes if it is an XList - if hasattr(the_list, '_naked_type_') and (getattr(the_list, '_naked_type_') == 'XList'): - attr_dict = the_list._getAttributeDict() # get XList attribute dictionary - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - # extend the XList items - self.extend(the_list) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # += overload - # extends XList with one other list (`another_list`) - #------------------------------------------------------------------------------ - def __iadd__(self, another_list): - try: - #add attributes if it is an XList - if hasattr(another_list, '_naked_type_') and (getattr(another_list, '_naked_type_') == 'XList'): - attr_dict = another_list._getAttributeDict() # get XList attribute dictionary - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - # extend the XList items - self.extend(another_list) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # == overload - #------------------------------------------------------------------------------ - def __eq__(self, other_obj): - return self.equals(other_obj) - - #------------------------------------------------------------------------------ - # != overload - #------------------------------------------------------------------------------ - def __ne__(self, other_obj): - result = self.equals(other_obj) - if result: - return False # reverse result of the equals method - else: - return True - - #------------------------------------------------------------------------------ - # [ equals method ] (boolean) - # tests for equality of the XList (type, attributes, list equality) - #------------------------------------------------------------------------------ - def equals(self, other_obj): - if self._equal_type(other_obj) and self._equal_attributes(other_obj): - if list(self) == list(other_obj): - return True - else: - return False - else: - return False - - #------------------------------------------------------------------------------ - # XList Methods - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # XList String Methods - #------------------------------------------------------------------------------ - # [ join method ] (string) - # Concatenate strings in the list and return - # Default separator between string list values is an empty string - # Pass separator character(s) as an argument to the method - #------------------------------------------------------------------------------ - def join(self, separator=""): - return separator.join(self) - - #------------------------------------------------------------------------------ - # [ postfix method ] (list of strings) - # Append a string to each list item string - #------------------------------------------------------------------------------ - def postfix(self, after): - return [ "".join([x, after]) for x in self ] - - #------------------------------------------------------------------------------ - # [ prefix method ] (list of strings) - # Prepend a string to each list item string - #------------------------------------------------------------------------------ - def prefix(self, before): - return [ "".join([before, x]) for x in self ] - - #------------------------------------------------------------------------------ - # [ surround method ] (list of strings) - # Surround each list item string with a before and after string argument passed to the method - #------------------------------------------------------------------------------ - def surround(self, before, after=""): - if after == "": - after = before - return [ "".join([before, x, after]) for x in self ] - - #------------------------------------------------------------------------------ - # XList Numeric Methods - #------------------------------------------------------------------------------ - # [ max method ] (list dependent type, single value) - # return maximum value from the list items - #------------------------------------------------------------------------------ - def max(self): - return max(self) - - #------------------------------------------------------------------------------ - # [ min method ] (list dependent type, single value) - # return minimum value from the list items - #------------------------------------------------------------------------------ - def min(self): - return min(self) - - #------------------------------------------------------------------------------ - # [ sum method ] (list dependent type, single value) - # return the sum of all list items - #------------------------------------------------------------------------------ - def sum(self): - return sum(self) - - #------------------------------------------------------------------------------ - # XList Data Management Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ count_duplicates method ] (integer) - # returns an integer count of number of duplicate values - #------------------------------------------------------------------------------ - def count_duplicates(self): - return len(self) - len(set(self)) - - #------------------------------------------------------------------------------ - # [ remove_duplicates ] (XList) - # returns a new XList with duplicates removed - #------------------------------------------------------------------------------ - def remove_duplicates(self): - return XList( set(self), self._getAttributeDict() ) - - #------------------------------------------------------------------------------ - # [ difference method ] (set) - # returns a set containing items in XList that are not contained in `another_list` - #------------------------------------------------------------------------------ - def difference(self, another_list): - return set(self) - set(another_list) - - #------------------------------------------------------------------------------ - # [ intersection method ] (set) - # returns a set containing items that are in both XList and `another_list` - #------------------------------------------------------------------------------ - def intersection(self, another_list): - return set(self) & set(another_list) - - #------------------------------------------------------------------------------ - # XList Function Mapping Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ map_to_items method ] (XList) - # returns original XList with modification of each item based upon `mapped_function` - #------------------------------------------------------------------------------ - def map_to_items(self, mapped_function): - # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - for index, item in enumerate(self): - self[index] = mapped_function(item) - return self - - #------------------------------------------------------------------------------ - # [ conditional_map_to_items method ] (XList) - # returns original XList with modification of items that meet True condition in - # `conditional_function` with change performed as defined in `mapped_function` - #------------------------------------------------------------------------------ - def conditional_map_to_items(self, conditional_function, mapped_function): - for index, item in enumerate(self): - if conditional_function(item): - self[index] = mapped_function(item) - return self - - #------------------------------------------------------------------------------ - # XList Descriptive Stats Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ count_ci method ] (integer) - # returns an integer count of the number of case-insensitive items that match `test_string` - #------------------------------------------------------------------------------ - def count_ci(self, test_string): - count = 0 - for item in self: - try: - if test_string.lower() in item.lower(): - count += 1 - except AttributeError: # the test_value was not a string, catch exception and continue count attempt - continue - return count - - #------------------------------------------------------------------------------ - # [ random method ] (list) - # returns a single item list with a random element from the original XList - #------------------------------------------------------------------------------ - def random(self): - import random - return random.choice(self) - - #------------------------------------------------------------------------------ - # [ random_sample method ] (list) - # returns a list with one or more random items from the original XList - # number of items determined by the `number_of_items` argument - #------------------------------------------------------------------------------ - def random_sample(self, number_of_items): - import random - return random.sample(self, number_of_items) - - #------------------------------------------------------------------------------ - # [ shuffle method ] (XList) - # randomly shuffle the contents of the list - #------------------------------------------------------------------------------ - def shuffle(self): - import random - random.shuffle(self) - return self - - #------------------------------------------------------------------------------ - # XList Match Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ wildcard_match method ] (list) - # returns a list of items that match the `wildcard` argument - #------------------------------------------------------------------------------ - def wildcard_match(self, wildcard): - if hasattr(self, 'nkd_fnmatchcase'): - fnmatchcase = self.nkd_fnmatchcase - else: - from fnmatch import fnmatchcase - self.nkd_fnmatchcase = fnmatchcase - return [ x for x in self if fnmatchcase(x, wildcard) ] - - #------------------------------------------------------------------------------ - # [ multi_wildcard_match method ] (list) - # returns a list of items that match one or more | separated wildcards passed as string - #------------------------------------------------------------------------------ - def multi_wildcard_match(self, wildcards): - if hasattr(self, 'nkd_fnmatchcase'): - fnmatchcase = self.nkd_fnmatchcase - else: - from fnmatch import fnmatchcase - self.nkd_fnmatchcase = fnmatchcase - wc_list = wildcards.split('|') - return_list = [] - for wc in wc_list: - temp_list = [ x for x in self if fnmatchcase(x, wc) ] - for result in temp_list: - return_list.append(result) - return return_list - - #------------------------------------------------------------------------------ - # XList Cast Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ xset method ] (XSet) - # return an XSet with unique XList item values and XList attributes - #------------------------------------------------------------------------------ - def xset(self): - attr_dict = self._getAttributeDict() - return XSet(set(self), attr_dict) - - #------------------------------------------------------------------------------ - # [ xfset method ] (XFSet) - # return an XFSet with unique XList item values and XList attributes - #------------------------------------------------------------------------------ - def xfset(self): - attr_dict = self._getAttributeDict() - return XFSet(set(self), attr_dict) - - #------------------------------------------------------------------------------ - # [ xtuple method ] (XTuple) - # returns an XTuple with XList item values and XList attributes - #------------------------------------------------------------------------------ - def xtuple(self): - attr_dict = self._getAttributeDict() - return XTuple(tuple(self), attr_dict) - -#------------------------------------------------------------------------------ -# [[ XMaxHeap class ]] -# max heap queue -#------------------------------------------------------------------------------ -from heapq import heappush, heappop -class XMaxHeap(NakedObject): - def __init__(self, attributes={}, naked_type='XMaxHeap'): - NakedObject.__init__(self, attributes, naked_type) - self._queue = [] - self._index = 0 - - # length of the queue - def __len__(self): - return len(self._queue) - - # O(log n) complexity - def push(self, the_object, priority): - heappush(self._queue, (-priority, self._index, the_object)) - self._index += 1 - - # O(log n) complexity - def pop(self): - if self._queue: - return heappop(self._queue)[-1] - else: - return None - - # push new object and return the highest priority object - def pushpop(self, the_object, priority): - heappush(self._queue, (-priority, self._index, the_object)) - self._index += 1 - if self._queue: - return heappop(self._queue)[-1] - else: - return None # return None if the queue is empty - - # the length of the queue - def length(self): - return len(self._queue) - -#------------------------------------------------------------------------------ -# [[ XMinHeap class ]] -# min heap queue -#------------------------------------------------------------------------------ -from heapq import heappush, heappop -class XMinHeap(NakedObject): - def __init__(self, attributes={}, naked_type='XMinHeap'): - NakedObject.__init__(self, attributes, naked_type) - self._queue = [] - self._index = 0 - - - # length of the queue - def __len__(self): - return len(self._queue) - - # O(log n) complexity - def push(self, the_object, priority): - heappush(self._queue, (priority, self._index, the_object)) - self._index += 1 - - # O(log n) complexity - def pop(self): - if self._queue: - return heappop(self._queue)[-1] - else: - return None # return None if the queue is empty - - # push new object and return the lowest priority object - def pushpop(self, the_object, priority): - heappush(self._queue, (priority, self._index, the_object)) - self._index += 1 - if self._queue: - return heappop(self._queue)[-1] - else: - return None #return None if the queue is empty - - # the length of the queue - def length(self): - return len(self._queue) - - -#------------------------------------------------------------------------------ -# [[ XQueue class ]] -# -#------------------------------------------------------------------------------ -from collections import deque -class XQueue(deque, NakedObject): - def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - deque.__init__(self, initial_iterable, max_length) - NakedObject.__init__(self, attributes, naked_type) - - -#------------------------------------------------------------------------------ -# [[ XSet class ]] -# An inherited extension to the mutable set object that permits attribute assignment -# Inherits from set and from NakedObject (see methods in NakedObject at top of this module -#------------------------------------------------------------------------------ -class XSet(set, NakedObject): - def __init__(self, set_obj, attributes={}, naked_type='XSet'): - set.__init__(self, set_obj) - NakedObject.__init__(self, attributes, naked_type) - - # << operator is overloaded to extend the XSet with a second set - def __lshift__(self, another_set): - self.update(another_set) - return self - - # += operator overload to extend the XSet with a second set - def __iadd__(self, another_set): - self.update(another_set) - return self - - def xlist(self): - attr_dict = self._getAttributeDict() - return XList(list(self), attr_dict) - - def xfset(self): - attr_dict = self._getAttributeDict() - return XFSet(self, attr_dict) - -#------------------------------------------------------------------------------ -# [[ XFSet class ]] -# An inherited extension to the immutable frozenset object that permits attribute assignment -# Immutable so there is no setter method, attributes must be set in the constructor -#------------------------------------------------------------------------------ -class XFSet(frozenset): - def __new__(cls, the_set, attributes={}, naked_type="XFSet"): - set_obj = frozenset.__new__(cls, the_set) - if len(attributes) > 0: - for key in attributes: - setattr(set_obj, key, attributes[key]) - setattr(set_obj, '_naked_type_', naked_type) # set the naked extension type as an attribute (NakedObject does this for mutable classes) - return set_obj - - def _getAttributeDict(self): - return self.__dict__ - - def xlist(self): - attr_dict = self._getAttributeDict() - return XList(list(self), attr_dict, naked_type="XList") - - def xset(self): - attr_dict = self._getAttributeDict() - return XSet(self, attr_dict, naked_type="XSet") - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - -#------------------------------------------------------------------------------ -# [[ XString class ]] -# An inherited extension to the immutable string object that permits attribute assignment -# Immutable so there is no setter method, attributes must be set in the constructor -# Python 2: byte string by default, can cast to normalized UTF-8 with XString().unicode() method -# Python 3: string (that permits unicode) by default, can normalize with XString().unicode() method -#------------------------------------------------------------------------------ -class XString(str): - def __new__(cls, string_text, attributes={}, naked_type='XString'): - str_obj = str.__new__(cls, string_text) - if len(attributes) > 0: - for key in attributes: - setattr(str_obj, key, attributes[key]) - setattr(str_obj, '_naked_type_', naked_type) - return str_obj - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the XString instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - ## TODO: see where + vs. join breakpoint becomes important - def concat(self, *strings): - str_list = [] - for x in strings: - str_list.append(x) - return "".join(str_list) - - # fastest substring search truth test - def contains(self, substring): - return substring in self - - # split the string on one or more delimiters, return list - # if up to two chars, then uses str.split(), if more chars then use re.split - def xsplit(self, split_delimiter): - length = len(split_delimiter) - if length > 2: - import re - split_delimiter = "".join([ '[', split_delimiter, ']' ]) - return re.split(split_delimiter, self) - elif length > 1: - delim2 = split_delimiter[1] - first_list = self.split(split_delimiter[0]) - result_list = [] - for item in first_list: - for subitem in item.split(delim2): - result_list.append(subitem) - return result_list - else: - return self.split(split_delimiter) - - # split the string on one or more characters and return items in set - def xsplit_set(self, split_delimiter): - return set(self.xsplit(split_delimiter)) - - # str begins with substring - faster than str.startswith() - def begins(self, begin_string): - return begin_string in self[0:len(begin_string)] - - # str ends with substring - faster than str.endswith() - def ends(self, end_string): - return end_string in self[-len(end_string):] - - # case sensitive wildcard match on the XString (boolean returned) - def wildcard_match(self, wildcard): - from fnmatch import fnmatchcase - return fnmatchcase(self, wildcard) - - # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - def unicode(self): - from sys import version_info - from unicodedata import normalize - if version_info[0] == 2: - return normalize('NFKD', self.decode('UTF-8')) - else: - return normalize('NFKD', self) - - -# this version works -class XUnicode: - def __init__(self, string_text, attributes={}, naked_type='XUnicode'): - import sys - import unicodedata - norm_text = unicodedata.normalize('NFKD', string_text) - - class XUnicode_2(unicode): - def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): - str_obj = unicode.__new__(cls, the_string_text) - if len(attributes) > 0: - for key in attributes: - setattr(str_obj, key, attributes[key]) - setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode2 for Py 2 strings - return str_obj - - class XUnicode_3(str): - def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): - str_obj = str.__new__(cls, the_string_text) - if len(attributes) > 0: - for key in attributes: - setattr(str_obj, key, attributes[key]) - setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode3 for Py 3 strings - return str_obj - - - if sys.version_info[0] == 2: - self.obj = XUnicode_2(norm_text, attributes) - self.norm_unicode = norm_text - self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - elif sys.version_info[0] == 3: - self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - - def __str__(self): - # return self.naked_u_string - return self.obj - - def __repr__(self): - return self.naked_u_string - - def __getattr__(self, the_attribute): - return self.obj.__dict__[the_attribute] - - def __cmp__(self, other_string): - return hash(self.naked_u_string) == hash(other_string) - # TODO: add check for same attributes - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the NakedObject instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - -#------------------------------------------------------------------------------ -# [[ XTuple class ]] -# -#------------------------------------------------------------------------------ -class XTuple(tuple): - def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): - tup_obj = tuple.__new__(cls, the_tuple) - if len(attributes) > 0: - for key in attributes: - setattr(tup_obj, key, attributes[key]) - setattr(tup_obj, '_naked_type_', naked_type) - return tup_obj - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the NakedObject instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - -if __name__ == '__main__': - pass - # no = nobj({"version":"1.0.1", "test":"code"}) - # print(no) - # print(no.version) - # print(no.test) - # nl = XList([1, 2, 3, 1, 2, 5], {"version":"1.0.1", "test":"code"}) - # print(nl.count_duplicates()) - # the_list = list(range(5000)) - # nl = XList(the_list) - # nq = XPriorityQueue() - # nq.push('test', 5) - # nq.push('one', 3) - # nq.push('another', 4) - # print(nq.pop()) - # print(nq.pop()) - # print(nq.pop()) - - # nl = XList([2, 2, 2, 'another'], {'p': 'attribute'}) - # print(nl) - # print(nl.count_item(2)) - # nq = XQueue(nl, max_length=2) - # print(nq) - - # xs = XSet({'test', 'true', 'false'}, {'bonus': 'candy', 'test': 'another'}) - # xs += {'bogus', 'yep'} - # print(xs) - - # xd = XDict({'test2': 0, 'is': 1}, {'a': '1', 'b': '2'}) - # ad = {'test': 0, 'is': 2} - # ld = xd.intersection(ad) - # print(ld) - # xd = xd + ad + ld - # print(xd.map_to_vals(pr)) - # print(xd.a) - # print(xd) - # print(xd.a) - # print(xd.min_val()) - # print(xd.conditional_map_to_vals(matcher, resulter)) - - # nl = XList([ 'test.txt', 'bogus.txt', 'test.py', 'another.rb', 'est.doc', 'est.py' ]) - # print(nl.multi_wildcard_match('*.py|*.txt|*.doc')) - - # xstr = XString("Hey! Cœur It's Bengali ব য,\nand here is some more ২") - # ustr = xstr.unicode() - # print(isinstance(ustr, bytes)) - # print(xstr) - diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/casts.py b/venv/lib/python3.6/site-packages/Naked/toolshed/casts.py deleted file mode 100644 index 32e8431..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/casts.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# tests in test_CASTS.py - -from Naked.toolshed.types import NakedObject, XFSet, XDict, XList, XQueue, XSet, XString, XTuple -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [ nobj ] (NakedObject) -# Cast a dictionary of attributes to a NakedObject with key>attribute mapping -#------------------------------------------------------------------------------ -def nobj(attributes={}): - try: - return NakedObject(attributes) - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to create a NakedObject with the requested argument using the nobj() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xd function ] (XDict) -# Cast a Python dictionary to a XDict -#------------------------------------------------------------------------------ -def xd(dictionary_arg, attributes={}): - try: - return XDict(dictionary_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XDict with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XDict with the xd() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xl function ] (XList) -# Cast a Python list, set, or tuple to a XList -#------------------------------------------------------------------------------ -def xl(list_arg, attributes={}): - try: - return XList(list_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XList with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XList with the xl() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xq function ] (XQueue) -# Cast a Python list, set, tuple to a XQueue -#------------------------------------------------------------------------------ -def xq(queue_arg, attributes={}): - try: - return XQueue(queue_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XQueue with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XQueue with the xq() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xset function ] (XSet) -# Cast a Python set to a XSet -#------------------------------------------------------------------------------ -def xset(set_arg, attributes={}): - try: - return XSet(set_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XSet with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xfset function ] (XFSet) -# Cast a Python set to a XFSet -#------------------------------------------------------------------------------ -def xfset(set_arg, attributes={}): - try: - return XFSet(set_arg, attributes) - except TypeError: - raise TypeError("Attempted to cast to a XSet with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XSet with the xset() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xstr function ] (XString) -# Cast a Python string to a XString -#------------------------------------------------------------------------------ -def xstr(string_arg, attributes={}): - try: - return XString(string_arg, attributes) - except TypeError as te: - raise TypeError("Attempted to cast to a XString with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XString with the xstr() function (Naked.toolshed.casts.py).") - raise e - -#------------------------------------------------------------------------------ -# [ xt function ] (XTuple) -# Cast a Python list, set, tuple to a XTuple -#------------------------------------------------------------------------------ -def xt(tup_arg, attributes={}): - try: - return XTuple(tup_arg, attributes) - except TypeError as te: - raise TypeError("Attempted to cast to a XTuple with an incompatible type") - except Exception as e: - if DEBUG_FLAG: - print("Naked Framework Error: unable to cast object to a XTuple with the xt() function (Naked.toolshed.casts.py).") - raise e - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/file.py b/venv/lib/python3.6/site-packages/Naked/toolshed/file.py deleted file mode 100644 index e9304ad..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/file.py +++ /dev/null @@ -1,376 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [ IO class ] -# interface for all local file IO classes -#------------------------------------------------------------------------------ -class IO: - def __init__(self,filepath): - self.filepath = filepath - -#------------------------------------------------------------------------------ -# [ FileWriter class ] -# writes data to local files -#------------------------------------------------------------------------------ -class FileWriter(IO): - def __init__(self, filepath): - IO.__init__(self, filepath) - - #------------------------------------------------------------------------------ - # [ append method ] - # Universal text file writer that appends to existing file using system default text encoding or utf-8 if throws unicode error - # Tests: test_IO.py:: test_file_ascii_readwrite_append, test_file_append_missingfile - #------------------------------------------------------------------------------ - def append(self, text): - try: - from Naked.toolshed.system import file_exists - if not file_exists(self.filepath): #confirm that file exists, if not raise IOError (assuming that developer expected existing file if using append) - raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append).") - with open(self.filepath, 'a') as appender: - appender.write(text) - except UnicodeEncodeError as ue: - self.append_utf8(text) #try writing as utf-8 - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ append_utf8 method ] - # Text writer that appends text to existing file with utf-8 encoding - # Tests: test_IO.py :: test_file_utf8_readwrite_append - #------------------------------------------------------------------------------ - def append_utf8(self, text): - try: - from Naked.toolshed.system import file_exists - if not file_exists(self.filepath): - raise IOError("The file specified for the text append does not exist (Naked.toolshed.file.py:append_utf8).") - import codecs - import unicodedata - norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - with codecs.open(self.filepath, mode='a', encoding="utf_8") as appender: - appender.write(norm_text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to append text to the file with the append_utf8 method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ gzip method (writer) ] - # writes data to gzip compressed file - # Note: adds .gz extension to filename if user did not specify it in the FileWriter class constructor - # Note: uses compresslevel = 6 as default to balance speed and compression level (which in general is not significantly less than 9) - # Tests: test_IO.py :: test_file_gzip_ascii_readwrite, test_file_gzip_utf8_readwrite, - # test_file_gzip_utf8_readwrite_explicit_decode - #------------------------------------------------------------------------------ - def gzip(self, text, compression_level=6): - try: - import gzip - if not self.filepath.endswith(".gz"): - self.filepath = self.filepath + ".gz" - with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - gzip_writer.write(text) - except UnicodeEncodeError as ue: - import unicodedata - norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - import codecs - binary_data = codecs.encode(norm_text, "utf_8") - with gzip.open(self.filepath, 'wb', compresslevel=compression_level) as gzip_writer: - gzip_writer.write(binary_data) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to gzip compress the file with the gzip method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ write method ] - # Universal text file writer that writes by system default or utf-8 encoded unicode if throws UnicdeEncodeError - # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_ascii_readwrite_missing_file, - # test_file_utf8_write_raises_unicodeerror - #------------------------------------------------------------------------------ - def write(self, text): - try: - with open(self.filepath, 'wt') as writer: - writer.write(text) - except UnicodeEncodeError as ue: - self.write_utf8(text) # attempt to write with utf-8 encoding - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write to requested file with the write() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ write_as method ] - # text file writer that uses developer specified text encoding - # Tests: test_IO.py :: test_file_utf8_readas_writeas - #------------------------------------------------------------------------------ - def write_as(self, text, the_encoding=""): - try: - if the_encoding == "": #if the developer did not include the encoding type, raise an exception - raise RuntimeError("The text encoding was not specified as an argument to the write_as() method (Naked.toolshed.file.py:write_as).") - import codecs - with codecs.open(self.filepath, encoding=the_encoding, mode='w') as f: - f.write(text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to write file with the specified encoding using the write_as() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ write_bin method ] - # binary data file writer - # Tests: test_IO.py :: test_file_bin_readwrite - #------------------------------------------------------------------------------ - def write_bin(self, binary_data): - try: - with open(self.filepath, 'wb') as bin_writer: - bin_writer.write(binary_data) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write binary data to file with the write_bin method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ safe_write method ] (boolean) - # Universal text file writer (writes in default encoding unless throws unicode error) that will NOT overwrite existing file at the requested filepath - # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - # Tests: test_IO.py :: test_file_ascii_safewrite, test_file_utf8_safewrite - #------------------------------------------------------------------------------ - def safe_write(self, text): - import os.path - if not os.path.exists(self.filepath): # if the file does not exist, then can write - try: - with open(self.filepath, 'wt') as writer: - writer.write(text) - return True - except UnicodeEncodeError as ue: - self.write_utf8(text) - return True - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write() method (Naked.toolshed.file.py).") - raise e - else: - return False # if file exists, do not write and return False - - #------------------------------------------------------------------------------ - # [ safe_write_bin method ] - # Binary data file writer that will NOT overwrite existing file at the requested filepath - # returns boolean indicator for success of write based upon test for existence of file (False = write failed because file exists) - #------------------------------------------------------------------------------ - def safe_write_bin(self, file_data): - try: - import os.path - if not os.path.exists(self.filepath): - with open(self.filepath, 'wb') as writer: - writer.write(file_data) - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write to requested file with the safe_write_bin() method (Naked.toolshed.file.py).") - raise e - - - #------------------------------------------------------------------------------ - # [ write_utf8 method ] - # Text file writer with explicit UTF-8 text encoding - # uses filepath from class constructor - # requires text to passed as a method parameter - # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_raises_unicodeerror - #------------------------------------------------------------------------------ - def write_utf8(self, text): - try: - import codecs - f = codecs.open(self.filepath, encoding='utf_8', mode='w') - except IOError as ioe: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to open file for write with the write_utf8() method (Naked.toolshed.file.py).") - raise ioe - try: - import unicodedata - norm_text = unicodedata.normalize('NFKD', text) # NKFD normalization of the unicode data before write - f.write(norm_text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to write UTF-8 encoded text to file with the write_utf8() method (Naked.toolshed.file.py).") - raise e - finally: - f.close() - -#------------------------------------------------------------------------------ -# [ FileReader class ] -# reads data from local files -# filename assigned in constructor (inherited from IO class interface) -#------------------------------------------------------------------------------ -class FileReader(IO): - def __init__(self, filepath): - IO.__init__(self, filepath) - - #------------------------------------------------------------------------------ - # [ read method ] (string) - # Universal text file reader that will read utf-8 encoded unicode or non-unicode text as utf-8 - # returns string or unicode (py3 = string for unicode and non-unicode, py2 = str for non-unicode, unicode for unicode) - # Tests: test_IO.py :: test_file_ascii_readwrite, test_file_read_missing_file, - #------------------------------------------------------------------------------ - def read(self): - try: - return self.read_utf8() #reads everything as unicode in utf8 encoding - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the read() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ read_bin method ] (binary byte string) - # Universal binary data file reader - # returns file contents in binary mode as binary byte strings - # Tests: test_IO.py :: test_file_bin_readwrite, test_file_read_bin_missing_file - #------------------------------------------------------------------------------ - def read_bin(self): - try: - with open(self.filepath, 'rb') as bin_reader: - data = bin_reader.read() - return data - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read the binary data from the file with the read_bin method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ read_as method ] (string with developer specified text encoding) - # Text file reader with developer specified text encoding - # returns file contents in developer specified text encoding - # Tests: test_IO.py :: test_file_utf8_readas_writeas, test_file_readas_missing_file - #------------------------------------------------------------------------------ - def read_as(self, the_encoding): - try: - if the_encoding == "": - raise RuntimeError("The text file encoding was not specified as an argument to the read_as method (Naked.toolshed.file.py:read_as).") - import codecs - with codecs.open(self.filepath, encoding=the_encoding, mode='r') as f: - data = f.read() - return data - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read the file with the developer specified text encoding with the read_as method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ readlines method ] (list of strings) - # Read text from file line by line, uses utf8 encoding by default - # returns list of utf8 encoded file lines as strings - # Tests: test_IO.py :: test_file_readlines, test_file_readlines_missing_file - #------------------------------------------------------------------------------ - def readlines(self): - try: - return self.readlines_utf8() # read as utf8 encoded file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read text from the requested file with the readlines() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ readlines_as method ] (list of developer specified encoded strings) - # Read lines from file with developer specified text encoding - # Returns a list of developer specified encoded lines from the file - # Tests: test_IO.py :: - #------------------------------------------------------------------------------ - def readlines_as(self, dev_spec_encoding): - try: - if dev_spec_encoding == "": - raise RuntimeError("The text file encoding was not specified as an argument to the readlines_as method (Naked.toolshed.file.py:readlines_as).") - import codecs - with codecs.open(self.filepath, encoding=dev_spec_encoding, mode='r') as reader: - data_list = [] - for line in reader: - data_list.append(line) - return data_list - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to read lines in the specified encoding with the readlines_as method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ readlines_utf8 method ] (list of utf-8 encoded strings) - # Read text from unicode file by line - # Returns list of file unicode text lines as unicode strings - # Tests: test_IO.py :: test_file_readlines_unicode, test_file_readlines_utf8_missing_file - #------------------------------------------------------------------------------ - def readlines_utf8(self): - try: - import codecs - with codecs.open(self.filepath, encoding='utf-8', mode='r') as uni_reader: - modified_text_list = [] - for line in uni_reader: - import unicodedata - norm_line = unicodedata.normalize('NFKD', line) # NKFD normalization of the unicode data before use - modified_text_list.append(norm_line) - return modified_text_list - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to read lines in the unicode file with the readlines_utf8 method (Naked.toolshed.file.py)") - raise e - - #------------------------------------------------------------------------------ - # [ read_gzip ] (byte string) - # reads data from a gzip compressed file - # returns the decompressed binary data from the file - # Note: if decompressing unicode file, set encoding="utf-8" - # Tests: test_IO.py :: test_file_gzip_ascii_readwrite, test_file_gzip_utf8_readwrite, - # test_file_read_gzip_missing_file - #------------------------------------------------------------------------------ - def read_gzip(self, encoding="system_default"): - try: - import gzip - with gzip.open(self.filepath, 'rb') as gzip_reader: - file_data = gzip_reader.read() - if encoding in ["utf-8", "utf8", "utf_8", "UTF-8", "UTF8", "UTF_8"]: - import codecs - file_data = codecs.decode(file_data, "utf-8") - import unicodedata - norm_data = unicodedata.normalize('NFKD', file_data) # NKFD normalization of the unicode data before passing back to the caller - return norm_data - else: - return file_data - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read from the gzip compressed file with the read_gzip() method (Naked.toolshed.file.py).") - raise e - - #------------------------------------------------------------------------------ - # [ read_utf8 method ] (string) - # read data from a file with explicit UTF-8 encoding - # uses filepath from class constructor - # returns a unicode string containing the file data (unicode in py2, str in py3) - # Tests: test_IO.py :: test_file_utf8_readwrite, test_file_utf8_readwrite_append, - # test_file_read_utf8_missing_file - #------------------------------------------------------------------------------ - def read_utf8(self): - try: - import codecs - f = codecs.open(self.filepath, encoding='utf_8', mode='r') - except IOError as ioe: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to open file for read with read_utf8() method (Naked.toolshed.file.py).") - raise ioe - try: - textstring = f.read() - import unicodedata - norm_text = unicodedata.normalize('NFKD', textstring) # NKFD normalization of the unicode data before returns - return norm_text - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to read the file with UTF-8 encoding using the read_utf8() method (Naked.toolshed.file.py).") - raise e - finally: - f.close() - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/git.py b/venv/lib/python3.6/site-packages/Naked/toolshed/git.py deleted file mode 100644 index 591cd47..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/git.py +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - - - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/ink.py b/venv/lib/python3.6/site-packages/Naked/toolshed/ink.py deleted file mode 100644 index e3dba03..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/ink.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -#------------------------------------------------------------------------------ -# The Ink Templating System -# A lightweight, fast, flexible text templating system -# Copyright 2014 Christopher Simpkins -# MIT License -#------------------------------------------------------------------------------ -import re - -#------------------------------------------------------------------------------ -# Template class -# A template string class that is inherited from Python str -# Includes metadata about the template: -# odel = opening delimiter -# cdel = closing delimiter -# varlist = inclusive list of all variables in the template text (parsed in constructor) -# Delimiters: -# default = {{variable}} -# assign new opening and closing delimiters as parameters when you make a new Template instance -# `escape_regex` boolean is a speedup, avoids Python escape of special regex chars if you do not need it -#------------------------------------------------------------------------------ -class Template(str): - def __new__(cls, template_text, open_delimiter="{{", close_delimiter="}}", escape_regex=False): - obj = str.__new__(cls, template_text) - obj.odel = open_delimiter - obj.cdel = close_delimiter - obj.varlist = obj._make_var_list(template_text, escape_regex) #contains all unique parsed variables from the template in a list - return obj - - #------------------------------------------------------------------------------ - # [ _make_var_list method ] (list of strings) - # Private method that parses the template string for all variables that match the delimiter pattern - # Returns a list of the variable names as strings - #------------------------------------------------------------------------------ - def _make_var_list(self, template_text, escape_regex=False): - if escape_regex: - open_match_pat = self._escape_regex_special_chars(self.odel) - close_match_pat = self._escape_regex_special_chars(self.cdel) - match_pat = open_match_pat + r'(.*?)' + close_match_pat # capture group contains the variable name used between the opening and closing delimiters - else: - match_pat = self.odel + r'(.*?)' + self.cdel - var_list = re.findall(match_pat, template_text) #generate a list that contains the capture group from the matches (i.e. the variables in the template) - return set(var_list) # remove duplicate entries by converting to set (and lookup speed improvement from hashing) - - #------------------------------------------------------------------------------ - # [ _escape_regex_special_chars method ] (string) - # Private method that escapes special regex metacharacters - # Returns a string with the escaped character modifications - #------------------------------------------------------------------------------ - def _escape_regex_special_chars(self, test_escape_string): - return re.escape(test_escape_string) - -#------------------------------------------------------------------------------ -# Renderer class -# Render the variable replacements in the ink template using a Python dictionary key argument -# Construct the instace of the Renderer with the Ink template and the dictionary key -# Run the renderer with the render method on the instance (e.g. r.render()) -# Parameters to constructor: -# - template = an Ink Template instance -# - key = a dictionary mapped key = variable name : value = variable replacement data -# - html_entities = encode html entities with HTML escaped characters (default = False = do not encode) -#------------------------------------------------------------------------------ - -class Renderer: - def __init__(self, template, key, html_entities=False): - self.odel = template.odel - self.cdel = template.cdel - self.template = template - self.html_entities = html_entities - self.key_dict = key - - #------------------------------------------------------------------------------ - # [ render method ] (string) - # renders the variable replacements in the Ink template - # returns the rendered template as a string - #------------------------------------------------------------------------------ - def render(self): - # make local variables for the loop below (faster) - local_dict = self.key_dict - local_template = self.template - local_varlist = self.template.varlist - local_odel = self.odel - local_cdel = self.cdel - local_htmlent = self.html_entities - if local_htmlent: - from xml.sax.saxutils import escape #from Python std lib - for key in local_dict: - if key in local_varlist: - value = local_dict[key] - replace_string = local_odel + key + local_cdel - if local_htmlent: - value = escape(value) #xml.sax.saxutils function - local_template = local_template.replace(replace_string, value) - return local_template - - ##TODO : multiple file render method? - - -if __name__ == '__main__': - pass - # template = Template("This is a of the {{test}} of the {{document}} {{type}} and more of the {{test}} {{document}} {{type}}") - # renderer = Renderer(template, {'test': 'ব য', 'document':'testing document', 'type':'of mine', 'bogus': 'bogus test'}) - # print(renderer.render()) diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/iter.py b/venv/lib/python3.6/site-packages/Naked/toolshed/iter.py deleted file mode 100644 index 652e721..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/iter.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import itertools - -#------------------------------------------------------------------------------ -# [ chain_iter method ] (iterable items of type contained in multiple list arguments) -# Generator that returns iterable for each item in the multiple list arguments in sequence -#------------------------------------------------------------------------------ -def chain_iter(self, *lists): - return itertools.chain(*lists) - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/network.py b/venv/lib/python3.6/site-packages/Naked/toolshed/network.py deleted file mode 100644 index 335e8c1..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/network.py +++ /dev/null @@ -1,351 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -import requests -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -#[ HTTP class] -# handle HTTP requests -# Uses the requests external library to handle HTTP requests and response object (available on PyPI) -#------------------------------------------------------------------------------ -class HTTP(): - def __init__(self, url="", request_timeout=10): - self.url = url - self.request_timeout = request_timeout - #------------------------------------------------------------------------------ - # HTTP response properties (assignment occurs with the HTTP request methods) - #------------------------------------------------------------------------------ - self.res = None # assigned with the requests external library response object after a HTTP method call - - #------------------------------------------------------------------------------ - # [ get method ] (string) - - # HTTP GET request - returns text string - # returns data stream read from the URL (string) - # Default timeout = 10 s from class constructor - # Re-throws ConnectionError on failed connection (e.g. no site at URL) - # Test : test_NETWORK.py :: test_http_get, test_http_get_response_change, - # test_http_post_reponse_change, test_http_get_response_check - #------------------------------------------------------------------------------ - def get(self, follow_redirects=True): - try: - response = requests.get(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.text - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ get_data method ] (binary data) - # HTTP GET request, return binary data - # returns data stream with raw binary data - #------------------------------------------------------------------------------ - def get_bin(self): - try: - response = requests.get(self.url, timeout=self.request_timeout) - self.res = response # assign the response object from requests to a property on the instance - return response.content # return binary data instead of text (get() returns text) - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request with the URL " + self.url + " using the get_data() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ get_bin_write_file method ] (boolean) - # open HTTP data stream with GET request, make file with the returned binary data - # file path is passed to the method by the developer - # set suppress_output to True if you want to suppress the d/l status information that is printed to the standard output stream - # return True on successful pull and write to disk - # Tests: test_NETWORK.py :: test_http_get_binary - #------------------------------------------------------------------------------ - def get_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") - sys.stdout.flush() - response = requests.get(self.url, timeout=self.request_timeout, stream=True) - self.res = response - with open(filepath, 'wb') as f: # write as binary data - for chunk in response.iter_content(chunk_size=2048): - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_bin_write_file() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ get_txt_write_file method ] (boolean) - # open HTTP data stream with GET request, write file with utf-8 encoded text using returned text data - # file path is passed to the method by the developer (default is the base filename in the URL if not specified) - # return True on successful pull and write to disk - # Tests: test_NETWORK.py :: test_http_get_text - #------------------------------------------------------------------------------ - def get_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") - sys.stdout.flush() - response = requests.get(self.url, timeout=self.request_timeout, stream=True) - self.res = response - import codecs - with codecs.open(filepath, mode='w', encoding="utf-8") as f: #write as text - for chunk in response.iter_content(chunk_size=2048): - chunk = chunk.decode('utf-8') - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform GET request and write file with the URL " + self.url + " using the get_data_write_txt() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ head method ] (dictionary of strings) - # HTTP HEAD request - # returns a dictionary of the header strings - # test for a specific header on either the response dictionary or the instance res property - # Usage example: - # content_type = instance.res['content-type'] - # Tests: test_NETWORK.py :: test_http_head - #------------------------------------------------------------------------------ - def head(self): - try: - response = requests.head(self.url, timeout=self.request_timeout) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.headers - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform a HEAD request with the head() method (Naked.toolshed.network.py).") - raise e - - - #------------------------------------------------------------------------------ - # [ post method ] (string) - # HTTP POST request for text - # returns text from the URL as a string - #------------------------------------------------------------------------------ - def post(self, follow_redirects=True): - try: - response = requests.post(self.url, timeout=self.request_timeout, allow_redirects=follow_redirects) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.text - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.exit("Naked Framework Error: Unable to perform a POST request with the post() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ post_bin method ] (binary data) - # HTTP POST request for binary data - # returns binary data from the URL - #------------------------------------------------------------------------------ - def post_bin(self): - try: - response = requests.post(self.url, timeout=self.request_timeout) - self.res = response # assign the response object from requests to a property on the instance of HTTP class - return response.content - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.exit("Naked Framework Error: Unable to perform POST request with the post_bin() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ post_bin_write_file method ] (boolean = success of write) - # HTTP POST request, write binary file with the response data - # default filepath is the basename of the URL file, may be set by passing an argument to the method - # returns a boolean that indicates the success of the file write - #------------------------------------------------------------------------------ - def post_bin_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - sys.stdout.flush() - response = requests.post(self.url, timeout=self.request_timeout, stream=True) - self.res = response - with open(filepath, 'wb') as f: # write as binary data - for chunk in response.iter_content(chunk_size=2048): - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") # provide user with completion information - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ post_txt_write_file method ] (boolean = success of file write) - # HTTP POST request, write utf-8 encoded text file with the response data - # default filepath is the basename of the URL file, may be set by passing an argument to the method - # returns a boolean that indicates the success of the file write - #------------------------------------------------------------------------------ - def post_txt_write_file(self, filepath="", suppress_output = False, overwrite_existing = False): - try: - import os # used for os.fsync() method in the write - # Confirm that the file does not exist and prevent overwrite if it does (unless developer indicates otherwise) - if not overwrite_existing: - from Naked.toolshed.system import file_exists - if file_exists(filepath): - if not suppress_output: - print("Download aborted. A local file with the requested filename exists on the path.") - return False - if (filepath == "" and len(self.url) > 1): - filepath = self.url.split('/')[-1] # use the filename from URL and working directory as default if not specified - if not suppress_output: - sys.stdout.write("Downloading file from " + self.url + "...") #provide information about the download to user - sys.stdout.flush() - response = requests.post(self.url, timeout=self.request_timeout, stream=True) - self.res = response - import codecs - with codecs.open(filepath, mode='w', encoding="utf-8") as f: # write as binary data - for chunk in response.iter_content(chunk_size=2048): - chunk = chunk.decode('utf-8') - f.write(chunk) - f.flush() - os.fsync(f.fileno()) # flush all internal buffers to disk - if not suppress_output: - print(" ") - print("Download complete.") # provide user with completion information - return True # return True if successful write - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to perform POST request and write file with the URL " + self.url + " using the post_data_write_bin() method (Naked.toolshed.network.py)") - raise e - - #------------------------------------------------------------------------------ - # [ response method ] - # getter method for the requests library object that is assigned as a property - # on the HTTP class after a HTTP request method is run (e.g. get()) - # Note: must run one of the HTTP request verbs to assign this property before use of getter (=None by default) - # Tests: test_NETWORK.py :: test_http_get_response_check - #------------------------------------------------------------------------------ - def response(self): - try: - return self.res - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to return the response from your HTTP request with the response() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ get_status_ok method ] (boolean) - # return boolean whether HTTP response was in 200 status code range for GET request - # Note: this method runs its own GET request, does not need to be run separately - # Tests: test_NETWORK.py :: - #------------------------------------------------------------------------------ - def get_status_ok(self): - try: - self.get() #run the get request - if self.res and self.res.status_code: - return (self.res.status_code == requests.codes.ok) - else: - return False - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the get_status_ok() method (Naked.toolshed.network.py).") - raise e - - #------------------------------------------------------------------------------ - # [ post_status_ok method ] (boolean) - # return boolean whether HTTP response was in 200 status code range for POST request - # Note: method runs its own post method, not necessary to run separately - #------------------------------------------------------------------------------ - def post_status_ok(self): - try: - self.post() #run the post request - if self.res and self.res.status_code: - return (self.res.status_code == requests.codes.ok) - else: - return False - except requests.exceptions.ConnectionError as ce: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Unable to obtain the HTTP status with the post_status_ok() method (Naked.toolshed.network.py).") - raise e - -if __name__ == '__main__': - pass - #------------------------------------------------------------------------------ - # HTTP GET 1 - #------------------------------------------------------------------------------ - # http = HTTP("http://www.google.com") - # data = http.get() - # print(data) - # from Naked.toolshed.file import FileWriter - # w = FileWriter("testfile.txt") - # w.write_utf8(data) - #------------------------------------------------------------------------------ - # HTTP GET 2 - #------------------------------------------------------------------------------ - # http = HTTP() - # http.url = "http://www.google.com" - # print(http.get()) - - diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/python.py b/venv/lib/python3.6/site-packages/Naked/toolshed/python.py deleted file mode 100644 index 68d6b4b..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/python.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 -# tests: test_PYTHON.py - -from sys import version_info - -#------------------------------------------------------------------------------ -# Python Versions -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ py_version function ] (tuple of (major, minor, patch)) -#------------------------------------------------------------------------------ -def py_version(): - return (version_info[0], version_info[1], version_info[2]) - -#------------------------------------------------------------------------------ -# [ py_major_version function ] (integer) -# Return Python interpreter major version number -#------------------------------------------------------------------------------ -def py_major_version(): - return (version_info[0]) - -#------------------------------------------------------------------------------ -# [ py_minor_version function ] (integer) -# Return Python interpreter minor version number -#------------------------------------------------------------------------------ -def py_minor_version(): - return (version_info[1]) - -#------------------------------------------------------------------------------ -# [ py_patch_version function ] (integer) -# Return Python interpreter patch version number -#------------------------------------------------------------------------------ -def py_patch_version(): - return (version_info[2]) - -#------------------------------------------------------------------------------ -# [ is_py2 function ] (boolean) -# Return truth result for question is interpreter running a version of Python 2 -#------------------------------------------------------------------------------ -def is_py2(): - return (version_info[0] == (2)) - -#------------------------------------------------------------------------------ -# [ is_py3 function ] (boolean) -# Return truth result for question is interpreter running a version of Python 3 -#------------------------------------------------------------------------------ -def is_py3(): - return (version_info[0] == (3)) - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/shell.py b/venv/lib/python3.6/site-packages/Naked/toolshed/shell.py deleted file mode 100644 index 4585d42..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/shell.py +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import os -import sys -import subprocess -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [ execute function ] (boolean) -# run a shell command and print std out / std err to terminal -# returns True if exit status = 0 -# returns False if exit status != 0 -#------------------------------------------------------------------------------ -def execute(command): - try: - response = subprocess.call(command, shell=True) - if response == 0: - return True - else: - return False - except subprocess.CalledProcessError as cpe: - try: - sys.stderr.write(cpe.output) - except TypeError as te: - sys.stderr.write(str(cpe.output)) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the execute() function (Naked.toolshed.shell.py).") - raise e - - -#------------------------------------------------------------------------------ -# [ run function ] (bytes string or False) -# run a shell command -# default = -# success:: print to std out and return the std out string -# error:: print to stderr return False, suppress SystemExit on error to permit ongoing run of calling script -# suppress_stdout = True >> suppress std output stream print (returns string) -# suppress_stderr = True >> suppress std err stream print (returns False) -# suppress_exit_status_call = False >> raise SystemExit with the returned status code -#------------------------------------------------------------------------------ -def run(command, suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - try: - response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - if not suppress_stdout: - print(response) - return response - except subprocess.CalledProcessError as cpe: - if not suppress_stderr: # error in existing application (non-zero exit status) - try: - sys.stderr.write(cpe.output) - except TypeError as te: # deal with unusual errors from some system executables that return non string type through subprocess.check_output - sys.stderr.write(str(cpe.output)) - if not suppress_exit_status_call: - if cpe.returncode: - sys.exit(cpe.returncode) - else: - sys.exit(1) - return False # return False on non-zero exit status codes (i.e. failures in the subprocess executable) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run() function (Naked.toolshed.shell.py).") - raise e - - -#------------------------------------------------------------------------------ -# [ muterun function ] (NakedObject with attributes for stdout, stderr, exitcode) -# run a shell command and return a response object -# return object attributes : stdout (bytes), stderr (bytes), exitcode (int) -#------------------------------------------------------------------------------ -def muterun(command): - try: - from Naked.toolshed.types import NakedObject - response_obj = NakedObject() - response = subprocess.check_output(command, stderr=subprocess.STDOUT, shell=True) - response_obj.stdout = response - response_obj.exitcode = 0 - response_obj.stderr = b"" - return response_obj - except subprocess.CalledProcessError as cpe: - response_obj.stdout = b"" - response_obj.stderr = cpe.output - if cpe.returncode: - response_obj.exitcode = cpe.returncode - else: - response_obj.exitcode = 1 - return response_obj - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the mute_run() function (Naked.toolshed.shell.py).") - raise e - - -#------------------------------------------------------------------------------ -# RUBY COMMAND EXECUTION -#------------------------------------------------------------------------------ -#------------------------------------------------------------------------------ -# [ execute_rb function ] (boolean) -# execute a ruby script file in a shell subprocess -#------------------------------------------------------------------------------ -def execute_rb(file_path, arguments=""): - try: - if len(arguments) > 0: - rb_command = 'ruby ' + file_path + " " + arguments - else: - rb_command = 'ruby ' + file_path - return execute(rb_command) # return result of execute() of the ruby file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ run_rb function ] (bytes string or False) -# execute a ruby script file in a shell subprocess, return the output -#------------------------------------------------------------------------------ -def run_rb(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - try: - if len(arguments) > 0: - rb_command = 'ruby ' + file_path + " " + arguments - else: - rb_command = 'ruby ' + file_path - return run(rb_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of the ruby file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_rb() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ muterun_rb function ] (NakedObject response object) -#------------------------------------------------------------------------------ -def muterun_rb(file_path, arguments=""): - try: - if len(arguments) > 0: - rb_command = 'ruby ' + file_path + " " + arguments - else: - rb_command = 'ruby ' + file_path - return muterun(rb_command) # return result of muterun() of the ruby file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_rb() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# NODE.JS COMMAND EXECUTION -#------------------------------------------------------------------------------ -#------------------------------------------------------------------------------ -# [ execute_js function ] (boolean) -# execute a node.js script file in a shell subprocess -# stdout stream to terminal -# returns True for success (=0) exit status code -# returns False for unsuccessful (!=0) exit status code -#------------------------------------------------------------------------------ -def execute_js(file_path, arguments=""): - try: - if len(arguments) > 0: - js_command = 'node ' + file_path + " " + arguments - else: - js_command = 'node ' + file_path - return execute(js_command) # return result of execute() of node.js file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - raise e -#------------------------------------------------------------------------------ -# [ run_js function ] (byte string or False) -# execute a node.js script file in a shell subprocess -# print the standard output to the standard output stream by default -# set suppress_output to True to suppress stream to standard output. String is still returned to calling function -# set suppress_exit_status_call to True to suppress raising sys.exit on failures with shell subprocess exit status code (if available) or 1 if not available -# returns the standard output byte string from the subprocess executable on success -# returns False if the subprocess exits with a non-zero exit code -#------------------------------------------------------------------------------ -def run_js(file_path, arguments="", suppress_stdout=False, suppress_stderr=False, suppress_exit_status_call=True): - try: - if len(arguments) > 0: - js_command = 'node ' + file_path + " " + arguments - else: - js_command = 'node ' + file_path - return run(js_command, suppress_stdout, suppress_stderr, suppress_exit_status_call) # return result of run() of node.js file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the run_js() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ muterun_js function ] (NakedObject response object) -#------------------------------------------------------------------------------ -def muterun_js(file_path, arguments=""): - try: - if len(arguments) > 0: - js_command = 'node ' + file_path + " " + arguments - else: - js_command = 'node ' + file_path - return muterun(js_command) # return result of muterun() of node.js file - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to run the shell command with the muterun_js() function (Naked.toolshed.shell.py).") - raise e - -#------------------------------------------------------------------------------ -# [ Environment Class ] -# shell environment variables class -# self.env = the environment variable dictionary -# self.vars = the environment variable names list -#------------------------------------------------------------------------------ -class Environment(): - def __init__(self): - self.env = os.environ - self.vars = list(os.environ.keys()) - - #------------------------------------------------------------------------------ - # [ is_var method ] (boolean) - # return boolean for presence of a variable name in the shell environment - #------------------------------------------------------------------------------ - def is_var(self, var_name): - try: - return (var_name in self.vars) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to determine if the variable is included in the shell variable list with the is_var() method (Naked.toolshed.shell).") - raise e - - #------------------------------------------------------------------------------ - # [ get_var method ] (string) - # get the variable value for a variable in the shell environment list - # returns empty string if the variable is not included in the environment variable list - #------------------------------------------------------------------------------ - def get_var(self, var_name): - try: - if var_name in self.vars: - return self.env[var_name] - else: - return "" - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return the requested shell variable with the get_var() method (Naked.toolshed.shell).") - raise e - - #------------------------------------------------------------------------------ - # [ get_split_var_list method ] (list of strings) - # return a list of strings split by OS dependent separator from the shell variable assigment string - # if the variable name is not in the environment list, returns an empty list - #------------------------------------------------------------------------------ - def get_split_var_list(self, var_name): - try: - if var_name in self.vars: - return self.env[var_name].split(os.pathsep) - else: - return [] - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return environment variable list with the get_split_var_list() method (Naked.toolshed.shell).") - raise e - - -if __name__ == '__main__': - pass - # e = Environment() - # pathlist = e.get_split_var_list("PATH") - # for item in pathlist: - # print(item) diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/state.py b/venv/lib/python3.6/site-packages/Naked/toolshed/state.py deleted file mode 100644 index 76c7fb8..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/state.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -from Naked.settings import debug as DEBUG_FLAG -from Naked.toolshed.system import cwd -import Naked.toolshed.python as py -import sys -import os -import datetime - -class StateObject: - def __init__(self): - now = datetime.datetime.now() - self.py2 = py.is_py2() #truth test Python 2 interpreter - self.py3 = py.is_py3() #truth test Python 3 interpreter - self.py_major = py.py_major_version() #Python major version - self.py_minor = py.py_minor_version() #Python minor version - self.py_patch = py.py_patch_version() #Python patch version - self.os = sys.platform #user operating system - self.cwd = cwd() #current (present) working directory - self.parent_dir = os.pardir - self.default_path = os.defpath - self.user_path = os.path.expanduser("~") - self.string_encoding = sys.getdefaultencoding() - self.file_encoding = sys.getfilesystemencoding() - self.hour = now.hour - self.min = now.minute - self.year = now.year - self.day = now.day - self.month = now.month - self.second = now.second - -if __name__ == '__main__': - pass diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/system.py b/venv/lib/python3.6/site-packages/Naked/toolshed/system.py deleted file mode 100644 index 610a843..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/system.py +++ /dev/null @@ -1,553 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -import os -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# -# FILE & DIRECTORY PATHS -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ filename function ] (string) -# returns file name from a file path (including the file extension) -# Tests: test_SYSTEM.py :: test_sys_filename -#------------------------------------------------------------------------------ -def filename(filepath): - try: - return os.path.basename(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return base filename from filename() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ file_extension function ] (string) -# returns file extension from a filepath -# Tests: test_SYSTEM.py :: test_sys_file_extension -#------------------------------------------------------------------------------ -def file_extension(filepath): - try: - return os.path.splitext(filepath)[1] - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return file extension with file_extension() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ directory function ] (string) -# returns directory path to the filepath -# Tests: test_SYSTEM.py :: test_sys_dir_path -#------------------------------------------------------------------------------ -def directory(filepath): - try: - return os.path.dirname(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return directory path to file with directory() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ make_path function ] (string) -# returns OS independent file path from tuple of path components -# Tests: test_SYSTEM.py :: test_sys_make_filepath -#------------------------------------------------------------------------------ -def make_path(*path_list): - try: - return os.path.join(*path_list) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to make OS independent path with the make_path() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ currentdir_to_basefile decorator function ] (returns decorated original function) -# concatenates the absolute working directory path to the basename of file in the first parameter of the undecorated function -# Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_to_basefile -#------------------------------------------------------------------------------ -def currentdir_to_basefile(func): - try: - from functools import wraps - - @wraps(func) - def wrapper(file_name, *args, **kwargs): - current_directory = os.getcwd() #get current working directory path - full_path = os.path.join(current_directory, file_name) # join cwd path to the filename for full path - return func(full_path, *args, **kwargs) #return the original function with the full path to file as first argument - return wrapper - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with the currentdir_to_basefile() decorator function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ currentdir_firstparam decorator function ] (returns decorated original function) -# adds the current working directory as the first function parameter of the decorated function -# Tests: test_SYSTEM.py :: test_sys_add_currentdir_path_first_arg -#------------------------------------------------------------------------------ -def currentdir_firstparam(func): - try: - from functools import wraps - - @wraps(func) - def wrapper(dir="", *args, **kwargs): - current_directory = os.getcwd() - return func(current_directory, *args, **kwargs) - return wrapper - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with the currentdir_firstargument() decorator function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ currentdir_lastargument decorator function ] (returns decorated original function) -# adds the current working directory as the last function parameter of the decorated function -# Note: you cannot use other named arguments in the original function with this decorator -# Note: the current directory argument in the last position must be named current_dir -# Tests: test_SYSTEM.py :: test_sys_add_currentdir_last_arg -#------------------------------------------------------------------------------ -def currentdir_lastparam(func): - try: - from functools import wraps - - @wraps(func) - def wrapper(*args, **kwargs): - the_cwd = os.getcwd() - return func(*args, current_dir=the_cwd) - return wrapper - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with the currentdir_lastargument() decorator function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ fullpath function ] (string) -# returns the absolute path to a file that is in the current working directory -# file_name = the basename of the file in the current working directory -# Example usage where test.txt is in working directory: -# filepath = fullpath("test.txt") -# Tests: test_SYSTEM.py :: test_sys_full_path_to_file -#------------------------------------------------------------------------------ -@currentdir_to_basefile # current directory decorator - adds the directory path up to the filename to the basefile name argument to original function -def fullpath(file_name): - try: - return file_name - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return absolute path to the file with the fullpath() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ cwd function ] (string) -# returns the current working directory path -# does not need to be called with an argument, the decorator assigns it -# Example usage: -# current_dir = cwd() -# Tests: test_SYSTEM.py :: test_sys_cwd_path -#------------------------------------------------------------------------------ -@currentdir_firstparam -def cwd(dir=""): - try: - return dir - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return the current working directory with the cwd() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# DIRECTORY WRITES -# -#------------------------------------------------------------------------------ - -## TODO: add tests -#------------------------------------------------------------------------------ -# [ make_dirs function ] (--none--) -# make a new directory path (recursive if multiple levels of depth) if it -# DOES NOT already exist -#------------------------------------------------------------------------------ -def make_dirs(dirpath): - try: - import os - import errno - os.makedirs(dirpath) - return True - except OSError as ose: - if ose.errno != errno.EEXIST: # directory already exists - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: Could not write the directory path passed as an argument to the make_dirs() function (Naked.toolshed.system).") - raise ose - else: - return False - except Exception as e: - raise e - -#------------------------------------------------------------------------------ -# -# FILE & DIRECTORY TESTING -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ file_exists function ] (boolean) -# return boolean for existence of file in specified path -# Tests: test_SYSTEM.py :: test_file_exists -#------------------------------------------------------------------------------ -def file_exists(filepath): - try: - if os.path.exists(filepath) and os.path.isfile(filepath): # test that exists and is a file - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for the presence of the file with the file_exists() method (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ is_file function ] (boolean) -# returns boolean for determination of whether filepath is a file -# Tests: test_SYSTEM.py :: test_sys_is_file, test_sys_is_file_missing_file, -# test_sys_is_file_when_dir -#------------------------------------------------------------------------------ -def is_file(filepath): - try: - return os.path.isfile(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for file with the is_file() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ dir_exists function ] (boolean) -# return boolean for existence of directory in specified path -# Tests: test_SYSTEM.py :: test_dir_exists, test_dir_exists_missing_dir -#------------------------------------------------------------------------------ -def dir_exists(dirpath): - try: - if os.path.exists(dirpath) and os.path.isdir(dirpath): # test that exists and is a directory - return True - else: - return False - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for directory with the dir_exists() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ is_dir function ] (boolean) -# returns boolean for determination of whether dirpath is a directory -# Tests: test_SYSTEM.py :: test_sys_dir_is_dir, test_sys_dir_is_dir_when_file, -# test_sys_dir_is_dir_when_missing -#------------------------------------------------------------------------------ -def is_dir(dirpath): - try: - return os.path.isdir(dirpath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: error with test for directory with the is_dir() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# FILE METADATA -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ filesize function ] (int) -# return file size in bytes -# Tests: test_SYSTEM.py :: test_sys_meta_file_size -#------------------------------------------------------------------------------ -def file_size(filepath): - try: - return os.path.getsize(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return file size with the file_size() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ file_mod_time function ] (string) -# return the last file modification date/time -# Tests: test_SYSTEM.py :: test_sys_meta_file_mod -#------------------------------------------------------------------------------ -def file_mod_time(filepath): - try: - import time - return time.ctime(os.path.getmtime(filepath)) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return file modification data with the file_mod_time() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# FILE LISTINGS -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ list_all_files function ] (list) -# returns a list of all files in developer specified directory -# Tests: test_SYSTEM.py :: test_sys_list_all_files, test_sys_list_all_files_emptydir -#------------------------------------------------------------------------------ -def list_all_files(dir): - try: - filenames = [name for name in os.listdir(dir) if os.path.isfile(os.path.join(dir, name))] - return filenames - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to generate directory file list with the list_all_files() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ list_filter_files function ] (list) -# returns a list of files filtered by developer defined file extension in developer defined directory -# Usage example: -# filenames = list_filter_files("py", "tests") -# Tests: test_SYSTEM.py :: test_sys_list_filter_files, test_sys_list_filter_files_nomatch -#------------------------------------------------------------------------------ -def list_filter_files(extension_filter, dir): - try: - if not extension_filter.startswith("."): - extension_filter = "." + extension_filter - filenames = [name for name in os.listdir(dir) if name.endswith(extension_filter)] - return filenames - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of filtered files with the list_filter_files() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ list_all_files_cwd function ] (list) -# returns a list of all files in the current working directory -# Note: does not require argument, the decorator assigns the cwd -# Usage example: -# file_list = list_all_files_cwd() -# Tests: test_SYSTEM.py :: test_sys_list_all_files_cwd -#------------------------------------------------------------------------------ -@currentdir_firstparam -def list_all_files_cwd(dir=""): - try: - return list_all_files(dir) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of all files in current working directory with the list_all_files_cwd() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ list_filter_files_cwd function ] (list) -# returns a list of all files in the current working directory filtered by developer specified file extension -# Note: do not specify the second argument, decorator assigns it -# Usage example: -# file_list = list_filter_files_cwd(".py") -# Tests: test_SYSTEM.py :: test_sys_filter_files_cwd, test_sys_filter_files_cwd_nomatch -#------------------------------------------------------------------------------ -@currentdir_lastparam -def list_filter_files_cwd(extension_filter, current_dir=""): - try: - return list_filter_files(extension_filter, current_dir) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of filtered files in current working directory with the list_filter_files_cwd() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ list_match_files function ] (list) -# returns a list of all files that match the developer specified wildcard match pattern -# can optionally specify return of full path to the files (rather than relative path from cwd) by setting full_path to True -# Usage examples: -# file_list = list_match_files("*.py") -# file_list_fullpath = list_match_files("*.py", True) -# Tests: test_SYSTEM.py :: test_sys_match_files, test_sys_match_files_fullpath -#------------------------------------------------------------------------------ -def list_match_files(match_pattern, full_path = False): - try: - from glob import glob - filenames = glob(match_pattern) - if full_path: - filenames_fullpath = [] - cwd = os.getcwd() - for name in filenames: - name = os.path.join(cwd, name) #make the full path to the file - filenames_fullpath.append(name) #add to the new list - return filenames_fullpath #then return that list - else: - return filenames - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return list of matched files with the list_match_files() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# SYMBOLIC LINK TESTING -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ is_link function ] (boolean) -# return boolean indicating whether the path is a symbolic link -#------------------------------------------------------------------------------ -def is_link(filepath): - try: - return os.path.islink(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to determine whether path is a symbolic link with the is_link() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ real_path function ] (string) -# return the real file path pointed to by a symbolic link -#------------------------------------------------------------------------------ -def real_path(filepath): - try: - return os.path.realpath(filepath) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to return real path for symbolic link with the real_path() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# DATA STREAMS -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ stdout function ] -# print to std output stream -#------------------------------------------------------------------------------ -def stdout(text): - try: - print(text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stdout_xnl function ] -# print to std output stream without a newline -#------------------------------------------------------------------------------ -def stdout_xnl(text): - try: - sys.stdout.write(text) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_xnl() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stdout_iter function ] -# print items in an iterable to the standard output stream with newlines after each string -#------------------------------------------------------------------------------ -def stdout_iter(iter): - try: - for x in iter: - stdout(x) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - raise e - - -#------------------------------------------------------------------------------ -# [ stdout_iter_xnl function ] -# print items in an iterable to the standard output stream without newlines after each string -#------------------------------------------------------------------------------ -def stdout_iter_xnl(iter): - try: - for x in iter: - stdout_xnl(x) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard output stream with the stdout_iter() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stderr function ] -# print to std error stream -# optionally (i.e. if exit = nonzero integer) permits exit from application with developer defined exit code -#------------------------------------------------------------------------------ -def stderr(text, exit=0): - try: - sys.stderr.write(text + "\n") - if exit: - raise SystemExit(exit) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# [ stderr_xnl function ] -# print to the standard error stream without a newline character after the `text` string -#------------------------------------------------------------------------------ -def stderr_xnl(text, exit=0): - try: - sys.stderr.write(text) - if exit: - raise SystemExit(exit) - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to print to the standard error stream with the stderr() function (Naked.toolshed.system).") - raise e - -#------------------------------------------------------------------------------ -# -# APPLICATION CONTROL -# -#------------------------------------------------------------------------------ - -#------------------------------------------------------------------------------ -# [ exit_with_status function ] -# application exit with developer specified exit status code (default = 0) -# use an exit status integer argument -# Tests: test_SYSTEM.py :: test_sys_exit_with_code -#------------------------------------------------------------------------------ -def exit_with_status(exit=0): - raise SystemExit(exit) - -#------------------------------------------------------------------------------ -# [ exit_fail function ] -# application exit with status code 1 -# Tests: test_SYSTEM.py :: test_sys_exit_failure -#------------------------------------------------------------------------------ -def exit_fail(): - raise SystemExit(1) - -#------------------------------------------------------------------------------ -# [ exit_success function] -# application exit with status code 0 -# Tests: test_SYSTEM.py :: test_sys_exit_success -#------------------------------------------------------------------------------ -def exit_success(): - raise SystemExit(0) - - - -if __name__ == '__main__': - pass - # #------------------------------------------------------------------------------ - # # Standard Output Tests - # #------------------------------------------------------------------------------ - # stdout("This is a test") - # for x in range(10): - # stdout_xnl(str(x) + " ") - # list_ten = ['10% ', '20% ', '30% ', '40% ', '50% ', '60% ', '70% ', '80% ', '90% ', '100%'] - # stdout_iter(list_ten) - # #------------------------------------------------------------------------------ - # # Standard Error Tests - # #------------------------------------------------------------------------------ - # stderr("This is a test") - # stderr("This is a test", 1) #exit with status code 1 diff --git a/venv/lib/python3.6/site-packages/Naked/toolshed/types.py b/venv/lib/python3.6/site-packages/Naked/toolshed/types.py deleted file mode 100644 index 36ac481..0000000 --- a/venv/lib/python3.6/site-packages/Naked/toolshed/types.py +++ /dev/null @@ -1,992 +0,0 @@ -#!/usr/bin/env python -# encoding: utf-8 - -import sys -from Naked.settings import debug as DEBUG_FLAG - -#------------------------------------------------------------------------------ -# [[ NakedObject class ]] -# A generic Python object -# Assigns object attributes by key name in the dictionary argument to the constructor -# The methods are inherited by other mutable Naked object extension types -# Attribute accessors: hasattr, getattr, setattr, delattr -#------------------------------------------------------------------------------ -class NakedObject(object): - # initialize with an attributes dictionary {attribute_name: attribute_value} - def __init__(self, attributes={}, naked_type='NakedObject'): - if len(attributes) > 0: - for key in attributes: - setattr(self, key, attributes[key]) - setattr(self, '_naked_type_', naked_type) # maintain an attribute to keep track of the extension type - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the NakedObject instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ _equal_type method ] (boolean) - # returns boolean for type of instance == type of test parameter instance - #------------------------------------------------------------------------------ - def _equal_type(self, other_obj): - return type(self) == type(other_obj) - - #------------------------------------------------------------------------------ - # [ _equal_attributes metod ] (method) - # returns boolean for instance.__dict__ == test parameter .__dict__ (attribute comparison) - #------------------------------------------------------------------------------ - def _equal_attributes(self, other_obj): - return self.__dict__ == other_obj.__dict__ - - #------------------------------------------------------------------------------ - # == overload - #------------------------------------------------------------------------------ - def __eq__(self, other_obj): - return self.equals(other_obj) - - #------------------------------------------------------------------------------ - # != overload - #------------------------------------------------------------------------------ - def __ne__(self, other_obj): - result = self.equals(other_obj) - if result: - return False # reverse result of the equals method - else: - return True - - #------------------------------------------------------------------------------ - # [ equals method ] (boolean) - # equality testing based on type and attributes - # **NEED TO OVERRIDE IN CLASSES THAT INHERIT - #------------------------------------------------------------------------------ - def equals(self, other_obj): - return self._equal_type(other_obj) and self._equal_attributes(other_obj) - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - -#------------------------------------------------------------------------------ -# [[ XDict class ]] -# An inherited extension to the dictionary type -#------------------------------------------------------------------------------ -class XDict(dict, NakedObject): - def __init__(self, dict_obj, attributes={}, naked_type='XDict'): - dict.__init__(self, dict_obj) - NakedObject.__init__(self, attributes, naked_type) - - #------------------------------------------------------------------------------ - # XDict Operator Overloads - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # + overload - # overwrites existing keys with key:value pairs from new dictionaries if they are the same keys - # returns the updated XDict object - #------------------------------------------------------------------------------ - def __add__(self, other_dict): - try: - self.update(other_dict) - if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # +- overload - # overwrites existing keys with another_dict (right sided argument) keys if they are the same keys - # returns the updated XDict object - #------------------------------------------------------------------------------ - def __iadd__(self, other_dict): - try: - self.update(other_dict) - if hasattr(other_dict, '_naked_type_') and (getattr(other_dict, '_naked_type_') == 'XDict'): - attr_dict = other_dict._getAttributeDict() # get the attributes from the parameter XDict and add to new XDict - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XDict with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # == overload - #------------------------------------------------------------------------------ - def __eq__(self, other_obj): - return self.equals(other_obj) - - #------------------------------------------------------------------------------ - # != overload - #------------------------------------------------------------------------------ - def __ne__(self, other_obj): - result = self.equals(other_obj) - if result: - return False # reverse result of the equals method - else: - return True - - #------------------------------------------------------------------------------ - # [ equals method ] (boolean) - # tests for equality of the XDict (type, attributes, dictionary equality) - #------------------------------------------------------------------------------ - def equals(self, other_obj): - if self._equal_type(other_obj) and self._equal_attributes(other_obj): - if dict(self) == dict(other_obj): - return True - else: - return False - else: - return False - - #------------------------------------------------------------------------------ - # XDict Value Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ conditional_map_to_vals method ] (XDict) - # returns the original XDict with values that meet True condition in `conditional_function` - # modified as per the `mapped_function` with single value argument call - # Test: test_xdict_conditional_map - #------------------------------------------------------------------------------ - def conditional_map_to_vals(self, conditional_function, mapped_function): - for key, value in self.xitems(): - if conditional_function(key): - self[key] = mapped_function(value) - return self - - #------------------------------------------------------------------------------ - # [ map_to_vals method ] (XDict) - # returns the original XDict with all values modified as per the `mapped_function` - # Test: test_xdict_map_to_vals - #------------------------------------------------------------------------------ - def map_to_vals(self, mapped_function): - # return XDict( zip(self, map(mapped_function, self.values())), self._getAttributeDict() ) - slower in Py2 - for key, value in self.xitems(): - self[key] = mapped_function(value) - return self - - #------------------------------------------------------------------------------ - # [ val_xlist method ] (XList) - # return an XList of the values in the XDict - # Test: test_xdict_val_xlist - #------------------------------------------------------------------------------ - def val_xlist(self): - return XList(self.values(), self._getAttributeDict()) - - #------------------------------------------------------------------------------ - # [ max_val method ] (tuple of maximum value and associated key) - # Test: test_xdict_max_val, test_xdict_max_val_strings (strings are alphabetic if not numerals) - #------------------------------------------------------------------------------ - def max_val(self): - return max(zip(self.values(), self.keys())) - - #------------------------------------------------------------------------------ - # [ min_val method ] (tuple of minimum value and associated key) - #------------------------------------------------------------------------------ - def min_val(self): - return min(zip(self.values(), self.keys())) - - #------------------------------------------------------------------------------ - # [ sum_vals method ] (numeric return type dependent upon original value type) - # returns sum of all values in the dictionary - #------------------------------------------------------------------------------ - def sum_vals(self): - return sum(self.values()) - - #------------------------------------------------------------------------------ - # [ val_count method ] (integer) - # returns an integer value for the total count of `value_name` in the dictionary values - # Case sensitive test if comparing strings - # Tests: test_xdict_val_count_string, test_xdict_val_count_integer - #------------------------------------------------------------------------------ - def val_count(self, value_name): - count = 0 - for test_value in self.values(): - if value_name == test_value: - count += 1 - return count - - #------------------------------------------------------------------------------ - # [ value_count_ci method ] (integer) - # returns an integer value for the total count of case insensitive `value_name` - # strings/char in the dictionary values. Can include non-string types (ignores them) - # Test: test_xdict_val_count_ci - #------------------------------------------------------------------------------ - def val_count_ci(self, value_name): - count = 0 - for test_value in self.values(): - try: - if value_name.lower() in test_value.lower(): - count += 1 - except AttributeError: # the test_value was not a string, catch exception and continue count attempt - continue - return count - - - #------------------------------------------------------------------------------ - # XDict Key Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ difference method ] (difference set of keys) - # definition: keys that are included in self, but not in `another_dict` - # Tests: test_xdict_key_difference, test_xdict_key_difference_when_none_present - #------------------------------------------------------------------------------ - def difference(self, another_dict): - return set(self.keys()) - set(another_dict.keys()) - - #------------------------------------------------------------------------------ - # [ intersection method ] (intersection set of keys) - # definition: keys that are included in both self and `another_dict` - # Tests: test_xdict_key_intersection, test_xdict_key_intersection_when_none_present - #------------------------------------------------------------------------------ - def intersection(self, another_dict): - return set(self.keys()) & set(another_dict.keys()) - - #------------------------------------------------------------------------------ - # [ key_xlist method ] (XList) - # returns an XList of the keys in the XDict - # Test: test_xdict_key_xlist - #------------------------------------------------------------------------------ - def key_xlist(self): - return XList(self.keys(), self._getAttributeDict()) - - #------------------------------------------------------------------------------ - # [ random method ] (dictionary) - # return new Python dictionary with single, random key:value pair - # Test: test_xdict_key_random - #------------------------------------------------------------------------------ - def random(self): - import random - from Naked.toolshed.python import py_major_version - random_key_list = random.sample(self.keys(), 1) - the_key = random_key_list[0] - return {the_key: self[the_key]} - - #------------------------------------------------------------------------------ - # [ random_sample method ] (dictionary) - # return new Python dictionary with `number_of_items` random key:value pairs - # Test: test_xdict_key_random_sample - #------------------------------------------------------------------------------ - def random_sample(self, number_of_items): - import random - random_key_list = random.sample(self.keys(), number_of_items) - new_dict = {} - for item in random_key_list: - new_dict[item] = self[item] - return new_dict - - #------------------------------------------------------------------------------ - # [ xitems method ] (tuple) - # Generator method that returns tuples of every key, value in dictionary - # uses appropriate method from Python 2 and 3 interpreters - # Test: test_xdict_xitems - #------------------------------------------------------------------------------ - def xitems(self): - from Naked.toolshed.python import py_major_version - if py_major_version() > 2: - return self.items() - else: - return self.iteritems() - -#------------------------------------------------------------------------------ -# [[ XList class ]] -# An inherited extension to the list object that permits attachment of attributes -#------------------------------------------------------------------------------ -class XList(list, NakedObject): - def __init__(self, list_obj, attributes={}, naked_type='XList'): - list.__init__(self, list_obj) - NakedObject.__init__(self, attributes, naked_type) - - #------------------------------------------------------------------------------ - # XList Operator Overloads - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # + operator overload - # extends XList with one or more other lists (`*other_lists`) - #------------------------------------------------------------------------------ - def __add__(self, *other_lists): - try: - for the_list in other_lists: - # add attributes if it is an XList - if hasattr(the_list, '_naked_type_') and (getattr(the_list, '_naked_type_') == 'XList'): - attr_dict = the_list._getAttributeDict() # get XList attribute dictionary - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - # extend the XList items - self.extend(the_list) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # += overload - # extends XList with one other list (`another_list`) - #------------------------------------------------------------------------------ - def __iadd__(self, another_list): - try: - #add attributes if it is an XList - if hasattr(another_list, '_naked_type_') and (getattr(another_list, '_naked_type_') == 'XList'): - attr_dict = another_list._getAttributeDict() # get XList attribute dictionary - if len(attr_dict) > 0: - for key in attr_dict: - setattr(self, key, attr_dict[key]) - # extend the XList items - self.extend(another_list) - return self - except Exception as e: - if DEBUG_FLAG: - sys.stderr.write("Naked Framework Error: unable to combine XList with parameter provided (Naked.toolshed.types.py)") - raise e - - #------------------------------------------------------------------------------ - # == overload - #------------------------------------------------------------------------------ - def __eq__(self, other_obj): - return self.equals(other_obj) - - #------------------------------------------------------------------------------ - # != overload - #------------------------------------------------------------------------------ - def __ne__(self, other_obj): - result = self.equals(other_obj) - if result: - return False # reverse result of the equals method - else: - return True - - #------------------------------------------------------------------------------ - # [ equals method ] (boolean) - # tests for equality of the XList (type, attributes, list equality) - #------------------------------------------------------------------------------ - def equals(self, other_obj): - if self._equal_type(other_obj) and self._equal_attributes(other_obj): - if list(self) == list(other_obj): - return True - else: - return False - else: - return False - - #------------------------------------------------------------------------------ - # XList Methods - #------------------------------------------------------------------------------ - - #------------------------------------------------------------------------------ - # XList String Methods - #------------------------------------------------------------------------------ - # [ join method ] (string) - # Concatenate strings in the list and return - # Default separator between string list values is an empty string - # Pass separator character(s) as an argument to the method - #------------------------------------------------------------------------------ - def join(self, separator=""): - return separator.join(self) - - #------------------------------------------------------------------------------ - # [ postfix method ] (list of strings) - # Append a string to each list item string - #------------------------------------------------------------------------------ - def postfix(self, after): - return [ "".join([x, after]) for x in self ] - - #------------------------------------------------------------------------------ - # [ prefix method ] (list of strings) - # Prepend a string to each list item string - #------------------------------------------------------------------------------ - def prefix(self, before): - return [ "".join([before, x]) for x in self ] - - #------------------------------------------------------------------------------ - # [ surround method ] (list of strings) - # Surround each list item string with a before and after string argument passed to the method - #------------------------------------------------------------------------------ - def surround(self, before, after=""): - if after == "": - after = before - return [ "".join([before, x, after]) for x in self ] - - #------------------------------------------------------------------------------ - # XList Numeric Methods - #------------------------------------------------------------------------------ - # [ max method ] (list dependent type, single value) - # return maximum value from the list items - #------------------------------------------------------------------------------ - def max(self): - return max(self) - - #------------------------------------------------------------------------------ - # [ min method ] (list dependent type, single value) - # return minimum value from the list items - #------------------------------------------------------------------------------ - def min(self): - return min(self) - - #------------------------------------------------------------------------------ - # [ sum method ] (list dependent type, single value) - # return the sum of all list items - #------------------------------------------------------------------------------ - def sum(self): - return sum(self) - - #------------------------------------------------------------------------------ - # XList Data Management Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ count_duplicates method ] (integer) - # returns an integer count of number of duplicate values - #------------------------------------------------------------------------------ - def count_duplicates(self): - return len(self) - len(set(self)) - - #------------------------------------------------------------------------------ - # [ remove_duplicates ] (XList) - # returns a new XList with duplicates removed - #------------------------------------------------------------------------------ - def remove_duplicates(self): - return XList( set(self), self._getAttributeDict() ) - - #------------------------------------------------------------------------------ - # [ difference method ] (set) - # returns a set containing items in XList that are not contained in `another_list` - #------------------------------------------------------------------------------ - def difference(self, another_list): - return set(self) - set(another_list) - - #------------------------------------------------------------------------------ - # [ intersection method ] (set) - # returns a set containing items that are in both XList and `another_list` - #------------------------------------------------------------------------------ - def intersection(self, another_list): - return set(self) & set(another_list) - - #------------------------------------------------------------------------------ - # XList Function Mapping Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ map_to_items method ] (XList) - # returns original XList with modification of each item based upon `mapped_function` - #------------------------------------------------------------------------------ - def map_to_items(self, mapped_function): - # return XList( map(mapped_function, self), self._getAttributeDict() ) - slower - for index, item in enumerate(self): - self[index] = mapped_function(item) - return self - - #------------------------------------------------------------------------------ - # [ conditional_map_to_items method ] (XList) - # returns original XList with modification of items that meet True condition in - # `conditional_function` with change performed as defined in `mapped_function` - #------------------------------------------------------------------------------ - def conditional_map_to_items(self, conditional_function, mapped_function): - for index, item in enumerate(self): - if conditional_function(item): - self[index] = mapped_function(item) - return self - - #------------------------------------------------------------------------------ - # XList Descriptive Stats Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ count_ci method ] (integer) - # returns an integer count of the number of case-insensitive items that match `test_string` - #------------------------------------------------------------------------------ - def count_ci(self, test_string): - count = 0 - for item in self: - try: - if test_string.lower() in item.lower(): - count += 1 - except AttributeError: # the test_value was not a string, catch exception and continue count attempt - continue - return count - - #------------------------------------------------------------------------------ - # [ random method ] (list) - # returns a single item list with a random element from the original XList - #------------------------------------------------------------------------------ - def random(self): - import random - return random.choice(self) - - #------------------------------------------------------------------------------ - # [ random_sample method ] (list) - # returns a list with one or more random items from the original XList - # number of items determined by the `number_of_items` argument - #------------------------------------------------------------------------------ - def random_sample(self, number_of_items): - import random - return random.sample(self, number_of_items) - - #------------------------------------------------------------------------------ - # [ shuffle method ] (XList) - # randomly shuffle the contents of the list - #------------------------------------------------------------------------------ - def shuffle(self): - import random - random.shuffle(self) - return self - - #------------------------------------------------------------------------------ - # XList Match Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ wildcard_match method ] (list) - # returns a list of items that match the `wildcard` argument - #------------------------------------------------------------------------------ - def wildcard_match(self, wildcard): - if hasattr(self, 'nkd_fnmatchcase'): - fnmatchcase = self.nkd_fnmatchcase - else: - from fnmatch import fnmatchcase - self.nkd_fnmatchcase = fnmatchcase - return [ x for x in self if fnmatchcase(x, wildcard) ] - - #------------------------------------------------------------------------------ - # [ multi_wildcard_match method ] (list) - # returns a list of items that match one or more | separated wildcards passed as string - #------------------------------------------------------------------------------ - def multi_wildcard_match(self, wildcards): - if hasattr(self, 'nkd_fnmatchcase'): - fnmatchcase = self.nkd_fnmatchcase - else: - from fnmatch import fnmatchcase - self.nkd_fnmatchcase = fnmatchcase - wc_list = wildcards.split('|') - return_list = [] - for wc in wc_list: - temp_list = [ x for x in self if fnmatchcase(x, wc) ] - for result in temp_list: - return_list.append(result) - return return_list - - #------------------------------------------------------------------------------ - # XList Cast Methods - #------------------------------------------------------------------------------ - #------------------------------------------------------------------------------ - # [ xset method ] (XSet) - # return an XSet with unique XList item values and XList attributes - #------------------------------------------------------------------------------ - def xset(self): - attr_dict = self._getAttributeDict() - return XSet(set(self), attr_dict) - - #------------------------------------------------------------------------------ - # [ xfset method ] (XFSet) - # return an XFSet with unique XList item values and XList attributes - #------------------------------------------------------------------------------ - def xfset(self): - attr_dict = self._getAttributeDict() - return XFSet(set(self), attr_dict) - - #------------------------------------------------------------------------------ - # [ xtuple method ] (XTuple) - # returns an XTuple with XList item values and XList attributes - #------------------------------------------------------------------------------ - def xtuple(self): - attr_dict = self._getAttributeDict() - return XTuple(tuple(self), attr_dict) - -#------------------------------------------------------------------------------ -# [[ XMaxHeap class ]] -# max heap queue -#------------------------------------------------------------------------------ -from heapq import heappush, heappop -class XMaxHeap(NakedObject): - def __init__(self, attributes={}, naked_type='XMaxHeap'): - NakedObject.__init__(self, attributes, naked_type) - self._queue = [] - self._index = 0 - - # length of the queue - def __len__(self): - return len(self._queue) - - # O(log n) complexity - def push(self, the_object, priority): - heappush(self._queue, (-priority, self._index, the_object)) - self._index += 1 - - # O(log n) complexity - def pop(self): - if self._queue: - return heappop(self._queue)[-1] - else: - return None - - # push new object and return the highest priority object - def pushpop(self, the_object, priority): - heappush(self._queue, (-priority, self._index, the_object)) - self._index += 1 - if self._queue: - return heappop(self._queue)[-1] - else: - return None # return None if the queue is empty - - # the length of the queue - def length(self): - return len(self._queue) - -#------------------------------------------------------------------------------ -# [[ XMinHeap class ]] -# min heap queue -#------------------------------------------------------------------------------ -from heapq import heappush, heappop -class XMinHeap(NakedObject): - def __init__(self, attributes={}, naked_type='XMinHeap'): - NakedObject.__init__(self, attributes, naked_type) - self._queue = [] - self._index = 0 - - - # length of the queue - def __len__(self): - return len(self._queue) - - # O(log n) complexity - def push(self, the_object, priority): - heappush(self._queue, (priority, self._index, the_object)) - self._index += 1 - - # O(log n) complexity - def pop(self): - if self._queue: - return heappop(self._queue)[-1] - else: - return None # return None if the queue is empty - - # push new object and return the lowest priority object - def pushpop(self, the_object, priority): - heappush(self._queue, (priority, self._index, the_object)) - self._index += 1 - if self._queue: - return heappop(self._queue)[-1] - else: - return None #return None if the queue is empty - - # the length of the queue - def length(self): - return len(self._queue) - -#------------------------------------------------------------------------------ -# [[ XQueue class ]] -# -#------------------------------------------------------------------------------ -from collections import deque -class XQueue(deque, NakedObject): - def __init__(self, initial_iterable=[], attributes={}, max_length=10, naked_type='XQueue'): - deque.__init__(self, initial_iterable, max_length) - NakedObject.__init__(self, attributes, naked_type) - - -#------------------------------------------------------------------------------ -# [[ XSet class ]] -# An inherited extension to the mutable set object that permits attribute assignment -# Inherits from set and from NakedObject (see methods in NakedObject at top of this module -#------------------------------------------------------------------------------ -class XSet(set, NakedObject): - def __init__(self, set_obj, attributes={}, naked_type='XSet'): - set.__init__(self, set_obj) - NakedObject.__init__(self, attributes, naked_type) - - # += operator overload to extend the XSet with a second set - def __iadd__(self, another_set): - self.update(another_set) - return self - - def xlist(self): - attr_dict = self._getAttributeDict() - return XList(list(self), attr_dict) - - def xfset(self): - attr_dict = self._getAttributeDict() - return XFSet(self, attr_dict) - -#------------------------------------------------------------------------------ -# [[ XFSet class ]] -# An inherited extension to the immutable frozenset object that permits attribute assignment -# Immutable so there is no setter method, attributes must be set in the constructor -#------------------------------------------------------------------------------ -class XFSet(frozenset): - def __new__(cls, the_set, attributes={}, naked_type="XFSet"): - set_obj = frozenset.__new__(cls, the_set) - if len(attributes) > 0: - for key in attributes: - setattr(set_obj, key, attributes[key]) - setattr(set_obj, '_naked_type_', naked_type) # set the naked extension type as an attribute (NakedObject does this for mutable classes) - return set_obj - - def _getAttributeDict(self): - return self.__dict__ - - def xlist(self): - attr_dict = self._getAttributeDict() - return XList(list(self), attr_dict, naked_type="XList") - - def xset(self): - attr_dict = self._getAttributeDict() - return XSet(self, attr_dict, naked_type="XSet") - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - -#------------------------------------------------------------------------------ -# [[ XString class ]] -# An inherited extension to the immutable string object that permits attribute assignment -# Immutable so there is no setter method, attributes must be set in the constructor -# Python 2: byte string by default, can cast to normalized UTF-8 with XString().unicode() method -# Python 3: string (that permits unicode) by default, can normalize with XString().unicode() method -#------------------------------------------------------------------------------ -class XString(str): - def __new__(cls, string_text, attributes={}, naked_type='XString'): - str_obj = str.__new__(cls, string_text) - if len(attributes) > 0: - for key in attributes: - setattr(str_obj, key, attributes[key]) - setattr(str_obj, '_naked_type_', naked_type) - return str_obj - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the XString instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - ## TODO: see where + vs. join breakpoint becomes important - def concat(self, *strings): - str_list = [] - for x in strings: - str_list.append(x) - return "".join(str_list) - - # fastest substring search truth test - def contains(self, substring): - return substring in self - - # split the string on one or more delimiters, return list - # if up to two chars, then uses str.split(), if more chars then use re.split - def xsplit(self, split_delimiter): - length = len(split_delimiter) - if length > 2: - import re - split_delimiter = "".join([ '[', split_delimiter, ']' ]) - return re.split(split_delimiter, self) - elif length > 1: - delim2 = split_delimiter[1] - first_list = self.split(split_delimiter[0]) - result_list = [] - for item in first_list: - for subitem in item.split(delim2): - result_list.append(subitem) - return result_list - else: - return self.split(split_delimiter) - - # split the string on one or more characters and return items in set - def xsplit_set(self, split_delimiter): - return set(self.xsplit(split_delimiter)) - - # str begins with substring - faster than str.startswith() - def begins(self, begin_string): - return begin_string in self[0:len(begin_string)] - - # str ends with substring - faster than str.endswith() - def ends(self, end_string): - return end_string in self[-len(end_string):] - - # case sensitive wildcard match on the XString (boolean returned) - def wildcard_match(self, wildcard): - from fnmatch import fnmatchcase - return fnmatchcase(self, wildcard) - - # convert string to normalized UTF-8 in Python 2 and 3 (##TODO: convert to XUnicode with attributes?) - def unicode(self): - from sys import version_info - from unicodedata import normalize - if version_info[0] == 2: - return normalize('NFKD', self.decode('UTF-8')) - else: - return normalize('NFKD', self) - - -# this version works -class XUnicode: - def __init__(self, string_text, attributes={}, naked_type='XUnicode'): - import sys - import unicodedata - norm_text = unicodedata.normalize('NFKD', string_text) - - class XUnicode_2(unicode): - def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode2'): - str_obj = unicode.__new__(cls, the_string_text) - if len(attributes) > 0: - for key in attributes: - setattr(str_obj, key, attributes[key]) - setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode2 for Py 2 strings - return str_obj - - class XUnicode_3(str): - def __new__(cls, the_string_text, attributes={}, naked_type='XUnicode3'): - str_obj = str.__new__(cls, the_string_text) - if len(attributes) > 0: - for key in attributes: - setattr(str_obj, key, attributes[key]) - setattr(str_obj, '_naked_type_', naked_type) # set the type to XUnicode3 for Py 3 strings - return str_obj - - - if sys.version_info[0] == 2: - self.obj = XUnicode_2(norm_text, attributes) - self.norm_unicode = norm_text - self.naked_u_string = self.obj.encode('utf-8') # utf-8 encoded byte string - elif sys.version_info[0] == 3: - self.naked_u_string = XUnicode_3(norm_text, attributes).encode('utf-8') # ? - - def __str__(self): - # return self.naked_u_string - return self.obj - - def __repr__(self): - return self.naked_u_string - - def __getattr__(self, the_attribute): - return self.obj.__dict__[the_attribute] - - def __cmp__(self, other_string): - return hash(self.naked_u_string) == hash(other_string) - # TODO: add check for same attributes - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the NakedObject instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - -#------------------------------------------------------------------------------ -# [[ XTuple class ]] -# -#------------------------------------------------------------------------------ -class XTuple(tuple): - def __new__(cls, the_tuple, attributes={}, naked_type='XTuple'): - tup_obj = tuple.__new__(cls, the_tuple) - if len(attributes) > 0: - for key in attributes: - setattr(tup_obj, key, attributes[key]) - setattr(tup_obj, '_naked_type_', naked_type) - return tup_obj - - #------------------------------------------------------------------------------ - # [ _getAttributeDict method ] (dictionary) - # returns a dictionary of the NakedObject instance attributes - #------------------------------------------------------------------------------ - def _getAttributeDict(self): - return self.__dict__ - - #------------------------------------------------------------------------------ - # [ type method ] (string) - # returns the Naked type extension string that is set in the constructor for each object type - #------------------------------------------------------------------------------ - def type(self): - if hasattr(self, '_naked_type_'): - return self._naked_type_ - else: - return None - - -if __name__ == '__main__': - pass - # no = nobj({"version":"1.0.1", "test":"code"}) - # print(no) - # print(no.version) - # print(no.test) - # nl = XList([1, 2, 3, 1, 2, 5], {"version":"1.0.1", "test":"code"}) - # print(nl.count_duplicates()) - # the_list = list(range(5000)) - # nl = XList(the_list) - # nq = XPriorityQueue() - # nq.push('test', 5) - # nq.push('one', 3) - # nq.push('another', 4) - # print(nq.pop()) - # print(nq.pop()) - # print(nq.pop()) - - # nl = XList([2, 2, 2, 'another'], {'p': 'attribute'}) - # print(nl) - # print(nl.count_item(2)) - # nq = XQueue(nl, max_length=2) - # print(nq) - - # xs = XSet({'test', 'true', 'false'}, {'bonus': 'candy', 'test': 'another'}) - # xs += {'bogus', 'yep'} - # print(xs) - - # xd = XDict({'test2': 0, 'is': 1}, {'a': '1', 'b': '2'}) - # ad = {'test': 0, 'is': 2} - # ld = xd.intersection(ad) - # print(ld) - # xd = xd + ad + ld - # print(xd.map_to_vals(pr)) - # print(xd.a) - # print(xd) - # print(xd.a) - # print(xd.min_val()) - # print(xd.conditional_map_to_vals(matcher, resulter)) - - # nl = XList([ 'test.txt', 'bogus.txt', 'test.py', 'another.rb', 'est.doc', 'est.py' ]) - # print(nl.multi_wildcard_match('*.py|*.txt|*.doc')) - - # xstr = XString("Hey! Cœur It's Bengali ব য,\nand here is some more ২") - # ustr = xstr.unicode() - # print(isinstance(ustr, bytes)) - # print(xstr) - diff --git a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/PKG-INFO b/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/PKG-INFO deleted file mode 100644 index 9c20cdc..0000000 --- a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/PKG-INFO +++ /dev/null @@ -1,33 +0,0 @@ -Metadata-Version: 1.1 -Name: PyYAML -Version: 3.13 -Summary: YAML parser and emitter for Python -Home-page: http://pyyaml.org/wiki/PyYAML -Author: Kirill Simonov -Author-email: xi@resolvent.net -License: MIT -Download-URL: http://pyyaml.org/download/pyyaml/PyYAML-3.13.tar.gz -Description: YAML is a data serialization format designed for human readability - and interaction with scripting languages. PyYAML is a YAML parser - and emitter for Python. - - PyYAML features a complete YAML 1.1 parser, Unicode support, pickle - support, capable extension API, and sensible error messages. PyYAML - supports standard YAML tags and provides Python-specific tags that - allow to represent an arbitrary Python object. - - PyYAML is applicable for a broad range of tasks from complex - configuration files to object serialization and persistance. -Platform: Any -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Markup diff --git a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/SOURCES.txt b/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/SOURCES.txt deleted file mode 100644 index e1a8a21..0000000 --- a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/SOURCES.txt +++ /dev/null @@ -1,27 +0,0 @@ -README -setup.cfg -ext/_yaml.c -ext/_yaml.h -ext/_yaml.pxd -ext/_yaml.pyx -lib3/PyYAML.egg-info/PKG-INFO -lib3/PyYAML.egg-info/SOURCES.txt -lib3/PyYAML.egg-info/dependency_links.txt -lib3/PyYAML.egg-info/top_level.txt -lib3/yaml/__init__.py -lib3/yaml/composer.py -lib3/yaml/constructor.py -lib3/yaml/cyaml.py -lib3/yaml/dumper.py -lib3/yaml/emitter.py -lib3/yaml/error.py -lib3/yaml/events.py -lib3/yaml/loader.py -lib3/yaml/nodes.py -lib3/yaml/parser.py -lib3/yaml/reader.py -lib3/yaml/representer.py -lib3/yaml/resolver.py -lib3/yaml/scanner.py -lib3/yaml/serializer.py -lib3/yaml/tokens.py \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/dependency_links.txt b/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/installed-files.txt b/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/installed-files.txt deleted file mode 100644 index 810f0cb..0000000 --- a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/installed-files.txt +++ /dev/null @@ -1,38 +0,0 @@ -../yaml/__init__.py -../yaml/__pycache__/__init__.cpython-36.pyc -../yaml/__pycache__/composer.cpython-36.pyc -../yaml/__pycache__/constructor.cpython-36.pyc -../yaml/__pycache__/cyaml.cpython-36.pyc -../yaml/__pycache__/dumper.cpython-36.pyc -../yaml/__pycache__/emitter.cpython-36.pyc -../yaml/__pycache__/error.cpython-36.pyc -../yaml/__pycache__/events.cpython-36.pyc -../yaml/__pycache__/loader.cpython-36.pyc -../yaml/__pycache__/nodes.cpython-36.pyc -../yaml/__pycache__/parser.cpython-36.pyc -../yaml/__pycache__/reader.cpython-36.pyc -../yaml/__pycache__/representer.cpython-36.pyc -../yaml/__pycache__/resolver.cpython-36.pyc -../yaml/__pycache__/scanner.cpython-36.pyc -../yaml/__pycache__/serializer.cpython-36.pyc -../yaml/__pycache__/tokens.cpython-36.pyc -../yaml/composer.py -../yaml/constructor.py -../yaml/cyaml.py -../yaml/dumper.py -../yaml/emitter.py -../yaml/error.py -../yaml/events.py -../yaml/loader.py -../yaml/nodes.py -../yaml/parser.py -../yaml/reader.py -../yaml/representer.py -../yaml/resolver.py -../yaml/scanner.py -../yaml/serializer.py -../yaml/tokens.py -PKG-INFO -SOURCES.txt -dependency_links.txt -top_level.txt diff --git a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/top_level.txt b/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/top_level.txt deleted file mode 100644 index e6475e9..0000000 --- a/venv/lib/python3.6/site-packages/PyYAML-3.13-py3.6.egg-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -_yaml -yaml diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/DESCRIPTION.rst deleted file mode 100644 index 0fef614..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,124 +0,0 @@ -================================= -(Yet Another) Auto-Attribute Dict -================================= - -An ``aadict`` is a python dict sub-class that allows attribute-style -access to dict items, e.g. ``d.foo`` is equivalent to ``d['foo']``. -``aadict`` also provides a few other helpful methods, such as ``pick`` -and ``omit`` methods. Also, an ``aadict`` is more call chaining -friendly (e.g. methods such as `update` return ``self``) and is -pickle'able. - - -Project -======= - -* Homepage: https://github.com/metagriffin/aadict -* Bugs: https://github.com/metagriffin/aadict/issues - - -TL;DR -===== - -Install: - -.. code-block:: bash - - $ pip install aadict - -Use: - -.. code-block:: python - - from aadict import aadict - - # attribute access - d = aadict(foo='bar', zig=87) - assert d.foo == d['foo'] == 'bar' - - # helper methods - assert d.pick('foo') == {'foo': 'bar'} - assert d.omit('foo') == {'zig': 87} - - # method chaining - d2 = aadict(x='y').update(d).omit('zig') - assert d2.x == 'y' and d2.foo == 'bar' and d2.zig is None - - # converting a dict to an aadict recursively - d3 = aadict.d2ar(dict(foo=dict(bar='zig'))) - assert d3.foo.bar == 'zig' - - -Details -======= - -The aadict module provides the following functionality: - - -aadict ------- - -An `aadict` object is basically identical to a `dict` object, with the -exception that attributes, if not reserved for other purposes, map to -the dict's items. For example, if a dict ``d`` has an item ``'foo'``, -then a request for ``d.foo`` will return that item lookup. aadicts -also have several helper methods, for example ``aadict.pick``. To -fetch the value of an item that has the same name as one of the helper -methods you need to reference it by item lookup, -i.e. ``d['pick']``. The helper methods are: - -* **aadict.pick** instance method: - - Returns a new aadict, reduced to only include the specified - keys. Example: - - .. code-block:: python - - d = aadict(foo='bar', zig=87, zag=['a', 'b']) - assert d.pick('foo', 'zag') == {'foo': 'bar', 'zag': ['a', 'b']} - -* **aadict.omit** instance method: - - Identical to the ``aadict.pick`` method, but returns the complement, - i.e. all of those keys that are *not* specified. Example: - - .. code-block:: python - - d = aadict(foo='bar', zig=87, zag=['a', 'b']) - assert d.omit('foo', 'zag') == {'zig': 87} - -* **aadict.d2ar** class method: - - Recursively converts the supplied `dict` to an `aadict`, including - all sub-list and sub-dict types. Due to being recursive, but only - copying dict-types, this is effectively a hybrid of a shallow and - a deep clone. Example: - - .. code-block:: python - - d = aadict.d2ar(dict(foo=dict(bar='zig'))) - assert d.foo.bar == 'zig' - - Without the recursive walking, the ``.bar`` attribute syntax - would yield an AttributeError exception because d.foo would - reference a `dict` type, not an `aadict`. - -* **aadict.d2a** class method: - - Converts the supplied `dict` to an `aadict`. Example: - - .. code-block:: python - - d = aadict.d2a(dict(foo='bar')) - assert d.foo == d['foo'] == 'bar' - - Note that this is identical to just using the constructor, - but is provided as a symmetry to the ``aadict.d2ar`` class - method, e.g.: - - .. code-block:: python - - d = aadict(dict(foo='bar')) - assert d.foo == d['foo'] == 'bar' - - diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/METADATA b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/METADATA deleted file mode 100644 index e3d426f..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/METADATA +++ /dev/null @@ -1,142 +0,0 @@ -Metadata-Version: 2.0 -Name: aadict -Version: 0.2.3 -Summary: An auto-attribute dict (and a couple of other useful dict functions) -Home-page: http://github.com/metagriffin/aadict -Author: metagriffin -Author-email: mg.pypi@uberdev.org -License: GPLv3+ -Keywords: auto attribute access dict helpers pick omit -Platform: any -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Operating System :: OS Independent -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) -Requires-Dist: six (>=1.6.0) - -================================= -(Yet Another) Auto-Attribute Dict -================================= - -An ``aadict`` is a python dict sub-class that allows attribute-style -access to dict items, e.g. ``d.foo`` is equivalent to ``d['foo']``. -``aadict`` also provides a few other helpful methods, such as ``pick`` -and ``omit`` methods. Also, an ``aadict`` is more call chaining -friendly (e.g. methods such as `update` return ``self``) and is -pickle'able. - - -Project -======= - -* Homepage: https://github.com/metagriffin/aadict -* Bugs: https://github.com/metagriffin/aadict/issues - - -TL;DR -===== - -Install: - -.. code-block:: bash - - $ pip install aadict - -Use: - -.. code-block:: python - - from aadict import aadict - - # attribute access - d = aadict(foo='bar', zig=87) - assert d.foo == d['foo'] == 'bar' - - # helper methods - assert d.pick('foo') == {'foo': 'bar'} - assert d.omit('foo') == {'zig': 87} - - # method chaining - d2 = aadict(x='y').update(d).omit('zig') - assert d2.x == 'y' and d2.foo == 'bar' and d2.zig is None - - # converting a dict to an aadict recursively - d3 = aadict.d2ar(dict(foo=dict(bar='zig'))) - assert d3.foo.bar == 'zig' - - -Details -======= - -The aadict module provides the following functionality: - - -aadict ------- - -An `aadict` object is basically identical to a `dict` object, with the -exception that attributes, if not reserved for other purposes, map to -the dict's items. For example, if a dict ``d`` has an item ``'foo'``, -then a request for ``d.foo`` will return that item lookup. aadicts -also have several helper methods, for example ``aadict.pick``. To -fetch the value of an item that has the same name as one of the helper -methods you need to reference it by item lookup, -i.e. ``d['pick']``. The helper methods are: - -* **aadict.pick** instance method: - - Returns a new aadict, reduced to only include the specified - keys. Example: - - .. code-block:: python - - d = aadict(foo='bar', zig=87, zag=['a', 'b']) - assert d.pick('foo', 'zag') == {'foo': 'bar', 'zag': ['a', 'b']} - -* **aadict.omit** instance method: - - Identical to the ``aadict.pick`` method, but returns the complement, - i.e. all of those keys that are *not* specified. Example: - - .. code-block:: python - - d = aadict(foo='bar', zig=87, zag=['a', 'b']) - assert d.omit('foo', 'zag') == {'zig': 87} - -* **aadict.d2ar** class method: - - Recursively converts the supplied `dict` to an `aadict`, including - all sub-list and sub-dict types. Due to being recursive, but only - copying dict-types, this is effectively a hybrid of a shallow and - a deep clone. Example: - - .. code-block:: python - - d = aadict.d2ar(dict(foo=dict(bar='zig'))) - assert d.foo.bar == 'zig' - - Without the recursive walking, the ``.bar`` attribute syntax - would yield an AttributeError exception because d.foo would - reference a `dict` type, not an `aadict`. - -* **aadict.d2a** class method: - - Converts the supplied `dict` to an `aadict`. Example: - - .. code-block:: python - - d = aadict.d2a(dict(foo='bar')) - assert d.foo == d['foo'] == 'bar' - - Note that this is identical to just using the constructor, - but is provided as a symmetry to the ``aadict.d2ar`` class - method, e.g.: - - .. code-block:: python - - d = aadict(dict(foo='bar')) - assert d.foo == d['foo'] == 'bar' - - diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/RECORD b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/RECORD deleted file mode 100644 index d250af0..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/RECORD +++ /dev/null @@ -1,12 +0,0 @@ -aadict/__init__.py,sha256=dD-78rmAZ4OMyMtd2jqNkunjEQDNNMC_ldHy_AkJle0,3129 -aadict/test.py,sha256=7_xJR6QNFQZaBpMuj7Q6mfUovS_FzpdGmysDxSa0cZw,3569 -aadict-0.2.3.dist-info/DESCRIPTION.rst,sha256=6Rb-NmrUPqyvCakc_d1io92-T-OBlB0Zixjyvg3Y_CM,3259 -aadict-0.2.3.dist-info/METADATA,sha256=_RYanE5nIVcHKedWQDRLl-xKgMevbg4j7_s9GVxU5Xw,3921 -aadict-0.2.3.dist-info/RECORD,, -aadict-0.2.3.dist-info/WHEEL,sha256=0mO7-aKM6K9CHeURc5NDYZyLWH5lmR-r4TtPinHxz7Y,93 -aadict-0.2.3.dist-info/metadata.json,sha256=rq4N0eekcmxcbGEL-9bdfyC6ryxjTPuAcSQ1JG-SeIU,970 -aadict-0.2.3.dist-info/top_level.txt,sha256=LHW6U8wu0Ox7dl3Ydq-EyxaIKh6f5nH88kjBVNmeRpM,7 -aadict-0.2.3.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -aadict-0.2.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -aadict/__pycache__/test.cpython-36.pyc,, -aadict/__pycache__/__init__.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/WHEEL b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/WHEEL deleted file mode 100644 index 7981024..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.30.0) -Root-Is-Purelib: true -Tag: cp36-none-any - diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/metadata.json b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/metadata.json deleted file mode 100644 index 51ceede..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Programming Language :: Python", "Operating System :: OS Independent", "Natural Language :: English", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)"], "extensions": {"python.details": {"contacts": [{"email": "mg.pypi@uberdev.org", "name": "metagriffin", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/metagriffin/aadict"}}}, "extras": [], "generator": "bdist_wheel (0.30.0)", "keywords": ["auto", "attribute", "access", "dict", "helpers", "pick", "omit"], "license": "GPLv3+", "metadata_version": "2.0", "name": "aadict", "platform": "any", "run_requires": [{"requires": ["six (>=1.6.0)"]}], "summary": "An auto-attribute dict (and a couple of other useful dict functions)", "test_requires": [{"requires": ["coverage (>=3.5.3)", "nose (>=1.3.0)"]}], "version": "0.2.3"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/top_level.txt deleted file mode 100644 index a64cd9d..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -aadict diff --git a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/zip-safe b/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/aadict-0.2.3.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/aadict/__init__.py b/venv/lib/python3.6/site-packages/aadict/__init__.py deleted file mode 100644 index e197c6a..0000000 --- a/venv/lib/python3.6/site-packages/aadict/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/10/19 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import six - -#------------------------------------------------------------------------------ -class aadict(dict): - ''' - A dict subclass that allows attribute access to be synonymous with - item access, e.g. ``mydict.attribute == mydict['attribute']``. It - also provides several other useful helper methods, such as - :meth:`pick` and :meth:`omit`. - ''' - def __getattr__(self, key): - if key.startswith('__') and key.endswith('__'): - # note: allows an aadict to be pickled with protocols 0, 1, and 2 - # which treat the following specially: - # __getstate__, __setstate__, __slots__, __getnewargs__ - return dict.__getattr__(self, key) - return self.get(key, None) - def __setattr__(self, key, value): - self[key] = value - return self - def __delattr__(self, key): - if key in self: - del self[key] - return self - def __dir__(self): - return dir(aadict) + list(self.keys()) - def update(self, *args, **kw): - args = [e for e in args if e] - dict.update(self, *args, **kw) - return self - def clear(self, *args, **kw): - dict.clear(self) - return self - def pick(self, *args): - return aadict({k: v for k, v in six.iteritems(self) if k in args}) - def omit(self, *args): - return aadict({k: v for k, v in six.iteritems(self) if k not in args}) - @staticmethod - def __dict2aadict__(subject, recursive=False): - if isinstance(subject, list): - if not recursive: - return subject - return [aadict.__dict2aadict__(val, True) for val in subject] - if not isinstance(subject, dict): - return subject - ret = aadict(subject) - if not recursive: - return ret - for key, val in ret.items(): - ret[key] = aadict.__dict2aadict__(val, True) - return ret - @staticmethod - def d2ar(subject): - return aadict.__dict2aadict__(subject, True) - @staticmethod - def d2a(subject): - return aadict.__dict2aadict__(subject, False) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/aadict/test.py b/venv/lib/python3.6/site-packages/aadict/test.py deleted file mode 100644 index 513fab1..0000000 --- a/venv/lib/python3.6/site-packages/aadict/test.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/10/19 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import unittest, pickle - -from aadict import aadict - -#------------------------------------------------------------------------------ -class TestAadict(unittest.TestCase): - - #---------------------------------------------------------------------------- - def test_base(self): - d = aadict(foo='bar', zig=87) - self.assertEqual(d.foo, 'bar') - self.assertEqual(d['foo'], 'bar') - - #---------------------------------------------------------------------------- - def test_chaining_update(self): - d = aadict(foo='bar', zig=87) - d2 = aadict(x='y').update(d).omit('zig') - self.assertEqual(d2.x, 'y') - self.assertEqual(d2.foo, 'bar') - self.assertIsNone(d2.zig) - - #---------------------------------------------------------------------------- - def test_chaining_clear(self): - d = aadict(foo='bar', zig=87).clear().update(zag='zug') - self.assertEqual(d, {'zag': 'zug'}) - - #---------------------------------------------------------------------------- - def test_convert(self): - d = aadict.d2ar(dict(foo=dict(bar='zig'))) - self.assertEqual(d.foo.bar, 'zig') - d = aadict.d2a(dict(foo=dict(bar='zig'))) - with self.assertRaises(AttributeError): - zig = d.foo.bar - self.fail('AttributeError should have been raised') - - #---------------------------------------------------------------------------- - def test_pickle(self): - d = aadict(foo='bar', zig=87) - d2 = pickle.loads(pickle.dumps(d)) - self.assertTrue(isinstance(d2, aadict)) - self.assertEqual(d2, d) - self.assertEqual(d2['foo'], 'bar') - self.assertEqual(d2.foo, 'bar') - - #---------------------------------------------------------------------------- - def test_dir(self): - d1 = dict() - d2 = aadict(foo='bar', zig=87) - ignore = set(['__weakref__', '__module__', '__dict2aadict__', '__dict__']) - self.assertEqual( - set(sorted(dir(d2))) - ignore, - set(sorted(dir(d1) + [ - '__getattr__', '__setattr__', '__delattr__', '__dir__', - 'pick', 'omit', 'd2a', 'd2ar', - 'foo', 'zig', - ])) - ignore) - - #---------------------------------------------------------------------------- - def test_ctor_cloneupdate(self): - d1 = aadict(foo='bar', zig=87) - d2 = aadict(d1, zig=99, zag='zog') - self.assertEqual(d1, dict(foo='bar', zig=87)) - self.assertEqual(d2, dict(foo='bar', zig=99, zag='zog')) - - -#------------------------------------------------------------------------------ -# end of $Id$ -# $ChangeLog$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/DESCRIPTION.rst deleted file mode 100644 index 61f39e3..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,182 +0,0 @@ -================================ -Generalized Package Asset Loader -================================ - -Loads resources and symbols from a python package, whether installed -as a directory, an egg, or in source form. Also provides some other -package-related helper methods, including ``asset.version()``, -``asset.caller()``, and ``asset.chunks()``. - -TL;DR -===== - -Install: - -.. code:: bash - - $ pip install asset - -Load symbols (e.g. functions, classes, or variables) from a package by -name: - -.. code:: python - - import asset - - # load the 'mypackage.foo.myfunc' function and call it with some parameter - retval = asset.symbol('mypackage.foo.myfunc')(param='value') - -Load data files from a package: - -.. code:: python - - # load the file 'mypackage/templates/data.txt' into string - data = asset.load('mypackage:templates/data.txt').read() - - # or as a file-like stream - stream = asset.load('mypackage:templates/data.txt').stream() - data = stream.read() - -Multiple files can be operated on at once by using `globre -`_ style wildcards: - -.. code:: python - - # concatenate all 'css' files into one string: - css = asset.load('mypackage:static/style/**.css').read() - - # load all '.txt' files, XML-escaping the data and wrapping - # each file in an ... element. - import xml.etree.ElementTree as ET - data = ET.Element('nodes') - for item in asset.load('asset:**.txt'): - cur = ET.SubElement(data, 'node', name=item.name) - cur.text = item.read() - data = ET.tostring(data) - -Query the installed version of a package: - -.. code:: python - - asset.version('asset') - # ==> '0.0.5' - - asset.version('python') - # ==> '2.7' - - asset.version('no-such-package') - # ==> None - -Find out what package is calling the current function: - -.. code:: python - - # assuming the call stack is: - # in package "zig" a function "x", which calls - # in package "bar" a function "y", which calls - # in package "foo" a function "callfoo" defined as: - - def callfoo(): - - asset.caller() - # ==> 'bar' - - asset.caller(ignore='bar') - # ==> 'zig' - - asset.caller(ignore=['bar', 'zig']) - # ==> None - -Call all the plugins for a given group: - -.. code:: python - - for plugin in asset.plugins('mypackage.plugins'): - plugin.handle() - -Filter an object through all the plugins for a given group (if there -are no plugins, this will simply return `thing`): - -.. code:: python - - result = asset.plugins('mypackage.plugins').filter(thing) - -Load all registered plugins, select the ones named `foo` and invoke -them (this will fail if there is no `foo` plugin): - -.. code:: python - - result = asset.plugins('mypackage.plugins').select('foo').handle(thing) - -Chunk a file (or any file-like object) into 1 KiB chunks: - -.. code:: python - - with open('/var/binary/data', 'rb') as fp: - for chunk in asset.chunks(fp, 1024): - # ... do something with `chunk` ... - -Chunk an Asset stream (here using the `.chunks` alias method): - -.. code:: python - - for chunk in asset.load('mypackage:data/**.bin').chunks(): - # ... using the default chunk size (usually 8 KiB) ... - - -Testing -======= - -In order to run the unit tests correctly, the `pxml` package needs to -be installed as a zipped package (i.e. an "egg") and the `globre` -package needs to be installed unzipped. To accomplish that, do: - -.. code:: bash - - $ easy_install --zip-ok pxml - $ easy_install --always-unzip globre - -The reason is that the unit tests confirm that `asset` can load assets -from both zipped and unzipped packages, and can also identify in which -mode it is operating. - - -Details -======= - -TODO: add detailed docs... - -* ``Asset.filename``: - - If the asset represents a file on the filesystem, is the absolute - path to the specified file. Otherwise is ``None``. - -* ``AssetGroupStream.readline()``: - - Returns the next line from the aggregate asset group stream, as if - the assets had been concatenate into a single asset. - - **IMPORTANT**: if an asset ends with content that is not terminated - by an EOL token, it is returned as-is, i.e. it does NOT append the - first line from the next asset. - -Note: because ``asset.load()`` does lazy-loading, it only throws a -`NoSuchAsset` exception when you actually attempt to use the -AssetGroup! If you need an immediate error, use the `peek()` method. -Note that it returns itself, so you can do something like: - -.. code:: python - - import asset - - def my_function_that_returns_an_iterable(): - - return asset.load(my_spec).peek() - - # this returns exactly the same thing as the following: - # - # return asset.load(my_spec) - # - # but throws an exception early if there are no matching assets. - - diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/METADATA b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/METADATA deleted file mode 100644 index f4f8bc4..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/METADATA +++ /dev/null @@ -1,202 +0,0 @@ -Metadata-Version: 2.0 -Name: asset -Version: 0.6.12 -Summary: A package resource and symbol loading helper library. -Home-page: http://github.com/metagriffin/asset -Author: metagriffin -Author-email: mg.pypi@uberdev.org -License: GPLv3+ -Keywords: python package pkg_resources asset resolve lookup loader -Platform: any -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Operating System :: OS Independent -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) -Requires-Dist: aadict (>=0.2.2) -Requires-Dist: globre (>=0.1.5) -Requires-Dist: six (>=1.10.0) - -================================ -Generalized Package Asset Loader -================================ - -Loads resources and symbols from a python package, whether installed -as a directory, an egg, or in source form. Also provides some other -package-related helper methods, including ``asset.version()``, -``asset.caller()``, and ``asset.chunks()``. - -TL;DR -===== - -Install: - -.. code:: bash - - $ pip install asset - -Load symbols (e.g. functions, classes, or variables) from a package by -name: - -.. code:: python - - import asset - - # load the 'mypackage.foo.myfunc' function and call it with some parameter - retval = asset.symbol('mypackage.foo.myfunc')(param='value') - -Load data files from a package: - -.. code:: python - - # load the file 'mypackage/templates/data.txt' into string - data = asset.load('mypackage:templates/data.txt').read() - - # or as a file-like stream - stream = asset.load('mypackage:templates/data.txt').stream() - data = stream.read() - -Multiple files can be operated on at once by using `globre -`_ style wildcards: - -.. code:: python - - # concatenate all 'css' files into one string: - css = asset.load('mypackage:static/style/**.css').read() - - # load all '.txt' files, XML-escaping the data and wrapping - # each file in an ... element. - import xml.etree.ElementTree as ET - data = ET.Element('nodes') - for item in asset.load('asset:**.txt'): - cur = ET.SubElement(data, 'node', name=item.name) - cur.text = item.read() - data = ET.tostring(data) - -Query the installed version of a package: - -.. code:: python - - asset.version('asset') - # ==> '0.0.5' - - asset.version('python') - # ==> '2.7' - - asset.version('no-such-package') - # ==> None - -Find out what package is calling the current function: - -.. code:: python - - # assuming the call stack is: - # in package "zig" a function "x", which calls - # in package "bar" a function "y", which calls - # in package "foo" a function "callfoo" defined as: - - def callfoo(): - - asset.caller() - # ==> 'bar' - - asset.caller(ignore='bar') - # ==> 'zig' - - asset.caller(ignore=['bar', 'zig']) - # ==> None - -Call all the plugins for a given group: - -.. code:: python - - for plugin in asset.plugins('mypackage.plugins'): - plugin.handle() - -Filter an object through all the plugins for a given group (if there -are no plugins, this will simply return `thing`): - -.. code:: python - - result = asset.plugins('mypackage.plugins').filter(thing) - -Load all registered plugins, select the ones named `foo` and invoke -them (this will fail if there is no `foo` plugin): - -.. code:: python - - result = asset.plugins('mypackage.plugins').select('foo').handle(thing) - -Chunk a file (or any file-like object) into 1 KiB chunks: - -.. code:: python - - with open('/var/binary/data', 'rb') as fp: - for chunk in asset.chunks(fp, 1024): - # ... do something with `chunk` ... - -Chunk an Asset stream (here using the `.chunks` alias method): - -.. code:: python - - for chunk in asset.load('mypackage:data/**.bin').chunks(): - # ... using the default chunk size (usually 8 KiB) ... - - -Testing -======= - -In order to run the unit tests correctly, the `pxml` package needs to -be installed as a zipped package (i.e. an "egg") and the `globre` -package needs to be installed unzipped. To accomplish that, do: - -.. code:: bash - - $ easy_install --zip-ok pxml - $ easy_install --always-unzip globre - -The reason is that the unit tests confirm that `asset` can load assets -from both zipped and unzipped packages, and can also identify in which -mode it is operating. - - -Details -======= - -TODO: add detailed docs... - -* ``Asset.filename``: - - If the asset represents a file on the filesystem, is the absolute - path to the specified file. Otherwise is ``None``. - -* ``AssetGroupStream.readline()``: - - Returns the next line from the aggregate asset group stream, as if - the assets had been concatenate into a single asset. - - **IMPORTANT**: if an asset ends with content that is not terminated - by an EOL token, it is returned as-is, i.e. it does NOT append the - first line from the next asset. - -Note: because ``asset.load()`` does lazy-loading, it only throws a -`NoSuchAsset` exception when you actually attempt to use the -AssetGroup! If you need an immediate error, use the `peek()` method. -Note that it returns itself, so you can do something like: - -.. code:: python - - import asset - - def my_function_that_returns_an_iterable(): - - return asset.load(my_spec).peek() - - # this returns exactly the same thing as the following: - # - # return asset.load(my_spec) - # - # but throws an exception early if there are no matching assets. - - diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/RECORD b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/RECORD deleted file mode 100644 index 3f48a67..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/RECORD +++ /dev/null @@ -1,26 +0,0 @@ -asset/__init__.py,sha256=PjiDwauxEN1hFWomUWzo9eQUS5wwOl48IXp98gt8z-c,1328 -asset/isstr.py,sha256=Hx04YYG0OS8tTmLXCesDF154LQlWohsYrjOnKc1yJiU,1347 -asset/plugin.py,sha256=G0XUTZRFR7FnAMxClgg9vlv_9s49W9lAy5KMYHDi0Tg,16456 -asset/resource.py,sha256=2m2JXiMxKgmhs7gUVbuMi39VV0SDgOgz9UNjbujnrsE,9274 -asset/symbol.py,sha256=zdhsMHcR2zWmOXB8Vft-mWwGIL2_zDi823tf4zmibmQ,2866 -asset/test.py,sha256=viWDMYM6ROQAhYGsOvolU98NPBE6ONaJE-21D63ev5Q,9342 -asset/test_plugin.py,sha256=cHpr6UX5XaYF7KfggJn-L45o9ZZqrDaKfDrkkJbSP-Y,15925 -asset/test/data.csv,sha256=koTtT9f-E0aQRlbzKdtsxJwOeuW4J5v_N_lrxutZuq0,12 -asset/test/data/file1.nl,sha256=ZT3kBZTDHE7I_0Y8lyWYz6Vk_6nsSLEH9K6VoLwi_L4,13 -asset/test/data/file2.nl,sha256=bi5QAeKdc_3dGx5GrDviwsvPfpMOW3-pyCiYbsl4mpA,7 -asset/test/data/subdir/subfile1.nl,sha256=GAMEz1d9oKBpo7vpmV-nkF6Eyhj2o35uqMknZ3a_nXo,16 -asset-0.6.12.dist-info/DESCRIPTION.rst,sha256=p0MzHcQaPKd7-tR_4Fn12TDcZIFeaYwqjVL5WIffMuA,4651 -asset-0.6.12.dist-info/METADATA,sha256=2Sz_q8nA2iWDZXQhXo_BiJGZVLo0a3iXsU_OOjzjXAA,5374 -asset-0.6.12.dist-info/RECORD,, -asset-0.6.12.dist-info/WHEEL,sha256=0mO7-aKM6K9CHeURc5NDYZyLWH5lmR-r4TtPinHxz7Y,93 -asset-0.6.12.dist-info/metadata.json,sha256=7q-BzuKus2gz7UksjekqAluLgbzq0npdwSBEIQBrgrk,1026 -asset-0.6.12.dist-info/top_level.txt,sha256=OOL4Q5O665etnevbCwltTM6xLZ_EIE3w81HrT-kZli8,6 -asset-0.6.12.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -asset-0.6.12.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -asset/__pycache__/plugin.cpython-36.pyc,, -asset/__pycache__/test_plugin.cpython-36.pyc,, -asset/__pycache__/test.cpython-36.pyc,, -asset/__pycache__/__init__.cpython-36.pyc,, -asset/__pycache__/resource.cpython-36.pyc,, -asset/__pycache__/symbol.cpython-36.pyc,, -asset/__pycache__/isstr.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/WHEEL b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/WHEEL deleted file mode 100644 index 7981024..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.30.0) -Root-Is-Purelib: true -Tag: cp36-none-any - diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/metadata.json b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/metadata.json deleted file mode 100644 index 1688044..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Programming Language :: Python", "Operating System :: OS Independent", "Natural Language :: English", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)"], "extensions": {"python.details": {"contacts": [{"email": "mg.pypi@uberdev.org", "name": "metagriffin", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/metagriffin/asset"}}}, "extras": [], "generator": "bdist_wheel (0.30.0)", "keywords": ["python", "package", "pkg_resources", "asset", "resolve", "lookup", "loader"], "license": "GPLv3+", "metadata_version": "2.0", "name": "asset", "platform": "any", "run_requires": [{"requires": ["aadict (>=0.2.2)", "globre (>=0.1.5)", "six (>=1.10.0)"]}], "summary": "A package resource and symbol loading helper library.", "test_requires": [{"requires": ["coverage (>=3.5.3)", "nose (>=1.3.0)", "pxml (>=0.2.13)"]}], "version": "0.6.12"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/top_level.txt deleted file mode 100644 index 2bd69c0..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -asset diff --git a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/zip-safe b/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/asset-0.6.12.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/asset/__init__.py b/venv/lib/python3.6/site-packages/asset/__init__.py deleted file mode 100644 index ab9d4fe..0000000 --- a/venv/lib/python3.6/site-packages/asset/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/21 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -from .symbol import * -from .resource import * -from .isstr import isstr -from .plugin import plugin, plugins, PluginSet - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset/isstr.py b/venv/lib/python3.6/site-packages/asset/isstr.py deleted file mode 100644 index 48c9176..0000000 --- a/venv/lib/python3.6/site-packages/asset/isstr.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/22 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import six - -if six.PY3: - def isstr(obj): - return isinstance(obj, str) -else: - def isstr(obj): - return isinstance(obj, basestring) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset/plugin.py b/venv/lib/python3.6/site-packages/asset/plugin.py deleted file mode 100644 index 9be80a5..0000000 --- a/venv/lib/python3.6/site-packages/asset/plugin.py +++ /dev/null @@ -1,442 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2015/11/12 -# copy: (C) Copyright 2015-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import re -import logging - -import six -import pkg_resources -from aadict import aadict -from .symbol import symbol - -#------------------------------------------------------------------------------ - -log = logging.getLogger(__name__) - -#------------------------------------------------------------------------------ -class PluginSet(object): - ''' - A PluginSet is a list of `Plugin` objects that can be iterated over - to get each Plugin, but it also has some methods that operate on all - plugins together. - ''' - - #---------------------------------------------------------------------------- - def __init__(self, group, spec, plugins, *args, **kw): - super(PluginSet, self).__init__(*args, **kw) - self.group = group - self.spec = spec - self.plugins = plugins or [] - - #---------------------------------------------------------------------------- - def handle(self, object, *args, **kw): - ''' - Calls each plugin in this PluginSet with the specified object, - arguments, and keywords in the standard group plugin order. The - return value from each successive invoked plugin is passed as the - first parameter to the next plugin. The final return value is the - object returned from the last plugin. - - If this plugin set is empty (i.e. no plugins exist or matched the - spec), then a ValueError exception is thrown. - ''' - if not bool(self): - if not self.spec or self.spec == SPEC_ALL: - raise ValueError('No plugins available in group %r' % (self.group,)) - raise ValueError( - 'No plugins in group %r matched %r' % (self.group, self.spec)) - for plugin in self.plugins: - object = plugin.handle(object, *args, **kw) - return object - - #---------------------------------------------------------------------------- - def filter(self, object, *args, **kw): - ''' - Identical to `PluginSet.handle`, except: - - #. If this plugin set is empty, `object` is returned as-is. - #. If any plugin returns ``None``, it is returned without - calling any further plugins. - ''' - for plugin in self.plugins: - object = plugin.handle(object, *args, **kw) - if object is None: - return object - return object - - #---------------------------------------------------------------------------- - def select(self, name): - ''' - Returns a new PluginSet that has only the plugins in this that are - named `name`. - ''' - return PluginSet(self.group, name, [ - plug for plug in self.plugins if plug.name == name]) - - #---------------------------------------------------------------------------- - def __bool__(self): - return bool(self.plugins) - - #---------------------------------------------------------------------------- - def __len__(self): - return len(self.plugins) - - #---------------------------------------------------------------------------- - def __iter__(self): - return iter(self.plugins) - - #---------------------------------------------------------------------------- - def __repr__(self): - return '' % ( - self.group, [plug.name for plug in self.plugins]) - -#------------------------------------------------------------------------------ -def plugins(group, spec=None): - # TODO: share this documentation with `../doc/plugin.rst`... - ''' - Returns a `PluginSet` object for the specified setuptools-style - entrypoint `group`. This is just a wrapper around - `pkg_resources.iter_entry_points` that allows the plugins to sort - and override themselves. - - The optional `spec` parameter controls how and what plugins are - loaded. If it is ``None`` or the special value ``'*'``, then the - normal plugin loading will occur, i.e. all registered plugins will - be loaded and their self-declared ordering and dependencies will be - applied. - - Otherwise, the `spec` is taken as a comma- or whitespace-separated - list of plugins to load. In this mode, the `spec` can either specify - an exact list of plugins to load, in the specified order, referred - to as an "absolute" spec. Otherwise, it is a "relative" spec, which - indicates that it only adjusts the standard registered plugin - loading. A spec is a list of either absolute or relative - instructions, and they cannot be mixed. - - In either mode, a plugin is identified either by name for registered - plugins (e.g. ``foo``), or by fully-qualified Python module and - symbol name for unregistered plugins - (e.g. ``package.module.symbol``). - - Plugins in an absolute spec are loaded in the order specified and - can be optionally prefixed with the following special characters: - - * ``'?'`` : the specified plugin should be loaded if available. If - it is not registered, cannot be found, or cannot be loaded, then - it is ignored (a DEBUG log message will be emitted, however). - - Plugins in a relative spec are always prefixed with at least one of - the following special characters: - - * ``'-'`` : removes the specified plugin; this does not affect - plugin ordering, it only removes the plugin from the loaded - list. If the plugin does not exist, no error is thrown. - - * ``'+'`` : adds or requires the specified plugin to the loaded - set. If the plugin is not a named/registered plugin, then it will - be loaded as an asset-symbol, i.e. a Python-dotted module and - symbol name. If the plugin does not exist or cannot be loaded, - this will throw an error. It does not affect the plugin ordering - of registered plugins. - - * ``'/'`` : the plugin name is taken as a regular expression that - will be used to match plugin names and it must terminate in a - slash. Note that this must be the **last** element in the spec - list. - - Examples: - - * ``'*'`` : load all registered plugins. - - * ``'foo,bar'`` : load the "foo" plugin, then the "bar" plugin. - - * ``'foo,?bar'`` : load the "foo" plugin and if the "bar" plugin - exists, load it too. - - * ``'-zig'`` : load all registered plugins except the "zig" plugin. - - * ``'+pkg.foo.bar'`` : load all registered plugins and then load - the "pkg.foo.bar" Python symbol. - - * ``'pkg.foo.bar'`` : load only the "pkg.foo.bar" Python symbol. - ''' - pspec = _parse_spec(spec) - plugs = list(_get_registered_plugins(group, pspec)) - plugs += list(_get_unregistered_plugins(group, plugs, pspec)) - return PluginSet(group, spec, list(_sort_plugins(group, plugs, pspec, spec))) - -#------------------------------------------------------------------------------ -# relative specs: -SPEC_ADD = '+' -SPEC_REM = '-' -SPEC_RE = '/' -# absolute specs: -SPEC_SET = ' ' -SPEC_OPT = '?' -SPEC_ALL = '*' -_specsep_cre = re.compile(r'(^|\s+)([-+?])\s*') -_specname_cre = re.compile(r'^[a-zA-Z_]') -_spec_rel = set((SPEC_ADD, SPEC_REM, SPEC_RE)) -_spec_abs = set((SPEC_SET, SPEC_OPT)) - -#------------------------------------------------------------------------------ -def _parse_spec(spec): - if isinstance(spec, tuple): - return spec - wspec = spec.strip() if spec else None - if not wspec or wspec == SPEC_ALL: - return () - respec = None - if wspec.endswith('/'): - if len(wspec.split('/')) <= 2: - raise ValueError( - 'regex plugin loading expression must start and end with "/"') - wspec, respec = wspec.split('/', 1) - respec = respec[:-1] - if wspec.strip() \ - and not ( wspec.strip().endswith(',') or wspec != wspec.rstrip() ): - raise ValueError( - 'regex plugin loading expression must start and end with "/"') - wspec = wspec.replace(',', ' ') - wspec = _specsep_cre.sub(r' \2', wspec) - wspec = [e.strip() for e in wspec.split()] - ret = [] - for item in wspec: - if not item.strip(): - continue - item = aadict(op=SPEC_SET, target=item) - if item.target and item.target[0] in (SPEC_ADD, SPEC_REM, SPEC_OPT): - item = aadict(op=item.target[0], target=item.target[1:].strip()) - if item.target and item.target[0] in (SPEC_RE,): - raise ValueError( - 'regex plugin loading expression must start and end with "/"') - if not _specname_cre.match(item.target): - raise ValueError( - 'invalid plugin name in specification expression: %r' % (item.target,)) - ret.append(item) - if respec: - ret.append(aadict(op=SPEC_RE, target=re.compile(respec))) - ops = set([item.op for item in ret]) - rel = ops & _spec_rel - abs = ops & _spec_abs - if bool(ops & rel) and bool(ops & abs): - raise ValueError( - 'invalid mixing of relative (%r) and absolute (%r) prefixes in plugin specification' - % (list(rel), list(abs))) - return tuple(ret) - -#------------------------------------------------------------------------------ -def _match_spec(spec, name): - if not spec: - return True - for idx, item in enumerate(spec): - if item.op == SPEC_RE: - if item.target.match(name): - return True - if ( idx + 1 ) >= len(spec): - return False - continue - if item.target != name: - continue - if item.op == SPEC_REM: - return False - return True - if spec[0].op in _spec_rel: - return True - return False - -#------------------------------------------------------------------------------ -def _decorate_plugin(plugin): - plugin.after = getattr(plugin.handle, 'after', None) - plugin.before = getattr(plugin.handle, 'before', None) - plugin.order = getattr(plugin.handle, 'order', 0) - plugin.replace = getattr(plugin.handle, 'replace', False) - plugin.final = getattr(plugin.handle, 'final', False) - plugin.name = getattr(plugin.handle, 'plugin_name', plugin.name) - -#------------------------------------------------------------------------------ -def _get_registered_plugins(group, spec=None): - spec = _parse_spec(spec) - for entrypoint in pkg_resources.iter_entry_points(group): - plugin = aadict( - name = entrypoint.name, - entrypoint = entrypoint, - ) - if _match_spec(spec, plugin.name): - try: - plugin.handle = entrypoint.load() - except ImportError as err: - log.exception( - 'Could not load plugin "%s" in group "%s": %s', - entrypoint.name, group, str(err)) - raise - _decorate_plugin(plugin) - yield plugin - -#------------------------------------------------------------------------------ -def _load_asset_plugin(spec): - plugin = aadict( - name = spec.target, - entrypoint = None, - handle = symbol(spec.target), - ) - _decorate_plugin(plugin) - if plugin.name != spec.target: - # todo: this is a hack so that plugins can be loaded by their - # dotted path, BUT they can declare themselves with a different - # name. the effect here is that `_load_asset_plugin` has the side - # effect of updating the spec to the declared name... - # this is only needed in *very* odd circumstances... - # the "right" way to do this is for the `spec` to only be applied - # once, during load, so that if it specifies the load of a - # dotted path, it will never be re-tested... ugh. - spec.target = plugin.name - return plugin - -#------------------------------------------------------------------------------ -def _get_unregistered_plugins(group, plugins, spec=None): - spec = _parse_spec(spec) - names = [plug.name for plug in plugins] - for item in spec: - if item.op in (SPEC_REM, SPEC_RE) or item.target in names: - continue - try: - yield _load_asset_plugin(item) - except Exception: - if item.op in (SPEC_OPT,): - log.debug('could not load optional plugin %r', item.target) - continue - raise ValueError('could not load plugin %r' % (item.target,)) - -#------------------------------------------------------------------------------ -def _sort_plugins(group, plugins, spec=None, ospec=None): - spec = _parse_spec(spec) - lut = dict() - for plugin in plugins: - if plugin.name not in lut: - lut[plugin.name] = [] - lut[plugin.name].append(plugin) - # order the plugins within each named group by order/replace/final - for name, plugs in list(lut.items()): - plugs = sorted(plugs, key=lambda plug: plug.order) - for idx, plug in enumerate(plugs): - if plug.final: - plugs = plugs[:idx + 1] - break - for idx, plug in enumerate(reversed(plugs)): - if plug.replace: - plugs = plugs[len(plugs) - idx - 1:] - lut[name] = plugs - # apply `spec` - names = sorted(set( - [name for name in lut.keys() if _match_spec(spec, name)])) - if spec and spec[0].op not in _spec_rel: - snames = [] - for item in spec: - if item.target in names: - if item.target not in snames: - snames.append(item.target) - continue - if item.op == SPEC_OPT: - continue - raise TypeError( - '%s plugin spec %r specified unavailable dependency %r' - % (group, ospec or spec, item.target)) - for name in snames: - for plug in lut[name]: - yield plug - return - # order the named groups by after/before - reqs = dict() - for name in names: - reqs[name] = aadict(after=[], before=[]) - for plug in lut[name]: - if plug.after: - reqs[name].after += [p.strip() for p in plug.after.split(',')] - if plug.before: - reqs[name].before += [p.strip() for p in plug.before.split(',')] - reqs[name].after = [aft for aft in reqs[name].after if aft] - reqs[name].before = [bef for bef in reqs[name].before if bef] - # simplify after/before evaluation by pushing before's into after's - for name in names: - for aft in reqs[name].after: - opt = aft.startswith(SPEC_OPT) - if not opt and aft not in names: - raise TypeError( - '%s plugin type %r specified unavailable \'after\' dependency %r' - % (group, name, aft)) - for bef in reqs[name].before: - opt = bef.startswith(SPEC_OPT) - if opt: - bef = bef[1:] - if bef not in names: - if not opt: - raise TypeError( - '%s plugin type %r specified unavailable \'before\' dependency %r' - % (group, name, bef)) - continue - reqs[bef].after.append(name) - # created the ordered list obeying the 'after' rules - snames = [] - while len(snames) < len(names): - cur = len(snames) - for name in names: - if name in snames: - continue - ok = True - for aft in reqs[name].after: - opt = aft.startswith(SPEC_OPT) - if opt: - aft = aft[1:] - if aft not in snames and aft in names: - ok = False - if ok: - snames.append(name) - if len(snames) == cur: - raise TypeError( - '%s has cyclical dependencies in plugins %r' - % (group, sorted(list(set(names) - set(snames))),)) - for name in snames: - for plug in lut[name]: - yield plug - -#------------------------------------------------------------------------------ -def plugin(group, name, after=None, before=None, order=None, replace=None, final=None): - def _wrapper(func): - func.plugin_group = group - func.plugin_name = name - if after is not None: - func.after = after - if before is not None: - func.before = before - if order is not None: - func.order = order - if replace is not None: - func.replace = replace - if final is not None: - func.final = final - return func - return _wrapper - -#------------------------------------------------------------------------------ -# end of $Id$ -# $ChangeLog$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset/resource.py b/venv/lib/python3.6/site-packages/asset/resource.py deleted file mode 100644 index cd4460c..0000000 --- a/venv/lib/python3.6/site-packages/asset/resource.py +++ /dev/null @@ -1,314 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/22 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import re -import os -import functools - -import pkg_resources -import six -import globre - -from .symbol import symbol - -#------------------------------------------------------------------------------ - -MAXBUF = 8192 - -#------------------------------------------------------------------------------ -class NoSuchAsset(Exception): pass - - -#------------------------------------------------------------------------------ -class AssetGroupStream(object): - # TODO: implement all expected file-like methods... - def __init__(self, group): - self.group = group - self.assets = iter(group) - self._cur = None - def read(self, size=-1): - ret = b'' if self._cur is None else self._cur.read(size) - if size >= 0 and len(ret) >= size: - return ret - while True: - try: - self._cur = six.next(self.assets) - except StopIteration: - self._cur = None - return ret - ret += self._cur.read(( size - len(ret) ) if size > 0 else -1) - if size >= 0 and len(ret) >= size: - return ret - def readline(self): - if self._cur is None: - try: - self._cur = six.next(self.assets) - except StopIteration: - self._cur = None - return b'' - while True: - ret = self._cur.readline() - if ret: - return ret - try: - self._cur = six.next(self.assets) - except StopIteration: - self._cur = None - return b'' - def chunks(self, *args, **kws): - return chunks(self, *args, **kws) - def close(self): - pass - def __iter__(self): - while True: - line = self.readline() - if not line: - return - yield line - - -#------------------------------------------------------------------------------ -class AssetGroup(object): - # TODO: implement all expected file-like methods... - def __init__(self, package, package_dir, regex, spec): - # todo: remove `package_dir` -- it should be inferred... - self.package = package - self.pkgdir = package_dir - self.regex = regex - self.spec = spec - self._fp = None - def peek(self): - for pkg, res in self.resources(): - return self - def count(self): - return len(self) - def exists(self): - try: - self.peek() - return True - except NoSuchAsset: - return False - def resources(self): - count = 0 - for resource in listres(self.package, self.pkgdir): - if not self.regex.match(resource): - continue - count += 1 - yield (self.package, resource) - if count <= 0: - raise NoSuchAsset('No asset matched "%s"' % (self.spec,)) - def chunks(self, *args, **kws): - return self._stream().chunks(*args, **kws) - def __len__(self): - return len(list(self.resources())) - def __iter__(self): - for pkg, res in self.resources(): - yield Asset(self, pkg, res) - def stream(self): - return AssetGroupStream(self) - def _stream(self): - if self._fp is None: - self._fp = self.stream() - return self._fp - def read(self, size=-1): - return self._stream().read(size) - def readline(self): - return self._stream().readline() - - -#------------------------------------------------------------------------------ -class AssetStream(object): - # TODO: implement all expected file-like methods... - def __init__(self, stream, asset): - self.stream = stream - self.asset = asset - def read(self, size=-1): - return self.stream.read(size) - def readline(self): - return self.stream.readline() - def close(self): - pass - def chunks(self, *args, **kws): - return chunks(self.stream, *args, **kws) - def __iter__(self): - while True: - line = self.readline() - if not line: - return - yield line - - -#------------------------------------------------------------------------------ -class Asset(object): - # todo: should all returned streams be "AssetStream"s that provide - # a .asset attribute, like TransformerStream does? - # TODO: implement all expected file-like methods... - def __init__(self, group, package, name): - self.group = group - self.package = package - self.name = name - self._fp = None - def __str__(self): - return '%s:%s' % (self.package, self.name) - def stream(self): - return AssetStream( - pkg_resources.resource_stream(self.package, self.name), self) - def _stream(self): - if self._fp is None: - self._fp = self.stream() - return self._fp - def read(self, size=-1): - return self._stream().read(size) - def readline(self): - return self._stream().readline() - # compatibility with AssetGroup() API... - def peek(self): - if pkg_resources.resource_exists(self.package, self.name): - return self - raise NoSuchAsset('No asset matched "%s:%s"' % (self.package, self.name)) - def count(self): - return len(self) - def exists(self): - try: - self.peek() - return True - except NoSuchAsset: - return False - def resources(self): - self.peek() - yield (self.package, self.name) - def chunks(self, *args, **kws): - return self._stream().chunks(*args, **kws) - def __len__(self): - self.peek() - return 1 - def __iter__(self): - self.peek() - yield self - def __repr__(self): - return ''.format(self.package, self.name) - @property - def filename(self): - prov = pkg_resources.get_provider(self.package) - if isinstance(prov, pkg_resources.ZipProvider): - return None - return pkg_resources.resource_filename(self.package, self.name) - - -defaultExclude = ('.rcs', '.svn', '.git', '.hg') - -#------------------------------------------------------------------------------ -def listres(pkgname, pkgdir, - recursive=True, depthFirst=False, - exclude=defaultExclude, showDirs=False, - ): - reslist = [os.path.join(pkgdir, cur) - for cur in pkg_resources.resource_listdir(pkgname, pkgdir) - if cur not in exclude] - dirs = [] - for cur in sorted(reslist): - if pkg_resources.resource_isdir(pkgname, cur): - if showDirs: - yield cur + '/' - if recursive: - if depthFirst: - for subcur in listres(pkgname, cur): - yield subcur - else: - dirs.append(cur) - else: - yield cur - for cur in dirs: - for subcur in listres(pkgname, cur): - yield subcur - -#------------------------------------------------------------------------------ -def load(pattern, *args, **kw): - ''' - Given a package asset-spec glob-pattern `pattern`, returns an - :class:`AssetGroup` object, which in turn can act as a generator of - :class:`Asset` objects that match the pattern. - - Example: - - .. code-block:: python - - import asset - - # concatenate all 'css' files into one string: - css = asset.load('mypackage:static/style/**.css').read() - - ''' - - spec = pattern - - if ':' not in pattern: - raise ValueError('`pattern` must be in the format "PACKAGE:GLOB"') - - pkgname, pkgpat = pattern.split(':', 1) - pkgdir, pattern = globre.compile(pkgpat, split_prefix=True, flags=globre.EXACT) - - if pkgdir: - idx = pkgdir.rfind('/') - pkgdir = pkgdir[:idx] if idx >= 0 else '' - - group = AssetGroup(pkgname, pkgdir, pattern, spec) - if globre.iswild(pkgpat): - return group - return Asset(group, pkgname, pkgpat) - -#------------------------------------------------------------------------------ -def chunks(stream, size=None): - ''' - Returns a generator of chunks from the `stream` with a maximum - size of `size`. I don't know why this isn't part of core Python. - - :Parameters: - - stream : file-like object - - The stream to fetch the chunks from. Note that the stream will - not be repositioned in any way. - - size : int | 'lines'; default: null - - If a integer, the size of the chunks to return. If the - string ``"lines"``, then behaves the same as `file.read()`. - If unspecified or null, defaults to the package default - MAXBUF size (usually 8 KiB). - ''' - if size == 'lines': - for item in stream: - # for item in stream.readline(): - yield item - return - if size is None: - size = MAXBUF - while True: - buf = stream.read(size) - if not buf: - return - yield buf - -#------------------------------------------------------------------------------ -# end of $Id$ -# $ChangeLog$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset/symbol.py b/venv/lib/python3.6/site-packages/asset/symbol.py deleted file mode 100644 index 782f559..0000000 --- a/venv/lib/python3.6/site-packages/asset/symbol.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/22 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import pkg_resources, inspect, six - -from .isstr import isstr - -#------------------------------------------------------------------------------ -def version(package, default=None): - try: - return pkg_resources.get_distribution(package).version - except: - return default - -#------------------------------------------------------------------------------ -def symbol(spec): - if not isstr(spec): - return spec - if ':' in spec: - spec, attr = spec.split(':', 1) - return getattr(symbol(spec), attr) - spec = spec.split('.') - used = spec.pop(0) - found = __import__(used) - for cur in spec: - used += '.' + cur - try: - found = getattr(found, cur) - except AttributeError: - __import__(used) - found = getattr(found, cur) - return found - -#------------------------------------------------------------------------------ -def caller(ignore=None): - if ignore is None: - ignore = [] - elif isinstance(ignore, basestring): - ignore = [ignore] - else: - ignore = ignore[:] - stack = inspect.stack() - record = None - one = False - try: - for record in stack: - if not record or not record[0]: - continue - mod = inspect.getmodule(record[0]) - if not mod: - continue - mod = getattr(mod, '__package__', None) or getattr(mod, '__name__', None) - if mod == 'asset' or mod.startswith('asset.'): - continue - if not one: - # we've finally hit the module that actually called `caller`: - # ignore it, since we need to return the caller's caller. - one = True - continue - if mod not in ignore: - return mod - return None - finally: - del record - del stack - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset/test.py b/venv/lib/python3.6/site-packages/asset/test.py deleted file mode 100644 index c049c15..0000000 --- a/venv/lib/python3.6/site-packages/asset/test.py +++ /dev/null @@ -1,233 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/22 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import unittest -import os.path -import xml.etree.ElementTree as ET - -import pxml -import six -import pkg_resources -from aadict import aadict - -import asset - -#------------------------------------------------------------------------------ -def isEgg(pkg): - dist = pkg_resources.get_distribution(pkg) - return os.path.isfile(dist.location) - -#------------------------------------------------------------------------------ -class TestAsset(unittest.TestCase, pxml.XmlTestMixin): - - maxDiff = None - - #---------------------------------------------------------------------------- - def test_version(self): - self.assertRegexpMatches(asset.version('pxml'), r'^\d+.\d+.\d+$') - - #---------------------------------------------------------------------------- - def test_count(self): - self.assertEqual(asset.load('asset:test/data/file1.nl').count(), 1) - self.assertEqual(len(asset.load('asset:test/data/file1.nl')), 1) - self.assertEqual(asset.load('asset:test/data/**.nl').count(), 3) - self.assertEqual(len(asset.load('asset:test/data/**.nl')), 3) - - #---------------------------------------------------------------------------- - def test_exists(self): - self.assertEqual(asset.load('asset:test/data/file1.nl').exists(), True) - self.assertEqual(asset.load('asset:test/data/**.nl').exists(), True) - self.assertEqual(asset.load('asset:no-such-file.ext').exists(), False) - - #---------------------------------------------------------------------------- - def test_load_multi(self): - self.assertEqual(len(asset.load('asset:test/data/file1.nl')), 1) - self.assertEqual( - [str(ast) for ast in asset.load('asset:test/data/file1.nl')], - ['asset:test/data/file1.nl']) - self.assertEqual( - [str(ast) for ast in asset.load('asset:test/data/**.nl')], - ['asset:test/data/file1.nl', - 'asset:test/data/file2.nl', - 'asset:test/data/subdir/subfile1.nl']) - self.assertEqual( - [ast.read() for ast in asset.load('asset:test/data/**.nl')], - [b'line-1\nline-2', - b'line-3\n', - b'sub-file-line-1\n']) - - #---------------------------------------------------------------------------- - def test_load_single(self): - loaded = [] - for item in asset.load('asset:test/data/file1.nl'): - loaded.append(item) - self.assertEqual(len(loaded), 1) - self.assertEqual(loaded[0].package, 'asset') - self.assertEqual(loaded[0].name, 'test/data/file1.nl') - with self.assertRaises(asset.NoSuchAsset) as cm: - asset.load('asset:no-such-file.ext').peek() - - #---------------------------------------------------------------------------- - def test_load_group_read(self): - self.assertEqual( - asset.load('asset:test/data/file1.nl').read(), b'line-1\nline-2') - self.assertEqual( - asset.load('asset:test/data/file2.nl').read(), b'line-3\n') - self.assertEqual( - asset.load('asset:test/data/*.nl').read(), b'line-1\nline-2line-3\n') - ag = asset.load('asset:test/data/*.nl') - self.assertEqual(ag.readline(), b'line-1\n') - self.assertEqual(ag.readline(), b'line-2') - self.assertEqual(ag.readline(), b'line-3\n') - - #---------------------------------------------------------------------------- - def test_load_example(self): - out = ET.Element('nodes') - for item in asset.load('asset:test/data/**.nl'): - cur = ET.SubElement(out, 'node', name=item.name) - cur.text = item.read().decode() - out = ET.tostring(out) - chk = b'''\ - - line-1 -line-2 - line-3 - - sub-file-line-1 - - -''' - self.assertXmlEqual(out, chk) - - #---------------------------------------------------------------------------- - def test_listres(self): - self.assertEqual( - list(asset.listres('asset', 'test/data', showDirs=True)), - [ - 'test/data/file1.nl', - 'test/data/file2.nl', - 'test/data/subdir/', - 'test/data/subdir/subfile1.nl', - ]) - - #---------------------------------------------------------------------------- - def test_filename_egg(self): - # NOTE: this requires that `pxml` be installed as a zipped egg, i.e.: - # easy_install --zip-ok pxml - if not isEgg('pxml'): - raise unittest.SkipTest('package "pxml" must be installed as a zipped egg') - for item in asset.load('pxml:__init__.py'): - self.assertIsNone(item.filename) - - #---------------------------------------------------------------------------- - def test_filename_noegg(self): - # NOTE: this requires that `globre` be installed as an UNzipped pkg, i.e.: - # easy_install --always-unzip globre - if isEgg('globre'): - raise unittest.SkipTest('package "globre" must not be installed as a zipped egg') - for item in asset.load('globre:__init__.py'): - self.assertIsNotNone(item.filename) - - #---------------------------------------------------------------------------- - def test_readWithSize(self): - self.assertEqual( - asset.load('asset:test/data/file**').stream().read(), - b'line-1\nline-2line-3\n') - self.assertEqual( - asset.load('asset:test/data/file**').stream().read(1024), - b'line-1\nline-2line-3\n') - stream = asset.load('asset:test/data/file**').stream() - self.assertEqual(stream.read(5), b'line-') - self.assertEqual(stream.read(5), b'1\nlin') - self.assertEqual(stream.read(5), b'e-2li') - self.assertEqual(stream.read(3), b'ne-') - self.assertEqual(stream.read(3), b'3\n') - self.assertEqual(stream.read(3), b'') - - #---------------------------------------------------------------------------- - def test_streamIteration(self): - stream = asset.load('asset:test/data/file**').stream() - self.assertEqual(stream.readline(), b'line-1\n') - self.assertEqual(stream.readline(), b'line-2') - self.assertEqual(stream.readline(), b'line-3\n') - self.assertEqual(stream.readline(), b'') - stream = asset.load('asset:test/data/file**').stream() - chk = list(reversed([ - b'line-1\n', - b'line-2', - b'line-3\n', - ])) - for line in stream: - self.assertEqual(line, chk.pop()) - - #---------------------------------------------------------------------------- - def test_csv(self): - import csv - lines = [line.decode() for line in asset.load('asset:test/data.csv').stream()] - reader = csv.reader(lines) - self.assertEqual(six.next(reader), ['a', 'b', 'c']) - self.assertEqual(six.next(reader), ['1', '2', '3']) - with self.assertRaises(StopIteration): - six.next(reader) - - #---------------------------------------------------------------------------- - def test_chunks_bytes(self): - src = six.BytesIO('foo-1\nbar\nzig') - self.assertEqual( - list(asset.chunks(src, 3)), - ['foo', '-1\n', 'bar', '\nzi', 'g']) - self.assertEqual( - list(asset.chunks(asset.load('asset:test/data/file1.nl').stream(), 3)), - ['lin', 'e-1', '\nli', 'ne-', '2']) - self.assertEqual( - list(asset.chunks(asset.load('asset:test/data/file**').stream(), 3)), - ['lin', 'e-1', '\nli', 'ne-', '2li', 'ne-', '3\n']) - self.assertEqual( - list(asset.load('asset:test/data/file1.nl').chunks(3)), - ['lin', 'e-1', '\nli', 'ne-', '2']) - self.assertEqual( - list(asset.load('asset:test/data/file**').chunks(3)), - ['lin', 'e-1', '\nli', 'ne-', '2li', 'ne-', '3\n']) - - #---------------------------------------------------------------------------- - def test_chunks_lines(self): - src = six.BytesIO('foo-1\nbar\nzig') - self.assertEqual( - list(asset.chunks(src, 'lines')), - ['foo-1\n', 'bar\n', 'zig']) - self.assertEqual( - list(asset.chunks(asset.load('asset:test/data/file1.nl').stream(), 'lines')), - ['line-1\n', 'line-2']) - self.assertEqual( - list(asset.chunks(asset.load('asset:test/data/file**').stream(), 'lines')), - ['line-1\n', 'line-2', 'line-3\n']) - self.assertEqual( - list(asset.load('asset:test/data/file1.nl').chunks('lines')), - ['line-1\n', 'line-2']) - self.assertEqual( - list(asset.load('asset:test/data/file**').chunks('lines')), - ['line-1\n', 'line-2', 'line-3\n']) - - -#------------------------------------------------------------------------------ -# end of $Id$ -# $ChangeLog$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/asset/test/data.csv b/venv/lib/python3.6/site-packages/asset/test/data.csv deleted file mode 100644 index bfde6bf..0000000 --- a/venv/lib/python3.6/site-packages/asset/test/data.csv +++ /dev/null @@ -1,2 +0,0 @@ -a,b,c -1,2,3 diff --git a/venv/lib/python3.6/site-packages/asset/test/data/file1.nl b/venv/lib/python3.6/site-packages/asset/test/data/file1.nl deleted file mode 100644 index 211b4f4..0000000 --- a/venv/lib/python3.6/site-packages/asset/test/data/file1.nl +++ /dev/null @@ -1,2 +0,0 @@ -line-1 -line-2 \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/asset/test/data/file2.nl b/venv/lib/python3.6/site-packages/asset/test/data/file2.nl deleted file mode 100644 index d3e6aa2..0000000 --- a/venv/lib/python3.6/site-packages/asset/test/data/file2.nl +++ /dev/null @@ -1 +0,0 @@ -line-3 diff --git a/venv/lib/python3.6/site-packages/asset/test/data/subdir/subfile1.nl b/venv/lib/python3.6/site-packages/asset/test/data/subdir/subfile1.nl deleted file mode 100644 index b686d34..0000000 --- a/venv/lib/python3.6/site-packages/asset/test/data/subdir/subfile1.nl +++ /dev/null @@ -1 +0,0 @@ -sub-file-line-1 diff --git a/venv/lib/python3.6/site-packages/asset/test_plugin.py b/venv/lib/python3.6/site-packages/asset/test_plugin.py deleted file mode 100644 index 8115ec9..0000000 --- a/venv/lib/python3.6/site-packages/asset/test_plugin.py +++ /dev/null @@ -1,335 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2016/01/03 -# copy: (C) Copyright 2016-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import unittest - -from aadict import aadict - -import asset - -#------------------------------------------------------------------------------ -class TestPlugins(unittest.TestCase): - - maxDiff = None - - @staticmethod - @asset.plugin('test-group', 'test-name') - def method(): pass - - #---------------------------------------------------------------------------- - def test_plugin_sorting_intra(self): - from .plugin import _sort_plugins - self.assertEqual( - list(_sort_plugins('myext', [ - aadict(name='foo', after=None, before=None, order=8, replace=False, final=True), - aadict(name='foo', after=None, before=None, order=2, replace=False, final=False), - aadict(name='foo', after=None, before=None, order=9, replace=False, final=False), - aadict(name='foo', after=None, before=None, order=5, replace=True, final=False), - ])), [ - aadict(name='foo', after=None, before=None, order=5, replace=True, final=False), - aadict(name='foo', after=None, before=None, order=8, replace=False, final=True), - ]) - - #---------------------------------------------------------------------------- - def test_plugin_sorting_inter(self): - from .plugin import _sort_plugins - self.assertEqual( - list(_sort_plugins('myext', [ - aadict(name='a', after=None, before=None, order=8, replace=False, final=False), - aadict(name='b', after=None, before=None, order=9, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - aadict(name='c', after=None, before='a', order=0, replace=False, final=False), - ])), [ - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='c', after=None, before='a', order=0, replace=False, final=False), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - ]) - - #---------------------------------------------------------------------------- - def test_plugin_sorting_spec_valid(self): - from .plugin import _sort_plugins - self.assertEqual( - list(_sort_plugins('myext', [ - aadict(name='a', after=None, before=None, order=8, replace=False, final=False), - aadict(name='b', after=None, before=None, order=9, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - aadict(name='c', after=None, before='a', order=0, replace=False, final=False), - ], 'c,b,a')), [ - aadict(name='c', after=None, before='a', order=0, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - ]) - self.assertEqual( - list(_sort_plugins('myext', [ - aadict(name='a', after=None, before=None, order=8, replace=False, final=False), - aadict(name='b', after=None, before=None, order=9, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - aadict(name='c', after=None, before='a', order=0, replace=False, final=False), - ], '-c')), [ - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - ]) - - #---------------------------------------------------------------------------- - def test_plugin_sorting_spec_invalid(self): - from .plugin import _sort_plugins - with self.assertRaises(TypeError) as cm: - list(_sort_plugins('myext', [ - aadict(name='a', after=None, before=None, order=8, replace=False, final=False), - aadict(name='b', after=None, before=None, order=9, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - aadict(name='c', after=None, before='a', order=0, replace=False, final=False), - ], '-c,-b')) - self.assertEqual( - str(cm.exception), - "myext plugin type 'a' specified unavailable 'after' dependency 'b'") - - #---------------------------------------------------------------------------- - def test_plugin_sorting_unavailable(self): - from .plugin import _sort_plugins - with self.assertRaises(TypeError) as cm: - list(_sort_plugins('myext', [ - aadict(name='bar', after='foo', before=None, order=0, replace=False, final=False), - ])) - self.assertEqual( - str(cm.exception), - "myext plugin type 'bar' specified unavailable 'after' dependency 'foo'") - with self.assertRaises(TypeError) as cm: - list(_sort_plugins('myext', [ - aadict(name='bar', after=None, before='foo', order=0, replace=False, final=False), - ])) - self.assertEqual( - str(cm.exception), - "myext plugin type 'bar' specified unavailable 'before' dependency 'foo'") - with self.assertRaises(TypeError) as cm: - list(_sort_plugins('myext', [ - aadict(name='foo', after=None, before='bar', order=0, replace=False, final=False), - aadict(name='bar', after=None, before='foo', order=0, replace=False, final=False), - ])) - self.assertEqual( - str(cm.exception), - "myext has cyclical dependencies in plugins ['bar', 'foo']") - - #---------------------------------------------------------------------------- - def test_plugin_spec_valid(self): - import re - from .plugin import _parse_spec - self.assertEqual(_parse_spec(None), ()) - self.assertEqual(_parse_spec('*'), ()) - self.assertEqual(_parse_spec('-foo,+bar'), (aadict(op='-', target='foo'), aadict(op='+', target='bar'))) - self.assertEqual(_parse_spec('-foo,-bar'), (aadict(op='-', target='foo'), aadict(op='-', target='bar'))) - self.assertEqual(_parse_spec(' - foo, - bar'), (aadict(op='-', target='foo'), aadict(op='-', target='bar'))) - self.assertEqual(_parse_spec(' - foo - bar '), (aadict(op='-', target='foo'), aadict(op='-', target='bar'))) - self.assertEqual(_parse_spec('foo,?bar'), (aadict(op=' ', target='foo'), aadict(op='?', target='bar'))) - self.assertEqual(_parse_spec('foo,?bar'), (aadict(op=' ', target='foo'), aadict(op='?', target='bar'))) - self.assertEqual( - _parse_spec('/(foo|bar)/'), - (aadict(op='/', target=re.compile('(foo|bar)')),)) - self.assertEqual( - _parse_spec('+zig,/(foo|bar)/'), - (aadict(op='+', target='zig'), aadict(op='/', target=re.compile('(foo|bar)')))) - self.assertEqual( - _parse_spec('/zig,/(foo|bar)/'), - (aadict(op='/', target=re.compile('zig,/(foo|bar)')),)) - - #---------------------------------------------------------------------------- - def test_plugin_spec_invalid(self): - from .plugin import _parse_spec - with self.assertRaises(ValueError) as cm: - _parse_spec('foo,-bar') - self.assertEqual( - str(cm.exception), - "invalid mixing of relative (['-']) and absolute ([' ']) prefixes in plugin specification") - with self.assertRaises(ValueError) as cm: - _parse_spec('-foo,bar') - self.assertEqual( - str(cm.exception), - "invalid mixing of relative (['-']) and absolute ([' ']) prefixes in plugin specification") - with self.assertRaises(ValueError) as cm: - _parse_spec('-foo,?bar') - self.assertEqual( - str(cm.exception), - "invalid mixing of relative (['-']) and absolute (['?']) prefixes in plugin specification") - with self.assertRaises(ValueError) as cm: - _parse_spec('/foo') - self.assertEqual( - str(cm.exception), - 'regex plugin loading expression must start and end with "/"') - - #---------------------------------------------------------------------------- - def test_plugin_spec_match(self): - from .plugin import _parse_spec, _match_spec - self.assertTrue(_match_spec(_parse_spec('*'), 'foo')) - self.assertTrue(_match_spec(_parse_spec('/foo/'), 'foo')) - self.assertFalse(_match_spec(_parse_spec('/foo/'), 'bar')) - self.assertTrue(_match_spec(_parse_spec('/(foo|bar)/'), 'foo')) - self.assertTrue(_match_spec(_parse_spec('/(foo|bar)/'), 'bar')) - self.assertTrue(_match_spec(_parse_spec('foo,?bar'), 'foo')) - self.assertTrue(_match_spec(_parse_spec('foo,?bar'), 'bar')) - self.assertTrue(_match_spec(_parse_spec('-foo'), 'bar')) - self.assertFalse(_match_spec(_parse_spec('-foo'), 'foo')) - self.assertFalse(_match_spec(_parse_spec('foo,?bar'), 'zog')) - self.assertTrue(_match_spec(_parse_spec('+foo'), 'foo')) - self.assertTrue(_match_spec(_parse_spec('+foo'), 'bar')) - - #---------------------------------------------------------------------------- - def test_plugin_asset_load(self): - from .plugin import plugins, _load_asset_plugin - self.assertEqual( - _load_asset_plugin(aadict(target='asset.test_plugin.TestPlugins.method')).handle, - self.method) - plugs = list(plugins('test-group', 'asset.test_plugin.TestPlugins.method')) - self.assertEqual( - [plin.handle for plin in plugs], - [self.method]) - with self.assertRaises(ValueError) as cm: - list(plugins('test-group', 'asset.test_plugin.TestPlugins.no_such_method')) - self.assertEqual( - str(cm.exception), - "could not load plugin 'asset.test_plugin.TestPlugins.no_such_method'") - - #---------------------------------------------------------------------------- - def test_plugin_asset_mixed(self): - from .plugin import _sort_plugins - self.assertEqual( - list(_sort_plugins('myext', [ - aadict(name='a', after=None, before=None, order=8, replace=False, final=False), - aadict(name='b', after=None, before=None, order=9, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - aadict(name='c', after=None, before='b', order=0, replace=False, final=False), - aadict(name='d.e', after='b', before='a', order=0, replace=False, final=False), - ], '+d.e')), [ - aadict(name='c', after=None, before='b', order=0, replace=False, final=False), - aadict(name='b', after=None, before=None, order=2, replace=False, final=True), - aadict(name='d.e', after='b', before='a', order=0, replace=False, final=False), - aadict(name='a', after='b', before=None, order=5, replace=False, final=True), - ]) - - #---------------------------------------------------------------------------- - def test_plugin_decorator(self): - from .plugin import plugin - @plugin('asset.example', 'foo', before='bar') - def my_foo_plugin(): pass - @plugin('asset.example', 'bar', after='foo', order=3, replace=True, final=True) - def my_bar_plugin(): pass - self.assertEqual(my_foo_plugin.plugin_group, 'asset.example') - self.assertEqual(my_foo_plugin.plugin_name, 'foo') - self.assertEqual(my_foo_plugin.before, 'bar') - self.assertFalse(hasattr(my_foo_plugin, 'after')) - self.assertFalse(hasattr(my_foo_plugin, 'order')) - self.assertFalse(hasattr(my_foo_plugin, 'replace')) - self.assertFalse(hasattr(my_foo_plugin, 'final')) - self.assertEqual(my_bar_plugin.plugin_group, 'asset.example') - self.assertEqual(my_bar_plugin.plugin_name, 'bar') - self.assertEqual(my_bar_plugin.after, 'foo') - self.assertFalse(hasattr(my_bar_plugin, 'before')) - self.assertEqual(my_bar_plugin.order, 3) - self.assertEqual(my_bar_plugin.replace, True) - self.assertEqual(my_bar_plugin.final, True) - - #---------------------------------------------------------------------------- - def test_plugin_can_declare_name(self): - pset = asset.plugins( - 'test-group', 'asset.test_plugin.TestPlugins.method') - self.assertEqual(pset.plugins[0].name, 'test-name') - -#------------------------------------------------------------------------------ -class TestPluginSet(unittest.TestCase): - - maxDiff = None - - @staticmethod - def increment(value, counter=None, **kw): - if counter: - counter() - if 'abort' in kw and value == kw['abort']: - return None - if value is None: - return None - return value + 1 - - @staticmethod - @asset.plugin('test-group', 'decrement') - def decrement(value): - return value - 1 - - #---------------------------------------------------------------------------- - def test_filter_empty(self): - self.assertEqual( - 'foo', - asset.PluginSet('group', None, []).filter('foo')) - - #---------------------------------------------------------------------------- - def test_handle_empty(self): - with self.assertRaises(ValueError) as cm: - asset.PluginSet('group', None, []).handle('foo') - self.assertEqual( - str(cm.exception), "No plugins available in group 'group'") - - #---------------------------------------------------------------------------- - def test_filter_aborts(self): - count = dict(value=0) - def counter(): - count['value'] = count['value'] + 1 - pset = asset.plugins( - 'test-group', ','.join(['asset.test_plugin.TestPluginSet.increment'] * 5)) - self.assertEqual(pset.filter(0, abort=2, counter=counter), None) - self.assertEqual(count['value'], 3) - - #---------------------------------------------------------------------------- - def test_handle_perseveres(self): - count = dict(value=0) - def counter(): - count['value'] = count['value'] + 1 - pset = asset.plugins( - 'test-group', ','.join(['asset.test_plugin.TestPluginSet.increment'] * 5)) - self.assertEqual(pset.handle(0, abort=2, counter=counter), None) - self.assertEqual(count['value'], 5) - - #---------------------------------------------------------------------------- - def test_select(self): - pset = asset.plugins( - 'test-group', ','.join([ - 'asset.test_plugin.TestPluginSet.increment', - 'asset.test_plugin.TestPluginSet.decrement'])) - pset2 = pset.select('decrement') - self.assertEqual( - [p.handle for p in pset.plugins], [self.increment, self.decrement]) - self.assertEqual( - [p.handle for p in pset2.plugins], [self.decrement]) - - #---------------------------------------------------------------------------- - def test_repr(self): - self.assertEqual( - repr(asset.plugins( - 'test-group', 'asset.test_plugin.TestPluginSet.decrement')), - "") - - -#------------------------------------------------------------------------------ -# end of $Id$ -# $ChangeLog$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/DESCRIPTION.rst deleted file mode 100644 index 643a4f9..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,48 +0,0 @@ -Certifi: Python SSL Certificates -================================ - -`Certifi`_ is a carefully curated collection of Root Certificates for -validating the trustworthiness of SSL certificates while verifying the identity -of TLS hosts. It has been extracted from the `Requests`_ project. - -Installation ------------- - -``certifi`` is available on PyPI. Simply install it with ``pip``:: - - $ pip install certifi - -Usage ------ - -To reference the installed certificate authority (CA) bundle, you can use the -built-in function:: - - >>> import certifi - - >>> certifi.where() - '/usr/local/lib/python2.7/site-packages/certifi/cacert.pem' - -Enjoy! - -1024-bit Root Certificates -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Browsers and certificate authorities have concluded that 1024-bit keys are -unacceptably weak for certificates, particularly root certificates. For this -reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its -bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key) -certificate from the same CA. Because Mozilla removed these certificates from -its bundle, ``certifi`` removed them as well. - -In previous versions, ``certifi`` provided the ``certifi.old_where()`` function -to intentionally re-add the 1024-bit roots back into your bundle. This was not -recommended in production and therefore was removed. To assist in migrating old -code, the function ``certifi.old_where()`` continues to exist as an alias of -``certifi.where()``. Please update your code to use ``certifi.where()`` -instead. ``certifi.old_where()`` will be removed in 2018. - -.. _`Certifi`: http://certifi.io/en/latest/ -.. _`Requests`: http://docs.python-requests.org/en/latest/ - - diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/LICENSE.txt b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/LICENSE.txt deleted file mode 100644 index 802b53f..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -This packge contains a modified version of ca-bundle.crt: - -ca-bundle.crt -- Bundle of CA Root Certificates - -Certificate data from Mozilla as of: Thu Nov 3 19:04:19 2011# -This is a bundle of X.509 certificates of public Certificate Authorities -(CA). These were automatically extracted from Mozilla's root certificates -file (certdata.txt). This file can be found in the mozilla source tree: -http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1# -It contains the certificates in PEM format and therefore -can be directly used with curl / libcurl / php_curl, or with -an Apache+mod_ssl webserver for SSL client authentication. -Just configure this file as the SSLCACertificateFile.# - -***** BEGIN LICENSE BLOCK ***** -This Source Code Form is subject to the terms of the Mozilla Public License, -v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain -one at http://mozilla.org/MPL/2.0/. - -***** END LICENSE BLOCK ***** -@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $ diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/METADATA b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/METADATA deleted file mode 100644 index b710cd5..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/METADATA +++ /dev/null @@ -1,71 +0,0 @@ -Metadata-Version: 2.0 -Name: certifi -Version: 2018.4.16 -Summary: Python package for providing Mozilla's CA Bundle. -Home-page: http://certifi.io/ -Author: Kenneth Reitz -Author-email: me@kennethreitz.com -License: MPL-2.0 -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0) -Classifier: Natural Language :: English -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 - -Certifi: Python SSL Certificates -================================ - -`Certifi`_ is a carefully curated collection of Root Certificates for -validating the trustworthiness of SSL certificates while verifying the identity -of TLS hosts. It has been extracted from the `Requests`_ project. - -Installation ------------- - -``certifi`` is available on PyPI. Simply install it with ``pip``:: - - $ pip install certifi - -Usage ------ - -To reference the installed certificate authority (CA) bundle, you can use the -built-in function:: - - >>> import certifi - - >>> certifi.where() - '/usr/local/lib/python2.7/site-packages/certifi/cacert.pem' - -Enjoy! - -1024-bit Root Certificates -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Browsers and certificate authorities have concluded that 1024-bit keys are -unacceptably weak for certificates, particularly root certificates. For this -reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its -bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key) -certificate from the same CA. Because Mozilla removed these certificates from -its bundle, ``certifi`` removed them as well. - -In previous versions, ``certifi`` provided the ``certifi.old_where()`` function -to intentionally re-add the 1024-bit roots back into your bundle. This was not -recommended in production and therefore was removed. To assist in migrating old -code, the function ``certifi.old_where()`` continues to exist as an alias of -``certifi.where()``. Please update your code to use ``certifi.where()`` -instead. ``certifi.old_where()`` will be removed in 2018. - -.. _`Certifi`: http://certifi.io/en/latest/ -.. _`Requests`: http://docs.python-requests.org/en/latest/ - - diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/RECORD b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/RECORD deleted file mode 100644 index 5715c92..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/RECORD +++ /dev/null @@ -1,15 +0,0 @@ -certifi/__init__.py,sha256=KHDlQtQQTRmOG0TJi12ZIE5WWq2tYHM5ax30EX6UJ04,63 -certifi/__main__.py,sha256=FiOYt1Fltst7wk9DRa6GCoBr8qBUxlNQu_MKJf04E6s,41 -certifi/cacert.pem,sha256=0lwMLbfi4umzDdOmdLMdrNkgZxw-5y6PCE10PrnJy-k,268839 -certifi/core.py,sha256=xPQDdG_siy5A7BfqGWa7RJhcA61xXEqPiSrw9GNyhHE,836 -certifi-2018.4.16.dist-info/DESCRIPTION.rst,sha256=jXrtxvB2mFIsHbuK8aP8RXrMx5yecyAIMZ2cn8Xb_ro,1679 -certifi-2018.4.16.dist-info/LICENSE.txt,sha256=anCkv2sBABbVmmS4rkrY3H9e8W8ftFPMLs13HFo0ETE,1048 -certifi-2018.4.16.dist-info/METADATA,sha256=uYCLBFPwRU0XfEULiHO8iLo1QELisMwd9CSJ_Bw4DIc,2570 -certifi-2018.4.16.dist-info/RECORD,, -certifi-2018.4.16.dist-info/WHEEL,sha256=5wvfB7GvgZAbKBSE9uX9Zbi6LCL-_KgezgHblXhCRnM,113 -certifi-2018.4.16.dist-info/metadata.json,sha256=ayQwq1S2ID9f_MxGU0ZEouhzp5UoCwVtNT3ZLM23p7g,1006 -certifi-2018.4.16.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8 -certifi-2018.4.16.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -certifi/__pycache__/core.cpython-36.pyc,, -certifi/__pycache__/__init__.cpython-36.pyc,, -certifi/__pycache__/__main__.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/WHEEL b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/WHEEL deleted file mode 100644 index 7bf9daa..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.30.0.a0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/metadata.json b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/metadata.json deleted file mode 100644 index ddab4a7..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6"], "extensions": {"python.details": {"contacts": [{"email": "me@kennethreitz.com", "name": "Kenneth Reitz", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}, "project_urls": {"Home": "http://certifi.io/"}}}, "generator": "bdist_wheel (0.30.0.a0)", "license": "MPL-2.0", "metadata_version": "2.0", "name": "certifi", "summary": "Python package for providing Mozilla's CA Bundle.", "version": "2018.4.16"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/top_level.txt deleted file mode 100644 index 963eac5..0000000 --- a/venv/lib/python3.6/site-packages/certifi-2018.4.16.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -certifi diff --git a/venv/lib/python3.6/site-packages/certifi/__init__.py b/venv/lib/python3.6/site-packages/certifi/__init__.py deleted file mode 100644 index 0c4963e..0000000 --- a/venv/lib/python3.6/site-packages/certifi/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .core import where, old_where - -__version__ = "2018.04.16" diff --git a/venv/lib/python3.6/site-packages/certifi/__main__.py b/venv/lib/python3.6/site-packages/certifi/__main__.py deleted file mode 100644 index 5f1da0d..0000000 --- a/venv/lib/python3.6/site-packages/certifi/__main__.py +++ /dev/null @@ -1,2 +0,0 @@ -from certifi import where -print(where()) diff --git a/venv/lib/python3.6/site-packages/certifi/cacert.pem b/venv/lib/python3.6/site-packages/certifi/cacert.pem deleted file mode 100644 index 2713f54..0000000 --- a/venv/lib/python3.6/site-packages/certifi/cacert.pem +++ /dev/null @@ -1,4400 +0,0 @@ - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Subject: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Label: "Visa eCommerce Root" -# Serial: 25952180776285836048024890241505565794 -# MD5 Fingerprint: fc:11:b8:d8:08:93:30:00:6d:23:f9:7e:eb:52:1e:02 -# SHA1 Fingerprint: 70:17:9b:86:8c:00:a4:fa:60:91:52:22:3f:9f:3e:32:bd:e0:05:62 -# SHA256 Fingerprint: 69:fa:c9:bd:55:fb:0a:c7:8d:53:bb:ee:5c:f1:d5:97:98:9f:d0:aa:ab:20:a2:51:51:bd:f1:73:3e:e7:d1:22 ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Label: "QuoVadis Root CA" -# Serial: 985026699 -# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 -# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 -# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 -# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 -# Label: "Security Communication Root CA" -# Serial: 0 -# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a -# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 -# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -# Issuer: CN=Sonera Class2 CA O=Sonera -# Subject: CN=Sonera Class2 CA O=Sonera -# Label: "Sonera Class 2 Root CA" -# Serial: 29 -# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb -# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 -# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: O=Government Root Certification Authority -# Subject: O=Government Root Certification Authority -# Label: "Taiwan GRCA" -# Serial: 42023070807708724159991140556527066870 -# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e -# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 -# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ -MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow -PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR -IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q -gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy -yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts -F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 -jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx -ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC -VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK -YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH -EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN -Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud -DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE -MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK -UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf -qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK -ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE -JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 -hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 -EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm -nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX -udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz -ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe -LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl -pYYsfPQS ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=Class 2 Primary CA O=Certplus -# Subject: CN=Class 2 Primary CA O=Certplus -# Label: "Certplus Class 2 Primary CA" -# Serial: 177770208045934040241468760488327595043 -# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b -# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb -# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Label: "DST Root CA X3" -# Serial: 91299735575339953335919266965803778155 -# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 -# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 -# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GA CA" -# Serial: 86718877871133159090080555911823548314 -# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 -# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 -# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Label: "Deutsche Telekom Root CA 2" -# Serial: 38 -# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 -# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf -# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G2" -# Serial: 10000012 -# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a -# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 -# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Label: "Hongkong Post Root CA 1" -# Serial: 1000 -# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca -# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 -# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 6047274297262753887 -# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 -# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa -# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Label: "Chambers of Commerce Root - 2008" -# Serial: 11806822484801597146 -# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 -# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c -# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Label: "Global Chambersign Root - 2008" -# Serial: 14541511773111788494 -# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 -# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c -# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2011" -# Serial: 0 -# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 -# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d -# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: O=Trustis Limited OU=Trustis FPS Root CA -# Subject: O=Trustis Limited OU=Trustis FPS Root CA -# Label: "Trustis FPS Root CA" -# Serial: 36053640375399034304724988975563710553 -# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d -# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 -# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL -ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx -MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc -MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ -AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH -iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj -vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA -0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB -OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ -BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E -FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 -GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW -zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 -1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE -f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F -jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN -ZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Label: "EE Certification Centre Root CA" -# Serial: 112324828676200291871926431888494945866 -# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f -# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 -# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 -czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG -CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy -MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl -ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS -b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy -euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO -bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw -WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d -MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE -1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ -zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF -BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV -v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG -E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW -iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v -GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Label: "E-Tugra Certification Authority" -# Serial: 7667447206703254355 -# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 -# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 -# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV -BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC -aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV -BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 -Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz -MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ -BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp -em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY -B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH -D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF -Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo -q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D -k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH -fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut -dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM -ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 -zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX -U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 -Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 -XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF -Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR -HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY -GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c -77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 -+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK -vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 -FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl -yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P -AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD -y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d -NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 14367148294922964480859022125800977897474 -# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e -# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb -# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ -FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F -uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX -kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs -ewv4n4Q= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G3" -# Serial: 10003001 -# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 -# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc -# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX -DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP -cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW -IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX -xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy -KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR -9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az -5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 -6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 -Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP -bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt -BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt -XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd -INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp -LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 -Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp -gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh -/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw -0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A -fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq -4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR -1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ -QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM -94B7IWcnMFk= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Label: "Staat der Nederlanden EV Root CA" -# Serial: 10000013 -# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba -# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb -# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y -MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg -TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS -b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS -M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC -UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d -Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p -rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l -pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb -j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC -KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS -/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X -cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH -1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP -px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 -MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u -2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS -v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC -wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy -CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e -vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 -Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa -Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL -eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 -FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc -7uzXLg== ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 -# Subject: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 -# Label: "Certinomis - Root CA" -# Serial: 1 -# MD5 Fingerprint: 14:0a:fd:8d:a8:28:b5:38:69:db:56:7e:61:22:03:3f -# SHA1 Fingerprint: 9d:70:bb:01:a5:a4:a0:18:11:2e:f7:1c:01:b9:32:c5:34:e7:88:a8 -# SHA256 Fingerprint: 2a:99:f5:bc:11:74:b7:3c:bb:1d:62:08:84:e0:1c:34:e5:1c:cb:39:78:da:12:5f:0e:33:26:88:83:bf:41:58 ------BEGIN CERTIFICATE----- -MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET -MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb -BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz -MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx -FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g -Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 -fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl -LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV -WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF -TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb -5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc -CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri -wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ -wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG -m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 -F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng -WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 -2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF -AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ -0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw -F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS -g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj -qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN -h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ -ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V -btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj -Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ -8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW -gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=Certplus Root CA G1 O=Certplus -# Subject: CN=Certplus Root CA G1 O=Certplus -# Label: "Certplus Root CA G1" -# Serial: 1491911565779898356709731176965615564637713 -# MD5 Fingerprint: 7f:09:9c:f7:d9:b9:5c:69:69:56:d5:37:3e:14:0d:42 -# SHA1 Fingerprint: 22:fd:d0:b7:fd:a2:4e:0d:ac:49:2c:a0:ac:a6:7b:6a:1f:e3:f7:66 -# SHA256 Fingerprint: 15:2a:40:2b:fc:df:2c:d5:48:05:4d:22:75:b3:9c:7f:ca:3e:c0:97:80:78:b0:f0:ea:76:e5:61:a6:c7:43:3e ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUA -MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy -dHBsdXMgUm9vdCBDQSBHMTAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBa -MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy -dHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHNr49a -iZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt -6kuJPKNxQv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP -0FG7Yn2ksYyy/yARujVjBYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f -6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTvLRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDE -EW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2z4QTd28n6v+WZxcIbekN -1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc4nBvCGrc -h2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCT -mehd4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV -4EJQeIQEQWGw9CEjjy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPO -WftwenMGE9nTdDckQQoRb5fc5+R+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1Ud -DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSowcCbkahDFXxd -Bie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHYlwuBsTANBgkq -hkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh -66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7 -/SMNkPX0XtPGYX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BS -S7CTKtQ+FjPlnsZlFT5kOwQ/2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j -2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F6ALEUz65noe8zDUa3qHpimOHZR4R -Kttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilXCNQ314cnrUlZp5Gr -RHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWetUNy -6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEV -V/xuZDDCVRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5 -g4VCXA9DO2pJNdWY9BW/+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl -++O/QmueD6i9a5jc2NvLi6Td11n0bt3+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= ------END CERTIFICATE----- - -# Issuer: CN=Certplus Root CA G2 O=Certplus -# Subject: CN=Certplus Root CA G2 O=Certplus -# Label: "Certplus Root CA G2" -# Serial: 1492087096131536844209563509228951875861589 -# MD5 Fingerprint: a7:ee:c4:78:2d:1b:ee:2d:b9:29:ce:d6:a7:96:32:31 -# SHA1 Fingerprint: 4f:65:8e:1f:e9:06:d8:28:02:e9:54:47:41:c9:54:25:5d:69:cc:1a -# SHA256 Fingerprint: 6c:c0:50:41:e6:44:5e:74:69:6c:4c:fb:c9:f8:0f:54:3b:7e:ab:bb:44:b4:ce:6f:78:7c:6a:99:71:c4:2f:17 ------BEGIN CERTIFICATE----- -MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4x -CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs -dXMgUm9vdCBDQSBHMjAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4x -CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs -dXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABM0PW1aC3/BFGtat -93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uNAm8x -Ik0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwj -FNiPwyCrKGBZMB8GA1UdIwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqG -SM49BAMDA2gAMGUCMHD+sAvZ94OX7PNVHdTcswYO/jOYnYs5kGuUIe22113WTNch -p+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjlvPl5adytRSv3tjFzzAal -U5ORGpOucGpnutee5WEaXw== ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G1 O=OpenTrust -# Subject: CN=OpenTrust Root CA G1 O=OpenTrust -# Label: "OpenTrust Root CA G1" -# Serial: 1492036577811947013770400127034825178844775 -# MD5 Fingerprint: 76:00:cc:81:29:cd:55:5e:88:6a:7a:2e:f7:4d:39:da -# SHA1 Fingerprint: 79:91:e8:34:f7:e2:ee:dd:08:95:01:52:e9:55:2d:14:e9:58:d5:7e -# SHA256 Fingerprint: 56:c7:71:28:d9:8c:18:d9:1b:4c:fd:ff:bc:25:ee:91:03:d4:75:8e:a2:ab:ad:82:6a:90:f3:45:7d:46:0e:b4 ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUA -MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w -ZW5UcnVzdCBSb290IENBIEcxMB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAw -MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU -T3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7faYp6b -wiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX -/uMftk87ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR0 -77F9jAHiOH3BX2pfJLKOYheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGP -uY4zbGneWK2gDqdkVBFpRGZPTBKnjix9xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLx -p2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO9z0M+Yo0FMT7MzUj8czx -Kselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq3ywgsNw2 -TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+W -G+Oin6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPw -vFEVVJSmdz7QdFG9URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYY -EQRVzXR7z2FwefR7LFxckvzluFqrTJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUl0YhVyE1 -2jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/PxN3DlCPaTKbYw -DQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E -PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kf -gLMtMrpkZ2CvuVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbS -FXJfLkur1J1juONI5f6ELlgKn0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0 -V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLhX4SPgPL0DTatdrOjteFkdjpY3H1P -XlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80nR14SohWZ25g/4/I -i+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcmGS3t -TAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L91 -09S5zvE/bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/Ky -Pu1svf0OnWZzsD2097+o4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJ -AwSQiumPv+i2tCqjI40cHLI5kqiPAlxAOXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj -1oxx ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G2 O=OpenTrust -# Subject: CN=OpenTrust Root CA G2 O=OpenTrust -# Label: "OpenTrust Root CA G2" -# Serial: 1492012448042702096986875987676935573415441 -# MD5 Fingerprint: 57:24:b6:59:24:6b:ae:c8:fe:1c:0c:20:f2:c0:4e:eb -# SHA1 Fingerprint: 79:5f:88:60:c5:ab:7c:3d:92:e6:cb:f4:8d:e1:45:cd:11:ef:60:0b -# SHA256 Fingerprint: 27:99:58:29:fe:6a:75:15:c1:bf:e8:48:f9:c4:76:1d:b1:6c:22:59:29:25:7b:f4:0d:08:94:f2:9e:a8:ba:f2 ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUA -MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w -ZW5UcnVzdCBSb290IENBIEcyMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAw -MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU -T3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+Ntmh -/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78e -CbY2albz4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/6 -1UWY0jUJ9gNDlP7ZvyCVeYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fE -FY8ElggGQgT4hNYdvJGmQr5J1WqIP7wtUdGejeBSzFfdNTVY27SPJIjki9/ca1TS -gSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz3GIZ38i1MH/1PCZ1Eb3X -G7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj3CzMpSZy -YhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaH -vGOz9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4 -t/bQWVyJ98LVtZR00dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/ -gh7PU3+06yzbXfZqfUAkBXKJOAGTy3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUajn6QiL3 -5okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59M4PLuG53hq8w -DQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz -Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0 -nXGEL8pZ0keImUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qT -RmTFAHneIWv2V6CG1wZy7HBGS4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpT -wm+bREx50B1ws9efAvSyB7DH5fitIw6mVskpEndI2S9G/Tvw/HRwkqWOOAgfZDC2 -t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ6e18CL13zSdkzJTa -TkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97krgCf2 -o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU -3jg9CcCoSmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eA -iN1nE28daCSLT7d0geX0YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14f -WKGVyasvc0rQLW6aWQ9VGHgtPFGml4vmu7JwqkwR3v98KzfUetF3NI/n+UL3PIEM -S1IK ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G3 O=OpenTrust -# Subject: CN=OpenTrust Root CA G3 O=OpenTrust -# Label: "OpenTrust Root CA G3" -# Serial: 1492104908271485653071219941864171170455615 -# MD5 Fingerprint: 21:37:b4:17:16:92:7b:67:46:70:a9:96:d7:a8:13:24 -# SHA1 Fingerprint: 6e:26:64:f3:56:bf:34:55:bf:d1:93:3f:7c:01:de:d8:13:da:8a:a6 -# SHA256 Fingerprint: b7:c3:62:31:70:6e:81:07:8c:36:7c:b8:96:19:8f:1e:32:08:dd:92:69:49:dd:8f:57:09:a4:10:f7:5b:62:92 ------BEGIN CERTIFICATE----- -MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAx -CzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5U -cnVzdCBSb290IENBIEczMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFow -QDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwUT3Bl -blRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARK7liuTcpm -3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5Bta1d -oYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5 -DMlv4VBN0BBY3JWIbTAfBgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAK -BggqhkjOPQQDAwNpADBmAjEAj6jcnboMBBf6Fek9LykBl7+BFjNAk2z8+e2AcG+q -j9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta3U1fJAuwACEl74+nBCZx -4nxp5V2a+EEfOzmTk51V6s2N8fvB ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Label: "LuxTrust Global Root 2" -# Serial: 59914338225734147123941058376788110305822489521 -# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c -# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f -# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 ------BEGIN CERTIFICATE----- -MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL -BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV -BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw -MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B -LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F -ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem -hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 -EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn -Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 -zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ -96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m -j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g -DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ -8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j -X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH -hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB -KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 -Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT -+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL -BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 -BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO -jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 -loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c -qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ -2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ -JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre -zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf -LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ -x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 -oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-1" -# Serial: 15752444095811006489 -# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 -# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a -# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y -IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB -pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h -IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG -A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU -cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid -RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V -seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme -9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV -EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW -hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ -DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD -ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I -/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ -yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts -L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN -zl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-2" -# Serial: 2711694510199101698 -# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 -# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 -# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig -Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk -MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg -Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD -VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy -dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ -QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq -1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp -2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK -DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape -az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF -3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 -oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM -g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 -mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd -BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U -nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw -DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX -dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ -MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL -/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX -CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa -ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW -2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 -N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 -Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB -As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp -5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu -1uwJ ------END CERTIFICATE----- - -# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor ECA-1" -# Serial: 9548242946988625984 -# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c -# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd -# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y -IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig -RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb -3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA -BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 -3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou -owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ -wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF -ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf -BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv -civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 -AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 -soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI -WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi -tJ/X5g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- diff --git a/venv/lib/python3.6/site-packages/certifi/core.py b/venv/lib/python3.6/site-packages/certifi/core.py deleted file mode 100644 index eab9d1d..0000000 --- a/venv/lib/python3.6/site-packages/certifi/core.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -certifi.py -~~~~~~~~~~ - -This module returns the installation location of cacert.pem. -""" -import os -import warnings - - -class DeprecatedBundleWarning(DeprecationWarning): - """ - The weak security bundle is being deprecated. Please bother your service - provider to get them to stop using cross-signed roots. - """ - - -def where(): - f = os.path.dirname(__file__) - - return os.path.join(f, 'cacert.pem') - - -def old_where(): - warnings.warn( - "The weak security bundle has been removed. certifi.old_where() is now an alias " - "of certifi.where(). Please update your code to use certifi.where() instead. " - "certifi.old_where() will be removed in 2018.", - DeprecatedBundleWarning - ) - return where() - -if __name__ == '__main__': - print(where()) diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst deleted file mode 100644 index c0f044d..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,70 +0,0 @@ -Chardet: The Universal Character Encoding Detector --------------------------------------------------- - -.. image:: https://img.shields.io/travis/chardet/chardet/stable.svg - :alt: Build status - :target: https://travis-ci.org/chardet/chardet - -.. image:: https://img.shields.io/coveralls/chardet/chardet/stable.svg - :target: https://coveralls.io/r/chardet/chardet - -.. image:: https://img.shields.io/pypi/v/chardet.svg - :target: https://warehouse.python.org/project/chardet/ - :alt: Latest version on PyPI - -.. image:: https://img.shields.io/pypi/l/chardet.svg - :alt: License - - -Detects - - ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants) - - Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese) - - EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese) - - EUC-KR, ISO-2022-KR (Korean) - - KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic) - - ISO-8859-5, windows-1251 (Bulgarian) - - ISO-8859-1, windows-1252 (Western European languages) - - ISO-8859-7, windows-1253 (Greek) - - ISO-8859-8, windows-1255 (Visual and Logical Hebrew) - - TIS-620 (Thai) - -.. note:: - Our ISO-8859-2 and windows-1250 (Hungarian) probers have been temporarily - disabled until we can retrain the models. - -Requires Python 2.6, 2.7, or 3.3+. - -Installation ------------- - -Install from `PyPI `_:: - - pip install chardet - -Documentation -------------- - -For users, docs are now available at https://chardet.readthedocs.io/. - -Command-line Tool ------------------ - -chardet comes with a command-line script which reports on the encodings of one -or more files:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -About ------ - -This is a continuation of Mark Pilgrim's excellent chardet. Previously, two -versions needed to be maintained: one that supported python 2.x and one that -supported python 3.x. We've recently merged with `Ian Cordasco `_'s -`charade `_ fork, so now we have one -coherent version that works for Python 2.6+. - -:maintainer: Dan Blanchard - - diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA deleted file mode 100644 index 1427867..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/METADATA +++ /dev/null @@ -1,96 +0,0 @@ -Metadata-Version: 2.0 -Name: chardet -Version: 3.0.4 -Summary: Universal encoding detector for Python 2 and 3 -Home-page: https://github.com/chardet/chardet -Author: Daniel Blanchard -Author-email: dan.blanchard@gmail.com -License: LGPL -Keywords: encoding,i18n,xml -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Text Processing :: Linguistic - -Chardet: The Universal Character Encoding Detector --------------------------------------------------- - -.. image:: https://img.shields.io/travis/chardet/chardet/stable.svg - :alt: Build status - :target: https://travis-ci.org/chardet/chardet - -.. image:: https://img.shields.io/coveralls/chardet/chardet/stable.svg - :target: https://coveralls.io/r/chardet/chardet - -.. image:: https://img.shields.io/pypi/v/chardet.svg - :target: https://warehouse.python.org/project/chardet/ - :alt: Latest version on PyPI - -.. image:: https://img.shields.io/pypi/l/chardet.svg - :alt: License - - -Detects - - ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants) - - Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese) - - EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese) - - EUC-KR, ISO-2022-KR (Korean) - - KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic) - - ISO-8859-5, windows-1251 (Bulgarian) - - ISO-8859-1, windows-1252 (Western European languages) - - ISO-8859-7, windows-1253 (Greek) - - ISO-8859-8, windows-1255 (Visual and Logical Hebrew) - - TIS-620 (Thai) - -.. note:: - Our ISO-8859-2 and windows-1250 (Hungarian) probers have been temporarily - disabled until we can retrain the models. - -Requires Python 2.6, 2.7, or 3.3+. - -Installation ------------- - -Install from `PyPI `_:: - - pip install chardet - -Documentation -------------- - -For users, docs are now available at https://chardet.readthedocs.io/. - -Command-line Tool ------------------ - -chardet comes with a command-line script which reports on the encodings of one -or more files:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -About ------ - -This is a continuation of Mark Pilgrim's excellent chardet. Previously, two -versions needed to be maintained: one that supported python 2.x and one that -supported python 3.x. We've recently merged with `Ian Cordasco `_'s -`charade `_ fork, so now we have one -coherent version that works for Python 2.6+. - -:maintainer: Dan Blanchard - - diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD deleted file mode 100644 index a7fcef4..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/RECORD +++ /dev/null @@ -1,91 +0,0 @@ -chardet/__init__.py,sha256=YsP5wQlsHJ2auF1RZJfypiSrCA7_bQiRm3ES_NI76-Y,1559 -chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254 -chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757 -chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411 -chardet/charsetgroupprober.py,sha256=6bDu8YIiRuScX4ca9Igb0U69TA2PGXXDej6Cc4_9kO4,3787 -chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110 -chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590 -chardet/compat.py,sha256=PKTzHkSbtbHDqS9PyujMbX74q1a8mMpeQTDVsQhZMRw,1134 -chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855 -chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661 -chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950 -chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510 -chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749 -chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546 -chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748 -chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621 -chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747 -chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715 -chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754 -chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838 -chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777 -chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643 -chardet/langbulgarianmodel.py,sha256=1HqQS9Pbtnj1xQgxitJMvw8X6kKr5OockNCZWfEQrPE,12839 -chardet/langcyrillicmodel.py,sha256=LODajvsetH87yYDDQKA2CULXUH87tI223dhfjh9Zx9c,17948 -chardet/langgreekmodel.py,sha256=8YAW7bU8YwSJap0kIJSbPMw1BEqzGjWzqcqf0WgUKAA,12688 -chardet/langhebrewmodel.py,sha256=JSnqmE5E62tDLTPTvLpQsg5gOMO4PbdWRvV7Avkc0HA,11345 -chardet/langhungarianmodel.py,sha256=RhapYSG5l0ZaO-VV4Fan5sW0WRGQqhwBM61yx3yxyOA,12592 -chardet/langthaimodel.py,sha256=8l0173Gu_W6G8mxmQOTEF4ls2YdE7FxWf3QkSxEGXJQ,11290 -chardet/langturkishmodel.py,sha256=W22eRNJsqI6uWAfwXSKVWWnCerYqrI8dZQTm_M0lRFk,11102 -chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370 -chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413 -chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012 -chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481 -chardet/sbcharsetprober.py,sha256=LDSpCldDCFlYwUkGkwD2oFxLlPWIWXT09akH_2PiY74,5657 -chardet/sbcsgroupprober.py,sha256=1IprcCB_k1qfmnxGC6MBbxELlKqD3scW6S8YIwdeyXA,3546 -chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774 -chardet/universaldetector.py,sha256=qL0174lSZE442eB21nnktT9_VcAye07laFWUeUrjttY,12485 -chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766 -chardet/version.py,sha256=sp3B08mrDXB-pf3K9fqJ_zeDHOCLC8RrngQyDFap_7g,242 -chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -chardet/cli/chardetect.py,sha256=YBO8L4mXo0WR6_-Fjh_8QxPBoEBNqB9oNxNrdc54AQs,2738 -chardet-3.0.4.dist-info/DESCRIPTION.rst,sha256=PQ4sBsMyKFZkjC6QpmbpLn0UtCNyeb-ZqvCGEgyZMGk,2174 -chardet-3.0.4.dist-info/METADATA,sha256=RV_2I4B1Z586DL8oVO5Kp7X5bUdQ5EuKAvNoAEF8wSw,3239 -chardet-3.0.4.dist-info/RECORD,, -chardet-3.0.4.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110 -chardet-3.0.4.dist-info/entry_points.txt,sha256=fAMmhu5eJ-zAJ-smfqQwRClQ3-nozOCmvJ6-E8lgGJo,60 -chardet-3.0.4.dist-info/metadata.json,sha256=0htbRM18ujyGZDdfowgAqj6Hq2eQtwzwyhaEveKntgo,1375 -chardet-3.0.4.dist-info/top_level.txt,sha256=AowzBbZy4x8EirABDdJSLJZMkJ_53iIag8xfKR6D7kI,8 -../../../bin/chardetect,sha256=WY_SbDOq9AxFrY8BLU0-s1FZ8-D-Pr97OKYYeiyzIjI,263 -chardet-3.0.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -chardet/cli/__pycache__/chardetect.cpython-36.pyc,, -chardet/cli/__pycache__/__init__.cpython-36.pyc,, -chardet/__pycache__/universaldetector.cpython-36.pyc,, -chardet/__pycache__/langhungarianmodel.cpython-36.pyc,, -chardet/__pycache__/latin1prober.cpython-36.pyc,, -chardet/__pycache__/langturkishmodel.cpython-36.pyc,, -chardet/__pycache__/enums.cpython-36.pyc,, -chardet/__pycache__/cp949prober.cpython-36.pyc,, -chardet/__pycache__/langthaimodel.cpython-36.pyc,, -chardet/__pycache__/langbulgarianmodel.cpython-36.pyc,, -chardet/__pycache__/sbcsgroupprober.cpython-36.pyc,, -chardet/__pycache__/langhebrewmodel.cpython-36.pyc,, -chardet/__pycache__/compat.cpython-36.pyc,, -chardet/__pycache__/sbcharsetprober.cpython-36.pyc,, -chardet/__pycache__/__init__.cpython-36.pyc,, -chardet/__pycache__/escsm.cpython-36.pyc,, -chardet/__pycache__/utf8prober.cpython-36.pyc,, -chardet/__pycache__/euckrprober.cpython-36.pyc,, -chardet/__pycache__/euctwprober.cpython-36.pyc,, -chardet/__pycache__/euctwfreq.cpython-36.pyc,, -chardet/__pycache__/mbcssm.cpython-36.pyc,, -chardet/__pycache__/euckrfreq.cpython-36.pyc,, -chardet/__pycache__/langcyrillicmodel.cpython-36.pyc,, -chardet/__pycache__/mbcsgroupprober.cpython-36.pyc,, -chardet/__pycache__/charsetgroupprober.cpython-36.pyc,, -chardet/__pycache__/langgreekmodel.cpython-36.pyc,, -chardet/__pycache__/escprober.cpython-36.pyc,, -chardet/__pycache__/jisfreq.cpython-36.pyc,, -chardet/__pycache__/chardistribution.cpython-36.pyc,, -chardet/__pycache__/version.cpython-36.pyc,, -chardet/__pycache__/sjisprober.cpython-36.pyc,, -chardet/__pycache__/gb2312prober.cpython-36.pyc,, -chardet/__pycache__/gb2312freq.cpython-36.pyc,, -chardet/__pycache__/big5prober.cpython-36.pyc,, -chardet/__pycache__/big5freq.cpython-36.pyc,, -chardet/__pycache__/mbcharsetprober.cpython-36.pyc,, -chardet/__pycache__/codingstatemachine.cpython-36.pyc,, -chardet/__pycache__/jpcntx.cpython-36.pyc,, -chardet/__pycache__/eucjpprober.cpython-36.pyc,, -chardet/__pycache__/hebrewprober.cpython-36.pyc,, -chardet/__pycache__/charsetprober.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL deleted file mode 100644 index 8b6dd1b..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.29.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt deleted file mode 100644 index a884269..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -chardetect = chardet.cli.chardetect:main - diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json deleted file mode 100644 index 8cdf025..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Linguistic"], "extensions": {"python.commands": {"wrap_console": {"chardetect": "chardet.cli.chardetect:main"}}, "python.details": {"contacts": [{"email": "dan.blanchard@gmail.com", "name": "Daniel Blanchard", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/chardet/chardet"}}, "python.exports": {"console_scripts": {"chardetect": "chardet.cli.chardetect:main"}}}, "generator": "bdist_wheel (0.29.0)", "keywords": ["encoding", "i18n", "xml"], "license": "LGPL", "metadata_version": "2.0", "name": "chardet", "summary": "Universal encoding detector for Python 2 and 3", "test_requires": [{"requires": ["hypothesis", "pytest"]}], "version": "3.0.4"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt deleted file mode 100644 index 79236f2..0000000 --- a/venv/lib/python3.6/site-packages/chardet-3.0.4.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -chardet diff --git a/venv/lib/python3.6/site-packages/chardet/__init__.py b/venv/lib/python3.6/site-packages/chardet/__init__.py deleted file mode 100644 index 0f9f820..0000000 --- a/venv/lib/python3.6/site-packages/chardet/__init__.py +++ /dev/null @@ -1,39 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -from .compat import PY2, PY3 -from .universaldetector import UniversalDetector -from .version import __version__, VERSION - - -def detect(byte_str): - """ - Detect the encoding of the given byte string. - - :param byte_str: The byte sequence to examine. - :type byte_str: ``bytes`` or ``bytearray`` - """ - if not isinstance(byte_str, bytearray): - if not isinstance(byte_str, bytes): - raise TypeError('Expected object of type bytes or bytearray, got: ' - '{0}'.format(type(byte_str))) - else: - byte_str = bytearray(byte_str) - detector = UniversalDetector() - detector.feed(byte_str) - return detector.close() diff --git a/venv/lib/python3.6/site-packages/chardet/big5freq.py b/venv/lib/python3.6/site-packages/chardet/big5freq.py deleted file mode 100644 index 38f3251..0000000 --- a/venv/lib/python3.6/site-packages/chardet/big5freq.py +++ /dev/null @@ -1,386 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Big5 frequency table -# by Taiwan's Mandarin Promotion Council -# -# -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -#Char to FreqOrder table -BIG5_TABLE_SIZE = 5376 - -BIG5_CHAR_TO_FREQ_ORDER = ( - 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 -3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 -1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 - 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 -3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 -4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 -5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 - 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 - 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 - 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 -2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 -1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 -3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 - 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 -3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 -2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 - 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 -3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 -1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 -5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 - 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 -5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 -1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 - 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 - 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 -3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 -3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 - 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 -2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 -2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 - 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 - 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 -3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 -1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 -1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 -1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 -2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 - 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 -4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 -1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 -5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 -2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 - 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 - 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 - 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 - 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 -5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 - 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 -1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 - 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 - 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 -5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 -1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 - 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 -3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 -4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 -3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 - 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 - 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 -1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 -4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 -3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 -3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 -2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 -5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 -3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 -5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 -1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 -2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 -1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 - 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 -1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 -4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 -3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 - 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 - 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 - 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 -2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 -5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 -1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 -2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 -1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 -1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 -5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 -5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 -5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 -3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 -4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 -4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 -2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 -5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 -3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 - 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 -5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 -5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 -1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 -2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 -3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 -4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 -5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 -3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 -4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 -1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 -1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 -4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 -1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 - 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 -1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 -1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 -3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 - 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 -5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 -2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 -1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 -1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 -5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 - 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 -4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 - 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 -2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 - 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 -1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 -1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 - 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 -4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 -4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 -1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 -3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 -5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 -5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 -1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 -2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 -1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 -3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 -2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 -3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 -2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 -4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 -4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 -3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 - 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 -3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 - 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 -3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 -4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 -3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 -1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 -5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 - 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 -5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 -1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 - 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 -4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 -4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 - 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 -2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 -2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 -3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 -1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 -4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 -2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 -1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 -1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 -2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 -3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 -1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 -5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 -1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 -4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 -1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 - 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 -1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 -4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 -4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 -2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 -1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 -4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 - 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 -5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 -2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 -3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 -4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 - 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 -5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 -5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 -1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 -4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 -4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 -2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 -3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 -3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 -2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 -1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 -4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 -3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 -3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 -2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 -4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 -5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 -3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 -2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 -3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 -1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 -2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 -3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 -4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 -2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 -2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 -5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 -1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 -2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 -1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 -3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 -4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 -2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 -3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 -3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 -2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 -4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 -2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 -3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 -4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 -5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 -3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 - 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 -1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 -4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 -1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 -4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 -5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 - 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 -5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 -5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 -2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 -3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 -2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 -2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 - 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 -1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 -4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 -3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 -3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 - 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 -2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 - 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 -2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 -4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 -1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 -4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 -1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 -3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 - 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 -3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 -5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 -5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 -3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 -3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 -1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 -2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 -5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 -1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 -1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 -3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 - 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 -1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 -4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 -5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 -2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 -3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 - 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 -1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 -2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 -2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 -5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 -5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 -5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 -2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 -2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 -1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 -4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 -3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 -3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 -4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 -4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 -2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 -2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 -5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 -4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 -5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 -4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 - 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 - 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 -1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 -3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 -4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 -1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 -5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 -2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 -2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 -3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 -5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 -1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 -3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 -5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 -1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 -5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 -2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 -3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 -2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 -3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 -3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 -3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 -4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 - 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 -2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 -4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 -3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 -5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 -1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 -5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 - 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 -1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 - 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 -4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 -1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 -4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 -1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 - 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 -3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 -4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 -5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 - 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 -3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 - 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 -2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 -) - diff --git a/venv/lib/python3.6/site-packages/chardet/big5prober.py b/venv/lib/python3.6/site-packages/chardet/big5prober.py deleted file mode 100644 index 98f9970..0000000 --- a/venv/lib/python3.6/site-packages/chardet/big5prober.py +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import Big5DistributionAnalysis -from .mbcssm import BIG5_SM_MODEL - - -class Big5Prober(MultiByteCharSetProber): - def __init__(self): - super(Big5Prober, self).__init__() - self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) - self.distribution_analyzer = Big5DistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "Big5" - - @property - def language(self): - return "Chinese" diff --git a/venv/lib/python3.6/site-packages/chardet/chardistribution.py b/venv/lib/python3.6/site-packages/chardet/chardistribution.py deleted file mode 100644 index c0395f4..0000000 --- a/venv/lib/python3.6/site-packages/chardet/chardistribution.py +++ /dev/null @@ -1,233 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, - EUCTW_TYPICAL_DISTRIBUTION_RATIO) -from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, - EUCKR_TYPICAL_DISTRIBUTION_RATIO) -from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, - GB2312_TYPICAL_DISTRIBUTION_RATIO) -from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, - BIG5_TYPICAL_DISTRIBUTION_RATIO) -from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, - JIS_TYPICAL_DISTRIBUTION_RATIO) - - -class CharDistributionAnalysis(object): - ENOUGH_DATA_THRESHOLD = 1024 - SURE_YES = 0.99 - SURE_NO = 0.01 - MINIMUM_DATA_THRESHOLD = 3 - - def __init__(self): - # Mapping table to get frequency order from char order (get from - # GetOrder()) - self._char_to_freq_order = None - self._table_size = None # Size of above table - # This is a constant value which varies from language to language, - # used in calculating confidence. See - # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html - # for further detail. - self.typical_distribution_ratio = None - self._done = None - self._total_chars = None - self._freq_chars = None - self.reset() - - def reset(self): - """reset analyser, clear any state""" - # If this flag is set to True, detection is done and conclusion has - # been made - self._done = False - self._total_chars = 0 # Total characters encountered - # The number of characters whose frequency order is less than 512 - self._freq_chars = 0 - - def feed(self, char, char_len): - """feed a character with known length""" - if char_len == 2: - # we only care about 2-bytes character in our distribution analysis - order = self.get_order(char) - else: - order = -1 - if order >= 0: - self._total_chars += 1 - # order is valid - if order < self._table_size: - if 512 > self._char_to_freq_order[order]: - self._freq_chars += 1 - - def get_confidence(self): - """return confidence based on existing data""" - # if we didn't receive any character in our consideration range, - # return negative answer - if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: - return self.SURE_NO - - if self._total_chars != self._freq_chars: - r = (self._freq_chars / ((self._total_chars - self._freq_chars) - * self.typical_distribution_ratio)) - if r < self.SURE_YES: - return r - - # normalize confidence (we don't want to be 100% sure) - return self.SURE_YES - - def got_enough_data(self): - # It is not necessary to receive all data to draw conclusion. - # For charset detection, certain amount of data is enough - return self._total_chars > self.ENOUGH_DATA_THRESHOLD - - def get_order(self, byte_str): - # We do not handle characters based on the original encoding string, - # but convert this encoding string to a number, here called order. - # This allows multiple encodings of a language to share one frequency - # table. - return -1 - - -class EUCTWDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCTWDistributionAnalysis, self).__init__() - self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER - self._table_size = EUCTW_TABLE_SIZE - self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-TW encoding, we are interested - # first byte range: 0xc4 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = byte_str[0] - if first_char >= 0xC4: - return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 - else: - return -1 - - -class EUCKRDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCKRDistributionAnalysis, self).__init__() - self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER - self._table_size = EUCKR_TABLE_SIZE - self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-KR encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = byte_str[0] - if first_char >= 0xB0: - return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 - else: - return -1 - - -class GB2312DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(GB2312DistributionAnalysis, self).__init__() - self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER - self._table_size = GB2312_TABLE_SIZE - self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for GB2312 encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if (first_char >= 0xB0) and (second_char >= 0xA1): - return 94 * (first_char - 0xB0) + second_char - 0xA1 - else: - return -1 - - -class Big5DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(Big5DistributionAnalysis, self).__init__() - self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER - self._table_size = BIG5_TABLE_SIZE - self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for big5 encoding, we are interested - # first byte range: 0xa4 -- 0xfe - # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if first_char >= 0xA4: - if second_char >= 0xA1: - return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 - else: - return 157 * (first_char - 0xA4) + second_char - 0x40 - else: - return -1 - - -class SJISDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(SJISDistributionAnalysis, self).__init__() - self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER - self._table_size = JIS_TABLE_SIZE - self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for sjis encoding, we are interested - # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe - # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if (first_char >= 0x81) and (first_char <= 0x9F): - order = 188 * (first_char - 0x81) - elif (first_char >= 0xE0) and (first_char <= 0xEF): - order = 188 * (first_char - 0xE0 + 31) - else: - return -1 - order = order + second_char - 0x40 - if second_char > 0x7F: - order = -1 - return order - - -class EUCJPDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCJPDistributionAnalysis, self).__init__() - self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER - self._table_size = JIS_TABLE_SIZE - self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-JP encoding, we are interested - # first byte range: 0xa0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - char = byte_str[0] - if char >= 0xA0: - return 94 * (char - 0xA1) + byte_str[1] - 0xa1 - else: - return -1 diff --git a/venv/lib/python3.6/site-packages/chardet/charsetgroupprober.py b/venv/lib/python3.6/site-packages/chardet/charsetgroupprober.py deleted file mode 100644 index 8b3738e..0000000 --- a/venv/lib/python3.6/site-packages/chardet/charsetgroupprober.py +++ /dev/null @@ -1,106 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import ProbingState -from .charsetprober import CharSetProber - - -class CharSetGroupProber(CharSetProber): - def __init__(self, lang_filter=None): - super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) - self._active_num = 0 - self.probers = [] - self._best_guess_prober = None - - def reset(self): - super(CharSetGroupProber, self).reset() - self._active_num = 0 - for prober in self.probers: - if prober: - prober.reset() - prober.active = True - self._active_num += 1 - self._best_guess_prober = None - - @property - def charset_name(self): - if not self._best_guess_prober: - self.get_confidence() - if not self._best_guess_prober: - return None - return self._best_guess_prober.charset_name - - @property - def language(self): - if not self._best_guess_prober: - self.get_confidence() - if not self._best_guess_prober: - return None - return self._best_guess_prober.language - - def feed(self, byte_str): - for prober in self.probers: - if not prober: - continue - if not prober.active: - continue - state = prober.feed(byte_str) - if not state: - continue - if state == ProbingState.FOUND_IT: - self._best_guess_prober = prober - return self.state - elif state == ProbingState.NOT_ME: - prober.active = False - self._active_num -= 1 - if self._active_num <= 0: - self._state = ProbingState.NOT_ME - return self.state - return self.state - - def get_confidence(self): - state = self.state - if state == ProbingState.FOUND_IT: - return 0.99 - elif state == ProbingState.NOT_ME: - return 0.01 - best_conf = 0.0 - self._best_guess_prober = None - for prober in self.probers: - if not prober: - continue - if not prober.active: - self.logger.debug('%s not active', prober.charset_name) - continue - conf = prober.get_confidence() - self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) - if best_conf < conf: - best_conf = conf - self._best_guess_prober = prober - if not self._best_guess_prober: - return 0.0 - return best_conf diff --git a/venv/lib/python3.6/site-packages/chardet/charsetprober.py b/venv/lib/python3.6/site-packages/chardet/charsetprober.py deleted file mode 100644 index eac4e59..0000000 --- a/venv/lib/python3.6/site-packages/chardet/charsetprober.py +++ /dev/null @@ -1,145 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import logging -import re - -from .enums import ProbingState - - -class CharSetProber(object): - - SHORTCUT_THRESHOLD = 0.95 - - def __init__(self, lang_filter=None): - self._state = None - self.lang_filter = lang_filter - self.logger = logging.getLogger(__name__) - - def reset(self): - self._state = ProbingState.DETECTING - - @property - def charset_name(self): - return None - - def feed(self, buf): - pass - - @property - def state(self): - return self._state - - def get_confidence(self): - return 0.0 - - @staticmethod - def filter_high_byte_only(buf): - buf = re.sub(b'([\x00-\x7F])+', b' ', buf) - return buf - - @staticmethod - def filter_international_words(buf): - """ - We define three types of bytes: - alphabet: english alphabets [a-zA-Z] - international: international characters [\x80-\xFF] - marker: everything else [^a-zA-Z\x80-\xFF] - - The input buffer can be thought to contain a series of words delimited - by markers. This function works to filter all words that contain at - least one international character. All contiguous sequences of markers - are replaced by a single space ascii character. - - This filter applies to all scripts which do not use English characters. - """ - filtered = bytearray() - - # This regex expression filters out only words that have at-least one - # international character. The word may include one marker character at - # the end. - words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', - buf) - - for word in words: - filtered.extend(word[:-1]) - - # If the last character in the word is a marker, replace it with a - # space as markers shouldn't affect our analysis (they are used - # similarly across all languages and may thus have similar - # frequencies). - last_char = word[-1:] - if not last_char.isalpha() and last_char < b'\x80': - last_char = b' ' - filtered.extend(last_char) - - return filtered - - @staticmethod - def filter_with_english_letters(buf): - """ - Returns a copy of ``buf`` that retains only the sequences of English - alphabet and high byte characters that are not between <> characters. - Also retains English alphabet and high byte characters immediately - before occurrences of >. - - This filter can be applied to all scripts which contain both English - characters and extended ASCII characters, but is currently only used by - ``Latin1Prober``. - """ - filtered = bytearray() - in_tag = False - prev = 0 - - for curr in range(len(buf)): - # Slice here to get bytes instead of an int with Python 3 - buf_char = buf[curr:curr + 1] - # Check if we're coming out of or entering an HTML tag - if buf_char == b'>': - in_tag = False - elif buf_char == b'<': - in_tag = True - - # If current character is not extended-ASCII and not alphabetic... - if buf_char < b'\x80' and not buf_char.isalpha(): - # ...and we're not in a tag - if curr > prev and not in_tag: - # Keep everything after last non-extended-ASCII, - # non-alphabetic character - filtered.extend(buf[prev:curr]) - # Output a space to delimit stretch we kept - filtered.extend(b' ') - prev = curr + 1 - - # If we're not in a tag... - if not in_tag: - # Keep everything after last non-extended-ASCII, non-alphabetic - # character - filtered.extend(buf[prev:]) - - return filtered diff --git a/venv/lib/python3.6/site-packages/chardet/cli/__init__.py b/venv/lib/python3.6/site-packages/chardet/cli/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/chardet/cli/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/chardet/cli/chardetect.py b/venv/lib/python3.6/site-packages/chardet/cli/chardetect.py deleted file mode 100644 index f0a4cc5..0000000 --- a/venv/lib/python3.6/site-packages/chardet/cli/chardetect.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python -""" -Script which takes one or more file paths and reports on their detected -encodings - -Example:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -If no paths are provided, it takes its input from stdin. - -""" - -from __future__ import absolute_import, print_function, unicode_literals - -import argparse -import sys - -from chardet import __version__ -from chardet.compat import PY2 -from chardet.universaldetector import UniversalDetector - - -def description_of(lines, name='stdin'): - """ - Return a string describing the probable encoding of a file or - list of strings. - - :param lines: The lines to get the encoding of. - :type lines: Iterable of bytes - :param name: Name of file or collection of lines - :type name: str - """ - u = UniversalDetector() - for line in lines: - line = bytearray(line) - u.feed(line) - # shortcut out of the loop to save reading further - particularly useful if we read a BOM. - if u.done: - break - u.close() - result = u.result - if PY2: - name = name.decode(sys.getfilesystemencoding(), 'ignore') - if result['encoding']: - return '{0}: {1} with confidence {2}'.format(name, result['encoding'], - result['confidence']) - else: - return '{0}: no result'.format(name) - - -def main(argv=None): - """ - Handles command line arguments and gets things started. - - :param argv: List of arguments, as if specified on the command-line. - If None, ``sys.argv[1:]`` is used instead. - :type argv: list of str - """ - # Get command line arguments - parser = argparse.ArgumentParser( - description="Takes one or more file paths and reports their detected \ - encodings") - parser.add_argument('input', - help='File whose encoding we would like to determine. \ - (default: stdin)', - type=argparse.FileType('rb'), nargs='*', - default=[sys.stdin if PY2 else sys.stdin.buffer]) - parser.add_argument('--version', action='version', - version='%(prog)s {0}'.format(__version__)) - args = parser.parse_args(argv) - - for f in args.input: - if f.isatty(): - print("You are running chardetect interactively. Press " + - "CTRL-D twice at the start of a blank line to signal the " + - "end of your input. If you want help, run chardetect " + - "--help\n", file=sys.stderr) - print(description_of(f, f.name)) - - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/chardet/codingstatemachine.py b/venv/lib/python3.6/site-packages/chardet/codingstatemachine.py deleted file mode 100644 index 68fba44..0000000 --- a/venv/lib/python3.6/site-packages/chardet/codingstatemachine.py +++ /dev/null @@ -1,88 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import logging - -from .enums import MachineState - - -class CodingStateMachine(object): - """ - A state machine to verify a byte sequence for a particular encoding. For - each byte the detector receives, it will feed that byte to every active - state machine available, one byte at a time. The state machine changes its - state based on its previous state and the byte it receives. There are 3 - states in a state machine that are of interest to an auto-detector: - - START state: This is the state to start with, or a legal byte sequence - (i.e. a valid code point) for character has been identified. - - ME state: This indicates that the state machine identified a byte sequence - that is specific to the charset it is designed for and that - there is no other possible encoding which can contain this byte - sequence. This will to lead to an immediate positive answer for - the detector. - - ERROR state: This indicates the state machine identified an illegal byte - sequence for that encoding. This will lead to an immediate - negative answer for this encoding. Detector will exclude this - encoding from consideration from here on. - """ - def __init__(self, sm): - self._model = sm - self._curr_byte_pos = 0 - self._curr_char_len = 0 - self._curr_state = None - self.logger = logging.getLogger(__name__) - self.reset() - - def reset(self): - self._curr_state = MachineState.START - - def next_state(self, c): - # for each byte we get its class - # if it is first byte, we also get byte length - byte_class = self._model['class_table'][c] - if self._curr_state == MachineState.START: - self._curr_byte_pos = 0 - self._curr_char_len = self._model['char_len_table'][byte_class] - # from byte's class and state_table, we get its next state - curr_state = (self._curr_state * self._model['class_factor'] - + byte_class) - self._curr_state = self._model['state_table'][curr_state] - self._curr_byte_pos += 1 - return self._curr_state - - def get_current_charlen(self): - return self._curr_char_len - - def get_coding_state_machine(self): - return self._model['name'] - - @property - def language(self): - return self._model['language'] diff --git a/venv/lib/python3.6/site-packages/chardet/compat.py b/venv/lib/python3.6/site-packages/chardet/compat.py deleted file mode 100644 index ddd7468..0000000 --- a/venv/lib/python3.6/site-packages/chardet/compat.py +++ /dev/null @@ -1,34 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# Contributor(s): -# Dan Blanchard -# Ian Cordasco -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys - - -if sys.version_info < (3, 0): - PY2 = True - PY3 = False - base_str = (str, unicode) - text_type = unicode -else: - PY2 = False - PY3 = True - base_str = (bytes, str) - text_type = str diff --git a/venv/lib/python3.6/site-packages/chardet/cp949prober.py b/venv/lib/python3.6/site-packages/chardet/cp949prober.py deleted file mode 100644 index efd793a..0000000 --- a/venv/lib/python3.6/site-packages/chardet/cp949prober.py +++ /dev/null @@ -1,49 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .chardistribution import EUCKRDistributionAnalysis -from .codingstatemachine import CodingStateMachine -from .mbcharsetprober import MultiByteCharSetProber -from .mbcssm import CP949_SM_MODEL - - -class CP949Prober(MultiByteCharSetProber): - def __init__(self): - super(CP949Prober, self).__init__() - self.coding_sm = CodingStateMachine(CP949_SM_MODEL) - # NOTE: CP949 is a superset of EUC-KR, so the distribution should be - # not different. - self.distribution_analyzer = EUCKRDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "CP949" - - @property - def language(self): - return "Korean" diff --git a/venv/lib/python3.6/site-packages/chardet/enums.py b/venv/lib/python3.6/site-packages/chardet/enums.py deleted file mode 100644 index 0451207..0000000 --- a/venv/lib/python3.6/site-packages/chardet/enums.py +++ /dev/null @@ -1,76 +0,0 @@ -""" -All of the Enums that are used throughout the chardet package. - -:author: Dan Blanchard (dan.blanchard@gmail.com) -""" - - -class InputState(object): - """ - This enum represents the different states a universal detector can be in. - """ - PURE_ASCII = 0 - ESC_ASCII = 1 - HIGH_BYTE = 2 - - -class LanguageFilter(object): - """ - This enum represents the different language filters we can apply to a - ``UniversalDetector``. - """ - CHINESE_SIMPLIFIED = 0x01 - CHINESE_TRADITIONAL = 0x02 - JAPANESE = 0x04 - KOREAN = 0x08 - NON_CJK = 0x10 - ALL = 0x1F - CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL - CJK = CHINESE | JAPANESE | KOREAN - - -class ProbingState(object): - """ - This enum represents the different states a prober can be in. - """ - DETECTING = 0 - FOUND_IT = 1 - NOT_ME = 2 - - -class MachineState(object): - """ - This enum represents the different states a state machine can be in. - """ - START = 0 - ERROR = 1 - ITS_ME = 2 - - -class SequenceLikelihood(object): - """ - This enum represents the likelihood of a character following the previous one. - """ - NEGATIVE = 0 - UNLIKELY = 1 - LIKELY = 2 - POSITIVE = 3 - - @classmethod - def get_num_categories(cls): - """:returns: The number of likelihood categories in the enum.""" - return 4 - - -class CharacterCategory(object): - """ - This enum represents the different categories language models for - ``SingleByteCharsetProber`` put characters into. - - Anything less than CONTROL is considered a letter. - """ - UNDEFINED = 255 - LINE_BREAK = 254 - SYMBOL = 253 - DIGIT = 252 - CONTROL = 251 diff --git a/venv/lib/python3.6/site-packages/chardet/escprober.py b/venv/lib/python3.6/site-packages/chardet/escprober.py deleted file mode 100644 index c70493f..0000000 --- a/venv/lib/python3.6/site-packages/chardet/escprober.py +++ /dev/null @@ -1,101 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .codingstatemachine import CodingStateMachine -from .enums import LanguageFilter, ProbingState, MachineState -from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, - ISO2022KR_SM_MODEL) - - -class EscCharSetProber(CharSetProber): - """ - This CharSetProber uses a "code scheme" approach for detecting encodings, - whereby easily recognizable escape or shift sequences are relied on to - identify these encodings. - """ - - def __init__(self, lang_filter=None): - super(EscCharSetProber, self).__init__(lang_filter=lang_filter) - self.coding_sm = [] - if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: - self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) - self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) - if self.lang_filter & LanguageFilter.JAPANESE: - self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) - if self.lang_filter & LanguageFilter.KOREAN: - self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) - self.active_sm_count = None - self._detected_charset = None - self._detected_language = None - self._state = None - self.reset() - - def reset(self): - super(EscCharSetProber, self).reset() - for coding_sm in self.coding_sm: - if not coding_sm: - continue - coding_sm.active = True - coding_sm.reset() - self.active_sm_count = len(self.coding_sm) - self._detected_charset = None - self._detected_language = None - - @property - def charset_name(self): - return self._detected_charset - - @property - def language(self): - return self._detected_language - - def get_confidence(self): - if self._detected_charset: - return 0.99 - else: - return 0.00 - - def feed(self, byte_str): - for c in byte_str: - for coding_sm in self.coding_sm: - if not coding_sm or not coding_sm.active: - continue - coding_state = coding_sm.next_state(c) - if coding_state == MachineState.ERROR: - coding_sm.active = False - self.active_sm_count -= 1 - if self.active_sm_count <= 0: - self._state = ProbingState.NOT_ME - return self.state - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - self._detected_charset = coding_sm.get_coding_state_machine() - self._detected_language = coding_sm.language - return self.state - - return self.state diff --git a/venv/lib/python3.6/site-packages/chardet/escsm.py b/venv/lib/python3.6/site-packages/chardet/escsm.py deleted file mode 100644 index 0069523..0000000 --- a/venv/lib/python3.6/site-packages/chardet/escsm.py +++ /dev/null @@ -1,246 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import MachineState - -HZ_CLS = ( -1,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,0,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,4,0,5,2,0, # 78 - 7f -1,1,1,1,1,1,1,1, # 80 - 87 -1,1,1,1,1,1,1,1, # 88 - 8f -1,1,1,1,1,1,1,1, # 90 - 97 -1,1,1,1,1,1,1,1, # 98 - 9f -1,1,1,1,1,1,1,1, # a0 - a7 -1,1,1,1,1,1,1,1, # a8 - af -1,1,1,1,1,1,1,1, # b0 - b7 -1,1,1,1,1,1,1,1, # b8 - bf -1,1,1,1,1,1,1,1, # c0 - c7 -1,1,1,1,1,1,1,1, # c8 - cf -1,1,1,1,1,1,1,1, # d0 - d7 -1,1,1,1,1,1,1,1, # d8 - df -1,1,1,1,1,1,1,1, # e0 - e7 -1,1,1,1,1,1,1,1, # e8 - ef -1,1,1,1,1,1,1,1, # f0 - f7 -1,1,1,1,1,1,1,1, # f8 - ff -) - -HZ_ST = ( -MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 - 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f - 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 - 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f -) - -HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) - -HZ_SM_MODEL = {'class_table': HZ_CLS, - 'class_factor': 6, - 'state_table': HZ_ST, - 'char_len_table': HZ_CHAR_LEN_TABLE, - 'name': "HZ-GB-2312", - 'language': 'Chinese'} - -ISO2022CN_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,3,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,4,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022CN_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 -MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f -MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 - 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f -) - -ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, - 'class_factor': 9, - 'state_table': ISO2022CN_ST, - 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, - 'name': "ISO-2022-CN", - 'language': 'Chinese'} - -ISO2022JP_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,2,2, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,7,0,0,0, # 20 - 27 -3,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -6,0,4,0,8,0,0,0, # 40 - 47 -0,9,5,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022JP_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 -MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f -MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 -) - -ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, - 'class_factor': 10, - 'state_table': ISO2022JP_ST, - 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, - 'name': "ISO-2022-JP", - 'language': 'Japanese'} - -ISO2022KR_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,3,0,0,0, # 20 - 27 -0,4,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,5,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022KR_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 -) - -ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) - -ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, - 'class_factor': 6, - 'state_table': ISO2022KR_ST, - 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, - 'name': "ISO-2022-KR", - 'language': 'Korean'} - - diff --git a/venv/lib/python3.6/site-packages/chardet/eucjpprober.py b/venv/lib/python3.6/site-packages/chardet/eucjpprober.py deleted file mode 100644 index 20ce8f7..0000000 --- a/venv/lib/python3.6/site-packages/chardet/eucjpprober.py +++ /dev/null @@ -1,92 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import ProbingState, MachineState -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCJPDistributionAnalysis -from .jpcntx import EUCJPContextAnalysis -from .mbcssm import EUCJP_SM_MODEL - - -class EUCJPProber(MultiByteCharSetProber): - def __init__(self): - super(EUCJPProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) - self.distribution_analyzer = EUCJPDistributionAnalysis() - self.context_analyzer = EUCJPContextAnalysis() - self.reset() - - def reset(self): - super(EUCJPProber, self).reset() - self.context_analyzer.reset() - - @property - def charset_name(self): - return "EUC-JP" - - @property - def language(self): - return "Japanese" - - def feed(self, byte_str): - for i in range(len(byte_str)): - # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.context_analyzer.feed(self._last_char, char_len) - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.context_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.context_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - context_conf = self.context_analyzer.get_confidence() - distrib_conf = self.distribution_analyzer.get_confidence() - return max(context_conf, distrib_conf) diff --git a/venv/lib/python3.6/site-packages/chardet/euckrfreq.py b/venv/lib/python3.6/site-packages/chardet/euckrfreq.py deleted file mode 100644 index b68078c..0000000 --- a/venv/lib/python3.6/site-packages/chardet/euckrfreq.py +++ /dev/null @@ -1,195 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology - -# 128 --> 0.79 -# 256 --> 0.92 -# 512 --> 0.986 -# 1024 --> 0.99944 -# 2048 --> 0.99999 -# -# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 -# Random Distribution Ration = 512 / (2350-512) = 0.279. -# -# Typical Distribution Ratio - -EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 - -EUCKR_TABLE_SIZE = 2352 - -# Char to FreqOrder table , -EUCKR_CHAR_TO_FREQ_ORDER = ( - 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, -1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, -1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, - 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, - 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, - 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, -1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, - 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, - 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, -1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, -1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, -1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, -1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, -1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, - 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, -1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, -1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, -1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, -1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, - 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, -1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, - 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, - 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, -1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, - 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, -1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, - 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, - 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, -1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, -1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, -1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, -1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, - 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, -1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, - 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, - 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, -1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, -1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, -1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, -1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, -1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, -1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, - 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, - 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, - 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, -1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, - 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, -1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, - 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, - 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, -2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, - 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, - 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, -2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, -2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, -2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, - 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, - 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, -2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, - 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, -1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, -2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, -1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, -2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, -2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, -1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, - 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, -2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, -2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, - 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, - 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, -2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, -1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, -2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, -2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, -2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, -2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, -2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, -2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, -1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, -2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, -2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, -2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, -2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, -2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, -1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, -1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, -2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, -1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, -2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, -1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, - 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, -2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, - 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, -2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, - 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, -2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, -2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, - 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, -2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, -1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, - 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, -1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, -2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, -1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, -2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, - 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, -2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, -1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, -2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, -1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, -2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, -1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, - 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, -2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, -2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, - 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, - 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, -1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, -1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, - 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, -2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, -2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, - 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, - 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, - 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, -2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, - 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, - 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, -2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, -2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, - 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, -2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, -1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, - 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, -2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, -2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, -2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, - 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, - 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, - 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, -2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, -2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, -2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, -1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, -2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, - 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 -) - diff --git a/venv/lib/python3.6/site-packages/chardet/euckrprober.py b/venv/lib/python3.6/site-packages/chardet/euckrprober.py deleted file mode 100644 index 345a060..0000000 --- a/venv/lib/python3.6/site-packages/chardet/euckrprober.py +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCKRDistributionAnalysis -from .mbcssm import EUCKR_SM_MODEL - - -class EUCKRProber(MultiByteCharSetProber): - def __init__(self): - super(EUCKRProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) - self.distribution_analyzer = EUCKRDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "EUC-KR" - - @property - def language(self): - return "Korean" diff --git a/venv/lib/python3.6/site-packages/chardet/euctwfreq.py b/venv/lib/python3.6/site-packages/chardet/euctwfreq.py deleted file mode 100644 index ed7a995..0000000 --- a/venv/lib/python3.6/site-packages/chardet/euctwfreq.py +++ /dev/null @@ -1,387 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# EUCTW frequency table -# Converted from big5 work -# by Taiwan's Mandarin Promotion Council -# - -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -# Char to FreqOrder table , -EUCTW_TABLE_SIZE = 5376 - -EUCTW_CHAR_TO_FREQ_ORDER = ( - 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 -3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 -1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 - 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 -3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 -4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 -7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 - 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 - 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 - 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 -2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 -1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 -3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 - 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 -3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 -2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 - 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 -3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 -1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 -7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 - 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 -7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 -1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 - 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 - 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 -3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 -3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 - 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 -2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 -2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 - 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 - 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 -3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 -1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 -1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 -1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 -2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 - 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 -4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 -1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 -7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 -2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 - 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 - 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 - 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 - 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 -7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 - 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 -1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 - 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 - 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 -7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 -1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 - 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 -3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 -4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 -3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 - 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 - 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 -1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 -4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 -3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 -3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 -2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 -7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 -3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 -7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 -1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 -2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 -1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 - 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 -1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 -4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 -3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 - 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 - 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 - 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 -2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 -7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 -1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 -2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 -1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 -1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 -7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 -7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 -7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 -3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 -4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 -1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 -7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 -2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 -7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 -3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 -3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 -7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 -2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 -7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 - 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 -4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 -2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 -7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 -3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 -2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 -2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 - 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 -2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 -1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 -1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 -2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 -1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 -7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 -7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 -2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 -4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 -1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 -7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 - 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 -4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 - 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 -2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 - 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 -1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 -1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 - 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 -3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 -3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 -1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 -3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 -7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 -7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 -1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 -2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 -1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 -3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 -2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 -3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 -2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 -4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 -4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 -3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 - 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 -3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 - 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 -3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 -3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 -3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 -1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 -7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 - 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 -7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 -1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 - 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 -4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 -3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 - 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 -2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 -2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 -3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 -1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 -4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 -2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 -1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 -1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 -2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 -3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 -1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 -7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 -1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 -4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 -1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 - 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 -1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 -3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 -3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 -2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 -1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 -4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 - 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 -7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 -2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 -3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 -4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 - 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 -7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 -7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 -1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 -4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 -3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 -2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 -3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 -3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 -2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 -1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 -4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 -3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 -3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 -2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 -4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 -7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 -3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 -2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 -3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 -1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 -2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 -3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 -4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 -2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 -2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 -7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 -1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 -2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 -1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 -3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 -4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 -2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 -3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 -3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 -2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 -4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 -2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 -3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 -4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 -7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 -3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 - 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 -1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 -4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 -1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 -4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 -7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 - 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 -7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 -2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 -1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 -1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 -3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 - 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 - 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 - 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 -3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 -2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 - 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 -7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 -1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 -3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 -7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 -1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 -7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 -4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 -1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 -2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 -2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 -4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 - 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 - 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 -3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 -3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 -1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 -2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 -7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 -1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 -1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 -3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 - 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 -1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 -4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 -7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 -2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 -3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 - 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 -1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 -2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 -2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 -7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 -7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 -7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 -2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 -2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 -1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 -4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 -3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 -3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 -4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 -4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 -2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 -2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 -7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 -4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 -7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 -2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 -1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 -3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 -4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 -2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 - 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 -2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 -1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 -2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 -2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 -4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 -7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 -1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 -3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 -7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 -1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 -8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 -2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 -8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 -2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 -2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 -8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 -8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 -8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 - 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 -8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 -4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 -3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 -8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 -1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 -8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 - 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 -1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 - 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 -4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 -1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 -4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 -1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 - 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 -3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 -4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 -8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 - 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 -3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 - 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 -2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 -) - diff --git a/venv/lib/python3.6/site-packages/chardet/euctwprober.py b/venv/lib/python3.6/site-packages/chardet/euctwprober.py deleted file mode 100644 index 35669cc..0000000 --- a/venv/lib/python3.6/site-packages/chardet/euctwprober.py +++ /dev/null @@ -1,46 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCTWDistributionAnalysis -from .mbcssm import EUCTW_SM_MODEL - -class EUCTWProber(MultiByteCharSetProber): - def __init__(self): - super(EUCTWProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) - self.distribution_analyzer = EUCTWDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "EUC-TW" - - @property - def language(self): - return "Taiwan" diff --git a/venv/lib/python3.6/site-packages/chardet/gb2312freq.py b/venv/lib/python3.6/site-packages/chardet/gb2312freq.py deleted file mode 100644 index 697837b..0000000 --- a/venv/lib/python3.6/site-packages/chardet/gb2312freq.py +++ /dev/null @@ -1,283 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# GB2312 most frequently used character table -# -# Char to FreqOrder table , from hz6763 - -# 512 --> 0.79 -- 0.79 -# 1024 --> 0.92 -- 0.13 -# 2048 --> 0.98 -- 0.06 -# 6768 --> 1.00 -- 0.02 -# -# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 -# Random Distribution Ration = 512 / (3755 - 512) = 0.157 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR - -GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 - -GB2312_TABLE_SIZE = 3760 - -GB2312_CHAR_TO_FREQ_ORDER = ( -1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, -2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, -2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, - 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, -1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, -1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, - 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, -1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, -2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, -3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, - 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, -1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, - 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, -2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, - 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, -2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, -1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, -3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, - 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, -1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, - 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, -2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, -1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, -3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, -1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, -2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, -1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, - 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, -3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, -3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, - 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, -3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, - 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, -1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, -3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, -2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, -1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, - 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, -1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, -4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, - 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, -3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, -3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, - 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, -1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, -2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, -1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, -1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, - 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, -3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, -3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, -4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, - 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, -3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, -1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, -1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, -4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, - 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, - 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, -3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, -1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, - 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, -1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, -2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, - 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, - 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, - 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, -3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, -4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, -3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, - 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, -2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, -2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, -2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, - 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, -2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, - 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, - 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, - 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, -3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, -2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, -2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, -1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, - 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, -2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, - 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, - 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, -1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, -1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, - 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, - 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, -1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, -2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, -3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, -2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, -2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, -2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, -3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, -1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, -1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, -2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, -1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, -3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, -1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, -1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, -3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, - 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, -2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, -1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, -4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, -1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, -1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, -3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, -1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, - 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, - 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, -1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, - 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, -1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, -1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, - 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, -3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, -4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, -3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, -2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, -2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, -1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, -3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, -2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, -1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, -1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, - 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, -2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, -2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, -3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, -4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, -3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, - 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, -3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, -2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, -1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, - 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, - 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, -3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, -4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, -2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, -1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, -1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, - 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, -1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, -3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, - 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, - 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, -1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, - 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, -1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, - 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, -2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, - 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, -2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, -2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, -1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, -1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, -2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, - 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, -1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, -1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, -2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, -2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, -3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, -1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, -4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, - 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, - 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, -3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, -1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, - 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, -3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, -1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, -4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, -1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, -2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, -1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, - 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, -1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, -3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, - 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, -2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, - 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, -1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, -1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, -1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, -3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, -2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, -3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, -3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, -3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, - 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, -2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, - 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, -2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, - 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, -1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, - 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, - 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, -1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, -3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, -3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, -1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, -1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, -3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, -2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, -2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, -1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, -3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, - 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, -4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, -1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, -2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, -3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, -3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, -1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, - 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, - 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, -2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, - 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, -1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, - 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, -1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, -1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, -1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, -1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, -1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, - 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, - 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 -) - diff --git a/venv/lib/python3.6/site-packages/chardet/gb2312prober.py b/venv/lib/python3.6/site-packages/chardet/gb2312prober.py deleted file mode 100644 index 8446d2d..0000000 --- a/venv/lib/python3.6/site-packages/chardet/gb2312prober.py +++ /dev/null @@ -1,46 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import GB2312DistributionAnalysis -from .mbcssm import GB2312_SM_MODEL - -class GB2312Prober(MultiByteCharSetProber): - def __init__(self): - super(GB2312Prober, self).__init__() - self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) - self.distribution_analyzer = GB2312DistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "GB2312" - - @property - def language(self): - return "Chinese" diff --git a/venv/lib/python3.6/site-packages/chardet/hebrewprober.py b/venv/lib/python3.6/site-packages/chardet/hebrewprober.py deleted file mode 100644 index b0e1bf4..0000000 --- a/venv/lib/python3.6/site-packages/chardet/hebrewprober.py +++ /dev/null @@ -1,292 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Shy Shalom -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState - -# This prober doesn't actually recognize a language or a charset. -# It is a helper prober for the use of the Hebrew model probers - -### General ideas of the Hebrew charset recognition ### -# -# Four main charsets exist in Hebrew: -# "ISO-8859-8" - Visual Hebrew -# "windows-1255" - Logical Hebrew -# "ISO-8859-8-I" - Logical Hebrew -# "x-mac-hebrew" - ?? Logical Hebrew ?? -# -# Both "ISO" charsets use a completely identical set of code points, whereas -# "windows-1255" and "x-mac-hebrew" are two different proper supersets of -# these code points. windows-1255 defines additional characters in the range -# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific -# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. -# x-mac-hebrew defines similar additional code points but with a different -# mapping. -# -# As far as an average Hebrew text with no diacritics is concerned, all four -# charsets are identical with respect to code points. Meaning that for the -# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters -# (including final letters). -# -# The dominant difference between these charsets is their directionality. -# "Visual" directionality means that the text is ordered as if the renderer is -# not aware of a BIDI rendering algorithm. The renderer sees the text and -# draws it from left to right. The text itself when ordered naturally is read -# backwards. A buffer of Visual Hebrew generally looks like so: -# "[last word of first line spelled backwards] [whole line ordered backwards -# and spelled backwards] [first word of first line spelled backwards] -# [end of line] [last word of second line] ... etc' " -# adding punctuation marks, numbers and English text to visual text is -# naturally also "visual" and from left to right. -# -# "Logical" directionality means the text is ordered "naturally" according to -# the order it is read. It is the responsibility of the renderer to display -# the text from right to left. A BIDI algorithm is used to place general -# punctuation marks, numbers and English text in the text. -# -# Texts in x-mac-hebrew are almost impossible to find on the Internet. From -# what little evidence I could find, it seems that its general directionality -# is Logical. -# -# To sum up all of the above, the Hebrew probing mechanism knows about two -# charsets: -# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are -# backwards while line order is natural. For charset recognition purposes -# the line order is unimportant (In fact, for this implementation, even -# word order is unimportant). -# Logical Hebrew - "windows-1255" - normal, naturally ordered text. -# -# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be -# specifically identified. -# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew -# that contain special punctuation marks or diacritics is displayed with -# some unconverted characters showing as question marks. This problem might -# be corrected using another model prober for x-mac-hebrew. Due to the fact -# that x-mac-hebrew texts are so rare, writing another model prober isn't -# worth the effort and performance hit. -# -#### The Prober #### -# -# The prober is divided between two SBCharSetProbers and a HebrewProber, -# all of which are managed, created, fed data, inquired and deleted by the -# SBCSGroupProber. The two SBCharSetProbers identify that the text is in -# fact some kind of Hebrew, Logical or Visual. The final decision about which -# one is it is made by the HebrewProber by combining final-letter scores -# with the scores of the two SBCharSetProbers to produce a final answer. -# -# The SBCSGroupProber is responsible for stripping the original text of HTML -# tags, English characters, numbers, low-ASCII punctuation characters, spaces -# and new lines. It reduces any sequence of such characters to a single space. -# The buffer fed to each prober in the SBCS group prober is pure text in -# high-ASCII. -# The two SBCharSetProbers (model probers) share the same language model: -# Win1255Model. -# The first SBCharSetProber uses the model normally as any other -# SBCharSetProber does, to recognize windows-1255, upon which this model was -# built. The second SBCharSetProber is told to make the pair-of-letter -# lookup in the language model backwards. This in practice exactly simulates -# a visual Hebrew model using the windows-1255 logical Hebrew model. -# -# The HebrewProber is not using any language model. All it does is look for -# final-letter evidence suggesting the text is either logical Hebrew or visual -# Hebrew. Disjointed from the model probers, the results of the HebrewProber -# alone are meaningless. HebrewProber always returns 0.00 as confidence -# since it never identifies a charset by itself. Instead, the pointer to the -# HebrewProber is passed to the model probers as a helper "Name Prober". -# When the Group prober receives a positive identification from any prober, -# it asks for the name of the charset identified. If the prober queried is a -# Hebrew model prober, the model prober forwards the call to the -# HebrewProber to make the final decision. In the HebrewProber, the -# decision is made according to the final-letters scores maintained and Both -# model probers scores. The answer is returned in the form of the name of the -# charset identified, either "windows-1255" or "ISO-8859-8". - -class HebrewProber(CharSetProber): - # windows-1255 / ISO-8859-8 code points of interest - FINAL_KAF = 0xea - NORMAL_KAF = 0xeb - FINAL_MEM = 0xed - NORMAL_MEM = 0xee - FINAL_NUN = 0xef - NORMAL_NUN = 0xf0 - FINAL_PE = 0xf3 - NORMAL_PE = 0xf4 - FINAL_TSADI = 0xf5 - NORMAL_TSADI = 0xf6 - - # Minimum Visual vs Logical final letter score difference. - # If the difference is below this, don't rely solely on the final letter score - # distance. - MIN_FINAL_CHAR_DISTANCE = 5 - - # Minimum Visual vs Logical model score difference. - # If the difference is below this, don't rely at all on the model score - # distance. - MIN_MODEL_DISTANCE = 0.01 - - VISUAL_HEBREW_NAME = "ISO-8859-8" - LOGICAL_HEBREW_NAME = "windows-1255" - - def __init__(self): - super(HebrewProber, self).__init__() - self._final_char_logical_score = None - self._final_char_visual_score = None - self._prev = None - self._before_prev = None - self._logical_prober = None - self._visual_prober = None - self.reset() - - def reset(self): - self._final_char_logical_score = 0 - self._final_char_visual_score = 0 - # The two last characters seen in the previous buffer, - # mPrev and mBeforePrev are initialized to space in order to simulate - # a word delimiter at the beginning of the data - self._prev = ' ' - self._before_prev = ' ' - # These probers are owned by the group prober. - - def set_model_probers(self, logicalProber, visualProber): - self._logical_prober = logicalProber - self._visual_prober = visualProber - - def is_final(self, c): - return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, - self.FINAL_PE, self.FINAL_TSADI] - - def is_non_final(self, c): - # The normal Tsadi is not a good Non-Final letter due to words like - # 'lechotet' (to chat) containing an apostrophe after the tsadi. This - # apostrophe is converted to a space in FilterWithoutEnglishLetters - # causing the Non-Final tsadi to appear at an end of a word even - # though this is not the case in the original text. - # The letters Pe and Kaf rarely display a related behavior of not being - # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' - # for example legally end with a Non-Final Pe or Kaf. However, the - # benefit of these letters as Non-Final letters outweighs the damage - # since these words are quite rare. - return c in [self.NORMAL_KAF, self.NORMAL_MEM, - self.NORMAL_NUN, self.NORMAL_PE] - - def feed(self, byte_str): - # Final letter analysis for logical-visual decision. - # Look for evidence that the received buffer is either logical Hebrew - # or visual Hebrew. - # The following cases are checked: - # 1) A word longer than 1 letter, ending with a final letter. This is - # an indication that the text is laid out "naturally" since the - # final letter really appears at the end. +1 for logical score. - # 2) A word longer than 1 letter, ending with a Non-Final letter. In - # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, - # should not end with the Non-Final form of that letter. Exceptions - # to this rule are mentioned above in isNonFinal(). This is an - # indication that the text is laid out backwards. +1 for visual - # score - # 3) A word longer than 1 letter, starting with a final letter. Final - # letters should not appear at the beginning of a word. This is an - # indication that the text is laid out backwards. +1 for visual - # score. - # - # The visual score and logical score are accumulated throughout the - # text and are finally checked against each other in GetCharSetName(). - # No checking for final letters in the middle of words is done since - # that case is not an indication for either Logical or Visual text. - # - # We automatically filter out all 7-bit characters (replace them with - # spaces) so the word boundary detection works properly. [MAP] - - if self.state == ProbingState.NOT_ME: - # Both model probers say it's not them. No reason to continue. - return ProbingState.NOT_ME - - byte_str = self.filter_high_byte_only(byte_str) - - for cur in byte_str: - if cur == ' ': - # We stand on a space - a word just ended - if self._before_prev != ' ': - # next-to-last char was not a space so self._prev is not a - # 1 letter word - if self.is_final(self._prev): - # case (1) [-2:not space][-1:final letter][cur:space] - self._final_char_logical_score += 1 - elif self.is_non_final(self._prev): - # case (2) [-2:not space][-1:Non-Final letter][ - # cur:space] - self._final_char_visual_score += 1 - else: - # Not standing on a space - if ((self._before_prev == ' ') and - (self.is_final(self._prev)) and (cur != ' ')): - # case (3) [-2:space][-1:final letter][cur:not space] - self._final_char_visual_score += 1 - self._before_prev = self._prev - self._prev = cur - - # Forever detecting, till the end or until both model probers return - # ProbingState.NOT_ME (handled above) - return ProbingState.DETECTING - - @property - def charset_name(self): - # Make the decision: is it Logical or Visual? - # If the final letter score distance is dominant enough, rely on it. - finalsub = self._final_char_logical_score - self._final_char_visual_score - if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: - return self.LOGICAL_HEBREW_NAME - if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: - return self.VISUAL_HEBREW_NAME - - # It's not dominant enough, try to rely on the model scores instead. - modelsub = (self._logical_prober.get_confidence() - - self._visual_prober.get_confidence()) - if modelsub > self.MIN_MODEL_DISTANCE: - return self.LOGICAL_HEBREW_NAME - if modelsub < -self.MIN_MODEL_DISTANCE: - return self.VISUAL_HEBREW_NAME - - # Still no good, back to final letter distance, maybe it'll save the - # day. - if finalsub < 0.0: - return self.VISUAL_HEBREW_NAME - - # (finalsub > 0 - Logical) or (don't know what to do) default to - # Logical. - return self.LOGICAL_HEBREW_NAME - - @property - def language(self): - return 'Hebrew' - - @property - def state(self): - # Remain active as long as any of the model probers are active. - if (self._logical_prober.state == ProbingState.NOT_ME) and \ - (self._visual_prober.state == ProbingState.NOT_ME): - return ProbingState.NOT_ME - return ProbingState.DETECTING diff --git a/venv/lib/python3.6/site-packages/chardet/jisfreq.py b/venv/lib/python3.6/site-packages/chardet/jisfreq.py deleted file mode 100644 index 83fc082..0000000 --- a/venv/lib/python3.6/site-packages/chardet/jisfreq.py +++ /dev/null @@ -1,325 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology -# -# Japanese frequency table, applied to both S-JIS and EUC-JP -# They are sorted in order. - -# 128 --> 0.77094 -# 256 --> 0.85710 -# 512 --> 0.92635 -# 1024 --> 0.97130 -# 2048 --> 0.99431 -# -# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 -# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 -# -# Typical Distribution Ratio, 25% of IDR - -JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 - -# Char to FreqOrder table , -JIS_TABLE_SIZE = 4368 - -JIS_CHAR_TO_FREQ_ORDER = ( - 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 -3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 -1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 -2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 -2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 -5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 -1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 -5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 -5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 -5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 -5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 -5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 -5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 -1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 -1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 -1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 -2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 -3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 -3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 - 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 - 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 -1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 - 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 -5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 - 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 - 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 - 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 - 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 - 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 -5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 -5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 -5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 -4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 -5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 -5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 -5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 -5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 -5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 -5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 -5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 -5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 -5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 -3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 -5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 -5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 -5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 -5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 -5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 -5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 -5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 -5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 -5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 -5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 -5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 -5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 -5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 -5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 -5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 -5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 -5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 -5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 -5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 -5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 -5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 -5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 -5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 -5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 -5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 -5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 -5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 -5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 -5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 -5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 -5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 -5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 -5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 -5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 -5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 -5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 -6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 -6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 -6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 -6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 -6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 -6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 -6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 -6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 -4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 - 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 - 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 -1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 -1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 - 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 -3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 -3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 - 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 -3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 -3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 - 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 -2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 - 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 -3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 -1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 - 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 -1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 - 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 -2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 -2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 -2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 -2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 -1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 -1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 -1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 -1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 -2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 -1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 -2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 -1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 -1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 -1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 -1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 -1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 -1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 - 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 - 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 -1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 -2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 -2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 -2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 -3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 -3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 - 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 -3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 -1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 - 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 -2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 -1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 - 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 -3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 -4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 -2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 -1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 -2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 -1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 - 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 - 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 -1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 -2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 -2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 -2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 -3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 -1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 -2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 - 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 - 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 - 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 -1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 -2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 - 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 -1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 -1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 - 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 -1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 -1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 -1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 - 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 -2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 - 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 -2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 -3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 -2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 -1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 -6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 -1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 -2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 -1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 - 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 - 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 -3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 -3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 -1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 -1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 -1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 -1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 - 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 - 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 -2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 - 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 -3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 -2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 - 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 -1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 -2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 - 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 -1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 - 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 -4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 -2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 -1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 - 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 -1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 -2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 - 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 -6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 -1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 -1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 -2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 -3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 - 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 -3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 -1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 - 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 -1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 - 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 -3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 - 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 -2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 - 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 -4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 -2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 -1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 -1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 -1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 - 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 -1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 -3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 -1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 -3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 - 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 - 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 - 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 -2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 -1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 - 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 -1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 - 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 -1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 - 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 - 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 - 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 -1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 -1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 -2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 -4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 - 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 -1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 - 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 -1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 -3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 -1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 -2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 -2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 -1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 -1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 -2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 - 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 -2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 -1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 -1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 -1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 -1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 -3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 -2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 -2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 - 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 -3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 -3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 -1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 -2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 -1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 -2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 -) - - diff --git a/venv/lib/python3.6/site-packages/chardet/jpcntx.py b/venv/lib/python3.6/site-packages/chardet/jpcntx.py deleted file mode 100644 index 20044e4..0000000 --- a/venv/lib/python3.6/site-packages/chardet/jpcntx.py +++ /dev/null @@ -1,233 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -# This is hiragana 2-char sequence table, the number in each cell represents its frequency category -jp2CharContext = ( -(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), -(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), -(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), -(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), -(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), -(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), -(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), -(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), -(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), -(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), -(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), -(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), -(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), -(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), -(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), -(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), -(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), -(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), -(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), -(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), -(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), -(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), -(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), -(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), -(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), -(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), -(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), -(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), -(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), -(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), -(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), -(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), -(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), -(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), -(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), -(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), -(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), -(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), -(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), -(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), -(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), -(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), -(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), -(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), -(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), -(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), -(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), -(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), -(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), -(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), -(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), -(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), -(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), -(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), -(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), -(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), -(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), -(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), -(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), -(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), -(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), -(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), -(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), -(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), -(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), -(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), -(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), -(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), -(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), -(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), -(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), -(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), -(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), -(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), -) - -class JapaneseContextAnalysis(object): - NUM_OF_CATEGORY = 6 - DONT_KNOW = -1 - ENOUGH_REL_THRESHOLD = 100 - MAX_REL_THRESHOLD = 1000 - MINIMUM_DATA_THRESHOLD = 4 - - def __init__(self): - self._total_rel = None - self._rel_sample = None - self._need_to_skip_char_num = None - self._last_char_order = None - self._done = None - self.reset() - - def reset(self): - self._total_rel = 0 # total sequence received - # category counters, each integer counts sequence in its category - self._rel_sample = [0] * self.NUM_OF_CATEGORY - # if last byte in current buffer is not the last byte of a character, - # we need to know how many bytes to skip in next buffer - self._need_to_skip_char_num = 0 - self._last_char_order = -1 # The order of previous char - # If this flag is set to True, detection is done and conclusion has - # been made - self._done = False - - def feed(self, byte_str, num_bytes): - if self._done: - return - - # The buffer we got is byte oriented, and a character may span in more than one - # buffers. In case the last one or two byte in last buffer is not - # complete, we record how many byte needed to complete that character - # and skip these bytes here. We can choose to record those bytes as - # well and analyse the character once it is complete, but since a - # character will not make much difference, by simply skipping - # this character will simply our logic and improve performance. - i = self._need_to_skip_char_num - while i < num_bytes: - order, char_len = self.get_order(byte_str[i:i + 2]) - i += char_len - if i > num_bytes: - self._need_to_skip_char_num = i - num_bytes - self._last_char_order = -1 - else: - if (order != -1) and (self._last_char_order != -1): - self._total_rel += 1 - if self._total_rel > self.MAX_REL_THRESHOLD: - self._done = True - break - self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 - self._last_char_order = order - - def got_enough_data(self): - return self._total_rel > self.ENOUGH_REL_THRESHOLD - - def get_confidence(self): - # This is just one way to calculate confidence. It works well for me. - if self._total_rel > self.MINIMUM_DATA_THRESHOLD: - return (self._total_rel - self._rel_sample[0]) / self._total_rel - else: - return self.DONT_KNOW - - def get_order(self, byte_str): - return -1, 1 - -class SJISContextAnalysis(JapaneseContextAnalysis): - def __init__(self): - super(SJISContextAnalysis, self).__init__() - self._charset_name = "SHIFT_JIS" - - @property - def charset_name(self): - return self._charset_name - - def get_order(self, byte_str): - if not byte_str: - return -1, 1 - # find out current char's byte length - first_char = byte_str[0] - if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): - char_len = 2 - if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): - self._charset_name = "CP932" - else: - char_len = 1 - - # return its order if it is hiragana - if len(byte_str) > 1: - second_char = byte_str[1] - if (first_char == 202) and (0x9F <= second_char <= 0xF1): - return second_char - 0x9F, char_len - - return -1, char_len - -class EUCJPContextAnalysis(JapaneseContextAnalysis): - def get_order(self, byte_str): - if not byte_str: - return -1, 1 - # find out current char's byte length - first_char = byte_str[0] - if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): - char_len = 2 - elif first_char == 0x8F: - char_len = 3 - else: - char_len = 1 - - # return its order if it is hiragana - if len(byte_str) > 1: - second_char = byte_str[1] - if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): - return second_char - 0xA1, char_len - - return -1, char_len - - diff --git a/venv/lib/python3.6/site-packages/chardet/langbulgarianmodel.py b/venv/lib/python3.6/site-packages/chardet/langbulgarianmodel.py deleted file mode 100644 index 2aa4fb2..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langbulgarianmodel.py +++ /dev/null @@ -1,228 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -# this table is modified base on win1251BulgarianCharToOrderMap, so -# only number <64 is sure valid - -Latin5_BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 -210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 - 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 - 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 -) - -win1251BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 -221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 - 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 - 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 96.9392% -# first 1024 sequences:3.0618% -# rest sequences: 0.2992% -# negative sequences: 0.0020% -BulgarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, -3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, -0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, -0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, -0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, -0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, -0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, -2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, -3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, -1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, -3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, -1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, -2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, -2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, -3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, -1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, -2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, -2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, -1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, -2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, -2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, -2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, -1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, -2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, -1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, -3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, -1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, -3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, -1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, -2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, -1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, -2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, -1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, -2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, -1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, -2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, -1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, -0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, -1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, -1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, -1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, -0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, -1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, -1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -) - -Latin5BulgarianModel = { - 'char_to_order_map': Latin5_BulgarianCharToOrderMap, - 'precedence_matrix': BulgarianLangModel, - 'typical_positive_ratio': 0.969392, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-5", - 'language': 'Bulgairan', -} - -Win1251BulgarianModel = { - 'char_to_order_map': win1251BulgarianCharToOrderMap, - 'precedence_matrix': BulgarianLangModel, - 'typical_positive_ratio': 0.969392, - 'keep_english_letter': False, - 'charset_name': "windows-1251", - 'language': 'Bulgarian', -} diff --git a/venv/lib/python3.6/site-packages/chardet/langcyrillicmodel.py b/venv/lib/python3.6/site-packages/chardet/langcyrillicmodel.py deleted file mode 100644 index e5f9a1f..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langcyrillicmodel.py +++ /dev/null @@ -1,333 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# KOI8-R language model -# Character Mapping Table: -KOI8R_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 -223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 -238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 - 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 - 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 - 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 - 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 -) - -win1251_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -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, 68,247,248,249,250,251,252,253, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -) - -latin5_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -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, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -macCyrillic_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, -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, 68, 16, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, -) - -IBM855_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, -206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, - 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, -220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, -230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, - 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, - 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, -250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, -) - -IBM866_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, -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, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 97.6601% -# first 1024 sequences: 2.3389% -# rest sequences: 0.1237% -# negative sequences: 0.0009% -RussianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, -1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, -1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, -2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, -1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, -3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, -1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, -2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, -1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, -1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, -1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, -1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, -3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, -1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, -2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, -1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, -2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, -1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, -1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, -1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, -3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, -3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, -1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, -1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, -0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, -1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, -1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, -0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, -1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, -2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, -1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, -1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, -2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, -1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, -1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, -1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, -0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, -0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, -0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, -2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, -0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -) - -Koi8rModel = { - 'char_to_order_map': KOI8R_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "KOI8-R", - 'language': 'Russian', -} - -Win1251CyrillicModel = { - 'char_to_order_map': win1251_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "windows-1251", - 'language': 'Russian', -} - -Latin5CyrillicModel = { - 'char_to_order_map': latin5_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-5", - 'language': 'Russian', -} - -MacCyrillicModel = { - 'char_to_order_map': macCyrillic_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "MacCyrillic", - 'language': 'Russian', -} - -Ibm866Model = { - 'char_to_order_map': IBM866_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "IBM866", - 'language': 'Russian', -} - -Ibm855Model = { - 'char_to_order_map': IBM855_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "IBM855", - 'language': 'Russian', -} diff --git a/venv/lib/python3.6/site-packages/chardet/langgreekmodel.py b/venv/lib/python3.6/site-packages/chardet/langgreekmodel.py deleted file mode 100644 index 5332221..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langgreekmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin7_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -win1253_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.2851% -# first 1024 sequences:1.7001% -# rest sequences: 0.0359% -# negative sequences: 0.0148% -GreekLangModel = ( -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, -2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, -2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, -2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, -0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, -3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, -2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, -0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, -0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, -0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, -0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, -0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, -0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, -0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, -0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, -0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, -0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, -0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, -0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, -0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, -0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, -0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, -0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, -0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, -0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin7GreekModel = { - 'char_to_order_map': Latin7_char_to_order_map, - 'precedence_matrix': GreekLangModel, - 'typical_positive_ratio': 0.982851, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-7", - 'language': 'Greek', -} - -Win1253GreekModel = { - 'char_to_order_map': win1253_char_to_order_map, - 'precedence_matrix': GreekLangModel, - 'typical_positive_ratio': 0.982851, - 'keep_english_letter': False, - 'charset_name': "windows-1253", - 'language': 'Greek', -} diff --git a/venv/lib/python3.6/site-packages/chardet/langhebrewmodel.py b/venv/lib/python3.6/site-packages/chardet/langhebrewmodel.py deleted file mode 100644 index 58f4c87..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langhebrewmodel.py +++ /dev/null @@ -1,200 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Simon Montagu -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Shoshannah Forbes - original C code (?) -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Windows-1255 language model -# Character Mapping Table: -WIN1255_CHAR_TO_ORDER_MAP = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 - 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 -253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 - 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 -124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, -215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, - 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, -106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, - 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, -238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, - 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, - 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.4004% -# first 1024 sequences: 1.5981% -# rest sequences: 0.087% -# negative sequences: 0.0015% -HEBREW_LANG_MODEL = ( -0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, -3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, -1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, -1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, -1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, -1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, -0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, -0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, -0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, -0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, -0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, -0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, -0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, -0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, -0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, -0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, -0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, -0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, -0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, -1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, -1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, -2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, -0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, -0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, -) - -Win1255HebrewModel = { - 'char_to_order_map': WIN1255_CHAR_TO_ORDER_MAP, - 'precedence_matrix': HEBREW_LANG_MODEL, - 'typical_positive_ratio': 0.984004, - 'keep_english_letter': False, - 'charset_name': "windows-1255", - 'language': 'Hebrew', -} diff --git a/venv/lib/python3.6/site-packages/chardet/langhungarianmodel.py b/venv/lib/python3.6/site-packages/chardet/langhungarianmodel.py deleted file mode 100644 index bb7c095..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langhungarianmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin2_HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -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, 75,198,199,200,201,202,203,204,205, - 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, - 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, -245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -win1250HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, -177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, - 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, - 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, -245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 94.7368% -# first 1024 sequences:5.2623% -# rest sequences: 0.8894% -# negative sequences: 0.0009% -HungarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, -3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, -0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, -1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, -1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, -3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, -2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, -2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, -2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, -2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, -1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, -1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, -3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, -1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, -1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, -2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, -2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, -2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, -3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, -1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, -1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, -1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, -2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, -1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, -2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, -2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, -1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, -1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, -0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, -2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, -2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, -1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, -1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, -2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, -2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, -2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, -1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, -0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -) - -Latin2HungarianModel = { - 'char_to_order_map': Latin2_HungarianCharToOrderMap, - 'precedence_matrix': HungarianLangModel, - 'typical_positive_ratio': 0.947368, - 'keep_english_letter': True, - 'charset_name': "ISO-8859-2", - 'language': 'Hungarian', -} - -Win1250HungarianModel = { - 'char_to_order_map': win1250HungarianCharToOrderMap, - 'precedence_matrix': HungarianLangModel, - 'typical_positive_ratio': 0.947368, - 'keep_english_letter': True, - 'charset_name': "windows-1250", - 'language': 'Hungarian', -} diff --git a/venv/lib/python3.6/site-packages/chardet/langthaimodel.py b/venv/lib/python3.6/site-packages/chardet/langthaimodel.py deleted file mode 100644 index 15f94c2..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langthaimodel.py +++ /dev/null @@ -1,199 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# The following result for thai was collected from a limited sample (1M). - -# Character Mapping Table: -TIS620CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 -188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 -253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 - 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 -209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, -223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, -236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, - 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, - 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, - 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, - 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, - 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 92.6386% -# first 1024 sequences:7.3177% -# rest sequences: 1.0230% -# negative sequences: 0.0436% -ThaiLangModel = ( -0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, -0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, -3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, -0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, -3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, -3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, -3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, -3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, -2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, -3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, -1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, -3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, -1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, -0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, -0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, -2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, -0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, -3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, -2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, -2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, -3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, -3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, -3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, -3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, -1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, -0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, -0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, -3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, -3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, -1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, -3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, -3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, -0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, -0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, -1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, -1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, -3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, -0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, -3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, -0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, -0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, -0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, -0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, -0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, -0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, -0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, -3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, -2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, -0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, -3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, -1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, -1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -TIS620ThaiModel = { - 'char_to_order_map': TIS620CharToOrderMap, - 'precedence_matrix': ThaiLangModel, - 'typical_positive_ratio': 0.926386, - 'keep_english_letter': False, - 'charset_name': "TIS-620", - 'language': 'Thai', -} diff --git a/venv/lib/python3.6/site-packages/chardet/langturkishmodel.py b/venv/lib/python3.6/site-packages/chardet/langturkishmodel.py deleted file mode 100644 index a427a45..0000000 --- a/venv/lib/python3.6/site-packages/chardet/langturkishmodel.py +++ /dev/null @@ -1,193 +0,0 @@ -# -*- coding: utf-8 -*- -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Özgür Baskın - Turkish Language Model -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin5_TurkishCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255, 23, 37, 47, 39, 29, 52, 36, 45, 53, 60, 16, 49, 20, 46, 42, - 48, 69, 44, 35, 31, 51, 38, 62, 65, 43, 56,255,255,255,255,255, -255, 1, 21, 28, 12, 2, 18, 27, 25, 3, 24, 10, 5, 13, 4, 15, - 26, 64, 7, 8, 9, 14, 32, 57, 58, 11, 22,255,255,255,255,255, -180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165, -164,163,162,161,160,159,101,158,157,156,155,154,153,152,151,106, -150,149,148,147,146,145,144,100,143,142,141,140,139,138,137,136, - 94, 80, 93,135,105,134,133, 63,132,131,130,129,128,127,126,125, -124,104, 73, 99, 79, 85,123, 54,122, 98, 92,121,120, 91,103,119, - 68,118,117, 97,116,115, 50, 90,114,113,112,111, 55, 41, 40, 86, - 89, 70, 59, 78, 71, 82, 88, 33, 77, 66, 84, 83,110, 75, 61, 96, - 30, 67,109, 74, 87,102, 34, 95, 81,108, 76, 72, 17, 6, 19,107, -) - -TurkishLangModel = ( -3,2,3,3,3,1,3,3,3,3,3,3,3,3,2,1,1,3,3,1,3,3,0,3,3,3,3,3,0,3,1,3, -3,2,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, -3,2,2,3,3,0,3,3,3,3,3,3,3,2,3,1,0,3,3,1,3,3,0,3,3,3,3,3,0,3,0,3, -3,1,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,0,1,0,1, -3,3,2,3,3,0,3,3,3,3,3,3,3,2,3,1,1,3,3,0,3,3,1,2,3,3,3,3,0,3,0,3, -3,1,1,0,0,0,1,0,0,0,0,1,1,0,1,2,1,0,0,0,1,0,0,0,0,2,0,0,0,0,0,1, -3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,2,0,3,2,1,2,2,1,3,3,0,0,0,2, -2,2,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1, -3,3,3,2,3,3,1,2,3,3,3,3,3,3,3,1,3,2,1,0,3,2,0,1,2,3,3,2,1,0,0,2, -2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0, -1,0,1,3,3,1,3,3,3,3,3,3,3,1,2,0,0,2,3,0,2,3,0,0,2,2,2,3,0,3,0,1, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,2,0,2,3,2,3,3,1,0,0,2, -3,2,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,0,1, -3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,0,3,3,0,0,2,1,0,0,2,3,2,2,0,0,0,2, -2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,2,0,0,1, -3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,0,1,3,2,1,1,3,2,3,2,1,0,0,2, -2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, -3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,2,0,2,3,0,0,2,2,2,2,0,0,0,2, -3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, -3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,0,3,3,1,1,2,2,0,0,2,2,3,2,0,0,1,3, -0,3,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1, -3,3,3,2,3,3,3,2,1,2,2,3,2,3,3,0,3,2,0,0,1,1,0,1,1,2,1,2,0,0,0,1, -0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, -3,3,3,2,3,3,2,3,2,2,2,3,3,3,3,1,3,1,1,0,3,2,1,1,3,3,2,3,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,1, -3,2,2,3,3,0,3,3,3,3,3,3,3,2,2,1,0,3,3,1,3,3,0,1,3,3,2,3,0,3,0,3, -2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -2,2,2,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3,2,0,3,3,0,3,2,3,3,3,0,3,1,3, -2,0,0,0,0,0,0,0,0,0,0,1,0,1,2,0,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, -3,3,3,1,2,3,3,1,0,0,1,0,0,3,3,2,3,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0, -0,3,1,0,1,0,0,0,2,2,1,0,1,1,2,1,2,2,2,0,2,1,1,0,0,0,2,0,0,0,0,0, -1,2,1,3,3,0,3,3,3,3,3,2,3,0,0,0,0,2,3,0,2,3,1,0,2,3,1,3,0,3,0,2, -3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,3,3,2,2,3,2,2,0,1,2,3,0,1,2,1,0,1,0,0,0,1,0,2,2,0,0,0,1, -1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0, -3,3,3,1,3,3,1,1,3,3,1,1,3,3,1,0,2,1,2,0,2,1,0,0,1,1,2,1,0,0,0,2, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,0,2,1,3,0,0,2,0,0,3,3,0,3,0,0,1,0,1,2,0,0,1,1,2,2,0,1,0, -0,1,2,1,1,0,1,0,1,1,1,1,1,0,1,1,1,2,2,1,2,0,1,0,0,0,0,0,0,1,0,0, -3,3,3,2,3,2,3,3,0,2,2,2,3,3,3,0,3,0,0,0,2,2,0,1,2,1,1,1,0,0,0,1, -0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -3,3,3,3,3,3,2,1,2,2,3,3,3,3,2,0,2,0,0,0,2,2,0,0,2,1,3,3,0,0,1,1, -1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, -1,1,2,3,3,0,3,3,3,3,3,3,2,2,0,2,0,2,3,2,3,2,2,2,2,2,2,2,1,3,2,3, -2,0,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,0,0,2,1,1,0,2,1,0,0,1,0,0,0,1, -2,3,3,1,1,1,0,1,1,1,2,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,2,2,1,3,3,3,0,2,1,2,0,2,1,0,0,1,1,1,1,1,0,0,1, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, -3,3,3,2,3,3,3,3,3,2,3,1,2,3,3,1,2,0,0,0,0,0,0,0,3,2,1,1,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -3,3,3,2,2,3,3,2,1,1,1,1,1,3,3,0,3,1,0,0,1,1,0,0,3,1,2,1,0,0,0,0, -0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, -3,3,3,2,2,3,2,2,2,3,2,1,1,3,3,0,3,0,0,0,0,1,0,0,3,1,1,2,0,0,0,1, -1,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,3,3,0,3,3,3,3,3,2,2,2,1,2,0,2,1,2,2,1,1,0,1,2,2,2,2,2,2,2, -0,0,2,1,2,1,2,1,0,1,1,3,1,2,1,1,2,0,0,2,0,1,0,1,0,1,0,0,0,1,0,1, -3,3,3,1,3,3,3,0,1,1,0,2,2,3,1,0,3,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,2,2,1,0,0,1,0,0,3,3,1,3,0,0,1,1,0,2,0,3,0,0,0,2,0,1,1, -0,1,2,0,1,2,2,0,2,2,2,2,1,0,2,1,1,0,2,0,2,1,2,0,0,0,0,0,0,0,0,0, -3,3,3,1,3,2,3,2,0,2,2,2,1,3,2,0,2,1,2,0,1,2,0,0,1,0,2,2,0,0,0,2, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, -3,3,3,0,3,3,1,1,2,3,1,0,3,2,3,0,3,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0, -1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,3,0,3,3,2,3,3,2,2,0,0,0,0,1,2,0,1,3,0,0,0,3,1,1,0,3,0,2, -2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,2,2,1,0,3,1,1,1,1,3,3,2,3,0,0,1,0,1,2,0,2,2,0,2,2,0,2,1, -0,2,2,1,1,1,1,0,2,1,1,0,1,1,1,1,2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0, -3,3,3,0,1,1,3,0,0,1,1,0,0,2,2,0,3,0,0,1,1,0,1,0,0,0,0,0,2,0,0,0, -0,3,1,0,1,0,1,0,2,0,0,1,0,1,0,1,1,1,2,1,1,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,0,2,0,1,1,1,0,0,3,3,0,2,0,0,1,0,0,2,1,1,0,1,0,1,0,1,0, -0,2,0,1,2,0,2,0,2,1,1,0,1,0,2,1,1,0,2,1,1,0,1,0,0,0,1,1,0,0,0,0, -3,2,3,0,1,0,0,0,0,0,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0, -0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,2,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,0,0,2,3,0,0,1,0,1,0,2,3,2,3,0,0,1,3,0,2,1,0,0,0,0,2,0,1,0, -0,2,1,0,0,1,1,0,2,1,0,0,1,0,0,1,1,0,1,1,2,0,1,0,0,0,0,1,0,0,0,0, -3,2,2,0,0,1,1,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,1,0,0,0,0,0,2,0,1,0, -0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,3,3,0,2,3,2,2,1,2,2,1,1,2,0,1,3,2,2,2,0,0,2,2,0,0,0,1,2,1, -3,0,2,1,1,0,1,1,1,0,1,2,2,2,1,1,2,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0, -0,1,1,2,3,0,3,3,3,2,2,2,2,1,0,1,0,1,0,1,2,2,0,0,2,2,1,3,1,1,2,1, -0,0,1,1,2,0,1,1,0,0,1,2,0,2,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0, -3,3,2,0,0,3,1,0,0,0,0,0,0,3,2,1,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, -0,2,1,1,0,0,1,0,1,2,0,0,1,1,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,1,0,0,0,0,1,0,0,3,3,2,2,0,0,1,0,0,2,0,1,0,0,0,2,0,1,0, -0,0,1,1,0,0,2,0,2,1,0,0,1,1,2,1,2,0,2,1,2,1,1,1,0,0,1,1,0,0,0,0, -3,3,2,0,0,2,2,0,0,0,1,1,0,2,2,1,3,1,0,1,0,1,2,0,0,0,0,0,1,0,1,0, -0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,0,0,0,1,0,0,1,0,0,2,3,1,2,0,0,1,0,0,2,0,0,0,1,0,2,0,2,0, -0,1,1,2,2,1,2,0,2,1,1,0,0,1,1,0,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,1,2,1,0,0,1,1,0,3,3,1,2,0,0,1,0,0,2,0,2,0,1,1,2,0,0,0, -0,0,1,1,1,1,2,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -3,3,3,0,2,2,3,2,0,0,1,0,0,2,3,1,0,0,0,0,0,0,2,0,2,0,0,0,2,0,0,0, -0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,0,0,0,0,0,0,1,0,0,2,2,2,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, -0,0,2,1,1,0,1,0,2,1,1,0,0,1,1,2,1,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0, -0,0,0,2,2,0,2,1,1,1,1,2,2,0,0,1,0,1,0,0,1,3,0,0,0,0,1,0,0,2,1,0, -0,0,1,0,1,0,0,0,0,0,2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -2,0,0,2,3,0,2,3,1,2,2,0,2,0,0,2,0,2,1,1,1,2,1,0,0,1,2,1,1,2,1,0, -1,0,2,0,1,0,1,1,0,0,2,2,1,2,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,1,2,0,0,0,1,0,0,3,2,0,1,0,0,1,0,0,2,0,0,0,1,2,1,0,1,0, -0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,2,2,0,2,2,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,0,1,0,0,0,1,1,1,1, -0,0,2,1,0,1,1,1,0,1,1,2,1,2,1,1,2,0,1,1,2,1,0,2,0,0,0,0,0,0,0,0, -3,2,2,0,0,2,0,0,0,0,0,0,0,2,2,0,2,0,0,1,0,0,2,0,0,0,0,0,2,0,0,0, -0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,0,2,2,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0, -2,0,1,0,1,0,1,1,0,0,1,2,0,1,0,1,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0, -2,2,2,0,1,1,0,0,0,1,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0, -0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,1,1,1,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -1,1,2,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,1, -0,0,1,2,2,0,2,1,2,1,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,2,2,0,0,0,1,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin5TurkishModel = { - 'char_to_order_map': Latin5_TurkishCharToOrderMap, - 'precedence_matrix': TurkishLangModel, - 'typical_positive_ratio': 0.970290, - 'keep_english_letter': True, - 'charset_name': "ISO-8859-9", - 'language': 'Turkish', -} diff --git a/venv/lib/python3.6/site-packages/chardet/latin1prober.py b/venv/lib/python3.6/site-packages/chardet/latin1prober.py deleted file mode 100644 index 7d1e8c2..0000000 --- a/venv/lib/python3.6/site-packages/chardet/latin1prober.py +++ /dev/null @@ -1,145 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState - -FREQ_CAT_NUM = 4 - -UDF = 0 # undefined -OTH = 1 # other -ASC = 2 # ascii capital letter -ASS = 3 # ascii small letter -ACV = 4 # accent capital vowel -ACO = 5 # accent capital other -ASV = 6 # accent small vowel -ASO = 7 # accent small other -CLASS_NUM = 8 # total classes - -Latin1_CharToClass = ( - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F - OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 - ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F - OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 - ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F - OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 - OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F - UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 - OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF - ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 - ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF - ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 - ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF - ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 - ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF - ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 - ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF -) - -# 0 : illegal -# 1 : very unlikely -# 2 : normal -# 3 : very likely -Latin1ClassModel = ( -# UDF OTH ASC ASS ACV ACO ASV ASO - 0, 0, 0, 0, 0, 0, 0, 0, # UDF - 0, 3, 3, 3, 3, 3, 3, 3, # OTH - 0, 3, 3, 3, 3, 3, 3, 3, # ASC - 0, 3, 3, 3, 1, 1, 3, 3, # ASS - 0, 3, 3, 3, 1, 2, 1, 2, # ACV - 0, 3, 3, 3, 3, 3, 3, 3, # ACO - 0, 3, 1, 3, 1, 1, 1, 3, # ASV - 0, 3, 1, 3, 1, 1, 3, 3, # ASO -) - - -class Latin1Prober(CharSetProber): - def __init__(self): - super(Latin1Prober, self).__init__() - self._last_char_class = None - self._freq_counter = None - self.reset() - - def reset(self): - self._last_char_class = OTH - self._freq_counter = [0] * FREQ_CAT_NUM - CharSetProber.reset(self) - - @property - def charset_name(self): - return "ISO-8859-1" - - @property - def language(self): - return "" - - def feed(self, byte_str): - byte_str = self.filter_with_english_letters(byte_str) - for c in byte_str: - char_class = Latin1_CharToClass[c] - freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) - + char_class] - if freq == 0: - self._state = ProbingState.NOT_ME - break - self._freq_counter[freq] += 1 - self._last_char_class = char_class - - return self.state - - def get_confidence(self): - if self.state == ProbingState.NOT_ME: - return 0.01 - - total = sum(self._freq_counter) - if total < 0.01: - confidence = 0.0 - else: - confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) - / total) - if confidence < 0.0: - confidence = 0.0 - # lower the confidence of latin1 so that other more accurate - # detector can take priority. - confidence = confidence * 0.73 - return confidence diff --git a/venv/lib/python3.6/site-packages/chardet/mbcharsetprober.py b/venv/lib/python3.6/site-packages/chardet/mbcharsetprober.py deleted file mode 100644 index 6256ecf..0000000 --- a/venv/lib/python3.6/site-packages/chardet/mbcharsetprober.py +++ /dev/null @@ -1,91 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState, MachineState - - -class MultiByteCharSetProber(CharSetProber): - """ - MultiByteCharSetProber - """ - - def __init__(self, lang_filter=None): - super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) - self.distribution_analyzer = None - self.coding_sm = None - self._last_char = [0, 0] - - def reset(self): - super(MultiByteCharSetProber, self).reset() - if self.coding_sm: - self.coding_sm.reset() - if self.distribution_analyzer: - self.distribution_analyzer.reset() - self._last_char = [0, 0] - - @property - def charset_name(self): - raise NotImplementedError - - @property - def language(self): - raise NotImplementedError - - def feed(self, byte_str): - for i in range(len(byte_str)): - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.distribution_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - return self.distribution_analyzer.get_confidence() diff --git a/venv/lib/python3.6/site-packages/chardet/mbcsgroupprober.py b/venv/lib/python3.6/site-packages/chardet/mbcsgroupprober.py deleted file mode 100644 index 530abe7..0000000 --- a/venv/lib/python3.6/site-packages/chardet/mbcsgroupprober.py +++ /dev/null @@ -1,54 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .utf8prober import UTF8Prober -from .sjisprober import SJISProber -from .eucjpprober import EUCJPProber -from .gb2312prober import GB2312Prober -from .euckrprober import EUCKRProber -from .cp949prober import CP949Prober -from .big5prober import Big5Prober -from .euctwprober import EUCTWProber - - -class MBCSGroupProber(CharSetGroupProber): - def __init__(self, lang_filter=None): - super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) - self.probers = [ - UTF8Prober(), - SJISProber(), - EUCJPProber(), - GB2312Prober(), - EUCKRProber(), - CP949Prober(), - Big5Prober(), - EUCTWProber() - ] - self.reset() diff --git a/venv/lib/python3.6/site-packages/chardet/mbcssm.py b/venv/lib/python3.6/site-packages/chardet/mbcssm.py deleted file mode 100644 index 8360d0f..0000000 --- a/venv/lib/python3.6/site-packages/chardet/mbcssm.py +++ /dev/null @@ -1,572 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import MachineState - -# BIG5 - -BIG5_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 4,4,4,4,4,4,4,4, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 4,3,3,3,3,3,3,3, # a0 - a7 - 3,3,3,3,3,3,3,3, # a8 - af - 3,3,3,3,3,3,3,3, # b0 - b7 - 3,3,3,3,3,3,3,3, # b8 - bf - 3,3,3,3,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -BIG5_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 -) - -BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) - -BIG5_SM_MODEL = {'class_table': BIG5_CLS, - 'class_factor': 5, - 'state_table': BIG5_ST, - 'char_len_table': BIG5_CHAR_LEN_TABLE, - 'name': 'Big5'} - -# CP949 - -CP949_CLS = ( - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f - 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f - 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f - 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f - 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f - 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f - 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f - 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f - 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af - 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf - 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff -) - -CP949_ST = ( -#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = - MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 -) - -CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) - -CP949_SM_MODEL = {'class_table': CP949_CLS, - 'class_factor': 10, - 'state_table': CP949_ST, - 'char_len_table': CP949_CHAR_LEN_TABLE, - 'name': 'CP949'} - -# EUC-JP - -EUCJP_CLS = ( - 4,4,4,4,4,4,4,4, # 00 - 07 - 4,4,4,4,4,4,5,5, # 08 - 0f - 4,4,4,4,4,4,4,4, # 10 - 17 - 4,4,4,5,4,4,4,4, # 18 - 1f - 4,4,4,4,4,4,4,4, # 20 - 27 - 4,4,4,4,4,4,4,4, # 28 - 2f - 4,4,4,4,4,4,4,4, # 30 - 37 - 4,4,4,4,4,4,4,4, # 38 - 3f - 4,4,4,4,4,4,4,4, # 40 - 47 - 4,4,4,4,4,4,4,4, # 48 - 4f - 4,4,4,4,4,4,4,4, # 50 - 57 - 4,4,4,4,4,4,4,4, # 58 - 5f - 4,4,4,4,4,4,4,4, # 60 - 67 - 4,4,4,4,4,4,4,4, # 68 - 6f - 4,4,4,4,4,4,4,4, # 70 - 77 - 4,4,4,4,4,4,4,4, # 78 - 7f - 5,5,5,5,5,5,5,5, # 80 - 87 - 5,5,5,5,5,5,1,3, # 88 - 8f - 5,5,5,5,5,5,5,5, # 90 - 97 - 5,5,5,5,5,5,5,5, # 98 - 9f - 5,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,0,5 # f8 - ff -) - -EUCJP_ST = ( - 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f - 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 -) - -EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) - -EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, - 'class_factor': 6, - 'state_table': EUCJP_ST, - 'char_len_table': EUCJP_CHAR_LEN_TABLE, - 'name': 'EUC-JP'} - -# EUC-KR - -EUCKR_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,3,3,3, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,3,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 2,2,2,2,2,2,2,2, # e0 - e7 - 2,2,2,2,2,2,2,2, # e8 - ef - 2,2,2,2,2,2,2,2, # f0 - f7 - 2,2,2,2,2,2,2,0 # f8 - ff -) - -EUCKR_ST = ( - MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f -) - -EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) - -EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, - 'class_factor': 4, - 'state_table': EUCKR_ST, - 'char_len_table': EUCKR_CHAR_LEN_TABLE, - 'name': 'EUC-KR'} - -# EUC-TW - -EUCTW_CLS = ( - 2,2,2,2,2,2,2,2, # 00 - 07 - 2,2,2,2,2,2,0,0, # 08 - 0f - 2,2,2,2,2,2,2,2, # 10 - 17 - 2,2,2,0,2,2,2,2, # 18 - 1f - 2,2,2,2,2,2,2,2, # 20 - 27 - 2,2,2,2,2,2,2,2, # 28 - 2f - 2,2,2,2,2,2,2,2, # 30 - 37 - 2,2,2,2,2,2,2,2, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,2, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,6,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,3,4,4,4,4,4,4, # a0 - a7 - 5,5,1,1,1,1,1,1, # a8 - af - 1,1,1,1,1,1,1,1, # b0 - b7 - 1,1,1,1,1,1,1,1, # b8 - bf - 1,1,3,1,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -EUCTW_ST = ( - MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 - MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 - MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f -) - -EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) - -EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, - 'class_factor': 7, - 'state_table': EUCTW_ST, - 'char_len_table': EUCTW_CHAR_LEN_TABLE, - 'name': 'x-euc-tw'} - -# GB2312 - -GB2312_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 3,3,3,3,3,3,3,3, # 30 - 37 - 3,3,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,4, # 78 - 7f - 5,6,6,6,6,6,6,6, # 80 - 87 - 6,6,6,6,6,6,6,6, # 88 - 8f - 6,6,6,6,6,6,6,6, # 90 - 97 - 6,6,6,6,6,6,6,6, # 98 - 9f - 6,6,6,6,6,6,6,6, # a0 - a7 - 6,6,6,6,6,6,6,6, # a8 - af - 6,6,6,6,6,6,6,6, # b0 - b7 - 6,6,6,6,6,6,6,6, # b8 - bf - 6,6,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 6,6,6,6,6,6,6,6, # e0 - e7 - 6,6,6,6,6,6,6,6, # e8 - ef - 6,6,6,6,6,6,6,6, # f0 - f7 - 6,6,6,6,6,6,6,0 # f8 - ff -) - -GB2312_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 - 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f -) - -# To be accurate, the length of class 6 can be either 2 or 4. -# But it is not necessary to discriminate between the two since -# it is used for frequency analysis only, and we are validating -# each code range there as well. So it is safe to set it to be -# 2 here. -GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) - -GB2312_SM_MODEL = {'class_table': GB2312_CLS, - 'class_factor': 7, - 'state_table': GB2312_ST, - 'char_len_table': GB2312_CHAR_LEN_TABLE, - 'name': 'GB2312'} - -# Shift_JIS - -SJIS_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 3,3,3,3,3,2,2,3, # 80 - 87 - 3,3,3,3,3,3,3,3, # 88 - 8f - 3,3,3,3,3,3,3,3, # 90 - 97 - 3,3,3,3,3,3,3,3, # 98 - 9f - #0xa0 is illegal in sjis encoding, but some pages does - #contain such byte. We need to be more error forgiven. - 2,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,4,4,4, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,0,0,0) # f8 - ff - - -SJIS_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 -) - -SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) - -SJIS_SM_MODEL = {'class_table': SJIS_CLS, - 'class_factor': 6, - 'state_table': SJIS_ST, - 'char_len_table': SJIS_CHAR_LEN_TABLE, - 'name': 'Shift_JIS'} - -# UCS2-BE - -UCS2BE_CLS = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2BE_ST = ( - 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 - 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f - 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 - 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f - 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 -) - -UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) - -UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, - 'class_factor': 6, - 'state_table': UCS2BE_ST, - 'char_len_table': UCS2BE_CHAR_LEN_TABLE, - 'name': 'UTF-16BE'} - -# UCS2-LE - -UCS2LE_CLS = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2LE_ST = ( - 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 - 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f - 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 - 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f - 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 -) - -UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) - -UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, - 'class_factor': 6, - 'state_table': UCS2LE_ST, - 'char_len_table': UCS2LE_CHAR_LEN_TABLE, - 'name': 'UTF-16LE'} - -# UTF-8 - -UTF8_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 2,2,2,2,3,3,3,3, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 5,5,5,5,5,5,5,5, # a0 - a7 - 5,5,5,5,5,5,5,5, # a8 - af - 5,5,5,5,5,5,5,5, # b0 - b7 - 5,5,5,5,5,5,5,5, # b8 - bf - 0,0,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 7,8,8,8,8,8,8,8, # e0 - e7 - 8,8,8,8,8,9,8,8, # e8 - ef - 10,11,11,11,11,11,11,11, # f0 - f7 - 12,13,13,13,14,15,0,0 # f8 - ff -) - -UTF8_ST = ( - MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 - 9, 11, 8, 7, 6, 5, 4, 3,#08-0f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f - MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f - MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f - MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f - MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af - MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf -) - -UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) - -UTF8_SM_MODEL = {'class_table': UTF8_CLS, - 'class_factor': 16, - 'state_table': UTF8_ST, - 'char_len_table': UTF8_CHAR_LEN_TABLE, - 'name': 'UTF-8'} diff --git a/venv/lib/python3.6/site-packages/chardet/sbcharsetprober.py b/venv/lib/python3.6/site-packages/chardet/sbcharsetprober.py deleted file mode 100644 index 0adb51d..0000000 --- a/venv/lib/python3.6/site-packages/chardet/sbcharsetprober.py +++ /dev/null @@ -1,132 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import CharacterCategory, ProbingState, SequenceLikelihood - - -class SingleByteCharSetProber(CharSetProber): - SAMPLE_SIZE = 64 - SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 - POSITIVE_SHORTCUT_THRESHOLD = 0.95 - NEGATIVE_SHORTCUT_THRESHOLD = 0.05 - - def __init__(self, model, reversed=False, name_prober=None): - super(SingleByteCharSetProber, self).__init__() - self._model = model - # TRUE if we need to reverse every pair in the model lookup - self._reversed = reversed - # Optional auxiliary prober for name decision - self._name_prober = name_prober - self._last_order = None - self._seq_counters = None - self._total_seqs = None - self._total_char = None - self._freq_char = None - self.reset() - - def reset(self): - super(SingleByteCharSetProber, self).reset() - # char order of last character - self._last_order = 255 - self._seq_counters = [0] * SequenceLikelihood.get_num_categories() - self._total_seqs = 0 - self._total_char = 0 - # characters that fall in our sampling range - self._freq_char = 0 - - @property - def charset_name(self): - if self._name_prober: - return self._name_prober.charset_name - else: - return self._model['charset_name'] - - @property - def language(self): - if self._name_prober: - return self._name_prober.language - else: - return self._model.get('language') - - def feed(self, byte_str): - if not self._model['keep_english_letter']: - byte_str = self.filter_international_words(byte_str) - if not byte_str: - return self.state - char_to_order_map = self._model['char_to_order_map'] - for i, c in enumerate(byte_str): - # XXX: Order is in range 1-64, so one would think we want 0-63 here, - # but that leads to 27 more test failures than before. - order = char_to_order_map[c] - # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but - # CharacterCategory.SYMBOL is actually 253, so we use CONTROL - # to make it closer to the original intent. The only difference - # is whether or not we count digits and control characters for - # _total_char purposes. - if order < CharacterCategory.CONTROL: - self._total_char += 1 - if order < self.SAMPLE_SIZE: - self._freq_char += 1 - if self._last_order < self.SAMPLE_SIZE: - self._total_seqs += 1 - if not self._reversed: - i = (self._last_order * self.SAMPLE_SIZE) + order - model = self._model['precedence_matrix'][i] - else: # reverse the order of the letters in the lookup - i = (order * self.SAMPLE_SIZE) + self._last_order - model = self._model['precedence_matrix'][i] - self._seq_counters[model] += 1 - self._last_order = order - - charset_name = self._model['charset_name'] - if self.state == ProbingState.DETECTING: - if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: - confidence = self.get_confidence() - if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: - self.logger.debug('%s confidence = %s, we have a winner', - charset_name, confidence) - self._state = ProbingState.FOUND_IT - elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: - self.logger.debug('%s confidence = %s, below negative ' - 'shortcut threshhold %s', charset_name, - confidence, - self.NEGATIVE_SHORTCUT_THRESHOLD) - self._state = ProbingState.NOT_ME - - return self.state - - def get_confidence(self): - r = 0.01 - if self._total_seqs > 0: - r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / - self._total_seqs / self._model['typical_positive_ratio']) - r = r * self._freq_char / self._total_char - if r >= 1.0: - r = 0.99 - return r diff --git a/venv/lib/python3.6/site-packages/chardet/sbcsgroupprober.py b/venv/lib/python3.6/site-packages/chardet/sbcsgroupprober.py deleted file mode 100644 index 98e95dc..0000000 --- a/venv/lib/python3.6/site-packages/chardet/sbcsgroupprober.py +++ /dev/null @@ -1,73 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .sbcharsetprober import SingleByteCharSetProber -from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, - Latin5CyrillicModel, MacCyrillicModel, - Ibm866Model, Ibm855Model) -from .langgreekmodel import Latin7GreekModel, Win1253GreekModel -from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel -# from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel -from .langthaimodel import TIS620ThaiModel -from .langhebrewmodel import Win1255HebrewModel -from .hebrewprober import HebrewProber -from .langturkishmodel import Latin5TurkishModel - - -class SBCSGroupProber(CharSetGroupProber): - def __init__(self): - super(SBCSGroupProber, self).__init__() - self.probers = [ - SingleByteCharSetProber(Win1251CyrillicModel), - SingleByteCharSetProber(Koi8rModel), - SingleByteCharSetProber(Latin5CyrillicModel), - SingleByteCharSetProber(MacCyrillicModel), - SingleByteCharSetProber(Ibm866Model), - SingleByteCharSetProber(Ibm855Model), - SingleByteCharSetProber(Latin7GreekModel), - SingleByteCharSetProber(Win1253GreekModel), - SingleByteCharSetProber(Latin5BulgarianModel), - SingleByteCharSetProber(Win1251BulgarianModel), - # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) - # after we retrain model. - # SingleByteCharSetProber(Latin2HungarianModel), - # SingleByteCharSetProber(Win1250HungarianModel), - SingleByteCharSetProber(TIS620ThaiModel), - SingleByteCharSetProber(Latin5TurkishModel), - ] - hebrew_prober = HebrewProber() - logical_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, - False, hebrew_prober) - visual_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, True, - hebrew_prober) - hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) - self.probers.extend([hebrew_prober, logical_hebrew_prober, - visual_hebrew_prober]) - - self.reset() diff --git a/venv/lib/python3.6/site-packages/chardet/sjisprober.py b/venv/lib/python3.6/site-packages/chardet/sjisprober.py deleted file mode 100644 index 9e29623..0000000 --- a/venv/lib/python3.6/site-packages/chardet/sjisprober.py +++ /dev/null @@ -1,92 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import SJISDistributionAnalysis -from .jpcntx import SJISContextAnalysis -from .mbcssm import SJIS_SM_MODEL -from .enums import ProbingState, MachineState - - -class SJISProber(MultiByteCharSetProber): - def __init__(self): - super(SJISProber, self).__init__() - self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) - self.distribution_analyzer = SJISDistributionAnalysis() - self.context_analyzer = SJISContextAnalysis() - self.reset() - - def reset(self): - super(SJISProber, self).reset() - self.context_analyzer.reset() - - @property - def charset_name(self): - return self.context_analyzer.charset_name - - @property - def language(self): - return "Japanese" - - def feed(self, byte_str): - for i in range(len(byte_str)): - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.context_analyzer.feed(self._last_char[2 - char_len:], - char_len) - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 - - char_len], char_len) - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.context_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - context_conf = self.context_analyzer.get_confidence() - distrib_conf = self.distribution_analyzer.get_confidence() - return max(context_conf, distrib_conf) diff --git a/venv/lib/python3.6/site-packages/chardet/universaldetector.py b/venv/lib/python3.6/site-packages/chardet/universaldetector.py deleted file mode 100644 index 7b4e92d..0000000 --- a/venv/lib/python3.6/site-packages/chardet/universaldetector.py +++ /dev/null @@ -1,286 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### -""" -Module containing the UniversalDetector detector class, which is the primary -class a user of ``chardet`` should use. - -:author: Mark Pilgrim (initial port to Python) -:author: Shy Shalom (original C code) -:author: Dan Blanchard (major refactoring for 3.0) -:author: Ian Cordasco -""" - - -import codecs -import logging -import re - -from .charsetgroupprober import CharSetGroupProber -from .enums import InputState, LanguageFilter, ProbingState -from .escprober import EscCharSetProber -from .latin1prober import Latin1Prober -from .mbcsgroupprober import MBCSGroupProber -from .sbcsgroupprober import SBCSGroupProber - - -class UniversalDetector(object): - """ - The ``UniversalDetector`` class underlies the ``chardet.detect`` function - and coordinates all of the different charset probers. - - To get a ``dict`` containing an encoding and its confidence, you can simply - run: - - .. code:: - - u = UniversalDetector() - u.feed(some_bytes) - u.close() - detected = u.result - - """ - - MINIMUM_THRESHOLD = 0.20 - HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') - ESC_DETECTOR = re.compile(b'(\033|~{)') - WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') - ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', - 'iso-8859-2': 'Windows-1250', - 'iso-8859-5': 'Windows-1251', - 'iso-8859-6': 'Windows-1256', - 'iso-8859-7': 'Windows-1253', - 'iso-8859-8': 'Windows-1255', - 'iso-8859-9': 'Windows-1254', - 'iso-8859-13': 'Windows-1257'} - - def __init__(self, lang_filter=LanguageFilter.ALL): - self._esc_charset_prober = None - self._charset_probers = [] - self.result = None - self.done = None - self._got_data = None - self._input_state = None - self._last_char = None - self.lang_filter = lang_filter - self.logger = logging.getLogger(__name__) - self._has_win_bytes = None - self.reset() - - def reset(self): - """ - Reset the UniversalDetector and all of its probers back to their - initial states. This is called by ``__init__``, so you only need to - call this directly in between analyses of different documents. - """ - self.result = {'encoding': None, 'confidence': 0.0, 'language': None} - self.done = False - self._got_data = False - self._has_win_bytes = False - self._input_state = InputState.PURE_ASCII - self._last_char = b'' - if self._esc_charset_prober: - self._esc_charset_prober.reset() - for prober in self._charset_probers: - prober.reset() - - def feed(self, byte_str): - """ - Takes a chunk of a document and feeds it through all of the relevant - charset probers. - - After calling ``feed``, you can check the value of the ``done`` - attribute to see if you need to continue feeding the - ``UniversalDetector`` more data, or if it has made a prediction - (in the ``result`` attribute). - - .. note:: - You should always call ``close`` when you're done feeding in your - document if ``done`` is not already ``True``. - """ - if self.done: - return - - if not len(byte_str): - return - - if not isinstance(byte_str, bytearray): - byte_str = bytearray(byte_str) - - # First check for known BOMs, since these are guaranteed to be correct - if not self._got_data: - # If the data starts with BOM, we know it is UTF - if byte_str.startswith(codecs.BOM_UTF8): - # EF BB BF UTF-8 with BOM - self.result = {'encoding': "UTF-8-SIG", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith((codecs.BOM_UTF32_LE, - codecs.BOM_UTF32_BE)): - # FF FE 00 00 UTF-32, little-endian BOM - # 00 00 FE FF UTF-32, big-endian BOM - self.result = {'encoding': "UTF-32", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith(b'\xFE\xFF\x00\x00'): - # FE FF 00 00 UCS-4, unusual octet order BOM (3412) - self.result = {'encoding': "X-ISO-10646-UCS-4-3412", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith(b'\x00\x00\xFF\xFE'): - # 00 00 FF FE UCS-4, unusual octet order BOM (2143) - self.result = {'encoding': "X-ISO-10646-UCS-4-2143", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): - # FF FE UTF-16, little endian BOM - # FE FF UTF-16, big endian BOM - self.result = {'encoding': "UTF-16", - 'confidence': 1.0, - 'language': ''} - - self._got_data = True - if self.result['encoding'] is not None: - self.done = True - return - - # If none of those matched and we've only see ASCII so far, check - # for high bytes and escape sequences - if self._input_state == InputState.PURE_ASCII: - if self.HIGH_BYTE_DETECTOR.search(byte_str): - self._input_state = InputState.HIGH_BYTE - elif self._input_state == InputState.PURE_ASCII and \ - self.ESC_DETECTOR.search(self._last_char + byte_str): - self._input_state = InputState.ESC_ASCII - - self._last_char = byte_str[-1:] - - # If we've seen escape sequences, use the EscCharSetProber, which - # uses a simple state machine to check for known escape sequences in - # HZ and ISO-2022 encodings, since those are the only encodings that - # use such sequences. - if self._input_state == InputState.ESC_ASCII: - if not self._esc_charset_prober: - self._esc_charset_prober = EscCharSetProber(self.lang_filter) - if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: - self.result = {'encoding': - self._esc_charset_prober.charset_name, - 'confidence': - self._esc_charset_prober.get_confidence(), - 'language': - self._esc_charset_prober.language} - self.done = True - # If we've seen high bytes (i.e., those with values greater than 127), - # we need to do more complicated checks using all our multi-byte and - # single-byte probers that are left. The single-byte probers - # use character bigram distributions to determine the encoding, whereas - # the multi-byte probers use a combination of character unigram and - # bigram distributions. - elif self._input_state == InputState.HIGH_BYTE: - if not self._charset_probers: - self._charset_probers = [MBCSGroupProber(self.lang_filter)] - # If we're checking non-CJK encodings, use single-byte prober - if self.lang_filter & LanguageFilter.NON_CJK: - self._charset_probers.append(SBCSGroupProber()) - self._charset_probers.append(Latin1Prober()) - for prober in self._charset_probers: - if prober.feed(byte_str) == ProbingState.FOUND_IT: - self.result = {'encoding': prober.charset_name, - 'confidence': prober.get_confidence(), - 'language': prober.language} - self.done = True - break - if self.WIN_BYTE_DETECTOR.search(byte_str): - self._has_win_bytes = True - - def close(self): - """ - Stop analyzing the current document and come up with a final - prediction. - - :returns: The ``result`` attribute, a ``dict`` with the keys - `encoding`, `confidence`, and `language`. - """ - # Don't bother with checks if we're already done - if self.done: - return self.result - self.done = True - - if not self._got_data: - self.logger.debug('no data received!') - - # Default to ASCII if it is all we've seen so far - elif self._input_state == InputState.PURE_ASCII: - self.result = {'encoding': 'ascii', - 'confidence': 1.0, - 'language': ''} - - # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD - elif self._input_state == InputState.HIGH_BYTE: - prober_confidence = None - max_prober_confidence = 0.0 - max_prober = None - for prober in self._charset_probers: - if not prober: - continue - prober_confidence = prober.get_confidence() - if prober_confidence > max_prober_confidence: - max_prober_confidence = prober_confidence - max_prober = prober - if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): - charset_name = max_prober.charset_name - lower_charset_name = max_prober.charset_name.lower() - confidence = max_prober.get_confidence() - # Use Windows encoding name instead of ISO-8859 if we saw any - # extra Windows-specific bytes - if lower_charset_name.startswith('iso-8859'): - if self._has_win_bytes: - charset_name = self.ISO_WIN_MAP.get(lower_charset_name, - charset_name) - self.result = {'encoding': charset_name, - 'confidence': confidence, - 'language': max_prober.language} - - # Log all prober confidences if none met MINIMUM_THRESHOLD - if self.logger.getEffectiveLevel() == logging.DEBUG: - if self.result['encoding'] is None: - self.logger.debug('no probers hit minimum threshold') - for group_prober in self._charset_probers: - if not group_prober: - continue - if isinstance(group_prober, CharSetGroupProber): - for prober in group_prober.probers: - self.logger.debug('%s %s confidence = %s', - prober.charset_name, - prober.language, - prober.get_confidence()) - else: - self.logger.debug('%s %s confidence = %s', - prober.charset_name, - prober.language, - prober.get_confidence()) - return self.result diff --git a/venv/lib/python3.6/site-packages/chardet/utf8prober.py b/venv/lib/python3.6/site-packages/chardet/utf8prober.py deleted file mode 100644 index 6c3196c..0000000 --- a/venv/lib/python3.6/site-packages/chardet/utf8prober.py +++ /dev/null @@ -1,82 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState, MachineState -from .codingstatemachine import CodingStateMachine -from .mbcssm import UTF8_SM_MODEL - - - -class UTF8Prober(CharSetProber): - ONE_CHAR_PROB = 0.5 - - def __init__(self): - super(UTF8Prober, self).__init__() - self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) - self._num_mb_chars = None - self.reset() - - def reset(self): - super(UTF8Prober, self).reset() - self.coding_sm.reset() - self._num_mb_chars = 0 - - @property - def charset_name(self): - return "utf-8" - - @property - def language(self): - return "" - - def feed(self, byte_str): - for c in byte_str: - coding_state = self.coding_sm.next_state(c) - if coding_state == MachineState.ERROR: - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - if self.coding_sm.get_current_charlen() >= 2: - self._num_mb_chars += 1 - - if self.state == ProbingState.DETECTING: - if self.get_confidence() > self.SHORTCUT_THRESHOLD: - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - unlike = 0.99 - if self._num_mb_chars < 6: - unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars - return 1.0 - unlike - else: - return unlike diff --git a/venv/lib/python3.6/site-packages/chardet/version.py b/venv/lib/python3.6/site-packages/chardet/version.py deleted file mode 100644 index bb2a34a..0000000 --- a/venv/lib/python3.6/site-packages/chardet/version.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -This module exists only to simplify retrieving the version number of chardet -from within setup.py and from chardet subpackages. - -:author: Dan Blanchard (dan.blanchard@gmail.com) -""" - -__version__ = "3.0.4" -VERSION = __version__.split('.') diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/DESCRIPTION.rst deleted file mode 100644 index a8d462a..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,91 +0,0 @@ -Documentation: http://chrissimpkins.github.io/crypto/ - -Description -------------- - -crypto provides a simple interface to symmetric Gnu Privacy Guard (gpg) encryption and decryption for one or more files on Unix and Linux platforms. It runs on top of gpg and requires a gpg install on your system. Encryption is performed with the AES256 cipher algorithm. `Benchmarks relative to default gpg settings are available for text and binary file mime types `_. - -crypto provides a number of options including automated tar archives of multiple files prior to encryption, portable ASCII armored encryption formatting, and SHA256 hash digest generation for your encrypted files. You can view all available options in the `usage documentation `_ or with the ``--help`` option. - -Tested in cPython 2.7.x, 3.4.x, and pypy 2.4.x (Python version 2.7.9) - - -Install ---------- - -Install with ``pip`` using the command: - -.. code-block:: bash - - $ pip install crypto - -or `download the source repository `_, unpack it, and navigate to the top level of the repository. Then enter: - -.. code-block:: bash - - $ python setup.py install - - -Upgrade ------------ - -You can upgrade your crypto version with the command: - -.. code-block:: bash - - $ pip install --upgrade crypto - - -Usage ---------- - -Encryption (crypto) -^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: bash - - $ crypto [file path] - -.. code-block:: bash - - $ crypto [directory path] - - -Decryption (decrypto) -^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: bash - - $ decrypto [file path] - -.. code-block:: bash - - $ decrypto [directory path] - - -You can find all available options in the `documentation `_ or by using one of the following commands: - -.. code-block:: bash - - $ crypto --help - $ decrypto --help - - -Frequently Asked Questions -------------------------------- - -`FAQ link `_ - - -Issue Reporting -------------------- - -Issue reporting is available on the `GitHub repository `_ - - -Changelog ------------- - -`Changelog link `_ - - diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/METADATA b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/METADATA deleted file mode 100644 index a47264e..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/METADATA +++ /dev/null @@ -1,116 +0,0 @@ -Metadata-Version: 2.0 -Name: crypto -Version: 1.4.1 -Summary: Simple symmetric GPG file encryption and decryption -Home-page: https://github.com/chrissimpkins/crypto -Author: Christopher Simpkins -Author-email: git.simpkins@gmail.com -License: MIT license -Keywords: encryption,decryption,gpg,pgp,openpgp,cipher,AES256,crypto,cryptography,security,privacy -Platform: any -Classifier: Intended Audience :: End Users/Desktop -Classifier: Topic :: Security :: Cryptography -Classifier: Topic :: Security -Classifier: Development Status :: 5 - Production/Stable -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: MacOS :: MacOS X -Classifier: Operating System :: POSIX -Classifier: Operating System :: Unix -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 -Requires-Dist: Naked -Requires-Dist: shellescape - -Documentation: http://chrissimpkins.github.io/crypto/ - -Description -------------- - -crypto provides a simple interface to symmetric Gnu Privacy Guard (gpg) encryption and decryption for one or more files on Unix and Linux platforms. It runs on top of gpg and requires a gpg install on your system. Encryption is performed with the AES256 cipher algorithm. `Benchmarks relative to default gpg settings are available for text and binary file mime types `_. - -crypto provides a number of options including automated tar archives of multiple files prior to encryption, portable ASCII armored encryption formatting, and SHA256 hash digest generation for your encrypted files. You can view all available options in the `usage documentation `_ or with the ``--help`` option. - -Tested in cPython 2.7.x, 3.4.x, and pypy 2.4.x (Python version 2.7.9) - - -Install ---------- - -Install with ``pip`` using the command: - -.. code-block:: bash - - $ pip install crypto - -or `download the source repository `_, unpack it, and navigate to the top level of the repository. Then enter: - -.. code-block:: bash - - $ python setup.py install - - -Upgrade ------------ - -You can upgrade your crypto version with the command: - -.. code-block:: bash - - $ pip install --upgrade crypto - - -Usage ---------- - -Encryption (crypto) -^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: bash - - $ crypto [file path] - -.. code-block:: bash - - $ crypto [directory path] - - -Decryption (decrypto) -^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: bash - - $ decrypto [file path] - -.. code-block:: bash - - $ decrypto [directory path] - - -You can find all available options in the `documentation `_ or by using one of the following commands: - -.. code-block:: bash - - $ crypto --help - $ decrypto --help - - -Frequently Asked Questions -------------------------------- - -`FAQ link `_ - - -Issue Reporting -------------------- - -Issue reporting is available on the `GitHub repository `_ - - -Changelog ------------- - -`Changelog link `_ - - diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/RECORD b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/RECORD deleted file mode 100644 index cf47d08..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/RECORD +++ /dev/null @@ -1,28 +0,0 @@ -crypto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -crypto/app.py,sha256=m9usVyS7G-vg7YYx7rVV1DWohss5xlKKq5vV-viSi8o,13952 -crypto/decryptoapp.py,sha256=5hJEh55vyHSgMUkIp2PdYn5P1Z6qkFdrAnsu8EhJZ8c,22448 -crypto/settings.py,sha256=d--yWR6fCw10JO3tyQhCY1z36PzPsW7ElRmcikNd8vg,4506 -crypto/library/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -crypto/library/cryptor.py,sha256=0A6KMRsRo7UpfFw0qTbaVByqIRqO4bGSbckgR9fH-RQ,8934 -crypto/library/hash.py,sha256=HVO5NcCRVHJRYOIAMTHlxzk1wWAeYuon2QwiRHJJaAY,847 -crypto/library/package.py,sha256=mTXHpmJFRKqx_KGRN1bUfSei8duBARZKtH4hBQzXAi4,1754 -crypto-1.4.1.data/scripts/crypto,sha256=JiOIH9vUcNmsPUqHi3sD7wa-KshHSSHsWwYxdJxquFU,287 -crypto-1.4.1.data/scripts/decrypto,sha256=GFVx1pyc7wga_NuKaO5IN4VpiC-iB1nXFIzvwRKs-QI,291 -crypto-1.4.1.dist-info/DESCRIPTION.rst,sha256=cUnYN7Bc2SHYRPCbrgoiwqxsilKu-F870exbHPzYyqg,2406 -crypto-1.4.1.dist-info/entry_points.txt,sha256=c4pXwtenCFUlTF9DHcgCWqXZChpJwNtbSjtfQMhrm3M,79 -crypto-1.4.1.dist-info/METADATA,sha256=kQ8T3QfQ00YZ0ETfqAgpzT7JjQZyAtcbpdD4eO-LyfY,3354 -crypto-1.4.1.dist-info/pydist.json,sha256=Q2O_1hp0_7IBZ-JTH9MYE5-GNhTxeT1KqjRvp6U8YAs,1261 -crypto-1.4.1.dist-info/RECORD,, -crypto-1.4.1.dist-info/top_level.txt,sha256=iQrOUgmGXiXK01vJOH4JP-6x-yip7JIM4OEshevZ9wE,7 -crypto-1.4.1.dist-info/WHEEL,sha256=SXYYsi-y-rEGIva8sB8iKF6bAFD6YDhmqHX5hI3fc0o,110 -../../../bin/crypto,sha256=BYZlZ3E9r0da6f_HUTnYmQcKsqzKvVm2CNPU0UOn6GM,251 -../../../bin/decrypto,sha256=3IzCdFjPqoMxRIt45Vn1w3hS7u3c0e2Fmkfh8QViRNs,259 -crypto-1.4.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -crypto/library/__pycache__/hash.cpython-36.pyc,, -crypto/library/__pycache__/__init__.cpython-36.pyc,, -crypto/library/__pycache__/package.cpython-36.pyc,, -crypto/library/__pycache__/cryptor.cpython-36.pyc,, -crypto/__pycache__/decryptoapp.cpython-36.pyc,, -crypto/__pycache__/__init__.cpython-36.pyc,, -crypto/__pycache__/settings.cpython-36.pyc,, -crypto/__pycache__/app.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/WHEEL b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/WHEEL deleted file mode 100644 index f2ddc35..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.22.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/entry_points.txt b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/entry_points.txt deleted file mode 100644 index ff85480..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/entry_points.txt +++ /dev/null @@ -1,4 +0,0 @@ -[console_scripts] -crypto = crypto.app:main -decrypto = crypto.decryptoapp:main - diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/pydist.json b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/pydist.json deleted file mode 100644 index c05d171..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/pydist.json +++ /dev/null @@ -1 +0,0 @@ -{"license": "MIT license", "exports": {"console_scripts": {"crypto": "crypto.app:main", "decrypto": "crypto.decryptoapp:main"}}, "document_names": {"description": "DESCRIPTION.rst"}, "name": "crypto", "metadata_version": "2.0", "contacts": [{"role": "author", "email": "git.simpkins@gmail.com", "name": "Christopher Simpkins"}], "generator": "bdist_wheel (0.22.0)", "commands": {"wrap_console": {"crypto": "crypto.app:main", "decrypto": "crypto.decryptoapp:main"}}, "summary": "Simple symmetric GPG file encryption and decryption", "project_urls": {"Home": "https://github.com/chrissimpkins/crypto"}, "platform": "any", "run_requires": [{"requires": ["Naked", "shellescape"]}], "version": "1.4.1", "keywords": "encryption,decryption,gpg,pgp,openpgp,cipher,AES256,crypto,cryptography,security,privacy", "classifiers": ["Intended Audience :: End Users/Desktop", "Topic :: Security :: Cryptography", "Topic :: Security", "Development Status :: 5 - Production/Stable", "Natural Language :: English", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3"], "extras": []} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/top_level.txt deleted file mode 100644 index 0ed5679..0000000 --- a/venv/lib/python3.6/site-packages/crypto-1.4.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -crypto diff --git a/venv/lib/python3.6/site-packages/crypto/__init__.py b/venv/lib/python3.6/site-packages/crypto/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/crypto/app.py b/venv/lib/python3.6/site-packages/crypto/app.py deleted file mode 100644 index e930239..0000000 --- a/venv/lib/python3.6/site-packages/crypto/app.py +++ /dev/null @@ -1,262 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# ------------------------------------------------------------------------------ -# crypto -# Copyright 2015 Christopher Simpkins -# MIT license -# ------------------------------------------------------------------------------ - -# Application start - - -def main(): - import sys - import getpass - from Naked.commandline import Command - from Naked.toolshed.system import dir_exists, file_exists, list_all_files, make_path, stderr - - # ------------------------------------------------------------------------------------------ - # [ Instantiate command line object ] - # used for all subsequent conditional logic in the CLI application - # ------------------------------------------------------------------------------------------ - c = Command(sys.argv[0], sys.argv[1:]) - # ------------------------------------------------------------------------------------------ - # [ VALIDATION LOGIC ] - early validation of appropriate command syntax - # Test that user entered at least one argument to the executable, print usage if not - # ------------------------------------------------------------------------------------------ - if not c.command_suite_validates(): - from crypto.settings import usage as crypto_usage - print(crypto_usage) - sys.exit(1) - # ------------------------------------------------------------------------------------------ - # [ HELP, VERSION, USAGE LOGIC ] - # Naked framework provides default help, usage, and version commands for all applications - # --> settings for user messages are assigned in the lib/crypto/settings.py file - # ------------------------------------------------------------------------------------------ - if c.help(): # User requested crypto help information - from crypto.settings import help as crypto_help - print(crypto_help) - sys.exit(0) - elif c.usage(): # User requested crypto usage information - from crypto.settings import usage as crypto_usage - print(crypto_usage) - sys.exit(0) - elif c.version(): # User requested crypto version information - from crypto.settings import app_name, major_version, minor_version, patch_version - version_display_string = app_name + ' ' + major_version + '.' + minor_version + '.' + patch_version - print(version_display_string) - sys.exit(0) - # ------------------------------------------------------------------------------------------ - # [ APPLICATION LOGIC ] - # - # ------------------------------------------------------------------------------------------ - elif c.argc > 1: - # code for multi-file processing and commands that include options - # ASCII ARMOR SWITCH - ascii_armored = False - if c.option('--armor') or c.option('-a'): - ascii_armored = True - - # MAX COMPRESS / COMPRESS ALL SWITCH - max_compress = False - if c.option('--space'): - max_compress = True - - # NO COMPRESSION SWITCH - no_compress = False - if c.option('--speed'): - no_compress = True - - # SECURE HASH DIGEST REPORT SWITCH - report_checksum = False - if c.option('--hash'): - report_checksum = True - - # TAR FOLDERS SWITCH - tar_folders = False - if c.option('--tar'): - tar_folders = True - - directory_list = [] # directory paths included in the user entered paths from the command line - tar_directory_list = [] # directories, which need to be packaged as tar archives - file_list = [] # file paths included in the user entered paths from the command line (and inside directories entered) - - # dot and .crypt file flags for exclusion testing - contained_dot_file = False - contained_crypt_file = False - - # determine if argument is an existing file or directory - for argument in c.argv: - if file_exists(argument): - if argument.endswith('.crypt'): # do not include previously encrypted files - contained_crypt_file = True - else: - file_list.append(argument) # add appropriate file paths to the file_list - elif dir_exists(argument): - directory_list.append(argument) # if it is a directory, add path to the directory_list - - # add all file paths from user specified directories to the file_list - if len(directory_list) > 0: - if not tar_folders: - for directory in directory_list: - directory_file_list = list_all_files(directory) - for contained_file in directory_file_list: - if contained_file[0] == ".": - contained_dot_file = True # change the flag + is not included in file_list intentionally (no dot files) - elif contained_file.endswith('.crypt'): - contained_crypt_file = True # change the flag + is not included in file_list intentionally (no previously encrypted files) - else: - # otherwise add to the list for encryption - contained_file_path = make_path(directory, contained_file) - file_list.append(contained_file_path) - else: - # create (uncompressed) tar archive for every targeted folder and add the resulting archive to the file_list - # do not start tar file creation, yet (!) - it is more convenient for the user to first enter the passphrase then start processing - for directory in directory_list: - directory_file_path = directory + '.tar' - tar_directory_list.append(directory) - file_list.append(directory_file_path) - - # confirm that there are files to be encrypted, if not warn user - if len(file_list) == 0: - if contained_dot_file is True or contained_crypt_file is True: - stderr("There were no files identified for encryption. crypto does not encrypt dot files or previously encrypted '.crypt' files.") - sys.exit(1) - else: - stderr("Unable to identify files for encryption") - sys.exit(1) - else: - # file_list should contain all filepaths from either user specified file paths or contained in top level of directory, encrypt them - passphrase = getpass.getpass("Please enter your passphrase: ") - if len(passphrase) == 0: # confirm that user entered a passphrase - stderr("You did not enter a passphrase. Please repeat your command and try again.") - sys.exit(1) - passphrase_confirm = getpass.getpass("Please enter your passphrase again: ") - - if passphrase == passphrase_confirm: - - # create temporary tar-files - tar_list = [] - if len(tar_directory_list) > 0: - from crypto.library import package - tar_list = package.generate_tar_files(tar_directory_list) - for t in tar_list: - if t not in file_list: # check to confirm that the tar archive is in the list of files to encrypt - if file_exists(t): - # append the tarfile to the file_list for encryption if it was not included in the file list for encryption - file_list.append(t) - else: - stderr("There was an error with the tar archive creation. Please try again.", exit=1) - - from crypto.library.cryptor import Cryptor - the_cryptor = Cryptor(passphrase) - - # run encryption based upon any passed switches - if ascii_armored: - if max_compress: - the_cryptor.encrypt_files(file_list, force_nocompress=False, force_compress=True, armored=True, checksum=report_checksum) - elif no_compress: - the_cryptor.encrypt_files(file_list, force_nocompress=True, force_compress=False, armored=True, checksum=report_checksum) - else: - the_cryptor.encrypt_files(file_list, force_nocompress=False, force_compress=False, armored=True, checksum=report_checksum) - else: - if max_compress: - the_cryptor.encrypt_files(file_list, force_nocompress=False, force_compress=True, armored=False, checksum=report_checksum) - elif no_compress: - the_cryptor.encrypt_files(file_list, force_nocompress=True, force_compress=False, armored=False, checksum=report_checksum) - else: - the_cryptor.encrypt_files(file_list, force_nocompress=False, force_compress=False, armored=False, checksum=report_checksum) - - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - the_cryptor.cleanup() - - # tmp tar file removal (generated with package.generate_tar_files function above) - if len(tar_list) > 0: - from crypto.library import package - package.remove_tar_files(tar_list) - else: - # passphrases did not match, report to user and abort - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - stderr("The passphrases did not match. Please enter your command again.") - sys.exit(1) - - elif c.argc == 1: - # simple single file or directory processing with default settings - path = c.arg0 - if file_exists(path): - # it is a file, encrypt the single file with default settings - # confirm that it is not already encrypted, abort if so - if path.endswith('.crypt'): - stderr("You are attempting to encrypt an encrypted file. Please delete the .crypt file and repeat encryption with the original file if this is your intent.") - sys.exit(1) - # if passes test above, obtain passphrase from the user - passphrase = getpass.getpass("Please enter your passphrase: ") - if len(passphrase) == 0: # confirm that user entered a passphrase - stderr("You did not enter a passphrase. Please repeat your command and try again.") - sys.exit(1) - passphrase_confirm = getpass.getpass("Please enter your passphrase again: ") - - if passphrase == passphrase_confirm: - from crypto.library.cryptor import Cryptor - the_cryptor = Cryptor(passphrase) - the_cryptor.encrypt_file(path) - the_cryptor.cleanup() - else: - stderr("The passphrases did not match. Please enter your command again.") - sys.exit(1) - elif dir_exists(path): - # it is a directory, encrypt all top level files with default settings - dirty_directory_file_list = list_all_files(path) - # remove dot files and previously encrypted files (with .crypt suffix) from the list of directory files - clean_directory_file_list = [x for x in dirty_directory_file_list if x[0] != "." and x.endswith(".crypt") is False] # remove dotfiles and .crypt files - - # confirm that there are still files in the list after the dot files and encrypted files are removed - if len(clean_directory_file_list) == 0: - stderr("There are no unencrypted files in the directory.") - sys.exit(1) - - # create relative file paths for each file in the clean_directory_file_list - clean_directory_file_list_relpaths = [] - for clean_file in clean_directory_file_list: - new_file_path = make_path(path, clean_file) - clean_directory_file_list_relpaths.append(new_file_path) - - # prompt for the passphrase - passphrase = getpass.getpass("Please enter your passphrase: ") - if len(passphrase) == 0: # confirm that user entered a passphrase - stderr("You did not enter a passphrase. Please repeat your command and try again.") - sys.exit(1) - passphrase_confirm = getpass.getpass("Please enter your passphrase again: ") - - if passphrase == passphrase_confirm: - from crypto.library.cryptor import Cryptor - the_cryptor = Cryptor(passphrase) - the_cryptor.encrypt_files(clean_directory_file_list_relpaths) # encrypt the list of directory files - the_cryptor.cleanup() - else: - # passphrases do not match - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - stderr("The passphrases did not match. Please enter your command again.") - sys.exit(1) - else: - # error message, not a file or directory. user entry error - stderr("The path that you entered does not appear to be an existing file or directory. Please try again.") - sys.exit(1) - - # ------------------------------------------------------------------------------------------ - # [ DEFAULT MESSAGE FOR MATCH FAILURE ] - # Message to provide to the user when all above conditional logic fails to meet a true condition - # ------------------------------------------------------------------------------------------ - else: - print("Could not complete your request. Please try again.") - sys.exit(1) - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/crypto/decryptoapp.py b/venv/lib/python3.6/site-packages/crypto/decryptoapp.py deleted file mode 100644 index 0528d3f..0000000 --- a/venv/lib/python3.6/site-packages/crypto/decryptoapp.py +++ /dev/null @@ -1,380 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# ------------------------------------------------------------------------------ -# decrypto -# Copyright 2015 Christopher Simpkins -# MIT license -# ------------------------------------------------------------------------------ - -# Application start -def main(): - import os - import sys - from time import sleep - import getpass - import tarfile - from Naked.commandline import Command - from Naked.toolshed.shell import execute, muterun - from Naked.toolshed.system import dir_exists, file_exists, list_all_files, make_path, stdout, stderr, is_dir - from shellescape import quote - - # ------------------------------------------------------------------------------------------ - # [ Instantiate command line object ] - # used for all subsequent conditional logic in the CLI application - # ------------------------------------------------------------------------------------------ - c = Command(sys.argv[0], sys.argv[1:]) - # ------------------------------------------------------------------------------------------ - # [ VALIDATION LOGIC ] - early validation of appropriate command syntax - # Test that user entered at least one argument to the executable, print usage if not - # ------------------------------------------------------------------------------------------ - if not c.command_suite_validates(): - from crypto.settings import usage as crypto_usage - print(crypto_usage) - sys.exit(1) - # ------------------------------------------------------------------------------------------ - # [ HELP, VERSION, USAGE LOGIC ] - # Naked framework provides default help, usage, and version commands for all applications - # --> settings for user messages are assigned in the lib/crypto/settings.py file - # ------------------------------------------------------------------------------------------ - if c.help(): # User requested crypto help information - from crypto.settings import help as crypto_help - print(crypto_help) - sys.exit(0) - elif c.usage(): # User requested crypto usage information - from crypto.settings import usage as crypto_usage - print(crypto_usage) - sys.exit(0) - elif c.version(): # User requested crypto version information - from crypto.settings import app_name, major_version, minor_version, patch_version - version_display_string = app_name + ' ' + major_version + '.' + minor_version + '.' + patch_version - print(version_display_string) - sys.exit(0) - # ------------------------------------------------------------------------------------------ - # [ APPLICATION LOGIC ] - # - # ------------------------------------------------------------------------------------------ - elif c.argc > 1: - # code for multi-file processing and commands that include options - use_standard_output = False # print to stdout flag - use_file_overwrite = False # overwrite existing file - untar_archives = True # untar decrypted tar archives, true by default - - # set user option flags - if c.option('--stdout') or c.option('-s'): - use_standard_output = True - if c.option('--overwrite') or c.option('-o'): - use_file_overwrite = True - if c.option('--nountar'): - untar_archives = False - - directory_list = [] # directory paths included in the user entered paths from the command line - file_list = [] # file paths included in the user entered paths from the command line (and inside directories entered) - - for argument in c.argv: - if file_exists(argument): # user included a file, add it to the file_list for decryption - if argument.endswith('.crypt'): - file_list.append(argument) # add .crypt files to the list of files for decryption - elif argument.endswith('.gpg'): - file_list.append(argument) - elif argument.endswith('.asc'): - file_list.append(argument) - elif argument.endswith('.pgp'): - file_list.append(argument) - else: - # cannot identify as an encrypted file, give it a shot anyways but warn user - file_list.append(argument) - stdout("Could not confirm that '" + argument + "' is encrypted based upon the file type. Attempting decryption. Keep your fingers crossed...") - elif dir_exists(argument): # user included a directory, add it to the directory_list - directory_list.append(argument) - else: - if argument[0] == "-": - pass # if it is an option, do nothing - else: - stderr("'" + argument + "' does not appear to be an existing file or directory. Aborting decryption attempt for this request.") - - # unroll the contained directory files into the file_list IF they are encrypted file types - if len(directory_list) > 0: - for directory in directory_list: - directory_file_list = list_all_files(directory) - for contained_file in directory_file_list: - if contained_file.endswith('.crypt'): - file_list.append(make_path(directory, contained_file)) # include the file with a filepath 'directory path/contained_file path' - elif contained_file.endswith('.gpg'): - file_list.append(make_path(directory, contained_file)) - elif contained_file.endswith('asc'): - file_list.append(make_path(directory, contained_file)) - elif contained_file.endswith('.pgp'): - file_list.append(make_path(directory, contained_file)) - - # confirm that there are files for decryption, if not abort - if len(file_list) == 0: - stderr("Could not identify files for decryption") - sys.exit(1) - - # get passphrase used to symmetrically decrypt the file - passphrase = getpass.getpass("Please enter your passphrase: ") - if len(passphrase) == 0: # confirm that user entered a passphrase - stderr("You did not enter a passphrase. Please repeat your command and try again.") - sys.exit(1) - passphrase_confirm = getpass.getpass("Please enter your passphrase again: ") - - if passphrase == passphrase_confirm: - # begin decryption of each requested file. the directory path was already added to the file path above - for encrypted_file in file_list: - # create the decrypted file name - decrypted_filename = "" - if encrypted_file.endswith('.crypt'): - decrypted_filename = encrypted_file[0:-6] - elif encrypted_file.endswith('.gpg') or encrypted_file.endswith('.asc') or encrypted_file.endswith('.pgp'): - decrypted_filename = encrypted_file[0:-4] - else: - decrypted_filename = encrypted_file + '.decrypt' # if it was a file without a known encrypted file type, add the .decrypt suffix - - # determine whether file overwrite will take place with the decrypted file - skip_file = False # flag that indicates this file should not be encrypted - created_tmp_files = False - if not use_standard_output: # if not writing a file, no need to check for overwrite - if file_exists(decrypted_filename): - if use_file_overwrite: # rename the existing file to temp file which will be erased or replaced (on decryption failures) below - tmp_filename = decrypted_filename + '.tmp' - os.rename(decrypted_filename, tmp_filename) - created_tmp_files = True - else: - stdout("The file path '" + decrypted_filename + "' already exists. This file was not decrypted.") - skip_file = True - - # begin decryption - if not skip_file: - if use_standard_output: # using --quiet flag to suppress stdout messages from gpg, just want the file data in stdout stream - system_command = "gpg --batch --quiet --passphrase " + quote(passphrase) + " -d " + quote(encrypted_file) - successful_execution = execute(system_command) # use naked execute function to directly push to stdout, rather than return stdout - - if not successful_execution: - stderr("Unable to decrypt file '" + encrypted_file + "'", 0) - if created_tmp_files: # restore the moved tmp file to original if decrypt failed - tmp_filename = decrypted_filename + '.tmp' - if file_exists(tmp_filename): - os.rename(tmp_filename, decrypted_filename) - else: # decryption successful but we are in stdout flag so do not include any other output from decrypto - pass - else: - system_command = "gpg --batch -o " + quote(decrypted_filename) + " --passphrase " + quote(passphrase) + " -d " + quote(encrypted_file) - response = muterun(system_command) - - if response.exitcode == 0: - stdout("'" + encrypted_file + "' decrypted to '" + decrypted_filename + "'") - else: # failed decryption - if created_tmp_files: # restore the moved tmp file to original if decrypt failed - tmp_filename = decrypted_filename + '.tmp' - if file_exists(tmp_filename): - os.rename(tmp_filename, decrypted_filename) - # report the error - stderr(response.stderr) - stderr("Decryption failed for " + encrypted_file) - - # cleanup: remove the tmp file - if created_tmp_files: - tmp_filename = decrypted_filename + '.tmp' - if file_exists(tmp_filename): - os.remove(tmp_filename) - - # untar/extract any detected archive file(s) - if untar_archives is True: - if decrypted_filename.endswith('.tar') and tarfile.is_tarfile(decrypted_filename): - untar_path_tuple = os.path.split(decrypted_filename) - untar_path = untar_path_tuple[0] - if use_file_overwrite: - with tarfile.open(decrypted_filename) as tar: - if len(untar_path) > 0: - tar.extractall(path=untar_path) # use dir path from the decrypted_filename if not CWD - stdout("'" + decrypted_filename + "' unpacked in the directory path '" + untar_path + "'") - else: - tar.extractall() # else use CWD - stdout("'" + decrypted_filename + "' unpacked in the current working directory") - else: - with tarfile.TarFile(decrypted_filename, 'r', errorlevel=1) as tar: - for tarinfo in tar: - t_file = tarinfo.name - if len(untar_path) > 0: - t_file_path = os.path.join(untar_path, t_file) - else: - t_file_path = t_file - if not os.path.exists(t_file_path): - try: - if len(untar_path) > 0: - tar.extract(t_file, path=untar_path) # write to the appropriate dir - else: - tar.extract(t_file) # write to CWD - except IOError as e: - stderr( - "Failed to unpack the file '" + t_file_path + "' [" + str( - e) + "]") - elif is_dir(t_file_path): - pass # do nothing if it exists and is a directory, no need to warn - else: # it is a file and it already exists, provide user error message - stderr( - "Failed to unpack the file '" + t_file_path + "'. File already exists. Use the --overwrite flag to replace existing files.") - - # remove the decrypted tar archive file - os.remove(decrypted_filename) - - # overwrite the entered passphrases after file decryption is complete for all files - passphrase = "" - passphrase_confirm = "" - - # add a short pause to hinder brute force pexpect style password attacks with decrypto - sleep(0.2) # 200ms pause - - else: # passphrases did not match - passphrase = "" - passphrase_confirm = "" - stderr("The passphrases did not match. Please enter your command again.") - sys.exit(1) - - elif c.argc == 1: - # simple single file or directory processing with default settings - path = c.arg0 - if file_exists(path): # SINGLE FILE - check_existing_file = False # check for a file with the name of new decrypted filename in the directory - - if path.endswith('.crypt'): - decrypted_filename = path[0:-6] # remove the .crypt suffix - check_existing_file = True - elif path.endswith('.gpg') or path.endswith('.pgp') or path.endswith('.asc'): - decrypted_filename = path[0:-4] - check_existing_file = True - else: - decrypted_filename = path + ".decrypt" # if there is not a standard file type, then add a .decrypt suffix to the decrypted file name - stdout("Could not confirm that the requested file is encrypted based upon the file type. Attempting decryption. Keep your fingers crossed...") - - # confirm that the decrypted path does not already exist, if so abort with warning message to user - if check_existing_file is True: - if file_exists(decrypted_filename): - stderr("Your file will be decrypted to '" + decrypted_filename + "' and this file path already exists. Please move the file or use the --overwrite option with your command if you intend to replace the current file.") - sys.exit(1) - - # get passphrase used to symmetrically decrypt the file - passphrase = getpass.getpass("Please enter your passphrase: ") - if len(passphrase) == 0: # confirm that user entered a passphrase - stderr("You did not enter a passphrase. Please repeat your command and try again.") - sys.exit(1) - passphrase_confirm = getpass.getpass("Please enter your passphrase again: ") - - # confirm that the passphrases match - if passphrase == passphrase_confirm: - system_command = "gpg --batch -o " + quote(decrypted_filename) + " --passphrase " + quote(passphrase) + " -d " + quote(path) - response = muterun(system_command) - - if response.exitcode == 0: - # unpack tar archive generated from the decryption, if present - if decrypted_filename.endswith('.tar') and tarfile.is_tarfile(decrypted_filename): - untar_path_tuple = os.path.split(decrypted_filename) - untar_path = untar_path_tuple[0] - - with tarfile.TarFile(decrypted_filename, 'r', errorlevel=1) as tar: - for tarinfo in tar: - t_file = tarinfo.name - if len(untar_path) > 0: - t_file_path = os.path.join(untar_path, t_file) - else: - t_file_path = t_file - if not os.path.exists(t_file_path): - try: - if len(untar_path) > 0: - tar.extract(t_file, path=untar_path) # write to the appropriate dir - else: - tar.extract(t_file) # write to CWD - except IOError as e: - stderr("Failed to unpack the file '" + t_file_path + "' [" + str(e) + "]") - elif is_dir(t_file_path): - pass # do nothing if it exists and is a directory, no need to warn - else: # it is a file and it already exists, provide user error message - stderr("Failed to unpack the file '" + t_file_path + "'. File already exists. Use the --overwrite flag to replace existing files.") - - # remove the decrypted tar archive - os.remove(decrypted_filename) - - stdout("Decryption complete") - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - sys.exit(0) - else: - stderr(response.stderr) - stderr("Decryption failed") - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - # add a short pause to hinder brute force pexpect style password attacks with decrypto - sleep(0.2) # 200ms pause - sys.exit(1) - else: - stderr("The passphrases did not match. Please enter your command again.") - sys.exit(1) - elif dir_exists(path): # SINGLE DIRECTORY - dirty_directory_file_list = list_all_files(path) - directory_file_list = [x for x in dirty_directory_file_list if (x.endswith('.crypt') or x.endswith('.gpg') or x.endswith('.pgp') or x.endswith('.asc'))] - - # if there are no encrypted files found, warn and abort - if len(directory_file_list) == 0: - stderr("There are no encrypted files in the directory") - sys.exit(1) - - # prompt for the passphrase - passphrase = getpass.getpass("Please enter your passphrase: ") - if len(passphrase) == 0: # confirm that user entered a passphrase - stderr("You did not enter a passphrase. Please repeat your command and try again.") - sys.exit(1) - passphrase_confirm = getpass.getpass("Please enter your passphrase again: ") - - if passphrase == passphrase_confirm: - # decrypt all of the encypted files in the directory - for filepath in directory_file_list: - absolute_filepath = make_path(path, filepath) # combine the directory path and file name into absolute path - - # remove file suffix from the decrypted file path that writes to disk - if absolute_filepath.endswith('.crypt'): - decrypted_filepath = absolute_filepath[0:-6] # remove the .crypt suffix - elif absolute_filepath.endswith('.gpg') or absolute_filepath.endswith('.pgp') or absolute_filepath.endswith('.asc'): - decrypted_filepath = absolute_filepath[0:-4] - - # confirm that the file does not already exist - if file_exists(decrypted_filepath): - stdout("The file path '" + decrypted_filepath + "' already exists. This file was not decrypted.") - else: - system_command = "gpg --batch -o " + quote(decrypted_filepath) + " --passphrase " + quote(passphrase) + " -d " + quote(absolute_filepath) - response = muterun(system_command) - - if response.exitcode == 0: - stdout("'" + absolute_filepath + "' decrypted to '" + decrypted_filepath + "'") - else: - stderr(response.stderr) - stderr("Decryption failed for " + absolute_filepath) - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - - # add a short pause to hinder brute force pexpect style password attacks with decrypto - sleep(0.2) # 200ms pause - else: - # overwrite user entered passphrases - passphrase = "" - passphrase_confirm = "" - stderr("The passphrases did not match. Please enter your command again.") - sys.exit(1) - else: - # error message, not a file or directory. user entry error - stderr("The path that you entered does not appear to be an existing file or directory. Please try again.") - sys.exit(1) - - # ------------------------------------------------------------------------------------------ - # [ DEFAULT MESSAGE FOR MATCH FAILURE ] - # Message to provide to the user when all above conditional logic fails to meet a true condition - # ------------------------------------------------------------------------------------------ - else: - print("Could not complete your request. Please try again.") - sys.exit(1) - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/crypto/library/__init__.py b/venv/lib/python3.6/site-packages/crypto/library/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/crypto/library/cryptor.py b/venv/lib/python3.6/site-packages/crypto/library/cryptor.py deleted file mode 100644 index 49009bb..0000000 --- a/venv/lib/python3.6/site-packages/crypto/library/cryptor.py +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import sys -from Naked.toolshed.shell import muterun -from Naked.toolshed.system import file_size, stdout, stderr - -from shellescape import quote - -# ------------------------------------------------------------------------------ -# Cryptor class -# performs gpg encryption of one or more files -# ------------------------------------------------------------------------------ - - -class Cryptor(object): - """performs gpg encryption of one or more files""" - def __init__(self, passphrase): - self.command_default = "gpg -z 1 --batch --force-mdc --cipher-algo AES256 -o " - self.command_nocompress = "gpg -z 0 --batch --force-mdc --cipher-algo AES256 -o " - self.command_maxcompress = "gpg -z 7 --batch --force-mdc --cipher-algo AES256 -o " - self.command_default_armored = "gpg -z 1 --armor --batch --force-mdc --cipher-algo AES256 -o " - self.command_nocompress_armored = "gpg -z 0 --armor --batch --force-mdc --cipher-algo AES256 -o " - self.command_maxcompress_armored = "gpg -z 7 --armor --batch --force-mdc --cipher-algo AES256 -o " - self.passphrase = passphrase - self.common_binaries = set(['.7z', '.gz', '.aac', '.app', '.avi', '.azw', '.bz2', '.deb', '.doc', '.dmg', '.exe', '.flv', '.gif', '.jar', '.jpg', '.mov', '.mp3', '.mp4', '.odt', '.oga', '.ogg', '.ogm', '.pdf', '.pkg', '.png', '.ppt', '.pps', '.psd', '.rar', '.rpm', '.tar', '.tif', '.wav', '.wma', '.wmv', '.xls', '.zip', '.aiff', '.docx', '.epub', '.flac', '.mpeg', '.jpeg', '.pptx', '.xlsx']) - self.common_text = set(['.c', '.h', '.m', '.cc', '.js', '.pl', '.py', '.rb', '.sh', '.cpp', '.css', '.csv', '.php', '.rss', '.txt', '.xml', '.yml', '.java', '.json', '.html', '.yaml']) - - # ------------------------------------------------------------------------------ - # PUBLIC methods - # ------------------------------------------------------------------------------ - - # ------------------------------------------------------------------------------ - # encrypt_file : file encryption method - # ------------------------------------------------------------------------------ - def encrypt_file(self, inpath, force_nocompress=False, force_compress=False, armored=False, checksum=False): - """public method for single file encryption with optional compression, ASCII armored formatting, and file hash digest generation""" - if armored: - if force_compress: - command_stub = self.command_maxcompress_armored - elif force_nocompress: - command_stub = self.command_nocompress_armored - else: - if self._is_compress_filetype(inpath): - command_stub = self.command_default_armored - else: - command_stub = self.command_nocompress_armored - else: - if force_compress: - command_stub = self.command_maxcompress - elif force_nocompress: - command_stub = self.command_nocompress - else: - if self._is_compress_filetype(inpath): - command_stub = self.command_default - else: - command_stub = self.command_nocompress - - encrypted_outpath = self._create_outfilepath(inpath) - system_command = command_stub + encrypted_outpath + " --passphrase " + quote(self.passphrase) + " --symmetric " + quote(inpath) - - try: - response = muterun(system_command) - # check returned status code - if response.exitcode == 0: - stdout(encrypted_outpath + " was generated from " + inpath) - if checksum: # add a SHA256 hash digest of the encrypted file - requested by user --hash flag in command - from crypto.library import hash - encrypted_file_hash = hash.generate_hash(encrypted_outpath) - if len(encrypted_file_hash) == 64: - stdout("SHA256 hash digest for " + encrypted_outpath + " :") - stdout(encrypted_file_hash) - else: - stdout("Unable to generate a SHA256 hash digest for the file " + encrypted_outpath) - else: - stderr(response.stderr, 0) - stderr("Encryption failed") - sys.exit(1) - except Exception as e: - stderr("There was a problem with the execution of gpg. Encryption failed. Error: [" + str(e) + "]") - sys.exit(1) - - # ------------------------------------------------------------------------------ - # encrypt_files : multiple file encryption - # ------------------------------------------------------------------------------ - def encrypt_files(self, file_list, force_nocompress=False, force_compress=False, armored=False, checksum=False): - """public method for multiple file encryption with optional compression, ASCII armored formatting, and file hash digest generation""" - for the_file in file_list: - self.encrypt_file(the_file, force_nocompress, force_compress, armored, checksum) - - # ------------------------------------------------------------------------------ - # cleanup : overwrite the passphrase in memory - # ------------------------------------------------------------------------------ - def cleanup(self): - """public method that overwrites user passphrase in memory""" - self.passphrase = "" - - # ------------------------------------------------------------------------------ - # PRIVATE methods - # ------------------------------------------------------------------------------ - - def _create_outfilepath(self, inpath): - """private method that generates the crypto saved file path string with a .crypt file type""" - return inpath + '.crypt' - - def _is_compress_filetype(self, inpath): - """private method that performs magic number and size check on file to determine whether to compress the file""" - # check for common file type suffixes in order to avoid the need for file reads to check magic number for binary vs. text file - if self._is_common_binary(inpath): - return False - elif self._is_common_text(inpath): - return True - else: - # files > 10kB get checked for compression (arbitrary decision to skip compression on small files) - the_file_size = file_size(inpath) - if the_file_size > 10240: - if the_file_size > 512000: # seems to be a break point at ~ 500kb where file compression offset by additional file read, so limit tests to files > 500kB - try: - system_command = "file --mime-type -b " + quote(inpath) - response = muterun(system_command) - if response.stdout[0:5] == "text/": # check for a text file mime type - return True # appropriate size, appropriate file mime type - else: - return False # appropriate size, inappropriate file mime type - except Exception: - return False - else: - return True # if file size is < 500kB, skip the additional file read and just go with compression - else: - return False # below minimum size to consider compression, do not compress - - def _is_common_binary(self, inpath): - """private method to compare file path mime type to common binary file types""" - # make local variables for the available char numbers in the suffix types to be tested - two_suffix = inpath[-3:] - three_suffix = inpath[-4:] - four_suffix = inpath[-5:] - - # test for inclusion in the instance variable common_binaries (defined in __init__) - if two_suffix in self.common_binaries: - return True - elif three_suffix in self.common_binaries: - return True - elif four_suffix in self.common_binaries: - return True - else: - return False - - def _is_common_text(self, inpath): - """private method to compare file path mime type to common text file types""" - # make local variables for the available char numbers in the suffix types to be tested - one_suffix = inpath[-2:] - two_suffix = inpath[-3:] - three_suffix = inpath[-4:] - four_suffix = inpath[-5:] - - # test for inclusion in the instance variable common_text (defined in __init__) - if one_suffix in self.common_text: - return True - elif two_suffix in self.common_text: - return True - elif three_suffix in self.common_text: - return True - elif four_suffix in self.common_text: - return True - else: - return False diff --git a/venv/lib/python3.6/site-packages/crypto/library/hash.py b/venv/lib/python3.6/site-packages/crypto/library/hash.py deleted file mode 100644 index 8d66e37..0000000 --- a/venv/lib/python3.6/site-packages/crypto/library/hash.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import hashlib -from Naked.toolshed.file import FileReader - -# ------------------------------------------------------------------------------ -# PUBLIC -# ------------------------------------------------------------------------------ -def generate_hash(filepath): - """Public function that reads a local file and generates a SHA256 hash digest for it""" - fr = FileReader(filepath) - data = fr.read_bin() - return _calculate_sha256(data) - - -# ------------------------------------------------------------------------------ -# PRIVATE -# ------------------------------------------------------------------------------ -def _calculate_sha256(binary_string): - """Private function that calculates a SHA256 hash digest for a binary string argument""" - return hashlib.sha256(binary_string).hexdigest() - diff --git a/venv/lib/python3.6/site-packages/crypto/library/package.py b/venv/lib/python3.6/site-packages/crypto/library/package.py deleted file mode 100644 index e4674ca..0000000 --- a/venv/lib/python3.6/site-packages/crypto/library/package.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import os -import tarfile -from Naked.toolshed.system import stderr, dir_exists, file_exists - -# ------------------------------------------------------------------------------ -# PUBLIC -# ------------------------------------------------------------------------------ - - -def generate_tar_files(directory_list): - """Public function that reads a list of local directories and generates tar archives from them""" - - tar_file_list = [] - - for directory in directory_list: - if dir_exists(directory): - _generate_tar(directory) # create the tar archive - tar_file_list.append(directory + '.tar') # append the tar archive filename to the returned tar_file_list list - else: - stderr("The directory '" + directory + "' does not exist and a tar archive could not be created from it.", exit=1) - - return tar_file_list - - -def remove_tar_files(file_list): - """Public function that removes temporary tar archive files in a local directory""" - for f in file_list: - if file_exists(f) and f.endswith('.tar'): - os.remove(f) # remove any tar files in the list, if it does not appear to be a tar file, leave it alone - -# ------------------------------------------------------------------------------ -# PRIVATE -# ------------------------------------------------------------------------------ - - -def _generate_tar(dir_path): - """Private function that reads a local directory and generates a tar archive from it""" - try: - with tarfile.open(dir_path + '.tar', 'w') as tar: - tar.add(dir_path) - except tarfile.TarError as e: - stderr("Error: tar archive creation failed [" + str(e) + "]", exit=1) diff --git a/venv/lib/python3.6/site-packages/crypto/settings.py b/venv/lib/python3.6/site-packages/crypto/settings.py deleted file mode 100644 index ebcebd1..0000000 --- a/venv/lib/python3.6/site-packages/crypto/settings.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# ------------------------------------------------------------------------------ -# Application Name -# ------------------------------------------------------------------------------ -app_name = 'crypto' - -# ------------------------------------------------------------------------------ -# Version Number -# ------------------------------------------------------------------------------ -major_version = "1" -minor_version = "4" -patch_version = "1" - -# ------------------------------------------------------------------------------ -# Debug Flag (switch to False for production release code) -# ------------------------------------------------------------------------------ -debug = False - -# ------------------------------------------------------------------------------ -# Usage String -# ------------------------------------------------------------------------------ -usage = """ -Encrypt by explicit file path: ------------------------------- - crypto [file path] - - -Encrypt all top level files in directory: ------------------------------------------ - crypto [directory path] - - -Create a tar archive from directory and encrypt the archive: ------------------------------------------------------------ - crypto --tar [directory path] - - -Decrypt by explicit file path: ------------------------------- - decrypto [file path] - - -Decrypt all top level encrypted files in directory: ---------------------------------------------------- - decrypto [directory path] - - -Enter `crypto --help` or `decrypto --help` to view the available options. - -""" - -# ------------------------------------------------------------------------------ -# Help String -# ------------------------------------------------------------------------------ -help = """ -------------------------------------------------- -crypto -Simple symmetric GPG file encryption -Copyright 2015 Christopher Simpkins -MIT license -Source: https://github.com/chrissimpkins/crypto -Docs: https://chrissimpkins.github.io/crypto/ -------------------------------------------------- - -ABOUT -crypto provides a simple interface to symmetric Gnu Privacy Guard (gpg) encryption and decryption for one or more files. gpg must be installed on your system in order to use the crypto and decrypto executables. - -USAGE - ENCRYPTION - crypto [file path] - crypto [directory path] - - DECRYPTION - decrypto [file path] - decrypto [directory path] - -CRYPTO OPTIONS - --armor | -a Use a portable ASCII armored encryption format - --hash Generate SHA256 hash digest of encrypted file(s) - --space Favor reduced file size over encryption speed - --speed Favor encryption speed over reduced file size - --tar Create tar archive of directory of files before encryption - -DECRYPTO OPTIONS - --nountar Do not automatically unpack decrypted tar archives - --overwrite | -o Overwrite an existing file with the decrypted file - --stdout | -s Print file contents to the standard output stream - -OTHER OPTIONS - --help | -h Display crypto and decrypto help - --usage Display crypto and decrypto usage - --version | -v Display version number - -DESCRIPTION -Use one or more explicit file path arguments to encrypt or decrypt the file(s). crypto and decrypto will attempt to encrypt or decrypt (respectively) any explicit filepaths that you include irrespective of the file type. Encrypted files are generated on the path '.crypt'. The original file is not modified or removed by crypto. - -Use one or more directory arguments with the crypto executable to encrypt all files in the top level of each directory with the same passphrase. Previously encrypted files with a '.crypt' file type will not be generated again in a directory. Remove them before you run the command if you intend to repeat encryption with a file. - -Use one or more directory arguments with decrypto to decrypt all .crypt, .gpg, .asc, and .pgp files in the top level of each directory. decrypto automatically unpacks decrypted tar archives. - -Encryption is performed with the AES256 cipher algorithm. Decryption will take place with any cipher algorithm that your version of gpg supports. -""" diff --git a/venv/lib/python3.6/site-packages/easy-install.pth b/venv/lib/python3.6/site-packages/easy-install.pth deleted file mode 100644 index 556f0d0..0000000 --- a/venv/lib/python3.6/site-packages/easy-install.pth +++ /dev/null @@ -1,2 +0,0 @@ -./setuptools-39.1.0-py3.6.egg -./pip-10.0.1-py3.6.egg diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/DESCRIPTION.rst deleted file mode 100644 index 323102f..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,159 +0,0 @@ -========================== -Glob-Like Pattern Matching -========================== - -Converts a glob-matching pattern to a regular expression, using Apache -Cocoon style rules (with some extensions). - -TL;DR -===== - -Install: - -.. code:: bash - - $ pip install globre - -Use: - -.. code:: python - - import globre - - names = [ - '/path/to/file.txt', - '/path/to/config.ini', - '/path/to/subdir/base.ini', - ] - - txt_names = [name for name in names if globre.match('/path/to/*.txt', name)] - assert txt_names == ['/path/to/file.txt'] - - ini_names = [name for name in names if globre.match('/path/to/*.ini', name)] - assert ini_names == ['/path/to/config.ini'] - - all_ini_names = [name for name in names if globre.match('/path/to/**.ini', name)] - assert all_ini_names == ['/path/to/config.ini', '/path/to/subdir/base.ini'] - - -Details -======= - -This package basically allows using unix shell-like filename globbing -to be used to match a string in a Python program. The glob matching -allows most characters to match themselves, with the following -sequences having special meanings: - -========= ==================================================================== -Sequence Meaning -========= ==================================================================== -``?`` Matches any single character except the slash - ('/') character. -``*`` Matches zero or more characters *excluding* the slash - ('/') character, e.g. ``/etc/*.conf`` which will *not* - match "/etc/foo/bar.conf". -``**`` Matches zero or more characters *including* the slash - ('/') character, e.g. ``/lib/**.so`` which *will* - match "/lib/foo/bar.so". -``\`` Escape character used to precede any of the other special - characters (in order to match them literally), e.g. - ``foo\?`` will match "foo" followed by a literal question mark. -``[...]`` Matches any character in the specified regex-style character range, - e.g. ``foo[0-9A-F].conf``. -``{...}`` Inlines a regex expression, e.g. ``foo-{\\D{2,4\}}.txt`` which - will match "foo-bar.txt" but not "foo-012.txt". -========= ==================================================================== - -The `globre` package exports the following functions: - -* ``globre.match(pattern, string, sep=None, flags=0)``: - - Tests whether or not the glob `pattern` matches the `string`. If it - does, a `re.MatchObject` is returned, otherwise ``None``. The `string` - must be matched in its entirety. See `globre.compile` for details on - the `sep` and `flags` parameters. Example: - - .. code:: python - - globre.match('/etc/**.conf', '/etc/rsyslog.conf') - # => truthy - -* ``globre.search(pattern, string, sep=None, flags=0)``: - - Similar to `globre.match`, but the pattern does not need to match - the entire string. Example: - - .. code:: python - - globre.search('lib/**.so', '/var/lib/python/readline.so.6.2') - # => truthy - -* ``globre.compile(pattern, sep=None, flags=0, split_prefix=False)``: - - Compiles the specified `pattern` into a matching object that has the - same API as the regular expression object returned by `re.compile`. - - The `sep` parameter specifies the hierarchical path component - separator to use. By default, it uses the unix-style forward-slash - separator (``"/"``), but can be overriden to be a sequence of - alternative valid hierarchical path component separator characters. - Note that although `sep` *could* be set to both forward- and back- - slashes (i.e. ``"/\\"``) to, theoretically, support either unix- and - windows-style path components, this has the significant flaw that - then *both* characters can be used within the same path as - separators. - - The `flags` bit mask can contain all the standard `re` flags, in - addition to the ``globre.EXACT`` flag. If EXACT is set, then the - returned regex will include the equivalent of a leading '^' and - trailing '$', meaning that the regex must match the entire string, - from beginning to end. - - If `split_prefix` is truthy, the return value becomes a tuple with - the first element set to any initial non-wildcarded string found in - the pattern. The second element remains the regex object as before. - For example, the pattern ``foo/**.ini`` would result in a tuple - equivalent to ``('foo/', re.compile('foo/.*\\.ini'))``. - - Example: - - .. code:: python - - prefix, expr = globre.compile('/path/to**.ini', split_prefix=True) - # prefix => '/path/to' - - names = [ - '/path/to/file.txt', - '/path/to/config.ini', - '/path/to/subdir/otherfile.txt', - '/path/to/subdir/base.ini', - ] - - for name in names: - if not expr.match(name): - # ignore the two ".txt" files - continue - # and do something with: - # - /path/to/config.ini - # - /path/to/subdir/base.ini - - -What About the ``glob`` Module -============================== - -This package is different from the standard Python `glob` module in -the following critical ways: - -* The `glob` module operates on the actual filesystem; `globre` can be - used to match both files on the filesystem as well as any other - sources of strings to match. - -* The `glob` module does not provide the ``**`` "descending" matcher. - -* The `glob` module does not provide the ``{...}`` regular expression - inlining feature. - -* The `glob` module does not provide an alternate hierarchy separator - beyond ``/`` or ``\\``. - - diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/METADATA b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/METADATA deleted file mode 100644 index 3db0e71..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/METADATA +++ /dev/null @@ -1,176 +0,0 @@ -Metadata-Version: 2.0 -Name: globre -Version: 0.1.5 -Summary: A glob matching library, providing an interface similar to the "re" module. -Home-page: http://github.com/metagriffin/globre -Author: metagriffin -Author-email: mg.pypi@uberdev.org -License: GPLv3+ -Keywords: python glob pattern matching regular expression -Platform: any -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Operating System :: OS Independent -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) - -========================== -Glob-Like Pattern Matching -========================== - -Converts a glob-matching pattern to a regular expression, using Apache -Cocoon style rules (with some extensions). - -TL;DR -===== - -Install: - -.. code:: bash - - $ pip install globre - -Use: - -.. code:: python - - import globre - - names = [ - '/path/to/file.txt', - '/path/to/config.ini', - '/path/to/subdir/base.ini', - ] - - txt_names = [name for name in names if globre.match('/path/to/*.txt', name)] - assert txt_names == ['/path/to/file.txt'] - - ini_names = [name for name in names if globre.match('/path/to/*.ini', name)] - assert ini_names == ['/path/to/config.ini'] - - all_ini_names = [name for name in names if globre.match('/path/to/**.ini', name)] - assert all_ini_names == ['/path/to/config.ini', '/path/to/subdir/base.ini'] - - -Details -======= - -This package basically allows using unix shell-like filename globbing -to be used to match a string in a Python program. The glob matching -allows most characters to match themselves, with the following -sequences having special meanings: - -========= ==================================================================== -Sequence Meaning -========= ==================================================================== -``?`` Matches any single character except the slash - ('/') character. -``*`` Matches zero or more characters *excluding* the slash - ('/') character, e.g. ``/etc/*.conf`` which will *not* - match "/etc/foo/bar.conf". -``**`` Matches zero or more characters *including* the slash - ('/') character, e.g. ``/lib/**.so`` which *will* - match "/lib/foo/bar.so". -``\`` Escape character used to precede any of the other special - characters (in order to match them literally), e.g. - ``foo\?`` will match "foo" followed by a literal question mark. -``[...]`` Matches any character in the specified regex-style character range, - e.g. ``foo[0-9A-F].conf``. -``{...}`` Inlines a regex expression, e.g. ``foo-{\\D{2,4\}}.txt`` which - will match "foo-bar.txt" but not "foo-012.txt". -========= ==================================================================== - -The `globre` package exports the following functions: - -* ``globre.match(pattern, string, sep=None, flags=0)``: - - Tests whether or not the glob `pattern` matches the `string`. If it - does, a `re.MatchObject` is returned, otherwise ``None``. The `string` - must be matched in its entirety. See `globre.compile` for details on - the `sep` and `flags` parameters. Example: - - .. code:: python - - globre.match('/etc/**.conf', '/etc/rsyslog.conf') - # => truthy - -* ``globre.search(pattern, string, sep=None, flags=0)``: - - Similar to `globre.match`, but the pattern does not need to match - the entire string. Example: - - .. code:: python - - globre.search('lib/**.so', '/var/lib/python/readline.so.6.2') - # => truthy - -* ``globre.compile(pattern, sep=None, flags=0, split_prefix=False)``: - - Compiles the specified `pattern` into a matching object that has the - same API as the regular expression object returned by `re.compile`. - - The `sep` parameter specifies the hierarchical path component - separator to use. By default, it uses the unix-style forward-slash - separator (``"/"``), but can be overriden to be a sequence of - alternative valid hierarchical path component separator characters. - Note that although `sep` *could* be set to both forward- and back- - slashes (i.e. ``"/\\"``) to, theoretically, support either unix- and - windows-style path components, this has the significant flaw that - then *both* characters can be used within the same path as - separators. - - The `flags` bit mask can contain all the standard `re` flags, in - addition to the ``globre.EXACT`` flag. If EXACT is set, then the - returned regex will include the equivalent of a leading '^' and - trailing '$', meaning that the regex must match the entire string, - from beginning to end. - - If `split_prefix` is truthy, the return value becomes a tuple with - the first element set to any initial non-wildcarded string found in - the pattern. The second element remains the regex object as before. - For example, the pattern ``foo/**.ini`` would result in a tuple - equivalent to ``('foo/', re.compile('foo/.*\\.ini'))``. - - Example: - - .. code:: python - - prefix, expr = globre.compile('/path/to**.ini', split_prefix=True) - # prefix => '/path/to' - - names = [ - '/path/to/file.txt', - '/path/to/config.ini', - '/path/to/subdir/otherfile.txt', - '/path/to/subdir/base.ini', - ] - - for name in names: - if not expr.match(name): - # ignore the two ".txt" files - continue - # and do something with: - # - /path/to/config.ini - # - /path/to/subdir/base.ini - - -What About the ``glob`` Module -============================== - -This package is different from the standard Python `glob` module in -the following critical ways: - -* The `glob` module operates on the actual filesystem; `globre` can be - used to match both files on the filesystem as well as any other - sources of strings to match. - -* The `glob` module does not provide the ``**`` "descending" matcher. - -* The `glob` module does not provide the ``{...}`` regular expression - inlining feature. - -* The `glob` module does not provide an alternate hierarchy separator - beyond ``/`` or ``\\``. - - diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/RECORD b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/RECORD deleted file mode 100644 index 7ee51e4..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/RECORD +++ /dev/null @@ -1,12 +0,0 @@ -globre/__init__.py,sha256=NJtjjn7CtOOjhwFW2KR2bpv0_HA8pQuGEsh40aOcyrs,8181 -globre/test.py,sha256=t0Ur2b_SgrfTF_Mr5VGKlrd0XPS02gLBy2YlZIsGlYo,9920 -globre-0.1.5.dist-info/DESCRIPTION.rst,sha256=ZM_F8ChEPdfDAJzo7cuEvFffKiMtFHB-MhMgyjFOBJk,5401 -globre-0.1.5.dist-info/METADATA,sha256=Lvey7V-bsNwmtAMwskB0OAP9VZPn_fA70Sf0rd2uWgI,6031 -globre-0.1.5.dist-info/RECORD,, -globre-0.1.5.dist-info/WHEEL,sha256=0mO7-aKM6K9CHeURc5NDYZyLWH5lmR-r4TtPinHxz7Y,93 -globre-0.1.5.dist-info/metadata.json,sha256=WAbGURA1e4aJlpOYGj4OJeW1g3KnPrMIaI3xFF9RWIo,899 -globre-0.1.5.dist-info/top_level.txt,sha256=FsqNO27ZHuobp4c_Xu9pbAqzOCnaXcrokwyLvX22_0M,7 -globre-0.1.5.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -globre-0.1.5.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -globre/__pycache__/test.cpython-36.pyc,, -globre/__pycache__/__init__.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/WHEEL b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/WHEEL deleted file mode 100644 index 7981024..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.30.0) -Root-Is-Purelib: true -Tag: cp36-none-any - diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/metadata.json b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/metadata.json deleted file mode 100644 index 6c0648e..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python", "Operating System :: OS Independent", "Natural Language :: English", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)"], "extensions": {"python.details": {"contacts": [{"email": "mg.pypi@uberdev.org", "name": "metagriffin", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/metagriffin/globre"}}}, "generator": "bdist_wheel (0.30.0)", "keywords": ["python", "glob", "pattern", "matching", "regular", "expression"], "license": "GPLv3+", "metadata_version": "2.0", "name": "globre", "platform": "any", "summary": "A glob matching library, providing an interface similar to the \"re\" module.", "test_requires": [{"requires": ["coverage (>=3.6)", "nose (>=1.3.0)"]}], "version": "0.1.5"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/top_level.txt deleted file mode 100644 index 59e3f8e..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -globre diff --git a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/zip-safe b/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/globre-0.1.5.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/globre/__init__.py b/venv/lib/python3.6/site-packages/globre/__init__.py deleted file mode 100644 index bc4edac..0000000 --- a/venv/lib/python3.6/site-packages/globre/__init__.py +++ /dev/null @@ -1,230 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/22 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import re - -# new flags that apply to globs only... -EXACT = 1 << 10 -E = EXACT - -#------------------------------------------------------------------------------ -class Tokenizer(object): - LITERAL = 'literal' # abcdef... - SINGLE = 'single' # ? - MULTIPLE = 'multiple' # * - ANY = 'any' # ** - RANGE = 'range' # [...] - REGEX = 'regex' # {...} - submap = { - '[' : (']', RANGE), - '{' : ('}', REGEX), - } - def __init__(self, source): - self.source = source - self.pos = 0 - def tokens(self): - ''' - Generates four-element tuples of: (type, value, start, end). - ''' - for token in self._outer(): - yield token - def _outer(self): - start = self.pos - value = '' - while self.pos < len(self.source): - cur = self.source[self.pos] - if cur not in '\\?*[{': - value += cur - self.pos += 1 - continue - if cur == '\\': - self.pos += 1 - if self.pos >= len(self.source): - raise ValueError('dangling backslash "\\" in glob: %s' % (self.source,)) - value += self.source[self.pos] - self.pos += 1 - continue - if len(value) > 0: - yield (self.LITERAL, value, start, self.pos) - self.pos += 1 - value = '' - start = self.pos - if cur == '?': - yield (self.SINGLE, '?', start - 1, start) - continue - if cur == '*': - if self.pos >= len(self.source) or self.source[self.pos] != '*': - yield (self.MULTIPLE, '*', start - 1, start) - continue - yield (self.ANY, '**', start - 1, start + 1) - self.pos += 1 - start = self.pos - continue - if cur in self.submap: - spec = self.submap[cur] - value = self._scan(spec[0]) - if len(value) > 0: - yield (spec[1], value, start - 1, self.pos) - value = '' - start = self.pos - continue - raise ValueError('unexpected glob character "%s" in glob: %s' - % (cur, self.source)) - if len(value) > 0: - yield (self.LITERAL, value, start, self.pos) - def _scan(self, target): - value = '' - while self.pos < len(self.source): - cur = self.source[self.pos] - self.pos += 1 - if cur == '\\': - if self.pos >= len(self.source): - raise ValueError('dangling backslash "\\" in glob: %s' % (self.source,)) - value += self.source[self.pos] - self.pos += 1 - continue - if cur == target: - return value - value += cur - raise ValueError('no terminating "%s" in glob: %s' % (target, self.source)) - -WILDCHARS = '?*[{\\' -SPECIAL_CHARS = '?*[]{}' - -#------------------------------------------------------------------------------ -def iswild(pattern): - for token in Tokenizer(pattern).tokens(): - if token[0] != Tokenizer.LITERAL: - return True - return False - -#------------------------------------------------------------------------------ -def compile(pattern, flags=0, sep=None, split_prefix=False): - ''' - Converts a glob-matching pattern (using Apache Cocoon style rules) - to a regular expression, which basically means that the following - characters have special meanings: - - * ``?``: matches any single character excluding the separator character - * ``*``: matches zero or more characters excluding the separator character - * ``**``: matches zero or more characters including the separator character - * ``\``: escape character used to precede any of the others for a literal - * ``[...]``: matches any character in the specified regex-style range - * ``{...}``: inlines a regex expression - - :Parameters: - - sep : str; default: "/" - - The `sep` parameter specifies the hierarchical path component - separator to use. By default, it uses the unix-style forward-slash - separator (``"/"``), but can be overriden to be a sequence of - alternative valid hierarchical path component separator characters. - Note that although `sep` *could* be set to both forward- and back- - slashes (i.e. ``"/\\"``) to, theoretically, support either unix- and - windows-style path components, this has the significant flaw that - then *both* characters can be used within the same path as - separators. - - flags : int; default: 0 - - The `flags` bit mask can contain all the standard `re` flags, in - addition to the ``globre.EXACT`` flag. If EXACT is set, then the - returned regex will include a leading '^' and trailing '$', meaning - that the regex must match the entire string, from beginning to end. - - split_prefix : bool; default: false - - If `split_prefix` is truthy, the return value becomes a tuple with - the first element set to any initial non-wildcarded string found in - the pattern. The second element remains the regex object as before. - For example, the pattern ``foo/**.ini`` would result in a tuple - equivalent to ``('foo/', re.compile('foo/.*\\.ini'))``. - ''' - - prefix = None - expr = '' - - if sep is None: - sep = '/' - if not sep: - TypeError('invalid parameter "sep" value: %r' % (sep,)) - if set(sep) & set(SPECIAL_CHARS): - TypeError('parameter "sep" cannot contain any of %r' % (SPECIAL_CHARS,)) - if len(sep) == 1: - literal = re.escape - else: - def make_literal(sep): - sep = '[' + re.escape(sep) + ']' - sepcre = re.compile(sep) - def _literal(text): - return sep.join(sepcre.split(text)) - return _literal - literal = make_literal(sep) - if sep != '/': - sep = re.escape(sep) - - for token in Tokenizer(pattern).tokens(): - if split_prefix and expr == '': - prefix = token[1] if token[0] == Tokenizer.LITERAL else '' - if token[0] == Tokenizer.LITERAL: - expr += literal(token[1]) - elif token[0] == Tokenizer.SINGLE: - expr += '[^' + sep + ']' - elif token[0] == Tokenizer.MULTIPLE: - expr += '[^' + sep + ']*?' - elif token[0] == Tokenizer.ANY: - expr += '.*?' - elif token[0] == Tokenizer.RANGE: - expr += '[' + token[1] + ']' - elif token[0] == Tokenizer.REGEX: - expr += token[1] - else: - ValueError('unexpected token %r from globre.Tokenizer for glob: %s' - % (token, pattern)) - - if flags & EXACT: - if not expr.startswith('^'): - expr = '^' + expr - # todo: technically, the last "$" *could* be escaped and therefore - # an extra "$" would need to be added... but that is very unlikely. - if not expr.endswith('$'): - expr += '$' - - expr = re.compile(expr, flags=flags & ~ EXACT) - - if prefix is not None: - return (prefix, expr) - return expr - -#------------------------------------------------------------------------------ -def match(pattern, string, sep=None, flags=0): - flags |= EXACT - return compile(pattern, sep=sep, flags=flags).match(string) - -#------------------------------------------------------------------------------ -def search(pattern, string, sep=None, flags=0): - flags &= ~ EXACT - return compile(pattern, sep=sep, flags=flags).search(string) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/globre/test.py b/venv/lib/python3.6/site-packages/globre/test.py deleted file mode 100644 index fd72396..0000000 --- a/venv/lib/python3.6/site-packages/globre/test.py +++ /dev/null @@ -1,199 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: metagriffin -# date: 2013/09/22 -# copy: (C) Copyright 2013-EOT metagriffin -- see LICENSE.txt -#------------------------------------------------------------------------------ -# This software is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This software is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -#------------------------------------------------------------------------------ - -import unittest, re - -import globre - -#------------------------------------------------------------------------------ -class TestGlobre(unittest.TestCase): - - if not hasattr(unittest.TestCase, 'assertIsNone'): - def assertIsNone(self, *args, **kwargs): - """Basic version of unittest.assertIsNotNone for Python 2.6 unittest.""" - return self.assertEqual(None, *args, **kwargs) - - if not hasattr(unittest.TestCase, 'assertIsNotNone'): - def assertIsNotNone(self, *args, **kwargs): - """Basic version of unittest.assertIsNotNone for Python 2.6 unittest.""" - return self.assertNotEqual(None, *args, **kwargs) - - - #---------------------------------------------------------------------------- - def test_tokenizer(self): - self.assertEqual( - list(globre.Tokenizer('/foo/bar').tokens()), - [('literal', '/foo/bar', 0, 8)]) - self.assertEqual( - list(globre.Tokenizer('/foo\/bar').tokens()), - [('literal', '/foo/bar', 0, 9)]) - self.assertEqual( - list(globre.Tokenizer('/foo/*/bar').tokens()), - [('literal', '/foo/', 0, 5), - ('multiple', '*', 5, 6), - ('literal', '/bar', 6, 10), - ]) - self.assertEqual( - list(globre.Tokenizer('/foo/**/bar/*.txt').tokens()), - [('literal', '/foo/', 0, 5), - ('any', '**', 5, 7), - ('literal', '/bar/', 7, 12), - ('multiple', '*', 12, 13), - ('literal', '.txt', 13, 17), - ]) - self.assertEqual( - list(globre.Tokenizer('/foo/??.txt').tokens()), - [('literal', '/foo/', 0, 5), - ('single', '?', 5, 6), - ('single', '?', 6, 7), - ('literal', '.txt', 7, 11), - ]) - self.assertEqual( - list(globre.Tokenizer('/foo/??.txt').tokens()), - [('literal', '/foo/', 0, 5), - ('single', '?', 5, 6), - ('single', '?', 6, 7), - ('literal', '.txt', 7, 11), - ]) - self.assertEqual( - list(globre.Tokenizer(r'/foo/?\?.txt').tokens()), - [('literal', '/foo/', 0, 5), - ('single', '?', 5, 6), - ('literal', '?.txt', 6, 12), - ]) - self.assertEqual( - list(globre.Tokenizer(r'/foo-[a-z0-9].txt').tokens()), - [('literal', '/foo-', 0, 5), - ('range', 'a-z0-9', 5, 13), - ('literal', '.txt', 13, 17), - ]) - self.assertEqual( - list(globre.Tokenizer(r'/foo-{\\D{2,4\}}.txt').tokens()), - [('literal', '/foo-', 0, 5), - ('regex', r'\D{2,4}', 5, 16), - ('literal', '.txt', 16, 20), - ]) - - #---------------------------------------------------------------------------- - def test_iswild(self): - self.assertTrue(globre.iswild('/foo/bar/**.ini')) - self.assertTrue(globre.iswild('/foo/bar-[0-9].ini')) - self.assertFalse(globre.iswild('/foo/bar/conf.ini')) - self.assertFalse(globre.iswild(r'\/foo\/bar\/conf.ini')) - - #---------------------------------------------------------------------------- - def test_match(self): - self.assertIsNotNone(globre.match('/foo/bar/**.ini', '/foo/bar/conf.ini')) - self.assertIsNotNone(globre.match('/foo/bar/**.ini', '/foo/bar/a/b/c/conf.ini')) - self.assertIsNone(globre.match('/foo/bar/**.ini', '/a/foo/bar/conf.ini')) - self.assertIsNone(globre.match('/foo/bar/**.ini', '/foo/bar/conf.ini.txt')) - self.assertIsNone(globre.match('/foo/bar/**.ini', '/foo/bar/conf.ini/zig.txt')) - self.assertIsNone(globre.match('/foo/bar/**.ini', '/FOO/BAR/ZIP/CONF.INI')) - self.assertIsNotNone(globre.match('/foo/bar/**.ini', '/FOO/BAR/ZIP/CONF.INI', flags=re.IGNORECASE)) - - #---------------------------------------------------------------------------- - def test_search(self): - self.assertIsNotNone(globre.search('/foo/bar/**.ini', '/foo/bar/conf.ini')) - self.assertIsNotNone(globre.search('/foo/bar/**.ini', '/foo/bar/a/b/c/conf.ini')) - self.assertIsNotNone(globre.search('/foo/bar/**.ini', '/a/foo/bar/conf.ini')) - self.assertIsNotNone(globre.search('/foo/bar/**.ini', '/foo/bar/conf.ini.txt')) - self.assertIsNotNone(globre.search('/foo/bar/**.ini', '/foo/bar/conf.ini/zig.txt')) - self.assertIsNone(globre.search('/foo/bar/**.ini', '/foo/bar/conf.txt')) - self.assertIsNone(globre.search('/foo/bar/**.ini', '/X/FOO/BAR/ZIP/CONF.INI')) - self.assertIsNotNone(globre.search('/foo/bar/**.ini', '/X/FOO/BAR/ZIP/CONF.INI', flags=re.IGNORECASE)) - - #---------------------------------------------------------------------------- - def test_compile(self): - expr = globre.compile('/foo/bar/*.dir/**.ini', flags=0) - self.assertEqual(expr.pattern, r'\/foo\/bar\/[^/]*?\.dir\/.*?\.ini') - expr = globre.compile('/foo/bar-??-[a-z0-9].ini', flags=0) - self.assertEqual(expr.pattern, r'\/foo\/bar\-[^/][^/]\-[a-z0-9]\.ini') - - #---------------------------------------------------------------------------- - def test_compile_exact(self): - expr = globre.compile('/foo/bar/*.dir/**.ini', flags=globre.EXACT) - self.assertEqual(expr.pattern, r'^\/foo\/bar\/[^/]*?\.dir\/.*?\.ini$') - self.assertIsNotNone(expr.match('/foo/bar/a.dir/blue/conf.ini')) - self.assertIsNotNone(expr.match('/foo/bar/a.dir/conf.ini')) - self.assertIsNone(expr.match('/foo/bar/blue/a.dir/conf.ini')) - self.assertIsNone(expr.match('/foo/bar/a.dir/conf.ini.x')) - self.assertIsNone(expr.match('/x/foo/bar/a.dir/conf.ini')) - - #---------------------------------------------------------------------------- - def test_prefix(self): - self.assertEqual(globre.compile('/foo/bar', split_prefix=True)[0], '/foo/bar') - self.assertEqual(globre.compile('/foo/b**', split_prefix=True)[0], '/foo/b') - self.assertEqual(globre.compile('??/foo/b**', split_prefix=True)[0], '') - - #---------------------------------------------------------------------------- - def test_complete(self): - expr = globre.compile(r'/foo[0-9a-f]/*/bar\[??\]/{\\D{2,4\}}/**.txt') - self.assertEqual( - expr.pattern, - r'\/foo[0-9a-f]\/[^/]*?\/bar\[[^/][^/]\]\/\D{2,4}\/.*?\.txt') - self.assertIsNotNone(expr.match('/foo6/zog/bar[16]/abra/cadabra.txt')) - - #---------------------------------------------------------------------------- - def test_sep_compile(self): - self.assertEqual( - globre.compile('!foo!bar!*.dir!**.ini', sep='!').pattern, - r'\!foo\!bar\![^\!]*?\.dir\!.*?\.ini') - - #---------------------------------------------------------------------------- - def test_sep_default(self): - self.assertIsNotNone(globre.match('/foo/**.ini', '/foo/bar/conf.ini')) - self.assertIsNone(globre.match('/foo/**.ini', '\\foo\\bar\\conf.ini')) - self.assertIsNotNone(globre.match(':foo:**.ini', ':foo:bar:conf.ini')) - self.assertIsNone(globre.match('/foo/*.ini', '/foo/bar/conf.ini')) - self.assertIsNone(globre.match('/foo/*.ini', '\\foo\\bar\\conf.ini')) - self.assertIsNotNone(globre.match(':foo:*.ini', ':foo:bar:conf.ini')) - - #---------------------------------------------------------------------------- - def test_sep_alternate(self): - self.assertIsNotNone(globre.match('/foo/**.ini', '/foo/bar/conf.ini', sep='/')) - self.assertIsNotNone(globre.match('\\\\foo\\\\**.ini', '\\foo\\bar\\conf.ini', sep='\\')) - self.assertIsNotNone(globre.match(':foo:**.ini', ':foo:bar:conf.ini', sep=':')) - self.assertIsNone(globre.match('/foo/*.ini', '/foo/bar/conf.ini', sep='/')) - self.assertIsNone(globre.match('\\\\foo\\\\*.ini', '\\foo\\bar\\conf.ini', sep='\\')) - self.assertIsNone(globre.match(':foo:*.ini', ':foo:bar:conf.ini', sep=':')) - - #---------------------------------------------------------------------------- - def test_sep_multi(self): - self.assertIsNotNone(globre.match('/foo/**.ini', '/foo/bar/conf.ini', sep='/\\')) - self.assertIsNotNone(globre.match('/foo/**.ini', '\\foo\\bar\\conf.ini', sep='/\\')) - self.assertIsNotNone(globre.match('/foo/**.ini', '/foo\\bar/conf.ini', sep='/\\')) - self.assertIsNotNone(globre.match('\\\\foo\\\\**.ini', '\\foo\\bar\\conf.ini', sep='/\\')) - self.assertIsNotNone(globre.match('\\\\foo\\\\**.ini', '/foo/bar/conf.ini', sep='/\\')) - self.assertIsNotNone(globre.match('\\\\foo/**.ini', '\\foo\\bar\\conf.ini', sep='/\\')) - self.assertIsNotNone(globre.match('\\\\foo/**.ini', '/foo\\bar/conf.ini', sep='/\\')) - self.assertIsNone(globre.match('/foo/*.ini', '/foo/bar/conf.ini', sep='/\\')) - self.assertIsNone(globre.match('/foo/*.ini', '\\foo\\bar\\conf.ini', sep='/\\')) - self.assertIsNone(globre.match('/foo/*.ini', '/foo\\bar/conf.ini', sep='/\\')) - self.assertIsNone(globre.match('\\\\foo\\\\*.ini', '\\foo\\bar\\conf.ini', sep='/\\')) - self.assertIsNone(globre.match('\\\\foo\\\\*.ini', '/foo/bar/conf.ini', sep='/\\')) - self.assertIsNone(globre.match('\\\\foo/*.ini', '\\foo\\bar\\conf.ini', sep='/\\')) - self.assertIsNone(globre.match('\\\\foo/*.ini', '/foo\\bar/conf.ini', sep='/\\')) - - -#------------------------------------------------------------------------------ -# end of $Id$ -# $ChangeLog$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/idna-2.7.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/LICENSE.txt b/venv/lib/python3.6/site-packages/idna-2.7.dist-info/LICENSE.txt deleted file mode 100755 index 3ee64fb..0000000 --- a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/LICENSE.txt +++ /dev/null @@ -1,80 +0,0 @@ -License -------- - -Copyright (c) 2013-2018, Kim Davies. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -#. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -#. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided with - the distribution. - -#. Neither the name of the copyright holder nor the names of the - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -#. THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS "AS IS" AND ANY - EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - DAMAGE. - -Portions of the codec implementation and unit tests are derived from the -Python standard library, which carries the `Python Software Foundation -License `_: - - Copyright (c) 2001-2014 Python Software Foundation; All Rights Reserved - -Portions of the unit tests are derived from the Unicode standard, which -is subject to the Unicode, Inc. License Agreement: - - Copyright (c) 1991-2014 Unicode, Inc. All rights reserved. - Distributed under the Terms of Use in - . - - Permission is hereby granted, free of charge, to any person obtaining - a copy of the Unicode data files and any associated documentation - (the "Data Files") or Unicode software and any associated documentation - (the "Software") to deal in the Data Files or Software - without restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, and/or sell copies of - the Data Files or Software, and to permit persons to whom the Data Files - or Software are furnished to do so, provided that - - (a) this copyright and permission notice appear with all copies - of the Data Files or Software, - - (b) this copyright and permission notice appear in associated - documentation, and - - (c) there is clear notice in each modified Data File or in the Software - as well as in the documentation associated with the Data File(s) or - Software that the data or software has been modified. - - THE DATA FILES AND SOFTWARE ARE 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 COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS - NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL - DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THE DATA FILES OR 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 these Data Files or Software without prior - written authorization of the copyright holder. diff --git a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/METADATA b/venv/lib/python3.6/site-packages/idna-2.7.dist-info/METADATA deleted file mode 100755 index b4ef4c7..0000000 --- a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/METADATA +++ /dev/null @@ -1,239 +0,0 @@ -Metadata-Version: 2.1 -Name: idna -Version: 2.7 -Summary: Internationalized Domain Names in Applications (IDNA) -Home-page: https://github.com/kjd/idna -Author: Kim Davies -Author-email: kim@cynosure.com.au -License: BSD-like -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: System Administrators -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Topic :: Internet :: Name Service (DNS) -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: Utilities - -Internationalized Domain Names in Applications (IDNA) -===================================================== - -Support for the Internationalised Domain Names in Applications -(IDNA) protocol as specified in `RFC 5891 `_. -This is the latest version of the protocol and is sometimes referred to as -“IDNA 2008”. - -This library also provides support for Unicode Technical Standard 46, -`Unicode IDNA Compatibility Processing `_. - -This acts as a suitable replacement for the “encodings.idna” module that -comes with the Python standard library, but only supports the -old, deprecated IDNA specification (`RFC 3490 `_). - -Basic functions are simply executed: - -.. code-block:: pycon - - # Python 3 - >>> import idna - >>> idna.encode('ドメイン.テスト') - b'xn--eckwd4c7c.xn--zckzah' - >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) - ドメイン.テスト - - # Python 2 - >>> import idna - >>> idna.encode(u'ドメイン.テスト') - 'xn--eckwd4c7c.xn--zckzah' - >>> print idna.decode('xn--eckwd4c7c.xn--zckzah') - ドメイン.テスト - -Packages --------- - -The latest tagged release version is published in the PyPI repository: - -.. image:: https://badge.fury.io/py/idna.svg - :target: http://badge.fury.io/py/idna - - -Installation ------------- - -To install this library, you can use pip: - -.. code-block:: bash - - $ pip install idna - -Alternatively, you can install the package using the bundled setup script: - -.. code-block:: bash - - $ python setup.py install - -This library works with Python 2.6 or later, and Python 3.3 or later. - - -Usage ------ - -For typical usage, the ``encode`` and ``decode`` functions will take a domain -name argument and perform a conversion to A-labels or U-labels respectively. - -.. code-block:: pycon - - # Python 3 - >>> import idna - >>> idna.encode('ドメイン.テスト') - b'xn--eckwd4c7c.xn--zckzah' - >>> print(idna.decode('xn--eckwd4c7c.xn--zckzah')) - ドメイン.テスト - -You may use the codec encoding and decoding methods using the -``idna.codec`` module: - -.. code-block:: pycon - - # Python 2 - >>> import idna.codec - >>> print u'домена.испытание'.encode('idna') - xn--80ahd1agd.xn--80akhbyknj4f - >>> print 'xn--80ahd1agd.xn--80akhbyknj4f'.decode('idna') - домена.испытание - -Conversions can be applied at a per-label basis using the ``ulabel`` or ``alabel`` -functions if necessary: - -.. code-block:: pycon - - # Python 2 - >>> idna.alabel(u'测试') - 'xn--0zwm56d' - -Compatibility Mapping (UTS #46) -+++++++++++++++++++++++++++++++ - -As described in `RFC 5895 `_, the IDNA -specification no longer normalizes input from different potential ways a user -may input a domain name. This functionality, known as a “mapping”, is now -considered by the specification to be a local user-interface issue distinct -from IDNA conversion functionality. - -This library provides one such mapping, that was developed by the Unicode -Consortium. Known as `Unicode IDNA Compatibility Processing `_, -it provides for both a regular mapping for typical applications, as well as -a transitional mapping to help migrate from older IDNA 2003 applications. - -For example, “Königsgäßchen” is not a permissible label as *LATIN CAPITAL -LETTER K* is not allowed (nor are capital letters in general). UTS 46 will -convert this into lower case prior to applying the IDNA conversion. - -.. code-block:: pycon - - # Python 3 - >>> import idna - >>> idna.encode(u'Königsgäßchen') - ... - idna.core.InvalidCodepoint: Codepoint U+004B at position 1 of 'Königsgäßchen' not allowed - >>> idna.encode('Königsgäßchen', uts46=True) - b'xn--knigsgchen-b4a3dun' - >>> print(idna.decode('xn--knigsgchen-b4a3dun')) - königsgäßchen - -Transitional processing provides conversions to help transition from the older -2003 standard to the current standard. For example, in the original IDNA -specification, the *LATIN SMALL LETTER SHARP S* (ß) was converted into two -*LATIN SMALL LETTER S* (ss), whereas in the current IDNA specification this -conversion is not performed. - -.. code-block:: pycon - - # Python 2 - >>> idna.encode(u'Königsgäßchen', uts46=True, transitional=True) - 'xn--knigsgsschen-lcb0w' - -Implementors should use transitional processing with caution, only in rare -cases where conversion from legacy labels to current labels must be performed -(i.e. IDNA implementations that pre-date 2008). For typical applications -that just need to convert labels, transitional processing is unlikely to be -beneficial and could produce unexpected incompatible results. - -``encodings.idna`` Compatibility -++++++++++++++++++++++++++++++++ - -Function calls from the Python built-in ``encodings.idna`` module are -mapped to their IDNA 2008 equivalents using the ``idna.compat`` module. -Simply substitute the ``import`` clause in your code to refer to the -new module name. - -Exceptions ----------- - -All errors raised during the conversion following the specification should -raise an exception derived from the ``idna.IDNAError`` base class. - -More specific exceptions that may be generated as ``idna.IDNABidiError`` -when the error reflects an illegal combination of left-to-right and right-to-left -characters in a label; ``idna.InvalidCodepoint`` when a specific codepoint is -an illegal character in an IDN label (i.e. INVALID); and ``idna.InvalidCodepointContext`` -when the codepoint is illegal based on its positional context (i.e. it is CONTEXTO -or CONTEXTJ but the contextual requirements are not satisfied.) - -Building and Diagnostics ------------------------- - -The IDNA and UTS 46 functionality relies upon pre-calculated lookup tables for -performance. These tables are derived from computing against eligibility criteria -in the respective standards. These tables are computed using the command-line -script ``tools/idna-data``. - -This tool will fetch relevant tables from the Unicode Consortium and perform the -required calculations to identify eligibility. It has three main modes: - -* ``idna-data make-libdata``. Generates ``idnadata.py`` and ``uts46data.py``, - the pre-calculated lookup tables using for IDNA and UTS 46 conversions. Implementors - who wish to track this library against a different Unicode version may use this tool - to manually generate a different version of the ``idnadata.py`` and ``uts46data.py`` - files. - -* ``idna-data make-table``. Generate a table of the IDNA disposition - (e.g. PVALID, CONTEXTJ, CONTEXTO) in the format found in Appendix B.1 of RFC - 5892 and the pre-computed tables published by `IANA `_. - -* ``idna-data U+0061``. Prints debugging output on the various properties - associated with an individual Unicode codepoint (in this case, U+0061), that are - used to assess the IDNA and UTS 46 status of a codepoint. This is helpful in debugging - or analysis. - -The tool accepts a number of arguments, described using ``idna-data -h``. Most notably, -the ``--version`` argument allows the specification of the version of Unicode to use -in computing the table data. For example, ``idna-data --version 9.0.0 make-libdata`` -will generate library data against Unicode 9.0.0. - -Note that this script requires Python 3, but all generated library data will work -in Python 2.6+. - - -Testing -------- - -The library has a test suite based on each rule of the IDNA specification, as -well as tests that are provided as part of the Unicode Technical Standard 46, -`Unicode IDNA Compatibility Processing `_. - -The tests are run automatically on each commit at Travis CI: - -.. image:: https://travis-ci.org/kjd/idna.svg?branch=master - :target: https://travis-ci.org/kjd/idna - - diff --git a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/RECORD b/venv/lib/python3.6/site-packages/idna-2.7.dist-info/RECORD deleted file mode 100644 index cf23885..0000000 --- a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/RECORD +++ /dev/null @@ -1,22 +0,0 @@ -idna/__init__.py,sha256=9Nt7xpyet3DmOrPUGooDdAwmHZZu1qUAy2EaJ93kGiQ,58 -idna/codec.py,sha256=lvYb7yu7PhAqFaAIAdWcwgaWI2UmgseUua-1c0AsG0A,3299 -idna/compat.py,sha256=R-h29D-6mrnJzbXxymrWUW7iZUvy-26TQwZ0ij57i4U,232 -idna/core.py,sha256=OwI5R_uuXU4PlOSoG8cjaMPA1hhdGGjjZ8I2MZhSPxo,11858 -idna/idnadata.py,sha256=zwxvoSsYqPHNa6xzXWHizXpDC28JJMGXRinhJ4Gkcz0,39285 -idna/intranges.py,sha256=TY1lpxZIQWEP6tNqjZkFA5hgoMWOj1OBmnUG8ihT87E,1749 -idna/package_data.py,sha256=Vt9rtr32BzO7O25rypo8nzAs3syTJhG1ojU3J-s2RFo,21 -idna/uts46data.py,sha256=czULzYN5Lr9K5MmOH-1g3CJY7QPjGeHjYmC3saJ_BHk,197803 -idna-2.7.dist-info/LICENSE.txt,sha256=DUvHq9SNz7FOJCVO5AQGZzf_AWcUTiIpFKIRO4eUaD4,3947 -idna-2.7.dist-info/METADATA,sha256=rRIGQN4TE52ADjNub-LTnazbzjxmsviAzZia-v_nZHs,8866 -idna-2.7.dist-info/RECORD,, -idna-2.7.dist-info/WHEEL,sha256=J3CsTk7Mf2JNUyhImI-mjX-fmI4oDjyiXgWT4qgZiCE,110 -idna-2.7.dist-info/top_level.txt,sha256=jSag9sEDqvSPftxOQy-ABfGV_RSy7oFh4zZJpODV8k0,5 -idna-2.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -idna/__pycache__/idnadata.cpython-36.pyc,, -idna/__pycache__/codec.cpython-36.pyc,, -idna/__pycache__/core.cpython-36.pyc,, -idna/__pycache__/package_data.cpython-36.pyc,, -idna/__pycache__/compat.cpython-36.pyc,, -idna/__pycache__/__init__.cpython-36.pyc,, -idna/__pycache__/intranges.cpython-36.pyc,, -idna/__pycache__/uts46data.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/WHEEL b/venv/lib/python3.6/site-packages/idna-2.7.dist-info/WHEEL deleted file mode 100755 index f21b51c..0000000 --- a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.31.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/idna-2.7.dist-info/top_level.txt deleted file mode 100755 index c40472e..0000000 --- a/venv/lib/python3.6/site-packages/idna-2.7.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -idna diff --git a/venv/lib/python3.6/site-packages/idna/__init__.py b/venv/lib/python3.6/site-packages/idna/__init__.py deleted file mode 100755 index 847bf93..0000000 --- a/venv/lib/python3.6/site-packages/idna/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .package_data import __version__ -from .core import * diff --git a/venv/lib/python3.6/site-packages/idna/codec.py b/venv/lib/python3.6/site-packages/idna/codec.py deleted file mode 100755 index 98c65ea..0000000 --- a/venv/lib/python3.6/site-packages/idna/codec.py +++ /dev/null @@ -1,118 +0,0 @@ -from .core import encode, decode, alabel, ulabel, IDNAError -import codecs -import re - -_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') - -class Codec(codecs.Codec): - - def encode(self, data, errors='strict'): - - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return "", 0 - - return encode(data), len(data) - - def decode(self, data, errors='strict'): - - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return u"", 0 - - return decode(data), len(data) - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, data, errors, final): - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return ("", 0) - - labels = _unicode_dots_re.split(data) - trailing_dot = u'' - if labels: - if not labels[-1]: - trailing_dot = '.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = '.' - - result = [] - size = 0 - for label in labels: - result.append(alabel(label)) - if size: - size += 1 - size += len(label) - - # Join with U+002E - result = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, data, errors, final): - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return (u"", 0) - - # IDNA allows decoding to operate on Unicode strings, too. - if isinstance(data, unicode): - labels = _unicode_dots_re.split(data) - else: - # Must be ASCII string - data = str(data) - unicode(data, "ascii") - labels = data.split(".") - - trailing_dot = u'' - if labels: - if not labels[-1]: - trailing_dot = u'.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = u'.' - - result = [] - size = 0 - for label in labels: - result.append(ulabel(label)) - if size: - size += 1 - size += len(label) - - result = u".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - -class StreamReader(Codec, codecs.StreamReader): - pass - -def getregentry(): - return codecs.CodecInfo( - name='idna', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/venv/lib/python3.6/site-packages/idna/compat.py b/venv/lib/python3.6/site-packages/idna/compat.py deleted file mode 100755 index 4d47f33..0000000 --- a/venv/lib/python3.6/site-packages/idna/compat.py +++ /dev/null @@ -1,12 +0,0 @@ -from .core import * -from .codec import * - -def ToASCII(label): - return encode(label) - -def ToUnicode(label): - return decode(label) - -def nameprep(s): - raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") - diff --git a/venv/lib/python3.6/site-packages/idna/core.py b/venv/lib/python3.6/site-packages/idna/core.py deleted file mode 100755 index 090c2c1..0000000 --- a/venv/lib/python3.6/site-packages/idna/core.py +++ /dev/null @@ -1,399 +0,0 @@ -from . import idnadata -import bisect -import unicodedata -import re -import sys -from .intranges import intranges_contain - -_virama_combining_class = 9 -_alabel_prefix = b'xn--' -_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') - -if sys.version_info[0] == 3: - unicode = str - unichr = chr - -class IDNAError(UnicodeError): - """ Base exception for all IDNA-encoding related problems """ - pass - - -class IDNABidiError(IDNAError): - """ Exception when bidirectional requirements are not satisfied """ - pass - - -class InvalidCodepoint(IDNAError): - """ Exception when a disallowed or unallocated codepoint is used """ - pass - - -class InvalidCodepointContext(IDNAError): - """ Exception when the codepoint is not valid in the context it is used """ - pass - - -def _combining_class(cp): - v = unicodedata.combining(unichr(cp)) - if v == 0: - if not unicodedata.name(unichr(cp)): - raise ValueError("Unknown character in unicodedata") - return v - -def _is_script(cp, script): - return intranges_contain(ord(cp), idnadata.scripts[script]) - -def _punycode(s): - return s.encode('punycode') - -def _unot(s): - return 'U+{0:04X}'.format(s) - - -def valid_label_length(label): - - if len(label) > 63: - return False - return True - - -def valid_string_length(label, trailing_dot): - - if len(label) > (254 if trailing_dot else 253): - return False - return True - - -def check_bidi(label, check_ltr=False): - - # Bidi rules should only be applied if string contains RTL characters - bidi_label = False - for (idx, cp) in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - if direction == '': - # String likely comes from a newer version of Unicode - raise IDNABidiError('Unknown directionality in label {0} at position {1}'.format(repr(label), idx)) - if direction in ['R', 'AL', 'AN']: - bidi_label = True - if not bidi_label and not check_ltr: - return True - - # Bidi rule 1 - direction = unicodedata.bidirectional(label[0]) - if direction in ['R', 'AL']: - rtl = True - elif direction == 'L': - rtl = False - else: - raise IDNABidiError('First codepoint in label {0} must be directionality L, R or AL'.format(repr(label))) - - valid_ending = False - number_type = False - for (idx, cp) in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - - if rtl: - # Bidi rule 2 - if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: - raise IDNABidiError('Invalid direction for codepoint at position {0} in a right-to-left label'.format(idx)) - # Bidi rule 3 - if direction in ['R', 'AL', 'EN', 'AN']: - valid_ending = True - elif direction != 'NSM': - valid_ending = False - # Bidi rule 4 - if direction in ['AN', 'EN']: - if not number_type: - number_type = direction - else: - if number_type != direction: - raise IDNABidiError('Can not mix numeral types in a right-to-left label') - else: - # Bidi rule 5 - if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: - raise IDNABidiError('Invalid direction for codepoint at position {0} in a left-to-right label'.format(idx)) - # Bidi rule 6 - if direction in ['L', 'EN']: - valid_ending = True - elif direction != 'NSM': - valid_ending = False - - if not valid_ending: - raise IDNABidiError('Label ends with illegal codepoint directionality') - - return True - - -def check_initial_combiner(label): - - if unicodedata.category(label[0])[0] == 'M': - raise IDNAError('Label begins with an illegal combining character') - return True - - -def check_hyphen_ok(label): - - if label[2:4] == '--': - raise IDNAError('Label has disallowed hyphens in 3rd and 4th position') - if label[0] == '-' or label[-1] == '-': - raise IDNAError('Label must not start or end with a hyphen') - return True - - -def check_nfc(label): - - if unicodedata.normalize('NFC', label) != label: - raise IDNAError('Label must be in Normalization Form C') - - -def valid_contextj(label, pos): - - cp_value = ord(label[pos]) - - if cp_value == 0x200c: - - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - - ok = False - for i in range(pos-1, -1, -1): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord('T'): - continue - if joining_type in [ord('L'), ord('D')]: - ok = True - break - - if not ok: - return False - - ok = False - for i in range(pos+1, len(label)): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord('T'): - continue - if joining_type in [ord('R'), ord('D')]: - ok = True - break - return ok - - if cp_value == 0x200d: - - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - return False - - else: - - return False - - -def valid_contexto(label, pos, exception=False): - - cp_value = ord(label[pos]) - - if cp_value == 0x00b7: - if 0 < pos < len(label)-1: - if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c: - return True - return False - - elif cp_value == 0x0375: - if pos < len(label)-1 and len(label) > 1: - return _is_script(label[pos + 1], 'Greek') - return False - - elif cp_value == 0x05f3 or cp_value == 0x05f4: - if pos > 0: - return _is_script(label[pos - 1], 'Hebrew') - return False - - elif cp_value == 0x30fb: - for cp in label: - if cp == u'\u30fb': - continue - if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'): - return True - return False - - elif 0x660 <= cp_value <= 0x669: - for cp in label: - if 0x6f0 <= ord(cp) <= 0x06f9: - return False - return True - - elif 0x6f0 <= cp_value <= 0x6f9: - for cp in label: - if 0x660 <= ord(cp) <= 0x0669: - return False - return True - - -def check_label(label): - - if isinstance(label, (bytes, bytearray)): - label = label.decode('utf-8') - if len(label) == 0: - raise IDNAError('Empty Label') - - check_nfc(label) - check_hyphen_ok(label) - check_initial_combiner(label) - - for (pos, cp) in enumerate(label): - cp_value = ord(cp) - if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']): - continue - elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']): - try: - if not valid_contextj(label, pos): - raise InvalidCodepointContext('Joiner {0} not allowed at position {1} in {2}'.format( - _unot(cp_value), pos+1, repr(label))) - except ValueError: - raise IDNAError('Unknown codepoint adjacent to joiner {0} at position {1} in {2}'.format( - _unot(cp_value), pos+1, repr(label))) - elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']): - if not valid_contexto(label, pos): - raise InvalidCodepointContext('Codepoint {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label))) - else: - raise InvalidCodepoint('Codepoint {0} at position {1} of {2} not allowed'.format(_unot(cp_value), pos+1, repr(label))) - - check_bidi(label) - - -def alabel(label): - - try: - label = label.encode('ascii') - try: - ulabel(label) - except IDNAError: - raise IDNAError('The label {0} is not a valid A-label'.format(label)) - if not valid_label_length(label): - raise IDNAError('Label too long') - return label - except UnicodeEncodeError: - pass - - if not label: - raise IDNAError('No Input') - - label = unicode(label) - check_label(label) - label = _punycode(label) - label = _alabel_prefix + label - - if not valid_label_length(label): - raise IDNAError('Label too long') - - return label - - -def ulabel(label): - - if not isinstance(label, (bytes, bytearray)): - try: - label = label.encode('ascii') - except UnicodeEncodeError: - check_label(label) - return label - - label = label.lower() - if label.startswith(_alabel_prefix): - label = label[len(_alabel_prefix):] - else: - check_label(label) - return label.decode('ascii') - - label = label.decode('punycode') - check_label(label) - return label - - -def uts46_remap(domain, std3_rules=True, transitional=False): - """Re-map the characters in the string according to UTS46 processing.""" - from .uts46data import uts46data - output = u"" - try: - for pos, char in enumerate(domain): - code_point = ord(char) - uts46row = uts46data[code_point if code_point < 256 else - bisect.bisect_left(uts46data, (code_point, "Z")) - 1] - status = uts46row[1] - replacement = uts46row[2] if len(uts46row) == 3 else None - if (status == "V" or - (status == "D" and not transitional) or - (status == "3" and not std3_rules and replacement is None)): - output += char - elif replacement is not None and (status == "M" or - (status == "3" and not std3_rules) or - (status == "D" and transitional)): - output += replacement - elif status != "I": - raise IndexError() - return unicodedata.normalize("NFC", output) - except IndexError: - raise InvalidCodepoint( - "Codepoint {0} not allowed at position {1} in {2}".format( - _unot(code_point), pos + 1, repr(domain))) - - -def encode(s, strict=False, uts46=False, std3_rules=False, transitional=False): - - if isinstance(s, (bytes, bytearray)): - s = s.decode("ascii") - if uts46: - s = uts46_remap(s, std3_rules, transitional) - trailing_dot = False - result = [] - if strict: - labels = s.split('.') - else: - labels = _unicode_dots_re.split(s) - if not labels or labels == ['']: - raise IDNAError('Empty domain') - if labels[-1] == '': - del labels[-1] - trailing_dot = True - for label in labels: - s = alabel(label) - if s: - result.append(s) - else: - raise IDNAError('Empty label') - if trailing_dot: - result.append(b'') - s = b'.'.join(result) - if not valid_string_length(s, trailing_dot): - raise IDNAError('Domain too long') - return s - - -def decode(s, strict=False, uts46=False, std3_rules=False): - - if isinstance(s, (bytes, bytearray)): - s = s.decode("ascii") - if uts46: - s = uts46_remap(s, std3_rules, False) - trailing_dot = False - result = [] - if not strict: - labels = _unicode_dots_re.split(s) - else: - labels = s.split(u'.') - if not labels or labels == ['']: - raise IDNAError('Empty domain') - if not labels[-1]: - del labels[-1] - trailing_dot = True - for label in labels: - s = ulabel(label) - if s: - result.append(s) - else: - raise IDNAError('Empty label') - if trailing_dot: - result.append(u'') - return u'.'.join(result) diff --git a/venv/lib/python3.6/site-packages/idna/idnadata.py b/venv/lib/python3.6/site-packages/idna/idnadata.py deleted file mode 100755 index 17974e2..0000000 --- a/venv/lib/python3.6/site-packages/idna/idnadata.py +++ /dev/null @@ -1,1893 +0,0 @@ -# This file is automatically generated by tools/idna-data - -__version__ = "10.0.0" -scripts = { - 'Greek': ( - 0x37000000374, - 0x37500000378, - 0x37a0000037e, - 0x37f00000380, - 0x38400000385, - 0x38600000387, - 0x3880000038b, - 0x38c0000038d, - 0x38e000003a2, - 0x3a3000003e2, - 0x3f000000400, - 0x1d2600001d2b, - 0x1d5d00001d62, - 0x1d6600001d6b, - 0x1dbf00001dc0, - 0x1f0000001f16, - 0x1f1800001f1e, - 0x1f2000001f46, - 0x1f4800001f4e, - 0x1f5000001f58, - 0x1f5900001f5a, - 0x1f5b00001f5c, - 0x1f5d00001f5e, - 0x1f5f00001f7e, - 0x1f8000001fb5, - 0x1fb600001fc5, - 0x1fc600001fd4, - 0x1fd600001fdc, - 0x1fdd00001ff0, - 0x1ff200001ff5, - 0x1ff600001fff, - 0x212600002127, - 0xab650000ab66, - 0x101400001018f, - 0x101a0000101a1, - 0x1d2000001d246, - ), - 'Han': ( - 0x2e8000002e9a, - 0x2e9b00002ef4, - 0x2f0000002fd6, - 0x300500003006, - 0x300700003008, - 0x30210000302a, - 0x30380000303c, - 0x340000004db6, - 0x4e0000009feb, - 0xf9000000fa6e, - 0xfa700000fada, - 0x200000002a6d7, - 0x2a7000002b735, - 0x2b7400002b81e, - 0x2b8200002cea2, - 0x2ceb00002ebe1, - 0x2f8000002fa1e, - ), - 'Hebrew': ( - 0x591000005c8, - 0x5d0000005eb, - 0x5f0000005f5, - 0xfb1d0000fb37, - 0xfb380000fb3d, - 0xfb3e0000fb3f, - 0xfb400000fb42, - 0xfb430000fb45, - 0xfb460000fb50, - ), - 'Hiragana': ( - 0x304100003097, - 0x309d000030a0, - 0x1b0010001b11f, - 0x1f2000001f201, - ), - 'Katakana': ( - 0x30a1000030fb, - 0x30fd00003100, - 0x31f000003200, - 0x32d0000032ff, - 0x330000003358, - 0xff660000ff70, - 0xff710000ff9e, - 0x1b0000001b001, - ), -} -joining_types = { - 0x600: 85, - 0x601: 85, - 0x602: 85, - 0x603: 85, - 0x604: 85, - 0x605: 85, - 0x608: 85, - 0x60b: 85, - 0x620: 68, - 0x621: 85, - 0x622: 82, - 0x623: 82, - 0x624: 82, - 0x625: 82, - 0x626: 68, - 0x627: 82, - 0x628: 68, - 0x629: 82, - 0x62a: 68, - 0x62b: 68, - 0x62c: 68, - 0x62d: 68, - 0x62e: 68, - 0x62f: 82, - 0x630: 82, - 0x631: 82, - 0x632: 82, - 0x633: 68, - 0x634: 68, - 0x635: 68, - 0x636: 68, - 0x637: 68, - 0x638: 68, - 0x639: 68, - 0x63a: 68, - 0x63b: 68, - 0x63c: 68, - 0x63d: 68, - 0x63e: 68, - 0x63f: 68, - 0x640: 67, - 0x641: 68, - 0x642: 68, - 0x643: 68, - 0x644: 68, - 0x645: 68, - 0x646: 68, - 0x647: 68, - 0x648: 82, - 0x649: 68, - 0x64a: 68, - 0x66e: 68, - 0x66f: 68, - 0x671: 82, - 0x672: 82, - 0x673: 82, - 0x674: 85, - 0x675: 82, - 0x676: 82, - 0x677: 82, - 0x678: 68, - 0x679: 68, - 0x67a: 68, - 0x67b: 68, - 0x67c: 68, - 0x67d: 68, - 0x67e: 68, - 0x67f: 68, - 0x680: 68, - 0x681: 68, - 0x682: 68, - 0x683: 68, - 0x684: 68, - 0x685: 68, - 0x686: 68, - 0x687: 68, - 0x688: 82, - 0x689: 82, - 0x68a: 82, - 0x68b: 82, - 0x68c: 82, - 0x68d: 82, - 0x68e: 82, - 0x68f: 82, - 0x690: 82, - 0x691: 82, - 0x692: 82, - 0x693: 82, - 0x694: 82, - 0x695: 82, - 0x696: 82, - 0x697: 82, - 0x698: 82, - 0x699: 82, - 0x69a: 68, - 0x69b: 68, - 0x69c: 68, - 0x69d: 68, - 0x69e: 68, - 0x69f: 68, - 0x6a0: 68, - 0x6a1: 68, - 0x6a2: 68, - 0x6a3: 68, - 0x6a4: 68, - 0x6a5: 68, - 0x6a6: 68, - 0x6a7: 68, - 0x6a8: 68, - 0x6a9: 68, - 0x6aa: 68, - 0x6ab: 68, - 0x6ac: 68, - 0x6ad: 68, - 0x6ae: 68, - 0x6af: 68, - 0x6b0: 68, - 0x6b1: 68, - 0x6b2: 68, - 0x6b3: 68, - 0x6b4: 68, - 0x6b5: 68, - 0x6b6: 68, - 0x6b7: 68, - 0x6b8: 68, - 0x6b9: 68, - 0x6ba: 68, - 0x6bb: 68, - 0x6bc: 68, - 0x6bd: 68, - 0x6be: 68, - 0x6bf: 68, - 0x6c0: 82, - 0x6c1: 68, - 0x6c2: 68, - 0x6c3: 82, - 0x6c4: 82, - 0x6c5: 82, - 0x6c6: 82, - 0x6c7: 82, - 0x6c8: 82, - 0x6c9: 82, - 0x6ca: 82, - 0x6cb: 82, - 0x6cc: 68, - 0x6cd: 82, - 0x6ce: 68, - 0x6cf: 82, - 0x6d0: 68, - 0x6d1: 68, - 0x6d2: 82, - 0x6d3: 82, - 0x6d5: 82, - 0x6dd: 85, - 0x6ee: 82, - 0x6ef: 82, - 0x6fa: 68, - 0x6fb: 68, - 0x6fc: 68, - 0x6ff: 68, - 0x710: 82, - 0x712: 68, - 0x713: 68, - 0x714: 68, - 0x715: 82, - 0x716: 82, - 0x717: 82, - 0x718: 82, - 0x719: 82, - 0x71a: 68, - 0x71b: 68, - 0x71c: 68, - 0x71d: 68, - 0x71e: 82, - 0x71f: 68, - 0x720: 68, - 0x721: 68, - 0x722: 68, - 0x723: 68, - 0x724: 68, - 0x725: 68, - 0x726: 68, - 0x727: 68, - 0x728: 82, - 0x729: 68, - 0x72a: 82, - 0x72b: 68, - 0x72c: 82, - 0x72d: 68, - 0x72e: 68, - 0x72f: 82, - 0x74d: 82, - 0x74e: 68, - 0x74f: 68, - 0x750: 68, - 0x751: 68, - 0x752: 68, - 0x753: 68, - 0x754: 68, - 0x755: 68, - 0x756: 68, - 0x757: 68, - 0x758: 68, - 0x759: 82, - 0x75a: 82, - 0x75b: 82, - 0x75c: 68, - 0x75d: 68, - 0x75e: 68, - 0x75f: 68, - 0x760: 68, - 0x761: 68, - 0x762: 68, - 0x763: 68, - 0x764: 68, - 0x765: 68, - 0x766: 68, - 0x767: 68, - 0x768: 68, - 0x769: 68, - 0x76a: 68, - 0x76b: 82, - 0x76c: 82, - 0x76d: 68, - 0x76e: 68, - 0x76f: 68, - 0x770: 68, - 0x771: 82, - 0x772: 68, - 0x773: 82, - 0x774: 82, - 0x775: 68, - 0x776: 68, - 0x777: 68, - 0x778: 82, - 0x779: 82, - 0x77a: 68, - 0x77b: 68, - 0x77c: 68, - 0x77d: 68, - 0x77e: 68, - 0x77f: 68, - 0x7ca: 68, - 0x7cb: 68, - 0x7cc: 68, - 0x7cd: 68, - 0x7ce: 68, - 0x7cf: 68, - 0x7d0: 68, - 0x7d1: 68, - 0x7d2: 68, - 0x7d3: 68, - 0x7d4: 68, - 0x7d5: 68, - 0x7d6: 68, - 0x7d7: 68, - 0x7d8: 68, - 0x7d9: 68, - 0x7da: 68, - 0x7db: 68, - 0x7dc: 68, - 0x7dd: 68, - 0x7de: 68, - 0x7df: 68, - 0x7e0: 68, - 0x7e1: 68, - 0x7e2: 68, - 0x7e3: 68, - 0x7e4: 68, - 0x7e5: 68, - 0x7e6: 68, - 0x7e7: 68, - 0x7e8: 68, - 0x7e9: 68, - 0x7ea: 68, - 0x7fa: 67, - 0x840: 82, - 0x841: 68, - 0x842: 68, - 0x843: 68, - 0x844: 68, - 0x845: 68, - 0x846: 82, - 0x847: 82, - 0x848: 68, - 0x849: 82, - 0x84a: 68, - 0x84b: 68, - 0x84c: 68, - 0x84d: 68, - 0x84e: 68, - 0x84f: 68, - 0x850: 68, - 0x851: 68, - 0x852: 68, - 0x853: 68, - 0x854: 82, - 0x855: 68, - 0x856: 85, - 0x857: 85, - 0x858: 85, - 0x860: 68, - 0x861: 85, - 0x862: 68, - 0x863: 68, - 0x864: 68, - 0x865: 68, - 0x866: 85, - 0x867: 82, - 0x868: 68, - 0x869: 82, - 0x86a: 82, - 0x8a0: 68, - 0x8a1: 68, - 0x8a2: 68, - 0x8a3: 68, - 0x8a4: 68, - 0x8a5: 68, - 0x8a6: 68, - 0x8a7: 68, - 0x8a8: 68, - 0x8a9: 68, - 0x8aa: 82, - 0x8ab: 82, - 0x8ac: 82, - 0x8ad: 85, - 0x8ae: 82, - 0x8af: 68, - 0x8b0: 68, - 0x8b1: 82, - 0x8b2: 82, - 0x8b3: 68, - 0x8b4: 68, - 0x8b6: 68, - 0x8b7: 68, - 0x8b8: 68, - 0x8b9: 82, - 0x8ba: 68, - 0x8bb: 68, - 0x8bc: 68, - 0x8bd: 68, - 0x8e2: 85, - 0x1806: 85, - 0x1807: 68, - 0x180a: 67, - 0x180e: 85, - 0x1820: 68, - 0x1821: 68, - 0x1822: 68, - 0x1823: 68, - 0x1824: 68, - 0x1825: 68, - 0x1826: 68, - 0x1827: 68, - 0x1828: 68, - 0x1829: 68, - 0x182a: 68, - 0x182b: 68, - 0x182c: 68, - 0x182d: 68, - 0x182e: 68, - 0x182f: 68, - 0x1830: 68, - 0x1831: 68, - 0x1832: 68, - 0x1833: 68, - 0x1834: 68, - 0x1835: 68, - 0x1836: 68, - 0x1837: 68, - 0x1838: 68, - 0x1839: 68, - 0x183a: 68, - 0x183b: 68, - 0x183c: 68, - 0x183d: 68, - 0x183e: 68, - 0x183f: 68, - 0x1840: 68, - 0x1841: 68, - 0x1842: 68, - 0x1843: 68, - 0x1844: 68, - 0x1845: 68, - 0x1846: 68, - 0x1847: 68, - 0x1848: 68, - 0x1849: 68, - 0x184a: 68, - 0x184b: 68, - 0x184c: 68, - 0x184d: 68, - 0x184e: 68, - 0x184f: 68, - 0x1850: 68, - 0x1851: 68, - 0x1852: 68, - 0x1853: 68, - 0x1854: 68, - 0x1855: 68, - 0x1856: 68, - 0x1857: 68, - 0x1858: 68, - 0x1859: 68, - 0x185a: 68, - 0x185b: 68, - 0x185c: 68, - 0x185d: 68, - 0x185e: 68, - 0x185f: 68, - 0x1860: 68, - 0x1861: 68, - 0x1862: 68, - 0x1863: 68, - 0x1864: 68, - 0x1865: 68, - 0x1866: 68, - 0x1867: 68, - 0x1868: 68, - 0x1869: 68, - 0x186a: 68, - 0x186b: 68, - 0x186c: 68, - 0x186d: 68, - 0x186e: 68, - 0x186f: 68, - 0x1870: 68, - 0x1871: 68, - 0x1872: 68, - 0x1873: 68, - 0x1874: 68, - 0x1875: 68, - 0x1876: 68, - 0x1877: 68, - 0x1880: 85, - 0x1881: 85, - 0x1882: 85, - 0x1883: 85, - 0x1884: 85, - 0x1885: 84, - 0x1886: 84, - 0x1887: 68, - 0x1888: 68, - 0x1889: 68, - 0x188a: 68, - 0x188b: 68, - 0x188c: 68, - 0x188d: 68, - 0x188e: 68, - 0x188f: 68, - 0x1890: 68, - 0x1891: 68, - 0x1892: 68, - 0x1893: 68, - 0x1894: 68, - 0x1895: 68, - 0x1896: 68, - 0x1897: 68, - 0x1898: 68, - 0x1899: 68, - 0x189a: 68, - 0x189b: 68, - 0x189c: 68, - 0x189d: 68, - 0x189e: 68, - 0x189f: 68, - 0x18a0: 68, - 0x18a1: 68, - 0x18a2: 68, - 0x18a3: 68, - 0x18a4: 68, - 0x18a5: 68, - 0x18a6: 68, - 0x18a7: 68, - 0x18a8: 68, - 0x18aa: 68, - 0x200c: 85, - 0x200d: 67, - 0x202f: 85, - 0x2066: 85, - 0x2067: 85, - 0x2068: 85, - 0x2069: 85, - 0xa840: 68, - 0xa841: 68, - 0xa842: 68, - 0xa843: 68, - 0xa844: 68, - 0xa845: 68, - 0xa846: 68, - 0xa847: 68, - 0xa848: 68, - 0xa849: 68, - 0xa84a: 68, - 0xa84b: 68, - 0xa84c: 68, - 0xa84d: 68, - 0xa84e: 68, - 0xa84f: 68, - 0xa850: 68, - 0xa851: 68, - 0xa852: 68, - 0xa853: 68, - 0xa854: 68, - 0xa855: 68, - 0xa856: 68, - 0xa857: 68, - 0xa858: 68, - 0xa859: 68, - 0xa85a: 68, - 0xa85b: 68, - 0xa85c: 68, - 0xa85d: 68, - 0xa85e: 68, - 0xa85f: 68, - 0xa860: 68, - 0xa861: 68, - 0xa862: 68, - 0xa863: 68, - 0xa864: 68, - 0xa865: 68, - 0xa866: 68, - 0xa867: 68, - 0xa868: 68, - 0xa869: 68, - 0xa86a: 68, - 0xa86b: 68, - 0xa86c: 68, - 0xa86d: 68, - 0xa86e: 68, - 0xa86f: 68, - 0xa870: 68, - 0xa871: 68, - 0xa872: 76, - 0xa873: 85, - 0x10ac0: 68, - 0x10ac1: 68, - 0x10ac2: 68, - 0x10ac3: 68, - 0x10ac4: 68, - 0x10ac5: 82, - 0x10ac6: 85, - 0x10ac7: 82, - 0x10ac8: 85, - 0x10ac9: 82, - 0x10aca: 82, - 0x10acb: 85, - 0x10acc: 85, - 0x10acd: 76, - 0x10ace: 82, - 0x10acf: 82, - 0x10ad0: 82, - 0x10ad1: 82, - 0x10ad2: 82, - 0x10ad3: 68, - 0x10ad4: 68, - 0x10ad5: 68, - 0x10ad6: 68, - 0x10ad7: 76, - 0x10ad8: 68, - 0x10ad9: 68, - 0x10ada: 68, - 0x10adb: 68, - 0x10adc: 68, - 0x10add: 82, - 0x10ade: 68, - 0x10adf: 68, - 0x10ae0: 68, - 0x10ae1: 82, - 0x10ae2: 85, - 0x10ae3: 85, - 0x10ae4: 82, - 0x10aeb: 68, - 0x10aec: 68, - 0x10aed: 68, - 0x10aee: 68, - 0x10aef: 82, - 0x10b80: 68, - 0x10b81: 82, - 0x10b82: 68, - 0x10b83: 82, - 0x10b84: 82, - 0x10b85: 82, - 0x10b86: 68, - 0x10b87: 68, - 0x10b88: 68, - 0x10b89: 82, - 0x10b8a: 68, - 0x10b8b: 68, - 0x10b8c: 82, - 0x10b8d: 68, - 0x10b8e: 82, - 0x10b8f: 82, - 0x10b90: 68, - 0x10b91: 82, - 0x10ba9: 82, - 0x10baa: 82, - 0x10bab: 82, - 0x10bac: 82, - 0x10bad: 68, - 0x10bae: 68, - 0x10baf: 85, - 0x1e900: 68, - 0x1e901: 68, - 0x1e902: 68, - 0x1e903: 68, - 0x1e904: 68, - 0x1e905: 68, - 0x1e906: 68, - 0x1e907: 68, - 0x1e908: 68, - 0x1e909: 68, - 0x1e90a: 68, - 0x1e90b: 68, - 0x1e90c: 68, - 0x1e90d: 68, - 0x1e90e: 68, - 0x1e90f: 68, - 0x1e910: 68, - 0x1e911: 68, - 0x1e912: 68, - 0x1e913: 68, - 0x1e914: 68, - 0x1e915: 68, - 0x1e916: 68, - 0x1e917: 68, - 0x1e918: 68, - 0x1e919: 68, - 0x1e91a: 68, - 0x1e91b: 68, - 0x1e91c: 68, - 0x1e91d: 68, - 0x1e91e: 68, - 0x1e91f: 68, - 0x1e920: 68, - 0x1e921: 68, - 0x1e922: 68, - 0x1e923: 68, - 0x1e924: 68, - 0x1e925: 68, - 0x1e926: 68, - 0x1e927: 68, - 0x1e928: 68, - 0x1e929: 68, - 0x1e92a: 68, - 0x1e92b: 68, - 0x1e92c: 68, - 0x1e92d: 68, - 0x1e92e: 68, - 0x1e92f: 68, - 0x1e930: 68, - 0x1e931: 68, - 0x1e932: 68, - 0x1e933: 68, - 0x1e934: 68, - 0x1e935: 68, - 0x1e936: 68, - 0x1e937: 68, - 0x1e938: 68, - 0x1e939: 68, - 0x1e93a: 68, - 0x1e93b: 68, - 0x1e93c: 68, - 0x1e93d: 68, - 0x1e93e: 68, - 0x1e93f: 68, - 0x1e940: 68, - 0x1e941: 68, - 0x1e942: 68, - 0x1e943: 68, -} -codepoint_classes = { - 'PVALID': ( - 0x2d0000002e, - 0x300000003a, - 0x610000007b, - 0xdf000000f7, - 0xf800000100, - 0x10100000102, - 0x10300000104, - 0x10500000106, - 0x10700000108, - 0x1090000010a, - 0x10b0000010c, - 0x10d0000010e, - 0x10f00000110, - 0x11100000112, - 0x11300000114, - 0x11500000116, - 0x11700000118, - 0x1190000011a, - 0x11b0000011c, - 0x11d0000011e, - 0x11f00000120, - 0x12100000122, - 0x12300000124, - 0x12500000126, - 0x12700000128, - 0x1290000012a, - 0x12b0000012c, - 0x12d0000012e, - 0x12f00000130, - 0x13100000132, - 0x13500000136, - 0x13700000139, - 0x13a0000013b, - 0x13c0000013d, - 0x13e0000013f, - 0x14200000143, - 0x14400000145, - 0x14600000147, - 0x14800000149, - 0x14b0000014c, - 0x14d0000014e, - 0x14f00000150, - 0x15100000152, - 0x15300000154, - 0x15500000156, - 0x15700000158, - 0x1590000015a, - 0x15b0000015c, - 0x15d0000015e, - 0x15f00000160, - 0x16100000162, - 0x16300000164, - 0x16500000166, - 0x16700000168, - 0x1690000016a, - 0x16b0000016c, - 0x16d0000016e, - 0x16f00000170, - 0x17100000172, - 0x17300000174, - 0x17500000176, - 0x17700000178, - 0x17a0000017b, - 0x17c0000017d, - 0x17e0000017f, - 0x18000000181, - 0x18300000184, - 0x18500000186, - 0x18800000189, - 0x18c0000018e, - 0x19200000193, - 0x19500000196, - 0x1990000019c, - 0x19e0000019f, - 0x1a1000001a2, - 0x1a3000001a4, - 0x1a5000001a6, - 0x1a8000001a9, - 0x1aa000001ac, - 0x1ad000001ae, - 0x1b0000001b1, - 0x1b4000001b5, - 0x1b6000001b7, - 0x1b9000001bc, - 0x1bd000001c4, - 0x1ce000001cf, - 0x1d0000001d1, - 0x1d2000001d3, - 0x1d4000001d5, - 0x1d6000001d7, - 0x1d8000001d9, - 0x1da000001db, - 0x1dc000001de, - 0x1df000001e0, - 0x1e1000001e2, - 0x1e3000001e4, - 0x1e5000001e6, - 0x1e7000001e8, - 0x1e9000001ea, - 0x1eb000001ec, - 0x1ed000001ee, - 0x1ef000001f1, - 0x1f5000001f6, - 0x1f9000001fa, - 0x1fb000001fc, - 0x1fd000001fe, - 0x1ff00000200, - 0x20100000202, - 0x20300000204, - 0x20500000206, - 0x20700000208, - 0x2090000020a, - 0x20b0000020c, - 0x20d0000020e, - 0x20f00000210, - 0x21100000212, - 0x21300000214, - 0x21500000216, - 0x21700000218, - 0x2190000021a, - 0x21b0000021c, - 0x21d0000021e, - 0x21f00000220, - 0x22100000222, - 0x22300000224, - 0x22500000226, - 0x22700000228, - 0x2290000022a, - 0x22b0000022c, - 0x22d0000022e, - 0x22f00000230, - 0x23100000232, - 0x2330000023a, - 0x23c0000023d, - 0x23f00000241, - 0x24200000243, - 0x24700000248, - 0x2490000024a, - 0x24b0000024c, - 0x24d0000024e, - 0x24f000002b0, - 0x2b9000002c2, - 0x2c6000002d2, - 0x2ec000002ed, - 0x2ee000002ef, - 0x30000000340, - 0x34200000343, - 0x3460000034f, - 0x35000000370, - 0x37100000372, - 0x37300000374, - 0x37700000378, - 0x37b0000037e, - 0x39000000391, - 0x3ac000003cf, - 0x3d7000003d8, - 0x3d9000003da, - 0x3db000003dc, - 0x3dd000003de, - 0x3df000003e0, - 0x3e1000003e2, - 0x3e3000003e4, - 0x3e5000003e6, - 0x3e7000003e8, - 0x3e9000003ea, - 0x3eb000003ec, - 0x3ed000003ee, - 0x3ef000003f0, - 0x3f3000003f4, - 0x3f8000003f9, - 0x3fb000003fd, - 0x43000000460, - 0x46100000462, - 0x46300000464, - 0x46500000466, - 0x46700000468, - 0x4690000046a, - 0x46b0000046c, - 0x46d0000046e, - 0x46f00000470, - 0x47100000472, - 0x47300000474, - 0x47500000476, - 0x47700000478, - 0x4790000047a, - 0x47b0000047c, - 0x47d0000047e, - 0x47f00000480, - 0x48100000482, - 0x48300000488, - 0x48b0000048c, - 0x48d0000048e, - 0x48f00000490, - 0x49100000492, - 0x49300000494, - 0x49500000496, - 0x49700000498, - 0x4990000049a, - 0x49b0000049c, - 0x49d0000049e, - 0x49f000004a0, - 0x4a1000004a2, - 0x4a3000004a4, - 0x4a5000004a6, - 0x4a7000004a8, - 0x4a9000004aa, - 0x4ab000004ac, - 0x4ad000004ae, - 0x4af000004b0, - 0x4b1000004b2, - 0x4b3000004b4, - 0x4b5000004b6, - 0x4b7000004b8, - 0x4b9000004ba, - 0x4bb000004bc, - 0x4bd000004be, - 0x4bf000004c0, - 0x4c2000004c3, - 0x4c4000004c5, - 0x4c6000004c7, - 0x4c8000004c9, - 0x4ca000004cb, - 0x4cc000004cd, - 0x4ce000004d0, - 0x4d1000004d2, - 0x4d3000004d4, - 0x4d5000004d6, - 0x4d7000004d8, - 0x4d9000004da, - 0x4db000004dc, - 0x4dd000004de, - 0x4df000004e0, - 0x4e1000004e2, - 0x4e3000004e4, - 0x4e5000004e6, - 0x4e7000004e8, - 0x4e9000004ea, - 0x4eb000004ec, - 0x4ed000004ee, - 0x4ef000004f0, - 0x4f1000004f2, - 0x4f3000004f4, - 0x4f5000004f6, - 0x4f7000004f8, - 0x4f9000004fa, - 0x4fb000004fc, - 0x4fd000004fe, - 0x4ff00000500, - 0x50100000502, - 0x50300000504, - 0x50500000506, - 0x50700000508, - 0x5090000050a, - 0x50b0000050c, - 0x50d0000050e, - 0x50f00000510, - 0x51100000512, - 0x51300000514, - 0x51500000516, - 0x51700000518, - 0x5190000051a, - 0x51b0000051c, - 0x51d0000051e, - 0x51f00000520, - 0x52100000522, - 0x52300000524, - 0x52500000526, - 0x52700000528, - 0x5290000052a, - 0x52b0000052c, - 0x52d0000052e, - 0x52f00000530, - 0x5590000055a, - 0x56100000587, - 0x591000005be, - 0x5bf000005c0, - 0x5c1000005c3, - 0x5c4000005c6, - 0x5c7000005c8, - 0x5d0000005eb, - 0x5f0000005f3, - 0x6100000061b, - 0x62000000640, - 0x64100000660, - 0x66e00000675, - 0x679000006d4, - 0x6d5000006dd, - 0x6df000006e9, - 0x6ea000006f0, - 0x6fa00000700, - 0x7100000074b, - 0x74d000007b2, - 0x7c0000007f6, - 0x8000000082e, - 0x8400000085c, - 0x8600000086b, - 0x8a0000008b5, - 0x8b6000008be, - 0x8d4000008e2, - 0x8e300000958, - 0x96000000964, - 0x96600000970, - 0x97100000984, - 0x9850000098d, - 0x98f00000991, - 0x993000009a9, - 0x9aa000009b1, - 0x9b2000009b3, - 0x9b6000009ba, - 0x9bc000009c5, - 0x9c7000009c9, - 0x9cb000009cf, - 0x9d7000009d8, - 0x9e0000009e4, - 0x9e6000009f2, - 0x9fc000009fd, - 0xa0100000a04, - 0xa0500000a0b, - 0xa0f00000a11, - 0xa1300000a29, - 0xa2a00000a31, - 0xa3200000a33, - 0xa3500000a36, - 0xa3800000a3a, - 0xa3c00000a3d, - 0xa3e00000a43, - 0xa4700000a49, - 0xa4b00000a4e, - 0xa5100000a52, - 0xa5c00000a5d, - 0xa6600000a76, - 0xa8100000a84, - 0xa8500000a8e, - 0xa8f00000a92, - 0xa9300000aa9, - 0xaaa00000ab1, - 0xab200000ab4, - 0xab500000aba, - 0xabc00000ac6, - 0xac700000aca, - 0xacb00000ace, - 0xad000000ad1, - 0xae000000ae4, - 0xae600000af0, - 0xaf900000b00, - 0xb0100000b04, - 0xb0500000b0d, - 0xb0f00000b11, - 0xb1300000b29, - 0xb2a00000b31, - 0xb3200000b34, - 0xb3500000b3a, - 0xb3c00000b45, - 0xb4700000b49, - 0xb4b00000b4e, - 0xb5600000b58, - 0xb5f00000b64, - 0xb6600000b70, - 0xb7100000b72, - 0xb8200000b84, - 0xb8500000b8b, - 0xb8e00000b91, - 0xb9200000b96, - 0xb9900000b9b, - 0xb9c00000b9d, - 0xb9e00000ba0, - 0xba300000ba5, - 0xba800000bab, - 0xbae00000bba, - 0xbbe00000bc3, - 0xbc600000bc9, - 0xbca00000bce, - 0xbd000000bd1, - 0xbd700000bd8, - 0xbe600000bf0, - 0xc0000000c04, - 0xc0500000c0d, - 0xc0e00000c11, - 0xc1200000c29, - 0xc2a00000c3a, - 0xc3d00000c45, - 0xc4600000c49, - 0xc4a00000c4e, - 0xc5500000c57, - 0xc5800000c5b, - 0xc6000000c64, - 0xc6600000c70, - 0xc8000000c84, - 0xc8500000c8d, - 0xc8e00000c91, - 0xc9200000ca9, - 0xcaa00000cb4, - 0xcb500000cba, - 0xcbc00000cc5, - 0xcc600000cc9, - 0xcca00000cce, - 0xcd500000cd7, - 0xcde00000cdf, - 0xce000000ce4, - 0xce600000cf0, - 0xcf100000cf3, - 0xd0000000d04, - 0xd0500000d0d, - 0xd0e00000d11, - 0xd1200000d45, - 0xd4600000d49, - 0xd4a00000d4f, - 0xd5400000d58, - 0xd5f00000d64, - 0xd6600000d70, - 0xd7a00000d80, - 0xd8200000d84, - 0xd8500000d97, - 0xd9a00000db2, - 0xdb300000dbc, - 0xdbd00000dbe, - 0xdc000000dc7, - 0xdca00000dcb, - 0xdcf00000dd5, - 0xdd600000dd7, - 0xdd800000de0, - 0xde600000df0, - 0xdf200000df4, - 0xe0100000e33, - 0xe3400000e3b, - 0xe4000000e4f, - 0xe5000000e5a, - 0xe8100000e83, - 0xe8400000e85, - 0xe8700000e89, - 0xe8a00000e8b, - 0xe8d00000e8e, - 0xe9400000e98, - 0xe9900000ea0, - 0xea100000ea4, - 0xea500000ea6, - 0xea700000ea8, - 0xeaa00000eac, - 0xead00000eb3, - 0xeb400000eba, - 0xebb00000ebe, - 0xec000000ec5, - 0xec600000ec7, - 0xec800000ece, - 0xed000000eda, - 0xede00000ee0, - 0xf0000000f01, - 0xf0b00000f0c, - 0xf1800000f1a, - 0xf2000000f2a, - 0xf3500000f36, - 0xf3700000f38, - 0xf3900000f3a, - 0xf3e00000f43, - 0xf4400000f48, - 0xf4900000f4d, - 0xf4e00000f52, - 0xf5300000f57, - 0xf5800000f5c, - 0xf5d00000f69, - 0xf6a00000f6d, - 0xf7100000f73, - 0xf7400000f75, - 0xf7a00000f81, - 0xf8200000f85, - 0xf8600000f93, - 0xf9400000f98, - 0xf9900000f9d, - 0xf9e00000fa2, - 0xfa300000fa7, - 0xfa800000fac, - 0xfad00000fb9, - 0xfba00000fbd, - 0xfc600000fc7, - 0x10000000104a, - 0x10500000109e, - 0x10d0000010fb, - 0x10fd00001100, - 0x120000001249, - 0x124a0000124e, - 0x125000001257, - 0x125800001259, - 0x125a0000125e, - 0x126000001289, - 0x128a0000128e, - 0x1290000012b1, - 0x12b2000012b6, - 0x12b8000012bf, - 0x12c0000012c1, - 0x12c2000012c6, - 0x12c8000012d7, - 0x12d800001311, - 0x131200001316, - 0x13180000135b, - 0x135d00001360, - 0x138000001390, - 0x13a0000013f6, - 0x14010000166d, - 0x166f00001680, - 0x16810000169b, - 0x16a0000016eb, - 0x16f1000016f9, - 0x17000000170d, - 0x170e00001715, - 0x172000001735, - 0x174000001754, - 0x17600000176d, - 0x176e00001771, - 0x177200001774, - 0x1780000017b4, - 0x17b6000017d4, - 0x17d7000017d8, - 0x17dc000017de, - 0x17e0000017ea, - 0x18100000181a, - 0x182000001878, - 0x1880000018ab, - 0x18b0000018f6, - 0x19000000191f, - 0x19200000192c, - 0x19300000193c, - 0x19460000196e, - 0x197000001975, - 0x1980000019ac, - 0x19b0000019ca, - 0x19d0000019da, - 0x1a0000001a1c, - 0x1a2000001a5f, - 0x1a6000001a7d, - 0x1a7f00001a8a, - 0x1a9000001a9a, - 0x1aa700001aa8, - 0x1ab000001abe, - 0x1b0000001b4c, - 0x1b5000001b5a, - 0x1b6b00001b74, - 0x1b8000001bf4, - 0x1c0000001c38, - 0x1c4000001c4a, - 0x1c4d00001c7e, - 0x1cd000001cd3, - 0x1cd400001cfa, - 0x1d0000001d2c, - 0x1d2f00001d30, - 0x1d3b00001d3c, - 0x1d4e00001d4f, - 0x1d6b00001d78, - 0x1d7900001d9b, - 0x1dc000001dfa, - 0x1dfb00001e00, - 0x1e0100001e02, - 0x1e0300001e04, - 0x1e0500001e06, - 0x1e0700001e08, - 0x1e0900001e0a, - 0x1e0b00001e0c, - 0x1e0d00001e0e, - 0x1e0f00001e10, - 0x1e1100001e12, - 0x1e1300001e14, - 0x1e1500001e16, - 0x1e1700001e18, - 0x1e1900001e1a, - 0x1e1b00001e1c, - 0x1e1d00001e1e, - 0x1e1f00001e20, - 0x1e2100001e22, - 0x1e2300001e24, - 0x1e2500001e26, - 0x1e2700001e28, - 0x1e2900001e2a, - 0x1e2b00001e2c, - 0x1e2d00001e2e, - 0x1e2f00001e30, - 0x1e3100001e32, - 0x1e3300001e34, - 0x1e3500001e36, - 0x1e3700001e38, - 0x1e3900001e3a, - 0x1e3b00001e3c, - 0x1e3d00001e3e, - 0x1e3f00001e40, - 0x1e4100001e42, - 0x1e4300001e44, - 0x1e4500001e46, - 0x1e4700001e48, - 0x1e4900001e4a, - 0x1e4b00001e4c, - 0x1e4d00001e4e, - 0x1e4f00001e50, - 0x1e5100001e52, - 0x1e5300001e54, - 0x1e5500001e56, - 0x1e5700001e58, - 0x1e5900001e5a, - 0x1e5b00001e5c, - 0x1e5d00001e5e, - 0x1e5f00001e60, - 0x1e6100001e62, - 0x1e6300001e64, - 0x1e6500001e66, - 0x1e6700001e68, - 0x1e6900001e6a, - 0x1e6b00001e6c, - 0x1e6d00001e6e, - 0x1e6f00001e70, - 0x1e7100001e72, - 0x1e7300001e74, - 0x1e7500001e76, - 0x1e7700001e78, - 0x1e7900001e7a, - 0x1e7b00001e7c, - 0x1e7d00001e7e, - 0x1e7f00001e80, - 0x1e8100001e82, - 0x1e8300001e84, - 0x1e8500001e86, - 0x1e8700001e88, - 0x1e8900001e8a, - 0x1e8b00001e8c, - 0x1e8d00001e8e, - 0x1e8f00001e90, - 0x1e9100001e92, - 0x1e9300001e94, - 0x1e9500001e9a, - 0x1e9c00001e9e, - 0x1e9f00001ea0, - 0x1ea100001ea2, - 0x1ea300001ea4, - 0x1ea500001ea6, - 0x1ea700001ea8, - 0x1ea900001eaa, - 0x1eab00001eac, - 0x1ead00001eae, - 0x1eaf00001eb0, - 0x1eb100001eb2, - 0x1eb300001eb4, - 0x1eb500001eb6, - 0x1eb700001eb8, - 0x1eb900001eba, - 0x1ebb00001ebc, - 0x1ebd00001ebe, - 0x1ebf00001ec0, - 0x1ec100001ec2, - 0x1ec300001ec4, - 0x1ec500001ec6, - 0x1ec700001ec8, - 0x1ec900001eca, - 0x1ecb00001ecc, - 0x1ecd00001ece, - 0x1ecf00001ed0, - 0x1ed100001ed2, - 0x1ed300001ed4, - 0x1ed500001ed6, - 0x1ed700001ed8, - 0x1ed900001eda, - 0x1edb00001edc, - 0x1edd00001ede, - 0x1edf00001ee0, - 0x1ee100001ee2, - 0x1ee300001ee4, - 0x1ee500001ee6, - 0x1ee700001ee8, - 0x1ee900001eea, - 0x1eeb00001eec, - 0x1eed00001eee, - 0x1eef00001ef0, - 0x1ef100001ef2, - 0x1ef300001ef4, - 0x1ef500001ef6, - 0x1ef700001ef8, - 0x1ef900001efa, - 0x1efb00001efc, - 0x1efd00001efe, - 0x1eff00001f08, - 0x1f1000001f16, - 0x1f2000001f28, - 0x1f3000001f38, - 0x1f4000001f46, - 0x1f5000001f58, - 0x1f6000001f68, - 0x1f7000001f71, - 0x1f7200001f73, - 0x1f7400001f75, - 0x1f7600001f77, - 0x1f7800001f79, - 0x1f7a00001f7b, - 0x1f7c00001f7d, - 0x1fb000001fb2, - 0x1fb600001fb7, - 0x1fc600001fc7, - 0x1fd000001fd3, - 0x1fd600001fd8, - 0x1fe000001fe3, - 0x1fe400001fe8, - 0x1ff600001ff7, - 0x214e0000214f, - 0x218400002185, - 0x2c3000002c5f, - 0x2c6100002c62, - 0x2c6500002c67, - 0x2c6800002c69, - 0x2c6a00002c6b, - 0x2c6c00002c6d, - 0x2c7100002c72, - 0x2c7300002c75, - 0x2c7600002c7c, - 0x2c8100002c82, - 0x2c8300002c84, - 0x2c8500002c86, - 0x2c8700002c88, - 0x2c8900002c8a, - 0x2c8b00002c8c, - 0x2c8d00002c8e, - 0x2c8f00002c90, - 0x2c9100002c92, - 0x2c9300002c94, - 0x2c9500002c96, - 0x2c9700002c98, - 0x2c9900002c9a, - 0x2c9b00002c9c, - 0x2c9d00002c9e, - 0x2c9f00002ca0, - 0x2ca100002ca2, - 0x2ca300002ca4, - 0x2ca500002ca6, - 0x2ca700002ca8, - 0x2ca900002caa, - 0x2cab00002cac, - 0x2cad00002cae, - 0x2caf00002cb0, - 0x2cb100002cb2, - 0x2cb300002cb4, - 0x2cb500002cb6, - 0x2cb700002cb8, - 0x2cb900002cba, - 0x2cbb00002cbc, - 0x2cbd00002cbe, - 0x2cbf00002cc0, - 0x2cc100002cc2, - 0x2cc300002cc4, - 0x2cc500002cc6, - 0x2cc700002cc8, - 0x2cc900002cca, - 0x2ccb00002ccc, - 0x2ccd00002cce, - 0x2ccf00002cd0, - 0x2cd100002cd2, - 0x2cd300002cd4, - 0x2cd500002cd6, - 0x2cd700002cd8, - 0x2cd900002cda, - 0x2cdb00002cdc, - 0x2cdd00002cde, - 0x2cdf00002ce0, - 0x2ce100002ce2, - 0x2ce300002ce5, - 0x2cec00002ced, - 0x2cee00002cf2, - 0x2cf300002cf4, - 0x2d0000002d26, - 0x2d2700002d28, - 0x2d2d00002d2e, - 0x2d3000002d68, - 0x2d7f00002d97, - 0x2da000002da7, - 0x2da800002daf, - 0x2db000002db7, - 0x2db800002dbf, - 0x2dc000002dc7, - 0x2dc800002dcf, - 0x2dd000002dd7, - 0x2dd800002ddf, - 0x2de000002e00, - 0x2e2f00002e30, - 0x300500003008, - 0x302a0000302e, - 0x303c0000303d, - 0x304100003097, - 0x30990000309b, - 0x309d0000309f, - 0x30a1000030fb, - 0x30fc000030ff, - 0x31050000312f, - 0x31a0000031bb, - 0x31f000003200, - 0x340000004db6, - 0x4e0000009feb, - 0xa0000000a48d, - 0xa4d00000a4fe, - 0xa5000000a60d, - 0xa6100000a62c, - 0xa6410000a642, - 0xa6430000a644, - 0xa6450000a646, - 0xa6470000a648, - 0xa6490000a64a, - 0xa64b0000a64c, - 0xa64d0000a64e, - 0xa64f0000a650, - 0xa6510000a652, - 0xa6530000a654, - 0xa6550000a656, - 0xa6570000a658, - 0xa6590000a65a, - 0xa65b0000a65c, - 0xa65d0000a65e, - 0xa65f0000a660, - 0xa6610000a662, - 0xa6630000a664, - 0xa6650000a666, - 0xa6670000a668, - 0xa6690000a66a, - 0xa66b0000a66c, - 0xa66d0000a670, - 0xa6740000a67e, - 0xa67f0000a680, - 0xa6810000a682, - 0xa6830000a684, - 0xa6850000a686, - 0xa6870000a688, - 0xa6890000a68a, - 0xa68b0000a68c, - 0xa68d0000a68e, - 0xa68f0000a690, - 0xa6910000a692, - 0xa6930000a694, - 0xa6950000a696, - 0xa6970000a698, - 0xa6990000a69a, - 0xa69b0000a69c, - 0xa69e0000a6e6, - 0xa6f00000a6f2, - 0xa7170000a720, - 0xa7230000a724, - 0xa7250000a726, - 0xa7270000a728, - 0xa7290000a72a, - 0xa72b0000a72c, - 0xa72d0000a72e, - 0xa72f0000a732, - 0xa7330000a734, - 0xa7350000a736, - 0xa7370000a738, - 0xa7390000a73a, - 0xa73b0000a73c, - 0xa73d0000a73e, - 0xa73f0000a740, - 0xa7410000a742, - 0xa7430000a744, - 0xa7450000a746, - 0xa7470000a748, - 0xa7490000a74a, - 0xa74b0000a74c, - 0xa74d0000a74e, - 0xa74f0000a750, - 0xa7510000a752, - 0xa7530000a754, - 0xa7550000a756, - 0xa7570000a758, - 0xa7590000a75a, - 0xa75b0000a75c, - 0xa75d0000a75e, - 0xa75f0000a760, - 0xa7610000a762, - 0xa7630000a764, - 0xa7650000a766, - 0xa7670000a768, - 0xa7690000a76a, - 0xa76b0000a76c, - 0xa76d0000a76e, - 0xa76f0000a770, - 0xa7710000a779, - 0xa77a0000a77b, - 0xa77c0000a77d, - 0xa77f0000a780, - 0xa7810000a782, - 0xa7830000a784, - 0xa7850000a786, - 0xa7870000a789, - 0xa78c0000a78d, - 0xa78e0000a790, - 0xa7910000a792, - 0xa7930000a796, - 0xa7970000a798, - 0xa7990000a79a, - 0xa79b0000a79c, - 0xa79d0000a79e, - 0xa79f0000a7a0, - 0xa7a10000a7a2, - 0xa7a30000a7a4, - 0xa7a50000a7a6, - 0xa7a70000a7a8, - 0xa7a90000a7aa, - 0xa7b50000a7b6, - 0xa7b70000a7b8, - 0xa7f70000a7f8, - 0xa7fa0000a828, - 0xa8400000a874, - 0xa8800000a8c6, - 0xa8d00000a8da, - 0xa8e00000a8f8, - 0xa8fb0000a8fc, - 0xa8fd0000a8fe, - 0xa9000000a92e, - 0xa9300000a954, - 0xa9800000a9c1, - 0xa9cf0000a9da, - 0xa9e00000a9ff, - 0xaa000000aa37, - 0xaa400000aa4e, - 0xaa500000aa5a, - 0xaa600000aa77, - 0xaa7a0000aac3, - 0xaadb0000aade, - 0xaae00000aaf0, - 0xaaf20000aaf7, - 0xab010000ab07, - 0xab090000ab0f, - 0xab110000ab17, - 0xab200000ab27, - 0xab280000ab2f, - 0xab300000ab5b, - 0xab600000ab66, - 0xabc00000abeb, - 0xabec0000abee, - 0xabf00000abfa, - 0xac000000d7a4, - 0xfa0e0000fa10, - 0xfa110000fa12, - 0xfa130000fa15, - 0xfa1f0000fa20, - 0xfa210000fa22, - 0xfa230000fa25, - 0xfa270000fa2a, - 0xfb1e0000fb1f, - 0xfe200000fe30, - 0xfe730000fe74, - 0x100000001000c, - 0x1000d00010027, - 0x100280001003b, - 0x1003c0001003e, - 0x1003f0001004e, - 0x100500001005e, - 0x10080000100fb, - 0x101fd000101fe, - 0x102800001029d, - 0x102a0000102d1, - 0x102e0000102e1, - 0x1030000010320, - 0x1032d00010341, - 0x103420001034a, - 0x103500001037b, - 0x103800001039e, - 0x103a0000103c4, - 0x103c8000103d0, - 0x104280001049e, - 0x104a0000104aa, - 0x104d8000104fc, - 0x1050000010528, - 0x1053000010564, - 0x1060000010737, - 0x1074000010756, - 0x1076000010768, - 0x1080000010806, - 0x1080800010809, - 0x1080a00010836, - 0x1083700010839, - 0x1083c0001083d, - 0x1083f00010856, - 0x1086000010877, - 0x108800001089f, - 0x108e0000108f3, - 0x108f4000108f6, - 0x1090000010916, - 0x109200001093a, - 0x10980000109b8, - 0x109be000109c0, - 0x10a0000010a04, - 0x10a0500010a07, - 0x10a0c00010a14, - 0x10a1500010a18, - 0x10a1900010a34, - 0x10a3800010a3b, - 0x10a3f00010a40, - 0x10a6000010a7d, - 0x10a8000010a9d, - 0x10ac000010ac8, - 0x10ac900010ae7, - 0x10b0000010b36, - 0x10b4000010b56, - 0x10b6000010b73, - 0x10b8000010b92, - 0x10c0000010c49, - 0x10cc000010cf3, - 0x1100000011047, - 0x1106600011070, - 0x1107f000110bb, - 0x110d0000110e9, - 0x110f0000110fa, - 0x1110000011135, - 0x1113600011140, - 0x1115000011174, - 0x1117600011177, - 0x11180000111c5, - 0x111ca000111cd, - 0x111d0000111db, - 0x111dc000111dd, - 0x1120000011212, - 0x1121300011238, - 0x1123e0001123f, - 0x1128000011287, - 0x1128800011289, - 0x1128a0001128e, - 0x1128f0001129e, - 0x1129f000112a9, - 0x112b0000112eb, - 0x112f0000112fa, - 0x1130000011304, - 0x113050001130d, - 0x1130f00011311, - 0x1131300011329, - 0x1132a00011331, - 0x1133200011334, - 0x113350001133a, - 0x1133c00011345, - 0x1134700011349, - 0x1134b0001134e, - 0x1135000011351, - 0x1135700011358, - 0x1135d00011364, - 0x113660001136d, - 0x1137000011375, - 0x114000001144b, - 0x114500001145a, - 0x11480000114c6, - 0x114c7000114c8, - 0x114d0000114da, - 0x11580000115b6, - 0x115b8000115c1, - 0x115d8000115de, - 0x1160000011641, - 0x1164400011645, - 0x116500001165a, - 0x11680000116b8, - 0x116c0000116ca, - 0x117000001171a, - 0x1171d0001172c, - 0x117300001173a, - 0x118c0000118ea, - 0x118ff00011900, - 0x11a0000011a3f, - 0x11a4700011a48, - 0x11a5000011a84, - 0x11a8600011a9a, - 0x11ac000011af9, - 0x11c0000011c09, - 0x11c0a00011c37, - 0x11c3800011c41, - 0x11c5000011c5a, - 0x11c7200011c90, - 0x11c9200011ca8, - 0x11ca900011cb7, - 0x11d0000011d07, - 0x11d0800011d0a, - 0x11d0b00011d37, - 0x11d3a00011d3b, - 0x11d3c00011d3e, - 0x11d3f00011d48, - 0x11d5000011d5a, - 0x120000001239a, - 0x1248000012544, - 0x130000001342f, - 0x1440000014647, - 0x1680000016a39, - 0x16a4000016a5f, - 0x16a6000016a6a, - 0x16ad000016aee, - 0x16af000016af5, - 0x16b0000016b37, - 0x16b4000016b44, - 0x16b5000016b5a, - 0x16b6300016b78, - 0x16b7d00016b90, - 0x16f0000016f45, - 0x16f5000016f7f, - 0x16f8f00016fa0, - 0x16fe000016fe2, - 0x17000000187ed, - 0x1880000018af3, - 0x1b0000001b11f, - 0x1b1700001b2fc, - 0x1bc000001bc6b, - 0x1bc700001bc7d, - 0x1bc800001bc89, - 0x1bc900001bc9a, - 0x1bc9d0001bc9f, - 0x1da000001da37, - 0x1da3b0001da6d, - 0x1da750001da76, - 0x1da840001da85, - 0x1da9b0001daa0, - 0x1daa10001dab0, - 0x1e0000001e007, - 0x1e0080001e019, - 0x1e01b0001e022, - 0x1e0230001e025, - 0x1e0260001e02b, - 0x1e8000001e8c5, - 0x1e8d00001e8d7, - 0x1e9220001e94b, - 0x1e9500001e95a, - 0x200000002a6d7, - 0x2a7000002b735, - 0x2b7400002b81e, - 0x2b8200002cea2, - 0x2ceb00002ebe1, - ), - 'CONTEXTJ': ( - 0x200c0000200e, - ), - 'CONTEXTO': ( - 0xb7000000b8, - 0x37500000376, - 0x5f3000005f5, - 0x6600000066a, - 0x6f0000006fa, - 0x30fb000030fc, - ), -} diff --git a/venv/lib/python3.6/site-packages/idna/intranges.py b/venv/lib/python3.6/site-packages/idna/intranges.py deleted file mode 100755 index fa8a735..0000000 --- a/venv/lib/python3.6/site-packages/idna/intranges.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Given a list of integers, made up of (hopefully) a small number of long runs -of consecutive integers, compute a representation of the form -((start1, end1), (start2, end2) ...). Then answer the question "was x present -in the original list?" in time O(log(# runs)). -""" - -import bisect - -def intranges_from_list(list_): - """Represent a list of integers as a sequence of ranges: - ((start_0, end_0), (start_1, end_1), ...), such that the original - integers are exactly those x such that start_i <= x < end_i for some i. - - Ranges are encoded as single integers (start << 32 | end), not as tuples. - """ - - sorted_list = sorted(list_) - ranges = [] - last_write = -1 - for i in range(len(sorted_list)): - if i+1 < len(sorted_list): - if sorted_list[i] == sorted_list[i+1]-1: - continue - current_range = sorted_list[last_write+1:i+1] - ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) - last_write = i - - return tuple(ranges) - -def _encode_range(start, end): - return (start << 32) | end - -def _decode_range(r): - return (r >> 32), (r & ((1 << 32) - 1)) - - -def intranges_contain(int_, ranges): - """Determine if `int_` falls into one of the ranges in `ranges`.""" - tuple_ = _encode_range(int_, 0) - pos = bisect.bisect_left(ranges, tuple_) - # we could be immediately ahead of a tuple (start, end) - # with start < int_ <= end - if pos > 0: - left, right = _decode_range(ranges[pos-1]) - if left <= int_ < right: - return True - # or we could be immediately behind a tuple (int_, end) - if pos < len(ranges): - left, _ = _decode_range(ranges[pos]) - if left == int_: - return True - return False diff --git a/venv/lib/python3.6/site-packages/idna/package_data.py b/venv/lib/python3.6/site-packages/idna/package_data.py deleted file mode 100755 index 39c192b..0000000 --- a/venv/lib/python3.6/site-packages/idna/package_data.py +++ /dev/null @@ -1,2 +0,0 @@ -__version__ = '2.7' - diff --git a/venv/lib/python3.6/site-packages/idna/uts46data.py b/venv/lib/python3.6/site-packages/idna/uts46data.py deleted file mode 100755 index 79731cb..0000000 --- a/venv/lib/python3.6/site-packages/idna/uts46data.py +++ /dev/null @@ -1,8179 +0,0 @@ -# This file is automatically generated by tools/idna-data -# vim: set fileencoding=utf-8 : - -"""IDNA Mapping Table from UTS46.""" - - -__version__ = "10.0.0" -def _seg_0(): - return [ - (0x0, '3'), - (0x1, '3'), - (0x2, '3'), - (0x3, '3'), - (0x4, '3'), - (0x5, '3'), - (0x6, '3'), - (0x7, '3'), - (0x8, '3'), - (0x9, '3'), - (0xA, '3'), - (0xB, '3'), - (0xC, '3'), - (0xD, '3'), - (0xE, '3'), - (0xF, '3'), - (0x10, '3'), - (0x11, '3'), - (0x12, '3'), - (0x13, '3'), - (0x14, '3'), - (0x15, '3'), - (0x16, '3'), - (0x17, '3'), - (0x18, '3'), - (0x19, '3'), - (0x1A, '3'), - (0x1B, '3'), - (0x1C, '3'), - (0x1D, '3'), - (0x1E, '3'), - (0x1F, '3'), - (0x20, '3'), - (0x21, '3'), - (0x22, '3'), - (0x23, '3'), - (0x24, '3'), - (0x25, '3'), - (0x26, '3'), - (0x27, '3'), - (0x28, '3'), - (0x29, '3'), - (0x2A, '3'), - (0x2B, '3'), - (0x2C, '3'), - (0x2D, 'V'), - (0x2E, 'V'), - (0x2F, '3'), - (0x30, 'V'), - (0x31, 'V'), - (0x32, 'V'), - (0x33, 'V'), - (0x34, 'V'), - (0x35, 'V'), - (0x36, 'V'), - (0x37, 'V'), - (0x38, 'V'), - (0x39, 'V'), - (0x3A, '3'), - (0x3B, '3'), - (0x3C, '3'), - (0x3D, '3'), - (0x3E, '3'), - (0x3F, '3'), - (0x40, '3'), - (0x41, 'M', u'a'), - (0x42, 'M', u'b'), - (0x43, 'M', u'c'), - (0x44, 'M', u'd'), - (0x45, 'M', u'e'), - (0x46, 'M', u'f'), - (0x47, 'M', u'g'), - (0x48, 'M', u'h'), - (0x49, 'M', u'i'), - (0x4A, 'M', u'j'), - (0x4B, 'M', u'k'), - (0x4C, 'M', u'l'), - (0x4D, 'M', u'm'), - (0x4E, 'M', u'n'), - (0x4F, 'M', u'o'), - (0x50, 'M', u'p'), - (0x51, 'M', u'q'), - (0x52, 'M', u'r'), - (0x53, 'M', u's'), - (0x54, 'M', u't'), - (0x55, 'M', u'u'), - (0x56, 'M', u'v'), - (0x57, 'M', u'w'), - (0x58, 'M', u'x'), - (0x59, 'M', u'y'), - (0x5A, 'M', u'z'), - (0x5B, '3'), - (0x5C, '3'), - (0x5D, '3'), - (0x5E, '3'), - (0x5F, '3'), - (0x60, '3'), - (0x61, 'V'), - (0x62, 'V'), - (0x63, 'V'), - ] - -def _seg_1(): - return [ - (0x64, 'V'), - (0x65, 'V'), - (0x66, 'V'), - (0x67, 'V'), - (0x68, 'V'), - (0x69, 'V'), - (0x6A, 'V'), - (0x6B, 'V'), - (0x6C, 'V'), - (0x6D, 'V'), - (0x6E, 'V'), - (0x6F, 'V'), - (0x70, 'V'), - (0x71, 'V'), - (0x72, 'V'), - (0x73, 'V'), - (0x74, 'V'), - (0x75, 'V'), - (0x76, 'V'), - (0x77, 'V'), - (0x78, 'V'), - (0x79, 'V'), - (0x7A, 'V'), - (0x7B, '3'), - (0x7C, '3'), - (0x7D, '3'), - (0x7E, '3'), - (0x7F, '3'), - (0x80, 'X'), - (0x81, 'X'), - (0x82, 'X'), - (0x83, 'X'), - (0x84, 'X'), - (0x85, 'X'), - (0x86, 'X'), - (0x87, 'X'), - (0x88, 'X'), - (0x89, 'X'), - (0x8A, 'X'), - (0x8B, 'X'), - (0x8C, 'X'), - (0x8D, 'X'), - (0x8E, 'X'), - (0x8F, 'X'), - (0x90, 'X'), - (0x91, 'X'), - (0x92, 'X'), - (0x93, 'X'), - (0x94, 'X'), - (0x95, 'X'), - (0x96, 'X'), - (0x97, 'X'), - (0x98, 'X'), - (0x99, 'X'), - (0x9A, 'X'), - (0x9B, 'X'), - (0x9C, 'X'), - (0x9D, 'X'), - (0x9E, 'X'), - (0x9F, 'X'), - (0xA0, '3', u' '), - (0xA1, 'V'), - (0xA2, 'V'), - (0xA3, 'V'), - (0xA4, 'V'), - (0xA5, 'V'), - (0xA6, 'V'), - (0xA7, 'V'), - (0xA8, '3', u' ̈'), - (0xA9, 'V'), - (0xAA, 'M', u'a'), - (0xAB, 'V'), - (0xAC, 'V'), - (0xAD, 'I'), - (0xAE, 'V'), - (0xAF, '3', u' ̄'), - (0xB0, 'V'), - (0xB1, 'V'), - (0xB2, 'M', u'2'), - (0xB3, 'M', u'3'), - (0xB4, '3', u' ́'), - (0xB5, 'M', u'μ'), - (0xB6, 'V'), - (0xB7, 'V'), - (0xB8, '3', u' ̧'), - (0xB9, 'M', u'1'), - (0xBA, 'M', u'o'), - (0xBB, 'V'), - (0xBC, 'M', u'1⁄4'), - (0xBD, 'M', u'1⁄2'), - (0xBE, 'M', u'3⁄4'), - (0xBF, 'V'), - (0xC0, 'M', u'à'), - (0xC1, 'M', u'á'), - (0xC2, 'M', u'â'), - (0xC3, 'M', u'ã'), - (0xC4, 'M', u'ä'), - (0xC5, 'M', u'å'), - (0xC6, 'M', u'æ'), - (0xC7, 'M', u'ç'), - ] - -def _seg_2(): - return [ - (0xC8, 'M', u'è'), - (0xC9, 'M', u'é'), - (0xCA, 'M', u'ê'), - (0xCB, 'M', u'ë'), - (0xCC, 'M', u'ì'), - (0xCD, 'M', u'í'), - (0xCE, 'M', u'î'), - (0xCF, 'M', u'ï'), - (0xD0, 'M', u'ð'), - (0xD1, 'M', u'ñ'), - (0xD2, 'M', u'ò'), - (0xD3, 'M', u'ó'), - (0xD4, 'M', u'ô'), - (0xD5, 'M', u'õ'), - (0xD6, 'M', u'ö'), - (0xD7, 'V'), - (0xD8, 'M', u'ø'), - (0xD9, 'M', u'ù'), - (0xDA, 'M', u'ú'), - (0xDB, 'M', u'û'), - (0xDC, 'M', u'ü'), - (0xDD, 'M', u'ý'), - (0xDE, 'M', u'þ'), - (0xDF, 'D', u'ss'), - (0xE0, 'V'), - (0xE1, 'V'), - (0xE2, 'V'), - (0xE3, 'V'), - (0xE4, 'V'), - (0xE5, 'V'), - (0xE6, 'V'), - (0xE7, 'V'), - (0xE8, 'V'), - (0xE9, 'V'), - (0xEA, 'V'), - (0xEB, 'V'), - (0xEC, 'V'), - (0xED, 'V'), - (0xEE, 'V'), - (0xEF, 'V'), - (0xF0, 'V'), - (0xF1, 'V'), - (0xF2, 'V'), - (0xF3, 'V'), - (0xF4, 'V'), - (0xF5, 'V'), - (0xF6, 'V'), - (0xF7, 'V'), - (0xF8, 'V'), - (0xF9, 'V'), - (0xFA, 'V'), - (0xFB, 'V'), - (0xFC, 'V'), - (0xFD, 'V'), - (0xFE, 'V'), - (0xFF, 'V'), - (0x100, 'M', u'ā'), - (0x101, 'V'), - (0x102, 'M', u'ă'), - (0x103, 'V'), - (0x104, 'M', u'ą'), - (0x105, 'V'), - (0x106, 'M', u'ć'), - (0x107, 'V'), - (0x108, 'M', u'ĉ'), - (0x109, 'V'), - (0x10A, 'M', u'ċ'), - (0x10B, 'V'), - (0x10C, 'M', u'č'), - (0x10D, 'V'), - (0x10E, 'M', u'ď'), - (0x10F, 'V'), - (0x110, 'M', u'đ'), - (0x111, 'V'), - (0x112, 'M', u'ē'), - (0x113, 'V'), - (0x114, 'M', u'ĕ'), - (0x115, 'V'), - (0x116, 'M', u'ė'), - (0x117, 'V'), - (0x118, 'M', u'ę'), - (0x119, 'V'), - (0x11A, 'M', u'ě'), - (0x11B, 'V'), - (0x11C, 'M', u'ĝ'), - (0x11D, 'V'), - (0x11E, 'M', u'ğ'), - (0x11F, 'V'), - (0x120, 'M', u'ġ'), - (0x121, 'V'), - (0x122, 'M', u'ģ'), - (0x123, 'V'), - (0x124, 'M', u'ĥ'), - (0x125, 'V'), - (0x126, 'M', u'ħ'), - (0x127, 'V'), - (0x128, 'M', u'ĩ'), - (0x129, 'V'), - (0x12A, 'M', u'ī'), - (0x12B, 'V'), - ] - -def _seg_3(): - return [ - (0x12C, 'M', u'ĭ'), - (0x12D, 'V'), - (0x12E, 'M', u'į'), - (0x12F, 'V'), - (0x130, 'M', u'i̇'), - (0x131, 'V'), - (0x132, 'M', u'ij'), - (0x134, 'M', u'ĵ'), - (0x135, 'V'), - (0x136, 'M', u'ķ'), - (0x137, 'V'), - (0x139, 'M', u'ĺ'), - (0x13A, 'V'), - (0x13B, 'M', u'ļ'), - (0x13C, 'V'), - (0x13D, 'M', u'ľ'), - (0x13E, 'V'), - (0x13F, 'M', u'l·'), - (0x141, 'M', u'ł'), - (0x142, 'V'), - (0x143, 'M', u'ń'), - (0x144, 'V'), - (0x145, 'M', u'ņ'), - (0x146, 'V'), - (0x147, 'M', u'ň'), - (0x148, 'V'), - (0x149, 'M', u'ʼn'), - (0x14A, 'M', u'ŋ'), - (0x14B, 'V'), - (0x14C, 'M', u'ō'), - (0x14D, 'V'), - (0x14E, 'M', u'ŏ'), - (0x14F, 'V'), - (0x150, 'M', u'ő'), - (0x151, 'V'), - (0x152, 'M', u'œ'), - (0x153, 'V'), - (0x154, 'M', u'ŕ'), - (0x155, 'V'), - (0x156, 'M', u'ŗ'), - (0x157, 'V'), - (0x158, 'M', u'ř'), - (0x159, 'V'), - (0x15A, 'M', u'ś'), - (0x15B, 'V'), - (0x15C, 'M', u'ŝ'), - (0x15D, 'V'), - (0x15E, 'M', u'ş'), - (0x15F, 'V'), - (0x160, 'M', u'š'), - (0x161, 'V'), - (0x162, 'M', u'ţ'), - (0x163, 'V'), - (0x164, 'M', u'ť'), - (0x165, 'V'), - (0x166, 'M', u'ŧ'), - (0x167, 'V'), - (0x168, 'M', u'ũ'), - (0x169, 'V'), - (0x16A, 'M', u'ū'), - (0x16B, 'V'), - (0x16C, 'M', u'ŭ'), - (0x16D, 'V'), - (0x16E, 'M', u'ů'), - (0x16F, 'V'), - (0x170, 'M', u'ű'), - (0x171, 'V'), - (0x172, 'M', u'ų'), - (0x173, 'V'), - (0x174, 'M', u'ŵ'), - (0x175, 'V'), - (0x176, 'M', u'ŷ'), - (0x177, 'V'), - (0x178, 'M', u'ÿ'), - (0x179, 'M', u'ź'), - (0x17A, 'V'), - (0x17B, 'M', u'ż'), - (0x17C, 'V'), - (0x17D, 'M', u'ž'), - (0x17E, 'V'), - (0x17F, 'M', u's'), - (0x180, 'V'), - (0x181, 'M', u'ɓ'), - (0x182, 'M', u'ƃ'), - (0x183, 'V'), - (0x184, 'M', u'ƅ'), - (0x185, 'V'), - (0x186, 'M', u'ɔ'), - (0x187, 'M', u'ƈ'), - (0x188, 'V'), - (0x189, 'M', u'ɖ'), - (0x18A, 'M', u'ɗ'), - (0x18B, 'M', u'ƌ'), - (0x18C, 'V'), - (0x18E, 'M', u'ǝ'), - (0x18F, 'M', u'ə'), - (0x190, 'M', u'ɛ'), - (0x191, 'M', u'ƒ'), - (0x192, 'V'), - (0x193, 'M', u'ɠ'), - ] - -def _seg_4(): - return [ - (0x194, 'M', u'ɣ'), - (0x195, 'V'), - (0x196, 'M', u'ɩ'), - (0x197, 'M', u'ɨ'), - (0x198, 'M', u'ƙ'), - (0x199, 'V'), - (0x19C, 'M', u'ɯ'), - (0x19D, 'M', u'ɲ'), - (0x19E, 'V'), - (0x19F, 'M', u'ɵ'), - (0x1A0, 'M', u'ơ'), - (0x1A1, 'V'), - (0x1A2, 'M', u'ƣ'), - (0x1A3, 'V'), - (0x1A4, 'M', u'ƥ'), - (0x1A5, 'V'), - (0x1A6, 'M', u'ʀ'), - (0x1A7, 'M', u'ƨ'), - (0x1A8, 'V'), - (0x1A9, 'M', u'ʃ'), - (0x1AA, 'V'), - (0x1AC, 'M', u'ƭ'), - (0x1AD, 'V'), - (0x1AE, 'M', u'ʈ'), - (0x1AF, 'M', u'ư'), - (0x1B0, 'V'), - (0x1B1, 'M', u'ʊ'), - (0x1B2, 'M', u'ʋ'), - (0x1B3, 'M', u'ƴ'), - (0x1B4, 'V'), - (0x1B5, 'M', u'ƶ'), - (0x1B6, 'V'), - (0x1B7, 'M', u'ʒ'), - (0x1B8, 'M', u'ƹ'), - (0x1B9, 'V'), - (0x1BC, 'M', u'ƽ'), - (0x1BD, 'V'), - (0x1C4, 'M', u'dž'), - (0x1C7, 'M', u'lj'), - (0x1CA, 'M', u'nj'), - (0x1CD, 'M', u'ǎ'), - (0x1CE, 'V'), - (0x1CF, 'M', u'ǐ'), - (0x1D0, 'V'), - (0x1D1, 'M', u'ǒ'), - (0x1D2, 'V'), - (0x1D3, 'M', u'ǔ'), - (0x1D4, 'V'), - (0x1D5, 'M', u'ǖ'), - (0x1D6, 'V'), - (0x1D7, 'M', u'ǘ'), - (0x1D8, 'V'), - (0x1D9, 'M', u'ǚ'), - (0x1DA, 'V'), - (0x1DB, 'M', u'ǜ'), - (0x1DC, 'V'), - (0x1DE, 'M', u'ǟ'), - (0x1DF, 'V'), - (0x1E0, 'M', u'ǡ'), - (0x1E1, 'V'), - (0x1E2, 'M', u'ǣ'), - (0x1E3, 'V'), - (0x1E4, 'M', u'ǥ'), - (0x1E5, 'V'), - (0x1E6, 'M', u'ǧ'), - (0x1E7, 'V'), - (0x1E8, 'M', u'ǩ'), - (0x1E9, 'V'), - (0x1EA, 'M', u'ǫ'), - (0x1EB, 'V'), - (0x1EC, 'M', u'ǭ'), - (0x1ED, 'V'), - (0x1EE, 'M', u'ǯ'), - (0x1EF, 'V'), - (0x1F1, 'M', u'dz'), - (0x1F4, 'M', u'ǵ'), - (0x1F5, 'V'), - (0x1F6, 'M', u'ƕ'), - (0x1F7, 'M', u'ƿ'), - (0x1F8, 'M', u'ǹ'), - (0x1F9, 'V'), - (0x1FA, 'M', u'ǻ'), - (0x1FB, 'V'), - (0x1FC, 'M', u'ǽ'), - (0x1FD, 'V'), - (0x1FE, 'M', u'ǿ'), - (0x1FF, 'V'), - (0x200, 'M', u'ȁ'), - (0x201, 'V'), - (0x202, 'M', u'ȃ'), - (0x203, 'V'), - (0x204, 'M', u'ȅ'), - (0x205, 'V'), - (0x206, 'M', u'ȇ'), - (0x207, 'V'), - (0x208, 'M', u'ȉ'), - (0x209, 'V'), - (0x20A, 'M', u'ȋ'), - (0x20B, 'V'), - (0x20C, 'M', u'ȍ'), - ] - -def _seg_5(): - return [ - (0x20D, 'V'), - (0x20E, 'M', u'ȏ'), - (0x20F, 'V'), - (0x210, 'M', u'ȑ'), - (0x211, 'V'), - (0x212, 'M', u'ȓ'), - (0x213, 'V'), - (0x214, 'M', u'ȕ'), - (0x215, 'V'), - (0x216, 'M', u'ȗ'), - (0x217, 'V'), - (0x218, 'M', u'ș'), - (0x219, 'V'), - (0x21A, 'M', u'ț'), - (0x21B, 'V'), - (0x21C, 'M', u'ȝ'), - (0x21D, 'V'), - (0x21E, 'M', u'ȟ'), - (0x21F, 'V'), - (0x220, 'M', u'ƞ'), - (0x221, 'V'), - (0x222, 'M', u'ȣ'), - (0x223, 'V'), - (0x224, 'M', u'ȥ'), - (0x225, 'V'), - (0x226, 'M', u'ȧ'), - (0x227, 'V'), - (0x228, 'M', u'ȩ'), - (0x229, 'V'), - (0x22A, 'M', u'ȫ'), - (0x22B, 'V'), - (0x22C, 'M', u'ȭ'), - (0x22D, 'V'), - (0x22E, 'M', u'ȯ'), - (0x22F, 'V'), - (0x230, 'M', u'ȱ'), - (0x231, 'V'), - (0x232, 'M', u'ȳ'), - (0x233, 'V'), - (0x23A, 'M', u'ⱥ'), - (0x23B, 'M', u'ȼ'), - (0x23C, 'V'), - (0x23D, 'M', u'ƚ'), - (0x23E, 'M', u'ⱦ'), - (0x23F, 'V'), - (0x241, 'M', u'ɂ'), - (0x242, 'V'), - (0x243, 'M', u'ƀ'), - (0x244, 'M', u'ʉ'), - (0x245, 'M', u'ʌ'), - (0x246, 'M', u'ɇ'), - (0x247, 'V'), - (0x248, 'M', u'ɉ'), - (0x249, 'V'), - (0x24A, 'M', u'ɋ'), - (0x24B, 'V'), - (0x24C, 'M', u'ɍ'), - (0x24D, 'V'), - (0x24E, 'M', u'ɏ'), - (0x24F, 'V'), - (0x2B0, 'M', u'h'), - (0x2B1, 'M', u'ɦ'), - (0x2B2, 'M', u'j'), - (0x2B3, 'M', u'r'), - (0x2B4, 'M', u'ɹ'), - (0x2B5, 'M', u'ɻ'), - (0x2B6, 'M', u'ʁ'), - (0x2B7, 'M', u'w'), - (0x2B8, 'M', u'y'), - (0x2B9, 'V'), - (0x2D8, '3', u' ̆'), - (0x2D9, '3', u' ̇'), - (0x2DA, '3', u' ̊'), - (0x2DB, '3', u' ̨'), - (0x2DC, '3', u' ̃'), - (0x2DD, '3', u' ̋'), - (0x2DE, 'V'), - (0x2E0, 'M', u'ɣ'), - (0x2E1, 'M', u'l'), - (0x2E2, 'M', u's'), - (0x2E3, 'M', u'x'), - (0x2E4, 'M', u'ʕ'), - (0x2E5, 'V'), - (0x340, 'M', u'̀'), - (0x341, 'M', u'́'), - (0x342, 'V'), - (0x343, 'M', u'̓'), - (0x344, 'M', u'̈́'), - (0x345, 'M', u'ι'), - (0x346, 'V'), - (0x34F, 'I'), - (0x350, 'V'), - (0x370, 'M', u'ͱ'), - (0x371, 'V'), - (0x372, 'M', u'ͳ'), - (0x373, 'V'), - (0x374, 'M', u'ʹ'), - (0x375, 'V'), - (0x376, 'M', u'ͷ'), - (0x377, 'V'), - ] - -def _seg_6(): - return [ - (0x378, 'X'), - (0x37A, '3', u' ι'), - (0x37B, 'V'), - (0x37E, '3', u';'), - (0x37F, 'M', u'ϳ'), - (0x380, 'X'), - (0x384, '3', u' ́'), - (0x385, '3', u' ̈́'), - (0x386, 'M', u'ά'), - (0x387, 'M', u'·'), - (0x388, 'M', u'έ'), - (0x389, 'M', u'ή'), - (0x38A, 'M', u'ί'), - (0x38B, 'X'), - (0x38C, 'M', u'ό'), - (0x38D, 'X'), - (0x38E, 'M', u'ύ'), - (0x38F, 'M', u'ώ'), - (0x390, 'V'), - (0x391, 'M', u'α'), - (0x392, 'M', u'β'), - (0x393, 'M', u'γ'), - (0x394, 'M', u'δ'), - (0x395, 'M', u'ε'), - (0x396, 'M', u'ζ'), - (0x397, 'M', u'η'), - (0x398, 'M', u'θ'), - (0x399, 'M', u'ι'), - (0x39A, 'M', u'κ'), - (0x39B, 'M', u'λ'), - (0x39C, 'M', u'μ'), - (0x39D, 'M', u'ν'), - (0x39E, 'M', u'ξ'), - (0x39F, 'M', u'ο'), - (0x3A0, 'M', u'π'), - (0x3A1, 'M', u'ρ'), - (0x3A2, 'X'), - (0x3A3, 'M', u'σ'), - (0x3A4, 'M', u'τ'), - (0x3A5, 'M', u'υ'), - (0x3A6, 'M', u'φ'), - (0x3A7, 'M', u'χ'), - (0x3A8, 'M', u'ψ'), - (0x3A9, 'M', u'ω'), - (0x3AA, 'M', u'ϊ'), - (0x3AB, 'M', u'ϋ'), - (0x3AC, 'V'), - (0x3C2, 'D', u'σ'), - (0x3C3, 'V'), - (0x3CF, 'M', u'ϗ'), - (0x3D0, 'M', u'β'), - (0x3D1, 'M', u'θ'), - (0x3D2, 'M', u'υ'), - (0x3D3, 'M', u'ύ'), - (0x3D4, 'M', u'ϋ'), - (0x3D5, 'M', u'φ'), - (0x3D6, 'M', u'π'), - (0x3D7, 'V'), - (0x3D8, 'M', u'ϙ'), - (0x3D9, 'V'), - (0x3DA, 'M', u'ϛ'), - (0x3DB, 'V'), - (0x3DC, 'M', u'ϝ'), - (0x3DD, 'V'), - (0x3DE, 'M', u'ϟ'), - (0x3DF, 'V'), - (0x3E0, 'M', u'ϡ'), - (0x3E1, 'V'), - (0x3E2, 'M', u'ϣ'), - (0x3E3, 'V'), - (0x3E4, 'M', u'ϥ'), - (0x3E5, 'V'), - (0x3E6, 'M', u'ϧ'), - (0x3E7, 'V'), - (0x3E8, 'M', u'ϩ'), - (0x3E9, 'V'), - (0x3EA, 'M', u'ϫ'), - (0x3EB, 'V'), - (0x3EC, 'M', u'ϭ'), - (0x3ED, 'V'), - (0x3EE, 'M', u'ϯ'), - (0x3EF, 'V'), - (0x3F0, 'M', u'κ'), - (0x3F1, 'M', u'ρ'), - (0x3F2, 'M', u'σ'), - (0x3F3, 'V'), - (0x3F4, 'M', u'θ'), - (0x3F5, 'M', u'ε'), - (0x3F6, 'V'), - (0x3F7, 'M', u'ϸ'), - (0x3F8, 'V'), - (0x3F9, 'M', u'σ'), - (0x3FA, 'M', u'ϻ'), - (0x3FB, 'V'), - (0x3FD, 'M', u'ͻ'), - (0x3FE, 'M', u'ͼ'), - (0x3FF, 'M', u'ͽ'), - (0x400, 'M', u'ѐ'), - (0x401, 'M', u'ё'), - (0x402, 'M', u'ђ'), - ] - -def _seg_7(): - return [ - (0x403, 'M', u'ѓ'), - (0x404, 'M', u'є'), - (0x405, 'M', u'ѕ'), - (0x406, 'M', u'і'), - (0x407, 'M', u'ї'), - (0x408, 'M', u'ј'), - (0x409, 'M', u'љ'), - (0x40A, 'M', u'њ'), - (0x40B, 'M', u'ћ'), - (0x40C, 'M', u'ќ'), - (0x40D, 'M', u'ѝ'), - (0x40E, 'M', u'ў'), - (0x40F, 'M', u'џ'), - (0x410, 'M', u'а'), - (0x411, 'M', u'б'), - (0x412, 'M', u'в'), - (0x413, 'M', u'г'), - (0x414, 'M', u'д'), - (0x415, 'M', u'е'), - (0x416, 'M', u'ж'), - (0x417, 'M', u'з'), - (0x418, 'M', u'и'), - (0x419, 'M', u'й'), - (0x41A, 'M', u'к'), - (0x41B, 'M', u'л'), - (0x41C, 'M', u'м'), - (0x41D, 'M', u'н'), - (0x41E, 'M', u'о'), - (0x41F, 'M', u'п'), - (0x420, 'M', u'р'), - (0x421, 'M', u'с'), - (0x422, 'M', u'т'), - (0x423, 'M', u'у'), - (0x424, 'M', u'ф'), - (0x425, 'M', u'х'), - (0x426, 'M', u'ц'), - (0x427, 'M', u'ч'), - (0x428, 'M', u'ш'), - (0x429, 'M', u'щ'), - (0x42A, 'M', u'ъ'), - (0x42B, 'M', u'ы'), - (0x42C, 'M', u'ь'), - (0x42D, 'M', u'э'), - (0x42E, 'M', u'ю'), - (0x42F, 'M', u'я'), - (0x430, 'V'), - (0x460, 'M', u'ѡ'), - (0x461, 'V'), - (0x462, 'M', u'ѣ'), - (0x463, 'V'), - (0x464, 'M', u'ѥ'), - (0x465, 'V'), - (0x466, 'M', u'ѧ'), - (0x467, 'V'), - (0x468, 'M', u'ѩ'), - (0x469, 'V'), - (0x46A, 'M', u'ѫ'), - (0x46B, 'V'), - (0x46C, 'M', u'ѭ'), - (0x46D, 'V'), - (0x46E, 'M', u'ѯ'), - (0x46F, 'V'), - (0x470, 'M', u'ѱ'), - (0x471, 'V'), - (0x472, 'M', u'ѳ'), - (0x473, 'V'), - (0x474, 'M', u'ѵ'), - (0x475, 'V'), - (0x476, 'M', u'ѷ'), - (0x477, 'V'), - (0x478, 'M', u'ѹ'), - (0x479, 'V'), - (0x47A, 'M', u'ѻ'), - (0x47B, 'V'), - (0x47C, 'M', u'ѽ'), - (0x47D, 'V'), - (0x47E, 'M', u'ѿ'), - (0x47F, 'V'), - (0x480, 'M', u'ҁ'), - (0x481, 'V'), - (0x48A, 'M', u'ҋ'), - (0x48B, 'V'), - (0x48C, 'M', u'ҍ'), - (0x48D, 'V'), - (0x48E, 'M', u'ҏ'), - (0x48F, 'V'), - (0x490, 'M', u'ґ'), - (0x491, 'V'), - (0x492, 'M', u'ғ'), - (0x493, 'V'), - (0x494, 'M', u'ҕ'), - (0x495, 'V'), - (0x496, 'M', u'җ'), - (0x497, 'V'), - (0x498, 'M', u'ҙ'), - (0x499, 'V'), - (0x49A, 'M', u'қ'), - (0x49B, 'V'), - (0x49C, 'M', u'ҝ'), - (0x49D, 'V'), - ] - -def _seg_8(): - return [ - (0x49E, 'M', u'ҟ'), - (0x49F, 'V'), - (0x4A0, 'M', u'ҡ'), - (0x4A1, 'V'), - (0x4A2, 'M', u'ң'), - (0x4A3, 'V'), - (0x4A4, 'M', u'ҥ'), - (0x4A5, 'V'), - (0x4A6, 'M', u'ҧ'), - (0x4A7, 'V'), - (0x4A8, 'M', u'ҩ'), - (0x4A9, 'V'), - (0x4AA, 'M', u'ҫ'), - (0x4AB, 'V'), - (0x4AC, 'M', u'ҭ'), - (0x4AD, 'V'), - (0x4AE, 'M', u'ү'), - (0x4AF, 'V'), - (0x4B0, 'M', u'ұ'), - (0x4B1, 'V'), - (0x4B2, 'M', u'ҳ'), - (0x4B3, 'V'), - (0x4B4, 'M', u'ҵ'), - (0x4B5, 'V'), - (0x4B6, 'M', u'ҷ'), - (0x4B7, 'V'), - (0x4B8, 'M', u'ҹ'), - (0x4B9, 'V'), - (0x4BA, 'M', u'һ'), - (0x4BB, 'V'), - (0x4BC, 'M', u'ҽ'), - (0x4BD, 'V'), - (0x4BE, 'M', u'ҿ'), - (0x4BF, 'V'), - (0x4C0, 'X'), - (0x4C1, 'M', u'ӂ'), - (0x4C2, 'V'), - (0x4C3, 'M', u'ӄ'), - (0x4C4, 'V'), - (0x4C5, 'M', u'ӆ'), - (0x4C6, 'V'), - (0x4C7, 'M', u'ӈ'), - (0x4C8, 'V'), - (0x4C9, 'M', u'ӊ'), - (0x4CA, 'V'), - (0x4CB, 'M', u'ӌ'), - (0x4CC, 'V'), - (0x4CD, 'M', u'ӎ'), - (0x4CE, 'V'), - (0x4D0, 'M', u'ӑ'), - (0x4D1, 'V'), - (0x4D2, 'M', u'ӓ'), - (0x4D3, 'V'), - (0x4D4, 'M', u'ӕ'), - (0x4D5, 'V'), - (0x4D6, 'M', u'ӗ'), - (0x4D7, 'V'), - (0x4D8, 'M', u'ә'), - (0x4D9, 'V'), - (0x4DA, 'M', u'ӛ'), - (0x4DB, 'V'), - (0x4DC, 'M', u'ӝ'), - (0x4DD, 'V'), - (0x4DE, 'M', u'ӟ'), - (0x4DF, 'V'), - (0x4E0, 'M', u'ӡ'), - (0x4E1, 'V'), - (0x4E2, 'M', u'ӣ'), - (0x4E3, 'V'), - (0x4E4, 'M', u'ӥ'), - (0x4E5, 'V'), - (0x4E6, 'M', u'ӧ'), - (0x4E7, 'V'), - (0x4E8, 'M', u'ө'), - (0x4E9, 'V'), - (0x4EA, 'M', u'ӫ'), - (0x4EB, 'V'), - (0x4EC, 'M', u'ӭ'), - (0x4ED, 'V'), - (0x4EE, 'M', u'ӯ'), - (0x4EF, 'V'), - (0x4F0, 'M', u'ӱ'), - (0x4F1, 'V'), - (0x4F2, 'M', u'ӳ'), - (0x4F3, 'V'), - (0x4F4, 'M', u'ӵ'), - (0x4F5, 'V'), - (0x4F6, 'M', u'ӷ'), - (0x4F7, 'V'), - (0x4F8, 'M', u'ӹ'), - (0x4F9, 'V'), - (0x4FA, 'M', u'ӻ'), - (0x4FB, 'V'), - (0x4FC, 'M', u'ӽ'), - (0x4FD, 'V'), - (0x4FE, 'M', u'ӿ'), - (0x4FF, 'V'), - (0x500, 'M', u'ԁ'), - (0x501, 'V'), - (0x502, 'M', u'ԃ'), - ] - -def _seg_9(): - return [ - (0x503, 'V'), - (0x504, 'M', u'ԅ'), - (0x505, 'V'), - (0x506, 'M', u'ԇ'), - (0x507, 'V'), - (0x508, 'M', u'ԉ'), - (0x509, 'V'), - (0x50A, 'M', u'ԋ'), - (0x50B, 'V'), - (0x50C, 'M', u'ԍ'), - (0x50D, 'V'), - (0x50E, 'M', u'ԏ'), - (0x50F, 'V'), - (0x510, 'M', u'ԑ'), - (0x511, 'V'), - (0x512, 'M', u'ԓ'), - (0x513, 'V'), - (0x514, 'M', u'ԕ'), - (0x515, 'V'), - (0x516, 'M', u'ԗ'), - (0x517, 'V'), - (0x518, 'M', u'ԙ'), - (0x519, 'V'), - (0x51A, 'M', u'ԛ'), - (0x51B, 'V'), - (0x51C, 'M', u'ԝ'), - (0x51D, 'V'), - (0x51E, 'M', u'ԟ'), - (0x51F, 'V'), - (0x520, 'M', u'ԡ'), - (0x521, 'V'), - (0x522, 'M', u'ԣ'), - (0x523, 'V'), - (0x524, 'M', u'ԥ'), - (0x525, 'V'), - (0x526, 'M', u'ԧ'), - (0x527, 'V'), - (0x528, 'M', u'ԩ'), - (0x529, 'V'), - (0x52A, 'M', u'ԫ'), - (0x52B, 'V'), - (0x52C, 'M', u'ԭ'), - (0x52D, 'V'), - (0x52E, 'M', u'ԯ'), - (0x52F, 'V'), - (0x530, 'X'), - (0x531, 'M', u'ա'), - (0x532, 'M', u'բ'), - (0x533, 'M', u'գ'), - (0x534, 'M', u'դ'), - (0x535, 'M', u'ե'), - (0x536, 'M', u'զ'), - (0x537, 'M', u'է'), - (0x538, 'M', u'ը'), - (0x539, 'M', u'թ'), - (0x53A, 'M', u'ժ'), - (0x53B, 'M', u'ի'), - (0x53C, 'M', u'լ'), - (0x53D, 'M', u'խ'), - (0x53E, 'M', u'ծ'), - (0x53F, 'M', u'կ'), - (0x540, 'M', u'հ'), - (0x541, 'M', u'ձ'), - (0x542, 'M', u'ղ'), - (0x543, 'M', u'ճ'), - (0x544, 'M', u'մ'), - (0x545, 'M', u'յ'), - (0x546, 'M', u'ն'), - (0x547, 'M', u'շ'), - (0x548, 'M', u'ո'), - (0x549, 'M', u'չ'), - (0x54A, 'M', u'պ'), - (0x54B, 'M', u'ջ'), - (0x54C, 'M', u'ռ'), - (0x54D, 'M', u'ս'), - (0x54E, 'M', u'վ'), - (0x54F, 'M', u'տ'), - (0x550, 'M', u'ր'), - (0x551, 'M', u'ց'), - (0x552, 'M', u'ւ'), - (0x553, 'M', u'փ'), - (0x554, 'M', u'ք'), - (0x555, 'M', u'օ'), - (0x556, 'M', u'ֆ'), - (0x557, 'X'), - (0x559, 'V'), - (0x560, 'X'), - (0x561, 'V'), - (0x587, 'M', u'եւ'), - (0x588, 'X'), - (0x589, 'V'), - (0x58B, 'X'), - (0x58D, 'V'), - (0x590, 'X'), - (0x591, 'V'), - (0x5C8, 'X'), - (0x5D0, 'V'), - (0x5EB, 'X'), - (0x5F0, 'V'), - (0x5F5, 'X'), - ] - -def _seg_10(): - return [ - (0x606, 'V'), - (0x61C, 'X'), - (0x61E, 'V'), - (0x675, 'M', u'اٴ'), - (0x676, 'M', u'وٴ'), - (0x677, 'M', u'ۇٴ'), - (0x678, 'M', u'يٴ'), - (0x679, 'V'), - (0x6DD, 'X'), - (0x6DE, 'V'), - (0x70E, 'X'), - (0x710, 'V'), - (0x74B, 'X'), - (0x74D, 'V'), - (0x7B2, 'X'), - (0x7C0, 'V'), - (0x7FB, 'X'), - (0x800, 'V'), - (0x82E, 'X'), - (0x830, 'V'), - (0x83F, 'X'), - (0x840, 'V'), - (0x85C, 'X'), - (0x85E, 'V'), - (0x85F, 'X'), - (0x860, 'V'), - (0x86B, 'X'), - (0x8A0, 'V'), - (0x8B5, 'X'), - (0x8B6, 'V'), - (0x8BE, 'X'), - (0x8D4, 'V'), - (0x8E2, 'X'), - (0x8E3, 'V'), - (0x958, 'M', u'क़'), - (0x959, 'M', u'ख़'), - (0x95A, 'M', u'ग़'), - (0x95B, 'M', u'ज़'), - (0x95C, 'M', u'ड़'), - (0x95D, 'M', u'ढ़'), - (0x95E, 'M', u'फ़'), - (0x95F, 'M', u'य़'), - (0x960, 'V'), - (0x984, 'X'), - (0x985, 'V'), - (0x98D, 'X'), - (0x98F, 'V'), - (0x991, 'X'), - (0x993, 'V'), - (0x9A9, 'X'), - (0x9AA, 'V'), - (0x9B1, 'X'), - (0x9B2, 'V'), - (0x9B3, 'X'), - (0x9B6, 'V'), - (0x9BA, 'X'), - (0x9BC, 'V'), - (0x9C5, 'X'), - (0x9C7, 'V'), - (0x9C9, 'X'), - (0x9CB, 'V'), - (0x9CF, 'X'), - (0x9D7, 'V'), - (0x9D8, 'X'), - (0x9DC, 'M', u'ড়'), - (0x9DD, 'M', u'ঢ়'), - (0x9DE, 'X'), - (0x9DF, 'M', u'য়'), - (0x9E0, 'V'), - (0x9E4, 'X'), - (0x9E6, 'V'), - (0x9FE, 'X'), - (0xA01, 'V'), - (0xA04, 'X'), - (0xA05, 'V'), - (0xA0B, 'X'), - (0xA0F, 'V'), - (0xA11, 'X'), - (0xA13, 'V'), - (0xA29, 'X'), - (0xA2A, 'V'), - (0xA31, 'X'), - (0xA32, 'V'), - (0xA33, 'M', u'ਲ਼'), - (0xA34, 'X'), - (0xA35, 'V'), - (0xA36, 'M', u'ਸ਼'), - (0xA37, 'X'), - (0xA38, 'V'), - (0xA3A, 'X'), - (0xA3C, 'V'), - (0xA3D, 'X'), - (0xA3E, 'V'), - (0xA43, 'X'), - (0xA47, 'V'), - (0xA49, 'X'), - (0xA4B, 'V'), - (0xA4E, 'X'), - (0xA51, 'V'), - (0xA52, 'X'), - ] - -def _seg_11(): - return [ - (0xA59, 'M', u'ਖ਼'), - (0xA5A, 'M', u'ਗ਼'), - (0xA5B, 'M', u'ਜ਼'), - (0xA5C, 'V'), - (0xA5D, 'X'), - (0xA5E, 'M', u'ਫ਼'), - (0xA5F, 'X'), - (0xA66, 'V'), - (0xA76, 'X'), - (0xA81, 'V'), - (0xA84, 'X'), - (0xA85, 'V'), - (0xA8E, 'X'), - (0xA8F, 'V'), - (0xA92, 'X'), - (0xA93, 'V'), - (0xAA9, 'X'), - (0xAAA, 'V'), - (0xAB1, 'X'), - (0xAB2, 'V'), - (0xAB4, 'X'), - (0xAB5, 'V'), - (0xABA, 'X'), - (0xABC, 'V'), - (0xAC6, 'X'), - (0xAC7, 'V'), - (0xACA, 'X'), - (0xACB, 'V'), - (0xACE, 'X'), - (0xAD0, 'V'), - (0xAD1, 'X'), - (0xAE0, 'V'), - (0xAE4, 'X'), - (0xAE6, 'V'), - (0xAF2, 'X'), - (0xAF9, 'V'), - (0xB00, 'X'), - (0xB01, 'V'), - (0xB04, 'X'), - (0xB05, 'V'), - (0xB0D, 'X'), - (0xB0F, 'V'), - (0xB11, 'X'), - (0xB13, 'V'), - (0xB29, 'X'), - (0xB2A, 'V'), - (0xB31, 'X'), - (0xB32, 'V'), - (0xB34, 'X'), - (0xB35, 'V'), - (0xB3A, 'X'), - (0xB3C, 'V'), - (0xB45, 'X'), - (0xB47, 'V'), - (0xB49, 'X'), - (0xB4B, 'V'), - (0xB4E, 'X'), - (0xB56, 'V'), - (0xB58, 'X'), - (0xB5C, 'M', u'ଡ଼'), - (0xB5D, 'M', u'ଢ଼'), - (0xB5E, 'X'), - (0xB5F, 'V'), - (0xB64, 'X'), - (0xB66, 'V'), - (0xB78, 'X'), - (0xB82, 'V'), - (0xB84, 'X'), - (0xB85, 'V'), - (0xB8B, 'X'), - (0xB8E, 'V'), - (0xB91, 'X'), - (0xB92, 'V'), - (0xB96, 'X'), - (0xB99, 'V'), - (0xB9B, 'X'), - (0xB9C, 'V'), - (0xB9D, 'X'), - (0xB9E, 'V'), - (0xBA0, 'X'), - (0xBA3, 'V'), - (0xBA5, 'X'), - (0xBA8, 'V'), - (0xBAB, 'X'), - (0xBAE, 'V'), - (0xBBA, 'X'), - (0xBBE, 'V'), - (0xBC3, 'X'), - (0xBC6, 'V'), - (0xBC9, 'X'), - (0xBCA, 'V'), - (0xBCE, 'X'), - (0xBD0, 'V'), - (0xBD1, 'X'), - (0xBD7, 'V'), - (0xBD8, 'X'), - (0xBE6, 'V'), - (0xBFB, 'X'), - (0xC00, 'V'), - (0xC04, 'X'), - ] - -def _seg_12(): - return [ - (0xC05, 'V'), - (0xC0D, 'X'), - (0xC0E, 'V'), - (0xC11, 'X'), - (0xC12, 'V'), - (0xC29, 'X'), - (0xC2A, 'V'), - (0xC3A, 'X'), - (0xC3D, 'V'), - (0xC45, 'X'), - (0xC46, 'V'), - (0xC49, 'X'), - (0xC4A, 'V'), - (0xC4E, 'X'), - (0xC55, 'V'), - (0xC57, 'X'), - (0xC58, 'V'), - (0xC5B, 'X'), - (0xC60, 'V'), - (0xC64, 'X'), - (0xC66, 'V'), - (0xC70, 'X'), - (0xC78, 'V'), - (0xC84, 'X'), - (0xC85, 'V'), - (0xC8D, 'X'), - (0xC8E, 'V'), - (0xC91, 'X'), - (0xC92, 'V'), - (0xCA9, 'X'), - (0xCAA, 'V'), - (0xCB4, 'X'), - (0xCB5, 'V'), - (0xCBA, 'X'), - (0xCBC, 'V'), - (0xCC5, 'X'), - (0xCC6, 'V'), - (0xCC9, 'X'), - (0xCCA, 'V'), - (0xCCE, 'X'), - (0xCD5, 'V'), - (0xCD7, 'X'), - (0xCDE, 'V'), - (0xCDF, 'X'), - (0xCE0, 'V'), - (0xCE4, 'X'), - (0xCE6, 'V'), - (0xCF0, 'X'), - (0xCF1, 'V'), - (0xCF3, 'X'), - (0xD00, 'V'), - (0xD04, 'X'), - (0xD05, 'V'), - (0xD0D, 'X'), - (0xD0E, 'V'), - (0xD11, 'X'), - (0xD12, 'V'), - (0xD45, 'X'), - (0xD46, 'V'), - (0xD49, 'X'), - (0xD4A, 'V'), - (0xD50, 'X'), - (0xD54, 'V'), - (0xD64, 'X'), - (0xD66, 'V'), - (0xD80, 'X'), - (0xD82, 'V'), - (0xD84, 'X'), - (0xD85, 'V'), - (0xD97, 'X'), - (0xD9A, 'V'), - (0xDB2, 'X'), - (0xDB3, 'V'), - (0xDBC, 'X'), - (0xDBD, 'V'), - (0xDBE, 'X'), - (0xDC0, 'V'), - (0xDC7, 'X'), - (0xDCA, 'V'), - (0xDCB, 'X'), - (0xDCF, 'V'), - (0xDD5, 'X'), - (0xDD6, 'V'), - (0xDD7, 'X'), - (0xDD8, 'V'), - (0xDE0, 'X'), - (0xDE6, 'V'), - (0xDF0, 'X'), - (0xDF2, 'V'), - (0xDF5, 'X'), - (0xE01, 'V'), - (0xE33, 'M', u'ํา'), - (0xE34, 'V'), - (0xE3B, 'X'), - (0xE3F, 'V'), - (0xE5C, 'X'), - (0xE81, 'V'), - (0xE83, 'X'), - (0xE84, 'V'), - (0xE85, 'X'), - ] - -def _seg_13(): - return [ - (0xE87, 'V'), - (0xE89, 'X'), - (0xE8A, 'V'), - (0xE8B, 'X'), - (0xE8D, 'V'), - (0xE8E, 'X'), - (0xE94, 'V'), - (0xE98, 'X'), - (0xE99, 'V'), - (0xEA0, 'X'), - (0xEA1, 'V'), - (0xEA4, 'X'), - (0xEA5, 'V'), - (0xEA6, 'X'), - (0xEA7, 'V'), - (0xEA8, 'X'), - (0xEAA, 'V'), - (0xEAC, 'X'), - (0xEAD, 'V'), - (0xEB3, 'M', u'ໍາ'), - (0xEB4, 'V'), - (0xEBA, 'X'), - (0xEBB, 'V'), - (0xEBE, 'X'), - (0xEC0, 'V'), - (0xEC5, 'X'), - (0xEC6, 'V'), - (0xEC7, 'X'), - (0xEC8, 'V'), - (0xECE, 'X'), - (0xED0, 'V'), - (0xEDA, 'X'), - (0xEDC, 'M', u'ຫນ'), - (0xEDD, 'M', u'ຫມ'), - (0xEDE, 'V'), - (0xEE0, 'X'), - (0xF00, 'V'), - (0xF0C, 'M', u'་'), - (0xF0D, 'V'), - (0xF43, 'M', u'གྷ'), - (0xF44, 'V'), - (0xF48, 'X'), - (0xF49, 'V'), - (0xF4D, 'M', u'ཌྷ'), - (0xF4E, 'V'), - (0xF52, 'M', u'དྷ'), - (0xF53, 'V'), - (0xF57, 'M', u'བྷ'), - (0xF58, 'V'), - (0xF5C, 'M', u'ཛྷ'), - (0xF5D, 'V'), - (0xF69, 'M', u'ཀྵ'), - (0xF6A, 'V'), - (0xF6D, 'X'), - (0xF71, 'V'), - (0xF73, 'M', u'ཱི'), - (0xF74, 'V'), - (0xF75, 'M', u'ཱུ'), - (0xF76, 'M', u'ྲྀ'), - (0xF77, 'M', u'ྲཱྀ'), - (0xF78, 'M', u'ླྀ'), - (0xF79, 'M', u'ླཱྀ'), - (0xF7A, 'V'), - (0xF81, 'M', u'ཱྀ'), - (0xF82, 'V'), - (0xF93, 'M', u'ྒྷ'), - (0xF94, 'V'), - (0xF98, 'X'), - (0xF99, 'V'), - (0xF9D, 'M', u'ྜྷ'), - (0xF9E, 'V'), - (0xFA2, 'M', u'ྡྷ'), - (0xFA3, 'V'), - (0xFA7, 'M', u'ྦྷ'), - (0xFA8, 'V'), - (0xFAC, 'M', u'ྫྷ'), - (0xFAD, 'V'), - (0xFB9, 'M', u'ྐྵ'), - (0xFBA, 'V'), - (0xFBD, 'X'), - (0xFBE, 'V'), - (0xFCD, 'X'), - (0xFCE, 'V'), - (0xFDB, 'X'), - (0x1000, 'V'), - (0x10A0, 'X'), - (0x10C7, 'M', u'ⴧ'), - (0x10C8, 'X'), - (0x10CD, 'M', u'ⴭ'), - (0x10CE, 'X'), - (0x10D0, 'V'), - (0x10FC, 'M', u'ნ'), - (0x10FD, 'V'), - (0x115F, 'X'), - (0x1161, 'V'), - (0x1249, 'X'), - (0x124A, 'V'), - (0x124E, 'X'), - (0x1250, 'V'), - (0x1257, 'X'), - ] - -def _seg_14(): - return [ - (0x1258, 'V'), - (0x1259, 'X'), - (0x125A, 'V'), - (0x125E, 'X'), - (0x1260, 'V'), - (0x1289, 'X'), - (0x128A, 'V'), - (0x128E, 'X'), - (0x1290, 'V'), - (0x12B1, 'X'), - (0x12B2, 'V'), - (0x12B6, 'X'), - (0x12B8, 'V'), - (0x12BF, 'X'), - (0x12C0, 'V'), - (0x12C1, 'X'), - (0x12C2, 'V'), - (0x12C6, 'X'), - (0x12C8, 'V'), - (0x12D7, 'X'), - (0x12D8, 'V'), - (0x1311, 'X'), - (0x1312, 'V'), - (0x1316, 'X'), - (0x1318, 'V'), - (0x135B, 'X'), - (0x135D, 'V'), - (0x137D, 'X'), - (0x1380, 'V'), - (0x139A, 'X'), - (0x13A0, 'V'), - (0x13F6, 'X'), - (0x13F8, 'M', u'Ᏸ'), - (0x13F9, 'M', u'Ᏹ'), - (0x13FA, 'M', u'Ᏺ'), - (0x13FB, 'M', u'Ᏻ'), - (0x13FC, 'M', u'Ᏼ'), - (0x13FD, 'M', u'Ᏽ'), - (0x13FE, 'X'), - (0x1400, 'V'), - (0x1680, 'X'), - (0x1681, 'V'), - (0x169D, 'X'), - (0x16A0, 'V'), - (0x16F9, 'X'), - (0x1700, 'V'), - (0x170D, 'X'), - (0x170E, 'V'), - (0x1715, 'X'), - (0x1720, 'V'), - (0x1737, 'X'), - (0x1740, 'V'), - (0x1754, 'X'), - (0x1760, 'V'), - (0x176D, 'X'), - (0x176E, 'V'), - (0x1771, 'X'), - (0x1772, 'V'), - (0x1774, 'X'), - (0x1780, 'V'), - (0x17B4, 'X'), - (0x17B6, 'V'), - (0x17DE, 'X'), - (0x17E0, 'V'), - (0x17EA, 'X'), - (0x17F0, 'V'), - (0x17FA, 'X'), - (0x1800, 'V'), - (0x1806, 'X'), - (0x1807, 'V'), - (0x180B, 'I'), - (0x180E, 'X'), - (0x1810, 'V'), - (0x181A, 'X'), - (0x1820, 'V'), - (0x1878, 'X'), - (0x1880, 'V'), - (0x18AB, 'X'), - (0x18B0, 'V'), - (0x18F6, 'X'), - (0x1900, 'V'), - (0x191F, 'X'), - (0x1920, 'V'), - (0x192C, 'X'), - (0x1930, 'V'), - (0x193C, 'X'), - (0x1940, 'V'), - (0x1941, 'X'), - (0x1944, 'V'), - (0x196E, 'X'), - (0x1970, 'V'), - (0x1975, 'X'), - (0x1980, 'V'), - (0x19AC, 'X'), - (0x19B0, 'V'), - (0x19CA, 'X'), - (0x19D0, 'V'), - (0x19DB, 'X'), - (0x19DE, 'V'), - (0x1A1C, 'X'), - ] - -def _seg_15(): - return [ - (0x1A1E, 'V'), - (0x1A5F, 'X'), - (0x1A60, 'V'), - (0x1A7D, 'X'), - (0x1A7F, 'V'), - (0x1A8A, 'X'), - (0x1A90, 'V'), - (0x1A9A, 'X'), - (0x1AA0, 'V'), - (0x1AAE, 'X'), - (0x1AB0, 'V'), - (0x1ABF, 'X'), - (0x1B00, 'V'), - (0x1B4C, 'X'), - (0x1B50, 'V'), - (0x1B7D, 'X'), - (0x1B80, 'V'), - (0x1BF4, 'X'), - (0x1BFC, 'V'), - (0x1C38, 'X'), - (0x1C3B, 'V'), - (0x1C4A, 'X'), - (0x1C4D, 'V'), - (0x1C80, 'M', u'в'), - (0x1C81, 'M', u'д'), - (0x1C82, 'M', u'о'), - (0x1C83, 'M', u'с'), - (0x1C84, 'M', u'т'), - (0x1C86, 'M', u'ъ'), - (0x1C87, 'M', u'ѣ'), - (0x1C88, 'M', u'ꙋ'), - (0x1C89, 'X'), - (0x1CC0, 'V'), - (0x1CC8, 'X'), - (0x1CD0, 'V'), - (0x1CFA, 'X'), - (0x1D00, 'V'), - (0x1D2C, 'M', u'a'), - (0x1D2D, 'M', u'æ'), - (0x1D2E, 'M', u'b'), - (0x1D2F, 'V'), - (0x1D30, 'M', u'd'), - (0x1D31, 'M', u'e'), - (0x1D32, 'M', u'ǝ'), - (0x1D33, 'M', u'g'), - (0x1D34, 'M', u'h'), - (0x1D35, 'M', u'i'), - (0x1D36, 'M', u'j'), - (0x1D37, 'M', u'k'), - (0x1D38, 'M', u'l'), - (0x1D39, 'M', u'm'), - (0x1D3A, 'M', u'n'), - (0x1D3B, 'V'), - (0x1D3C, 'M', u'o'), - (0x1D3D, 'M', u'ȣ'), - (0x1D3E, 'M', u'p'), - (0x1D3F, 'M', u'r'), - (0x1D40, 'M', u't'), - (0x1D41, 'M', u'u'), - (0x1D42, 'M', u'w'), - (0x1D43, 'M', u'a'), - (0x1D44, 'M', u'ɐ'), - (0x1D45, 'M', u'ɑ'), - (0x1D46, 'M', u'ᴂ'), - (0x1D47, 'M', u'b'), - (0x1D48, 'M', u'd'), - (0x1D49, 'M', u'e'), - (0x1D4A, 'M', u'ə'), - (0x1D4B, 'M', u'ɛ'), - (0x1D4C, 'M', u'ɜ'), - (0x1D4D, 'M', u'g'), - (0x1D4E, 'V'), - (0x1D4F, 'M', u'k'), - (0x1D50, 'M', u'm'), - (0x1D51, 'M', u'ŋ'), - (0x1D52, 'M', u'o'), - (0x1D53, 'M', u'ɔ'), - (0x1D54, 'M', u'ᴖ'), - (0x1D55, 'M', u'ᴗ'), - (0x1D56, 'M', u'p'), - (0x1D57, 'M', u't'), - (0x1D58, 'M', u'u'), - (0x1D59, 'M', u'ᴝ'), - (0x1D5A, 'M', u'ɯ'), - (0x1D5B, 'M', u'v'), - (0x1D5C, 'M', u'ᴥ'), - (0x1D5D, 'M', u'β'), - (0x1D5E, 'M', u'γ'), - (0x1D5F, 'M', u'δ'), - (0x1D60, 'M', u'φ'), - (0x1D61, 'M', u'χ'), - (0x1D62, 'M', u'i'), - (0x1D63, 'M', u'r'), - (0x1D64, 'M', u'u'), - (0x1D65, 'M', u'v'), - (0x1D66, 'M', u'β'), - (0x1D67, 'M', u'γ'), - (0x1D68, 'M', u'ρ'), - (0x1D69, 'M', u'φ'), - (0x1D6A, 'M', u'χ'), - ] - -def _seg_16(): - return [ - (0x1D6B, 'V'), - (0x1D78, 'M', u'н'), - (0x1D79, 'V'), - (0x1D9B, 'M', u'ɒ'), - (0x1D9C, 'M', u'c'), - (0x1D9D, 'M', u'ɕ'), - (0x1D9E, 'M', u'ð'), - (0x1D9F, 'M', u'ɜ'), - (0x1DA0, 'M', u'f'), - (0x1DA1, 'M', u'ɟ'), - (0x1DA2, 'M', u'ɡ'), - (0x1DA3, 'M', u'ɥ'), - (0x1DA4, 'M', u'ɨ'), - (0x1DA5, 'M', u'ɩ'), - (0x1DA6, 'M', u'ɪ'), - (0x1DA7, 'M', u'ᵻ'), - (0x1DA8, 'M', u'ʝ'), - (0x1DA9, 'M', u'ɭ'), - (0x1DAA, 'M', u'ᶅ'), - (0x1DAB, 'M', u'ʟ'), - (0x1DAC, 'M', u'ɱ'), - (0x1DAD, 'M', u'ɰ'), - (0x1DAE, 'M', u'ɲ'), - (0x1DAF, 'M', u'ɳ'), - (0x1DB0, 'M', u'ɴ'), - (0x1DB1, 'M', u'ɵ'), - (0x1DB2, 'M', u'ɸ'), - (0x1DB3, 'M', u'ʂ'), - (0x1DB4, 'M', u'ʃ'), - (0x1DB5, 'M', u'ƫ'), - (0x1DB6, 'M', u'ʉ'), - (0x1DB7, 'M', u'ʊ'), - (0x1DB8, 'M', u'ᴜ'), - (0x1DB9, 'M', u'ʋ'), - (0x1DBA, 'M', u'ʌ'), - (0x1DBB, 'M', u'z'), - (0x1DBC, 'M', u'ʐ'), - (0x1DBD, 'M', u'ʑ'), - (0x1DBE, 'M', u'ʒ'), - (0x1DBF, 'M', u'θ'), - (0x1DC0, 'V'), - (0x1DFA, 'X'), - (0x1DFB, 'V'), - (0x1E00, 'M', u'ḁ'), - (0x1E01, 'V'), - (0x1E02, 'M', u'ḃ'), - (0x1E03, 'V'), - (0x1E04, 'M', u'ḅ'), - (0x1E05, 'V'), - (0x1E06, 'M', u'ḇ'), - (0x1E07, 'V'), - (0x1E08, 'M', u'ḉ'), - (0x1E09, 'V'), - (0x1E0A, 'M', u'ḋ'), - (0x1E0B, 'V'), - (0x1E0C, 'M', u'ḍ'), - (0x1E0D, 'V'), - (0x1E0E, 'M', u'ḏ'), - (0x1E0F, 'V'), - (0x1E10, 'M', u'ḑ'), - (0x1E11, 'V'), - (0x1E12, 'M', u'ḓ'), - (0x1E13, 'V'), - (0x1E14, 'M', u'ḕ'), - (0x1E15, 'V'), - (0x1E16, 'M', u'ḗ'), - (0x1E17, 'V'), - (0x1E18, 'M', u'ḙ'), - (0x1E19, 'V'), - (0x1E1A, 'M', u'ḛ'), - (0x1E1B, 'V'), - (0x1E1C, 'M', u'ḝ'), - (0x1E1D, 'V'), - (0x1E1E, 'M', u'ḟ'), - (0x1E1F, 'V'), - (0x1E20, 'M', u'ḡ'), - (0x1E21, 'V'), - (0x1E22, 'M', u'ḣ'), - (0x1E23, 'V'), - (0x1E24, 'M', u'ḥ'), - (0x1E25, 'V'), - (0x1E26, 'M', u'ḧ'), - (0x1E27, 'V'), - (0x1E28, 'M', u'ḩ'), - (0x1E29, 'V'), - (0x1E2A, 'M', u'ḫ'), - (0x1E2B, 'V'), - (0x1E2C, 'M', u'ḭ'), - (0x1E2D, 'V'), - (0x1E2E, 'M', u'ḯ'), - (0x1E2F, 'V'), - (0x1E30, 'M', u'ḱ'), - (0x1E31, 'V'), - (0x1E32, 'M', u'ḳ'), - (0x1E33, 'V'), - (0x1E34, 'M', u'ḵ'), - (0x1E35, 'V'), - (0x1E36, 'M', u'ḷ'), - (0x1E37, 'V'), - (0x1E38, 'M', u'ḹ'), - ] - -def _seg_17(): - return [ - (0x1E39, 'V'), - (0x1E3A, 'M', u'ḻ'), - (0x1E3B, 'V'), - (0x1E3C, 'M', u'ḽ'), - (0x1E3D, 'V'), - (0x1E3E, 'M', u'ḿ'), - (0x1E3F, 'V'), - (0x1E40, 'M', u'ṁ'), - (0x1E41, 'V'), - (0x1E42, 'M', u'ṃ'), - (0x1E43, 'V'), - (0x1E44, 'M', u'ṅ'), - (0x1E45, 'V'), - (0x1E46, 'M', u'ṇ'), - (0x1E47, 'V'), - (0x1E48, 'M', u'ṉ'), - (0x1E49, 'V'), - (0x1E4A, 'M', u'ṋ'), - (0x1E4B, 'V'), - (0x1E4C, 'M', u'ṍ'), - (0x1E4D, 'V'), - (0x1E4E, 'M', u'ṏ'), - (0x1E4F, 'V'), - (0x1E50, 'M', u'ṑ'), - (0x1E51, 'V'), - (0x1E52, 'M', u'ṓ'), - (0x1E53, 'V'), - (0x1E54, 'M', u'ṕ'), - (0x1E55, 'V'), - (0x1E56, 'M', u'ṗ'), - (0x1E57, 'V'), - (0x1E58, 'M', u'ṙ'), - (0x1E59, 'V'), - (0x1E5A, 'M', u'ṛ'), - (0x1E5B, 'V'), - (0x1E5C, 'M', u'ṝ'), - (0x1E5D, 'V'), - (0x1E5E, 'M', u'ṟ'), - (0x1E5F, 'V'), - (0x1E60, 'M', u'ṡ'), - (0x1E61, 'V'), - (0x1E62, 'M', u'ṣ'), - (0x1E63, 'V'), - (0x1E64, 'M', u'ṥ'), - (0x1E65, 'V'), - (0x1E66, 'M', u'ṧ'), - (0x1E67, 'V'), - (0x1E68, 'M', u'ṩ'), - (0x1E69, 'V'), - (0x1E6A, 'M', u'ṫ'), - (0x1E6B, 'V'), - (0x1E6C, 'M', u'ṭ'), - (0x1E6D, 'V'), - (0x1E6E, 'M', u'ṯ'), - (0x1E6F, 'V'), - (0x1E70, 'M', u'ṱ'), - (0x1E71, 'V'), - (0x1E72, 'M', u'ṳ'), - (0x1E73, 'V'), - (0x1E74, 'M', u'ṵ'), - (0x1E75, 'V'), - (0x1E76, 'M', u'ṷ'), - (0x1E77, 'V'), - (0x1E78, 'M', u'ṹ'), - (0x1E79, 'V'), - (0x1E7A, 'M', u'ṻ'), - (0x1E7B, 'V'), - (0x1E7C, 'M', u'ṽ'), - (0x1E7D, 'V'), - (0x1E7E, 'M', u'ṿ'), - (0x1E7F, 'V'), - (0x1E80, 'M', u'ẁ'), - (0x1E81, 'V'), - (0x1E82, 'M', u'ẃ'), - (0x1E83, 'V'), - (0x1E84, 'M', u'ẅ'), - (0x1E85, 'V'), - (0x1E86, 'M', u'ẇ'), - (0x1E87, 'V'), - (0x1E88, 'M', u'ẉ'), - (0x1E89, 'V'), - (0x1E8A, 'M', u'ẋ'), - (0x1E8B, 'V'), - (0x1E8C, 'M', u'ẍ'), - (0x1E8D, 'V'), - (0x1E8E, 'M', u'ẏ'), - (0x1E8F, 'V'), - (0x1E90, 'M', u'ẑ'), - (0x1E91, 'V'), - (0x1E92, 'M', u'ẓ'), - (0x1E93, 'V'), - (0x1E94, 'M', u'ẕ'), - (0x1E95, 'V'), - (0x1E9A, 'M', u'aʾ'), - (0x1E9B, 'M', u'ṡ'), - (0x1E9C, 'V'), - (0x1E9E, 'M', u'ss'), - (0x1E9F, 'V'), - (0x1EA0, 'M', u'ạ'), - (0x1EA1, 'V'), - ] - -def _seg_18(): - return [ - (0x1EA2, 'M', u'ả'), - (0x1EA3, 'V'), - (0x1EA4, 'M', u'ấ'), - (0x1EA5, 'V'), - (0x1EA6, 'M', u'ầ'), - (0x1EA7, 'V'), - (0x1EA8, 'M', u'ẩ'), - (0x1EA9, 'V'), - (0x1EAA, 'M', u'ẫ'), - (0x1EAB, 'V'), - (0x1EAC, 'M', u'ậ'), - (0x1EAD, 'V'), - (0x1EAE, 'M', u'ắ'), - (0x1EAF, 'V'), - (0x1EB0, 'M', u'ằ'), - (0x1EB1, 'V'), - (0x1EB2, 'M', u'ẳ'), - (0x1EB3, 'V'), - (0x1EB4, 'M', u'ẵ'), - (0x1EB5, 'V'), - (0x1EB6, 'M', u'ặ'), - (0x1EB7, 'V'), - (0x1EB8, 'M', u'ẹ'), - (0x1EB9, 'V'), - (0x1EBA, 'M', u'ẻ'), - (0x1EBB, 'V'), - (0x1EBC, 'M', u'ẽ'), - (0x1EBD, 'V'), - (0x1EBE, 'M', u'ế'), - (0x1EBF, 'V'), - (0x1EC0, 'M', u'ề'), - (0x1EC1, 'V'), - (0x1EC2, 'M', u'ể'), - (0x1EC3, 'V'), - (0x1EC4, 'M', u'ễ'), - (0x1EC5, 'V'), - (0x1EC6, 'M', u'ệ'), - (0x1EC7, 'V'), - (0x1EC8, 'M', u'ỉ'), - (0x1EC9, 'V'), - (0x1ECA, 'M', u'ị'), - (0x1ECB, 'V'), - (0x1ECC, 'M', u'ọ'), - (0x1ECD, 'V'), - (0x1ECE, 'M', u'ỏ'), - (0x1ECF, 'V'), - (0x1ED0, 'M', u'ố'), - (0x1ED1, 'V'), - (0x1ED2, 'M', u'ồ'), - (0x1ED3, 'V'), - (0x1ED4, 'M', u'ổ'), - (0x1ED5, 'V'), - (0x1ED6, 'M', u'ỗ'), - (0x1ED7, 'V'), - (0x1ED8, 'M', u'ộ'), - (0x1ED9, 'V'), - (0x1EDA, 'M', u'ớ'), - (0x1EDB, 'V'), - (0x1EDC, 'M', u'ờ'), - (0x1EDD, 'V'), - (0x1EDE, 'M', u'ở'), - (0x1EDF, 'V'), - (0x1EE0, 'M', u'ỡ'), - (0x1EE1, 'V'), - (0x1EE2, 'M', u'ợ'), - (0x1EE3, 'V'), - (0x1EE4, 'M', u'ụ'), - (0x1EE5, 'V'), - (0x1EE6, 'M', u'ủ'), - (0x1EE7, 'V'), - (0x1EE8, 'M', u'ứ'), - (0x1EE9, 'V'), - (0x1EEA, 'M', u'ừ'), - (0x1EEB, 'V'), - (0x1EEC, 'M', u'ử'), - (0x1EED, 'V'), - (0x1EEE, 'M', u'ữ'), - (0x1EEF, 'V'), - (0x1EF0, 'M', u'ự'), - (0x1EF1, 'V'), - (0x1EF2, 'M', u'ỳ'), - (0x1EF3, 'V'), - (0x1EF4, 'M', u'ỵ'), - (0x1EF5, 'V'), - (0x1EF6, 'M', u'ỷ'), - (0x1EF7, 'V'), - (0x1EF8, 'M', u'ỹ'), - (0x1EF9, 'V'), - (0x1EFA, 'M', u'ỻ'), - (0x1EFB, 'V'), - (0x1EFC, 'M', u'ỽ'), - (0x1EFD, 'V'), - (0x1EFE, 'M', u'ỿ'), - (0x1EFF, 'V'), - (0x1F08, 'M', u'ἀ'), - (0x1F09, 'M', u'ἁ'), - (0x1F0A, 'M', u'ἂ'), - (0x1F0B, 'M', u'ἃ'), - (0x1F0C, 'M', u'ἄ'), - (0x1F0D, 'M', u'ἅ'), - ] - -def _seg_19(): - return [ - (0x1F0E, 'M', u'ἆ'), - (0x1F0F, 'M', u'ἇ'), - (0x1F10, 'V'), - (0x1F16, 'X'), - (0x1F18, 'M', u'ἐ'), - (0x1F19, 'M', u'ἑ'), - (0x1F1A, 'M', u'ἒ'), - (0x1F1B, 'M', u'ἓ'), - (0x1F1C, 'M', u'ἔ'), - (0x1F1D, 'M', u'ἕ'), - (0x1F1E, 'X'), - (0x1F20, 'V'), - (0x1F28, 'M', u'ἠ'), - (0x1F29, 'M', u'ἡ'), - (0x1F2A, 'M', u'ἢ'), - (0x1F2B, 'M', u'ἣ'), - (0x1F2C, 'M', u'ἤ'), - (0x1F2D, 'M', u'ἥ'), - (0x1F2E, 'M', u'ἦ'), - (0x1F2F, 'M', u'ἧ'), - (0x1F30, 'V'), - (0x1F38, 'M', u'ἰ'), - (0x1F39, 'M', u'ἱ'), - (0x1F3A, 'M', u'ἲ'), - (0x1F3B, 'M', u'ἳ'), - (0x1F3C, 'M', u'ἴ'), - (0x1F3D, 'M', u'ἵ'), - (0x1F3E, 'M', u'ἶ'), - (0x1F3F, 'M', u'ἷ'), - (0x1F40, 'V'), - (0x1F46, 'X'), - (0x1F48, 'M', u'ὀ'), - (0x1F49, 'M', u'ὁ'), - (0x1F4A, 'M', u'ὂ'), - (0x1F4B, 'M', u'ὃ'), - (0x1F4C, 'M', u'ὄ'), - (0x1F4D, 'M', u'ὅ'), - (0x1F4E, 'X'), - (0x1F50, 'V'), - (0x1F58, 'X'), - (0x1F59, 'M', u'ὑ'), - (0x1F5A, 'X'), - (0x1F5B, 'M', u'ὓ'), - (0x1F5C, 'X'), - (0x1F5D, 'M', u'ὕ'), - (0x1F5E, 'X'), - (0x1F5F, 'M', u'ὗ'), - (0x1F60, 'V'), - (0x1F68, 'M', u'ὠ'), - (0x1F69, 'M', u'ὡ'), - (0x1F6A, 'M', u'ὢ'), - (0x1F6B, 'M', u'ὣ'), - (0x1F6C, 'M', u'ὤ'), - (0x1F6D, 'M', u'ὥ'), - (0x1F6E, 'M', u'ὦ'), - (0x1F6F, 'M', u'ὧ'), - (0x1F70, 'V'), - (0x1F71, 'M', u'ά'), - (0x1F72, 'V'), - (0x1F73, 'M', u'έ'), - (0x1F74, 'V'), - (0x1F75, 'M', u'ή'), - (0x1F76, 'V'), - (0x1F77, 'M', u'ί'), - (0x1F78, 'V'), - (0x1F79, 'M', u'ό'), - (0x1F7A, 'V'), - (0x1F7B, 'M', u'ύ'), - (0x1F7C, 'V'), - (0x1F7D, 'M', u'ώ'), - (0x1F7E, 'X'), - (0x1F80, 'M', u'ἀι'), - (0x1F81, 'M', u'ἁι'), - (0x1F82, 'M', u'ἂι'), - (0x1F83, 'M', u'ἃι'), - (0x1F84, 'M', u'ἄι'), - (0x1F85, 'M', u'ἅι'), - (0x1F86, 'M', u'ἆι'), - (0x1F87, 'M', u'ἇι'), - (0x1F88, 'M', u'ἀι'), - (0x1F89, 'M', u'ἁι'), - (0x1F8A, 'M', u'ἂι'), - (0x1F8B, 'M', u'ἃι'), - (0x1F8C, 'M', u'ἄι'), - (0x1F8D, 'M', u'ἅι'), - (0x1F8E, 'M', u'ἆι'), - (0x1F8F, 'M', u'ἇι'), - (0x1F90, 'M', u'ἠι'), - (0x1F91, 'M', u'ἡι'), - (0x1F92, 'M', u'ἢι'), - (0x1F93, 'M', u'ἣι'), - (0x1F94, 'M', u'ἤι'), - (0x1F95, 'M', u'ἥι'), - (0x1F96, 'M', u'ἦι'), - (0x1F97, 'M', u'ἧι'), - (0x1F98, 'M', u'ἠι'), - (0x1F99, 'M', u'ἡι'), - (0x1F9A, 'M', u'ἢι'), - (0x1F9B, 'M', u'ἣι'), - (0x1F9C, 'M', u'ἤι'), - ] - -def _seg_20(): - return [ - (0x1F9D, 'M', u'ἥι'), - (0x1F9E, 'M', u'ἦι'), - (0x1F9F, 'M', u'ἧι'), - (0x1FA0, 'M', u'ὠι'), - (0x1FA1, 'M', u'ὡι'), - (0x1FA2, 'M', u'ὢι'), - (0x1FA3, 'M', u'ὣι'), - (0x1FA4, 'M', u'ὤι'), - (0x1FA5, 'M', u'ὥι'), - (0x1FA6, 'M', u'ὦι'), - (0x1FA7, 'M', u'ὧι'), - (0x1FA8, 'M', u'ὠι'), - (0x1FA9, 'M', u'ὡι'), - (0x1FAA, 'M', u'ὢι'), - (0x1FAB, 'M', u'ὣι'), - (0x1FAC, 'M', u'ὤι'), - (0x1FAD, 'M', u'ὥι'), - (0x1FAE, 'M', u'ὦι'), - (0x1FAF, 'M', u'ὧι'), - (0x1FB0, 'V'), - (0x1FB2, 'M', u'ὰι'), - (0x1FB3, 'M', u'αι'), - (0x1FB4, 'M', u'άι'), - (0x1FB5, 'X'), - (0x1FB6, 'V'), - (0x1FB7, 'M', u'ᾶι'), - (0x1FB8, 'M', u'ᾰ'), - (0x1FB9, 'M', u'ᾱ'), - (0x1FBA, 'M', u'ὰ'), - (0x1FBB, 'M', u'ά'), - (0x1FBC, 'M', u'αι'), - (0x1FBD, '3', u' ̓'), - (0x1FBE, 'M', u'ι'), - (0x1FBF, '3', u' ̓'), - (0x1FC0, '3', u' ͂'), - (0x1FC1, '3', u' ̈͂'), - (0x1FC2, 'M', u'ὴι'), - (0x1FC3, 'M', u'ηι'), - (0x1FC4, 'M', u'ήι'), - (0x1FC5, 'X'), - (0x1FC6, 'V'), - (0x1FC7, 'M', u'ῆι'), - (0x1FC8, 'M', u'ὲ'), - (0x1FC9, 'M', u'έ'), - (0x1FCA, 'M', u'ὴ'), - (0x1FCB, 'M', u'ή'), - (0x1FCC, 'M', u'ηι'), - (0x1FCD, '3', u' ̓̀'), - (0x1FCE, '3', u' ̓́'), - (0x1FCF, '3', u' ̓͂'), - (0x1FD0, 'V'), - (0x1FD3, 'M', u'ΐ'), - (0x1FD4, 'X'), - (0x1FD6, 'V'), - (0x1FD8, 'M', u'ῐ'), - (0x1FD9, 'M', u'ῑ'), - (0x1FDA, 'M', u'ὶ'), - (0x1FDB, 'M', u'ί'), - (0x1FDC, 'X'), - (0x1FDD, '3', u' ̔̀'), - (0x1FDE, '3', u' ̔́'), - (0x1FDF, '3', u' ̔͂'), - (0x1FE0, 'V'), - (0x1FE3, 'M', u'ΰ'), - (0x1FE4, 'V'), - (0x1FE8, 'M', u'ῠ'), - (0x1FE9, 'M', u'ῡ'), - (0x1FEA, 'M', u'ὺ'), - (0x1FEB, 'M', u'ύ'), - (0x1FEC, 'M', u'ῥ'), - (0x1FED, '3', u' ̈̀'), - (0x1FEE, '3', u' ̈́'), - (0x1FEF, '3', u'`'), - (0x1FF0, 'X'), - (0x1FF2, 'M', u'ὼι'), - (0x1FF3, 'M', u'ωι'), - (0x1FF4, 'M', u'ώι'), - (0x1FF5, 'X'), - (0x1FF6, 'V'), - (0x1FF7, 'M', u'ῶι'), - (0x1FF8, 'M', u'ὸ'), - (0x1FF9, 'M', u'ό'), - (0x1FFA, 'M', u'ὼ'), - (0x1FFB, 'M', u'ώ'), - (0x1FFC, 'M', u'ωι'), - (0x1FFD, '3', u' ́'), - (0x1FFE, '3', u' ̔'), - (0x1FFF, 'X'), - (0x2000, '3', u' '), - (0x200B, 'I'), - (0x200C, 'D', u''), - (0x200E, 'X'), - (0x2010, 'V'), - (0x2011, 'M', u'‐'), - (0x2012, 'V'), - (0x2017, '3', u' ̳'), - (0x2018, 'V'), - (0x2024, 'X'), - (0x2027, 'V'), - (0x2028, 'X'), - ] - -def _seg_21(): - return [ - (0x202F, '3', u' '), - (0x2030, 'V'), - (0x2033, 'M', u'′′'), - (0x2034, 'M', u'′′′'), - (0x2035, 'V'), - (0x2036, 'M', u'‵‵'), - (0x2037, 'M', u'‵‵‵'), - (0x2038, 'V'), - (0x203C, '3', u'!!'), - (0x203D, 'V'), - (0x203E, '3', u' ̅'), - (0x203F, 'V'), - (0x2047, '3', u'??'), - (0x2048, '3', u'?!'), - (0x2049, '3', u'!?'), - (0x204A, 'V'), - (0x2057, 'M', u'′′′′'), - (0x2058, 'V'), - (0x205F, '3', u' '), - (0x2060, 'I'), - (0x2061, 'X'), - (0x2064, 'I'), - (0x2065, 'X'), - (0x2070, 'M', u'0'), - (0x2071, 'M', u'i'), - (0x2072, 'X'), - (0x2074, 'M', u'4'), - (0x2075, 'M', u'5'), - (0x2076, 'M', u'6'), - (0x2077, 'M', u'7'), - (0x2078, 'M', u'8'), - (0x2079, 'M', u'9'), - (0x207A, '3', u'+'), - (0x207B, 'M', u'−'), - (0x207C, '3', u'='), - (0x207D, '3', u'('), - (0x207E, '3', u')'), - (0x207F, 'M', u'n'), - (0x2080, 'M', u'0'), - (0x2081, 'M', u'1'), - (0x2082, 'M', u'2'), - (0x2083, 'M', u'3'), - (0x2084, 'M', u'4'), - (0x2085, 'M', u'5'), - (0x2086, 'M', u'6'), - (0x2087, 'M', u'7'), - (0x2088, 'M', u'8'), - (0x2089, 'M', u'9'), - (0x208A, '3', u'+'), - (0x208B, 'M', u'−'), - (0x208C, '3', u'='), - (0x208D, '3', u'('), - (0x208E, '3', u')'), - (0x208F, 'X'), - (0x2090, 'M', u'a'), - (0x2091, 'M', u'e'), - (0x2092, 'M', u'o'), - (0x2093, 'M', u'x'), - (0x2094, 'M', u'ə'), - (0x2095, 'M', u'h'), - (0x2096, 'M', u'k'), - (0x2097, 'M', u'l'), - (0x2098, 'M', u'm'), - (0x2099, 'M', u'n'), - (0x209A, 'M', u'p'), - (0x209B, 'M', u's'), - (0x209C, 'M', u't'), - (0x209D, 'X'), - (0x20A0, 'V'), - (0x20A8, 'M', u'rs'), - (0x20A9, 'V'), - (0x20C0, 'X'), - (0x20D0, 'V'), - (0x20F1, 'X'), - (0x2100, '3', u'a/c'), - (0x2101, '3', u'a/s'), - (0x2102, 'M', u'c'), - (0x2103, 'M', u'°c'), - (0x2104, 'V'), - (0x2105, '3', u'c/o'), - (0x2106, '3', u'c/u'), - (0x2107, 'M', u'ɛ'), - (0x2108, 'V'), - (0x2109, 'M', u'°f'), - (0x210A, 'M', u'g'), - (0x210B, 'M', u'h'), - (0x210F, 'M', u'ħ'), - (0x2110, 'M', u'i'), - (0x2112, 'M', u'l'), - (0x2114, 'V'), - (0x2115, 'M', u'n'), - (0x2116, 'M', u'no'), - (0x2117, 'V'), - (0x2119, 'M', u'p'), - (0x211A, 'M', u'q'), - (0x211B, 'M', u'r'), - (0x211E, 'V'), - (0x2120, 'M', u'sm'), - (0x2121, 'M', u'tel'), - (0x2122, 'M', u'tm'), - ] - -def _seg_22(): - return [ - (0x2123, 'V'), - (0x2124, 'M', u'z'), - (0x2125, 'V'), - (0x2126, 'M', u'ω'), - (0x2127, 'V'), - (0x2128, 'M', u'z'), - (0x2129, 'V'), - (0x212A, 'M', u'k'), - (0x212B, 'M', u'å'), - (0x212C, 'M', u'b'), - (0x212D, 'M', u'c'), - (0x212E, 'V'), - (0x212F, 'M', u'e'), - (0x2131, 'M', u'f'), - (0x2132, 'X'), - (0x2133, 'M', u'm'), - (0x2134, 'M', u'o'), - (0x2135, 'M', u'א'), - (0x2136, 'M', u'ב'), - (0x2137, 'M', u'ג'), - (0x2138, 'M', u'ד'), - (0x2139, 'M', u'i'), - (0x213A, 'V'), - (0x213B, 'M', u'fax'), - (0x213C, 'M', u'π'), - (0x213D, 'M', u'γ'), - (0x213F, 'M', u'π'), - (0x2140, 'M', u'∑'), - (0x2141, 'V'), - (0x2145, 'M', u'd'), - (0x2147, 'M', u'e'), - (0x2148, 'M', u'i'), - (0x2149, 'M', u'j'), - (0x214A, 'V'), - (0x2150, 'M', u'1⁄7'), - (0x2151, 'M', u'1⁄9'), - (0x2152, 'M', u'1⁄10'), - (0x2153, 'M', u'1⁄3'), - (0x2154, 'M', u'2⁄3'), - (0x2155, 'M', u'1⁄5'), - (0x2156, 'M', u'2⁄5'), - (0x2157, 'M', u'3⁄5'), - (0x2158, 'M', u'4⁄5'), - (0x2159, 'M', u'1⁄6'), - (0x215A, 'M', u'5⁄6'), - (0x215B, 'M', u'1⁄8'), - (0x215C, 'M', u'3⁄8'), - (0x215D, 'M', u'5⁄8'), - (0x215E, 'M', u'7⁄8'), - (0x215F, 'M', u'1⁄'), - (0x2160, 'M', u'i'), - (0x2161, 'M', u'ii'), - (0x2162, 'M', u'iii'), - (0x2163, 'M', u'iv'), - (0x2164, 'M', u'v'), - (0x2165, 'M', u'vi'), - (0x2166, 'M', u'vii'), - (0x2167, 'M', u'viii'), - (0x2168, 'M', u'ix'), - (0x2169, 'M', u'x'), - (0x216A, 'M', u'xi'), - (0x216B, 'M', u'xii'), - (0x216C, 'M', u'l'), - (0x216D, 'M', u'c'), - (0x216E, 'M', u'd'), - (0x216F, 'M', u'm'), - (0x2170, 'M', u'i'), - (0x2171, 'M', u'ii'), - (0x2172, 'M', u'iii'), - (0x2173, 'M', u'iv'), - (0x2174, 'M', u'v'), - (0x2175, 'M', u'vi'), - (0x2176, 'M', u'vii'), - (0x2177, 'M', u'viii'), - (0x2178, 'M', u'ix'), - (0x2179, 'M', u'x'), - (0x217A, 'M', u'xi'), - (0x217B, 'M', u'xii'), - (0x217C, 'M', u'l'), - (0x217D, 'M', u'c'), - (0x217E, 'M', u'd'), - (0x217F, 'M', u'm'), - (0x2180, 'V'), - (0x2183, 'X'), - (0x2184, 'V'), - (0x2189, 'M', u'0⁄3'), - (0x218A, 'V'), - (0x218C, 'X'), - (0x2190, 'V'), - (0x222C, 'M', u'∫∫'), - (0x222D, 'M', u'∫∫∫'), - (0x222E, 'V'), - (0x222F, 'M', u'∮∮'), - (0x2230, 'M', u'∮∮∮'), - (0x2231, 'V'), - (0x2260, '3'), - (0x2261, 'V'), - (0x226E, '3'), - (0x2270, 'V'), - (0x2329, 'M', u'〈'), - ] - -def _seg_23(): - return [ - (0x232A, 'M', u'〉'), - (0x232B, 'V'), - (0x2427, 'X'), - (0x2440, 'V'), - (0x244B, 'X'), - (0x2460, 'M', u'1'), - (0x2461, 'M', u'2'), - (0x2462, 'M', u'3'), - (0x2463, 'M', u'4'), - (0x2464, 'M', u'5'), - (0x2465, 'M', u'6'), - (0x2466, 'M', u'7'), - (0x2467, 'M', u'8'), - (0x2468, 'M', u'9'), - (0x2469, 'M', u'10'), - (0x246A, 'M', u'11'), - (0x246B, 'M', u'12'), - (0x246C, 'M', u'13'), - (0x246D, 'M', u'14'), - (0x246E, 'M', u'15'), - (0x246F, 'M', u'16'), - (0x2470, 'M', u'17'), - (0x2471, 'M', u'18'), - (0x2472, 'M', u'19'), - (0x2473, 'M', u'20'), - (0x2474, '3', u'(1)'), - (0x2475, '3', u'(2)'), - (0x2476, '3', u'(3)'), - (0x2477, '3', u'(4)'), - (0x2478, '3', u'(5)'), - (0x2479, '3', u'(6)'), - (0x247A, '3', u'(7)'), - (0x247B, '3', u'(8)'), - (0x247C, '3', u'(9)'), - (0x247D, '3', u'(10)'), - (0x247E, '3', u'(11)'), - (0x247F, '3', u'(12)'), - (0x2480, '3', u'(13)'), - (0x2481, '3', u'(14)'), - (0x2482, '3', u'(15)'), - (0x2483, '3', u'(16)'), - (0x2484, '3', u'(17)'), - (0x2485, '3', u'(18)'), - (0x2486, '3', u'(19)'), - (0x2487, '3', u'(20)'), - (0x2488, 'X'), - (0x249C, '3', u'(a)'), - (0x249D, '3', u'(b)'), - (0x249E, '3', u'(c)'), - (0x249F, '3', u'(d)'), - (0x24A0, '3', u'(e)'), - (0x24A1, '3', u'(f)'), - (0x24A2, '3', u'(g)'), - (0x24A3, '3', u'(h)'), - (0x24A4, '3', u'(i)'), - (0x24A5, '3', u'(j)'), - (0x24A6, '3', u'(k)'), - (0x24A7, '3', u'(l)'), - (0x24A8, '3', u'(m)'), - (0x24A9, '3', u'(n)'), - (0x24AA, '3', u'(o)'), - (0x24AB, '3', u'(p)'), - (0x24AC, '3', u'(q)'), - (0x24AD, '3', u'(r)'), - (0x24AE, '3', u'(s)'), - (0x24AF, '3', u'(t)'), - (0x24B0, '3', u'(u)'), - (0x24B1, '3', u'(v)'), - (0x24B2, '3', u'(w)'), - (0x24B3, '3', u'(x)'), - (0x24B4, '3', u'(y)'), - (0x24B5, '3', u'(z)'), - (0x24B6, 'M', u'a'), - (0x24B7, 'M', u'b'), - (0x24B8, 'M', u'c'), - (0x24B9, 'M', u'd'), - (0x24BA, 'M', u'e'), - (0x24BB, 'M', u'f'), - (0x24BC, 'M', u'g'), - (0x24BD, 'M', u'h'), - (0x24BE, 'M', u'i'), - (0x24BF, 'M', u'j'), - (0x24C0, 'M', u'k'), - (0x24C1, 'M', u'l'), - (0x24C2, 'M', u'm'), - (0x24C3, 'M', u'n'), - (0x24C4, 'M', u'o'), - (0x24C5, 'M', u'p'), - (0x24C6, 'M', u'q'), - (0x24C7, 'M', u'r'), - (0x24C8, 'M', u's'), - (0x24C9, 'M', u't'), - (0x24CA, 'M', u'u'), - (0x24CB, 'M', u'v'), - (0x24CC, 'M', u'w'), - (0x24CD, 'M', u'x'), - (0x24CE, 'M', u'y'), - (0x24CF, 'M', u'z'), - (0x24D0, 'M', u'a'), - (0x24D1, 'M', u'b'), - ] - -def _seg_24(): - return [ - (0x24D2, 'M', u'c'), - (0x24D3, 'M', u'd'), - (0x24D4, 'M', u'e'), - (0x24D5, 'M', u'f'), - (0x24D6, 'M', u'g'), - (0x24D7, 'M', u'h'), - (0x24D8, 'M', u'i'), - (0x24D9, 'M', u'j'), - (0x24DA, 'M', u'k'), - (0x24DB, 'M', u'l'), - (0x24DC, 'M', u'm'), - (0x24DD, 'M', u'n'), - (0x24DE, 'M', u'o'), - (0x24DF, 'M', u'p'), - (0x24E0, 'M', u'q'), - (0x24E1, 'M', u'r'), - (0x24E2, 'M', u's'), - (0x24E3, 'M', u't'), - (0x24E4, 'M', u'u'), - (0x24E5, 'M', u'v'), - (0x24E6, 'M', u'w'), - (0x24E7, 'M', u'x'), - (0x24E8, 'M', u'y'), - (0x24E9, 'M', u'z'), - (0x24EA, 'M', u'0'), - (0x24EB, 'V'), - (0x2A0C, 'M', u'∫∫∫∫'), - (0x2A0D, 'V'), - (0x2A74, '3', u'::='), - (0x2A75, '3', u'=='), - (0x2A76, '3', u'==='), - (0x2A77, 'V'), - (0x2ADC, 'M', u'⫝̸'), - (0x2ADD, 'V'), - (0x2B74, 'X'), - (0x2B76, 'V'), - (0x2B96, 'X'), - (0x2B98, 'V'), - (0x2BBA, 'X'), - (0x2BBD, 'V'), - (0x2BC9, 'X'), - (0x2BCA, 'V'), - (0x2BD3, 'X'), - (0x2BEC, 'V'), - (0x2BF0, 'X'), - (0x2C00, 'M', u'ⰰ'), - (0x2C01, 'M', u'ⰱ'), - (0x2C02, 'M', u'ⰲ'), - (0x2C03, 'M', u'ⰳ'), - (0x2C04, 'M', u'ⰴ'), - (0x2C05, 'M', u'ⰵ'), - (0x2C06, 'M', u'ⰶ'), - (0x2C07, 'M', u'ⰷ'), - (0x2C08, 'M', u'ⰸ'), - (0x2C09, 'M', u'ⰹ'), - (0x2C0A, 'M', u'ⰺ'), - (0x2C0B, 'M', u'ⰻ'), - (0x2C0C, 'M', u'ⰼ'), - (0x2C0D, 'M', u'ⰽ'), - (0x2C0E, 'M', u'ⰾ'), - (0x2C0F, 'M', u'ⰿ'), - (0x2C10, 'M', u'ⱀ'), - (0x2C11, 'M', u'ⱁ'), - (0x2C12, 'M', u'ⱂ'), - (0x2C13, 'M', u'ⱃ'), - (0x2C14, 'M', u'ⱄ'), - (0x2C15, 'M', u'ⱅ'), - (0x2C16, 'M', u'ⱆ'), - (0x2C17, 'M', u'ⱇ'), - (0x2C18, 'M', u'ⱈ'), - (0x2C19, 'M', u'ⱉ'), - (0x2C1A, 'M', u'ⱊ'), - (0x2C1B, 'M', u'ⱋ'), - (0x2C1C, 'M', u'ⱌ'), - (0x2C1D, 'M', u'ⱍ'), - (0x2C1E, 'M', u'ⱎ'), - (0x2C1F, 'M', u'ⱏ'), - (0x2C20, 'M', u'ⱐ'), - (0x2C21, 'M', u'ⱑ'), - (0x2C22, 'M', u'ⱒ'), - (0x2C23, 'M', u'ⱓ'), - (0x2C24, 'M', u'ⱔ'), - (0x2C25, 'M', u'ⱕ'), - (0x2C26, 'M', u'ⱖ'), - (0x2C27, 'M', u'ⱗ'), - (0x2C28, 'M', u'ⱘ'), - (0x2C29, 'M', u'ⱙ'), - (0x2C2A, 'M', u'ⱚ'), - (0x2C2B, 'M', u'ⱛ'), - (0x2C2C, 'M', u'ⱜ'), - (0x2C2D, 'M', u'ⱝ'), - (0x2C2E, 'M', u'ⱞ'), - (0x2C2F, 'X'), - (0x2C30, 'V'), - (0x2C5F, 'X'), - (0x2C60, 'M', u'ⱡ'), - (0x2C61, 'V'), - (0x2C62, 'M', u'ɫ'), - (0x2C63, 'M', u'ᵽ'), - (0x2C64, 'M', u'ɽ'), - ] - -def _seg_25(): - return [ - (0x2C65, 'V'), - (0x2C67, 'M', u'ⱨ'), - (0x2C68, 'V'), - (0x2C69, 'M', u'ⱪ'), - (0x2C6A, 'V'), - (0x2C6B, 'M', u'ⱬ'), - (0x2C6C, 'V'), - (0x2C6D, 'M', u'ɑ'), - (0x2C6E, 'M', u'ɱ'), - (0x2C6F, 'M', u'ɐ'), - (0x2C70, 'M', u'ɒ'), - (0x2C71, 'V'), - (0x2C72, 'M', u'ⱳ'), - (0x2C73, 'V'), - (0x2C75, 'M', u'ⱶ'), - (0x2C76, 'V'), - (0x2C7C, 'M', u'j'), - (0x2C7D, 'M', u'v'), - (0x2C7E, 'M', u'ȿ'), - (0x2C7F, 'M', u'ɀ'), - (0x2C80, 'M', u'ⲁ'), - (0x2C81, 'V'), - (0x2C82, 'M', u'ⲃ'), - (0x2C83, 'V'), - (0x2C84, 'M', u'ⲅ'), - (0x2C85, 'V'), - (0x2C86, 'M', u'ⲇ'), - (0x2C87, 'V'), - (0x2C88, 'M', u'ⲉ'), - (0x2C89, 'V'), - (0x2C8A, 'M', u'ⲋ'), - (0x2C8B, 'V'), - (0x2C8C, 'M', u'ⲍ'), - (0x2C8D, 'V'), - (0x2C8E, 'M', u'ⲏ'), - (0x2C8F, 'V'), - (0x2C90, 'M', u'ⲑ'), - (0x2C91, 'V'), - (0x2C92, 'M', u'ⲓ'), - (0x2C93, 'V'), - (0x2C94, 'M', u'ⲕ'), - (0x2C95, 'V'), - (0x2C96, 'M', u'ⲗ'), - (0x2C97, 'V'), - (0x2C98, 'M', u'ⲙ'), - (0x2C99, 'V'), - (0x2C9A, 'M', u'ⲛ'), - (0x2C9B, 'V'), - (0x2C9C, 'M', u'ⲝ'), - (0x2C9D, 'V'), - (0x2C9E, 'M', u'ⲟ'), - (0x2C9F, 'V'), - (0x2CA0, 'M', u'ⲡ'), - (0x2CA1, 'V'), - (0x2CA2, 'M', u'ⲣ'), - (0x2CA3, 'V'), - (0x2CA4, 'M', u'ⲥ'), - (0x2CA5, 'V'), - (0x2CA6, 'M', u'ⲧ'), - (0x2CA7, 'V'), - (0x2CA8, 'M', u'ⲩ'), - (0x2CA9, 'V'), - (0x2CAA, 'M', u'ⲫ'), - (0x2CAB, 'V'), - (0x2CAC, 'M', u'ⲭ'), - (0x2CAD, 'V'), - (0x2CAE, 'M', u'ⲯ'), - (0x2CAF, 'V'), - (0x2CB0, 'M', u'ⲱ'), - (0x2CB1, 'V'), - (0x2CB2, 'M', u'ⲳ'), - (0x2CB3, 'V'), - (0x2CB4, 'M', u'ⲵ'), - (0x2CB5, 'V'), - (0x2CB6, 'M', u'ⲷ'), - (0x2CB7, 'V'), - (0x2CB8, 'M', u'ⲹ'), - (0x2CB9, 'V'), - (0x2CBA, 'M', u'ⲻ'), - (0x2CBB, 'V'), - (0x2CBC, 'M', u'ⲽ'), - (0x2CBD, 'V'), - (0x2CBE, 'M', u'ⲿ'), - (0x2CBF, 'V'), - (0x2CC0, 'M', u'ⳁ'), - (0x2CC1, 'V'), - (0x2CC2, 'M', u'ⳃ'), - (0x2CC3, 'V'), - (0x2CC4, 'M', u'ⳅ'), - (0x2CC5, 'V'), - (0x2CC6, 'M', u'ⳇ'), - (0x2CC7, 'V'), - (0x2CC8, 'M', u'ⳉ'), - (0x2CC9, 'V'), - (0x2CCA, 'M', u'ⳋ'), - (0x2CCB, 'V'), - (0x2CCC, 'M', u'ⳍ'), - (0x2CCD, 'V'), - (0x2CCE, 'M', u'ⳏ'), - (0x2CCF, 'V'), - ] - -def _seg_26(): - return [ - (0x2CD0, 'M', u'ⳑ'), - (0x2CD1, 'V'), - (0x2CD2, 'M', u'ⳓ'), - (0x2CD3, 'V'), - (0x2CD4, 'M', u'ⳕ'), - (0x2CD5, 'V'), - (0x2CD6, 'M', u'ⳗ'), - (0x2CD7, 'V'), - (0x2CD8, 'M', u'ⳙ'), - (0x2CD9, 'V'), - (0x2CDA, 'M', u'ⳛ'), - (0x2CDB, 'V'), - (0x2CDC, 'M', u'ⳝ'), - (0x2CDD, 'V'), - (0x2CDE, 'M', u'ⳟ'), - (0x2CDF, 'V'), - (0x2CE0, 'M', u'ⳡ'), - (0x2CE1, 'V'), - (0x2CE2, 'M', u'ⳣ'), - (0x2CE3, 'V'), - (0x2CEB, 'M', u'ⳬ'), - (0x2CEC, 'V'), - (0x2CED, 'M', u'ⳮ'), - (0x2CEE, 'V'), - (0x2CF2, 'M', u'ⳳ'), - (0x2CF3, 'V'), - (0x2CF4, 'X'), - (0x2CF9, 'V'), - (0x2D26, 'X'), - (0x2D27, 'V'), - (0x2D28, 'X'), - (0x2D2D, 'V'), - (0x2D2E, 'X'), - (0x2D30, 'V'), - (0x2D68, 'X'), - (0x2D6F, 'M', u'ⵡ'), - (0x2D70, 'V'), - (0x2D71, 'X'), - (0x2D7F, 'V'), - (0x2D97, 'X'), - (0x2DA0, 'V'), - (0x2DA7, 'X'), - (0x2DA8, 'V'), - (0x2DAF, 'X'), - (0x2DB0, 'V'), - (0x2DB7, 'X'), - (0x2DB8, 'V'), - (0x2DBF, 'X'), - (0x2DC0, 'V'), - (0x2DC7, 'X'), - (0x2DC8, 'V'), - (0x2DCF, 'X'), - (0x2DD0, 'V'), - (0x2DD7, 'X'), - (0x2DD8, 'V'), - (0x2DDF, 'X'), - (0x2DE0, 'V'), - (0x2E4A, 'X'), - (0x2E80, 'V'), - (0x2E9A, 'X'), - (0x2E9B, 'V'), - (0x2E9F, 'M', u'母'), - (0x2EA0, 'V'), - (0x2EF3, 'M', u'龟'), - (0x2EF4, 'X'), - (0x2F00, 'M', u'一'), - (0x2F01, 'M', u'丨'), - (0x2F02, 'M', u'丶'), - (0x2F03, 'M', u'丿'), - (0x2F04, 'M', u'乙'), - (0x2F05, 'M', u'亅'), - (0x2F06, 'M', u'二'), - (0x2F07, 'M', u'亠'), - (0x2F08, 'M', u'人'), - (0x2F09, 'M', u'儿'), - (0x2F0A, 'M', u'入'), - (0x2F0B, 'M', u'八'), - (0x2F0C, 'M', u'冂'), - (0x2F0D, 'M', u'冖'), - (0x2F0E, 'M', u'冫'), - (0x2F0F, 'M', u'几'), - (0x2F10, 'M', u'凵'), - (0x2F11, 'M', u'刀'), - (0x2F12, 'M', u'力'), - (0x2F13, 'M', u'勹'), - (0x2F14, 'M', u'匕'), - (0x2F15, 'M', u'匚'), - (0x2F16, 'M', u'匸'), - (0x2F17, 'M', u'十'), - (0x2F18, 'M', u'卜'), - (0x2F19, 'M', u'卩'), - (0x2F1A, 'M', u'厂'), - (0x2F1B, 'M', u'厶'), - (0x2F1C, 'M', u'又'), - (0x2F1D, 'M', u'口'), - (0x2F1E, 'M', u'囗'), - (0x2F1F, 'M', u'土'), - (0x2F20, 'M', u'士'), - (0x2F21, 'M', u'夂'), - (0x2F22, 'M', u'夊'), - ] - -def _seg_27(): - return [ - (0x2F23, 'M', u'夕'), - (0x2F24, 'M', u'大'), - (0x2F25, 'M', u'女'), - (0x2F26, 'M', u'子'), - (0x2F27, 'M', u'宀'), - (0x2F28, 'M', u'寸'), - (0x2F29, 'M', u'小'), - (0x2F2A, 'M', u'尢'), - (0x2F2B, 'M', u'尸'), - (0x2F2C, 'M', u'屮'), - (0x2F2D, 'M', u'山'), - (0x2F2E, 'M', u'巛'), - (0x2F2F, 'M', u'工'), - (0x2F30, 'M', u'己'), - (0x2F31, 'M', u'巾'), - (0x2F32, 'M', u'干'), - (0x2F33, 'M', u'幺'), - (0x2F34, 'M', u'广'), - (0x2F35, 'M', u'廴'), - (0x2F36, 'M', u'廾'), - (0x2F37, 'M', u'弋'), - (0x2F38, 'M', u'弓'), - (0x2F39, 'M', u'彐'), - (0x2F3A, 'M', u'彡'), - (0x2F3B, 'M', u'彳'), - (0x2F3C, 'M', u'心'), - (0x2F3D, 'M', u'戈'), - (0x2F3E, 'M', u'戶'), - (0x2F3F, 'M', u'手'), - (0x2F40, 'M', u'支'), - (0x2F41, 'M', u'攴'), - (0x2F42, 'M', u'文'), - (0x2F43, 'M', u'斗'), - (0x2F44, 'M', u'斤'), - (0x2F45, 'M', u'方'), - (0x2F46, 'M', u'无'), - (0x2F47, 'M', u'日'), - (0x2F48, 'M', u'曰'), - (0x2F49, 'M', u'月'), - (0x2F4A, 'M', u'木'), - (0x2F4B, 'M', u'欠'), - (0x2F4C, 'M', u'止'), - (0x2F4D, 'M', u'歹'), - (0x2F4E, 'M', u'殳'), - (0x2F4F, 'M', u'毋'), - (0x2F50, 'M', u'比'), - (0x2F51, 'M', u'毛'), - (0x2F52, 'M', u'氏'), - (0x2F53, 'M', u'气'), - (0x2F54, 'M', u'水'), - (0x2F55, 'M', u'火'), - (0x2F56, 'M', u'爪'), - (0x2F57, 'M', u'父'), - (0x2F58, 'M', u'爻'), - (0x2F59, 'M', u'爿'), - (0x2F5A, 'M', u'片'), - (0x2F5B, 'M', u'牙'), - (0x2F5C, 'M', u'牛'), - (0x2F5D, 'M', u'犬'), - (0x2F5E, 'M', u'玄'), - (0x2F5F, 'M', u'玉'), - (0x2F60, 'M', u'瓜'), - (0x2F61, 'M', u'瓦'), - (0x2F62, 'M', u'甘'), - (0x2F63, 'M', u'生'), - (0x2F64, 'M', u'用'), - (0x2F65, 'M', u'田'), - (0x2F66, 'M', u'疋'), - (0x2F67, 'M', u'疒'), - (0x2F68, 'M', u'癶'), - (0x2F69, 'M', u'白'), - (0x2F6A, 'M', u'皮'), - (0x2F6B, 'M', u'皿'), - (0x2F6C, 'M', u'目'), - (0x2F6D, 'M', u'矛'), - (0x2F6E, 'M', u'矢'), - (0x2F6F, 'M', u'石'), - (0x2F70, 'M', u'示'), - (0x2F71, 'M', u'禸'), - (0x2F72, 'M', u'禾'), - (0x2F73, 'M', u'穴'), - (0x2F74, 'M', u'立'), - (0x2F75, 'M', u'竹'), - (0x2F76, 'M', u'米'), - (0x2F77, 'M', u'糸'), - (0x2F78, 'M', u'缶'), - (0x2F79, 'M', u'网'), - (0x2F7A, 'M', u'羊'), - (0x2F7B, 'M', u'羽'), - (0x2F7C, 'M', u'老'), - (0x2F7D, 'M', u'而'), - (0x2F7E, 'M', u'耒'), - (0x2F7F, 'M', u'耳'), - (0x2F80, 'M', u'聿'), - (0x2F81, 'M', u'肉'), - (0x2F82, 'M', u'臣'), - (0x2F83, 'M', u'自'), - (0x2F84, 'M', u'至'), - (0x2F85, 'M', u'臼'), - (0x2F86, 'M', u'舌'), - ] - -def _seg_28(): - return [ - (0x2F87, 'M', u'舛'), - (0x2F88, 'M', u'舟'), - (0x2F89, 'M', u'艮'), - (0x2F8A, 'M', u'色'), - (0x2F8B, 'M', u'艸'), - (0x2F8C, 'M', u'虍'), - (0x2F8D, 'M', u'虫'), - (0x2F8E, 'M', u'血'), - (0x2F8F, 'M', u'行'), - (0x2F90, 'M', u'衣'), - (0x2F91, 'M', u'襾'), - (0x2F92, 'M', u'見'), - (0x2F93, 'M', u'角'), - (0x2F94, 'M', u'言'), - (0x2F95, 'M', u'谷'), - (0x2F96, 'M', u'豆'), - (0x2F97, 'M', u'豕'), - (0x2F98, 'M', u'豸'), - (0x2F99, 'M', u'貝'), - (0x2F9A, 'M', u'赤'), - (0x2F9B, 'M', u'走'), - (0x2F9C, 'M', u'足'), - (0x2F9D, 'M', u'身'), - (0x2F9E, 'M', u'車'), - (0x2F9F, 'M', u'辛'), - (0x2FA0, 'M', u'辰'), - (0x2FA1, 'M', u'辵'), - (0x2FA2, 'M', u'邑'), - (0x2FA3, 'M', u'酉'), - (0x2FA4, 'M', u'釆'), - (0x2FA5, 'M', u'里'), - (0x2FA6, 'M', u'金'), - (0x2FA7, 'M', u'長'), - (0x2FA8, 'M', u'門'), - (0x2FA9, 'M', u'阜'), - (0x2FAA, 'M', u'隶'), - (0x2FAB, 'M', u'隹'), - (0x2FAC, 'M', u'雨'), - (0x2FAD, 'M', u'靑'), - (0x2FAE, 'M', u'非'), - (0x2FAF, 'M', u'面'), - (0x2FB0, 'M', u'革'), - (0x2FB1, 'M', u'韋'), - (0x2FB2, 'M', u'韭'), - (0x2FB3, 'M', u'音'), - (0x2FB4, 'M', u'頁'), - (0x2FB5, 'M', u'風'), - (0x2FB6, 'M', u'飛'), - (0x2FB7, 'M', u'食'), - (0x2FB8, 'M', u'首'), - (0x2FB9, 'M', u'香'), - (0x2FBA, 'M', u'馬'), - (0x2FBB, 'M', u'骨'), - (0x2FBC, 'M', u'高'), - (0x2FBD, 'M', u'髟'), - (0x2FBE, 'M', u'鬥'), - (0x2FBF, 'M', u'鬯'), - (0x2FC0, 'M', u'鬲'), - (0x2FC1, 'M', u'鬼'), - (0x2FC2, 'M', u'魚'), - (0x2FC3, 'M', u'鳥'), - (0x2FC4, 'M', u'鹵'), - (0x2FC5, 'M', u'鹿'), - (0x2FC6, 'M', u'麥'), - (0x2FC7, 'M', u'麻'), - (0x2FC8, 'M', u'黃'), - (0x2FC9, 'M', u'黍'), - (0x2FCA, 'M', u'黑'), - (0x2FCB, 'M', u'黹'), - (0x2FCC, 'M', u'黽'), - (0x2FCD, 'M', u'鼎'), - (0x2FCE, 'M', u'鼓'), - (0x2FCF, 'M', u'鼠'), - (0x2FD0, 'M', u'鼻'), - (0x2FD1, 'M', u'齊'), - (0x2FD2, 'M', u'齒'), - (0x2FD3, 'M', u'龍'), - (0x2FD4, 'M', u'龜'), - (0x2FD5, 'M', u'龠'), - (0x2FD6, 'X'), - (0x3000, '3', u' '), - (0x3001, 'V'), - (0x3002, 'M', u'.'), - (0x3003, 'V'), - (0x3036, 'M', u'〒'), - (0x3037, 'V'), - (0x3038, 'M', u'十'), - (0x3039, 'M', u'卄'), - (0x303A, 'M', u'卅'), - (0x303B, 'V'), - (0x3040, 'X'), - (0x3041, 'V'), - (0x3097, 'X'), - (0x3099, 'V'), - (0x309B, '3', u' ゙'), - (0x309C, '3', u' ゚'), - (0x309D, 'V'), - (0x309F, 'M', u'より'), - (0x30A0, 'V'), - (0x30FF, 'M', u'コト'), - ] - -def _seg_29(): - return [ - (0x3100, 'X'), - (0x3105, 'V'), - (0x312F, 'X'), - (0x3131, 'M', u'ᄀ'), - (0x3132, 'M', u'ᄁ'), - (0x3133, 'M', u'ᆪ'), - (0x3134, 'M', u'ᄂ'), - (0x3135, 'M', u'ᆬ'), - (0x3136, 'M', u'ᆭ'), - (0x3137, 'M', u'ᄃ'), - (0x3138, 'M', u'ᄄ'), - (0x3139, 'M', u'ᄅ'), - (0x313A, 'M', u'ᆰ'), - (0x313B, 'M', u'ᆱ'), - (0x313C, 'M', u'ᆲ'), - (0x313D, 'M', u'ᆳ'), - (0x313E, 'M', u'ᆴ'), - (0x313F, 'M', u'ᆵ'), - (0x3140, 'M', u'ᄚ'), - (0x3141, 'M', u'ᄆ'), - (0x3142, 'M', u'ᄇ'), - (0x3143, 'M', u'ᄈ'), - (0x3144, 'M', u'ᄡ'), - (0x3145, 'M', u'ᄉ'), - (0x3146, 'M', u'ᄊ'), - (0x3147, 'M', u'ᄋ'), - (0x3148, 'M', u'ᄌ'), - (0x3149, 'M', u'ᄍ'), - (0x314A, 'M', u'ᄎ'), - (0x314B, 'M', u'ᄏ'), - (0x314C, 'M', u'ᄐ'), - (0x314D, 'M', u'ᄑ'), - (0x314E, 'M', u'ᄒ'), - (0x314F, 'M', u'ᅡ'), - (0x3150, 'M', u'ᅢ'), - (0x3151, 'M', u'ᅣ'), - (0x3152, 'M', u'ᅤ'), - (0x3153, 'M', u'ᅥ'), - (0x3154, 'M', u'ᅦ'), - (0x3155, 'M', u'ᅧ'), - (0x3156, 'M', u'ᅨ'), - (0x3157, 'M', u'ᅩ'), - (0x3158, 'M', u'ᅪ'), - (0x3159, 'M', u'ᅫ'), - (0x315A, 'M', u'ᅬ'), - (0x315B, 'M', u'ᅭ'), - (0x315C, 'M', u'ᅮ'), - (0x315D, 'M', u'ᅯ'), - (0x315E, 'M', u'ᅰ'), - (0x315F, 'M', u'ᅱ'), - (0x3160, 'M', u'ᅲ'), - (0x3161, 'M', u'ᅳ'), - (0x3162, 'M', u'ᅴ'), - (0x3163, 'M', u'ᅵ'), - (0x3164, 'X'), - (0x3165, 'M', u'ᄔ'), - (0x3166, 'M', u'ᄕ'), - (0x3167, 'M', u'ᇇ'), - (0x3168, 'M', u'ᇈ'), - (0x3169, 'M', u'ᇌ'), - (0x316A, 'M', u'ᇎ'), - (0x316B, 'M', u'ᇓ'), - (0x316C, 'M', u'ᇗ'), - (0x316D, 'M', u'ᇙ'), - (0x316E, 'M', u'ᄜ'), - (0x316F, 'M', u'ᇝ'), - (0x3170, 'M', u'ᇟ'), - (0x3171, 'M', u'ᄝ'), - (0x3172, 'M', u'ᄞ'), - (0x3173, 'M', u'ᄠ'), - (0x3174, 'M', u'ᄢ'), - (0x3175, 'M', u'ᄣ'), - (0x3176, 'M', u'ᄧ'), - (0x3177, 'M', u'ᄩ'), - (0x3178, 'M', u'ᄫ'), - (0x3179, 'M', u'ᄬ'), - (0x317A, 'M', u'ᄭ'), - (0x317B, 'M', u'ᄮ'), - (0x317C, 'M', u'ᄯ'), - (0x317D, 'M', u'ᄲ'), - (0x317E, 'M', u'ᄶ'), - (0x317F, 'M', u'ᅀ'), - (0x3180, 'M', u'ᅇ'), - (0x3181, 'M', u'ᅌ'), - (0x3182, 'M', u'ᇱ'), - (0x3183, 'M', u'ᇲ'), - (0x3184, 'M', u'ᅗ'), - (0x3185, 'M', u'ᅘ'), - (0x3186, 'M', u'ᅙ'), - (0x3187, 'M', u'ᆄ'), - (0x3188, 'M', u'ᆅ'), - (0x3189, 'M', u'ᆈ'), - (0x318A, 'M', u'ᆑ'), - (0x318B, 'M', u'ᆒ'), - (0x318C, 'M', u'ᆔ'), - (0x318D, 'M', u'ᆞ'), - (0x318E, 'M', u'ᆡ'), - (0x318F, 'X'), - (0x3190, 'V'), - (0x3192, 'M', u'一'), - ] - -def _seg_30(): - return [ - (0x3193, 'M', u'二'), - (0x3194, 'M', u'三'), - (0x3195, 'M', u'四'), - (0x3196, 'M', u'上'), - (0x3197, 'M', u'中'), - (0x3198, 'M', u'下'), - (0x3199, 'M', u'甲'), - (0x319A, 'M', u'乙'), - (0x319B, 'M', u'丙'), - (0x319C, 'M', u'丁'), - (0x319D, 'M', u'天'), - (0x319E, 'M', u'地'), - (0x319F, 'M', u'人'), - (0x31A0, 'V'), - (0x31BB, 'X'), - (0x31C0, 'V'), - (0x31E4, 'X'), - (0x31F0, 'V'), - (0x3200, '3', u'(ᄀ)'), - (0x3201, '3', u'(ᄂ)'), - (0x3202, '3', u'(ᄃ)'), - (0x3203, '3', u'(ᄅ)'), - (0x3204, '3', u'(ᄆ)'), - (0x3205, '3', u'(ᄇ)'), - (0x3206, '3', u'(ᄉ)'), - (0x3207, '3', u'(ᄋ)'), - (0x3208, '3', u'(ᄌ)'), - (0x3209, '3', u'(ᄎ)'), - (0x320A, '3', u'(ᄏ)'), - (0x320B, '3', u'(ᄐ)'), - (0x320C, '3', u'(ᄑ)'), - (0x320D, '3', u'(ᄒ)'), - (0x320E, '3', u'(가)'), - (0x320F, '3', u'(나)'), - (0x3210, '3', u'(다)'), - (0x3211, '3', u'(라)'), - (0x3212, '3', u'(마)'), - (0x3213, '3', u'(바)'), - (0x3214, '3', u'(사)'), - (0x3215, '3', u'(아)'), - (0x3216, '3', u'(자)'), - (0x3217, '3', u'(차)'), - (0x3218, '3', u'(카)'), - (0x3219, '3', u'(타)'), - (0x321A, '3', u'(파)'), - (0x321B, '3', u'(하)'), - (0x321C, '3', u'(주)'), - (0x321D, '3', u'(오전)'), - (0x321E, '3', u'(오후)'), - (0x321F, 'X'), - (0x3220, '3', u'(一)'), - (0x3221, '3', u'(二)'), - (0x3222, '3', u'(三)'), - (0x3223, '3', u'(四)'), - (0x3224, '3', u'(五)'), - (0x3225, '3', u'(六)'), - (0x3226, '3', u'(七)'), - (0x3227, '3', u'(八)'), - (0x3228, '3', u'(九)'), - (0x3229, '3', u'(十)'), - (0x322A, '3', u'(月)'), - (0x322B, '3', u'(火)'), - (0x322C, '3', u'(水)'), - (0x322D, '3', u'(木)'), - (0x322E, '3', u'(金)'), - (0x322F, '3', u'(土)'), - (0x3230, '3', u'(日)'), - (0x3231, '3', u'(株)'), - (0x3232, '3', u'(有)'), - (0x3233, '3', u'(社)'), - (0x3234, '3', u'(名)'), - (0x3235, '3', u'(特)'), - (0x3236, '3', u'(財)'), - (0x3237, '3', u'(祝)'), - (0x3238, '3', u'(労)'), - (0x3239, '3', u'(代)'), - (0x323A, '3', u'(呼)'), - (0x323B, '3', u'(学)'), - (0x323C, '3', u'(監)'), - (0x323D, '3', u'(企)'), - (0x323E, '3', u'(資)'), - (0x323F, '3', u'(協)'), - (0x3240, '3', u'(祭)'), - (0x3241, '3', u'(休)'), - (0x3242, '3', u'(自)'), - (0x3243, '3', u'(至)'), - (0x3244, 'M', u'問'), - (0x3245, 'M', u'幼'), - (0x3246, 'M', u'文'), - (0x3247, 'M', u'箏'), - (0x3248, 'V'), - (0x3250, 'M', u'pte'), - (0x3251, 'M', u'21'), - (0x3252, 'M', u'22'), - (0x3253, 'M', u'23'), - (0x3254, 'M', u'24'), - (0x3255, 'M', u'25'), - (0x3256, 'M', u'26'), - (0x3257, 'M', u'27'), - (0x3258, 'M', u'28'), - ] - -def _seg_31(): - return [ - (0x3259, 'M', u'29'), - (0x325A, 'M', u'30'), - (0x325B, 'M', u'31'), - (0x325C, 'M', u'32'), - (0x325D, 'M', u'33'), - (0x325E, 'M', u'34'), - (0x325F, 'M', u'35'), - (0x3260, 'M', u'ᄀ'), - (0x3261, 'M', u'ᄂ'), - (0x3262, 'M', u'ᄃ'), - (0x3263, 'M', u'ᄅ'), - (0x3264, 'M', u'ᄆ'), - (0x3265, 'M', u'ᄇ'), - (0x3266, 'M', u'ᄉ'), - (0x3267, 'M', u'ᄋ'), - (0x3268, 'M', u'ᄌ'), - (0x3269, 'M', u'ᄎ'), - (0x326A, 'M', u'ᄏ'), - (0x326B, 'M', u'ᄐ'), - (0x326C, 'M', u'ᄑ'), - (0x326D, 'M', u'ᄒ'), - (0x326E, 'M', u'가'), - (0x326F, 'M', u'나'), - (0x3270, 'M', u'다'), - (0x3271, 'M', u'라'), - (0x3272, 'M', u'마'), - (0x3273, 'M', u'바'), - (0x3274, 'M', u'사'), - (0x3275, 'M', u'아'), - (0x3276, 'M', u'자'), - (0x3277, 'M', u'차'), - (0x3278, 'M', u'카'), - (0x3279, 'M', u'타'), - (0x327A, 'M', u'파'), - (0x327B, 'M', u'하'), - (0x327C, 'M', u'참고'), - (0x327D, 'M', u'주의'), - (0x327E, 'M', u'우'), - (0x327F, 'V'), - (0x3280, 'M', u'一'), - (0x3281, 'M', u'二'), - (0x3282, 'M', u'三'), - (0x3283, 'M', u'四'), - (0x3284, 'M', u'五'), - (0x3285, 'M', u'六'), - (0x3286, 'M', u'七'), - (0x3287, 'M', u'八'), - (0x3288, 'M', u'九'), - (0x3289, 'M', u'十'), - (0x328A, 'M', u'月'), - (0x328B, 'M', u'火'), - (0x328C, 'M', u'水'), - (0x328D, 'M', u'木'), - (0x328E, 'M', u'金'), - (0x328F, 'M', u'土'), - (0x3290, 'M', u'日'), - (0x3291, 'M', u'株'), - (0x3292, 'M', u'有'), - (0x3293, 'M', u'社'), - (0x3294, 'M', u'名'), - (0x3295, 'M', u'特'), - (0x3296, 'M', u'財'), - (0x3297, 'M', u'祝'), - (0x3298, 'M', u'労'), - (0x3299, 'M', u'秘'), - (0x329A, 'M', u'男'), - (0x329B, 'M', u'女'), - (0x329C, 'M', u'適'), - (0x329D, 'M', u'優'), - (0x329E, 'M', u'印'), - (0x329F, 'M', u'注'), - (0x32A0, 'M', u'項'), - (0x32A1, 'M', u'休'), - (0x32A2, 'M', u'写'), - (0x32A3, 'M', u'正'), - (0x32A4, 'M', u'上'), - (0x32A5, 'M', u'中'), - (0x32A6, 'M', u'下'), - (0x32A7, 'M', u'左'), - (0x32A8, 'M', u'右'), - (0x32A9, 'M', u'医'), - (0x32AA, 'M', u'宗'), - (0x32AB, 'M', u'学'), - (0x32AC, 'M', u'監'), - (0x32AD, 'M', u'企'), - (0x32AE, 'M', u'資'), - (0x32AF, 'M', u'協'), - (0x32B0, 'M', u'夜'), - (0x32B1, 'M', u'36'), - (0x32B2, 'M', u'37'), - (0x32B3, 'M', u'38'), - (0x32B4, 'M', u'39'), - (0x32B5, 'M', u'40'), - (0x32B6, 'M', u'41'), - (0x32B7, 'M', u'42'), - (0x32B8, 'M', u'43'), - (0x32B9, 'M', u'44'), - (0x32BA, 'M', u'45'), - (0x32BB, 'M', u'46'), - (0x32BC, 'M', u'47'), - ] - -def _seg_32(): - return [ - (0x32BD, 'M', u'48'), - (0x32BE, 'M', u'49'), - (0x32BF, 'M', u'50'), - (0x32C0, 'M', u'1月'), - (0x32C1, 'M', u'2月'), - (0x32C2, 'M', u'3月'), - (0x32C3, 'M', u'4月'), - (0x32C4, 'M', u'5月'), - (0x32C5, 'M', u'6月'), - (0x32C6, 'M', u'7月'), - (0x32C7, 'M', u'8月'), - (0x32C8, 'M', u'9月'), - (0x32C9, 'M', u'10月'), - (0x32CA, 'M', u'11月'), - (0x32CB, 'M', u'12月'), - (0x32CC, 'M', u'hg'), - (0x32CD, 'M', u'erg'), - (0x32CE, 'M', u'ev'), - (0x32CF, 'M', u'ltd'), - (0x32D0, 'M', u'ア'), - (0x32D1, 'M', u'イ'), - (0x32D2, 'M', u'ウ'), - (0x32D3, 'M', u'エ'), - (0x32D4, 'M', u'オ'), - (0x32D5, 'M', u'カ'), - (0x32D6, 'M', u'キ'), - (0x32D7, 'M', u'ク'), - (0x32D8, 'M', u'ケ'), - (0x32D9, 'M', u'コ'), - (0x32DA, 'M', u'サ'), - (0x32DB, 'M', u'シ'), - (0x32DC, 'M', u'ス'), - (0x32DD, 'M', u'セ'), - (0x32DE, 'M', u'ソ'), - (0x32DF, 'M', u'タ'), - (0x32E0, 'M', u'チ'), - (0x32E1, 'M', u'ツ'), - (0x32E2, 'M', u'テ'), - (0x32E3, 'M', u'ト'), - (0x32E4, 'M', u'ナ'), - (0x32E5, 'M', u'ニ'), - (0x32E6, 'M', u'ヌ'), - (0x32E7, 'M', u'ネ'), - (0x32E8, 'M', u'ノ'), - (0x32E9, 'M', u'ハ'), - (0x32EA, 'M', u'ヒ'), - (0x32EB, 'M', u'フ'), - (0x32EC, 'M', u'ヘ'), - (0x32ED, 'M', u'ホ'), - (0x32EE, 'M', u'マ'), - (0x32EF, 'M', u'ミ'), - (0x32F0, 'M', u'ム'), - (0x32F1, 'M', u'メ'), - (0x32F2, 'M', u'モ'), - (0x32F3, 'M', u'ヤ'), - (0x32F4, 'M', u'ユ'), - (0x32F5, 'M', u'ヨ'), - (0x32F6, 'M', u'ラ'), - (0x32F7, 'M', u'リ'), - (0x32F8, 'M', u'ル'), - (0x32F9, 'M', u'レ'), - (0x32FA, 'M', u'ロ'), - (0x32FB, 'M', u'ワ'), - (0x32FC, 'M', u'ヰ'), - (0x32FD, 'M', u'ヱ'), - (0x32FE, 'M', u'ヲ'), - (0x32FF, 'X'), - (0x3300, 'M', u'アパート'), - (0x3301, 'M', u'アルファ'), - (0x3302, 'M', u'アンペア'), - (0x3303, 'M', u'アール'), - (0x3304, 'M', u'イニング'), - (0x3305, 'M', u'インチ'), - (0x3306, 'M', u'ウォン'), - (0x3307, 'M', u'エスクード'), - (0x3308, 'M', u'エーカー'), - (0x3309, 'M', u'オンス'), - (0x330A, 'M', u'オーム'), - (0x330B, 'M', u'カイリ'), - (0x330C, 'M', u'カラット'), - (0x330D, 'M', u'カロリー'), - (0x330E, 'M', u'ガロン'), - (0x330F, 'M', u'ガンマ'), - (0x3310, 'M', u'ギガ'), - (0x3311, 'M', u'ギニー'), - (0x3312, 'M', u'キュリー'), - (0x3313, 'M', u'ギルダー'), - (0x3314, 'M', u'キロ'), - (0x3315, 'M', u'キログラム'), - (0x3316, 'M', u'キロメートル'), - (0x3317, 'M', u'キロワット'), - (0x3318, 'M', u'グラム'), - (0x3319, 'M', u'グラムトン'), - (0x331A, 'M', u'クルゼイロ'), - (0x331B, 'M', u'クローネ'), - (0x331C, 'M', u'ケース'), - (0x331D, 'M', u'コルナ'), - (0x331E, 'M', u'コーポ'), - (0x331F, 'M', u'サイクル'), - (0x3320, 'M', u'サンチーム'), - ] - -def _seg_33(): - return [ - (0x3321, 'M', u'シリング'), - (0x3322, 'M', u'センチ'), - (0x3323, 'M', u'セント'), - (0x3324, 'M', u'ダース'), - (0x3325, 'M', u'デシ'), - (0x3326, 'M', u'ドル'), - (0x3327, 'M', u'トン'), - (0x3328, 'M', u'ナノ'), - (0x3329, 'M', u'ノット'), - (0x332A, 'M', u'ハイツ'), - (0x332B, 'M', u'パーセント'), - (0x332C, 'M', u'パーツ'), - (0x332D, 'M', u'バーレル'), - (0x332E, 'M', u'ピアストル'), - (0x332F, 'M', u'ピクル'), - (0x3330, 'M', u'ピコ'), - (0x3331, 'M', u'ビル'), - (0x3332, 'M', u'ファラッド'), - (0x3333, 'M', u'フィート'), - (0x3334, 'M', u'ブッシェル'), - (0x3335, 'M', u'フラン'), - (0x3336, 'M', u'ヘクタール'), - (0x3337, 'M', u'ペソ'), - (0x3338, 'M', u'ペニヒ'), - (0x3339, 'M', u'ヘルツ'), - (0x333A, 'M', u'ペンス'), - (0x333B, 'M', u'ページ'), - (0x333C, 'M', u'ベータ'), - (0x333D, 'M', u'ポイント'), - (0x333E, 'M', u'ボルト'), - (0x333F, 'M', u'ホン'), - (0x3340, 'M', u'ポンド'), - (0x3341, 'M', u'ホール'), - (0x3342, 'M', u'ホーン'), - (0x3343, 'M', u'マイクロ'), - (0x3344, 'M', u'マイル'), - (0x3345, 'M', u'マッハ'), - (0x3346, 'M', u'マルク'), - (0x3347, 'M', u'マンション'), - (0x3348, 'M', u'ミクロン'), - (0x3349, 'M', u'ミリ'), - (0x334A, 'M', u'ミリバール'), - (0x334B, 'M', u'メガ'), - (0x334C, 'M', u'メガトン'), - (0x334D, 'M', u'メートル'), - (0x334E, 'M', u'ヤード'), - (0x334F, 'M', u'ヤール'), - (0x3350, 'M', u'ユアン'), - (0x3351, 'M', u'リットル'), - (0x3352, 'M', u'リラ'), - (0x3353, 'M', u'ルピー'), - (0x3354, 'M', u'ルーブル'), - (0x3355, 'M', u'レム'), - (0x3356, 'M', u'レントゲン'), - (0x3357, 'M', u'ワット'), - (0x3358, 'M', u'0点'), - (0x3359, 'M', u'1点'), - (0x335A, 'M', u'2点'), - (0x335B, 'M', u'3点'), - (0x335C, 'M', u'4点'), - (0x335D, 'M', u'5点'), - (0x335E, 'M', u'6点'), - (0x335F, 'M', u'7点'), - (0x3360, 'M', u'8点'), - (0x3361, 'M', u'9点'), - (0x3362, 'M', u'10点'), - (0x3363, 'M', u'11点'), - (0x3364, 'M', u'12点'), - (0x3365, 'M', u'13点'), - (0x3366, 'M', u'14点'), - (0x3367, 'M', u'15点'), - (0x3368, 'M', u'16点'), - (0x3369, 'M', u'17点'), - (0x336A, 'M', u'18点'), - (0x336B, 'M', u'19点'), - (0x336C, 'M', u'20点'), - (0x336D, 'M', u'21点'), - (0x336E, 'M', u'22点'), - (0x336F, 'M', u'23点'), - (0x3370, 'M', u'24点'), - (0x3371, 'M', u'hpa'), - (0x3372, 'M', u'da'), - (0x3373, 'M', u'au'), - (0x3374, 'M', u'bar'), - (0x3375, 'M', u'ov'), - (0x3376, 'M', u'pc'), - (0x3377, 'M', u'dm'), - (0x3378, 'M', u'dm2'), - (0x3379, 'M', u'dm3'), - (0x337A, 'M', u'iu'), - (0x337B, 'M', u'平成'), - (0x337C, 'M', u'昭和'), - (0x337D, 'M', u'大正'), - (0x337E, 'M', u'明治'), - (0x337F, 'M', u'株式会社'), - (0x3380, 'M', u'pa'), - (0x3381, 'M', u'na'), - (0x3382, 'M', u'μa'), - (0x3383, 'M', u'ma'), - (0x3384, 'M', u'ka'), - ] - -def _seg_34(): - return [ - (0x3385, 'M', u'kb'), - (0x3386, 'M', u'mb'), - (0x3387, 'M', u'gb'), - (0x3388, 'M', u'cal'), - (0x3389, 'M', u'kcal'), - (0x338A, 'M', u'pf'), - (0x338B, 'M', u'nf'), - (0x338C, 'M', u'μf'), - (0x338D, 'M', u'μg'), - (0x338E, 'M', u'mg'), - (0x338F, 'M', u'kg'), - (0x3390, 'M', u'hz'), - (0x3391, 'M', u'khz'), - (0x3392, 'M', u'mhz'), - (0x3393, 'M', u'ghz'), - (0x3394, 'M', u'thz'), - (0x3395, 'M', u'μl'), - (0x3396, 'M', u'ml'), - (0x3397, 'M', u'dl'), - (0x3398, 'M', u'kl'), - (0x3399, 'M', u'fm'), - (0x339A, 'M', u'nm'), - (0x339B, 'M', u'μm'), - (0x339C, 'M', u'mm'), - (0x339D, 'M', u'cm'), - (0x339E, 'M', u'km'), - (0x339F, 'M', u'mm2'), - (0x33A0, 'M', u'cm2'), - (0x33A1, 'M', u'm2'), - (0x33A2, 'M', u'km2'), - (0x33A3, 'M', u'mm3'), - (0x33A4, 'M', u'cm3'), - (0x33A5, 'M', u'm3'), - (0x33A6, 'M', u'km3'), - (0x33A7, 'M', u'm∕s'), - (0x33A8, 'M', u'm∕s2'), - (0x33A9, 'M', u'pa'), - (0x33AA, 'M', u'kpa'), - (0x33AB, 'M', u'mpa'), - (0x33AC, 'M', u'gpa'), - (0x33AD, 'M', u'rad'), - (0x33AE, 'M', u'rad∕s'), - (0x33AF, 'M', u'rad∕s2'), - (0x33B0, 'M', u'ps'), - (0x33B1, 'M', u'ns'), - (0x33B2, 'M', u'μs'), - (0x33B3, 'M', u'ms'), - (0x33B4, 'M', u'pv'), - (0x33B5, 'M', u'nv'), - (0x33B6, 'M', u'μv'), - (0x33B7, 'M', u'mv'), - (0x33B8, 'M', u'kv'), - (0x33B9, 'M', u'mv'), - (0x33BA, 'M', u'pw'), - (0x33BB, 'M', u'nw'), - (0x33BC, 'M', u'μw'), - (0x33BD, 'M', u'mw'), - (0x33BE, 'M', u'kw'), - (0x33BF, 'M', u'mw'), - (0x33C0, 'M', u'kω'), - (0x33C1, 'M', u'mω'), - (0x33C2, 'X'), - (0x33C3, 'M', u'bq'), - (0x33C4, 'M', u'cc'), - (0x33C5, 'M', u'cd'), - (0x33C6, 'M', u'c∕kg'), - (0x33C7, 'X'), - (0x33C8, 'M', u'db'), - (0x33C9, 'M', u'gy'), - (0x33CA, 'M', u'ha'), - (0x33CB, 'M', u'hp'), - (0x33CC, 'M', u'in'), - (0x33CD, 'M', u'kk'), - (0x33CE, 'M', u'km'), - (0x33CF, 'M', u'kt'), - (0x33D0, 'M', u'lm'), - (0x33D1, 'M', u'ln'), - (0x33D2, 'M', u'log'), - (0x33D3, 'M', u'lx'), - (0x33D4, 'M', u'mb'), - (0x33D5, 'M', u'mil'), - (0x33D6, 'M', u'mol'), - (0x33D7, 'M', u'ph'), - (0x33D8, 'X'), - (0x33D9, 'M', u'ppm'), - (0x33DA, 'M', u'pr'), - (0x33DB, 'M', u'sr'), - (0x33DC, 'M', u'sv'), - (0x33DD, 'M', u'wb'), - (0x33DE, 'M', u'v∕m'), - (0x33DF, 'M', u'a∕m'), - (0x33E0, 'M', u'1日'), - (0x33E1, 'M', u'2日'), - (0x33E2, 'M', u'3日'), - (0x33E3, 'M', u'4日'), - (0x33E4, 'M', u'5日'), - (0x33E5, 'M', u'6日'), - (0x33E6, 'M', u'7日'), - (0x33E7, 'M', u'8日'), - (0x33E8, 'M', u'9日'), - ] - -def _seg_35(): - return [ - (0x33E9, 'M', u'10日'), - (0x33EA, 'M', u'11日'), - (0x33EB, 'M', u'12日'), - (0x33EC, 'M', u'13日'), - (0x33ED, 'M', u'14日'), - (0x33EE, 'M', u'15日'), - (0x33EF, 'M', u'16日'), - (0x33F0, 'M', u'17日'), - (0x33F1, 'M', u'18日'), - (0x33F2, 'M', u'19日'), - (0x33F3, 'M', u'20日'), - (0x33F4, 'M', u'21日'), - (0x33F5, 'M', u'22日'), - (0x33F6, 'M', u'23日'), - (0x33F7, 'M', u'24日'), - (0x33F8, 'M', u'25日'), - (0x33F9, 'M', u'26日'), - (0x33FA, 'M', u'27日'), - (0x33FB, 'M', u'28日'), - (0x33FC, 'M', u'29日'), - (0x33FD, 'M', u'30日'), - (0x33FE, 'M', u'31日'), - (0x33FF, 'M', u'gal'), - (0x3400, 'V'), - (0x4DB6, 'X'), - (0x4DC0, 'V'), - (0x9FEB, 'X'), - (0xA000, 'V'), - (0xA48D, 'X'), - (0xA490, 'V'), - (0xA4C7, 'X'), - (0xA4D0, 'V'), - (0xA62C, 'X'), - (0xA640, 'M', u'ꙁ'), - (0xA641, 'V'), - (0xA642, 'M', u'ꙃ'), - (0xA643, 'V'), - (0xA644, 'M', u'ꙅ'), - (0xA645, 'V'), - (0xA646, 'M', u'ꙇ'), - (0xA647, 'V'), - (0xA648, 'M', u'ꙉ'), - (0xA649, 'V'), - (0xA64A, 'M', u'ꙋ'), - (0xA64B, 'V'), - (0xA64C, 'M', u'ꙍ'), - (0xA64D, 'V'), - (0xA64E, 'M', u'ꙏ'), - (0xA64F, 'V'), - (0xA650, 'M', u'ꙑ'), - (0xA651, 'V'), - (0xA652, 'M', u'ꙓ'), - (0xA653, 'V'), - (0xA654, 'M', u'ꙕ'), - (0xA655, 'V'), - (0xA656, 'M', u'ꙗ'), - (0xA657, 'V'), - (0xA658, 'M', u'ꙙ'), - (0xA659, 'V'), - (0xA65A, 'M', u'ꙛ'), - (0xA65B, 'V'), - (0xA65C, 'M', u'ꙝ'), - (0xA65D, 'V'), - (0xA65E, 'M', u'ꙟ'), - (0xA65F, 'V'), - (0xA660, 'M', u'ꙡ'), - (0xA661, 'V'), - (0xA662, 'M', u'ꙣ'), - (0xA663, 'V'), - (0xA664, 'M', u'ꙥ'), - (0xA665, 'V'), - (0xA666, 'M', u'ꙧ'), - (0xA667, 'V'), - (0xA668, 'M', u'ꙩ'), - (0xA669, 'V'), - (0xA66A, 'M', u'ꙫ'), - (0xA66B, 'V'), - (0xA66C, 'M', u'ꙭ'), - (0xA66D, 'V'), - (0xA680, 'M', u'ꚁ'), - (0xA681, 'V'), - (0xA682, 'M', u'ꚃ'), - (0xA683, 'V'), - (0xA684, 'M', u'ꚅ'), - (0xA685, 'V'), - (0xA686, 'M', u'ꚇ'), - (0xA687, 'V'), - (0xA688, 'M', u'ꚉ'), - (0xA689, 'V'), - (0xA68A, 'M', u'ꚋ'), - (0xA68B, 'V'), - (0xA68C, 'M', u'ꚍ'), - (0xA68D, 'V'), - (0xA68E, 'M', u'ꚏ'), - (0xA68F, 'V'), - (0xA690, 'M', u'ꚑ'), - (0xA691, 'V'), - (0xA692, 'M', u'ꚓ'), - (0xA693, 'V'), - (0xA694, 'M', u'ꚕ'), - ] - -def _seg_36(): - return [ - (0xA695, 'V'), - (0xA696, 'M', u'ꚗ'), - (0xA697, 'V'), - (0xA698, 'M', u'ꚙ'), - (0xA699, 'V'), - (0xA69A, 'M', u'ꚛ'), - (0xA69B, 'V'), - (0xA69C, 'M', u'ъ'), - (0xA69D, 'M', u'ь'), - (0xA69E, 'V'), - (0xA6F8, 'X'), - (0xA700, 'V'), - (0xA722, 'M', u'ꜣ'), - (0xA723, 'V'), - (0xA724, 'M', u'ꜥ'), - (0xA725, 'V'), - (0xA726, 'M', u'ꜧ'), - (0xA727, 'V'), - (0xA728, 'M', u'ꜩ'), - (0xA729, 'V'), - (0xA72A, 'M', u'ꜫ'), - (0xA72B, 'V'), - (0xA72C, 'M', u'ꜭ'), - (0xA72D, 'V'), - (0xA72E, 'M', u'ꜯ'), - (0xA72F, 'V'), - (0xA732, 'M', u'ꜳ'), - (0xA733, 'V'), - (0xA734, 'M', u'ꜵ'), - (0xA735, 'V'), - (0xA736, 'M', u'ꜷ'), - (0xA737, 'V'), - (0xA738, 'M', u'ꜹ'), - (0xA739, 'V'), - (0xA73A, 'M', u'ꜻ'), - (0xA73B, 'V'), - (0xA73C, 'M', u'ꜽ'), - (0xA73D, 'V'), - (0xA73E, 'M', u'ꜿ'), - (0xA73F, 'V'), - (0xA740, 'M', u'ꝁ'), - (0xA741, 'V'), - (0xA742, 'M', u'ꝃ'), - (0xA743, 'V'), - (0xA744, 'M', u'ꝅ'), - (0xA745, 'V'), - (0xA746, 'M', u'ꝇ'), - (0xA747, 'V'), - (0xA748, 'M', u'ꝉ'), - (0xA749, 'V'), - (0xA74A, 'M', u'ꝋ'), - (0xA74B, 'V'), - (0xA74C, 'M', u'ꝍ'), - (0xA74D, 'V'), - (0xA74E, 'M', u'ꝏ'), - (0xA74F, 'V'), - (0xA750, 'M', u'ꝑ'), - (0xA751, 'V'), - (0xA752, 'M', u'ꝓ'), - (0xA753, 'V'), - (0xA754, 'M', u'ꝕ'), - (0xA755, 'V'), - (0xA756, 'M', u'ꝗ'), - (0xA757, 'V'), - (0xA758, 'M', u'ꝙ'), - (0xA759, 'V'), - (0xA75A, 'M', u'ꝛ'), - (0xA75B, 'V'), - (0xA75C, 'M', u'ꝝ'), - (0xA75D, 'V'), - (0xA75E, 'M', u'ꝟ'), - (0xA75F, 'V'), - (0xA760, 'M', u'ꝡ'), - (0xA761, 'V'), - (0xA762, 'M', u'ꝣ'), - (0xA763, 'V'), - (0xA764, 'M', u'ꝥ'), - (0xA765, 'V'), - (0xA766, 'M', u'ꝧ'), - (0xA767, 'V'), - (0xA768, 'M', u'ꝩ'), - (0xA769, 'V'), - (0xA76A, 'M', u'ꝫ'), - (0xA76B, 'V'), - (0xA76C, 'M', u'ꝭ'), - (0xA76D, 'V'), - (0xA76E, 'M', u'ꝯ'), - (0xA76F, 'V'), - (0xA770, 'M', u'ꝯ'), - (0xA771, 'V'), - (0xA779, 'M', u'ꝺ'), - (0xA77A, 'V'), - (0xA77B, 'M', u'ꝼ'), - (0xA77C, 'V'), - (0xA77D, 'M', u'ᵹ'), - (0xA77E, 'M', u'ꝿ'), - (0xA77F, 'V'), - (0xA780, 'M', u'ꞁ'), - (0xA781, 'V'), - (0xA782, 'M', u'ꞃ'), - ] - -def _seg_37(): - return [ - (0xA783, 'V'), - (0xA784, 'M', u'ꞅ'), - (0xA785, 'V'), - (0xA786, 'M', u'ꞇ'), - (0xA787, 'V'), - (0xA78B, 'M', u'ꞌ'), - (0xA78C, 'V'), - (0xA78D, 'M', u'ɥ'), - (0xA78E, 'V'), - (0xA790, 'M', u'ꞑ'), - (0xA791, 'V'), - (0xA792, 'M', u'ꞓ'), - (0xA793, 'V'), - (0xA796, 'M', u'ꞗ'), - (0xA797, 'V'), - (0xA798, 'M', u'ꞙ'), - (0xA799, 'V'), - (0xA79A, 'M', u'ꞛ'), - (0xA79B, 'V'), - (0xA79C, 'M', u'ꞝ'), - (0xA79D, 'V'), - (0xA79E, 'M', u'ꞟ'), - (0xA79F, 'V'), - (0xA7A0, 'M', u'ꞡ'), - (0xA7A1, 'V'), - (0xA7A2, 'M', u'ꞣ'), - (0xA7A3, 'V'), - (0xA7A4, 'M', u'ꞥ'), - (0xA7A5, 'V'), - (0xA7A6, 'M', u'ꞧ'), - (0xA7A7, 'V'), - (0xA7A8, 'M', u'ꞩ'), - (0xA7A9, 'V'), - (0xA7AA, 'M', u'ɦ'), - (0xA7AB, 'M', u'ɜ'), - (0xA7AC, 'M', u'ɡ'), - (0xA7AD, 'M', u'ɬ'), - (0xA7AE, 'M', u'ɪ'), - (0xA7AF, 'X'), - (0xA7B0, 'M', u'ʞ'), - (0xA7B1, 'M', u'ʇ'), - (0xA7B2, 'M', u'ʝ'), - (0xA7B3, 'M', u'ꭓ'), - (0xA7B4, 'M', u'ꞵ'), - (0xA7B5, 'V'), - (0xA7B6, 'M', u'ꞷ'), - (0xA7B7, 'V'), - (0xA7B8, 'X'), - (0xA7F7, 'V'), - (0xA7F8, 'M', u'ħ'), - (0xA7F9, 'M', u'œ'), - (0xA7FA, 'V'), - (0xA82C, 'X'), - (0xA830, 'V'), - (0xA83A, 'X'), - (0xA840, 'V'), - (0xA878, 'X'), - (0xA880, 'V'), - (0xA8C6, 'X'), - (0xA8CE, 'V'), - (0xA8DA, 'X'), - (0xA8E0, 'V'), - (0xA8FE, 'X'), - (0xA900, 'V'), - (0xA954, 'X'), - (0xA95F, 'V'), - (0xA97D, 'X'), - (0xA980, 'V'), - (0xA9CE, 'X'), - (0xA9CF, 'V'), - (0xA9DA, 'X'), - (0xA9DE, 'V'), - (0xA9FF, 'X'), - (0xAA00, 'V'), - (0xAA37, 'X'), - (0xAA40, 'V'), - (0xAA4E, 'X'), - (0xAA50, 'V'), - (0xAA5A, 'X'), - (0xAA5C, 'V'), - (0xAAC3, 'X'), - (0xAADB, 'V'), - (0xAAF7, 'X'), - (0xAB01, 'V'), - (0xAB07, 'X'), - (0xAB09, 'V'), - (0xAB0F, 'X'), - (0xAB11, 'V'), - (0xAB17, 'X'), - (0xAB20, 'V'), - (0xAB27, 'X'), - (0xAB28, 'V'), - (0xAB2F, 'X'), - (0xAB30, 'V'), - (0xAB5C, 'M', u'ꜧ'), - (0xAB5D, 'M', u'ꬷ'), - (0xAB5E, 'M', u'ɫ'), - (0xAB5F, 'M', u'ꭒ'), - (0xAB60, 'V'), - (0xAB66, 'X'), - ] - -def _seg_38(): - return [ - (0xAB70, 'M', u'Ꭰ'), - (0xAB71, 'M', u'Ꭱ'), - (0xAB72, 'M', u'Ꭲ'), - (0xAB73, 'M', u'Ꭳ'), - (0xAB74, 'M', u'Ꭴ'), - (0xAB75, 'M', u'Ꭵ'), - (0xAB76, 'M', u'Ꭶ'), - (0xAB77, 'M', u'Ꭷ'), - (0xAB78, 'M', u'Ꭸ'), - (0xAB79, 'M', u'Ꭹ'), - (0xAB7A, 'M', u'Ꭺ'), - (0xAB7B, 'M', u'Ꭻ'), - (0xAB7C, 'M', u'Ꭼ'), - (0xAB7D, 'M', u'Ꭽ'), - (0xAB7E, 'M', u'Ꭾ'), - (0xAB7F, 'M', u'Ꭿ'), - (0xAB80, 'M', u'Ꮀ'), - (0xAB81, 'M', u'Ꮁ'), - (0xAB82, 'M', u'Ꮂ'), - (0xAB83, 'M', u'Ꮃ'), - (0xAB84, 'M', u'Ꮄ'), - (0xAB85, 'M', u'Ꮅ'), - (0xAB86, 'M', u'Ꮆ'), - (0xAB87, 'M', u'Ꮇ'), - (0xAB88, 'M', u'Ꮈ'), - (0xAB89, 'M', u'Ꮉ'), - (0xAB8A, 'M', u'Ꮊ'), - (0xAB8B, 'M', u'Ꮋ'), - (0xAB8C, 'M', u'Ꮌ'), - (0xAB8D, 'M', u'Ꮍ'), - (0xAB8E, 'M', u'Ꮎ'), - (0xAB8F, 'M', u'Ꮏ'), - (0xAB90, 'M', u'Ꮐ'), - (0xAB91, 'M', u'Ꮑ'), - (0xAB92, 'M', u'Ꮒ'), - (0xAB93, 'M', u'Ꮓ'), - (0xAB94, 'M', u'Ꮔ'), - (0xAB95, 'M', u'Ꮕ'), - (0xAB96, 'M', u'Ꮖ'), - (0xAB97, 'M', u'Ꮗ'), - (0xAB98, 'M', u'Ꮘ'), - (0xAB99, 'M', u'Ꮙ'), - (0xAB9A, 'M', u'Ꮚ'), - (0xAB9B, 'M', u'Ꮛ'), - (0xAB9C, 'M', u'Ꮜ'), - (0xAB9D, 'M', u'Ꮝ'), - (0xAB9E, 'M', u'Ꮞ'), - (0xAB9F, 'M', u'Ꮟ'), - (0xABA0, 'M', u'Ꮠ'), - (0xABA1, 'M', u'Ꮡ'), - (0xABA2, 'M', u'Ꮢ'), - (0xABA3, 'M', u'Ꮣ'), - (0xABA4, 'M', u'Ꮤ'), - (0xABA5, 'M', u'Ꮥ'), - (0xABA6, 'M', u'Ꮦ'), - (0xABA7, 'M', u'Ꮧ'), - (0xABA8, 'M', u'Ꮨ'), - (0xABA9, 'M', u'Ꮩ'), - (0xABAA, 'M', u'Ꮪ'), - (0xABAB, 'M', u'Ꮫ'), - (0xABAC, 'M', u'Ꮬ'), - (0xABAD, 'M', u'Ꮭ'), - (0xABAE, 'M', u'Ꮮ'), - (0xABAF, 'M', u'Ꮯ'), - (0xABB0, 'M', u'Ꮰ'), - (0xABB1, 'M', u'Ꮱ'), - (0xABB2, 'M', u'Ꮲ'), - (0xABB3, 'M', u'Ꮳ'), - (0xABB4, 'M', u'Ꮴ'), - (0xABB5, 'M', u'Ꮵ'), - (0xABB6, 'M', u'Ꮶ'), - (0xABB7, 'M', u'Ꮷ'), - (0xABB8, 'M', u'Ꮸ'), - (0xABB9, 'M', u'Ꮹ'), - (0xABBA, 'M', u'Ꮺ'), - (0xABBB, 'M', u'Ꮻ'), - (0xABBC, 'M', u'Ꮼ'), - (0xABBD, 'M', u'Ꮽ'), - (0xABBE, 'M', u'Ꮾ'), - (0xABBF, 'M', u'Ꮿ'), - (0xABC0, 'V'), - (0xABEE, 'X'), - (0xABF0, 'V'), - (0xABFA, 'X'), - (0xAC00, 'V'), - (0xD7A4, 'X'), - (0xD7B0, 'V'), - (0xD7C7, 'X'), - (0xD7CB, 'V'), - (0xD7FC, 'X'), - (0xF900, 'M', u'豈'), - (0xF901, 'M', u'更'), - (0xF902, 'M', u'車'), - (0xF903, 'M', u'賈'), - (0xF904, 'M', u'滑'), - (0xF905, 'M', u'串'), - (0xF906, 'M', u'句'), - (0xF907, 'M', u'龜'), - (0xF909, 'M', u'契'), - (0xF90A, 'M', u'金'), - ] - -def _seg_39(): - return [ - (0xF90B, 'M', u'喇'), - (0xF90C, 'M', u'奈'), - (0xF90D, 'M', u'懶'), - (0xF90E, 'M', u'癩'), - (0xF90F, 'M', u'羅'), - (0xF910, 'M', u'蘿'), - (0xF911, 'M', u'螺'), - (0xF912, 'M', u'裸'), - (0xF913, 'M', u'邏'), - (0xF914, 'M', u'樂'), - (0xF915, 'M', u'洛'), - (0xF916, 'M', u'烙'), - (0xF917, 'M', u'珞'), - (0xF918, 'M', u'落'), - (0xF919, 'M', u'酪'), - (0xF91A, 'M', u'駱'), - (0xF91B, 'M', u'亂'), - (0xF91C, 'M', u'卵'), - (0xF91D, 'M', u'欄'), - (0xF91E, 'M', u'爛'), - (0xF91F, 'M', u'蘭'), - (0xF920, 'M', u'鸞'), - (0xF921, 'M', u'嵐'), - (0xF922, 'M', u'濫'), - (0xF923, 'M', u'藍'), - (0xF924, 'M', u'襤'), - (0xF925, 'M', u'拉'), - (0xF926, 'M', u'臘'), - (0xF927, 'M', u'蠟'), - (0xF928, 'M', u'廊'), - (0xF929, 'M', u'朗'), - (0xF92A, 'M', u'浪'), - (0xF92B, 'M', u'狼'), - (0xF92C, 'M', u'郎'), - (0xF92D, 'M', u'來'), - (0xF92E, 'M', u'冷'), - (0xF92F, 'M', u'勞'), - (0xF930, 'M', u'擄'), - (0xF931, 'M', u'櫓'), - (0xF932, 'M', u'爐'), - (0xF933, 'M', u'盧'), - (0xF934, 'M', u'老'), - (0xF935, 'M', u'蘆'), - (0xF936, 'M', u'虜'), - (0xF937, 'M', u'路'), - (0xF938, 'M', u'露'), - (0xF939, 'M', u'魯'), - (0xF93A, 'M', u'鷺'), - (0xF93B, 'M', u'碌'), - (0xF93C, 'M', u'祿'), - (0xF93D, 'M', u'綠'), - (0xF93E, 'M', u'菉'), - (0xF93F, 'M', u'錄'), - (0xF940, 'M', u'鹿'), - (0xF941, 'M', u'論'), - (0xF942, 'M', u'壟'), - (0xF943, 'M', u'弄'), - (0xF944, 'M', u'籠'), - (0xF945, 'M', u'聾'), - (0xF946, 'M', u'牢'), - (0xF947, 'M', u'磊'), - (0xF948, 'M', u'賂'), - (0xF949, 'M', u'雷'), - (0xF94A, 'M', u'壘'), - (0xF94B, 'M', u'屢'), - (0xF94C, 'M', u'樓'), - (0xF94D, 'M', u'淚'), - (0xF94E, 'M', u'漏'), - (0xF94F, 'M', u'累'), - (0xF950, 'M', u'縷'), - (0xF951, 'M', u'陋'), - (0xF952, 'M', u'勒'), - (0xF953, 'M', u'肋'), - (0xF954, 'M', u'凜'), - (0xF955, 'M', u'凌'), - (0xF956, 'M', u'稜'), - (0xF957, 'M', u'綾'), - (0xF958, 'M', u'菱'), - (0xF959, 'M', u'陵'), - (0xF95A, 'M', u'讀'), - (0xF95B, 'M', u'拏'), - (0xF95C, 'M', u'樂'), - (0xF95D, 'M', u'諾'), - (0xF95E, 'M', u'丹'), - (0xF95F, 'M', u'寧'), - (0xF960, 'M', u'怒'), - (0xF961, 'M', u'率'), - (0xF962, 'M', u'異'), - (0xF963, 'M', u'北'), - (0xF964, 'M', u'磻'), - (0xF965, 'M', u'便'), - (0xF966, 'M', u'復'), - (0xF967, 'M', u'不'), - (0xF968, 'M', u'泌'), - (0xF969, 'M', u'數'), - (0xF96A, 'M', u'索'), - (0xF96B, 'M', u'參'), - (0xF96C, 'M', u'塞'), - (0xF96D, 'M', u'省'), - (0xF96E, 'M', u'葉'), - ] - -def _seg_40(): - return [ - (0xF96F, 'M', u'說'), - (0xF970, 'M', u'殺'), - (0xF971, 'M', u'辰'), - (0xF972, 'M', u'沈'), - (0xF973, 'M', u'拾'), - (0xF974, 'M', u'若'), - (0xF975, 'M', u'掠'), - (0xF976, 'M', u'略'), - (0xF977, 'M', u'亮'), - (0xF978, 'M', u'兩'), - (0xF979, 'M', u'凉'), - (0xF97A, 'M', u'梁'), - (0xF97B, 'M', u'糧'), - (0xF97C, 'M', u'良'), - (0xF97D, 'M', u'諒'), - (0xF97E, 'M', u'量'), - (0xF97F, 'M', u'勵'), - (0xF980, 'M', u'呂'), - (0xF981, 'M', u'女'), - (0xF982, 'M', u'廬'), - (0xF983, 'M', u'旅'), - (0xF984, 'M', u'濾'), - (0xF985, 'M', u'礪'), - (0xF986, 'M', u'閭'), - (0xF987, 'M', u'驪'), - (0xF988, 'M', u'麗'), - (0xF989, 'M', u'黎'), - (0xF98A, 'M', u'力'), - (0xF98B, 'M', u'曆'), - (0xF98C, 'M', u'歷'), - (0xF98D, 'M', u'轢'), - (0xF98E, 'M', u'年'), - (0xF98F, 'M', u'憐'), - (0xF990, 'M', u'戀'), - (0xF991, 'M', u'撚'), - (0xF992, 'M', u'漣'), - (0xF993, 'M', u'煉'), - (0xF994, 'M', u'璉'), - (0xF995, 'M', u'秊'), - (0xF996, 'M', u'練'), - (0xF997, 'M', u'聯'), - (0xF998, 'M', u'輦'), - (0xF999, 'M', u'蓮'), - (0xF99A, 'M', u'連'), - (0xF99B, 'M', u'鍊'), - (0xF99C, 'M', u'列'), - (0xF99D, 'M', u'劣'), - (0xF99E, 'M', u'咽'), - (0xF99F, 'M', u'烈'), - (0xF9A0, 'M', u'裂'), - (0xF9A1, 'M', u'說'), - (0xF9A2, 'M', u'廉'), - (0xF9A3, 'M', u'念'), - (0xF9A4, 'M', u'捻'), - (0xF9A5, 'M', u'殮'), - (0xF9A6, 'M', u'簾'), - (0xF9A7, 'M', u'獵'), - (0xF9A8, 'M', u'令'), - (0xF9A9, 'M', u'囹'), - (0xF9AA, 'M', u'寧'), - (0xF9AB, 'M', u'嶺'), - (0xF9AC, 'M', u'怜'), - (0xF9AD, 'M', u'玲'), - (0xF9AE, 'M', u'瑩'), - (0xF9AF, 'M', u'羚'), - (0xF9B0, 'M', u'聆'), - (0xF9B1, 'M', u'鈴'), - (0xF9B2, 'M', u'零'), - (0xF9B3, 'M', u'靈'), - (0xF9B4, 'M', u'領'), - (0xF9B5, 'M', u'例'), - (0xF9B6, 'M', u'禮'), - (0xF9B7, 'M', u'醴'), - (0xF9B8, 'M', u'隸'), - (0xF9B9, 'M', u'惡'), - (0xF9BA, 'M', u'了'), - (0xF9BB, 'M', u'僚'), - (0xF9BC, 'M', u'寮'), - (0xF9BD, 'M', u'尿'), - (0xF9BE, 'M', u'料'), - (0xF9BF, 'M', u'樂'), - (0xF9C0, 'M', u'燎'), - (0xF9C1, 'M', u'療'), - (0xF9C2, 'M', u'蓼'), - (0xF9C3, 'M', u'遼'), - (0xF9C4, 'M', u'龍'), - (0xF9C5, 'M', u'暈'), - (0xF9C6, 'M', u'阮'), - (0xF9C7, 'M', u'劉'), - (0xF9C8, 'M', u'杻'), - (0xF9C9, 'M', u'柳'), - (0xF9CA, 'M', u'流'), - (0xF9CB, 'M', u'溜'), - (0xF9CC, 'M', u'琉'), - (0xF9CD, 'M', u'留'), - (0xF9CE, 'M', u'硫'), - (0xF9CF, 'M', u'紐'), - (0xF9D0, 'M', u'類'), - (0xF9D1, 'M', u'六'), - (0xF9D2, 'M', u'戮'), - ] - -def _seg_41(): - return [ - (0xF9D3, 'M', u'陸'), - (0xF9D4, 'M', u'倫'), - (0xF9D5, 'M', u'崙'), - (0xF9D6, 'M', u'淪'), - (0xF9D7, 'M', u'輪'), - (0xF9D8, 'M', u'律'), - (0xF9D9, 'M', u'慄'), - (0xF9DA, 'M', u'栗'), - (0xF9DB, 'M', u'率'), - (0xF9DC, 'M', u'隆'), - (0xF9DD, 'M', u'利'), - (0xF9DE, 'M', u'吏'), - (0xF9DF, 'M', u'履'), - (0xF9E0, 'M', u'易'), - (0xF9E1, 'M', u'李'), - (0xF9E2, 'M', u'梨'), - (0xF9E3, 'M', u'泥'), - (0xF9E4, 'M', u'理'), - (0xF9E5, 'M', u'痢'), - (0xF9E6, 'M', u'罹'), - (0xF9E7, 'M', u'裏'), - (0xF9E8, 'M', u'裡'), - (0xF9E9, 'M', u'里'), - (0xF9EA, 'M', u'離'), - (0xF9EB, 'M', u'匿'), - (0xF9EC, 'M', u'溺'), - (0xF9ED, 'M', u'吝'), - (0xF9EE, 'M', u'燐'), - (0xF9EF, 'M', u'璘'), - (0xF9F0, 'M', u'藺'), - (0xF9F1, 'M', u'隣'), - (0xF9F2, 'M', u'鱗'), - (0xF9F3, 'M', u'麟'), - (0xF9F4, 'M', u'林'), - (0xF9F5, 'M', u'淋'), - (0xF9F6, 'M', u'臨'), - (0xF9F7, 'M', u'立'), - (0xF9F8, 'M', u'笠'), - (0xF9F9, 'M', u'粒'), - (0xF9FA, 'M', u'狀'), - (0xF9FB, 'M', u'炙'), - (0xF9FC, 'M', u'識'), - (0xF9FD, 'M', u'什'), - (0xF9FE, 'M', u'茶'), - (0xF9FF, 'M', u'刺'), - (0xFA00, 'M', u'切'), - (0xFA01, 'M', u'度'), - (0xFA02, 'M', u'拓'), - (0xFA03, 'M', u'糖'), - (0xFA04, 'M', u'宅'), - (0xFA05, 'M', u'洞'), - (0xFA06, 'M', u'暴'), - (0xFA07, 'M', u'輻'), - (0xFA08, 'M', u'行'), - (0xFA09, 'M', u'降'), - (0xFA0A, 'M', u'見'), - (0xFA0B, 'M', u'廓'), - (0xFA0C, 'M', u'兀'), - (0xFA0D, 'M', u'嗀'), - (0xFA0E, 'V'), - (0xFA10, 'M', u'塚'), - (0xFA11, 'V'), - (0xFA12, 'M', u'晴'), - (0xFA13, 'V'), - (0xFA15, 'M', u'凞'), - (0xFA16, 'M', u'猪'), - (0xFA17, 'M', u'益'), - (0xFA18, 'M', u'礼'), - (0xFA19, 'M', u'神'), - (0xFA1A, 'M', u'祥'), - (0xFA1B, 'M', u'福'), - (0xFA1C, 'M', u'靖'), - (0xFA1D, 'M', u'精'), - (0xFA1E, 'M', u'羽'), - (0xFA1F, 'V'), - (0xFA20, 'M', u'蘒'), - (0xFA21, 'V'), - (0xFA22, 'M', u'諸'), - (0xFA23, 'V'), - (0xFA25, 'M', u'逸'), - (0xFA26, 'M', u'都'), - (0xFA27, 'V'), - (0xFA2A, 'M', u'飯'), - (0xFA2B, 'M', u'飼'), - (0xFA2C, 'M', u'館'), - (0xFA2D, 'M', u'鶴'), - (0xFA2E, 'M', u'郞'), - (0xFA2F, 'M', u'隷'), - (0xFA30, 'M', u'侮'), - (0xFA31, 'M', u'僧'), - (0xFA32, 'M', u'免'), - (0xFA33, 'M', u'勉'), - (0xFA34, 'M', u'勤'), - (0xFA35, 'M', u'卑'), - (0xFA36, 'M', u'喝'), - (0xFA37, 'M', u'嘆'), - (0xFA38, 'M', u'器'), - (0xFA39, 'M', u'塀'), - (0xFA3A, 'M', u'墨'), - (0xFA3B, 'M', u'層'), - ] - -def _seg_42(): - return [ - (0xFA3C, 'M', u'屮'), - (0xFA3D, 'M', u'悔'), - (0xFA3E, 'M', u'慨'), - (0xFA3F, 'M', u'憎'), - (0xFA40, 'M', u'懲'), - (0xFA41, 'M', u'敏'), - (0xFA42, 'M', u'既'), - (0xFA43, 'M', u'暑'), - (0xFA44, 'M', u'梅'), - (0xFA45, 'M', u'海'), - (0xFA46, 'M', u'渚'), - (0xFA47, 'M', u'漢'), - (0xFA48, 'M', u'煮'), - (0xFA49, 'M', u'爫'), - (0xFA4A, 'M', u'琢'), - (0xFA4B, 'M', u'碑'), - (0xFA4C, 'M', u'社'), - (0xFA4D, 'M', u'祉'), - (0xFA4E, 'M', u'祈'), - (0xFA4F, 'M', u'祐'), - (0xFA50, 'M', u'祖'), - (0xFA51, 'M', u'祝'), - (0xFA52, 'M', u'禍'), - (0xFA53, 'M', u'禎'), - (0xFA54, 'M', u'穀'), - (0xFA55, 'M', u'突'), - (0xFA56, 'M', u'節'), - (0xFA57, 'M', u'練'), - (0xFA58, 'M', u'縉'), - (0xFA59, 'M', u'繁'), - (0xFA5A, 'M', u'署'), - (0xFA5B, 'M', u'者'), - (0xFA5C, 'M', u'臭'), - (0xFA5D, 'M', u'艹'), - (0xFA5F, 'M', u'著'), - (0xFA60, 'M', u'褐'), - (0xFA61, 'M', u'視'), - (0xFA62, 'M', u'謁'), - (0xFA63, 'M', u'謹'), - (0xFA64, 'M', u'賓'), - (0xFA65, 'M', u'贈'), - (0xFA66, 'M', u'辶'), - (0xFA67, 'M', u'逸'), - (0xFA68, 'M', u'難'), - (0xFA69, 'M', u'響'), - (0xFA6A, 'M', u'頻'), - (0xFA6B, 'M', u'恵'), - (0xFA6C, 'M', u'𤋮'), - (0xFA6D, 'M', u'舘'), - (0xFA6E, 'X'), - (0xFA70, 'M', u'並'), - (0xFA71, 'M', u'况'), - (0xFA72, 'M', u'全'), - (0xFA73, 'M', u'侀'), - (0xFA74, 'M', u'充'), - (0xFA75, 'M', u'冀'), - (0xFA76, 'M', u'勇'), - (0xFA77, 'M', u'勺'), - (0xFA78, 'M', u'喝'), - (0xFA79, 'M', u'啕'), - (0xFA7A, 'M', u'喙'), - (0xFA7B, 'M', u'嗢'), - (0xFA7C, 'M', u'塚'), - (0xFA7D, 'M', u'墳'), - (0xFA7E, 'M', u'奄'), - (0xFA7F, 'M', u'奔'), - (0xFA80, 'M', u'婢'), - (0xFA81, 'M', u'嬨'), - (0xFA82, 'M', u'廒'), - (0xFA83, 'M', u'廙'), - (0xFA84, 'M', u'彩'), - (0xFA85, 'M', u'徭'), - (0xFA86, 'M', u'惘'), - (0xFA87, 'M', u'慎'), - (0xFA88, 'M', u'愈'), - (0xFA89, 'M', u'憎'), - (0xFA8A, 'M', u'慠'), - (0xFA8B, 'M', u'懲'), - (0xFA8C, 'M', u'戴'), - (0xFA8D, 'M', u'揄'), - (0xFA8E, 'M', u'搜'), - (0xFA8F, 'M', u'摒'), - (0xFA90, 'M', u'敖'), - (0xFA91, 'M', u'晴'), - (0xFA92, 'M', u'朗'), - (0xFA93, 'M', u'望'), - (0xFA94, 'M', u'杖'), - (0xFA95, 'M', u'歹'), - (0xFA96, 'M', u'殺'), - (0xFA97, 'M', u'流'), - (0xFA98, 'M', u'滛'), - (0xFA99, 'M', u'滋'), - (0xFA9A, 'M', u'漢'), - (0xFA9B, 'M', u'瀞'), - (0xFA9C, 'M', u'煮'), - (0xFA9D, 'M', u'瞧'), - (0xFA9E, 'M', u'爵'), - (0xFA9F, 'M', u'犯'), - (0xFAA0, 'M', u'猪'), - (0xFAA1, 'M', u'瑱'), - ] - -def _seg_43(): - return [ - (0xFAA2, 'M', u'甆'), - (0xFAA3, 'M', u'画'), - (0xFAA4, 'M', u'瘝'), - (0xFAA5, 'M', u'瘟'), - (0xFAA6, 'M', u'益'), - (0xFAA7, 'M', u'盛'), - (0xFAA8, 'M', u'直'), - (0xFAA9, 'M', u'睊'), - (0xFAAA, 'M', u'着'), - (0xFAAB, 'M', u'磌'), - (0xFAAC, 'M', u'窱'), - (0xFAAD, 'M', u'節'), - (0xFAAE, 'M', u'类'), - (0xFAAF, 'M', u'絛'), - (0xFAB0, 'M', u'練'), - (0xFAB1, 'M', u'缾'), - (0xFAB2, 'M', u'者'), - (0xFAB3, 'M', u'荒'), - (0xFAB4, 'M', u'華'), - (0xFAB5, 'M', u'蝹'), - (0xFAB6, 'M', u'襁'), - (0xFAB7, 'M', u'覆'), - (0xFAB8, 'M', u'視'), - (0xFAB9, 'M', u'調'), - (0xFABA, 'M', u'諸'), - (0xFABB, 'M', u'請'), - (0xFABC, 'M', u'謁'), - (0xFABD, 'M', u'諾'), - (0xFABE, 'M', u'諭'), - (0xFABF, 'M', u'謹'), - (0xFAC0, 'M', u'變'), - (0xFAC1, 'M', u'贈'), - (0xFAC2, 'M', u'輸'), - (0xFAC3, 'M', u'遲'), - (0xFAC4, 'M', u'醙'), - (0xFAC5, 'M', u'鉶'), - (0xFAC6, 'M', u'陼'), - (0xFAC7, 'M', u'難'), - (0xFAC8, 'M', u'靖'), - (0xFAC9, 'M', u'韛'), - (0xFACA, 'M', u'響'), - (0xFACB, 'M', u'頋'), - (0xFACC, 'M', u'頻'), - (0xFACD, 'M', u'鬒'), - (0xFACE, 'M', u'龜'), - (0xFACF, 'M', u'𢡊'), - (0xFAD0, 'M', u'𢡄'), - (0xFAD1, 'M', u'𣏕'), - (0xFAD2, 'M', u'㮝'), - (0xFAD3, 'M', u'䀘'), - (0xFAD4, 'M', u'䀹'), - (0xFAD5, 'M', u'𥉉'), - (0xFAD6, 'M', u'𥳐'), - (0xFAD7, 'M', u'𧻓'), - (0xFAD8, 'M', u'齃'), - (0xFAD9, 'M', u'龎'), - (0xFADA, 'X'), - (0xFB00, 'M', u'ff'), - (0xFB01, 'M', u'fi'), - (0xFB02, 'M', u'fl'), - (0xFB03, 'M', u'ffi'), - (0xFB04, 'M', u'ffl'), - (0xFB05, 'M', u'st'), - (0xFB07, 'X'), - (0xFB13, 'M', u'մն'), - (0xFB14, 'M', u'մե'), - (0xFB15, 'M', u'մի'), - (0xFB16, 'M', u'վն'), - (0xFB17, 'M', u'մխ'), - (0xFB18, 'X'), - (0xFB1D, 'M', u'יִ'), - (0xFB1E, 'V'), - (0xFB1F, 'M', u'ײַ'), - (0xFB20, 'M', u'ע'), - (0xFB21, 'M', u'א'), - (0xFB22, 'M', u'ד'), - (0xFB23, 'M', u'ה'), - (0xFB24, 'M', u'כ'), - (0xFB25, 'M', u'ל'), - (0xFB26, 'M', u'ם'), - (0xFB27, 'M', u'ר'), - (0xFB28, 'M', u'ת'), - (0xFB29, '3', u'+'), - (0xFB2A, 'M', u'שׁ'), - (0xFB2B, 'M', u'שׂ'), - (0xFB2C, 'M', u'שּׁ'), - (0xFB2D, 'M', u'שּׂ'), - (0xFB2E, 'M', u'אַ'), - (0xFB2F, 'M', u'אָ'), - (0xFB30, 'M', u'אּ'), - (0xFB31, 'M', u'בּ'), - (0xFB32, 'M', u'גּ'), - (0xFB33, 'M', u'דּ'), - (0xFB34, 'M', u'הּ'), - (0xFB35, 'M', u'וּ'), - (0xFB36, 'M', u'זּ'), - (0xFB37, 'X'), - (0xFB38, 'M', u'טּ'), - (0xFB39, 'M', u'יּ'), - (0xFB3A, 'M', u'ךּ'), - ] - -def _seg_44(): - return [ - (0xFB3B, 'M', u'כּ'), - (0xFB3C, 'M', u'לּ'), - (0xFB3D, 'X'), - (0xFB3E, 'M', u'מּ'), - (0xFB3F, 'X'), - (0xFB40, 'M', u'נּ'), - (0xFB41, 'M', u'סּ'), - (0xFB42, 'X'), - (0xFB43, 'M', u'ףּ'), - (0xFB44, 'M', u'פּ'), - (0xFB45, 'X'), - (0xFB46, 'M', u'צּ'), - (0xFB47, 'M', u'קּ'), - (0xFB48, 'M', u'רּ'), - (0xFB49, 'M', u'שּ'), - (0xFB4A, 'M', u'תּ'), - (0xFB4B, 'M', u'וֹ'), - (0xFB4C, 'M', u'בֿ'), - (0xFB4D, 'M', u'כֿ'), - (0xFB4E, 'M', u'פֿ'), - (0xFB4F, 'M', u'אל'), - (0xFB50, 'M', u'ٱ'), - (0xFB52, 'M', u'ٻ'), - (0xFB56, 'M', u'پ'), - (0xFB5A, 'M', u'ڀ'), - (0xFB5E, 'M', u'ٺ'), - (0xFB62, 'M', u'ٿ'), - (0xFB66, 'M', u'ٹ'), - (0xFB6A, 'M', u'ڤ'), - (0xFB6E, 'M', u'ڦ'), - (0xFB72, 'M', u'ڄ'), - (0xFB76, 'M', u'ڃ'), - (0xFB7A, 'M', u'چ'), - (0xFB7E, 'M', u'ڇ'), - (0xFB82, 'M', u'ڍ'), - (0xFB84, 'M', u'ڌ'), - (0xFB86, 'M', u'ڎ'), - (0xFB88, 'M', u'ڈ'), - (0xFB8A, 'M', u'ژ'), - (0xFB8C, 'M', u'ڑ'), - (0xFB8E, 'M', u'ک'), - (0xFB92, 'M', u'گ'), - (0xFB96, 'M', u'ڳ'), - (0xFB9A, 'M', u'ڱ'), - (0xFB9E, 'M', u'ں'), - (0xFBA0, 'M', u'ڻ'), - (0xFBA4, 'M', u'ۀ'), - (0xFBA6, 'M', u'ہ'), - (0xFBAA, 'M', u'ھ'), - (0xFBAE, 'M', u'ے'), - (0xFBB0, 'M', u'ۓ'), - (0xFBB2, 'V'), - (0xFBC2, 'X'), - (0xFBD3, 'M', u'ڭ'), - (0xFBD7, 'M', u'ۇ'), - (0xFBD9, 'M', u'ۆ'), - (0xFBDB, 'M', u'ۈ'), - (0xFBDD, 'M', u'ۇٴ'), - (0xFBDE, 'M', u'ۋ'), - (0xFBE0, 'M', u'ۅ'), - (0xFBE2, 'M', u'ۉ'), - (0xFBE4, 'M', u'ې'), - (0xFBE8, 'M', u'ى'), - (0xFBEA, 'M', u'ئا'), - (0xFBEC, 'M', u'ئە'), - (0xFBEE, 'M', u'ئو'), - (0xFBF0, 'M', u'ئۇ'), - (0xFBF2, 'M', u'ئۆ'), - (0xFBF4, 'M', u'ئۈ'), - (0xFBF6, 'M', u'ئې'), - (0xFBF9, 'M', u'ئى'), - (0xFBFC, 'M', u'ی'), - (0xFC00, 'M', u'ئج'), - (0xFC01, 'M', u'ئح'), - (0xFC02, 'M', u'ئم'), - (0xFC03, 'M', u'ئى'), - (0xFC04, 'M', u'ئي'), - (0xFC05, 'M', u'بج'), - (0xFC06, 'M', u'بح'), - (0xFC07, 'M', u'بخ'), - (0xFC08, 'M', u'بم'), - (0xFC09, 'M', u'بى'), - (0xFC0A, 'M', u'بي'), - (0xFC0B, 'M', u'تج'), - (0xFC0C, 'M', u'تح'), - (0xFC0D, 'M', u'تخ'), - (0xFC0E, 'M', u'تم'), - (0xFC0F, 'M', u'تى'), - (0xFC10, 'M', u'تي'), - (0xFC11, 'M', u'ثج'), - (0xFC12, 'M', u'ثم'), - (0xFC13, 'M', u'ثى'), - (0xFC14, 'M', u'ثي'), - (0xFC15, 'M', u'جح'), - (0xFC16, 'M', u'جم'), - (0xFC17, 'M', u'حج'), - (0xFC18, 'M', u'حم'), - (0xFC19, 'M', u'خج'), - (0xFC1A, 'M', u'خح'), - (0xFC1B, 'M', u'خم'), - ] - -def _seg_45(): - return [ - (0xFC1C, 'M', u'سج'), - (0xFC1D, 'M', u'سح'), - (0xFC1E, 'M', u'سخ'), - (0xFC1F, 'M', u'سم'), - (0xFC20, 'M', u'صح'), - (0xFC21, 'M', u'صم'), - (0xFC22, 'M', u'ضج'), - (0xFC23, 'M', u'ضح'), - (0xFC24, 'M', u'ضخ'), - (0xFC25, 'M', u'ضم'), - (0xFC26, 'M', u'طح'), - (0xFC27, 'M', u'طم'), - (0xFC28, 'M', u'ظم'), - (0xFC29, 'M', u'عج'), - (0xFC2A, 'M', u'عم'), - (0xFC2B, 'M', u'غج'), - (0xFC2C, 'M', u'غم'), - (0xFC2D, 'M', u'فج'), - (0xFC2E, 'M', u'فح'), - (0xFC2F, 'M', u'فخ'), - (0xFC30, 'M', u'فم'), - (0xFC31, 'M', u'فى'), - (0xFC32, 'M', u'في'), - (0xFC33, 'M', u'قح'), - (0xFC34, 'M', u'قم'), - (0xFC35, 'M', u'قى'), - (0xFC36, 'M', u'قي'), - (0xFC37, 'M', u'كا'), - (0xFC38, 'M', u'كج'), - (0xFC39, 'M', u'كح'), - (0xFC3A, 'M', u'كخ'), - (0xFC3B, 'M', u'كل'), - (0xFC3C, 'M', u'كم'), - (0xFC3D, 'M', u'كى'), - (0xFC3E, 'M', u'كي'), - (0xFC3F, 'M', u'لج'), - (0xFC40, 'M', u'لح'), - (0xFC41, 'M', u'لخ'), - (0xFC42, 'M', u'لم'), - (0xFC43, 'M', u'لى'), - (0xFC44, 'M', u'لي'), - (0xFC45, 'M', u'مج'), - (0xFC46, 'M', u'مح'), - (0xFC47, 'M', u'مخ'), - (0xFC48, 'M', u'مم'), - (0xFC49, 'M', u'مى'), - (0xFC4A, 'M', u'مي'), - (0xFC4B, 'M', u'نج'), - (0xFC4C, 'M', u'نح'), - (0xFC4D, 'M', u'نخ'), - (0xFC4E, 'M', u'نم'), - (0xFC4F, 'M', u'نى'), - (0xFC50, 'M', u'ني'), - (0xFC51, 'M', u'هج'), - (0xFC52, 'M', u'هم'), - (0xFC53, 'M', u'هى'), - (0xFC54, 'M', u'هي'), - (0xFC55, 'M', u'يج'), - (0xFC56, 'M', u'يح'), - (0xFC57, 'M', u'يخ'), - (0xFC58, 'M', u'يم'), - (0xFC59, 'M', u'يى'), - (0xFC5A, 'M', u'يي'), - (0xFC5B, 'M', u'ذٰ'), - (0xFC5C, 'M', u'رٰ'), - (0xFC5D, 'M', u'ىٰ'), - (0xFC5E, '3', u' ٌّ'), - (0xFC5F, '3', u' ٍّ'), - (0xFC60, '3', u' َّ'), - (0xFC61, '3', u' ُّ'), - (0xFC62, '3', u' ِّ'), - (0xFC63, '3', u' ّٰ'), - (0xFC64, 'M', u'ئر'), - (0xFC65, 'M', u'ئز'), - (0xFC66, 'M', u'ئم'), - (0xFC67, 'M', u'ئن'), - (0xFC68, 'M', u'ئى'), - (0xFC69, 'M', u'ئي'), - (0xFC6A, 'M', u'بر'), - (0xFC6B, 'M', u'بز'), - (0xFC6C, 'M', u'بم'), - (0xFC6D, 'M', u'بن'), - (0xFC6E, 'M', u'بى'), - (0xFC6F, 'M', u'بي'), - (0xFC70, 'M', u'تر'), - (0xFC71, 'M', u'تز'), - (0xFC72, 'M', u'تم'), - (0xFC73, 'M', u'تن'), - (0xFC74, 'M', u'تى'), - (0xFC75, 'M', u'تي'), - (0xFC76, 'M', u'ثر'), - (0xFC77, 'M', u'ثز'), - (0xFC78, 'M', u'ثم'), - (0xFC79, 'M', u'ثن'), - (0xFC7A, 'M', u'ثى'), - (0xFC7B, 'M', u'ثي'), - (0xFC7C, 'M', u'فى'), - (0xFC7D, 'M', u'في'), - (0xFC7E, 'M', u'قى'), - (0xFC7F, 'M', u'قي'), - ] - -def _seg_46(): - return [ - (0xFC80, 'M', u'كا'), - (0xFC81, 'M', u'كل'), - (0xFC82, 'M', u'كم'), - (0xFC83, 'M', u'كى'), - (0xFC84, 'M', u'كي'), - (0xFC85, 'M', u'لم'), - (0xFC86, 'M', u'لى'), - (0xFC87, 'M', u'لي'), - (0xFC88, 'M', u'ما'), - (0xFC89, 'M', u'مم'), - (0xFC8A, 'M', u'نر'), - (0xFC8B, 'M', u'نز'), - (0xFC8C, 'M', u'نم'), - (0xFC8D, 'M', u'نن'), - (0xFC8E, 'M', u'نى'), - (0xFC8F, 'M', u'ني'), - (0xFC90, 'M', u'ىٰ'), - (0xFC91, 'M', u'ير'), - (0xFC92, 'M', u'يز'), - (0xFC93, 'M', u'يم'), - (0xFC94, 'M', u'ين'), - (0xFC95, 'M', u'يى'), - (0xFC96, 'M', u'يي'), - (0xFC97, 'M', u'ئج'), - (0xFC98, 'M', u'ئح'), - (0xFC99, 'M', u'ئخ'), - (0xFC9A, 'M', u'ئم'), - (0xFC9B, 'M', u'ئه'), - (0xFC9C, 'M', u'بج'), - (0xFC9D, 'M', u'بح'), - (0xFC9E, 'M', u'بخ'), - (0xFC9F, 'M', u'بم'), - (0xFCA0, 'M', u'به'), - (0xFCA1, 'M', u'تج'), - (0xFCA2, 'M', u'تح'), - (0xFCA3, 'M', u'تخ'), - (0xFCA4, 'M', u'تم'), - (0xFCA5, 'M', u'ته'), - (0xFCA6, 'M', u'ثم'), - (0xFCA7, 'M', u'جح'), - (0xFCA8, 'M', u'جم'), - (0xFCA9, 'M', u'حج'), - (0xFCAA, 'M', u'حم'), - (0xFCAB, 'M', u'خج'), - (0xFCAC, 'M', u'خم'), - (0xFCAD, 'M', u'سج'), - (0xFCAE, 'M', u'سح'), - (0xFCAF, 'M', u'سخ'), - (0xFCB0, 'M', u'سم'), - (0xFCB1, 'M', u'صح'), - (0xFCB2, 'M', u'صخ'), - (0xFCB3, 'M', u'صم'), - (0xFCB4, 'M', u'ضج'), - (0xFCB5, 'M', u'ضح'), - (0xFCB6, 'M', u'ضخ'), - (0xFCB7, 'M', u'ضم'), - (0xFCB8, 'M', u'طح'), - (0xFCB9, 'M', u'ظم'), - (0xFCBA, 'M', u'عج'), - (0xFCBB, 'M', u'عم'), - (0xFCBC, 'M', u'غج'), - (0xFCBD, 'M', u'غم'), - (0xFCBE, 'M', u'فج'), - (0xFCBF, 'M', u'فح'), - (0xFCC0, 'M', u'فخ'), - (0xFCC1, 'M', u'فم'), - (0xFCC2, 'M', u'قح'), - (0xFCC3, 'M', u'قم'), - (0xFCC4, 'M', u'كج'), - (0xFCC5, 'M', u'كح'), - (0xFCC6, 'M', u'كخ'), - (0xFCC7, 'M', u'كل'), - (0xFCC8, 'M', u'كم'), - (0xFCC9, 'M', u'لج'), - (0xFCCA, 'M', u'لح'), - (0xFCCB, 'M', u'لخ'), - (0xFCCC, 'M', u'لم'), - (0xFCCD, 'M', u'له'), - (0xFCCE, 'M', u'مج'), - (0xFCCF, 'M', u'مح'), - (0xFCD0, 'M', u'مخ'), - (0xFCD1, 'M', u'مم'), - (0xFCD2, 'M', u'نج'), - (0xFCD3, 'M', u'نح'), - (0xFCD4, 'M', u'نخ'), - (0xFCD5, 'M', u'نم'), - (0xFCD6, 'M', u'نه'), - (0xFCD7, 'M', u'هج'), - (0xFCD8, 'M', u'هم'), - (0xFCD9, 'M', u'هٰ'), - (0xFCDA, 'M', u'يج'), - (0xFCDB, 'M', u'يح'), - (0xFCDC, 'M', u'يخ'), - (0xFCDD, 'M', u'يم'), - (0xFCDE, 'M', u'يه'), - (0xFCDF, 'M', u'ئم'), - (0xFCE0, 'M', u'ئه'), - (0xFCE1, 'M', u'بم'), - (0xFCE2, 'M', u'به'), - (0xFCE3, 'M', u'تم'), - ] - -def _seg_47(): - return [ - (0xFCE4, 'M', u'ته'), - (0xFCE5, 'M', u'ثم'), - (0xFCE6, 'M', u'ثه'), - (0xFCE7, 'M', u'سم'), - (0xFCE8, 'M', u'سه'), - (0xFCE9, 'M', u'شم'), - (0xFCEA, 'M', u'شه'), - (0xFCEB, 'M', u'كل'), - (0xFCEC, 'M', u'كم'), - (0xFCED, 'M', u'لم'), - (0xFCEE, 'M', u'نم'), - (0xFCEF, 'M', u'نه'), - (0xFCF0, 'M', u'يم'), - (0xFCF1, 'M', u'يه'), - (0xFCF2, 'M', u'ـَّ'), - (0xFCF3, 'M', u'ـُّ'), - (0xFCF4, 'M', u'ـِّ'), - (0xFCF5, 'M', u'طى'), - (0xFCF6, 'M', u'طي'), - (0xFCF7, 'M', u'عى'), - (0xFCF8, 'M', u'عي'), - (0xFCF9, 'M', u'غى'), - (0xFCFA, 'M', u'غي'), - (0xFCFB, 'M', u'سى'), - (0xFCFC, 'M', u'سي'), - (0xFCFD, 'M', u'شى'), - (0xFCFE, 'M', u'شي'), - (0xFCFF, 'M', u'حى'), - (0xFD00, 'M', u'حي'), - (0xFD01, 'M', u'جى'), - (0xFD02, 'M', u'جي'), - (0xFD03, 'M', u'خى'), - (0xFD04, 'M', u'خي'), - (0xFD05, 'M', u'صى'), - (0xFD06, 'M', u'صي'), - (0xFD07, 'M', u'ضى'), - (0xFD08, 'M', u'ضي'), - (0xFD09, 'M', u'شج'), - (0xFD0A, 'M', u'شح'), - (0xFD0B, 'M', u'شخ'), - (0xFD0C, 'M', u'شم'), - (0xFD0D, 'M', u'شر'), - (0xFD0E, 'M', u'سر'), - (0xFD0F, 'M', u'صر'), - (0xFD10, 'M', u'ضر'), - (0xFD11, 'M', u'طى'), - (0xFD12, 'M', u'طي'), - (0xFD13, 'M', u'عى'), - (0xFD14, 'M', u'عي'), - (0xFD15, 'M', u'غى'), - (0xFD16, 'M', u'غي'), - (0xFD17, 'M', u'سى'), - (0xFD18, 'M', u'سي'), - (0xFD19, 'M', u'شى'), - (0xFD1A, 'M', u'شي'), - (0xFD1B, 'M', u'حى'), - (0xFD1C, 'M', u'حي'), - (0xFD1D, 'M', u'جى'), - (0xFD1E, 'M', u'جي'), - (0xFD1F, 'M', u'خى'), - (0xFD20, 'M', u'خي'), - (0xFD21, 'M', u'صى'), - (0xFD22, 'M', u'صي'), - (0xFD23, 'M', u'ضى'), - (0xFD24, 'M', u'ضي'), - (0xFD25, 'M', u'شج'), - (0xFD26, 'M', u'شح'), - (0xFD27, 'M', u'شخ'), - (0xFD28, 'M', u'شم'), - (0xFD29, 'M', u'شر'), - (0xFD2A, 'M', u'سر'), - (0xFD2B, 'M', u'صر'), - (0xFD2C, 'M', u'ضر'), - (0xFD2D, 'M', u'شج'), - (0xFD2E, 'M', u'شح'), - (0xFD2F, 'M', u'شخ'), - (0xFD30, 'M', u'شم'), - (0xFD31, 'M', u'سه'), - (0xFD32, 'M', u'شه'), - (0xFD33, 'M', u'طم'), - (0xFD34, 'M', u'سج'), - (0xFD35, 'M', u'سح'), - (0xFD36, 'M', u'سخ'), - (0xFD37, 'M', u'شج'), - (0xFD38, 'M', u'شح'), - (0xFD39, 'M', u'شخ'), - (0xFD3A, 'M', u'طم'), - (0xFD3B, 'M', u'ظم'), - (0xFD3C, 'M', u'اً'), - (0xFD3E, 'V'), - (0xFD40, 'X'), - (0xFD50, 'M', u'تجم'), - (0xFD51, 'M', u'تحج'), - (0xFD53, 'M', u'تحم'), - (0xFD54, 'M', u'تخم'), - (0xFD55, 'M', u'تمج'), - (0xFD56, 'M', u'تمح'), - (0xFD57, 'M', u'تمخ'), - (0xFD58, 'M', u'جمح'), - (0xFD5A, 'M', u'حمي'), - ] - -def _seg_48(): - return [ - (0xFD5B, 'M', u'حمى'), - (0xFD5C, 'M', u'سحج'), - (0xFD5D, 'M', u'سجح'), - (0xFD5E, 'M', u'سجى'), - (0xFD5F, 'M', u'سمح'), - (0xFD61, 'M', u'سمج'), - (0xFD62, 'M', u'سمم'), - (0xFD64, 'M', u'صحح'), - (0xFD66, 'M', u'صمم'), - (0xFD67, 'M', u'شحم'), - (0xFD69, 'M', u'شجي'), - (0xFD6A, 'M', u'شمخ'), - (0xFD6C, 'M', u'شمم'), - (0xFD6E, 'M', u'ضحى'), - (0xFD6F, 'M', u'ضخم'), - (0xFD71, 'M', u'طمح'), - (0xFD73, 'M', u'طمم'), - (0xFD74, 'M', u'طمي'), - (0xFD75, 'M', u'عجم'), - (0xFD76, 'M', u'عمم'), - (0xFD78, 'M', u'عمى'), - (0xFD79, 'M', u'غمم'), - (0xFD7A, 'M', u'غمي'), - (0xFD7B, 'M', u'غمى'), - (0xFD7C, 'M', u'فخم'), - (0xFD7E, 'M', u'قمح'), - (0xFD7F, 'M', u'قمم'), - (0xFD80, 'M', u'لحم'), - (0xFD81, 'M', u'لحي'), - (0xFD82, 'M', u'لحى'), - (0xFD83, 'M', u'لجج'), - (0xFD85, 'M', u'لخم'), - (0xFD87, 'M', u'لمح'), - (0xFD89, 'M', u'محج'), - (0xFD8A, 'M', u'محم'), - (0xFD8B, 'M', u'محي'), - (0xFD8C, 'M', u'مجح'), - (0xFD8D, 'M', u'مجم'), - (0xFD8E, 'M', u'مخج'), - (0xFD8F, 'M', u'مخم'), - (0xFD90, 'X'), - (0xFD92, 'M', u'مجخ'), - (0xFD93, 'M', u'همج'), - (0xFD94, 'M', u'همم'), - (0xFD95, 'M', u'نحم'), - (0xFD96, 'M', u'نحى'), - (0xFD97, 'M', u'نجم'), - (0xFD99, 'M', u'نجى'), - (0xFD9A, 'M', u'نمي'), - (0xFD9B, 'M', u'نمى'), - (0xFD9C, 'M', u'يمم'), - (0xFD9E, 'M', u'بخي'), - (0xFD9F, 'M', u'تجي'), - (0xFDA0, 'M', u'تجى'), - (0xFDA1, 'M', u'تخي'), - (0xFDA2, 'M', u'تخى'), - (0xFDA3, 'M', u'تمي'), - (0xFDA4, 'M', u'تمى'), - (0xFDA5, 'M', u'جمي'), - (0xFDA6, 'M', u'جحى'), - (0xFDA7, 'M', u'جمى'), - (0xFDA8, 'M', u'سخى'), - (0xFDA9, 'M', u'صحي'), - (0xFDAA, 'M', u'شحي'), - (0xFDAB, 'M', u'ضحي'), - (0xFDAC, 'M', u'لجي'), - (0xFDAD, 'M', u'لمي'), - (0xFDAE, 'M', u'يحي'), - (0xFDAF, 'M', u'يجي'), - (0xFDB0, 'M', u'يمي'), - (0xFDB1, 'M', u'ممي'), - (0xFDB2, 'M', u'قمي'), - (0xFDB3, 'M', u'نحي'), - (0xFDB4, 'M', u'قمح'), - (0xFDB5, 'M', u'لحم'), - (0xFDB6, 'M', u'عمي'), - (0xFDB7, 'M', u'كمي'), - (0xFDB8, 'M', u'نجح'), - (0xFDB9, 'M', u'مخي'), - (0xFDBA, 'M', u'لجم'), - (0xFDBB, 'M', u'كمم'), - (0xFDBC, 'M', u'لجم'), - (0xFDBD, 'M', u'نجح'), - (0xFDBE, 'M', u'جحي'), - (0xFDBF, 'M', u'حجي'), - (0xFDC0, 'M', u'مجي'), - (0xFDC1, 'M', u'فمي'), - (0xFDC2, 'M', u'بحي'), - (0xFDC3, 'M', u'كمم'), - (0xFDC4, 'M', u'عجم'), - (0xFDC5, 'M', u'صمم'), - (0xFDC6, 'M', u'سخي'), - (0xFDC7, 'M', u'نجي'), - (0xFDC8, 'X'), - (0xFDF0, 'M', u'صلے'), - (0xFDF1, 'M', u'قلے'), - (0xFDF2, 'M', u'الله'), - (0xFDF3, 'M', u'اكبر'), - (0xFDF4, 'M', u'محمد'), - (0xFDF5, 'M', u'صلعم'), - ] - -def _seg_49(): - return [ - (0xFDF6, 'M', u'رسول'), - (0xFDF7, 'M', u'عليه'), - (0xFDF8, 'M', u'وسلم'), - (0xFDF9, 'M', u'صلى'), - (0xFDFA, '3', u'صلى الله عليه وسلم'), - (0xFDFB, '3', u'جل جلاله'), - (0xFDFC, 'M', u'ریال'), - (0xFDFD, 'V'), - (0xFDFE, 'X'), - (0xFE00, 'I'), - (0xFE10, '3', u','), - (0xFE11, 'M', u'、'), - (0xFE12, 'X'), - (0xFE13, '3', u':'), - (0xFE14, '3', u';'), - (0xFE15, '3', u'!'), - (0xFE16, '3', u'?'), - (0xFE17, 'M', u'〖'), - (0xFE18, 'M', u'〗'), - (0xFE19, 'X'), - (0xFE20, 'V'), - (0xFE30, 'X'), - (0xFE31, 'M', u'—'), - (0xFE32, 'M', u'–'), - (0xFE33, '3', u'_'), - (0xFE35, '3', u'('), - (0xFE36, '3', u')'), - (0xFE37, '3', u'{'), - (0xFE38, '3', u'}'), - (0xFE39, 'M', u'〔'), - (0xFE3A, 'M', u'〕'), - (0xFE3B, 'M', u'【'), - (0xFE3C, 'M', u'】'), - (0xFE3D, 'M', u'《'), - (0xFE3E, 'M', u'》'), - (0xFE3F, 'M', u'〈'), - (0xFE40, 'M', u'〉'), - (0xFE41, 'M', u'「'), - (0xFE42, 'M', u'」'), - (0xFE43, 'M', u'『'), - (0xFE44, 'M', u'』'), - (0xFE45, 'V'), - (0xFE47, '3', u'['), - (0xFE48, '3', u']'), - (0xFE49, '3', u' ̅'), - (0xFE4D, '3', u'_'), - (0xFE50, '3', u','), - (0xFE51, 'M', u'、'), - (0xFE52, 'X'), - (0xFE54, '3', u';'), - (0xFE55, '3', u':'), - (0xFE56, '3', u'?'), - (0xFE57, '3', u'!'), - (0xFE58, 'M', u'—'), - (0xFE59, '3', u'('), - (0xFE5A, '3', u')'), - (0xFE5B, '3', u'{'), - (0xFE5C, '3', u'}'), - (0xFE5D, 'M', u'〔'), - (0xFE5E, 'M', u'〕'), - (0xFE5F, '3', u'#'), - (0xFE60, '3', u'&'), - (0xFE61, '3', u'*'), - (0xFE62, '3', u'+'), - (0xFE63, 'M', u'-'), - (0xFE64, '3', u'<'), - (0xFE65, '3', u'>'), - (0xFE66, '3', u'='), - (0xFE67, 'X'), - (0xFE68, '3', u'\\'), - (0xFE69, '3', u'$'), - (0xFE6A, '3', u'%'), - (0xFE6B, '3', u'@'), - (0xFE6C, 'X'), - (0xFE70, '3', u' ً'), - (0xFE71, 'M', u'ـً'), - (0xFE72, '3', u' ٌ'), - (0xFE73, 'V'), - (0xFE74, '3', u' ٍ'), - (0xFE75, 'X'), - (0xFE76, '3', u' َ'), - (0xFE77, 'M', u'ـَ'), - (0xFE78, '3', u' ُ'), - (0xFE79, 'M', u'ـُ'), - (0xFE7A, '3', u' ِ'), - (0xFE7B, 'M', u'ـِ'), - (0xFE7C, '3', u' ّ'), - (0xFE7D, 'M', u'ـّ'), - (0xFE7E, '3', u' ْ'), - (0xFE7F, 'M', u'ـْ'), - (0xFE80, 'M', u'ء'), - (0xFE81, 'M', u'آ'), - (0xFE83, 'M', u'أ'), - (0xFE85, 'M', u'ؤ'), - (0xFE87, 'M', u'إ'), - (0xFE89, 'M', u'ئ'), - (0xFE8D, 'M', u'ا'), - (0xFE8F, 'M', u'ب'), - (0xFE93, 'M', u'ة'), - (0xFE95, 'M', u'ت'), - ] - -def _seg_50(): - return [ - (0xFE99, 'M', u'ث'), - (0xFE9D, 'M', u'ج'), - (0xFEA1, 'M', u'ح'), - (0xFEA5, 'M', u'خ'), - (0xFEA9, 'M', u'د'), - (0xFEAB, 'M', u'ذ'), - (0xFEAD, 'M', u'ر'), - (0xFEAF, 'M', u'ز'), - (0xFEB1, 'M', u'س'), - (0xFEB5, 'M', u'ش'), - (0xFEB9, 'M', u'ص'), - (0xFEBD, 'M', u'ض'), - (0xFEC1, 'M', u'ط'), - (0xFEC5, 'M', u'ظ'), - (0xFEC9, 'M', u'ع'), - (0xFECD, 'M', u'غ'), - (0xFED1, 'M', u'ف'), - (0xFED5, 'M', u'ق'), - (0xFED9, 'M', u'ك'), - (0xFEDD, 'M', u'ل'), - (0xFEE1, 'M', u'م'), - (0xFEE5, 'M', u'ن'), - (0xFEE9, 'M', u'ه'), - (0xFEED, 'M', u'و'), - (0xFEEF, 'M', u'ى'), - (0xFEF1, 'M', u'ي'), - (0xFEF5, 'M', u'لآ'), - (0xFEF7, 'M', u'لأ'), - (0xFEF9, 'M', u'لإ'), - (0xFEFB, 'M', u'لا'), - (0xFEFD, 'X'), - (0xFEFF, 'I'), - (0xFF00, 'X'), - (0xFF01, '3', u'!'), - (0xFF02, '3', u'"'), - (0xFF03, '3', u'#'), - (0xFF04, '3', u'$'), - (0xFF05, '3', u'%'), - (0xFF06, '3', u'&'), - (0xFF07, '3', u'\''), - (0xFF08, '3', u'('), - (0xFF09, '3', u')'), - (0xFF0A, '3', u'*'), - (0xFF0B, '3', u'+'), - (0xFF0C, '3', u','), - (0xFF0D, 'M', u'-'), - (0xFF0E, 'M', u'.'), - (0xFF0F, '3', u'/'), - (0xFF10, 'M', u'0'), - (0xFF11, 'M', u'1'), - (0xFF12, 'M', u'2'), - (0xFF13, 'M', u'3'), - (0xFF14, 'M', u'4'), - (0xFF15, 'M', u'5'), - (0xFF16, 'M', u'6'), - (0xFF17, 'M', u'7'), - (0xFF18, 'M', u'8'), - (0xFF19, 'M', u'9'), - (0xFF1A, '3', u':'), - (0xFF1B, '3', u';'), - (0xFF1C, '3', u'<'), - (0xFF1D, '3', u'='), - (0xFF1E, '3', u'>'), - (0xFF1F, '3', u'?'), - (0xFF20, '3', u'@'), - (0xFF21, 'M', u'a'), - (0xFF22, 'M', u'b'), - (0xFF23, 'M', u'c'), - (0xFF24, 'M', u'd'), - (0xFF25, 'M', u'e'), - (0xFF26, 'M', u'f'), - (0xFF27, 'M', u'g'), - (0xFF28, 'M', u'h'), - (0xFF29, 'M', u'i'), - (0xFF2A, 'M', u'j'), - (0xFF2B, 'M', u'k'), - (0xFF2C, 'M', u'l'), - (0xFF2D, 'M', u'm'), - (0xFF2E, 'M', u'n'), - (0xFF2F, 'M', u'o'), - (0xFF30, 'M', u'p'), - (0xFF31, 'M', u'q'), - (0xFF32, 'M', u'r'), - (0xFF33, 'M', u's'), - (0xFF34, 'M', u't'), - (0xFF35, 'M', u'u'), - (0xFF36, 'M', u'v'), - (0xFF37, 'M', u'w'), - (0xFF38, 'M', u'x'), - (0xFF39, 'M', u'y'), - (0xFF3A, 'M', u'z'), - (0xFF3B, '3', u'['), - (0xFF3C, '3', u'\\'), - (0xFF3D, '3', u']'), - (0xFF3E, '3', u'^'), - (0xFF3F, '3', u'_'), - (0xFF40, '3', u'`'), - (0xFF41, 'M', u'a'), - (0xFF42, 'M', u'b'), - (0xFF43, 'M', u'c'), - ] - -def _seg_51(): - return [ - (0xFF44, 'M', u'd'), - (0xFF45, 'M', u'e'), - (0xFF46, 'M', u'f'), - (0xFF47, 'M', u'g'), - (0xFF48, 'M', u'h'), - (0xFF49, 'M', u'i'), - (0xFF4A, 'M', u'j'), - (0xFF4B, 'M', u'k'), - (0xFF4C, 'M', u'l'), - (0xFF4D, 'M', u'm'), - (0xFF4E, 'M', u'n'), - (0xFF4F, 'M', u'o'), - (0xFF50, 'M', u'p'), - (0xFF51, 'M', u'q'), - (0xFF52, 'M', u'r'), - (0xFF53, 'M', u's'), - (0xFF54, 'M', u't'), - (0xFF55, 'M', u'u'), - (0xFF56, 'M', u'v'), - (0xFF57, 'M', u'w'), - (0xFF58, 'M', u'x'), - (0xFF59, 'M', u'y'), - (0xFF5A, 'M', u'z'), - (0xFF5B, '3', u'{'), - (0xFF5C, '3', u'|'), - (0xFF5D, '3', u'}'), - (0xFF5E, '3', u'~'), - (0xFF5F, 'M', u'⦅'), - (0xFF60, 'M', u'⦆'), - (0xFF61, 'M', u'.'), - (0xFF62, 'M', u'「'), - (0xFF63, 'M', u'」'), - (0xFF64, 'M', u'、'), - (0xFF65, 'M', u'・'), - (0xFF66, 'M', u'ヲ'), - (0xFF67, 'M', u'ァ'), - (0xFF68, 'M', u'ィ'), - (0xFF69, 'M', u'ゥ'), - (0xFF6A, 'M', u'ェ'), - (0xFF6B, 'M', u'ォ'), - (0xFF6C, 'M', u'ャ'), - (0xFF6D, 'M', u'ュ'), - (0xFF6E, 'M', u'ョ'), - (0xFF6F, 'M', u'ッ'), - (0xFF70, 'M', u'ー'), - (0xFF71, 'M', u'ア'), - (0xFF72, 'M', u'イ'), - (0xFF73, 'M', u'ウ'), - (0xFF74, 'M', u'エ'), - (0xFF75, 'M', u'オ'), - (0xFF76, 'M', u'カ'), - (0xFF77, 'M', u'キ'), - (0xFF78, 'M', u'ク'), - (0xFF79, 'M', u'ケ'), - (0xFF7A, 'M', u'コ'), - (0xFF7B, 'M', u'サ'), - (0xFF7C, 'M', u'シ'), - (0xFF7D, 'M', u'ス'), - (0xFF7E, 'M', u'セ'), - (0xFF7F, 'M', u'ソ'), - (0xFF80, 'M', u'タ'), - (0xFF81, 'M', u'チ'), - (0xFF82, 'M', u'ツ'), - (0xFF83, 'M', u'テ'), - (0xFF84, 'M', u'ト'), - (0xFF85, 'M', u'ナ'), - (0xFF86, 'M', u'ニ'), - (0xFF87, 'M', u'ヌ'), - (0xFF88, 'M', u'ネ'), - (0xFF89, 'M', u'ノ'), - (0xFF8A, 'M', u'ハ'), - (0xFF8B, 'M', u'ヒ'), - (0xFF8C, 'M', u'フ'), - (0xFF8D, 'M', u'ヘ'), - (0xFF8E, 'M', u'ホ'), - (0xFF8F, 'M', u'マ'), - (0xFF90, 'M', u'ミ'), - (0xFF91, 'M', u'ム'), - (0xFF92, 'M', u'メ'), - (0xFF93, 'M', u'モ'), - (0xFF94, 'M', u'ヤ'), - (0xFF95, 'M', u'ユ'), - (0xFF96, 'M', u'ヨ'), - (0xFF97, 'M', u'ラ'), - (0xFF98, 'M', u'リ'), - (0xFF99, 'M', u'ル'), - (0xFF9A, 'M', u'レ'), - (0xFF9B, 'M', u'ロ'), - (0xFF9C, 'M', u'ワ'), - (0xFF9D, 'M', u'ン'), - (0xFF9E, 'M', u'゙'), - (0xFF9F, 'M', u'゚'), - (0xFFA0, 'X'), - (0xFFA1, 'M', u'ᄀ'), - (0xFFA2, 'M', u'ᄁ'), - (0xFFA3, 'M', u'ᆪ'), - (0xFFA4, 'M', u'ᄂ'), - (0xFFA5, 'M', u'ᆬ'), - (0xFFA6, 'M', u'ᆭ'), - (0xFFA7, 'M', u'ᄃ'), - ] - -def _seg_52(): - return [ - (0xFFA8, 'M', u'ᄄ'), - (0xFFA9, 'M', u'ᄅ'), - (0xFFAA, 'M', u'ᆰ'), - (0xFFAB, 'M', u'ᆱ'), - (0xFFAC, 'M', u'ᆲ'), - (0xFFAD, 'M', u'ᆳ'), - (0xFFAE, 'M', u'ᆴ'), - (0xFFAF, 'M', u'ᆵ'), - (0xFFB0, 'M', u'ᄚ'), - (0xFFB1, 'M', u'ᄆ'), - (0xFFB2, 'M', u'ᄇ'), - (0xFFB3, 'M', u'ᄈ'), - (0xFFB4, 'M', u'ᄡ'), - (0xFFB5, 'M', u'ᄉ'), - (0xFFB6, 'M', u'ᄊ'), - (0xFFB7, 'M', u'ᄋ'), - (0xFFB8, 'M', u'ᄌ'), - (0xFFB9, 'M', u'ᄍ'), - (0xFFBA, 'M', u'ᄎ'), - (0xFFBB, 'M', u'ᄏ'), - (0xFFBC, 'M', u'ᄐ'), - (0xFFBD, 'M', u'ᄑ'), - (0xFFBE, 'M', u'ᄒ'), - (0xFFBF, 'X'), - (0xFFC2, 'M', u'ᅡ'), - (0xFFC3, 'M', u'ᅢ'), - (0xFFC4, 'M', u'ᅣ'), - (0xFFC5, 'M', u'ᅤ'), - (0xFFC6, 'M', u'ᅥ'), - (0xFFC7, 'M', u'ᅦ'), - (0xFFC8, 'X'), - (0xFFCA, 'M', u'ᅧ'), - (0xFFCB, 'M', u'ᅨ'), - (0xFFCC, 'M', u'ᅩ'), - (0xFFCD, 'M', u'ᅪ'), - (0xFFCE, 'M', u'ᅫ'), - (0xFFCF, 'M', u'ᅬ'), - (0xFFD0, 'X'), - (0xFFD2, 'M', u'ᅭ'), - (0xFFD3, 'M', u'ᅮ'), - (0xFFD4, 'M', u'ᅯ'), - (0xFFD5, 'M', u'ᅰ'), - (0xFFD6, 'M', u'ᅱ'), - (0xFFD7, 'M', u'ᅲ'), - (0xFFD8, 'X'), - (0xFFDA, 'M', u'ᅳ'), - (0xFFDB, 'M', u'ᅴ'), - (0xFFDC, 'M', u'ᅵ'), - (0xFFDD, 'X'), - (0xFFE0, 'M', u'¢'), - (0xFFE1, 'M', u'£'), - (0xFFE2, 'M', u'¬'), - (0xFFE3, '3', u' ̄'), - (0xFFE4, 'M', u'¦'), - (0xFFE5, 'M', u'¥'), - (0xFFE6, 'M', u'₩'), - (0xFFE7, 'X'), - (0xFFE8, 'M', u'│'), - (0xFFE9, 'M', u'←'), - (0xFFEA, 'M', u'↑'), - (0xFFEB, 'M', u'→'), - (0xFFEC, 'M', u'↓'), - (0xFFED, 'M', u'■'), - (0xFFEE, 'M', u'○'), - (0xFFEF, 'X'), - (0x10000, 'V'), - (0x1000C, 'X'), - (0x1000D, 'V'), - (0x10027, 'X'), - (0x10028, 'V'), - (0x1003B, 'X'), - (0x1003C, 'V'), - (0x1003E, 'X'), - (0x1003F, 'V'), - (0x1004E, 'X'), - (0x10050, 'V'), - (0x1005E, 'X'), - (0x10080, 'V'), - (0x100FB, 'X'), - (0x10100, 'V'), - (0x10103, 'X'), - (0x10107, 'V'), - (0x10134, 'X'), - (0x10137, 'V'), - (0x1018F, 'X'), - (0x10190, 'V'), - (0x1019C, 'X'), - (0x101A0, 'V'), - (0x101A1, 'X'), - (0x101D0, 'V'), - (0x101FE, 'X'), - (0x10280, 'V'), - (0x1029D, 'X'), - (0x102A0, 'V'), - (0x102D1, 'X'), - (0x102E0, 'V'), - (0x102FC, 'X'), - (0x10300, 'V'), - (0x10324, 'X'), - (0x1032D, 'V'), - ] - -def _seg_53(): - return [ - (0x1034B, 'X'), - (0x10350, 'V'), - (0x1037B, 'X'), - (0x10380, 'V'), - (0x1039E, 'X'), - (0x1039F, 'V'), - (0x103C4, 'X'), - (0x103C8, 'V'), - (0x103D6, 'X'), - (0x10400, 'M', u'𐐨'), - (0x10401, 'M', u'𐐩'), - (0x10402, 'M', u'𐐪'), - (0x10403, 'M', u'𐐫'), - (0x10404, 'M', u'𐐬'), - (0x10405, 'M', u'𐐭'), - (0x10406, 'M', u'𐐮'), - (0x10407, 'M', u'𐐯'), - (0x10408, 'M', u'𐐰'), - (0x10409, 'M', u'𐐱'), - (0x1040A, 'M', u'𐐲'), - (0x1040B, 'M', u'𐐳'), - (0x1040C, 'M', u'𐐴'), - (0x1040D, 'M', u'𐐵'), - (0x1040E, 'M', u'𐐶'), - (0x1040F, 'M', u'𐐷'), - (0x10410, 'M', u'𐐸'), - (0x10411, 'M', u'𐐹'), - (0x10412, 'M', u'𐐺'), - (0x10413, 'M', u'𐐻'), - (0x10414, 'M', u'𐐼'), - (0x10415, 'M', u'𐐽'), - (0x10416, 'M', u'𐐾'), - (0x10417, 'M', u'𐐿'), - (0x10418, 'M', u'𐑀'), - (0x10419, 'M', u'𐑁'), - (0x1041A, 'M', u'𐑂'), - (0x1041B, 'M', u'𐑃'), - (0x1041C, 'M', u'𐑄'), - (0x1041D, 'M', u'𐑅'), - (0x1041E, 'M', u'𐑆'), - (0x1041F, 'M', u'𐑇'), - (0x10420, 'M', u'𐑈'), - (0x10421, 'M', u'𐑉'), - (0x10422, 'M', u'𐑊'), - (0x10423, 'M', u'𐑋'), - (0x10424, 'M', u'𐑌'), - (0x10425, 'M', u'𐑍'), - (0x10426, 'M', u'𐑎'), - (0x10427, 'M', u'𐑏'), - (0x10428, 'V'), - (0x1049E, 'X'), - (0x104A0, 'V'), - (0x104AA, 'X'), - (0x104B0, 'M', u'𐓘'), - (0x104B1, 'M', u'𐓙'), - (0x104B2, 'M', u'𐓚'), - (0x104B3, 'M', u'𐓛'), - (0x104B4, 'M', u'𐓜'), - (0x104B5, 'M', u'𐓝'), - (0x104B6, 'M', u'𐓞'), - (0x104B7, 'M', u'𐓟'), - (0x104B8, 'M', u'𐓠'), - (0x104B9, 'M', u'𐓡'), - (0x104BA, 'M', u'𐓢'), - (0x104BB, 'M', u'𐓣'), - (0x104BC, 'M', u'𐓤'), - (0x104BD, 'M', u'𐓥'), - (0x104BE, 'M', u'𐓦'), - (0x104BF, 'M', u'𐓧'), - (0x104C0, 'M', u'𐓨'), - (0x104C1, 'M', u'𐓩'), - (0x104C2, 'M', u'𐓪'), - (0x104C3, 'M', u'𐓫'), - (0x104C4, 'M', u'𐓬'), - (0x104C5, 'M', u'𐓭'), - (0x104C6, 'M', u'𐓮'), - (0x104C7, 'M', u'𐓯'), - (0x104C8, 'M', u'𐓰'), - (0x104C9, 'M', u'𐓱'), - (0x104CA, 'M', u'𐓲'), - (0x104CB, 'M', u'𐓳'), - (0x104CC, 'M', u'𐓴'), - (0x104CD, 'M', u'𐓵'), - (0x104CE, 'M', u'𐓶'), - (0x104CF, 'M', u'𐓷'), - (0x104D0, 'M', u'𐓸'), - (0x104D1, 'M', u'𐓹'), - (0x104D2, 'M', u'𐓺'), - (0x104D3, 'M', u'𐓻'), - (0x104D4, 'X'), - (0x104D8, 'V'), - (0x104FC, 'X'), - (0x10500, 'V'), - (0x10528, 'X'), - (0x10530, 'V'), - (0x10564, 'X'), - (0x1056F, 'V'), - (0x10570, 'X'), - (0x10600, 'V'), - (0x10737, 'X'), - ] - -def _seg_54(): - return [ - (0x10740, 'V'), - (0x10756, 'X'), - (0x10760, 'V'), - (0x10768, 'X'), - (0x10800, 'V'), - (0x10806, 'X'), - (0x10808, 'V'), - (0x10809, 'X'), - (0x1080A, 'V'), - (0x10836, 'X'), - (0x10837, 'V'), - (0x10839, 'X'), - (0x1083C, 'V'), - (0x1083D, 'X'), - (0x1083F, 'V'), - (0x10856, 'X'), - (0x10857, 'V'), - (0x1089F, 'X'), - (0x108A7, 'V'), - (0x108B0, 'X'), - (0x108E0, 'V'), - (0x108F3, 'X'), - (0x108F4, 'V'), - (0x108F6, 'X'), - (0x108FB, 'V'), - (0x1091C, 'X'), - (0x1091F, 'V'), - (0x1093A, 'X'), - (0x1093F, 'V'), - (0x10940, 'X'), - (0x10980, 'V'), - (0x109B8, 'X'), - (0x109BC, 'V'), - (0x109D0, 'X'), - (0x109D2, 'V'), - (0x10A04, 'X'), - (0x10A05, 'V'), - (0x10A07, 'X'), - (0x10A0C, 'V'), - (0x10A14, 'X'), - (0x10A15, 'V'), - (0x10A18, 'X'), - (0x10A19, 'V'), - (0x10A34, 'X'), - (0x10A38, 'V'), - (0x10A3B, 'X'), - (0x10A3F, 'V'), - (0x10A48, 'X'), - (0x10A50, 'V'), - (0x10A59, 'X'), - (0x10A60, 'V'), - (0x10AA0, 'X'), - (0x10AC0, 'V'), - (0x10AE7, 'X'), - (0x10AEB, 'V'), - (0x10AF7, 'X'), - (0x10B00, 'V'), - (0x10B36, 'X'), - (0x10B39, 'V'), - (0x10B56, 'X'), - (0x10B58, 'V'), - (0x10B73, 'X'), - (0x10B78, 'V'), - (0x10B92, 'X'), - (0x10B99, 'V'), - (0x10B9D, 'X'), - (0x10BA9, 'V'), - (0x10BB0, 'X'), - (0x10C00, 'V'), - (0x10C49, 'X'), - (0x10C80, 'M', u'𐳀'), - (0x10C81, 'M', u'𐳁'), - (0x10C82, 'M', u'𐳂'), - (0x10C83, 'M', u'𐳃'), - (0x10C84, 'M', u'𐳄'), - (0x10C85, 'M', u'𐳅'), - (0x10C86, 'M', u'𐳆'), - (0x10C87, 'M', u'𐳇'), - (0x10C88, 'M', u'𐳈'), - (0x10C89, 'M', u'𐳉'), - (0x10C8A, 'M', u'𐳊'), - (0x10C8B, 'M', u'𐳋'), - (0x10C8C, 'M', u'𐳌'), - (0x10C8D, 'M', u'𐳍'), - (0x10C8E, 'M', u'𐳎'), - (0x10C8F, 'M', u'𐳏'), - (0x10C90, 'M', u'𐳐'), - (0x10C91, 'M', u'𐳑'), - (0x10C92, 'M', u'𐳒'), - (0x10C93, 'M', u'𐳓'), - (0x10C94, 'M', u'𐳔'), - (0x10C95, 'M', u'𐳕'), - (0x10C96, 'M', u'𐳖'), - (0x10C97, 'M', u'𐳗'), - (0x10C98, 'M', u'𐳘'), - (0x10C99, 'M', u'𐳙'), - (0x10C9A, 'M', u'𐳚'), - (0x10C9B, 'M', u'𐳛'), - (0x10C9C, 'M', u'𐳜'), - (0x10C9D, 'M', u'𐳝'), - ] - -def _seg_55(): - return [ - (0x10C9E, 'M', u'𐳞'), - (0x10C9F, 'M', u'𐳟'), - (0x10CA0, 'M', u'𐳠'), - (0x10CA1, 'M', u'𐳡'), - (0x10CA2, 'M', u'𐳢'), - (0x10CA3, 'M', u'𐳣'), - (0x10CA4, 'M', u'𐳤'), - (0x10CA5, 'M', u'𐳥'), - (0x10CA6, 'M', u'𐳦'), - (0x10CA7, 'M', u'𐳧'), - (0x10CA8, 'M', u'𐳨'), - (0x10CA9, 'M', u'𐳩'), - (0x10CAA, 'M', u'𐳪'), - (0x10CAB, 'M', u'𐳫'), - (0x10CAC, 'M', u'𐳬'), - (0x10CAD, 'M', u'𐳭'), - (0x10CAE, 'M', u'𐳮'), - (0x10CAF, 'M', u'𐳯'), - (0x10CB0, 'M', u'𐳰'), - (0x10CB1, 'M', u'𐳱'), - (0x10CB2, 'M', u'𐳲'), - (0x10CB3, 'X'), - (0x10CC0, 'V'), - (0x10CF3, 'X'), - (0x10CFA, 'V'), - (0x10D00, 'X'), - (0x10E60, 'V'), - (0x10E7F, 'X'), - (0x11000, 'V'), - (0x1104E, 'X'), - (0x11052, 'V'), - (0x11070, 'X'), - (0x1107F, 'V'), - (0x110BD, 'X'), - (0x110BE, 'V'), - (0x110C2, 'X'), - (0x110D0, 'V'), - (0x110E9, 'X'), - (0x110F0, 'V'), - (0x110FA, 'X'), - (0x11100, 'V'), - (0x11135, 'X'), - (0x11136, 'V'), - (0x11144, 'X'), - (0x11150, 'V'), - (0x11177, 'X'), - (0x11180, 'V'), - (0x111CE, 'X'), - (0x111D0, 'V'), - (0x111E0, 'X'), - (0x111E1, 'V'), - (0x111F5, 'X'), - (0x11200, 'V'), - (0x11212, 'X'), - (0x11213, 'V'), - (0x1123F, 'X'), - (0x11280, 'V'), - (0x11287, 'X'), - (0x11288, 'V'), - (0x11289, 'X'), - (0x1128A, 'V'), - (0x1128E, 'X'), - (0x1128F, 'V'), - (0x1129E, 'X'), - (0x1129F, 'V'), - (0x112AA, 'X'), - (0x112B0, 'V'), - (0x112EB, 'X'), - (0x112F0, 'V'), - (0x112FA, 'X'), - (0x11300, 'V'), - (0x11304, 'X'), - (0x11305, 'V'), - (0x1130D, 'X'), - (0x1130F, 'V'), - (0x11311, 'X'), - (0x11313, 'V'), - (0x11329, 'X'), - (0x1132A, 'V'), - (0x11331, 'X'), - (0x11332, 'V'), - (0x11334, 'X'), - (0x11335, 'V'), - (0x1133A, 'X'), - (0x1133C, 'V'), - (0x11345, 'X'), - (0x11347, 'V'), - (0x11349, 'X'), - (0x1134B, 'V'), - (0x1134E, 'X'), - (0x11350, 'V'), - (0x11351, 'X'), - (0x11357, 'V'), - (0x11358, 'X'), - (0x1135D, 'V'), - (0x11364, 'X'), - (0x11366, 'V'), - (0x1136D, 'X'), - (0x11370, 'V'), - (0x11375, 'X'), - ] - -def _seg_56(): - return [ - (0x11400, 'V'), - (0x1145A, 'X'), - (0x1145B, 'V'), - (0x1145C, 'X'), - (0x1145D, 'V'), - (0x1145E, 'X'), - (0x11480, 'V'), - (0x114C8, 'X'), - (0x114D0, 'V'), - (0x114DA, 'X'), - (0x11580, 'V'), - (0x115B6, 'X'), - (0x115B8, 'V'), - (0x115DE, 'X'), - (0x11600, 'V'), - (0x11645, 'X'), - (0x11650, 'V'), - (0x1165A, 'X'), - (0x11660, 'V'), - (0x1166D, 'X'), - (0x11680, 'V'), - (0x116B8, 'X'), - (0x116C0, 'V'), - (0x116CA, 'X'), - (0x11700, 'V'), - (0x1171A, 'X'), - (0x1171D, 'V'), - (0x1172C, 'X'), - (0x11730, 'V'), - (0x11740, 'X'), - (0x118A0, 'M', u'𑣀'), - (0x118A1, 'M', u'𑣁'), - (0x118A2, 'M', u'𑣂'), - (0x118A3, 'M', u'𑣃'), - (0x118A4, 'M', u'𑣄'), - (0x118A5, 'M', u'𑣅'), - (0x118A6, 'M', u'𑣆'), - (0x118A7, 'M', u'𑣇'), - (0x118A8, 'M', u'𑣈'), - (0x118A9, 'M', u'𑣉'), - (0x118AA, 'M', u'𑣊'), - (0x118AB, 'M', u'𑣋'), - (0x118AC, 'M', u'𑣌'), - (0x118AD, 'M', u'𑣍'), - (0x118AE, 'M', u'𑣎'), - (0x118AF, 'M', u'𑣏'), - (0x118B0, 'M', u'𑣐'), - (0x118B1, 'M', u'𑣑'), - (0x118B2, 'M', u'𑣒'), - (0x118B3, 'M', u'𑣓'), - (0x118B4, 'M', u'𑣔'), - (0x118B5, 'M', u'𑣕'), - (0x118B6, 'M', u'𑣖'), - (0x118B7, 'M', u'𑣗'), - (0x118B8, 'M', u'𑣘'), - (0x118B9, 'M', u'𑣙'), - (0x118BA, 'M', u'𑣚'), - (0x118BB, 'M', u'𑣛'), - (0x118BC, 'M', u'𑣜'), - (0x118BD, 'M', u'𑣝'), - (0x118BE, 'M', u'𑣞'), - (0x118BF, 'M', u'𑣟'), - (0x118C0, 'V'), - (0x118F3, 'X'), - (0x118FF, 'V'), - (0x11900, 'X'), - (0x11A00, 'V'), - (0x11A48, 'X'), - (0x11A50, 'V'), - (0x11A84, 'X'), - (0x11A86, 'V'), - (0x11A9D, 'X'), - (0x11A9E, 'V'), - (0x11AA3, 'X'), - (0x11AC0, 'V'), - (0x11AF9, 'X'), - (0x11C00, 'V'), - (0x11C09, 'X'), - (0x11C0A, 'V'), - (0x11C37, 'X'), - (0x11C38, 'V'), - (0x11C46, 'X'), - (0x11C50, 'V'), - (0x11C6D, 'X'), - (0x11C70, 'V'), - (0x11C90, 'X'), - (0x11C92, 'V'), - (0x11CA8, 'X'), - (0x11CA9, 'V'), - (0x11CB7, 'X'), - (0x11D00, 'V'), - (0x11D07, 'X'), - (0x11D08, 'V'), - (0x11D0A, 'X'), - (0x11D0B, 'V'), - (0x11D37, 'X'), - (0x11D3A, 'V'), - (0x11D3B, 'X'), - (0x11D3C, 'V'), - (0x11D3E, 'X'), - ] - -def _seg_57(): - return [ - (0x11D3F, 'V'), - (0x11D48, 'X'), - (0x11D50, 'V'), - (0x11D5A, 'X'), - (0x12000, 'V'), - (0x1239A, 'X'), - (0x12400, 'V'), - (0x1246F, 'X'), - (0x12470, 'V'), - (0x12475, 'X'), - (0x12480, 'V'), - (0x12544, 'X'), - (0x13000, 'V'), - (0x1342F, 'X'), - (0x14400, 'V'), - (0x14647, 'X'), - (0x16800, 'V'), - (0x16A39, 'X'), - (0x16A40, 'V'), - (0x16A5F, 'X'), - (0x16A60, 'V'), - (0x16A6A, 'X'), - (0x16A6E, 'V'), - (0x16A70, 'X'), - (0x16AD0, 'V'), - (0x16AEE, 'X'), - (0x16AF0, 'V'), - (0x16AF6, 'X'), - (0x16B00, 'V'), - (0x16B46, 'X'), - (0x16B50, 'V'), - (0x16B5A, 'X'), - (0x16B5B, 'V'), - (0x16B62, 'X'), - (0x16B63, 'V'), - (0x16B78, 'X'), - (0x16B7D, 'V'), - (0x16B90, 'X'), - (0x16F00, 'V'), - (0x16F45, 'X'), - (0x16F50, 'V'), - (0x16F7F, 'X'), - (0x16F8F, 'V'), - (0x16FA0, 'X'), - (0x16FE0, 'V'), - (0x16FE2, 'X'), - (0x17000, 'V'), - (0x187ED, 'X'), - (0x18800, 'V'), - (0x18AF3, 'X'), - (0x1B000, 'V'), - (0x1B11F, 'X'), - (0x1B170, 'V'), - (0x1B2FC, 'X'), - (0x1BC00, 'V'), - (0x1BC6B, 'X'), - (0x1BC70, 'V'), - (0x1BC7D, 'X'), - (0x1BC80, 'V'), - (0x1BC89, 'X'), - (0x1BC90, 'V'), - (0x1BC9A, 'X'), - (0x1BC9C, 'V'), - (0x1BCA0, 'I'), - (0x1BCA4, 'X'), - (0x1D000, 'V'), - (0x1D0F6, 'X'), - (0x1D100, 'V'), - (0x1D127, 'X'), - (0x1D129, 'V'), - (0x1D15E, 'M', u'𝅗𝅥'), - (0x1D15F, 'M', u'𝅘𝅥'), - (0x1D160, 'M', u'𝅘𝅥𝅮'), - (0x1D161, 'M', u'𝅘𝅥𝅯'), - (0x1D162, 'M', u'𝅘𝅥𝅰'), - (0x1D163, 'M', u'𝅘𝅥𝅱'), - (0x1D164, 'M', u'𝅘𝅥𝅲'), - (0x1D165, 'V'), - (0x1D173, 'X'), - (0x1D17B, 'V'), - (0x1D1BB, 'M', u'𝆹𝅥'), - (0x1D1BC, 'M', u'𝆺𝅥'), - (0x1D1BD, 'M', u'𝆹𝅥𝅮'), - (0x1D1BE, 'M', u'𝆺𝅥𝅮'), - (0x1D1BF, 'M', u'𝆹𝅥𝅯'), - (0x1D1C0, 'M', u'𝆺𝅥𝅯'), - (0x1D1C1, 'V'), - (0x1D1E9, 'X'), - (0x1D200, 'V'), - (0x1D246, 'X'), - (0x1D300, 'V'), - (0x1D357, 'X'), - (0x1D360, 'V'), - (0x1D372, 'X'), - (0x1D400, 'M', u'a'), - (0x1D401, 'M', u'b'), - (0x1D402, 'M', u'c'), - (0x1D403, 'M', u'd'), - (0x1D404, 'M', u'e'), - (0x1D405, 'M', u'f'), - ] - -def _seg_58(): - return [ - (0x1D406, 'M', u'g'), - (0x1D407, 'M', u'h'), - (0x1D408, 'M', u'i'), - (0x1D409, 'M', u'j'), - (0x1D40A, 'M', u'k'), - (0x1D40B, 'M', u'l'), - (0x1D40C, 'M', u'm'), - (0x1D40D, 'M', u'n'), - (0x1D40E, 'M', u'o'), - (0x1D40F, 'M', u'p'), - (0x1D410, 'M', u'q'), - (0x1D411, 'M', u'r'), - (0x1D412, 'M', u's'), - (0x1D413, 'M', u't'), - (0x1D414, 'M', u'u'), - (0x1D415, 'M', u'v'), - (0x1D416, 'M', u'w'), - (0x1D417, 'M', u'x'), - (0x1D418, 'M', u'y'), - (0x1D419, 'M', u'z'), - (0x1D41A, 'M', u'a'), - (0x1D41B, 'M', u'b'), - (0x1D41C, 'M', u'c'), - (0x1D41D, 'M', u'd'), - (0x1D41E, 'M', u'e'), - (0x1D41F, 'M', u'f'), - (0x1D420, 'M', u'g'), - (0x1D421, 'M', u'h'), - (0x1D422, 'M', u'i'), - (0x1D423, 'M', u'j'), - (0x1D424, 'M', u'k'), - (0x1D425, 'M', u'l'), - (0x1D426, 'M', u'm'), - (0x1D427, 'M', u'n'), - (0x1D428, 'M', u'o'), - (0x1D429, 'M', u'p'), - (0x1D42A, 'M', u'q'), - (0x1D42B, 'M', u'r'), - (0x1D42C, 'M', u's'), - (0x1D42D, 'M', u't'), - (0x1D42E, 'M', u'u'), - (0x1D42F, 'M', u'v'), - (0x1D430, 'M', u'w'), - (0x1D431, 'M', u'x'), - (0x1D432, 'M', u'y'), - (0x1D433, 'M', u'z'), - (0x1D434, 'M', u'a'), - (0x1D435, 'M', u'b'), - (0x1D436, 'M', u'c'), - (0x1D437, 'M', u'd'), - (0x1D438, 'M', u'e'), - (0x1D439, 'M', u'f'), - (0x1D43A, 'M', u'g'), - (0x1D43B, 'M', u'h'), - (0x1D43C, 'M', u'i'), - (0x1D43D, 'M', u'j'), - (0x1D43E, 'M', u'k'), - (0x1D43F, 'M', u'l'), - (0x1D440, 'M', u'm'), - (0x1D441, 'M', u'n'), - (0x1D442, 'M', u'o'), - (0x1D443, 'M', u'p'), - (0x1D444, 'M', u'q'), - (0x1D445, 'M', u'r'), - (0x1D446, 'M', u's'), - (0x1D447, 'M', u't'), - (0x1D448, 'M', u'u'), - (0x1D449, 'M', u'v'), - (0x1D44A, 'M', u'w'), - (0x1D44B, 'M', u'x'), - (0x1D44C, 'M', u'y'), - (0x1D44D, 'M', u'z'), - (0x1D44E, 'M', u'a'), - (0x1D44F, 'M', u'b'), - (0x1D450, 'M', u'c'), - (0x1D451, 'M', u'd'), - (0x1D452, 'M', u'e'), - (0x1D453, 'M', u'f'), - (0x1D454, 'M', u'g'), - (0x1D455, 'X'), - (0x1D456, 'M', u'i'), - (0x1D457, 'M', u'j'), - (0x1D458, 'M', u'k'), - (0x1D459, 'M', u'l'), - (0x1D45A, 'M', u'm'), - (0x1D45B, 'M', u'n'), - (0x1D45C, 'M', u'o'), - (0x1D45D, 'M', u'p'), - (0x1D45E, 'M', u'q'), - (0x1D45F, 'M', u'r'), - (0x1D460, 'M', u's'), - (0x1D461, 'M', u't'), - (0x1D462, 'M', u'u'), - (0x1D463, 'M', u'v'), - (0x1D464, 'M', u'w'), - (0x1D465, 'M', u'x'), - (0x1D466, 'M', u'y'), - (0x1D467, 'M', u'z'), - (0x1D468, 'M', u'a'), - (0x1D469, 'M', u'b'), - ] - -def _seg_59(): - return [ - (0x1D46A, 'M', u'c'), - (0x1D46B, 'M', u'd'), - (0x1D46C, 'M', u'e'), - (0x1D46D, 'M', u'f'), - (0x1D46E, 'M', u'g'), - (0x1D46F, 'M', u'h'), - (0x1D470, 'M', u'i'), - (0x1D471, 'M', u'j'), - (0x1D472, 'M', u'k'), - (0x1D473, 'M', u'l'), - (0x1D474, 'M', u'm'), - (0x1D475, 'M', u'n'), - (0x1D476, 'M', u'o'), - (0x1D477, 'M', u'p'), - (0x1D478, 'M', u'q'), - (0x1D479, 'M', u'r'), - (0x1D47A, 'M', u's'), - (0x1D47B, 'M', u't'), - (0x1D47C, 'M', u'u'), - (0x1D47D, 'M', u'v'), - (0x1D47E, 'M', u'w'), - (0x1D47F, 'M', u'x'), - (0x1D480, 'M', u'y'), - (0x1D481, 'M', u'z'), - (0x1D482, 'M', u'a'), - (0x1D483, 'M', u'b'), - (0x1D484, 'M', u'c'), - (0x1D485, 'M', u'd'), - (0x1D486, 'M', u'e'), - (0x1D487, 'M', u'f'), - (0x1D488, 'M', u'g'), - (0x1D489, 'M', u'h'), - (0x1D48A, 'M', u'i'), - (0x1D48B, 'M', u'j'), - (0x1D48C, 'M', u'k'), - (0x1D48D, 'M', u'l'), - (0x1D48E, 'M', u'm'), - (0x1D48F, 'M', u'n'), - (0x1D490, 'M', u'o'), - (0x1D491, 'M', u'p'), - (0x1D492, 'M', u'q'), - (0x1D493, 'M', u'r'), - (0x1D494, 'M', u's'), - (0x1D495, 'M', u't'), - (0x1D496, 'M', u'u'), - (0x1D497, 'M', u'v'), - (0x1D498, 'M', u'w'), - (0x1D499, 'M', u'x'), - (0x1D49A, 'M', u'y'), - (0x1D49B, 'M', u'z'), - (0x1D49C, 'M', u'a'), - (0x1D49D, 'X'), - (0x1D49E, 'M', u'c'), - (0x1D49F, 'M', u'd'), - (0x1D4A0, 'X'), - (0x1D4A2, 'M', u'g'), - (0x1D4A3, 'X'), - (0x1D4A5, 'M', u'j'), - (0x1D4A6, 'M', u'k'), - (0x1D4A7, 'X'), - (0x1D4A9, 'M', u'n'), - (0x1D4AA, 'M', u'o'), - (0x1D4AB, 'M', u'p'), - (0x1D4AC, 'M', u'q'), - (0x1D4AD, 'X'), - (0x1D4AE, 'M', u's'), - (0x1D4AF, 'M', u't'), - (0x1D4B0, 'M', u'u'), - (0x1D4B1, 'M', u'v'), - (0x1D4B2, 'M', u'w'), - (0x1D4B3, 'M', u'x'), - (0x1D4B4, 'M', u'y'), - (0x1D4B5, 'M', u'z'), - (0x1D4B6, 'M', u'a'), - (0x1D4B7, 'M', u'b'), - (0x1D4B8, 'M', u'c'), - (0x1D4B9, 'M', u'd'), - (0x1D4BA, 'X'), - (0x1D4BB, 'M', u'f'), - (0x1D4BC, 'X'), - (0x1D4BD, 'M', u'h'), - (0x1D4BE, 'M', u'i'), - (0x1D4BF, 'M', u'j'), - (0x1D4C0, 'M', u'k'), - (0x1D4C1, 'M', u'l'), - (0x1D4C2, 'M', u'm'), - (0x1D4C3, 'M', u'n'), - (0x1D4C4, 'X'), - (0x1D4C5, 'M', u'p'), - (0x1D4C6, 'M', u'q'), - (0x1D4C7, 'M', u'r'), - (0x1D4C8, 'M', u's'), - (0x1D4C9, 'M', u't'), - (0x1D4CA, 'M', u'u'), - (0x1D4CB, 'M', u'v'), - (0x1D4CC, 'M', u'w'), - (0x1D4CD, 'M', u'x'), - (0x1D4CE, 'M', u'y'), - (0x1D4CF, 'M', u'z'), - (0x1D4D0, 'M', u'a'), - ] - -def _seg_60(): - return [ - (0x1D4D1, 'M', u'b'), - (0x1D4D2, 'M', u'c'), - (0x1D4D3, 'M', u'd'), - (0x1D4D4, 'M', u'e'), - (0x1D4D5, 'M', u'f'), - (0x1D4D6, 'M', u'g'), - (0x1D4D7, 'M', u'h'), - (0x1D4D8, 'M', u'i'), - (0x1D4D9, 'M', u'j'), - (0x1D4DA, 'M', u'k'), - (0x1D4DB, 'M', u'l'), - (0x1D4DC, 'M', u'm'), - (0x1D4DD, 'M', u'n'), - (0x1D4DE, 'M', u'o'), - (0x1D4DF, 'M', u'p'), - (0x1D4E0, 'M', u'q'), - (0x1D4E1, 'M', u'r'), - (0x1D4E2, 'M', u's'), - (0x1D4E3, 'M', u't'), - (0x1D4E4, 'M', u'u'), - (0x1D4E5, 'M', u'v'), - (0x1D4E6, 'M', u'w'), - (0x1D4E7, 'M', u'x'), - (0x1D4E8, 'M', u'y'), - (0x1D4E9, 'M', u'z'), - (0x1D4EA, 'M', u'a'), - (0x1D4EB, 'M', u'b'), - (0x1D4EC, 'M', u'c'), - (0x1D4ED, 'M', u'd'), - (0x1D4EE, 'M', u'e'), - (0x1D4EF, 'M', u'f'), - (0x1D4F0, 'M', u'g'), - (0x1D4F1, 'M', u'h'), - (0x1D4F2, 'M', u'i'), - (0x1D4F3, 'M', u'j'), - (0x1D4F4, 'M', u'k'), - (0x1D4F5, 'M', u'l'), - (0x1D4F6, 'M', u'm'), - (0x1D4F7, 'M', u'n'), - (0x1D4F8, 'M', u'o'), - (0x1D4F9, 'M', u'p'), - (0x1D4FA, 'M', u'q'), - (0x1D4FB, 'M', u'r'), - (0x1D4FC, 'M', u's'), - (0x1D4FD, 'M', u't'), - (0x1D4FE, 'M', u'u'), - (0x1D4FF, 'M', u'v'), - (0x1D500, 'M', u'w'), - (0x1D501, 'M', u'x'), - (0x1D502, 'M', u'y'), - (0x1D503, 'M', u'z'), - (0x1D504, 'M', u'a'), - (0x1D505, 'M', u'b'), - (0x1D506, 'X'), - (0x1D507, 'M', u'd'), - (0x1D508, 'M', u'e'), - (0x1D509, 'M', u'f'), - (0x1D50A, 'M', u'g'), - (0x1D50B, 'X'), - (0x1D50D, 'M', u'j'), - (0x1D50E, 'M', u'k'), - (0x1D50F, 'M', u'l'), - (0x1D510, 'M', u'm'), - (0x1D511, 'M', u'n'), - (0x1D512, 'M', u'o'), - (0x1D513, 'M', u'p'), - (0x1D514, 'M', u'q'), - (0x1D515, 'X'), - (0x1D516, 'M', u's'), - (0x1D517, 'M', u't'), - (0x1D518, 'M', u'u'), - (0x1D519, 'M', u'v'), - (0x1D51A, 'M', u'w'), - (0x1D51B, 'M', u'x'), - (0x1D51C, 'M', u'y'), - (0x1D51D, 'X'), - (0x1D51E, 'M', u'a'), - (0x1D51F, 'M', u'b'), - (0x1D520, 'M', u'c'), - (0x1D521, 'M', u'd'), - (0x1D522, 'M', u'e'), - (0x1D523, 'M', u'f'), - (0x1D524, 'M', u'g'), - (0x1D525, 'M', u'h'), - (0x1D526, 'M', u'i'), - (0x1D527, 'M', u'j'), - (0x1D528, 'M', u'k'), - (0x1D529, 'M', u'l'), - (0x1D52A, 'M', u'm'), - (0x1D52B, 'M', u'n'), - (0x1D52C, 'M', u'o'), - (0x1D52D, 'M', u'p'), - (0x1D52E, 'M', u'q'), - (0x1D52F, 'M', u'r'), - (0x1D530, 'M', u's'), - (0x1D531, 'M', u't'), - (0x1D532, 'M', u'u'), - (0x1D533, 'M', u'v'), - (0x1D534, 'M', u'w'), - (0x1D535, 'M', u'x'), - ] - -def _seg_61(): - return [ - (0x1D536, 'M', u'y'), - (0x1D537, 'M', u'z'), - (0x1D538, 'M', u'a'), - (0x1D539, 'M', u'b'), - (0x1D53A, 'X'), - (0x1D53B, 'M', u'd'), - (0x1D53C, 'M', u'e'), - (0x1D53D, 'M', u'f'), - (0x1D53E, 'M', u'g'), - (0x1D53F, 'X'), - (0x1D540, 'M', u'i'), - (0x1D541, 'M', u'j'), - (0x1D542, 'M', u'k'), - (0x1D543, 'M', u'l'), - (0x1D544, 'M', u'm'), - (0x1D545, 'X'), - (0x1D546, 'M', u'o'), - (0x1D547, 'X'), - (0x1D54A, 'M', u's'), - (0x1D54B, 'M', u't'), - (0x1D54C, 'M', u'u'), - (0x1D54D, 'M', u'v'), - (0x1D54E, 'M', u'w'), - (0x1D54F, 'M', u'x'), - (0x1D550, 'M', u'y'), - (0x1D551, 'X'), - (0x1D552, 'M', u'a'), - (0x1D553, 'M', u'b'), - (0x1D554, 'M', u'c'), - (0x1D555, 'M', u'd'), - (0x1D556, 'M', u'e'), - (0x1D557, 'M', u'f'), - (0x1D558, 'M', u'g'), - (0x1D559, 'M', u'h'), - (0x1D55A, 'M', u'i'), - (0x1D55B, 'M', u'j'), - (0x1D55C, 'M', u'k'), - (0x1D55D, 'M', u'l'), - (0x1D55E, 'M', u'm'), - (0x1D55F, 'M', u'n'), - (0x1D560, 'M', u'o'), - (0x1D561, 'M', u'p'), - (0x1D562, 'M', u'q'), - (0x1D563, 'M', u'r'), - (0x1D564, 'M', u's'), - (0x1D565, 'M', u't'), - (0x1D566, 'M', u'u'), - (0x1D567, 'M', u'v'), - (0x1D568, 'M', u'w'), - (0x1D569, 'M', u'x'), - (0x1D56A, 'M', u'y'), - (0x1D56B, 'M', u'z'), - (0x1D56C, 'M', u'a'), - (0x1D56D, 'M', u'b'), - (0x1D56E, 'M', u'c'), - (0x1D56F, 'M', u'd'), - (0x1D570, 'M', u'e'), - (0x1D571, 'M', u'f'), - (0x1D572, 'M', u'g'), - (0x1D573, 'M', u'h'), - (0x1D574, 'M', u'i'), - (0x1D575, 'M', u'j'), - (0x1D576, 'M', u'k'), - (0x1D577, 'M', u'l'), - (0x1D578, 'M', u'm'), - (0x1D579, 'M', u'n'), - (0x1D57A, 'M', u'o'), - (0x1D57B, 'M', u'p'), - (0x1D57C, 'M', u'q'), - (0x1D57D, 'M', u'r'), - (0x1D57E, 'M', u's'), - (0x1D57F, 'M', u't'), - (0x1D580, 'M', u'u'), - (0x1D581, 'M', u'v'), - (0x1D582, 'M', u'w'), - (0x1D583, 'M', u'x'), - (0x1D584, 'M', u'y'), - (0x1D585, 'M', u'z'), - (0x1D586, 'M', u'a'), - (0x1D587, 'M', u'b'), - (0x1D588, 'M', u'c'), - (0x1D589, 'M', u'd'), - (0x1D58A, 'M', u'e'), - (0x1D58B, 'M', u'f'), - (0x1D58C, 'M', u'g'), - (0x1D58D, 'M', u'h'), - (0x1D58E, 'M', u'i'), - (0x1D58F, 'M', u'j'), - (0x1D590, 'M', u'k'), - (0x1D591, 'M', u'l'), - (0x1D592, 'M', u'm'), - (0x1D593, 'M', u'n'), - (0x1D594, 'M', u'o'), - (0x1D595, 'M', u'p'), - (0x1D596, 'M', u'q'), - (0x1D597, 'M', u'r'), - (0x1D598, 'M', u's'), - (0x1D599, 'M', u't'), - (0x1D59A, 'M', u'u'), - (0x1D59B, 'M', u'v'), - ] - -def _seg_62(): - return [ - (0x1D59C, 'M', u'w'), - (0x1D59D, 'M', u'x'), - (0x1D59E, 'M', u'y'), - (0x1D59F, 'M', u'z'), - (0x1D5A0, 'M', u'a'), - (0x1D5A1, 'M', u'b'), - (0x1D5A2, 'M', u'c'), - (0x1D5A3, 'M', u'd'), - (0x1D5A4, 'M', u'e'), - (0x1D5A5, 'M', u'f'), - (0x1D5A6, 'M', u'g'), - (0x1D5A7, 'M', u'h'), - (0x1D5A8, 'M', u'i'), - (0x1D5A9, 'M', u'j'), - (0x1D5AA, 'M', u'k'), - (0x1D5AB, 'M', u'l'), - (0x1D5AC, 'M', u'm'), - (0x1D5AD, 'M', u'n'), - (0x1D5AE, 'M', u'o'), - (0x1D5AF, 'M', u'p'), - (0x1D5B0, 'M', u'q'), - (0x1D5B1, 'M', u'r'), - (0x1D5B2, 'M', u's'), - (0x1D5B3, 'M', u't'), - (0x1D5B4, 'M', u'u'), - (0x1D5B5, 'M', u'v'), - (0x1D5B6, 'M', u'w'), - (0x1D5B7, 'M', u'x'), - (0x1D5B8, 'M', u'y'), - (0x1D5B9, 'M', u'z'), - (0x1D5BA, 'M', u'a'), - (0x1D5BB, 'M', u'b'), - (0x1D5BC, 'M', u'c'), - (0x1D5BD, 'M', u'd'), - (0x1D5BE, 'M', u'e'), - (0x1D5BF, 'M', u'f'), - (0x1D5C0, 'M', u'g'), - (0x1D5C1, 'M', u'h'), - (0x1D5C2, 'M', u'i'), - (0x1D5C3, 'M', u'j'), - (0x1D5C4, 'M', u'k'), - (0x1D5C5, 'M', u'l'), - (0x1D5C6, 'M', u'm'), - (0x1D5C7, 'M', u'n'), - (0x1D5C8, 'M', u'o'), - (0x1D5C9, 'M', u'p'), - (0x1D5CA, 'M', u'q'), - (0x1D5CB, 'M', u'r'), - (0x1D5CC, 'M', u's'), - (0x1D5CD, 'M', u't'), - (0x1D5CE, 'M', u'u'), - (0x1D5CF, 'M', u'v'), - (0x1D5D0, 'M', u'w'), - (0x1D5D1, 'M', u'x'), - (0x1D5D2, 'M', u'y'), - (0x1D5D3, 'M', u'z'), - (0x1D5D4, 'M', u'a'), - (0x1D5D5, 'M', u'b'), - (0x1D5D6, 'M', u'c'), - (0x1D5D7, 'M', u'd'), - (0x1D5D8, 'M', u'e'), - (0x1D5D9, 'M', u'f'), - (0x1D5DA, 'M', u'g'), - (0x1D5DB, 'M', u'h'), - (0x1D5DC, 'M', u'i'), - (0x1D5DD, 'M', u'j'), - (0x1D5DE, 'M', u'k'), - (0x1D5DF, 'M', u'l'), - (0x1D5E0, 'M', u'm'), - (0x1D5E1, 'M', u'n'), - (0x1D5E2, 'M', u'o'), - (0x1D5E3, 'M', u'p'), - (0x1D5E4, 'M', u'q'), - (0x1D5E5, 'M', u'r'), - (0x1D5E6, 'M', u's'), - (0x1D5E7, 'M', u't'), - (0x1D5E8, 'M', u'u'), - (0x1D5E9, 'M', u'v'), - (0x1D5EA, 'M', u'w'), - (0x1D5EB, 'M', u'x'), - (0x1D5EC, 'M', u'y'), - (0x1D5ED, 'M', u'z'), - (0x1D5EE, 'M', u'a'), - (0x1D5EF, 'M', u'b'), - (0x1D5F0, 'M', u'c'), - (0x1D5F1, 'M', u'd'), - (0x1D5F2, 'M', u'e'), - (0x1D5F3, 'M', u'f'), - (0x1D5F4, 'M', u'g'), - (0x1D5F5, 'M', u'h'), - (0x1D5F6, 'M', u'i'), - (0x1D5F7, 'M', u'j'), - (0x1D5F8, 'M', u'k'), - (0x1D5F9, 'M', u'l'), - (0x1D5FA, 'M', u'm'), - (0x1D5FB, 'M', u'n'), - (0x1D5FC, 'M', u'o'), - (0x1D5FD, 'M', u'p'), - (0x1D5FE, 'M', u'q'), - (0x1D5FF, 'M', u'r'), - ] - -def _seg_63(): - return [ - (0x1D600, 'M', u's'), - (0x1D601, 'M', u't'), - (0x1D602, 'M', u'u'), - (0x1D603, 'M', u'v'), - (0x1D604, 'M', u'w'), - (0x1D605, 'M', u'x'), - (0x1D606, 'M', u'y'), - (0x1D607, 'M', u'z'), - (0x1D608, 'M', u'a'), - (0x1D609, 'M', u'b'), - (0x1D60A, 'M', u'c'), - (0x1D60B, 'M', u'd'), - (0x1D60C, 'M', u'e'), - (0x1D60D, 'M', u'f'), - (0x1D60E, 'M', u'g'), - (0x1D60F, 'M', u'h'), - (0x1D610, 'M', u'i'), - (0x1D611, 'M', u'j'), - (0x1D612, 'M', u'k'), - (0x1D613, 'M', u'l'), - (0x1D614, 'M', u'm'), - (0x1D615, 'M', u'n'), - (0x1D616, 'M', u'o'), - (0x1D617, 'M', u'p'), - (0x1D618, 'M', u'q'), - (0x1D619, 'M', u'r'), - (0x1D61A, 'M', u's'), - (0x1D61B, 'M', u't'), - (0x1D61C, 'M', u'u'), - (0x1D61D, 'M', u'v'), - (0x1D61E, 'M', u'w'), - (0x1D61F, 'M', u'x'), - (0x1D620, 'M', u'y'), - (0x1D621, 'M', u'z'), - (0x1D622, 'M', u'a'), - (0x1D623, 'M', u'b'), - (0x1D624, 'M', u'c'), - (0x1D625, 'M', u'd'), - (0x1D626, 'M', u'e'), - (0x1D627, 'M', u'f'), - (0x1D628, 'M', u'g'), - (0x1D629, 'M', u'h'), - (0x1D62A, 'M', u'i'), - (0x1D62B, 'M', u'j'), - (0x1D62C, 'M', u'k'), - (0x1D62D, 'M', u'l'), - (0x1D62E, 'M', u'm'), - (0x1D62F, 'M', u'n'), - (0x1D630, 'M', u'o'), - (0x1D631, 'M', u'p'), - (0x1D632, 'M', u'q'), - (0x1D633, 'M', u'r'), - (0x1D634, 'M', u's'), - (0x1D635, 'M', u't'), - (0x1D636, 'M', u'u'), - (0x1D637, 'M', u'v'), - (0x1D638, 'M', u'w'), - (0x1D639, 'M', u'x'), - (0x1D63A, 'M', u'y'), - (0x1D63B, 'M', u'z'), - (0x1D63C, 'M', u'a'), - (0x1D63D, 'M', u'b'), - (0x1D63E, 'M', u'c'), - (0x1D63F, 'M', u'd'), - (0x1D640, 'M', u'e'), - (0x1D641, 'M', u'f'), - (0x1D642, 'M', u'g'), - (0x1D643, 'M', u'h'), - (0x1D644, 'M', u'i'), - (0x1D645, 'M', u'j'), - (0x1D646, 'M', u'k'), - (0x1D647, 'M', u'l'), - (0x1D648, 'M', u'm'), - (0x1D649, 'M', u'n'), - (0x1D64A, 'M', u'o'), - (0x1D64B, 'M', u'p'), - (0x1D64C, 'M', u'q'), - (0x1D64D, 'M', u'r'), - (0x1D64E, 'M', u's'), - (0x1D64F, 'M', u't'), - (0x1D650, 'M', u'u'), - (0x1D651, 'M', u'v'), - (0x1D652, 'M', u'w'), - (0x1D653, 'M', u'x'), - (0x1D654, 'M', u'y'), - (0x1D655, 'M', u'z'), - (0x1D656, 'M', u'a'), - (0x1D657, 'M', u'b'), - (0x1D658, 'M', u'c'), - (0x1D659, 'M', u'd'), - (0x1D65A, 'M', u'e'), - (0x1D65B, 'M', u'f'), - (0x1D65C, 'M', u'g'), - (0x1D65D, 'M', u'h'), - (0x1D65E, 'M', u'i'), - (0x1D65F, 'M', u'j'), - (0x1D660, 'M', u'k'), - (0x1D661, 'M', u'l'), - (0x1D662, 'M', u'm'), - (0x1D663, 'M', u'n'), - ] - -def _seg_64(): - return [ - (0x1D664, 'M', u'o'), - (0x1D665, 'M', u'p'), - (0x1D666, 'M', u'q'), - (0x1D667, 'M', u'r'), - (0x1D668, 'M', u's'), - (0x1D669, 'M', u't'), - (0x1D66A, 'M', u'u'), - (0x1D66B, 'M', u'v'), - (0x1D66C, 'M', u'w'), - (0x1D66D, 'M', u'x'), - (0x1D66E, 'M', u'y'), - (0x1D66F, 'M', u'z'), - (0x1D670, 'M', u'a'), - (0x1D671, 'M', u'b'), - (0x1D672, 'M', u'c'), - (0x1D673, 'M', u'd'), - (0x1D674, 'M', u'e'), - (0x1D675, 'M', u'f'), - (0x1D676, 'M', u'g'), - (0x1D677, 'M', u'h'), - (0x1D678, 'M', u'i'), - (0x1D679, 'M', u'j'), - (0x1D67A, 'M', u'k'), - (0x1D67B, 'M', u'l'), - (0x1D67C, 'M', u'm'), - (0x1D67D, 'M', u'n'), - (0x1D67E, 'M', u'o'), - (0x1D67F, 'M', u'p'), - (0x1D680, 'M', u'q'), - (0x1D681, 'M', u'r'), - (0x1D682, 'M', u's'), - (0x1D683, 'M', u't'), - (0x1D684, 'M', u'u'), - (0x1D685, 'M', u'v'), - (0x1D686, 'M', u'w'), - (0x1D687, 'M', u'x'), - (0x1D688, 'M', u'y'), - (0x1D689, 'M', u'z'), - (0x1D68A, 'M', u'a'), - (0x1D68B, 'M', u'b'), - (0x1D68C, 'M', u'c'), - (0x1D68D, 'M', u'd'), - (0x1D68E, 'M', u'e'), - (0x1D68F, 'M', u'f'), - (0x1D690, 'M', u'g'), - (0x1D691, 'M', u'h'), - (0x1D692, 'M', u'i'), - (0x1D693, 'M', u'j'), - (0x1D694, 'M', u'k'), - (0x1D695, 'M', u'l'), - (0x1D696, 'M', u'm'), - (0x1D697, 'M', u'n'), - (0x1D698, 'M', u'o'), - (0x1D699, 'M', u'p'), - (0x1D69A, 'M', u'q'), - (0x1D69B, 'M', u'r'), - (0x1D69C, 'M', u's'), - (0x1D69D, 'M', u't'), - (0x1D69E, 'M', u'u'), - (0x1D69F, 'M', u'v'), - (0x1D6A0, 'M', u'w'), - (0x1D6A1, 'M', u'x'), - (0x1D6A2, 'M', u'y'), - (0x1D6A3, 'M', u'z'), - (0x1D6A4, 'M', u'ı'), - (0x1D6A5, 'M', u'ȷ'), - (0x1D6A6, 'X'), - (0x1D6A8, 'M', u'α'), - (0x1D6A9, 'M', u'β'), - (0x1D6AA, 'M', u'γ'), - (0x1D6AB, 'M', u'δ'), - (0x1D6AC, 'M', u'ε'), - (0x1D6AD, 'M', u'ζ'), - (0x1D6AE, 'M', u'η'), - (0x1D6AF, 'M', u'θ'), - (0x1D6B0, 'M', u'ι'), - (0x1D6B1, 'M', u'κ'), - (0x1D6B2, 'M', u'λ'), - (0x1D6B3, 'M', u'μ'), - (0x1D6B4, 'M', u'ν'), - (0x1D6B5, 'M', u'ξ'), - (0x1D6B6, 'M', u'ο'), - (0x1D6B7, 'M', u'π'), - (0x1D6B8, 'M', u'ρ'), - (0x1D6B9, 'M', u'θ'), - (0x1D6BA, 'M', u'σ'), - (0x1D6BB, 'M', u'τ'), - (0x1D6BC, 'M', u'υ'), - (0x1D6BD, 'M', u'φ'), - (0x1D6BE, 'M', u'χ'), - (0x1D6BF, 'M', u'ψ'), - (0x1D6C0, 'M', u'ω'), - (0x1D6C1, 'M', u'∇'), - (0x1D6C2, 'M', u'α'), - (0x1D6C3, 'M', u'β'), - (0x1D6C4, 'M', u'γ'), - (0x1D6C5, 'M', u'δ'), - (0x1D6C6, 'M', u'ε'), - (0x1D6C7, 'M', u'ζ'), - (0x1D6C8, 'M', u'η'), - ] - -def _seg_65(): - return [ - (0x1D6C9, 'M', u'θ'), - (0x1D6CA, 'M', u'ι'), - (0x1D6CB, 'M', u'κ'), - (0x1D6CC, 'M', u'λ'), - (0x1D6CD, 'M', u'μ'), - (0x1D6CE, 'M', u'ν'), - (0x1D6CF, 'M', u'ξ'), - (0x1D6D0, 'M', u'ο'), - (0x1D6D1, 'M', u'π'), - (0x1D6D2, 'M', u'ρ'), - (0x1D6D3, 'M', u'σ'), - (0x1D6D5, 'M', u'τ'), - (0x1D6D6, 'M', u'υ'), - (0x1D6D7, 'M', u'φ'), - (0x1D6D8, 'M', u'χ'), - (0x1D6D9, 'M', u'ψ'), - (0x1D6DA, 'M', u'ω'), - (0x1D6DB, 'M', u'∂'), - (0x1D6DC, 'M', u'ε'), - (0x1D6DD, 'M', u'θ'), - (0x1D6DE, 'M', u'κ'), - (0x1D6DF, 'M', u'φ'), - (0x1D6E0, 'M', u'ρ'), - (0x1D6E1, 'M', u'π'), - (0x1D6E2, 'M', u'α'), - (0x1D6E3, 'M', u'β'), - (0x1D6E4, 'M', u'γ'), - (0x1D6E5, 'M', u'δ'), - (0x1D6E6, 'M', u'ε'), - (0x1D6E7, 'M', u'ζ'), - (0x1D6E8, 'M', u'η'), - (0x1D6E9, 'M', u'θ'), - (0x1D6EA, 'M', u'ι'), - (0x1D6EB, 'M', u'κ'), - (0x1D6EC, 'M', u'λ'), - (0x1D6ED, 'M', u'μ'), - (0x1D6EE, 'M', u'ν'), - (0x1D6EF, 'M', u'ξ'), - (0x1D6F0, 'M', u'ο'), - (0x1D6F1, 'M', u'π'), - (0x1D6F2, 'M', u'ρ'), - (0x1D6F3, 'M', u'θ'), - (0x1D6F4, 'M', u'σ'), - (0x1D6F5, 'M', u'τ'), - (0x1D6F6, 'M', u'υ'), - (0x1D6F7, 'M', u'φ'), - (0x1D6F8, 'M', u'χ'), - (0x1D6F9, 'M', u'ψ'), - (0x1D6FA, 'M', u'ω'), - (0x1D6FB, 'M', u'∇'), - (0x1D6FC, 'M', u'α'), - (0x1D6FD, 'M', u'β'), - (0x1D6FE, 'M', u'γ'), - (0x1D6FF, 'M', u'δ'), - (0x1D700, 'M', u'ε'), - (0x1D701, 'M', u'ζ'), - (0x1D702, 'M', u'η'), - (0x1D703, 'M', u'θ'), - (0x1D704, 'M', u'ι'), - (0x1D705, 'M', u'κ'), - (0x1D706, 'M', u'λ'), - (0x1D707, 'M', u'μ'), - (0x1D708, 'M', u'ν'), - (0x1D709, 'M', u'ξ'), - (0x1D70A, 'M', u'ο'), - (0x1D70B, 'M', u'π'), - (0x1D70C, 'M', u'ρ'), - (0x1D70D, 'M', u'σ'), - (0x1D70F, 'M', u'τ'), - (0x1D710, 'M', u'υ'), - (0x1D711, 'M', u'φ'), - (0x1D712, 'M', u'χ'), - (0x1D713, 'M', u'ψ'), - (0x1D714, 'M', u'ω'), - (0x1D715, 'M', u'∂'), - (0x1D716, 'M', u'ε'), - (0x1D717, 'M', u'θ'), - (0x1D718, 'M', u'κ'), - (0x1D719, 'M', u'φ'), - (0x1D71A, 'M', u'ρ'), - (0x1D71B, 'M', u'π'), - (0x1D71C, 'M', u'α'), - (0x1D71D, 'M', u'β'), - (0x1D71E, 'M', u'γ'), - (0x1D71F, 'M', u'δ'), - (0x1D720, 'M', u'ε'), - (0x1D721, 'M', u'ζ'), - (0x1D722, 'M', u'η'), - (0x1D723, 'M', u'θ'), - (0x1D724, 'M', u'ι'), - (0x1D725, 'M', u'κ'), - (0x1D726, 'M', u'λ'), - (0x1D727, 'M', u'μ'), - (0x1D728, 'M', u'ν'), - (0x1D729, 'M', u'ξ'), - (0x1D72A, 'M', u'ο'), - (0x1D72B, 'M', u'π'), - (0x1D72C, 'M', u'ρ'), - (0x1D72D, 'M', u'θ'), - (0x1D72E, 'M', u'σ'), - ] - -def _seg_66(): - return [ - (0x1D72F, 'M', u'τ'), - (0x1D730, 'M', u'υ'), - (0x1D731, 'M', u'φ'), - (0x1D732, 'M', u'χ'), - (0x1D733, 'M', u'ψ'), - (0x1D734, 'M', u'ω'), - (0x1D735, 'M', u'∇'), - (0x1D736, 'M', u'α'), - (0x1D737, 'M', u'β'), - (0x1D738, 'M', u'γ'), - (0x1D739, 'M', u'δ'), - (0x1D73A, 'M', u'ε'), - (0x1D73B, 'M', u'ζ'), - (0x1D73C, 'M', u'η'), - (0x1D73D, 'M', u'θ'), - (0x1D73E, 'M', u'ι'), - (0x1D73F, 'M', u'κ'), - (0x1D740, 'M', u'λ'), - (0x1D741, 'M', u'μ'), - (0x1D742, 'M', u'ν'), - (0x1D743, 'M', u'ξ'), - (0x1D744, 'M', u'ο'), - (0x1D745, 'M', u'π'), - (0x1D746, 'M', u'ρ'), - (0x1D747, 'M', u'σ'), - (0x1D749, 'M', u'τ'), - (0x1D74A, 'M', u'υ'), - (0x1D74B, 'M', u'φ'), - (0x1D74C, 'M', u'χ'), - (0x1D74D, 'M', u'ψ'), - (0x1D74E, 'M', u'ω'), - (0x1D74F, 'M', u'∂'), - (0x1D750, 'M', u'ε'), - (0x1D751, 'M', u'θ'), - (0x1D752, 'M', u'κ'), - (0x1D753, 'M', u'φ'), - (0x1D754, 'M', u'ρ'), - (0x1D755, 'M', u'π'), - (0x1D756, 'M', u'α'), - (0x1D757, 'M', u'β'), - (0x1D758, 'M', u'γ'), - (0x1D759, 'M', u'δ'), - (0x1D75A, 'M', u'ε'), - (0x1D75B, 'M', u'ζ'), - (0x1D75C, 'M', u'η'), - (0x1D75D, 'M', u'θ'), - (0x1D75E, 'M', u'ι'), - (0x1D75F, 'M', u'κ'), - (0x1D760, 'M', u'λ'), - (0x1D761, 'M', u'μ'), - (0x1D762, 'M', u'ν'), - (0x1D763, 'M', u'ξ'), - (0x1D764, 'M', u'ο'), - (0x1D765, 'M', u'π'), - (0x1D766, 'M', u'ρ'), - (0x1D767, 'M', u'θ'), - (0x1D768, 'M', u'σ'), - (0x1D769, 'M', u'τ'), - (0x1D76A, 'M', u'υ'), - (0x1D76B, 'M', u'φ'), - (0x1D76C, 'M', u'χ'), - (0x1D76D, 'M', u'ψ'), - (0x1D76E, 'M', u'ω'), - (0x1D76F, 'M', u'∇'), - (0x1D770, 'M', u'α'), - (0x1D771, 'M', u'β'), - (0x1D772, 'M', u'γ'), - (0x1D773, 'M', u'δ'), - (0x1D774, 'M', u'ε'), - (0x1D775, 'M', u'ζ'), - (0x1D776, 'M', u'η'), - (0x1D777, 'M', u'θ'), - (0x1D778, 'M', u'ι'), - (0x1D779, 'M', u'κ'), - (0x1D77A, 'M', u'λ'), - (0x1D77B, 'M', u'μ'), - (0x1D77C, 'M', u'ν'), - (0x1D77D, 'M', u'ξ'), - (0x1D77E, 'M', u'ο'), - (0x1D77F, 'M', u'π'), - (0x1D780, 'M', u'ρ'), - (0x1D781, 'M', u'σ'), - (0x1D783, 'M', u'τ'), - (0x1D784, 'M', u'υ'), - (0x1D785, 'M', u'φ'), - (0x1D786, 'M', u'χ'), - (0x1D787, 'M', u'ψ'), - (0x1D788, 'M', u'ω'), - (0x1D789, 'M', u'∂'), - (0x1D78A, 'M', u'ε'), - (0x1D78B, 'M', u'θ'), - (0x1D78C, 'M', u'κ'), - (0x1D78D, 'M', u'φ'), - (0x1D78E, 'M', u'ρ'), - (0x1D78F, 'M', u'π'), - (0x1D790, 'M', u'α'), - (0x1D791, 'M', u'β'), - (0x1D792, 'M', u'γ'), - (0x1D793, 'M', u'δ'), - (0x1D794, 'M', u'ε'), - ] - -def _seg_67(): - return [ - (0x1D795, 'M', u'ζ'), - (0x1D796, 'M', u'η'), - (0x1D797, 'M', u'θ'), - (0x1D798, 'M', u'ι'), - (0x1D799, 'M', u'κ'), - (0x1D79A, 'M', u'λ'), - (0x1D79B, 'M', u'μ'), - (0x1D79C, 'M', u'ν'), - (0x1D79D, 'M', u'ξ'), - (0x1D79E, 'M', u'ο'), - (0x1D79F, 'M', u'π'), - (0x1D7A0, 'M', u'ρ'), - (0x1D7A1, 'M', u'θ'), - (0x1D7A2, 'M', u'σ'), - (0x1D7A3, 'M', u'τ'), - (0x1D7A4, 'M', u'υ'), - (0x1D7A5, 'M', u'φ'), - (0x1D7A6, 'M', u'χ'), - (0x1D7A7, 'M', u'ψ'), - (0x1D7A8, 'M', u'ω'), - (0x1D7A9, 'M', u'∇'), - (0x1D7AA, 'M', u'α'), - (0x1D7AB, 'M', u'β'), - (0x1D7AC, 'M', u'γ'), - (0x1D7AD, 'M', u'δ'), - (0x1D7AE, 'M', u'ε'), - (0x1D7AF, 'M', u'ζ'), - (0x1D7B0, 'M', u'η'), - (0x1D7B1, 'M', u'θ'), - (0x1D7B2, 'M', u'ι'), - (0x1D7B3, 'M', u'κ'), - (0x1D7B4, 'M', u'λ'), - (0x1D7B5, 'M', u'μ'), - (0x1D7B6, 'M', u'ν'), - (0x1D7B7, 'M', u'ξ'), - (0x1D7B8, 'M', u'ο'), - (0x1D7B9, 'M', u'π'), - (0x1D7BA, 'M', u'ρ'), - (0x1D7BB, 'M', u'σ'), - (0x1D7BD, 'M', u'τ'), - (0x1D7BE, 'M', u'υ'), - (0x1D7BF, 'M', u'φ'), - (0x1D7C0, 'M', u'χ'), - (0x1D7C1, 'M', u'ψ'), - (0x1D7C2, 'M', u'ω'), - (0x1D7C3, 'M', u'∂'), - (0x1D7C4, 'M', u'ε'), - (0x1D7C5, 'M', u'θ'), - (0x1D7C6, 'M', u'κ'), - (0x1D7C7, 'M', u'φ'), - (0x1D7C8, 'M', u'ρ'), - (0x1D7C9, 'M', u'π'), - (0x1D7CA, 'M', u'ϝ'), - (0x1D7CC, 'X'), - (0x1D7CE, 'M', u'0'), - (0x1D7CF, 'M', u'1'), - (0x1D7D0, 'M', u'2'), - (0x1D7D1, 'M', u'3'), - (0x1D7D2, 'M', u'4'), - (0x1D7D3, 'M', u'5'), - (0x1D7D4, 'M', u'6'), - (0x1D7D5, 'M', u'7'), - (0x1D7D6, 'M', u'8'), - (0x1D7D7, 'M', u'9'), - (0x1D7D8, 'M', u'0'), - (0x1D7D9, 'M', u'1'), - (0x1D7DA, 'M', u'2'), - (0x1D7DB, 'M', u'3'), - (0x1D7DC, 'M', u'4'), - (0x1D7DD, 'M', u'5'), - (0x1D7DE, 'M', u'6'), - (0x1D7DF, 'M', u'7'), - (0x1D7E0, 'M', u'8'), - (0x1D7E1, 'M', u'9'), - (0x1D7E2, 'M', u'0'), - (0x1D7E3, 'M', u'1'), - (0x1D7E4, 'M', u'2'), - (0x1D7E5, 'M', u'3'), - (0x1D7E6, 'M', u'4'), - (0x1D7E7, 'M', u'5'), - (0x1D7E8, 'M', u'6'), - (0x1D7E9, 'M', u'7'), - (0x1D7EA, 'M', u'8'), - (0x1D7EB, 'M', u'9'), - (0x1D7EC, 'M', u'0'), - (0x1D7ED, 'M', u'1'), - (0x1D7EE, 'M', u'2'), - (0x1D7EF, 'M', u'3'), - (0x1D7F0, 'M', u'4'), - (0x1D7F1, 'M', u'5'), - (0x1D7F2, 'M', u'6'), - (0x1D7F3, 'M', u'7'), - (0x1D7F4, 'M', u'8'), - (0x1D7F5, 'M', u'9'), - (0x1D7F6, 'M', u'0'), - (0x1D7F7, 'M', u'1'), - (0x1D7F8, 'M', u'2'), - (0x1D7F9, 'M', u'3'), - (0x1D7FA, 'M', u'4'), - (0x1D7FB, 'M', u'5'), - ] - -def _seg_68(): - return [ - (0x1D7FC, 'M', u'6'), - (0x1D7FD, 'M', u'7'), - (0x1D7FE, 'M', u'8'), - (0x1D7FF, 'M', u'9'), - (0x1D800, 'V'), - (0x1DA8C, 'X'), - (0x1DA9B, 'V'), - (0x1DAA0, 'X'), - (0x1DAA1, 'V'), - (0x1DAB0, 'X'), - (0x1E000, 'V'), - (0x1E007, 'X'), - (0x1E008, 'V'), - (0x1E019, 'X'), - (0x1E01B, 'V'), - (0x1E022, 'X'), - (0x1E023, 'V'), - (0x1E025, 'X'), - (0x1E026, 'V'), - (0x1E02B, 'X'), - (0x1E800, 'V'), - (0x1E8C5, 'X'), - (0x1E8C7, 'V'), - (0x1E8D7, 'X'), - (0x1E900, 'M', u'𞤢'), - (0x1E901, 'M', u'𞤣'), - (0x1E902, 'M', u'𞤤'), - (0x1E903, 'M', u'𞤥'), - (0x1E904, 'M', u'𞤦'), - (0x1E905, 'M', u'𞤧'), - (0x1E906, 'M', u'𞤨'), - (0x1E907, 'M', u'𞤩'), - (0x1E908, 'M', u'𞤪'), - (0x1E909, 'M', u'𞤫'), - (0x1E90A, 'M', u'𞤬'), - (0x1E90B, 'M', u'𞤭'), - (0x1E90C, 'M', u'𞤮'), - (0x1E90D, 'M', u'𞤯'), - (0x1E90E, 'M', u'𞤰'), - (0x1E90F, 'M', u'𞤱'), - (0x1E910, 'M', u'𞤲'), - (0x1E911, 'M', u'𞤳'), - (0x1E912, 'M', u'𞤴'), - (0x1E913, 'M', u'𞤵'), - (0x1E914, 'M', u'𞤶'), - (0x1E915, 'M', u'𞤷'), - (0x1E916, 'M', u'𞤸'), - (0x1E917, 'M', u'𞤹'), - (0x1E918, 'M', u'𞤺'), - (0x1E919, 'M', u'𞤻'), - (0x1E91A, 'M', u'𞤼'), - (0x1E91B, 'M', u'𞤽'), - (0x1E91C, 'M', u'𞤾'), - (0x1E91D, 'M', u'𞤿'), - (0x1E91E, 'M', u'𞥀'), - (0x1E91F, 'M', u'𞥁'), - (0x1E920, 'M', u'𞥂'), - (0x1E921, 'M', u'𞥃'), - (0x1E922, 'V'), - (0x1E94B, 'X'), - (0x1E950, 'V'), - (0x1E95A, 'X'), - (0x1E95E, 'V'), - (0x1E960, 'X'), - (0x1EE00, 'M', u'ا'), - (0x1EE01, 'M', u'ب'), - (0x1EE02, 'M', u'ج'), - (0x1EE03, 'M', u'د'), - (0x1EE04, 'X'), - (0x1EE05, 'M', u'و'), - (0x1EE06, 'M', u'ز'), - (0x1EE07, 'M', u'ح'), - (0x1EE08, 'M', u'ط'), - (0x1EE09, 'M', u'ي'), - (0x1EE0A, 'M', u'ك'), - (0x1EE0B, 'M', u'ل'), - (0x1EE0C, 'M', u'م'), - (0x1EE0D, 'M', u'ن'), - (0x1EE0E, 'M', u'س'), - (0x1EE0F, 'M', u'ع'), - (0x1EE10, 'M', u'ف'), - (0x1EE11, 'M', u'ص'), - (0x1EE12, 'M', u'ق'), - (0x1EE13, 'M', u'ر'), - (0x1EE14, 'M', u'ش'), - (0x1EE15, 'M', u'ت'), - (0x1EE16, 'M', u'ث'), - (0x1EE17, 'M', u'خ'), - (0x1EE18, 'M', u'ذ'), - (0x1EE19, 'M', u'ض'), - (0x1EE1A, 'M', u'ظ'), - (0x1EE1B, 'M', u'غ'), - (0x1EE1C, 'M', u'ٮ'), - (0x1EE1D, 'M', u'ں'), - (0x1EE1E, 'M', u'ڡ'), - (0x1EE1F, 'M', u'ٯ'), - (0x1EE20, 'X'), - (0x1EE21, 'M', u'ب'), - (0x1EE22, 'M', u'ج'), - (0x1EE23, 'X'), - ] - -def _seg_69(): - return [ - (0x1EE24, 'M', u'ه'), - (0x1EE25, 'X'), - (0x1EE27, 'M', u'ح'), - (0x1EE28, 'X'), - (0x1EE29, 'M', u'ي'), - (0x1EE2A, 'M', u'ك'), - (0x1EE2B, 'M', u'ل'), - (0x1EE2C, 'M', u'م'), - (0x1EE2D, 'M', u'ن'), - (0x1EE2E, 'M', u'س'), - (0x1EE2F, 'M', u'ع'), - (0x1EE30, 'M', u'ف'), - (0x1EE31, 'M', u'ص'), - (0x1EE32, 'M', u'ق'), - (0x1EE33, 'X'), - (0x1EE34, 'M', u'ش'), - (0x1EE35, 'M', u'ت'), - (0x1EE36, 'M', u'ث'), - (0x1EE37, 'M', u'خ'), - (0x1EE38, 'X'), - (0x1EE39, 'M', u'ض'), - (0x1EE3A, 'X'), - (0x1EE3B, 'M', u'غ'), - (0x1EE3C, 'X'), - (0x1EE42, 'M', u'ج'), - (0x1EE43, 'X'), - (0x1EE47, 'M', u'ح'), - (0x1EE48, 'X'), - (0x1EE49, 'M', u'ي'), - (0x1EE4A, 'X'), - (0x1EE4B, 'M', u'ل'), - (0x1EE4C, 'X'), - (0x1EE4D, 'M', u'ن'), - (0x1EE4E, 'M', u'س'), - (0x1EE4F, 'M', u'ع'), - (0x1EE50, 'X'), - (0x1EE51, 'M', u'ص'), - (0x1EE52, 'M', u'ق'), - (0x1EE53, 'X'), - (0x1EE54, 'M', u'ش'), - (0x1EE55, 'X'), - (0x1EE57, 'M', u'خ'), - (0x1EE58, 'X'), - (0x1EE59, 'M', u'ض'), - (0x1EE5A, 'X'), - (0x1EE5B, 'M', u'غ'), - (0x1EE5C, 'X'), - (0x1EE5D, 'M', u'ں'), - (0x1EE5E, 'X'), - (0x1EE5F, 'M', u'ٯ'), - (0x1EE60, 'X'), - (0x1EE61, 'M', u'ب'), - (0x1EE62, 'M', u'ج'), - (0x1EE63, 'X'), - (0x1EE64, 'M', u'ه'), - (0x1EE65, 'X'), - (0x1EE67, 'M', u'ح'), - (0x1EE68, 'M', u'ط'), - (0x1EE69, 'M', u'ي'), - (0x1EE6A, 'M', u'ك'), - (0x1EE6B, 'X'), - (0x1EE6C, 'M', u'م'), - (0x1EE6D, 'M', u'ن'), - (0x1EE6E, 'M', u'س'), - (0x1EE6F, 'M', u'ع'), - (0x1EE70, 'M', u'ف'), - (0x1EE71, 'M', u'ص'), - (0x1EE72, 'M', u'ق'), - (0x1EE73, 'X'), - (0x1EE74, 'M', u'ش'), - (0x1EE75, 'M', u'ت'), - (0x1EE76, 'M', u'ث'), - (0x1EE77, 'M', u'خ'), - (0x1EE78, 'X'), - (0x1EE79, 'M', u'ض'), - (0x1EE7A, 'M', u'ظ'), - (0x1EE7B, 'M', u'غ'), - (0x1EE7C, 'M', u'ٮ'), - (0x1EE7D, 'X'), - (0x1EE7E, 'M', u'ڡ'), - (0x1EE7F, 'X'), - (0x1EE80, 'M', u'ا'), - (0x1EE81, 'M', u'ب'), - (0x1EE82, 'M', u'ج'), - (0x1EE83, 'M', u'د'), - (0x1EE84, 'M', u'ه'), - (0x1EE85, 'M', u'و'), - (0x1EE86, 'M', u'ز'), - (0x1EE87, 'M', u'ح'), - (0x1EE88, 'M', u'ط'), - (0x1EE89, 'M', u'ي'), - (0x1EE8A, 'X'), - (0x1EE8B, 'M', u'ل'), - (0x1EE8C, 'M', u'م'), - (0x1EE8D, 'M', u'ن'), - (0x1EE8E, 'M', u'س'), - (0x1EE8F, 'M', u'ع'), - (0x1EE90, 'M', u'ف'), - (0x1EE91, 'M', u'ص'), - (0x1EE92, 'M', u'ق'), - ] - -def _seg_70(): - return [ - (0x1EE93, 'M', u'ر'), - (0x1EE94, 'M', u'ش'), - (0x1EE95, 'M', u'ت'), - (0x1EE96, 'M', u'ث'), - (0x1EE97, 'M', u'خ'), - (0x1EE98, 'M', u'ذ'), - (0x1EE99, 'M', u'ض'), - (0x1EE9A, 'M', u'ظ'), - (0x1EE9B, 'M', u'غ'), - (0x1EE9C, 'X'), - (0x1EEA1, 'M', u'ب'), - (0x1EEA2, 'M', u'ج'), - (0x1EEA3, 'M', u'د'), - (0x1EEA4, 'X'), - (0x1EEA5, 'M', u'و'), - (0x1EEA6, 'M', u'ز'), - (0x1EEA7, 'M', u'ح'), - (0x1EEA8, 'M', u'ط'), - (0x1EEA9, 'M', u'ي'), - (0x1EEAA, 'X'), - (0x1EEAB, 'M', u'ل'), - (0x1EEAC, 'M', u'م'), - (0x1EEAD, 'M', u'ن'), - (0x1EEAE, 'M', u'س'), - (0x1EEAF, 'M', u'ع'), - (0x1EEB0, 'M', u'ف'), - (0x1EEB1, 'M', u'ص'), - (0x1EEB2, 'M', u'ق'), - (0x1EEB3, 'M', u'ر'), - (0x1EEB4, 'M', u'ش'), - (0x1EEB5, 'M', u'ت'), - (0x1EEB6, 'M', u'ث'), - (0x1EEB7, 'M', u'خ'), - (0x1EEB8, 'M', u'ذ'), - (0x1EEB9, 'M', u'ض'), - (0x1EEBA, 'M', u'ظ'), - (0x1EEBB, 'M', u'غ'), - (0x1EEBC, 'X'), - (0x1EEF0, 'V'), - (0x1EEF2, 'X'), - (0x1F000, 'V'), - (0x1F02C, 'X'), - (0x1F030, 'V'), - (0x1F094, 'X'), - (0x1F0A0, 'V'), - (0x1F0AF, 'X'), - (0x1F0B1, 'V'), - (0x1F0C0, 'X'), - (0x1F0C1, 'V'), - (0x1F0D0, 'X'), - (0x1F0D1, 'V'), - (0x1F0F6, 'X'), - (0x1F101, '3', u'0,'), - (0x1F102, '3', u'1,'), - (0x1F103, '3', u'2,'), - (0x1F104, '3', u'3,'), - (0x1F105, '3', u'4,'), - (0x1F106, '3', u'5,'), - (0x1F107, '3', u'6,'), - (0x1F108, '3', u'7,'), - (0x1F109, '3', u'8,'), - (0x1F10A, '3', u'9,'), - (0x1F10B, 'V'), - (0x1F10D, 'X'), - (0x1F110, '3', u'(a)'), - (0x1F111, '3', u'(b)'), - (0x1F112, '3', u'(c)'), - (0x1F113, '3', u'(d)'), - (0x1F114, '3', u'(e)'), - (0x1F115, '3', u'(f)'), - (0x1F116, '3', u'(g)'), - (0x1F117, '3', u'(h)'), - (0x1F118, '3', u'(i)'), - (0x1F119, '3', u'(j)'), - (0x1F11A, '3', u'(k)'), - (0x1F11B, '3', u'(l)'), - (0x1F11C, '3', u'(m)'), - (0x1F11D, '3', u'(n)'), - (0x1F11E, '3', u'(o)'), - (0x1F11F, '3', u'(p)'), - (0x1F120, '3', u'(q)'), - (0x1F121, '3', u'(r)'), - (0x1F122, '3', u'(s)'), - (0x1F123, '3', u'(t)'), - (0x1F124, '3', u'(u)'), - (0x1F125, '3', u'(v)'), - (0x1F126, '3', u'(w)'), - (0x1F127, '3', u'(x)'), - (0x1F128, '3', u'(y)'), - (0x1F129, '3', u'(z)'), - (0x1F12A, 'M', u'〔s〕'), - (0x1F12B, 'M', u'c'), - (0x1F12C, 'M', u'r'), - (0x1F12D, 'M', u'cd'), - (0x1F12E, 'M', u'wz'), - (0x1F12F, 'X'), - (0x1F130, 'M', u'a'), - (0x1F131, 'M', u'b'), - (0x1F132, 'M', u'c'), - (0x1F133, 'M', u'd'), - ] - -def _seg_71(): - return [ - (0x1F134, 'M', u'e'), - (0x1F135, 'M', u'f'), - (0x1F136, 'M', u'g'), - (0x1F137, 'M', u'h'), - (0x1F138, 'M', u'i'), - (0x1F139, 'M', u'j'), - (0x1F13A, 'M', u'k'), - (0x1F13B, 'M', u'l'), - (0x1F13C, 'M', u'm'), - (0x1F13D, 'M', u'n'), - (0x1F13E, 'M', u'o'), - (0x1F13F, 'M', u'p'), - (0x1F140, 'M', u'q'), - (0x1F141, 'M', u'r'), - (0x1F142, 'M', u's'), - (0x1F143, 'M', u't'), - (0x1F144, 'M', u'u'), - (0x1F145, 'M', u'v'), - (0x1F146, 'M', u'w'), - (0x1F147, 'M', u'x'), - (0x1F148, 'M', u'y'), - (0x1F149, 'M', u'z'), - (0x1F14A, 'M', u'hv'), - (0x1F14B, 'M', u'mv'), - (0x1F14C, 'M', u'sd'), - (0x1F14D, 'M', u'ss'), - (0x1F14E, 'M', u'ppv'), - (0x1F14F, 'M', u'wc'), - (0x1F150, 'V'), - (0x1F16A, 'M', u'mc'), - (0x1F16B, 'M', u'md'), - (0x1F16C, 'X'), - (0x1F170, 'V'), - (0x1F190, 'M', u'dj'), - (0x1F191, 'V'), - (0x1F1AD, 'X'), - (0x1F1E6, 'V'), - (0x1F200, 'M', u'ほか'), - (0x1F201, 'M', u'ココ'), - (0x1F202, 'M', u'サ'), - (0x1F203, 'X'), - (0x1F210, 'M', u'手'), - (0x1F211, 'M', u'字'), - (0x1F212, 'M', u'双'), - (0x1F213, 'M', u'デ'), - (0x1F214, 'M', u'二'), - (0x1F215, 'M', u'多'), - (0x1F216, 'M', u'解'), - (0x1F217, 'M', u'天'), - (0x1F218, 'M', u'交'), - (0x1F219, 'M', u'映'), - (0x1F21A, 'M', u'無'), - (0x1F21B, 'M', u'料'), - (0x1F21C, 'M', u'前'), - (0x1F21D, 'M', u'後'), - (0x1F21E, 'M', u'再'), - (0x1F21F, 'M', u'新'), - (0x1F220, 'M', u'初'), - (0x1F221, 'M', u'終'), - (0x1F222, 'M', u'生'), - (0x1F223, 'M', u'販'), - (0x1F224, 'M', u'声'), - (0x1F225, 'M', u'吹'), - (0x1F226, 'M', u'演'), - (0x1F227, 'M', u'投'), - (0x1F228, 'M', u'捕'), - (0x1F229, 'M', u'一'), - (0x1F22A, 'M', u'三'), - (0x1F22B, 'M', u'遊'), - (0x1F22C, 'M', u'左'), - (0x1F22D, 'M', u'中'), - (0x1F22E, 'M', u'右'), - (0x1F22F, 'M', u'指'), - (0x1F230, 'M', u'走'), - (0x1F231, 'M', u'打'), - (0x1F232, 'M', u'禁'), - (0x1F233, 'M', u'空'), - (0x1F234, 'M', u'合'), - (0x1F235, 'M', u'満'), - (0x1F236, 'M', u'有'), - (0x1F237, 'M', u'月'), - (0x1F238, 'M', u'申'), - (0x1F239, 'M', u'割'), - (0x1F23A, 'M', u'営'), - (0x1F23B, 'M', u'配'), - (0x1F23C, 'X'), - (0x1F240, 'M', u'〔本〕'), - (0x1F241, 'M', u'〔三〕'), - (0x1F242, 'M', u'〔二〕'), - (0x1F243, 'M', u'〔安〕'), - (0x1F244, 'M', u'〔点〕'), - (0x1F245, 'M', u'〔打〕'), - (0x1F246, 'M', u'〔盗〕'), - (0x1F247, 'M', u'〔勝〕'), - (0x1F248, 'M', u'〔敗〕'), - (0x1F249, 'X'), - (0x1F250, 'M', u'得'), - (0x1F251, 'M', u'可'), - (0x1F252, 'X'), - (0x1F260, 'V'), - ] - -def _seg_72(): - return [ - (0x1F266, 'X'), - (0x1F300, 'V'), - (0x1F6D5, 'X'), - (0x1F6E0, 'V'), - (0x1F6ED, 'X'), - (0x1F6F0, 'V'), - (0x1F6F9, 'X'), - (0x1F700, 'V'), - (0x1F774, 'X'), - (0x1F780, 'V'), - (0x1F7D5, 'X'), - (0x1F800, 'V'), - (0x1F80C, 'X'), - (0x1F810, 'V'), - (0x1F848, 'X'), - (0x1F850, 'V'), - (0x1F85A, 'X'), - (0x1F860, 'V'), - (0x1F888, 'X'), - (0x1F890, 'V'), - (0x1F8AE, 'X'), - (0x1F900, 'V'), - (0x1F90C, 'X'), - (0x1F910, 'V'), - (0x1F93F, 'X'), - (0x1F940, 'V'), - (0x1F94D, 'X'), - (0x1F950, 'V'), - (0x1F96C, 'X'), - (0x1F980, 'V'), - (0x1F998, 'X'), - (0x1F9C0, 'V'), - (0x1F9C1, 'X'), - (0x1F9D0, 'V'), - (0x1F9E7, 'X'), - (0x20000, 'V'), - (0x2A6D7, 'X'), - (0x2A700, 'V'), - (0x2B735, 'X'), - (0x2B740, 'V'), - (0x2B81E, 'X'), - (0x2B820, 'V'), - (0x2CEA2, 'X'), - (0x2CEB0, 'V'), - (0x2EBE1, 'X'), - (0x2F800, 'M', u'丽'), - (0x2F801, 'M', u'丸'), - (0x2F802, 'M', u'乁'), - (0x2F803, 'M', u'𠄢'), - (0x2F804, 'M', u'你'), - (0x2F805, 'M', u'侮'), - (0x2F806, 'M', u'侻'), - (0x2F807, 'M', u'倂'), - (0x2F808, 'M', u'偺'), - (0x2F809, 'M', u'備'), - (0x2F80A, 'M', u'僧'), - (0x2F80B, 'M', u'像'), - (0x2F80C, 'M', u'㒞'), - (0x2F80D, 'M', u'𠘺'), - (0x2F80E, 'M', u'免'), - (0x2F80F, 'M', u'兔'), - (0x2F810, 'M', u'兤'), - (0x2F811, 'M', u'具'), - (0x2F812, 'M', u'𠔜'), - (0x2F813, 'M', u'㒹'), - (0x2F814, 'M', u'內'), - (0x2F815, 'M', u'再'), - (0x2F816, 'M', u'𠕋'), - (0x2F817, 'M', u'冗'), - (0x2F818, 'M', u'冤'), - (0x2F819, 'M', u'仌'), - (0x2F81A, 'M', u'冬'), - (0x2F81B, 'M', u'况'), - (0x2F81C, 'M', u'𩇟'), - (0x2F81D, 'M', u'凵'), - (0x2F81E, 'M', u'刃'), - (0x2F81F, 'M', u'㓟'), - (0x2F820, 'M', u'刻'), - (0x2F821, 'M', u'剆'), - (0x2F822, 'M', u'割'), - (0x2F823, 'M', u'剷'), - (0x2F824, 'M', u'㔕'), - (0x2F825, 'M', u'勇'), - (0x2F826, 'M', u'勉'), - (0x2F827, 'M', u'勤'), - (0x2F828, 'M', u'勺'), - (0x2F829, 'M', u'包'), - (0x2F82A, 'M', u'匆'), - (0x2F82B, 'M', u'北'), - (0x2F82C, 'M', u'卉'), - (0x2F82D, 'M', u'卑'), - (0x2F82E, 'M', u'博'), - (0x2F82F, 'M', u'即'), - (0x2F830, 'M', u'卽'), - (0x2F831, 'M', u'卿'), - (0x2F834, 'M', u'𠨬'), - (0x2F835, 'M', u'灰'), - (0x2F836, 'M', u'及'), - (0x2F837, 'M', u'叟'), - (0x2F838, 'M', u'𠭣'), - ] - -def _seg_73(): - return [ - (0x2F839, 'M', u'叫'), - (0x2F83A, 'M', u'叱'), - (0x2F83B, 'M', u'吆'), - (0x2F83C, 'M', u'咞'), - (0x2F83D, 'M', u'吸'), - (0x2F83E, 'M', u'呈'), - (0x2F83F, 'M', u'周'), - (0x2F840, 'M', u'咢'), - (0x2F841, 'M', u'哶'), - (0x2F842, 'M', u'唐'), - (0x2F843, 'M', u'啓'), - (0x2F844, 'M', u'啣'), - (0x2F845, 'M', u'善'), - (0x2F847, 'M', u'喙'), - (0x2F848, 'M', u'喫'), - (0x2F849, 'M', u'喳'), - (0x2F84A, 'M', u'嗂'), - (0x2F84B, 'M', u'圖'), - (0x2F84C, 'M', u'嘆'), - (0x2F84D, 'M', u'圗'), - (0x2F84E, 'M', u'噑'), - (0x2F84F, 'M', u'噴'), - (0x2F850, 'M', u'切'), - (0x2F851, 'M', u'壮'), - (0x2F852, 'M', u'城'), - (0x2F853, 'M', u'埴'), - (0x2F854, 'M', u'堍'), - (0x2F855, 'M', u'型'), - (0x2F856, 'M', u'堲'), - (0x2F857, 'M', u'報'), - (0x2F858, 'M', u'墬'), - (0x2F859, 'M', u'𡓤'), - (0x2F85A, 'M', u'売'), - (0x2F85B, 'M', u'壷'), - (0x2F85C, 'M', u'夆'), - (0x2F85D, 'M', u'多'), - (0x2F85E, 'M', u'夢'), - (0x2F85F, 'M', u'奢'), - (0x2F860, 'M', u'𡚨'), - (0x2F861, 'M', u'𡛪'), - (0x2F862, 'M', u'姬'), - (0x2F863, 'M', u'娛'), - (0x2F864, 'M', u'娧'), - (0x2F865, 'M', u'姘'), - (0x2F866, 'M', u'婦'), - (0x2F867, 'M', u'㛮'), - (0x2F868, 'X'), - (0x2F869, 'M', u'嬈'), - (0x2F86A, 'M', u'嬾'), - (0x2F86C, 'M', u'𡧈'), - (0x2F86D, 'M', u'寃'), - (0x2F86E, 'M', u'寘'), - (0x2F86F, 'M', u'寧'), - (0x2F870, 'M', u'寳'), - (0x2F871, 'M', u'𡬘'), - (0x2F872, 'M', u'寿'), - (0x2F873, 'M', u'将'), - (0x2F874, 'X'), - (0x2F875, 'M', u'尢'), - (0x2F876, 'M', u'㞁'), - (0x2F877, 'M', u'屠'), - (0x2F878, 'M', u'屮'), - (0x2F879, 'M', u'峀'), - (0x2F87A, 'M', u'岍'), - (0x2F87B, 'M', u'𡷤'), - (0x2F87C, 'M', u'嵃'), - (0x2F87D, 'M', u'𡷦'), - (0x2F87E, 'M', u'嵮'), - (0x2F87F, 'M', u'嵫'), - (0x2F880, 'M', u'嵼'), - (0x2F881, 'M', u'巡'), - (0x2F882, 'M', u'巢'), - (0x2F883, 'M', u'㠯'), - (0x2F884, 'M', u'巽'), - (0x2F885, 'M', u'帨'), - (0x2F886, 'M', u'帽'), - (0x2F887, 'M', u'幩'), - (0x2F888, 'M', u'㡢'), - (0x2F889, 'M', u'𢆃'), - (0x2F88A, 'M', u'㡼'), - (0x2F88B, 'M', u'庰'), - (0x2F88C, 'M', u'庳'), - (0x2F88D, 'M', u'庶'), - (0x2F88E, 'M', u'廊'), - (0x2F88F, 'M', u'𪎒'), - (0x2F890, 'M', u'廾'), - (0x2F891, 'M', u'𢌱'), - (0x2F893, 'M', u'舁'), - (0x2F894, 'M', u'弢'), - (0x2F896, 'M', u'㣇'), - (0x2F897, 'M', u'𣊸'), - (0x2F898, 'M', u'𦇚'), - (0x2F899, 'M', u'形'), - (0x2F89A, 'M', u'彫'), - (0x2F89B, 'M', u'㣣'), - (0x2F89C, 'M', u'徚'), - (0x2F89D, 'M', u'忍'), - (0x2F89E, 'M', u'志'), - (0x2F89F, 'M', u'忹'), - (0x2F8A0, 'M', u'悁'), - ] - -def _seg_74(): - return [ - (0x2F8A1, 'M', u'㤺'), - (0x2F8A2, 'M', u'㤜'), - (0x2F8A3, 'M', u'悔'), - (0x2F8A4, 'M', u'𢛔'), - (0x2F8A5, 'M', u'惇'), - (0x2F8A6, 'M', u'慈'), - (0x2F8A7, 'M', u'慌'), - (0x2F8A8, 'M', u'慎'), - (0x2F8A9, 'M', u'慌'), - (0x2F8AA, 'M', u'慺'), - (0x2F8AB, 'M', u'憎'), - (0x2F8AC, 'M', u'憲'), - (0x2F8AD, 'M', u'憤'), - (0x2F8AE, 'M', u'憯'), - (0x2F8AF, 'M', u'懞'), - (0x2F8B0, 'M', u'懲'), - (0x2F8B1, 'M', u'懶'), - (0x2F8B2, 'M', u'成'), - (0x2F8B3, 'M', u'戛'), - (0x2F8B4, 'M', u'扝'), - (0x2F8B5, 'M', u'抱'), - (0x2F8B6, 'M', u'拔'), - (0x2F8B7, 'M', u'捐'), - (0x2F8B8, 'M', u'𢬌'), - (0x2F8B9, 'M', u'挽'), - (0x2F8BA, 'M', u'拼'), - (0x2F8BB, 'M', u'捨'), - (0x2F8BC, 'M', u'掃'), - (0x2F8BD, 'M', u'揤'), - (0x2F8BE, 'M', u'𢯱'), - (0x2F8BF, 'M', u'搢'), - (0x2F8C0, 'M', u'揅'), - (0x2F8C1, 'M', u'掩'), - (0x2F8C2, 'M', u'㨮'), - (0x2F8C3, 'M', u'摩'), - (0x2F8C4, 'M', u'摾'), - (0x2F8C5, 'M', u'撝'), - (0x2F8C6, 'M', u'摷'), - (0x2F8C7, 'M', u'㩬'), - (0x2F8C8, 'M', u'敏'), - (0x2F8C9, 'M', u'敬'), - (0x2F8CA, 'M', u'𣀊'), - (0x2F8CB, 'M', u'旣'), - (0x2F8CC, 'M', u'書'), - (0x2F8CD, 'M', u'晉'), - (0x2F8CE, 'M', u'㬙'), - (0x2F8CF, 'M', u'暑'), - (0x2F8D0, 'M', u'㬈'), - (0x2F8D1, 'M', u'㫤'), - (0x2F8D2, 'M', u'冒'), - (0x2F8D3, 'M', u'冕'), - (0x2F8D4, 'M', u'最'), - (0x2F8D5, 'M', u'暜'), - (0x2F8D6, 'M', u'肭'), - (0x2F8D7, 'M', u'䏙'), - (0x2F8D8, 'M', u'朗'), - (0x2F8D9, 'M', u'望'), - (0x2F8DA, 'M', u'朡'), - (0x2F8DB, 'M', u'杞'), - (0x2F8DC, 'M', u'杓'), - (0x2F8DD, 'M', u'𣏃'), - (0x2F8DE, 'M', u'㭉'), - (0x2F8DF, 'M', u'柺'), - (0x2F8E0, 'M', u'枅'), - (0x2F8E1, 'M', u'桒'), - (0x2F8E2, 'M', u'梅'), - (0x2F8E3, 'M', u'𣑭'), - (0x2F8E4, 'M', u'梎'), - (0x2F8E5, 'M', u'栟'), - (0x2F8E6, 'M', u'椔'), - (0x2F8E7, 'M', u'㮝'), - (0x2F8E8, 'M', u'楂'), - (0x2F8E9, 'M', u'榣'), - (0x2F8EA, 'M', u'槪'), - (0x2F8EB, 'M', u'檨'), - (0x2F8EC, 'M', u'𣚣'), - (0x2F8ED, 'M', u'櫛'), - (0x2F8EE, 'M', u'㰘'), - (0x2F8EF, 'M', u'次'), - (0x2F8F0, 'M', u'𣢧'), - (0x2F8F1, 'M', u'歔'), - (0x2F8F2, 'M', u'㱎'), - (0x2F8F3, 'M', u'歲'), - (0x2F8F4, 'M', u'殟'), - (0x2F8F5, 'M', u'殺'), - (0x2F8F6, 'M', u'殻'), - (0x2F8F7, 'M', u'𣪍'), - (0x2F8F8, 'M', u'𡴋'), - (0x2F8F9, 'M', u'𣫺'), - (0x2F8FA, 'M', u'汎'), - (0x2F8FB, 'M', u'𣲼'), - (0x2F8FC, 'M', u'沿'), - (0x2F8FD, 'M', u'泍'), - (0x2F8FE, 'M', u'汧'), - (0x2F8FF, 'M', u'洖'), - (0x2F900, 'M', u'派'), - (0x2F901, 'M', u'海'), - (0x2F902, 'M', u'流'), - (0x2F903, 'M', u'浩'), - (0x2F904, 'M', u'浸'), - ] - -def _seg_75(): - return [ - (0x2F905, 'M', u'涅'), - (0x2F906, 'M', u'𣴞'), - (0x2F907, 'M', u'洴'), - (0x2F908, 'M', u'港'), - (0x2F909, 'M', u'湮'), - (0x2F90A, 'M', u'㴳'), - (0x2F90B, 'M', u'滋'), - (0x2F90C, 'M', u'滇'), - (0x2F90D, 'M', u'𣻑'), - (0x2F90E, 'M', u'淹'), - (0x2F90F, 'M', u'潮'), - (0x2F910, 'M', u'𣽞'), - (0x2F911, 'M', u'𣾎'), - (0x2F912, 'M', u'濆'), - (0x2F913, 'M', u'瀹'), - (0x2F914, 'M', u'瀞'), - (0x2F915, 'M', u'瀛'), - (0x2F916, 'M', u'㶖'), - (0x2F917, 'M', u'灊'), - (0x2F918, 'M', u'災'), - (0x2F919, 'M', u'灷'), - (0x2F91A, 'M', u'炭'), - (0x2F91B, 'M', u'𠔥'), - (0x2F91C, 'M', u'煅'), - (0x2F91D, 'M', u'𤉣'), - (0x2F91E, 'M', u'熜'), - (0x2F91F, 'X'), - (0x2F920, 'M', u'爨'), - (0x2F921, 'M', u'爵'), - (0x2F922, 'M', u'牐'), - (0x2F923, 'M', u'𤘈'), - (0x2F924, 'M', u'犀'), - (0x2F925, 'M', u'犕'), - (0x2F926, 'M', u'𤜵'), - (0x2F927, 'M', u'𤠔'), - (0x2F928, 'M', u'獺'), - (0x2F929, 'M', u'王'), - (0x2F92A, 'M', u'㺬'), - (0x2F92B, 'M', u'玥'), - (0x2F92C, 'M', u'㺸'), - (0x2F92E, 'M', u'瑇'), - (0x2F92F, 'M', u'瑜'), - (0x2F930, 'M', u'瑱'), - (0x2F931, 'M', u'璅'), - (0x2F932, 'M', u'瓊'), - (0x2F933, 'M', u'㼛'), - (0x2F934, 'M', u'甤'), - (0x2F935, 'M', u'𤰶'), - (0x2F936, 'M', u'甾'), - (0x2F937, 'M', u'𤲒'), - (0x2F938, 'M', u'異'), - (0x2F939, 'M', u'𢆟'), - (0x2F93A, 'M', u'瘐'), - (0x2F93B, 'M', u'𤾡'), - (0x2F93C, 'M', u'𤾸'), - (0x2F93D, 'M', u'𥁄'), - (0x2F93E, 'M', u'㿼'), - (0x2F93F, 'M', u'䀈'), - (0x2F940, 'M', u'直'), - (0x2F941, 'M', u'𥃳'), - (0x2F942, 'M', u'𥃲'), - (0x2F943, 'M', u'𥄙'), - (0x2F944, 'M', u'𥄳'), - (0x2F945, 'M', u'眞'), - (0x2F946, 'M', u'真'), - (0x2F948, 'M', u'睊'), - (0x2F949, 'M', u'䀹'), - (0x2F94A, 'M', u'瞋'), - (0x2F94B, 'M', u'䁆'), - (0x2F94C, 'M', u'䂖'), - (0x2F94D, 'M', u'𥐝'), - (0x2F94E, 'M', u'硎'), - (0x2F94F, 'M', u'碌'), - (0x2F950, 'M', u'磌'), - (0x2F951, 'M', u'䃣'), - (0x2F952, 'M', u'𥘦'), - (0x2F953, 'M', u'祖'), - (0x2F954, 'M', u'𥚚'), - (0x2F955, 'M', u'𥛅'), - (0x2F956, 'M', u'福'), - (0x2F957, 'M', u'秫'), - (0x2F958, 'M', u'䄯'), - (0x2F959, 'M', u'穀'), - (0x2F95A, 'M', u'穊'), - (0x2F95B, 'M', u'穏'), - (0x2F95C, 'M', u'𥥼'), - (0x2F95D, 'M', u'𥪧'), - (0x2F95F, 'X'), - (0x2F960, 'M', u'䈂'), - (0x2F961, 'M', u'𥮫'), - (0x2F962, 'M', u'篆'), - (0x2F963, 'M', u'築'), - (0x2F964, 'M', u'䈧'), - (0x2F965, 'M', u'𥲀'), - (0x2F966, 'M', u'糒'), - (0x2F967, 'M', u'䊠'), - (0x2F968, 'M', u'糨'), - (0x2F969, 'M', u'糣'), - (0x2F96A, 'M', u'紀'), - (0x2F96B, 'M', u'𥾆'), - ] - -def _seg_76(): - return [ - (0x2F96C, 'M', u'絣'), - (0x2F96D, 'M', u'䌁'), - (0x2F96E, 'M', u'緇'), - (0x2F96F, 'M', u'縂'), - (0x2F970, 'M', u'繅'), - (0x2F971, 'M', u'䌴'), - (0x2F972, 'M', u'𦈨'), - (0x2F973, 'M', u'𦉇'), - (0x2F974, 'M', u'䍙'), - (0x2F975, 'M', u'𦋙'), - (0x2F976, 'M', u'罺'), - (0x2F977, 'M', u'𦌾'), - (0x2F978, 'M', u'羕'), - (0x2F979, 'M', u'翺'), - (0x2F97A, 'M', u'者'), - (0x2F97B, 'M', u'𦓚'), - (0x2F97C, 'M', u'𦔣'), - (0x2F97D, 'M', u'聠'), - (0x2F97E, 'M', u'𦖨'), - (0x2F97F, 'M', u'聰'), - (0x2F980, 'M', u'𣍟'), - (0x2F981, 'M', u'䏕'), - (0x2F982, 'M', u'育'), - (0x2F983, 'M', u'脃'), - (0x2F984, 'M', u'䐋'), - (0x2F985, 'M', u'脾'), - (0x2F986, 'M', u'媵'), - (0x2F987, 'M', u'𦞧'), - (0x2F988, 'M', u'𦞵'), - (0x2F989, 'M', u'𣎓'), - (0x2F98A, 'M', u'𣎜'), - (0x2F98B, 'M', u'舁'), - (0x2F98C, 'M', u'舄'), - (0x2F98D, 'M', u'辞'), - (0x2F98E, 'M', u'䑫'), - (0x2F98F, 'M', u'芑'), - (0x2F990, 'M', u'芋'), - (0x2F991, 'M', u'芝'), - (0x2F992, 'M', u'劳'), - (0x2F993, 'M', u'花'), - (0x2F994, 'M', u'芳'), - (0x2F995, 'M', u'芽'), - (0x2F996, 'M', u'苦'), - (0x2F997, 'M', u'𦬼'), - (0x2F998, 'M', u'若'), - (0x2F999, 'M', u'茝'), - (0x2F99A, 'M', u'荣'), - (0x2F99B, 'M', u'莭'), - (0x2F99C, 'M', u'茣'), - (0x2F99D, 'M', u'莽'), - (0x2F99E, 'M', u'菧'), - (0x2F99F, 'M', u'著'), - (0x2F9A0, 'M', u'荓'), - (0x2F9A1, 'M', u'菊'), - (0x2F9A2, 'M', u'菌'), - (0x2F9A3, 'M', u'菜'), - (0x2F9A4, 'M', u'𦰶'), - (0x2F9A5, 'M', u'𦵫'), - (0x2F9A6, 'M', u'𦳕'), - (0x2F9A7, 'M', u'䔫'), - (0x2F9A8, 'M', u'蓱'), - (0x2F9A9, 'M', u'蓳'), - (0x2F9AA, 'M', u'蔖'), - (0x2F9AB, 'M', u'𧏊'), - (0x2F9AC, 'M', u'蕤'), - (0x2F9AD, 'M', u'𦼬'), - (0x2F9AE, 'M', u'䕝'), - (0x2F9AF, 'M', u'䕡'), - (0x2F9B0, 'M', u'𦾱'), - (0x2F9B1, 'M', u'𧃒'), - (0x2F9B2, 'M', u'䕫'), - (0x2F9B3, 'M', u'虐'), - (0x2F9B4, 'M', u'虜'), - (0x2F9B5, 'M', u'虧'), - (0x2F9B6, 'M', u'虩'), - (0x2F9B7, 'M', u'蚩'), - (0x2F9B8, 'M', u'蚈'), - (0x2F9B9, 'M', u'蜎'), - (0x2F9BA, 'M', u'蛢'), - (0x2F9BB, 'M', u'蝹'), - (0x2F9BC, 'M', u'蜨'), - (0x2F9BD, 'M', u'蝫'), - (0x2F9BE, 'M', u'螆'), - (0x2F9BF, 'X'), - (0x2F9C0, 'M', u'蟡'), - (0x2F9C1, 'M', u'蠁'), - (0x2F9C2, 'M', u'䗹'), - (0x2F9C3, 'M', u'衠'), - (0x2F9C4, 'M', u'衣'), - (0x2F9C5, 'M', u'𧙧'), - (0x2F9C6, 'M', u'裗'), - (0x2F9C7, 'M', u'裞'), - (0x2F9C8, 'M', u'䘵'), - (0x2F9C9, 'M', u'裺'), - (0x2F9CA, 'M', u'㒻'), - (0x2F9CB, 'M', u'𧢮'), - (0x2F9CC, 'M', u'𧥦'), - (0x2F9CD, 'M', u'䚾'), - (0x2F9CE, 'M', u'䛇'), - (0x2F9CF, 'M', u'誠'), - ] - -def _seg_77(): - return [ - (0x2F9D0, 'M', u'諭'), - (0x2F9D1, 'M', u'變'), - (0x2F9D2, 'M', u'豕'), - (0x2F9D3, 'M', u'𧲨'), - (0x2F9D4, 'M', u'貫'), - (0x2F9D5, 'M', u'賁'), - (0x2F9D6, 'M', u'贛'), - (0x2F9D7, 'M', u'起'), - (0x2F9D8, 'M', u'𧼯'), - (0x2F9D9, 'M', u'𠠄'), - (0x2F9DA, 'M', u'跋'), - (0x2F9DB, 'M', u'趼'), - (0x2F9DC, 'M', u'跰'), - (0x2F9DD, 'M', u'𠣞'), - (0x2F9DE, 'M', u'軔'), - (0x2F9DF, 'M', u'輸'), - (0x2F9E0, 'M', u'𨗒'), - (0x2F9E1, 'M', u'𨗭'), - (0x2F9E2, 'M', u'邔'), - (0x2F9E3, 'M', u'郱'), - (0x2F9E4, 'M', u'鄑'), - (0x2F9E5, 'M', u'𨜮'), - (0x2F9E6, 'M', u'鄛'), - (0x2F9E7, 'M', u'鈸'), - (0x2F9E8, 'M', u'鋗'), - (0x2F9E9, 'M', u'鋘'), - (0x2F9EA, 'M', u'鉼'), - (0x2F9EB, 'M', u'鏹'), - (0x2F9EC, 'M', u'鐕'), - (0x2F9ED, 'M', u'𨯺'), - (0x2F9EE, 'M', u'開'), - (0x2F9EF, 'M', u'䦕'), - (0x2F9F0, 'M', u'閷'), - (0x2F9F1, 'M', u'𨵷'), - (0x2F9F2, 'M', u'䧦'), - (0x2F9F3, 'M', u'雃'), - (0x2F9F4, 'M', u'嶲'), - (0x2F9F5, 'M', u'霣'), - (0x2F9F6, 'M', u'𩅅'), - (0x2F9F7, 'M', u'𩈚'), - (0x2F9F8, 'M', u'䩮'), - (0x2F9F9, 'M', u'䩶'), - (0x2F9FA, 'M', u'韠'), - (0x2F9FB, 'M', u'𩐊'), - (0x2F9FC, 'M', u'䪲'), - (0x2F9FD, 'M', u'𩒖'), - (0x2F9FE, 'M', u'頋'), - (0x2FA00, 'M', u'頩'), - (0x2FA01, 'M', u'𩖶'), - (0x2FA02, 'M', u'飢'), - (0x2FA03, 'M', u'䬳'), - (0x2FA04, 'M', u'餩'), - (0x2FA05, 'M', u'馧'), - (0x2FA06, 'M', u'駂'), - (0x2FA07, 'M', u'駾'), - (0x2FA08, 'M', u'䯎'), - (0x2FA09, 'M', u'𩬰'), - (0x2FA0A, 'M', u'鬒'), - (0x2FA0B, 'M', u'鱀'), - (0x2FA0C, 'M', u'鳽'), - (0x2FA0D, 'M', u'䳎'), - (0x2FA0E, 'M', u'䳭'), - (0x2FA0F, 'M', u'鵧'), - (0x2FA10, 'M', u'𪃎'), - (0x2FA11, 'M', u'䳸'), - (0x2FA12, 'M', u'𪄅'), - (0x2FA13, 'M', u'𪈎'), - (0x2FA14, 'M', u'𪊑'), - (0x2FA15, 'M', u'麻'), - (0x2FA16, 'M', u'䵖'), - (0x2FA17, 'M', u'黹'), - (0x2FA18, 'M', u'黾'), - (0x2FA19, 'M', u'鼅'), - (0x2FA1A, 'M', u'鼏'), - (0x2FA1B, 'M', u'鼖'), - (0x2FA1C, 'M', u'鼻'), - (0x2FA1D, 'M', u'𪘀'), - (0x2FA1E, 'X'), - (0xE0100, 'I'), - (0xE01F0, 'X'), - ] - -uts46data = tuple( - _seg_0() - + _seg_1() - + _seg_2() - + _seg_3() - + _seg_4() - + _seg_5() - + _seg_6() - + _seg_7() - + _seg_8() - + _seg_9() - + _seg_10() - + _seg_11() - + _seg_12() - + _seg_13() - + _seg_14() - + _seg_15() - + _seg_16() - + _seg_17() - + _seg_18() - + _seg_19() - + _seg_20() - + _seg_21() - + _seg_22() - + _seg_23() - + _seg_24() - + _seg_25() - + _seg_26() - + _seg_27() - + _seg_28() - + _seg_29() - + _seg_30() - + _seg_31() - + _seg_32() - + _seg_33() - + _seg_34() - + _seg_35() - + _seg_36() - + _seg_37() - + _seg_38() - + _seg_39() - + _seg_40() - + _seg_41() - + _seg_42() - + _seg_43() - + _seg_44() - + _seg_45() - + _seg_46() - + _seg_47() - + _seg_48() - + _seg_49() - + _seg_50() - + _seg_51() - + _seg_52() - + _seg_53() - + _seg_54() - + _seg_55() - + _seg_56() - + _seg_57() - + _seg_58() - + _seg_59() - + _seg_60() - + _seg_61() - + _seg_62() - + _seg_63() - + _seg_64() - + _seg_65() - + _seg_66() - + _seg_67() - + _seg_68() - + _seg_69() - + _seg_70() - + _seg_71() - + _seg_72() - + _seg_73() - + _seg_74() - + _seg_75() - + _seg_76() - + _seg_77() -) diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/DESCRIPTION.rst deleted file mode 100644 index cb01fb0..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,198 +0,0 @@ -======================= -Password Strength Meter -======================= - -A configurable, extensible password strength measuring library. - - -Project -======= - -* Homepage: https://github.com/cadithealth/passwordmeter -* Bugs: https://github.com/cadithealth/passwordmeter/issues - - -TL;DR -===== - -Install: - -.. code-block:: bash - - $ pip install passwordmeter - -Use from within an application with the default factors: - -.. code-block:: python - - import passwordmeter - - strength, improvements = passwordmeter.test(sys.argv[1]) - - if strength < 0.5: - print 'Your password is too weak.' - -Use on the command line: - -.. code-block:: bash - - $ pwm 'password' - Password strength: 0.132549901057 (Extremely weak) - Possible improvements: - - Use a good mix of numbers, letters, and symbols - - Avoid using one of the ten thousand most common passwords - - Use a good mix of UPPER case and lower case letters - - -Overview -======== - -The main function provided by the `passwordmeter` package is the -``Meter.test()`` method, which returns a tuple of (float, dict). The -float is the strength of the password in the range 0 to 1 (inclusive), -where 0 is extremely weak and 1 is extremely strong. The second -parameter, which may be ``None``, is a dictionary of ways the password -could be improved. The keys of the dict are general "categories" of -ways to improve the password (e.g. "length") that are fixed strings, -and the values are internationalizable strings that are human-friendly -descriptions and possibly tailored to the specific password. - -A password's strength is determined by doing a weighted, skewed, -curved average of a set of "factors". The `Meter` constructor takes a -`settings` dictionary that configures, customizes, and/or supplements -the default set of factors. - -The `passwordmeter.test` is a helper function that simply uses the -default settings to test the strength of a password, and is -effectively a shorthand for ``Meter().test(...)``. - -For example, to use a custom selection of factors: - -.. code-block:: python - - import passwordmeter - - # use only the 'length' and 'charmix' factors - meter = passwordmeter.Meter(settings=dict(factors='length,charmix')) - - strength, improvements = meter.test('s3cr3t p4ssW0RD!') - - -Settings -======== - -The `settings` attribute to the `Meter` constructor is a dictionary -with the following keys: - -* ``factors``: - - This is a comma-separated list of factors to use in calculating the - strength of a password. Each element in the list is either the name - of a known factor or a symbol-spec as defined by the `asset module - `_. See - ``passwordmeter.DEFAULT_FACTORS`` for the default list of factors - (and their names). - - For example, to use only the 'length' factor and a custom factor: - - .. code-block:: python - - import passwordmeter - - class SillyFactor(passwordmeter.Factor): - category = 'silly' - def test(self, value, extra): - if value == 'silly': - return (0, 'That is a silly password!') - return (1, None) - - meter = passwordmeter.Meter( - settings=dict(factors=['length', SillyFactor])) - - # or, same thing, but using an asset-spec: - - meter = passwordmeter.Meter( - settings=dict(factors='length,mypackage.SillyFactor')) - -* ``factor.{NAME}.{ATTRIBUTE}``: - - Set a factor's attribute during initialization. If a setting in the - form ``factor.{NAME}.class`` is specified for a factor not listed in - the `factors` setting, the factor will be auto-added to the list of - factors. This is the preferred mechanism to add a custom factor to - the default list. - - The following attributes are "special" (all are optional): - - =========================== ================================================ - Attribute Interpretation - =========================== ================================================ - ``factor.{NAME}.class`` Specifies the asset-spec for the factory that - can generate a Factor of this type. - ``factor.{NAME}.weight`` Specifies the relative weight of this factor - (default: 1). - ``factor.{NAME}.skew`` Adds the specified amount to factor score - (default: 0). - ``factor.{NAME}.spread`` Multiplies the factor score by the specified - amount -- similar to `weight`, but is applied - before clipping (default: 1). - ``factor.{NAME}.clipmin`` Force a minimum score for this factor - (default: 0). - ``factor.{NAME}.clipmax`` Force a maximum score for this factor - (default: 1.3). - ``factor.{NAME}.category`` Override the default improvement category. - =========================== ================================================ - - The following example settings in an INI file will give the `length` - factor additional weight as well as adding the "mypkg.MyFactor" - custom factor (initialized with the parameter `msg` set to - ``'abort'``) to the meter's list: - - .. code-block:: ini - - factor.length.weight = 2.5 - factor.cust.class = mypkg.MyFactor - factor.cust.msg = abort - -* ``pessimism``: - - The password strength engine weights low scores higher than high - scores. The degree to which the engine weights low scores is set by - the `pessimism` setting, which defaults to 10 -- the higher, the - more a low score will pull the average score down. For example, with - the default pessimism of 10, the two scores 0.75 and 0.25 will be - averaged to 0.4 (instead of the true average of 0.5). - -* ``threshold``: - - Specifies the maximum score for which improvement messages should be - returned. If not specified, all possible improvements will be - returned, even if the relevant factor returned a perfect score (1.0 - or greater). - - -Custom Factors -============== - -A custom factor should subclass `passwordmeter.Factor`, implement the -`test` method, and have a unique `category` (string) attribute. - -The `test` method takes two parameters: the `value` to be tested, and -an opaque `extra` parameter that is supplied by the calling -application (and can be ignored if not needed). It should return a -tuple of (float, str). - -The first element (float) of the return tuple must be greater or equal -to zero. Although it should generally not be greater than 1.0, a -factor *may* return a greater value: this is used to artificially -boost the strength of the total outcome relative to the other factors -if applicable. Note, however, that the Meter class will always clip -the final outcome to the inclusive range [0, 1]. - -The second element of the return tuple should be a string, which is a -description of how to improve the provided password. This string can -be ``None`` if no known way exists to improve this password for this -specific factor. Note that Meter class will associate this description -with the factor's category in the final outcome. - - diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/METADATA b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/METADATA deleted file mode 100644 index 7569e05..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/METADATA +++ /dev/null @@ -1,217 +0,0 @@ -Metadata-Version: 2.0 -Name: passwordmeter -Version: 0.1.8 -Summary: A password strength measuring library. -Home-page: http://github.com/cadithealth/passwordmeter -Author: Philip J Grabner, Cadit Health Inc -Author-email: oss@cadit.com -License: MIT (http://opensource.org/licenses/MIT) -Keywords: password strength checker meter -Platform: any -Classifier: Development Status :: 1 - Planning -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Operating System :: OS Independent -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: MIT License -Classifier: License :: Public Domain -Requires-Dist: asset (>=0.6.3) - -======================= -Password Strength Meter -======================= - -A configurable, extensible password strength measuring library. - - -Project -======= - -* Homepage: https://github.com/cadithealth/passwordmeter -* Bugs: https://github.com/cadithealth/passwordmeter/issues - - -TL;DR -===== - -Install: - -.. code-block:: bash - - $ pip install passwordmeter - -Use from within an application with the default factors: - -.. code-block:: python - - import passwordmeter - - strength, improvements = passwordmeter.test(sys.argv[1]) - - if strength < 0.5: - print 'Your password is too weak.' - -Use on the command line: - -.. code-block:: bash - - $ pwm 'password' - Password strength: 0.132549901057 (Extremely weak) - Possible improvements: - - Use a good mix of numbers, letters, and symbols - - Avoid using one of the ten thousand most common passwords - - Use a good mix of UPPER case and lower case letters - - -Overview -======== - -The main function provided by the `passwordmeter` package is the -``Meter.test()`` method, which returns a tuple of (float, dict). The -float is the strength of the password in the range 0 to 1 (inclusive), -where 0 is extremely weak and 1 is extremely strong. The second -parameter, which may be ``None``, is a dictionary of ways the password -could be improved. The keys of the dict are general "categories" of -ways to improve the password (e.g. "length") that are fixed strings, -and the values are internationalizable strings that are human-friendly -descriptions and possibly tailored to the specific password. - -A password's strength is determined by doing a weighted, skewed, -curved average of a set of "factors". The `Meter` constructor takes a -`settings` dictionary that configures, customizes, and/or supplements -the default set of factors. - -The `passwordmeter.test` is a helper function that simply uses the -default settings to test the strength of a password, and is -effectively a shorthand for ``Meter().test(...)``. - -For example, to use a custom selection of factors: - -.. code-block:: python - - import passwordmeter - - # use only the 'length' and 'charmix' factors - meter = passwordmeter.Meter(settings=dict(factors='length,charmix')) - - strength, improvements = meter.test('s3cr3t p4ssW0RD!') - - -Settings -======== - -The `settings` attribute to the `Meter` constructor is a dictionary -with the following keys: - -* ``factors``: - - This is a comma-separated list of factors to use in calculating the - strength of a password. Each element in the list is either the name - of a known factor or a symbol-spec as defined by the `asset module - `_. See - ``passwordmeter.DEFAULT_FACTORS`` for the default list of factors - (and their names). - - For example, to use only the 'length' factor and a custom factor: - - .. code-block:: python - - import passwordmeter - - class SillyFactor(passwordmeter.Factor): - category = 'silly' - def test(self, value, extra): - if value == 'silly': - return (0, 'That is a silly password!') - return (1, None) - - meter = passwordmeter.Meter( - settings=dict(factors=['length', SillyFactor])) - - # or, same thing, but using an asset-spec: - - meter = passwordmeter.Meter( - settings=dict(factors='length,mypackage.SillyFactor')) - -* ``factor.{NAME}.{ATTRIBUTE}``: - - Set a factor's attribute during initialization. If a setting in the - form ``factor.{NAME}.class`` is specified for a factor not listed in - the `factors` setting, the factor will be auto-added to the list of - factors. This is the preferred mechanism to add a custom factor to - the default list. - - The following attributes are "special" (all are optional): - - =========================== ================================================ - Attribute Interpretation - =========================== ================================================ - ``factor.{NAME}.class`` Specifies the asset-spec for the factory that - can generate a Factor of this type. - ``factor.{NAME}.weight`` Specifies the relative weight of this factor - (default: 1). - ``factor.{NAME}.skew`` Adds the specified amount to factor score - (default: 0). - ``factor.{NAME}.spread`` Multiplies the factor score by the specified - amount -- similar to `weight`, but is applied - before clipping (default: 1). - ``factor.{NAME}.clipmin`` Force a minimum score for this factor - (default: 0). - ``factor.{NAME}.clipmax`` Force a maximum score for this factor - (default: 1.3). - ``factor.{NAME}.category`` Override the default improvement category. - =========================== ================================================ - - The following example settings in an INI file will give the `length` - factor additional weight as well as adding the "mypkg.MyFactor" - custom factor (initialized with the parameter `msg` set to - ``'abort'``) to the meter's list: - - .. code-block:: ini - - factor.length.weight = 2.5 - factor.cust.class = mypkg.MyFactor - factor.cust.msg = abort - -* ``pessimism``: - - The password strength engine weights low scores higher than high - scores. The degree to which the engine weights low scores is set by - the `pessimism` setting, which defaults to 10 -- the higher, the - more a low score will pull the average score down. For example, with - the default pessimism of 10, the two scores 0.75 and 0.25 will be - averaged to 0.4 (instead of the true average of 0.5). - -* ``threshold``: - - Specifies the maximum score for which improvement messages should be - returned. If not specified, all possible improvements will be - returned, even if the relevant factor returned a perfect score (1.0 - or greater). - - -Custom Factors -============== - -A custom factor should subclass `passwordmeter.Factor`, implement the -`test` method, and have a unique `category` (string) attribute. - -The `test` method takes two parameters: the `value` to be tested, and -an opaque `extra` parameter that is supplied by the calling -application (and can be ignored if not needed). It should return a -tuple of (float, str). - -The first element (float) of the return tuple must be greater or equal -to zero. Although it should generally not be greater than 1.0, a -factor *may* return a greater value: this is used to artificially -boost the strength of the total outcome relative to the other factors -if applicable. Note, however, that the Meter class will always clip -the final outcome to the inclusive range [0, 1]. - -The second element of the return tuple should be a string, which is a -description of how to improve the provided password. This string can -be ``None`` if no known way exists to improve this password for this -specific factor. Note that Meter class will associate this description -with the factor's category in the final outcome. - - diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/RECORD b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/RECORD deleted file mode 100644 index ee724fe..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/RECORD +++ /dev/null @@ -1,19 +0,0 @@ -passwordmeter/__init__.py,sha256=_Ba7REIqjA-Lg8mEMPZNzoaqgGh0zTsEBuiEeGEAR-M,9129 -passwordmeter/cli.py,sha256=OvliHWJh9_y0Gc-OuFduHtds5yI6y9uAqvkDIuYq5uk,3002 -passwordmeter/i18n.py,sha256=IO1MKnz2WVBCxNt8ohBLJcJUIPBv72unC1JUjO3LpQY,733 -passwordmeter/test_passwordmeter.py,sha256=QZblzwiqmiO-d2uvWCgGoMNaB9kxBWzVmeP95OOQmFM,3448 -passwordmeter/res/common.txt,sha256=Sts_CvtKEM8Z6-SNjGmkb5NLvI13xpTCEFZPlYPn9Lo,73017 -passwordmeter-0.1.8.dist-info/DESCRIPTION.rst,sha256=kvSLnJKds2J55_X8bEemX6qngJYTCGWM0MTzA0ASyWQ,6981 -passwordmeter-0.1.8.dist-info/METADATA,sha256=GFx97WTxAevnoBf2bA1dutIG4_0ZMsL1Q2DlAJ2LUyk,7659 -passwordmeter-0.1.8.dist-info/RECORD,, -passwordmeter-0.1.8.dist-info/WHEEL,sha256=0mO7-aKM6K9CHeURc5NDYZyLWH5lmR-r4TtPinHxz7Y,93 -passwordmeter-0.1.8.dist-info/entry_points.txt,sha256=SXmghp-K1pfeKKaDlsEr_69yqqSR3jb8oDoNVrwsEdo,48 -passwordmeter-0.1.8.dist-info/metadata.json,sha256=ZwGYUVwDa9_-ilLipYSkqklPmvhjDf86Lkqg0L2QrSY,1114 -passwordmeter-0.1.8.dist-info/top_level.txt,sha256=ABWg9PxleX6y9lxgfOovYg9CNH66dESJbvgs15Rp3f4,14 -passwordmeter-0.1.8.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1 -../../../bin/pwm,sha256=iDc_2RpdNm1VZYihokUjzOV654kcNTMI7TU5G4Y-Wbo,258 -passwordmeter-0.1.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -passwordmeter/__pycache__/__init__.cpython-36.pyc,, -passwordmeter/__pycache__/test_passwordmeter.cpython-36.pyc,, -passwordmeter/__pycache__/i18n.cpython-36.pyc,, -passwordmeter/__pycache__/cli.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/WHEEL b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/WHEEL deleted file mode 100644 index 7981024..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.30.0) -Root-Is-Purelib: true -Tag: cp36-none-any - diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/entry_points.txt b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/entry_points.txt deleted file mode 100644 index 9b202cd..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/entry_points.txt +++ /dev/null @@ -1,3 +0,0 @@ -[console_scripts] -pwm = passwordmeter.cli:main - diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/metadata.json b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/metadata.json deleted file mode 100644 index f460370..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 1 - Planning", "Intended Audience :: Developers", "Programming Language :: Python", "Operating System :: OS Independent", "Natural Language :: English", "License :: OSI Approved :: MIT License", "License :: Public Domain"], "extensions": {"python.commands": {"wrap_console": {"pwm": "passwordmeter.cli:main"}}, "python.details": {"contacts": [{"email": "oss@cadit.com", "name": "Philip J Grabner, Cadit Health Inc", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://github.com/cadithealth/passwordmeter"}}, "python.exports": {"console_scripts": {"pwm": "passwordmeter.cli:main"}}}, "extras": [], "generator": "bdist_wheel (0.30.0)", "keywords": ["password", "strength", "checker", "meter"], "license": "MIT (http://opensource.org/licenses/MIT)", "metadata_version": "2.0", "name": "passwordmeter", "platform": "any", "run_requires": [{"requires": ["asset (>=0.6.3)"]}], "summary": "A password strength measuring library.", "test_requires": [{"requires": ["coverage (>=3.5.3)", "nose (>=1.3.0)"]}], "version": "0.1.8"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/top_level.txt deleted file mode 100644 index 75598ee..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -passwordmeter diff --git a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/zip-safe b/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter-0.1.8.dist-info/zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/passwordmeter/__init__.py b/venv/lib/python3.6/site-packages/passwordmeter/__init__.py deleted file mode 100644 index f2fd234..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter/__init__.py +++ /dev/null @@ -1,247 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: Philip J Grabner -# date: 2013/10/26 -# copy: (C) Copyright 2013 Cadit Health Inc., All Rights Reserved. -#------------------------------------------------------------------------------ - -import re -import asset -import pkg_resources - -from .i18n import _ - -#------------------------------------------------------------------------------ -DEFAULT_INFLECT = 0.75 -DEFAULT_WEIGHT = 1.0 -DEFAULT_CLIPMIN = 0 -DEFAULT_CLIPMAX = 1.3 -DEFAULT_SKEW = 0 -DEFAULT_SPREAD = 1.0 -DEFAULT_FACTORS = 'length,charmix,variety,casemix,notword,phrase' - -#------------------------------------------------------------------------------ -common10k = frozenset( - asset.load('passwordmeter:res/common.txt').read().decode().split('\n')) - -#------------------------------------------------------------------------------ -def asym(value, target, switch=DEFAULT_INFLECT): - if value >= target: - return 1 - ( ( 1 - switch ) * target / value ) - return switch * value / target - -#------------------------------------------------------------------------------ -def curve(value, offset=0.05): - if value < 0: - value = 0 - return 1.0 / ( offset + value ) - -#------------------------------------------------------------------------------ -def curveavg(values): - score = 0 - weight = 0 - for v in values: - w = curve(v) - score += v * w - weight += w - return score / weight - -#------------------------------------------------------------------------------ -class Factor(object): - def __init__(self, weight=DEFAULT_WEIGHT, - clipmin=DEFAULT_CLIPMIN, clipmax=DEFAULT_CLIPMAX, - skew=DEFAULT_SKEW, spread=DEFAULT_SPREAD, - category=None, - ): - self.weight = float(weight) - self.clipmin = float(clipmin) - self.clipmax = float(clipmax) - self.skew = float(skew) - self.spread = float(spread) - if category is not None: - self.category = category - def test(self, value, extra): - raise NotImplementedError() - def adjust(self, value): - value = self.skew + self.spread * value - if value < self.clipmin: - value = self.clipmin - if value > self.clipmax: - value = self.clipmax - return value, self.weight - -#------------------------------------------------------------------------------ -class LengthFactor(Factor): - category = 'length' - def __init__(self, target=8, *args, **kw): - super(LengthFactor, self).__init__(*args, **kw) - self.target = int(target) - def test(self, value, extra): - value = len(value) - return (asym(value, self.target), _('Increase the length of the password')) - -#------------------------------------------------------------------------------ -class CharmixFactor(Factor): - category = 'charmix' - matchers = ( - re.compile('[a-zA-Z]'), # alpha / TODO: what about non-ascii letters? - re.compile('[0-9]'), # numeric - re.compile('[^a-zA-Z0-9]'), # symbols - ) - message = 'Use a good mix of numbers, letters, and symbols' - def test(self, value, extra): - if not self.matchers: - return 1.0 - scores = [len(matcher.findall(value)) for matcher in self.matchers] - target = max(1, 0.25 * sum(scores) / len(scores)) - scores = [asym(score, target) * 1 / DEFAULT_INFLECT for score in scores] - return (curveavg(scores), _(self.message)) - -#------------------------------------------------------------------------------ -class CasemixFactor(CharmixFactor): - category = 'casemix' - matchers = ( - re.compile('[a-z]'), - re.compile('[A-Z]'), - ) - message = 'Use a good mix of UPPER case and lower case letters' - -#------------------------------------------------------------------------------ -class VarietyFactor(Factor): - category = 'variety' - def test(self, value, extra): - diff = 1.0 - same = 0.0 - for idx in range(1, len(value)): - if value[idx] == value[idx - 1]: - same += 1 - else: - diff += 1 - score = curveavg([ - len(set(value)) / max(1, float(len(value))), - diff / (diff + same ** 1.5)]) - return (score, _('Minimize character duplicates and repetitions')) - -#------------------------------------------------------------------------------ -class NotWordFactor(Factor): - category = 'notword' - def test(self, value, extra): - if value.lower() in common10k: - return (0, _('Avoid using one of the ten thousand most common passwords')) - # TODO: check against dictionary words too... maybe use ispell? - # http://code.activestate.com/recipes/117221-spell-checking/ - # todo: check for 'l33t-speak'... - return (1.0, None) - -#------------------------------------------------------------------------------ -class PhraseFactor(Factor): - category = 'phrase' - base = 0.65 - message = 'Passphrases (e.g. an obfuscated sentence) are better than passwords' - def test(self, value, extra): - # todo: this might be improved... for example, i should: - # - value words of different lengths (large distribution) -- check stddev - # - check the likelihood that the elements are in fact words - wlens = [len(s) for s in value.split()] - if not wlens: - return (0, _(self.message)) - score = asym(len(wlens), 4, switch=self.base) - spread = max(wlens) - min(wlens) - if spread <= 0: - score = self.base - else: - score *= asym(spread, 4, switch=self.base) - score = self.base * ( 1 + score ) - return (score, _(self.message)) - -#------------------------------------------------------------------------------ -class Meter(object): - - #---------------------------------------------------------------------------- - def __init__(self, settings=None): - if settings is None: - settings = dict() - self.threshold = float(settings.get('threshold', DEFAULT_INFLECT)) - factors = settings.get('factors') or DEFAULT_FACTORS - if asset.isstr(factors): - factors = [s.strip() for s in factors.split(',')] - for key in settings.keys(): - key = key.split('.') - if len(key) >= 3 \ - and key[0] == 'factor' and key[2] == 'class' \ - and key[1] not in factors: - factors.append(key[1]) - self.factors = [self._load(factor, settings) for factor in factors] - self.logger = asset.symbol(settings.get('logger')) - self.pessimism = 1.0 / float(settings.get('pessimism', 10)) - - #---------------------------------------------------------------------------- - def _load(self, factor, settings): - predef = { - 'length' : LengthFactor, - 'charmix' : CharmixFactor, - 'casemix' : CasemixFactor, - 'variety' : VarietyFactor, - 'notword' : NotWordFactor, - 'phrase' : PhraseFactor, - } - params = dict() - if asset.isstr(factor): - for key, value in settings.items(): - if key.startswith('factor.' + factor + '.'): - params[key[len(factor) + 8:]] = value - factor = params.pop('class', factor) - if factor in predef: - return predef[factor](**params) - return asset.symbol(factor)(**params) - - #---------------------------------------------------------------------------- - def test(self, value, extra=None): - ''' - Tests the supplied `value` for general characteristics of a good - password. Returns a tuple of (float, dict), where float is a - quotient in the range [0, 1] representing very weak to very strong - passwords. dict, which may be None, is a list of known ways that - the password can be improved, where the key is a fixed value (from - the list below or from the settings in the constructor) and the - value is a human-readable (potentially internationalized) string. - - The optional parameter `extra` can be any kind of object that is - passed through unaltered to all factors contributing to this - meter. This is primarily for custom :class:`Factor` - implementations that need extra information -- it is not used by - any of the standard factors. - ''' - score = 0 - weight = 0 - morelist = [] - for factor in self.factors: - result = factor.test(value, extra) - scr, wgt = factor.adjust(result[0]) - crv = curve(scr, offset=self.pessimism) - if self.logger: - self.logger.debug( - 'factor %s: score=%f, base-weight=%f, curve-weight=%f', - factor.category, scr, wgt, crv) - wgt *= crv - score += scr * wgt - weight += wgt - if result[1]: - morelist.append((scr, factor, result[1])) - score = max(0, min(1, score / weight)) - more = dict() - if score < 1.0: - # todo: this should be a slightly more intelligent selection process - for scur, factor, reason in morelist: - if scur < self.threshold: - more[factor.category] = reason - return (score, more) - -#------------------------------------------------------------------------------ -def test(value, extra=None): - return Meter().test(value, extra=extra) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/passwordmeter/cli.py b/venv/lib/python3.6/site-packages/passwordmeter/cli.py deleted file mode 100644 index 4a11eb6..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter/cli.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: Philip J Grabner -# date: 2013/10/26 -# copy: (C) Copyright 2013 Cadit Health Inc., All Rights Reserved. -#------------------------------------------------------------------------------ - -from __future__ import print_function - -import sys -import argparse -import getpass - -from .__init__ import Meter -from .i18n import _ - -ratings = ( - 'Infinitely weak', - 'Extremely weak', - 'Very weak', - 'Weak', - 'Moderately strong', - 'Strong', - 'Very strong', -) - -#------------------------------------------------------------------------------ -def main(argv=None): - - cli = argparse.ArgumentParser( - description = _( - 'Password strength meter - gives a coefficient of how strong' - ' a password is (0 = extremely weak, 1 = extremely strong)' - ' and lists ways that a password can be improved.') - ) - - cli.add_argument( - _('-v'), _('--verbose'), - dest='verbose', default=0, action='count', - help=_('enable verbose output to STDERR (for per-factor scoring)')) - - cli.add_argument( - _('-i'), _('--ini'), metavar=_('FILENAME'), - dest='inifile', default=None, - help=_('INI settings filename')) - - cli.add_argument( - _('-s'), _('--setting'), metavar=_('NAME=VALUE'), - dest='settings', default=[], action='append', - help=_('override a specific setting')) - - cli.add_argument( - _('-m'), _('--minimum'), metavar=_('FLOAT'), - dest='minimum', default=0.75, type=float, - help=_('minimum password strength for %(prog)s to return' - ' a success status (default: %(default)s)')) - - cli.add_argument( - 'password', metavar=_('PASSWORD'), nargs='?', - help=_('password to test; if exactly "-", the password is read from' - ' STDIN and if not specified, it will be prompted for')) - - options = cli.parse_args(args=argv) - - settings = dict() - # todo: load ini file... - settings.update(dict([s.split('=', 1) for s in options.settings])) - - if options.password == '-': - options.password = sys.stdin.read() - elif options.password is None: - options.password = getpass.getpass() - - if options.verbose: - # todo: use `logging`?... - class mylogger(object): - def debug(self, msg, *args, **kw): - if args: - msg = msg % args - sys.stderr.write(msg + '\n') - settings['logger'] = mylogger() - - meter = Meter(settings=settings) - result = meter.test(options.password) - - print('Password strength: {} ({})'.format( - result[0], - _(ratings[min(len(ratings) - 1, int(result[0] * len(ratings)))]) - )) - - if result[1]: - print('Possible improvements:') - for item in result[1].values(): - print(' -',item) - - if result[0] >= options.minimum: - return 0 - return 100 + int(round(result[0] * 100)) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/passwordmeter/i18n.py b/venv/lib/python3.6/site-packages/passwordmeter/i18n.py deleted file mode 100644 index 100a712..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter/i18n.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: Philip J Grabner -# date: 2013/10/26 -# copy: (C) Copyright 2013 Cadit Health Inc., All Rights Reserved. -#------------------------------------------------------------------------------ - -from gettext import gettext - -#------------------------------------------------------------------------------ -def _(message, *args, **kw): - if args or kw: - return gettext(message).format(*args, **kw) - return gettext(message) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/passwordmeter/res/common.txt b/venv/lib/python3.6/site-packages/passwordmeter/res/common.txt deleted file mode 100644 index c03abe8..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter/res/common.txt +++ /dev/null @@ -1,10000 +0,0 @@ -password -123456 -12345678 -1234 -qwerty -12345 -dragon -pussy -baseball -football -letmein -monkey -696969 -abc123 -mustang -michael -shadow -master -jennifer -111111 -2000 -jordan -superman -harley -1234567 -fuckme -hunter -fuckyou -trustno1 -ranger -buster -thomas -tigger -robert -soccer -fuck -batman -test -pass -killer -hockey -george -charlie -andrew -michelle -love -sunshine -jessica -asshole -6969 -pepper -daniel -access -123456789 -654321 -joshua -maggie -starwars -silver -william -dallas -yankees -123123 -ashley -666666 -hello -amanda -orange -biteme -freedom -computer -sexy -thunder -nicole -ginger -heather -hammer -summer -corvette -taylor -fucker -austin -1111 -merlin -matthew -121212 -golfer -cheese -princess -martin -chelsea -patrick -richard -diamond -yellow -bigdog -secret -asdfgh -sparky -cowboy -camaro -anthony -matrix -falcon -iloveyou -bailey -guitar -jackson -purple -scooter -phoenix -aaaaaa -morgan -tigers -porsche -mickey -maverick -cookie -nascar -peanut -justin -131313 -money -horny -samantha -panties -steelers -joseph -snoopy -boomer -whatever -iceman -smokey -gateway -dakota -cowboys -eagles -chicken -dick -black -zxcvbn -please -andrea -ferrari -knight -hardcore -melissa -compaq -coffee -booboo -bitch -johnny -bulldog -xxxxxx -welcome -james -player -ncc1701 -wizard -scooby -charles -junior -internet -bigdick -mike -brandy -tennis -blowjob -banana -monster -spider -lakers -miller -rabbit -enter -mercedes -brandon -steven -fender -john -yamaha -diablo -chris -boston -tiger -marine -chicago -rangers -gandalf -winter -bigtits -barney -edward -raiders -porn -badboy -blowme -spanky -bigdaddy -johnson -chester -london -midnight -blue -fishing -000000 -hannah -slayer -11111111 -rachel -sexsex -redsox -thx1138 -asdf -marlboro -panther -zxcvbnm -arsenal -oliver -qazwsx -mother -victoria -7777777 -jasper -angel -david -winner -crystal -golden -butthead -viking -jack -iwantu -shannon -murphy -angels -prince -cameron -girls -madison -wilson -carlos -hooters -willie -startrek -captain -maddog -jasmine -butter -booger -angela -golf -lauren -rocket -tiffany -theman -dennis -liverpoo -flower -forever -green -jackie -muffin -turtle -sophie -danielle -redskins -toyota -jason -sierra -winston -debbie -giants -packers -newyork -jeremy -casper -bubba -112233 -sandra -lovers -mountain -united -cooper -driver -tucker -helpme -fucking -pookie -lucky -maxwell -8675309 -bear -suckit -gators -5150 -222222 -shithead -fuckoff -jaguar -monica -fred -happy -hotdog -tits -gemini -lover -xxxxxxxx -777777 -canada -nathan -victor -florida -88888888 -nicholas -rosebud -metallic -doctor -trouble -success -stupid -tomcat -warrior -peaches -apples -fish -qwertyui -magic -buddy -dolphins -rainbow -gunner -987654 -freddy -alexis -braves -cock -2112 -1212 -cocacola -xavier -dolphin -testing -bond007 -member -calvin -voodoo -7777 -samson -alex -apollo -fire -tester -walter -beavis -voyager -peter -porno -bonnie -rush2112 -beer -apple -scorpio -jonathan -skippy -sydney -scott -red123 -power -gordon -travis -beaver -star -jackass -flyers -boobs -232323 -zzzzzz -steve -rebecca -scorpion -doggie -legend -ou812 -yankee -blazer -bill -runner -birdie -bitches -555555 -parker -topgun -asdfasdf -heaven -viper -animal -2222 -bigboy -4444 -arthur -baby -private -godzilla -donald -williams -lifehack -phantom -dave -rock -august -sammy -cool -brian -platinum -jake -bronco -paul -mark -frank -heka6w2 -copper -billy -cumshot -garfield -willow -cunt -little -carter -slut -albert -69696969 -kitten -super -jordan23 -eagle1 -shelby -america -11111 -jessie -house -free -123321 -chevy -bullshit -white -broncos -horney -surfer -nissan -999999 -saturn -airborne -elephant -marvin -shit -action -adidas -qwert -kevin -1313 -explorer -walker -police -christin -december -benjamin -wolf -sweet -therock -king -online -dickhead -brooklyn -teresa -cricket -sharon -dexter -racing -penis -gregory -0000 -teens -redwings -dreams -michigan -hentai -magnum -87654321 -nothing -donkey -trinity -digital -333333 -stella -cartman -guinness -123abc -speedy -buffalo -kitty -pimpin -eagle -einstein -kelly -nelson -nirvana -vampire -xxxx -playboy -louise -pumpkin -snowball -test123 -girl -sucker -mexico -beatles -fantasy -ford -gibson -celtic -marcus -cherry -cassie -888888 -natasha -sniper -chance -genesis -hotrod -reddog -alexande -college -jester -passw0rd -bigcock -smith -lasvegas -carmen -slipknot -3333 -death -kimberly -1q2w3e -eclipse -1q2w3e4r -stanley -samuel -drummer -homer -montana -music -aaaa -spencer -jimmy -carolina -colorado -creative -hello1 -rocky -goober -friday -bollocks -scotty -abcdef -bubbles -hawaii -fluffy -mine -stephen -horses -thumper -5555 -pussies -darkness -asdfghjk -pamela -boobies -buddha -vanessa -sandman -naughty -douglas -honda -matt -azerty -6666 -shorty -money1 -beach -loveme -4321 -simple -poohbear -444444 -badass -destiny -sarah -denise -vikings -lizard -melanie -assman -sabrina -nintendo -water -good -howard -time -123qwe -november -xxxxx -october -leather -bastard -young -101010 -extreme -hard -password1 -vincent -pussy1 -lacrosse -hotmail -spooky -amateur -alaska -badger -paradise -maryjane -poop -crazy -mozart -video -russell -vagina -spitfire -anderson -norman -eric -cherokee -cougar -barbara -long -420420 -family -horse -enigma -allison -raider -brazil -blonde -jones -55555 -dude -drowssap -jeff -school -marshall -lovely -1qaz2wsx -jeffrey -caroline -franklin -booty -molly -snickers -leslie -nipples -courtney -diesel -rocks -eminem -westside -suzuki -daddy -passion -hummer -ladies -zachary -frankie -elvis -reggie -alpha -suckme -simpson -patricia -147147 -pirate -tommy -semperfi -jupiter -redrum -freeuser -wanker -stinky -ducati -paris -natalie -babygirl -bishop -windows -spirit -pantera -monday -patches -brutus -houston -smooth -penguin -marley -forest -cream -212121 -flash -maximus -nipple -bobby -bradley -vision -pokemon -champion -fireman -indian -softball -picard -system -clinton -cobra -enjoy -lucky1 -claire -claudia -boogie -timothy -marines -security -dirty -admin -wildcats -pimp -dancer -hardon -veronica -fucked -abcd1234 -abcdefg -ironman -wolverin -remember -great -freepass -bigred -squirt -justice -francis -hobbes -kermit -pearljam -mercury -domino -9999 -denver -brooke -rascal -hitman -mistress -simon -tony -bbbbbb -friend -peekaboo -naked -budlight -electric -sluts -stargate -saints -bondage -brittany -bigman -zombie -swimming -duke -qwerty1 -babes -scotland -disney -rooster -brenda -mookie -swordfis -candy -duncan -olivia -hunting -blink182 -alicia -8888 -samsung -bubba1 -whore -virginia -general -passport -aaaaaaaa -erotic -liberty -arizona -jesus -abcd -newport -skipper -rolltide -balls -happy1 -galore -christ -weasel -242424 -wombat -digger -classic -bulldogs -poopoo -accord -popcorn -turkey -jenny -amber -bunny -mouse -007007 -titanic -liverpool -dreamer -everton -friends -chevelle -carrie -gabriel -psycho -nemesis -burton -pontiac -connor -eatme -lickme -roland -cumming -mitchell -ireland -lincoln -arnold -spiderma -patriots -goblue -devils -eugene -empire -asdfg -cardinal -brown -shaggy -froggy -qwer -kawasaki -kodiak -people -phpbb -light -54321 -kramer -chopper -hooker -honey -whynot -lesbian -lisa -baxter -adam -snake -teen -ncc1701d -qqqqqq -airplane -britney -avalon -sandy -sugar -sublime -stewart -wildcat -raven -scarface -elizabet -123654 -trucks -wolfpack -pervert -lawrence -raymond -redhead -american -alyssa -bambam -movie -woody -shaved -snowman -tiger1 -chicks -raptor -1969 -stingray -shooter -france -stars -madmax -kristen -sports -jerry -789456 -garcia -simpsons -lights -ryan -looking -chronic -alison -hahaha -packard -hendrix -perfect -service -spring -srinivas -spike -katie -252525 -oscar -brother -bigmac -suck -single -cannon -georgia -popeye -tattoo -texas -party -bullet -taurus -sailor -wolves -panthers -japan -strike -flowers -pussycat -chris1 -loverboy -berlin -sticky -marina -tarheels -fisher -russia -connie -wolfgang -testtest -mature -bass -catch22 -juice -michael1 -nigger -159753 -women -alpha1 -trooper -hawkeye -head -freaky -dodgers -pakistan -machine -pyramid -vegeta -katana -moose -tinker -coyote -infinity -inside -pepsi -letmein1 -bang -control -hercules -morris -james1 -tickle -outlaw -browns -billybob -pickle -test1 -michele -antonio -sucks -pavilion -changeme -caesar -prelude -tanner -adrian -darkside -bowling -wutang -sunset -robbie -alabama -danger -zeppelin -juan -rusty -pppppp -nick -2001 -ping -darkstar -madonna -qwe123 -bigone -casino -cheryl -charlie1 -mmmmmm -integra -wrangler -apache -tweety -qwerty12 -bobafett -simone -none -business -sterling -trevor -transam -dustin -harvey -england -2323 -seattle -ssssss -rose -harry -openup -pandora -pussys -trucker -wallace -indigo -storm -malibu -weed -review -babydoll -doggy -dilbert -pegasus -joker -catfish -flipper -valerie -herman -fuckit -detroit -kenneth -cheyenne -bruins -stacey -smoke -joey -seven -marino -fetish -xfiles -wonder -stinger -pizza -babe -pretty -stealth -manutd -gracie -gundam -cessna -longhorn -presario -mnbvcxz -wicked -mustang1 -victory -21122112 -shelly -awesome -athena -q1w2e3r4 -help -holiday -knicks -street -redneck -12341234 -casey -gizmo -scully -dragon1 -devildog -triumph -eddie -bluebird -shotgun -peewee -ronnie -angel1 -daisy -special -metallica -madman -country -impala -lennon -roscoe -omega -access14 -enterpri -miranda -search -smitty -blizzard -unicorn -tight -rick -ronald -asdf1234 -harrison -trigger -truck -danny -home -winnie -beauty -thailand -1234567890 -cadillac -castle -tyler -bobcat -buddy1 -sunny -stones -asian -freddie -chuck -butt -loveyou -norton -hellfire -hotsex -indiana -short -panzer -lonewolf -trumpet -colors -blaster -12121212 -fireball -logan -precious -aaron -elaine -jungle -atlanta -gold -corona -curtis -nikki -polaris -timber -theone -baller -chipper -orlando -island -skyline -dragons -dogs -benson -licker -goldie -engineer -kong -pencil -basketba -open -hornet -world -linda -barbie -chan -farmer -valentin -wetpussy -indians -larry -redman -foobar -travel -morpheus -bernie -target -141414 -hotstuff -photos -laura -savage -holly -rocky1 -fuck_inside -dollar -turbo -design -newton -hottie -moon -202020 -blondes -4128 -lestat -avatar -future -goforit -random -abgrtyu -jjjjjj -cancer -q1w2e3 -smiley -goldberg -express -virgin -zipper -wrinkle1 -stone -andy -babylon -dong -powers -consumer -dudley -monkey1 -serenity -samurai -99999999 -bigboobs -skeeter -lindsay -joejoe -master1 -aaaaa -chocolat -christia -birthday -stephani -tang -1234qwer -alfred -ball -98765432 -maria -sexual -maxima -77777777 -sampson -buckeye -highland -kristin -seminole -reaper -bassman -nugget -lucifer -airforce -nasty -watson -warlock -2121 -philip -always -dodge -chrissy -burger -bird -snatch -missy -pink -gang -maddie -holmes -huskers -piglet -photo -joanne -hamilton -dodger -paladin -christy -chubby -buckeyes -hamlet -abcdefgh -bigfoot -sunday -manson -goldfish -garden -deftones -icecream -blondie -spartan -julie -harold -charger -brandi -stormy -sherry -pleasure -juventus -rodney -galaxy -holland -escort -zxcvb -planet -jerome -wesley -blues -song -peace -david1 -ncc1701e -1966 -51505150 -cavalier -gambit -karen -sidney -ripper -oicu812 -jamie -sister -marie -martha -nylons -aardvark -nadine -minnie -whiskey -bing -plastic -anal -babylon5 -chang -savannah -loser -racecar -insane -yankees1 -mememe -hansolo -chiefs -fredfred -freak -frog -salmon -concrete -yvonne -zxcv -shamrock -atlantis -warren -wordpass -julian -mariah -rommel -1010 -harris -predator -sylvia -massive -cats -sammy1 -mister -stud -marathon -rubber -ding -trunks -desire -montreal -justme -faster -kathleen -irish -1999 -bertha -jessica1 -alpine -sammie -diamonds -tristan -00000 -swinger -shan -stallion -pitbull -letmein2 -roberto -ready -april -palmer -ming -shadow1 -audrey -chong -clitoris -wang -shirley -fuckers -jackoff -bluesky -sundance -renegade -hollywoo -151515 -bernard -wolfman -soldier -picture -pierre -ling -goddess -manager -nikita -sweety -titans -hang -fang -ficken -niners -bottom -bubble -hello123 -ibanez -webster -sweetpea -stocking -323232 -tornado -lindsey -content -bruce -buck -aragorn -griffin -chen -campbell -trojan -christop -newman -wayne -tina -rockstar -father -geronimo -pascal -crimson -brooks -hector -penny -anna -google -camera -chandler -fatcat -lovelove -cody -cunts -waters -stimpy -finger -cindy -wheels -viper1 -latin -robin -greenday -987654321 -creampie -brendan -hiphop -willy -snapper -funtime -duck -trombone -adult -cotton -cookies -kaiser -mulder -westham -latino -jeep -ravens -aurora -drizzt -madness -energy -kinky -314159 -sophia -stefan -slick -rocker -55555555 -freeman -french -mongoose -speed -dddddd -hong -henry -hungry -yang -catdog -cheng -ghost -gogogo -randy -tottenha -curious -butterfl -mission -january -singer -sherman -shark -techno -lancer -lalala -autumn -chichi -orion -trixie -clifford -delta -bobbob -bomber -holden -kang -kiss -1968 -spunky -liquid -mary -beagle -granny -network -bond -kkkkkk -millie -1973 -biggie -beetle -teacher -susan -toronto -anakin -genius -dream -cocks -dang -bush -karate -snakes -bangkok -callie -fuckyou2 -pacific -daytona -kelsey -infantry -skywalke -foster -felix -sailing -raistlin -vanhalen -huang -herbert -jacob -blackie -tarzan -strider -sherlock -lang -gong -sang -dietcoke -ultimate -tree -shai -sprite -ting -artist -chai -chao -devil -python -ninja -misty -ytrewq -sweetie -superfly -456789 -tian -jing -jesus1 -freedom1 -dian -drpepper -potter -chou -darren -hobbit -violet -yong -shen -phillip -maurice -gloria -nolimit -mylove -biscuit -yahoo -shasta -sex4me -smoker -smile -pebbles -pics -philly -tong -tintin -lesbians -marlin -cactus -frank1 -tttttt -chun -danni -emerald -showme -pirates -lian -dogg -colleen -xiao -xian -tazman -tanker -patton -toshiba -richie -alberto -gotcha -graham -dillon -rang -emily -keng -jazz -bigguy -yuan -woman -tomtom -marion -greg -chaos -fossil -flight -racerx -tuan -creamy -boss -bobo -musicman -warcraft -window -blade -shuang -sheila -shun -lick -jian -microsoft -rong -allen -feng -getsome -sally -quality -kennedy -morrison -1977 -beng -wwwwww -yoyoyo -zhang -seng -teddy -joanna -andreas -harder -luke -qazxsw -qian -cong -chuan -deng -nang -boeing -keeper -western -isabelle -1963 -subaru -sheng -thuglife -teng -jiong -miao -martina -mang -maniac -pussie -tracey -a1b2c3 -clayton -zhou -zhuang -xing -stonecol -snow -spyder -liang -jiang -memphis -regina -ceng -magic1 -logitech -chuang -dark -million -blow -sesame -shao -poison -titty -terry -kuan -kuai -kyle -mian -guan -hamster -guai -ferret -florence -geng -duan -pang -maiden -quan -velvet -nong -neng -nookie -buttons -bian -bingo -biao -zhong -zeng -xiong -zhun -ying -zong -xuan -zang -0.0.000 -suan -shei -shui -sharks -shang -shua -small -peng -pian -piao -liao -meng -miami -reng -guang -cang -change -ruan -diao -luan -lucas -qing -chui -chuo -cuan -nuan -ning -heng -huan -kansas -muscle -monroe -weng -whitney -1passwor -bluemoon -zhui -zhua -xiang -zheng -zhen -zhei -zhao -zhan -yomama -zhai -zhuo -zuan -tarheel -shou -shuo -tiao -lady -leonard -leng -kuang -jiao -13579 -basket -qiao -qiong -qiang -chuai -nian -niao -niang -huai -22222222 -bianca -zhuan -zhuai -shuan -shuai -stardust -jumper -margaret -archie -66666666 -charlott -forget -qwertz -bones -history -milton -waterloo -2002 -stuff -11223344 -office -oldman -preston -trains -murray -vertigo -246810 -black1 -swallow -smiles -standard -alexandr -parrot -luther -user -nicolas -1976 -surfing -pioneer -pete -masters -apple1 -asdasd -auburn -hannibal -frontier -panama -lucy -buffy -brianna -welcome1 -vette -blue22 -shemale -111222 -baggins -groovy -global -turner -181818 -1979 -blades -spanking -life -byteme -lobster -collins -dawg -hilton -japanese -1970 -1964 -2424 -polo -markus -coco -deedee -mikey -1972 -171717 -1701 -strip -jersey -green1 -capital -sasha -sadie -putter -vader -seven7 -lester -marcel -banshee -grendel -gilbert -dicks -dead -hidden -iloveu -1980 -sound -ledzep -michel -147258 -female -bugger -buffett -bryan -hell -kristina -molson -2020 -wookie -sprint -thanks -jericho -102030 -grace -fuckin -mandy -ranger1 -trebor -deepthroat -bonehead -molly1 -mirage -models -1984 -2468 -stuart -showtime -squirrel -pentium -mario -anime -gator -powder -twister -connect -neptune -bruno -butts -engine -eatshit -mustangs -woody1 -shogun -septembe -pooh -jimbo -roger -annie -bacon -center -russian -sabine -damien -mollie -voyeur -2525 -363636 -leonardo -camel -chair -germany -giant -qqqq -nudist -bone -sleepy -tequila -megan -fighter -garrett -dominic -obiwan -makaveli -vacation -walnut -1974 -ladybug -cantona -ccbill -satan -rusty1 -passwor1 -columbia -napoleon -dusty -kissme -motorola -william1 -1967 -zzzz -skater -smut -play -matthew1 -robinson -valley -coolio -dagger -boner -bull -horndog -jason1 -blake -penguins -rescue -griffey -8j4ye3uz -californ -champs -qwertyuiop -portland -queen -colt45 -boat -xxxxxxx -xanadu -tacoma -mason -carpet -gggggg -safety -palace -italia -stevie -picturs -picasso -thongs -tempest -ricardo -roberts -asd123 -hairy -foxtrot -gary -nimrod -hotboy -343434 -1111111 -asdfghjkl -goose -overlord -blood -wood -stranger -454545 -shaolin -sooners -socrates -spiderman -peanuts -maxine -rogers -13131313 -andrew1 -filthy -donnie -ohyeah -africa -national -kenny -keith -monique -intrepid -jasmin -pickles -assass -fright -potato -darwin -hhhhhh -kingdom -weezer -424242 -pepsi1 -throat -romeo -gerard -looker -puppy -butch -monika -suzanne -sweets -temple -laurie -josh -megadeth -analsex -nymets -ddddddd -bigballs -support -stick -today -down -oakland -oooooo -qweasd -chucky -bridge -carrot -chargers -discover -dookie -condor -night -butler -hoover -horny1 -isabella -sunrise -sinner -jojo -megapass -martini -assfuck -grateful -ffffff -abigail -esther -mushroom -janice -jamaica -wright -sims -space -there -timmy -7654321 -77777 -cccccc -gizmodo -roxanne -ralph -tractor -cristina -dance -mypass -hongkong -helena -1975 -blue123 -pissing -thomas1 -redred -rich -basketball -attack -cash -satan666 -drunk -dixie -dublin -bollox -kingkong -katrina -miles -1971 -22222 -272727 -sexx -penelope -thompson -anything -bbbb -battle -grizzly -passat -porter -tracy -defiant -bowler -knickers -monitor -wisdom -wild -slappy -thor -letsgo -robert1 -feet -rush -brownie -hudson -098765 -playing -playtime -lightnin -melvin -atomic -bart -hawk -goku -glory -llllll -qwaszx -cosmos -bosco -knights -bentley -beast -slapshot -lewis -assword -frosty -gillian -sara -dumbass -mallard -dddd -deanna -elwood -wally -159357 -titleist -angelo -aussie -guest -golfing -doobie -loveit -chloe -elliott -werewolf -vipers -janine -1965 -blabla -surf -sucking -tardis -serena -shelley -thegame -legion -rebels -fernando -fast -gerald -sarah1 -double -onelove -loulou -toto -crash -blackcat -0007 -tacobell -soccer1 -jedi -manuel -method -river -chase -ludwig -poopie -derrick -boob -breast -kittycat -isabel -belly -pikachu -thunder1 -thankyou -jose -celeste -celtics -frances -frogger -scoobydo -sabbath -coltrane -budman -willis -jackal -bigger -zzzzz -silvia -sooner -licking -gopher -geheim -lonestar -primus -pooper -newpass -brasil -heather1 -husker -element -moomoo -beefcake -zzzzzzzz -tammy -shitty -smokin -personal -jjjj -anthony1 -anubis -backup -gorilla -fuckface -painter -lowrider -punkrock -traffic -claude -daniela -dale -delta1 -nancy -boys -easy -kissing -kelley -wendy -theresa -amazon -alan -fatass -dodgeram -dingdong -malcolm -qqqqqqqq -breasts -boots -honda1 -spidey -poker -temp -johnjohn -miguel -147852 -archer -asshole1 -dogdog -tricky -crusader -weather -syracuse -spankme -speaker -meridian -amadeus -back -harley1 -falcons -dorothy -turkey50 -kenwood -keyboard -ilovesex -1978 -blackman -shazam -shalom -lickit -jimbob -richmond -roller -carson -check -fatman -funny -garbage -sandiego -loving -magnus -cooldude -clover -mobile -bell -payton -plumber -texas1 -tool -topper -jenna -mariners -rebel -harmony -caliente -celica -fletcher -german -diana -oxford -osiris -orgasm -punkin -porsche9 -tuesday -close -breeze -bossman -kangaroo -billie -latinas -judith -astros -scruffy -donna -qwertyu -davis -hearts -kathy -jammer -java -springer -rhonda -ricky -1122 -goodtime -chelsea1 -freckles -flyboy -doodle -city -nebraska -bootie -kicker -webmaster -vulcan -iverson -191919 -blueeyes -stoner -321321 -farside -rugby -director -pussy69 -power1 -bobbie -hershey -hermes -monopoly -west -birdman -blessed -blackjac -southern -peterpan -thumbs -lawyer -melinda -fingers -fuckyou1 -rrrrrr -a1b2c3d4 -coke -nicola -bohica -heart -elvis1 -kids -blacky -stories -sentinel -snake1 -phoebe -jesse -richard1 -1234abcd -guardian -candyman -fisting -scarlet -dildo -pancho -mandingo -lucky7 -condom -munchkin -billyboy -summer1 -student -sword -skiing -sergio -site -sony -thong -rootbeer -assassin -cassidy -frederic -fffff -fitness -giovanni -scarlett -durango -postal -achilles -dawn -dylan -kisses -warriors -imagine -plymouth -topdog -asterix -hallo -cameltoe -fuckfuck -bridget -eeeeee -mouth -weird -will -sithlord -sommer -toby -theking -juliet -avenger -backdoor -goodbye -chevrole -faith -lorraine -trance -cosworth -brad -houses -homers -eternity -kingpin -verbatim -incubus -1961 -blond -zaphod -shiloh -spurs -station -jennie -maynard -mighty -aliens -hank -charly -running -dogman -omega1 -printer -aggies -chocolate -deadhead -hope -javier -bitch1 -stone55 -pineappl -thekid -lizzie -rockets -ashton -camels -formula -forrest -rosemary -oracle -rain -pussey -porkchop -abcde -clancy -nellie -mystic -inferno -blackdog -steve1 -pauline -alexander -alice -alfa -grumpy -flames -scream -lonely -puffy -proxy -valhalla -unreal -cynthia -herbie -engage -yyyyyy -010101 -solomon -pistol -melody -celeb -flying -gggg -santiago -scottie -oakley -portugal -a12345 -newbie -mmmm -venus -1qazxsw2 -beverly -zorro -work -writer -stripper -sebastia -spread -phil -tobias -links -members -metal -1221 -andre -565656 -funfun -trojans -again -cyber -hurrican -moneys -1x2zkg8w -zeus -thing -tomato -lion -atlantic -celine -usa123 -trans -account -aaaaaaa -homerun -hyperion -kevin1 -blacks -44444444 -skittles -sean -hastings -fart -gangbang -fubar -sailboat -older -oilers -craig -conrad -church -damian -dean -broken -buster1 -hithere -immortal -sticks -pilot -peters -lexmark -jerkoff -maryland -anders -cheers -possum -columbus -cutter -muppet -beautiful -stolen -swordfish -sport -sonic -peter1 -jethro -rockon -asdfghj -pass123 -paper -pornos -ncc1701a -bootys -buttman -bonjour -escape -1960 -becky -bears -362436 -spartans -tinman -threesom -lemons -maxmax -1414 -bbbbb -camelot -chad -chewie -gogo -fusion -saint -dilligaf -nopass -myself -hustler -hunter1 -whitey -beast1 -yesyes -spank -smudge -pinkfloy -patriot -lespaul -annette -hammers -catalina -finish -formula1 -sausage -scooter1 -orioles -oscar1 -over -colombia -cramps -natural -eating -exotic -iguana -bella -suckers -strong -sheena -start -slave -pearl -topcat -lancelot -angelica -magelan -racer -ramona -crunch -british -button -eileen -steph -456123 -skinny -seeking -rockhard -chief -filter -first -freaks -sakura -pacman -poontang -dalton -newlife -homer1 -klingon -watcher -walleye -tasha -tasty -sinatra -starship -steel -starbuck -poncho -amber1 -gonzo -grover -catherin -carol -candle -firefly -goblin -scotch -diver -usmc -huskies -eleven -kentucky -kitkat -israel -beckham -bicycle -yourmom -studio -tara -33333333 -shane -splash -jimmy1 -reality -12344321 -caitlin -focus -sapphire -mailman -raiders1 -clark -ddddd -hopper -excalibu -more -wilbur -illini -imperial -phillips -lansing -maxx -gothic -golfball -carlton -camille -facial -front242 -macdaddy -qwer1234 -vectra -cowboys1 -crazy1 -dannyboy -jane -betty -benny -bennett -leader -martinez -aquarius -barkley -hayden -caught -franky -ffff -floyd -sassy -pppp -pppppppp -prodigy -clarence -noodle -eatpussy -vortex -wanking -beatrice -billy1 -siemens -pedro -phillies -research -groups -carolyn -chevy1 -cccc -fritz -gggggggg -doughboy -dracula -nurses -loco -madrid -lollipop -trout -utopia -chrono -cooler -conner -nevada -wibble -werner -summit -marco -marilyn -1225 -babies -capone -fugazi -panda -mama -qazwsxed -puppies -triton -9876 -command -nnnnnn -ernest -momoney -iforgot -wolfie -studly -shawn -renee -alien -hamburg -81fukkc -741852 -catman -china -forgot -gagging -scott1 -drew -oregon -qweqwe -train -crazybab -daniel1 -cutlass -brothers -holes -heidi -mothers -music1 -what -walrus -1957 -bigtime -bike -xtreme -simba -ssss -rookie -angie -bathing -fresh -sanchez -rotten -maestro -luis -look -turbo1 -99999 -butthole -hhhh -elijah -monty -bender -yoda -shania -shock -phish -thecat -rightnow -reagan -baddog -asia -greatone -gateway1 -randall -abstr -napster -brian1 -bogart -high -hitler -emma -kill -weaver -wildfire -jackson1 -isaiah -1981 -belinda -beaner -yoyo -0.0.0.000 -super1 -select -snuggles -slutty -some -phoenix1 -technics -toon -raven1 -rayray -123789 -1066 -albion -greens -fashion -gesperrt -santana -paint -powell -credit -darling -mystery -bowser -bottle -brucelee -hehehe -kelly1 -mojo -1998 -bikini -woofwoof -yyyy -strap -sites -spears -theodore -julius -richards -amelia -central -f**k -nyjets -punisher -username -vanilla -twisted -bryant -brent -bunghole -here -elizabeth -erica -kimber -viagra -veritas -pony -pool -titts -labtec -lifetime -jenny1 -masterbate -mayhem -redbull -govols -gremlin -505050 -gmoney -rupert -rovers -diamond1 -lorenzo -trident -abnormal -davidson -deskjet -cuddles -nice -bristol -karina -milano -vh5150 -jarhead -1982 -bigbird -bizkit -sixers -slider -star69 -starfish -penetration -tommy1 -john316 -meghan -michaela -market -grant -caligula -carl -flicks -films -madden -railroad -cosmo -cthulhu -bradford -br0d3r -military -bearbear -swedish -spawn -patrick1 -polly -these -todd -reds -anarchy -groove -franco -fuckher -oooo -tyrone -vegas -airbus -cobra1 -christine -clips -delete -duster -kitty1 -mouse1 -monkeys -jazzman -1919 -262626 -swinging -stroke -stocks -sting -pippen -labrador -jordan1 -justdoit -meatball -females -saturday -park -vector -cooter -defender -desert -demon -nike -bubbas -bonkers -english -kahuna -wildman -4121 -sirius -static -piercing -terror -teenage -leelee -marissa -microsof -mechanic -robotech -rated -hailey -chaser -sanders -salsero -nuts -macross -quantum -rachael -tsunami -universe -daddy1 -cruise -nguyen -newpass6 -nudes -hellyeah -vernon -1959 -zaq12wsx -striker -sixty -steele -spice -spectrum -smegma -thumb -jjjjjjjj -mellow -astrid -cancun -cartoon -sabres -samiam -pants -oranges -oklahoma -lust -coleman -denali -nude -noodles -buzz -brest -hooter -mmmmmmmm -warthog -bloody -blueblue -zappa -wolverine -sniffing -lance -jean -jjjjj -harper -calico -freee -rover -door -pooter -closeup -bonsai -evelyn -emily1 -kathryn -keystone -iiii -1955 -yzerman -theboss -tolkien -jill -megaman -rasta -bbbbbbbb -bean -handsome -hal9000 -goofy -gringo -gofish -gizmo1 -samsam -scuba -onlyme -tttttttt -corrado -clown -clapton -deborah -boris -bulls -vivian -jayhawk -bethany -wwww -sharky -seeker -ssssssss -somethin -pillow -thesims -lighter -lkjhgf -melissa1 -marcius2 -barry -guiness -gymnast -casey1 -goalie -godsmack -doug -lolo -rangers1 -poppy -abby -clemson -clipper -deeznuts -nobody -holly1 -elliot -eeee -kingston -miriam -belle -yosemite -sucked -sex123 -sexy69 -pic\'s -tommyboy -lamont -meat -masterbating -marianne -marc -gretzky -happyday -frisco -scratch -orchid -orange1 -manchest -quincy -unbelievable -aberdeen -dawson -nathalie -ne1469 -boxing -hill -korn -intercourse -161616 -1985 -ziggy -supersta -stoney -senior -amature -barber -babyboy -bcfields -goliath -hack -hardrock -children -frodo -scout -scrappy -rosie -qazqaz -tracker -active -craving -commando -cohiba -deep -cyclone -dana -bubba69 -katie1 -mpegs -vsegda -jade -irish1 -better -sexy1 -sinclair -smelly -squerting -lions -jokers -jeanette -julia -jojojo -meathead -ashley1 -groucho -cheetah -champ -firefox -gandalf1 -packer -magnolia -love69 -tyler1 -typhoon -tundra -bobby1 -kenworth -village -volley -beth -wolf359 -0420 -000007 -swimmer -skydive -smokes -patty -peugeot -pompey -legolas -kristy -redhot -rodman -redalert -having -grapes -4runner -carrera -floppy -dollars -ou8122 -quattro -adams -cloud9 -davids -nofear -busty -homemade -mmmmm -whisper -vermont -webmaste -wives -insertion -jayjay -philips -phone -topher -tongue -temptress -midget -ripken -havefun -gretchen -canon -celebrity -five -getting -ghetto -direct -otto -ragnarok -trinidad -usnavy -conover -cruiser -dalshe -nicole1 -buzzard -hottest -kingfish -misfit -moore -milfnew -warlord -wassup -bigsexy -blackhaw -zippy -shearer -tights -thursday -kungfu -labia -journey -meatloaf -marlene -rider -area51 -batman1 -bananas -636363 -cancel -ggggg -paradox -mack -lynn -queens -adults -aikido -cigars -nova -hoosier -eeyore -moose1 -warez -interacial -streaming -313131 -pertinant -pool6123 -mayday -rivers -revenge -animated -banker -baddest -gordon24 -ccccc -fortune -fantasies -touching -aisan -deadman -homepage -ejaculation -whocares -iscool -jamesbon -1956 -1pussy -womam -sweden -skidoo -spock -sssss -petra -pepper1 -pinhead -micron -allsop -amsterda -army -aside -gunnar -666999 -chip -foot -fowler -february -face -fletch -george1 -sapper -science -sasha1 -luckydog -lover1 -magick -popopo -public -ultima -derek -cypress -booker -businessbabe -brandon1 -edwards -experience -vulva -vvvv -jabroni -bigbear -yummy -010203 -searay -secret1 -showing -sinbad -sexxxx -soleil -software -piccolo -thirteen -leopard -legacy -jensen -justine -memorex -marisa -mathew -redwing -rasputin -134679 -anfield -greenbay -gore -catcat -feather -scanner -pa55word -contortionist -danzig -daisy1 -hores -erik -exodus -vinnie -iiiiii -zero -1001 -subway -tank -second -snapple -sneakers -sonyfuck -picks -poodle -test1234 -their -llll -junebug -june -marker -mellon -ronaldo -roadkill -amanda1 -asdfjkl -beaches -greene -great1 -cheerleaers -force -doitnow -ozzy -madeline -radio -tyson -christian -daphne -boxster -brighton -housewifes -emmanuel -emerson -kkkk -mnbvcx -moocow -vides -wagner -janet -1717 -bigmoney -blonds -1000 -storys -stereo -4545 -420247 -seductive -sexygirl -lesbean -live -justin1 -124578 -animals -balance -hansen -cabbage -canadian -gangbanged -dodge1 -dimas -lori -loud -malaka -puss -probes -adriana -coolman -crawford -dante -nacked -hotpussy -erotica -kool -mirror -wearing -implants -intruder -bigass -zenith -woohoo -womans -tanya -tango -stacy -pisces -laguna -krystal -maxell -andyod22 -barcelon -chainsaw -chickens -flash1 -downtown -orgasms -magicman -profit -pusyy -pothead -coconut -chuckie -contact -clevelan -designer -builder -budweise -hotshot -horizon -hole -experienced -mondeo -wifes -1962 -strange -stumpy -smiths -sparks -slacker -piper -pitchers -passwords -laptop -jeremiah -allmine -alliance -bbbbbbb -asscock -halflife -grandma -hayley -88888 -cecilia -chacha -saratoga -sandy1 -santos -doogie -number -positive -qwert40 -transexual -crow -close-up -darrell -bonita -ib6ub9 -volvo -jacob1 -iiiii -beastie -sunnyday -stoned -sonics -starfire -snapon -pictuers -pepe -testing1 -tiberius -lisalisa -lesbain -litle -retard -ripple -austin1 -badgirl -golfgolf -flounder -garage -royals -dragoon -dickie -passwor -ocean -majestic -poppop -trailers -dammit -nokia -bobobo -br549 -emmitt -knock -minime -mikemike -whitesox -1954 -3232 -353535 -seamus -solo -sparkle -sluttey -pictere -titten -lback -1024 -angelina -goodluck -charlton -fingerig -gallaries -goat -ruby -passme -oasis -lockerroom -logan1 -rainman -twins -treasure -absolutely -club -custom -cyclops -nipper -bucket -homepage- -hhhhh -momsuck -indain -2345 -beerbeer -bimmer -susanne -stunner -stevens -456456 -shell -sheba -tootsie -tiny -testerer -reefer -really -1012 -harcore -gollum -545454 -chico -caveman -carole -fordf150 -fishes -gaymen -saleen -doodoo -pa55w0rd -looney -presto -qqqqq -cigar -bogey -brewer -helloo -dutch -kamikaze -monte -wasser -vietnam -visa -japanees -0123 -swords -slapper -peach -jump -marvel -masterbaiting -march -redwood -rolling -1005 -ametuer -chiks -cathy -callaway -fucing -sadie1 -panasoni -mamas -race -rambo -unknown -absolut -deacon -dallas1 -housewife -kristi -keywest -kirsten -kipper -morning -wings -idiot -18436572 -1515 -beating -zxczxc -sullivan -303030 -shaman -sparrow -terrapin -jeffery -masturbation -mick -redfish -1492 -angus -barrett -goirish -hardcock -felicia -forfun -galary -freeporn -duchess -olivier -lotus -pornographic -ramses -purdue -traveler -crave -brando -enter1 -killme -moneyman -welder -windsor -wifey -indon -yyyyy -stretch -taylor1 -4417 -shopping -picher -pickup -thumbnils -johnboy -jets -jess -maureen -anne -ameteur -amateurs -apollo13 -hambone -goldwing -5050 -charley -sally1 -doghouse -padres -pounding -quest -truelove -underdog -trader -crack -climber -bolitas -bravo -hohoho -model -italian -beanie -beretta -wrestlin -stroker -tabitha -sherwood -sexyman -jewels -johannes -mets -marcos -rhino -bdsm -balloons -goodman -grils -happy123 -flamingo -games -route66 -devo -dino -outkast -paintbal -magpie -llllllll -twilight -critter -christie -cupcake -nickel -bullseye -krista -knickerless -mimi -murder -videoes -binladen -xerxes -slim -slinky -pinky -peterson -thanatos -meister -menace -ripley -retired -albatros -balloon -bank -goten -5551212 -getsdown -donuts -divorce -nwo4life -lord -lost -underwear -tttt -comet -deer -damnit -dddddddd -deeznutz -nasty1 -nonono -nina -enterprise -eeeee -misfit99 -milkman -vvvvvv -isaac -1818 -blueboy -beans -bigbutt -wyatt -tech -solution -poetry -toolman -laurel -juggalo -jetski -meredith -barefoot -50spanks -gobears -scandinavian -original -truman -cubbies -nitram -briana -ebony -kings -warner -bilbo -yumyum -zzzzzzz -stylus -321654 -shannon1 -server -secure -silly -squash -starman -steeler -staples -phrases -techniques -laser -135790 -allan -barker -athens -cbr600 -chemical -fester -gangsta -fucku2 -freeze -game -salvador -droopy -objects -passwd -lllll -loaded -louis -manchester -losers -vedder -clit -chunky -darkman -damage -buckshot -buddah -boobed -henti -hillary -webber -winter1 -ingrid -bigmike -beta -zidane -talon -slave1 -pissoff -person -thegreat -living -lexus -matador -readers -riley -roberta -armani -ashlee -goldstar -5656 -cards -fmale -ferris -fuking -gaston -fucku -ggggggg -sauron -diggler -pacers -looser -pounded -premier -pulled -town -trisha -triangle -cornell -collin -cosmic -deeper -depeche -norway -bright -helmet -kristine -kendall -mustard -misty1 -watch -jagger -bertie -berger -word -3x7pxr -silver1 -smoking -snowboar -sonny -paula -penetrating -photoes -lesbens -lambert -lindros -lillian -roadking -rockford -1357 -143143 -asasas -goodboy -898989 -chicago1 -card -ferrari1 -galeries -godfathe -gawker -gargoyle -gangster -rubble -rrrr -onetime -pussyman -pooppoop -trapper -twenty -abraham -cinder -company -newcastl -boricua -bunny1 -boxer -hotred -hockey1 -hooper -edward1 -evan -kris -misery -moscow -milk -mortgage -bigtit -show -snoopdog -three -lionel -leanne -joshua1 -july -1230 -assholes -cedric -fallen -farley -gene -frisky -sanity -script -divine -dharma -lucky13 -property -tricia -akira -desiree -broadway -butterfly -hunt -hotbox -hootie -heat -howdy -earthlink -karma -kiteboy -motley -westwood -1988 -bert -blackbir -biggles -wrench -working -wrestle -slippery -pheonix -penny1 -pianoman -tomorrow -thedude -jenn -jonjon -jones1 -mattie -memory -micheal -roadrunn -arrow -attitude -azzer -seahawks -diehard -dotcom -lola -tunafish -chivas -cinnamon -clouds -deluxe -northern -nuclear -north -boom -boobie -hurley -krishna -momomo -modles -volume -23232323 -bluedog -wwwwwww -zerocool -yousuck -pluto -limewire -link -joung -marcia -awnyce -gonavy -haha -films+pic+galeries -fabian -francois -girsl -fuckthis -girfriend -rufus -drive -uncencored -a123456 -airport -clay -chrisbln -combat -cygnus -cupoi -never -netscape -brett -hhhhhhhh -eagles1 -elite -knockers -kendra -mommy -1958 -tazmania -shonuf -piano -pharmacy -thedog -lips -jillian -jenkins -midway -arsenal1 -anaconda -australi -gromit -gotohell -787878 -66666 -carmex2 -camber -gator1 -ginger1 -fuzzy -seadoo -dorian -lovesex -rancid -uuuuuu -911911 -nature -bulldog1 -helen -health -heater -higgins -kirk -monalisa -mmmmmmm -whiteout -virtual -ventura -jamie1 -japanes -james007 -2727 -2469 -blam -bitchass -believe -zephyr -stiffy -sweet1 -silent -southpar -spectre -tigger1 -tekken -lenny -lakota -lionking -jjjjjjj -medical -megatron -1369 -hawaiian -gymnastic -golfer1 -gunners -7779311 -515151 -famous -glass -screen -rudy -royal -sanfran -drake -optimus -panther1 -love1 -mail -maggie1 -pudding -venice -aaron1 -delphi -niceass -bounce -busted -house1 -killer1 -miracle -momo -musashi -jammin -2003 -234567 -wp2003wp -submit -silence -sssssss -state -spikes -sleeper -passwort -toledo -kume -media -meme -medusa -mantis -remote -reading -reebok -1017 -artemis -hampton -harry1 -cafc91 -fettish -friendly -oceans -oooooooo -mango -ppppp -trainer -troy -uuuu -909090 -cross -death1 -news -bullfrog -hokies -holyshit -eeeeeee -mitch -jasmine1 -& -& -sergeant -spinner -leon -jockey -records -right -babyblue -hans -gooner -474747 -cheeks -cars -candice -fight -glow -pass1234 -parola -okokok -pablo -magical -major -ramsey -poseidon -989898 -confused -circle -crusher -cubswin -nnnn -hollywood -erin -kotaku -milo -mittens -whatsup -vvvvv -iomega -insertions -bengals -bermuda -biit -yellow1 -012345 -spike1 -south -sowhat -pitures -peacock -pecker -theend -juliette -jimmie -romance -augusta -hayabusa -hawkeyes -castro -florian -geoffrey -dolly -lulu -qaz123 -usarmy -twinkle -cloud -chuckles -cold -hounddog -hover -hothot -europa -ernie -kenshin -kojak -mikey1 -water1 -196969 -because -wraith -zebra -wwwww -33333 -simon1 -spider1 -snuffy -philippe -thunderb -teddy1 -lesley -marino13 -maria1 -redline -renault -aloha -antoine -handyman -cerberus -gamecock -gobucks -freesex -duffman -ooooo -papa -nuggets -magician -longbow -preacher -porno1 -county -chrysler -contains -dalejr -darius -darlene -dell -navy -buffy1 -hedgehog -hoosiers -honey1 -hott -heyhey -europe -dutchess -everest -wareagle -ihateyou -sunflowe -3434 -senators -shag -spoon -sonoma -stalker -poochie -terminal -terefon -laurence -maradona -maryann -marty -roman -1007 -142536 -alibaba -america1 -bartman -astro -goth -century -chicken1 -cheater -four -ghost1 -passpass -oral -r2d2c3po -civic -cicero -myxworld -kkkkk -missouri -wishbone -infiniti -jameson -1a2b3c -1qwerty -wonderboy -skip -shojou -stanford -sparky1 -smeghead -poiuy -titanium -torres -lantern -jelly -jeanne -meier -1213 -bayern -basset -gsxr750 -cattle -charlene -fishing1 -fullmoon -gilles -dima -obelix -popo -prissy -ramrod -unique -absolute -bummer -hotone -dynasty -entry -konyor -missy1 -moses -282828 -yeah -xyz123 -stop -426hemi -404040 -seinfeld -simmons -pingpong -lazarus -matthews -marine1 -manning -recovery -12345a -beamer -babyface -greece -gustav -7007 -charity -camilla -ccccccc -faggot -foxy -frozen -gladiato -duckie -dogfood -paranoid -packers1 -longjohn -radical -tuna -clarinet -claudio -circus -danny1 -novell -nights -bonbon -kashmir -kiki -mortimer -modelsne -moondog -monaco -vladimir -insert -1953 -zxc123 -supreme -3131 -sexxx -selena -softail -poipoi -pong -together -mars -martin1 -rogue -alone -avalanch -audia4 -55bgates -cccccccc -chick -came11 -figaro -geneva -dogboy -dnsadm -dipshit -paradigm -othello -operator -officer -malone -post -rafael -valencia -tripod -choice -chopin -coucou -coach -cocksuck -common -creature -borussia -book -browning -heritage -hiziad -homerj -eight -earth -millions -mullet -whisky -jacques -store -4242 -speedo -starcraf -skylar -spaceman -piggy -pierce -tiger2 -legos -lala -jezebel -judy -joker1 -mazda -barton -baker -727272 -chester1 -fishman -food -rrrrrrrr -sandwich -dundee -lumber -magazine -radar -ppppppp -tranny -aaliyah -admiral -comics -cleo -delight -buttfuck -homeboy -eternal -kilroy -kellie -khan -violin -wingman -walmart -bigblue -blaze -beemer -beowulf -bigfish -yyyyyyy -woodie -yeahbaby -0123456 -tbone -style -syzygy -starter -lemon -linda1 -merlot -mexican -11235813 -anita -banner -bangbang -badman -barfly -grease -carla -charles1 -ffffffff -screw -doberman -diane -dogshit -overkill -counter -coolguy -claymore -demons -demo -nomore -normal -brewster -hhhhhhh -hondas -iamgod -enterme -everett -electron -eastside -kayla -minimoni -mybaby -wildbill -wildcard -ipswich -200000 -bearcat -zigzag -yyyyyyyy -xander -sweetnes -369369 -skyler -skywalker -pigeon -peyton -tipper -lilly -asdf123 -alphabet -asdzxc -babybaby -banane -barnes -guyver -graphics -grand -chinook -florida1 -flexible -fuckinside -otis -ursitesux -tototo -trust -tower -adam12 -christma -corey -chrome -buddie -bombers -bunker -hippie -keegan -misfits -vickie -292929 -woofer -wwwwwwww -stubby -sheep -secrets -sparta -stang -spud -sporty -pinball -jorge -just4fun -johanna -maxxxx -rebecca1 -gunther -fatima -fffffff -freeway -garion -score -rrrrr -sancho -outback -maggot -puddin -trial -adrienne -987456 -colton -clyde -brain -brains -hoops -eleanor -dwayne -kirby -mydick -villa -19691969 -bigcat -becker -shiner -silverad -spanish -templar -lamer -juicy -marsha -mike1 -maximum -rhiannon -real -1223 -10101010 -arrows -andres -alucard -baldwin -baron -avenue -ashleigh -haggis -channel -cheech -safari -ross -dog123 -orion1 -paloma -qwerasdf -presiden -vegitto -trees -969696 -adonis -colonel -cookie1 -newyork1 -brigitte -buddyboy -hellos -heineken -dwight -eraser -kerstin -motion -moritz -millwall -visual -jaybird -1983 -beautifu -bitter -yvette -zodiac -steven1 -sinister -slammer -smashing -slick1 -sponge -teddybea -theater -this -ticklish -lipstick -jonny -massage -mann -reynolds -ring -1211 -amazing -aptiva -applepie -bailey1 -guitar1 -chanel -canyon -gagged -fuckme1 -rough -digital1 -dinosaur -punk -98765 -90210 -clowns -cubs -daniels -deejay -nigga -naruto -boxcar -icehouse -hotties -electra -kent -widget -india -insanity -1986 -2004 -best -bluefish -bingo1 -***** -stratus -strength -sultan -storm1 -44444 -4200 -sentnece -season -sexyboy -sigma -smokie -spam -point -pippo -ticket -temppass -joel -manman -medicine -1022 -anton -almond -bacchus -aztnm -axio -awful -bamboo -hakr -gregor -hahahaha -5678 -casanova -caprice -camero1 -fellow -fountain -dupont -dolphin1 -dianne -paddle -magnet -qwert1 -pyon -porsche1 -tripper -vampires -coming -noway -burrito -bozo -highheel -hughes -hookem -eddie1 -ellie -entropy -kkkkkkkk -kkkkkkk -illinois -jacobs -1945 -1951 -24680 -21212121 -100000 -stonecold -taco -subzero -sharp -sexxxy -skolko -shanna -skyhawk -spurs1 -sputnik -piazza -testpass -letter -lane -kurt -jiggaman -matilda -1224 -harvard -hannah1 -525252 -4ever -carbon -chef -federico -ghosts -gina -scorpio1 -rt6ytere -madison1 -loki -raquel -promise -coolness -christina -coldbeer -citadel -brittney -highway -evil -monarch -morgan1 -washingt -1997 -bella1 -berry -yaya -yolanda -superb -taxman -studman -stephanie -3636 -sherri -sheriff -shepherd -poland -pizzas -tiffany1 -toilet -latina -lassie -larry1 -joseph1 -mephisto -meagan -marian -reptile -rico -razor -1013 -barron -hammer1 -gypsy -grande -carroll -camper -chippy -cat123 -call -chimera -fiesta -glock -glenn -domain -dieter -dragonba -onetwo -nygiants -odessa -password2 -louie -quartz -prowler -prophet -towers -ultra -cocker -corleone -dakota1 -cumm -nnnnnnn -natalia -boxers -hugo -heynow -hollow -iceberg -elvira -kittykat -kate -kitchen -wasabi -vikings1 -impact -beerman -string -sleep -splinter -snoopy1 -pipeline -pocket -legs -maple -mickey1 -manuela -mermaid -micro -meowmeow -redbird -alisha -baura -battery -grass -chevys -chestnut -caravan -carina -charmed -fraser -frogman -diving -dogger -draven -drifter -oatmeal -paris1 -longdong -quant4307s -rachel1 -vegitta -cole -cobras -corsair -dadada -noelle -mylife -nine -bowwow -body -hotrats -eastwood -moonligh -modena -wave -illusion -iiiiiii -jayhawks -birgit -zone -sutton -susana -swingers -shocker -shrimp -sexgod -squall -stefanie -squeeze -soul -patrice -poiu -players -tigers1 -toejam -tickler -line -julie1 -jimbo1 -jefferso -juanita -michael2 -rodeo -robot -1023 -annie1 -bball -guess -happy2 -charter -farm -flasher -falcon1 -fiction -fastball -gadget -scrabble -diaper -dirtbike -dinner -oliver1 -partner -paco -lucille -macman -poopy -popper -postman -ttttttt -ursula -acura -cowboy1 -conan -daewoo -cyrus -customer -nation -nemrac58 -nnnnn -nextel -bolton -bobdylan -hopeless -eureka -extra -kimmie -kcj9wx5n -killbill -musica -volkswag -wage -windmill -wert -vintage -iloveyou1 -itsme -bessie -zippo -311311 -starligh -smokey1 -spot -snappy -soulmate -plasma -thelma -tonight -krusty -just4me -mcdonald -marius -rochelle -rebel1 -1123 -alfredo -aubrey -audi -chantal -fick -goaway -roses -sales -rusty2 -dirt -dogbone -doofus -ooooooo -oblivion -mankind -luck -mahler -lllllll -pumper -puck -pulsar -valkyrie -tupac -compass -concorde -costello -cougars -delaware -niceguy -nocturne -bob123 -boating -bronze -hopkins -herewego -hewlett -houhou -hubert -earnhard -eeeeeeee -keller -mingus -mobydick -venture -verizon -imation -1950 -1948 -1949 -223344 -bigbig -blossom -zack -wowwow -sissy -skinner -spiker -square -snooker -sluggo -player1 -junk -jeannie -jsbach -jumbo -jewel -medic -robins -reddevil -reckless -123456a -1125 -1031 -beacon -astra -gumby -hammond -hassan -757575 -585858 -chillin -fuck1 -sander -lowell -radiohea -upyours -trek -courage -coolcool -classics -choochoo -darryl -nikki1 -nitro -bugs -boytoy -ellen -excite -kirsty -kane -wingnut -wireless -icu812 -1master -beatle -bigblock -blanca -wolfen -summer99 -sugar1 -tartar -sexysexy -senna -sexman -sick -someone -soprano -pippin -platypus -pixies -telephon -land -laura1 -laurent -rimmer -road -report -1020 -12qwaszx -arturo -around -hamish -halifax -fishhead -forum -dododo -doit -outside -paramedi -lonesome -mandy1 -twist -uuuuu -uranus -ttttt -butcher -bruce1 -helper -hopeful -eduard -dusty1 -kathy1 -katherin -moonbeam -muscles -monster1 -monkeybo -morton -windsurf -vvvvvvv -vivid -install -1947 -187187 -1941 -1952 -tatiana -susan1 -31415926 -sinned -sexxy -senator -sebastian -shadows -smoothie -snowflak -playstat -playa -playboy1 -toaster -jerry1 -marie1 -mason1 -merlin1 -roger1 -roadster -112358 -1121 -andrea1 -bacardi -auto -hardware -hardy -789789 -5555555 -captain1 -flores -fergus -sascha -rrrrrrr -dome -onion -nutter -lololo -qqqqqqq -quick -undertak -uuuuuuuu -uuuuuuu -criminal -cobain -cindy1 -coors -dani -descent -nimbus -nomad -nanook -norwich -bomb -bombay -broker -hookup -kiwi -winners -jackpot -1a2b3c4d -1776 -beardog -bighead -blast -bird33 -0987 -stress -shot -spooge -pelican -peepee -perry -pointer -titan -thedoors -jeremy1 -annabell -altima -baba -hallie -hate -hardone -5454 -candace -catwoman -flip -faithful -finance -farmboy -farscape -genesis1 -salomon -destroy -papers -option -page -loser1 -lopez -r2d2 -pumpkins -training -chriss -cumcum -ninjas -ninja1 -hung -erika -eduardo -killers -miller1 -islander -jamesbond -intel -jarvis -19841984 -2626 -bizzare -blue12 -biker -yoyoma -sushi -styles -shitface -series -shanti -spanker -steffi -smart -sphinx -please1 -paulie -pistons -tiburon -limited -maxwell1 -mdogg -rockies -armstron -alexia -arlene -alejandr -arctic -banger -audio -asimov -augustus -grandpa -753951 -4you -chilly -care1839 -chapman -flyfish -fantasia -freefall -santa -sandrine -oreo -ohshit -macbeth -madcat -loveya -mallory -rage -quentin -qwerqwer -project -ramirez -colnago -citizen -chocha -cobalt -crystal1 -dabears -nevets -nineinch -broncos1 -helene -huge -edgar -epsilon -easter -kestrel -moron -virgil -winston1 -warrior1 -iiiiiiii -iloveyou2 -1616 -beat -bettina -woowoo -zander -straight -shower -sloppy -specialk -tinkerbe -jellybea -reader -romero -redsox1 -ride -1215 -1112 -annika -arcadia -answer -baggio -base -guido -555666 -carmel -cayman -cbr900rr -chips -gabriell -gertrude -glennwei -roxy -sausages -disco -pass1 -luna -lovebug -macmac -queenie -puffin -vanguard -trip -trinitro -airwolf -abbott -aaa111 -cocaine -cisco -cottage -dayton -deadly -datsun -bricks -bumper -eldorado -kidrock -wizard1 -whiskers -wind -wildwood -istheman -interest -italy -25802580 -benoit -bigones -woodland -wolfpac -strawber -suicide -3030 -sheba1 -sixpack -peace1 -physics -pearson -tigger2 -toad -megan1 -meow -ringo -roll -amsterdam -717171 -686868 -5424 -catherine -canuck -football1 -footjob -fulham -seagull -orgy -lobo -mancity -truth -trace -vancouve -vauxhall -acidburn -derf -myspace1 -boozer -buttercu -howell -hola -easton -minemine -munch -jared -1dragon -biology -bestbuy -bigpoppa -blackout -blowfish -bmw325 -bigbob -stream -talisman -tazz -sundevil -3333333 -skate -shutup -shanghai -shop -spencer1 -slowhand -polish -pinky1 -tootie -thecrow -leroy -jonathon -jubilee -jingle -martine -matrix1 -manowar -michaels -messiah -mclaren -resident -reilly -redbaron -rollins -romans -return -rivera -andromed -athlon -beach1 -badgers -guitars -harald -harddick -gotribe -6996 -7grout -5wr2i7h8 -635241 -chase1 -carver -charlotte -fallout -fiddle -fredrick -fenris -francesc -fortuna -ferguson -fairlane -felipe -felix1 -forward -gasman -frost -fucks -sahara -sassy1 -dogpound -dogbert -divx1 -manila -loretta -priest -pornporn -quasar -venom -987987 -access1 -clippers -daylight -decker -daman -data -dentist -crusty -nathan1 -nnnnnnnn -bruno1 -bucks -brodie -budapest -kittens -kerouac -mother1 -waldo1 -wedding -whistler -whatwhat -wanderer -idontkno -1942 -1946 -bigdawg -bigpimp -zaqwsx -414141 -3000gt -434343 -shoes -serpent -starr -smurf -pasword -tommie -thisisit -lake -john1 -robotics -redeye -rebelz -1011 -alatam -asses -asians -bama -banzai -harvest -gonzalez -hair -hanson -575757 -5329 -cascade -chinese -fatty -fender1 -flower2 -funky -sambo -drummer1 -dogcat -dottie -oedipus -osama -macleod -prozac -private1 -rampage -punch -presley -concord -cook -cinema -cornwall -cleaner -christopher -ciccio -corinne -clutch -corvet07 -daemon -bruiser -boiler -hjkl -eyes -egghead -expert -ethan -kasper -mordor -wasted -jamess -iverson3 -bluesman -zouzou -090909 -1002 -switch -stone1 -4040 -sisters -sexo -shawna -smith1 -sperma -sneaky -polska -thewho -terminat -krypton -lawson -library -lekker -jules -johnson1 -johann -justus -rockie -romano -aspire -bastards -goodie -cheese1 -fenway -fishon -fishin -fuckoff1 -girls1 -sawyer -dolores -desmond -duane -doomsday -pornking -ramones -rabbits -transit -aaaaa1 -clock -delilah -noel -boyz -bookworm -bongo -bunnies -brady -buceta -highbury -henry1 -heels -eastern -krissy -mischief -mopar -ministry -vienna -weston -wildone -vodka -jayson -bigbooty -beavis1 -betsy -xxxxxx1 -yogibear -000001 -0815 -zulu -420000 -september -sigmar -sprout -stalin -peggy -patch -lkjhgfds -lagnaf -rolex -redfox -referee -123123123 -1231 -angus1 -ariana -ballin -attila -hall -greedy -grunt -747474 -carpedie -cecile -caramel -foxylady -field -gatorade -gidget -futbol -frosch -saiyan -schmidt -drums -donner -doggy1 -drum -doudou -pack -pain -nutmeg -quebec -valdepen -trash -triple -tosser -tuscl -track -comfort -choke -comein -cola -deputy -deadpool -bremen -borders -bronson -break -hotass -hotmail1 -eskimo -eggman -koko -kieran -katrin -kordell1 -komodo -mone -munich -vvvvvvvv -winger -jaeger -ivan -jackson5 -2222222 -bergkamp -bennie -bigben -zanzibar -worm -xxx123 -sunny1 -373737 -services -sheridan -slater -slayer1 -snoop -stacie -peachy -thecure -times -little1 -jennaj -marquis -middle -rasta69 -1114 -aries -havana -gratis -calgary -checkers -flanker -salope -dirty1 -draco -dogface -luv2epus -rainbow6 -qwerty123 -umpire -turnip -vbnm -tucson -troll -aileen -codered -commande -damon -nana -neon -nico -nightwin -neil -boomer1 -bushido -hotmail0 -horace -enternow -kaitlyn -keepout -karen1 -mindy -mnbv -viewsoni -volcom -wizards -wine -1995 -berkeley -bite -zach -woodstoc -tarpon -shinobi -starstar -phat -patience -patrol -toolbox -julien -johnny1 -joebob -marble -riders -reflex -120676 -1235 -angelus -anthrax -atlas -hawks -grandam -harlem -hawaii50 -gorgeous -655321 -cabron -challeng -callisto -firewall -firefire -fischer -flyer -flower1 -factory -federal -gambler -frodo1 -funk -sand -sam123 -scania -dingo -papito -passmast -olive -palermo -ou8123 -lock -ranch -pride -randy1 -twiggy -travis1 -transfer -treetop -addict -admin1 -963852 -aceace -clarissa -cliff -cirrus -clifton -colin -bobdole -bonner -bogus -bonjovi -bootsy -boater -elway7 -edison -kelvin -kenny1 -moonshin -montag -moreno -wayne1 -white1 -jazzy -jakejake -1994 -1991 -2828 -blunt -bluejays -beau -belmont -worthy -systems -sensei -southpark -stan -peeper -pharao -pigpen -tomahawk -teensex -leedsutd -larkin -jermaine -jeepster -jimjim -josephin -melons -marlon -matthias -marriage -robocop -1003 -1027 -antelope -azsxdc -gordo -hazard -granada -8989 -7894 -ceasar -cabernet -cheshire -california -chelle -candy1 -fergie -fanny -fidelio -giorgio -fuckhead -ruth -sanford -diego -dominion -devon -panic -longer -mackie -qawsed -trucking -twelve -chloe1 -coral -daddyo -nostromo -boyboy -booster -bucky -honolulu -esquire -dynamite -motor -mollydog -wilder -windows1 -waffle -wallet -warning -virus -washburn -wealth -vincent1 -jabber -jaguars -javelin -irishman -idefix -bigdog1 -blue42 -blanked -blue32 -biteme1 -bearcats -blaine -yessir -sylveste -team -stephan -sunfire -tbird -stryker -3ip76k2 -sevens -sheldon -pilgrim -tenchi -titman -leeds -lithium -lander -linkin -landon -marijuan -mariner -markie -midnite -reddwarf -1129 -123asd -12312312 -allstar -albany -asdf12 -antonia -aspen -hardball -goldfing -7734 -49ers -carlo -chambers -cable -carnage -callum -carlos1 -fitter -fandango -festival -flame -gofast -gamma -fucmy69 -scrapper -dogwood -django -magneto -loose -premium -addison -9999999 -abc1234 -cromwell -newyear -nichole -bookie -burns -bounty -brown1 -bologna -earl -entrance -elway -killjoy -kerry -keenan -kick -klondike -mini -mouser -mohammed -wayer -impreza -irene -insomnia -24682468 -2580 -24242424 -billbill -bellaco -blessing -blues1 -bedford -blanco -blunts -stinks -teaser -streets -sf49ers -shovel -solitude -spikey -sonia -pimpdadd -timeout -toffee -lefty -johndoe -johndeer -mega -manolo -mentor -margie -ratman -ridge -record -rhodes -robin1 -1124 -1210 -1028 -1226 -another -babylove -barbados -harbor -gramma -646464 -carpente -chaos1 -fishbone -fireblad -glasgow -frogs -scissors -screamer -salem -scuba1 -ducks -driven -doggies -dicky -donovan -obsidian -rams -progress -tottenham -aikman -comanche -corolla -clarke -conway -cumslut -cyborg -dancing -boston1 -bong -houdini -helmut -elvisp -edge -keksa12 -misha -monty1 -monsters -wetter -watford -wiseguy -veronika -visitor -janelle -1989 -1987 -20202020 -biatch -beezer -bigguns -blueball -bitchy -wyoming -yankees2 -wrestler -stupid1 -sealteam -sidekick -simple1 -smackdow -sporting -spiral -smeller -sperm -plato -tophat -test2 -theatre -thick -toomuch -leigh -jello -jewish -junkie -maxim -maxime -meadow -remingto -roofer -124038 -1018 -1269 -1227 -123457 -arkansas -alberta -aramis -andersen -beaker -barcelona -baltimor -googoo -goochi -852456 -4711 -catcher -carman -champ1 -chess -fortress -fishfish -firefigh -geezer -rsalinas -samuel1 -saigon -scooby1 -doors -dick1 -devin -doom -dirk -doris -dontknow -load -magpies -manfred -raleigh -vader1 -universa -tulips -defense -mygirl -burn -bowtie -bowman -holycow -heinrich -honeys -enforcer -katherine -minerva -wheeler -witch -waterboy -jaime -irving -1992 -23skidoo -bimbo -blue11 -birddog -woodman -womble -zildjian -030303 -stinker -stoppedby -sexybabe -speakers -slugger -spotty -smoke1 -polopolo -perfect1 -things -torpedo -tender -thrasher -lakeside -lilith -jimmys -jerk -junior1 -marsh -masamune -rice -root -1214 -april1 -allgood -bambi -grinch -767676 -5252 -cherries -chipmunk -cezer121 -carnival -capecod -finder -flint -fearless -goats -funstuff -gideon -savior -seabee -sandro -schalke -salasana -disney1 -duckman -options -pancake -pantera1 -malice -lookin -love123 -lloyd -qwert123 -puppet -prayers -union -tracer -crap -creation -cwoui -nascar24 -hookers -hollie -hewitt -estrella -erection -ernesto -ericsson -edthom -kaylee -kokoko -kokomo -kimball -morales -mooses -monk -walton -weekend -inter -internal -1michael -1993 -19781978 -25252525 -worker -summers -surgery -shibby -shamus -skibum -sheepdog -sex69 -spliff -slipper -spoons -spanner -snowbird -slow -toriamos -temp123 -tennesse -lakers1 -jomama -julio -mazdarx7 -rosario -recon -riddle -room -revolver -1025 -1101 -barney1 -babycake -baylor -gotham -gravity -hallowee -hancock -616161 -515000 -caca -cannabis -castor -chilli -fdsa -getout -fuck69 -gators1 -sail -sable -rumble -dolemite -dork -dickens -duffer -dodgers1 -painting -onions -logger -lorena -lookout -magic32 -port -poon -prime -twat -coventry -citroen -christmas -civicsi -cocksucker -coochie -compaq1 -nancy1 -buzzer -boulder -butkus -bungle -hogtied -honor -hero -hotgirls -hilary -heidi1 -eggplant -mustang6 -mortal -monkey12 -wapapapa -wendy1 -volleyba -vibrate -vicky -bledsoe -blink -birthday4 -woof -xxxxx1 -talk -stephen1 -suburban -stock -tabatha -sheeba -start1 -soccer10 -something -starcraft -soccer12 -peanut1 -plastics -penthous -peterbil -tools -tetsuo -torino -tennis1 -termite -ladder -last -lemmein -lakewood -jughead -melrose -megane -reginald -redone -request -angela1 -alive -alissa -goodgirl -gonzo1 -golden1 -gotyoass -656565 -626262 -capricor -chains -calvin1 -foolish -fallon -getmoney -godfather -gabber -gilligan -runaway -salami -dummy -dungeon -dudedude -dumb -dope -opus -paragon -oxygen -panhead -pasadena -opendoor -odyssey -magellan -lottie -printing -pressure -prince1 -trustme -christa -court -davies -neville -nono -bread -buffet -hound -kajak -killkill -mona -moto -mildred -winner1 -vixen -whiteboy -versace -winona -voyager1 -instant -indy -jackjack -bigal -beech -biggun -blake1 -blue99 -big1 -woods -synergy -success1 -336699 -sixty9 -shark1 -skin -simba1 -sharpe -sebring -spongebo -spunk -springs -sliver -phialpha -password9 -pizza1 -plane -perkins -pookey -tickling -lexingky -lawman -joe123 -jolly -mike123 -romeo1 -redheads -reserve -apple123 -alanis -ariane -antony -backbone -aviation -band -hand -green123 -haley -carlitos -byebye -cartman1 -camden -chewy -camaross -favorite6 -forumwp -franks -ginscoot -fruity -sabrina1 -devil666 -doughnut -pantie -oldone -paintball -lumina -rainbow1 -prosper -total -true -umbrella -ajax -951753 -achtung -abc12345 -compact -color -corn -complete -christi -closer -corndog -deerhunt -darklord -dank -nimitz -brandy1 -bowl -breanna -holidays -hetfield -holein1 -hillbill -hugetits -east -evolutio -kenobi -whiplash -waldo -wg8e3wjf -wing -istanbul -invis -1996 -benton -bigjohn -bluebell -beef -beater -benji -bluejay -xyzzy -wrestling -storage -superior -suckdick -taichi -stellar -stephane -shaker -skirt -seymour -semper -splurge -squeak -pearls -playball -pitch -phyllis -pooky -piss -tomas -titfuck -joemama -johnny5 -marcello -marjorie -married -maxi -rhubarb -rockwell -ratboy -reload -rooney -redd -1029 -1030 -1220 -anchor -bbking -baritone -gryphon -gone -57chevy -494949 -celeron -fishy -gladiator -fucker1 -roswell -dougie -downer -dicker -diva -domingo -donjuan -nympho -omar -praise -racers -trick -trauma -truck1 -trample -acer -corwin -cricket1 -clemente -climax -denmark -cuervo -notnow -nittany -neutron -native -bosco1 -buffa -breaker -hello2 -hydro -estelle -exchange -explore -kisskiss -kittys -kristian -montecar -modem -mississi -mooney -weiner -washington -20012001 -bigdick1 -bibi -benfica -yahoo1 -striper -tabasco -supra -383838 -456654 -seneca -serious -shuttle -socks -stanton -penguin1 -pathfind -testibil -thethe -listen -lightning -lighting -jeter2 -marma -mark1 -metoo -republic -rollin -redleg -redbone -redskin -rocco -1245 -armand -anthony7 -altoids -andrews -barley -away -asswipe -bauhaus -bbbbbb1 -gohome -harrier -golfpro -goldeney -818181 -6666666 -5000 -5rxypn -cameron1 -calling -checker -calibra -fields -freefree -faith1 -fist -fdm7ed -finally -giraffe -glasses -giggles -fringe -gate -georgie -scamper -rrpass1 -screwyou -duffy -deville -dimples -pacino -ontario -passthie -oberon -quest1 -postov1000 -puppydog -puffer -raining -protect -qwerty7 -trey -tribe -ulysses -tribal -adam25 -a1234567 -compton -collie -cleopatr -contract -davide -norris -namaste -myrtle -buffalo1 -bonovox -buckley -bukkake -burning -burner -bordeaux -burly -hun999 -emilie -elmo -enters -enrique -keisha -mohawk -willard -vgirl -whale -vince -jayden -jarrett -1812 -1943 -222333 -bigjim -bigd -zoom -wordup -ziggy1 -yahooo -workout -young1 -written -xmas -zzzzzz1 -surfer1 -strife -sunlight -tasha1 -skunk -shauna -seth -soft -sprinter -peaches1 -planes -pinetree -plum -pimping -theforce -thedon -toocool -leeann -laddie -list -lkjh -lara -joke -jupiter1 -mckenzie -matty -rene -redrose -1200 -102938 -annmarie -alexa -antares -austin31 -ground -goose1 -737373 -78945612 -789987 -6464 -calimero -caster -casper1 -cement -chevrolet -chessie -caddy -chill -child -canucks -feeling -favorite -fellatio -f00tball -francine -gateway2 -gigi -gamecube -giovanna -rugby1 -scheisse -dshade -dudes -dixie1 -owen -offshore -olympia -lucas1 -macaroni -manga -pringles -puff -tribble -trouble1 -ussy -core -clint -coolhand -colonial -colt -debra -darthvad -dealer -cygnusx1 -natalie1 -newark -husband -hiking -errors -eighteen -elcamino -emmett -emilia -koolaid -knight1 -murphy1 -volcano -idunno -2005 -2233 -block -benito -blueberr -biguns -yamahar1 -zapper -zorro1 -0911 -3006 -sixsix -shopper -siobhan -sextoy -stafford -snowboard -speedway -sounds -pokey -peabody -playboy2 -titi -think -toast -toonarmy -lister -lambda -joecool -jonas -joyce -juniper -mercer -max123 -manny -massimo -mariposa -met2002 -reggae -ricky1 -1236 -1228 -1016 -all4one -arianna -baberuth -asgard -gonzales -484848 -5683 -6669 -catnip -chiquita -charisma -capslock -cashmone -chat -figure -galant -frenchy -gizmodo1 -girlies -gabby -garner -screwy -doubled -divers -dte4uw -done -dragonfl -maker -locks -rachelle -treble -twinkie -trailer -tropical -acid -crescent -cooking -cococo -cory -dabomb -daffy -dandfa -cyrano -nathanie -briggs -boners -helium -horton -hoffman -hellas -espresso -emperor -killa -kikimora -wanda -w4g8at -verona -ilikeit -iforget -1944 -20002000 -birthday1 -beatles1 -blue1 -bigdicks -beethove -blacklab -blazers -benny1 -woodwork -0069 -0101 -taffy -susie -survivor -swim -stokes -4567 -shodan -spoiled -steffen -pissed -pavlov -pinnacle -place -petunia -terrell -thirty -toni -tito -teenie -lemonade -lily -lillie -lalakers -lebowski -lalalala -ladyboy -jeeper -joyjoy -mercury1 -mantle -mannn -rocknrol -riversid -reeves -123aaa -11112222 -121314 -1021 -1004 -1120 -allen1 -ambers -amstel -ambrose -alice1 -alleycat -allegro -ambrosia -alley -australia -hatred -gspot -graves -goodsex -hattrick -harpoon -878787 -8inches -4wwvte -cassandr -charlie123 -case -chavez -fighting -gabriela -gatsby -fudge -gerry -generic -gareth -fuckme2 -samm -sage -seadog -satchmo -scxakv -santafe -dipper -dingle -dizzy -outoutout -madmad -london1 -qbg26i -pussy123 -randolph -vaughn -tzpvaw -vamp -comedy -comp -cowgirl -coldplay -dawgs -delaney -nt5d27 -novifarm -needles -notredam -newness -mykids -bryan1 -bouncer -hihihi -honeybee -iceman1 -herring -horn -hook -hotlips -dynamo -klaus -kittie -kappa -kahlua -muffy -mizzou -mohamed -musical -wannabe -wednesda -whatup -weller -waterfal -willy1 -invest -blanche -bear1 -billabon -youknow -zelda -yyyyyy1 -zachary1 -01234567 -070462 -zurich -superstar -storms -tail -stiletto -strat -427900 -sigmachi -shelter -shells -sexy123 -smile1 -sophie1 -stefano -stayout -somerset -smithers -playmate -pinkfloyd -phish1 -payday -thebear -telefon -laetitia -kswbdu -larson -jetta -jerky -melina -metro -revoluti -retire -respect -1216 -1201 -1204 -1222 -1115 -archange -barry1 -handball -676767 -chandra -chewbacc -flesh -furball -gocubs -fruit -fullback -gman -gentle -dunbar -dewalt -dominiqu -diver1 -dhip6a -olemiss -ollie -mandrake -mangos -pretzel -pusssy -tripleh -valdez -vagabond -clean -comment -crew -clovis -deaths -dandan -csfbr5yy -deadspin -darrel -ninguna -noah -ncc74656 -bootsie -bp2002 -bourbon -brennan -bumble -books -hose -heyyou -houston1 -hemlock -hippo -hornets -hurricane -horseman -hogan -excess -extensa -muffin1 -virginie -werdna -idontknow -info -iron -jack1 -1bitch -151nxjmt -bendover -bmwbmw -bills -zaq123 -wxcvbn -surprise -supernov -tahoe -talbot -simona -shakur -sexyone -seviyi -sonja -smart1 -speed1 -pepito -phantom1 -playoffs -terry1 -terrier -laser1 -lite -lancia -johngalt -jenjen -jolene -midori -message -maserati -matteo -mental -miami1 -riffraff -ronald1 -reason -rhythm -1218 -1026 -123987 -1015 -1103 -armada -architec -austria -gotmilk -hawkins -gray -camila -camp -cambridg -charge -camero -flex -foreplay -getoff -glacier -glotest -froggie -gerbil -rugger -sanity72 -salesman -donna1 -dreaming -deutsch -orchard -oyster -palmtree -ophelia -pajero -m5wkqf -magenta -luckyone -treefrog -vantage -usmarine -tyvugq -uptown -abacab -aaaaaa1 -advance -chuck1 -delmar -darkange -cyclones -nate -navajo -nope -border -bubba123 -building -iawgk2 -hrfzlz -dylan1 -enrico -encore -emilio -eclipse1 -killian -kayleigh -mutant -mizuno -mustang2 -video1 -viewer -weed420 -whales -jaguar1 -insight -1990 -159159 -1love -bliss -bears1 -bigtruck -binder -bigboss -blitz -xqgann -yeahyeah -zeke -zardoz -stickman -table -3825 -signal -sentra -side -shiva -skipper1 -singapor -southpaw -sonora -squid -slamdunk -slimjim -placid -photon -placebo -pearl1 -test12 -therock1 -tiger123 -leinad -legman -jeepers -joeblow -mccarthy -mike23 -redcar -rhinos -rjw7x4 -1102 -13576479 -112211 -alcohol -gwju3g -greywolf -7bgiqk -7878 -535353 -4snz9g -candyass -cccccc1 -carola -catfight -cali -fister -fosters -finland -frankie1 -gizzmo -fuller -royalty -rugrat -sandie -rudolf -dooley -dive -doreen -dodo -drop -oemdlg -out3xf -paddy -opennow -puppy1 -qazwsxedc -pregnant -quinn -ramjet -under -uncle -abraxas -corner -creed -cocoa -crown -cows -cn42qj -dancer1 -death666 -damned -nudity -negative -nimda2k -buick -bobb -braves1 -brook -henrik -higher -hooligan -dust -everlast -karachi -mortis -mulligan -monies -motocros -wally1 -weapon -waterman -view -willie1 -vicki -inspiron -1test -2929 -bigblack -xytfu7 -yackwin -zaq1xsw2 -yy5rbfsc -100100 -0660 -tahiti -takehana -talks -332211 -3535 -sedona -seawolf -skydiver -shine -spleen -slash -spjfet -special1 -spooner -slimshad -sopranos -spock1 -penis1 -patches1 -terri -thierry -thething -toohot -large -limpone -johnnie -mash4077 -matchbox -masterp -maxdog -ribbit -reed -rita -rockin -redhat -rising -1113 -14789632 -1331 -allday -aladin -andrey -amethyst -ariel -anytime -baseball1 -athome -basil -goofy1 -greenman -gustavo -goofball -ha8fyp -goodday -778899 -charon -chappy -castillo -caracas -cardiff -capitals -canada1 -cajun -catter -freddy1 -favorite2 -frazier -forme -follow -forsaken -feelgood -gavin -gfxqx686 -garlic -sarge -saskia -sanjose -russ -salsa -dilbert1 -dukeduke -downhill -longhair -loop -locutus -lockdown -malachi -mamacita -lolipop -rainyday -pumpkin1 -punker -prospect -rambo1 -rainbows -quake -twin -trinity1 -trooper1 -aimee -citation -coolcat -crappy -default -dental -deniro -d9ungl -daddys -napoli -nautica -nermal -bukowski -brick -bubbles1 -bogota -board -branch -breath -buds -hulk -humphrey -hitachi -evans -ender -export -kikiki -kcchiefs -kram -morticia -montrose -mongo -waqw3p -wizzard -visited -whdbtp -whkzyc -image -154ugeiu -1fuck -binky -blind -bigred1 -blubber -benz -becky1 -year2005 -wonderfu -wooden -xrated -0001 -tampabay -survey -tammy1 -stuffer -3mpz4r -3000 -3some -selina -sierra1 -shampoo -silk -shyshy -slapnuts -standby -spartan1 -sprocket -sometime -stanley1 -poker1 -plus -thought -theshit -torture -thinking -lavalamp -light1 -laserjet -jediknig -jjjjj1 -jocelyn -mazda626 -menthol -maximo -margaux -medic1 -release -richter -rhino1 -roach -renate -repair -reveal -1209 -1234321 -amigos -apricot -alexandra -asdfgh1 -hairball -hatter -graduate -grimace -7xm5rq -6789 -cartoons -capcom -cheesy -cashflow -carrots -camping -fanatic -fool -format -fleming -girlie -glover -gilmore -gardner -safeway -ruthie -dogfart -dondon -diapers -outsider -odin -opiate -lollol -love12 -loomis -mallrats -prague -primetime21 -pugsley -program -r29hqq -touch -valleywa -airman -abcdefg1 -darkone -cummer -dempsey -damn -nadia -natedogg -nineball -ndeyl5 -natchez -newone -normandy -nicetits -buddy123 -buddys -homely -husky -iceland -hr3ytm -highlife -holla -earthlin -exeter -eatmenow -kimkim -karine -k2trix -kernel -kirkland -money123 -moonman -miles1 -mufasa -mousey -wilma -wilhelm -whites -warhamme -instinct -jackass1 -2277 -20spanks -blobby -blair -blinky -bikers -blackjack -becca -blue23 -xman -wyvern -085tzzqi -zxzxzx -zsmj2v -suede -t26gn4 -sugars -sylvie -tantra -swoosh -swiss -4226 -4271 -321123 -383pdjvl -shoe -shane1 -shelby1 -spades -spain -smother -soup -sparhawk -pisser -photo1 -pebble -phones -peavey -picnic -pavement -terra -thistle -tokyo -therapy -lives -linden -kronos -lilbit -linux -johnston -material -melanie1 -marbles -redlight -reno -recall -1208 -1138 -1008 -alchemy -aolsucks -alexalex -atticus -auditt -ballet -b929ezzh -goodyear -hanna -griffith -gubber -863abgsg -7474 -797979 -464646 -543210 -4zqauf -4949 -ch5nmk -carlito -chewey -carebear -caleb -checkmat -cheddar -chachi -fever -forgetit -fine -forlife -giants1 -gates -getit -gamble -gerhard -galileo -g3ujwg -ganja -rufus1 -rushmore -scouts -discus -dudeman -olympus -oscars -osprey -madcow -locust -loyola -mammoth -proton -rabbit1 -question -ptfe3xxp -pwxd5x -purple1 -punkass -prophecy -uyxnyd -tyson1 -aircraft -access99 -abcabc -cocktail -colts -civilwar -cleveland -claudia1 -contour -clement -dddddd1 -cypher -denied -dapzu455 -dagmar -daisydog -name -noles -butters -buford -hoochie -hotel -hoser -eddy -ellis -eldiablo -kingrich -mudvayne -motown -mp8o6d -wife -vipergts -italiano -innocent -2055 -2211 -beavers -bloke -blade1 -yamato -zooropa -yqlgr667 -050505 -zxcvbnm1 -zw6syj -suckcock -tango1 -swing -stern -stephens -swampy -susanna -tammie -445566 -333666 -380zliki -sexpot -sexylady -sixtynin -sickboy -spiffy -sleeping -skylark -sparkles -slam -pintail -phreak -places -teller -timtim -tires -thighs -left -latex -llamas -letsdoit -lkjhg -landmark -letters -lizzard -marlins -marauder -metal1 -manu -register -righton -1127 -alain -alcat -amigo -basebal1 -azertyui -attract -azrael -hamper -gotenks -golfgti -gutter -hawkwind -h2slca -harman -grace1 -6chid8 -789654 -canine -casio -cazzo -chamber -cbr900 -cabrio -calypso -capetown -feline -flathead -fisherma -flipmode -fungus -goal -g9zns4 -full -giggle -gabriel1 -fuck123 -saffron -dogmeat -dreamcas -dirtydog -dunlop -douche -dresden -dickdick -destiny1 -pappy -oaktree -lydia -luft4 -puta -prayer -ramada -trumpet1 -vcradq -tulip -tracy71 -tycoon -aaaaaaa1 -conquest -click -chitown -corps -creepers -constant -couples -code -cornhole -danman -dada -density -d9ebk7 -cummins -darth -cute -nash -nirvana1 -nixon -norbert -nestle -brenda1 -bonanza -bundy -buddies -hotspur -heavy -horror -hufmqw -electro -erasure -enough -elisabet -etvww4 -ewyuza -eric1 -kinder -kenken -kismet -klaatu -musician -milamber -willi -waiting -isacs155 -igor -1million -1letmein -x35v8l -yogi -ywvxpz -xngwoj -zippy1 -020202 -**** -stonewal -sweeney -story -sentry -sexsexsex -spence -sonysony -smirnoff -star12 -solace -sledge -states -snyder -star1 -paxton -pentagon -pkxe62 -pilot1 -pommes -paulpaul -plants -tical -tictac -toes -lighthou -lemans -kubrick -letmein22 -letmesee -jys6wz -jonesy -jjjjjj1 -jigga -joelle -mate -merchant -redstorm -riley1 -rosa -relief -14141414 -1126 -allison1 -badboy1 -asthma -auggie -basement -hartley -hartford -hardwood -gumbo -616913 -57np39 -56qhxs -4mnveh -cake -forbes -fatluvr69 -fqkw5m -fidelity -feathers -fresno -godiva -gecko -gladys -gibson1 -gogators -fridge -general1 -saxman -rowing -sammys -scotts -scout1 -sasasa -samoht -dragon69 -ducky -dragonball -driller -p3wqaw -nurse -papillon -oneone -openit -optimist -longshot -portia -rapier -pussy2 -ralphie -tuxedo -ulrike -undertow -trenton -copenhag -come -delldell -culinary -deltas -mytime -nicky -nickie -noname -noles1 -bucker -bopper -bullock -burnout -bryce -hedges -ibilltes -hihje863 -hitter -ekim -espana -eatme69 -elpaso -envelope -express1 -eeeeee1 -eatme1 -karaoke -kara -mustang5 -misses -wellingt -willem -waterski -webcam -jasons -infinite -iloveyou! -jakarta -belair -bigdad -beerme -yoshi -yinyang -zimmer -x24ik3 -063dyjuy -0000007 -ztmfcq -stopit -stooges -survival -stockton -symow8 -strato -2hot4u -ship -simons -skins -shakes -sex1 -shield -snacks -softtail -slimed123 -pizzaman -pipe -pitt -pathetic -pinto -tigercat -tonton -lager -lizzy -juju -john123 -jennings -josiah -jesse1 -jordon -jingles -martian -mario1 -rootedit -rochard -redwine -requiem -riverrat -rats -1117 -1014 -1205 -althea -allie -amor -amiga -alpina -alert -atreides -banana1 -bahamut -hart -golfman -happines -7uftyx -5432 -5353 -5151 -4747 -byron -chatham -chadwick -cherie -foxfire -ffvdj474 -freaked -foreskin -gayboy -gggggg1 -glenda -gameover -glitter -funny1 -scoobydoo -scroll -rudolph -saddle -saxophon -dingbat -digimon -omicron -parsons -ohio -panda1 -loloxx -macintos -lululu -lollypop -racer1 -queen1 -qwertzui -prick -upnfmc -tyrant -trout1 -9skw5g -aceman -adelaide -acls2h -aaabbb -acapulco -aggie -comcast -craft -crissy -cloudy -cq2kph -custer -d6o8pm -cybersex -davecole -darian -crumbs -daisey -davedave -dasani -needle -mzepab -myporn -narnia -nineteen -booger1 -bravo1 -budgie -btnjey -highlander -hotel6 -humbug -edwin -ewtosi -kristin1 -kobe -knuckles -keith1 -katarina -muff -muschi -montana1 -wingchun -wiggle -whatthe -walking -watching -vette1 -vols -virago -intj3a -ishmael -intern -jachin -illmatic -199999 -2010 -beck -blender -bigpenis -bengal -blue1234 -your -zaqxsw -xray -xxxxxxx1 -zebras -yanks -worlds -tadpole -stripes -svetlana -3737 -4343 -3728 -4444444 -368ejhih -solar -sonne -smalls -sniffer -sonata -squirts -pitcher -playstation -pktmxr -pescator -points -texaco -lesbos -lilian -l8v53x -jo9k2jw2 -jimbeam -josie -jimi -jupiter2 -jurassic -marines1 -maya -rocket1 -ringer -14725836 -12345679 -1219 -123098 -1233 -alessand -althor -angelika -arch -armando -alpha123 -basher -barefeet -balboa -bbbbb1 -banks -badabing -harriet -gopack -golfnut -gsxr1000 -gregory1 -766rglqy -8520 -753159 -8dihc6 -69camaro -666777 -cheeba -chino -calendar -cheeky -camel1 -fishcake -falling -flubber -giuseppe -gianni -gloves -gnasher23 -frisbee -fuzzy1 -fuzzball -sauce -save13tx -schatz -russell1 -sandra1 -scrotum -scumbag -sabre -samdog -dripping -dragon12 -dragster -paige -orwell -mainland -lunatic -lonnie -lotion -maine -maddux -qn632o -poophead -rapper -porn4life -producer -rapunzel -tracks -velocity -vanessa1 -ulrich -trueblue -vampire1 -abacus -902100 -crispy -corky -crane -chooch -d6wnro -cutie -deal -dabulls -dehpye -navyseal -njqcw4 -nownow -nigger1 -nightowl -nonenone -nightmar -bustle -buddy2 -boingo -bugman -bulletin -bosshog -bowie -hybrid -hillside -hilltop -hotlegs -honesty -hzze929b -hhhhh1 -hellohel -eloise -evilone -edgewise -e5pftu -eded -embalmer -excalibur -elefant -kenzie -karl -karin -killah -kleenex -mouses -mounta1n -motors -mutley -muffdive -vivitron -winfield -wednesday -w00t88 -iloveit -jarjar -incest -indycar -17171717 -1664 -17011701 -222777 -2663 -beelch -benben -yitbos -yyyyy1 -yasmin -zapata -zzzzz1 -stooge -tangerin -taztaz -stewart1 -summer69 -sweetness -system1 -surveyor -stirling -3qvqod -3way -456321 -sizzle -simhrq -shrink -shawnee -someday -sparty -ssptx452 -sphere -spark -slammed -sober -persian -peppers -ploppy -pn5jvw -poobear -pianos -plaster -testme -tiff -thriller -larissa -lennox -jewell -master12 -messier -rockey -1229 -1217 -1478 -1009 -anastasi -almighty -amonra -aragon -argentin -albino -azazel -grinder -6uldv8 -83y6pv -8888888 -4tlved -515051 -carsten -changes -flanders -flyers88 -ffffff1 -firehawk -foreman -firedog -flashman -ggggg1 -gerber -godspeed -galway -giveitup -funtimes -gohan -giveme -geryfe -frenchie -sayang -rudeboy -savanna -sandals -devine -dougal -drag0n -dga9la -disaster -desktop -only -onlyone -otter -pandas -mafia -lombard -luckys -lovejoy -lovelife -manders -product -qqh92r -qcmfd454 -pork -radar1 -punani -ptbdhw -turtles -undertaker -trs8f7 -tramp -ugejvp -abba -911turbo -acdc -abcd123 -clever -corina -cristian -create -crash1 -colony -crosby -delboy -daniele -davinci -daughter -notebook -niki -nitrox -borabora -bonzai -budd -brisbane -hotter -heeled -heroes -hooyah -hotgirl -i62gbq -horse1 -hills -hpk2qc -epvjb6 -echo -korean -kristie -mnbvc -mohammad -mind -mommy1 -munster -wade -wiccan -wanted -jacket -2369 -bettyboo -blondy -bismark -beanbag -bjhgfi -blackice -yvtte545 -ynot -yess -zlzfrh -wolvie -007bond -****** -tailgate -tanya1 -sxhq65 -stinky1 -3234412 -3ki42x -seville -shimmer -sheryl -sienna -shitshit -skillet -seaman -sooners1 -solaris -smartass -pastor -pasta -pedros -pennywis -pfloyd -tobydog -thetruth -lethal -letme1n -leland -jenifer -mario66 -micky -rocky2 -rewq -ripped -reindeer -1128 -1207 -1104 -1432 -aprilia -allstate -alyson -bagels -basic -baggies -barb -barrage -greatest -gomez -guru -guard -72d5tn -606060 -4wcqjn -caldwell -chance1 -catalog -faust -film -flange -fran -fartman -geil -gbhcf2 -fussball -glen -fuaqz4 -gameboy -garnet -geneviev -rotary -seahawk -russel -saab -seal -samadams -devlt4 -ditto -drevil -drinker -deuce -dipstick -donut -octopus -ottawa -losangel -loverman -porky -q9umoz -rapture -pump -pussy4me -university -triplex -ue8fpw -trent -trophy -turbos -troubles -agent -aaa340 -churchil -crazyman -consult -creepy -craven -class -cutiepie -ddddd1 -dejavu -cuxldv -nettie -nbvibt -nikon -niko -norwood -nascar1 -nolan -bubba2 -boobear -boogers -buff -bullwink -bully -bulldawg -horsemen -escalade -editor -eagle2 -dynamic -ella -efyreg -edition -kidney -minnesot -mogwai -morrow -msnxbi -moonlight -mwq6qlzo -wars -werder -verygood -voodoo1 -wheel -iiiiii1 -159951 -1624 -1911a1 -2244 -bellagio -bedlam -belkin -bill1 -woodrow -xirt2k -worship -?????? -tanaka -swift -susieq -sundown -sukebe -tales -swifty -2fast4u -senate -sexe -sickness -shroom -shaun -seaweed -skeeter1 -status -snicker -sorrow -spanky1 -spook -patti -phaedrus -pilots -pinch -peddler -theo -thumper1 -tessie -tiger7 -tmjxn151 -thematri -l2g7k3 -letmeinn -lazy -jeffjeff -joan -johnmish -mantra -mariana -mike69 -marshal -mart -mazda6 -riptide -robots -rental -1107 -1130 -142857 -11001001 -1134 -armored -alvin -alec -allnight -alright -amatuers -bartok -attorney -astral -baboon -bahamas -balls1 -bassoon -hcleeb -happyman -granite -graywolf -golf1 -gomets -8vjzus -7890 -789123 -8uiazp -5757 -474jdvff -551scasi -50cent -camaro1 -cherry1 -chemist -final -firenze -fishtank -farrell -freewill -glendale -frogfrog -gerhardt -ganesh -same -scirocco -devilman -doodles -dinger -okinawa -olympic -nursing -orpheus -ohmygod -paisley -pallmall -null -lounge -lunchbox -manhatta -mahalo -mandarin -qwqwqw -qguvyt -pxx3eftp -president -rambler -puzzle -poppy1 -turk182 -trotter -vdlxuc -trish -tugboat -valiant -tracie -uwrl7c -chris123 -coaster -cmfnpu -decimal -debbie1 -dandy -daedalus -dede -natasha1 -nissan1 -nancy123 -nevermin -napalm -newcastle -boats -branden -britt -bonghit -hester -ibxnsm -hhhhhh1 -holger -durham -edmonton -erwin -equinox -dvader -kimmy -knulla -mustafa -monsoon -mistral -morgana -monica1 -mojave -month -monterey -mrbill -vkaxcs -victor1 -wacker -wendell -violator -vfdhif -wilson1 -wavpzt -verena -wildstar -winter99 -iqzzt580 -jarrod -imback -1914 -19741974 -1monkey -1q2w3e4r5t -2500 -2255 -blank -bigshow -bigbucks -blackcoc -zoomer -wtcacq -wobble -xmen -xjznq5 -yesterda -yhwnqc -zzzxxx -streak -393939 -2fchbg -skinhead -skilled -shakira -shaft -shadow12 -seaside -sigrid -sinful -silicon -smk7366 -snapshot -sniper1 -soccer11 -staff -slap -smutty -peepers -pleasant -plokij -pdiddy -pimpdaddy -thrust -terran -topaz -today1 -lionhear -littlema -lauren1 -lincoln1 -lgnu9d -laughing -juneau -methos -medina -merlyn -rogue1 -romulus -redshift -1202 -1469 -12locked -arizona1 -alfarome -al9agd -aol123 -altec -apollo1 -arse -baker1 -bbb747 -bach -axeman -astro1 -hawthorn -goodfell -hawks1 -gstring -hannes -8543852 -868686 -4ng62t -554uzpad -5401 -567890 -5232 -catfood -frame -flow -fire1 -flipflop -fffff1 -fozzie -fluff -garrison -fzappa -furious -round -rustydog -sandberg -scarab -satin -ruger -samsung1 -destin -diablo2 -dreamer1 -detectiv -dominick -doqvq3 -drywall -paladin1 -papabear -offroad -panasonic -nyyankee -luetdi -qcfmtz -pyf8ah -puddles -privacy -rainer -pussyeat -ralph1 -princeto -trivia -trewq -tri5a3 -advent -9898 -agyvorc -clarkie -coach1 -courier -contest -christo -corinna -chowder -concept -climbing -cyzkhw -davidb -dad2ownu -days -daredevi -de7mdf -nose -necklace -nazgul -booboo1 -broad -bonzo -brenna -boot -butch1 -huskers1 -hgfdsa -hornyman -elmer -elektra -england1 -elodie -kermit1 -knife -kaboom -minute -modern -motherfucker -morten -mocha -monday1 -morgoth -ward -weewee -weenie -walters -vorlon -website -wahoo -ilovegod -insider -jayman -1911 -1dallas -1900 -1ranger -201jedlz -2501 -1qaz -bertram -bignuts -bigbad -beebee -billows -belize -bebe -wvj5np -wu4etd -yamaha1 -wrinkle5 -zebra1 -yankee1 -zoomzoom -09876543 -0311 -????? -stjabn -tainted -3tmnej -shoot -skooter -skelter -sixteen -starlite -smack -spice1 -stacey1 -smithy -perrin -pollux -peternorth -pixie -paulina -piston -pick -poets -pine -toons -tooth -topspin -kugm7b -legends -jeepjeep -juliana -joystick -junkmail -jojojojo -jonboy -judge -midland -meteor -mccabe -matter -mayfair -meeting -merrill -raul -riches -reznor -rockrock -reboot -reject -robyn -renee1 -roadway -rasta220 -1411 -1478963 -1019 -archery -allman -andyandy -barks -bagpuss -auckland -gooseman -hazmat -gucci -guns -grammy -happydog -greek -7kbe9d -7676 -6bjvpe -5lyedn -5858 -5291 -charlie2 -chas -c7lrwu -candys -chateau -ccccc1 -cardinals -fear -fihdfv -fortune12 -gocats -gaelic -fwsadn -godboy -gldmeo -fx3tuo -fubar1 -garland -generals -gforce -rxmtkp -rulz -sairam -dunhill -division -dogggg -detect -details -doll -drinks -ozlq6qwm -ov3ajy -lockout -makayla -macgyver -mallorca -loves -prima -pvjegu -qhxbij -raphael -prelude1 -totoro -tusymo -trousers -tunnel -valeria -tulane -turtle1 -tracy1 -aerosmit -abbey1 -address -clticic -clueless -cooper1 -comets -collect -corbin -delpiero -derick -cyprus -dante1 -dave1 -nounours -neal -nexus6 -nero -nogard -norfolk -brent1 -booyah -bootleg -buckaroo -bulls23 -bulls1 -booper -heretic -icecube -hellno -hounds -honeydew -hooters1 -hoes -howie -hevnm4 -hugohugo -eighty -epson -evangeli -eeeee1 -eyphed diff --git a/venv/lib/python3.6/site-packages/passwordmeter/test_passwordmeter.py b/venv/lib/python3.6/site-packages/passwordmeter/test_passwordmeter.py deleted file mode 100644 index f757096..0000000 --- a/venv/lib/python3.6/site-packages/passwordmeter/test_passwordmeter.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -#------------------------------------------------------------------------------ -# file: $Id$ -# auth: Philip J Grabner -# date: 2013/10/29 -# copy: (C) Copyright 2013 Cadit Health Inc., All Rights Reserved. -#------------------------------------------------------------------------------ - -import unittest -import passwordmeter as pwm - -class TestFactor(pwm.Factor): - category = 'test' - def __init__(self, prefix='test value is', *args, **kw): - self.prefix = prefix - super(TestFactor, self).__init__(*args, **kw) - def test(self, value, extra): - return (0.5, self.prefix + ': ' + value) - -#------------------------------------------------------------------------------ -class TestPasswordMeter(unittest.TestCase): - - #---------------------------------------------------------------------------- - def test_default(self): - res = pwm.test('password') - self.assertEqual(len(res), 2) - self.assertIsInstance(res[0], float) - self.assertIsInstance(res[1], dict) - - #---------------------------------------------------------------------------- - def test_notword(self): - self.assertEqual( - pwm.Meter(settings=dict(factors='notword')).test('password')[0], 0) - self.assertEqual( - pwm.Meter(settings=dict(factors='notword')).test('not0klsd@#$')[0], 1) - - #---------------------------------------------------------------------------- - def test_factorsAsString(self): - self.assertEqual( - pwm.Meter(settings=dict( - factors='length,passwordmeter.test_passwordmeter.TestFactor')).test('short')[1], - {'test': 'test value is: short', - 'length': 'Increase the length of the password'}) - - #---------------------------------------------------------------------------- - def test_factorsAsList(self): - self.assertEqual( - pwm.Meter(settings=dict( - factors=['length', TestFactor])).test('short')[1], - {'test': 'test value is: short', - 'length': 'Increase the length of the password'}) - - #---------------------------------------------------------------------------- - def test_supplementalFactor(self): - settings = dict() - settings['factor.test.class'] = 'passwordmeter.test_passwordmeter.TestFactor' - settings['factor.test.prefix'] = 'test value (with prefix) is' - res = pwm.Meter(settings=settings).test('short') - self.assertEqual( - sorted(res[1]), - ['casemix', 'charmix', 'length', 'notword', 'phrase', 'test']) - self.assertEqual( - res[1]['test'], - 'test value (with prefix) is: short') - - #---------------------------------------------------------------------------- - def test_strength(self): - meter = pwm.Meter() - passwords = ( - '', - ' ', - 'password', - 'password1', - 'pssa', - 'pssawrd', - 'pss4wr', - 'pss4wr0d', - 'p$$4wr0d!', - 'p$$4WR0d!', - 'p$4$WR0d!', - 'my voice is my p$$4WR0d!', - 'mY voiCE is my p$$4WR0d!', - 'mY voiC3 !s m-y p$$4WR0d!', - ) - for idx, pw0 in enumerate(passwords[:-1]): - pw1 = passwords[idx + 1] - sc0 = meter.test(pw0)[0] - sc1 = meter.test(pw1)[0] - self.assertLessEqual( - sc0, sc1, - 'expected password "%s" (%f) to be as strong or stronger than "%s" (%f)' - % (pw1, sc1, pw0, sc0)) - -#------------------------------------------------------------------------------ -# end of $Id$ -#------------------------------------------------------------------------------ diff --git a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/METADATA b/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/METADATA deleted file mode 100644 index c212df5..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/METADATA +++ /dev/null @@ -1,93 +0,0 @@ -Metadata-Version: 2.1 -Name: passwordstrength -Version: 0.2.4 -Summary: Password strength calculator in Python -Home-page: https://github.com/patarapolw/passwordstrength -Author: Pacharapol Withayasakpunt -Author-email: patarapolw@gmail.com -License: MIT -Keywords: password password_strength password_meter -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: Information Technology -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Topic :: Security :: Cryptography -Requires-Python: >=3.5 -Description-Content-Type: text/markdown -Provides-Extra: analysis -Provides-Extra: tests -Requires-Dist: PyYAML -Provides-Extra: analysis -Requires-Dist: randomsentence; extra == 'analysis' -Requires-Dist: pronounceable; extra == 'analysis' -Requires-Dist: memorable-password; extra == 'analysis' -Provides-Extra: tests -Requires-Dist: pytest; extra == 'tests' - -# PasswordStrength - -[![Build Status](https://travis-ci.org/patarapolw/passwordstrength.svg?branch=master)](https://travis-ci.org/patarapolw/passwordstrength) -[![Latest Version](https://pypip.in/version/passwordstrength/badge.svg)](https://pypi.python.org/pypi/passwordstrength/) -[![PyPI license](https://img.shields.io/pypi/l/passwordstrength.svg)](https://pypi.python.org/pypi/passwordstrength/) -[![PyPI pyversions](https://img.shields.io/pypi/pyversions/passwordstrength.svg)](https://pypi.python.org/pypi/passwordstrength/) - - -Editable password strength calculator for Python. - -Update: Add entropy module! - -## Entropy - -This calculates the ability to tolerate dictionary attack. Probably, an entropy of [2\*\*70](https://pthree.org/2018/04/19/use-a-good-password-generator/) is eventually needed. - -```pycon ->>> from passwordstrength.entropy import Entropy ->>> import math ->>> entropy = Entropy() ->>> math.log2(entropy.entropy('asdhaskj')) -39.603517745128734 ->>> math.log2(entropy.entropy('hello')) -11.240195053979924 ->>> math.log2(entropy.entropy('helloworld')) -49.00439718141092 ->>> math.log2(entropy.entropy('@sdhaskj')) -41.54693421676237 ->>> math.log2(entropy.entropy('@sQsA$!j')) -48.43376716002963 -``` - -## Password Meter - -This is based on http://www.passwordmeter.com - -### Usage - -```pycon ->>> from passwordstrength.passwordmeter import PasswordStrength ->>> strength = PasswordStrength('password') ->>> strength.strength() -9 ->>> strength.rule_scores() -{'Additions': {'nAlphaLCBonus': 0, - 'nAlphaUCBonus': 0, - 'nLengthBonus': 32, - 'nMidCharBonus': 0, - 'nNumberBonus': 0, - 'nSymbolBonus': 0}, - 'Deductions': {'nAlphasOnlyBonus': 8, - 'nConsecAlphaLCBonus': 14, - 'nConsecAlphaUCBonus': 0, - 'nConsecNumberBonus': 0, - 'nNumbersOnlyBonus': 0, - 'nRepCharBonus': 1, - 'nSeqAlphaBonus': 0, - 'nSeqNumberBonus': 0, - 'nSeqSymbolBonus': 0}} -``` - - diff --git a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/RECORD b/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/RECORD deleted file mode 100644 index 5d2908b..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/RECORD +++ /dev/null @@ -1,16 +0,0 @@ -passwordstrength/dir.py,sha256=VQ4enoLrNq0_zTM3FM4Z_CEd-6Lmu6LsRFs2muN5eHY,300 -passwordstrength/entropy.py,sha256=8-cd9ss4mAlSJsT51a9VU521ibp_ygAZ50KKCHYkbkI,3347 -passwordstrength/passwordmeter.py,sha256=aht1MGXsvJt4ZE9GSllOnje9tUiS0gHS8U8bbsRqn-w,10192 -passwordstrength/util.py,sha256=fIxUdHGazFH5xBrT7tL_WjTK9FoVcmQPfM7a22Rd6AI,894 -passwordstrength/database/google-10000-english.txt,sha256=nJZdOEUm-sxZJg6U-Mz_FYJjP6OFAEq-FFXtRXBirLw,75888 -passwordstrength/database/leetspeak.yaml,sha256=eWAeeKHfpAcT52AfG_E-lLkMPRp9FOS96Wzu2lSoxT0,244 -passwordstrength/database/words.txt,sha256=J1lZPvlB7UJInFTH3Rer2m4ZCblCu8vlapWcHlpyGGA,4862966 -passwordstrength-0.2.4.dist-info/METADATA,sha256=pdZYYN7Z7uuI8uN8VRQdChAXJtDYTprRLot_KvUCgxQ,2964 -passwordstrength-0.2.4.dist-info/RECORD,, -passwordstrength-0.2.4.dist-info/WHEEL,sha256=FRuHuBX28RTgsOL603qIpbSc2WeDgbsFBWKj9XFOCpg,92 -passwordstrength-0.2.4.dist-info/top_level.txt,sha256=F1Zec3EFMl6haykSK-uk4RSaZ7hDntUsM-oCuwO6lUQ,17 -passwordstrength-0.2.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -passwordstrength/__pycache__/dir.cpython-36.pyc,, -passwordstrength/__pycache__/util.cpython-36.pyc,, -passwordstrength/__pycache__/entropy.cpython-36.pyc,, -passwordstrength/__pycache__/passwordmeter.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/WHEEL b/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/WHEEL deleted file mode 100644 index d1acba1..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.31.0) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/top_level.txt deleted file mode 100644 index 204ee87..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength-0.2.4.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -passwordstrength diff --git a/venv/lib/python3.6/site-packages/passwordstrength/database/google-10000-english.txt b/venv/lib/python3.6/site-packages/passwordstrength/database/google-10000-english.txt deleted file mode 100644 index 3164d7b..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/database/google-10000-english.txt +++ /dev/null @@ -1,10000 +0,0 @@ -the -of -and -to -a -in -for -is -on -that -by -this -with -i -you -it -not -or -be -are -from -at -as -your -all -have -new -more -an -was -we -will -home -can -us -about -if -page -my -has -search -free -but -our -one -other -do -no -information -time -they -site -he -up -may -what -which -their -news -out -use -any -there -see -only -so -his -when -contact -here -business -who -web -also -now -help -get -pm -view -online -c -e -first -am -been -would -how -were -me -s -services -some -these -click -its -like -service -x -than -find -price -date -back -top -people -had -list -name -just -over -state -year -day -into -email -two -health -n -world -re -next -used -go -b -work -last -most -products -music -buy -data -make -them -should -product -system -post -her -city -t -add -policy -number -such -please -available -copyright -support -message -after -best -software -then -jan -good -video -well -d -where -info -rights -public -books -high -school -through -m -each -links -she -review -years -order -very -privacy -book -items -company -r -read -group -sex -need -many -user -said -de -does -set -under -general -research -university -january -mail -full -map -reviews -program -life -know -games -way -days -management -p -part -could -great -united -hotel -real -f -item -international -center -ebay -must -store -travel -comments -made -development -report -off -member -details -line -terms -before -hotels -did -send -right -type -because -local -those -using -results -office -education -national -car -design -take -posted -internet -address -community -within -states -area -want -phone -dvd -shipping -reserved -subject -between -forum -family -l -long -based -w -code -show -o -even -black -check -special -prices -website -index -being -women -much -sign -file -link -open -today -technology -south -case -project -same -pages -uk -version -section -own -found -sports -house -related -security -both -g -county -american -photo -game -members -power -while -care -network -down -computer -systems -three -total -place -end -following -download -h -him -without -per -access -think -north -resources -current -posts -big -media -law -control -water -history -pictures -size -art -personal -since -including -guide -shop -directory -board -location -change -white -text -small -rating -rate -government -children -during -usa -return -students -v -shopping -account -times -sites -level -digital -profile -previous -form -events -love -old -john -main -call -hours -image -department -title -description -non -k -y -insurance -another -why -shall -property -class -cd -still -money -quality -every -listing -content -country -private -little -visit -save -tools -low -reply -customer -december -compare -movies -include -college -value -article -york -man -card -jobs -provide -j -food -source -author -different -press -u -learn -sale -around -print -course -job -canada -process -teen -room -stock -training -too -credit -point -join -science -men -categories -advanced -west -sales -look -english -left -team -estate -box -conditions -select -windows -photos -gay -thread -week -category -note -live -large -gallery -table -register -however -june -october -november -market -library -really -action -start -series -model -features -air -industry -plan -human -provided -tv -yes -required -second -hot -accessories -cost -movie -forums -march -la -september -better -say -questions -july -yahoo -going -medical -test -friend -come -dec -server -pc -study -application -cart -staff -articles -san -feedback -again -play -looking -issues -april -never -users -complete -street -topic -comment -financial -things -working -against -standard -tax -person -below -mobile -less -got -blog -party -payment -equipment -login -student -let -programs -offers -legal -above -recent -park -stores -side -act -problem -red -give -memory -performance -social -q -august -quote -language -story -sell -options -experience -rates -create -key -body -young -america -important -field -few -east -paper -single -ii -age -activities -club -example -girls -additional -password -z -latest -something -road -gift -question -changes -night -ca -hard -texas -oct -pay -four -poker -status -browse -issue -range -building -seller -court -february -always -result -audio -light -write -war -nov -offer -blue -groups -al -easy -given -files -event -release -analysis -request -fax -china -making -picture -needs -possible -might -professional -yet -month -major -star -areas -future -space -committee -hand -sun -cards -problems -london -washington -meeting -rss -become -interest -id -child -keep -enter -california -porn -share -similar -garden -schools -million -added -reference -companies -listed -baby -learning -energy -run -delivery -net -popular -term -film -stories -put -computers -journal -reports -co -try -welcome -central -images -president -notice -god -original -head -radio -until -cell -color -self -council -away -includes -track -australia -discussion -archive -once -others -entertainment -agreement -format -least -society -months -log -safety -friends -sure -faq -trade -edition -cars -messages -marketing -tell -further -updated -association -able -having -provides -david -fun -already -green -studies -close -common -drive -specific -several -gold -feb -living -sep -collection -called -short -arts -lot -ask -display -limited -powered -solutions -means -director -daily -beach -past -natural -whether -due -et -electronics -five -upon -period -planning -database -says -official -weather -mar -land -average -done -technical -window -france -pro -region -island -record -direct -microsoft -conference -environment -records -st -district -calendar -costs -style -url -front -statement -update -parts -aug -ever -downloads -early -miles -sound -resource -present -applications -either -ago -document -word -works -material -bill -apr -written -talk -federal -hosting -rules -final -adult -tickets -thing -centre -requirements -via -cheap -nude -kids -finance -true -minutes -else -mark -third -rock -gifts -europe -reading -topics -bad -individual -tips -plus -auto -cover -usually -edit -together -videos -percent -fast -function -fact -unit -getting -global -tech -meet -far -economic -en -player -projects -lyrics -often -subscribe -submit -germany -amount -watch -included -feel -though -bank -risk -thanks -everything -deals -various -words -linux -jul -production -commercial -james -weight -town -heart -advertising -received -choose -treatment -newsletter -archives -points -knowledge -magazine -error -camera -jun -girl -currently -construction -toys -registered -clear -golf -receive -domain -methods -chapter -makes -protection -policies -loan -wide -beauty -manager -india -position -taken -sort -listings -models -michael -known -half -cases -step -engineering -florida -simple -quick -none -wireless -license -paul -friday -lake -whole -annual -published -later -basic -sony -shows -corporate -google -church -method -purchase -customers -active -response -practice -hardware -figure -materials -fire -holiday -chat -enough -designed -along -among -death -writing -speed -html -countries -loss -face -brand -discount -higher -effects -created -remember -standards -oil -bit -yellow -political -increase -advertise -kingdom -base -near -environmental -thought -stuff -french -storage -oh -japan -doing -loans -shoes -entry -stay -nature -orders -availability -africa -summary -turn -mean -growth -notes -agency -king -monday -european -activity -copy -although -drug -pics -western -income -force -cash -employment -overall -bay -river -commission -ad -package -contents -seen -players -engine -port -album -regional -stop -supplies -started -administration -bar -institute -views -plans -double -dog -build -screen -exchange -types -soon -sponsored -lines -electronic -continue -across -benefits -needed -season -apply -someone -held -ny -anything -printer -condition -effective -believe -organization -effect -asked -eur -mind -sunday -selection -casino -pdf -lost -tour -menu -volume -cross -anyone -mortgage -hope -silver -corporation -wish -inside -solution -mature -role -rather -weeks -addition -came -supply -nothing -certain -usr -executive -running -lower -necessary -union -jewelry -according -dc -clothing -mon -com -particular -fine -names -robert -homepage -hour -gas -skills -six -bush -islands -advice -career -military -rental -decision -leave -british -teens -pre -huge -sat -woman -facilities -zip -bid -kind -sellers -middle -move -cable -opportunities -taking -values -division -coming -tuesday -object -lesbian -appropriate -machine -logo -length -actually -nice -score -statistics -client -ok -returns -capital -follow -sample -investment -sent -shown -saturday -christmas -england -culture -band -flash -ms -lead -george -choice -went -starting -registration -fri -thursday -courses -consumer -hi -airport -foreign -artist -outside -furniture -levels -channel -letter -mode -phones -ideas -wednesday -structure -fund -summer -allow -degree -contract -button -releases -wed -homes -super -male -matter -custom -virginia -almost -took -located -multiple -asian -distribution -editor -inn -industrial -cause -potential -song -cnet -ltd -los -hp -focus -late -fall -featured -idea -rooms -female -responsible -inc -communications -win -associated -thomas -primary -cancer -numbers -reason -tool -browser -spring -foundation -answer -voice -eg -friendly -schedule -documents -communication -purpose -feature -bed -comes -police -everyone -independent -ip -approach -cameras -brown -physical -operating -hill -maps -medicine -deal -hold -ratings -chicago -forms -glass -happy -tue -smith -wanted -developed -thank -safe -unique -survey -prior -telephone -sport -ready -feed -animal -sources -mexico -population -pa -regular -secure -navigation -operations -therefore -ass -simply -evidence -station -christian -round -paypal -favorite -understand -option -master -valley -recently -probably -thu -rentals -sea -built -publications -blood -cut -worldwide -improve -connection -publisher -hall -larger -anti -networks -earth -parents -nokia -impact -transfer -introduction -kitchen -strong -tel -carolina -wedding -properties -hospital -ground -overview -ship -accommodation -owners -disease -tx -excellent -paid -italy -perfect -hair -opportunity -kit -classic -basis -command -cities -william -express -anal -award -distance -tree -peter -assessment -ensure -thus -wall -ie -involved -el -extra -especially -interface -pussy -partners -budget -rated -guides -success -maximum -ma -operation -existing -quite -selected -boy -amazon -patients -restaurants -beautiful -warning -wine -locations -horse -vote -forward -flowers -stars -significant -lists -technologies -owner -retail -animals -useful -directly -manufacturer -ways -est -son -providing -rule -mac -housing -takes -iii -gmt -bring -catalog -searches -max -trying -mother -authority -considered -told -xml -traffic -programme -joined -input -strategy -feet -agent -valid -bin -modern -senior -ireland -sexy -teaching -door -grand -testing -trial -charge -units -instead -canadian -cool -normal -wrote -enterprise -ships -entire -educational -md -leading -metal -positive -fl -fitness -chinese -opinion -mb -asia -football -abstract -uses -output -funds -mr -greater -likely -develop -employees -artists -alternative -processing -responsibility -resolution -java -guest -seems -publication -pass -relations -trust -van -contains -session -multi -photography -republic -fees -components -vacation -century -academic -assistance -completed -skin -graphics -indian -prev -ads -mary -il -expected -ring -grade -dating -pacific -mountain -organizations -pop -filter -mailing -vehicle -longer -consider -int -northern -behind -panel -floor -german -buying -match -proposed -default -require -iraq -boys -outdoor -deep -morning -otherwise -allows -rest -protein -plant -reported -hit -transportation -mm -pool -mini -politics -partner -disclaimer -authors -boards -faculty -parties -fish -membership -mission -eye -string -sense -modified -pack -released -stage -internal -goods -recommended -born -unless -richard -detailed -japanese -race -approved -background -target -except -character -usb -maintenance -ability -maybe -functions -ed -moving -brands -places -php -pretty -trademarks -phentermine -spain -southern -yourself -etc -winter -rape -battery -youth -pressure -submitted -boston -incest -debt -keywords -medium -television -interested -core -break -purposes -throughout -sets -dance -wood -msn -itself -defined -papers -playing -awards -fee -studio -reader -virtual -device -established -answers -rent -las -remote -dark -programming -external -apple -le -regarding -instructions -min -offered -theory -enjoy -remove -aid -surface -minimum -visual -host -variety -teachers -isbn -martin -manual -block -subjects -agents -increased -repair -fair -civil -steel -understanding -songs -fixed -wrong -beginning -hands -associates -finally -az -updates -desktop -classes -paris -ohio -gets -sector -capacity -requires -jersey -un -fat -fully -father -electric -saw -instruments -quotes -officer -driver -businesses -dead -respect -unknown -specified -restaurant -mike -trip -pst -worth -mi -procedures -poor -teacher -xxx -eyes -relationship -workers -farm -fucking -georgia -peace -traditional -campus -tom -showing -creative -coast -benefit -progress -funding -devices -lord -grant -sub -agree -fiction -hear -sometimes -watches -careers -beyond -goes -families -led -museum -themselves -fan -transport -interesting -blogs -wife -evaluation -accepted -former -implementation -ten -hits -zone -complex -th -cat -galleries -references -die -presented -jack -flat -flow -agencies -literature -respective -parent -spanish -michigan -columbia -setting -dr -scale -stand -economy -highest -helpful -monthly -critical -frame -musical -definition -secretary -angeles -networking -path -australian -employee -chief -gives -kb -bottom -magazines -packages -detail -francisco -laws -changed -pet -heard -begin -individuals -colorado -royal -clean -switch -russian -largest -african -guy -titles -relevant -guidelines -justice -connect -bible -dev -cup -basket -applied -weekly -vol -installation -described -demand -pp -suite -vegas -na -square -chris -attention -advance -skip -diet -army -auction -gear -lee -os -difference -allowed -correct -charles -nation -selling -lots -piece -sheet -firm -seven -older -illinois -regulations -elements -species -jump -cells -module -resort -facility -random -pricing -dvds -certificate -minister -motion -looks -fashion -directions -visitors -documentation -monitor -trading -forest -calls -whose -coverage -couple -giving -chance -vision -ball -ending -clients -actions -listen -discuss -accept -automotive -naked -goal -successful -sold -wind -communities -clinical -situation -sciences -markets -lowest -highly -publishing -appear -emergency -developing -lives -currency -leather -determine -milf -temperature -palm -announcements -patient -actual -historical -stone -bob -commerce -ringtones -perhaps -persons -difficult -scientific -satellite -fit -tests -village -accounts -amateur -ex -met -pain -xbox -particularly -factors -coffee -www -settings -cum -buyer -cultural -steve -easily -oral -ford -poster -edge -functional -root -au -fi -closed -holidays -ice -pink -zealand -balance -monitoring -graduate -replies -shot -nc -architecture -initial -label -thinking -scott -llc -sec -recommend -canon -hardcore -league -waste -minute -bus -provider -optional -dictionary -cold -accounting -manufacturing -sections -chair -fishing -effort -phase -fields -bag -fantasy -po -letters -motor -va -professor -context -install -shirt -apparel -generally -continued -foot -mass -crime -count -breast -techniques -ibm -rd -johnson -sc -quickly -dollars -websites -religion -claim -driving -permission -surgery -patch -heat -wild -measures -generation -kansas -miss -chemical -doctor -task -reduce -brought -himself -nor -component -enable -exercise -bug -santa -mid -guarantee -leader -diamond -israel -se -processes -soft -servers -alone -meetings -seconds -jones -arizona -keyword -interests -flight -congress -fuel -username -walk -fuck -produced -italian -paperback -classifieds -wait -supported -pocket -saint -rose -freedom -argument -competition -creating -jim -drugs -joint -premium -providers -fresh -characters -attorney -upgrade -di -factor -growing -thousands -km -stream -apartments -pick -hearing -eastern -auctions -therapy -entries -dates -generated -signed -upper -administrative -serious -prime -samsung -limit -began -louis -steps -errors -shops -bondage -del -efforts -informed -ga -ac -thoughts -creek -ft -worked -quantity -urban -practices -sorted -reporting -essential -myself -tours -platform -load -affiliate -labor -immediately -admin -nursing -defense -machines -designated -tags -heavy -covered -recovery -joe -guys -integrated -configuration -cock -merchant -comprehensive -expert -universal -protect -drop -solid -cds -presentation -languages -became -orange -compliance -vehicles -prevent -theme -rich -im -campaign -marine -improvement -vs -guitar -finding -pennsylvania -examples -ipod -saying -spirit -ar -claims -porno -challenge -motorola -acceptance -strategies -mo -seem -affairs -touch -intended -towards -sa -goals -hire -election -suggest -branch -charges -serve -affiliates -reasons -magic -mount -smart -talking -gave -ones -latin -multimedia -xp -tits -avoid -certified -manage -corner -rank -computing -oregon -element -birth -virus -abuse -interactive -requests -separate -quarter -procedure -leadership -tables -define -racing -religious -facts -breakfast -kong -column -plants -faith -chain -developer -identify -avenue -missing -died -approximately -domestic -sitemap -recommendations -moved -houston -reach -comparison -mental -viewed -moment -extended -sequence -inch -attack -sorry -centers -opening -damage -lab -reserve -recipes -cvs -gamma -plastic -produce -snow -placed -truth -counter -failure -follows -eu -weekend -dollar -camp -ontario -automatically -des -minnesota -films -bridge -native -fill -williams -movement -printing -baseball -owned -approval -draft -chart -played -contacts -cc -jesus -readers -clubs -lcd -wa -jackson -equal -adventure -matching -offering -shirts -profit -leaders -posters -institutions -assistant -variable -ave -dj -advertisement -expect -parking -headlines -yesterday -compared -determined -wholesale -workshop -russia -gone -codes -kinds -extension -seattle -statements -golden -completely -teams -fort -cm -wi -lighting -senate -forces -funny -brother -gene -turned -portable -tried -electrical -applicable -disc -returned -pattern -ct -hentai -boat -named -theatre -laser -earlier -manufacturers -sponsor -classical -icon -warranty -dedicated -indiana -direction -harry -basketball -objects -ends -delete -evening -assembly -nuclear -taxes -mouse -signal -criminal -issued -brain -sexual -wisconsin -powerful -dream -obtained -false -da -cast -flower -felt -personnel -passed -supplied -identified -falls -pic -soul -aids -opinions -promote -stated -stats -hawaii -professionals -appears -carry -flag -decided -nj -covers -hr -em -advantage -hello -designs -maintain -tourism -priority -newsletters -adults -clips -savings -iv -graphic -atom -payments -rw -estimated -binding -brief -ended -winning -eight -anonymous -iron -straight -script -served -wants -miscellaneous -prepared -void -dining -alert -integration -atlanta -dakota -tag -interview -mix -framework -disk -installed -queen -vhs -credits -clearly -fix -handle -sweet -desk -criteria -pubmed -dave -massachusetts -diego -hong -vice -associate -ne -truck -behavior -enlarge -ray -frequently -revenue -measure -changing -votes -du -duty -looked -discussions -bear -gain -festival -laboratory -ocean -flights -experts -signs -lack -depth -iowa -whatever -logged -laptop -vintage -train -exactly -dry -explore -maryland -spa -concept -nearly -eligible -checkout -reality -forgot -handling -origin -knew -gaming -feeds -billion -destination -scotland -faster -intelligence -dallas -bought -con -ups -nations -route -followed -specifications -broken -tripadvisor -frank -alaska -zoom -blow -battle -residential -anime -speak -decisions -industries -protocol -query -clip -partnership -editorial -nt -expression -es -equity -provisions -speech -wire -principles -suggestions -rural -shared -sounds -replacement -tape -strategic -judge -spam -economics -acid -bytes -cent -forced -compatible -fight -apartment -height -null -zero -speaker -filed -gb -netherlands -obtain -bc -consulting -recreation -offices -designer -remain -managed -pr -failed -marriage -roll -korea -banks -fr -participants -secret -bath -aa -kelly -leads -negative -austin -favorites -toronto -theater -springs -missouri -andrew -var -perform -healthy -translation -estimates -font -assets -injury -mt -joseph -ministry -drivers -lawyer -figures -married -protected -proposal -sharing -philadelphia -portal -waiting -birthday -beta -fail -gratis -banking -officials -brian -toward -won -slightly -assist -conduct -contained -lingerie -shemale -legislation -calling -parameters -jazz -serving -bags -profiles -miami -comics -matters -houses -doc -postal -relationships -tennessee -wear -controls -breaking -combined -ultimate -wales -representative -frequency -introduced -minor -finish -departments -residents -noted -displayed -mom -reduced -physics -rare -spent -performed -extreme -samples -davis -daniel -bars -reviewed -row -oz -forecast -removed -helps -singles -administrator -cycle -amounts -contain -accuracy -dual -rise -usd -sleep -mg -bird -pharmacy -brazil -creation -static -scene -hunter -addresses -lady -crystal -famous -writer -chairman -violence -fans -oklahoma -speakers -drink -academy -dynamic -gender -eat -permanent -agriculture -dell -cleaning -constitutes -portfolio -practical -delivered -collectibles -infrastructure -exclusive -seat -concerns -colour -vendor -originally -intel -utilities -philosophy -regulation -officers -reduction -aim -bids -referred -supports -nutrition -recording -regions -junior -toll -les -cape -ann -rings -meaning -tip -secondary -wonderful -mine -ladies -henry -ticket -announced -guess -agreed -prevention -whom -ski -soccer -math -import -posting -presence -instant -mentioned -automatic -healthcare -viewing -maintained -ch -increasing -majority -connected -christ -dan -dogs -sd -directors -aspects -austria -ahead -moon -participation -scheme -utility -preview -fly -manner -matrix -containing -combination -devel -amendment -despite -strength -guaranteed -turkey -libraries -proper -distributed -degrees -singapore -enterprises -delta -fear -seeking -inches -phoenix -rs -convention -shares -principal -daughter -standing -voyeur -comfort -colors -wars -cisco -ordering -kept -alpha -appeal -cruise -bonus -certification -previously -hey -bookmark -buildings -specials -beat -disney -household -batteries -adobe -smoking -bbc -becomes -drives -arms -alabama -tea -improved -trees -avg -achieve -positions -dress -subscription -dealer -contemporary -sky -utah -nearby -rom -carried -happen -exposure -panasonic -hide -permalink -signature -gambling -refer -miller -provision -outdoors -clothes -caused -luxury -babes -frames -viagra -certainly -indeed -newspaper -toy -circuit -layer -printed -slow -removal -easier -src -liability -trademark -hip -printers -faqs -nine -adding -kentucky -mostly -eric -spot -taylor -trackback -prints -spend -factory -interior -revised -grow -americans -optical -promotion -relative -amazing -clock -dot -hiv -identity -suites -conversion -feeling -hidden -reasonable -victoria -serial -relief -revision -broadband -influence -ratio -pda -importance -rain -onto -dsl -planet -webmaster -copies -recipe -zum -permit -seeing -proof -dna -diff -tennis -bass -prescription -bedroom -empty -instance -hole -pets -ride -licensed -orlando -specifically -tim -bureau -maine -sql -represent -conservation -pair -ideal -specs -recorded -don -pieces -finished -parks -dinner -lawyers -sydney -stress -cream -ss -runs -trends -yeah -discover -sexo -ap -patterns -boxes -louisiana -hills -javascript -fourth -nm -advisor -mn -marketplace -nd -evil -aware -wilson -shape -evolution -irish -certificates -objectives -stations -suggested -gps -op -remains -acc -greatest -firms -concerned -euro -operator -structures -generic -encyclopedia -usage -cap -ink -charts -continuing -mixed -census -interracial -peak -tn -competitive -exist -wheel -transit -dick -suppliers -salt -compact -poetry -lights -tracking -angel -bell -keeping -preparation -attempt -receiving -matches -accordance -width -noise -engines -forget -array -discussed -accurate -stephen -elizabeth -climate -reservations -pin -playstation -alcohol -greek -instruction -managing -annotation -sister -raw -differences -walking -explain -smaller -newest -establish -gnu -happened -expressed -jeff -extent -sharp -lesbians -ben -lane -paragraph -kill -mathematics -aol -compensation -ce -export -managers -aircraft -modules -sweden -conflict -conducted -versions -employer -occur -percentage -knows -mississippi -describe -concern -backup -requested -citizens -connecticut -heritage -personals -immediate -holding -trouble -spread -coach -kevin -agricultural -expand -supporting -audience -assigned -jordan -collections -ages -participate -plug -specialist -cook -affect -virgin -experienced -investigation -raised -hat -institution -directed -dealers -searching -sporting -helping -perl -affected -lib -bike -totally -plate -expenses -indicate -blonde -ab -proceedings -favourite -transmission -anderson -utc -characteristics -der -lose -organic -seek -experiences -albums -cheats -extremely -verzeichnis -contracts -guests -hosted -diseases -concerning -developers -equivalent -chemistry -tony -neighborhood -nevada -kits -thailand -variables -agenda -anyway -continues -tracks -advisory -cam -curriculum -logic -template -prince -circle -soil -grants -anywhere -psychology -responses -atlantic -wet -circumstances -edward -investor -identification -ram -leaving -wildlife -appliances -matt -elementary -cooking -speaking -sponsors -fox -unlimited -respond -sizes -plain -exit -entered -iran -arm -keys -launch -wave -checking -costa -belgium -printable -holy -acts -guidance -mesh -trail -enforcement -symbol -crafts -highway -buddy -hardcover -observed -dean -setup -poll -booking -glossary -fiscal -celebrity -styles -denver -unix -filled -bond -channels -ericsson -appendix -notify -blues -chocolate -pub -portion -scope -hampshire -supplier -cables -cotton -bluetooth -controlled -requirement -authorities -biology -dental -killed -border -ancient -debate -representatives -starts -pregnancy -causes -arkansas -biography -leisure -attractions -learned -transactions -notebook -explorer -historic -attached -opened -tm -husband -disabled -authorized -crazy -upcoming -britain -concert -retirement -scores -financing -efficiency -sp -comedy -adopted -efficient -weblog -linear -commitment -specialty -bears -jean -hop -carrier -edited -constant -visa -mouth -jewish -meter -linked -portland -interviews -concepts -nh -gun -reflect -pure -deliver -wonder -hell -lessons -fruit -begins -qualified -reform -lens -alerts -treated -discovery -draw -mysql -classified -relating -assume -confidence -alliance -fm -confirm -warm -neither -lewis -howard -offline -leaves -engineer -lifestyle -consistent -replace -clearance -connections -inventory -converter -suck -organisation -babe -checks -reached -becoming -blowjob -safari -objective -indicated -sugar -crew -legs -sam -stick -securities -allen -pdt -relation -enabled -genre -slide -montana -volunteer -tested -rear -democratic -enhance -switzerland -exact -bound -parameter -adapter -processor -node -formal -dimensions -contribute -lock -hockey -storm -micro -colleges -laptops -mile -showed -challenges -editors -mens -threads -bowl -supreme -brothers -recognition -presents -ref -tank -submission -dolls -estimate -encourage -navy -kid -regulatory -inspection -consumers -cancel -limits -territory -transaction -manchester -weapons -paint -delay -pilot -outlet -contributions -continuous -db -czech -resulting -cambridge -initiative -novel -pan -execution -disability -increases -ultra -winner -idaho -contractor -ph -episode -examination -potter -dish -plays -bulletin -ia -pt -indicates -modify -oxford -adam -truly -epinions -painting -committed -extensive -affordable -universe -candidate -databases -patent -slot -psp -outstanding -ha -eating -perspective -planned -watching -lodge -messenger -mirror -tournament -consideration -ds -discounts -sterling -sessions -kernel -boobs -stocks -buyers -journals -gray -catalogue -ea -jennifer -antonio -charged -broad -taiwan -und -chosen -demo -greece -lg -swiss -sarah -clark -labour -hate -terminal -publishers -nights -behalf -caribbean -liquid -rice -nebraska -loop -salary -reservation -foods -gourmet -guard -properly -orleans -saving -nfl -remaining -empire -resume -twenty -newly -raise -prepare -avatar -gary -depending -illegal -expansion -vary -hundreds -rome -arab -lincoln -helped -premier -tomorrow -purchased -milk -decide -consent -drama -visiting -performing -downtown -keyboard -contest -collected -nw -bands -boot -suitable -ff -absolutely -millions -lunch -dildo -audit -push -chamber -guinea -findings -muscle -featuring -iso -implement -clicking -scheduled -polls -typical -tower -yours -sum -misc -calculator -significantly -chicken -temporary -attend -shower -alan -sending -jason -tonight -dear -sufficient -holdem -shell -province -catholic -oak -vat -awareness -vancouver -governor -beer -seemed -contribution -measurement -swimming -spyware -formula -constitution -packaging -solar -jose -catch -jane -pakistan -ps -reliable -consultation -northwest -sir -doubt -earn -finder -unable -periods -classroom -tasks -democracy -attacks -kim -wallpaper -merchandise -const -resistance -doors -symptoms -resorts -biggest -memorial -visitor -twin -forth -insert -baltimore -gateway -ky -dont -alumni -drawing -candidates -charlotte -ordered -biological -fighting -transition -happens -preferences -spy -romance -instrument -bruce -split -themes -powers -heaven -br -bits -pregnant -twice -classification -focused -egypt -physician -hollywood -bargain -wikipedia -cellular -norway -vermont -asking -blocks -normally -lo -spiritual -hunting -diabetes -suit -ml -shift -chip -res -sit -bodies -photographs -cutting -wow -simon -writers -marks -flexible -loved -favourites -mapping -numerous -relatively -birds -satisfaction -represents -char -indexed -pittsburgh -superior -preferred -saved -paying -cartoon -shots -intellectual -moore -granted -choices -carbon -spending -comfortable -magnetic -interaction -listening -effectively -registry -crisis -outlook -massive -denmark -employed -bright -treat -header -cs -poverty -formed -piano -echo -que -grid -sheets -patrick -experimental -puerto -revolution -consolidation -displays -plasma -allowing -earnings -voip -mystery -landscape -dependent -mechanical -journey -delaware -bidding -consultants -risks -banner -applicant -charter -fig -barbara -cooperation -counties -acquisition -ports -implemented -sf -directories -recognized -dreams -blogger -notification -kg -licensing -stands -teach -occurred -textbooks -rapid -pull -hairy -diversity -cleveland -ut -reverse -deposit -seminar -investments -latina -nasa -wheels -sexcam -specify -accessibility -dutch -sensitive -templates -formats -tab -depends -boots -holds -router -concrete -si -editing -poland -folder -womens -css -completion -upload -pulse -universities -technique -contractors -milfhunter -voting -courts -notices -subscriptions -calculate -mc -detroit -alexander -broadcast -converted -metro -toshiba -anniversary -improvements -strip -specification -pearl -accident -nick -accessible -accessory -resident -plot -qty -possibly -airline -typically -representation -regard -pump -exists -arrangements -smooth -conferences -uniprotkb -beastiality -strike -consumption -birmingham -flashing -lp -narrow -afternoon -threat -surveys -sitting -putting -consultant -controller -ownership -committees -penis -legislative -researchers -vietnam -trailer -anne -castle -gardens -missed -malaysia -unsubscribe -antique -labels -willing -bio -molecular -upskirt -acting -heads -stored -exam -logos -residence -attorneys -milfs -antiques -density -hundred -ryan -operators -strange -sustainable -philippines -statistical -beds -breasts -mention -innovation -pcs -employers -grey -parallel -honda -amended -operate -bills -bold -bathroom -stable -opera -definitions -von -doctors -lesson -cinema -asset -ag -scan -elections -drinking -blowjobs -reaction -blank -enhanced -entitled -severe -generate -stainless -newspapers -hospitals -vi -deluxe -humor -aged -monitors -exception -lived -duration -bulk -successfully -indonesia -pursuant -sci -fabric -edt -visits -primarily -tight -domains -capabilities -pmid -contrast -recommendation -flying -recruitment -sin -berlin -cute -organized -ba -para -siemens -adoption -improving -cr -expensive -meant -capture -pounds -buffalo -organisations -plane -pg -explained -seed -programmes -desire -expertise -mechanism -camping -ee -jewellery -meets -welfare -peer -caught -eventually -marked -driven -measured -medline -bottle -agreements -considering -innovative -marshall -massage -rubber -conclusion -closing -tampa -thousand -meat -legend -grace -susan -ing -ks -adams -python -monster -alex -bang -villa -bone -columns -disorders -bugs -collaboration -hamilton -detection -ftp -cookies -inner -formation -tutorial -med -engineers -entity -cruises -gate -holder -proposals -moderator -sw -tutorials -settlement -portugal -lawrence -roman -duties -valuable -erotic -tone -collectables -ethics -forever -dragon -busy -captain -fantastic -imagine -brings -heating -leg -neck -hd -wing -governments -purchasing -scripts -abc -stereo -appointed -taste -dealing -commit -tiny -operational -rail -airlines -liberal -livecam -jay -trips -gap -sides -tube -turns -corresponding -descriptions -cache -belt -jacket -determination -animation -oracle -er -matthew -lease -productions -aviation -hobbies -proud -excess -disaster -console -commands -jr -telecommunications -instructor -giant -achieved -injuries -shipped -bestiality -seats -approaches -biz -alarm -voltage -anthony -nintendo -usual -loading -stamps -appeared -franklin -angle -rob -vinyl -highlights -mining -designers -melbourne -ongoing -worst -imaging -betting -scientists -liberty -wyoming -blackjack -argentina -era -convert -possibility -analyst -commissioner -dangerous -garage -exciting -reliability -thongs -gcc -unfortunately -respectively -volunteers -attachment -ringtone -finland -morgan -derived -pleasure -honor -asp -oriented -eagle -desktops -pants -columbus -nurse -prayer -appointment -workshops -hurricane -quiet -luck -postage -producer -represented -mortgages -dial -responsibilities -cheese -comic -carefully -jet -productivity -investors -crown -par -underground -diagnosis -maker -crack -principle -picks -vacations -gang -semester -calculated -cumshot -fetish -applies -casinos -appearance -smoke -apache -filters -incorporated -nv -craft -cake -notebooks -apart -fellow -blind -lounge -mad -algorithm -semi -coins -andy -gross -strongly -cafe -valentine -hilton -ken -proteins -horror -su -exp -familiar -capable -douglas -debian -till -involving -pen -investing -christopher -admission -epson -shoe -elected -carrying -victory -sand -madison -terrorism -joy -editions -cpu -mainly -ethnic -ran -parliament -actor -finds -seal -situations -fifth -allocated -citizen -vertical -corrections -structural -municipal -describes -prize -sr -occurs -jon -absolute -disabilities -consists -anytime -substance -prohibited -addressed -lies -pipe -soldiers -nr -guardian -lecture -simulation -layout -initiatives -ill -concentration -classics -lbs -lay -interpretation -horses -lol -dirty -deck -wayne -donate -taught -bankruptcy -mp -worker -optimization -alive -temple -substances -prove -discovered -wings -breaks -genetic -restrictions -participating -waters -promise -thin -exhibition -prefer -ridge -cabinet -modem -harris -mph -bringing -sick -dose -evaluate -tiffany -tropical -collect -bet -composition -toyota -streets -nationwide -vector -definitely -shaved -turning -buffer -purple -existence -commentary -larry -limousines -developments -def -immigration -destinations -lets -mutual -pipeline -necessarily -syntax -li -attribute -prison -skill -chairs -nl -everyday -apparently -surrounding -mountains -moves -popularity -inquiry -ethernet -checked -exhibit -throw -trend -sierra -visible -cats -desert -postposted -ya -oldest -rhode -nba -busty -coordinator -obviously -mercury -steven -handbook -greg -navigate -worse -summit -victims -epa -spaces -fundamental -burning -escape -coupons -somewhat -receiver -substantial -tr -progressive -cialis -bb -boats -glance -scottish -championship -arcade -richmond -sacramento -impossible -ron -russell -tells -obvious -fiber -depression -graph -covering -platinum -judgment -bedrooms -talks -filing -foster -modeling -passing -awarded -testimonials -trials -tissue -nz -memorabilia -clinton -masters -bonds -cartridge -alberta -explanation -folk -org -commons -cincinnati -subsection -fraud -electricity -permitted -spectrum -arrival -okay -pottery -emphasis -roger -aspect -workplace -awesome -mexican -confirmed -counts -priced -wallpapers -hist -crash -lift -desired -inter -closer -assumes -heights -shadow -riding -infection -firefox -lisa -expense -grove -eligibility -venture -clinic -korean -healing -princess -mall -entering -packet -spray -studios -involvement -dad -buttons -placement -observations -vbulletin -funded -thompson -winners -extend -roads -subsequent -pat -dublin -rolling -fell -motorcycle -yard -disclosure -establishment -memories -nelson -te -arrived -creates -faces -tourist -cocks -av -mayor -murder -sean -adequate -senator -yield -presentations -grades -cartoons -pour -digest -reg -lodging -tion -dust -hence -wiki -entirely -replaced -radar -rescue -undergraduate -losses -combat -reducing -stopped -occupation -lakes -butt -donations -associations -citysearch -closely -radiation -diary -seriously -kings -shooting -kent -adds -nsw -ear -flags -pci -baker -launched -elsewhere -pollution -conservative -guestbook -shock -effectiveness -walls -abroad -ebony -tie -ward -drawn -arthur -ian -visited -roof -walker -demonstrate -atmosphere -suggests -kiss -beast -ra -operated -experiment -targets -overseas -purchases -dodge -counsel -federation -pizza -invited -yards -assignment -chemicals -gordon -mod -farmers -rc -queries -bmw -rush -ukraine -absence -nearest -cluster -vendors -mpeg -whereas -yoga -serves -woods -surprise -lamp -rico -partial -shoppers -phil -everybody -couples -nashville -ranking -jokes -cst -http -ceo -simpson -twiki -sublime -counseling -palace -acceptable -satisfied -glad -wins -measurements -verify -globe -trusted -copper -milwaukee -rack -medication -warehouse -shareware -ec -rep -dicke -kerry -receipt -supposed -ordinary -nobody -ghost -violation -configure -stability -mit -applying -southwest -boss -pride -institutional -expectations -independence -knowing -reporter -metabolism -keith -champion -cloudy -linda -ross -personally -chile -anna -plenty -solo -sentence -throat -ignore -maria -uniform -excellence -wealth -tall -rm -somewhere -vacuum -dancing -attributes -recognize -brass -writes -plaza -pdas -outcomes -survival -quest -publish -sri -screening -toe -thumbnail -trans -jonathan -whenever -nova -lifetime -api -pioneer -booty -forgotten -acrobat -plates -acres -venue -athletic -thermal -essays -behaviour -vital -telling -fairly -coastal -config -cf -charity -intelligent -edinburgh -vt -excel -modes -obligation -campbell -wake -stupid -harbor -hungary -traveler -urw -segment -realize -regardless -lan -enemy -puzzle -rising -aluminum -wells -wishlist -opens -insight -sms -shit -restricted -republican -secrets -lucky -latter -merchants -thick -trailers -repeat -syndrome -philips -attendance -penalty -drum -glasses -enables -nec -iraqi -builder -vista -jessica -chips -terry -flood -foto -ease -arguments -amsterdam -orgy -arena -adventures -pupils -stewart -announcement -tabs -outcome -xx -appreciate -expanded -casual -grown -polish -lovely -extras -gm -centres -jerry -clause -smile -lands -ri -troops -indoor -bulgaria -armed -broker -charger -regularly -believed -pine -cooling -tend -gulf -rt -rick -trucks -cp -mechanisms -divorce -laura -shopper -tokyo -partly -nikon -customize -tradition -candy -pills -tiger -donald -folks -sensor -exposed -telecom -hunt -angels -deputy -indicators -sealed -thai -emissions -physicians -loaded -fred -complaint -scenes -experiments -balls -afghanistan -dd -boost -spanking -scholarship -governance -mill -founded -supplements -chronic -icons -tranny -moral -den -catering -aud -finger -keeps -pound -locate -camcorder -pl -trained -burn -implementing -roses -labs -ourselves -bread -tobacco -wooden -motors -tough -roberts -incident -gonna -dynamics -lie -crm -rf -conversation -decrease -cumshots -chest -pension -billy -revenues -emerging -worship -bukkake -capability -ak -fe -craig -herself -producing -churches -precision -damages -reserves -contributed -solve -shorts -reproduction -minority -td -diverse -amp -ingredients -sb -ah -johnny -sole -franchise -recorder -complaints -facing -sm -nancy -promotions -tones -passion -rehabilitation -maintaining -sight -laid -clay -defence -patches -weak -refund -usc -towns -environments -trembl -divided -blvd -reception -amd -wise -emails -cyprus -wv -odds -correctly -insider -seminars -consequences -makers -hearts -geography -appearing -integrity -worry -ns -discrimination -eve -carter -legacy -marc -pleased -danger -vitamin -widely -processed -phrase -genuine -raising -implications -functionality -paradise -hybrid -reads -roles -intermediate -emotional -sons -leaf -pad -glory -platforms -ja -bigger -billing -diesel -versus -combine -overnight -geographic -exceed -bs -rod -saudi -fault -cuba -hrs -preliminary -districts -introduce -silk -promotional -kate -chevrolet -babies -bi -karen -compiled -romantic -revealed -specialists -generator -albert -examine -jimmy -graham -suspension -bristol -margaret -compaq -sad -correction -wolf -slowly -authentication -communicate -rugby -supplement -showtimes -cal -portions -infant -promoting -sectors -samuel -fluid -grounds -fits -kick -regards -meal -ta -hurt -machinery -bandwidth -unlike -equation -baskets -probability -pot -dimension -wright -img -barry -proven -schedules -admissions -cached -warren -slip -studied -reviewer -involves -quarterly -rpm -profits -devil -grass -comply -marie -florist -illustrated -cherry -continental -alternate -deutsch -achievement -limitations -kenya -webcam -cuts -funeral -nutten -earrings -enjoyed -automated -chapters -pee -charlie -quebec -nipples -passenger -convenient -dennis -mars -francis -tvs -sized -manga -noticed -socket -silent -literary -egg -mhz -signals -caps -orientation -pill -theft -childhood -swing -symbols -lat -meta -humans -analog -facial -choosing -talent -dated -flexibility -seeker -wisdom -shoot -boundary -mint -packard -offset -payday -philip -elite -gi -spin -holders -believes -swedish -poems -deadline -jurisdiction -robot -displaying -witness -collins -equipped -stages -encouraged -sur -winds -powder -broadway -acquired -assess -wash -cartridges -stones -entrance -gnome -roots -declaration -losing -attempts -gadgets -noble -glasgow -automation -impacts -rev -gospel -advantages -shore -loves -induced -ll -knight -preparing -loose -aims -recipient -linking -extensions -appeals -cl -earned -illness -islamic -athletics -southeast -ieee -ho -alternatives -pending -parker -determining -lebanon -corp -personalized -kennedy -gt -sh -conditioning -teenage -soap -ae -triple -cooper -nyc -vincent -jam -secured -unusual -answered -partnerships -destruction -slots -increasingly -migration -disorder -routine -toolbar -basically -rocks -conventional -titans -applicants -wearing -axis -sought -genes -mounted -habitat -firewall -median -guns -scanner -herein -occupational -animated -horny -judicial -rio -hs -adjustment -hero -integer -treatments -bachelor -attitude -camcorders -engaged -falling -basics -montreal -carpet -rv -struct -lenses -binary -genetics -attended -difficulty -punk -collective -coalition -pi -dropped -enrollment -duke -walter -ai -pace -besides -wage -producers -ot -collector -arc -hosts -interfaces -advertisers -moments -atlas -strings -dawn -representing -observation -feels -torture -carl -deleted -coat -mitchell -mrs -rica -restoration -convenience -returning -ralph -opposition -container -yr -defendant -warner -confirmation -app -embedded -inkjet -supervisor -wizard -corps -actors -liver -peripherals -liable -brochure -morris -bestsellers -petition -eminem -recall -antenna -picked -assumed -departure -minneapolis -belief -killing -bikini -memphis -shoulder -decor -lookup -texts -harvard -brokers -roy -ion -diameter -ottawa -doll -ic -podcast -tit -seasons -peru -interactions -refine -bidder -singer -evans -herald -literacy -fails -aging -nike -intervention -pissing -fed -plugin -attraction -diving -invite -modification -alice -latinas -suppose -customized -reed -involve -moderate -terror -younger -thirty -mice -opposite -understood -rapidly -dealtime -ban -temp -intro -mercedes -zus -assurance -fisting -clerk -happening -vast -mills -outline -amendments -tramadol -holland -receives -jeans -metropolitan -compilation -verification -fonts -ent -odd -wrap -refers -mood -favor -veterans -quiz -mx -sigma -gr -attractive -xhtml -occasion -recordings -jefferson -victim -demands -sleeping -careful -ext -beam -gardening -obligations -arrive -orchestra -sunset -tracked -moreover -minimal -polyphonic -lottery -tops -framed -aside -outsourcing -licence -adjustable -allocation -michelle -essay -discipline -amy -ts -demonstrated -dialogue -identifying -alphabetical -camps -declared -dispatched -aaron -handheld -trace -disposal -shut -florists -packs -ge -installing -switches -romania -voluntary -ncaa -thou -consult -phd -greatly -blogging -mask -cycling -midnight -ng -commonly -pe -photographer -inform -turkish -coal -cry -messaging -pentium -quantum -murray -intent -tt -zoo -largely -pleasant -announce -constructed -additions -requiring -spoke -aka -arrow -engagement -sampling -rough -weird -tee -refinance -lion -inspired -holes -weddings -blade -suddenly -oxygen -cookie -meals -canyon -goto -meters -merely -calendars -arrangement -conclusions -passes -bibliography -pointer -compatibility -stretch -durham -furthermore -permits -cooperative -muslim -xl -neil -sleeve -netscape -cleaner -cricket -beef -feeding -stroke -township -rankings -measuring -cad -hats -robin -robinson -jacksonville -strap -headquarters -sharon -crowd -tcp -transfers -surf -olympic -transformation -remained -attachments -dv -dir -entities -customs -administrators -personality -rainbow -hook -roulette -decline -gloves -israeli -medicare -cord -skiing -cloud -facilitate -subscriber -valve -val -hewlett -explains -proceed -flickr -feelings -knife -jamaica -priorities -shelf -bookstore -timing -liked -parenting -adopt -denied -fotos -incredible -britney -freeware -fucked -donation -outer -crop -deaths -rivers -commonwealth -pharmaceutical -manhattan -tales -katrina -workforce -islam -nodes -tu -fy -thumbs -seeds -cited -lite -ghz -hub -targeted -organizational -skype -realized -twelve -founder -decade -gamecube -rr -dispute -portuguese -tired -titten -adverse -everywhere -excerpt -eng -steam -discharge -ef -drinks -ace -voices -acute -halloween -climbing -stood -sing -tons -perfume -carol -honest -albany -hazardous -restore -stack -methodology -somebody -sue -ep -housewares -reputation -resistant -democrats -recycling -hang -gbp -curve -creator -amber -qualifications -museums -coding -slideshow -tracker -variation -passage -transferred -trunk -hiking -lb -damn -pierre -jelsoft -headset -photograph -oakland -colombia -waves -camel -distributor -lamps -underlying -hood -wrestling -suicide -archived -photoshop -jp -chi -bt -arabia -gathering -projection -juice -chase -mathematical -logical -sauce -fame -extract -specialized -diagnostic -panama -indianapolis -af -payable -corporations -courtesy -criticism -automobile -confidential -rfc -statutory -accommodations -athens -northeast -downloaded -judges -sl -seo -retired -isp -remarks -detected -decades -paintings -walked -arising -nissan -bracelet -ins -eggs -juvenile -injection -yorkshire -populations -protective -afraid -acoustic -railway -cassette -initially -indicator -pointed -hb -jpg -causing -mistake -norton -locked -eliminate -tc -fusion -mineral -sunglasses -ruby -steering -beads -fortune -preference -canvas -threshold -parish -claimed -screens -cemetery -planner -croatia -flows -stadium -venezuela -exploration -mins -fewer -sequences -coupon -nurses -ssl -stem -proxy -gangbang -astronomy -lanka -opt -edwards -drew -contests -flu -translate -announces -mlb -costume -tagged -berkeley -voted -killer -bikes -gates -adjusted -rap -tune -bishop -pulled -corn -gp -shaped -compression -seasonal -establishing -farmer -counters -puts -constitutional -grew -perfectly -tin -slave -instantly -cultures -norfolk -coaching -examined -trek -encoding -litigation -submissions -oem -heroes -painted -lycos -ir -zdnet -broadcasting -horizontal -artwork -cosmetic -resulted -portrait -terrorist -informational -ethical -carriers -ecommerce -mobility -floral -builders -ties -struggle -schemes -suffering -neutral -fisher -rat -spears -prospective -dildos -bedding -ultimately -joining -heading -equally -artificial -bearing -spectacular -coordination -connector -brad -combo -seniors -worlds -guilty -affiliated -activation -naturally -haven -tablet -jury -dos -tail -subscribers -charm -lawn -violent -mitsubishi -underwear -basin -soup -potentially -ranch -constraints -crossing -inclusive -dimensional -cottage -drunk -considerable -crimes -resolved -mozilla -byte -toner -nose -latex -branches -anymore -oclc -delhi -holdings -alien -locator -selecting -processors -pantyhose -plc -broke -nepal -zimbabwe -difficulties -juan -complexity -msg -constantly -browsing -resolve -barcelona -presidential -documentary -cod -territories -melissa -moscow -thesis -thru -jews -nylon -palestinian -discs -rocky -bargains -frequent -trim -nigeria -ceiling -pixels -ensuring -hispanic -cv -cb -legislature -hospitality -gen -anybody -procurement -diamonds -espn -fleet -untitled -bunch -totals -marriott -singing -theoretical -afford -exercises -starring -referral -nhl -surveillance -optimal -quit -distinct -protocols -lung -highlight -substitute -inclusion -hopefully -brilliant -turner -sucking -cents -reuters -ti -fc -gel -todd -spoken -omega -evaluated -stayed -civic -assignments -fw -manuals -doug -sees -termination -watched -saver -thereof -grill -households -gs -redeem -rogers -grain -aaa -authentic -regime -wanna -wishes -bull -montgomery -architectural -louisville -depend -differ -macintosh -movements -ranging -monica -repairs -breath -amenities -virtually -cole -mart -candle -hanging -colored -authorization -tale -verified -lynn -formerly -projector -bp -situated -comparative -std -seeks -herbal -loving -strictly -routing -docs -stanley -psychological -surprised -retailer -vitamins -elegant -gains -renewal -vid -genealogy -opposed -deemed -scoring -expenditure -panties -brooklyn -liverpool -sisters -critics -connectivity -spots -oo -algorithms -hacker -madrid -similarly -margin -coin -bbw -solely -fake -salon -collaborative -norman -fda -excluding -turbo -headed -voters -cure -madonna -commander -arch -ni -murphy -thinks -thats -suggestion -hdtv -soldier -phillips -asin -aimed -justin -bomb -harm -interval -mirrors -spotlight -tricks -reset -brush -investigate -thy -expansys -panels -repeated -assault -connecting -spare -logistics -deer -kodak -tongue -bowling -tri -danish -pal -monkey -proportion -filename -skirt -florence -invest -honey -um -analyses -drawings -significance -scenario -ye -fs -lovers -atomic -approx -symposium -arabic -gauge -essentials -junction -protecting -nn -faced -mat -rachel -solving -transmitted -weekends -screenshots -produces -oven -ted -intensive -chains -kingston -sixth -engage -deviant -noon -switching -quoted -adapters -correspondence -farms -imports -supervision -cheat -bronze -expenditures -sandy -separation -testimony -suspect -celebrities -macro -sender -mandatory -boundaries -crucial -syndication -gym -celebration -kde -adjacent -filtering -tuition -spouse -exotic -viewer -signup -threats -luxembourg -puzzles -reaching -vb -damaged -cams -receptor -piss -laugh -joel -surgical -destroy -citation -pitch -autos -yo -premises -perry -proved -offensive -imperial -dozen -benjamin -deployment -teeth -cloth -studying -colleagues -stamp -lotus -salmon -olympus -separated -proc -cargo -tan -directive -fx -salem -mate -dl -starter -upgrades -likes -butter -pepper -weapon -luggage -burden -chef -tapes -zones -races -isle -stylish -slim -maple -luke -grocery -offshore -governing -retailers -depot -kenneth -comp -alt -pie -blend -harrison -ls -julie -occasionally -cbs -attending -emission -pete -spec -finest -realty -janet -bow -penn -recruiting -apparent -instructional -phpbb -autumn -traveling -probe -midi -permissions -biotechnology -toilet -ranked -jackets -routes -packed -excited -outreach -helen -mounting -recover -tied -lopez -balanced -prescribed -catherine -timely -talked -upskirts -debug -delayed -chuck -reproduced -hon -dale -explicit -calculation -villas -ebook -consolidated -boob -exclude -peeing -occasions -brooks -equations -newton -oils -sept -exceptional -anxiety -bingo -whilst -spatial -respondents -unto -lt -ceramic -prompt -precious -minds -annually -considerations -scanners -atm -xanax -eq -pays -cox -fingers -sunny -ebooks -delivers -je -queensland -necklace -musicians -leeds -composite -unavailable -cedar -arranged -lang -theaters -advocacy -raleigh -stud -fold -essentially -designing -threaded -uv -qualify -fingering -blair -hopes -assessments -cms -mason -diagram -burns -pumps -slut -ejaculation -footwear -sg -vic -beijing -peoples -victor -mario -pos -attach -licenses -utils -removing -advised -brunswick -spider -phys -ranges -pairs -sensitivity -trails -preservation -hudson -isolated -calgary -interim -assisted -divine -streaming -approve -chose -compound -intensity -technological -syndicate -abortion -dialog -venues -blast -wellness -calcium -newport -antivirus -addressing -pole -discounted -indians -shield -harvest -membrane -prague -previews -bangladesh -constitute -locally -concluded -pickup -desperate -mothers -nascar -iceland -demonstration -governmental -manufactured -candles -graduation -mega -bend -sailing -variations -moms -sacred -addiction -morocco -chrome -tommy -springfield -refused -brake -exterior -greeting -ecology -oliver -congo -glen -botswana -nav -delays -synthesis -olive -undefined -unemployment -cyber -verizon -scored -enhancement -newcastle -clone -dicks -velocity -lambda -relay -composed -tears -performances -oasis -baseline -cab -angry -fa -societies -silicon -brazilian -identical -petroleum -compete -ist -norwegian -lover -belong -honolulu -beatles -lips -escort -retention -exchanges -pond -rolls -thomson -barnes -soundtrack -wondering -malta -daddy -lc -ferry -rabbit -profession -seating -dam -cnn -separately -physiology -lil -collecting -das -exports -omaha -tire -participant -scholarships -recreational -dominican -chad -electron -loads -friendship -heather -passport -motel -unions -treasury -warrant -sys -solaris -frozen -occupied -josh -royalty -scales -rally -observer -sunshine -strain -drag -ceremony -somehow -arrested -expanding -provincial -investigations -icq -ripe -yamaha -rely -medications -hebrew -gained -rochester -dying -laundry -stuck -solomon -placing -stops -homework -adjust -assessed -advertiser -enabling -encryption -filling -downloadable -sophisticated -imposed -silence -scsi -focuses -soviet -possession -cu -laboratories -treaty -vocal -trainer -organ -stronger -volumes -advances -vegetables -lemon -toxic -dns -thumbnails -darkness -pty -ws -nuts -nail -bizrate -vienna -implied -span -stanford -sox -stockings -joke -respondent -packing -statute -rejected -satisfy -destroyed -shelter -chapel -gamespot -manufacture -layers -wordpress -guided -vulnerability -accountability -celebrate -accredited -appliance -compressed -bahamas -powell -mixture -zoophilia -bench -univ -tub -rider -scheduling -radius -perspectives -mortality -logging -hampton -christians -borders -therapeutic -pads -butts -inns -bobby -impressive -sheep -accordingly -architect -railroad -lectures -challenging -wines -nursery -harder -cups -ash -microwave -cheapest -accidents -travesti -relocation -stuart -contributors -salvador -ali -salad -np -monroe -tender -violations -foam -temperatures -paste -clouds -competitions -discretion -tft -tanzania -preserve -jvc -poem -vibrator -unsigned -staying -cosmetics -easter -theories -repository -praise -jeremy -venice -jo -concentrations -vibrators -estonia -christianity -veteran -streams -landing -signing -executed -katie -negotiations -realistic -dt -cgi -showcase -integral -asks -relax -namibia -generating -christina -congressional -synopsis -hardly -prairie -reunion -composer -bean -sword -absent -photographic -sells -ecuador -hoping -accessed -spirits -modifications -coral -pixel -float -colin -bias -imported -paths -bubble -por -acquire -contrary -millennium -tribune -vessel -acids -focusing -viruses -cheaper -admitted -dairy -admit -mem -fancy -equality -samoa -gc -achieving -tap -stickers -fisheries -exceptions -reactions -leasing -lauren -beliefs -ci -macromedia -companion -squad -analyze -ashley -scroll -relate -divisions -swim -wages -additionally -suffer -forests -fellowship -nano -invalid -concerts -martial -males -victorian -retain -colours -execute -tunnel -genres -cambodia -patents -copyrights -yn -chaos -lithuania -mastercard -wheat -chronicles -obtaining -beaver -updating -distribute -readings -decorative -kijiji -confused -compiler -enlargement -eagles -bases -vii -accused -bee -campaigns -unity -loud -conjunction -bride -rats -defines -airports -instances -indigenous -begun -cfr -brunette -packets -anchor -socks -validation -parade -corruption -stat -trigger -incentives -cholesterol -gathered -essex -slovenia -notified -differential -beaches -folders -dramatic -surfaces -terrible -routers -cruz -pendant -dresses -baptist -scientist -starsmerchant -hiring -clocks -arthritis -bios -females -wallace -nevertheless -reflects -taxation -fever -pmc -cuisine -surely -practitioners -transcript -myspace -theorem -inflation -thee -nb -ruth -pray -stylus -compounds -pope -drums -contracting -topless -arnold -structured -reasonably -jeep -chicks -bare -hung -cattle -mba -radical -graduates -rover -recommends -controlling -treasure -reload -distributors -flame -levitra -tanks -assuming -monetary -elderly -pit -arlington -mono -particles -floating -extraordinary -tile -indicating -bolivia -spell -hottest -stevens -coordinate -kuwait -exclusively -emily -alleged -limitation -widescreen -compile -squirting -webster -struck -rx -illustration -plymouth -warnings -construct -apps -inquiries -bridal -annex -mag -gsm -inspiration -tribal -curious -affecting -freight -rebate -meetup -eclipse -sudan -ddr -downloading -rec -shuttle -aggregate -stunning -cycles -affects -forecasts -detect -sluts -actively -ciao -ampland -knee -prep -pb -complicated -chem -fastest -butler -shopzilla -injured -decorating -payroll -cookbook -expressions -ton -courier -uploaded -shakespeare -hints -collapse -americas -connectors -twinks -unlikely -oe -gif -pros -conflicts -techno -beverage -tribute -wired -elvis -immune -latvia -travelers -forestry -barriers -cant -jd -rarely -gpl -infected -offerings -martha -genesis -barrier -argue -incorrect -trains -metals -bicycle -furnishings -letting -arise -guatemala -celtic -thereby -irc -jamie -particle -perception -minerals -advise -humidity -bottles -boxing -wy -dm -bangkok -renaissance -pathology -sara -bra -ordinance -hughes -photographers -bitch -infections -jeffrey -chess -operates -brisbane -configured -survive -oscar -festivals -menus -joan -possibilities -duck -reveal -canal -amino -phi -contributing -herbs -clinics -mls -cow -manitoba -analytical -missions -watson -lying -costumes -strict -dive -saddam -circulation -drill -offense -threesome -bryan -cet -protest -handjob -assumption -jerusalem -hobby -tries -transexuales -invention -nickname -fiji -technician -inline -executives -enquiries -washing -audi -staffing -cognitive -exploring -trick -enquiry -closure -raid -ppc -timber -volt -intense -div -playlist -registrar -showers -supporters -ruling -steady -dirt -statutes -withdrawal -myers -drops -predicted -wider -saskatchewan -jc -cancellation -plugins -enrolled -sensors -screw -ministers -publicly -hourly -blame -geneva -freebsd -veterinary -acer -prostores -reseller -dist -handed -suffered -intake -informal -relevance -incentive -butterfly -tucson -mechanics -heavily -swingers -fifty -headers -mistakes -numerical -ons -geek -uncle -defining -xnxx -counting -reflection -sink -accompanied -assure -invitation -devoted -princeton -jacob -sodium -randy -spirituality -hormone -meanwhile -proprietary -timothy -childrens -brick -grip -naval -thumbzilla -medieval -porcelain -avi -bridges -pichunter -captured -watt -thehun -decent -casting -dayton -translated -shortly -cameron -columnists -pins -carlos -reno -donna -andreas -warrior -diploma -cabin -innocent -bdsm -scanning -ide -consensus -polo -valium -copying -rpg -delivering -cordless -patricia -horn -eddie -uganda -fired -journalism -pd -prot -trivia -adidas -perth -frog -grammar -intention -syria -disagree -klein -harvey -tires -logs -undertaken -tgp -hazard -retro -leo -livesex -statewide -semiconductor -gregory -episodes -boolean -circular -anger -diy -mainland -illustrations -suits -chances -interact -snap -happiness -arg -substantially -bizarre -glenn -ur -auckland -olympics -fruits -identifier -geo -worldsex -ribbon -calculations -doe -jpeg -conducting -startup -suzuki -trinidad -ati -kissing -wal -handy -swap -exempt -crops -reduces -accomplished -calculators -geometry -impression -abs -slovakia -flip -guild -correlation -gorgeous -capitol -sim -dishes -rna -barbados -chrysler -nervous -refuse -extends -fragrance -mcdonald -replica -plumbing -brussels -tribe -neighbors -trades -superb -buzz -transparent -nuke -rid -trinity -charleston -handled -legends -boom -calm -champions -floors -selections -projectors -inappropriate -exhaust -comparing -shanghai -speaks -burton -vocational -davidson -copied -scotia -farming -gibson -pharmacies -fork -troy -ln -roller -introducing -batch -organize -appreciated -alter -nicole -latino -ghana -edges -uc -mixing -handles -skilled -fitted -albuquerque -harmony -distinguished -asthma -projected -assumptions -shareholders -twins -developmental -rip -zope -regulated -triangle -amend -anticipated -oriental -reward -windsor -zambia -completing -gmbh -buf -ld -hydrogen -webshots -sprint -comparable -chick -advocate -sims -confusion -copyrighted -tray -inputs -warranties -genome -escorts -documented -thong -medal -paperbacks -coaches -vessels -harbour -walks -sucks -sol -keyboards -sage -knives -eco -vulnerable -arrange -artistic -bat -honors -booth -indie -reflected -unified -bones -breed -detector -ignored -polar -fallen -precise -sussex -respiratory -notifications -msgid -transexual -mainstream -invoice -evaluating -lip -subcommittee -sap -gather -suse -maternity -backed -alfred -colonial -mf -carey -motels -forming -embassy -cave -journalists -danny -rebecca -slight -proceeds -indirect -amongst -wool -foundations -msgstr -arrest -volleyball -mw -adipex -horizon -nu -deeply -toolbox -ict -marina -liabilities -prizes -bosnia -browsers -decreased -patio -dp -tolerance -surfing -creativity -lloyd -describing -optics -pursue -lightning -overcome -eyed -ou -quotations -grab -inspector -attract -brighton -beans -bookmarks -ellis -disable -snake -succeed -leonard -lending -oops -reminder -nipple -xi -searched -behavioral -riverside -bathrooms -plains -sku -ht -raymond -insights -abilities -initiated -sullivan -za -midwest -karaoke -trap -lonely -fool -ve -nonprofit -lancaster -suspended -hereby -observe -julia -containers -attitudes -karl -berry -collar -simultaneously -racial -integrate -bermuda -amanda -sociology -mobiles -screenshot -exhibitions -kelkoo -confident -retrieved -exhibits -officially -consortium -dies -terrace -bacteria -pts -replied -seafood -novels -rh -rrp -recipients -playboy -ought -delicious -traditions -fg -jail -safely -finite -kidney -periodically -fixes -sends -durable -mazda -allied -throws -moisture -hungarian -roster -referring -symantec -spencer -wichita -nasdaq -uruguay -ooo -hz -transform -timer -tablets -tuning -gotten -educators -tyler -futures -vegetable -verse -highs -humanities -independently -wanting -custody -scratch -launches -ipaq -alignment -masturbating -henderson -bk -britannica -comm -ellen -competitors -nhs -rocket -aye -bullet -towers -racks -lace -nasty -visibility -latitude -consciousness -ste -tumor -ugly -deposits -beverly -mistress -encounter -trustees -watts -duncan -reprints -hart -bernard -resolutions -ment -accessing -forty -tubes -attempted -col -midlands -priest -floyd -ronald -analysts -queue -dx -sk -trance -locale -nicholas -biol -yu -bundle -hammer -invasion -witnesses -runner -rows -administered -notion -sq -skins -mailed -oc -fujitsu -spelling -arctic -exams -rewards -beneath -strengthen -defend -aj -frederick -medicaid -treo -infrared -seventh -gods -une -welsh -belly -aggressive -tex -advertisements -quarters -stolen -cia -sublimedirectory -soonest -haiti -disturbed -determines -sculpture -poly -ears -dod -wp -fist -naturals -neo -motivation -lenders -pharmacology -fitting -fixtures -bloggers -mere -agrees -passengers -quantities -petersburg -consistently -powerpoint -cons -surplus -elder -sonic -obituaries -cheers -dig -taxi -punishment -appreciation -subsequently -om -belarus -nat -zoning -gravity -providence -thumb -restriction -incorporate -backgrounds -treasurer -guitars -essence -flooring -lightweight -ethiopia -tp -mighty -athletes -humanity -transcription -jm -holmes -complications -scholars -dpi -scripting -gis -remembered -galaxy -chester -snapshot -caring -loc -worn -synthetic -shaw -vp -segments -testament -expo -dominant -twist -specifics -itunes -stomach -partially -buried -cn -newbie -minimize -darwin -ranks -wilderness -debut -generations -tournaments -bradley -deny -anatomy -bali -judy -sponsorship -headphones -fraction -trio -proceeding -cube -defects -volkswagen -uncertainty -breakdown -milton -marker -reconstruction -subsidiary -strengths -clarity -rugs -sandra -adelaide -encouraging -furnished -monaco -settled -folding -emirates -terrorists -airfare -comparisons -beneficial -distributions -vaccine -belize -crap -fate -viewpicture -promised -volvo -penny -robust -bookings -threatened -minolta -republicans -discusses -gui -porter -gras -jungle -ver -rn -responded -rim -abstracts -zen -ivory -alpine -dis -prediction -pharmaceuticals -andale -fabulous -remix -alias -thesaurus -individually -battlefield -literally -newer -kay -ecological -spice -oval -implies -cg -soma -ser -cooler -appraisal -consisting -maritime -periodic -submitting -overhead -ascii -prospect -shipment -breeding -citations -geographical -donor -mozambique -tension -href -benz -trash -shapes -wifi -tier -fwd -earl -manor -envelope -diane -homeland -disclaimers -championships -excluded -andrea -breeds -rapids -disco -sheffield -bailey -aus -endif -finishing -emotions -wellington -incoming -prospects -lexmark -cleaners -bulgarian -hwy -eternal -cashiers -guam -cite -aboriginal -remarkable -rotation -nam -preventing -productive -boulevard -eugene -ix -gdp -pig -metric -compliant -minus -penalties -bennett -imagination -hotmail -refurbished -joshua -armenia -varied -grande -closest -activated -actress -mess -conferencing -assign -armstrong -politicians -trackbacks -lit -accommodate -tigers -aurora -una -slides -milan -premiere -lender -villages -shade -chorus -christine -rhythm -digit -argued -dietary -symphony -clarke -sudden -accepting -precipitation -marilyn -lions -findlaw -ada -pools -tb -lyric -claire -isolation -speeds -sustained -matched -approximate -rope -carroll -rational -programmer -fighters -chambers -dump -greetings -inherited -warming -incomplete -vocals -chronicle -fountain -chubby -grave -legitimate -biographies -burner -yrs -foo -investigator -gba -plaintiff -finnish -gentle -bm -prisoners -deeper -muslims -hose -mediterranean -nightlife -footage -howto -worthy -reveals -architects -saints -entrepreneur -carries -sig -freelance -duo -excessive -devon -screensaver -helena -saves -regarded -valuation -unexpected -cigarette -fog -characteristic -marion -lobby -egyptian -tunisia -metallica -outlined -consequently -headline -treating -punch -appointments -str -gotta -cowboy -narrative -bahrain -enormous -karma -consist -betty -queens -academics -pubs -quantitative -shemales -lucas -screensavers -subdivision -tribes -vip -defeat -clicks -distinction -honduras -naughty -hazards -insured -harper -livestock -mardi -exemption -tenant -sustainability -cabinets -tattoo -shake -algebra -shadows -holly -formatting -silly -nutritional -yea -mercy -hartford -freely -marcus -sunrise -wrapping -mild -fur -nicaragua -weblogs -timeline -tar -belongs -rj -readily -affiliation -soc -fence -nudist -infinite -diana -ensures -relatives -lindsay -clan -legally -shame -satisfactory -revolutionary -bracelets -sync -civilian -telephony -mesa -fatal -remedy -realtors -breathing -briefly -thickness -adjustments -graphical -genius -discussing -aerospace -fighter -meaningful -flesh -retreat -adapted -barely -wherever -estates -rug -democrat -borough -maintains -failing -shortcuts -ka -retained -voyeurweb -pamela -andrews -marble -extending -jesse -specifies -hull -logitech -surrey -briefing -belkin -dem -accreditation -wav -blackberry -highland -meditation -modular -microphone -macedonia -combining -brandon -instrumental -giants -organizing -shed -balloon -moderators -winston -memo -ham -solved -tide -kazakhstan -hawaiian -standings -partition -invisible -gratuit -consoles -funk -fbi -qatar -magnet -translations -porsche -cayman -jaguar -reel -sheer -commodity -posing -wang -kilometers -rp -bind -thanksgiving -rand -hopkins -urgent -guarantees -infants -gothic -cylinder -witch -buck -indication -eh -congratulations -tba -cohen -sie -usgs -puppy -kathy -acre -graphs -surround -cigarettes -revenge -expires -enemies -lows -controllers -aqua -chen -emma -consultancy -finances -accepts -enjoying -conventions -eva -patrol -smell -pest -hc -italiano -coordinates -rca -fp -carnival -roughly -sticker -promises -responding -reef -physically -divide -stakeholders -hydrocodone -gst -consecutive -cornell -satin -bon -deserve -attempting -mailto -promo -jj -representations -chan -worried -tunes -garbage -competing -combines -mas -beth -bradford -len -phrases -kai -peninsula -chelsea -boring -reynolds -dom -jill -accurately -speeches -reaches -schema -considers -sofa -catalogs -ministries -vacancies -quizzes -parliamentary -obj -prefix -lucia -savannah -barrel -typing -nerve -dans -planets -deficit -boulder -pointing -renew -coupled -viii -myanmar -metadata -harold -circuits -floppy -texture -handbags -jar -ev -somerset -incurred -acknowledge -thoroughly -antigua -nottingham -thunder -tent -caution -identifies -questionnaire -qualification -locks -modelling -namely -miniature -dept -hack -dare -euros -interstate -pirates -aerial -hawk -consequence -rebel -systematic -perceived -origins -hired -makeup -textile -lamb -madagascar -nathan -tobago -presenting -cos -troubleshooting -uzbekistan -indexes -pac -rl -erp -centuries -gl -magnitude -ui -richardson -hindu -dh -fragrances -vocabulary -licking -earthquake -vpn -fundraising -fcc -markers -weights -albania -geological -assessing -lasting -wicked -eds -introduces -kills -roommate -webcams -pushed -webmasters -ro -df -computational -acdbentity -participated -junk -handhelds -wax -lucy -answering -hans -impressed -slope -reggae -failures -poet -conspiracy -surname -theology -nails -evident -whats -rides -rehab -epic -saturn -organizer -nut -allergy -sake -twisted -combinations -preceding -merit -enzyme -cumulative -zshops -planes -edmonton -tackle -disks -condo -pokemon -amplifier -ambien -arbitrary -prominent -retrieve -lexington -vernon -sans -worldcat -titanium -irs -fairy -builds -contacted -shaft -lean -bye -cdt -recorders -occasional -leslie -casio -deutsche -ana -postings -innovations -kitty -postcards -dude -drain -monte -fires -algeria -blessed -luis -reviewing -cardiff -cornwall -favors -potato -panic -explicitly -sticks -leone -transsexual -ez -citizenship -excuse -reforms -basement -onion -strand -pf -sandwich -uw -lawsuit -alto -informative -girlfriend -bloomberg -cheque -hierarchy -influenced -banners -reject -eau -abandoned -bd -circles -italic -beats -merry -mil -scuba -gore -complement -cult -dash -passive -mauritius -valued -cage -checklist -bangbus -requesting -courage -verde -lauderdale -scenarios -gazette -hitachi -divx -extraction -batman -elevation -hearings -coleman -hugh -lap -utilization -beverages -calibration -jake -eval -efficiently -anaheim -ping -textbook -dried -entertaining -prerequisite -luther -frontier -settle -stopping -refugees -knights -hypothesis -palmer -medicines -flux -derby -sao -peaceful -altered -pontiac -regression -doctrine -scenic -trainers -muze -enhancements -renewable -intersection -passwords -sewing -consistency -collectors -conclude -recognised -munich -oman -celebs -gmc -propose -hh -azerbaijan -lighter -rage -adsl -uh -prix -astrology -advisors -pavilion -tactics -trusts -occurring -supplemental -travelling -talented -annie -pillow -induction -derek -precisely -shorter -harley -spreading -provinces -relying -finals -paraguay -steal -parcel -refined -fd -bo -fifteen -widespread -incidence -fears -predict -boutique -acrylic -rolled -tuner -avon -incidents -peterson -rays -asn -shannon -toddler -enhancing -flavor -alike -walt -homeless -horrible -hungry -metallic -acne -blocked -interference -warriors -palestine -listprice -libs -undo -cadillac -atmospheric -malawi -wm -pk -sagem -knowledgestorm -dana -halo -ppm -curtis -parental -referenced -strikes -lesser -publicity -marathon -ant -proposition -gays -pressing -gasoline -apt -dressed -scout -belfast -exec -dealt -niagara -inf -eos -warcraft -charms -catalyst -trader -bucks -allowance -vcr -denial -uri -designation -thrown -prepaid -raises -gem -duplicate -electro -criterion -badge -wrist -civilization -analyzed -vietnamese -heath -tremendous -ballot -lexus -varying -remedies -validity -trustee -maui -handjobs -weighted -angola -squirt -performs -plastics -realm -corrected -jenny -helmet -salaries -postcard -elephant -yemen -encountered -tsunami -scholar -nickel -internationally -surrounded -psi -buses -expedia -geology -pct -wb -creatures -coating -commented -wallet -cleared -smilies -vids -accomplish -boating -drainage -shakira -corners -broader -vegetarian -rouge -yeast -yale -newfoundland -sn -qld -pas -clearing -investigated -dk -ambassador -coated -intend -stephanie -contacting -vegetation -doom -findarticles -louise -kenny -specially -owen -routines -hitting -yukon -beings -bite -issn -aquatic -reliance -habits -striking -myth -infectious -podcasts -singh -gig -gilbert -sas -ferrari -continuity -brook -fu -outputs -phenomenon -ensemble -insulin -assured -biblical -weed -conscious -accent -mysimon -eleven -wives -ambient -utilize -mileage -oecd -prostate -adaptor -auburn -unlock -hyundai -pledge -vampire -angela -relates -nitrogen -xerox -dice -merger -softball -referrals -quad -dock -differently -firewire -mods -nextel -framing -organised -musician -blocking -rwanda -sorts -integrating -vsnet -limiting -dispatch -revisions -papua -restored -hint -armor -riders -chargers -remark -dozens -varies -msie -reasoning -wn -liz -rendered -picking -charitable -guards -annotated -ccd -sv -convinced -openings -buys -burlington -replacing -researcher -watershed -councils -occupations -acknowledged -nudity -kruger -pockets -granny -pork -zu -equilibrium -viral -inquire -pipes -characterized -laden -aruba -cottages -realtor -merge -privilege -edgar -develops -qualifying -chassis -dubai -estimation -barn -pushing -llp -fleece -pediatric -boc -fare -dg -asus -pierce -allan -dressing -techrepublic -sperm -vg -bald -filme -craps -fuji -frost -leon -institutes -mold -dame -fo -sally -yacht -tracy -prefers -drilling -brochures -herb -tmp -alot -ate -breach -whale -traveller -appropriations -suspected -tomatoes -benchmark -beginners -instructors -highlighted -bedford -stationery -idle -mustang -unauthorized -clusters -antibody -competent -momentum -fin -wiring -io -pastor -mud -calvin -uni -shark -contributor -demonstrates -phases -grateful -emerald -gradually -laughing -grows -cliff -desirable -tract -ul -ballet -ol -journalist -abraham -js -bumper -afterwards -webpage -religions -garlic -hostels -shine -senegal -explosion -pn -banned -wendy -briefs -signatures -diffs -cove -mumbai -ozone -disciplines -casa -mu -daughters -conversations -radios -tariff -nvidia -opponent -pasta -simplified -muscles -serum -wrapped -swift -motherboard -runtime -inbox -focal -bibliographic -vagina -eden -distant -incl -champagne -ala -decimal -hq -deviation -superintendent -propecia -dip -nbc -samba -hostel -housewives -employ -mongolia -penguin -magical -influences -inspections -irrigation -miracle -manually -reprint -reid -wt -hydraulic -centered -robertson -flex -yearly -penetration -wound -belle -rosa -conviction -hash -omissions -writings -hamburg -lazy -mv -mpg -retrieval -qualities -cindy -lolita -fathers -carb -charging -cas -marvel -lined -cio -dow -prototype -importantly -rb -petite -apparatus -upc -terrain -dui -pens -explaining -yen -strips -gossip -rangers -nomination -empirical -mh -rotary -worm -dependence -discrete -beginner -boxed -lid -sexuality -polyester -cubic -deaf -commitments -suggesting -sapphire -kinase -skirts -mats -remainder -crawford -labeled -privileges -televisions -specializing -marking -commodities -pvc -serbia -sheriff -griffin -declined -guyana -spies -blah -mime -neighbor -motorcycles -elect -highways -thinkpad -concentrate -intimate -reproductive -preston -deadly -cunt -feof -bunny -chevy -molecules -rounds -longest -refrigerator -tions -intervals -sentences -dentists -usda -exclusion -workstation -holocaust -keen -flyer -peas -dosage -receivers -urls -customise -disposition -variance -navigator -investigators -cameroon -baking -marijuana -adaptive -computed -needle -baths -enb -gg -cathedral -brakes -og -nirvana -ko -fairfield -owns -til -invision -sticky -destiny -generous -madness -emacs -climb -blowing -fascinating -landscapes -heated -lafayette -jackie -wto -computation -hay -cardiovascular -ww -sparc -cardiac -salvation -dover -adrian -predictions -accompanying -vatican -brutal -learners -gd -selective -arbitration -configuring -token -editorials -zinc -sacrifice -seekers -guru -isa -removable -convergence -yields -gibraltar -levy -suited -numeric -anthropology -skating -kinda -aberdeen -emperor -grad -malpractice -dylan -bras -belts -blacks -educated -rebates -reporters -burke -proudly -pix -necessity -rendering -mic -inserted -pulling -basename -kyle -obesity -curves -suburban -touring -clara -vertex -bw -hepatitis -nationally -tomato -andorra -waterproof -expired -mj -travels -flush -waiver -pale -specialties -hayes -humanitarian -invitations -functioning -delight -survivor -garcia -cingular -economies -alexandria -bacterial -moses -counted -undertake -declare -continuously -johns -valves -gaps -impaired -achievements -donors -tear -jewel -teddy -lf -convertible -ata -teaches -ventures -nil -bufing -stranger -tragedy -julian -nest -pam -dryer -painful -velvet -tribunal -ruled -nato -pensions -prayers -funky -secretariat -nowhere -cop -paragraphs -gale -joins -adolescent -nominations -wesley -dim -lately -cancelled -scary -mattress -mpegs -brunei -likewise -banana -introductory -slovak -cakes -stan -reservoir -occurrence -idol -bloody -mixer -remind -wc -worcester -sbjct -demographic -charming -mai -tooth -disciplinary -annoying -respected -stays -disclose -affair -drove -washer -upset -restrict -springer -beside -mines -portraits -rebound -logan -mentor -interpreted -evaluations -fought -baghdad -elimination -metres -hypothetical -immigrants -complimentary -helicopter -pencil -freeze -hk -performer -abu -titled -commissions -sphere -powerseller -moss -ratios -concord -graduated -endorsed -ty -surprising -walnut -lance -ladder -italia -unnecessary -dramatically -liberia -sherman -cork -maximize -cj -hansen -senators -workout -mali -yugoslavia -bleeding -characterization -colon -likelihood -lanes -purse -fundamentals -contamination -mtv -endangered -compromise -masturbation -optimize -stating -dome -caroline -leu -expiration -namespace -align -peripheral -bless -engaging -negotiation -crest -opponents -triumph -nominated -confidentiality -electoral -changelog -welding -orgasm -deferred -alternatively -heel -alloy -condos -plots -polished -yang -gently -greensboro -tulsa -locking -casey -controversial -draws -fridge -blanket -bloom -qc -simpsons -lou -elliott -recovered -fraser -justify -upgrading -blades -pgp -loops -surge -frontpage -trauma -aw -tahoe -advert -possess -demanding -defensive -sip -flashers -subaru -forbidden -tf -vanilla -programmers -pj -monitored -installations -deutschland -picnic -souls -arrivals -spank -cw -practitioner -motivated -wr -dumb -smithsonian -hollow -vault -securely -examining -fioricet -groove -revelation -rg -pursuit -delegation -wires -bl -dictionaries -mails -backing -greenhouse -sleeps -vc -blake -transparency -dee -travis -wx -endless -figured -orbit -currencies -niger -bacon -survivors -positioning -heater -colony -cannon -circus -promoted -forbes -mae -moldova -mel -descending -paxil -spine -trout -enclosed -feat -temporarily -ntsc -cooked -thriller -transmit -apnic -fatty -gerald -pressed -frequencies -scanned -reflections -hunger -mariah -sic -municipality -usps -joyce -detective -surgeon -cement -experiencing -fireplace -endorsement -bg -planners -disputes -textiles -missile -intranet -closes -seq -psychiatry -persistent -deborah -conf -marco -assists -summaries -glow -gabriel -auditor -wma -aquarium -violin -prophet -cir -bracket -looksmart -isaac -oxide -oaks -magnificent -erik -colleague -naples -promptly -modems -adaptation -hu -harmful -paintball -prozac -sexually -enclosure -acm -dividend -newark -kw -paso -glucose -phantom -norm -playback -supervisors -westminster -turtle -ips -distances -absorption -treasures -dsc -warned -neural -ware -fossil -mia -hometown -badly -transcripts -apollo -wan -disappointed -persian -continually -communist -collectible -handmade -greene -entrepreneurs -robots -grenada -creations -jade -scoop -acquisitions -foul -keno -gtk -earning -mailman -sanyo -nested -biodiversity -excitement -somalia -movers -verbal -blink -presently -seas -carlo -workflow -mysterious -novelty -bryant -tiles -voyuer -librarian -subsidiaries -switched -stockholm -tamil -garmin -ru -pose -fuzzy -indonesian -grams -therapist -richards -mrna -budgets -toolkit -promising -relaxation -goat -render -carmen -ira -sen -thereafter -hardwood -erotica -temporal -sail -forge -commissioners -dense -dts -brave -forwarding -qt -awful -nightmare -airplane -reductions -southampton -istanbul -impose -organisms -sega -telescope -viewers -asbestos -portsmouth -cdna -meyer -enters -pod -savage -advancement -wu -harassment -willow -resumes -bolt -gage -throwing -existed -whore -generators -lu -wagon -barbie -dat -favour -soa -knock -urge -smtp -generates -potatoes -thorough -replication -inexpensive -kurt -receptors -peers -roland -optimum -neon -interventions -quilt -huntington -creature -ours -mounts -syracuse -internship -lone -refresh -aluminium -snowboard -beastality -webcast -michel -evanescence -subtle -coordinated -notre -shipments -maldives -stripes -firmware -antarctica -cope -shepherd -lm -canberra -cradle -chancellor -mambo -lime -kirk -flour -controversy -legendary -bool -sympathy -choir -avoiding -beautifully -blond -expects -cho -jumping -fabrics -antibodies -polymer -hygiene -wit -poultry -virtue -burst -examinations -surgeons -bouquet -immunology -promotes -mandate -wiley -departmental -bbs -spas -ind -corpus -johnston -terminology -gentleman -fibre -reproduce -convicted -shades -jets -indices -roommates -adware -qui -intl -threatening -spokesman -zoloft -activists -frankfurt -prisoner -daisy -halifax -encourages -ultram -cursor -assembled -earliest -donated -stuffed -restructuring -insects -terminals -crude -morrison -maiden -simulations -cz -sufficiently -examines -viking -myrtle -bored -cleanup -yarn -knit -conditional -mug -crossword -bother -budapest -conceptual -knitting -attacked -hl -bhutan -liechtenstein -mating -compute -redhead -arrives -translator -automobiles -tractor -allah -continent -ob -unwrap -fares -longitude -resist -challenged -telecharger -hoped -pike -safer -insertion -instrumentation -ids -hugo -wagner -constraint -groundwater -touched -strengthening -cologne -gzip -wishing -ranger -smallest -insulation -newman -marsh -ricky -ctrl -scared -theta -infringement -bent -laos -subjective -monsters -asylum -lightbox -robbie -stake -cocktail -outlets -swaziland -varieties -arbor -mediawiki -configurations -poison diff --git a/venv/lib/python3.6/site-packages/passwordstrength/database/leetspeak.yaml b/venv/lib/python3.6/site-packages/passwordstrength/database/leetspeak.yaml deleted file mode 100644 index 92a4723..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/database/leetspeak.yaml +++ /dev/null @@ -1,18 +0,0 @@ -"min": - "a": ["&", "@"] - "b": ["6"] - "e": ["3"] - "h": ["#"] - "i": ["!"] - "l": ["1"] - "o": ["0"] - "p": ["%"] - "q": ["?", "9"] - "r": ["2", "4"] - "s": ["$", "5"] - "t": ["7"] - "x": ["*", "8"] -"slim": - "c": - -#"\'()+,-./:;<=>[\\]^_`{|}~ \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/passwordstrength/database/words.txt b/venv/lib/python3.6/site-packages/passwordstrength/database/words.txt deleted file mode 100644 index a6c0012..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/database/words.txt +++ /dev/null @@ -1,466544 +0,0 @@ -2 -1080 -&c -10-point -10th -11-point -12-point -16-point -18-point -1st -2,4,5-t -2,4-d -20-point -2D -2nd -30-30 -3D -3-D -3M -3rd -48-point -4-D -4GL -4H -4th -5-point -5-T -5th -6-point -6th -7-point -7th -8-point -8th -9-point -9th -a -a' -a- -A&M -A&P -A. -A.A.A. -A.B. -A.B.A. -A.C. -A.D. -A.D.C. -A.F. -A.F.A.M. -A.G. -A.H. -A.I. -A.I.A. -A.I.D. -A.L. -A.L.P. -A.M. -A.M.A. -A.M.D.G. -A.N. -a.p. -a.r. -A.R.C.S. -A.U. -A.U.C. -A.V. -a.w. -A.W.O.L. -A/C -A/F -A/O -A/P -A/V -A1 -A-1 -A4 -A5 -AA -AAA -AAAA -AAAAAA -AAAL -AAAS -Aaberg -Aachen -AAE -AAEE -AAF -AAG -aah -aahed -aahing -aahs -AAII -aal -Aalborg -Aalesund -aalii -aaliis -aals -Aalst -Aalto -AAM -AAMSI -Aandahl -A-and-R -Aani -AAO -AAP -AAPSS -Aaqbiye -Aar -Aara -Aarau -AARC -aardvark -aardvarks -aardwolf -aardwolves -Aaren -Aargau -aargh -Aarhus -Aarika -Aaron -Aaronic -Aaronical -Aaronite -Aaronitic -Aaron's-beard -Aaronsburg -Aaronson -AARP -aarrgh -aarrghh -Aaru -AAS -A'asia -aasvogel -aasvogels -AAU -AAUP -AAUW -AAVSO -AAX -A-axes -A-axis -AB -ab- -ABA -Ababa -Ababdeh -Ababua -abac -abaca -abacay -abacas -abacate -abacaxi -abaci -abacinate -abacination -abacisci -abaciscus -abacist -aback -abacli -Abaco -abacot -abacterial -abactinal -abactinally -abaction -abactor -abaculi -abaculus -abacus -abacuses -Abad -abada -Abadan -Abaddon -abadejo -abadengo -abadia -Abadite -abaff -abaft -Abagael -Abagail -Abagtha -abay -abayah -Abailard -abaisance -abaised -abaiser -abaisse -abaissed -abaka -Abakan -abakas -Abakumov -abalation -abalienate -abalienated -abalienating -abalienation -abalone -abalones -Abama -abamp -abampere -abamperes -abamps -Abana -aband -abandon -abandonable -abandoned -abandonedly -abandonee -abandoner -abandoners -abandoning -abandonment -abandonments -abandons -abandum -abanet -abanga -Abanic -abannition -Abantes -abapical -abaptiston -abaptistum -Abarambo -Abarbarea -Abaris -abarthrosis -abarticular -abarticulation -Abas -abase -abased -abasedly -abasedness -abasement -abasements -abaser -abasers -abases -Abasgi -abash -abashed -abashedly -abashedness -abashes -abashing -abashless -abashlessly -abashment -abashments -abasia -abasias -abasic -abasing -abasio -abask -abassi -Abassieh -Abassin -abastard -abastardize -abastral -abatable -abatage -Abate -abated -abatement -abatements -abater -abaters -abates -abatic -abating -abatis -abatised -abatises -abatjour -abatjours -abaton -abator -abators -ABATS -abattage -abattis -abattised -abattises -abattoir -abattoirs -abattu -abattue -Abatua -abature -abaue -abave -abaxial -abaxile -abaze -abb -Abba -abbacy -abbacies -abbacomes -Abbadide -Abbai -abbaye -abbandono -abbas -abbasi -Abbasid -abbassi -Abbassid -Abbasside -Abbate -abbatial -abbatical -abbatie -Abbe -Abbey -abbeys -abbey's -abbeystead -abbeystede -abbes -abbess -abbesses -abbest -Abbevilean -Abbeville -Abbevillian -Abbi -Abby -Abbie -Abbye -Abbyville -abboccato -abbogada -Abbot -abbotcy -abbotcies -abbotnullius -abbotric -abbots -abbot's -Abbotsen -Abbotsford -abbotship -abbotships -Abbotson -Abbotsun -Abbott -Abbottson -Abbottstown -Abboud -abbozzo -ABBR -abbrev -abbreviatable -abbreviate -abbreviated -abbreviately -abbreviates -abbreviating -abbreviation -abbreviations -abbreviator -abbreviatory -abbreviators -abbreviature -abbroachment -ABC -abcess -abcissa -abcoulomb -ABCs -abd -abdal -abdali -abdaria -abdat -Abdel -Abd-el-Kadir -Abd-el-Krim -Abdella -Abderhalden -Abderian -Abderite -Abderus -abdest -Abdias -abdicable -abdicant -abdicate -abdicated -abdicates -abdicating -abdication -abdications -abdicative -abdicator -Abdiel -abditive -abditory -abdom -abdomen -abdomens -abdomen's -abdomina -abdominal -Abdominales -abdominalia -abdominalian -abdominally -abdominals -abdominoanterior -abdominocardiac -abdominocentesis -abdominocystic -abdominogenital -abdominohysterectomy -abdominohysterotomy -abdominoposterior -abdominoscope -abdominoscopy -abdominothoracic -abdominous -abdomino-uterotomy -abdominovaginal -abdominovesical -Abdon -Abdu -abduce -abduced -abducens -abducent -abducentes -abduces -abducing -abduct -abducted -abducting -abduction -abductions -abduction's -abductor -abductores -abductors -abductor's -abducts -Abdul -Abdul-Aziz -Abdul-baha -Abdulla -Abe -a-be -abeam -abear -abearance -Abebi -abecedaire -abecedary -abecedaria -abecedarian -abecedarians -abecedaries -abecedarium -abecedarius -abed -abede -abedge -Abednego -abegge -Abey -abeyance -abeyances -abeyancy -abeyancies -abeyant -abeigh -ABEL -Abelard -abele -abeles -Abelia -Abelian -Abelicea -Abelite -Abell -Abelmoschus -abelmosk -abelmosks -abelmusk -Abelonian -Abelson -abeltree -Abencerrages -abend -abends -Abenezra -abenteric -Abeokuta -abepithymia -ABEPP -Abercromby -Abercrombie -Aberdare -aberdavine -Aberdeen -Aberdeenshire -aberdevine -Aberdonian -aberduvine -Aberfan -Aberglaube -Aberia -Aberystwyth -Abernant -Abernathy -abernethy -Abernon -aberr -aberrance -aberrancy -aberrancies -aberrant -aberrantly -aberrants -aberrate -aberrated -aberrating -aberration -aberrational -aberrations -aberrative -aberrator -aberrometer -aberroscope -Abert -aberuncate -aberuncator -abesse -abessive -abet -abetment -abetments -abets -abettal -abettals -abetted -abetter -abetters -abetting -abettor -abettors -Abeu -abevacuation -abfarad -abfarads -ABFM -Abgatha -ABHC -abhenry -abhenries -abhenrys -abhinaya -abhiseka -abhominable -abhor -abhorred -abhorrence -abhorrences -abhorrency -abhorrent -abhorrently -abhorrer -abhorrers -abhorrible -abhorring -abhors -Abhorson -ABI -aby -Abia -Abiathar -Abib -abichite -abidal -abidance -abidances -abidden -abide -abided -abider -abiders -abides -abidi -abiding -abidingly -abidingness -Abidjan -Abydos -Abie -abye -abied -abyed -abiegh -abience -abient -Abies -abyes -abietate -abietene -abietic -abietin -Abietineae -abietineous -abietinic -abietite -Abiezer -Abigael -Abigail -abigails -abigailship -Abigale -abigeat -abigei -abigeus -Abihu -abying -Abijah -Abyla -abilao -Abilene -abiliment -Abilyne -abilitable -ability -abilities -ability's -abilla -abilo -abime -Abimelech -Abineri -Abingdon -Abinger -Abington -Abinoam -Abinoem -abintestate -abiogeneses -abiogenesis -abiogenesist -abiogenetic -abiogenetical -abiogenetically -abiogeny -abiogenist -abiogenous -abiology -abiological -abiologically -abioses -abiosis -abiotic -abiotical -abiotically -abiotrophy -abiotrophic -Abipon -Abiquiu -abir -abirritant -abirritate -abirritated -abirritating -abirritation -abirritative -abys -Abisag -Abisha -Abishag -Abisia -abysm -abysmal -abysmally -abysms -Abyss -abyssa -abyssal -abysses -Abyssinia -Abyssinian -abyssinians -abyssobenthonic -abyssolith -abyssopelagic -abyss's -abyssus -abiston -abit -Abitibi -Abiu -abiuret -Abixah -abject -abjectedness -abjection -abjections -abjective -abjectly -abjectness -abjectnesses -abjoint -abjudge -abjudged -abjudging -abjudicate -abjudicated -abjudicating -abjudication -abjudicator -abjugate -abjunct -abjunction -abjunctive -abjuration -abjurations -abjuratory -abjure -abjured -abjurement -abjurer -abjurers -abjures -abjuring -abkar -abkari -abkary -Abkhas -Abkhasia -Abkhasian -Abkhaz -Abkhazia -Abkhazian -abl -abl. -ablach -ablactate -ablactated -ablactating -ablactation -ablaqueate -ablare -A-blast -ablastemic -ablastin -ablastous -ablate -ablated -ablates -ablating -ablation -ablations -ablatitious -ablatival -ablative -ablatively -ablatives -ablator -ablaut -ablauts -ablaze -able -able-bodied -able-bodiedness -ableeze -ablegate -ablegates -ablegation -able-minded -able-mindedness -ablend -ableness -ablepharia -ablepharon -ablepharous -Ablepharus -ablepsy -ablepsia -ableptical -ableptically -abler -ables -ablesse -ablest -ablet -ablewhackets -ably -ablings -ablins -ablock -abloom -ablow -ABLS -ablude -abluent -abluents -ablush -ablute -abluted -ablution -ablutionary -ablutions -abluvion -ABM -abmho -abmhos -abmodality -abmodalities -abn -Abnaki -Abnakis -abnegate -abnegated -abnegates -abnegating -abnegation -abnegations -abnegative -abnegator -abnegators -Abner -abnerval -abnet -abneural -abnormal -abnormalcy -abnormalcies -abnormalise -abnormalised -abnormalising -abnormalism -abnormalist -abnormality -abnormalities -abnormalize -abnormalized -abnormalizing -abnormally -abnormalness -abnormals -abnormity -abnormities -abnormous -abnumerable -Abo -aboard -aboardage -Abobra -abococket -abodah -abode -aboded -abodement -abodes -abode's -abody -aboding -abogado -abogados -abohm -abohms -aboideau -aboideaus -aboideaux -aboil -aboiteau -aboiteaus -aboiteaux -abolete -abolish -abolishable -abolished -abolisher -abolishers -abolishes -abolishing -abolishment -abolishments -abolishment's -abolition -abolitionary -abolitionise -abolitionised -abolitionising -abolitionism -abolitionist -abolitionists -abolitionize -abolitionized -abolitionizing -abolitions -abolla -abollae -aboma -abomas -abomasa -abomasal -abomasi -abomasum -abomasus -abomasusi -A-bomb -abominability -abominable -abominableness -abominably -abominate -abominated -abominates -abominating -abomination -abominations -abominator -abominators -abomine -abondance -Abongo -abonne -abonnement -aboon -aborad -aboral -aborally -abord -Aboriginal -aboriginality -aboriginally -aboriginals -aboriginary -Aborigine -aborigines -aborigine's -Abor-miri -Aborn -aborning -a-borning -aborsement -aborsive -abort -aborted -aborter -aborters -aborticide -abortient -abortifacient -abortin -aborting -abortion -abortional -abortionist -abortionists -abortions -abortion's -abortive -abortively -abortiveness -abortogenic -aborts -abortus -abortuses -abos -abote -Abott -abouchement -aboudikro -abought -Aboukir -aboulia -aboulias -aboulic -abound -abounded -abounder -abounding -aboundingly -abounds -Abourezk -about -about-face -about-faced -about-facing -abouts -about-ship -about-shipped -about-shipping -about-sledge -about-turn -above -aboveboard -above-board -above-cited -abovedeck -above-found -above-given -aboveground -abovementioned -above-mentioned -above-named -aboveproof -above-quoted -above-reported -aboves -abovesaid -above-said -abovestairs -above-water -above-written -abow -abox -Abp -ABPC -Abqaiq -abr -abr. -Abra -abracadabra -abrachia -abrachias -abradable -abradant -abradants -abrade -abraded -abrader -abraders -abrades -abrading -Abraham -Abrahamic -Abrahamidae -Abrahamite -Abrahamitic -Abraham-man -Abrahams -Abrahamsen -Abrahan -abray -abraid -Abram -Abramis -Abramo -Abrams -Abramson -Abran -abranchial -abranchialism -abranchian -Abranchiata -abranchiate -abranchious -abrasax -abrase -abrased -abraser -abrash -abrasing -abrasiometer -abrasion -abrasions -abrasion's -abrasive -abrasively -abrasiveness -abrasivenesses -abrasives -abrastol -abraum -abraxas -abrazite -abrazitic -abrazo -abrazos -abreact -abreacted -abreacting -abreaction -abreactions -abreacts -abreast -abreed -abrege -abreid -abrenounce -abrenunciate -abrenunciation -abreption -abret -abreuvoir -abri -abrico -abricock -abricot -abridgable -abridge -abridgeable -abridged -abridgedly -abridgement -abridgements -abridger -abridgers -abridges -abridging -abridgment -abridgments -abrim -abrin -abrine -abris -abristle -abroach -abroad -Abrocoma -abrocome -abrogable -abrogate -abrogated -abrogates -abrogating -abrogation -abrogations -abrogative -abrogator -abrogators -Abroma -Abroms -Abronia -abrood -abrook -abrosia -abrosias -abrotanum -abrotin -abrotine -abrupt -abruptedly -abrupter -abruptest -abruptio -abruption -abruptiones -abruptly -abruptness -Abrus -Abruzzi -ABS -abs- -Absa -Absalom -absampere -Absaraka -Absaroka -Absarokee -absarokite -ABSBH -abscam -abscess -abscessed -abscesses -abscessing -abscession -abscessroot -abscind -abscise -abscised -abscises -abscisin -abscising -abscisins -abscision -absciss -abscissa -abscissae -abscissas -abscissa's -abscisse -abscissin -abscission -abscissions -absconce -abscond -absconded -abscondedly -abscondence -absconder -absconders -absconding -absconds -absconsa -abscoulomb -abscound -Absecon -absee -absey -abseil -abseiled -abseiling -abseils -absence -absences -absence's -absent -absentation -absented -absentee -absenteeism -absentees -absentee's -absenteeship -absenter -absenters -absentia -absenting -absently -absentment -absentminded -absent-minded -absentmindedly -absent-mindedly -absentmindedness -absent-mindedness -absentmindednesses -absentness -absents -absfarad -abshenry -Abshier -Absi -absinth -absinthe -absinthes -absinthial -absinthian -absinthiate -absinthiated -absinthiating -absinthic -absinthiin -absinthin -absinthine -absinthism -absinthismic -absinthium -absinthol -absinthole -absinths -Absyrtus -absis -absist -absistos -absit -absmho -absohm -absoil -absolent -Absolute -absolutely -absoluteness -absoluter -absolutes -absolutest -absolution -absolutions -absolutism -absolutist -absolutista -absolutistic -absolutistically -absolutists -absolutive -absolutization -absolutize -absolutory -absolvable -absolvatory -absolve -absolved -absolvent -absolver -absolvers -absolves -absolving -absolvitor -absolvitory -absonant -absonous -absorb -absorbability -absorbable -absorbance -absorbancy -absorbant -absorbed -absorbedly -absorbedness -absorbefacient -absorbency -absorbencies -absorbent -absorbents -absorber -absorbers -absorbing -absorbingly -absorbition -absorbs -absorbtion -absorpt -absorptance -absorptiometer -absorptiometric -absorption -absorptional -absorptions -absorption's -absorptive -absorptively -absorptiveness -absorptivity -absquatulate -absquatulation -abstain -abstained -abstainer -abstainers -abstaining -abstainment -abstains -abstemious -abstemiously -abstemiousness -abstention -abstentionism -abstentionist -abstentions -abstentious -absterge -absterged -abstergent -absterges -absterging -absterse -abstersion -abstersive -abstersiveness -abstertion -abstinence -abstinences -abstinency -abstinent -abstinential -abstinently -abstort -abstr -abstract -abstractable -abstracted -abstractedly -abstractedness -abstracter -abstracters -abstractest -abstracting -abstraction -abstractional -abstractionism -abstractionist -abstractionists -abstractions -abstraction's -abstractitious -abstractive -abstractively -abstractiveness -abstractly -abstractness -abstractnesses -abstractor -abstractors -abstractor's -abstracts -abstrahent -abstrict -abstricted -abstricting -abstriction -abstricts -abstrude -abstruse -abstrusely -abstruseness -abstrusenesses -abstruser -abstrusest -abstrusion -abstrusity -abstrusities -absume -absumption -absurd -absurder -absurdest -absurdism -absurdist -absurdity -absurdities -absurdity's -absurdly -absurdness -absurds -absurdum -absvolt -abt -abterminal -abthain -abthainry -abthainrie -abthanage -abtruse -Abu -abubble -Abu-Bekr -Abucay -abucco -abuilding -Abukir -abuleia -Abulfeda -abulia -abulias -abulic -abulyeit -abulomania -abumbral -abumbrellar -Abuna -abundance -abundances -abundancy -abundant -Abundantia -abundantly -abune -abura -aburabozu -aburagiri -aburban -Abury -aburst -aburton -abusable -abusage -abuse -abused -abusedly -abusee -abuseful -abusefully -abusefulness -abuser -abusers -abuses -abush -abusing -abusion -abusious -abusive -abusively -abusiveness -abusivenesses -abut -Abuta -Abutilon -abutilons -abutment -abutments -abuts -abuttal -abuttals -abutted -abutter -abutters -abutter's -abutting -abuzz -abv -abvolt -abvolts -abwab -abwatt -abwatts -ac -ac- -a-c -AC/DC -ACAA -Acacallis -acacatechin -acacatechol -Acacea -Acaceae -acacetin -Acacia -Acacian -acacias -acaciin -acacin -acacine -acad -academe -academes -Academy -academia -academial -academian -academias -Academic -academical -academically -academicals -academician -academicians -academicianship -academicism -academics -academie -academies -academy's -academise -academised -academising -academism -academist -academite -academization -academize -academized -academizing -Academus -Acadia -acadialite -Acadian -Acadie -Acaena -acajou -acajous -acal -acalculia -acale -acaleph -Acalepha -Acalephae -acalephan -acalephe -acalephes -acalephoid -acalephs -Acalia -acalycal -acalycine -acalycinous -acalyculate -Acalypha -Acalypterae -Acalyptrata -Acalyptratae -acalyptrate -Acamar -Acamas -Acampo -acampsia -acana -acanaceous -acanonical -acanth -acanth- -acantha -Acanthaceae -acanthaceous -acanthad -Acantharia -acanthi -Acanthia -acanthial -acanthin -acanthine -acanthion -acanthite -acantho- -acanthocarpous -Acanthocephala -acanthocephalan -Acanthocephali -acanthocephalous -Acanthocereus -acanthocladous -Acanthodea -acanthodean -Acanthodei -Acanthodes -acanthodian -Acanthodidae -Acanthodii -Acanthodini -acanthoid -Acantholimon -acantholysis -acanthology -acanthological -acanthoma -acanthomas -Acanthomeridae -acanthon -Acanthopanax -Acanthophis -acanthophorous -acanthopod -acanthopodous -acanthopomatous -acanthopore -acanthopteran -Acanthopteri -acanthopterygian -Acanthopterygii -acanthopterous -acanthoses -acanthosis -acanthotic -acanthous -Acanthuridae -Acanthurus -acanthus -acanthuses -acanthuthi -acapnia -acapnial -acapnias -acappella -acapsular -acapu -Acapulco -acara -Acarapis -acarari -acardia -acardiac -acardite -acari -acarian -acariasis -acariatre -acaricidal -acaricide -acarid -Acarida -acaridae -acaridan -acaridans -Acaridea -acaridean -acaridomatia -acaridomatium -acarids -acariform -Acarina -acarine -acarines -acarinosis -Acarnan -acarocecidia -acarocecidium -acarodermatitis -acaroid -acarol -acarology -acarologist -acarophilous -acarophobia -acarotoxic -acarpellous -acarpelous -acarpous -Acarus -ACAS -acast -Acastus -acatalectic -acatalepsy -acatalepsia -acataleptic -acatallactic -acatamathesia -acataphasia -acataposis -acatastasia -acatastatic -acate -acategorical -acater -acatery -acates -acatharsy -acatharsia -acatholic -acaudal -acaudate -acaudelescent -acaulescence -acaulescent -acauline -acaulose -acaulous -ACAWS -ACB -ACBL -ACC -acc. -acca -accable -Accad -accademia -Accadian -Accalia -acce -accede -acceded -accedence -acceder -acceders -accedes -acceding -accel -accel. -accelerable -accelerando -accelerant -accelerate -accelerated -acceleratedly -accelerates -accelerating -acceleratingly -acceleration -accelerations -accelerative -accelerator -acceleratorh -acceleratory -accelerators -accelerograph -accelerometer -accelerometers -accelerometer's -accend -accendibility -accendible -accensed -accension -accensor -accent -accented -accenting -accentless -accentor -accentors -accents -accentuable -accentual -accentuality -accentually -accentuate -accentuated -accentuates -accentuating -accentuation -accentuations -accentuator -accentus -accept -acceptability -acceptabilities -acceptable -acceptableness -acceptably -acceptance -acceptances -acceptance's -acceptancy -acceptancies -acceptant -acceptation -acceptavit -accepted -acceptedly -acceptee -acceptees -accepter -accepters -acceptilate -acceptilated -acceptilating -acceptilation -accepting -acceptingly -acceptingness -acception -acceptive -acceptor -acceptors -acceptor's -acceptress -accepts -accerse -accersition -accersitor -access -accessability -accessable -accessary -accessaries -accessarily -accessariness -accessaryship -accessed -accesses -accessibility -accessibilities -accessible -accessibleness -accessibly -accessing -accession -accessional -accessioned -accessioner -accessioning -accessions -accession's -accessit -accessive -accessively -accessless -accessor -accessory -accessorial -accessories -accessorii -accessorily -accessoriness -accessory's -accessorius -accessoriusorii -accessorize -accessorized -accessorizing -accessors -accessor's -acciaccatura -acciaccaturas -acciaccature -accidence -accidency -accidencies -accident -accidental -accidentalism -accidentalist -accidentality -accidentally -accidentalness -accidentals -accidentary -accidentarily -accidented -accidential -accidentiality -accidently -accident-prone -accidents -accidia -accidias -accidie -accidies -accinge -accinged -accinging -accipenser -accipient -Accipiter -accipitral -accipitrary -Accipitres -accipitrine -accipter -accise -accismus -accite -Accius -acclaim -acclaimable -acclaimed -acclaimer -acclaimers -acclaiming -acclaims -acclamation -acclamations -acclamator -acclamatory -acclimatable -acclimatation -acclimate -acclimated -acclimatement -acclimates -acclimating -acclimation -acclimations -acclimatisable -acclimatisation -acclimatise -acclimatised -acclimatiser -acclimatising -acclimatizable -acclimatization -acclimatizations -acclimatize -acclimatized -acclimatizer -acclimatizes -acclimatizing -acclimature -acclinal -acclinate -acclivity -acclivities -acclivitous -acclivous -accloy -accoast -accoy -accoyed -accoying -accoil -Accokeek -accolade -accoladed -accolades -accolated -accolent -accoll -accolle -accolled -accollee -Accomac -accombination -accommodable -accommodableness -accommodate -accommodated -accommodately -accommodateness -accommodates -accommodating -accommodatingly -accommodatingness -accommodation -accommodational -accommodationist -accommodations -accommodative -accommodatively -accommodativeness -accommodator -accommodators -accomodate -accompanable -accompany -accompanied -accompanier -accompanies -accompanying -accompanyist -accompaniment -accompanimental -accompaniments -accompaniment's -accompanist -accompanists -accompanist's -accomplement -accompletive -accompli -accomplice -accomplices -accompliceship -accomplicity -accomplis -accomplish -accomplishable -accomplished -accomplisher -accomplishers -accomplishes -accomplishing -accomplishment -accomplishments -accomplishment's -accomplisht -accompt -accord -accordable -accordance -accordances -accordancy -accordant -accordantly -accordatura -accordaturas -accordature -accorded -accorder -accorders -according -accordingly -accordion -accordionist -accordionists -accordions -accordion's -accords -accorporate -accorporation -accost -accostable -accosted -accosting -accosts -accouche -accouchement -accouchements -accoucheur -accoucheurs -accoucheuse -accoucheuses -accounsel -account -accountability -accountabilities -accountable -accountableness -accountably -accountancy -accountancies -accountant -accountants -accountant's -accountantship -accounted -accounter -accounters -accounting -accountings -accountment -accountrement -accounts -accouple -accouplement -accourage -accourt -accouter -accoutered -accoutering -accouterment -accouterments -accouters -accoutre -accoutred -accoutrement -accoutrements -accoutres -accoutring -Accoville -ACCRA -accrease -accredit -accreditable -accreditate -accreditation -accreditations -accredited -accreditee -accrediting -accreditment -accredits -accrementitial -accrementition -accresce -accrescence -accrescendi -accrescendo -accrescent -accretal -accrete -accreted -accretes -accreting -accretion -accretionary -accretions -accretion's -accretive -accriminate -Accrington -accroach -accroached -accroaching -accroachment -accroides -accruable -accrual -accruals -accrue -accrued -accruement -accruer -accrues -accruing -ACCS -ACCT -acct. -accts -accubation -accubita -accubitum -accubitus -accueil -accultural -acculturate -acculturated -acculturates -acculturating -acculturation -acculturational -acculturationist -acculturative -acculturize -acculturized -acculturizing -accum -accumb -accumbency -accumbent -accumber -accumulable -accumulate -accumulated -accumulates -accumulating -accumulation -accumulations -accumulativ -accumulative -accumulatively -accumulativeness -accumulator -accumulators -accumulator's -accupy -accur -accuracy -accuracies -accurate -accurately -accurateness -accuratenesses -accurre -accurse -accursed -accursedly -accursedness -accursing -accurst -accurtation -accus -accusable -accusably -accusal -accusals -accusant -accusants -accusation -accusations -accusation's -accusatival -accusative -accusative-dative -accusatively -accusativeness -accusatives -accusator -accusatory -accusatorial -accusatorially -accusatrix -accusatrixes -accuse -accused -accuser -accusers -accuses -accusing -accusingly -accusive -accusor -accustom -accustomation -accustomed -accustomedly -accustomedness -accustoming -accustomize -accustomized -accustomizing -accustoms -Accutron -ACD -ACDA -AC-DC -ACE -acea -aceacenaphthene -aceae -acean -aceanthrene -aceanthrenequinone -acecaffin -acecaffine -aceconitic -aced -acedy -acedia -acediamin -acediamine -acedias -acediast -ace-high -Acey -acey-deucy -aceite -aceituna -Aceldama -aceldamas -acellular -Acemetae -Acemetic -acemila -acenaphthene -acenaphthenyl -acenaphthylene -acenesthesia -acensuada -acensuador -acentric -acentrous -aceology -aceologic -aceous -acephal -Acephala -acephalan -Acephali -acephalia -Acephalina -acephaline -acephalism -acephalist -Acephalite -acephalocyst -acephalous -acephalus -acepots -acequia -acequiador -acequias -Acer -Aceraceae -aceraceous -Acerae -Acerata -acerate -acerated -Acerates -acerathere -Aceratherium -aceratosis -acerb -Acerbas -acerbate -acerbated -acerbates -acerbating -acerber -acerbest -acerbic -acerbically -acerbity -acerbityacerose -acerbities -acerbitude -acerbly -acerbophobia -acerdol -aceric -acerin -acerli -acerola -acerolas -acerose -acerous -acerra -acers -acertannin -acerval -acervate -acervately -acervatim -acervation -acervative -acervose -acervuli -acervuline -acervulus -aces -ace's -acescence -acescency -acescent -acescents -aceship -Acesius -acesodyne -acesodynous -Acessamenus -Acestes -acestoma -acet- -aceta -acetable -acetabula -acetabular -Acetabularia -acetabuliferous -acetabuliform -acetabulous -acetabulum -acetabulums -acetacetic -acetal -acetaldehydase -acetaldehyde -acetaldehydrase -acetaldol -acetalization -acetalize -acetals -acetamid -acetamide -acetamidin -acetamidine -acetamido -acetamids -acetaminol -Acetaminophen -acetanilid -acetanilide -acetanion -acetaniside -acetanisidide -acetanisidine -acetannin -acetary -acetarious -acetars -acetarsone -acetate -acetated -acetates -acetation -acetazolamide -acetbromamide -acetenyl -Acetes -acethydrazide -acetiam -acetic -acetify -acetification -acetified -acetifier -acetifies -acetifying -acetyl -acetylacetonates -acetylacetone -acetylamine -acetylaminobenzene -acetylaniline -acetylasalicylic -acetylate -acetylated -acetylating -acetylation -acetylative -acetylator -acetylbenzene -acetylbenzoate -acetylbenzoic -acetylbiuret -acetylcarbazole -acetylcellulose -acetylcholine -acetylcholinesterase -acetylcholinic -acetylcyanide -acetylenation -acetylene -acetylenediurein -acetylenes -acetylenic -acetylenyl -acetylenogen -acetylfluoride -acetylglycin -acetylglycine -acetylhydrazine -acetylic -acetylid -acetylide -acetyliodide -acetylizable -acetylization -acetylize -acetylized -acetylizer -acetylizing -acetylmethylcarbinol -acetylperoxide -acetylphenylhydrazine -acetylphenol -acetylrosaniline -acetyls -acetylsalicylate -acetylsalicylic -acetylsalol -acetyltannin -acetylthymol -acetyltropeine -acetylurea -acetimeter -acetimetry -acetimetric -acetin -acetine -acetins -acetite -acetize -acetla -acetmethylanilide -acetnaphthalide -aceto- -acetoacetanilide -acetoacetate -acetoacetic -acetoamidophenol -acetoarsenite -Acetobacter -acetobenzoic -acetobromanilide -acetochloral -acetocinnamene -acetoin -acetol -acetolysis -acetolytic -acetometer -acetometry -acetometric -acetometrical -acetometrically -acetomorphin -acetomorphine -acetonaemia -acetonaemic -acetonaphthone -acetonate -acetonation -acetone -acetonemia -acetonemic -acetones -acetonic -acetonyl -acetonylacetone -acetonylidene -acetonitrile -acetonization -acetonize -acetonuria -acetonurometer -acetophenetide -acetophenetidin -acetophenetidine -acetophenin -acetophenine -acetophenone -acetopiperone -acetopyrin -acetopyrine -acetosalicylic -acetose -acetosity -acetosoluble -acetostearin -acetothienone -acetotoluid -acetotoluide -acetotoluidine -acetous -acetoveratrone -acetoxyl -acetoxyls -acetoxim -acetoxime -acetoxyphthalide -acetphenetid -acetphenetidin -acetract -acettoluide -acetum -aceturic -ACF -ACGI -ac-globulin -ACH -Achab -Achad -Achaea -Achaean -Achaemenes -Achaemenian -Achaemenid -Achaemenidae -Achaemenides -Achaemenidian -Achaemenids -achaenocarp -Achaenodon -Achaeta -achaetous -Achaeus -achafe -achage -Achagua -Achaia -Achaian -Achakzai -achalasia -Achamoth -Achan -Achango -achape -achaque -achar -acharya -Achariaceae -Achariaceous -acharne -acharnement -Acharnians -achate -Achates -Achatina -Achatinella -Achatinidae -achatour -Achaz -ache -acheat -achech -acheck -ached -acheer -ACHEFT -acheilary -acheilia -acheilous -acheiria -acheirous -acheirus -Achelous -Achen -achene -achenes -achenia -achenial -achenium -achenocarp -achenodia -achenodium -acher -Acherman -Achernar -Acheron -Acheronian -Acherontic -Acherontical -aches -Acheson -achesoun -achete -Achetidae -Acheulean -Acheulian -acheweed -achy -achier -achiest -achievability -achievable -achieve -achieved -achievement -achievements -achievement's -achiever -achievers -achieves -achieving -ach-y-fi -achigan -achilary -achylia -Achill -Achille -Achillea -Achillean -achilleas -Achilleid -achillein -achilleine -Achilles -Achillize -achillobursitis -achillodynia -achilous -achylous -Achimaas -achime -Achimelech -Achimenes -achymia -achymous -Achinese -achiness -achinesses -aching -achingly -achiote -achiotes -achira -Achyranthes -achirite -Achyrodes -Achish -Achitophel -achkan -achlamydate -Achlamydeae -achlamydeous -achlorhydria -achlorhydric -achlorophyllous -achloropsia -achluophobia -Achmed -Achmetha -achoke -acholia -acholias -acholic -Acholoe -acholous -acholuria -acholuric -Achomawi -achondrite -achondritic -achondroplasia -achondroplastic -achoo -achor -achordal -Achordata -achordate -Achorion -Achorn -Achras -achree -achroacyte -Achroanthes -achrodextrin -achrodextrinase -achroglobin -achroiocythaemia -achroiocythemia -achroite -achroma -achromacyte -achromasia -achromat -achromat- -achromate -Achromatiaceae -achromatic -achromatically -achromaticity -achromatin -achromatinic -achromatisation -achromatise -achromatised -achromatising -achromatism -Achromatium -achromatizable -achromatization -achromatize -achromatized -achromatizing -achromatocyte -achromatolysis -achromatope -achromatophil -achromatophile -achromatophilia -achromatophilic -achromatopia -achromatopsy -achromatopsia -achromatosis -achromatous -achromats -achromaturia -achromia -achromic -Achromycin -Achromobacter -Achromobacterieae -achromoderma -achromophilous -achromotrichia -achromous -achronical -achronychous -achronism -achroo- -achroodextrin -achroodextrinase -achroous -achropsia -Achsah -achtehalber -achtel -achtelthaler -achter -achterveld -Achuas -achuete -acy -acyanoblepsia -acyanopsia -acichlorid -acichloride -acyclic -acyclically -acicula -aciculae -acicular -acicularity -acicularly -aciculas -aciculate -aciculated -aciculum -aciculums -acid -acidaemia -Acidalium -Acidanthera -Acidaspis -acid-binding -acidemia -acidemias -acider -acid-fast -acid-fastness -acid-forming -acidhead -acid-head -acidheads -acidy -acidic -acidiferous -acidify -acidifiable -acidifiant -acidific -acidification -acidified -acidifier -acidifiers -acidifies -acidifying -acidyl -acidimeter -acidimetry -acidimetric -acidimetrical -acidimetrically -acidite -acidity -acidities -acidize -acidized -acidizing -acidly -acidness -acidnesses -acidogenic -acidoid -acidolysis -acidology -acidometer -acidometry -acidophil -acidophile -acidophilic -acidophilous -acidophilus -acidoproteolytic -acidoses -acidosis -acidosteophyte -acidotic -acidproof -acids -acid-treat -acidulant -acidulate -acidulated -acidulates -acidulating -acidulation -acidulent -acidulous -acidulously -acidulousness -aciduria -acidurias -aciduric -Acie -acier -acierage -Acieral -acierate -acierated -acierates -acierating -acieration -acies -acyesis -acyetic -aciform -acyl -acylal -acylamido -acylamidobenzene -acylamino -acylase -acylate -acylated -acylates -acylating -acylation -aciliate -aciliated -Acilius -acylogen -acyloin -acyloins -acyloxy -acyloxymethane -acyls -Acima -acinaceous -acinaces -acinacifoliate -acinacifolious -acinaciform -acinacious -acinacity -acinar -acinary -acinarious -Acineta -Acinetae -acinetan -Acinetaria -acinetarian -acinetic -acinetiform -Acinetina -acinetinan -acing -acini -acinic -aciniform -acinose -acinotubular -acinous -acinuni -acinus -acious -Acipenser -Acipenseres -acipenserid -Acipenseridae -acipenserine -acipenseroid -Acipenseroidei -acyrology -acyrological -Acis -acystia -acitate -acity -aciurgy -ACK -ack-ack -ackee -ackees -ackey -ackeys -Acker -Ackerley -Ackerly -Ackerman -Ackermanville -Ackley -Ackler -ackman -ackmen -acknew -acknow -acknowing -acknowledge -acknowledgeable -acknowledged -acknowledgedly -acknowledgement -acknowledgements -acknowledger -acknowledgers -acknowledges -acknowledging -acknowledgment -acknowledgments -acknowledgment's -acknown -ack-pirate -ackton -Ackworth -ACL -aclastic -acle -acleidian -acleistocardia -acleistous -Aclemon -aclydes -aclidian -aclinal -aclinic -aclys -a-clock -acloud -ACLS -ACLU -ACM -Acmaea -Acmaeidae -acmaesthesia -acmatic -acme -acmes -acmesthesia -acmic -Acmispon -acmite -Acmon -acne -acned -acneform -acneiform -acnemia -acnes -Acnida -acnodal -acnode -acnodes -ACO -acoasm -acoasma -a-coast -Acocanthera -acocantherin -acock -acockbill -a-cock-bill -a-cock-horse -acocotl -Acoela -Acoelomata -acoelomate -acoelomatous -Acoelomi -acoelomous -acoelous -Acoemetae -Acoemeti -Acoemetic -acoenaesthesia -ACOF -acoin -acoine -Acol -Acolapissa -acold -Acolhua -Acolhuan -acolyctine -acolyte -acolytes -acolyth -acolythate -acolytus -acology -acologic -acolous -acoluthic -Acoma -acomia -acomous -a-compass -aconative -Aconcagua -acondylose -acondylous -acone -aconelline -aconic -aconin -aconine -aconital -aconite -aconites -aconitia -aconitic -aconitin -aconitine -Aconitum -aconitums -acontia -Acontias -acontium -Acontius -aconuresis -acool -acop -acopic -acopyrin -acopyrine -acopon -acor -acorea -acoria -acorn -acorned -acorns -acorn's -acorn-shell -Acorus -acosmic -acosmism -acosmist -acosmistic -acost -Acosta -acotyledon -acotyledonous -acouasm -acouchi -acouchy -acoumeter -acoumetry -acounter -acouometer -acouophonia -acoup -acoupa -acoupe -acousma -acousmas -acousmata -acousmatic -acoustic -acoustical -acoustically -acoustician -acoustico- -acousticolateral -Acousticon -acousticophobia -acoustics -acoustoelectric -ACP -acpt -acpt. -Acquah -acquaint -acquaintance -acquaintances -acquaintance's -acquaintanceship -acquaintanceships -acquaintancy -acquaintant -acquainted -acquaintedness -acquainting -acquaints -Acquaviva -acquent -acquereur -acquest -acquests -acquiesce -acquiesced -acquiescement -acquiescence -acquiescences -acquiescency -acquiescent -acquiescently -acquiescer -acquiesces -acquiescing -acquiescingly -acquiesence -acquiet -acquirability -acquirable -acquire -acquired -acquirement -acquirements -acquirenda -acquirer -acquirers -acquires -acquiring -acquisible -acquisita -acquisite -acquisited -acquisition -acquisitional -acquisitions -acquisition's -acquisitive -acquisitively -acquisitiveness -acquisitor -acquisitum -acquist -acquit -acquital -acquitment -acquits -acquittal -acquittals -acquittance -acquitted -acquitter -acquitting -acquophonia -acr- -Acra -Acrab -acracy -Acraea -acraein -Acraeinae -acraldehyde -Acrania -acranial -acraniate -acrasy -acrasia -Acrasiaceae -Acrasiales -acrasias -Acrasida -Acrasieae -acrasin -acrasins -Acraspeda -acraspedote -acratia -acraturesis -acrawl -acraze -Acre -acreable -acreage -acreages -acreak -acream -acred -acre-dale -Acredula -acre-foot -acre-inch -acreman -acremen -Acres -acre's -acrestaff -a-cry -acrid -acridan -acridane -acrider -acridest -acridian -acridic -acridid -Acrididae -Acridiidae -acridyl -acridin -acridine -acridines -acridinic -acridinium -acridity -acridities -Acridium -Acrydium -acridly -acridness -acridnesses -acridone -acridonium -acridophagus -acriflavin -acriflavine -acryl -acrylaldehyde -Acrilan -acrylate -acrylates -acrylic -acrylics -acrylyl -acrylonitrile -acrimony -acrimonies -acrimonious -acrimoniously -acrimoniousness -acrindolin -acrindoline -acrinyl -acrisy -acrisia -Acrisius -Acrita -acritan -acrite -acrity -acritical -acritochromacy -acritol -acritude -ACRNEMA -acro- -Acroa -acroaesthesia -acroama -acroamata -acroamatic -acroamatical -acroamatics -acroanesthesia -acroarthritis -acroasis -acroasphyxia -acroataxia -acroatic -acrobacy -acrobacies -acrobat -Acrobates -acrobatholithic -acrobatic -acrobatical -acrobatically -acrobatics -acrobatism -acrobats -acrobat's -acrobystitis -acroblast -acrobryous -Acrocarpi -acrocarpous -acrocentric -acrocephaly -acrocephalia -acrocephalic -acrocephalous -Acrocera -Acroceratidae -Acroceraunian -Acroceridae -Acrochordidae -Acrochordinae -acrochordon -acrocyanosis -acrocyst -acrock -Acroclinium -Acrocomia -acroconidium -acrocontracture -acrocoracoid -Acrocorinth -acrodactyla -acrodactylum -acrodermatitis -acrodynia -acrodont -acrodontism -acrodonts -acrodrome -acrodromous -Acrodus -acroesthesia -acrogamy -acrogamous -acrogen -acrogenic -acrogenous -acrogenously -acrogens -Acrogynae -acrogynous -acrography -acrolein -acroleins -acrolith -acrolithan -acrolithic -acroliths -acrology -acrologic -acrologically -acrologies -acrologism -acrologue -acromania -acromastitis -acromegaly -acromegalia -acromegalic -acromegalies -acromelalgia -acrometer -acromia -acromial -acromicria -acromimia -acromioclavicular -acromiocoracoid -acromiodeltoid -Acromyodi -acromyodian -acromyodic -acromyodous -acromiohyoid -acromiohumeral -acromion -acromioscapular -acromiosternal -acromiothoracic -acromyotonia -acromyotonus -acromonogrammatic -acromphalus -acron -acronal -acronarcotic -acroneurosis -acronic -acronyc -acronical -acronycal -acronically -acronycally -acronych -acronichal -acronychal -acronichally -acronychally -acronychous -Acronycta -acronyctous -acronym -acronymic -acronymically -acronymize -acronymized -acronymizing -acronymous -acronyms -acronym's -acronyx -acronomy -acrook -acroparalysis -acroparesthesia -acropathy -acropathology -acropetal -acropetally -acrophobia -acrophonetic -acrophony -acrophonic -acrophonically -acrophonies -acropodia -acropodium -acropoleis -Acropolis -acropolises -acropolitan -Acropora -acropore -acrorhagus -acrorrheuma -acrosarc -acrosarca -acrosarcum -acroscleriasis -acroscleroderma -acroscopic -acrose -acrosome -acrosomes -acrosphacelus -acrospire -acrospired -acrospiring -acrospore -acrosporous -across -across-the-board -acrostic -acrostical -acrostically -acrostichal -Acrosticheae -acrostichic -acrostichoid -Acrostichum -acrosticism -acrostics -acrostolia -acrostolion -acrostolium -acrotarsial -acrotarsium -acroteleutic -acroter -acroteral -acroteria -acroterial -acroteric -acroterion -acroterium -acroterteria -Acrothoracica -acrotic -acrotism -acrotisms -acrotomous -Acrotreta -Acrotretidae -acrotrophic -acrotrophoneurosis -Acrux -ACRV -ACS -ACSE -ACSNET -ACSU -ACT -Acta -actability -actable -Actaea -Actaeaceae -Actaeon -Actaeonidae -acted -actg -actg. -ACTH -Actiad -Actian -actify -actification -actifier -actin -actin- -actinal -actinally -actinautography -actinautographic -actine -actinenchyma -acting -acting-out -actings -Actinia -actiniae -actinian -actinians -Actiniaria -actiniarian -actinias -actinic -actinical -actinically -actinide -actinides -Actinidia -Actinidiaceae -actiniferous -actiniform -actinine -actiniochrome -actiniohematin -Actiniomorpha -actinism -actinisms -Actinistia -actinium -actiniums -actino- -actinobaccilli -actinobacilli -actinobacillosis -actinobacillotic -Actinobacillus -actinoblast -actinobranch -actinobranchia -actinocarp -actinocarpic -actinocarpous -actinochemical -actinochemistry -actinocrinid -Actinocrinidae -actinocrinite -Actinocrinus -actinocutitis -actinodermatitis -actinodielectric -actinodrome -actinodromous -actinoelectric -actinoelectrically -actinoelectricity -actinogonidiate -actinogram -actinograph -actinography -actinographic -actinoid -Actinoida -Actinoidea -actinoids -actinolite -actinolitic -actinology -actinologous -actinologue -actinomere -actinomeric -actinometer -actinometers -actinometry -actinometric -actinometrical -actinometricy -Actinomyces -actinomycese -actinomycesous -actinomycestal -Actinomycetaceae -actinomycetal -Actinomycetales -actinomycete -actinomycetous -actinomycin -actinomycoma -actinomycosis -actinomycosistic -actinomycotic -Actinomyxidia -Actinomyxidiida -actinomorphy -actinomorphic -actinomorphous -actinon -Actinonema -actinoneuritis -actinons -actinophone -actinophonic -actinophore -actinophorous -actinophryan -Actinophrys -actinopod -Actinopoda -actinopraxis -actinopteran -Actinopteri -actinopterygian -Actinopterygii -actinopterygious -actinopterous -actinoscopy -actinosoma -actinosome -Actinosphaerium -actinost -actinostereoscopy -actinostomal -actinostome -actinotherapeutic -actinotherapeutics -actinotherapy -actinotoxemia -actinotrichium -actinotrocha -actinouranium -Actinozoa -actinozoal -actinozoan -actinozoon -actins -actinula -actinulae -action -actionability -actionable -actionably -actional -actionary -actioner -actiones -actionist -actionize -actionized -actionizing -actionless -actions -action's -action-taking -actious -Actipylea -Actis -Actium -activable -activate -activated -activates -activating -activation -activations -activator -activators -activator's -active -active-bodied -actively -active-limbed -active-minded -activeness -actives -activin -activism -activisms -activist -activistic -activists -activist's -activital -activity -activities -activity's -activize -activized -activizing -actless -actomyosin -Acton -Actor -actory -Actoridae -actorish -actor-manager -actor-proof -actors -actor's -actorship -actos -ACTPU -actress -actresses -actressy -actress's -ACTS -ACTU -actual -actualisation -actualise -actualised -actualising -actualism -actualist -actualistic -actuality -actualities -actualization -actualizations -actualize -actualized -actualizes -actualizing -actually -actualness -actuals -actuary -actuarial -actuarially -actuarian -actuaries -actuaryship -actuate -actuated -actuates -actuating -actuation -actuator -actuators -actuator's -actuose -ACTUP -acture -acturience -actus -actutate -act-wait -ACU -acuaesthesia -Acuan -acuate -acuating -acuation -Acubens -acuchi -acuclosure -acuductor -acuerdo -acuerdos -acuesthesia -acuity -acuities -aculea -aculeae -Aculeata -aculeate -aculeated -aculei -aculeiform -aculeolate -aculeolus -aculeus -acumble -acumen -acumens -acuminate -acuminated -acuminating -acumination -acuminose -acuminous -acuminulate -acupress -acupressure -acupunctuate -acupunctuation -acupuncturation -acupuncturator -acupuncture -acupunctured -acupunctures -acupuncturing -acupuncturist -acupuncturists -acurative -Acus -acusection -acusector -acushla -Acushnet -acustom -acutance -acutances -acutangular -acutate -acute -acute-angled -acutely -acutenaculum -acuteness -acutenesses -acuter -acutes -acutest -acuti- -acutiator -acutifoliate -Acutilinguae -acutilingual -acutilobate -acutiplantar -acutish -acuto- -acutograve -acutonodose -acutorsion -ACV -ACW -ACWA -Acworth -ACWP -acxoyatl -ad -ad- -ADA -Adabel -Adabelle -Adachi -adactyl -adactylia -adactylism -adactylous -Adad -adage -adages -adagy -adagial -adagietto -adagiettos -adagio -adagios -adagissimo -Adah -Adaha -Adai -Aday -A-day -Adaiha -Adair -Adairsville -Adairville -adays -Adaize -Adal -Adala -Adalai -Adalard -adalat -Adalbert -Adalheid -Adali -Adalia -Adaliah -adalid -Adalie -Adaline -Adall -Adallard -Adam -Adama -adamance -adamances -adamancy -adamancies -Adam-and-Eve -adamant -adamantean -adamantine -adamantinoma -adamantly -adamantlies -adamantness -adamantoblast -adamantoblastoma -adamantoid -adamantoma -adamants -Adamas -Adamastor -Adamawa -Adamawa-Eastern -adambulacral -Adamec -Adamek -adamellite -Adamello -Adamhood -Adamic -Adamical -Adamically -Adamik -Adamina -Adaminah -adamine -Adamis -Adamite -Adamitic -Adamitical -Adamitism -Adamo -Adamok -Adams -Adamsbasin -Adamsburg -Adamsen -Adamsia -adamsite -adamsites -Adamski -Adam's-needle -Adamson -Adamstown -Adamsun -Adamsville -Adan -Adana -adance -a-dance -adangle -a-dangle -Adansonia -Adao -Adapa -adapid -Adapis -adapt -adaptability -adaptabilities -adaptable -adaptableness -adaptably -adaptation -adaptational -adaptationally -adaptations -adaptation's -adaptative -adapted -adaptedness -adapter -adapters -adapting -adaption -adaptional -adaptionism -adaptions -adaptitude -adaptive -adaptively -adaptiveness -adaptivity -adaptometer -adaptor -adaptorial -adaptors -adapts -Adar -Adara -adarbitrium -adarme -adarticulation -adat -adati -adaty -adatis -adatom -adaunt -Adaurd -adaw -adawe -adawlut -adawn -adaxial -adazzle -ADB -ADC -ADCCP -ADCI -adcon -adcons -adcraft -ADD -add. -Adda -addability -addable -add-add -Addam -Addams -addax -addaxes -ADDCP -addda -addebted -added -addedly -addeem -addend -addenda -addends -addendum -addendums -adder -adderbolt -adderfish -adders -adder's-grass -adder's-meat -adder's-mouth -adder's-mouths -adderspit -adders-tongue -adder's-tongue -adderwort -Addi -Addy -Addia -addibility -addible -addice -addicent -addict -addicted -addictedness -addicting -addiction -addictions -addiction's -addictive -addictively -addictiveness -addictives -addicts -Addie -Addiego -Addiel -Addieville -addiment -adding -Addington -addio -Addis -Addison -Addisonian -Addisoniana -Addyston -addita -additament -additamentary -additiment -addition -additional -additionally -additionary -additionist -additions -addition's -addititious -additive -additively -additives -additive's -additivity -additory -additum -additur -addle -addlebrain -addlebrained -addled -addlehead -addleheaded -addleheadedly -addleheadedness -addlement -addleness -addlepate -addlepated -addlepatedness -addleplot -addles -addling -addlings -addlins -addn -addnl -addoom -addorsed -addossed -addr -address -addressability -addressable -addressed -addressee -addressees -addressee's -addresser -addressers -addresses -addressful -addressing -Addressograph -addressor -addrest -adds -Addu -adduce -adduceable -adduced -adducent -adducer -adducers -adduces -adducible -adducing -adduct -adducted -adducting -adduction -adductive -adductor -adductors -adducts -addulce -ade -adead -a-dead -Adebayo -Adee -adeem -adeemed -adeeming -adeems -adeep -a-deep -Adey -Adel -Adela -Adelaida -Adelaide -Adelaja -adelantado -adelantados -adelante -Adelanto -Adelarthra -Adelarthrosomata -adelarthrosomatous -adelaster -Adelbert -Adele -Adelea -Adeleidae -Adelges -Adelheid -Adelia -Adelice -Adelina -Adelind -Adeline -adeling -adelite -Adeliza -Adell -Adella -Adelle -adelocerous -Adelochorda -adelocodonic -adelomorphic -adelomorphous -adelopod -Adelops -Adelphe -Adelphi -adelphia -Adelphian -adelphic -Adelpho -adelphogamy -Adelphoi -adelpholite -adelphophagy -adelphous -Adelric -ademonist -adempt -adempted -ademption -Aden -aden- -Adena -adenalgy -adenalgia -Adenanthera -adenase -adenasthenia -Adenauer -adendric -adendritic -adenectomy -adenectomies -adenectopia -adenectopic -adenemphractic -adenemphraxis -adenia -adeniform -adenyl -adenylic -adenylpyrophosphate -adenyls -adenin -adenine -adenines -adenitis -adenitises -adenization -adeno- -adenoacanthoma -adenoblast -adenocancroid -adenocarcinoma -adenocarcinomas -adenocarcinomata -adenocarcinomatous -adenocele -adenocellulitis -adenochondroma -adenochondrosarcoma -adenochrome -adenocyst -adenocystoma -adenocystomatous -adenodermia -adenodiastasis -adenodynia -adenofibroma -adenofibrosis -adenogenesis -adenogenous -adenographer -adenography -adenographic -adenographical -adenohypersthenia -adenohypophyseal -adenohypophysial -adenohypophysis -adenoid -adenoidal -adenoidectomy -adenoidectomies -adenoidism -adenoiditis -adenoids -adenolymphocele -adenolymphoma -adenoliomyofibroma -adenolipoma -adenolipomatosis -adenologaditis -adenology -adenological -adenoma -adenomalacia -adenomas -adenomata -adenomatome -adenomatous -adenomeningeal -adenometritis -adenomycosis -adenomyofibroma -adenomyoma -adenomyxoma -adenomyxosarcoma -adenoncus -adenoneural -adenoneure -adenopathy -adenopharyngeal -adenopharyngitis -adenophyllous -adenophyma -adenophlegmon -Adenophora -adenophore -adenophoreus -adenophorous -adenophthalmia -adenopodous -adenosarcoma -adenosarcomas -adenosarcomata -adenosclerosis -adenose -adenoses -adenosine -adenosis -adenostemonous -Adenostoma -adenotyphoid -adenotyphus -adenotome -adenotomy -adenotomic -adenous -adenoviral -adenovirus -adenoviruses -Adeodatus -Adeona -Adephaga -adephagan -adephagia -adephagous -adeps -adept -adepter -adeptest -adeption -adeptly -adeptness -adeptnesses -adepts -adeptship -adequacy -adequacies -adequate -adequately -adequateness -adequation -adequative -Ader -adermia -adermin -adermine -adesmy -adespota -adespoton -Adessenarian -adessive -Adest -adeste -adet -adeuism -adevism -ADEW -ADF -adfected -adffroze -adffrozen -adfiliate -adfix -adfluxion -adfreeze -adfreezing -ADFRF -adfroze -adfrozen -Adger -adglutinate -Adhafera -adhaka -Adham -adhamant -Adhamh -Adhara -adharma -adherant -adhere -adhered -adherence -adherences -adherency -adherend -adherends -adherent -adherently -adherents -adherent's -adherer -adherers -adheres -adherescence -adherescent -adhering -Adhern -adhesion -adhesional -adhesions -adhesive -adhesively -adhesivemeter -adhesiveness -adhesives -adhesive's -adhibit -adhibited -adhibiting -adhibition -adhibits -adhocracy -adhort -ADI -ady -adiabat -adiabatic -adiabatically -adiabolist -adiactinic -adiadochokinesia -adiadochokinesis -adiadokokinesi -adiadokokinesia -adiagnostic -adiamorphic -adiamorphism -Adiana -adiantiform -Adiantum -adiaphanous -adiaphanousness -adiaphon -adiaphonon -adiaphora -adiaphoral -adiaphoresis -adiaphoretic -adiaphory -adiaphorism -adiaphorist -adiaphoristic -adiaphorite -adiaphoron -adiaphorous -adiapneustia -adiate -adiated -adiathermal -adiathermancy -adiathermanous -adiathermic -adiathetic -adiating -adiation -Adib -adibasi -Adi-buddha -Adicea -adicity -Adie -Adiel -Adiell -adience -adient -adieu -adieus -adieux -Adige -Adyge -Adigei -Adygei -Adighe -Adyghe -adight -Adigranth -Adigun -Adila -Adim -Adin -Adina -adynamy -adynamia -adynamias -adynamic -Adine -Adinida -adinidan -adinole -adinvention -adion -adios -adipate -adipescent -adiphenine -adipic -adipyl -adipinic -adipocele -adipocellulose -adipocere -adipoceriform -adipocerite -adipocerous -adipocyte -adipofibroma -adipogenic -adipogenous -adipoid -adipolysis -adipolytic -adipoma -adipomata -adipomatous -adipometer -adiponitrile -adipopectic -adipopexia -adipopexic -adipopexis -adipose -adiposeness -adiposes -adiposis -adiposity -adiposities -adiposogenital -adiposuria -adipous -adipsy -adipsia -adipsic -adipsous -Adirondack -Adirondacks -Adis -adit -adyta -adital -Aditya -aditio -adyton -adits -adytta -adytum -aditus -Adivasi -ADIZ -adj -adj. -adjacence -adjacency -adjacencies -adjacent -adjacently -adjag -adject -adjection -adjectional -adjectitious -adjectival -adjectivally -adjective -adjectively -adjectives -adjective's -adjectivism -adjectivitis -adjiga -adjiger -adjoin -adjoinant -adjoined -adjoinedly -adjoiner -adjoining -adjoiningness -adjoins -adjoint -adjoints -adjourn -adjournal -adjourned -adjourning -adjournment -adjournments -adjourns -adjoust -adjt -adjt. -adjudge -adjudgeable -adjudged -adjudger -adjudges -adjudging -adjudgment -adjudicata -adjudicate -adjudicated -adjudicates -adjudicating -adjudication -adjudications -adjudication's -adjudicative -adjudicator -adjudicatory -adjudicators -adjudicature -adjugate -adjument -adjunct -adjunction -adjunctive -adjunctively -adjunctly -adjuncts -adjunct's -Adjuntas -adjuration -adjurations -adjuratory -adjure -adjured -adjurer -adjurers -adjures -adjuring -adjuror -adjurors -adjust -adjustability -adjustable -adjustable-pitch -adjustably -adjustage -adjustation -adjusted -adjuster -adjusters -adjusting -adjustive -adjustment -adjustmental -adjustments -adjustment's -adjustor -adjustores -adjustoring -adjustors -adjustor's -adjusts -adjutage -adjutancy -adjutancies -adjutant -adjutant-general -adjutants -adjutantship -adjutator -adjute -adjutor -adjutory -adjutorious -adjutrice -adjutrix -adjuvant -adjuvants -adjuvate -Adkins -Adlai -Adlay -Adlar -Adlare -Adlee -adlegation -adlegiare -Adlei -Adley -Adler -Adlerian -adless -adlet -ad-lib -ad-libbed -ad-libber -ad-libbing -Adlumia -adlumidin -adlumidine -adlumin -adlumine -ADM -Adm. -Admah -adman -admarginate -admass -admaxillary -ADMD -admeasure -admeasured -admeasurement -admeasurer -admeasuring -admedial -admedian -admen -admensuration -admerveylle -Admete -Admetus -admi -admin -adminicle -adminicula -adminicular -adminiculary -adminiculate -adminiculation -adminiculum -administer -administerd -administered -administerial -administering -administerings -administers -administrable -administrant -administrants -administrate -administrated -administrates -administrating -administration -administrational -administrationist -administrations -administration's -administrative -administratively -administrator -administrators -administrator's -administratorship -administratress -administratrices -administratrix -adminstration -adminstrations -admirability -admirable -admirableness -admirably -Admiral -admirals -admiral's -admiralship -admiralships -admiralty -Admiralties -admirance -admiration -admirations -admirative -admiratively -admirator -admire -admired -admiredly -admirer -admirers -admires -admiring -admiringly -admissability -admissable -admissibility -admissibilities -admissible -admissibleness -admissibly -admission -admissions -admission's -admissive -admissively -admissory -admit -admits -admittable -admittance -admittances -admittatur -admitted -admittedly -admittee -admitter -admitters -admitty -admittible -admitting -admix -admixed -admixes -admixing -admixt -admixtion -admixture -admixtures -admonish -admonished -admonisher -admonishes -admonishing -admonishingly -admonishment -admonishments -admonishment's -admonition -admonitioner -admonitionist -admonitions -admonition's -admonitive -admonitively -admonitor -admonitory -admonitorial -admonitorily -admonitrix -admortization -admov -admove -admrx -ADN -Adna -Adnah -Adnan -adnascence -adnascent -adnate -adnation -adnations -Adne -adnephrine -adnerval -adnescent -adneural -adnex -adnexa -adnexal -adnexed -adnexitis -adnexopexy -adnominal -adnominally -adnomination -Adnopoz -adnoun -adnouns -adnumber -ado -adobe -adobes -adobo -adobos -adod -adolesce -adolesced -adolescence -adolescences -adolescency -adolescent -adolescently -adolescents -adolescent's -adolescing -Adolf -Adolfo -Adolph -Adolphe -Adolpho -Adolphus -Adon -Adona -Adonai -Adonais -Adonean -Adonia -Adoniad -Adonian -Adonias -Adonic -Adonica -adonidin -Adonijah -adonin -Adoniram -Adonis -adonises -adonist -adonite -adonitol -adonize -adonized -adonizing -Adonoy -adoors -a-doors -adoperate -adoperation -adopt -adoptability -adoptabilities -adoptable -adoptant -adoptative -adopted -adoptedly -adoptee -adoptees -adopter -adopters -adoptian -adoptianism -adoptianist -adopting -adoption -adoptional -adoptionism -adoptionist -adoptions -adoption's -adoptious -adoptive -adoptively -adopts -ador -Adora -adorability -adorable -adorableness -adorably -adoral -adorally -adorant -Adorantes -adoration -adorations -adoratory -Adore -adored -Adoree -adorer -adorers -adores -Adoretus -adoring -adoringly -Adorl -adorn -adornation -Adorne -adorned -adorner -adorners -adorning -adorningly -adornment -adornments -adornment's -adorno -adornos -adorns -adorsed -ados -adosculation -adossed -adossee -Adoula -adoulie -Adowa -adown -Adoxa -Adoxaceae -adoxaceous -adoxy -adoxies -adoxography -adoze -ADP -adp- -adpao -ADPCM -adposition -adpress -adpromission -adpromissor -adq- -adrad -adradial -adradially -adradius -Adramelech -Adrammelech -Adrastea -Adrastos -Adrastus -Adrea -adread -adream -adreamed -adreamt -adrectal -Adrell -adren- -adrenal -adrenalcortical -adrenalectomy -adrenalectomies -adrenalectomize -adrenalectomized -adrenalectomizing -Adrenalin -adrenaline -adrenalize -adrenally -adrenalone -adrenals -adrench -adrenergic -adrenin -adrenine -adrenitis -adreno -adrenochrome -adrenocortical -adrenocorticosteroid -adrenocorticotrophic -adrenocorticotrophin -adrenocorticotropic -adrenolysis -adrenolytic -adrenomedullary -adrenosterone -adrenotrophin -adrenotropic -adrent -Adrestus -adret -adry -Adria -Adriaen -Adriaens -Adrial -adriamycin -Adrian -Adriana -Adriane -Adrianna -Adrianne -Adriano -Adrianople -Adrianopolis -Adriatic -Adriel -Adriell -Adrien -Adriena -Adriene -Adrienne -adrift -adrip -adrogate -adroit -adroiter -adroitest -adroitly -adroitness -adroitnesses -Adron -adroop -adrop -adrostal -adrostral -adrowse -adrue -ADS -adsbud -adscendent -adscititious -adscititiously -adscript -adscripted -adscription -adscriptitious -adscriptitius -adscriptive -adscripts -adsessor -adsheart -adsignify -adsignification -adsmith -adsmithing -adsorb -adsorbability -adsorbable -adsorbate -adsorbates -adsorbed -adsorbent -adsorbents -adsorbing -adsorbs -adsorption -adsorptive -adsorptively -adsorptiveness -ADSP -adspiration -ADSR -adstipulate -adstipulated -adstipulating -adstipulation -adstipulator -adstrict -adstringe -adsum -ADT -adterminal -adtevac -aduana -adular -adularescence -adularescent -adularia -adularias -adulate -adulated -adulates -adulating -adulation -adulator -adulatory -adulators -adulatress -adulce -Adullam -Adullamite -adult -adulter -adulterant -adulterants -adulterate -adulterated -adulterately -adulterateness -adulterates -adulterating -adulteration -adulterations -adulterator -adulterators -adulterer -adulterers -adulterer's -adulteress -adulteresses -adultery -adulteries -adulterine -adulterize -adulterous -adulterously -adulterousness -adulthood -adulthoods -adulticidal -adulticide -adultly -adultlike -adultness -adultoid -adultress -adults -adult's -adumbral -adumbrant -adumbrate -adumbrated -adumbrates -adumbrating -adumbration -adumbrations -adumbrative -adumbratively -adumbrellar -adunation -adunc -aduncate -aduncated -aduncity -aduncous -Adur -adure -adurent -Adurol -adusk -adust -adustion -adustiosis -adustive -Aduwa -adv -adv. -Advaita -advance -advanceable -advanced -advancedness -advancement -advancements -advancement's -advancer -advancers -advances -advancing -advancingly -advancive -advantage -advantaged -advantageous -advantageously -advantageousness -advantages -advantaging -advect -advected -advecting -advection -advectitious -advective -advects -advehent -advena -advenae -advene -advenience -advenient -Advent -advential -Adventism -Adventist -adventists -adventitia -adventitial -adventitious -adventitiously -adventitiousness -adventitiousnesses -adventive -adventively -adventry -advents -adventual -adventure -adventured -adventureful -adventurement -adventurer -adventurers -adventures -adventureship -adventuresome -adventuresomely -adventuresomeness -adventuresomes -adventuress -adventuresses -adventuring -adventurish -adventurism -adventurist -adventuristic -adventurous -adventurously -adventurousness -adverb -adverbial -adverbiality -adverbialize -adverbially -adverbiation -adverbless -adverbs -adverb's -adversa -adversant -adversary -adversaria -adversarial -adversaries -adversariness -adversarious -adversary's -adversative -adversatively -adverse -adversed -adversely -adverseness -adversifoliate -adversifolious -adversing -adversion -adversity -adversities -adversive -adversus -advert -adverted -advertence -advertency -advertent -advertently -adverting -advertisable -advertise -advertised -advertisee -advertisement -advertisements -advertisement's -advertiser -advertisers -advertises -advertising -advertisings -advertizable -advertize -advertized -advertizement -advertizer -advertizes -advertizing -adverts -advice -adviceful -advices -advisability -advisabilities -advisable -advisableness -advisably -advisal -advisatory -advise -advised -advisedly -advisedness -advisee -advisees -advisee's -advisement -advisements -adviser -advisers -advisership -advises -advisy -advising -advisive -advisiveness -adviso -advisor -advisory -advisories -advisorily -advisors -advisor's -advitant -advocaat -advocacy -advocacies -advocate -advocated -advocates -advocateship -advocatess -advocating -advocation -advocative -advocator -advocatory -advocatress -advocatrice -advocatrix -advoyer -advoke -advolution -advoteresse -advowee -advowry -advowsance -advowson -advowsons -advt -advt. -adward -adwesch -adz -adze -adzer -adzes -Adzharia -Adzharistan -adzooks -ae -ae- -ae. -AEA -Aeacidae -Aeacides -Aeacus -Aeaea -Aeaean -AEC -Aechmagoras -Aechmophorus -aecia -aecial -aecidia -Aecidiaceae -aecidial -aecidioform -Aecidiomycetes -aecidiospore -aecidiostage -aecidium -aeciospore -aeciostage -aeciotelia -aecioteliospore -aeciotelium -aecium -aedeagal -aedeagi -aedeagus -aedegi -Aedes -aedicula -aediculae -aedicule -Aedilberct -aedile -aediles -aedileship -aedilian -aedilic -aedility -aedilitian -aedilities -aedine -aedoeagi -aedoeagus -aedoeology -Aedon -Aeetes -AEF -aefald -aefaldy -aefaldness -aefauld -Aegaeon -aegagri -aegagropila -aegagropilae -aegagropile -aegagropiles -aegagrus -Aegates -Aegean -aegemony -aeger -Aegeria -aegerian -aegeriid -Aegeriidae -Aegesta -Aegeus -Aegia -Aegiale -Aegialeus -Aegialia -Aegialitis -Aegicores -aegicrania -aegilops -Aegimius -Aegina -Aeginaea -Aeginetan -Aeginetic -Aegiochus -Aegipan -aegyptilla -Aegyptus -Aegir -aegirine -aegirinolite -aegirite -aegyrite -AEGIS -aegises -Aegisthus -Aegithalos -Aegithognathae -aegithognathism -aegithognathous -Aegium -Aegle -aegophony -Aegopodium -Aegospotami -aegritude -aegrotant -aegrotat -aeipathy -Aekerly -Aelber -Aelbert -Aella -Aello -aelodicon -aeluroid -Aeluroidea -aelurophobe -aelurophobia -aeluropodous -aemia -aenach -Aenea -aenean -Aeneas -Aeneid -Aeneolithic -aeneous -Aeneus -Aeniah -aenigma -aenigmatite -Aenius -Aenneea -aeolharmonica -Aeolia -Aeolian -Aeolic -Aeolicism -aeolid -Aeolidae -Aeolides -Aeolididae -aeolight -aeolina -aeoline -aeolipile -aeolipyle -Aeolis -Aeolism -Aeolist -aeolistic -aeolo- -aeolodicon -aeolodion -aeolomelodicon -aeolopantalon -aeolotropy -aeolotropic -aeolotropism -aeolsklavier -Aeolus -aeon -aeonial -aeonian -aeonic -aeonicaeonist -aeonist -aeons -Aepyceros -Aepyornis -Aepyornithidae -Aepyornithiformes -Aepytus -aeq -Aequi -Aequian -Aequiculi -Aequipalpia -aequor -aequoreal -aequorin -aequorins -aer -aer- -aerage -aeraria -aerarian -aerarium -aerate -aerated -aerates -aerating -aeration -aerations -aerator -aerators -aerenchyma -aerenterectasia -aery -aeri- -Aeria -aerial -aerialist -aerialists -aeriality -aerially -aerialness -aerials -aerial's -aeric -aerical -Aerides -aerie -aeried -Aeriel -Aeriela -Aeriell -aerier -aeries -aeriest -aerifaction -aeriferous -aerify -aerification -aerified -aerifies -aerifying -aeriform -aerily -aeriness -aero -aero- -aeroacoustic -Aerobacter -aerobacteriology -aerobacteriological -aerobacteriologically -aerobacteriologist -aerobacters -aeroballistic -aeroballistics -aerobate -aerobated -aerobatic -aerobatics -aerobating -aerobe -aerobee -aerobes -aerobia -aerobian -aerobic -aerobically -aerobics -aerobiology -aerobiologic -aerobiological -aerobiologically -aerobiologist -aerobion -aerobiont -aerobioscope -aerobiosis -aerobiotic -aerobiotically -aerobious -aerobium -aeroboat -Aerobranchia -aerobranchiate -aerobus -aerocamera -aerocar -aerocartograph -aerocartography -Aerocharidae -aerocyst -aerocolpos -aerocraft -aerocurve -aerodermectasia -aerodynamic -aerodynamical -aerodynamically -aerodynamicist -aerodynamics -aerodyne -aerodynes -aerodone -aerodonetic -aerodonetics -aerodontalgia -aerodontia -aerodontic -aerodrome -aerodromes -aerodromics -aeroduct -aeroducts -aeroelastic -aeroelasticity -aeroelastics -aeroembolism -aeroenterectasia -Aeroflot -aerofoil -aerofoils -aerogel -aerogels -aerogen -aerogene -aerogenes -aerogenesis -aerogenic -aerogenically -aerogenous -aerogeography -aerogeology -aerogeologist -aerognosy -aerogram -aerogramme -aerograms -aerograph -aerographer -aerography -aerographic -aerographical -aerographics -aerographies -aerogun -aerohydrodynamic -aerohydropathy -aerohydroplane -aerohydrotherapy -aerohydrous -aeroyacht -aeroides -Aerojet -Aerol -aerolite -aerolites -aerolith -aerolithology -aeroliths -aerolitic -aerolitics -aerology -aerologic -aerological -aerologies -aerologist -aerologists -aeromaechanic -aeromagnetic -aeromancer -aeromancy -aeromantic -aeromarine -aeromechanic -aeromechanical -aeromechanics -aeromedical -aeromedicine -aerometeorograph -aerometer -aerometry -aerometric -aeromotor -aeron -aeron. -aeronat -aeronaut -aeronautic -aeronautical -aeronautically -aeronautics -aeronautism -aeronauts -aeronef -aeroneurosis -aeronomer -aeronomy -aeronomic -aeronomical -aeronomics -aeronomies -aeronomist -aero-otitis -aeropathy -aeropause -Aerope -aeroperitoneum -aeroperitonia -aerophagy -aerophagia -aerophagist -aerophane -aerophilately -aerophilatelic -aerophilatelist -aerophile -aerophilia -aerophilic -aerophilous -aerophysical -aerophysicist -aerophysics -aerophyte -aerophobia -aerophobic -aerophone -aerophor -aerophore -aerophoto -aerophotography -aerophotos -aeroplane -aeroplaner -aeroplanes -aeroplanist -aeroplankton -aeropleustic -aeroporotomy -aeropulse -aerosat -aerosats -aeroscepsy -aeroscepsis -aeroscope -aeroscopy -aeroscopic -aeroscopically -aerose -aerosiderite -aerosiderolite -aerosinusitis -Aerosol -aerosolization -aerosolize -aerosolized -aerosolizing -aerosols -aerospace -aerosphere -aerosporin -aerostat -aerostatic -aerostatical -aerostatics -aerostation -aerostats -aerosteam -aerotactic -aerotaxis -aerotechnical -aerotechnics -aerotherapeutics -aerotherapy -aerothermodynamic -aerothermodynamics -aerotonometer -aerotonometry -aerotonometric -aerotow -aerotropic -aerotropism -aeroview -aeruginous -aerugo -aerugos -AES -Aesacus -aesc -Aeschylean -Aeschylus -Aeschynanthus -Aeschines -aeschynite -Aeschynomene -aeschynomenous -Aesculaceae -aesculaceous -Aesculapian -Aesculapius -aesculetin -aesculin -Aesculus -Aesepus -Aeshma -Aesyetes -Aesir -Aesop -Aesopian -Aesopic -Aestatis -aestethic -aesthesia -aesthesics -aesthesio- -aesthesis -aesthesodic -aesthete -aesthetes -aesthetic -aesthetical -aesthetically -aesthetician -aestheticism -aestheticist -aestheticize -aesthetics -aesthetic's -aesthiology -aesthophysiology -aestho-physiology -Aestii -aestival -aestivate -aestivated -aestivates -aestivating -aestivation -aestivator -aestive -aestuary -aestuate -aestuation -aestuous -aesture -aestus -AET -aet. -aetat -aethalia -Aethalides -aethalioid -aethalium -Aethelbert -aetheling -aetheogam -aetheogamic -aetheogamous -aether -aethereal -aethered -Aetheria -aetheric -aethers -Aethylla -Aethionema -aethogen -aethon -Aethra -aethrioscope -Aethusa -Aetian -aetiogenic -aetiology -aetiological -aetiologically -aetiologies -aetiologist -aetiologue -aetiophyllin -aetiotropic -aetiotropically -aetites -Aetna -Aetobatidae -Aetobatus -Aetolia -Aetolian -Aetolus -Aetomorphae -aetosaur -aetosaurian -Aetosaurus -aettekees -AEU -aevia -aeviternal -aevum -AF -af- -Af. -AFA -aface -afaced -afacing -AFACTS -AFADS -afaint -AFAM -Afar -afara -afars -AFATDS -AFB -AFC -AFCAC -AFCC -afd -afdecho -afear -afeard -afeared -afebrile -Afenil -afer -afernan -afetal -aff -affa -affability -affabilities -affable -affableness -affably -affabrous -affair -affaire -affaires -affairs -affair's -affaite -affamish -affatuate -affect -affectability -affectable -affectate -affectation -affectationist -affectations -affectation's -affected -affectedly -affectedness -affecter -affecters -affectibility -affectible -affecting -affectingly -affection -affectional -affectionally -affectionate -affectionately -affectionateness -affectioned -affectionless -affections -affection's -affectious -affective -affectively -affectivity -affectless -affectlessness -affector -affects -affectual -affectum -affectuous -affectus -affeeble -affeer -affeerer -affeerment -affeeror -affeir -affenpinscher -affenspalte -Affer -affere -afferent -afferently -affettuoso -affettuosos -affy -affiance -affianced -affiancer -affiances -affiancing -affiant -affiants -affich -affiche -affiches -afficionado -affidare -affidation -affidavy -affydavy -affidavit -affidavits -affidavit's -affied -affies -affying -affile -affiliable -affiliate -affiliated -affiliates -affiliating -affiliation -affiliations -affinage -affinal -affination -affine -affined -affinely -affines -affing -affinitative -affinitatively -affinite -affinity -affinities -affinition -affinity's -affinitive -affirm -affirmable -affirmably -affirmance -affirmant -affirmation -affirmations -affirmation's -affirmative -affirmative-action -affirmatively -affirmativeness -affirmatives -affirmatory -affirmed -affirmer -affirmers -affirming -affirmingly -affirmly -affirms -affix -affixable -affixal -affixation -affixed -affixer -affixers -affixes -affixial -affixing -affixion -affixment -affixt -affixture -afflate -afflated -afflation -afflatus -afflatuses -afflict -afflicted -afflictedness -afflicter -afflicting -afflictingly -affliction -afflictionless -afflictions -affliction's -afflictive -afflictively -afflicts -affloof -afflue -affluence -affluences -affluency -affluent -affluently -affluentness -affluents -afflux -affluxes -affluxion -affodill -afforce -afforced -afforcement -afforcing -afford -affordable -afforded -affording -affords -afforest -afforestable -afforestation -afforestational -afforested -afforesting -afforestment -afforests -afformative -Affra -affray -affrayed -affrayer -affrayers -affraying -affrays -affranchise -affranchised -affranchisement -affranchising -affrap -affreight -affreighter -affreightment -affret -affrettando -affreux -Affrica -affricate -affricated -affricates -affrication -affricative -affriended -affright -affrighted -affrightedly -affrighter -affrightful -affrightfully -affrighting -affrightingly -affrightment -affrights -affront -affronte -affronted -affrontedly -affrontedness -affrontee -affronter -affronty -affronting -affrontingly -affrontingness -affrontive -affrontiveness -affrontment -affronts -afft -affuse -affusedaffusing -affusion -affusions -Afg -AFGE -Afgh -Afghan -afghanets -Afghani -afghanis -Afghanistan -afghans -afgod -AFI -afibrinogenemia -aficionada -aficionadas -aficionado -aficionados -afield -Afifi -afikomen -Afyon -AFIPS -afire -AFL -aflagellar -aflame -aflare -aflat -A-flat -aflatoxin -aflatus -aflaunt -AFLCIO -AFL-CIO -afley -Aflex -aflicker -a-flicker -aflight -afloat -aflow -aflower -afluking -aflush -aflutter -AFM -AFNOR -afoam -afocal -afoot -afore -afore-acted -afore-cited -afore-coming -afore-decried -afore-given -aforegoing -afore-going -afore-granted -aforehand -afore-heard -afore-known -aforementioned -afore-mentioned -aforenamed -afore-planned -afore-quoted -afore-running -aforesaid -afore-seeing -afore-seen -afore-spoken -afore-stated -aforethought -aforetime -aforetimes -afore-told -aforeward -afortiori -afoul -afounde -AFP -Afr -afr- -Afra -afray -afraid -afraidness -A-frame -Aframerican -Afrasia -Afrasian -afreet -afreets -afresca -afresh -afret -afrete -Afric -Africa -Africah -African -Africana -Africander -Africanderism -Africanism -Africanist -Africanization -Africanize -Africanized -Africanizing -Africanoid -africans -Africanthropus -Afridi -afright -Afrika -Afrikaans -Afrikah -Afrikander -Afrikanderdom -Afrikanderism -Afrikaner -Afrikanerdom -Afrikanerize -afrit -afrite -afrits -Afro -Afro- -Afro-American -Afro-Asian -Afroasiatic -Afro-Asiatic -Afro-chain -Afro-comb -Afro-Cuban -Afro-european -Afrogaea -Afrogaean -afront -afrormosia -afros -Afro-semitic -afrown -AFS -AFSC -AFSCME -Afshah -Afshar -AFSK -AFT -aftaba -after -after- -after-acquired -afteract -afterage -afterattack -afterbay -afterband -afterbeat -afterbirth -afterbirths -afterblow -afterbody -afterbodies -after-born -afterbrain -afterbreach -afterbreast -afterburner -afterburners -afterburning -aftercare -aftercareer -aftercast -aftercataract -aftercause -afterchance -afterchrome -afterchurch -afterclap -afterclause -aftercome -aftercomer -aftercoming -aftercooler -aftercost -aftercourse -after-course -aftercrop -aftercure -afterdays -afterdamp -afterdate -afterdated -afterdeal -afterdeath -afterdeck -afterdecks -after-described -after-designed -afterdinner -after-dinner -afterdischarge -afterdrain -afterdrops -aftereffect -aftereffects -aftereye -afterend -afterfall -afterfame -afterfeed -afterfermentation -afterform -afterfriend -afterfruits -afterfuture -aftergame -after-game -aftergas -afterglide -afterglow -afterglows -aftergo -aftergood -aftergrass -after-grass -aftergrave -aftergrief -aftergrind -aftergrowth -afterguard -after-guard -afterguns -afterhand -afterharm -afterhatch -afterheat -afterhelp -afterhend -afterhold -afterhope -afterhours -afteryears -afterimage -after-image -afterimages -afterimpression -afterings -afterking -afterknowledge -afterlife -after-life -afterlifes -afterlifetime -afterlight -afterlives -afterloss -afterlove -aftermark -aftermarket -aftermarriage -aftermass -aftermast -aftermath -aftermaths -aftermatter -aftermeal -after-mentioned -aftermilk -aftermost -after-named -afternight -afternoon -afternoons -afternoon's -afternose -afternote -afteroar -afterpain -after-pain -afterpains -afterpart -afterpast -afterpeak -afterpiece -afterplay -afterplanting -afterpotential -afterpressure -afterproof -afterrake -afterreckoning -afterrider -afterripening -afterroll -afters -afterschool -aftersend -aftersensation -aftershaft -aftershafted -aftershave -aftershaves -aftershine -aftership -aftershock -aftershocks -aftersong -aftersound -after-specified -afterspeech -afterspring -afterstain -after-stampable -afterstate -afterstorm -afterstrain -afterstretch -afterstudy -aftersupper -after-supper -afterswarm -afterswarming -afterswell -aftertan -aftertask -aftertaste -aftertastes -aftertax -after-theater -after-theatre -afterthinker -afterthought -afterthoughted -afterthoughts -afterthrift -aftertime -aftertimes -aftertouch -aftertreatment -aftertrial -afterturn -aftervision -afterwale -afterwar -afterward -afterwards -afterwash -afterwhile -afterwisdom -afterwise -afterwit -after-wit -afterwitted -afterword -afterwork -afterworking -afterworld -afterwort -afterwrath -afterwrist -after-written -aftmost -Afton -Aftonian -aftosa -aftosas -AFTRA -aftward -aftwards -afunction -afunctional -AFUU -afwillite -Afzelia -AG -ag- -aga -agabanee -Agabus -agacant -agacante -Agace -agacella -agacerie -Agaces -Agacles -agad -agada -Agade -agadic -Agadir -Agag -Agagianian -again -again- -againbuy -againsay -against -againstand -againward -agal -agalactia -agalactic -agalactous -agal-agal -agalawood -agalaxy -agalaxia -Agalena -Agalenidae -Agalinis -agalite -agalloch -agallochs -agallochum -agallop -agalma -agalmatolite -agalwood -agalwoods -Agama -Agamae -agamas -a-game -Agamede -Agamedes -Agamemnon -agamete -agametes -agami -agamy -agamian -agamic -agamically -agamid -Agamidae -agamis -agamist -agammaglobulinemia -agammaglobulinemic -agamobia -agamobium -agamogenesis -agamogenetic -agamogenetically -agamogony -agamoid -agamont -agamospermy -agamospore -agamous -Agan -Agana -aganglionic -Aganice -Aganippe -Aganus -Agao -Agaonidae -agapae -agapai -Agapanthus -agapanthuses -Agape -agapeic -agapeically -Agapemone -Agapemonian -Agapemonist -Agapemonite -agapetae -agapeti -agapetid -Agapetidae -agaphite -Agapornis -Agar -agar-agar -agaric -agaricaceae -agaricaceous -Agaricales -agaricic -agariciform -agaricin -agaricine -agaricinic -agaricoid -agarics -Agaricus -Agaristidae -agarita -agaroid -agarose -agaroses -agars -Agartala -Agarum -agarwal -agas -agasp -Agassiz -agast -Agastache -Agastya -Agastreae -agastric -agastroneuria -Agastrophus -Agata -Agate -agatelike -agates -agateware -Agatha -Agathaea -Agatharchides -Agathaumas -Agathe -Agathy -agathin -Agathyrsus -Agathis -agathism -agathist -Agatho -agatho- -Agathocles -agathodaemon -agathodaemonic -agathodemon -agathokakological -agathology -Agathon -Agathosma -agaty -agatiferous -agatiform -agatine -agatize -agatized -agatizes -agatizing -agatoid -Agau -Agave -agaves -agavose -Agawam -Agaz -agaze -agazed -agba -Agbogla -AGC -AGCA -agcy -agcy. -AGCT -AGD -Agdistis -age -ageable -age-adorning -age-bent -age-coeval -age-cracked -aged -age-despoiled -age-dispelling -agedly -agedness -agednesses -Agee -agee-jawed -age-encrusted -age-enfeebled -age-group -age-harden -age-honored -ageing -ageings -ageism -ageisms -ageist -ageists -Agelacrinites -Agelacrinitidae -Agelaius -agelast -age-lasting -Agelaus -ageless -agelessly -agelessness -agelong -age-long -Agen -Agena -Agenais -agency -agencies -agency's -agend -agenda -agendaless -agendas -agenda's -agendum -agendums -agene -agenes -ageneses -agenesia -agenesias -agenesic -agenesis -agenetic -agenize -agenized -agenizes -agenizing -agennesis -agennetic -Agenois -Agenor -agent -agentess -agent-general -agential -agenting -agentival -agentive -agentives -agentry -agentries -agents -agent's -agentship -age-old -ageometrical -age-peeled -ager -agerasia -Ageratum -ageratums -agers -ages -age-struck -aget -agete -ageusia -ageusic -ageustia -age-weary -age-weathered -age-worn -Aggada -Aggadah -Aggadic -Aggadoth -Aggappe -Aggappera -Aggappora -Aggarwal -aggelation -aggenerate -agger -aggerate -aggeration -aggerose -aggers -aggest -Aggeus -Aggi -Aggy -Aggie -aggies -aggiornamenti -aggiornamento -agglomerant -agglomerate -agglomerated -agglomerates -agglomeratic -agglomerating -agglomeration -agglomerations -agglomerative -agglomerator -agglutinability -agglutinable -agglutinant -agglutinate -agglutinated -agglutinates -agglutinating -agglutination -agglutinationist -agglutinations -agglutinative -agglutinatively -agglutinator -agglutinin -agglutinins -agglutinize -agglutinogen -agglutinogenic -agglutinoid -agglutinoscope -agglutogenic -aggrace -aggradation -aggradational -aggrade -aggraded -aggrades -aggrading -aggrammatism -aggrandise -aggrandised -aggrandisement -aggrandiser -aggrandising -aggrandizable -aggrandize -aggrandized -aggrandizement -aggrandizements -aggrandizer -aggrandizers -aggrandizes -aggrandizing -aggrate -aggravable -aggravate -aggravated -aggravates -aggravating -aggravatingly -aggravation -aggravations -aggravative -aggravator -aggregable -aggregant -Aggregata -Aggregatae -aggregate -aggregated -aggregately -aggregateness -aggregates -aggregating -aggregation -aggregational -aggregations -aggregative -aggregatively -aggregato- -aggregator -aggregatory -aggrege -aggress -aggressed -aggresses -aggressin -aggressing -aggression -aggressionist -aggressions -aggression's -aggressive -aggressively -aggressiveness -aggressivenesses -aggressivity -aggressor -aggressors -Aggri -aggry -aggrievance -aggrieve -aggrieved -aggrievedly -aggrievedness -aggrievement -aggrieves -aggrieving -aggro -aggros -aggroup -aggroupment -aggur -Agh -agha -Aghan -aghanee -aghas -aghast -aghastness -Aghlabite -Aghorapanthi -Aghori -agy -Agialid -Agib -agible -Agiel -Agyieus -agyiomania -agilawood -agile -agilely -agileness -agility -agilities -agillawood -agilmente -agin -agynary -agynarious -Agincourt -aging -agings -agynic -aginner -aginners -agynous -agio -agios -agiotage -agiotages -agyrate -agyria -agyrophobia -agism -agisms -agist -agistator -agisted -agister -agisting -agistment -agistor -agists -agit -agitability -agitable -agitant -agitate -agitated -agitatedly -agitates -agitating -agitation -agitational -agitationist -agitations -agitative -agitato -agitator -agitatorial -agitators -agitator's -agitatrix -agitprop -agitpropist -agitprops -agitpunkt -Agkistrodon -AGL -agla -Aglaia -aglance -Aglaonema -Aglaos -aglaozonia -aglare -Aglaspis -Aglauros -Aglaus -Agle -agleaf -agleam -aglee -agley -Agler -aglet -aglethead -aglets -agly -aglycon -aglycone -aglycones -aglycons -aglycosuric -aglimmer -a-glimmer -aglint -Aglipayan -Aglipayano -Aglypha -aglyphodont -Aglyphodonta -Aglyphodontia -aglyphous -aglisten -aglitter -aglobulia -aglobulism -Aglossa -aglossal -aglossate -aglossia -aglow -aglucon -aglucone -a-glucosidase -aglutition -AGM -AGMA -agmas -agmatine -agmatology -agminate -agminated -AGN -Agna -agnail -agnails -agname -agnamed -agnat -agnate -agnates -Agnatha -agnathia -agnathic -Agnathostomata -agnathostomatous -agnathous -agnatic -agnatical -agnatically -agnation -agnations -agnean -agneau -agneaux -agnel -Agnella -Agnes -Agnese -Agness -Agnesse -Agneta -Agnew -Agni -agnification -agnition -agnize -agnized -agnizes -agnizing -Agnoetae -Agnoete -Agnoetism -agnoiology -Agnoite -agnoites -Agnola -agnomen -agnomens -agnomical -agnomina -agnominal -agnomination -agnosy -agnosia -agnosias -agnosis -agnostic -agnostical -agnostically -agnosticism -agnostics -agnostic's -Agnostus -Agnotozoic -agnus -agnuses -ago -agog -agoge -agogic -agogics -agogue -agoho -agoing -agomensin -agomphiasis -agomphious -agomphosis -Agon -agonal -agone -agones -agony -agonia -agoniada -agoniadin -agoniatite -Agoniatites -agonic -agonied -agonies -agonise -agonised -agonises -agonising -agonisingly -agonist -Agonista -agonistarch -agonistic -agonistical -agonistically -agonistics -agonists -agonium -agonize -agonized -agonizedly -agonizer -agonizes -agonizing -agonizingly -agonizingness -Agonostomus -agonothet -agonothete -agonothetic -agons -a-good -agora -agorae -Agoraea -Agoraeus -agoramania -agoranome -agoranomus -agoraphobia -agoraphobiac -agoraphobic -agoras -a-gore-blood -agorot -agoroth -agos -agostadero -Agostini -Agostino -Agosto -agouara -agouta -agouti -agouty -agouties -agoutis -agpaite -agpaitic -AGR -agr. -Agra -agrace -Agraeus -agrafe -agrafes -agraffe -agraffee -agraffes -agrah -agral -Agram -agramed -agrammaphasia -agrammatica -agrammatical -agrammatism -agrammatologia -Agrania -agranulocyte -agranulocytosis -agranuloplastic -Agrapha -agraphia -agraphias -agraphic -agraria -agrarian -agrarianism -agrarianisms -agrarianize -agrarianly -agrarians -Agrauleum -Agraulos -agravic -agre -agreat -agreation -agreations -agree -agreeability -agreeable -agreeableness -agreeablenesses -agreeable-sounding -agreeably -agreed -agreeing -agreeingly -agreement -agreements -agreement's -agreer -agreers -agrees -agregation -agrege -agreges -agreing -agremens -agrement -agrements -agrest -agrestal -agrestial -agrestian -agrestic -agrestical -agrestis -Agretha -agria -agrias -agribusiness -agribusinesses -agric -agric. -agricere -Agricola -agricole -agricolist -agricolite -agricolous -agricultor -agricultural -agriculturalist -agriculturalists -agriculturally -agriculture -agriculturer -agricultures -agriculturist -agriculturists -agrief -Agrigento -Agrilus -agrimony -Agrimonia -agrimonies -agrimotor -agrin -Agrinion -Agriochoeridae -Agriochoerus -agriology -agriological -agriologist -Agrionia -agrionid -Agrionidae -Agriope -agriot -Agriotes -agriotype -Agriotypidae -Agriotypus -Agripina -agrypnia -agrypniai -agrypnias -agrypnode -agrypnotic -Agrippa -Agrippina -agrise -agrised -agrising -agrito -agritos -Agrius -agro- -agroan -agrobacterium -agrobiology -agrobiologic -agrobiological -agrobiologically -agrobiologist -agrodolce -agrogeology -agrogeological -agrogeologically -agrology -agrologic -agrological -agrologically -agrologies -agrologist -agrom -agromania -Agromyza -agromyzid -Agromyzidae -agron -agron. -agronome -agronomy -agronomial -agronomic -agronomical -agronomically -agronomics -agronomies -agronomist -agronomists -agroof -agrope -Agropyron -Agrostemma -agrosteral -agrosterol -Agrostis -agrostographer -agrostography -agrostographic -agrostographical -agrostographies -agrostology -agrostologic -agrostological -agrostologist -agrote -agrotechny -Agrotera -agrotype -Agrotis -aground -agrufe -agruif -AGS -agsam -agst -Agt -agtbasic -AGU -agua -aguacate -Aguacateca -Aguada -Aguadilla -aguador -Aguadulce -Aguayo -aguaji -aguamas -aguamiel -Aguanga -aguara -aguardiente -Aguascalientes -aguavina -Agudist -ague -Agueda -ague-faced -aguey -aguelike -ague-plagued -agueproof -ague-rid -agues -ague-sore -ague-struck -agueweed -agueweeds -aguglia -Aguie -Aguijan -Aguila -Aguilar -aguilarite -aguilawood -aguilt -Aguinaldo -aguinaldos -aguirage -Aguirre -aguise -aguish -aguishly -aguishness -Aguistin -agujon -Agulhas -agunah -Agung -agura -aguroth -agush -agust -Aguste -Agustin -Agway -AH -AHA -ahaaina -Ahab -ahamkara -ahankara -Ahantchuyuk -Aharon -ahartalav -Ahasuerus -ahaunch -Ahaz -Ahaziah -ahchoo -Ahders -AHE -ahead -aheap -Ahearn -ahey -a-hey -aheight -a-height -ahem -ahems -Ahepatokla -Ahern -Ahet -Ahgwahching -Ahhiyawa -ahi -Ahidjo -Ahiezer -a-high -a-high-lone -Ahimaaz -Ahimelech -ahimsa -ahimsas -ahind -ahint -ahypnia -Ahir -Ahira -Ahisar -Ahishar -ahistoric -ahistorical -Ahithophel -AHL -Ahlgren -ahluwalia -Ahmad -Ahmadabad -Ahmadi -Ahmadiya -Ahmadnagar -Ahmadou -Ahmadpur -Ahmar -Ahmed -Ahmedabad -ahmedi -Ahmednagar -Ahmeek -ahmet -Ahnfeltia -aho -ahoy -ahoys -Ahola -Aholah -ahold -a-hold -aholds -Aholla -aholt -Ahom -ahong -a-horizon -ahorse -ahorseback -a-horseback -Ahoskie -Ahoufe -Ahouh -Ahousaht -AHQ -Ahrendahronon -Ahrendt -Ahrens -Ahriman -Ahrimanian -Ahron -ahs -AHSA -Ahsahka -ahsan -Aht -Ahtena -ahu -ahuaca -ahuatle -ahuehuete -ahull -ahum -ahungered -ahungry -ahunt -a-hunt -ahura -Ahura-mazda -ahurewa -ahush -ahuula -Ahuzzath -Ahvaz -Ahvenanmaa -Ahwahnee -ahwal -Ahwaz -AI -AY -ay- -AIA -AIAA -ayacahuite -Ayacucho -ayah -ayahausca -ayahs -ayahuasca -Ayahuca -Ayala -ayapana -Aias -ayatollah -ayatollahs -Aiawong -aiblins -Aibonito -AIC -AICC -aichmophobia -Aycliffe -AID -Aida -aidable -Aidan -aidance -aidant -AIDDE -aid-de-camp -aide -aided -aide-de-camp -aide-de-campship -Aydelotte -aide-memoire -aide-mmoire -Aiden -Ayden -Aydendron -Aidenn -aider -aiders -Aides -aides-de-camp -aidful -Aidin -Aydin -aiding -Aidit -aidless -Aydlett -aidman -aidmanmen -aidmen -Aidoneus -Aidos -AIDS -aids-de-camp -aye -Aiea -aye-aye -a-year -aye-ceaseless -aye-during -aye-dwelling -AIEEE -ayegreen -aiel -aye-lasting -aye-living -Aiello -ayelp -a-yelp -ayen -ayenbite -ayens -ayenst -Ayer -ayer-ayer -aye-remaining -aye-renewed -aye-restless -aiery -aye-rolling -Ayers -aye-running -ayes -Ayesha -aye-sought -aye-troubled -aye-turning -aye-varied -aye-welcome -AIF -aiger -aigialosaur -Aigialosauridae -Aigialosaurus -aiglet -aiglets -aiglette -Aigneis -aigre -aigre-doux -ay-green -aigremore -aigret -aigrets -aigrette -aigrettes -aiguelle -aiguellette -aigue-marine -aiguiere -aiguille -aiguilles -aiguillesque -aiguillette -aiguilletted -AIH -AYH -ayield -ayin -Ayina -ayins -Ayyubid -aik -aikane -Aiken -aikido -aikidos -aikinite -aikona -aikuchi -ail -Aila -ailantery -ailanthic -Ailanthus -ailanthuses -ailantine -ailanto -Ailbert -Aile -ailed -Ailee -Aileen -Ailey -Ailene -aileron -ailerons -Aylesbury -ayless -aylet -Aylett -ailette -Aili -Ailie -Ailin -Ailyn -Ailina -ailing -Ailis -Ailleret -aillt -ayllu -Aylmar -ailment -ailments -ailment's -Aylmer -ails -Ailsa -ailsyte -Ailssa -Ailsun -Aylsworth -Ailuridae -ailuro -ailuroid -Ailuroidea -ailuromania -ailurophile -ailurophilia -ailurophilic -ailurophobe -ailurophobia -ailurophobic -Ailuropoda -Ailuropus -Ailurus -Aylward -ailweed -AIM -Aym -aimable -Aimak -aimara -Aymara -Aymaran -Aymaras -AIME -Ayme -aimed -Aimee -aimer -Aymer -aimers -aimful -aimfully -Aimil -aiming -aimless -aimlessly -aimlessness -aimlessnesses -Aimo -Aimore -Aymoro -AIMS -Aimwell -aimworthiness -Ain -Ayn -ainaleh -Aynat -AInd -Aindrea -aine -ayne -ainee -ainhum -ainoi -Aynor -ains -ainsell -ainsells -Ainslee -Ainsley -Ainslie -Ainsworth -aint -ain't -Aintab -Ayntab -Ainu -Ainus -Ayo -AIOD -aioli -aiolis -aion -ayond -aionial -ayont -ayous -AIPS -AIR -Ayr -Aira -airable -airampo -airan -airbag -airbags -air-balloon -airbill -airbills -air-bind -air-blasted -air-blown -airboat -airboats -airborn -air-born -airborne -air-borne -airbound -air-bound -airbrained -air-braked -airbrasive -air-braving -air-breathe -air-breathed -air-breather -air-breathing -air-bred -airbrick -airbrush -airbrushed -airbrushes -airbrushing -air-built -airburst -airbursts -airbus -airbuses -airbusses -air-chambered -aircheck -airchecks -air-cheeked -air-clear -aircoach -aircoaches -aircondition -air-condition -airconditioned -air-conditioned -airconditioning -air-conditioning -airconditions -air-conscious -air-conveying -air-cool -air-cooled -air-core -aircraft -aircraftman -aircraftmen -aircrafts -aircraftsman -aircraftsmen -aircraftswoman -aircraftswomen -aircraftwoman -aircrew -aircrewman -aircrewmen -aircrews -air-cure -air-cured -airdate -airdates -air-defiling -airdock -air-drawn -air-dry -Airdrie -air-dried -air-drying -air-driven -airdrome -airdromes -airdrop -airdropped -airdropping -airdrops -Aire -ayre -aired -Airedale -airedales -Airel -air-embraced -airer -airers -Aires -Ayres -airest -air-express -airfare -airfares -air-faring -airfield -airfields -airfield's -air-filled -air-floated -airflow -airflows -airfoil -airfoils -air-formed -airframe -airframes -airfreight -airfreighter -airglow -airglows -airgraph -airgraphics -air-hardening -airhead -airheads -air-heating -Airy -airier -airiest -airy-fairy -airiferous -airify -airified -airily -airiness -airinesses -airing -airings -air-insulated -air-intake -airish -Airla -air-lance -air-lanced -air-lancing -Airlee -airle-penny -airless -airlessly -airlessness -Airlia -Airliah -Airlie -airlift -airlifted -airlifting -airlifts -airlift's -airlight -airlike -airline -air-line -airliner -airliners -airlines -airling -airlock -airlocks -airlock's -air-logged -airmail -air-mail -airmailed -airmailing -airmails -airman -airmanship -airmark -airmarker -airmass -airmen -air-minded -air-mindedness -airmobile -airmonger -airn -airns -airohydrogen -airometer -airpark -airparks -air-pervious -airphobia -airplay -airplays -airplane -airplaned -airplaner -airplanes -airplane's -airplaning -airplanist -airplot -airport -airports -airport's -airpost -airposts -airproof -airproofed -airproofing -airproofs -air-raid -airs -airscape -airscapes -airscrew -airscrews -air-season -air-seasoned -airshed -airsheds -airsheet -air-shy -airship -airships -airship's -Ayrshire -airsick -airsickness -air-slake -air-slaked -air-slaking -airsome -airspace -airspaces -airspeed -airspeeds -air-spray -air-sprayed -air-spun -air-stirring -airstream -airstrip -airstrips -airstrip's -air-swallowing -airt -airted -airth -airthed -airthing -air-threatening -airths -airtight -airtightly -airtightness -airtime -airtimes -airting -air-to-air -air-to-ground -air-to-surface -air-trampling -airts -air-twisted -air-vessel -airview -Airville -airway -airwaybill -airwayman -airways -airway's -airward -airwards -airwash -airwave -airwaves -airwise -air-wise -air-wiseness -airwoman -airwomen -airworthy -airworthier -airworthiest -airworthiness -AIS -ays -aischrolatreia -aiseweed -Aisha -AISI -aisle -aisled -aisleless -aisles -aisling -Aisne -Aisne-Marne -Aissaoua -Aissor -aisteoir -aistopod -Aistopoda -Aistopodes -ait -aitch -aitchbone -aitch-bone -aitches -aitchless -aitchpiece -aitesis -aith -Aythya -aithochroi -aitiology -aition -aitiotropic -aitis -Aitken -Aitkenite -Aitkin -aits -Aitutakian -ayu -Ayubite -ayudante -Ayudhya -ayuyu -ayuntamiento -ayuntamientos -Ayurveda -ayurvedas -Ayurvedic -Ayuthea -Ayuthia -Ayutthaya -aiver -aivers -aivr -aiwain -aiwan -aywhere -AIX -Aix-en-Provence -Aix-la-Chapelle -Aix-les-Bains -aizle -Aizoaceae -aizoaceous -Aizoon -AJ -AJA -Ajaccio -Ajay -Ajaja -ajangle -Ajani -Ajanta -ajar -ajari -Ajatasatru -ajava -Ajax -AJC -ajee -ajenjo -ajhar -ajimez -Ajit -ajitter -ajiva -ajivas -Ajivika -Ajmer -Ajo -Ajodhya -ajog -ajoint -ajonjoli -ajoure -ajourise -ajowan -ajowans -Ajuga -ajugas -ajutment -AK -AKA -akaakai -Akaba -Akademi -Akal -akala -Akali -akalimba -akamai -akamatsu -Akamnik -Akan -Akanekunik -Akania -Akaniaceae -Akanke -akaroa -akasa -akasha -Akaska -Akas-mukhi -Akawai -akazga -akazgin -akazgine -Akbar -AKC -akcheh -ake -akeake -akebi -Akebia -aked -akee -akees -akehorne -akey -Akeyla -Akeylah -akeki -Akel -Akela -akelas -Akeldama -Akeley -akemboll -akenbold -akene -akenes -akenobeite -akepiro -akepiros -Aker -Akerboom -akerite -Akerley -Akers -aketon -Akh -Akha -Akhaia -akhara -Akhenaten -Akhetaton -akhyana -Akhisar -Akhissar -Akhlame -Akhmatova -Akhmimic -Akhnaton -akhoond -akhrot -akhund -akhundzada -Akhziv -akia -Akyab -Akiachak -Akiak -Akiba -Akihito -Akiyenik -Akili -Akim -akimbo -Akimovsky -Akin -akindle -akinesia -akinesic -akinesis -akinete -akinetic -aking -Akins -Akira -Akiskemikinik -Akita -Akka -Akkad -Akkadian -Akkadist -Akkerman -Akkra -Aklog -akmite -Akmolinsk -akmudar -akmuddar -aknee -aknow -ako -akoasm -akoasma -akolouthia -akoluthia -akonge -Akontae -Akoulalion -akov -akpek -Akra -Akrabattine -akre -akroasis -akrochordite -Akron -akroter -akroteria -akroterial -akroterion -akrteria -Aksel -Aksoyn -Aksum -aktiebolag -Aktiengesellschaft -Aktistetae -Aktistete -Aktyubinsk -Aktivismus -Aktivist -aku -akuammin -akuammine -akule -akund -Akure -Akutagawa -Akutan -akvavit -akvavits -Akwapim -al -al- -al. -ALA -Ala. -Alabama -Alabaman -Alabamian -alabamians -alabamide -alabamine -alabandine -alabandite -alabarch -Alabaster -alabasters -alabastoi -alabastos -alabastra -alabastrian -alabastrine -alabastrites -alabastron -alabastrons -alabastrum -alabastrums -alablaster -alacha -alachah -Alachua -alack -alackaday -alacran -alacreatine -alacreatinin -alacreatinine -alacrify -alacrious -alacriously -alacrity -alacrities -alacritous -Alactaga -alada -Aladdin -Aladdinize -Aladfar -Aladinist -alae -alagao -alagarto -alagau -Alage -Alagez -Alagoas -Alagoz -alahee -Alai -alay -alaihi -Alain -Alaine -Alayne -Alain-Fournier -Alair -alaite -Alakanuk -Alake -Alaki -Alala -Alalcomeneus -alalia -alalite -alaloi -alalonga -alalunga -alalus -Alamance -Alamanni -Alamannian -Alamannic -alambique -Alameda -alamedas -Alamein -Alaminos -alamiqui -alamire -Alamo -alamodality -alamode -alamodes -Alamogordo -alamonti -alamort -alamos -Alamosa -alamosite -Alamota -alamoth -Alan -Alana -Alan-a-dale -Alanah -Alanbrooke -Aland -alands -Alane -alang -alang-alang -alange -Alangiaceae -alangin -alangine -Alangium -alani -alanyl -alanyls -alanin -alanine -alanines -alanins -Alanna -alannah -Alano -Alanreed -Alans -Alansen -Alanson -alant -alantic -alantin -alantol -alantolactone -alantolic -alants -ALAP -alapa -Alapaha -Alar -Alarbus -Alarcon -Alard -alares -alarge -alary -Alaria -Alaric -Alarice -Alarick -Alarise -alarm -alarmable -alarmclock -alarmed -alarmedly -alarming -alarmingly -alarmingness -alarmism -alarmisms -alarmist -alarmists -alarms -Alarodian -alarum -alarumed -alaruming -alarums -Alas -Alas. -alasas -Alascan -Alasdair -Alaska -alaskaite -Alaskan -alaskans -alaskas -alaskite -Alastair -Alasteir -Alaster -Alastor -alastors -alastrim -alate -Alatea -alated -alatern -alaternus -alates -Alathia -alation -alations -Alauda -Alaudidae -alaudine -alaund -Alaunian -alaunt -Alawi -alazor -Alb -Alb. -Alba -albacea -Albacete -albacora -albacore -albacores -albahaca -Albay -Albainn -Albamycin -Alban -Albana -Albanenses -Albanensian -Albanese -Albany -Albania -Albanian -albanians -albanite -albarco -albardine -albarelli -albarello -albarellos -albarium -Albarran -albas -albaspidin -albata -albatas -Albategnius -albation -Albatros -albatross -albatrosses -albe -albedo -albedoes -albedograph -albedometer -albedos -Albee -albeit -Albemarle -Alben -Albeniz -Alber -alberca -Alberene -albergatrice -alberge -alberghi -albergo -Alberic -Alberich -Alberik -Alberoni -Albers -Albert -Alberta -Alberti -albertin -Albertina -Albertine -Albertinian -albertype -Albertist -albertite -Albertlea -Alberto -Alberton -Albertson -alberttype -albert-type -albertustaler -Albertville -albescence -albescent -albespine -albespyne -albeston -albetad -Albi -Alby -Albia -Albian -albicans -albicant -albication -albicore -albicores -albiculi -Albie -albify -albification -albificative -albified -albifying -albiflorous -Albigenses -Albigensian -Albigensianism -Albin -Albyn -Albina -albinal -albines -albiness -albinic -albinism -albinisms -albinistic -albino -albinoism -Albinoni -albinos -albinotic -albinuria -Albinus -Albion -Albireo -albite -albites -albitic -albitical -albitite -albitization -albitophyre -albizia -albizias -Albizzia -albizzias -ALBM -Albniz -ALBO -albocarbon -albocinereous -Albococcus -albocracy -Alboin -albolite -albolith -albopannin -albopruinose -alborada -alborak -Alboran -alboranite -Alborn -Albrecht -Albric -albricias -Albright -Albrightsville -albronze -Albruna -albs -Albuca -Albuginaceae -albuginea -albugineous -albugines -albuginitis -albugo -album -albumean -albumen -albumeniizer -albumenisation -albumenise -albumenised -albumeniser -albumenising -albumenization -albumenize -albumenized -albumenizer -albumenizing -albumenoid -albumens -albumimeter -albumin -albuminate -albuminaturia -albuminiferous -albuminiform -albuminimeter -albuminimetry -albuminiparous -albuminise -albuminised -albuminising -albuminization -albuminize -albuminized -albuminizing -albumino- -albuminocholia -albuminofibrin -albuminogenous -albuminoid -albuminoidal -albuminolysis -albuminometer -albuminometry -albuminone -albuminorrhea -albuminoscope -albuminose -albuminosis -albuminous -albuminousness -albumins -albuminuria -albuminuric -albuminurophobia -albumoid -albumoscope -albumose -albumoses -albumosuria -albums -Albuna -Albunea -Albuquerque -Albur -Alburg -Alburga -Albury -alburn -Alburnett -alburnous -alburnum -alburnums -Alburtis -albus -albutannin -ALC -Alca -Alcaaba -alcabala -alcade -alcades -Alcae -Alcaeus -alcahest -alcahests -Alcaic -alcaiceria -Alcaics -alcaid -alcaide -alcayde -alcaides -alcaydes -Alcaids -Alcalde -alcaldes -alcaldeship -alcaldia -alcali -Alcaligenes -alcalizate -Alcalzar -alcamine -Alcandre -alcanna -Alcantara -Alcantarines -alcapton -alcaptonuria -alcargen -alcarraza -Alcathous -alcatras -Alcatraz -alcavala -alcazaba -Alcazar -alcazars -alcazava -alce -Alcedines -Alcedinidae -Alcedininae -Alcedo -alcelaphine -Alcelaphus -Alces -Alceste -Alcester -Alcestis -alchem -alchemy -alchemic -alchemical -alchemically -alchemies -Alchemilla -alchemise -alchemised -alchemising -alchemist -alchemister -alchemistic -alchemistical -alchemistry -alchemists -alchemize -alchemized -alchemizing -alchera -alcheringa -alchim- -alchym- -alchimy -alchymy -alchymies -alchitran -alchochoden -Alchornea -Alchuine -Alcibiadean -Alcibiades -Alcicornium -alcid -Alcidae -Alcide -Alcides -Alcidice -alcidine -alcids -Alcimede -Alcimedes -Alcimedon -Alcina -Alcine -Alcinia -Alcinous -alcyon -Alcyonacea -alcyonacean -Alcyonaria -alcyonarian -Alcyone -Alcyones -Alcyoneus -Alcyoniaceae -alcyonic -alcyoniform -Alcyonium -alcyonoid -Alcippe -Alcis -Alcithoe -alclad -Alcmaeon -Alcman -Alcmaon -Alcmena -Alcmene -Alco -Alcoa -alcoate -Alcock -alcogel -alcogene -alcohate -alcohol -alcoholate -alcoholature -alcoholdom -alcoholemia -alcoholic -alcoholically -alcoholicity -alcoholics -alcoholic's -alcoholimeter -alcoholisation -alcoholise -alcoholised -alcoholising -alcoholysis -alcoholism -alcoholisms -alcoholist -alcoholytic -alcoholizable -alcoholization -alcoholize -alcoholized -alcoholizing -alcoholmeter -alcoholmetric -alcoholomania -alcoholometer -alcoholometry -alcoholometric -alcoholometrical -alcoholophilia -alcohols -alcohol's -alcoholuria -Alcolu -Alcon -alconde -alco-ometer -alco-ometry -alco-ometric -alco-ometrical -alcoothionic -Alcor -Alcoran -Alcoranic -Alcoranist -alcornoco -alcornoque -alcosol -Alcot -Alcotate -Alcott -Alcova -alcove -alcoved -alcoves -alcove's -alcovinometer -Alcuin -Alcuinian -alcumy -Alcus -Ald -Ald. -Alda -Aldabra -alday -aldamin -aldamine -Aldan -aldane -Aldarcy -Aldarcie -Aldas -aldazin -aldazine -aldea -aldeament -Aldebaran -aldebaranium -Alded -aldehydase -aldehyde -aldehydes -aldehydic -aldehydine -aldehydrol -aldehol -aldeia -Alden -Aldenville -Alder -alder- -Alderamin -Aldercy -alderfly -alderflies -alder-leaved -alderliefest -alderling -Alderman -aldermanate -aldermancy -aldermaness -aldermanic -aldermanical -aldermanity -aldermanly -aldermanlike -aldermanry -aldermanries -alderman's -aldermanship -Aldermaston -aldermen -aldern -Alderney -alders -Aldershot -Alderson -alderwoman -alderwomen -Aldhafara -Aldhafera -aldide -Aldie -aldim -aldime -aldimin -aldimine -Aldin -Aldine -Aldington -Aldis -alditol -Aldm -Aldo -aldoheptose -aldohexose -aldoketene -aldol -aldolase -aldolases -aldolization -aldolize -aldolized -aldolizing -aldols -Aldon -aldononose -aldopentose -Aldora -Aldos -aldose -aldoses -aldoside -aldosterone -aldosteronism -Aldous -aldovandi -aldoxime -Aldred -Aldredge -Aldric -Aldrich -Aldridge -Aldridge-Brownhills -Aldrin -aldrins -Aldrovanda -Alduino -Aldus -Aldwin -Aldwon -ale -Alea -aleak -Aleardi -aleatory -aleatoric -alebench -aleberry -Alebion -ale-blown -ale-born -alebush -Alec -Alecia -alecithal -alecithic -alecize -Aleck -aleconner -alecost -alecs -Alecto -Alectoria -alectoriae -Alectorides -alectoridine -alectorioid -Alectoris -alectoromachy -alectoromancy -Alectoromorphae -alectoromorphous -Alectoropodes -alectoropodous -alectryomachy -alectryomancy -Alectrion -Alectryon -Alectrionidae -alecup -Aleda -Aledo -alee -Aleece -Aleedis -Aleen -Aleetha -alef -ale-fed -alefnull -alefs -aleft -alefzero -alegar -alegars -aleger -Alegre -Alegrete -alehoof -alehouse -alehouses -Aley -aleyard -Aleichem -Aleydis -aleikoum -aleikum -aleiptes -aleiptic -Aleyrodes -aleyrodid -Aleyrodidae -Aleixandre -Alejandra -Alejandrina -Alejandro -Alejo -Alejoa -Alek -Alekhine -Aleknagik -aleknight -Aleksandr -Aleksandropol -Aleksandrov -Aleksandrovac -Aleksandrovsk -Alekseyevska -Aleksin -Alem -Aleman -alemana -Alemanni -Alemannian -Alemannic -Alemannish -Alembert -alembic -alembicate -alembicated -alembics -alembroth -Alemite -alemmal -alemonger -alen -Alena -Alencon -alencons -Alene -alenge -alength -Alenson -Alentejo -alentours -alenu -Aleochara -Alep -aleph -aleph-null -alephs -alephzero -aleph-zero -alepidote -alepine -alepole -alepot -Aleppine -Aleppo -Aleras -alerce -alerion -Aleris -Aleron -alerse -alert -alerta -alerted -alertedly -alerter -alerters -alertest -alerting -alertly -alertness -alertnesses -alerts -ales -alesan -Alesandrini -aleshot -Alesia -Alessandra -Alessandri -Alessandria -Alessandro -alestake -ale-swilling -Aleta -aletap -aletaster -Aletes -Aletha -Alethea -Alethia -alethic -alethiology -alethiologic -alethiological -alethiologist -alethopteis -alethopteroid -alethoscope -aletocyte -Aletris -Aletta -Alette -aleucaemic -aleucemic -aleukaemic -aleukemic -Aleurites -aleuritic -Aleurobius -Aleurodes -Aleurodidae -aleuromancy -aleurometer -aleuron -aleuronat -aleurone -aleurones -aleuronic -aleurons -aleuroscope -Aleus -Aleut -Aleutian -Aleutians -Aleutic -aleutite -alevin -alevins -Alevitsa -alew -ale-washed -alewhap -alewife -ale-wife -alewives -Alex -Alexa -Alexander -alexanders -Alexanderson -Alexandr -Alexandra -Alexandre -Alexandreid -Alexandretta -Alexandria -Alexandrian -Alexandrianism -Alexandrina -Alexandrine -alexandrines -Alexandrinus -alexandrite -Alexandro -Alexandropolis -Alexandros -Alexandroupolis -Alexas -Alexei -Alexi -Alexia -Alexian -Alexiares -alexias -alexic -Alexicacus -alexin -Alexina -Alexine -alexines -alexinic -alexins -Alexio -alexipharmacon -alexipharmacum -alexipharmic -alexipharmical -alexipyretic -ALEXIS -Alexishafen -alexiteric -alexiterical -Alexius -alezan -Alf -ALFA -Alfadir -alfaje -alfaki -alfakis -alfalfa -alfalfas -alfaqui -alfaquin -alfaquins -alfaquis -Alfarabius -alfarga -alfas -ALFE -Alfedena -alfenide -Alfeo -alferes -alferez -alfet -Alfeus -Alfheim -Alfi -Alfy -Alfie -Alfieri -alfilaria -alfileria -alfilerilla -alfilerillo -alfin -alfiona -alfione -Alfirk -alfoncino -Alfons -Alfonse -alfonsin -Alfonso -Alfonson -Alfonzo -Alford -alforge -alforja -alforjas -Alfraganus -Alfred -Alfreda -Alfredo -alfresco -Alfric -alfridary -alfridaric -Alfur -Alfurese -Alfuro -al-Fustat -Alg -alg- -Alg. -alga -algae -algaecide -algaeology -algaeological -algaeologist -algaesthesia -algaesthesis -algal -algal-algal -Algalene -algalia -Algar -algarad -algarde -algaroba -algarobas -algarot -Algaroth -algarroba -algarrobilla -algarrobin -Algarsyf -Algarsife -Algarve -algas -algate -algates -algazel -Al-Gazel -Algebar -algebra -algebraic -algebraical -algebraically -algebraist -algebraists -algebraization -algebraize -algebraized -algebraizing -algebras -algebra's -algebrization -Algeciras -Algedi -algedo -algedonic -algedonics -algefacient -Algenib -Alger -Algeria -Algerian -algerians -algerienne -Algerine -algerines -algerita -algerite -Algernon -algesia -algesic -algesimeter -algesiometer -algesireceptor -algesis -algesthesis -algetic -Alghero -Algy -algia -Algic -algicidal -algicide -algicides -algid -algidity -algidities -algidness -Algie -Algieba -Algiers -algific -algin -alginate -alginates -algine -alginic -algins -alginuresis -algiomuscular -algist -algivorous -algo- -algocyan -algodon -algodoncillo -algodonite -algoesthesiometer -algogenic -algoid -ALGOL -algolagny -algolagnia -algolagnic -algolagnist -algology -algological -algologically -algologies -algologist -Algoma -Algoman -algometer -algometry -algometric -algometrical -algometrically -Algomian -Algomic -Algona -Algonac -Algonkian -Algonkin -Algonkins -Algonquian -Algonquians -Algonquin -Algonquins -algophagous -algophilia -algophilist -algophobia -algor -Algorab -Algores -algorism -algorismic -algorisms -algorist -algoristic -algorithm -algorithmic -algorithmically -algorithms -algorithm's -algors -algosis -algous -algovite -algraphy -algraphic -Algren -alguacil -alguazil -alguifou -Alguire -algum -algums -alhacena -Alhagi -Alhambra -Alhambraic -Alhambresque -alhandal -Alhazen -Alhena -alhenna -alhet -ALI -aly -ali- -Alia -Alya -Aliacensis -aliamenta -alias -aliased -aliases -aliasing -Alyattes -Alibamu -alibangbang -Aliber -alibi -alibied -alibies -alibiing -alibility -alibis -alibi's -alible -Alic -Alica -Alicant -Alicante -Alice -Alyce -Alicea -Alice-in-Wonderland -Aliceville -alichel -Alichino -Alicia -alicyclic -Alick -alicoche -alycompaine -alictisal -alicula -aliculae -Alida -Alyda -alidad -alidada -alidade -alidades -alidads -Alydar -Alidia -Alidis -Alids -Alidus -Alie -Alief -alien -alienability -alienabilities -alienable -alienage -alienages -alienate -alienated -alienates -alienating -alienation -alienations -alienator -aliency -aliene -aliened -alienee -alienees -aliener -alieners -alienicola -alienicolae -alienigenate -aliening -alienism -alienisms -alienist -alienists -alienize -alienly -alienness -alienor -alienors -aliens -alien's -alienship -Alyeska -aliesterase -aliet -aliethmoid -aliethmoidal -alif -Alifanfaron -alife -aliferous -aliform -alifs -Aligarh -aligerous -alight -alighted -alighten -alighting -alightment -alights -align -aligned -aligner -aligners -aligning -alignment -alignments -aligns -aligreek -alii -aliya -aliyah -aliyahs -aliyas -aliyos -aliyot -aliyoth -aliipoe -Alika -alike -Alikee -alikeness -alikewise -Alikuluf -Alikulufan -alilonghi -alima -alimenation -aliment -alimental -alimentally -alimentary -alimentariness -alimentation -alimentative -alimentatively -alimentativeness -alimented -alimenter -alimentic -alimenting -alimentive -alimentiveness -alimentotherapy -aliments -alimentum -alimony -alimonied -alimonies -alymphia -alymphopotent -alin -Alina -alinasal -Aline -A-line -alineation -alined -alinement -aliner -aliners -alines -alingual -alining -alinit -Alinna -alinota -alinotum -alintatao -aliofar -Alyose -Alyosha -Alioth -alipata -aliped -alipeds -aliphatic -alipin -alypin -alypine -aliptae -alipteria -alipterion -aliptes -aliptic -aliptteria -alypum -aliquant -aliquid -Aliquippa -aliquot -aliquots -Alis -Alys -Alisa -Alysa -Alisan -Alisander -alisanders -Alyse -Alisen -aliseptal -alish -Alisha -Alisia -Alysia -alisier -Al-Iskandariyah -Alisma -Alismaceae -alismaceous -alismad -alismal -Alismales -Alismataceae -alismoid -aliso -Alison -Alyson -alisonite -alisos -Alysoun -alisp -alispheno -alisphenoid -alisphenoidal -Alyss -Alissa -Alyssa -alysson -Alyssum -alyssums -alist -Alistair -Alister -Alisun -ALIT -Alita -Alitalia -alytarch -alite -aliter -Alytes -Alitha -Alithea -Alithia -ality -alitrunk -Alitta -aliturgic -aliturgical -aliunde -Alius -alive -aliveness -alives -alivincular -Alyworth -Alix -Aliza -alizarate -alizari -alizarin -alizarine -alizarins -aljama -aljamado -aljamia -aljamiado -aljamiah -aljoba -aljofaina -alk -alk. -Alkabo -alkahest -alkahestic -alkahestica -alkahestical -alkahests -Alkaid -alkalamide -alkalemia -alkalescence -alkalescency -alkalescent -alkali -alkalic -alkalies -alkaliferous -alkalify -alkalifiable -alkalified -alkalifies -alkalifying -alkaligen -alkaligenous -alkalimeter -alkalimetry -alkalimetric -alkalimetrical -alkalimetrically -alkalin -alkaline -alkalinisation -alkalinise -alkalinised -alkalinising -alkalinity -alkalinities -alkalinization -alkalinize -alkalinized -alkalinizes -alkalinizing -alkalinuria -alkalis -alkali's -alkalisable -alkalisation -alkalise -alkalised -alkaliser -alkalises -alkalising -alkalizable -alkalizate -alkalization -alkalize -alkalized -alkalizer -alkalizes -alkalizing -alkaloid -alkaloidal -alkaloids -alkaloid's -alkalometry -alkalosis -alkalous -Alkalurops -alkamin -alkamine -alkanal -alkane -alkanes -alkanet -alkanethiol -alkanets -Alkanna -alkannin -alkanol -Alkaphrah -alkapton -alkaptone -alkaptonuria -alkaptonuric -alkargen -alkarsin -alkarsine -Alka-Seltzer -alkatively -alkedavy -alkekengi -alkene -alkenes -alkenyl -alkenna -alkermes -Alkes -Alkhimovo -alky -alkyd -alkide -alkyds -alkies -alkyl -alkylamine -alkylamino -alkylarylsulfonate -alkylate -alkylated -alkylates -alkylating -alkylation -alkylbenzenesulfonate -alkylbenzenesulfonates -alkylene -alkylic -alkylidene -alkylize -alkylogen -alkylol -alkyloxy -alkyls -alkin -alkine -alkyne -alkines -alkynes -alkitran -Alkmaar -Alkol -alkool -Alkoran -Alkoranic -alkoxy -alkoxid -alkoxide -alkoxyl -all -all- -Alla -all-abhorred -all-able -all-absorbing -allabuta -all-accomplished -allachesthesia -all-acting -allactite -all-admired -all-admiring -all-advised -allaeanthus -all-affecting -all-afflicting -all-aged -allagite -allagophyllous -allagostemonous -Allah -Allahabad -allah's -allay -allayed -allayer -allayers -allaying -allayment -Allain -Allayne -all-air -allays -allalinite -Allamanda -all-amazed -All-american -allamonti -all-a-mort -allamoth -allamotti -Allamuchy -Allan -Allana -Allan-a-Dale -allanite -allanites -allanitic -Allanson -allantiasis -all'antica -allantochorion -allantoic -allantoid -allantoidal -Allantoidea -allantoidean -allantoides -allantoidian -allantoin -allantoinase -allantoinuria -allantois -allantoxaidin -allanturic -all-appaled -all-appointing -all-approved -all-approving -Allard -Allardt -Allare -allargando -all-armed -all-around -all-arraigning -all-arranging -Allasch -all-assistless -allassotonic -al-Lat -allative -all-atoning -allatrate -all-attempting -all-availing -all-bearing -all-beauteous -all-beautiful -Allbee -all-beholding -all-bestowing -all-binding -all-bitter -all-black -all-blasting -all-blessing -allbone -all-bounteous -all-bountiful -all-bright -all-brilliant -All-british -All-caucasian -all-changing -all-cheering -all-collected -all-colored -all-comfortless -all-commander -all-commanding -all-compelling -all-complying -all-composing -all-comprehending -all-comprehensive -all-comprehensiveness -all-concealing -all-conceiving -all-concerning -all-confounding -all-conquering -all-conscious -all-considering -all-constant -all-constraining -all-consuming -all-content -all-controlling -all-convincing -all-convincingly -Allcot -all-covering -all-creating -all-creator -all-curing -all-day -all-daring -all-dazzling -all-deciding -all-defiance -all-defying -all-depending -all-designing -all-desired -all-despising -all-destroyer -all-destroying -all-devastating -all-devouring -all-dimming -all-directing -all-discerning -all-discovering -all-disgraced -all-dispensing -all-disposer -all-disposing -all-divine -all-divining -all-dreaded -all-dreadful -all-drowsy -Alle -all-earnest -all-eating -allecret -allect -allectory -Alledonia -Alleen -Alleene -all-efficacious -all-efficient -Allegan -Allegany -allegata -allegate -allegation -allegations -allegation's -allegator -allegatum -allege -allegeable -alleged -allegedly -allegement -alleger -allegers -alleges -Alleghany -Alleghanian -Allegheny -Alleghenian -Alleghenies -allegiance -allegiances -allegiance's -allegiancy -allegiant -allegiantly -allegiare -alleging -allegory -allegoric -allegorical -allegorically -allegoricalness -allegories -allegory's -allegorisation -allegorise -allegorised -allegoriser -allegorising -allegorism -allegorist -allegorister -allegoristic -allegorists -allegorization -allegorize -allegorized -allegorizer -allegorizing -Allegra -Allegre -allegresse -allegretto -allegrettos -allegretto's -allegro -allegros -allegro's -Alley -alleyed -all-eyed -alleyite -Alleyn -Alleyne -alley-oop -alleys -alley's -alleyway -alleyways -alleyway's -allele -alleles -alleleu -allelic -allelism -allelisms -allelocatalytic -allelomorph -allelomorphic -allelomorphism -allelopathy -all-eloquent -allelotropy -allelotropic -allelotropism -Alleluia -alleluiah -alleluias -alleluiatic -alleluja -allelvia -Alleman -allemand -allemande -allemandes -allemands -all-embracing -all-embracingness -allemontite -Allen -allenarly -Allenby -all-encompasser -all-encompassing -Allendale -Allende -all-ending -Allendorf -all-enduring -Allene -all-engrossing -all-engulfing -Allenhurst -alleniate -all-enlightened -all-enlightening -Allenport -all-enraged -Allensville -allentando -allentato -Allentiac -Allentiacan -Allenton -Allentown -all-envied -Allenwood -Alleppey -aller -Alleras -allergen -allergenic -allergenicity -allergens -allergy -allergia -allergic -allergies -allergin -allergins -allergy's -allergist -allergists -allergology -Allerie -allerion -Alleris -aller-retour -Allerton -Allerus -all-essential -allesthesia -allethrin -alleve -alleviant -alleviate -alleviated -alleviater -alleviaters -alleviates -alleviating -alleviatingly -alleviation -alleviations -alleviative -alleviator -alleviatory -alleviators -all-evil -all-excellent -all-expense -all-expenses-paid -allez -allez-vous-en -all-fair -All-father -All-fatherhood -All-fatherly -all-filling -all-fired -all-firedest -all-firedly -all-flaming -all-flotation -all-flower-water -all-foreseeing -all-forgetful -all-forgetting -all-forgiving -all-forgotten -all-fullness -all-gas -all-giver -all-glorious -all-golden -Allgood -all-governing -allgovite -all-gracious -all-grasping -all-great -all-guiding -Allhallow -all-hallow -all-hallowed -Allhallowmas -Allhallows -Allhallowtide -all-happy -allheal -all-healing -allheals -all-hearing -all-heeding -all-helping -all-hiding -all-holy -all-honored -all-hoping -all-hurting -Alli -ally -alliable -alliably -Alliaceae -alliaceous -alliage -Alliance -allianced -alliancer -alliances -alliance's -alliancing -Allianora -alliant -Alliaria -Alliber -allicampane -allice -Allyce -allicholly -alliciency -allicient -allicin -allicins -allicit -all-idolizing -Allie -all-year -Allied -Allier -Allies -alligate -alligated -alligating -alligation -alligations -alligator -alligatored -alligatorfish -alligatorfishes -alligatoring -alligators -alligator's -allyic -allying -allyl -allylamine -allylate -allylation -allylene -allylic -all-illuminating -allyls -allylthiourea -all-imitating -all-important -all-impressive -Allin -all-in -Allyn -Allina -all-including -all-inclusive -all-inclusiveness -All-india -Allyne -allineate -allineation -all-infolding -all-informing -all-in-one -all-interesting -all-interpreting -all-invading -all-involving -Allionia -Allioniaceae -allyou -Allis -Allys -Allisan -allision -Allison -Allyson -Allissa -Allista -Allister -Allistir -all'italiana -alliteral -alliterate -alliterated -alliterates -alliterating -alliteration -alliterational -alliterationist -alliterations -alliteration's -alliterative -alliteratively -alliterativeness -alliterator -allituric -Allium -alliums -allivalite -Allix -all-jarred -all-judging -all-just -all-justifying -all-kind -all-knavish -all-knowing -all-knowingness -all-land -all-lavish -all-licensed -all-lovely -all-loving -all-maintaining -all-maker -all-making -all-maturing -all-meaningness -all-merciful -all-metal -all-might -all-miscreative -Allmon -allmouth -allmouths -all-murdering -allness -all-night -all-noble -all-nourishing -allo -allo- -Alloa -alloantibody -allobar -allobaric -allobars -all-obedient -all-obeying -all-oblivious -Allobroges -allobrogical -all-obscuring -allocability -allocable -allocaffeine -allocatable -allocate -allocated -allocatee -allocates -allocating -allocation -allocations -allocator -allocators -allocator's -allocatur -allocheiria -allochetia -allochetite -allochezia -allochiral -allochirally -allochiria -allochlorophyll -allochroic -allochroite -allochromatic -allochroous -allochthon -allochthonous -allocyanine -allocinnamic -Allock -alloclase -alloclasite -allocochick -allocryptic -allocrotonic -allocthonous -allocute -allocution -allocutive -allod -allodelphite -allodesmism -allodge -allody -allodia -allodial -allodialism -allodialist -allodiality -allodially -allodian -allodiary -allodiaries -allodies -allodification -allodium -allods -alloeosis -alloeostropha -alloeotic -alloerotic -alloerotism -allogamy -allogamies -allogamous -allogene -allogeneic -allogeneity -allogeneous -allogenic -allogenically -allograft -allograph -allographic -alloy -alloyage -alloyed -alloying -all-oil -alloimmune -alloiogenesis -alloiometry -alloiometric -alloys -alloy's -alloisomer -alloisomeric -alloisomerism -allokinesis -allokinetic -allokurtic -allolalia -allolalic -allomerism -allomerization -allomerize -allomerized -allomerizing -allomerous -allometry -allometric -allomorph -allomorphic -allomorphism -allomorphite -allomucic -allonge -allonges -allonym -allonymous -allonymously -allonyms -allonomous -Allons -alloo -allo-octaploid -allopalladium -allopath -allopathetic -allopathetically -allopathy -allopathic -allopathically -allopathies -allopathist -allopaths -allopatry -allopatric -allopatrically -allopelagic -allophanamid -allophanamide -allophanate -allophanates -allophane -allophanic -allophyle -allophylian -allophylic -Allophylus -allophite -allophytoid -allophone -allophones -allophonic -allophonically -allophore -alloplasm -alloplasmatic -alloplasmic -alloplast -alloplasty -alloplastic -alloploidy -allopolyploid -allopolyploidy -allopsychic -allopurinol -alloquy -alloquial -alloquialism -all-ordering -allorhythmia -all-or-none -allorrhyhmia -allorrhythmic -allosaur -Allosaurus -allose -allosematic -allosyndesis -allosyndetic -allosome -allosteric -allosterically -allot -alloted -allotee -allotelluric -allotheism -allotheist -allotheistic -Allotheria -allothigene -allothigenetic -allothigenetically -allothigenic -allothigenous -allothimorph -allothimorphic -allothogenic -allothogenous -allotype -allotypes -allotypy -allotypic -allotypical -allotypically -allotypies -allotment -allotments -allotment's -allotransplant -allotransplantation -allotrylic -allotriodontia -Allotriognathi -allotriomorphic -allotriophagy -allotriophagia -allotriuria -allotrope -allotropes -allotrophic -allotropy -allotropic -allotropical -allotropically -allotropicity -allotropies -allotropism -allotropize -allotropous -allots -allottable -all'ottava -allotted -allottee -allottees -allotter -allottery -allotters -allotting -Allouez -all-out -allover -all-over -all-overish -all-overishness -all-overpowering -allovers -all-overs -all-overtopping -allow -allowable -allowableness -allowably -Alloway -allowance -allowanced -allowances -allowance's -allowancing -allowed -allowedly -allower -allowing -allows -alloxan -alloxanate -alloxanic -alloxans -alloxantin -alloxy -alloxyproteic -alloxuraemia -alloxuremia -alloxuric -allozooid -all-panting -all-parent -all-pass -all-patient -all-peaceful -all-penetrating -all-peopled -all-perceptive -all-perfect -all-perfection -all-perfectness -all-perficient -all-persuasive -all-pervading -all-pervadingness -all-pervasive -all-pervasiveness -all-piercing -all-pitying -all-pitiless -all-pondering -Allport -all-possessed -all-potency -all-potent -all-potential -all-power -all-powerful -all-powerfully -all-powerfulness -all-praised -all-praiseworthy -all-presence -all-present -all-prevailing -all-prevailingness -all-prevalency -all-prevalent -all-preventing -all-prolific -all-protecting -all-provident -all-providing -all-puissant -all-pure -all-purpose -all-quickening -all-rail -all-rapacious -all-reaching -Allred -all-red -all-redeeming -all-relieving -all-rending -all-righteous -allround -all-round -all-roundedness -all-rounder -all-rubber -Allrud -all-ruling -All-russia -All-russian -alls -all-sacred -all-sayer -all-sanctifying -all-satiating -all-satisfying -all-saving -all-sea -all-searching -allseed -allseeds -all-seeing -all-seeingly -all-seeingness -all-seer -all-shaking -all-shamed -all-shaped -all-shrouding -all-shunned -all-sided -all-silent -all-sized -all-sliming -all-soothing -Allsopp -all-sorts -all-soul -All-southern -allspice -allspices -all-spreading -all-star -all-stars -Allstate -all-steel -Allston -all-strangling -all-subduing -all-submissive -all-substantial -all-sufficiency -all-sufficient -all-sufficiently -all-sufficing -Allsun -all-surpassing -all-surrounding -all-surveying -all-sustainer -all-sustaining -all-swaying -all-swallowing -all-telling -all-terrible -allthing -allthorn -all-thorny -all-time -all-tolerating -all-transcending -all-triumphing -all-truth -alltud -all-turned -all-turning -allude -alluded -alludes -alluding -allumette -allumine -alluminor -all-understanding -all-unwilling -all-upholder -all-upholding -allurance -allure -allured -allurement -allurements -allurer -allurers -allures -alluring -alluringly -alluringness -allusion -allusions -allusion's -allusive -allusively -allusiveness -allusivenesses -allusory -allutterly -alluvia -alluvial -alluvials -alluviate -alluviation -alluvio -alluvion -alluvions -alluvious -alluvium -alluviums -alluvivia -alluviviums -Allvar -all-various -all-vast -Allveta -all-watched -all-water -all-weak -all-weather -all-weight -Allwein -allwhere -allwhither -all-whole -all-wisdom -all-wise -all-wisely -all-wiseness -all-wondrous -all-wood -all-wool -allwork -all-working -all-worshiped -Allworthy -all-worthy -all-wrongness -Allx -ALM -Alma -Alma-Ata -almacantar -almacen -almacenista -Almach -almaciga -almacigo -Almad -Almada -Almaden -almadia -almadie -Almagest -almagests -almagra -almah -almahs -Almain -almaine -almain-rivets -Almallah -alma-materism -al-Mamoun -Alman -almanac -almanacs -almanac's -almander -almandine -almandines -almandite -almanner -Almanon -almas -Alma-Tadema -alme -Almeda -Almeeta -almeh -almehs -Almeida -almeidina -Almelo -almemar -almemars -almemor -Almena -almendro -almendron -Almera -almery -Almeria -Almerian -Almeric -almeries -almeriite -almes -Almeta -almice -almicore -Almida -almight -Almighty -almightily -almightiness -almique -Almira -Almyra -almirah -Almire -almistry -Almita -almner -almners -Almo -almochoden -almocrebe -almogavar -Almohad -Almohade -Almohades -almoign -almoin -Almon -almonage -Almond -almond-eyed -almond-furnace -almondy -almond-leaved -almondlike -almonds -almond's -almond-shaped -almoner -almoners -almonership -almoning -almonry -almonries -Almont -Almoravid -Almoravide -Almoravides -almose -almost -almous -alms -alms-dealing -almsdeed -alms-fed -almsfolk -almsful -almsgiver -almsgiving -almshouse -alms-house -almshouses -almsman -almsmen -almsmoney -almswoman -almswomen -almucantar -almuce -almuces -almud -almude -almudes -almuds -almuerzo -almug -almugs -Almund -Almuredin -almury -almuten -aln -Alna -alnage -alnager -alnagership -Alnaschar -Alnascharism -alnath -alnein -Alnico -alnicoes -Alnilam -alniresinol -Alnitak -Alnitham -alniviridol -alnoite -alnuin -Alnus -Alo -Aloadae -Alocasia -alochia -alod -aloddia -Alodee -Alodi -alody -alodia -alodial -alodialism -alodialist -alodiality -alodially -alodialty -alodian -alodiary -alodiaries -Alodie -alodies -alodification -alodium -aloe -aloed -aloedary -aloe-emodin -aloelike -aloemodin -aloeroot -aloes -aloesol -aloeswood -aloetic -aloetical -Aloeus -aloewood -aloft -Alogi -alogy -alogia -Alogian -alogical -alogically -alogism -alogotrophy -Aloha -alohas -aloyau -aloid -Aloidae -Aloin -aloins -Alois -Aloys -Aloise -Aloisia -Aloysia -aloisiite -Aloisius -Aloysius -Aloke -aloma -alomancy -Alon -alone -alonely -aloneness -along -alongships -alongshore -alongshoreman -alongside -alongst -Alonso -Alonsoa -Alonzo -aloof -aloofe -aloofly -aloofness -aloose -alop -alopathic -Alope -alopecia -Alopecias -alopecic -alopecist -alopecoid -Alopecurus -Alopecus -alopekai -alopeke -alophas -Alopias -Alopiidae -alorcinic -Alorton -Alosa -alose -Alost -Alouatta -alouatte -aloud -Alouette -alouettes -alout -alow -alowe -Aloxe-Corton -Aloxite -ALP -alpaca -alpacas -alpargata -alpasotes -Alpaugh -Alpax -alpeen -Alpen -Alpena -alpenglow -alpenhorn -alpenhorns -alpenstock -alpenstocker -alpenstocks -Alper -Alpers -Alpert -Alpes-de-Haute-Provence -Alpes-Maritimes -alpestral -alpestrian -alpestrine -Alpetragius -Alpha -alpha-amylase -alphabet -alphabetary -alphabetarian -alphabeted -alphabetic -alphabetical -alphabetically -alphabetics -alphabetiform -alphabeting -alphabetisation -alphabetise -alphabetised -alphabetiser -alphabetising -alphabetism -alphabetist -alphabetization -alphabetize -alphabetized -alphabetizer -alphabetizers -alphabetizes -alphabetizing -alphabetology -alphabets -alphabet's -alpha-cellulose -Alphaea -alpha-eucaine -alpha-hypophamine -alphameric -alphamerical -alphamerically -alpha-naphthylamine -alpha-naphthylthiourea -alpha-naphthol -alphanumeric -alphanumerical -alphanumerically -alphanumerics -Alphard -Alpharetta -alphas -Alphatype -alpha-tocopherol -alphatoluic -alpha-truxilline -Alphean -Alphecca -alphenic -Alpheratz -Alphesiboea -Alpheus -alphyl -alphyls -alphin -alphyn -alphitomancy -alphitomorphous -alphol -Alphonist -Alphons -Alphonsa -Alphonse -alphonsin -Alphonsine -Alphonsism -Alphonso -Alphonsus -alphorn -alphorns -alphos -alphosis -alphosises -Alpian -Alpid -alpieu -alpigene -Alpine -alpinely -alpinery -alpines -alpinesque -Alpinia -Alpiniaceae -Alpinism -alpinisms -Alpinist -alpinists -alpist -alpiste -ALPO -Alpoca -Alps -Alpujarra -alqueire -alquier -alquifou -alraun -already -alreadiness -Alric -Alrich -Alrick -alright -alrighty -Alroi -Alroy -alroot -ALRU -alruna -alrune -AlrZc -ALS -Alsace -Alsace-Lorraine -Alsace-lorrainer -al-Sahih -Alsatia -Alsatian -alsbachite -Alsea -Alsey -Alsen -Alshain -alsifilm -alsike -alsikes -Alsinaceae -alsinaceous -Alsine -Alsip -alsmekill -Also -Alson -alsoon -Alsop -Alsophila -also-ran -Alstead -Alston -Alstonia -alstonidine -alstonine -alstonite -Alstroemeria -alsweill -alswith -Alsworth -alt -alt. -Alta -Alta. -Altadena -Altaf -Altai -Altay -Altaian -Altaic -Altaid -Altair -altaite -Altaloma -altaltissimo -Altamahaw -Altamira -Altamont -altar -altarage -altared -altarist -altarlet -altarpiece -altarpieces -altars -altar's -altarwise -Altavista -altazimuth -Altdorf -Altdorfer -Alten -Altenburg -alter -alterability -alterable -alterableness -alterably -alterant -alterants -alterate -alteration -alterations -alteration's -alterative -alteratively -altercate -altercated -altercating -altercation -altercations -altercation's -altercative -altered -alteregoism -alteregoistic -alterer -alterers -altering -alterity -alterius -alterman -altern -alternacy -alternamente -alternance -alternant -Alternanthera -Alternaria -alternariose -alternat -alternate -alternated -alternate-leaved -alternately -alternateness -alternater -alternates -alternating -alternatingly -alternation -alternationist -alternations -alternative -alternatively -alternativeness -alternatives -alternativity -alternativo -alternator -alternators -alternator's -alterne -alterni- -alternifoliate -alternipetalous -alternipinnate -alternisepalous -alternity -alternize -alterocentric -alters -alterum -Altes -altesse -alteza -altezza -Altgeld -Altha -Althaea -althaeas -althaein -Althaemenes -Althea -altheas -Althee -Altheimer -althein -altheine -Altheta -Althing -althionic -altho -althorn -althorns -although -alti- -Altica -Alticamelus -altify -altigraph -altilik -altiloquence -altiloquent -altimeter -altimeters -altimetry -altimetrical -altimetrically -altimettrically -altin -altincar -Altingiaceae -altingiaceous -altininck -altiplanicie -Altiplano -alti-rilievi -Altis -altiscope -altisonant -altisonous -altissimo -altitonant -altitude -altitudes -altitudinal -altitudinarian -altitudinous -Altman -Altmar -alto -alto- -altocumulus -alto-cumulus -alto-cumulus-castellatus -altogether -altogetherness -altoist -altoists -altometer -Alton -Altona -Altoona -alto-relievo -alto-relievos -alto-rilievo -altos -alto's -altostratus -alto-stratus -altoun -altrices -altricial -Altrincham -Altro -altropathy -altrose -altruism -altruisms -altruist -altruistic -altruistically -altruists -alts -altschin -altumal -altun -Altura -Alturas -alture -Altus -ALU -Aluco -Aluconidae -Aluconinae -aludel -aludels -Aludra -Aluin -Aluino -alula -alulae -alular -alulet -Alulim -alum -alum. -Alumbank -alumbloom -alumbrado -Alumel -alumen -alumetize -alumian -alumic -alumiferous -alumin -alumina -aluminaphone -aluminas -aluminate -alumine -alumines -aluminic -aluminide -aluminiferous -aluminiform -aluminyl -aluminio- -aluminise -aluminised -aluminish -aluminising -aluminite -aluminium -aluminize -aluminized -aluminizes -aluminizing -alumino- -aluminoferric -aluminography -aluminographic -aluminose -aluminosilicate -aluminosis -aluminosity -aluminothermy -aluminothermic -aluminothermics -aluminotype -aluminous -alumins -aluminum -aluminums -alumish -alumite -alumium -alumna -alumnae -alumnal -alumna's -alumni -alumniate -Alumnol -alumnus -alumohydrocalcite -alumroot -alumroots -alums -alumstone -alun-alun -Alundum -aluniferous -alunite -alunites -alunogen -alupag -Alur -Alurd -alure -alurgite -Alurta -alushtite -aluta -alutaceous -al-Uzza -Alva -Alvada -Alvadore -Alvah -Alvan -Alvar -Alvarado -Alvarez -Alvaro -Alvaton -alveary -alvearies -alvearium -alveated -alvelos -alveloz -alveola -alveolae -alveolar -alveolary -alveolariform -alveolarly -alveolars -alveolate -alveolated -alveolation -alveole -alveolectomy -alveoli -alveoliform -alveolite -Alveolites -alveolitis -alveolo- -alveoloclasia -alveolocondylean -alveolodental -alveololabial -alveololingual -alveolonasal -alveolosubnasal -alveolotomy -alveolus -Alver -Alvera -Alverda -Alverson -Alverta -Alverton -Alves -Alveta -alveus -Alvy -alvia -Alviani -alviducous -Alvie -Alvin -Alvina -alvine -Alvinia -Alvino -Alvira -Alvis -Alviso -Alviss -Alvissmal -Alvita -alvite -Alvito -Alvo -Alvord -Alvordton -alvus -alw -alway -always -Alwin -Alwyn -alwise -alwite -Alwitt -Alzada -alzheimer -AM -Am. -AMA -amaas -Amabel -Amabella -Amabelle -Amabil -amabile -amability -amable -amacratic -amacrinal -amacrine -AMACS -amadan -Amadas -amadavat -amadavats -amadelphous -Amadeo -Amadeus -Amadi -Amadis -Amado -Amador -amadou -amadous -Amadus -Amaethon -Amafingo -amaga -Amagansett -Amagasaki -Amagon -amah -amahs -Amahuaca -amay -Amaya -Amaigbo -amain -amaine -amaist -amaister -amakebe -Amakosa -Amal -amala -amalaita -amalaka -Amalbena -Amalberga -Amalbergas -Amalburga -Amalea -Amalee -Amalek -Amalekite -Amaleta -amalett -Amalfian -Amalfitan -amalg -amalgam -amalgamable -amalgamate -amalgamated -amalgamater -amalgamates -amalgamating -amalgamation -amalgamationist -amalgamations -amalgamative -amalgamatize -amalgamator -amalgamators -amalgamist -amalgamization -amalgamize -amalgams -amalgam's -Amalia -amalic -Amalie -Amalings -Amalita -Amalle -Amalrician -amaltas -Amalthaea -Amalthea -Amaltheia -amamau -Amampondo -Aman -Amana -Amand -Amanda -amande -Amandi -Amandy -Amandie -amandin -amandine -Amando -Amandus -amang -amani -amania -Amanist -Amanita -amanitas -amanitin -amanitine -amanitins -Amanitopsis -Amann -amanori -amanous -amant -amantadine -amante -amantillo -amanuenses -amanuensis -Amap -Amapa -Amapondo -Amar -Amara -amaracus -Amara-kosha -Amaral -Amarant -Amarantaceae -amarantaceous -amaranth -Amaranthaceae -amaranthaceous -amaranthine -amaranthoid -amaranth-purple -amaranths -Amaranthus -amarantine -amarantite -Amarantus -Amaras -AMARC -amarelle -amarelles -Amarette -amaretto -amarettos -amarevole -Amargo -amargosa -amargoso -amargosos -Amari -Amary -Amaryl -Amarillas -amaryllid -Amaryllidaceae -amaryllidaceous -amaryllideous -Amarillis -Amaryllis -amaryllises -Amarillo -amarillos -amarin -Amarynceus -amarine -Amaris -amarity -amaritude -Amarna -amaroid -amaroidal -amarth -amarthritis -amarvel -amas -Amasa -AMASE -amasesis -Amasias -amass -amassable -amassed -amasser -amassers -amasses -amassette -amassing -amassment -amassments -Amasta -amasthenic -amasty -amastia -AMAT -Amata -amate -amated -Amatembu -Amaterasu -amaterialistic -amateur -amateurish -amateurishly -amateurishness -amateurism -amateurisms -amateurs -amateur's -amateurship -Amathi -Amathist -Amathiste -amathophobia -Amati -Amaty -amating -amatito -amative -amatively -amativeness -Amato -amatol -amatols -amatory -amatorial -amatorially -amatorian -amatories -amatorio -amatorious -AMATPS -amatrice -Amatruda -Amatsumara -amatungula -amaurosis -amaurotic -amaut -Amawalk -amaxomania -amaze -amazed -amazedly -amazedness -amazeful -amazement -amazements -amazer -amazers -amazes -amazia -Amaziah -Amazilia -amazing -amazingly -Amazon -Amazona -Amazonas -Amazonia -Amazonian -Amazonis -Amazonism -amazonite -Amazonomachia -amazons -amazon's -amazonstone -Amazulu -Amb -AMBA -ambach -ambage -ambages -ambagiosity -ambagious -ambagiously -ambagiousness -ambagitory -ambay -Ambala -ambalam -amban -ambar -ambaree -ambarella -ambari -ambary -ambaries -ambaris -ambas -ambash -ambassade -Ambassadeur -ambassador -ambassador-at-large -ambassadorial -ambassadorially -ambassadors -ambassador's -ambassadors-at-large -ambassadorship -ambassadorships -ambassadress -ambassage -ambassy -ambassiate -ambatch -ambatoarinite -ambe -Ambedkar -ambeer -ambeers -Amber -amber-clear -amber-colored -amber-days -amber-dropping -amberfish -amberfishes -Amberg -ambergrease -ambergris -ambergrises -amber-headed -amber-hued -ambery -amberies -amberiferous -amber-yielding -amberina -amberite -amberjack -amberjacks -Amberley -Amberly -amberlike -amber-locked -amberoid -amberoids -amberous -ambers -Amberson -Ambert -amber-tinted -amber-tipped -amber-weeping -amber-white -Amby -ambi- -Ambia -ambiance -ambiances -ambicolorate -ambicoloration -ambidexter -ambidexterity -ambidexterities -ambidexterous -ambidextral -ambidextrous -ambidextrously -ambidextrousness -Ambie -ambience -ambiences -ambiency -ambiens -ambient -ambients -ambier -ambigenal -ambigenous -ambigu -ambiguity -ambiguities -ambiguity's -ambiguous -ambiguously -ambiguousness -ambilaevous -ambil-anak -ambilateral -ambilateralaterally -ambilaterality -ambilaterally -ambilevous -ambilian -ambilogy -ambiopia -ambiparous -ambisextrous -ambisexual -ambisexuality -ambisexualities -ambisyllabic -ambisinister -ambisinistrous -ambisporangiate -Ambystoma -Ambystomidae -ambit -ambital -ambitendency -ambitendencies -ambitendent -ambition -ambitioned -ambitioning -ambitionist -ambitionless -ambitionlessly -ambitions -ambition's -ambitious -ambitiously -ambitiousness -ambits -ambitty -ambitus -ambivalence -ambivalences -ambivalency -ambivalent -ambivalently -ambiversion -ambiversive -ambivert -ambiverts -Amble -ambled -ambleocarpus -Ambler -amblers -ambles -amblyacousia -amblyaphia -Amblycephalidae -Amblycephalus -amblychromatic -Amblydactyla -amblygeusia -amblygon -amblygonal -amblygonite -ambling -amblingly -amblyocarpous -Amblyomma -amblyope -amblyopia -amblyopic -Amblyopsidae -Amblyopsis -amblyoscope -amblypod -Amblypoda -amblypodous -Amblyrhynchus -amblystegite -Amblystoma -amblosis -amblotic -ambo -amboceptoid -amboceptor -Ambocoelia -ambodexter -Amboy -Amboina -amboyna -amboinas -amboynas -Amboinese -Amboise -ambolic -ambomalleal -Ambon -ambones -ambonite -Ambonnay -ambos -ambosexous -ambosexual -ambracan -ambrain -ambreate -ambreic -ambrein -ambrette -ambrettolide -ambry -Ambrica -ambries -ambrite -Ambrogino -Ambrogio -ambroid -ambroids -Ambroise -ambrology -Ambros -Ambrosane -Ambrose -Ambrosi -Ambrosia -ambrosiac -Ambrosiaceae -ambrosiaceous -ambrosial -ambrosially -Ambrosian -ambrosias -ambrosiate -ambrosin -Ambrosine -Ambrosio -Ambrosius -ambrosterol -ambrotype -ambsace -ambs-ace -ambsaces -ambulacra -ambulacral -ambulacriform -ambulacrum -ambulance -ambulanced -ambulancer -ambulances -ambulance's -ambulancing -ambulant -ambulante -ambulantes -ambulate -ambulated -ambulates -ambulating -ambulatio -ambulation -ambulative -ambulator -ambulatory -Ambulatoria -ambulatorial -ambulatories -ambulatorily -ambulatorium -ambulatoriums -ambulators -ambulia -ambuling -ambulomancy -Ambur -amburbial -Amburgey -ambury -ambuscade -ambuscaded -ambuscader -ambuscades -ambuscading -ambuscado -ambuscadoed -ambuscados -ambush -ambushed -ambusher -ambushers -ambushes -ambushing -ambushlike -ambushment -ambustion -AMC -Amchitka -amchoor -AMD -amdahl -AMDG -amdt -AME -Ameagle -ameba -amebae -ameban -amebas -amebean -amebian -amebiasis -amebic -amebicidal -amebicide -amebid -amebiform -amebobacter -amebocyte -ameboid -ameboidism -amebous -amebula -Amedeo -AMEDS -ameed -ameen -ameer -ameerate -ameerates -ameers -ameiosis -ameiotic -Ameiuridae -Ameiurus -Ameiva -Ameizoeira -amel -Amelanchier -ameland -amelcorn -amelcorns -amelet -Amelia -Amelie -amelification -Amelina -Ameline -ameliorable -ameliorableness -ameliorant -ameliorate -ameliorated -ameliorates -ameliorating -amelioration -ameliorations -ameliorativ -ameliorative -amelioratively -ameliorator -amelioratory -Amelita -amellus -ameloblast -ameloblastic -amelu -amelus -Amen -Amena -amenability -amenable -amenableness -amenably -amenage -amenance -Amend -amendable -amendableness -amendatory -amende -amended -amende-honorable -amender -amenders -amending -amendment -amendments -amendment's -amends -amene -Amenia -Amenism -Amenite -amenity -amenities -amenorrhea -amenorrheal -amenorrheic -amenorrho -amenorrhoea -amenorrhoeal -amenorrhoeic -Amen-Ra -amens -ament -amenta -amentaceous -amental -Amenti -amenty -amentia -amentias -Amentiferae -amentiferous -amentiform -aments -amentula -amentulum -amentum -amenuse -Amer -Amer. -Amerada -amerce -amerceable -amerced -amercement -amercements -amercer -amercers -amerces -amerciable -amerciament -amercing -Amery -America -American -Americana -Americanese -Americanisation -Americanise -Americanised -Americaniser -Americanising -Americanism -americanisms -Americanist -Americanistic -Americanitis -Americanization -Americanize -Americanized -Americanizer -americanizes -Americanizing -Americanly -Americano -Americano-european -Americanoid -Americanos -americans -american's -americanum -americanumancestors -americas -america's -Americaward -Americawards -americium -americo- -Americomania -Americophobe -Americus -Amerigo -Amerika -amerikani -Amerimnon -AmerInd -Amerindian -amerindians -Amerindic -amerinds -amerism -ameristic -AMERITECH -Amero -Amersfoort -Amersham -AmerSp -amerveil -Ames -amesace -ames-ace -amesaces -Amesbury -amesite -Ameslan -amess -Amesville -Ametabola -ametabole -ametaboly -ametabolia -ametabolian -ametabolic -ametabolism -ametabolous -ametallous -Amethi -Amethist -Amethyst -amethystine -amethystlike -amethysts -amethodical -amethodically -ametoecious -ametria -ametrometer -ametrope -ametropia -ametropic -ametrous -AMEX -Amfortas -amgarn -amhar -Amhara -Amharic -Amherst -Amherstdale -amherstite -amhran -AMI -Amy -Amia -amiability -amiabilities -amiable -amiableness -amiably -amiant -amianth -amianthiform -amianthine -Amianthium -amianthoid -amianthoidal -amianthus -amiantus -amiantuses -Amias -Amyas -amyatonic -amic -amicability -amicabilities -amicable -amicableness -amicably -amical -AMICE -amiced -amices -AMIChemE -amici -amicicide -Amick -Amyclaean -Amyclas -amicous -amicrobic -amicron -amicronucleate -amyctic -amictus -amicus -Amycus -amid -amid- -Amida -Amidah -amidase -amidases -amidate -amidated -amidating -amidation -amide -amides -amidic -amidid -amidide -amidin -amidine -amidines -amidins -Amidism -Amidist -amidmost -amido -amido- -amidoacetal -amidoacetic -amidoacetophenone -amidoaldehyde -amidoazo -amidoazobenzene -amidoazobenzol -amidocaffeine -amidocapric -amidocyanogen -amidofluorid -amidofluoride -amidogen -amidogens -amidoguaiacol -amidohexose -amidoketone -Amidol -amidols -amidomyelin -Amidon -amydon -amidone -amidones -amidophenol -amidophosphoric -amidopyrine -amidoplast -amidoplastid -amidosuccinamic -amidosulphonal -amidothiazole -amido-urea -amidoxy -amidoxyl -amidoxime -amidrazone -amids -amidship -amidships -amidst -amidstream -amidulin -amidward -Amie -Amye -Amiel -amyelencephalia -amyelencephalic -amyelencephalous -amyelia -amyelic -amyelinic -amyelonic -amyelotrophy -amyelous -Amiens -amies -Amieva -amiga -amigas -amygdal -amygdala -Amygdalaceae -amygdalaceous -amygdalae -amygdalase -amygdalate -amygdale -amygdalectomy -amygdales -amygdalic -amygdaliferous -amygdaliform -amygdalin -amygdaline -amygdalinic -amygdalitis -amygdaloid -amygdaloidal -amygdalolith -amygdaloncus -amygdalopathy -amygdalothripsis -amygdalotome -amygdalotomy -amygdalo-uvular -Amygdalus -amygdonitrile -amygdophenin -amygdule -amygdules -Amigen -amigo -amigos -Amii -Amiidae -Amil -amyl -amyl- -amylaceous -amylamine -amylan -amylase -amylases -amylate -Amilcare -amildar -amylemia -amylene -amylenes -amylenol -Amiles -amylic -amylidene -amyliferous -amylin -amylo -amylo- -amylocellulose -amyloclastic -amylocoagulase -amylodextrin -amylodyspepsia -amylogen -amylogenesis -amylogenic -amylogens -amylohydrolysis -amylohydrolytic -amyloid -amyloidal -amyloidoses -amyloidosis -amyloids -amyloleucite -amylolysis -amylolytic -amylom -amylome -amylometer -amylon -amylopectin -amylophagia -amylophosphate -amylophosphoric -amyloplast -amyloplastic -amyloplastid -amylopsase -amylopsin -amylose -amyloses -amylosynthesis -amylosis -Amiloun -amyls -amylum -amylums -amyluria -AMIMechE -amimia -amimide -Amymone -Amin -amin- -aminase -aminate -aminated -aminating -amination -aminded -amine -amines -amini -aminic -aminish -aminity -aminities -aminization -aminize -amino -amino- -aminoacetal -aminoacetanilide -aminoacetic -aminoacetone -aminoacetophenetidine -aminoacetophenone -aminoacidemia -aminoaciduria -aminoanthraquinone -aminoazo -aminoazobenzene -aminobarbituric -aminobenzaldehyde -aminobenzamide -aminobenzene -aminobenzine -aminobenzoic -aminocaproic -aminodiphenyl -Amynodon -amynodont -aminoethionic -aminoformic -aminogen -aminoglutaric -aminoguanidine -aminoid -aminoketone -aminolipin -aminolysis -aminolytic -aminomalonic -aminomyelin -amino-oxypurin -aminopeptidase -aminophenol -aminopherase -aminophylline -aminopyrine -aminoplast -aminoplastic -aminopolypeptidase -aminopropionic -aminopurine -aminoquin -aminoquinoline -aminosis -aminosuccinamic -aminosulphonic -aminothiophen -aminotransferase -aminotriazole -aminovaleric -aminoxylol -amins -Aminta -Amintor -Amyntor -Amintore -Amioidei -amyosthenia -amyosthenic -amyotaxia -amyotonia -amyotrophy -amyotrophia -amyotrophic -amyous -Amir -amiray -amiral -Amyraldism -Amyraldist -Amiranha -amirate -amirates -amire -Amiret -Amyridaceae -amyrin -Amyris -amyrol -amyroot -amirs -amirship -Amis -Amish -Amishgo -amiss -amissibility -amissible -amissing -amission -amissness -Amissville -Amistad -amit -Amita -Amitabha -Amytal -amitate -Amite -Amythaon -Amity -Amitie -amities -Amityville -amitoses -amitosis -amitotic -amitotically -amitriptyline -amitrole -amitroles -Amittai -amitular -amixia -amyxorrhea -amyxorrhoea -Amizilis -amla -amlacra -amlet -amli -amlikar -Amlin -Amling -amlong -AMLS -Amma -Ammadas -Ammadis -Ammamaria -Amman -Ammanati -Ammanite -Ammann -ammelide -ammelin -ammeline -ammeos -ammer -Ammerman -ammeter -ammeters -Ammi -Ammiaceae -ammiaceous -Ammianus -AmMIEE -ammine -ammines -ammino -amminochloride -amminolysis -amminolytic -ammiolite -ammiral -Ammisaddai -Ammishaddai -ammites -ammo -ammo- -Ammobium -ammocete -ammocetes -ammochaeta -ammochaetae -ammochryse -ammocoete -ammocoetes -ammocoetid -Ammocoetidae -ammocoetiform -ammocoetoid -ammodyte -Ammodytes -Ammodytidae -ammodytoid -Ammon -ammonal -ammonals -ammonate -ammonation -Ammonea -ammonia -ammoniac -ammoniacal -ammoniaco- -ammoniacs -ammoniacum -ammoniaemia -ammonias -ammoniate -ammoniated -ammoniating -ammoniation -ammonic -ammonical -ammoniemia -ammonify -ammonification -ammonified -ammonifier -ammonifies -ammonifying -ammonio- -ammoniojarosite -ammonion -ammonionitrate -Ammonite -Ammonites -Ammonitess -ammonitic -ammoniticone -ammonitiferous -Ammonitish -ammonitoid -Ammonitoidea -ammonium -ammoniums -ammoniuret -ammoniureted -ammoniuria -ammonization -ammono -ammonobasic -ammonocarbonic -ammonocarbonous -ammonoid -Ammonoidea -ammonoidean -ammonoids -ammonolyses -ammonolysis -ammonolitic -ammonolytic -ammonolyze -ammonolyzed -ammonolyzing -Ammophila -ammophilous -ammoresinol -ammoreslinol -ammos -ammotherapy -ammu -ammunition -ammunitions -amnemonic -amnesia -amnesiac -amnesiacs -amnesias -amnesic -amnesics -amnesty -amnestic -amnestied -amnesties -amnestying -amnia -amniac -amniatic -amnic -Amnigenia -amninia -amninions -amnioallantoic -amniocentesis -amniochorial -amnioclepsis -amniomancy -amnion -Amnionata -amnionate -amnionia -amnionic -amnions -amniorrhea -amnios -Amniota -amniote -amniotes -amniotic -amniotin -amniotitis -amniotome -amn't -Amo -Amoakuh -amobarbital -amober -amobyr -Amoco -amoeba -amoebae -Amoebaea -amoebaean -amoebaeum -amoebalike -amoeban -amoebas -amoeba's -amoebean -amoebeum -amoebian -amoebiasis -amoebic -amoebicidal -amoebicide -amoebid -Amoebida -Amoebidae -amoebiform -Amoebobacter -Amoebobacterieae -amoebocyte -Amoebogeniae -amoeboid -amoeboidism -amoebous -amoebula -Amoy -Amoyan -amoibite -Amoyese -amoinder -amok -amoke -amoks -amole -amoles -amolilla -amolish -amollish -amomal -Amomales -Amomis -amomum -Amon -Amonate -among -amongst -Amon-Ra -amontillado -amontillados -Amopaon -Amor -Amora -amorado -amoraic -amoraim -amoral -amoralism -amoralist -amorality -amoralize -amorally -AMORC -Amores -Amoret -Amoreta -Amorete -Amorette -Amoretti -amoretto -amorettos -Amoreuxia -Amorgos -Amory -amorini -amorino -amorism -amorist -amoristic -amorists -Amorita -Amorite -Amoritic -Amoritish -Amoritta -amornings -amorosa -amorosity -amoroso -amorous -amorously -amorousness -amorousnesses -amorph -Amorpha -amorphi -amorphy -amorphia -amorphic -amorphinism -amorphism -amorpho- -Amorphophallus -amorphophyte -amorphotae -amorphous -amorphously -amorphousness -amorphozoa -amorphus -a-morrow -amort -amortisable -amortise -amortised -amortises -amortising -amortissement -amortisseur -amortizable -amortization -amortizations -amortize -amortized -amortizement -amortizes -amortizing -Amorua -Amos -amosite -Amoskeag -amotion -amotions -amotus -Amou -amouli -amount -amounted -amounter -amounters -amounting -amounts -amour -amouret -amourette -amourist -amour-propre -amours -amovability -amovable -amove -amoved -amoving -amowt -AMP -amp. -ampalaya -ampalea -ampangabeite -amparo -AMPAS -ampasimenite -ampassy -Ampelidaceae -ampelidaceous -Ampelidae -ampelideous -Ampelis -ampelite -ampelitic -ampelography -ampelographist -ampelograpny -ampelopsidin -ampelopsin -Ampelopsis -Ampelos -Ampelosicyos -ampelotherapy -amper -amperage -amperages -Ampere -ampere-foot -ampere-hour -amperemeter -ampere-minute -amperes -ampere-second -ampere-turn -ampery -Amperian -amperometer -amperometric -ampersand -ampersands -ampersand's -Ampex -amphanthia -amphanthium -ampheclexis -ampherotoky -ampherotokous -amphetamine -amphetamines -amphi -amphi- -Amphiaraus -amphiarthrodial -amphiarthroses -amphiarthrosis -amphiaster -amphib -amphibali -amphibalus -Amphibia -amphibial -amphibian -amphibians -amphibian's -amphibichnite -amphibiety -amphibiology -amphibiological -amphibion -amphibiontic -amphibiotic -Amphibiotica -amphibious -amphibiously -amphibiousness -amphibium -amphiblastic -amphiblastula -amphiblestritis -Amphibola -amphibole -amphiboles -amphiboly -amphibolia -amphibolic -amphibolies -amphiboliferous -amphiboline -amphibolite -amphibolitic -amphibology -amphibological -amphibologically -amphibologies -amphibologism -amphibolostylous -amphibolous -amphibrach -amphibrachic -amphibryous -Amphicarpa -Amphicarpaea -amphicarpia -amphicarpic -amphicarpium -amphicarpogenous -amphicarpous -amphicarpus -amphicentric -amphichroic -amphichrom -amphichromatic -amphichrome -amphichromy -Amphicyon -Amphicyonidae -amphicyrtic -amphicyrtous -amphicytula -amphicoelian -amphicoelous -amphicome -Amphicondyla -amphicondylous -amphicrania -amphicreatinine -amphicribral -Amphictyon -amphictyony -amphictyonian -amphictyonic -amphictyonies -amphictyons -amphid -Amphidamas -amphide -amphidesmous -amphidetic -amphidiarthrosis -amphidiploid -amphidiploidy -amphidisc -Amphidiscophora -amphidiscophoran -amphidisk -amphidromia -amphidromic -amphierotic -amphierotism -Amphigaea -amphigaean -amphigam -Amphigamae -amphigamous -amphigastria -amphigastrium -amphigastrula -amphigean -amphigen -amphigene -amphigenesis -amphigenetic -amphigenous -amphigenously -amphigony -amphigonia -amphigonic -amphigonium -amphigonous -amphigory -amphigoric -amphigories -amphigouri -amphigouris -amphikaryon -amphikaryotic -Amphilochus -amphilogy -amphilogism -amphimacer -Amphimachus -Amphimarus -amphimictic -amphimictical -amphimictically -amphimixes -amphimixis -amphimorula -amphimorulae -Amphinesian -Amphineura -amphineurous -Amphinome -Amphinomus -amphinucleus -Amphion -Amphionic -Amphioxi -Amphioxidae -Amphioxides -Amphioxididae -amphioxis -amphioxus -amphioxuses -amphipeptone -amphiphithyra -amphiphloic -amphipyrenin -amphiplatyan -Amphipleura -amphiploid -amphiploidy -amphipneust -Amphipneusta -amphipneustic -Amphipnous -amphipod -Amphipoda -amphipodal -amphipodan -amphipodiform -amphipodous -amphipods -amphiprostylar -amphiprostyle -amphiprotic -Amphirhina -amphirhinal -amphirhine -amphisarca -amphisbaena -amphisbaenae -amphisbaenas -amphisbaenian -amphisbaenic -amphisbaenid -Amphisbaenidae -amphisbaenoid -amphisbaenous -amphiscians -amphiscii -Amphisile -Amphisilidae -amphispermous -amphisporangiate -amphispore -Amphissa -Amphissus -amphistylar -amphistyly -amphistylic -Amphistoma -amphistomatic -amphistome -amphistomoid -amphistomous -Amphistomum -amphitene -amphithalami -amphithalamus -amphithalmi -amphitheater -amphitheatered -amphitheaters -amphitheater's -amphitheatral -amphitheatre -amphitheatric -amphitheatrical -amphitheatrically -amphitheccia -amphithecia -amphithecial -amphithecium -amphithect -Amphithemis -amphithere -amphithyra -amphithyron -amphithyrons -amphithura -amphithuron -amphithurons -amphithurthura -amphitokal -amphitoky -amphitokous -amphitriaene -amphitricha -amphitrichate -amphitrichous -Amphitryon -Amphitrite -amphitron -amphitropal -amphitropous -Amphitruo -Amphiuma -Amphiumidae -Amphius -amphivasal -amphivorous -Amphizoidae -amphodarch -amphodelite -amphodiplopia -amphogeny -amphogenic -amphogenous -ampholyte -ampholytic -amphopeptone -amphophil -amphophile -amphophilic -amphophilous -amphora -amphorae -amphoral -amphoras -amphore -amphorette -amphoric -amphoricity -amphoriloquy -amphoriskoi -amphoriskos -amphorophony -amphorous -amphoteric -amphotericin -Amphoterus -Amphrysian -ampyces -Ampycides -ampicillin -Ampycus -ampitheater -Ampyx -ampyxes -ample -amplect -amplectant -ampleness -ampler -amplest -amplex -amplexation -amplexicaudate -amplexicaul -amplexicauline -amplexifoliate -amplexus -amplexuses -amply -ampliate -ampliation -ampliative -amplication -amplicative -amplidyne -amplify -amplifiable -amplificate -amplification -amplifications -amplificative -amplificator -amplificatory -amplified -amplifier -amplifiers -amplifies -amplifying -amplitude -amplitudes -amplitude's -amplitudinous -ampollosity -ampongue -ampoule -ampoules -ampoule's -AMPS -ampul -ampulate -ampulated -ampulating -ampule -ampules -ampulla -ampullaceous -ampullae -ampullar -ampullary -Ampullaria -Ampullariidae -ampullate -ampullated -ampulliform -ampullitis -ampullosity -ampullula -ampullulae -ampuls -ampus-and -amputate -amputated -amputates -amputating -amputation -amputational -amputations -amputative -amputator -amputee -amputees -Amr -amra -AMRAAM -Amram -Amratian -Amravati -amreeta -amreetas -amrelle -Amri -amrit -Amrita -amritas -Amritsar -Amroati -AMROC -AMS -AMSAT -amsath -Amschel -Amsden -amsel -Amsha-spand -Amsha-spend -Amsonia -Amsterdam -Amsterdamer -Amston -AMSW -AMT -amt. -amtman -amtmen -Amtorg -amtrac -amtrack -amtracks -amtracs -Amtrak -AMU -Amuchco -amuck -amucks -Amueixa -amugis -amuguis -amuyon -amuyong -amula -amulae -amulas -amulet -amuletic -amulets -Amulius -amulla -amunam -Amund -Amundsen -Amur -amurca -amurcosity -amurcous -Amurru -amus -amusable -amuse -amused -amusedly -amusee -amusement -amusements -amusement's -amuser -amusers -amuses -amusette -Amusgo -amusia -amusias -amusing -amusingly -amusingness -amusive -amusively -amusiveness -amutter -amuze -amuzzle -AMVET -amvis -Amvrakikos -amzel -an -an- -an. -ana -ana- -an'a -Anabaena -anabaenas -Anabal -anabantid -Anabantidae -Anabaptism -Anabaptist -Anabaptistic -Anabaptistical -Anabaptistically -Anabaptistry -anabaptists -anabaptist's -anabaptize -anabaptized -anabaptizing -Anabas -Anabase -anabases -anabasin -anabasine -anabasis -anabasse -anabata -anabathmoi -anabathmos -anabathrum -anabatic -Anabel -Anabella -Anabelle -anaberoga -anabia -anabibazon -anabiosis -anabiotic -Anablepidae -Anableps -anablepses -anabo -anabohitsite -anaboly -anabolic -anabolin -anabolism -anabolite -anabolitic -anabolize -anabong -anabranch -anabrosis -anabrotic -ANAC -anacahuita -anacahuite -anacalypsis -anacampsis -anacamptic -anacamptically -anacamptics -anacamptometer -anacanth -anacanthine -Anacanthini -anacanthous -anacara -anacard -Anacardiaceae -anacardiaceous -anacardic -Anacardium -anacatadidymus -anacatharsis -anacathartic -anacephalaeosis -anacephalize -Anaces -Anacharis -anachoret -anachorism -anachromasis -anachronic -anachronical -anachronically -anachronism -anachronismatical -anachronisms -anachronism's -anachronist -anachronistic -anachronistical -anachronistically -anachronize -anachronous -anachronously -anachueta -Anacyclus -anacid -anacidity -Anacin -anack -anaclasis -anaclastic -anaclastics -Anaclete -anacletica -anacleticum -Anacletus -anaclinal -anaclisis -anaclitic -Anacoco -anacoenoses -anacoenosis -anacolutha -anacoluthia -anacoluthic -anacoluthically -anacoluthon -anacoluthons -anacoluttha -Anaconda -anacondas -Anacortes -Anacostia -anacoustic -Anacreon -Anacreontic -Anacreontically -anacrisis -Anacrogynae -anacrogynous -anacromyodian -anacrotic -anacrotism -anacruses -anacrusis -anacrustic -anacrustically -anaculture -anacusia -anacusic -anacusis -Anadarko -anadem -anadems -anadenia -anadesm -anadicrotic -anadicrotism -anadidymus -Anadyomene -anadiplosis -anadipsia -anadipsic -Anadyr -anadrom -anadromous -anaematosis -anaemia -anaemias -anaemic -anaemotropy -anaeretic -anaerobation -anaerobe -anaerobes -anaerobia -anaerobian -anaerobic -anaerobically -anaerobies -anaerobion -anaerobiont -anaerobiosis -anaerobiotic -anaerobiotically -anaerobious -anaerobism -anaerobium -anaerophyte -anaeroplasty -anaeroplastic -anaesthatic -anaesthesia -anaesthesiant -anaesthesiology -anaesthesiologist -anaesthesis -anaesthetic -anaesthetically -anaesthetics -anaesthetist -anaesthetization -anaesthetize -anaesthetized -anaesthetizer -anaesthetizing -anaesthyl -anaetiological -anagalactic -Anagallis -anagap -anagenesis -anagenetic -anagenetical -anagennesis -anagep -anagignoskomena -anagyrin -anagyrine -Anagyris -anaglyph -anaglyphy -anaglyphic -anaglyphical -anaglyphics -anaglyphoscope -anaglyphs -anaglypta -anaglyptic -anaglyptical -anaglyptics -anaglyptograph -anaglyptography -anaglyptographic -anaglypton -Anagni -anagnorises -anagnorisis -Anagnos -anagnost -anagnostes -anagoge -anagoges -anagogy -anagogic -anagogical -anagogically -anagogics -anagogies -anagram -anagrammatic -anagrammatical -anagrammatically -anagrammatise -anagrammatised -anagrammatising -anagrammatism -anagrammatist -anagrammatization -anagrammatize -anagrammatized -anagrammatizing -anagrammed -anagramming -anagrams -anagram's -anagraph -anagua -anahao -anahau -Anaheim -Anahita -Anahola -Anahuac -anay -Anaitis -Anakes -Anakim -anakinesis -anakinetic -anakinetomer -anakinetomeric -anakoluthia -anakrousis -anaktoron -anal -anal. -analabos -analagous -analav -analcime -analcimes -analcimic -analcimite -analcite -analcites -analcitite -analecta -analectic -analects -analemma -analemmas -analemmata -analemmatic -analepses -analepsy -analepsis -analeptic -analeptical -analgen -analgene -analgesia -analgesic -analgesics -Analgesidae -analgesis -analgesist -analgetic -analgia -analgias -analgic -analgize -Analiese -analysability -analysable -analysand -analysands -analysation -Analise -analyse -analysed -analyser -analysers -analyses -analysing -analysis -analyst -analysts -analyst's -analyt -anality -analytic -analytical -analytically -analyticity -analyticities -analytico-architectural -analytics -analities -analytique -analyzability -analyzable -analyzation -analyze -analyzed -analyzer -analyzers -analyzes -analyzing -analkalinity -anallagmatic -anallagmatis -anallantoic -Anallantoidea -anallantoidean -anallergic -Anallese -anally -Anallise -analog -analoga -analogal -analogy -analogia -analogic -analogical -analogically -analogicalness -analogice -analogies -analogion -analogions -analogy's -analogise -analogised -analogising -analogism -analogist -analogistic -analogize -analogized -analogizing -analogon -analogous -analogously -analogousness -analogs -analogue -analogues -analogue's -Analomink -analphabet -analphabete -analphabetic -analphabetical -analphabetism -Anam -anama -Anambra -Anamelech -anamesite -anametadromous -Anamirta -anamirtin -Anamite -Anammelech -anammonid -anammonide -anamneses -Anamnesis -anamnestic -anamnestically -Anamnia -Anamniata -Anamnionata -anamnionic -Anamniota -anamniote -anamniotic -Anamoose -anamorphic -anamorphism -anamorphoscope -anamorphose -anamorphoses -anamorphosis -anamorphote -anamorphous -Anamosa -anan -Anana -ananaplas -ananaples -ananas -Anand -Ananda -anandrarious -anandria -anandrious -anandrous -ananepionic -anangioid -anangular -Ananias -ananym -Ananism -Ananite -anankastic -ananke -anankes -Ananna -Anansi -Ananta -ananter -anantherate -anantherous -ananthous -ananthropism -anapaest -anapaestic -anapaestical -anapaestically -anapaests -anapaganize -anapaite -anapanapa -anapeiratic -anapes -anapest -anapestic -anapestically -anapests -anaphalantiasis -Anaphalis -anaphase -anaphases -anaphasic -Anaphe -anaphia -anaphylactic -anaphylactically -anaphylactin -anaphylactogen -anaphylactogenic -anaphylactoid -anaphylatoxin -anaphylaxis -anaphyte -anaphora -anaphoral -anaphoras -anaphoria -anaphoric -anaphorical -anaphorically -anaphrodisia -anaphrodisiac -anaphroditic -anaphroditous -anaplasia -anaplasis -anaplasm -Anaplasma -anaplasmoses -anaplasmosis -anaplasty -anaplastic -anapleroses -anaplerosis -anaplerotic -anapnea -anapneic -anapnoeic -anapnograph -anapnoic -anapnometer -anapodeictic -Anapolis -anapophyses -anapophysial -anapophysis -anapsid -Anapsida -anapsidan -Anapterygota -anapterygote -anapterygotism -anapterygotous -anaptychi -anaptychus -anaptyctic -anaptyctical -anaptyxes -anaptyxis -Anaptomorphidae -Anaptomorphus -anaptotic -Anapurna -anaqua -anarcestean -Anarcestes -anarch -anarchal -anarchy -anarchial -anarchic -anarchical -anarchically -anarchies -anarchism -anarchisms -anarchist -anarchistic -anarchists -anarchist's -anarchize -anarcho -anarchoindividualist -anarchosyndicalism -anarcho-syndicalism -anarchosyndicalist -anarcho-syndicalist -anarchosocialist -anarchs -anarcotin -anareta -anaretic -anaretical -anargyroi -anargyros -anarya -Anaryan -anarithia -anarithmia -anarthria -anarthric -anarthropod -Anarthropoda -anarthropodous -anarthrosis -anarthrous -anarthrously -anarthrousness -anartismos -Anas -Anasa -anasarca -anasarcas -anasarcous -Anasazi -Anasazis -anaschistic -Anasco -anaseismic -Anasitch -anaspadias -anaspalin -anaspid -Anaspida -Anaspidacea -Anaspides -anastalsis -anastaltic -Anastas -Anastase -anastases -Anastasia -Anastasian -Anastasie -anastasimon -anastasimos -Anastasio -anastasis -Anastasius -Anastassia -anastate -anastatic -Anastatica -Anastatius -Anastatus -Anastice -anastigmat -anastigmatic -anastomos -anastomose -anastomosed -anastomoses -anastomosing -anastomosis -anastomotic -Anastomus -Anastos -anastrophe -anastrophy -Anastrophia -Anat -anat. -anatabine -anatase -anatases -anatexes -anatexis -anathem -anathema -anathemas -anathemata -anathematic -anathematical -anathematically -anathematisation -anathematise -anathematised -anathematiser -anathematising -anathematism -anathematization -anathematize -anathematized -anathematizer -anathematizes -anathematizing -anatheme -anathemize -Anatherum -Anatidae -anatifa -Anatifae -anatifer -anatiferous -Anatinacea -Anatinae -anatine -anatira -anatman -anatocism -Anatol -Anatola -Anatole -anatoly -Anatolia -Anatolian -Anatolic -Anatolio -Anatollo -anatomy -anatomic -anatomical -anatomically -anatomicals -anatomico- -anatomicobiological -anatomicochirurgical -anatomicomedical -anatomicopathologic -anatomicopathological -anatomicophysiologic -anatomicophysiological -anatomicosurgical -anatomies -anatomiless -anatomisable -anatomisation -anatomise -anatomised -anatomiser -anatomising -anatomism -anatomist -anatomists -anatomizable -anatomization -anatomize -anatomized -anatomizer -anatomizes -anatomizing -anatomopathologic -anatomopathological -Anatone -anatopism -anatosaurus -anatox -anatoxin -anatoxins -anatreptic -anatripsis -anatripsology -anatriptic -anatron -anatropal -anatropia -anatropous -anatta -anatto -anattos -Anatum -anaudia -anaudic -anaunter -anaunters -anauxite -Anawalt -Anax -Anaxagoras -Anaxagorean -Anaxagorize -Anaxarete -anaxial -Anaxibia -Anaximander -Anaximandrian -Anaximenes -Anaxo -anaxon -anaxone -Anaxonia -anazoturia -anba -anbury -ANC -Ancaeus -Ancalin -ance -Ancel -Ancelin -Anceline -Ancell -Ancerata -ancestor -ancestorial -ancestorially -ancestors -ancestor's -ancestral -ancestrally -ancestress -ancestresses -ancestry -ancestrial -ancestrian -ancestries -Ancha -Anchat -Anchesmius -Anchiale -Anchie -Anchietea -anchietin -anchietine -anchieutectic -anchylose -anchylosed -anchylosing -anchylosis -anchylotic -anchimonomineral -Anchinoe -Anchisaurus -Anchises -Anchistea -Anchistopoda -anchithere -anchitherioid -anchoic -Anchong-Ni -anchor -anchorable -Anchorage -anchorages -anchorage's -anchorate -anchored -anchorer -anchoress -anchoresses -anchoret -anchoretic -anchoretical -anchoretish -anchoretism -anchorets -anchorhold -anchory -anchoring -anchorite -anchorites -anchoritess -anchoritic -anchoritical -anchoritically -anchoritish -anchoritism -anchorless -anchorlike -anchorman -anchormen -anchors -anchor-shaped -Anchorville -anchorwise -anchoveta -anchovy -anchovies -Anchtherium -Anchusa -anchusas -anchusin -anchusine -anchusins -ancy -ancien -ancience -anciency -anciennete -anciens -ancient -ancienter -ancientest -ancienty -ancientism -anciently -ancientness -ancientry -ancients -Ancier -ancile -ancilia -Ancilin -ancilla -ancillae -ancillary -ancillaries -ancillas -ancille -Ancyloceras -Ancylocladus -Ancylodactyla -ancylopod -Ancylopoda -ancylose -Ancylostoma -ancylostome -ancylostomiasis -Ancylostomum -Ancylus -ancipital -ancipitous -Ancyrean -Ancyrene -ancyroid -Ancistrocladaceae -ancistrocladaceous -Ancistrocladus -ancistrodon -ancistroid -Ancius -ancle -Anco -ancodont -Ancohuma -ancoly -ancome -Ancon -Ancona -anconad -anconagra -anconal -anconas -ancone -anconeal -anconei -anconeous -ancones -anconeus -ancony -anconitis -anconoid -ancor -ancora -ancoral -Ancram -Ancramdale -ancraophobia -ancre -ancress -ancresses -and -and- -and/or -anda -anda-assu -andabata -andabatarian -andabatism -Andale -Andalusia -Andalusian -andalusite -Andaman -Andamanese -andamenta -andamento -andamentos -andante -andantes -andantini -andantino -andantinos -Andaqui -Andaquian -Andarko -Andaste -Ande -Andean -anded -Andee -Andeee -Andel -Andelee -Ander -Anderea -Anderegg -Anderer -Anderlecht -Anders -Andersen -Anderson -Andersonville -Anderssen -Anderstorp -Andert -anderun -Andes -Andesic -andesine -andesinite -andesite -andesyte -andesites -andesytes -andesitic -Andevo -ANDF -Andhra -Andi -Andy -andia -Andian -Andie -Andikithira -Andine -anding -Andy-over -Andira -andirin -andirine -andiroba -andiron -andirons -Andizhan -Ando -Andoche -Andoke -Andonis -andor -andorite -andoroba -Andorobo -Andorra -Andorran -Andorre -andouille -andouillet -andouillette -Andover -Andr -andr- -Andra -Andrade -andradite -andragogy -andranatomy -andrarchy -Andras -Andrassy -Andre -Andrea -Andreaea -Andreaeaceae -Andreaeales -Andreana -Andreas -Andree -Andrei -Andrey -Andreyev -Andreyevka -Andrej -Andrel -Andrena -andrenid -Andrenidae -Andreotti -Andres -Andrew -andrewartha -Andrewes -Andrews -andrewsite -Andri -andry -Andria -Andriana -Andrias -Andric -Andryc -Andrien -andries -Andriette -Andrija -Andris -andrite -andro- -androcentric -androcephalous -androcephalum -androcyte -androclclinia -Androclea -Androcles -androclinia -androclinium -Androclus -androconia -androconium -androcracy -Androcrates -androcratic -androdynamous -androdioecious -androdioecism -androeccia -androecia -androecial -androecium -androgametangium -androgametophore -androgamone -androgen -androgenesis -androgenetic -androgenic -androgenous -androgens -Androgeus -androgyn -androgynal -androgynary -androgyne -androgyneity -androgyny -androgynia -androgynic -androgynies -androgynism -androginous -androgynous -androgynus -androgone -androgonia -androgonial -androgonidium -androgonium -Andrographis -andrographolide -android -androidal -androides -androids -androkinin -androl -androlepsy -androlepsia -Andromache -Andromada -andromania -Andromaque -andromed -Andromeda -Andromede -andromedotoxin -andromonoecious -andromonoecism -andromorphous -Andron -Andronicus -andronitis -andropetalar -andropetalous -androphagous -androphyll -androphobia -androphonomania -Androphonos -androphore -androphorous -androphorum -Andropogon -Andros -Androsace -Androscoggin -androseme -androsin -androsphinges -androsphinx -androsphinxes -androsporangium -androspore -androsterone -androtauric -androtomy -Androuet -androus -Androw -Andrsy -Andrus -ands -Andvar -Andvare -Andvari -ane -Aneale -anear -aneared -anearing -anears -aneath -anecdysis -anecdota -anecdotage -anecdotal -anecdotalism -anecdotalist -anecdotally -anecdote -anecdotes -anecdote's -anecdotic -anecdotical -anecdotically -anecdotist -anecdotists -anechoic -Aney -anelace -anelastic -anelasticity -anele -anelectric -anelectrode -anelectrotonic -anelectrotonus -aneled -aneles -aneling -anelytrous -anem- -anematize -anematized -anematizing -anematosis -Anemia -anemias -anemic -anemically -anemious -anemo- -anemobiagraph -anemochord -anemochore -anemochoric -anemochorous -anemoclastic -anemogram -anemograph -anemography -anemographic -anemographically -anemology -anemologic -anemological -anemometer -anemometers -anemometer's -anemometry -anemometric -anemometrical -anemometrically -anemometrograph -anemometrographic -anemometrographically -anemonal -anemone -Anemonella -anemones -anemony -anemonin -anemonol -anemopathy -anemophile -anemophily -anemophilous -Anemopsis -anemoscope -anemoses -anemosis -anemotactic -anemotaxis -Anemotis -anemotropic -anemotropism -anencephaly -anencephalia -anencephalic -anencephalotrophia -anencephalous -anencephalus -anend -an-end -anenergia -anenst -anent -anenterous -anepia -anepigraphic -anepigraphous -anepiploic -anepithymia -anerethisia -aneretic -anergy -anergia -anergias -anergic -anergies -anerythroplasia -anerythroplastic -anerly -aneroid -aneroidograph -aneroids -anerotic -anes -Anesidora -anesis -anesone -Anestassia -anesthesia -anesthesiant -anesthesias -anesthesimeter -anesthesiology -anesthesiologies -anesthesiologist -anesthesiologists -anesthesiometer -anesthesis -anesthetic -anesthetically -anesthetics -anesthetic's -anesthetist -anesthetists -anesthetization -anesthetize -anesthetized -anesthetizer -anesthetizes -anesthetizing -anesthyl -anestri -anestrous -anestrus -Anet -Aneta -Aneth -anethene -anethol -anethole -anetholes -anethols -Anethum -anetic -anetiological -Aneto -Anett -Anetta -Anette -aneuch -aneuploid -aneuploidy -aneuria -aneuric -aneurilemmic -Aneurin -aneurine -aneurins -aneurism -aneurysm -aneurismal -aneurysmal -aneurismally -aneurysmally -aneurismatic -aneurysmatic -aneurisms -aneurysms -anew -Anezeh -ANF -anfeeld -anfract -anfractuose -anfractuosity -anfractuous -anfractuousness -anfracture -Anfuso -ANG -anga -Angadreme -Angadresma -angakok -angakoks -angakut -Angami -Angami-naga -Angang -Angara -angaralite -angareb -angareeb -angarep -angary -angaria -angarias -angariation -angaries -Angarsk -Angarstroi -angas -Angdistis -Ange -angeyok -angekkok -angekok -angekut -Angel -Angela -angelate -angel-borne -angel-bright -angel-builded -angeldom -Angele -angeled -angeleen -angel-eyed -angeleyes -Angeleno -Angelenos -Angeles -angelet -angel-faced -angelfish -angelfishes -angel-guarded -angel-heralded -angelhood -Angeli -Angelia -Angelic -Angelica -Angelical -angelically -angelicalness -Angelican -angelica-root -angelicas -angelicic -angelicize -angelicness -Angelico -Angelika -angelim -angelin -Angelyn -Angelina -Angeline -angelinformal -angeling -Angelique -Angelis -Angelita -angelito -angelize -angelized -angelizing -Angell -Angelle -angellike -angel-noble -Angelo -angelocracy -angelographer -angelolater -angelolatry -angelology -angelologic -angelological -angelomachy -angelon -Angelonia -angelophany -angelophanic -angelot -angels -angel's -angel-seeming -angelship -angels-on-horseback -angel's-trumpet -Angelus -angeluses -angel-warned -anger -Angerboda -angered -angering -angerless -angerly -Angerona -Angeronalia -Angeronia -Angers -Angetenar -Angevin -Angevine -Angi -Angy -angi- -angia -angiasthenia -angico -Angie -angiectasis -angiectopia -angiemphraxis -Angier -angiitis -Angil -angild -angili -angilo -angina -anginal -anginas -anginiform -anginoid -anginophobia -anginose -anginous -angio- -angioasthenia -angioataxia -angioblast -angioblastic -angiocardiography -angiocardiographic -angiocardiographies -angiocarditis -angiocarp -angiocarpy -angiocarpian -angiocarpic -angiocarpous -angiocavernous -angiocholecystitis -angiocholitis -angiochondroma -angiocyst -angioclast -angiodermatitis -angiodiascopy -angioelephantiasis -angiofibroma -angiogenesis -angiogeny -angiogenic -angioglioma -angiogram -angiograph -angiography -angiographic -angiohemophilia -angiohyalinosis -angiohydrotomy -angiohypertonia -angiohypotonia -angioid -angiokeratoma -angiokinesis -angiokinetic -angioleucitis -angiolymphitis -angiolymphoma -angiolipoma -angiolith -angiology -angioma -angiomalacia -angiomas -angiomata -angiomatosis -angiomatous -angiomegaly -angiometer -angiomyocardiac -angiomyoma -angiomyosarcoma -angioneoplasm -angioneurosis -angioneurotic -angionoma -angionosis -angioparalysis -angioparalytic -angioparesis -angiopathy -angiophorous -angioplany -angioplasty -angioplerosis -angiopoietic -angiopressure -angiorrhagia -angiorrhaphy -angiorrhea -angiorrhexis -angiosarcoma -angiosclerosis -angiosclerotic -angioscope -angiosymphysis -angiosis -angiospasm -angiospastic -angiosperm -Angiospermae -angiospermal -angiospermatous -angiospermic -angiospermous -angiosperms -angiosporous -angiostegnosis -angiostenosis -angiosteosis -angiostomy -angiostomize -angiostrophy -angiotasis -angiotelectasia -angiotenosis -angiotensin -angiotensinase -angiothlipsis -angiotome -angiotomy -angiotonase -angiotonic -angiotonin -angiotribe -angiotripsy -angiotrophic -angiport -Angka -angkhak -ang-khak -Angkor -Angl -Angl. -anglaise -Angle -angleberry -angled -angledog -Angledozer -angled-toothed -anglehook -Angleinlet -anglemeter -angle-off -anglepod -anglepods -angler -anglers -Angles -Anglesey -anglesite -anglesmith -Angleton -angletouch -angletwitch -anglewing -anglewise -angleworm -angleworms -Anglia -angliae -Anglian -anglians -Anglic -Anglican -Anglicanism -anglicanisms -Anglicanize -Anglicanly -anglicans -Anglicanum -Anglice -Anglicisation -Anglicise -Anglicised -Anglicising -Anglicism -anglicisms -Anglicist -Anglicization -Anglicize -Anglicized -anglicizes -Anglicizing -Anglify -Anglification -Anglified -Anglifying -Anglim -anglimaniac -angling -anglings -Anglish -Anglist -Anglistics -Anglo -Anglo- -Anglo-abyssinian -Anglo-afghan -Anglo-african -Anglo-america -Anglo-American -Anglo-Americanism -Anglo-asian -Anglo-asiatic -Anglo-australian -Anglo-austrian -Anglo-belgian -Anglo-boer -Anglo-brazilian -Anglo-canadian -Anglo-Catholic -AngloCatholicism -Anglo-Catholicism -Anglo-chinese -Anglo-danish -Anglo-dutch -Anglo-dutchman -Anglo-ecclesiastical -Anglo-ecuadorian -Anglo-egyptian -Anglo-French -Anglogaea -Anglogaean -Anglo-Gallic -Anglo-german -Anglo-greek -Anglo-hibernian -angloid -Anglo-Indian -Anglo-Irish -Anglo-irishism -Anglo-israel -Anglo-israelism -Anglo-israelite -Anglo-italian -Anglo-japanese -Anglo-jewish -Anglo-judaic -Anglo-latin -Anglo-maltese -Angloman -Anglomane -Anglomania -Anglomaniac -Anglomaniacal -Anglo-manx -Anglo-mexican -Anglo-mohammedan -Anglo-Norman -Anglo-norwegian -Anglo-nubian -Anglo-persian -Anglophil -Anglophile -anglophiles -anglophily -Anglophilia -Anglophiliac -Anglophilic -anglophilism -Anglophobe -anglophobes -Anglophobia -Anglophobiac -Anglophobic -Anglophobist -Anglophone -Anglo-portuguese -Anglo-russian -Anglos -Anglo-Saxon -Anglo-saxondom -Anglo-saxonic -Anglo-saxonism -Anglo-scottish -Anglo-serbian -Anglo-soviet -Anglo-spanish -Anglo-swedish -Anglo-swiss -Anglo-teutonic -Anglo-turkish -Anglo-venetian -ango -angoise -Angola -angolan -angolans -angolar -Angolese -angor -Angora -angoras -Angostura -Angouleme -Angoumian -Angoumois -Angraecum -Angrbodha -angry -angry-eyed -angrier -angriest -angrily -angry-looking -angriness -Angrist -angrite -angst -angster -Angstrom -angstroms -angsts -anguid -Anguidae -Anguier -anguiform -Anguilla -Anguillaria -anguille -Anguillidae -anguilliform -anguilloid -Anguillula -anguillule -Anguillulidae -Anguimorpha -anguine -anguineal -anguineous -Anguinidae -anguiped -Anguis -anguish -anguished -anguishes -anguishful -anguishing -anguishous -anguishously -angula -angular -angulare -angularia -angularity -angularities -angularization -angularize -angularly -angularness -angular-toothed -angulate -angulated -angulately -angulateness -angulates -angulating -angulation -angulato- -angulatogibbous -angulatosinuous -angule -anguliferous -angulinerved -angulo- -Anguloa -angulodentate -angulometer -angulose -angulosity -anguloso- -angulosplenial -angulous -angulus -Angurboda -anguria -Angus -anguses -angust -angustate -angusti- -angustia -angusticlave -angustifoliate -angustifolious -angustirostrate -angustisellate -angustiseptal -angustiseptate -angustura -angwantibo -angwich -Angwin -Anh -anhaematopoiesis -anhaematosis -anhaemolytic -anhalamine -anhaline -anhalonidine -anhalonin -anhalonine -Anhalonium -anhalouidine -Anhalt -anhang -Anhanga -anharmonic -anhedonia -anhedonic -anhedral -anhedron -anhelation -anhele -anhelose -anhelous -anhematopoiesis -anhematosis -anhemitonic -anhemolytic -Anheuser -anhyd -anhydraemia -anhydraemic -anhydrate -anhydrated -anhydrating -anhydration -anhydremia -anhydremic -anhydric -anhydride -anhydrides -anhydridization -anhydridize -anhydrite -anhydrization -anhydrize -anhydro- -anhydroglocose -anhydromyelia -anhidrosis -anhydrosis -anhidrotic -anhydrotic -anhydrous -anhydrously -anhydroxime -anhima -Anhimae -Anhimidae -anhinga -anhingas -anhysteretic -anhistic -anhistous -anhungered -anhungry -Anhwei -ANI -Any -Ania -Anya -Anyah -Aniak -Aniakchak -Aniakudo -Anyang -Aniba -anybody -anybodyd -anybody'd -anybodies -Anica -anicca -Anice -Anicetus -Anychia -aniconic -aniconism -anicular -anicut -anidian -anidiomatic -anidiomatical -anidrosis -Aniela -Aniellidae -aniente -anientise -ANIF -anigh -anight -anights -anyhow -any-kyn -Anil -anilao -anilau -anile -anileness -anilic -anilid -anilide -anilidic -anilidoxime -aniliid -anilin -anilinctus -aniline -anilines -anilingus -anilinism -anilino -anilinophile -anilinophilous -anilins -anility -anilities -anilla -anilopyrin -anilopyrine -anils -anim -anim. -anima -animability -animable -animableness -animacule -animadversal -animadversion -animadversional -animadversions -animadversive -animadversiveness -animadvert -animadverted -animadverter -animadverting -animadverts -animal -animala -animalcula -animalculae -animalcular -animalcule -animalcules -animalculine -animalculism -animalculist -animalculous -animalculum -animalhood -Animalia -animalian -animalic -animalier -animalillio -animalisation -animalise -animalised -animalish -animalising -animalism -animalist -animalistic -animality -animalities -Animalivora -animalivore -animalivorous -animalization -animalize -animalized -animalizing -animally -animallike -animalness -animals -animal's -animal-sized -animando -animant -Animas -animastic -animastical -animate -animated -animatedly -animately -animateness -animater -animaters -animates -animating -animatingly -animation -animations -animatism -animatist -animatistic -animative -animato -animatograph -animator -animators -animator's -anime -animes -animetta -animi -Animikean -animikite -animine -animis -animism -animisms -animist -animistic -animists -animize -animized -animo -anymore -animose -animoseness -animosity -animosities -animoso -animotheism -animous -animus -animuses -anion -anyone -anionic -anionically -anionics -anions -anion's -anyplace -aniridia -Anis -anis- -anisado -anisal -anisalcohol -anisaldehyde -anisaldoxime -anisamide -anisandrous -anisanilide -anisanthous -anisate -anisated -anischuria -anise -aniseed -aniseeds -aniseikonia -aniseikonic -aniselike -aniseroot -anises -anisette -anisettes -anisic -anisidin -anisidine -anisidino -anisil -anisyl -anisilic -anisylidene -aniso- -anisobranchiate -anisocarpic -anisocarpous -anisocercal -anisochromatic -anisochromia -anisocycle -anisocytosis -anisocoria -anisocotyledonous -anisocotyly -anisocratic -anisodactyl -Anisodactyla -anisodactyle -Anisodactyli -anisodactylic -anisodactylous -anisodont -anisogamete -anisogametes -anisogametic -anisogamy -anisogamic -anisogamous -anisogeny -anisogenous -anisogynous -anisognathism -anisognathous -anisoiconia -anisoyl -anisoin -anisokonia -anisol -anisole -anisoles -anisoleucocytosis -Anisomeles -anisomelia -anisomelus -anisomeric -anisomerous -anisometric -anisometrope -anisometropia -anisometropic -anisomyarian -Anisomyodi -anisomyodian -anisomyodous -anisopetalous -anisophylly -anisophyllous -anisopia -anisopleural -anisopleurous -anisopod -Anisopoda -anisopodal -anisopodous -anisopogonous -Anisoptera -anisopteran -anisopterous -anisosepalous -anisospore -anisostaminous -anisostemonous -anisosthenic -anisostichous -Anisostichus -anisostomous -anisotonic -anisotropal -anisotrope -anisotropy -anisotropic -anisotropical -anisotropically -anisotropies -anisotropism -anisotropous -Anissa -Anystidae -anisum -anisuria -Anita -anither -anything -anythingarian -anythingarianism -anythings -anytime -anitinstitutionalism -anitos -Anitra -anitrogenous -Anius -Aniwa -anyway -anyways -Aniweta -anywhen -anywhence -anywhere -anywhereness -anywheres -anywhy -anywhither -anywise -anywither -Anjali -anjan -Anjanette -Anjela -Anjou -Ankara -ankaramite -ankaratrite -ankee -Ankeny -anker -ankerhold -ankerite -ankerites -ankh -ankhs -ankylenteron -ankyloblepharon -ankylocheilia -ankylodactylia -ankylodontia -ankyloglossia -ankylomele -ankylomerism -ankylophobia -ankylopodia -ankylopoietic -ankyloproctia -ankylorrhinia -ankylos -ankylosaur -Ankylosaurus -ankylose -ankylosed -ankyloses -ankylosing -ankylosis -ankylostoma -ankylostomiasis -ankylotia -ankylotic -ankylotome -ankylotomy -ankylurethria -Anking -ankyroid -ankle -anklebone -anklebones -ankled -ankle-deep -anklejack -ankle-jacked -ankles -ankle's -anklet -anklets -ankling -anklong -anklung -Ankney -Ankoli -Ankou -ankus -ankuses -ankush -ankusha -ankushes -ANL -anlace -anlaces -Anlage -anlagen -anlages -anlas -anlases -anlaut -anlaute -anlet -anlia -anmia -Anmoore -Ann -ann. -Anna -Annaba -Annabal -Annabel -Annabela -Annabell -Annabella -Annabelle -annabergite -Annada -Annadiana -Anna-Diana -Annadiane -Anna-Diane -annal -Annale -Annalee -Annalen -annaly -annalia -Annaliese -annaline -Annalise -annalism -annalist -annalistic -annalistically -annalists -annalize -annals -Annam -Annamaria -Anna-Maria -Annamarie -Annamese -Annamite -Annamitic -Annam-Muong -Annandale -Annapolis -Annapurna -Annarbor -annard -annary -annas -annat -annates -Annatol -annats -annatto -annattos -Annawan -Anne -anneal -annealed -annealer -annealers -annealing -anneals -Annecy -Annecorinne -Anne-Corinne -annect -annectant -annectent -annection -annelid -Annelida -annelidan -Annelides -annelidian -annelidous -annelids -Anneliese -Annelise -annelism -Annellata -anneloid -Annemanie -Annemarie -Anne-Marie -Annenski -Annensky -annerodite -annerre -Anneslia -annet -Annetta -Annette -annex -annexa -annexable -annexal -annexation -annexational -annexationism -annexationist -annexations -annexe -annexed -annexer -annexes -annexing -annexion -annexionist -annexitis -annexive -annexment -annexure -Annfwn -Anni -Anny -Annia -Annibale -Annice -annicut -annidalin -Annie -Anniellidae -annihil -annihilability -annihilable -annihilate -annihilated -annihilates -annihilating -annihilation -annihilationism -annihilationist -annihilationistic -annihilationistical -annihilations -annihilative -annihilator -annihilatory -annihilators -Anniken -Annis -Annissa -Annist -Anniston -annite -anniv -anniversalily -anniversary -anniversaries -anniversarily -anniversariness -anniversary's -anniverse -Annmaria -Annmarie -Ann-Marie -Annnora -anno -annodated -annoy -annoyance -annoyancer -annoyances -annoyance's -annoyed -annoyer -annoyers -annoyful -annoying -annoyingly -annoyingness -annoyment -annoyous -annoyously -annoys -annominate -annomination -Annona -Annonaceae -annonaceous -annonce -Annora -Annorah -annot -annotate -annotated -annotater -annotates -annotating -annotation -annotations -annotative -annotatively -annotativeness -annotator -annotatory -annotators -annotine -annotinous -annotto -announce -announceable -announced -announcement -announcements -announcement's -announcer -announcers -announces -announcing -annual -annualist -annualize -annualized -annually -annuals -annuary -annuation -annueler -annueller -annuent -annuisance -annuitant -annuitants -annuity -annuities -annul -annular -annulary -Annularia -annularity -annularly -Annulata -annulate -annulated -annulately -annulation -annulations -annule -annuler -annulet -annulets -annulettee -annuli -annulism -annullable -annullate -annullation -annulled -annuller -annulli -annulling -annulment -annulments -annulment's -annuloid -Annuloida -Annulosa -annulosan -annulose -annuls -annulus -annuluses -annum -annumerate -annunciable -annunciade -Annunciata -annunciate -annunciated -annunciates -annunciating -Annunciation -annunciations -annunciative -annunciator -annunciatory -annunciators -Annunziata -annus -Annville -Annwfn -Annwn -ano- -anoa -anoas -Anobiidae -anobing -anocarpous -anocathartic -anociassociation -anociation -anocithesia -anococcygeal -anodal -anodally -anode -anodendron -anodes -anode's -anodic -anodically -anodine -anodyne -anodynes -anodynia -anodynic -anodynous -anodization -anodize -anodized -anodizes -anodizing -Anodon -Anodonta -anodontia -anodos -anoegenetic -anoesia -anoesis -anoestrous -anoestrum -anoestrus -anoetic -anogenic -anogenital -Anogra -anoia -anoil -anoine -anoint -anointed -anointer -anointers -anointing -anointment -anointments -anoints -Anoka -anole -anoles -anoli -anolian -Anolympiad -Anolis -anolyte -anolytes -anomal -Anomala -anomaly -anomalies -anomaliflorous -anomaliped -anomalipod -anomaly's -anomalism -anomalist -anomalistic -anomalistical -anomalistically -anomalo- -anomalocephalus -anomaloflorous -Anomalogonatae -anomalogonatous -Anomalon -anomalonomy -Anomalopteryx -anomaloscope -anomalotrophy -anomalous -anomalously -anomalousness -anomalure -Anomaluridae -Anomalurus -Anomatheca -anomer -anomy -Anomia -Anomiacea -anomic -anomie -anomies -Anomiidae -anomite -anomo- -anomocarpous -anomodont -Anomodontia -Anomoean -Anomoeanism -anomoeomery -anomophyllous -anomorhomboid -anomorhomboidal -anomouran -anomphalous -Anomura -anomural -anomuran -anomurous -anon -anon. -anonaceous -anonad -anonang -anoncillo -anonychia -anonym -anonyma -anonyme -anonymity -anonymities -anonymous -anonymously -anonymousness -anonyms -anonymuncule -anonol -anoopsia -anoopsias -anoperineal -anophele -Anopheles -Anophelinae -anopheline -anophyte -anophoria -anophthalmia -anophthalmos -Anophthalmus -anopia -anopias -anopisthograph -anopisthographic -anopisthographically -Anopla -Anoplanthus -anoplocephalic -anoplonemertean -Anoplonemertini -anoplothere -Anoplotheriidae -anoplotherioid -Anoplotherium -anoplotheroid -Anoplura -anopluriform -anopsy -anopsia -anopsias -anopubic -Anora -anorak -anoraks -anorchi -anorchia -anorchism -anorchous -anorchus -anorectal -anorectic -anorectous -anoretic -anorexy -anorexia -anorexiant -anorexias -anorexic -anorexics -anorexies -anorexigenic -anorgana -anorganic -anorganism -anorganology -anormal -anormality -anorn -anorogenic -anorth -anorthic -anorthite -anorthite-basalt -anorthitic -anorthitite -anorthoclase -anorthography -anorthographic -anorthographical -anorthographically -anorthophyre -anorthopia -anorthoscope -anorthose -anorthosite -anoscope -anoscopy -Anosia -anosmatic -anosmia -anosmias -anosmic -anosognosia -anosphrasia -anosphresia -anospinal -anostosis -Anostraca -anoterite -Another -another-gates -anotherguess -another-guess -another-guise -anotherkins -another's -anotia -anotropia -anotta -anotto -anotus -Anouilh -anounou -anour -anoura -anoure -anourous -Anous -ANOVA -anovesical -anovulant -anovular -anovulatory -anoxaemia -anoxaemic -anoxemia -anoxemias -anoxemic -anoxia -anoxias -anoxybiosis -anoxybiotic -anoxic -anoxidative -anoxyscope -anp- -ANPA -anquera -anre -ans -ansa -ansae -Ansar -Ansarian -Ansarie -ansate -ansated -ansation -Anschauung -Anschluss -Anse -Anseis -Ansel -Ansela -Ansell -Anselm -Anselma -Anselme -Anselmi -Anselmian -Anselmo -Anser -anserated -Anseres -Anseriformes -anserin -Anserinae -anserine -anserines -Ansermet -anserous -Ansgarius -Anshan -Anshar -ANSI -Ansilma -Ansilme -Ansley -Anson -Ansonia -Ansonville -anspessade -Ansted -Anstice -anstoss -anstosse -Anstus -ansu -ansulate -answer -answerability -answerable -answerableness -answerably -answer-back -answered -answerer -answerers -answering -answeringly -answerless -answerlessly -answers -ant -ant- -an't -ant. -ANTA -Antabus -Antabuse -antacid -antacids -antacrid -antadiform -antae -Antaea -Antaean -Antaeus -antagony -antagonisable -antagonisation -antagonise -antagonised -antagonising -antagonism -antagonisms -antagonist -antagonistic -antagonistical -antagonistically -antagonists -antagonist's -antagonizable -antagonization -antagonize -antagonized -antagonizer -antagonizes -antagonizing -Antagoras -Antaimerina -Antaios -Antaiva -Antakya -Antakiya -Antal -antalgesic -antalgic -antalgics -antalgol -Antalya -antalkali -antalkalies -antalkaline -antalkalis -antambulacral -antanacathartic -antanaclasis -antanagoge -Antananarivo -Antanandro -antanemic -antapex -antapexes -antaphrodisiac -antaphroditic -antapices -antapocha -antapodosis -antapology -antapoplectic -Antar -Antara -antarala -antaranga -antarchy -antarchism -antarchist -antarchistic -antarchistical -Antarctalia -Antarctalian -Antarctic -Antarctica -antarctical -antarctically -Antarctogaea -Antarctogaean -Antares -antarthritic -antas -antasphyctic -antasthenic -antasthmatic -antatrophic -antbird -antdom -ante -ante- -anteact -ante-acted -anteal -anteambulate -anteambulation -ante-ambulo -anteater -ant-eater -anteaters -anteater's -Ante-babylonish -antebaptismal -antebath -antebellum -ante-bellum -Antebi -antebrachia -antebrachial -antebrachium -antebridal -antecabinet -antecaecal -antecardium -antecavern -antecedal -antecedaneous -antecedaneously -antecede -anteceded -antecedence -antecedency -antecedent -antecedental -antecedently -antecedents -antecedent's -antecedes -anteceding -antecell -antecessor -antechamber -antechambers -antechapel -ante-chapel -Antechinomys -antechoir -antechoirs -Ante-christian -ante-Christum -antechurch -anteclassical -antecloset -antecolic -antecommunion -anteconsonantal -antecornu -antecourt -antecoxal -antecubital -antecurvature -Ante-cuvierian -anted -antedate -antedated -antedates -antedating -antedawn -antediluvial -antediluvially -antediluvian -Antedon -antedonin -antedorsal -ante-ecclesiastical -anteed -ante-eternity -antefact -antefebrile -antefix -antefixa -antefixal -antefixes -anteflected -anteflexed -anteflexion -antefurca -antefurcae -antefurcal -antefuture -antegarden -Ante-gothic -antegrade -antehall -Ante-hieronymian -antehypophysis -antehistoric -antehuman -anteing -anteinitial -antejentacular -antejudiciary -antejuramentum -Ante-justinian -antelabium -antelation -antelegal -antelocation -antelope -antelopes -antelope's -antelopian -antelopine -antelucan -antelude -anteluminary -antemarginal -antemarital -antemask -antemedial -antemeridian -antemetallic -antemetic -antemillennial -antemingent -antemortal -antemortem -ante-mortem -Ante-mosaic -Ante-mosaical -antemundane -antemural -antenarial -antenatal -antenatalitial -antenati -antenatus -antenave -ante-Nicaean -Ante-nicene -antenna -antennae -antennal -antennary -Antennaria -antennariid -Antennariidae -Antennarius -antennas -antenna's -Antennata -antennate -antennifer -antenniferous -antenniform -antennula -antennular -antennulary -antennule -antenodal -antenoon -Antenor -Ante-norman -antenumber -antenuptial -anteoccupation -anteocular -anteopercle -anteoperculum -anteorbital -ante-orbital -Antep -antepagment -antepagmenta -antepagments -antepalatal -antepartum -ante-partum -antepaschal -antepaschel -antepast -antepasts -antepatriarchal -antepectoral -antepectus -antependia -antependium -antependiums -antepenuit -antepenult -antepenultima -antepenultimate -antepenults -antephialtic -antepileptic -antepyretic -antepirrhema -antepone -anteporch -anteport -anteportico -anteporticoes -anteporticos -anteposition -anteposthumous -anteprandial -antepredicament -antepredicamental -antepreterit -antepretonic -anteprohibition -anteprostate -anteprostatic -antequalm -antereformation -antereformational -anteresurrection -anterethic -anterevolutional -anterevolutionary -antergic -anteri -anteriad -anterin -anterioyancer -anterior -anteriority -anteriorly -anteriorness -anteriors -antero- -anteroclusion -anterodorsal -anteroexternal -anterofixation -anteroflexion -anterofrontal -anterograde -anteroinferior -anterointerior -anterointernal -anterolateral -anterolaterally -anteromedial -anteromedian -anteroom -ante-room -anterooms -anteroparietal -anteropygal -anteroposterior -anteroposteriorly -Anteros -anterospinal -anterosuperior -anteroventral -anteroventrally -Anterus -antes -antescript -Antesfort -antesignani -antesignanus -antespring -antestature -antesternal -antesternum -antesunrise -antesuperior -antetemple -ante-temple -antethem -antetype -antetypes -Anteva -antevenient -anteversion -antevert -anteverted -anteverting -anteverts -Ante-victorian -antevocalic -Antevorta -antewar -anth- -Anthas -anthdia -Anthe -Anthea -anthecology -anthecological -anthecologist -Antheia -Antheil -anthela -anthelae -anthelia -anthelices -anthelion -anthelions -anthelix -Anthelme -anthelminthic -anthelmintic -anthem -anthema -anthemas -anthemata -anthemed -anthemene -anthemy -anthemia -Anthemideae -antheming -anthemion -Anthemis -anthems -anthem's -anthemwise -anther -Antheraea -antheral -Anthericum -antherid -antheridia -antheridial -antheridiophore -antheridium -antherids -antheriferous -antheriform -antherine -antherless -antherogenous -antheroid -antherozoid -antherozoidal -antherozooid -antherozooidal -anthers -antheses -anthesis -Anthesteria -Anthesteriac -anthesterin -Anthesterion -anthesterol -Antheus -antheximeter -Anthia -Anthiathia -Anthicidae -Anthidium -anthill -Anthyllis -anthills -Anthinae -anthine -anthypnotic -anthypophora -anthypophoretic -antho- -anthobian -anthobiology -anthocarp -anthocarpous -anthocephalous -Anthoceros -Anthocerotaceae -Anthocerotales -anthocerote -anthochlor -anthochlorine -anthocyan -anthocyanidin -anthocyanin -anthoclinium -anthodia -anthodium -anthoecology -anthoecological -anthoecologist -anthogenesis -anthogenetic -anthogenous -anthography -anthoid -anthokyan -anthol -antholysis -antholite -Antholyza -anthology -anthological -anthologically -anthologies -anthologion -anthologise -anthologised -anthologising -anthologist -anthologists -anthologize -anthologized -anthologizer -anthologizes -anthologizing -anthomania -anthomaniac -Anthomedusae -anthomedusan -Anthomyia -anthomyiid -Anthomyiidae -Anthon -Anthony -Anthonin -Anthonomus -anthood -anthophagy -anthophagous -Anthophila -anthophile -anthophilian -anthophyllite -anthophyllitic -anthophilous -Anthophyta -anthophyte -anthophobia -Anthophora -anthophore -Anthophoridae -anthophorous -anthorine -anthos -anthosiderite -Anthospermum -anthotaxy -anthotaxis -anthotropic -anthotropism -anthoxanthin -Anthoxanthum -Anthozoa -anthozoan -anthozoic -anthozooid -anthozoon -anthra- -anthracaemia -anthracemia -anthracene -anthraceniferous -anthraces -anthrachrysone -anthracia -anthracic -anthraciferous -anthracyl -anthracin -anthracite -anthracites -anthracitic -anthracitiferous -anthracitious -anthracitism -anthracitization -anthracitous -anthracnose -anthracnosis -anthracocide -anthracoid -anthracolithic -anthracomancy -Anthracomarti -anthracomartian -Anthracomartus -anthracometer -anthracometric -anthraconecrosis -anthraconite -Anthracosaurus -anthracosilicosis -anthracosis -anthracothere -Anthracotheriidae -Anthracotherium -anthracotic -anthracoxen -anthradiol -anthradiquinone -anthraflavic -anthragallol -anthrahydroquinone -anthralin -anthramin -anthramine -anthranil -anthranyl -anthranilate -anthranilic -anthranoyl -anthranol -anthranone -anthraphenone -anthrapyridine -anthrapurpurin -anthraquinol -anthraquinone -anthraquinonyl -anthrarufin -anthrasilicosis -anthratetrol -anthrathiophene -anthratriol -anthrax -anthraxylon -anthraxolite -Anthrenus -anthribid -Anthribidae -anthryl -anthrylene -Anthriscus -anthrohopobiological -anthroic -anthrol -anthrone -anthrop -anthrop- -anthrop. -anthrophore -anthropic -anthropical -Anthropidae -anthropo- -anthropobiology -anthropobiologist -anthropocentric -anthropocentrically -anthropocentricity -anthropocentrism -anthropoclimatology -anthropoclimatologist -anthropocosmic -anthropodeoxycholic -Anthropodus -anthropogenesis -anthropogenetic -anthropogeny -anthropogenic -anthropogenist -anthropogenous -anthropogeographer -anthropogeography -anthropogeographic -anthropogeographical -anthropoglot -anthropogony -anthropography -anthropographic -anthropoid -anthropoidal -Anthropoidea -anthropoidean -anthropoids -anthropol -anthropol. -anthropolater -anthropolatry -anthropolatric -anthropolite -anthropolith -anthropolithic -anthropolitic -anthropology -anthropologic -anthropological -anthropologically -anthropologies -anthropologist -anthropologists -anthropologist's -anthropomancy -anthropomantic -anthropomantist -anthropometer -anthropometry -anthropometric -anthropometrical -anthropometrically -anthropometrist -anthropomophitism -anthropomorph -Anthropomorpha -anthropomorphic -anthropomorphical -anthropomorphically -Anthropomorphidae -anthropomorphisation -anthropomorphise -anthropomorphised -anthropomorphising -anthropomorphism -anthropomorphisms -anthropomorphist -anthropomorphite -anthropomorphitic -anthropomorphitical -anthropomorphitism -anthropomorphization -anthropomorphize -anthropomorphized -anthropomorphizing -anthropomorphology -anthropomorphological -anthropomorphologically -anthropomorphosis -anthropomorphotheist -anthropomorphous -anthropomorphously -anthroponym -anthroponomy -anthroponomical -anthroponomics -anthroponomist -anthropopathy -anthropopathia -anthropopathic -anthropopathically -anthropopathism -anthropopathite -anthropophagi -anthropophagy -anthropophagic -anthropophagical -anthropophaginian -anthropophagism -anthropophagist -anthropophagistic -anthropophagit -anthropophagite -anthropophagize -anthropophagous -anthropophagously -anthropophagus -anthropophilous -anthropophysiography -anthropophysite -anthropophobia -anthropophuism -anthropophuistic -Anthropopithecus -anthropopsychic -anthropopsychism -Anthropos -anthroposcopy -anthroposociology -anthroposociologist -anthroposomatology -anthroposophy -anthroposophic -anthroposophical -anthroposophist -anthropoteleoclogy -anthropoteleological -anthropotheism -anthropotheist -anthropotheistic -anthropotomy -anthropotomical -anthropotomist -anthropotoxin -Anthropozoic -anthropurgic -anthroropolith -anthroxan -anthroxanic -anththeridia -Anthurium -Anthus -Anti -anti- -Antia -antiabolitionist -antiabortion -antiabrasion -antiabrin -antiabsolutist -antiacademic -antiacid -anti-acid -antiadiaphorist -antiaditis -antiadministration -antiae -antiaesthetic -antiager -antiagglutinant -antiagglutinating -antiagglutination -antiagglutinative -antiagglutinin -antiaggression -antiaggressionist -antiaggressive -antiaggressively -antiaggressiveness -antiaircraft -anti-aircraft -antialbumid -antialbumin -antialbumose -antialcoholic -antialcoholism -antialcoholist -antialdoxime -antialexin -antialien -Anti-ally -Anti-allied -antiamboceptor -Anti-american -Anti-americanism -antiamylase -antiamusement -antianaphylactogen -antianaphylaxis -antianarchic -antianarchist -Anti-anglican -antiangular -antiannexation -antiannexationist -antianopheline -antianthrax -antianthropocentric -antianthropomorphism -antiantibody -antiantidote -antiantienzyme -antiantitoxin -antianxiety -antiapartheid -antiaphrodisiac -antiaphthic -antiapoplectic -antiapostle -antiaquatic -antiar -Anti-arab -Antiarcha -Antiarchi -Anti-arian -antiarin -antiarins -Antiaris -antiaristocracy -antiaristocracies -antiaristocrat -antiaristocratic -antiaristocratical -antiaristocratically -Anti-aristotelian -anti-Aristotelianism -Anti-armenian -Anti-arminian -Anti-arminianism -antiarrhythmic -antiars -antiarthritic -antiascetic -antiasthmatic -antiastronomical -Anti-athanasian -antiatheism -antiatheist -antiatheistic -antiatheistical -antiatheistically -Anti-athenian -antiatom -antiatoms -antiatonement -antiattrition -anti-attrition -anti-Australian -anti-Austria -Anti-austrian -antiauthoritarian -antiauthoritarianism -antiautolysin -antiauxin -Anti-babylonianism -antibacchic -antibacchii -antibacchius -antibacterial -antibacteriolytic -antiballistic -antiballooner -antibalm -antibank -antibaryon -Anti-bartholomew -antibasilican -antibenzaldoxime -antiberiberin -Antibes -antibias -anti-Bible -Anti-biblic -Anti-biblical -anti-Biblically -antibibliolatry -antibigotry -antibilious -antibiont -antibiosis -antibiotic -antibiotically -antibiotics -Anti-birmingham -antibishop -antiblack -antiblackism -antiblastic -antiblennorrhagic -antiblock -antiblue -antibody -antibodies -Anti-bohemian -antiboycott -Anti-bolshevik -anti-Bolshevism -Anti-bolshevist -anti-Bolshevistic -Anti-bonapartist -antiboss -antibourgeois -antiboxing -antibrachial -antibreakage -antibridal -Anti-british -Anti-britishism -antibromic -antibubonic -antibug -antibureaucratic -Antiburgher -antiburglar -antiburglary -antibusiness -antibusing -antic -antica -anticachectic -Anti-caesar -antical -anticalcimine -anticalculous -antically -anticalligraphic -Anti-calvinism -Anti-calvinist -Anti-calvinistic -anti-Calvinistical -Anti-calvinistically -anticamera -anticancer -anticancerous -anticapital -anticapitalism -anticapitalist -anticapitalistic -anticapitalistically -anticapitalists -anticar -anticardiac -anticardium -anticarious -anticarnivorous -anticaste -anticatalase -anticatalyst -anticatalytic -anticatalytically -anticatalyzer -anticatarrhal -Anti-cathedralist -anticathexis -anticathode -anticatholic -Anti-catholic -anti-Catholicism -anticausotic -anticaustic -anticensorial -anticensorious -anticensoriously -anticensoriousness -anticensorship -anticentralism -anticentralist -anticentralization -anticephalalgic -anticeremonial -anticeremonialism -anticeremonialist -anticeremonially -anticeremonious -anticeremoniously -anticeremoniousness -antichamber -antichance -anticheater -antichymosin -antichlor -antichlorine -antichloristic -antichlorotic -anticholagogue -anticholinergic -anticholinesterase -antichoromanic -antichorus -antichreses -antichresis -antichretic -Antichrist -antichristian -Anti-christian -antichristianism -Anti-christianism -antichristianity -Anti-christianity -Anti-christianize -antichristianly -Anti-christianly -antichrists -antichrome -antichronical -antichronically -antichronism -antichthon -antichthones -antichurch -antichurchian -anticyclic -anticyclical -anticyclically -anticyclogenesis -anticyclolysis -anticyclone -anticyclones -anticyclonic -anticyclonically -anticigarette -anticynic -anticynical -anticynically -anticynicism -anticipant -anticipatable -anticipate -anticipated -anticipates -anticipating -anticipatingly -anticipation -anticipations -anticipative -anticipatively -anticipator -anticipatory -anticipatorily -anticipators -anticity -anticytolysin -anticytotoxin -anticivic -anticivil -anticivilian -anticivism -anticize -antick -anticked -anticker -anticking -anticks -antickt -anticlactic -anticlassical -anticlassicalism -anticlassicalist -anticlassically -anticlassicalness -anticlassicism -anticlassicist -anticlastic -Anticlea -anticlergy -anticlerical -anticlericalism -anticlericalist -anticly -anticlimactic -anticlimactical -anticlimactically -anticlimax -anticlimaxes -anticlinal -anticline -anticlines -anticlinoria -anticlinorium -anticlnoria -anticlockwise -anticlogging -anticnemion -anticness -anticoagulan -anticoagulant -anticoagulants -anticoagulate -anticoagulating -anticoagulation -anticoagulative -anticoagulator -anticoagulin -anticodon -anticogitative -anticoincidence -anticold -anticolic -anticollision -anticolonial -anticombination -anticomet -anticomment -anticommercial -anticommercialism -anticommercialist -anticommercialistic -anticommerciality -anticommercially -anticommercialness -anticommunism -anticommunist -anticommunistic -anticommunistical -anticommunistically -anticommunists -anticommutative -anticompetitive -anticomplement -anticomplementary -anticomplex -anticonceptionist -anticonductor -anticonfederationism -anticonfederationist -anticonfederative -anticonformist -anticonformity -anticonformities -anticonscience -anticonscription -anticonscriptive -anticonservation -anticonservationist -anticonservatism -anticonservative -anticonservatively -anticonservativeness -anticonstitution -anticonstitutional -anticonstitutionalism -anticonstitutionalist -anticonstitutionally -anticonsumer -anticontagion -anticontagionist -anticontagious -anticontagiously -anticontagiousness -anticonvellent -anticonvention -anticonventional -anticonventionalism -anticonventionalist -anticonventionally -anticonvulsant -anticonvulsive -anticor -anticorn -anticorona -anticorrosion -anticorrosive -anticorrosively -anticorrosiveness -anticorrosives -anticorruption -anticorset -anticosine -anticosmetic -anticosmetics -Anticosti -anticouncil -anticourt -anticourtier -anticous -anticovenanter -anticovenanting -anticreation -anticreational -anticreationism -anticreationist -anticreative -anticreatively -anticreativeness -anticreativity -anticreator -anticreep -anticreeper -anticreeping -anticrepuscular -anticrepuscule -anticrime -anticryptic -anticryptically -anticrisis -anticritic -anticritical -anticritically -anticriticalness -anticritique -anticrochet -anticrotalic -anticruelty -antics -antic's -anticularia -anticult -anticultural -anticum -anticus -antidactyl -antidancing -antidandruff -anti-Darwin -Anti-darwinian -Anti-darwinism -anti-Darwinist -antidecalogue -antideflation -antidemocracy -antidemocracies -antidemocrat -antidemocratic -antidemocratical -antidemocratically -antidemoniac -antidepressant -anti-depressant -antidepressants -antidepressive -antiderivative -antidetonant -antidetonating -antidiabetic -antidiastase -Antidicomarian -Antidicomarianite -antidictionary -antidiffuser -antidynamic -antidynasty -antidynastic -antidynastical -antidynastically -antidinic -antidiphtheria -antidiphtheric -antidiphtherin -antidiphtheritic -antidisciplinarian -antidyscratic -antidiscrimination -antidysenteric -antidisestablishmentarian -antidisestablishmentarianism -antidysuric -antidiuretic -antidivine -antidivorce -Antido -Anti-docetae -antidogmatic -antidogmatical -antidogmatically -antidogmatism -antidogmatist -antidomestic -antidomestically -antidominican -antidora -Antidorcas -antidoron -antidotal -antidotally -antidotary -antidote -antidoted -antidotes -antidote's -antidotical -antidotically -antidoting -antidotism -antidraft -antidrag -Anti-dreyfusard -antidromal -antidromy -antidromic -antidromically -antidromous -antidrug -antiduke -antidumping -antieavesdropping -antiecclesiastic -antiecclesiastical -antiecclesiastically -antiecclesiasticism -antiedemic -antieducation -antieducational -antieducationalist -antieducationally -antieducationist -antiegoism -antiegoist -antiegoistic -antiegoistical -antiegoistically -antiegotism -antiegotist -antiegotistic -antiegotistical -antiegotistically -antieyestrain -antiejaculation -antielectron -antielectrons -antiemetic -anti-emetic -antiemetics -antiemperor -antiempiric -antiempirical -antiempirically -antiempiricism -antiempiricist -antiendotoxin -antiendowment -antienergistic -Anti-english -antient -Anti-entente -antienthusiasm -antienthusiast -antienthusiastic -antienthusiastically -antienvironmentalism -antienvironmentalist -antienvironmentalists -antienzymatic -antienzyme -antienzymic -antiepicenter -antiepileptic -antiepiscopal -antiepiscopist -antiepithelial -antierysipelas -antierosion -antierosive -antiestablishment -Antietam -anti-ethmc -antiethnic -antieugenic -anti-Europe -Anti-european -anti-Europeanism -antievangelical -antievolution -antievolutional -antievolutionally -antievolutionary -antievolutionist -antievolutionistic -antiexpansion -antiexpansionism -antiexpansionist -antiexporting -antiexpressionism -antiexpressionist -antiexpressionistic -antiexpressive -antiexpressively -antiexpressiveness -antiextreme -antiface -antifaction -antifame -antifanatic -antifascism -Anti-fascism -antifascist -Anti-fascist -Anti-fascisti -antifascists -antifat -antifatigue -antifebrile -antifebrin -antifederal -Antifederalism -Antifederalist -anti-federalist -antifelon -antifelony -antifemale -antifeminine -antifeminism -antifeminist -antifeministic -antiferment -antifermentative -antiferroelectric -antiferromagnet -antiferromagnetic -antiferromagnetism -antifertility -antifertilizer -antifeudal -antifeudalism -antifeudalist -antifeudalistic -antifeudalization -antifibrinolysin -antifibrinolysis -antifideism -antifire -antiflash -antiflattering -antiflatulent -antiflux -antifoam -antifoaming -antifoggant -antifogmatic -antiforeign -antiforeigner -antiforeignism -antiformant -antiformin -antifouler -antifouling -Anti-fourierist -antifowl -anti-France -antifraud -antifreeze -antifreezes -antifreezing -Anti-french -anti-Freud -Anti-freudian -anti-Freudianism -antifriction -antifrictional -antifrost -antifundamentalism -antifundamentalist -antifungal -antifungin -antifungus -antigay -antigalactagogue -antigalactic -anti-gallic -Anti-gallican -anti-gallicanism -antigambling -antiganting -antigen -antigene -antigenes -antigenic -antigenically -antigenicity -antigens -antigen's -Anti-german -anti-Germanic -Anti-germanism -anti-Germanization -antighostism -antigigmanic -antigyrous -antiglare -antiglyoxalase -antiglobulin -antignostic -Anti-gnostic -antignostical -Antigo -antigod -anti-god -Antigone -antigonococcic -Antigonon -antigonorrheal -antigonorrheic -Antigonus -antigorite -Anti-gothicist -antigovernment -antigovernmental -antigovernmentally -antigraft -antigrammatical -antigrammatically -antigrammaticalness -antigraph -antigraphy -antigravitate -antigravitation -antigravitational -antigravitationally -antigravity -anti-Greece -anti-Greek -antigropelos -antigrowth -Antigua -Antiguan -antiguerilla -antiguggler -anti-guggler -antigun -antihalation -Anti-hanoverian -antiharmonist -antihectic -antihelices -antihelix -antihelixes -antihelminthic -antihemagglutinin -antihemisphere -antihemoglobin -antihemolysin -antihemolytic -antihemophilic -antihemorrhagic -antihemorrheidal -antihero -anti-hero -antiheroes -antiheroic -anti-heroic -antiheroism -antiheterolysin -antihydrophobic -antihydropic -antihydropin -antihidrotic -antihierarchal -antihierarchy -antihierarchic -antihierarchical -antihierarchically -antihierarchies -antihierarchism -antihierarchist -antihygienic -antihygienically -antihijack -antihylist -antihypertensive -antihypertensives -antihypnotic -antihypnotically -antihypochondriac -antihypophora -antihistamine -antihistamines -antihistaminic -antihysteric -antihistorical -anti-hog-cholera -antiholiday -antihomosexual -antihormone -antihuff -antihum -antihuman -antihumanism -antihumanist -antihumanistic -antihumanity -antihumbuggist -antihunting -Anti-ibsenite -anti-icer -anti-icteric -anti-idealism -anti-idealist -anti-idealistic -anti-idealistically -anti-idolatrous -anti-immigration -anti-immigrationist -anti-immune -anti-imperialism -anti-imperialist -anti-imperialistic -anti-incrustator -anti-indemnity -anti-induction -anti-inductive -anti-inductively -anti-inductiveness -anti-infallibilist -anti-infantal -antiinflammatory -antiinflammatories -anti-innovationist -antiinstitutionalist -antiinstitutionalists -antiinsurrectionally -antiinsurrectionists -anti-intellectual -anti-intellectualism -anti-intellectualist -anti-intellectuality -anti-intermediary -anti-Irish -Anti-irishism -anti-isolation -anti-isolationism -anti-isolationist -anti-isolysin -Anti-italian -anti-Italianism -anti-jacobin -anti-jacobinism -antijam -antijamming -Anti-jansenist -Anti-japanese -Anti-japanism -Anti-jesuit -anti-Jesuitic -anti-Jesuitical -anti-Jesuitically -anti-Jesuitism -anti-Jesuitry -Anti-jewish -Anti-judaic -Anti-judaism -anti-Judaist -anti-Judaistic -Antikamnia -antikathode -antikenotoxin -antiketogen -antiketogenesis -antiketogenic -antikinase -antiking -antikings -Antikythera -Anti-klan -Anti-klanism -antiknock -antiknocks -antilabor -antilaborist -antilacrosse -antilacrosser -antilactase -anti-laissez-faire -Anti-lamarckian -antilapsarian -antilapse -Anti-latin -anti-Latinism -Anti-laudism -antileague -anti-leaguer -antileak -Anti-Lebanon -anti-lecomption -anti-lecomptom -antileft -antilegalist -antilegomena -antilemic -antilens -antilepsis -antileptic -antilepton -antilethargic -antileukemic -antileveling -antilevelling -Antilia -antiliberal -Anti-liberal -antiliberalism -antiliberalist -antiliberalistic -antiliberally -antiliberalness -antiliberals -antilibration -antilife -antilift -antilynching -antilipase -antilipoid -antiliquor -antilysin -antilysis -antilyssic -antilithic -antilytic -antilitter -antilittering -antiliturgy -antiliturgic -antiliturgical -antiliturgically -antiliturgist -Antillean -Antilles -antilobium -Antilocapra -Antilocapridae -Antilochus -antiloemic -antilog -antilogarithm -antilogarithmic -antilogarithms -antilogy -antilogic -antilogical -antilogies -antilogism -antilogistic -antilogistically -antilogous -antilogs -antiloimic -Antilope -Antilopinae -antilopine -antiloquy -antilottery -antiluetic -antiluetin -antimacassar -antimacassars -Anti-macedonian -Anti-macedonianism -antimachination -antimachine -antimachinery -Antimachus -antimagistratical -antimagnetic -antimalaria -antimalarial -antimale -antimallein -Anti-malthusian -anti-Malthusianism -antiman -antimanagement -antimaniac -antimaniacal -anti-maniacal -Antimarian -antimark -antimartyr -antimask -antimasker -antimasks -Antimason -Anti-Mason -Antimasonic -Anti-Masonic -Antimasonry -Anti-Masonry -antimasque -antimasquer -antimasquerade -antimaterialism -antimaterialist -antimaterialistic -antimaterialistically -antimatrimonial -antimatrimonialist -antimatter -antimechanism -antimechanist -antimechanistic -antimechanistically -antimechanization -antimediaeval -antimediaevalism -antimediaevalist -antimediaevally -antimedical -antimedically -antimedication -antimedicative -antimedicine -antimedieval -antimedievalism -antimedievalist -antimedievally -antimelancholic -antimellin -antimeningococcic -antimensia -antimension -antimensium -antimephitic -antimere -antimeres -antimerger -antimerging -antimeric -Antimerina -antimerism -antimeristem -antimesia -antimeson -Anti-messiah -antimetabole -antimetabolite -antimetathesis -antimetathetic -antimeter -antimethod -antimethodic -antimethodical -antimethodically -antimethodicalness -antimetrical -antimetropia -antimetropic -Anti-mexican -antimiasmatic -antimycotic -antimicrobial -antimicrobic -antimilitary -antimilitarism -antimilitarist -antimilitaristic -antimilitaristically -antiministerial -antiministerialist -antiministerially -antiminsia -antiminsion -antimiscegenation -antimissile -antimission -antimissionary -antimissioner -antimystic -antimystical -antimystically -antimysticalness -antimysticism -antimythic -antimythical -antimitotic -antimixing -antimnemonic -antimodel -antimodern -antimodernism -antimodernist -antimodernistic -antimodernization -antimodernly -antimodernness -Anti-mohammedan -antimonarch -antimonarchal -antimonarchally -antimonarchy -antimonarchial -antimonarchic -antimonarchical -antimonarchically -antimonarchicalness -antimonarchism -antimonarchist -antimonarchistic -antimonarchists -antimonate -Anti-mongolian -antimony -antimonial -antimoniate -antimoniated -antimonic -antimonid -antimonide -antimonies -antimoniferous -anti-mony-yellow -antimonyl -antimonioso- -antimonious -antimonite -antimonium -antimoniuret -antimoniureted -antimoniuretted -antimonopoly -antimonopolism -antimonopolist -antimonopolistic -antimonopolization -antimonous -antimonsoon -antimoral -antimoralism -antimoralist -antimoralistic -antimorality -Anti-mosaical -antimosquito -antimusical -antimusically -antimusicalness -Antin -antinarcotic -antinarcotics -antinarrative -antinational -antinationalism -antinationalist -Anti-nationalist -antinationalistic -antinationalistically -antinationalists -antinationalization -antinationally -antinatural -antinaturalism -antinaturalist -antinaturalistic -antinaturally -antinaturalness -anti-nebraska -antinegro -anti-Negro -anti-Negroes -antinegroism -anti-Negroism -antineologian -antineoplastic -antinephritic -antinepotic -antineuralgic -antineuritic -antineurotoxin -antineutral -antineutralism -antineutrality -antineutrally -antineutrino -antineutrinos -antineutron -antineutrons -anting -anting-anting -antings -antinial -anti-nicaean -antinicotine -antinihilism -antinihilist -Anti-nihilist -antinihilistic -antinion -Anti-noahite -antinodal -antinode -antinodes -antinoise -antinome -antinomy -antinomian -antinomianism -antinomians -antinomic -antinomical -antinomies -antinomist -antinoness -Anti-nordic -antinormal -antinormality -antinormalness -Antinos -antinosarian -Antinous -antinovel -anti-novel -antinovelist -anti-novelist -antinovels -antinucleon -antinucleons -antinuke -antiobesity -Antioch -Antiochene -Antiochian -Antiochianism -Antiochus -antiodont -antiodontalgic -anti-odontalgic -Antiope -antiopelmous -anti-open-shop -antiophthalmic -antiopium -antiopiumist -antiopiumite -antioptimism -antioptimist -antioptimistic -antioptimistical -antioptimistically -antioptionist -antiorgastic -anti-orgastic -Anti-oriental -anti-Orientalism -anti-Orientalist -antiorthodox -antiorthodoxy -antiorthodoxly -anti-over -antioxidant -antioxidants -antioxidase -antioxidizer -antioxidizing -antioxygen -antioxygenating -antioxygenation -antioxygenator -antioxygenic -antiozonant -antipacifism -antipacifist -antipacifistic -antipacifists -antipapacy -antipapal -antipapalist -antipapism -antipapist -antipapistic -antipapistical -antiparabema -antiparabemata -antiparagraphe -antiparagraphic -antiparalytic -antiparalytical -antiparallel -antiparallelogram -antiparasitic -antiparasitical -antiparasitically -antiparastatitis -antiparliament -antiparliamental -antiparliamentary -antiparliamentarian -antiparliamentarians -antiparliamentarist -antiparliamenteer -antipart -antiparticle -antiparticles -Antipas -Antipasch -Antipascha -antipass -antipasti -antipastic -antipasto -antipastos -Antipater -Antipatharia -antipatharian -antipathetic -antipathetical -antipathetically -antipatheticalness -antipathy -antipathic -Antipathida -antipathies -antipathist -antipathize -antipathogen -antipathogene -antipathogenic -antipatriarch -antipatriarchal -antipatriarchally -antipatriarchy -antipatriot -antipatriotic -antipatriotically -antipatriotism -Anti-paul -Anti-pauline -antipedal -Antipedobaptism -Antipedobaptist -antipeduncular -Anti-pelagian -antipellagric -antipendium -antipepsin -antipeptone -antiperiodic -antiperistalsis -antiperistaltic -antiperistasis -antiperistatic -antiperistatical -antiperistatically -antipersonnel -antiperspirant -antiperspirants -antiperthite -antipestilence -antipestilent -antipestilential -antipestilently -antipetalous -antipewism -antiphagocytic -antipharisaic -antipharmic -Antiphas -antiphase -Antiphates -Anti-philippizing -antiphylloxeric -antiphilosophy -antiphilosophic -antiphilosophical -antiphilosophically -antiphilosophies -antiphilosophism -antiphysic -antiphysical -antiphysically -antiphysicalness -antiphysician -antiphlogistian -antiphlogistic -antiphlogistin -antiphon -antiphona -antiphonal -antiphonally -antiphonary -antiphonaries -antiphoner -antiphonetic -antiphony -antiphonic -antiphonical -antiphonically -antiphonies -antiphonon -antiphons -antiphrases -antiphrasis -antiphrastic -antiphrastical -antiphrastically -antiphthisic -antiphthisical -Antiphus -antipyic -antipyics -antipill -antipyonin -antipyresis -antipyretic -antipyretics -antipyryl -antipyrin -Antipyrine -antipyrotic -antiplague -antiplanet -antiplastic -antiplatelet -anti-Plato -Anti-platonic -anti-Platonically -anti-Platonism -anti-Platonist -antipleion -antiplenist -antiplethoric -antipleuritic -antiplurality -antipneumococcic -antipodagric -antipodagron -antipodal -antipode -antipodean -antipodeans -Antipodes -antipode's -antipodic -antipodism -antipodist -Antipoenus -antipoetic -antipoetical -antipoetically -antipoints -antipolar -antipole -antipolemist -antipoles -antipolice -antipolygamy -antipolyneuritic -Anti-polish -antipolitical -antipolitically -antipolitics -antipollution -antipolo -antipool -antipooling -antipope -antipopery -antipopes -antipopular -antipopularization -antipopulationist -antipopulism -anti-Populist -antipornography -antipornographic -antiportable -antiposition -antipot -antipoverty -antipragmatic -antipragmatical -antipragmatically -antipragmaticism -antipragmatism -antipragmatist -antiprecipitin -antipredeterminant -anti-pre-existentiary -antiprelate -antiprelatic -antiprelatism -antiprelatist -antipreparedness -antiprestidigitation -antipriest -antipriestcraft -antipriesthood -antiprime -antiprimer -antipriming -antiprinciple -antiprism -antiproductionist -antiproductive -antiproductively -antiproductiveness -antiproductivity -antiprofiteering -antiprogressive -antiprohibition -antiprohibitionist -antiprojectivity -antiprophet -antiprostate -antiprostatic -antiprostitution -antiprotease -antiproteolysis -Anti-protestant -anti-Protestantism -antiproton -antiprotons -antiprotozoal -antiprudential -antipruritic -antipsalmist -antipsychiatry -antipsychotic -antipsoric -antiptosis -antipudic -antipuritan -anti-Puritan -anti-Puritanism -Antipus -antiputrefaction -antiputrefactive -antiputrescent -antiputrid -antiq -antiq. -antiqua -antiquary -antiquarian -antiquarianism -antiquarianize -antiquarianly -antiquarians -antiquarian's -antiquaries -antiquarism -antiquarium -antiquartan -antiquate -antiquated -antiquatedness -antiquates -antiquating -antiquation -antique -antiqued -antiquely -antiqueness -antiquer -antiquers -antiques -antique's -antiquing -antiquist -antiquitarian -antiquity -antiquities -antiquum -antirabic -antirabies -antiracemate -antiracer -antirachitic -antirachitically -antiracial -antiracially -antiracing -antiracism -antiracketeering -antiradiant -antiradiating -antiradiation -antiradical -antiradicalism -antiradically -antiradicals -antirailwayist -antirape -antirational -antirationalism -antirationalist -antirationalistic -antirationality -antirationally -antirattler -antireacting -antireaction -antireactionary -antireactionaries -antireactive -antirealism -antirealist -antirealistic -antirealistically -antireality -antirebating -antirecession -antirecruiting -antired -antiredeposition -antireducer -antireducing -antireduction -antireductive -antireflexive -antireform -antireformer -antireforming -antireformist -antireligion -antireligionist -antireligiosity -antireligious -antireligiously -Antiremonstrant -antirennet -antirennin -antirent -antirenter -antirentism -antirepublican -Anti-republican -antirepublicanism -antireservationist -antiresonance -antiresonator -antirestoration -antireticular -antirevisionist -antirevolution -antirevolutionary -antirevolutionaries -antirevolutionist -antirheumatic -antiricin -antirickets -antiriot -antiritual -antiritualism -antiritualist -antiritualistic -antirobbery -antirobin -antiroyal -antiroyalism -antiroyalist -antiroll -Anti-roman -antiromance -Anti-romanist -antiromantic -antiromanticism -antiromanticist -Antirrhinum -antirumor -antirun -Anti-ruskinian -anti-Russia -Anti-russian -antirust -antirusts -antis -antisabbatarian -Anti-sabbatarian -Anti-sabian -antisacerdotal -antisacerdotalist -antisag -antisaloon -antisalooner -Antisana -antisavage -Anti-saxonism -antiscabious -antiscale -anti-Scandinavia -antisceptic -antisceptical -antiscepticism -antischolastic -antischolastically -antischolasticism -antischool -antiscia -antiscians -antiscience -antiscientific -antiscientifically -antiscii -antiscion -antiscolic -antiscorbutic -antiscorbutical -antiscriptural -Anti-scriptural -anti-Scripture -antiscripturism -Anti-scripturism -Anti-scripturist -antiscrofulous -antisegregation -antiseismic -antiselene -antisemite -Anti-semite -antisemitic -Anti-semitic -Anti-semitically -antisemitism -Anti-semitism -antisensitivity -antisensitizer -antisensitizing -antisensuality -antisensuous -antisensuously -antisensuousness -antisepalous -antisepsin -antisepsis -antiseptic -antiseptical -antiseptically -antisepticise -antisepticised -antisepticising -antisepticism -antisepticist -antisepticize -antisepticized -antisepticizing -antiseptics -antiseption -antiseptize -antisera -Anti-serb -antiserum -antiserums -antiserumsera -antisex -antisexist -antisexual -Anti-shelleyan -Anti-shemite -Anti-shemitic -Anti-shemitism -antiship -antishipping -antishoplifting -Antisi -antisialagogue -antisialic -antisiccative -antisideric -antisilverite -antisymmetry -antisymmetric -antisymmetrical -antisimoniacal -antisyndicalism -antisyndicalist -antisyndication -antisine -antisynod -antisyphilitic -antisyphillis -antisiphon -antisiphonal -antiskeptic -antiskeptical -antiskepticism -antiskid -antiskidding -Anti-slav -antislavery -antislaveryism -anti-Slavic -antislickens -antislip -Anti-slovene -antismog -antismoking -antismuggling -antismut -antisnapper -antisnob -antisocial -antisocialist -antisocialistic -antisocialistically -antisociality -antisocially -Anti-socinian -anti-Socrates -anti-Socratic -antisolar -antisophism -antisophist -antisophistic -antisophistication -antisophistry -antisoporific -Anti-soviet -antispace -antispadix -anti-Spain -Anti-spanish -antispasis -antispasmodic -antispasmodics -antispast -antispastic -antispectroscopic -antispeculation -antispending -antispermotoxin -antispiritual -antispiritualism -antispiritualist -antispiritualistic -antispiritually -antispirochetic -antisplasher -antisplenetic -antisplitting -antispreader -antispreading -antisquama -antisquatting -antistadholder -antistadholderian -antistalling -antistaphylococcic -antistat -antistate -antistater -antistatic -antistatism -antistatist -antisteapsin -antisterility -antistes -Antisthenes -antistimulant -antistimulation -antistock -antistreptococcal -antistreptococcic -antistreptococcin -antistreptococcus -antistrike -antistriker -antistrophal -antistrophe -antistrophic -antistrophically -antistrophize -antistrophon -antistrumatic -antistrumous -antistudent -antisubmarine -antisubstance -antisubversion -antisubversive -antisudoral -antisudorific -antisuffrage -antisuffragist -antisuicide -antisun -antisupernatural -antisupernaturalism -antisupernaturalist -antisupernaturalistic -antisurplician -anti-Sweden -anti-Swedish -antitabetic -antitabloid -antitangent -antitank -antitarnish -antitarnishing -antitartaric -antitax -antitaxation -antitechnology -antitechnological -antiteetotalism -antitegula -antitemperance -antiterrorism -antiterrorist -antitetanic -antitetanolysin -Anti-teuton -Anti-teutonic -antithalian -antitheft -antitheism -antitheist -antitheistic -antitheistical -antitheistically -antithenar -antitheology -antitheologian -antitheological -antitheologizing -antithermic -antithermin -antitheses -antithesis -antithesism -antithesize -antithet -antithetic -antithetical -antithetically -antithetics -antithyroid -antithrombic -antithrombin -antitintinnabularian -antitypal -antitype -antitypes -antityphoid -antitypy -antitypic -antitypical -antitypically -antitypous -antityrosinase -antitobacco -antitobacconal -antitobacconist -antitonic -antitorpedo -antitotalitarian -antitoxic -antitoxin -antitoxine -antitoxins -antitoxin's -antitrade -anti-trade -antitrades -antitradition -antitraditional -antitraditionalist -antitraditionally -antitragal -antitragi -antitragic -antitragicus -antitragus -Anti-tribonian -antitrinitarian -Anti-trinitarian -anti-Trinitarianism -antitrypsin -antitryptic -antitrismus -antitrochanter -antitropal -antitrope -antitropy -antitropic -antitropical -antitropous -antitrust -antitruster -antitubercular -antituberculin -antituberculosis -antituberculotic -antituberculous -antitumor -antitumoral -Anti-turkish -antiturnpikeism -antitussive -antitwilight -antiuating -antiulcer -antiunemployment -antiunion -antiunionist -Anti-unitarian -antiuniversity -antiuratic -antiurban -antiurease -antiusurious -antiutilitarian -antiutilitarianism -antivaccination -antivaccinationist -antivaccinator -antivaccinist -antivandalism -antivariolous -antivenefic -antivenene -antivenereal -antivenin -antivenine -antivenins -Anti-venizelist -antivenom -antivenomous -antivermicular -antivibrating -antivibrator -antivibratory -antivice -antiviolence -antiviral -antivirotic -antivirus -antivitalist -antivitalistic -antivitamin -antivivisection -antivivisectionist -antivivisectionists -antivolition -Anti-volstead -Anti-volsteadian -antiwar -antiwarlike -antiwaste -antiwear -antiwedge -antiweed -Anti-whig -antiwhite -antiwhitism -Anti-wycliffist -Anti-wycliffite -antiwiretapping -antiwit -antiwoman -antiworld -anti-worlds -antixerophthalmic -antizealot -antizymic -antizymotic -Anti-zionism -Anti-zionist -antizoea -Anti-zwinglian -antjar -antler -antlered -antlerite -antlerless -Antlers -Antlia -Antliae -antliate -Antlid -antlike -antling -antlion -antlions -antlophobia -antluetic -Antntonioni -antocular -antodontalgic -antoeci -antoecian -antoecians -Antofagasta -Antoine -Antoinetta -Antoinette -Anton -Antonchico -Antone -Antonella -Antonescu -Antonet -Antonetta -Antoni -Antony -Antonia -Antonie -Antonietta -antonym -antonymy -antonymic -antonymies -antonymous -antonyms -Antonin -Antonina -antoniniani -antoninianus -Antonino -Antoninus -Antonio -Antony-over -Antonito -Antonius -antonomasy -antonomasia -antonomastic -antonomastical -antonomastically -Antonovich -antonovics -Antons -antorbital -antozone -antozonite -ant-pipit -antproof -antra -antral -antralgia -antre -antrectomy -antres -Antrim -antrin -antritis -antrocele -antronasal -antrophore -antrophose -antrorse -antrorsely -antroscope -antroscopy -Antrostomus -antrotympanic -antrotympanitis -antrotome -antrotomy -antroversion -antrovert -antrum -antrums -antrustion -antrustionship -ants -ant's -antship -antshrike -antsy -antsier -antsiest -antsigne -antsy-pantsy -Antsirane -antthrush -ant-thrush -ANTU -Antum -Antung -Antwerp -Antwerpen -antwise -ANU -anubin -anubing -Anubis -anucleate -anucleated -anukabiet -Anukit -anuloma -Anunaki -anunder -Anunnaki -Anura -Anuradhapura -Anurag -anural -anuran -anurans -anureses -anuresis -anuretic -anury -anuria -anurias -anuric -anurous -anus -anuses -anusim -Anuska -anusvara -anutraminosa -anvasser -Anvers -Anvik -anvil -anvil-drilling -anviled -anvil-faced -anvil-facing -anvil-headed -anviling -anvilled -anvilling -anvils -anvil's -anvilsmith -anviltop -anviltops -anxiety -anxieties -anxietude -anxiolytic -anxious -anxiously -anxiousness -Anza -Anzac -Anzanian -Anzanite -Anzengruber -Anzio -Anzovin -ANZUS -AO -AOA -aob -AOCS -Aoede -aogiri -Aoide -Aoife -A-OK -Aoki -AOL -aoli -Aomori -aonach -A-one -Aonian -AOP -AOPA -AOQ -aor -Aorangi -aorist -aoristic -aoristically -aorists -Aornis -Aornum -aorta -aortae -aortal -aortarctia -aortas -aortectasia -aortectasis -aortic -aorticorenal -aortism -aortitis -aortoclasia -aortoclasis -aortography -aortographic -aortographies -aortoiliac -aortolith -aortomalacia -aortomalaxis -aortopathy -aortoptosia -aortoptosis -aortorrhaphy -aortosclerosis -aortostenosis -aortotomy -AOS -aosmic -AOSS -Aosta -Aotea -Aotearoa -Aotes -Aotus -AOU -aouad -aouads -aoudad -aoudads -Aouellimiden -Aoul -AOW -AP -ap- -APA -apabhramsa -apace -Apache -Apaches -Apachette -apachism -apachite -apadana -apaesthesia -apaesthetic -apaesthetize -apaestically -apagoge -apagoges -apagogic -apagogical -apagogically -apagogue -apay -Apayao -apaid -apair -apaise -Apalachee -Apalachicola -Apalachin -apalit -Apama -apanage -apanaged -apanages -apanaging -apandry -Apanteles -Apantesis -apanthropy -apanthropia -apar -apar- -Aparai -aparaphysate -aparavidya -apardon -aparejo -aparejos -Apargia -aparithmesis -Aparri -apart -apartado -Apartheid -apartheids -aparthrosis -apartment -apartmental -apartments -apartment's -apartness -apasote -apass -apast -apastra -apastron -apasttra -apatan -Apatela -apatetic -apathaton -apatheia -apathetic -apathetical -apathetically -apathy -apathia -apathic -apathies -apathism -apathist -apathistical -apathize -apathogenic -Apathus -apatite -apatites -Apatornis -Apatosaurus -Apaturia -APB -APC -APDA -APDU -APE -apeak -apectomy -aped -apedom -apeek -ape-headed -apehood -apeiron -apeirophobia -apel- -Apeldoorn -apelet -apelike -apeling -Apelles -apellous -apeman -ape-man -Apemantus -ape-men -Apemius -Apemosyne -apen- -Apennine -Apennines -apenteric -Apepi -apepsy -apepsia -apepsinia -apeptic -aper -aper- -aperch -apercu -apercus -aperea -apery -aperient -aperients -aperies -aperiodic -aperiodically -aperiodicity -aperispermic -aperistalsis -aperitif -aperitifs -aperitive -apers -apersee -apert -apertion -apertly -apertness -apertometer -apertum -apertural -aperture -apertured -apertures -Aperu -aperulosid -apes -apesthesia -apesthetic -apesthetize -apet- -Apetalae -apetaly -apetalies -apetaloid -apetalose -apetalous -apetalousness -apex -apexed -apexes -apexing -Apfel -Apfelstadt -APG -Apgar -aph -aph- -aphacia -aphacial -aphacic -aphaeresis -aphaeretic -aphagia -aphagias -aphakia -aphakial -aphakic -Aphanapteryx -Aphanes -aphanesite -Aphaniptera -aphanipterous -aphanisia -aphanisis -aphanite -aphanites -aphanitic -aphanitism -Aphanomyces -aphanophyre -aphanozygous -Aphareus -Apharsathacites -aphasia -aphasiac -aphasiacs -aphasias -aphasic -aphasics -aphasiology -Aphelandra -Aphelenchus -aphelia -aphelian -aphelilia -aphelilions -Aphelinus -aphelion -apheliotropic -apheliotropically -apheliotropism -Aphelops -aphemia -aphemic -aphengescope -aphengoscope -aphenoscope -apheresis -apheretic -apheses -aphesis -Aphesius -apheta -aphetic -aphetically -aphetism -aphetize -aphicidal -aphicide -aphid -Aphidas -aphides -aphidian -aphidians -aphidicide -aphidicolous -aphidid -Aphididae -Aphidiinae -aphidious -Aphidius -aphidivorous -aphidlion -aphid-lion -aphidolysin -aphidophagous -aphidozer -aphydrotropic -aphydrotropism -aphids -aphid's -aphilanthropy -aphylly -aphyllies -aphyllose -aphyllous -aphyric -Aphis -aphislion -aphis-lion -aphizog -aphlaston -aphlebia -aphlogistic -aphnology -aphodal -aphodi -aphodian -Aphodius -aphodus -apholate -apholates -aphony -aphonia -aphonias -aphonic -aphonics -aphonous -aphoria -aphorise -aphorised -aphoriser -aphorises -aphorising -aphorism -aphorismatic -aphorismer -aphorismic -aphorismical -aphorismos -aphorisms -aphorism's -aphorist -aphoristic -aphoristical -aphoristically -aphorists -aphorize -aphorized -aphorizer -aphorizes -aphorizing -Aphoruridae -aphotaxis -aphotic -aphototactic -aphototaxis -aphototropic -aphototropism -Aphra -aphrasia -aphrite -aphrizite -aphrodesiac -aphrodisia -aphrodisiac -aphrodisiacal -aphrodisiacs -aphrodisian -aphrodisiomania -aphrodisiomaniac -aphrodisiomaniacal -Aphrodision -Aphrodistic -Aphrodite -Aphroditeum -aphroditic -Aphroditidae -aphroditous -Aphrogeneia -aphrolite -aphronia -aphronitre -aphrosiderite -aphtha -aphthae -Aphthartodocetae -Aphthartodocetic -Aphthartodocetism -aphthic -aphthitalite -aphthoid -aphthong -aphthongal -aphthongia -aphthonite -aphthous -API -Apia -Apiaca -Apiaceae -apiaceous -Apiales -apian -Apianus -apiararies -apiary -apiarian -apiarians -apiaries -apiarist -apiarists -apiator -apicad -apical -apically -apicals -Apicella -apices -apicial -Apician -apicifixed -apicilar -apicillary -apicitis -apickaback -apickback -apickpack -apico-alveolar -apico-dental -apicoectomy -apicolysis -APICS -apicula -apicular -apiculate -apiculated -apiculation -apiculi -apicultural -apiculture -apiculturist -apiculus -Apidae -apiece -apieces -a-pieces -Apiezon -apigenin -apii -apiin -apikores -apikoros -apikorsim -apilary -apili -apimania -apimanias -Apina -Apinae -Apinage -apinch -a-pinch -aping -apinoid -apio -Apioceridae -apiocrinite -apioid -apioidal -apiol -apiole -apiolin -apiology -apiologies -apiologist -apyonin -apionol -Apios -apiose -Apiosoma -apiphobia -apyrase -apyrases -apyrene -apyretic -apyrexy -apyrexia -apyrexial -apyrotype -apyrous -Apis -apish -apishamore -apishly -apishness -apism -Apison -apitong -apitpat -Apium -apivorous -APJ -apjohnite -Apl -aplace -aplacental -Aplacentalia -Aplacentaria -Aplacophora -aplacophoran -aplacophorous -aplanat -aplanatic -aplanatically -aplanatism -Aplanobacter -aplanogamete -aplanospore -aplasia -aplasias -aplastic -Aplectrum -aplenty -a-plenty -Aplington -Aplysia -aplite -aplites -aplitic -aplobasalt -aplodiorite -Aplodontia -Aplodontiidae -aplomb -aplombs -aplome -Aplopappus -aploperistomatous -aplostemonous -aplotaxene -aplotomy -Apluda -aplustra -aplustre -aplustria -APM -apnea -apneal -apneas -apneic -apneumatic -apneumatosis -Apneumona -apneumonous -apneusis -apneustic -apnoea -apnoeal -apnoeas -apnoeic -APO -apo- -apoaconitine -apoapsides -apoapsis -apoatropine -apobiotic -apoblast -Apoc -Apoc. -apocaffeine -Apocalypse -apocalypses -apocalypst -apocalypt -apocalyptic -apocalyptical -apocalyptically -apocalypticism -apocalyptism -apocalyptist -apocamphoric -apocarp -apocarpy -apocarpies -apocarpous -apocarps -apocatastasis -apocatastatic -apocatharsis -apocathartic -apocenter -apocentre -apocentric -apocentricity -apocha -apochae -apocholic -apochromat -apochromatic -apochromatism -Apocynaceae -apocynaceous -apocinchonine -apocyneous -apocynthion -apocynthions -Apocynum -apocyte -apocodeine -apocopate -apocopated -apocopating -apocopation -apocope -apocopes -apocopic -Apocr -apocrenic -apocrine -apocryph -Apocrypha -apocryphal -apocryphalist -apocryphally -apocryphalness -apocryphate -apocryphon -apocrisiary -Apocrita -apocrustic -apod -Apoda -apodal -apodan -apodedeipna -apodeictic -apodeictical -apodeictically -apodeipna -apodeipnon -apodeixis -apodema -apodemal -apodemas -apodemata -apodematal -apodeme -Apodes -Apodia -apodiabolosis -apodictic -apodictical -apodictically -apodictive -Apodidae -apodioxis -Apodis -apodyteria -apodyterium -apodixis -apodoses -apodosis -apodous -apods -apoembryony -apoenzyme -apofenchene -apoferritin -apogaeic -apogaic -apogalacteum -apogamy -apogamic -apogamically -apogamies -apogamous -apogamously -apogeal -apogean -apogee -apogees -apogeic -apogeny -apogenous -apogeotropic -apogeotropically -apogeotropism -Apogon -apogonid -Apogonidae -apograph -apographal -apographic -apographical -apoharmine -apohyal -Apoidea -apoikia -apoious -apoise -apojove -apokatastasis -apokatastatic -apokrea -apokreos -apolar -apolarity -apolaustic -A-pole -apolegamic -Apolysin -apolysis -Apolista -Apolistan -apolitical -apolitically -apolytikion -Apollinaire -Apollinarian -Apollinarianism -Apollinaris -Apolline -apollinian -Apollyon -Apollo -Apollon -Apollonia -Apollonian -Apollonic -apollonicon -Apollonistic -Apollonius -Apollos -Apolloship -Apollus -apolog -apologal -apologer -apologete -apologetic -apologetical -apologetically -apologetics -apology -apologia -apologiae -apologias -apological -apologies -apology's -apologise -apologised -apologiser -apologising -apologist -apologists -apologist's -apologize -apologized -apologizer -apologizers -apologizes -apologizing -apologs -apologue -apologues -apolousis -apolune -apolunes -apolusis -apomecometer -apomecometry -apometaboly -apometabolic -apometabolism -apometabolous -apomict -apomictic -apomictical -apomictically -apomicts -Apomyius -apomixes -apomixis -apomorphia -apomorphin -apomorphine -aponeurology -aponeurorrhaphy -aponeuroses -aponeurosis -aponeurositis -aponeurotic -aponeurotome -aponeurotomy -aponia -aponic -Aponogeton -Aponogetonaceae -aponogetonaceous -apoop -a-poop -apopemptic -apopenptic -apopetalous -apophantic -apophasis -apophatic -apophyeeal -apophyge -apophyges -apophylactic -apophylaxis -apophyllite -apophyllous -Apophis -apophysary -apophysate -apophyseal -apophyses -apophysial -apophysis -apophysitis -apophlegm -apophlegmatic -apophlegmatism -apophony -apophonia -apophonic -apophonies -apophorometer -apophthegm -apophthegmatic -apophthegmatical -apophthegmatist -apopyle -Apopka -apoplasmodial -apoplastogamous -apoplectic -apoplectical -apoplectically -apoplectiform -apoplectoid -apoplex -apoplexy -apoplexies -apoplexious -apoquinamine -apoquinine -aporetic -aporetical -aporhyolite -aporia -aporiae -aporias -Aporobranchia -aporobranchian -Aporobranchiata -Aporocactus -Aporosa -aporose -aporphin -aporphine -Aporrhaidae -Aporrhais -aporrhaoid -aporrhea -aporrhegma -aporrhiegma -aporrhoea -aport -aportlast -aportoise -aposafranine -aposaturn -aposaturnium -aposelene -aposematic -aposematically -aposepalous -aposia -aposiopeses -aposiopesis -aposiopestic -aposiopetic -apositia -apositic -aposoro -apospory -aposporic -apospories -aposporogony -aposporous -apostacy -apostacies -apostacize -apostasy -apostasies -apostasis -apostate -apostates -apostatic -apostatical -apostatically -apostatise -apostatised -apostatising -apostatism -apostatize -apostatized -apostatizes -apostatizing -apostaxis -apostem -apostemate -apostematic -apostemation -apostematous -aposteme -aposteriori -aposthia -aposthume -apostil -apostille -apostils -apostle -apostlehood -Apostles -apostle's -apostleship -apostleships -apostoile -apostolate -apostoless -apostoli -Apostolian -Apostolic -apostolical -apostolically -apostolicalness -Apostolici -apostolicism -apostolicity -apostolize -Apostolos -apostrophal -apostrophation -apostrophe -apostrophes -apostrophi -Apostrophia -apostrophic -apostrophied -apostrophise -apostrophised -apostrophising -apostrophize -apostrophized -apostrophizes -apostrophizing -apostrophus -apostume -Apotactic -Apotactici -apotactite -apotelesm -apotelesmatic -apotelesmatical -apothec -apothecal -apothecarcaries -apothecary -apothecaries -apothecaryship -apothece -apotheces -apothecia -apothecial -apothecium -apothegm -apothegmatic -apothegmatical -apothegmatically -apothegmatist -apothegmatize -apothegms -apothem -apothems -apotheose -apotheoses -apotheosis -apotheosise -apotheosised -apotheosising -apotheosize -apotheosized -apotheosizing -apothesine -apothesis -apothgm -apotihecal -apotype -apotypic -apotome -apotracheal -apotropaic -apotropaically -apotropaion -apotropaism -apotropous -apoturmeric -apout -apoxesis -Apoxyomenos -apozem -apozema -apozemical -apozymase -APP -app. -appay -appair -appal -Appalachia -Appalachian -Appalachians -appale -appall -appalled -appalling -appallingly -appallingness -appallment -appalls -appalment -Appaloosa -appaloosas -appals -appalto -appanage -appanaged -appanages -appanaging -appanagist -appar -apparail -apparance -apparat -apparatchik -apparatchiki -apparatchiks -apparation -apparats -apparatus -apparatuses -apparel -appareled -appareling -apparelled -apparelling -apparelment -apparels -apparence -apparency -apparencies -apparens -apparent -apparentation -apparentement -apparentements -apparently -apparentness -apparition -apparitional -apparitions -apparition's -apparitor -appartement -appassionata -appassionatamente -appassionate -appassionato -appast -appaume -appaumee -APPC -appd -appeach -appeacher -appeachment -appeal -appealability -appealable -appealed -appealer -appealers -appealing -appealingly -appealingness -appeals -appear -appearance -appearanced -appearances -appeared -appearer -appearers -appearing -appears -appeasable -appeasableness -appeasably -appease -appeased -appeasement -appeasements -appeaser -appeasers -appeases -appeasing -appeasingly -appeasive -Appel -appellability -appellable -appellancy -appellant -appellants -appellant's -appellate -appellation -appellational -appellations -appellative -appellatived -appellatively -appellativeness -appellatory -appellee -appellees -appellor -appellors -appels -appenage -append -appendage -appendaged -appendages -appendage's -appendalgia -appendance -appendancy -appendant -appendectomy -appendectomies -appended -appendence -appendency -appendent -appender -appenders -appendical -appendicalgia -appendicate -appendice -appendiceal -appendicectasis -appendicectomy -appendicectomies -appendices -appendicial -appendicious -appendicitis -appendicle -appendicocaecostomy -appendico-enterostomy -appendicostomy -appendicular -Appendicularia -appendicularian -Appendiculariidae -Appendiculata -appendiculate -appendiculated -appending -appenditious -appendix -appendixed -appendixes -appendixing -appendix's -appendorontgenography -appendotome -appends -appennage -appense -appentice -Appenzell -apperceive -apperceived -apperceiving -apperception -apperceptionism -apperceptionist -apperceptionistic -apperceptive -apperceptively -appercipient -appere -apperil -appersonation -appersonification -appert -appertain -appertained -appertaining -appertainment -appertains -appertinent -appertise -appestat -appestats -appet -appete -appetence -appetency -appetencies -appetent -appetently -appetibility -appetible -appetibleness -appetiser -appetising -appetisse -appetit -appetite -appetites -appetite's -appetition -appetitional -appetitious -appetitive -appetitiveness -appetitost -appetize -appetized -appetizement -appetizer -appetizers -appetizing -appetizingly -Appia -Appian -appinite -Appius -appl -applanate -applanation -applaud -applaudable -applaudably -applauded -applauder -applauders -applauding -applaudingly -applauds -applause -applauses -applausive -applausively -Apple -appleberry -Appleby -appleblossom -applecart -apple-cheeked -appled -Appledorf -appledrane -appledrone -apple-eating -apple-faced -apple-fallow -Applegate -applegrower -applejack -applejacks -applejohn -apple-john -applemonger -applenut -apple-pie -apple-polish -apple-polisher -apple-polishing -appleringy -appleringie -appleroot -apples -apple's -applesauce -apple-scented -Appleseed -apple-shaped -applesnits -apple-stealing -Appleton -apple-twig -applewife -applewoman -applewood -apply -appliable -appliableness -appliably -appliance -appliances -appliance's -appliant -applicability -applicabilities -applicable -applicableness -applicably -applicancy -applicancies -applicant -applicants -applicant's -applicate -application -applications -application's -applicative -applicatively -applicator -applicatory -applicatorily -applicators -applicator's -applied -appliedly -applier -appliers -applies -applying -applyingly -applyment -Appling -applique -appliqued -appliqueing -appliques -applosion -applosive -applot -applotment -appmt -appoggiatura -appoggiaturas -appoggiature -appoint -appointable -appointe -appointed -appointee -appointees -appointee's -appointer -appointers -appointing -appointive -appointively -appointment -appointments -appointment's -appointor -appoints -Appolonia -Appomatox -Appomattoc -Appomattox -apport -apportion -apportionable -apportionate -apportioned -apportioner -apportioning -apportionment -apportionments -apportions -apposability -apposable -appose -apposed -apposer -apposers -apposes -apposing -apposiopestic -apposite -appositely -appositeness -apposition -appositional -appositionally -appositions -appositive -appositively -apppetible -appraisable -appraisal -appraisals -appraisal's -appraise -appraised -appraisement -appraiser -appraisers -appraises -appraising -appraisingly -appraisive -apprecate -appreciable -appreciably -appreciant -appreciate -appreciated -appreciates -appreciating -appreciatingly -appreciation -appreciational -appreciations -appreciativ -appreciative -appreciatively -appreciativeness -appreciator -appreciatory -appreciatorily -appreciators -appredicate -apprehend -apprehendable -apprehended -apprehender -apprehending -apprehendingly -apprehends -apprehensibility -apprehensible -apprehensibly -apprehension -apprehensions -apprehension's -apprehensive -apprehensively -apprehensiveness -apprehensivenesses -apprend -apprense -apprentice -apprenticed -apprenticehood -apprenticement -apprentices -apprenticeship -apprenticeships -apprenticing -appress -appressed -appressor -appressoria -appressorial -appressorium -apprest -appreteur -appreve -apprise -apprised -appriser -apprisers -apprises -apprising -apprizal -apprize -apprized -apprizement -apprizer -apprizers -apprizes -apprizing -appro -approach -approachability -approachabl -approachable -approachableness -approached -approacher -approachers -approaches -approaching -approachless -approachment -approbate -approbated -approbating -approbation -approbations -approbative -approbativeness -approbator -approbatory -apprompt -approof -appropinquate -appropinquation -appropinquity -appropre -appropriable -appropriament -appropriate -appropriated -appropriately -appropriateness -appropriates -appropriating -appropriation -Appropriations -appropriative -appropriativeness -appropriator -appropriators -appropriator's -approvability -approvable -approvableness -approvably -approval -approvals -approval's -approvance -approve -approved -approvedly -approvedness -approvement -approver -approvers -approves -approving -approvingly -approx -approx. -approximable -approximal -approximant -approximants -approximate -approximated -approximately -approximates -approximating -approximation -approximations -approximative -approximatively -approximativeness -approximator -Apps -appt -apptd -appui -appulse -appulses -appulsion -appulsive -appulsively -appunctuation -appurtenance -appurtenances -appurtenant -APR -Apr. -APRA -apractic -apraxia -apraxias -apraxic -apreynte -aprendiz -apres -Apresoline -apricate -aprication -aprickle -apricot -apricot-kernal -apricots -apricot's -April -Aprile -Aprilesque -Aprilette -April-gowk -Apriline -Aprilis -apriori -apriorism -apriorist -aprioristic -aprioristically -apriority -apritif -Aprocta -aproctia -aproctous -apron -aproned -aproneer -apronful -aproning -apronless -apronlike -aprons -apron's -apron-squire -apronstring -apron-string -apropos -aprosexia -aprosopia -aprosopous -aproterodont -aprowl -APS -APSA -Apsaras -Apsarases -APSE -apselaphesia -apselaphesis -apses -apsychia -apsychical -apsid -apsidal -apsidally -apsides -apsidiole -apsinthion -Apsyrtus -apsis -Apsu -APT -apt. -Aptal -aptate -Aptenodytes -apter -Aptera -apteral -apteran -apteria -apterial -Apteryges -apterygial -Apterygidae -Apterygiformes -Apterygogenea -Apterygota -apterygote -apterygotous -apteryla -apterium -Apteryx -apteryxes -apteroid -apterous -aptest -Apthorp -aptyalia -aptyalism -Aptian -Aptiana -aptychus -aptitude -aptitudes -aptitudinal -aptitudinally -aptly -aptness -aptnesses -Aptos -aptote -aptotic -apts -APU -Apul -Apuleius -Apulia -Apulian -apulmonic -apulse -Apure -Apurimac -apurpose -Apus -apx -AQ -Aqaba -AQL -aqua -aquabelle -aquabib -aquacade -aquacades -aquacultural -aquaculture -aquadag -aquaduct -aquaducts -aquae -aquaemanale -aquaemanalia -aquafer -aquafortis -aquafortist -aquage -aquagreen -aquake -aqualung -Aqua-Lung -aqualunger -aquamanale -aquamanalia -aquamanile -aquamaniles -aquamanilia -aquamarine -aquamarines -aquameter -aquanaut -aquanauts -aquaphobia -aquaplane -aquaplaned -aquaplaner -aquaplanes -aquaplaning -aquapuncture -aquaregia -aquarelle -aquarelles -aquarellist -aquaria -aquarial -Aquarian -aquarians -Aquarid -Aquarii -aquariia -aquariist -aquariiums -aquarist -aquarists -aquarium -aquariums -Aquarius -aquarter -a-quarter -aquas -Aquasco -aquascope -aquascutum -Aquashicola -aquashow -aquate -aquatic -aquatical -aquatically -aquatics -aquatile -aquatint -aquatinta -aquatinted -aquatinter -aquatinting -aquatintist -aquatints -aquation -aquativeness -aquatone -aquatones -aquavalent -aquavit -aqua-vitae -aquavits -Aquebogue -aqueduct -aqueducts -aqueduct's -aqueity -aquench -aqueo- -aqueoglacial -aqueoigneous -aqueomercurial -aqueous -aqueously -aqueousness -aquerne -Aqueus -aquiclude -aquicolous -aquicultural -aquiculture -aquiculturist -aquifer -aquiferous -aquifers -Aquifoliaceae -aquifoliaceous -aquiform -aquifuge -Aquila -Aquilae -Aquilaria -aquilawood -aquilege -Aquilegia -Aquileia -aquilia -Aquilian -Aquilid -aquiline -aquiline-nosed -aquilinity -aquilino -Aquilla -Aquilo -aquilon -Aquinas -aquincubital -aquincubitalism -Aquinist -aquintocubital -aquintocubitalism -aquiparous -Aquitaine -Aquitania -Aquitanian -aquiver -a-quiver -aquo -aquocapsulitis -aquocarbonic -aquocellolitis -aquo-ion -Aquone -aquopentamminecobaltic -aquose -aquosity -aquotization -aquotize -ar -ar- -Ar. -ARA -Arab -Arab. -araba -araban -arabana -Arabeila -Arabel -Arabela -Arabele -Arabella -Arabelle -arabesk -arabesks -Arabesque -arabesquely -arabesquerie -arabesques -Arabi -Araby -Arabia -Arabian -Arabianize -arabians -Arabic -arabica -Arabicism -Arabicize -Arabidopsis -arabiyeh -arability -arabin -arabine -arabinic -arabinose -arabinosic -arabinoside -Arabis -Arabism -Arabist -arabit -arabite -arabitol -Arabize -arabized -arabizes -arabizing -arable -arables -Arabo-byzantine -Arabophil -arabs -arab's -araca -Aracaj -Aracaju -Aracana -aracanga -aracari -Aracatuba -arace -Araceae -araceous -arach -arache -arachic -arachide -arachidic -arachidonic -arachin -Arachis -arachnactis -Arachne -arachnean -arachnephobia -arachnid -Arachnida -arachnidan -arachnidial -arachnidism -arachnidium -arachnids -arachnid's -arachnism -Arachnites -arachnitis -arachnoid -arachnoidal -Arachnoidea -arachnoidean -arachnoiditis -arachnology -arachnological -arachnologist -Arachnomorphae -arachnophagous -arachnopia -Arad -aradid -Aradidae -arado -Arae -araeometer -araeosystyle -araeostyle -araeotic -Arafat -Arafura -Aragallus -Aragats -arage -Arago -Aragon -Aragonese -Aragonian -aragonite -aragonitic -aragonspath -Araguaia -Araguaya -araguane -Araguari -araguato -araignee -arain -arayne -Arains -araire -araise -Arak -Arakan -Arakanese -Arakawa -arakawaite -arake -a-rake -Araks -Aralac -Araldo -Arales -Aralia -Araliaceae -araliaceous -araliad -Araliaephyllum -aralie -Araliophyllum -aralkyl -aralkylated -Arallu -Aralu -Aram -Aramaean -Aramaic -Aramaicize -aramayoite -Aramaism -Aramanta -Aramburu -Aramean -Aramen -Aramenta -aramid -Aramidae -aramids -aramina -Araminta -ARAMIS -Aramitess -Aramu -Aramus -Aran -Arand -Aranda -Arandas -Aranea -Araneae -araneid -Araneida -araneidal -araneidan -araneids -araneiform -Araneiformes -Araneiformia -aranein -Araneina -Araneoidea -araneology -araneologist -araneose -araneous -aranga -arango -arangoes -Aranha -Arany -Aranyaka -Aranyaprathet -arank -aranzada -arapahite -Arapaho -Arapahoe -Arapahoes -Arapahos -arapaima -arapaimas -Arapesh -Arapeshes -araphorostic -araphostic -araponga -arapunga -Araquaju -arar -Arara -araracanga -ararao -Ararat -ararauna -arariba -araroba -ararobas -araru -Aras -arase -Arathorn -arati -aratinga -aration -aratory -Aratus -Araua -Arauan -Araucan -Araucania -Araucanian -Araucano -Araucaria -Araucariaceae -araucarian -Araucarioxylon -Araujia -Arauna -Arawa -Arawak -Arawakan -Arawakian -Arawaks -Arawn -Araxa -Araxes -arb -arba -Arbacia -arbacin -arbalest -arbalester -arbalestre -arbalestrier -arbalests -arbalist -arbalister -arbalists -arbalo -arbalos -Arbe -Arbela -Arbela-Gaugamela -arbelest -Arber -Arbil -arbinose -Arbyrd -arbiter -arbiters -arbiter's -arbith -arbitrable -arbitrage -arbitrager -arbitragers -arbitrages -arbitrageur -arbitragist -arbitral -arbitrament -arbitraments -arbitrary -arbitraries -arbitrarily -arbitrariness -arbitrarinesses -arbitrate -arbitrated -arbitrates -arbitrating -arbitration -arbitrational -arbitrationist -arbitrations -arbitrative -arbitrator -arbitrators -arbitrator's -arbitratorship -arbitratrix -arbitre -arbitrement -arbitrer -arbitress -arbitry -Arblay -arblast -Arboles -arboloco -Arbon -arbor -arboraceous -arboral -arborary -arborator -arborea -arboreal -arboreally -arborean -arbored -arboreous -arborer -arbores -arborescence -arborescent -arborescently -arboresque -arboret -arboreta -arboretum -arboretums -arbory -arborical -arboricole -arboricoline -arboricolous -arboricultural -arboriculture -arboriculturist -arboriform -arborise -arborist -arborists -arborization -arborize -arborized -arborizes -arborizing -arboroid -arborolater -arborolatry -arborous -arbors -arbor's -arborvitae -arborvitaes -arborway -arbota -arbour -arboured -arbours -Arbovale -arbovirus -Arbroath -arbs -arbtrn -Arbuckle -arbuscle -arbuscles -arbuscula -arbuscular -arbuscule -arbust -arbusta -arbusterin -arbusterol -arbustum -arbutase -arbute -arbutean -arbutes -Arbuthnot -arbutin -arbutinase -arbutus -arbutuses -ARC -arca -arcabucero -Arcacea -arcade -arcaded -arcades -arcade's -Arcady -Arcadia -Arcadian -Arcadianism -Arcadianly -arcadians -arcadias -Arcadic -arcading -arcadings -arcae -arcana -arcanal -arcane -Arcangelo -arcanist -arcanite -Arcanum -arcanums -Arcaro -Arcas -Arcata -arcate -arcato -arcature -arcatures -arc-back -arcboutant -arc-boutant -arccos -arccosine -Arce -arced -Arcella -arces -Arcesilaus -Arcesius -Arceuthobium -arcform -arch -arch- -Arch. -archabomination -archae -archae- -Archaean -archaecraniate -archaeo- -Archaeoceti -Archaeocyathid -Archaeocyathidae -Archaeocyathus -archaeocyte -archaeogeology -archaeography -archaeographic -archaeographical -archaeohippus -archaeol -archaeol. -archaeolater -archaeolatry -archaeolith -archaeolithic -archaeologer -archaeology -archaeologian -archaeologic -archaeological -archaeologically -archaeologies -archaeologist -archaeologists -archaeologist's -archaeomagnetism -Archaeopithecus -Archaeopterygiformes -Archaeopteris -Archaeopteryx -Archaeornis -Archaeornithes -archaeostoma -Archaeostomata -archaeostomatous -archaeotherium -Archaeozoic -archaeus -archagitator -archai -Archaic -archaical -archaically -archaicism -archaicness -Archaimbaud -archaise -archaised -archaiser -archaises -archaising -archaism -archaisms -archaist -archaistic -archaists -archaize -archaized -archaizer -archaizes -archaizing -Archambault -Ar-chang -Archangel -archangelic -Archangelica -archangelical -archangels -archangel's -archangelship -archantagonist -archanthropine -archantiquary -archapostate -archapostle -archarchitect -archarios -archartist -Archbald -archbanc -archbancs -archband -archbeacon -archbeadle -archbishop -archbishopess -archbishopry -archbishopric -archbishoprics -archbishops -Archbold -archbotcher -archboutefeu -Archbp -arch-brahman -archbuffoon -archbuilder -arch-butler -arch-buttress -Archcape -archchampion -arch-chanter -archchaplain -archcharlatan -archcheater -archchemic -archchief -arch-christendom -arch-christianity -archchronicler -archcity -archconfraternity -archconfraternities -archconsoler -archconspirator -archcorrupter -archcorsair -archcount -archcozener -archcriminal -archcritic -archcrown -archcupbearer -Archd -archdapifer -archdapifership -archdeacon -archdeaconate -archdeaconess -archdeaconry -archdeaconries -archdeacons -archdeaconship -archdean -archdeanery -archdeceiver -archdefender -archdemon -archdepredator -archdespot -archdetective -archdevil -archdiocesan -archdiocese -archdioceses -archdiplomatist -archdissembler -archdisturber -archdivine -archdogmatist -archdolt -archdruid -archducal -archduchess -archduchesses -archduchy -archduchies -archduke -archdukedom -archdukes -archduxe -arche -archeal -Archean -archearl -archebanc -archebancs -archebiosis -archecclesiastic -archecentric -arched -archegay -Archegetes -archegone -archegony -archegonia -archegonial -Archegoniata -Archegoniatae -archegoniate -archegoniophore -archegonium -Archegosaurus -archeion -Archelaus -Archelenis -Archelochus -archelogy -Archelon -archemastry -Archemorus -archemperor -Archencephala -archencephalic -archenemy -arch-enemy -archenemies -archengineer -archenia -archenteric -archenteron -archeocyte -archeol -archeolithic -archeology -archeologian -archeologic -archeological -archeologically -archeologies -archeologist -archeopteryx -archeostome -Archeozoic -Archeptolemus -Archer -archeress -archerfish -archerfishes -archery -archeries -archers -archership -Arches -arches-court -archespore -archespores -archesporia -archesporial -archesporium -archespsporia -archest -archetypal -archetypally -archetype -archetypes -archetypic -archetypical -archetypically -archetypist -archetto -archettos -archeunuch -archeus -archexorcist -archfelon -Archfiend -arch-fiend -archfiends -archfire -archflamen -arch-flamen -archflatterer -archfoe -arch-foe -archfool -archform -archfounder -archfriend -archgenethliac -archgod -archgomeral -archgovernor -archgunner -archhead -archheart -archheresy -archheretic -arch-heretic -archhypocrisy -archhypocrite -archhost -archhouse -archhumbug -archy -archi- -Archiannelida -Archias -archiater -Archibald -Archibaldo -archibenthal -archibenthic -archibenthos -archiblast -archiblastic -archiblastoma -archiblastula -Archibold -Archibuteo -archical -archicantor -archicarp -archicerebra -archicerebrum -Archichlamydeae -archichlamydeous -archicyte -archicytula -archicleistogamy -archicleistogamous -archicoele -archicontinent -Archidamus -Archidiaceae -archidiaconal -archidiaconate -archididascalian -archididascalos -Archidiskodon -Archidium -archidome -archidoxis -Archie -archiepiscopacy -archiepiscopal -archiepiscopality -archiepiscopally -archiepiscopate -archiereus -archigaster -archigastrula -archigenesis -archigony -archigonic -archigonocyte -archiheretical -archikaryon -archil -archilithic -archilla -Archilochian -Archilochus -archilowe -archils -archilute -archimage -Archimago -archimagus -archimandrite -archimandrites -Archimedean -Archimedes -Archimycetes -archimime -archimorphic -archimorula -archimperial -archimperialism -archimperialist -archimperialistic -archimpressionist -archin -archine -archines -archineuron -archinfamy -archinformer -arching -archings -archipallial -archipallium -archipelagian -archipelagic -archipelago -archipelagoes -archipelagos -Archipenko -archiphoneme -archipin -archiplasm -archiplasmic -Archiplata -archiprelatical -archipresbyter -archipterygial -archipterygium -archisymbolical -archisynagogue -archisperm -Archispermae -archisphere -archispore -archistome -archisupreme -archit -archit. -Archytas -architect -architective -architectonic -Architectonica -architectonically -architectonics -architectress -architects -architect's -architectural -architecturalist -architecturally -architecture -architectures -architecture's -architecturesque -architecure -Architeuthis -architypographer -architis -architraval -architrave -architraved -architraves -architricline -archival -archivault -archive -archived -archiver -archivers -archives -archiving -archivist -archivists -archivolt -archizoic -archjockey -archking -archknave -Archle -archleader -archlecher -archlet -archleveler -archlexicographer -archly -archliar -archlute -archmachine -archmagician -archmagirist -archmarshal -archmediocrity -archmessenger -archmilitarist -archmime -archminister -archmystagogue -archmock -archmocker -archmockery -archmonarch -archmonarchy -archmonarchist -archmugwump -archmurderer -archness -archnesses -archocele -archocystosyrinx -archology -archon -archons -archonship -archonships -archont -archontate -Archontia -archontic -archoplasm -archoplasma -archoplasmic -archoptoma -archoptosis -archorrhagia -archorrhea -archosyrinx -archostegnosis -archostenosis -archoverseer -archpall -archpapist -archpastor -archpatriarch -archpatron -archphylarch -archphilosopher -archpiece -archpilferer -archpillar -archpirate -archplagiary -archplagiarist -archplayer -archplotter -archplunderer -archplutocrat -archpoet -arch-poet -archpolitician -archpontiff -archpractice -archprelate -arch-prelate -archprelatic -archprelatical -archpresbyter -arch-presbyter -archpresbyterate -archpresbytery -archpretender -archpriest -archpriesthood -archpriestship -archprimate -archprince -archprophet -arch-protestant -archprotopope -archprototype -archpublican -archpuritan -archradical -archrascal -archreactionary -archrebel -archregent -archrepresentative -archrobber -archrogue -archruler -archsacrificator -archsacrificer -archsaint -archsatrap -archscoundrel -arch-sea -archseducer -archsee -archsewer -archshepherd -archsin -archsynagogue -archsnob -archspy -archspirit -archsteward -archswindler -archt -archt. -archtempter -archthief -archtyrant -archtraitor -arch-traitor -archtreasurer -archtreasurership -archturncoat -archurger -archvagabond -archvampire -archvestryman -archvillain -arch-villain -archvillainy -archvisitor -archwag -archway -archways -archwench -arch-whig -archwife -archwise -archworker -archworkmaster -Arcidae -Arcifera -arciferous -arcifinious -arciform -Arcimboldi -arcing -Arciniegas -Arcite -arcked -arcking -arclength -arclike -ARCM -ARCNET -ARCO -arcocentrous -arcocentrum -arcograph -Arcola -Arcos -arcose -arcosolia -arcosoliulia -arcosolium -arc-over -ARCS -arcs-boutants -arc-shaped -arcsin -arcsine -arcsines -Arctalia -Arctalian -Arctamerican -arctan -arctangent -arctation -Arctia -arctian -Arctic -arctically -arctician -arcticize -arcticized -arcticizing -arctico-altaic -arcticology -arcticologist -arctics -arcticward -arcticwards -arctiid -Arctiidae -Arctisca -arctitude -Arctium -Arctocephalus -Arctogaea -Arctogaeal -Arctogaean -Arctogaeic -Arctogea -Arctogean -Arctogeic -arctoid -Arctoidea -arctoidean -Arctomys -Arctos -Arctosis -Arctostaphylos -Arcturia -Arcturian -Arcturus -arcual -arcuale -arcualia -arcuate -arcuated -arcuately -arcuation -arcubalist -arcubalister -arcubos -arcula -arculite -arcus -arcuses -ard -Arda -Ardara -ardass -ardassine -Ardath -Arde -Ardea -Ardeae -ardeb -ardebs -Ardeche -Ardeen -Ardeha -Ardehs -ardeid -Ardeidae -Ardel -Ardelia -ardelio -Ardelis -Ardell -Ardella -ardellae -Ardelle -Arden -ardency -ardencies -Ardene -Ardenia -Ardennes -ardennite -ardent -ardently -ardentness -Ardenvoir -arder -Ardeth -Ardhamagadhi -Ardhanari -Ardy -Ardyce -Ardie -Ardi-ea -ardilla -Ardin -Ardine -Ardis -Ardys -ardish -Ardisia -Ardisiaceae -Ardisj -Ardith -Ardyth -arditi -ardito -Ardme -Ardmore -Ardmored -Ardoch -ardoise -Ardolino -ardor -ardors -ardour -ardours -Ardra -Ardrey -ardri -ardrigh -Ardsley -ardu -arduinite -arduous -arduously -arduousness -arduousnesses -ardure -ardurous -Ardussi -ARE -area -areach -aread -aready -areae -areal -areality -areally -Arean -arear -areas -area's -areason -areasoner -areaway -areaways -areawide -Areca -Arecaceae -arecaceous -arecaidin -arecaidine -arecain -arecaine -Arecales -arecas -areche -Arecibo -arecolidin -arecolidine -arecolin -arecoline -Arecuna -ared -Aredale -areek -areel -arefact -arefaction -arefy -areg -aregenerative -aregeneratory -areic -Areithous -areito -Areius -Arel -Arela -Arelia -Arella -Arelus -aren -ARENA -arenaceo- -arenaceous -arenae -Arenaria -arenariae -arenarious -arenas -arena's -arenation -arend -arendalite -arendator -Arends -Arendt -Arendtsville -Arene -areng -Arenga -Arenicola -arenicole -arenicolite -arenicolor -arenicolous -Arenig -arenilitic -arenite -arenites -arenoid -arenose -arenosity -arenoso- -arenous -Arensky -arent -aren't -arenulous -Arenzville -areo- -areocentric -areographer -areography -areographic -areographical -areographically -areola -areolae -areolar -areolas -areolate -areolated -areolation -areole -areoles -areolet -areology -areologic -areological -areologically -areologies -areologist -areometer -areometry -areometric -areometrical -areopagy -Areopagist -Areopagite -Areopagitic -Areopagitica -Areopagus -areosystyle -areostyle -areotectonics -Arequipa -arere -arerola -areroscope -Ares -Areskutan -arest -Aret -Areta -aretaics -aretalogy -Arete -aretes -Aretha -Arethusa -arethusas -Arethuse -Aretina -Aretinian -Aretino -Aretta -Arette -Aretus -Areus -arew -Arezzini -Arezzo -ARF -arfillite -arfs -arfvedsonite -Arg -Arg. -Argades -argaile -argal -argala -argalas -argali -argalis -Argall -argals -argan -argand -argans -Argante -Argas -argasid -Argasidae -Argean -argeers -Argeiphontes -argel -Argelander -argema -Argemone -argemony -argenol -Argent -Argenta -argental -argentamid -argentamide -argentamin -argentamine -argentan -argentarii -argentarius -argentate -argentation -argenteous -argenter -Argenteuil -argenteum -Argentia -argentic -argenticyanide -argentide -argentiferous -argentin -Argentina -Argentine -Argentinean -argentineans -argentines -Argentinian -Argentinidae -argentinitrate -Argentinize -Argentino -argention -argentite -argento- -argentojarosite -argentol -argentometer -argentometry -argentometric -argentometrically -argenton -argentoproteinum -argentose -argentous -argentry -argents -argentum -argentums -argent-vive -Arges -Argestes -argh -arghan -arghel -arghool -arghoul -Argia -argy-bargy -argy-bargied -argy-bargies -argy-bargying -Argid -argify -argil -Argile -Argyle -argyles -Argyll -argillaceo- -argillaceous -argillic -argilliferous -Argillite -argillitic -argillo- -argilloarenaceous -argillocalcareous -argillocalcite -argilloferruginous -argilloid -argillomagnesian -argillous -argylls -Argyllshire -argils -argin -arginase -arginases -argine -arginine -argininephosphoric -arginines -Argynnis -Argiope -Argiopidae -Argiopoidea -Argiphontes -argyr- -Argyra -argyranthemous -argyranthous -Argyraspides -Argyres -argyria -argyric -argyrite -argyrythrose -argyrocephalous -argyrodite -Argyrol -Argyroneta -Argyropelecus -argyrose -argyrosis -Argyrosomus -Argyrotoxus -Argive -argle -argle-bargie -arglebargle -argle-bargle -arglebargled -arglebargling -argled -argles -argling -Argo -Argoan -argol -argolet -argoletier -Argolian -Argolic -Argolid -Argolis -argols -argon -Argonaut -Argonauta -Argonautic -argonautid -argonauts -Argonia -Argonne -argonon -argons -Argos -argosy -argosies -argosine -Argostolion -argot -argotic -argots -Argovian -Argovie -arguable -arguably -argue -argue-bargue -argued -Arguedas -arguendo -arguer -arguers -argues -argufy -argufied -argufier -argufiers -argufies -argufying -arguing -arguitively -Argulus -argument -argumenta -argumental -argumentation -argumentatious -argumentative -argumentatively -argumentativeness -argumentator -argumentatory -argumentive -argumentMaths -arguments -argument's -argumentum -Argus -Argus-eyed -arguses -argusfish -argusfishes -Argusianus -Arguslike -Argusville -arguta -argutation -argute -argutely -arguteness -arh- -arhar -Arhat -arhats -Arhatship -Arhauaco -arhythmia -arhythmic -arhythmical -arhythmically -Arhna -Ari -ary -Aria -Arya -Ariadaeus -Ariadna -Ariadne -Aryaman -arian -Aryan -Ariana -Ariane -Arianie -Aryanise -Aryanised -Aryanising -Arianism -Aryanism -arianist -Arianistic -Arianistical -arianists -Aryanization -Arianize -Aryanize -Aryanized -Arianizer -Aryanizing -Arianna -Arianne -Arianrhod -aryans -arias -aryballi -aryballoi -aryballoid -aryballos -aryballus -arybballi -aribin -aribine -ariboflavinosis -Aribold -Aric -Arica -Arician -aricin -aricine -Arick -arid -Aridatha -Arided -arider -aridest -aridge -aridian -aridity -aridities -aridly -aridness -aridnesses -Arie -Ariege -ariegite -Ariel -Ariela -Ariella -Arielle -ariels -arienzo -aryepiglottic -aryepiglottidean -Aries -arietate -arietation -Arietid -arietinous -Arietis -arietta -ariettas -ariette -ariettes -Ariew -aright -arightly -arigue -Ariidae -Arikara -ariki -aril -aryl -arylamine -arylamino -arylate -arylated -arylating -arylation -ariled -arylide -arillary -arillate -arillated -arilled -arilli -arilliform -arillode -arillodes -arillodium -arilloid -arillus -arils -aryls -Arimasp -Arimaspian -Arimaspians -Arimathaea -Arimathaean -Arimathea -Arimathean -Ariminum -Arimo -Arin -Aryn -Ario -Ariocarpus -Aryo-dravidian -Arioi -Arioian -Aryo-indian -ariolate -ariole -Arion -ariose -ariosi -arioso -ariosos -Ariosto -ariot -a-riot -arious -Ariovistus -Aripeka -aripple -a-ripple -ARIS -Arisaema -arisaid -arisard -Arisbe -arise -arised -arisen -ariser -arises -arish -arising -arisings -Arispe -Arissa -arist -Arista -aristae -Aristaeus -Aristarch -aristarchy -Aristarchian -aristarchies -Aristarchus -aristas -aristate -ariste -Aristeas -aristeia -Aristes -Aristida -Aristide -Aristides -Aristillus -Aristippus -Aristo -aristo- -aristocracy -aristocracies -aristocrat -aristocratic -aristocratical -aristocratically -aristocraticalness -aristocraticism -aristocraticness -aristocratism -aristocrats -aristocrat's -aristodemocracy -aristodemocracies -aristodemocratical -Aristodemus -aristogenesis -aristogenetic -aristogenic -aristogenics -aristoi -Aristol -Aristolochia -Aristolochiaceae -aristolochiaceous -Aristolochiales -aristolochin -aristolochine -aristology -aristological -aristologist -Aristomachus -aristomonarchy -Aristophanes -Aristophanic -aristorepublicanism -aristos -Aristotelean -Aristoteles -Aristotelian -Aristotelianism -Aristotelic -Aristotelism -aristotype -Aristotle -aristulate -Arita -arite -aryteno- -arytenoepiglottic -aryteno-epiglottic -arytenoid -arytenoidal -arith -arithmancy -arithmetic -arithmetical -arithmetically -arithmetician -arithmeticians -arithmetico-geometric -arithmetico-geometrical -arithmetics -arithmetization -arithmetizations -arithmetize -arithmetized -arithmetizes -arythmia -arythmias -arithmic -arythmic -arythmical -arythmically -arithmo- -arithmocracy -arithmocratic -arithmogram -arithmograph -arithmography -arithmomancy -arithmomania -arithmometer -arithromania -Ariton -arium -Arius -Arivaca -Arivaipa -Ariz -Ariz. -Arizona -Arizonan -arizonans -Arizonian -arizonians -arizonite -Arjay -Arjan -Arjun -Arjuna -Ark -Ark. -Arkab -Arkabutla -Arkadelphia -Arkansan -arkansans -Arkansas -Arkansaw -Arkansawyer -Arkansian -arkansite -Arkdale -Arkhangelsk -Arkie -Arkite -Arkoma -arkose -arkoses -arkosic -Arkport -arks -arksutite -Arkville -Arkwright -Arlan -Arlana -Arlberg -arle -Arlee -Arleen -Arley -Arleyne -Arlen -Arlena -Arlene -Arleng -arlequinade -Arles -arless -Arleta -Arlette -Arly -Arlie -Arliene -Arlin -Arlyn -Arlina -Arlinda -Arline -Arlyne -arling -Arlington -Arlynne -Arlis -Arliss -Arlo -Arlon -arloup -Arluene -ARM -Arm. -Arma -Armada -armadas -armadilla -Armadillididae -Armadillidium -armadillo -armadillos -Armado -Armageddon -Armageddonist -Armagh -Armagnac -armagnacs -Armalda -Armalla -Armallas -armament -armamentary -armamentaria -armamentarium -armaments -armament's -Arman -Armand -Armanda -Armando -armangite -armary -armaria -armarian -armaries -armariolum -armarium -armariumaria -Armata -Armatoles -Armatoli -armature -armatured -armatures -armaturing -Armavir -armband -armbands -armbone -Armbrecht -Armbrust -Armbruster -armchair -arm-chair -armchaired -armchairs -armchair's -Armco -armed -Armelda -Armen -Armenia -armeniaceous -Armenian -armenians -Armenic -armenite -Armenize -Armenoid -Armeno-turkish -Armenti -Armentieres -armer -Armeria -Armeriaceae -armers -armet -armets -armful -armfuls -armgaunt -arm-great -armguard -arm-headed -armhole -arm-hole -armholes -armhoop -army -Armida -armied -armies -armiferous -armiger -armigeral -armigeri -armigero -armigeros -armigerous -armigers -Armil -Armilda -armill -Armilla -armillae -armillary -Armillaria -Armillas -armillate -armillated -Armillda -Armillia -Armin -Armyn -Armina -arm-in-arm -armine -arming -armings -Armington -Arminian -Arminianism -Arminianize -Arminianizer -Arminius -armipotence -armipotent -army's -armisonant -armisonous -armistice -armistices -armit -Armitage -armitas -armyworm -armyworms -armless -armlessly -armlessness -armlet -armlets -armlike -arm-linked -armload -armloads -armlock -armlocks -armoire -armoires -armomancy -Armona -Armond -armoniac -armonica -armonicas -Armonk -armor -Armoracia -armorbearer -armor-bearer -armor-clad -armored -Armorel -armorer -armorers -armory -armorial -armorially -armorials -Armoric -Armorica -Armorican -Armorician -armoried -armories -armoring -armorist -armorless -armor-piercing -armor-plate -armorplated -armor-plated -armorproof -armors -armorwise -Armouchiquois -Armour -armourbearer -armour-bearer -armour-clad -armoured -armourer -armourers -armoury -armouries -armouring -armour-piercing -armour-plate -armours -armozeen -armozine -armpad -armpiece -armpit -armpits -armpit's -armplate -armrack -armrest -armrests -arms -armscye -armseye -armsful -arm-shaped -armsize -Armstrong -Armstrong-Jones -Armuchee -armure -armures -arn -arna -Arnaeus -Arnaldo -arnatta -arnatto -arnattos -Arnaud -Arnaudville -Arnaut -arnberry -Arndt -Arne -Arneb -Arnebia -arnee -Arnegard -Arney -Arnel -Arnelle -arnement -Arnett -Arnhem -Arni -Arny -arnica -arnicas -Arnie -Arnim -Arno -Arnold -Arnoldist -Arnoldo -Arnoldsburg -Arnoldson -Arnoldsville -Arnon -Arnoseris -Arnot -arnotta -arnotto -arnottos -Arnst -ar'n't -Arnuad -Arnulf -Arnulfo -Arnusian -arnut -ARO -aroar -a-roar -aroast -Arock -Aroda -aroeira -aroid -aroideous -Aroides -aroids -aroint -aroynt -arointed -aroynted -arointing -aroynting -aroints -aroynts -Arola -arolia -arolium -arolla -aroma -aromacity -aromadendrin -aromal -Aromas -aromata -aromatic -aromatical -aromatically -aromaticity -aromaticness -aromatics -aromatise -aromatised -aromatiser -aromatising -aromatitae -aromatite -aromatites -aromatization -aromatize -aromatized -aromatizer -aromatizing -aromatophor -aromatophore -aromatous -Aron -Arona -Arondel -Arondell -Aronia -Aronoff -Aronow -Aronson -a-room -aroon -Aroostook -a-root -aroph -Aroras -Arosaguntacook -arose -around -around-the-clock -arousable -arousal -arousals -arouse -aroused -arousement -arouser -arousers -arouses -arousing -arow -a-row -aroxyl -ARP -ARPA -ARPANET -arpeggiando -arpeggiated -arpeggiation -arpeggio -arpeggioed -arpeggios -arpeggio's -arpen -arpens -arpent -arpenteur -arpents -Arpin -ARQ -arquated -arquebus -arquebuses -arquebusier -arquerite -arquifoux -Arquit -arr -arr. -arracach -arracacha -Arracacia -arrace -arrach -arrack -arracks -arrage -Arragon -arragonite -arrah -array -arrayal -arrayals -arrayan -arrayed -arrayer -arrayers -arraign -arraignability -arraignable -arraignableness -arraigned -arraigner -arraigning -arraignment -arraignments -arraignment's -arraigns -arraying -arrayment -arrays -arrame -Arran -arrand -arrange -arrangeable -arranged -arrangement -arrangements -arrangement's -arranger -arrangers -arranges -arranging -arrant -arrantly -arrantness -Arras -arrased -arrasene -arrases -arrastra -arrastre -arras-wise -arratel -Arratoon -Arrau -arrear -arrearage -arrearages -arrear-guard -arrears -arrear-ward -arrect -arrectary -arrector -Arrey -arrendation -arrendator -arrenotoky -arrenotokous -arrent -arrentable -arrentation -Arrephoria -Arrephoroi -Arrephoros -arreption -arreptitious -arrest -arrestable -arrestant -arrestation -arrested -arrestee -arrestees -arrester -arresters -arresting -arrestingly -arrestive -arrestment -arrestor -arrestors -arrestor's -arrests -arret -arretez -Arretine -Arretium -arrgt -arrha -arrhal -arrhenal -Arrhenatherum -Arrhenius -arrhenoid -arrhenotoky -arrhenotokous -Arrhephoria -arrhinia -arrhythmy -arrhythmia -arrhythmias -arrhythmic -arrhythmical -arrhythmically -arrhythmous -arrhizal -arrhizous -Arri -Arry -Arria -arriage -Arriba -arribadas -arricci -arricciati -arricciato -arricciatos -arriccio -arriccioci -arriccios -arride -arrided -arridge -arriding -arrie -arriere -arriere-ban -arriere-pensee -arriero -Arries -Arriet -Arrigny -Arrigo -Arryish -arrimby -Arrington -Arrio -arris -arrises -arrish -arrisways -arriswise -arrythmia -arrythmic -arrythmical -arrythmically -arrivage -arrival -arrivals -arrival's -arrivance -arrive -arrived -arrivederci -arrivederla -arriver -arrivers -arrives -arriving -arrivism -arrivisme -arrivist -arriviste -arrivistes -ARRL -arroba -arrobas -arrode -arrogance -arrogances -arrogancy -arrogant -arrogantly -arrogantness -arrogate -arrogated -arrogates -arrogating -arrogatingly -arrogation -arrogations -arrogative -arrogator -arroya -arroyo -arroyos -arroyuelo -arrojadite -Arron -arrondi -arrondissement -arrondissements -arrope -arrosion -arrosive -arround -arrouse -arrow -arrow-back -arrow-bearing -arrowbush -arrowed -arrow-grass -arrowhead -arrow-head -arrowheaded -arrowheads -arrowhead's -arrowy -arrowing -arrowleaf -arrow-leaved -arrowless -arrowlet -arrowlike -arrowplate -arrowroot -arrow-root -arrowroots -arrows -arrow-shaped -arrow-slain -Arrowsmith -arrow-smitten -arrowstone -arrow-toothed -arrowweed -arrowwood -arrow-wood -arrowworm -arrow-wounded -arroz -arrtez -Arruague -ARS -ARSA -Arsacid -Arsacidan -arsanilic -ARSB -arse -arsedine -arsefoot -arsehole -arsen- -arsenal -arsenals -arsenal's -arsenate -arsenates -arsenation -arseneted -arsenetted -arsenfast -arsenferratose -arsenhemol -Arseny -arseniasis -arseniate -arsenic -arsenic- -arsenical -arsenicalism -arsenicate -arsenicated -arsenicating -arsenicism -arsenicize -arsenicked -arsenicking -arsenicophagy -arsenics -arsenide -arsenides -arseniferous -arsenyl -arsenillo -arsenio- -arseniopleite -arseniosiderite -arsenious -arsenism -arsenite -arsenites -arsenium -arseniuret -arseniureted -arseniuretted -arsenization -arseno -arseno- -arsenobenzene -arsenobenzol -arsenobismite -arsenoferratin -arsenofuran -arsenohemol -arsenolite -arsenophagy -arsenophen -arsenophenylglycin -arsenophenol -arsenopyrite -arsenostyracol -arsenotherapy -arsenotungstates -arsenotungstic -arsenous -arsenoxide -arses -arsesmart -arsheen -Arshile -arshin -arshine -arshins -arsyl -arsylene -arsine -arsines -arsinic -arsino -Arsinoe -Arsinoitherium -Arsinous -Arsippe -arsis -arsy-varsy -arsy-varsiness -arsyversy -arsy-versy -arsle -ARSM -arsmetik -arsmetry -arsmetrik -arsmetrike -arsnicker -arsoite -arson -arsonate -arsonation -arsonic -arsonist -arsonists -arsonite -arsonium -arsono -arsonous -arsons -arsonvalization -arsphenamine -Arst -art -art. -Arta -artaba -artabe -Artacia -Artair -artal -Artamas -Artamidae -Artamus -artar -artarin -artarine -Artas -Artaud -ARTCC -art-colored -art-conscious -artcraft -Arte -artefac -artefact -artefacts -artel -artels -Artema -Artemas -Artemia -ARTEMIS -Artemisa -Artemisia -artemisic -artemisin -Artemision -Artemisium -artemon -Artemovsk -Artemus -arter -artery -arteri- -arteria -arteriac -arteriae -arteriagra -arterial -arterialisation -arterialise -arterialised -arterialising -arterialization -arterialize -arterialized -arterializing -arterially -arterials -arteriarctia -arteriasis -arteriectasia -arteriectasis -arteriectomy -arteriectopia -arteried -arteries -arterying -arterin -arterio- -arterioarctia -arteriocapillary -arteriococcygeal -arteriodialysis -arteriodiastasis -arteriofibrosis -arteriogenesis -arteriogram -arteriograph -arteriography -arteriographic -arteriolar -arteriole -arterioles -arteriole's -arteriolith -arteriology -arterioloscleroses -arteriolosclerosis -arteriomalacia -arteriometer -arteriomotor -arterionecrosis -arteriopalmus -arteriopathy -arteriophlebotomy -arterioplania -arterioplasty -arteriopressor -arteriorenal -arteriorrhagia -arteriorrhaphy -arteriorrhexis -arterioscleroses -arteriosclerosis -arteriosclerotic -arteriosympathectomy -arteriospasm -arteriostenosis -arteriostosis -arteriostrepsis -arteriotome -arteriotomy -arteriotomies -arteriotrepsis -arterious -arteriovenous -arterioversion -arterioverter -artery's -arteritis -Artesia -Artesian -artesonado -artesonados -Arteveld -Artevelde -artful -artfully -artfulness -artfulnesses -Artgum -Artha -Arthaud -arthel -arthemis -Arther -arthogram -arthr- -arthra -arthragra -arthral -arthralgia -arthralgic -arthrectomy -arthrectomies -arthredema -arthrempyesis -arthresthesia -arthritic -arthritical -arthritically -arthriticine -arthritics -arthritides -arthritis -arthritism -arthro- -Arthrobacter -arthrobacterium -arthrobranch -arthrobranchia -arthrocace -arthrocarcinoma -arthrocele -arthrochondritis -arthroclasia -arthrocleisis -arthroclisis -arthroderm -arthrodesis -arthrodia -arthrodiae -arthrodial -arthrodic -arthrodymic -arthrodynia -arthrodynic -Arthrodira -arthrodiran -arthrodire -arthrodirous -Arthrodonteae -arthroempyema -arthroempyesis -arthroendoscopy -Arthrogastra -arthrogastran -arthrogenous -arthrography -arthrogryposis -arthrolite -arthrolith -arthrolithiasis -arthrology -arthromeningitis -arthromere -arthromeric -arthrometer -arthrometry -arthron -arthroncus -arthroneuralgia -arthropathy -arthropathic -arthropathology -arthrophyma -arthrophlogosis -arthropyosis -arthroplasty -arthroplastic -arthropleura -arthropleure -arthropod -Arthropoda -arthropodal -arthropodan -arthropody -arthropodous -arthropods -arthropod's -Arthropomata -arthropomatous -arthropterous -arthrorheumatism -arthrorrhagia -arthrosclerosis -arthroses -arthrosia -arthrosynovitis -arthrosyrinx -arthrosis -arthrospore -arthrosporic -arthrosporous -arthrosteitis -arthrosterigma -arthrostome -arthrostomy -Arthrostraca -arthrotyphoid -arthrotome -arthrotomy -arthrotomies -arthrotrauma -arthrotropic -arthrous -arthroxerosis -Arthrozoa -arthrozoan -arthrozoic -Arthur -Arthurdale -Arthurian -Arthuriana -Arty -artiad -artic -artichoke -artichokes -artichoke's -article -articled -articles -article's -articling -Articodactyla -arty-crafty -arty-craftiness -articulability -articulable -articulacy -articulant -articular -articulare -articulary -articularly -articulars -Articulata -articulate -articulated -articulately -articulateness -articulatenesses -articulates -articulating -articulation -articulationes -articulationist -articulations -articulative -articulator -articulatory -articulatorily -articulators -articulite -articulus -Artie -artier -artiest -artifact -artifactitious -artifacts -artifact's -artifactual -artifactually -artifex -artifice -artificer -artificers -artificership -artifices -artificial -artificialism -artificiality -artificialities -artificialize -artificially -artificialness -artificialnesses -artificious -Artigas -artily -artilize -artiller -artillery -artilleries -artilleryman -artillerymen -artilleryship -artillerist -artillerists -Artima -Artimas -Artina -artiness -artinesses -artinite -Artinskian -artiodactyl -Artiodactyla -artiodactylous -artiphyllous -artisan -artisanal -artisanry -artisans -artisan's -artisanship -artist -artistdom -artiste -artiste-peintre -artistes -artistess -artistic -artistical -artistically -artist-in-residence -artistry -artistries -artists -artist's -artize -artless -artlessly -artlessness -artlessnesses -artlet -artly -artlike -art-like -art-minded -artmobile -Artocarpaceae -artocarpad -artocarpeous -artocarpous -Artocarpus -Artois -artolater -artolatry -artophagous -artophophoria -artophoria -artophorion -artotype -artotypy -Artotyrite -artou -arts -art's -artsy -Artsybashev -artsy-craftsy -artsy-craftsiness -artsier -artsiest -artsman -arts-man -arts-master -Artukovic -Artur -Arturo -Artus -artware -artwork -artworks -Artzybasheff -Artzybashev -ARU -Aruabea -Aruac -Aruba -arugola -arugolas -arugula -arugulas -arui -aruke -Arulo -Arum -arumin -arumlike -arums -Arun -Aruncus -Arundel -Arundell -arundiferous -arundinaceous -Arundinaria -arundineous -Arundo -Aruns -Arunta -Aruntas -arupa -Aruru -arusa -Arusha -aruspex -aruspice -aruspices -aruspicy -arustle -Arutiunian -Aruwimi -ARV -Arva -Arvad -Arvada -Arval -Arvales -ArvArva -arvejon -arvel -Arvell -Arverni -Arvy -Arvicola -arvicole -Arvicolinae -arvicoline -arvicolous -arviculture -Arvid -Arvida -Arvie -Arvilla -Arvin -Arvind -Arvo -Arvol -Arvonia -Arvonio -arvos -arx -Arzachel -arzan -Arzava -Arzawa -arzrunite -arzun -AS -as- -a's -ASA -ASA/BS -Asabi -asaddle -Asael -asafetida -asafoetida -Asag -Asahel -Asahi -Asahigawa -Asahikawa -ASAIGAC -asak -asale -a-sale -asamblea -asana -Asante -Asantehene -ASAP -Asaph -asaphia -Asaphic -asaphid -Asaphidae -Asaphus -asaprol -Asapurna -Asar -asarabacca -Asaraceae -Asare -Asarh -asarin -asarite -asaron -asarone -asarota -asarotum -asarta -Asarum -asarums -Asat -asb -Asben -asbest -asbestic -asbestiform -asbestine -asbestinize -asbestoid -asbestoidal -asbestos -asbestos-coated -asbestos-corrugated -asbestos-covered -asbestoses -Asbestosis -asbestos-packed -asbestos-protected -asbestos-welded -asbestous -asbestus -asbestuses -Asbjornsen -asbolan -asbolane -asbolin -asboline -asbolite -Asbury -ASC -asc- -Ascabart -Ascalabota -Ascalabus -Ascalaphus -ascan -Ascanian -Ascanius -ASCAP -Ascapart -ascape -ascare -ascared -ascariasis -ascaricidal -ascaricide -ascarid -Ascaridae -ascarides -Ascaridia -ascaridiasis -ascaridol -ascaridole -ascarids -Ascaris -ascaron -ASCC -ascebc -Ascella -ascelli -ascellus -ascence -ascend -ascendable -ascendance -ascendancy -ascendancies -ascendant -ascendantly -ascendants -ascended -ascendence -ascendency -ascendent -ascender -ascenders -ascendible -ascending -ascendingly -ascends -Ascenez -ascenseur -Ascension -ascensional -ascensionist -ascensions -Ascensiontide -ascensive -ascensor -ascent -ascents -ascertain -ascertainability -ascertainable -ascertainableness -ascertainably -ascertained -ascertainer -ascertaining -ascertainment -ascertains -ascescency -ascescent -asceses -ascesis -ascetic -ascetical -ascetically -asceticism -asceticisms -ascetics -ascetic's -Ascetta -Asch -Aschaffenburg -aschaffite -Ascham -Aschelminthes -ascher -Aschim -aschistic -asci -ascian -ascians -ascicidia -Ascidia -Ascidiacea -Ascidiae -ascidian -ascidians -ascidiate -ascidicolous -ascidiferous -ascidiform -ascidiia -ascidioid -Ascidioida -Ascidioidea -Ascidiozoa -ascidiozooid -ascidium -asciferous -ascigerous -ASCII -ascill -ascyphous -Ascyrum -ascitan -ascitb -ascite -ascites -ascitic -ascitical -ascititious -asclent -Asclepi -Asclepiad -Asclepiadaceae -asclepiadaceous -Asclepiadae -Asclepiade -Asclepiadean -asclepiadeous -Asclepiadic -Asclepian -Asclepias -asclepidin -asclepidoid -Asclepieion -asclepin -Asclepius -Asco -asco- -ascocarp -ascocarpous -ascocarps -Ascochyta -ascogenous -ascogone -ascogonia -ascogonial -ascogonidia -ascogonidium -ascogonium -ascolichen -Ascolichenes -ascoma -ascomata -ascomycetal -ascomycete -Ascomycetes -ascomycetous -ascon -Ascones -asconia -asconoid -A-scope -Ascophyllum -ascophore -ascophorous -ascorbate -ascorbic -ascospore -ascosporic -ascosporous -Ascot -Ascothoracica -ascots -ASCQ -ascry -ascribable -ascribe -ascribed -ascribes -ascribing -ascript -ascription -ascriptions -ascriptitii -ascriptitious -ascriptitius -ascriptive -ascrive -ascula -asculae -Ascupart -Ascus -Ascutney -ASDIC -asdics -ASDSP -ase -asea -a-sea -ASEAN -asearch -asecretory -aseethe -a-seethe -Aseyev -aseismatic -aseismic -aseismicity -aseitas -aseity -a-seity -Asel -aselar -aselgeia -asellate -Aselli -Asellidae -Aselline -Asellus -asem -asemasia -asemia -asemic -Asenath -Aseneth -asepalous -asepses -asepsis -aseptate -aseptic -aseptically -asepticism -asepticize -asepticized -asepticizing -aseptify -aseptol -aseptolin -Aser -asexual -asexualisation -asexualise -asexualised -asexualising -asexuality -asexualization -asexualize -asexualized -asexualizing -asexually -asexuals -asfast -asfetida -ASG -Asgard -Asgardhr -Asgarth -asgd -Asgeir -Asgeirsson -asgmt -Ash -Asha -Ashab -ashake -a-shake -ashame -ashamed -ashamedly -ashamedness -ashamnu -Ashangos -Ashantee -Ashanti -A-shaped -Asharasi -A-sharp -Ashaway -Ashbaugh -Ashbey -ash-bellied -ashberry -Ashby -ash-blond -ash-blue -Ashburn -Ashburnham -Ashburton -ashcake -ashcan -ashcans -Ashchenaz -ash-colored -Ashcroft -Ashdod -Ashdown -Ashe -Asheboro -ashed -Ashely -Ashelman -ashen -ashen-hued -Asher -Asherah -Asherahs -ashery -asheries -Asherim -Asherite -Asherites -Asherton -Ashes -ashet -Asheville -ashfall -Ashfield -Ashford -ash-free -ash-gray -ashy -Ashia -Ashien -ashier -ashiest -Ashikaga -Ashil -ashily -ashimmer -ashine -a-shine -ashiness -ashing -ashipboard -a-shipboard -Ashippun -Ashir -ashiver -a-shiver -Ashjian -ashkey -Ashkenaz -Ashkenazi -Ashkenazic -Ashkenazim -Ashkhabad -ashkoko -Ashkum -Ashla -Ashlan -Ashland -ashlar -ashlared -ashlaring -ashlars -ash-leaved -Ashlee -Ashley -Ashleigh -Ashlen -ashler -ashlered -ashlering -ashlers -ashless -Ashli -Ashly -Ashlie -Ashlin -Ashling -ash-looking -Ashluslay -Ashman -Ashmead -ashmen -Ashmolean -Ashmore -Ashochimi -Ashok -ashore -ashot -ashpan -ashpit -ashplant -ashplants -ASHRAE -Ashraf -ashrafi -ashram -ashrama -ashrams -ash-staved -ashstone -Ashtabula -ashthroat -ash-throated -Ashti -Ashton -Ashton-under-Lyne -Ashtoreth -ashtray -ashtrays -ashtray's -Ashuelot -Ashur -Ashurbanipal -ashvamedha -Ashville -ash-wednesday -ashweed -Ashwell -ash-white -Ashwin -Ashwood -ashwort -ASI -Asia -As-yakh -asialia -Asian -Asianic -Asianism -asians -Asiarch -Asiarchate -Asiatic -Asiatical -Asiatically -Asiatican -Asiaticism -Asiaticization -Asiaticize -Asiatize -ASIC -aside -asidehand -asiden -asideness -asiderite -asides -asideu -asiento -asyla -asylabia -asyle -asilid -Asilidae -asyllabia -asyllabic -asyllabical -Asilomar -asylum -asylums -Asilus -asymbiotic -asymbolia -asymbolic -asymbolical -asimen -Asimina -asimmer -a-simmer -asymmetral -asymmetranthous -asymmetry -asymmetric -asymmetrical -asymmetrically -asymmetries -asymmetrocarpous -Asymmetron -asymptomatic -asymptomatically -asymptote -asymptotes -asymptote's -asymptotic -asymptotical -asymptotically -asymtote -asymtotes -asymtotic -asymtotically -asynapsis -asynaptic -asynartete -asynartetic -async -asynchrony -asynchronism -asynchronisms -asynchronous -asynchronously -asyndesis -asyndeta -asyndetic -asyndetically -asyndeton -asyndetons -Asine -asinego -asinegoes -asynergy -asynergia -asyngamy -asyngamic -asinine -asininely -asininity -asininities -Asynjur -asyntactic -asyntrophy -ASIO -asiphonate -asiphonogama -Asir -asis -asystematic -asystole -asystolic -asystolism -asitia -Asius -Asyut -asyzygetic -ASK -askable -askance -askant -askapart -askar -askarel -Askari -askaris -asked -Askelon -asker -askers -askeses -askesis -askew -askewgee -askewness -askile -asking -askingly -askings -askip -Askja -asklent -Asklepios -askoi -askoye -askos -Askov -Askr -asks -Askwith -aslake -Aslam -aslant -aslantwise -aslaver -asleep -ASLEF -aslop -aslope -a-slug -aslumber -ASM -asmack -asmalte -Asmara -ASME -asmear -a-smear -asmile -Asmodeus -asmoke -asmolder -Asmonaean -Asmonean -a-smoulder -ASN -ASN1 -Asni -Asnieres -asniffle -asnort -a-snort -Aso -asoak -a-soak -ASOC -asocial -asok -Asoka -asomatophyte -asomatous -asonant -asonia -asop -Asopus -asor -Asosan -Asotin -asouth -a-south -ASP -Aspa -ASPAC -aspace -aspalathus -Aspalax -asparagic -asparagyl -asparagin -asparagine -asparaginic -asparaginous -asparagus -asparaguses -asparamic -asparkle -a-sparkle -Aspartame -aspartate -aspartic -aspartyl -aspartokinase -Aspasia -Aspatia -ASPCA -aspect -aspectable -aspectant -aspection -aspects -aspect's -aspectual -ASPEN -aspens -asper -asperate -asperated -asperates -asperating -asperation -aspergation -asperge -asperger -Asperges -asperggilla -asperggilli -aspergil -aspergill -aspergilla -Aspergillaceae -Aspergillales -aspergilli -aspergilliform -aspergillin -aspergilloses -aspergillosis -aspergillum -aspergillums -aspergillus -Asperifoliae -asperifoliate -asperifolious -asperite -asperity -asperities -asperly -aspermatic -aspermatism -aspermatous -aspermia -aspermic -Aspermont -aspermous -aspern -asperness -asperous -asperously -Aspers -asperse -aspersed -asperser -aspersers -asperses -aspersing -aspersion -aspersions -aspersion's -aspersive -aspersively -aspersoir -aspersor -aspersory -aspersoria -aspersorium -aspersoriums -aspersors -Asperugo -Asperula -asperuloside -asperulous -Asphalius -asphalt -asphalt-base -asphalted -asphaltene -asphalter -asphaltic -asphalting -asphaltite -asphaltlike -asphalts -asphaltum -asphaltums -asphaltus -aspheric -aspherical -aspheterism -aspheterize -asphyctic -asphyctous -asphyxy -asphyxia -asphyxial -asphyxiant -asphyxias -asphyxiate -asphyxiated -asphyxiates -asphyxiating -asphyxiation -asphyxiations -asphyxiative -asphyxiator -asphyxied -asphyxies -asphodel -Asphodelaceae -Asphodeline -asphodels -Asphodelus -aspy -Aspia -aspic -aspics -aspiculate -aspiculous -aspidate -aspide -aspidiaria -aspidinol -Aspidiotus -Aspidiske -Aspidistra -aspidistras -aspidium -Aspidobranchia -Aspidobranchiata -aspidobranchiate -Aspidocephali -Aspidochirota -Aspidoganoidei -aspidomancy -Aspidosperma -aspidospermine -Aspinwall -aspiquee -aspirant -aspirants -aspirant's -aspirata -aspiratae -aspirate -aspirated -aspirates -aspirating -aspiration -aspirations -aspiration's -aspirator -aspiratory -aspirators -aspire -aspired -aspiree -aspirer -aspirers -aspires -aspirin -aspiring -aspiringly -aspiringness -aspirins -aspis -aspises -aspish -asplanchnic -Asplenieae -asplenioid -Asplenium -asporogenic -asporogenous -asporous -asport -asportation -asporulate -aspout -a-spout -asprawl -a-sprawl -aspread -a-spread -Aspredinidae -Aspredo -asprete -aspring -asprout -a-sprout -asps -asquare -asquat -a-squat -asqueal -asquint -asquirm -a-squirm -Asquith -ASR -asrama -asramas -ASRM -Asroc -ASRS -ASS -assacu -Assad -assafetida -assafoetida -assagai -assagaied -assagaiing -assagais -assahy -assai -assay -assayable -assayed -assayer -assayers -assaying -assail -assailability -assailable -assailableness -assailant -assailants -assailant's -assailed -assailer -assailers -assailing -assailment -assails -assais -assays -assalto -Assam -Assama -assamar -Assamese -Assamites -assapan -assapanic -assapanick -Assaracus -assary -Assaria -assarion -assart -Assassin -assassinate -assassinated -assassinates -assassinating -assassination -assassinations -assassinative -assassinator -assassinatress -assassinist -assassins -assassin's -assate -assation -assaugement -assault -assaultable -assaulted -assaulter -assaulters -assaulting -assaultive -assaults -assausive -assaut -Assawoman -assbaa -ass-backwards -ass-chewing -asse -asseal -ass-ear -assecuration -assecurator -assecure -assecution -assedat -assedation -assegai -assegaied -assegaiing -assegaing -assegais -asseize -asself -assembl -assemblable -assemblage -assemblages -assemblage's -assemblagist -assemblance -assemble -assembled -assemblee -assemblement -assembler -assemblers -assembles -Assembly -assemblies -assemblyman -assemblymen -assembling -assembly's -assemblywoman -assemblywomen -Assen -assent -assentaneous -assentation -assentatious -assentator -assentatory -assentatorily -assented -assenter -assenters -assentient -assenting -assentingly -assentive -assentiveness -assentor -assentors -assents -asseour -Asser -assert -asserta -assertable -assertative -asserted -assertedly -asserter -asserters -assertible -asserting -assertingly -assertion -assertional -assertions -assertion's -assertive -assertively -assertiveness -assertivenesses -assertor -assertory -assertorial -assertorially -assertoric -assertorical -assertorically -assertorily -assertors -assertress -assertrix -asserts -assertum -asserve -asservilize -asses -assess -assessable -assessably -assessed -assessee -assesses -assessing -assession -assessionary -assessment -assessments -assessment's -assessor -assessory -assessorial -assessors -assessorship -asset -asseth -assets -asset's -asset-stripping -assever -asseverate -asseverated -asseverates -asseverating -asseveratingly -asseveration -asseverations -asseverative -asseveratively -asseveratory -assewer -asshead -ass-head -ass-headed -assheadedness -asshole -assholes -Asshur -assi -assibilate -assibilated -assibilating -assibilation -Assidaean -Assidean -assident -assidual -assidually -assiduate -assiduity -assiduities -assiduous -assiduously -assiduousness -assiduousnesses -assiege -assientist -assiento -assiette -assify -assign -assignability -assignable -assignably -assignat -assignation -assignations -assignats -assigned -assignee -assignees -assignee's -assigneeship -assigner -assigners -assigning -assignment -assignments -assignment's -assignor -assignors -assigns -assilag -assimilability -assimilable -assimilate -assimilated -assimilates -assimilating -assimilation -assimilationist -assimilations -assimilative -assimilativeness -assimilator -assimilatory -assimulate -assinego -Assiniboin -Assiniboine -Assiniboins -assyntite -assinuate -Assyr -Assyr. -Assyria -Assyrian -Assyrianize -assyrians -Assyriology -Assyriological -Assyriologist -Assyriologue -Assyro-Babylonian -Assyroid -assis -assisa -Assisan -assise -assish -assishly -assishness -Assisi -assist -assistance -assistances -assistant -assistanted -assistants -assistant's -assistantship -assistantships -assisted -assistency -assister -assisters -assistful -assisting -assistive -assistless -assistor -assistors -assists -assith -assyth -assythment -Assiut -Assyut -assize -assized -assizement -assizer -assizes -assizing -ass-kisser -ass-kissing -ass-licker -ass-licking -asslike -assman -Assmannshausen -Assmannshauser -assmanship -Assn -assn. -assobre -assoc -assoc. -associability -associable -associableness -associate -associated -associatedness -associates -associateship -associating -association -associational -associationalism -associationalist -associationism -associationist -associationistic -associations -associative -associatively -associativeness -associativity -associator -associatory -associators -associator's -associe -assoil -assoiled -assoiling -assoilment -assoils -assoilzie -assoin -assoluto -assonance -assonanced -assonances -assonant -assonantal -assonantic -assonantly -assonants -assonate -Assonet -Assonia -assoria -assort -assortative -assortatively -assorted -assortedness -assorter -assorters -assorting -assortive -assortment -assortments -assortment's -assorts -assot -Assouan -ASSR -ass-reaming -ass's -asssembler -ass-ship -asst -asst. -assuade -assuagable -assuage -assuaged -assuagement -assuagements -assuager -assuages -assuaging -Assuan -assuasive -assubjugate -assuefaction -Assuerus -assuetude -assumable -assumably -assume -assumed -assumedly -assument -assumer -assumers -assumes -assuming -assumingly -assumingness -assummon -assumpsit -assumpt -Assumption -Assumptionist -assumptions -assumption's -assumptious -assumptiousness -assumptive -assumptively -assumptiveness -Assur -assurable -assurance -assurances -assurance's -assurant -assurate -Assurbanipal -assurd -assure -assured -assuredly -assuredness -assureds -assurer -assurers -assures -assurge -assurgency -assurgent -assuring -assuringly -assuror -assurors -asswage -asswaged -asswages -asswaging -ast -Asta -astable -astacian -Astacidae -Astacus -astay -a-stay -Astaire -a-stays -Astakiwi -astalk -astarboard -a-starboard -astare -a-stare -astart -a-start -Astarte -Astartian -Astartidae -astasia -astasia-abasia -astasias -astate -astatic -astatically -astaticism -astatine -astatines -astatize -astatized -astatizer -astatizing -Astatula -asteam -asteatosis -asteep -asteer -asteism -astel -astely -astelic -aster -Astera -Asteraceae -asteraceous -Asterales -Asterella -astereognosis -Asteria -asteriae -asterial -Asterias -asteriated -Asteriidae -asterikos -asterin -Asterina -Asterinidae -asterioid -Asterion -Asterionella -asteriscus -asteriscuses -asterisk -asterisked -asterisking -asteriskless -asteriskos -asterisks -asterisk's -asterism -asterismal -asterisms -asterite -Asterius -asterixis -astern -asternal -Asternata -asternia -Asterochiton -Asterodia -asteroid -asteroidal -Asteroidea -asteroidean -asteroids -asteroid's -Asterolepidae -Asterolepis -Asteropaeus -Asterope -asterophyllite -Asterophyllites -Asterospondyli -asterospondylic -asterospondylous -Asteroxylaceae -Asteroxylon -Asterozoa -asters -aster's -astert -asterwort -asthamatic -astheny -asthenia -asthenias -asthenic -asthenical -asthenics -asthenies -asthenobiosis -asthenobiotic -asthenolith -asthenology -asthenope -asthenophobia -asthenopia -asthenopic -asthenosphere -asthma -asthmas -asthmatic -asthmatical -asthmatically -asthmatics -asthmatoid -asthmogenic -asthore -asthorin -Asti -Astian -Astyanax -astichous -Astydamia -astigmat -astigmatic -astigmatical -astigmatically -astigmatism -astigmatisms -astigmatizer -astigmatometer -astigmatometry -astigmatoscope -astigmatoscopy -astigmatoscopies -astigmia -astigmias -astigmic -astigmism -astigmometer -astigmometry -astigmoscope -astylar -Astilbe -astyllen -Astylospongia -Astylosternus -astint -astipulate -astipulation -astir -Astispumante -astite -ASTM -ASTMS -astogeny -Astolat -astomatal -astomatous -astomia -astomous -Aston -astond -astone -astoned -astony -astonied -astonies -astonying -astonish -astonished -astonishedly -astonisher -astonishes -astonishing -astonishingly -astonishingness -astonishment -astonishments -astoop -Astor -astore -Astoria -astound -astoundable -astounded -astounding -astoundingly -astoundment -astounds -astr -astr- -astr. -Astra -Astrabacus -Astrachan -astracism -astraddle -a-straddle -Astraea -Astraean -astraeid -Astraeidae -astraeiform -Astraeus -astragal -astragalar -astragalectomy -astragali -astragalocalcaneal -astragalocentral -astragalomancy -astragalonavicular -astragaloscaphoid -astragalotibial -astragals -Astragalus -Astrahan -astray -astrain -a-strain -astrakanite -Astrakhan -astral -astrally -astrals -astrand -a-strand -Astrangia -Astrantia -astraphobia -astrapophobia -Astrateia -astre -Astrea -astream -astrean -Astred -astrer -Astri -astrict -astricted -astricting -astriction -astrictive -astrictively -astrictiveness -astricts -Astrid -astride -astrier -astriferous -astrild -astringe -astringed -astringence -astringency -astringencies -astringent -astringently -astringents -astringer -astringes -astringing -astrion -astrionics -Astrix -astro- -astroalchemist -astrobiology -astrobiological -astrobiologically -astrobiologies -astrobiologist -astrobiologists -astroblast -astrobotany -Astrocaryum -astrochemist -astrochemistry -astrochronological -astrocyte -astrocytic -astrocytoma -astrocytomas -astrocytomata -astrocompass -astrodiagnosis -astrodynamic -astrodynamics -astrodome -astrofel -astrofell -astrogate -astrogated -astrogating -astrogation -astrogational -astrogator -astrogeny -astrogeology -astrogeologist -astroglia -astrognosy -astrogony -astrogonic -astrograph -astrographer -astrography -astrographic -astrohatch -astroid -astroite -astrol -astrol. -astrolabe -astrolabes -astrolabical -astrolater -astrolatry -astrolithology -astrolog -astrologaster -astrologe -astrologer -astrologers -astrology -astrologian -astrologic -astrological -astrologically -astrologies -astrologist -astrologistic -astrologists -astrologize -astrologous -astromancer -astromancy -astromantic -astromeda -astrometeorology -astro-meteorology -astrometeorological -astrometeorologist -astrometer -astrometry -astrometric -astrometrical -astron -astronaut -Astronautarum -astronautic -astronautical -astronautically -astronautics -Astronauts -astronaut's -astronavigation -astronavigator -astronomer -astronomers -astronomer's -astronomy -astronomic -astronomical -astronomically -astronomics -astronomien -astronomize -Astropecten -Astropectinidae -astrophel -astrophil -astrophyllite -astrophysical -astrophysicist -astrophysicists -astrophysics -Astrophyton -astrophobia -astrophotographer -astrophotography -astrophotographic -astrophotometer -astrophotometry -astrophotometrical -astroscope -astroscopy -Astroscopus -astrose -astrospectral -astrospectroscopic -astrosphere -astrospherecentrosomic -astrotheology -Astroturf -astructive -astrut -a-strut -Astto -astucious -astuciously -astucity -Astur -Asturian -Asturias -astute -astutely -astuteness -astutious -ASU -asuang -asudden -a-sudden -Asunci -Asuncion -asunder -Asur -Asura -Asuri -ASV -Asvins -ASW -asway -a-sway -aswail -Aswan -aswarm -a-swarm -aswash -a-swash -asweat -a-sweat -aswell -asweve -aswim -a-swim -aswing -a-swing -aswirl -aswithe -aswoon -a-swoon -aswooned -aswough -Asz -AT -at- -AT&T -at. -At/m -At/Wb -ATA -atabal -Atabalipa -atabals -atabeg -atabek -Atabyrian -Atabrine -Atacaman -Atacamenan -Atacamenian -Atacameno -atacamite -ATACC -atactic -atactiform -Ataentsic -atafter -ataghan -ataghans -Atahualpa -Ataigal -Ataiyal -Atakapa -Atakapas -atake -Atal -Atalaya -Atalayah -atalayas -Atalan -Atalanta -Atalante -Atalanti -atalantis -Atalee -Atalya -Ataliah -Atalie -Atalissa -ataman -atamans -atamasco -atamascos -atame -Atamosco -atangle -atap -ataps -atar -ataractic -Atarax -ataraxy -ataraxia -ataraxias -ataraxic -ataraxics -ataraxies -Atascadero -Atascosa -Atat -atatschite -Ataturk -ataunt -ataunto -atavi -atavic -atavism -atavisms -atavist -atavistic -atavistically -atavists -atavus -ataxaphasia -ataxy -ataxia -ataxiagram -ataxiagraph -ataxiameter -ataxiaphasia -ataxias -ataxic -ataxics -ataxies -ataxinomic -ataxite -ataxonomic -ataxophemia -atazir -ATB -Atbara -atbash -ATC -Atcheson -Atchison -Atcliffe -Atco -ATDA -ATDRS -ate -ate- -Ateba -atebrin -atechny -atechnic -atechnical -ated -atees -ateeter -atef -atef-crown -ateknia -atelectasis -atelectatic -ateleiosis -atelene -ateleological -Ateles -atelestite -atelets -ately -atelic -atelier -ateliers -ateliosis -ateliotic -Atellan -atelo -atelo- -atelocardia -atelocephalous -ateloglossia -atelognathia -atelomyelia -atelomitic -atelophobia -atelopodia -ateloprosopia -atelorachidia -atelostomia -atemoya -atemporal -a-temporal -Aten -Atenism -Atenist -A-tent -ater- -Aterian -ates -Ateste -Atestine -ateuchi -ateuchus -ATF -Atfalati -Atglen -ATH -Athabasca -Athabascan -Athabaska -Athabaskan -Athal -athalamous -Athalee -Athalia -Athaliah -Athalie -Athalla -Athallia -athalline -Athamantid -athamantin -Athamas -athamaunte -athanasy -athanasia -Athanasian -Athanasianism -Athanasianist -athanasies -Athanasius -athanor -Athapascan -Athapaskan -athar -Atharvan -Atharva-Veda -athbash -Athecae -Athecata -athecate -Athey -atheism -atheisms -atheist -atheistic -atheistical -atheistically -atheisticalness -atheisticness -atheists -atheist's -atheize -atheizer -Athel -Athelbert -athelia -atheling -athelings -Athelred -Athelstan -Athelstane -athematic -Athena -Athenaea -Athenaeum -athenaeums -Athenaeus -Athenagoras -Athenai -Athene -athenee -atheneum -atheneums -Athenian -Athenianly -athenians -Athenienne -athenor -Athens -atheology -atheological -atheologically -atheous -Athericera -athericeran -athericerous -atherine -Atherinidae -Atheriogaea -Atheriogaean -Atheris -athermancy -athermanous -athermic -athermous -atherogenesis -atherogenic -atheroma -atheromas -atheromasia -atheromata -atheromatosis -atheromatous -atheroscleroses -atherosclerosis -atherosclerotic -atherosclerotically -Atherosperma -Atherton -Atherurus -athetesis -atheticize -athetize -athetized -athetizing -athetoid -athetoids -athetosic -athetosis -athetotic -Athie -athymy -athymia -athymic -athing -athink -athyreosis -athyria -athyrid -Athyridae -Athyris -Athyrium -athyroid -athyroidism -athyrosis -athirst -Athiste -athlete -athletehood -athletes -athlete's -athletic -athletical -athletically -athleticism -athletics -athletism -athletocracy -athlothete -athlothetes -athodyd -athodyds -athogen -Athol -athold -at-home -at-homeish -at-homeishness -at-homeness -athonite -athort -Athos -athrepsia -athreptic -athrill -a-thrill -athrive -athrob -a-throb -athrocyte -athrocytosis -athrogenic -athrong -a-throng -athrough -athumia -athwart -athwarthawse -athwartship -athwartships -athwartwise -ATI -Atiana -atic -Atik -Atikokania -Atila -atile -atilt -atimy -Atymnius -atimon -ating -atinga -atingle -atinkle -ation -atip -atypy -atypic -atypical -atypicality -atypically -atiptoe -a-tiptoe -ATIS -Atys -ative -ATK -Atka -Atkins -Atkinson -Atlanta -atlantad -atlantal -Atlante -Atlantean -atlantes -Atlantic -Atlantica -Atlantid -Atlantides -Atlantis -atlantite -atlanto- -atlantoaxial -atlantodidymus -atlantomastoid -Atlanto-mediterranean -atlantoodontoid -Atlantosaurus -at-large -ATLAS -Atlas-Agena -Atlasburg -Atlas-Centaur -atlases -Atlaslike -Atlas-Score -atlatl -atlatls -atle -Atlee -Atli -atlo- -atloaxoid -atloid -atloidean -atloidoaxoid -atloido-occipital -atlo-odontoid -ATM -atm. -atma -Atman -atmans -atmas -atmiatry -atmiatrics -atmid -atmidalbumin -atmidometer -atmidometry -atmo -atmo- -atmocausis -atmocautery -atmoclastic -atmogenic -atmograph -atmolyses -atmolysis -atmolyzation -atmolyze -atmolyzer -atmology -atmologic -atmological -atmologist -atmometer -atmometry -atmometric -atmophile -Atmore -atmos -atmosphere -atmosphered -atmosphereful -atmosphereless -atmospheres -atmosphere's -atmospheric -atmospherical -atmospherically -atmospherics -atmospherium -atmospherology -atmostea -atmosteal -atmosteon -ATMS -ATN -Atnah -ATO -atocha -atocia -Atoka -atokal -atoke -atokous -atole -a-tolyl -atoll -atolls -atoll's -atom -atomatic -atom-bomb -atom-chipping -atomechanics -atomerg -atomy -atomic -atomical -atomically -atomician -atomicism -atomicity -atomics -atomies -atomiferous -atomisation -atomise -atomised -atomises -atomising -atomism -atomisms -atomist -atomistic -atomistical -atomistically -atomistics -atomists -atomity -atomization -atomize -atomized -atomizer -atomizers -atomizes -atomizing -atomology -atom-rocket -ATOMS -atom's -atom-smashing -atom-tagger -atom-tagging -Aton -atonable -atonal -atonalism -atonalist -atonalistic -atonality -atonally -atone -atoneable -atoned -atonement -atonements -atoneness -atoner -atoners -atones -atony -atonia -atonic -atonicity -atonics -atonies -atoning -atoningly -Atonsah -atop -atopen -Atophan -atopy -atopic -atopies -atopite -ator -Atorai -atory -Atossa -atour -atoxic -Atoxyl -ATP -ATP2 -ATPCO -atpoints -ATR -atrabilaire -atrabilar -atrabilarian -atrabilarious -atrabile -atrabiliar -atrabiliary -atrabiliarious -atrabilious -atrabiliousness -atracheate -Atractaspis -Atragene -Atrahasis -atrail -atrament -atramental -atramentary -atramentous -atraumatic -Atrax -atrazine -atrazines -Atrebates -atrede -Atremata -atremate -atrematous -atremble -a-tremble -atren -atrenne -atrepsy -atreptic -atresy -atresia -atresias -atresic -atretic -Atreus -atry -a-try -atria -atrial -atrible -Atrice -atrichia -atrichic -atrichosis -atrichous -atrickle -Atridae -Atridean -atrienses -atriensis -atriocoelomic -atrioporal -atriopore -atrioventricular -atrip -a-trip -Atrypa -Atriplex -atrypoid -atrium -atriums -atro- -atroce -atroceruleous -atroceruleus -atrocha -atrochal -atrochous -atrocious -atrociously -atrociousness -atrociousnesses -atrocity -atrocities -atrocity's -atrocoeruleus -atrolactic -Atronna -Atropa -atropaceous -atropal -atropamine -Atropatene -atrophy -atrophia -atrophias -atrophiated -atrophic -atrophied -atrophies -atrophying -atrophoderma -atrophous -atropia -atropic -Atropidae -atropin -atropine -atropines -atropinism -atropinization -atropinize -atropins -atropism -atropisms -Atropos -atropous -atrorubent -atrosanguineous -atroscine -atrous -ATRS -ATS -atsara -Atsugi -ATT -att. -Atta -attababy -attabal -attaboy -Attacapan -attacca -attacco -attach -attachable -attachableness -attache -attached -attachedly -attacher -attachers -attaches -attacheship -attaching -attachment -attachments -attachment's -attack -attackable -attacked -attacker -attackers -attacking -attackingly -attackman -attacks -attacolite -Attacus -attagal -attagen -attaghan -attagirl -Attah -attain -attainability -attainabilities -attainable -attainableness -attainably -attainder -attainders -attained -attainer -attainers -attaining -attainment -attainments -attainment's -attainor -attains -attaint -attainted -attainting -attaintment -attaints -attainture -attal -Attalanta -Attalea -attaleh -Attalid -Attalie -Attalla -attame -attapulgite -Attapulgus -attar -attargul -attars -attask -attaste -attatched -attatches -ATTC -ATTCOM -atte -atteal -attemper -attemperament -attemperance -attemperate -attemperately -attemperation -attemperator -attempered -attempering -attempers -attempre -attempt -attemptability -attemptable -attempted -attempter -attempters -attempting -attemptive -attemptless -attempts -Attenborough -attend -attendance -attendances -attendance's -attendancy -attendant -attendantly -attendants -attendant's -attended -attendee -attendees -attendee's -attender -attenders -attending -attendingly -attendings -attendment -attendress -attends -attensity -attent -attentat -attentate -attention -attentional -attentionality -attention-getting -attentions -attention's -attentive -attentively -attentiveness -attentivenesses -attently -attenuable -attenuant -attenuate -attenuated -attenuates -attenuating -attenuation -attenuations -attenuative -attenuator -attenuators -attenuator's -Attenweiler -atter -Atterbury -attercop -attercrop -attery -atterminal -attermine -attermined -atterminement -attern -atterr -atterrate -attest -attestable -attestant -attestation -attestations -attestative -attestator -attested -attester -attesters -attesting -attestive -attestor -attestors -attests -Atthia -atty -atty. -Attic -Attica -Attical -attice -Atticise -Atticised -Atticising -Atticism -atticisms -Atticist -atticists -Atticize -Atticized -Atticizing -atticomastoid -attics -attic's -attid -Attidae -Attila -attinge -attingence -attingency -attingent -attirail -attire -attired -attirement -attirer -attires -attiring -ATTIS -attitude -attitudes -attitude's -attitudinal -attitudinarian -attitudinarianism -attitudinise -attitudinised -attitudiniser -attitudinising -attitudinize -attitudinized -attitudinizer -attitudinizes -attitudinizing -attitudist -Attius -Attiwendaronk -attle -Attleboro -Attlee -attn -attntrp -atto- -attollent -attomy -attorn -attornare -attorned -attorney -attorney-at-law -attorneydom -attorney-generalship -attorney-in-fact -attorneyism -attorneys -attorney's -attorneys-at-law -attorneyship -attorneys-in-fact -attorning -attornment -attorns -attouchement -attour -attourne -attract -attractability -attractable -attractableness -attractance -attractancy -attractant -attractants -attracted -attracted-disk -attracter -attractile -attracting -attractingly -attraction -attractionally -attractions -attraction's -attractive -attractively -attractiveness -attractivenesses -attractivity -attractor -attractors -attractor's -attracts -attrahent -attrap -attrectation -attry -attrib -attrib. -attributable -attributal -attribute -attributed -attributer -attributes -attributing -attribution -attributional -attributions -attributive -attributively -attributiveness -attributives -attributor -attrist -attrite -attrited -attriteness -attriting -attrition -attritional -attritive -attritus -attriutively -attroopment -attroupement -Attu -attune -attuned -attunely -attunement -attunes -attuning -atturn -Attwood -atua -Atuami -Atul -atule -Atum -atumble -a-tumble -atune -ATV -atveen -atwain -a-twain -Atwater -atweel -atween -Atwekk -atwin -atwind -atwirl -atwist -a-twist -atwitch -atwite -atwitter -a-twitter -atwixt -atwo -a-two -Atwood -Atworth -AU -AUA -auantic -aubade -aubades -aubain -aubaine -Aubanel -Aubarta -Aube -aubepine -Auber -Auberbach -Auberge -auberges -aubergine -aubergiste -aubergistes -Auberon -Auberry -Aubert -Auberta -Aubervilliers -Aubigny -Aubin -Aubyn -Aubine -Aubree -Aubrey -Aubreir -aubretia -aubretias -Aubrette -Aubry -Aubrie -aubrieta -aubrietas -Aubrietia -aubrite -Auburn -Auburndale -auburn-haired -auburns -Auburntown -Auburta -Aubusson -AUC -Auca -Aucan -Aucaner -Aucanian -Auchenia -auchenium -Auchincloss -Auchinleck -auchlet -aucht -Auckland -auctary -auction -auctionary -auctioned -auctioneer -auctioneers -auctioneer's -auctioning -auctions -auctor -auctorial -auctorizate -auctors -Aucuba -aucubas -aucupate -aud -aud. -audace -audacious -audaciously -audaciousness -audacity -audacities -audad -audads -Audaean -Aude -Auden -Audette -Audhumbla -Audhumla -Audi -Audy -Audian -Audibertia -audibility -audible -audibleness -audibles -audibly -Audie -audience -audience-proof -audiencer -audiences -audience's -audiencia -audiencier -audient -audients -audile -audiles -auding -audings -audio -audio- -audioemission -audio-frequency -audiogenic -audiogram -audiograms -audiogram's -audiology -audiological -audiologies -audiologist -audiologists -audiologist's -audiometer -audiometers -audiometry -audiometric -audiometrically -audiometries -audiometrist -Audion -audiophile -audiophiles -audios -audiotape -audiotapes -audiotypist -audiovisual -audio-visual -audio-visually -audiovisuals -audiphone -audit -auditable -audited -auditing -audition -auditioned -auditioning -auditions -audition's -auditive -auditives -auditor -auditor-general -auditory -auditoria -auditorial -auditorially -auditories -auditorily -auditorium -auditoriums -auditors -auditor's -auditors-general -auditorship -auditotoria -auditress -audits -auditual -audivise -audiviser -audivision -AUDIX -Audley -Audly -Audra -Audras -Audre -Audrey -Audres -Audri -Audry -Audrie -Audrye -Audris -Audrit -Audsley -Audubon -Audubonistic -Audun -Audwen -Audwin -Auer -Auerbach -Aueto -AUEW -auf -aufait -aufgabe -Aufklarung -Aufklrung -Aufmann -auftakt -Aug -Aug. -auganite -Auge -Augean -Augeas -augelite -Augelot -augen -augend -augends -augen-gabbro -augen-gneiss -auger -augerer -auger-nose -augers -auger's -auger-type -auget -augh -aught -aughtlins -aughts -Augy -Augie -Augier -augite -augite-porphyry -augite-porphyrite -augites -augitic -augitite -augitophyre -augment -augmentable -augmentation -augmentationer -augmentations -augmentative -augmentatively -augmented -augmentedly -augmenter -augmenters -augmenting -augmentive -augmentor -augments -Augres -augrim -Augsburg -augur -augural -augurate -auguration -augure -augured -augurer -augurers -augury -augurial -auguries -auguring -augurous -augurs -augurship -August -Augusta -augustal -Augustales -Augustan -Auguste -auguster -augustest -Augusti -Augustin -Augustina -Augustine -Augustinian -Augustinianism -Augustinism -augustly -augustness -Augusto -Augustus -auh -auhuhu -AUI -Auk -auklet -auklets -auks -auksinai -auksinas -auksinu -aul -aula -aulacocarpous -Aulacodus -Aulacomniaceae -Aulacomnium -aulae -Aulander -Aulard -aularian -aulas -auld -aulder -auldest -auld-farran -auld-farrand -auld-farrant -auldfarrantlike -auld-warld -Aulea -auletai -aulete -auletes -auletic -auletrides -auletris -aulic -aulical -aulicism -Auliffe -Aulis -aullay -auln- -auloi -aulophyte -aulophobia -aulos -Aulostoma -Aulostomatidae -Aulostomi -aulostomid -Aulostomidae -Aulostomus -Ault -Aultman -aulu -AUM -aumaga -aumail -aumakua -aumbry -aumbries -aumery -aumil -aumildar -aummbulatory -aumoniere -aumous -aumrie -Aumsville -Aun -aunc- -auncel -Aundrea -aune -Aunjetitz -Aunson -aunt -aunter -aunters -aunthood -aunthoods -aunty -auntie -aunties -auntish -auntly -auntlier -auntliest -auntlike -auntre -auntrous -aunts -aunt's -auntsary -auntship -AUP -aupaka -aur- -AURA -aurae -Aural -aurally -auramin -auramine -aurang -Aurangzeb -aurantia -Aurantiaceae -aurantiaceous -Aurantium -aurar -auras -aura's -aurata -aurate -aurated -Aurea -aureal -aureate -aureately -aureateness -aureation -aurei -aureity -Aurel -Aurelea -Aurelia -Aurelian -Aurelie -Aurelio -Aurelius -aurene -Aureocasidium -aureola -aureolae -aureolas -aureole -aureoled -aureoles -aureolin -aureoline -aureoling -Aureomycin -aureous -aureously -Aures -auresca -aureus -Auria -auribromide -Auric -aurichalcite -aurichalcum -aurichloride -aurichlorohydric -auricyanhydric -auricyanic -auricyanide -auricle -auricled -auricles -auricomous -Auricula -auriculae -auricular -auriculare -auriculares -Auricularia -Auriculariaceae -auriculariae -Auriculariales -auricularian -auricularias -auricularis -auricularly -auriculars -auriculas -auriculate -auriculated -auriculately -Auriculidae -auriculo -auriculocranial -auriculoid -auriculo-infraorbital -auriculo-occipital -auriculoparietal -auriculotemporal -auriculoventricular -auriculovertical -auride -Aurie -auriferous -aurifex -aurify -aurific -aurification -aurified -aurifying -auriflamme -auriform -Auriga -Aurigae -aurigal -aurigation -aurigerous -Aurigid -Aurignac -Aurignacian -aurigo -aurigraphy -auri-iodide -auryl -aurilave -Aurilia -aurin -aurinasal -aurine -Auriol -auriphone -auriphrygia -auriphrygiate -auripigment -auripuncture -aurir -auris -auriscalp -auriscalpia -auriscalpium -auriscope -auriscopy -auriscopic -auriscopically -aurist -aurists -Aurita -aurite -aurited -aurivorous -Aurlie -auro- -auroauric -aurobromide -auroch -aurochloride -aurochs -aurochses -aurocyanide -aurodiamine -auronal -Auroora -aurophobia -aurophore -Aurora -aurorae -auroral -aurorally -auroras -Aurore -aurorean -Aurorian -aurorium -aurotellurite -aurothiosulphate -aurothiosulphuric -aurous -aurrescu -Aurthur -aurulent -Aurum -aurums -aurung -Aurungzeb -aurure -AUS -Aus. -Ausable -Auschwitz -auscult -auscultascope -auscultate -auscultated -auscultates -auscultating -auscultation -auscultations -auscultative -auscultator -auscultatory -Auscultoscope -Ause -ausform -ausformed -ausforming -ausforms -ausgespielt -Ausgleich -Ausgleiche -Aushar -Auslander -auslaut -auslaute -Auslese -Ausones -Ausonian -Ausonius -auspex -auspicate -auspicated -auspicating -auspice -auspices -auspicy -auspicial -auspicious -auspiciously -auspiciousness -Aussie -aussies -Aust -Aust. -Austafrican -austausch -Austell -austemper -Austen -austenite -austenitic -austenitize -austenitized -austenitizing -Auster -austere -austerely -austereness -austerer -austerest -austerity -austerities -Austerlitz -austerus -Austin -Austina -Austinburg -Austine -Austinville -Auston -austr- -Austral -Austral. -Australanthropus -Australasia -Australasian -Australe -australene -Austral-english -Australia -Australian -Australiana -Australianism -Australianize -Australian-oak -australians -Australic -Australioid -Australis -australite -Australoid -Australopithecinae -Australopithecine -Australopithecus -Australorp -australs -Austrasia -Austrasian -Austreng -Austria -Austria-Hungary -Austrian -Austrianize -austrians -Austric -austrine -austringer -austrium -Austro- -Austroasiatic -Austro-Asiatic -Austro-columbia -Austro-columbian -Austrogaea -Austrogaean -Austro-Hungarian -Austro-malayan -austromancy -Austronesia -Austronesian -Austrophil -Austrophile -Austrophilism -Austroriparian -Austro-swiss -Austwell -ausu -ausubo -ausubos -aut- -autacoid -autacoidal -autacoids -autaesthesy -autallotriomorphic -autantitypy -autarch -autarchy -autarchic -autarchical -autarchically -autarchies -autarchist -Autarchoglossa -autarky -autarkic -autarkical -autarkically -autarkies -autarkik -autarkikal -autarkist -Autaugaville -aute -autechoscope -autecy -autecious -auteciously -auteciousness -autecism -autecisms -autecology -autecologic -autecological -autecologically -autecologist -autem -autere -Auteuil -auteur -auteurism -auteurs -autexousy -auth -auth. -authentic -authentical -authentically -authenticalness -authenticatable -authenticate -authenticated -authenticates -authenticating -authentication -authentications -authenticator -authenticators -authenticity -authenticities -authenticly -authenticness -authigene -authigenetic -authigenic -authigenous -Authon -author -authorcraft -author-created -authored -author-entry -authoress -authoresses -authorhood -authorial -authorially -authoring -authorisable -authorisation -authorise -authorised -authoriser -authorish -authorising -authorism -authoritarian -authoritarianism -authoritarianisms -authoritarians -authoritative -authoritatively -authoritativeness -authority -authorities -authority's -authorizable -authorization -authorizations -authorization's -authorize -authorized -authorizer -authorizers -authorizes -authorizing -authorless -authorly -authorling -author-publisher -author-ridden -authors -author's -authorship -authorships -authotype -autism -autisms -autist -autistic -auto -auto- -auto. -autoabstract -autoactivation -autoactive -autoaddress -autoagglutinating -autoagglutination -autoagglutinin -autoalarm -auto-alarm -autoalkylation -autoallogamy -autoallogamous -autoanalysis -autoanalytic -autoantibody -autoanticomplement -autoantitoxin -autoasphyxiation -autoaspiration -autoassimilation -auto-audible -Autobahn -autobahnen -autobahns -autobasidia -Autobasidiomycetes -autobasidiomycetous -autobasidium -Autobasisii -autobiographal -autobiographer -autobiographers -autobiography -autobiographic -autobiographical -autobiographically -autobiographies -autobiography's -autobiographist -autobiology -autoblast -autoboat -autoboating -autobolide -autobus -autobuses -autobusses -autocab -autocade -autocades -autocall -autocamp -autocamper -autocamping -autocar -autocarist -autocarp -autocarpian -autocarpic -autocarpous -autocatalepsy -autocatalyses -autocatalysis -autocatalytic -autocatalytically -autocatalyze -autocatharsis -autocatheterism -autocephaly -autocephalia -autocephalic -autocephality -autocephalous -autoceptive -autochanger -autochemical -autocholecystectomy -autochrome -autochromy -autochronograph -autochthon -autochthonal -autochthones -autochthony -autochthonic -autochthonism -autochthonous -autochthonously -autochthonousness -autochthons -autochton -autocycle -autocide -autocinesis -autocystoplasty -autocytolysis -autocytolytic -autoclasis -autoclastic -autoclave -autoclaved -autoclaves -autoclaving -autocoder -autocoenobium -autocoherer -autocoid -autocoids -autocollimate -autocollimation -autocollimator -autocollimators -autocolony -autocombustible -autocombustion -autocomplexes -autocondensation -autoconduction -autoconvection -autoconverter -autocopist -autocoprophagous -autocorrelate -autocorrelation -autocorrosion -autocosm -autocracy -autocracies -autocrat -autocratic -autocratical -autocratically -autocraticalness -autocrator -autocratoric -autocratorical -autocratrix -autocrats -autocrat's -autocratship -autocremation -autocriticism -autocross -autocue -auto-da-f -auto-dafe -auto-da-fe -autodecomposition -autodecrement -autodecremented -autodecrements -autodepolymerization -autodermic -autodestruction -autodetector -autodiagnosis -autodiagnostic -autodiagrammatic -autodial -autodialed -autodialer -autodialers -autodialing -autodialled -autodialling -autodials -autodidact -autodidactic -autodidactically -autodidacts -autodifferentiation -autodiffusion -autodigestion -autodigestive -AUTODIN -autodynamic -autodyne -autodynes -autodrainage -autodrome -autoecholalia -autoecy -autoecic -autoecious -autoeciously -autoeciousness -autoecism -autoecous -autoed -autoeducation -autoeducative -autoelectrolysis -autoelectrolytic -autoelectronic -autoelevation -autoepigraph -autoepilation -autoerotic -autoerotically -autoeroticism -autoerotism -autoette -autoexcitation -autofecundation -autofermentation -autofluorescence -autoformation -autofrettage -autogamy -autogamic -autogamies -autogamous -autogauge -autogeneal -autogeneses -autogenesis -autogenetic -autogenetically -autogeny -autogenic -autogenies -autogenous -autogenously -autogenuous -Autogiro -autogyro -autogiros -autogyros -autognosis -autognostic -autograft -autografting -autogram -autograph -autographal -autographed -autographer -autography -autographic -autographical -autographically -autographing -autographism -autographist -autographometer -autographs -autogravure -Autoharp -autoheader -autohemic -autohemolysin -autohemolysis -autohemolytic -autohemorrhage -autohemotherapy -autoheterodyne -autoheterosis -autohexaploid -autohybridization -autohypnosis -autohypnotic -autohypnotically -autohypnotism -autohypnotization -autoicous -autoignition -autoimmune -autoimmunity -autoimmunities -autoimmunization -autoimmunize -autoimmunized -autoimmunizing -autoincrement -autoincremented -autoincrements -autoindex -autoindexing -autoinduction -autoinductive -autoinfection -auto-infection -autoinfusion -autoing -autoinhibited -auto-inoculability -autoinoculable -auto-inoculable -autoinoculation -auto-inoculation -autointellectual -autointoxicant -autointoxication -autoionization -autoirrigation -autoist -autojigger -autojuggernaut -autokinesy -autokinesis -autokinetic -autokrator -autolaryngoscope -autolaryngoscopy -autolaryngoscopic -autolater -autolatry -autolavage -autolesion -Autolycus -autolimnetic -autolysate -autolysate-precipitate -autolyse -autolysin -autolysis -autolith -autolithograph -autolithographer -autolithography -autolithographic -autolytic -Autolytus -autolyzate -autolyze -autolyzed -autolyzes -autolyzing -autoloader -autoloaders -autoloading -autology -autological -autologist -autologous -autoluminescence -autoluminescent -automa -automacy -automaker -automan -automania -automanipulation -automanipulative -automanual -automat -automata -automatable -automate -automateable -automated -automates -automatic -automatical -automatically -automaticity -automatics -automatictacessing -automatin -automating -automation -automations -automatism -automatist -automative -automatization -automatize -automatized -automatizes -automatizing -automatograph -automaton -automatonlike -automatons -automatonta -automatontons -automatous -automats -automechanical -automechanism -Automedon -automelon -automen -autometamorphosis -autometry -autometric -automysophobia -automobile -automobiled -automobiles -automobile's -automobiling -automobilism -automobilist -automobilistic -automobilists -automobility -automolite -automonstration -automorph -automorphic -automorphically -automorphic-granular -automorphism -automotive -automotor -automower -autompne -autonavigator -autonavigators -autonavigator's -autonegation -autonephrectomy -autonephrotoxin -autonetics -autoneurotoxin -autonym -autonitridation -Autonoe -autonoetic -autonomasy -autonomy -autonomic -autonomical -autonomically -autonomies -autonomist -autonomize -autonomous -autonomously -autonomousness -auto-objective -auto-observation -auto-omnibus -auto-ophthalmoscope -auto-ophthalmoscopy -autooxidation -auto-oxidation -auto-oxidize -autoparasitism -autopathy -autopathic -autopathography -autopelagic -autopepsia -autophagi -autophagy -autophagia -autophagous -autophyllogeny -autophyte -autophytic -autophytically -autophytograph -autophytography -autophoby -autophobia -autophon -autophone -autophony -autophonoscope -autophonous -autophotoelectric -autophotograph -autophotometry -autophthalmoscope -autopilot -autopilots -autopilot's -autopyotherapy -autopista -autoplagiarism -autoplasmotherapy -autoplast -autoplasty -autoplastic -autoplastically -autoplasties -autopneumatic -autopoint -autopoisonous -autopolar -autopolyploid -autopolyploidy -autopolo -autopoloist -autopore -autoportrait -autoportraiture -Autopositive -autopotamic -autopotent -autoprogressive -autoproteolysis -autoprothesis -autopsy -autopsic -autopsical -autopsychic -autopsychoanalysis -autopsychology -autopsychorhythmia -autopsychosis -autopsied -autopsies -autopsying -autopsist -autoptic -autoptical -autoptically -autopticity -autoput -autor -autoracemization -autoradiogram -autoradiograph -autoradiography -autoradiographic -autorail -autoreduction -autoreflection -autoregenerator -autoregressive -autoregulation -autoregulative -autoregulatory -autoreinfusion -autoretardation -autorhythmic -autorhythmus -auto-rickshaw -auto-rifle -autoriser -autorotate -autorotation -autorotational -autoroute -autorrhaphy -autos -auto's -Autosauri -Autosauria -autoschediasm -autoschediastic -autoschediastical -autoschediastically -autoschediaze -autoscience -autoscope -autoscopy -autoscopic -autosender -autosensitization -autosensitized -autosepticemia -autoserotherapy -autoserum -autosexing -autosight -autosign -autosymbiontic -autosymbolic -autosymbolical -autosymbolically -autosymnoia -Autosyn -autosyndesis -autosite -autositic -autoskeleton -autosled -autoslip -autosomal -autosomally -autosomatognosis -autosomatognostic -autosome -autosomes -autosoteric -autosoterism -autospore -autosporic -autospray -autostability -autostage -autostandardization -autostarter -autostethoscope -autostyly -autostylic -autostylism -autostoper -autostrada -autostradas -autosuggest -autosuggestibility -autosuggestible -autosuggestion -autosuggestionist -autosuggestions -autosuggestive -autosuppression -autota -autotelegraph -autotelic -autotelism -autotetraploid -autotetraploidy -autothaumaturgist -autotheater -autotheism -autotheist -autotherapeutic -autotherapy -autothermy -autotimer -autotype -autotypes -autotyphization -autotypy -autotypic -autotypies -autotypography -autotomy -autotomic -autotomies -autotomise -autotomised -autotomising -autotomize -autotomized -autotomizing -autotomous -autotoxaemia -autotoxemia -autotoxic -autotoxication -autotoxicity -autotoxicosis -autotoxin -autotoxis -autotractor -autotransformer -autotransfusion -autotransplant -autotransplantation -autotrepanation -autotriploid -autotriploidy -autotroph -autotrophy -autotrophic -autotrophically -autotropic -autotropically -autotropism -autotruck -autotuberculin -autoturning -autourine -autovaccination -autovaccine -autovalet -autovalve -autovivisection -AUTOVON -autoxeny -autoxidation -autoxidation-reduction -autoxidator -autoxidizability -autoxidizable -autoxidize -autoxidizer -autozooid -Autrain -Autrans -autre -autrefois -Autrey -Autry -Autryville -Autum -Autumn -autumnal -autumnally -autumn-brown -Autumni -autumnian -autumnity -autumns -autumn's -autumn-spring -Autun -Autunian -autunite -autunites -auturgy -Auvergne -Auvil -Auwers -AUX -aux. -auxamylase -auxanogram -auxanology -auxanometer -auxeses -auxesis -auxetic -auxetical -auxetically -auxetics -AUXF -Auxier -auxil -auxiliar -auxiliary -auxiliaries -auxiliarly -auxiliate -auxiliation -auxiliator -auxiliatory -auxilytic -auxilium -auxillary -auximone -auxin -auxinic -auxinically -auxins -Auxo -auxoaction -auxoamylase -auxoblast -auxobody -auxocardia -auxochrome -auxochromic -auxochromism -auxochromous -auxocyte -auxoflore -auxofluor -auxograph -auxographic -auxohormone -auxology -auxometer -auxospore -auxosubstance -auxotonic -auxotox -auxotroph -auxotrophy -auxotrophic -Auxvasse -Auzout -AV -av- -a-v -av. -Ava -avadana -avadavat -avadavats -avadhuta -avahi -avail -availabile -availability -availabilities -available -availableness -availably -availed -availer -availers -availing -availingly -availment -avails -aval -avalanche -avalanched -avalanches -avalanching -avale -avalent -Avallon -Avalokita -Avalokitesvara -Avalon -avalvular -Avan -avance -Avanguardisti -avania -avanious -avanyu -Avant -avant- -avantage -avant-courier -avanters -avantgarde -avant-garde -avant-gardism -avant-gardist -Avanti -avantlay -avant-propos -avanturine -Avar -Avaradrano -avaram -avaremotemo -Avaria -Avarian -avarice -avarices -avaricious -avariciously -avariciousness -Avarish -avaritia -Avars -avascular -avast -avatar -avatara -avatars -avaunt -Avawam -AVC -AVD -avdp -avdp. -Ave -Ave. -Avebury -Aveiro -Aveyron -Avelin -Avelina -Aveline -avell -Avella -avellan -avellane -Avellaneda -avellaneous -avellano -Avellino -avelonge -aveloz -Avena -avenaceous -avenage -Avenal -avenalin -avenant -avenary -Avenel -avener -avenery -avenge -avenged -avengeful -avengement -avenger -avengeress -avengers -avenges -avenging -avengingly -aveny -avenida -aveniform -avenin -avenine -avenolith -avenous -avens -avenses -aventail -aventayle -aventails -Aventine -aventre -aventure -aventurin -aventurine -avenue -avenues -avenue's -aver -aver- -Avera -average -averaged -averagely -averageness -averager -averages -averaging -averah -Averell -Averi -Avery -averia -Averil -Averyl -Averill -averin -Averir -averish -averment -averments -avern -Avernal -Averno -Avernus -averrable -averral -averred -averrer -Averrhoa -Averrhoism -Averrhoist -Averrhoistic -averring -Averroes -Averroism -Averroist -Averroistic -averruncate -averruncation -averruncator -avers -aversant -aversation -averse -aversely -averseness -aversion -aversions -aversion's -aversive -avert -avertable -averted -avertedly -averter -avertible -avertiment -Avertin -averting -avertive -averts -Aves -Avesta -Avestan -avestruz -aveugle -avg -avg. -avgas -avgases -avgasses -Avi -aviador -avyayibhava -avian -avianization -avianize -avianized -avianizes -avianizing -avians -aviararies -aviary -aviaries -aviarist -aviarists -aviate -aviated -aviates -aviatic -aviating -aviation -aviational -aviations -aviator -aviatory -aviatorial -aviatoriality -aviators -aviator's -aviatress -aviatrice -aviatrices -aviatrix -aviatrixes -Avice -Avicebron -Avicenna -Avicennia -Avicenniaceae -Avicennism -avichi -avicide -avick -avicolous -Avictor -Avicula -avicular -Avicularia -avicularian -Aviculariidae -Avicularimorphae -avicularium -Aviculidae -aviculture -aviculturist -avid -avidya -avidin -avidins -avidious -avidiously -avidity -avidities -avidly -avidness -avidnesses -avidous -Avie -Aviemore -aview -avifauna -avifaunae -avifaunal -avifaunally -avifaunas -avifaunistic -avigate -avigation -avigator -avigators -Avigdor -Avignon -Avignonese -avijja -Avikom -Avila -avilaria -avile -avilement -Avilion -Avilla -avine -Avinger -aviolite -avion -avion-canon -avionic -avionics -avions -avirulence -avirulent -Avis -avys -Avisco -avision -aviso -avisos -Aviston -avital -avitaminoses -avitaminosis -avitaminotic -avitic -Avitzur -Aviv -Aviva -Avivah -avives -avizandum -AVLIS -Avlona -AVM -avn -avn. -Avner -Avo -Avoca -avocado -avocadoes -avocados -avocat -avocate -avocation -avocational -avocationally -avocations -avocation's -avocative -avocatory -avocet -avocets -avodire -avodires -avogadrite -Avogadro -avogram -avoy -avoid -avoidable -avoidably -avoidance -avoidances -avoidant -avoided -avoider -avoiders -avoiding -avoidless -avoidment -avoids -avoidupois -avoidupoises -avoyer -avoyership -avoir -avoir. -avoirdupois -avoke -avolate -avolation -avolitional -Avon -Avondale -avondbloem -Avonmore -Avonne -avos -avoset -avosets -avouch -avouchable -avouched -avoucher -avouchers -avouches -avouching -avouchment -avoue -avour -avoure -avourneen -avouter -avoutry -avow -avowable -avowableness -avowably -avowal -avowals -avowance -avowant -avowe -avowed -avowedly -avowedness -avower -avowers -avowing -avowry -avowries -avows -avowter -Avra -Avraham -Avram -Avril -Avrit -Avrom -Avron -Avruch -Avshar -avulse -avulsed -avulses -avulsing -avulsion -avulsions -avuncular -avunculate -avunculize -AW -aw- -awa -Awabakal -awabi -AWACS -Awad -Awadhi -awaft -awag -away -away-going -awayness -awaynesses -aways -await -awaited -awaiter -awaiters -awaiting -Awaitlala -awaits -awakable -awake -awakeable -awaked -awaken -awakenable -awakened -awakener -awakeners -awakening -awakeningly -awakenings -awakenment -awakens -awakes -awaking -awakings -awald -awalim -awalt -Awan -awane -awanyu -awanting -awapuhi -A-war -award -awardable -awarded -awardee -awardees -awarder -awarders -awarding -awardment -awards -aware -awaredom -awareness -awarn -awarrant -awaruite -awash -awaste -awat -awatch -awater -awave -AWB -awber -awd -awe -AWEA -A-weapons -aweary -awearied -aweather -a-weather -awe-awakening -aweband -awe-band -awe-bound -awe-commanding -awe-compelling -awed -awedly -awedness -awee -aweek -a-week -aweel -awe-filled -aweigh -aweing -awe-inspired -awe-inspiring -awe-inspiringly -aweless -awelessness -Awellimiden -Awendaw -awes -awesome -awesomely -awesomeness -awest -a-west -awestricken -awe-stricken -awestrike -awe-strike -awestruck -awe-struck -aweto -awfu -awful -awful-eyed -awful-gleaming -awfuller -awfullest -awfully -awful-looking -awfulness -awful-voiced -AWG -awhape -awheel -a-wheels -awheft -awhet -a-whet -awhile -a-whiles -awhir -a-whir -awhirl -a-whirl -awide -awiggle -awikiwiki -awin -awing -a-wing -awingly -awink -a-wink -awiwi -AWK -awkly -awkward -awkwarder -awkwardest -awkwardish -awkwardly -awkwardness -awkwardnesses -AWL -awless -awlessness -awl-fruited -awl-leaved -awls -awl's -awl-shaped -awlwort -awlworts -awm -awmbrie -awmous -awn -awned -awner -awny -awning -awninged -awnings -awning's -awnless -awnlike -awns -a-wobble -awoke -awoken -AWOL -Awolowo -awols -awonder -awork -a-work -aworry -aworth -a-wrack -awreak -a-wreak -awreck -awry -awrist -awrong -Awshar -AWST -AWU -awunctive -Ax -ax. -Axa -ax-adz -AXAF -axal -axanthopsia -axbreaker -Axe -axebreaker -axe-breaker -axed -Axel -axels -axeman -axemaster -axemen -axenic -axenically -axer -axerophthol -axers -axes -axfetch -axhammer -axhammered -axhead -axial -axial-flow -axiality -axialities -axially -axiate -axiation -Axifera -axiferous -axiform -axifugal -axil -axile -axilemma -axilemmas -axilemmata -axilla -axillae -axillant -axillar -axillary -axillaries -axillars -axillas -axils -axin -axine -axing -axiniform -axinite -axinomancy -axiolite -axiolitic -axiology -axiological -axiologically -axiologies -axiologist -axiom -axiomatic -axiomatical -axiomatically -axiomatization -axiomatizations -axiomatization's -axiomatize -axiomatized -axiomatizes -axiomatizing -axioms -axiom's -axion -axiopisty -Axiopoenus -Axis -axised -axises -axisymmetry -axisymmetric -axisymmetrical -axisymmetrically -axite -axites -axle -axle-bending -axle-boring -axle-centering -axled -axle-forging -axles -axle's -axlesmith -axle-tooth -axletree -axle-tree -axletrees -axlike -axmaker -axmaking -axman -axmanship -axmaster -axmen -Axminster -axodendrite -axofugal -axogamy -axoid -axoidean -axolemma -axolysis -axolotl -axolotls -axolotl's -axometer -axometry -axometric -axon -axonal -axone -axonemal -axoneme -axonemes -axones -axoneure -axoneuron -Axonia -axonic -Axonolipa -axonolipous -axonometry -axonometric -Axonophora -axonophorous -Axonopus -axonost -axons -axon's -axopetal -axophyte -axoplasm -axoplasmic -axoplasms -axopodia -axopodium -axospermous -axostyle -axotomous -axseed -axseeds -ax-shaped -Axson -axstone -Axtel -Axtell -Axton -axtree -Axum -Axumite -axunge -axweed -axwise -axwort -AZ -az- -aza- -azadirachta -azadrachta -azafran -azafrin -Azal -Azalea -Azaleah -azaleamum -azaleas -azalea's -Azalia -Azan -Azana -Azande -azans -Azar -Azarcon -Azaria -Azariah -azarole -Azarria -azaserine -azathioprine -Azazel -Azbine -azedarac -azedarach -Azeglio -Azeito -azelaic -azelate -Azelea -Azelfafage -azeotrope -azeotropy -azeotropic -azeotropism -Azerbaidzhan -Azerbaijan -Azerbaijanese -Azerbaijani -Azerbaijanian -Azerbaijanis -Azeria -Azha -Azide -azides -azido -aziethane -azygo- -Azygobranchia -Azygobranchiata -azygobranchiate -azygomatous -azygos -azygoses -azygosperm -azygospore -azygote -azygous -Azikiwe -Azilian -Azilian-tardenoisian -azilut -azyme -Azimech -azimene -azimethylene -azimide -azimin -azimine -azimino -aziminobenzene -azymite -azymous -azimuth -azimuthal -azimuthally -azimuths -azimuth's -azine -azines -azinphosmethyl -aziola -Aziza -azlactone -Azle -azlon -azlons -Aznavour -azo -azo- -azobacter -azobenzene -azobenzil -azobenzoic -azobenzol -azoblack -azoch -azocyanide -azocyclic -azocochineal -azocoralline -azocorinth -azodicarboxylic -azodiphenyl -azodisulphonic -azoeosin -azoerythrin -Azof -azofy -azofication -azofier -azoflavine -azoformamide -azoformic -azogallein -azogreen -azogrenadine -azohumic -azoic -azoimide -azoisobutyronitrile -azole -azoles -azolitmin -Azolla -azomethine -azon -azonal -azonaphthalene -azonic -azonium -azons -azoology -azo-orange -azo-orchil -azo-orseilline -azoospermia -azoparaffin -azophen -azophenetole -azophenyl -azophenylene -azophenine -azophenol -Azophi -azophosphin -azophosphore -azoprotein -Azor -Azores -Azorian -Azorin -azorite -azorubine -azosulphine -azosulphonic -azotaemia -azotate -azote -azotea -azoted -azotemia -azotemias -azotemic -azotenesis -azotes -azotetrazole -azoth -azothionium -azoths -azotic -azotin -azotine -azotise -azotised -azotises -azotising -azotite -azotize -azotized -azotizes -azotizing -Azotobacter -Azotobacterieae -azotoluene -azotometer -azotorrhea -azotorrhoea -Azotos -azotous -azoturia -azoturias -Azov -azovernine -azox -azoxazole -azoxy -azoxyanisole -azoxybenzene -azoxybenzoic -azoxime -azoxynaphthalene -azoxine -azoxyphenetole -azoxytoluidine -azoxonium -Azpurua -Azrael -Azral -Azriel -Aztec -Azteca -Aztecan -aztecs -azthionium -Azuela -Azuero -azulejo -azulejos -azulene -azuline -azulite -azulmic -azumbre -azure -azurean -azure-blazoned -azure-blue -azure-canopied -azure-circled -azure-colored -azured -azure-domed -azure-eyed -azure-footed -azure-inlaid -azure-mantled -azureness -azureous -azure-penciled -azure-plumed -azures -azure-tinted -azure-vaulted -azure-veined -azury -azurine -azurite -azurites -azurmalachite -azurous -Azusa -B -B- -B.A. -B.A.A. -B.Arch. -B.B.C. -B.C. -B.C.E. -B.C.L. -B.Ch. -B.D. -B.D.S. -B.E. -B.E.F. -B.E.M. -B.Ed. -b.f. -B.L. -B.Litt. -B.M. -B.Mus. -B.O. -B.O.D. -B.P. -B.Phil. -B.R.C.S. -B.S. -B.S.S. -B.Sc. -B.T.U. -B.V. -B.V.M. -B/B -B/C -B/D -B/E -B/F -B/L -B/O -B/P -B/R -B/S -B/W -B911 -BA -BAA -baaed -baahling -baaing -Baal -Baalath -Baalbeer -Baalbek -Baal-berith -Baalim -Baalish -Baalism -baalisms -Baalist -Baalistic -Baalite -Baalitical -Baalize -Baalized -Baalizing -Baalman -baals -Baalshem -baar -baas -baases -baaskaap -baaskaaps -baaskap -Baastan -Bab -Baba -babacoote -babai -babaylan -babaylanes -babajaga -babakoto -baba-koto -Babar -Babara -babas -babasco -babassu -babassus -babasu -Babb -Babbage -Babbette -Babby -Babbie -babbishly -babbit -babbit-metal -Babbitry -Babbitt -babbitted -babbitter -Babbittess -Babbittian -babbitting -Babbittish -Babbittism -Babbittry -babbitts -babblative -babble -babbled -babblement -babbler -babblers -babbles -babblesome -babbly -babbling -babblingly -babblings -babblish -babblishly -babbool -babbools -Babcock -Babe -babe-faced -babehood -Babel -Babeldom -babelet -Babelic -babelike -Babelisation -Babelise -Babelised -Babelish -Babelising -Babelism -Babelization -Babelize -Babelized -Babelizing -babels -babel's -Baber -babery -babes -babe's -babeship -Babesia -babesias -babesiasis -babesiosis -Babette -Babeuf -Babhan -Babi -baby -Babiana -baby-blue-eyes -Baby-bouncer -baby-browed -babiche -babiches -baby-doll -babydom -babied -babies -babies'-breath -baby-face -baby-faced -baby-featured -babyfied -babyhood -babyhoods -babyhouse -babying -babyish -babyishly -babyishness -Babiism -babyism -baby-kissing -babylike -babillard -Babylon -Babylonia -Babylonian -babylonians -Babylonic -Babylonish -Babylonism -Babylonite -Babylonize -Babine -babingtonite -babyolatry -babion -babirousa -babiroussa -babirusa -babirusas -babirussa -babis -babysat -baby-sat -baby's-breath -babish -babished -babyship -babishly -babishness -babysit -baby-sit -babysitter -baby-sitter -babysitting -baby-sitting -baby-sized -Babism -baby-snatching -baby's-slippers -Babist -Babita -Babite -baby-tears -Babits -Baby-walker -babka -babkas -bablah -bable -babloh -baboen -Babol -Babongo -baboo -baboodom -babooism -babool -babools -baboon -baboonery -baboonish -baboonroot -baboons -baboos -baboosh -baboot -babouche -Babouvism -Babouvist -babracot -babroot -Babs -Babson -babu -Babua -babudom -babuina -babuism -babul -babuls -Babuma -Babungera -Babur -baburd -babus -babushka -babushkas -Bac -bacaba -bacach -bacalao -bacalaos -bacao -Bacardi -Bacau -bacauan -bacbakiri -BAcc -bacca -baccaceous -baccae -baccalaurean -baccalaureat -baccalaureate -baccalaureates -baccalaureus -baccar -baccara -baccaras -baccarat -baccarats -baccare -baccate -baccated -Bacchae -bacchanal -Bacchanalia -bacchanalian -bacchanalianism -bacchanalianly -Bacchanalias -bacchanalism -bacchanalization -bacchanalize -bacchanals -bacchant -bacchante -bacchantes -bacchantic -bacchants -bacchar -baccharis -baccharoid -baccheion -Bacchelli -bacchiac -bacchian -Bacchic -Bacchical -Bacchides -bacchii -Bacchylides -bacchiuchii -bacchius -Bacchus -Bacchuslike -baccy -baccies -bacciferous -bacciform -baccilla -baccilli -baccillla -baccillum -Baccio -baccivorous -BACH -Bacharach -Bache -bached -bachel -Bacheller -bachelor -bachelor-at-arms -bachelordom -bachelorette -bachelorhood -bachelorhoods -bachelorism -bachelorize -bachelorly -bachelorlike -bachelors -bachelor's -bachelors-at-arms -bachelor's-button -bachelor's-buttons -bachelorship -bachelorwise -bachelry -baches -Bachichi -baching -Bachman -bach's -bacilary -bacile -Bacillaceae -bacillar -bacillary -Bacillariaceae -bacillariaceous -Bacillariales -Bacillarieae -Bacillariophyta -bacillemia -bacilli -bacillian -bacillicidal -bacillicide -bacillicidic -bacilliculture -bacilliform -bacilligenic -bacilliparous -bacillite -bacillogenic -bacillogenous -bacillophobia -bacillosis -bacilluria -bacillus -bacin -Bacis -bacitracin -back -back- -backache -backaches -backache's -backachy -backaching -back-acting -backadation -backage -back-alley -back-and-forth -back-angle -backare -backarrow -backarrows -backband -backbar -backbear -backbearing -backbeat -backbeats -backbencher -back-bencher -backbenchers -backbend -backbends -backbend's -backberand -backberend -back-berend -backbit -backbite -backbiter -backbiters -backbites -backbiting -back-biting -backbitingly -backbitten -back-blocker -backblocks -backblow -back-blowing -backboard -back-board -backboards -backbone -backboned -backboneless -backbonelessness -backbones -backbone's -backbrand -backbreaker -backbreaking -back-breaking -back-breathing -back-broken -back-burner -backcap -backcast -backcasts -backchain -backchat -backchats -back-check -backcloth -back-cloth -back-cloths -backcomb -back-coming -back-connected -backcountry -back-country -backcourt -backcourtman -backcross -backdate -backdated -backdates -backdating -backdoor -back-door -backdown -back-drawing -back-drawn -backdrop -backdrops -backdrop's -backed -backed-off -backen -back-end -backened -backening -Backer -backers -backers-up -backer-up -backet -back-face -back-facing -backfall -back-fanged -backfatter -backfield -backfields -backfill -backfilled -backfiller -back-filleted -backfilling -backfills -backfire -back-fire -backfired -backfires -backfiring -backflap -backflash -backflip -backflow -backflowing -back-flowing -back-flung -back-focused -backfold -back-formation -backframe -backfriend -backfurrow -backgame -backgammon -backgammons -backgeared -back-geared -back-glancing -back-going -background -backgrounds -background's -backhand -back-hand -backhanded -back-handed -backhandedly -backhandedness -backhander -back-hander -backhanding -backhands -backhatch -backhaul -backhauled -backhauling -backhauls -Backhaus -backheel -backhoe -backhoes -backhooker -backhouse -backhouses -backy -backyard -backyarder -backyards -backyard's -backie -backiebird -backing -backing-off -backings -backjaw -backjoint -backland -backlands -backlash -back-lash -backlashed -backlasher -backlashers -backlashes -backlashing -back-leaning -Backler -backless -backlet -backliding -back-light -back-lighted -backlighting -back-lighting -back-lying -backlings -backlins -backlist -back-list -backlists -backlit -back-lit -backlog -back-log -backlogged -backlogging -backlogs -backlog's -back-looking -backlotter -back-making -backmost -back-number -backoff -backorder -backout -backouts -backpack -backpacked -backpacker -backpackers -backpacking -backpacks -backpack's -back-paddle -back-paint -back-palm -backpedal -back-pedal -backpedaled -back-pedaled -backpedaling -back-pedaling -back-pedalled -back-pedalling -backpiece -back-piece -backplane -backplanes -backplane's -back-plaster -backplate -back-plate -backpointer -backpointers -backpointer's -back-pulling -back-putty -back-racket -back-raking -backrest -backrests -backrope -backropes -backrun -backrush -backrushes -Backs -backsaw -backsaws -backscatter -backscattered -backscattering -backscatters -backscraper -backscratcher -back-scratcher -backscratching -back-scratching -backseat -backseats -backsey -back-sey -backset -back-set -backsets -backsetting -backsettler -back-settler -backsheesh -backshift -backshish -backside -backsides -backsight -backsite -back-slang -back-slanging -backslap -backslapped -backslapper -backslappers -backslapping -back-slapping -backslaps -backslash -backslashes -backslid -backslidden -backslide -backslided -backslider -backsliders -backslides -backsliding -backslidingness -backspace -backspaced -backspacefile -backspacer -backspaces -backspacing -backspang -backspear -backspeer -backspeir -backspier -backspierer -back-spiker -backspin -backspins -backsplice -backspliced -backsplicing -backspread -backspringing -backstab -backstabbed -backstabber -backstabbing -backstaff -back-staff -backstage -backstay -backstair -backstairs -backstays -backstamp -back-starting -Backstein -back-stepping -backster -backstick -backstitch -back-stitch -backstitched -backstitches -backstitching -backstone -backstop -back-stope -backstopped -backstopping -backstops -backstrap -backstrapped -back-strapped -backstreet -back-streeter -backstretch -backstretches -backstring -backstrip -backstroke -back-stroke -backstroked -backstrokes -backstroking -backstromite -back-surging -backswept -backswimmer -backswing -backsword -back-sword -backswording -backswordman -backswordmen -backswordsman -backtack -backtalk -back-talk -back-tan -backtender -backtenter -back-titrate -back-titration -back-to-back -back-to-front -backtrace -backtrack -backtracked -backtracker -backtrackers -backtracking -backtracks -backtrail -back-trailer -backtrick -back-trip -backup -back-up -backups -Backus -backveld -backvelder -backway -back-way -backwall -backward -back-ward -backwardation -backwardly -backwardness -backwardnesses -backwards -backwash -backwashed -backwasher -backwashes -backwashing -backwater -backwatered -backwaters -backwater's -backwind -backwinded -backwinding -backwood -backwoods -backwoodser -backwoodsy -backwoodsiness -backwoodsman -backwoodsmen -backword -backworm -backwort -backwrap -backwraps -baclava -Bacliff -baclin -Baco -Bacolod -Bacon -bacon-and-eggs -baconer -bacony -Baconian -Baconianism -Baconic -Baconism -Baconist -baconize -bacons -Baconton -baconweed -Bacopa -Bacova -bacquet -bact -bact. -bacteraemia -bacteremia -bacteremic -bacteri- -bacteria -Bacteriaceae -bacteriaceous -bacteriaemia -bacterial -bacterially -bacterian -bacteric -bactericholia -bactericidal -bactericidally -bactericide -bactericides -bactericidin -bacterid -bacteriemia -bacteriform -bacterin -bacterins -bacterio- -bacterioagglutinin -bacterioblast -bacteriochlorophyll -bacteriocidal -bacteriocin -bacteriocyte -bacteriodiagnosis -bacteriofluorescin -bacteriogenic -bacteriogenous -bacteriohemolysin -bacterioid -bacterioidal -bacteriol -bacteriol. -bacteriolysin -bacteriolysis -bacteriolytic -bacteriolyze -bacteriology -bacteriologic -bacteriological -bacteriologically -bacteriologies -bacteriologist -bacteriologists -bacterio-opsonic -bacterio-opsonin -bacteriopathology -bacteriophage -bacteriophages -bacteriophagy -bacteriophagia -bacteriophagic -bacteriophagous -bacteriophobia -bacterioprecipitin -bacterioprotein -bacteriopsonic -bacteriopsonin -bacteriopurpurin -bacteriorhodopsin -bacterioscopy -bacterioscopic -bacterioscopical -bacterioscopically -bacterioscopist -bacteriosis -bacteriosolvent -bacteriostasis -bacteriostat -bacteriostatic -bacteriostatically -bacteriotherapeutic -bacteriotherapy -bacteriotoxic -bacteriotoxin -bacteriotrypsin -bacteriotropic -bacteriotropin -bacterious -bacteririum -bacteritic -bacterium -bacteriuria -bacterization -bacterize -bacterized -bacterizing -bacteroid -bacteroidal -Bacteroideae -Bacteroides -bactetiophage -Bactra -Bactria -Bactrian -Bactris -Bactrites -bactriticone -bactritoid -bacubert -bacula -bacule -baculere -baculi -baculiferous -baculiform -baculine -baculite -Baculites -baculitic -baculiticone -baculoid -baculo-metry -baculum -baculums -baculus -bacury -bad -Badacsonyi -Badaga -Badajoz -Badakhshan -Badalona -badan -Badarian -badarrah -badass -badassed -badasses -badaud -Badawi -Badaxe -Badb -badchan -baddeleyite -badder -badderlocks -baddest -baddy -baddie -baddies -baddish -baddishly -baddishness -baddock -bade -Baden -Baden-Baden -badenite -Baden-Powell -Baden-Wtemberg -badge -badged -badgeless -badgeman -badgemen -Badger -badgerbrush -badgered -badgerer -badgering -badgeringly -badger-legged -badgerly -badgerlike -badgers -badger's -badgerweed -badges -badging -badgir -badhan -bad-headed -bad-hearted -bad-humored -badiaga -badian -badigeon -Badin -badinage -badinaged -badinages -badinaging -badiner -badinerie -badineur -badious -badju -badland -badlands -badly -badling -bad-looking -badman -badmash -badmen -BAdmEng -bad-minded -badminton -badmintons -badmouth -bad-mouth -badmouthed -badmouthing -badmouths -badness -badnesses -Badoeng -Badoglio -Badon -Badr -badrans -bads -bad-smelling -bad-tempered -Baduhenna -BAE -bae- -Baecher -BAEd -Baeda -Baedeker -Baedekerian -baedekers -Baeyer -Baekeland -Bael -Baelbeer -Baer -Baeria -Baerl -Baerman -Baese -baetyl -baetylic -baetylus -baetuli -baetulus -baetzner -Baez -bafaro -baff -baffed -baffeta -baffy -baffies -Baffin -baffing -baffle -baffled -bafflement -bafflements -baffleplate -baffler -bafflers -baffles -baffling -bafflingly -bafflingness -baffs -Bafyot -BAFO -baft -bafta -baftah -BAg -baga -Baganda -bagani -bagass -bagasse -bagasses -bagataway -bagatelle -bagatelles -bagatelle's -Bagatha -bagatine -bagattini -bagattino -Bagaudae -bag-bearing -bag-bedded -bag-bundling -bag-cheeked -bag-closing -bag-cutting -Bagdad -Bagdi -BAgE -Bagehot -bagel -bagels -bagel's -bag-filling -bag-flower -bag-folding -bagful -bagfuls -baggage -baggageman -baggagemaster -baggager -baggages -baggage-smasher -baggala -bagganet -Baggara -bagge -bagged -Bagger -baggers -bagger's -Baggett -baggy -baggie -baggier -baggies -baggiest -baggily -bagginess -bagging -baggings -baggyrinkle -baggit -baggywrinkle -Baggott -Baggs -bagh -Baghdad -Bagheera -Bagheli -baghla -Baghlan -baghouse -bagie -Baginda -bagio -bagios -Bagirmi -bagle -bagleaves -Bagley -baglike -bagmaker -bagmaking -bagman -bagmen -bagne -Bagnes -bagnet -bagnette -bagnio -bagnios -bagnut -bago -Bagobo -bagonet -bagong -bagoong -bagpipe -bagpiped -bagpiper -bagpipers -bagpipes -bagpipe's -bagpiping -bagplant -bagpod -bag-printing -bagpudding -Bagpuize -BAgr -Bagram -bagrationite -bagre -bagreef -bag-reef -Bagritski -bagroom -bags -bag's -BAgSc -bag-sewing -bagsful -bag-shaped -bagtikan -baguet -baguets -baguette -baguettes -Baguio -baguios -bagwash -Bagwell -bagwig -bag-wig -bagwigged -bagwigs -bagwyn -bagwoman -bagwomen -bagwork -bagworm -bagworms -bah -bahada -bahadur -bahadurs -Bahai -Baha'i -bahay -Bahaism -Bahaist -Baham -Bahama -Bahamas -Bahamian -bahamians -bahan -bahar -Bahaullah -Baha'ullah -Bahawalpur -bahawder -bahera -Bahia -bahiaite -Bahima -bahisti -Bahmani -Bahmanid -Bahner -bahnung -baho -bahoe -bahoo -Bahr -Bahrain -Bahrein -baht -bahts -Bahuma -bahur -bahut -bahuts -Bahutu -bahuvrihi -bahuvrihis -Bai -Bay -Baya -bayadeer -bayadeers -bayadere -bayaderes -Baiae -bayal -Bayam -Bayamo -Bayamon -bayamos -Baianism -bayano -Bayar -Bayard -bayardly -bayards -bay-bay -bayberry -bayberries -baybolt -Bayboro -bay-breasted -baybush -bay-colored -baycuru -Bayda -baidak -baidar -baidarka -baidarkas -Baidya -Bayeau -bayed -Baiel -Bayer -Baiera -Bayern -Bayesian -bayeta -bayete -Bayfield -baygall -baiginet -baign -baignet -baigneuse -baigneuses -baignoire -Bayh -bayhead -baying -bayish -Baikal -baikalite -baikerinite -baikerite -baikie -Baikonur -Bail -bailable -bailage -Bailar -bail-dock -bayldonite -baile -Bayle -bailed -bailee -bailees -Bailey -Bayley -baileys -Baileyton -Baileyville -bailer -bailers -Bayless -baylet -Baily -Bayly -bailiary -bailiaries -Bailie -bailiery -bailieries -bailies -bailieship -bailiff -bailiffry -bailiffs -bailiff's -bailiffship -bailiffwick -baylike -bailing -Baylis -bailiwick -bailiwicks -Baillaud -bailli -Bailly -bailliage -Baillie -Baillieu -baillone -Baillonella -bailment -bailments -bailo -bailor -Baylor -bailors -bailout -bail-out -bailouts -bailpiece -bails -bailsman -bailsmen -bailwood -bayman -baymen -Bayminette -Bain -Bainbridge -Bainbrudge -Baynebridge -bayness -bainie -Baining -bainite -bain-marie -Bains -bains-marie -Bainter -Bainville -baioc -baiocchi -baiocco -Bayogoula -bayok -bayonet -bayoneted -bayoneteer -bayoneting -bayonets -bayonet's -bayonetted -bayonetting -bayong -Bayonne -bayou -Bayougoula -bayous -bayou's -Baypines -Bayport -bairagi -Bairam -Baird -Bairdford -bairdi -Bayreuth -bairn -bairnie -bairnish -bairnishness -bairnly -bairnlier -bairnliest -bairnliness -bairns -Bairnsfather -bairnteam -bairnteem -bairntime -bairnwort -Bairoil -Bais -Bays -Baisakh -bay-salt -Baisden -baisemain -Bayshore -Bayside -baysmelt -baysmelts -Baiss -baister -bait -baited -baiter -baiters -baitfish -baith -baitylos -baiting -Baytown -baits -baittle -Bayview -Bayville -bay-window -bay-winged -baywood -baywoods -bayz -baiza -baizas -baize -baized -baizes -baizing -Baja -bajada -Bajadero -Bajaj -Bajan -Bajardo -bajarigar -Bajau -Bajer -bajocco -bajochi -Bajocian -bajoire -bajonado -BAJour -bajra -bajree -bajri -bajulate -bajury -Bak -baka -Bakairi -bakal -Bakalai -Bakalei -Bakatan -bake -bakeapple -bakeboard -baked -baked-apple -bakehead -bakehouse -bakehouses -Bakelite -bakelize -Bakeman -bakemeat -bake-meat -bakemeats -Bakemeier -baken -bake-off -bakeout -bakeoven -bakepan -Baker -bakerdom -bakeress -bakery -bakeries -bakery's -bakerite -baker-knee -baker-kneed -baker-leg -baker-legged -bakerless -bakerly -bakerlike -Bakerman -bakers -Bakersfield -bakership -Bakerstown -Bakersville -Bakerton -Bakes -bakeshop -bakeshops -bakestone -bakeware -Bakewell -Bakhmut -Bakhtiari -bakie -baking -bakingly -bakings -Bakke -Bakki -baklava -baklavas -baklawa -baklawas -bakli -Bakongo -bakra -Bakshaish -baksheesh -baksheeshes -bakshi -bakshis -bakshish -bakshished -bakshishes -bakshishing -Bakst -baktun -Baku -Bakuba -bakula -Bakunda -Bakunin -Bakuninism -Bakuninist -bakupari -Bakutu -Bakwiri -BAL -bal. -Bala -Balaam -Balaamite -Balaamitical -balabos -Balac -balachan -balachong -Balaclava -balada -baladine -Balaena -Balaenicipites -balaenid -Balaenidae -balaenoid -Balaenoidea -balaenoidean -Balaenoptera -Balaenopteridae -balafo -balagan -balaghat -balaghaut -balai -Balaic -balayeuse -Balak -Balakirev -Balaklava -balalaika -balalaikas -balalaika's -Balan -Balance -balanceable -balanced -balancedness -balancelle -balanceman -balancement -balancer -balancers -balances -balancewise -Balanchine -balancing -balander -balandra -balandrana -balaneutics -Balanga -balangay -balanic -balanid -Balanidae -balaniferous -balanism -balanite -Balanites -balanitis -balanoblennorrhea -balanocele -Balanoglossida -Balanoglossus -balanoid -Balanophora -Balanophoraceae -balanophoraceous -balanophore -balanophorin -balanoplasty -balanoposthitis -balanopreputial -Balanops -Balanopsidaceae -Balanopsidales -balanorrhagia -balant -Balanta -Balante -balantidial -balantidiasis -balantidic -balantidiosis -Balantidium -Balanus -Balao -balaos -balaphon -Balarama -balarao -Balas -balases -balat -balata -balatas -balate -Balaton -balatong -balatron -balatronic -balatte -balau -balausta -balaustine -balaustre -Balawa -Balawu -Balbinder -Balbo -Balboa -balboas -balbriggan -Balbuena -Balbur -balbusard -balbutiate -balbutient -balbuties -Balcer -Balch -balche -Balcke -balcon -balcone -balconet -balconette -balcony -balconied -balconies -balcony's -Bald -baldacchini -baldacchino -baldachin -baldachined -baldachini -baldachino -baldachinos -baldachins -Baldad -baldakin -baldaquin -Baldassare -baldberry -baldcrown -balded -balden -Balder -balder-brae -balderdash -balderdashes -balder-herb -baldest -baldfaced -bald-faced -baldhead -baldheaded -bald-headed -bald-headedness -baldheads -baldy -baldicoot -Baldie -baldies -balding -baldish -baldly -baldling -baldmoney -baldmoneys -baldness -baldnesses -Baldomero -baldoquin -baldpate -baldpated -bald-pated -baldpatedness -bald-patedness -baldpates -Baldr -baldrib -baldric -baldrick -baldricked -baldricks -baldrics -baldricwise -Baldridge -balds -balducta -balductum -Balduin -Baldur -Baldwin -Baldwyn -Baldwinsville -Baldwinville -Bale -baleare -Baleares -Balearian -Balearic -Balearica -balebos -baled -baleen -baleens -balefire -bale-fire -balefires -baleful -balefully -balefulness -balei -baleys -baleise -baleless -Balenciaga -Baler -balers -bales -balestra -balete -Balewa -balewort -Balf -Balfore -Balfour -Bali -balian -balibago -balibuntal -balibuntl -Balija -Balikpapan -Balilla -balimbing -baline -Balinese -baling -balinger -balinghasay -Baliol -balisaur -balisaurs -balisier -balistarii -balistarius -balister -Balistes -balistid -Balistidae -balistraria -balita -balitao -baliti -Balius -balize -balk -Balkan -Balkanic -Balkanise -Balkanised -Balkanising -Balkanism -Balkanite -Balkanization -Balkanize -Balkanized -Balkanizing -balkans -Balkar -balked -balker -balkers -Balkh -Balkhash -balky -balkier -balkiest -balkily -Balkin -balkiness -balking -balkingly -Balkis -balkish -balkline -balklines -Balko -balks -Ball -Balla -ballad -ballade -balladeer -balladeers -ballader -balladeroyal -ballades -balladic -balladical -balladier -balladise -balladised -balladising -balladism -balladist -balladize -balladized -balladizing -balladlike -balladling -balladmonger -balladmongering -balladry -balladries -balladromic -ballads -ballad's -balladwise -ballahoo -ballahou -ballam -ballan -Ballance -ballant -Ballantine -ballarag -Ballarat -Ballard -ballas -ballast -ballastage -ballast-cleaning -ballast-crushing -ballasted -ballaster -ballastic -ballasting -ballast-loading -ballasts -ballast's -ballat -ballata -ballate -ballaton -ballatoon -ball-bearing -ballbuster -ballcarrier -ball-carrier -balldom -balldress -balled -balled-up -Ballengee -Ballentine -baller -ballerina -ballerinas -ballerina's -ballerine -ballers -ballet -balletic -balletically -balletomane -balletomanes -balletomania -ballets -ballet's -ballett -ballfield -ballflower -ball-flower -ballgame -ballgames -ballgown -ballgowns -ballgown's -Ballhausplatz -ballhawk -ballhawks -ballhooter -ball-hooter -balli -Bally -balliage -Ballico -ballies -Balliett -ballyhack -ballyhoo -ballyhooed -ballyhooer -ballyhooing -ballyhoos -Ballyllumford -Balling -Ballinger -Ballington -Balliol -ballyrag -ballyragged -ballyragging -ballyrags -ballised -ballism -ballismus -ballist -ballista -ballistae -ballistic -ballistically -ballistician -ballisticians -ballistics -Ballistite -ballistocardiogram -ballistocardiograph -ballistocardiography -ballistocardiographic -ballistophobia -ballium -ballywack -ballywrack -ball-jasper -Ballman -ballmine -ballo -ballock -ballocks -balloen -ballogan -ballon -ballone -ballones -ballonet -ballonets -ballonette -ballonne -ballonnes -ballons -ballon-sonde -balloon -balloonation -balloon-berry -balloon-berries -ballooned -ballooner -balloonery -ballooners -balloonet -balloonfish -balloonfishes -balloonflower -balloonful -ballooning -balloonish -balloonist -balloonists -balloonlike -balloons -ballot -Ballota -ballotade -ballotage -ballote -balloted -balloter -balloters -balloting -ballotist -ballots -ballot's -ballottable -ballottement -ballottine -ballottines -Ballou -Ballouville -ballow -ballpark -ball-park -ballparks -ballpark's -ballplayer -ballplayers -ballplayer's -ball-planting -Ballplatz -ballpoint -ball-point -ballpoints -ballproof -ballroom -ballrooms -ballroom's -balls -ball-shaped -ballsy -ballsier -ballsiest -ballstock -balls-up -ball-thrombus -ballup -ballute -ballutes -ballweed -Ballwin -balm -balmacaan -Balmain -balm-apple -Balmarcodes -Balmat -Balmawhapple -balm-breathing -balm-cricket -balmy -balmier -balmiest -balmily -balminess -balminesses -balm-leaved -balmlike -balmony -balmonies -Balmont -Balmoral -balmorals -Balmorhea -balms -balm's -balm-shed -Balmunc -Balmung -Balmuth -balnea -balneae -balneal -balneary -balneation -balneatory -balneographer -balneography -balneology -balneologic -balneological -balneologist -balneophysiology -balneotechnics -balneotherapeutics -balneotherapy -balneotherapia -balneum -Balnibarbi -Baloch -Balochi -Balochis -Baloghia -Balolo -balon -balonea -baloney -baloneys -baloo -Balopticon -Balor -Baloskion -Baloskionaceae -balotade -Balough -balourdise -balow -BALPA -balr -bals -balsa -Balsam -balsamaceous -balsamation -Balsamea -Balsameaceae -balsameaceous -balsamed -balsamer -balsamy -balsamic -balsamical -balsamically -balsamiferous -balsamina -Balsaminaceae -balsaminaceous -balsamine -balsaming -balsamitic -balsamiticness -balsamize -balsamo -Balsamodendron -Balsamorrhiza -balsamous -balsamroot -balsams -balsamum -balsamweed -balsas -balsawood -Balshem -Balt -Balt. -Balta -Baltassar -baltei -balter -baltetei -balteus -Balthasar -Balthazar -baltheus -Balti -Baltic -Baltimore -Baltimorean -baltimorite -Baltis -Balto-slav -Balto-Slavic -Balto-Slavonic -balu -Baluba -Baluch -Baluchi -Baluchis -Baluchistan -baluchithere -baluchitheria -Baluchitherium -Baluga -BALUN -Balunda -balushai -baluster -balustered -balusters -balustrade -balustraded -balustrades -balustrade's -balustrading -balut -balwarra -balza -Balzac -Balzacian -balzarine -BAM -BAMAF -bamah -Bamako -Bamalip -Bamangwato -bambacciata -bamban -Bambara -Bamberg -Bamberger -Bambi -Bamby -Bambie -bambini -bambino -bambinos -bambocciade -bambochade -bamboche -bamboo -bamboos -bamboozle -bamboozled -bamboozlement -bamboozler -bamboozlers -bamboozles -bamboozling -Bambos -bamboula -Bambuba -bambuco -bambuk -Bambusa -Bambuseae -Bambute -Bamford -Bamian -Bamileke -bammed -bamming -bamoth -bams -BAMusEd -Ban -Bana -banaba -Banach -banago -banagos -banak -banakite -banal -banality -banalities -banalize -banally -banalness -banana -Bananaland -Bananalander -bananaquit -bananas -banana's -Banande -bananist -bananivorous -Banaras -Banares -Banat -Banate -banatite -banausic -Banba -Banbury -banc -banca -bancal -bancales -bancha -banchi -Banco -bancos -Bancroft -BANCS -bancus -band -Banda -bandage -bandaged -bandager -bandagers -bandages -bandaging -bandagist -bandaid -Band-Aid -bandaite -bandaka -bandala -bandalore -Bandana -bandanaed -bandanas -bandanna -bandannaed -bandannas -bandar -Bandaranaike -bandarlog -Bandar-log -bandbox -bandboxes -bandboxy -bandboxical -bandcase -bandcutter -bande -bandeau -bandeaus -bandeaux -banded -Bandeen -bandel -bandelet -bandelette -Bandello -bandeng -Bander -Bandera -banderilla -banderillas -banderillero -banderilleros -banderlog -Banderma -banderol -banderole -banderoled -banderoles -banderoling -banderols -banders -bandersnatch -bandfile -bandfiled -bandfiling -bandfish -band-gala -bandgap -bandh -bandhava -bandhook -Bandhor -bandhu -bandi -bandy -bandyball -bandy-bandy -bandicoy -bandicoot -bandicoots -bandido -bandidos -bandie -bandied -bandies -bandying -bandikai -bandylegged -bandy-legged -bandyman -Bandinelli -bandiness -banding -bandit -banditism -Bandytown -banditry -banditries -bandits -bandit's -banditti -Bandjarmasin -Bandjermasin -Bandkeramik -bandle -bandleader -Bandler -bandless -bandlessly -bandlessness -bandlet -bandlimit -bandlimited -bandlimiting -bandlimits -bandman -bandmaster -bandmasters -bando -bandobust -Bandoeng -bandog -bandogs -bandoleer -bandoleered -bandoleers -bandolerismo -bandolero -bandoleros -bandolier -bandoliered -bandoline -Bandon -bandonion -Bandor -bandora -bandoras -bandore -bandores -bandos -bandpass -bandrol -bands -bandsaw -bandsawed -band-sawyer -bandsawing -band-sawing -bandsawn -band-shaped -bandsman -bandsmen -bandspreading -bandstand -bandstands -bandstand's -bandster -bandstop -bandstring -band-tailed -Bandundu -Bandung -Bandur -bandura -bandurria -bandurrias -Bandusia -Bandusian -bandwagon -bandwagons -bandwagon's -bandwidth -bandwidths -bandwork -bandworm -bane -baneberry -baneberries -Banebrudge -Banecroft -baned -baneful -banefully -banefulness -Banerjea -Banerjee -banes -banewort -Banff -Banffshire -Bang -banga -Bangala -bangalay -Bangall -Bangalore -bangalow -Bangash -bang-bang -bangboard -bange -banged -banged-up -banger -bangers -banghy -bangy -Bangia -Bangiaceae -bangiaceous -Bangiales -banging -Bangka -Bangkok -bangkoks -Bangladesh -bangle -bangled -bangles -bangle's -bangling -Bangor -bangos -Bangs -bangster -bangtail -bang-tail -bangtailed -bangtails -Bangui -bangup -bang-up -Bangwaketsi -Bangweulu -bani -bania -banya -Banyai -banian -banyan -banians -banyans -Banias -banig -baniya -banilad -baning -Banyoro -banish -banished -banisher -banishers -banishes -banishing -banishment -banishments -banister -banister-back -banisterine -banisters -banister's -Banyuls -Baniva -baniwa -banjara -Banjermasin -banjo -banjoes -banjoist -banjoists -banjo-picker -banjore -banjorine -banjos -banjo's -banjo-uke -banjo-ukulele -banjo-zither -banjuke -Banjul -banjulele -Bank -Banka -bankable -Bankalachi -bank-bill -bankbook -bank-book -bankbooks -bankcard -bankcards -banked -banker -bankera -bankerdom -bankeress -banker-mark -banker-out -bankers -banket -bankfull -bank-full -Bankhead -bank-high -Banky -Banking -banking-house -bankings -bankman -bankmen -banknote -bank-note -banknotes -bankrider -bank-riding -bankroll -bankrolled -bankroller -bankrolling -bankrolls -bankrupcy -bankrupt -bankruptcy -bankruptcies -bankruptcy's -bankrupted -bankrupting -bankruptism -bankruptly -bankruptlike -bankrupts -bankruptship -bankrupture -Banks -bankshall -Banksia -Banksian -banksias -Bankside -bank-side -bank-sided -banksides -banksman -banksmen -Bankston -bankweed -bank-wound -banlieu -banlieue -Banlon -Bann -Banna -bannack -Bannasch -bannat -banned -Banner -bannered -bannerer -banneret -bannerets -bannerette -banner-fashioned -bannerfish -bannerless -bannerlike -bannerline -Bannerman -bannermen -bannerol -bannerole -bannerols -banners -banner's -banner-shaped -bannerwise -bannet -bannets -bannimus -Banning -Bannister -bannisters -bannition -Bannock -Bannockburn -bannocks -Bannon -banns -bannut -Banon -banovina -banque -Banquer -banquet -Banquete -banqueted -banqueteer -banqueteering -banqueter -banqueters -banqueting -banquetings -banquets -banquette -banquettes -Banquo -bans -ban's -bansalague -bansela -banshee -banshees -banshee's -banshie -banshies -Banstead -banstickle -bant -bantay -bantayan -Bantam -bantamize -bantams -bantamweight -bantamweights -banteng -banter -bantered -banterer -banterers -bantery -bantering -banteringly -banters -Banthine -banty -banties -bantin -Banting -Bantingism -bantingize -bantings -bantling -bantlings -Bantoid -Bantry -Bantu -Bantus -Bantustan -banuyo -banus -Banville -Banwell -banxring -banzai -banzais -BAO -baobab -baobabs -BAOR -Bap -BAPCO -BAPCT -Baphia -Baphomet -Baphometic -bapistery -BAppArts -Bapt -Baptanodon -baptise -baptised -baptises -Baptisia -baptisias -baptisin -baptising -baptism -baptismal -baptismally -baptisms -baptism's -Baptist -Baptista -Baptiste -baptistery -baptisteries -Baptistic -Baptistown -baptistry -baptistries -baptistry's -baptists -baptist's -baptizable -baptize -baptized -baptizee -baptizement -baptizer -baptizers -baptizes -baptizing -Baptlsta -Baptornis -BAR -bar- -bar. -Bara -barabara -Barabas -Barabbas -Baraboo -barabora -Barabra -Barac -Baraca -Barack -Baracoa -barad -baradari -Baraga -baragnosis -baragouin -baragouinish -Barahona -Baray -Barayon -baraita -Baraithas -Barajas -barajillo -Barak -baraka -Baralipton -Baram -Baramika -baramin -bar-and-grill -barandos -barangay -barani -Barany -Baranov -bara-picklet -bararesque -bararite -Baras -Barashit -barasingha -barat -Barataria -barathea -baratheas -barathra -barathron -barathrum -barato -baratte -barauna -baraza -Barb -barba -Barbabas -Barbabra -barbacan -Barbacoa -Barbacoan -barbacou -Barbadian -barbadoes -Barbados -barbal -barbaloin -barbar -Barbara -Barbaraanne -Barbara-Anne -barbaralalia -Barbarea -Barbaresco -Barbarese -Barbaresi -barbaresque -Barbary -Barbarian -barbarianism -barbarianize -barbarianized -barbarianizing -barbarians -barbarian's -barbaric -barbarical -barbarically -barbarious -barbariousness -barbarisation -barbarise -barbarised -barbarising -barbarism -barbarisms -barbarity -barbarities -barbarization -barbarize -barbarized -barbarizes -barbarizing -Barbarossa -barbarous -barbarously -barbarousness -barbas -barbasco -barbascoes -barbascos -barbastel -barbastelle -barbate -barbated -barbatimao -Barbe -Barbeau -barbecue -barbecued -barbecueing -barbecuer -barbecues -barbecuing -barbed -barbedness -Barbee -Barbey -Barbeyaceae -barbeiro -barbel -barbeled -barbell -barbellate -barbells -barbell's -barbellula -barbellulae -barbellulate -barbels -barbeque -barbequed -barbequing -Barber -Barbera -barbered -barberess -barberfish -barbery -barbering -barberish -barberite -barbermonger -barbero -barberry -barberries -barbers -barbershop -barbershops -barber-surgeon -Barberton -Barberville -barbes -barbet -barbets -Barbette -barbettes -Barbi -Barby -Barbica -barbican -barbicanage -barbicans -barbicel -barbicels -Barbie -barbierite -barbigerous -barbing -barbion -Barbirolli -barbita -barbital -barbitalism -barbitals -barbiton -barbitone -barbitos -barbituism -barbiturate -barbiturates -barbituric -barbiturism -Barbizon -barble -barbless -barblet -barboy -barbola -barbone -barbotine -barbotte -barbouillage -Barbour -Barboursville -Barbourville -Barboza -Barbra -barbre -barbs -barbu -Barbuda -barbudo -barbudos -Barbula -barbulate -barbule -barbules -barbulyie -Barbur -Barbusse -barbut -barbute -Barbuto -barbuts -barbwire -barbwires -Barca -Barcan -barcarole -barcaroles -barcarolle -barcas -Barce -barcella -Barcellona -Barcelona -barcelonas -Barceloneta -BArch -barchan -barchans -BArchE -Barclay -Barco -barcolongo -barcone -Barcoo -Barcot -Barcroft -Barcus -Bard -bardane -bardash -bardcraft -Barde -barded -bardee -Bardeen -bardel -bardelle -Barden -bardes -Bardesanism -Bardesanist -Bardesanite -bardess -bardy -Bardia -bardic -bardie -bardier -bardiest -bardiglio -bardily -bardiness -barding -bardings -bardish -bardism -bardlet -bardlike -bardling -Bardo -bardocucullus -Bardolater -Bardolatry -Bardolino -Bardolph -Bardolphian -Bardot -bards -bard's -bardship -Bardstown -Bardulph -Bardwell -Bare -Barea -bare-ankled -bare-armed -bare-ass -bare-assed -bareback -barebacked -bare-backed -bare-bitten -bareboat -bareboats -barebone -bareboned -bare-boned -barebones -bare-bosomed -bare-branched -bare-breasted -bareca -bare-chested -bare-clawed -bared -barefaced -bare-faced -barefacedly -barefacedness -bare-fingered -barefisted -barefit -Barefoot -barefooted -barege -bareges -bare-gnawn -barehanded -bare-handed -barehead -bareheaded -bare-headed -bareheadedness -Bareilly -bareka -bare-kneed -bareknuckle -bareknuckled -barelegged -bare-legged -Bareli -barely -Barenboim -barenecked -bare-necked -bareness -barenesses -Barents -bare-picked -barer -bare-ribbed -bares -baresark -baresarks -bare-skinned -bare-skulled -baresma -barest -baresthesia -baret -bare-throated -bare-toed -baretta -bare-walled -bare-worn -barf -barfed -barff -barfy -barfing -barfish -barfly -barflies -barfly's -barfs -barful -Barfuss -bargain -bargainable -bargain-basement -bargain-counter -bargained -bargainee -bargainer -bargainers -bargain-hunting -bargaining -bargainor -bargains -bargainwise -bargander -barge -bargeboard -barge-board -barge-couple -barge-course -barged -bargee -bargeer -bargees -bargeese -bargehouse -barge-laden -bargelike -bargelli -bargello -bargellos -bargeload -bargeman -bargemaster -bargemen -bargepole -Barger -barge-rigged -Bargersville -barges -bargestone -barge-stone -bargh -bargham -barghest -barghests -barging -bargir -bargoose -bar-goose -barguest -barguests -barhal -Barhamsville -barhop -barhopped -barhopping -barhops -Bari -Bary -baria -bariatrician -bariatrics -baric -barycenter -barycentre -barycentric -barid -barie -Barye -baryecoia -baryes -baryglossia -barih -barylalia -barile -barylite -barilla -barillas -Bariloche -Barimah -Barina -Barinas -Baring -bariolage -baryon -baryonic -baryons -baryphony -baryphonia -baryphonic -Baryram -baris -barish -barysilite -barysphere -barit -barit. -baryta -barytas -barite -baryte -baritenor -barites -barytes -barythymia -barytic -barytine -baryto- -barytocalcite -barytocelestine -barytocelestite -baryton -baritonal -baritone -barytone -baritones -baritone's -barytones -barytons -barytophyllite -barytostrontianite -barytosulphate -barium -bariums -bark -barkan -barkantine -barkary -bark-bared -barkbound -barkcutter -bark-cutting -barked -barkeep -barkeeper -barkeepers -barkeeps -barkey -barken -barkened -barkening -barkentine -barkentines -Barker -barkery -barkers -barkevikite -barkevikitic -bark-formed -bark-galled -bark-galling -bark-grinding -barkhan -barky -barkier -barkiest -Barking -barkingly -Barkinji -Barkla -barkle -Barkley -Barkleigh -barkless -barklyite -barkometer -barkpeel -barkpeeler -barkpeeling -barks -Barksdale -bark-shredding -barksome -barkstone -bark-tanned -Barlach -barlafumble -barlafummil -barleduc -Bar-le-duc -barleducs -barley -barleybird -barleybrake -barleybreak -barley-break -barley-bree -barley-broo -barley-cap -barley-clipping -Barleycorn -barley-corn -barley-fed -barley-grinding -barleyhood -barley-hood -barley-hulling -barleymow -barleys -barleysick -barley-sugar -barless -Barletta -barly -Barling -barlock -Barlow -barlows -barm -barmaid -barmaids -barman -barmaster -barmbrack -barmcloth -Barmecidal -Barmecide -Barmen -barmfel -barmy -barmybrained -barmie -barmier -barmiest -barming -barmkin -barmote -barms -barmskin -Barn -Barna -Barnaba -Barnabas -Barnabe -Barnaby -Barnabite -Barna-brahman -barnacle -barnacle-back -barnacled -barnacle-eater -barnacles -barnacling -barnage -Barnaise -Barnard -Barnardo -Barnardsville -Barnaul -barnbrack -barn-brack -Barnburner -Barncard -barndoor -barn-door -Barnebas -Barnegat -Barney -barney-clapper -barneys -Barnes -Barnesboro -Barneston -Barnesville -Barnet -Barnett -Barneveld -Barneveldt -barnful -Barnhard -barnhardtite -Barnhart -Barny -barnyard -barnyards -barnyard's -Barnie -barnier -barniest -barnlike -barnman -barnmen -barn-raising -barns -barn's -barns-breaking -Barnsdall -Barnsley -Barnstable -Barnstead -Barnstock -barnstorm -barnstormed -barnstormer -barnstormers -barnstorming -barnstorms -Barnum -Barnumesque -Barnumism -Barnumize -Barnwell -baro- -Barocchio -barocco -barocyclonometer -Barocius -baroclinicity -baroclinity -Baroco -Baroda -barodynamic -barodynamics -barognosis -barogram -barograms -barograph -barographic -barographs -baroi -Baroja -baroko -Barolet -Barolo -barology -Barolong -baromacrometer -barometer -barometers -barometer's -barometry -barometric -barometrical -barometrically -barometrograph -barometrography -barometz -baromotor -Baron -baronage -baronages -baronduki -baroness -baronesses -baronet -baronetage -baronetcy -baronetcies -baroneted -baronethood -baronetical -baroneting -baronetise -baronetised -baronetising -baronetize -baronetized -baronetizing -baronets -baronetship -barong -Baronga -barongs -baroni -barony -baronial -baronies -barony's -baronize -baronized -baronizing -baronne -baronnes -baronry -baronries -barons -baron's -baronship -barophobia -Baroque -baroquely -baroqueness -baroques -baroreceptor -baroscope -baroscopic -baroscopical -barosinusitis -barosinusitus -Barosma -barosmin -barostat -baroswitch -barotactic -barotaxy -barotaxis -barothermogram -barothermograph -barothermohygrogram -barothermohygrograph -baroto -barotrauma -barotraumas -barotraumata -barotropy -barotropic -Barotse -Barotseland -barouche -barouches -barouchet -barouchette -Barouni -baroxyton -Barozzi -barpost -barquantine -barque -barquentine -Barquero -barques -barquest -barquette -Barquisimeto -Barr -Barra -barrabkie -barrable -barrabora -barracan -barrace -barrack -barracked -barracker -barracking -barracks -Barrackville -barraclade -barracoon -barracouta -barracoutas -barracuda -barracudas -barracudina -barrad -Barrada -barragan -barrage -barraged -barrages -barrage's -barraging -barragon -Barram -barramunda -barramundas -barramundi -barramundies -barramundis -barranca -Barrancabermeja -barrancas -barranco -barrancos -barrandite -Barranquilla -Barranquitas -barras -barrat -barrater -barraters -barrator -barrators -barratry -barratries -barratrous -barratrously -Barrault -Barraza -Barre -barred -Barree -barrel -barrelage -barrel-bellied -barrel-boring -barrel-branding -barrel-chested -barrel-driving -barreled -barreleye -barreleyes -barreler -barrelet -barrelfish -barrelfishes -barrelful -barrelfuls -barrelhead -barrel-heading -barrelhouse -barrelhouses -barreling -barrelled -barrelling -barrelmaker -barrelmaking -barrel-packing -barrel-roll -barrels -barrel's -barrelsful -barrel-shaped -barrel-vaulted -barrelwise -Barren -barrener -barrenest -barrenly -barrenness -barrennesses -barrens -barrenwort -barrer -barrera -barrer-off -Barres -Barret -barretor -barretors -barretry -barretries -barrets -Barrett -barrette -barretter -barrettes -Barri -Barry -barry-bendy -barricade -barricaded -barricader -barricaders -barricades -barricade's -barricading -barricado -barricadoed -barricadoes -barricadoing -barricados -barrico -barricoes -barricos -Barrie -Barrientos -barrier -barriers -barrier's -barriguda -barrigudo -barrigudos -barrikin -Barrymore -barry-nebuly -barriness -barring -barringer -Barrington -Barringtonia -barrio -barrio-dwellers -Barrios -barry-pily -Barris -barrister -barrister-at-law -barristerial -barristers -barristership -barristress -Barryton -Barrytown -Barryville -barry-wavy -BARRNET -Barron -Barronett -barroom -barrooms -Barros -Barrow -barrow-boy -barrowcoat -barrowful -Barrow-in-Furness -Barrowist -barrowman -barrow-man -barrow-men -barrows -barrulee -barrulet -barrulety -barruly -Barrus -bars -bar's -Barsac -barse -Barsky -barsom -barspoon -barstool -barstools -Barstow -Bart -Bart. -Barta -bar-tailed -Bartel -Bartelso -bartend -bartended -bartender -bartenders -bartender's -bartending -bartends -barter -bartered -barterer -barterers -bartering -barters -Barth -Barthel -Barthelemy -Barthian -Barthianism -barthite -Barthol -Barthold -Bartholdi -Bartholemy -bartholinitis -Bartholomean -Bartholomeo -Bartholomeus -Bartholomew -Bartholomewtide -Bartholomite -Barthou -Barty -Bartie -bartisan -bartisans -bartizan -bartizaned -bartizans -Bartko -Bartle -Bartley -Bartlemy -Bartlesville -Bartlet -Bartlett -bartletts -Barto -Bartok -Bartolemo -Bartolome -Bartolomeo -Bartolommeo -Bartolozzi -Barton -Bartonella -Bartonia -Bartonsville -Bartonville -Bartosch -Bartow -Bartram -Bartramia -Bartramiaceae -Bartramian -bartree -Bartsia -baru -Baruch -barukhzy -Barundi -baruria -barvel -barvell -Barvick -barway -barways -barwal -barware -barwares -Barwick -barwin -barwing -barwise -barwood -bar-wound -Barzani -BAS -basad -basal -basale -basalia -basally -basal-nerved -basalt -basaltes -basaltic -basaltiform -basaltine -basaltoid -basalt-porphyry -basalts -basaltware -basan -basanite -basaree -basat -BASc -bascinet -Bascio -Basco -Bascology -Bascom -Bascomb -basculation -bascule -bascules -bascunan -Base -baseball -base-ball -baseballdom -baseballer -baseballs -baseball's -baseband -base-begged -base-begot -baseboard -baseboards -baseboard's -baseborn -base-born -basebred -baseburner -base-burner -basecoat -basecourt -base-court -based -base-forming -basehearted -baseheartedness -Basehor -Basel -baselard -Baseler -baseless -baselessly -baselessness -baselevel -basely -baselike -baseline -baseliner -baselines -baseline's -Basella -Basellaceae -basellaceous -Basel-Land -Basel-Mulhouse -Basel-Stadt -baseman -basemen -basement -basementless -basements -basement's -basementward -base-mettled -base-minded -base-mindedly -base-mindedness -basename -baseness -basenesses -basenet -Basenji -basenjis -baseplate -baseplug -basepoint -baser -baserunning -bases -base-souled -base-spirited -base-spiritedness -basest -base-witted -bas-fond -BASH -bashalick -Basham -Bashan -bashara -bashaw -bashawdom -bashawism -bashaws -bashawship -bashed -Bashee -Bashemath -Bashemeth -basher -bashers -bashes -bashful -bashfully -bashfulness -bashfulnesses -bashibazouk -bashi-bazouk -bashi-bazoukery -Bashilange -bashyle -bashing -Bashkir -Bashkiria -bashless -bashlik -bashlyk -bashlyks -bashment -Bashmuric -Basho -Bashuk -basi- -Basia -basial -basialveolar -basiarachnitis -basiarachnoiditis -basiate -basiated -basiating -basiation -Basibracteolate -basibranchial -basibranchiate -basibregmatic -BASIC -basically -basicerite -basichromatic -basichromatin -basichromatinic -basichromiole -basicity -basicities -basicytoparaplastin -basic-lined -basicranial -basics -basic's -basidia -basidial -basidigital -basidigitale -basidigitalia -basidiocarp -basidiogenetic -basidiolichen -Basidiolichenes -basidiomycete -Basidiomycetes -basidiomycetous -basidiophore -basidiospore -basidiosporous -basidium -basidorsal -Basie -Basye -basifacial -basify -basification -basified -basifier -basifiers -basifies -basifying -basifixed -basifugal -basigamy -basigamous -basigenic -basigenous -basigynium -basiglandular -basihyal -basihyoid -Basil -basyl -Basilan -basilar -Basilarchia -basilard -basilary -basilateral -Basildon -Basile -basilect -basileis -basilemma -basileus -Basilian -basilic -Basilica -Basilicae -basilical -basilicalike -basilican -basilicas -Basilicata -basilicate -basilicock -basilicon -Basilics -basilidan -Basilidian -Basilidianism -Basiliensis -basilinna -Basilio -basiliscan -basiliscine -Basiliscus -basilysis -basilisk -basilisks -basilissa -basilyst -Basilius -Basilosauridae -Basilosaurus -basils -basilweed -basimesostasis -basin -basinal -basinasal -basinasial -basined -basinerved -basinet -basinets -basinful -basing -Basingstoke -basinlike -basins -basin's -basioccipital -basion -basions -basiophitic -basiophthalmite -basiophthalmous -basiotribe -basiotripsy -basiparachromatin -basiparaplastin -basipetal -basipetally -basiphobia -basipodite -basipoditic -basipterygial -basipterygium -basipterygoid -Basir -basiradial -basirhinal -basirostral -basis -basiscopic -basisidia -basisolute -basisphenoid -basisphenoidal -basitemporal -basitting -basiventral -basivertebral -bask -baske -basked -basker -Baskerville -basket -basketball -basket-ball -basketballer -basketballs -basketball's -basket-bearing -basketful -basketfuls -basket-hilted -basketing -basketlike -basketmaker -basketmaking -basket-of-gold -basketry -basketries -baskets -basket's -basket-star -Baskett -basketware -basketweaving -basketwoman -basketwood -basketwork -basketworm -Baskin -basking -Baskish -Baskonize -basks -Basle -basnat -basnet -Basoche -basocyte -Basoga -basoid -Basoko -Basom -Basommatophora -basommatophorous -bason -Basonga-mina -Basongo -basophil -basophile -basophilia -basophilic -basophilous -basophils -basophobia -basos -basote -Basotho -Basotho-Qwaqwa -Basov -Basque -basqued -basques -basquine -Basra -bas-relief -Bas-Rhin -Bass -Bassa -Bassalia -Bassalian -bassan -bassanello -bassanite -Bassano -bassara -bassarid -Bassaris -Bassariscus -bassarisk -bass-bar -Bassein -Basse-Normandie -Bassenthwaite -basses -Basses-Alpes -Basses-Pyrn -Basset -basse-taille -basseted -Basseterre -Basse-Terre -basset-horn -basseting -bassetite -bassets -Bassett -bassetta -bassette -bassetted -bassetting -Bassetts -Bassfield -bass-horn -bassi -bassy -Bassia -bassie -bassine -bassinet -bassinets -bassinet's -bassing -bassirilievi -bassi-rilievi -bassist -bassists -bassly -bassness -bassnesses -Basso -basson -bassoon -bassoonist -bassoonists -bassoons -basso-relievo -basso-relievos -basso-rilievo -bassorin -bassos -bass-relief -bass's -bassus -bass-viol -basswood -bass-wood -basswoods -Bast -basta -Bastaard -Bastad -bastant -Bastard -bastarda -bastard-cut -bastardy -bastardice -bastardies -bastardisation -bastardise -bastardised -bastardising -bastardism -bastardization -bastardizations -bastardize -bastardized -bastardizes -bastardizing -bastardly -bastardliness -bastardry -bastards -bastard's -bastard-saw -bastard-sawed -bastard-sawing -bastard-sawn -baste -basted -bastel-house -basten -baster -basters -bastes -basti -Bastia -Bastian -bastide -Bastien -bastile -bastiles -Bastille -bastilles -bastillion -bastiment -bastinade -bastinaded -bastinades -bastinading -bastinado -bastinadoed -bastinadoes -bastinadoing -basting -bastings -bastion -bastionary -bastioned -bastionet -bastions -bastion's -bastite -bastnaesite -bastnasite -basto -Bastogne -baston -bastonet -bastonite -Bastrop -basts -basural -basurale -Basuto -Basutoland -Basutos -Bat -Bataan -Bataan-Corregidor -batable -batad -Batak -batakan -bataleur -batamote -Batan -Batanes -Batangas -batara -batarde -batardeau -batata -Batatas -batatilla -Batavi -Batavia -Batavian -batboy -batboys -batch -batched -Batchelder -Batchelor -batcher -batchers -batches -batching -Batchtown -Bate -batea -bat-eared -bateau -bateaux -bated -bateful -Batekes -batel -bateleur -batell -Bateman -batement -Baten -bater -Bates -Batesburg -Batesland -Batesville -batete -Batetela -batfish -batfishes -batfowl -bat-fowl -batfowled -batfowler -batfowling -batfowls -batful -Bath -bath- -Batha -Bathala -bathe -batheable -bathed -Bathelda -bather -bathers -bathes -Bathesda -bathetic -bathetically -bathflower -bathhouse -bathhouses -bathy- -bathyal -bathyanesthesia -bathybian -bathybic -bathybius -bathic -bathycentesis -bathychrome -bathycolpian -bathycolpic -bathycurrent -bathyesthesia -bathygraphic -bathyhyperesthesia -bathyhypesthesia -bathyl -Bathilda -bathylimnetic -bathylite -bathylith -bathylithic -bathylitic -bathymeter -bathymetry -bathymetric -bathymetrical -bathymetrically -Bathinette -bathing -bathing-machine -bathyorographical -bathypelagic -bathyplankton -bathyscape -bathyscaph -bathyscaphe -bathyscaphes -bathyseism -bathysmal -bathysophic -bathysophical -bathysphere -bathyspheres -bathythermogram -bathythermograph -bathkol -bathless -bath-loving -bathman -bathmat -bathmats -bathmic -bathmism -bathmotropic -bathmotropism -batho- -bathochromatic -bathochromatism -bathochrome -bathochromy -bathochromic -bathoflore -bathofloric -batholite -batholith -batholithic -batholiths -batholitic -Batholomew -bathomania -bathometer -bathometry -Bathonian -bathool -bathophobia -bathorse -bathos -bathoses -bathrobe -bathrobes -bathrobe's -bathroom -bathroomed -bathrooms -bathroom's -bathroot -baths -Bathsheb -Bathsheba -Bath-sheba -Bathsheeb -bathtub -bathtubful -bathtubs -bathtub's -bathukolpian -bathukolpic -Bathulda -Bathurst -bathvillite -bathwater -bathwort -Batia -Batidaceae -batidaceous -batik -batiked -batiker -batiking -batiks -batikulin -batikuling -Batilda -bating -batino -batyphone -Batis -Batish -Batista -batiste -batistes -batitinan -batlan -Batley -batler -batlet -batlike -batling -batlon -Batman -batmen -bat-minded -bat-mindedness -bat-mule -Batna -Batocrinidae -Batocrinus -Batodendron -batoid -Batoidei -Batoka -Baton -batoneer -Batonga -batonist -batonistic -batonne -batonnier -batons -baton's -batoon -batophobia -Bator -Batory -Batrachia -batrachian -batrachians -batrachiate -Batrachidae -batrachite -Batrachium -batracho- -batrachoid -Batrachoididae -batrachophagous -Batrachophidia -batrachophobia -batrachoplasty -Batrachospermum -batrachotoxin -Batruk -bats -bat's -BATSE -Batsheva -bats-in-the-belfry -batsman -batsmanship -batsmen -Batson -batster -batswing -batt -Batta -battable -battailant -battailous -Battak -Battakhin -battalia -battalias -battalion -battalions -battalion's -Battambang -battarism -battarismus -Battat -batteau -batteaux -batted -battel -batteled -batteler -batteling -Battelle -Battelmatt -battels -battement -battements -batten -Battenburg -battened -battener -batteners -battening -battens -batter -batterable -battercake -batterdock -battered -batterer -batterfang -Battery -battery-charging -batterie -batteried -batteries -batteryman -battering -battering-ram -battery-powered -battery's -battery-testing -batterman -batter-out -batters -Battersea -batteuse -Batty -battycake -Batticaloa -battier -batties -Battiest -battik -battiks -battiness -batting -battings -Battipaglia -battish -Battista -Battiste -battle -battle-ax -battle-axe -Battleboro -battled -battledore -battledored -battledores -battledoring -battle-fallen -battlefield -battlefields -battlefield's -battlefront -battlefronts -battlefront's -battleful -battleground -battlegrounds -battleground's -battlement -battlemented -battlements -battlement's -battlepiece -battleplane -battler -battlers -battles -battle-scarred -battleship -battleships -battleship's -battle-slain -battlesome -battle-spent -battlestead -Battletown -battlewagon -battleward -battlewise -battle-writhen -battling -battology -battological -battologise -battologised -battologising -battologist -battologize -battologized -battologizing -batton -batts -battu -battue -battues -batture -Battus -battuta -battutas -battute -battuto -battutos -batukite -batule -Batum -Batumi -batuque -Batussi -Batwa -batwing -batwoman -batwomen -batz -batzen -BAU -baubee -baubees -bauble -baublery -baubles -bauble's -baubling -Baubo -bauch -Bauchi -bauchle -Baucis -bauckie -bauckiebird -baud -baudekin -baudekins -Baudelaire -baudery -Baudette -Baudin -Baudoin -Baudouin -baudrons -baudronses -bauds -Bauer -Bauera -Bauernbrot -baufrey -bauge -Baugh -Baughman -Bauhaus -Bauhinia -bauhinias -bauk -Baul -bauld -baulea -bauleah -baulk -baulked -baulky -baulkier -baulkiest -baulking -baulks -Baum -Baumann -Baumbaugh -Baume -Baumeister -baumhauerite -baumier -Baun -bauno -Baure -Bauru -Bausch -Bauske -Bausman -bauson -bausond -bauson-faced -bauta -Bautain -Bautista -Bautram -bautta -Bautzen -bauxite -bauxites -bauxitic -bauxitite -Bav -bavardage -bavary -Bavaria -Bavarian -bavaroy -bavarois -bavaroise -bavenite -bavette -baviaantje -Bavian -baviere -bavin -Bavius -Bavon -bavoso -baw -bawarchi -bawbee -bawbees -bawble -bawcock -bawcocks -bawd -bawdy -bawdier -bawdies -bawdiest -bawdyhouse -bawdyhouses -bawdily -bawdiness -bawdinesses -bawdry -bawdric -bawdrick -bawdrics -bawdries -bawds -bawdship -bawdstrot -bawhorse -bawke -bawl -bawled -bawley -bawler -bawlers -bawly -bawling -bawling-out -bawls -bawn -bawneen -Bawra -bawrel -bawsint -baws'nt -bawsunt -bawty -bawtie -bawties -Bax -B-axes -Baxy -Baxie -B-axis -Baxley -Baxter -Baxterian -Baxterianism -baxtone -bazaar -bazaars -bazaar's -Bazaine -Bazar -bazars -Bazatha -baze -Bazigar -Bazil -Bazin -Bazine -Baziotes -Bazluke -bazoo -bazooka -bazookaman -bazookamen -bazookas -bazooms -bazoos -bazzite -BB -BBA -BBB -BBC -BBL -bbl. -bbls -BBN -bbs -BBXRT -BC -BCBS -BCC -BCD -BCDIC -BCE -BCerE -bcf -BCh -Bchar -BChE -bchs -BCL -BCM -BCom -BComSc -BCP -BCPL -BCR -BCS -BCWP -BCWS -BD -bd. -BDA -BDC -BDD -Bde -bdellatomy -bdellid -Bdellidae -bdellium -bdelliums -bdelloid -Bdelloida -bdellometer -Bdellostoma -Bdellostomatidae -Bdellostomidae -bdellotomy -Bdelloura -Bdellouridae -bdellovibrio -BDes -BDF -bdft -bdl -bdl. -bdle -bdls -bdrm -BDS -BDSA -BDT -BE -be- -BEA -Beach -Beacham -beachboy -Beachboys -beachcomb -beachcomber -beachcombers -beachcombing -beachdrops -beached -beacher -beaches -beachfront -beachhead -beachheads -beachhead's -beachy -beachie -beachier -beachiest -beaching -beachlamar -Beach-la-Mar -beachless -beachman -beachmaster -beachmen -beach-sap -beachside -beachward -beachwear -Beachwood -beacon -beaconage -beaconed -beaconing -beaconless -beacons -beacon's -Beaconsfield -beaconwise -bead -beaded -beaded-edge -beadeye -bead-eyed -beadeyes -beader -beadflush -bead-hook -beadhouse -beadhouses -beady -beady-eyed -beadier -beadiest -beadily -beadiness -beading -beadings -Beadle -beadledom -beadlehood -beadleism -beadlery -beadles -beadle's -beadleship -beadlet -beadlike -bead-like -beadman -beadmen -beadroll -bead-roll -beadrolls -beadrow -bead-ruby -bead-rubies -beads -bead-shaped -beadsman -beadsmen -beadswoman -beadswomen -beadwork -beadworks -Beagle -beagles -beagle's -beagling -beak -beak-bearing -beaked -beaker -beakerful -beakerman -beakermen -beakers -beakful -beakhead -beak-head -beaky -beakier -beakiest -beakiron -beak-iron -beakless -beaklike -beak-like -beak-nosed -beaks -beak-shaped -Beal -beala -bealach -Beale -Bealeton -bealing -Beall -be-all -beallach -Bealle -Beallsville -Beals -bealtared -Bealtine -Bealtuinn -beam -beamage -Beaman -beam-bending -beambird -beamed -beam-end -beam-ends -beamer -beamers -beamfilling -beamful -beamhouse -beamy -beamier -beamiest -beamily -beaminess -beaming -beamingly -beamish -beamishly -beamless -beamlet -beamlike -beamman -beamroom -beams -beamsman -beamsmen -beamster -beam-straightening -beam-tree -beamwork -Bean -beanbag -bean-bag -beanbags -beanball -beanballs -bean-cleaning -beancod -bean-crushing -Beane -beaned -Beaner -beanery -beaneries -beaners -beanfeast -bean-feast -beanfeaster -bean-fed -beanfest -beanfield -beany -beanie -beanier -beanies -beaniest -beaning -beanlike -beano -beanos -bean-planting -beanpole -beanpoles -bean-polishing -beans -beansetter -bean-shaped -beanshooter -beanstalk -beanstalks -beant -beanweed -beaproned -Bear -bearability -bearable -bearableness -bearably -bearance -bearbaiter -bearbaiting -bear-baiting -bearbane -bearberry -bearberries -bearbind -bearbine -bearbush -bearcat -bearcats -Bearce -bearcoot -Beard -bearded -beardedness -Bearden -bearder -beardfish -beardfishes -beardy -beardie -bearding -beardless -beardlessness -beardlike -beardom -beards -Beardsley -Beardstown -beardtongue -Beare -beared -bearer -bearer-off -bearers -bearess -bearfoot -bearfoots -bearherd -bearhide -bearhound -bearhug -bearhugs -bearing -bearings -bearish -bearishly -bearishness -bear-lead -bear-leader -bearleap -bearlet -bearlike -bearm -Bearnaise -Bearnard -bearpaw -bears -bear's-breech -bear's-ear -bear's-foot -bear's-foots -bearship -bearskin -bearskins -bear's-paw -Bearsville -beartongue -bear-tree -bearward -bearwood -bearwoods -bearwort -Beasley -Beason -beast -beastbane -beastdom -beasthood -beastie -beasties -beastily -beastings -beastish -beastishness -beastly -beastlier -beastliest -beastlike -beastlily -beastliness -beastlinesses -beastling -beastlings -beastman -Beaston -beasts -beastship -beat -Beata -beatable -beatably -beatae -beatas -beat-beat -beatee -beaten -beater -beaterman -beatermen -beater-out -beaters -beaters-up -beater-up -beath -beati -beatify -beatific -beatifical -beatifically -beatificate -beatification -beatifications -beatified -beatifies -beatifying -beatille -beatinest -beating -beatings -beating-up -Beatitude -beatitudes -beatitude's -Beatles -beatless -beatnik -beatnikism -beatniks -beatnik's -Beaton -Beatrice -Beatrisa -Beatrix -Beatriz -beats -beatster -Beatty -Beattie -Beattyville -beat-up -beatus -beatuti -Beau -Beauchamp -Beauclerc -beauclerk -beaucoup -Beaudoin -beaued -beauetry -Beaufert -beaufet -beaufin -Beauford -Beaufort -beaugregory -beaugregories -Beauharnais -beau-ideal -beau-idealize -beauing -beauish -beauism -Beaujolais -Beaujolaises -Beaulieu -Beaumarchais -beaume -beau-monde -Beaumont -Beaumontia -Beaune -beaupere -beaupers -beau-pleader -beau-pot -Beauregard -beaus -beau's -beauseant -beauship -beausire -beaut -beauteous -beauteously -beauteousness -beauti -beauty -beauty-beaming -beauty-berry -beauty-blind -beauty-blooming -beauty-blushing -beauty-breathing -beauty-bright -beauty-bush -beautician -beauticians -beauty-clad -beautydom -beautied -beauties -beautify -beautification -beautifications -beautified -beautifier -beautifiers -beautifies -beautifying -beauty-fruit -beautiful -beautifully -beautifulness -beautihood -beautiless -beauty-loving -beauty-proof -beauty's -beautyship -beauty-waning -beauts -Beauvais -Beauvoir -beaux -Beaux-Arts -beaux-esprits -beauxite -BEAV -Beaver -Beaverboard -Beaverbrook -Beaverdale -beavered -beaverette -beavery -beaveries -beavering -beaverish -beaverism -beaverite -beaverize -Beaverkill -beaverkin -Beaverlett -beaverlike -beaverpelt -beaverroot -beavers -beaver's -beaverskin -beaverteen -Beaverton -Beavertown -beaver-tree -Beaverville -beaverwood -beback -bebay -bebait -beballed -bebang -bebannered -bebar -bebaron -bebaste -bebat -bebathe -bebatter -Bebe -bebeast -bebed -bebeerin -bebeerine -bebeeru -bebeerus -Bebel -bebelted -Beberg -bebilya -Bebington -bebite -bebization -beblain -beblear -bebled -bebleed -bebless -beblister -beblood -beblooded -beblooding -bebloods -bebloom -beblot -beblotch -beblubber -beblubbered -bebog -bebop -bebopper -beboppers -bebops -beboss -bebotch -bebothered -bebouldered -bebrave -bebreech -Bebryces -bebrine -bebrother -bebrush -bebump -Bebung -bebusy -bebuttoned -bec -becafico -becall -becalm -becalmed -becalming -becalmment -becalms -became -becap -becapped -becapping -becaps -becard -becarpet -becarpeted -becarpeting -becarpets -becarve -becasse -becassine -becassocked -becater -because -Becca -beccabunga -beccaccia -beccafico -beccaficoes -beccaficos -Beccaria -becchi -becco -becense -bechained -bechalk -bechalked -bechalking -bechalks -bechamel -bechamels -bechance -bechanced -bechances -bechancing -becharm -becharmed -becharming -becharms -bechase -bechatter -bechauffeur -beche -becheck -Beche-de-Mer -beche-le-mar -becher -bechern -Bechet -bechic -bechignoned -bechirp -Bechler -Becht -Bechtel -Bechtelsville -Bechtler -Bechuana -Bechuanaland -Bechuanas -becircled -becivet -Beck -Becka -becked -beckelite -Beckemeyer -Becker -Beckerman -Becket -beckets -Beckett -Beckford -Becki -Becky -Beckie -becking -beckiron -Beckley -Beckman -Beckmann -beckon -beckoned -beckoner -beckoners -beckoning -beckoningly -beckons -becks -Beckville -Beckwith -beclad -beclamor -beclamored -beclamoring -beclamors -beclamour -beclang -beclap -beclart -beclasp -beclasped -beclasping -beclasps -beclatter -beclaw -beclip -becloak -becloaked -becloaking -becloaks -beclog -beclogged -beclogging -beclogs -beclose -beclothe -beclothed -beclothes -beclothing -becloud -beclouded -beclouding -beclouds -beclout -beclown -beclowned -beclowning -beclowns -becluster -becobweb -becoiffed -becollier -becolme -becolor -becombed -become -becomed -becomes -becometh -becoming -becomingly -becomingness -becomings -becomma -becompass -becompliment -becoom -becoresh -becost -becousined -becovet -becoward -becowarded -becowarding -becowards -Becquer -Becquerel -becquerelite -becram -becramp -becrampon -becrawl -becrawled -becrawling -becrawls -becreep -becry -becrime -becrimed -becrimes -becriming -becrimson -becrinolined -becripple -becrippled -becrippling -becroak -becross -becrowd -becrowded -becrowding -becrowds -becrown -becrush -becrust -becrusted -becrusting -becrusts -becudgel -becudgeled -becudgeling -becudgelled -becudgelling -becudgels -becuffed -becuiba -becumber -becuna -becurl -becurry -becurse -becursed -becurses -becursing -becurst -becurtained -becushioned -becut -BED -bedabble -bedabbled -bedabbles -bedabbling -Bedad -bedaff -bedaggered -bedaggle -beday -bedamn -bedamned -bedamning -bedamns -bedamp -bedangled -bedare -bedark -bedarken -bedarkened -bedarkening -bedarkens -bedash -bedaub -bedaubed -bedaubing -bedaubs -bedawee -bedawn -bedaze -bedazed -bedazement -bedazzle -bedazzled -bedazzlement -bedazzles -bedazzling -bedazzlingly -bedboard -bedbug -bedbugs -bedbug's -bedcap -bedcase -bedchair -bedchairs -bedchamber -bedclothes -bed-clothes -bedclothing -bedcord -bedcover -bedcovers -beddable -bed-davenport -bedded -bedder -bedders -bedder's -beddy-bye -bedding -beddingroll -beddings -Beddoes -Bede -bedead -bedeaf -bedeafen -bedeafened -bedeafening -bedeafens -bedebt -bedeck -bedecked -bedecking -bedecks -bedecorate -bedeen -bedegar -bedeguar -bedehouse -bedehouses -bedel -Bedelia -Bedell -bedells -bedels -bedelve -bedeman -bedemen -beden -bedene -bedesman -bedesmen -bedeswoman -bedeswomen -bedevil -bedeviled -bedeviling -bedevilled -bedevilling -bedevilment -bedevils -bedew -bedewed -bedewer -bedewing -bedewoman -bedews -bedfast -bedfellow -bedfellows -bedfellowship -bed-fere -bedflower -bedfoot -Bedford -Bedfordshire -bedframe -bedframes -bedgery -bedgoer -bedgown -bedgowns -bed-head -bediademed -bediamonded -bediaper -bediapered -bediapering -bediapers -Bedias -bedye -bedight -bedighted -bedighting -bedights -bedikah -bedim -bedimmed -bedimming -bedimple -bedimpled -bedimples -bedimplies -bedimpling -bedims -bedin -bedip -bedirt -bedirter -bedirty -bedirtied -bedirties -bedirtying -bedismal -Bedivere -bedizen -bedizened -bedizening -bedizenment -bedizens -bedkey -bedlam -bedlamer -Bedlamic -bedlamise -bedlamised -bedlamising -bedlamism -bedlamite -bedlamitish -bedlamize -bedlamized -bedlamizing -bedlamp -bedlamps -bedlams -bedlar -bedless -bedlids -bedlight -bedlike -Bedlington -Bedlingtonshire -bedmaker -bed-maker -bedmakers -bedmaking -bedman -bedmate -bedmates -Bedminster -bednighted -bednights -bedoctor -bedog -bedoyo -bedolt -bedot -bedote -bedotted -Bedouin -Bedouinism -Bedouins -bedouse -bedown -bedpad -bedpan -bedpans -bedplate -bedplates -bedpost -bedposts -bedpost's -bedquilt -bedquilts -bedrabble -bedrabbled -bedrabbling -bedraggle -bedraggled -bedragglement -bedraggles -bedraggling -bedrail -bedrails -bedral -bedrape -bedraped -bedrapes -bedraping -bedravel -bedread -bedrel -bedrench -bedrenched -bedrenches -bedrenching -bedress -bedribble -bedrid -bedridden -bedriddenness -bedrift -bedright -bedrip -bedrite -bedrivel -bedriveled -bedriveling -bedrivelled -bedrivelling -bedrivels -bedrizzle -bedrock -bedrocks -bedrock's -bedroll -bedrolls -bedroom -bedrooms -bedroom's -bedrop -bedrown -bedrowse -bedrug -bedrugged -bedrugging -bedrugs -Beds -bed's -bedscrew -bedsheet -bedsheets -bedsick -bedside -bedsides -bedsit -bedsite -bedsitter -bed-sitter -bed-sitting-room -bedsock -bedsonia -bedsonias -bedsore -bedsores -bedspread -bedspreads -bedspread's -bedspring -bedsprings -bedspring's -bedstaff -bedstand -bedstands -bedstaves -bedstead -bedsteads -bedstead's -bedstock -bedstraw -bedstraws -bedstring -bedswerver -bedtick -bedticking -bedticks -bedtime -bedtimes -bedub -beduchess -beduck -Beduin -Beduins -beduke -bedull -bedumb -bedumbed -bedumbing -bedumbs -bedunce -bedunced -bedunces -bedunch -beduncing -bedung -bedur -bedusk -bedust -bedway -bedways -bedward -bedwards -bedwarf -bedwarfed -bedwarfing -bedwarfs -bedwarmer -Bedwell -bed-wetting -Bedworth -BEE -beearn -be-east -Beeb -beeball -Beebe -beebee -beebees -beebread -beebreads -bee-butt -beech -Beecham -Beechbottom -beechdrops -beechen -Beecher -beeches -beech-green -beechy -beechier -beechiest -Beechmont -beechnut -beechnuts -beechwood -beechwoods -Beeck -Beedeville -beedged -beedi -beedom -Beedon -bee-eater -beef -beefalo -beefaloes -beefalos -beef-brained -beefburger -beefburgers -beefcake -beefcakes -beefeater -beefeaters -beef-eating -beefed -beefed-up -beefer -beefers -beef-faced -beefhead -beefheaded -beefy -beefier -beefiest -beefily -beefin -beefiness -beefing -beefing-up -beefish -beefishness -beefless -beeflower -beefs -beefsteak -beef-steak -beefsteaks -beeftongue -beef-witted -beef-wittedly -beef-wittedness -beefwood -beef-wood -beefwoods -beegerite -beehead -beeheaded -bee-headed -beeherd -Beehive -beehives -beehive's -beehive-shaped -Beehouse -beeyard -beeish -beeishness -beek -beekeeper -beekeepers -beekeeping -beekite -Beekman -Beekmantown -beelbow -beele -Beeler -beelike -beeline -beelines -beelol -bee-loud -Beelzebub -Beelzebubian -Beelzebul -beeman -beemaster -beemen -Beemer -been -beennut -beent -beento -beep -beeped -beeper -beepers -beeping -beeps -Beer -Beera -beerage -beerbachite -beerbelly -beerbibber -Beerbohm -beeregar -beerhouse -beerhouses -beery -beerier -beeriest -beerily -beeriness -beerish -beerishly -beermaker -beermaking -beermonger -Beernaert -beerocracy -Beerothite -beerpull -Beers -Beersheba -Beersheeba -beer-up -bees -Beesley -Beeson -beest -beesting -beestings -beestride -beeswax -bees-wax -beeswaxes -beeswing -beeswinged -beeswings -beet -beetewk -beetfly -beeth -Beethoven -Beethovenian -Beethovenish -Beethovian -beety -beetiest -beetle -beetle-browed -beetle-crusher -beetled -beetle-green -beetlehead -beetleheaded -beetle-headed -beetleheadedness -beetler -beetlers -beetles -beetle's -beetlestock -beetlestone -beetleweed -beetlike -beetling -beetmister -Beetner -Beetown -beetrave -beet-red -beetroot -beetrooty -beetroots -beets -beet's -beeve -beeves -Beeville -beevish -beeway -beeware -beeweed -beewinged -beewise -beewort -beezer -beezers -BEF -befall -befallen -befalling -befalls -befame -befamilied -befamine -befan -befancy -befanned -befathered -befavor -befavour -befeather -befell -beferned -befetished -befetter -befezzed -Beffrey -beffroy -befiddle -befilch -befile -befilleted -befilmed -befilth -Befind -befinger -befingered -befingering -befingers -befire -befist -befit -befits -befit's -befitted -befitting -befittingly -befittingness -beflag -beflagged -beflagging -beflags -beflannel -beflap -beflatter -beflea -befleaed -befleaing -befleas -befleck -beflecked -beflecking -beflecks -beflounce -beflour -beflout -beflower -beflowered -beflowering -beflowers -beflum -befluster -befoam -befog -befogged -befogging -befogs -befool -befoolable -befooled -befooling -befoolment -befools -befop -before -before-cited -before-created -before-delivered -before-going -beforehand -beforehandedness -before-known -beforementioned -before-mentioned -before-named -beforeness -before-noticed -before-recited -beforesaid -before-said -beforested -before-tasted -before-thought -beforetime -beforetimes -before-told -before-warned -before-written -befortune -befoul -befouled -befouler -befoulers -befoulier -befouling -befoulment -befouls -befountained -befraught -befreckle -befreeze -befreight -befret -befrets -befretted -befretting -befriend -befriended -befriender -befriending -befriendment -befriends -befrill -befrilled -befringe -befringed -befringes -befringing -befriz -befrocked -befrogged -befrounce -befrumple -befuddle -befuddled -befuddlement -befuddlements -befuddler -befuddlers -befuddles -befuddling -befume -befur -befurbelowed -befurred -beg -Bega -begabled -begad -begay -begall -begalled -begalling -begalls -began -begani -begar -begari -begary -begarie -begarlanded -begarnish -begartered -begash -begass -begat -begats -begattal -begaud -begaudy -begaze -begazed -begazes -begazing -begeck -begem -begemmed -begemming -beget -begets -begettal -begetter -begetters -begetting -Begga -beggable -beggar -beggardom -beggared -beggarer -beggaress -beggarhood -beggary -beggaries -beggaring -beggarism -beggarly -beggarlice -beggar-lice -beggarlike -beggarliness -beggarman -beggar-my-neighbor -beggar-my-neighbour -beggar-patched -beggars -beggar's-lice -beggar's-tick -beggar's-ticks -beggar-tick -beggar-ticks -beggarweed -beggarwise -beggarwoman -begged -begger -Beggiatoa -Beggiatoaceae -beggiatoaceous -begging -beggingly -beggingwise -Beggs -Beghard -Beghtol -begift -begiggle -begild -Begin -beginger -beginner -beginners -beginner's -beginning -beginnings -beginning's -begins -begird -begirded -begirding -begirdle -begirdled -begirdles -begirdling -begirds -begirt -beglad -begladded -begladding -beglads -beglamour -beglare -beglerbeg -beglerbeglic -beglerbeglik -beglerbegluc -beglerbegship -beglerbey -beglew -beglic -beglide -beglitter -beglobed -begloom -begloomed -beglooming -beglooms -begloze -begluc -beglue -begnaw -begnawed -begnawn -bego -begob -begobs -begod -begoggled -begohm -begone -begonia -Begoniaceae -begoniaceous -Begoniales -begonias -begorah -begorra -begorrah -begorry -begot -begotten -begottenness -begoud -begowk -begowned -begrace -begray -begrain -begrave -begrease -begreen -begrett -begrim -begrime -begrimed -begrimer -begrimes -begriming -begrimmed -begrimming -begrims -begripe -begroan -begroaned -begroaning -begroans -begrown -begrudge -begrudged -begrudger -begrudges -begrudging -begrudgingly -begruntle -begrutch -begrutten -begs -begster -beguard -beguess -beguile -beguiled -beguileful -beguilement -beguilements -beguiler -beguilers -beguiles -beguiling -beguilingly -beguilingness -Beguin -Beguine -beguines -begulf -begulfed -begulfing -begulfs -begum -begummed -begumming -begums -begun -begunk -begut -Behah -Behaim -behale -behalf -behallow -behalves -behammer -Behan -behang -behap -Behar -behatted -behav -behave -behaved -behaver -behavers -behaves -behaving -behavior -behavioral -behaviorally -behaviored -behaviorism -behaviorist -behavioristic -behavioristically -behaviorists -behaviors -behaviour -behavioural -behaviourally -behaviourism -behaviourist -behaviours -behead -beheadal -beheaded -beheader -beheading -beheadlined -beheads -behear -behears -behearse -behedge -beheira -beheld -behelp -behemoth -behemothic -behemoths -behen -behenate -behenic -behest -behests -behew -behight -behymn -behind -behinder -behindhand -behinds -behindsight -behint -behypocrite -Behistun -behither -Behka -Behl -Behlau -Behlke -Behm -Behmen -Behmenism -Behmenist -Behmenite -Behn -Behnken -behold -beholdable -beholden -beholder -beholders -beholding -beholdingness -beholds -behoney -behoof -behooped -behoot -behoove -behooved -behooveful -behoovefully -behoovefulness -behooves -behooving -behoovingly -behorn -behorror -behove -behoved -behovely -behoves -behoving -behowl -behowled -behowling -behowls -Behre -Behrens -Behring -Behrman -behung -behusband -bey -Beica -beice -Beichner -Beid -Beiderbecke -beydom -Beyer -beyerite -beige -beigel -beiges -beigy -beignet -beignets -Beijing -beild -Beyle -Beylic -beylical -beylics -beylik -beyliks -Beilul -Bein -being -beingless -beingness -beings -beinked -beinly -beinness -Beyo -Beyoglu -beyond -beyondness -beyonds -Beira -beyrichite -Beirne -Beyrouth -Beirut -beys -beisa -beisance -Beisel -beyship -Beitch -Beitnes -Beitris -Beitz -Beja -bejabbers -bejabers -bejade -bejan -bejant -bejape -bejaundice -bejazz -bejel -bejeled -bejeling -bejelled -bejelling -bejesuit -bejesus -bejewel -bejeweled -bejeweling -bejewelled -bejewelling -bejewels -bejezebel -bejig -Bejou -bejuco -bejuggle -bejumble -bejumbled -bejumbles -bejumbling -Beka -Bekaa -Bekah -Bekelja -Beker -bekerchief -Bekha -bekick -bekilted -beking -bekinkinite -bekiss -bekissed -bekisses -bekissing -Bekki -bekko -beknave -beknight -beknighted -beknighting -beknights -beknit -beknived -beknot -beknots -beknotted -beknottedly -beknottedness -beknotting -beknow -beknown -Bel -Bela -belabor -belabored -belaboring -belabors -belabour -belaboured -belabouring -belabours -bel-accoil -belace -belaced -belady -beladied -beladies -beladying -beladle -Belafonte -belage -belah -belay -belayed -belayer -belaying -Belayneh -Belair -belays -Belait -Belaites -Belak -Belalton -belam -Belamcanda -Bel-ami -Belamy -belamour -belanda -belander -Belanger -belap -belar -belard -Belasco -belash -belast -belat -belate -belated -belatedly -belatedness -belating -Belatrix -belatticed -belaud -belauded -belauder -belauding -belauds -Belaunde -belavendered -belch -belched -Belcher -belchers -Belchertown -belches -belching -Belcourt -beld -Belda -beldam -beldame -beldames -beldams -beldamship -Belden -Beldenville -belder -belderroot -Belding -belduque -beleaf -beleaguer -beleaguered -beleaguerer -beleaguering -beleaguerment -beleaguers -beleap -beleaped -beleaping -beleaps -beleapt -beleave -belection -belecture -beledgered -belee -beleed -beleft -Belem -belemnid -belemnite -Belemnites -belemnitic -Belemnitidae -belemnoid -Belemnoidea -Belen -beleper -belesprit -bel-esprit -beletter -beleve -Belfair -Belfast -belfather -Belfield -Belford -Belfort -belfry -belfried -belfries -belfry's -Belg -Belg. -belga -Belgae -belgard -belgas -Belgaum -Belgian -belgians -belgian's -Belgic -Belgique -Belgium -Belgophile -Belgorod-Dnestrovski -Belgrade -Belgrano -Belgravia -Belgravian -Bely -Belia -Belial -Belialic -Belialist -belibel -belibeled -belibeling -Belicia -belick -belicoseness -belie -belied -belief -beliefful -belieffulness -beliefless -beliefs -belief's -Belier -beliers -belies -believability -believable -believableness -believably -believe -belie-ve -believed -believer -believers -believes -believeth -believing -believingly -belight -beliing -belying -belyingly -belike -beliked -belikely -Belili -belime -belimousined -Belinda -Belington -Belinuridae -Belinurus -belion -beliquor -beliquored -beliquoring -beliquors -Belis -Belisarius -Belita -belite -Belitoeng -Belitong -belitter -belittle -belittled -belittlement -belittler -belittlers -belittles -belittling -Belitung -belive -Belize -Belk -Belknap -Bell -Bella -Bellabella -Bellacoola -belladonna -belladonnas -Bellaghy -Bellay -Bellaire -Bellamy -Bellanca -bellarmine -Bellarthur -Bellatrix -Bellaude -bell-bearer -bellbind -bellbinder -bellbine -bellbird -bell-bird -bellbirds -bellboy -bellboys -bellboy's -bellbottle -bell-bottom -bell-bottomed -bell-bottoms -Bellbrook -Bellbuckle -BELLCORE -bell-cranked -bell-crowned -Bellda -Belldame -Belldas -Belle -Bellechasse -belled -belledom -Belleek -belleeks -Bellefonte -bellehood -Bellelay -Bellemead -Bellemina -Belleplaine -Beller -belleric -Bellerive -Bellerophon -Bellerophontes -Bellerophontic -Bellerophontidae -Bellerose -belles -belle's -belles-lettres -belleter -belletrist -belletristic -belletrists -Bellevernon -Belleview -Belleville -Bellevue -Bellew -bell-faced -Bellflower -bell-flower -bell-flowered -bellhanger -bellhanging -bell-hooded -bellhop -bellhops -bellhop's -bellhouse -bell-house -belli -belly -bellyache -bellyached -bellyacher -bellyaches -bellyaching -bellyband -belly-band -belly-beaten -belly-blind -bellibone -belly-bound -belly-bumper -bellybutton -bellybuttons -bellic -bellical -belly-cheer -bellicism -bellicist -bellicose -bellicosely -bellicoseness -bellicosity -bellicosities -belly-devout -bellied -bellyer -bellies -belly-fed -belliferous -bellyfish -bellyflaught -belly-flop -belly-flopped -belly-flopping -bellyful -belly-ful -bellyfull -bellyfulls -bellyfuls -belligerence -belligerences -belligerency -belligerencies -belligerent -belligerently -belligerents -belligerent's -belly-god -belly-gulled -belly-gun -belly-helve -bellying -belly-laden -bellyland -belly-land -belly-landing -bellylike -bellyman -Bellina -belly-naked -belling -Bellingham -Bellini -Bellinzona -bellypiece -belly-piece -bellypinch -belly-pinched -bellipotent -belly-proud -Bellis -belly's -belly-sprung -bellite -belly-timber -belly-wash -belly-whop -belly-whopped -belly-whopping -belly-worshiping -bell-less -bell-like -bell-magpie -bellmaker -bellmaking -bellman -bellmanship -bellmaster -Bellmead -bellmen -bell-metal -Bellmont -Bellmore -bellmouth -bellmouthed -bell-mouthed -bell-nosed -Bello -Belloc -Belloir -bellon -Bellona -Bellonian -bellonion -belloot -Bellot -bellota -bellote -Bellotto -Bellovaci -Bellow -bellowed -bellower -bellowers -bellowing -Bellows -bellowsful -bellowslike -bellowsmaker -bellowsmaking -bellowsman -Bellport -bellpull -bellpulls -bellrags -bell-ringer -Bells -bell's -bell-shaped -belltail -bell-tongue -belltopper -belltopperdom -belluine -bellum -bell-up -Bellvale -Bellville -Bellvue -bellware -bellwaver -bellweather -bellweed -bellwether -bell-wether -bellwethers -bellwether's -bellwind -bellwine -Bellwood -bellwort -bellworts -Belmar -Bel-Merodach -Belmond -Belmondo -Belmont -Belmonte -Belmopan -beloam -belock -beloeilite -beloid -Beloit -belomancy -Belone -belonephobia -belonesite -belong -belonged -belonger -belonging -belongings -belongs -belonid -Belonidae -belonite -belonoid -belonosphaerite -belook -belord -Belorussia -Belorussian -Belostok -Belostoma -Belostomatidae -Belostomidae -belotte -belouke -belout -belove -beloved -beloveds -Belovo -below -belowdecks -belowground -belows -belowstairs -belozenged -Belpre -Bel-Ridge -bels -Belsano -Belsen -Belshazzar -Belshazzaresque -Belshin -belsire -Belsky -belswagger -belt -Beltane -belt-coupled -beltcourse -belt-cutting -belt-driven -belted -Beltene -Belter -belter-skelter -Belteshazzar -belt-folding -Beltian -beltie -beltine -belting -beltings -Beltir -Beltis -beltless -beltline -beltlines -beltmaker -beltmaking -beltman -beltmen -Belton -Beltrami -Beltran -belt-repairing -belts -belt-sanding -belt-sewing -Beltsville -belt-tightening -Beltu -beltway -beltways -beltwise -Beluchi -Belucki -belue -beluga -belugas -belugite -Belus -belute -Belva -belve -Belvedere -belvedered -belvederes -Belverdian -Belvia -Belvidere -Belview -Belvue -belzebub -belzebuth -Belzoni -BEM -BEMA -bemad -bemadam -bemadamed -bemadaming -bemadams -bemadden -bemaddened -bemaddening -bemaddens -bemail -bemaim -bemajesty -beman -bemangle -bemantle -bemar -bemartyr -bemas -bemask -bemaster -bemat -bemata -bemaul -bemazed -Bemba -Bembas -Bembecidae -Bemberg -Bembex -beme -bemeal -bemean -bemeaned -bemeaning -bemeans -bemedaled -bemedalled -bemeet -Bemelmans -Bement -bementite -bemercy -bemete -Bemidji -bemingle -bemingled -bemingles -bemingling -beminstrel -bemire -bemired -bemirement -bemires -bemiring -bemirror -bemirrorment -Bemis -bemist -bemisted -bemisting -bemistress -bemists -bemitered -bemitred -bemix -bemixed -bemixes -bemixing -bemixt -bemoan -bemoanable -bemoaned -bemoaner -bemoaning -bemoaningly -bemoans -bemoat -bemock -bemocked -bemocking -bemocks -bemoil -bemoisten -bemol -bemole -bemolt -bemonster -bemoon -bemotto -bemoult -bemourn -bemouth -bemuck -bemud -bemuddy -bemuddle -bemuddled -bemuddlement -bemuddles -bemuddling -bemuffle -bemurmur -bemurmure -bemurmured -bemurmuring -bemurmurs -bemuse -bemused -bemusedly -bemusement -bemuses -bemusing -bemusk -bemuslined -bemuzzle -bemuzzled -bemuzzles -bemuzzling -Ben -Bena -benab -Benacus -Benadryl -bename -benamed -benamee -benames -benami -benamidar -benaming -Benares -Benarnold -benasty -Benavides -benben -Benbow -Benbrook -bench -benchboard -benched -bencher -benchers -benchership -benches -benchfellow -benchful -bench-hardened -benchy -benching -bench-kneed -benchland -bench-legged -Benchley -benchless -benchlet -bench-made -benchman -benchmar -benchmark -bench-mark -benchmarked -benchmarking -benchmarks -benchmark's -benchmen -benchwarmer -bench-warmer -benchwork -Bencion -bencite -Benco -Bend -Benda -bendability -bendable -benday -bendayed -bendaying -bendays -bended -bendee -bendees -Bendel -bendell -Bendena -Bender -benders -Bendersville -bendy -Bendick -Bendict -Bendicta -Bendicty -bendies -Bendigo -bending -bendingly -bendys -Bendite -bendy-wavy -Bendix -bendlet -bends -bendsome -bendways -bendwise -Bene -beneaped -beneath -beneception -beneceptive -beneceptor -Benedetta -Benedetto -Benedic -Benedicite -Benedick -benedicks -Benedict -Benedicta -Benedictine -Benedictinism -benediction -benedictional -benedictionale -benedictionary -benedictions -benediction's -benedictive -benedictively -Benedicto -benedictory -benedicts -Benedictus -benedight -Benedikt -Benedikta -Benediktov -Benedix -benefact -benefaction -benefactions -benefactive -benefactor -benefactory -benefactors -benefactor's -benefactorship -benefactress -benefactresses -benefactrices -benefactrix -benefactrixes -benefic -benefice -beneficed -benefice-holder -beneficeless -beneficence -beneficences -beneficency -beneficent -beneficential -beneficently -benefices -beneficiaire -beneficial -beneficially -beneficialness -beneficiary -beneficiaries -beneficiaryship -beneficiate -beneficiated -beneficiating -beneficiation -beneficience -beneficient -beneficing -beneficium -benefit -benefited -benefiter -benefiting -benefits -benefitted -benefitting -benegro -beneighbored -BENELUX -beneme -Benemid -benempt -benempted -Benenson -beneplacit -beneplacity -beneplacito -Benes -Benet -Benet-Mercie -Benetnasch -Benetta -benetted -benetting -benettle -beneurous -Beneventan -Beneventana -Benevento -benevolence -benevolences -benevolency -benevolent -benevolently -benevolentness -benevolist -Benezett -Benfleet -BEng -Beng. -Bengal -Bengalese -Bengali -Bengalic -bengaline -bengals -Bengasi -Benge -Benghazi -Bengkalis -Bengola -Bengt -Benguela -Ben-Gurion -Benham -Benhur -Beni -Benia -Benyamin -Beniamino -benic -Benicia -benight -benighted -benightedly -benightedness -benighten -benighter -benighting -benightmare -benightment -benign -benignancy -benignancies -benignant -benignantly -benignity -benignities -benignly -benignness -Beni-israel -Benil -Benilda -Benildas -Benildis -benim -Benin -Benincasa -Benioff -Benis -Benisch -beniseed -benison -benisons -Benita -benitier -Benito -benitoite -benj -Benjamen -Benjamin -benjamin-bush -Benjamin-Constant -Benjaminite -benjamins -Benjamite -Benji -Benjy -Benjie -benjoin -Benkelman -Benkley -Benkulen -Benld -Benlomond -benmost -Benn -benne -bennel -bennes -Bennet -bennets -Bennett -Bennettitaceae -bennettitaceous -Bennettitales -Bennettites -Bennettsville -bennetweed -Benni -Benny -Bennie -bennies -Bennington -Bennink -Bennion -Bennir -bennis -benniseed -Bennu -Beno -Benoit -Benoite -benomyl -benomyls -Benoni -Ben-oni -benorth -benote -bens -bensail -Bensalem -bensall -bensel -bensell -Bensen -Bensenville -bensh -benshea -benshee -benshi -bensil -Bensky -Benson -Bent -bentang -ben-teak -bentgrass -benthal -Bentham -Benthamic -Benthamism -Benthamite -benthic -benthon -benthonic -benthopelagic -benthos -benthoscope -benthoses -benty -Bentinck -Bentincks -bentiness -benting -Bentlee -Bentley -Bentleyville -bentlet -Bently -Benton -Bentonia -bentonite -bentonitic -Bentonville -Bentree -bents -bentstar -bent-taildog -bentwood -bentwoods -Benu -Benue -Benue-Congo -benumb -benumbed -benumbedness -benumbing -benumbingly -benumbment -benumbs -Benvenuto -benward -benweed -Benwood -Benz -benz- -benzacridine -benzal -benzalacetone -benzalacetophenone -benzalaniline -benzalazine -benzalcyanhydrin -benzalcohol -benzaldehyde -benzaldiphenyl -benzaldoxime -benzalethylamine -benzalhydrazine -benzalphenylhydrazone -benzalphthalide -benzamide -benzamido -benzamine -benzaminic -benzamino -benzanalgen -benzanilide -benzanthracene -benzanthrone -benzantialdoxime -benzazide -benzazimide -benzazine -benzazole -benzbitriazole -benzdiazine -benzdifuran -benzdioxazine -benzdioxdiazine -benzdioxtriazine -Benzedrine -benzein -Benzel -benzene -benzeneazobenzene -benzenediazonium -benzenes -benzenyl -benzenoid -benzhydrol -benzhydroxamic -benzidin -benzidine -benzidino -benzidins -benzil -benzyl -benzylamine -benzilic -benzylic -benzylidene -benzylpenicillin -benzyls -benzimidazole -benziminazole -benzin -benzinduline -benzine -benzines -benzins -benzo -benzo- -benzoate -benzoated -benzoates -benzoazurine -benzobis -benzocaine -benzocoumaran -benzodiazine -benzodiazole -benzoflavine -benzofluorene -benzofulvene -benzofuran -benzofuryl -benzofuroquinoxaline -benzoglycolic -benzoglyoxaline -benzohydrol -benzoic -benzoid -benzoyl -benzoylate -benzoylated -benzoylating -benzoylation -benzoylformic -benzoylglycine -benzoyls -benzoin -benzoinated -benzoins -benzoiodohydrin -benzol -benzolate -benzole -benzoles -benzoline -benzolize -benzols -benzomorpholine -benzonaphthol -Benzonia -benzonitrile -benzonitrol -benzoperoxide -benzophenanthrazine -benzophenanthroline -benzophenazine -benzophenol -benzophenone -benzophenothiazine -benzophenoxazine -benzophloroglucinol -benzophosphinic -benzophthalazine -benzopinacone -benzopyran -benzopyranyl -benzopyrazolone -benzopyrene -benzopyrylium -benzoquinoline -benzoquinone -benzoquinoxaline -benzosulfimide -benzosulphimide -benzotetrazine -benzotetrazole -benzothiazine -benzothiazole -benzothiazoline -benzothiodiazole -benzothiofuran -benzothiophene -benzothiopyran -benzotoluide -benzotriazine -benzotriazole -benzotrichloride -benzotrifluoride -benzotrifuran -benzoxate -benzoxy -benzoxyacetic -benzoxycamphor -benzoxyphenanthrene -benzpinacone -benzpyrene -benzthiophen -benztrioxazine -Ben-Zvi -beode -Beograd -Beora -Beore -Beothuk -Beothukan -Beowawe -Beowulf -BEP -bepaid -Bepaint -bepainted -bepainting -bepaints -bepale -bepaper -beparch -beparody -beparse -bepart -bepaste -bepastured -bepat -bepatched -bepaw -bepearl -bepelt -bepen -bepepper -beperiwigged -bepester -bepewed -bephilter -bephrase -bepicture -bepiece -bepierce -bepile -bepill -bepillared -bepimple -bepimpled -bepimples -bepimpling -bepinch -bepistoled -bepity -beplague -beplaided -beplaster -beplumed -bepommel -bepowder -bepray -bepraise -bepraisement -bepraiser -beprank -bepranked -bepreach -bepress -bepretty -bepride -beprose -bepuddle -bepuff -bepuffed -bepun -bepurple -bepuzzle -bepuzzlement -Beqaa -bequalm -bequeath -bequeathable -bequeathal -bequeathed -bequeather -bequeathing -bequeathment -bequeaths -bequest -bequests -bequest's -bequirtle -bequote -beqwete -BER -beray -berain -berairou -berakah -berake -beraked -berakes -beraking -berakot -berakoth -Beranger -berapt -Berar -Berard -Berardo -berascal -berascaled -berascaling -berascals -berat -berate -berated -berates -berating -berattle -beraunite -berbamine -Berber -Berbera -Berberi -berbery -berberia -Berberian -berberid -Berberidaceae -berberidaceous -berberin -berberine -berberins -Berberis -berberry -berbers -berceau -berceaunette -bercelet -berceuse -berceuses -Berchemia -Berchta -Berchtesgaden -Bercy -Berck -Berclair -Bercovici -berdache -berdaches -berdash -Berdyaev -Berdyayev -Berdichev -bere -Berea -Berean -bereareft -bereason -bereave -bereaved -bereavement -bereavements -bereaven -bereaver -bereavers -bereaves -bereaving -Berecyntia -berede -bereft -Berey -berend -berendo -Berengaria -Berengarian -Berengarianism -berengelite -berengena -Berenice -Berenices -Berenson -Beresford -Bereshith -beresite -Beret -berets -beret's -Beretta -berettas -berewick -Berezina -Berezniki -Berfield -Berg -Berga -bergalith -bergall -Bergama -bergamasca -bergamasche -Bergamask -Bergamee -bergamiol -Bergamo -Bergamos -Bergamot -bergamots -bergander -bergaptene -Bergdama -Bergeman -Bergen -Bergen-Belsen -Bergenfield -Berger -Bergerac -bergere -bergeres -bergeret -bergerette -Bergeron -Bergess -Berget -bergfall -berggylt -Bergh -berghaan -Berghoff -Bergholz -bergy -bergylt -Bergin -berginization -berginize -Bergius -Bergland -berglet -Berglund -Bergman -Bergmann -bergmannite -Bergmans -bergomask -Bergoo -Bergquist -Bergren -bergs -bergschrund -Bergsma -Bergson -Bergsonian -Bergsonism -Bergstein -Bergstrom -Bergton -bergut -Bergwall -berhyme -berhymed -berhymes -berhyming -Berhley -Beri -Beria -beribanded -beribbon -beribboned -beriber -beriberi -beriberic -beriberis -beribers -berycid -Berycidae -beryciform -berycine -berycoid -Berycoidea -berycoidean -Berycoidei -Berycomorphi -beride -berigora -Beryl -berylate -beryl-blue -Beryle -beryl-green -beryline -beryllate -beryllia -berylline -berylliosis -beryllium -berylloid -beryllonate -beryllonite -beryllosis -beryls -berime -berimed -berimes -beriming -Bering -beringed -beringite -beringleted -berinse -Berio -Beriosova -Berit -Berith -Berytidae -Beryx -Berk -Berke -Berkey -Berkeley -Berkeleian -Berkeleianism -Berkeleyism -Berkeleyite -berkelium -Berky -Berkie -Berkin -Berkley -Berkly -Berkman -berkovets -berkovtsi -Berkow -Berkowitz -Berks -Berkshire -Berkshires -Berl -Berlauda -berley -Berlen -Berlichingen -Berlin -Berlyn -berlina -Berlinda -berline -Berlyne -berline-landaulet -Berliner -berliners -berlines -Berlinguer -berlinite -Berlinize -berlin-landaulet -berlins -Berlioz -Berlitz -Berlon -berloque -berm -Berman -berme -Bermejo -bermensch -bermes -berms -Bermuda -Bermudan -Bermudas -Bermudian -bermudians -bermudite -Bern -Berna -bernacle -Bernadene -Bernadette -Bernadina -Bernadine -Bernadotte -Bernal -Bernalillo -Bernanos -Bernard -Bernardi -Bernardina -Bernardine -Bernardino -Bernardo -Bernardston -Bernardsville -Bernarr -Bernat -Berne -Bernelle -Berner -Berners -Bernese -Bernet -Berneta -Bernete -Bernetta -Bernette -Bernhard -Bernhardi -Bernhardt -Berni -Berny -Bernice -Bernicia -bernicle -bernicles -Bernie -Berniece -Bernina -Berninesque -Bernini -Bernis -Bernita -Bernj -Bernkasteler -bernoo -Bernouilli -Bernoulli -Bernoullian -Berns -Bernstein -Bernstorff -Bernt -Bernville -berob -berobed -Beroe -berogue -Beroida -Beroidae -beroll -Berossos -Berosus -berouged -Beroun -beround -Berra -berreave -berreaved -berreaves -berreaving -Berrellez -berrendo -berret -berretta -berrettas -berrettino -Berri -Berry -berry-bearing -berry-brown -berrybush -berrichon -berrichonne -Berrie -berried -berrier -berries -berry-formed -berrigan -berrying -berryless -berrylike -Berriman -Berryman -berry-on-bone -berrypicker -berrypicking -berry's -Berrysburg -berry-shaped -Berryton -Berryville -berrugate -bersagliere -bersaglieri -berseem -berseems -berserk -berserker -berserks -Bersiamite -Bersil -bersim -berskin -berstel -Berstine -BERT -Berta -Bertasi -Bertat -Bertaud -Berte -Bertelli -Bertero -Berteroa -berth -Bertha -berthage -berthas -Berthe -berthed -berther -berthierite -berthing -Berthold -Bertholletia -Berthoud -berths -Berti -Berty -Bertie -Bertila -Bertilla -Bertillon -bertillonage -bertin -Bertina -Bertine -Bertle -Bertoia -Bertold -Bertolde -Bertolonia -Bertolt -Bertolucci -Berton -Bertram -Bertrand -bertrandite -Bertrando -Bertrant -bertrum -Bertsche -beruffed -beruffled -berun -berust -bervie -Berwick -Berwickshire -Berwick-upon-Tweed -Berwyn -Berwind -berzelianite -berzeliite -Berzelius -BES -bes- -besa -besagne -besague -besaiel -besaile -besayle -besaint -besan -Besancon -besanctify -besand -Besant -bes-antler -besauce -bescab -bescarf -bescatter -bescent -bescorch -bescorched -bescorches -bescorching -bescorn -bescoundrel -bescour -bescoured -bescourge -bescouring -bescours -bescramble -bescrape -bescratch -bescrawl -bescreen -bescreened -bescreening -bescreens -bescribble -bescribbled -bescribbling -bescurf -bescurvy -bescutcheon -beseam -besee -beseech -beseeched -beseecher -beseechers -beseeches -beseeching -beseechingly -beseechingness -beseechment -beseek -beseem -beseemed -beseeming -beseemingly -beseemingness -beseemly -beseemliness -beseems -beseen -beseige -Beseleel -beset -besetment -besets -besetter -besetters -besetting -besew -beshackle -beshade -beshadow -beshadowed -beshadowing -beshadows -beshag -beshake -beshame -beshamed -beshames -beshaming -beshawled -beshear -beshell -beshield -beshine -beshiver -beshivered -beshivering -beshivers -beshlik -beshod -Beshore -beshout -beshouted -beshouting -beshouts -beshow -beshower -beshrew -beshrewed -beshrewing -beshrews -beshriek -beshrivel -beshroud -beshrouded -beshrouding -beshrouds -BeShT -besiclometer -beside -besides -besiege -besieged -besiegement -besieger -besiegers -besieges -besieging -besiegingly -Besier -besigh -besilver -besin -besing -besiren -besit -beslab -beslabber -beslap -beslash -beslave -beslaved -beslaver -besleeve -beslime -beslimed -beslimer -beslimes -besliming -beslings -beslipper -beslobber -beslow -beslubber -besluit -beslur -beslushed -besmear -besmeared -besmearer -besmearing -besmears -besmell -besmile -besmiled -besmiles -besmiling -besmirch -besmirched -besmircher -besmirchers -besmirches -besmirching -besmirchment -besmoke -besmoked -besmokes -besmoking -besmooth -besmoothed -besmoothing -besmooths -besmother -besmottered -besmouch -besmudge -besmudged -besmudges -besmudging -besmut -be-smut -besmutch -be-smutch -besmuts -besmutted -besmutting -Besnard -besnare -besneer -besnivel -besnow -besnowed -besnowing -besnows -besnuff -besodden -besogne -besognier -besoil -besoin -besom -besomer -besoms -besonio -besonnet -besoot -besoothe -besoothed -besoothement -besoothes -besoothing -besort -besot -besotment -besots -besotted -besottedly -besottedness -besotter -besotting -besottingly -besought -besoul -besour -besouth -bespake -bespangle -bespangled -bespangles -bespangling -bespate -bespatter -bespattered -bespatterer -bespattering -bespatterment -bespatters -bespawl -bespeak -bespeakable -bespeaker -bespeaking -bespeaks -bespecked -bespeckle -bespeckled -bespecklement -bespectacled -besped -bespeech -bespeed -bespell -bespelled -bespend -bespete -bespew -bespy -bespice -bespill -bespin -bespirit -bespit -besplash -besplatter -besplit -bespoke -bespoken -bespot -bespotted -bespottedness -bespotting -bespouse -bespoused -bespouses -bespousing -bespout -bespray -bespread -bespreading -bespreads -bespreng -besprent -bespring -besprinkle -besprinkled -besprinkler -besprinkles -besprinkling -besprizorni -bespurred -bespurt -besputter -besqueeze -besquib -besquirt -besra -Bess -Bessarabia -Bessarabian -Bessarion -Besse -Bessel -Besselian -Bessemer -Bessemerize -bessemerized -bessemerizing -Bessera -besses -Bessi -Bessy -Bessie -Bessye -BEST -bestab -best-able -best-abused -best-accomplished -bestad -best-agreeable -bestay -bestayed -bestain -bestamp -bestand -bestar -bestare -best-armed -bestarve -bestatued -best-ball -best-beloved -best-bred -best-built -best-clad -best-conditioned -best-conducted -best-considered -best-consulted -best-cultivated -best-dressed -bestead -besteaded -besteading -besteads -besteal -bested -besteer -bestench -bester -best-established -best-esteemed -best-formed -best-graced -best-grounded -best-hated -best-humored -bestial -bestialise -bestialised -bestialising -bestialism -bestialist -bestiality -bestialities -bestialize -bestialized -bestializes -bestializing -bestially -bestials -bestian -bestiary -bestiarian -bestiarianism -bestiaries -bestiarist -bestick -besticking -bestill -best-informed -besting -bestink -best-intentioned -bestir -bestirred -bestirring -bestirs -best-known -best-laid -best-learned -best-liked -best-loved -best-made -best-managed -best-meaning -best-meant -best-minded -best-natured -bestness -best-nourishing -bestock -bestore -bestorm -bestove -bestow -bestowable -bestowage -bestowal -bestowals -bestowed -bestower -bestowing -bestowment -bestows -best-paid -best-paying -best-pleasing -best-preserved -best-principled -bestraddle -bestraddled -bestraddling -bestrapped -bestraught -bestraw -best-read -bestreak -bestream -best-resolved -bestrew -bestrewed -bestrewing -bestrewment -bestrewn -bestrews -bestrid -bestridden -bestride -bestrided -bestrides -bestriding -bestripe -bestrode -bestrow -bestrowed -bestrowing -bestrown -bestrows -bestrut -bests -bestseller -bestsellerdom -bestsellers -bestseller's -bestselling -best-selling -best-sighted -best-skilled -best-tempered -best-trained -bestubble -bestubbled -bestuck -bestud -bestudded -bestudding -bestuds -bestuur -besugar -besugo -besuit -besully -beswarm -beswarmed -beswarming -beswarms -besweatered -besweeten -beswelter -beswim -beswinge -beswink -beswitch -bet -bet. -Beta -beta-amylase -betacaine -betacism -betacismus -beta-eucaine -betafite -betag -beta-glucose -betail -betailor -betain -betaine -betaines -betainogen -betake -betaken -betakes -betaking -betalk -betallow -beta-naphthyl -beta-naphthylamine -betanaphthol -beta-naphthol -Betancourt -betangle -betanglement -beta-orcin -beta-orcinol -betas -betask -betassel -betatron -betatrons -betatter -betattered -betattering -betatters -betaxed -bete -beteach -betear -beteela -beteem -betel -Betelgeuse -Betelgeux -betell -betelnut -betelnuts -betels -beterschap -betes -Beth -bethabara -Bethalto -Bethany -Bethania -bethank -bethanked -bethanking -bethankit -bethanks -Bethanna -Bethanne -Bethe -Bethel -bethels -Bethena -Bethera -Bethesda -bethesdas -Bethesde -Bethezel -bethflower -bethylid -Bethylidae -Bethina -bethink -bethinking -bethinks -Bethlehem -Bethlehemite -bethorn -bethorned -bethorning -bethorns -bethought -Bethpage -bethrall -bethreaten -bethroot -beths -Bethsabee -Bethsaida -Bethuel -bethumb -bethump -bethumped -bethumping -bethumps -bethunder -Bethune -bethwack -bethwine -betide -betided -betides -betiding -betimber -betime -betimes -betinge -betipple -betire -betis -betise -betises -betitle -Betjeman -betocsin -Betoya -Betoyan -betoil -betoken -betokened -betokener -betokening -betokenment -betokens -beton -betone -betongue -betony -Betonica -betonies -betons -betook -betorcin -betorcinol -betorn -betoss -betowel -betowered -betrace -betray -betrayal -betrayals -betrayed -betrayer -betrayers -betraying -betra'ying -betrail -betrayment -betrays -betraise -betrample -betrap -betravel -betread -betrend -betrim -betrinket -betroth -betrothal -betrothals -betrothed -betrotheds -betrothing -betrothment -betroths -betrough -betrousered -BETRS -betrumpet -betrunk -betrust -bets -bet's -Betsey -Betsi -Betsy -Betsileos -Betsimisaraka -betso -Bett -Betta -bettas -Bette -Betteann -Bette-Ann -Betteanne -betted -Bettencourt -Bettendorf -better -better-advised -better-affected -better-balanced -better-becoming -better-behaved -better-born -better-bred -better-considered -better-disposed -better-dressed -bettered -betterer -bettergates -better-humored -better-informed -bettering -better-knowing -better-known -betterly -better-liked -better-liking -better-meant -betterment -betterments -bettermost -better-natured -betterness -better-omened -better-principled -better-regulated -betters -better-seasoned -better-taught -Betterton -better-witted -Betthel -Betthezel -Betthezul -Betti -Betty -Bettye -betties -Bettina -Bettine -betting -Bettinus -bettong -bettonga -Bettongia -bettor -bettors -Bettsville -Bettzel -betuckered -Betula -Betulaceae -betulaceous -betulin -betulinamaric -betulinic -betulinol -Betulites -betumbled -beturbaned -betusked -betutor -betutored -betwattled -between -betweenbrain -between-deck -between-decks -betweenity -betweenmaid -between-maid -betweenness -betweens -betweentimes -betweenwhiles -between-whiles -betwine -betwit -betwixen -betwixt -Betz -beudanite -beudantite -Beulah -Beulaville -beuncled -beuniformed -beurre -Beuthel -Beuthen -Beutler -Beutner -BeV -Bevan -bevaring -Bevash -bevatron -bevatrons -beveil -bevel -beveled -bevel-edged -beveler -bevelers -beveling -bevelled -beveller -bevellers -bevelling -bevelment -bevels -bevenom -Bever -beverage -beverages -beverage's -Beveridge -Beverie -Beverle -Beverlee -Beverley -Beverly -Beverlie -Bevers -beverse -bevesseled -bevesselled -beveto -bevy -Bevier -bevies -bevil -bevillain -bevilled -Bevin -bevined -Bevington -Bevinsville -Bevis -bevoiled -bevomit -bevomited -bevomiting -bevomits -Bevon -bevor -bevors -bevue -Bevus -Bevvy -BEW -bewail -bewailable -bewailed -bewailer -bewailers -bewailing -bewailingly -bewailment -bewails -bewaitered -bewake -bewall -beware -bewared -bewares -bewary -bewaring -bewash -bewaste -bewater -beweary -bewearied -bewearies -bewearying -beweep -beweeper -beweeping -beweeps -bewelcome -bewelter -bewend -bewept -bewest -bewet -bewhig -bewhisker -bewhiskered -bewhisper -bewhistle -bewhite -bewhiten -bewhore -Bewick -bewidow -bewield -bewig -bewigged -bewigging -bewigs -bewilder -bewildered -bewilderedly -bewilderedness -bewildering -bewilderingly -bewilderment -bewilderments -bewilders -bewimple -bewinged -bewinter -bewired -bewit -bewitch -bewitched -bewitchedness -bewitcher -bewitchery -bewitches -bewitchful -bewitching -bewitchingly -bewitchingness -bewitchment -bewitchments -bewith -bewizard -bewonder -bework -beworm -bewormed -beworming -beworms -beworn -beworry -beworried -beworries -beworrying -beworship -bewpers -bewray -bewrayed -bewrayer -bewrayers -bewraying -bewrayingly -bewrayment -bewrays -bewrap -bewrapped -bewrapping -bewraps -bewrapt -bewrathed -bewreak -bewreath -bewreck -bewry -bewrite -bewrought -bewwept -Bexar -Bexhill-on-Sea -Bexley -Bezae -Bezaleel -Bezaleelian -bezan -Bezanson -bezant -bezante -bezantee -bezanty -bez-antler -bezants -bezazz -bezazzes -bezel -bezels -bezesteen -bezetta -bezette -Beziers -bezil -bezils -bezique -beziques -bezoar -bezoardic -bezoars -bezonian -Bezpopovets -Bezwada -bezzant -bezzants -bezzi -bezzle -bezzled -bezzling -bezzo -BF -BFA -BFAMus -BFD -BFDC -BFHD -B-flat -BFR -BFS -BFT -BG -BGE -BGeNEd -B-girl -Bglr -BGP -BH -BHA -bhabar -Bhabha -Bhadgaon -Bhadon -Bhaga -Bhagalpur -bhagat -Bhagavad-Gita -bhagavat -bhagavata -Bhai -bhaiachara -bhaiachari -Bhayani -bhaiyachara -Bhairava -Bhairavi -bhajan -bhakta -Bhaktapur -bhaktas -bhakti -bhaktimarga -bhaktis -bhalu -bhandar -bhandari -bhang -bhangi -bhangs -Bhar -bhara -bharal -Bharat -Bharata -Bharatiya -bharti -bhat -Bhatpara -Bhatt -Bhaunagar -bhava -Bhavabhuti -bhavan -Bhavani -Bhave -Bhavnagar -BHC -bhd -bheesty -bheestie -bheesties -bhikhari -Bhikku -Bhikkuni -Bhikshu -Bhil -Bhili -Bhima -bhindi -bhishti -bhisti -bhistie -bhisties -BHL -bhoy -b'hoy -Bhojpuri -bhokra -Bhola -Bhoodan -bhoosa -bhoot -bhoots -Bhopal -b-horizon -Bhotia -Bhotiya -Bhowani -BHP -BHT -Bhubaneswar -Bhudan -Bhudevi -Bhumibol -bhumidar -Bhumij -bhunder -bhungi -bhungini -bhut -Bhutan -Bhutanese -Bhutani -Bhutatathata -bhut-bali -Bhutia -bhuts -Bhutto -BI -by -bi- -by- -Bia -biabo -biacetyl -biacetylene -biacetyls -biacid -biacromial -biacuminate -biacuru -Biadice -Biafra -Biafran -Biagi -Biagio -Biayenda -biajaiba -Biak -bialate -biali -bialy -Bialik -bialis -bialys -Bialystok -bialystoker -by-alley -biallyl -by-altar -bialveolar -Byam -Biamonte -Bianca -Biancha -Bianchi -Bianchini -bianchite -Bianco -by-and-by -by-and-large -biangular -biangulate -biangulated -biangulous -bianisidine -Bianka -biannual -biannually -biannulate -biarchy -biarcuate -biarcuated -byard -Biarritz -Byars -biarticular -biarticulate -biarticulated -Bias -biased -biasedly -biases -biasing -biasness -biasnesses -biassed -biassedly -biasses -biassing -biasteric -biasways -biaswise -biathlon -biathlons -biatomic -biaural -biauricular -biauriculate -biaxal -biaxial -biaxiality -biaxially -biaxillary -Bib -Bib. -bibacious -bibaciousness -bibacity -bibasic -bibasilar -bibation -bibb -bibbed -bibber -bibbery -bibberies -bibbers -Bibby -Bibbie -Bibbye -Bibbiena -bibbing -bibble -bibble-babble -bibbled -bibbler -bibbling -bibbons -bibbs -bibcock -bibcocks -Bibeau -Bybee -bibelot -bibelots -bibenzyl -biberon -Bibi -by-bid -by-bidder -by-bidding -Bibiena -Bibio -bibionid -Bibionidae -bibiri -bibiru -bibitory -bi-bivalent -Bibl -Bibl. -Bible -Bible-basher -bible-christian -bible-clerk -bibles -bible's -bibless -BiblHeb -Biblic -Biblical -Biblicality -Biblically -Biblicism -Biblicist -Biblicistic -biblico- -Biblicolegal -Biblicoliterary -Biblicopsychological -Byblidaceae -biblike -biblio- -biblioclasm -biblioclast -bibliofilm -bibliog -bibliog. -bibliogenesis -bibliognost -bibliognostic -bibliogony -bibliograph -bibliographer -bibliographers -bibliography -bibliographic -bibliographical -bibliographically -bibliographies -bibliography's -bibliographize -bibliokelpt -biblioklept -bibliokleptomania -bibliokleptomaniac -bibliolater -bibliolatry -bibliolatrist -bibliolatrous -bibliology -bibliological -bibliologies -bibliologist -bibliomancy -bibliomane -bibliomania -bibliomaniac -bibliomaniacal -bibliomanian -bibliomanianism -bibliomanism -bibliomanist -bibliopegy -bibliopegic -bibliopegically -bibliopegist -bibliopegistic -bibliopegistical -bibliophage -bibliophagic -bibliophagist -bibliophagous -bibliophil -bibliophile -bibliophiles -bibliophily -bibliophilic -bibliophilism -bibliophilist -bibliophilistic -bibliophobe -bibliophobia -bibliopolar -bibliopole -bibliopolery -bibliopoly -bibliopolic -bibliopolical -bibliopolically -bibliopolism -bibliopolist -bibliopolistic -bibliosoph -bibliotaph -bibliotaphe -bibliotaphic -bibliothec -bibliotheca -bibliothecae -bibliothecaire -bibliothecal -bibliothecary -bibliothecarial -bibliothecarian -bibliothecas -bibliotheke -bibliotheque -bibliotherapeutic -bibliotherapy -bibliotherapies -bibliotherapist -bibliothetic -bibliothque -bibliotic -bibliotics -bibliotist -Byblis -Biblism -Biblist -biblists -biblos -Byblos -by-blow -biblus -by-boat -biborate -bibracteate -bibracteolate -bibs -bib's -bibulosity -bibulosities -bibulous -bibulously -bibulousness -Bibulus -Bicakci -bicalcarate -bicalvous -bicameral -bicameralism -bicameralist -bicamerist -bicapitate -bicapsular -bicarb -bicarbide -bicarbonate -bicarbonates -bicarbs -bicarbureted -bicarburetted -bicarinate -bicarpellary -bicarpellate -bicaudal -bicaudate -bicched -Bice -bicellular -bicentenary -bicentenaries -bicentenarnaries -bicentennial -bicentennially -bicentennials -bicentral -bicentric -bicentrically -bicentricity -bicep -bicephalic -bicephalous -biceps -bicep's -bicepses -bices -bicetyl -by-channel -Bichat -Bichelamar -Biche-la-mar -bichy -by-child -bichir -bichloride -bichlorides -by-chop -bichord -bichos -bichromate -bichromated -bichromatic -bichromatize -bichrome -bichromic -bicyanide -bicycle -bicycle-built-for-two -bicycled -bicycler -bicyclers -bicycles -bicyclic -bicyclical -bicycling -bicyclism -bicyclist -bicyclists -bicyclo -bicycloheptane -bicycular -biciliate -biciliated -bicylindrical -bicipital -bicipitous -bicircular -bicirrose -Bick -Bickart -bicker -bickered -bickerer -bickerers -bickering -bickern -bickers -bickiron -bick-iron -Bickleton -Bickmore -Bicknell -biclavate -biclinia -biclinium -by-cock -bycoket -Bicol -bicollateral -bicollaterality -bicolligate -bicolor -bicolored -bicolorous -bicolors -bicolour -bicoloured -bicolourous -bicolours -Bicols -by-common -bicompact -biconcave -biconcavity -biconcavities -bicondylar -biconditional -bicone -biconic -biconical -biconically -biconjugate -biconnected -biconsonantal -biconvex -biconvexity -biconvexities -Bicorn -bicornate -bicorne -bicorned -by-corner -bicornes -bicornous -bicornuate -bicornuous -bicornute -bicorporal -bicorporate -bicorporeal -bicostate -bicrenate -bicrescentic -bicrofarad -bicron -bicrons -bicrural -BICS -bicuculline -bicultural -biculturalism -bicursal -bicuspid -bicuspidal -bicuspidate -bicuspids -BID -Bida -bid-a-bid -bidactyl -bidactyle -bidactylous -by-day -bid-ale -bidar -bidarka -bidarkas -bidarkee -bidarkees -Bidault -bidcock -biddability -biddable -biddableness -biddably -biddance -Biddeford -Biddelian -bidden -bidder -biddery -bidders -bidder's -Biddy -biddy-bid -biddy-biddy -Biddick -Biddie -biddies -bidding -biddings -Biddle -Biddulphia -Biddulphiaceae -bide -bided -bidene -Bidens -bident -bidental -bidentalia -bidentate -bidented -bidential -bidenticulate -by-dependency -bider -bidery -biders -bides -by-design -bidet -bidets -bidgee-widgee -Bidget -Bydgoszcz -bidi -bidiagonal -bidialectal -bidialectalism -bidigitate -bidimensional -biding -bidirectional -bidirectionally -bidiurnal -Bidle -by-doing -by-doingby-drinking -bidonville -Bidpai -bidree -bidri -bidry -by-drinking -bids -bid's -bidstand -biduous -Bidwell -by-dweller -BIE -bye -Biebel -Bieber -bieberite -bye-bye -bye-byes -bye-blow -Biedermann -Biedermeier -byee -bye-election -bieennia -by-effect -byegaein -Biegel -Biel -Biela -byelaw -byelaws -bielby -bielbrief -bield -bielded -bieldy -bielding -bields -by-election -bielectrolysis -Bielefeld -bielenite -Bielersee -Byelgorod-Dnestrovski -Bielid -Bielka -Bielorouss -Byelorussia -Bielo-russian -Byelorussian -byelorussians -Byelostok -Byelovo -bye-low -Bielsko-Biala -byeman -bien -by-end -bienly -biennale -biennales -Bienne -bienness -biennia -biennial -biennially -biennials -biennium -bienniums -biens -bienseance -bientt -bienvenu -bienvenue -Bienville -byepath -bier -bierbalk -Bierce -byerite -bierkeller -byerlite -Bierman -Biernat -biers -Byers -bierstube -bierstuben -bierstubes -byes -bye-stake -biestings -byestreet -Byesville -biethnic -bietle -bye-turn -bye-water -bye-wood -byeworker -byeworkman -biface -bifaces -bifacial -bifanged -bifara -bifarious -bifariously -by-fellow -by-fellowship -bifer -biferous -biff -Biffar -biffed -biffy -biffies -biffin -biffing -biffins -biffs -bifid -bifidate -bifidated -bifidity -bifidities -bifidly -Byfield -bifilar -bifilarly -bifistular -biflabellate -biflagelate -biflagellate -biflecnode -biflected -biflex -biflorate -biflorous -bifluorid -bifluoride -bifocal -bifocals -bifoil -bifold -bifolia -bifoliate -bifoliolate -bifolium -bifollicular -biforate -biforin -biforine -biforked -biforking -biform -by-form -biformed -biformity -biforous -bifront -bifrontal -bifronted -Bifrost -bifteck -bifunctional -bifurcal -bifurcate -bifurcated -bifurcately -bifurcates -bifurcating -bifurcation -bifurcations -bifurcous -big -biga -bigae -bigam -bigamy -bigamic -bigamies -bigamist -bigamistic -bigamistically -bigamists -bigamize -bigamized -bigamizing -bigamous -bigamously -bygane -byganging -big-antlered -bigarade -bigarades -big-armed -bigaroon -bigaroons -Bigarreau -bigas -bigate -big-bearded -big-bellied -bigbloom -big-bodied -big-boned -big-bosomed -big-breasted -big-bulked -bigbury -big-chested -big-eared -bigeye -big-eyed -bigeyes -Bigelow -bigemina -bigeminal -bigeminate -bigeminated -bigeminy -bigeminies -bigeminum -Big-endian -bigener -bigeneric -bigential -bigfeet -bigfoot -big-footed -bigfoots -Bigford -big-framed -Bigg -biggah -big-gaited -bigged -biggen -biggened -biggening -bigger -biggest -biggety -biggy -biggie -biggies -biggin -bigging -biggings -biggins -biggish -biggishness -biggity -biggonet -Biggs -bigha -big-handed -bighead -bigheaded -big-headed -bigheads -bighearted -big-hearted -bigheartedly -bigheartedness -big-hoofed -Bighorn -Bighorns -bight -bighted -bighting -bights -bight's -big-jawed -big-laden -biglandular -big-league -big-leaguer -big-leaved -biglenoid -Bigler -bigly -big-looking -biglot -bigmitt -bigmouth -bigmouthed -big-mouthed -bigmouths -big-name -Bigner -bigness -bignesses -Bignonia -Bignoniaceae -bignoniaceous -bignoniad -bignonias -big-nosed -big-note -bignou -bygo -Bigod -bygoing -by-gold -bygone -bygones -bigoniac -bigonial -Bigot -bigoted -bigotedly -bigotedness -bigothero -bigotish -bigotry -bigotries -bigots -bigot's -bigotty -bigram -big-rich -bigroot -big-souled -big-sounding -big-swollen -Bigtha -bigthatch -big-ticket -big-time -big-timer -biguanide -bi-guy -biguttate -biguttulate -big-voiced -big-waisted -bigwig -bigwigged -bigwiggedness -bigwiggery -bigwiggism -bigwigs -Bihai -Byhalia -bihalve -Biham -bihamate -byhand -Bihar -Bihari -biharmonic -bihydrazine -by-hour -bihourly -Bihzad -biyearly -bi-iliac -by-interest -by-your-leave -bi-ischiadic -bi-ischiatic -Biisk -Biysk -by-issue -bija -Bijapur -bijasal -bijection -bijections -bijection's -bijective -bijectively -by-job -bijou -bijous -bijouterie -bijoux -bijugate -bijugous -bijugular -bijwoner -Bik -Bikales -Bikaner -bike -biked -biker -bikers -bikes -bike's -bikeway -bikeways -bikh -bikhaconitine -bikie -bikies -Bikila -biking -Bikini -bikinied -bikinis -bikini's -bikkurim -Bikol -Bikols -Bikram -Bikukulla -Bil -Bilaan -bilabe -bilabial -bilabials -bilabiate -Bilac -bilaciniate -bilayer -bilayers -bilalo -bilamellar -bilamellate -bilamellated -bilaminar -bilaminate -bilaminated -biland -byland -by-land -bilander -bylander -bilanders -by-lane -Bylas -bilateral -bilateralism -bilateralistic -bilaterality -bilateralities -bilaterally -bilateralness -Bilati -bylaw -by-law -bylawman -bylaws -bylaw's -Bilbao -Bilbe -bilberry -bilberries -bilbi -bilby -bilbie -bilbies -bilbo -bilboa -bilboas -bilboes -bilboquet -bilbos -bilch -bilcock -Bildad -bildar -bilder -bilders -Bildungsroman -bile -by-lead -bilection -Bilek -Byler -bilertinned -Biles -bilestone -bileve -bilewhit -bilge -bilged -bilge-hoop -bilge-keel -bilges -bilge's -bilgeway -bilgewater -bilge-water -bilgy -bilgier -bilgiest -bilging -Bilhah -Bilharzia -bilharzial -bilharziasis -bilharzic -bilharziosis -Bili -bili- -bilianic -biliary -biliate -biliation -bilic -bilicyanin -Bilicki -bilifaction -biliferous -bilify -bilification -bilifuscin -bilihumin -bilimbi -bilimbing -bilimbis -biliment -Bilin -bylina -byline -by-line -bilinear -bilineate -bilineated -bylined -byliner -byliners -bylines -byline's -bilingual -bilingualism -bilinguality -bilingually -bilinguar -bilinguist -byliny -bilinigrin -bylining -bilinite -bilio -bilious -biliously -biliousness -biliousnesses -bilipyrrhin -biliprasin -bilipurpurin -bilirubin -bilirubinemia -bilirubinic -bilirubinuria -biliteral -biliteralism -bilith -bilithon -by-live -biliverdic -biliverdin -bilixanthin -bilk -bilked -bilker -bilkers -bilking -bilkis -bilks -Bill -billa -billable -billabong -billage -bill-and-cooers -billard -Billat -billback -billbeetle -Billbergia -billboard -billboards -billboard's -bill-broker -billbroking -billbug -billbugs -Bille -billed -Billen -biller -Billerica -billers -billet -billet-doux -billete -billeted -billeter -billeters -billethead -billety -billeting -billets -billets-doux -billette -billetty -billetwood -billfish -billfishes -billfold -billfolds -billhead -billheading -billheads -billholder -billhook -bill-hook -billhooks -Billi -Billy -billian -billiard -billiardist -billiardly -billiards -billyboy -billy-button -billycan -billycans -billycock -Billie -Billye -billyer -billies -billy-goat -billyhood -Billiken -billikin -billing -Billings -Billingsgate -Billingsley -billyo -billion -billionaire -billionaires -billionism -billions -billionth -billionths -Billiton -billitonite -billywix -Billjim -bill-like -billman -billmen -Billmyre -billon -billons -billot -billow -billowed -billowy -billowier -billowiest -billowiness -billowing -Billows -bill-patched -billposter -billposting -Billroth -Bills -bill-shaped -billsticker -billsticking -billtong -bilo -bilobate -bilobated -bilobe -bilobed -bilobiate -bilobular -bilocation -bilocellate -bilocular -biloculate -Biloculina -biloculine -bilophodont -biloquist -bilos -Bilow -Biloxi -bilsh -Bilski -Bilskirnir -bilsted -bilsteds -Biltmore -biltong -biltongs -biltongue -BIM -BIMA -bimaculate -bimaculated -bimah -bimahs -bimalar -Bimana -bimanal -bimane -bimanous -bimanual -bimanually -bimarginate -bimarine -bimas -bimasty -bimastic -bimastism -bimastoid -by-matter -bimaxillary -bimbashi -bimbil -Bimbisara -Bimble -bimbo -bimboes -bimbos -bimeby -bimedial -bimensal -bimester -bimesters -bimestrial -bimetal -bimetalic -bimetalism -bimetallic -bimetallism -bimetallist -bimetallistic -bimetallists -bimetals -bimethyl -bimethyls -bimillenary -bimillenial -bimillenium -bimillennia -bimillennium -bimillenniums -bimillionaire -bimilllennia -Bimini -Biminis -Bimmeler -bimodal -bimodality -bimodule -bimodulus -bimolecular -bimolecularly -bimong -bimonthly -bimonthlies -bimorph -bimorphemic -bimorphs -by-motive -bimotor -bimotored -bimotors -bimucronate -bimuscular -bin -bin- -Bina -Binah -binal -Binalonen -byname -by-name -bynames -binaphthyl -binapthyl -binary -binaries -binarium -binate -binately -bination -binational -binationalism -binationalisms -binaural -binaurally -binauricular -binbashi -bin-burn -Binchois -BIND -bindable -bind-days -BIndEd -binder -bindery -binderies -binders -bindheimite -bindi -bindi-eye -binding -bindingly -bindingness -bindings -bindis -bindle -bindles -bindlet -Bindman -bindoree -binds -bindweb -bindweed -bindweeds -bindwith -bindwood -bine -bynedestin -binervate -bines -Binet -Binetta -Binette -bineweed -Binford -binful -Bing -Byng -binge -binged -bingee -bingey -bingeing -bingeys -Bingen -Binger -binges -Bingham -Binghamton -binghi -bingy -bingies -binging -bingle -bingo -bingos -binh -Binhdinh -Bini -Bynin -biniodide -Binyon -biniou -binit -Binitarian -Binitarianism -binits -Bink -Binky -binman -binmen -binna -binnacle -binnacles -binned -Binni -Binny -Binnie -binning -Binnings -binnite -binnogue -bino -binocle -binocles -binocs -binocular -binocularity -binocularly -binoculars -binoculate -binodal -binode -binodose -binodous -binomen -binomenclature -binomy -binomial -binomialism -binomially -binomials -binominal -binominated -binominous -binormal -binotic -binotonous -binous -binoxalate -binoxide -bins -bin's -bint -bintangor -bints -binturong -binuclear -binucleate -binucleated -binucleolate -binukau -Bynum -Binzuru -bio -BYO -bio- -bioaccumulation -bioacoustics -bioactivity -bioactivities -bio-aeration -bioassay -bio-assay -bioassayed -bioassaying -bioassays -bioastronautical -bioastronautics -bioavailability -biobibliographer -biobibliography -biobibliographic -biobibliographical -biobibliographies -bioblast -bioblastic -BIOC -biocatalyst -biocatalytic -biocellate -biocenology -biocenosis -biocenotic -biocentric -biochemy -biochemic -biochemical -biochemically -biochemicals -biochemics -biochemist -biochemistry -biochemistries -biochemists -biochore -biochron -biocycle -biocycles -biocidal -biocide -biocides -bioclean -bioclimatic -bioclimatician -bioclimatology -bioclimatological -bioclimatologically -bioclimatologies -bioclimatologist -biocoenose -biocoenoses -biocoenosis -biocoenotic -biocontrol -biod -biodegradability -biodegradabilities -biodegradable -biodegradation -biodegradations -biodegrade -biodegraded -biodegrades -biodegrading -biodynamic -biodynamical -biodynamics -biodyne -bioecology -bioecologic -bioecological -bioecologically -bioecologies -bioecologist -bio-economic -bioelectric -bio-electric -bioelectrical -bioelectricity -bioelectricities -bioelectrogenesis -bio-electrogenesis -bioelectrogenetic -bioelectrogenetically -bioelectronics -bioenergetics -bio-energetics -bioengineering -bioenvironmental -bioenvironmentaly -bioethic -bioethics -biofeedback -by-office -bioflavinoid -bioflavonoid -biofog -biog -biog. -biogas -biogases -biogasses -biogen -biogenase -biogenesis -biogenesist -biogenetic -biogenetical -biogenetically -biogenetics -biogeny -biogenic -biogenies -biogenous -biogens -biogeochemical -biogeochemistry -biogeographer -biogeographers -biogeography -biogeographic -biogeographical -biogeographically -biognosis -biograph -biographee -biographer -biographers -biographer's -biography -biographic -biographical -biographically -biographies -biography's -biographist -biographize -biohazard -bioherm -bioherms -bioinstrument -bioinstrumentation -biokinetics -biol -biol. -Biola -biolinguistics -biolyses -biolysis -biolite -biolith -biolytic -biologese -biology -biologic -biological -biologically -biologicohumanistic -biologics -biologies -biologism -biologist -biologistic -biologists -biologist's -biologize -bioluminescence -bioluminescent -biomagnetic -biomagnetism -biomass -biomasses -biomaterial -biomathematics -biome -biomechanical -biomechanics -biomedical -biomedicine -biomes -biometeorology -biometer -biometry -biometric -biometrical -biometrically -biometrician -biometricist -biometrics -biometries -Biometrika -biometrist -biomicroscope -biomicroscopy -biomicroscopies -biomorphic -Bion -byon -bionditional -Biondo -bionergy -bionic -bionics -bionomy -bionomic -bionomical -bionomically -bionomics -bionomies -bionomist -biont -biontic -bionts -bio-osmosis -bio-osmotic -biophagy -biophagism -biophagous -biophilous -biophysic -biophysical -biophysically -biophysicist -biophysicists -biophysicochemical -biophysics -biophysiography -biophysiology -biophysiological -biophysiologist -biophyte -biophor -biophore -biophotometer -biophotophone -biopic -biopyribole -bioplasm -bioplasmic -bioplasms -bioplast -bioplastic -biopoesis -biopoiesis -biopotential -bioprecipitation -biopsy -biopsic -biopsychic -biopsychical -biopsychology -biopsychological -biopsychologies -biopsychologist -biopsies -bioptic -bioral -biorbital -biordinal -byordinar -byordinary -bioreaction -bioresearch -biorgan -biorhythm -biorhythmic -biorhythmicity -biorhythmicities -biorythmic -BIOS -Biosatellite -biosatellites -bioscience -biosciences -bioscientific -bioscientist -bioscope -bioscopes -bioscopy -bioscopic -bioscopies -biose -biosensor -bioseston -biosyntheses -biosynthesis -biosynthesize -biosynthetic -biosynthetically -biosis -biosystematy -biosystematic -biosystematics -biosystematist -biosocial -biosociology -biosociological -biosome -biospeleology -biosphere -biospheres -biostatic -biostatical -biostatics -biostatistic -biostatistics -biosterin -biosterol -biostratigraphy -biostrome -Biot -Biota -biotas -biotaxy -biotech -biotechnics -biotechnology -biotechnological -biotechnologicaly -biotechnologically -biotechnologies -biotechs -biotelemetry -biotelemetric -biotelemetries -biotherapy -biotic -biotical -biotically -biotics -biotin -biotins -biotype -biotypes -biotypic -biotypology -biotite -biotites -biotitic -biotome -biotomy -biotope -biotopes -biotoxin -biotoxins -biotransformation -biotron -biotrons -byous -byously -biovular -biovulate -bioxalate -bioxide -biozone -byp -bipack -bipacks -bipaleolate -Bipaliidae -Bipalium -bipalmate -biparasitic -biparental -biparentally -biparietal -biparous -biparted -biparty -bipartible -bipartient -bipartile -bipartisan -bipartisanism -bipartisanship -bipartite -bipartitely -bipartition -bipartizan -bipaschal -bypass -by-pass -by-passage -bypassed -by-passed -bypasser -by-passer -bypasses -bypassing -by-passing -bypast -by-past -bypath -by-path -bypaths -by-paths -bipectinate -bipectinated -biped -bipedal -bipedality -bipedism -bipeds -bipeltate -bipennate -bipennated -bipenniform -biperforate -bipersonal -bipetalous -biphase -biphasic -biphenyl -biphenylene -biphenyls -biphenol -bipinnaria -bipinnariae -bipinnarias -bipinnate -bipinnated -bipinnately -bipinnatifid -bipinnatiparted -bipinnatipartite -bipinnatisect -bipinnatisected -bipyramid -bipyramidal -bipyridyl -bipyridine -biplace -byplace -by-place -byplay -by-play -byplays -biplanal -biplanar -biplane -biplanes -biplane's -biplicate -biplicity -biplosion -biplosive -by-plot -bipod -bipods -bipolar -bipolarity -bipolarization -bipolarize -Bipont -Bipontine -biporose -biporous -bipotentiality -bipotentialities -Bippus -biprism -Bypro -byproduct -by-product -byproducts -byproduct's -biprong -bipropellant -bipunctal -bipunctate -bipunctual -bipupillate -by-purpose -biquadrantal -biquadrate -biquadratic -biquarterly -biquartz -biquintile -biracial -biracialism -biracially -biradial -biradiate -biradiated -Byram -biramose -biramous -Byran -Byrann -birational -Birch -Birchard -birchbark -Birchdale -birched -birchen -Bircher -birchers -Birches -birching -Birchism -Birchite -Birchleaf -birchman -Birchrunville -Birchtree -Birchwood -Birck -Bird -Byrd -birdbander -birdbanding -birdbath -birdbaths -birdbath's -bird-batting -birdberry -birdbrain -birdbrained -bird-brained -birdbrains -birdcage -bird-cage -birdcages -birdcall -birdcalls -birdcatcher -birdcatching -birdclapper -birdcraft -bird-dog -bird-dogged -bird-dogging -birddom -birde -birded -birdeen -Birdeye -bird-eyed -Birdell -Birdella -birder -birders -bird-faced -birdfarm -birdfarms -bird-fingered -bird-foot -bird-foots -birdglue -birdhood -birdhouse -birdhouses -birdy -birdyback -Birdie -Byrdie -birdieback -birdied -birdieing -birdies -birdikin -birding -birdings -Birdinhand -bird-in-the-bush -birdland -birdless -birdlet -birdlife -birdlike -birdlime -bird-lime -birdlimed -birdlimes -birdliming -birdling -birdlore -birdman -birdmen -birdmouthed -birdnest -bird-nest -birdnester -bird-nesting -bird-ridden -Birds -bird's -birdsall -Birdsboro -birdseed -birdseeds -Birdseye -bird's-eye -birdseyes -bird's-eyes -bird's-foot -bird's-foots -birdshot -birdshots -birds-in-the-bush -birdsnest -bird's-nest -birdsong -birdstone -Byrdstown -Birdt -birdwatch -bird-watch -bird-watcher -birdweed -birdwise -birdwitted -bird-witted -birdwoman -birdwomen -byre -by-reaction -Birecree -birectangular -birefracting -birefraction -birefractive -birefringence -birefringent -byreman -byre-man -bireme -byre-men -biremes -byres -by-respect -by-result -biretta -birettas -byrewards -byrewoman -birgand -Birgit -Birgitta -Byrgius -Birgus -biri -biriani -biriba -birimose -Birk -Birkbeck -birken -Birkenhead -Birkenia -Birkeniidae -Birkett -Birkhoff -birky -birkie -birkies -Birkle -Birkner -birkremite -birks -birl -Byrl -byrlady -byrlakin -byrlaw -byrlawman -byrlawmen -birle -Byrle -birled -byrled -birler -birlers -birles -birlie -birlieman -birling -byrling -birlings -birlinn -birls -byrls -birma -Birmingham -Birminghamize -birn -Byrn -Birnamwood -birne -Byrne -Byrnedale -Birney -Byrnes -birny -byrnie -byrnies -Biro -byroad -by-road -byroads -Birobidzhan -Birobijan -Birobizhan -birodo -Byrom -Birome -Byromville -Biron -Byron -Byronesque -Byronian -Byroniana -Byronic -Byronically -Byronics -Byronish -Byronism -Byronist -Byronite -Byronize -by-room -birostrate -birostrated -birota -birotation -birotatory -by-route -birr -birred -Birrell -birretta -birrettas -Byrrh -birri -byrri -birring -birrotch -birrs -birrus -byrrus -birse -birses -birsy -birsit -birsle -Byrsonima -Birt -birth -birthbed -birthday -birthdays -birthday's -birthdate -birthdates -birthdom -birthed -birthy -birthing -byrthynsak -birthland -birthless -birthmark -birthmarks -birthmate -birthnight -birthplace -birthplaces -birthrate -birthrates -birthright -birthrights -birthright's -birthroot -births -birthstone -birthstones -birthstool -birthwort -Birtwhistle -Birzai -BIS -bys -bis- -bisabol -bisaccate -Bysacki -bisacromial -bisagre -Bisayan -Bisayans -Bisayas -bisalt -Bisaltae -bisannual -bisantler -bisaxillary -Bisbee -bisbeeite -biscacha -Biscay -Biscayan -Biscayanism -biscayen -Biscayner -Biscanism -bischofite -Biscoe -biscot -biscotin -biscuit -biscuit-brained -biscuit-colored -biscuit-fired -biscuiting -biscuitlike -biscuitmaker -biscuitmaking -biscuitry -biscuitroot -biscuits -biscuit's -biscuit-shaped -biscutate -bisdiapason -bisdimethylamino -BISDN -bise -bisect -bisected -bisecting -bisection -bisectional -bisectionally -bisections -bisection's -bisector -bisectors -bisector's -bisectrices -bisectrix -bisects -bisegment -bisellia -bisellium -bysen -biseptate -biserial -biserially -biseriate -biseriately -biserrate -bises -biset -bisetose -bisetous -bisexed -bisext -bisexual -bisexualism -bisexuality -bisexually -bisexuals -bisexuous -bisglyoxaline -Bish -Bishareen -Bishari -Bisharin -bishydroxycoumarin -Bishop -bishopbird -bishopdom -bishoped -bishopess -bishopful -bishophood -bishoping -bishopless -bishoplet -bishoplike -bishopling -bishopric -bishoprics -bishops -bishop's -bishopscap -bishop's-cap -bishopship -bishopstool -bishop's-weed -Bishopville -bishopweed -bisie -bisiliac -bisilicate -bisiliquous -bisyllabic -bisyllabism -bisimine -bisymmetry -bisymmetric -bisymmetrical -bisymmetrically -BISYNC -bisinuate -bisinuation -bisischiadic -bisischiatic -by-sitter -Bisitun -Bisk -biskop -Biskra -bisks -Bisley -bislings -bysmalith -bismanol -bismar -Bismarck -Bismarckian -Bismarckianism -bismarine -Bismark -bisme -bismer -bismerpund -bismethyl -bismillah -bismite -Bismosol -bismuth -bismuthal -bismuthate -bismuthic -bismuthide -bismuthiferous -bismuthyl -bismuthine -bismuthinite -bismuthite -bismuthous -bismuths -bismutite -bismutoplagionite -bismutosmaltite -bismutosphaerite -bisnaga -bisnagas -bisognio -bison -bisonant -bisons -bison's -bisontine -BISP -by-speech -by-spel -byspell -bisphenoid -bispinose -bispinous -bispore -bisporous -bisque -bisques -bisquette -byss -bissabol -byssaceous -byssal -Bissau -Bissell -bissellia -Bisset -bissext -bissextile -bissextus -Bysshe -byssi -byssiferous -byssin -byssine -Byssinosis -bisso -byssogenous -byssoid -byssolite -bisson -bissonata -byssus -byssuses -bist -bistable -by-stake -bystander -bystanders -bystander's -bistate -bistephanic -bister -bistered -bisters -bistetrazole -bisti -bistipular -bistipulate -bistipuled -bistort -Bistorta -bistorts -bistoury -bistouries -bistournage -bistratal -bistratose -bistre -bistred -bystreet -by-street -bystreets -bistres -bistriate -bistriazole -bistro -bistroic -by-stroke -bistros -bisubstituted -bisubstitution -bisulc -bisulcate -bisulcated -bisulfate -bisulfid -bisulfide -bisulfite -bisulphate -bisulphide -bisulphite -Bisutun -BIT -bitable -bitake -bytalk -by-talk -bytalks -bitangent -bitangential -bitanhol -bitartrate -bit-by-bit -bitbrace -Bitburg -bitch -bitched -bitchery -bitcheries -bitches -bitchy -bitchier -bitchiest -bitchily -bitchiness -bitching -bitch-kitty -bitch's -bite -byte -biteable -biteche -bited -biteless -Bitely -bitemporal -bitentaculate -biter -by-term -biternate -biternately -biters -bites -bytes -byte's -bitesheep -bite-sheep -bite-tongue -bitewing -bitewings -byth -by-the-bye -bitheism -by-the-way -Bithia -by-thing -Bithynia -Bithynian -by-throw -by-thrust -biti -bityite -bytime -by-time -biting -bitingly -bitingness -bitypic -Bitis -bitless -bitmap -bitmapped -BITNET -bito -bitolyl -Bitolj -Bytom -Biton -bitonal -bitonality -bitonalities -by-tone -bitore -bytownite -bytownitite -by-track -by-trail -bitreadle -bi-tri- -bitripartite -bitripinnatifid -bitriseptate -bitrochanteric -BITS -bit's -bitser -bitsy -bitstalk -bitstock -bitstocks -bitstone -bitt -bittacle -bitte -bitted -bitten -Bittencourt -bitter -bitter- -bitterbark -bitter-biting -bitterblain -bitterbloom -bitterbrush -bitterbump -bitterbur -bitterbush -bittered -bitter-end -bitterender -bitter-ender -bitter-enderism -bitter-endism -bitterer -bitterest -bitterful -bitterhead -bitterhearted -bitterheartedness -bittering -bitterish -bitterishness -bitterless -bitterly -bitterling -bittern -bitterness -bitternesses -bitterns -bitternut -bitter-rinded -bitterroot -bitters -bittersweet -bitter-sweet -bitter-sweeting -bittersweetly -bittersweetness -bittersweets -bitter-tasting -bitter-tongued -bitterweed -bitterwood -bitterworm -bitterwort -bitthead -Bitthia -bitty -bittie -bittier -bittiest -bitting -Bittinger -bittings -Bittium -Bittner -Bitto -bittock -bittocks -bittor -bitts -bitubercular -bituberculate -bituberculated -Bitulithic -bitume -bitumed -bitumen -bitumens -bituminate -bituminiferous -bituminisation -bituminise -bituminised -bituminising -bituminization -bituminize -bituminized -bituminizing -bituminoid -bituminosis -bituminous -by-turning -bitwise -bit-wise -BIU -BYU -biune -biunial -biunique -biuniquely -biuniqueness -biunity -biunivocal -biurate -biurea -biuret -bivalence -bivalency -bivalencies -bivalent -bivalents -bivalve -bivalved -bivalves -bivalve's -Bivalvia -bivalvian -bivalvous -bivalvular -bivane -bivariant -bivariate -bivascular -bivaulted -bivector -biventer -biventral -biverb -biverbal -bivial -by-view -bivinyl -bivinyls -Bivins -bivious -bivittate -bivium -bivocal -bivocalized -bivoltine -bivoluminous -bivouac -bivouaced -bivouacked -bivouacking -bivouacks -bivouacs -bivvy -biw- -biwa -Biwabik -byway -by-way -byways -bywalk -by-walk -bywalker -bywalking -by-walking -byward -by-wash -by-water -Bywaters -biweekly -biweeklies -by-west -biwinter -by-wipe -bywoner -by-wood -Bywoods -byword -by-word -bywords -byword's -bywork -by-work -byworks -BIX -Bixa -Bixaceae -bixaceous -Bixby -bixbyite -bixin -Bixler -biz -Byz -Byz. -bizant -byzant -Byzantian -Byzantine -Byzantinesque -Byzantinism -Byzantinize -Byzantium -byzants -bizardite -bizarre -bizarrely -bizarreness -bizarrerie -bizarres -Byzas -bizcacha -bize -bizel -Bizen -Bizerta -Bizerte -bizes -Bizet -bizygomatic -biznaga -biznagas -bizonal -bizone -bizones -Bizonia -Biztha -bizz -bizzarro -Bjart -Bjneborg -Bjoerling -Bjork -Bjorn -bjorne -Bjornson -Bk -bk. -bkbndr -bkcy -bkcy. -bkg -bkg. -bkgd -bklr -bkpr -bkpt -bks -bks. -bkt -BL -bl. -BLA -blaasop -blab -blabbed -blabber -blabbered -blabberer -blabbering -blabbermouth -blabbermouths -blabbers -blabby -blabbing -blabmouth -blabs -Blacher -Blachly -blachong -Black -blackacre -blackamoor -blackamoors -black-and-blue -black-and-tan -black-and-white -black-aproned -blackarm -black-a-viced -black-a-visaged -black-a-vised -blackback -black-backed -blackball -black-ball -blackballed -blackballer -blackballing -blackballs -blackband -black-banded -Blackbeard -black-bearded -blackbeetle -blackbelly -black-bellied -black-belt -blackberry -black-berried -blackberries -blackberrylike -blackberry's -black-billed -blackbine -blackbird -blackbirder -blackbirding -blackbirds -blackbird's -black-blooded -black-blue -blackboard -blackboards -blackboard's -blackbody -black-bodied -black-boding -blackboy -blackboys -black-bordered -black-boughed -blackbreast -black-breasted -black-browed -black-brown -blackbrush -blackbuck -Blackburn -blackbush -blackbutt -blackcap -black-capped -blackcaps -black-chinned -black-clad -blackcoat -black-coated -blackcock -blackcod -blackcods -black-colored -black-cornered -black-crested -black-crowned -blackcurrant -blackdamp -Blackduck -black-eared -black-ears -blacked -black-edged -Blackey -blackeye -black-eyed -blackeyes -blacken -blackened -blackener -blackeners -blackening -blackens -blacker -blackest -blacketeer -Blackett -blackface -black-faced -black-favored -black-feathered -Blackfeet -blackfellow -blackfellows -black-figure -blackfigured -black-figured -blackfin -blackfins -blackfire -blackfish -blackfisher -blackfishes -blackfishing -blackfly -blackflies -Blackfoot -black-footed -Blackford -Blackfriars -black-fruited -black-gowned -blackguard -blackguardism -blackguardize -blackguardly -blackguardry -blackguards -blackgum -blackgums -black-hafted -black-haired -Blackhander -Blackhawk -blackhead -black-head -black-headed -blackheads -blackheart -blackhearted -black-hearted -blackheartedly -blackheartedness -black-hilted -black-hole -black-hooded -black-hoofed -blacky -blackie -blackies -blacking -blackings -Blackington -blackish -blackishly -blackishness -blackit -blackjack -blackjacked -blackjacking -blackjacks -blackjack's -blackland -blacklead -blackleg -black-leg -blacklegged -black-legged -blackleggery -blacklegging -blacklegism -blacklegs -black-letter -blackly -Blacklick -black-lidded -blacklight -black-lipped -blacklist -blacklisted -blacklister -blacklisting -blacklists -black-locked -black-looking -blackmail -blackmailed -blackmailer -blackmailers -blackmailing -blackmails -Blackman -black-maned -black-margined -black-market -black-marketeer -Blackmore -black-mouth -black-mouthed -Blackmun -Blackmur -blackneb -black-neb -blackneck -black-necked -blackness -blacknesses -blacknob -black-nosed -blackout -black-out -blackouts -blackout's -blackpatch -black-peopled -blackplate -black-plumed -blackpoll -Blackpool -blackpot -black-pot -blackprint -blackrag -black-red -black-robed -blackroot -black-rooted -blacks -black-sander -Blacksburg -blackseed -Blackshear -Blackshirt -blackshirted -black-shouldered -black-skinned -blacksmith -blacksmithing -blacksmiths -blacksnake -black-snake -black-spotted -blackstick -Blackstock -black-stoled -Blackstone -blackstrap -Blacksville -blacktail -black-tail -black-tailed -blackthorn -black-thorn -blackthorns -black-throated -black-tie -black-toed -blacktongue -black-tongued -blacktop -blacktopped -blacktopping -blacktops -blacktree -black-tressed -black-tufted -black-veiled -Blackville -black-visaged -blackware -blackwash -black-wash -blackwasher -blackwashing -Blackwater -blackweed -Blackwell -black-whiskered -Blackwood -black-wood -blackwork -blackwort -blad -bladder -bladderet -bladdery -bladderless -bladderlike -bladdernose -bladdernut -bladderpod -bladders -bladder's -bladderseed -bladderweed -bladderwort -bladderwrack -blade -bladebone -bladed -bladeless -bladelet -bladelike -Bladen -Bladenboro -Bladensburg -blade-point -Blader -blades -blade's -bladesmith -bladewise -blady -bladygrass -blading -bladish -Bladon -blae -blaeberry -blaeberries -blaeness -Blaeu -Blaeuw -Blaew -blaewort -blaff -blaffert -blaflum -Blagg -blaggard -Blagonravov -Blagoveshchensk -blague -blagueur -blah -blah-blah -blahlaut -blahs -blay -Blaydon -blayk -Blain -Blaine -Blayne -Blainey -blains -Blair -Blaire -blairmorite -Blairs -Blairsburg -Blairsden -Blairstown -Blairsville -Blaisdell -Blaise -Blayze -Blake -blakeberyed -blakeite -Blakelee -Blakeley -Blakely -Blakemore -Blakesburg -Blakeslee -Blalock -blam -blamability -blamable -blamableness -blamably -blame -blameable -blameableness -blameably -blamed -blameful -blamefully -blamefulness -Blamey -blameless -blamelessly -blamelessness -blamer -blamers -blames -blame-shifting -blameworthy -blameworthiness -blameworthinesses -blaming -blamingly -blams -blan -Blanc -Blanca -Blancanus -blancard -Blanch -Blancha -Blanchard -Blanchardville -Blanche -blanched -blancher -blanchers -blanches -Blanchester -Blanchette -blanchi -blanchimeter -blanching -blanchingly -Blanchinus -blancmange -blancmanger -blancmanges -Blanco -blancs -Bland -blanda -BLandArch -blandation -Blandburg -blander -blandest -Blandford -Blandfordia -Blandy-les-Tours -blandiloquence -blandiloquious -blandiloquous -Blandina -Blanding -Blandinsville -blandish -blandished -blandisher -blandishers -blandishes -blandishing -blandishingly -blandishment -blandishments -blandly -blandness -blandnesses -Blandon -Blandville -Blane -Blanford -Blank -Blanka -blankard -blankbook -blanked -blankeel -blank-eyed -Blankenship -blanker -blankest -blanket -blanketed -blanketeer -blanketer -blanketers -blanketflower -blanket-flower -blankety -blankety-blank -blanketing -blanketless -blanketlike -blanketmaker -blanketmaking -blanketry -blankets -blanket-stitch -blanketweed -blanky -blanking -blankish -Blankit -blankite -blankly -blank-looking -blankminded -blank-minded -blankmindedness -blankness -blanknesses -Blanks -blanque -blanquette -blanquillo -blanquillos -Blantyre -Blantyre-Limbe -blaoner -blaoners -blare -blared -blares -Blarina -blaring -blarney -blarneyed -blarneyer -blarneying -blarneys -blarny -blarnid -blart -BLAS -Blasdell -Blase -Blaseio -blaseness -blash -blashy -Blasia -Blasien -Blasius -blason -blaspheme -blasphemed -blasphemer -blasphemers -blasphemes -blasphemy -blasphemies -blaspheming -blasphemous -blasphemously -blasphemousness -blast -blast- -blastaea -blast-borne -blasted -blastema -blastemal -blastemas -blastemata -blastematic -blastemic -blaster -blasters -blast-freeze -blast-freezing -blast-frozen -blastful -blast-furnace -blasthole -blasty -blastic -blastid -blastide -blastie -blastier -blasties -blastiest -blasting -blastings -blastman -blastment -blasto- -blastocarpous -blastocele -blastocheme -blastochyle -blastocyst -blastocyte -blastocoel -blastocoele -blastocoelic -blastocolla -blastoderm -blastodermatic -blastodermic -blastodisc -blastodisk -blastoff -blast-off -blastoffs -blastogenesis -blastogenetic -blastogeny -blastogenic -blastogranitic -blastoid -Blastoidea -blastoma -blastomas -blastomata -blastomere -blastomeric -Blastomyces -blastomycete -Blastomycetes -blastomycetic -blastomycetous -blastomycin -blastomycosis -blastomycotic -blastoneuropore -Blastophaga -blastophyllum -blastophitic -blastophoral -blastophore -blastophoric -blastophthoria -blastophthoric -blastoporal -blastopore -blastoporic -blastoporphyritic -blastosphere -blastospheric -blastostylar -blastostyle -blastozooid -blastplate -blasts -blastula -blastulae -blastular -blastulas -blastulation -blastule -blat -blatancy -blatancies -blatant -blatantly -blatch -blatchang -blate -blately -blateness -blateration -blateroon -blather -blathered -blatherer -blathery -blathering -blathers -blatherskite -blatherskites -blatiform -blatjang -Blatman -blats -Blatt -Blatta -Blattariae -blatted -blatter -blattered -blatterer -blattering -blatters -blatti -blattid -Blattidae -blattiform -blatting -Blattodea -blattoid -Blattoidea -Blatz -Blau -blaubok -blauboks -Blaugas -blaunner -blautok -Blauvelt -blauwbok -Blavatsky -blaver -blaw -blawed -Blawenburg -blawing -blawn -blawort -blaws -Blaze -blazed -blazer -blazers -blazes -blazy -blazing -blazingly -blazon -blazoned -blazoner -blazoners -blazoning -blazonment -blazonry -blazonries -blazons -Blcher -bld -bldg -bldg. -BldgE -bldr -BLDS -ble -blea -bleaberry -bleach -bleachability -bleachable -bleached -bleached-blond -bleacher -bleachery -bleacheries -bleacherite -bleacherman -bleachers -bleaches -bleachfield -bleachground -bleachhouse -bleachyard -bleaching -bleachman -bleachs -bleachworks -bleak -bleaker -bleakest -bleaky -bleakish -bleakly -bleakness -bleaknesses -bleaks -blear -bleared -blearedness -bleareye -bleareyed -blear-eyed -blear-eyedness -bleary -bleary-eyed -blearyeyedness -blearier -bleariest -blearily -bleariness -blearing -blearness -blears -blear-witted -bleat -bleated -bleater -bleaters -bleaty -bleating -bleatingly -bleats -bleaunt -bleb -blebby -blebs -blechnoid -Blechnum -bleck -bled -Bledsoe -blee -bleed -bleeder -bleeders -bleeding -bleedings -bleeds -bleekbok -Bleeker -bleep -bleeped -bleeping -bleeps -bleery -bleeze -bleezy -Bleiblerville -Bleier -bleymes -bleinerite -blellum -blellums -blemish -blemished -blemisher -blemishes -blemishing -blemishment -blemish's -blemmatrope -Blemmyes -Blen -blench -blenched -blencher -blenchers -blenches -blenching -blenchingly -Blencoe -blencorn -blend -Blenda -blendcorn -blende -blended -blender -blenders -blendes -blending -blendor -blends -blendure -blendwater -blend-word -Blenheim -blenk -Blenker -blennadenitis -blennemesis -blennenteria -blennenteritis -blenny -blennies -blenniid -Blenniidae -blenniiform -Blenniiformes -blennymenitis -blennioid -Blennioidea -blenno- -blennocele -blennocystitis -blennoemesis -blennogenic -blennogenous -blennoid -blennoma -blennometritis -blennophlogisma -blennophlogosis -blennophobia -blennophthalmia -blennoptysis -blennorhea -blennorrhagia -blennorrhagic -blennorrhea -blennorrheal -blennorrhinia -blennorrhoea -blennosis -blennostasis -blennostatic -blennothorax -blennotorrhea -blennuria -blens -blent -bleo -bleomycin -blephar- -blephara -blepharadenitis -blepharal -blepharanthracosis -blepharedema -blepharelcosis -blepharemphysema -blepharydatis -Blephariglottis -blepharism -blepharitic -blepharitis -blepharo- -blepharoadenitis -blepharoadenoma -blepharoatheroma -blepharoblennorrhea -blepharocarcinoma -Blepharocera -Blepharoceridae -blepharochalasis -blepharochromidrosis -blepharoclonus -blepharocoloboma -blepharoconjunctivitis -blepharodiastasis -blepharodyschroia -blepharohematidrosis -blepharolithiasis -blepharomelasma -blepharoncosis -blepharoncus -blepharophyma -blepharophimosis -blepharophryplasty -blepharophthalmia -blepharopyorrhea -blepharoplast -blepharoplasty -blepharoplastic -blepharoplegia -blepharoptosis -blepharorrhaphy -blepharosymphysis -blepharosyndesmitis -blepharosynechia -blepharospasm -blepharospath -blepharosphincterectomy -blepharostat -blepharostenosis -blepharotomy -Blephillia -BLER -blere -Bleriot -BLERT -blesbok -bles-bok -blesboks -blesbuck -blesbucks -blesmol -bless -blesse -blessed -blesseder -blessedest -blessedly -blessedness -blessednesses -blesser -blessers -blesses -Blessing -blessingly -blessings -Blessington -blest -blet -blethe -blether -bletheration -blethered -blethering -blethers -bletherskate -Bletia -Bletilla -bletonism -blets -bletted -bletting -bleu -Bleuler -Blevins -blew -blewits -BLF -BLFE -BLI -Bly -bliaut -blibe -blick -blickey -blickeys -blicky -blickie -blickies -Blida -blier -bliest -Bligh -Blighia -Blight -blightbird -blighted -blighter -blighters -Blighty -blighties -blighting -blightingly -blights -blijver -Blim -blimbing -blimey -blimy -Blimp -blimpish -blimpishly -blimpishness -blimps -blimp's -blin -blind -blindage -blindages -blind-alley -blindball -blindcat -blinded -blindedly -blindeyes -blinder -blinders -blindest -blindfast -blindfish -blindfishes -blindfold -blindfolded -blindfoldedly -blindfoldedness -blindfolder -blindfolding -blindfoldly -blindfolds -blind-head -Blindheim -blinding -blindingly -blind-your-eyes -blindish -blindism -blindless -blindly -blindling -blind-loaded -blindman -blind-man's-buff -blind-nail -blindness -blindnesses -blind-nettle -blind-pigger -blind-pigging -blind-punch -blinds -blind-stamp -blind-stamped -blindstitch -blindstorey -blindstory -blindstories -blind-tool -blind-tooled -blindweed -blindworm -blind-worm -blinger -blini -bliny -blinis -blink -blinkard -blinkards -blinked -blink-eyed -blinker -blinkered -blinkering -blinkers -blinky -blinking -blinkingly -blinks -Blinn -Blynn -Blinni -Blinny -Blinnie -blinter -blintz -blintze -blintzes -blip -blype -blypes -blipped -blippers -blipping -blips -blip's -blirt -Bliss -Blisse -blissed -blisses -Blissfield -blissful -blissfully -blissfulness -blissing -blissless -blissom -blist -blister -blistered -blistery -blistering -blisteringly -blisterous -blisters -blisterweed -blisterwort -BLit -blite -blites -Blyth -Blithe -Blythe -blithebread -Blythedale -blitheful -blithefully -blithehearted -blithely -blithelike -blithe-looking -blithemeat -blithen -blitheness -blither -blithered -blithering -blithers -blithesome -blithesomely -blithesomeness -blithest -Blytheville -Blythewood -BLitt -blitter -Blitum -Blitz -blitzbuggy -blitzed -blitzes -blitzing -blitzkrieg -blitzkrieged -blitzkrieging -blitzkriegs -blitz's -Blitzstein -Blixen -blizz -blizzard -blizzardy -blizzardly -blizzardous -blizzards -blizzard's -blk -blk. -blksize -BLL -BLM -blo -bloat -bloated -bloatedness -bloater -bloaters -bloating -bloats -blob -blobbed -blobber -blobber-lipped -blobby -blobbier -blobbiest -blobbiness -blobbing -BLOBS -blob's -bloc -blocage -Bloch -Block -blockade -blockaded -blockader -blockaders -blockade-runner -blockaderunning -blockade-running -blockades -blockading -blockage -blockages -blockage's -blockboard -block-book -blockbuster -blockbusters -blockbusting -block-caving -blocked -blocked-out -Blocker -blocker-out -blockers -blockhead -blockheaded -blockheadedly -blockheadedness -blockheadish -blockheadishness -blockheadism -blockheads -blockhole -blockholer -blockhouse -blockhouses -blocky -blockier -blockiest -blockiness -blocking -blockish -blockishly -blockishness -blocklayer -blocklike -blockline -blockmaker -blockmaking -blockman -blockout -blockpate -block-printed -blocks -block's -block-saw -Blocksburg -block-serifed -blockship -Blockton -Blockus -blockwood -blocs -bloc's -Blodenwedd -Blodget -Blodgett -blodite -bloedite -Bloem -Bloemfontein -Blois -Blok -bloke -blokes -bloke's -blolly -bloman -Blomberg -Blomkest -Blomquist -blomstrandine -blond -blonde -Blondel -Blondell -Blondelle -blondeness -blonder -blondes -blonde's -blondest -blond-haired -blond-headed -Blondy -Blondie -blondine -blondish -blondness -blonds -blond's -Blood -bloodalley -bloodalp -blood-and-guts -blood-and-thunder -bloodbath -bloodbeat -blood-bedabbled -bloodberry -blood-bespotted -blood-besprinkled -bloodbird -blood-boltered -blood-bought -blood-cemented -blood-colored -blood-consuming -bloodcurdler -bloodcurdling -bloodcurdlingly -blood-defiled -blood-dyed -blood-discolored -blood-drenched -blooddrop -blooddrops -blood-drunk -blooded -bloodedness -blood-extorting -blood-faced -blood-filled -bloodfin -bloodfins -blood-fired -blood-flecked -bloodflower -blood-frozen -bloodguilt -bloodguilty -blood-guilty -bloodguiltiness -bloodguiltless -blood-gushing -blood-heat -blood-hot -bloodhound -bloodhounds -bloodhound's -blood-hued -bloody -bloody-back -bloodybones -bloody-bones -bloodied -bloody-eyed -bloodier -bloodies -bloodiest -bloody-faced -bloody-handed -bloody-hearted -bloodying -bloodily -bloody-minded -bloody-mindedness -bloody-mouthed -bloodiness -blooding -bloodings -bloody-nosed -bloody-red -bloody-sceptered -bloody-veined -bloodleaf -bloodless -bloodlessly -bloodlessness -bloodletter -blood-letter -bloodletting -blood-letting -bloodlettings -bloodlike -bloodline -bloodlines -blood-loving -bloodlust -bloodlusting -blood-mad -bloodmobile -bloodmobiles -blood-money -bloodmonger -bloodnoun -blood-plashed -blood-polluted -blood-polluting -blood-raw -bloodred -blood-red -blood-relation -bloodripe -bloodripeness -bloodroot -blood-root -bloodroots -bloods -blood-scrawled -blood-shaken -bloodshed -bloodshedder -bloodshedding -bloodsheds -bloodshot -blood-shot -bloodshotten -blood-shotten -blood-sized -blood-spattered -blood-spavin -bloodspiller -bloodspilling -bloodstain -blood-stain -bloodstained -bloodstainedness -bloodstains -bloodstain's -bloodstanch -blood-stirring -blood-stirringness -bloodstock -bloodstone -blood-stone -bloodstones -blood-strange -bloodstream -bloodstreams -bloodstroke -bloodsuck -blood-suck -bloodsucker -blood-sucker -bloodsuckers -bloodsucking -bloodsuckings -blood-swelled -blood-swoln -bloodtest -bloodthirst -bloodthirster -bloodthirsty -bloodthirstier -bloodthirstiest -bloodthirstily -bloodthirstiness -bloodthirstinesses -bloodthirsting -blood-tinctured -blood-type -blood-vascular -blood-vessel -blood-warm -bloodweed -bloodwit -bloodwite -blood-wite -blood-won -bloodwood -bloodworm -blood-worm -bloodwort -blood-wort -bloodworthy -blooey -blooie -Bloom -bloomage -Bloomburg -bloom-colored -Bloomdale -bloomed -Bloomer -Bloomery -Bloomeria -bloomeries -bloomerism -bloomers -bloomfell -bloom-fell -Bloomfield -Bloomfieldian -bloomy -bloomy-down -bloomier -bloomiest -blooming -Bloomingburg -Bloomingdale -bloomingly -bloomingness -Bloomingrose -Bloomington -bloomkin -bloomless -blooms -Bloomsburg -Bloomsbury -Bloomsburian -Bloomsdale -bloom-shearing -Bloomville -bloop -blooped -blooper -bloopers -blooping -bloops -blooth -blore -blosmy -Blossburg -Blossom -blossom-bearing -blossombill -blossom-billed -blossom-bordered -blossom-crested -blossomed -blossom-faced -blossomhead -blossom-headed -blossomy -blossoming -blossom-laden -blossomless -blossom-nosed -blossomry -blossoms -blossomtime -Blossvale -blot -blotch -blotched -blotches -blotchy -blotchier -blotchiest -blotchily -blotchiness -blotching -blotch-shaped -blote -blotless -blotlessness -blots -blot's -blotted -blotter -blotters -blottesque -blottesquely -blotty -blottier -blottiest -blotting -blottingly -blotto -blottto -bloubiskop -Blount -Blountstown -Blountsville -Blountville -blouse -bloused -blouselike -blouses -blouse's -blousy -blousier -blousiest -blousily -blousing -blouson -blousons -blout -bloviate -bloviated -bloviates -bloviating -Blow -blow- -blowback -blowbacks -blowball -blowballs -blowby -blow-by -blow-by-blow -blow-bies -blowbys -blowcase -blowcock -blowdown -blow-dry -blowed -blowen -blower -blowers -blower-up -blowess -blowfish -blowfishes -blowfly -blow-fly -blowflies -blowgun -blowguns -blowhard -blow-hard -blowhards -blowhole -blow-hole -blowholes -blowy -blowie -blowier -blowiest -blow-in -blowiness -blowing -blowings -blowiron -blow-iron -blowjob -blowjobs -blowlamp -blowline -blow-molded -blown -blown-in-the-bottle -blown-mold -blown-molded -blown-out -blown-up -blowoff -blowoffs -blowout -blowouts -blowpipe -blow-pipe -blowpipes -blowpit -blowpoint -blowproof -blows -blowse -blowsed -blowsy -blowsier -blowsiest -blowsily -blowspray -blowth -blow-through -blowtorch -blowtorches -blowtube -blowtubes -blowup -blow-up -blowups -blow-wave -blowze -blowzed -blowzy -blowzier -blowziest -blowzily -blowziness -blowzing -Bloxberg -Bloxom -Blriot -BLS -BLT -blub -blubbed -blubber -blubber-cheeked -blubbered -blubberer -blubberers -blubber-fed -blubberhead -blubbery -blubbering -blubberingly -blubberman -blubberous -blubbers -blubbing -Blucher -bluchers -bludge -bludged -bludgeon -bludgeoned -bludgeoneer -bludgeoner -bludgeoning -bludgeons -bludger -bludging -Blue -blue-annealed -blue-aproned -blueback -blue-backed -Blueball -blueballs -blue-banded -bluebead -Bluebeard -Bluebeardism -Bluebell -bluebelled -blue-bellied -bluebells -blue-belt -blueberry -blue-berried -blueberries -blueberry's -bluebill -blue-billed -bluebills -bluebird -blue-bird -bluebirds -bluebird's -blueblack -blue-black -blue-blackness -blueblaw -blue-blind -blueblood -blue-blooded -blueblossom -blue-blossom -blue-bloused -bluebonnet -bluebonnets -bluebonnet's -bluebook -bluebooks -bluebottle -blue-bottle -bluebottles -bluebreast -blue-breasted -bluebuck -bluebush -bluebutton -bluecap -blue-cap -bluecaps -blue-checked -blue-cheeked -blue-chip -bluecoat -bluecoated -blue-coated -bluecoats -blue-collar -blue-colored -blue-crested -blue-cross -bluecup -bluecurls -blue-curls -blued -blue-devilage -blue-devilism -blue-eared -Blueeye -blue-eye -blue-eyed -blue-faced -Bluefarb -Bluefield -Bluefields -bluefin -bluefins -bluefish -blue-fish -bluefishes -blue-flowered -blue-footed -blue-fronted -bluegill -bluegills -blue-glancing -blue-glimmering -bluegown -blue-gray -bluegrass -blue-green -bluegum -bluegums -blue-haired -bluehead -blue-headed -blueheads -bluehearted -bluehearts -blue-hearts -Bluehole -blue-hot -Bluey -blue-yellow -blue-yellow-blind -blueing -blueings -blueys -blueish -bluejack -bluejacket -bluejackets -bluejacks -Bluejay -bluejays -blue-john -bluejoint -blue-leaved -blueleg -bluelegs -bluely -blueline -blue-lined -bluelines -blue-mantled -blue-molded -blue-molding -Bluemont -blue-mottled -blue-mouthed -blueness -bluenesses -bluenose -blue-nose -bluenosed -blue-nosed -Bluenoser -bluenoses -blue-pencil -blue-penciled -blue-penciling -blue-pencilled -blue-pencilling -bluepoint -bluepoints -blueprint -blueprinted -blueprinter -blueprinting -blueprints -blueprint's -bluer -blue-rayed -blue-red -blue-ribbon -blue-ribboner -blue-ribbonism -blue-ribbonist -blue-roan -blue-rolled -blues -blue-sailors -bluesy -bluesides -bluesier -blue-sighted -blue-sky -blue-slate -bluesman -bluesmen -blue-spotted -bluest -blue-stained -blue-starry -bluestem -blue-stemmed -bluestems -bluestocking -blue-stocking -bluestockingish -bluestockingism -bluestockings -bluestone -bluestoner -blue-striped -Bluet -blue-tailed -blueth -bluethroat -blue-throated -bluetick -blue-tinted -bluetit -bluetongue -blue-tongued -bluetop -bluetops -bluets -blue-veined -blue-washed -Bluewater -blue-water -blue-wattled -blueweed -blueweeds -blue-white -bluewing -blue-winged -bluewood -bluewoods -bluff -bluffable -bluff-bowed -Bluffdale -bluffed -bluffer -bluffers -bluffest -bluff-headed -bluffy -bluffing -bluffly -bluffness -Bluffs -Bluffton -Bluford -blufter -bluggy -Bluh -Bluhm -bluing -bluings -bluish -bluish-green -bluishness -bluism -bluisness -Blum -Bluma -blume -Blumea -blumed -Blumenfeld -Blumenthal -blumes -bluming -blunder -Blunderbore -blunderbuss -blunderbusses -blundered -blunderer -blunderers -blunderful -blunderhead -blunderheaded -blunderheadedness -blundering -blunderingly -blunderings -blunders -blundersome -blunge -blunged -blunger -blungers -blunges -blunging -Blunk -blunker -blunket -blunks -blunnen -Blunt -blunt-angled -blunted -blunt-edged -blunt-ended -blunter -bluntest -blunt-faced -blunthead -blunt-headed -blunthearted -bluntie -blunting -bluntish -bluntishness -blunt-leaved -bluntly -blunt-lobed -bluntness -bluntnesses -blunt-nosed -blunt-pointed -blunts -blunt-spoken -blunt-witted -blup -blur -blurb -blurbed -blurbing -blurbist -blurbs -blurping -blurred -blurredly -blurredness -blurrer -blurry -blurrier -blurriest -blurrily -blurriness -blurring -blurringly -blurs -blur's -blurt -blurted -blurter -blurters -blurting -blurts -Blus -blush -blush-colored -blush-compelling -blushed -blusher -blushers -blushes -blushet -blush-faced -blushful -blushfully -blushfulness -blushy -blushiness -blushing -blushingly -blushless -blush-suffused -blusht -blush-tinted -blushwort -bluster -blusteration -blustered -blusterer -blusterers -blustery -blustering -blusteringly -blusterous -blusterously -blusters -blutwurst -BLV -Blvd -BM -BMA -BMarE -BME -BMEd -BMet -BMetE -BMEWS -BMG -BMgtE -BMI -BMJ -BMO -BMOC -BMP -BMR -BMS -BMT -BMus -BMV -BMW -BN -Bn. -BNC -BNET -BNF -BNFL -BNS -BNSC -BNU -BO -boa -Boabdil -BOAC -boa-constrictor -Boadicea -Boaedon -boagane -Boak -Boalsburg -Boanbura -boanergean -Boanerges -boanergism -boanthropy -Boar -boarcite -board -boardable -board-and-roomer -board-and-shingle -boardbill -boarded -boarder -boarders -boarder-up -boardy -boarding -boardinghouse -boardinghouses -boardinghouse's -boardings -boardly -boardlike -Boardman -boardmanship -boardmen -boardroom -boards -board-school -boardsmanship -board-wages -boardwalk -boardwalks -Boarer -boarfish -boar-fish -boarfishes -boarhound -boar-hunting -boarish -boarishly -boarishness -boars -boarship -boarskin -boarspear -boarstaff -boart -boarts -boarwood -Boas -boast -boasted -boaster -boasters -boastful -boastfully -boastfulness -boasting -boastingly -boastings -boastive -boastless -boasts -boat -boatable -boatage -boatbill -boat-bill -boatbills -boatbuilder -boatbuilding -boated -boatel -boatels -Boaten -boater -boaters -boatfalls -boat-fly -boatful -boat-green -boat-handler -boathead -boatheader -boathook -boathouse -boathouses -boathouse's -boatyard -boatyards -boatyard's -boatie -boating -boatings -boation -boatkeeper -boatless -boatly -boatlike -boatlip -boatload -boatloader -boatloading -boatloads -boatload's -boat-lowering -boatman -boatmanship -boatmaster -boatmen -boatowner -boat-race -boats -boatsetter -boat-shaped -boatshop -boatside -boatsman -boatsmanship -boatsmen -boatsteerer -boatswain -boatswains -boatswain's -boattail -boat-tailed -boatward -boatwise -boatwoman -boat-woman -Boatwright -Boaz -Bob -boba -bobac -bobache -bobachee -Bobadil -Bobadilian -Bobadilish -Bobadilism -Bobadilla -bobance -Bobbe -bobbed -Bobbee -bobbejaan -bobber -bobbery -bobberies -bobbers -Bobbette -Bobbi -Bobby -bobby-dazzler -Bobbie -Bobbye -Bobbielee -bobbies -bobbin -bobbiner -bobbinet -bobbinets -bobbing -Bobbinite -bobbin-net -bobbins -bobbin's -bobbinwork -bobbish -bobbishly -bobby-socker -bobbysocks -bobbysoxer -bobby-soxer -bobbysoxers -bobble -bobbled -bobbles -bobbling -bobcat -bobcats -bob-cherry -bobcoat -bobeche -bobeches -bobet -Bobette -bobfly -bobflies -bobfloat -bob-haired -bobierrite -Bobina -Bobine -Bobinette -bobization -bobjerom -Bobker -boblet -Bobo -Bo-Bo -Bobo-Dioulasso -bobol -bobolink -bobolinks -bobolink's -bobooti -bobotee -bobotie -bobowler -bobs -bob's -Bobseine -bobsy-die -bobsled -bob-sled -bobsledded -bobsledder -bobsledders -bobsledding -bobsleded -bobsleding -bobsleds -bobsleigh -bobstay -bobstays -bobtail -bob-tail -bobtailed -bobtailing -bobtails -Bobtown -Bobwhite -bob-white -bobwhites -bobwhite's -bob-wig -bobwood -BOC -Boca -bocaccio -bocaccios -bocage -bocal -bocardo -bocasin -bocasine -bocca -Boccaccio -boccale -boccarella -boccaro -bocce -bocces -Boccherini -bocci -boccia -boccias -boccie -boccies -Boccioni -boccis -Bocconia -boce -bocedization -Boche -bocher -boches -Bochism -Bochum -bochur -Bock -bockey -bockerel -bockeret -bocking -bocklogged -bocks -Bockstein -Bocock -bocoy -bocstaff -BOD -bodach -bodacious -bodaciously -Bodanzky -Bodb -bodd- -boddagh -boddhisattva -boddle -Bode -boded -bodeful -bodefully -bodefulness -Bodega -bodegas -bodegon -bodegones -bodement -bodements -boden -bodenbenderite -Bodenheim -Bodensee -boder -bodes -bodewash -bodeword -Bodfish -bodge -bodger -bodgery -bodgie -bodhi -Bodhidharma -bodhisat -Bodhisattva -bodhisattwa -Bodi -Body -bodybending -body-breaking -bodybuild -body-build -bodybuilder -bodybuilders -bodybuilder's -bodybuilding -bodice -bodiced -bodicemaker -bodicemaking -body-centered -body-centred -bodices -bodycheck -bodied -bodier -bodieron -bodies -bodyguard -body-guard -bodyguards -bodyguard's -bodyhood -bodying -body-killing -bodikin -bodykins -bodiless -bodyless -bodilessness -bodily -body-line -bodiliness -bodilize -bodymaker -bodymaking -bodiment -body-mind -Bodine -boding -bodingly -bodings -bodyplate -bodyshirt -body-snatching -bodysuit -bodysuits -bodysurf -bodysurfed -bodysurfer -bodysurfing -bodysurfs -bodywear -bodyweight -bodywise -bodywood -bodywork -bodyworks -bodken -Bodkin -bodkins -bodkinwise -bodle -Bodley -Bodleian -Bodmin -Bodnar -Bodo -bodock -Bodoni -bodonid -bodrag -bodrage -Bodrogi -bods -bodstick -Bodwell -bodword -boe -Boebera -Boece -Boedromion -Boedromius -Boehike -Boehme -Boehmenism -Boehmenist -Boehmenite -Boehmer -Boehmeria -Boehmian -Boehmist -Boehmite -boehmites -Boeing -Boeke -Boelter -Boelus -boeotarch -Boeotia -Boeotian -Boeotic -Boeotus -Boer -Boerdom -Boerhavia -Boerne -boers -Boesch -Boeschen -Boethian -Boethius -Boethusian -Boetius -Boettiger -boettner -BOF -Boff -Boffa -boffin -boffins -boffo -boffola -boffolas -boffos -boffs -Bofors -bog -boga -bogach -Bogalusa -Bogan -bogans -Bogard -Bogarde -Bogart -Bogata -bogatyr -bogbean -bogbeans -bogberry -bogberries -bog-bred -bog-down -Bogey -bogeyed -bog-eyed -bogey-hole -bogeying -bogeyman -bogeymen -bogeys -boget -bogfern -boggard -boggart -bogged -Boggers -boggy -boggier -boggiest -boggin -bogginess -bogging -boggish -boggishness -boggle -bogglebo -boggled -boggle-dy-botch -boggler -bogglers -boggles -boggling -bogglingly -bogglish -Boggs -Boggstown -Boghazkeui -Boghazkoy -boghole -bog-hoose -bogy -bogydom -Bogie -bogieman -bogier -bogies -bogyism -bogyisms -Bogijiab -bogyland -bogyman -bogymen -bogys -bogland -boglander -bogle -bogled -bogledom -bogles -boglet -bogman -bogmire -Bogo -Bogoch -Bogomil -Bogomile -Bogomilian -Bogomilism -bogong -Bogor -Bogosian -Bogot -Bogota -bogotana -bog-rush -bogs -bog's -bogsucker -bogtrot -bog-trot -bogtrotter -bog-trotter -bogtrotting -Bogue -Boguechitto -bogued -boguing -bogum -bogus -Boguslawsky -bogusness -Bogusz -bogway -bogwood -bogwoods -bogwort -boh -Bohairic -Bohannon -Bohaty -bohawn -Bohea -boheas -Bohemia -Bohemia-Moravia -Bohemian -Bohemianism -bohemians -Bohemian-tartar -bohemias -bohemium -bohereen -Bohi -bohireen -Bohlen -Bohlin -Bohm -Bohman -Bohme -Bohmerwald -bohmite -Bohnenberger -Bohner -boho -Bohol -Bohon -bohor -bohora -bohorok -Bohr -Bohrer -Bohs -Bohun -bohunk -bohunks -Bohuslav -Boy -boyang -boyar -boyard -boyardism -Boiardo -boyardom -boyards -boyarism -boyarisms -boyars -boyau -boyaus -boyaux -Boice -Boyce -Boycey -Boiceville -Boyceville -boychick -boychicks -boychik -boychiks -Boycie -boycott -boycottage -boycotted -boycotter -boycotting -boycottism -boycotts -boid -Boyd -Boidae -boydekyn -Boyden -boydom -Boyds -Boydton -Boieldieu -Boyer -Boyers -Boyertown -Boyes -boiette -boyfriend -boyfriends -boyfriend's -boyg -boigid -Boigie -boiguacu -boyhood -boyhoods -Boii -boyish -boyishly -boyishness -boyishnesses -boyism -Boykin -Boykins -Boiko -boil -boyla -boilable -Boylan -boylas -boildown -Boyle -Boileau -boiled -boiler -boiler-cleaning -boilerful -boilerhouse -boilery -boilerless -boilermaker -boilermakers -boilermaking -boilerman -boiler-off -boiler-out -boilerplate -boilers -boilersmith -boiler-testing -boiler-washing -boilerworks -boily -boylike -boylikeness -boiling -boiling-house -boilingly -boilinglike -boiloff -boil-off -boiloffs -boilover -boils -Boylston -boy-meets-girl -Boyne -Boiney -boing -Boynton -boyo -boyology -boyos -Bois -Boys -boy's -bois-brl -Boisdarc -Boise -Boyse -boysenberry -boysenberries -boiserie -boiseries -boyship -Bois-le-Duc -boisseau -boisseaux -Boissevain -boist -boisterous -boisterously -boisterousness -boistous -boistously -boistousness -Boystown -Boyt -boite -boites -boithrin -Boito -boyuna -Bojardo -Bojer -Bojig-ngiji -bojite -bojo -Bok -bokadam -bokard -bokark -Bokchito -boke -Bokeelia -Bokhara -Bokharan -Bokm' -bokmakierie -boko -bokom -bokos -Bokoshe -Bokoto -Bol -Bol. -bola -Bolag -Bolan -Boland -Bolanger -bolar -bolas -bolases -bolbanac -bolbonac -Bolboxalis -Bolckow -bold -boldacious -bold-beating -bolded -bolden -bolder -Bolderian -boldest -boldface -bold-face -boldfaced -bold-faced -boldfacedly -bold-facedly -boldfacedness -bold-facedness -boldfaces -boldfacing -bold-following -boldhearted -boldheartedly -boldheartedness -boldin -boldine -bolding -boldly -bold-looking -bold-minded -boldness -boldnesses -boldo -boldoine -boldos -bold-spirited -Boldu -bole -bolection -bolectioned -boled -Boley -Boleyn -boleite -Bolelia -bolelike -Bolen -bolero -boleros -Boles -Boleslaw -Boletaceae -boletaceous -bolete -boletes -boleti -boletic -Boletus -boletuses -boleweed -bolewort -Bolger -Bolyai -Bolyaian -boliche -bolide -bolides -Boligee -bolimba -Bolinas -Boling -Bolingbroke -Bolinger -bolis -bolita -Bolitho -Bolivar -bolivares -bolivarite -bolivars -Bolivia -Bolivian -boliviano -bolivianos -bolivians -bolivias -bolk -Boll -Bollay -Bolland -Bollandist -Bollandus -bollard -bollards -bolled -Bollen -boller -bolly -bollies -Bolling -Bollinger -bollito -bollix -bollixed -bollixes -bollixing -bollock -bollocks -bollox -bolloxed -bolloxes -bolloxing -bolls -bollworm -bollworms -Bolme -Bolo -boloball -bolo-bolo -boloed -Bologna -Bolognan -bolognas -Bologne -Bolognese -bolograph -bolography -bolographic -bolographically -boloing -Boloism -boloman -bolomen -bolometer -bolometric -bolometrically -boloney -boloneys -boloroot -bolos -Bolshevik -Bolsheviki -Bolshevikian -Bolshevikism -Bolsheviks -bolshevik's -Bolshevism -Bolshevist -Bolshevistic -Bolshevistically -bolshevists -Bolshevization -Bolshevize -Bolshevized -Bolshevizing -Bolshy -Bolshie -Bolshies -Bolshoi -bolson -bolsons -bolster -bolstered -bolsterer -bolsterers -bolstering -bolsters -bolsterwork -Bolt -bolt-action -boltage -boltant -boltcutter -bolt-cutting -Bolte -bolted -boltel -Bolten -bolter -bolter-down -bolters -bolters-down -bolters-up -bolter-up -bolt-forging -bolthead -bolt-head -boltheader -boltheading -boltheads -bolthole -bolt-hole -boltholes -bolti -bolty -boltin -bolting -boltings -boltless -boltlike -boltmaker -boltmaking -Bolton -Boltonia -boltonias -boltonite -bolt-pointing -boltrope -bolt-rope -boltropes -bolts -bolt-shaped -boltsmith -boltspreet -boltstrake -bolt-threading -bolt-turning -boltuprightness -boltwork -Boltzmann -bolus -boluses -Bolzano -BOM -Boma -Bomarc -Bomarea -bomb -bombable -Bombacaceae -bombacaceous -bombace -Bombay -bombard -bombarde -bombarded -bombardelle -bombarder -bombardier -bombardiers -bombarding -bombardman -bombardmen -bombardment -bombardments -bombardo -bombardon -bombards -bombasine -bombast -bombaster -bombastic -bombastical -bombastically -bombasticness -bombastry -bombasts -Bombax -bombazeen -bombazet -bombazette -bombazine -bombe -bombed -bomber -bombernickel -bombers -bombes -bombesin -bombesins -bombic -bombiccite -bombycid -Bombycidae -bombycids -bombyciform -Bombycilla -Bombycillidae -Bombycina -bombycine -bombycinous -Bombidae -bombilate -bombilation -Bombyliidae -bombylious -bombilla -bombillas -Bombinae -bombinate -bombinating -bombination -bombing -bombings -Bombyx -bombyxes -bomb-ketch -bomble -bombline -bombload -bombloads -bombo -bombola -bombonne -bombora -bombous -bombproof -bomb-proof -bombs -bombshell -bomb-shell -bombshells -bombsight -bombsights -bomb-throwing -Bombus -BOMFOG -bomi -Bomke -Bomont -bomos -Bomoseen -Bomu -Bon -Bona -Bonacci -bon-accord -bonace -bonaci -bonacis -Bonadoxin -bona-fide -bonagh -bonaght -bonailie -Bonair -Bonaire -bonairly -bonairness -bonally -bonamano -bonang -bonanza -bonanzas -bonanza's -Bonaparte -Bonapartean -Bonapartism -Bonapartist -Bonaqua -Bonar -bona-roba -Bonasa -bonassus -bonasus -bonaught -bonav -Bonaventura -Bonaventure -Bonaventurism -Bonaveria -bonavist -Bonbo -bonbon -bon-bon -bonbonniere -bonbonnieres -bonbons -Boncarbo -bonce -bonchief -Bond -bondable -bondage -bondager -bondages -bondar -bonded -Bondelswarts -bonder -bonderize -bonderman -bonders -Bondes -bondfolk -bondhold -bondholder -bondholders -bondholding -Bondy -Bondie -bondieuserie -bonding -bondings -bondland -bond-land -bondless -bondmaid -bondmaids -bondman -bondmanship -bondmen -bondminder -bondoc -Bondon -bonds -bondservant -bond-servant -bondship -bondslave -bondsman -bondsmen -bondstone -Bondsville -bondswoman -bondswomen -bonduc -bonducnut -bonducs -Bonduel -Bondurant -Bondville -bondwoman -bondwomen -Bone -bone-ace -boneache -bonebinder -boneblack -bonebreaker -bone-breaking -bone-bred -bone-bruising -bone-carving -bone-crushing -boned -bonedog -bonedry -bone-dry -bone-dryness -bone-eater -boneen -bonefish -bonefishes -boneflower -bone-grinding -bone-hard -bonehead -boneheaded -boneheadedness -boneheads -Boney -boneyard -boneyards -bone-idle -bone-lace -bone-laced -bone-lazy -boneless -bonelessly -bonelessness -bonelet -bonelike -Bonellia -bonemeal -bone-piercing -boner -bone-rotting -boners -bones -boneset -bonesets -bonesetter -bone-setter -bonesetting -boneshaker -boneshave -boneshaw -Bonesteel -bonetail -bonete -bone-tired -bonetta -Boneville -bone-weary -bone-white -bonewood -bonework -bonewort -bone-wort -Bonfield -bonfire -bonfires -bonfire's -bong -bongar -bonged -bonging -Bongo -bongoes -bongoist -bongoists -bongos -bongrace -bongs -Bonham -Bonheur -bonheur-du-jour -bonheurs-du-jour -Bonhoeffer -bonhomie -bonhomies -Bonhomme -bonhommie -bonhomous -bonhomously -Boni -bony -boniata -bonier -boniest -Boniface -bonifaces -Bonifay -bonify -bonification -bonyfish -boniform -bonilass -Bonilla -Bonina -Bonine -boniness -boninesses -boning -Bonington -boninite -Bonis -bonism -Bonita -bonytail -bonitary -bonitarian -bonitas -bonity -bonito -bonitoes -bonitos -bonjour -bonk -bonked -bonkers -bonking -bonks -Bonlee -Bonn -Bonnard -Bonnaz -Bonne -Bonneau -Bonnee -Bonney -Bonnell -Bonner -Bonnerdale -bonnering -Bonnes -Bonnesbosq -Bonnet -bonneted -bonneter -Bonneterre -bonnethead -bonnet-headed -bonnetiere -bonnetieres -bonneting -bonnetless -bonnetlike -bonnetman -bonnetmen -bonnets -Bonnette -Bonneville -Bonni -Bonny -bonnibel -Bonnibelle -Bonnice -bonnyclabber -bonny-clabber -Bonnie -bonnier -bonniest -Bonnieville -bonnyish -bonnily -Bonnyman -bonniness -bonnive -bonnyvis -bonnne -bonnnes -bonnock -bonnocks -Bonns -bonnwis -Bono -Bononcini -Bononian -bonorum -bonos -Bonpa -Bonpland -bons -bonsai -Bonsall -Bonsecour -bonsela -bonser -bonsoir -bonspell -bonspells -bonspiel -bonspiels -bontebok -bonteboks -bontebuck -bontebucks -bontee -Bontempelli -bontequagga -Bontoc -Bontocs -Bontok -Bontoks -bon-ton -Bonucci -bonum -bonus -bonuses -bonus's -bon-vivant -Bonwier -bonxie -bonze -bonzer -bonzery -bonzes -bonzian -boo -boob -boobed -boobery -booby -boobialla -boobyalla -boobie -boobies -boobyish -boobyism -boobily -boobing -boobish -boobishness -booby-trap -booby-trapped -booby-trapping -booboisie -booboo -boo-boo -boobook -booboos -boo-boos -boobs -bood -boodh -Boody -boodie -Boodin -boodle -boodled -boodledom -boodleism -boodleize -boodler -boodlers -boodles -boodling -booed -boof -boogaloo -boogeyman -boogeymen -booger -boogerman -boogers -boogy -boogie -boogied -boogies -boogiewoogie -boogie-woogie -boogying -boogyman -boogymen -boogum -boohoo -boohooed -boohooing -boohoos -booing -boojum -Book -bookable -bookbind -bookbinder -bookbindery -bookbinderies -bookbinders -bookbinding -bookboard -bookcase -book-case -bookcases -bookcase's -bookcraft -book-craft -bookdealer -bookdom -booked -bookend -bookends -Booker -bookery -bookers -bookfair -book-fed -book-fell -book-flat -bookfold -book-folder -bookful -bookfuls -bookholder -bookhood -booky -bookie -bookies -bookie's -bookiness -booking -bookings -bookish -bookishly -bookishness -bookism -bookit -bookkeep -bookkeeper -book-keeper -bookkeepers -bookkeeper's -bookkeeping -book-keeping -bookkeepings -bookkeeps -bookland -book-latin -booklear -book-learned -book-learning -bookless -booklet -booklets -booklet's -booklice -booklift -booklike -book-lined -bookling -booklists -booklore -book-lore -booklores -booklouse -booklover -book-loving -bookmaker -book-maker -bookmakers -bookmaking -bookmakings -Bookman -bookmark -bookmarker -bookmarks -book-match -bookmate -bookmen -book-minded -bookmobile -bookmobiles -bookmonger -bookplate -book-plate -bookplates -bookpress -bookrack -bookracks -book-read -bookrest -bookrests -bookroom -books -bookseller -booksellerish -booksellerism -booksellers -bookseller's -bookselling -book-sewer -book-sewing -bookshelf -bookshelfs -bookshelf's -bookshelves -bookshop -bookshops -booksy -bookstack -bookstall -bookstand -book-stealer -book-stitching -bookstore -bookstores -bookstore's -book-taught -bookways -book-ways -bookward -bookwards -book-wing -bookwise -book-wise -bookwork -book-work -bookworm -book-worm -bookworms -bookwright -bool -Boole -boolean -booleans -booley -booleys -booly -boolya -Boolian -boolies -boom -Booma -boomable -boomage -boomah -boom-and-bust -boomboat -boombox -boomboxes -boomdas -boomed -boom-ended -Boomer -boomerang -boomeranged -boomeranging -boomerangs -boomerang's -boomers -boomy -boomier -boomiest -boominess -booming -boomingly -boomkin -boomkins -boomless -boomlet -boomlets -boomorah -booms -boomslang -boomslange -boomster -boomtown -boomtowns -boomtown's -boon -boondock -boondocker -boondocks -boondoggle -boondoggled -boondoggler -boondogglers -boondoggles -boondoggling -Boone -Booneville -boonfellow -boong -boongary -Boony -Boonie -boonies -boonk -boonless -boons -Boonsboro -Boonton -Boonville -Boophilus -boopic -boopis -Boor -boordly -Boorer -boorga -boorish -boorishly -boorishness -Boorman -boors -boor's -boort -boos -boose -boosy -boosies -boost -boosted -booster -boosterism -boosters -boosting -boosts -Boot -bootable -bootblack -bootblacks -bootboy -boot-cleaning -Boote -booted -bootee -bootees -booter -bootery -booteries -Bootes -bootful -Booth -boothage -boothale -boot-hale -Boothe -bootheel -boother -boothes -Boothia -Boothian -boothite -Boothman -bootholder -boothose -booths -Boothville -booty -Bootid -bootie -bootied -booties -bootikin -bootikins -bootyless -booting -bootjack -bootjacks -bootlace -bootlaces -Bootle -bootle-blade -bootleg -boot-leg -bootleger -bootlegged -bootlegger -bootleggers -bootlegger's -bootlegging -bootlegs -bootless -bootlessly -bootlessness -bootlick -bootlicked -bootlicker -bootlickers -bootlicking -bootlicks -bootloader -bootmaker -bootmaking -bootman -bootprint -Boots -bootstrap -bootstrapped -bootstrapping -bootstraps -bootstrap's -boottop -boottopping -boot-topping -Booz -Booze -boozed -boozehound -boozer -boozers -boozes -booze-up -boozy -boozier -booziest -boozify -boozily -booziness -boozing -Bop -Bopeep -Bo-peep -Bophuthatswana -bopyrid -Bopyridae -bopyridian -Bopyrus -Bopp -bopped -bopper -boppers -bopping -boppist -bops -bopster -BOQ -Boqueron -BOR -Bor' -bor- -bor. -Bora -borable -boraces -borachio -boracic -boraciferous -boracite -boracites -boracium -boracous -borage -borages -Boraginaceae -boraginaceous -boragineous -Borago -Borah -Borak -boral -borals -Boran -Borana -borane -boranes -Borani -boras -borasca -borasco -borasque -borasqueborate -Borassus -borate -borated -borates -borating -borax -boraxes -borazon -borazons -Borboridae -borborygm -borborygmatic -borborygmi -borborygmic -borborygmies -borborygmus -Borborus -Borchers -Borchert -Bord -Borda -bordage -bord-and-pillar -bordar -bordarius -Bordeaux -bordel -Bordelais -Bordelaise -bordello -bordellos -bordello's -Bordelonville -bordels -Borden -Bordentown -Border -bordereau -bordereaux -bordered -borderer -borderers -Borderies -bordering -borderings -borderism -borderland -border-land -borderlander -borderlands -borderland's -borderless -borderlight -borderline -borderlines -bordermark -borders -Borderside -Bordet -Bordy -Bordie -Bordiuk -bord-land -bord-lode -bordman -bordrag -bordrage -bordroom -Bordulac -bordun -bordure -bordured -bordures -Bore -boreable -boread -Boreadae -Boreades -Boreal -Borealis -borean -Boreas -borecole -borecoles -bored -boredness -boredom -boredoms -boree -boreen -boreens -boregat -borehole -boreholes -Boreiad -boreism -Borek -Borel -borele -Borer -borers -Bores -boresight -boresome -boresomely -boresomeness -Boreum -Boreus -Borg -Borger -Borgerhout -Borges -Borgeson -borgh -borghalpenny -Borghese -borghi -Borghild -Borgholm -Borgia -Borglum -borh -Bori -boric -borickite -borid -boride -borides -boryl -borine -Boring -boringly -boringness -borings -Borinqueno -Boris -borish -Borislav -borism -borith -bority -borities -borize -Bork -Borlase -borley -Borlow -Borman -Born -bornan -bornane -borne -Bornean -Borneo -borneol -borneols -Bornholm -Bornie -bornyl -borning -bornite -bornites -bornitic -Bornstein -Bornu -Boro -boro- -Borocaine -borocalcite -borocarbide -borocitrate -Borodankov -Borodin -Borodino -borofluohydric -borofluoric -borofluoride -borofluorin -boroglycerate -boroglyceride -boroglycerine -borohydride -borolanite -boron -boronatrocalcite -Borongan -Boronia -boronic -borons -borophenylic -borophenol -Bororo -Bororoan -borosalicylate -borosalicylic -borosilicate -borosilicic -Borotno -borotungstate -borotungstic -borough -Borough-english -borough-holder -boroughlet -borough-man -boroughmaster -borough-master -boroughmonger -boroughmongery -boroughmongering -borough-reeve -boroughs -boroughship -borough-town -boroughwide -borowolframic -borracha -borrachio -Borras -borrasca -borrel -Borrelia -Borrell -Borrelomycetaceae -Borreri -Borreria -Borrichia -Borries -Borroff -Borromean -Borromini -Borroughs -Borrovian -Borrow -borrowable -borrowed -borrower -borrowers -borrowing -borrows -Bors -Borsalino -borsch -borsches -borscht -borschts -borsholder -borsht -borshts -borstal -borstall -borstals -Borszcz -bort -borty -Bortman -borts -bortsch -Bortz -bortzes -Boru -Boruca -Borup -Borussian -borwort -Borzicactus -borzoi -borzois -BOS -Bosanquet -Bosc -boscage -boscages -Bosch -boschbok -boschboks -Boschneger -boschvark -boschveld -Boscobel -Boscovich -Bose -bosey -Boselaphus -Boser -bosh -Boshas -boshbok -boshboks -bosher -boshes -boshvark -boshvarks -BOSIX -Bosjesman -bosk -boskage -boskages -bosker -bosket -boskets -bosky -boskier -boskiest -boskiness -Boskop -boskopoid -bosks -Bosler -bosn -bos'n -bo's'n -Bosnia -Bosniac -Bosniak -Bosnian -Bosnisch -bosom -bosom-breathing -bosom-deep -bosomed -bosomer -bosom-felt -bosom-folded -bosomy -bosominess -bosoming -bosoms -bosom's -bosom-stricken -boson -Bosone -bosonic -bosons -Bosphorus -Bosporan -Bosporanic -Bosporian -Bosporus -Bosque -bosques -bosquet -bosquets -BOSS -bossa -bossage -bossboy -bossdom -bossdoms -bossed -bosseyed -boss-eyed -bosselated -bosselation -bosser -bosses -bosset -bossy -bossier -bossies -bossiest -bossily -bossiness -bossing -bossism -bossisms -bosslet -Bosson -bossship -Bossuet -bostal -bostangi -bostanji -bosthoon -Bostic -Boston -Bostonese -Bostonian -bostonians -bostonian's -bostonite -bostons -Bostow -bostrychid -Bostrychidae -bostrychoid -bostrychoidal -bostryx -Bostwick -bosun -bosuns -Boswall -Boswell -Boswellia -Boswellian -Boswelliana -Boswellism -Boswellize -boswellized -boswellizing -Bosworth -BOT -bot. -bota -botan -botany -botanic -botanica -botanical -botanically -botanicas -botanics -botanies -botanise -botanised -botaniser -botanises -botanising -botanist -botanists -botanist's -botanize -botanized -botanizer -botanizes -botanizing -botano- -botanomancy -botanophile -botanophilist -botargo -botargos -botas -Botaurinae -Botaurus -botch -botched -botchedly -botched-up -botcher -botchery -botcheries -botcherly -botchers -botches -botchy -botchier -botchiest -botchily -botchiness -botching -botchka -botchwork -bote -Botein -botel -boteler -botella -botels -boterol -boteroll -Botes -botete -botfly -botflies -both -Botha -Bothe -Bothell -bother -botheration -bothered -botherer -botherheaded -bothering -botherment -bothers -bothersome -bothersomely -bothersomeness -both-handed -both-handedness -both-hands -bothy -bothie -bothies -bothlike -Bothnia -Bothnian -Bothnic -bothrenchyma -bothria -bothridia -bothridium -bothridiums -Bothriocephalus -Bothriocidaris -Bothriolepis -bothrium -bothriums -Bothrodendron -bothroi -bothropic -Bothrops -bothros -bothsided -bothsidedness -boththridia -bothway -Bothwell -boti -Botkin -Botkins -botling -Botnick -Botocudo -botoyan -botone -botonee -botong -botony -botonn -botonnee -botonny -bo-tree -botry -Botrychium -botrycymose -Botrydium -botrylle -Botryllidae -Botryllus -botryogen -botryoid -botryoidal -botryoidally -botryolite -Botryomyces -botryomycoma -botryomycosis -botryomycotic -Botryopteriaceae -botryopterid -Botryopteris -botryose -botryotherapy -Botrytis -botrytises -bots -Botsares -Botsford -Botswana -bott -Bottali -botte -bottega -bottegas -botteghe -bottekin -Bottger -Botti -Botticelli -Botticellian -bottier -bottine -Bottineau -bottle -bottle-bellied -bottlebird -bottle-blowing -bottlebrush -bottle-brush -bottle-butted -bottle-capping -bottle-carrying -bottle-cleaning -bottle-corking -bottled -bottle-fed -bottle-feed -bottle-filling -bottleflower -bottleful -bottlefuls -bottle-green -bottlehead -bottle-head -bottleholder -bottle-holder -bottlelike -bottlemaker -bottlemaking -bottleman -bottleneck -bottlenecks -bottleneck's -bottlenest -bottlenose -bottle-nose -bottle-nosed -bottle-o -bottler -bottle-rinsing -bottlers -bottles -bottlesful -bottle-shaped -bottle-soaking -bottle-sterilizing -bottlestone -bottle-tailed -bottle-tight -bottle-washer -bottle-washing -bottling -bottom -bottomchrome -bottomed -bottomer -bottomers -bottoming -bottomland -bottomless -bottomlessly -bottomlessness -bottommost -bottomry -bottomried -bottomries -bottomrying -bottoms -bottom-set -bottonhook -Bottrop -botts -bottstick -bottu -botuliform -botulin -botulinal -botulins -botulinum -botulinus -botulinuses -botulism -botulisms -botulismus -Botvinnik -Botzow -Bouak -Bouake -Bouar -boubas -boubou -boubous -boucan -bouch -bouchal -bouchaleen -Bouchard -boucharde -Bouche -bouchee -bouchees -Boucher -boucherism -boucherize -Bouches-du-Rh -bouchette -Bouchier -bouchon -bouchons -Boucicault -Bouckville -boucl -boucle -boucles -boud -bouderie -boudeuse -Boudicca -boudin -boudoir -boudoiresque -boudoirs -Boudreaux -bouet -Boufarik -bouffage -bouffancy -bouffant -bouffante -bouffants -bouffe -bouffes -bouffon -Bougainvillaea -bougainvillaeas -Bougainville -Bougainvillea -Bougainvillia -Bougainvilliidae -bougar -bouge -bougee -bougeron -bouget -Bough -boughed -boughy -boughless -boughpot -bough-pot -boughpots -boughs -bough's -bought -boughten -bougie -bougies -Bouguer -Bouguereau -bouillabaisse -bouilli -bouillon -bouillone -bouillons -bouk -boukit -boul -Boulanger -boulangerite -Boulangism -Boulangist -Boulder -bouldered -boulderhead -bouldery -bouldering -boulders -boulder's -boulder-stone -boulder-strewn -Bouldon -Boule -Boule-de-suif -Bouley -boules -bouleuteria -bouleuterion -boulevard -boulevardier -boulevardiers -boulevardize -boulevards -boulevard's -bouleverse -bouleversement -boulework -Boulez -boulimy -boulimia -boulle -boulles -boullework -Boulogne -Boulogne-Billancourt -Boulogne-sur-Mer -Boulogne-sur-Seine -Boult -boultel -boultell -boulter -boulterer -Boumdienne -boun -bounce -bounceable -bounceably -bounceback -bounced -bouncer -bouncers -bounces -bouncy -bouncier -bounciest -bouncily -bounciness -bouncing -bouncingly -Bound -boundable -boundary -boundaries -boundary-marking -boundary's -Boundbrook -bounded -boundedly -boundedness -bounden -bounder -bounderish -bounderishly -bounders -bounding -boundingly -boundless -boundlessly -boundlessness -boundlessnesses -boundly -boundness -Bounds -boundure -bounteous -bounteously -bounteousness -Bounty -bountied -bounties -bounty-fed -Bountiful -bountifully -bountifulness -bountihead -bountyless -bountiousness -bounty's -bountith -bountree -Bouphonia -bouquet -bouquetiere -bouquetin -bouquets -bouquet's -bouquiniste -bour -bourage -bourasque -Bourbaki -Bourbon -Bourbonesque -Bourbonian -Bourbonic -Bourbonism -Bourbonist -bourbonize -Bourbonnais -bourbons -bourd -bourder -bourdis -bourdon -bourdons -bourette -Bourg -bourgade -Bourgeois -bourgeoise -bourgeoises -bourgeoisie -bourgeoisies -bourgeoisify -bourgeoisitic -bourgeon -bourgeoned -bourgeoning -bourgeons -Bourges -Bourget -Bourgogne -bourgs -Bourguiba -bourguignonne -Bourignian -Bourignianism -Bourignianist -Bourignonism -Bourignonist -Bourke -bourkha -bourlaw -Bourn -Bourne -Bournemouth -bournes -Bourneville -bournless -bournonite -bournous -bourns -bourock -Bourout -Bourque -bourr -bourran -bourrasque -bourre -bourreau -bourree -bourrees -bourrelet -bourride -bourrides -Bourse -bourses -Boursin -bourtree -bourtrees -Bouse -boused -bouser -bouses -bousy -bousing -bousouki -bousoukia -bousoukis -Boussingault -Boussingaultia -boussingaultite -boustrophedon -boustrophedonic -bout -boutade -boutefeu -boutel -boutell -Bouteloua -bouteria -bouteselle -boutylka -boutique -boutiques -Boutis -bouto -Bouton -boutonniere -boutonnieres -boutons -boutre -bouts -bout's -bouts-rimes -Boutte -Boutwell -Bouvard -Bouvardia -bouvier -bouviers -Bouvines -bouw -bouzouki -bouzoukia -bouzoukis -Bouzoun -Bovard -bovarism -bovarysm -bovarist -bovaristic -bovate -Bove -Bovey -bovenland -Bovensmilde -Bovet -Bovgazk -bovicide -boviculture -bovid -Bovidae -bovids -boviform -Bovill -Bovina -bovine -bovinely -bovines -bovinity -bovinities -Bovista -bovld -bovoid -bovovaccination -bovovaccine -Bovril -bovver -Bow -bowable -bowback -bow-back -bow-backed -bow-beaked -bow-bearer -Bow-bell -Bowbells -bow-bending -bowbent -bowboy -bow-compass -Bowden -Bowdichia -bow-dye -bow-dyer -Bowditch -Bowdle -bowdlerisation -bowdlerise -bowdlerised -bowdlerising -bowdlerism -bowdlerization -bowdlerizations -bowdlerize -bowdlerized -bowdlerizer -bowdlerizes -bowdlerizing -Bowdoin -Bowdoinham -Bowdon -bow-draught -bowdrill -Bowe -bowed -bowed-down -bowedness -bowel -boweled -boweling -Bowell -bowelled -bowelless -bowellike -bowelling -bowels -bowel's -Bowen -bowenite -Bower -bowerbird -bower-bird -bowered -Bowery -boweries -Boweryish -bowering -bowerlet -bowerly -bowerlike -bowermay -bowermaiden -Bowerman -Bowers -Bowerston -Bowersville -bowerwoman -Bowes -bowess -bowet -bowfin -bowfins -bowfront -bowge -bowgrace -bow-hand -bowhead -bowheads -bow-houghd -bowyang -bowyangs -Bowie -bowieful -bowie-knife -Bowyer -bowyers -bowing -bowingly -bowings -bow-iron -bowk -bowkail -bowker -bowknot -bowknots -bowl -bowla -bowlder -bowlderhead -bowldery -bowldering -bowlders -Bowlds -bowle -bowled -bowleg -bowlegged -bow-legged -bowleggedness -Bowlegs -Bowler -bowlers -Bowles -bowless -bow-less -bowlful -bowlfuls -bowly -bowlike -bowlin -bowline -bowlines -bowline's -bowling -bowlings -bowllike -bowlmaker -bowls -bowl-shaped -Bowlus -bowmaker -bowmaking -Bowman -Bowmansdale -Bowmanstown -Bowmansville -bowmen -bown -Bowne -bow-necked -bow-net -bowpin -bowpot -bowpots -Bowra -Bowrah -bowralite -Bowring -bows -bowsaw -bowse -bowsed -bowser -bowsery -bowses -bow-shaped -bowshot -bowshots -bowsie -bowsing -bowsman -bowsprit -bowsprits -bowssen -bowstaff -bowstave -bow-street -bowstring -bow-string -bowstringed -bowstringing -bowstrings -bowstring's -bowstrung -bowtel -bowtell -bowtie -bow-window -bow-windowed -bowwoman -bowwood -bowwort -bowwow -bow-wow -bowwowed -bowwows -Box -boxball -boxberry -boxberries -boxboard -boxboards -box-bordered -box-branding -boxbush -box-calf -boxcar -boxcars -boxcar's -box-cleating -box-covering -boxed -box-edged -boxed-in -Boxelder -boxen -Boxer -Boxerism -boxer-off -boxers -boxer-up -boxes -boxfish -boxfishes -Boxford -boxful -boxfuls -boxhaul -box-haul -boxhauled -boxhauling -boxhauls -boxhead -boxholder -Boxholm -boxy -boxiana -boxier -boxiest -boxiness -boxinesses -boxing -boxing-day -boxing-in -boxings -boxkeeper -box-leaved -boxlike -box-locking -boxmaker -boxmaking -boxman -box-nailing -box-office -box-plaited -boxroom -box-shaped -box-strapping -boxthorn -boxthorns -boxty -boxtop -boxtops -boxtop's -boxtree -box-tree -box-trimming -box-turning -boxwallah -boxwood -boxwoods -boxwork -Boz -boza -bozal -Bozcaada -Bozeman -Bozen -bozine -Bozman -bozo -Bozoo -bozos -Bozovich -Bozrah -Bozuwa -Bozzaris -bozze -bozzetto -BP -bp. -BPA -BPC -BPDPA -BPE -BPetE -BPH -BPharm -BPhil -BPI -BPOC -BPOE -BPPS -BPS -BPSS -bpt -BR -Br. -Bra -Braasch -braata -brab -brabagious -Brabancon -Brabant -Brabanter -Brabantine -Brabazon -brabble -brabbled -brabblement -brabbler -brabblers -brabbles -brabbling -brabblingly -Brabejum -Braca -bracae -braccae -braccate -Bracci -braccia -bracciale -braccianite -braccio -Brace -braced -Bracey -bracelet -braceleted -bracelets -bracelet's -bracer -bracery -bracero -braceros -bracers -braces -Braceville -brach -brache -Brachelytra -brachelytrous -bracherer -brachering -braches -brachet -brachets -brachy- -brachia -brachial -brachialgia -brachialis -brachials -Brachiata -brachiate -brachiated -brachiating -brachiation -brachiator -brachyaxis -brachycardia -brachycatalectic -brachycephal -brachycephales -brachycephali -brachycephaly -brachycephalic -brachycephalies -brachycephalism -brachycephalization -brachycephalize -brachycephalous -Brachycera -brachyceral -brachyceric -brachycerous -brachychronic -brachycnemic -Brachycome -brachycrany -brachycranial -brachycranic -brachydactyl -brachydactyly -brachydactylia -brachydactylic -brachydactylism -brachydactylous -brachydiagonal -brachydodrome -brachydodromous -brachydomal -brachydomatic -brachydome -brachydont -brachydontism -brachyfacial -brachiferous -brachigerous -brachyglossal -brachygnathia -brachygnathism -brachygnathous -brachygrapher -brachygraphy -brachygraphic -brachygraphical -brachyhieric -brachylogy -brachylogies -brachymetropia -brachymetropic -Brachinus -brachio- -brachiocephalic -brachio-cephalic -brachiocyllosis -brachiocrural -brachiocubital -brachiofacial -brachiofaciolingual -brachioganoid -Brachioganoidei -brachiolaria -brachiolarian -brachiopod -Brachiopoda -brachiopode -brachiopodist -brachiopodous -brachioradial -brachioradialis -brachiorrhachidian -brachiorrheuma -brachiosaur -Brachiosaurus -brachiostrophosis -brachiotomy -Brachyoura -brachyphalangia -Brachyphyllum -brachypinacoid -brachypinacoidal -brachypyramid -brachypleural -brachypnea -brachypodine -brachypodous -brachyprism -brachyprosopic -brachypterous -brachyrrhinia -brachysclereid -brachyskelic -brachysm -brachystaphylic -Brachystegia -brachisto- -brachistocephali -brachistocephaly -brachistocephalic -brachistocephalous -brachistochrone -brachystochrone -brachistochronic -brachistochronous -Brachystomata -brachystomatous -brachystomous -brachytic -brachytypous -brachytmema -brachium -Brachyura -brachyural -brachyuran -brachyuranic -brachyure -brachyurous -Brachyurus -brachman -brachs -brachtmema -bracing -bracingly -bracingness -bracings -braciola -braciolas -braciole -bracioles -brack -brackebuschite -bracked -Brackely -bracken -brackened -Brackenridge -brackens -bracker -bracket -bracketed -bracketing -brackets -Brackett -bracketted -Brackettville -bracketwise -bracky -bracking -brackish -brackishness -brackmard -Brackney -Bracknell -Bracon -braconid -Braconidae -braconids -braconniere -bracozzo -bract -bractea -bracteal -bracteate -bracted -bracteiform -bracteolate -bracteole -bracteose -bractless -bractlet -bractlets -bracts -Brad -Bradan -bradawl -bradawls -Bradbury -Bradburya -bradded -bradding -Braddyville -Braddock -Brade -Braden -bradenhead -Bradenton -Bradenville -Bradeord -Brader -Bradford -Bradfordsville -Brady -brady- -bradyacousia -bradyauxesis -bradyauxetic -bradyauxetically -bradycardia -bradycardic -bradycauma -bradycinesia -bradycrotic -bradydactylia -bradyesthesia -bradyglossia -bradykinesia -bradykinesis -bradykinetic -bradykinin -bradylalia -bradylexia -bradylogia -bradynosus -bradypepsy -bradypepsia -bradypeptic -bradyphagia -bradyphasia -bradyphemia -bradyphrasia -bradyphrenia -bradypnea -bradypnoea -bradypod -bradypode -Bradypodidae -bradypodoid -Bradypus -bradyseism -bradyseismal -bradyseismic -bradyseismical -bradyseismism -bradyspermatism -bradysphygmia -bradystalsis -bradyteleocinesia -bradyteleokinesis -bradytely -bradytelic -bradytocia -bradytrophic -bradyuria -Bradyville -Bradlee -Bradley -Bradleianism -Bradleigh -Bradleyville -Bradly -bradmaker -Bradman -Bradney -Bradner -bradoon -bradoons -brads -Bradshaw -Bradski -bradsot -Bradstreet -Bradway -Bradwell -brae -braeface -braehead -braeman -braes -brae's -braeside -Braeunig -Brag -Braga -bragas -Bragdon -Brage -brager -Bragg -braggadocian -braggadocianism -Braggadocio -braggadocios -braggardism -braggart -braggartism -braggartly -braggartry -braggarts -braggat -bragged -bragger -braggery -braggers -braggest -bragget -braggy -braggier -braggiest -bragging -braggingly -braggish -braggishly -braggite -braggle -Braggs -Bragi -bragite -bragless -bragly -bragozzo -brags -braguette -bragwort -Braham -Brahe -Brahear -Brahm -Brahma -brahmachari -Brahmahood -Brahmaic -Brahmajnana -Brahmaloka -Brahman -Brahmana -Brahmanaspati -Brahmanda -Brahmanee -Brahmaness -Brahmanhood -Brahmani -Brahmany -Brahmanic -Brahmanical -Brahmanis -Brahmanism -Brahmanist -Brahmanistic -brahmanists -Brahmanize -Brahmans -brahmapootra -Brahmaputra -brahmas -Brahmi -Brahmic -Brahmin -brahminee -Brahminic -Brahminical -Brahminism -Brahminist -brahminists -Brahmins -brahmism -Brahmoism -Brahms -Brahmsian -Brahmsite -Brahui -Bray -braid -braided -braider -braiders -braiding -braidings -Braidism -Braidist -braids -Braidwood -braye -brayed -brayer -brayera -brayerin -brayers -braies -brayette -braying -brail -Braila -brailed -Brayley -brailing -Braille -Brailled -brailler -brailles -Braillewriter -Brailling -Braillist -Brailowsky -brails -Braymer -brain -brainache -Brainard -Braynard -Brainardsville -brain-begot -brain-born -brain-breaking -brain-bred -braincap -braincase -brainchild -brain-child -brainchildren -brainchild's -brain-cracked -braincraft -brain-crazed -brain-crumpled -brain-damaged -brained -brainer -Brainerd -brainfag -brain-fevered -brain-fretting -brainge -brainy -brainier -brainiest -brainily -braininess -braining -brain-injured -brainish -brainless -brainlessly -brainlessness -brainlike -brainpan -brainpans -brainpower -brain-purging -brains -brainsick -brainsickly -brainsickness -brain-smoking -brain-spattering -brain-spun -brainstem -brainstems -brainstem's -brainstone -brainstorm -brainstormer -brainstorming -brainstorms -brainstorm's -brain-strong -brainteaser -brain-teaser -brainteasers -brain-tire -Braintree -brain-trust -brainward -brainwash -brain-wash -brainwashed -brainwasher -brainwashers -brainwashes -brainwashing -brain-washing -brainwashjng -brainwater -brainwave -brainwood -brainwork -brainworker -braird -brairded -brairding -braireau -brairo -brays -braise -braised -braises -braising -braystone -Braithwaite -Brayton -braize -braizes -brake -brakeage -brakeages -braked -brakehand -brakehead -brakeless -brakeload -brakemaker -brakemaking -brakeman -brakemen -braker -brakeroot -brakes -brakesman -brakesmen -brake-testing -brake-van -braky -brakie -brakier -brakiest -braking -Brakpan -Brale -braless -Bram -Bramah -Braman -Bramante -Bramantesque -Bramantip -bramble -brambleberry -brambleberries -bramblebush -brambled -brambles -bramble's -brambly -bramblier -brambliest -brambling -brambrack -brame -Bramia -Bramley -Bramwell -Bran -Brana -Branca -brancard -brancardier -branch -branchage -branch-bearing -branch-building -branch-charmed -branch-climber -Branchdale -branched -branchedness -Branchellion -branch-embellished -brancher -branchery -branches -branchful -branchi -branchy -branchia -branchiae -branchial -Branchiata -branchiate -branchicolous -branchier -branchiest -branchiferous -branchiform -branchihyal -branchiness -branching -branchings -branchio- -Branchiobdella -branchiocardiac -branchiogenous -branchiomere -branchiomeric -branchiomerism -branchiopallial -branchiopneustic -branchiopod -Branchiopoda -branchiopodan -branchiopodous -branchiopoo -Branchiopulmonata -branchiopulmonate -branchiosaur -Branchiosauria -branchiosaurian -Branchiosaurus -branchiostegal -branchiostegan -branchiostege -Branchiostegidae -branchiostegite -branchiostegous -Branchiostoma -branchiostomid -Branchiostomidae -branchiostomous -Branchipodidae -Branchipus -branchireme -Branchiura -branchiurous -Branchland -branchless -branchlet -branchlike -branchling -branchman -Branchport -branch-rent -branchstand -branch-strewn -Branchton -Branchus -Branchville -branchway -Brancusi -Brand -brandade -Brandais -Brandamore -Brande -Brandea -branded -bran-deer -Brandeis -Branden -Brandenburg -Brandenburger -brandenburgh -brandenburgs -Brander -brandering -branders -Brandes -brand-goose -Brandi -Brandy -brandyball -brandy-bottle -brandy-burnt -Brandice -Brandie -brandied -brandies -brandy-faced -brandify -brandying -brandyman -Brandyn -branding -brandy-pawnee -brandiron -Brandise -brandish -brandished -brandisher -brandishers -brandishes -brandishing -brandisite -Brandywine -brandle -brandless -brandling -brand-mark -brand-new -brand-newness -Brando -Brandon -Brandonville -brandreth -brandrith -brands -brandsolder -Brandsville -Brandt -Brandtr -Brandwein -Branen -Branford -Branger -brangle -brangled -branglement -brangler -brangling -Brangus -Branguses -Branham -branial -Braniff -brank -branky -brankie -brankier -brankiest -brank-new -branks -brankursine -brank-ursine -branle -branles -branned -branner -brannerite -branners -bran-new -branny -brannier -branniest -brannigan -branniness -branning -Brannon -Brans -Branscum -Bransford -bransle -bransles -bransolder -Branson -Branstock -Brant -Branta -brantail -brantails -brantcorn -Brantford -brant-fox -Branting -Brantingham -brantle -Brantley -brantness -brants -Brantsford -Brantwood -branular -Branwen -Braque -braquemard -brarow -bras -bra's -Brasca -bras-dessus-bras-dessous -Braselton -brasen -Brasenia -brasero -braseros -brash -Brashear -brasher -brashes -brashest -brashy -brashier -brashiest -brashiness -brashly -brashness -Brasia -brasier -brasiers -Brasil -brasilein -brasilete -brasiletto -Brasilia -brasilin -brasilins -brasils -Brasov -brasque -brasqued -brasquing -Brass -brassage -brassages -brassard -brassards -brass-armed -brassart -brassarts -brassate -Brassavola -brass-bold -brassbound -brassbounder -brass-browed -brass-cheeked -brass-colored -brasse -brassed -brassey -brass-eyed -brasseys -brasser -brasserie -brasseries -brasses -brasset -brass-finishing -brass-fitted -brass-footed -brass-fronted -brass-handled -brass-headed -brass-hilted -brass-hooved -brassy -Brassia -brassic -Brassica -Brassicaceae -brassicaceous -brassicas -brassidic -brassie -brassier -brassiere -brassieres -brassies -brassiest -brassily -brassylic -brassiness -brassing -brassish -brasslike -brass-lined -brass-melting -brass-mounted -Brasso -brass-plated -brass-renting -brass-shapen -brass-smith -brass-tipped -Brasstown -brass-visaged -brassware -brasswork -brassworker -brass-working -brassworks -brast -Braswell -BRAT -bratchet -Brathwaite -Bratianu -bratina -Bratislava -bratling -brats -brat's -bratstva -bratstvo -brattach -Brattain -bratty -brattice -bratticed -bratticer -brattices -bratticing -brattie -brattier -brattiest -brattiness -brattish -brattishing -brattle -Brattleboro -brattled -brattles -brattling -Bratton -Bratwurst -Brauhaus -Brauhauser -braula -Braun -brauna -Brauneberger -Brauneria -Braunfels -braunite -braunites -Braunschweig -Braunschweiger -Braunstein -Brauronia -Brauronian -Brause -Brautlied -Brava -bravade -bravado -bravadoed -bravadoes -bravadoing -bravadoism -bravados -Bravar -bravas -brave -braved -bravehearted -brave-horsed -bravely -brave-looking -brave-minded -braveness -braver -bravery -braveries -bravers -braves -brave-sensed -brave-showing -brave-souled -brave-spirited -brave-spiritedness -bravest -bravi -Bravin -braving -bravish -bravissimo -bravo -bravoed -bravoes -bravoing -bravoite -bravos -bravura -bravuraish -bravuras -bravure -braw -brawer -brawest -brawl -brawled -Brawley -brawler -brawlers -brawly -brawlie -brawlier -brawliest -brawling -brawlingly -brawlis -brawlys -brawls -brawlsome -brawn -brawned -brawnedness -Brawner -brawny -brawnier -brawniest -brawnily -brawniness -brawns -braws -braxy -braxies -Braxton -Braz -Braz. -braza -brazas -braze -Brazeau -brazed -Brazee -braze-jointed -brazen -brazen-barking -brazen-browed -brazen-clawed -brazen-colored -brazened -brazenface -brazen-face -brazenfaced -brazen-faced -brazenfacedly -brazen-facedly -brazenfacedness -brazen-fisted -brazen-floored -brazen-footed -brazen-fronted -brazen-gated -brazen-headed -brazen-hilted -brazen-hoofed -brazen-imaged -brazening -brazen-leaved -brazenly -brazen-lunged -brazen-mailed -brazen-mouthed -brazenness -brazennesses -brazen-pointed -brazens -brazer -brazera -brazers -brazes -brazier -braziery -braziers -brazier's -Brazil -brazilein -brazilette -braziletto -Brazilian -brazilianite -brazilians -brazilin -brazilins -brazilite -Brazil-nut -brazils -brazilwood -brazing -Brazoria -Brazos -Brazzaville -BRC -BRCA -BRCS -BRE -Brea -breach -breached -breacher -breachers -breaches -breachful -breachy -breaching -bread -bread-and-butter -bread-baking -breadbasket -bread-basket -breadbaskets -breadberry -breadboard -breadboards -breadboard's -breadbox -breadboxes -breadbox's -bread-corn -bread-crumb -bread-crumbing -bread-cutting -breadearner -breadearning -bread-eating -breaded -breaden -bread-faced -breadfruit -bread-fruit -breadfruits -breading -breadless -breadlessness -breadline -bread-liner -breadmaker -breadmaking -breadman -breadness -breadnut -breadnuts -breadroot -breads -breadseller -breadstitch -bread-stitch -breadstuff -bread-stuff -breadstuffs -breadth -breadthen -breadthless -breadthriders -breadths -breadthways -breadthwise -bread-tree -breadwinner -bread-winner -breadwinners -breadwinner's -breadwinning -bread-wrapping -breaghe -break -break- -breakability -breakable -breakableness -breakables -breakably -breakage -breakages -breakaway -breakax -breakaxe -breakback -break-back -breakbone -breakbones -break-circuit -breakdown -break-down -breakdowns -breakdown's -breaker -breaker-down -breakerman -breakermen -breaker-off -breakers -breaker-up -break-even -breakfast -breakfasted -breakfaster -breakfasters -breakfasting -breakfastless -breakfasts -breakfront -break-front -breakfronts -break-in -breaking -breaking-in -breakings -breakless -breaklist -breakneck -break-neck -breakoff -break-off -breakout -breakouts -breakover -breakpoint -breakpoints -breakpoint's -break-promise -Breaks -breakshugh -breakstone -breakthrough -break-through -breakthroughes -breakthroughs -breakthrough's -breakup -break-up -breakups -breakwater -breakwaters -breakwater's -breakweather -breakwind -Bream -breamed -breaming -breams -Breana -Breanne -Brear -breards -breast -breastband -breastbeam -breast-beam -breast-beater -breast-beating -breast-board -breastbone -breastbones -breast-deep -Breasted -breaster -breastfast -breast-fed -breast-feed -breastfeeding -breast-feeding -breastful -breastheight -breast-high -breasthook -breast-hook -breastie -breasting -breastless -breastmark -breastpiece -breastpin -breastplate -breast-plate -breastplates -breastplough -breast-plough -breastplow -breastrail -breast-rending -breastrope -breasts -breaststroke -breaststroker -breaststrokes -breastsummer -breastweed -breast-wheel -breastwise -breastwood -breastwork -breastworks -breastwork's -breath -breathability -breathable -breathableness -breathalyse -Breathalyzer -breath-bereaving -breath-blown -breathe -breatheableness -breathed -breather -breathers -breathes -breathful -breath-giving -breathy -breathier -breathiest -breathily -breathiness -breathing -breathingly -Breathitt -breathless -breathlessly -breathlessness -breaths -breathseller -breath-stopping -breath-sucking -breath-tainted -breathtaking -breath-taking -breathtakingly -breba -Breban -Brebner -breccia -breccial -breccias -brecciate -brecciated -brecciating -brecciation -brecham -brechams -brechan -brechans -Brecher -Brechites -Brecht -Brechtel -brechtian -brecia -breck -brecken -Breckenridge -Breckinridge -Brecknockshire -Brecksville -Brecon -Breconshire -Bred -Breda -bredbergite -brede -bredes -bredestitch -bredi -bred-in-the-bone -bredstitch -Bree -Breech -breechblock -breechcloth -breechcloths -breechclout -breeched -breeches -breechesflower -breechesless -breeching -breechless -breechloader -breech-loader -breechloading -breech-loading -breech's -Breed -breedable -breedbate -Breeden -breeder -breeders -breedy -breediness -Breeding -breedings -breedling -breeds -Breedsville -breek -breekless -breeks -breekums -Breen -Breena -breenge -breenger -brees -Breese -Breesport -Breeze -breeze-borne -breezed -breeze-fanned -breezeful -breezeless -breeze-lifted -breezelike -breezes -breeze's -breeze-shaken -breeze-swept -breezeway -breezeways -Breezewood -breeze-wooing -breezy -breezier -breeziest -breezily -breeziness -breezing -Bregenz -Breger -bregma -bregmata -bregmate -bregmatic -brehon -brehonia -brehonship -brei -Brey -Breinigsville -breird -Breislak -breislakite -Breithablik -breithauptite -brekky -brekkle -brelan -brelaw -Brelje -breloque -brember -Bremble -breme -bremely -Bremen -bremeness -Bremer -Bremerhaven -Bremerton -Bremia -Bremond -Bremser -bremsstrahlung -Bren -Brena -Brenan -Brenda -Brendan -brended -Brendel -Brenden -brender -brendice -Brendin -Brendis -Brendon -Brengun -Brenham -Brenk -Brenn -Brenna -brennage -Brennan -Brennen -Brenner -Brennschluss -brens -Brent -Brentano -Brentford -Brenthis -brent-new -Brenton -brents -Brentt -Brentwood -Brenza -brephic -brepho- -br'er -brerd -brere -Bres -Brescia -Brescian -Bresee -Breshkovsky -Breskin -Breslau -Bress -bressomer -Bresson -bressummer -Brest -Bret -Bretagne -bretelle -bretesse -bret-full -breth -brethel -brethren -brethrenism -Breton -Bretonian -bretons -Bretschneideraceae -Brett -Bretta -brettice -Bretwalda -Bretwaldadom -Bretwaldaship -Bretz -breu- -Breuer -Breugel -Breughel -breunnerite -brev -breva -Brevard -breve -breves -brevet -brevetcy -brevetcies -brevete -breveted -breveting -brevets -brevetted -brevetting -brevi -brevi- -breviary -breviaries -breviate -breviature -brevicauda -brevicaudate -brevicipitid -Brevicipitidae -brevicomis -breviconic -brevier -breviers -brevifoliate -breviger -brevilingual -breviloquence -breviloquent -breviped -brevipen -brevipennate -breviradiate -brevirostral -brevirostrate -Brevirostrines -brevis -brevit -brevity -brevities -Brew -brewage -brewages -brewed -Brewer -brewery -breweries -brewery's -brewers -brewership -Brewerton -brewhouse -brewhouses -brewing -brewings -brewis -brewises -brewmaster -brews -brewst -Brewster -brewsterite -Brewton -Brezhnev -Brezin -BRG -BRI -bry- -Bria -Bryaceae -bryaceous -Bryales -Brian -Bryan -Briana -Bryana -Briand -Brianhead -Bryanism -Bryanite -Brianna -Brianne -Briano -Bryansk -Briant -Bryant -Bryanthus -Bryanty -Bryantown -Bryantsville -Bryantville -briar -briarberry -Briard -briards -Briarean -briared -Briareus -briar-hopper -briary -briarroot -briars -briar's -briarwood -bribability -bribable -bribe -bribeability -bribeable -bribed -bribe-devouring -bribee -bribees -bribe-free -bribegiver -bribegiving -bribeless -bribemonger -briber -bribery -briberies -bribers -bribes -bribetaker -bribetaking -bribeworthy -bribing -Bribri -bric-a-brac -bric-a-brackery -Brice -Bryce -Bryceland -Bricelyn -Briceville -Bryceville -brichen -brichette -Brick -brick-barred -brickbat -brickbats -brickbatted -brickbatting -brick-bound -brick-building -brick-built -brick-burning -brick-colored -brickcroft -brick-cutting -brick-drying -brick-dust -brick-earth -bricked -Brickeys -brickel -bricken -Bricker -brickfield -brick-field -brickfielder -brick-fronted -brick-grinding -brick-hemmed -brickhood -bricky -brickyard -brickier -brickiest -bricking -brickish -brickkiln -brick-kiln -bricklay -bricklayer -bricklayers -bricklayer's -bricklaying -bricklayings -brickle -brickleness -brickles -brickly -bricklike -brickliner -bricklining -brickmaker -brickmaking -brickmason -brick-nogged -brick-paved -brickred -brick-red -bricks -brickset -bricksetter -brick-testing -bricktimber -bricktop -brickwall -brick-walled -brickwise -brickwork -bricole -bricoles -brid -bridal -bridale -bridaler -bridally -bridals -bridalty -Bridalveil -Bride -bride-ale -bridebed -bridebowl -bridecake -bridechamber -bridecup -bride-cup -bridegod -bridegroom -bridegrooms -bridegroomship -bridehead -bridehood -bridehouse -Bridey -brideknot -bridelace -bride-lace -brideless -bridely -bridelike -bridelope -bridemaid -bridemaiden -bridemaidship -brideman -brides -bride's -brideship -bridesmaid -bridesmaiding -bridesmaids -bridesmaid's -bridesman -bridesmen -bridestake -bride-to-be -bridewain -brideweed -bridewell -bridewort -Bridge -bridgeable -bridgeables -bridgeboard -bridgebote -bridgebuilder -bridgebuilding -bridged -Bridgehampton -bridgehead -bridgeheads -bridgehead's -bridge-house -bridgekeeper -Bridgeland -bridgeless -bridgelike -bridgemaker -bridgemaking -bridgeman -bridgemaster -bridgemen -Bridgeport -bridgepot -Bridger -Bridges -Bridget -bridgetin -Bridgeton -Bridgetown -bridgetree -Bridgette -Bridgeville -bridgeway -bridgewall -bridgeward -bridgewards -Bridgewater -bridgework -bridgework's -Bridgid -bridging -bridgings -Bridgman -Bridgton -Bridgwater -Bridie -bridle -bridled -bridleless -bridleman -bridler -bridlers -bridles -bridlewise -bridle-wise -bridling -bridoon -bridoons -Bridport -Bridwell -Brie -BRIEF -briefcase -briefcases -briefcase's -briefed -briefer -briefers -briefest -briefing -briefings -briefing's -briefless -brieflessly -brieflessness -briefly -briefness -briefnesses -briefs -Brielle -Brien -Brier -brierberry -briered -Brierfield -briery -brierroot -briers -brierwood -bries -Brieta -Brietta -Brieux -brieve -Brig -Brig. -brigade -brigaded -brigades -brigade's -brigadier -brigadiers -brigadier's -brigadiership -brigading -brigalow -brigand -brigandage -brigander -brigandine -brigandish -brigandishly -brigandism -brigands -Brigantes -Brigantia -Brigantine -brigantines -brigatry -brigbote -Brigette -brigetty -Brigg -Briggs -Briggsdale -Briggsian -Briggsville -Brigham -Brighella -Brighid -Brighouse -Bright -bright-bloomed -bright-cheeked -bright-colored -bright-dyed -bright-eyed -Brighteyes -brighten -brightened -brightener -brighteners -brightening -brightens -brighter -brightest -bright-faced -bright-featured -bright-field -bright-flaming -bright-haired -bright-headed -bright-hued -brightish -bright-leaved -brightly -Brightman -bright-minded -brightness -brightnesses -Brighton -bright-robed -brights -brightsmith -brightsome -brightsomeness -bright-spotted -bright-striped -bright-studded -bright-tinted -Brightwaters -bright-witted -Brightwood -brightwork -Brigid -Brigida -Brigit -Brigitta -Brigitte -Brigittine -brigous -brig-rigged -brigs -brig's -brigsail -brigue -brigued -briguer -briguing -Brihaspati -brike -Brill -brillante -Brillat-Savarin -brilliance -brilliances -brilliancy -brilliancies -brilliandeer -Brilliant -brilliant-cut -brilliantine -brilliantined -brilliantly -brilliantness -brilliants -brilliantwise -brilliolette -Brillion -brillolette -Brillouin -brills -brim -brimborion -brimborium -Brimfield -brimful -brimfull -brimfully -brimfullness -brimfulness -Brimhall -briming -Brimley -brimless -brimly -brimmed -brimmer -brimmered -brimmering -brimmers -brimmimg -brimming -brimmingly -Brimo -brims -brimse -Brimson -brimstone -brimstones -brimstonewort -brimstony -brin -Bryn -Brina -Bryna -Brynathyn -brince -brinded -Brindell -Brindisi -Brindle -brindled -brindles -brindlish -bryndza -Brine -brine-bound -brine-cooler -brine-cooling -brined -brine-dripping -brinehouse -Briney -brineless -brineman -brine-pumping -briner -Bryner -briners -brines -brine-soaked -Bring -bringal -bringall -bringdown -bringed -bringela -bringer -bringers -bringer-up -bringeth -Bringhurst -bringing -bringing-up -brings -bringsel -Brynhild -Briny -brinie -brinier -brinies -briniest -brininess -brininesses -brining -brinish -brinishness -brinjal -brinjaree -brinjarry -brinjarries -brinjaul -Brinje -Brink -Brinkema -Brinkley -brinkless -Brinklow -brinkmanship -brinks -brinksmanship -Brinktown -Brynmawr -Brinn -Brynn -Brinna -Brynna -Brynne -brinny -Brinnon -brins -brinsell -Brinsmade -Brinson -brinston -Brynza -brio -brioche -brioches -bryogenin -briolet -briolette -briolettes -bryology -bryological -bryologies -bryologist -Brion -Bryon -Brioni -briony -bryony -Bryonia -bryonidin -brionies -bryonies -bryonin -brionine -Bryophyllum -Bryophyta -bryophyte -bryophytes -bryophytic -brios -Brioschi -Bryozoa -bryozoan -bryozoans -bryozoon -bryozoum -brique -briquet -briquets -briquette -briquetted -briquettes -briquetting -bris -brys- -brisa -brisance -brisances -brisant -Brisbane -Brisbin -Briscoe -briscola -brise -Briseis -brisement -brises -brise-soleil -Briseus -Brisingamen -brisk -brisked -brisken -briskened -briskening -brisker -briskest -brisket -briskets -brisky -brisking -briskish -briskly -briskness -brisknesses -brisks -brisling -brislings -Bryson -brisque -briss -brisses -Brissotin -Brissotine -brist -bristle -bristlebird -bristlecone -bristled -bristle-faced -bristle-grass -bristleless -bristlelike -bristlemouth -bristlemouths -bristle-pointed -bristler -bristles -bristle-stalked -bristletail -bristle-tailed -bristle-thighed -bristle-toothed -bristlewort -bristly -bristlier -bristliest -bristliness -bristling -Bristo -Bristol -bristols -Bristolville -Bristow -brisure -Brit -Brit. -Brita -Britain -britany -Britannia -Britannian -Britannic -Britannica -Britannically -Britannicus -britchel -britches -britchka -brite -Brith -brither -Brython -Brythonic -Briticism -British -Britisher -britishers -Britishhood -Britishism -British-israel -Britishly -Britishness -Britney -Britni -Brito-icelandic -Britomartis -Briton -Britoness -britons -briton's -brits -britska -britskas -Britt -Britta -Brittain -Brittan -Brittaney -Brittani -Brittany -Britte -Britten -Britteny -brittle -brittlebush -brittled -brittlely -brittleness -brittler -brittles -brittlest -brittle-star -brittlestem -brittlewood -brittlewort -brittly -brittling -Brittne -Brittnee -Brittney -Brittni -Britton -Brittonic -britts -britzka -britzkas -britzska -britzskas -Bryum -Brix -Brixey -Briza -Brize -Brizo -brizz -BRL -BRM -BRN -Brnaba -Brnaby -Brno -Bro -broach -broached -broacher -broachers -broaches -broaching -Broad -broadacre -Broadalbin -broad-arrow -broadax -broadaxe -broad-axe -broadaxes -broad-backed -broadband -broad-based -broad-beamed -Broadbent -broadbill -broad-billed -broad-bladed -broad-blown -broad-bodied -broad-bosomed -broad-bottomed -broad-boughed -broad-bowed -broad-breasted -Broadbrim -broad-brim -broad-brimmed -Broadbrook -broad-built -broadcast -broadcasted -broadcaster -broadcasters -broadcasting -broadcastings -broadcasts -broad-chested -broad-chinned -broadcloth -broadcloths -broad-crested -Broaddus -broad-eared -broad-eyed -broaden -broadened -broadener -broadeners -broadening -broadenings -broadens -broader -broadest -broad-faced -broad-flapped -Broadford -broad-fronted -broadgage -broad-gage -broad-gaged -broad-gauge -broad-gauged -broad-guage -broad-handed -broadhead -broad-headed -broadhearted -broad-hoofed -broadhorn -broad-horned -broadish -broad-jump -Broadlands -Broadleaf -broad-leafed -broad-leaved -broadleaves -broadly -broad-limbed -broadling -broadlings -broad-lipped -broad-listed -broadloom -broadlooms -broad-margined -broad-minded -broadmindedly -broad-mindedly -broad-mindedness -Broadmoor -broadmouth -broad-mouthed -broadness -broadnesses -broad-nosed -broadpiece -broad-piece -broad-ribbed -broad-roomed -Broadrun -Broads -broad-set -broadshare -broadsheet -broad-shouldered -broadside -broadsided -broadsider -broadsides -broadsiding -broad-skirted -broad-souled -broad-spectrum -broad-spoken -broadspread -broad-spreading -broad-sterned -broad-striped -broadsword -broadswords -broadtail -broad-tailed -broad-thighed -broadthroat -broad-tired -broad-toed -broad-toothed -Broadus -Broadview -Broadway -broad-wayed -Broadwayite -broadways -Broadwater -Broadwell -broad-wheeled -broadwife -broad-winged -broadwise -broadwives -brob -Brobdingnag -Brobdingnagian -Broca -brocade -brocaded -brocades -brocading -brocage -brocard -brocardic -brocatel -brocatelle -brocatello -brocatels -Broccio -broccoli -broccolis -broch -brochan -brochant -brochantite -broche -brochette -brochettes -brochidodromous -brocho -brochophony -brocht -brochure -brochures -brochure's -Brock -brockage -brockages -brocked -Brocken -Brocket -brockets -brock-faced -Brocky -Brockie -brockish -brockle -Brocklin -Brockport -brocks -Brockton -Brockway -Brockwell -brocoli -brocolis -Brocton -Brod -brodder -Broddy -Broddie -broddle -brodee -brodeglass -Brodehurst -brodekin -Brodench -brodequin -Broder -broderer -Broderic -Broderick -broderie -Brodeur -Brodhead -Brodheadsville -Brody -Brodiaea -brodyaga -brodyagi -Brodie -Brodnax -Brodsky -broeboe -Broeder -Broederbond -Broek -Broeker -brog -Brogan -brogans -brogger -broggerite -broggle -brogh -Brogle -Broglie -Brogue -brogued -brogueful -brogueneer -broguer -broguery -brogueries -brogues -broguing -broguish -Brohard -Brohman -broid -Broida -broiden -broider -broidered -broiderer -broideress -broidery -broideries -broidering -broiders -broigne -broil -broiled -broiler -broilery -broilers -broiling -broilingly -broils -Brok -brokage -brokages -Brokaw -broke -broken -broken-arched -broken-backed -broken-bellied -Brokenbow -broken-check -broken-down -broken-ended -broken-footed -broken-fortuned -broken-handed -broken-headed -brokenhearted -broken-hearted -brokenheartedly -broken-heartedly -brokenheartedness -broken-heartedness -broken-hipped -broken-hoofed -broken-in -broken-kneed -broken-legged -brokenly -broken-minded -broken-mouthed -brokenness -broken-nosed -broken-paced -broken-record -broken-shanked -broken-spirited -broken-winded -broken-winged -broker -brokerage -brokerages -brokered -brokeress -brokery -brokerly -brokers -brokership -brokes -broking -broletti -broletto -brolga -broll -brolly -brollies -brolly-hop -Brom -brom- -broma -bromacetanilide -bromacetate -bromacetic -bromacetone -bromal -bromalbumin -bromals -bromamide -bromargyrite -bromate -bromated -bromates -bromating -bromatium -bromatology -bromaurate -bromauric -brombenzamide -brombenzene -brombenzyl -Bromberg -bromcamphor -bromcresol -Brome -bromegrass -bromeigon -Bromeikon -Bromelia -Bromeliaceae -bromeliaceous -bromeliad -bromelin -bromelins -bromellite -bromeosin -bromes -bromethyl -bromethylene -Bromfield -bromgelatin -bromhydrate -bromhydric -bromhidrosis -Bromian -bromic -bromid -bromide -bromides -bromide's -bromidic -bromidically -bromidrosiphobia -bromidrosis -bromids -bromin -brominate -brominated -brominating -bromination -bromindigo -bromine -bromines -brominism -brominize -bromins -bromiodide -Bromios -bromyrite -bromisation -bromise -bromised -bromising -bromism -bromisms -bromite -Bromius -bromization -bromize -bromized -bromizer -bromizes -bromizing -Bromley -Bromleigh -bromlite -bromo -bromo- -bromoacetone -bromoaurate -bromoaurates -bromoauric -bromobenzene -bromobenzyl -bromocamphor -bromochloromethane -bromochlorophenol -bromocyanid -bromocyanidation -bromocyanide -bromocyanogen -bromocresol -bromodeoxyuridine -bromoethylene -bromoform -bromogelatin -bromohydrate -bromohydrin -bromoil -bromoiodid -bromoiodide -bromoiodism -bromoiodized -bromoketone -bromol -bromomania -bromomenorrhea -bromomethane -bromometry -bromometric -bromometrical -bromometrically -bromonaphthalene -bromophenol -bromopicrin -bromopikrin -bromopnea -bromoprotein -bromos -bromothymol -bromouracil -bromous -bromphenol -brompicrin -Bromsgrove -bromthymol -bromuret -Bromus -bromvoel -bromvogel -Bron -Bronaugh -bronc -bronch- -bronchadenitis -bronchi -bronchia -bronchial -bronchially -bronchiarctia -bronchiectasis -bronchiectatic -bronchiloquy -bronchio- -bronchiocele -bronchiocrisis -bronchiogenic -bronchiolar -bronchiole -bronchioles -bronchiole's -bronchioli -bronchiolitis -bronchiolus -bronchiospasm -bronchiostenosis -bronchitic -bronchitis -bronchium -broncho -broncho- -bronchoadenitis -bronchoalveolar -bronchoaspergillosis -bronchoblennorrhea -bronchobuster -bronchocavernous -bronchocele -bronchocephalitis -bronchoconstriction -bronchoconstrictor -bronchodilatation -bronchodilator -bronchoegophony -bronchoesophagoscopy -bronchogenic -bronchography -bronchographic -bronchohemorrhagia -broncholemmitis -broncholith -broncholithiasis -bronchomycosis -bronchomotor -bronchomucormycosis -bronchopathy -bronchophony -bronchophonic -bronchophthisis -bronchoplasty -bronchoplegia -bronchopleurisy -bronchopneumonia -bronchopneumonic -bronchopulmonary -bronchorrhagia -bronchorrhaphy -bronchorrhea -bronchos -bronchoscope -Bronchoscopy -bronchoscopic -bronchoscopically -bronchoscopist -bronchospasm -bronchostenosis -bronchostomy -bronchostomies -bronchotetany -bronchotyphoid -bronchotyphus -bronchotome -bronchotomy -bronchotomist -bronchotracheal -bronchovesicular -bronchus -bronco -broncobuster -broncobusters -broncobusting -broncos -broncs -Bronder -Bronez -brongniardite -Bronislaw -Bronk -Bronny -Bronnie -Bronson -Bronston -bronstrops -Bront -Bronte -Bronteana -bronteon -brontephobia -Brontes -Brontesque -bronteum -brontide -brontides -brontogram -brontograph -brontolite -brontolith -brontology -brontometer -brontophobia -Brontops -brontosaur -brontosauri -brontosaurs -Brontosaurus -brontosauruses -brontoscopy -brontothere -Brontotherium -Brontozoum -Bronwen -Bronwyn -Bronwood -Bronx -Bronxite -Bronxville -bronze -bronze-bearing -bronze-bound -bronze-brown -bronze-casting -bronze-clad -bronze-colored -bronze-covered -bronzed -bronze-foreheaded -bronze-gilt -bronze-gleaming -bronze-golden -bronze-haired -bronze-yellow -bronzelike -bronzen -bronze-purple -bronzer -bronzers -bronzes -bronze-shod -bronzesmith -bronzewing -bronze-winged -bronzy -bronzier -bronziest -bronzify -bronzine -bronzing -bronzings -Bronzino -bronzite -bronzitite -broo -brooch -brooched -brooches -brooching -brooch's -brood -brooded -brooder -brooders -broody -broodier -broodiest -broodily -broodiness -brooding -broodingly -broodless -broodlet -broodling -broodmare -broods -broodsac -Brook -brookable -Brookdale -Brooke -brooked -Brookeland -Brooker -Brookes -Brookesmith -Brookeville -Brookfield -brookflower -Brookhaven -Brookhouse -brooky -brookie -brookier -brookiest -Brooking -Brookings -brookite -brookites -Brookland -Brooklandville -Brooklawn -brookless -Brooklet -brooklets -brooklike -brooklime -Brooklin -Brooklyn -Brookline -Brooklynese -Brooklynite -Brookneal -Brookner -Brookport -Brooks -Brookshire -brookside -Brookston -Brooksville -Brookton -Brooktondale -Brookview -Brookville -brookweed -Brookwood -brool -broom -Broomall -broomball -broomballer -broombush -broomcorn -Broome -broomed -broomer -Broomfield -broomy -broomier -broomiest -brooming -broom-leaved -broommaker -broommaking -broomrape -broomroot -brooms -broom's -broom-sewing -broomshank -broomsquire -broomstaff -broomstick -broomsticks -broomstick's -broomstraw -broomtail -broomweed -broomwood -broomwort -broon -Broonzy -broos -broose -Brooten -broozled -broquery -broquineer -Bros -bros. -Brose -Broseley -broses -Brosy -Brosimum -Brosine -brosot -brosse -Brost -brot -brotan -brotany -brotchen -Brote -Broteas -brotel -broth -brothe -brothel -brotheler -brothellike -brothelry -brothels -brothel's -Brother -brothered -brother-german -brotherhood -brotherhoods -brother-in-arms -brothering -brother-in-law -brotherless -brotherly -brotherlike -brotherliness -brotherlinesses -brotherred -Brothers -brother's -brothership -brothers-in-law -Brotherson -Brotherton -brotherwort -brothy -brothier -brothiest -broths -brotocrystal -Brott -Brottman -Brotula -brotulid -Brotulidae -brotuliform -Broucek -brouette -brough -brougham -brougham-landaulet -broughams -brought -broughta -broughtas -Broughton -brouhaha -brouhahas -brouille -brouillon -Broun -Broussard -Broussonetia -Brout -Brouwer -brouze -brow -browache -Browallia -browband -browbands -browbeat -browbeaten -browbeater -browbeating -browbeats -brow-bent -browbound -browd -browden -Browder -browed -Brower -Browerville -browet -browis -browless -browman -Brown -brown-armed -brownback -brown-backed -brown-banded -brown-barreled -brown-bearded -brown-berried -brown-colored -brown-complexioned -Browne -browned -browned-off -brown-eyed -Brownell -browner -brownest -brown-faced -Brownfield -brown-green -brown-haired -brown-headed -browny -Brownian -Brownie -brownier -brownies -brownie's -browniest -browniness -Browning -Browningesque -brownish -brownish-yellow -brownishness -brownish-red -Brownism -Brownist -Brownistic -Brownistical -brown-leaved -Brownlee -Brownley -brownly -brown-locked -brownness -brownnose -brown-nose -brown-nosed -brownnoser -brown-noser -brown-nosing -brownout -brownouts -brownprint -brown-purple -brown-red -brown-roofed -Browns -brown-sailed -Brownsboro -Brownsburg -Brownsdale -brownshirt -brown-skinned -brown-sleeve -Brownson -brown-spotted -brown-state -brown-stemmed -brownstone -brownstones -Brownstown -brown-strained -Brownsville -browntail -brown-tailed -Brownton -browntop -Browntown -Brownville -brown-washed -brownweed -Brownwood -brownwort -browpiece -browpost -brows -brow's -browsability -browsage -browse -browsed -browser -browsers -browses -browsick -browsing -browst -brow-wreathed -browzer -Broxton -Broz -Brozak -brr -brrr -BRS -BRT -bruang -Bruant -Brubaker -Brubeck -brubru -brubu -Bruce -Brucella -brucellae -brucellas -brucellosis -Bruceton -Brucetown -Bruceville -Bruch -bruchid -Bruchidae -Bruchus -brucia -Brucie -brucin -brucina -brucine -brucines -brucins -brucite -bruckle -bruckled -bruckleness -Bruckner -Bructeri -Bruegel -Brueghel -Bruell -bruet -Brufsky -Bruges -Brugge -brugh -brughs -brugnatellite -Bruhn -bruyere -Bruyeres -Bruin -Bruyn -Bruington -bruins -Bruis -bruise -bruised -bruiser -bruisers -bruises -bruisewort -bruising -bruisingly -bruit -bruited -bruiter -bruiters -bruiting -bruits -bruja -brujas -brujeria -brujo -brujos -bruke -Brule -brulee -brules -brulyie -brulyiement -brulyies -brulot -brulots -brulzie -brulzies -brum -Brumaire -brumal -Brumalia -brumbee -brumby -brumbie -brumbies -brume -brumes -Brumidi -Brumley -Brummagem -brummagen -Brummell -brummer -brummy -Brummie -brumous -brumstane -brumstone -Brunanburh -brunch -brunched -brunches -brunching -brunch-word -Brundidge -Brundisium -brune -Bruneau -Brunei -Brunel -Brunell -Brunella -Brunelle -Brunelleschi -Brunellesco -Brunellia -Brunelliaceae -brunelliaceous -Bruner -brunet -Brunetiere -brunetness -brunets -brunette -brunetteness -brunettes -Brunfelsia -Brunhild -Brunhilda -Brunhilde -Bruni -Bruning -brunion -brunissure -Brunistic -brunizem -brunizems -Brunk -Brunn -brunneous -Brunner -Brunnhilde -Brunnichia -Bruno -Brunonia -Brunoniaceae -Brunonian -Brunonism -Bruns -Brunson -Brunsville -Brunswick -brunt -brunts -Brusa -bruscha -bruscus -Brusett -Brush -brushability -brushable -brushback -brushball -brushbird -brush-breaking -brushbush -brushcut -brushed -brusher -brusher-off -brushers -brusher-up -brushes -brushet -brushfire -brush-fire -brushfires -brushfire's -brush-footed -brushful -brushy -brushier -brushiest -brushiness -brushing -brushite -brushland -brushless -brushlessness -brushlet -brushlike -brushmaker -brushmaking -brushman -brushmen -brushoff -brush-off -brushoffs -brushpopper -brushproof -brush-shaped -brush-tail -brush-tailed -Brushton -brush-tongued -brush-treat -brushup -brushups -brushwood -brushwork -brusk -brusker -bruskest -bruskly -bruskness -Brusly -brusque -brusquely -brusqueness -brusquer -brusquerie -brusquest -Brussel -Brussels -brustle -brustled -brustling -brusure -Brut -Bruta -brutage -brutal -brutalisation -brutalise -brutalised -brutalising -brutalism -brutalist -brutalitarian -brutalitarianism -brutality -brutalities -brutalization -brutalize -brutalized -brutalizes -brutalizing -brutally -brutalness -brute -bruted -brutedom -brutely -brutelike -bruteness -brutes -brute's -brutify -brutification -brutified -brutifies -brutifying -bruting -brutish -brutishly -brutishness -brutism -brutisms -brutter -Brutus -Bruxelles -bruxism -bruxisms -bruzz -Brzegiem -BS -b's -Bs/L -BSA -BSAA -BSAdv -BSAE -BSAeE -BSAgE -BSAgr -BSArch -BSArchE -BSArchEng -BSBA -BSBH -BSBus -BSBusMgt -BSC -BSCE -BSCh -BSChE -BSchMusic -BSCM -BSCom -B-scope -BSCP -BSD -BSDes -BSDHyg -BSE -BSEc -BSEd -BSEE -BSEEngr -BSElE -BSEM -BSEng -BSEP -BSES -BSF -BSFM -BSFMgt -BSFS -BSFT -BSGE -BSGeNEd -BSGeolE -BSGMgt -BSGph -bsh -BSHA -B-shaped -BSHE -BSHEc -BSHEd -BSHyg -BSI -BSIE -BSIndEd -BSIndEngr -BSIndMgt -BSIR -BSIT -BSJ -bskt -BSL -BSLabRel -BSLArch -BSLM -BSLS -BSM -BSME -BSMedTech -BSMet -BSMetE -BSMin -BSMT -BSMTP -BSMusEd -BSN -BSNA -BSO -BSOC -BSOrNHort -BSOT -BSP -BSPA -BSPE -BSPH -BSPhar -BSPharm -BSPHN -BSPhTh -BSPT -BSRec -BSRet -BSRFS -BSRT -BSS -BSSA -BSSc -BSSE -BSSS -BST -BSTIE -BSTJ -BSTrans -BSW -BT -Bt. -BTAM -BTCh -BTE -BTh -BTHU -B-type -btise -BTL -btl. -BTN -BTO -BTOL -btry -btry. -BTS -BTU -BTW -BU -bu. -BuAer -bual -buat -Buatti -buaze -Bub -buba -bubal -bubale -bubales -bubaline -Bubalis -bubalises -Bubalo -bubals -bubas -Bubastid -Bubastite -Bubb -Bubba -bubber -bubby -bubbybush -bubbies -bubble -bubble-and-squeak -bubblebow -bubble-bow -bubbled -bubbleless -bubblelike -bubblement -bubbler -bubblers -bubbles -bubbletop -bubbletops -bubbly -bubblier -bubblies -bubbliest -bubbly-jock -bubbliness -bubbling -bubblingly -bubblish -Bube -Buber -bubinga -bubingas -Bubo -buboed -buboes -Bubona -bubonalgia -bubonic -Bubonidae -bubonocele -bubonoceze -bubos -bubs -bubukle -bucayo -Bucaramanga -bucare -bucca -buccal -buccally -buccan -buccaned -buccaneer -buccaneering -buccaneerish -buccaneers -buccaning -buccanned -buccanning -buccaro -buccate -Buccellarius -bucchero -buccheros -buccin -buccina -buccinae -buccinal -buccinator -buccinatory -Buccinidae -bucciniform -buccinoid -Buccinum -Bucco -buccobranchial -buccocervical -buccogingival -buccolabial -buccolingual -bucconasal -Bucconidae -Bucconinae -buccopharyngeal -buccula -bucculae -Bucculatrix -Bucelas -Bucella -bucellas -bucentaur -bucentur -Bucephala -Bucephalus -Buceros -Bucerotes -Bucerotidae -Bucerotinae -Buch -Buchalter -Buchan -Buchanan -Buchanite -Bucharest -Buchbinder -Buchenwald -Bucher -Buchheim -buchite -Buchloe -Buchman -Buchmanism -Buchmanite -Buchner -Buchnera -buchnerite -buchonite -Buchtel -buchu -Buchwald -Bucyrus -Buck -buckayro -buckayros -buck-and-wing -buckaroo -buckaroos -buckass -Buckatunna -buckbean -buck-bean -buckbeans -buckberry -buckboard -buckboards -buckboard's -buckbrush -buckbush -Buckden -bucked -buckeen -buckeens -buckeye -buck-eye -buckeyed -buck-eyed -buckeyes -Buckeystown -Buckels -bucker -buckeroo -buckeroos -buckers -bucker-up -bucket -bucketed -bucketeer -bucket-eyed -bucketer -bucketful -bucketfull -bucketfuls -buckety -bucketing -bucketmaker -bucketmaking -bucketman -buckets -bucket's -bucketsful -bucket-shaped -bucketshop -bucket-shop -Buckfield -Buckhannon -Buckhead -Buckholts -buckhorn -buck-horn -buckhound -buck-hound -buckhounds -Bucky -Buckie -bucking -Buckingham -Buckinghamshire -buckish -buckishly -buckishness -buckism -buckjump -buck-jump -buckjumper -Buckland -bucklandite -Buckle -buckle-beggar -buckled -Buckley -Buckleya -buckleless -Buckler -bucklered -buckler-fern -buckler-headed -bucklering -bucklers -buckler-shaped -buckles -Bucklin -buckling -bucklum -Buckman -buck-mast -Bucknell -Buckner -bucko -buckoes -buckone -buck-one -buck-passing -buckplate -buckpot -buckra -buckram -buckramed -buckraming -buckrams -buckras -Bucks -bucksaw -bucksaws -bucks-beard -buckshee -buckshees -buck's-horn -buckshot -buck-shot -buckshots -buckskin -buckskinned -buckskins -Bucksport -buckstay -buckstall -buck-stall -buckstone -bucktail -bucktails -buckteeth -buckthorn -bucktooth -buck-tooth -bucktoothed -buck-toothed -bucktooths -bucku -buckwagon -buckwash -buckwasher -buckwashing -buck-washing -buckwheat -buckwheater -buckwheatlike -buckwheats -Bucoda -bucoliast -bucolic -bucolical -bucolically -bucolicism -Bucolics -Bucolion -Bucorvinae -Bucorvus -Bucovina -bucrane -bucrania -bucranium -bucrnia -Bucure -Bucuresti -Bud -Buda -Budapest -budbreak -Budd -buddage -buddah -Budde -budded -Buddenbrooks -budder -budders -Buddh -Buddha -Buddha-field -Buddhahood -Buddhaship -buddhi -Buddhic -Buddhism -Buddhist -Buddhistic -Buddhistical -Buddhistically -buddhists -Buddhology -Buddhological -Buddy -buddy-boy -buddy-buddy -Buddie -buddied -buddies -buddying -Budding -buddings -buddy's -buddle -buddled -Buddleia -buddleias -buddleman -buddler -buddles -buddling -Bude -Budenny -Budennovsk -Buderus -Budge -budge-barrel -budged -budger -budgeree -budgereegah -budgerigah -budgerygah -budgerigar -budgerigars -budgero -budgerow -budgers -budges -Budget -budgetary -budgeted -budgeteer -budgeter -budgeters -budgetful -budgeting -budgets -budgy -budgie -budgies -budging -Budh -budless -budlet -budlike -budling -budmash -Budorcas -buds -bud's -budtime -Budukha -Buduma -Budweis -Budweiser -Budwig -budwood -budworm -budworms -Budworth -budzart -budzat -Bueche -Buehler -Buehrer -Bueyeros -Buell -Buellton -Buena -buenas -Buenaventura -Bueno -Buenos -Buerger -Bueschel -Buettneria -Buettneriaceae -BUF -bufagin -Buff -buffa -buffability -buffable -Buffalo -buffaloback -buffaloed -buffaloes -buffalofish -buffalofishes -buffalo-headed -buffaloing -buffalos -buff-backed -buffball -buffbar -buff-bare -buff-breasted -buff-citrine -buffcoat -buff-colored -buffe -buffed -buffer -buffered -Bufferin -buffering -bufferrer -bufferrers -bufferrer's -buffers -buffer's -Buffet -buffeted -buffeter -buffeters -buffeting -buffetings -buffets -buffi -Buffy -buff-yellow -buffier -buffiest -buffin -buffing -buffle -bufflehead -buffleheaded -buffle-headed -bufflehorn -Buffo -Buffon -buffone -buffont -buffoon -buffoonery -buffooneries -buffoonesque -buffoonish -buffoonishness -buffoonism -buffoons -buffoon's -buff-orange -buffos -buffs -buff's -buff-tipped -Buffum -buffware -buff-washed -bufidin -bufo -bufonid -Bufonidae -bufonite -Buford -bufotalin -bufotenin -bufotenine -bufotoxin -Bug -bugaboo -bugaboos -Bugayev -bugala -bugan -Buganda -bugara -Bugas -bugbane -bugbanes -bugbear -bugbeardom -bugbearish -bugbears -Bugbee -bugbite -bugdom -bugeye -bugeyed -bug-eyed -bugeyes -bug-eyes -bugfish -buggane -bugged -bugger -buggered -buggery -buggeries -buggering -buggers -bugger's -buggess -buggy -buggier -buggies -buggiest -buggyman -buggymen -bugginess -bugging -buggy's -bughead -bughouse -bughouses -bught -Bugi -Buginese -Buginvillaea -bug-juice -bugle -bugled -bugle-horn -bugler -buglers -bugles -buglet -bugleweed -bugle-weed -buglewort -bugling -bugloss -buglosses -bugology -bugologist -bugong -bugout -bugproof -bugre -bugs -bug's -bugseed -bugseeds -bugsha -bugshas -bugweed -bug-word -bugwort -Buhl -buhlbuhl -Buhler -buhls -buhlwork -buhlworks -buhr -buhrmill -buhrs -buhrstone -Bui -buy -Buia -buyable -buyback -buybacks -buibui -Buick -buicks -Buyer -Buyers -buyer's -Buyides -buying -build -buildable -builded -builder -builders -building -buildingless -buildings -buildress -builds -buildup -build-up -buildups -buildup's -built -builtin -built-in -built-up -Buine -buyout -buyouts -buirdly -Buiron -buys -Buyse -Buisson -buist -Buitenzorg -Bujumbura -Buka -Bukat -Bukavu -Buke -Bukeyef -bukh -Bukhara -Bukharin -Bukidnon -Bukittinggi -bukk- -Bukovina -bukshee -bukshi -Bukum -Bul -bul. -Bula -Bulacan -bulak -Bulan -Bulanda -Bulawayo -bulb -bulbaceous -bulbar -bulbed -bulbel -bulbels -bulby -bulbier -bulbiest -bulbiferous -bulbiform -bulbil -Bulbilis -bulbilla -bulbils -bulbine -bulbless -bulblet -bulblets -bulblike -bulbo- -bulbocapnin -bulbocapnine -bulbocavernosus -bulbocavernous -Bulbochaete -Bulbocodium -bulbomedullary -bulbomembranous -bulbonuclear -Bulbophyllum -bulborectal -bulbose -bulbospinal -bulbotuber -bulbourethral -bulbo-urethral -bulbous -bulbously -bulbous-rooted -bulbs -bulb's -bulb-tee -bulbul -bulbule -bulbuls -bulbus -bulchin -bulder -Bulfinch -Bulg -Bulg. -Bulganin -Bulgar -Bulgari -Bulgaria -Bulgarian -bulgarians -Bulgaric -Bulgarophil -Bulge -bulged -Bulger -bulgers -bulges -bulgy -bulgier -bulgiest -bulginess -bulging -bulgingly -bulgur -bulgurs -bulies -bulimy -bulimia -bulimiac -bulimias -bulimic -bulimiform -bulimoid -Bulimulidae -Bulimus -bulk -bulkage -bulkages -bulked -bulker -bulkhead -bulkheaded -bulkheading -bulkheads -bulkhead's -bulky -bulkier -bulkiest -bulkily -bulkin -bulkiness -bulking -bulkish -bulk-pile -bulks -Bull -bull- -bull. -bulla -bullace -bullaces -bullae -bullalaria -bullamacow -bullan -Bullard -bullary -bullaria -bullaries -bullarium -bullate -bullated -bullation -bullback -bull-bait -bull-baiter -bullbaiting -bull-baiting -bullbat -bullbats -bull-bearing -bullbeggar -bull-beggar -bullberry -bullbird -bull-bitch -bullboat -bull-bragging -bull-browed -bullcart -bullcomber -bulldog -bull-dog -bulldogged -bulldoggedness -bulldogger -bulldoggy -bulldogging -bulldoggish -bulldoggishly -bulldoggishness -bulldogism -bulldogs -bulldog's -bull-dose -bulldoze -bulldozed -bulldozer -bulldozers -bulldozes -bulldozing -bulldust -bulled -Bulley -Bullen -bullen-bullen -Buller -bullescene -bullet -bulleted -bullethead -bullet-head -bulletheaded -bulletheadedness -bullet-hole -bullety -bulletin -bulletined -bulleting -bulletining -bulletins -bulletin's -bulletless -bulletlike -bulletmaker -bulletmaking -bulletproof -bulletproofed -bulletproofing -bulletproofs -bullets -bullet's -bulletwood -bull-faced -bullfeast -bullfice -bullfight -bull-fight -bullfighter -bullfighters -bullfighting -bullfights -bullfinch -bullfinches -bullfist -bullflower -bullfoot -bullfrog -bull-frog -bullfrogs -bull-fronted -bullgine -bull-god -bull-grip -bullhead -bullheaded -bull-headed -bullheadedly -bullheadedness -bullheads -bullhide -bullhoof -bullhorn -bull-horn -bullhorns -Bully -bullyable -Bullialdus -bullyboy -bullyboys -Bullidae -bullydom -bullied -bullier -bullies -bulliest -bulliform -bullyhuff -bullying -bullyingly -bullyism -bullimong -bulling -bully-off -Bullion -bullionism -bullionist -bullionless -bullions -bullyrag -bullyragged -bullyragger -bullyragging -bullyrags -bullyrock -bully-rock -bullyrook -Bullis -bullish -bullishly -bullishness -bullism -bullit -bullition -Bullitt -Bullivant -bulllike -bull-like -bull-man -bull-mastiff -bull-mouthed -bullneck -bullnecked -bull-necked -bullnecks -bullnose -bull-nosed -bullnoses -bullnut -Bullock -bullocker -bullocky -Bullockite -bullockman -bullocks -bullock's-heart -Bullom -bullose -Bullough -bullous -bullpates -bullpen -bullpens -bullpoll -bullpout -bullpouts -Bullpup -bullragged -bullragging -bullring -bullrings -bullroarer -bull-roarer -bull-roaring -bull-run -bull-running -bullrush -bullrushes -bulls -bullseye -bull's-eye -bull's-eyed -bull's-eyes -bullshit -bullshits -bullshitted -bullshitting -Bullshoals -bullshot -bullshots -bullskin -bullsnake -bullsticker -bullsucker -bullswool -bullterrier -bull-terrier -bulltoad -bull-tongue -bull-tongued -bull-tonguing -bull-trout -bullule -Bullville -bull-voiced -bullweed -bullweeds -bullwhack -bull-whack -bullwhacker -bullwhip -bull-whip -bullwhipped -bullwhipping -bullwhips -bullwork -bullwort -Bulmer -bulnbuln -Bulolo -Bulow -Bulpitt -bulreedy -bulrush -bulrushes -bulrushy -bulrushlike -bulse -bult -bultey -bultell -bulten -bulter -Bultman -Bultmann -bultong -bultow -bulwand -bulwark -bulwarked -bulwarking -bulwarks -Bulwer -Bulwer-Lytton -Bum -bum- -bumaloe -bumaree -bumbailiff -bumbailiffship -bumbard -bumbarge -bumbass -bumbaste -bumbaze -bumbee -bumbelo -bumbershoot -bumble -bumblebee -bumble-bee -bumblebeefish -bumblebeefishes -bumblebees -bumblebee's -bumbleberry -bumblebomb -bumbled -Bumbledom -bumblefoot -bumblekite -bumblepuppy -bumble-puppy -bumbler -bumblers -bumbles -bumbling -bumblingly -bumblingness -bumblings -bumbo -bumboat -bumboatman -bumboatmen -bumboats -bumboatwoman -bumclock -Bumelia -bumf -bumfeg -bumfs -bumfuzzle -Bumgardner -bumicky -bumkin -bumkins -bummack -bummalo -bummalos -bummaree -bummed -bummel -bummer -bummery -bummerish -bummers -bummest -bummie -bummil -bumming -bummle -bummler -bummock -bump -bumped -bumpee -bumper -bumpered -bumperette -bumpering -bumpers -bumph -bumphs -bumpy -bumpier -bumpiest -bumpily -bumpiness -bumping -bumpingly -bumping-off -bumpity -bumpkin -bumpkinet -bumpkinish -bumpkinly -bumpkins -bumpoff -bump-off -bumpology -bumps -bumpsy -bump-start -bumptious -bumptiously -bumptiousness -bums -bum's -bumsucking -bumtrap -bumwood -bun -Buna -Bunaea -buncal -Bunce -Bunceton -Bunch -bunchbacked -bunch-backed -bunchberry -bunchberries -Bunche -bunched -buncher -bunches -bunchflower -bunchy -bunchier -bunchiest -bunchily -bunchiness -bunching -bunch-word -bunco -buncoed -buncoing -Buncombe -buncombes -buncos -Bund -Bunda -Bundaberg -Bundahish -Bunde -Bundeli -Bundelkhand -Bunder -Bundesrat -Bundesrath -Bundestag -bundh -Bundy -bundies -Bundist -bundists -bundle -bundled -bundler -bundlerooted -bundle-rooted -bundlers -bundles -bundlet -bundling -bundlings -bundobust -bundoc -bundocks -bundook -Bundoora -bunds -bundt -bundts -Bundu -bundweed -bunemost -bung -Bunga -bungaloid -bungalow -bungalows -bungalow's -bungarum -Bungarus -bunged -bungee -bungey -bunger -bungerly -bungfu -bungfull -bung-full -bunghole -bungholes -bungy -bunging -bungle -bungled -bungler -bunglers -bungles -bunglesome -bungling -bunglingly -bunglings -bungmaker -bungo -bungos -bungs -bungstarter -bungtown -bungwall -Bunia -bunya -bunya-bunya -bunyah -Bunyan -Bunyanesque -bunyas -bunyip -Bunin -Buninahua -bunion -bunions -bunion's -Bunyoro -bunjara -bunji-bunji -bunk -bunked -Bunker -bunkerage -bunkered -bunkery -bunkering -bunkerman -bunkermen -bunkers -bunker's -Bunkerville -bunkhouse -bunkhouses -bunkhouse's -Bunky -Bunkie -bunking -bunkload -bunkmate -bunkmates -bunkmate's -bunko -bunkoed -bunkoing -bunkos -bunks -bunkum -bunkums -Bunn -Bunnell -Bunni -Bunny -bunnia -Bunnie -bunnies -bunnymouth -bunning -bunny's -Bunns -bunodont -Bunodonta -Bunola -bunolophodont -Bunomastodontidae -bunoselenodont -Bunow -bunraku -bunrakus -buns -bun's -Bunsen -bunsenite -bunt -buntal -bunted -Bunter -bunters -bunty -buntine -Bunting -buntings -buntline -buntlines -bunton -bunts -Bunuel -bunuelo -Bunus -buoy -buoyage -buoyages -buoyance -buoyances -buoyancy -buoyancies -buoyant -buoyantly -buoyantness -buoyed -buoyed-up -buoying -buoys -buoy-tender -buonamani -buonamano -Buonaparte -Buonarroti -Buonomo -Buononcini -Buote -Buphaga -Buphagus -Buphonia -buphthalmia -buphthalmic -buphthalmos -Buphthalmum -bupleurol -Bupleurum -buplever -buprestid -Buprestidae -buprestidan -Buprestis -buqsha -buqshas -BUR -Bur. -bura -Burack -Burayan -Buraydah -Buran -burans -burao -Buraq -Buras -Burbage -Burbank -burbankian -Burbankism -burbark -Burberry -Burberries -burble -burbled -burbler -burblers -burbles -burbly -burblier -burbliest -burbling -burbolt -burbot -burbots -burbs -burbush -Burch -Burchard -Burchett -Burchfield -Burck -Burckhardt -Burd -burdalone -burd-alone -burdash -Burdelle -burden -burdenable -burdened -burdener -burdeners -burdening -burdenless -burdenous -burdens -burdensome -burdensomely -burdensomeness -Burdett -Burdette -Burdick -burdie -burdies -Burdigalian -Burdine -burdock -burdocks -burdon -burds -Bure -bureau -bureaucracy -bureaucracies -bureaucracy's -bureaucrat -bureaucratese -bureaucratic -bureaucratical -bureaucratically -bureaucratism -bureaucratist -bureaucratization -bureaucratize -bureaucratized -bureaucratizes -bureaucratizing -bureaucrats -bureaucrat's -bureaus -bureau's -bureaux -burel -burelage -burele -burely -burelle -burelly -Buren -buret -burets -burette -burettes -burez -burfish -Burford -Burfordville -Burg -burga -burgage -burgages -burgality -burgall -burgamot -burganet -Burgas -burgau -burgaudine -Burgaw -burg-bryce -burge -burgee -burgees -Burgener -Burgenland -burgensic -burgeon -burgeoned -burgeoning -burgeons -Burger -burgers -Burgess -burgessdom -burgesses -burgess's -burgess-ship -Burget -Burgettstown -burggrave -burgh -burghal -burghalpenny -burghal-penny -burghbote -burghemot -burgh-english -burgher -burgherage -burgherdom -burgheress -burgherhood -burgheristh -burghermaster -burghers -burgher's -burghership -Burghley -burghmaster -burghmoot -burghmote -burghs -Burgin -burglar -burglary -burglaries -burglarious -burglariously -burglary's -burglarise -burglarised -burglarising -burglarize -burglarized -burglarizes -burglarizing -burglarproof -burglarproofed -burglarproofing -burglarproofs -burglars -burglar's -burgle -burgled -burgles -burgling -Burgoyne -burgomaster -burgomasters -burgomastership -burgonet -burgonets -burgoo -Burgoon -burgoos -Burgos -burgout -burgouts -burgrave -burgraves -burgraviate -burgs -burgul -burgullian -Burgundy -Burgundian -Burgundies -burgus -burgware -Burgwell -burgwere -burh -Burhans -burhead -burhel -Burhinidae -Burhinus -burhmoot -Buri -Bury -buriable -burial -burial-ground -burial-place -burials -burian -Buriat -Buryat -Buryats -buried -buriels -burier -buriers -buries -burying -burying-ground -burying-place -burin -burinist -burins -burion -burys -buriti -Burk -burka -Burkburnett -Burke -burked -burkei -burker -burkers -burkes -Burkesville -Burket -Burkett -Burkettsville -Burkeville -burkha -Burkhard -Burkhardt -Burkhart -burking -burkite -burkites -Burkitt -Burkittsville -Burkle -Burkley -burkundauze -burkundaz -Burkville -Burl -burlace -burladero -burlap -burlaps -burlecue -burled -Burley -burleycue -Burleigh -burleys -burler -burlers -burlesk -burlesks -Burleson -burlesque -burlesqued -burlesquely -burlesquer -burlesques -burlesquing -burlet -burletta -burly -burly-boned -Burlie -burlier -burlies -burliest -burly-faced -burly-headed -burlily -burliness -burling -Burlingame -Burlingham -Burlington -Burlison -burls -Burma -Burman -Burmannia -Burmanniaceae -burmanniaceous -Burmans -Burmese -burmite -Burmo-chinese -Burn -burn- -Burna -Burnaby -burnable -Burnard -burnbeat -burn-beat -Burne -burned -burned-out -burned-over -Burney -Burneyville -Burne-Jones -Burner -burner-off -burners -Burnet -burnetize -burnets -Burnett -burnettize -burnettized -burnettizing -Burnettsville -burnewin -burnfire -Burnham -Burny -Burnie -burniebee -burnies -Burnight -burning -burning-bush -burning-glass -burningly -burnings -burning-wood -Burnips -burnish -burnishable -burnished -burnished-gold -burnisher -burnishers -burnishes -burnishing -burnishment -Burnley -burn-nose -burnoose -burnoosed -burnooses -burnous -burnoused -burnouses -burnout -burnouts -burnover -Burns -Burnsed -Burnsian -Burnside -burnsides -Burnsville -burnt -burnt-child -Burntcorn -burn-the-wind -burntly -burntness -burnt-out -burnt-umber -burnt-up -burntweed -burnup -burn-up -burnut -burnweed -Burnwell -burnwood -buro -Buroker -buroo -BURP -burped -burping -burps -Burr -Burra -burrah -burras-pipe -burratine -burrawang -burrbark -burred -burree -bur-reed -burrel -burrel-fly -Burrell -burrel-shot -burrer -burrers -burrfish -burrfishes -burrgrailer -burrhead -burrheaded -burrheadedness -burrhel -burry -burrier -burriest -Burrill -burring -burrio -Burris -burrish -burrito -burritos -burrknot -burro -burro-back -burrobrush -burrock -burros -burro's -Burroughs -Burrow -burrow-duck -burrowed -burroweed -burrower -burrowers -burrowing -Burrows -burrowstown -burrows-town -burr-pump -burrs -burr's -burrstone -burr-stone -Burrton -Burrus -burs -Bursa -bursae -bursal -bursar -bursary -bursarial -bursaries -bursars -bursarship -bursas -bursate -bursati -bursattee -bursautee -bursch -Burschenschaft -Burschenschaften -burse -bursectomy -burseed -burseeds -Bursera -Burseraceae -Burseraceous -burses -bursicle -bursiculate -bursiform -bursitis -bursitises -bursitos -Burson -burst -burst-cow -bursted -burster -bursters -bursty -burstiness -bursting -burstone -burstones -bursts -burstwort -bursula -Burt -Burta -burthen -burthened -burthening -burthenman -burthens -burthensome -Burty -Burtie -Burtis -Burton -burtonization -burtonize -burtons -Burtonsville -Burton-upon-Trent -burtree -Burtrum -Burtt -burucha -Burundi -burundians -Burushaski -Burut -burweed -burweeds -Burwell -BUS -bus. -Busaos -busbar -busbars -Busby -busbies -busboy -busboys -busboy's -buscarl -buscarle -Busch -Buschi -Busching -Buseck -bused -Busey -busera -buses -Bush -bushbaby -bushbashing -bushbeater -bushbeck -bushbody -bushbodies -bushboy -bushbuck -bushbucks -bushcraft -bushed -Bushey -Bushel -bushelage -bushelbasket -busheled -busheler -bushelers -bushelful -bushelfuls -busheling -bushelled -busheller -bushelling -bushelman -bushelmen -bushels -bushel's -bushelwoman -busher -bushers -bushes -bushet -bushfighter -bush-fighter -bushfighting -bushfire -bushfires -bushful -bushgoat -bushgoats -bushgrass -bush-grown -bush-haired -bushhammer -bush-hammer -bush-harrow -bush-head -bush-headed -bushi -bushy -bushy-bearded -bushy-browed -Bushido -bushidos -bushie -bushy-eared -bushier -bushiest -bushy-haired -bushy-headed -bushy-legged -bushily -bushiness -bushing -bushings -Bushire -bushy-tailed -bushy-whiskered -bushy-wigged -Bushkill -Bushland -bushlands -bush-league -bushless -bushlet -bushlike -bushmaker -bushmaking -Bushman -bushmanship -bushmaster -bushmasters -bushmen -bushment -Bushnell -Bushongo -Bushore -bushpig -bushranger -bush-ranger -bushranging -bushrope -bush-rope -bush-shrike -bush-skirted -bush-tailed -bushtit -bushtits -Bushton -Bushveld -bushwa -bushwack -bushwah -bushwahs -bushwalking -bushwas -Bushweller -bushwhack -bushwhacked -bushwhacker -bushwhackers -bushwhacking -bushwhacks -bushwife -bushwoman -Bushwood -busy -busybody -busybodied -busybodies -busybodyish -busybodyism -busybodyness -busy-brained -Busycon -busied -Busiek -busier -busies -busiest -busy-fingered -busyhead -busy-headed -busy-idle -busying -busyish -busily -busine -business -busyness -businesses -busynesses -businessese -businesslike -businesslikeness -businessman -businessmen -business's -businesswoman -businesswomen -busing -busings -Busiris -busy-tongued -busywork -busyworks -busk -busked -busker -buskers -busket -busky -buskin -buskined -busking -buskins -Buskirk -buskle -busks -Buskus -busload -busman -busmen -Busoni -Busra -Busrah -buss -bussed -Bussey -busser -busser-in -busses -Bussy -bussing -bussings -bussock -bussu -Bust -bustard -bustards -bustard's -busted -bustee -Buster -busters -busthead -busti -busty -bustian -bustic -busticate -bustics -bustier -bustiers -bustiest -busting -bustle -bustled -bustler -bustlers -bustles -bustling -bustlingly -busto -busts -bust-up -busulfan -busulfans -busuuti -busway -BUT -but- -butacaine -butadiene -butadiyne -butanal -but-and-ben -butane -butanes -butanoic -butanol -butanolid -butanolide -butanols -butanone -butanones -butat -Butazolidin -Butch -butcha -Butcher -butcherbird -butcher-bird -butcherbroom -butcherdom -butchered -butcherer -butcheress -butchery -butcheries -butchering -butcherless -butcherly -butcherliness -butcherous -butcher-row -butchers -butcher's -butcher's-broom -butches -Bute -Butea -butein -Butenandt -but-end -butene -butenes -butenyl -Buteo -buteonine -buteos -Butes -Buteshire -butic -Butyl -butylamine -butylate -butylated -butylates -butylating -butylation -butyl-chloral -butylene -butylenes -butylic -butyls -butin -Butyn -butine -butyne -butyr -butyr- -butyraceous -butyral -butyraldehyde -butyrals -butyrate -butyrates -butyric -butyrically -butyryl -butyryls -butyrin -butyrinase -butyrins -butyro- -butyrochloral -butyrolactone -butyrometer -butyrometric -butyrone -butyrous -butyrousness -butle -butled -Butler -butlerage -butlerdom -butleress -butlery -butleries -butlerism -butlerlike -butlers -butler's -butlership -Butlerville -butles -butling -butment -Butner -butolism -Butomaceae -butomaceous -Butomus -butoxy -butoxyl -buts -buts-and-bens -Butsu -butsudan -Butt -Butta -buttal -buttals -Buttaro -Butte -butted -butter -butteraceous -butter-and-eggs -butterback -butterball -butterbill -butter-billed -butterbird -butterboat-bill -butterboat-billed -butterbough -butterbox -butter-box -butterbump -butter-bump -butterbur -butterburr -butterbush -butter-colored -buttercup -buttercups -butter-cutting -buttered -butterer -butterers -butterfat -butterfats -Butterfield -butterfingered -butter-fingered -butterfingers -butterfish -butterfishes -butterfly -butterflied -butterflyer -butterflies -butterflyfish -butterflyfishes -butterfly-flower -butterflying -butterflylike -butterfly-pea -butterfly's -butterflower -butterhead -buttery -butterier -butteries -butteriest -butteryfingered -butterine -butteriness -buttering -butteris -butterjags -butterless -butterlike -buttermaker -buttermaking -butterman -Buttermere -buttermilk -buttermonger -buttermouth -butter-mouthed -butternose -butternut -butter-nut -butternuts -butterpaste -butter-print -butter-rigged -butterroot -butter-rose -Butters -butterscotch -butterscotches -butter-smooth -butter-toothed -butterweed -butterwife -butterwoman -butterworker -butterwort -Butterworth -butterwright -buttes -buttgenbachite -butt-headed -butty -butties -buttyman -butt-in -butting -butting-in -butting-joint -buttinski -buttinsky -buttinskies -buttle -buttled -buttling -buttock -buttocked -buttocker -buttocks -buttock's -Button -buttonball -buttonbur -buttonbush -button-covering -button-down -button-eared -buttoned -buttoner -buttoners -buttoner-up -button-fastening -button-headed -buttonhold -button-hold -buttonholder -button-holder -buttonhole -button-hole -buttonholed -buttonholer -buttonholes -buttonhole's -buttonholing -buttonhook -buttony -buttoning -buttonless -buttonlike -buttonmold -buttonmould -buttons -button-sewing -button-shaped -button-slitting -button-tufting -buttonweed -Buttonwillow -buttonwood -buttress -buttressed -buttresses -buttressing -buttressless -buttresslike -Buttrick -butts -butt's -buttstock -butt-stock -buttstrap -buttstrapped -buttstrapping -buttwoman -buttwomen -buttwood -Buttzville -Butung -butut -bututs -Butzbach -buvette -Buxaceae -buxaceous -Buxbaumia -Buxbaumiaceae -buxeous -buxerry -buxerries -buxine -buxom -buxomer -buxomest -buxomly -buxomness -Buxtehude -Buxton -Buxus -buz -buzane -buzylene -buzuki -buzukia -buzukis -Buzz -Buzzard -buzzardly -buzzardlike -buzzards -buzzard's -buzzbomb -buzzed -Buzzell -buzzer -buzzerphone -buzzers -buzzes -buzzgloak -buzzy -buzzier -buzzies -buzziest -buzzing -buzzingly -buzzle -buzzsaw -buzzwig -buzzwigs -buzzword -buzzwords -buzzword's -BV -BVA -BVC -BVD -BVDs -BVE -BVY -BVM -bvt -BW -bwana -bwanas -BWC -BWG -BWI -BWM -BWR -BWT -BWTS -BWV -BX -bx. -bxs -Bz -Bziers -C -C. -C.A. -C.A.F. -C.B. -C.B.D. -C.B.E. -C.C. -C.D. -C.E. -C.F. -C.G. -c.h. -C.I. -C.I.O. -c.m. -C.M.G. -C.O. -C.O.D. -C.P. -C.R. -C.S. -C.T. -C.V.O. -c.w.o. -c/- -C/A -C/D -c/f -C/L -c/m -C/N -C/O -C3 -CA -ca' -ca. -CAA -Caaba -caam -caama -caaming -Caanthus -caapeba -caatinga -CAB -caba -cabaa -cabaan -caback -Cabaeus -cabaho -Cabal -cabala -cabalas -cabalassou -cabaletta -cabalic -cabalism -cabalisms -cabalist -cabalistic -cabalistical -cabalistically -cabalists -Caball -caballed -caballer -caballeria -caballero -caballeros -caballine -caballing -Caballo -caballos -cabals -caban -cabana -cabanas -Cabanatuan -cabane -Cabanis -cabaret -cabaretier -cabarets -cabas -cabasa -cabasset -cabassou -Cabazon -cabbage -cabbaged -cabbagehead -cabbageheaded -cabbageheadedness -cabbagelike -cabbages -cabbage's -cabbagetown -cabbage-tree -cabbagewood -cabbageworm -cabbagy -cabbaging -cabbala -cabbalah -cabbalahs -cabbalas -cabbalism -cabbalist -cabbalistic -cabbalistical -cabbalistically -cabbalize -cabbed -cabber -cabby -cabbie -cabbies -cabbing -cabble -cabbled -cabbler -cabbling -cabda -cabdriver -cabdriving -Cabe -cabecera -cabecudo -Cabeiri -cabeliau -Cabell -cabellerote -caber -Cabery -Cabernet -cabernets -cabers -cabestro -cabestros -Cabet -cabezon -cabezone -cabezones -cabezons -cabful -cabiai -cabildo -cabildos -cabilliau -Cabimas -cabin -cabin-class -Cabinda -cabined -cabinet -cabineted -cabineting -cabinetmake -cabinetmaker -cabinet-maker -cabinetmakers -cabinetmaking -cabinetmakings -cabinetry -cabinets -cabinet's -cabinetted -cabinetwork -cabinetworker -cabinetworking -cabinetworks -cabining -cabinlike -Cabins -cabin's -cabio -Cabirean -Cabiri -Cabiria -Cabirian -Cabiric -Cabiritic -Cable -cable-car -cablecast -cabled -cablegram -cablegrams -cablelaid -cable-laid -cableless -cablelike -cableman -cablemen -cabler -cables -cablese -cable-stitch -cablet -cablets -cableway -cableways -cabling -cablish -cabman -cabmen -cabob -cabobs -caboceer -caboche -caboched -cabochon -cabochons -cabocle -caboclo -caboclos -Cabomba -Cabombaceae -cabombas -caboodle -caboodles -cabook -Cabool -caboose -cabooses -Caborojo -caboshed -cabossed -Cabot -cabotage -cabotages -cabotin -cabotinage -cabots -cabouca -Cabral -cabre -cabree -Cabrera -cabrerite -cabresta -cabrestas -cabresto -cabrestos -cabret -cabretta -cabrettas -cabreuva -cabrie -cabrilla -cabrillas -Cabrini -cabriole -cabrioles -cabriolet -cabriolets -cabrit -cabrito -CABS -cab's -cabstand -cabstands -cabuya -cabuyas -cabuja -cabulla -cabureiba -caburn -CAC -cac- -Caca -ca-ca -cacaesthesia -cacafuego -cacafugo -Cacajao -Cacak -Cacalia -cacam -Cacan -Cacana -cacanapa -ca'canny -cacanthrax -cacao -cacaos -Cacara -cacas -Cacatua -Cacatuidae -Cacatuinae -cacaxte -Caccabis -caccagogue -caccia -caccias -cacciatora -cacciatore -Caccini -Cacciocavallo -cace -cacei -cacemphaton -cacesthesia -cacesthesis -cachaca -cachaemia -cachaemic -cachalot -cachalote -cachalots -cachaza -cache -cache-cache -cachectic -cachectical -cached -cachemia -cachemic -cachepot -cachepots -caches -cache's -cachespell -cachet -cacheted -cachetic -cacheting -cachets -cachexy -cachexia -cachexias -cachexic -cachexies -cachibou -cachila -cachimailla -cachina -cachinate -caching -cachinnate -cachinnated -cachinnating -cachinnation -cachinnator -cachinnatory -cachoeira -cacholong -cachot -cachou -cachous -cachrys -cachua -cachucha -cachuchas -cachucho -cachunde -caci -Cacia -Cacicus -cacidrosis -Cacie -Cacilia -Cacilie -cacimbo -cacimbos -caciocavallo -cacique -caciques -caciqueship -caciquism -cack -Cacka -cacked -cackerel -cack-handed -cacking -cackle -cackled -cackler -cacklers -cackles -cackling -cacks -CACM -caco- -cacochylia -cacochymy -cacochymia -cacochymic -cacochymical -cacocholia -cacochroia -cacocnemia -cacodaemon -cacodaemoniac -cacodaemonial -cacodaemonic -cacodemon -cacodemonia -cacodemoniac -cacodemonial -cacodemonic -cacodemonize -cacodemonomania -cacodyl -cacodylate -cacodylic -cacodyls -cacodontia -cacodorous -cacodoxy -cacodoxian -cacodoxical -cacoeconomy -cacoenthes -cacoepy -cacoepist -cacoepistic -cacoethes -cacoethic -cacogalactia -cacogastric -cacogenesis -cacogenic -cacogenics -cacogeusia -cacoglossia -cacographer -cacography -cacographic -cacographical -cacolet -cacolike -cacology -cacological -cacomagician -cacomelia -cacomistle -cacomixl -cacomixle -cacomixls -cacomorphia -cacomorphosis -caconychia -caconym -caconymic -cacoon -cacopathy -cacopharyngia -cacophony -cacophonia -cacophonic -cacophonical -cacophonically -cacophonies -cacophonist -cacophonists -cacophonize -cacophonous -cacophonously -cacophthalmia -cacoplasia -cacoplastic -cacoproctia -cacorhythmic -cacorrhachis -cacorrhinia -cacosmia -cacospermia -cacosplanchnia -cacostomia -cacothansia -cacothelin -cacotheline -cacothes -cacothesis -cacothymia -cacotype -cacotopia -cacotrichia -cacotrophy -cacotrophia -cacotrophic -cacoxene -cacoxenite -cacozeal -caco-zeal -cacozealous -cacozyme -cacqueteuse -cacqueteuses -Cactaceae -cactaceous -cactal -Cactales -cacti -cactiform -cactoid -Cactus -cactuses -cactuslike -cacumen -cacuminal -cacuminate -cacumination -cacuminous -cacur -Cacus -CAD -Cadal -cadalene -cadamba -cadaster -cadasters -cadastral -cadastrally -cadastration -cadastre -cadastres -cadaver -cadaveric -cadaverin -cadaverine -cadaverize -cadaverous -cadaverously -cadaverousness -cadavers -cadbait -cadbit -cadbote -CADD -Caddaric -cadded -caddesse -caddy -caddice -caddiced -caddicefly -caddices -Caddie -caddied -caddies -caddiing -caddying -cadding -caddis -caddised -caddises -caddisfly -caddisflies -caddish -caddishly -caddishness -caddishnesses -caddisworm -caddle -Caddo -Caddoan -caddow -Caddric -cade -cadeau -cadee -Cadel -Cadell -cadelle -cadelles -Cadena -Cadence -cadenced -cadences -cadency -cadencies -cadencing -cadenette -cadent -cadential -Cadenza -cadenzas -cader -caderas -cadere -Cades -cadesse -Cadet -cadetcy -cadets -cadetship -cadette -cadettes -cadew -cadge -cadged -cadger -cadgers -cadges -cadgy -cadgily -cadginess -cadging -cadi -Cady -cadie -cadying -cadilesker -Cadillac -cadillacs -cadillo -cadinene -cadis -cadish -cadism -cadiueio -Cadyville -Cadiz -cadjan -cadlock -Cadman -Cadmann -Cadmar -Cadmarr -Cadmean -cadmia -cadmic -cadmide -cadmiferous -cadmium -cadmiumize -cadmiums -Cadmopone -Cadmus -Cadogan -Cadorna -cados -Cadott -cadouk -cadrans -cadre -cadres -cads -cadua -caduac -caduca -caducary -caducean -caducecei -caducei -caduceus -caduciary -caduciaries -caducibranch -Caducibranchiata -caducibranchiate -caducicorn -caducity -caducities -caducous -caduke -cadus -CADV -Cadwal -Cadwallader -cadweed -Cadwell -Cadzand -CAE -cae- -caeca -caecal -caecally -caecectomy -caecias -caeciform -Caecilia -Caeciliae -caecilian -Caeciliidae -caecity -caecitis -caecocolic -caecostomy -caecotomy -caecum -Caedmon -Caedmonian -Caedmonic -Caeli -Caelian -caelometer -Caelum -Caelus -Caen -caen- -Caeneus -Caenis -Caenogaea -Caenogaean -caenogenesis -caenogenetic -caenogenetically -Caenolestes -caenostyly -caenostylic -Caenozoic -caen-stone -caeoma -caeomas -caeremoniarius -Caerleon -Caernarfon -Caernarvon -Caernarvonshire -Caerphilly -Caesalpinia -Caesalpiniaceae -caesalpiniaceous -Caesar -Caesaraugusta -Caesardom -Caesarea -Caesarean -Caesareanize -caesareans -Caesaria -Caesarian -Caesarism -Caesarist -caesarists -Caesarize -caesaropapacy -caesaropapism -caesaropapist -caesaropopism -Caesarotomy -caesars -Caesarship -caesious -caesium -caesiums -caespitose -caespitosely -caestus -caestuses -caesura -caesurae -caesural -caesuras -caesuric -Caetano -CAF -cafard -cafardise -CAFE -cafeneh -cafenet -cafes -cafe's -cafe-society -cafetal -cafeteria -cafeterias -cafetiere -cafetorium -caff -caffa -caffeate -caffeic -caffein -caffeina -caffeine -caffeines -caffeinic -caffeinism -caffeins -caffeism -caffeol -caffeone -caffetannic -caffetannin -caffiaceous -caffiso -caffle -caffled -caffling -caffoy -caffoline -caffre -Caffrey -cafh -Cafiero -cafila -cafiz -cafoy -caftan -caftaned -caftans -cafuso -cag -Cagayan -cagayans -Cage -caged -cageful -cagefuls -cagey -cageyness -cageless -cagelike -cageling -cagelings -cageman -cageot -cager -cager-on -cagers -cages -cagester -cagework -caggy -cag-handed -cagy -cagier -cagiest -cagily -caginess -caginesses -caging -cagit -Cagle -Cagliari -Cagliostro -cagmag -Cagn -Cagney -cagot -Cagoulard -Cagoulards -cagoule -CAGR -Caguas -cagui -Cahan -Cahenslyism -cahier -cahiers -Cahill -Cahilly -cahincic -Cahita -cahiz -Cahn -Cahnite -Cahokia -Cahone -cahoot -cahoots -Cahors -cahot -cahow -cahows -Cahra -Cahuapana -cahuy -Cahuilla -cahuita -CAI -cay -Caia -Cayapa -Caiaphas -Cayapo -caiarara -caic -Cayce -caickle -Caicos -caid -caids -Caye -Cayey -Cayenne -cayenned -cayennes -Cayes -Cayla -cailcedra -Cailean -Cayley -Cayleyan -caille -Cailleac -cailleach -Cailly -cailliach -Caylor -caimacam -caimakam -caiman -cayman -caimans -caymans -caimitillo -caimito -Cain -caynard -Cain-colored -caine -Caines -Caingang -Caingangs -caingin -Caingua -ca'ing-whale -Cainian -Cainish -Cainism -Cainite -Cainitic -cainogenesis -Cainozoic -cains -Cainsville -cayos -caiper-callie -caique -caiquejee -caiques -cair -Cairba -Caird -cairds -Cairene -Cairistiona -cairn -Cairnbrook -cairned -cairngorm -cairngorum -cairn-headed -cairny -Cairns -Cairo -CAIS -cays -Cayser -caisse -caisson -caissoned -caissons -Caitanyas -Caite -Caithness -caitif -caitiff -caitiffs -caitifty -Caitlin -Caitrin -Cayubaba -Cayubaban -cayuca -cayuco -Cayucos -Cayuga -Cayugan -Cayugas -Caius -Cayuse -cayuses -Cayuta -Cayuvava -caixinha -Cajan -cajang -Cajanus -cajaput -cajaputs -cajava -cajeput -cajeputol -cajeputole -cajeputs -cajeta -cajole -cajoled -cajolement -cajolements -cajoler -cajolery -cajoleries -cajolers -cajoles -cajoling -cajolingly -cajon -cajones -cajou -cajuela -Cajun -cajuns -cajuput -cajuputene -cajuputol -cajuputs -Cakavci -Cakchikel -cake -cakebox -cakebread -caked -cake-eater -cakehouse -cakey -cakemaker -cakemaking -cake-mixing -caker -cakes -cakette -cakewalk -cakewalked -cakewalker -cakewalking -cakewalks -caky -cakier -cakiest -Cakile -caking -cakra -cakravartin -Cal -Cal. -calaba -Calabar -calabar-bean -Calabari -Calabasas -calabash -calabashes -calabaza -calabazilla -calaber -calaboose -calabooses -calabozo -calabrasella -Calabrese -Calabresi -Calabria -Calabrian -calabrians -calabur -calade -Caladium -caladiums -Calah -calahan -Calais -calaite -Calakmul -calalu -Calama -Calamagrostis -calamanco -calamancoes -calamancos -calamander -calamansi -calamar -calamari -calamary -Calamariaceae -calamariaceous -Calamariales -calamarian -calamaries -calamarioid -calamarmar -calamaroid -calamars -calambac -calambour -calami -calamiferious -calamiferous -calamiform -calaminary -calaminaris -calamine -calamined -calamines -calamining -calamint -Calamintha -calamints -calamistral -calamistrate -calamistrum -calamite -calamitean -Calamites -calamity -calamities -calamity's -calamitoid -calamitous -calamitously -calamitousness -calamitousnesses -Calamodendron -calamondin -Calamopitys -Calamospermae -Calamostachys -calamumi -calamus -Calan -calander -calando -Calandra -calandre -Calandria -Calandridae -Calandrinae -Calandrinia -calangay -calanid -calanque -calantas -Calantha -Calanthe -Calapan -calapite -calapitte -Calappa -Calappidae -Calas -calascione -calash -calashes -calastic -Calathea -calathi -calathian -calathidia -calathidium -calathiform -calathisci -calathiscus -calathos -calaththi -calathus -Calatrava -calavance -calaverite -Calbert -calbroben -calc -calc- -calcaemia -calcaire -calcanea -calcaneal -calcanean -calcanei -calcaneoastragalar -calcaneoastragaloid -calcaneocuboid -calcaneofibular -calcaneonavicular -calcaneoplantar -calcaneoscaphoid -calcaneotibial -calcaneum -calcaneus -calcannea -calcannei -calc-aphanite -calcar -calcarate -calcarated -Calcarea -calcareo- -calcareoargillaceous -calcareobituminous -calcareocorneous -calcareosiliceous -calcareosulphurous -calcareous -calcareously -calcareousness -calcaria -calcariferous -calcariform -calcarine -calcarium -calcars -calcate -calcavella -calceate -calced -calcedon -calcedony -calceiform -calcemia -Calceolaria -calceolate -calceolately -calces -calce-scence -calceus -Calchaqui -Calchaquian -Calchas -calche -calci -calci- -calcic -calciclase -calcicole -calcicolous -calcicosis -Calcydon -calciferol -Calciferous -calcify -calcific -calcification -calcifications -calcified -calcifies -calcifying -calciform -calcifugal -calcifuge -calcifugous -calcigenous -calcigerous -calcimeter -calcimine -calcimined -calciminer -calcimines -calcimining -calcinable -calcinate -calcination -calcinator -calcinatory -calcine -calcined -calciner -calcines -calcining -calcinize -calcino -calcinosis -calcio- -calciobiotite -calciocarnotite -calcioferrite -calcioscheelite -calciovolborthite -calcipexy -calciphylactic -calciphylactically -calciphylaxis -calciphile -calciphilia -calciphilic -calciphilous -calciphyre -calciphobe -calciphobic -calciphobous -calciprivic -calcisponge -Calcispongiae -calcite -calcites -calcitestaceous -calcitic -calcitonin -calcitrant -calcitrate -calcitration -calcitreation -calcium -calciums -calcivorous -calco- -calcographer -calcography -calcographic -calcomp -calcrete -calcsinter -calc-sinter -calcspar -calc-spar -calcspars -calctufa -calc-tufa -calctufas -calctuff -calc-tuff -calctuffs -calculability -calculabilities -calculable -calculableness -calculably -Calculagraph -calcular -calculary -calculate -calculated -calculatedly -calculatedness -calculates -calculating -calculatingly -calculation -calculational -calculations -calculative -calculator -calculatory -calculators -calculator's -calculer -calculi -calculiform -calculifrage -calculist -calculous -calculus -calculuses -Calcutta -caldadaria -caldaria -caldarium -Caldeira -calden -Calder -Caldera -calderas -Calderca -calderium -Calderon -CaldoraCaldwell -caldron -caldrons -Caldwell -Cale -calean -Caleb -Calebite -calebites -caleche -caleches -Caledonia -Caledonian -caledonite -calef -calefacient -calefaction -calefactive -calefactor -calefactory -calefactories -calefy -calelectric -calelectrical -calelectricity -calembour -Calemes -Calen -calenda -calendal -calendar -calendared -calendarer -calendarial -calendarian -calendaric -calendaring -calendarist -calendar-making -calendars -calendar's -calendas -Calender -calendered -calenderer -calendering -calenders -Calendra -Calendre -calendry -calendric -calendrical -calends -Calendula -calendulas -calendulin -calentural -calenture -calentured -calenturing -calenturish -calenturist -calepin -Calera -calesa -calesas -calescence -calescent -calesero -calesin -Calesta -Caletor -Calexico -calf -calfbound -calfdozer -calfhood -calfish -calfkill -calfless -calflike -calfling -calfret -calfs -calf's-foot -calfskin -calf-skin -calfskins -Calgary -calgon -Calhan -Calhoun -Cali -cali- -Calia -Caliban -Calibanism -caliber -calibered -calibers -calybite -calibogus -calibrate -calibrated -calibrater -calibrates -calibrating -calibration -calibrations -calibrator -calibrators -calibre -calibred -calibres -Caliburn -Caliburno -calic -Calica -calycanth -Calycanthaceae -calycanthaceous -calycanthemy -calycanthemous -calycanthin -calycanthine -Calycanthus -calicate -calycate -Calyce -calyceal -Calyceraceae -calyceraceous -calices -calyces -caliche -caliches -calyciferous -calycifloral -calyciflorate -calyciflorous -caliciform -calyciform -calycinal -calycine -calicle -calycle -calycled -calicles -calycles -calycli -calico -calicoback -Calycocarpum -calicoed -calicoes -calycoid -calycoideous -Calycophora -Calycophorae -calycophoran -calicos -Calycozoa -calycozoan -calycozoic -calycozoon -calicular -calycular -caliculate -calyculate -calyculated -calycule -caliculi -calyculi -caliculus -calyculus -Calicut -calid -Calida -calidity -Calydon -Calydonian -caliduct -Calie -Caliente -Calif -Calif. -califate -califates -Califon -California -Californian -californiana -californians -californicus -californite -Californium -califs -caliga -caligate -caligated -caligation -caliginosity -caliginous -caliginously -caliginousness -caligo -caligrapher -caligraphy -Caligula -caligulism -calili -calimanco -calimancos -Calymene -Calimere -Calimeris -calymma -calin -calina -Calinago -calinda -calindas -caline -Calinog -calinut -Calio -caliology -caliological -caliologist -Calion -calyon -calipash -calipashes -Calipatria -calipee -calipees -caliper -calipered -caliperer -calipering -calipers -calipeva -caliph -caliphal -caliphate -caliphates -calyphyomy -caliphs -caliphship -calippic -Calippus -calypsist -Calypso -calypsoes -calypsonian -Calypsos -calypter -Calypterae -calypters -Calyptoblastea -calyptoblastic -Calyptorhynchus -calyptra -Calyptraea -Calyptranthes -calyptras -Calyptrata -Calyptratae -calyptrate -calyptriform -calyptrimorphous -calyptro -calyptrogen -Calyptrogyne -Calisa -calisaya -calisayas -Calise -Calista -Calysta -Calystegia -calistheneum -calisthenic -calisthenical -calisthenics -Calistoga -Calite -caliver -calix -calyx -calyxes -Calixtin -Calixtine -Calixto -Calixtus -calk -calkage -calked -calker -calkers -calkin -calking -Calkins -calks -Call -Calla -calla- -callable -callaesthetic -Callaghan -Callahan -callainite -callais -callaloo -callaloos -Callan -Callands -callans -callant -callants -Callao -Callas -callat -callate -Callaway -callback -callbacks -call-board -callboy -callboys -call-down -Calle -Callean -called -Calley -Callender -Callensburg -caller -Callery -callers -Calles -callet -callets -call-fire -Calli -Cally -calli- -Callianassa -Callianassidae -Calliandra -Callicarpa -Callicebus -Callicoon -Callicrates -callid -Callida -Callidice -callidity -callidness -Callie -calligram -calligraph -calligrapha -calligrapher -calligraphers -calligraphy -calligraphic -calligraphical -calligraphically -calligraphist -Calliham -Callimachus -calling -calling-down -calling-over -callings -Callynteria -Callionymidae -Callionymus -Calliope -calliopean -calliopes -calliophone -Calliopsis -callipash -callipee -callipees -calliper -callipered -calliperer -callipering -callipers -Calliphora -calliphorid -Calliphoridae -calliphorine -callipygian -callipygous -Callipolis -callippic -Callippus -Callipus -Callirrhoe -Callisaurus -callisection -callis-sand -Callista -Calliste -callisteia -Callistemon -Callistephus -callisthenic -callisthenics -Callisto -Callithrix -callithump -callithumpian -callitype -callityped -callityping -Callitrichaceae -callitrichaceous -Callitriche -Callitrichidae -Callitris -callo -call-off -calloo -callop -Callorhynchidae -Callorhynchus -callosal -callose -calloses -callosity -callosities -callosomarginal -callosum -Callot -callous -calloused -callouses -callousing -callously -callousness -callousnesses -callout -call-out -call-over -Callovian -callow -Calloway -callower -callowest -callowman -callowness -callownesses -calls -Callum -Calluna -Calluori -call-up -callus -callused -calluses -callusing -calm -calmant -Calmar -Calmas -calmative -calmato -calmecac -calmed -calm-eyed -calmer -calmest -calmy -calmier -calmierer -calmiest -calming -calmingly -calmly -calm-minded -calmness -calmnesses -calms -calm-throated -calo- -Calocarpum -Calochortaceae -Calochortus -calodaemon -calodemon -calodemonial -calogram -calography -caloyer -caloyers -calomba -calombigas -calombo -calomel -calomels -calomorphic -Calondra -Calonectria -Calonyction -Calon-segur -calool -Calophyllum -Calopogon -calor -Calore -caloreceptor -calorescence -calorescent -calory -caloric -calorically -caloricity -calorics -caloriduct -Calorie -calorie-counting -calories -calorie's -calorifacient -calorify -calorific -calorifical -calorifically -calorification -calorifics -calorifier -calorigenic -calorimeter -calorimeters -calorimetry -calorimetric -calorimetrical -calorimetrically -calorimotor -caloris -calorisator -calorist -Calorite -calorize -calorized -calorizer -calorizes -calorizing -Calosoma -Calotermes -calotermitid -Calotermitidae -Calothrix -calotin -calotype -calotypic -calotypist -calotte -calottes -calp -calpac -calpack -calpacked -calpacks -calpacs -Calpe -calpolli -calpul -calpulli -Calpurnia -calque -calqued -calques -calquing -CALRS -CALS -calsouns -Caltanissetta -Caltech -Caltha -calthrop -calthrops -caltrap -caltraps -caltrop -caltrops -calumba -Calumet -calumets -calumny -calumnia -calumniate -calumniated -calumniates -calumniating -calumniation -calumniations -calumniative -calumniator -calumniatory -calumniators -calumnies -calumnious -calumniously -calumniousness -caluptra -Calusa -calusar -calutron -calutrons -Calv -Calva -Calvados -calvadoses -calvaire -Calvano -Calvary -calvaria -calvarial -calvarias -Calvaries -calvarium -Calvatia -Calve -calved -calver -Calvert -Calverton -calves -Calvin -Calvina -calving -Calvinian -Calvinism -Calvinist -Calvinistic -Calvinistical -Calvinistically -calvinists -Calvinize -Calvinna -calvish -calvity -calvities -Calvo -calvous -calvus -calx -calxes -calzada -calzone -calzoneras -calzones -calzoons -CAM -CAMA -CAMAC -camaca -Camacan -camacey -camachile -Camacho -Camag -camagon -Camaguey -camay -camaieu -camail -camaile -camailed -camails -Camak -camaka -Camala -Camaldolensian -Camaldolese -Camaldolesian -Camaldolite -Camaldule -Camaldulian -camalig -camalote -caman -camanay -camanchaca -Camanche -camansi -camara -camarada -camarade -camaraderie -camaraderies -Camarasaurus -Camarata -camarera -Camargo -camarilla -camarillas -Camarillo -camarin -camarine -camaron -Camas -camases -camass -camasses -Camassia -camata -camatina -camauro -camauros -Camaxtli -Camb -Camb. -Cambay -cambaye -Camball -Cambalo -Cambarus -camber -cambered -cambering -camber-keeled -cambers -Camberwell -Cambeva -Camby -cambia -cambial -cambiata -cambibia -cambiform -cambio -cambiogenetic -cambion -Cambyses -cambism -cambisms -cambist -cambistry -cambists -cambium -cambiums -Cambyuskan -camblet -Cambodia -Cambodian -cambodians -camboge -cambogia -cambogias -Cambon -camboose -Camborne-Redruth -cambouis -Cambra -Cambrai -cambrel -cambresine -Cambria -Cambrian -Cambric -cambricleaf -cambrics -Cambridge -Cambridgeport -Cambridgeshire -Cambro-briton -Cambs -cambuca -Cambuscan -Camden -Camdenton -Came -Camey -cameist -Camel -camelback -camel-backed -cameleer -cameleers -cameleon -camel-faced -camel-grazing -camelhair -camel-hair -camel-haired -camelia -camel-yarn -camelias -Camelid -Camelidae -Camelina -cameline -camelion -camelish -camelishness -camelkeeper -camel-kneed -Camella -Camellia -Camelliaceae -camellias -camellike -camellin -Camellus -camelman -cameloid -Cameloidea -camelopard -Camelopardalis -camelopardel -Camelopardid -Camelopardidae -camelopards -Camelopardus -Camelot -camelry -camels -camel's -camel's-hair -camel-shaped -Camelus -Camembert -Camena -Camenae -Camenes -Cameo -cameoed -cameograph -cameography -cameoing -cameos -camera -camerae -camera-eye -cameral -cameralism -cameralist -cameralistic -cameralistics -cameraman -cameramen -cameras -camera's -camera-shy -Camerata -camerate -camerated -cameration -camerawork -camery -camerier -cameriera -camerieri -Camerina -camerine -Camerinidae -camerist -camerlengo -camerlengos -camerlingo -camerlingos -Cameron -Cameronian -cameronians -Cameroon -cameroonian -cameroonians -Cameroons -Cameroun -cames -Camestres -Camfort -Cami -camias -Camiguin -camiknickers -Camila -Camile -Camilia -Camilla -Camille -Camillo -Camillus -Camilo -Camino -camion -camions -Camirus -camis -camisa -camisade -camisades -camisado -camisadoes -camisados -Camisard -camisas -camiscia -camise -camises -camisia -camisias -camisole -camisoles -camister -camize -camla -camlet -camleted -camleteen -camletine -camleting -camlets -camletted -camletting -CAMM -Cammaerts -Cammal -Cammarum -cammas -cammed -Cammi -Cammy -Cammie -cammock -cammocky -camoca -Camoens -camogie -camois -camomile -camomiles -camooch -camoodi -camoodie -Camorist -Camorra -camorras -Camorrism -Camorrist -Camorrista -camorristi -camote -camoudie -camouflage -camouflageable -camouflaged -camouflager -camouflagers -camouflages -camouflagic -camouflaging -camouflet -camoufleur -camoufleurs -CAMP -Campa -campagi -Campagna -Campagne -campagnol -campagnols -campagus -campaign -campaigned -campaigner -campaigners -campaigning -campaigns -campal -campana -campane -campanella -campanero -Campania -Campanian -campaniform -campanile -campaniles -campanili -campaniliform -campanilla -campanini -campanist -campanistic -campanologer -campanology -campanological -campanologically -campanologist -campanologists -Campanula -Campanulaceae -campanulaceous -Campanulales -campanular -Campanularia -Campanulariae -campanularian -Campanularidae -Campanulatae -campanulate -campanulated -campanulous -Campanus -Campari -Campaspe -Campball -Campbell -Campbell-Bannerman -Campbellism -campbellisms -Campbellite -campbellites -Campbellsburg -Campbellsville -Campbellton -Campbelltown -Campbeltown -campcraft -Campe -Campeche -camped -campement -Campephagidae -campephagine -Campephilus -camper -campers -campership -campesino -campesinos -campestral -campestrian -campfight -camp-fight -campfire -campfires -campground -campgrounds -camph- -camphane -camphanic -camphanyl -camphanone -camphene -camphenes -camphylene -camphine -camphines -camphire -camphires -campho -camphocarboxylic -camphoid -camphol -campholic -campholide -campholytic -camphols -camphor -camphoraceous -camphorate -camphorated -camphorates -camphorating -camphory -camphoric -camphoryl -camphorize -camphoroyl -camphorone -camphoronic -camphorphorone -camphors -camphorweed -camphorwood -campi -Campy -campier -campiest -Campignian -campilan -campily -campylite -campylodrome -campylometer -Campyloneuron -campylospermous -campylotropal -campylotropous -campimeter -campimetry -campimetrical -Campinas -Campine -campiness -camping -campings -Campion -campions -campit -cample -Campman -campmaster -camp-meeting -Campney -Campo -Campobello -Campodea -campodean -campodeid -Campodeidae -campodeiform -campodeoid -campody -Campoformido -campong -campongs -Camponotus -campoo -campoody -Camporeale -camporee -camporees -Campos -campout -camp-out -camps -campshed -campshedding -camp-shedding -campsheeting -campshot -camp-shot -campsite -camp-site -campsites -campstool -campstools -Campti -camptodrome -Campton -camptonite -Camptonville -Camptosorus -Camptown -campulitropal -campulitropous -campus -campused -campuses -campus's -campusses -campward -Campwood -CAMRA -cams -camshach -camshachle -camshaft -camshafts -camstane -camsteary -camsteery -camstone -camstrary -Camuy -camuning -Camus -camuse -camused -camuses -camwood -cam-wood -CAN -Can. -Cana -Canaan -Canaanite -canaanites -Canaanitess -Canaanitic -Canaanitish -canaba -canabae -Canace -Canacee -canacuas -Canad -Canad. -Canada -Canadensis -Canadian -Canadianism -canadianisms -Canadianization -Canadianize -Canadianized -Canadianizing -canadians -canadine -Canadys -canadite -canadol -canafistola -canafistolo -canafistula -canafistulo -canaglia -canaigre -canaille -canailles -Canajoharie -canajong -canakin -canakins -Canakkale -canal -canalage -canalatura -canalboat -canal-bone -canal-built -Canale -canaled -canaler -canales -canalete -Canaletto -canali -canalicular -canaliculate -canaliculated -canaliculation -canaliculi -canaliculization -canaliculus -canaliferous -canaliform -canaling -canalis -canalisation -canalise -canalised -canalises -canalising -canalization -canalizations -canalize -canalized -canalizes -canalizing -canalla -canalled -canaller -canallers -canalling -canalman -Canalou -canals -canal's -canalside -Canamary -canamo -Cananaean -Canandaigua -Canandelabrum -Cananea -Cananean -Cananga -Canangium -canap -canape -canapes -canapina -Canara -canard -canards -Canarese -Canari -Canary -Canarian -canary-bird -Canaries -canary-yellow -canarin -canarine -Canariote -canary's -Canarium -Canarsee -Canaseraga -canasta -canastas -canaster -Canastota -canaut -Canavali -Canavalia -canavalin -Canaveral -can-beading -Canberra -Canby -can-boxing -can-buoy -can-burnishing -canc -canc. -cancan -can-can -cancans -can-capping -canccelli -cancel -cancelability -cancelable -cancelation -canceled -canceleer -canceler -cancelers -cancelier -canceling -cancellability -cancellable -cancellarian -cancellarius -cancellate -cancellated -cancellation -cancellations -cancellation's -cancelled -canceller -cancelli -cancelling -cancellous -cancellus -cancelment -cancels -Cancer -cancerate -cancerated -cancerating -canceration -cancerdrops -cancered -cancerigenic -cancerin -cancerism -cancerite -cancerization -cancerlog -cancerogenic -cancerophobe -cancerophobia -cancerous -cancerously -cancerousness -cancerphobia -cancerroot -cancers -cancer's -cancerweed -cancerwort -canch -cancha -canchalagua -canchas -Canchi -canchito -cancion -cancionero -canciones -can-cleaning -can-closing -Cancri -Cancrid -cancriform -can-crimping -cancrine -cancrinite -cancrinite-syenite -cancrisocial -cancrivorous -cancrizans -cancroid -cancroids -cancrophagous -cancrum -cancrums -Cancun -Cand -Candace -candareen -Candee -candela -candelabra -candelabras -candelabrum -candelabrums -candelas -candelilla -candency -candent -candescence -candescent -candescently -Candi -Candy -Candia -Candice -Candyce -candid -Candida -candidacy -candidacies -candidas -candidate -candidated -candidates -candidate's -candidateship -candidating -candidature -candidatures -Candide -candider -candidest -candidiasis -candidly -candidness -candidnesses -candids -Candie -candied -candiel -candier -candies -candify -candyfloss -candyh -candying -candil -candylike -candymaker -candymaking -Candiot -Candiote -candiru -Candis -candys -candystick -candy-striped -candite -candytuft -candyweed -candle -candleball -candlebeam -candle-beam -candle-bearing -candleberry -candleberries -candlebomb -candlebox -candle-branch -candled -candle-dipper -candle-end -candlefish -candlefishes -candle-foot -candleholder -candle-holder -candle-hour -candlelight -candlelighted -candlelighter -candle-lighter -candlelighting -candlelights -candlelit -candlemaker -candlemaking -Candlemas -candle-meter -candlenut -candlepin -candlepins -candlepower -Candler -candlerent -candle-rent -candlers -candles -candle-shaped -candleshine -candleshrift -candle-snuff -candlesnuffer -Candless -candlestand -candlestick -candlesticked -candlesticks -candlestick's -candlestickward -candle-tapering -candle-tree -candlewaster -candle-waster -candlewasting -candlewick -candlewicking -candlewicks -candlewood -candle-wood -candlewright -candling -Cando -candock -can-dock -Candolle -Candollea -Candolleaceae -candolleaceous -Candor -candors -candour -candours -Candra -candroy -candroys -canduc -cane -Canea -Caneadea -cane-backed -cane-bottomed -Canebrake -canebrakes -caned -Caneghem -Caney -Caneyville -canel -canela -canelas -canelike -canell -canella -Canellaceae -canellaceous -canellas -canelle -Canelo -canelos -Canens -caneology -canephor -canephora -canephorae -canephore -canephori -canephoroe -canephoroi -canephoros -canephors -canephorus -cane-phorus -canephroi -canepin -caner -caners -canes -canescence -canescene -canescent -cane-seated -Canestrato -caneton -canette -caneva -Canevari -caneware -canewares -canewise -canework -canezou -CanF -Canfield -canfieldite -canfields -can-filling -can-flanging -canful -canfuls -cangan -cangenet -cangy -cangia -cangica-wood -cangle -cangler -cangue -cangues -canham -can-heading -can-hook -canhoop -cany -Canica -Canice -Canichana -Canichanan -canicide -canicola -Canicula -canicular -canicule -canid -Canidae -Canidia -canids -Caniff -canikin -canikins -canille -caninal -canine -canines -caning -caniniform -caninity -caninities -caninus -canion -Canyon -canioned -canions -canyons -canyon's -canyonside -Canyonville -Canis -Canisiana -canistel -Canisteo -canister -canisters -Canistota -canities -canjac -Canjilon -cank -canker -cankerberry -cankerbird -canker-bit -canker-bitten -cankereat -canker-eaten -cankered -cankeredly -cankeredness -cankerflower -cankerfret -canker-hearted -cankery -cankering -canker-mouthed -cankerous -cankerroot -cankers -canker-toothed -cankerweed -cankerworm -cankerworms -cankerwort -can-labeling -can-lacquering -canli -can-lining -canmaker -canmaking -canman -can-marking -Canmer -Cann -Canna -cannabic -cannabidiol -cannabin -Cannabinaceae -cannabinaceous -cannabine -cannabinol -cannabins -Cannabis -cannabises -cannabism -Cannaceae -cannaceous -cannach -canna-down -Cannae -cannaled -cannalling -Cannanore -cannas -cannat -canned -cannel -cannelated -cannel-bone -Cannelburg -cannele -Cannell -cannellate -cannellated -cannelle -cannelloni -cannelon -cannelons -cannels -Cannelton -cannelure -cannelured -cannequin -canner -cannery -canneries -canners -canner's -Cannes -cannet -cannetille -canny -cannibal -cannibalean -cannibalic -cannibalish -cannibalism -cannibalisms -cannibalistic -cannibalistically -cannibality -cannibalization -cannibalize -cannibalized -cannibalizes -cannibalizing -cannibally -cannibals -cannibal's -Cannice -cannie -cannier -canniest -cannikin -cannikins -cannily -canniness -canninesses -Canning -cannings -cannister -cannisters -cannister's -Cannizzaro -Cannock -cannoli -Cannon -cannonade -cannonaded -cannonades -cannonading -cannonarchy -cannonball -cannon-ball -cannonballed -cannonballing -cannonballs -cannoned -cannoneer -cannoneering -cannoneers -cannonier -cannoning -Cannonism -cannonproof -cannon-proof -cannonry -cannonries -cannon-royal -cannons -cannon's -Cannonsburg -cannon-shot -Cannonville -cannophori -cannot -Cannstatt -cannula -cannulae -cannular -cannulas -Cannulate -cannulated -cannulating -cannulation -canoe -canoed -canoeing -Canoeiro -canoeist -canoeists -canoeload -canoeman -canoes -canoe's -canoewood -Canoga -canoing -Canon -canoncito -Canones -canoness -canonesses -canonic -canonical -canonicalization -canonicalize -canonicalized -canonicalizes -canonicalizing -canonically -canonicalness -canonicals -canonicate -canonici -canonicity -canonics -canonisation -canonise -canonised -canoniser -canonises -canonising -canonist -canonistic -canonistical -canonists -canonizant -canonization -canonizations -canonize -canonized -canonizer -canonizes -canonizing -canonlike -canonry -canonries -canons -canon's -Canonsburg -canonship -canoodle -canoodled -canoodler -canoodles -canoodling -can-opener -can-opening -canopy -Canopic -canopid -canopied -canopies -canopying -Canopus -canorous -canorously -canorousness -canos -Canossa -Canotas -canotier -Canova -Canovanas -can-polishing -can-quaffing -canreply -Canrobert -canroy -canroyer -cans -can's -can-salting -can-scoring -can-sealing -can-seaming -cansful -can-slitting -Canso -can-soldering -cansos -can-squeezing -canst -can-stamping -can-sterilizing -canstick -Cant -can't -Cant. -Cantab -cantabank -cantabile -Cantabri -Cantabrian -Cantabrigian -Cantabrize -Cantacuzene -cantador -Cantal -cantala -cantalas -cantalever -cantalite -cantaliver -cantaloup -cantaloupe -cantaloupes -cantando -cantankerous -cantankerously -cantankerousness -cantankerousnesses -cantar -cantara -cantare -cantaro -cantata -cantatas -Cantate -cantation -cantative -cantator -cantatory -cantatrice -cantatrices -cantatrici -cantboard -cantdog -cantdogs -canted -canteen -canteens -cantefable -cantel -Canter -Canterbury -Canterburian -Canterburianism -canterburies -cantered -canterelle -canterer -cantering -canters -can-testing -canthal -Cantharellus -canthari -cantharic -Cantharidae -cantharidal -cantharidate -cantharidated -cantharidating -cantharidean -cantharides -cantharidian -cantharidin -cantharidism -cantharidize -cantharidized -cantharidizing -cantharis -cantharophilous -cantharus -canthathari -canthectomy -canthi -canthitis -cantholysis -canthoplasty -canthorrhaphy -canthotomy -Canthus -canthuthi -Canty -cantic -canticle -Canticles -cantico -cantiga -Cantigny -Cantil -cantilated -cantilating -cantilena -cantilene -cantilenes -cantilever -cantilevered -cantilevering -cantilevers -cantily -cantillate -cantillated -cantillating -cantillation -Cantillon -cantina -cantinas -cantiness -canting -cantingly -cantingness -cantinier -cantino -cantion -cantish -cantle -cantles -cantlet -cantline -cantling -Cantlon -canto -Canton -cantonal -cantonalism -Cantone -cantoned -cantoner -Cantonese -cantoning -cantonize -Cantonment -cantonments -cantons -canton's -cantoon -Cantor -cantoral -cantoria -cantorial -Cantorian -cantoris -cantorous -cantors -cantor's -cantorship -Cantos -cantraip -cantraips -Cantrall -cantrap -cantraps -cantred -cantref -Cantril -cantrip -cantrips -cants -Cantu -Cantuar -cantus -cantut -cantuta -cantwise -Canuck -canula -canulae -canular -canulas -canulate -canulated -canulates -canulating -canun -Canute -Canutillo -canvas -canvasado -canvasback -canvas-back -canvasbacks -canvas-covered -canvased -canvaser -canvasers -canvases -canvasing -canvaslike -canvasman -canvass -canvas's -canvassed -canvasser -canvassers -canvasses -canvassy -canvassing -can-washing -can-weighing -can-wiping -can-wrapping -canzo -canzon -canzona -canzonas -canzone -canzones -canzonet -canzonets -canzonetta -canzoni -canzos -caoba -Caodaism -Caodaist -caoine -caon -caoutchin -caoutchouc -caoutchoucin -CAP -cap. -capa -capability -capabilities -capability's -Capablanca -capable -capableness -capabler -capablest -capably -Capac -capacify -capacious -capaciously -capaciousness -capacitance -capacitances -capacitate -capacitated -capacitates -capacitating -capacitation -capacitations -capacitative -capacitativly -capacitator -capacity -capacities -capacitive -capacitively -capacitor -capacitors -capacitor's -Capaneus -capanna -capanne -cap-a-pie -caparison -caparisoned -caparisoning -caparisons -capataces -capataz -capax -capcase -cap-case -Cape -capeador -capeadores -capeadors -caped -Capefair -Capek -capel -capelan -capelans -capelet -capelets -capelin -capeline -capelins -Capella -capellane -capellet -capelline -Capello -capelocracy -Capels -Capemay -cape-merchant -Capeneddick -caper -caperbush -capercailye -capercaillie -capercailzie -capercally -capercut -caper-cut -caperdewsie -capered -caperer -caperers -capering -caperingly -Capernaism -Capernaite -Capernaitic -Capernaitical -Capernaitically -Capernaitish -Capernaum -capernoited -capernoity -capernoitie -capernutie -capers -capersome -capersomeness -caperwort -capes -capeskin -capeskins -Capet -Capetian -Capetonian -Capetown -capette -Capeville -capeweed -capewise -capework -capeworks -cap-flash -capful -capfuls -Caph -Cap-Haitien -caphar -capharnaism -Caphaurus -caphite -caphs -Caphtor -Caphtorim -capias -capiases -capiatur -capibara -capybara -capybaras -capicha -capilaceous -capillaceous -capillaire -capillament -capillarectasia -capillary -capillaries -capillarily -capillarimeter -capillariness -capillariomotor -capillarity -capillarities -capillaritis -capillation -capillatus -capilli -capilliculture -capilliform -capillitia -capillitial -capillitium -capillose -capillus -capilotade -caping -cap-in-hand -Capys -Capistrano -capistrate -capita -capital -capitaldom -capitaled -capitaling -capitalisable -capitalise -capitalised -capitaliser -capitalising -capitalism -capitalist -capitalistic -capitalistically -capitalists -capitalist's -capitalizable -capitalization -capitalizations -capitalize -capitalized -capitalizer -capitalizers -capitalizes -capitalizing -capitally -capitalness -capitals -Capitan -capitana -capitano -capitare -capitasti -capitate -capitated -capitatim -capitation -capitations -capitative -capitatum -capite -capiteaux -capitella -capitellar -capitellate -capitelliform -capitellum -capitle -Capito -Capitol -Capitola -Capitolian -Capitoline -Capitolium -capitols -capitol's -Capitonidae -Capitoninae -capitoul -capitoulate -capitula -capitulant -capitular -capitulary -capitularies -capitularly -capitulars -capitulate -capitulated -capitulates -capitulating -capitulation -capitulations -capitulator -capitulatory -capituliform -capitulum -capiturlary -capivi -Capiz -capkin -Caplan -capless -caplet -caplets -caplin -capling -caplins -caplock -capmaker -capmakers -capmaking -capman -capmint -Cap'n -Capnodium -Capnoides -capnomancy -capnomor -capo -capoc -capocchia -capoche -Capodacqua -capomo -Capon -caponata -caponatas -Capone -caponette -caponier -caponiere -caponiers -caponisation -caponise -caponised -caponiser -caponising -caponization -caponize -caponized -caponizer -caponizes -caponizing -caponniere -capons -caporal -caporals -Caporetto -capos -capot -capotasto -capotastos -Capote -capotes -capouch -capouches -CAPP -cappadine -cappadochio -Cappadocia -Cappadocian -cappae -cappagh -cap-paper -capparid -Capparidaceae -capparidaceous -Capparis -capped -cappelenite -Cappella -cappelletti -Cappello -capper -cappers -cappy -cappie -cappier -cappiest -capping -cappings -capple -capple-faced -Cappotas -Capps -cappuccino -Capra -caprate -Caprella -Caprellidae -caprelline -capreol -capreolar -capreolary -capreolate -capreoline -Capreolus -capreomycin -capretto -Capri -capric -capriccetto -capriccettos -capricci -capriccio -capriccios -capriccioso -Caprice -caprices -capricious -capriciously -capriciousness -Capricorn -Capricorni -Capricornid -capricorns -Capricornus -caprid -caprificate -caprification -caprificator -caprifig -caprifigs -caprifoil -caprifole -Caprifoliaceae -caprifoliaceous -Caprifolium -capriform -caprigenous -capryl -caprylate -caprylene -caprylic -caprylyl -caprylin -caprylone -Caprimulgi -Caprimulgidae -Caprimulgiformes -caprimulgine -Caprimulgus -caprin -caprine -caprinic -Capriola -capriole -caprioled -caprioles -caprioling -Capriote -capriped -capripede -Capris -caprizant -caproate -caprock -caprocks -caproic -caproyl -caproin -Capromys -Capron -caprone -capronic -capronyl -caps -cap's -caps. -capsa -capsaicin -Capsella -Capshaw -capsheaf -capshore -Capsian -capsicin -capsicins -Capsicum -capsicums -capsid -Capsidae -capsidal -capsids -capsizable -capsizal -capsize -capsized -capsizes -capsizing -capsomer -capsomere -capsomers -capstan -capstan-headed -capstans -capstone -cap-stone -capstones -capsula -capsulae -capsular -capsulate -capsulated -capsulation -capsule -capsulectomy -capsuled -capsuler -capsules -capsuli- -capsuliferous -capsuliform -capsuligerous -capsuling -capsulitis -capsulize -capsulized -capsulizing -capsulociliary -capsulogenous -capsulolenticular -capsulopupillary -capsulorrhaphy -capsulotome -capsulotomy -capsumin -Capt -Capt. -captacula -captaculum -CAPTAIN -captaincy -captaincies -Captaincook -captained -captainess -captain-generalcy -captaining -captainly -captain-lieutenant -captainry -captainries -captains -captainship -captainships -captan -captance -captandum -captans -captate -captation -caption -captioned -captioning -captionless -captions -caption's -captious -captiously -captiousness -Captiva -captivance -captivate -captivated -captivately -captivates -captivating -captivatingly -captivation -captivations -captivative -captivator -captivators -captivatrix -captive -captived -captives -captive's -captiving -captivity -captivities -captor -captors -captor's -captress -capturable -capture -captured -capturer -capturers -captures -capturing -Capua -Capuan -Capuanus -capuche -capuched -capuches -Capuchin -capuchins -capucine -Capulet -capuli -Capulin -caput -Caputa -caputium -Caputo -Caputto -Capuzzo -Capwell -caque -Caquet -caqueterie -caqueteuse -caqueteuses -Caquetio -caquetoire -caquetoires -CAR -Cara -Carabancel -carabao -carabaos -carabeen -carabid -Carabidae -carabidan -carabideous -carabidoid -carabids -carabin -carabine -carabineer -carabiner -carabinero -carabineros -carabines -Carabini -carabinier -carabiniere -carabinieri -carabins -caraboa -caraboid -Carabus -caracal -Caracalla -caracals -caracara -caracaras -Caracas -carack -caracks -caraco -caracoa -caracol -caracole -caracoled -caracoler -caracoles -caracoli -caracoling -caracolite -caracolled -caracoller -caracolling -caracols -caracora -caracore -caract -Caractacus -caracter -caracul -caraculs -Caradoc -Caradon -carafe -carafes -carafon -Caragana -caraganas -carageen -carageens -caragheen -Caraguata -Caraho -Carayan -caraibe -Caraipa -caraipe -caraipi -Caraja -Carajas -carajo -carajura -Caralie -caramba -carambola -carambole -caramboled -caramboling -caramel -caramelan -caramelen -caramelin -caramelisation -caramelise -caramelised -caramelising -caramelization -caramelize -caramelized -caramelizes -caramelizing -caramels -caramoussal -Caramuel -carancha -carancho -caranda -caranday -Carandas -carane -Caranga -carangid -Carangidae -carangids -carangin -carangoid -Carangus -caranna -Caranx -carap -Carapa -carapace -carapaced -carapaces -Carapache -Carapacho -carapacial -carapacic -carapato -carapax -carapaxes -Carapidae -carapine -carapo -Carapus -Carara -Caras -carassow -carassows -carat -caratacus -caratch -carate -carates -Caratinga -carats -Caratunk -carauna -caraunda -Caravaggio -caravan -caravaned -caravaneer -caravaner -caravaning -caravanist -caravanned -caravanner -caravanning -caravans -caravan's -caravansary -caravansaries -caravanserai -caravanserial -caravel -caravelle -caravels -Caravette -Caraviello -caraway -caraways -Caraz -carb -carb- -carbachol -carbacidometer -carbamate -carbamic -carbamide -carbamidine -carbamido -carbamyl -carbamyls -carbamine -carbamino -carbamoyl -carbanil -carbanilic -carbanilid -carbanilide -carbanion -carbaryl -carbaryls -carbarn -carbarns -carbasus -carbazic -carbazide -carbazylic -carbazin -carbazine -carbazole -carbeen -carbene -Carberry -carbethoxy -carbethoxyl -carby -carbide -carbides -carbyl -carbylamine -carbimide -carbin -carbine -carbineer -carbineers -carbines -carbinyl -carbinol -carbinols -Carbo -carbo- -carboazotine -carbocer -carbocyclic -carbocinchomeronic -carbodiimide -carbodynamite -carbogelatin -carbohemoglobin -carbohydrase -carbohydrate -carbo-hydrate -carbohydrates -carbohydraturia -carbohydrazide -carbohydride -carbohydrogen -carboy -carboyed -carboys -carbolate -carbolated -carbolating -carbolfuchsin -carbolic -carbolics -carboline -carbolineate -Carbolineum -carbolise -carbolised -carbolising -carbolize -carbolized -carbolizes -carbolizing -Carboloy -carboluria -carbolxylol -carbomethene -carbomethoxy -carbomethoxyl -carbomycin -carbon -Carbona -carbonaceous -carbonade -Carbonado -carbonadoed -carbonadoes -carbonadoing -carbonados -Carbonari -Carbonarism -Carbonarist -Carbonaro -carbonatation -carbonate -carbonated -carbonates -carbonating -carbonation -carbonations -carbonatization -carbonator -carbonators -Carboncliff -Carbondale -Carbone -carboned -carbonemia -carbonero -carbones -Carboni -carbonic -carbonide -Carboniferous -carbonify -carbonification -carbonigenous -carbonyl -carbonylate -carbonylated -carbonylating -carbonylation -carbonylene -carbonylic -carbonyls -carbonimeter -carbonimide -carbonisable -carbonisation -carbonise -carbonised -carboniser -carbonising -carbonite -carbonitride -carbonium -carbonizable -carbonization -carbonize -carbonized -carbonizer -carbonizers -carbonizes -carbonizing -carbonless -Carbonnieux -carbonometer -carbonometry -carbonous -carbons -carbon's -carbonuria -carbophilous -carbora -carboras -car-borne -Carborundum -carbosilicate -carbostyril -carboxy -carboxide -Carboxydomonas -carboxyhemoglobin -carboxyl -carboxylase -carboxylate -carboxylated -carboxylating -carboxylation -carboxylic -carboxyls -carboxypeptidase -Carbrey -carbro -carbromal -carbs -carbuilder -carbuncle -carbuncled -carbuncles -carbuncular -carbunculation -carbungi -carburan -carburant -carburate -carburated -carburating -carburation -carburator -carbure -carburet -carburetant -carbureted -carbureter -carburetest -carbureting -carburetion -carburetor -carburetors -carburets -carburetted -carburetter -carburetting -carburettor -carburisation -carburise -carburised -carburiser -carburising -carburization -carburize -carburized -carburizer -carburizes -carburizing -carburometer -carcajou -carcajous -carcake -carcan -carcanet -carcaneted -carcanets -carcanetted -Carcas -carcase -carcased -carcases -carcasing -carcass -carcassed -carcasses -carcassing -carcassless -Carcassonne -carcass's -Carcavelhos -Carce -carceag -carcel -carcels -carcer -carceral -carcerate -carcerated -carcerating -carceration -carcerist -Carcharhinus -Carcharias -carchariid -Carchariidae -carcharioid -Carcharodon -carcharodont -Carchemish -carcin- -carcinemia -carcinogen -carcinogeneses -carcinogenesis -carcinogenic -carcinogenicity -carcinogenics -carcinogens -carcinoid -carcinolysin -carcinolytic -carcinology -carcinological -carcinologist -carcinoma -carcinomas -carcinomata -carcinomatoid -carcinomatosis -carcinomatous -carcinomorphic -carcinophagous -carcinophobia -carcinopolypus -carcinosarcoma -carcinosarcomas -carcinosarcomata -Carcinoscorpius -carcinosis -carcinus -carcoon -Card -Card. -cardaissin -Cardale -Cardamine -cardamom -cardamoms -cardamon -cardamons -cardamum -cardamums -Cardanic -cardanol -Cardanus -cardboard -cardboards -card-carrier -card-carrying -cardcase -cardcases -cardcastle -card-counting -card-cut -card-cutting -card-devoted -Cardea -cardecu -carded -cardel -Cardenas -Carder -carders -Cardew -cardholder -cardholders -cardhouse -cardi- -cardia -cardiac -cardiacal -Cardiacea -cardiacean -cardiacle -cardiacs -cardiae -cardiagra -cardiagram -cardiagraph -cardiagraphy -cardial -cardialgy -cardialgia -cardialgic -cardiameter -cardiamorphia -cardianesthesia -cardianeuria -cardiant -cardiaplegia -cardiarctia -cardias -cardiasthenia -cardiasthma -cardiataxia -cardiatomy -cardiatrophia -cardiauxe -Cardiazol -cardicentesis -Cardie -cardiectasis -cardiectomy -cardiectomize -cardielcosis -cardiemphraxia -Cardiff -cardiform -Cardiga -Cardigan -cardigans -Cardiganshire -Cardiidae -Cardijn -Cardin -Cardinal -cardinalate -cardinalated -cardinalates -cardinal-bishop -cardinal-deacon -cardinalfish -cardinalfishes -cardinal-flower -cardinalic -Cardinalis -cardinalism -cardinalist -cardinality -cardinalitial -cardinalitian -cardinalities -cardinality's -cardinally -cardinal-priest -cardinal-red -cardinals -cardinalship -Cardinas -card-index -cardines -carding -cardings -Cardington -cardio- -cardioaccelerator -cardio-aortic -cardioarterial -cardioblast -cardiocarpum -cardiocele -cardiocentesis -cardiocirrhosis -cardioclasia -cardioclasis -cardiod -cardiodilator -cardiodynamics -cardiodynia -cardiodysesthesia -cardiodysneuria -cardiogenesis -cardiogenic -cardiogram -cardiograms -cardiograph -cardiographer -cardiography -cardiographic -cardiographies -cardiographs -cardiohepatic -cardioid -cardioids -cardio-inhibitory -cardiokinetic -cardiolysis -cardiolith -cardiology -cardiologic -cardiological -cardiologies -cardiologist -cardiologists -cardiomalacia -cardiomegaly -cardiomegalia -cardiomelanosis -cardiometer -cardiometry -cardiometric -cardiomyoliposis -cardiomyomalacia -cardiomyopathy -cardiomotility -cardioncus -cardionecrosis -cardionephric -cardioneural -cardioneurosis -cardionosus -cardioparplasis -cardiopath -cardiopathy -cardiopathic -cardiopericarditis -cardiophobe -cardiophobia -cardiophrenia -cardiopyloric -cardioplasty -cardioplegia -cardiopneumatic -cardiopneumograph -cardioptosis -cardiopulmonary -cardiopuncture -cardiorenal -cardiorespiratory -cardiorrhaphy -cardiorrheuma -cardiorrhexis -cardioschisis -cardiosclerosis -cardioscope -cardiosymphysis -cardiospasm -Cardiospermum -cardiosphygmogram -cardiosphygmograph -cardiotherapy -cardiotherapies -cardiotomy -cardiotonic -cardiotoxic -cardiotoxicity -cardiotoxicities -cardiotrophia -cardiotrophotherapy -cardiovascular -cardiovisceral -cardipaludism -cardipericarditis -cardisophistical -cardita -carditic -carditis -carditises -Cardito -Cardium -cardlike -cardmaker -cardmaking -cardo -cardol -Cardon -cardona -cardoncillo -cardooer -cardoon -cardoons -cardophagus -cardosanto -Cardozo -card-perforating -cardplayer -cardplaying -card-printing -cardroom -cards -cardshark -cardsharp -cardsharper -cardsharping -cardsharps -card-sorting -cardstock -Carduaceae -carduaceous -Carducci -cardueline -Carduelis -car-dumping -Carduus -Cardville -Cardwell -CARE -Careaga -care-bewitching -care-bringing -care-charming -carecloth -care-cloth -care-crazed -care-crossed -cared -care-defying -care-dispelling -care-eluding -careen -careenage -care-encumbered -careened -careener -careeners -careening -careens -career -careered -careerer -careerers -careering -careeringly -careerism -careerist -careeristic -careers -career's -carefox -care-fraught -carefree -carefreeness -careful -carefull -carefuller -carefullest -carefully -carefulness -carefulnesses -Carey -careys -Careywood -care-killing -Carel -care-laden -careless -carelessly -carelessness -carelessnesses -care-lined -careme -Caren -Carena -Carencro -carene -Carenton -carer -carers -cares -Caresa -care-scorched -caress -Caressa -caressable -caressant -Caresse -caressed -caresser -caressers -caresses -caressing -caressingly -caressive -caressively -carest -caret -caretake -caretaken -caretaker -care-taker -caretakers -caretakes -caretaking -care-tired -caretook -carets -Caretta -Carettochelydidae -care-tuned -Carew -careworn -care-wounded -Carex -carf -carfare -carfares -carfax -carfloat -carfour -carfuffle -carfuffled -carfuffling -carful -carfuls -carga -cargador -cargadores -cargason -Cargian -Cargill -cargo -cargoes -cargoose -cargos -cargued -Carhart -carhop -carhops -carhouse -Cari -Cary -cary- -Caria -Carya -cariacine -Cariacus -cariama -Cariamae -Carian -caryatic -caryatid -caryatidal -caryatidean -caryatides -caryatidic -caryatids -Caryatis -Carib -Caribal -Cariban -Caribbean -caribbeans -Caribbee -Caribbees -caribe -caribed -Caribees -caribes -Caribi -caribing -Caribisi -Caribou -Caribou-eater -caribous -Caribs -Carica -Caricaceae -caricaceous -caricatura -caricaturable -caricatural -caricature -caricatured -caricatures -caricaturing -caricaturist -caricaturists -carices -caricetum -caricographer -caricography -caricology -caricologist -caricous -carid -Carida -Caridea -caridean -carideer -caridoid -Caridomorpha -Carie -caried -carien -caries -cariform -CARIFTA -Carignan -Cariyo -Carijona -Caril -Caryl -Carilyn -Caryll -Carilla -carillon -carilloneur -carillonned -carillonneur -carillonneurs -carillonning -carillons -Carin -Caryn -Carina -carinae -carinal -Carinaria -carinas -Carinatae -carinate -carinated -carination -Carine -caring -Cariniana -cariniform -Carinthia -Carinthian -carinula -carinulate -carinule -caryo- -Carioca -Cariocan -Caryocar -Caryocaraceae -caryocaraceous -cariocas -cariogenic -cariole -carioles -carioling -Caryophyllaceae -caryophyllaceous -caryophyllene -caryophylleous -caryophyllin -caryophyllous -Caryophyllus -caryopilite -caryopses -caryopsides -caryopsis -Caryopteris -cariosity -Caryota -caryotin -caryotins -Cariotta -carious -cariousness -caripeta -Caripuna -Cariri -Caririan -Carisa -carisoprodol -Carissa -Carissimi -Carita -caritas -caritative -carites -carity -caritive -Caritta -Carius -Caryville -cark -carked -carking -carkingly -carkled -carks -Carl -Carla -carlage -Carland -carle -Carlee -Carleen -Carley -Carlen -Carlene -carles -carless -carlet -Carleta -Carleton -Carli -Carly -Carlick -Carlie -Carlye -Carlile -Carlyle -Carlylean -Carlyleian -Carlylese -Carlylesque -Carlylian -Carlylism -Carlin -Carlyn -Carlina -Carline -Carlyne -carlines -Carling -carlings -Carlini -Carlynn -Carlynne -carlino -carlins -Carlinville -carlish -carlishness -Carlisle -Carlism -Carlist -Carlita -Carlo -carload -carloading -carloadings -carloads -Carlock -Carlos -carlot -Carlota -Carlotta -Carlovingian -Carlow -carls -Carlsbad -Carlsborg -Carlson -Carlstadt -Carlstrom -Carlton -Carludovica -Carma -carmagnole -carmagnoles -carmaker -carmakers -carmalum -Carman -Carmania -Carmanians -Carmanor -Carmarthen -Carmarthenshire -Carme -Carmel -Carmela -carmele -Carmelia -Carmelina -Carmelita -Carmelite -Carmelitess -Carmella -Carmelle -Carmelo -carmeloite -Carmen -Carmena -Carmencita -Carmenta -Carmentis -carmetta -Carmi -Carmichael -Carmichaels -car-mile -Carmina -carminate -carminative -carminatives -Carmine -carmines -carminette -carminic -carminite -carminophilous -Carmita -carmoisin -Carmon -carmot -Carn -Carnac -Carnacian -carnage -carnaged -carnages -Carnahan -Carnay -carnal -carnalism -carnalite -carnality -carnalities -carnalize -carnalized -carnalizing -carnally -carnallite -carnal-minded -carnal-mindedness -carnalness -Carnap -carnaptious -carnary -Carnaria -Carnarvon -Carnarvonshire -carnassial -carnate -Carnatic -Carnation -carnationed -carnationist -carnation-red -carnations -carnauba -carnaubas -carnaubic -carnaubyl -carne -Carneades -carneau -Carnegie -Carnegiea -Carney -carneyed -carneys -carnel -carnelian -carnelians -carneol -carneole -carneous -Carnes -Carnesville -carnet -carnets -Carneus -Carny -carnic -carnie -carnied -carnies -carniferous -carniferrin -carnifex -carnifexes -carnify -carnification -carnifices -carnificial -carnified -carnifies -carnifying -carniform -Carniola -Carniolan -carnitine -Carnival -carnivaler -carnivalesque -carnivaller -carnivallike -carnivals -carnival's -Carnivora -carnivoracity -carnivoral -carnivore -carnivores -carnivorism -carnivority -carnivorous -carnivorously -carnivorousness -carnivorousnesses -carnose -carnosin -carnosine -carnosity -carnosities -carnoso- -Carnot -carnotite -carnous -Carnoustie -Carnovsky -carns -Carnus -Caro -caroa -caroach -caroaches -carob -caroba -carobs -caroch -caroche -caroches -Caroid -caroigne -Carol -Carola -Carolan -Carolann -Carole -Carolean -caroled -Carolee -Caroleen -caroler -carolers -caroli -Carolin -Carolyn -Carolina -carolinas -carolina's -Caroline -Carolyne -carolines -Caroling -Carolingian -Carolinian -carolinians -Carolynn -Carolynne -carolitic -Caroljean -Carol-Jean -Carolle -carolled -caroller -carollers -carolling -carols -carol's -Carolus -caroluses -carom -carombolette -caromed -caromel -caroming -caroms -Caron -Carona -carone -caronic -caroome -caroon -carosella -carosse -CAROT -caroteel -carotene -carotenes -carotenoid -Carothers -carotic -carotid -carotidal -carotidean -carotids -carotin -carotinaemia -carotinemia -carotinoid -carotins -carotol -carotte -carouba -caroubier -carousal -carousals -carouse -caroused -carousel -carousels -carouser -carousers -carouses -carousing -carousingly -carp -carp- -Carpaccio -carpaine -carpal -carpale -carpalia -carpals -Carpathia -Carpathian -Carpathians -Carpatho-russian -Carpatho-ruthenian -Carpatho-Ukraine -carpe -Carpeaux -carped -carpel -carpellary -carpellate -carpellum -carpels -carpent -Carpentaria -Carpenter -carpentered -Carpenteria -carpentering -carpenters -carpenter's -carpentership -Carpentersville -carpenterworm -Carpentier -carpentry -carpentries -Carper -carpers -Carpet -carpetbag -carpet-bag -carpetbagged -carpetbagger -carpet-bagger -carpetbaggery -carpetbaggers -carpetbagging -carpetbaggism -carpetbagism -carpetbags -carpetbeater -carpet-covered -carpet-cut -carpeted -carpeting -carpet-knight -carpetlayer -carpetless -carpetmaker -carpetmaking -carpetmonger -carpets -carpet-smooth -carpet-sweeper -carpetweb -carpetweed -carpetwork -carpetwoven -Carphiophiops -carpholite -carphology -Carphophis -carphosiderite -carpi -carpic -carpid -carpidium -carpincho -carping -carpingly -carpings -Carpinteria -carpintero -Carpinus -Carpio -Carpiodes -carpitis -carpium -Carpo -carpo- -carpocace -Carpocapsa -carpocarpal -carpocephala -carpocephalum -carpocerite -carpocervical -Carpocratian -Carpodacus -Carpodetus -carpogam -carpogamy -carpogenic -carpogenous -carpognia -carpogone -carpogonia -carpogonial -carpogonium -Carpoidea -carpolite -carpolith -carpology -carpological -carpologically -carpologist -carpomania -carpometacarpal -carpometacarpi -carpometacarpus -carpompi -carpool -carpo-olecranal -carpools -carpopedal -Carpophaga -carpophagous -carpophalangeal -carpophyl -carpophyll -carpophyte -carpophore -Carpophorus -carpopodite -carpopoditic -carpoptosia -carpoptosis -carport -carports -carpos -carposperm -carposporangia -carposporangial -carposporangium -carpospore -carposporic -carposporous -carpostome -carpous -carps -carpsucker -carpus -carpuspi -carquaise -Carr -Carrabelle -Carracci -carrack -carracks -carrageen -carrageenan -carrageenin -carragheen -carragheenin -Carranza -Carrara -Carraran -carrat -carraway -carraways -Carrboro -carreau -Carree -carrefour -Carrel -carrell -Carrelli -carrells -carrels -car-replacing -Carrere -carreta -carretela -carretera -carreton -carretta -Carrew -Carri -Carry -carriable -carryable -carriage -carriageable -carriage-free -carriageful -carriageless -carriages -carriage's -carriagesmith -carriageway -carryall -carry-all -carryalls -carry-back -Carrick -carrycot -Carrie -carried -carryed -Carrier -Carriere -carrier-free -carrier-pigeon -carriers -carries -carry-forward -carrigeen -carry-in -carrying -carrying-on -carrying-out -carryings -carryings-on -carryke -Carrillo -carry-log -Carrington -carriole -carrioles -carrion -carryon -carry-on -carrions -carryons -carryout -carryouts -carryover -carry-over -carryovers -carrys -Carrissa -carrytale -carry-tale -carritch -carritches -carriwitchet -Carrizo -Carrizozo -Carrnan -Carrobili -carrocci -carroccio -carroch -carroches -Carrol -Carroll -carrollite -Carrolls -Carrollton -Carrolltown -carrom -carromata -carromatas -carromed -carroming -carroms -carronade -carroon -carrosserie -carrot -carrotage -carrot-colored -carroter -carrot-head -carrot-headed -Carrothers -carroty -carrotier -carrotiest -carrotin -carrotiness -carroting -carrotins -carrot-pated -carrots -carrot's -carrot-shaped -carrottop -carrot-top -carrotweed -carrotwood -carrousel -carrousels -carrow -carrozza -carrs -Carrsville -carrus -Carruthers -cars -car's -carse -carses -carshop -carshops -carsick -carsickness -carsmith -Carson -Carsonville -carsten -Carstensz -carstone -CART -cartable -cartaceous -cartage -Cartagena -cartages -Cartago -Cartan -cartboot -cartbote -Carte -carted -carte-de-visite -cartel -cartelism -cartelist -cartelistic -cartelization -cartelize -cartelized -cartelizing -cartellist -cartels -Carter -Carteret -carterly -carters -Cartersburg -Cartersville -Carterville -cartes -Cartesian -Cartesianism -cartful -Carthage -Carthaginian -Carthal -carthame -carthamic -carthamin -Carthamus -Carthy -carthorse -Carthusian -carty -Cartie -Cartier -Cartier-Bresson -cartiest -cartilage -cartilages -cartilaginean -Cartilaginei -cartilagineous -Cartilagines -cartilaginification -cartilaginoid -cartilaginous -carting -cartisane -Cartist -cartload -cartloads -cartmaker -cartmaking -cartman -cartobibliography -cartogram -cartograph -cartographer -cartographers -cartography -cartographic -cartographical -cartographically -cartographies -cartomancy -cartomancies -carton -cartoned -cartoner -cartonful -cartoning -cartonnage -cartonnier -cartonniers -carton-pierre -cartons -carton's -cartoon -cartooned -cartooning -cartoonist -cartoonists -cartoons -cartoon's -cartop -cartopper -cartouch -cartouche -cartouches -cartridge -cartridges -cartridge's -cart-rutted -carts -cartsale -cartulary -cartularies -cartway -cartware -Cartwell -cartwheel -cart-wheel -cartwheeler -cartwheels -cartwhip -Cartwright -cartwrighting -carua -caruage -carucage -carucal -carucarius -carucate -carucated -Carum -caruncle -caruncles -caruncula -carunculae -caruncular -carunculate -carunculated -carunculous -Carupano -carus -Caruso -Caruthers -Caruthersville -carvacryl -carvacrol -carvage -carval -carve -carved -Carvey -carvel -carvel-built -carvel-planked -carvels -carven -carvene -Carver -carvers -carvership -Carversville -carves -carvestrene -carvy -carvyl -Carville -carving -carvings -carvist -carvoeira -carvoepra -carvol -carvomenthene -carvone -carwash -carwashes -carwitchet -carzey -CAS -Casa -casaba -casabas -casabe -Casabianca -Casablanca -Casabonne -Casadesus -Casady -casal -Casaleggio -Casals -casalty -Casamarca -Casandra -Casanova -Casanovanic -casanovas -casaque -casaques -casaquin -Casar -casas -Casasia -casate -Casatus -Casaubon -casaun -casava -Casavant -casavas -casave -casavi -Casbah -casbahs -cascabel -cascabels -cascable -cascables -cascadable -cascade -cascade-connect -cascaded -cascades -Cascadia -Cascadian -cascading -cascadite -cascado -Cascais -cascalho -cascalote -cascan -cascara -cascaras -cascarilla -cascaron -cascavel -caschielawis -caschrom -Cascilla -Casco -cascol -cascrom -cascrome -CASE -Casearia -casease -caseases -caseate -caseated -caseates -caseating -caseation -casebearer -case-bearer -casebook -casebooks -casebound -case-bound -casebox -caseconv -cased -casefy -casefied -casefies -casefying -caseful -caseharden -case-harden -casehardened -case-hardened -casehardening -casehardens -Casey -caseic -casein -caseinate -caseine -caseinogen -caseins -Caseyville -casekeeper -case-knife -Casel -caseless -caselessly -caseload -caseloads -caselty -casemaker -casemaking -casemate -casemated -casemates -Casement -casemented -casements -casement's -caseolysis -caseose -caseoses -caseous -caser -caser-in -caserio -caserios -casern -caserne -casernes -caserns -Caserta -cases -case-shot -casette -casettes -caseum -Caseville -caseweed -case-weed -casewood -casework -caseworker -case-worker -caseworkers -caseworks -caseworm -case-worm -caseworms -Cash -casha -cashable -cashableness -cash-and-carry -cashaw -cashaws -cashboy -cashbook -cash-book -cashbooks -cashbox -cashboxes -cashcuttee -cashdrawer -cashed -casheen -cashel -casher -cashers -cashes -cashew -cashews -cashgirl -Cashibo -cashier -cashiered -cashierer -cashiering -cashierment -Cashiers -cashier's -cashing -Cashion -cashkeeper -cashless -cashment -Cashmere -cashmeres -cashmerette -Cashmerian -Cashmirian -cashoo -cashoos -cashou -Cashton -Cashtown -Casi -Casia -Casie -Casilda -Casilde -casimere -casimeres -Casimir -Casimire -casimires -Casimiroa -casina -casinet -casing -casing-in -casings -casini -casino -casinos -casiri -casita -casitas -cask -caskanet -casked -casket -casketed -casketing -casketlike -caskets -casket's -casky -casking -casklike -casks -cask's -cask-shaped -Caslon -Casmalia -Casmey -Casnovia -Cason -Caspar -Casparian -Casper -Caspian -casque -casqued -casques -casquet -casquetel -casquette -Cass -cassaba -cassabanana -cassabas -cassabully -cassada -Cassadaga -Cassady -cassalty -cassan -Cassander -Cassandra -Cassandra-like -Cassandran -cassandras -Cassandre -Cassandry -Cassandrian -cassapanca -cassare -cassareep -cassata -cassatas -cassate -cassation -Cassatt -Cassaundra -cassava -cassavas -Casscoe -casse -Cassegrain -Cassegrainian -Cassey -Cassel -Casselberry -Cassell -Cassella -casselty -Casselton -cassena -casserole -casseroled -casseroles -casserole's -casseroling -casse-tete -cassette -cassettes -casshe -Cassi -Cassy -Cassia -Cassiaceae -Cassian -Cassiani -cassias -cassican -Cassicus -Cassida -cassideous -Cassidy -cassidid -Cassididae -Cassidinae -cassidoine -cassidony -Cassidulina -cassiduloid -Cassiduloidea -Cassie -Cassiepea -Cassiepean -Cassiepeia -Cassil -Cassilda -cassimere -cassina -cassine -Cassinese -cassinette -Cassini -Cassinian -Cassino -cassinoid -cassinos -cassioberry -Cassiodorus -Cassiope -Cassiopea -Cassiopean -Cassiopeia -Cassiopeiae -Cassiopeian -Cassiopeid -cassiopeium -cassique -Cassirer -cassiri -CASSIS -cassises -Cassite -cassiterite -cassites -Cassytha -Cassythaceae -Cassius -cassock -cassocked -cassocks -Cassoday -cassolette -casson -cassonade -Cassondra -cassone -cassoni -cassons -cassoon -Cassopolis -cassoulet -cassowary -cassowaries -Casstown -cassumunar -cassumuniar -Cassville -cast -Casta -castable -castagnole -Castalia -Castalian -Castalides -Castalio -Castana -castane -Castanea -castanean -castaneous -castanet -castanets -castanian -castano -Castanopsis -Castanospermum -Castara -castaway -castaways -cast-back -cast-by -caste -Casteau -casted -Casteel -casteism -casteisms -casteless -castelet -Castell -Castella -castellan -castellany -castellanies -castellano -Castellanos -castellans -castellanship -castellanus -castellar -castellate -castellated -castellation -castellatus -castellet -castelli -Castellna -castellum -Castelnuovo-Tedesco -Castelvetro -casten -Caster -Castera -caste-ridden -casterless -caster-off -casters -castes -casteth -casthouse -castice -castigable -castigate -castigated -castigates -castigating -castigation -castigations -castigative -castigator -castigatory -castigatories -castigators -Castiglione -Castile -Castilian -Castilla -Castilleja -Castillo -Castilloa -Castine -casting -castings -cast-iron -cast-iron-plant -Castle -Castleberry -castle-builder -castle-building -castle-built -castle-buttressed -castle-crowned -castled -Castledale -Castleford -castle-guard -castle-guarded -castlelike -Castlereagh -castlery -castles -castlet -Castleton -castleward -castlewards -castlewise -Castlewood -castling -cast-me-down -castock -castoff -cast-off -castoffs -Castor -Castora -castor-bean -Castores -castoreum -castory -castorial -Castoridae -castorin -Castorina -castorite -castorized -Castorland -Castoroides -castors -Castra -castral -castrametation -castrate -castrated -castrater -castrates -castrati -castrating -castration -castrations -castrato -castrator -castratory -castrators -castrensial -castrensian -Castries -Castro -Castroism -Castroist -Castroite -Castrop-Rauxel -Castroville -castrum -casts -cast's -cast-steel -castuli -cast-weld -CASU -casual -casualism -casualist -casuality -casually -casualness -casualnesses -casuals -casualty -casualties -casualty's -casuary -Casuariidae -Casuariiformes -Casuarina -Casuarinaceae -casuarinaceous -Casuarinales -Casuarius -casuist -casuistess -casuistic -casuistical -casuistically -casuistry -casuistries -casuists -casula -casule -casus -casusistry -Caswell -caswellite -Casziel -CAT -cat. -cata- -catabaptist -catabases -catabasion -catabasis -catabatic -catabibazon -catabiotic -catabolic -catabolically -catabolin -catabolism -catabolite -catabolize -catabolized -catabolizing -catacaustic -catachreses -catachresis -catachresti -catachrestic -catachrestical -catachrestically -catachthonian -catachthonic -catacylsmic -cataclasis -cataclasm -cataclasmic -cataclastic -cataclinal -cataclysm -cataclysmal -cataclysmatic -cataclysmatist -cataclysmic -cataclysmically -cataclysmist -cataclysms -catacomb -catacombic -catacombs -catacorner -catacorolla -catacoustics -catacromyodian -catacrotic -catacrotism -catacumba -catacumbal -catadicrotic -catadicrotism -catadioptric -catadioptrical -catadioptrics -catadrome -catadromous -catadupe -Cataebates -catafalco -catafalque -catafalques -catagenesis -catagenetic -catagmatic -catagories -Cataian -catakinesis -catakinetic -catakinetomer -catakinomeric -Catalan -Catalanganes -Catalanist -catalase -catalases -catalatic -Catalaunian -Cataldo -catalecta -catalectic -catalecticant -catalects -catalepsy -catalepsies -catalepsis -cataleptic -cataleptically -cataleptics -cataleptiform -cataleptize -cataleptoid -catalexes -catalexis -Catalin -Catalina -catalineta -catalinite -catalyse -catalyses -catalysis -catalyst -catalysts -catalyst's -catalyte -catalytic -catalytical -catalytically -catalyzator -catalyze -catalyzed -catalyzer -catalyzers -catalyzes -catalyzing -catallactic -catallactically -catallactics -catallum -catalo -cataloes -catalog -cataloged -cataloger -catalogers -catalogia -catalogic -catalogical -cataloging -catalogist -catalogistic -catalogize -catalogs -catalogue -catalogued -cataloguer -cataloguers -catalogues -cataloguing -cataloguish -cataloguist -cataloguize -Catalonia -Catalonian -cataloon -catalos -catalowne -Catalpa -catalpas -catalufa -catalufas -catamaran -catamarans -Catamarca -Catamarcan -Catamarenan -catamenia -catamenial -catamite -catamited -catamites -catamiting -Catamitus -catamneses -catamnesis -catamnestic -catamount -catamountain -cat-a-mountain -catamounts -catan -catanadromous -Catananche -cat-and-dog -cat-and-doggish -Catania -Catano -Catanzaro -catapan -catapasm -catapetalous -cataphasia -cataphatic -cataphyll -cataphylla -cataphyllary -cataphyllum -cataphysic -cataphysical -cataphonic -cataphonics -cataphora -cataphoresis -cataphoretic -cataphoretically -cataphoria -cataphoric -cataphract -Cataphracta -cataphracted -Cataphracti -cataphractic -cataphrenia -cataphrenic -Cataphrygian -cataphrygianism -cataplane -cataplasia -cataplasis -cataplasm -cataplastic -catapleiite -cataplexy -catapuce -catapult -catapulted -catapultic -catapultier -catapulting -catapults -cataract -cataractal -cataracted -cataracteg -cataractine -cataractous -cataracts -cataractwise -cataria -Catarina -catarinite -catarrh -catarrhal -catarrhally -catarrhed -Catarrhina -catarrhine -catarrhinian -catarrhous -catarrhs -catasarka -Catasauqua -Catasetum -cataspilite -catasta -catastaltic -catastases -catastasis -catastate -catastatic -catasterism -catastrophal -catastrophe -catastrophes -catastrophic -catastrophical -catastrophically -catastrophism -catastrophist -catathymic -catatony -catatonia -catatoniac -catatonias -catatonic -catatonics -Cataula -Cataumet -Catavi -catawampous -catawampously -catawamptious -catawamptiously -catawampus -Catawba -catawbas -Catawissa -cat-bed -catberry -catbird -catbirds -catboat -catboats -catbrier -catbriers -cat-built -catcall -catcalled -catcaller -catcalling -catcalls -catch -catch- -catch-22 -catchable -catchall -catch-all -catchalls -catch-as-catch-can -catch-cord -catchcry -catched -catcher -catchers -catches -catchfly -catchflies -catchy -catchie -catchier -catchiest -catchiness -catching -catchingly -catchingness -catchland -catchlight -catchline -catchment -catchments -cat-chop -catchpenny -catchpennies -catchphrase -catchplate -catchpole -catchpoled -catchpolery -catchpoleship -catchpoling -catchpoll -catchpolled -catchpollery -catchpolling -catchup -catch-up -catchups -catchwater -catchweed -catchweight -catchword -catchwords -catchwork -catclaw -cat-clover -catdom -Cate -catecheses -catechesis -catechetic -catechetical -catechetically -catechin -catechins -catechisable -catechisation -catechise -catechised -catechiser -catechising -Catechism -catechismal -catechisms -catechist -catechistic -catechistical -catechistically -catechists -catechizable -catechization -catechize -catechized -catechizer -catechizes -catechizing -catechol -catecholamine -catecholamines -catechols -catechu -catechumen -catechumenal -catechumenate -catechumenical -catechumenically -catechumenism -catechumens -catechumenship -catechus -catechutannic -categorem -categorematic -categorematical -categorematically -category -categorial -categoric -categorical -categorically -categoricalness -categories -category's -categorisation -categorise -categorised -categorising -categorist -categorization -categorizations -categorize -categorized -categorizer -categorizers -categorizes -categorizing -cateye -cat-eyed -catel -catelectrode -catelectrotonic -catelectrotonus -catella -catena -catenae -catenane -catenary -catenarian -catenaries -catenas -catenate -catenated -catenates -catenating -catenation -catenative -catenoid -catenoids -catenulate -catepuce -cater -cateran -caterans -caterbrawl -catercap -catercorner -cater-corner -catercornered -cater-cornered -catercornerways -catercousin -cater-cousin -cater-cousinship -catered -caterer -caterers -caterership -cateress -cateresses -catery -Caterina -catering -cateringly -Caterpillar -caterpillared -caterpillarlike -caterpillars -caterpillar's -caters -caterva -caterwaul -caterwauled -caterwauler -caterwauling -caterwauls -Cates -Catesbaea -catesbeiana -Catesby -catface -catfaced -catfaces -catfacing -catfall -catfalls -catfight -catfish -cat-fish -catfishes -catfoot -cat-foot -catfooted -catgut -catguts -Cath -cath- -Cath. -Catha -Cathay -Cathayan -cat-hammed -Cathar -catharan -Cathari -Catharina -Catharine -Catharism -Catharist -Catharistic -catharization -catharize -catharized -catharizing -Catharpin -cat-harpin -catharping -cat-harpings -Cathars -catharses -catharsis -Catharsius -Cathartae -Cathartes -cathartic -cathartical -cathartically -catharticalness -cathartics -Cathartidae -Cathartides -cathartin -Cathartolinum -Cathe -cathead -cat-head -catheads -cathect -cathected -cathectic -cathecting -cathection -cathects -cathedra -cathedrae -cathedral -cathedraled -cathedralesque -cathedralic -cathedrallike -cathedral-like -cathedrals -cathedral's -cathedralwise -cathedras -cathedrated -cathedratic -cathedratica -cathedratical -cathedratically -cathedraticum -Cathee -Cathey -cathepsin -catheptic -Cather -catheretic -Catherin -Catheryn -Catherina -Catherine -cathern -Catherwood -catheter -catheterisation -catheterise -catheterised -catheterising -catheterism -catheterization -catheterize -catheterized -catheterizes -catheterizing -catheters -catheti -cathetometer -cathetometric -cathetus -cathetusti -cathexes -cathexion -cathexis -Cathi -Cathy -cathidine -Cathie -Cathyleen -cathin -cathine -cathinine -cathion -cathisma -cathismata -Cathlamet -Cathleen -Cathlene -cathodal -cathode -cathodegraph -cathodes -cathode's -cathodic -cathodical -cathodically -cathodofluorescence -cathodograph -cathodography -cathodoluminescence -cathodoluminescent -cathodo-luminescent -cathograph -cathography -cathole -cat-hole -Catholic -catholical -catholically -catholicalness -catholicate -catholici -catholicisation -catholicise -catholicised -catholiciser -catholicising -Catholicism -catholicist -Catholicity -catholicization -catholicize -catholicized -catholicizer -catholicizing -catholicly -catholicness -catholico- -catholicoi -catholicon -catholicos -catholicoses -catholics -catholic's -catholicus -catholyte -Cathomycin -cathood -cathop -cathouse -cathouses -Cathrin -Cathryn -Cathrine -cathro -ca'-thro' -cathud -Cati -Caty -catydid -Catie -Catilinarian -Catiline -Catima -Catina -cating -cation -cation-active -cationic -cationically -cations -CATIS -cativo -catjang -catkin -catkinate -catkins -Catlaina -catlap -cat-lap -CATLAS -Catlee -Catlett -Catlettsburg -catlike -cat-like -Catlin -catline -catling -catlings -catlinite -catlins -cat-locks -catmalison -catmint -catmints -catnache -catnap -catnaper -catnapers -catnapped -catnapper -catnapping -catnaps -catnep -catnip -catnips -Cato -catoblepas -Catocala -catocalid -catocarthartic -catocathartic -catochus -Catoctin -Catodon -catodont -catogene -catogenic -Catoism -cat-o'-mountain -Caton -Catonian -Catonic -Catonically -cat-o'-nine-tails -cat-o-nine-tails -Catonism -Catonsville -Catoosa -catoptric -catoptrical -catoptrically -catoptrics -catoptrite -catoptromancy -catoptromantic -Catoquina -catostomid -Catostomidae -catostomoid -Catostomus -catouse -catpiece -catpipe -catproof -Catreus -catrigged -cat-rigged -Catrina -Catriona -Catron -cats -cat's -cat's-claw -cat's-cradle -cat's-ear -cat's-eye -cat's-eyes -cat's-feet -cat's-foot -cat's-head -Catskill -Catskills -catskin -catskinner -catslide -catso -catsos -catspaw -cat's-paw -catspaws -cat's-tail -catstane -catstep -catstick -cat-stick -catstitch -catstitcher -catstone -catsup -catsups -Catt -cattabu -cattail -cattails -cattalo -cattaloes -cattalos -Cattan -Cattaraugus -catted -Cattegat -Cattell -catter -cattery -catteries -Catti -Catty -catty-co -cattycorner -catty-corner -cattycornered -catty-cornered -cattie -Cattier -catties -cattiest -cattily -Cattima -cattyman -cattimandoo -cattiness -cattinesses -catting -cattyphoid -cattish -cattishly -cattishness -cattle -cattlebush -cattlefold -cattlegate -cattle-grid -cattle-guard -cattlehide -Cattleya -cattleyak -cattleyas -cattleless -cattleman -cattlemen -cattle-plague -cattle-ranching -cattleship -cattle-specked -Catto -Catton -cat-train -Catullian -Catullus -catur -CATV -catvine -catwalk -catwalks -cat-whistles -catwise -cat-witted -catwood -catwort -catzerie -CAU -caubeen -cauboge -Cauca -Caucasia -Caucasian -caucasians -Caucasic -Caucasoid -caucasoids -Caucasus -Caucete -cauch -cauchemar -Cauchy -cauchillo -caucho -Caucon -caucus -caucused -caucuses -caucusing -caucussed -caucusses -caucussing -cauda -caudad -caudae -caudaite -caudal -caudally -caudalward -Caudata -caudate -caudated -caudates -caudation -caudatolenticular -caudatory -caudatum -Caudebec -caudebeck -caudex -caudexes -caudices -caudicle -caudiform -caudillism -Caudillo -caudillos -caudle -caudles -caudocephalad -caudodorsal -caudofemoral -caudolateral -caudotibial -caudotibialis -cauf -caufle -Caughey -Caughnawaga -caught -cauk -cauked -cauking -caul -cauld -cauldrife -cauldrifeness -cauldron -cauldrons -caulds -Caulerpa -Caulerpaceae -caulerpaceous -caules -caulescent -Caulfield -cauli -caulicle -caulicles -caulicole -caulicolous -caulicule -cauliculi -cauliculus -cauliferous -cauliflory -cauliflorous -cauliflower -cauliflower-eared -cauliflowers -cauliform -cauligenous -caulinar -caulinary -cauline -caulis -Caulite -caulivorous -caulk -caulked -caulker -caulkers -caulking -caulkings -caulks -caulo- -caulocarpic -caulocarpous -caulome -caulomer -caulomic -Caulonia -caulophylline -Caulophyllum -Caulopteris -caulosarc -caulotaxy -caulotaxis -caulote -cauls -caum -cauma -caumatic -caunch -Caundra -Caunos -caunter -Caunus -caup -caupo -cauponate -cauponation -caupones -cauponize -Cauquenes -Cauqui -caurale -Caurus -caus -caus. -causa -causability -causable -causae -causal -causaless -causalgia -causality -causalities -causally -causals -causans -causata -causate -causation -causational -causationism -causationist -causations -causation's -causative -causatively -causativeness -causativity -causator -causatum -cause -cause-and-effect -caused -causeful -Causey -causeys -causeless -causelessly -causelessness -causer -causerie -causeries -causers -causes -causeur -causeuse -causeuses -causeway -causewayed -causewaying -causewayman -causeways -causeway's -causidical -causing -causingness -causon -causse -causson -caustic -caustical -caustically -causticiser -causticism -causticity -causticization -causticize -causticized -causticizer -causticizing -causticly -causticness -caustics -caustify -caustification -caustified -caustifying -Causus -cautel -cautela -cautelous -cautelously -cautelousness -cauter -cauterant -cautery -cauteries -cauterisation -cauterise -cauterised -cauterising -cauterism -cauterization -cauterizations -cauterize -cauterized -cauterizer -cauterizes -cauterizing -Cauthornville -cautio -caution -cautionary -cautionaries -cautioned -cautioner -cautioners -cautiones -cautioning -cautionings -cautionry -cautions -cautious -cautiously -cautiousness -cautiousnesses -cautivo -Cauvery -CAV -Cav. -cava -cavae -cavaedia -cavaedium -Cavafy -cavayard -caval -cavalcade -cavalcaded -cavalcades -cavalcading -Cavalerius -cavalero -cavaleros -Cavalier -cavaliere -cavaliered -cavalieres -Cavalieri -cavaliering -cavalierish -cavalierishness -cavalierism -cavalierly -cavalierness -cavaliernesses -cavaliero -cavaliers -cavaliership -cavalla -Cavallaro -cavallas -cavally -cavallies -cavalry -cavalries -cavalryman -cavalrymen -Cavan -Cavanagh -Cavanaugh -cavascope -cavate -cavated -cavatina -cavatinas -cavatine -cavdia -Cave -cavea -caveae -caveat -caveated -caveatee -caveating -caveator -caveators -caveats -caveat's -caved -cavefish -cavefishes -cave-guarded -cavey -cave-in -cavekeeper -cave-keeping -cavel -cavelet -cavelike -Cavell -cave-lodged -cave-loving -caveman -cavemen -Cavendish -caver -cavern -cavernal -caverned -cavernicolous -caverning -cavernitis -cavernlike -cavernoma -cavernous -cavernously -caverns -cavern's -cavernulous -cavers -Caves -cavesson -Cavetown -cavetti -cavetto -cavettos -cavy -Cavia -caviar -caviare -caviares -caviars -cavicorn -Cavicornia -Cavidae -cavie -cavies -caviya -cavyyard -Cavil -caviled -caviler -cavilers -caviling -cavilingly -cavilingness -Cavill -cavillation -cavillatory -cavilled -caviller -cavillers -cavilling -cavillingly -cavillingness -cavillous -cavils -cavin -Cavina -Caviness -caving -cavings -cavi-relievi -cavi-rilievi -cavish -Cavit -cavitary -cavitate -cavitated -cavitates -cavitating -cavitation -cavitations -Cavite -caviteno -cavity -cavitied -cavities -cavity's -cavo-relievo -cavo-relievos -cavo-rilievo -cavort -cavorted -cavorter -cavorters -cavorting -cavorts -Cavour -CAVU -cavum -Cavuoto -cavus -caw -Cawdrey -cawed -cawing -cawk -cawker -cawky -cawl -Cawley -cawney -cawny -cawnie -Cawnpore -Cawood -cawquaw -caws -c-axes -Caxias -caxiri -c-axis -caxon -Caxton -Caxtonian -Caz -caza -Cazadero -Cazenovia -cazibi -cazimi -cazique -caziques -Cazzie -CB -CBC -CBD -CBDS -CBE -CBEL -CBEMA -CBI -C-bias -CBR -CBS -CBW -CBX -CC -cc. -CCA -CCAFS -CCC -CCCCM -CCCI -CCD -CCDS -Cceres -ccesser -CCF -CCH -Cchaddie -cchaddoorck -Cchakri -CCI -ccid -CCIM -CCIP -CCIR -CCIS -CCITT -cckw -CCL -CCls -ccm -CCNC -CCNY -Ccoya -CCP -CCR -CCRP -CCS -CCSA -CCT -CCTA -CCTAC -CCTV -CCU -Ccuta -CCV -CCW -ccws -CD -cd. -CDA -CDAR -CDB -CDC -CDCF -Cdenas -CDEV -CDF -cdg -CDI -CDIAC -Cdiz -CDN -CDO -Cdoba -CDP -CDPR -CDR -Cdr. -Cdre -CDROM -CDS -CDSF -CDT -CDU -CE -CEA -Ceanothus -Cear -Ceara -cearin -cease -ceased -cease-fire -ceaseless -ceaselessly -ceaselessness -ceases -ceasing -ceasmic -Ceausescu -Ceb -Cebalrai -Cebatha -cebell -cebian -cebid -Cebidae -cebids -cebil -cebine -ceboid -ceboids -Cebolla -cebollite -Cebriones -Cebu -cebur -Cebus -CEC -ceca -cecal -cecally -cecca -cecchine -Cece -Cecelia -Cechy -cecidiology -cecidiologist -cecidium -cecidogenous -cecidology -cecidologist -cecidomyian -cecidomyiid -Cecidomyiidae -cecidomyiidous -Cecil -Cecile -Cecyle -Ceciley -Cecily -Cecilia -Cecilio -cecilite -Cecilius -Cecilla -Cecillia -cecils -Cecilton -cecity -cecitis -cecograph -Cecomorphae -cecomorphic -cecopexy -cecostomy -cecotomy -Cecropia -Cecrops -cecum -cecums -cecutiency -CED -Cedalion -Cedar -cedarbird -Cedarbrook -cedar-brown -Cedarburg -cedar-colored -Cedarcrest -cedared -Cedaredge -Cedarhurst -cedary -Cedarkey -Cedarlane -cedarn -Cedars -Cedartown -Cedarvale -Cedarville -cedarware -cedarwood -cede -ceded -Cedell -cedens -cedent -ceder -ceders -cedes -cedi -cedilla -cedillas -ceding -cedis -cedr- -cedrat -cedrate -cedre -Cedreatis -Cedrela -cedrene -cedry -Cedric -cedrin -cedrine -cedriret -cedrium -cedrol -cedron -Cedrus -cedula -cedulas -cedule -ceduous -cee -ceennacuelum -CEERT -cees -Ceevah -Ceevee -CEF -Cefis -CEGB -CEI -Ceiba -ceibas -ceibo -ceibos -Ceil -ceylanite -ceile -ceiled -ceiler -ceilers -ceilidh -ceilidhe -ceiling -ceilinged -ceilings -ceiling's -ceilingward -ceilingwards -ceilometer -Ceylon -Ceylonese -ceylonite -ceils -ceint -ceinte -ceinture -ceintures -ceyssatite -Ceyx -ceja -Cela -Celadon -celadonite -celadons -Celaeno -Celaya -celandine -celandines -Celanese -Celarent -Celastraceae -celastraceous -Celastrus -celation -celative -celature -cele -celeb -celebe -Celebes -Celebesian -celebrant -celebrants -celebrate -celebrated -celebratedly -celebratedness -celebrater -celebrates -celebrating -celebration -celebrationis -celebrations -celebrative -celebrator -celebratory -celebrators -celebre -celebres -celebret -Celebrezze -celebrious -celebrity -celebrities -celebrity's -celebs -celemin -celemines -Celene -celeomorph -Celeomorphae -celeomorphic -celery -celeriac -celeriacs -celeries -celery-leaved -celerity -celerities -celery-topped -Celeski -Celesta -celestas -Celeste -celestes -Celestia -celestial -celestiality -celestialize -celestialized -celestially -celestialness -celestify -Celestyn -Celestina -Celestyna -Celestine -Celestinian -celestite -celestitude -celeusma -Celeuthea -Celia -celiac -celiacs -celiadelphus -celiagra -celialgia -celibacy -celibacies -celibataire -celibatarian -celibate -celibates -celibatic -celibatist -celibatory -celidographer -celidography -Celie -celiectasia -celiectomy -celiemia -celiitis -Celik -Celin -Celina -Celinda -Celine -Celinka -Celio -celiocele -celiocentesis -celiocyesis -celiocolpotomy -celiodynia -celioelytrotomy -celioenterotomy -celiogastrotomy -celiohysterotomy -celiolymph -celiomyalgia -celiomyodynia -celiomyomectomy -celiomyomotomy -celiomyositis -celioncus -celioparacentesis -celiopyosis -celiorrhaphy -celiorrhea -celiosalpingectomy -celiosalpingotomy -celioschisis -celioscope -celioscopy -celiotomy -celiotomies -Celisse -celite -Celka -cell -cella -cellae -cellager -cellar -cellarage -cellared -cellarer -cellarers -cellaress -cellaret -cellarets -cellarette -cellaring -cellarless -cellarman -cellarmen -cellarous -cellars -cellar's -cellarway -cellarwoman -cellated -cellblock -cell-blockade -cellblocks -Celle -celled -Cellepora -cellepore -Cellfalcicula -celli -celliferous -celliform -cellifugal -celling -Cellini -cellipetal -cellist -cellists -cellist's -Cellite -cell-like -cellmate -cellmates -Cello -cellobiose -cellocut -celloid -celloidin -celloist -cellophane -cellophanes -cellos -cellose -cells -cell-shaped -Cellucotton -cellular -cellularity -cellularly -cellulase -cellulate -cellulated -cellulating -cellulation -cellule -cellules -cellulicidal -celluliferous -cellulifugal -cellulifugally -cellulin -cellulipetal -cellulipetally -cellulitis -cellulo- -cellulocutaneous -cellulofibrous -Celluloid -celluloided -cellulolytic -Cellulomonadeae -Cellulomonas -cellulose -cellulosed -celluloses -cellulosic -cellulosing -cellulosity -cellulosities -cellulotoxic -cellulous -Cellvibrio -Cel-o-Glass -celom -celomata -celoms -celo-navigation -Celoron -celoscope -Celosia -celosias -Celotex -celotomy -celotomies -Cels -Celsia -celsian -celsitude -Celsius -CELSS -Celt -Celt. -Celtdom -Celtiberi -Celtiberian -Celtic -Celtically -Celtic-Germanic -Celticism -Celticist -Celticize -Celtidaceae -celtiform -Celtillyrians -Celtis -Celtish -Celtism -Celtist -celtium -Celtization -celto- -Celto-Germanic -Celto-ligyes -Celtologist -Celtologue -Celtomaniac -Celtophil -Celtophobe -Celtophobia -Celto-roman -Celto-slavic -Celto-thracians -celts -celtuce -celure -Cemal -cembali -cembalist -cembalo -cembalon -cembalos -cement -cementa -cemental -cementation -cementations -cementatory -cement-coated -cement-covered -cement-drying -cemented -cementer -cementers -cement-faced -cement-forming -cementification -cementin -cementing -cementite -cementitious -cementless -cementlike -cement-lined -cement-lining -cementmaker -cementmaking -cementoblast -cementoma -Cementon -cements -cement-temper -cementum -cementwork -cemetary -cemetaries -cemetery -cemeterial -cemeteries -cemetery's -CEN -cen- -cen. -Cenac -cenacle -cenacles -cenaculum -Cenaean -Cenaeum -cenanthy -cenanthous -cenation -cenatory -Cence -cencerro -cencerros -Cenchrias -Cenchrus -Cenci -cendre -cene -cenesthesia -cenesthesis -cenesthetic -Cenis -cenizo -cenobe -cenoby -cenobian -cenobies -cenobite -cenobites -cenobitic -cenobitical -cenobitically -cenobitism -cenobium -cenogamy -cenogenesis -cenogenetic -cenogenetically -cenogonous -Cenomanian -cenosite -cenosity -cenospecies -cenospecific -cenospecifically -cenotaph -cenotaphy -cenotaphic -cenotaphies -cenotaphs -cenote -cenotes -Cenozoic -cenozoology -CENS -cense -censed -censer -censerless -censers -censes -censing -censitaire -censive -censor -censorable -censorate -censored -censorial -censorian -censoring -Censorinus -censorious -censoriously -censoriousness -censoriousnesses -censors -censorship -censorships -censual -censurability -censurable -censurableness -censurably -censure -censured -censureless -censurer -censurers -censures -censureship -censuring -census -censused -censuses -censusing -census's -cent -cent. -centage -centai -cental -centals -centare -centares -centas -centaur -centaurdom -Centaurea -centauress -Centauri -centaury -centaurial -centaurian -centauric -Centaurid -Centauridium -centauries -Centaurium -centauromachy -centauromachia -centauro-triton -centaurs -Centaurus -centavo -centavos -centena -centenar -Centenary -centenarian -centenarianism -centenarians -centenaries -centenier -centenionales -centenionalis -centennia -centennial -centennially -centennials -centennium -Centeno -Center -centerable -centerboard -centerboards -centered -centeredly -centeredness -centerer -center-fire -centerfold -centerfolds -centering -centerless -centerline -centermost -centerpiece -centerpieces -centerpiece's -centerpunch -centers -center's -center-sawed -center-second -centervelic -Centerville -centerward -centerwise -centeses -centesimal -centesimally -centesimate -centesimation -centesimi -centesimo -centesimos -centesis -centesm -Centetes -centetid -Centetidae -centgener -centgrave -centi -centi- -centiar -centiare -centiares -centibar -centiday -centifolious -centigrade -centigrado -centigram -centigramme -centigrams -centile -centiles -centiliter -centiliters -centilitre -centillion -centillions -centillionth -Centiloquy -Centimani -centime -centimes -centimeter -centimeter-gram -centimeter-gram-second -centimeters -centimetre -centimetre-gramme-second -centimetre-gram-second -centimetres -centimo -centimolar -centimos -centinel -centinody -centinormal -centipedal -centipede -centipedes -centipede's -centiplume -centipoise -centistere -centistoke -centner -centners -CENTO -centon -centones -centonical -centonism -centonization -Centonze -centos -centr- -centra -centrad -Centrahoma -central -centrale -centraler -Centrales -centralest -central-fire -Centralia -centralisation -centralise -centralised -centraliser -centralising -centralism -centralist -centralistic -centralists -centrality -centralities -centralization -centralizations -centralize -centralized -centralizer -centralizers -centralizes -centralizing -centrally -centralness -centrals -centranth -Centranthus -centrarchid -Centrarchidae -centrarchoid -centration -Centraxonia -centraxonial -Centre -centreboard -Centrechinoida -centred -centref -centre-fire -centrefold -Centrehall -centreless -centremost -centrepiece -centrer -centres -centrev -Centreville -centrex -centry -centri- -centric -Centricae -centrical -centricality -centrically -centricalness -centricipital -centriciput -centricity -centriffed -centrifugal -centrifugalisation -centrifugalise -centrifugalization -centrifugalize -centrifugalized -centrifugalizing -centrifugaller -centrifugally -centrifugate -centrifugation -centrifuge -centrifuged -centrifugence -centrifuges -centrifuging -centring -centrings -centriole -centripetal -centripetalism -centripetally -centripetence -centripetency -centriscid -Centriscidae -centrisciform -centriscoid -Centriscus -centrism -centrisms -centrist -centrists -centro -centro- -centroacinar -centrobaric -centrobarical -centroclinal -centrode -centrodesmose -centrodesmus -centrodorsal -centrodorsally -centroid -centroidal -centroids -centrolecithal -Centrolepidaceae -centrolepidaceous -centrolinead -centrolineal -centromere -centromeric -centronote -centronucleus -centroplasm -Centropomidae -Centropomus -Centrosema -centrosymmetry -centrosymmetric -centrosymmetrical -Centrosoyus -centrosome -centrosomic -Centrospermae -centrosphere -Centrotus -centrum -centrums -centrutra -cents -centum -centums -centumvir -centumviral -centumvirate -Centunculus -centuple -centupled -centuples -centuply -centuplicate -centuplicated -centuplicating -centuplication -centupling -centure -Century -Centuria -centurial -centuriate -centuriation -centuriator -centuried -centuries -centurion -centurions -century's -centurist -CEO -ceonocyte -ceorl -ceorlish -ceorls -cep -cepa -cepaceous -cepe -cepes -cephadia -cephaeline -Cephaelis -cephal- -cephala -Cephalacanthidae -Cephalacanthus -cephalad -cephalagra -cephalalgy -cephalalgia -cephalalgic -cephalanthium -cephalanthous -Cephalanthus -Cephalaspis -Cephalata -cephalate -cephaldemae -cephalemia -cephaletron -Cephaleuros -cephalexin -cephalhematoma -cephalhydrocele -cephalic -cephalically -cephalin -Cephalina -cephaline -cephalins -cephalism -cephalitis -cephalization -cephalo- -cephaloauricular -cephalob -Cephalobranchiata -cephalobranchiate -cephalocathartic -cephalocaudal -cephalocele -cephalocentesis -cephalocercal -Cephalocereus -cephalochord -Cephalochorda -cephalochordal -Cephalochordata -cephalochordate -cephalocyst -cephaloclasia -cephaloclast -cephalocone -cephaloconic -cephalodia -cephalodymia -cephalodymus -cephalodynia -cephalodiscid -Cephalodiscida -Cephalodiscus -cephalodium -cephalofacial -cephalogenesis -cephalogram -cephalograph -cephalohumeral -cephalohumeralis -cephaloid -cephalology -cephalom -cephalomancy -cephalomant -cephalomelus -cephalomenia -cephalomeningitis -cephalomere -cephalometer -cephalometry -cephalometric -cephalomyitis -cephalomotor -cephalon -cephalonasal -Cephalonia -cephalopagus -cephalopathy -cephalopharyngeal -cephalophyma -cephalophine -cephalophorous -Cephalophus -cephaloplegia -cephaloplegic -cephalopod -Cephalopoda -cephalopodan -cephalopodic -cephalopodous -Cephalopterus -cephalorachidian -cephalorhachidian -cephaloridine -cephalosome -cephalospinal -cephalosporin -Cephalosporium -cephalostyle -Cephalotaceae -cephalotaceous -Cephalotaxus -cephalotheca -cephalothecal -cephalothoraces -cephalothoracic -cephalothoracopagus -cephalothorax -cephalothoraxes -cephalotome -cephalotomy -cephalotractor -cephalotribe -cephalotripsy -cephalotrocha -Cephalotus -cephalous -cephalus -Cephas -Cephei -Cepheid -cepheids -cephen -Cepheus -cephid -Cephidae -Cephus -Cepolidae -Ceporah -cepous -ceps -cepter -ceptor -CEQ -cequi -cera -ceraceous -cerago -ceral -Cerallua -Ceram -ceramal -ceramals -cerambycid -Cerambycidae -Cerambus -Ceramiaceae -ceramiaceous -ceramic -ceramicist -ceramicists -ceramicite -ceramics -ceramidium -ceramist -ceramists -Ceramium -ceramography -ceramographic -cerargyrite -ceras -cerasein -cerasin -cerastes -Cerastium -Cerasus -cerat -cerat- -cerata -cerate -ceratectomy -cerated -cerates -ceratiasis -ceratiid -Ceratiidae -ceratin -ceratinous -ceratins -ceratioid -ceration -ceratite -Ceratites -ceratitic -Ceratitidae -Ceratitis -ceratitoid -Ceratitoidea -Ceratium -cerato- -Ceratobatrachinae -ceratoblast -ceratobranchial -ceratocystis -ceratocricoid -Ceratodidae -Ceratodontidae -Ceratodus -ceratoduses -ceratofibrous -ceratoglossal -ceratoglossus -ceratohyal -ceratohyoid -ceratoid -ceratomandibular -ceratomania -Ceratonia -Ceratophyllaceae -ceratophyllaceous -Ceratophyllum -Ceratophyta -ceratophyte -Ceratophrys -Ceratops -Ceratopsia -ceratopsian -ceratopsid -Ceratopsidae -Ceratopteridaceae -ceratopteridaceous -Ceratopteris -ceratorhine -Ceratosa -Ceratosaurus -Ceratospongiae -ceratospongian -Ceratostomataceae -Ceratostomella -ceratotheca -ceratothecae -ceratothecal -Ceratozamia -ceraunia -ceraunics -ceraunite -ceraunogram -ceraunograph -ceraunomancy -ceraunophone -ceraunoscope -ceraunoscopy -Cerbberi -Cerberean -Cerberi -Cerberic -Cerberus -Cerberuses -cercal -cercaria -cercariae -cercarial -cercarian -cercarias -cercariform -cercelee -cerci -Cercidiphyllaceae -Cercyon -Cercis -cercises -cercis-leaf -cercle -Cercocebus -Cercolabes -Cercolabidae -cercomonad -Cercomonadidae -Cercomonas -Cercopes -cercopid -Cercopidae -cercopithecid -Cercopithecidae -Cercopithecoid -Cercopithecus -cercopod -Cercospora -Cercosporella -cercus -Cerdonian -CerE -cereal -cerealian -cerealin -cerealism -cerealist -cerealose -cereals -cereal's -cerebbella -cerebella -cerebellar -cerebellifugal -cerebellipetal -cerebellitis -cerebellocortex -cerebello-olivary -cerebellopontile -cerebellopontine -cerebellorubral -cerebellospinal -cerebellum -cerebellums -cerebr- -cerebra -cerebral -cerebralgia -cerebralism -cerebralist -cerebralization -cerebralize -cerebrally -cerebrals -cerebrasthenia -cerebrasthenic -cerebrate -cerebrated -cerebrates -cerebrating -cerebration -cerebrational -cerebrations -Cerebratulus -cerebri -cerebric -cerebricity -cerebriform -cerebriformly -cerebrifugal -cerebrin -cerebripetal -cerebritis -cerebrize -cerebro- -cerebrocardiac -cerebrogalactose -cerebroganglion -cerebroganglionic -cerebroid -cerebrology -cerebroma -cerebromalacia -cerebromedullary -cerebromeningeal -cerebromeningitis -cerebrometer -cerebron -cerebronic -cerebro-ocular -cerebroparietal -cerebropathy -cerebropedal -cerebrophysiology -cerebropontile -cerebropsychosis -cerebrorachidian -cerebrosclerosis -cerebroscope -cerebroscopy -cerebrose -cerebrosensorial -cerebroside -cerebrosis -cerebrospinal -cerebro-spinal -cerebrospinant -cerebrosuria -cerebrotomy -cerebrotonia -cerebrotonic -cerebrovascular -cerebrovisceral -cerebrum -cerebrums -cerecloth -cerecloths -cered -Ceredo -cereless -Cerelia -Cerell -Cerelly -Cerellia -cerement -cerements -ceremony -ceremonial -ceremonialism -ceremonialist -ceremonialists -ceremonialize -ceremonially -ceremonialness -ceremonials -ceremoniary -ceremonies -ceremonious -ceremoniously -ceremoniousness -ceremony's -Cerenkov -cereous -cerer -cererite -Ceres -Ceresco -ceresin -ceresine -Cereus -cereuses -cerevis -cerevisial -cereza -Cerf -cerfoil -Cery -ceria -Cerialia -cerianthid -Cerianthidae -cerianthoid -Cerianthus -cerias -ceric -ceride -ceriferous -cerigerous -Cerigo -ceryl -cerilla -cerillo -ceriman -cerimans -cerin -cerine -Cerynean -cering -Cerinthe -Cerinthian -Ceriomyces -Cerion -Cerionidae -ceriops -Ceriornis -ceriph -ceriphs -Cerys -cerise -cerises -cerite -cerites -Cerithiidae -cerithioid -Cerithium -cerium -ceriums -Ceryx -CERMET -cermets -CERN -Cernauti -cerned -cerning -cerniture -Cernuda -cernuous -cero -cero- -cerograph -cerographer -cerography -cerographic -cerographical -cerographies -cerographist -ceroid -ceroline -cerolite -ceroma -ceromancy -ceromez -ceroon -cerophilous -ceroplast -ceroplasty -ceroplastic -ceroplastics -ceros -cerosin -ceroso- -cerotate -cerote -cerotene -cerotic -cerotin -cerotype -cerotypes -cerous -ceroxyle -Ceroxylon -Cerracchio -cerrero -cerre-tree -cerrial -Cerrillos -cerris -Cerritos -Cerro -Cerrogordo -CERT -cert. -certain -certainer -certainest -certainly -certainness -certainty -certainties -certes -Certhia -Certhiidae -certy -Certie -certif -certify -certifiability -certifiable -certifiableness -certifiably -certificate -certificated -certificates -certificating -certification -certifications -certificative -certificator -certificatory -certified -certifier -certifiers -certifies -certifying -certiorari -certiorate -certiorating -certioration -certis -certitude -certitudes -certosa -certose -certosina -certosino -cerule -cerulean -ceruleans -cerulein -ceruleite -ceruleo- -ceruleolactite -ceruleous -cerulescent -ceruleum -cerulific -cerulignol -cerulignone -ceruloplasmin -cerumen -cerumens -ceruminal -ceruminiferous -ceruminous -cerumniparous -ceruse -ceruses -cerusite -cerusites -cerussite -cervalet -Cervantes -cervantic -Cervantist -cervantite -cervelas -cervelases -cervelat -cervelats -cerveliere -cervelliere -Cerveny -cervical -Cervicapra -cervicaprine -cervicectomy -cervices -cervicicardiac -cervicide -cerviciplex -cervicispinal -cervicitis -cervico- -cervicoauricular -cervicoaxillary -cervicobasilar -cervicobrachial -cervicobregmatic -cervicobuccal -cervicodynia -cervicodorsal -cervicofacial -cervicohumeral -cervicolabial -cervicolingual -cervicolumbar -cervicomuscular -cerviconasal -cervico-occipital -cervico-orbicular -cervicorn -cervicoscapular -cervicothoracic -cervicovaginal -cervicovesical -cervid -Cervidae -Cervin -Cervinae -cervine -cervisia -cervisial -cervix -cervixes -cervoid -cervuline -Cervulus -Cervus -Cesar -Cesare -Cesarean -cesareans -cesarevitch -Cesaria -Cesarian -cesarians -Cesaro -cesarolite -Cesena -Cesya -cesious -cesium -cesiums -cespititious -cespititous -cespitose -cespitosely -cespitulose -cess -cessant -cessantly -cessation -cessations -cessation's -cessative -cessavit -cessed -cesser -cesses -cessible -cessing -cessio -cession -cessionaire -cessionary -cessionaries -cessionee -cessions -cessment -Cessna -cessor -cesspipe -cesspit -cesspits -cesspool -cesspools -cest -cesta -Cestar -cestas -ceste -Cesti -Cestida -Cestidae -Cestoda -Cestodaria -cestode -cestodes -cestoi -cestoid -Cestoidea -cestoidean -cestoids -ceston -cestos -Cestracion -cestraciont -Cestraciontes -Cestraciontidae -cestraction -Cestrian -Cestrinus -Cestrum -cestui -cestuy -cestus -cestuses -cesura -cesurae -cesural -cesuras -cesure -CET -cet- -Ceta -Cetacea -cetacean -cetaceans -cetaceous -cetaceum -cetane -cetanes -Cete -cetene -ceteosaur -cetera -ceterach -cetes -Ceti -cetic -ceticide -Cetid -cetyl -cetylene -cetylic -cetin -Cetinje -Cetiosauria -cetiosaurian -Cetiosaurus -Ceto -cetology -cetological -cetologies -cetologist -Cetomorpha -cetomorphic -Cetonia -cetonian -Cetoniides -Cetoniinae -cetorhinid -Cetorhinidae -cetorhinoid -Cetorhinus -cetotolite -Cetraria -cetraric -cetrarin -Cetura -Cetus -Ceuta -CEV -cevadilla -cevadilline -cevadine -Cevdet -Cevennes -Cevennian -Cevenol -Cevenole -CEVI -cevian -ceviche -ceviches -cevine -cevitamic -Cezanne -Cezannesque -CF -cf. -CFA -CFB -CFC -CFCA -CFD -CFE -CFF -cfh -CFHT -CFI -CFL -cfm -CFO -CFP -CFR -cfs -CG -cg. -CGA -CGCT -CGE -CGI -CGIAR -CGM -CGN -CGS -CGX -CH -ch. -Ch.B. -Ch.E. -CHA -chaa -Cha'ah -chab -chabasie -chabasite -chabazite -chaber -Chabichou -Chablis -Chabot -chabouk -chabouks -Chabrier -Chabrol -chabuk -chabuks -chabutra -Chac -chacate -chac-chac -chaccon -Chace -Cha-cha -cha-cha-cha -cha-chaed -cha-chaing -chachalaca -chachalakas -Chachapuya -cha-chas -chack -chack-bird -Chackchiuma -chacker -chackle -chackled -chackler -chackling -chacma -chacmas -Chac-mool -Chaco -chacoli -Chacon -chacona -chaconne -chaconnes -chacra -chacte -chacun -Chad -Chadabe -chadacryst -chadar -chadarim -chadars -Chadbourn -Chadbourne -Chadburn -Chadd -Chadderton -Chaddy -Chaddie -Chaddsford -chadelle -Chader -Chadic -chadless -chadlock -chador -chadors -chadri -Chadron -chads -Chadwick -Chadwicks -Chae -Chaenactis -Chaenolobus -Chaenomeles -Chaeronea -chaeta -chaetae -chaetal -Chaetangiaceae -Chaetangium -Chaetetes -Chaetetidae -Chaetifera -chaetiferous -Chaetites -Chaetitidae -Chaetochloa -Chaetodon -chaetodont -chaetodontid -Chaetodontidae -chaetognath -Chaetognatha -chaetognathan -chaetognathous -chaetophobia -Chaetophora -Chaetophoraceae -chaetophoraceous -Chaetophorales -chaetophorous -chaetopod -Chaetopoda -chaetopodan -chaetopodous -chaetopterin -Chaetopterus -chaetosema -Chaetosoma -Chaetosomatidae -Chaetosomidae -chaetotactic -chaetotaxy -Chaetura -chafe -chafed -Chafee -chafer -chafery -chaferies -chafers -chafes -chafewax -chafe-wax -chafeweed -chaff -chaffcutter -chaffed -Chaffee -chaffer -chaffered -chafferer -chafferers -chaffery -chaffering -chaffers -chaffeur-ship -chaff-flower -chaffy -chaffier -chaffiest -Chaffin -Chaffinch -chaffinches -chaffiness -chaffing -chaffingly -chaffless -chafflike -chaffman -chaffron -chaffs -chaffseed -chaffwax -chaffweed -chaff-weed -chafing -chaft -chafted -Chaga -chagal -Chagall -chagan -Chagatai -Chagga -chagigah -chagoma -Chagres -chagrin -chagrined -chagrining -chagrinned -chagrinning -chagrins -chaguar -chagul -Chahab -Chahar -chahars -chai -chay -chaya -chayaroot -Chayefsky -Chaiken -Chaikovski -Chaille -Chailletiaceae -Chaillot -Chaim -Chayma -Chain -chainage -chain-bag -chainbearer -chainbreak -chain-bridge -chain-driven -chain-drooped -chaine -chained -Chainey -chainer -chaines -chainette -Chaing -Chaingy -chaining -chainless -chainlet -chainlike -chainmaker -chainmaking -chainman -chainmen -chainomatic -chainon -chainplate -chain-pump -chain-react -chain-reacting -chains -chain-shaped -chain-shot -chainsman -chainsmen -chainsmith -chain-smoke -chain-smoked -chain-smoker -chain-smoking -chain-spotted -chainstitch -chain-stitch -chain-stitching -chain-swung -chain-testing -chainwale -chain-wale -chain-welding -chainwork -chain-work -Chayota -chayote -chayotes -chair -chairborne -chaired -chairer -chair-fast -chairing -chairlady -chairladies -chairless -chairlift -chairmaker -chairmaking -chairman -chairmaned -chairmaning -chairmanned -chairmanning -chairmans -chairmanship -chairmanships -chairmen -chairmender -chairmending -chair-mortising -chayroot -chairperson -chairpersons -chairperson's -chairs -chair-shaped -chairway -chairwarmer -chair-warmer -chairwoman -chairwomen -chais -chays -chaise -chaiseless -chaise-longue -chaise-marine -chaises -Chait -chaitya -chaityas -chaitra -chaja -Chak -chaka -Chakales -chakar -chakari -Chakavski -chakazi -chakdar -Chaker -chakobu -chakra -chakram -chakras -chakravartin -chaksi -Chal -chalaco -chalah -chalahs -chalana -chalastic -Chalastogastra -chalaza -chalazae -chalazal -chalazas -chalaze -chalazia -chalazian -chalaziferous -chalazion -chalazium -chalazogam -chalazogamy -chalazogamic -chalazoidite -chalazoin -chalcanth -chalcanthite -Chalcedon -chalcedony -Chalcedonian -chalcedonic -chalcedonies -chalcedonyx -chalcedonous -chalchihuitl -chalchuite -chalcid -Chalcidian -Chalcidic -chalcidica -Chalcidice -chalcidicum -chalcidid -Chalcididae -chalcidiform -chalcidoid -Chalcidoidea -chalcids -Chalcioecus -Chalciope -Chalcis -chalcites -chalco- -chalcocite -chalcogen -chalcogenide -chalcograph -chalcographer -chalcography -chalcographic -chalcographical -chalcographist -chalcolite -Chalcolithic -chalcomancy -chalcomenite -chalcon -chalcone -chalcophanite -chalcophile -chalcophyllite -chalcopyrite -chalcosiderite -chalcosine -chalcostibite -chalcotrichite -chalcotript -chalcus -Chald -Chaldaei -Chaldae-pahlavi -Chaldaic -Chaldaical -Chaldaism -Chaldea -Chaldean -Chaldee -chalder -chaldese -chaldron -chaldrons -chaleh -chalehs -chalet -chalets -Chalfont -Chaliapin -Chalybean -chalybeate -chalybeous -Chalybes -chalybite -chalice -chaliced -chalices -chalice's -chalicosis -chalicothere -chalicotheriid -Chalicotheriidae -chalicotherioid -Chalicotherium -Chalina -Chalinidae -chalinine -Chalinitis -chalk -chalkboard -chalkboards -chalkcutter -chalk-eating -chalked -chalk-eyed -chalker -chalky -chalkier -chalkiest -chalkiness -chalking -chalklike -chalkline -chalkography -chalkone -chalkos -chalkosideric -chalkotheke -chalkpit -chalkrail -chalks -chalkstone -chalk-stone -chalkstony -chalk-talk -chalk-white -chalkworker -challa -challah -challahs -challas -challengable -challenge -challengeable -challenged -challengee -challengeful -challenger -challengers -challenges -challenging -challengingly -Chally -challie -challies -challiho -challihos -Challis -challises -challot -challote -challoth -Chalmer -Chalmers -Chalmette -chalon -chalone -chalones -Chalonnais -Chalons -Chalons-sur-Marne -Chalon-sur-Sa -chalot -chaloth -chaloupe -chalque -chalta -chaluka -Chalukya -Chalukyan -chalumeau -chalumeaux -chalutz -chalutzim -Cham -Chama -Chamacea -Chamacoco -chamade -chamades -Chamaebatia -Chamaecyparis -Chamaecistus -chamaecranial -Chamaecrista -Chamaedaphne -Chamaeleo -Chamaeleon -Chamaeleontidae -Chamaeleontis -Chamaelirium -Chamaenerion -Chamaepericlymenum -chamaephyte -chamaeprosopic -Chamaerops -chamaerrhine -Chamaesaura -Chamaesyce -Chamaesiphon -Chamaesiphonaceae -Chamaesiphonaceous -Chamaesiphonales -chamal -Chamar -chambellan -chamber -chamberdeacon -chamber-deacon -chambered -chamberer -chamberfellow -Chambery -chambering -Chamberino -Chamberlain -chamberlainry -chamberlains -chamberlain's -chamberlainship -chamberlet -chamberleted -chamberletted -Chamberlin -chambermaid -chambermaids -chamber-master -Chambers -Chambersburg -Chambersville -Chambertin -chamberwoman -Chambioa -Chamblee -Chambord -chambray -chambrays -chambranle -chambre -chambrel -Chambry -chambul -Chamdo -chamecephaly -chamecephalic -chamecephalous -chamecephalus -chameleon -chameleonic -chameleonize -chameleonlike -chameleons -chametz -chamfer -chamfered -chamferer -chamfering -chamfers -chamfrain -chamfron -chamfrons -Chamian -Chamicuro -Chamidae -Chaminade -Chamyne -Chamisal -chamise -chamises -chamiso -chamisos -Chamite -Chamizal -Chamkanni -Chamkis -chamlet -chamm -chamma -chammy -chammied -chammies -chammying -chamois -chamoised -chamoises -Chamoisette -chamoising -chamoisite -chamoix -chamoline -chamomile -Chamomilla -Chamonix -Chamorro -Chamorros -Chamos -chamosite -chamotte -Chamouni -Champ -Champa -champac -champaca -champacol -champacs -Champagne -Champagne-Ardenne -champagned -champagneless -champagnes -champagning -champagnize -champagnized -champagnizing -Champaign -Champaigne -champain -champak -champaka -champaks -champart -champe -champed -Champenois -champer -champerator -champers -champert -champerty -champerties -champertor -champertous -champy -champian -Champigny-sur-Marne -champignon -champignons -champine -champing -champion -championed -championess -championing -championize -championless -championlike -champions -championship -championships -championship's -Champlain -Champlainic -champlev -champleve -Champlin -Champollion -champs -chams -Cham-selung -chamsin -Chamuel -Chan -Ch'an -Chana -Chanaan -Chanabal -Chanc -Chanca -Chancay -Chance -chanceable -chanceably -chanced -chance-dropped -chanceful -chancefully -chancefulness -chance-hit -chance-hurt -Chancey -chancel -chanceled -chanceless -chancelled -chancellery -chancelleries -Chancellor -chancellorate -chancelloress -chancellory -chancellories -chancellorism -chancellors -chancellorship -chancellorships -Chancellorsville -Chancelor -chancelry -chancels -chanceman -chance-medley -chancemen -chance-met -chance-poised -chancer -chancered -chancery -chanceries -chancering -chances -chance-shot -chance-sown -chance-taken -chancewise -chance-won -Chan-chan -chanche -chanchito -chancy -chancier -chanciest -chancily -chanciness -chancing -chancito -chanco -chancre -chancres -chancriform -chancroid -chancroidal -chancroids -chancrous -Chanda -Chandal -chandala -chandam -Chandarnagar -chandelier -chandeliers -chandelier's -chandelle -chandelled -chandelles -chandelling -Chandernagor -Chandernagore -Chandi -Chandigarh -Chandler -chandleress -chandlery -chandleries -chandlering -chandlerly -chandlers -Chandlersville -Chandlerville -Chandless -chandoo -Chandos -Chandra -Chandragupta -chandrakanta -chandrakhi -chandry -chandu -chandui -chanduy -chandul -Chane -Chaney -Chanel -chaneled -chaneling -chanelled -chanfrin -chanfron -chanfrons -Chang -changa -changable -Changan -changar -Changaris -Changchiakow -Changchow -Changchowfu -Changchun -change -changeability -changeable -changeableness -changeably -changeabout -changed -changedale -changedness -changeful -changefully -changefulness -change-house -changeless -changelessly -changelessness -changeling -changelings -changemaker -changement -changeover -change-over -changeovers -changepocket -changer -change-ringing -changer-off -changers -changes -change-up -Changewater -changing -Changoan -Changos -changs -Changsha -Changteh -Changuina -Changuinan -Chanhassen -Chany -Chanidae -chank -chankings -Channa -Channahon -Channel -channelbill -channeled -channeler -channeling -channelization -channelize -channelized -channelizes -channelizing -channelled -channeller -channellers -channeller's -channelly -channelling -channels -channelure -channelwards -channer -Channing -chanoyu -chanson -chansonette -chansonnette -chansonnier -chansonniers -chansons -Chansoo -chanst -chant -chantable -chantage -chantages -Chantal -Chantalle -chantant -chantecler -chanted -chantefable -chante-fable -chante-fables -chantey -chanteyman -chanteys -chantepleure -chanter -chanterelle -chanters -chantership -chanteur -chanteuse -chanteuses -chanty -chanticleer -chanticleers -chanticleer's -chantier -chanties -Chantilly -chanting -chantingly -chantlate -chantment -chantor -chantors -chantress -chantry -chantries -chants -Chanukah -Chanute -Chao -Chaoan -Chaochow -Chaochowfu -chaogenous -chaology -Chaon -chaori -chaos -chaoses -chaotic -chaotical -chaotically -chaoticness -chaoua -Chaouia -Chaource -chaoush -CHAP -chap. -Chapa -Chapacura -Chapacuran -chapah -Chapanec -chapapote -chaparajos -chaparejos -chaparral -chaparrals -chaparraz -chaparro -chapati -chapaties -chapatis -chapatti -chapatty -chapatties -chapattis -chapbook -chap-book -chapbooks -chape -chapeau -chapeaus -chapeaux -chaped -Chapei -Chapel -chapeled -chapeless -chapelet -chapelgoer -chapelgoing -chapeling -chapelize -Chapell -chapellage -chapellany -chapelled -chapelling -chapelman -chapelmaster -chapelry -chapelries -chapels -chapel's -chapelward -Chapen -chaperno -chaperon -chaperonage -chaperonages -chaperone -chaperoned -chaperones -chaperoning -chaperonless -chaperons -chapes -chapfallen -chap-fallen -chapfallenly -Chapin -chapiter -chapiters -chapitle -chapitral -chaplain -chaplaincy -chaplaincies -chaplainry -chaplains -chaplain's -chaplainship -Chapland -chaplanry -chapless -chaplet -chapleted -chaplets -Chaplin -Chapman -Chapmansboro -chapmanship -Chapmanville -chapmen -chap-money -Chapnick -chapon -chapote -chapourn -chapournet -chapournetted -chappal -Chappaqua -Chappaquiddick -chappaul -chappe -chapped -Chappelka -Chappell -Chappells -chapper -Chappy -Chappie -chappies -chappin -chapping -chappow -chaprasi -chaprassi -chaps -chap's -chapstick -chapt -chaptalization -chaptalize -chaptalized -chaptalizing -chapter -chapteral -chaptered -chapterful -chapterhouse -chaptering -chapters -chapter's -Chaptico -chaptrel -Chapultepec -chapwoman -chaqueta -chaquetas -Char -char- -CHARA -charabanc -char-a-banc -charabancer -charabancs -char-a-bancs -charac -Characeae -characeous -characetum -characid -characids -characin -characine -characinid -Characinidae -characinoid -characins -charact -character -charactered -characterful -charactery -characterial -characterical -characteries -charactering -characterisable -characterisation -characterise -characterised -characteriser -characterising -characterism -characterist -characteristic -characteristical -characteristically -characteristicalness -characteristicness -characteristics -characteristic's -characterizable -characterization -characterizations -characterization's -characterize -characterized -characterizer -characterizers -characterizes -characterizing -characterless -characterlessness -characterology -characterological -characterologically -characterologist -characters -character's -characterstring -charactonym -charade -charades -Charadrii -Charadriidae -charadriiform -Charadriiformes -charadrine -charadrioid -Charadriomorphae -Charadrius -Charales -charango -charangos -chararas -charas -charases -charbocle -charbon -Charbonneau -Charbonnier -charbroil -charbroiled -charbroiling -charbroils -Charca -Charcas -Charchemish -charcia -charco -charcoal -charcoal-burner -charcoaled -charcoal-gray -charcoaly -charcoaling -charcoalist -charcoals -Charcot -charcuterie -charcuteries -charcutier -charcutiers -Chard -Chardin -chardock -Chardon -Chardonnay -Chardonnet -chards -chare -chared -charely -Charente -Charente-Maritime -Charenton -charer -chares -charet -chareter -charette -chargable -charga-plate -charge -chargeability -chargeable -chargeableness -chargeably -chargeant -charge-a-plate -charged -chargedness -chargee -chargeful -chargehouse -charge-house -chargeless -chargeling -chargeman -CHARGEN -charge-off -charger -chargers -charges -chargeship -chargfaires -charging -Chari -chary -Charybdian -Charybdis -Charicleia -Chariclo -Charie -charier -chariest -Charil -Charyl -charily -Charin -chariness -charing -Chari-Nile -Chariot -charioted -chariotee -charioteer -charioteers -charioteership -charioting -chariotlike -chariotman -chariotry -chariots -chariot's -chariot-shaped -chariotway -Charis -charism -charisma -charismas -charismata -charismatic -charisms -Charissa -Charisse -charisticary -Charita -charitable -charitableness -charitably -charitative -Charites -Charity -charities -charityless -charity's -Chariton -charivan -charivari -charivaried -charivariing -charivaris -chark -charka -charkas -charked -charkha -charkhana -charkhas -charking -charks -Charla -charlady -charladies -charlatan -charlatanic -charlatanical -charlatanically -charlatanish -charlatanism -charlatanistic -charlatanry -charlatanries -charlatans -charlatanship -Charlean -Charlee -Charleen -Charley -charleys -Charlemagne -Charlemont -Charlena -Charlene -Charleroi -Charleroy -Charles -Charleston -charlestons -Charlestown -charlesworth -Charlet -Charleton -Charleville-Mzi -Charlevoix -Charlie -Charlye -charlies -Charlyn -Charline -Charlyne -Charlo -charlock -charlocks -Charlot -Charlotta -Charlotte -Charlottenburg -Charlottesville -Charlottetown -Charlotteville -Charlton -charm -Charmain -Charmaine -Charmane -charm-bound -charm-built -Charmco -charmed -charmedly -charmel -charm-engirdled -charmer -charmers -Charmeuse -charmful -charmfully -charmfulness -Charmian -Charminar -Charmine -charming -charminger -charmingest -charmingly -charmingness -Charmion -charmless -charmlessly -charmonium -charms -charm-struck -charmwise -charneco -charnel -charnels -charnockite -charnockites -charnu -Charo -Charolais -Charollais -Charon -Charonian -Charonic -Charontas -Charophyta -Charops -charoses -charoset -charoseth -charpai -charpais -Charpentier -charpie -charpit -charpoy -charpoys -charque -charqued -charqui -charquid -charquis -charr -charras -charre -charred -charrette -Charry -charrier -charriest -charring -charro -Charron -charros -charrs -Charruan -Charruas -chars -charshaf -charsingha -chart -Charta -chartable -chartaceous -chartae -charted -charter -charterable -charterage -chartered -charterer -charterers -Charterhouse -Charterhouses -chartering -Charteris -charterism -Charterist -charterless -chartermaster -charter-party -Charters -charthouse -charting -chartings -Chartism -Chartist -chartists -Chartley -chartless -chartlet -chartographer -chartography -chartographic -chartographical -chartographically -chartographist -chartology -chartometer -chartophylacia -chartophylacium -chartophylax -chartophylaxes -Chartres -Chartreuse -chartreuses -Chartreux -chartroom -charts -chartula -chartulae -chartulary -chartularies -chartulas -charuk -Charvaka -charvet -charwoman -charwomen -Chas -chasable -Chase -chaseable -Chaseburg -chased -chase-hooped -chase-hooping -Chaseley -chase-mortised -chaser -chasers -chases -chashitsu -Chasid -Chasidic -Chasidim -Chasidism -chasing -chasings -Chaska -Chasles -chasm -chasma -chasmal -chasmed -chasmy -chasmic -chasmogamy -chasmogamic -chasmogamous -chasmophyte -chasms -chasm's -chass -Chasse -chassed -chasseing -Chasselas -Chassell -chasse-maree -chassepot -chassepots -chasses -chasseur -chasseurs -chassignite -Chassin -chassis -Chastacosta -Chastain -chaste -chastelain -chastely -chasten -chastened -chastener -chasteners -chasteness -chastenesses -chastening -chasteningly -chastenment -chastens -chaster -chastest -chasteweed -chasty -chastiment -chastisable -chastise -chastised -chastisement -chastisements -chastiser -chastisers -chastises -chastising -Chastity -chastities -chastize -chastizer -chasuble -chasubled -chasubles -chat -Chataignier -chataka -Chatav -Chatawa -chatchka -chatchkas -chatchke -chatchkes -Chateau -Chateaubriand -Chateaugay -chateaugray -Chateauneuf-du-Pape -Chateauroux -chateaus -chateau's -Chateau-Thierry -chateaux -chatelain -chatelaine -chatelaines -chatelainry -chatelains -chatelet -chatellany -chateus -Chatfield -Chatham -chathamite -chathamites -chati -Chatillon -Chatino -chatoyance -chatoyancy -chatoyant -Chatom -chaton -chatons -Chatot -chats -chatsome -Chatsworth -chatta -chattable -chattack -chattah -Chattahoochee -Chattanooga -Chattanoogan -Chattanoogian -Chattaroy -chattation -chatted -chattel -chattelhood -chattelism -chattelization -chattelize -chattelized -chattelizing -chattels -chattelship -chatter -chatteration -chatterbag -chatterbox -chatterboxes -chattered -chatterer -chatterers -chattererz -chattery -chattering -chatteringly -Chatterjee -chattermag -chattermagging -chatters -Chatterton -Chattertonian -Chatti -chatty -chattier -chatties -chattiest -chattily -chattiness -chatting -chattingly -Chatwin -chatwood -Chaucer -Chaucerian -Chauceriana -Chaucerianism -Chaucerism -Chauchat -chaudfroid -chaud-froid -chaud-melle -Chaudoin -chaudron -chaufer -chaufers -chauffage -chauffer -chauffers -chauffeur -chauffeured -chauffeuring -chauffeurs -chauffeurship -chauffeuse -chauffeuses -Chaui -chauk -chaukidari -chauldron -chaule -Chauliodes -chaulmaugra -chaulmoogra -chaulmoograte -chaulmoogric -chaulmugra -chaum -chaumer -chaumiere -Chaumont -chaumontel -Chaumont-en-Bassigny -chaun- -Chauna -Chaunce -Chauncey -chaunoprockt -chaunt -chaunted -chaunter -chaunters -chaunting -chaunts -chauri -chaus -chausse -chaussee -chausseemeile -chaussees -chausses -Chausson -chaussure -chaussures -Chautauqua -Chautauquan -chaute -Chautemps -chauth -chauve -Chauvin -chauvinism -chauvinisms -chauvinist -chauvinistic -chauvinistically -chauvinists -Chavannes -Chavante -Chavantean -Chavaree -chave -Chavey -chavel -chavender -chaver -Chaves -Chavez -chavibetol -chavicin -chavicine -chavicol -Chavies -Chavignol -Chavin -chavish -chaw -chawan -chawbacon -chaw-bacon -chawbone -chawbuck -chawdron -chawed -chawer -chawers -Chawia -chawing -chawk -chawl -chawle -chawn -Chaworth -chaws -chawstick -chaw-stick -chazan -chazanim -chazans -chazanut -Chazy -chazzan -chazzanim -chazzans -chazzanut -chazzen -chazzenim -chazzens -ChB -ChE -Cheadle -Cheam -cheap -cheapen -cheapened -cheapener -cheapening -cheapens -cheaper -cheapery -cheapest -cheapie -cheapies -cheaping -cheapish -cheapishly -cheapjack -Cheap-jack -cheap-john -cheaply -cheapness -cheapnesses -cheapo -cheapos -cheaps -Cheapside -cheapskate -cheapskates -cheare -cheat -cheatable -cheatableness -cheated -cheatee -cheater -cheatery -cheateries -cheaters -Cheatham -cheating -cheatingly -cheatry -cheatrie -cheats -Cheb -Chebacco -Chebanse -chebec -chebeck -chebecs -chebel -chebog -Cheboygan -Cheboksary -chebule -chebulic -chebulinic -Checani -chechako -chechakos -Chechehet -chechem -Chechen -chechia -che-choy -check -check- -checkable -checkage -checkback -checkbird -checkbit -checkbite -checkbits -checkbook -checkbooks -checkbook's -check-canceling -checke -checked -checked-out -check-endorsing -checker -checkerbelly -checkerbellies -checkerberry -checker-berry -checkerberries -checkerbloom -checkerboard -checkerboarded -checkerboarding -checkerboards -checkerbreast -checker-brick -checkered -checkery -checkering -checkerist -checker-roll -checkers -checkerspot -checker-up -checkerwise -checkerwork -check-flood -checkhook -checky -check-in -checking -checklaton -checkle -checkless -checkline -checklist -checklists -checkman -checkmark -checkmate -checkmated -checkmates -checkmating -checkoff -checkoffs -checkout -check-out -checkouts -check-over -check-perforating -checkpoint -checkpointed -checkpointing -checkpoints -checkpoint's -checkrack -checkrail -checkrein -checkroll -check-roll -checkroom -checkrooms -checkrope -checkrow -checkrowed -checkrower -checkrowing -checkrows -checks -checkstone -check-stone -checkstrap -checkstring -check-string -checksum -checksummed -checksumming -checksums -checksum's -checkup -checkups -checkweigher -checkweighman -checkweighmen -checkwork -checkwriter -check-writing -Checotah -chedar -Cheddar -cheddaring -cheddars -cheddite -cheddites -cheder -cheders -chedite -chedites -chedlock -chedreux -CheE -cheecha -cheechaco -cheechako -cheechakos -chee-chee -cheeful -cheefuller -cheefullest -cheek -cheek-by-jowl -cheekbone -cheekbones -cheeked -cheeker -cheekful -cheekfuls -cheeky -cheekier -cheekiest -cheekily -cheekiness -cheeking -cheekish -cheekless -cheekpiece -cheeks -cheek's -Cheektowaga -cheeney -cheep -cheeped -cheeper -cheepers -cheepy -cheepier -cheepiest -cheepily -cheepiness -cheeping -cheeps -cheer -cheered -cheerer -cheerers -cheerful -cheerfulize -cheerfuller -cheerfullest -cheerfully -cheerfulness -cheerfulnesses -cheerfulsome -cheery -cheerier -cheeriest -cheerily -cheeriness -cheerinesses -cheering -cheeringly -cheerio -cheerios -cheerlead -cheerleader -cheerleaders -cheerleading -cheerled -cheerless -cheerlessly -cheerlessness -cheerlessnesses -cheerly -cheero -cheeros -cheers -cheer-up -cheese -cheeseboard -cheesebox -cheeseburger -cheeseburgers -cheesecake -cheesecakes -cheesecloth -cheesecloths -cheesecurd -cheesecutter -cheesed -cheeseflower -cheese-head -cheese-headed -cheeselep -cheeselip -cheesemaker -cheesemaking -cheesemonger -cheesemongery -cheesemongering -cheesemongerly -cheeseparer -cheeseparing -cheese-paring -cheeser -cheesery -cheeses -cheese's -cheesewood -cheesy -cheesier -cheesiest -cheesily -cheesiness -cheesing -cheet -cheetah -cheetahs -cheetal -cheeter -cheetie -cheetul -cheewink -cheezit -chef -Chefang -chef-d' -chef-d'oeuvre -chefdom -chefdoms -cheffed -Cheffetz -cheffing -Chefoo -Chefornak -Chefrinia -chefs -chef's -chefs-d'oeuvre -chego -chegoe -chegoes -chegre -Chehalis -cheiceral -Cheyenne -Cheyennes -cheil- -Cheilanthes -cheilion -cheilitis -Cheilodipteridae -Cheilodipterus -cheiloplasty -cheiloplasties -Cheilostomata -cheilostomatous -cheilotomy -cheilotomies -cheimaphobia -cheimatophobia -Cheyne -Cheyney -cheyneys -cheir -cheir- -cheiragra -Cheiranthus -cheiro- -Cheirogaleus -Cheiroglossa -cheirognomy -cheirography -cheirolin -cheiroline -cheirology -cheiromancy -cheiromegaly -Cheiron -cheiropatagium -cheiropod -cheiropody -cheiropodist -cheiropompholyx -Cheiroptera -cheiropterygium -cheirosophy -cheirospasm -Cheirotherium -Cheju -Cheka -chekan -Cheke -cheken -Chekhov -Chekhovian -cheki -Chekiang -Chekist -chekker -chekmak -chela -chelae -Chelan -chelas -chelaship -chelatable -chelate -chelated -chelates -chelating -chelation -chelator -chelators -chelem -chelerythrin -chelerythrine -Chelyabinsk -chelicer -chelicera -chelicerae -cheliceral -chelicerate -chelicere -chelide -Chelydidae -Chelidon -chelidonate -chelidonian -chelidonic -chelidonin -chelidonine -Chelidonium -Chelidosaurus -Chelydra -chelydre -Chelydridae -chelydroid -chelifer -Cheliferidea -cheliferous -cheliform -chelinga -chelingas -chelingo -chelingos -cheliped -chelys -Chelyuskin -Chellean -Chellman -chello -Chelmno -Chelmsford -Chelodina -chelodine -cheloid -cheloids -chelone -Chelonia -chelonian -chelonid -Chelonidae -cheloniid -Cheloniidae -chelonin -chelophore -chelp -Chelsae -Chelsea -Chelsey -Chelsy -Chelsie -Cheltenham -Chelton -Chelura -Chem -chem- -chem. -Chema -Chemakuan -Chemar -Chemaram -Chemarin -Chemash -chemasthenia -chemawinite -ChemE -Chemehuevi -Chemesh -chemesthesis -chemiatry -chemiatric -chemiatrist -chemic -chemical -chemicalization -chemicalize -chemically -chemicals -chemick -chemicked -chemicker -chemicking -chemico- -chemicoastrological -chemicobiology -chemicobiologic -chemicobiological -chemicocautery -chemicodynamic -chemicoengineering -chemicoluminescence -chemicoluminescent -chemicomechanical -chemicomineralogical -chemicopharmaceutical -chemicophysical -chemicophysics -chemicophysiological -chemicovital -chemics -chemiculture -chemigraph -chemigrapher -chemigraphy -chemigraphic -chemigraphically -chemiloon -chemiluminescence -chemiluminescent -chemin -cheminee -chemins -chemiotactic -chemiotaxic -chemiotaxis -chemiotropic -chemiotropism -chemiphotic -chemis -chemise -chemises -chemisette -chemism -chemisms -chemisorb -chemisorption -chemisorptive -chemist -chemistry -chemistries -chemists -chemist's -chemitype -chemitypy -chemitypies -chemizo -chemmy -Chemnitz -chemo- -chemoautotrophy -chemoautotrophic -chemoautotrophically -chemoceptor -chemokinesis -chemokinetic -chemolysis -chemolytic -chemolyze -chemonite -chemopallidectomy -chemopallidectomies -chemopause -chemophysiology -chemophysiological -chemoprophyalctic -chemoprophylactic -chemoprophylaxis -chemoreception -chemoreceptive -chemoreceptivity -chemoreceptivities -chemoreceptor -chemoreflex -chemoresistance -chemosensitive -chemosensitivity -chemosensitivities -chemoserotherapy -chemoses -Chemosh -chemosynthesis -chemosynthetic -chemosynthetically -chemosis -chemosmoic -chemosmoses -chemosmosis -chemosmotic -chemosorb -chemosorption -chemosorptive -chemosphere -chemospheric -chemostat -chemosterilant -chemosterilants -chemosurgery -chemosurgical -chemotactic -chemotactically -chemotaxy -chemotaxis -chemotaxonomy -chemotaxonomic -chemotaxonomically -chemotaxonomist -chemotherapeutic -chemotherapeutical -chemotherapeutically -chemotherapeuticness -chemotherapeutics -chemotherapy -chemotherapies -chemotherapist -chemotherapists -chemotic -chemotroph -chemotrophic -chemotropic -chemotropically -chemotropism -chempaduk -Chemstrand -Chemulpo -Chemult -Chemung -chemurgy -chemurgic -chemurgical -chemurgically -chemurgies -Chemush -Chen -chena -Chenab -Chenay -chenar -chende -cheneau -cheneaus -cheneaux -Chenee -Cheney -Cheneyville -chenet -chenevixite -chenfish -Cheng -chengal -Chengchow -Chengteh -Chengtu -chenica -Chenier -chenille -cheniller -chenilles -Chennault -Chenoa -chenopod -Chenopodiaceae -chenopodiaceous -Chenopodiales -Chenopodium -chenopods -Chenoweth -cheongsam -cheoplastic -Cheops -Chepachet -Chephren -chepster -cheque -chequebook -chequeen -chequer -chequerboard -chequer-chamber -chequered -chequering -Chequers -chequerwise -chequer-wise -chequerwork -chequer-work -cheques -chequy -chequin -chequinn -Cher -Chera -Cheraw -Cherbourg -cherchez -chercock -Chere -Cherey -cherely -cherem -Cheremis -Cheremiss -Cheremissian -Cheremkhovo -Cherenkov -chergui -Cheri -Chery -Cheria -Cherian -Cherianne -Cheribon -Cherice -Cherida -Cherie -Cherye -Cheries -Cheryl -Cherylene -Cherilyn -Cherilynn -cherimoya -cherimoyer -cherimolla -Cherin -Cherise -Cherish -cherishable -cherished -cherisher -cherishers -cherishes -cherishing -cherishingly -cherishment -Cheriton -Cherkess -Cherkesser -Cherlyn -Chermes -Chermidae -Chermish -cherna -chernites -Chernobyl -Chernomorish -Chernovtsy -Chernow -chernozem -chernozemic -cherogril -Cherokee -Cherokees -cheroot -cheroots -Cherri -Cherry -cherryblossom -cherry-bob -cherry-cheeked -cherry-colored -cherry-crimson -cherried -cherries -Cherryfield -cherry-flavored -cherrying -cherrylike -cherry-lipped -Cherrylog -cherry-merry -cherry-pie -cherry-red -cherry-ripe -cherry-rose -cherry's -cherrystone -cherrystones -Cherrita -Cherrytree -Cherryvale -Cherryville -cherry-wood -Chersydridae -chersonese -chert -cherte -cherty -chertier -chertiest -cherts -Chertsey -cherub -cherubfish -cherubfishes -cherubic -cherubical -cherubically -Cherubicon -Cherubikon -cherubim -cherubimic -cherubimical -cherubin -Cherubini -cherublike -cherubs -cherub's -cherup -Cherusci -Chervante -chervil -chervils -chervonei -chervonets -chervonetz -chervontsi -Ches -Chesaning -Chesapeake -chesboil -chesboll -chese -cheselip -Cheshire -Cheshunt -Cheshvan -chesil -cheskey -cheskeys -cheslep -Cheslie -Chesna -Chesnee -Chesney -Chesnut -cheson -chesoun -chess -Chessa -chess-apple -chessart -chessboard -chessboards -chessdom -chessel -chesser -chesses -chesset -Chessy -chessylite -chessist -chessman -chessmen -chess-men -chessner -chessom -chessplayer -chessplayers -chesstree -chess-tree -chest -chest-deep -chested -chesteine -Chester -chesterbed -Chesterfield -Chesterfieldian -chesterfields -Chesterland -chesterlite -Chesterton -Chestertown -Chesterville -chest-foundered -chestful -chestfuls -chesty -chestier -chestiest -chestily -chestiness -chestnut -chestnut-backed -chestnut-bellied -chestnut-brown -chestnut-collared -chestnut-colored -chestnut-crested -chestnut-crowned -chestnut-red -chestnut-roan -chestnuts -chestnut's -chestnut-sided -chestnutty -chestnut-winged -Cheston -chest-on-chest -chests -Cheswick -Cheswold -Chet -chetah -chetahs -Chetek -cheth -cheths -chetif -chetive -Chetnik -Chetopa -chetopod -chetrum -chetrums -chetty -chettik -Chetumal -chetverik -chetvert -Cheung -Cheux -Chev -chevachee -chevachie -chevage -Chevak -cheval -cheval-de-frise -chevalet -chevalets -cheval-glass -Chevalier -Chevalier-Montrachet -chevaliers -chevaline -Chevallier -chevance -chevaux -chevaux-de-frise -cheve -chevee -cheveys -chevelure -cheven -chevener -cheventayn -cheverel -cheveret -cheveril -Cheverly -cheveron -cheverons -Cheves -chevesaile -chevesne -chevet -chevetaine -Chevy -chevied -chevies -chevying -cheville -chevin -Cheviot -cheviots -chevisance -chevise -chevon -chevre -chevres -Chevret -chevrette -chevreuil -Chevrier -Chevrolet -chevrolets -chevron -chevrone -chevroned -chevronel -chevronelly -chevrony -chevronny -chevrons -chevron-shaped -chevronwise -chevrotain -Chevrotin -chevvy -Chew -Chewa -chewable -Chewalla -chewbark -chewed -Chewelah -cheweler -chewer -chewers -chewet -chewy -chewie -chewier -chewiest -chewing -chewing-out -chewink -chewinks -chews -chewstick -Chewsville -chez -chg -chg. -chhatri -Chhnang -CHI -chia -Chia-Chia -chiack -chyack -Chiayi -chyak -Chiaki -Chiam -Chian -Chiang -Chiangling -Chiangmai -Chianti -chiao -Chiapanec -Chiapanecan -Chiapas -Chiaretto -Chiari -chiarooscurist -chiarooscuro -chiarooscuros -chiaroscurist -chiaroscuro -chiaroscuros -Chiarra -chias -chiasm -chiasma -chiasmal -chiasmas -chiasmata -chiasmatic -chiasmatype -chiasmatypy -chiasmi -chiasmic -Chiasmodon -chiasmodontid -Chiasmodontidae -chiasms -chiasmus -Chiasso -chiastic -chiastolite -chiastoneural -chiastoneury -chiastoneurous -chiaus -chiauses -chiave -chiavetta -chyazic -Chiba -Chibcha -Chibchan -Chibchas -chibinite -chibol -chibouk -chibouks -chibouque -chibrit -Chic -chica -chicadee -Chicago -Chicagoan -chicagoans -chicayote -chicalote -chicane -chicaned -chicaner -chicanery -chicaneries -chicaners -chicanes -chicaning -Chicano -Chicanos -chicaric -chiccory -chiccories -chicer -chicest -chich -Chicha -chicharra -Chichester -chichevache -Chichewa -chichi -chichicaste -Chichihaerh -Chichihar -chichili -Chichimec -chichimecan -chichipate -chichipe -chichis -chichituna -Chichivache -chichling -Chick -chickabiddy -chickadee -chickadees -chickadee's -Chickahominy -Chickamauga -chickaree -Chickasaw -Chickasaws -Chickasha -chickee -chickees -chickell -chicken -chickenberry -chickenbill -chicken-billed -chicken-brained -chickenbreasted -chicken-breasted -chicken-breastedness -chickened -chicken-farming -chicken-hazard -chickenhearted -chicken-hearted -chickenheartedly -chicken-heartedly -chickenheartedness -chicken-heartedness -chickenhood -chickening -chicken-livered -chicken-liveredness -chicken-meat -chickenpox -chickens -chickenshit -chicken-spirited -chickens-toes -chicken-toed -chickenweed -chickenwort -chicker -chickery -chickhood -Chicky -Chickie -chickies -chickling -chickory -chickories -chickpea -chick-pea -chickpeas -chicks -chickstone -chickweed -chickweeds -chickwit -Chiclayo -chicle -chiclero -chicles -chicly -chicness -chicnesses -Chico -Chicoine -Chicomecoatl -Chicopee -Chicora -chicory -chicories -chicos -chicot -Chicota -chicote -chicqued -chicquer -chicquest -chicquing -chics -chid -chidden -chide -chided -chider -chiders -chides -Chidester -chiding -chidingly -chidingness -chidra -chief -chiefage -chiefdom -chiefdoms -chiefer -chiefery -chiefess -chiefest -chiefish -chief-justiceship -Chiefland -chiefless -chiefly -chiefling -chief-pledge -chiefry -chiefs -chiefship -chieftain -chieftaincy -chieftaincies -chieftainess -chieftainry -chieftainries -chieftains -chieftain's -chieftainship -chieftainships -chieftess -chiefty -chiel -chield -chields -chiels -Chiemsee -Chien -Chiengmai -Chiengrai -chierete -chievance -chieve -chiffchaff -chiff-chaff -chiffer -chifferobe -chiffon -chiffonade -chiffony -chiffonier -chiffoniers -chiffonnier -chiffonnieres -chiffonniers -chiffons -chifforobe -chifforobes -chiffre -chiffrobe -Chifley -chigetai -chigetais -chigga -chiggak -chigger -chiggers -chiggerweed -Chignik -chignon -chignoned -chignons -chigoe -chigoe-poison -chigoes -Chigwell -chih -chihfu -Chihli -Chihuahua -chihuahuas -Chikamatsu -chikara -chikee -Chikmagalur -Chil -chilacayote -chilacavote -chylaceous -chilalgia -chylangioma -chylaqueous -chilaria -chilarium -chilblain -chilblained -chilblains -Chilcat -Chilcats -Chilcoot -Chilcote -Child -childage -childbear -childbearing -child-bearing -childbed -childbeds -child-bereft -childbirth -child-birth -childbirths -childcrowing -Childe -childed -Childermas -Childers -Childersburg -childes -child-fashion -child-god -child-hearted -child-heartedness -childhood -childhoods -childing -childish -childishly -childishness -childishnesses -childkind -childless -childlessness -childlessnesses -childly -childlier -childliest -childlike -childlikeness -child-loving -child-minded -child-mindedness -childminder -childness -childproof -childre -children -childrenite -children's -Childress -childridden -Childs -childship -childward -childwife -childwite -Childwold -Chile -chyle -Chilean -Chileanization -Chileanize -chileans -chilectropion -chylemia -chilenite -Chiles -chyles -Chilhowee -Chilhowie -chili -chiliad -chiliadal -chiliadic -chiliadron -chiliads -chiliaedron -chiliagon -chiliahedron -chiliarch -chiliarchy -chiliarchia -chiliasm -chiliasms -chiliast -chiliastic -chiliasts -chilicote -chilicothe -chilidium -chilidog -chilidogs -chylidrosis -chilies -chylifaction -chylifactive -chylifactory -chyliferous -chylify -chylific -chylification -chylificatory -chylified -chylifying -chyliform -Chi-lin -Chilina -chilindre -Chilinidae -chilio- -chiliomb -Chilion -chilipepper -chilitis -Chilkat -Chilkats -Chill -chilla -chillagite -Chillan -chill-cast -chilled -chiller -chillers -chillest -chilli -chilly -Chillicothe -chillier -chillies -chilliest -chillily -chilliness -chillinesses -chilling -chillingly -chillis -chillish -Chilliwack -chillness -chillo -chilloes -Chillon -chillroom -chills -chillsome -chillum -chillumchee -chillums -Chilmark -Chilo -chilo- -chylo- -chylocauly -chylocaulous -chylocaulously -chylocele -chylocyst -chilodon -chilognath -Chilognatha -chilognathan -chilognathous -chilogrammo -chyloid -chiloma -Chilomastix -chilomata -chylomicron -Chilomonas -Chilon -chiloncus -chylopericardium -chylophylly -chylophyllous -chylophyllously -chiloplasty -chilopod -Chilopoda -chilopodan -chilopodous -chilopods -chylopoetic -chylopoiesis -chylopoietic -Chilopsis -Chiloquin -chylosis -Chilostoma -Chilostomata -chilostomatous -chilostome -chylothorax -chilotomy -chilotomies -chylous -Chilpancingo -Chilson -Chilt -chilte -Chiltern -Chilton -Chilung -chyluria -chilver -chym- -chimachima -Chimacum -chimaera -chimaeras -chimaerid -Chimaeridae -chimaeroid -Chimaeroidei -Chimayo -Chimakuan -Chimakum -Chimalakwe -Chimalapa -Chimane -chimango -Chimaphila -chymaqueous -chimar -Chimarikan -Chimariko -chimars -chymase -chimb -chimbe -chimble -chimbley -chimbleys -chimbly -chimblies -Chimborazo -Chimbote -chimbs -chime -chyme -chimed -Chimene -chimer -chimera -chimeral -chimeras -chimere -chimeres -chimeric -chimerical -chimerically -chimericalness -chimerism -chimers -chimes -chime's -chymes -chimesmaster -chymia -chymic -chymics -chymiferous -chymify -chymification -chymified -chymifying -chimin -chiminage -chiming -Chimique -chymist -chymistry -chymists -Chimkent -chimla -chimlas -chimley -chimleys -Chimmesyan -chimney -chimneyed -chimneyhead -chimneying -chimneyless -chimneylike -chimneyman -chimneypiece -chimney-piece -chimneypot -chimneys -chimney's -chymo- -Chimonanthus -chimopeelagic -chimopelagic -chymosin -chymosinogen -chymosins -chymotrypsin -chymotrypsinogen -chymous -chimp -chimpanzee -chimpanzees -chimps -Chimu -Chimus -Chin -Ch'in -Chin. -China -chinaberry -chinaberries -chinafy -chinafish -Chinagraph -chinalike -Chinaman -chinamania -china-mania -chinamaniac -Chinamen -chinampa -Chinan -chinanta -Chinantecan -Chinantecs -chinaphthol -chinar -chinaroot -chinas -Chinatown -chinaware -chinawoman -chinband -chinbeak -chin-bearded -chinbone -chin-bone -chinbones -chincapin -chinch -chincha -chinchayote -Chinchasuyu -chinche -chincher -chincherinchee -chincherinchees -chinches -chinchy -chinchier -chinchiest -chinchilla -chinchillas -chinchillette -chin-chin -chinchiness -chinching -chin-chinned -chin-chinning -chinchona -Chin-Chou -chincloth -chincof -chincona -Chincoteague -chincough -chindee -chin-deep -chindi -Chindit -Chindwin -chine -chined -Chinee -chinela -chinenses -chines -Chinese -Chinese-houses -Chinesery -chinfest -Ching -Ch'ing -Chinghai -Ch'ing-yan -chingma -Chingpaw -Chingtao -Ching-tu -Ching-t'u -chin-high -Chin-Hsien -Chinhwan -chinik -chiniks -chinin -chining -chiniofon -Chink -chinkapin -chinkara -chink-backed -chinked -chinker -chinkerinchee -chinkers -chinky -Chinkiang -chinkier -chinkiest -chinking -chinkle -chinks -Chinle -chinles -chinless -chinnam -Chinnampo -chinned -chinner -chinners -chinny -chinnier -chinniest -chinning -Chino -Chino- -chinoa -chinoidin -chinoidine -chinois -chinoiserie -Chino-japanese -chinol -chinoleine -chinoline -chinologist -chinone -chinones -Chinook -Chinookan -Chinooks -chinos -chinotoxine -chinotti -chinotto -chinovnik -chinpiece -chinquapin -chins -chin's -chinse -chinsed -chinsing -chint -chints -chintses -chintz -chintze -chintzes -chintzy -chintzier -chintziest -chintziness -Chinua -chin-up -chinwag -chin-wag -chinwood -Chiococca -chiococcine -Chiogenes -chiolite -chyometer -chionablepsia -Chionanthus -Chionaspis -Chione -Chionididae -Chionis -Chionodoxa -chionophobia -chiopin -Chios -Chiot -chiotilla -Chiou -Chyou -Chip -chipboard -chipchap -chipchop -Chipewyan -chipyard -Chipley -chiplet -chipling -Chipman -chipmuck -chipmucks -chipmunk -chipmunks -chipmunk's -chipolata -chippable -chippage -chipped -Chippendale -chipper -chippered -chippering -chippers -chipper-up -Chippewa -Chippeway -Chippeways -Chippewas -chippy -chippie -chippier -chippies -chippiest -chipping -chippings -chipproof -chip-proof -chypre -chips -chip's -chipwood -chiquero -chiquest -Chiquia -Chiquinquira -Chiquita -Chiquitan -Chiquito -chir- -Chirac -chiragra -chiragrical -chirayta -chiral -chiralgia -chirality -Chiran -chirapsia -chirarthritis -chirata -Chirau -Chireno -Chi-Rho -Chi-Rhos -Chiriana -Chiricahua -Chirico -Chiriguano -Chirikof -chirimen -chirimia -chirimoya -chirimoyer -Chirino -chirinola -chiripa -Chiriqui -chirivita -chirk -chirked -chirker -chirkest -chirking -chirks -chirl -Chirlin -chirm -chirmed -chirming -chirms -chiro -chiro- -chirocosmetics -chirogale -chirogymnast -chirognomy -chirognomic -chirognomically -chirognomist -chirognostic -chirograph -chirographary -chirographer -chirographers -chirography -chirographic -chirographical -chirolas -chirology -chirological -chirologically -chirologies -chirologist -chiromance -chiromancer -chiromancy -chiromancist -chiromant -chiromantic -chiromantical -Chiromantis -chiromegaly -chirometer -Chiromyidae -Chiromys -Chiron -chironym -chironomy -chironomic -chironomid -Chironomidae -Chironomus -chiropatagium -chiroplasty -chiropod -chiropody -chiropodial -chiropodic -chiropodical -chiropodies -chiropodist -chiropodistry -chiropodists -chiropodous -chiropompholyx -chiropractic -chiropractics -chiropractor -chiropractors -chiropraxis -chiropter -Chiroptera -chiropteran -chiropterygian -chiropterygious -chiropterygium -chiropterite -chiropterophilous -chiropterous -chiros -chirosophist -chirospasm -Chirotes -chirotherian -Chirotherium -chirothesia -chirotype -chirotony -chirotonsor -chirotonsory -chirp -chirped -chirper -chirpers -chirpy -chirpier -chirpiest -chirpily -chirpiness -chirping -chirpingly -chirpling -chirps -chirr -chirre -chirred -chirres -chirring -chirrs -chirrup -chirruped -chirruper -chirrupy -chirruping -chirrupper -chirrups -chirt -chiru -chirurgeon -chirurgeonly -chirurgery -chirurgy -chirurgic -chirurgical -chis -Chisedec -chisel -chisel-cut -chiseled -chisel-edged -chiseler -chiselers -chiseling -chiselled -chiseller -chisellers -chiselly -chisellike -chiselling -chiselmouth -chisel-pointed -chisels -chisel-shaped -Chishima -Chisholm -Chisimaio -Chisin -chisled -chi-square -chistera -chistka -chit -Chita -chitak -chital -chitarra -chitarrino -chitarrone -chitarroni -chitchat -chit-chat -chitchats -chitchatted -chitchatty -chitchatting -chithe -Chitimacha -Chitimachan -chitin -Chitina -chitinization -chitinized -chitino-arenaceous -chitinocalcareous -chitinogenous -chitinoid -chitinous -chitins -Chitkara -chitlin -chitling -chitlings -chitlins -chiton -chitons -chitosamine -chitosan -chitosans -chitose -chitra -chytra -Chitragupta -Chitrali -chytrid -Chytridiaceae -chytridiaceous -chytridial -Chytridiales -chytridiose -chytridiosis -Chytridium -Chytroi -chits -Chi-tse -chittack -Chittagong -chittak -chittamwood -chitted -Chittenango -Chittenden -chitter -chitter-chatter -chittered -chittering -chitterling -chitterlings -chitters -chitty -chitties -chitty-face -chitting -Chi-tzu -chiule -chiurm -Chiusi -chiv -chivachee -chivage -chivalresque -chivalry -chivalric -chivalries -chivalrous -chivalrously -chivalrousness -chivalrousnesses -chivaree -chivareed -chivareeing -chivarees -chivareing -chivari -chivaried -chivariing -chivaring -chivaris -chivarra -chivarras -chivarro -chive -chivey -chiver -chiveret -Chivers -chives -chivy -chiviatite -chivied -chivies -chivying -Chivington -chivvy -chivvied -chivvies -chivvying -chivw -Chiwere -chizz -chizzel -chkalik -Chkalov -chkfil -chkfile -Chladek -Chladni -chladnite -chlamyd -chlamydate -chlamydeous -chlamydes -Chlamydia -Chlamydobacteriaceae -chlamydobacteriaceous -Chlamydobacteriales -Chlamydomonadaceae -Chlamydomonadidae -Chlamydomonas -chlamydophore -Chlamydosaurus -Chlamydoselachidae -Chlamydoselachus -chlamydospore -chlamydosporic -Chlamydozoa -chlamydozoan -chlamyphore -Chlamyphorus -chlamys -chlamyses -Chleuh -Chlidanope -Chlo -chloanthite -chloasma -chloasmata -Chlodwig -Chloe -Chloette -Chlons-sur-Marne -chlor -chlor- -chloracetate -chloracne -chloraemia -chloragen -chloragogen -chloragogue -chloral -chloralformamide -chloralide -chloralism -chloralization -chloralize -chloralized -chloralizing -chloralose -chloralosed -chlorals -chloralum -chlorambucil -chloramide -chloramin -chloramine -chloramine-T -chloramphenicol -chloranaemia -chloranemia -chloranemic -chloranhydride -chloranil -Chloranthaceae -chloranthaceous -chloranthy -Chloranthus -chlorapatite -chlorargyrite -Chloras -chlorastrolite -chlorate -chlorates -chlorazide -chlorcosane -chlordan -chlordane -chlordans -chlordiazepoxide -chlore -chlored -Chlorella -Chlorellaceae -chlorellaceous -chloremia -chloremic -chlorenchyma -Chlores -chlorguanide -chlorhexidine -chlorhydrate -chlorhydric -Chlori -chloriamb -chloriambus -chloric -chlorid -chloridate -chloridated -chloridation -chloride -Chloridella -Chloridellidae -chlorider -chlorides -chloridic -chloridize -chloridized -chloridizing -chlorids -chloryl -chlorimeter -chlorimetry -chlorimetric -chlorin -chlorinate -chlorinated -chlorinates -chlorinating -chlorination -chlorinations -chlorinator -chlorinators -chlorine -chlorines -chlorinity -chlorinize -chlorinous -chlorins -chloriodide -Chlorion -Chlorioninae -Chloris -chlorite -chlorites -chloritic -chloritization -chloritize -chloritoid -chlorize -chlormethane -chlormethylic -chlornal -chloro -chloro- -chloroacetate -chloroacetic -chloroacetone -chloroacetophenone -chloroamide -chloroamine -chloroanaemia -chloroanemia -chloroaurate -chloroauric -chloroaurite -chlorobenzene -chlorobromide -chlorobromomethane -chlorocalcite -chlorocarbon -chlorocarbonate -chlorochromates -chlorochromic -chlorochrous -Chlorococcaceae -Chlorococcales -Chlorococcum -Chlorococcus -chlorocresol -chlorocruorin -chlorodyne -chlorodize -chlorodized -chlorodizing -chloroethene -chloroethylene -chlorofluorocarbon -chlorofluoromethane -chloroform -chloroformate -chloroformed -chloroformic -chloroforming -chloroformism -chloroformist -chloroformization -chloroformize -chloroforms -chlorogenic -chlorogenine -chloroguanide -chlorohydrin -chlorohydrocarbon -chlorohydroquinone -chloroid -chloroiodide -chloroleucite -chloroma -chloromata -chloromelanite -chlorometer -chloromethane -chlorometry -chlorometric -Chloromycetin -chloronaphthalene -chloronitrate -chloropal -chloropalladates -chloropalladic -chlorophaeite -chlorophane -chlorophenol -chlorophenothane -Chlorophyceae -chlorophyceous -chlorophyl -chlorophyll -chlorophyllaceous -chlorophyllan -chlorophyllase -chlorophyllian -chlorophyllide -chlorophylliferous -chlorophylligenous -chlorophylligerous -chlorophyllin -chlorophyllite -chlorophylloid -chlorophyllose -chlorophyllous -chlorophylls -chlorophoenicite -Chlorophora -chloropia -chloropicrin -chloroplast -chloroplastic -chloroplastid -chloroplasts -chloroplast's -chloroplatinate -chloroplatinic -chloroplatinite -chloroplatinous -chloroprene -chloropsia -chloroquine -chlorosilicate -chlorosis -chlorospinel -chlorosulphonic -chlorothiazide -chlorotic -chlorotically -chlorotrifluoroethylene -chlorotrifluoromethane -chlorous -chlorozincate -chlorpheniramine -chlorphenol -chlorpicrin -chlorpikrin -chlorpromazine -chlorpropamide -chlorprophenpyridamine -chlorsalol -chlortetracycline -Chlor-Trimeton -ChM -chm. -Chmielewski -chmn -chn -Chnier -Chnuphis -Cho -choachyte -choak -choana -choanae -choanate -Choanephora -choanite -choanocytal -choanocyte -Choanoflagellata -choanoflagellate -Choanoflagellida -Choanoflagellidae -choanoid -choanophorous -choanosomal -choanosome -Choapas -Choate -choaty -chob -chobdar -chobie -Chobot -choca -chocalho -chocard -Choccolocco -Chocho -chochos -choc-ice -chock -chockablock -chock-a-block -chocked -chocker -chockful -chockfull -chock-full -chocking -chockler -chockman -chocks -chock's -chockstone -Choco -Chocoan -chocolate -chocolate-box -chocolate-brown -chocolate-coated -chocolate-colored -chocolate-flower -chocolatey -chocolate-red -chocolates -chocolate's -chocolaty -chocolatier -chocolatiere -Chocorua -Chocowinity -Choctaw -choctaw-root -Choctaws -choel -choenix -Choephori -Choeropsis -Choes -choffer -choga -chogak -Chogyal -chogset -choy -choya -Choiak -choyaroot -choice -choice-drawn -choiceful -choiceless -choicelessness -choicely -choiceness -choicer -choices -choicest -choicy -choicier -choiciest -choil -choile -choiler -choir -choirboy -choirboys -choired -choirgirl -choiring -choirlike -choirman -choirmaster -choirmasters -choyroot -choirs -choir's -choirwise -choise -Choiseul -Choisya -chok -chokage -choke -choke- -chokeable -chokeberry -chokeberries -chokebore -choke-bore -chokecherry -chokecherries -choked -chokedamp -choke-full -chokey -chokeys -choker -chokered -chokerman -chokers -chokes -chokestrap -chokeweed -choky -chokidar -chokier -chokies -chokiest -choking -chokingly -Chokio -choko -Chokoloskee -chokra -Chol -chol- -Chola -cholaemia -cholagogic -cholagogue -cholalic -cholam -Cholame -cholane -cholangiography -cholangiographic -cholangioitis -cholangitis -cholanic -cholanthrene -cholate -cholates -chold -chole- -choleate -cholecalciferol -cholecyanin -cholecyanine -cholecyst -cholecystalgia -cholecystectasia -cholecystectomy -cholecystectomies -cholecystectomized -cholecystenterorrhaphy -cholecystenterostomy -cholecystgastrostomy -cholecystic -cholecystis -cholecystitis -cholecystnephrostomy -cholecystocolostomy -cholecystocolotomy -cholecystoduodenostomy -cholecystogastrostomy -cholecystogram -cholecystography -cholecystoileostomy -cholecystojejunostomy -cholecystokinin -cholecystolithiasis -cholecystolithotripsy -cholecystonephrostomy -cholecystopexy -cholecystorrhaphy -cholecystostomy -cholecystostomies -cholecystotomy -cholecystotomies -choledoch -choledochal -choledochectomy -choledochitis -choledochoduodenostomy -choledochoenterostomy -choledocholithiasis -choledocholithotomy -choledocholithotripsy -choledochoplasty -choledochorrhaphy -choledochostomy -choledochostomies -choledochotomy -choledochotomies -choledography -cholee -cholehematin -choleic -choleine -choleinic -cholelith -cholelithiasis -cholelithic -cholelithotomy -cholelithotripsy -cholelithotrity -cholemia -cholent -cholents -choleokinase -cholepoietic -choler -cholera -choleraic -choleras -choleric -cholerically -cholericly -cholericness -choleriform -cholerigenous -cholerine -choleroid -choleromania -cholerophobia -cholerrhagia -cholers -cholestane -cholestanol -cholesteatoma -cholesteatomatous -cholestene -cholesterate -cholesteremia -cholesteric -cholesteryl -cholesterin -cholesterinemia -cholesterinic -cholesterinuria -cholesterol -cholesterolemia -cholesterols -cholesteroluria -cholesterosis -choletelin -choletherapy -choleuria -choli -choliamb -choliambic -choliambist -cholic -cholick -choline -cholinergic -cholines -cholinesterase -cholinic -cholinolytic -cholla -chollas -choller -chollers -Cholo -cholo- -cholochrome -cholocyanine -Choloepus -chologenetic -choloid -choloidic -choloidinic -chololith -chololithic -Cholon -Cholonan -Cholones -cholophaein -cholophein -cholorrhea -Cholos -choloscopy -cholralosed -cholterheaded -choltry -Cholula -cholum -choluria -Choluteca -chomage -chomer -chomp -chomped -chomper -chompers -chomping -chomps -Chomsky -Chon -chonchina -chondr- -chondral -chondralgia -chondrarsenite -chondre -chondrectomy -chondrenchyma -chondri -chondria -chondric -Chondrichthyes -chondrify -chondrification -chondrified -chondrigen -chondrigenous -Chondrilla -chondrin -chondrinous -chondriocont -chondrioma -chondriome -chondriomere -chondriomite -chondriosomal -chondriosome -chondriosomes -chondriosphere -chondrite -chondrites -chondritic -chondritis -chondro- -chondroadenoma -chondroalbuminoid -chondroangioma -chondroarthritis -chondroblast -chondroblastoma -chondrocarcinoma -chondrocele -chondrocyte -chondroclasis -chondroclast -chondrocoracoid -chondrocostal -chondrocranial -chondrocranium -chondrodynia -chondrodystrophy -chondrodystrophia -chondrodite -chondroditic -chondroendothelioma -chondroepiphysis -chondrofetal -chondrofibroma -chondrofibromatous -Chondroganoidei -chondrogen -chondrogenesis -chondrogenetic -chondrogeny -chondrogenous -chondroglossal -chondroglossus -chondrography -chondroid -chondroitic -chondroitin -chondroitin-sulphuric -chondrolipoma -chondrology -chondroma -chondromalacia -chondromas -chondromata -chondromatous -Chondromyces -chondromyoma -chondromyxoma -chondromyxosarcoma -chondromucoid -chondro-osseous -chondropharyngeal -chondropharyngeus -chondrophyte -chondrophore -chondroplast -chondroplasty -chondroplastic -chondroprotein -chondropterygian -Chondropterygii -chondropterygious -chondrosamine -chondrosarcoma -chondrosarcomas -chondrosarcomata -chondrosarcomatous -chondroseptum -chondrosin -chondrosis -chondroskeleton -chondrostean -Chondrostei -chondrosteoma -chondrosteous -chondrosternal -chondrotome -chondrotomy -chondroxiphoid -chondrule -chondrules -chondrus -Chong -Chongjin -chonicrite -Chonju -chonk -chonolith -chonta -Chontal -Chontalan -Chontaquiro -chontawood -Choo -choochoo -choo-choo -choo-chooed -choo-chooing -chook -chooky -chookie -chookies -choom -Choong -choop -choora -choosable -choosableness -choose -chooseable -choosey -chooser -choosers -chooses -choosy -choosier -choosiest -choosiness -choosing -choosingly -chop -chopa -chopas -chopboat -chop-cherry -chop-chop -chop-church -chopdar -chopfallen -chop-fallen -chophouse -chop-house -chophouses -Chopin -chopine -chopines -chopins -choplogic -chop-logic -choplogical -chopped -chopped-off -chopper -choppered -choppers -chopper's -choppy -choppier -choppiest -choppily -choppin -choppiness -choppinesses -chopping -chops -chopstick -chop-stick -Chopsticks -chop-suey -Chopunnish -Chor -Chora -choragi -choragy -choragic -choragion -choragium -choragus -choraguses -Chorai -choral -choralcelo -chorale -choraleon -chorales -choralist -chorally -chorals -Chorasmian -chord -chorda -Chordaceae -chordacentrous -chordacentrum -chordaceous -chordal -chordally -chordamesoderm -chordamesodermal -chordamesodermic -Chordata -chordate -chordates -chorded -chordee -Chordeiles -chording -chorditis -chordoid -chordomesoderm -chordophone -chordotomy -chordotonal -chords -chord's -chore -chorea -choreal -choreas -choreatic -chored -choree -choregi -choregy -choregic -choregrapher -choregraphy -choregraphic -choregraphically -choregus -choreguses -chorei -choreic -choreiform -choreman -choremen -choreo- -choreodrama -choreograph -choreographed -choreographer -choreographers -choreography -choreographic -choreographical -choreographically -choreographies -choreographing -choreographs -choreoid -choreomania -chorepiscopal -chorepiscope -chorepiscopus -chores -choreus -choreutic -chorgi -chori- -chorial -choriamb -choriambi -choriambic -choriambize -choriambs -choriambus -choriambuses -choribi -choric -chorically -chorine -chorines -choring -chorio -chorioadenoma -chorioallantoic -chorioallantoid -chorioallantois -choriocapillary -choriocapillaris -choriocarcinoma -choriocarcinomas -choriocarcinomata -choriocele -chorioepithelioma -chorioepitheliomas -chorioepitheliomata -chorioid -chorioidal -chorioiditis -chorioidocyclitis -chorioidoiritis -chorioidoretinitis -chorioids -chorioma -choriomas -choriomata -chorion -chorionepithelioma -chorionic -chorions -Chorioptes -chorioptic -chorioretinal -chorioretinitis -choryos -Choripetalae -choripetalous -choriphyllous -chorisepalous -chorisis -chorism -choriso -chorisos -chorist -choristate -chorister -choristers -choristership -choristic -choristoblastoma -choristoma -choristoneura -choristry -chorization -chorizo -c-horizon -chorizont -chorizontal -chorizontes -chorizontic -chorizontist -chorizos -Chorley -chorobates -chorogi -chorograph -chorographer -chorography -chorographic -chorographical -chorographically -chorographies -choroid -choroidal -choroidea -choroiditis -choroidocyclitis -choroidoiritis -choroidoretinitis -choroids -chorology -chorological -chorologist -choromania -choromanic -chorometry -chorook -Chorotega -Choroti -chorous -chort -chorten -Chorti -chortle -chortled -chortler -chortlers -chortles -chortling -chortosterol -chorus -chorused -choruser -choruses -chorusing -choruslike -chorusmaster -chorussed -chorusses -chorussing -Chorwat -Chorwon -Chorz -Chorzow -chose -Chosen -choses -chosing -Chosn -Chosunilbo -Choteau -CHOTS -chott -chotts -Chou -Chouan -Chouanize -choucroute -Choudrant -Chouest -chouette -choufleur -chou-fleur -chough -choughs -chouka -Choukoutien -choule -choultry -choultries -chounce -choup -choupic -chouquette -chous -chouse -choused -chouser -chousers -chouses -choush -choushes -chousing -chousingha -chout -Chouteau -choux -Chow -Chowanoc -Chowchilla -chowchow -chow-chow -chowchows -chowder -chowdered -chowderhead -chowderheaded -chowderheadedness -chowdering -chowders -chowed -chowhound -chowing -chowk -chowry -chowries -chows -chowse -chowsed -chowses -chowsing -chowtime -chowtimes -Chozar -CHP -CHQ -Chr -Chr. -chrematheism -chrematist -chrematistic -chrematistics -chremsel -chremzel -chremzlach -chreotechnics -chresard -chresards -chresmology -chrestomathy -chrestomathic -chrestomathics -chrestomathies -Chretien -chry -chria -Chriesman -chrimsel -Chris -chrys- -Chrysa -chrysal -chrysalid -chrysalida -chrysalidal -chrysalides -chrysalidian -chrysaline -chrysalis -chrysalises -chrysaloid -chrysamine -chrysammic -chrysamminic -Chrysamphora -chrysanilin -chrysaniline -chrysanisic -chrysanthemin -chrysanthemum -chrysanthemums -chrysanthous -Chrysaor -chrysarobin -chrysatropic -chrysazin -chrysazol -Chryseis -chryselectrum -chryselephantine -Chrysemys -chrysene -chrysenic -Chryses -Chrisy -chrysid -Chrysidella -chrysidid -Chrysididae -chrysin -Chrysippus -Chrysis -Chrysler -chryslers -chrism -chrisma -chrismal -chrismale -Chrisman -chrismary -chrismatine -chrismation -chrismatite -chrismatize -chrismatory -chrismatories -chrismon -chrismons -chrisms -Chrisney -chryso- -chrysoaristocracy -Chrysobalanaceae -Chrysobalanus -chrysoberyl -chrysobull -chrysocale -chrysocarpous -chrysochlore -Chrysochloridae -Chrysochloris -chrysochlorous -chrysochrous -chrysocolla -chrysocracy -chrysoeriol -chrysogen -chrysograph -chrysographer -chrysography -chrysohermidin -chrysoidine -chrysolite -chrysolitic -chrysology -Chrysolophus -chrisom -chrysome -chrysomelid -Chrysomelidae -Chrysomyia -chrisomloosing -chrysomonad -Chrysomonadales -Chrysomonadina -chrysomonadine -chrisoms -Chrysopa -chrysopal -chrysopee -chrysophan -chrysophane -chrysophanic -Chrysophanus -chrysophenin -chrysophenine -chrysophilist -chrysophilite -chrysophyll -Chrysophyllum -chrysophyte -Chrysophlyctis -chrysopid -Chrysopidae -chrysopoeia -chrysopoetic -chrysopoetics -chrysoprase -chrysoprasus -Chrysops -Chrysopsis -chrysorin -chrysosperm -Chrysosplenium -Chrysostom -chrysostomic -Chrysostomus -Chrysothamnus -Chrysothemis -chrysotherapy -Chrysothrix -chrysotile -Chrysotis -Chrisoula -chrisroot -Chrissa -Chrisse -Chryssee -Chrissy -Chrissie -Christ -Christa -Christabel -Christabella -Christabelle -Christadelphian -Christadelphianism -Christal -Chrystal -Christalle -Christan -Christ-borne -Christchurch -Christ-confessing -christcross -christ-cross -christcross-row -christ-cross-row -Christdom -Chryste -Christean -Christed -Christel -Chrystel -Christen -Christendie -Christendom -christened -christener -christeners -christenhead -christening -christenings -Christenmas -christens -Christensen -Christenson -Christ-given -Christ-hymning -Christhood -Christi -Christy -Christiaan -Christiad -Christian -Christiana -Christiane -Christiania -Christianiadeal -Christianisation -Christianise -Christianised -Christianiser -Christianising -Christianism -christianite -Christianity -Christianities -Christianization -Christianize -Christianized -Christianizer -christianizes -Christianizing -Christianly -Christianlike -Christianna -Christianness -Christiano -christiano- -Christianogentilism -Christianography -Christianomastix -Christianopaganism -Christiano-platonic -christians -christian's -Christiansand -Christiansburg -Christiansen -Christian-socialize -Christianson -Christiansted -Christicide -Christie -Christye -Christies -Christiform -Christ-imitating -Christin -Christina -Christyna -Christine -Christ-inspired -Christis -Christless -Christlessness -Christly -Christlike -christ-like -Christlikeness -Christliness -Christmann -Christmas -Christmasberry -Christmasberries -christmases -Christmasy -Christmasing -Christmastide -Christmastime -Christo- -Christocentric -Christocentrism -chrystocrene -christofer -Christoff -Christoffel -Christoffer -Christoforo -Christogram -Christolatry -Christology -Christological -Christologies -Christologist -Christoper -Christoph -Christophany -Christophanic -Christophanies -Christophe -Christopher -Christophorus -Christos -Christoval -Christ-professing -christs -Christ's-thorn -Christ-taught -christ-tide -christward -chroatol -Chrobat -chrom- -chroma -chroma-blind -chromaffin -chromaffinic -chromamamin -chromammine -chromaphil -chromaphore -chromas -chromascope -chromat- -chromate -chromates -chromatic -chromatical -chromatically -chromatician -chromaticism -chromaticity -chromaticness -chromatics -chromatid -chromatin -chromatinic -Chromatioideae -chromatype -chromatism -chromatist -Chromatium -chromatize -chromato- -chromatocyte -chromatodysopia -chromatogenous -chromatogram -chromatograph -chromatography -chromatographic -chromatographically -chromatoid -chromatolysis -chromatolytic -chromatology -chromatologies -chromatometer -chromatone -chromatopathy -chromatopathia -chromatopathic -chromatophil -chromatophile -chromatophilia -chromatophilic -chromatophilous -chromatophobia -chromatophore -chromatophoric -chromatophorous -chromatoplasm -chromatopsia -chromatoptometer -chromatoptometry -chromatoscope -chromatoscopy -chromatosis -chromatosphere -chromatospheric -chromatrope -chromaturia -chromazurine -chromdiagnosis -chrome -chromed -Chromel -chromene -chrome-nickel -chromeplate -chromeplated -chromeplating -chromes -chromesthesia -chrome-tanned -chrometophobia -chromhidrosis -chromy -chromic -chromicize -chromicizing -chromid -Chromidae -chromide -Chromides -chromidial -Chromididae -chromidiogamy -chromidiosome -chromidium -chromidrosis -chromiferous -chromyl -chromyls -chrominance -chroming -chromiole -chromism -chromite -chromites -chromitite -chromium -chromium-plate -chromium-plated -chromiums -chromize -chromized -chromizes -chromizing -Chromo -chromo- -chromo-arsenate -Chromobacterieae -Chromobacterium -chromoblast -chromocenter -chromocentral -chromochalcography -chromochalcographic -chromocyte -chromocytometer -chromocollograph -chromocollography -chromocollographic -chromocollotype -chromocollotypy -chromocratic -chromoctye -chromodermatosis -chromodiascope -chromogen -chromogene -chromogenesis -chromogenetic -chromogenic -chromogenous -chromogram -chromograph -chromoisomer -chromoisomeric -chromoisomerism -chromoleucite -chromolipoid -chromolysis -chromolith -chromolithic -chromolithograph -chromolithographer -chromolithography -chromolithographic -chromomere -chromomeric -chromometer -chromone -chromonema -chromonemal -chromonemata -chromonematal -chromonematic -chromonemic -chromoparous -chromophage -chromophane -chromophil -chromophyl -chromophile -chromophilia -chromophilic -chromophyll -chromophilous -chromophobe -chromophobia -chromophobic -chromophor -chromophore -chromophoric -chromophorous -chromophotograph -chromophotography -chromophotographic -chromophotolithograph -chromoplasm -chromoplasmic -chromoplast -chromoplastid -chromoprotein -chromopsia -chromoptometer -chromoptometrical -chromos -chromosantonin -chromoscope -chromoscopy -chromoscopic -chromosomal -chromosomally -chromosome -chromosomes -chromosomic -chromosphere -chromospheres -chromospheric -chromotherapy -chromotherapist -chromotype -chromotypy -chromotypic -chromotypography -chromotypographic -chromotrope -chromotropy -chromotropic -chromotropism -chromous -chromoxylograph -chromoxylography -chromule -Chron -chron- -Chron. -chronal -chronanagram -chronaxy -chronaxia -chronaxie -chronaxies -chroncmeter -chronic -chronica -chronical -chronically -chronicity -chronicle -chronicled -chronicler -chroniclers -Chronicles -chronicling -chronicon -chronics -chronique -chronisotherm -chronist -Chronium -chrono- -chronobarometer -chronobiology -chronocarator -chronocyclegraph -chronocinematography -chronocrator -chronodeik -chronogeneous -chronogenesis -chronogenetic -chronogram -chronogrammatic -chronogrammatical -chronogrammatically -chronogrammatist -chronogrammic -chronograph -chronographer -chronography -chronographic -chronographical -chronographically -chronographs -chronoisothermal -chronol -chronologer -chronology -chronologic -chronological -chronologically -chronologies -chronology's -chronologist -chronologists -chronologize -chronologizing -chronomancy -chronomantic -chronomastix -chronometer -chronometers -chronometry -chronometric -chronometrical -chronometrically -chronon -chrononomy -chronons -chronopher -chronophotograph -chronophotography -chronophotographic -Chronos -chronoscope -chronoscopy -chronoscopic -chronoscopically -chronoscopv -chronosemic -chronostichon -chronothermal -chronothermometer -Chronotron -chronotropic -chronotropism -Chroococcaceae -chroococcaceous -Chroococcales -chroococcoid -Chroococcus -chroous -Chrosperma -Chrotoem -chrotta -chs -chs. -Chtaura -chteau -Chteauroux -Chteau-Thierry -chthonian -chthonic -Chthonius -chthonophagy -chthonophagia -Chu -Chuadanga -Chuah -Chualar -chuana -Chuanchow -chub -chubasco -chubascos -Chubb -chubbed -chubbedness -chubby -chubbier -chubbiest -chubby-faced -chubbily -chubbiness -chubbinesses -chub-faced -chubs -chubsucker -Chuch -Chuchchi -Chuchchis -Chucho -Chuchona -Chuck -chuck-a-luck -chuckawalla -Chuckchi -Chuckchis -chucked -Chuckey -chucker -chucker-out -chuckers-out -chuckfarthing -chuck-farthing -chuckfull -chuck-full -chuckhole -chuckholes -chucky -chucky-chuck -chucky-chucky -chuckie -chuckies -chucking -chuckingly -chuckle -chuckled -chucklehead -chuckleheaded -chuckleheadedness -chuckler -chucklers -chuckles -chucklesome -chuckling -chucklingly -chuck-luck -chuckram -chuckrum -chucks -chuck's -chuckstone -chuckwalla -chuck-will's-widow -Chud -chuddah -chuddahs -chuddar -chuddars -chudder -chudders -Chude -Chudic -chuet -Chueta -chufa -chufas -chuff -chuffed -chuffer -chuffest -chuffy -chuffier -chuffiest -chuffily -chuffiness -chuffing -chuffs -chug -chugalug -chug-a-lug -chugalugged -chugalugging -chugalugs -chug-chug -chugged -chugger -chuggers -chugging -chughole -Chugiak -chugs -Chugwater -chuhra -Chui -Chuipek -Chuje -chukar -chukars -Chukchee -Chukchees -Chukchi -Chukchis -chukka -chukkar -chukkars -chukkas -chukker -chukkers -chukor -Chula -chulan -chulha -chullo -chullpa -chulpa -chultun -chum -chumar -Chumash -Chumashan -Chumashim -Chumawi -chumble -Chumley -chummage -chummed -chummer -chummery -chummy -chummier -chummies -chummiest -chummily -chumminess -chumming -chump -chumpa -chumpaka -chumped -chumpy -chumpiness -chumping -chumpish -chumpishness -Chumpivilca -chumps -chums -chumship -chumships -Chumulu -Chun -chunam -chunari -Chuncho -Chunchula -chundari -chunder -chunderous -Chung -chunga -Chungking -Chunichi -chunk -chunked -chunkhead -chunky -chunkier -chunkiest -chunkily -chunkiness -chunking -chunks -chunk's -Chunnel -chunner -chunnia -chunter -chuntered -chuntering -chunters -chupa-chupa -chupak -chupatti -chupatty -chupon -chuppah -chuppahs -chuppoth -chuprassi -chuprassy -chuprassie -Chuquicamata -Chur -Chura -churada -Church -church-ale -churchanity -church-chopper -churchcraft -churchdom -church-door -churched -churches -churchful -church-gang -church-garth -churchgo -churchgoer -churchgoers -churchgoing -churchgoings -church-government -churchgrith -churchy -churchianity -churchyard -churchyards -churchyard's -churchier -churchiest -churchified -Churchill -Churchillian -churchiness -churching -churchish -churchism -churchite -churchless -churchlet -churchly -churchlier -churchliest -churchlike -churchliness -Churchman -churchmanly -churchmanship -churchmaster -churchmen -church-papist -churchreeve -churchscot -church-scot -churchshot -church-soken -Churchton -Churchville -churchway -churchward -church-ward -churchwarden -churchwardenism -churchwardenize -churchwardens -churchwardenship -churchwards -churchwise -churchwoman -churchwomen -Churdan -churel -churidars -churinga -churingas -churl -churled -churlhood -churly -churlier -churliest -churlish -churlishly -churlishness -churls -churm -churn -churnability -churnable -churn-butted -churned -churner -churners -churnful -churning -churnings -churnmilk -churns -churnstaff -Churoya -Churoyan -churr -churrasco -churred -churrigueresco -Churrigueresque -churring -churrip -churro -churr-owl -churrs -churruck -churrus -churrworm -churr-worm -Churubusco -chuse -chuser -chusite -chut -Chute -chuted -chuter -chutes -chute's -chute-the-chute -chute-the-chutes -chuting -chutist -chutists -chutnee -chutnees -chutney -chutneys -chuttie -chutzpa -chutzpadik -chutzpah -chutzpahs -chutzpanik -chutzpas -Chuu -chuumnapm -Chuvash -chuvashes -Chuvashi -chuzwi -Chwana -Chwang-tse -chwas -CI -cy -ci- -CIA -cya- -cyaathia -CIAC -Ciales -cyamelid -cyamelide -cyamid -cyamoid -Ciampino -Cyamus -cyan -cyan- -cyanacetic -Cyanamid -cyanamide -cyanamids -cyananthrol -Cyanastraceae -Cyanastrum -cyanate -cyanates -cyanaurate -cyanauric -cyanbenzyl -cyan-blue -Cianca -cyancarbonic -Cyane -Cyanea -cyanean -Cyanee -cyanemia -cyaneous -cyanephidrosis -cyanformate -cyanformic -cyanhydrate -cyanhydric -cyanhydrin -cyanhidrosis -cyanic -cyanicide -cyanid -cyanidation -cyanide -cyanided -cyanides -cyanidin -cyanidine -cyaniding -cyanidrosis -cyanids -cyanimide -cyanin -cyanine -cyanines -cyanins -cyanite -cyanites -cyanitic -cyanize -cyanized -cyanizing -cyanmethemoglobin -Ciano -cyano -cyano- -cyanoacetate -cyanoacetic -cyanoacrylate -cyanoaurate -cyanoauric -cyanobenzene -cyanocarbonic -cyanochlorous -cyanochroia -cyanochroic -Cyanocitta -cyanocobalamin -cyanocobalamine -cyanocrystallin -cyanoderma -cyanoethylate -cyanoethylation -cyanogen -cyanogenamide -cyanogenesis -cyanogenetic -cyanogenic -cyanogens -cyanoguanidine -cyanohermidin -cyanohydrin -cyanol -cyanole -cyanomaclurin -cyanometer -cyanomethaemoglobin -cyanomethemoglobin -cyanometry -cyanometric -cyanometries -cyanopathy -cyanopathic -Cyanophyceae -cyanophycean -cyanophyceous -cyanophycin -cyanophil -cyanophile -cyanophilous -cyanophoric -cyanophose -cyanopia -cyanoplastid -cyanoplatinite -cyanoplatinous -cyanopsia -cyanose -cyanosed -cyanoses -cyanosis -cyanosite -Cyanospiza -cyanotic -cyanotype -cyanotrichite -cyans -cyanuramide -cyanurate -cyanuret -cyanuric -cyanurin -cyanurine -cyanus -ciao -Ciapas -Ciapha -cyaphenine -Ciaphus -Ciardi -cyath -Cyathaspis -Cyathea -Cyatheaceae -cyatheaceous -cyathi -cyathia -cyathiform -cyathium -cyathoid -cyatholith -Cyathophyllidae -cyathophylline -cyathophylloid -Cyathophyllum -cyathos -cyathozooid -cyathus -CIB -Cyb -cibaria -cibarial -cibarian -cibaries -cibarious -cibarium -cibation -cibbaria -Cibber -cibboria -Cybebe -Cybele -cybercultural -cyberculture -cybernate -cybernated -cybernating -cybernation -cybernetic -cybernetical -cybernetically -cybernetician -cyberneticist -cyberneticists -cybernetics -cybernion -Cybil -Cybill -Cibis -Cybister -cibol -Cibola -Cibolan -cibolero -Cibolo -cibols -Ciboney -cibophobia -cibophobiafood -cyborg -cyborgs -cibory -ciboria -ciborium -ciboule -ciboules -CIC -cyc -CICA -cicad -cycad -cicada -Cycadaceae -cycadaceous -cicadae -Cycadales -cicadas -cycadean -Cicadellidae -cycadeoid -Cycadeoidea -cycadeous -cicadid -Cicadidae -cycadiform -cycadite -cycadlike -cycadofilicale -Cycadofilicales -Cycadofilices -cycadofilicinean -Cycadophyta -cycadophyte -cycads -cicala -cicalas -cicale -Cycas -cycases -cycasin -cycasins -cicatrice -cicatrices -cicatricial -cicatricle -cicatricose -cicatricula -cicatriculae -cicatricule -cicatrisant -cicatrisate -cicatrisation -cicatrise -cicatrised -cicatriser -cicatrising -cicatrisive -cicatrix -cicatrixes -cicatrizant -cicatrizate -cicatrization -cicatrize -cicatrized -cicatrizer -cicatrizing -cicatrose -Ciccia -Cicely -cicelies -Cicenia -cicer -Cicero -ciceronage -cicerone -cicerones -ciceroni -Ciceronian -Ciceronianism -ciceronianisms -ciceronianist -ciceronianists -Ciceronianize -ciceronians -Ciceronic -Ciceronically -ciceroning -ciceronism -ciceronize -ciceros -cichar -cichlid -Cichlidae -cichlids -cichloid -Cichocki -cichoraceous -Cichoriaceae -cichoriaceous -Cichorium -Cychosz -cich-pea -Cychreus -Cichus -Cicily -Cicindela -cicindelid -cicindelidae -cicisbei -cicisbeism -cicisbeo -cycl -cycl- -Cyclades -Cycladic -cyclamate -cyclamates -cyclamen -cyclamens -Cyclamycin -cyclamin -cyclamine -cyclammonium -cyclane -Cyclanthaceae -cyclanthaceous -Cyclanthales -Cyclanthus -cyclar -cyclarthrodial -cyclarthrosis -cyclarthrsis -cyclas -cyclase -cyclases -ciclatoun -cyclazocine -cycle -cyclecar -cyclecars -cycled -cycledom -cyclene -cycler -cyclery -cyclers -cycles -cyclesmith -Cycliae -cyclian -cyclic -cyclical -cyclicality -cyclically -cyclicalness -cyclicism -cyclicity -cyclicly -cyclide -cyclindroid -cycling -cyclings -cyclism -cyclist -cyclistic -cyclists -cyclitic -cyclitis -cyclitol -cyclitols -cyclization -cyclize -cyclized -cyclizes -cyclizing -Ciclo -cyclo -cyclo- -cycloacetylene -cycloaddition -cycloaliphatic -cycloalkane -Cyclobothra -cyclobutane -cyclocephaly -cyclocoelic -cyclocoelous -Cycloconium -cyclo-cross -cyclode -cyclodiene -cyclodiolefin -cyclodiolefine -cycloganoid -Cycloganoidei -cyclogenesis -cyclogram -cyclograph -cyclographer -cycloheptane -cycloheptanone -cyclohexadienyl -cyclohexane -cyclohexanol -cyclohexanone -cyclohexatriene -cyclohexene -cyclohexyl -cyclohexylamine -cycloheximide -cycloid -cycloidal -cycloidally -cycloidean -Cycloidei -cycloidian -cycloidotrope -cycloids -cycloid's -cyclolysis -cyclolith -Cycloloma -cyclomania -cyclometer -cyclometers -cyclometry -cyclometric -cyclometrical -cyclometries -Cyclomyaria -cyclomyarian -cyclonal -cyclone -cyclone-proof -cyclones -cyclone's -cyclonic -cyclonical -cyclonically -cyclonist -cyclonite -cyclonology -cyclonologist -cyclonometer -cyclonoscope -cycloolefin -cycloolefine -cycloolefinic -cyclop -cyclopaedia -cyclopaedias -cyclopaedic -cyclopaedically -cyclopaedist -cycloparaffin -cyclope -Cyclopean -cyclopedia -cyclopedias -cyclopedic -cyclopedical -cyclopedically -cyclopedist -cyclopentadiene -cyclopentane -cyclopentanone -cyclopentene -Cyclopes -cyclophoria -cyclophoric -Cyclophorus -cyclophosphamide -cyclophosphamides -cyclophrenia -cyclopy -cyclopia -Cyclopic -cyclopism -cyclopite -cycloplegia -cycloplegic -cyclopoid -cyclopropane -Cyclops -Cyclopteridae -cyclopteroid -cyclopterous -cyclorama -cycloramas -cycloramic -Cyclorrhapha -cyclorrhaphous -cyclos -cycloscope -cyclose -cycloserine -cycloses -cyclosilicate -cyclosis -cyclospermous -Cyclospondyli -cyclospondylic -cyclospondylous -Cyclosporales -Cyclosporeae -Cyclosporinae -cyclosporous -cyclostylar -cyclostyle -Cyclostoma -Cyclostomata -cyclostomate -Cyclostomatidae -cyclostomatous -cyclostome -Cyclostomes -Cyclostomi -Cyclostomidae -cyclostomous -cyclostrophic -Cyclotella -cyclothem -cyclothyme -cyclothymia -cyclothymiac -cyclothymic -cyclothure -cyclothurine -Cyclothurus -cyclotome -cyclotomy -cyclotomic -cyclotomies -Cyclotosaurus -cyclotrimethylenetrinitramine -cyclotron -cyclotrons -cyclovertebral -cyclus -Cycnus -cicone -Cicones -Ciconia -Ciconiae -ciconian -Ciconians -ciconiform -ciconiid -Ciconiidae -ciconiiform -Ciconiiformes -ciconine -ciconioid -cicoree -cicorees -cicrumspections -CICS -CICSVS -cicurate -Cicuta -cicutoxin -CID -Cyd -Cida -cidal -cidarid -Cidaridae -cidaris -Cidaroida -cide -cider -cyder -ciderish -ciderist -ciderkin -ciderlike -ciders -cyders -ci-devant -CIDIN -Cydippe -cydippian -cydippid -Cydippida -Cidney -Cydnus -cydon -Cydonia -Cydonian -cydonium -Cidra -CIE -Ciel -cienaga -cienega -Cienfuegos -cierge -cierzo -cierzos -cyeses -cyesiology -cyesis -cyetic -CIF -cig -cigala -cigale -cigar -cigaresque -cigaret -cigarets -cigarette -cigarettes -cigarette's -cigarette-smoker -cigarfish -cigar-flower -cigarillo -cigarillos -cigarito -cigaritos -cigarless -cigar-loving -cigars -cigar's -cigar-shaped -cigar-smoker -cygneous -Cygnet -cygnets -Cygni -Cygnid -Cygninae -cygnine -Cygnus -CIGS -cigua -ciguatera -CII -Ciitroen -Cykana -cyke -cyl -cyl. -Cila -cilantro -cilantros -cilectomy -Cyler -cilery -cilia -ciliary -Ciliata -ciliate -ciliated -ciliate-leaved -ciliately -ciliates -ciliate-toothed -ciliation -cilice -cilices -cylices -Cilicia -Cilician -cilicious -Cilicism -ciliectomy -ciliella -ciliferous -ciliform -ciliiferous -ciliiform -ciliium -cylinder -cylinder-bored -cylinder-boring -cylinder-dried -cylindered -cylinderer -cylinder-grinding -cylindering -cylinderlike -cylinders -cylinder's -cylinder-shaped -cylindraceous -cylindrarthrosis -Cylindrella -cylindrelloid -cylindrenchema -cylindrenchyma -cylindric -cylindrical -cylindricality -cylindrically -cylindricalness -cylindric-campanulate -cylindric-fusiform -cylindricity -cylindric-oblong -cylindric-ovoid -cylindric-subulate -cylindricule -cylindriform -cylindrite -cylindro- -cylindro-cylindric -cylindrocellular -cylindrocephalic -cylindroconical -cylindroconoidal -cylindrodendrite -cylindrograph -cylindroid -cylindroidal -cylindroma -cylindromata -cylindromatous -cylindrometric -cylindroogival -Cylindrophis -Cylindrosporium -cylindruria -Cilioflagellata -cilioflagellate -ciliograde -ciliola -ciliolate -ciliolum -Ciliophora -cilioretinal -cilioscleral -ciliospinal -ciliotomy -Cilissa -cilium -Cilix -cylix -Cilka -cill -Cilla -Cyllene -Cyllenian -Cyllenius -cylloses -cillosis -cyllosis -Cillus -Cilo -cilo-spinal -Cilurzo -Cylvia -CIM -Cym -CIMA -Cyma -Cimabue -cymae -cymagraph -Cimah -cimaise -cymaise -cymaphen -cymaphyte -cymaphytic -cymaphytism -cymar -cymarin -cimaroon -Cimarosa -cymarose -Cimarron -cymars -cymas -cymatia -cymation -cymatium -cymba -cymbaeform -cimbal -cymbal -Cymbalaria -cymbaled -cymbaleer -cymbaler -cymbalers -cymbaline -cymbalist -cymbalists -cymballed -cymballike -cymballing -cymbalo -cimbalom -cymbalom -cimbaloms -cymbalon -cymbals -cymbal's -cymbate -cymbel -Cymbeline -Cymbella -cimbia -cymbid -cymbidia -cymbidium -cymbiform -Cymbium -cymblin -cymbling -cymblings -cymbocephaly -cymbocephalic -cymbocephalous -Cymbopogon -cimborio -Cymbre -Cimbri -Cimbrian -Cimbric -Cimbura -cimcumvention -cyme -cymelet -cimelia -cimeliarch -cimelium -cymene -cymenes -cymes -cimeter -cimex -cimices -cimicid -Cimicidae -cimicide -cimiciform -Cimicifuga -cimicifugin -cimicoid -cimier -cymiferous -ciminite -cymlin -cimline -cymling -cymlings -cymlins -cimmaron -Cimmeria -Cimmerian -Cimmerianism -Cimmerium -cimnel -cymobotryose -Cymodoce -Cymodoceaceae -cymogene -cymogenes -cymograph -cymographic -cymoid -Cymoidium -cymol -cimolite -cymols -cymometer -Cimon -cymophane -cymophanous -cymophenol -cymophobia -cymoscope -cymose -cymosely -cymotrichy -cymotrichous -cymous -Cymraeg -Cymry -Cymric -cymrite -cymtia -cymule -cymulose -Cyn -Cyna -cynanche -Cynanchum -cynanthropy -Cynar -Cynara -cynaraceous -cynarctomachy -cynareous -cynaroid -Cynarra -C-in-C -cinch -cincha -cinched -cincher -cinches -cinching -cincholoipon -cincholoiponic -cinchomeronic -Cinchona -Cinchonaceae -cinchonaceous -cinchonamin -cinchonamine -cinchonas -cinchonate -Cinchonero -cinchonia -cinchonic -cinchonicin -cinchonicine -cinchonidia -cinchonidine -cinchonin -cinchonine -cinchoninic -cinchonisation -cinchonise -cinchonised -cinchonising -cinchonism -cinchonization -cinchonize -cinchonized -cinchonizing -cinchonology -cinchophen -cinchotine -cinchotoxine -cincinatti -cincinnal -Cincinnati -Cincinnatia -Cincinnatian -Cincinnatus -cincinni -cincinnus -Cinclidae -cinclides -Cinclidotus -cinclis -Cinclus -cinct -cincture -cinctured -cinctures -cincturing -Cinda -Cynde -Cindee -Cindelyn -cinder -cindered -Cinderella -cindery -cindering -cinderlike -cinderman -cinderous -cinders -cinder's -Cindi -Cindy -Cyndi -Cyndy -Cyndia -Cindie -Cyndie -Cindylou -Cindra -cine -cine- -cyne- -cineangiocardiography -cineangiocardiographic -cineangiography -cineangiographic -cineast -cineaste -cineastes -cineasts -Cinebar -cynebot -cinecamera -cinefaction -cinefilm -cynegetic -cynegetics -cynegild -cinel -Cinelli -cinema -cinemactic -cinemagoer -cinemagoers -cinemas -CinemaScope -CinemaScopic -cinematheque -cinematheques -cinematic -cinematical -cinematically -cinematics -cinematize -cinematized -cinematizing -cinematograph -cinematographer -cinematographers -cinematography -cinematographic -cinematographical -cinematographically -cinematographies -cinematographist -cinemelodrama -cinemese -cinemize -cinemograph -cinenchym -cinenchyma -cinenchymatous -cinene -cinenegative -cineol -cineole -cineoles -cineolic -cineols -cinephone -cinephotomicrography -cineplasty -cineplastics -Cynera -cineraceous -cineradiography -Cinerama -cinerararia -cinerary -Cineraria -cinerarias -cinerarium -cineration -cinerator -cinerea -cinereal -cinereous -cinerin -cinerins -cineritious -cinerous -cines -cinevariety -Cynewulf -Cingalese -cynghanedd -cingle -cingula -cingular -cingulate -cingulated -cingulectomy -cingulectomies -cingulum -cynhyena -Cini -Cynias -cyniatria -cyniatrics -Cynic -Cynical -cynically -cynicalness -Cynicism -cynicisms -cynicist -cynics -ciniphes -cynipid -Cynipidae -cynipidous -cynipoid -Cynipoidea -Cynips -Cinyras -cynism -Cinna -cinnabar -cinnabaric -cinnabarine -cinnabars -cinnamal -cinnamaldehyde -cinnamate -cinnamein -cinnamene -cinnamenyl -cinnamic -cinnamyl -cinnamylidene -cinnamyls -Cinnamodendron -cinnamoyl -cinnamol -cinnamomic -Cinnamomum -Cinnamon -cinnamoned -cinnamonic -cinnamonlike -cinnamonroot -cinnamons -cinnamonwood -cinnyl -cinnolin -cinnoline -cyno- -cynocephalic -cynocephalous -cynocephalus -cynoclept -Cynocrambaceae -cynocrambaceous -Cynocrambe -cynodictis -Cynodon -cynodont -Cynodontia -cinofoil -Cynogale -cynogenealogy -cynogenealogist -Cynoglossum -Cynognathus -cynography -cynoid -Cynoidea -cynology -Cynomys -cynomolgus -Cynomoriaceae -cynomoriaceous -Cynomorium -Cynomorpha -cynomorphic -cynomorphous -cynophile -cynophilic -cynophilist -cynophobe -cynophobia -Cynopithecidae -cynopithecoid -cynopodous -cynorrhoda -cynorrhodon -Cynortes -Cynosarges -Cynoscephalae -Cynoscion -Cynosura -cynosural -cynosure -cynosures -Cynosurus -cynotherapy -Cynoxylon -cinquain -cinquains -cinquanter -cinque -cinquecentism -cinquecentist -cinquecento -cinquedea -cinquefoil -cinquefoiled -cinquefoils -cinquepace -cinques -cinque-spotted -cinter -Cynth -Cynthea -Cynthy -Cynthia -Cynthian -Cynthiana -Cynthie -Cynthiidae -Cynthius -Cynthla -cintre -Cinura -cinuran -cinurous -Cynurus -Cynwyd -Cynwulf -Cinzano -CIO -CYO -Cioban -Cioffred -cion -cionectomy -cionitis -cionocranial -cionocranian -cionoptosis -cionorrhaphia -cionotome -cionotomy -cions -cioppino -cioppinos -CIP -cyp -cipaye -Cipango -Cyparissia -Cyparissus -Cyperaceae -cyperaceous -Cyperus -cyphella -cyphellae -cyphellate -cipher -cypher -cipherable -cipherdom -ciphered -cyphered -cipherer -cipherhood -ciphering -cyphering -ciphers -cipher's -cyphers -ciphertext -ciphertexts -Cyphomandra -cyphonautes -ciphony -ciphonies -cyphonism -cyphosis -cipo -cipolin -cipolins -cipollino -cippi -cippus -Cypraea -cypraeid -Cypraeidae -cypraeiform -cypraeoid -cypre -cypres -cypreses -cypress -cypressed -cypresses -Cypressinn -cypressroot -Cypria -Ciprian -Cyprian -cyprians -cyprid -Cyprididae -Cypridina -Cypridinidae -cypridinoid -Cyprina -cyprine -cyprinid -Cyprinidae -cyprinids -cypriniform -cyprinin -cyprinine -cyprinodont -Cyprinodontes -Cyprinodontidae -cyprinodontoid -cyprinoid -Cyprinoidea -cyprinoidean -Cyprinus -Cyprio -Cypriot -Cypriote -cypriotes -cypriots -cypripedin -Cypripedium -Cypris -Cypro -cyproheptadine -Cypro-Minoan -Cypro-phoenician -cyproterone -Cyprus -cypruses -cypsela -cypselae -Cypseli -Cypselid -Cypselidae -cypseliform -Cypseliformes -cypseline -cypseloid -cypselomorph -Cypselomorphae -cypselomorphic -cypselous -Cypselus -cyptozoic -Cipus -cir -cir. -Cyra -Cyrano -circ -CIRCA -circadian -Circaea -Circaeaceae -Circaean -Circaetus -circar -Circassia -Circassian -Circassic -Circe -Circean -Circensian -circinal -circinate -circinately -circination -Circini -Circinus -circiter -circle -circle-branching -circled -circle-in -circle-out -circler -circlers -circles -circle-shearing -circle-squaring -circlet -circleting -circlets -Circleville -circlewise -circle-wise -circline -circling -circling-in -circling-out -Circlorama -circocele -Circosta -circovarian -circs -circue -circuit -circuitable -circuital -circuited -circuiteer -circuiter -circuity -circuities -circuiting -circuition -circuitman -circuitmen -circuitor -circuitous -circuitously -circuitousness -circuitry -circuit-riding -circuitries -circuits -circuit's -circuituously -circulable -circulant -circular -circular-cut -circularisation -circularise -circularised -circulariser -circularising -circularism -circularity -circularities -circularization -circularizations -circularize -circularized -circularizer -circularizers -circularizes -circularizing -circular-knit -circularly -circularness -circulars -circularwise -circulatable -circulate -circulated -circulates -circulating -circulation -circulations -circulative -circulator -circulatory -circulatories -circulators -circule -circulet -circuli -circulin -circulus -circum -circum- -circumaction -circumadjacent -circumagitate -circumagitation -circumambages -circumambagious -circumambience -circumambiency -circumambiencies -circumambient -circumambiently -circumambulate -circumambulated -circumambulates -circumambulating -circumambulation -circumambulations -circumambulator -circumambulatory -circumanal -circumantarctic -circumarctic -Circum-arean -circumarticular -circumaviate -circumaviation -circumaviator -circumaxial -circumaxile -circumaxillary -circumbasal -circumbendibus -circumbendibuses -circumboreal -circumbuccal -circumbulbar -circumcallosal -Circumcellion -circumcenter -circumcentral -circumcinct -circumcincture -circumcircle -circumcise -circumcised -circumciser -circumcises -circumcising -circumcision -circumcisions -circumcission -Circum-cytherean -circumclude -circumclusion -circumcolumnar -circumcone -circumconic -circumcorneal -circumcrescence -circumcrescent -circumdate -circumdenudation -circumdiction -circumduce -circumducing -circumduct -circumducted -circumduction -circumesophagal -circumesophageal -circumfer -circumference -circumferences -circumferent -circumferential -circumferentially -circumferentor -circumflant -circumflect -circumflex -circumflexes -circumflexion -circumfluence -circumfluent -circumfluous -circumforaneous -circumfulgent -circumfuse -circumfused -circumfusile -circumfusing -circumfusion -circumgenital -circumgestation -circumgyrate -circumgyration -circumgyratory -circumhorizontal -circumincession -circuminsession -circuminsular -circumintestinal -circumitineration -circumjacence -circumjacency -circumjacencies -circumjacent -circumjovial -Circum-jovial -circumlental -circumlitio -circumlittoral -circumlocute -circumlocution -circumlocutional -circumlocutionary -circumlocutionist -circumlocutions -circumlocution's -circumlocutory -circumlunar -Circum-mercurial -circummeridian -circum-meridian -circummeridional -circummigrate -circummigration -circummundane -circummure -circummured -circummuring -circumnatant -circumnavigable -circumnavigate -circumnavigated -circumnavigates -circumnavigating -circumnavigation -circumnavigations -circumnavigator -circumnavigatory -Circum-neptunian -circumneutral -circumnuclear -circumnutate -circumnutated -circumnutating -circumnutation -circumnutatory -circumocular -circumoesophagal -circumoral -circumorbital -circumpacific -circumpallial -circumparallelogram -circumpentagon -circumplanetary -circumplect -circumplicate -circumplication -circumpolar -circumpolygon -circumpose -circumposition -circumquaque -circumradii -circumradius -circumradiuses -circumrenal -circumrotate -circumrotated -circumrotating -circumrotation -circumrotatory -circumsail -Circum-saturnal -circumsaturnian -Circum-saturnian -circumsciss -circumscissile -circumscribable -circumscribe -circumscribed -circumscriber -circumscribes -circumscribing -circumscript -circumscription -circumscriptions -circumscriptive -circumscriptively -circumscriptly -circumscrive -circumsession -circumsinous -circumsolar -circumspangle -circumspatial -circumspect -circumspection -circumspections -circumspective -circumspectively -circumspectly -circumspectness -circumspheral -circumsphere -circumstance -circumstanced -circumstances -circumstance's -circumstancing -circumstant -circumstantiability -circumstantiable -circumstantial -circumstantiality -circumstantialities -circumstantially -circumstantialness -circumstantiate -circumstantiated -circumstantiates -circumstantiating -circumstantiation -circumstantiations -circumstellar -circumtabular -circumterraneous -circumterrestrial -circumtonsillar -circumtropical -circumumbilical -circumundulate -circumundulation -Circum-uranian -circumvallate -circumvallated -circumvallating -circumvallation -circumvascular -circumvent -circumventable -circumvented -circumventer -circumventing -circumvention -circumventions -circumventive -circumventor -circumvents -circumvest -circumviate -circumvoisin -circumvolant -circumvolute -circumvolution -circumvolutory -circumvolve -circumvolved -circumvolving -circumzenithal -circus -circuses -circusy -circus's -circut -circuted -circuting -circuts -cire -Cyrena -Cyrenaic -Cirenaica -Cyrenaica -Cyrenaicism -Cirencester -Cyrene -Cyrenian -cire-perdue -cires -Ciri -Cyrie -Cyril -Cyrill -Cirilla -Cyrilla -Cyrillaceae -cyrillaceous -Cyrille -Cyrillian -Cyrillianism -Cyrillic -Cirillo -Cyrillus -Cirilo -cyriologic -cyriological -cirl -cirmcumferential -Ciro -Cirone -cirque -cirque-couchant -cirques -cirr- -cirrate -cirrated -Cirratulidae -Cirratulus -cirrh- -Cirrhopetalum -cirrhopod -cirrhose -cirrhosed -cirrhoses -cirrhosis -cirrhotic -cirrhous -cirrhus -Cirri -cirribranch -cirriferous -cirriform -cirrigerous -cirrigrade -cirriped -cirripede -Cirripedia -cirripedial -cirripeds -CIRRIS -cirro- -cirrocumular -cirro-cumular -cirrocumulative -cirro-cumulative -cirrocumulous -cirro-cumulous -cirrocumulus -cirro-cumulus -cirro-fillum -cirro-filum -cirrolite -cirro-macula -cirro-nebula -cirropodous -cirrose -cirrosely -cirrostome -cirro-stome -Cirrostomi -cirrostrative -cirro-strative -cirro-stratous -cirrostratus -cirro-stratus -cirrous -cirro-velum -cirrus -cirsectomy -cirsectomies -Cirsium -cirsocele -cirsoid -cirsomphalos -cirsophthalmia -cirsotome -cirsotomy -cirsotomies -Cyrtandraceae -cirterion -Cyrtidae -cyrto- -cyrtoceracone -Cyrtoceras -cyrtoceratite -cyrtoceratitic -cyrtograph -cyrtolite -cyrtometer -Cyrtomium -cyrtopia -cyrtosis -cyrtostyle -ciruela -cirurgian -Cyrus -ciruses -CIS -cis- -Cisalpine -Cisalpinism -cisandine -cisatlantic -Cysatus -CISC -Ciscaucasia -Cisco -ciscoes -ciscos -cise -ciseaux -cisele -ciseleur -ciseleurs -cis-elysian -cis-Elizabethan -ciselure -ciselures -cisgangetic -cising -cisium -cisjurane -Ciskei -cisleithan -cislunar -cismarine -Cismontane -Cismontanism -Cisne -cisoceanic -cispadane -cisplatine -cispontine -Cis-reformation -cisrhenane -Cissaea -Cissampelos -Cissy -Cissie -Cissiee -cissies -cissing -cissoid -cissoidal -cissoids -Cissus -cist -cyst -cyst- -cista -Cistaceae -cistaceous -cystadenoma -cystadenosarcoma -cistae -cystal -cystalgia -cystamine -cystaster -cystathionine -cystatrophy -cystatrophia -cysteamine -cystectasy -cystectasia -cystectomy -cystectomies -cisted -cysted -cystein -cysteine -cysteines -cysteinic -cysteins -cystelcosis -cystenchyma -cystenchymatous -cystenchyme -cystencyte -Cistercian -Cistercianism -cysterethism -cistern -cisterna -cisternae -cisternal -cisterns -cistern's -cysti- -cistic -cystic -cysticarpic -cysticarpium -cysticercerci -cysticerci -cysticercoid -cysticercoidal -cysticercosis -cysticercus -cysticerus -cysticle -cysticolous -cystid -Cystidea -cystidean -cystidia -cystidicolous -cystidium -cystidiums -cystiferous -cystiform -cystigerous -Cystignathidae -cystignathine -cystin -cystine -cystines -cystinosis -cystinuria -cystirrhea -cystis -cystitides -cystitis -cystitome -cysto- -cystoadenoma -cystocarcinoma -cystocarp -cystocarpic -cystocele -cystocyte -cystocolostomy -cystodynia -cystoelytroplasty -cystoenterocele -cystoepiplocele -cystoepithelioma -cystofibroma -Cystoflagellata -cystoflagellate -cystogenesis -cystogenous -cystogram -cystoid -Cystoidea -cystoidean -cystoids -cystolith -cystolithectomy -cystolithiasis -cystolithic -cystoma -cystomas -cystomata -cystomatous -cystometer -cystomyoma -cystomyxoma -cystomorphous -Cystonectae -cystonectous -cystonephrosis -cystoneuralgia -cystoparalysis -Cystophora -cystophore -cistophori -cistophoric -cistophorus -cystophotography -cystophthisis -cystopyelitis -cystopyelography -cystopyelonephritis -cystoplasty -cystoplegia -cystoproctostomy -Cystopteris -cystoptosis -Cystopus -cystoradiography -cistori -cystorrhagia -cystorrhaphy -cystorrhea -cystosarcoma -cystoschisis -cystoscope -cystoscopy -cystoscopic -cystoscopies -cystose -cystosyrinx -cystospasm -cystospastic -cystospore -cystostomy -cystostomies -cystotome -cystotomy -cystotomies -cystotrachelotomy -cystoureteritis -cystourethritis -cystourethrography -cystous -cis-trans -cistron -cistronic -cistrons -cists -cysts -Cistudo -Cistus -cistuses -cistvaen -Ciszek -CIT -cyt- -cit. -Cita -citable -citadel -citadels -citadel's -cital -Citarella -cytase -cytasic -cytaster -cytasters -Citation -citational -citations -citation's -citator -citatory -citators -citatum -cite -cyte -citeable -cited -citee -Citellus -citer -citers -cites -citess -Cithaeron -Cithaeronian -cithara -citharas -Citharexylum -citharist -citharista -citharoedi -citharoedic -citharoedus -cither -Cythera -Cytherea -Cytherean -Cytherella -Cytherellidae -cithern -citherns -cithers -cithren -cithrens -City -city-born -city-bound -city-bred -citybuster -citicism -citycism -city-commonwealth -citicorp -cytidine -cytidines -citydom -citied -cities -citify -citification -citified -cityfied -citifies -citifying -cityfolk -cityful -city-god -Citigradae -citigrade -cityish -cityless -citylike -Cytinaceae -cytinaceous -cityness -citynesses -citing -Cytinus -cytioderm -cytioderma -city's -cityscape -cityscapes -cytisine -Cytissorus -city-state -Cytisus -cytitis -cityward -citywards -citywide -city-wide -citizen -citizendom -citizeness -citizenhood -citizenish -citizenism -citizenize -citizenized -citizenizing -citizenly -citizenry -citizenries -citizens -citizen's -citizenship -citizenships -Citlaltepetl -Citlaltpetl -cyto- -cytoanalyzer -cytoarchitectural -cytoarchitecturally -cytoarchitecture -cytoblast -cytoblastema -cytoblastemal -cytoblastematous -cytoblastemic -cytoblastemous -cytocentrum -cytochalasin -cytochemical -cytochemistry -cytochylema -cytochrome -cytocide -cytocyst -cytoclasis -cytoclastic -cytococci -cytococcus -cytode -cytodendrite -cytoderm -cytodiagnosis -cytodieresis -cytodieretic -cytodifferentiation -cytoecology -cytogamy -cytogene -cytogenesis -cytogenetic -cytogenetical -cytogenetically -cytogeneticist -cytogenetics -cytogeny -cytogenic -cytogenies -cytogenous -cytoglobin -cytoglobulin -cytohyaloplasm -cytoid -citoyen -citoyenne -citoyens -cytokinesis -cytokinetic -cytokinin -cytol -citola -citolas -citole -citoler -citolers -citoles -cytolymph -cytolysin -cytolysis -cytolist -cytolytic -cytology -cytologic -cytological -cytologically -cytologies -cytologist -cytologists -cytoma -cytome -cytomegalic -cytomegalovirus -cytomere -cytometer -cytomicrosome -cytomitome -cytomorphology -cytomorphological -cytomorphosis -cyton -cytone -cytons -cytopahgous -cytoparaplastin -cytopathic -cytopathogenic -cytopathogenicity -cytopathology -cytopathologic -cytopathological -cytopathologically -cytopenia -Cytophaga -cytophagy -cytophagic -cytophagous -cytopharynges -cytopharynx -cytopharynxes -cytophil -cytophilic -cytophysics -cytophysiology -cytopyge -cytoplasm -cytoplasmic -cytoplasmically -cytoplast -cytoplastic -cytoproct -cytoreticulum -cytoryctes -cytosin -cytosine -cytosines -cytosol -cytosols -cytosome -cytospectrophotometry -Cytospora -Cytosporina -cytost -cytostatic -cytostatically -cytostomal -cytostome -cytostroma -cytostromatic -cytotactic -cytotaxis -cytotaxonomy -cytotaxonomic -cytotaxonomically -cytotechnology -cytotechnologist -cytotoxic -cytotoxicity -cytotoxin -cytotrophy -cytotrophoblast -cytotrophoblastic -cytotropic -cytotropism -cytovirin -cytozymase -cytozyme -cytozoa -cytozoic -cytozoon -cytozzoa -citr- -Citra -citra- -citraconate -citraconic -citral -citrals -citramide -citramontane -citrange -citrangeade -citrate -citrated -citrates -citrean -citrene -citreous -citric -citriculture -citriculturist -citril -citrylidene -citrin -citrination -citrine -citrines -citrinin -citrinins -citrinous -citrins -citrocola -Citroen -citrometer -Citromyces -Citron -citronade -citronalis -citron-colored -citronella -citronellal -Citronelle -citronellic -citronellol -citron-yellow -citronin -citronize -citrons -citronwood -Citropsis -citropten -citrous -citrul -citrullin -citrulline -Citrullus -Citrus -citruses -cittern -citternhead -citterns -Cittticano -citua -cytula -cytulae -CIU -Ciudad -cyul -civ -civ. -cive -civet -civet-cat -civetlike -civetone -civets -civy -Civia -civic -civical -civically -civicism -civicisms -civic-minded -civic-mindedly -civic-mindedness -civics -civie -civies -civil -civile -civiler -civilest -civilian -civilianization -civilianize -civilians -civilian's -civilisable -civilisation -civilisational -civilisations -civilisatory -civilise -civilised -civilisedness -civiliser -civilises -civilising -civilist -civilite -civility -civilities -civilizable -civilizade -civilization -civilizational -civilizationally -civilizations -civilization's -civilizatory -civilize -civilized -civilizedness -civilizee -civilizer -civilizers -civilizes -civilizing -civil-law -civilly -civilness -civil-rights -civism -civisms -Civitan -civitas -civite -civory -civvy -civvies -cywydd -ciwies -cixiid -Cixiidae -Cixo -cizar -cize -Cyzicene -Cyzicus -CJ -ck -ckw -CL -cl. -clabber -clabbered -clabbery -clabbering -clabbers -clablaria -Clabo -clabularia -clabularium -clach -clachan -clachans -clachs -clack -Clackama -Clackamas -clackdish -clacked -clacker -clackers -clacket -clackety -clacking -Clackmannan -Clackmannanshire -clacks -Clacton -Clactonian -clad -cladanthous -cladautoicous -cladding -claddings -clade -cladine -cladistic -clado- -cladocarpous -Cladocera -cladoceran -cladocerans -cladocerous -cladode -cladodes -cladodial -cladodium -cladodont -cladodontid -Cladodontidae -Cladodus -cladogenesis -cladogenetic -cladogenetically -cladogenous -Cladonia -Cladoniaceae -cladoniaceous -cladonioid -cladophyll -cladophyllum -Cladophora -Cladophoraceae -cladophoraceous -Cladophorales -cladoptosis -cladose -Cladoselache -Cladoselachea -cladoselachian -Cladoselachidae -cladosiphonic -Cladosporium -Cladothrix -Cladrastis -clads -cladus -claes -Claflin -clag -clagged -claggy -clagging -claggum -clags -Clay -claybank -claybanks -Clayberg -Claiborn -Clayborn -Claiborne -Clayborne -Claibornian -clay-bound -Claybourne -claybrained -clay-built -clay-cold -clay-colored -clay-digging -clay-dimmed -clay-drying -claye -clayed -clayey -clayen -clayer -clay-faced -clay-filtering -clay-forming -clay-grinding -Clayhole -clayier -clayiest -clayiness -claying -clayish -claik -claylike -clay-lined -claim -claimable -clayman -claimant -claimants -claimant's -claimed -claimer -claimers -claiming -clay-mixing -claim-jumper -claim-jumping -claimless -Claymont -claymore -claymores -claims -claimsman -claimsmen -Clayoquot -claypan -claypans -Claypool -Clair -clairaudience -clairaudient -clairaudiently -Clairaut -clairce -Claire -clairecole -clairecolle -claires -Clairfield -clair-obscure -clairschach -clairschacher -clairseach -clairseacher -clairsentience -clairsentient -Clairton -clairvoyance -clairvoyances -clairvoyancy -clairvoyancies -clairvoyant -clairvoyantly -clairvoyants -clays -clay's -Claysburg -Clayson -claystone -Claysville -clay-tempering -claith -claithes -Clayton -Claytonia -Claytonville -claiver -clayver-grass -Clayville -clayware -claywares -clay-washing -clayweed -clay-wrapped -clake -Clallam -clam -Claman -clamant -clamantly -clamaroo -clamation -clamative -Clamatores -clamatory -clamatorial -clamb -clambake -clambakes -clamber -clambered -clamberer -clambering -clambers -clamcracker -clame -clamehewit -clamer -clamflat -clamjamfery -clamjamfry -clamjamphrie -clamlike -clammed -clammer -clammers -clammersome -clammy -clammier -clammiest -clammily -clamminess -clamminesses -clamming -clammish -clammyweed -clamor -clamored -clamorer -clamorers -clamoring -clamorist -clamorous -clamorously -clamorousness -clamors -clamorsome -clamour -clamoured -clamourer -clamouring -clamourist -clamourous -clamours -clamoursome -clamp -clampdown -clamped -clamper -clampers -clamping -clamps -clams -clam's -clamshell -clamshells -clamworm -clamworms -clan -Clance -Clancy -clancular -clancularly -clandestine -clandestinely -clandestineness -clandestinity -clanfellow -clang -clanged -clanger -clangers -clangful -clanging -clangingly -clangor -clangored -clangoring -clangorous -clangorously -clangorousness -clangors -clangour -clangoured -clangouring -clangours -clangs -Clangula -clanjamfray -clanjamfrey -clanjamfrie -clanjamphrey -clank -clanked -clankety -clanking -clankingly -clankingness -clankless -clanks -clankum -clanless -clanned -clanning -clannish -clannishly -clannishness -clannishnesses -clans -clansfolk -clanship -clansman -clansmanship -clansmen -clanswoman -clanswomen -Clanton -Claosaurus -clap -clapboard -clapboarding -clapboards -clapbread -clapcake -clapdish -clape -Clapeyron -clapholt -clapmatch -clapnest -clapnet -clap-net -clapotis -Clapp -clappe -clapped -Clapper -clapperboard -clapperclaw -clapper-claw -clapperclawer -clapperdudgeon -clappered -clappering -clappermaclaw -clappers -clapping -claps -clapstick -clap-stick -clapt -Clapton -claptrap -claptraps -clapwort -claque -claquer -claquers -claques -claqueur -claqueurs -clar -Clara -clarabella -Clarabelle -clarain -Claramae -Clarance -Clarcona -Clardy -Clare -Clarey -Claremont -Claremore -Clarence -clarences -Clarenceux -Clarenceuxship -Clarencieux -Clarendon -clare-obscure -clares -Claresta -claret -Clareta -Claretian -clarets -Claretta -Clarette -Clarhe -Clari -Clary -Claribel -claribella -Clarice -clarichord -Clarie -claries -clarify -clarifiable -clarifiant -clarificant -clarification -clarifications -clarified -clarifier -clarifiers -clarifies -clarifying -clarigate -clarigation -clarigold -clarin -clarina -Clarinda -Clarine -clarinet -clarinetist -clarinetists -clarinets -clarinettist -clarinettists -Clarington -clarini -clarino -clarinos -Clarion -clarioned -clarionet -clarioning -clarions -clarion-voiced -Clarisa -Clarise -Clarissa -Clarisse -clarissimo -Clarist -Clarita -clarity -clarities -claritude -Claryville -Clark -Clarkdale -Clarke -Clarkedale -clarkeite -clarkeites -Clarkesville -Clarkfield -Clarkia -clarkias -Clarkin -Clarks -Clarksboro -Clarksburg -Clarksdale -Clarkson -Clarkston -Clarksville -Clarkton -claro -claroes -Claromontane -Claromontanus -claros -clarre -clarsach -clarseach -clarsech -clarseth -clarshech -clart -clarty -clartier -clartiest -clarts -clase -clash -clashed -clashee -clasher -clashers -clashes -clashy -clashing -clashingly -clasmatocyte -clasmatocytic -clasmatosis -CLASP -clasped -clasper -claspers -clasping -clasping-leaved -clasps -claspt -CLASS -class. -classable -classbook -class-cleavage -class-conscious -classed -classer -classers -classes -classfellow -classy -classic -classical -classicalism -classicalist -classicality -classicalities -classicalize -classically -classicalness -classicise -classicised -classicising -classicism -classicisms -classicist -classicistic -classicists -classicize -classicized -classicizing -classico -classico- -classicolatry -classico-lombardic -classics -classier -classiest -classify -classifiable -classific -classifically -classification -classificational -classifications -classificator -classificatory -classified -classifier -classifiers -classifies -classifying -classily -classiness -classing -classis -classism -classisms -classist -classists -classless -classlessness -classman -classmanship -classmate -classmates -classmate's -classmen -classroom -classrooms -classroom's -classwise -classwork -clast -clastic -clastics -clasts -clat -clatch -clatchy -Clathraceae -clathraceous -Clathraria -clathrarian -clathrate -Clathrina -Clathrinidae -clathroid -clathrose -clathrulate -Clathrus -Clatonia -Clatskanie -Clatsop -clatter -clattered -clatterer -clattery -clattering -clatteringly -clatters -clattertrap -clattertraps -clatty -clauber -claucht -Claud -Clauddetta -Claude -Claudel -Claudell -Claudelle -claudent -claudetite -claudetites -Claudetta -Claudette -Claudy -Claudia -Claudian -Claudianus -claudicant -claudicate -claudication -Claudie -Claudina -Claudine -Claudio -Claudius -Claudville -claught -claughted -claughting -claughts -Claunch -Claus -clausal -clause -Clausen -clauses -clause's -Clausewitz -Clausilia -Clausiliidae -Clausius -clauster -clausthalite -claustra -claustral -claustration -claustrophilia -claustrophobe -claustrophobia -claustrophobiac -claustrophobias -claustrophobic -claustrum -clausula -clausulae -clausular -clausule -clausum -clausure -claut -Clava -clavacin -clavae -claval -Clavaria -Clavariaceae -clavariaceous -clavate -clavated -clavately -clavatin -clavation -clave -clavecin -clavecinist -clavel -clavelization -clavelize -clavellate -clavellated -claver -Claverack -clavered -clavering -clavers -claves -clavi -clavy -clavial -claviature -clavicembali -clavicembalist -clavicembalo -Claviceps -clavichord -clavichordist -clavichordists -clavichords -clavicylinder -clavicymbal -clavicytheria -clavicytherium -clavicithern -clavicythetheria -clavicittern -clavicle -clavicles -clavicor -clavicorn -clavicornate -Clavicornes -Clavicornia -clavicotomy -clavicular -clavicularium -claviculate -claviculo-humeral -claviculus -clavier -clavierist -clavieristic -clavierists -claviers -claviform -claviger -clavigerous -claviharp -clavilux -claviol -claviole -clavipectoral -clavis -clavises -Clavius -clavodeltoid -clavodeltoideus -clavola -clavolae -clavolet -clavus -clavuvi -claw -clawback -clawed -clawer -clawers -claw-footed -clawhammer -clawing -clawk -clawker -clawless -clawlike -claws -clawsick -Clawson -claw-tailed -claxon -claxons -Claxton -CLDN -cle -Clea -cleach -clead -cleaded -cleading -cleam -cleamer -clean -clean- -cleanable -clean-appearing -clean-armed -clean-boled -clean-bred -clean-built -clean-complexioned -clean-cut -cleaned -cleaner -cleaner-off -cleaner-out -cleaners -cleaner's -cleaner-up -cleanest -clean-faced -clean-feeding -clean-fingered -clean-grained -cleanhanded -clean-handed -cleanhandedness -cleanhearted -cleaning -cleanings -cleanish -clean-legged -cleanly -cleanlier -cleanliest -cleanlily -clean-limbed -cleanliness -cleanlinesses -clean-lived -clean-living -clean-looking -clean-made -clean-minded -clean-moving -cleanness -cleannesses -cleanout -cleans -cleansable -clean-saying -clean-sailing -cleanse -cleansed -clean-seeming -cleanser -cleansers -cleanses -clean-shanked -clean-shaped -clean-shaved -clean-shaven -cleansing -cleanskin -clean-skin -clean-skinned -cleanskins -clean-smelling -clean-souled -clean-speaking -clean-sweeping -Cleanth -Cleantha -Cleanthes -clean-thinking -clean-timbered -cleanup -cleanups -clean-washed -clear -clearable -clearage -clearance -clearances -clearance's -clear-boled -Clearbrook -Clearchus -clearcole -clear-cole -clear-complexioned -clear-crested -clear-cut -clear-cutness -clear-cutting -cleared -clearedness -clear-eye -clear-eyed -clear-eyes -clearer -clearers -clearest -clear-faced -clear-featured -Clearfield -clearheaded -clear-headed -clearheadedly -clearheadedness -clearhearted -Cleary -clearing -clearinghouse -clearinghouses -clearings -clearing's -clearish -clearly -clearminded -clear-minded -clear-mindedness -Clearmont -clearness -clearnesses -clear-obscure -clears -clearsighted -clear-sighted -clear-sightedly -clearsightedness -clear-sightedness -Clearsite -clear-skinned -clearskins -clear-spirited -clearstarch -clear-starch -clearstarcher -clear-starcher -clear-stemmed -clearstory -clear-story -clearstoried -clearstories -clear-sunned -clear-throated -clear-tinted -clear-toned -clear-up -Clearview -Clearville -clear-visioned -clear-voiced -clearway -clear-walled -Clearwater -clearweed -clearwing -clear-witted -Cleasta -cleat -cleated -cleating -Cleaton -cleats -cleavability -cleavable -cleavage -cleavages -Cleave -cleaved -cleaveful -cleavelandite -cleaver -cleavers -cleaverwort -Cleaves -cleaving -cleavingly -Cleavland -Cleburne -cleche -clechee -clechy -cleck -cled -cledde -cledge -cledgy -cledonism -clee -cleech -cleek -cleeked -cleeky -cleeking -cleeks -Cleelum -Cleethorpes -CLEF -clefs -cleft -clefted -cleft-footed -cleft-graft -clefting -clefts -cleft's -cleg -Cleghorn -CLEI -cleidagra -cleidarthritis -cleidocostal -cleidocranial -cleidohyoid -cleidoic -cleidomancy -cleidomastoid -cleido-mastoid -cleido-occipital -cleidorrhexis -cleidoscapular -cleidosternal -cleidotomy -cleidotripsy -Clein -Cleisthenes -cleistocarp -cleistocarpous -cleistogamy -cleistogamic -cleistogamically -cleistogamous -cleistogamously -cleistogene -cleistogeny -cleistogenous -cleistotcia -cleistothecia -cleistothecium -Cleistothecopsis -cleithral -cleithrum -Clela -Cleland -Clellan -Clem -Clematis -clematises -clematite -Clemclemalats -Clemen -Clemence -Clemenceau -Clemency -clemencies -Clemens -Clement -Clementas -Clemente -Clementi -Clementia -Clementina -Clementine -Clementis -Clementius -clemently -clementness -Clementon -Clements -clemmed -Clemmy -Clemmie -clemming -Clemmons -Clemon -Clemons -Clemson -clench -clench-built -clenched -clencher -clenchers -clenches -clenching -Clendenin -Cleo -Cleobis -Cleobulus -Cleodaeus -Cleodal -Cleodel -Cleodell -cleoid -Cleome -cleomes -Cleon -Cleone -Cleopatra -Cleopatre -Cleostratus -Cleota -Cleothera -clep -clepe -cleped -clepes -cleping -clepsydra -clepsydrae -clepsydras -Clepsine -clept -cleptobioses -cleptobiosis -cleptobiotic -cleptomania -cleptomaniac -Clerc -Clercq -Clere -Cleres -clerestory -clerestoried -clerestories -clerete -clergess -clergy -clergyable -clergies -clergylike -clergyman -clergymen -clergion -clergywoman -clergywomen -cleric -clerical -clericalism -clericalist -clericalists -clericality -clericalize -clerically -clericals -clericate -clericature -clericism -clericity -clerico- -clerico-political -clerics -clericum -clerid -Cleridae -clerids -clerihew -clerihews -clerisy -clerisies -Clerissa -Clerk -clerkage -clerk-ale -clerkdom -clerkdoms -clerked -clerkery -clerkess -clerkhood -clerking -clerkish -clerkless -clerkly -clerklier -clerkliest -clerklike -clerkliness -clerks -clerkship -clerkships -Clermont -Clermont-Ferrand -clernly -clero- -Clerodendron -cleromancy -cleronomy -clerstory -cleruch -cleruchy -cleruchial -cleruchic -cleruchies -clerum -Clerus -Clervaux -Cleta -cletch -Clete -Clethra -Clethraceae -clethraceous -clethrionomys -Cleti -Cletis -Cletus -cleuch -cleuk -cleuks -Cleva -Cleve -Clevey -cleveite -cleveites -Cleveland -Clevenger -clever -cleverality -clever-clever -Cleverdale -cleverer -cleverest -clever-handed -cleverish -cleverishly -cleverly -cleverness -clevernesses -Cleves -Clevie -clevis -clevises -clew -clewed -clewgarnet -clewing -Clewiston -clews -CLI -Cly -cliack -clianthus -clich -cliche -cliched -cliche-ridden -cliches -cliche's -Clichy -Clichy-la-Garenne -click -click-clack -clicked -clicker -clickers -clicket -clickety-clack -clickety-click -clicky -clicking -clickless -clicks -CLID -Clidastes -Clide -Clyde -Clydebank -Clydesdale -Clydeside -Clydesider -Clie -cliency -client -clientage -cliental -cliented -clientelage -clientele -clienteles -clientless -clientry -clients -client's -clientship -clyer -clyers -clyfaker -clyfaking -Cliff -cliff-bound -cliff-chafed -cliffed -Cliffes -cliff-girdled -cliffhang -cliffhanger -cliff-hanger -cliffhangers -cliffhanging -cliff-hanging -cliffy -cliffier -cliffiest -cliffing -cliffless -clifflet -clifflike -cliff-marked -Clifford -cliffs -cliff's -cliffside -cliffsman -cliffweed -Cliffwood -cliff-worn -Clift -Clifty -Clifton -Cliftonia -cliftonite -clifts -Clim -clima -Climaciaceae -climaciaceous -Climacium -climacter -climactery -climacterial -climacteric -climacterical -climacterically -climacterics -climactic -climactical -climactically -climacus -Clyman -climant -climata -climatal -climatarchic -climate -climates -climate's -climath -climatic -climatical -climatically -Climatius -climatize -climatography -climatographical -climatology -climatologic -climatological -climatologically -climatologist -climatologists -climatometer -climatotherapeutics -climatotherapy -climatotherapies -climature -climax -climaxed -climaxes -climaxing -climb -climbable -climb-down -climbed -climber -climbers -climbing -climbingfish -climbingfishes -climbs -clime -Clymene -Clymenia -Clymenus -Clymer -climes -clime's -climograph -clin -clin- -clinah -clinal -clinally -clinamen -clinamina -clinandrdria -clinandria -clinandrium -clinanthia -clinanthium -clinch -clinch-built -Clinchco -clinched -clincher -clincher-built -clinchers -clinches -Clinchfield -clinching -clinchingly -clinchingness -clinchpoop -cline -clines -Clynes -cling -Clingan -clinged -clinger -clingers -clingfish -clingfishes -clingy -clingier -clingiest -clinginess -clinging -clingingly -clingingness -cling-rascal -clings -clingstone -clingstones -clinia -clinic -clinical -clinically -clinician -clinicians -clinicist -clinicopathologic -clinicopathological -clinicopathologically -clinics -clinic's -clinid -Clinis -clinium -clink -clinkant -clink-clank -clinked -clinker -clinker-built -clinkered -clinkerer -clinkery -clinkering -clinkers -clinkety-clink -clinking -clinks -clinkstone -clinkum -clino- -clinoaxis -clinocephaly -clinocephalic -clinocephalism -clinocephalous -clinocephalus -clinochlore -clinoclase -clinoclasite -clinodiagonal -clinodomatic -clinodome -clinograph -clinographic -clinohedral -clinohedrite -clinohumite -clinoid -clinology -clinologic -clinometer -clinometry -clinometria -clinometric -clinometrical -clinophobia -clinopinacoid -clinopinacoidal -clinopyramid -clinopyroxene -Clinopodium -clinoprism -clinorhombic -clinospore -clinostat -clinous -clinquant -Clint -clinty -clinting -Clintock -Clinton -Clintondale -Clintonia -clintonite -Clintonville -clints -Clintwood -Clio -Clyo -Cliona -Clione -clip -clipboard -clipboards -clip-clop -clype -clypeal -Clypeaster -Clypeastridea -Clypeastrina -clypeastroid -Clypeastroida -Clypeastroidea -clypeate -clypeated -clip-edged -clipei -clypei -clypeiform -clypeo- -clypeola -clypeolar -clypeolate -clypeole -clipeus -clypeus -clip-fed -clip-marked -clip-on -clippable -Clippard -clipped -clipper -clipper-built -clipperman -clippers -clipper's -clippety-clop -clippie -clipping -clippingly -clippings -clipping's -clips -clip's -clipse -clipsheet -clipsheets -clipsome -clipt -clip-winged -clique -cliqued -cliquedom -cliquey -cliqueier -cliqueiest -cliqueyness -cliqueless -cliques -clique's -cliquy -cliquier -cliquiest -cliquing -cliquish -cliquishly -cliquishness -cliquism -cliseometer -clisere -clyses -clish-clash -clishmaclaver -clish-ma-claver -Clisiocampa -clysis -clysma -clysmian -clysmic -clyssus -clyster -clysterize -clysters -Clisthenes -clistocarp -clistocarpous -Clistogastra -clistothcia -clistothecia -clistothecium -clit -Clytaemnesra -clitch -Clite -Clyte -clitella -clitellar -clitelliferous -clitelline -clitellum -clitellus -Clytemnestra -clites -clithe -Clitherall -clithral -clithridiate -clitia -Clytia -clitic -Clytie -clition -Clytius -Clitocybe -clitoral -Clitoria -clitoric -clitoridauxe -clitoridean -clitoridectomy -clitoridectomies -clitoriditis -clitoridotomy -clitoris -clitorises -clitorism -clitoritis -clitoromania -clitoromaniac -clitoromaniacal -clitter -clitterclatter -Clitus -cliv -clival -Clive -Clyve -cliver -clivers -Clivia -clivias -clivis -clivises -clivus -Clywd -clk -CLLI -Cllr -CLNP -Clo -cloaca -cloacae -cloacal -cloacaline -cloacas -cloacean -cloacinal -cloacinean -cloacitis -cloak -cloakage -cloak-and-dagger -cloak-and-suiter -cloak-and-sword -cloaked -cloakedly -cloak-fashion -cloaking -cloakless -cloaklet -cloakmaker -cloakmaking -cloakroom -cloak-room -cloakrooms -cloaks -cloak's -cloakwise -cloam -cloamen -cloamer -Cloanthus -clobber -clobbered -clobberer -clobbering -clobbers -clochan -clochard -clochards -cloche -clocher -cloches -clochette -clock -clockbird -clockcase -clocked -clocker -clockers -clockface -clock-hour -clockhouse -clocking -clockings -clockkeeper -clockless -clocklike -clockmaker -clockmaking -clock-making -clock-minded -clockmutch -clockroom -clocks -clocksmith -Clockville -clockwatcher -clock-watcher -clock-watching -clockwise -clockwork -clock-work -clockworked -clockworks -clod -clodbreaker -clod-brown -clodded -clodder -cloddy -cloddier -cloddiest -cloddily -cloddiness -clodding -cloddish -cloddishly -cloddishness -clodhead -clodhopper -clod-hopper -clodhopperish -clodhoppers -clodhopping -clodknocker -clodlet -clodlike -clodpate -clod-pate -clodpated -clodpates -clodpole -clodpoles -clodpoll -clod-poll -clodpolls -clods -clod's -clod-tongued -Cloe -Cloelia -cloes -Cloete -clof -cloff -clofibrate -clog -clogdogdo -clogged -clogger -cloggy -cloggier -cloggiest -cloggily -clogginess -clogging -cloghad -cloghaun -cloghead -cloglike -clogmaker -clogmaking -clogs -clog's -clogwheel -clogwyn -clogwood -cloy -cloyed -cloyedness -cloyer -cloying -cloyingly -cloyingness -cloyless -cloyment -cloine -cloyne -cloiochoanitic -Clois -cloys -cloysome -cloison -cloisonless -cloisonn -cloisonne -cloisonnism -Cloisonnisme -Cloisonnist -cloister -cloisteral -cloistered -cloisterer -cloistering -cloisterless -cloisterly -cloisterlike -cloisterliness -cloisters -cloister's -cloisterwise -cloistral -cloistress -cloit -cloke -cloky -clokies -clomb -clomben -clomiphene -clomp -clomped -clomping -clomps -clon -clonal -clonally -clone -cloned -cloner -cloners -clones -clong -clonic -clonicity -clonicotonic -cloning -clonings -clonism -clonisms -clonk -clonked -clonking -clonks -clonorchiasis -Clonorchis -clonos -Clonothrix -clons -Clontarf -clonus -clonuses -cloof -cloop -cloot -clootie -Cloots -clop -clop-clop -clopped -clopping -clops -Clopton -cloque -cloques -Cloquet -cloragen -clorargyrite -clorinator -Clorinda -Clorinde -cloriodid -Cloris -Clorox -CLOS -closable -Close -closeable -close-annealed -close-at-hand -close-banded -close-barred -close-by -close-bitten -close-bodied -close-bred -close-buttoned -close-clad -close-clapped -close-clipped -close-coifed -close-compacted -close-connected -close-couched -close-coupled -close-cropped -closecross -close-curled -close-curtained -close-cut -closed -closed-circuit -closed-coil -closed-door -closed-end -closed-in -closed-minded -closed-out -closedown -close-drawn -close-eared -close-fertilization -close-fertilize -close-fibered -close-fights -closefisted -close-fisted -closefistedly -closefistedness -closefitting -close-fitting -close-gleaning -close-grain -close-grained -close-grated -closehanded -close-handed -close-haul -closehauled -close-hauled -close-headed -closehearted -close-herd -close-hooded -close-in -close-jointed -close-kept -close-knit -close-latticed -close-legged -closely -close-lying -closelipped -close-lipped -close-meshed -close-minded -closemouth -closemouthed -close-mouthed -closen -closeness -closenesses -closeout -close-out -closeouts -close-packed -close-partnered -close-pent -close-piled -close-pressed -closer -close-reef -close-reefed -close-ribbed -close-rounded -closers -closes -close-set -close-shanked -close-shaven -close-shut -close-soled -closest -close-standing -close-sticking -closestool -close-stool -closet -closeted -close-tempered -close-textured -closetful -close-thinking -closeting -close-tongued -closets -closeup -close-up -closeups -close-visaged -close-winded -closewing -close-woven -close-written -closh -closing -closings -closish -closkey -closky -Closplint -Closter -Closterium -clostridia -clostridial -clostridian -Clostridium -closure -closured -closures -closure's -closuring -clot -clot-bird -clotbur -clot-bur -clote -cloth -cloth-backed -clothbound -cloth-calendering -cloth-covered -cloth-cropping -cloth-cutting -cloth-dyeing -cloth-drying -clothe -cloth-eared -clothed -clothes -clothesbag -clothesbasket -clothesbrush -clothes-conscious -clothes-consciousness -clothes-drier -clothes-drying -clotheshorse -clotheshorses -clothesyard -clothesless -clothesline -clotheslines -clothesman -clothesmen -clothesmonger -clothes-peg -clothespin -clothespins -clothespress -clothes-press -clothespresses -clothes-washing -cloth-faced -cloth-finishing -cloth-folding -clothy -cloth-yard -clothier -clothiers -clothify -Clothilda -Clothilde -clothing -clothings -cloth-inserted -cloth-laying -clothlike -cloth-lined -clothmaker -cloth-maker -clothmaking -cloth-measuring -Clotho -cloth-of-gold -cloths -cloth-shearing -cloth-shrinking -cloth-smoothing -cloth-sponger -cloth-spreading -cloth-stamping -cloth-testing -cloth-weaving -cloth-winding -clothworker -Clotilda -Clotilde -clot-poll -clots -clottage -clotted -clottedness -clotter -clotty -clotting -cloture -clotured -clotures -cloturing -clotweed -clou -CLOUD -cloudage -cloud-ascending -cloud-barred -cloudberry -cloudberries -cloud-born -cloud-built -cloudburst -cloudbursts -cloudcap -cloud-capped -cloud-compacted -cloud-compeller -cloud-compelling -cloud-covered -cloud-crammed -Cloudcroft -cloud-crossed -Cloudcuckooland -Cloud-cuckoo-land -cloud-curtained -cloud-dispelling -cloud-dividing -cloud-drowned -cloud-eclipsed -clouded -cloud-enveloped -cloud-flecked -cloudful -cloud-girt -cloud-headed -cloud-hidden -cloudy -cloudier -cloudiest -cloudily -cloudiness -cloudinesses -clouding -cloud-kissing -cloud-laden -cloudland -cloud-led -cloudless -cloudlessly -cloudlessness -cloudlet -cloudlets -cloudlike -cloudling -cloudology -cloud-piercing -cloud-rocked -Clouds -cloud-scaling -cloudscape -cloud-seeding -cloud-shaped -cloudship -cloud-surmounting -cloud-surrounded -cloud-topped -cloud-touching -cloudward -cloudwards -cloud-woven -cloud-wrapped -clouee -Clouet -Clough -Clougher -cloughs -clour -cloured -clouring -clours -clout -clouted -clouter -clouterly -clouters -clouty -Cloutierville -clouting -Cloutman -clouts -clout-shoe -Clova -Clovah -clove -clove-gillyflower -cloven -clovene -cloven-footed -cloven-footedness -cloven-hoofed -Clover -Cloverdale -clovered -clover-grass -clovery -cloverlay -cloverleaf -cloverleafs -cloverleaves -cloverley -cloveroot -Cloverport -cloverroot -clovers -clover-sick -clover-sickness -cloves -clove-strip -clovewort -Clovis -clow -clowder -clowders -Clower -clow-gilofre -clown -clownade -clownage -clowned -clownery -clowneries -clownheal -clowning -clownish -clownishly -clownishness -clownishnesses -clowns -clownship -clowre -clowring -cloxacillin -cloze -clozes -CLR -CLRC -CLS -CLTP -CLU -club -clubability -clubable -club-armed -Clubb -clubbability -clubbable -clubbed -clubber -clubbers -clubby -clubbier -clubbiest -clubbily -clubbiness -clubbing -clubbish -clubbishness -clubbism -clubbist -clubdom -club-ended -clubfeet -clubfellow -clubfist -club-fist -clubfisted -clubfoot -club-foot -clubfooted -club-footed -clubhand -clubhands -clubhaul -club-haul -clubhauled -clubhauling -clubhauls -club-headed -club-high -clubhouse -clubhouses -clubionid -Clubionidae -clubland -club-law -clubman -club-man -clubmate -clubmen -clubmobile -clubmonger -club-moss -clubridden -club-riser -clubroom -clubrooms -clubroot -clubroots -club-rush -clubs -club's -club-shaped -clubstart -clubster -clubweed -clubwoman -clubwomen -clubwood -cluck -clucked -clucky -clucking -clucks -cludder -clue -clued -clueing -clueless -clues -clue's -cluff -cluing -Cluj -clum -clumber -clumbers -clump -clumped -clumper -clumpy -clumpier -clumpiest -clumping -clumpish -clumpishness -clumplike -clumproot -clumps -clumpst -clumse -clumsy -clumsier -clumsiest -clumsy-fisted -clumsily -clumsiness -clumsinesses -clunch -Clune -clung -Cluny -Cluniac -Cluniacensian -Clunisian -Clunist -clunk -clunked -clunker -clunkers -clunky -clunkier -clunking -clunks -clunter -clupanodonic -Clupea -clupeid -Clupeidae -clupeids -clupeiform -clupein -clupeine -clupeiod -Clupeodei -clupeoid -clupeoids -clupien -cluppe -cluricaune -Clurman -Clusia -Clusiaceae -clusiaceous -Clusium -cluster -clusterberry -clustered -clusterfist -clustery -clustering -clusteringly -clusterings -clusters -CLUT -clutch -clutched -clutcher -clutches -clutchy -clutching -clutchingly -clutchman -Clute -cluther -Clutier -clutter -cluttered -clutterer -cluttery -cluttering -clutterment -clutters -CLV -Clwyd -CM -CMA -CMAC -CMC -CMCC -CMD -CMDF -cmdg -Cmdr -Cmdr. -CMDS -CMF -CMG -CM-glass -CMH -CMI -CMYK -CMIP -CMIS -CMISE -c-mitosis -CML -cml. -CMMU -Cmon -CMOS -CMOT -CMRR -CMS -CMSGT -CMT -CMTC -CMU -CMW -CN -cn- -CNA -CNAA -CNAB -CNC -CNCC -CND -cnemapophysis -cnemial -cnemic -cnemides -cnemidium -Cnemidophorus -cnemis -Cneoraceae -cneoraceous -Cneorum -CNES -CNI -cnibophore -cnicin -Cnicus -cnida -cnidae -Cnidaria -cnidarian -Cnidean -Cnidia -Cnidian -cnidoblast -cnidocell -cnidocil -cnidocyst -cnidogenous -cnidophobia -cnidophore -cnidophorous -cnidopod -cnidosac -Cnidoscolus -cnidosis -Cnidus -CNM -CNMS -CNN -CNO -Cnossian -Cnossus -C-note -CNR -CNS -CNSR -Cnut -CO -co- -Co. -coabode -coabound -coabsume -coacceptor -coacervate -coacervated -coacervating -coacervation -coach -coachability -coachable -coach-and-four -coach-box -coachbuilder -coachbuilding -coach-built -coached -coachee -Coachella -coacher -coachers -coaches -coachfellow -coachful -coachy -coaching -coachlet -coachmaker -coachmaking -coachman -coachmanship -coachmaster -coachmen -coachs -coachsmith -coachsmithing -coachway -coachwhip -coach-whip -coachwise -coachwoman -coachwood -coachwork -coachwright -coact -coacted -coacting -coaction -coactions -coactive -coactively -coactivity -coactor -coactors -coacts -Coad -coadamite -coadapt -coadaptation -co-adaptation -coadaptations -coadapted -coadapting -coadequate -Coady -coadjacence -coadjacency -coadjacent -coadjacently -coadjudicator -coadjument -coadjust -co-adjust -coadjustment -coadjutant -coadjutator -coadjute -coadjutement -coadjutive -coadjutor -coadjutors -coadjutorship -coadjutress -coadjutrice -coadjutrices -coadjutrix -coadjuvancy -coadjuvant -coadjuvate -coadminister -coadministration -coadministrator -coadministratrix -coadmiration -coadmire -coadmired -coadmires -coadmiring -coadmit -coadmits -coadmitted -coadmitting -coadnate -coadore -coadsorbent -coadunate -coadunated -coadunating -coadunation -coadunative -coadunatively -coadunite -coadventure -co-adventure -coadventured -coadventurer -coadventuress -coadventuring -coadvice -coae- -coaeval -coaevals -coaffirmation -coafforest -co-afforest -coaged -coagel -coagency -co-agency -coagencies -coagent -coagents -coaggregate -coaggregated -coaggregation -coagitate -coagitator -coagment -coagmentation -coagonize -coagriculturist -coagula -coagulability -coagulable -coagulant -coagulants -coagulase -coagulate -coagulated -coagulates -coagulating -coagulation -coagulations -coagulative -coagulator -coagulatory -coagulators -coagule -coagulin -coaguline -coagulometer -coagulose -coagulum -coagulums -Coahoma -Coahuila -Coahuiltecan -coaid -coaita -coak -coakum -coal -coala -coalas -coalbag -coalbagger -coal-bearing -coalbin -coalbins -coal-black -coal-blue -coal-boring -coalbox -coalboxes -coal-breaking -coal-burning -coal-cutting -Coaldale -coal-dark -coaldealer -coal-dumping -coaled -coal-eyed -coal-elevating -coaler -coalers -coalesce -coalesced -coalescence -coalescency -coalescent -coalesces -coalescing -coalface -coal-faced -Coalfield -coalfields -coal-fired -coalfish -coal-fish -coalfishes -coalfitter -coal-gas -Coalgood -coal-handling -coalheugh -coalhole -coalholes -coal-house -coaly -coalyard -coalyards -coalier -coaliest -coalify -coalification -coalified -coalifies -coalifying -Coaling -Coalinga -Coalisland -Coalite -coalition -coalitional -coalitioner -coalitionist -coalitions -coalize -coalized -coalizer -coalizing -coal-laden -coalless -coal-leveling -co-ally -co-allied -coal-loading -coal-man -coal-measure -coal-meter -coalmonger -Coalmont -coalmouse -coal-picking -coalpit -coal-pit -coalpits -Coalport -coal-producing -coal-pulverizing -coalrake -coals -Coalsack -coal-sack -coalsacks -coal-scuttle -coalshed -coalsheds -coal-sifting -coal-stone -coal-tar -coalternate -coalternation -coalternative -coal-tester -coal-tit -coaltitude -Coalton -Coalville -coal-whipper -coal-whipping -Coalwood -coal-works -COAM -coambassador -coambulant -coamiable -coaming -coamings -Coamo -Coan -Coanda -coanimate -coannex -coannexed -coannexes -coannexing -coannihilate -coapostate -coapparition -coappear -co-appear -coappearance -coappeared -coappearing -coappears -coappellee -coapprehend -coapprentice -coappriser -coapprover -coapt -coaptate -coaptation -coapted -coapting -coapts -coaration -co-aration -coarb -coarbiter -coarbitrator -coarct -coarctate -coarctation -coarcted -coarcting -coardent -coarrange -coarrangement -coarse -coarse-featured -coarse-fibered -Coarsegold -coarse-grained -coarse-grainedness -coarse-haired -coarse-handed -coarsely -coarse-lipped -coarse-minded -coarsen -coarsened -coarseness -coarsenesses -coarsening -coarsens -coarser -coarse-skinned -coarse-spoken -coarse-spun -coarsest -coarse-textured -coarse-tongued -coarse-toothed -coarse-wrought -coarsish -coart -coarticulate -coarticulation -coascend -coassert -coasserter -coassession -coassessor -co-assessor -coassignee -coassist -co-assist -coassistance -coassistant -coassisted -coassisting -coassists -coassume -coassumed -coassumes -coassuming -coast -coastal -coastally -coasted -coaster -coasters -coast-fishing -Coastguard -coastguardman -coastguardsman -coastguardsmen -coasting -coastings -coastland -coastline -coastlines -coastman -coastmen -coasts -coastside -coastways -coastwaiter -coastward -coastwards -coastwise -coat -coat-armour -Coatbridge -coat-card -coatdress -coated -coatee -coatees -coater -coaters -Coates -Coatesville -coathangers -coati -coatie -coati-mondi -coatimondie -coatimundi -coati-mundi -coating -coatings -coation -coatis -coatless -coat-money -coatrack -coatracks -coatroom -coatrooms -Coats -Coatsburg -Coatsville -Coatsworth -coattail -coat-tail -coattailed -coattails -coattend -coattended -coattending -coattends -coattest -co-attest -coattestation -coattestator -coattested -coattesting -coattests -coaudience -coauditor -coaugment -coauthered -coauthor -coauthored -coauthoring -coauthority -coauthors -coauthorship -coauthorships -coawareness -coax -co-ax -coaxal -coaxation -coaxed -coaxer -coaxers -coaxes -coaxy -coaxial -coaxially -coaxing -coaxingly -coazervate -coazervation -COB -cobaea -cobalamin -cobalamine -cobalt -cobaltamine -cobaltammine -cobalti- -cobaltic -cobalticyanic -cobalticyanides -cobaltiferous -cobaltine -cobaltinitrite -cobaltite -cobalto- -cobaltocyanic -cobaltocyanide -cobaltous -cobalts -Coban -cobang -Cobb -cobbed -cobber -cobberer -cobbers -Cobbett -Cobby -Cobbie -cobbier -cobbiest -cobbin -cobbing -cobble -cobbled -cobbler -cobblerfish -cobblery -cobblerism -cobblerless -cobblers -cobbler's -cobblership -cobbles -cobblestone -cobble-stone -cobblestoned -cobblestones -cobbly -cobbling -cobbra -cobbs -Cobbtown -cobcab -Cobden -Cobdenism -Cobdenite -COBE -cobego -cobelief -cobeliever -cobelligerent -Coben -cobenignity -coberger -cobewail -Cobh -Cobham -cobhead -cobhouse -cobia -cobias -cobiron -cob-iron -cobishop -co-bishop -Cobitidae -Cobitis -coble -cobleman -Coblentzian -Coblenz -cobles -Cobleskill -cobless -cobloaf -cobnut -cob-nut -cobnuts -COBOL -cobola -coboss -coboundless -cobourg -Cobra -cobra-hooded -cobras -cobreathe -cobridgehead -cobriform -cobrother -co-brother -cobs -cobstone -cob-swan -Coburg -coburgess -coburgher -coburghership -Coburn -Cobus -cobweb -cobwebbed -cobwebbery -cobwebby -cobwebbier -cobwebbiest -cobwebbing -cobwebs -cobweb's -cobwork -COC -coca -cocaceous -Coca-Cola -cocaigne -cocain -cocaine -cocaines -cocainisation -cocainise -cocainised -cocainising -cocainism -cocainist -cocainization -cocainize -cocainized -cocainizing -cocainomania -cocainomaniac -cocains -Cocalus -Cocama -Cocamama -cocamine -Cocanucos -cocao -cocaptain -cocaptains -cocarboxylase -cocarde -cocas -cocash -cocashweed -cocause -cocautioner -Coccaceae -coccaceous -coccagee -coccal -Cocceian -Cocceianism -coccerin -cocci -coccy- -coccic -coccid -Coccidae -coccidia -coccidial -coccidian -Coccidiidea -coccydynia -coccidioidal -Coccidioides -coccidioidomycosis -Coccidiomorpha -coccidiosis -coccidium -coccidology -coccids -cocciferous -cocciform -coccygalgia -coccygeal -coccygean -coccygectomy -coccigenic -coccygeo-anal -coccygeo-mesenteric -coccygerector -coccyges -coccygeus -coccygine -Coccygius -coccygo- -coccygodynia -coccygomorph -Coccygomorphae -coccygomorphic -coccygotomy -coccin -coccinella -coccinellid -Coccinellidae -coccineous -coccyodynia -coccionella -coccyx -coccyxes -Coccyzus -cocco -coccobaccilli -coccobacilli -coccobacillus -coccochromatic -Coccogonales -coccogone -Coccogoneae -coccogonium -coccoid -coccoidal -coccoids -coccolite -coccolith -coccolithophorid -Coccolithophoridae -Coccoloba -Coccolobis -Coccomyces -coccosphere -coccostean -coccosteid -Coccosteidae -Coccosteus -Coccothraustes -coccothraustine -Coccothrinax -coccous -coccule -cocculiferous -Cocculus -coccus -cocentric -coch -Cochabamba -cochair -cochaired -cochairing -cochairman -cochairmanship -cochairmen -cochairs -cochal -cochampion -cochampions -Cochard -Cochecton -cocher -cochero -cochief -cochylis -Cochin -Cochin-China -Cochinchine -cochineal -cochins -Cochise -cochlea -cochleae -cochlear -cochleare -cochleary -Cochlearia -cochlearifoliate -cochleariform -cochleas -cochleate -cochleated -cochleiform -cochleitis -cochleleae -cochleleas -cochleous -cochlidiid -Cochlidiidae -cochliodont -Cochliodontidae -Cochliodus -cochlite -cochlitis -Cochlospermaceae -cochlospermaceous -Cochlospermum -cochon -Cochran -Cochrane -Cochranea -Cochranton -Cochranville -cochromatography -cochurchwarden -cocillana -cocin -cocinera -cocineras -cocinero -cocircular -cocircularity -Cocytean -cocitizen -cocitizenship -Cocytus -Cock -cock-a -cockabondy -cockade -cockaded -cockades -cock-a-doodle -cockadoodledoo -cock-a-doodle-doo -cock-a-doodle--dooed -cock-a-doodle--dooing -cock-a-doodle-doos -cock-a-hoop -cock-a-hooping -cock-a-hoopish -cock-a-hoopness -Cockaigne -Cockayne -cockal -cockalan -cockaleekie -cock-a-leekie -cockalorum -cockamamy -cockamamie -cockamaroo -cock-and-bull -cock-and-bull-story -cockandy -cock-and-pinch -cockapoo -cockapoos -cockard -cockarouse -cock-as-hoop -cockateel -cockatiel -cockatoo -cockatoos -cockatrice -cockatrices -cockawee -cock-awhoop -cock-a-whoop -cockbell -cockbill -cock-bill -cockbilled -cockbilling -cockbills -cockbird -cockboat -cock-boat -cockboats -cockbrain -cock-brain -cock-brained -Cockburn -cockchafer -Cockcroft -cockcrow -cock-crow -cockcrower -cockcrowing -cock-crowing -cockcrows -Cocke -cocked -cockeye -cock-eye -cockeyed -cock-eyed -cockeyedly -cockeyedness -cockeyes -Cockeysville -Cocker -cockered -cockerel -cockerels -cockerie -cockering -cockermeg -cockernony -cockernonnie -cockerouse -cockers -cocket -cocketed -cocketing -cock-feathered -cock-feathering -cockfight -cock-fight -cockfighter -cockfighting -cock-fighting -cockfights -cockhead -cockhorse -cock-horse -cockhorses -cocky -cockie -cockieleekie -cockie-leekie -cockier -cockies -cockiest -cocky-leeky -cockily -cockiness -cockinesses -cocking -cockyolly -cockish -cockishly -cockishness -cock-laird -cockle -cockleboat -cockle-bread -cocklebur -cockled -cockle-headed -cockler -cockles -cockleshell -cockle-shell -cockleshells -cocklet -cocklewife -cockly -cocklight -cocklike -cockling -cockloche -cockloft -cock-loft -cocklofts -cockmaster -cock-master -cockmatch -cock-match -cockmate -Cockney -cockneian -cockneybred -cockneydom -cockneyese -cockneyess -cockneyfy -cockneyfication -cockneyfied -cockneyfying -cockneyish -cockneyishly -cockneyism -cockneyize -cockneyland -cockneylike -cockneys -cockneyship -cockneity -cock-nest -cock-of-the-rock -cockpaddle -cock-paddle -cock-penny -cockpit -cockpits -cockroach -cockroaches -cock-road -Cocks -cockscomb -cock's-comb -cockscombed -cockscombs -cocksfoot -cock's-foot -cockshead -cock's-head -cockshy -cock-shy -cockshies -cockshying -cockshoot -cockshot -cockshut -cock-shut -cockshuts -cocksy -cocks-of-the-rock -cocksparrow -cock-sparrowish -cockspur -cockspurs -cockstone -cock-stride -cocksure -cock-sure -cocksuredom -cocksureism -cocksurely -cocksureness -cocksurety -cockswain -cocktail -cocktailed -cock-tailed -cocktailing -cocktails -cocktail's -cock-throppled -cockthrowing -cockup -cock-up -cockups -cockweed -co-clause -Cocle -coclea -Cocles -Coco -cocoa -cocoa-brown -cocoach -cocoa-colored -cocoanut -cocoanuts -cocoas -cocoawood -cocobola -cocobolas -cocobolo -cocobolos -cocodette -cocoyam -Cocolalla -Cocolamus -COCOM -CoComanchean -cocomat -cocomats -cocomposer -cocomposers -cocona -Coconino -coconnection -coconqueror -coconscious -coconsciously -coconsciousness -coconsecrator -coconspirator -co-conspirator -coconspirators -coconstituent -cocontractor -Coconucan -Coconuco -coconut -coconuts -coconut's -cocoon -cocooned -cocoonery -cocooneries -cocooning -cocoons -cocoon's -cocopan -cocopans -coco-plum -cocorico -cocoroot -Cocos -COCOT -cocotte -cocottes -cocovenantor -cocowood -cocowort -cocozelle -cocreate -cocreated -cocreates -cocreating -cocreator -cocreators -cocreatorship -cocreditor -cocrucify -coct -Cocteau -coctile -coction -coctoantigen -coctoprecipitin -cocuyo -cocuisa -cocuiza -cocullo -cocurator -cocurrent -cocurricular -cocus -cocuswood -COD -coda -codable -Codacci-Pisanelli -codal -codamin -codamine -codas -CODASYL -cod-bait -codbank -CODCF -Codd -codded -codder -codders -coddy -coddy-moddy -Codding -Coddington -coddle -coddled -coddler -coddlers -coddles -coddling -code -codebook -codebooks -codebreak -codebreaker -codebtor -codebtors -CODEC -codeclination -codecree -codecs -coded -Codee -codefendant -co-defendant -codefendants -codeia -codeias -codein -codeina -codeinas -codeine -codeines -codeins -Codel -codeless -codelight -codelinquency -codelinquent -Codell -Coden -codenization -codens -codeposit -coder -coderive -coderived -coderives -coderiving -coders -codes -codescendant -codesign -codesigned -codesigner -codesigners -codesigning -codesigns -codespairer -codetermination -codetermine -codetta -codettas -codette -codevelop -codeveloped -codeveloper -codevelopers -codeveloping -codevelops -codeword -codewords -codeword's -codex -codfish -cod-fish -codfisher -codfishery -codfisheries -codfishes -codfishing -codger -codgers -codhead -codheaded -Codi -Cody -Codiaceae -codiaceous -Codiaeum -Codiales -codical -codices -codicil -codicilic -codicillary -codicils -codicology -codictatorship -Codie -codify -codifiability -codification -codifications -codification's -codified -codifier -codifiers -codifier's -codifies -codifying -codilla -codille -coding -codings -codiniac -codirect -codirected -codirecting -codirectional -codirector -codirectors -codirectorship -codirects -codiscoverer -codiscoverers -codisjunct -codist -Codium -codivine -codlin -codline -codling -codlings -codlins -codlins-and-cream -codman -codo -codol -codomain -codomestication -codominant -codon -codons -Codorus -codpiece -cod-piece -codpieces -codpitchings -codrive -codriven -codriver -co-driver -codrives -codrove -Codrus -cods -codshead -cod-smack -codswallop -codworm -COE -Coeburn -coecal -coecum -coed -co-ed -coedit -coedited -coediting -coeditor -coeditors -coeditorship -coedits -coeds -coeducate -coeducation -co-education -coeducational -coeducationalism -coeducationalize -coeducationally -coeducations -COEES -coef -coeff -coeffect -co-effect -coeffects -coefficacy -co-efficacy -coefficient -coefficiently -coefficients -coefficient's -coeffluent -coeffluential -coehorn -Coeymans -coel- -coelacanth -coelacanthid -Coelacanthidae -coelacanthine -Coelacanthini -coelacanthoid -coelacanthous -coelanaglyphic -coelar -coelarium -Coelastraceae -coelastraceous -Coelastrum -Coelata -coelder -coeldership -coele -Coelebogyne -coelect -coelection -coelector -coelectron -coelelminth -Coelelminthes -coelelminthic -Coelentera -Coelenterata -coelenterate -coelenterates -coelenteric -coelenteron -coelestial -coelestine -coelevate -coelho -coelia -coeliac -coelialgia -coelian -Coelicolae -Coelicolist -coeligenous -coelin -coeline -coelio- -coeliomyalgia -coeliorrhea -coeliorrhoea -coelioscopy -coeliotomy -Coello -coelo- -coeloblastic -coeloblastula -Coelococcus -coelodont -coelogastrula -Coelogyne -Coeloglossum -coelom -coeloma -Coelomata -coelomate -coelomatic -coelomatous -coelome -coelomes -coelomesoblast -coelomic -Coelomocoela -coelomopore -coeloms -coelonavigation -coelongated -coeloplanula -coeloscope -coelosperm -coelospermous -coelostat -coelozoic -coeltera -coemanate -coembedded -coembody -coembodied -coembodies -coembodying -coembrace -coeminency -coemperor -coemploy -coemployed -coemployee -coemploying -coemployment -coemploys -coempt -coempted -coempting -coemptio -coemption -coemptional -coemptionator -coemptive -coemptor -coempts -coen- -coenacle -coenact -coenacted -coenacting -coenactor -coenacts -coenacula -coenaculous -coenaculum -coenaesthesis -coenamor -coenamored -coenamoring -coenamorment -coenamors -coenamourment -coenanthium -coendear -Coendidae -Coendou -coendure -coendured -coendures -coenduring -coenenchym -coenenchyma -coenenchymal -coenenchymata -coenenchymatous -coenenchyme -coenesthesia -coenesthesis -coenflame -coengage -coengager -coenjoy -coenla -coeno -coeno- -coenobe -coenoby -coenobiar -coenobic -coenobiod -coenobioid -coenobite -coenobitic -coenobitical -coenobitism -coenobium -coenoblast -coenoblastic -coenocentrum -coenocyte -coenocytic -coenodioecism -coenoecial -coenoecic -coenoecium -coenogamete -coenogenesis -coenogenetic -coenomonoecism -coenosarc -coenosarcal -coenosarcous -coenosite -coenospecies -coenospecific -coenospecifically -coenosteal -coenosteum -coenotype -coenotypic -coenotrope -coenthrone -coenunuri -coenure -coenures -coenuri -coenurus -coenzymatic -coenzymatically -coenzyme -coenzymes -coequal -coequality -coequalize -coequally -coequalness -coequals -coequate -co-equate -coequated -coequates -coequating -coequation -COER -coerce -coerceable -coerced -coercement -coercend -coercends -coercer -coercers -coerces -coercibility -coercible -coercibleness -coercibly -coercing -coercion -coercionary -coercionist -coercions -coercitive -coercive -coercively -coerciveness -coercivity -Coerebidae -coerect -coerected -coerecting -coerects -coeruleolactite -coes -coesite -coesites -coessential -coessentiality -coessentially -coessentialness -coestablishment -co-establishment -coestate -co-estate -coetanean -coetaneity -coetaneous -coetaneously -coetaneousness -coeternal -coeternally -coeternity -coetus -Coeus -coeval -coevality -coevally -coevalneity -coevalness -coevals -coevolution -coevolutionary -coevolve -coevolved -coevolves -coevolving -coexchangeable -coexclusive -coexecutant -coexecutor -co-executor -coexecutors -coexecutrices -coexecutrix -coexert -coexerted -coexerting -coexertion -coexerts -coexist -co-exist -coexisted -coexistence -coexistences -coexistency -coexistent -coexisting -coexists -coexpand -coexpanded -coexperiencer -coexpire -coexplosion -coextend -coextended -coextending -coextends -coextension -coextensive -coextensively -coextensiveness -coextent -cofactor -cofactors -Cofane -cofaster -cofather -cofathership -cofeature -cofeatures -cofeoffee -co-feoffee -coferment -cofermentation -COFF -Coffea -Coffee -coffee-and -coffeeberry -coffeeberries -coffee-blending -coffee-brown -coffeebush -coffeecake -coffeecakes -coffee-cleaning -coffee-color -coffee-colored -coffeecup -coffee-faced -coffee-grading -coffee-grinding -coffeegrower -coffeegrowing -coffeehouse -coffee-house -coffeehoused -coffeehouses -coffeehousing -coffee-imbibing -coffee-klatsch -coffeeleaf -coffee-making -coffeeman -Coffeen -coffee-planter -coffee-planting -coffee-polishing -coffeepot -coffeepots -coffee-roasting -coffeeroom -coffee-room -coffees -coffee's -coffee-scented -coffeetime -Coffeeville -coffeeweed -coffeewood -Coffey -Coffeyville -Coffeng -coffer -cofferdam -coffer-dam -cofferdams -coffered -cofferer -cofferfish -coffering -cofferlike -coffers -coffer's -cofferwork -coffer-work -coff-fronted -Coffin -coffined -coffin-fashioned -coffing -coffin-headed -coffining -coffinite -coffinless -coffinmaker -coffinmaking -coffins -coffin's -coffin-shaped -coffle -coffled -coffles -coffling -Coffman -coffret -coffrets -coffs -Cofield -cofighter -cofinal -cofinance -cofinanced -cofinances -cofinancing -coforeknown -coformulator -cofound -cofounded -cofounder -cofounders -cofounding -cofoundress -cofounds -cofreighter -Cofsky -coft -cofunction -cog -cog. -Cogan -cogboat -Cogen -cogence -cogences -cogency -cogencies -cogener -cogeneration -cogeneric -cogenial -cogent -cogently -Coggan -cogged -cogger -coggers -coggie -cogging -coggle -coggledy -cogglety -coggly -Coggon -coghle -cogida -cogie -cogit -cogitability -cogitable -cogitabund -cogitabundity -cogitabundly -cogitabundous -cogitant -cogitantly -cogitate -cogitated -cogitates -cogitating -cogitatingly -cogitation -cogitations -cogitative -cogitatively -cogitativeness -cogitativity -cogitator -cogitators -cogito -cogitos -coglorify -coglorious -cogman -cogmen -Cognac -cognacs -cognate -cognately -cognateness -cognates -cognati -cognatic -cognatical -cognation -cognatus -cognisability -cognisable -cognisableness -cognisably -cognisance -cognisant -cognise -cognised -cogniser -cognises -cognising -cognition -cognitional -cognitions -cognitive -cognitively -cognitives -cognitivity -Cognitum -cognizability -cognizable -cognizableness -cognizably -cognizance -cognizances -cognizant -cognize -cognized -cognizee -cognizer -cognizers -cognizes -cognizing -cognizor -cognomen -cognomens -cognomina -cognominal -cognominally -cognominate -cognominated -cognomination -cognosce -cognoscent -cognoscente -cognoscenti -cognoscibility -cognoscible -cognoscing -cognoscitive -cognoscitively -cognovit -cognovits -cogon -cogonal -cogons -cogovernment -cogovernor -cogracious -cograil -cogrediency -cogredient -cogroad -cogs -Cogswell -Cogswellia -coguarantor -coguardian -co-guardian -cogue -cogway -cogways -cogware -cogweel -cogweels -cogwheel -cog-wheel -cogwheels -cogwood -cog-wood -Coh -cohabit -cohabitancy -cohabitant -cohabitate -cohabitation -cohabitations -cohabited -cohabiter -cohabiting -cohabits -Cohagen -Cohan -Cohanim -cohanims -coharmonious -coharmoniously -coharmonize -Cohasset -Cohbath -Cohberg -Cohbert -Cohby -Cohdwell -Cohe -cohead -coheaded -coheading -coheads -coheartedness -coheir -coheiress -coheiresses -coheirs -coheirship -cohelper -cohelpership -Coheman -Cohen -cohenite -Cohens -coherald -cohere -cohered -coherence -coherences -coherency -coherent -coherently -coherer -coherers -coheres -coheretic -cohering -coheritage -coheritor -cohert -cohesibility -cohesible -cohesion -cohesionless -cohesions -cohesive -cohesively -cohesiveness -Cohette -cohibit -cohibition -cohibitive -cohibitor -Cohin -cohitre -Cohl -Cohla -Cohleen -Cohlette -Cohlier -Cohligan -Cohn -coho -cohob -cohoba -cohobate -cohobated -cohobates -cohobating -cohobation -cohobator -Cohoctah -Cohocton -Cohoes -cohog -cohogs -cohol -coholder -coholders -cohomology -Co-hong -cohorn -cohort -cohortation -cohortative -cohorts -cohos -cohosh -cohoshes -cohost -cohosted -cohostess -cohostesses -cohosting -cohosts -cohow -cohue -cohune -cohunes -cohusband -Cohutta -COI -Coy -coyan -Coyanosa -Coibita -coidentity -coydog -coydogs -coyed -coyer -coyest -coif -coifed -coiffe -coiffed -coiffes -coiffeur -coiffeurs -coiffeuse -coiffeuses -coiffing -coiffure -coiffured -coiffures -coiffuring -coifing -coifs -coign -coigne -coigned -coignes -coigny -coigning -coigns -coigue -coying -coyish -coyishness -coil -Coila -coilability -Coyle -coiled -coiler -coilers -coil-filling -coyly -coilyear -coiling -coillen -coils -coilsmith -coil-testing -coil-winding -Coimbatore -Coimbra -coimmense -coimplicant -coimplicate -coimplore -coin -coyn -coinable -coinage -coinages -coincide -coincided -coincidence -coincidences -coincidence's -coincidency -coincident -coincidental -coincidentally -coincidently -coincidents -coincider -coincides -coinciding -coinclination -coincline -coin-clipper -coin-clipping -coinclude -coin-controlled -coincorporate -coin-counting -coindicant -coindicate -coindication -coindwelling -coined -coiner -coiners -coyness -coynesses -coinfeftment -coinfer -coinferred -coinferring -coinfers -coinfinite -co-infinite -coinfinity -coing -coinhabit -co-inhabit -coinhabitant -coinhabitor -coinhere -co-inhere -coinhered -coinherence -coinherent -coinheres -coinhering -coinheritance -coinheritor -co-inheritor -coiny -coynye -coining -coinitial -Coinjock -coin-made -coinmaker -coinmaking -coinmate -coinmates -coin-op -coin-operated -coin-operating -coinquinate -coins -coin-separating -coin-shaped -coinspire -coinstantaneity -coinstantaneous -coinstantaneously -coinstantaneousness -coinsurable -coinsurance -coinsure -coinsured -coinsurer -coinsures -coinsuring -cointense -cointension -cointensity -cointer -cointerest -cointerred -cointerring -cointers -cointersecting -cointise -Cointon -Cointreau -coinvent -coinventor -coinventors -coinvestigator -coinvestigators -coinvolve -coin-weighing -coyo -coyol -Coyolxauhqui -coyos -coyote -coyote-brush -coyote-bush -Coyotero -coyotes -coyote's -coyotillo -coyotillos -coyoting -coypou -coypous -coypu -coypus -coir -Coire -coirs -coys -Coysevox -coislander -coisns -coistrel -coystrel -coistrels -coistril -coistrils -Coit -coital -coitally -coition -coitional -coitions -coitophobia -coiture -coitus -coituses -coyure -Coyville -Coix -cojoin -cojoined -cojoins -cojones -cojudge -cojudices -cojuror -cojusticiar -Cokato -Coke -Cokeburg -coked -Cokedale -cokey -cokelike -cokeman -cokeney -Coker -cokery -cokernut -cokers -coker-sack -cokes -Cokeville -cokewold -coky -cokie -coking -cokneyfy -cokuloris -Col -col- -Col. -COLA -colaborer -co-labourer -colacobioses -colacobiosis -colacobiotic -Colada -colage -colalgia -colament -Colan -colander -colanders -colane -colaphize -Colares -colarin -Colas -colascione -colasciones -colascioni -colat -colate -colation -colatitude -co-latitude -colatorium -colature -colauxe -Colaxais -colazione -Colb -colback -Colbaith -Colbert -colberter -colbertine -Colbertism -Colby -Colbye -Colburn -colcannon -Colchester -Colchian -Colchicaceae -colchicia -colchicin -colchicine -Colchicum -Colchis -colchyte -Colcine -Colcord -colcothar -Cold -coldblood -coldblooded -cold-blooded -cold-bloodedly -coldbloodedness -cold-bloodedness -cold-braving -Coldbrook -cold-catching -cold-chisel -cold-chiseled -cold-chiseling -cold-chiselled -cold-chiselling -coldcock -cold-complexioned -cold-cream -cold-draw -cold-drawing -cold-drawn -cold-drew -Colden -cold-engendered -colder -coldest -cold-faced -coldfinch -cold-finch -cold-flow -cold-forge -cold-hammer -cold-hammered -cold-head -coldhearted -cold-hearted -coldheartedly -cold-heartedly -coldheartedness -cold-heartedness -coldish -coldly -cold-natured -coldness -coldnesses -cold-nipped -coldong -cold-pack -cold-patch -cold-pated -cold-press -cold-producing -coldproof -cold-roll -cold-rolled -colds -cold-saw -cold-short -cold-shortness -cold-shoulder -cold-shut -cold-slain -coldslaw -cold-spirited -cold-storage -cold-store -Coldstream -Cold-streamers -cold-swage -cold-sweat -cold-taking -cold-type -coldturkey -Coldwater -cold-water -cold-weld -cold-white -cold-work -cold-working -Cole -colead -coleader -coleads -Colebrook -colecannon -colectomy -colectomies -coled -Coleen -colegatee -colegislator -cole-goose -coley -Coleman -colemanite -colemouse -Colen -colen-bell -Colene -colent -Coleochaetaceae -coleochaetaceous -Coleochaete -Coleophora -Coleophoridae -coleopter -Coleoptera -coleopteral -coleopteran -coleopterist -coleopteroid -coleopterology -coleopterological -coleopteron -coleopterous -coleoptile -coleoptilum -coleopttera -coleorhiza -coleorhizae -Coleosporiaceae -Coleosporium -coleplant -cole-prophet -colera -Colerain -Coleraine -cole-rake -Coleridge -Coleridge-Taylor -Coleridgian -Coles -Colesburg -coleseed -coleseeds -coleslaw -cole-slaw -coleslaws -colessee -co-lessee -colessees -colessor -colessors -cole-staff -Colet -Coleta -coletit -cole-tit -Coletta -Colette -coleur -Coleus -coleuses -Coleville -colewort -coleworts -Colfax -Colfin -colfox -Colgate -coli -coly -coliander -Colias -colyba -colibacillosis -colibacterin -colibert -colibertus -colibri -colic -colical -colichemarde -colicin -colicine -colicines -colicins -colicystitis -colicystopyelitis -colicker -colicky -colicolitis -colicroot -colics -colicweed -colicwort -Colier -Colyer -colies -co-life -coliform -coliforms -Coligni -Coligny -Coliidae -Coliiformes -colilysin -Colima -Colymbidae -colymbiform -colymbion -Colymbriformes -Colymbus -Colin -colinear -colinearity -colinephritis -Colinette -coling -colins -Colinson -Colinus -colyone -colyonic -coliphage -colipyelitis -colipyuria -coliplication -colipuncture -Colis -colisepsis -Coliseum -coliseums -colistin -colistins -colitic -colytic -colitis -colitises -colitoxemia -colyum -colyumist -coliuria -Colius -colk -coll -coll- -coll. -Colla -collab -collabent -collaborate -collaborated -collaborates -collaborateur -collaborating -collaboration -collaborationism -collaborationist -collaborationists -collaborations -collaborative -collaboratively -collaborativeness -collaborator -collaborators -collaborator's -collada -colladas -collage -collaged -collagen -collagenase -collagenic -collagenous -collagens -collages -collagist -Collayer -collapsability -collapsable -collapsar -collapse -collapsed -collapses -collapsibility -collapsible -collapsing -Collar -collarband -collarbird -collarbone -collar-bone -collarbones -collar-bound -collar-cutting -collard -collards -collare -collared -collaret -collarets -collarette -collaring -collarino -collarinos -collarless -collarman -collars -collar-shaping -collar-to-collar -collar-wearing -collat -collat. -collatable -collate -collated -collatee -collateral -collaterality -collateralize -collateralized -collateralizing -collaterally -collateralness -collaterals -collates -collating -collation -collational -collationer -collations -collatitious -collative -collator -collators -collatress -collaud -collaudation -Collbaith -Collbran -colleague -colleagued -colleagues -colleague's -colleagueship -colleaguesmanship -colleaguing -Collect -collectability -collectable -collectables -collectanea -collectarium -collected -collectedly -collectedness -collectibility -collectible -collectibles -collecting -collection -collectional -collectioner -collections -collection's -collective -collectively -collectiveness -collectives -collectivise -collectivism -collectivist -collectivistic -collectivistically -collectivists -collectivity -collectivities -collectivization -collectivize -collectivized -collectivizes -collectivizing -collectivum -collector -collectorate -collectors -collector's -collectorship -collectress -collects -Colleen -colleens -collegatary -college -college-bred -college-preparatory -colleger -collegers -colleges -college's -collegese -collegia -collegial -collegialism -collegiality -collegially -collegian -collegianer -collegians -Collegiant -collegiate -collegiately -collegiateness -collegiation -collegiugia -collegium -collegiums -Colley -Colleyville -Collembola -collembolan -collembole -collembolic -collembolous -Collen -collenchyma -collenchymatic -collenchymatous -collenchyme -collencytal -collencyte -Colleri -Collery -Colleries -collet -colletarium -Collete -colleted -colleter -colleterial -colleterium -Colletes -Colletia -colletic -Colletidae -colletin -colleting -Colletotrichum -collets -colletside -Collette -Collettsville -Colly -collyba -collibert -Collybia -collybist -collicle -colliculate -colliculus -collide -collided -collides -collidin -collidine -colliding -Collie -collied -collielike -Collier -Collyer -colliery -collieries -Colliers -Colliersville -Collierville -collies -collieshangie -colliflower -colliform -Colligan -colligance -colligate -colligated -colligating -colligation -colligative -colligible -collying -collylyria -collimate -collimated -collimates -collimating -collimation -collimator -collimators -Collimore -Collin -collinal -Colline -collinear -collinearity -collinearly -collineate -collineation -colling -collingly -Collingswood -collingual -Collingwood -Collins -collinses -Collinsia -collinsite -Collinsonia -Collinston -Collinsville -Collinwood -colliquable -colliquament -colliquate -colliquation -colliquative -colliquativeness -colliquefaction -collyr -collyria -Collyridian -collyrie -collyrite -collyrium -collyriums -Collis -collision -collisional -collision-proof -collisions -collision's -collisive -Collison -collywest -collyweston -collywobbles -collo- -colloblast -collobrierite -collocal -Collocalia -collocate -collocated -collocates -collocating -collocation -collocationable -collocational -collocations -collocative -collocatory -collochemistry -collochromate -collock -collocution -collocutor -collocutory -Collodi -collodio- -collodiochloride -collodion -collodionization -collodionize -collodiotype -collodium -collogen -collogue -collogued -collogues -colloguing -colloid -colloidal -colloidality -colloidally -colloider -colloidize -colloidochemical -colloids -Collomia -collop -colloped -collophane -collophanite -collophore -collops -Colloq -colloq. -colloque -colloquy -colloquia -colloquial -colloquialism -colloquialisms -colloquialist -colloquiality -colloquialize -colloquializer -colloquially -colloquialness -colloquies -colloquiquia -colloquiquiums -colloquist -colloquium -colloquiums -colloquize -colloquized -colloquizing -colloququia -collossians -collothun -collotype -collotyped -collotypy -collotypic -collotyping -collow -colloxylin -colluctation -collude -colluded -colluder -colluders -colludes -colluding -Collum -collumelliaceous -collun -collunaria -collunarium -collusion -collusions -collusive -collusively -collusiveness -collusory -collut -collution -collutory -collutoria -collutories -collutorium -colluvia -colluvial -colluvies -colluvium -colluviums -Colman -Colmar -colmars -Colmer -Colmesneil -colmose -Coln -colnaria -Colner -Colo -colo- -Colo. -colob -colobi -colobin -colobium -coloboma -Colobus -Colocasia -colocate -colocated -colocates -colocating -colocentesis -Colocephali -colocephalous -colocynth -colocynthin -coloclysis -colocola -colocolic -colocolo -colodyspepsia -coloenteritis -colog -cologarithm -Cologne -cologned -colognes -cologs -colola -cololite -Coloma -colomb -Colomb-Bchar -Colombes -Colombi -Colombia -Colombian -colombians -colombier -colombin -Colombina -Colombo -Colome -colometry -colometric -colometrically -Colon -Colona -colonaded -colonalgia -colonate -colone -colonel -colonelcy -colonelcies -colonel-commandantship -colonels -colonel's -colonelship -colonelships -coloner -colones -colonette -colongitude -coloni -colony -colonial -colonialise -colonialised -colonialising -colonialism -colonialist -colonialistic -colonialists -colonialization -colonialize -colonialized -colonializing -colonially -colonialness -colonials -colonic -colonical -colonics -Colonie -Colonies -colony's -colonisability -colonisable -colonisation -colonisationist -colonise -colonised -coloniser -colonises -colonising -colonist -colonists -colonist's -colonitis -colonizability -colonizable -colonization -colonizationist -colonizations -colonize -colonized -colonizer -colonizers -colonizes -colonizing -colonnade -colonnaded -colonnades -colonnette -colonopathy -colonopexy -colonoscope -colonoscopy -colons -colon's -Colonsay -colonus -colopexy -colopexia -colopexotomy -coloph- -colophan -colophane -colophany -colophene -colophenic -Colophon -colophonate -colophony -Colophonian -colophonic -colophonist -colophonite -colophonium -colophons -coloplication -coloppe -coloproctitis -coloptosis -colopuncture -coloquies -coloquintid -coloquintida -color -Colora -colorability -colorable -colorableness -colorably -Coloradan -coloradans -Colorado -Coloradoan -coloradoite -colorant -colorants -colorate -coloration -colorational -colorationally -colorations -colorative -coloratura -coloraturas -colorature -colorbearer -color-bearer -colorblind -color-blind -colorblindness -colorbreed -colorcast -colorcasted -colorcaster -colorcasting -colorcasts -colorectitis -colorectostomy -colored -coloreds -colorer -colorers -color-fading -colorfast -colorfastness -color-free -colorful -colorfully -colorfulness -color-grinding -colory -colorific -colorifics -colorimeter -colorimetry -colorimetric -colorimetrical -colorimetrically -colorimetrics -colorimetrist -colorin -coloring -colorings -colorism -colorisms -colorist -coloristic -coloristically -colorists -colorization -colorize -colorless -colorlessly -colorlessness -colormaker -colormaking -colorman -color-matching -coloroto -colorrhaphy -colors -color-sensitize -color-testing -colortype -Colorum -color-washed -coloslossi -coloslossuses -coloss -Colossae -colossal -colossality -colossally -colossean -Colosseum -colossi -Colossian -Colossians -colosso -Colossochelys -colossus -colossuses -Colossuswise -colostomy -colostomies -colostral -colostration -colostric -colostrous -colostrum -colotyphoid -colotomy -colotomies -colour -colourability -colourable -colourableness -colourably -colouration -colourational -colourationally -colourative -colour-blind -colour-box -Coloured -colourer -colourers -colourfast -colourful -colourfully -colourfulness -coloury -colourific -colourifics -colouring -colourist -colouristic -colourize -colourless -colourlessly -colourlessness -colourman -colours -colourtype -colous -colove -Colp -colpenchyma -colpeo -colpeurynter -colpeurysis -colpheg -Colpin -colpindach -colpitis -colpitises -colpo- -colpocele -colpocystocele -Colpoda -colpohyperplasia -colpohysterotomy -colpoperineoplasty -colpoperineorrhaphy -colpoplasty -colpoplastic -colpoptosis -colporrhagia -colporrhaphy -colporrhea -colporrhexis -colport -colportage -colporter -colporteur -colporteurs -colposcope -colposcopy -colpostat -colpotomy -colpotomies -colpus -Colquitt -Colrain -cols -Colson -colstaff -Colston -Colstrip -COLT -Coltee -colter -colters -colt-herb -colthood -Coltin -coltish -coltishly -coltishness -coltlike -Colton -coltoria -coltpixy -coltpixie -colt-pixie -Coltrane -colts -colt's -coltsfoot -coltsfoots -coltskin -Coltson -colt's-tail -Coltun -Coltwood -colubaria -Coluber -colubrid -Colubridae -colubrids -colubriform -Colubriformes -Colubriformia -Colubrina -Colubrinae -colubrine -colubroid -colugo -colugos -Colum -Columba -columbaceous -Columbae -Columban -Columbanian -columbary -columbaria -columbaries -columbarium -columbate -columbeia -columbeion -Columbella -Columbia -columbiad -Columbian -Columbiana -Columbiaville -columbic -Columbid -Columbidae -columbier -columbiferous -Columbiformes -columbin -Columbine -Columbyne -columbines -columbite -columbium -columbo -columboid -columbotantalate -columbotitanate -columbous -Columbus -columel -columella -columellae -columellar -columellate -Columellia -Columelliaceae -columelliform -columels -column -columna -columnal -columnar -columnarian -columnarity -columnarized -columnate -columnated -columnates -columnating -columnation -columnea -columned -columner -columniation -columniferous -columniform -columning -columnist -columnistic -columnists -columnization -columnize -columnized -columnizes -columnizing -columns -column's -columnwise -colunar -colure -colures -Colusa -colusite -Colutea -Colver -Colvert -Colville -Colvin -Colwell -Colwen -Colwich -Colwin -Colwyn -colza -colzas -COM -com- -Com. -coma -comacine -comade -comae -Comaetho -comagistracy -comagmatic -comake -comaker -comakers -comakes -comaking -comal -comales -comals -comamie -Coman -comanage -comanagement -comanagements -comanager -comanagers -Comanche -Comanchean -Comanches -comandante -comandantes -comandanti -Comandra -Comaneci -comanic -comarca -comart -co-mart -co-martyr -Comarum -COMAS -comate -co-mate -comates -comatic -comatik -comatiks -comatose -comatosely -comatoseness -comatosity -comatous -comatula -comatulae -comatulid -comb -comb. -combaron -combasou -combat -combatable -combatant -combatants -combatant's -combated -combater -combaters -combating -combative -combatively -combativeness -combativity -combats -combattant -combattants -combatted -combatter -combatting -comb-back -comb-broach -comb-brush -comb-building -Combe -Combe-Capelle -combed -comber -combers -Combes -combfish -combfishes -combflower -comb-footed -comb-grained -comby -combinability -combinable -combinableness -combinably -combinant -combinantive -combinate -combination -combinational -combinations -combination's -combinative -combinator -combinatory -combinatorial -combinatorially -combinatoric -combinatorics -combinators -combinator's -combind -combine -combined -combinedly -combinedness -combinement -combiner -combiners -combines -combing -combings -combining -combite -comble -combless -comblessness -comblike -combmaker -combmaking -combo -comboy -comboloio -combos -comb-out -combre -Combretaceae -combretaceous -Combretum -Combs -comb-shaped -combure -comburendo -comburent -comburgess -comburimeter -comburimetry -comburivorous -combust -combusted -combustibility -combustibilities -combustible -combustibleness -combustibles -combustibly -combusting -combustion -combustions -combustious -combustive -combustively -combustor -combusts -combwise -combwright -comd -COMDEX -comdg -comdg. -comdia -Comdr -Comdr. -Comdt -Comdt. -come -come-all-ye -come-along -come-at-ability -comeatable -come-at-able -come-at-ableness -comeback -come-back -comebacker -comebacks -come-between -come-by-chance -Comecon -Comecrudo -comeddle -comedy -comedia -comedial -comedian -comedians -comedian's -comediant -comedic -comedical -comedically -comedienne -comediennes -comedies -comedietta -comediettas -comediette -comedy's -comedist -comedo -comedones -comedos -comedown -come-down -comedowns -come-hither -come-hithery -comely -comelier -comeliest -comely-featured -comelily -comeliness -comeling -comendite -comenic -Comenius -come-off -come-on -come-out -come-outer -comephorous -Comer -Comerio -comers -comes -comessation -comestible -comestibles -comestion -comet -cometary -cometaria -cometarium -Cometes -cometh -comether -comethers -cometic -cometical -cometlike -cometographer -cometography -cometographical -cometoid -cometology -comets -comet's -cometwise -comeupance -comeuppance -comeuppances -comfy -comfier -comfiest -comfily -comfiness -comfit -comfits -comfiture -Comfort -comfortability -comfortabilities -comfortable -comfortableness -comfortably -comfortation -comfortative -comforted -Comforter -comforters -comfortful -comforting -comfortingly -comfortless -comfortlessly -comfortlessness -comfortress -comfortroot -comforts -Comfrey -comfreys -Comiakin -comic -comical -comicality -comically -comicalness -comices -comic-iambic -comico- -comicocynical -comicocratic -comicodidactic -comicography -comicoprosaic -comicotragedy -comicotragic -comicotragical -comicry -comics -comic's -Comid -comida -comiferous -Comilla -COMINCH -Comines -Cominform -Cominformist -cominformists -coming -coming-forth -comingle -coming-on -comings -comino -Comins -Comyns -Comintern -comique -comism -Comiso -Comitadji -comital -comitant -comitatensian -comitative -comitatus -comite -comites -comity -comitia -comitial -comities -Comitium -comitiva -comitje -comitragedy -comix -coml -COMM -comm. -comma -Commack -commaes -Commager -commaing -command -commandable -commandant -commandants -commandant's -commandatory -commanded -commandedness -commandeer -commandeered -commandeering -commandeers -commander -commandery -commanderies -commanders -commandership -commanding -commandingly -commandingness -commandite -commandless -commandment -commandments -commandment's -commando -commandoes -commandoman -commandos -commandress -commandry -commandrie -commandries -commands -command's -commark -commas -comma's -commassation -commassee -commata -commaterial -commatic -commation -commatism -comme -commeasurable -commeasure -commeasured -commeasuring -commeddle -Commelina -Commelinaceae -commelinaceous -commem -commemorable -commemorate -commemorated -commemorates -commemorating -commemoration -commemorational -commemorations -commemorative -commemoratively -commemorativeness -commemorator -commemoratory -commemorators -commemorize -commemorized -commemorizing -commence -commenceable -commenced -commencement -commencements -commencement's -commencer -commences -commencing -commend -commenda -commendable -commendableness -commendably -commendador -commendam -commendatary -commendation -commendations -commendation's -commendator -commendatory -commendatories -commendatorily -commended -commender -commending -commendingly -commendment -commends -commensal -commensalism -commensalist -commensalistic -commensality -commensally -commensals -commensurability -commensurable -commensurableness -commensurably -commensurate -commensurated -commensurately -commensurateness -commensurating -commensuration -commensurations -comment -commentable -commentary -commentarial -commentarialism -commentaries -commentary's -commentate -commentated -commentating -commentation -commentative -commentator -commentatorial -commentatorially -commentators -commentator's -commentatorship -commented -commenter -commenting -commentitious -comments -Commerce -commerced -commerceless -commercer -commerces -commercia -commerciable -commercial -commercialisation -commercialise -commercialised -commercialising -commercialism -commercialist -commercialistic -commercialists -commerciality -commercialization -commercializations -commercialize -commercialized -commercializes -commercializing -commercially -commercialness -commercials -commercing -commercium -commerge -commers -commesso -commy -commie -commies -commigration -commilitant -comminate -comminated -comminating -commination -comminative -comminator -comminatory -Commines -commingle -commingled -comminglement -commingler -commingles -commingling -comminister -comminuate -comminute -comminuted -comminuting -comminution -comminutor -Commiphora -commis -commisce -commise -commiserable -commiserate -commiserated -commiserates -commiserating -commiseratingly -commiseration -commiserations -commiserative -commiseratively -commiserator -Commiskey -commissar -commissary -commissarial -commissariat -commissariats -commissaries -commissaryship -commissars -commission -commissionaire -commissional -commissionary -commissionate -commissionated -commissionating -commissioned -commissioner -commissioner-general -commissioners -commissionership -commissionerships -commissioning -commissions -commissionship -commissive -commissively -commissoria -commissural -commissure -commissurotomy -commissurotomies -commistion -commit -commitment -commitments -commitment's -commits -committable -committal -committals -committed -committedly -committedness -committee -committeeism -committeeman -committeemen -committees -committee's -committeeship -committeewoman -committeewomen -committent -committer -committible -committing -committitur -committment -committor -commix -commixed -commixes -commixing -commixt -commixtion -commixture -commo -commodata -commodatary -commodate -commodation -commodatum -commode -commoderate -commodes -commodious -commodiously -commodiousness -commoditable -commodity -commodities -commodity's -commodore -commodores -commodore's -Commodus -commoigne -commolition -common -commonable -commonage -commonality -commonalities -commonalty -commonalties -commonance -commoned -commonefaction -commoney -commoner -commoners -commoner's -commonership -commonest -commoning -commonish -commonition -commonize -common-law -commonly -commonness -commonplace -commonplaceism -commonplacely -commonplaceness -commonplacer -commonplaces -common-room -Commons -commonsense -commonsensible -commonsensibly -commonsensical -commonsensically -commonty -common-variety -commonweal -commonweals -Commonwealth -commonwealthism -commonwealths -commorancy -commorancies -commorant -commorient -commorse -commorth -commos -commot -commote -commotion -commotional -commotions -commotive -commove -commoved -commoves -commoving -commulation -commulative -communa -communal -communalisation -communalise -communalised -communaliser -communalising -communalism -communalist -communalistic -communality -communalization -communalize -communalized -communalizer -communalizing -communally -Communard -communbus -Commune -communed -communer -communes -communicability -communicable -communicableness -communicably -communicant -communicants -communicant's -communicate -communicated -communicatee -communicates -communicating -communication -communicational -communications -communicative -communicatively -communicativeness -communicator -communicatory -communicators -communicator's -communing -Communion -communionable -communional -communionist -communions -communiqu -communique -communiques -communis -communisation -communise -communised -communising -communism -Communist -communistery -communisteries -communistic -communistical -communistically -communists -communist's -communital -communitary -communitarian -communitarianism -community -communities -community's -communitive -communitywide -communitorium -communization -communize -communized -communizing -commutability -commutable -commutableness -commutant -commutate -commutated -commutating -commutation -commutations -commutative -commutatively -commutativity -commutator -commutators -commute -commuted -commuter -commuters -commutes -commuting -commutual -commutuality -Comnenian -Comnenus -Como -comodato -comodo -comoedia -comoedus -comoid -comolecule -comonomer -comonte -comoquer -comorado -Comorin -comortgagee -comose -comourn -comourner -comournful -comous -Comox -comp -comp. -compaa -COMPACT -compactability -compactable -compacted -compactedly -compactedness -compacter -compactest -compactible -compactify -compactification -compactile -compacting -compaction -compactions -compactly -compactness -compactnesses -compactor -compactors -compactor's -compacts -compacture -compadre -compadres -compage -compages -compaginate -compagination -Compagnie -compagnies -companable -companage -companator -compander -companero -companeros -company -compania -companiable -companias -companied -companies -companying -companyless -companion -companionability -companionable -companionableness -companionably -companionage -companionate -companioned -companioning -companionize -companionized -companionizing -companionless -companions -companion's -companionship -companionships -companionway -companionways -company's -compar -compar. -comparability -comparable -comparableness -comparably -comparascope -comparate -comparatist -comparatival -comparative -comparatively -comparativeness -comparatives -comparativist -comparator -comparators -comparator's -comparcioner -compare -compared -comparer -comparers -compares -comparing -comparison -comparisons -comparison's -comparition -comparograph -comparsa -compart -comparted -compartimenti -compartimento -comparting -compartition -compartment -compartmental -compartmentalization -compartmentalize -compartmentalized -compartmentalizes -compartmentalizing -compartmentally -compartmentation -compartmented -compartmentize -compartments -compartner -comparts -compass -compassability -compassable -compassed -compasser -Compasses -compass-headed -compassing -compassion -compassionable -compassionate -compassionated -compassionately -compassionateness -compassionating -compassionless -compassions -compassive -compassivity -compassless -compassment -compatability -compatable -compaternity -compathy -compatibility -compatibilities -compatibility's -compatible -compatibleness -compatibles -compatibly -compatience -compatient -compatriot -compatriotic -compatriotism -compatriots -Compazine -compd -compear -compearance -compearant -comped -compeer -compeered -compeering -compeers -compel -compellability -compellable -compellably -compellation -compellative -compelled -compellent -compeller -compellers -compelling -compellingly -compels -compend -compendency -compendent -compendia -compendiary -compendiate -compendious -compendiously -compendiousness -compendium -compendiums -compends -compenetrate -compenetration -compensability -compensable -compensate -compensated -compensates -compensating -compensatingly -compensation -compensational -compensations -compensative -compensatively -compensativeness -compensator -compensatory -compensators -compense -compenser -compere -compered -comperes -compering -compert -compesce -compester -compete -competed -competence -competences -competency -competencies -competent -competently -competentness -competer -competes -competible -competing -competingly -competition -competitioner -competitions -competition's -competitive -competitively -competitiveness -competitor -competitory -competitors -competitor's -competitorship -competitress -competitrix -Compi -Compiegne -compilable -compilation -compilations -compilation's -compilator -compilatory -compile -compileable -compiled -compilement -compiler -compilers -compiler's -compiles -compiling -comping -compinge -compital -Compitalia -compitum -complacence -complacences -complacency -complacencies -complacent -complacential -complacentially -complacently -complain -complainable -complainant -complainants -complained -complainer -complainers -complaining -complainingly -complainingness -complains -complaint -complaintful -complaintive -complaintiveness -complaints -complaint's -complaisance -complaisant -complaisantly -complaisantness -complanar -complanate -complanation -complant -compleat -compleated -complect -complected -complecting -complection -complects -complement -complemental -complementally -complementalness -complementary -complementaries -complementarily -complementariness -complementarism -complementarity -complementation -complementative -complement-binding -complemented -complementer -complementers -complement-fixing -complementing -complementizer -complementoid -complements -completable -complete -completed -completedness -completely -completement -completeness -completenesses -completer -completers -completes -completest -completing -completion -completions -completive -completively -completory -completories -complex -complexation -complexed -complexedness -complexer -complexes -complexest -complexify -complexification -complexing -complexion -complexionably -complexional -complexionally -complexionary -complexioned -complexionist -complexionless -complexions -complexity -complexities -complexive -complexively -complexly -complexness -complexometry -complexometric -complexus -comply -compliable -compliableness -compliably -compliance -compliances -compliancy -compliancies -compliant -compliantly -complicacy -complicacies -complicant -complicate -complicated -complicatedly -complicatedness -complicates -complicating -complication -complications -complicative -complicator -complicators -complicator's -complice -complices -complicity -complicities -complicitous -complied -complier -compliers -complies -complying -compliment -complimentable -complimental -complimentally -complimentalness -complimentary -complimentarily -complimentariness -complimentarity -complimentation -complimentative -complimented -complimenter -complimenters -complimenting -complimentingly -compliments -complin -compline -complines -complins -complish -complot -complotment -complots -complotted -complotter -complotting -Complutensian -compluvia -compluvium -compo -Compoboard -compoed -compoer -compoing -compole -compone -componed -componency -componendo -component -componental -componented -componential -componentry -components -component's -componentwise -compony -comport -comportable -comportance -comported -comporting -comportment -comportments -comports -compos -composable -composal -Composaline -composant -compose -composed -composedly -composedness -composer -composers -composes -composing -composit -composita -Compositae -composite -composite-built -composited -compositely -compositeness -composites -compositing -composition -compositional -compositionally -compositions -compositive -compositively -compositor -compositorial -compositors -compositous -compositure -composograph -compossibility -compossible -compost -composted -Compostela -composting -composts -composture -composure -compot -compotation -compotationship -compotator -compotatory -compote -compotes -compotier -compotiers -compotor -compound -compoundable -compound-complex -compounded -compoundedness -compounder -compounders -compounding -compoundness -compounds -compound-wound -comprachico -comprachicos -comprador -compradore -comprecation -compreg -compregnate -comprehend -comprehended -comprehender -comprehendible -comprehending -comprehendingly -comprehends -comprehense -comprehensibility -comprehensible -comprehensibleness -comprehensibly -comprehension -comprehensions -comprehensive -comprehensively -comprehensiveness -comprehensivenesses -comprehensives -comprehensor -comprend -compresbyter -compresbyterial -compresence -compresent -compress -compressed -compressedly -compresses -compressibility -compressibilities -compressible -compressibleness -compressibly -compressing -compressingly -compression -compressional -compression-ignition -compressions -compressive -compressively -compressometer -compressor -compressors -compressure -comprest -compriest -comprint -comprisable -comprisal -comprise -comprised -comprises -comprising -comprizable -comprizal -comprize -comprized -comprizes -comprizing -comprobate -comprobation -comproduce -compromis -compromisable -compromise -compromised -compromiser -compromisers -compromises -compromising -compromisingly -compromissary -compromission -compromissorial -compromit -compromitment -compromitted -compromitting -comprovincial -comps -Compsilura -Compsoa -Compsognathus -Compsothlypidae -compt -Comptche -Compte -Comptean -compted -COMPTEL -compter -comptible -comptie -compting -comptly -comptness -comptoir -Comptom -Comptometer -Compton -Compton-Burnett -Comptonia -comptonite -comptrol -comptroller -comptrollers -comptroller's -comptrollership -compts -compulsative -compulsatively -compulsatory -compulsatorily -compulse -compulsed -compulsion -compulsions -compulsion's -compulsitor -compulsive -compulsively -compulsiveness -compulsives -compulsivity -compulsory -compulsorily -compulsoriness -compunct -compunction -compunctionary -compunctionless -compunctions -compunctious -compunctiously -compunctive -compupil -compurgation -compurgator -compurgatory -compurgatorial -compursion -computability -computable -computably -computate -computation -computational -computationally -computations -computation's -computative -computatively -computativeness -compute -computed -computer -computerese -computerise -computerite -computerizable -computerization -computerize -computerized -computerizes -computerizing -computerlike -computernik -computers -computer's -computes -computing -computist -computus -Comr -Comr. -comrade -comrade-in-arms -comradely -comradeliness -comradery -comrades -comradeship -comradeships -comrado -Comras -comrogue -COMS -COMSAT -comsymp -comsymps -Comsomol -Comstock -comstockery -comstockeries -Comte -comtemplate -comtemplated -comtemplates -comtemplating -comtes -Comtesse -comtesses -Comtian -Comtism -Comtist -comunidad -comurmurer -Comus -comvia -Con -con- -Con. -conable -conacaste -conacre -Conah -Conakry -Conal -conalbumin -Conall -conamarin -conamed -Conan -conand -Conant -Conard -conarial -conario- -conarium -Conasauga -conation -conational -conationalistic -conations -conative -conatural -conatus -Conaway -conaxial -conbinas -conc -conc. -concactenated -concamerate -concamerated -concameration -Concan -concanavalin -concannon -concaptive -concarnation -Concarneau -concassation -concatenary -concatenate -concatenated -concatenates -concatenating -concatenation -concatenations -concatenator -concatervate -concaulescence -concausal -concause -concavation -concave -concaved -concavely -concaveness -concaver -concaves -concaving -concavity -concavities -concavo -concavo- -concavo-concave -concavo-convex -conceal -concealable -concealed -concealedly -concealedness -concealer -concealers -concealing -concealingly -concealment -concealments -conceals -concede -conceded -concededly -conceder -conceders -concedes -conceding -conceit -conceited -conceitedly -conceitedness -conceity -conceiting -conceitless -conceits -conceivability -conceivable -conceivableness -conceivably -conceive -conceived -conceiver -conceivers -conceives -conceiving -concelebrate -concelebrated -concelebrates -concelebrating -concelebration -concelebrations -concent -concenter -concentered -concentering -concentive -concento -concentralization -concentralize -concentrate -concentrated -concentrates -concentrating -concentration -concentrations -concentrative -concentrativeness -concentrator -concentrators -concentre -concentred -concentric -concentrical -concentrically -concentricate -concentricity -concentring -concents -concentual -concentus -Concepci -Concepcion -concept -conceptacle -conceptacular -conceptaculum -conceptible -conception -conceptional -conceptionist -conceptions -conception's -conceptism -conceptive -conceptiveness -concepts -concept's -conceptual -conceptualisation -conceptualise -conceptualised -conceptualising -conceptualism -conceptualist -conceptualistic -conceptualistically -conceptualists -conceptuality -conceptualization -conceptualizations -conceptualization's -conceptualize -conceptualized -conceptualizer -conceptualizes -conceptualizing -conceptually -conceptus -concern -concernancy -concerned -concernedly -concernedness -concerning -concerningly -concerningness -concernment -concerns -concert -concertante -concertantes -concertanti -concertanto -concertati -concertation -concertato -concertatos -concerted -concertedly -concertedness -Concertgebouw -concertgoer -concerti -concertina -concertinas -concerting -concertini -concertinist -concertino -concertinos -concertion -concertise -concertised -concertiser -concertising -concertist -concertize -concertized -concertizer -concertizes -concertizing -concertmaster -concertmasters -concertmeister -concertment -concerto -concertos -concerts -concertstck -concertstuck -Concesio -concessible -concession -concessionaire -concessionaires -concessional -concessionary -concessionaries -concessioner -concessionist -concessions -concession's -concessit -concessive -concessively -concessiveness -concessor -concessory -concetti -Concettina -concettism -concettist -concetto -conch -conch- -Concha -conchae -conchal -conchate -conche -conched -concher -conches -conchfish -conchfishes -conchy -conchie -conchies -Conchifera -conchiferous -conchiform -conchyle -conchylia -conchyliated -conchyliferous -conchylium -conchinin -conchinine -conchiolin -Conchita -conchite -conchitic -conchitis -Concho -Conchobar -Conchobor -conchoid -conchoidal -conchoidally -conchoids -conchol -conchology -conchological -conchologically -conchologist -conchologize -conchometer -conchometry -conchospiral -Conchostraca -conchotome -conchs -Conchubar -Conchucu -conchuela -conciator -concyclic -concyclically -concierge -concierges -concile -conciliable -conciliabule -conciliabulum -conciliar -conciliarism -conciliarly -conciliate -conciliated -conciliates -conciliating -conciliatingly -conciliation -conciliationist -conciliations -conciliative -conciliator -conciliatory -conciliatorily -conciliatoriness -conciliators -concilium -concinnate -concinnated -concinnating -concinnity -concinnities -concinnous -concinnously -concio -concion -concional -concionary -concionate -concionator -concionatory -conciousness -concipiency -concipient -concise -concisely -conciseness -concisenesses -conciser -concisest -concision -concitation -concite -concitizen -conclamant -conclamation -conclave -conclaves -conclavist -concludable -conclude -concluded -concludence -concludency -concludendi -concludent -concludently -concluder -concluders -concludes -concludible -concluding -concludingly -conclusible -conclusion -conclusional -conclusionally -conclusions -conclusion's -conclusive -conclusively -conclusiveness -conclusory -conclusum -concn -concoagulate -concoagulation -concoct -concocted -concocter -concocting -concoction -concoctions -concoctive -concoctor -concocts -Concoff -concolor -concolorous -concolour -concomitance -concomitancy -concomitant -concomitantly -concomitants -concomitate -concommitant -concommitantly -conconscious -Conconully -Concord -concordable -concordably -concordal -concordance -concordancer -concordances -concordancy -concordant -concordantial -concordantly -concordat -concordatory -concordats -concordatum -Concorde -concorder -Concordia -concordial -concordist -concordity -concordly -concords -Concordville -concorporate -concorporated -concorporating -concorporation -Concorrezanes -concours -concourse -concourses -concreate -concredit -concremation -concrement -concresce -concrescence -concrescences -concrescent -concrescible -concrescive -concrete -concreted -concretely -concreteness -concreter -concretes -concreting -concretion -concretional -concretionary -concretions -concretism -concretist -concretive -concretively -concretization -concretize -concretized -concretizing -concretor -concrew -concrfsce -concubinage -concubinal -concubinary -concubinarian -concubinaries -concubinate -concubine -concubinehood -concubines -concubitancy -concubitant -concubitous -concubitus -conculcate -conculcation -concumbency -concupy -concupiscence -concupiscent -concupiscible -concupiscibleness -concur -concurbit -concurred -concurrence -concurrences -concurrency -concurrencies -concurrent -concurrently -concurrentness -concurring -concurringly -concurs -concursion -concurso -concursus -concuss -concussant -concussation -concussed -concusses -concussing -concussion -concussional -concussions -concussive -concussively -concutient -Cond -Conda -Condalia -Condamine -Conde -condecent -condemn -condemnable -condemnably -condemnate -condemnation -condemnations -condemnatory -condemned -condemner -condemners -condemning -condemningly -condemnor -condemns -condensability -condensable -condensance -condensary -condensaries -condensate -condensates -condensation -condensational -condensations -condensative -condensator -condense -condensed -condensedly -condensedness -condenser -condensery -condenseries -condensers -condenses -condensible -condensing -condensity -conder -condescend -condescended -condescendence -condescendent -condescender -condescending -condescendingly -condescendingness -condescends -condescension -condescensions -condescensive -condescensively -condescensiveness -condescent -condiction -condictious -condiddle -condiddled -condiddlement -condiddling -condign -condigness -condignity -condignly -condignness -condylar -condylarth -Condylarthra -condylarthrosis -condylarthrous -condyle -condylectomy -condyles -condylion -Condillac -condyloid -condyloma -condylomas -condylomata -condylomatous -condylome -condylopod -Condylopoda -condylopodous -condylos -condylotomy -Condylura -condylure -condiment -condimental -condimentary -condiments -condisciple -condistillation -Condit -condite -condition -conditionable -conditional -conditionalism -conditionalist -conditionality -conditionalities -conditionalize -conditionally -conditionals -conditionate -conditione -conditioned -conditioner -conditioners -conditioning -conditions -condititivia -conditivia -conditivium -conditory -conditoria -conditorium -conditotoria -condivision -condo -condoes -condog -condolatory -condole -condoled -condolement -condolence -condolences -condolent -condoler -condolers -condoles -condoling -condolingly -condom -condominate -condominial -condominiia -condominiiums -condominium -condominiums -condoms -Condon -condonable -condonance -condonation -condonations -condonative -condone -condoned -condonement -condoner -condoners -condones -condoning -condor -Condorcet -condores -condors -condos -condottiere -condottieri -conduce -conduceability -conduced -conducement -conducent -conducer -conducers -conduces -conducible -conducibleness -conducibly -conducing -conducingly -conducive -conduciveness -conduct -conducta -conductance -conductances -conducted -conductibility -conductible -conductility -conductimeter -conductimetric -conducting -conductio -conduction -conductional -conductions -conductitious -conductive -conductively -conductivity -conductivities -conduct-money -conductometer -conductometric -conductor -conductory -conductorial -conductorless -conductors -conductor's -conductorship -conductress -conducts -conductus -condue -conduit -conduits -conduplicate -conduplicated -conduplication -condurangin -condurango -condurrite -cone -cone-billed -coned -coneen -coneflower -Conehatta -conehead -cone-headed -Coney -coneighboring -cone-in-cone -coneine -coneys -Conejos -conelet -conelike -Conelrad -conelrads -conemaker -conemaking -Conemaugh -conenchyma -conenose -cone-nose -conenoses -conepate -conepates -conepatl -conepatls -coner -cones -cone's -cone-shaped -conessine -Conestee -Conestoga -Conesus -Conesville -Conetoe -conf -conf. -confab -confabbed -confabbing -confabs -confabular -confabulate -confabulated -confabulates -confabulating -confabulation -confabulations -confabulator -confabulatory -confact -confarreate -confarreated -confarreation -confated -confect -confected -confecting -confection -confectionary -confectionaries -confectioner -confectionery -confectioneries -confectioners -confectiones -confections -confectory -confects -confecture -Confed -confeder -Confederacy -confederacies -confederal -confederalist -Confederate -confederated -confederater -confederates -confederating -confederatio -Confederation -confederationism -confederationist -confederations -confederatism -confederative -confederatize -confederator -confelicity -confer -conferee -conferees -conference -conferences -conference's -conferencing -conferential -conferment -conferrable -conferral -conferred -conferree -conferrence -conferrer -conferrers -conferrer's -conferring -conferruminate -confers -conferted -Conferva -Confervaceae -confervaceous -confervae -conferval -Confervales -confervalike -confervas -confervoid -Confervoideae -confervous -confess -confessable -confessant -confessary -confessarius -confessed -confessedly -confesser -confesses -confessing -confessingly -confession -confessional -confessionalian -confessionalism -confessionalist -confessionally -confessionals -confessionary -confessionaries -confessionist -confessions -confession's -confessor -confessory -confessors -confessor's -confessorship -confest -confetti -confetto -conficient -confidant -confidante -confidantes -confidants -confidant's -confide -confided -confidence -confidences -confidency -confident -confidente -confidential -confidentiality -confidentially -confidentialness -confidentiary -confidently -confidentness -confider -confiders -confides -confiding -confidingly -confidingness -configurable -configural -configurate -configurated -configurating -configuration -configurational -configurationally -configurationism -configurationist -configurations -configuration's -configurative -configure -configured -configures -configuring -confinable -confine -confineable -confined -confinedly -confinedness -confineless -confinement -confinements -confinement's -confiner -confiners -confines -confining -confinity -confirm -confirmability -confirmable -confirmand -confirmation -confirmational -confirmations -confirmation's -confirmative -confirmatively -confirmatory -confirmatorily -confirmed -confirmedly -confirmedness -confirmee -confirmer -confirming -confirmingly -confirmity -confirmment -confirmor -confirms -confiscable -confiscatable -confiscate -confiscated -confiscates -confiscating -confiscation -confiscations -confiscator -confiscatory -confiscators -confiserie -confisk -confisticating -confit -confitent -Confiteor -confiture -confix -confixed -confixing -conflab -conflagrant -conflagrate -conflagrated -conflagrating -conflagration -conflagrations -conflagrative -conflagrator -conflagratory -conflate -conflated -conflates -conflating -conflation -conflexure -conflict -conflicted -conflictful -conflicting -conflictingly -confliction -conflictive -conflictless -conflictory -conflicts -conflictual -conflow -Confluence -confluences -confluent -confluently -conflux -confluxes -confluxibility -confluxible -confluxibleness -confocal -confocally -conforbably -conform -conformability -conformable -conformableness -conformably -conformal -conformance -conformant -conformate -conformation -conformational -conformationally -conformations -conformator -conformed -conformer -conformers -conforming -conformingly -conformism -conformist -conformists -conformity -conformities -conforms -confort -confound -confoundable -confounded -confoundedly -confoundedness -confounder -confounders -confounding -confoundingly -confoundment -confounds -confr -confract -confraction -confragose -confrater -confraternal -confraternity -confraternities -confraternization -confrere -confreres -confrerie -confriar -confricamenta -confricamentum -confrication -confront -confrontal -confrontation -confrontational -confrontationism -confrontationist -confrontations -confrontation's -confronte -confronted -confronter -confronters -confronting -confrontment -confronts -Confucian -Confucianism -Confucianist -confucians -Confucius -confusability -confusable -confusably -confuse -confused -confusedly -confusedness -confuser -confusers -confuses -confusing -confusingly -confusion -confusional -confusions -confusive -confusticate -confustication -confutability -confutable -confutation -confutations -confutative -confutator -confute -confuted -confuter -confuters -confutes -confuting -Cong -Cong. -conga -congaed -congaing -congas -Congdon -conge -congeable -congeal -congealability -congealable -congealableness -congealed -congealedness -congealer -congealing -congealment -congeals -conged -congee -congeed -congeeing -congees -congeing -congelation -congelative -congelifract -congelifraction -congeliturbate -congeliturbation -congenator -congener -congeneracy -congeneric -congenerical -congenerous -congenerousness -congeners -congenetic -congenial -congeniality -congenialities -congenialize -congenially -congenialness -congenital -congenitally -congenitalness -congenite -congeon -Conger -congeree -conger-eel -congery -congerie -congeries -Congers -Congerville -conges -congession -congest -congested -congestedness -congestible -congesting -congestion -congestions -congestive -congests -congestus -congiary -congiaries -congii -congius -conglaciate -conglobate -conglobated -conglobately -conglobating -conglobation -conglobe -conglobed -conglobes -conglobing -conglobulate -conglomerate -conglomerated -conglomerates -conglomeratic -conglomerating -conglomeration -conglomerations -conglomerative -conglomerator -conglomeritic -conglutin -conglutinant -conglutinate -conglutinated -conglutinating -conglutination -conglutinative -conglution -Congo -congoes -Congoese -Congolese -Congoleum -Congonhas -congoni -congos -congou -congous -congrats -congratulable -congratulant -congratulate -congratulated -congratulates -congratulating -congratulation -congratulational -congratulations -congratulator -congratulatory -congredient -congree -congreet -congregable -congreganist -congregant -congregants -congregate -congregated -congregates -congregating -congregation -congregational -Congregationalism -Congregationalist -congregationalists -congregationalize -congregationally -Congregationer -congregationist -congregations -congregative -congregativeness -congregator -congresional -Congreso -Congress -congressed -congresser -congresses -congressing -congressional -congressionalist -congressionally -congressionist -congressist -congressive -Congressman -congressman-at-large -congressmen -congressmen-at-large -Congresso -congress's -congresswoman -congresswomen -Congreve -congrid -Congridae -congrio -congroid -congrue -congruence -congruences -congruency -congruencies -congruent -congruential -congruently -congruism -congruist -congruistic -congruity -congruities -congruous -congruously -congruousness -congustable -conhydrin -conhydrine -coni -Cony -conia -Coniacian -Coniah -Conias -conic -conical -conicality -conically -conicalness -conical-shaped -cony-catch -conycatcher -conicein -coniceine -conichalcite -conicine -conicity -conicities -conicle -conico- -conico-cylindrical -conico-elongate -conico-hemispherical -conicoid -conico-ovate -conico-ovoid -conicopoly -conico-subhemispherical -conico-subulate -conics -Conidae -conidia -conidial -conidian -conidiiferous -conidioid -conidiophore -conidiophorous -conidiospore -conidium -Conyers -conies -conifer -Coniferae -coniferin -coniferophyte -coniferous -conifers -conification -coniform -conyger -coniine -coniines -conylene -Conilurus -conima -conimene -conin -conine -conines -coning -conynge -Conyngham -coninidia -conins -Coniogramme -coniology -coniomycetes -Coniophora -Coniopterygidae -Conioselinum -conioses -coniosis -coniospermous -Coniothyrium -conyrin -conyrine -coniroster -conirostral -Conirostres -conisance -conite -Conium -coniums -conyza -conj -conj. -conject -conjective -conjecturable -conjecturableness -conjecturably -conjectural -conjecturalist -conjecturality -conjecturally -conjecture -conjectured -conjecturer -conjectures -conjecturing -conjee -conjegates -conjobble -conjoin -conjoined -conjoinedly -conjoiner -conjoining -conjoins -conjoint -conjointly -conjointment -conjointness -conjoints -conjon -conjubilant -conjuctiva -conjugable -conjugably -conjugacy -conjugal -Conjugales -conjugality -conjugally -conjugant -conjugata -Conjugatae -conjugate -conjugated -conjugately -conjugateness -conjugates -conjugating -conjugation -conjugational -conjugationally -conjugations -conjugative -conjugato- -conjugato-palmate -conjugato-pinnate -conjugator -conjugators -conjugial -conjugium -conjunct -conjuncted -conjunction -conjunctional -conjunctionally -conjunction-reduction -conjunctions -conjunction's -conjunctiva -conjunctivae -conjunctival -conjunctivas -conjunctive -conjunctively -conjunctiveness -conjunctives -conjunctivitis -conjunctly -conjuncts -conjunctur -conjunctural -conjuncture -conjunctures -conjuration -conjurations -conjurator -conjure -conjured -conjurement -conjurer -conjurers -conjurership -conjures -conjury -conjuring -conjurison -conjuror -conjurors -conk -conkanee -conked -conker -conkers -conky -conking -Conklin -conks -Conlan -Conlee -Conley -Conlen -conli -Conlin -Conlon -CONN -Conn. -connach -Connacht -connaisseur -Connally -Connaraceae -connaraceous -connarite -Connarus -connascency -connascent -connatal -connate -connately -connateness -connate-perfoliate -connation -connatural -connaturality -connaturalize -connaturally -connaturalness -connature -Connaught -Conneaut -Conneautville -connect -connectable -connectant -connected -connectedly -connectedness -connecter -connecters -connectibility -connectible -connectibly -Connecticut -connecting -connection -connectional -connectionism -connectionless -connections -connection's -connectival -connective -connectively -connectives -connective's -connectivity -connector -connectors -connector's -connects -conned -Connee -Conney -Connel -Connell -Connelley -Connelly -connellite -Connellsville -Connemara -Conner -Conners -Connersville -Connerville -Connett -connex -connexes -connexion -connexional -connexionalism -connexity -connexities -connexiva -connexive -connexivum -connexure -connexus -Conni -Conny -Connie -connies -conning -conniption -conniptions -connivance -connivances -connivancy -connivant -connivantly -connive -connived -connivence -connivent -connivently -conniver -connivery -connivers -connives -conniving -connivingly -connixation -Connochaetes -connoissance -connoisseur -connoisseurs -connoisseur's -connoisseurship -Connolly -Connor -Connors -connotate -connotation -connotational -connotations -connotative -connotatively -connote -connoted -connotes -connoting -connotive -connotively -conns -connu -connubial -connubialism -connubiality -connubially -connubiate -connubium -connumerate -connumeration -connusable -conocarp -Conocarpus -Conocephalum -Conocephalus -conoclinium -conocuneus -conodont -conodonts -Conoy -conoid -conoidal -conoidally -conoidic -conoidical -conoidically -conoido-hemispherical -conoido-rotundate -conoids -Conolophus -conominee -co-nominee -Conon -cononintelligent -Conopholis -conopid -Conopidae -conoplain -conopodium -Conopophaga -Conopophagidae -Conor -Conorhinus -conormal -conoscente -conoscenti -conoscope -conoscopic -conourish -Conover -Conowingo -conphaseolin -conplane -conquassate -conquedle -conquer -conquerable -conquerableness -conquered -conquerer -conquerers -conqueress -conquering -conqueringly -conquerment -Conqueror -conquerors -conqueror's -conquers -Conquest -conquests -conquest's -conquian -conquians -conquinamine -conquinine -conquisition -conquistador -conquistadores -conquistadors -Conrad -Conrade -Conrado -Conrail -Conral -Conran -Conrath -conrector -conrectorship -conred -conrey -Conringia -Conroe -Conroy -CONS -Cons. -consacre -Consalve -consanguine -consanguineal -consanguinean -consanguineous -consanguineously -consanguinity -consanguinities -consarcinate -consarn -consarned -conscience -conscienceless -consciencelessly -consciencelessness -conscience-proof -consciences -conscience's -conscience-smitten -conscience-stricken -conscience-striken -consciencewise -conscient -conscientious -conscientiously -conscientiousness -conscionable -conscionableness -conscionably -conscious -consciously -consciousness -consciousnesses -consciousness-expanding -consciousness-expansion -conscive -conscribe -conscribed -conscribing -conscript -conscripted -conscripting -conscription -conscriptional -conscriptionist -conscriptions -conscriptive -conscripts -conscripttion -consderations -consecrate -consecrated -consecratedness -consecrater -consecrates -consecrating -Consecration -consecrations -consecrative -consecrator -consecratory -consectary -consecute -consecution -consecutive -consecutively -consecutiveness -consecutives -consence -consenescence -consenescency -consension -consensual -consensually -consensus -consensuses -consent -consentable -consentaneity -consentaneous -consentaneously -consentaneousness -consentant -consented -consenter -consenters -consentful -consentfully -consentience -consentient -consentiently -consenting -consentingly -consentingness -consentive -consentively -consentment -consents -consequence -consequences -consequence's -consequency -consequent -consequential -consequentiality -consequentialities -consequentially -consequentialness -consequently -consequents -consertal -consertion -conservable -conservacy -conservancy -conservancies -conservant -conservate -conservation -conservational -conservationism -conservationist -conservationists -conservationist's -conservations -conservation's -Conservatism -conservatisms -conservatist -Conservative -conservatively -conservativeness -conservatives -conservatize -conservatoire -conservatoires -conservator -conservatory -conservatorial -conservatories -conservatorio -conservatorium -conservators -conservatorship -conservatrix -conserve -conserved -conserver -conservers -conserves -conserving -Consett -Conshohocken -consy -consider -considerability -considerable -considerableness -considerably -considerance -considerate -considerately -considerateness -consideratenesses -consideration -considerations -considerative -consideratively -considerativeness -considerator -considered -considerer -considering -consideringly -considers -consign -consignable -consignatary -consignataries -consignation -consignatory -consigne -consigned -consignee -consignees -consigneeship -consigner -consignify -consignificant -consignificate -consignification -consignificative -consignificator -consignified -consignifying -consigning -consignment -consignments -consignor -consignors -consigns -consiliary -consilience -consilient -consimilar -consimilarity -consimilate -consimilated -consimilating -consimile -consisently -consist -consisted -consistence -consistences -consistency -consistencies -consistent -consistently -consistible -consisting -consistory -consistorial -consistorian -consistories -consists -consition -consitutional -consociate -consociated -consociating -consociation -consociational -consociationism -consociative -consocies -consol -consolable -consolableness -consolably -Consolamentum -consolan -Consolata -consolate -consolation -consolations -consolation's -Consolato -consolator -consolatory -consolatorily -consolatoriness -consolatrix -console -consoled -consolement -consoler -consolers -consoles -consolette -consolidant -consolidate -consolidated -consolidates -consolidating -consolidation -consolidationist -consolidations -consolidative -consolidator -consolidators -consoling -consolingly -consolitorily -consolitoriness -consols -consolute -consomm -consomme -consommes -consonance -consonances -consonancy -consonant -consonantal -consonantalize -consonantalized -consonantalizing -consonantally -consonantic -consonantise -consonantised -consonantising -consonantism -consonantize -consonantized -consonantizing -consonantly -consonantness -consonants -consonant's -consonate -consonous -consopite -consort -consortable -consorted -consorter -consortia -consortial -consorting -consortion -consortism -consortitia -consortium -consortiums -consorts -consortship -consoude -consound -conspecies -conspecific -conspecifics -conspect -conspection -conspectuity -conspectus -conspectuses -consperg -consperse -conspersion -conspicuity -conspicuous -conspicuously -conspicuousness -conspiracy -conspiracies -conspiracy's -conspirant -conspiration -conspirational -conspirative -conspirator -conspiratory -conspiratorial -conspiratorially -conspirators -conspirator's -conspiratress -conspire -conspired -conspirer -conspirers -conspires -conspiring -conspiringly -conspissate -conspue -conspurcate -Const -Constable -constablery -constables -constable's -constableship -constabless -Constableville -constablewick -constabular -constabulary -constabularies -Constance -constances -Constancy -Constancia -constancies -Constant -Constanta -constantan -Constantia -Constantin -Constantina -Constantine -Constantinian -Constantino -Constantinople -Constantinopolitan -constantly -constantness -constants -constat -constatation -constatations -constate -constative -constatory -constellate -constellated -constellating -constellation -constellations -constellation's -constellatory -conster -consternate -consternated -consternating -consternation -consternations -constipate -constipated -constipates -constipating -constipation -constipations -constituency -constituencies -constituency's -constituent -constituently -constituents -constituent's -constitute -constituted -constituter -constitutes -constituting -constitution -constitutional -constitutionalism -constitutionalist -constitutionality -constitutionalization -constitutionalize -constitutionally -constitutionals -constitutionary -constitutioner -constitutionist -constitutionless -constitutions -constitutive -constitutively -constitutiveness -constitutor -constr -constr. -constrain -constrainable -constrained -constrainedly -constrainedness -constrainer -constrainers -constraining -constrainingly -constrainment -constrains -constraint -constraints -constraint's -constrict -constricted -constricting -constriction -constrictions -constrictive -constrictor -constrictors -constricts -constringe -constringed -constringency -constringent -constringing -construability -construable -construal -construct -constructable -constructed -constructer -constructibility -constructible -constructing -construction -constructional -constructionally -constructionism -constructionist -constructionists -constructions -construction's -constructive -constructively -constructiveness -Constructivism -Constructivist -constructor -constructors -constructor's -constructorship -constructs -constructure -construe -construed -construer -construers -construes -construing -constuctor -constuprate -constupration -consubsist -consubsistency -consubstantial -consubstantialism -consubstantialist -consubstantiality -consubstantially -consubstantiate -consubstantiated -consubstantiating -consubstantiation -consubstantiationist -consubstantive -Consuela -Consuelo -consuete -consuetitude -consuetude -consuetudinal -consuetudinary -consul -consulage -consular -consulary -consularity -consulate -consulated -consulates -consulate's -consulating -consuls -consul's -consulship -consulships -consult -consulta -consultable -consultancy -consultant -consultants -consultant's -consultantship -consultary -consultation -consultations -consultation's -consultative -consultatively -consultatory -consulted -consultee -consulter -consulting -consultive -consultively -consulto -consultor -consultory -consults -consumable -consumables -consumate -consumated -consumating -consumation -consume -consumed -consumedly -consumeless -consumer -consumerism -consumerist -consumers -consumer's -consumership -consumes -consuming -consumingly -consumingness -consummate -consummated -consummately -consummates -consummating -consummation -consummations -consummative -consummatively -consummativeness -consummator -consummatory -consumo -consumpt -consumpted -consumptible -consumption -consumptional -consumptions -consumption's -consumptive -consumptively -consumptiveness -consumptives -consumptivity -Consus -consute -Cont -cont. -contabescence -contabescent -CONTAC -contact -contactant -contacted -contactile -contacting -contaction -contactor -contacts -contactual -contactually -contadino -contaggia -contagia -contagion -contagioned -contagionist -contagions -contagiosity -contagious -contagiously -contagiousness -contagium -contain -containable -contained -containedly -container -containerboard -containerization -containerize -containerized -containerizes -containerizing -containerport -containers -containership -containerships -containing -containment -containments -containment's -contains -contakia -contakion -contakionkia -contam -contaminable -contaminant -contaminants -contaminate -contaminated -contaminates -contaminating -contamination -contaminations -contaminative -contaminator -contaminous -contangential -contango -contangoes -contangos -contchar -contd -contd. -Conte -conteck -conte-crayon -contect -contection -contek -conteke -contemn -contemned -contemner -contemnible -contemnibly -contemning -contemningly -contemnor -contemns -contemp -contemp. -contemper -contemperate -contemperature -contemplable -contemplamen -contemplance -contemplant -contemplate -contemplated -contemplatedly -contemplates -contemplating -contemplatingly -contemplation -contemplations -contemplatist -contemplative -contemplatively -contemplativeness -contemplator -contemplators -contemplature -contemple -contemporanean -contemporaneity -contemporaneous -contemporaneously -contemporaneousness -contemporary -contemporaries -contemporarily -contemporariness -contemporise -contemporised -contemporising -contemporize -contemporized -contemporizing -contempt -contemptful -contemptibility -contemptible -contemptibleness -contemptibly -contempts -contemptuous -contemptuously -contemptuousness -contend -contended -contendent -contender -contendere -contenders -contending -contendingly -contendress -contends -contenement -content -contentable -contentation -contented -contentedly -contentedness -contentednesses -contentful -contenting -contention -contentional -contentions -contention's -contentious -contentiously -contentiousness -contentless -contently -contentment -contentments -contentness -contents -contenu -conter -conterminable -conterminal -conterminant -conterminate -contermine -conterminous -conterminously -conterminousness -conterraneous -contes -contessa -contesseration -contest -contestability -contestable -contestableness -contestably -contestant -contestants -contestate -contestation -contested -contestee -contester -contesters -contesting -contestingly -contestless -contests -conteur -contex -context -contextive -contexts -context's -contextual -contextualize -contextually -contextural -contexture -contextured -contg -Conti -conticent -contignate -contignation -contiguate -contiguity -contiguities -contiguous -contiguously -contiguousness -contin -continence -continences -continency -Continent -Continental -Continentaler -continentalism -continentalist -continentality -Continentalize -continentally -continentals -continently -continents -continent's -continent-wide -contineu -contingence -contingency -contingencies -contingency's -contingent -contingential -contingentialness -contingentiam -contingently -contingentness -contingents -contingent's -continua -continuable -continual -continuality -continually -continualness -continuance -continuances -continuance's -continuancy -continuando -continuant -continuantly -continuate -continuately -continuateness -continuation -continuations -continuation's -continuative -continuatively -continuativeness -continuator -continue -continued -continuedly -continuedness -continuer -continuers -continues -continuing -continuingly -continuist -continuity -continuities -continuo -continuos -continuous -continuousity -continuousities -continuously -continuousness -continuua -continuum -continuums -contise -contline -cont-line -conto -contoid -contoise -Contoocook -contorniate -contorniates -contorno -contorsion -contorsive -contort -contorta -Contortae -contorted -contortedly -contortedness -contorting -contortion -contortional -contortionate -contortioned -contortionist -contortionistic -contortionists -contortions -contortive -contortively -contorts -contortuplicate -contos -contour -contoured -contouring -contourne -contours -contour's -contr -contr. -contra -contra- -contra-acting -contra-approach -contraband -contrabandage -contrabandery -contrabandism -contrabandist -contrabandista -contrabands -contrabass -contrabassist -contrabasso -contrabassoon -contrabassoonist -contracapitalist -contraception -contraceptionist -contraceptions -contraceptive -contraceptives -contracyclical -contracivil -contraclockwise -contract -contractable -contractant -contractation -contracted -contractedly -contractedness -contractee -contracter -contractibility -contractible -contractibleness -contractibly -contractile -contractility -contracting -contraction -contractional -contractionist -contractions -contraction's -contractive -contractively -contractiveness -contractly -contractor -contractors -contractor's -contracts -contractu -contractual -contractually -contracture -contractured -contractus -contrada -contradance -contra-dance -contrade -contradebt -contradict -contradictable -contradicted -contradictedness -contradicter -contradicting -contradiction -contradictional -contradictions -contradiction's -contradictious -contradictiously -contradictiousness -contradictive -contradictively -contradictiveness -contradictor -contradictory -contradictories -contradictorily -contradictoriness -contradicts -contradiscriminate -contradistinct -contradistinction -contradistinctions -contradistinctive -contradistinctively -contradistinctly -contradistinguish -contradivide -contrafacture -contrafagotto -contrafissura -contrafissure -contraflexure -contraflow -contrafocal -contragredience -contragredient -contrahent -contrayerva -contrail -contrails -contraindicant -contra-indicant -contraindicate -contra-indicate -contraindicated -contraindicates -contraindicating -contraindication -contra-indication -contraindications -contraindicative -contra-ion -contrair -contraire -contralateral -contra-lode -contralti -contralto -contraltos -contramarque -contramure -contranatural -contrantiscion -contraoctave -contraorbital -contraorbitally -contraparallelogram -contrapletal -contraplete -contraplex -contrapolarization -contrapone -contraponend -Contraposaune -contrapose -contraposed -contraposing -contraposit -contraposita -contraposition -contrapositive -contrapositives -contrapposto -contrappostos -contraprogressist -contraprop -contraproposal -contraprops -contraprovectant -contraption -contraptions -contraption's -contraptious -contrapuntal -contrapuntalist -contrapuntally -contrapuntist -contrapunto -contrarational -contraregular -contraregularity -contra-related -contraremonstrance -contraremonstrant -contra-remonstrant -contrarevolutionary -contrary -contrariant -contrariantly -contraries -contrariety -contrarieties -contrarily -contrary-minded -contrariness -contrarious -contrariously -contrariousness -contrariwise -contrarotation -contra-rotation -contras -contrascriptural -contrast -contrastable -contrastably -contraste -contrasted -contrastedly -contraster -contrasters -contrasty -contrastimulant -contrastimulation -contrastimulus -contrasting -contrastingly -contrastive -contrastively -contrastiveness -contrastment -contrasts -contrasuggestible -contratabular -contrate -contratempo -contratenor -contratulations -contravalence -contravallation -contravariant -contravene -contravened -contravener -contravenes -contravening -contravention -contraversion -contravindicate -contravindication -contrawise -contre- -contrecoup -contrectation -contre-dance -contredanse -contredanses -contreface -contrefort -contrepartie -contre-partie -contretemps -contrib -contrib. -contributable -contributary -contribute -contributed -contributes -contributing -contribution -contributional -contributions -contributive -contributively -contributiveness -contributor -contributory -contributorial -contributories -contributorily -contributors -contributor's -contributorship -contrist -contrite -contritely -contriteness -contrition -contritions -contriturate -contrivable -contrivance -contrivances -contrivance's -contrivancy -contrive -contrived -contrivedly -contrivement -contriver -contrivers -contrives -contriving -control -controled -controling -controllability -controllable -controllableness -controllable-pitch -controllably -controlled -controller -controllers -controller's -controllership -controlless -controlling -controllingly -controlment -controls -control's -controversal -controverse -controversed -controversy -controversial -controversialism -controversialist -controversialists -controversialize -controversially -controversies -controversion -controversional -controversionalism -controversionalist -controversy's -controvert -controverted -controverter -controvertibility -controvertible -controvertibly -controverting -controvertist -controverts -contrude -conttinua -contubernal -contubernial -contubernium -contumaceous -contumacy -contumacies -contumacious -contumaciously -contumaciousness -contumacity -contumacities -contumax -contumely -contumelies -contumelious -contumeliously -contumeliousness -contund -contune -conturb -conturbation -contuse -contused -contuses -contusing -contusion -contusioned -contusions -contusive -conubium -Conularia -conule -conumerary -conumerous -conundrum -conundrumize -conundrums -conundrum's -conurbation -conurbations -conure -Conuropsis -Conurus -CONUS -conusable -conusance -conusant -conusee -conuses -conusor -conutrition -conuzee -conuzor -conv -Convair -convalesce -convalesced -convalescence -convalescences -convalescency -convalescent -convalescently -convalescents -convalesces -convalescing -convallamarin -Convallaria -Convallariaceae -convallariaceous -convallarin -convally -convect -convected -convecting -convection -convectional -convections -convective -convectively -convector -convects -convey -conveyability -conveyable -conveyal -conveyance -conveyancer -conveyances -conveyance's -conveyancing -conveyed -conveyer -conveyers -conveying -conveyor -conveyorization -conveyorize -conveyorized -conveyorizer -conveyorizing -conveyors -conveys -convell -convenable -convenably -convenance -convenances -convene -convened -convenee -convener -convenery -conveneries -conveners -convenership -convenes -convenience -convenienced -conveniences -convenience's -conveniency -conveniencies -conveniens -convenient -conveniently -convenientness -convening -convenor -convent -convented -conventical -conventically -conventicle -conventicler -conventicles -conventicular -conventing -convention -conventional -conventionalisation -conventionalise -conventionalised -conventionalising -conventionalism -conventionalist -conventionality -conventionalities -conventionalization -conventionalize -conventionalized -conventionalizes -conventionalizing -conventionally -conventionary -conventioneer -conventioneers -conventioner -conventionism -conventionist -conventionize -conventions -convention's -convento -convents -convent's -Conventual -conventually -converge -converged -convergement -convergence -convergences -convergency -convergencies -convergent -convergently -converges -convergescence -converginerved -converging -Convery -conversable -conversableness -conversably -conversance -conversancy -conversant -conversantly -conversation -conversationable -conversational -conversationalism -conversationalist -conversationalists -conversationally -conversationism -conversationist -conversationize -conversations -conversation's -conversative -conversazione -conversaziones -conversazioni -Converse -conversed -conversely -converser -converses -conversi -conversibility -conversible -conversing -conversion -conversional -conversionary -conversionism -conversionist -conversions -conversive -converso -conversus -conversusi -convert -convertable -convertaplane -converted -convertend -converter -converters -convertibility -convertible -convertibleness -convertibles -convertibly -converting -convertingness -convertiplane -convertise -convertism -convertite -convertive -convertoplane -convertor -convertors -converts -conveth -convex -convex-concave -convexed -convexedly -convexedness -convexes -convexity -convexities -convexly -convexness -convexo -convexo- -convexoconcave -convexo-concave -convexo-convex -convexo-plane -conviciate -convicinity -convict -convictable -convicted -convictfish -convictfishes -convictible -convicting -conviction -convictional -convictions -conviction's -convictism -convictive -convictively -convictiveness -convictment -convictor -convicts -convince -convinced -convincedly -convincedness -convincement -convincer -convincers -convinces -convincibility -convincible -convincing -convincingly -convincingness -convite -convito -convival -convive -convives -convivial -convivialist -conviviality -convivialities -convivialize -convivially -convivio -convocant -convocate -convocated -convocating -convocation -convocational -convocationally -convocationist -convocations -convocative -convocator -convoy -convoyed -convoying -convoys -convoke -convoked -convoker -convokers -convokes -convoking -Convoluta -convolute -convoluted -convolutedly -convolutedness -convolutely -convoluting -convolution -convolutional -convolutionary -convolutions -convolutive -convolve -convolved -convolvement -convolves -convolving -Convolvulaceae -convolvulaceous -convolvulad -convolvuli -convolvulic -convolvulin -convolvulinic -convolvulinolic -Convolvulus -convolvuluses -convulsant -convulse -convulsed -convulsedly -convulses -convulsibility -convulsible -convulsing -convulsion -convulsional -convulsionary -convulsionaries -convulsionism -convulsionist -convulsions -convulsion's -convulsive -convulsively -convulsiveness -Conway -COO -cooba -coobah -co-obligant -co-oblige -co-obligor -cooboo -cooboos -co-occupant -co-occupy -co-occurrence -cooch -cooches -coocoo -coo-coo -coodle -Cooe -cooed -cooee -cooeed -cooeeing -cooees -cooey -cooeyed -cooeying -cooeys -cooer -cooers -coof -coofs -cooghneiorvlt -Coohee -cooing -cooingly -cooja -Cook -cookable -cookbook -cookbooks -cookdom -Cooke -cooked -cooked-up -cookee -cookey -cookeys -cookeite -cooker -cookery -cookeries -cookers -Cookeville -cook-general -cookhouse -cookhouses -Cooky -Cookie -cookies -cookie's -cooking -cooking-range -cookings -cookish -cookishly -cookless -cookmaid -cookout -cook-out -cookouts -cookroom -Cooks -Cooksburg -cooks-general -cookshack -cookshop -cookshops -Cookson -cookstove -Cookstown -Cooksville -Cookville -cookware -cookwares -cool -coolabah -coolaman -coolamon -coolant -coolants -cooled -Cooleemee -Cooley -coolen -cooler -coolerman -coolers -cooler's -coolest -coolheaded -cool-headed -coolheadedly -cool-headedly -coolheadedness -cool-headedness -coolhouse -cooly -coolibah -Coolidge -coolie -coolies -coolie's -cooliman -Coolin -cooling -cooling-card -coolingly -coolingness -cooling-off -coolish -coolly -coolness -coolnesses -cools -coolth -coolths -coolung -Coolville -coolweed -coolwort -coom -coomb -coombe -coombes -Coombs -coom-ceiled -coomy -co-omnipotent -co-omniscient -coon -Coonan -cooncan -cooncans -cooner -coonhound -coonhounds -coony -coonier -cooniest -coonily -cooniness -coonjine -coonroot -coons -coon's -coonskin -coonskins -coontah -coontail -coontie -coonties -Coop -co-op -coop. -cooped -cooped-in -coopee -Cooper -co-operable -cooperage -cooperancy -co-operancy -cooperant -co-operant -cooperate -co-operate -cooperated -cooperates -cooperating -cooperatingly -cooperation -co-operation -cooperationist -co-operationist -cooperations -cooperative -co-operative -cooperatively -co-operatively -cooperativeness -co-operativeness -cooperatives -cooperator -co-operator -cooperators -cooperator's -co-operculum -coopered -coopery -Cooperia -cooperies -coopering -cooperite -Cooperman -coopers -Coopersburg -Coopersmith -Cooperstein -Cooperstown -Coopersville -cooper's-wood -cooping -coops -coopt -co-opt -cooptate -co-optate -cooptation -co-optation -cooptative -co-optative -coopted -coopting -cooption -co-option -cooptions -cooptive -co-optive -coopts -coordain -co-ordain -co-ordainer -co-order -co-ordinacy -coordinal -co-ordinal -co-ordinance -co-ordinancy -coordinate -co-ordinate -coordinated -coordinately -co-ordinately -coordinateness -co-ordinateness -coordinates -coordinating -coordination -co-ordination -coordinations -coordinative -co-ordinative -coordinator -co-ordinator -coordinatory -co-ordinatory -coordinators -coordinator's -cooree -Coorg -co-organize -coorie -cooried -coorieing -coories -co-origin -co-original -co-originality -Coors -co-orthogonal -co-orthotomic -cooruptibly -Coos -Coosa -Coosada -cooser -coosers -coosify -co-ossify -co-ossification -coost -Coosuc -coot -cootch -Cooter -cootfoot -coot-footed -cooth -coothay -cooty -cootie -cooties -coots -co-owner -co-ownership -COP -copa -copable -copacetic -copaene -copaiba -copaibas -copaibic -Copaifera -copaiye -copain -Copaiva -copaivic -Copake -copal -copalche -copalchi -copalcocote -copaliferous -copaline -copalite -copaljocote -copalm -copalms -copals -Copan -coparallel -coparcenar -coparcenary -coparcener -coparceny -coparenary -coparent -coparents -copart -copartaker -coparty -copartiment -copartner -copartnery -copartners -copartnership -copartnerships -copasetic -copassionate -copastor -copastorate -copastors -copatain -copataine -copatentee -copatriot -co-patriot -copatron -copatroness -copatrons -Cope -copeck -copecks -coped -Copehan -copei -copeia -Copeland -Copelata -Copelatae -copelate -copelidine -copellidine -copeman -copemate -copemates -Copemish -copen -copending -copenetrate -Copenhagen -copens -Copeognatha -copepod -Copepoda -copepodan -copepodous -copepods -coper -coperception -coperiodic -Copernican -Copernicanism -copernicans -Copernicia -Copernicus -coperose -copers -coperta -copes -copesetic -copesettic -copesman -copesmate -copestone -cope-stone -copetitioner -Copeville -cophasal -Cophetua -cophosis -cophouse -Copht -copy -copia -copiability -copiable -Copiague -copiapite -Copiapo -copyboy -copyboys -copybook -copybooks -copycat -copycats -copycatted -copycatting -copycutter -copydesk -copydesks -copied -copyedit -copy-edit -copier -copiers -copies -copyfitter -copyfitting -copygraph -copygraphed -copyhold -copyholder -copyholders -copyholding -copyholds -copihue -copihues -copying -copyism -copyist -copyists -copilot -copilots -copyman -coping -copings -copingstone -copintank -copiopia -copiopsia -copiosity -copious -copiously -copiousness -copiousnesses -copyread -copyreader -copyreaders -copyreading -copyright -copyrightable -copyrighted -copyrighter -copyrighting -copyrights -copyright's -copis -copist -copita -copywise -copywriter -copywriters -copywriting -Coplay -coplaintiff -coplanar -coplanarity -coplanarities -coplanation -Copland -copleased -Copley -Coplin -coplot -coplots -coplotted -coplotter -coplotting -coploughing -coplowing -copolar -copolymer -copolymeric -copolymerism -copolymerization -copolymerizations -copolymerize -copolymerized -copolymerizing -copolymerous -copolymers -copopoda -copopsia -coportion -copout -cop-out -copouts -Copp -coppa -coppaelite -Coppard -coppas -copped -Coppelia -Coppell -copper -copperah -copperahs -copper-alloyed -copperas -copperases -copper-bearing -copper-belly -copper-bellied -copperbottom -copper-bottomed -copper-coated -copper-colored -copper-covered -coppered -copperer -copper-faced -copper-fastened -Copperfield -copperhead -copper-headed -Copperheadism -copperheads -coppery -coppering -copperish -copperytailed -coppery-tailed -copperization -copperize -copperleaf -copper-leaf -copper-leaves -copper-lined -copper-melting -Coppermine -coppernose -coppernosed -Copperopolis -copperplate -copper-plate -copperplated -copperproof -copper-red -coppers -copper's -coppersidesman -copperskin -copper-skinned -copper-smelting -coppersmith -copper-smith -coppersmithing -copper-toed -copperware -copperwing -copperworks -copper-worm -coppet -coppy -coppice -coppiced -coppice-feathered -coppices -coppice-topped -coppicing -coppin -copping -Coppinger -Coppins -copple -copplecrown -copple-crown -copple-crowned -coppled -copple-stone -coppling -Coppock -Coppola -coppra -coppras -copps -copr -copr- -copra -copraemia -copraemic -coprah -coprahs -copras -coprecipitate -coprecipitated -coprecipitating -coprecipitation -copremia -copremias -copremic -copresbyter -copresence -co-presence -copresent -copresident -copresidents -Copreus -Coprides -Coprinae -coprince -coprincipal -coprincipals -coprincipate -Coprinus -coprisoner -coprisoners -copro- -coprocessing -coprocessor -coprocessors -coprodaeum -coproduce -coproduced -coproducer -coproducers -coproduces -coproducing -coproduct -coproduction -coproductions -coproite -coprojector -coprolagnia -coprolagnist -coprolalia -coprolaliac -coprolite -coprolith -coprolitic -coprology -copromisor -copromote -copromoted -copromoter -copromoters -copromotes -copromoting -coprophagan -coprophagy -coprophagia -coprophagist -coprophagous -coprophilia -coprophiliac -coprophilic -coprophilism -coprophilous -coprophyte -coprophobia -coprophobic -coproprietor -coproprietors -coproprietorship -coproprietorships -coprose -cop-rose -Coprosma -coprostanol -coprostasia -coprostasis -coprostasophobia -coprosterol -coprozoic -COPS -cop's -copse -copse-clad -copse-covered -copses -copsewood -copsewooded -copsy -copsing -copsole -Copt -copter -copters -Coptic -coptine -Coptis -copublish -copublished -copublisher -copublishers -copublishes -copublishing -copula -copulable -copulae -copular -copularium -copulas -copulate -copulated -copulates -copulating -copulation -copulations -copulative -copulatively -copulatives -copulatory -copunctal -copurchaser -copurify -copus -COQ -coque -coquecigrue -coquelicot -Coquelin -coqueluche -coquet -coquetoon -coquetry -coquetries -coquets -coquette -coquetted -coquettes -coquetting -coquettish -coquettishly -coquettishness -coquicken -Coquilhatville -coquilla -coquillage -Coquille -coquilles -coquimbite -Coquimbo -coquin -coquina -coquinas -coquita -Coquitlam -coquito -coquitos -Cor -cor- -Cor. -Cora -Corabeca -Corabecan -Corabel -Corabella -Corabelle -corach -Coraciae -coracial -Coracias -Coracii -Coraciidae -coraciiform -Coraciiformes -coracine -coracle -coracler -coracles -coraco- -coracoacromial -coracobrachial -coracobrachialis -coracoclavicular -coracocostal -coracohyoid -coracohumeral -coracoid -coracoidal -coracoids -coracomandibular -coracomorph -Coracomorphae -coracomorphic -coracopectoral -coracoradialis -coracoscapular -coracosteon -coracovertebral -coradical -coradicate -co-radicate -corage -coraggio -coragio -corah -Coray -coraise -coraji -Coral -coral-beaded -coralbells -coralberry -coralberries -coral-bound -coral-built -coralbush -coral-buttoned -coral-colored -coraled -coralene -coral-fishing -coralflower -coral-girt -Coralie -Coralye -Coralyn -Coraline -coralist -coralita -coralla -corallet -Corallian -corallic -Corallidae -corallidomous -coralliferous -coralliform -Coralligena -coralligenous -coralligerous -corallike -corallin -Corallina -Corallinaceae -corallinaceous -coralline -corallita -corallite -Corallium -coralloid -coralloidal -Corallorhiza -corallum -Corallus -coral-making -coral-plant -coral-producing -coral-red -coralroot -coral-rooted -corals -coral-secreting -coral-snake -coral-tree -Coralville -coral-wood -coralwort -Coram -Corambis -Coramine -coran -corance -coranoch -Corantijn -coranto -corantoes -corantos -Coraopolis -Corapeake -coraveca -corban -corbans -corbe -corbeau -corbed -Corbeil -corbeille -corbeilles -corbeils -corbel -corbeled -corbeling -corbelled -corbelling -corbels -Corbet -Corbett -Corbettsville -Corby -corbicula -corbiculae -corbiculate -corbiculum -Corbie -corbies -corbiestep -corbie-step -Corbin -corbina -corbinas -corbleu -corblimey -corblimy -corbovinum -corbula -Corbusier -corcass -corchat -Corchorus -corcir -Corcyra -Corcyraean -corcle -corcopali -Corcoran -Corcovado -Cord -cordage -cordages -Corday -Cordaitaceae -cordaitaceous -cordaitalean -Cordaitales -cordaitean -Cordaites -cordal -Cordalia -cordant -cordate -cordate-amplexicaul -cordate-lanceolate -cordately -cordate-oblong -cordate-sagittate -cordax -Cordeau -corded -Cordeelia -Cordey -cordel -Cordele -Cordelia -Cordelie -Cordelier -cordeliere -Cordeliers -Cordell -cordelle -cordelled -cordelling -Corder -Cordery -corders -Cordesville -cordewane -Cordi -Cordy -Cordia -cordial -cordiality -cordialities -cordialize -cordially -cordialness -cordials -cordycepin -cordiceps -Cordyceps -cordicole -Cordie -Cordier -cordierite -cordies -cordiform -cordigeri -cordyl -Cordylanthus -Cordyline -cordillera -Cordilleran -Cordilleras -cordinar -cordiner -cording -cordings -cordis -cordite -cordites -corditis -Cordle -cordleaf -cordless -cordlessly -cordlike -cordmaker -Cordoba -cordoban -cordobas -cordon -cordonazo -cordonazos -cordoned -cordoning -cordonnet -cordons -Cordova -Cordovan -cordovans -cords -Cordula -corduroy -corduroyed -corduroying -corduroys -cordwain -cordwainer -cordwainery -cordwains -cordwood -cordwoods -CORE -core- -Corea -core-baking -corebel -corebox -coreceiver -corecipient -corecipients -coreciprocal -corectome -corectomy -corector -core-cutting -cored -coredeem -coredeemed -coredeemer -coredeeming -coredeems -coredemptress -core-drying -coreductase -Coree -Coreen -coreflexed -coregence -coregency -coregent -co-regent -coregnancy -coregnant -coregonid -Coregonidae -coregonine -coregonoid -Coregonus -Corey -coreid -Coreidae -coreign -coreigner -coreigns -core-jarring -corejoice -Corel -corelate -corelated -corelates -corelating -corelation -co-relation -corelational -corelative -corelatively -coreless -coreligionist -co-religionist -corelysis -Corell -Corella -Corelli -Corema -coremaker -coremaking -coremia -coremium -coremiumia -coremorphosis -Corena -Corenda -Corene -corenounce -coreometer -Coreopsis -coreplasty -coreplastic -corepressor -corequisite -corer -corers -cores -coresidence -coresident -coresidents -coresidual -coresign -coresonant -coresort -corespect -corespondency -corespondent -co-respondent -corespondents -Coresus -coretomy -Coretta -Corette -coreveler -coreveller -corevolve -corf -Corfam -Corfiote -Corflambo -Corfu -corge -corgi -corgis -Cori -Cory -coria -coriaceous -corial -coriamyrtin -coriander -corianders -coriandrol -Coriandrum -Coriaria -Coriariaceae -coriariaceous -Coryat -Coryate -coriaus -Corybant -Corybantes -Corybantian -corybantiasm -Corybantic -Corybantine -corybantish -Corybants -corybulbin -corybulbine -corycavamine -corycavidin -corycavidine -corycavine -Corycia -Corycian -Coricidin -corydalin -corydaline -Corydalis -Coryden -corydine -Coridon -Corydon -corydora -Corie -Coryell -coriin -coryl -Corylaceae -corylaceous -corylet -corylin -Corilla -Corylopsis -Corylus -corymb -corymbed -corymbiate -corymbiated -corymbiferous -corymbiform -corymblike -corymbose -corymbosely -corymbous -corymbs -Corimelaena -Corimelaenidae -Corin -Corina -corindon -Corine -corynebacteria -corynebacterial -Corynebacterium -coryneform -Corynetes -Coryneum -Corineus -coring -corynid -corynine -corynite -Corinna -Corinne -Corynne -Corynocarpaceae -corynocarpaceous -Corynocarpus -corynteria -Corinth -corinthes -corinthiac -Corinthian -Corinthianesque -Corinthianism -Corinthianize -Corinthians -Corinthus -Coriolanus -coriparian -coryph -Corypha -Coryphaea -coryphaei -Coryphaena -coryphaenid -Coryphaenidae -coryphaenoid -Coryphaenoididae -coryphaeus -Coryphasia -coryphee -coryphees -coryphene -coryphylly -Coryphodon -coryphodont -corypphaei -Coriss -Corissa -corystoid -corita -Corythus -corytuberine -corium -co-rival -Corixa -Corixidae -coryza -coryzal -coryzas -Cork -corkage -corkages -cork-barked -cork-bearing -corkboard -cork-boring -cork-cutting -corke -corked -corker -corkers -cork-forming -cork-grinding -cork-heeled -Corkhill -corky -corkier -corkiest -corky-headed -corkiness -corking -corking-pin -corkir -corkish -corkite -corky-winged -corklike -corkline -cork-lined -corkmaker -corkmaking -corks -corkscrew -corkscrewed -corkscrewy -corkscrewing -corkscrews -cork-tipped -corkwing -corkwood -corkwoods -Corley -Corly -Corliss -corm -Cormac -Cormack -cormel -cormels -Cormick -cormidium -Cormier -cormlike -cormo- -cormogen -cormoid -Cormophyta -cormophyte -cormophytic -cormorant -cormorants -cormous -corms -cormus -CORN -Cornaceae -cornaceous -cornada -cornage -Cornall -cornamute -cornball -cornballs -corn-beads -cornbell -cornberry -cornbin -cornbind -cornbinks -cornbird -cornbole -cornbottle -cornbrash -cornbread -corncake -corncakes -corncob -corn-cob -corncobs -corncockle -corn-colored -corncracker -corn-cracker -corncrake -corn-crake -corncrib -corncribs -corncrusher -corncutter -corncutting -corn-devouring -corndodger -cornea -corneagen -corneal -corneas -corn-eater -corned -Corney -Corneille -cornein -corneine -corneitis -Cornel -Cornela -Cornelia -cornelian -Cornelie -Cornelis -Cornelius -Cornell -Cornelle -cornels -cornemuse -corneo- -corneocalcareous -corneosclerotic -corneosiliceous -corneous -Corner -cornerback -cornerbind -cornercap -cornered -cornerer -cornering -cornerman -corner-man -cornerpiece -corners -cornerstone -corner-stone -cornerstones -cornerstone's -Cornersville -cornerways -cornerwise -CORNET -cornet-a-pistons -cornetcy -cornetcies -corneter -cornetfish -cornetfishes -cornetist -cornetists -cornets -cornett -cornette -cornetter -cornetti -cornettino -cornettist -cornetto -Cornettsville -corneule -corneum -Cornew -corn-exporting -cornfactor -cornfed -corn-fed -corn-feeding -cornfield -cornfields -cornfield's -cornflag -corn-flag -cornflakes -cornfloor -cornflour -corn-flour -cornflower -corn-flower -cornflowers -corngrower -corn-growing -cornhole -cornhouse -cornhusk -corn-husk -cornhusker -cornhusking -cornhusks -Corny -Cornia -cornic -cornice -corniced -cornices -corniche -corniches -Cornichon -cornicing -cornicle -cornicles -cornicular -corniculate -corniculer -corniculum -Cornie -cornier -corniest -Corniferous -cornify -cornific -cornification -cornified -corniform -cornigeous -cornigerous -cornily -cornin -corniness -Corning -corniplume -Cornish -Cornishman -Cornishmen -cornix -Cornland -corn-law -Cornlea -cornless -cornloft -cornmaster -corn-master -cornmeal -cornmeals -cornmonger -cornmuse -Corno -cornopean -Cornopion -corn-picker -cornpipe -corn-planting -corn-producing -corn-rent -cornrick -cornroot -cornrow -cornrows -corns -cornsack -corn-salad -corn-snake -Cornstalk -corn-stalk -cornstalks -cornstarch -cornstarches -cornstone -cornstook -cornu -cornua -cornual -cornuate -cornuated -cornubianite -cornucopia -Cornucopiae -cornucopian -cornucopias -cornucopiate -cornule -cornulite -Cornulites -cornupete -Cornus -cornuses -cornute -cornuted -cornutin -cornutine -cornuting -cornuto -cornutos -cornutus -Cornville -Cornwall -Cornwallis -cornwallises -cornwallite -Cornwallville -Cornwell -Coro -coro- -coroa -Coroado -corocleisis -corody -corodiary -corodiastasis -corodiastole -corodies -Coroebus -corojo -corol -corolitic -coroll -Corolla -corollaceous -corollary -corollarial -corollarially -corollaries -corollary's -corollas -corollate -corollated -corollet -corolliferous -corollifloral -corolliform -corollike -corolline -corollitic -coromandel -coromell -corometer -corona -coronach -coronachs -coronad -coronadite -Coronado -coronados -coronae -coronagraph -coronagraphic -coronal -coronale -coronaled -coronalled -coronally -coronals -coronamen -coronary -coronaries -coronas -coronate -coronated -coronation -coronations -coronatorial -coronavirus -corone -Coronel -coronels -coronene -coroner -coroners -coronership -coronet -coroneted -coronetlike -coronets -coronet's -coronetted -coronettee -coronetty -coroniform -Coronilla -coronillin -coronillo -coronion -Coronis -coronitis -coronium -coronize -coronobasilar -coronofacial -coronofrontal -coronograph -coronographic -coronoid -Coronopus -coronule -Coronus -coroparelcysis -coroplast -coroplasta -coroplastae -coroplasty -coroplastic -Coropo -coroscopy -corosif -Corot -corotate -corotated -corotates -corotating -corotation -corotomy -Corotto -coroun -coroutine -coroutines -coroutine's -Corozal -corozo -corozos -Corp -corp. -Corpl -corpn -corpora -corporacy -corporacies -Corporal -corporalcy -corporale -corporales -corporalism -corporality -corporalities -corporally -corporals -corporal's -corporalship -corporas -corporate -corporately -corporateness -corporation -corporational -corporationer -corporationism -corporations -corporation's -corporatism -corporatist -corporative -corporatively -corporativism -corporator -corporature -corpore -corporeal -corporealist -corporeality -corporealization -corporealize -corporeally -corporealness -corporeals -corporeity -corporeous -corporify -corporification -corporosity -corposant -corps -corpsbruder -corpse -corpse-candle -corpselike -corpselikeness -corpses -corpse's -corpsy -corpsman -corpsmen -corpulence -corpulences -corpulency -corpulencies -corpulent -corpulently -corpulentness -corpus -corpuscle -corpuscles -corpuscular -corpuscularian -corpuscularity -corpusculated -corpuscule -corpusculous -corpusculum -Corr -corr. -corrade -corraded -corrades -corradial -corradiate -corradiated -corradiating -corradiation -corrading -Corrado -corral -Corrales -corralled -corralling -corrals -corrasion -corrasive -Correa -correal -correality -correct -correctable -correctant -corrected -correctedness -correcter -correctest -correctible -correctify -correcting -correctingly -correction -correctional -correctionalist -correctioner -corrections -Correctionville -correctitude -corrective -correctively -correctiveness -correctives -correctly -correctness -correctnesses -corrector -correctory -correctorship -correctress -correctrice -corrects -Correggio -Corregidor -corregidores -corregidors -corregimiento -corregimientos -Correy -correl -correl. -correlatable -correlate -correlated -correlates -correlating -correlation -correlational -correlations -correlative -correlatively -correlativeness -correlatives -correlativism -correlativity -correligionist -Correll -correllated -correllation -correllations -Correna -corrente -correo -correption -corresol -corresp -correspond -corresponded -correspondence -correspondences -correspondence's -correspondency -correspondencies -correspondent -correspondential -correspondentially -correspondently -correspondents -correspondent's -correspondentship -corresponder -corresponding -correspondingly -corresponds -corresponsion -corresponsive -corresponsively -Correze -Corri -Corry -Corrianne -corrida -corridas -corrido -corridor -corridored -corridors -corridor's -Corrie -Corriedale -Corrientes -corries -Corrigan -Corriganville -corrige -corrigenda -corrigendum -corrigent -corrigibility -corrigible -corrigibleness -corrigibly -Corrigiola -Corrigiolaceae -Corrina -Corrine -Corrinne -Corryton -corrival -corrivality -corrivalry -corrivals -corrivalship -corrivate -corrivation -corrive -corrobboree -corrober -corroborant -corroborate -corroborated -corroborates -corroborating -corroboration -corroborations -corroborative -corroboratively -corroborator -corroboratory -corroboratorily -corroborators -corroboree -corroboreed -corroboreeing -corroborees -corrobori -corrodant -corrode -corroded -corrodent -Corrodentia -corroder -corroders -corrodes -corrody -corrodiary -corrodibility -corrodible -corrodier -corrodies -corroding -corrodingly -Corron -corrosibility -corrosible -corrosibleness -corrosion -corrosional -corrosionproof -corrosions -corrosive -corrosived -corrosively -corrosiveness -corrosives -corrosiving -corrosivity -corrugant -corrugate -corrugated -corrugates -corrugating -corrugation -corrugations -corrugator -corrugators -corrugent -corrump -corrumpable -corrup -corrupable -corrupt -corrupted -corruptedly -corruptedness -corrupter -corruptest -corruptful -corruptibility -corruptibilities -corruptible -corruptibleness -corruptibly -corrupting -corruptingly -corruption -corruptionist -corruptions -corruptious -corruptive -corruptively -corruptless -corruptly -corruptness -corruptor -corruptress -corrupts -corsac -corsacs -corsage -corsages -corsaint -corsair -corsairs -corsak -Corse -corselet -corseleted -corseleting -corselets -corselette -corsepresent -corseque -corser -corses -corsesque -corset -corseted -corsetier -corsetiere -corseting -corsetless -corsetry -corsets -Corsetti -corsy -Corsica -Corsican -Corsicana -corsie -Corsiglia -corsite -corslet -corslets -corsned -Corso -Corson -corsos -Cort -corta -Cortaderia -Cortaillod -Cortaro -cortege -corteges -corteise -Cortelyou -Cortemadera -Cortes -Cortese -cortex -cortexes -Cortez -Corti -Corty -cortian -cortical -cortically -corticate -corticated -corticating -cortication -cortices -corticiferous -corticiform -corticifugal -corticifugally -corticin -corticine -corticipetal -corticipetally -Corticium -cortico- -corticoafferent -corticoefferent -corticoid -corticole -corticoline -corticolous -corticopeduncular -corticose -corticospinal -corticosteroid -corticosteroids -corticosterone -corticostriate -corticotrophin -corticotropin -corticous -Cortie -cortile -cortin -cortina -cortinae -cortinarious -Cortinarius -cortinate -cortine -cortins -cortisol -cortisols -cortisone -cortisones -Cortland -cortlandtite -Cortney -Corton -Cortona -Cortot -coruco -coruler -Corum -Corumba -Coruminacan -Coruna -corundophilite -corundum -corundums -Corunna -corupay -coruscant -coruscate -coruscated -coruscates -coruscating -coruscation -coruscations -coruscative -corv -Corvallis -corve -corved -corvee -corvees -corven -corver -corves -Corvese -corvet -corvets -corvette -corvettes -corvetto -Corvi -Corvidae -corviform -corvillosum -Corvin -corvina -Corvinae -corvinas -corvine -corviser -corvisor -corvktte -Corvo -corvoid -corvorant -Corvus -Corwin -Corwith -Corwun -COS -cosalite -cosaque -cosavior -Cosby -coscet -Coscinodiscaceae -Coscinodiscus -coscinomancy -Coscob -coscoroba -coscript -cose -coseasonal -coseat -cosec -cosecant -cosecants -cosech -cosecs -cosectarian -cosectional -cosed -cosegment -cosey -coseier -coseiest -coseys -coseism -coseismal -coseismic -cosen -cosenator -cosentiency -cosentient -co-sentient -Cosenza -coservant -coses -cosession -coset -cosets -Cosetta -Cosette -cosettler -Cosgrave -Cosgrove -cosh -cosharer -cosheath -coshed -cosher -coshered -cosherer -coshery -cosheries -coshering -coshers -coshes -coshing -Coshocton -Coshow -cosy -cosie -cosied -cosier -cosies -cosiest -cosign -cosignatory -co-signatory -cosignatories -cosigned -cosigner -co-signer -cosigners -cosignificative -cosigning -cosignitary -cosigns -cosying -cosily -cosymmedian -Cosimo -cosin -cosinage -COSINE -cosines -cosiness -cosinesses -cosing -cosingular -cosins -cosinusoid -Cosyra -Cosma -Cosmati -Cosme -cosmecology -cosmesis -Cosmetas -cosmete -cosmetic -cosmetical -cosmetically -cosmetician -cosmeticize -cosmetics -cosmetiste -cosmetology -cosmetological -cosmetologist -cosmetologists -COSMIC -cosmical -cosmicality -cosmically -cosmico-natural -cosmine -cosmism -cosmisms -cosmist -cosmists -Cosmo -cosmo- -cosmochemical -cosmochemistry -cosmocracy -cosmocrat -cosmocratic -cosmodrome -cosmogenesis -cosmogenetic -cosmogeny -cosmogenic -cosmognosis -cosmogonal -cosmogoner -cosmogony -cosmogonic -cosmogonical -cosmogonies -cosmogonist -cosmogonists -cosmogonize -cosmographer -cosmography -cosmographic -cosmographical -cosmographically -cosmographies -cosmographist -cosmoid -cosmolabe -cosmolatry -cosmoline -cosmolined -cosmolining -cosmology -cosmologic -cosmological -cosmologically -cosmologies -cosmologygy -cosmologist -cosmologists -cosmometry -cosmonaut -cosmonautic -cosmonautical -cosmonautically -cosmonautics -cosmonauts -cosmopathic -cosmoplastic -cosmopoietic -cosmopolicy -Cosmopolis -cosmopolises -cosmopolitan -cosmopolitanisation -cosmopolitanise -cosmopolitanised -cosmopolitanising -cosmopolitanism -cosmopolitanization -cosmopolitanize -cosmopolitanized -cosmopolitanizing -cosmopolitanly -cosmopolitans -cosmopolite -cosmopolitic -cosmopolitical -cosmopolitics -cosmopolitism -cosmorama -cosmoramic -cosmorganic -COSMOS -cosmoscope -cosmoses -cosmosophy -cosmosphere -cosmotellurian -cosmotheism -cosmotheist -cosmotheistic -cosmothetic -Cosmotron -cosmozoan -cosmozoans -cosmozoic -cosmozoism -cosonant -cosounding -cosovereign -co-sovereign -cosovereignty -COSPAR -cospecies -cospecific -cosphered -cosplendor -cosplendour -cosponsor -cosponsored -cosponsoring -cosponsors -cosponsorship -cosponsorships -coss -Cossack -cossacks -Cossaean -Cossayuna -cossas -cosse -cosset -cosseted -cosseting -cossets -cossette -cossetted -cossetting -cosshen -cossic -cossid -Cossidae -cossie -cossyrite -cossnent -Cost -Costa -cost-account -costae -Costaea -costage -Costain -costal -costalgia -costally -costal-nerved -costander -Costanoan -Costanza -Costanzia -COSTAR -co-star -costard -costard-monger -costards -costarred -co-starred -costarring -co-starring -costars -Costata -costate -costated -costean -costeaning -costectomy -costectomies -costed -costeen -cost-effective -Coste-Floret -costellate -Costello -Costen -Coster -costerdom -Costermansville -costermonger -costers -cost-free -costful -costicartilage -costicartilaginous -costicervical -costiferous -costiform -Costigan -Costilla -Costin -costing -costing-out -costious -costipulator -costispinal -costive -costively -costiveness -costless -costlessly -costlessness -costlew -costly -costlier -costliest -costliness -costlinesses -costmary -costmaries -costo- -costoabdominal -costoapical -costocentral -costochondral -costoclavicular -costocolic -costocoracoid -costodiaphragmatic -costogenic -costoinferior -costophrenic -costopleural -costopneumopexy -costopulmonary -costoscapular -costosternal -costosuperior -costothoracic -costotome -costotomy -costotomies -costotrachelian -costotransversal -costotransverse -costovertebral -costoxiphoid -cost-plus -costraight -costrel -costrels -costs -costula -costulation -costume -costumed -costumey -costumer -costumery -costumers -costumes -costumic -costumier -costumiere -costumiers -costuming -costumire -costumist -costusroot -cosubject -cosubordinate -co-subordinate -cosuffer -cosufferer -cosuggestion -cosuitor -co-supreme -cosurety -co-surety -co-sureties -cosuretyship -cosustain -coswearer -COT -Cotabato -cotabulate -cotan -cotangent -cotangential -cotangents -cotans -cotarius -cotarnin -cotarnine -Cotati -cotbetty -cotch -Cote -Coteau -coteaux -coted -coteen -coteful -cotehardie -cote-hardie -cotele -coteline -coteller -cotemporane -cotemporanean -cotemporaneous -cotemporaneously -cotemporary -cotemporaries -cotemporarily -cotenancy -cotenant -co-tenant -cotenants -cotenure -coterell -cotery -coterie -coteries -coterminal -coterminous -coterminously -coterminousness -cotes -Cotesfield -Cotesian -coth -cotham -cothamore -cothe -cotheorist -Cotherstone -cothy -cothish -cothon -cothouse -cothurn -cothurnal -cothurnate -cothurned -cothurni -cothurnian -cothurnni -cothurns -cothurnus -Coty -cotice -coticed -coticing -coticular -cotidal -co-tidal -cotyl -cotyl- -cotyla -cotylar -cotyle -cotyledon -cotyledonal -cotyledonar -cotyledonary -cotyledonoid -cotyledonous -cotyledons -cotyledon's -Cotyleus -cotyliform -cotyligerous -cotyliscus -cotillage -cotillion -cotillions -cotillon -cotillons -cotyloid -cotyloidal -Cotylophora -cotylophorous -cotylopubic -cotylosacral -cotylosaur -Cotylosauria -cotylosaurian -coting -Cotinga -cotingid -Cotingidae -cotingoid -Cotinus -cotype -cotypes -Cotys -cotise -cotised -cotising -Cotyttia -cotitular -cotland -Cotman -coto -cotoin -Cotolaurel -Cotonam -Cotoneaster -cotonia -cotonier -Cotonou -Cotopaxi -cotorment -cotoro -cotoros -cotorture -Cotoxo -cotquean -cotqueans -cotraitor -cotransduction -cotransfuse -cotranslator -cotranspire -cotransubstantiate -cotrespasser -cotrine -cotripper -cotrustee -co-trustee -COTS -cot's -Cotsen -cotset -cotsetla -cotsetland -cotsetle -Cotswold -Cotswolds -Cott -cotta -cottabus -cottae -cottage -cottaged -cottagey -cottager -cottagers -cottages -Cottageville -cottar -cottars -cottas -Cottbus -cotte -cotted -Cottekill -Cottenham -Cotter -cottered -cotterel -Cotterell -cottering -cotterite -cotters -cotterway -cotty -cottid -Cottidae -cottier -cottierism -cottiers -cottiest -cottiform -cottise -Cottle -Cottleville -cottoid -Cotton -cottonade -cotton-backed -cotton-baling -cotton-bleaching -cottonbush -cotton-clad -cotton-covered -Cottondale -cotton-dyeing -cottoned -cottonee -cottoneer -cottoner -cotton-ginning -cotton-growing -cottony -Cottonian -cottoning -cottonization -cottonize -cotton-knitting -cottonless -cottonmouth -cottonmouths -cottonocracy -Cottonopolis -cottonpickin' -cottonpicking -cotton-picking -cotton-planting -Cottonport -cotton-printing -cotton-producing -cottons -cotton-sampling -cottonseed -cottonseeds -cotton-sick -cotton-spinning -cottontail -cottontails -Cottonton -cottontop -Cottontown -cotton-weaving -cottonweed -cottonwick -cotton-wicked -cottonwood -cottonwoods -cottrel -Cottrell -Cottus -Cotuit -cotula -Cotulla -cotunnite -Coturnix -cotutor -cotwal -cotwin -cotwinned -cotwist -couac -coucal -couch -couchancy -couchant -couchantly -couche -couched -couchee -Coucher -couchers -couches -couchette -couchy -couching -couchings -couchmaker -couchmaking -Couchman -couchmate -cou-cou -coud -coude -coudee -Couderay -Coudersport -Coue -Coueism -cougar -cougars -cough -coughed -cougher -coughers -coughing -Coughlin -coughroot -coughs -coughweed -coughwort -cougnar -couhage -coul -coulage -could -couldest -couldn -couldna -couldnt -couldn't -couldron -couldst -coulee -coulees -couleur -coulibiaca -coulie -coulier -coulis -coulisse -coulisses -couloir -couloirs -Coulomb -Coulombe -coulombic -coulombmeter -coulombs -coulometer -coulometry -coulometric -coulometrically -Coulommiers -Coulson -Coulter -coulterneb -Coulters -Coulterville -coulthard -coulure -couma -coumalic -coumalin -coumaphos -coumara -coumaran -coumarane -coumarate -coumaric -coumarilic -coumarin -coumarinic -coumarins -coumarone -coumarone-indene -coumarou -Coumarouna -coumarous -Coumas -coumbite -Counce -council -councilist -councillary -councillor -councillors -councillor's -councillorship -councilman -councilmanic -councilmen -councilor -councilors -councilorship -councils -council's -councilwoman -councilwomen -counderstand -co-une -counite -co-unite -couniversal -counsel -counselable -counseled -counselee -counselful -counseling -counsel-keeper -counsellable -counselled -counselling -counsellor -counsellors -counsellor's -counsellorship -counselor -counselor-at-law -counselors -counselor's -counselors-at-law -counselorship -counsels -counsinhood -Count -countability -countable -countableness -countably -countdom -countdown -countdowns -counted -Countee -countenance -countenanced -countenancer -countenances -countenancing -counter -counter- -counterabut -counteraccusation -counteraccusations -counteracquittance -counter-acquittance -counteract -counteractant -counteracted -counteracter -counteracting -counteractingly -counteraction -counteractions -counteractive -counteractively -counteractivity -counteractor -counteracts -counteraddress -counteradvance -counteradvantage -counteradvice -counteradvise -counteraffirm -counteraffirmation -counteragency -counter-agency -counteragent -counteraggression -counteraggressions -counteragitate -counteragitation -counteralliance -counterambush -counterannouncement -counteranswer -counterappeal -counterappellant -counterapproach -counter-approach -counterapse -counterarch -counter-arch -counterargue -counterargued -counterargues -counterarguing -counterargument -counterartillery -counterassault -counterassaults -counterassertion -counterassociation -counterassurance -counterattack -counterattacked -counterattacker -counterattacking -counterattacks -counterattestation -counterattired -counterattraction -counter-attraction -counterattractive -counterattractively -counteraverment -counteravouch -counteravouchment -counterbalance -counterbalanced -counterbalances -counterbalancing -counterband -counterbarrage -counter-barry -counterbase -counterbattery -counter-battery -counter-beam -counterbeating -counterbend -counterbewitch -counterbid -counterbids -counter-bill -counterblast -counterblockade -counterblockades -counterblow -counterblows -counterboycott -counterbond -counterborder -counterbore -counter-bore -counterbored -counterborer -counterboring -counterboulle -counter-boulle -counterbrace -counter-brace -counterbracing -counterbranch -counterbrand -counterbreastwork -counterbuff -counterbuilding -countercampaign -countercampaigns -countercarte -counter-carte -counter-cast -counter-caster -countercathexis -countercause -counterchallenge -counterchallenges -counterchange -counterchanged -counterchanging -countercharge -countercharged -countercharges -countercharging -countercharm -countercheck -countercheer -counter-chevroned -counterclaim -counter-claim -counterclaimant -counterclaimed -counterclaiming -counterclaims -counterclassification -counterclassifications -counterclockwise -counter-clockwise -countercolored -counter-coloured -countercommand -countercompany -counter-company -countercompetition -countercomplaint -countercomplaints -countercompony -countercondemnation -counterconditioning -counterconquest -counterconversion -countercouchant -counter-couchant -countercoup -countercoupe -countercoups -countercourant -countercraft -countercry -countercriticism -countercriticisms -countercross -countercultural -counterculture -counter-culture -countercultures -counterculturist -countercurrent -counter-current -countercurrently -countercurrentwise -counterdance -counterdash -counterdecision -counterdeclaration -counterdecree -counter-deed -counterdefender -counterdemand -counterdemands -counterdemonstrate -counterdemonstration -counterdemonstrations -counterdemonstrator -counterdemonstrators -counterdeputation -counterdesire -counterdevelopment -counterdifficulty -counterdigged -counterdike -counterdiscipline -counterdisengage -counter-disengage -counterdisengagement -counterdistinct -counterdistinction -counterdistinguish -counterdoctrine -counterdogmatism -counterdraft -counterdrain -counter-drain -counter-draw -counterdrive -counterearth -counter-earth -countered -countereffect -countereffects -counterefficiency -countereffort -counterefforts -counterembargo -counterembargos -counterembattled -counter-embattled -counterembowed -counter-embowed -counterenamel -counterend -counterenergy -counterengagement -counterengine -counterenthusiasm -counterentry -counterequivalent -counterermine -counter-ermine -counterespionage -counterestablishment -counterevidence -counter-evidence -counterevidences -counterexaggeration -counterexample -counterexamples -counterexcitement -counterexcommunication -counterexercise -counterexplanation -counterexposition -counterexpostulation -counterextend -counterextension -counter-extension -counter-faced -counterfact -counterfactual -counterfactually -counterfallacy -counterfaller -counter-faller -counterfeisance -counterfeit -counterfeited -counterfeiter -counterfeiters -counterfeiting -counterfeitly -counterfeitment -counterfeitness -counterfeits -counterferment -counterfessed -counter-fessed -counterfire -counter-fissure -counterfix -counterflange -counterflashing -counterfleury -counterflight -counterflory -counterflow -counterflux -counterfoil -counterforce -counter-force -counterformula -counterfort -counterfugue -countergabble -countergabion -countergage -countergager -countergambit -countergarrison -countergauge -counter-gauge -countergauger -counter-gear -countergift -countergirded -counterglow -counterguard -counter-guard -counterguerilla -counterguerrila -counterguerrilla -counterhaft -counterhammering -counter-hem -counterhypothesis -counteridea -counterideal -counterimagination -counterimitate -counterimitation -counterimpulse -counterindentation -counterindented -counterindicate -counterindication -counter-indication -counterindoctrinate -counterindoctrination -counterinflationary -counterinfluence -counter-influence -counterinfluences -countering -counterinsult -counterinsurgency -counterinsurgencies -counterinsurgent -counterinsurgents -counterintelligence -counterinterest -counterinterpretation -counterintrigue -counterintrigues -counterintuitive -counterinvective -counterinvestment -counterion -counter-ion -counterirritant -counter-irritant -counterirritate -counterirritation -counterjudging -counterjumper -counter-jumper -counterlath -counter-lath -counterlathed -counterlathing -counterlatration -counterlaw -counterleague -counterlegislation -counter-letter -counterly -counterlife -counterlight -counterlighted -counterlighting -counterlilit -counterlit -counterlocking -counterlode -counter-lode -counterlove -countermachination -countermaid -counterman -countermand -countermandable -countermanded -countermanding -countermands -countermaneuver -countermanifesto -countermanifestoes -countermarch -countermarching -countermark -counter-marque -countermarriage -countermeasure -countermeasures -countermeasure's -countermeet -countermen -countermessage -countermigration -countermine -countermined -countermining -countermissile -countermission -countermotion -counter-motion -countermount -countermove -counter-move -countermoved -countermovement -countermovements -countermoves -countermoving -countermure -countermutiny -counternaiant -counter-naiant -counternarrative -counternatural -counter-nebule -counternecromancy -counternoise -counternotice -counterobjection -counterobligation -counter-off -counteroffensive -counteroffensives -counteroffer -counteroffers -counteropening -counter-opening -counteropponent -counteropposite -counterorator -counterorder -counterorganization -counterpace -counterpaled -counter-paled -counterpaly -counterpane -counterpaned -counterpanes -counter-parade -counterparadox -counterparallel -counterparole -counter-parole -counterparry -counterpart -counter-party -counterparts -counterpart's -counterpassant -counter-passant -counterpassion -counter-pawn -counterpenalty -counter-penalty -counterpendent -counterpetition -counterpetitions -counterphobic -counterpicture -counterpillar -counterplay -counterplayer -counterplan -counterplea -counterplead -counterpleading -counterplease -counterploy -counterploys -counterplot -counterplotted -counterplotter -counterplotting -counterpoint -counterpointe -counterpointed -counterpointing -counterpoints -counterpoise -counterpoised -counterpoises -counterpoising -counterpoison -counterpole -counter-pole -counterpoles -counterponderate -counterpose -counterposition -counterposting -counterpotence -counterpotency -counterpotent -counter-potent -counterpower -counterpowers -counterpractice -counterpray -counterpreach -counterpreparation -counterpressure -counter-pressure -counterpressures -counter-price -counterprick -counterprinciple -counterprocess -counterproductive -counterproductively -counterproductiveness -counterproductivity -counterprogramming -counterproject -counterpronunciamento -counterproof -counter-proof -counterpropaganda -counterpropagandize -counterpropagation -counterpropagations -counterprophet -counterproposal -counterproposals -counterproposition -counterprotection -counterprotest -counterprotests -counterprove -counterpull -counterpunch -counterpuncher -counterpuncture -counterpush -counterquartered -counter-quartered -counterquarterly -counterquery -counterquestion -counterquestions -counterquip -counterradiation -counter-raguled -counterraid -counterraids -counterraising -counterrally -counterrallies -counterrampant -counter-rampant -counterrate -counterreaction -counterreason -counterrebuttal -counterrebuttals -counterreckoning -counterrecoil -counterreconnaissance -counterrefer -counterreflected -counterreform -counterreformation -Counter-Reformation -counterreforms -counterreligion -counterremonstrant -counterreply -counterreplied -counterreplies -counterreplying -counterreprisal -counterresolution -counterresponse -counterresponses -counterrestoration -counterretaliation -counterretaliations -counterretreat -counterrevolution -counter-revolution -counterrevolutionary -counter-revolutionary -counterrevolutionaries -counterrevolutionist -counterrevolutionize -counterrevolutions -counterriposte -counter-riposte -counterroll -counter-roll -counterrotating -counterround -counter-round -counterruin -counters -countersale -countersalient -counter-salient -countersank -counterscale -counter-scale -counterscalloped -counterscarp -counterscoff -countersconce -counterscrutiny -counter-scuffle -countersea -counter-sea -counterseal -counter-seal -countersecure -counter-secure -countersecurity -counterselection -countersense -counterservice -countershade -countershading -countershaft -countershafting -countershear -countershine -countershock -countershout -counterside -countersiege -countersign -countersignal -countersignature -countersignatures -countersigned -countersigning -countersigns -countersympathy -countersink -countersinking -countersinks -countersynod -countersleight -counterslope -countersmile -countersnarl -counter-spell -counterspy -counterspies -counterspying -counterstain -counterstamp -counterstand -counterstatant -counterstatement -counter-statement -counterstatute -counterstep -counter-step -counterstyle -counterstyles -counterstimulate -counterstimulation -counterstimulus -counterstock -counterstratagem -counterstrategy -counterstrategies -counterstream -counterstrike -counterstroke -counterstruggle -countersubject -countersue -countersued -countersues -countersuggestion -countersuggestions -countersuing -countersuit -countersuits -countersun -countersunk -countersunken -countersurprise -countersway -counterswing -countersworn -countertack -countertail -countertally -countertaste -counter-taste -countertechnicality -countertendency -counter-tendency -countertendencies -countertenor -counter-tenor -countertenors -counterterm -counterterror -counterterrorism -counterterrorisms -counterterrorist -counterterrorists -counterterrors -countertheme -countertheory -counterthought -counterthreat -counterthreats -counterthrust -counterthrusts -counterthwarting -counter-tide -countertierce -counter-tierce -countertime -counter-time -countertype -countertouch -countertraction -countertrades -countertransference -countertranslation -countertraverse -countertreason -countertree -countertrench -counter-trench -countertrend -countertrends -countertrespass -countertrippant -countertripping -counter-tripping -countertruth -countertug -counterturn -counter-turn -counterturned -countervail -countervailed -countervailing -countervails -countervair -countervairy -countervallation -countervalue -countervaunt -countervene -countervengeance -countervenom -countervibration -counterview -countervindication -countervolition -countervolley -countervote -counter-vote -counterwager -counter-wait -counterwall -counter-wall -counterwarmth -counterwave -counterweigh -counterweighed -counterweighing -counterweight -counter-weight -counterweighted -counterweights -counterwheel -counterwill -counterwilling -counterwind -counterwitness -counterword -counterwork -counterworker -counter-worker -counterworking -counterwrite -Countess -countesses -countfish -county -countian -countians -counties -counting -countinghouse -countys -county's -countywide -county-wide -countless -countlessly -countlessness -countor -countour -countre- -countree -countreeman -country -country-and-western -country-born -country-bred -country-dance -countrie -countrieman -countries -country-fashion -countrify -countrification -countrified -countryfied -countrifiedness -countryfiedness -countryfolk -countryish -country-made -countryman -countrymen -countrypeople -country's -countryseat -countryside -countrysides -country-style -countryward -countrywide -country-wide -countrywoman -countrywomen -counts -countship -coup -coupage -coup-cart -coupe -couped -coupee -coupe-gorge -coupelet -couper -Couperin -Couperus -coupes -Coupeville -couping -Coupland -couple -couple-beggar -couple-close -coupled -couplement -coupler -coupleress -couplers -couples -couplet -coupleteer -couplets -coupling -couplings -coupon -couponed -couponless -coupons -coupon's -coups -coupstick -coupure -courage -courageous -courageously -courageousness -courager -courages -courant -courante -courantes -Courantyne -couranto -courantoes -courantos -courants -courap -couratari -courb -courbache -courbaril -courbash -courbe -Courbet -courbette -courbettes -Courbevoie -courche -Courcy -courge -courgette -courida -courie -Courier -couriers -courier's -couril -courlan -Courland -courlans -Cournand -couronne -Cours -course -coursed -coursey -courser -coursers -courses -coursy -coursing -coursings -Court -courtage -courtal -court-baron -courtby -court-bouillon -courtbred -courtcraft -court-cupboard -court-customary -court-dress -courted -Courtelle -Courtenay -Courteney -courteous -courteously -courteousness -courtepy -courter -courters -courtesan -courtesanry -courtesans -courtesanship -courtesy -courtesied -courtesies -courtesying -courtesy's -courtezan -courtezanry -courtezanship -courthouse -court-house -courthouses -courthouse's -courty -courtyard -court-yard -courtyards -courtyard's -courtier -courtiery -courtierism -courtierly -courtiers -courtier's -courtiership -courtin -courting -Courtland -court-leet -courtless -courtlet -courtly -courtlier -courtliest -courtlike -courtliness -courtling -courtman -court-mantle -court-martial -court-martials -Courtnay -Courtney -courtnoll -court-noue -Courtois -court-plaster -Courtrai -courtroll -courtroom -courtrooms -courtroom's -courts -courtship -courtship-and-matrimony -courtships -courtside -courts-martial -court-tialed -court-tialing -court-tialled -court-tialling -Courtund -courtzilite -Cousance-les-Forges -couscous -couscouses -couscousou -co-use -couseranite -Coushatta -Cousy -Cousin -cousinage -cousiness -cousin-german -cousinhood -cousiny -cousin-in-law -cousinly -cousinry -cousinries -Cousins -cousin's -cousins-german -cousinship -coussinet -Coussoule -Cousteau -coustumier -couteau -couteaux -coutel -coutelle -couter -couters -Coutet -couth -couthe -couther -couthest -couthy -couthie -couthier -couthiest -couthily -couthiness -couthless -couthly -couths -coutil -coutille -coutumier -Couture -coutures -couturier -couturiere -couturieres -couturiers -couturire -couvade -couvades -couve -couvert -couverte -couveuse -couvre-feu -couxia -couxio -covado -covalence -covalences -covalency -covalent -covalently -Covarecan -Covarecas -covary -covariable -covariables -covariance -covariant -covariate -covariates -covariation -Covarrubias -covassal -cove -coved -covey -coveys -Covel -Covell -covelline -covellite -Covelo -coven -Covena -covenable -covenably -covenance -Covenant -covenantal -covenantally -covenanted -covenantee -Covenanter -covenanting -Covenant-israel -covenantor -covenants -covenant's -Coveney -covens -covent -coventrate -coven-tree -Coventry -coventries -coventrize -cover -coverable -coverage -coverages -coverall -coveralled -coveralls -coverchief -covercle -Coverdale -covered -coverer -coverers -covering -coverings -Coverley -coverless -coverlet -coverlets -coverlet's -coverlid -coverlids -cover-point -covers -coversed -co-versed -cover-shame -cover-shoulder -coverside -coversine -coverslip -coverslut -cover-slut -covert -covert-baron -covertical -covertly -covertness -coverts -coverture -coverup -cover-up -coverups -coves -Covesville -covet -covetable -coveted -coveter -coveters -coveting -covetingly -covetise -covetiveness -covetous -covetously -covetousness -covets -covibrate -covibration -covid -covido -Coviello -covillager -Covillea -covin -Covina -covine -coving -covings -Covington -covinous -covinously -covins -covin-tree -covisit -covisitor -covite -covolume -covotary -cow -cowage -cowages -cowal -co-walker -Cowan -Cowanesque -Cowansville -Coward -cowardy -cowardice -cowardices -cowardish -cowardly -cowardliness -cowardness -cowards -Cowarts -cowbane -cow-bane -cowbanes -cowbarn -cowbell -cowbells -cowberry -cowberries -cowbind -cowbinds -cowbird -cowbirds -cowbyre -cowboy -cow-boy -cowboys -cowboy's -cowbrute -cowcatcher -cowcatchers -Cowden -cowdie -Cowdrey -cowed -cowedly -coween -Cowey -cow-eyed -Cowell -Cowen -Cower -cowered -cowerer -cowerers -cowering -coweringly -cowers -Cowes -Coweta -cow-fat -cowfish -cow-fish -cowfishes -cowflap -cowflaps -cowflop -cowflops -cowgate -Cowgill -cowgirl -cowgirls -cow-goddess -cowgram -cowgrass -cowhage -cowhages -cowhand -cowhands -cow-headed -cowheart -cowhearted -cowheel -cowherb -cowherbs -cowherd -cowherds -cowhide -cow-hide -cowhided -cowhides -cowhiding -cow-hitch -cow-hocked -cowhorn -cowhouse -cowy -cowyard -Cowichan -Cowiche -co-widow -Cowie -cowier -cowiest -co-wife -cowing -cowinner -co-winner -cowinners -cowish -cowishness -cowitch -cow-itch -cowk -cowkeeper -cowkine -Cowl -cowle -cowled -cowleech -cowleeching -Cowley -Cowles -Cowlesville -cow-lice -cowlick -cowlicks -cowlike -cowling -cowlings -Cowlitz -cowls -cowl-shaped -cowlstaff -cowman -cowmen -cow-mumble -Cown -cow-nosed -co-work -coworker -co-worker -coworkers -coworking -co-working -co-worship -cowpat -cowpath -cowpats -cowpea -cowpeas -cowpen -Cowper -Cowperian -cowperitis -cowpie -cowpies -cowplop -cowplops -cowpock -cowpoke -cowpokes -cowpony -cowpox -cow-pox -cowpoxes -cowpunch -cowpuncher -cowpunchers -cowquake -cowry -cowrie -cowries -cowrite -cowrites -cowroid -cowrote -cows -cowshard -cowsharn -cowshed -cowsheds -cowshot -cowshut -cowskin -cowskins -cowslip -cowslip'd -cowslipped -cowslips -cowslip's -cowson -cow-stealing -cowsucker -cowtail -cowthwort -cowtongue -cow-tongue -cowtown -cowweed -cowwheat -Cox -coxa -coxae -coxal -coxalgy -coxalgia -coxalgias -coxalgic -coxalgies -coxankylometer -coxarthritis -coxarthrocace -coxarthropathy -coxbones -coxcomb -coxcombess -coxcombhood -coxcomby -coxcombic -coxcombical -coxcombicality -coxcombically -coxcombity -coxcombry -coxcombries -coxcombs -coxcomical -coxcomically -coxed -Coxey -coxendix -coxes -coxy -Coxyde -coxier -coxiest -coxing -coxite -coxitis -coxocerite -coxoceritic -coxodynia -coxofemoral -coxo-femoral -coxopodite -Coxsackie -coxswain -coxswained -coxswaining -coxswains -coxwain -coxwaining -coxwains -coz -Cozad -coze -cozed -cozey -cozeier -cozeiest -cozeys -cozen -cozenage -cozenages -cozened -cozener -cozeners -cozening -cozeningly -Cozens -cozes -cozy -cozie -cozied -cozier -cozies -coziest -cozying -cozily -coziness -cozinesses -cozing -Cozmo -Cozumel -Cozza -Cozzens -cozzes -CP -cp. -CPA -CPC -CPCU -CPD -cpd. -CPE -CPFF -CPH -CPI -CPIO -CPL -CPM -CPMP -CPO -CPP -CPR -CPS -CPSR -CPSU -CPT -CPU -cpus -cputime -CPW -CQ -CR -cr. -craal -craaled -craaling -craals -Crab -crabapple -Crabb -Crabbe -crabbed -crabbedly -crabbedness -crabber -crabbery -crabbers -crabby -crabbier -crabbiest -crabbily -crabbiness -crabbing -crabbish -crabbit -crabcatcher -crabeater -crabeating -crab-eating -craber -crab-faced -crabfish -crab-fish -crabgrass -crab-grass -crab-harrow -crabhole -crabier -crabit -crablet -crablike -crabman -crabmeat -crabmill -Craborchard -crab-plover -crabs -crab's -crab-shed -crabsidle -crab-sidle -crabstick -Crabtree -crabut -crabweed -crabwise -crabwood -Cracca -craccus -crachoir -cracy -Cracidae -Cracinae -crack -crack- -crackability -crackable -crackableness -crackajack -crackback -crackbrain -crackbrained -crackbrainedness -crackdown -crackdowns -cracked -crackedness -cracker -cracker-barrel -crackerberry -crackerberries -crackerjack -crackerjacks -cracker-off -cracker-on -cracker-open -crackers -crackers-on -cracket -crackhemp -cracky -crackiness -cracking -crackings -crackjaw -crackle -crackled -crackles -crackless -crackleware -crackly -cracklier -crackliest -crackling -cracklings -crack-loo -crackmans -cracknel -cracknels -crack-off -crackpot -crackpotism -crackpots -crackpottedness -crackrope -cracks -crackskull -cracksman -cracksmen -crack-the-whip -crackup -crack-up -crackups -crack-willow -cracovienne -Cracow -cracowe -craddy -Craddock -Craddockville -cradge -cradle -cradleboard -cradlechild -cradled -cradlefellow -cradleland -cradlelike -cradlemaker -cradlemaking -cradleman -cradlemate -cradlemen -cradler -cradlers -cradles -cradle-shaped -cradleside -cradlesong -cradlesongs -cradletime -cradling -Cradock -CRAF -craft -crafted -crafter -crafty -craftier -craftiest -craftily -craftiness -craftinesses -crafting -Craftint -Craftype -craftless -craftly -craftmanship -Crafton -crafts -Craftsbury -craftsman -craftsmanly -craftsmanlike -craftsmanship -craftsmanships -craftsmaster -craftsmen -craftsmenship -craftsmenships -craftspeople -craftsperson -craftswoman -craftwork -craftworker -Crag -crag-and-tail -crag-bound -crag-built -crag-carven -crag-covered -crag-fast -Cragford -craggan -cragged -craggedly -craggedness -Craggy -Craggie -craggier -craggiest -craggily -cragginess -craglike -crags -crag's -cragsman -cragsmen -Cragsmoor -cragwork -cray -craichy -craie -craye -crayer -crayfish -crayfishes -crayfishing -Craig -Craigavon -craighle -Craigie -Craigmont -craigmontite -Craigsville -Craigville -Craik -craylet -Crailsheim -Crain -Crayne -Craynor -crayon -crayoned -crayoning -crayonist -crayonists -crayons -crayonstone -Craiova -craisey -craythur -craizey -crajuru -crake -craked -crakefeet -crake-needles -craker -crakes -craking -crakow -Craley -Cralg -CRAM -cramasie -crambambulee -crambambuli -Crambe -cramberry -crambes -crambid -Crambidae -Crambinae -cramble -crambly -crambo -cramboes -crambos -Crambus -cramel -Cramer -Cramerton -cram-full -crammed -crammel -crammer -crammers -cramming -crammingly -cramoisy -cramoisie -cramoisies -cramp -crampbit -cramped -crampedness -cramper -crampet -crampette -crampfish -crampfishes -crampy -cramping -crampingly -cramp-iron -crampish -crampit -crampits -crampon -cramponnee -crampons -crampoon -crampoons -cramps -cramp's -crams -Cran -Cranach -cranage -Cranaus -cranberry -cranberries -cranberry's -Cranbury -crance -crancelin -cranch -cranched -cranches -cranching -Crandale -Crandall -crandallite -Crandell -Crandon -Crane -cranebill -craned -crane-fly -craney -cranely -cranelike -craneman -cranemanship -cranemen -Craner -cranes -crane's -cranesbill -crane's-bill -cranesman -Cranesville -cranet -craneway -Cranford -crang -crany -crani- -Crania -craniacromial -craniad -cranial -cranially -cranian -Craniata -craniate -craniates -cranic -craniectomy -craning -craninia -craniniums -cranio- -cranio-acromial -cranio-aural -craniocele -craniocerebral -cranioclasis -cranioclasm -cranioclast -cranioclasty -craniodidymus -craniofacial -craniognomy -craniognomic -craniognosy -craniograph -craniographer -craniography -cranioid -craniol -craniology -craniological -craniologically -craniologist -craniom -craniomalacia -craniomaxillary -craniometer -craniometry -craniometric -craniometrical -craniometrically -craniometrist -craniopagus -craniopathy -craniopathic -craniopharyngeal -craniopharyngioma -craniophore -cranioplasty -craniopuncture -craniorhachischisis -craniosacral -cranioschisis -cranioscopy -cranioscopical -cranioscopist -craniospinal -craniostenosis -craniostosis -Craniota -craniotabes -craniotympanic -craniotome -craniotomy -craniotomies -craniotopography -craniovertebral -cranium -craniums -crank -crankbird -crankcase -crankcases -crankdisk -crank-driven -cranked -cranker -crankery -crankest -cranky -crankier -crankiest -crankily -crankiness -cranking -crankish -crankism -crankle -crankled -crankles -crankless -crankly -crankling -crankman -crankness -Cranko -crankous -crankpin -crankpins -crankplate -Cranks -crankshaft -crankshafts -crank-sided -crankum -Cranmer -crannage -crannel -crannequin -cranny -crannia -crannied -crannies -crannying -crannock -crannog -crannoge -crannoger -crannoges -crannogs -cranreuch -cransier -Cranston -crantara -crants -Cranwell -crap -crapaud -crapaudine -crape -craped -crapefish -crape-fish -crapehanger -crapelike -crapes -crapette -crapy -craping -Crapo -crapon -crapped -crapper -crappers -crappy -crappie -crappier -crappies -crappiest -crappin -crappiness -crapping -crappit-head -crapple -crappo -craps -crapshooter -crapshooters -crapshooting -crapula -crapulate -crapulence -crapulency -crapulent -crapulous -crapulously -crapulousness -crapwa -craquelure -craquelures -crare -Crary -Craryville -CRAS -crases -crash -Crashaw -crash-dive -crash-dived -crash-diving -crash-dove -crashed -crasher -crashers -crashes -crashing -crashingly -crash-land -crash-landing -crashproof -crashworthy -crashworthiness -crasis -craspedal -craspedodromous -craspedon -Craspedota -craspedotal -craspedote -craspedum -crass -crassament -crassamentum -crasser -crassest -crassier -crassilingual -Crassina -crassis -crassities -crassitude -crassly -crassness -Crassula -Crassulaceae -crassulaceous -Crassus -crat -Crataegus -Crataeis -Crataeva -cratch -cratchens -cratches -cratchins -crate -crated -crateful -cratemaker -cratemaking -crateman -cratemen -Crater -crateral -cratered -Craterellus -Craterid -crateriform -cratering -Crateris -craterkin -craterless -craterlet -craterlike -craterous -craters -crater-shaped -crates -craticular -Cratinean -crating -cratometer -cratometry -cratometric -craton -cratonic -cratons -cratsmanship -Cratus -craunch -craunched -craunches -craunching -craunchingly -cravat -cravats -cravat's -cravatted -cravatting -crave -craved -Craven -cravened -Cravenette -Cravenetted -Cravenetting -cravenhearted -cravening -cravenly -cravenness -cravens -craver -cravers -craves -craving -cravingly -cravingness -cravings -cravo -Craw -crawberry -craw-craw -crawdad -crawdads -crawfish -crawfished -crawfishes -crawfishing -crawfoot -crawfoots -Crawford -Crawfordsville -Crawfordville -crawful -crawl -crawl-a-bottom -crawled -Crawley -crawleyroot -crawler -crawlerize -crawlers -crawly -crawlie -crawlier -crawliest -crawling -crawlingly -crawls -crawlsome -crawlspace -crawl-up -crawlway -crawlways -crawm -craws -crawtae -Crawthumper -Crax -craze -crazed -crazed-headed -crazedly -crazedness -crazes -crazy -crazycat -crazy-drunk -crazier -crazies -craziest -crazy-headed -crazily -crazy-looking -crazy-mad -craziness -crazinesses -crazing -crazingmill -crazy-pate -crazy-paving -crazyweed -crazy-work -CRB -CRC -crcao -crche -Crcy -CRD -cre -crea -creach -creachy -cread -creagh -creaght -creak -creaked -creaker -creaky -creakier -creakiest -creakily -creakiness -creaking -creakingly -creaks -cream -creambush -creamcake -cream-cheese -cream-color -cream-colored -creamcup -creamcups -creamed -Creamer -creamery -creameries -creameryman -creamerymen -creamers -cream-faced -cream-flowered -creamfruit -creamy -cream-yellow -creamier -creamiest -creamily -creaminess -creaming -creamlaid -creamless -creamlike -creammaker -creammaking -creamometer -creams -creamsacs -cream-slice -creamware -cream-white -Crean -creance -creancer -creant -crease -creased -creaseless -creaser -crease-resistant -creasers -creases -creashaks -creasy -creasier -creasiest -creasing -creasol -creasot -creat -creatable -create -created -createdness -creates -Creath -creatic -creatin -creatine -creatinephosphoric -creatines -creating -creatinin -creatinine -creatininemia -creatins -creatinuria -Creation -creational -creationary -creationism -creationist -creationistic -creations -creative -creatively -creativeness -creativity -creativities -creatophagous -Creator -creatorhood -creatorrhea -creators -creator's -creatorship -creatotoxism -creatress -creatrix -creatural -creature -creaturehood -creatureless -creaturely -creatureliness -creatureling -creatures -creature's -creatureship -creaturize -creaze -crebri- -crebricostate -crebrisulcate -crebrity -crebrous -creche -creches -Crecy -creda -credal -creddock -credence -credences -credencive -credenciveness -credenda -credendum -credens -credensive -credensiveness -credent -credential -credentialed -credentialism -credentials -credently -credenza -credenzas -credere -credibility -credibilities -credible -credibleness -credibly -credit -creditability -creditabilities -creditable -creditableness -creditably -credited -crediting -creditive -creditless -creditor -creditors -creditor's -creditorship -creditress -creditrix -credits -crednerite -Credo -credos -credulity -credulities -credulous -credulously -credulousness -Cree -creed -creedal -creedalism -creedalist -creedbound -Creede -creeded -creedist -creedite -creedless -creedlessness -Creedmoor -creedmore -Creedon -creeds -creed's -creedsman -Creek -creeker -creekfish -creekfishes -creeky -Creeks -creek's -creekside -creekstuff -Creel -creeled -creeler -creeling -creels -creem -creen -creep -creepage -creepages -creeper -creepered -creeperless -creepers -creep-fed -creep-feed -creep-feeding -creephole -creepy -creepy-crawly -creepie -creepie-peepie -creepier -creepies -creepiest -creepily -creepiness -creeping -creepingly -creepmouse -creepmousy -creeps -Crees -creese -creeses -creesh -creeshed -creeshes -creeshy -creeshie -creeshing -Crefeld -CREG -Creigh -Creight -Creighton -Creil -creirgist -Crelin -Crellen -cremaillere -cremains -cremant -cremaster -cremasterial -cremasteric -cremate -cremated -cremates -cremating -cremation -cremationism -cremationist -cremations -cremator -crematory -crematoria -crematorial -crematories -crematoriria -crematoririums -crematorium -crematoriums -cremators -crembalum -creme -Cremer -cremerie -cremes -Cremini -cremnophobia -cremocarp -cremometer -Cremona -cremone -cremor -cremorne -cremosin -cremule -CREN -crena -crenae -crenallation -crenate -crenated -crenate-leaved -crenately -crenate-toothed -crenation -crenato- -crenature -crenel -crenelate -crenelated -crenelates -crenelating -crenelation -crenelations -crenele -creneled -crenelee -crenelet -creneling -crenellate -crenellated -crenellating -crenellation -crenelle -crenelled -crenelles -crenelling -crenels -crengle -crenic -crenitic -crenology -crenotherapy -Crenothrix -Crenshaw -crenula -crenulate -crenulated -crenulation -creodont -Creodonta -creodonts -Creola -Creole -creole-fish -creole-fishes -creoleize -creoles -creolian -Creolin -creolism -creolite -creolization -creolize -creolized -creolizing -Creon -creophagy -creophagia -creophagism -creophagist -creophagous -creosol -creosols -creosote -creosoted -creosoter -creosotes -creosotic -creosoting -crepance -crepe -crepe-backed -creped -crepehanger -crepey -crepeier -crepeiest -crepe-paper -crepes -Crepy -crepidoma -crepidomata -Crepidula -crepier -crepiest -Crepin -crepine -crepiness -creping -Crepis -crepitacula -crepitaculum -crepitant -crepitate -crepitated -crepitating -crepitation -crepitous -crepitus -creply -crepon -crepons -crept -crepuscle -crepuscular -crepuscule -crepusculine -crepusculum -Cres -Cresa -cresamine -Cresbard -cresc -Crescantia -Crescas -Crescen -crescence -crescendi -Crescendo -crescendoed -crescendoing -crescendos -Crescent -crescentade -crescentader -crescented -crescent-formed -Crescentia -crescentic -crescentiform -crescenting -crescentlike -crescent-lit -crescentoid -crescent-pointed -crescents -crescent's -crescent-shaped -crescentwise -Crescin -Crescint -crescive -crescively -Cresco -crescograph -crescographic -cresegol -Cresida -cresyl -cresylate -cresylene -cresylic -cresylite -cresyls -Cresius -cresive -cresol -cresolin -cresoline -cresols -cresorcin -cresorcinol -cresotate -cresotic -cresotinate -cresotinic -cresoxy -cresoxid -cresoxide -Cresphontes -Crespi -Crespo -cress -cressed -Cressey -cresselle -cresses -cresset -cressets -Cressi -Cressy -Cressida -Cressie -cressier -cressiest -Cresskill -Cressler -Cresson -Cressona -cressweed -cresswort -crest -crestal -crested -crestfallen -crest-fallen -crestfallenly -crestfallenness -crestfallens -crestfish -cresting -crestings -crestless -Crestline -crestmoreite -Creston -Crestone -crests -Crestview -Crestwood -Creswell -Creta -cretaceo- -Cretaceous -cretaceously -Cretacic -Cretan -Crete -cretefaction -Cretheis -Cretheus -Cretic -creticism -cretics -cretify -cretification -cretin -cretinic -cretinism -cretinistic -cretinization -cretinize -cretinized -cretinizing -cretinoid -cretinous -cretins -cretion -cretionary -Cretism -cretize -Creto-mycenaean -cretonne -cretonnes -cretoria -Creusa -Creuse -Creusois -Creusot -creutzer -crevalle -crevalles -crevass -crevasse -crevassed -crevasses -crevassing -Crevecoeur -crevet -crevette -crevice -creviced -crevices -crevice's -crevis -crew -crew-cropped -crewcut -Crewe -crewed -crewel -crewelist -crewellery -crewels -crewelwork -crewel-work -crewer -crewet -crewing -crewless -crewman -crewmanship -crewmen -crewneck -crew-necked -crews -Crex -CRFC -CRFMP -CR-glass -CRI -CRY -cry- -cryable -cryaesthesia -cryal -cryalgesia -Cryan -criance -cryanesthesia -criant -crib -crybaby -crybabies -cribbage -cribbages -cribbed -cribber -cribbers -cribbing -cribbings -crib-bit -crib-bite -cribbiter -crib-biter -cribbiting -crib-biting -crib-bitten -cribble -cribbled -cribbling -cribella -cribellum -crible -cribo -cribose -cribral -cribrate -cribrately -cribration -cribriform -cribriformity -cribrose -cribrosity -cribrous -cribs -crib's -cribwork -cribworks -cric -cricetid -Cricetidae -cricetids -cricetine -Cricetus -Crichton -Crick -crick-crack -cricke -cricked -crickey -cricket -cricketed -cricketer -cricketers -crickety -cricketing -cricketings -cricketlike -crickets -cricket's -cricking -crickle -cricks -crico- -cricoarytenoid -cricoid -cricoidectomy -cricoids -cricopharyngeal -cricothyreoid -cricothyreotomy -cricothyroid -cricothyroidean -cricotomy -cricotracheotomy -Cricotus -criddle -Criders -cried -criey -crier -criers -cries -cryesthesia -Crifasi -crig -crying -cryingly -crikey -Crile -Crim -crim. -crimble -crime -Crimea -Crimean -crimeful -crimeless -crimelessness -crimeproof -crimes -crime's -criminal -criminaldom -criminalese -criminalism -criminalist -criminalistic -criminalistician -criminalistics -criminality -criminalities -criminally -criminalness -criminaloid -criminals -criminate -criminated -criminating -crimination -criminative -criminator -criminatory -crimine -crimini -criminis -criminogenesis -criminogenic -criminol -criminology -criminologic -criminological -criminologically -criminologies -criminologist -criminologists -criminosis -criminous -criminously -criminousness -crimison -crimmer -crimmers -crimmy -crymoanesthesia -crymodynia -crimogenic -Crimora -crymotherapy -crimp -crimpage -crimped -crimper -crimpers -crimpy -crimpier -crimpiest -crimpy-haired -crimpiness -crimping -crimple -crimpled -Crimplene -crimples -crimpling -crimpness -crimps -crimson -crimson-banded -crimson-barred -crimson-billed -crimson-carmine -crimson-colored -crimson-dyed -crimsoned -crimson-fronted -crimsony -crimsoning -crimsonly -crimson-lined -crimsonness -crimson-petaled -crimson-purple -crimsons -crimson-scarfed -crimson-spotted -crimson-tipped -crimson-veined -crimson-violet -CRIN -crinal -crinanite -crinate -crinated -crinatory -crinc- -crinch -crine -crined -crinel -crinet -cringe -cringed -cringeling -cringer -cringers -cringes -cringing -cringingly -cringingness -cringle -cringle-crangle -cringles -crini- -crinicultural -criniculture -crinid -criniere -criniferous -Criniger -crinigerous -crinion -criniparous -crinital -crinite -crinites -crinitory -crinivorous -crink -crinkle -crinkle-crankle -crinkled -crinkleroot -crinkles -crinkly -crinklier -crinkliest -crinkly-haired -crinkliness -crinkling -crinkum -crinkum-crankum -crinogenic -crinoid -crinoidal -Crinoidea -crinoidean -crinoids -crinolette -crinoline -crinolines -crinose -crinosity -crinula -Crinum -crinums -crio- -cryo- -cryo-aerotherapy -cryobiology -cryobiological -cryobiologically -cryobiologist -crioboly -criobolium -cryocautery -criocephalus -Crioceras -crioceratite -crioceratitic -Crioceris -cryochore -cryochoric -cryoconite -cryogen -cryogeny -cryogenic -cryogenically -cryogenics -cryogenies -cryogens -cryohydrate -cryohydric -cryolite -cryolites -criolla -criollas -criollo -criollos -cryology -cryological -cryometer -cryometry -cryonic -cryonics -cryopathy -cryophile -cryophilic -cryophyllite -cryophyte -criophore -cryophoric -Criophoros -Criophorus -cryophorus -cryoplankton -cryoprobe -cryoprotective -cryo-pump -cryoscope -cryoscopy -cryoscopic -cryoscopies -cryosel -cryosphere -cryospheric -criosphinges -criosphinx -criosphinxes -cryostase -cryostat -cryostats -cryosurgeon -cryosurgery -cryosurgical -cryotherapy -cryotherapies -cryotron -cryotrons -crip -cripe -cripes -Crippen -crippied -crippingly -cripple -crippled -crippledom -crippleness -crippler -cripplers -cripples -cripply -crippling -cripplingly -Cripps -crips -crypt -crypt- -crypta -cryptaesthesia -cryptal -cryptamnesia -cryptamnesic -cryptanalysis -cryptanalyst -cryptanalytic -cryptanalytical -cryptanalytically -cryptanalytics -cryptanalyze -cryptanalyzed -cryptanalyzing -cryptarch -cryptarchy -crypted -Crypteronia -Crypteroniaceae -cryptesthesia -cryptesthetic -cryptic -cryptical -cryptically -crypticness -crypto -crypto- -cryptoagnostic -cryptoanalysis -cryptoanalyst -cryptoanalytic -cryptoanalytically -cryptoanalytics -cryptobatholithic -cryptobranch -Cryptobranchia -Cryptobranchiata -cryptobranchiate -Cryptobranchidae -Cryptobranchus -Crypto-calvinism -Crypto-calvinist -Crypto-calvinistic -Cryptocarya -cryptocarp -cryptocarpic -cryptocarpous -Crypto-catholic -Crypto-catholicism -Cryptocephala -cryptocephalous -Cryptocerata -cryptocerous -Crypto-christian -cryptoclastic -Cryptocleidus -cryptoclimate -cryptoclimatology -cryptococcal -cryptococci -cryptococcic -cryptococcosis -Cryptococcus -cryptocommercial -cryptocrystalline -cryptocrystallization -cryptodeist -cryptodynamic -Cryptodira -cryptodiran -cryptodire -cryptodirous -cryptodouble -Crypto-fenian -cryptogam -cryptogame -cryptogamy -Cryptogamia -cryptogamian -cryptogamic -cryptogamical -cryptogamist -cryptogamous -cryptogenetic -cryptogenic -cryptogenous -Cryptoglaux -cryptoglioma -cryptogram -Cryptogramma -cryptogrammatic -cryptogrammatical -cryptogrammatist -cryptogrammic -cryptograms -cryptograph -cryptographal -cryptographer -cryptographers -cryptography -cryptographic -cryptographical -cryptographically -cryptographies -cryptographist -cryptoheresy -cryptoheretic -cryptoinflationist -Crypto-jesuit -Crypto-jew -Crypto-jewish -cryptolite -cryptolith -cryptology -cryptologic -cryptological -cryptologist -cryptolunatic -cryptomere -Cryptomeria -cryptomerous -cryptometer -cryptomnesia -cryptomnesic -cryptomonad -Cryptomonadales -Cryptomonadina -cryptonema -Cryptonemiales -cryptoneurous -cryptonym -cryptonymic -cryptonymous -cryptopapist -cryptoperthite -Cryptophagidae -Cryptophyceae -cryptophyte -cryptophytic -cryptophthalmos -cryptopyic -cryptopin -cryptopine -cryptopyrrole -cryptoporticus -Cryptoprocta -cryptoproselyte -cryptoproselytism -Crypto-protestant -cryptorchid -cryptorchidism -cryptorchis -cryptorchism -Cryptorhynchus -Crypto-royalist -cryptorrhesis -cryptorrhetic -cryptos -cryptoscope -cryptoscopy -Crypto-socinian -cryptosplenetic -Cryptostegia -cryptostoma -Cryptostomata -cryptostomate -cryptostome -Cryptotaenia -cryptous -cryptovalence -cryptovalency -cryptovolcanic -cryptovolcanism -cryptoxanthin -cryptozygy -cryptozygosity -cryptozygous -Cryptozoic -cryptozoite -cryptozonate -Cryptozonia -Cryptozoon -crypts -Crypturi -Crypturidae -CRIS -Crisey -Criseyde -Crises -Crisfield -crisic -crisis -Crisium -crisle -CRISP -Crispa -Crispas -crispate -crispated -crispation -crispature -crispbread -crisped -crisped-leaved -Crispen -crispened -crispening -crispens -crisper -crispers -crispest -Crispi -crispy -crispier -crispiest -crispily -Crispin -crispine -crispiness -crisping -Crispinian -crispins -crisp-leaved -crisply -crispness -crispnesses -crisps -criss -crissa -crissal -crisscross -criss-cross -crisscrossed -crisscrosses -crisscrossing -crisscross-row -crisset -Crissy -Crissie -crissum -Crist -cryst -cryst. -Crista -Crysta -Cristabel -cristae -Cristal -Crystal -crystal-clear -crystal-clearness -crystal-dropping -crystaled -crystal-flowing -crystal-gazer -crystal-girded -crystaling -Crystalite -crystalitic -crystalize -crystall -crystal-leaved -crystalled -crystallic -crystalliferous -crystalliform -crystalligerous -crystallike -crystallin -crystalline -crystalling -crystallinity -crystallisability -crystallisable -crystallisation -crystallise -crystallised -crystallising -crystallite -crystallites -crystallitic -crystallitis -crystallizability -crystallizable -crystallization -crystallizations -crystallize -crystallized -crystallizer -crystallizes -crystallizing -crystallo- -crystalloblastic -crystallochemical -crystallochemistry -crystallod -crystallogenesis -crystallogenetic -crystallogeny -crystallogenic -crystallogenical -crystallogy -crystallogram -crystallograph -crystallographer -crystallographers -crystallography -crystallographic -crystallographical -crystallographically -crystalloid -crystalloidal -crystallology -crystalloluminescence -crystallomagnetic -crystallomancy -crystallometry -crystallometric -crystallophyllian -crystallophobia -Crystallose -crystallurgy -crystal-producing -crystals -crystal's -crystal-smooth -crystal-streaming -crystal-winged -crystalwort -cristate -cristated -Cristatella -cryste -Cristen -Cristi -Cristy -Cristian -Cristiano -crystic -Cristie -Crystie -cristiform -Cristin -Cristina -Cristine -Cristineaux -Cristino -Cristiona -Cristionna -Cristispira -Cristivomer -Cristobal -cristobalite -Cristoforo -crystograph -crystoleum -Crystolon -Cristophe -cristopher -crystosphene -Criswell -crit -crit. -critch -Critchfield -criteria -criteriia -criteriions -criteriology -criterion -criterional -criterions -criterium -crith -Crithidia -crithmene -crithomancy -critic -critical -criticality -critically -criticalness -criticaster -criticasterism -criticastry -criticisable -criticise -criticised -criticiser -criticises -criticising -criticisingly -criticism -criticisms -criticism's -criticist -criticizable -criticize -criticized -criticizer -criticizers -criticizes -criticizing -criticizingly -critickin -critico- -critico-analytically -critico-historical -critico-poetical -critico-theological -critics -critic's -criticship -criticsm -criticule -critique -critiqued -critiques -critiquing -critism -critize -critling -Critta -Crittenden -critter -critteria -critters -crittur -critturs -Critz -Crius -crivetz -Crivitz -crizzel -crizzle -crizzled -crizzling -CRL -CRLF -cro -croak -croaked -Croaker -croakers -croaky -croakier -croakiest -croakily -croakiness -croaking -croaks -croape -Croat -Croatan -Croatia -Croatian -croc -Crocanthemum -crocard -Croce -Croceatas -croceic -crocein -croceine -croceines -croceins -croceous -crocetin -croceus -croche -Crocheron -crochet -crocheted -crocheter -crocheters -crocheteur -crocheting -crochets -croci -crociary -crociate -crocidolite -Crocidura -crocin -crocine -crock -crockard -crocked -Crocker -crockery -crockeries -crockeryware -crocket -crocketed -crocketing -crockets -Crockett -Crocketville -Crockford -crocky -crocking -crocko -crocks -crocodile -crocodilean -crocodiles -Crocodilia -crocodilian -Crocodilidae -Crocodylidae -crocodiline -crocodilite -crocodility -crocodiloid -Crocodilus -Crocodylus -crocoisite -crocoite -crocoites -croconate -croconic -Crocosmia -crocs -Crocus -crocused -crocuses -crocuta -Croesi -Croesus -Croesuses -Croesusi -Crofoot -Croft -crofter -crofterization -crofterize -crofters -crofting -croftland -Crofton -crofts -Croghan -croh -croy -croyden -Croydon -croighle -croiik -croyl -crois -croisad -croisade -croisard -croise -croisee -croises -croisette -croissant -croissante -croissants -Croix -crojack -crojik -crojiks -croker -Crokinole -Crom -Cro-Magnon -cromaltite -crombec -crome -Cromer -Cromerian -cromfordite -cromlech -cromlechs -cromme -crommel -Crommelin -Cromona -cromorna -cromorne -Crompton -cromster -Cromwell -Cromwellian -Cronartium -crone -croneberry -cronel -Croner -crones -cronet -crony -Cronia -Cronian -CRONIC -cronie -cronied -cronies -cronying -cronyism -cronyisms -Cronin -Cronyn -cronish -cronk -cronkness -Cronos -cronstedtite -Cronus -crooch -crood -croodle -crooisite -crook -crookback -crookbacked -crook-backed -crookbill -crookbilled -crooked -crookedbacked -crooked-backed -crooked-billed -crooked-branched -crooked-clawed -crooked-eyed -crookeder -crookedest -crooked-foot -crooked-legged -crookedly -crooked-limbed -crooked-lined -crooked-lipped -crookedness -crookednesses -crooked-nosed -crooked-pated -crooked-shouldered -crooked-stemmed -crooked-toothed -crooked-winged -crooked-wood -crooken -crookery -crookeries -Crookes -crookesite -crookfingered -crookheaded -crooking -crookkneed -crookle -crooklegged -crookneck -crooknecked -crooknecks -crooknosed -Crooks -crookshouldered -crooksided -crooksterned -Crookston -Crooksville -crooktoothed -crool -Croom -Croomia -croon -crooned -crooner -crooners -crooning -crooningly -croons -croose -crop -crop-bound -crop-dust -crop-duster -crop-dusting -crop-ear -crop-eared -crop-farming -crop-full -crop-haired -crophead -crop-headed -cropland -croplands -cropless -cropman -crop-nosed -croppa -cropped -cropper -croppers -cropper's -croppy -croppie -croppies -cropping -cropplecrown -crop-producing -crops -crop's -Cropsey -Cropseyville -crop-shaped -cropshin -cropsick -crop-sick -cropsickness -crop-tailed -cropweed -Cropwell -croquet -croqueted -croqueting -croquets -croquette -croquettes -croquignole -croquis -crore -crores -crosa -Crosby -Crosbyton -crose -croset -crosette -croshabell -crosier -crosiered -crosiers -Crosley -croslet -crosne -crosnes -Cross -cross- -crossability -crossable -cross-adoring -cross-aisle -cross-appeal -crossarm -cross-armed -crossarms -crossband -crossbanded -cross-banded -crossbanding -cross-banding -crossbar -cross-bar -crossbarred -crossbarring -crossbars -crossbar's -crossbbred -crossbeak -cross-beak -crossbeam -cross-beam -crossbeams -crossbearer -cross-bearer -cross-bearing -cross-bearings -cross-bedded -cross-bedding -crossbelt -crossbench -cross-bench -cross-benched -cross-benchedness -crossbencher -cross-bencher -cross-bias -cross-biased -cross-biassed -crossbill -cross-bill -cross-bind -crossbirth -crossbite -crossbolt -crossbolted -cross-bombard -cross-bond -crossbones -cross-bones -Crossbow -cross-bow -crossbowman -crossbowmen -crossbows -crossbred -cross-bred -crossbreds -crossbreed -cross-breed -crossbreeded -crossbreeding -crossbreeds -cross-bridge -cross-brush -cross-bun -cross-buttock -cross-buttocker -cross-carve -cross-channel -crosscheck -cross-check -cross-church -cross-claim -cross-cloth -cross-compound -cross-connect -cross-country -cross-course -crosscourt -cross-cousin -crosscrosslet -cross-crosslet -cross-crosslets -crosscurrent -crosscurrented -crosscurrents -cross-curve -crosscut -cross-cut -crosscuts -crosscutter -crosscutting -cross-days -cross-datable -cross-date -cross-dating -cross-dye -cross-dyeing -cross-disciplinary -cross-division -cross-drain -Crosse -crossed -crossed-h -crossed-out -cross-eye -cross-eyed -cross-eyedness -cross-eyes -cross-elbowed -crosser -crossers -crosses -crossest -Crossett -crossette -cross-examination -cross-examine -cross-examined -cross-examiner -cross-examining -cross-face -cross-fade -cross-faded -cross-fading -crossfall -cross-feed -cross-ferred -cross-ferring -cross-fertile -crossfertilizable -cross-fertilizable -cross-fertilization -cross-fertilize -cross-fertilized -cross-fertilizing -cross-fiber -cross-file -cross-filed -cross-filing -cross-finger -cross-fingered -crossfire -cross-fire -crossfired -crossfiring -cross-firing -crossfish -cross-fish -cross-fissured -cross-fixed -crossflow -crossflower -cross-flower -cross-folded -crossfoot -cross-fox -cross-fur -cross-gagged -cross-garnet -cross-gartered -cross-grain -cross-grained -cross-grainedly -crossgrainedness -cross-grainedness -crosshackle -crosshair -crosshairs -crosshand -cross-handed -cross-handled -crosshatch -cross-hatch -crosshatched -crosshatcher -cross-hatcher -crosshatches -crosshatching -cross-hatching -crosshaul -crosshauling -crosshead -cross-head -cross-headed -cross-hilted -cross-immunity -cross-immunization -cross-index -crossing -crossing-out -crossing-over -crossings -cross-interrogate -cross-interrogation -cross-interrogator -cross-interrogatory -cross-invite -crossite -crossjack -cross-jack -cross-joined -cross-jostle -cross-laced -cross-laminated -cross-land -crosslap -cross-lap -cross-latticed -cross-leaved -cross-legged -cross-leggedly -cross-leggedness -crosslegs -crossley -crosslet -crossleted -crosslets -cross-level -crossly -cross-license -cross-licensed -cross-licensing -cross-lift -crosslight -cross-light -crosslighted -crosslike -crossline -crosslink -cross-link -cross-locking -cross-lots -cross-marked -cross-mate -cross-mated -cross-mating -cross-multiplication -crossness -Crossnore -crossopodia -crossopt -crossopterygian -Crossopterygii -Crossosoma -Crossosomataceae -crossosomataceous -cross-out -crossover -cross-over -crossovers -crossover's -crosspatch -cross-patch -crosspatches -crosspath -cross-pawl -cross-peal -crosspiece -cross-piece -crosspieces -cross-piled -cross-ply -cross-plough -cross-plow -crosspoint -cross-point -crosspoints -cross-pollen -cross-pollenize -cross-pollinate -cross-pollinated -cross-pollinating -cross-pollination -cross-pollinize -crosspost -cross-post -cross-purpose -cross-purposes -cross-question -cross-questionable -cross-questioner -cross-questioning -crossrail -cross-ratio -cross-reaction -cross-reading -cross-refer -cross-reference -cross-remainder -crossroad -cross-road -crossroading -Crossroads -crossrow -cross-row -crossruff -cross-ruff -cross-sail -cross-section -cross-sectional -cross-shaped -cross-shave -cross-slide -cross-spale -cross-spall -cross-springer -cross-staff -cross-staffs -cross-star -cross-staves -cross-sterile -cross-sterility -cross-stitch -cross-stitching -cross-stone -cross-stratification -cross-stratified -cross-striated -cross-string -cross-stringed -cross-stringing -cross-striped -cross-strung -cross-sue -cross-surge -crosstail -cross-tail -crosstalk -crosstie -crosstied -crossties -cross-tine -crosstoes -crosstown -cross-town -crosstrack -crosstree -cross-tree -crosstrees -cross-validation -cross-vault -cross-vaulted -cross-vaulting -cross-vein -cross-veined -cross-ventilate -cross-ventilation -Crossville -cross-vine -cross-voting -crossway -cross-way -crossways -crosswalk -crosswalks -crossweb -crossweed -Crosswicks -crosswind -cross-wind -crosswise -crosswiseness -crossword -crossworder -cross-worder -crosswords -crossword's -crosswort -cross-wrapped -crost -crostarie -Croswell -crotal -Crotalaria -crotalic -crotalid -Crotalidae -crotaliform -crotalin -Crotalinae -crotaline -crotalism -crotalo -crotaloid -crotalum -Crotalus -crotaphic -crotaphion -crotaphite -crotaphitic -Crotaphytus -crotch -crotched -crotches -crotchet -crotcheted -crotcheteer -crotchety -crotchetiness -crotcheting -crotchets -crotchy -crotching -crotchwood -Croteau -crotesco -Crothersville -Crotia -crotyl -crotin -Croton -crotonaldehyde -crotonate -crotonbug -croton-bug -Crotone -crotonic -crotonyl -crotonylene -crotonization -Croton-on-Hudson -crotons -Crotophaga -Crotopus -crottal -crottels -Crotty -crottle -Crotus -crouch -crouchant -crouchback -crouche -crouched -croucher -crouches -crouchie -crouching -crouchingly -crouchmas -crouch-ware -crouke -crounotherapy -croup -croupade -croupal -croupe -crouperbush -croupes -croupy -croupier -croupiers -croupiest -croupily -croupiness -croupon -croupous -croups -Crouse -crousely -Crouseville -croustade -crout -croute -crouth -crouton -croutons -Crow -crowbait -crowbar -crow-bar -crowbars -crowbell -crowberry -crowberries -crowbill -crow-bill -crowboot -crowd -crowded -crowdedly -crowdedness -Crowder -crowders -crowdy -crowdie -crowdies -crowding -crowdle -crowds -crowdweed -Crowe -crowed -Crowell -crower -crowers -crowfeet -crowflower -crow-flower -crowfoot -crowfooted -crowfoots -crow-garlic -Crowheart -crowhop -crowhopper -crowing -crowingly -crowkeeper -crowl -crow-leek -Crowley -Crown -crownal -crownation -crownband -crownbeard -crowncapping -crowned -crowner -crowners -crownet -crownets -crown-glass -crowning -crownland -crown-land -crownless -crownlet -crownlike -crownling -crownmaker -crownment -crown-of-jewels -crown-of-thorns -crown-paper -crownpiece -crown-piece -crown-post -Crowns -crown-scab -crown-shaped -Crownsville -crown-wheel -crownwork -crown-work -crownwort -crow-pheasant -crow-quill -crows -crow's-feet -crow's-foot -crowshay -crow-silk -crow's-nest -crow-soap -crowstep -crow-step -crowstepped -crowsteps -crowstick -crowstone -crow-stone -crowtoe -crow-toe -crow-tread -crow-victuals -Crowville -croze -crozed -crozer -crozers -crozes -Crozet -Crozier -croziers -crozing -crozle -crozzle -crozzly -CRP -crpe -CRRES -CRS -CRSAB -CRT -CRTC -crts -cru -crub -crubeen -Cruce -cruces -crucethouse -cruche -crucial -cruciality -crucially -crucialness -crucian -Crucianella -crucians -cruciate -cruciated -cruciately -cruciating -cruciation -cruciato- -crucible -crucibles -Crucibulum -crucifer -Cruciferae -cruciferous -crucifers -crucify -crucificial -crucified -crucifier -crucifies -crucifyfied -crucifyfying -crucifige -crucifying -crucifix -crucifixes -Crucifixion -crucifixions -cruciform -cruciformity -cruciformly -crucigerous -crucily -crucilly -Crucis -cruck -crucks -crud -crudded -Crudden -cruddy -cruddier -crudding -cruddle -crude -crudely -crudelity -crudeness -cruder -crudes -crudest -crudy -crudites -crudity -crudities -crudle -cruds -crudwort -cruel -crueler -cruelest -cruelhearted -cruel-hearted -cruelize -crueller -cruellest -cruelly -cruelness -cruels -cruelty -cruelties -cruent -cruentate -cruentation -cruentous -cruet -cruety -cruets -Cruger -Cruickshank -Cruyff -Cruikshank -cruise -cruised -cruiser -cruisers -cruiserweight -cruises -cruiseway -cruising -cruisingly -cruiskeen -cruisken -cruive -crull -cruller -crullers -Crum -crumb -crumbable -crumbcloth -crumbed -crumber -crumbers -crumby -crumbier -crumbiest -crumbing -crumble -crumbled -crumblement -crumbles -crumblet -crumbly -crumblier -crumbliest -crumbliness -crumbling -crumblingness -crumblings -crumbs -crumbum -crumbums -crumen -crumena -crumenal -crumhorn -crumlet -crummable -crummed -crummer -crummy -crummie -crummier -crummies -crummiest -crumminess -crumming -crummock -crump -crumped -crumper -crumpet -crumpets -crumpy -crumping -crumple -crumpled -Crumpler -crumples -crumply -crumpling -crumps -Crumpton -Crumrod -crumster -crunch -crunchable -crunched -cruncher -crunchers -crunches -crunchy -crunchier -crunchiest -crunchily -crunchiness -crunching -crunchingly -crunchingness -crunchweed -crunk -crunkle -crunodal -crunode -crunodes -crunt -cruor -cruorin -cruors -crup -cruppen -crupper -cruppered -cruppering -cruppers -crura -crural -crureus -crurogenital -cruroinguinal -crurotarsal -crus -crusade -crusaded -crusader -crusaders -Crusades -crusading -crusado -crusadoes -crusados -Crusca -cruse -cruses -cruset -crusets -crush -crushability -crushable -crushableness -crushed -crusher -crushers -crushes -crushing -crushingly -crushproof -crusie -crusile -crusilee -crusily -crusily-fitchy -Crusoe -crust -crusta -Crustacea -crustaceal -crustacean -crustaceans -crustacean's -crustaceology -crustaceological -crustaceologist -crustaceorubrin -crustaceous -crustade -crustal -crustalogy -crustalogical -crustalogist -crustate -crustated -crustation -crusted -crustedly -cruster -crust-hunt -crust-hunter -crust-hunting -crusty -crustier -crustiest -crustific -crustification -crustily -crustiness -crusting -crustless -crustose -crustosis -crusts -crust's -crut -crutch -crutch-cross -crutched -Crutcher -crutches -crutching -crutchlike -crutch's -crutch-stick -cruth -crutter -Crux -cruxes -crux's -Cruz -cruzado -cruzadoes -cruzados -cruzeiro -cruzeiros -cruziero -cruzieros -crwd -crwth -crwths -crzette -CS -c's -cs. -CSA -CSAB -CSACC -CSACS -CSAR -csardas -CSB -CSC -csch -C-scroll -CSD -CSDC -CSE -csect -csects -Csel -CSF -C-shaped -C-sharp -CSI -CSIRO -CSIS -csk -CSL -CSM -CSMA -CSMACA -CSMACD -csmp -CSN -CSNET -CSO -CSOC -CSP -CSPAN -CSR -CSRG -CSRI -CSRS -CSS -CST -C-star -CSTC -CSU -csw -CT -ct. -CTA -CTC -CTD -cte -Cteatus -ctelette -Ctenacanthus -ctene -ctenidia -ctenidial -ctenidium -cteniform -ctenii -cteninidia -ctenizid -cteno- -Ctenocephalus -ctenocyst -ctenodactyl -Ctenodipterini -ctenodont -Ctenodontidae -Ctenodus -ctenoid -ctenoidean -Ctenoidei -ctenoidian -ctenolium -Ctenophora -ctenophoral -ctenophoran -ctenophore -ctenophoric -ctenophorous -Ctenoplana -Ctenostomata -ctenostomatous -ctenostome -CTERM -Ctesiphon -Ctesippus -Ctesius -ctetology -ctf -ctg -ctge -Cthrine -ctimo -CTIO -CTM -CTMS -ctn -CTNE -CTO -ctr -ctr. -ctrl -CTS -cts. -CTSS -CTT -CTTC -CTTN -CTV -CU -CUA -cuadra -cuadrilla -cuadrillas -cuadrillero -Cuailnge -Cuajone -cuamuchil -cuapinole -cuarenta -cuarta -cuartel -cuarteron -cuartilla -cuartillo -cuartino -cuarto -Cub -Cuba -Cubage -cubages -cubalaya -Cuban -cubane -cubangle -cubanite -Cubanize -cubans -cubas -cubation -cubatory -cubature -cubatures -cubby -cubbies -cubbyhole -cubbyholes -cubbyhouse -cubbyyew -cubbing -cubbish -cubbishly -cubbishness -cubbyu -cubdom -cub-drawn -cube -cubeb -cubebs -cubed -cubehead -cubelet -Cubelium -cuber -cubera -Cubero -cubers -cubes -cube-shaped -cubhood -cub-hunting -cubi -cubi- -cubic -cubica -cubical -cubically -cubicalness -cubicity -cubicities -cubicle -cubicles -cubicly -cubicone -cubicontravariant -cubicovariant -cubics -cubicula -cubicular -cubiculary -cubiculo -cubiculum -cubiform -cubing -Cubism -cubisms -cubist -cubistic -cubistically -cubists -cubit -cubital -cubitale -cubitalia -cubited -cubiti -cubitiere -cubito -cubito- -cubitocarpal -cubitocutaneous -cubitodigital -cubitometacarpal -cubitopalmar -cubitoplantar -cubitoradial -cubits -cubitus -cubla -cubmaster -cubo- -cubocalcaneal -cuboctahedron -cubocube -cubocuneiform -cubododecahedral -cuboid -cuboidal -cuboides -cuboids -cubomancy -Cubomedusae -cubomedusan -cubometatarsal -cubonavicular -cubo-octahedral -cubo-octahedron -Cu-bop -Cubrun -cubs -cub's -cubti -cuca -cucaracha -Cuchan -cuchia -Cuchillo -Cuchulain -Cuchulainn -Cuchullain -cuck -cuckhold -cucking -cucking-stool -cuckold -cuckolded -cuckoldy -cuckolding -cuckoldize -cuckoldly -cuckoldom -cuckoldry -cuckolds -cuckoo -cuckoo-babies -cuckoo-bread -cuckoo-bud -cuckoo-button -cuckooed -cuckoo-fly -cuckooflower -cuckoo-flower -cuckoo-fool -cuckooing -cuckoomaid -cuckoomaiden -cuckoomate -cuckoo-meat -cuckoopint -cuckoo-pint -cuckoopintle -cuckoo-pintle -cuckoos -cuckoo's -cuckoo-shrike -cuckoo-spit -cuckoo-spittle -cuckquean -cuckstool -cuck-stool -cucoline -CUCRIT -cucuy -cucuyo -Cucujid -Cucujidae -Cucujus -cucularis -cucule -Cuculi -Cuculidae -cuculiform -Cuculiformes -cuculine -cuculla -cucullaris -cucullate -cucullated -cucullately -cuculle -cuculliform -cucullus -cuculoid -Cuculus -Cucumaria -Cucumariidae -cucumber -cucumbers -cucumber's -cucumiform -Cucumis -cucupha -cucurb -cucurbit -Cucurbita -Cucurbitaceae -cucurbitaceous -cucurbital -cucurbite -cucurbitine -cucurbits -Cucuta -cud -Cuda -Cudahy -cudava -cudbear -cudbears -cud-chewing -Cuddebackville -cudden -Cuddy -cuddie -cuddies -cuddyhole -cuddle -cuddleable -cuddled -cuddles -cuddlesome -cuddly -cuddlier -cuddliest -cuddling -cudeigh -cudgel -cudgeled -cudgeler -cudgelers -cudgeling -cudgelled -cudgeller -cudgelling -cudgels -cudgel's -cudgerie -Cudlip -cuds -cudweed -cudweeds -cudwort -cue -cueball -cue-bid -cue-bidden -cue-bidding -cueca -cuecas -cued -cueing -cueist -cueman -cuemanship -cuemen -Cuenca -cue-owl -cuerda -Cuernavaca -Cuero -cuerpo -Cuervo -cues -cuesta -cuestas -Cueva -cuff -cuffed -cuffer -cuffy -cuffyism -cuffin -cuffing -cuffle -cuffless -cufflink -cufflinks -cuffs -cuff's -Cufic -cuggermugger -Cui -cuya -Cuyab -Cuiaba -Cuyaba -Cuyama -Cuyapo -cuyas -cuichunchulli -Cuicuilco -cuidado -cuiejo -cuiejos -cuif -cuifs -Cuyler -cuinage -cuinfo -cuing -Cuyp -cuir -cuirass -cuirassed -cuirasses -cuirassier -cuirassing -cuir-bouilli -cuirie -cuish -cuishes -cuisinary -cuisine -cuisines -cuisinier -cuissard -cuissart -cuisse -cuissen -cuisses -cuisten -cuit -Cuitlateco -cuitle -cuitled -cuitling -cuittikin -cuittle -cuittled -cuittles -cuittling -cui-ui -cuj -Cujam -cuke -cukes -Cukor -CUL -cula -culation -Culavamsa -Culberson -Culbert -Culbertson -culbut -culbute -culbuter -culch -culches -Culdee -cul-de-four -cul-de-lampe -Culdesac -cul-de-sac -cule -Culebra -culerage -culet -culets -culett -culeus -Culex -culgee -Culhert -Culiac -Culiacan -culices -culicid -Culicidae -culicidal -culicide -culicids -culiciform -culicifugal -culicifuge -Culicinae -culicine -culicines -Culicoides -culilawan -culinary -culinarian -culinarily -Culion -Cull -culla -cullage -cullay -cullays -Cullan -cullas -culled -Culley -Cullen -cullender -Culleoka -culler -cullers -cullet -cullets -Cully -cullibility -cullible -Cullie -cullied -cullies -cullying -Cullin -culling -cullion -cullionly -cullionry -cullions -cullis -cullisance -cullises -Culliton -Cullman -Culloden -Cullom -Cullowhee -culls -Culm -culmed -culmen -culmy -culmicolous -culmiferous -culmigenous -culminal -culminant -culminatation -culminatations -culminate -culminated -culminates -culminating -culmination -culminations -culminative -culming -culms -Culosio -culot -culotte -culottes -culottic -culottism -culp -culpa -culpabilis -culpability -culpable -culpableness -culpably -culpae -culpas -culpate -culpatory -culpeo -Culpeper -culpon -culpose -culprit -culprits -culprit's -culrage -culsdesac -cult -cultch -cultches -cultellation -cultelli -cultellus -culter -culteranismo -culti -cultic -cultigen -cultigens -cultirostral -Cultirostres -cultish -cultism -cultismo -cultisms -cultist -cultistic -cultists -cultivability -cultivable -cultivably -cultivar -cultivars -cultivatability -cultivatable -cultivatation -cultivatations -cultivate -cultivated -cultivates -cultivating -cultivation -cultivations -cultivative -cultivator -cultivators -cultivator's -cultive -cultrate -cultrated -cultriform -cultrirostral -Cultrirostres -cults -cult's -culttelli -cult-title -cultual -culturable -cultural -culturalist -culturally -cultural-nomadic -culture -cultured -cultureless -cultures -culturine -culturing -culturist -culturization -culturize -culturology -culturological -culturologically -culturologist -cultus -cultus-cod -cultuses -culus -Culver -culverfoot -culverhouse -culverin -culverineer -culveriner -culverins -culverkey -culverkeys -culvers -culvert -culvertage -culverts -culverwort -cum -Cumacea -cumacean -cumaceous -Cumae -Cumaean -cumay -cumal -cumaldehyde -Cuman -Cumana -Cumanagoto -cumaphyte -cumaphytic -cumaphytism -Cumar -cumara -cumarin -cumarins -cumarone -cumaru -cumbent -cumber -cumbered -cumberer -cumberers -cumbering -Cumberland -cumberlandite -cumberless -cumberment -Cumbernauld -cumbers -cumbersome -cumbersomely -cumbersomeness -cumberworld -cumbha -Cumby -cumble -cumbly -Cumbola -cumbraite -cumbrance -cumbre -Cumbria -Cumbrian -cumbrous -cumbrously -cumbrousness -cumbu -cumene -cumengite -cumenyl -cumflutter -cumhal -cumic -cumidin -cumidine -cumyl -cumin -cuminal -Cumine -Cumings -cuminic -cuminyl -cuminoin -cuminol -cuminole -cumins -cuminseed -cumly -Cummaquid -cummer -cummerbund -cummerbunds -cummers -cummin -Cummine -Cumming -Cummings -Cummington -cummingtonite -Cummins -cummock -cumol -cump -cumquat -cumquats -cumsha -cumshaw -cumshaws -cumu-cirro-stratus -cumul- -cumulant -cumular -cumular-spherulite -cumulate -cumulated -cumulately -cumulates -cumulating -cumulation -cumulatist -cumulative -cumulatively -cumulativeness -cumulato- -cumulene -cumulet -cumuli -cumuliform -cumulite -cumulo- -cumulo-cirro-stratus -cumulocirrus -cumulo-cirrus -cumulonimbus -cumulo-nimbus -cumulophyric -cumulose -cumulostratus -cumulo-stratus -cumulous -cumulo-volcano -cumulus -cun -Cuna -cunabula -cunabular -Cunan -Cunard -Cunarder -Cunas -Cunaxa -cunctation -cunctatious -cunctative -cunctator -cunctatory -cunctatorship -cunctatury -cunctipotent -cund -cundeamor -cundy -Cundiff -cundite -cundum -cundums -cundurango -cunea -cuneal -cuneate -cuneated -cuneately -cuneatic -cuneator -cunei -Cuney -cuneiform -cuneiformist -cunenei -Cuneo -cuneo- -cuneocuboid -cuneonavicular -cuneoscaphoid -cunette -cuneus -Cung -cungeboi -cungevoi -CUNY -cunicular -cuniculi -cuniculus -cunye -cuniform -cuniforms -cunyie -cunila -cunili -Cunina -cunit -cunjah -cunjer -cunjevoi -cunner -cunners -cunni -cunny -cunnilinctus -cunnilinguism -cunnilingus -cunning -cunningaire -cunninger -cunningest -Cunningham -Cunninghamia -cunningly -cunningness -cunnings -Cunonia -Cunoniaceae -cunoniaceous -cunt -cunts -Cunza -cunzie -Cuon -cuorin -cup -cupay -Cupania -Cupavo -cupbearer -cup-bearer -cupbearers -cupboard -cupboards -cupboard's -cupcake -cupcakes -cupel -cupeled -cupeler -cupelers -cupeling -cupellation -cupelled -cupeller -cupellers -cupelling -cupels -Cupertino -cupflower -cupful -cupfulfuls -cupfuls -Cuphea -cuphead -cup-headed -cupholder -Cupid -cupidinous -cupidity -cupidities -cupidon -cupidone -cupids -cupid's-bow -Cupid's-dart -cupiuba -cupless -cuplike -cupmaker -cupmaking -cupman -cup-mark -cup-marked -cupmate -cup-moss -Cupo -cupola -cupola-capped -cupolaed -cupolaing -cupolaman -cupolar -cupola-roofed -cupolas -cupolated -cuppa -cuppas -cupped -cuppen -cupper -cuppers -cuppy -cuppier -cuppiest -cuppin -cupping -cuppings -cuprammonia -cuprammonium -cuprate -cuprein -cupreine -cuprene -cupreo- -cupreous -Cupressaceae -cupressineous -Cupressinoxylon -Cupressus -cupric -cupride -cupriferous -cuprite -cuprites -cupro- -cuproammonium -cuprobismutite -cuprocyanide -cuprodescloizite -cuproid -cuproiodargyrite -cupromanganese -cupronickel -cuproplumbite -cuproscheelite -cuprose -cuprosilicon -cuproso- -cuprotungstite -cuprous -cuprum -cuprums -cups -cup's -cupseed -cupsful -cup-shake -cup-shaped -cup-shot -cupstone -cup-tied -cup-tossing -cupula -cupulae -cupular -cupulate -cupule -cupules -Cupuliferae -cupuliferous -cupuliform -cur -cur. -cura -Curaao -curability -curable -curableness -curably -Curacao -curacaos -curace -curacy -curacies -curacoa -curacoas -curage -curagh -curaghs -curara -curaras -Curare -curares -curari -curarine -curarines -curaris -curarization -curarize -curarized -curarizes -curarizing -curassow -curassows -curat -curatage -curate -curatel -curates -curateship -curatess -curatial -curatic -curatical -curation -curative -curatively -curativeness -curatives -curatize -curatolatry -curator -curatory -curatorial -curatorium -curators -curatorship -curatrices -curatrix -Curavecan -curb -curbable -curbash -curbed -curber -curbers -curby -curbing -curbings -curbless -curblike -curbline -curb-plate -curb-roof -curbs -curb-sending -curbside -curbstone -curb-stone -curbstoner -curbstones -curcas -curch -curchef -curches -curchy -Curcio -curcuddoch -Curculio -curculionid -Curculionidae -curculionist -curculios -Curcuma -curcumas -curcumin -curd -curded -curdy -curdier -curdiest -curdiness -curding -curdle -curdled -curdler -curdlers -curdles -curdly -curdling -curdoo -curds -Curdsville -curdwort -cure -cure-all -cured -cureless -curelessly -curelessness -curemaster -curer -curers -cures -curet -Curetes -curets -curettage -curette -curetted -curettement -curettes -curetting -curf -curfew -curfewed -curfewing -curfews -curfew's -curfs -Curhan -cury -Curia -curiae -curiage -curial -curialism -curialist -curialistic -curiality -curialities -curiam -curiara -curiate -Curiatii -curiboca -Curie -curiegram -curies -curiescopy -curiet -curietherapy -curying -curin -curine -curing -curio -curiolofic -curiology -curiologic -curiological -curiologically -curiologics -curiomaniac -curios -curiosa -curiosi -curiosity -curiosities -curiosity's -curioso -curiosos -curious -curiouser -curiousest -curiously -curiousness -curiousnesses -curite -curites -Curitiba -Curityba -Curitis -curium -curiums -Curkell -curl -curled -curled-leaved -curledly -curledness -Curley -curler -curlers -curlew -curlewberry -curlews -curl-flowered -curly -curly-coated -curlicue -curlycue -curlicued -curlicues -curlycues -curlicuing -curlier -curliest -curliewurly -curliewurlie -curlie-wurlie -curly-haired -curlyhead -curly-headed -curlyheads -curlike -curlily -curly-locked -curlylocks -curliness -curling -curlingly -curlings -curly-pate -curly-pated -curly-polled -curly-toed -Curllsville -curlpaper -curls -curmudgeon -curmudgeonery -curmudgeonish -curmudgeonly -curmudgeons -curmurging -curmurring -curn -curney -curneys -curnie -curnies -Curnin -curnock -curns -curpel -curpin -curple -Curr -currach -currachs -currack -curragh -curraghs -currajong -Curran -currance -currane -currans -currant -currant-leaf -currants -currant's -currantworm -curratow -currawang -currawong -curred -Currey -Curren -currency -currencies -currency's -current -currently -currentness -currents -currentwise -Currer -Curry -curricla -curricle -curricled -curricles -curricling -currycomb -curry-comb -currycombed -currycombing -currycombs -curricula -curricular -curricularization -curricularize -curriculum -curriculums -curriculum's -Currie -curried -Currier -curriery -currieries -curriers -curries -curryfavel -curry-favel -curryfavour -curriing -currying -currijong -curring -currish -currishly -currishness -Currituck -Curryville -currock -currs -curs -Cursa -cursal -cursaro -curse -cursed -curseder -cursedest -cursedly -cursedness -cursement -cursen -curser -cursers -curses -curship -cursillo -cursing -cursitate -cursitor -cursive -cursively -cursiveness -cursives -Curson -cursor -cursorary -Cursores -cursory -Cursoria -cursorial -Cursoriidae -cursorily -cursoriness -cursorious -Cursorius -cursors -cursor's -curst -curstful -curstfully -curstly -curstness -cursus -Curt -curtail -curtailed -curtailedly -curtailer -curtailing -curtailment -curtailments -curtails -curtail-step -curtain -curtained -curtaining -curtainless -curtain-raiser -curtains -curtainwise -curtays -curtal -curtalax -curtal-ax -curtalaxes -curtals -Curtana -curtate -curtation -curtaxe -curted -curtein -curtelace -curteous -curter -curtesy -curtesies -curtest -Curt-hose -Curtice -curtilage -Curtin -Curtis -Curtise -Curtiss -Curtisville -Curtius -curtlax -curtly -curtness -curtnesses -curtsey -curtseyed -curtseying -curtseys -curtsy -curtsied -curtsies -curtsying -curtsy's -curua -curuba -Curucaneca -Curucanecan -curucucu -curucui -curule -Curuminaca -Curuminacan -curupay -curupays -curupey -Curupira -cururo -cururos -Curuzu-Cuatia -curvaceous -curvaceously -curvaceousness -curvacious -curval -curvant -curvate -curvated -curvation -curvative -curvature -curvatures -curve -curveball -curve-ball -curve-billed -curved -curved-fruited -curved-horned -curvedly -curvedness -curved-veined -curve-fruited -curvey -curver -curves -curvesome -curvesomeness -curvet -curveted -curveting -curvets -curvette -curvetted -curvetting -curve-veined -curvy -curvi- -curvicaudate -curvicostate -curvidentate -curvier -curviest -curvifoliate -curviform -curvilinead -curvilineal -curvilinear -curvilinearity -curvilinearly -curvimeter -curvinervate -curvinerved -curviness -curving -curvirostral -Curvirostres -curviserial -curvital -curvity -curvities -curvle -curvograph -curvometer -curvous -curvulate -Curwensville -curwhibble -curwillet -Curzon -Cusack -Cusanus -Cusco -cusco-bark -cuscohygrin -cuscohygrine -cusconin -cusconine -Cuscus -cuscuses -Cuscuta -Cuscutaceae -cuscutaceous -cusec -cusecs -cuselite -Cush -cushag -cushat -cushats -cushaw -cushaws -cush-cush -cushewbird -cushew-bird -cushy -cushie -cushier -cushiest -cushily -cushiness -Cushing -cushion -cushioncraft -cushioned -cushionet -cushionflower -cushion-footed -cushiony -cushioniness -cushioning -cushionless -cushionlike -cushions -cushion-shaped -cushion-tired -Cushite -Cushitic -cushlamochree -Cushman -Cusick -cusie -cusinero -cusk -cusk-eel -cusk-eels -cusks -CUSO -Cusp -cuspal -cusparia -cusparidine -cusparine -cuspate -cuspated -cusped -cuspid -cuspidal -cuspidate -cuspidated -cuspidation -cuspides -cuspidine -cuspidor -cuspidors -cuspids -cusping -cuspis -cusps -cusp's -cusp-shaped -cuspule -cuss -cussed -cussedly -cussedness -cusser -cussers -cusses -Cusseta -cussing -cussing-out -cusso -cussos -cussword -cusswords -cust -Custar -custard -custard-cups -custards -Custer -custerite -custode -custodee -custodes -custody -custodia -custodial -custodiam -custodian -custodians -custodian's -custodianship -custodier -custodies -custom -customable -customableness -customably -customance -customary -customaries -customarily -customariness -custom-built -custom-cut -customed -customer -customers -customhouse -custom-house -customhouses -customing -customizable -customization -customizations -customization's -customize -customized -customizer -customizers -customizes -customizing -customly -custom-made -customs -customs-exempt -customshouse -customs-house -custom-tailored -custos -custrel -custron -custroun -custumal -custumals -Cut -cutability -Cutaiar -cut-and-cover -cut-and-dry -cut-and-dried -cut-and-try -cutaneal -cutaneous -cutaneously -cutaway -cut-away -cutaways -cutback -cut-back -cutbacks -Cutbank -cutbanks -Cutch -cutcha -Cutcheon -cutcher -cutchery -cutcheries -cutcherry -cutcherries -cutches -Cutchogue -Cutcliffe -cutdown -cut-down -cutdowns -cute -cutey -cuteys -cutely -cuteness -cutenesses -cuter -Cuterebra -cutes -cutesy -cutesie -cutesier -cutesiest -cutest -cut-finger -cut-glass -cutgrass -cut-grass -cutgrasses -Cuthbert -Cuthbertson -Cuthburt -cutheal -cuticle -cuticles -cuticolor -cuticula -cuticulae -cuticular -cuticularization -cuticularize -cuticulate -cutidure -cutiduris -cutie -cuties -cutify -cutification -cutigeral -cutikin -cutin -cut-in -cutinisation -cutinise -cutinised -cutinises -cutinising -cutinization -cutinize -cutinized -cutinizes -cutinizing -cutins -cutireaction -cutis -cutisector -cutises -Cutiterebra -cutitis -cutization -CUTK -cutlas -cutlases -cutlash -cutlass -cutlasses -cutlassfish -cutlassfishes -cut-leaf -cut-leaved -Cutler -cutleress -cutlery -Cutleria -Cutleriaceae -cutleriaceous -Cutleriales -cutleries -Cutlerr -cutlers -cutlet -cutlets -cutline -cutlines -cutling -cutlings -Cutlip -cutlips -Cutlor -cutocellulose -cutoff -cut-off -cutoffs -cutose -cutout -cut-out -cutouts -cutover -cutovers -cut-paper -cut-price -cutpurse -cutpurses -cut-rate -CUTS -cut's -cutset -Cutshin -cuttable -Cuttack -cuttage -cuttages -cuttail -cuttanee -cutted -Cutter -cutter-built -cutter-down -cutter-gig -cutterhead -cutterman -cutter-off -cutter-out -cutter-rigged -cutters -cutter's -cutter-up -cutthroat -cutthroats -cut-through -Cutty -Cuttie -cutties -Cuttyhunk -cuttikin -cutting -cuttingly -cuttingness -cuttings -Cuttingsville -cutty-stool -cuttle -cuttlebone -cuttle-bone -cuttlebones -cuttled -cuttlefish -cuttle-fish -cuttlefishes -Cuttler -cuttles -cuttling -cuttoe -cuttoo -cuttoos -cut-toothed -cut-under -Cutuno -cutup -cutups -cutwal -cutwater -cutwaters -cutweed -cutwork -cut-work -cutworks -cutworm -cutworms -cuvage -cuve -cuvee -cuvette -cuvettes -cuvy -Cuvier -Cuvierian -cuvies -Cuxhaven -Cuzceno -Cuzco -Cuzzart -CV -CVA -CVCC -Cvennes -CVO -CVR -CVT -CW -CWA -CWC -CWI -cwierc -Cwikielnik -Cwlth -cwm -Cwmbran -cwms -CWO -cwrite -CWRU -cwt -cwt. -CXI -CZ -Czajer -Czanne -czar -czardas -czardases -czardom -czardoms -czarevitch -czarevna -czarevnas -czarian -czaric -czarina -czarinas -czarinian -czarish -czarism -czarisms -czarist -czaristic -czarists -czaritza -czaritzas -czarowitch -czarowitz -Czarra -czars -czarship -Czech -Czech. -Czechic -Czechish -Czechization -Czechosl -Czechoslovak -Czecho-Slovak -Czechoslovakia -Czecho-Slovakia -Czechoslovakian -Czecho-Slovakian -czechoslovakians -czechoslovaks -czechs -Czerny -Czerniak -Czerniakov -Czernowitz -czigany -Czstochowa -Czur -D -d' -d- -'d -D. -D.A. -D.B.E. -D.C. -D.C.L. -D.C.M. -D.D. -D.D.S. -D.Eng. -D.F. -D.F.C. -D.J. -D.O. -D.O.A. -D.O.M. -D.P. -D.P.H. -D.P.W. -D.S. -D.S.C. -D.S.M. -D.S.O. -D.Sc. -D.V. -D.V.M. -d.w.t. -D/A -D/F -D/L -D/O -D/P -D/W -D1-C -D2-D -DA -daalder -DAB -dabb -dabba -dabbed -dabber -dabbers -dabby -dabbing -dabble -dabbled -dabbler -dabblers -dabbles -dabbling -dabblingly -dabblingness -dabblings -Dabbs -dabchick -dabchicks -Daberath -Dabih -Dabitis -dablet -Dabney -Dabneys -daboia -daboya -Dabolt -dabs -dabster -dabsters -dabuh -DAC -Dacca -d'accord -DACCS -Dace -Dacey -Dacelo -Daceloninae -dacelonine -daces -dacha -dachas -Dachau -Dache -Dachi -Dachy -Dachia -dachs -dachshound -dachshund -dachshunde -dachshunds -Dacy -Dacia -Dacian -Dacie -dacyorrhea -dacite -dacitic -dacker -dackered -dackering -dackers -Dacko -dacoit -dacoitage -dacoited -dacoity -dacoities -dacoiting -dacoits -Dacoma -Dacono -dacrya -dacryadenalgia -dacryadenitis -dacryagogue -dacrycystalgia -dacryd -Dacrydium -dacryelcosis -dacryoadenalgia -dacryoadenitis -dacryoblenorrhea -dacryocele -dacryocyst -dacryocystalgia -dacryocystitis -dacryocystoblennorrhea -dacryocystocele -dacryocystoptosis -dacryocystorhinostomy -dacryocystosyringotomy -dacryocystotome -dacryocystotomy -dacryohelcosis -dacryohemorrhea -dacryolin -dacryolite -dacryolith -dacryolithiasis -dacryoma -dacryon -dacryopyorrhea -dacryopyosis -dacryops -dacryorrhea -dacryosyrinx -dacryosolenitis -dacryostenosis -dacryuria -Dacron -DACS -Dactyi -Dactyl -dactyl- -dactylar -dactylate -Dactyli -dactylic -dactylically -dactylics -dactylio- -dactylioglyph -dactylioglyphy -dactylioglyphic -dactylioglyphist -dactylioglyphtic -dactyliographer -dactyliography -dactyliographic -dactyliology -dactyliomancy -dactylion -dactyliotheca -Dactylis -dactylist -dactylitic -dactylitis -dactylo- -dactylogram -dactylograph -dactylographer -dactylography -dactylographic -dactyloid -dactylology -dactylologies -dactylomegaly -dactylonomy -dactylopatagium -Dactylopius -dactylopodite -dactylopore -Dactylopteridae -Dactylopterus -dactylorhiza -dactyloscopy -dactyloscopic -dactylose -dactylosymphysis -dactylosternal -dactylotheca -dactylous -dactylozooid -Dactyls -dactylus -Dacula -Dacus -DAD -Dada -Dadayag -Dadaism -dadaisms -Dadaist -Dadaistic -dadaistically -dadaists -dadap -dadas -dad-blamed -dad-blasted -dadburned -dad-burned -Daddah -dadder -daddy -daddies -daddy-longlegs -daddy-long-legs -dadding -daddynut -daddle -daddled -daddles -daddling -daddock -daddocky -daddums -Dade -dadenhudd -Dadeville -dading -dado -dadoed -dadoes -dadoing -dados -dadouchos -Dadoxylon -dads -dad's -Dadu -daduchus -Dadupanthi -DAE -Daedal -Daedala -Daedalea -Daedalean -daedaleous -Daedalian -Daedalic -Daedalid -Daedalidae -Daedalion -Daedalist -daedaloid -daedalous -Daedalus -Daegal -daekon -Dael -daemon -Daemonelix -daemones -daemony -daemonian -daemonic -daemonies -daemonistic -daemonology -daemons -daemon's -daemonurgy -daemonurgist -daer -daer-stock -D'Aeth -daeva -daff -daffadilly -daffadillies -daffadowndilly -daffadowndillies -daffed -daffery -Daffi -Daffy -daffydowndilly -Daffie -daffier -daffiest -daffily -daffiness -daffing -daffish -daffle -daffled -daffling -Daffodil -daffodilly -daffodillies -daffodils -daffodil's -daffodowndilly -daffodowndillies -daffs -Dafla -Dafna -Dafodil -daft -daftar -daftardar -daftberry -Dafter -daftest -daftly -daftlike -daftness -daftnesses -Dag -dagaba -Dagall -dagame -Dagan -dagassa -Dagbamba -Dagbane -Dagda -Dagenham -dagesh -Dagestan -dagga -daggar -daggas -dagged -dagger -daggerboard -daggerbush -daggered -daggering -daggerlike -daggerproof -daggers -dagger-shaped -Daggett -daggy -dagging -daggle -daggled -daggles -daggletail -daggle-tail -daggletailed -daggly -daggling -Daggna -Daghda -daghesh -Daghestan -Dagley -daglock -dag-lock -daglocks -Dagmar -Dagna -Dagnah -Dagney -Dagny -Dago -dagoba -dagobas -Dagoberto -dagoes -Dagomba -Dagon -dagos -dags -Dagsboro -dagswain -dag-tailed -Daguerre -Daguerrean -daguerreotype -daguerreotyped -daguerreotyper -daguerreotypes -daguerreotypy -daguerreotypic -daguerreotyping -daguerreotypist -daguilla -Dagupan -Dagusmines -Dagwood -dagwoods -dah -dahabeah -dahabeahs -dahabeeyah -dahabiah -dahabiahs -dahabieh -dahabiehs -dahabiya -dahabiyas -dahabiyeh -Dahinda -Dahl -Dahle -Dahlgren -Dahlia -dahlias -dahlin -Dahlonega -dahls -dahlsten -Dahlstrom -dahms -Dahna -Dahoman -Dahomey -Dahomeyan -dahoon -dahoons -dahs -DAY -dayabhaga -Dayak -Dayakker -Dayaks -dayal -Dayan -day-and-night -dayanim -day-appearing -daybeacon -daybeam -daybed -day-bed -daybeds -dayberry -day-by-day -daybill -day-blindness -dayblush -dayboy -daybook -daybooks -daybreak -daybreaks -day-bright -Daibutsu -day-clean -day-clear -day-day -daydawn -day-dawn -day-detesting -day-devouring -day-dispensing -day-distracting -daidle -daidled -daidly -daidlie -daidling -daydream -day-dream -daydreamed -daydreamer -daydreamers -daydreamy -daydreaming -daydreamlike -daydreams -daydreamt -daydrudge -Daye -day-eyed -day-fever -dayfly -day-fly -dayflies -day-flying -dayflower -day-flower -dayflowers -Daigle -Day-Glo -dayglow -dayglows -Daigneault -daygoing -day-hating -day-hired -Dayhoit -daying -Daijo -daiker -daikered -daikering -daikers -Daykin -daikon -daikons -Dail -Dailamite -day-lasting -Daile -Dayle -Dailey -dayless -Day-Lewis -daily -daily-breader -dailies -daylight -daylighted -daylighting -daylights -daylight's -daylily -day-lily -daylilies -dailiness -daylit -day-lived -daylong -day-loving -dayman -daymare -day-mare -daymares -daymark -daimen -daymen -dayment -daimiate -daimiel -daimio -daimyo -daimioate -daimios -daimyos -daimiote -Daimler -daimon -daimones -daimonic -daimonion -daimonistic -daimonology -daimons -dain -Dayna -daincha -dainchas -daynet -day-net -day-neutral -dainful -Daingerfield -daint -dainteous -dainteth -dainty -dainty-eared -daintier -dainties -daintiest -daintify -daintified -daintifying -dainty-fingered -daintihood -daintily -dainty-limbed -dainty-mouthed -daintiness -daintinesses -daintith -dainty-tongued -dainty-toothed -daintrel -daypeep -day-peep -Daiquiri -daiquiris -Daira -day-rawe -Dairen -dairi -dairy -dairy-cooling -dairies -dairy-farming -dairy-fed -dairying -dairyings -Dairylea -dairy-made -dairymaid -dairymaids -dairyman -dairymen -dairywoman -dairywomen -dayroom -dayrooms -dairous -dairt -day-rule -DAIS -days -day's -daised -daisee -Daisey -daises -Daisetta -daishiki -daishikis -dayshine -day-shining -dai-sho -dai-sho-no-soroimono -Daisi -Daisy -daisy-blossomed -daisybush -daisy-clipping -daisycutter -daisy-cutter -daisy-cutting -daisy-dappled -dayside -daysides -daisy-dimpled -Daisie -Daysie -daisied -daisies -day-sight -daising -daisy-painted -daisy's -daisy-spangled -Daisytown -daysman -daysmen -dayspring -day-spring -daystar -day-star -daystars -daystreak -day's-work -daytale -day-tale -daitya -daytide -daytime -day-time -daytimes -day-to-day -Dayton -Daytona -day-tripper -Daitzman -daiva -Dayville -dayward -day-wearied -day-woman -daywork -dayworker -dayworks -daywrit -day-writ -Dak -Dak. -Dakar -daker -dakerhen -daker-hen -dakerhens -Dakhini -Dakhla -dakhma -dakir -dakoit -dakoity -dakoities -dakoits -Dakota -Dakotan -dakotans -dakotas -daks -Daksha -Daktyi -Daktyl -Daktyli -daktylon -daktylos -Daktyls -Dal -Daladier -dalaga -dalai -dalan -dalapon -dalapons -dalar -Dalarnian -dalasi -dalasis -Dalat -Dalbergia -d'Albert -Dalbo -Dalcassian -Dalcroze -Dale -Dalea -dale-backed -Dalecarlian -daledh -daledhs -Daley -daleman -d'Alembert -Dalen -Dalenna -daler -Dales -dale's -dalesfolk -dalesman -dalesmen -dalespeople -daleswoman -daleth -daleths -Daleville -dalf -Dalhart -Dalhousie -Dali -Daly -Dalia -daliance -Dalibarda -Dalyce -Dalila -Dalilia -Dalymore -Dalis -dalk -Dall -dallack -Dallan -Dallapiccola -Dallardsville -Dallas -Dallastown -dalle -dalles -Dalli -dally -dalliance -dalliances -dallied -dallier -dalliers -dallies -dallying -dallyingly -dallyman -Dallin -Dallis -Dallman -Dallon -dallop -Dalmania -Dalmanites -Dalmatia -Dalmatian -dalmatians -Dalmatic -dalmatics -Dalny -Daloris -Dalpe -Dalradian -Dalrymple -dals -Dalston -Dalt -dalteen -Dalton -Daltonian -Daltonic -Daltonism -Daltonist -daltons -Dalury -Dalzell -Dam -dama -damage -damageability -damageable -damageableness -damageably -damaged -damage-feasant -damagement -damageous -damager -damagers -damages -damaging -damagingly -Damayanti -Damal -Damalas -Damales -Damali -damalic -Damalis -Damalus -Daman -Damanh -Damanhur -damans -Damar -Damara -Damaraland -Damaris -Damariscotta -Damarra -damars -Damas -Damascene -Damascened -damascener -damascenes -damascenine -Damascening -Damascus -damask -damasked -damaskeen -damaskeening -damaskin -damaskine -damasking -damasks -DaMassa -damasse -damassin -Damastes -damboard -D'Amboise -dambonite -dambonitol -dambose -Dambro -dambrod -dam-brod -Dame -Damek -damenization -Dameron -dames -dame-school -dame's-violet -damewort -dameworts -damfool -damfoolish -Damgalnunna -Damia -Damian -damiana -Damiani -Damianist -damyankee -Damiano -Damick -Damicke -damie -Damien -damier -Damietta -damine -Damysus -Damita -Damkina -damkjernite -Damle -damlike -dammar -Dammara -dammaret -dammars -damme -dammed -dammer -dammers -damming -dammish -dammit -damn -damnability -damnabilities -damnable -damnableness -damnably -damnation -damnations -damnatory -damndest -damndests -damned -damneder -damnedest -damner -damners -damnyankee -damnify -damnification -damnificatus -damnified -damnifies -damnifying -Damnii -damning -damningly -damningness -damnit -damnonians -Damnonii -damnosa -damnous -damnously -damns -damnum -Damoclean -Damocles -Damodar -Damoetas -damoiseau -damoisel -damoiselle -damolic -Damon -damone -damonico -damosel -damosels -Damour -D'Amour -damourite -damozel -damozels -damp -dampang -dampcourse -damped -dampen -dampened -dampener -dampeners -dampening -dampens -damper -dampers -dampest -dampy -Dampier -damping -damping-off -dampings -dampish -dampishly -dampishness -damply -dampne -dampness -dampnesses -dampproof -dampproofer -dampproofing -damps -damp-stained -damp-worn -DAMQAM -Damrosch -dams -dam's -damsel -damsel-errant -damselfish -damselfishes -damselfly -damselflies -damselhood -damsels -damsel's -damsite -damson -damsons -Dan -Dan. -Dana -Danaan -Danae -Danagla -Danaher -Danai -Danaid -Danaidae -danaide -Danaidean -Danaides -Danaids -Danainae -danaine -Danais -danaite -Danakil -danalite -Danang -danaro -Danas -Danaus -Danava -Danby -Danboro -Danbury -danburite -dancalite -dance -danceability -danceable -danced -dance-loving -dancer -danceress -dancery -dancers -dances -dancette -dancettee -dancetty -dancy -Danciger -dancing -dancing-girl -dancing-girls -dancingly -Danczyk -dand -danda -dandelion -dandelion-leaved -dandelions -dandelion's -dander -dandered -dandering -danders -Dandy -dandiacal -dandiacally -dandy-brush -dandically -dandy-cock -dandydom -Dandie -dandier -dandies -dandiest -dandify -dandification -dandified -dandifies -dandifying -dandy-hen -dandy-horse -dandyish -dandyishy -dandyishly -dandyism -dandyisms -dandyize -dandily -dandy-line -dandyling -dandilly -dandiprat -dandyprat -dandy-roller -dandis -dandisette -dandizette -dandle -dandled -dandler -dandlers -dandles -dandling -dandlingly -D'Andre -dandriff -dandriffy -dandriffs -dandruff -dandruffy -dandruffs -Dane -Daneball -danebrog -Daneen -Daneflower -Danegeld -danegelds -Danegelt -Daney -Danelage -Danelagh -Danelaw -dane-law -Danell -Danella -Danelle -Danene -danes -danes'-blood -Danese -Danete -Danette -Danevang -Daneweed -daneweeds -Danewort -daneworts -Danford -Danforth -Dang -danged -danger -dangered -danger-fearing -danger-fraught -danger-free -dangerful -dangerfully -dangering -dangerless -danger-loving -dangerous -dangerously -dangerousness -dangers -danger's -dangersome -danger-teaching -danging -dangle -dangleberry -dangleberries -dangled -danglement -dangler -danglers -dangles -danglin -dangling -danglingly -dangs -Dani -Dania -Danya -Daniala -Danialah -Danian -Danic -Danica -Danice -danicism -Danie -Daniel -Daniela -Daniele -Danielic -Daniell -Daniella -Danielle -Danyelle -Daniels -Danielson -Danielsville -Danyette -Danieu -Daniglacial -Daniyal -Danika -Danila -Danilo -Danilova -Danyluk -danio -danios -Danish -Danism -Danit -Danita -Danite -Danization -Danize -dank -Dankali -danke -danker -dankest -dankish -dankishness -dankly -dankness -danknesses -Danl -danli -Danmark -Dann -Danna -Dannebrog -Dannel -Dannemora -dannemorite -danner -Danni -Danny -Dannica -Dannie -Dannye -dannock -Dannon -D'Annunzio -Dano-eskimo -Dano-Norwegian -danoranja -dansant -dansants -danseur -danseurs -danseuse -danseuses -danseusse -dansy -dansk -dansker -Dansville -danta -Dante -Dantean -Dantesque -Danthonia -Dantist -Dantology -Dantomania -Danton -Dantonesque -Dantonist -Dantophily -Dantophilist -Danu -Danube -Danubian -Danuloff -Danuri -Danuta -Danvers -Danville -Danzig -Danziger -danzon -Dao -daoine -DAP -dap-dap -Dapedium -Dapedius -Daph -Daphene -Daphie -Daphna -Daphnaceae -daphnad -Daphnaea -Daphne -Daphnean -Daphnephoria -daphnes -daphnetin -daphni -Daphnia -daphnias -daphnid -daphnin -daphnioid -Daphnis -daphnite -daphnoid -dapicho -dapico -dapifer -dapped -dapper -dapperer -dapperest -dapperly -dapperling -dapperness -dapping -dapple -dapple-bay -dappled -dappled-gray -dappledness -dapple-gray -dapple-grey -dappleness -dapples -dappling -daps -Dapsang -dapson -dapsone -dapsones -DAR -Dara -darabukka -darac -Darach -daraf -Darapti -darat -Darb -Darbee -darbha -Darby -Darbie -darbies -Darbyism -Darbyite -d'Arblay -darbs -darbukka -DARC -Darce -Darcee -Darcey -Darci -Darcy -D'Arcy -Darcia -Darcie -Dard -Darda -Dardan -dardanarius -Dardanelle -Dardanelles -Dardani -Dardanian -dardanium -Dardanus -dardaol -Darden -Dardic -Dardistan -Dare -dareall -dare-base -dared -daredevil -dare-devil -daredevilism -daredevilry -daredevils -daredeviltry -Dareece -Dareen -Darees -dareful -Darell -Darelle -Daren -daren't -darer -darers -Dares -daresay -Dar-es-Salaam -Darfur -darg -dargah -darger -Darghin -Dargo -dargsman -dargue -Dari -Daria -Darya -Darian -daribah -daric -Darice -darics -Darien -Darii -Daryl -Daryle -Darill -Darin -Daryn -daring -daringly -daringness -darings -Dario -dariole -darioles -Darius -Darjeeling -dark -dark-adapted -dark-bearded -dark-blue -dark-bosomed -dark-boughed -dark-breasted -dark-browed -dark-closed -dark-colored -dark-complexioned -darked -darkey -dark-eyed -darkeys -dark-embrowned -Darken -darkened -darkener -darkeners -darkening -darkens -darker -darkest -dark-featured -dark-field -dark-fired -dark-flowing -dark-fringed -darkful -dark-glancing -dark-gray -dark-green -dark-grown -darkhaired -dark-haired -darkhearted -darkheartedness -dark-hued -dark-hulled -darky -darkie -darkies -darking -darkish -darkishness -dark-lantern -darkle -dark-leaved -darkled -darkles -darkly -darklier -darkliest -darkling -darklings -darkmans -dark-minded -darkness -darknesses -dark-orange -dark-prisoned -dark-red -dark-rolling -darkroom -darkrooms -darks -dark-shining -dark-sighted -darkskin -dark-skinned -darksome -darksomeness -dark-splendid -dark-stemmed -dark-suited -darksum -darktown -dark-veiled -dark-veined -dark-visaged -dark-working -Darla -Darlan -Darleen -Darlene -Darline -Darling -darlingly -darlingness -darlings -darling's -Darlington -Darlingtonia -Darlleen -Darmit -Darmstadt -Darn -Darnall -darnation -darndest -darndests -darned -darneder -darnedest -Darney -darnel -Darnell -darnels -darner -darners -darnex -darning -darnings -darnix -Darnley -darns -daroga -darogah -darogha -Daron -daroo -Darooge -DARPA -darr -Darra -Darragh -darraign -Darrey -darrein -Darrel -Darrell -Darrelle -Darren -D'Arrest -Darry -Darrick -Darryl -Darrill -Darrin -Darryn -Darrington -Darrouzett -Darrow -Darsey -darshan -darshana -darshans -Darsie -Darsonval -Darsonvalism -darst -Dart -d'art -Dartagnan -dartars -dartboard -darted -darter -darters -Dartford -darting -dartingly -dartingness -dartle -dartled -dartles -dartlike -dartling -dartman -Dartmoor -Dartmouth -dartoic -dartoid -Darton -dartos -dartre -dartrose -dartrous -darts -dartsman -DARU -Darvon -darwan -Darwen -darwesh -Darwin -Darwinian -darwinians -Darwinical -Darwinically -Darwinism -Darwinist -Darwinistic -darwinists -Darwinite -Darwinize -darzee -DAS -Dasahara -Dasahra -Dasara -Daschagga -Dascylus -DASD -dase -Dasehra -dasein -dasewe -Dash -Dasha -Dashahara -dashboard -dash-board -dashboards -dashed -dashedly -dashee -dasheen -dasheens -dashel -dasher -dashers -dashes -dashi -dashy -dashier -dashiest -dashiki -dashikis -dashing -dashingly -dashis -dashmaker -Dashnak -Dashnakist -Dashnaktzutiun -dashplate -dashpot -dashpots -dasht -Dasht-i-Kavir -Dasht-i-Lut -dashwheel -Dasi -Dasya -Dasyatidae -Dasyatis -Dasycladaceae -dasycladaceous -Dasie -Dasylirion -dasymeter -dasypaedal -dasypaedes -dasypaedic -Dasypeltis -dasyphyllous -Dasiphora -dasypygal -dasypod -Dasypodidae -dasypodoid -Dasyprocta -Dasyproctidae -dasyproctine -Dasypus -Dasystephana -dasyure -dasyures -dasyurid -Dasyuridae -dasyurine -dasyuroid -Dasyurus -Dasyus -dasnt -dasn't -Dassel -dassent -dassy -dassie -dassies -Dassin -dassn't -dastard -dastardy -dastardize -dastardly -dastardliness -dastards -Dasteel -dastur -dasturi -DASWDT -daswen -DAT -dat. -DATA -databank -database -databases -database's -datable -datableness -datably -datacell -datafile -dataflow -data-gathering -datagram -datagrams -datakit -datamation -datamedia -datana -datapac -datapoint -datapunch -datary -dataria -dataries -dataset -datasetname -datasets -datatype -datatypes -datch -datcha -datchas -date -dateable -dateableness -date-bearing -datebook -dated -datedly -datedness -dateless -datelessness -dateline -datelined -datelines -datelining -datemark -dater -daterman -daters -dates -date-stamp -date-stamping -Datha -Datil -dating -dation -Datisca -Datiscaceae -datiscaceous -datiscetin -datiscin -datiscosid -datiscoside -Datisi -Datism -datival -dative -datively -datives -dativogerundial -Datnow -dato -datolite -datolitic -datos -Datsun -datsuns -datsw -Datto -dattock -D'Attoma -dattos -Datuk -datum -datums -Datura -daturas -daturic -daturism -dau -Daub -daube -daubed -Daubentonia -Daubentoniidae -dauber -daubery -dauberies -daubers -daubes -dauby -daubier -daubiest -Daubigny -daubing -daubingly -daubreeite -daubreelite -daubreite -daubry -daubries -daubs -daubster -Daucus -daud -dauded -Daudet -dauding -daudit -dauerlauf -dauerschlaf -Daugava -Daugavpils -Daugherty -daughter -daughterhood -daughter-in-law -daughterkin -daughterless -daughterly -daughterlike -daughterliness -daughterling -daughters -daughtership -daughters-in-law -Daughtry -dauk -Daukas -dauke -daukin -Daulias -dault -Daumier -daun -daunch -dauncy -daunder -daundered -daundering -daunders -Daune -dauner -Daunii -daunomycin -daunt -daunted -daunter -daunters -daunting -dauntingly -dauntingness -dauntless -dauntlessly -dauntlessness -daunton -daunts -Dauphin -Dauphine -dauphines -dauphiness -dauphins -Daur -Dauri -daurna -daut -dauted -dautie -dauties -dauting -dauts -dauw -DAV -davach -davainea -Davallia -Davant -Davao -Dave -Daveda -Daveen -Davey -Daven -Davena -Davenant -D'Avenant -Davene -davened -davening -Davenport -davenports -davens -daver -daverdy -Daveta -Davy -David -Davida -Davidde -Davide -Davidian -Davidic -Davidical -Davidist -Davidoff -Davidson -davidsonite -Davidsonville -Davidsville -Davie -daviely -Davies -Daviesia -daviesite -Davilla -Davilman -Davin -Davina -Davine -davyne -Davis -Davys -Davisboro -Davisburg -Davison -Davisson -Daviston -Davisville -davit -Davita -davits -davyum -davoch -Davon -Davos -Davout -daw -dawcock -dawdy -dawdle -dawdled -dawdler -dawdlers -dawdles -dawdling -dawdlingly -dawe -dawed -dawen -Dawes -dawing -dawish -dawk -dawkin -Dawkins -dawks -Dawmont -Dawn -Dawna -dawned -dawny -dawn-illumined -dawning -dawnlight -dawnlike -dawns -dawnstreak -dawn-tinted -dawnward -dawpate -daws -Dawson -Dawsonia -Dawsoniaceae -dawsoniaceous -dawsonite -Dawsonville -dawt -dawted -dawtet -dawtie -dawties -dawting -dawtit -dawts -dawut -Dax -Daza -daze -dazed -dazedly -dazedness -Dazey -dazement -dazes -dazy -dazing -dazingly -dazzle -dazzled -dazzlement -dazzler -dazzlers -dazzles -dazzling -dazzlingly -dazzlingness -DB -DBA -DBAC -DBAS -DBE -DBF -Dbh -DBI -dbl -dbl. -DBM -dBm/m -DBME -DBMS -DBO -D-borneol -DBRAD -dbridement -dBrn -DBS -dBV -dBW -DC -d-c -DCA -DCB -dcbname -DCC -DCCO -DCCS -DCD -DCE -DCH -DChE -DCI -DCL -dclass -DCLU -DCM -DCMG -DCMS -DCMU -DCNA -DCNL -DCO -dcollet -dcolletage -dcor -DCP -DCPR -DCPSK -DCS -DCT -DCTN -DCTS -DCVO -DD -dd. -DDA -D-day -DDB -DDC -DDCMP -DDCU -DDD -DDE -Ddene -Ddenise -DDJ -DDK -DDL -DDN -ddname -DDP -DDPEX -DDR -DDS -DDSc -DDT -DDX -DE -de- -DEA -deaccession -deaccessioned -deaccessioning -deaccessions -deacetylate -deacetylated -deacetylating -deacetylation -Deach -deacidify -deacidification -deacidified -deacidifying -Deacon -deaconal -deaconate -deaconed -deaconess -deaconesses -deaconhood -deaconing -deaconize -deaconry -deaconries -deacons -deacon's -deaconship -deactivate -deactivated -deactivates -deactivating -deactivation -deactivations -deactivator -deactivators -dead -dead-afraid -dead-air -dead-alive -dead-alivism -dead-and-alive -dead-anneal -dead-arm -deadbeat -deadbeats -dead-blanched -deadbolt -deadborn -dead-born -dead-bright -dead-burn -deadcenter -dead-center -dead-centre -dead-cold -dead-color -dead-colored -dead-dip -dead-doing -dead-drifting -dead-drunk -dead-drunkenness -deadeye -dead-eye -deadeyes -deaden -dead-end -deadened -deadener -deadeners -deadening -deadeningly -deadens -deader -deadest -dead-face -deadfall -deadfalls -deadflat -dead-front -dead-frozen -dead-grown -deadhand -dead-hand -deadhead -deadheaded -deadheading -deadheadism -deadheads -deadhearted -dead-hearted -deadheartedly -deadheartedness -dead-heat -dead-heater -dead-heavy -deadhouse -deady -deading -deadish -deadishly -deadishness -dead-kill -deadlatch -dead-leaf -dead-letter -deadly -deadlier -deadliest -deadlight -dead-light -deadlihead -deadlily -deadline -dead-line -deadlines -deadline's -deadliness -deadlinesses -dead-live -deadlock -deadlocked -deadlocking -deadlocks -Deadman -deadmelt -dead-melt -deadmen -deadness -deadnesses -dead-nettle -deadpay -deadpan -deadpanned -deadpanner -deadpanning -deadpans -dead-point -deadrise -dead-rise -deadrize -dead-roast -deads -dead-seeming -dead-set -dead-sick -dead-smooth -dead-soft -dead-stick -dead-still -dead-stroke -dead-struck -dead-tired -deadtongue -dead-tongue -deadweight -dead-weight -Deadwood -deadwoods -deadwork -dead-work -deadworks -deadwort -deaerate -de-aerate -deaerated -deaerates -deaerating -deaeration -deaerator -de-aereate -deaf -deaf-and-dumb -deaf-dumb -deaf-dumbness -deaf-eared -deafen -deafened -deafening -deafeningly -deafens -deafer -deafest -deafforest -de-afforest -deafforestation -deafish -deafly -deaf-minded -deaf-mute -deafmuteness -deaf-muteness -deaf-mutism -deafness -deafnesses -deair -deaired -deairing -deairs -Deakin -deal -dealable -dealate -dealated -dealates -dealation -dealbate -dealbation -deal-board -dealbuminize -dealcoholist -dealcoholization -dealcoholize -Deale -dealer -dealerdom -dealers -dealership -dealerships -dealfish -dealfishes -dealing -dealings -dealkalize -dealkylate -dealkylation -deallocate -deallocated -deallocates -deallocating -deallocation -deallocations -deals -dealt -deambulate -deambulation -deambulatory -deambulatories -De-americanization -De-americanize -deamidase -deamidate -deamidation -deamidization -deamidize -deaminase -deaminate -deaminated -deaminating -deamination -deaminization -deaminize -deaminized -deaminizing -deammonation -Dean -Deana -deanathematize -Deane -deaned -Deaner -deanery -deaneries -deaness -dea-nettle -De-anglicization -De-anglicize -deanimalize -deaning -Deanna -Deanne -deans -dean's -Deansboro -deanship -deanships -deanthropomorphic -deanthropomorphism -deanthropomorphization -deanthropomorphize -Deanville -deappetizing -deaquation -DEAR -Dearborn -dear-bought -dear-cut -Dearden -deare -dearer -dearest -Deary -dearie -dearies -Dearing -dearly -dearling -Dearman -Dearmanville -dearn -dearness -dearnesses -dearomatize -Dearr -dears -dearsenicate -dearsenicator -dearsenicize -dearth -dearthfu -dearths -de-articulate -dearticulation -de-articulation -dearworth -dearworthily -dearworthiness -deas -deash -deashed -deashes -deashing -deasil -deaspirate -deaspiration -deassimilation -Death -death-bearing -deathbed -death-bed -deathbeds -death-begirt -death-bell -death-bird -death-black -deathblow -death-blow -deathblows -death-boding -death-braving -death-bringing -death-cold -death-come-quickly -death-counterfeiting -deathcup -deathcups -deathday -death-day -death-darting -death-deaf -death-deafened -death-dealing -death-deep -death-defying -death-devoted -death-dewed -death-divided -death-divining -death-doing -death-doom -death-due -death-fire -deathful -deathfully -deathfulness -deathy -deathify -deathin -deathiness -death-laden -deathless -deathlessly -deathlessness -deathly -deathlike -deathlikeness -deathliness -deathling -death-marked -death-pale -death-polluted -death-practiced -deathrate -deathrates -deathrate's -deathroot -deaths -death's-face -death-shadowed -death's-head -death-sheeted -death's-herb -deathshot -death-sick -deathsman -deathsmen -death-stiffening -death-stricken -death-struck -death-subduing -death-swimming -death-threatening -death-throe -deathtime -deathtrap -deathtraps -deathward -deathwards -death-warrant -deathwatch -death-watch -deathwatches -death-weary -deathweed -death-winged -deathworm -death-worm -death-worthy -death-wound -death-wounded -Deatsville -deaurate -Deauville -deave -deaved -deavely -Deaver -deaves -deaving -Deb -deb. -debacchate -debacle -debacles -debadge -debag -debagged -debagging -debamboozle -debar -Debarath -debarbarization -debarbarize -Debary -debark -debarkation -debarkations -debarked -debarking -debarkment -debarks -debarment -debarrance -debarrass -debarration -debarred -debarring -debars -debase -debased -debasedness -debasement -debasements -debaser -debasers -debases -debasing -debasingly -debat -debatable -debatably -debate -debateable -debated -debateful -debatefully -debatement -debater -debaters -debates -debating -debatingly -debatter -debauch -debauched -debauchedly -debauchedness -debauchee -debauchees -debaucher -debauchery -debaucheries -debauches -debauching -debauchment -Debbee -Debbi -Debby -Debbie -debbies -Debbora -Debbra -debcle -debe -debeak -debeaker -Debee -debeige -debel -debell -debellate -debellation -debellator -deben -debenture -debentured -debentureholder -debentures -debenzolize -Debeque -Debera -Deberry -Debes -Debi -Debye -debyes -debile -debilissima -debilitant -debilitate -debilitated -debilitates -debilitating -debilitation -debilitations -debilitative -debility -debilities -debind -Debir -debit -debitable -debite -debited -debiteuse -debiting -debitor -debitrix -debits -debitum -debitumenize -debituminization -debituminize -deblai -deblaterate -deblateration -deblock -deblocked -deblocking -DEBNA -deboise -deboist -deboistly -deboistness -deboite -deboites -DeBolt -debonair -debonaire -debonairity -debonairly -debonairness -debonairty -debone -deboned -deboner -deboners -debones -deboning -debonnaire -Debor -Debora -Deborah -Deborath -Debord -debordment -debosh -deboshed -deboshment -deboss -debouch -debouche -debouched -debouches -debouching -debouchment -debouchure -debout -debowel -Debra -Debrecen -debride -debrided -debridement -debrides -debriding -debrief -debriefed -debriefing -debriefings -debriefs -debris -debrominate -debromination -debruise -debruised -debruises -debruising -Debs -debt -debted -debtee -debtful -debtless -debtor -debtors -debtorship -debts -debt's -debug -debugged -debugger -debuggers -debugger's -debugging -debugs -debullition -debunk -debunked -debunker -debunkers -debunking -debunkment -debunks -deburr -deburse -debus -debused -debusing -debussed -Debussy -Debussyan -Debussyanize -debussing -debut -debutant -debutante -debutantes -debutants -debuted -debuting -debuts -DEC -Dec. -deca- -decachord -decad -decadactylous -decadal -decadally -decadarch -decadarchy -decadary -decadation -decade -decadence -decadency -decadent -decadentism -decadently -decadents -decadenza -decades -decade's -decadescent -decadi -decadianome -decadic -decadist -decadrachm -decadrachma -decadrachmae -Decadron -decaedron -decaesarize -decaf -decaffeinate -decaffeinated -decaffeinates -decaffeinating -decaffeinize -decafid -decafs -decagynous -decagon -decagonal -decagonally -decagons -decagram -decagramme -decagrams -decahedra -decahedral -decahedrodra -decahedron -decahedrons -decahydrate -decahydrated -decahydronaphthalene -Decay -decayable -decayed -decayedness -decayer -decayers -decaying -decayless -decays -Decaisnea -decal -decalage -decalcify -decalcification -decalcified -decalcifier -decalcifies -decalcifying -decalcomania -decalcomaniac -decalcomanias -decalescence -decalescent -Decalin -decaliter -decaliters -decalitre -decalobate -decalog -Decalogist -decalogs -Decalogue -decalomania -decals -decalvant -decalvation -De-calvinize -decameral -Decameron -Decameronic -decamerous -decameter -decameters -decamethonium -decametre -decametric -Decamp -decamped -decamping -decampment -decamps -decan -decanal -decanally -decanate -decancellate -decancellated -decancellating -decancellation -decandently -decandria -decandrous -decane -decanery -decanes -decangular -decani -decanically -decannulation -decanoyl -decanol -decanonization -decanonize -decanormal -decant -decantate -decantation -decanted -decanter -decanters -decantherous -decanting -decantist -decants -decap -decapetalous -decaphyllous -decapitable -decapitalization -decapitalize -decapitatation -decapitatations -decapitate -decapitated -decapitates -decapitating -decapitation -decapitations -decapitator -decapod -Decapoda -decapodal -decapodan -decapodiform -decapodous -decapods -Decapolis -decapper -decapsulate -decapsulation -decarbonate -decarbonated -decarbonating -decarbonation -decarbonator -decarbonylate -decarbonylated -decarbonylating -decarbonylation -decarbonisation -decarbonise -decarbonised -decarboniser -decarbonising -decarbonization -decarbonize -decarbonized -decarbonizer -decarbonizing -decarboxylase -decarboxylate -decarboxylated -decarboxylating -decarboxylation -decarboxylization -decarboxylize -decarburation -decarburisation -decarburise -decarburised -decarburising -decarburization -decarburize -decarburized -decarburizing -decarch -decarchy -decarchies -decard -decardinalize -decare -decares -decarhinus -decarnate -decarnated -decart -decartelization -decartelize -decartelized -decartelizing -decasemic -decasepalous -decasyllabic -decasyllable -decasyllables -decasyllabon -decaspermal -decaspermous -decast -decastellate -decastere -decastich -decastylar -decastyle -decastylos -decasualisation -decasualise -decasualised -decasualising -decasualization -decasualize -decasualized -decasualizing -decate -decathlon -decathlons -decatholicize -decatyl -decating -decatize -decatizer -decatizing -Decato -decatoic -decator -Decatur -Decaturville -decaudate -decaudation -Decca -Deccan -deccennia -decciare -decciares -decd -decd. -decease -deceased -deceases -deceasing -decede -decedent -decedents -deceit -deceitful -deceitfully -deceitfulness -deceitfulnesses -deceits -deceivability -deceivable -deceivableness -deceivably -deceivance -deceive -deceived -deceiver -deceivers -deceives -deceiving -deceivingly -decelerate -decelerated -decelerates -decelerating -deceleration -decelerations -decelerator -decelerators -decelerometer -deceleron -De-celticize -decem -decem- -December -Decemberish -Decemberly -Decembrist -decemcostate -decemdentate -decemfid -decemflorous -decemfoliate -decemfoliolate -decemjugate -decemlocular -decempartite -decempeda -decempedal -decempedate -decempennate -decemplex -decemplicate -decempunctate -decemstriate -decemuiri -decemvii -decemvir -decemviral -decemvirate -decemviri -decemvirs -decemvirship -decenary -decenaries -decence -decency -decencies -decency's -decene -decener -decenyl -decennal -decennary -decennaries -decennia -decenniad -decennial -decennially -decennials -decennium -decenniums -decennoval -decent -decenter -decentered -decentering -decenters -decentest -decently -decentness -decentralisation -decentralise -decentralised -decentralising -decentralism -decentralist -decentralization -decentralizationist -decentralizations -decentralize -decentralized -decentralizes -decentralizing -decentration -decentre -decentred -decentres -decentring -decephalization -decephalize -deceptibility -deceptible -deception -deceptional -deceptions -deception's -deceptious -deceptiously -deceptitious -deceptive -deceptively -deceptiveness -deceptivity -deceptory -decerebrate -decerebrated -decerebrating -decerebration -decerebrize -decern -decerned -decerning -decerniture -decernment -decerns -decerp -decertation -decertify -decertification -decertificaton -decertified -decertifying -decess -decession -decessit -decessor -decharm -dechemicalization -dechemicalize -Dechen -dechenite -Decherd -Dechlog -dechlore -dechloridation -dechloridize -dechloridized -dechloridizing -dechlorinate -dechlorinated -dechlorinating -dechlorination -dechoralize -dechristianization -dechristianize -de-christianize -deci- -Decian -deciare -deciares -deciatine -decibar -decibel -decibels -deciceronize -decidability -decidable -decide -decided -decidedly -decidedness -decidement -decidence -decidendi -decident -decider -deciders -decides -deciding -decidingly -decidua -deciduae -decidual -deciduary -deciduas -Deciduata -deciduate -deciduity -deciduitis -deciduoma -deciduous -deciduously -deciduousness -decigram -decigramme -decigrams -decil -decyl -decile -decylene -decylenic -deciles -decylic -deciliter -deciliters -decilitre -decillion -decillionth -Decima -decimal -decimalisation -decimalise -decimalised -decimalising -decimalism -decimalist -decimalization -decimalize -decimalized -decimalizes -decimalizing -decimally -decimals -decimate -decimated -decimates -decimating -decimation -decimator -decime -decimestrial -decimeter -decimeters -decimetre -decimetres -decimolar -decimole -decimosexto -decimo-sexto -Decimus -decine -decyne -decinormal -decipher -decipherability -decipherable -decipherably -deciphered -decipherer -deciphering -decipherment -deciphers -decipium -decipolar -decise -decision -decisional -decisionmake -decision-making -decisions -decision's -decisis -decisive -decisively -decisiveness -decisivenesses -decistere -decisteres -decitizenize -Decius -decivilization -decivilize -Decize -Deck -decke -decked -deckedout -deckel -deckels -decken -decker -deckers -Deckert -Deckerville -deckhand -deckhands -deckhead -deckhouse -deckhouses -deckie -decking -deckings -deckle -deckle-edged -deckles -deckload -deckman -deck-piercing -deckpipe -decks -deckswabber -decl -decl. -declaim -declaimant -declaimed -declaimer -declaimers -declaiming -declaims -declamando -declamation -declamations -declamator -declamatory -declamatoriness -Declan -declarable -declarant -declaration -declarations -declaration's -declarative -declaratively -declaratives -declarator -declaratory -declaratorily -declarators -declare -declared -declaredly -declaredness -declarer -declarers -declares -declaring -declass -declasse -declassed -declassee -declasses -declassicize -declassify -declassification -declassifications -declassified -declassifies -declassifying -declassing -declension -declensional -declensionally -declensions -declericalize -declimatize -declinable -declinal -declinate -declination -declinational -declinations -declination's -declinator -declinatory -declinature -decline -declined -declinedness -decliner -decliners -declines -declining -declinograph -declinometer -declivate -declive -declivent -declivity -declivities -declivitous -declivitously -declivous -Declo -Declomycin -declutch -decnet -deco -decoagulate -decoagulated -decoagulation -decoat -decocainize -decoct -decocted -decoctible -decocting -decoction -decoctive -decocts -decoctum -decodable -decode -decoded -decoder -decoders -decodes -decoding -decodings -Decodon -decohere -decoherence -decoherer -decohesion -decoy -decoic -decoy-duck -decoyed -decoyer -decoyers -decoying -decoyman -decoymen -decoys -decoy's -decoke -decoll -decollate -decollated -decollating -decollation -decollator -decolletage -decollete -decollimate -decolonisation -decolonise -decolonised -decolonising -decolonization -decolonize -decolonized -decolonizes -decolonizing -decolor -decolorant -decolorate -decoloration -decolored -decolorimeter -decoloring -decolorisation -decolorise -decolorised -decoloriser -decolorising -decolorization -decolorize -decolorized -decolorizer -decolorizing -decolors -decolour -decolouration -decoloured -decolouring -decolourisation -decolourise -decolourised -decolouriser -decolourising -decolourization -decolourize -decolourized -decolourizer -decolourizing -decolours -decommission -decommissioned -decommissioning -decommissions -decompensate -decompensated -decompensates -decompensating -decompensation -decompensations -decompensatory -decompile -decompiler -decomplex -decomponent -decomponible -decomposability -decomposable -decompose -decomposed -decomposer -decomposers -decomposes -decomposing -decomposite -decomposition -decompositional -decompositions -decomposition's -decomposure -decompound -decompoundable -decompoundly -decompress -decompressed -decompresses -decompressing -decompression -decompressions -decompressive -deconcatenate -deconcentrate -deconcentrated -deconcentrating -deconcentration -deconcentrator -decondition -decongest -decongestant -decongestants -decongested -decongesting -decongestion -decongestive -decongests -deconsecrate -deconsecrated -deconsecrating -deconsecration -deconsider -deconsideration -decontaminate -decontaminated -decontaminates -decontaminating -decontamination -decontaminations -decontaminative -decontaminator -decontaminators -decontrol -decontrolled -decontrolling -decontrols -deconventionalize -deconvolution -deconvolve -decopperization -decopperize -decor -decorability -decorable -decorably -Decorah -decorament -decorate -Decorated -decorates -decorating -decoration -decorationist -decorations -decorative -decoratively -decorativeness -decorator -decoratory -decorators -decore -decorement -decorist -decorous -decorously -decorousness -decorousnesses -decorrugative -decors -decorticate -decorticated -decorticating -decortication -decorticator -decorticosis -decortization -decorum -decorums -decos -decostate -decoupage -decouple -decoupled -decouples -decoupling -decourse -decourt -decousu -decrassify -decrassified -decream -decrease -decreased -decreaseless -decreases -decreasing -decreasingly -decreation -decreative -decree -decreeable -decreed -decreeing -decree-law -decreement -decreer -decreers -decrees -decreet -decreing -decrement -decremental -decremented -decrementing -decrementless -decrements -decremeter -decrepid -decrepit -decrepitate -decrepitated -decrepitating -decrepitation -decrepity -decrepitly -decrepitness -decrepitude -decreptitude -decresc -decresc. -decrescence -decrescendo -decrescendos -decrescent -decretal -decretalist -Decretals -decrete -decretion -decretist -decretive -decretively -decretory -decretorial -decretorian -decretorily -decretum -decrew -decry -decrial -decrials -decried -decrier -decriers -decries -decrying -decriminalization -decriminalize -decriminalized -decriminalizes -decriminalizing -decrypt -decrypted -decrypting -decryption -decryptions -decryptograph -decrypts -decrystallization -decrown -decrowned -decrowning -decrowns -decrudescence -decrustation -decubation -decubital -decubiti -decubitus -decultivate -deculturate -Decuma -decuman -decumana -decumani -decumanus -decumary -Decumaria -decumbence -decumbency -decumbent -decumbently -decumbiture -decuple -decupled -decuples -decuplet -decupling -decury -decuria -decuries -decurion -decurionate -decurions -decurrence -decurrences -decurrency -decurrencies -decurrent -decurrently -decurring -decursion -decursive -decursively -decurt -decurtate -decurvation -decurvature -decurve -decurved -decurves -decurving -DECUS -decuss -decussate -decussated -decussately -decussating -decussation -decussatively -decussion -decussis -decussoria -decussorium -decwriter -DEd -deda -Dedagach -dedal -Dedan -Dedanim -Dedanite -dedans -dedd -deddy -Dede -dedecorate -dedecoration -dedecorous -Dedekind -Deden -dedenda -dedendum -dedentition -Dedham -dedicant -dedicate -dedicated -dedicatedly -dedicatee -dedicates -dedicating -dedication -dedicational -dedications -dedicative -dedicator -dedicatory -dedicatorial -dedicatorily -dedicators -dedicature -Dedie -dedifferentiate -dedifferentiated -dedifferentiating -dedifferentiation -dedignation -dedimus -dedit -deditician -dediticiancy -dedition -dedo -dedoggerelize -dedogmatize -dedolation -dedolence -dedolency -dedolent -dedolomitization -dedolomitize -dedolomitized -dedolomitizing -Dedra -Dedric -Dedrick -deduce -deduced -deducement -deducer -deduces -deducibility -deducible -deducibleness -deducibly -deducing -deducive -deduct -deducted -deductibility -deductible -deductibles -deductile -deducting -deductio -deduction -deductions -deduction's -deductive -deductively -deductory -deducts -deduit -deduplication -Dee -DeeAnn -Deeanne -deecodder -deed -deedbote -deedbox -deeded -Deedee -deedeed -deedful -deedfully -deedholder -deedy -deedier -deediest -deedily -deediness -deeding -deedless -deeds -Deedsville -de-educate -Deegan -Deeyn -deejay -deejays -deek -de-electrify -de-electrization -de-electrize -deem -de-emanate -de-emanation -deemed -deemer -deemie -deeming -de-emphases -deemphasis -de-emphasis -deemphasize -de-emphasize -deemphasized -de-emphasized -deemphasizes -deemphasizing -de-emphasizing -Deems -deemster -deemsters -deemstership -de-emulsibility -de-emulsify -de-emulsivity -Deena -deener -de-energize -deeny -Deenya -deep -deep-affected -deep-affrighted -deep-asleep -deep-bellied -deep-biting -deep-blue -deep-bodied -deep-bosomed -deep-brained -deep-breasted -deep-breathing -deep-brooding -deep-browed -deep-buried -deep-chested -deep-colored -deep-contemplative -deep-crimsoned -deep-cut -deep-damasked -deep-dye -deep-dyed -deep-discerning -deep-dish -deep-domed -deep-down -deep-downness -deep-draw -deep-drawing -deep-drawn -deep-drenched -deep-drew -deep-drinking -deep-drunk -deep-echoing -deep-eyed -deep-embattled -deepen -deepened -deepener -deepeners -deep-engraven -deepening -deepeningly -deepens -deeper -deepest -deep-faced -deep-felt -deep-fermenting -deep-fetched -deep-fixed -deep-flewed -Deepfreeze -deep-freeze -deepfreezed -deep-freezed -deep-freezer -deepfreezing -deep-freezing -deep-fry -deep-fried -deep-frying -deepfroze -deep-froze -deepfrozen -deep-frozen -deepgoing -deep-going -deep-green -deep-groaning -deep-grounded -deep-grown -Deephaven -Deeping -deepish -deep-kiss -deep-laden -deep-laid -deeply -deeplier -deep-lying -deep-lunged -deepmost -deepmouthed -deep-mouthed -deep-musing -deep-naked -deepness -deepnesses -deep-persuading -deep-piled -deep-pitched -deep-pointed -deep-pondering -deep-premeditated -deep-questioning -deep-reaching -deep-read -deep-revolving -deep-rooted -deep-rootedness -deep-rooting -deeps -deep-sea -deep-searching -deep-seated -deep-seatedness -deep-set -deep-settled -deep-sided -deep-sighted -deep-sinking -deep-six -deep-skirted -deepsome -deep-sore -deep-sounding -deep-stapled -deep-sunk -deep-sunken -deep-sweet -deep-sworn -deep-tangled -deep-thinking -deep-thoughted -deep-thrilling -deep-throated -deep-toned -deep-transported -deep-trenching -deep-troubled -deep-uddered -deep-vaulted -deep-versed -deep-voiced -deep-waisted -Deepwater -deep-water -deepwaterman -deepwatermen -deep-worn -deep-wounded -Deer -deerberry -Deerbrook -deer-coloured -deerdog -Deerdre -deerdrive -Deere -deer-eyed -Deerfield -deerfly -deerflies -deerflys -deerfood -deergrass -deerhair -deer-hair -deerherd -deerhorn -deerhound -deer-hound -Deery -deeryard -deeryards -Deering -deerkill -deerlet -deer-lick -deerlike -deermeat -deer-mouse -deer-neck -deers -deerskin -deerskins -deer-staiker -deerstalker -deerstalkers -deerstalking -deerstand -deerstealer -deer-stealer -deer's-tongue -Deersville -Deerton -deertongue -deervetch -deerweed -deerweeds -Deerwood -dees -deescalate -de-escalate -deescalated -deescalates -deescalating -deescalation -de-escalation -deescalations -deeses -deesis -deess -deet -Deeth -de-ethicization -de-ethicize -deets -deevey -deevilick -deewan -deewans -de-excite -de-excited -de-exciting -def -def. -deface -defaceable -defaced -defacement -defacements -defacer -defacers -defaces -defacing -defacingly -defacto -defade -defaecate -defail -defailance -defaillance -defailment -defaisance -defaitisme -defaitiste -defalcate -defalcated -defalcates -defalcating -defalcation -defalcations -defalcator -DeFalco -defalk -defamation -defamations -defamatory -defame -defamed -defamer -defamers -defames -defamy -defaming -defamingly -defamous -defang -defanged -defangs -Defant -defassa -defat -defatigable -defatigate -defatigated -defatigation -defats -defatted -defatting -default -defaultant -defaulted -defaulter -defaulters -defaulting -defaultless -defaults -defaulture -defeasance -defeasanced -defease -defeasibility -defeasible -defeasibleness -defeasive -defeat -defeated -defeatee -defeater -defeaters -defeating -defeatism -defeatist -defeatists -defeatment -defeats -defeature -defecant -defecate -defecated -defecates -defecating -defecation -defecations -defecator -defect -defected -defecter -defecters -defectibility -defectible -defecting -defection -defectionist -defections -defection's -defectious -defective -defectively -defectiveness -defectives -defectless -defectlessness -defectology -defector -defectors -defectoscope -defects -defectum -defectuous -defedation -defeise -defeit -defeminisation -defeminise -defeminised -defeminising -defeminization -defeminize -defeminized -defeminizing -defence -defenceable -defenceless -defencelessly -defencelessness -defences -defencive -defend -defendable -defendant -defendants -defendant's -defended -defender -defenders -defending -defendress -defends -defenestrate -defenestrated -defenestrates -defenestrating -defenestration -defensative -defense -defensed -defenseless -defenselessly -defenselessness -defenseman -defensemen -defenser -defenses -defensibility -defensible -defensibleness -defensibly -defensing -defension -defensive -defensively -defensiveness -defensor -defensory -defensorship -defer -deferable -deference -deferences -deferens -deferent -deferentectomy -deferential -deferentiality -deferentially -deferentitis -deferents -Deferiet -deferment -deferments -deferment's -deferrable -deferral -deferrals -deferred -deferrer -deferrers -deferrer's -deferring -deferrization -deferrize -deferrized -deferrizing -defers -defervesce -defervesced -defervescence -defervescent -defervescing -defet -defeudalize -defi -defy -defiable -defial -Defiance -defiances -defiant -defiantly -defiantness -defiatory -defiber -defibrillate -defibrillated -defibrillating -defibrillation -defibrillative -defibrillator -defibrillatory -defibrinate -defibrination -defibrinize -deficience -deficiency -deficiencies -deficient -deficiently -deficit -deficits -deficit's -defied -defier -defiers -defies -defiguration -defigure -defying -defyingly -defilable -defilade -defiladed -defilades -defilading -defile -defiled -defiledness -defilement -defilements -defiler -defilers -defiles -defiliation -defiling -defilingly -definability -definable -definably -define -defined -definedly -definement -definer -definers -defines -definienda -definiendum -definiens -definientia -defining -definish -definite -definitely -definiteness -definite-time -definition -definitional -definitiones -definitions -definition's -definitise -definitised -definitising -definitive -definitively -definitiveness -definitization -definitize -definitized -definitizing -definitor -definitude -defis -defix -deflagrability -deflagrable -deflagrate -deflagrated -deflagrates -deflagrating -deflagration -deflagrations -deflagrator -deflate -deflated -deflater -deflates -deflating -deflation -deflationary -deflationist -deflations -deflator -deflators -deflea -defleaed -defleaing -defleas -deflect -deflectable -deflected -deflecting -deflection -deflectional -deflectionization -deflectionize -deflections -deflective -deflectometer -deflector -deflectors -deflects -deflesh -deflex -deflexed -deflexibility -deflexible -deflexing -deflexion -deflexionize -deflexure -deflocculant -deflocculate -deflocculated -deflocculating -deflocculation -deflocculator -deflocculent -deflorate -defloration -deflorations -deflore -deflorescence -deflourish -deflow -deflower -deflowered -deflowerer -deflowering -deflowerment -deflowers -defluent -defluous -defluvium -deflux -defluxion -defoam -defoamed -defoamer -defoamers -defoaming -defoams -defocus -defocusses -Defoe -defoedation -defog -defogged -defogger -defoggers -defogging -defogs -defoil -defoliage -defoliant -defoliants -defoliate -defoliated -defoliates -defoliating -defoliation -defoliations -defoliator -defoliators -deforce -deforced -deforcement -deforceor -deforcer -deforces -deforciant -deforcing -Deford -DeForest -deforestation -deforested -deforester -deforesting -deforests -deform -deformability -deformable -deformalize -deformation -deformational -deformations -deformation's -deformative -deformed -deformedly -deformedness -deformer -deformers -deformeter -deforming -deformism -deformity -deformities -deformity's -deforms -deforse -defortify -defossion -defoul -defray -defrayable -defrayal -defrayals -defrayed -defrayer -defrayers -defraying -defrayment -defrays -defraud -defraudation -defrauded -defrauder -defrauders -defrauding -defraudment -defrauds -defreeze -defrication -defrock -defrocked -defrocking -defrocks -defrost -defrosted -defroster -defrosters -defrosting -defrosts -defs -deft -defter -defterdar -deftest -deft-fingered -deftly -deftness -deftnesses -defunct -defunction -defunctionalization -defunctionalize -defunctive -defunctness -defuse -defused -defuses -defusing -defusion -defuze -defuzed -defuzes -defuzing -deg -deg. -degage -degame -degames -degami -degamis -deganglionate -degarnish -Degas -degases -degasify -degasification -degasifier -degass -degassed -degasser -degassers -degasses -degassing -degauss -degaussed -degausser -degausses -degaussing -degelatinize -degelation -degender -degener -degeneracy -degeneracies -degeneralize -degenerate -degenerated -degenerately -degenerateness -degenerates -degenerating -degeneration -degenerationist -degenerations -degenerative -degeneratively -degenerescence -degenerescent -degeneroos -degentilize -degerm -De-germanize -degermed -degerminate -degerminator -degerming -degerms -degged -degger -degging -deglaciation -deglamorization -deglamorize -deglamorized -deglamorizing -deglaze -deglazed -deglazes -deglazing -deglycerin -deglycerine -deglory -deglut -deglute -deglutinate -deglutinated -deglutinating -deglutination -deglutition -deglutitious -deglutitive -deglutitory -degold -degomme -degorder -degorge -degradability -degradable -degradand -degradation -degradational -degradations -degradation's -degradative -degrade -degraded -degradedly -degradedness -degradement -degrader -degraders -degrades -degrading -degradingly -degradingness -degraduate -degraduation -Degraff -degrain -degranulation -degras -degratia -degravate -degrease -degreased -degreaser -degreases -degreasing -degree -degree-cut -degreed -degree-day -degreeing -degreeless -degrees -degree's -degreewise -degression -degressive -degressively -degringolade -degu -Deguelia -deguelin -degum -degummed -degummer -degumming -degums -degust -degustate -degustation -degusted -degusting -degusts -dehache -dehair -dehairer -Dehaites -deheathenize -De-hellenize -dehematize -dehepatize -Dehgan -dehydrant -dehydrase -dehydratase -dehydrate -dehydrated -dehydrates -dehydrating -dehydration -dehydrations -dehydrator -dehydrators -dehydroascorbic -dehydrochlorinase -dehydrochlorinate -dehydrochlorination -dehydrocorydaline -dehydrocorticosterone -dehydroffroze -dehydroffrozen -dehydrofreeze -dehydrofreezing -dehydrofroze -dehydrofrozen -dehydrogenase -dehydrogenate -dehydrogenated -dehydrogenates -dehydrogenating -dehydrogenation -dehydrogenisation -dehydrogenise -dehydrogenised -dehydrogeniser -dehydrogenising -dehydrogenization -dehydrogenize -dehydrogenized -dehydrogenizer -dehydromucic -dehydroretinol -dehydrosparteine -dehydrotestosterone -dehypnotize -dehypnotized -dehypnotizing -dehisce -dehisced -dehiscence -dehiscent -dehisces -dehiscing -dehistoricize -Dehkan -Dehlia -Dehnel -dehnstufe -DeHoff -dehonestate -dehonestation -dehorn -dehorned -dehorner -dehorners -dehorning -dehorns -dehors -dehort -dehortation -dehortative -dehortatory -dehorted -dehorter -dehorting -dehorts -Dehradun -Dehue -dehull -dehumanisation -dehumanise -dehumanised -dehumanising -dehumanization -dehumanize -dehumanized -dehumanizes -dehumanizing -dehumidify -dehumidification -dehumidified -dehumidifier -dehumidifiers -dehumidifies -dehumidifying -dehusk -Dehwar -DEI -Dey -deia -Deianeira -Deianira -Deibel -deicate -deice -de-ice -deiced -deicer -de-icer -deicers -deices -deicidal -deicide -deicides -deicing -Deicoon -deictic -deictical -deictically -Deidamia -deidealize -Deidesheimer -Deidre -deify -deific -deifical -deification -deifications -deificatory -deified -deifier -deifiers -deifies -deifying -deiform -deiformity -deign -deigned -deigning -deignous -deigns -deyhouse -deil -deils -Deimos -Deina -deincrustant -deindividualization -deindividualize -deindividuate -deindustrialization -deindustrialize -deink -Deino -Deinocephalia -Deinoceras -Deinodon -Deinodontidae -deinos -deinosaur -Deinosauria -Deinotherium -deinstitutionalization -deinsularize -de-insularize -deynt -deintellectualization -deintellectualize -Deion -deionization -deionizations -deionize -deionized -deionizer -deionizes -deionizing -Deiope -Deyoung -Deipara -deiparous -Deiphilus -Deiphobe -Deiphobus -Deiphontes -Deipyle -Deipylus -deipnodiplomatic -deipnophobia -deipnosophism -deipnosophist -deipnosophistic -deipotent -Deirdra -Deirdre -deirid -deis -deys -deiseal -deyship -deisidaimonia -deisin -deism -deisms -deist -deistic -deistical -deistically -deisticalness -deists -De-italianize -deitate -Deity -deities -deity's -deityship -deywoman -deixis -deja -De-jansenize -deject -dejecta -dejected -dejectedly -dejectedness -dejectile -dejecting -dejection -dejections -dejectly -dejectory -dejects -dejecture -dejerate -dejeration -dejerator -dejeune -dejeuner -dejeuners -De-judaize -dejunkerize -deka- -Dekabrist -dekadarchy -dekadrachm -dekagram -dekagramme -dekagrams -DeKalb -dekaliter -dekaliters -dekalitre -dekameter -dekameters -dekametre -dekaparsec -dekapode -dekarch -dekare -dekares -dekastere -deke -deked -Dekeles -dekes -deking -Dekker -dekko -dekkos -dekle -deknight -DeKoven -Dekow -Del -Del. -Dela -delabialization -delabialize -delabialized -delabializing -delace -DeLacey -delacerate -Delacourt -delacrimation -Delacroix -delactation -Delafield -delay -delayable -delay-action -delayage -delayed -delayed-action -delayer -delayers -delayful -delaying -delayingly -Delaine -Delainey -delaines -DeLayre -delays -Delamare -Delambre -delaminate -delaminated -delaminating -delamination -Delancey -Deland -Delaney -Delanie -Delannoy -Delano -Delanos -Delanson -Delanty -Delaplaine -Delaplane -delapse -delapsion -Delaryd -Delaroche -delassation -delassement -Delastre -delate -delated -delater -delates -delating -delatinization -delatinize -delation -delations -delative -delator -delatorian -delators -Delaunay -Delavan -Delavigne -delaw -Delaware -Delawarean -Delawares -delawn -Delbarton -Delbert -Delcambre -Delcasse -Delcina -Delcine -Delco -dele -delead -deleaded -deleading -deleads -deleatur -deleave -deleaved -deleaves -deleble -delectability -delectable -delectableness -delectably -delectate -delectated -delectating -delectation -delectations -delectible -delectus -deled -Deledda -deleerit -delegable -delegacy -delegacies -delegalize -delegalized -delegalizing -delegant -delegare -delegate -delegated -delegatee -delegates -delegateship -delegati -delegating -delegation -delegations -delegative -delegator -delegatory -delegatus -deleing -delenda -deleniate -Deleon -deles -Delesseria -Delesseriaceae -delesseriaceous -delete -deleted -deleter -deletery -deleterious -deleteriously -deleteriousness -deletes -deleting -deletion -deletions -deletive -deletory -Delevan -delf -Delfeena -Delfine -delfs -Delft -delfts -delftware -Delgado -Delhi -deli -dely -Delia -Delian -delibate -deliber -deliberalization -deliberalize -deliberandum -deliberant -deliberate -deliberated -deliberately -deliberateness -deliberatenesses -deliberates -deliberating -deliberation -deliberations -deliberative -deliberatively -deliberativeness -deliberator -deliberators -deliberator's -Delibes -delible -delicacy -delicacies -delicacy's -delicat -delicate -delicate-handed -delicately -delicateness -delicates -delicatesse -delicatessen -delicatessens -delice -delicense -Delichon -Delicia -deliciae -deliciate -delicioso -Delicious -deliciouses -deliciously -deliciousness -delict -delicti -delicto -delicts -delictual -delictum -delictus -delieret -delies -deligated -deligation -Delight -delightable -delighted -delightedly -delightedness -delighter -delightful -delightfully -delightfulness -delighting -delightingly -delightless -delights -delightsome -delightsomely -delightsomeness -delignate -delignated -delignification -Delija -Delila -Delilah -deliliria -delim -delime -delimed -delimer -delimes -deliming -delimit -delimitate -delimitated -delimitating -delimitation -delimitations -delimitative -delimited -delimiter -delimiters -delimiting -delimitize -delimitized -delimitizing -delimits -Delinda -deline -delineable -delineament -delineate -delineated -delineates -delineating -delineation -delineations -delineative -delineator -delineatory -delineature -delineavit -delinition -delinquence -delinquency -delinquencies -delinquent -delinquently -delinquents -delint -delinter -deliquate -deliquesce -deliquesced -deliquescence -deliquescent -deliquesces -deliquescing -deliquiate -deliquiesce -deliquium -deliracy -delirament -delirant -delirate -deliration -delire -deliria -deliriant -deliriate -delirifacient -delirious -deliriously -deliriousness -delirium -deliriums -delirous -delis -delisk -Delisle -delist -delisted -delisting -delists -delit -delitescence -delitescency -delitescent -delitous -Delium -Delius -deliver -deliverability -deliverable -deliverables -deliverance -deliverances -delivered -deliverer -deliverers -deliveress -delivery -deliveries -deliveryman -deliverymen -delivering -delivery's -deliverly -deliveror -delivers -Dell -dell' -Della -dellaring -Delle -dellenite -Delly -dellies -Dellora -Dellroy -dells -dell's -Dellslow -Delma -Delmar -Delmarva -Delmer -Delmita -Delmont -Delmor -Delmore -Delmotte -DELNI -Delnorte -Delobranchiata -delocalisation -delocalise -delocalised -delocalising -delocalization -delocalize -delocalized -delocalizing -Delogu -Deloit -delomorphic -delomorphous -DeLong -deloo -Delora -Delorean -Delorenzo -Delores -Deloria -Deloris -Delorme -Delos -deloul -delouse -deloused -delouser -delouses -delousing -Delp -delph -delphacid -Delphacidae -Delphi -Delphia -Delphian -Delphic -delphically -Delphin -Delphina -Delphinapterus -Delphine -Delphyne -Delphini -Delphinia -delphinic -Delphinid -Delphinidae -delphinin -delphinine -delphinite -Delphinium -delphiniums -Delphinius -delphinoid -Delphinoidea -delphinoidine -Delphinus -delphocurarine -Delphos -Delphus -DELQA -Delray -Delrey -Delrio -dels -Delsarte -Delsartean -Delsartian -Delsman -Delta -deltafication -deltahedra -deltahedron -deltaic -deltaite -deltal -deltalike -deltarium -deltas -delta's -delta-shaped -deltation -Deltaville -delthyria -delthyrial -delthyrium -deltic -deltidia -deltidial -deltidium -deltiology -deltohedra -deltohedron -deltoid -deltoidal -deltoidei -deltoideus -deltoids -Delton -DELUA -delubra -delubrubra -delubrum -Deluc -deluce -deludable -delude -deluded -deluder -deluders -deludes -deludher -deluding -deludingly -Deluge -deluged -deluges -deluging -delumbate -deluminize -delundung -delusion -delusional -delusionary -delusionist -delusions -delusion's -delusive -delusively -delusiveness -delusory -deluster -delusterant -delustered -delustering -delusters -delustrant -deluxe -Delvalle -delve -delved -delver -delvers -delves -delving -Delwin -Delwyn -Dem -Dem. -Dema -Demaggio -demagnetisable -demagnetisation -demagnetise -demagnetised -demagnetiser -demagnetising -demagnetizable -demagnetization -demagnetize -demagnetized -demagnetizer -demagnetizes -demagnetizing -demagnify -demagnification -demagog -demagogy -demagogic -demagogical -demagogically -demagogies -demagogism -demagogs -demagogue -demagoguery -demagogueries -demagogues -demagoguism -demain -DeMaio -Demakis -demal -demand -demandable -demandant -demandative -demanded -demander -demanders -demanding -demandingly -demandingness -demands -demanganization -demanganize -demantoid -demarcate -demarcated -demarcates -demarcating -demarcation -demarcations -demarcator -demarcatordemarcators -demarcators -demarcature -demarch -demarche -demarches -demarchy -demaree -Demarest -demargarinate -Demaria -demark -demarkation -demarked -demarking -demarks -DeMartini -demasculinisation -demasculinise -demasculinised -demasculinising -demasculinization -demasculinize -demasculinized -demasculinizing -demast -demasted -demasting -demasts -dematerialisation -dematerialise -dematerialised -dematerialising -dematerialization -dematerialize -dematerialized -dematerializing -Dematiaceae -dematiaceous -Demavend -Demb -Dembowski -Demchok -deme -demean -demeaned -demeaning -demeanor -demeanored -demeanors -demeanour -demeans -demegoric -Demeyer -demele -demembration -demembre -demency -dement -dementate -dementation -demented -dementedly -dementedness -dementholize -dementi -dementia -demential -dementias -dementie -dementing -dementis -dements -demeore -demephitize -Demerara -demerge -demerged -demerger -demerges -demerit -demerited -demeriting -demeritorious -demeritoriously -demerits -Demerol -demersal -demerse -demersed -demersion -demes -demesgne -demesgnes -demesman -demesmerize -demesne -demesnes -demesnial -demetallize -Demeter -demethylate -demethylation -demethylchlortetracycline -demeton -demetons -Demetra -Demetre -Demetri -Demetria -Demetrian -Demetrias -demetricize -Demetrios -Demetris -Demetrius -demi -Demy -demi- -demiadult -demiangel -demiassignation -demiatheism -demiatheist -Demi-atlas -demibarrel -demibastion -demibastioned -demibath -demi-batn -demibeast -demibelt -demibob -demibombard -demibrassart -demibrigade -demibrute -demibuckram -demicadence -demicannon -demi-cannon -demicanon -demicanton -demicaponier -demichamfron -Demi-christian -demicylinder -demicylindrical -demicircle -demicircular -demicivilized -demicolumn -demicoronal -demicritic -demicuirass -demiculverin -demi-culverin -demidandiprat -demideify -demideity -demidevil -demidigested -demidistance -demiditone -demidoctor -demidog -demidolmen -demidome -demieagle -demyelinate -demyelination -demies -demifarthing -demifigure -demiflouncing -demifusion -demigardebras -demigauntlet -demigentleman -demiglace -demiglobe -demigod -demigoddess -demigoddessship -demigods -demigorge -demigrate -demigriffin -demigroat -demihag -demihagbut -demihague -demihake -demihaque -demihearse -demiheavenly -demihigh -demihogshead -demihorse -demihuman -demi-hunter -demi-incognito -demi-island -demi-islander -demijambe -demijohn -demijohns -demi-jour -demikindred -demiking -demilance -demi-lance -demilancer -demi-landau -demilawyer -demilegato -demilion -demilitarisation -demilitarise -demilitarised -demilitarising -demilitarization -demilitarize -demilitarized -demilitarizes -demilitarizing -demiliterate -demilune -demilunes -demiluster -demilustre -demiman -demimark -demimentoniere -demimetope -demimillionaire -Demi-mohammedan -demimondain -demimondaine -demi-mondaine -demimondaines -demimonde -demi-monde -demimonk -Demi-moor -deminatured -demineralization -demineralize -demineralized -demineralizer -demineralizes -demineralizing -Deming -Demi-norman -deminude -deminudity -demioctagonal -demioctangular -demiofficial -demiorbit -demi-ostade -demiourgoi -Demiourgos -demiowl -demiox -demipagan -demiparadise -demi-paradise -demiparallel -demipauldron -demipectinate -Demi-pelagian -demi-pension -demipesade -Demiphon -demipike -demipillar -demipique -demi-pique -demiplacate -demiplate -demipomada -demipremise -demipremiss -demipriest -demipronation -demipuppet -demi-puppet -demiquaver -demiracle -demiram -Demirel -demirelief -demirep -demi-rep -demireps -demirevetment -demirhumb -demirilievo -demirobe -demisability -demisable -demisacrilege -demisang -demi-sang -demisangue -demisavage -demiscible -demise -demiseason -demi-season -demi-sec -demisecond -demised -demi-sel -demi-semi -demisemiquaver -demisemitone -demises -demisheath -demi-sheath -demyship -demishirt -demising -demisolde -demisovereign -demisphere -demiss -demission -demissionary -demissive -demissly -demissness -demissory -demist -demystify -demystification -demisuit -demit -demitasse -demitasses -demythify -demythologisation -demythologise -demythologised -demythologising -demythologization -demythologizations -demythologize -demythologized -demythologizer -demythologizes -demythologizing -demitint -demitoilet -demitone -demitrain -demitranslucence -Demitria -demits -demitted -demitting -demitube -demiturned -Demiurge -demiurgeous -demiurges -demiurgic -demiurgical -demiurgically -demiurgism -demiurgos -demiurgus -demivambrace -demivierge -demi-vill -demivirgin -demivoice -demivol -demivolt -demivolte -demivolts -demivotary -demiwivern -demiwolf -demiworld -Demjanjuk -Demmer -Demmy -demnition -Demo -demo- -demob -demobbed -demobbing -demobilisation -demobilise -demobilised -demobilising -demobilization -demobilizations -demobilize -demobilized -demobilizes -demobilizing -demobs -Democoon -democracy -democracies -democracy's -Democrat -democratian -democratic -democratical -democratically -Democratic-republican -democratifiable -democratisation -democratise -democratised -democratising -democratism -democratist -democratization -democratize -democratized -democratizer -democratizes -democratizing -democrats -democrat's -democraw -democritean -Democritus -demode -demodectic -demoded -Demodena -Demodex -Demodicidae -Demodocus -demodulate -demodulated -demodulates -demodulating -demodulation -demodulations -demodulator -demogenic -Demogorgon -demographer -demographers -demography -demographic -demographical -demographically -demographics -demographies -demographist -demoid -demoiselle -demoiselles -demolish -demolished -demolisher -demolishes -demolishing -demolishment -demolition -demolitionary -demolitionist -demolitions -demology -demological -Demon -Demona -Demonassa -demonastery -Demonax -demoness -demonesses -demonetisation -demonetise -demonetised -demonetising -demonetization -demonetize -demonetized -demonetizes -demonetizing -demoniac -demoniacal -demoniacally -demoniacism -demoniacs -demonial -demonian -demonianism -demoniast -demonic -demonical -demonically -demonifuge -demonio -demonise -demonised -demonises -demonish -demonishness -demonising -demonism -demonisms -demonist -demonists -demonization -demonize -demonized -demonizes -demonizing -demonkind -demonland -demonlike -demono- -demonocracy -demonograph -demonographer -demonography -demonographies -demonolater -demonolatry -demonolatrous -demonolatrously -demonologer -demonology -demonologic -demonological -demonologically -demonologies -demonologist -demonomancy -demonomanie -demonomy -demonomist -demonophobia -demonopolize -demonry -demons -demon's -demonship -demonstrability -demonstrable -demonstrableness -demonstrably -demonstrance -demonstrandum -demonstrant -demonstratability -demonstratable -demonstrate -demonstrated -demonstratedly -demonstrater -demonstrates -demonstrating -demonstration -demonstrational -demonstrationist -demonstrationists -demonstrations -demonstrative -demonstratively -demonstrativeness -demonstrator -demonstratory -demonstrators -demonstrator's -demonstratorship -demophil -demophile -demophilism -demophobe -demophobia -Demophon -Demophoon -Demopolis -demorage -demoralisation -demoralise -demoralised -demoraliser -demoralising -demoralization -demoralize -demoralized -demoralizer -demoralizers -demoralizes -demoralizing -demoralizingly -Demorest -demorphinization -demorphism -Demos -demoses -Demospongiae -Demossville -Demosthenean -Demosthenes -Demosthenian -Demosthenic -demot -demote -demoted -demotes -demothball -Demotic -demotics -Demotika -demoting -demotion -demotions -demotist -demotists -Demott -Demotte -demount -demountability -demountable -demounted -demounting -demounts -demove -Demp -dempne -DEMPR -Dempsey -Dempster -dempsters -Dempstor -demulce -demulceate -demulcent -demulcents -demulsibility -demulsify -demulsification -demulsified -demulsifier -demulsifying -demulsion -demultiplex -demultiplexed -demultiplexer -demultiplexers -demultiplexes -demultiplexing -demur -demure -demurely -demureness -demurer -demurest -demurity -demurrable -demurrage -demurrages -demurral -demurrals -demurrant -demurred -demurrer -demurrers -demurring -demurringly -demurs -Demus -Demuth -demutization -Den -Den. -Dena -Denae -denay -Denair -dename -denar -denarcotization -denarcotize -denari -denary -denaries -denarii -denarinarii -denarius -denaro -denasalize -denasalized -denasalizing -denat -denationalisation -denationalise -denationalised -denationalising -denationalization -denationalize -denationalized -denationalizing -denaturalisation -denaturalise -denaturalised -denaturalising -denaturalization -denaturalize -denaturalized -denaturalizing -denaturant -denaturants -denaturate -denaturation -denaturational -denature -denatured -denatures -denaturing -denaturisation -denaturise -denaturised -denaturiser -denaturising -denaturization -denaturize -denaturized -denaturizer -denaturizing -denazify -De-nazify -denazification -denazified -denazifies -denazifying -Denby -Denbigh -Denbighshire -Denbo -Denbrook -denda -dendr- -dendra -dendrachate -dendral -Dendraspis -dendraxon -dendric -dendriform -dendrite -Dendrites -dendritic -dendritical -dendritically -dendritiform -Dendrium -dendro- -Dendrobates -Dendrobatinae -dendrobe -Dendrobium -Dendrocalamus -Dendroceratina -dendroceratine -Dendrochirota -dendrochronology -dendrochronological -dendrochronologically -dendrochronologist -Dendrocygna -dendroclastic -Dendrocoela -dendrocoelan -dendrocoele -dendrocoelous -Dendrocolaptidae -dendrocolaptine -Dendroctonus -dendrodic -dendrodont -dendrodra -Dendrodus -Dendroeca -Dendrogaea -Dendrogaean -dendrograph -dendrography -Dendrohyrax -Dendroica -dendroid -dendroidal -Dendroidea -Dendrolagus -dendrolater -dendrolatry -Dendrolene -dendrolite -dendrology -dendrologic -dendrological -dendrologist -dendrologists -dendrologous -Dendromecon -dendrometer -Dendron -dendrons -dendrophagous -dendrophil -dendrophile -dendrophilous -Dendropogon -Dene -Deneb -Denebola -denegate -denegation -denehole -dene-hole -denervate -denervation -denes -deneutralization -DEng -dengue -dengues -Denham -Denhoff -Deni -Deny -deniability -deniable -deniably -denial -denials -denial's -Denice -denicotine -denicotinize -denicotinized -denicotinizes -denicotinizing -Denie -denied -denier -denyer -denierage -denierer -deniers -denies -denigrate -denigrated -denigrates -denigrating -denigration -denigrations -denigrative -denigrator -denigratory -denigrators -denying -denyingly -Deniker -denim -denims -Denio -Denis -Denys -Denise -Denyse -Denison -denitrate -denitrated -denitrating -denitration -denitrator -denitrify -denitrificant -denitrification -denitrificator -denitrified -denitrifier -denitrifying -denitrize -denizate -denization -denize -denizen -denizenation -denizened -denizening -denizenize -denizens -denizenship -Denizlik -Denman -Denmark -Denn -Denna -Dennard -denned -Denney -Dennet -Dennett -Denni -Denny -Dennie -Denning -Dennis -Dennison -Dennisport -Denniston -Dennisville -Dennysville -Dennstaedtia -denom -denom. -denominable -denominant -denominate -denominated -denominates -denominating -denomination -denominational -denominationalism -denominationalist -denominationalize -denominationally -denominations -denomination's -denominative -denominatively -denominator -denominators -denominator's -denormalized -denotable -denotate -denotation -denotational -denotationally -denotations -denotation's -denotative -denotatively -denotativeness -denotatum -denote -denoted -denotement -denotes -Denoting -denotive -denouement -denouements -denounce -denounced -denouncement -denouncements -denouncer -denouncers -denounces -denouncing -Denpasar -dens -den's -densate -densation -dense -dense-flowered -dense-headed -densely -dense-minded -densen -denseness -densenesses -denser -densest -dense-wooded -denshare -densher -denshire -densify -densification -densified -densifier -densifies -densifying -densimeter -densimetry -densimetric -densimetrically -density -densities -density's -densitometer -densitometers -densitometry -densitometric -Densmore -densus -Dent -dent- -dent. -dentagra -dental -dentale -dentalgia -dentalia -Dentaliidae -dentalisation -dentalise -dentalised -dentalising -dentalism -dentality -Dentalium -dentaliums -dentalization -dentalize -dentalized -dentalizing -dentally -dentallia -dentalman -dentalmen -dentals -dentaphone -dentary -Dentaria -dentaries -dentary-splenial -dentata -dentate -dentate-ciliate -dentate-crenate -dentated -dentately -dentate-serrate -dentate-sinuate -dentation -dentato- -dentatoangulate -dentatocillitate -dentatocostate -dentatocrenate -dentatoserrate -dentatosetaceous -dentatosinuate -dented -dentel -dentelated -dentellated -dentelle -dentelliere -dentello -dentelure -Denten -denter -dentes -dentex -denty -denti- -dentical -denticate -denticete -Denticeti -denticle -denticles -denticular -denticulate -denticulated -denticulately -denticulation -denticule -dentiferous -dentification -dentiform -dentifrice -dentifrices -dentigerous -dentil -dentilabial -dentilated -dentilation -dentile -dentiled -dentilingual -dentiloguy -dentiloquy -dentiloquist -dentils -dentimeter -dentin -dentinal -dentinalgia -dentinasal -dentine -dentines -denting -dentinitis -dentinoblast -dentinocemental -dentinoid -dentinoma -dentins -dentiparous -dentiphone -dentiroster -dentirostral -dentirostrate -Dentirostres -dentiscalp -dentist -dentistic -dentistical -dentistry -dentistries -dentists -dentist's -dentition -dentitions -dento- -dentoid -dentolabial -dentolingual -dentololabial -Denton -dentonasal -dentosurgical -den-tree -dents -dentulous -dentural -denture -dentures -denuclearization -denuclearize -denuclearized -denuclearizes -denuclearizing -denucleate -denudant -denudate -denudated -denudates -denudating -denudation -denudational -denudations -denudative -denudatory -denude -denuded -denudement -denuder -denuders -denudes -denuding -denumberment -denumerability -denumerable -denumerably -denumeral -denumerant -denumerantive -denumeration -denumerative -denunciable -denunciant -denunciate -denunciated -denunciating -denunciation -denunciations -denunciative -denunciatively -denunciator -denunciatory -denutrition -Denver -Denville -Denzil -deobstruct -deobstruent -deoccidentalize -deoculate -deodand -deodands -deodar -deodara -deodaras -deodars -deodate -deodorant -deodorants -deodorisation -deodorise -deodorised -deodoriser -deodorising -deodorization -deodorize -deodorized -deodorizer -deodorizers -deodorizes -deodorizing -deonerate -Deonne -deontic -deontology -deontological -deontologist -deoperculate -deoppilant -deoppilate -deoppilation -deoppilative -deorbit -deorbits -deordination -deorganization -deorganize -deorientalize -deorsum -deorsumvergence -deorsumversion -deorusumduction -deosculate -deossify -de-ossify -deossification -deota -deoxy- -deoxycorticosterone -deoxidant -deoxidate -deoxidation -deoxidative -deoxidator -deoxidisation -deoxidise -deoxidised -deoxidiser -deoxidising -deoxidization -deoxidize -deoxidized -deoxidizer -deoxidizers -deoxidizes -deoxidizing -deoxygenate -deoxygenated -deoxygenating -deoxygenation -deoxygenization -deoxygenize -deoxygenized -deoxygenizing -deoxyribonuclease -deoxyribonucleic -deoxyribonucleoprotein -deoxyribonucleotide -deoxyribose -deozonization -deozonize -deozonizer -dep -dep. -depa -depaganize -depaint -depainted -depainting -depaints -depair -depayse -depaysee -depancreatization -depancreatize -depardieu -depark -deparliament -depart -departed -departee -departement -departements -departer -departing -departisanize -departition -department -departmental -departmentalisation -departmentalise -departmentalised -departmentalising -departmentalism -departmentalization -departmentalize -departmentalized -departmentalizes -departmentalizing -departmentally -departmentization -departmentize -departments -department's -departs -departure -departures -departure's -depas -depascent -depass -depasturable -depasturage -depasturation -depasture -depastured -depasturing -depatriate -depauperate -depauperation -depauperization -depauperize -de-pauperize -depauperized -Depauville -Depauw -DEPCA -depe -depeach -depeche -depectible -depeculate -depeinct -Depeyster -depel -depencil -depend -dependability -dependabilities -dependable -dependableness -dependably -dependance -dependancy -dependant -dependantly -dependants -depended -dependence -dependences -dependency -dependencies -dependent -dependently -dependents -depender -depending -dependingly -depends -depeople -depeopled -depeopling -deperdit -deperdite -deperditely -deperdition -Depere -deperition -deperm -depermed -deperming -deperms -depersonalise -depersonalised -depersonalising -depersonalization -depersonalize -depersonalized -depersonalizes -depersonalizing -depersonize -depertible -depetalize -depeter -depetticoat -DePew -dephase -dephased -dephasing -dephycercal -dephilosophize -dephysicalization -dephysicalize -dephlegm -dephlegmate -dephlegmated -dephlegmation -dephlegmatize -dephlegmator -dephlegmatory -dephlegmedness -dephlogisticate -dephlogisticated -dephlogistication -dephosphorization -dephosphorize -depickle -depict -depicted -depicter -depicters -depicting -depiction -depictions -depictive -depictment -depictor -depictors -depicts -depicture -depictured -depicturing -depiedmontize -depigment -depigmentate -depigmentation -depigmentize -depilate -depilated -depilates -depilating -depilation -depilator -depilatory -depilatories -depilitant -depilous -depit -deplace -deplaceable -deplane -deplaned -deplanes -deplaning -deplant -deplantation -deplasmolysis -deplaster -deplenish -depletable -deplete -depleteable -depleted -depletes -deplethoric -depleting -depletion -depletions -depletive -depletory -deploy -deployable -deployed -deploying -deployment -deployments -deployment's -deploys -deploitation -deplorabilia -deplorability -deplorable -deplorableness -deplorably -deplorate -deploration -deplore -deplored -deploredly -deploredness -deplorer -deplorers -deplores -deploring -deploringly -deplumate -deplumated -deplumation -deplume -deplumed -deplumes -depluming -deplump -depoetize -depoh -Depoy -depolarisation -depolarise -depolarised -depolariser -depolarising -depolarization -depolarize -depolarized -depolarizer -depolarizers -depolarizes -depolarizing -depolymerization -depolymerize -depolymerized -depolymerizing -depolish -depolished -depolishes -depolishing -Depoliti -depoliticize -depoliticized -depoliticizes -depoliticizing -depone -deponed -deponent -deponents -deponer -depones -deponing -depopularize -depopulate -depopulated -depopulates -depopulating -depopulation -depopulations -depopulative -depopulator -depopulators -deport -deportability -deportable -deportation -deportations -deporte -deported -deportee -deportees -deporter -deporting -deportment -deportments -deports -deporture -deposable -deposal -deposals -depose -deposed -deposer -deposers -deposes -deposing -deposit -deposita -depositary -depositaries -depositation -deposited -depositee -depositing -Deposition -depositional -depositions -deposition's -depositive -deposito -depositor -depository -depositories -depositors -depositor's -deposits -depositum -depositure -deposure -depot -depotentiate -depotentiation -depots -depot's -Deppy -depr -depravate -depravation -depravations -deprave -depraved -depravedly -depravedness -depravement -depraver -depravers -depraves -depraving -depravingly -depravity -depravities -deprecable -deprecate -deprecated -deprecates -deprecating -deprecatingly -deprecation -deprecations -deprecative -deprecatively -deprecator -deprecatory -deprecatorily -deprecatoriness -deprecators -depreciable -depreciant -depreciate -depreciated -depreciates -depreciating -depreciatingly -depreciation -depreciations -depreciative -depreciatively -depreciator -depreciatory -depreciatoriness -depreciators -depredable -depredate -depredated -depredating -depredation -depredationist -depredations -depredator -depredatory -depredicate -DePree -deprehend -deprehensible -deprehension -depress -depressant -depressanth -depressants -depressed -depressed-bed -depresses -depressibility -depressibilities -depressible -depressing -depressingly -depressingness -Depression -depressional -depressionary -depressions -depression's -depressive -depressively -depressiveness -depressives -depressomotor -depressor -depressors -depressure -depressurize -deprest -depreter -deprevation -Deprez -depriment -deprint -depriorize -deprisure -deprivable -deprival -deprivals -deprivate -deprivation -deprivations -deprivation's -deprivative -deprive -deprived -deprivement -depriver -deprivers -deprives -depriving -deprocedured -deproceduring -deprogram -deprogrammed -deprogrammer -deprogrammers -deprogramming -deprogrammings -deprograms -deprome -deprostrate -deprotestantize -De-protestantize -deprovincialize -depsid -depside -depsides -dept -dept. -Deptford -depth -depth-charge -depth-charged -depth-charging -depthen -depthing -depthless -depthlessness -depthometer -depths -depthways -depthwise -depucel -depudorate -Depue -Depuy -depullulation -depulse -depurant -depurate -depurated -depurates -depurating -depuration -depurative -depurator -depuratory -depure -depurge -depurged -depurging -depurition -depursement -deputable -deputation -deputational -deputationist -deputationize -deputations -deputative -deputatively -deputator -depute -deputed -deputes -deputy -deputies -deputing -deputy's -deputise -deputised -deputyship -deputising -deputization -deputize -deputized -deputizes -deputizing -DEQNA -dequantitate -Dequeen -dequeue -dequeued -dequeues -dequeuing -Der -der. -Der'a -derabbinize -deracialize -deracinate -deracinated -deracinating -deracination -deracine -deradelphus -deradenitis -deradenoncus -Deragon -derah -deray -deraign -deraigned -deraigning -deraignment -deraigns -derail -derailed -derailer -derailing -derailleur -derailleurs -derailment -derailments -derails -Derain -Derayne -derays -derange -derangeable -deranged -derangement -derangements -deranger -deranges -deranging -derat -derate -derated -derater -derating -deration -derationalization -derationalize -deratization -deratize -deratized -deratizing -derats -deratted -deratting -Derbend -Derbent -Derby -Derbies -Derbyline -derbylite -Derbyshire -derbukka -Dercy -der-doing -dere -derealization -derecho -dereference -dereferenced -dereferences -dereferencing -deregister -deregulate -deregulated -deregulates -deregulating -deregulation -deregulationize -deregulations -deregulatory -dereign -dereism -dereistic -dereistically -Derek -derelict -derelicta -dereliction -derelictions -derelictly -derelictness -derelicts -dereligion -dereligionize -dereling -derelinquendi -derelinquish -derencephalocele -derencephalus -DEREP -derepress -derepression -derequisition -derere -deresinate -deresinize -derestrict -derf -derfly -derfness -derham -Derian -deric -Derick -deride -derided -derider -deriders -derides -deriding -deridingly -Deryl -Derina -Deringa -deringer -deringers -Derinna -Deripia -derisible -derision -derisions -derisive -derisively -derisiveness -derisory -deriv -deriv. -derivability -derivable -derivably -derival -derivant -derivate -derivately -derivates -derivation -derivational -derivationally -derivationist -derivations -derivation's -derivatist -derivative -derivatively -derivativeness -derivatives -derivative's -derive -derived -derivedly -derivedness -deriver -derivers -derives -deriving -Derk -Derleth -derm -derm- -derma -dermabrasion -Dermacentor -dermad -dermahemia -dermal -dermalgia -dermalith -dermamycosis -dermamyiasis -Derman -dermanaplasty -dermapostasis -Dermaptera -dermapteran -dermapterous -dermas -dermaskeleton -dermasurgery -dermat- -dermatagra -dermatalgia -dermataneuria -dermatatrophia -dermatauxe -dermathemia -dermatherm -dermatic -dermatine -dermatitis -dermatitises -dermato- -dermato-autoplasty -Dermatobia -dermatocele -dermatocellulitis -dermatocyst -dermatoconiosis -Dermatocoptes -dermatocoptic -dermatodynia -dermatogen -dermatoglyphic -dermatoglyphics -dermatograph -dermatography -dermatographia -dermatographic -dermatographism -dermatoheteroplasty -dermatoid -dermatolysis -dermatology -dermatologic -dermatological -dermatologies -dermatologist -dermatologists -dermatoma -dermatome -dermatomere -dermatomic -dermatomyces -dermatomycosis -dermatomyoma -dermatomuscular -dermatoneural -dermatoneurology -dermatoneurosis -dermatonosus -dermatopathia -dermatopathic -dermatopathology -dermatopathophobia -Dermatophagus -dermatophyte -dermatophytic -dermatophytosis -dermatophobia -dermatophone -dermatophony -dermatoplasm -dermatoplast -dermatoplasty -dermatoplastic -dermatopnagic -dermatopsy -Dermatoptera -dermatoptic -dermatorrhagia -dermatorrhea -dermatorrhoea -dermatosclerosis -dermatoscopy -dermatoses -dermatosiophobia -dermatosis -dermatoskeleton -dermatotherapy -dermatotome -dermatotomy -dermatotropic -dermatous -dermatoxerasia -dermatozoon -dermatozoonosis -dermatozzoa -dermatrophy -dermatrophia -dermatropic -dermenchysis -Dermestes -dermestid -Dermestidae -dermestoid -dermic -dermis -dermises -dermitis -dermititis -dermo- -dermoblast -Dermobranchia -dermobranchiata -dermobranchiate -Dermochelys -dermochrome -dermococcus -dermogastric -dermography -dermographia -dermographic -dermographism -dermohemal -dermohemia -dermohumeral -dermoid -dermoidal -dermoidectomy -dermoids -dermol -dermolysis -dermomycosis -dermomuscular -dermonecrotic -dermoneural -dermoneurosis -dermonosology -dermoosseous -dermoossification -dermopathy -dermopathic -dermophyte -dermophytic -dermophlebitis -dermophobe -dermoplasty -Dermoptera -dermopteran -dermopterous -dermoreaction -Dermorhynchi -dermorhynchous -dermosclerite -dermosynovitis -dermoskeletal -dermoskeleton -dermostenosis -dermostosis -Dermot -dermotherm -dermotropic -Dermott -dermovaccine -derms -dermutation -dern -Derna -derned -derner -dernful -dernier -derning -dernly -dero -derobe -derodidymus -derog -derogate -derogated -derogately -derogates -derogating -derogation -derogations -derogative -derogatively -derogator -derogatory -derogatorily -derogatoriness -deromanticize -Deron -Deroo -DeRosa -Derotrema -Derotremata -derotremate -derotrematous -derotreme -Derounian -derout -DERP -Derr -Derrek -Derrel -derri -Derry -Derrick -derricking -derrickman -derrickmen -derricks -derrid -derride -derry-down -Derriey -derriere -derrieres -derries -Derrik -Derril -derring-do -derringer -derringers -derrire -Derris -derrises -Derron -Derte -derth -dertra -dertrotheca -dertrum -deruinate -Deruyter -deruralize -de-russianize -derust -derv -derve -dervish -dervishes -dervishhood -dervishism -dervishlike -Derward -Derwent -Derwentwater -Derwin -Derwon -Derwood -Derzon -DES -des- -desaccharification -desacralization -desacralize -desagrement -Desai -desalinate -desalinated -desalinates -desalinating -desalination -desalinator -desalinization -desalinize -desalinized -desalinizes -desalinizing -desalt -desalted -desalter -desalters -desalting -desalts -desamidase -desamidization -desaminase -desand -desanded -desanding -desands -DeSantis -Desarc -Desargues -desaturate -desaturation -desaurin -desaurine -de-saxonize -Desberg -desc -desc. -descale -descaled -descaling -descamisado -descamisados -Descanso -descant -descanted -descanter -descanting -descantist -descants -Descartes -descend -descendability -descendable -descendance -Descendant -descendants -descendant's -descended -descendence -descendent -descendental -descendentalism -descendentalist -descendentalistic -descendents -descender -descenders -descendibility -descendible -descending -descendingly -descends -descension -descensional -descensionist -descensive -descensory -descensories -descent -descents -descent's -Deschamps -Deschampsia -deschool -Deschutes -descloizite -Descombes -descort -descry -descrial -describability -describable -describably -describe -described -describent -describer -describers -describes -describing -descried -descrier -descriers -descries -descrying -descript -description -descriptionist -descriptionless -descriptions -description's -descriptive -descriptively -descriptiveness -descriptives -descriptivism -descriptor -descriptory -descriptors -descriptor's -descrive -descure -Desdamona -Desdamonna -Desde -Desdee -Desdemona -deseam -deseasonalize -desecate -desecrate -desecrated -desecrater -desecrates -desecrating -desecration -desecrations -desecrator -desectionalize -deseed -desegmentation -desegmented -desegregate -desegregated -desegregates -desegregating -desegregation -desegregations -Deseilligny -deselect -deselected -deselecting -deselects -desemer -de-semiticize -desensitization -desensitizations -desensitize -desensitized -desensitizer -desensitizers -desensitizes -desensitizing -desentimentalize -deseret -desert -desert-bred -deserted -desertedly -desertedness -deserter -deserters -desertful -desertfully -desertic -deserticolous -desertification -deserting -desertion -desertions -desertism -desertless -desertlessly -desertlike -desert-locked -desertness -desertress -desertrice -deserts -desertward -desert-wearied -deserve -deserved -deservedly -deservedness -deserveless -deserver -deservers -deserves -deserving -deservingly -deservingness -deservings -desesperance -desex -desexed -desexes -desexing -desexualization -desexualize -desexualized -desexualizing -Desha -deshabille -Deshler -Desi -desiatin -desyatin -desicate -desiccant -desiccants -desiccate -desiccated -desiccates -desiccating -desiccation -desiccations -desiccative -desiccator -desiccatory -desiccators -desiderable -desiderant -desiderata -desiderate -desiderated -desiderating -desideration -desiderative -desideratum -Desiderii -desiderium -Desiderius -desiderta -desidiose -desidious -desight -desightment -design -designable -designado -designate -designated -designates -designating -designation -designations -designative -designator -designatory -designators -designator's -designatum -designed -designedly -designedness -designee -designees -designer -designers -designer's -designful -designfully -designfulness -designing -designingly -designless -designlessly -designlessness -designment -designs -desyl -desilicate -desilicated -desilicating -desilicify -desilicification -desilicified -desiliconization -desiliconize -desilt -desilver -desilvered -desilvering -desilverization -desilverize -desilverized -desilverizer -desilverizing -desilvers -DeSimone -desynapsis -desynaptic -desynchronize -desynchronizing -desinence -desinent -desinential -desynonymization -desynonymize -desiodothyroxine -desipience -desipiency -desipient -desipramine -desirability -desirabilities -desirable -desirableness -desirably -Desirae -desire -Desirea -desireable -Desireah -desired -desiredly -desiredness -Desiree -desireful -desirefulness -desireless -desirelessness -desirer -desirers -desires -Desiri -desiring -desiringly -desirous -desirously -desirousness -desist -desistance -desisted -desistence -desisting -desistive -desists -desition -desitive -desize -desk -deskbound -deskill -desklike -deskman -deskmen -desks -desk's -desktop -desktops -Deslacs -Deslandres -deslime -desm- -Desma -desmachymatous -desmachyme -desmacyte -desman -desmans -Desmanthus -Desmarestia -Desmarestiaceae -desmarestiaceous -Desmatippus -desmectasia -desmepithelium -Desmet -desmic -desmid -Desmidiaceae -desmidiaceous -Desmidiales -desmidian -desmidiology -desmidiologist -desmids -desmine -desmitis -desmo- -desmocyte -desmocytoma -Desmodactyli -desmodynia -Desmodium -desmodont -Desmodontidae -Desmodus -desmogen -desmogenous -Desmognathae -desmognathism -desmognathous -desmography -desmohemoblast -desmoid -desmoids -Desmoines -desmolase -desmology -desmoma -Desmomyaria -desmon -Desmona -Desmoncus -Desmond -desmoneme -desmoneoplasm -desmonosology -Desmontes -desmopathy -desmopathology -desmopathologist -desmopelmous -desmopexia -desmopyknosis -desmorrhexis -Desmoscolecidae -Desmoscolex -desmose -desmosis -desmosite -desmosome -Desmothoraca -desmotomy -desmotrope -desmotropy -desmotropic -desmotropism -Desmoulins -Desmund -desobligeant -desocialization -desocialize -desoeuvre -desolate -desolated -desolately -desolateness -desolater -desolates -desolating -desolatingly -desolation -desolations -desolative -desolator -desole -desonation -desophisticate -desophistication -desorb -desorbed -desorbing -desorbs -desorption -Desoto -desoxalate -desoxalic -desoxy- -desoxyanisoin -desoxybenzoin -desoxycinchonine -desoxycorticosterone -desoxyephedrine -desoxymorphine -desoxyribonuclease -desoxyribonucleic -desoxyribonucleoprotein -desoxyribose -despair -despaired -despairer -despairful -despairfully -despairfulness -despairing -despairingly -despairingness -despairs -desparple -despatch -despatched -despatcher -despatchers -despatches -despatching -despeche -despecialization -despecialize -despecificate -despecification -despect -despectant -despeed -despend -Despenser -desperacy -desperado -desperadoes -desperadoism -desperados -desperance -desperate -desperately -desperateness -desperation -desperations -despert -Despiau -despicability -despicable -despicableness -despicably -despiciency -despin -despiritualization -despiritualize -despisable -despisableness -despisal -despise -despised -despisedness -despisement -despiser -despisers -despises -despising -despisingly -despite -despited -despiteful -despitefully -despitefulness -despiteous -despiteously -despites -despiting -despitous -Despoena -despoil -despoiled -despoiler -despoilers -despoiling -despoilment -despoilments -despoils -Despoina -despoliation -despoliations -despond -desponded -despondence -despondency -despondencies -despondent -despondently -despondentness -desponder -desponding -despondingly -desponds -desponsage -desponsate -desponsories -despose -despot -despotat -Despotes -despotic -despotical -despotically -despoticalness -despoticly -despotism -despotisms -despotist -despotize -despots -despot's -despouse -DESPR -despraise -despumate -despumated -despumating -despumation -despume -desquamate -desquamated -desquamating -desquamation -desquamations -desquamative -desquamatory -desray -dess -dessa -Dessalines -Dessau -dessert -desserts -dessert's -dessertspoon -dessertspoonful -dessertspoonfuls -dessiatine -dessicate -dessil -Dessma -dessous -dessus -DESTA -destabilization -destabilize -destabilized -destabilizing -destain -destained -destaining -destains -destalinization -de-Stalinization -destalinize -de-Stalinize -de-Stalinized -de-Stalinizing -destandardize -Deste -destemper -desterilization -desterilize -desterilized -desterilizing -Desterro -destigmatization -destigmatize -destigmatizing -Destin -destinal -destinate -destination -destinations -destination's -destine -destined -Destinee -destines -destinezite -Destiny -destinies -destining -destiny's -destinism -destinist -destituent -destitute -destituted -destitutely -destituteness -destituting -destitution -destitutions -desto -destool -destoolment -destour -Destrehan -destrer -destress -destressed -destry -destrier -destriers -destroy -destroyable -destroyed -destroyer -destroyers -destroyer's -destroying -destroyingly -destroys -destruct -destructed -destructibility -destructibilities -destructible -destructibleness -destructing -destruction -destructional -destructionism -destructionist -destructions -destruction's -destructive -destructively -destructiveness -destructivism -destructivity -destructor -destructory -destructors -destructs -destructuralize -destrudo -destuff -destuffing -destuffs -desubstantialize -desubstantiate -desucration -desudation -desuete -desuetude -desuetudes -desugar -desugared -desugaring -desugarize -desugars -Desulfovibrio -desulfur -desulfurate -desulfurated -desulfurating -desulfuration -desulfured -desulfuring -desulfurisation -desulfurise -desulfurised -desulfuriser -desulfurising -desulfurization -desulfurize -desulfurized -desulfurizer -desulfurizing -desulfurs -desulphur -desulphurate -desulphurated -desulphurating -desulphuration -desulphuret -desulphurise -desulphurised -desulphurising -desulphurization -desulphurize -desulphurized -desulphurizer -desulphurizing -desultor -desultory -desultorily -desultoriness -desultorious -desume -desuperheater -desuvre -DET -detach -detachability -detachable -detachableness -detachably -detache -detached -detachedly -detachedness -detacher -detachers -detaches -detaching -detachment -detachments -detachment's -detachs -detacwable -detail -detailed -detailedly -detailedness -detailer -detailers -detailing -detailism -detailist -details -detain -detainable -detainal -detained -detainee -detainees -detainer -detainers -detaining -detainingly -detainment -detains -detant -detar -detassel -detat -d'etat -detax -detd -detect -detectability -detectable -detectably -detectaphone -detected -detecter -detecters -detectible -detecting -detection -detections -detection's -detective -detectives -detectivism -detector -detectors -detector's -detects -detenant -detenebrate -detent -detente -detentes -detention -detentions -detentive -detents -detenu -detenue -detenues -detenus -deter -deterge -deterged -detergence -detergency -detergent -detergents -deterger -detergers -deterges -detergible -deterging -detering -deteriorate -deteriorated -deteriorates -deteriorating -deterioration -deteriorationist -deteriorations -deteriorative -deteriorator -deteriorism -deteriority -determ -determa -determent -determents -determinability -determinable -determinableness -determinably -determinacy -determinant -determinantal -determinants -determinant's -determinate -determinated -determinately -determinateness -determinating -determination -determinations -determinative -determinatively -determinativeness -determinator -determine -determined -determinedly -determinedness -determiner -determiners -determines -determining -determinism -determinist -deterministic -deterministically -determinists -determinoid -deterrability -deterrable -deterration -deterred -deterrence -deterrences -deterrent -deterrently -deterrents -deterrer -deterrers -deterring -deters -detersion -detersive -detersively -detersiveness -detest -detestability -detestable -detestableness -detestably -detestation -detestations -detested -detester -detesters -detesting -detests -Deth -dethyroidism -dethronable -dethrone -dethroned -dethronement -dethronements -dethroner -dethrones -dethroning -deti -detick -deticked -deticker -detickers -deticking -deticks -detin -detinet -detinue -detinues -detinuit -Detmold -detn -detonability -detonable -detonatability -detonatable -detonate -detonated -detonates -detonating -detonation -detonational -detonations -detonative -detonator -detonators -detonize -detorsion -detort -detour -detoured -detouring -detournement -detours -detox -detoxed -detoxes -detoxicant -detoxicate -detoxicated -detoxicating -detoxication -detoxicator -detoxify -detoxification -detoxified -detoxifier -detoxifies -detoxifying -detoxing -detract -detracted -detracter -detracting -detractingly -detraction -detractions -detractive -detractively -detractiveness -detractor -detractory -detractors -detractor's -detractress -detracts -detray -detrain -detrained -detraining -detrainment -detrains -detraque -detrect -detrench -detribalization -detribalize -detribalized -detribalizing -detriment -detrimental -detrimentality -detrimentally -detrimentalness -detriments -detrital -detrited -detrition -detritivorous -detritus -detrivorous -Detroit -Detroiter -detruck -detrude -detruded -detrudes -detruding -detruncate -detruncated -detruncating -detruncation -detrusion -detrusive -detrusor -detruss -Dett -Detta -dette -Dettmer -detubation -detumescence -detumescent -detune -detuned -detuning -detur -deturb -deturn -deturpate -Deucalion -deuce -deuce-ace -deuced -deucedly -deuces -deucing -deul -DEUNA -deunam -deuniting -Deuno -deurbanize -Deurne -deurwaarder -Deus -deusan -Deusdedit -Deut -deut- -Deut. -deutencephalic -deutencephalon -deuter- -deuteragonist -deuteranomal -deuteranomaly -deuteranomalous -deuteranope -deuteranopia -deuteranopic -deuterate -deuteration -deuteric -deuteride -deuterium -deutero- -deuteroalbumose -deuterocanonical -deuterocasease -deuterocone -deuteroconid -deuterodome -deuteroelastose -deuterofibrinose -deuterogamy -deuterogamist -deuterogelatose -deuterogenesis -deuterogenic -deuteroglobulose -deutero-malayan -Deuteromycetes -deuteromyosinose -deuteromorphic -deuteron -Deutero-nicene -Deuteronomy -Deuteronomic -Deuteronomical -Deuteronomist -Deuteronomistic -deuterons -deuteropathy -deuteropathic -deuteroplasm -deuteroprism -deuteroproteose -deuteroscopy -deuteroscopic -deuterosy -deuterostoma -Deuterostomata -deuterostomatous -deuterostome -deuterotype -deuterotoky -deuterotokous -deuterovitellose -deuterozooid -deuto- -deutobromide -deutocarbonate -deutochloride -deutomala -deutomalal -deutomalar -deutomerite -deuton -deutonephron -deutonymph -deutonymphal -deutoplasm -deutoplasmic -deutoplastic -deutoscolex -deutovum -deutoxide -Deutsch -deutsche -Deutschemark -Deutscher -Deutschland -Deutschmark -Deutzia -deutzias -deux -Deux-S -deuzan -Dev -Deva -devachan -devadasi -Devaki -deval -devall -devaloka -devalorize -devaluate -devaluated -devaluates -devaluating -devaluation -devaluations -devalue -devalued -devalues -devaluing -Devan -Devanagari -devance -Devaney -devant -devaporate -devaporation -devaraja -devarshi -devas -devast -devastate -devastated -devastates -devastating -devastatingly -devastation -devastations -devastative -devastator -devastators -devastavit -devaster -devata -devaul -Devault -devaunt -devchar -deve -devein -deveined -deveining -deveins -devel -develed -develin -develing -develop -developability -developable -develope -developed -developedness -developement -developer -developers -developes -developing -developist -development -developmental -developmentalist -developmentally -developmentary -developmentarian -developmentist -developments -development's -developoid -developpe -developpes -develops -devels -Deventer -devenustate -Dever -deverbal -deverbative -Devereux -Devers -devertebrated -devest -devested -devesting -devests -devex -devexity -Devi -Devy -deviability -deviable -deviance -deviances -deviancy -deviancies -deviant -deviants -deviant's -deviascope -deviate -deviated -deviately -deviates -deviating -deviation -deviational -deviationism -deviationist -deviations -deviative -deviator -deviatory -deviators -device -deviceful -devicefully -devicefulness -devices -device's -devide -Devil -devilbird -devil-born -devil-devil -devil-diver -devil-dodger -devildom -deviled -deviler -deviless -devilet -devilfish -devil-fish -devilfishes -devil-giant -devil-god -devil-haired -devilhood -devily -deviling -devil-inspired -devil-in-the-bush -devilish -devilishly -devilishness -devilism -devility -devilize -devilized -devilizing -devilkin -devilkins -Deville -devilled -devillike -devil-like -devilling -devil-may-care -devil-may-careness -devilman -devilment -devilments -devilmonger -devil-porter -devilry -devil-ridden -devilries -devils -devil's -devil's-bit -devil's-bones -devilship -devil's-ivy -devils-on-horseback -devil's-pincushion -devil's-tongue -devil's-walking-stick -devil-tender -deviltry -deviltries -devilward -devilwise -devilwood -Devin -Devina -devinct -Devine -Devinna -Devinne -devious -deviously -deviousness -devirginate -devirgination -devirginator -devirilize -devisability -devisable -devisal -devisals -deviscerate -devisceration -devise -devised -devisee -devisees -deviser -devisers -devises -devising -devisings -devisor -devisors -devitalisation -devitalise -devitalised -devitalising -devitalization -devitalize -devitalized -devitalizes -devitalizing -devitaminize -devitation -devitrify -devitrifiable -devitrification -devitrified -devitrifying -Devitt -Devland -Devlen -Devlin -devocalisation -devocalise -devocalised -devocalising -devocalization -devocalize -devocalized -devocalizing -devocate -devocation -devoice -devoiced -devoices -devoicing -devoid -devoir -devoirs -Devol -devolatilisation -devolatilise -devolatilised -devolatilising -devolatilization -devolatilize -devolatilized -devolatilizing -devolute -devolution -devolutionary -devolutionist -devolutive -devolve -devolved -devolvement -devolvements -devolves -devolving -Devon -Devona -Devondra -Devonian -Devonic -devonite -Devonna -Devonne -Devonport -devons -Devonshire -Devora -devoration -devorative -devot -devota -devotary -devote -devoted -devotedly -devotedness -devotee -devoteeism -devotees -devotee's -devotement -devoter -devotes -devoting -devotion -devotional -devotionalism -devotionalist -devotionality -devotionally -devotionalness -devotionary -devotionate -devotionist -devotions -devoto -devour -devourable -devoured -devourer -devourers -devouress -devouring -devouringly -devouringness -devourment -devours -devout -devouter -devoutful -devoutless -devoutlessly -devoutlessness -devoutly -devoutness -devoutnesses -devove -devow -devs -devulcanization -devulcanize -devulgarize -devvel -devwsor -DEW -Dewain -DeWayne -dewal -Dewali -dewan -dewanee -dewani -dewanny -dewans -dewanship -Dewar -dewars -Dewart -D'ewart -dewata -dewater -dewatered -dewaterer -dewatering -dewaters -dewax -dewaxed -dewaxes -dewaxing -dewbeam -dew-beat -dew-beater -dew-bedabbled -dew-bediamonded -dew-bent -dewberry -dew-berry -dewberries -dew-bespangled -dew-bespattered -dew-besprinkled -dew-boine -dew-bolne -dew-bright -dewcap -dew-clad -dewclaw -dew-claw -dewclawed -dewclaws -dew-cold -dewcup -dew-dabbled -dewdamp -dew-drenched -dew-dripped -dewdrop -dewdropper -dew-dropping -dewdrops -dewdrop's -dew-drunk -dewed -Dewees -Deweese -Dewey -Deweyan -deweylite -Deweyville -dewer -dewfall -dew-fall -dewfalls -dew-fed -dewflower -dew-gemmed -Dewhirst -Dewhurst -Dewi -dewy -dewy-bright -dewy-dark -Dewie -dewy-eyed -dewier -dewiest -dewy-feathered -dewy-fresh -dewily -dewiness -dewinesses -dewing -dewy-pinioned -Dewyrose -Dewitt -Dewittville -dew-laden -dewlap -dewlapped -dewlaps -dewless -dewlight -dewlike -dew-lipped -dew-lit -dewool -dewooled -dewooling -dewools -deworm -dewormed -deworming -deworms -dew-pearled -dew-point -dew-pond -dewret -dew-ret -dewrot -dews -Dewsbury -dew-sprent -dew-sprinkled -dewtry -dewworm -dew-worm -Dex -Dexamenus -dexamethasone -Dexamyl -DEXEC -Dexedrine -dexes -dexy -dexie -dexies -dexiocardia -dexiotrope -dexiotropic -dexiotropism -dexiotropous -Dexter -dexterical -dexterity -dexterous -dexterously -dexterousness -dextorsal -dextr- -Dextra -dextrad -dextral -dextrality -dextrally -dextran -dextranase -dextrane -dextrans -dextraural -dextrer -dextrin -dextrinase -dextrinate -dextrine -dextrines -dextrinize -dextrinous -dextrins -dextro -dextro- -dextroamphetamine -dextroaural -dextrocardia -dextrocardial -dextrocerebral -dextrocular -dextrocularity -dextroduction -dextrogyrate -dextrogyration -dextrogyratory -dextrogyre -dextrogyrous -dextroglucose -dextro-glucose -dextrolactic -dextrolimonene -dextromanual -dextropedal -dextropinene -dextrorotary -dextrorotatary -dextrorotation -dextrorotatory -dextrorsal -dextrorse -dextrorsely -dextrosazone -dextrose -dextroses -dextrosinistral -dextrosinistrally -dextrosuria -dextrotartaric -dextrotropic -dextrotropous -dextrous -dextrously -dextrousness -dextroversion -Dezaley -Dezful -Dezhnev -dezymotize -dezinc -dezincation -dezinced -dezincify -dezincification -dezincified -dezincifying -dezincing -dezincked -dezincking -dezincs -dezinkify -DF -DFA -dfault -DFC -DFD -DFE -DFI -D-flat -DFM -DFMS -DFRF -DFS -DFT -DFW -DG -DGA -dgag -dghaisa -d-glucose -DGP -DGSC -DH -dh- -dha -dhabb -Dhabi -Dhahran -dhai -dhak -Dhaka -dhaks -dhal -dhals -dhaman -dhamma -Dhammapada -dhamnoo -dhan -dhangar -Dhanis -dhanuk -dhanush -Dhanvantari -Dhar -dharana -dharani -Dharma -dharmakaya -Dharmapada -dharmas -Dharmasastra -dharmashastra -dharmasmriti -Dharmasutra -dharmic -dharmsala -dharna -dharnas -Dhaulagiri -dhaura -dhauri -dhava -dhaw -Dhekelia -Dheneb -dheri -DHHS -dhyal -dhyana -dhikr -dhikrs -Dhiman -Dhiren -DHL -Dhlos -dhobee -dhobey -dhobi -dhoby -dhobie -dhobies -dhobis -Dhodheknisos -d'Holbach -dhole -dholes -dhoney -dhoni -dhooley -dhooly -dhoolies -dhoon -dhoora -dhooras -dhooti -dhootie -dhooties -dhootis -dhotee -dhoti -dhoty -dhotis -dhoul -dhourra -dhourras -dhow -dhows -Dhritarashtra -Dhruv -DHSS -Dhu -dhu'l-hijja -dhu'l-qa'dah -Dhumma -dhunchee -dhunchi -Dhundia -dhurna -dhurnas -dhurra -dhurry -dhurrie -dhurries -dhuti -dhutis -DI -Dy -di- -dy- -di. -DIA -dia- -diabantite -diabase -diabase-porphyrite -diabases -diabasic -diabaterial -Diabelli -diabetes -diabetic -diabetical -diabetics -diabetogenic -diabetogenous -diabetometer -diabetophobia -diable -dyable -diablene -diablery -diablerie -diableries -Diablo -diablotin -diabol- -diabolarch -diabolarchy -diabolatry -diabolepsy -diaboleptic -diabolic -diabolical -diabolically -diabolicalness -diabolify -diabolification -diabolifuge -diabolisation -diabolise -diabolised -diabolising -diabolism -diabolist -diabolization -diabolize -diabolized -diabolizing -diabolo -diabology -diabological -diabolology -diabolonian -diabolos -diabolus -diabrosis -diabrotic -Diabrotica -diacanthous -diacatholicon -diacaustic -diacetamide -diacetate -diacetic -diacetyl -diacetylene -diacetylmorphine -diacetyls -diacetin -diacetine -diacetonuria -diaceturia -diachaenium -diachylon -diachylum -diachyma -diachoresis -diachoretic -diachrony -diachronic -diachronically -diachronicness -diacid -diacidic -diacids -diacipiperazine -diaclase -diaclasis -diaclasite -diaclastic -diacle -diaclinal -diacoca -diacodion -diacodium -diacoele -diacoelia -diacoelosis -diaconal -diaconate -diaconia -diaconica -diaconicon -diaconicum -diaconus -diacope -diacoustics -diacranterian -diacranteric -diacrisis -diacritic -diacritical -diacritically -diacritics -Diacromyodi -diacromyodian -diact -diactin -diactinal -diactine -diactinic -diactinism -diaculum -DIAD -dyad -di-adapan -Diadelphia -diadelphian -diadelphic -diadelphous -diadem -Diadema -Diadematoida -diademed -diademing -diadems -diaderm -diadermic -diadic -dyadic -dyadically -dyadics -diadkokinesia -diadoche -Diadochi -diadochy -Diadochian -diadochic -diadochite -diadochokinesia -diadochokinesis -diadochokinetic -diadokokinesis -diadoumenos -diadrom -diadrome -diadromous -dyads -diadumenus -diaene -diaereses -diaeresis -diaeretic -diaetetae -diag -diag. -diagenesis -diagenetic -diagenetically -diageotropy -diageotropic -diageotropism -Diaghilev -diaglyph -diaglyphic -diaglyptic -diagnosable -diagnose -diagnoseable -diagnosed -diagnoses -diagnosing -diagnosis -diagnostic -diagnostical -diagnostically -diagnosticate -diagnosticated -diagnosticating -diagnostication -diagnostician -diagnosticians -diagnostics -diagnostic's -diagometer -diagonal -diagonal-built -diagonal-cut -diagonality -diagonalizable -diagonalization -diagonalize -diagonally -diagonals -diagonalwise -diagonial -diagonic -diagram -diagramed -diagraming -diagrammable -diagrammatic -diagrammatical -diagrammatically -diagrammatician -diagrammatize -diagrammed -diagrammer -diagrammers -diagrammer's -diagrammeter -diagramming -diagrammitically -diagrams -diagram's -diagraph -diagraphic -diagraphical -diagraphics -diagraphs -diagredium -diagrydium -Diaguitas -Diaguite -Diahann -diaheliotropic -diaheliotropically -diaheliotropism -Dyak -diaka -diakineses -diakinesis -diakinetic -dyakisdodecahedron -dyakis-dodecahedron -Dyakish -diakonika -diakonikon -DIAL -Dyal -dial. -dialcohol -dialdehyde -dialect -dialectal -dialectalize -dialectally -dialectic -dialectical -dialectically -dialectician -dialecticism -dialecticize -dialectics -dialectologer -dialectology -dialectologic -dialectological -dialectologically -dialectologies -dialectologist -dialector -dialects -dialect's -dialed -dialer -dialers -dialy- -dialycarpous -dialin -dialiness -dialing -dialings -Dialypetalae -dialypetalous -dialyphyllous -dialysability -dialysable -dialysate -dialysation -dialyse -dialysed -dialysepalous -dialyser -dialysers -dialyses -dialysing -dialysis -dialist -dialystaminous -dialystely -dialystelic -Dialister -dialists -dialytic -dialytically -dialyzability -dialyzable -dialyzate -dialyzation -dialyzator -dialyze -dialyzed -dialyzer -dialyzers -dialyzes -dialyzing -dialkyl -dialkylamine -dialkylic -diallage -diallages -diallagic -diallagite -diallagoid -dialled -diallel -diallela -dialleli -diallelon -diallelus -dialler -diallers -diallyl -di-allyl -dialling -diallings -diallist -diallists -dialog -dialoged -dialoger -dialogers -dialogged -dialogging -dialogic -dialogical -dialogically -dialogised -dialogising -dialogism -dialogist -dialogistic -dialogistical -dialogistically -dialogite -dialogize -dialogized -dialogizing -dialogs -dialog's -dialogue -dialogued -dialoguer -dialogues -dialogue's -dialoguing -Dialonian -dial-plate -dials -dialup -dialuric -diam -diam. -diamagnet -diamagnetic -diamagnetically -diamagnetism -diamagnetize -diamagnetometer -Diamant -Diamanta -Diamante -diamantiferous -diamantine -diamantoid -diamat -diamb -diamber -diambic -diamegnetism -diamesogamous -diameter -diameters -diameter's -diametral -diametrally -diametric -diametrical -diametrically -diamicton -diamide -diamides -diamido -diamido- -diamidogen -diamyl -diamylene -diamylose -diamin -diamine -diamines -diaminogen -diaminogene -diamins -diammine -diamminobromide -diamminonitrate -diammonium -Diamond -diamondback -diamond-back -diamondbacked -diamond-backed -diamondbacks -diamond-beetle -diamond-boring -diamond-bright -diamond-cut -diamond-cutter -diamonded -diamond-headed -diamondiferous -diamonding -diamondize -diamondized -diamondizing -diamondlike -diamond-matched -diamond-paned -diamond-point -diamond-pointed -diamond-producing -diamonds -diamond's -diamond-shaped -diamond-snake -diamond-tiled -diamond-tipped -Diamondville -diamondwise -diamondwork -diamorphine -diamorphosis -Diamox -Dian -Dyan -Diana -Dyana -Diancecht -diander -Diandra -Diandre -Diandria -diandrian -diandrous -Diane -Dyane -Dianemarie -Diane-Marie -dianetics -Dianil -dianilid -dianilide -dianisidin -dianisidine -dianite -Diann -Dyann -Dianna -Dyanna -Dianne -Dyanne -Diannne -dianodal -dianoetic -dianoetical -dianoetically -dianoia -dianoialogy -Diantha -Dianthaceae -Dianthe -Dianthera -Dianthus -dianthuses -diantre -Diao -diapalma -diapase -diapasm -Diapason -diapasonal -diapasons -diapause -diapaused -diapauses -diapausing -diapedeses -diapedesis -diapedetic -Diapensia -Diapensiaceae -diapensiaceous -diapente -diaper -diapered -diapery -diapering -diapers -diaper's -diaphane -diaphaneity -diaphany -diaphanie -diaphanometer -diaphanometry -diaphanometric -diaphanoscope -diaphanoscopy -diaphanotype -diaphanous -diaphanously -diaphanousness -diaphemetric -diaphyseal -diaphyses -diaphysial -diaphysis -diaphone -diaphones -diaphony -diaphonia -diaphonic -diaphonical -diaphonies -diaphorase -diaphoreses -diaphoresis -diaphoretic -diaphoretical -diaphoretics -diaphorite -diaphote -diaphototropic -diaphototropism -diaphragm -diaphragmal -diaphragmatic -diaphragmatically -diaphragmed -diaphragming -diaphragms -diaphragm's -diaphtherin -diapyesis -diapyetic -diapir -diapiric -diapirs -diaplases -diaplasis -diaplasma -diaplex -diaplexal -diaplexus -diapnoe -diapnoic -diapnotic -diapophyses -diapophysial -diapophysis -diaporesis -Diaporthe -diapositive -diapsid -Diapsida -diapsidan -Diarbekr -diarch -diarchy -dyarchy -diarchial -diarchic -dyarchic -dyarchical -diarchies -dyarchies -diarhemia -diary -diarial -diarian -diaries -diary's -diarist -diaristic -diarists -diarize -Diarmid -Diarmit -Diarmuid -diarrhea -diarrheal -diarrheas -diarrheic -diarrhetic -diarrhoea -diarrhoeal -diarrhoeas -diarrhoeic -diarrhoetic -diarsenide -diarthric -diarthrodial -diarthroses -diarthrosis -diarticular -DIAS -Dyas -diaschisis -diaschisma -diaschistic -Diascia -diascope -diascopy -diascord -diascordium -diasene -Diasia -diasynthesis -diasyrm -diasystem -diaskeuasis -diaskeuast -diasper -Diaspidinae -diaspidine -Diaspinae -diaspine -diaspirin -Diaspora -diasporas -diaspore -diaspores -Dyassic -diastalses -diastalsis -diastaltic -diastase -diastases -diastasic -diastasimetry -diastasis -diastataxy -diastataxic -diastatic -diastatically -diastem -diastema -diastemata -diastematic -diastematomyelia -diastems -diaster -dyaster -diastereoisomer -diastereoisomeric -diastereoisomerism -diastereomer -diasters -diastyle -diastimeter -diastole -diastoles -diastolic -diastomatic -diastral -diastrophe -diastrophy -diastrophic -diastrophically -diastrophism -diatessaron -diatesseron -diathermacy -diathermal -diathermance -diathermancy -diathermaneity -diathermanous -diathermy -diathermia -diathermic -diathermies -diathermize -diathermometer -diathermotherapy -diathermous -diatheses -diathesic -diathesis -diathetic -Diatype -diatom -Diatoma -Diatomaceae -diatomacean -diatomaceoid -diatomaceous -Diatomales -Diatomeae -diatomean -diatomic -diatomicity -diatomiferous -diatomin -diatomine -diatomist -diatomite -diatomous -diatoms -diatonic -diatonical -diatonically -diatonicism -diatonous -diatoric -diatreme -diatribe -diatribes -diatribe's -diatribist -Diatryma -Diatrymiformes -diatron -diatrons -diatropic -diatropism -Diau -diauli -diaulic -diaulos -Dyaus -Dyaus-pitar -diavolo -diaxial -diaxon -diaxone -diaxonic -Diaz -diazenithal -diazepam -diazepams -diazeuctic -diazeutic -diazeuxis -diazid -diazide -diazin -diazine -diazines -diazinon -diazins -diazo -diazo- -diazoalkane -diazoamin -diazoamine -diazoamino -diazoaminobenzene -diazoanhydride -diazoate -diazobenzene -diazohydroxide -diazoic -diazoimide -diazoimido -diazole -diazoles -diazoma -diazomethane -diazonium -diazotate -diazotic -diazotype -diazotizability -diazotizable -diazotization -diazotize -diazotized -diazotizing -diaz-oxide -DIB -Diba -Dibai -dibase -dibasic -dibasicity -dibatag -Dibatis -Dibb -dibbed -Dibbell -dibber -dibbers -dibbing -dibble -dibbled -dibbler -dibblers -dibbles -dibbling -Dibbrun -dibbuk -dybbuk -dibbukim -dybbukim -dibbuks -dybbuks -Dibelius -dibenzyl -dibenzoyl -dibenzophenazine -dibenzopyrrole -D'Iberville -dibhole -dib-hole -DiBiasi -DiBlasi -diblastula -Diboll -diborate -Dibothriocephalus -dibrach -dibranch -Dibranchia -Dibranchiata -dibranchiate -dibranchious -Dibri -Dibrin -dibrom -dibromid -dibromide -dibromoacetaldehyde -dibromobenzene -Dibru -dibs -dibstone -dibstones -dibucaine -dibutyl -dibutylamino-propanol -dibutyrate -dibutyrin -DIC -dicacity -dicacodyl -Dicaeidae -dicaeology -dicalcic -dicalcium -dicarbo- -dicarbonate -dicarbonic -dicarboxylate -dicarboxylic -dicaryon -dicaryophase -dicaryophyte -dicaryotic -dicarpellary -dicast -dicastery -dicasteries -dicastic -dicasts -dicatalectic -dicatalexis -Diccon -Dice -Dyce -diceboard -dicebox -dice-box -dicecup -diced -dicey -dicellate -diceman -Dicentra -dicentras -dicentrin -dicentrine -DiCenzo -dicephalism -dicephalous -dicephalus -diceplay -dicer -Diceras -Diceratidae -dicerion -dicerous -dicers -dices -dicetyl -dice-top -Dich -dich- -Dichapetalaceae -Dichapetalum -dichas -dichasia -dichasial -dichasium -dichastasis -dichastic -Dyche -Dichelyma -Dichy -dichlamydeous -dichlone -dichloramin -dichloramine -dichloramine-t -dichlorhydrin -dichloride -dichloroacetic -dichlorobenzene -dichlorodifluoromethane -dichlorodiphenyltrichloroethane -dichlorohydrin -dichloromethane -dichlorvos -dicho- -dichocarpism -dichocarpous -dichogamy -dichogamic -dichogamous -Dichondra -Dichondraceae -dichopodial -dichoptic -dichord -dichoree -Dichorisandra -dichotic -dichotically -dichotomal -dichotomy -dichotomic -dichotomically -dichotomies -dichotomisation -dichotomise -dichotomised -dichotomising -dichotomist -dichotomistic -dichotomization -dichotomize -dichotomized -dichotomizing -dichotomous -dichotomously -dichotomousness -dichotriaene -dichro- -dichroic -dichroiscope -dichroiscopic -dichroism -dichroite -dichroitic -dichromasy -dichromasia -dichromat -dichromate -dichromatic -dichromaticism -dichromatism -dichromatopsia -dichromic -dichromism -dichronous -dichrooscope -dichrooscopic -dichroous -dichroscope -dichroscopic -dicht -Dichter -Dichterliebe -dicyan -dicyandiamide -dicyanid -dicyanide -dicyanin -dicyanine -dicyanodiamide -dicyanogen -dicycle -dicycly -dicyclic -Dicyclica -dicyclies -dicyclist -dicyclopentadienyliron -Dicyema -Dicyemata -dicyemid -Dicyemida -Dicyemidae -dicier -diciest -dicing -Dicynodon -dicynodont -Dicynodontia -Dicynodontidae -Dick -dickcissel -dicked -Dickey -dickeybird -dickeys -Dickeyville -Dickens -dickenses -Dickensian -Dickensiana -Dickenson -dicker -dickered -dickering -dickers -Dickerson -Dicky -dickybird -Dickie -dickier -dickies -dickiest -dicking -Dickinson -dickinsonite -dickite -Dickman -Dicks -Dickson -Dicksonia -dickty -diclesium -Diclidantheraceae -dicliny -diclinic -diclinies -diclinism -diclinous -Diclytra -dicoccous -dicodeine -dicoelious -dicoelous -dicolic -dicolon -dicondylian -dicophane -dicot -dicotyl -dicotyledon -dicotyledonary -Dicotyledones -dicotyledonous -dicotyledons -Dicotyles -Dicotylidae -dicotylous -dicotyls -dicots -dicoumarin -dicoumarol -Dicranaceae -dicranaceous -dicranoid -dicranterian -Dicranum -Dicrostonyx -dicrotal -dicrotic -dicrotism -dicrotous -Dicruridae -dict -dict. -dicta -Dictaen -dictagraph -dictamen -dictamina -Dictamnus -Dictaphone -dictaphones -dictate -dictated -dictates -dictating -dictatingly -dictation -dictational -dictations -dictative -dictator -dictatory -dictatorial -dictatorialism -dictatorially -dictatorialness -dictators -dictator's -dictatorship -dictatorships -dictatress -dictatrix -dictature -dictery -dicty -dicty- -dictic -dictier -dictiest -dictynid -Dictynidae -Dictynna -Dictyoceratina -dictyoceratine -dictyodromous -dictyogen -dictyogenous -Dictyograptus -dictyoid -diction -dictional -dictionally -dictionary -dictionarian -dictionaries -dictionary-proof -dictionary's -Dictyonema -Dictyonina -dictyonine -dictions -Dictyophora -dictyopteran -Dictyopteris -Dictyosiphon -Dictyosiphonaceae -dictyosiphonaceous -dictyosome -dictyostele -dictyostelic -Dictyota -Dictyotaceae -dictyotaceous -Dictyotales -dictyotic -Dictyoxylon -Dictys -Dictograph -dictronics -dictum -dictums -dictum's -Dicumarol -Dycusburg -DID -Didache -Didachist -Didachographer -didact -didactic -didactical -didacticality -didactically -didactician -didacticism -didacticity -didactics -didactyl -didactylism -didactylous -didactive -didacts -didal -didapper -didappers -didascalar -didascaly -didascaliae -didascalic -didascalos -didder -diddered -diddering -diddest -diddy -diddies -diddikai -diddle -diddle- -diddled -diddle-daddle -diddle-dee -diddley -diddler -diddlers -diddles -diddly -diddlies -diddling -di-decahedral -didelph -Didelphia -didelphian -didelphic -didelphid -Didelphidae -Didelphyidae -didelphine -Didelphis -didelphoid -didelphous -didepsid -didepside -Diderot -didest -didgeridoo -Didi -didy -didicoy -Dididae -didie -Didier -didies -didym -Didymaea -didymate -didymia -didymis -didymitis -didymium -didymiums -didymoid -didymolite -didymous -didymus -didynamy -Didynamia -didynamian -didynamic -didynamies -didynamous -didine -Didinium -didle -didler -Didlove -didn -didna -didnt -didn't -Dido -didodecahedral -didodecahedron -didoes -didonia -didos -didrachm -didrachma -didrachmal -didrachmas -didric -Didrikson -didromy -didromies -didst -diduce -diduced -diducing -diduction -diductively -diductor -Didunculidae -Didunculinae -Didunculus -Didus -Die -dye -dyeability -dyeable -die-away -dieb -dieback -die-back -diebacks -Dieball -dyebeck -Diebold -diecase -die-cast -die-casting -diecious -dieciously -diectasis -die-cut -died -dyed -dyed-in-the-wool -diedral -diedric -Diefenbaker -Dieffenbachia -diegesis -Diego -Diegueno -diehard -die-hard -die-hardism -diehards -Diehl -dyehouse -Dieyerie -dieing -dyeing -dyeings -diel -dieldrin -dieldrins -dyeleaves -dielec -dielectric -dielectrical -dielectrically -dielectrics -dielectric's -dielike -dyeline -Dielytra -Diella -Dielle -Diels -Dielu -diem -diemaker -dyemaker -diemakers -diemaking -dyemaking -Diena -Dienbienphu -diencephala -diencephalic -diencephalon -diencephalons -diene -diener -dienes -Dieppe -dier -Dyer -Dierdre -diereses -dieresis -dieretic -Dieri -Dierks -Dierolf -dyers -dyer's-broom -Dyersburg -dyer's-greenweed -Dyersville -dyer's-weed -Diervilla -Dies -dyes -Diesel -diesel-driven -dieseled -diesel-electric -diesel-engined -diesel-hydraulic -dieselization -dieselize -dieselized -dieselizing -diesel-powered -diesel-propelled -diesels -dieses -diesinker -diesinking -diesis -die-square -Dyess -diester -dyester -diesters -diestock -diestocks -diestrous -diestrual -diestrum -diestrums -diestrus -diestruses -dyestuff -dyestuffs -Diet -dietal -dietary -dietarian -dietaries -dietarily -dieted -Dieter -Dieterich -dieters -dietetic -dietetical -dietetically -dietetics -dietetist -diethanolamine -diethene- -diether -diethers -diethyl -diethylacetal -diethylamide -diethylamine -diethylaminoethanol -diethylenediamine -diethylethanolamine -diethylmalonylurea -diethylstilbestrol -diethylstilboestrol -diethyltryptamine -diety -dietic -dietical -dietician -dieticians -dietics -dieties -dietine -dieting -dietist -dietitian -dietitians -dietitian's -dietotherapeutics -dietotherapy -dietotoxic -dietotoxicity -Dietrich -dietrichite -diets -Dietsche -dietted -Dietz -dietzeite -Dieu -dieugard -dyeware -dyeweed -dyeweeds -diewise -dyewood -dyewoods -diezeugmenon -DIF -dif- -Difda -Dyfed -diferrion -diff -diff. -diffame -diffareation -diffarreation -diffeomorphic -diffeomorphism -differ -differed -differen -difference -differenced -differences -difference's -differency -differencing -differencingly -different -differentia -differentiability -differentiable -differentiae -differential -differentialize -differentially -differentials -differential's -differentiant -differentiate -differentiated -differentiates -differentiating -differentiation -differentiations -differentiative -differentiator -differentiators -differently -differentness -differer -differers -differing -differingly -differs -difficile -difficileness -difficilitate -difficult -difficulty -difficulties -difficulty's -difficultly -difficultness -diffidation -diffide -diffided -diffidence -diffidences -diffident -diffidently -diffidentness -diffiding -diffinity -difflation -diffluence -diffluent -Difflugia -difform -difforme -difformed -difformity -diffract -diffracted -diffracting -diffraction -diffractional -diffractions -diffractive -diffractively -diffractiveness -diffractometer -diffracts -diffranchise -diffrangibility -diffrangible -diffugient -diffund -diffusate -diffuse -diffused -diffusedly -diffusedness -diffusely -diffuseness -diffuse-porous -diffuser -diffusers -diffuses -diffusibility -diffusible -diffusibleness -diffusibly -diffusimeter -diffusing -diffusiometer -diffusion -diffusional -diffusionism -diffusionist -diffusions -diffusive -diffusively -diffusiveness -diffusivity -diffusor -diffusors -difluence -difluoride -DIFMOS -diformin -difunctional -dig -dig. -Dygal -Dygall -digallate -digallic -Digambara -digametic -digamy -digamies -digamist -digamists -digamma -digammas -digammate -digammated -digammic -digamous -digastric -Digby -Digenea -digeneous -digenesis -digenetic -Digenetica -digeny -digenic -digenite -digenous -DiGenova -digerent -Dygert -Digest -digestant -digested -digestedly -digestedness -digester -digesters -digestibility -digestible -digestibleness -digestibly -digestif -digesting -digestion -digestional -digestions -digestive -digestively -digestiveness -digestment -digestor -digestory -digestors -digests -digesture -diggable -digged -Digger -Diggers -digger's -digging -diggings -Diggins -Diggs -dight -dighted -dighter -dighting -Dighton -dights -DiGiangi -Digynia -digynian -digynous -Digiorgio -digit -digital -digitalein -digitalic -digitaliform -digitalin -digitalis -digitalism -digitalization -digitalize -digitalized -digitalizing -digitally -digitals -Digitaria -digitate -digitated -digitately -digitation -digitato-palmate -digitato-pinnate -digiti- -digitiform -Digitigrada -digitigrade -digitigradism -digitinervate -digitinerved -digitipinnate -digitisation -digitise -digitised -digitising -digitization -digitize -digitized -digitizer -digitizes -digitizing -digito- -digitogenin -digitonin -digitoplantar -digitorium -digitoxigenin -digitoxin -digitoxose -digitron -digits -digit's -digitule -digitus -digladiate -digladiated -digladiating -digladiation -digladiator -diglyceride -diglyph -diglyphic -diglossia -diglot -diglots -diglottic -diglottism -diglottist -diglucoside -digmeat -dignation -D'Ignazio -digne -dignify -dignification -dignified -dignifiedly -dignifiedness -dignifies -dignifying -dignitary -dignitarial -dignitarian -dignitaries -dignitas -dignity -dignities -dignosce -dignosle -dignotion -dygogram -digonal -digoneutic -digoneutism -digonoporous -digonous -Digor -Digo-Suarez -digoxin -digoxins -digram -digraph -digraphic -digraphically -digraphs -digredience -digrediency -digredient -digress -digressed -digresser -digresses -digressing -digressingly -digression -digressional -digressionary -digressions -digression's -digressive -digressively -digressiveness -digressory -digs -diguanide -digue -dihalid -dihalide -dihalo -dihalogen -dihdroxycholecalciferol -dihedral -dihedrals -dihedron -dihedrons -dihely -dihelios -dihelium -dihexagonal -dihexahedral -dihexahedron -dihybrid -dihybridism -dihybrids -dihydrate -dihydrated -dihydrazone -dihydric -dihydride -dihydrite -dihydrochloride -dihydrocupreine -dihydrocuprin -dihydroergotamine -dihydrogen -dihydrol -dihydromorphinone -dihydronaphthalene -dihydronicotine -dihydrosphingosine -dihydrostreptomycin -dihydrotachysterol -dihydroxy -dihydroxyacetone -dihydroxysuccinic -dihydroxytoluene -dihysteria -DIY -diiamb -diiambus -Diyarbakir -Diyarbekir -dying -dyingly -dyingness -dyings -diiodid -diiodide -di-iodide -diiodo -diiodoform -diiodotyrosine -diipenates -Diipolia -diisatogen -Dijon -dijudicant -dijudicate -dijudicated -dijudicating -dijudication -dika -dikage -dykage -dikamali -dikamalli -dikaryon -dikaryophase -dikaryophasic -dikaryophyte -dikaryophytic -dikaryotic -dikast -dikdik -dik-dik -dikdiks -Dike -Dyke -diked -dyked -dikegrave -dike-grave -dykehopper -dikey -dykey -dikelet -dikelocephalid -Dikelocephalus -dike-louper -dikephobia -diker -dyker -dikereeve -dike-reeve -dykereeve -dikeria -dikerion -dikers -dikes -dike's -dykes -dikeside -diketene -diketo -diketone -diking -dyking -dikkop -Dikmen -diksha -diktat -diktats -diktyonite -DIL -Dyl -dilacerate -dilacerated -dilacerating -dilaceration -dilactic -dilactone -dilambdodont -dilamination -Dilan -Dylan -Dylana -Dylane -dilaniate -Dilantin -dilapidate -dilapidated -dilapidating -dilapidation -dilapidations -dilapidator -dilatability -dilatable -dilatableness -dilatably -dilatancy -dilatant -dilatants -dilatate -dilatation -dilatational -dilatations -dilatative -dilatator -dilatatory -dilate -dilated -dilatedly -dilatedness -dilatement -dilater -dilaters -dilates -dilating -dilatingly -dilation -dilations -dilative -dilatometer -dilatometry -dilatometric -dilatometrically -dilator -dilatory -dilatorily -dilatoriness -dilators -Dilaudid -dildo -dildoe -dildoes -dildos -dilection -Diley -Dilemi -Dilemite -dilemma -dilemmas -dilemma's -dilemmatic -dilemmatical -dilemmatically -dilemmic -diletant -dilettanist -dilettant -dilettante -dilettanteish -dilettanteism -dilettantes -dilettanteship -dilettanti -dilettantish -dilettantism -dilettantist -dilettantship -Dili -diligence -diligences -diligency -diligent -diligentia -diligently -diligentness -dilis -Dilisio -dilker -Dilks -Dill -Dillard -Dille -dilled -Dilley -Dillenia -Dilleniaceae -dilleniaceous -dilleniad -Diller -dillesk -dilli -Dilly -dillydally -dilly-dally -dillydallied -dillydallier -dillydallies -dillydallying -Dillie -dillier -dillies -dilligrout -dillyman -dillymen -Dilliner -dilling -Dillinger -Dillingham -dillis -dillisk -Dillon -Dillonvale -dills -Dillsboro -Dillsburg -dillseed -Dilltown -dillue -dilluer -dillweed -Dillwyn -dilo -DILOG -dilogarithm -dilogy -dilogical -Dilolo -dilos -Dilthey -dilucid -dilucidate -diluendo -diluent -diluents -dilutant -dilute -diluted -dilutedly -dilutedness -dilutee -dilutely -diluteness -dilutent -diluter -diluters -dilutes -diluting -dilution -dilutions -dilutive -dilutor -dilutors -diluvy -diluvia -diluvial -diluvialist -diluvian -diluvianism -diluviate -diluvion -diluvions -diluvium -diluviums -Dilworth -DIM -dim. -DiMaggio -dimagnesic -dimane -dimanganion -dimanganous -DiMaria -Dimaris -Dymas -Dimashq -dimastigate -Dimatis -dimber -dimberdamber -dimble -dim-brooding -dim-browed -dim-colored -dim-discovered -dime -dime-a-dozen -Dimebox -dimedon -dimedone -dim-eyed -dimenhydrinate -dimensible -dimension -dimensional -dimensionality -dimensionally -dimensioned -dimensioning -dimensionless -dimensions -dimensive -dimensum -dimensuration -dimer -Dimera -dimeran -dimercaprol -dimercury -dimercuric -dimercurion -dimeric -dimeride -dimerism -dimerisms -dimerization -dimerize -dimerized -dimerizes -dimerizing -dimerlie -dimerous -dimers -dimes -dime's -dime-store -dimetallic -dimeter -dimeters -dimethyl -dimethylamine -dimethylamino -dimethylaniline -dimethylanthranilate -dimethylbenzene -dimethylcarbinol -dimethyldiketone -dimethylhydrazine -dimethylketol -dimethylketone -dimethylmethane -dimethylnitrosamine -dimethyls -dimethylsulfoxide -dimethylsulphoxide -dimethyltryptamine -dimethoate -dimethoxy -dimethoxymethane -dimetient -dimetry -dimetria -dimetric -dimetrodon -dim-felt -dim-gleaming -dim-gray -dimyary -Dimyaria -dimyarian -dimyaric -dimication -dimidiate -dimidiated -dimidiating -dimidiation -dim-yellow -dimin -diminish -diminishable -diminishableness -diminished -diminisher -diminishes -diminishing -diminishingly -diminishingturns -diminishment -diminishments -diminue -diminuendo -diminuendoed -diminuendoes -diminuendos -diminuent -diminutal -diminute -diminuted -diminutely -diminuting -diminution -diminutional -diminutions -diminutival -diminutive -diminutively -diminutiveness -diminutivize -dimiss -dimissaries -dimission -dimissory -dimissorial -dimit -dimity -dimities -Dimitri -Dimitry -Dimitris -Dimitrov -Dimitrovo -dimitted -dimitting -Dimittis -dim-lettered -dimly -dim-lighted -dim-lit -dim-litten -dimmable -dimmed -dimmedness -dimmer -dimmers -dimmer's -dimmest -dimmet -dimmy -Dimmick -dimming -dimmish -dimmit -Dimmitt -dimmock -Dimna -dimness -dimnesses -Dimock -Dymoke -dimolecular -Dimond -Dimondale -dimoric -dimorph -dimorphic -dimorphism -dimorphisms -dimorphite -Dimorphotheca -dimorphous -dimorphs -dimout -dim-out -dimouts -Dympha -Dimphia -Dymphia -dimple -dimpled -dimplement -dimples -dimply -dimplier -dimpliest -dimpling -dimps -dimpsy -dim-remembered -DIMS -dim-seen -dim-sensed -dim-sheeted -dim-sighted -dim-sightedness -dimuence -dim-visioned -dimwit -dimwits -dimwitted -dim-witted -dimwittedly -dimwittedness -dim-wittedness -DIN -dyn -Din. -Dina -Dyna -dynactinometer -dynagraph -Dinah -Dynah -dynam -dynam- -dynameter -dynametric -dynametrical -dynamic -dynamical -dynamically -dynamicity -dynamics -dynamis -dynamism -dynamisms -dynamist -dynamistic -dynamists -dynamitard -dynamite -dynamited -dynamiter -dynamiters -dynamites -dynamitic -dynamitical -dynamitically -dynamiting -dynamitish -dynamitism -dynamitist -dynamization -dynamize -dynamo -dynamo- -dinamode -dynamoelectric -dynamoelectrical -dynamogeneses -dynamogenesis -dynamogeny -dynamogenic -dynamogenous -dynamogenously -dynamograph -dynamometamorphic -dynamometamorphism -dynamometamorphosed -dynamometer -dynamometers -dynamometry -dynamometric -dynamometrical -dynamomorphic -dynamoneure -dynamophone -dynamos -dynamoscope -dynamostatic -dynamotor -Dinan -dinanderie -Dinantian -dinaphthyl -dynapolis -dinar -dinarchy -dinarchies -Dinard -Dinaric -dinars -Dinarzade -dynast -Dynastes -dynasty -dynastic -dynastical -dynastically -dynasticism -dynastid -dynastidan -Dynastides -dynasties -Dynastinae -dynasty's -dynasts -dynatron -dynatrons -Dincolo -dinder -d'Indy -Dindymene -Dindymus -dindle -dindled -dindles -dindling -dindon -Dine -dyne -dined -Dynel -dynels -diner -dinergate -dineric -Dinerman -dinero -dineros -diner-out -diners -dines -dynes -Dinesen -dyne-seven -Dinesh -dinetic -dinette -dinettes -dineuric -dineutron -ding -Dingaan -ding-a-ling -dingar -dingbat -dingbats -Dingbelle -dingdong -Ding-Dong -dingdonged -dingdonging -dingdongs -dinge -dinged -dingee -dingey -dingeing -dingeys -Dingell -Dingelstadt -dinger -dinges -Dingess -dinghee -dinghy -dinghies -dingy -dingier -dingies -dingiest -dingily -dinginess -dinginesses -dinging -Dingle -dingleberry -dinglebird -dingled -dingledangle -dingle-dangle -dingles -dingly -dingling -Dingman -dingmaul -dingo -dingoes -dings -dingthrift -Dingus -dinguses -Dingwall -dinheiro -dinic -dinical -dinichthyid -Dinichthys -Dinin -dining -dinitrate -dinitril -dinitrile -dinitro -dinitro- -dinitrobenzene -dinitrocellulose -dinitrophenylhydrazine -dinitrophenol -dinitrotoluene -dink -Dinka -Dinkas -dinked -dinkey -dinkeys -dinky -dinky-di -dinkier -dinkies -dinkiest -dinking -dinkly -dinks -Dinkum -dinkums -dinman -dinmont -Dinnage -dinned -dinner -dinner-dance -dinner-getting -dinnery -dinnerless -dinnerly -dinners -dinner's -dinnertime -dinnerware -Dinny -Dinnie -dinning -Dino -Dinobryon -Dinoceras -Dinocerata -dinoceratan -dinoceratid -Dinoceratidae -dynode -dynodes -Dinoflagellata -Dinoflagellatae -dinoflagellate -Dinoflagellida -dinomic -Dinomys -Dinophyceae -Dinophilea -Dinophilus -Dinornis -Dinornithes -dinornithic -dinornithid -Dinornithidae -Dinornithiformes -dinornithine -dinornithoid -dinos -dinosaur -Dinosauria -dinosaurian -dinosauric -dinosaurs -dinothere -Dinotheres -dinotherian -Dinotheriidae -Dinotherium -dins -Dinsdale -Dinse -Dinsmore -dinsome -dint -dinted -dinting -dintless -dints -Dinuba -dinucleotide -dinumeration -dinus -Dinwiddie -D'Inzeo -diobely -diobol -diobolon -diobolons -diobols -dioc -diocesan -diocesans -diocese -dioceses -diocesian -Diocletian -diocoel -dioctahedral -Dioctophyme -diode -diodes -diode's -Diodia -Diodon -diodont -Diodontidae -dioecy -Dioecia -dioecian -dioeciodimorphous -dioeciopolygamous -dioecious -dioeciously -dioeciousness -dioecism -dioecisms -dioestrous -dioestrum -dioestrus -Diogenean -Diogenes -Diogenic -diogenite -dioicous -dioicously -dioicousness -diol -diolefin -diolefine -diolefinic -diolefins -diols -diomate -Diomede -Diomedea -Diomedeidae -Diomedes -Dion -Dionaea -Dionaeaceae -Dione -dionym -dionymal -Dionis -dionise -Dionysia -Dionysiac -Dionysiacal -Dionysiacally -Dionysian -Dionisio -Dionysius -Dionysos -Dionysus -dionize -Dionne -Dioon -Diophantine -Diophantus -diophysite -Dyophysite -Dyophysitic -Dyophysitical -Dyophysitism -dyophone -Diopsidae -diopside -diopsides -diopsidic -diopsimeter -Diopsis -dioptase -dioptases -diopter -diopters -Dioptidae -dioptograph -dioptometer -dioptometry -dioptomiter -dioptoscopy -dioptra -dioptral -dioptrate -dioptre -dioptres -dioptry -dioptric -dioptrical -dioptrically -dioptrics -dioptrometer -dioptrometry -dioptroscopy -Dior -diorama -dioramas -dioramic -diordinal -Diores -diorism -diorite -diorite-porphyrite -diorites -dioritic -diorthoses -diorthosis -diorthotic -Dioscorea -Dioscoreaceae -dioscoreaceous -dioscorein -dioscorine -Dioscuri -Dioscurian -Diosdado -diose -diosgenin -Diosma -diosmin -diosmose -diosmosed -diosmosing -diosmosis -diosmotic -diosphenol -Diospyraceae -diospyraceous -Diospyros -dyostyle -diota -dyotheism -Dyothelete -Dyotheletian -Dyotheletic -Dyotheletical -Dyotheletism -diothelism -Dyothelism -Dyothelite -Dyothelitism -dioti -diotic -Diotocardia -diotrephes -diovular -dioxan -dioxane -dioxanes -dioxy -dioxid -dioxide -dioxides -dioxids -dioxime -dioxin -dioxindole -dioxins -DIP -Dipala -diparentum -dipartite -dipartition -dipaschal -dipchick -dipcoat -dip-dye -dipentene -dipentine -dipeptid -dipeptidase -dipeptide -dipetalous -dipetto -dip-grained -diphase -diphaser -diphasic -diphead -diphen- -diphenan -diphenhydramine -diphenyl -diphenylacetylene -diphenylamine -diphenylaminechlorarsine -diphenylchloroarsine -diphenylene -diphenylene-methane -diphenylenimide -diphenylenimine -diphenylguanidine -diphenylhydantoin -diphenylmethane -diphenylquinomethane -diphenyls -diphenylthiourea -diphenol -diphenoxylate -diphy- -diphycercal -diphycercy -Diphyes -diphyesis -diphygenic -diphyletic -Diphylla -Diphylleia -Diphyllobothrium -diphyllous -diphyo- -diphyodont -diphyozooid -Diphysite -Diphysitism -diphyzooid -dyphone -diphonia -diphosgene -diphosphate -diphosphid -diphosphide -diphosphoric -diphosphothiamine -diphrelatic -diphtheria -diphtherial -diphtherian -diphtheriaphor -diphtherias -diphtheric -diphtheritic -diphtheritically -diphtheritis -diphtheroid -diphtheroidal -diphtherotoxin -diphthong -diphthongal -diphthongalize -diphthongally -diphthongation -diphthonged -diphthongia -diphthongic -diphthonging -diphthongisation -diphthongise -diphthongised -diphthongising -diphthongization -diphthongize -diphthongized -diphthongizing -diphthongous -diphthongs -dipicrate -dipicrylamin -dipicrylamine -dipygi -dipygus -dipylon -dipyramid -dipyramidal -dipyre -dipyrenous -dipyridyl -dipl -dipl- -dipl. -Diplacanthidae -Diplacanthus -diplacuses -diplacusis -Dipladenia -diplanar -diplanetic -diplanetism -diplantidian -diplarthrism -diplarthrous -diplasiasmus -diplasic -diplasion -diple -diplegia -diplegias -diplegic -dipleidoscope -dipleiodoscope -dipleura -dipleural -dipleuric -dipleurobranchiate -dipleurogenesis -dipleurogenetic -dipleurula -dipleurulas -dipleurule -diplex -diplexer -diplo- -diplobacillus -diplobacterium -diploblastic -diplocardia -diplocardiac -Diplocarpon -diplocaulescent -diplocephaly -diplocephalous -diplocephalus -diplochlamydeous -diplococcal -diplococcemia -diplococci -diplococcic -diplococcocci -diplococcoid -diplococcus -diploconical -diplocoria -Diplodia -Diplodocus -diplodocuses -Diplodus -diploe -diploes -diploetic -diplogangliate -diplogenesis -diplogenetic -diplogenic -Diploglossata -diploglossate -diplograph -diplography -diplographic -diplographical -diplohedral -diplohedron -diploic -diploid -diploidy -diploidic -diploidies -diploidion -diploidize -diploids -diplois -diplokaryon -diploma -diplomacy -diplomacies -diplomaed -diplomaing -diplomas -diploma's -diplomat -diplomata -diplomate -diplomates -diplomatic -diplomatical -diplomatically -diplomatics -diplomatique -diplomatism -diplomatist -diplomatists -diplomatize -diplomatized -diplomatology -diplomats -diplomat's -diplomyelia -diplonema -diplonephridia -diploneural -diplont -diplontic -diplonts -diploperistomic -diplophase -diplophyte -diplophonia -diplophonic -diplopy -diplopia -diplopiaphobia -diplopias -diplopic -diploplacula -diploplacular -diploplaculate -diplopod -Diplopoda -diplopodic -diplopodous -diplopods -Diploptera -Diplopteryga -diplopterous -diploses -diplosis -diplosome -diplosphenal -diplosphene -Diplospondyli -diplospondylic -diplospondylism -diplostemony -diplostemonous -diplostichous -Diplotaxis -diplotegia -diplotene -Diplozoon -diplumbic -dipmeter -dipneedle -dip-needling -Dipneumona -Dipneumones -dipneumonous -dipneust -dipneustal -Dipneusti -dipnoan -dipnoans -Dipnoi -dipnoid -dypnone -dipnoous -dipode -dipody -dipodic -dipodid -Dipodidae -dipodies -Dipodomyinae -Dipodomys -dipolar -dipolarization -dipolarize -dipole -dipoles -Dipolia -dipolsphene -diporpa -dipotassic -dipotassium -dippable -dipped -dipper -dipperful -dipper-in -dippers -dipper's -dippy -dippier -dippiest -dipping -dipping-needle -dippings -Dippold -dipppy -dipppier -dipppiest -diprimary -diprismatic -dipropargyl -dipropellant -dipropyl -diprotic -diprotodan -Diprotodon -diprotodont -Diprotodontia -dips -Dipsacaceae -dipsacaceous -Dipsaceae -dipsaceous -Dipsacus -dipsades -Dipsadinae -dipsadine -dipsas -dipsey -dipsetic -dipsy -dipsy-doodle -dipsie -dipso -dipsomania -dipsomaniac -dipsomaniacal -dipsomaniacs -dipsopathy -dipsos -Dipsosaurus -dipsosis -dipstick -dipsticks -dipt -dipter -Diptera -Dipteraceae -dipteraceous -dipterad -dipteral -dipteran -dipterans -dipterygian -dipterist -Dipteryx -dipterocarp -Dipterocarpaceae -dipterocarpaceous -dipterocarpous -Dipterocarpus -dipterocecidium -dipteroi -dipterology -dipterological -dipterologist -dipteron -dipteros -dipterous -dipterus -dipththeria -dipththerias -diptyca -diptycas -diptych -diptychon -diptychs -diptote -Dipus -dipware -diquat -diquats -DIR -dir. -Dira -Dirac -diradiation -Dirae -Dirca -Dircaean -Dirck -dird -dirdum -dirdums -DIRE -direcly -direct -directable -direct-acting -direct-actionist -directcarving -direct-connected -direct-coupled -direct-current -directdiscourse -direct-driven -directed -directer -directest -directeur -directexamination -direct-examine -direct-examined -direct-examining -direct-geared -directing -direction -directional -directionality -directionalize -directionally -directionize -directionless -directions -direction's -directitude -directive -directively -directiveness -directives -directive's -directivity -directly -direct-mail -directness -Directoire -director -directoral -directorate -directorates -director-general -Directory -directorial -directorially -directories -directory's -directors -director's -directorship -directorships -directress -directrices -directrix -directrixes -directs -Diredawa -direful -direfully -direfulness -direly -dirempt -diremption -direness -direnesses -direption -direr -direst -direx -direxit -dirge -dirged -dirgeful -dirgelike -dirgeman -dirges -dirge's -dirgy -dirgie -dirging -dirgler -dirham -dirhams -dirhem -dirhinous -Dirian -Dirichlet -Dirichletian -dirige -dirigent -dirigibility -dirigible -dirigibles -dirigo -dirigomotor -dirigo-motor -diriment -dirity -Dirk -dirked -dirking -dirks -dirl -dirled -dirling -dirls -dirndl -dirndls -DIRT -dirt-besmeared -dirtbird -dirtboard -dirt-born -dirt-cheap -dirten -dirtfarmer -dirt-fast -dirt-flinging -dirt-free -dirt-grimed -dirty -dirty-colored -dirtied -dirtier -dirties -dirtiest -dirty-faced -dirty-handed -dirtying -dirtily -dirty-minded -dirt-incrusted -dirtiness -dirtinesses -dirty-shirted -dirty-souled -dirt-line -dirtplate -dirt-rotten -dirts -dirt-smirched -dirt-soaked -diruption -DIS -dys -dis- -dys- -DISA -disability -disabilities -disability's -disable -disabled -disablement -disableness -disabler -disablers -disables -disabling -disabusal -disabuse -disabused -disabuses -disabusing -disacceptance -disaccharid -disaccharidase -disaccharide -disaccharides -disaccharose -disaccommodate -disaccommodation -disaccomodate -disaccord -disaccordance -disaccordant -disaccredit -disaccustom -disaccustomed -disaccustomedness -disacidify -disacidified -disacknowledge -disacknowledgement -disacknowledgements -dysacousia -dysacousis -dysacousma -disacquaint -disacquaintance -disacryl -dysacusia -dysadaptation -disadjust -disadorn -disadvance -disadvanced -disadvancing -disadvantage -disadvantaged -disadvantagedness -disadvantageous -disadvantageously -disadvantageousness -disadvantages -disadvantage's -disadvantaging -disadventure -disadventurous -disadvise -disadvised -disadvising -dysaesthesia -dysaesthetic -disaffect -disaffectation -disaffected -disaffectedly -disaffectedness -disaffecting -disaffection -disaffectionate -disaffections -disaffects -disaffiliate -disaffiliated -disaffiliates -disaffiliating -disaffiliation -disaffiliations -disaffinity -disaffirm -disaffirmance -disaffirmation -disaffirmative -disaffirming -disafforest -disafforestation -disafforestment -disagglomeration -disaggregate -disaggregated -disaggregation -disaggregative -disagio -disagree -disagreeability -disagreeable -disagreeableness -disagreeables -disagreeably -disagreeance -disagreed -disagreeing -disagreement -disagreements -disagreement's -disagreer -disagrees -disagreing -disalicylide -disalign -disaligned -disaligning -disalignment -disalike -disally -disalliege -disallow -disallowable -disallowableness -disallowance -disallowances -disallowed -disallowing -disallows -disaltern -disambiguate -disambiguated -disambiguates -disambiguating -disambiguation -disambiguations -disamenity -Disamis -dysanagnosia -disanagrammatize -dysanalyte -disanalogy -disanalogous -disanchor -disangelical -disangularize -disanimal -disanimate -disanimated -disanimating -disanimation -disanney -disannex -disannexation -disannul -disannulled -disannuller -disannulling -disannulment -disannuls -disanoint -disanswerable -dysaphia -disapostle -disapparel -disappear -disappearance -disappearances -disappearance's -disappeared -disappearer -disappearing -disappears -disappendancy -disappendant -disappoint -disappointed -disappointedly -disappointer -disappointing -disappointingly -disappointingness -disappointment -disappointments -disappointment's -disappoints -disappreciate -disappreciation -disapprobation -disapprobations -disapprobative -disapprobatory -disappropriate -disappropriation -disapprovable -disapproval -disapprovals -disapprove -disapproved -disapprover -disapproves -disapproving -disapprovingly -disaproned -dysaptation -disarchbishop -disard -Disario -disarm -disarmament -disarmaments -disarmature -disarmed -disarmer -disarmers -disarming -disarmingly -disarms -disarray -disarrayed -disarraying -disarrays -disarrange -disarranged -disarrangement -disarrangements -disarranger -disarranges -disarranging -disarrest -Dysart -dysarthria -dysarthric -dysarthrosis -disarticulate -disarticulated -disarticulating -disarticulation -disarticulator -disasinate -disasinize -disassemble -disassembled -disassembler -disassembles -disassembly -disassembling -disassent -disassiduity -disassimilate -disassimilated -disassimilating -disassimilation -disassimilative -disassociable -disassociate -disassociated -disassociates -disassociating -disassociation -disaster -disasterly -disasters -disaster's -disastimeter -disastrous -disastrously -disastrousness -disattaint -disattire -disattune -disaugment -disauthentic -disauthenticate -disauthorize -dysautonomia -disavail -disavaunce -disavouch -disavow -disavowable -disavowal -disavowals -disavowance -disavowed -disavowedly -disavower -disavowing -disavowment -disavows -disawa -disazo -disbalance -disbalancement -disband -disbanded -disbanding -disbandment -disbandments -disbands -disbar -dysbarism -disbark -disbarment -disbarments -disbarred -disbarring -disbars -disbase -disbecome -disbelief -disbeliefs -disbelieve -disbelieved -disbeliever -disbelievers -disbelieves -disbelieving -disbelievingly -disbench -disbenched -disbenching -disbenchment -disbend -disbind -dis-byronize -disblame -disbloom -disboard -disbody -disbodied -disbogue -disboscation -disbosom -disbosomed -disbosoming -disbosoms -disbound -disbowel -disboweled -disboweling -disbowelled -disbowelling -disbowels -disbrain -disbranch -disbranched -disbranching -disbud -disbudded -disbudder -disbudding -disbuds -dysbulia -dysbulic -disburden -disburdened -disburdening -disburdenment -disburdens -disburgeon -disbury -disbursable -disbursal -disbursals -disburse -disbursed -disbursement -disbursements -disbursement's -disburser -disburses -disbursing -disburthen -disbutton -disc -disc- -disc. -discabinet -discage -discal -discalceate -discalced -discamp -discandy -discanonization -discanonize -discanonized -discant -discanted -discanter -discanting -discants -discantus -discapacitate -discard -discardable -discarded -discarder -discarding -discardment -discards -discarnate -discarnation -discase -discased -discases -discasing -discastle -discatter -disced -discede -discept -disceptation -disceptator -discepted -discepting -discepts -discern -discernable -discernableness -discernably -discerned -discerner -discerners -discernibility -discernible -discernibleness -discernibly -discerning -discerningly -discernment -discernments -discerns -discerp -discerped -discerpibility -discerpible -discerpibleness -discerping -discerptibility -discerptible -discerptibleness -discerption -discerptive -discession -discharacter -discharge -dischargeable -discharged -dischargee -discharger -dischargers -discharges -discharging -discharity -discharm -dischase -dischevel -dyschiria -dyschroa -dyschroia -dyschromatopsia -dyschromatoptic -dyschronous -dischurch -disci -discide -disciferous -Disciflorae -discifloral -disciflorous -disciform -discigerous -Discina -discinct -discind -discing -discinoid -disciple -discipled -disciplelike -disciples -disciple's -discipleship -disciplinability -disciplinable -disciplinableness -disciplinal -disciplinant -disciplinary -disciplinarian -disciplinarianism -disciplinarians -disciplinarily -disciplinarity -disciplinate -disciplinative -disciplinatory -discipline -disciplined -discipliner -discipliners -disciplines -discipling -disciplining -discipular -discircumspection -discission -discitis -disclaim -disclaimant -disclaimed -disclaimer -disclaimers -disclaiming -disclaims -disclamation -disclamatory -disclander -disclass -disclassify -disclike -disclimax -discloak -discloister -disclosable -disclose -disclosed -discloser -discloses -disclosing -disclosive -disclosure -disclosures -disclosure's -discloud -disclout -disclusion -disco -disco- -discoach -discoactine -discoast -discoblastic -discoblastula -discoboli -discobolos -discobolus -discocarp -discocarpium -discocarpous -discocephalous -discodactyl -discodactylous -discoed -discogastrula -discoglossid -Discoglossidae -discoglossoid -discographer -discography -discographic -discographical -discographically -discographies -discoherent -discohexaster -discoid -discoidal -Discoidea -Discoideae -discoids -discoing -discolichen -discolith -discolor -discolorate -discolorated -discoloration -discolorations -discolored -discoloredness -discoloring -discolorization -discolorment -discolors -discolour -discoloured -discolouring -discolourization -discombobulate -discombobulated -discombobulates -discombobulating -discombobulation -Discomedusae -discomedusan -discomedusoid -discomfit -discomfited -discomfiter -discomfiting -discomfits -discomfiture -discomfitures -discomfort -discomfortable -discomfortableness -discomfortably -discomforted -discomforter -discomforting -discomfortingly -discomforts -discomycete -Discomycetes -discomycetous -discommend -discommendable -discommendableness -discommendably -discommendation -discommender -discommission -discommodate -discommode -discommoded -discommodes -discommoding -discommodious -discommodiously -discommodiousness -discommodity -discommodities -discommon -discommoned -discommoning -discommons -discommune -discommunity -discomorula -discompanied -discomplexion -discompliance -discompose -discomposed -discomposedly -discomposedness -discomposes -discomposing -discomposingly -discomposure -discompt -Disconanthae -disconanthous -disconcert -disconcerted -disconcertedly -disconcertedness -disconcerting -disconcertingly -disconcertingness -disconcertion -disconcertment -disconcerts -disconcord -disconduce -disconducive -Disconectae -disconfirm -disconfirmation -disconfirmed -disconform -disconformable -disconformably -disconformity -disconformities -discongruity -disconjure -disconnect -disconnected -disconnectedly -disconnectedness -disconnecter -disconnecting -disconnection -disconnections -disconnective -disconnectiveness -disconnector -disconnects -disconsent -disconsider -disconsideration -disconsolacy -disconsolance -disconsolate -disconsolately -disconsolateness -disconsolation -disconsonancy -disconsonant -discontent -discontented -discontentedly -discontentedness -discontentful -discontenting -discontentive -discontentment -discontentments -discontents -discontiguity -discontiguous -discontiguousness -discontinuable -discontinual -discontinuance -discontinuances -discontinuation -discontinuations -discontinue -discontinued -discontinuee -discontinuer -discontinues -discontinuing -discontinuity -discontinuities -discontinuity's -discontinuor -discontinuous -discontinuously -discontinuousness -disconula -disconvenience -disconvenient -disconventicle -discophile -Discophora -discophoran -discophore -discophorous -discoplacenta -discoplacental -Discoplacentalia -discoplacentalian -discoplasm -discopodous -discord -discordable -discordance -discordancy -discordancies -discordant -discordantly -discordantness -discorded -discorder -discordful -Discordia -discording -discordous -discords -discorporate -discorrespondency -discorrespondent -discos -discost -discostate -discostomatous -discotheque -discotheques -discothque -discounsel -discount -discountable -discounted -discountenance -discountenanced -discountenancer -discountenances -discountenancing -discounter -discounters -discounting -discountinuous -discounts -discouple -discour -discourage -discourageable -discouraged -discouragedly -discouragement -discouragements -discourager -discourages -discouraging -discouragingly -discouragingness -discourse -discoursed -discourseless -discourser -discoursers -discourses -discourse's -discoursing -discoursive -discoursively -discoursiveness -discourt -discourteous -discourteously -discourteousness -discourtesy -discourtesies -discourtship -discous -discovenant -discover -discoverability -discoverable -discoverably -discovered -Discoverer -discoverers -discovery -discoveries -discovering -discovery's -discovers -discovert -discoverture -discradle -dyscrase -dyscrased -dyscrasy -dyscrasia -dyscrasial -dyscrasic -dyscrasing -dyscrasite -dyscratic -discreate -discreated -discreating -discreation -discredence -discredit -discreditability -discreditable -discreditableness -discreditably -discredited -discrediting -discredits -discreet -discreeter -discreetest -discreetly -discreetness -discrepance -discrepancy -discrepancies -discrepancy's -discrepancries -discrepant -discrepantly -discrepate -discrepated -discrepating -discrepation -discrepencies -discrested -discrete -discretely -discreteness -discretion -discretional -discretionally -discretionary -discretionarily -discretions -discretive -discretively -discretiveness -discriminability -discriminable -discriminably -discriminal -discriminant -discriminantal -discriminate -discriminated -discriminately -discriminateness -discriminates -discriminating -discriminatingly -discriminatingness -discrimination -discriminational -discriminations -discriminative -discriminatively -discriminativeness -discriminator -discriminatory -discriminatorily -discriminators -discriminoid -discriminous -dyscrinism -dyscrystalline -discrive -discrown -discrowned -discrowning -discrownment -discrowns -discruciate -discs -disc's -discubation -discubitory -disculpate -disculpation -disculpatory -discumb -discumber -discure -discuren -discurre -discurrent -discursative -discursativeness -discursify -discursion -discursive -discursively -discursiveness -discursivenesses -discursory -discursus -discurtain -discus -discuses -discuss -discussable -discussant -discussants -discussed -discusser -discusses -discussible -discussing -discussion -discussional -discussionis -discussionism -discussionist -discussions -discussion's -discussive -discussment -discustom -discutable -discute -discutient -disdain -disdainable -disdained -disdainer -disdainful -disdainfully -disdainfulness -disdaining -disdainly -disdainous -disdains -disdar -disdeceive -disdeify -disdein -disdenominationalize -disdiaclasis -disdiaclast -disdiaclastic -disdiapason -disdiazo -disdiplomatize -disdodecahedroid -disdub -disease -disease-causing -diseased -diseasedly -diseasedness -diseaseful -diseasefulness -disease-producing -disease-resisting -diseases -disease-spreading -diseasy -diseasing -disecondary -diseconomy -disedge -disedify -disedification -diseducate -disegno -diselder -diselectrify -diselectrification -dis-element -diselenid -diselenide -disematism -disembay -disembalm -disembargo -disembargoed -disembargoing -disembark -disembarkation -disembarkations -disembarked -disembarking -disembarkment -disembarks -disembarrass -disembarrassed -disembarrassment -disembattle -disembed -disembellish -disembitter -disembocation -disembody -disembodied -disembodies -disembodying -disembodiment -disembodiments -disembogue -disembogued -disemboguement -disemboguing -disembosom -disembowel -disemboweled -disemboweling -disembowelled -disembowelling -disembowelment -disembowelments -disembowels -disembower -disembrace -disembrangle -disembroil -disembroilment -disemburden -diseme -disemic -disemplane -disemplaned -disemploy -disemployed -disemploying -disemployment -disemploys -disempower -disemprison -disen- -disenable -disenabled -disenablement -disenabling -disenact -disenactment -disenamor -disenamour -disenchain -disenchant -disenchanted -disenchanter -disenchanting -disenchantingly -disenchantment -disenchantments -disenchantress -disenchants -disencharm -disenclose -disencourage -disencrease -disencumber -disencumbered -disencumbering -disencumberment -disencumbers -disencumbrance -disendow -disendowed -disendower -disendowing -disendowment -disendows -disenfranchise -disenfranchised -disenfranchisement -disenfranchisements -disenfranchises -disenfranchising -disengage -disengaged -disengagedness -disengagement -disengagements -disengages -disengaging -disengirdle -disenjoy -disenjoyment -disenmesh -disennoble -disennui -disenorm -disenrol -disenroll -disensanity -disenshroud -disenslave -disensoul -disensure -disentail -disentailment -disentangle -disentangled -disentanglement -disentanglements -disentangler -disentangles -disentangling -disenter -dysentery -dysenteric -dysenterical -dysenteries -disenthral -disenthrall -disenthralled -disenthralling -disenthrallment -disenthralls -disenthralment -disenthrone -disenthroned -disenthronement -disenthroning -disentitle -disentitled -disentitlement -disentitling -disentomb -disentombment -disentraced -disentrail -disentrain -disentrainment -disentrammel -disentrance -disentranced -disentrancement -disentrancing -disentwine -disentwined -disentwining -disenvelop -disepalous -dysepulotic -dysepulotical -disequality -disequalization -disequalize -disequalizer -disequilibrate -disequilibration -disequilibria -disequilibrium -disequilibriums -dyserethisia -dysergasia -dysergia -disert -disespouse -disestablish -disestablished -disestablisher -disestablishes -disestablishing -disestablishment -disestablishmentarian -disestablishmentarianism -disestablismentarian -disestablismentarianism -disesteem -disesteemed -disesteemer -disesteeming -dysesthesia -dysesthetic -disestimation -diseur -diseurs -diseuse -diseuses -disexcommunicate -disexercise -disfaith -disfame -disfashion -disfavor -disfavored -disfavorer -disfavoring -disfavors -disfavour -disfavourable -disfavoured -disfavourer -disfavouring -disfeature -disfeatured -disfeaturement -disfeaturing -disfellowship -disfen -disfiguration -disfigurative -disfigure -disfigured -disfigurement -disfigurements -disfigurer -disfigures -disfiguring -disfiguringly -disflesh -disfoliage -disfoliaged -disforest -disforestation -disform -disformity -disfortune -disframe -disfranchise -disfranchised -disfranchisement -disfranchisements -disfranchiser -disfranchisers -disfranchises -disfranchising -disfrancnise -disfrequent -disfriar -disfrock -disfrocked -disfrocking -disfrocks -disfunction -dysfunction -dysfunctional -dysfunctioning -disfunctions -dysfunctions -disfurnish -disfurnished -disfurnishment -disfurniture -disgage -disgallant -disgarland -disgarnish -disgarrison -disgavel -disgaveled -disgaveling -disgavelled -disgavelling -disgeneric -dysgenesic -dysgenesis -dysgenetic -disgenic -dysgenic -dysgenical -dysgenics -disgenius -dysgeogenous -disgig -disglory -disglorify -disglut -dysgnosia -dysgonic -disgood -disgorge -disgorged -disgorgement -disgorger -disgorges -disgorging -disgospel -disgospelize -disgout -disgown -disgrace -disgraced -disgraceful -disgracefully -disgracefulness -disgracement -disgracer -disgracers -disgraces -disgracia -disgracing -disgracious -disgracive -disgradation -disgrade -disgraded -disgrading -disgradulate -dysgraphia -disgregate -disgregated -disgregating -disgregation -disgress -disgross -disgruntle -disgruntled -disgruntlement -disgruntles -disgruntling -disguisable -disguisay -disguisal -disguise -disguised -disguisedly -disguisedness -disguiseless -disguisement -disguisements -disguiser -disguises -disguising -disgulf -disgust -disgusted -disgustedly -disgustedness -disguster -disgustful -disgustfully -disgustfulness -disgusting -disgustingly -disgustingness -disgusts -dish -dishabilitate -dishabilitation -dishabille -dishabit -dishabited -dishabituate -dishabituated -dishabituating -dishable -dishallow -dishallucination -disharmony -disharmonic -disharmonical -disharmonies -disharmonious -disharmonise -disharmonised -disharmonising -disharmonism -disharmonize -disharmonized -disharmonizing -Disharoon -dishaunt -dishboard -dishcloth -dishcloths -dishclout -dishcross -dish-crowned -disheart -dishearten -disheartened -disheartenedly -disheartener -disheartening -dishearteningly -disheartenment -disheartens -disheathing -disheaven -dished -disheir -dishellenize -dishelm -dishelmed -dishelming -dishelms -disher -disherent -disherison -disherit -disherited -disheriting -disheritment -disheritor -disherits -dishes -dishevel -disheveled -dishevely -disheveling -dishevelled -dishevelling -dishevelment -dishevelments -dishevels -dishexecontahedroid -dish-faced -dishful -dishfuls -dish-headed -dishy -dishier -dishiest -dishing -Dishley -dishlike -dishling -dishmaker -dishmaking -dishmonger -dishmop -dishome -dishonest -dishonesty -dishonesties -dishonestly -dishonor -dishonorable -dishonorableness -dishonorably -dishonorary -dishonored -dishonorer -dishonoring -dishonors -dishonour -dishonourable -dishonourableness -dishonourably -dishonourary -dishonoured -dishonourer -dishonouring -dishorn -dishorner -dishorse -dishouse -dishpan -dishpanful -dishpans -dishrag -dishrags -dish-shaped -dishtowel -dishtowels -dishumanize -dishumor -dishumour -dishware -dishwares -dishwash -dishwasher -dishwashers -dishwashing -dishwashings -dishwater -dishwatery -dishwaters -dishwiper -dishwiping -disidentify -dysidrosis -disilane -disilicane -disilicate -disilicic -disilicid -disilicide -disyllabic -disyllabism -disyllabize -disyllabized -disyllabizing -disyllable -disillude -disilluded -disilluminate -disillusion -disillusionary -disillusioned -disillusioning -disillusionise -disillusionised -disillusioniser -disillusionising -disillusionist -disillusionize -disillusionized -disillusionizer -disillusionizing -disillusionment -disillusionments -disillusionment's -disillusions -disillusive -disimagine -disimbitter -disimitate -disimitation -disimmure -disimpark -disimpassioned -disimprison -disimprisonment -disimprove -disimprovement -disincarcerate -disincarceration -disincarnate -disincarnation -disincentive -disinclination -disinclinations -disincline -disinclined -disinclines -disinclining -disinclose -disincorporate -disincorporated -disincorporating -disincorporation -disincrease -disincrust -disincrustant -disincrustion -disindividualize -disinfect -disinfectant -disinfectants -disinfected -disinfecter -disinfecting -disinfection -disinfections -disinfective -disinfector -disinfects -disinfest -disinfestant -disinfestation -disinfeudation -disinflame -disinflate -disinflated -disinflating -disinflation -disinflationary -disinformation -disingenious -disingenuity -disingenuous -disingenuously -disingenuousness -disinhabit -disinherison -disinherit -disinheritable -disinheritance -disinheritances -disinherited -disinheriting -disinherits -disinhibition -disinhume -disinhumed -disinhuming -Disini -disinsection -disinsectization -disinsulation -disinsure -disintegrable -disintegrant -disintegrate -disintegrated -disintegrates -disintegrating -disintegration -disintegrationist -disintegrations -disintegrative -disintegrator -disintegratory -disintegrators -disintegrity -disintegrous -disintensify -disinter -disinteress -disinterest -disinterested -disinterestedly -disinterestedness -disinterestednesses -disinteresting -disintermediation -disinterment -disinterred -disinterring -disinters -disintertwine -disyntheme -disinthrall -disintoxicate -disintoxication -disintrench -dysyntribite -disintricate -disinure -disinvagination -disinvest -disinvestiture -disinvestment -disinvigorate -disinvite -disinvolve -disinvolvement -disyoke -disyoked -disyokes -disyoking -disjasked -disjasket -disjaskit -disject -disjected -disjecting -disjection -disjects -disjeune -disjoin -disjoinable -disjoined -disjoining -disjoins -disjoint -disjointed -disjointedly -disjointedness -disjointing -disjointly -disjointness -disjoints -disjointure -disjudication -disjunct -disjunction -disjunctions -disjunctive -disjunctively -disjunctor -disjuncts -disjuncture -disjune -disk -disk-bearing -disked -diskelion -disker -dyskeratosis -diskery -diskette -diskettes -Diskin -diskindness -dyskinesia -dyskinetic -disking -diskless -disklike -disknow -Disko -diskography -diskophile -diskos -disks -disk's -disk-shaped -Diskson -dislade -dislady -dyslalia -dislaurel -disleaf -disleafed -disleafing -disleal -disleave -disleaved -disleaving -dyslectic -dislegitimate -dislevelment -dyslexia -dyslexias -dyslexic -dyslexics -disli -dislicense -dislikable -dislike -dislikeable -disliked -dislikeful -dislikelihood -disliken -dislikeness -disliker -dislikers -dislikes -disliking -dislimb -dislimn -dislimned -dislimning -dislimns -dislink -dislip -dyslysin -dislive -dislluminate -disload -dislocability -dislocable -dislocate -dislocated -dislocatedly -dislocatedness -dislocates -dislocating -dislocation -dislocations -dislocator -dislocatory -dislock -dislodge -dislodgeable -dislodged -dislodgement -dislodges -dislodging -dislodgment -dyslogy -dyslogia -dyslogistic -dyslogistically -disloyal -disloyalist -disloyally -disloyalty -disloyalties -disloign -dislove -dysluite -disluster -dislustered -dislustering -dislustre -dislustred -dislustring -dismay -dismayable -dismayed -dismayedness -dismayful -dismayfully -dismaying -dismayingly -dismayingness -dismail -dismain -dismays -dismal -dismaler -dismalest -dismality -dismalities -dismalize -dismally -dismalness -dismals -disman -dismantle -dismantled -dismantlement -dismantler -dismantles -dismantling -dismarble -dismarch -dismark -dismarket -dismarketed -dismarketing -dismarry -dismarshall -dismask -dismast -dismasted -dismasting -dismastment -dismasts -dismaw -disme -dismeasurable -dismeasured -dismember -dismembered -dismemberer -dismembering -dismemberment -dismemberments -dismembers -dismembrate -dismembrated -dismembrator -dysmenorrhagia -dysmenorrhea -dysmenorrheal -dysmenorrheic -dysmenorrhoea -dysmenorrhoeal -dysmerism -dysmeristic -dismerit -dysmerogenesis -dysmerogenetic -dysmeromorph -dysmeromorphic -dismes -dysmetria -dismettled -disminion -disminister -dismiss -dismissable -Dismissal -dismissals -dismissal's -dismissed -dismisser -dismissers -dismisses -dismissible -dismissing -dismissingly -dismission -dismissive -dismissory -dismit -dysmnesia -dismoded -dysmorphism -dysmorphophobia -dismortgage -dismortgaged -dismortgaging -dismount -dismountable -dismounted -dismounting -dismounts -dismutation -disna -disnatural -disnaturalization -disnaturalize -disnature -disnatured -disnaturing -Disney -Disneyesque -Disneyland -disnest -dysneuria -disnew -disniche -dysnomy -disnosed -disnumber -disobedience -disobediences -disobedient -disobediently -disobey -disobeyal -disobeyed -disobeyer -disobeyers -disobeying -disobeys -disobligation -disobligatory -disoblige -disobliged -disobliger -disobliges -disobliging -disobligingly -disobligingness -disobstruct -disoccident -disocclude -disoccluded -disoccluding -disoccupation -disoccupy -disoccupied -disoccupying -disodic -dysodile -dysodyle -disodium -dysodontiasis -disomaty -disomatic -disomatous -disomic -disomus -Dyson -disoperation -disoperculate -disopinion -disoppilate -disorb -disorchard -disordain -disordained -disordeine -disorder -disordered -disorderedly -disorderedness -disorderer -disordering -disorderly -disorderliness -disorderlinesses -disorders -disordinance -disordinate -disordinated -disordination -dysorexy -dysorexia -disorganic -disorganise -disorganised -disorganiser -disorganising -disorganization -disorganizations -disorganize -disorganized -disorganizer -disorganizers -disorganizes -disorganizing -disorient -disorientate -disorientated -disorientates -disorientating -disorientation -disoriented -disorienting -disorients -DISOSS -disour -disown -disownable -disowned -disowning -disownment -disowns -disoxidate -dysoxidation -dysoxidizable -dysoxidize -disoxygenate -disoxygenation -disozonize -disp -dispace -dispaint -dispair -dispand -dispansive -dispapalize -dispar -disparadise -disparage -disparageable -disparaged -disparagement -disparagements -disparager -disparages -disparaging -disparagingly -disparate -disparately -disparateness -disparation -disparatum -dyspareunia -disparish -disparison -disparity -disparities -disparition -disparity's -dispark -disparkle -disparple -disparpled -disparpling -dispart -disparted -disparting -dispartment -disparts -dispassion -dispassionate -dispassionately -dispassionateness -dispassioned -dispassions -dispatch -dispatch-bearer -dispatch-bearing -dispatched -dispatcher -dispatchers -dispatches -dispatchful -dispatching -dispatch-rider -dyspathetic -dispathy -dyspathy -dispatriated -dispauper -dispauperize -dispeace -dispeaceful -dispeed -dispel -dispell -dispellable -dispelled -dispeller -dispelling -dispells -dispels -dispence -dispend -dispended -dispender -dispending -dispendious -dispendiously -dispenditure -dispends -dispensability -dispensable -dispensableness -dispensary -dispensaries -dispensate -dispensated -dispensating -dispensation -dispensational -dispensationalism -dispensations -dispensative -dispensatively -dispensator -dispensatory -dispensatories -dispensatorily -dispensatress -dispensatrix -dispense -dispensed -dispenser -dispensers -dispenses -dispensible -dispensing -dispensingly -dispensive -dispeople -dispeopled -dispeoplement -dispeopler -dispeopling -dyspepsy -dyspepsia -dyspepsias -dyspepsies -dyspeptic -dyspeptical -dyspeptically -dyspeptics -disperato -dispergate -dispergated -dispergating -dispergation -dispergator -disperge -dispericraniate -disperiwig -dispermy -dispermic -dispermous -disperple -dispersal -dispersals -dispersant -disperse -dispersed -dispersedelement -dispersedye -dispersedly -dispersedness -dispersement -disperser -dispersers -disperses -dispersibility -dispersible -dispersing -Dispersion -dispersions -dispersity -dispersive -dispersively -dispersiveness -dispersoid -dispersoidology -dispersoidological -dispersonalize -dispersonate -dispersonify -dispersonification -dispetal -dysphagia -dysphagic -dysphasia -dysphasic -dysphemia -dysphemism -dysphemistic -dysphemize -dysphemized -disphenoid -dysphonia -dysphonic -dysphoria -dysphoric -dysphotic -dysphrasia -dysphrenia -dispicion -dispiece -dispirem -dispireme -dispirit -dispirited -dispiritedly -dispiritedness -dispiriting -dispiritingly -dispiritment -dispirits -dispiteous -dispiteously -dispiteousness -dyspituitarism -displace -displaceability -displaceable -displaced -displacement -displacements -displacement's -displacency -displacer -displaces -displacing -display -displayable -displayed -displayer -displaying -displays -displant -displanted -displanting -displants -dysplasia -dysplastic -displat -disple -displeasance -displeasant -displease -displeased -displeasedly -displeaser -displeases -displeasing -displeasingly -displeasingness -displeasurable -displeasurably -displeasure -displeasureable -displeasureably -displeasured -displeasurement -displeasures -displeasuring -displenish -displicence -displicency -displode -disploded -displodes -disploding -displosion -displume -displumed -displumes -displuming -displuviate -dyspnea -dyspneal -dyspneas -dyspneic -dyspnoea -dyspnoeal -dyspnoeas -dyspnoeic -dyspnoi -dyspnoic -dispoint -dispond -dispondaic -dispondee -dispone -disponed -disponee -disponent -disponer -disponge -disponing -dispope -dispopularize -dysporomorph -disporous -disport -disported -disporting -disportive -disportment -disports -Disporum -disposability -disposable -disposableness -disposal -disposals -disposal's -dispose -disposed -disposedly -disposedness -disposement -disposer -disposers -disposes -disposing -disposingly -disposit -disposition -dispositional -dispositionally -dispositioned -dispositions -disposition's -dispositive -dispositively -dispositor -dispossed -dispossess -dispossessed -dispossesses -dispossessing -dispossession -dispossessions -dispossessor -dispossessory -dispost -disposure -dispowder -dispractice -dispraise -dispraised -dispraiser -dispraising -dispraisingly -dyspraxia -dispread -dispreader -dispreading -dispreads -disprejudice -disprepare -dispress -disprince -disprison -disprivacied -disprivilege -disprize -disprized -disprizes -disprizing -disprobabilization -disprobabilize -disprobative -disprofess -disprofit -disprofitable -dispromise -disproof -disproofs -disproperty -disproportion -disproportionable -disproportionableness -disproportionably -disproportional -disproportionality -disproportionally -disproportionalness -disproportionate -disproportionately -disproportionateness -disproportionates -disproportionation -disproportions -dispropriate -dysprosia -dysprosium -disprovable -disproval -disprove -disproved -disprovement -disproven -disprover -disproves -disprovide -disproving -dispulp -dispunct -dispunge -dispunishable -dispunitive -dispurpose -dispurse -dispurvey -disputability -disputable -disputableness -disputably -disputacity -disputant -Disputanta -disputants -disputation -disputations -disputatious -disputatiously -disputatiousness -disputative -disputatively -disputativeness -disputator -dispute -disputed -disputeful -disputeless -disputer -disputers -disputes -disputing -disputisoun -disqualify -disqualifiable -disqualification -disqualifications -disqualified -disqualifies -disqualifying -disquantity -disquarter -disquiet -disquieted -disquietedly -disquietedness -disquieten -disquieter -disquieting -disquietingly -disquietingness -disquietly -disquietness -disquiets -disquietude -disquietudes -disquiparancy -disquiparant -disquiparation -disquisit -disquisite -disquisited -disquisiting -disquisition -disquisitional -disquisitionary -disquisitions -disquisitive -disquisitively -disquisitor -disquisitory -disquisitorial -disquixote -Disraeli -disray -disrange -disrank -dysraphia -disrate -disrated -disrates -disrating -disrealize -disreason -disrecommendation -disregard -disregardable -disregardance -disregardant -disregarded -disregarder -disregardful -disregardfully -disregardfulness -disregarding -disregards -disregular -disrelate -disrelated -disrelation -disrelish -disrelishable -disremember -disrepair -disrepairs -disreport -disreputability -disreputable -disreputableness -disreputably -disreputation -disrepute -disreputed -disreputes -disrespect -disrespectability -disrespectable -disrespecter -disrespectful -disrespectfully -disrespectfulness -disrespective -disrespects -disrespondency -disrest -disrestore -disreverence -dysrhythmia -disring -disrobe -disrobed -disrobement -disrober -disrobers -disrobes -disrobing -disroof -disroost -disroot -disrooted -disrooting -disroots -disrout -disrudder -disruddered -disruly -disrump -disrupt -disruptability -disruptable -disrupted -disrupter -disrupting -disruption -disruptionist -disruptions -disruption's -disruptive -disruptively -disruptiveness -disruptment -disruptor -disrupts -disrupture -diss -dissait -dissatisfaction -dissatisfactions -dissatisfaction's -dissatisfactory -dissatisfactorily -dissatisfactoriness -dissatisfy -dissatisfied -dissatisfiedly -dissatisfiedness -dissatisfies -dissatisfying -dissatisfyingly -dissaturate -dissava -dissavage -dissave -dissaved -dissaves -dissaving -dissavs -disscepter -dissceptered -dissceptre -dissceptred -dissceptring -disscussive -disseason -disseat -disseated -disseating -disseats -dissect -dissected -dissectible -dissecting -dissection -dissectional -dissections -dissective -dissector -dissectors -dissects -disseise -disseised -disseisee -disseises -disseisin -disseising -disseisor -disseisoress -disseize -disseized -disseizee -disseizes -disseizin -disseizing -disseizor -disseizoress -disseizure -disselboom -dissel-boom -dissemblance -dissemble -dissembled -dissembler -dissemblers -dissembles -dissembly -dissemblies -dissembling -dissemblingly -dissemilative -disseminate -disseminated -disseminates -disseminating -dissemination -disseminations -disseminative -disseminator -disseminule -dissension -dissensions -dissension's -dissensious -dissensualize -dissent -dissentaneous -dissentaneousness -dissentation -dissented -Dissenter -dissenterism -dissenters -dissentiate -dissentience -dissentiency -dissentient -dissentiently -dissentients -dissenting -dissentingly -dissention -dissentions -dissentious -dissentiously -dissentism -dissentive -dissentment -dissents -dissepiment -dissepimental -dissert -dissertate -dissertated -dissertating -dissertation -dissertational -dissertationist -dissertations -dissertation's -dissertative -dissertator -disserted -disserting -disserts -disserve -disserved -disserves -disservice -disserviceable -disserviceableness -disserviceably -disservices -disserving -dissettle -dissettlement -dissever -disseverance -disseveration -dissevered -dissevering -disseverment -dissevers -disshadow -dissheathe -dissheathed -disship -disshiver -disshroud -dissidence -dissidences -dissident -dissidently -dissidents -dissident's -dissight -dissightly -dissilience -dissiliency -dissilient -dissilition -dissyllabic -dissyllabify -dissyllabification -dissyllabise -dissyllabised -dissyllabising -dissyllabism -dissyllabize -dissyllabized -dissyllabizing -dissyllable -dissimilar -dissimilarity -dissimilarities -dissimilarity's -dissimilarly -dissimilars -dissimilate -dissimilated -dissimilating -dissimilation -dissimilative -dissimilatory -dissimile -dissimilitude -dissymmetry -dissymmetric -dissymmetrical -dissymmetrically -dissymmettric -dissympathy -dissympathize -dissimulate -dissimulated -dissimulates -dissimulating -dissimulation -dissimulations -dissimulative -dissimulator -dissimulators -dissimule -dissimuler -dyssynergy -dyssynergia -dissinew -dissipable -dissipate -dissipated -dissipatedly -dissipatedness -dissipater -dissipaters -dissipates -dissipating -dissipation -dissipations -dissipative -dissipativity -dissipator -dissipators -dyssystole -dissite -disslander -dyssnite -dissociability -dissociable -dissociableness -dissociably -dissocial -dissociality -dissocialize -dissociant -dissociate -dissociated -dissociates -dissociating -dissociation -dissociations -dissociative -dissoconch -Dyssodia -dissogeny -dissogony -dissolubility -dissoluble -dissolubleness -dissolute -dissolutely -dissoluteness -dissolution -dissolutional -dissolutionism -dissolutionist -dissolutions -dissolution's -dissolutive -dissolvability -dissolvable -dissolvableness -dissolvative -dissolve -dissolveability -dissolved -dissolvent -dissolver -dissolves -dissolving -dissolvingly -dissonance -dissonances -dissonancy -dissonancies -dissonant -dissonantly -dissonate -dissonous -dissoul -dissour -dysspermatism -disspirit -disspread -disspreading -disstate -dissuadable -dissuade -dissuaded -dissuader -dissuades -dissuading -dissuasion -dissuasions -dissuasive -dissuasively -dissuasiveness -dissuasory -dissue -dissuit -dissuitable -dissuited -dissunder -dissweeten -dist -dist. -distad -distaff -distaffs -distain -distained -distaining -distains -distal -distale -distalia -distally -distalwards -distance -distanced -distanceless -distances -distancy -distancing -distannic -distant -distantly -distantness -distaste -distasted -distasteful -distastefully -distastefulness -distastes -distasting -distater -distaves -dystaxia -dystaxias -dystectic -dysteleology -dysteleological -dysteleologically -dysteleologist -distelfink -distemonous -distemper -distemperance -distemperate -distemperature -distempered -distemperedly -distemperedness -distemperer -distempering -distemperment -distemperoid -distempers -distemperure -distenant -distend -distended -distendedly -distendedness -distender -distending -distends -distensibility -distensibilities -distensible -distensile -distension -distensions -distensive -distent -distention -distentions -dister -disterminate -disterr -disthene -dysthymia -dysthymic -dysthyroidism -disthrall -disthrone -disthroned -disthroning -disty -distich -distichal -distichiasis -Distichlis -distichous -distichously -distichs -distil -distylar -distyle -distilery -distileries -distill -distillable -distillage -distilland -distillate -distillates -distillation -distillations -distillator -distillatory -distilled -distiller -distillery -distilleries -distillers -distilling -distillment -distillmint -distills -distilment -distils -distinct -distincter -distinctest -distinctify -distinctio -distinction -distinctional -distinctionless -distinctions -distinction's -distinctity -distinctive -distinctively -distinctiveness -distinctivenesses -distinctly -distinctness -distinctnesses -distinctor -distingu -distingue -distinguee -distinguish -distinguishability -distinguishable -distinguishableness -distinguishably -distinguished -distinguishedly -distinguisher -distinguishes -distinguishing -distinguishingly -distinguishment -distintion -distitle -distn -dystocia -dystocial -dystocias -distoclusion -Distoma -Distomatidae -distomatosis -distomatous -distome -dystome -distomes -distomian -distomiasis -dystomic -Distomidae -dystomous -Distomum -dystonia -dystonias -dystonic -disto-occlusion -dystopia -dystopian -dystopias -distort -distortable -distorted -distortedly -distortedness -distorter -distorters -distorting -distortion -distortional -distortionist -distortionless -distortions -distortion's -distortive -distorts -distr -distr. -distract -distracted -distractedly -distractedness -distracter -distractibility -distractible -distractile -distracting -distractingly -distraction -distractions -distraction's -distractive -distractively -distracts -distrail -distrain -distrainable -distrained -distrainee -distrainer -distraining -distrainment -distrainor -distrains -distraint -distrait -distraite -distraught -distraughted -distraughtly -distream -distress -distressed -distressedly -distressedness -distresses -distressful -distressfully -distressfulness -distressing -distressingly -distrest -distributable -distributary -distributaries -distribute -distributed -distributedly -distributee -distributer -distributes -distributing -distribution -distributional -distributionist -distributions -distribution's -distributival -distributive -distributively -distributiveness -distributivity -distributor -distributors -distributor's -distributorship -distributress -distributution -district -districted -districting -distriction -districtly -districts -district's -distringas -distritbute -distritbuted -distritbutes -distritbuting -distrito -distritos -distrix -dystrophy -dystrophia -dystrophic -dystrophies -distrouble -distrouser -distruss -distrust -distrusted -distruster -distrustful -distrustfully -distrustfulness -distrusting -distrustingly -distrusts -distune -disturb -disturbance -disturbances -disturbance's -disturbant -disturbation -disturbative -disturbed -disturbedly -disturber -disturbers -disturbing -disturbingly -disturbor -disturbs -dis-turk -disturn -disturnpike -disubstituted -disubstitution -disulfate -disulfid -disulfide -disulfids -disulfiram -disulfonic -disulfoton -disulfoxid -disulfoxide -disulfuret -disulfuric -disulphate -disulphid -disulphide -disulpho- -disulphonate -disulphone -disulphonic -disulphoxid -disulphoxide -disulphuret -disulphuric -disunify -disunified -disunifying -disuniform -disuniformity -disunion -disunionism -disunionist -disunions -disunite -disunited -disuniter -disuniters -disunites -disunity -disunities -disuniting -dysury -dysuria -dysurias -dysuric -disusage -disusance -disuse -disused -disuses -disusing -disutility -disutilize -disvaluation -disvalue -disvalued -disvalues -disvaluing -disvantage -disvelop -disventure -disvertebrate -disvisage -disvisor -disvoice -disvouch -disvulnerability -diswarn -diswarren -diswarrened -diswarrening -diswashing -disweapon -diswench -diswere -diswit -diswont -diswood -disworkmanship -disworship -disworth -dit -Dita -dital -ditali -ditalini -ditas -ditation -ditch -ditchbank -ditchbur -ditch-delivered -ditchdigger -ditchdigging -ditchdown -ditch-drawn -ditched -ditcher -ditchers -ditches -ditching -ditchless -ditch-moss -ditch's -ditchside -ditchwater -dite -diter -diterpene -ditertiary -dites -ditetragonal -ditetrahedral -dithalous -dithecal -dithecous -ditheism -ditheisms -ditheist -ditheistic -ditheistical -ditheists -dithematic -dither -dithered -ditherer -dithery -dithering -dithers -dithymol -dithiobenzoic -dithioglycol -dithioic -dithiol -dithion -dithionate -dithionic -dithionite -dithionous -dithyramb -dithyrambic -dithyrambically -Dithyrambos -dithyrambs -Dithyrambus -diting -dition -dytiscid -Dytiscidae -Dytiscus -Ditmars -Ditmore -ditokous -ditolyl -ditone -ditrematous -ditremid -Ditremidae -di-tri- -ditrichotomous -ditriglyph -ditriglyphic -ditrigonal -ditrigonally -Ditrocha -ditrochean -ditrochee -ditrochous -ditroite -dits -ditsy -ditsier -ditsiest -ditt -dittay -dittamy -dittander -dittany -dittanies -ditted -Ditter -Dittersdorf -ditty -ditty-bag -dittied -ditties -dittying -ditting -Dittman -Dittmer -Ditto -dittoed -dittoes -dittogram -dittograph -dittography -dittographic -dittoing -dittology -dittologies -ditton -dittos -Dituri -Ditzel -ditzy -ditzier -ditziest -DIU -Dyula -diumvirate -Dyun -diuranate -diureide -diureses -diuresis -diuretic -diuretical -diuretically -diureticalness -diuretics -Diuril -diurn -Diurna -diurnal -diurnally -diurnalness -diurnals -diurnation -diurne -diurnule -diuron -diurons -Diushambe -Dyushambe -diuturnal -diuturnity -DIV -div. -diva -divagate -divagated -divagates -divagating -divagation -divagational -divagationally -divagations -divagatory -divalence -divalent -Divali -divan -divans -divan's -divaporation -divariant -divaricate -divaricated -divaricately -divaricating -divaricatingly -divarication -divaricator -divas -divast -divata -dive -divebomb -dive-bomb -dive-bombing -dived -dive-dap -dive-dapper -divekeeper -divel -divell -divelled -divellent -divellicate -divelling -Diver -diverb -diverberate -diverge -diverged -divergement -divergence -divergences -divergence's -divergency -divergencies -divergenge -divergent -divergently -diverges -diverging -divergingly -Divernon -divers -divers-colored -diverse -diverse-colored -diversely -diverse-natured -diverseness -diverse-shaped -diversi- -diversicolored -diversify -diversifiability -diversifiable -diversification -diversifications -diversified -diversifier -diversifies -diversifying -diversiflorate -diversiflorous -diversifoliate -diversifolious -diversiform -diversion -diversional -diversionary -diversionist -diversions -diversipedate -diversisporous -diversity -diversities -diversly -diversory -divert -diverted -divertedly -diverter -diverters -divertibility -divertible -diverticle -diverticula -diverticular -diverticulate -diverticulitis -diverticulosis -diverticulum -divertila -divertimenti -divertimento -divertimentos -diverting -divertingly -divertingness -divertise -divertisement -divertissant -divertissement -divertissements -divertive -divertor -diverts -Dives -divest -divested -divestible -divesting -divestitive -divestiture -divestitures -divestment -divests -divesture -divet -divi -divia -divid -dividable -dividableness -dividant -divide -divided -dividedly -dividedness -dividend -dividends -dividend's -dividendus -divident -divider -dividers -divides -dividing -dividingly -divi-divi -dividivis -dividual -dividualism -dividually -dividuity -dividuous -divinability -divinable -divinail -divination -divinations -divinator -divinatory -Divine -divined -divine-human -divinely -divineness -diviner -divineress -diviners -divines -divinesse -divinest -diving -divinify -divinified -divinifying -divinyl -divining -diviningly -divinisation -divinise -divinised -divinises -divinising -divinister -divinistre -divinity -divinities -divinity's -divinityship -divinization -divinize -divinized -divinizes -divinizing -divisa -divise -divisi -divisibility -divisibilities -divisible -divisibleness -divisibly -Division -divisional -divisionally -divisionary -Divisionism -Divisionist -divisionistic -divisions -division's -divisive -divisively -divisiveness -divisor -divisory -divisorial -divisors -divisor's -divisural -divorce -divorceable -divorced -divorcee -divorcees -divorcement -divorcements -divorcer -divorcers -divorces -divorceuse -divorcible -divorcing -divorcive -divort -divot -divoto -divots -dyvour -dyvours -divulgate -divulgated -divulgater -divulgating -divulgation -divulgator -divulgatory -divulge -divulged -divulgement -divulgence -divulgences -divulger -divulgers -divulges -divulging -divulse -divulsed -divulsing -divulsion -divulsive -divulsor -divus -Divvers -divvy -divvied -divvies -divvying -Diwali -diwan -diwani -diwans -diwata -DIX -dixain -dixenite -Dixfield -dixy -Dixiana -Dixie -Dixiecrat -Dixiecratic -Dixieland -Dixielander -dixies -Dixil -dixit -dixits -Dixmont -Dixmoor -Dixon -Dixonville -dizain -dizaine -dizdar -dizen -dizened -dizening -dizenment -dizens -dizygotic -dizygous -Dizney -dizoic -dizz -dizzard -dizzardly -dizzen -dizzy -dizzied -dizzier -dizzies -dizziest -dizzying -dizzyingly -dizzily -dizziness -DJ -dj- -Djagatay -djagoong -Djailolo -Djaja -Djajapura -Djakarta -djalmaite -Djambi -djasakid -djave -djebel -djebels -djehad -djelab -djelfa -djellab -djellaba -djellabah -djellabas -Djeloula -Djemas -Djerba -djerib -djersa -djibbah -Djibouti -Djilas -djin -djinn -djinni -djinny -djinns -djins -Djokjakarta -DJS -DJT -Djuka -DK -dk. -dkg -dkl -dkm -dks -dl -DLA -DLC -DLCU -DLE -DLG -DLI -DLitt -DLL -DLO -DLP -dlr -dlr. -DLS -DLTU -DLUPG -dlvy -dlvy. -DM -DMA -dmarche -DMD -DMDT -DME -DMI -Dmitrevsk -Dmitri -Dmitriev -Dmitrov -Dmitrovka -DMK -DML -dmod -DMOS -DMS -DMSO -DMSP -DMT -DMU -DMus -DMV -DMZ -DN -DNA -Dnaburg -DNB -DNC -DNCRI -Dnepr -Dneprodzerzhinsk -Dnepropetrovsk -Dnestr -DNHR -DNI -DNIC -Dnieper -Dniester -Dniren -Dnitz -DNL -D-notice -DNR -DNS -DNX -DO -do. -DOA -doab -doability -doable -Doak -do-all -doand -Doane -Doanna -doarium -doat -doated -doater -doaty -doating -doatish -doats -DOB -Dobb -dobbed -dobber -dobber-in -dobbers -dobby -dobbie -dobbies -Dobbin -dobbing -Dobbins -Dobbs -dobchick -dobe -doberman -dobermans -doby -Dobie -dobies -dobl -dobla -doblas -Doble -Doblin -doblon -doblones -doblons -dobos -dobra -dobrao -dobras -Dobrynin -Dobrinsky -Dobro -dobroes -Dobrogea -Dobrovir -Dobruja -Dobson -dobsonfly -dobsonflies -dobsons -Dobuan -Dobuans -dobule -dobzhansky -DOC -doc. -Docena -docent -docents -docentship -Docetae -Docetic -Docetically -Docetism -Docetist -Docetistic -Docetize -doch-an-dorrach -doch-an-dorris -doch-an-dorroch -dochmiac -dochmiacal -dochmiasis -dochmii -dochmius -dochter -Docia -docibility -docible -docibleness -Docila -Docile -docilely -docility -docilities -Docilla -Docilu -docimasy -docimasia -docimasies -docimastic -docimastical -docimology -docious -docity -dock -dockage -dockages -docked -docken -docker -dockers -docket -docketed -docketing -dockets -dockhand -dockhands -dockhead -dockhouse -dockyard -dockyardman -dockyards -docking -dockization -dockize -dockland -docklands -dock-leaved -dockmackie -dockman -dockmaster -docks -dockside -docksides -dock-tailed -dock-walloper -dock-walloping -dockworker -dockworkers -docmac -Docoglossa -docoglossan -docoglossate -docosane -docosanoic -docquet -DOCS -Doctor -doctoral -doctorally -doctorate -doctorates -doctorate's -doctorbird -doctordom -doctored -doctoress -doctorfish -doctorfishes -doctorhood -doctorial -doctorially -doctoring -doctorization -doctorize -doctorless -doctorly -doctorlike -doctors -doctors'commons -doctorship -doctress -doctrinable -doctrinaire -doctrinairism -doctrinal -doctrinalism -doctrinalist -doctrinality -doctrinally -doctrinary -doctrinarian -doctrinarianism -doctrinarily -doctrinarity -doctrinate -doctrine -doctrines -doctrine's -doctrinism -doctrinist -doctrinization -doctrinize -doctrinized -doctrinizing -doctrix -doctus -docudrama -docudramas -document -documentable -documental -documentalist -documentary -documentarian -documentaries -documentarily -documentary's -documentarist -documentation -documentational -documentations -documentation's -documented -documenter -documenters -documenting -documentize -documentor -documents -DOD -do-dad -Dodd -doddard -doddart -dodded -dodder -doddered -dodderer -dodderers -doddery -doddering -dodders -doddy -doddie -doddies -dodding -doddypoll -doddle -Dodds -Doddsville -Dode -dodeca- -dodecade -dodecadrachm -dodecafid -dodecagon -dodecagonal -dodecaheddra -dodecahedra -dodecahedral -dodecahedric -dodecahedron -dodecahedrons -dodecahydrate -dodecahydrated -dodecamerous -dodecanal -dodecane -Dodecanese -Dodecanesian -dodecanoic -dodecant -dodecapartite -dodecapetalous -dodecaphony -dodecaphonic -dodecaphonically -dodecaphonism -dodecaphonist -dodecarch -dodecarchy -dodecasemic -dodecasyllabic -dodecasyllable -dodecastylar -dodecastyle -dodecastylos -dodecatemory -Dodecatheon -dodecatyl -dodecatylic -dodecatoic -dodecyl -dodecylene -dodecylic -dodecylphenol -dodecuplet -dodgasted -Dodge -dodged -dodgeful -Dodgem -dodgems -dodger -dodgery -dodgeries -dodgers -dodges -Dodgeville -dodgy -dodgier -dodgiest -dodgily -dodginess -dodging -Dodgson -Dodi -Dody -Dodie -dodipole -dodkin -dodlet -dodman -dodo -dodoes -dodoism -dodoisms -Dodoma -Dodona -Dodonaea -Dodonaeaceae -Dodonaean -dodonaena -Dodonean -Dodonian -dodos -dodrans -dodrantal -dods -Dodson -Dodsworth -dodunk -Dodwell -DOE -doebird -Doedicurus -Doeg -doeglic -doegling -Doehne -doek -doeling -Doelling -Doenitz -doer -Doerrer -doers -Doersten -Doerun -does -doeskin -doeskins -doesn -doesnt -doesn't -doest -doeth -doeuvre -d'oeuvre -doff -doffed -doffer -doffers -doffing -doffs -doftberry -dofunny -do-funny -dog -dogal -dogana -dogaressa -dogate -dogbane -dogbanes -dog-banner -Dogberry -Dogberrydom -dogberries -Dogberryism -Dogberrys -dogbite -dog-bitten -dogblow -dogboat -dogbody -dogbodies -dogbolt -dog-bramble -dog-brier -dogbush -dogcart -dog-cart -dogcarts -dogcatcher -dog-catcher -dogcatchers -dog-cheap -dog-days -dogdom -dogdoms -dog-draw -dog-drawn -dog-driven -Doge -dogear -dog-ear -dogeared -dog-eared -dogears -dog-eat-dog -dogedom -dogedoms -dogey -dog-eyed -dogeys -dogeless -dog-end -doges -dogeship -dogeships -dogface -dog-faced -dogfaces -dogfall -dogfennel -dog-fennel -dogfight -dogfighting -dogfights -dogfish -dog-fish -dog-fisher -dogfishes -dog-fly -dogfoot -dog-footed -dogfought -dog-fox -dogged -doggedly -doggedness -Dogger -doggerel -doggereled -doggereler -doggerelism -doggerelist -doggerelize -doggerelizer -doggerelizing -doggerelled -doggerelling -doggerels -doggery -doggeries -doggers -doggess -dogget -Doggett -doggy -doggie -doggier -doggies -doggiest -dogging -doggish -doggishly -doggishness -doggle -dog-gnawn -doggo -doggone -dog-gone -doggoned -doggoneder -doggonedest -doggoner -doggones -doggonest -doggoning -dog-grass -doggrel -doggrelize -doggrels -doghead -dog-head -dog-headed -doghearted -doghole -dog-hole -doghood -dog-hook -doghouse -doghouses -dog-hungry -dog-hutch -dogy -dogie -dogies -dog-in-the-manger -dog-keeping -dog-lame -dog-latin -dog-lean -dog-leaved -dog-leech -dogleg -dog-leg -doglegged -dog-legged -doglegging -doglegs -dogless -dogly -doglike -dogma -dog-mad -dogman -dogmas -dogma's -dogmata -dogmatic -dogmatical -dogmatically -dogmaticalness -dogmatician -dogmatics -dogmatisation -dogmatise -dogmatised -dogmatiser -dogmatising -dogmatism -dogmatisms -dogmatist -dogmatists -dogmatization -dogmatize -dogmatized -dogmatizer -dogmatizing -dogmeat -dogmen -dogmouth -dog-nail -dognap -dognaped -dognaper -dognapers -dognaping -dognapped -dognapper -dognapping -dognaps -do-good -do-gooder -do-goodism -dog-owning -dog-paddle -dog-paddled -dog-paddling -Dogpatch -dogplate -dog-plum -dog-poor -dogproof -Dogra -Dogrib -dog-rose -Dogs -dog's -dog's-bane -dogsbody -dogsbodies -dog's-ear -dog's-eared -dogship -dogshore -dog-shore -dog-sick -dogskin -dog-skin -dogsled -dogsleds -dogsleep -dog-sleep -dog's-meat -dogstail -dog's-tail -dog-star -dogstone -dog-stone -dogstones -dog's-tongue -dog's-tooth -dog-stopper -dogtail -dogteeth -dogtie -dog-tired -dog-toes -dogtooth -dog-tooth -dog-toothed -dogtoothing -dog-tree -dogtrick -dog-trick -dogtrot -dog-trot -dogtrots -dogtrotted -dogtrotting -Dogue -dogvane -dog-vane -dogvanes -dog-violet -dogwatch -dog-watch -dogwatches -dog-weary -dog-whelk -dogwinkle -dogwood -dogwoods -doh -Doha -DOHC -Doherty -dohickey -Dohnanyi -Dohnnyi -dohter -Doi -Doy -doyen -doyenne -doyennes -doyens -Doig -doigt -doigte -Doykos -Doyle -doiled -doyley -doyleys -Doylestown -doily -doyly -doilies -doylies -Doyline -doylt -doina -doing -doings -Doyon -Doisy -doyst -doit -doited -do-it-yourself -do-it-yourselfer -doitkin -doitrified -doits -DOJ -dojigger -dojiggy -dojo -dojos -doke -Doketic -Doketism -dokhma -dokimastic -Dokmarok -Doko -Dol -dol. -Dola -dolabra -dolabrate -dolabre -dolabriform -Dolan -Doland -Dolby -dolcan -dolce -dolcemente -dolci -dolcian -dolciano -dolcinist -dolcino -dolcissimo -doldrum -doldrums -Dole -doleance -doled -dolefish -doleful -dolefuller -dolefullest -dolefully -dolefulness -dolefuls -Doley -dolent -dolente -dolentissimo -dolently -dolerin -dolerite -dolerites -doleritic -dolerophanite -doles -dolesman -dolesome -dolesomely -dolesomeness -doless -Dolf -Dolgeville -Dolhenty -doli -dolia -dolich- -dolichoblond -dolichocephal -dolichocephali -dolichocephaly -dolichocephalic -dolichocephalism -dolichocephalize -dolichocephalous -dolichocercic -dolichocnemic -dolichocrany -dolichocranial -dolichocranic -dolichofacial -Dolichoglossus -dolichohieric -Dolicholus -dolichopellic -dolichopodous -dolichoprosopic -Dolichopsyllidae -Dolichos -dolichosaur -Dolichosauri -Dolichosauria -Dolichosaurus -Dolichosoma -dolichostylous -dolichotmema -dolichuric -dolichurus -Doliidae -Dolin -dolina -doline -doling -dolioform -Doliolidae -Doliolum -dolisie -dolite -dolittle -do-little -dolium -Dolius -Doll -Dollar -dollarbird -dollardee -dollardom -dollarfish -dollarfishes -dollarleaf -dollars -dollarwise -dollbeer -dolldom -dolled -Dolley -dollface -dollfaced -doll-faced -dollfish -Dollfuss -dollhood -dollhouse -dollhouses -Dolli -Dolly -dollia -Dollie -dollied -dollier -dollies -dolly-head -dollying -dollyman -dollymen -dolly-mop -dollin -dolliness -dolling -Dollinger -dolly's -dollish -dollishly -dollishness -Dolliver -dollyway -doll-like -dollmaker -dollmaking -Dolloff -Dollond -dollop -dolloped -dollops -dolls -doll's -dollship -dolma -dolmades -dolman -dolmans -dolmas -dolmen -dolmenic -dolmens -Dolmetsch -Dolomedes -dolomite -Dolomites -dolomitic -dolomitise -dolomitised -dolomitising -dolomitization -dolomitize -dolomitized -dolomitizing -dolomization -dolomize -Dolon -Dolophine -dolor -Dolora -Dolores -doloriferous -dolorific -dolorifuge -dolorimeter -dolorimetry -dolorimetric -dolorimetrically -Dolorita -Doloritas -dolorogenic -doloroso -dolorous -dolorously -dolorousness -dolors -dolos -dolose -dolour -dolours -dolous -Dolph -Dolphin -dolphinfish -dolphinfishes -dolphin-flower -dolphinlike -dolphins -dolphin's -Dolphus -dols -dolt -dolthead -doltish -doltishly -doltishness -Dolton -dolts -dolus -dolven -dom -Dom. -domable -domage -Domagk -DOMAIN -domainal -domains -domain's -domajig -domajigger -domal -domanial -Domash -domatium -domatophobia -domba -Dombeya -domboc -Dombrowski -Domdaniel -dome -domed -domeykite -Domel -Domela -domelike -Domella -Domenech -Domenic -Domenick -Domenico -Domeniga -Domenikos -doment -domer -domes -domes-booke -Domesday -domesdays -dome-shaped -domestic -domesticability -domesticable -domesticality -domestically -domesticate -domesticated -domesticates -domesticating -domestication -domestications -domesticative -domesticator -domesticity -domesticities -domesticize -domesticized -domestics -Domett -domy -domic -domical -domically -Domicella -domicil -domicile -domiciled -domicilement -domiciles -domiciliar -domiciliary -domiciliate -domiciliated -domiciliating -domiciliation -domicilii -domiciling -domicils -domiculture -domify -domification -Domina -dominae -dominance -dominances -dominancy -dominant -dominantly -dominants -dominate -dominated -dominates -dominating -dominatingly -domination -dominations -dominative -dominator -dominators -domine -Domineca -dominee -domineer -domineered -domineerer -domineering -domineeringly -domineeringness -domineers -domines -doming -Dominga -Domingo -Domini -Dominy -dominial -Dominic -Dominica -dominical -dominicale -Dominican -dominicans -Dominick -dominicker -dominicks -dominie -dominies -Dominik -Dominikus -dominion -dominionism -dominionist -dominions -Dominique -dominium -dominiums -Domino -dominoes -dominos -dominule -Dominus -domitable -domite -Domitian -domitic -domn -domnei -Domnus -domoid -Domonic -Domph -dompt -dompteuse -Domremy -Domremy-la-Pucelle -Domrmy-la-Pucelle -doms -domus -Don -Dona -Donaana -donable -Donacidae -donaciform -donack -Donadee -Donaghue -Donahoe -Donahue -Donal -Donald -Donalda -Donalds -Donaldson -Donaldsonville -Donall -Donalsonville -Donalt -Donar -donary -donaries -donas -donat -Donata -donatary -donataries -donate -donated -donatee -Donatelli -Donatello -donates -Donati -Donatiaceae -donating -donatio -donation -donationes -donations -Donatism -Donatist -Donatistic -Donatistical -donative -donatively -donatives -Donato -donator -donatory -donatories -donators -donatress -Donatus -Donau -Donaugh -do-naught -Donavon -donax -Donbass -Doncaster -doncella -doncy -dondaine -Dondi -Dondia -dondine -done -donec -Doneck -donee -donees -Donegal -Donegan -doney -Donela -Donell -Donella -Donelle -Donelson -Donelu -doneness -donenesses -Doner -Donet -Donets -Donetsk -Donetta -Dong -donga -dongas -donging -Dongola -dongolas -Dongolese -dongon -dongs -doni -Donia -Donica -donicker -Donie -Donielle -Doniphan -donis -Donizetti -donjon -donjons -donk -donkey -donkeyback -donkey-drawn -donkey-eared -donkeyish -donkeyism -donkeyman -donkeymen -donkeys -donkey's -donkeywork -donkey-work -Donmeh -Donn -Donna -Donnamarie -donnard -donnas -Donne -donned -donnee -donnees -Donnell -Donnelly -Donnellson -Donnelsville -Donnenfeld -Donner -donnerd -donnered -donnert -Donni -Donny -donnybrook -donnybrooks -donnick -Donnie -donning -donnish -donnishly -donnishness -donnism -donnock -donnot -Donoghue -Donoho -Donohue -donor -Donora -donors -donorship -do-nothing -do-nothingism -do-nothingness -Donough -donought -do-nought -Donovan -dons -donship -donsy -donsie -donsky -dont -don't -don'ts -donum -Donus -donut -donuts -donzel -donzella -donzels -doo -doob -doocot -doodab -doodad -doodads -doodah -Doodia -doodle -doodlebug -doodled -doodler -doodlers -doodles -doodlesack -doodling -doodskop -doohickey -doohickeys -doohickus -doohinkey -doohinkus -dooja -dook -dooket -dookit -dool -Doole -doolee -doolees -Dooley -doolfu -dooli -dooly -doolie -doolies -Doolittle -doom -doomage -doombook -doomed -doomer -doomful -doomfully -doomfulness -dooming -doomlike -dooms -doomsayer -Doomsday -doomsdays -doomsman -doomstead -doomster -doomsters -doomwatcher -Doon -Doone -doon-head-clock -dooputty -door -doorba -doorbell -doorbells -doorboy -doorbrand -doorcase -doorcheek -do-or-die -doored -doorframe -doorhawk -doorhead -dooryard -dooryards -dooring -doorjamb -doorjambs -doorkeep -doorkeeper -doorknob -doorknobs -doorless -doorlike -doormaid -doormaker -doormaking -doorman -doormat -doormats -doormen -Doorn -doornail -doornails -doornboom -Doornik -doorpiece -doorplate -doorplates -doorpost -doorposts -door-roller -doors -door's -door-shaped -doorsill -doorsills -doorstead -doorstep -doorsteps -doorstep's -doorstone -doorstop -doorstops -door-to-door -doorway -doorways -doorway's -doorward -doorweed -doorwise -Doostoevsky -doover -do-over -dooxidize -doozer -doozers -doozy -doozie -doozies -DOP -dopa -dopamelanin -dopamine -dopaminergic -dopamines -dopant -dopants -dopaoxidase -dopas -dopatta -dopchick -dope -dopebook -doped -dopehead -dopey -doper -dopers -dopes -dopesheet -dopester -dopesters -dopy -dopier -dopiest -dopiness -dopinesses -doping -Dopp -dopped -Doppelganger -Doppelger -Doppelgnger -doppelkummel -Doppelmayer -Dopper -dopperbird -doppia -dopping -doppio -Doppler -dopplerite -dopster -Dor -Dora -dorab -dorad -Doradidae -doradilla -Dorado -dorados -doray -Doralia -Doralice -Doralin -Doralyn -Doralynn -Doralynne -doralium -DORAN -doraphobia -Dorask -Doraskean -Dorati -Doraville -dorbeetle -dorbel -dorbie -dorbug -dorbugs -Dorca -Dorcas -dorcastry -Dorcatherium -Dorcea -Dorchester -Dorcy -Dorcia -Dorcopsis -Dorcus -Dordogne -Dordrecht -DORE -doree -Doreen -Dorey -Dorelia -Dorella -Dorelle -do-re-mi -Dorena -Dorene -dorestane -Doretta -Dorette -dor-fly -Dorfman -dorhawk -dorhawks -Dori -Dory -Doria -D'Oria -Dorian -Doryanthes -Doric -Dorical -Dorice -Doricism -Doricize -Doriden -Dorididae -Dorie -dories -Dorylinae -doryline -doryman -dorymen -Dorin -Dorina -Dorinda -Dorine -Dorion -doryphoros -doryphorus -dorippid -Doris -Dorisa -Dorise -Dorism -Dorison -Dorita -Doritis -Dorize -dorje -dork -Dorkas -dorky -dorkier -dorkiest -Dorking -dorks -Dorkus -dorlach -Dorlisa -Dorloo -dorlot -dorm -Dorman -dormancy -dormancies -dormant -dormantly -dormer -dormered -dormers -dormer-windowed -dormette -dormeuse -dormy -dormice -dormie -dormient -dormilona -dormin -dormins -dormitary -dormition -dormitive -dormitory -dormitories -dormitory's -dormmice -Dormobile -dormouse -dorms -Dorn -Dornbirn -dorneck -dornecks -dornic -dornick -dornicks -dornock -dornocks -Dornsife -Doro -Dorobo -Dorobos -Dorolice -Dorolisa -Doronicum -dorosacral -doroscentral -Dorosoma -dorosternal -Dorotea -Doroteya -Dorothea -Dorothee -Dorothi -Dorothy -dorp -Dorpat -dorper -dorpers -dorps -Dorr -Dorran -Dorrance -dorrbeetle -Dorree -Dorren -Dorri -Dorry -Dorrie -Dorris -dorrs -dors -dors- -dorsa -dorsabdominal -dorsabdominally -dorsad -dorsal -dorsale -dorsales -dorsalgia -dorsalis -dorsally -dorsalmost -dorsals -dorsalward -dorsalwards -dorse -Dorsey -dorsel -dorsels -dorser -dorsers -Dorset -Dorsetshire -dorsi -Dorsy -dorsi- -dorsibranch -Dorsibranchiata -dorsibranchiate -dorsicollar -dorsicolumn -dorsicommissure -dorsicornu -dorsiduct -dorsiferous -dorsifixed -dorsiflex -dorsiflexion -dorsiflexor -dorsigerous -dorsigrade -dorsilateral -dorsilumbar -dorsimedian -dorsimesal -dorsimeson -dorsiparous -dorsipinal -dorsispinal -dorsiventral -dorsi-ventral -dorsiventrality -dorsiventrally -Dorsman -dorso- -dorsoabdominal -dorsoanterior -dorsoapical -Dorsobranchiata -dorsocaudad -dorsocaudal -dorsocentral -dorsocephalad -dorsocephalic -dorsocervical -dorsocervically -dorsodynia -dorsoepitrochlear -dorsointercostal -dorsointestinal -dorsolateral -dorsolum -dorsolumbar -dorsomedial -dorsomedian -dorsomesal -dorsonasal -dorsonuchal -dorso-occipital -dorsopleural -dorsoposteriad -dorsoposterior -dorsoradial -dorsosacral -dorsoscapular -dorsosternal -dorsothoracic -dorso-ulnar -dorsoventrad -dorsoventral -dorsoventrality -dorsoventrally -Dorstenia -dorsula -dorsulum -dorsum -dorsumbonal -dors-umbonal -Dort -dorter -Dorthea -Dorthy -dorty -Dorticos -dortiness -dortiship -Dortmund -Dorton -dortour -dorts -doruck -Dorus -Dorweiler -Dorwin -DOS -dos- -do's -dosa -dosadh -dos-a-dos -dosage -dosages -dosain -Doscher -dose -dosed -doser -dosers -doses -Dosh -Dosi -Dosia -do-si-do -dosimeter -dosimeters -dosimetry -dosimetric -dosimetrician -dosimetries -dosimetrist -dosing -Dosinia -dosiology -dosis -Dositheans -dosology -Dospalos -Doss -dossal -dossals -dossed -dossel -dossels -dossennus -dosser -dosseret -dosserets -dossers -dosses -dossety -dosshouse -dossy -dossier -dossiere -dossiers -dossil -dossils -dossing -dossman -dossmen -dost -Dostoevski -Dostoevsky -Dostoievski -Dostoyevski -Dostoyevsky -Doswell -DOT -dotage -dotages -dotal -dotant -dotard -dotardy -dotardism -dotardly -dotards -dotarie -dotate -dotation -dotations -dotchin -DOTE -doted -doter -doters -dotes -doth -Dothan -dother -Dothideacea -dothideaceous -Dothideales -Dothidella -dothienenteritis -Dothiorella -Doti -Doty -dotier -dotiest -dotiness -doting -dotingly -dotingness -dotish -dotishness -dotkin -dotless -dotlet -dotlike -Doto -Dotonidae -dotriacontane -DOTS -dot's -dot-sequential -Dotson -Dott -dottard -dotted -dottedness -dottel -dottels -dotter -dotterel -dotterels -dotters -Dotti -Dotty -Dottie -dottier -dottiest -dottily -dottiness -dotting -dottle -dottled -dottler -dottles -dottling -Dottore -dottrel -dottrels -Dou -Douai -Douay -Douala -douane -douanes -douanier -douar -doub -double -double-acting -double-action -double-armed -double-bank -double-banked -double-banker -double-barred -double-barrel -double-barreled -double-barrelled -double-bass -double-battalioned -double-bedded -double-benched -double-biting -double-bitt -double-bitted -double-bladed -double-blind -double-blossomed -double-bodied -double-bottom -double-bottomed -double-branch -double-branched -double-breasted -double-brooded -double-bubble -double-buttoned -double-charge -double-check -double-chinned -double-clasping -double-claw -double-clutch -double-concave -double-convex -double-creme -double-crested -double-crop -double-cropped -double-cropping -doublecross -double-cross -doublecrossed -double-crosser -doublecrosses -doublecrossing -double-crossing -Double-Crostic -double-cupped -double-cut -doubled -Doubleday -doubledamn -double-dare -double-date -double-dated -double-dating -double-dealer -double-dealing -double-deck -double-decked -double-decker -double-declutch -double-dye -double-dyed -double-disk -double-distilled -double-ditched -double-dodge -double-dome -double-doored -double-dotted -double-duty -double-edged -double-eyed -double-ended -double-ender -double-engined -double-face -double-faced -double-facedly -double-facedness -double-fault -double-feature -double-flowered -double-flowering -double-fold -double-footed -double-framed -double-fronted -doubleganger -double-ganger -doublegear -double-gilt -doublehanded -double-handed -doublehandedly -doublehandedness -double-harness -double-hatched -doublehatching -double-head -double-headed -doubleheader -double-header -doubleheaders -doublehearted -double-hearted -doubleheartedness -double-helical -doublehorned -double-horned -doublehung -double-hung -doubleyou -double-ironed -double-jointed -double-keeled -double-knit -double-leaded -doubleleaf -double-line -double-lived -double-livedness -double-loaded -double-loathed -double-lock -doublelunged -double-lunged -double-magnum -double-manned -double-milled -double-minded -double-mindedly -double-mindedness -double-mouthed -double-natured -doubleness -double-O -double-opposed -double-or-nothing -double-Os -double-park -double-pedal -double-piled -double-pointed -double-pored -double-ported -doubleprecision -double-printing -double-prop -double-queue -double-quick -double-quirked -Doubler -double-reed -double-reef -double-reefed -double-refined -double-refracting -double-ripper -double-rivet -double-riveted -double-rooted -doublers -double-runner -doubles -double-scull -double-seater -double-seeing -double-sensed -double-shot -double-sided -double-sidedness -double-sighted -double-slide -double-soled -double-space -double-spaced -double-spacing -doublespeak -double-spun -double-starred -double-stemmed -double-stitch -double-stitched -double-stop -double-stopped -double-stopping -double-strength -double-struck -double-sunk -double-surfaced -double-sworded -doublet -double-tailed -double-talk -double-team -doubleted -doublethink -double-think -doublethinking -double-thong -doublethought -double-thread -double-threaded -double-time -double-timed -double-timing -doubleton -doubletone -double-tongue -double-tongued -double-tonguing -double-tooth -double-track -doubletree -double-trenched -double-trouble -doublets -doublet's -doublette -double-twisted -Double-u -double-visaged -double-voiced -doublewidth -double-windowed -double-winged -doubleword -doublewords -double-work -double-worked -doubly -doubling -doubloon -doubloons -doublure -doublures -Doubs -doubt -doubtable -doubtably -doubtance -doubt-beset -doubt-cherishing -doubt-dispelling -doubted -doubtedly -doubter -doubters -doubt-excluding -doubtful -doubtfully -doubtfulness -doubt-harboring -doubty -doubting -doubtingly -doubtingness -doubtless -doubtlessly -doubtlessness -doubtmonger -doubtous -doubt-ridden -doubts -doubtsome -doubt-sprung -doubt-troubled -douc -douce -doucely -douceness -doucepere -doucet -Doucette -douceur -douceurs -douche -douched -douches -douching -doucin -doucine -doucker -doudle -Douds -Doug -Dougal -Dougald -Dougall -dough -dough-baked -doughbelly -doughbellies -doughbird -dough-bird -doughboy -dough-boy -doughboys -dough-colored -dough-dividing -Dougherty -doughface -dough-face -dough-faced -doughfaceism -doughfeet -doughfoot -doughfoots -doughhead -doughy -doughier -doughiest -doughiness -dough-kneading -doughlike -doughmaker -doughmaking -Doughman -doughmen -dough-mixing -doughnut -doughnuts -doughnut's -doughs -dought -Doughty -doughtier -doughtiest -doughtily -doughtiness -Doughton -dough-trough -Dougy -Dougie -dougl -Douglas -Douglas-Home -Douglass -Douglassville -Douglasville -Doukhobor -Doukhobors -Doukhobortsy -doulce -doulocracy -doum -douma -doumaist -doumas -Doumergue -doums -doundake -doup -do-up -douper -douping -doupion -doupioni -douppioni -dour -doura -dourade -dourah -dourahs -douras -dourer -dourest -douricouli -dourine -dourines -dourly -dourness -dournesses -Douro -douroucouli -Douschka -douse -doused -douser -dousers -douses -dousing -dousing-chock -Dousman -dout -douter -Douty -doutous -douvecot -Douville -Douw -doux -douzaine -douzaines -douzainier -douzeper -douzepers -douzieme -douziemes -DOV -DOVAP -Dove -dove-colored -dovecot -dovecote -dovecotes -dovecots -dove-eyed -doveflower -dovefoot -dove-gray -dovehouse -dovey -dovekey -dovekeys -dovekie -dovekies -dovelet -dovelike -dovelikeness -doveling -doven -dovened -dovening -dovens -Dover -doves -dove-shaped -dovetail -dovetailed -dovetailer -dovetailing -dovetails -dovetail-shaped -dovetailwise -Dovev -doveweed -dovewood -Dovyalis -dovish -dovishness -Dovray -Dovzhenko -DOW -dowable -dowage -dowager -dowagerism -dowagers -Dowagiac -dowcet -dowcote -Dowd -Dowdell -Dowden -dowdy -dowdier -dowdies -dowdiest -dowdyish -dowdyism -dowdily -dowdiness -Dowding -dowed -dowel -doweled -doweling -Dowell -dowelled -dowelling -Dowelltown -dowels -dower -doweral -dowered -doweress -dowery -doweries -dowering -dowerless -dowers -dowf -dowfart -dowhacky -dowy -dowie -Dowieism -Dowieite -dowily -dowiness -dowing -dowitch -dowitcher -dowitchers -dowl -Dowland -dowlas -Dowlen -dowless -dowly -Dowling -dowment -Dowmetal -Down -Downall -down-and-out -down-and-outer -down-at-heel -down-at-heels -downat-the-heel -down-at-the-heel -down-at-the-heels -downbear -downbeard -downbeat -down-beater -downbeats -downbend -downbent -downby -downbye -down-bow -downcast -downcastly -downcastness -downcasts -down-charge -down-coast -downcome -downcomer -downcomes -downcoming -downcourt -down-covered -downcry -downcried -down-crier -downcrying -downcurve -downcurved -down-curving -downcut -downdale -downdraft -down-drag -downdraught -down-draught -Downe -Down-easter -downed -Downey -downer -downers -Downes -downface -downfall -downfallen -downfalling -downfalls -downfeed -downfield -downflow -downfold -downfolded -downgate -downgyved -down-gyved -downgoing -downgone -downgrade -downgraded -downgrades -downgrading -downgrowth -downhanging -downhaul -downhauls -downheaded -downhearted -downheartedly -downheartedness -downhill -downhills -down-hip -down-house -downy -downy-cheeked -downy-clad -downier -downiest -Downieville -downy-feathered -downy-fruited -downily -downiness -Downing -Downingia -Downingtown -down-in-the-mouth -downy-winged -downland -down-lead -downless -downlie -downlier -downligging -downlying -down-lying -downlike -downline -downlink -downlinked -downlinking -downlinks -download -downloadable -downloaded -downloading -downloads -downlooked -downlooker -down-market -downmost -downness -down-payment -Downpatrick -downpipe -downplay -downplayed -downplaying -downplays -downpour -downpouring -downpours -downrange -down-reaching -downright -downrightly -downrightness -downriver -down-river -downrush -downrushing -Downs -downset -downshare -downshift -downshifted -downshifting -downshifts -downshore -downside -downside-up -downsinking -downsitting -downsize -downsized -downsizes -downsizing -downslide -downsliding -downslip -downslope -downsman -down-soft -downsome -downspout -downstage -downstair -downstairs -downstate -downstater -downsteepy -downstream -downstreet -downstroke -downstrokes -Downsville -downswing -downswings -downtake -down-talk -down-the-line -downthrow -downthrown -downthrust -downtick -downtime -downtimes -down-to-date -down-to-earth -down-to-earthness -Downton -downtown -downtowner -downtowns -downtrampling -downtreading -downtrend -down-trending -downtrends -downtrod -downtrodden -downtroddenness -downturn -downturned -downturns -down-valley -downway -downward -downwardly -downwardness -downwards -downwarp -downwash -down-wash -downweed -downweigh -downweight -downweighted -downwind -downwith -dowp -dowress -dowry -dowries -Dows -dowsabel -dowsabels -dowse -dowsed -dowser -dowsers -dowses -dowset -dowsets -dowsing -Dowski -Dowson -dowve -Dowzall -doxa -Doxantha -doxastic -doxasticon -doxy -Doxia -doxycycline -doxie -doxies -doxographer -doxography -doxographical -doxology -doxological -doxologically -doxologies -doxologize -doxologized -doxologizing -doxorubicin -doz -doz. -doze -dozed -dozen -dozened -dozener -dozening -dozens -dozent -dozenth -dozenths -dozer -dozers -dozes -dozy -Dozier -doziest -dozily -doziness -dozinesses -dozing -dozzle -dozzled -DP -DPA -DPAC -DPANS -DPC -DPE -DPH -DPhil -DPI -DPM -DPMI -DPN -DPNH -DPNPH -DPP -DPS -DPSK -dpt -dpt. -DPW -DQ -DQDB -DQL -DR -Dr. -drab -Draba -drabant -drabbed -drabber -drabbest -drabbet -drabbets -drabby -drabbing -drabbish -drabble -drabbled -drabbler -drabbles -drabbletail -drabbletailed -drabbling -drab-breeched -drab-coated -drab-colored -Drabeck -drabler -drably -drabness -drabnesses -drabs -drab-tinted -Dracaena -Dracaenaceae -dracaenas -drachen -drachm -drachma -drachmae -drachmai -drachmal -drachmas -drachms -dracin -dracma -Draco -Dracocephalum -Dracon -dracone -Draconian -Draconianism -Draconic -Draconically -Draconid -draconin -Draconis -Draconism -draconites -draconitic -dracontian -dracontiasis -dracontic -dracontine -dracontites -Dracontium -Dracula -dracunculus -Dracut -drad -dradge -draegerman -draegermen -draff -draffy -draffier -draffiest -Draffin -draffish -draffman -draffs -draffsack -draft -draftable -draftage -drafted -draftee -draftees -drafter -drafters -draft-exempt -drafty -draftier -draftiest -draftily -draftiness -drafting -draftings -draftman -draftmanship -draftproof -drafts -draftsman -draftsmanship -draftsmen -draftsperson -draftswoman -draftswomanship -draftwoman -drag -dragade -dragaded -dragading -dragbar -dragboat -dragbolt -drag-chain -drag-down -dragee -dragees -Dragelin -drageoir -dragged -dragged-out -dragger -dragger-down -dragger-out -draggers -dragger-up -draggy -draggier -draggiest -draggily -dragginess -dragging -draggingly -dragging-out -draggle -draggled -draggle-haired -draggles -draggletail -draggle-tail -draggletailed -draggle-tailed -draggletailedly -draggletailedness -draggly -draggling -drag-hook -draghound -dragline -draglines -dragman -dragnet -dragnets -Drago -dragoman -dragomanate -dragomanic -dragomanish -dragomans -dragomen -Dragon -dragonade -Dragone -dragon-eyed -dragonesque -dragoness -dragonet -dragonets -dragon-faced -dragonfish -dragonfishes -dragonfly -dragon-fly -dragonflies -dragonhead -dragonhood -dragonish -dragonism -dragonize -dragonkind -dragonlike -dragon-mouthed -dragonnade -dragonne -dragon-ridden -dragonroot -dragon-root -dragons -dragon's -dragon's-tongue -dragontail -dragon-tree -dragon-winged -dragonwort -Dragoon -dragoonable -dragoonade -dragoonage -dragooned -dragooner -dragooning -dragoons -drag-out -dragrope -dragropes -drags -dragsaw -dragsawing -dragshoe -dragsman -dragsmen -dragstaff -drag-staff -dragster -dragsters -Draguignan -drahthaar -Dray -drayage -drayages -Drayden -drayed -drayhorse -draying -drail -drailed -drailing -drails -drayman -draymen -Drain -drainable -drainage -drainages -drainageway -drainboard -draine -drained -drainer -drainerman -drainermen -drainers -drainfield -draining -drainless -drainman -drainpipe -drainpipes -drains -drainspout -draintile -drainway -Drais -drays -draisene -draisine -Drayton -Drake -drakefly -drakelet -Drakensberg -drakes -Drakesboro -drakestone -Drakesville -drakonite -DRAM -drama -dramalogue -Dramamine -dramas -drama's -dramatic -dramatical -dramatically -dramaticism -dramaticle -dramatico-musical -dramatics -dramaticule -dramatis -dramatisable -dramatise -dramatised -dramatiser -dramatising -dramatism -dramatist -dramatists -dramatist's -dramatizable -dramatization -dramatizations -dramatize -dramatized -dramatizer -dramatizes -dramatizing -dramaturge -dramaturgy -dramaturgic -dramaturgical -dramaturgically -dramaturgist -drama-writing -Drambuie -drame -dramm -drammach -drammage -dramme -drammed -Drammen -drammer -dramming -drammock -drammocks -drams -dramseller -dramshop -dramshops -Drances -Drancy -Drandell -drang -drank -drant -drapability -drapable -Draparnaldia -drap-de-berry -Drape -drapeability -drapeable -draped -drapey -Draper -draperess -drapery -draperied -draperies -drapery's -drapers -drapes -drapet -drapetomania -draping -drapping -Drasco -drassid -Drassidae -drastic -drastically -drat -dratchell -drate -drats -dratted -dratting -Drau -draught -draughtboard -draught-bridge -draughted -draughter -draughthouse -draughty -draughtier -draughtiest -draughtily -draughtiness -draughting -draughtman -draughtmanship -draughts -draught's -draughtsboard -draughtsman -draughtsmanship -draughtsmen -draughtswoman -draughtswomanship -Drava -Drave -dravya -Dravida -Dravidian -Dravidic -Dravido-munda -dravite -Dravosburg -draw -draw- -drawability -drawable -draw-arch -drawarm -drawback -drawbacks -drawback's -drawbar -draw-bar -drawbars -drawbeam -drawbench -drawboard -drawboy -draw-boy -drawbolt -drawbore -drawbored -drawbores -drawboring -drawbridge -draw-bridge -drawbridges -drawbridge's -Drawcansir -drawcard -drawcut -draw-cut -drawdown -drawdowns -drawee -drawees -drawer -drawer-down -drawerful -drawer-in -drawer-off -drawer-out -drawers -drawer-up -drawfile -draw-file -drawfiling -drawgate -drawgear -drawglove -draw-glove -drawhead -drawhorse -drawing -drawing-in -drawing-knife -drawing-master -drawing-out -drawing-room -drawing-roomy -drawings -drawings-in -drawk -drawknife -draw-knife -drawknives -drawknot -drawl -drawlatch -draw-latch -drawled -drawler -drawlers -drawly -drawlier -drawliest -drawling -drawlingly -drawlingness -drawlink -drawloom -draw-loom -drawls -drawn -drawnet -draw-net -drawnly -drawnness -drawn-out -drawnwork -drawn-work -drawoff -drawout -drawplate -draw-plate -drawpoint -drawrod -draws -drawshave -drawsheet -draw-sheet -drawspan -drawspring -drawstop -drawstring -drawstrings -drawtongs -drawtube -drawtubes -draw-water -draw-well -drazel -drch -DRD -DRE -dread -dreadable -dread-bolted -dreaded -dreader -dreadful -dreadfully -dreadfulness -dreadfuls -dreading -dreadingly -dreadless -dreadlessly -dreadlessness -dreadly -dreadlocks -dreadnaught -dreadness -dreadnought -dreadnoughts -dreads -Dream -dreamage -dream-blinded -dreamboat -dream-born -dream-built -dream-created -dreamed -dreamer -dreamery -dreamers -dream-footed -dream-found -dreamful -dreamfully -dreamfulness -dream-haunted -dream-haunting -dreamhole -dream-hole -dreamy -dreamy-eyed -dreamier -dreamiest -dreamily -dreamy-minded -dreaminess -dreaming -dreamingful -dreamingly -dreamish -dreamy-souled -dreamy-voiced -dreamland -dreamless -dreamlessly -dreamlessness -dreamlet -dreamlike -dreamlikeness -dreamlit -dreamlore -dream-perturbed -Dreams -dreamscape -dreamsy -dreamsily -dreamsiness -dream-stricken -dreamt -dreamtide -dreamtime -dreamwhile -dreamwise -dreamworld -Dreann -drear -drearfully -dreary -dreary-eyed -drearier -drearies -dreariest -drearihead -drearily -dreary-looking -dreariment -dreary-minded -dreariness -drearing -drearisome -drearisomely -drearisomeness -dreary-souled -drearly -drearness -drear-nighted -drears -drear-white -Drebbel -dreche -dreck -drecky -drecks -Dred -Dreda -Dreddy -dredge -dredged -dredgeful -dredger -dredgers -dredges -dredging -dredgings -Dredi -dree -dreed -Dreeda -dree-draw -dreegh -dreeing -dreep -dreepy -dreepiness -drees -dreg -dreggy -dreggier -dreggiest -dreggily -dregginess -dreggish -dregless -dregs -Dreher -drey -Dreibund -dreich -dreidel -dreidels -dreidl -dreidls -Dreyer -Dreyfus -Dreyfusard -Dreyfusism -Dreyfusist -Dreyfuss -dreigh -dreikanter -dreikanters -dreiling -dreint -dreynt -Dreisch -Dreiser -Dreissensia -dreissiger -drek -dreks -Dremann -Dren -drench -drenched -drencher -drenchers -drenches -drenching -drenchingly -dreng -drengage -drengh -Drenmatt -Drennen -drent -Drente -Drenthe -Drepanaspis -drepane -drepania -drepanid -Drepanidae -Drepanididae -drepaniform -Drepanis -drepanium -drepanoid -Dreparnaudia -Drer -Drescher -Dresden -dress -dressage -dressages -dress-coated -dressed -Dressel -Dresser -dressers -dressership -dresses -dressy -dressier -dressiest -dressily -dressiness -dressing -dressing-board -dressing-case -dressing-down -dressings -Dressler -dressline -dressmake -dressmaker -dress-maker -dressmakery -dressmakers -dressmaker's -dressmakership -dressmaking -dress-making -dressmakings -dressoir -dressoirs -dress-up -drest -dretch -drevel -Drew -Drewett -drewite -Drewryville -Drews -Drewsey -Drexel -Drexler -DRG -DRI -Dry -dryable -dryad -dryades -dryadetum -dryadic -dryads -drias -Dryas -dryasdust -dry-as-dust -drib -dribbed -dribber -dribbet -dribbing -dribble -dribbled -dribblement -dribbler -dribblers -dribbles -dribblet -dribblets -dribbly -dribbling -drybeard -dry-beat -driblet -driblets -dry-blowing -dry-boned -dry-bones -drybrained -drybrush -dry-brush -dribs -dry-burnt -Dric -Drice -dry-clean -dry-cleanse -dry-cleansed -dry-cleansing -drycoal -dry-cure -dry-curing -Drida -dridder -driddle -Dryden -Drydenian -Drydenic -Drydenism -dry-dye -dry-dock -drie -Drye -dry-eared -driech -dried -dried-up -driegh -dry-eyed -drier -dryer -drier-down -drierman -dryerman -dryermen -driers -drier's -dryers -dries -driest -dryest -dryfarm -dry-farm -dryfarmer -dryfat -dry-fine -dryfist -dry-fist -dry-fly -Dryfoos -dryfoot -dry-foot -dry-footed -dry-footing -dry-founder -dry-fruited -drift -driftage -driftages -driftbolt -drifted -drifter -drifters -driftfish -driftfishes -drifty -drift-ice -driftier -driftiest -Drifting -driftingly -driftland -driftless -driftlessness -driftlet -driftman -drift-netter -Drifton -driftpiece -driftpin -driftpins -drifts -driftway -driftweed -driftwind -Driftwood -drift-wood -driftwoods -Drygalski -driggle-draggle -Driggs -drighten -drightin -drygoodsman -dry-grind -dry-gulch -dry-handed -dryhouse -drying -dryinid -dryish -dry-ki -dryland -dry-leaved -drily -dryly -dry-lipped -drill -drillability -drillable -drillbit -drilled -driller -drillers -drillet -drilling -drillings -drill-like -drillman -drillmaster -drillmasters -drills -drillstock -dry-looking -drylot -drylots -drilvis -Drimys -dry-mouthed -Drin -Drina -Drynaria -dryness -drynesses -dringle -drink -drinkability -drinkable -drinkableness -drinkables -drinkably -drinker -drinkery -drinkers -drink-hael -drink-hail -drinky -drinking -drinkless -drinkproof -drinks -Drinkwater -drinn -dry-nurse -dry-nursed -dry-nursing -Dryobalanops -Dryope -Dryopes -Dryophyllum -Dryopians -dryopithecid -Dryopithecinae -dryopithecine -Dryopithecus -Dryops -Dryopteris -dryopteroid -drip -dry-paved -drip-dry -drip-dried -drip-drying -drip-drip -drip-drop -drip-ground -dry-pick -dripless -drypoint -drypoints -dripolator -drippage -dripped -dripper -drippers -drippy -drippier -drippiest -dripping -drippings -dripple -dripproof -Dripps -dry-press -Dryprong -drips -drip's -dripstick -dripstone -dript -dry-roasted -dryrot -dry-rot -dry-rotted -dry-rub -drys -dry-sail -dry-salt -dry-salted -drysalter -drysaltery -drysalteries -Driscoll -dry-scrubbed -Drysdale -dry-shave -drisheen -dry-shod -dry-shoot -drisk -Driskill -dry-skinned -Drisko -Drislane -drysne -dry-soled -drissel -dryster -dry-stone -dryth -dry-throated -dry-tongued -drivable -drivage -drive -drive- -driveable -driveaway -driveboat -drivebolt -drivecap -drivehead -drive-in -drivel -driveled -driveler -drivelers -driveline -driveling -drivelingly -drivelled -driveller -drivellers -drivelling -drivellingly -drivels -driven -drivenness -drivepipe -driver -driverless -drivers -drivership -drives -drivescrew -driveway -driveways -driveway's -drivewell -driving -driving-box -drivingly -drivings -driving-wheel -drywall -drywalls -dryworker -drizzle -drizzled -drizzle-drozzle -drizzles -drizzly -drizzlier -drizzliest -drizzling -drizzlingly -DRMU -Drobman -drochuil -droddum -drof -drofland -drof-land -droger -drogerman -drogermen -drogh -Drogheda -drogher -drogherman -droghlin -Drogin -drogoman -drogue -drogues -droguet -droh -droich -droil -droyl -droit -droits -droitsman -droitural -droiture -droiturel -Drokpa -drolerie -Drolet -droll -drolled -droller -drollery -drolleries -drollest -drolly -drolling -drollingly -drollish -drollishness -drollist -drollness -drolls -drolushness -Dromaeognathae -dromaeognathism -dromaeognathous -Dromaeus -drome -dromed -dromedary -dromedarian -dromedaries -dromedarist -drometer -Dromiacea -dromic -dromical -Dromiceiidae -Dromiceius -Dromicia -dromioid -dromograph -dromoi -dromomania -dromometer -dromon -dromond -dromonds -dromons -dromophobia -Dromornis -dromos -dromotropic -dromous -Drona -dronage -drone -droned -dronel -dronepipe -droner -droners -drones -drone's -dronet -drongo -drongos -drony -droning -droningly -dronish -dronishly -dronishness -dronkelew -dronkgrass -Dronski -dronte -droob -Drooff -drool -drooled -drooly -droolier -drooliest -drooling -drools -droop -droop-eared -drooped -drooper -droop-headed -droopy -droopier -droopiest -droopily -droopiness -drooping -droopingly -droopingness -droop-nosed -droops -droopt -drop -drop- -drop-away -dropax -dropberry -dropcloth -drop-eared -dropflower -dropforge -drop-forge -dropforged -drop-forged -dropforger -drop-forger -dropforging -drop-forging -drop-front -drophead -dropheads -dropkick -drop-kick -dropkicker -drop-kicker -dropkicks -drop-leaf -drop-leg -droplet -droplets -drop-letter -droplight -droplike -dropline -dropling -dropman -dropmeal -drop-meal -drop-off -dropout -drop-out -dropouts -droppage -dropped -dropper -dropperful -dropper-on -droppers -dropper's -droppy -dropping -droppingly -droppings -dropping's -drops -drop's -drop-scene -dropseed -drop-shaped -dropshot -dropshots -dropsy -dropsical -dropsically -dropsicalness -dropsy-dry -dropsied -dropsies -dropsy-sick -dropsywort -dropsonde -drop-stich -dropt -dropvie -dropwise -dropworm -dropwort -dropworts -Droschken -Drosera -Droseraceae -droseraceous -droseras -droshky -droshkies -drosky -droskies -drosograph -drosometer -Drosophila -drosophilae -drosophilas -Drosophilidae -Drosophyllum -dross -drossed -drossel -drosser -drosses -drossy -drossier -drossiest -drossiness -drossing -drossless -drostden -drostdy -drou -droud -droughermen -drought -droughty -droughtier -droughtiest -droughtiness -drought-parched -drought-resisting -droughts -drought's -drought-stricken -drouk -droukan -drouked -drouket -drouking -droukit -drouks -droumy -drouth -drouthy -drouthier -drouthiest -drouthiness -drouths -drove -droved -drover -drove-road -drovers -droves -drovy -droving -drow -drown -drownd -drownded -drownding -drownds -drowned -drowner -drowners -drowning -drowningly -drownings -drownproofing -drowns -drowse -drowsed -drowses -drowsy -drowsier -drowsiest -drowsihead -drowsihood -drowsily -drowsiness -drowsing -drowte -DRP -DRS -Dru -drub -drubbed -drubber -drubbers -drubbing -drubbings -drubble -drubbly -drubly -drubs -Druce -Druci -Drucy -Drucie -Drucill -Drucilla -drucken -Drud -drudge -drudged -drudger -drudgery -drudgeries -drudgers -drudges -drudging -drudgingly -drudgism -Drue -Druella -druery -druffen -Drug -drug-addicted -drug-damned -drugeteria -Drugge -drugged -drugger -druggery -druggeries -drugget -druggeting -druggets -druggy -druggie -druggier -druggies -druggiest -drugging -druggist -druggister -druggists -druggist's -drug-grinding -Drugi -drugless -drugmaker -drugman -drug-mixing -drug-pulverizing -drugs -drug's -drug-selling -drugshop -drugstore -drugstores -drug-using -Druid -Druidess -druidesses -druidic -druidical -Druidism -druidisms -druidology -druidry -druids -druith -Drukpa -drum -drumbeat -drumbeater -drumbeating -drumbeats -drumble -drumbled -drumbledore -drumble-drone -drumbler -drumbles -drumbling -drumfire -drumfires -drumfish -drumfishes -drumhead -drumheads -drumler -drumly -drumlier -drumliest -drumlike -drumlin -drumline -drumlinoid -drumlins -drumloid -drumloidal -drum-major -drummed -drummer -drummers -drummer's -drummy -drumming -drummock -Drummond -Drummonds -Drumore -drumread -drumreads -Drumright -drumroll -drumrolls -Drums -drum's -drum-shaped -drumskin -drumslade -drumsler -drumstick -drumsticks -drum-up -drumwood -drum-wound -drung -drungar -drunk -drunkard -drunkards -drunkard's -drunkelew -drunken -drunkeness -drunkenly -drunkenness -drunkennesses -drunkensome -drunkenwise -drunker -drunkery -drunkeries -drunkest -drunkly -drunkometer -drunks -drunt -Drupa -Drupaceae -drupaceous -drupal -drupe -drupel -drupelet -drupelets -drupeole -drupes -drupetum -drupiferous -drupose -Drury -Drus -Druse -Drusean -drused -Drusedom -druses -Drusi -Drusy -Drusian -Drusie -Drusilla -Drusus -druther -druthers -druttle -druxey -druxy -druxiness -Druze -DS -d's -DSA -DSAB -DSBAM -DSC -Dschubba -DSCS -DSD -DSDC -DSE -dsect -dsects -DSEE -Dseldorf -D-sharp -DSI -DSM -DSN -dsname -dsnames -DSO -DSP -DSR -DSRI -DSS -DSSI -DST -D-state -DSTN -DSU -DSW -DSX -DT -DTAS -DTB -DTC -dtd -DTE -dtente -DTF -DTG -DTh -DTI -DTIF -DTL -DTMF -DTP -DTR -dt's -dtset -DTSS -DTU -DU -Du. -DUA -duad -duadic -duads -dual -Duala -duali -dualin -dualism -dualisms -dualist -dualistic -dualistically -dualists -duality -dualities -duality's -dualization -dualize -dualized -dualizes -dualizing -dually -Dualmutef -dualogue -dual-purpose -duals -duan -Duane -Duanesburg -duant -duarch -duarchy -duarchies -Duarte -DUATS -Duax -dub -Dubach -Dubai -Du-barry -dubash -dubb -dubba -dubbah -dubbed -dubbeh -dubbeltje -dubber -Dubberly -dubbers -dubby -dubbin -dubbing -dubbings -dubbins -Dubbo -Dubcek -Dubenko -Dubhe -Dubhgall -dubiety -dubieties -Dubinsky -dubio -dubiocrystalline -dubiosity -dubiosities -dubious -dubiously -dubiousness -dubiousnesses -dubitable -dubitably -dubitancy -dubitant -dubitante -dubitate -dubitatingly -dubitation -dubitative -dubitatively -Dublin -Dubliners -Dubna -DuBois -Duboisia -duboisin -duboisine -Dubonnet -dubonnets -DuBose -Dubre -Dubrovnik -dubs -Dubuffet -Dubuque -Duc -Ducal -ducally -ducamara -Ducan -ducape -Ducasse -ducat -ducato -ducaton -ducatoon -ducats -ducatus -ducdame -Duce -duces -Duchamp -duchan -duchery -Duchesne -Duchesnea -Duchess -duchesse -duchesses -duchesslike -duchess's -duchy -duchies -duci -Duck -duckbill -duck-bill -duck-billed -duckbills -duckblind -duckboard -duckboards -duckboat -ducked -duck-egg -ducker -duckery -duckeries -duckers -duckfoot -duckfooted -duck-footed -duck-hawk -duckhearted -duckhood -duckhouse -duckhunting -ducky -duckie -duckier -duckies -duckiest -ducking -ducking-pond -ducking-stool -duckish -ducklar -duck-legged -ducklet -duckling -ducklings -ducklingship -duckmeat -duckmole -duckpin -duckpins -duckpond -duck-retter -ducks -duckstone -ducktail -ducktails -duck-toed -Ducktown -duckwalk -Duckwater -duckweed -duckweeds -duckwheat -duckwife -duckwing -Duclos -Duco -Ducommun -Ducor -ducs -duct -ductal -ducted -ductibility -ductible -ductile -ductilely -ductileness -ductilimeter -ductility -ductilities -ductilize -ductilized -ductilizing -ducting -ductings -duction -ductless -ductor -ducts -ductule -ductules -ducture -ductus -ductwork -Ducula -Duculinae -Dud -dudaim -Dudden -dudder -duddery -duddy -duddie -duddies -duddle -dude -duded -dudeen -dudeens -Dudelsack -dudes -Dudevant -dudgen -dudgeon -dudgeons -dudine -duding -dudish -dudishly -dudishness -dudism -Dudley -Dudleya -dudleyite -dudler -dudman -duds -due -duecentist -duecento -duecentos -dueful -duel -dueled -dueler -duelers -dueling -duelist -duelistic -duelists -duelled -dueller -duellers -duelli -duelling -duellist -duellistic -duellists -duellize -duello -duellos -duels -Duena -duenas -duende -duendes -dueness -duenesses -duenna -duennadom -duennas -duennaship -Duenweg -Duer -Duero -dues -Duessa -Duester -duet -duets -duetted -duetting -duettino -duettist -duettists -duetto -Duewest -Dufay -Duff -duffadar -Duffau -duffed -duffel -duffels -duffer -dufferdom -duffers -Duffy -Duffie -Duffield -duffies -duffing -duffle -duffles -duffs -Dufy -dufoil -dufrenite -dufrenoysite -dufter -dufterdar -duftery -duftite -duftry -Dufur -dug -Dugaid -dugal -Dugald -Dugan -Dugas -dugdug -dugento -Duggan -Dugger -duggler -dugong -Dugongidae -dugongs -dugout -dug-out -dugouts -dugs -Dugspur -dug-up -Dugway -Duhamel -duhat -Duhl -Duhr -DUI -duiker -duyker -duikerbok -duikerboks -duikerbuck -duikers -duim -Duyne -duinhewassel -Duisburg -Duit -duits -dujan -duka -Dukakis -Dukas -Duk-duk -Duke -dukedom -dukedoms -Dukey -dukely -dukeling -dukery -dukes -duke's -dukeship -dukhn -Dukhobor -Dukhobors -Dukhobortsy -Duky -Dukie -dukker -dukkeripen -dukkha -dukuma -DUKW -Dulac -Dulaney -Dulanganes -Dulat -dulbert -dulc -dulcamara -dulcarnon -Dulce -Dulcea -dulcely -dulceness -dulcet -dulcetly -dulcetness -dulcets -Dulci -Dulcy -Dulcia -dulcian -Dulciana -dulcianas -Dulcibelle -dulcid -Dulcie -dulcify -dulcification -dulcified -dulcifies -dulcifying -dulcifluous -dulcigenic -dulciloquent -dulciloquy -dulcimer -dulcimers -dulcimore -Dulcin -Dulcine -Dulcinea -dulcineas -Dulcinist -dulcite -dulcity -dulcitol -Dulcitone -dulcitude -Dulcle -dulcor -dulcorate -dulcose -Duleba -duledge -duler -duly -dulia -dulias -dull -Dulla -dullard -dullardism -dullardness -dullards -dullbrained -dull-brained -dull-browed -dull-colored -dull-eared -dulled -dull-edged -dull-eyed -duller -dullery -Dulles -dullest -dullhead -dull-head -dull-headed -dull-headedness -dullhearted -dully -dullify -dullification -dulling -dullish -dullishly -dullity -dull-lived -dull-looking -dullness -dullnesses -dullpate -dull-pated -dull-pointed -dull-red -dulls -dull-scented -dull-sighted -dull-sightedness -dullsome -dull-sounding -dull-spirited -dull-surfaced -dullsville -dull-toned -dull-tuned -dull-voiced -dull-witted -dull-wittedness -dulness -dulnesses -dulocracy -dulosis -dulotic -dulse -Dulsea -dulse-green -dulseman -dulses -dult -dultie -Duluth -dulwilly -Dulzura -dum -Duma -Dumaguete -Dumah -dumaist -Dumanian -Dumarao -Dumas -dumb -dumba -Dumbarton -Dumbartonshire -dumbbell -dumb-bell -dumbbeller -dumbbells -dumbbell's -dumb-bird -dumb-cane -dumbcow -dumbed -dumber -dumbest -dumbfish -dumbfound -dumbfounded -dumbfounder -dumbfounderment -dumbfounding -dumbfoundment -dumbfounds -dumbhead -dumbheaded -dumby -dumbing -dumble -dumble- -dumbledore -dumbly -dumbness -dumbnesses -dumbs -dumb-show -dumbstricken -dumbstruck -dumb-struck -dumbwaiter -dumb-waiter -dumbwaiters -dumdum -dumdums -dumetose -dumfound -dumfounded -dumfounder -dumfounderment -dumfounding -dumfounds -Dumfries -Dumfriesshire -Dumyat -dumka -dumky -Dumm -dummel -dummered -dummerer -dummy -dummied -dummies -dummying -dummyism -dumminess -dummy's -dummyweed -dummkopf -dummkopfs -Dumond -Dumont -Dumontia -Dumontiaceae -dumontite -dumortierite -dumose -dumosity -dumous -dump -dumpage -dumpcart -dumpcarts -dumped -dumper -dumpers -dumpfile -dumpy -dumpier -dumpies -dumpiest -dumpily -dumpiness -dumping -dumpings -dumpish -dumpishly -dumpishness -dumple -dumpled -dumpler -dumpling -dumplings -dumpoke -dumps -Dumpty -dumsola -Dumuzi -Dun -Duna -Dunaburg -dunair -Dunaj -dunal -dunam -dunamis -dunams -Dunant -Dunarea -Dunaville -Dunbar -Dunbarton -dun-belted -dunbird -dun-bird -dun-brown -Dunc -Duncan -Duncannon -Duncansville -Duncanville -dunce -duncedom -duncehood -duncery -dunces -dunce's -dunch -dunches -Dunciad -duncical -duncify -duncifying -duncish -duncishly -duncishness -dun-colored -Duncombe -Dundalk -Dundas -dundasite -dundavoe -Dundee -dundees -dundee's -dunder -dunderbolt -dunderfunk -dunderhead -dunderheaded -dunderheadedness -dunderheads -dunderpate -dunderpates -dun-diver -dun-drab -dundreary -dundrearies -dun-driven -dune -Dunedin -duneland -dunelands -dunelike -Dunellen -dunes -dune's -Dunfermline -dunfish -dung -Dungan -Dungannin -Dungannon -dungannonite -dungaree -dungarees -dungari -dunga-runga -dungas -dungbeck -dungbird -dungbred -dung-cart -dunged -Dungeness -dungeon -dungeoner -dungeonlike -dungeons -dungeon's -dunger -dung-fork -dunghill -dunghilly -dunghills -dungy -dungyard -dungier -dungiest -dunging -dungol -dungon -dungs -Dunham -dun-haunted -duny -dun-yellow -dun-yellowish -duniewassal -dunite -dunites -dunitic -duniwassal -dunk -dunkadoo -Dunkard -dunked -Dunker -Dunkerque -dunkers -Dunkerton -Dunkin -dunking -Dunkirk -Dunkirker -Dunkirque -dunkle -dunkled -dunkling -dunks -Dunlap -Dunlavy -Dunleary -Dunlevy -dunlin -dunlins -Dunlo -Dunlop -Dunlow -Dunmor -Dunmore -Dunn -dunnage -dunnaged -dunnages -dunnaging -dunnakin -Dunne -dunned -Dunnegan -Dunnell -Dunnellon -dunner -dunness -dunnesses -dunnest -dunny -dunniewassel -Dunnigan -Dunning -dunnish -dunnite -dunnites -dunno -dunnock -Dunnsville -Dunnville -Dunois -dun-olive -Dunoon -dunpickle -dun-plagued -dun-racked -dun-red -Dunreith -Duns -Dunsany -Dunseath -Dunseith -Dunsinane -Dunsmuir -Dunson -dunst -Dunstable -Dunstan -Dunstaple -dunster -Dunston -dunstone -dunt -dunted -dunter -Dunthorne -dunting -duntle -Dunton -Duntroon -dunts -Duntson -dun-white -Dunwoody -dunziekte -duo -duo- -duocosane -duodecagon -duodecahedral -duodecahedron -duodecane -duodecastyle -duodecennial -duodecillion -duodecillions -duodecillionth -duodecim- -duodecimal -duodecimality -duodecimally -duodecimals -duodecimfid -duodecimo -duodecimole -duodecimomos -duodecimos -duodecuple -duodedena -duodedenums -duoden- -duodena -duodenal -duodenary -duodenas -duodenate -duodenation -duodene -duodenectomy -duodenitis -duodenocholangitis -duodenocholecystostomy -duodenocholedochotomy -duodenocystostomy -duodenoenterostomy -duodenogram -duodenojejunal -duodenojejunostomy -duodenojejunostomies -duodenopancreatectomy -duodenoscopy -duodenostomy -duodenotomy -duodenum -duodenums -duodial -duodynatron -duodiode -duodiodepentode -duodiode-triode -duodrama -duograph -duogravure -duole -duoliteral -duolog -duologs -duologue -duologues -duomachy -duomi -duomo -duomos -Duong -duopod -duopoly -duopolies -duopolist -duopolistic -duopsony -duopsonies -duopsonistic -duos -duosecant -duotype -duotone -duotoned -duotones -duotriacontane -duotriode -duoviri -dup -dup. -dupability -dupable -Dupaix -Duparc -dupatta -dupe -duped -dupedom -duper -dupery -duperies -Duperrault -dupers -dupes -Dupin -duping -dupion -dupioni -dupla -duplation -duple -Dupleix -Duplessis -Duplessis-Mornay -duplet -duplex -duplexed -duplexer -duplexers -duplexes -duplexing -duplexity -duplexs -duply -duplicability -duplicable -duplicand -duplicando -duplicate -duplicated -duplicately -duplicate-pinnate -duplicates -duplicating -duplication -duplications -duplicative -duplicato- -duplicato-dentate -duplicator -duplicators -duplicator's -duplicato-serrate -duplicato-ternate -duplicature -duplicatus -duplicia -duplicident -Duplicidentata -duplicidentate -duplicious -duplicipennate -duplicitas -duplicity -duplicities -duplicitous -duplicitously -duplify -duplification -duplified -duplifying -duplon -duplone -Dupo -dupondidii -dupondii -dupondius -DuPont -duppa -dupped -dupper -duppy -duppies -dupping -Dupr -Dupre -Dupree -dups -Dupuy -Dupuyer -Dupuis -Dupuytren -Duquesne -Duquette -Duquoin -Dur -Dur. -dura -durability -durabilities -durable -durableness -durables -durably -duracine -durain -dural -Duralumin -duramater -duramatral -duramen -duramens -Duran -Durance -durances -Durand -Durandarte -durangite -Durango -Durani -Durant -Duranta -Durante -Duranty -duraplasty -duraquara -Durarte -duras -duraspinalis -duration -durational -durationless -durations -duration's -durative -duratives -durax -Durazzo -durbachite -Durban -durbar -durbars -Durbin -durdenite -durdum -dure -dured -duree -dureful -Durene -durenol -Durer -dureresque -dures -duress -duresses -duressor -duret -duretto -Durex -durezza -D'Urfey -Durga -durgah -durgan -durgen -Durgy -Durham -Durhamville -durian -durians -duricrust -duridine -Duryea -duryl -Durindana -during -duringly -Durio -Duryodhana -durion -durions -Duriron -durity -Durkee -Durkheim -Durkin -Durman -durmast -durmasts -durn -Durnan -durndest -durned -durneder -durnedest -Durning -Durno -durns -duro -Duroc -Duroc-Jersey -durocs -duroy -durometer -duroquinone -duros -durous -Durovic -Durr -durra -Durrace -durras -Durrell -Durrett -durry -durry-dandy -durrie -durries -durrin -durrs -Durst -Durstin -Durston -Durtschi -durukuli -durum -durums -durwan -Durward -Durware -durwaun -Durwin -Durwyn -Durwood -Durzada -durzee -durzi -Dusa -dusack -duscle -Duse -Dusehra -Dusen -Dusenberg -Dusenbury -dusenwind -dush -Dushanbe -Dushehra -Dushore -dusio -dusk -dusk-down -dusked -dusken -dusky -dusky-browed -dusky-colored -duskier -duskiest -dusky-faced -duskily -dusky-mantled -duskiness -dusking -duskingtide -dusky-raftered -dusky-sandaled -duskish -duskishly -duskishness -duskly -duskness -dusks -Duson -Dussehra -Dusseldorf -Dussera -Dusserah -Dust -Dustan -dustband -dust-bath -dust-begrimed -dustbin -dustbins -dustblu -dustbox -dust-box -dust-brand -dustcart -dustcloth -dustcloths -dustcoat -dust-colored -dust-counter -dustcover -dust-covered -dust-dry -dusted -dustee -Duster -dusterman -dustermen -duster-off -dusters -dustfall -dust-gray -dustheap -dustheaps -Dusty -Dustie -dustier -dustiest -dustyfoot -dustily -Dustin -dustiness -dusting -dusting-powder -dust-laden -dust-laying -dustless -dustlessness -dustlike -Dustman -dustmen -dustoff -dustoffs -Duston -dustoor -dustoori -dustour -dustpan -dustpans -dustpoint -dust-point -dust-polluting -dust-producing -dustproof -dustrag -dustrags -dusts -dustsheet -dust-soiled -duststorm -dust-throwing -dusttight -dust-tight -dustuck -dustuk -dustup -dust-up -dustups -dustwoman -Dusun -Dusza -DUT -Dutch -dutched -Dutcher -dutchess -Dutch-gabled -Dutchy -Dutchify -dutching -Dutchman -Dutchman's-breeches -Dutchman's-pipe -Dutchmen -Dutch-process -Dutchtown -Dutch-ware-blue -duteous -duteously -duteousness -Duthie -duty -dutiability -dutiable -duty-bound -dutied -duties -duty-free -dutiful -dutifully -dutifulness -dutymonger -duty's -dutra -Dutton -dutuburi -Dutzow -duumvir -duumviral -duumvirate -duumviri -duumvirs -DUV -Duval -Duvalier -Duvall -Duveneck -duvet -duvetyn -duvetine -duvetyne -duvetines -duvetynes -duvetyns -duvets -Duvida -Duwalt -Duwe -dux -Duxbury -duxelles -duxes -DV -dvaita -dvandva -DVC -dvigu -dvi-manganese -Dvina -Dvinsk -DVM -DVMA -DVMRP -DVMS -Dvorak -dvornik -DVS -DVX -DW -dwayberry -dwaible -dwaibly -Dwain -Dwaine -Dwayne -Dwale -dwalm -Dwamish -Dwan -Dwane -dwang -DWAPS -dwarf -dwarfed -dwarfer -dwarfest -dwarfy -dwarfing -dwarfish -dwarfishly -dwarfishness -dwarfism -dwarfisms -dwarflike -dwarfling -dwarfness -dwarfs -dwarves -DWB -Dweck -dweeble -dwell -dwelled -dweller -dwellers -dwelling -dwellings -dwells -dwelt -DWI -Dwyer -Dwight -Dwyka -DWIM -dwindle -dwindled -dwindlement -dwindles -dwindling -dwine -dwined -dwines -dwining -Dwinnell -Dworak -Dworman -Dworshak -dwt -DX -DXT -DZ -dz. -Dzaudzhikau -dzeren -dzerin -dzeron -Dzerzhinsk -Dzhambul -Dzhugashvili -dziggetai -Dzyubin -dzo -Dzoba -Dzongka -Dzugashvili -Dzungar -Dzungaria -E -e- -E. -E.E. -e.g. -E.I. -e.o. -e.o.m. -E.R. -E.T.A. -E.T.D. -E.V. -E911 -EA -ea. -EAA -eably -eaceworm -each -Eachelle -Eachern -eachwhere -each-where -EACSO -ead -Eada -EADAS -EADASNM -EADASS -Eade -eadi -Eadie -eadios -eadish -Eadith -Eadmund -Eads -Eadwina -Eadwine -EAEO -EAFB -Eagan -Eagar -Eagarville -eager -eager-eyed -eagerer -eagerest -eager-hearted -eagerly -eager-looking -eager-minded -eagerness -eagernesses -eagers -eager-seeming -Eagle -eagle-billed -eagled -eagle-eyed -eagle-flighted -eaglehawk -eagle-hawk -eagle-headed -eaglelike -eagle-pinioned -eagles -eagle's -eagle-seeing -eagle-sighted -Eaglesmere -eagless -eaglestone -eaglet -Eagletown -eaglets -Eagleville -eagle-winged -eaglewood -eagle-wood -eagling -eagrass -eagre -eagres -Eaineant -EAK -Eakins -Eakly -Eal -Ealasaid -ealderman -ealdorman -ealdormen -Ealing -EAM -Eamon -ean -Eanes -eaning -eanling -eanlings -Eanore -ear -earable -earache -ear-ache -earaches -earbash -earbob -ear-brisk -earcap -earclip -ear-cockie -earcockle -ear-deafening -Eardley -eardrop -eardropper -eardrops -eardrum -eardrums -eared -ear-filling -earflap -earflaps -earflower -earful -earfuls -Earhart -earhead -earhole -earing -earings -earjewel -Earl -Earla -earlap -earlaps -earldom -earldoms -earlduck -Earle -ear-leaved -Earleen -Earley -Earlene -earless -earlesss -earlet -Earleton -Earleville -Earlham -Early -Earlie -earlier -earliest -earlyish -earlike -Earlimart -Earline -earliness -Earling -Earlington -earlish -Earlysville -earlywood -earlobe -earlobes -earlock -earlocks -earls -earl's -Earlsboro -earlship -earlships -Earlton -Earlville -earmark -ear-mark -earmarked -earmarking -earmarkings -earmarks -ear-minded -earmindedness -ear-mindedness -earmuff -earmuffs -EARN -earnable -earned -earner -earners -earner's -earnest -earnestful -earnestly -earnestness -earnestnesses -earnest-penny -earnests -earnful -earnie -earning -earnings -earns -earock -EAROM -Earp -earphone -earphones -earpick -earpiece -earpieces -ear-piercing -earplug -earplugs -earreach -ear-rending -ear-rent -earring -ear-ring -earringed -earrings -earring's -ears -earscrew -earsh -earshell -earshot -earshots -earsore -earsplitting -ear-splitting -earspool -earstone -earstones -eartab -eartag -eartagged -Earth -Eartha -earth-apple -earth-ball -earthboard -earth-board -earthborn -earth-born -earthbound -earth-bound -earth-boundness -earthbred -earth-convulsing -earth-delving -earth-destroying -earth-devouring -earth-din -earthdrake -earth-dwelling -earth-eating -earthed -earthen -earth-engendered -earthenhearted -earthenware -earthenwares -earthfall -earthfast -earth-fed -earthgall -earth-god -earth-goddess -earthgrubber -earth-homing -earthy -earthian -earthier -earthiest -earthily -earthiness -earthinesses -earthing -earthkin -earthless -earthly -earthlier -earthliest -earthlight -earth-light -earthlike -earthly-minded -earthly-mindedness -earthliness -earthlinesses -earthling -earthlings -earth-lit -earthly-wise -earth-mad -earthmaker -earthmaking -earthman -earthmen -earthmove -earthmover -earthmoving -earth-moving -earthnut -earth-nut -earthnuts -earth-old -earthpea -earthpeas -earthquake -earthquaked -earthquaken -earthquake-proof -earthquakes -earthquake's -earthquaking -earthquave -earth-refreshing -earth-rending -earthrise -earths -earthset -earthsets -Earthshaker -earthshaking -earth-shaking -earthshakingly -earthshattering -earthshine -earthshock -earthslide -earthsmoke -earth-sounds -earth-sprung -earth-stained -earthstar -earth-strewn -earthtongue -earth-vexing -earthwall -earthward -earthwards -earth-wide -earthwork -earthworks -earthworm -earthworms -earthworm's -earth-wrecking -ear-trumpet -Earvin -earwax -ear-wax -earwaxes -earwig -earwigged -earwiggy -earwigginess -earwigging -earwigs -earwitness -ear-witness -earworm -earworms -earwort -EAS -EASD -ease -eased -easeful -easefully -easefulness -easel -easeled -easeless -easel-picture -easels -easement -easements -easement's -ease-off -easer -easers -eases -ease-up -EASI -easy -easier -easies -easiest -easy-fitting -easy-flowing -easygoing -easy-going -easygoingly -easygoingness -easy-hearted -easy-humored -easily -easylike -easy-mannered -easy-minded -easy-natured -easiness -easinesses -easing -easy-paced -easy-rising -easy-running -easy-spoken -Easley -eassel -East -eastabout -eastbound -Eastbourne -east-country -easted -east-end -East-ender -Easter -easter-day -Easter-giant -eastering -Easter-ledges -Easterly -easterlies -easterliness -easterling -eastermost -Eastern -Easterner -easterners -Easternism -easternize -easternized -easternizing -Easternly -easternmost -easters -Eastertide -easting -eastings -East-insular -Eastlake -Eastland -eastlander -Eastleigh -eastlin -eastling -eastlings -eastlins -Eastman -eastmost -eastness -east-northeast -east-northeastward -east-northeastwardly -Easton -Eastre -easts -Eastside -East-sider -east-southeast -east-southeastward -east-southeastwardly -eastward -eastwardly -eastwards -east-windy -Eastwood -eat -eatability -eatable -eatableness -eatables -eatage -eat-all -Eatanswill -eatberry -eatche -eaten -eaten-leaf -eater -eatery -eateries -eater-out -eaters -eath -eathly -eating -eatings -Eaton -Eatonton -Eatontown -Eatonville -eats -Eatton -EAU -Eauclaire -eau-de-vie -Eaugalle -eaux -eave -eaved -eavedrop -eavedropper -eavedropping -eaver -Eaves -eavesdrip -eavesdrop -eavesdropped -eavesdropper -eavesdroppers -eavesdropper's -eavesdropping -eavesdrops -eavesing -eavy-soled -Eb -Eba -Ebarta -ebauche -ebauchoir -ebb -Ebba -Ebbarta -ebbed -Ebberta -ebbet -ebbets -Ebby -Ebbie -ebbing -ebbman -ebbs -ebcasc -ebcd -EBCDIC -ebdomade -Ebeye -Eben -Ebenaceae -ebenaceous -Ebenales -ebeneous -Ebeneser -Ebenezer -Ebensburg -Eberhard -Eberhart -Eberle -Eberly -Ebert -Eberta -Eberthella -Eberto -Ebervale -EBI -Ebionism -Ebionite -Ebionitic -Ebionitism -Ebionitist -Ebionize -Eblis -EbN -Ebner -Ebneter -E-boat -Eboe -Eboh -Eboli -ebon -Ebonee -Ebony -ebonies -ebonige -ebonise -ebonised -ebonises -ebonising -ebonist -ebonite -ebonites -ebonize -ebonized -ebonizes -ebonizing -ebons -Eboracum -eboulement -ebracteate -ebracteolate -ebraick -ebriate -ebriated -ebricty -ebriety -ebrillade -ebriose -ebriosity -ebrious -ebriously -Ebro -EBS -Ebsen -ebullate -ebulliate -ebullience -ebulliency -ebullient -ebulliently -ebulliometer -ebulliometry -ebullioscope -ebullioscopy -ebullioscopic -ebullition -ebullitions -ebullitive -ebulus -eburated -eburin -eburine -Eburna -eburnated -eburnation -eburnean -eburneoid -eburneous -eburnian -eburnification -EC -ec- -ECA -ECAD -ECAFE -ecalcarate -ecalcavate -ecanda -ECAP -ecardinal -ecardine -Ecardines -ecarinate -ecart -ecarte -ecartes -ECASS -Ecaudata -ecaudate -ecb -Ecballium -ecbasis -Ecbatana -ecbatic -ecblastesis -ecblastpsis -ecbole -ecbolic -ecbolics -ECC -Ecca -eccaleobion -ecce -eccentrate -eccentric -eccentrical -eccentrically -eccentricity -eccentricities -eccentrics -eccentric's -eccentring -eccentrometer -ecch -ecchymoma -ecchymose -ecchymosed -ecchymoses -ecchymosis -ecchymotic -ecchondroma -ecchondrosis -ecchondrotome -eccyclema -eccyesis -Eccl -eccl. -Eccles -ecclesi- -ecclesia -ecclesiae -ecclesial -ecclesiarch -ecclesiarchy -ecclesiast -Ecclesiastes -ecclesiastic -ecclesiastical -ecclesiasticalism -ecclesiastically -ecclesiasticalness -ecclesiasticism -ecclesiasticize -ecclesiastico-military -ecclesiastico-secular -ecclesiastics -Ecclesiasticus -ecclesiastry -ecclesioclastic -ecclesiography -ecclesiolater -ecclesiolatry -ecclesiology -ecclesiologic -ecclesiological -ecclesiologically -ecclesiologist -ecclesiophobia -Ecclus -Ecclus. -ECCM -eccoprotic -eccoproticophoric -eccrine -eccrinology -eccrisis -eccritic -ECCS -ECD -ecdemic -ecdemite -ecderon -ecderonic -ecdyses -ecdysial -ecdysiast -ecdysis -ecdyson -ecdysone -ecdysones -ecdysons -ECDO -ECE -ecesic -ecesis -ecesises -Ecevit -ECF -ECG -ecgonin -ecgonine -echafaudage -echappe -echappee -echar -echard -echards -eche -echea -Echecles -eched -Echegaray -echelette -echelle -echelon -echeloned -echeloning -echelonment -echelons -Echeloot -Echemus -echeneid -Echeneidae -echeneidid -Echeneididae -echeneidoid -Echeneis -eches -Echetus -echevaria -Echeveria -Echeverria -echevin -Echidna -echidnae -echidnas -Echidnidae -Echikson -Echimys -echin- -Echinacea -echinal -echinate -echinated -eching -echini -echinid -echinidan -Echinidea -echiniform -echinital -echinite -echino- -Echinocactus -Echinocaris -Echinocereus -Echinochloa -echinochrome -E-chinocystis -echinococcosis -echinococcus -Echinoderes -Echinoderidae -echinoderm -Echinoderma -echinodermal -Echinodermata -echinodermatous -echinodermic -Echinodorus -echinoid -Echinoidea -echinoids -echinology -echinologist -Echinomys -Echinopanax -Echinops -echinopsine -Echinorhynchus -Echinorhinidae -Echinorhinus -Echinospermum -Echinosphaerites -Echinosphaeritidae -Echinostoma -Echinostomatidae -echinostome -echinostomiasis -Echinozoa -echinulate -echinulated -echinulation -echinuliform -echinus -Echion -Echis -echitamine -Echites -Echium -echiurid -Echiurida -echiuroid -Echiuroidea -Echiurus -echnida -Echo -echocardiogram -echoed -echoey -echoencephalography -echoer -echoers -echoes -echogram -echograph -echoic -echoing -echoingly -echoism -echoisms -echoist -echoize -echoized -echoizing -Echola -echolalia -echolalic -echoless -echolocate -echolocation -Echols -echometer -echopractic -echopraxia -echos -echovirus -echowise -echt -Echuca -eciliate -ecyphellate -Eciton -ecize -Eck -Eckardt -Eckart -Eckblad -Eckehart -Eckel -Eckelson -Eckerman -Eckermann -Eckert -Eckerty -Eckhardt -Eckhart -Eckley -ecklein -Eckman -Eckmann -ECL -ECLA -eclair -eclaircise -eclaircissement -eclairissement -eclairs -eclampsia -eclamptic -eclat -eclated -eclating -eclats -eclectic -eclectical -eclectically -eclecticism -eclecticist -eclecticize -Eclectics -eclectism -eclectist -eclegm -eclegma -eclegme -eclipsable -eclipsareon -eclipsation -eclipse -eclipsed -eclipser -eclipses -eclipsing -eclipsis -eclipsises -ecliptic -ecliptical -ecliptically -ecliptics -eclogic -eclogite -eclogites -eclogue -Eclogues -eclosion -eclosions -ECLSS -ECM -ECMA -ecmnesia -ECN -ECO -eco- -ecocidal -ecocide -ecocides -ecoclimate -ecod -ecodeme -ecofreak -ecoid -ecol -ecol. -Ecole -ecoles -ecology -ecologic -ecological -ecologically -ecologies -ecologist -ecologists -ECOM -ecomomist -econ -econ. -Econah -economese -econometer -econometric -Econometrica -econometrical -econometrically -econometrician -econometrics -econometrist -Economy -economic -economical -economically -economicalness -economics -economies -economy's -economise -economised -economiser -economising -economism -economist -economists -economist's -Economite -economization -economize -economized -economizer -economizers -economizes -economizing -ecophene -ecophysiology -ecophysiological -ecophobia -ecorch -ecorche -Ecorse -ecorticate -ecosystem -ecosystems -ECOSOC -ecospecies -ecospecific -ecospecifically -ecosphere -ecossaise -ecostate -ecotype -ecotypes -ecotypic -ecotipically -ecotypically -ecotonal -ecotone -ecotones -ecotopic -ecoute -ECOWAS -ECPA -ecphasis -ecphonema -ecphonesis -ecphorable -ecphore -ecphory -ecphoria -ecphoriae -ecphorias -ecphorization -ecphorize -ecphova -ecphractic -ecphrasis -ECPT -ECR -ecrase -ecraseur -ecraseurs -ecrasite -ecrevisse -ecroulement -Ecru -ecrus -ecrustaceous -ECS -ECSA -ECSC -ecstasy -ecstasies -ecstasis -ecstasize -ecstatic -ecstatica -ecstatical -ecstatically -ecstaticize -ecstatics -ecstrophy -ECT -ect- -ectad -ectadenia -ectal -ectally -ectases -ectasia -ectasis -ectatic -ectene -ectental -ectepicondylar -ecteron -ectethmoid -ectethmoidal -Ecthesis -ecthetically -ecthyma -ecthymata -ecthymatous -ecthlipses -ecthlipsis -ectypal -ectype -ectypes -ectypography -ectiris -ecto- -ectobatic -ectoblast -ectoblastic -ectobronchium -ectocardia -Ectocarpaceae -ectocarpaceous -Ectocarpales -ectocarpic -ectocarpous -Ectocarpus -ectocelic -ectochondral -ectocinerea -ectocinereal -ectocyst -ectocoelic -ectocommensal -ectocondylar -ectocondyle -ectocondyloid -ectocornea -ectocranial -ectocrine -ectocuneiform -ectocuniform -ectodactylism -ectoderm -ectodermal -ectodermic -ectodermoidal -ectodermosis -ectoderms -ectodynamomorphic -ectoentad -ectoenzym -ectoenzyme -ectoethmoid -ectogeneous -ectogenesis -ectogenetic -ectogenic -ectogenous -ectoglia -Ectognatha -ectolecithal -ectoloph -ectomere -ectomeres -ectomeric -ectomesoblast -ectomy -ectomorph -ectomorphy -ectomorphic -ectomorphism -ectonephridium -ectoparasite -ectoparasitic -Ectoparasitica -ectopatagia -ectopatagium -ectophyte -ectophytic -ectophloic -ectopy -ectopia -ectopias -ectopic -Ectopistes -ectoplacenta -ectoplasy -ectoplasm -ectoplasmatic -ectoplasmic -ectoplastic -ectoproct -Ectoprocta -ectoproctan -ectoproctous -ectopterygoid -Ector -ectoretina -ectorganism -ectorhinal -ectosarc -ectosarcous -ectosarcs -ectoskeleton -ectosomal -ectosome -ectosphenoid -ectosphenotic -ectosphere -ectosteal -ectosteally -ectostosis -ectotheca -ectotherm -ectothermic -ectotoxin -Ectotrophi -ectotrophic -ectotropic -ectozoa -ectozoan -ectozoans -ectozoic -ectozoon -ectrodactyly -ectrodactylia -ectrodactylism -ectrodactylous -ectrogeny -ectrogenic -ectromelia -ectromelian -ectromelic -ectromelus -ectropion -ectropionization -ectropionize -ectropionized -ectropionizing -ectropium -ectropometer -ectrosyndactyly -ectrotic -ecttypal -ECU -Ecua -Ecua. -Ecuador -Ecuadoran -Ecuadorean -Ecuadorian -ecuelle -ecuelling -ecumenacy -ecumene -ecumenic -ecumenical -ecumenicalism -ecumenicality -ecumenically -ecumenicism -ecumenicist -ecumenicity -ecumenicize -ecumenics -ecumenism -ecumenist -ecumenistic -ecumenopolis -ecurie -ecus -ECV -eczema -eczemas -eczematization -eczematoid -eczematosis -eczematous -ed -ed- -ed. -EDA -EDAC -edacious -edaciously -edaciousness -edacity -edacities -Edam -Edan -Edana -edaphic -edaphically -edaphodont -edaphology -edaphon -Edaphosauria -edaphosaurid -Edaphosaurus -EdB -Edbert -EDC -Edcouch -EDD -Edda -Eddaic -Eddana -Eddas -edder -Eddi -Eddy -Eddic -Eddie -eddied -eddies -eddying -Eddina -Eddington -eddyroot -eddy's -eddish -Eddystone -Eddyville -eddy-wind -eddo -eddoes -Eddra -Ede -Edea -edeagra -Edee -edeitis -Edeline -Edelman -Edelson -Edelstein -Edelsten -edelweiss -edelweisses -edema -edemas -edemata -edematose -edematous -edemic -Eden -Edenic -edenite -Edenization -Edenize -edental -edentalous -Edentata -edentate -edentates -Edenton -edentulate -edentulous -Edenville -edeodynia -edeology -edeomania -edeoscopy -edeotomy -Ederle -EDES -Edessa -Edessan -Edessene -edestan -edestin -Edestosaurus -Edette -EDF -EDGAR -Edgard -Edgardo -Edgarton -Edgartown -Edge -edgebone -edge-bone -edgeboned -edged -Edgefield -edge-grain -edge-grained -Edgehill -Edgeley -edgeless -edgeling -Edgell -edgemaker -edgemaking -edgeman -Edgemont -Edgemoor -edger -edgerman -edgers -Edgerton -edges -edgeshot -edgestone -edge-tool -edgeway -edgeways -edge-ways -Edgewater -edgeweed -edgewise -Edgewood -Edgeworth -edgy -edgier -edgiest -edgily -edginess -edginesses -edging -edgingly -edgings -edgrew -edgrow -edh -Edhessa -Edholm -edhs -EDI -Edy -edibile -edibility -edibilities -edible -edibleness -edibles -edict -edictal -edictally -edicts -edict's -edictum -edicule -Edie -EDIF -ediface -edify -edificable -edificant -edificate -edification -edifications -edificative -edificator -edificatory -edifice -edificed -edifices -edifice's -edificial -edificing -edified -edifier -edifiers -edifies -edifying -edifyingly -edifyingness -Ediya -Edyie -Edik -edile -ediles -edility -Edin -Edina -Edinboro -Edinburg -Edinburgh -edingtonite -Edirne -Edison -edit -edit. -Edita -editable -edital -editchar -edited -Edith -Edyth -Editha -Edithe -Edythe -editing -edition -editions -edition's -editor -editorial -editorialist -editorialization -editorializations -editorialize -editorialized -editorializer -editorializers -editorializes -editorializing -editorially -editorials -editorial-writing -editor-in-chief -editors -editor's -editorship -editorships -editress -editresses -edits -edituate -Ediva -Edla -Edley -Edlin -Edlyn -Edlun -EdM -Edman -Edmanda -Edme -Edmea -Edmead -Edmee -Edmeston -Edmon -Edmond -Edmonda -Edmonde -Edmondo -Edmonds -Edmondson -Edmonson -Edmonton -Edmore -Edmund -Edmunda -Edna -Ednas -Edneyville -Edny -Ednie -EDO -Edom -Edomite -Edomitic -Edomitish -Edon -Edoni -Edora -Edouard -EDP -edplot -Edra -Edrea -Edrei -Edriasteroidea -Edric -Edrick -Edrioasteroid -Edrioasteroidea -Edriophthalma -edriophthalmatous -edriophthalmian -edriophthalmic -edriophthalmous -Edris -Edrock -Edroi -Edroy -EDS -Edsel -Edson -EDSX -EDT -EDTA -EDTCC -Eduard -Eduardo -educ -educ. -Educabilia -educabilian -educability -educable -educables -educand -educatability -educatable -educate -educated -educatedly -educatedness -educatee -educates -educating -Education -educationable -educational -educationalism -educationalist -educationally -educationary -educationese -educationist -educations -educative -educator -educatory -educators -educator's -educatress -educe -educed -educement -educes -educible -educing -educive -educt -eduction -eductions -eductive -eductor -eductors -educts -Eduino -edulcorate -edulcorated -edulcorating -edulcoration -edulcorative -edulcorator -Eduskunta -Edva -Edvard -Edveh -Edwall -Edward -Edwardean -Edwardeanism -Edwardian -Edwardianism -Edwardine -Edwards -Edwardsburg -Edwardsia -Edwardsian -Edwardsianism -Edwardsiidae -Edwardsport -Edwardsville -Edwin -Edwina -Edwyna -Edwine -ee -eebree -EEC -EECT -EEDP -EEE -EEG -eegrass -EEHO -EEI -Eeyore -eeyuch -eeyuck -Eek -EEL -eelback -eel-backed -eel-bed -eelblenny -eelblennies -eelboat -eelbob -eelbobber -eelcake -eelcatcher -eel-catching -eeler -eelery -eelfare -eel-fare -eelfish -eelgrass -eelgrasses -eely -eelier -eeliest -eeling -eellike -eelpot -eelpout -eel-pout -eelpouts -eels -eel's -eel-shaped -eelshop -eelskin -eel-skin -eelspear -eel-spear -eelware -eelworm -eelworms -EEM -eemis -een -e'en -eentsy-weentsy -EEO -EEOC -EEPROM -eequinoctium -eer -e'er -eery -eerie -eerier -eeriest -eerily -eeriness -eerinesses -eerisome -eerock -Eerotema -eesome -eeten -Eetion -EF -ef- -Efahan -Efaita -Efatese -EFD -efecks -eff -effable -efface -effaceable -effaced -effacement -effacements -effacer -effacers -effaces -effacing -effare -effascinate -effate -effatum -effect -effected -effecter -effecters -effectful -effectible -effecting -effective -effectively -effectiveness -effectivity -effectless -effector -effectors -effector's -effectress -effects -effectual -effectuality -effectualize -effectually -effectualness -effectualnesses -effectuate -effectuated -effectuates -effectuating -effectuation -effectuous -effeir -effeminacy -effeminacies -effeminate -effeminated -effeminately -effeminateness -effeminating -effemination -effeminatize -effeminisation -effeminise -effeminised -effeminising -effeminization -effeminize -effeminized -effeminizing -effendi -effendis -efference -efferent -efferently -efferents -efferous -effervesce -effervesced -effervescence -effervescences -effervescency -effervescent -effervescently -effervesces -effervescible -effervescing -effervescingly -effervescive -effet -effete -effetely -effeteness -effetman -effetmen -Effy -efficace -efficacy -efficacies -efficacious -efficaciously -efficaciousness -efficacity -efficience -efficiency -efficiencies -efficient -efficiently -Effie -Effye -effierce -effigy -effigial -effigiate -effigiated -effigiating -effigiation -effigies -effigurate -effiguration -Effingham -efflagitate -efflate -efflation -effleurage -effloresce -effloresced -efflorescence -efflorescency -efflorescent -effloresces -efflorescing -efflower -effluence -effluences -effluency -effluent -effluents -effluve -effluvia -effluviable -effluvial -effluvias -effluviate -effluviography -effluvious -effluvium -effluviums -effluvivia -effluviviums -efflux -effluxes -effluxion -effodient -Effodientia -effoliate -efforce -efford -efform -efformation -efformative -effort -effortful -effortfully -effortfulness -effortless -effortlessly -effortlessness -efforts -effort's -effossion -effraction -effractor -effray -effranchise -effranchisement -effrenate -effront -effronted -effrontery -effronteries -effs -effude -effulge -effulged -effulgence -effulgences -effulgent -effulgently -effulges -effulging -effumability -effume -effund -effuse -effused -effusely -effuses -effusing -effusiometer -effusion -effusions -effusive -effusively -effusiveness -effuso -effuviate -EFI -Efik -EFIS -efl -eflagelliferous -Efland -efoliolate -efoliose -Eforia -efoveolate -efph -efractory -Efram -EFRAP -efreet -Efrem -Efremov -Efren -Efron -EFS -eft -EFTA -eftest -Efthim -efts -eftsoon -eftsoons -EG -Eg. -EGA -egad -Egadi -egads -egal -egalitarian -egalitarianism -egalitarians -egalite -egalites -egality -egall -egally -Egan -egards -Egarton -Egba -Egbert -Egbo -Egeberg -Egede -Egegik -Egeland -egence -egency -Eger -egeran -Egeria -egers -Egerton -egest -Egesta -egested -egesting -egestion -egestions -egestive -egests -egg -eggar -eggars -eggbeater -eggbeaters -eggberry -eggberries -egg-bound -eggcrate -eggcup -eggcupful -eggcups -eggeater -egged -egger -eggers -Eggett -eggfish -eggfruit -egghead -eggheaded -eggheadedness -eggheads -egghot -eggy -eggy-hot -egging -eggler -eggless -Eggleston -egglike -eggment -eggnog -egg-nog -eggnogs -eggplant -egg-plant -eggplants -eggroll -eggrolls -eggs -egg-shaped -eggshell -egg-shell -eggshells -eggwhisk -egg-white -Egham -Egide -Egidio -Egidius -egilops -Egin -Egypt -Egyptiac -Egyptian -Egyptianisation -Egyptianise -Egyptianised -Egyptianising -Egyptianism -Egyptianization -Egyptianize -Egyptianized -Egyptianizing -egyptians -Egypticity -Egyptize -egipto -egypto- -Egypto-arabic -Egypto-greek -Egyptologer -Egyptology -Egyptologic -Egyptological -Egyptologist -Egypto-roman -egis -egises -Egk -Eglamore -eglandular -eglandulose -eglandulous -Eglanteen -Eglantine -eglantines -eglatere -eglateres -eglestonite -Eglevsky -Eglin -egling -eglogue -eglomerate -eglomise -Eglon -egma -EGmc -Egmont -Egnar -EGO -egocentric -egocentrically -egocentricity -egocentricities -egocentrism -egocentristic -Egocerus -egohood -ego-involve -egoism -egoisms -egoist -egoistic -egoistical -egoistically -egoisticalness -egoistry -egoists -egoity -egoize -egoizer -egol -egolatrous -egoless -ego-libido -egomania -egomaniac -egomaniacal -egomaniacally -egomanias -egomism -Egon -egophony -egophonic -Egor -egos -egosyntonic -egotheism -egotism -egotisms -egotist -egotistic -egotistical -egotistically -egotisticalness -egotists -egotize -egotized -egotizing -ego-trip -EGP -egracias -egranulose -egre -egregious -egregiously -egregiousness -egremoigne -EGREP -egress -egressAstronomy -egressed -egresses -egressing -egression -egressive -egressor -EGRET -egrets -Egretta -egrid -egrimony -egrimonle -egriot -egritude -egromancy -egualmente -egueiite -egurgitate -egurgitated -egurgitating -eguttulate -Egwan -Egwin -eh -Ehatisaht -Ehden -eheu -EHF -EHFA -Ehling -ehlite -Ehlke -Ehman -EHP -Ehr -Ehrenberg -Ehrenbreitstein -Ehrenburg -Ehretia -Ehretiaceae -Ehrhardt -Ehrlich -Ehrman -Ehrsam -ehrwaldite -ehtanethial -ehuawa -Ehud -Ehudd -EI -ey -EIA -eyah -eyalet -eyas -eyases -eyass -EIB -Eibar -eichbergite -Eichendorff -Eichhornia -Eichman -Eichmann -Eichstadt -eichwaldite -Eyck -eicosane -eide -Eyde -eident -eydent -eidently -eider -eiderdown -eider-down -eiderdowns -eiders -eidetic -eidetically -Eydie -eidograph -eidola -eidolic -eidolism -eidology -eidolology -eidolon -eidolons -eidoptometry -eidos -eidouranion -Eidson -eye -eyeable -eye-appealing -eyeball -eye-ball -eyeballed -eyeballing -eyeballs -eyeball-to-eyeball -eyebalm -eyebar -eyebath -eyebeam -eye-beam -eyebeams -eye-bedewing -eye-beguiling -eyeberry -eye-bewildering -eye-bewitching -eyeblack -eyeblink -eye-blinking -eye-blurred -eye-bold -eyebolt -eye-bolt -eyebolts -eyebree -eye-bree -eyebridled -eyebright -eye-brightening -eyebrow -eyebrows -eyebrow's -eye-casting -eye-catcher -eye-catching -eye-charmed -eye-checked -eye-conscious -eyecup -eyecups -eyed -eye-dazzling -eye-delighting -eye-devouring -eye-distracting -eyedness -eyednesses -eyedot -eye-draught -eyedrop -eyedropper -eyedropperful -eyedroppers -eye-earnestly -eye-filling -eyeflap -eyeful -eyefuls -eyeglance -eyeglass -eye-glass -eyeglasses -eye-glutting -eyeground -eyehole -eyeholes -eyehook -eyehooks -eyey -eyeing -Eyeish -eyelash -eye-lash -eyelashes -eyelast -Eyeleen -eyeless -eyelessness -eyelet -eyeleted -eyeleteer -eyelet-hole -eyeleting -eyelets -eyeletted -eyeletter -eyeletting -eyelid -eyelids -eyelid's -eyelight -eyelike -eyeline -eyeliner -eyeliners -eye-lotion -Eielson -eyemark -eye-minded -eye-mindedness -eyen -eye-offending -eyeopener -eye-opener -eye-opening -eye-overflowing -eye-peep -eyepiece -eyepieces -eyepiece's -eyepit -eye-pit -eye-pleasing -eyepoint -eyepoints -eyepopper -eye-popper -eye-popping -eyer -eyereach -eye-rejoicing -eye-rolling -eyeroot -eyers -eyes -eyesalve -eye-searing -eyeseed -eye-seen -eyeservant -eye-servant -eyeserver -eye-server -eyeservice -eye-service -eyeshade -eyeshades -eyeshield -eyeshine -eyeshot -eye-shot -eyeshots -eye-sick -eyesight -eyesights -eyesome -eyesore -eyesores -eye-splice -eyespot -eyespots -eye-spotted -eyess -eyestalk -eyestalks -eye-starting -eyestone -eyestones -eyestrain -eyestrains -eyestring -eye-string -eyestrings -eyeteeth -Eyetie -eyetooth -eye-tooth -eye-trying -eyewaiter -eyewash -eyewashes -eyewater -eye-watering -eyewaters -eyewear -eye-weariness -eyewink -eye-wink -eyewinker -eye-winking -eyewinks -eyewitness -eye-witness -eyewitnesses -eyewitness's -eyewort -Eifel -Eiffel -eigen- -eigenfrequency -eigenfunction -eigenspace -eigenstate -eigenvalue -eigenvalues -eigenvalue's -eigenvector -eigenvectors -Eiger -eigh -eight -eyght -eight-angled -eight-armed -eightball -eightballs -eight-celled -eight-cylinder -eight-day -eighteen -eighteenfold -eighteenmo -eighteenmos -eighteens -eighteenth -eighteenthly -eighteenths -eight-flowered -eightfoil -eightfold -eight-gauge -eighth -eighthes -eighthly -eight-hour -eighths -eighth's -eighty -eighty-eight -eighty-eighth -eighties -eightieth -eightieths -eighty-fifth -eighty-first -eighty-five -eightyfold -eighty-four -eighty-fourth -eighty-nine -eighty-niner -eighty-ninth -eighty-one -eighty-second -eighty-seven -eighty-seventh -eighty-six -eighty-sixth -eighty-third -eighty-three -eighty-two -eightling -eight-oar -eight-oared -eightpenny -eight-ply -eights -eightscore -eightsman -eightsmen -eightsome -eight-spot -eight-square -eightvo -eightvos -eight-wheeler -eigne -eying -Eijkman -eikon -eikones -Eikonogen -eikonology -eikons -eyl -eila -Eyla -Eilat -eild -Eileen -Eileithyia -eyliad -Eilis -Eilshemius -Eimak -eimer -Eimeria -Eimile -Eimmart -ein -eyn -Einar -Einberger -Eindhoven -EINE -eyne -Einhorn -einkanter -einkorn -einkorns -Einstein -Einsteinian -einsteinium -Einthoven -Eioneus -eyot -Eyota -eyoty -Eipper -eir -eyr -eyra -eirack -eyrant -eyrar -eyras -Eire -Eyre -Eireannach -eyren -Eirena -eirenarch -Eirene -eirenic -eirenicon -eyrer -eyres -eiresione -eiry -eyry -eyrie -eyries -Eirikson -eyrir -EIS -EISA -EISB -eisegeses -eisegesis -eisegetic -eisegetical -Eisele -eisell -Eisen -Eisenach -Eisenberg -Eysenck -Eisenhart -Eisenhower -Eisenstadt -Eisenstark -Eisenstein -Eiser -Eisinger -Eisk -Eysk -Eyskens -Eisler -Eisner -eisodic -eysoge -eisoptrophobia -EISS -eisteddfod -eisteddfodau -eisteddfodic -eisteddfodism -eisteddfods -Eiswein -Eiten -either -either-or -EITS -Eitzen -ejacula -ejaculate -ejaculated -ejaculates -ejaculating -ejaculation -ejaculations -ejaculative -ejaculator -ejaculatory -ejaculators -ejaculum -Ejam -EJASA -eject -ejecta -ejectable -ejectamenta -ejected -ejectee -ejecting -ejection -ejections -ejective -ejectively -ejectives -ejectivity -ejectment -ejector -ejectors -ejects -ejectum -ejicient -ejidal -ejido -ejidos -ejoo -ejulate -ejulation -ejurate -ejuration -ejusd -ejusdem -eka-aluminum -ekaboron -ekacaesium -ekaha -eka-iodine -Ekalaka -ekamanganese -ekasilicon -ekatantalum -Ekaterina -Ekaterinburg -Ekaterinodar -Ekaterinoslav -eke -ekebergite -eked -ekename -eke-name -eker -ekerite -ekes -EKG -ekhimi -eking -ekistic -ekistics -ekka -Ekoi -ekphore -ekphory -ekphoria -ekphorias -ekphorize -ekpwele -ekpweles -Ekron -Ekronite -Ekstrom -Ektachrome -ektene -ektenes -ektexine -ektexines -ektodynamorphic -EKTS -ekuele -Ekwok -el -Ela -elabor -elaborate -elaborated -elaborately -elaborateness -elaboratenesses -elaborates -elaborating -elaboration -elaborations -elaborative -elaboratively -elaborator -elaboratory -elaborators -elabrate -Elachista -Elachistaceae -elachistaceous -elacolite -Elaeagnaceae -elaeagnaceous -Elaeagnus -Elaeis -elaenia -elaeo- -elaeoblast -elaeoblastic -Elaeocarpaceae -elaeocarpaceous -Elaeocarpus -Elaeococca -Elaeodendron -elaeodochon -elaeomargaric -elaeometer -elaeopten -elaeoptene -elaeosaccharum -elaeosia -elaeothesia -elaeothesium -Elagabalus -Elah -elaic -elaidate -elaidic -elaidin -elaidinic -elayl -elain -Elaina -Elaine -Elayne -elains -elaioleucite -elaioplast -elaiosome -Elais -Elam -Elamite -Elamitic -Elamitish -elamp -elan -Elana -elance -Eland -elands -Elane -elanet -elans -Elanus -elao- -Elaphe -Elaphebolia -Elaphebolion -elaphine -Elaphodus -Elaphoglossum -Elaphomyces -Elaphomycetaceae -Elaphrium -elaphure -elaphurine -Elaphurus -elapid -Elapidae -elapids -Elapinae -elapine -elapoid -Elaps -elapse -elapsed -elapses -elapsing -Elapsoidea -Elara -elargement -ELAS -elasmobranch -elasmobranchian -elasmobranchiate -Elasmobranchii -elasmosaur -Elasmosaurus -elasmothere -Elasmotherium -elastance -elastase -elastases -elastic -elastica -elastically -elasticate -elastician -elasticin -elasticity -elasticities -elasticize -elasticized -elasticizer -elasticizes -elasticizing -elasticness -elastics -elastic-seeming -elastic-sided -elasticum -elastin -elastins -elastivity -elastomer -elastomeric -elastomers -elastometer -elastometry -Elastoplast -elastose -Elat -Elata -elatcha -elate -elated -elatedly -elatedness -elater -elatery -elaterid -Elateridae -elaterids -elaterin -elaterins -elaterist -elaterite -elaterium -elateroid -elaterometer -elaters -elates -Elath -Elatha -Elatia -Elatinaceae -elatinaceous -Elatine -elating -elation -elations -elative -elatives -elator -elatrometer -Elatus -Elazaro -Elazig -elb -Elba -Elbart -Elbassan -Elbe -Elberfeld -Elberon -Elbert -Elberta -Elbertina -Elbertine -Elberton -El-beth-el -Elbie -Elbing -Elbl -Elblag -Elboa -elboic -elbow -elbowboard -elbowbush -elbowchair -elbowed -elbower -elbowy -elbowing -elbowpiece -elbowroom -elbows -elbow-shaped -Elbridge -Elbring -Elbrus -Elbruz -elbuck -Elburn -Elburr -Elburt -Elburtz -ELC -elcaja -Elche -elchee -Elcho -Elco -Elconin -eld -Elda -Elden -Eldena -Elder -elderberry -elderberries -elder-born -elder-brother -elderbrotherhood -elderbrotherish -elderbrotherly -elderbush -elderhood -elder-leaved -elderly -elderlies -elderliness -elderling -elderman -eldermen -eldern -Elderon -elders -eldership -elder-sister -eldersisterly -Eldersville -Elderton -elderwoman -elderwomen -elderwood -elderwort -eldest -eldest-born -eldfather -Eldin -elding -eldmother -ELDO -Eldon -Eldora -Eldorado -Eldoree -Eldoria -Eldred -Eldreda -Eldredge -Eldreeda -eldress -eldrich -Eldrid -Eldrida -Eldridge -eldritch -elds -Eldwen -Eldwin -Eldwon -Eldwun -Ele -Elea -Elean -Elean-eretrian -Eleanor -Eleanora -Eleanore -Eleatic -Eleaticism -Eleazar -elec -elecampane -elechi -elecive -elecives -elect -elect. -electability -electable -electant -electary -elected -electee -electees -electic -electicism -electing -election -electionary -electioneer -electioneered -electioneerer -electioneering -electioneers -elections -election's -elective -electively -electiveness -electives -electivism -electivity -electly -electo -elector -electoral -electorally -electorate -electorates -electorial -electors -elector's -electorship -electr- -Electra -electragy -electragist -electral -electralize -electre -electrepeter -electress -electret -electrets -electric -electrical -electricalize -electrically -electricalness -electrican -electricans -electric-drive -electric-heat -electric-heated -electrician -electricians -electricity -electricities -electricize -electric-lighted -electric-powered -electrics -Electrides -electriferous -electrify -electrifiable -electrification -electrifications -electrified -electrifier -electrifiers -electrifies -electrifying -electrine -electrion -Electryon -electrionic -electrizable -electrization -electrize -electrized -electrizer -electrizing -electro -electro- -electroacoustic -electroacoustical -electroacoustically -electroacoustics -electroaffinity -electroamalgamation -electroanalysis -electroanalytic -electroanalytical -electroanesthesia -electroballistic -electroballistically -electroballistician -electroballistics -electrobath -electrobiology -electro-biology -electrobiological -electrobiologically -electrobiologist -electrobioscopy -electroblasting -electrobrasser -electrobus -electrocapillary -electrocapillarity -electrocardiogram -electrocardiograms -electrocardiograph -electrocardiography -electrocardiographic -electrocardiographically -electrocardiographs -electrocatalysis -electrocatalytic -electrocataphoresis -electrocataphoretic -electrocautery -electrocauteries -electrocauterization -electroceramic -electrochemical -electrochemically -electrochemist -electrochemistry -electrochronograph -electrochronographic -electrochronometer -electrochronometric -electrocystoscope -electrocoagulation -electrocoating -electrocolloidal -electrocontractility -electroconvulsive -electrocorticogram -electrocratic -electroculture -electrocute -electrocuted -electrocutes -electrocuting -electrocution -electrocutional -electrocutioner -electrocutions -electrode -electrodeless -electrodentistry -electrodeposit -electrodepositable -electrodeposition -electrodepositor -electrodes -electrode's -electrodesiccate -electrodesiccation -electrodiagnoses -electrodiagnosis -electrodiagnostic -electrodiagnostically -electrodialyses -electrodialysis -electrodialitic -electrodialytic -electrodialitically -electrodialyze -electrodialyzer -electrodynamic -electrodynamical -electrodynamics -electrodynamism -electrodynamometer -electrodiplomatic -electrodispersive -electrodissolution -electroed -electroencephalogram -electroencephalograms -electroencephalograph -electroencephalography -electroencephalographic -electroencephalographical -electroencephalographically -electroencephalographs -electroendosmose -electroendosmosis -electroendosmotic -electroengrave -electroengraving -electroergometer -electroetching -electroethereal -electroextraction -electrofishing -electroform -electroforming -electrofuse -electrofused -electrofusion -electrogalvanic -electrogalvanization -electrogalvanize -electrogasdynamics -electrogenesis -electrogenetic -electrogenic -electrogild -electrogilding -electrogilt -electrogram -electrograph -electrography -electrographic -electrographite -electrograving -electroharmonic -electrohemostasis -electrohydraulic -electrohydraulically -electrohomeopathy -electrohorticulture -electroimpulse -electroindustrial -electroing -electroionic -electroirrigation -electrojet -electrokinematics -electrokinetic -electrokinetics -electroless -electrolier -electrolysation -electrolyse -electrolysed -electrolyser -electrolyses -electrolysing -electrolysis -electrolysises -electrolyte -electrolytes -electrolyte's -electrolithotrity -electrolytic -electrolytical -electrolytically -electrolyzability -electrolyzable -electrolyzation -electrolyze -electrolyzed -electrolyzer -electrolyzing -electrology -electrologic -electrological -electrologist -electrologists -electroluminescence -electroluminescent -electromagnet -electro-magnet -electromagnetally -electromagnetic -electromagnetical -electromagnetically -electromagnetics -electromagnetism -electromagnetist -electromagnetize -electromagnets -electromassage -electromechanical -electromechanically -electromechanics -electromedical -electromer -electromeric -electromerism -electrometallurgy -electrometallurgical -electrometallurgist -electrometeor -electrometer -electrometry -electrometric -electrometrical -electrometrically -electromyogram -electromyograph -electromyography -electromyographic -electromyographical -electromyographically -electromobile -electromobilism -electromotion -electromotiv -electromotive -electromotivity -electromotograph -electromotor -electromuscular -electron -electronarcosis -electronegative -electronegativity -electronervous -electroneutral -electroneutrality -electronic -electronically -electronics -electronography -electronographic -electrons -electron's -electronvolt -electron-volt -electrooculogram -electrooptic -electrooptical -electrooptically -electrooptics -electroori -electroosmosis -electro-osmosis -electroosmotic -electro-osmotic -electroosmotically -electro-osmotically -electrootiatrics -electropathy -electropathic -electropathology -electropercussive -electrophilic -electrophilically -electrophysicist -electrophysics -electrophysiology -electrophysiologic -electrophysiological -electrophysiologically -electrophysiologist -electrophobia -electrophone -electrophonic -electrophonically -electrophore -electrophorese -electrophoresed -electrophoreses -electrophoresing -electrophoresis -electrophoretic -electrophoretically -electrophoretogram -electrophori -electrophoric -Electrophoridae -electrophorus -electrophotography -electrophotographic -electrophotometer -electrophotometry -electrophotomicrography -electrophototherapy -electrophrenic -electropyrometer -electropism -electroplaque -electroplate -electroplated -electroplater -electroplates -electroplating -electroplax -electropneumatic -electropneumatically -electropoion -electropolar -electropolish -electropositive -electropotential -electropower -electropsychrometer -electropult -electropuncturation -electropuncture -electropuncturing -electroreceptive -electroreduction -electrorefine -electrorefining -electroresection -electroretinogram -electroretinograph -electroretinography -electroretinographic -electros -electroscission -electroscope -electroscopes -electroscopic -electrosensitive -electrosherardizing -electroshock -electroshocks -electrosynthesis -electrosynthetic -electrosynthetically -electrosmosis -electrostatic -electrostatical -electrostatically -electrostatics -electrosteel -electrostenolysis -electrostenolytic -electrostereotype -electrostriction -electrostrictive -electrosurgery -electrosurgeries -electrosurgical -electrosurgically -electrotactic -electrotautomerism -electrotaxis -electrotechnic -electrotechnical -electrotechnician -electrotechnics -electrotechnology -electrotechnologist -electrotelegraphy -electrotelegraphic -electrotelethermometer -electrotellurograph -electrotest -electrothanasia -electrothanatosis -electrotherapeutic -electrotherapeutical -electrotherapeutics -electrotherapeutist -electrotherapy -electrotherapies -electrotherapist -electrotheraputic -electrotheraputical -electrotheraputically -electrotheraputics -electrothermal -electrothermally -electrothermancy -electrothermic -electrothermics -electrothermometer -electrothermostat -electrothermostatic -electrothermotic -electrotype -electrotyped -electrotyper -electrotypes -electrotypy -electrotypic -electrotyping -electrotypist -electrotitration -electrotonic -electrotonicity -electrotonize -electrotonus -electrotrephine -electrotropic -electrotropism -electro-ultrafiltration -electrovalence -electrovalency -electrovalent -electrovalently -electrovection -electroviscous -electrovital -electrowin -electrowinning -electrum -electrums -elects -electuary -electuaries -eledoisin -eledone -Eleele -eleemosinar -eleemosynar -eleemosynary -eleemosynarily -eleemosynariness -Eleen -elegance -elegances -elegancy -elegancies -elegant -elegante -eleganter -elegantly -elegy -elegiac -elegiacal -elegiacally -elegiacs -elegiambic -elegiambus -elegiast -elegibility -elegies -elegious -elegise -elegised -elegises -elegising -elegist -elegists -elegit -elegits -elegize -elegized -elegizes -elegizing -Eleia -eleidin -elektra -Elektron -elelments -elem -elem. -eleme -element -elemental -elementalism -elementalist -elementalistic -elementalistically -elementality -elementalize -elementally -elementaloid -elementals -elementary -elementarily -elementariness -elementarism -elementarist -elementarity -elementate -elementish -elementoid -elements -element's -elemi -elemicin -elemin -elemis -elemol -elemong -Elena -elench -elenchi -elenchic -elenchical -elenchically -elenchize -elenchtic -elenchtical -elenchus -elenctic -elenctical -Elene -elenge -elengely -elengeness -Eleni -Elenor -Elenore -eleoblast -Eleocharis -eleolite -eleomargaric -eleometer -Eleonora -Eleonore -eleonorite -eleoplast -eleoptene -eleostearate -eleostearic -eleotrid -elepaio -Eleph -elephancy -elephant -elephanta -elephantiac -elephantiases -elephantiasic -elephantiasis -elephantic -elephanticide -Elephantidae -elephantine -elephantlike -elephantoid -elephantoidal -Elephantopus -elephantous -elephantry -elephants -elephant's -elephant's-ear -elephant's-foot -elephant's-foots -Elephas -Elephus -Elery -Eleroy -Elettaria -eleuin -Eleusine -Eleusinia -Eleusinian -Eleusinianism -Eleusinion -Eleusis -Eleut -Eleuthera -eleutherarch -Eleutheri -Eleutheria -Eleutherian -Eleutherios -eleutherism -Eleutherius -eleuthero- -Eleutherococcus -eleutherodactyl -Eleutherodactyli -Eleutherodactylus -eleutheromania -eleutheromaniac -eleutheromorph -eleutheropetalous -eleutherophyllous -eleutherophobia -eleutherosepalous -Eleutherozoa -eleutherozoan -elev -Eleva -elevable -elevate -elevated -elevatedly -elevatedness -elevates -elevating -elevatingly -elevation -elevational -elevations -elevato -elevator -elevatory -elevators -elevator's -eleve -eleven -elevener -elevenfold -eleven-oclock-lady -eleven-plus -elevens -elevenses -eleventeenth -eleventh -eleventh-hour -eleventhly -elevenths -elevon -elevons -Elevs -Elexa -ELF -elfdom -elfenfolk -Elfers -elf-god -elfhood -elfic -Elfie -elfin -elfins -elfin-tree -elfinwood -elfish -elfishly -elfishness -elfkin -elfland -elflike -elflock -elf-lock -elflocks -Elfont -Elfreda -Elfrida -Elfrieda -elfship -elf-shoot -elf-shot -Elfstan -elf-stricken -elf-struck -elf-taken -elfwife -elfwort -Elga -Elgan -Elgar -Elgenia -Elger -Elgin -Elgon -elhi -Eli -Ely -Elia -Eliades -Elian -Elianic -Elianora -Elianore -Elias -eliasite -Eliason -Eliasville -Eliath -Eliathan -Eliathas -elychnious -Elicia -elicit -elicitable -elicitate -elicitation -elicited -eliciting -elicitor -elicitory -elicitors -elicits -Elicius -Elida -Elidad -elide -elided -elides -elidible -eliding -elydoric -Elie -Eliezer -Eliga -eligenda -eligent -eligibility -eligibilities -eligible -eligibleness -eligibles -eligibly -Elihu -Elijah -Elik -Elymi -eliminability -eliminable -eliminand -eliminant -eliminate -eliminated -eliminates -eliminating -elimination -eliminations -eliminative -eliminator -eliminatory -eliminators -Elymus -Elyn -elinguate -elinguated -elinguating -elinguation -elingued -Elinor -Elinore -elint -elints -Elinvar -Eliot -Elyot -Eliott -Eliphalet -Eliphaz -eliquate -eliquated -eliquating -eliquation -eliquidate -Elyria -Elis -Elys -Elisa -Elisabet -Elisabeth -Elisabethville -Elisabetta -Elisavetgrad -Elisavetpol -Elysburg -Elise -Elyse -Elisee -Elysee -Eliseo -Eliseus -Elish -Elisha -Elysha -Elishah -Elisia -Elysia -Elysian -Elysiidae -elision -elisions -Elysium -Elison -elisor -Elissa -Elyssa -Elista -Elita -elite -elites -elitism -elitisms -elitist -elitists -elytr- -elytra -elytral -elytriferous -elytriform -elytrigerous -elytrin -elytrocele -elytroclasia -elytroid -elytron -elytroplastic -elytropolypus -elytroposis -elytroptosis -elytrorhagia -elytrorrhagia -elytrorrhaphy -elytrostenosis -elytrotomy -elytrous -elytrtra -elytrum -Elyutin -elix -elixate -elixation -elixed -elixir -elixirs -elixiviate -Eliz -Eliz. -Eliza -Elizabet -Elizabeth -Elizabethan -Elizabethanism -Elizabethanize -elizabethans -Elizabethton -Elizabethtown -Elizabethville -Elizaville -elk -Elka -Elkader -Elkanah -Elkdom -Elke -Elkesaite -elk-grass -Elkhart -Elkhorn -elkhound -elkhounds -Elkin -Elkins -Elkland -Elkmont -Elkmound -Elko -Elkoshite -Elkport -elks -elk's -elkslip -Elkton -Elkuma -Elkview -Elkville -Elkwood -Ell -Ella -Ellabell -ellachick -Elladine -ellagate -ellagic -ellagitannin -Ellamae -Ellamay -Ellamore -Ellan -Ellard -Ellary -Ellas -Ellasar -Ellata -Ellaville -ell-broad -Elldridge -ELLE -ellebore -elleck -Ellen -Ellenboro -Ellenburg -Ellendale -Ellene -ellenyard -Ellensburg -Ellenton -Ellenville -Ellenwood -Ellerbe -Ellerd -Ellerey -Ellery -Ellerian -Ellersick -Ellerslie -Ellett -Ellette -Ellettsville -ellfish -Ellga -Elli -Elly -Ellice -Ellick -Ellicott -Ellicottville -Ellie -Ellijay -El-lil -Ellin -Ellyn -elling -ellinge -Ellinger -Ellingston -Ellington -Ellynn -Ellinwood -Elliot -Elliott -Elliottsburg -Elliottville -ellipse -ellipses -ellipse's -ellipsis -ellipsograph -ellipsoid -ellipsoidal -ellipsoids -ellipsoid's -ellipsometer -ellipsometry -ellipsone -ellipsonic -elliptic -elliptical -elliptically -ellipticalness -ellipticity -elliptic-lanceolate -elliptic-leaved -elliptograph -elliptoid -Ellis -Ellisburg -Ellison -Ellissa -Elliston -Ellisville -Ellita -ell-long -Ellmyer -Ellon -ellops -Ellora -Ellord -Elloree -ells -Ellsinore -Ellston -Ellswerth -Ellsworth -ellwand -ell-wand -ell-wide -Ellwood -ELM -Elma -Elmajian -Elmaleh -Elman -Elmaton -Elmdale -Elmendorf -Elmer -Elmhall -Elmhurst -elmy -elmier -elmiest -Elmina -Elmira -elm-leaved -Elmmott -Elmo -Elmont -Elmonte -Elmora -Elmore -elms -Elmsford -Elmwood -Elna -Elnar -elne -Elnora -Elnore -ELO -Eloah -elocation -elocular -elocute -elocution -elocutionary -elocutioner -elocutionist -elocutionists -elocutionize -elocutions -elocutive -elod -Elodea -Elodeaceae -elodeas -Elodes -Elodia -Elodie -eloge -elogy -elogium -Elohim -Elohimic -Elohism -Elohist -Elohistic -Eloy -eloign -eloigned -eloigner -eloigners -eloigning -eloignment -eloigns -eloin -eloine -eloined -eloiner -eloiners -eloining -eloinment -eloins -Eloisa -Eloise -Eloyse -Elon -elong -elongate -elongated -elongates -elongating -elongation -elongations -elongative -elongato-conical -elongato-ovate -Elonite -Elonore -elope -eloped -elopement -elopements -eloper -elopers -elopes -Elopidae -eloping -elops -eloquence -eloquent -eloquential -eloquently -eloquentness -Elora -Elotherium -elotillo -ELP -elpasolite -Elpenor -elpidite -elrage -Elreath -elric -Elrica -elritch -Elrod -Elroy -elroquite -els -Elsa -Elsah -Elsan -Elsass -Elsass-Lothringen -Elsberry -Elsbeth -Elsdon -Else -elsehow -Elsey -Elsene -elses -Elset -Elsevier -elseways -elsewards -elsewhat -elsewhen -elsewhere -elsewheres -elsewhither -elsewise -elshin -Elsholtzia -Elsi -Elsy -Elsie -elsin -Elsinore -Elsmere -Elsmore -Elson -Elspet -Elspeth -Elstan -Elston -Elsworth -ELT -eltime -Elton -eltrot -eluant -eluants -Eluard -eluate -eluated -eluates -eluating -elucid -elucidate -elucidated -elucidates -elucidating -elucidation -elucidations -elucidative -elucidator -elucidatory -elucidators -eluctate -eluctation -elucubrate -elucubration -elude -eluded -eluder -eluders -eludes -eludible -eluding -eluent -eluents -Elul -Elum -elumbated -Elura -Elurd -elusion -elusions -elusive -elusively -elusiveness -elusivenesses -elusory -elusoriness -elute -eluted -elutes -eluting -elution -elutions -elutor -elutriate -elutriated -elutriating -elutriation -elutriator -eluvia -eluvial -eluviate -eluviated -eluviates -eluviating -eluviation -eluvies -eluvium -eluviums -eluvivia -eluxate -ELV -Elva -Elvah -elvan -elvanite -elvanitic -Elvaston -elve -elver -Elvera -Elverda -elvers -Elverson -Elverta -elves -elvet -Elvia -Elvie -Elvin -Elvyn -Elvina -Elvine -Elvira -Elvis -elvish -elvishly -Elvita -Elwaine -Elwee -Elwell -Elwin -Elwyn -Elwina -Elwira -Elwood -Elzevier -Elzevir -Elzevirian -EM -em- -'em -EMA -emacerate -emacerated -emaceration -emaciate -emaciated -emaciates -emaciating -emaciation -emaciations -EMACS -emaculate -Emad -emagram -EMAIL -emailed -emajagua -Emalee -Emalia -emamelware -emanant -emanate -emanated -emanates -emanating -emanation -emanational -emanationism -emanationist -emanations -emanatism -emanatist -emanatistic -emanativ -emanative -emanatively -emanator -emanatory -emanators -emancipatation -emancipatations -emancipate -emancipated -emancipates -emancipating -emancipation -emancipationist -emancipations -emancipatist -emancipative -emancipator -emancipatory -emancipators -emancipatress -emancipist -emandibulate -emane -emanent -emanium -Emanuel -Emanuela -Emanuele -emarcid -emarginate -emarginated -emarginately -emarginating -emargination -Emarginula -Emarie -emasculatation -emasculatations -emasculate -emasculated -emasculates -emasculating -emasculation -emasculations -emasculative -emasculator -emasculatory -emasculators -Emathion -embace -embacle -Embadomonas -embay -embayed -embaying -embayment -embain -embays -embale -emball -emballonurid -Emballonuridae -emballonurine -embalm -embalmed -embalmer -embalmers -embalming -embalmment -embalms -embank -embanked -embanking -embankment -embankments -embanks -embannered -embaphium -embar -embarcadero -embarcation -embarge -embargo -embargoed -embargoes -embargoing -embargoist -embargos -embark -embarkation -embarkations -embarked -embarking -embarkment -embarks -embarment -embarque -embarras -embarrased -embarrass -embarrassed -embarrassedly -embarrasses -embarrassing -embarrassingly -embarrassment -embarrassments -embarred -embarrel -embarren -embarricado -embarring -embars -embase -embassade -embassador -embassadress -embassage -embassy -embassiate -embassies -embassy's -embastardize -embastioned -embathe -embatholithic -embattle -embattled -embattlement -embattles -embattling -Embden -embeam -embed -embeddable -embedded -embedder -embedding -embedment -embeds -embeggar -Embelia -embelic -embelif -embelin -embellish -embellished -embellisher -embellishers -embellishes -embellishing -embellishment -embellishments -embellishment's -ember -embergeese -embergoose -Emberiza -emberizidae -Emberizinae -emberizine -embers -embetter -embezzle -embezzled -embezzlement -embezzlements -embezzler -embezzlers -embezzles -embezzling -embiid -Embiidae -Embiidina -embillow -embind -Embiodea -Embioptera -embiotocid -Embiotocidae -embiotocoid -embira -embitter -embittered -embitterer -embittering -embitterment -embitterments -embitters -Embla -embladder -emblanch -emblaze -emblazed -emblazer -emblazers -emblazes -emblazing -emblazon -emblazoned -emblazoner -emblazoning -emblazonment -emblazonments -emblazonry -emblazons -emblem -emblema -emblematic -emblematical -emblematically -emblematicalness -emblematicize -emblematise -emblematised -emblematising -emblematist -emblematize -emblematized -emblematizing -emblematology -emblemed -emblement -emblements -embleming -emblemish -emblemist -emblemize -emblemized -emblemizing -emblemology -emblems -emblic -embliss -embloom -emblossom -embody -embodied -embodier -embodiers -embodies -embodying -embodiment -embodiments -embodiment's -embog -embogue -emboil -emboite -emboitement -emboites -embol- -embolden -emboldened -emboldener -emboldening -emboldens -embole -embolectomy -embolectomies -embolemia -emboli -emboly -embolic -embolies -emboliform -embolimeal -embolism -embolismic -embolisms -embolismus -embolite -embolium -embolization -embolize -embolo -embololalia -embolomalerism -Embolomeri -embolomerism -embolomerous -embolomycotic -embolon -emboltement -embolum -embolus -embonpoint -emborder -embordered -embordering -emborders -emboscata -embosk -embosked -embosking -embosks -embosom -embosomed -embosoming -embosoms -emboss -embossable -embossage -embossed -embosser -embossers -embosses -embossing -embossman -embossmen -embossment -embossments -embost -embosture -embottle -embouchement -embouchment -embouchure -embouchures -embound -embourgeoisement -embow -embowed -embowel -emboweled -emboweler -emboweling -embowelled -emboweller -embowelling -embowelment -embowels -embower -embowered -embowering -embowerment -embowers -embowing -embowl -embowment -embows -embox -embrace -embraceable -embraceably -embraced -embracement -embraceor -embraceorr -embracer -embracery -embraceries -embracers -embraces -embracing -embracingly -embracingness -embracive -embraciveg -embraid -embrail -embrake -embranchment -embrangle -embrangled -embranglement -embrangling -embrase -embrasure -embrasured -embrasures -embrasuring -embrave -embrawn -embreach -embread -embreastment -embreathe -embreathement -embrectomy -embrew -Embry -embry- -Embrica -embryectomy -embryectomies -embright -embrighten -embryo -embryocardia -embryoctony -embryoctonic -embryoferous -embryogenesis -embryogenetic -embryogeny -embryogenic -embryogony -embryographer -embryography -embryographic -embryoid -embryoism -embryol -embryol. -embryology -embryologic -embryological -embryologically -embryologies -embryologist -embryologists -embryoma -embryomas -embryomata -embryon -embryon- -embryonal -embryonally -embryonary -embryonate -embryonated -embryony -embryonic -embryonically -embryoniferous -embryoniform -embryons -embryopathology -embryophagous -Embryophyta -embryophyte -embryophore -embryoplastic -embryos -embryo's -embryoscope -embryoscopic -embryotega -embryotegae -embryotic -embryotome -embryotomy -embryotomies -embryotroph -embryotrophe -embryotrophy -embryotrophic -embryous -embrittle -embrittled -embrittlement -embrittling -embryulci -embryulcia -embryulculci -embryulcus -embryulcuses -embroaden -embrocado -embrocate -embrocated -embrocates -embrocating -embrocation -embrocations -embroche -embroglio -embroglios -embroider -embroidered -embroiderer -embroiderers -embroideress -embroidery -embroideries -embroidering -embroiders -embroil -embroiled -embroiler -embroiling -embroilment -embroilments -embroils -embronze -embroscopic -embrothelled -embrowd -embrown -embrowned -embrowning -embrowns -embrue -embrued -embrues -embruing -embrute -embruted -embrutes -embruting -embubble -Embudo -embue -embuia -embulk -embull -embus -embush -embusy -embusk -embuskin -embusqu -embusque -embussed -embussing -EMC -emcee -emceed -emceeing -emcees -emceing -emcumbering -emda -Emden -eme -Emee -emeer -emeerate -emeerates -emeers -emeership -Emeigh -Emelda -Emelen -Emelia -Emelin -Emelina -Emeline -Emelyne -Emelita -Emelle -Emelun -emend -emendable -emendandum -emendate -emendated -emendately -emendates -emendating -emendation -emendations -emendator -emendatory -emended -emender -emenders -emendicate -emending -emends -emer -Emera -Emerado -Emerald -emerald-green -emeraldine -emeralds -emerald's -emerant -emeras -emeraude -emerge -emerged -emergence -emergences -emergency -emergencies -emergency's -emergent -emergently -emergentness -emergents -emergers -emerges -emerging -Emery -Emeric -Emerick -emeried -emeries -emerying -emeril -emerit -Emerita -emeritae -emerited -emeriti -emeritus -emerituti -Emeryville -emerize -emerized -emerizing -emerod -emerods -emeroid -emeroids -emerse -emersed -Emersen -emersion -emersions -Emerson -Emersonian -Emersonianism -emes -Emesa -Eme-sal -emeses -Emesidae -emesis -EMet -emetatrophia -emetia -emetic -emetical -emetically -emetics -emetin -emetine -emetines -emetins -emetocathartic -emeto-cathartic -emetology -emetomorphine -emetophobia -emeu -emeus -emeute -emeutes -EMF -emforth -emgalla -emhpasizing -EMI -emia -emic -emicant -emicate -emication -emiction -emictory -emyd -emyde -Emydea -emydes -emydian -Emydidae -Emydinae -Emydosauria -emydosaurian -emyds -Emie -emigate -emigated -emigates -emigating -emigr -emigrant -emigrants -emigrant's -emigrate -emigrated -emigrates -emigrating -emigration -emigrational -emigrationist -emigrations -emigrative -emigrator -emigratory -emigre -emigree -emigres -Emigsville -Emil -Emile -Emyle -Emilee -Emylee -Emili -Emily -Emilia -Emiliano -Emilia-Romagna -Emilie -Emiline -Emilio -Emim -Emina -Eminence -eminences -eminency -eminencies -eminent -eminently -Eminescu -Emington -emir -emirate -emirates -emirs -emirship -Emys -Emiscan -Emison -emissary -emissaria -emissaries -emissaryship -emissarium -emissi -emissile -emission -emissions -emissitious -emissive -emissivity -emissory -emit -Emitron -emits -emittance -emitted -emittent -emitter -emitters -emitting -EML -Emlen -Emlenton -Emlin -Emlyn -Emlynn -Emlynne -Emm -Emma -Emmalee -Emmalena -Emmalyn -Emmaline -Emmalynn -Emmalynne -emmantle -Emmanuel -emmarble -emmarbled -emmarbling -emmarvel -Emmaus -Emmey -Emmeleen -emmeleia -Emmelene -Emmelina -Emmeline -Emmen -emmenagogic -emmenagogue -emmenia -emmenic -emmeniopathy -emmenology -emmensite -Emmental -Emmentaler -Emmenthal -Emmenthaler -Emmer -Emmeram -emmergoose -Emmery -Emmerich -Emmerie -emmers -Emmet -emmetrope -emmetropy -emmetropia -emmetropic -emmetropism -emmets -Emmetsburg -Emmett -emmew -Emmi -Emmy -Emmie -Emmye -Emmies -Emmylou -Emmit -Emmitsburg -Emmonak -Emmons -Emmott -emmove -Emmuela -emodin -emodins -Emogene -emollescence -emolliate -emollience -emollient -emollients -emollition -emoloa -emolument -emolumental -emolumentary -emoluments -emong -emony -Emory -emote -emoted -emoter -emoters -emotes -emoting -emotiometabolic -emotiomotor -emotiomuscular -emotion -emotionable -emotional -emotionalise -emotionalised -emotionalising -emotionalism -emotionalist -emotionalistic -emotionality -emotionalization -emotionalize -emotionalized -emotionalizing -emotionally -emotioned -emotionist -emotionize -emotionless -emotionlessly -emotionlessness -emotions -emotion's -emotiovascular -emotive -emotively -emotiveness -emotivism -emotivity -emove -EMP -Emp. -empacket -empaestic -empair -empaistic -empale -empaled -empalement -empaler -empalers -empales -empaling -empall -empanada -empanel -empaneled -empaneling -empanelled -empanelling -empanelment -empanels -empannel -empanoply -empaper -emparadise -emparchment -empark -emparl -empasm -empasma -empassion -empathetic -empathetically -empathy -empathic -empathically -empathies -empathize -empathized -empathizes -empathizing -empatron -empearl -Empedoclean -Empedocles -empeine -empeirema -empemata -empennage -empennages -Empeo -empeople -empeopled -empeoplement -emperess -empery -emperies -emperil -emperish -emperize -emperor -emperors -emperor's -emperorship -empest -empestic -Empetraceae -empetraceous -empetrous -Empetrum -empexa -emphase -emphases -emphasis -emphasise -emphasised -emphasising -emphasize -emphasized -emphasizes -emphasizing -emphatic -emphatical -emphatically -emphaticalness -emphemeralness -emphysema -emphysemas -emphysematous -emphyteusis -emphyteuta -emphyteutic -emphlysis -emphractic -emphraxis -emphrensy -empicture -Empididae -Empidonax -empiecement -empyema -empyemas -empyemata -empyemic -empierce -empiercement -empyesis -empight -empyocele -Empire -empyreal -empyrean -empyreans -empire-builder -empirema -empires -empire's -empyreum -empyreuma -empyreumata -empyreumatic -empyreumatical -empyreumatize -empiry -empiric -empirical -empyrical -empirically -empiricalness -empiricism -empiricist -empiricists -empiricist's -empirics -Empirin -empiriocritcism -empiriocritical -empiriological -empirism -empiristic -empyromancy -empyrosis -emplace -emplaced -emplacement -emplacements -emplaces -emplacing -emplane -emplaned -emplanement -emplanes -emplaning -emplaster -emplastic -emplastra -emplastration -emplastrum -emplead -emplectic -emplection -emplectite -emplecton -empleomania -employ -employability -employable -employe -employed -employee -employees -employee's -employer -employer-owned -employers -employer's -employes -employing -employless -employment -employments -employment's -employs -emplore -emplume -emplunge -empocket -empodia -empodium -empoison -empoisoned -empoisoner -empoisoning -empoisonment -empoisons -empolder -emporetic -emporeutic -empory -Emporia -emporial -emporiria -empoririums -Emporium -emporiums -emporte -emportment -empover -empoverish -empower -empowered -empowering -empowerment -empowers -emprent -empresa -empresario -EMPRESS -empresse -empressement -empressements -empresses -empressment -emprime -emprint -emprise -emprises -emprison -emprize -emprizes -emprosthotonic -emprosthotonos -emprosthotonus -Empson -empt -empty -emptiable -empty-armed -empty-barreled -empty-bellied -emptied -emptier -emptiers -empties -emptiest -empty-fisted -empty-handed -empty-handedness -empty-headed -empty-headedness -emptyhearted -emptying -emptily -empty-looking -empty-minded -empty-mindedness -empty-mouthed -emptiness -emptinesses -emptings -empty-noddled -emptins -emptio -emption -emptional -empty-paneled -empty-pated -emptysis -empty-skulled -empty-stomached -empty-vaulted -emptive -empty-voiced -emptor -emptores -emptory -empurple -empurpled -empurples -empurpling -Empusa -Empusae -empuzzle -EMR -emraud -Emrich -emrode -EMS -Emsmus -Emsworth -EMT -EMU -emulable -emulant -emulate -emulated -emulates -emulating -emulation -emulations -emulative -emulatively -emulator -emulatory -emulators -emulator's -emulatress -emule -emulge -emulgence -emulgens -emulgent -emulous -emulously -emulousness -emuls -emulsibility -emulsible -emulsic -emulsify -emulsifiability -emulsifiable -emulsification -emulsifications -emulsified -emulsifier -emulsifiers -emulsifies -emulsifying -emulsin -emulsion -emulsionize -emulsions -emulsive -emulsoid -emulsoidal -emulsoids -emulsor -emunct -emunctory -emunctories -emundation -emunge -emus -emuscation -emusify -emusified -emusifies -emusifying -emusive -emu-wren -en -en- -Ena -enable -enabled -enablement -enabler -enablers -enables -enabling -enact -enactable -enacted -enacting -enaction -enactive -enactment -enactments -enactor -enactory -enactors -enacts -enacture -enaena -enage -Enajim -Enalda -enalid -Enaliornis -enaliosaur -Enaliosauria -enaliosaurian -enalyron -enalite -enallachrome -enallage -enaluron -Enalus -enam -enamber -enambush -enamdar -enamel -enameled -enameler -enamelers -enameling -enamelist -enamellar -enamelled -enameller -enamellers -enamelless -enamelling -enamellist -enameloma -enamels -enamelware -enamelwork -enami -enamine -enamines -enamor -enamorado -enamorate -enamorato -enamored -enamoredness -enamoring -enamorment -enamors -enamour -enamoured -enamouredness -enamouring -enamourment -enamours -enanguish -enanthem -enanthema -enanthematous -enanthesis -enantiobiosis -enantioblastic -enantioblastous -enantiomer -enantiomeric -enantiomeride -enantiomorph -enantiomorphy -enantiomorphic -enantiomorphism -enantiomorphous -enantiomorphously -enantiopathy -enantiopathia -enantiopathic -enantioses -enantiosis -enantiotropy -enantiotropic -enantobiosis -enapt -enarbor -enarbour -enarch -enarched -Enarete -enargite -enarm -enarme -enarration -enarthrodia -enarthrodial -enarthroses -enarthrosis -enascent -enatant -enate -enates -enatic -enation -enations -enaunter -enb- -enbaissing -enbibe -enbloc -enbranglement -enbrave -enbusshe -enc -enc. -encadre -encaenia -encage -encaged -encages -encaging -encake -encalendar -encallow -encamp -encamped -encamping -Encampment -encampments -encamps -encanker -encanthis -encapsulate -encapsulated -encapsulates -encapsulating -encapsulation -encapsulations -encapsule -encapsuled -encapsules -encapsuling -encaptivate -encaptive -encardion -encarditis -encarnadine -encarnalise -encarnalised -encarnalising -encarnalize -encarnalized -encarnalizing -encarpa -encarpi -encarpium -encarpus -encarpuspi -encase -encased -encasement -encases -encash -encashable -encashed -encashes -encashing -encashment -encasing -encasserole -encastage -encastered -encastre -encastrement -encatarrhaphy -encauma -encaustes -encaustic -encaustically -encave -ence -encefalon -enceint -enceinte -enceintes -Enceladus -Encelia -encell -encense -encenter -encephal- -encephala -encephalalgia -Encephalartos -encephalasthenia -encephalic -encephalin -encephalitic -encephalitides -encephalitis -encephalitogenic -encephalo- -encephalocele -encephalocoele -encephalodialysis -encephalogram -encephalograph -encephalography -encephalographic -encephalographically -encephaloid -encephalola -encephalolith -encephalology -encephaloma -encephalomalacia -encephalomalacosis -encephalomalaxis -encephalomas -encephalomata -encephalomeningitis -encephalomeningocele -encephalomere -encephalomeric -encephalometer -encephalometric -encephalomyelitic -encephalomyelitis -encephalomyelopathy -encephalomyocarditis -encephalon -encephalonarcosis -encephalopathy -encephalopathia -encephalopathic -encephalophyma -encephalopyosis -encephalopsychesis -encephalorrhagia -encephalos -encephalosclerosis -encephaloscope -encephaloscopy -encephalosepsis -encephalosis -encephalospinal -encephalothlipsis -encephalotome -encephalotomy -encephalotomies -encephalous -enchafe -enchain -enchained -enchainement -enchainements -enchaining -enchainment -enchainments -enchains -enchair -enchalice -enchancement -enchannel -enchant -enchanted -enchanter -enchantery -enchanters -enchanting -enchantingly -enchantingness -enchantment -enchantments -enchantress -enchantresses -enchants -encharge -encharged -encharging -encharm -encharnel -enchase -enchased -enchaser -enchasers -enchases -enchasing -enchasten -encheason -encheat -encheck -encheer -encheiria -Enchelycephali -enchequer -encheson -enchesoun -enchest -enchilada -enchiladas -enchylema -enchylematous -enchyma -enchymatous -enchiridia -enchiridion -enchiridions -enchiriridia -enchisel -enchytrae -enchytraeid -Enchytraeidae -Enchytraeus -Enchodontid -Enchodontidae -Enchodontoid -Enchodus -enchondroma -enchondromas -enchondromata -enchondromatous -enchondrosis -enchorial -enchoric -enchronicle -enchurch -ency -ency. -encia -encyc -encycl -encyclic -encyclical -encyclicals -encyclics -encyclopaedia -encyclopaediac -encyclopaedial -encyclopaedian -encyclopaedias -encyclopaedic -encyclopaedical -encyclopaedically -encyclopaedism -encyclopaedist -encyclopaedize -encyclopedia -encyclopediac -encyclopediacal -encyclopedial -encyclopedian -encyclopedias -encyclopedia's -encyclopediast -encyclopedic -encyclopedical -encyclopedically -encyclopedism -encyclopedist -encyclopedize -encydlopaedic -enciente -Encina -Encinal -encinas -encincture -encinctured -encincturing -encinder -encinillo -Encinitas -Encino -encipher -enciphered -encipherer -enciphering -encipherment -encipherments -enciphers -encircle -encircled -encirclement -encirclements -encircler -encircles -encircling -encyrtid -Encyrtidae -encist -encyst -encystation -encysted -encysting -encystment -encystments -encysts -encitadel -Encke -encl -encl. -enclaret -enclasp -enclasped -enclasping -enclasps -enclave -enclaved -enclavement -enclaves -enclaving -enclear -enclisis -enclitic -enclitical -enclitically -enclitics -encloak -enclog -encloister -enclosable -enclose -enclosed -encloser -enclosers -encloses -enclosing -enclosure -enclosures -enclosure's -enclothe -encloud -encoach -encode -encoded -encodement -encoder -encoders -encodes -encoding -encodings -encoffin -encoffinment -encoignure -encoignures -encoil -encolden -encollar -encolor -encolour -encolpia -encolpion -encolumn -encolure -encomendero -encomy -encomia -encomiast -encomiastic -encomiastical -encomiastically -encomic -encomienda -encomiendas -encomimia -encomimiums -encomiologic -encomium -encomiumia -encomiums -encommon -encompany -encompass -encompassed -encompasser -encompasses -encompassing -encompassment -encoop -encopreses -encopresis -encorbellment -encorbelment -encore -encored -encores -encoring -encoronal -encoronate -encoronet -encorpore -encounter -encounterable -encountered -encounterer -encounterers -encountering -encounters -encourage -encouraged -encouragement -encouragements -encourager -encouragers -encourages -encouraging -encouragingly -encover -encowl -encraal -encradle -encranial -Encrata -encraty -Encratia -Encratic -Encratis -Encratism -Encratite -encrease -encreel -encrimson -encrinal -encrinic -Encrinidae -encrinital -encrinite -encrinitic -encrinitical -encrinoid -Encrinoidea -Encrinus -encrypt -encrypted -encrypting -encryption -encryptions -encrypts -encrisp -encroach -encroached -encroacher -encroaches -encroaching -encroachingly -encroachment -encroachments -encrotchet -encrown -encrownment -encrust -encrustant -encrustation -encrusted -encrusting -encrustment -encrusts -encuirassed -enculturate -enculturated -enculturating -enculturation -enculturative -encumber -encumberance -encumberances -encumbered -encumberer -encumbering -encumberingly -encumberment -encumbers -encumbrance -encumbrancer -encumbrances -encumbrous -encup -encurl -encurtain -encushion -end -end- -endable -end-all -endamage -endamageable -endamaged -endamagement -endamages -endamaging -endamask -endameba -endamebae -endamebas -endamebiasis -endamebic -endamnify -Endamoeba -endamoebae -endamoebas -endamoebiasis -endamoebic -Endamoebidae -endangeitis -endanger -endangered -endangerer -endangering -endangerment -endangerments -endangers -endangiitis -endangitis -endangium -endaortic -endaortitis -endarch -endarchy -endarchies -endark -endarterectomy -endarteria -endarterial -endarteritis -endarterium -endarteteria -endaseh -endaspidean -endaze -endball -end-blown -endboard -endbrain -endbrains -enddamage -enddamaged -enddamaging -ende -endear -endearance -endeared -endearedly -endearedness -endearing -endearingly -endearingness -endearment -endearments -endears -Endeavor -endeavored -endeavorer -endeavoring -endeavors -endeavour -endeavoured -endeavourer -endeavouring -endebt -endeca- -endecha -Endecott -ended -endeictic -endeign -Endeis -endellionite -endemial -endemic -endemical -endemically -endemicity -endemics -endemiology -endemiological -endemism -endemisms -endenization -endenize -endenizen -endent -Ender -endere -endergonic -Enderlin -endermatic -endermic -endermically -enderon -ender-on -enderonic -Enders -ender-up -endevil -endew -endexine -endexines -endfile -endgame -endgames -endgate -end-grain -endhand -endia -endiablee -endiadem -endiaper -Endicott -endict -endyma -endymal -endimanche -Endymion -ending -endings -endysis -endite -endited -endites -enditing -endive -endives -endjunk -endleaf -endleaves -endless -endlessly -endlessness -endlichite -endlong -end-match -endmatcher -end-measure -endmost -endnote -endnotes -Endo -endo- -endoabdominal -endoangiitis -endoaortitis -endoappendicitis -endoarteritis -endoauscultation -endobatholithic -endobiotic -endoblast -endoblastic -endobronchial -endobronchially -endobronchitis -endocannibalism -endocardia -endocardiac -endocardial -endocarditic -endocarditis -endocardium -endocarp -endocarpal -endocarpic -endocarpoid -endocarps -endocast -endocellular -endocentric -Endoceras -Endoceratidae -endoceratite -endoceratitic -endocervical -endocervicitis -endochylous -endochondral -endochorion -endochorionic -endochrome -endocycle -endocyclic -endocyemate -endocyst -endocystitis -endocytic -endocytosis -endocytotic -endoclinal -endocline -endocoelar -endocoele -endocoeliac -endocolitis -endocolpitis -endocondensation -endocone -endoconidia -endoconidium -endocorpuscular -endocortex -endocrania -endocranial -endocranium -endocrin -endocrinal -endocrine -endocrines -endocrinic -endocrinism -endocrinology -endocrinologic -endocrinological -endocrinologies -endocrinologist -endocrinologists -endocrinopath -endocrinopathy -endocrinopathic -endocrinotherapy -endocrinous -endocritic -endoderm -endodermal -endodermic -endodermis -endoderms -endodynamomorphic -endodontia -endodontic -endodontically -endodontics -endodontist -endodontium -endodontology -endodontologist -endoenteritis -endoenzyme -endoergic -endoerythrocytic -endoesophagitis -endofaradism -endogalvanism -endogamy -endogamic -endogamies -endogamous -endogastric -endogastrically -endogastritis -endogen -Endogenae -endogenesis -endogenetic -endogeny -endogenic -endogenicity -endogenies -endogenous -endogenously -endogens -endoglobular -endognath -endognathal -endognathion -endogonidium -endointoxication -endokaryogamy -endolabyrinthitis -endolaryngeal -endolemma -endolymph -endolymphangial -endolymphatic -endolymphic -endolysin -endolithic -endolumbar -endomastoiditis -endome -endomesoderm -endometry -endometria -endometrial -endometriosis -endometritis -endometrium -Endomyces -Endomycetaceae -endomictic -endomysial -endomysium -endomitosis -endomitotic -endomixis -endomorph -endomorphy -endomorphic -endomorphism -endoneurial -endoneurium -endonuclear -endonuclease -endonucleolus -endoparasite -endoparasitic -Endoparasitica -endoparasitism -endopathic -endopelvic -endopeptidase -endopericarditis -endoperidial -endoperidium -endoperitonitis -endophagy -endophagous -endophasia -endophasic -Endophyllaceae -endophyllous -Endophyllum -endophytal -endophyte -endophytic -endophytically -endophytous -endophlebitis -endophragm -endophragmal -endoplasm -endoplasma -endoplasmic -endoplast -endoplastron -endoplastular -endoplastule -endopleura -endopleural -endopleurite -endopleuritic -endopod -endopodite -endopoditic -endopods -endopolyploid -endopolyploidy -endoproct -Endoprocta -endoproctous -endopsychic -Endopterygota -endopterygote -endopterygotic -endopterygotism -endopterygotous -Endor -Endora -endorachis -endoradiosonde -endoral -endore -endorhinitis -endorphin -endorsable -endorsation -endorse -endorsed -endorsee -endorsees -endorsement -endorsements -endorser -endorsers -endorses -endorsing -endorsingly -endorsor -endorsors -endosalpingitis -endosarc -endosarcode -endosarcous -endosarcs -endosclerite -endoscope -endoscopes -endoscopy -endoscopic -endoscopically -endoscopies -endoscopist -endosecretory -endosepsis -endosymbiosis -endosiphon -endosiphonal -endosiphonate -endosiphuncle -endoskeletal -endoskeleton -endoskeletons -endosmic -endosmometer -endosmometric -endosmos -endosmose -endosmoses -endosmosic -endosmosis -endosmotic -endosmotically -endosome -endosomes -endosperm -endospermic -endospermous -endospore -endosporia -endosporic -endosporium -endosporous -endosporously -endoss -endostea -endosteal -endosteally -endosteitis -endosteoma -endosteomas -endosteomata -endosternite -endosternum -endosteum -endostylar -endostyle -endostylic -endostitis -endostoma -endostomata -endostome -endostosis -endostraca -endostracal -endostracum -endosulfan -endotheca -endothecal -endothecate -endothecia -endothecial -endothecium -endotheli- -endothelia -endothelial -endothelioblastoma -endotheliocyte -endothelioid -endotheliolysin -endotheliolytic -endothelioma -endotheliomas -endotheliomata -endotheliomyoma -endotheliomyxoma -endotheliotoxin -endotheliulia -endothelium -endotheloid -endotherm -endothermal -endothermy -endothermic -endothermically -endothermism -endothermous -Endothia -endothys -endothoracic -endothorax -Endothrix -endotys -endotoxic -endotoxin -endotoxoid -endotracheal -endotracheitis -endotrachelitis -Endotrophi -endotrophic -endotropic -endoubt -endoute -endovaccination -endovasculitis -endovenous -endover -endow -endowed -endower -endowers -endowing -endowment -endowments -endowment's -endows -endozoa -endozoic -endpaper -endpapers -endpiece -endplay -endplate -endplates -endpleasure -endpoint -endpoints -end-rack -Endres -endrin -endrins -Endromididae -Endromis -endrudge -endrumpf -ends -endseal -endshake -endsheet -endship -end-shrink -end-stopped -endsweep -end-to-end -endue -endued -enduement -endues -enduing -endungeon -endura -endurability -endurable -endurableness -endurably -endurance -endurances -endurant -endure -endured -endurer -endures -enduring -enduringly -enduringness -enduro -enduros -endways -end-ways -endwise -ene -ENEA -Eneas -enecate -eneclann -ened -eneid -enema -enemas -enema's -enemata -enemy -enemied -enemies -enemying -enemylike -enemy's -enemyship -Enenstein -enent -Eneolithic -enepidermic -energeia -energesis -energetic -energetical -energetically -energeticalness -energeticist -energeticness -energetics -energetistic -energy -energiatye -energic -energical -energico -energy-consuming -energid -energids -energies -energy-producing -energise -energised -energiser -energises -energising -energism -energist -energistic -energize -energized -energizer -energizers -energizes -energizing -energumen -energumenon -enervate -enervated -enervates -enervating -enervation -enervations -enervative -enervator -enervators -enerve -enervous -Enesco -Enescu -ENET -enetophobia -eneuch -eneugh -enew -Enewetak -enface -enfaced -enfacement -enfaces -enfacing -enfamish -enfamous -enfant -enfants -enfarce -enfasten -enfatico -enfavor -enfeature -enfect -enfeeble -enfeebled -enfeeblement -enfeeblements -enfeebler -enfeebles -enfeebling -enfeeblish -enfelon -enfeoff -enfeoffed -enfeoffing -enfeoffment -enfeoffs -enfester -enfetter -enfettered -enfettering -enfetters -enfever -enfevered -enfevering -enfevers -ENFIA -enfief -Enfield -enfierce -enfigure -enfilade -enfiladed -enfilades -enfilading -enfile -enfiled -enfin -enfire -enfirm -enflagellate -enflagellation -enflame -enflamed -enflames -enflaming -enflesh -enfleurage -enflower -enflowered -enflowering -enfoeffment -enfoil -enfold -enfolded -enfolden -enfolder -enfolders -enfolding -enfoldings -enfoldment -enfolds -enfollow -enfonce -enfonced -enfoncee -enforce -enforceability -enforceable -enforced -enforcedly -enforcement -enforcements -enforcer -enforcers -enforces -enforcibility -enforcible -enforcing -enforcingly -enforcive -enforcively -enforest -enfork -enform -enfort -enforth -enfortune -enfoul -enfoulder -enfrai -enframe -enframed -enframement -enframes -enframing -enfranch -enfranchisable -enfranchise -enfranchised -enfranchisement -enfranchisements -enfranchiser -enfranchises -enfranchising -enfree -enfrenzy -enfroward -enfuddle -enfume -enfurrow -Eng -Eng. -Engadine -engage -engaged -engagedly -engagedness -engagee -engagement -engagements -engagement's -engager -engagers -engages -engaging -engagingly -engagingness -engallant -engaol -engarb -engarble -engarde -engarland -engarment -engarrison -engastrimyth -engastrimythic -engaud -engaze -Engdahl -Engeddi -Engedi -Engedus -Engel -Engelbert -Engelberta -Engelhard -Engelhart -engelmann -engelmanni -Engelmannia -Engels -engem -Engen -engender -engendered -engenderer -engendering -engenderment -engenders -engendrure -engendure -Engenia -engerminate -enghle -enghosted -Engiish -engild -engilded -engilding -engilds -engin -engin. -engine -engined -engine-driven -engineer -engineered -engineery -engineering -engineeringly -engineerings -engineers -engineer's -engineership -enginehouse -engineless -enginelike -engineman -enginemen -enginery -engineries -engines -engine's -engine-sized -engine-sizer -engine-turned -engine-turner -engining -enginous -engird -engirded -engirding -engirdle -engirdled -engirdles -engirdling -engirds -engirt -engiscope -engyscope -engysseismology -Engystomatidae -engjateigur -engl -englacial -englacially -englad -engladden -England -Englander -englanders -englante -Engle -Englebert -engleim -Engleman -Engler -Englerophoenix -Englewood -Englify -Englifier -englyn -englyns -Englis -English -Englishable -English-born -English-bred -English-built -englished -Englisher -englishes -English-hearted -Englishhood -englishing -Englishism -Englishize -Englishly -English-made -Englishman -English-manned -Englishmen -English-minded -Englishness -Englishry -English-rigged -English-setter -English-speaking -Englishtown -Englishwoman -Englishwomen -englobe -englobed -englobement -englobing -engloom -englory -englue -englut -englute -engluts -englutted -englutting -engnessang -engobe -engold -engolden -engore -engorge -engorged -engorgement -engorges -engorging -engoue -engouee -engouement -engouled -engoument -engr -engr. -engrace -engraced -Engracia -engracing -engraff -engraffed -engraffing -engraft -engraftation -engrafted -engrafter -engrafting -engraftment -engrafts -engrail -engrailed -engrailing -engrailment -engrails -engrain -engrained -engrainedly -engrainer -engraining -engrains -engram -engramma -engrammatic -engramme -engrammes -engrammic -engrams -engrandize -engrandizement -engraphy -engraphia -engraphic -engraphically -engrapple -engrasp -Engraulidae -Engraulis -engrave -engraved -engravement -engraven -engraver -engravers -engraves -engraving -engravings -engreaten -engreen -engrege -engregge -engrid -engrieve -engroove -engross -engrossed -engrossedly -engrosser -engrossers -engrosses -engrossing -engrossingly -engrossingness -engrossment -engs -enguard -Engud -engulf -engulfed -engulfing -engulfment -engulfs -Engvall -enhaemospore -enhallow -enhalo -enhaloed -enhaloes -enhaloing -enhalos -enhamper -enhance -enhanced -enhancement -enhancements -enhancement's -enhancer -enhancers -enhances -enhancing -enhancive -enhappy -enharbor -enharbour -enharden -enhardy -enharmonic -enharmonical -enharmonically -enhat -enhaulse -enhaunt -enhazard -enhearse -enheart -enhearten -enheaven -enhedge -enhelm -enhemospore -enherit -enheritage -enheritance -Enhydra -Enhydrinae -Enhydris -enhydrite -enhydritic -enhydros -enhydrous -enhypostasia -enhypostasis -enhypostatic -enhypostatize -enhorror -enhort -enhuile -enhunger -enhungered -enhusk -ENIAC -Enyalius -Enicuridae -Enid -Enyedy -Enyeus -Enif -enigma -enigmas -enigmata -enigmatic -enigmatical -enigmatically -enigmaticalness -enigmatist -enigmatization -enigmatize -enigmatized -enigmatizing -enigmato- -enigmatographer -enigmatography -enigmatology -enigua -Enyo -Eniopeus -enisle -enisled -enisles -enisling -Eniwetok -enjail -enjamb -enjambed -enjambement -enjambements -enjambment -enjambments -enjelly -enjeopard -enjeopardy -enjewel -enjoy -enjoyable -enjoyableness -enjoyably -enjoyed -enjoyer -enjoyers -enjoying -enjoyingly -enjoyment -enjoyments -enjoin -enjoinder -enjoinders -enjoined -enjoiner -enjoiners -enjoining -enjoinment -enjoins -enjoys -Enka -enkennel -enkerchief -enkernel -Enki -Enkidu -Enkimdu -enkindle -enkindled -enkindler -enkindles -enkindling -enkolpia -enkolpion -enkraal -enl -enl. -enlace -enlaced -enlacement -enlaces -enlacing -enlay -enlard -enlarge -enlargeable -enlargeableness -enlarged -enlargedly -enlargedness -enlargement -enlargements -enlargement's -enlarger -enlargers -enlarges -enlarging -enlargingly -enlaurel -enleaf -enleague -enleagued -enleen -enlength -enlevement -enlief -enlife -enlight -enlighten -enlightened -enlightenedly -enlightenedness -enlightener -enlighteners -enlightening -enlighteningly -Enlightenment -enlightenments -enlightens -Enlil -En-lil -enlimn -enlink -enlinked -enlinking -enlinkment -enlist -enlisted -enlistee -enlistees -enlister -enlisters -enlisting -enlistment -enlistments -enlists -enlive -enliven -enlivened -enlivener -enlivening -enliveningly -enlivenment -enlivenments -enlivens -enlock -enlodge -enlodgement -Enloe -enlumine -enlure -enlute -enmagazine -enmanche -enmarble -enmarbled -enmarbling -enmask -enmass -enmesh -enmeshed -enmeshes -enmeshing -enmeshment -enmeshments -enmew -enmist -enmity -enmities -enmoss -enmove -enmuffle -ennage -enneacontahedral -enneacontahedron -ennead -enneadianome -enneadic -enneads -enneaeteric -ennea-eteric -enneagynous -enneagon -enneagonal -enneagons -enneahedra -enneahedral -enneahedria -enneahedron -enneahedrons -enneandrian -enneandrous -enneapetalous -enneaphyllous -enneasemic -enneasepalous -enneasyllabic -enneaspermous -enneastylar -enneastyle -enneastylos -enneateric -enneatic -enneatical -ennedra -ennerve -ennew -ennia -Ennice -enniche -Enning -Ennis -Enniskillen -Ennius -ennoble -ennobled -ennoblement -ennoblements -ennobler -ennoblers -ennobles -ennobling -ennoblingly -ennoblment -ennoy -ennoic -ennomic -Ennomus -Ennosigaeus -ennui -ennuyant -ennuyante -ennuye -ennuied -ennuyee -ennuying -ennuis -Eno -Enoch -Enochic -Enochs -enocyte -enodal -enodally -enodate -enodation -enode -enoil -enoint -enol -Enola -enolase -enolases -enolate -enolic -enolizable -enolization -enolize -enolized -enolizing -enology -enological -enologies -enologist -enols -enomania -enomaniac -enomotarch -enomoty -Enon -Enone -enophthalmos -enophthalmus -Enopla -enoplan -enoplion -enoptromancy -Enoree -enorganic -enorm -enormious -enormity -enormities -enormous -enormously -enormousness -enormousnesses -enorn -enorthotrope -Enos -enosis -enosises -enosist -enostosis -enough -enoughs -enounce -enounced -enouncement -enounces -enouncing -Enovid -enow -enows -enp- -enphytotic -enpia -enplane -enplaned -enplanement -enplanes -enplaning -enquarter -enquere -enqueue -enqueued -enqueues -enquicken -enquire -enquired -enquirer -enquires -enquiry -enquiries -enquiring -enrace -enrage -enraged -enragedly -enragedness -enragement -enrages -enraging -enray -enrail -enramada -enrange -enrank -enrapt -enrapted -enrapting -enrapts -enrapture -enraptured -enrapturedly -enrapturer -enraptures -enrapturing -enravish -enravished -enravishes -enravishing -enravishingly -enravishment -enregiment -enregister -enregistered -enregistering -enregistration -enregistry -enrheum -enrib -Enrica -enrich -enriched -enrichener -enricher -enrichers -enriches -Enrichetta -enriching -enrichingly -enrichment -enrichments -Enrico -enridged -enright -Enrika -enring -enringed -enringing -enripen -Enrique -Enriqueta -enrive -enrobe -enrobed -enrobement -enrober -enrobers -enrobes -enrobing -enrockment -enrol -enroll -enrolle -enrolled -enrollee -enrollees -enroller -enrollers -enrolles -enrolling -enrollment -enrollments -enrollment's -enrolls -enrolment -enrols -enroot -enrooted -enrooting -enroots -enrough -enround -enruin -enrut -ENS -Ens. -ensafe -ensaffron -ensaint -ensalada -ensample -ensampler -ensamples -ensand -ensandal -ensanguine -ensanguined -ensanguining -ensate -enscale -enscene -Enschede -enschedule -ensconce -ensconced -ensconces -ensconcing -enscroll -enscrolled -enscrolling -enscrolls -ensculpture -ense -enseal -ensealed -ensealing -enseam -ensear -ensearch -ensearcher -enseat -enseated -enseating -enseel -enseem -ensellure -ensemble -ensembles -ensemble's -Ensenada -ensepulcher -ensepulchered -ensepulchering -ensepulchre -enseraph -enserf -enserfed -enserfing -enserfment -enserfs -ensete -enshade -enshadow -enshawl -ensheath -ensheathe -ensheathed -ensheathes -ensheathing -ensheaths -enshell -enshelter -enshield -enshielded -enshielding -Enshih -enshrine -enshrined -enshrinement -enshrinements -enshrines -enshrining -enshroud -enshrouded -enshrouding -enshrouds -ensient -Ensiferi -ensiform -Ensign -ensign-bearer -ensigncy -ensigncies -ensigned -ensignhood -ensigning -ensignment -ensignry -ensigns -ensign's -ensignship -ensilability -ensilage -ensilaged -ensilages -ensilaging -ensilate -ensilation -ensile -ensiled -ensiles -ensiling -ensilist -ensilver -ensindon -ensynopticity -ensisternal -ensisternum -ensky -enskied -enskyed -enskies -enskying -enslave -enslaved -enslavedness -enslavement -enslavements -enslaver -enslavers -enslaves -enslaving -enslumber -ensmall -ensnare -ensnared -ensnarement -ensnarements -ensnarer -ensnarers -ensnares -ensnaring -ensnaringly -ensnarl -ensnarled -ensnarling -ensnarls -ensnow -ensober -Ensoll -ensophic -Ensor -ensorcel -ensorceled -ensorceling -ensorcelize -ensorcell -ensorcellment -ensorcels -ensorcerize -ensorrow -ensoul -ensouled -ensouling -ensouls -enspangle -enspell -ensphere -ensphered -enspheres -ensphering -enspirit -ensporia -enstamp -enstar -enstate -enstatite -enstatitic -enstatitite -enstatolite -ensteel -ensteep -enstyle -enstool -enstore -enstranged -enstrengthen -ensuable -ensuance -ensuant -ensue -ensued -ensuer -ensues -ensuing -ensuingly -ensuite -ensulphur -ensurance -ensure -ensured -ensurer -ensurers -ensures -ensuring -enswathe -enswathed -enswathement -enswathes -enswathing -ensweep -ensweeten -ent -ent- -entablature -entablatured -entablement -entablements -entach -entackle -entad -Entada -entail -entailable -entailed -entailer -entailers -entailing -entailment -entailments -entails -ental -entalent -entally -entame -entameba -entamebae -entamebas -entamebic -Entamoeba -entamoebiasis -entamoebic -entangle -entangleable -entangled -entangledly -entangledness -entanglement -entanglements -entangler -entanglers -entangles -entangling -entanglingly -entapophysial -entapophysis -entarthrotic -entases -entasia -entasias -entasis -entassment -entastic -entea -Entebbe -entelam -entelechy -entelechial -entelechies -Entellus -entelluses -Entelodon -entelodont -entempest -entemple -entender -entendre -entendres -entente -ententes -Ententophil -entepicondylar -enter -enter- -entera -enterable -enteraden -enteradenography -enteradenographic -enteradenology -enteradenological -enteral -enteralgia -enterally -enterate -enterauxe -enterclose -enterectomy -enterectomies -entered -enterer -enterers -enterfeat -entergogenic -enteria -enteric -entericoid -entering -enteritidis -enteritis -entermete -entermise -entero- -enteroanastomosis -enterobacterial -enterobacterium -enterobiasis -enterobiliary -enterocele -enterocentesis -enteroceptor -enterochirurgia -enterochlorophyll -enterocholecystostomy -enterochromaffin -enterocinesia -enterocinetic -enterocyst -enterocystoma -enterocleisis -enteroclisis -enteroclysis -enterococcal -enterococci -enterococcus -enterocoel -Enterocoela -enterocoele -enterocoelic -enterocoelous -enterocolitis -enterocolostomy -enterocrinin -enterodelous -enterodynia -enteroepiplocele -enterogastritis -enterogastrone -enterogenous -enterogram -enterograph -enterography -enterohelcosis -enterohemorrhage -enterohepatitis -enterohydrocele -enteroid -enterointestinal -enteroischiocele -enterokinase -enterokinesia -enterokinetic -enterolysis -enterolith -enterolithiasis -Enterolobium -enterology -enterologic -enterological -enteromegaly -enteromegalia -enteromere -enteromesenteric -enteromycosis -enteromyiasis -Enteromorpha -enteron -enteroneuritis -enterons -enteroparalysis -enteroparesis -enteropathy -enteropathogenic -enteropexy -enteropexia -enterophthisis -enteroplasty -enteroplegia -enteropneust -Enteropneusta -enteropneustal -enteropneustan -enteroptosis -enteroptotic -enterorrhagia -enterorrhaphy -enterorrhea -enterorrhexis -enteroscope -enteroscopy -enterosepsis -enterosyphilis -enterospasm -enterostasis -enterostenosis -enterostomy -enterostomies -enterotome -enterotomy -enterotoxemia -enterotoxication -enterotoxin -enteroviral -enterovirus -enterozoa -enterozoan -enterozoic -enterozoon -enterparlance -enterpillar -Enterprise -enterprised -enterpriseless -enterpriser -enterprises -enterprising -enterprisingly -enterprisingness -enterprize -enterritoriality -enterrologist -enters -entertain -entertainable -entertained -entertainer -entertainers -entertaining -entertainingly -entertainingness -entertainment -entertainments -entertainment's -entertains -entertake -entertissue -entete -entfaoilff -enthalpy -enthalpies -entheal -enthean -entheasm -entheate -enthelmintha -enthelminthes -enthelminthic -entheos -enthetic -enthymematic -enthymematical -enthymeme -enthral -enthraldom -enthrall -enthralldom -enthralled -enthraller -enthralling -enthrallingly -enthrallment -enthrallments -enthralls -enthralment -enthrals -enthrill -enthrone -enthroned -enthronement -enthronements -enthrones -enthrong -enthroning -enthronise -enthronised -enthronising -enthronization -enthronize -enthronized -enthronizing -enthuse -enthused -enthuses -enthusiasm -enthusiasms -enthusiast -enthusiastic -enthusiastical -enthusiastically -enthusiasticalness -enthusiastly -enthusiasts -enthusiast's -enthusing -entia -Entiat -entice -enticeable -enticed -enticeful -enticement -enticements -enticer -enticers -entices -enticing -enticingly -enticingness -entier -enties -entify -entifical -entification -Entyloma -entincture -entypies -entire -entire-leaved -entirely -entireness -entires -entirety -entireties -entire-wheat -entiris -entirities -entitative -entitatively -entity -entities -entity's -entitle -entitled -entitledness -entitlement -entitles -entitling -entitule -ento- -entoblast -entoblastic -entobranchiate -entobronchium -entocalcaneal -entocarotid -entocele -entocyemate -entocyst -entocnemial -entocoel -entocoele -entocoelic -entocondylar -entocondyle -entocondyloid -entocone -entoconid -entocornea -entocranial -entocuneiform -entocuniform -entoderm -entodermal -entodermic -entoderms -ento-ectad -entogastric -entogenous -entoglossal -entohyal -entoil -entoiled -entoiling -entoilment -entoils -entoire -Entoloma -entom -entom- -entomb -entombed -entombing -entombment -entombments -entombs -entomere -entomeric -entomic -entomical -entomion -entomo- -entomofauna -entomogenous -entomoid -entomol -entomol. -entomolegist -entomolite -entomology -entomologic -entomological -entomologically -entomologies -entomologise -entomologised -entomologising -entomologist -entomologists -entomologize -entomologized -entomologizing -Entomophaga -entomophagan -entomophagous -Entomophila -entomophily -entomophilous -entomophytous -entomophobia -Entomophthora -Entomophthoraceae -entomophthoraceous -Entomophthorales -entomophthorous -Entomosporium -Entomostraca -entomostracan -entomostracous -entomotaxy -entomotomy -entomotomist -entone -entonement -entonic -entoolitic -entoparasite -entoparasitic -entoperipheral -entophytal -entophyte -entophytic -entophytically -entophytous -entopic -entopical -entoplasm -entoplastic -entoplastral -entoplastron -entopopliteal -entoproct -Entoprocta -entoproctous -entopterygoid -entoptic -entoptical -entoptically -entoptics -entoptoscope -entoptoscopy -entoptoscopic -entoretina -entorganism -entortill -entosarc -entosclerite -entosphenal -entosphenoid -entosphere -entosterna -entosternal -entosternite -entosternum -entosthoblast -entothorax -entotic -entotympanic -Entotrophi -entour -entourage -entourages -entozoa -entozoal -entozoan -entozoans -entozoarian -entozoic -entozoology -entozoological -entozoologically -entozoologist -entozoon -entr -entracte -entr'acte -entr'actes -entrada -entradas -entrail -entrails -entrain -entrained -entrainer -entraining -entrainment -entrains -entrammel -entrance -entranced -entrance-denying -entrancedly -entrancement -entrancements -entrancer -entrances -entranceway -entrancing -entrancingly -entrant -entrants -entrap -entrapment -entrapments -entrapped -entrapper -entrapping -entrappingly -entraps -entre -entreasure -entreasured -entreasuring -entreat -entreatable -entreated -entreater -entreatful -entreaty -entreaties -entreating -entreatingly -entreatment -entreats -entrec -entrechat -entrechats -entrecote -entrecotes -entredeux -Entre-Deux-Mers -entree -entrees -entrefer -entrelac -entremess -entremets -entrench -entrenched -entrenches -entrenching -entrenchment -entrenchments -entrep -entrepas -entrepeneur -entrepeneurs -entrepot -entrepots -entreprenant -entrepreneur -entrepreneurial -entrepreneurs -entrepreneur's -entrepreneurship -entrepreneuse -entrepreneuses -entrept -entrer -entresalle -entresol -entresols -entresse -entrez -entry -entria -entries -entrike -Entriken -entryman -entrymen -entry's -entryway -entryways -entrochite -entrochus -entropy -entropic -entropies -entropion -entropionize -entropium -entrough -entrust -entrusted -entrusting -entrustment -entrusts -entte -entune -enturret -entwine -entwined -entwinement -entwines -entwining -entwist -entwisted -entwisting -Entwistle -entwists -entwite -enucleate -enucleated -enucleating -enucleation -enucleator -Enugu -Enukki -Enumclaw -enumerability -enumerable -enumerably -enumerate -enumerated -enumerates -enumerating -enumeration -enumerations -enumerative -enumerator -enumerators -enunciability -enunciable -enunciate -enunciated -enunciates -enunciating -enunciation -enunciations -enunciative -enunciatively -enunciator -enunciatory -enunciators -enure -enured -enures -enureses -enuresis -enuresises -enuretic -enuring -enurny -env -envaye -envapor -envapour -envassal -envassalage -envault -enveigle -enveil -envelop -envelope -enveloped -enveloper -envelopers -envelopes -enveloping -envelopment -envelopments -envelops -envenom -envenomation -envenomed -envenoming -envenomization -envenomous -envenoms -enventual -Enver -enverdure -envergure -envermeil -envy -enviable -enviableness -enviably -envied -envier -enviers -envies -envigor -envying -envyingly -Enville -envine -envined -envineyard -envious -enviously -enviousness -envire -enviroment -environ -environage -environal -environed -environic -environing -environment -environmental -environmentalism -environmentalist -environmentalists -environmentally -environments -environment's -environs -envisage -envisaged -envisagement -envisages -envisaging -envision -envisioned -envisioning -envisionment -envisions -envoi -envoy -envois -envoys -envoy's -envoyship -envolume -envolupen -enwall -enwallow -enweave -enweaved -enweaving -enweb -enwheel -enwheeled -enwheeling -enwheels -enwiden -enwind -enwinding -enwinds -enwing -enwingly -enwisen -enwoman -enwomb -enwombed -enwombing -enwombs -enwood -enworthed -enworthy -enwound -enwove -enwoven -enwrap -enwrapment -enwrapped -enwrapping -enwraps -enwrapt -enwreath -enwreathe -enwreathed -enwreathing -enwrite -enwrought -enwwove -enwwoven -Enzed -Enzedder -enzygotic -enzym -enzymatic -enzymatically -enzyme -enzymes -enzymic -enzymically -enzymolysis -enzymolytic -enzymology -enzymologies -enzymologist -enzymosis -enzymotic -enzyms -enzone -enzooty -enzootic -enzootically -enzootics -EO -eo- -eoan -Eoanthropus -eobiont -eobionts -Eocarboniferous -Eocene -EOD -Eodevonian -eodiscid -EOE -EOF -Eogaea -Eogaean -Eogene -Eoghanacht -Eohippus -eohippuses -Eoin -eoith -eoiths -eol- -Eola -Eolanda -Eolande -eolation -eole -Eolia -Eolian -Eolic -eolienne -Eoline -eolipile -eolipiles -eolith -Eolithic -eoliths -eolopile -eolopiles -eolotropic -EOM -Eomecon -eon -eonian -eonism -eonisms -eons -Eopalaeozoic -Eopaleozoic -eophyte -eophytic -eophyton -eorhyolite -EOS -eosate -Eosaurus -eoside -eosin -eosinate -eosine -eosines -eosinic -eosinlike -eosinoblast -eosinophil -eosinophile -eosinophilia -eosinophilic -eosinophilous -eosins -eosophobia -eosphorite -EOT -EOTT -eous -Eozoic -eozoon -eozoonal -EP -ep- -Ep. -EPA -epacmaic -epacme -epacrid -Epacridaceae -epacridaceous -Epacris -epact -epactal -epacts -epaenetic -epagoge -epagogic -epagomenae -epagomenal -epagomenic -epagomenous -epaleaceous -epalpate -epalpebrate -Epaminondas -epana- -epanadiplosis -Epanagoge -epanalepsis -epanaleptic -epanaphora -epanaphoral -epanastrophe -epanisognathism -epanisognathous -epanody -epanodos -Epanorthidae -epanorthoses -epanorthosis -epanorthotic -epanthous -Epaphus -epapillate -epapophysial -epapophysis -epappose -eparch -eparchate -Eparchean -eparchy -eparchial -eparchies -eparchs -eparcuale -eparterial -epaule -epaulement -epaulet -epauleted -epaulets -epaulet's -epaulette -epauletted -epauliere -epaxial -epaxially -epazote -epazotes -EPD -Epeans -epedaphic -epee -epeeist -epeeists -epees -epeidia -Epeira -epeiric -epeirid -Epeiridae -epeirogenesis -epeirogenetic -epeirogeny -epeirogenic -epeirogenically -Epeirot -epeisodia -epeisodion -epembryonic -epencephal -epencephala -epencephalic -epencephalon -epencephalons -ependyma -ependymal -ependymary -ependyme -ependymitis -ependymoma -ependytes -epenetic -epenla -epentheses -epenthesis -epenthesize -epenthetic -epephragmal -epepophysial -epepophysis -epergne -epergnes -eperlan -eperotesis -Eperua -eperva -Epes -Epeus -epexegeses -epexegesis -epexegetic -epexegetical -epexegetically -Eph -eph- -Eph. -epha -ephah -ephahs -ephapse -epharmony -epharmonic -ephas -ephebe -ephebea -ephebeia -ephebeibeia -ephebeion -ephebes -ephebeubea -ephebeum -ephebi -ephebic -epheboi -ephebos -ephebus -ephectic -Ephedra -Ephedraceae -ephedras -ephedrin -ephedrine -ephedrins -ephelcystic -ephelis -Ephemera -ephemerae -ephemeral -ephemerality -ephemeralities -ephemerally -ephemeralness -ephemeran -ephemeras -ephemeric -ephemerid -Ephemerida -Ephemeridae -ephemerides -ephemeris -ephemerist -ephemeromorph -ephemeromorphic -ephemeron -ephemerons -Ephemeroptera -ephemerous -ephererist -Ephes -Ephesian -Ephesians -Ephesine -ephestia -ephestian -Ephesus -ephetae -ephete -ephetic -Ephialtes -Ephydra -ephydriad -ephydrid -Ephydridae -ephidrosis -ephymnium -ephippia -ephippial -ephippium -ephyra -ephyrae -ephyrula -ephod -ephods -ephoi -ephor -ephoral -ephoralty -ephorate -ephorates -ephori -ephoric -ephors -ephorship -ephorus -ephphatha -Ephrayim -Ephraim -Ephraimite -Ephraimitic -Ephraimitish -Ephraitic -Ephram -Ephrata -Ephrathite -Ephrem -Ephthalite -Ephthianura -ephthianure -epi -epi- -epibasal -Epibaterium -Epibaterius -epibatholithic -epibatus -epibenthic -epibenthos -epibiotic -epiblast -epiblastema -epiblastic -epiblasts -epiblema -epiblemata -epibole -epiboly -epibolic -epibolies -epibolism -epiboulangerite -epibranchial -epic -epical -epicalyces -epicalyx -epicalyxes -epically -epicanthi -epicanthic -epicanthus -epicardia -epicardiac -epicardial -epicardium -epicarid -epicaridan -Epicaridea -Epicarides -epicarp -epicarpal -epicarps -Epicaste -Epicauta -epicede -epicedia -epicedial -epicedian -epicedium -epicele -epicene -epicenes -epicenism -epicenity -epicenter -epicenters -epicentra -epicentral -epicentre -epicentrum -epicentrums -epicerastic -Epiceratodus -epicerebral -epicheirema -epicheiremata -epichil -epichile -epichilia -epichilium -epichindrotic -epichirema -epichlorohydrin -epichondrosis -epichondrotic -epichordal -epichorial -epichoric -epichorion -epichoristic -Epichristian -epicycle -epicycles -epicyclic -epicyclical -epicycloid -epicycloidal -epicyemate -epicier -epicyesis -epicism -epicist -epicystotomy -epicyte -epiclastic -epicleidian -epicleidium -epicleses -epiclesis -epicly -epiclidal -epiclike -epiclinal -epicnemial -Epicoela -epicoelar -epicoele -epicoelia -epicoeliac -epicoelian -epicoeloma -epicoelous -epicolic -epicondylar -epicondyle -epicondylian -epicondylic -epicondylitis -epicontinental -epicoracohumeral -epicoracoid -epicoracoidal -epicormic -epicorolline -epicortical -epicostal -epicotyl -epicotyleal -epicotyledonary -epicotyls -epicranial -epicranium -epicranius -epicrasis -Epicrates -epicrises -epicrisis -epicrystalline -epicritic -epics -epic's -Epictetian -Epictetus -epicure -Epicurean -Epicureanism -epicureans -epicures -epicurish -epicurishly -Epicurism -Epicurize -Epicurus -epicuticle -epicuticular -Epidaurus -epideictic -epideictical -epideistic -epidemy -epidemial -Epidemiarum -epidemic -epidemical -epidemically -epidemicalness -epidemicity -epidemics -epidemic's -epidemiography -epidemiographist -epidemiology -epidemiologic -epidemiological -epidemiologically -epidemiologies -epidemiologist -epidendral -epidendric -Epidendron -Epidendrum -epiderm -epiderm- -epiderma -epidermal -epidermatic -epidermatoid -epidermatous -epidermic -epidermical -epidermically -epidermidalization -epidermis -epidermises -epidermization -epidermoid -epidermoidal -epidermolysis -epidermomycosis -Epidermophyton -epidermophytosis -epidermose -epidermous -epiderms -epidesmine -epidia -epidialogue -epidiascope -epidiascopic -epidictic -epidictical -epididymal -epididymectomy -epididymides -epididymis -epididymite -epididymitis -epididymodeferentectomy -epididymodeferential -epididymo-orchitis -epididymovasostomy -epidymides -epidiorite -epidiorthosis -epidiplosis -epidosite -epidote -epidotes -epidotic -epidotiferous -epidotization -epidural -Epifano -epifascial -epifauna -epifaunae -epifaunal -epifaunas -epifocal -epifolliculitis -Epigaea -epigaeous -epigamic -epigaster -epigastraeum -epigastral -epigastria -epigastrial -epigastric -epigastrical -epigastriocele -epigastrium -epigastrocele -epigeal -epigean -epigee -epigeic -epigene -Epigenes -epigenesis -epigenesist -epigenetic -epigenetically -epigenic -epigenist -epigenous -epigeous -epigeum -epigyne -epigyny -epigynies -epigynous -epigynum -epiglot -epiglottal -epiglottic -epiglottidean -epiglottides -epiglottiditis -epiglottis -epiglottises -epiglottitis -epiglotto-hyoidean -epignathous -epigne -epigon -epigonal -epigonation -epigone -epigoneion -epigones -Epigoni -epigonic -Epigonichthyidae -Epigonichthys -epigonism -epigonium -epigonos -epigonous -epigons -Epigonus -epigram -epigrammatarian -epigrammatic -epigrammatical -epigrammatically -epigrammatise -epigrammatised -epigrammatising -epigrammatism -epigrammatist -epigrammatize -epigrammatized -epigrammatizer -epigrammatizing -epigramme -epigrams -epigraph -epigrapher -epigraphy -epigraphic -epigraphical -epigraphically -epigraphist -epigraphs -epiguanine -epihyal -epihydric -epihydrinic -Epihippus -epikeia -epiky -epikia -epikleses -epiklesis -Epikouros -epil -epilabra -epilabrum -Epilachna -Epilachnides -epilamellar -epilaryngeal -epilate -epilated -epilating -epilation -epilator -epilatory -epilegomenon -epilemma -epilemmal -epileny -epilepsy -epilepsia -epilepsies -epilept- -epileptic -epileptical -epileptically -epileptics -epileptiform -epileptogenic -epileptogenous -epileptoid -epileptology -epileptologist -epilimnetic -epilimnia -epilimnial -epilimnion -epilimnionia -epilithic -epyllia -epyllion -epilobe -Epilobiaceae -Epilobium -epilog -epilogate -epilogation -epilogic -epilogical -epilogism -epilogist -epilogistic -epilogize -epilogized -epilogizing -epilogs -epilogue -epilogued -epilogues -epiloguing -epiloguize -epiloia -Epimachinae -epimacus -epimandibular -epimanikia -epimanikion -Epimedium -Epimenidean -Epimenides -epimer -epimeral -epimerase -epimere -epimeres -epimeric -epimeride -epimerise -epimerised -epimerising -epimerism -epimerite -epimeritic -epimerize -epimerized -epimerizing -epimeron -epimers -epimerum -Epimetheus -epimyocardial -epimyocardium -epimysia -epimysium -epimyth -epimorpha -epimorphic -epimorphism -epimorphosis -epinaoi -epinaos -epinard -epinasty -epinastic -epinastically -epinasties -epineolithic -Epinephelidae -Epinephelus -epinephrin -epinephrine -epinette -epineuneuria -epineural -epineuria -epineurial -epineurium -epingle -epinglette -epinicia -epinicial -epinician -epinicion -epinyctis -epinikia -epinikian -epinikion -epinine -Epione -epionychia -epionychium -epionynychia -epiopticon -epiotic -Epipactis -Epipaleolithic -epipany -epipanies -epiparasite -epiparodos -epipastic -epipedometry -epipelagic -epiperipheral -epipetalous -Epiph -Epiph. -Epiphany -Epiphania -epiphanic -Epiphanies -epiphanise -epiphanised -epiphanising -epiphanize -epiphanized -epiphanizing -epiphanous -epipharyngeal -epipharynx -Epiphegus -epiphenomena -epiphenomenal -epiphenomenalism -epiphenomenalist -epiphenomenally -epiphenomenon -epiphylaxis -epiphyll -epiphylline -epiphyllospermous -epiphyllous -Epiphyllum -epiphysary -epiphyseal -epiphyseolysis -epiphyses -epiphysial -epiphysis -epiphysitis -epiphytal -epiphyte -epiphytes -epiphytic -epiphytical -epiphytically -epiphytism -epiphytology -epiphytotic -epiphytous -epiphloedal -epiphloedic -epiphloeum -epiphonema -epiphonemae -epiphonemas -epiphora -epiphragm -epiphragmal -epipial -epiplankton -epiplanktonic -epiplasm -epiplasmic -epiplastral -epiplastron -epiplectic -epipleura -epipleurae -epipleural -epiplexis -epiploce -epiplocele -epiploic -epiploitis -epiploon -epiplopexy -epipodia -epipodial -epipodiale -epipodialia -epipodite -epipoditic -epipodium -epipolic -epipolism -epipolize -epiprecoracoid -epiproct -Epipsychidion -epipteric -epipterygoid -epipterous -epipubes -epipubic -epipubis -epirhizous -epirogenetic -epirogeny -epirogenic -epirot -Epirote -Epirotic -epirotulian -epirrhema -epirrhematic -epirrheme -Epirus -Epis -Epis. -episarcine -episarkine -Episc -episcenia -episcenium -episcia -episcias -episclera -episcleral -episcleritis -episcopable -episcopacy -episcopacies -Episcopal -Episcopalian -Episcopalianism -Episcopalianize -episcopalians -episcopalism -episcopality -Episcopally -episcopant -episcoparian -episcopate -episcopates -episcopation -episcopature -episcope -episcopes -episcopy -episcopicide -episcopise -episcopised -episcopising -episcopization -episcopize -episcopized -episcopizing -episcopolatry -episcotister -episedia -episematic -episememe -episepalous -episyllogism -episynaloephe -episynthetic -episyntheton -episiocele -episiohematoma -episioplasty -episiorrhagia -episiorrhaphy -episiostenosis -episiotomy -episiotomies -episkeletal -episkotister -episodal -episode -episodes -episode's -episodial -episodic -episodical -episodically -episomal -episomally -episome -episomes -epispadia -epispadiac -epispadias -epispastic -episperm -epispermic -epispinal -episplenitis -episporangium -epispore -episporium -Epist -epistapedial -epistases -epistasy -epistasies -epistasis -epistatic -epistaxis -episteme -epistemic -epistemically -epistemolog -epistemology -epistemological -epistemologically -epistemologist -epistemonic -epistemonical -epistemophilia -epistemophiliac -epistemophilic -epistena -episterna -episternal -episternalia -episternite -episternum -episthotonos -epistylar -epistilbite -epistyle -epistyles -Epistylis -epistlar -Epistle -epistler -epistlers -Epistles -epistle's -epistolar -epistolary -epistolarian -epistolarily -epistolatory -epistolean -epistoler -epistolet -epistolic -epistolical -epistolise -epistolised -epistolising -epistolist -epistolizable -epistolization -epistolize -epistolized -epistolizer -epistolizing -epistolographer -epistolography -epistolographic -epistolographist -epistoma -epistomal -epistomata -epistome -epistomian -epistroma -epistrophe -epistropheal -epistropheus -epistrophy -epistrophic -epit -epitactic -epitaph -epitapher -epitaphial -epitaphian -epitaphic -epitaphical -epitaphist -epitaphize -epitaphless -epitaphs -epitases -epitasis -epitaxy -epitaxial -epitaxially -epitaxic -epitaxies -epitaxis -epitela -epitendineum -epitenon -epithalami -epithalamy -epithalamia -epithalamial -epithalamiast -epithalamic -epithalamion -epithalamium -epithalamiumia -epithalamiums -epithalamize -epithalamus -epithalline -epithamia -epitheca -epithecal -epithecate -epithecia -epithecial -epithecicia -epithecium -epitheli- -epithelia -epithelial -epithelialize -epithelilia -epitheliliums -epithelioblastoma -epithelioceptor -epitheliogenetic -epithelioglandular -epithelioid -epitheliolysin -epitheliolysis -epitheliolytic -epithelioma -epitheliomas -epitheliomata -epitheliomatous -epitheliomuscular -epitheliosis -epitheliotoxin -epitheliulia -epithelium -epitheliums -epithelization -epithelize -epitheloid -epithem -epitheme -epithermal -epithermally -epithesis -epithet -epithetic -epithetical -epithetically -epithetician -epithetize -epitheton -epithets -epithet's -epithi -epithyme -epithymetic -epithymetical -epithumetic -epitimesis -epitympa -epitympanic -epitympanum -epityphlitis -epityphlon -epitoke -epitomate -epitomator -epitomatory -epitome -epitomes -epitomic -epitomical -epitomically -epitomisation -epitomise -epitomised -epitomiser -epitomising -epitomist -epitomization -epitomize -epitomized -epitomizer -epitomizes -epitomizing -epitonic -Epitoniidae -epitonion -Epitonium -epitoxoid -epitra -epitrachelia -epitrachelion -epitrchelia -epitria -epitrichial -epitrichium -epitrite -epitritic -epitrochlea -epitrochlear -epitrochoid -epitrochoidal -epitrope -epitrophy -epitrophic -epituberculosis -epituberculous -epiural -epivalve -epixylous -epizeuxis -Epizoa -epizoal -epizoan -epizoarian -epizoic -epizoicide -epizoism -epizoisms -epizoite -epizoites -epizoology -epizoon -epizooty -epizootic -epizootically -epizooties -epizootiology -epizootiologic -epizootiological -epizootiologically -epizootology -epizzoa -EPL -eplot -Epner -EPNS -epoch -epocha -epochal -epochally -epoche -epoch-forming -epochism -epochist -epoch-making -epoch-marking -epochs -epode -epodes -epodic -Epoisses -epoist -epollicate -Epomophorus -Epona -eponge -eponychium -eponym -eponymy -eponymic -eponymies -eponymism -eponymist -eponymize -eponymous -eponyms -eponymus -epoophoron -epop -epopee -epopees -epopoean -epopoeia -epopoeias -epopoeist -epopt -epoptes -epoptic -epoptist -epornitic -epornitically -EPOS -eposes -epotation -epoxy -epoxide -epoxides -epoxidize -epoxied -epoxyed -epoxies -epoxying -Epp -Epperson -Eppes -Eppy -Eppie -Epping -EPPS -EPRI -epris -eprise -Eproboscidea -EPROM -eprosy -eprouvette -epruinose -EPS -EPSCS -EPSF -EPSI -Epsilon -epsilon-delta -epsilon-neighborhood -epsilons -Epsom -epsomite -Epstein -EPT -Eptatretidae -Eptatretus -EPTS -EPUB -Epulafquen -epulary -epulation -epulis -epulo -epuloid -epulones -epulosis -epulotic -epupillate -epural -epurate -epuration -EPW -Epworth -EQ -eq. -eqpt -equability -equabilities -equable -equableness -equably -equaeval -equal -equalable -equal-angled -equal-aqual -equal-area -equal-armed -equal-balanced -equal-blooded -equaled -equal-eyed -equal-handed -equal-headed -equaling -equalisation -equalise -equalised -equalises -equalising -equalist -equalitarian -equalitarianism -Equality -equalities -equality's -equalization -equalize -equalized -equalizer -equalizers -equalizes -equalizing -equalled -equaller -equally -equal-limbed -equalling -equalness -equal-poised -equals -equal-sided -equal-souled -equal-weighted -equangular -Equanil -equanimity -equanimities -equanimous -equanimously -equanimousness -equant -equatability -equatable -equate -equated -equates -equating -equation -equational -equationally -equationism -equationist -equations -equative -equator -equatoreal -equatorial -equatorially -equators -equator's -equatorward -equatorwards -EQUEL -equerry -equerries -equerryship -eques -equestrial -equestrian -equestrianism -equestrianize -equestrians -equestrianship -equestrienne -equestriennes -equi- -equianchorate -equiangle -equiangular -equiangularity -equianharmonic -equiarticulate -equiatomic -equiaxe -equiaxed -equiaxial -equibalance -equibalanced -equibiradiate -equicaloric -equicellular -equichangeable -equicohesive -equicontinuous -equiconvex -equicostate -equicrural -equicurve -equid -equidense -equidensity -equidiagonal -equidifferent -equidimensional -equidist -equidistance -equidistant -equidistantial -equidistantly -equidistribution -equidiurnal -equidivision -equidominant -equidurable -equielliptical -equiexcellency -equiform -equiformal -equiformity -equiglacial -equi-gram-molar -equigranular -equijacent -equilater -equilateral -equilaterally -equilibrant -equilibrate -equilibrated -equilibrates -equilibrating -equilibration -equilibrations -equilibrative -equilibrator -equilibratory -equilibria -equilibrial -equilibriate -equilibrio -equilibrious -equilibriria -equilibrist -equilibristat -equilibristic -equilibrity -equilibrium -equilibriums -equilibrize -equilin -equiliria -equilobate -equilobed -equilocation -equilucent -equimodal -equimolal -equimolar -equimolecular -equimomental -equimultiple -equinal -equinate -equine -equinecessary -equinely -equines -equinia -equinity -equinities -equinoctial -equinoctially -equinovarus -equinox -equinoxes -equinumerally -Equinunk -equinus -equiomnipotent -equip -equipaga -equipage -equipages -equiparable -equiparant -equiparate -equiparation -equipartile -equipartisan -equipartition -equiped -equipedal -equipede -equipendent -equiperiodic -equipluve -equipment -equipments -equipoise -equipoised -equipoises -equipoising -equipollence -equipollency -equipollent -equipollently -equipollentness -equiponderance -equiponderancy -equiponderant -equiponderate -equiponderated -equiponderating -equiponderation -equiponderous -equipondious -equipostile -equipotent -equipotential -equipotentiality -equipped -equipper -equippers -equipping -equiprobabilism -equiprobabilist -equiprobability -equiprobable -equiprobably -equiproducing -equiproportional -equiproportionality -equips -equipt -equiradial -equiradiate -equiradical -equirotal -equisegmented -equiseta -Equisetaceae -equisetaceous -Equisetales -equisetic -Equisetum -equisetums -equisided -equisignal -equisized -equison -equisonance -equisonant -equispaced -equispatial -equisufficiency -equisurface -equitability -equitable -equitableness -equitably -equitangential -equitant -equitation -equitative -equitemporal -equitemporaneous -equites -Equity -equities -equitist -equitriangular -equiv -equiv. -equivale -equivalence -equivalenced -equivalences -equivalency -equivalencies -equivalencing -equivalent -equivalently -equivalents -equivaliant -equivalue -equivaluer -equivalve -equivalved -equivalvular -equivelocity -equivocacy -equivocacies -equivocal -equivocality -equivocalities -equivocally -equivocalness -equivocate -equivocated -equivocates -equivocating -equivocatingly -equivocation -equivocations -equivocator -equivocatory -equivocators -equivoke -equivokes -equivoluminal -equivoque -equivorous -equivote -equoid -equoidean -Equulei -Equuleus -Equus -equvalent -er -ERA -erade -eradiate -eradiated -eradiates -eradiating -eradiation -eradicable -eradicably -eradicant -eradicate -eradicated -eradicates -eradicating -eradication -eradications -eradicative -eradicator -eradicatory -eradicators -eradiculose -Eradis -Eragrostis -eral -Eran -eranist -Eranthemum -Eranthis -ERAR -Eras -era's -erasability -erasable -erase -erased -erasement -eraser -erasers -erases -erasing -erasion -erasions -Erasme -Erasmian -Erasmianism -Erasmo -Erasmus -Erastatus -Eraste -Erastes -Erastian -Erastianism -Erastianize -Erastus -erasure -erasures -erat -Erath -Erato -Eratosthenes -Erava -Erb -Erbaa -Erbacon -Erbe -Erbes -erbia -Erbil -erbium -erbiums -Erce -erce- -Erceldoune -Ercilla -ERD -ERDA -Erdah -Erdda -Erde -Erdei -Erdman -Erdrich -erdvark -ERE -Erebus -Erech -Erechim -Erechtheum -Erechtheus -Erechtites -erect -erectable -erected -erecter -erecters -erectile -erectility -erectilities -erecting -erection -erections -erection's -erective -erectly -erectness -erectopatent -erector -erectors -erector's -erects -Erek -Erelia -erelong -eremacausis -Eremian -eremic -eremital -eremite -eremites -eremiteship -eremitic -eremitical -eremitish -eremitism -Eremochaeta -eremochaetous -eremology -eremophilous -eremophyte -Eremopteris -eremuri -Eremurus -Erena -erenach -Erenburg -erenow -EREP -erepsin -erepsins -erept -ereptase -ereptic -ereption -erer -Ereshkigal -Ereshkigel -erethic -erethisia -erethism -erethismic -erethisms -erethistic -erethitic -Erethizon -Erethizontidae -Eretrian -Ereuthalion -Erevan -erewhile -erewhiles -Erewhon -erf -Erfert -Erfurt -erg -erg- -ergal -ergamine -Ergane -ergasia -ergasterion -ergastic -ergastoplasm -ergastoplasmic -ergastulum -ergatandry -ergatandromorph -ergatandromorphic -ergatandrous -ergate -ergates -ergative -ergatocracy -ergatocrat -ergatogyne -ergatogyny -ergatogynous -ergatoid -ergatomorph -ergatomorphic -ergatomorphism -Ergener -Erginus -ergmeter -ergo -ergo- -ergocalciferol -ergodic -ergodicity -ergogram -ergograph -ergographic -ergoism -ergology -ergomaniac -ergometer -ergometric -ergometrine -ergon -ergonomic -ergonomically -ergonomics -ergonomist -ergonovine -ergophile -ergophobia -ergophobiac -ergophobic -ergoplasm -ergostat -ergosterin -ergosterol -ergot -ergotamine -ergotaminine -ergoted -ergothioneine -ergotic -ergotin -ergotine -ergotinine -ergotism -ergotisms -ergotist -ergotization -ergotize -ergotized -ergotizing -ergotoxin -ergotoxine -Ergotrate -ergots -ergs -ergusia -Erhard -Erhardt -Erhart -Eri -ery -eria -Erian -Erianthus -Eriboea -Eric -ERICA -Ericaceae -ericaceous -ericad -erical -Ericales -ericas -ericetal -ericeticolous -ericetum -Erich -Ericha -erichthoid -Erichthonius -erichthus -erichtoid -Erycina -ericineous -ericius -Erick -Ericka -Ericksen -Erickson -ericoid -ericolin -ericophyte -Ericson -Ericsson -Erida -Eridani -Eridanid -Eridanus -Eridu -Erie -Eries -Erieville -Erigena -Erigenia -Erigeron -erigerons -erigible -Eriglossa -eriglossate -Erigone -Eriha -eryhtrism -Erik -Erika -erikite -Erikson -Eriline -Erymanthian -Erymanthos -Erimanthus -Erymanthus -Erin -Eryn -Erina -Erinaceidae -erinaceous -Erinaceus -Erine -erineum -Eryngium -eringo -eryngo -eringoes -eryngoes -eringos -eryngos -Erinyes -Erinys -erinite -Erinize -Erinn -Erinna -erinnic -erinose -Eriobotrya -Eriocaulaceae -eriocaulaceous -Eriocaulon -Eriocomi -Eriodendron -Eriodictyon -erioglaucine -Eriogonum -eriometer -Eryon -erionite -Eriophyes -eriophyid -Eriophyidae -eriophyllous -Eriophorum -eryopid -Eryops -eryopsid -Eriosoma -Eriphyle -Eris -ERISA -Erysibe -Erysichthon -Erysimum -erysipelas -erysipelatoid -erysipelatous -erysipeloid -Erysipelothrix -erysipelous -Erysiphaceae -Erysiphe -Eristalis -eristic -eristical -eristically -eristics -Erithacus -Erythea -Erytheis -erythema -erythemal -erythemas -erythematic -erythematous -erythemic -erythorbate -erythr- -Erythraea -Erythraean -Erythraeidae -erythraemia -Erythraeum -erythrasma -erythrean -erythremia -erythremomelalgia -erythrene -erythric -erythrin -Erythrina -erythrine -Erythrinidae -Erythrinus -erythrism -erythrismal -erythristic -erythrite -erythritic -erythritol -erythro- -erythroblast -erythroblastic -erythroblastosis -erythroblastotic -erythrocarpous -erythrocatalysis -Erythrochaete -erythrochroic -erythrochroism -erythrocyte -erythrocytes -erythrocytic -erythrocytoblast -erythrocytolysin -erythrocytolysis -erythrocytolytic -erythrocytometer -erythrocytometry -erythrocytorrhexis -erythrocytoschisis -erythrocytosis -erythroclasis -erythroclastic -erythrodegenerative -erythroderma -erythrodermia -erythrodextrin -erythrogen -erythrogenesis -erythrogenic -erythroglucin -erythrogonium -erythroid -erythrol -erythrolein -erythrolysin -erythrolysis -erythrolytic -erythrolitmin -erythromania -erythromelalgia -erythromycin -erythron -erythroneocytosis -Erythronium -erythrons -erythropenia -erythrophage -erythrophagous -erythrophyll -erythrophyllin -erythrophilous -erythrophleine -erythrophobia -erythrophore -erythropia -erythroplastid -erythropoiesis -erythropoietic -erythropoietin -erythropsia -erythropsin -erythrorrhexis -erythroscope -erythrose -erythrosiderite -erythrosin -erythrosine -erythrosinophile -erythrosis -Erythroxylaceae -erythroxylaceous -erythroxyline -Erythroxylon -Erythroxylum -erythrozyme -erythrozincite -erythrulose -Eritrea -Eritrean -Erivan -Eryx -erizo -erk -Erkan -erke -ERL -Erland -Erlander -Erlandson -Erlang -Erlangen -Erlanger -Erle -Erleena -Erlene -Erlenmeyer -Erlewine -erliche -Erlin -Erlina -Erline -Erlinna -erlking -erl-king -erlkings -Erlond -Erma -Ermalinda -Ermanaric -Ermani -Ermanno -Ermanrich -Erme -Ermeena -Ermey -ermelin -Ermengarde -Ermentrude -ermiline -Ermin -Ermina -Ermine -ermined -erminee -ermines -ermine's -erminette -Erminia -Erminie -ermining -erminites -Erminna -erminois -ermit -ermitophobia -Ern -Erna -Ernald -Ernaldus -Ernaline -ern-bleater -Erne -ernes -ernesse -Ernest -Ernesta -Ernestine -Ernestyne -Ernesto -Ernestus -ern-fern -Erny -Ernie -erns -Ernst -Ernul -erodability -erodable -erode -eroded -erodent -erodes -erodibility -erodible -eroding -Erodium -erogate -erogeneity -erogenesis -erogenetic -erogeny -erogenic -erogenous -eromania -Eros -erose -erosely -eroses -erosible -erosion -erosional -erosionally -erosionist -erosions -erosive -erosiveness -erosivity -eroso- -erostrate -erotema -eroteme -Erotes -erotesis -erotetic -erotic -erotica -erotical -erotically -eroticism -eroticist -eroticization -eroticize -eroticizing -eroticomania -eroticomaniac -eroticomaniacal -erotics -erotylid -Erotylidae -erotism -erotisms -erotization -erotize -erotized -erotizes -erotizing -eroto- -erotogeneses -erotogenesis -erotogenetic -erotogenic -erotogenicity -erotographomania -erotology -erotomania -erotomaniac -erotomaniacal -erotopath -erotopathy -erotopathic -erotophobia -ERP -Erpetoichthys -erpetology -erpetologist -err -errability -errable -errableness -errabund -errancy -errancies -errand -errands -errant -Errantia -errantly -errantness -errantry -errantries -errants -errata -erratas -erratic -erratical -erratically -erraticalness -erraticism -erraticness -erratics -erratum -erratums -erratuta -Errecart -erred -Errhephoria -errhine -errhines -Errick -erring -erringly -errite -Errol -Erroll -erron -erroneous -erroneously -erroneousness -error -error-blasted -error-darkened -errordump -errorful -errorist -errorless -error-prone -error-proof -errors -error's -error-stricken -error-tainted -error-teaching -errs -errsyn -ERS -Ersar -ersatz -ersatzes -Erse -erses -ersh -Erskine -erst -erstwhile -erstwhiles -ERT -Ertebolle -erth -Ertha -erthen -erthly -erthling -ERU -erubescence -erubescent -erubescite -eruc -Eruca -erucic -eruciform -erucin -erucivorous -eruct -eructance -eructate -eructated -eructates -eructating -eructation -eructative -eructed -eructing -eruction -eructs -erudit -erudite -eruditely -eruditeness -eruditical -erudition -eruditional -eruditionist -eruditions -erugate -erugation -erugatory -eruginous -erugo -erugos -Erulus -erump -erumpent -Erund -erupt -erupted -eruptible -erupting -eruption -eruptional -eruptions -eruptive -eruptively -eruptiveness -eruptives -eruptivity -erupts -erupturient -ERV -ervenholder -Ervy -ervil -ervils -ErvIn -Ervine -Erving -Ervipiame -Ervum -Erwin -Erwinia -Erwinna -Erwinville -erzahler -Erzerum -Erzgebirge -Erzurum -es -es- -e's -ESA -ESAC -Esau -ESB -esbay -esbatement -Esbensen -Esbenshade -Esbjerg -Esbon -Esc -esca -escadrille -escadrilles -escalade -escaladed -escalader -escalades -escalading -escalado -escalan -Escalante -escalate -escalated -escalates -escalating -escalation -escalations -Escalator -escalatory -escalators -escalier -escalin -Escallonia -Escalloniaceae -escalloniaceous -escallop -escalloped -escalloping -escallops -escallop-shell -Escalon -escalop -escalope -escaloped -escaloping -escalops -escambio -escambron -escamotage -escamoteur -Escanaba -escandalize -escapable -escapade -escapades -escapade's -escapado -escapage -escape -escaped -escapee -escapees -escapee's -escapeful -escapeless -escapement -escapements -escaper -escapers -escapes -escapeway -escaping -escapingly -escapism -escapisms -escapist -escapists -escapology -escapologist -escar -escarbuncle -escargatoire -escargot -escargotieres -escargots -escarmouche -escarole -escaroles -escarp -escarped -escarping -escarpment -escarpments -escarps -escars -escarteled -escartelly -Escatawpa -Escaut -escence -escent -Esch -eschalot -eschalots -eschar -eschara -escharine -escharoid -escharotic -eschars -eschatocol -eschatology -eschatological -eschatologically -eschatologist -eschaufe -eschaunge -escheat -escheatable -escheatage -escheated -escheating -escheatment -escheator -escheatorship -escheats -eschel -eschele -Escherichia -escheve -eschevin -eschew -eschewal -eschewals -eschewance -eschewed -eschewer -eschewers -eschewing -eschews -eschynite -eschoppe -eschrufe -Eschscholtzia -esclandre -esclavage -escoba -escobadura -escobedo -escobilla -escobita -escocheon -Escoffier -Escoheag -escolar -escolars -Escondido -esconson -escopet -escopeta -escopette -Escorial -escort -escortage -escorted -escortee -escorting -escortment -escorts -escot -escoted -escoting -escots -escout -escry -escribano -escribe -escribed -escribiente -escribientes -escribing -escrime -escript -escritoire -escritoires -escritorial -escrod -escrol -escroll -escropulo -escrow -escrowed -escrowee -escrowing -escrows -escruage -escuage -escuages -Escudero -escudo -escudos -escuela -Esculapian -esculent -esculents -esculetin -esculic -esculin -Escurial -escurialize -escutcheon -escutcheoned -escutcheons -escutellate -ESD -Esd. -ESDI -Esdraelon -esdragol -Esdras -Esdud -ese -Esebrias -esemplasy -esemplastic -Esenin -eseptate -esere -eserin -eserine -eserines -eses -esexual -ESF -esguard -ESH -E-shaped -Eshelman -Esher -Eshi-kongo -eshin -Eshkol -Eshman -ESI -Esidrix -esiphonal -ESIS -Esk -eskar -eskars -Eskdale -esker -eskers -Esky -Eskil -Eskill -Eskilstuna -Eskimauan -Eskimo -Eskimo-Aleut -Eskimoan -eskimoes -Eskimoic -Eskimoid -Eskimoized -Eskimology -Eskimologist -Eskimos -Eskisehir -Eskishehir -Esko -Eskualdun -Eskuara -ESL -eslabon -Eslie -eslisor -esloign -ESM -Esma -esmayle -Esmaria -Esmark -ESMD -Esme -Esmeralda -Esmeraldan -Esmeraldas -esmeraldite -Esmerelda -Esmerolda -Esmond -Esmont -ESN -esne -esnecy -ESO -eso- -esoanhydride -esocataphoria -esocyclic -Esocidae -esociform -esodic -esoenteritis -esoethmoiditis -esogastritis -esonarthex -esoneural -ESOP -esopgi -esophagal -esophagalgia -esophageal -esophagean -esophagectasia -esophagectomy -esophageo-cutaneous -esophagi -esophagism -esophagismus -esophagitis -esophago -esophagocele -esophagodynia -esophago-enterostomy -esophagogastroscopy -esophagogastrostomy -esophagomalacia -esophagometer -esophagomycosis -esophagopathy -esophagoplasty -esophagoplegia -esophagoplication -esophagoptosis -esophagorrhagia -esophagoscope -esophagoscopy -esophagospasm -esophagostenosis -esophagostomy -esophagotome -esophagotomy -esophagus -esophoria -esophoric -Esopus -esotery -esoteric -esoterica -esoterical -esoterically -esotericism -esotericist -esoterics -esoterism -esoterist -esoterize -esothyropexy -esotrope -esotropia -esotropic -Esox -ESP -esp. -espace -espacement -espada -espadon -espadrille -espadrilles -espagnole -espagnolette -espalier -espaliered -espaliering -espaliers -Espana -espanol -Espanola -espanoles -espantoon -esparcet -esparsette -Espartero -Esparto -espartos -espathate -espave -espavel -ESPEC -espece -especial -especially -especialness -espeire -Esperance -Esperantic -Esperantidist -Esperantido -Esperantism -Esperantist -Esperanto -esphresis -Espy -espial -espials -espichellite -espied -espiegle -espieglerie -espiegleries -espier -espies -espigle -espiglerie -espying -espinal -espinel -espinette -espingole -espinillo -espino -espinos -espionage -espionages -espiritual -esplanade -esplanades -esplees -esponton -espontoon -Espoo -Esposito -espousage -espousal -espousals -espouse -espoused -espousement -espouser -espousers -espouses -espousing -espressivo -espresso -espressos -Espriella -espringal -esprise -esprit -esprits -Espronceda -esprove -ESPS -espundia -Esq -Esq. -esquamate -esquamulose -esque -Esquiline -Esquimau -Esquimauan -Esquimaux -Esquipulas -Esquire -esquirearchy -esquired -esquiredom -esquires -esquireship -esquiring -esquisse -esquisse-esquisse -ESR -Esra -ESRO -esrog -esrogim -esrogs -ess -Essa -essay -essayed -essayer -essayers -essayette -essayical -essaying -essayish -essayism -essayist -essayistic -essayistical -essayists -essaylet -essays -essay-writing -Essam -essancia -essancias -essang -Essaouira -essart -esse -essed -esseda -essede -Essedones -essee -Esselen -Esselenian -Essen -essence -essenced -essences -essence's -essency -essencing -Essene -essenhout -Essenian -Essenianism -Essenic -Essenical -Essenis -Essenism -Essenize -essentia -essential -essentialism -essentialist -essentiality -essentialities -essentialization -essentialize -essentialized -essentializing -essentially -essentialness -essentials -essentiate -essenwood -Essequibo -essera -esses -ESSEX -Essexfells -essexite -Essexville -Essy -Essie -Essig -Essinger -Essington -essive -essling -essoign -essoin -essoined -essoinee -essoiner -essoining -essoinment -essoins -essonite -essonites -Essonne -essorant -ESSX -est -est. -Esta -estab -estable -establish -establishable -established -establisher -establishes -establishing -Establishment -establishmentarian -establishmentarianism -establishmentism -establishments -establishment's -establismentarian -establismentarianism -Estacada -estacade -estadal -estadel -estadio -estado -estafa -estafet -estafette -estafetted -Estaing -estall -estamene -estamin -estaminet -estaminets -estamp -estampage -estampede -estampedero -estampie -Estancia -estancias -estanciero -estancieros -estang -estantion -Estas -estate -estated -estately -estates -estate's -estatesman -estatesmen -estating -estats -Este -Esteban -esteem -esteemable -esteemed -esteemer -esteeming -esteems -Estey -Estel -Estele -Esteli -Estell -Estella -Estelle -Estelline -Esten -estensible -Ester -esterase -esterases -esterellite -Esterhazy -esteriferous -esterify -esterifiable -esterification -esterified -esterifies -esterifying -esterization -esterize -esterizing -esterlin -esterling -Estero -esteros -esters -Estes -Estevan -estevin -Esth -Esth. -Esthacyte -esthematology -Esther -Estheria -estherian -Estheriidae -Estherville -Estherwood -estheses -esthesia -esthesias -esthesio -esthesio- -esthesioblast -esthesiogen -esthesiogeny -esthesiogenic -esthesiography -esthesiology -esthesiometer -esthesiometry -esthesiometric -esthesioneurosis -esthesiophysiology -esthesis -esthesises -esthete -esthetes -esthetic -esthetical -esthetically -esthetician -estheticism -esthetics -esthetology -esthetophore -esthiomene -esthiomenus -Esthonia -Esthonian -Estienne -Estill -estimable -estimableness -estimably -estimate -estimated -estimates -estimating -estimatingly -estimation -estimations -estimative -estimator -estimators -estipulate -Estis -estivage -estival -estivate -estivated -estivates -estivating -estivation -estivator -estive -estivo-autumnal -estmark -estoc -estocada -estocs -estoil -estoile -estolide -Estonia -Estonian -estonians -estop -estoppage -estoppal -estopped -estoppel -estoppels -estopping -estops -estoque -Estotiland -estovers -estrada -estradas -estrade -estradiol -estradiot -estrado -estragol -estragole -estragon -estragons -estray -estrayed -estraying -estrays -estral -estramazone -estrange -estranged -estrangedness -estrangelo -estrangement -estrangements -estranger -estranges -estranging -estrangle -estrapade -estre -estreat -estreated -estreating -estreats -Estrella -Estrellita -Estremadura -Estren -estrepe -estrepement -estriate -estrich -estriche -estrif -estrildine -Estrin -estrins -estriol -estriols -estrogen -estrogenic -estrogenically -estrogenicity -estrogens -Estron -estrone -estrones -estrous -estrual -estruate -estruation -estrum -estrums -estrus -estruses -estuant -estuary -estuarial -estuarian -estuaries -estuarine -estuate -estudy -estufa -estuosity -estuous -esture -Estus -ESU -esugarization -esurience -esuriency -esurient -esuriently -esurine -Eszencia -Esztergom -Eszterhazy -et -ETA -etaballi -etabelli -ETACC -etacism -etacist -etaerio -etagere -etageres -etagre -etalage -etalon -etalons -Etam -Etamin -etamine -etamines -etamins -Etan -Etana -etang -etape -etapes -ETAS -etatism -etatisme -etatisms -etatist -etatists -ETC -etc. -etcetera -etceteras -etch -etchant -etchants -Etchareottine -etched -etcher -etchers -etches -Etchimin -etching -etchings -ETD -Etem -eten -Eteocles -Eteoclus -Eteocretan -Eteocretes -Eteocreton -eteostic -eterminable -eternal -eternalise -eternalised -eternalising -eternalism -eternalist -eternality -eternalization -eternalize -eternalized -eternalizing -eternally -eternalness -eternals -eterne -eternisation -eternise -eternised -eternises -eternish -eternising -eternity -eternities -eternization -eternize -eternized -eternizes -eternizing -etesian -etesians -ETF -ETFD -eth -eth- -Eth. -ethal -ethaldehyde -ethambutol -Ethan -ethanal -ethanamide -ethane -ethanedial -ethanediol -ethanedithiol -ethanes -ethanethial -ethanethiol -Ethanim -ethanoyl -ethanol -ethanolamine -ethanolysis -ethanols -Ethban -Ethben -Ethbin -Ethbinium -Ethbun -ethchlorvynol -Ethe -Ethel -Ethelbert -Ethelda -Ethelee -Ethelene -Ethelette -Ethelin -Ethelyn -Ethelind -Ethelinda -Etheline -etheling -Ethelynne -Ethelred -Ethelstan -Ethelsville -ethene -Etheneldeli -ethenes -ethenic -ethenyl -ethenoid -ethenoidal -ethenol -Etheostoma -Etheostomidae -Etheostominae -etheostomoid -ethephon -ether -etherate -ethereal -etherealisation -etherealise -etherealised -etherealising -etherealism -ethereality -etherealization -etherealize -etherealized -etherealizing -ethereally -etherealness -etherean -ethered -Etherege -etherene -ethereous -Etheria -etherial -etherialisation -etherialise -etherialised -etherialising -etherialism -etherialization -etherialize -etherialized -etherializing -etherially -etheric -etherical -etherify -etherification -etherified -etherifies -etherifying -etheriform -Etheriidae -etherin -etherion -etherish -etherism -etherization -etherize -etherized -etherizer -etherizes -etherizing -etherlike -ethernet -ethernets -etherol -etherolate -etherous -ethers -ether's -ethic -ethical -ethicalism -ethicality -ethicalities -ethically -ethicalness -ethicals -ethician -ethicians -ethicism -ethicist -ethicists -ethicize -ethicized -ethicizes -ethicizing -ethico- -ethicoaesthetic -ethicophysical -ethicopolitical -ethicoreligious -ethicosocial -ethics -ethid -ethide -ethidene -Ethyl -ethylamide -ethylamime -ethylamin -ethylamine -ethylate -ethylated -ethylates -ethylating -ethylation -ethylbenzene -ethyldichloroarsine -Ethyle -ethylenation -ethylene -ethylenediamine -ethylenes -ethylenic -ethylenically -ethylenimine -ethylenoid -ethylhydrocupreine -ethylic -ethylidene -ethylidyne -ethylin -ethylmorphine -ethyls -ethylsulphuric -ethylthioethane -ethylthioether -ethinamate -ethine -ethyne -ethynes -ethinyl -ethynyl -ethynylation -ethinyls -ethynyls -ethiodide -ethion -ethionamide -ethionic -ethionine -ethions -Ethiop -Ethiope -Ethiopia -Ethiopian -ethiopians -Ethiopic -ethiops -ethysulphuric -ethize -Ethlyn -ethmyphitis -ethmo- -ethmofrontal -ethmoid -ethmoidal -ethmoiditis -ethmoids -ethmolachrymal -ethmolith -ethmomaxillary -ethmonasal -ethmopalatal -ethmopalatine -ethmophysal -ethmopresphenoidal -ethmose -ethmosphenoid -ethmosphenoidal -ethmoturbinal -ethmoturbinate -ethmovomer -ethmovomerine -ethnal -ethnarch -ethnarchy -ethnarchies -ethnarchs -ethnic -ethnical -ethnically -ethnicism -ethnicist -ethnicity -ethnicities -ethnicize -ethnicon -ethnics -ethnish -ethnize -ethno- -ethnobiology -ethnobiological -ethnobotany -ethnobotanic -ethnobotanical -ethnobotanist -ethnocentric -ethnocentrically -ethnocentricity -ethnocentrism -ethnocracy -ethnodicy -ethnoflora -ethnog -ethnogeny -ethnogenic -ethnogenies -ethnogenist -ethnogeographer -ethnogeography -ethnogeographic -ethnogeographical -ethnogeographically -ethnographer -ethnography -ethnographic -ethnographical -ethnographically -ethnographies -ethnographist -ethnohistory -ethnohistorian -ethnohistoric -ethnohistorical -ethnohistorically -ethnol -ethnol. -ethnolinguist -ethnolinguistic -ethnolinguistics -ethnologer -ethnology -ethnologic -ethnological -ethnologically -ethnologies -ethnologist -ethnologists -ethnomaniac -ethnomanic -ethnomusicology -ethnomusicological -ethnomusicologically -ethnomusicologist -ethnopsychic -ethnopsychology -ethnopsychological -ethnos -ethnoses -ethnotechnics -ethnotechnography -ethnozoology -ethnozoological -ethography -etholide -ethology -ethologic -ethological -ethologically -ethologies -ethologist -ethologists -ethonomic -ethonomics -ethonone -ethopoeia -ethopoetic -ethos -ethoses -ethoxy -ethoxycaffeine -ethoxide -ethoxies -ethoxyethane -ethoxyl -ethoxyls -ethrog -ethrogim -ethrogs -eths -ety -etiam -etic -Etienne -etym -etyma -etymic -etymography -etymol -etymologer -etymology -etymologic -etymological -etymologically -etymologicon -etymologies -etymologisable -etymologise -etymologised -etymologising -etymologist -etymologists -etymologizable -etymologization -etymologize -etymologized -etymologizing -etymon -etymonic -etymons -etiogenic -etiolate -etiolated -etiolates -etiolating -etiolation -etiolin -etiolize -etiology -etiologic -etiological -etiologically -etiologies -etiologist -etiologue -etiophyllin -etioporphyrin -etiotropic -etiotropically -etypic -etypical -etypically -etiquet -etiquette -etiquettes -etiquettical -Etiwanda -Etka -ETLA -Etlan -ETN -Etna -etnas -Etnean -ETO -etoffe -Etoile -etoiles -Etom -Eton -Etonian -etouffe -etourderie -Etowah -ETR -Etra -Etrem -etrenne -etrier -etrog -etrogim -etrogs -Etruria -Etrurian -Etruscan -etruscans -Etruscology -Etruscologist -Etrusco-roman -ETS -ETSACI -ETSI -ETSSP -Etta -Ettabeth -Ettari -Ettarre -ette -ettercap -Etters -Etterville -Etti -Etty -Ettie -Ettinger -ettirone -ettle -ettled -ettling -Ettore -Ettrick -etua -etude -etudes -etui -etuis -etuve -etuvee -ETV -etwas -etwee -etwees -etwite -Etz -Etzel -Eu -eu- -Euaechme -Euahlayi -euangiotic -Euascomycetes -euaster -eubacteria -Eubacteriales -eubacterium -Eubank -Eubasidii -Euboea -Euboean -Euboic -Eubranchipus -eubteria -Eubuleus -EUC -eucaine -eucaines -eucairite -eucalyn -eucalypt -eucalypteol -eucalypti -eucalyptian -eucalyptic -eucalyptography -eucalyptol -eucalyptole -eucalypts -Eucalyptus -eucalyptuses -Eucarida -eucaryote -eucaryotic -eucarpic -eucarpous -eucatropine -eucephalous -eucgia -Eucha -Eucharis -eucharises -Eucharist -eucharistial -Eucharistic -Eucharistical -Eucharistically -eucharistize -eucharistized -eucharistizing -eucharists -Eucharitidae -Euchenor -euchymous -euchysiderite -Euchite -Euchlaena -euchlorhydria -euchloric -euchlorine -euchlorite -Euchlorophyceae -euchology -euchologia -euchological -euchologies -euchologion -Euchorda -euchre -euchred -euchres -euchring -euchroic -euchroite -euchromatic -euchromatin -euchrome -euchromosome -euchrone -eucyclic -euciliate -Eucirripedia -Eucken -euclase -euclases -Euclea -eucleid -Eucleidae -Euclid -Euclidean -Euclideanism -Euclides -Euclidian -Eucnemidae -eucolite -Eucommia -Eucommiaceae -eucone -euconic -Euconjugatae -Eucopepoda -Eucosia -eucosmid -Eucosmidae -eucrasy -eucrasia -eucrasite -eucre -Eucryphia -Eucryphiaceae -eucryphiaceous -eucryptite -eucrystalline -eucrite -eucrites -eucritic -Euctemon -eucti -euctical -euda -eudaemon -eudaemony -eudaemonia -eudaemonic -eudaemonical -eudaemonics -eudaemonism -eudaemonist -eudaemonistic -eudaemonistical -eudaemonistically -eudaemonize -eudaemons -eudaimonia -eudaimonism -eudaimonist -eudalene -Eudemian -eudemon -eudemony -eudemonia -eudemonic -eudemonics -eudemonism -eudemonist -eudemonistic -eudemonistical -eudemonistically -eudemons -Eudendrium -eudesmol -Eudeve -eudiagnostic -eudialyte -eudiaphoresis -eudidymite -eudiometer -eudiometry -eudiometric -eudiometrical -eudiometrically -eudipleural -Eudyptes -Eudist -Eudo -Eudoca -Eudocia -Eudora -Eudorina -Eudorus -Eudosia -Eudoxia -Eudoxian -Eudoxus -Eudromias -euectic -Euell -euemerism -Euemerus -Euergetes -Eufaula -euflavine -eu-form -Eug -euge -Eugen -Eugene -eugenesic -eugenesis -eugenetic -eugeny -Eugenia -eugenias -eugenic -eugenical -eugenically -eugenicist -eugenicists -eugenics -Eugenides -Eugenie -Eugenio -eugenism -eugenist -eugenists -Eugenius -Eugeniusz -Eugenle -eugenol -eugenolate -eugenols -eugeosynclinal -eugeosyncline -Eugine -Euglandina -Euglena -Euglenaceae -Euglenales -euglenas -Euglenida -Euglenidae -Euglenineae -euglenoid -Euglenoidina -euglobulin -Eugnie -eugonic -eugranitic -Eugregarinida -Eugubine -Eugubium -Euh -euhages -euharmonic -euhedral -euhemerise -euhemerised -euhemerising -euhemerism -euhemerist -euhemeristic -euhemeristically -euhemerize -euhemerized -euhemerizing -Euhemerus -euhyostyly -euhyostylic -Euippe -eukairite -eukaryote -euktolite -Eula -eulachan -eulachans -eulachon -eulachons -Eulalee -Eulalia -Eulaliah -Eulalie -eulamellibranch -Eulamellibranchia -Eulamellibranchiata -eulamellibranchiate -Eulau -Eulee -Eulenspiegel -Euler -Euler-Chelpin -Eulerian -Euless -Eulima -Eulimidae -Eulis -eulysite -eulytin -eulytine -eulytite -eulogy -eulogia -eulogiae -eulogias -eulogic -eulogical -eulogically -eulogies -eulogious -eulogisation -eulogise -eulogised -eulogiser -eulogises -eulogising -eulogism -eulogist -eulogistic -eulogistical -eulogistically -eulogists -eulogium -eulogiums -eulogization -eulogize -eulogized -eulogizer -eulogizers -eulogizes -eulogizing -eulophid -Eumaeus -Eumedes -eumelanin -Eumelus -eumemorrhea -Eumenes -eumenid -Eumenidae -Eumenidean -Eumenides -eumenorrhea -eumerism -eumeristic -eumerogenesis -eumerogenetic -eumeromorph -eumeromorphic -eumycete -Eumycetes -eumycetic -eumitosis -eumitotic -eumoiriety -eumoirous -Eumolpides -eumolpique -Eumolpus -eumorphic -eumorphous -eundem -Eunectes -EUNET -Euneus -Eunice -eunicid -Eunicidae -eunomy -Eunomia -Eunomian -Eunomianism -Eunomus -Eunson -eunuch -eunuchal -eunuchise -eunuchised -eunuchising -eunuchism -eunuchize -eunuchized -eunuchizing -eunuchoid -eunuchoidism -eunuchry -eunuchs -euodic -euomphalid -Euomphalus -euonym -euonymy -euonymin -euonymous -Euonymus -euonymuses -Euornithes -euornithic -Euorthoptera -euosmite -euouae -eupad -Eupanorthidae -Eupanorthus -eupathy -eupatory -eupatoriaceous -eupatorin -eupatorine -Eupatorium -eupatrid -eupatridae -eupatrids -eupepsy -eupepsia -eupepsias -eupepsies -eupeptic -eupeptically -eupepticism -eupepticity -Euphausia -Euphausiacea -euphausid -euphausiid -Euphausiidae -Eupheemia -euphemy -Euphemia -Euphemiah -euphemian -Euphemie -euphemious -euphemiously -euphemisation -euphemise -euphemised -euphemiser -euphemising -euphemism -euphemisms -euphemism's -euphemist -euphemistic -euphemistical -euphemistically -euphemization -euphemize -euphemized -euphemizer -euphemizing -euphemous -Euphemus -euphenic -euphenics -euphyllite -Euphyllopoda -euphon -euphone -euphonetic -euphonetics -euphony -euphonia -euphoniad -euphonic -euphonical -euphonically -euphonicalness -euphonies -euphonym -euphonious -euphoniously -euphoniousness -euphonise -euphonised -euphonising -euphonism -euphonium -euphonize -euphonized -euphonizing -euphonon -euphonous -Euphorbia -Euphorbiaceae -euphorbiaceous -euphorbial -euphorbine -euphorbium -Euphorbus -euphory -euphoria -euphoriant -euphorias -euphoric -euphorically -Euphorion -euphotic -euphotide -euphrasy -Euphrasia -euphrasies -Euphratean -Euphrates -Euphremia -euphroe -euphroes -Euphrosyne -Euphues -euphuism -euphuisms -euphuist -euphuistic -euphuistical -euphuistically -euphuists -euphuize -euphuized -euphuizing -eupion -eupione -eupyrchroite -eupyrene -eupyrion -eupittone -eupittonic -euplastic -Euplectella -Euplexoptera -Euplocomi -Euploeinae -euploid -euploidy -euploidies -euploids -Euplotes -euplotid -eupnea -eupneas -eupneic -eupnoea -eupnoeas -eupnoeic -Eupolidean -Eupolyzoa -eupolyzoan -Eupomatia -Eupomatiaceae -Eupora -eupotamic -eupractic -eupraxia -Euprepia -Euproctis -eupsychics -Euptelea -Eupterotidae -Eur -Eur- -Eur. -Eurafric -Eurafrican -Euramerican -Euraquilo -Eurasia -Eurasian -Eurasianism -eurasians -Eurasiatic -Euratom -Eure -Eure-et-Loir -Eureka -eurhythmy -eurhythmic -eurhythmical -eurhythmics -eurhodine -eurhodol -eury- -Euryalae -Euryale -Euryaleae -euryalean -Euryalida -euryalidan -Euryalus -Eurybates -eurybath -eurybathic -eurybenthic -Eurybia -eurycephalic -eurycephalous -Eurycerotidae -eurycerous -eurychoric -Euryclea -Euryclia -Eurydamas -Euridice -Euridyce -Eurydice -Eurygaea -Eurygaean -Euryganeia -eurygnathic -eurygnathism -eurygnathous -euryhaline -Eurylaimi -Eurylaimidae -eurylaimoid -Eurylaimus -Eurylochus -Eurymachus -Eurymede -Eurymedon -Eurymus -Eurindic -Eurynome -euryoky -euryon -Eurypelma -euryphage -euryphagous -Eurypharyngidae -Eurypharynx -euripi -Euripidean -Euripides -Eurypyga -Eurypygae -Eurypygidae -eurypylous -Eurypylus -euripos -Eurippa -euryprognathous -euryprosopic -eurypterid -Eurypterida -eurypteroid -Eurypteroidea -Eurypterus -euripupi -euripus -Eurysaces -euryscope -Eurysthenes -Eurystheus -eurystomatous -eurite -euryte -eurytherm -eurythermal -eurythermic -eurithermophile -eurithermophilic -eurythermous -eurythmy -eurythmic -eurythmical -eurythmics -eurythmies -Eurytion -eurytomid -Eurytomidae -eurytopic -eurytopicity -eurytropic -Eurytus -euryzygous -euro -Euro- -Euro-American -Euroaquilo -eurobin -euro-boreal -eurocentric -Euroclydon -Eurocommunism -Eurocrat -Eurodollar -Eurodollars -euroky -eurokies -eurokous -Euromarket -Euromart -Europa -europaeo- -Europan -Europasian -Europe -European -Europeanisation -Europeanise -Europeanised -Europeanising -Europeanism -Europeanization -Europeanize -Europeanized -Europeanizing -Europeanly -europeans -Europeo-american -Europeo-asiatic -Europeo-siberian -Europeward -europhium -europium -europiums -Europocentric -Europoort -euros -Eurotas -eurous -Eurovision -Eurus -Euscaro -Eusebian -Eusebio -Eusebius -Euselachii -eusynchite -Euskaldun -Euskara -Euskarian -Euskaric -Euskera -eusol -Euspongia -eusporangiate -Eustace -Eustache -Eustachian -Eustachio -eustachium -Eustachius -eustacy -Eustacia -eustacies -Eustashe -Eustasius -Eustathian -eustatic -eustatically -Eustatius -Eustazio -eustele -eusteles -Eusthenopteron -eustyle -Eustis -eustomatous -Eusuchia -eusuchian -Eutaenia -eutannin -Eutaw -Eutawville -eutaxy -eutaxic -eutaxie -eutaxies -eutaxite -eutaxitic -eutechnic -eutechnics -eutectic -eutectics -eutectoid -eutelegenic -Euterpe -Euterpean -eutexia -Euthamia -euthanasy -euthanasia -euthanasias -euthanasic -euthanatize -euthenasia -euthenic -euthenics -euthenist -Eutheria -eutherian -euthermic -Euthycomi -euthycomic -euthymy -Euthyneura -euthyneural -euthyneurous -euthyroid -euthytatic -euthytropic -Eutychian -Eutychianism -Eutychianus -eu-type -eutocia -eutomous -Euton -eutony -Eutopia -Eutopian -eutrophy -eutrophic -eutrophication -eutrophies -eutropic -eutropous -EUUG -EUV -EUVE -euvrou -euxanthate -euxanthic -euxanthin -euxanthone -euxenite -euxenites -Euxine -EV -EVA -evacuant -evacuants -evacuate -evacuated -evacuates -evacuating -evacuation -evacuations -evacuative -evacuator -evacuators -evacue -evacuee -evacuees -evadable -Evadale -evade -evaded -evader -evaders -evades -evadible -evading -evadingly -Evadne -Evadnee -evagation -evaginable -evaginate -evaginated -evaginating -evagination -eval -Evaleen -Evalyn -evaluable -evaluate -evaluated -evaluates -evaluating -evaluation -evaluations -evaluative -evaluator -evaluators -evaluator's -evalue -Evan -Evander -evanesce -evanesced -evanescence -evanescency -evanescenrly -evanescent -evanescently -evanesces -evanescible -evanescing -Evang -evangel -evangelary -evangely -Evangelia -evangelian -evangeliary -evangeliaries -evangeliarium -evangelic -Evangelical -Evangelicalism -evangelicality -evangelically -evangelicalness -evangelicals -evangelican -evangelicism -evangelicity -Evangelin -Evangelina -Evangeline -evangelion -evangelisation -evangelise -evangelised -evangeliser -evangelising -evangelism -evangelisms -Evangelist -evangelistary -evangelistaries -evangelistarion -evangelistarium -evangelistic -evangelistically -evangelistics -Evangelists -evangelistship -evangelium -evangelization -evangelize -evangelized -evangelizer -evangelizes -evangelizing -Evangels -Evania -evanid -Evaniidae -evanish -evanished -evanishes -evanishing -evanishment -evanition -Evanne -Evannia -Evans -Evansdale -evansite -Evansport -evans-root -Evanston -Evansville -Evant -Evante -Evanthe -Evanthia -evap -evaporability -evaporable -evaporate -evaporated -evaporates -evaporating -evaporation -evaporations -evaporative -evaporatively -evaporativity -evaporator -evaporators -evaporimeter -evaporite -evaporitic -evaporize -evaporometer -evapotranspiration -Evarglice -Evaristus -Evars -Evart -Evarts -evase -evasible -evasion -evasional -evasions -evasive -evasively -evasiveness -evasivenesses -Evatt -Eve -Evea -evechurr -eve-churr -eveck -evectant -evected -evectic -evection -evectional -evections -evector -Evehood -Evey -evejar -eve-jar -Eveleen -Eveless -Eveleth -evelight -Evelin -Evelyn -Evelina -Eveline -Evelinn -Evelynne -evelong -Evelunn -Evemerus -Even -even- -evenblush -Even-christian -Evendale -evendown -evene -evened -even-edged -evener -eveners -evener-up -evenest -evenfall -evenfalls -evenforth -evenglome -evenglow -evenhand -evenhanded -even-handed -evenhandedly -even-handedly -evenhandedness -even-handedness -evenhead -evening -evening-dressed -evening-glory -evenings -evening's -Eveningshade -evening-snow -evenly -evenlight -evenlong -evenmete -evenminded -even-minded -evenmindedness -even-mindedness -even-money -evenness -evennesses -even-numbered -even-old -evenoo -even-paged -even-pleached -evens -even-set -evensong -evensongs -even-spun -even-star -even-steven -Evensville -event -eventail -even-tempered -even-tenored -eventerate -eventful -eventfully -eventfulness -eventide -eventides -eventilate -eventime -eventless -eventlessly -eventlessness -even-toed -eventognath -Eventognathi -eventognathous -even-toothed -eventration -events -event's -eventual -eventuality -eventualities -eventualize -eventually -eventuate -eventuated -eventuates -eventuating -eventuation -eventuations -Eventus -even-up -Evenus -even-wayed -evenwise -evenworthy -eveque -ever -ever-abiding -ever-active -ever-admiring -ever-angry -Everara -Everard -everbearer -everbearing -ever-bearing -ever-being -ever-beloved -ever-blazing -ever-blessed -everbloomer -everblooming -ever-blooming -ever-burning -ever-celebrated -ever-changeful -ever-changing -ever-circling -ever-conquering -ever-constant -ever-craving -ever-dear -ever-deepening -ever-dying -ever-dripping -ever-drizzling -ever-dropping -Everdur -ever-durable -everduring -ever-during -ever-duringness -Eveready -ever-echoing -Evered -ever-endingly -Everes -Everest -ever-esteemed -Everett -Everetts -Everettville -ever-expanding -ever-faithful -ever-fast -ever-fertile -ever-fresh -ever-friendly -everglade -Everglades -ever-glooming -ever-goading -ever-going -Evergood -Evergreen -evergreenery -evergreenite -evergreens -ever-growing -ever-happy -Everhart -ever-honored -every -everybody -everich -Everick -everyday -everydayness -everydeal -everyhow -everylike -Everyman -everymen -ever-increasing -everyness -everyone -everyone's -ever-young -everyplace -everything -everyway -every-way -everywhen -everywhence -everywhere -everywhere-dense -everywhereness -everywheres -everywhither -everywoman -everlasting -everlastingly -everlastingness -Everly -everliving -ever-living -ever-loving -ever-mingling -evermo -evermore -ever-moving -everness -ever-new -Evernia -evernioid -ever-noble -ever-present -ever-prompt -ever-ready -ever-recurrent -ever-recurring -ever-renewing -Everrs -Evers -everse -eversible -eversion -eversions -eversive -ever-smiling -Eversole -Everson -eversporting -ever-strong -Evert -evertebral -Evertebrata -evertebrate -everted -ever-thrilling -evertile -everting -Everton -evertor -evertors -everts -ever-varying -ever-victorious -ever-wearing -everwhich -ever-white -everwho -ever-widening -ever-willing -ever-wise -eves -evese -Evesham -evestar -eve-star -evetide -Evetta -Evette -eveweed -evg -Evy -Evian-les-Bains -evibrate -evicke -evict -evicted -evictee -evictees -evicting -eviction -evictions -eviction's -evictor -evictors -evicts -evidence -evidenced -evidence-proof -evidences -evidencing -evidencive -evident -evidential -evidentially -evidentiary -evidently -evidentness -Evie -evigilation -evil -evil-affected -evil-affectedness -evil-boding -evil-complexioned -evil-disposed -evildoer -evildoers -evildoing -evil-doing -Evyleen -evil-eyed -eviler -evilest -evil-faced -evil-fashioned -evil-favored -evil-favoredly -evil-favoredness -evil-favoured -evil-featured -evil-fortuned -evil-gotten -evil-headed -evilhearted -evil-hued -evil-humored -evil-impregnated -eviller -evillest -evilly -evil-looking -evil-loved -evil-mannered -evil-minded -evil-mindedly -evil-mindedness -evilmouthed -evil-mouthed -evilness -evilnesses -evil-ordered -evil-pieced -evilproof -evil-qualitied -evils -evilsayer -evil-savored -evil-shaped -evil-shapen -evil-smelling -evil-sounding -evil-sown -evilspeaker -evilspeaking -evil-spun -evil-starred -evil-taught -evil-tempered -evil-thewed -evil-thoughted -evil-tongued -evil-weaponed -evil-willed -evilwishing -evil-won -Evin -Evyn -evince -evinced -evincement -evinces -evincible -evincibly -evincing -evincingly -evincive -Evington -Evinston -Evipal -evirate -eviration -evirato -evirtuate -eviscerate -eviscerated -eviscerates -eviscerating -evisceration -eviscerations -eviscerator -evisite -Evita -evitable -evitate -evitation -evite -evited -eviternal -evites -eviting -evittate -Evius -Evnissyen -evocable -evocate -evocated -evocating -evocation -evocations -evocative -evocatively -evocativeness -evocator -evocatory -evocators -evocatrix -Evodia -evoe -Evoy -evoke -evoked -evoker -evokers -evokes -evoking -evolate -evolute -evolutes -evolute's -evolutility -evolution -evolutional -evolutionally -evolutionary -evolutionarily -evolutionism -evolutionist -evolutionistic -evolutionistically -evolutionists -evolutionize -evolutions -evolution's -evolutive -evolutoid -evolvable -evolve -evolved -evolvement -evolvements -evolvent -evolver -evolvers -evolves -evolving -evolvulus -evomit -Evonymus -evonymuses -Evonne -Evora -evovae -Evreux -Evros -Evslin -Evtushenko -evulgate -evulgation -evulge -evulse -evulsion -evulsions -Evva -Evvy -Evvie -evviva -Evvoia -EVX -evzone -evzones -EW -Ewa -Ewald -Ewall -Ewan -Eward -Ewart -ewder -Ewe -ewe-daisy -ewe-gowan -ewelease -Ewell -Ewen -ewe-neck -ewe-necked -Ewens -Ewer -ewerer -ewery -eweries -ewers -ewes -ewe's -ewest -ewhow -Ewig-weibliche -Ewing -EWO -Ewold -EWOS -ewound -ewry -EWS -ewte -Ex -ex- -Ex. -exa- -exacerbate -exacerbated -exacerbates -exacerbating -exacerbatingly -exacerbation -exacerbations -exacerbescence -exacerbescent -exacervation -exacinate -exact -exacta -exactable -exactas -exacted -exacter -exacters -exactest -exacting -exactingly -exactingness -exaction -exactions -exaction's -exactitude -exactitudes -exactive -exactiveness -exactly -exactment -exactness -exactnesses -exactor -exactors -exactress -exacts -exactus -exacuate -exacum -exadverso -exadversum -exaestuate -exaggerate -exaggerated -exaggeratedly -exaggeratedness -exaggerates -exaggerating -exaggeratingly -exaggeration -exaggerations -exaggerative -exaggeratively -exaggerativeness -exaggerator -exaggeratory -exaggerators -exagitate -exagitation -exairesis -exalate -exalbuminose -exalbuminous -exallotriote -exalt -exaltate -exaltation -exaltations -exaltative -exalte -exalted -exaltedly -exaltedness -exaltee -exalter -exalters -exalting -exaltment -exalts -exam -examen -examens -exameter -examinability -examinable -examinant -examinate -examination -examinational -examinationism -examinationist -examinations -examination's -examinative -examinator -examinatory -examinatorial -examine -examined -examinee -examinees -examine-in-chief -examiner -examiners -examinership -examines -examining -examiningly -examplar -example -exampled -exampleless -examples -example's -exampleship -exampless -exampling -exams -exam's -exanguin -exanimate -exanimation -exannulate -exanthalose -exanthem -exanthema -exanthemas -exanthemata -exanthematic -exanthematous -exanthems -exanthine -exantlate -exantlation -exappendiculate -exarate -exaration -exarch -exarchal -exarchate -exarchateship -exarchy -Exarchic -exarchies -Exarchist -exarchs -exareolate -exarillate -exaristate -ex-army -exarteritis -exarticulate -exarticulation -exasper -exasperate -exasperated -exasperatedly -exasperater -exasperates -exasperating -exasperatingly -exasperation -exasperations -exasperative -exaspidean -exauctorate -Exaudi -exaugurate -exauguration -exaun -exauthorate -exauthorize -exauthorizeexc -Exc -Exc. -excalate -excalation -excalcarate -excalceate -excalceation -excalfaction -Excalibur -excamb -excamber -excambion -excandescence -excandescency -excandescent -excantation -excardination -excarnate -excarnation -excarnificate -ex-cathedra -excathedral -excaudate -excavate -excavated -excavates -excavating -excavation -excavational -excavationist -excavations -excavator -excavatory -excavatorial -excavators -excave -excecate -excecation -excedent -Excedrin -exceed -exceedable -exceeded -exceeder -exceeders -exceeding -exceedingly -exceedingness -exceeds -excel -excelente -excelled -Excellence -excellences -Excellency -excellencies -excellent -excellently -excelling -Excello -excels -excelse -excelsin -Excelsior -excelsitude -excentral -excentric -excentrical -excentricity -excepable -except -exceptant -excepted -excepter -excepting -exceptio -exception -exceptionability -exceptionable -exceptionableness -exceptionably -exceptional -exceptionalally -exceptionality -exceptionally -exceptionalness -exceptionary -exceptioner -exceptionless -exceptions -exception's -exceptious -exceptiousness -exceptive -exceptively -exceptiveness -exceptless -exceptor -excepts -excercise -excerebrate -excerebration -excern -excerp -excerpt -excerpta -excerpted -excerpter -excerptible -excerpting -excerption -excerptive -excerptor -excerpts -excess -excessed -excesses -excessive -excessively -excessiveness -excess-loss -excessman -excessmen -exch -exch. -exchange -exchangeability -exchangeable -exchangeably -exchanged -exchangee -exchanger -exchanges -exchanging -Exchangite -excheat -Exchequer -exchequer-chamber -exchequers -exchequer's -excide -excided -excides -exciding -excimer -excimers -excipient -exciple -exciples -excipula -Excipulaceae -excipular -excipule -excipuliform -excipulum -excircle -excisable -excise -excised -exciseman -excisemanship -excisemen -excises -excising -excision -excisions -excisor -excyst -excystation -excysted -excystment -excitability -excitabilities -excitable -excitableness -excitably -excitancy -excitant -excitants -excitate -excitation -excitations -excitation's -excitative -excitator -excitatory -excite -excited -excitedly -excitedness -excitement -excitements -exciter -exciters -excites -exciting -excitingly -excitive -excitoglandular -excitometabolic -excitomotion -excitomotor -excitomotory -excito-motory -excitomuscular -exciton -excitonic -excitons -excitonutrient -excitor -excitory -excitors -excitosecretory -excitovascular -excitron -excl -excl. -exclaim -exclaimed -exclaimer -exclaimers -exclaiming -exclaimingly -exclaims -exclam -exclamation -exclamational -exclamations -exclamation's -exclamative -exclamatively -exclamatory -exclamatorily -exclaustration -exclave -exclaves -exclosure -excludability -excludable -exclude -excluded -excluder -excluders -excludes -excludible -excluding -excludingly -exclusion -exclusionary -exclusioner -exclusionism -exclusionist -exclusions -exclusive -exclusively -exclusiveness -exclusivenesses -exclusivism -exclusivist -exclusivistic -exclusivity -exclusory -excoct -excoction -Excoecaria -excogitable -excogitate -excogitated -excogitates -excogitating -excogitation -excogitative -excogitator -excommenge -excommune -excommunicable -excommunicant -excommunicate -excommunicated -excommunicates -excommunicating -excommunication -excommunications -excommunicative -excommunicator -excommunicatory -excommunicators -excommunion -exconjugant -ex-consul -ex-convict -excoriable -excoriate -excoriated -excoriates -excoriating -excoriation -excoriations -excoriator -excorticate -excorticated -excorticating -excortication -excreation -excrement -excremental -excrementally -excrementary -excrementitial -excrementitious -excrementitiously -excrementitiousness -excrementive -excrementize -excrementous -excrements -excresce -excrescence -excrescences -excrescency -excrescencies -excrescent -excrescential -excrescently -excresence -excression -excreta -excretal -excrete -excreted -excreter -excreters -excretes -excreting -excretion -excretionary -excretions -excretitious -excretive -excretolic -excretory -excriminate -excruciable -excruciate -excruciated -excruciating -excruciatingly -excruciatingness -excruciation -excruciator -excubant -excubitoria -excubitorium -excubittoria -excud -excudate -excuderunt -excudit -exculpable -exculpate -exculpated -exculpates -exculpating -exculpation -exculpations -exculpative -exculpatory -exculpatorily -excur -excurrent -excurse -excursed -excursing -excursion -excursional -excursionary -excursioner -excursionism -excursionist -excursionists -excursionize -excursions -excursion's -excursive -excursively -excursiveness -excursory -excursus -excursuses -excurvate -excurvated -excurvation -excurvature -excurved -excusability -excusable -excusableness -excusably -excusal -excusation -excusative -excusator -excusatory -excuse -excused -excuseful -excusefully -excuseless -excuse-me -excuser -excusers -excuses -excusing -excusingly -excusive -excusively -excuss -excussed -excussing -excussio -excussion -ex-czar -exdelicto -exdie -ex-directory -exdividend -exeat -exec -exec. -execeptional -execrable -execrableness -execrably -execrate -execrated -execrates -execrating -execration -execrations -execrative -execratively -execrator -execratory -execrators -execs -exect -executable -executancy -executant -execute -executed -executer -executers -executes -executing -execution -executional -executioneering -executioner -executioneress -executioners -executionist -executions -executive -executively -executiveness -executives -executive's -executiveship -executonis -executor -executory -executorial -executors -executor's -executorship -executress -executry -executrices -executrix -executrixes -executrixship -exede -exedent -exedra -exedrae -exedral -exegeses -exegesis -exegesist -exegete -exegetes -exegetic -exegetical -exegetically -exegetics -exegetist -Exeland -exembryonate -ex-emperor -exempla -exemplar -exemplary -exemplaric -exemplarily -exemplariness -exemplarism -exemplarity -exemplars -exempli -exemplify -exemplifiable -exemplification -exemplificational -exemplifications -exemplificative -exemplificator -exemplified -exemplifier -exemplifiers -exemplifies -exemplifying -ex-employee -exemplum -exemplupla -exempt -exempted -exemptible -exemptile -exempting -exemption -exemptionist -exemptions -exemptive -exempts -exencephalia -exencephalic -exencephalous -exencephalus -exendospermic -exendospermous -ex-enemy -exenterate -exenterated -exenterating -exenteration -exenteritis -exequatur -exequy -exequial -exequies -exerce -exercent -exercisable -exercise -exercised -exerciser -exercisers -exercises -exercising -exercitant -exercitation -exercite -exercitor -exercitorial -exercitorian -exeresis -exergonic -exergual -exergue -exergues -exert -exerted -exerting -exertion -exertionless -exertions -exertion's -exertive -exerts -exes -exesion -exestuate -Exeter -exeunt -exfetation -exfiguration -exfigure -exfiltrate -exfiltration -exflagellate -exflagellation -exflect -exfodiate -exfodiation -exfoliate -exfoliated -exfoliating -exfoliation -exfoliative -exfoliatory -exgorgitation -ex-governor -exh- -exhalable -exhalant -exhalants -exhalate -exhalation -exhalations -exhalatory -exhale -exhaled -exhalent -exhalents -exhales -exhaling -exhance -exhaust -exhaustable -exhausted -exhaustedly -exhaustedness -exhauster -exhaustibility -exhaustible -exhausting -exhaustingly -exhaustion -exhaustions -exhaustive -exhaustively -exhaustiveness -exhaustivity -exhaustless -exhaustlessly -exhaustlessness -exhausts -exhbn -exhedra -exhedrae -exheredate -exheredation -exhibit -exhibitable -exhibitant -exhibited -exhibiter -exhibiters -exhibiting -exhibition -exhibitional -exhibitioner -exhibitionism -exhibitionist -exhibitionistic -exhibitionists -exhibitionize -exhibitions -exhibition's -exhibitive -exhibitively -exhibitor -exhibitory -exhibitorial -exhibitors -exhibitor's -exhibitorship -exhibits -exhilarant -exhilarate -exhilarated -exhilarates -exhilarating -exhilaratingly -exhilaration -exhilarations -exhilarative -exhilarator -exhilaratory -ex-holder -exhort -exhortation -exhortations -exhortation's -exhortative -exhortatively -exhortator -exhortatory -exhorted -exhorter -exhorters -exhorting -exhortingly -exhorts -exhumate -exhumated -exhumating -exhumation -exhumations -exhumator -exhumatory -exhume -exhumed -exhumer -exhumers -exhumes -exhuming -exhusband -exibilate -exies -exigeant -exigeante -exigence -exigences -exigency -exigencies -exigent -exigenter -exigently -exigible -exiguity -exiguities -exiguous -exiguously -exiguousness -exilable -exilarch -exilarchate -Exile -exiled -exiledom -exilement -exiler -exiles -exilian -exilic -exiling -exility -exilition -eximidus -eximious -eximiously -eximiousness -exinanite -exinanition -exindusiate -exine -exines -exing -exinguinal -exinite -exintine -ex-invalid -exion -Exira -exist -existability -existant -existed -existence -existences -existent -existential -existentialism -existentialist -existentialistic -existentialistically -existentialists -existentialist's -existentialize -existentially -existently -existents -exister -existibility -existible -existimation -existing -existless -existlessness -exists -exit -exitance -exite -exited -exitial -exiting -exition -exitious -exitless -exits -exiture -exitus -ex-judge -ex-kaiser -ex-king -exla -exlex -ex-libres -ex-librism -ex-librist -Exline -ex-mayor -exmeridian -ex-minister -Exmoor -Exmore -exo- -exoarteritis -Exoascaceae -exoascaceous -Exoascales -Exoascus -Exobasidiaceae -Exobasidiales -Exobasidium -exobiology -exobiological -exobiologist -exobiologists -exocannibalism -exocardia -exocardiac -exocardial -exocarp -exocarps -exocataphoria -exoccipital -exocentric -Exochorda -exochorion -exocyclic -Exocyclica -Exocycloida -exocytosis -exoclinal -exocline -exocoelar -exocoele -exocoelic -exocoelom -exocoelum -Exocoetidae -Exocoetus -exocolitis -exo-condensation -exocone -exocrine -exocrines -exocrinology -exocrinologies -exoculate -exoculated -exoculating -exoculation -Exod -Exod. -exode -exoderm -exodermal -exodermis -exoderms -exody -exodic -exodist -exodium -exodoi -exodontia -exodontic -exodontics -exodontist -exodos -exodromy -exodromic -Exodus -exoduses -exoenzyme -exoenzymic -exoergic -exoerythrocytic -ex-official -ex-officio -exogamy -exogamic -exogamies -exogamous -exogastric -exogastrically -exogastritis -exogen -Exogenae -exogenetic -exogeny -exogenic -exogenism -exogenous -exogenously -exogens -Exogyra -exognathion -exognathite -Exogonium -exograph -exolemma -exolete -exolution -exolve -exometritis -exomion -exomis -exomologesis -exomorphic -exomorphism -exomphalos -exomphalous -exomphalus -Exon -exonarthex -exoner -exonerate -exonerated -exonerates -exonerating -exoneration -exonerations -exonerative -exonerator -exonerators -exoneretur -exoneural -Exonian -exonic -exonym -exons -exonship -exonuclease -exonumia -exopathic -exopeptidase -exoperidium -exophagy -exophagous -exophasia -exophasic -exophoria -exophoric -exophthalmia -exophthalmic -exophthalmos -exophthalmus -exoplasm -exopod -exopodite -exopoditic -exopt -Exopterygota -exopterygote -exopterygotic -exopterygotism -exopterygotous -exor -exorability -exorable -exorableness -exorate -exorbital -exorbitance -exorbitancy -exorbitant -exorbitantly -exorbitate -exorbitation -exorcisation -exorcise -exorcised -exorcisement -exorciser -exorcisers -exorcises -exorcising -exorcism -exorcismal -exorcisms -exorcisory -exorcist -exorcista -exorcistic -exorcistical -exorcists -exorcization -exorcize -exorcized -exorcizement -exorcizer -exorcizes -exorcizing -exordia -exordial -exordium -exordiums -exordize -exorganic -exorhason -exormia -exornate -exornation -exortion -exosculation -exosepsis -exoskeletal -exoskeleton -exosmic -exosmose -exosmoses -exosmosis -exosmotic -exosperm -exosphere -exospheres -exospheric -exospherical -exosporal -exospore -exospores -exosporium -exosporous -exossate -exosseous -Exostema -exostome -exostosed -exostoses -exostosis -exostotic -exostra -exostracism -exostracize -exostrae -exotery -exoteric -exoterica -exoterical -exoterically -exotericism -exoterics -exotheca -exothecal -exothecate -exothecium -exothermal -exothermally -exothermic -exothermically -exothermicity -exothermous -exotic -exotica -exotically -exoticalness -exoticism -exoticisms -exoticist -exoticity -exoticness -exotics -exotism -exotisms -exotospore -exotoxic -exotoxin -exotoxins -exotropia -exotropic -exotropism -exp -exp. -expalpate -expand -expandability -expandable -expanded -expandedly -expandedness -expander -expanders -expander's -expandibility -expandible -expanding -expandingly -expandor -expands -expanse -expanses -expansibility -expansible -expansibleness -expansibly -expansile -expansion -expansional -expansionary -expansionism -expansionist -expansionistic -expansionists -expansions -expansive -expansively -expansiveness -expansivenesses -expansivity -expansometer -expansum -expansure -expatiate -expatiated -expatiater -expatiates -expatiating -expatiatingly -expatiation -expatiations -expatiative -expatiator -expatiatory -expatiators -expatriate -expatriated -expatriates -expatriating -expatriation -expatriations -expatriatism -expdt -expect -expectable -expectably -expectance -expectancy -expectancies -expectant -expectantly -expectation -expectations -expectation's -expectative -expected -expectedly -expectedness -expecter -expecters -expecting -expectingly -expection -expective -expectorant -expectorants -expectorate -expectorated -expectorates -expectorating -expectoration -expectorations -expectorative -expectorator -expectorators -expects -expede -expeded -expediate -expedience -expediences -expediency -expediencies -expedient -expediente -expediential -expedientially -expedientist -expediently -expedients -expediment -expeding -expedious -expeditate -expeditated -expeditating -expeditation -expedite -expedited -expeditely -expediteness -expediter -expediters -expedites -expediting -expedition -expeditionary -expeditionist -expeditions -expedition's -expeditious -expeditiously -expeditiousness -expeditive -expeditor -expel -expellable -expellant -expelled -expellee -expellees -expellent -expeller -expellers -expelling -expels -expend -expendability -expendable -expendables -expended -expender -expenders -expendible -expending -expenditor -expenditrix -expenditure -expenditures -expenditure's -expends -expense -expensed -expenseful -expensefully -expensefulness -expenseless -expenselessness -expenses -expensilation -expensing -expensive -expensively -expensiveness -expenthesis -expergefacient -expergefaction -experience -experienceable -experienced -experienceless -experiencer -experiences -experiencible -experiencing -experient -experiential -experientialism -experientialist -experientialistic -experientially -experiment -experimental -experimentalism -experimentalist -experimentalists -experimentalize -experimentally -experimentarian -experimentation -experimentations -experimentation's -experimentative -experimentator -experimented -experimentee -experimenter -experimenters -experimenting -experimentist -experimentize -experimently -experimentor -experiments -expermentized -experrection -expert -experted -experting -expertise -expertised -expertises -expertising -expertism -expertize -expertized -expertizing -expertly -expertness -expertnesses -experts -expertship -expetible -expy -expiable -expiate -expiated -expiates -expiating -expiation -expiational -expiations -expiatist -expiative -expiator -expiatory -expiatoriness -expiators -ex-pier -expilate -expilation -expilator -expirable -expirant -expirate -expiration -expirations -expiration's -expirator -expiratory -expire -expired -expiree -expirer -expirers -expires -expiry -expiries -expiring -expiringly -expiscate -expiscated -expiscating -expiscation -expiscator -expiscatory -explain -explainability -explainable -explainableness -explained -explainer -explainers -explaining -explainingly -explains -explait -explanate -explanation -explanations -explanation's -explanative -explanatively -explanato- -explanator -explanatory -explanatorily -explanatoriness -explanitory -explant -explantation -explanted -explanting -explants -explat -explees -explement -explemental -explementary -explete -expletive -expletively -expletiveness -expletives -expletory -explicability -explicable -explicableness -explicably -explicanda -explicandum -explicans -explicantia -explicate -explicated -explicates -explicating -explication -explications -explicative -explicatively -explicator -explicatory -explicators -explicit -explicitly -explicitness -explicitnesses -explicits -explida -explodable -explode -exploded -explodent -exploder -exploders -explodes -exploding -exploit -exploitable -exploitage -exploitation -exploitationist -exploitations -exploitation's -exploitative -exploitatively -exploitatory -exploited -exploitee -exploiter -exploiters -exploiting -exploitive -exploits -exploiture -explorable -explorate -exploration -explorational -explorations -exploration's -explorative -exploratively -explorativeness -explorator -exploratory -explore -explored -explorement -Explorer -explorers -explores -exploring -exploringly -explosibility -explosible -explosimeter -explosion -explosionist -explosion-proof -explosions -explosion's -explosive -explosively -explosiveness -explosives -EXPO -expoliate -expolish -expone -exponence -exponency -exponent -exponential -exponentially -exponentials -exponentiate -exponentiated -exponentiates -exponentiating -exponentiation -exponentiations -exponentiation's -exponention -exponents -exponent's -exponible -export -exportability -exportable -exportation -exportations -exported -exporter -exporters -exporting -exports -expos -exposable -exposal -exposals -expose -exposed -exposedness -exposer -exposers -exposes -exposing -exposit -exposited -expositing -exposition -expositional -expositionary -expositions -exposition's -expositive -expositively -expositor -expository -expositorial -expositorially -expositorily -expositoriness -expositors -expositress -exposits -expostulate -expostulated -expostulates -expostulating -expostulatingly -expostulation -expostulations -expostulative -expostulatively -expostulator -expostulatory -exposture -exposure -exposures -exposure's -expound -expoundable -expounded -expounder -expounders -expounding -expounds -ex-praetor -expreme -ex-president -express -expressable -expressage -expressed -expresser -expresses -expressibility -expressible -expressibly -expressing -expressio -expression -expressionable -expressional -expressionful -Expressionism -Expressionismus -Expressionist -Expressionistic -Expressionistically -expressionists -expressionless -expressionlessly -expressionlessness -expressions -expression's -expressive -expressively -expressiveness -expressivenesses -expressivism -expressivity -expressless -expressly -expressman -expressmen -expressness -expresso -expressor -expressure -expressway -expressways -exprimable -exprobate -exprobrate -exprobration -exprobratory -expromission -expromissor -expropriable -expropriate -expropriated -expropriates -expropriating -expropriation -expropriations -expropriator -expropriatory -expt -exptl -expugn -expugnable -expuition -expulsatory -expulse -expulsed -expulser -expulses -expulsing -expulsion -expulsionist -expulsions -expulsive -expulsory -expunction -expunge -expungeable -expunged -expungement -expunger -expungers -expunges -expunging -expurgate -expurgated -expurgates -expurgating -expurgation -expurgational -expurgations -expurgative -expurgator -expurgatory -expurgatorial -expurgators -expurge -expwy -ex-quay -exquire -exquisite -exquisitely -exquisiteness -exquisitism -exquisitive -exquisitively -exquisitiveness -exr -exr. -exradio -exradius -ex-rights -exrupeal -exrx -exsanguinate -exsanguinated -exsanguinating -exsanguination -exsanguine -exsanguineous -exsanguinity -exsanguinous -exsanguious -exscind -exscinded -exscinding -exscinds -exscissor -exscribe -exscript -exscriptural -exsculp -exsculptate -exscutellate -exsec -exsecant -exsecants -exsect -exsected -exsectile -exsecting -exsection -exsector -exsects -exsequatur -exsert -exserted -exsertile -exserting -exsertion -exserts -ex-service -ex-serviceman -ex-servicemen -exsheath -exship -ex-ship -exsibilate -exsibilation -exsiccant -exsiccatae -exsiccate -exsiccated -exsiccating -exsiccation -exsiccative -exsiccator -exsiliency -exsolution -exsolve -exsolved -exsolving -exsomatic -exspoliation -exspuition -exsputory -exstemporal -exstemporaneous -exstill -exstimulate -exstipulate -exstrophy -exstruct -exsuccous -exsuction -exsudate -exsufflate -exsufflation -exsufflicate -exsuperance -exsuperate -exsurge -exsurgent -exsuscitate -ext -ext. -exta -extacie -extance -extancy -extant -Extasie -Extasiie -extatic -extbook -extemporal -extemporally -extemporalness -extemporaneity -extemporaneous -extemporaneously -extemporaneousness -extemporary -extemporarily -extemporariness -extempore -extempory -extemporisation -extemporise -extemporised -extemporiser -extemporising -extemporization -extemporize -extemporized -extemporizer -extemporizes -extemporizing -extend -extendability -extendable -extended -extendedly -extendedness -extended-play -extender -extenders -extendibility -extendible -extending -extendlessness -extends -extense -extensibility -extensible -extensibleness -extensile -extensimeter -extension -extensional -extensionalism -extensionality -extensionally -extensionist -extensionless -extensions -extension's -extensity -extensive -extensively -extensiveness -extensivity -extensometer -extensor -extensory -extensors -extensum -extensure -extent -extentions -extents -extent's -extenuate -extenuated -extenuates -extenuating -extenuatingly -extenuation -extenuations -extenuative -extenuator -extenuatory -exter -exterior -exteriorate -exterioration -exteriorisation -exteriorise -exteriorised -exteriorising -exteriority -exteriorization -exteriorize -exteriorized -exteriorizing -exteriorly -exteriorness -exteriors -exterior's -exter-marriage -exterminable -exterminate -exterminated -exterminates -exterminating -extermination -exterminations -exterminative -exterminator -exterminatory -exterminators -exterminatress -exterminatrix -extermine -extermined -extermining -exterminist -extern -externa -external -external-combustion -externalisation -externalise -externalised -externalising -externalism -externalist -externalistic -externality -externalities -externalization -externalize -externalized -externalizes -externalizing -externally -externalness -externals -externat -externate -externation -externe -externes -externity -externization -externize -externomedian -externs -externship -externum -exteroceptist -exteroceptive -exteroceptor -exterous -exterraneous -exterrestrial -exterritorial -exterritoriality -exterritorialize -exterritorially -extersive -extg -extill -extima -extime -extimulate -extinct -extincted -extincteur -extincting -extinction -extinctionist -extinctions -extinctive -extinctor -extincts -extine -extinguised -extinguish -extinguishable -extinguishant -extinguished -extinguisher -extinguishers -extinguishes -extinguishing -extinguishment -extypal -extipulate -extirp -extirpate -extirpated -extirpateo -extirpates -extirpating -extirpation -extirpationist -extirpations -extirpative -extirpator -extirpatory -extispex -extispices -extispicy -extispicious -extogenous -extol -extoled -extoling -extoll -extollation -extolled -extoller -extollers -extolling -extollingly -extollment -extolls -extolment -extols -Exton -extoolitic -extorsion -extorsive -extorsively -extort -extorted -extorter -extorters -extorting -extortion -extortionary -extortionate -extortionately -extortionateness -extortioner -extortioners -extortionist -extortionists -extortions -extortive -extorts -extra -extra- -extra-acinous -extra-alimentary -Extra-american -extra-ammotic -extra-analogical -extra-anthropic -extra-articular -extra-artistic -extra-atmospheric -extra-axillar -extra-axillary -extra-binding -extrabold -extraboldface -extra-bound -extrabranchial -extra-britannic -extrabronchial -extrabuccal -extrabulbar -extrabureau -extraburghal -extracalendar -extracalicular -extracampus -extracanonical -extracapsular -extracardial -extracarpal -extracathedral -extracellular -extracellularly -extracerebral -Extra-christrian -extrachromosomal -extracystic -extracivic -extracivically -extraclassroom -extraclaustral -extracloacal -extracollegiate -extracolumella -extracommunity -extracondensed -extra-condensed -extraconscious -extraconstellated -extraconstitutional -extracontinental -extracorporeal -extracorporeally -extracorpuscular -extracosmic -extracosmical -extracostal -extracranial -extract -extractability -extractable -extractant -extracted -extractibility -extractible -extractiform -extracting -extraction -extractions -extraction's -extractive -extractively -extractor -extractors -extractor's -extractorship -extracts -extracultural -extracurial -extracurricular -extracurriculum -extracutaneous -extradecretal -extradepartmental -extradialectal -extradict -extradictable -extradicted -extradicting -extradictionary -extradiocesan -extraditable -extradite -extradited -extradites -extraditing -extradition -extraditions -extradomestic -extrados -extradosed -extradoses -extradotal -extra-dry -extraduction -extradural -extraembryonal -extraembryonic -extraenteric -extraepiphyseal -extraequilibrium -extraessential -extraessentially -extra-european -extrafamilial -extra-fare -extrafascicular -extrafine -extra-fine -extrafloral -extrafocal -extrafoliaceous -extraforaneous -extra-foraneous -extraformal -extragalactic -extragastric -extra-good -extragovernmental -extrahazardous -extra-hazardous -extrahepatic -extrahuman -extra-illustrate -extra-illustration -extrait -Extra-judaical -extrajudicial -extrajudicially -extra-large -extralateral -Extra-league -extralegal -extralegally -extraliminal -extralimital -extralinguistic -extralinguistically -extralite -extrality -extra-long -extramarginal -extramarital -extramatrical -extramedullary -extramental -extrameridian -extrameridional -extrametaphysical -extrametrical -extrametropolitan -extra-mild -extramission -extramodal -extramolecular -extramorainal -extramorainic -extramoral -extramoralist -extramundane -extramural -extramurally -extramusical -extranational -extranatural -extranean -extraneity -extraneous -extraneously -extraneousness -Extra-neptunian -extranidal -extranormal -extranuclear -extraocular -extraofficial -extraoral -extraorbital -extraorbitally -extraordinary -extraordinaries -extraordinarily -extraordinariness -extraorganismal -extraovate -extraovular -extraparenchymal -extraparental -extraparietal -extraparliamentary -extraparochial -extra-parochial -extraparochially -extrapatriarchal -extrapelvic -extraperineal -extraperiodic -extraperiosteal -extraperitoneal -extraphenomenal -extraphysical -extraphysiological -extrapyramidal -extrapituitary -extraplacental -extraplanetary -extrapleural -extrapoetical -extrapolar -extrapolate -extrapolated -extrapolates -extrapolating -extrapolation -extrapolations -extrapolative -extrapolator -extrapolatory -extrapopular -extraposition -extraprofessional -extraprostatic -extraprovincial -extrapulmonary -extrapunitive -extraquiz -extrared -extraregarding -extraregular -extraregularly -extrarenal -extraretinal -extrarhythmical -extras -extrasacerdotal -extrascholastic -extraschool -extrascientific -extrascriptural -extrascripturality -extrasensible -extrasensory -extrasensorial -extrasensuous -extraserous -extrasyllabic -extrasyllogistic -extrasyphilitic -extrasystole -extrasystolic -extrasocial -extrasolar -extrasomatic -extra-special -extraspectral -extraspherical -extraspinal -extrastapedial -extrastate -extrasterile -extrastomachal -extra-strong -extratabular -extratarsal -extratellurian -extratelluric -extratemporal -extratension -extratensive -extraterrene -extraterrestrial -extraterrestrially -extraterrestrials -extraterritorial -extraterritoriality -extraterritorially -extraterritorials -extrathecal -extratheistic -extrathermodynamic -extrathoracic -extratympanic -extratorrid -extratracheal -extratribal -extratropical -extratubal -extraught -extra-university -extra-urban -extrauterine -extravagance -extravagances -extravagancy -extravagancies -extravagant -Extravagantes -extravagantly -extravagantness -extravaganza -extravaganzas -extravagate -extravagated -extravagating -extravagation -extravagence -extravaginal -extravasate -extravasated -extravasates -extravasating -extravasation -extravasations -extravascular -extravehicular -extravenate -extraventricular -extraversion -extraversions -extraversive -extraversively -extravert -extraverted -extravertish -extravertive -extravertively -extraverts -extravillar -extraviolet -extravisceral -extrazodiacal -extreat -extrema -Extremadura -extremal -extreme -extremeless -extremely -extremeness -extremer -extremes -extremest -extremis -extremism -extremist -extremistic -extremists -extremist's -extremital -extremity -extremities -extremity's -extremum -extremuma -extricable -extricably -extricate -extricated -extricates -extricating -extrication -extrications -extrinsic -extrinsical -extrinsicality -extrinsically -extrinsicalness -extrinsicate -extrinsication -extro- -extroitive -extromit -extropical -extrorsal -extrorse -extrorsely -extrospect -extrospection -extrospective -extroversion -extroversive -extroversively -extrovert -extroverted -extrovertedness -extrovertish -extrovertive -extrovertively -extroverts -extruct -extrudability -extrudable -extrude -extruded -extruder -extruders -extrudes -extruding -extrusible -extrusile -extrusion -extrusions -extrusive -extrusory -extubate -extubation -extuberance -extuberant -extuberate -extumescence -extund -exturb -extusion -exuberance -exuberances -exuberancy -exuberant -exuberantly -exuberantness -exuberate -exuberated -exuberating -exuberation -exuccous -exucontian -exudate -exudates -exudation -exudations -exudative -exudatory -exude -exuded -exudence -exudes -exuding -exul -exulate -exulcerate -exulcerated -exulcerating -exulceration -exulcerative -exulceratory -exulding -exult -exultance -exultancy -exultant -exultantly -exultation -exulted -Exultet -exulting -exultingly -exults -exululate -Exuma -exumbral -exumbrella -exumbrellar -exundance -exundancy -exundate -exundation -exungulate -exuperable -exurb -exurban -exurbanite -exurbanites -exurbia -exurbias -exurbs -exurge -exuscitate -exust -exuvia -exuviability -exuviable -exuviae -exuvial -exuviate -exuviated -exuviates -exuviating -exuviation -exuvium -ex-voto -Exxon -exzodiacal -Ez -Ez. -ezan -Ezana -Ezar -Ezara -Ezaria -Ezarra -Ezarras -ezba -Ezechias -Ezechiel -Ezek -Ezek. -Ezekiel -Ezel -Ezequiel -Eziama -Eziechiele -Ezmeralda -ezod -Ezr -Ezra -Ezri -Ezzard -Ezzo -F -f. -F.A.M. -F.A.S. -F.B.A. -f.c. -F.D. -F.I. -F.O. -f.o.b. -F.P. -f.p.s. -f.s. -f.v. -F.Z.S. -FA -FAA -FAAAS -faade -faailk -FAB -Faba -Fabaceae -fabaceous -Fabe -fabella -Fabens -Faber -Faberg -Faberge -fabes -Fabi -Fabian -Fabyan -Fabianism -Fabianist -Fabiano -Fabien -fabiform -Fabio -Fabiola -Fabyola -Fabiolas -Fabius -Fablan -fable -fabled -fabledom -fable-framing -fableist -fableland -fablemaker -fablemonger -fablemongering -fabler -fablers -Fables -fabliau -fabliaux -fabling -Fabozzi -Fabraea -Fabre -Fabri -Fabria -Fabriane -Fabrianna -Fabrianne -Fabriano -fabric -fabricable -fabricant -fabricate -fabricated -fabricates -fabricating -fabrication -fabricational -fabrications -fabricative -fabricator -fabricators -fabricatress -fabricature -Fabrice -Fabricius -fabrics -fabric's -Fabrienne -Fabrikoid -fabrile -Fabrin -fabrique -Fabritius -Fabron -Fabronia -Fabroniaceae -fabula -fabular -fabulate -fabulist -fabulists -fabulize -fabulosity -fabulous -fabulously -fabulousness -faburden -fac -fac. -facadal -facade -facaded -facades -FACD -face -faceable -face-about -face-ache -face-arbor -facebar -face-bedded -facebow -facebread -face-centered -face-centred -facecloth -faced -faced-lined -facedown -faceharden -face-harden -faceless -facelessness -facelessnesses -facelift -face-lift -face-lifting -facelifts -facellite -facemaker -facemaking -faceman -facemark -faceoff -face-off -face-on -facepiece -faceplate -facer -facers -faces -facesaving -face-saving -facesheet -facesheets -facet -facete -faceted -facetely -faceteness -facetiae -facetiation -faceting -facetious -facetiously -facetiousness -face-to-face -facets -facette -facetted -facetting -faceup -facewise -facework -Fachan -Fachanan -Fachini -facy -facia -facial -facially -facials -facias -faciata -faciation -facie -faciend -faciends -faciendum -facient -facier -facies -facies-suite -faciest -facile -facilely -facileness -facily -facilitate -facilitated -facilitates -facilitating -facilitation -facilitations -facilitative -facilitator -facilitators -facility -facilities -facility's -facing -facingly -facings -facinorous -facinorousness -faciobrachial -faciocervical -faciolingual -facioplegia -facioscapulohumeral -facit -fack -fackeltanz -fackings -fackins -Fackler -facks -FACOM -faconde -faconne -FACS -facsim -facsimile -facsimiled -facsimileing -facsimiles -facsimile's -facsimiling -facsimilist -facsimilize -fact -factable -factabling -factfinder -fact-finding -factful -facty -Factice -facticide -facticity -faction -factional -factionalism -factionalisms -factionalist -factionally -factionary -factionaries -factionate -factioneer -factionism -factionist -factionistism -factions -faction's -factious -factiously -factiousness -factish -factitial -factitious -factitiously -factitiousness -factitive -factitively -factitude -factive -facto -Factor -factorability -factorable -factorage -factordom -factored -factoress -factory -factorial -factorially -factorials -factories -factorylike -factory-new -factoring -factory's -factoryship -factorist -Factoryville -factorization -factorizations -factorization's -factorize -factorized -factorizing -factors -factorship -factotum -factotums -factrix -facts -fact's -factual -factualism -factualist -factualistic -factuality -factually -factualness -factum -facture -factures -facula -faculae -facular -faculative -faculous -facultate -facultative -facultatively -faculty -facultied -faculties -faculty's -facultize -facund -facundity -FAD -fadable -fadaise -Fadden -faddy -faddier -faddiest -faddiness -fadding -faddish -faddishly -faddishness -faddism -faddisms -faddist -faddists -faddle -fade -fadeaway -fadeaways -faded -fadedly -fadedness -fadednyess -Fadeev -Fadeyev -fade-in -fadeless -fadelessly -Faden -Fadeometer -fadeout -fade-out -fade-proof -fader -faders -fades -fadge -fadged -fadges -fadging -fady -Fadil -Fadiman -fading -fadingly -fadingness -fadings -fadlike -FAdm -fadme -fadmonger -fadmongery -fadmongering -fado -fados -fadridden -fads -FAE -faecal -faecalith -faeces -faecula -faeculence -faena -faenas -faence -faenus -Faenza -faery -faerie -faeries -faery-fair -faery-frail -faeryland -Faeroe -Faeroes -Faeroese -fafaronade -faff -faffy -faffle -Fafner -Fafnir -FAG -Fagaceae -fagaceous -fagald -Fagales -Fagaly -Fagan -Fagara -fage -Fagelia -Fagen -fag-end -fager -Fagerholm -fagged -fagger -faggery -Faggi -faggy -fagging -faggingly -faggot -faggoted -faggoty -faggoting -faggotry -faggots -faggot-vote -Fagin -fagine -fagins -fagopyrism -fagopyrismus -Fagopyrum -fagot -fagoted -fagoter -fagoters -fagoty -fagoting -fagotings -fagots -fagott -fagotte -fagottino -fagottist -fagotto -fagottone -fags -Fagus -Fah -faham -Fahey -Fahy -Fahland -fahlband -fahlbands -fahlerz -fahlore -fahlunite -fahlunitte -Fahr -Fahrenheit -fahrenhett -FAI -Fay -Faial -Fayal -fayalite -fayalites -Fayanne -Faydra -Faye -fayed -faience -fayence -faiences -Fayetta -Fayette -Fayetteville -Fayettism -Fayina -faying -Faiyum -faikes -fail -failance -failed -fayles -failing -failingly -failingness -failings -faille -failles -fails -failsafe -fail-safe -failsoft -failure -failures -failure's -Fayme -fain -Faina -fainaigue -fainaigued -fainaiguer -fainaiguing -fainant -faineance -faineancy -faineant -faineantise -faineantism -faineants -fainer -fainest -fainly -fainness -fains -faint -faint-blue -fainted -fainter -fainters -faintest -faintful -faint-gleaming -faint-glimmering -faint-green -faint-heard -faintheart -faint-heart -fainthearted -faintheartedly -faintheartedness -faint-hued -fainty -fainting -faintingly -faintise -faintish -faintishness -faintly -faint-lined -faintling -faint-lipped -faintness -faintnesses -faint-ruled -faint-run -faints -faint-sounding -faint-spoken -faint-voiced -faint-warbled -Fayola -faipule -Fair -Fairbank -Fairbanks -Fairborn -fair-born -fair-breasted -fair-browed -Fairbury -Fairburn -Fairchance -fair-cheeked -Fairchild -fair-colored -fair-complexioned -fair-conditioned -fair-copy -fair-days -Fairdale -faire -Fayre -faired -fair-eyed -fairer -Faires -fairest -fair-faced -fair-favored -Fairfax -fair-featured -Fairfield -fairfieldite -fair-fortuned -fair-fronted -fairgoer -fairgoing -fairgrass -fairground -fairgrounds -fair-haired -fairhead -Fairhope -fair-horned -fair-hued -fairy -fairy-born -fairydom -fairies -fairyfloss -fairyfolk -fairyhood -fairyish -fairyism -fairyisms -fairyland -fairylands -fairily -fairylike -fairing -fairings -fairyology -fairyologist -fairy-ring -fairy's -fairish -fairyship -fairishly -fairishness -fairy-tale -fairkeeper -Fairland -Fairlawn -fairlead -fair-lead -fairleader -fair-leader -fair-leading -fairleads -Fairlee -Fairley -Fairleigh -fairly -Fairlie -fairlike -fairling -fairm -fair-maid -Fairman -fair-maned -fair-minded -fair-mindedness -Fairmont -Fairmount -fair-natured -fairness -fairnesses -Fairoaks -Fairplay -Fairport -fair-reputed -fairs -fairship -fair-sized -fair-skinned -fairsome -fair-sounding -fair-spoken -fair-spokenness -fairstead -fair-stitch -fair-stitcher -fairtime -Fairton -fair-tongued -fair-trade -fair-traded -fair-trader -fair-trading -fair-tressed -Fairview -fair-visaged -Fairway -fairways -Fairwater -Fairweather -fair-weather -fays -Faisal -faisan -faisceau -Faison -fait -faitery -Faith -Fayth -faithbreach -faithbreaker -faith-breaking -faith-confirming -faith-curist -Faythe -faithed -faithful -faithfully -faithfulness -faithfulnesses -faithfuls -faith-infringing -faithing -faith-keeping -faithless -faithlessly -faithlessness -faithlessnesses -faiths -faithwise -faithworthy -faithworthiness -faitor -faitour -faitours -faits -Fayum -Fayumic -Faywood -Faizabad -Fajardo -fajita -fajitas -fake -faked -fakeer -fakeers -fakey -fakement -faker -fakery -fakeries -faker-out -fakers -fakes -faki -faky -Fakieh -fakiness -faking -fakir -fakirism -fakirs -Fakofo -fala -fa-la -falafel -falanaka -Falange -Falangism -Falangist -Falasha -Falashas -falbala -falbalas -falbelo -falcade -Falcata -falcate -falcated -falcation -falcer -falces -falchion -falchions -falcial -Falcidian -falciform -Falcinellus -falciparum -Falco -Falcon -falcon-beaked -falconbill -Falcone -falcon-eyed -falconelle -Falconer -falconers -Falcones -falconet -falconets -falcon-gentle -Falconidae -falconiform -Falconiformes -Falconinae -falconine -falconlike -falconnoid -falconoid -falconry -falconries -falcons -falcopern -falcula -falcular -falculate -Falcunculus -Falda -faldage -Falderal -falderals -falderol -falderols -faldetta -faldfee -falding -faldistory -faldstool -faldworth -Falerian -Falerii -falern -Falernian -Falerno -Falernum -Faletti -Falfurrias -Falieri -Faliero -Faline -Faliscan -Falisci -Falito -Falk -Falkenhayn -Falkirk -Falkland -Falkner -Falkville -Fall -Falla -fallace -fallacy -fallacia -fallacies -fallacious -fallaciously -fallaciousness -fallacy's -fallage -fallal -fal-lal -fallalery -fal-lalery -fal-lalish -fallalishly -fal-lalishly -fallals -fallation -fallaway -fallback -fallbacks -fall-board -Fallbrook -fall-down -fallectomy -fallen -fallency -fallenness -faller -fallers -fallfish -fallfishes -fally -fallibilism -fallibilist -fallibility -fallible -fallibleness -fallibly -fall-in -falling -falling-away -falling-off -falling-out -falling-outs -fallings -fallings-out -falloff -fall-off -falloffs -Fallon -Fallopian -fallostomy -fallotomy -fallout -fall-out -fallouts -fallow -fallow-deer -fallowed -fallowing -fallowist -fallowness -fallows -fall-plow -Falls -Fallsburg -fall-sow -Fallston -falltime -fall-trap -fallway -Falmouth -falsary -false-bedded -false-boding -false-bottomed -false-card -falsedad -false-dealing -false-derived -false-eyed -falseface -false-face -false-faced -false-fingered -false-fronted -false-gotten -false-heart -falsehearted -false-hearted -falseheartedly -false-heartedly -falseheartedness -false-heartedness -falsehood -falsehood-free -falsehoods -falsehood's -falsely -falsen -false-nerved -falseness -falsenesses -false-packed -false-plighted -false-principled -false-purchased -falser -false-spoken -falsest -false-sworn -false-tongued -falsettist -falsetto -falsettos -false-visored -falsework -false-written -falsidical -falsie -falsies -falsify -falsifiability -falsifiable -falsificate -falsification -falsifications -falsificator -falsified -falsifier -falsifiers -falsifies -falsifying -falsism -falsiteit -falsity -falsities -Falstaff -Falstaffian -Falster -falsum -Faltboat -faltboats -faltche -falter -faltere -faltered -falterer -falterers -faltering -falteringly -falters -Faludi -Falun -Falunian -Faluns -falus -falutin -falx -Falzetta -FAM -fam. -Fama -famacide -Famagusta -famatinite -famble -famble-crop -fame -fame-achieving -fame-blazed -Famechon -fame-crowned -famed -fame-ennobled -fameflower -fameful -fame-giving -fameless -famelessly -famelessness -famelic -fame-loving -fame-preserving -fames -fame-seeking -fame-sung -fame-thirsty -fame-thirsting -Fameuse -fameworthy -fame-worthy -Famgio -famiglietti -familarity -Family -familia -familial -familiar -familiary -familiarisation -familiarise -familiarised -familiariser -familiarising -familiarisingly -familiarism -familiarity -familiarities -familiarization -familiarizations -familiarize -familiarized -familiarizer -familiarizes -familiarizing -familiarizingly -familiarly -familiarness -familiars -familic -family-conscious -families -familyish -family's -familism -Familist -familistere -familistery -familistic -familistical -famille -famine -famines -famine's -faming -famish -famished -famishes -famishing -famishment -famose -famous -famously -famousness -famp -famular -famulary -famulative -famuli -famulli -famulus -Fan -fana -Fanagalo -fanakalo -fanal -fanaloka -fanam -fanatic -fanatical -fanatically -fanaticalness -fanaticise -fanaticised -fanaticising -fanaticism -fanaticisms -fanaticize -fanaticized -fanaticizing -fanatico -fanatics -fanatic's -fanatism -fanback -fanbearer -fan-bearing -Fanchan -Fancher -Fanchet -Fanchette -Fanchie -Fanchon -Fancy -Fancia -fanciable -fancy-baffled -fancy-blest -fancy-born -fancy-borne -fancy-bred -fancy-built -fancical -fancy-caught -fancy-driven -Fancie -fancied -fancier -fanciers -fancier's -fancies -fanciest -fancy-fed -fancy-feeding -fancify -fancy-formed -fancy-framed -fancy-free -fanciful -fancifully -fancifulness -fancy-guided -fancying -fancy-led -fanciless -fancily -fancy-loose -fancymonger -fanciness -fancy-raised -fancy-shaped -fancysick -fancy-stirring -fancy-struck -fancy-stung -fancy-weaving -fancywork -fancy-woven -fancy-wrought -fan-crested -fand -fandangle -fandango -fandangos -fandom -fandoms -fane -Fanechka -fanega -fanegada -fanegadas -fanegas -fanes -Fanestil -Faneuil -Fanfani -fanfarade -Fanfare -fanfares -fanfaron -fanfaronade -fanfaronading -fanfarons -fan-fashion -fanfish -fanfishes -fanflower -fanfold -fanfolds -fanfoot -Fang -fanga -fangas -fanged -fanger -fangy -fanging -Fangio -fangle -fangled -fanglement -fangless -fanglet -fanglike -fanglomerate -fango -fangot -fangotherapy -fangs -fang's -fanhouse -Fany -Fania -Fanya -faniente -fanion -fanioned -fanions -fanit -fanjet -fan-jet -fanjets -fankle -fanleaf -fan-leaved -fanlight -fan-light -fanlights -fanlike -fanmaker -fanmaking -fanman -fanned -fannel -fanneling -fannell -fanner -fanners -fan-nerved -Fannettsburg -Fanni -Fanny -Fannia -Fannie -fannier -fannies -Fannin -Fanning -fannings -fannon -Fano -fanon -fanons -fanos -fanout -fan-pleated -fans -fan's -fan-shape -fan-shaped -Fanshawe -fant -fantad -fantaddish -fantail -fan-tail -fantailed -fan-tailed -fantails -fantaisie -fan-tan -fantaseid -Fantasy -Fantasia -fantasias -fantasie -fantasied -fantasies -Fantasiestck -fantasying -fantasy's -fantasist -fantasists -fantasize -fantasized -fantasizes -fantasizing -fantasm -fantasmagoria -fantasmagoric -fantasmagorically -fantasmal -fantasms -fantasque -fantassin -fantast -fantastic -fantastical -fantasticality -fantastically -fantasticalness -fantasticate -fantastication -fantasticism -fantasticly -fantasticness -fantastico -fantastry -fantasts -Fante -fanteague -fantee -fanteeg -fanterie -Fanti -fantigue -Fantin-Latour -fantoccini -fantocine -fantod -fantoddish -fantods -fantom -fantoms -fanum -fanums -fan-veined -Fanwe -fanweed -fanwise -Fanwood -fanwork -fanwort -fanworts -fanwright -fanzine -fanzines -FAO -faon -Fapesmo -FAQ -faqir -faqirs -FAQL -faquir -faquirs -FAR -Fara -far-about -farad -Faraday -faradaic -faradays -faradic -faradisation -faradise -faradised -faradiser -faradises -faradising -faradism -faradisms -faradization -faradize -faradized -faradizer -faradizes -faradizing -faradmeter -faradocontractility -faradomuscular -faradonervous -faradopalpation -farads -far-advanced -Farah -Farallon -Farallones -far-aloft -Farand -farandine -farandman -farandmen -farandola -farandole -farandoles -Farant -faraon -farasula -faraway -far-away -farawayness -far-back -Farber -far-between -far-borne -far-branching -far-called -farce -farced -farcelike -farcemeat -farcer -farcers -farces -farce's -farcetta -farceur -farceurs -farceuse -farceuses -farci -farcy -farcial -farcialize -farcical -farcicality -farcically -farcicalness -farcie -farcied -farcies -farcify -farcilite -farcin -farcing -farcinoma -farcist -far-come -far-cost -farctate -fard -fardage -far-darting -farde -farded -fardel -fardel-bound -fardelet -fardels -fardh -farding -far-discovered -far-distant -fardo -far-down -far-downer -far-driven -fards -fare -far-eastern -fared -fare-free -Fareham -fare-ye-well -fare-you-well -far-embracing -farenheit -farer -farers -fares -fare-thee-well -faretta -Farewell -farewelled -farewelling -farewells -farewell-summer -farewell-to-spring -far-extended -far-extending -farfal -farfals -far-famed -farfara -farfel -farfels -farfet -far-fet -farfetch -far-fetch -farfetched -far-fetched -farfetchedness -far-flashing -far-flying -far-flown -far-flung -far-foamed -far-forth -farforthly -Farfugium -fargite -far-gleaming -Fargo -fargoing -far-going -far-gone -fargood -farhand -farhands -far-heard -Farhi -far-horizoned -Fari -Faria -Faribault -Farica -Farida -Farika -farina -farinaceous -farinaceously -farinacious -farinas -farine -Farinelli -faring -farinha -farinhas -farinometer -farinose -farinosel -farinosely -farinulent -fario -Farish -Farisita -Fariss -Farkas -farkleberry -farkleberries -Farl -Farlay -Farland -farle -Farlee -Farley -Farleigh -Farler -farles -farleu -Farly -Farlie -Farlington -far-looking -far-looming -farls -farm -farmable -farmage -Farman -Farmann -farm-bred -Farmdale -farmed -Farmelo -farm-engro -Farmer -farmeress -farmerette -farmer-general -farmer-generalship -farmery -farmeries -farmerish -farmerly -farmerlike -Farmers -Farmersburg -farmers-general -farmership -Farmersville -Farmerville -farmhand -farmhands -farmhold -farmhouse -farm-house -farmhousey -farmhouses -farmhouse's -farmy -farmyard -farm-yard -farmyardy -farmyards -farmyard's -farming -Farmingdale -farmings -Farmington -Farmingville -farmland -farmlands -farmost -farmout -farmplace -farms -farmscape -farmstead -farm-stead -farmsteading -farmsteads -farmtown -Farmville -farmwife -Farnam -Farnborough -Farner -Farnese -farnesol -farnesols -farness -farnesses -FARNET -Farnham -Farnhamville -Farny -far-northern -Farnovian -Farnsworth -Faro -Faroeish -faroelite -Faroes -Faroese -faroff -far-off -far-offness -farolito -faros -farouche -Farouk -far-out -far-parted -far-passing -far-point -far-projecting -Farquhar -Farr -Farra -farrage -farraginous -farrago -farragoes -farragos -Farragut -Farrah -Farrand -farrandly -Farrandsville -far-ranging -farrant -farrantly -Farrar -far-reaching -farreachingly -far-reachingness -farreate -farreation -Farrel -Farrell -far-removed -far-resounding -Farrica -farrier -farriery -farrieries -farrierlike -farriers -Farrington -Farris -Farrish -farrisite -Farrison -Farro -Farron -Farrow -farrowed -farrowing -farrows -farruca -Fars -farsakh -farsalah -Farsang -farse -farseeing -far-seeing -farseeingness -far-seen -farseer -farset -far-shooting -Farsi -farsight -far-sight -farsighted -far-sighted -farsightedly -farsightedness -farsightednesses -Farson -far-sought -far-sounding -far-southern -far-spread -far-spreading -farstepped -far-stretched -far-stretching -fart -farted -farth -farther -fartherance -fartherer -farthermore -farthermost -farthest -farthing -farthingale -farthingales -farthingdeal -farthingless -farthings -farting -fartlek -far-traveled -farts -Faruq -Farver -Farwell -farweltered -far-western -FAS -Fasano -fasc -fasces -fascet -fascia -fasciae -fascial -fascias -fasciate -fasciated -fasciately -fasciation -fascicle -fascicled -fascicles -fascicular -fascicularly -fasciculate -fasciculated -fasciculately -fasciculation -fascicule -fasciculi -fasciculite -fasciculus -fascili -fascinate -fascinated -fascinatedly -fascinates -fascinating -fascinatingly -fascination -fascinations -fascinative -fascinator -fascinatress -fascine -fascinery -fascines -fascintatingly -Fascio -fasciodesis -fasciola -fasciolae -fasciolar -Fasciolaria -Fasciolariidae -fasciole -fasciolet -fascioliasis -Fasciolidae -fascioloid -fascioplasty -fasciotomy -fascis -Fascism -fascisms -Fascist -Fascista -Fascisti -fascistic -fascistically -fascisticization -fascisticize -fascistization -fascistize -fascists -fasels -fash -fashed -fasher -fashery -fasherie -fashes -Fashing -fashion -fashionability -fashionable -fashionableness -fashionably -fashional -fashionative -fashioned -fashioner -fashioners -fashion-fancying -fashion-fettered -fashion-following -fashioning -fashionist -fashionize -fashion-led -fashionless -fashionmonger -fashion-monger -fashionmonging -fashions -fashion-setting -fashious -fashiousness -Fashoda -fasibitikite -fasinite -fasnacht -Faso -fasola -fass -fassaite -fassalite -Fassbinder -Fassold -FASST -FAST -Fasta -fast-anchored -fastback -fastbacks -fastball -fastballs -fast-bound -fast-breaking -fast-cleaving -fast-darkening -fast-dye -fast-dyed -fasted -fasten -fastened -fastener -fasteners -fastening -fastening-penny -fastenings -fastens -fastens-een -faster -fastest -fast-fading -fast-falling -fast-feeding -fast-fettered -fast-fleeting -fast-flowing -fast-footed -fast-gathering -fastgoing -fast-grounded -fast-growing -fast-handed -fasthold -fasti -fastidiosity -fastidious -fastidiously -fastidiousness -fastidium -fastiduous -fastiduously -fastiduousness -fastiduousnesses -fastigate -fastigated -fastigia -fastigiate -fastigiated -fastigiately -fastigious -fastigium -fastigiums -fastiia -fasting -fastingly -fastings -fastish -fast-knit -fastland -fastly -fast-mass -fast-moving -fastnacht -fastness -fastnesses -Fasto -fast-plighted -fast-rooted -fast-rootedness -fast-running -fasts -fast-sailing -fast-settled -fast-stepping -fast-talk -fast-tied -fastuous -fastuously -fastuousness -fastus -fastwalk -FAT -Fata -Fatagaga -Fatah -fatal -fatal-boding -fatale -fatales -fatalism -fatalisms -fatalist -fatalistic -fatalistically -fatalists -fatality -fatalities -fatality's -fatalize -fatally -fatal-looking -fatalness -fatal-plotted -fatals -fatal-seeming -fat-assed -fatback -fat-backed -fatbacks -fat-barked -fat-bellied -fatbird -fatbirds -fat-bodied -fatbrained -fatcake -fat-cheeked -fat-choy -fate -fate-bowed -fated -fate-denouncing -fat-edged -fate-dogged -fate-environed -fate-foretelling -fateful -fatefully -fatefulness -fate-furrowed -fatelike -fate-menaced -fat-engendering -Fates -fate-scorning -fate-stricken -fat-faced -fat-fed -fat-fleshed -fat-free -fath -fath. -fathead -fat-head -fatheaded -fatheadedly -fatheadedness -fatheads -fathearted -fat-hen -Father -father-confessor -fathercraft -fathered -Fatherhood -fatherhoods -fathering -father-in-law -fatherkin -fatherland -fatherlandish -fatherlands -father-lasher -fatherless -fatherlessness -fatherly -fatherlike -fatherliness -fatherling -father-long-legs -fathers -father's -fathership -fathers-in-law -fat-hipped -fathmur -fathogram -fathom -fathomable -fathomableness -fathomage -fathom-deep -fathomed -fathomer -Fathometer -fathoming -fathomless -fathomlessly -fathomlessness -fathoms -faticableness -fatidic -fatidical -fatidically -fatiferous -fatigability -fatigable -fatigableness -fatigate -fatigated -fatigating -fatigation -fatiguability -fatiguabilities -fatiguable -fatigue -fatigued -fatigueless -fatigues -fatiguesome -fatiguing -fatiguingly -Fatiha -fatihah -fatil -fatiloquent -Fatima -Fatimah -Fatimid -Fatimite -fating -fatiscence -fatiscent -fat-legged -fatless -fatly -fatlike -fatling -fatlings -Fatma -fat-necrosis -fatness -fatnesses -fator -fat-paunched -fat-reducing -fats -Fatshan -fatshedera -fat-shunning -fatsia -fatso -fatsoes -fat-soluble -fatsos -fatstock -fatstocks -fattable -fat-tailed -Fattal -fatted -fatten -fattenable -fattened -fattener -fatteners -fattening -fattens -fatter -fattest -fatty -fattier -fatties -fattiest -fattily -fattiness -fatting -fattish -fattishness -fattrels -fatuate -fatuism -fatuity -fatuities -fatuitous -fatuitousness -fatuoid -fatuous -fatuously -fatuousness -fatuousnesses -fatuus -fatwa -fat-witted -fatwood -Faubert -Faubion -faubourg -faubourgs -Faubush -faucal -faucalize -faucals -fauces -faucet -faucets -Faucett -Fauch -fauchard -fauchards -Faucher -faucial -Faucille -faucitis -fauconnier -faucre -faufel -faugh -faujasite -faujdar -fauld -faulds -Faulkland -Faulkner -Faulkton -fault -faultage -faulted -faulter -faultfind -fault-find -faultfinder -faultfinders -faultfinding -fault-finding -faultfindings -faultful -faultfully -faulty -faultier -faultiest -faultily -faultiness -faulting -faultless -faultlessly -faultlessness -faults -fault-slip -faultsman -faulx -Fauman -Faun -Fauna -faunae -faunal -faunally -faunas -faunated -faunch -faun-colored -Faunia -Faunie -faunish -faunist -faunistic -faunistical -faunistically -faunlike -faunology -faunological -fauns -Faunsdale -fauntleroy -faunula -faunule -Faunus -Faur -faurd -Faure -faured -Faus -fausant -fause -fause-house -fausen -faussebraie -faussebraye -faussebrayed -Faust -Fausta -Faustena -fauster -Faustian -Faustianism -Faustina -Faustine -Fausto -Faustulus -Faustus -faut -faute -fauterer -fauteuil -fauteuils -fautor -fautorship -Fauve -Fauver -fauves -fauvette -Fauvism -fauvisms -Fauvist -fauvists -Faux -fauxbourdon -faux-bourdon -faux-na -favaginous -Favata -favel -favela -favelas -favelidium -favella -favellae -favellidia -favellidium -favellilidia -favelloid -Faventine -faveolate -faveoli -faveoluli -faveolus -faverel -faverole -Faverolle -favi -Favian -Favianus -Favien -faviform -Favilla -favillae -favillous -Favin -favism -favisms -favissa -favissae -favn -Favonia -favonian -Favonius -favor -favorability -favorable -favorableness -favorably -favored -favoredly -favoredness -favorer -favorers -favoress -favoring -favoringly -favorite -favorites -favoritism -favoritisms -favorless -favors -favose -favosely -favosite -Favosites -Favositidae -favositoid -favour -favourable -favourableness -favourably -favoured -favouredly -favouredness -favourer -favourers -favouress -favouring -favouringly -favourite -favouritism -favourless -favours -favous -Favrot -favus -favuses -Fawcett -Fawcette -fawe -fawkener -Fawkes -Fawn -Fawna -fawn-color -fawn-colored -fawn-colour -Fawne -fawned -fawner -fawnery -fawners -fawny -Fawnia -fawnier -fawniest -fawning -fawningly -fawningness -fawnlike -fawns -Fawnskin -Fawzia -FAX -Faxan -faxed -Faxen -faxes -faxing -Faxon -Faxun -faze -fazed -Fazeli -fazenda -fazendas -fazendeiro -fazes -fazing -FB -FBA -FBI -FBO -FBV -FC -FCA -FCAP -FCC -FCCSET -FCFS -FCG -fchar -fcy -FCIC -FCO -fcomp -fconv -fconvert -fcp -FCRC -FCS -FCT -FD -FDA -FDDI -FDDIII -FDHD -FDIC -F-display -FDM -fdname -fdnames -FDP -FDR -fdtype -fdub -fdubs -FDX -FE -FEA -feaberry -FEAF -feague -feak -feaked -feaking -feal -Feala -fealty -fealties -Fear -fearable -fearbabe -fear-babe -fear-broken -fear-created -fear-depressed -feared -fearedly -fearedness -fearer -fearers -fear-free -fear-froze -fearful -fearfuller -fearfullest -fearfully -fearfulness -fearing -fearingly -fear-inspiring -fearless -fearlessly -fearlessness -fearlessnesses -fearnaught -fearnought -fear-palsied -fear-pursued -fears -fear-shaken -fearsome -fearsomely -fearsome-looking -fearsomeness -fear-stricken -fear-struck -fear-tangled -fear-taught -feasance -feasances -feasant -fease -feased -feases -feasibility -feasibilities -feasible -feasibleness -feasibly -feasing -feasor -Feast -feasted -feasten -feaster -feasters -feastful -feastfully -feasting -feastless -feastly -feast-or-famine -feastraw -feasts -feat -feateous -feater -featest -feather -featherback -featherbed -feather-bed -featherbedded -featherbedding -featherbird -featherbone -featherbrain -featherbrained -feather-covered -feathercut -featherdom -feathered -featheredge -feather-edge -featheredged -featheredges -featherer -featherers -featherfew -feather-fleece -featherfoil -feather-footed -featherhead -feather-head -featherheaded -feather-heeled -feathery -featherier -featheriest -featheriness -feathering -featherleaf -feather-leaved -feather-legged -featherless -featherlessness -featherlet -featherlight -featherlike -featherman -feathermonger -featherpate -featherpated -feathers -featherstitch -feather-stitch -featherstitching -Featherstone -feather-tongue -feathertop -feather-veined -featherway -featherweed -featherweight -feather-weight -feather-weighted -featherweights -featherwing -featherwise -featherwood -featherwork -feather-work -featherworker -featy -featish -featishly -featishness -featless -featly -featlier -featliest -featliness -featness -featous -feats -feat's -featural -featurally -feature -featured -featureful -feature-length -featureless -featurelessness -featurely -featureliness -features -featurette -feature-writing -featuring -featurish -feaze -feazed -feazes -feazing -feazings -FEB -Feb. -Febe -febres -febri- -febricant -febricide -febricitant -febricitation -febricity -febricula -febrifacient -febriferous -febrific -febrifugal -febrifuge -febrifuges -febrile -febrility -febriphobia -febris -Febronian -Febronianism -February -Februaries -february's -Februarius -februation -FEC -fec. -fecal -fecalith -fecaloid -fecche -feceris -feces -Fechner -Fechnerian -Fechter -fecial -fecials -fecifork -fecit -feck -fecket -feckful -feckfully -feckless -fecklessly -fecklessness -feckly -fecks -feckulence -fecula -feculae -feculence -feculency -feculent -fecund -fecundate -fecundated -fecundates -fecundating -fecundation -fecundations -fecundative -fecundator -fecundatory -fecundify -Fecunditatis -fecundity -fecundities -fecundize -FED -Fed. -fedayee -Fedayeen -Fedak -fedarie -feddan -feddans -Fedders -fedelini -fedellini -federacy -federacies -Federal -federalese -federalisation -federalise -federalised -federalising -Federalism -federalisms -federalist -federalistic -federalists -federalization -federalizations -federalize -federalized -federalizes -federalizing -federally -federalness -federals -Federalsburg -federary -federarie -federate -federated -federates -federating -federation -federational -federationist -federations -federatist -federative -federatively -federator -Federica -Federico -Fedia -fedifragous -Fedin -Fedirko -fedity -fedn -Fedor -Fedora -fedoras -feds -FEDSIM -fed-up -fed-upedness -fed-upness -Fee -feeable -feeb -feeble -feeble-bodied -feeblebrained -feeble-eyed -feeblehearted -feebleheartedly -feebleheartedness -feeble-lunged -feebleminded -feeble-minded -feeblemindedly -feeble-mindedly -feeblemindedness -feeble-mindedness -feeblemindednesses -feebleness -feeblenesses -feebler -feebless -feeblest -feeble-voiced -feeble-winged -feeble-wit -feebly -feebling -feeblish -feed -feedable -feedback -feedbacks -feedbag -feedbags -feedbin -feedboard -feedbox -feedboxes -feeded -feeder -feeder-in -feeders -feeder-up -feedhead -feedhole -feedy -feeding -feedings -feedingstuff -feedlot -feedlots -feedman -feeds -feedsman -feedstock -feedstuff -feedstuffs -feedway -feedwater -fee-farm -fee-faw-fum -feeing -feel -feelable -Feeley -feeler -feelers -feeless -feely -feelies -feeling -feelingful -feelingless -feelinglessly -feelingly -feelingness -feelings -feels -Feeney -Feer -feere -feerie -feery-fary -feering -fees -Feesburg -fee-simple -fee-splitter -fee-splitting -feest -feet -feetage -fee-tail -feetfirst -feetless -feeze -feezed -feezes -feezing -feff -fefnicute -fegary -Fegatella -fegs -feh -Fehmic -FEHQ -fehs -fei -Fey -Feydeau -feyer -feyest -feif -Feighan -feigher -Feigin -Feigl -feign -feigned -feignedly -feignedness -feigner -feigners -feigning -feigningly -feigns -Feijoa -Feil -feyly -Fein -Feinberg -feyness -feynesses -Feingold -Feininger -Feinleib -Feynman -feinschmecker -feinschmeckers -Feinstein -feint -feinted -feinter -feinting -feints -feirie -feis -Feisal -feiseanna -feist -feisty -feistier -feistiest -feists -felafel -felaheen -felahin -felanders -Felapton -Felch -Feld -Felda -Felder -Feldman -feldsher -feldspar -feldsparphyre -feldspars -feldspath -feldspathic -feldspathization -feldspathoid -feldspathoidal -feldspathose -Feldstein -Feldt -fele -Felecia -Feledy -Felic -Felicdad -Felice -Felichthys -Felicia -Feliciana -Felicidad -felicide -Felicie -felicify -felicific -Felicio -Felicita -felicitate -felicitated -felicitates -felicitating -felicitation -felicitations -felicitator -felicitators -Felicity -felicities -felicitous -felicitously -felicitousness -Felicle -felid -Felidae -felids -feliform -Felike -Feliks -Felinae -feline -felinely -felineness -felines -felinity -felinities -felinophile -felinophobe -Felipa -Felipe -Felippe -Felis -Felise -Felisha -Felita -Felix -Feliza -Felizio -fell -fella -fellable -fellage -fellagha -fellah -fellaheen -fellahin -fellahs -Fellani -fellas -Fellata -Fellatah -fellate -fellated -fellatee -fellates -fellating -fellatio -fellation -fellations -fellatios -fellator -fellatory -fellatrice -fellatrices -fellatrix -fellatrixes -felled -fellen -Feller -fellers -fellest -fellfare -fell-fare -fell-field -felly -fellic -felliducous -fellies -fellifluous -Felling -fellingbird -Fellini -fellinic -fell-land -fellmonger -fellmongered -fellmongery -fellmongering -Fellner -fellness -fellnesses -felloe -felloes -fellon -Fellow -fellow-commoner -fellowcraft -fellow-creature -fellowed -fellowess -fellow-feel -fellow-feeling -fellow-heir -fellowheirship -fellowing -fellowless -fellowly -fellowlike -fellowman -fellow-man -fellowmen -fellow-men -fellowred -Fellows -fellow's -fellowship -fellowshiped -fellowshiping -fellowshipped -fellowshipping -fellowships -fellowship's -fellow-soldier -fells -fellside -fellsman -Fellsmere -felo-de-se -feloid -felon -felones -felones-de-se -feloness -felony -felonies -felonious -feloniously -feloniousness -felonous -felonry -felonries -felons -felonsetter -felonsetting -felonweed -felonwood -felonwort -felos-de-se -fels -felsic -felsite -felsite-porphyry -felsites -felsitic -Felske -felsobanyite -felsophyre -felsophyric -felsosphaerite -felspar -felspars -felspath -felspathic -felspathose -felstone -felstones -Felt -felted -Felten -felter -Felty -Feltie -feltyfare -feltyflier -felting -feltings -felt-jacketed -feltlike -felt-lined -feltmaker -feltmaking -feltman -feltmonger -feltness -Felton -felts -felt-shod -feltwork -feltwort -felucca -feluccas -Felup -felwort -felworts -FEM -fem. -FEMA -female -femalely -femaleness -females -female's -femalist -femality -femalize -femcee -Feme -femereil -femerell -femes -FEMF -Femi -femic -femicide -feminacy -feminacies -feminal -feminality -feminate -femineity -feminie -feminility -feminin -Feminine -femininely -feminineness -feminines -femininism -femininity -femininities -feminisation -feminise -feminised -feminises -feminising -feminism -feminisms -feminist -feministic -feministics -feminists -feminity -feminities -feminization -feminizations -feminize -feminized -feminizes -feminizing -feminology -feminologist -feminophobe -femme -femmes -Femmine -femora -femoral -femorocaudal -femorocele -femorococcygeal -femorofibular -femoropopliteal -femororotulian -femorotibial -fempty -fems -femto- -femur -femurs -femur's -Fen -fenagle -fenagled -fenagler -fenagles -fenagling -fenbank -fenberry -fen-born -fen-bred -fence -fenced -fenced-in -fenceful -fenceless -fencelessness -fencelet -fencelike -fence-off -fenceplay -fencepost -fencer -fenceress -fencerow -fencers -fences -fence-sitter -fence-sitting -fence-straddler -fence-straddling -fenchene -fenchyl -fenchol -fenchone -fencible -fencibles -fencing -fencing-in -fencings -fend -fendable -fended -fender -fendered -fendering -fenderless -fenders -fendy -Fendig -fendillate -fendillation -fending -fends -Fenelia -Fenella -Fenelon -Fenelton -fenerate -feneration -fenestella -fenestellae -fenestellid -Fenestellidae -fenester -fenestra -fenestrae -fenestral -fenestrate -fenestrated -fenestration -fenestrato -fenestrone -fenestrule -fenetre -fengite -Fengkieh -Fengtien -Fenian -Fenianism -fenite -fenks -fenland -fenlander -fenman -fenmen -Fenn -fennec -fennecs -fennel -fennelflower -Fennell -fennel-leaved -Fennelly -fennels -Fenner -Fennessy -Fenny -fennici -Fennie -fennig -Fennimore -fennish -Fennoman -Fennville -fenouillet -fenouillette -Fenrir -Fenris-wolf -Fens -Fensalir -fensive -fenster -fen-sucked -fent -fentanyl -fenter -fenthion -fen-ting -Fenton -Fentress -fenugreek -fenuron -fenurons -Fenwick -Fenzelia -feod -feodal -feodality -feodary -feodaries -feodatory -Feodor -Feodora -Feodore -feods -feodum -feoff -feoffed -feoffee -feoffees -feoffeeship -feoffer -feoffers -feoffing -feoffment -feoffor -feoffors -feoffs -Feola -Feosol -feower -FEP -FEPC -FEPS -fer -FERA -feracious -feracity -feracities -Ferae -Ferahan -feral -feralin -ferally -Feramorz -ferash -ferbam -ferbams -Ferber -ferberite -Ferd -Ferde -fer-de-lance -fer-de-moline -Ferdy -Ferdiad -Ferdie -Ferdinana -Ferdinand -Ferdinanda -Ferdinande -Ferdus -ferdwit -fere -Ferenc -feres -feretory -feretories -feretra -feretrum -ferfathmur -ferfel -ferfet -ferforth -Fergana -ferganite -Fergus -fergusite -Ferguson -fergusonite -feria -feriae -ferial -ferias -feriation -feridgi -feridjee -feridji -ferie -Feriga -ferigee -ferijee -ferine -ferinely -ferineness -Feringhee -Feringi -Ferino -Ferio -Ferison -ferity -ferities -ferk -ferkin -ferly -ferlie -ferlied -ferlies -ferlying -ferling -ferling-noble -fermacy -fermage -fermail -fermal -Fermanagh -Fermat -fermata -fermatas -fermate -Fermatian -ferme -ferment -fermentability -fermentable -fermental -fermentarian -fermentate -fermentation -fermentations -fermentation's -fermentative -fermentatively -fermentativeness -fermentatory -fermented -fermenter -fermentescible -fermenting -fermentitious -fermentive -fermentology -fermentor -ferments -fermentum -fermerer -fermery -Fermi -fermila -fermillet -Fermin -fermion -fermions -fermis -fermium -fermiums -fermorite -Fern -Ferna -Fernald -fernambuck -Fernand -Fernanda -Fernande -Fernandel -Fernandes -Fernandez -Fernandina -fernandinite -Fernando -Fernas -Fernata -fernbird -fernbrake -fern-clad -fern-crowned -Ferndale -Ferne -Ferneau -ferned -Ferney -Fernelius -fernery -ferneries -fern-fringed -ferngale -ferngrower -ferny -Fernyak -fernyear -fernier -ferniest -ferninst -fernland -fernleaf -fern-leaved -Fernley -fernless -fernlike -Fernos-Isern -fern-owl -ferns -fern's -fernseed -fern-seed -fernshaw -fernsick -fern-thatched -ferntickle -ferntickled -fernticle -Fernwood -fernwort -Ferocactus -feroce -ferocious -ferociously -ferociousness -ferociousnesses -ferocity -ferocities -feroher -Feronia -ferous -ferox -ferr -ferrado -Ferragus -ferrament -Ferrand -ferrandin -Ferrara -Ferrarese -Ferrari -ferrary -ferrash -ferrate -ferrated -ferrateen -ferrates -ferratin -ferrean -Ferreby -ferredoxin -Ferree -Ferreira -ferreiro -Ferrel -ferreled -ferreling -Ferrell -ferrelled -ferrelling -Ferrellsburg -ferrels -Ferren -ferreous -Ferrer -Ferrero -ferret -ferret-badger -ferreted -ferret-eyed -ferreter -ferreters -ferrety -ferreting -ferrets -Ferretti -ferretto -Ferri -ferry -ferri- -ferriage -ferryage -ferriages -ferryboat -ferry-boat -ferryboats -ferric -ferrichloride -ferricyanate -ferricyanhydric -ferricyanic -ferricyanide -ferricyanogen -Ferrick -Ferriday -ferried -ferrier -ferries -ferriferous -Ferrigno -ferrihemoglobin -ferrihydrocyanic -ferryhouse -ferrying -ferrimagnet -ferrimagnetic -ferrimagnetically -ferrimagnetism -ferryman -ferrymen -ferring -ferriprussiate -ferriprussic -Ferris -Ferrisburg -Ferrysburg -ferrite -Ferriter -ferrites -ferritic -ferritin -ferritins -ferritization -ferritungstite -Ferryville -ferrivorous -ferryway -Ferro -ferro- -ferroalloy -ferroaluminum -ferroboron -ferrocalcite -ferro-carbon-titanium -ferrocene -ferrocerium -ferrochrome -ferrochromium -ferrocyanate -ferrocyanhydric -ferrocyanic -ferrocyanide -ferrocyanogen -ferroconcrete -ferro-concrete -ferroconcretor -ferroelectric -ferroelectrically -ferroelectricity -ferroglass -ferrogoslarite -ferrohydrocyanic -ferroinclave -Ferrol -ferromagnesian -ferromagnet -ferromagnetic -ferromagneticism -ferromagnetism -ferromanganese -ferrometer -ferromolybdenum -Ferron -ferronatrite -ferronickel -ferrophosphorus -ferroprint -ferroprussiate -ferroprussic -ferrosilicon -ferroso- -ferrotype -ferrotyped -ferrotyper -ferrotypes -ferrotyping -ferrotitanium -ferrotungsten -ferro-uranium -ferrous -ferrovanadium -ferrozirconium -ferruginate -ferruginated -ferruginating -ferrugination -ferruginean -ferrugineous -ferruginous -ferrugo -ferrule -ferruled -ferruler -ferrules -ferruling -Ferrum -ferruminate -ferruminated -ferruminating -ferrumination -ferrums -FERS -fersmite -ferter -ferth -ferther -ferthumlungur -Fertil -fertile -fertile-flowered -fertile-fresh -fertile-headed -fertilely -fertileness -fertilisability -fertilisable -fertilisation -fertilisational -fertilise -fertilised -fertiliser -fertilising -fertilitate -Fertility -fertilities -fertilizability -fertilizable -fertilization -fertilizational -fertilizations -fertilize -fertilized -fertilizer -fertilizer-crushing -fertilizers -fertilizes -fertilizing -feru -ferula -ferulaceous -ferulae -ferulaic -ferular -ferulas -ferule -feruled -ferules -ferulic -feruling -Ferullo -ferv -fervanite -fervence -fervency -fervencies -fervent -fervently -ferventness -fervescence -fervescent -fervid -fervidity -fervidly -fervidness -Fervidor -fervor -fervorless -fervorlessness -fervorous -fervors -fervor's -fervour -fervours -Ferwerda -Fesapo -Fescennine -fescenninity -fescue -fescues -fesels -fess -fesse -fessed -fessely -Fessenden -fesses -fessewise -fessing -fessways -fesswise -fest -Festa -festae -festal -festally -Festatus -Feste -festellae -fester -festered -festering -festerment -festers -festy -festilogy -festilogies -festin -Festina -festinance -festinate -festinated -festinately -festinating -festination -festine -festing -Festino -festival -festivalgoer -festivally -festivals -festival's -festive -festively -festiveness -festivity -festivities -festivous -festology -feston -festoon -festooned -festoonery -festooneries -festoony -festooning -festoons -Festschrift -Festschriften -Festschrifts -festshrifts -festuca -festucine -festucous -Festus -FET -feta -fetal -fetalism -fetalization -fetas -fetation -fetations -fetch -fetch- -fetch-candle -fetched -fetched-on -fetcher -fetchers -fetches -fetching -fetchingly -fetching-up -fetch-light -fete -fete-champetre -feted -feteless -feterita -feteritas -fetes -feti- -fetial -fetiales -fetialis -fetials -fetich -fetiches -fetichic -fetichism -fetichist -fetichistic -fetichize -fetichlike -fetichmonger -fetichry -feticidal -feticide -feticides -fetid -fetidity -fetidly -fetidness -fetiferous -feting -fetiparous -fetis -fetise -fetish -fetisheer -fetisher -fetishes -fetishic -fetishism -fetishist -fetishistic -fetishists -fetishization -fetishize -fetishlike -fetishmonger -fetishry -fetlock -fetlock-deep -fetlocked -fetlocks -fetlow -fetography -fetology -fetologies -fetologist -fetometry -fetoplacental -fetor -fetors -fets -fetted -fetter -fetterbush -fettered -fetterer -fetterers -fettering -fetterless -fetterlock -fetters -fetticus -fetting -fettle -fettled -fettler -fettles -fettling -fettlings -fettstein -fettuccine -fettucine -fettucini -feture -fetus -fetuses -fetwa -feu -feuage -feuar -feuars -Feucht -Feuchtwanger -feud -feudal -feudalisation -feudalise -feudalised -feudalising -feudalism -feudalist -feudalistic -feudalists -feudality -feudalities -feudalizable -feudalization -feudalize -feudalized -feudalizing -feudally -feudary -feudaries -feudatary -feudatory -feudatorial -feudatories -feuded -feudee -feuder -feuding -feudist -feudists -feudovassalism -feuds -feud's -feudum -feued -Feuerbach -feu-farm -feuillage -Feuillant -Feuillants -feuille -Feuillee -feuillemorte -feuille-morte -feuillet -feuilleton -feuilletonism -feuilletonist -feuilletonistic -feuilletons -feuing -feulamort -Feune -Feurabush -feus -feute -feuter -feuterer -FEV -fever -feverberry -feverberries -feverbush -fever-cooling -fevercup -fever-destroying -fevered -feveret -feverfew -feverfews -fevergum -fever-haunted -fevery -fevering -feverish -feverishly -feverishness -feverless -feverlike -fever-lurden -fever-maddened -feverous -feverously -fever-reducer -fever-ridden -feverroot -fevers -fever-shaken -fever-sick -fever-smitten -fever-stricken -fevertrap -fever-troubled -fevertwig -fevertwitch -fever-warm -fever-weakened -feverweed -feverwort -Fevre -Fevrier -few -few-acred -few-celled -fewer -fewest -few-flowered -few-fruited -fewmand -fewmets -fewnes -fewneses -fewness -fewnesses -few-seeded -fewsome -fewter -fewterer -few-toothed -fewtrils -Fez -fezes -Fezzan -fezzed -fezzes -fezzy -Fezziwig -FF -ff. -FFA -FFC -FFI -F-flat -FFRDC -FFS -FFT -FFV -FFVs -fg -FGA -FGB -FGC -FGD -fgn -FGREP -fgrid -FGS -FGSA -FHA -FHLBA -FHLMC -FHMA -f-hole -fhrer -FHST -FI -fy -Fia -FYA -fiacre -fiacres -fiador -fiancailles -fiance -fianced -fiancee -fiancees -fiances -fianchetti -fianchetto -fiancing -Fiann -Fianna -fiant -fiants -fiar -fiard -fiaroblast -fiars -fiaschi -fiasco -fiascoes -fiascos -fiat -fiatconfirmatio -fiats -Fiatt -fiaunt -FIB -fibbed -fibber -fibbery -fibbers -fibbing -fibble-fable -fibdom -Fiber -fiberboard -fiberboards -fibered -fiber-faced -fiberfill -Fiberfrax -Fiberglas -fiberglass -fiberglasses -fiberization -fiberize -fiberized -fiberizer -fiberizes -fiberizing -fiberless -fiberous -fibers -fiber's -fiberscope -fiber-shaped -fiberware -Fibiger -fible-fable -Fibonacci -fibr- -fibra -fibranne -fibration -fibratus -fibre -fibreboard -fibred -fibrefill -fibreglass -fibreless -fibres -fibreware -fibry -fibriform -fibril -fibrilated -fibrilation -fibrilations -fibrilla -fibrillae -fibrillar -fibrillary -fibrillate -fibrillated -fibrillates -fibrillating -fibrillation -fibrillations -fibrilled -fibrilliferous -fibrilliform -fibrillose -fibrillous -fibrils -fibrin -fibrinate -fibrination -fibrine -fibrinemia -fibrino- -fibrinoalbuminous -fibrinocellular -fibrinogen -fibrinogenetic -fibrinogenic -fibrinogenically -fibrinogenous -fibrinoid -fibrinokinase -fibrinolyses -fibrinolysin -fibrinolysis -fibrinolytic -fibrinoplastic -fibrinoplastin -fibrinopurulent -fibrinose -fibrinosis -fibrinous -fibrins -fibrinuria -fibro -fibro- -fibroadenia -fibroadenoma -fibroadipose -fibroangioma -fibroareolar -fibroblast -fibroblastic -fibrobronchitis -fibrocalcareous -fibrocarcinoma -fibrocartilage -fibrocartilaginous -fibrocaseose -fibrocaseous -fibrocellular -fibrocement -fibrochondritis -fibrochondroma -fibrochondrosteal -fibrocyst -fibrocystic -fibrocystoma -fibrocyte -fibrocytic -fibrocrystalline -fibroelastic -fibroenchondroma -fibrofatty -fibroferrite -fibroglia -fibroglioma -fibrohemorrhagic -fibroid -fibroids -fibroin -fibroins -fibrointestinal -fibroligamentous -fibrolipoma -fibrolipomatous -fibrolite -fibrolitic -fibroma -fibromas -fibromata -fibromatoid -fibromatosis -fibromatous -fibromembrane -fibromembranous -fibromyectomy -fibromyitis -fibromyoma -fibromyomatous -fibromyomectomy -fibromyositis -fibromyotomy -fibromyxoma -fibromyxosarcoma -fibromucous -fibromuscular -fibroneuroma -fibronuclear -fibronucleated -fibro-osteoma -fibropapilloma -fibropericarditis -fibroplasia -fibroplastic -fibropolypus -fibropsammoma -fibropurulent -fibroreticulate -fibrosarcoma -fibrose -fibroserous -fibroses -fibrosis -fibrosity -fibrosities -fibrositis -Fibrospongiae -fibrotic -fibrotuberculosis -fibrous -fibrous-coated -fibrously -fibrousness -fibrous-rooted -fibrovasal -fibrovascular -fibs -fibster -fibula -fibulae -fibular -fibulare -fibularia -fibulas -fibulocalcaneal -fic -FICA -ficary -Ficaria -ficaries -fication -ficche -fice -fyce -ficelle -fices -fyces -fichat -fiche -fiches -Fichte -Fichtean -Fichteanism -fichtelite -fichu -fichus -ficiform -ficin -Ficino -ficins -fickle -fickle-fancied -fickle-headed -ficklehearted -fickle-minded -fickle-mindedly -fickle-mindedness -fickleness -ficklenesses -fickler -ficklest -ficklety -ficklewise -fickly -fico -ficoes -ficoid -Ficoidaceae -ficoidal -Ficoideae -ficoides -fict -fictation -fictil -fictile -fictileness -fictility -fiction -fictional -fictionalization -fictionalize -fictionalized -fictionalizes -fictionalizing -fictionally -fictionary -fictioneer -fictioneering -fictioner -fictionisation -fictionise -fictionised -fictionising -fictionist -fictionistic -fictionization -fictionize -fictionized -fictionizing -fictionmonger -fictions -fiction's -fictious -fictitious -fictitiously -fictitiousness -fictive -fictively -fictor -Ficula -Ficus -ficuses -fid -Fidac -fidalgo -fidate -fidation -fidawi -fidded -fidding -fiddle -fiddleback -fiddle-back -fiddlebow -fiddlebrained -fiddle-brained -fiddlecome -fiddled -fiddlededee -fiddle-de-dee -fiddledeedee -fiddlefaced -fiddle-faced -fiddle-faddle -fiddle-faddled -fiddle-faddler -fiddle-faddling -fiddle-flanked -fiddlehead -fiddle-head -fiddleheaded -fiddley -fiddleys -fiddle-lipped -fiddleneck -fiddle-neck -fiddler -fiddlerfish -fiddlerfishes -fiddlery -fiddlers -fiddles -fiddle-scraping -fiddle-shaped -fiddlestick -fiddlesticks -fiddlestring -fiddle-string -Fiddletown -fiddle-waist -fiddlewood -fiddly -fiddlies -fiddling -FIDE -fideicommiss -fideicommissa -fideicommissary -fideicommissaries -fideicommission -fideicommissioner -fideicommissor -fideicommissum -fidei-commissum -fideicommissumissa -fideism -fideisms -fideist -fideistic -fideists -fidejussion -fidejussionary -fidejussor -fidejussory -Fidel -Fidela -Fidelas -Fidele -fideles -Fidelia -Fidelio -Fidelis -Fidelism -Fidelity -fidelities -Fidellas -Fidellia -Fiden -fideos -fidepromission -fidepromissor -Fides -Fidessa -fidfad -fidge -fidged -fidges -fidget -fidgetation -fidgeted -fidgeter -fidgeters -fidgety -fidgetily -fidgetiness -fidgeting -fidgetingly -fidgets -fidging -Fidia -fidibus -fidicinal -fidicinales -fidicula -fidiculae -fidley -fidleys -FIDO -Fidole -Fydorova -fidos -fids -fiducia -fiducial -fiducially -fiduciary -fiduciaries -fiduciarily -fiducinales -fie -fied -Fiedler -fiedlerite -Fiedling -fief -fiefdom -fiefdoms -fie-fie -fiefs -fiel -Field -Fieldale -fieldball -field-bed -fieldbird -field-book -field-controlled -field-conventicle -field-conventicler -field-cornet -field-cornetcy -field-day -fielded -fielden -fielder -fielders -fieldfare -fieldfight -field-glass -field-holler -fieldy -fieldie -Fielding -fieldish -fieldleft -fieldman -field-marshal -field-meeting -fieldmen -fieldmice -fieldmouse -Fieldon -fieldpiece -fieldpieces -Fields -fieldsman -fieldsmen -fieldstone -fieldstrip -field-strip -field-stripped -field-stripping -field-stript -Fieldton -fieldward -fieldwards -fieldwork -field-work -fieldworker -fieldwort -Fiend -fiendful -fiendfully -fiendhead -fiendish -fiendishly -fiendishness -fiendism -fiendly -fiendlier -fiendliest -fiendlike -fiendliness -fiends -fiendship -fient -Fierabras -Fierasfer -fierasferid -Fierasferidae -fierasferoid -fierce -fierce-eyed -fierce-faced -fiercehearted -fiercely -fierce-looking -fierce-minded -fiercen -fierce-natured -fiercened -fierceness -fiercenesses -fiercening -fiercer -fiercest -fiercly -fierding -Fierebras -fieri -fiery -fiery-bright -fiery-cross -fiery-crowned -fiery-eyed -fierier -fieriest -fiery-faced -fiery-fierce -fiery-flaming -fiery-footed -fiery-helmed -fiery-hoofed -fiery-hot -fiery-kindled -fierily -fiery-liquid -fiery-mouthed -fieriness -fierinesses -fiery-pointed -fiery-rash -fiery-seeming -fiery-shining -fiery-spangled -fiery-sparkling -fiery-spirited -fiery-sworded -fiery-tempered -fiery-tressed -fiery-twinkling -fiery-veined -fiery-visaged -fiery-wheeled -fiery-winged -fierte -Fiertz -Fiesole -fiesta -fiestas -Fiester -fieulamort -FIFA -Fife -fifed -fifer -fife-rail -fifers -fifes -Fifeshire -Fyffe -Fifi -fifie -Fifield -Fifine -Fifinella -fifing -fifish -FIFO -fifteen -fifteener -fifteenfold -fifteen-pounder -fifteens -fifteenth -fifteenthly -fifteenths -fifth -fifth-column -fifthly -fifths -fifty -fifty-acre -fifty-eight -fifty-eighth -fifties -fiftieth -fiftieths -fifty-fifth -fifty-fifty -fifty-first -fifty-five -fiftyfold -fifty-four -fifty-fourth -fifty-year -fifty-mile -fifty-nine -fifty-ninth -fifty-one -fiftypenny -fifty-second -fifty-seven -fifty-seventh -fifty-six -fifty-sixth -fifty-third -fifty-three -fiftyty-fifty -fifty-two -fig -fig. -figary -figaro -figbird -fig-bird -figboy -figeater -figeaters -figent -figeter -Figge -figged -figgery -figgy -figgier -figgiest -figging -figgle -figgum -fight -fightable -fighter -fighter-bomber -fighteress -fighter-interceptor -fighters -fighting -fightingly -fightings -fight-off -fights -fightwite -Figitidae -Figl -fig-leaf -figless -figlike -figment -figmental -figments -figo -Figone -figpecker -figs -fig's -fig-shaped -figshell -fig-tree -Figueres -Figueroa -figulate -figulated -figuline -figulines -figura -figurability -figurable -figurae -figural -figurally -figurant -figurante -figurants -figurate -figurately -figuration -figurational -figurations -figurative -figuratively -figurativeness -figurato -figure -figure-caster -figured -figuredly -figure-flinger -figure-ground -figurehead -figure-head -figureheadless -figureheads -figureheadship -figureless -figurer -figurers -figures -figuresome -figurette -figury -figurial -figurine -figurines -figuring -figurings -figurism -figurist -figuriste -figurize -figworm -figwort -fig-wort -figworts -FYI -Fiji -Fijian -fike -fyke -fiked -fikey -fikery -fykes -fikh -fikie -fiking -fil -fila -filace -filaceous -filacer -Filago -filagree -filagreed -filagreeing -filagrees -filagreing -filament -filamentar -filamentary -filamented -filamentiferous -filamentoid -filamentose -filamentous -filaments -filament's -filamentule -filander -filanders -filao -filar -filaree -filarees -Filaria -filariae -filarial -filarian -filariasis -filaricidal -filariform -filariid -Filariidae -filariids -filarious -filasse -filate -filator -filatory -filature -filatures -filaze -filazer -Filbert -Filberte -Filberto -filberts -filch -filched -filcher -filchery -filchers -filches -filching -filchingly -Fylde -file -filea -fileable -filecard -filechar -filed -filefish -file-fish -filefishes -file-hard -filelike -filemaker -filemaking -filemark -filemarks -Filemon -filemot -filename -filenames -filename's -Filer -filers -Files -file's -filesave -filesmith -filesniff -file-soft -filespec -filestatus -filet -fileted -fileting -filets -fylfot -fylfots -fylgja -fylgjur -fili -fili- -Filia -filial -filiality -filially -filialness -Filiano -filiate -filiated -filiates -filiating -filiation -filibeg -filibegs -filibranch -Filibranchia -filibranchiate -filibuster -filibustered -filibusterer -filibusterers -filibustering -filibusterism -filibusterous -filibusters -filibustrous -filical -Filicales -filicauline -Filices -filicic -filicidal -filicide -filicides -filiciform -filicin -Filicineae -filicinean -filicinian -filicite -Filicites -filicoid -filicoids -filicology -filicologist -Filicornia -Filide -filiety -filiferous -filiform -filiformed -Filigera -filigerous -filigrain -filigrained -filigrane -filigraned -filigree -filigreed -filigreeing -filigrees -filigreing -filii -filing -filings -Filion -filionymic -filiopietistic -filioque -Filip -Filipe -Filipendula -filipendulous -Filipina -Filipiniana -Filipinization -Filipinize -Filipino -Filipino-american -Filipinos -Filippa -filippi -filippic -Filippino -Filippo -filipuncture -filister -filisters -filite -filius -Filix -filix-mas -fylker -fill -filla -fillable -fillagree -fillagreed -fillagreing -Fillander -fill-belly -Fillbert -fill-dike -fille -fillebeg -filled -Filley -fillemot -Fillender -Filler -fillercap -filler-in -filler-out -fillers -filler-up -filles -fillet -filleted -filleter -filleting -filletlike -fillets -filletster -filleul -filly -filli- -Fillian -fillies -filly-folly -fill-in -filling -fillingly -fillingness -fillings -fillip -filliped -fillipeen -filliping -fillips -fillister -fillmass -Fillmore -fillo -fillock -fillos -fillowite -fill-paunch -fills -fill-space -fill-up -film -filmable -filmcard -filmcards -filmdom -filmdoms -filmed -film-eyed -Filmer -filmers -filmet -film-free -filmgoer -filmgoers -filmgoing -filmy -filmic -filmically -filmy-eyed -filmier -filmiest -filmiform -filmily -filminess -filming -filmish -filmist -filmize -filmized -filmizing -filmland -filmlands -filmlike -filmmake -filmmaker -filmmaking -filmogen -filmography -filmographies -Filmore -films -filmset -filmsets -filmsetter -filmsetting -filmslide -filmstrip -filmstrips -film-struck -FILO -filo- -Filomena -filoplumaceous -filoplume -filopodia -filopodium -filos -Filosa -filose -filoselle -filosofe -filosus -fils -filt -filter -filterability -filterable -filterableness -filtered -filterer -filterers -filtering -filterman -filtermen -filter-passing -filters -filter's -filter-tipped -filth -filth-borne -filth-created -filth-fed -filthy -filthier -filthiest -filthify -filthified -filthifying -filthy-handed -filthily -filthiness -filthinesses -filthless -filths -filth-sodden -filtrability -filtrable -filtratable -filtrate -filtrated -filtrates -filtrating -filtration -filtrations -filtre -filum -Fima -fimble -fimbles -fimbria -fimbriae -fimbrial -fimbriate -fimbriated -fimbriating -fimbriation -fimbriatum -fimbricate -fimbricated -fimbrilla -fimbrillae -fimbrillate -fimbrilliferous -fimbrillose -fimbriodentate -Fimbristylis -Fimbul-winter -fimetarious -fimetic -fimicolous -FIMS -FIN -Fyn -Fin. -Fina -finable -finableness -finagle -finagled -finagler -finaglers -finagles -finagling -final -finale -finales -finalis -finalism -finalisms -finalist -finalists -finality -finalities -finalization -finalizations -finalize -finalized -finalizes -finalizing -finally -finals -Finance -financed -financer -finances -financial -financialist -financially -financier -financiere -financiered -financiery -financiering -financiers -financier's -financing -financist -finary -finback -fin-backed -finbacks -Finbar -finbone -Finbur -finca -fincas -finch -finchbacked -finch-backed -finched -finchery -finches -Finchley -Finchville -find -findability -findable -findal -finder -finders -findfault -findhorn -findy -finding -finding-out -findings -findjan -Findlay -Findley -findon -finds -FINE -fineable -fineableness -fine-appearing -fine-ax -finebent -Fineberg -fine-bore -fine-bred -finecomb -fine-count -fine-cut -fined -fine-dividing -finedraw -fine-draw -fine-drawer -finedrawing -fine-drawing -fine-drawn -fine-dressed -fine-drew -fine-eyed -Fineen -fineer -fine-feathered -fine-featured -fine-feeling -fine-fleeced -fine-furred -Finegan -fine-graded -fine-grain -fine-grained -fine-grainedness -fine-haired -fine-headed -fineish -fineleaf -fine-leaved -fineless -finely -Finella -fine-looking -Fineman -finement -fine-mouthed -fineness -finenesses -fine-nosed -Finer -finery -fineries -fines -fine-set -fine-sifted -fine-skinned -fine-spirited -fine-spoken -finespun -fine-spun -finesse -finessed -finesser -finesses -finessing -finest -finestill -fine-still -finestiller -finestra -fine-tapering -fine-threaded -fine-timbered -fine-toned -fine-tongued -fine-tooth -fine-toothcomb -fine-tooth-comb -fine-toothed -finetop -fine-tricked -Fineview -finew -finewed -fine-wrought -finfish -finfishes -finfoot -fin-footed -finfoots -Fingal -Fingall -Fingallian -fingan -fingent -finger -fingerable -finger-ache -finger-and-toe -fingerberry -fingerboard -fingerboards -fingerbreadth -finger-comb -finger-cone -finger-cut -fingered -finger-end -fingerer -fingerers -fingerfish -fingerfishes -fingerflower -finger-foxed -fingerhold -fingerhook -fingery -fingering -fingerings -fingerleaf -fingerless -fingerlet -fingerlike -fingerling -fingerlings -fingermark -finger-marked -fingernail -fingernails -finger-paint -fingerparted -finger-pointing -fingerpost -finger-post -fingerprint -fingerprinted -fingerprinting -fingerprints -fingerroot -fingers -finger-shaped -fingersmith -fingerspin -fingerstall -finger-stall -fingerstone -finger-stone -fingertip -fingertips -Fingerville -fingerwise -fingerwork -fingian -fingle-fangle -Fingo -fingram -fingrigo -Fingu -Fini -finial -finialed -finials -finical -finicality -finically -finicalness -finicism -finick -finicky -finickier -finickiest -finickily -finickin -finickiness -finicking -finickingly -finickingness -finify -finific -Finiglacial -finikin -finiking -fining -finings -finis -finises -finish -finishable -finish-bore -finish-cut -finished -finisher -finishers -finishes -finish-form -finish-grind -finishing -finish-machine -finish-mill -finish-plane -finish-ream -finish-shape -finish-stock -finish-turn -Finist -Finistere -Finisterre -finitary -finite -finite-dimensional -finitely -finiteness -finites -finitesimal -finity -finitism -finitive -finitude -finitudes -finjan -Fink -finked -finkel -Finkelstein -finky -finking -finks -Finksburg -Finlay -Finlayson -Finland -Finlander -Finlandia -finlandization -Finley -Finleyville -finless -finlet -Finletter -Finly -finlike -Finmark -finmarks -Finn -finnac -finnack -finnan -Finnbeara -finned -Finnegan -Finney -finner -finnesko -Finny -Finnic -Finnicize -finnick -finnicky -finnickier -finnickiest -finnicking -Finnie -finnier -finniest -Finnigan -finning -finnip -Finnish -Finnmark -finnmarks -finnoc -finnochio -Finno-hungarian -Finno-slav -Finno-slavonic -Finno-tatar -Finno-turki -Finno-turkish -Finno-Ugrian -Finno-Ugric -finns -Fino -finochio -finochios -finos -fins -fin's -Finsen -fin-shaped -fin-spined -finspot -Finstad -Finsteraarhorn -fintadores -fin-tailed -fin-toed -fin-winged -Finzer -FIO -FIOC -Fyodor -Fiona -Fionn -Fionna -Fionnuala -Fionnula -Fiora -fiord -fiorded -fiords -Fiore -Fiorello -Fiorenza -Fiorenze -Fioretti -fiorin -fiorite -fioritura -fioriture -Fiot -FIP -fipenny -fippence -fipple -fipples -FIPS -fiqh -fique -fiques -FIR -Firbank -Firbauti -Firbolg -Firbolgs -fir-bordered -fir-built -firca -Fircrest -fir-crested -fyrd -Firdausi -Firdousi -fyrdung -Firdusi -fire -fire- -fireable -fire-and-brimstone -fire-angry -firearm -fire-arm -firearmed -firearms -firearm's -fireback -fireball -fire-ball -fireballs -fire-baptized -firebase -firebases -Firebaugh -fire-bearing -firebed -Firebee -fire-bellied -firebird -fire-bird -firebirds -fireblende -fireboard -fireboat -fireboats -fireboy -firebolt -firebolted -firebomb -firebombed -firebombing -firebombs -fireboot -fire-boot -fire-born -firebote -firebox -fire-box -fireboxes -firebrand -fire-brand -firebrands -firebrat -firebrats -firebreak -firebreaks -fire-breathing -fire-breeding -Firebrick -firebricks -firebug -firebugs -fireburn -fire-burning -fire-burnt -fire-chaser -fire-clad -fireclay -fireclays -firecoat -fire-cracked -firecracker -firecrackers -firecrest -fire-crested -fire-cross -fire-crowned -fire-cure -fire-cured -fire-curing -fired -firedamp -fire-damp -firedamps -fire-darting -fire-detecting -firedog -firedogs -firedragon -firedrake -fire-drake -fire-eater -fire-eating -fire-eyed -fire-endurance -fire-engine -fire-extinguisher -fire-extinguishing -firefall -firefang -fire-fang -firefanged -firefanging -firefangs -firefight -firefighter -firefighters -firefighting -fireflaught -fire-flaught -firefly -fire-fly -fireflies -fireflirt -firefly's -fire-float -fireflower -fire-flowing -fire-foaming -fire-footed -fire-free -fire-gilded -fire-god -fireguard -firehall -firehalls -fire-hardened -fire-hoofed -fire-hook -fire-hot -firehouse -firehouses -fire-hunt -fire-hunting -fire-iron -fire-leaves -fireless -firelight -fire-light -fire-lighted -firelike -fire-lily -fire-lilies -fireling -fire-lipped -firelit -firelock -firelocks -fireman -firemanship -fire-marked -firemaster -fire-master -firemen -fire-mouthed -fire-new -Firenze -firepan -fire-pan -firepans -firepink -firepinks -fire-pitted -fireplace -fire-place -fireplaces -fireplace's -fireplough -fireplow -fire-plow -fireplug -fireplugs -fire-polish -firepot -fire-pot -firepower -fireproof -fire-proof -fireproofed -fireproofing -fireproofness -fireproofs -fire-quenching -firer -fire-raiser -fire-raising -fire-red -fire-resistant -fire-resisting -fire-resistive -fire-retardant -fire-retarded -fire-ring -fire-robed -fireroom -firerooms -firers -fires -firesafe -firesafeness -fire-safeness -firesafety -fire-scarred -fire-scathed -fire-screen -fire-seamed -fireshaft -fireshine -fire-ship -fireside -firesider -firesides -firesideship -fire-souled -fire-spirited -fire-spitting -firespout -fire-sprinkling -Firesteel -Firestone -fire-stone -firestop -firestopping -firestorm -fire-strong -fire-swart -fire-swift -firetail -fire-tailed -firethorn -fire-tight -firetop -firetower -firetrap -firetraps -firewall -fireward -firewarden -fire-warmed -firewater -fireweed -fireweeds -fire-wheeled -fire-winged -firewood -firewoods -firework -fire-work -fire-worker -fireworky -fireworkless -fireworks -fireworm -fireworms -firy -firiness -firing -firings -firk -firked -firker -firkin -firking -firkins -firlot -firm -firma -firmament -firmamental -firmaments -Firman -firmance -firmans -firmarii -firmarius -firmation -firm-based -firm-braced -firm-chinned -firm-compacted -firmed -firmer -firmers -firmest -firm-footed -firm-framed -firmhearted -Firmicus -Firmin -firming -firmisternal -Firmisternia -firmisternial -firmisternous -firmity -firmitude -firm-jawed -firm-joint -firmland -firmless -firmly -firm-minded -firm-nerved -firmness -firmnesses -firm-paced -firm-planted -FIRMR -firm-rooted -firms -firm-set -firm-sinewed -firm-textured -firmware -firm-written -firn -firnification -Firnismalerei -firns -Firoloida -Firooc -firry -firring -firs -fir-scented -first -first-aid -first-aider -first-begot -first-begotten -firstborn -first-born -first-bred -first-built -first-chop -first-class -firstcomer -first-conceived -first-created -first-day -first-done -first-endeavoring -firster -first-expressed -first-famed -first-floor -first-foot -first-footer -first-formed -first-found -first-framed -first-fruit -firstfruits -first-gendered -first-generation -first-gotten -first-grown -firsthand -first-hand -first-in -first-invented -first-known -firstly -first-line -firstling -firstlings -first-loved -first-made -first-mentioned -first-mining -first-mortgage -first-name -first-named -firstness -first-night -first-nighter -first-out -first-page -first-past-the-post -first-preferred -first-rate -first-rately -first-rateness -first-rater -first-ripe -first-run -firsts -first-seen -firstship -first-string -first-told -first-written -Firth -firths -fir-topped -fir-tree -FYS -fisc -fiscal -fiscalify -fiscalism -fiscality -fiscalization -fiscalize -fiscalized -fiscalizing -fiscally -fiscals -Fisch -Fischbein -Fischer -Fischer-Dieskau -fischerite -fiscs -fiscus -fise -fisetin -Fish -fishability -fishable -fish-and-chips -Fishback -fish-backed -fishbed -Fishbein -fish-bellied -fishberry -fishberries -fish-blooded -fishboat -fishboats -fishbolt -fishbolts -fishbone -fishbones -fishbowl -fishbowls -fish-canning -fish-cultural -fish-culturist -fish-day -fisheater -fish-eating -fished -fisheye -fish-eyed -fisheyes -Fisher -fisherboat -fisherboy -fisher-cat -fisheress -fisherfolk -fishergirl -fishery -fisheries -fisherman -fishermen -fisherpeople -Fishers -Fishersville -Fishertown -Fisherville -fisherwoman -Fishes -fishet -fish-fag -fishfall -fish-fed -fish-feeding -fishfinger -fish-flaking -fishful -fishgarth -fishgig -fish-gig -fishgigs -fish-god -fish-goddess -fishgrass -fish-hatching -fishhold -fishhood -fishhook -fish-hook -fishhooks -fishhouse -fishy -fishyard -fishyback -fishybacking -fishier -fishiest -fishify -fishified -fishifying -fishily -fishiness -fishing -fishingly -fishings -Fishkill -fishless -fishlet -fishlike -fishline -fishlines -fishling -Fishman -fishmeal -fishmeals -fishmen -fishmonger -fishmouth -fishnet -fishnets -fishplate -fishpole -fishpoles -fishpond -fishponds -fishpool -fishpot -fishpotter -fishpound -fish-producing -fish-scale -fish-scaling -fish-selling -fish-shaped -fishskin -fish-skin -fish-slitting -fishspear -Fishtail -fish-tail -fishtailed -fishtailing -fishtails -fishtail-shaped -Fishtrap -fishway -fishways -fishweed -fishweir -fishwife -fishwives -fishwoman -fishwood -fishworker -fishworks -fishworm -Fisk -Fiskdale -Fiske -Fisken -Fiskeville -fisnoga -fissate -fissi- -fissicostate -fissidactyl -Fissidens -Fissidentaceae -fissidentaceous -fissile -fissileness -fissilingual -Fissilinguia -fissility -fission -fissionability -fissionable -fissional -fissioned -fissioning -fissions -fissipalmate -fissipalmation -fissiparation -fissiparism -fissiparity -fissiparous -fissiparously -fissiparousness -fissiped -Fissipeda -fissipedal -fissipedate -Fissipedia -fissipedial -fissipeds -Fissipes -fissirostral -fissirostrate -Fissirostres -fissive -fissle -fissura -fissural -fissuration -fissure -fissured -fissureless -Fissurella -Fissurellidae -fissures -fissury -fissuriform -fissuring -fist -fisted -fister -fistfight -fistful -fistfuls -Fisty -fistiana -fistic -fistical -fisticuff -fisticuffer -fisticuffery -fisticuffing -fisticuffs -fistify -fistiness -fisting -fistinut -fistle -fistlike -fistmele -fistnote -fistnotes -fists -fistuca -fistula -fistulae -Fistulana -fistular -Fistularia -Fistulariidae -fistularioid -fistulas -fistulate -fistulated -fistulatome -fistulatous -fistule -fistuliform -Fistulina -fistulization -fistulize -fistulized -fistulizing -fistulose -fistulous -fistwise -FIT -Fitch -Fitchburg -fitche -fitched -fitchee -fitcher -fitchered -fitchery -fitchering -fitches -fitchet -fitchets -fitchew -fitchews -fitchy -fitful -fitfully -fitfulness -Fithian -fitified -fitly -fitment -fitments -fitness -fitnesses -fitout -fitroot -FITS -fittable -fittage -fytte -fitted -fittedness -fitten -fitter -fitters -fitter's -fyttes -fittest -fitty -fittie-lan -fittier -fittiest -fittyfied -fittily -fittiness -Fitting -fittingly -fittingness -fittings -Fittipaldi -fittit -fittyways -fittywise -Fitton -Fittonia -Fitts -Fittstown -fitweed -Fitz -Fitzclarence -Fitzger -FitzGerald -Fitzhugh -Fitz-james -Fitzpat -Fitzpatrick -Fitzroy -Fitzroya -Fitzsimmons -Fiuman -fiumara -Fiume -Fiumicino -five -five-acre -five-act -five-and-dime -five-and-ten -fivebar -five-barred -five-beaded -five-by-five -five-branched -five-card -five-chambered -five-corn -five-cornered -five-corners -five-cut -five-day -five-eighth -five-figure -five-finger -five-fingered -five-fingers -five-flowered -five-foiled -fivefold -fivefoldness -five-foot -five-gaited -five-guinea -five-horned -five-hour -five-year -five-inch -five-leaf -five-leafed -five-leaved -five-legged -five-line -five-lined -fiveling -five-lobed -five-master -five-mile -five-minute -five-nerved -five-nine -five-page -five-part -five-parted -fivepence -fivepenny -five-percenter -fivepins -five-ply -five-pointed -five-pound -five-quart -fiver -five-rater -five-reel -five-reeler -five-ribbed -five-room -fivers -fives -fivescore -five-shooter -five-sisters -fivesome -five-spot -five-spotted -five-star -fivestones -five-story -five-stringed -five-toed -five-toothed -five-twenty -five-valved -five-volume -five-week -fivish -fix -fixable -fixage -fixate -fixated -fixates -fixatif -fixatifs -fixating -fixation -fixations -fixative -fixatives -fixator -fixature -fixe -fixed -fixed-bar -fixed-do -fixed-hub -fixed-income -fixedly -fixedness -fixednesses -fixed-temperature -fixer -fixers -fixes -fixgig -fixidity -Fixin -fixing -fixings -fixin's -fixion -fixit -fixity -fixities -fixive -fixt -fixture -fixtureless -fixtures -fixture's -fixup -fixups -fixure -fixures -fiz -Fyzabad -Fizeau -fizelyite -fizgig -fizgigs -fizz -fizzed -fizzer -fizzers -fizzes -fizzy -fizzier -fizziest -fizzing -fizzle -fizzled -fizzles -fizzling -fizzwater -fjarding -Fjare -fjeld -fjelds -Fjelsted -fjerding -fjord -fjorded -fjords -Fjorgyn -FL -Fl. -Fla -Fla. -flab -flabbella -flabbergast -flabbergastation -flabbergasted -flabbergasting -flabbergastingly -flabbergasts -flabby -flabby-cheeked -flabbier -flabbiest -flabbily -flabbiness -flabbinesses -flabel -flabella -flabellarium -flabellate -flabellation -flabelli- -flabellifoliate -flabelliform -flabellinerved -flabellum -flabile -flabra -flabrum -flabs -FLACC -flaccid -flaccidity -flaccidities -flaccidly -flaccidness -flachery -flacherie -Flacian -Flacianism -Flacianist -flack -flacked -flacker -flackery -flacket -flacking -flacks -flacon -flacons -Flacourtia -Flacourtiaceae -flacourtiaceous -flaff -flaffer -flag -flagarie -flag-bearer -flag-bedizened -flagboat -flagella -flagellant -flagellantism -flagellants -flagellar -Flagellaria -Flagellariaceae -flagellariaceous -Flagellata -Flagellatae -flagellate -flagellated -flagellates -flagellating -flagellation -flagellations -flagellative -flagellator -flagellatory -flagellators -flagelliferous -flagelliform -flagellist -flagellosis -flagellula -flagellulae -flagellum -flagellums -flageolet -flageolets -flagfall -flagfish -flagfishes -Flagg -flagged -flaggelate -flaggelated -flaggelating -flaggelation -flaggella -flagger -flaggery -flaggers -flaggy -flaggier -flaggiest -flaggily -flagginess -flagging -flaggingly -flaggings -flaggish -flagilate -flagitate -flagitation -flagitious -flagitiously -flagitiousness -flagleaf -Flagler -flagless -flaglet -flaglike -flagmaker -flagmaking -flagman -flag-man -flagmen -flag-officer -flagon -flagonet -flagonless -flagons -flagon-shaped -flagpole -flagpoles -flagrance -flagrancy -flagrant -flagrante -flagrantly -flagrantness -flagrate -flagroot -flag-root -flags -flag's -flagship -flag-ship -flagships -Flagstad -Flagstaff -flag-staff -flagstaffs -flagstaves -flagstick -flagstone -flag-stone -flagstones -Flagtown -flag-waver -flag-waving -flagworm -Flaherty -flay -flayed -flayer -flayers -flayflint -flaying -flail -flailed -flailing -flaillike -flails -flain -flair -flairs -flays -flaite -flaith -flaithship -flajolotite -flak -flakage -flake -flakeboard -flaked -flaked-out -flakeless -flakelet -flaker -flakers -flakes -flaky -flakier -flakiest -flakily -flakiness -flaking -Flam -Flamandization -Flamandize -flamant -flamb -flambage -flambant -flambe -flambeau -flambeaus -flambeaux -flambee -flambeed -flambeing -flamberg -flamberge -flambes -flamboyance -flamboyances -flamboyancy -flamboyant -flamboyantism -flamboyantize -flamboyantly -flamboyer -flame -flame-breasted -flame-breathing -flame-colored -flame-colour -flame-cut -flamed -flame-darting -flame-devoted -flame-eyed -flame-faced -flame-feathered -flamefish -flamefishes -flameflower -flame-haired -flameholder -flameless -flamelet -flamelike -flamen -flamenco -flamencos -flamens -flamenship -flame-of-the-forest -flame-of-the-woods -flameout -flame-out -flameouts -flameproof -flameproofer -flamer -flame-red -flame-robed -flamers -flames -flame-shaped -flame-snorting -flames-of-the-woods -flame-sparkling -flamethrower -flame-thrower -flamethrowers -flame-tight -flame-tipped -flame-tree -flame-uplifted -flame-winged -flamfew -flamy -flamier -flamiest -flamineous -flamines -flaming -Flamingant -flamingly -flamingo -flamingoes -flamingo-flower -flamingos -Flaminian -flaminica -flaminical -Flamininus -Flaminius -flamless -flammability -flammable -flammably -flammant -Flammarion -flammation -flammed -flammeous -flammiferous -flammigerous -flamming -flammivomous -flammulated -flammulation -flammule -flams -Flamsteed -Flan -Flanagan -flancard -flancards -flanch -flanchard -flanche -flanched -flanconade -flanconnade -flandan -flanderkin -Flanders -flandowser -Flandreau -flane -flanerie -flaneries -flanes -flaneur -flaneurs -flang -flange -flanged -flangeless -flanger -flangers -flanges -flangeway -flanging -Flanigan -flank -flankard -flanked -flanken -flanker -flankers -flanky -flanking -flanks -flankwise -Flann -Flanna -flanned -flannel -flannelboard -flannelbush -flanneled -flannelet -flannelette -flannelflower -flanneling -flannelleaf -flannelleaves -flannelled -flannelly -flannelling -flannelmouth -flannelmouthed -flannelmouths -flannels -flannel's -Flannery -flanning -flanque -flans -flap -flapcake -flapdock -flapdoodle -flapdragon -flap-dragon -flap-eared -flaperon -flapjack -flapjacks -flapless -flapmouthed -flappable -flapped -flapper -flapper-bag -flapperdom -flappered -flapperhood -flappering -flapperish -flapperism -flappers -flappet -flappy -flappier -flappiest -flapping -flaps -flap's -flare -flareback -flareboard -flared -flareless -flare-out -flarer -flares -flare-up -flarfish -flarfishes -flary -flaring -flaringly -flaser -flash -flashback -flashbacks -flashboard -flash-board -flashbulb -flashbulbs -flashcube -flashcubes -flashed -Flasher -flashers -flashes -flashet -flashflood -flashforward -flashforwards -flashgun -flashguns -flash-house -flashy -flashier -flashiest -flashily -flashiness -flashinesses -flashing -flashingly -flashings -flashlamp -flashlamps -flashly -flashlight -flashlights -flashlight's -flashlike -flash-lock -flash-man -flashness -flashover -flashpan -flash-pasteurize -flashproof -flashtester -flashtube -flashtubes -flask -flasker -flasket -flaskets -flaskful -flasklet -flasks -flask-shaped -flasque -flat -flat-armed -flat-backed -flat-beaked -flatbed -flat-bed -flatbeds -flat-billed -flatboat -flat-boat -flatboats -flat-bosomed -flatbottom -flat-bottom -flat-bottomed -flatbread -flat-breasted -flatbrod -flat-browed -flatcap -flat-cap -flatcaps -flatcar -flatcars -flat-cheeked -flat-chested -flat-compound -flat-crowned -flat-decked -flatdom -flated -flat-ended -flateria -flatette -flat-faced -flatfeet -flatfish -flatfishes -flat-floored -flat-fold -flatfoot -flat-foot -flatfooted -flat-footed -flatfootedly -flat-footedly -flatfootedness -flat-footedness -flatfooting -flatfoots -flat-fronted -flat-grained -flat-handled -flathat -flat-hat -flat-hatted -flat-hatter -flat-hatting -flathe -Flathead -flat-head -flat-headed -flatheads -flat-heeled -flat-hoofed -flat-horned -flatiron -flat-iron -flatirons -flative -flat-knit -flatland -flatlander -flatlanders -flatlands -flatlet -flatlets -flatly -Flatlick -flatling -flatlings -flatlong -flatman -flatmate -flatmen -flat-minded -flat-mouthed -flatness -flatnesses -flatnose -flat-nose -flat-nosed -Flatonia -flat-out -flat-packed -flat-ribbed -flat-ring -flat-roofed -flats -flat-saw -flat-sawed -flat-sawing -flat-sawn -flat-shouldered -flat-sided -flat-soled -flat-sour -flatted -flatten -flattened -flattener -flatteners -flattening -flattens -flatter -flatterable -flatter-blind -flattercap -flatterdock -flattered -flatterer -flatterers -flatteress -flattery -flatteries -flattering -flatteringly -flatteringness -flatterous -flatters -flattest -flatteur -flattie -flatting -flattish -Flatto -flat-toothed -flattop -flat-top -flat-topped -flattops -flatulence -flatulences -flatulency -flatulencies -flatulent -flatulently -flatulentness -flatuosity -flatuous -flatus -flatuses -flat-visaged -flatway -flatways -flat-ways -flat-waisted -flatware -flatwares -flatwash -flatwashes -flatweed -flatwise -Flatwoods -flatwork -flatworks -flatworm -flatworms -flat-woven -Flaubert -Flaubertian -flaucht -flaught -flaughtbred -flaughter -flaughts -flaunch -flaunche -flaunched -flaunching -flaunt -flaunted -flaunter -flaunters -flaunty -flauntier -flauntiest -flauntily -flauntiness -flaunting -flauntingly -flaunts -flautino -flautist -flautists -flauto -flav -flavanilin -flavaniline -flavanol -flavanone -flavanthrene -flavanthrone -flavedo -flavedos -Flaveria -flavescence -flavescent -Flavia -Flavian -flavic -flavicant -flavid -flavin -flavine -flavines -flavins -Flavio -Flavius -flavo -flavo- -flavobacteria -Flavobacterium -flavone -flavones -flavonoid -flavonol -flavonols -flavoprotein -flavopurpurin -flavor -flavored -flavorer -flavorers -flavorful -flavorfully -flavorfulness -flavory -flavoriness -flavoring -flavorings -flavorless -flavorlessness -flavorous -flavorousness -flavors -flavorsome -flavorsomeness -flavour -flavoured -flavourer -flavourful -flavourfully -flavoury -flavouring -flavourless -flavourous -flavours -flavoursome -flavous -flaw -flawed -flawedness -flawflower -flawful -flawy -flawier -flawiest -flawing -flawless -flawlessly -flawlessness -flawn -flaws -flax -flaxbird -flaxboard -flaxbush -flax-colored -flaxdrop -flaxen -flaxen-colored -flaxen-haired -flaxen-headed -flaxen-wigged -flaxes -flaxy -flaxier -flaxiest -flax-leaved -flaxlike -Flaxman -flax-polled -flaxseed -flax-seed -flaxseeds -flax-sick -flaxtail -Flaxton -Flaxville -flaxweed -flaxwench -flaxwife -flaxwoman -flaxwort -FLB -flche -flchette -fld -fld. -fldxt -flea -fleabag -fleabags -fleabane -flea-bane -fleabanes -fleabite -flea-bite -fleabites -fleabiting -fleabitten -flea-bitten -fleabug -fleabugs -fleadock -fleahopper -fleay -fleak -flea-lugged -fleam -fleamy -fleams -fleapit -fleapits -flear -fleas -flea's -fleaseed -fleaweed -fleawood -fleawort -fleaworts -flebile -flebotomy -fleche -fleches -flechette -flechettes -Fleck -flecked -flecken -Flecker -fleckered -fleckering -flecky -fleckier -fleckiest -fleckiness -flecking -fleckled -fleckless -flecklessly -flecks -flecnodal -flecnode -flect -flection -flectional -flectionless -flections -flector -fled -Fleda -fledge -fledged -fledgeless -fledgeling -fledges -fledgy -fledgier -fledgiest -fledging -fledgling -fledglings -fledgling's -flee -Fleece -fleeceable -fleeced -fleeceflower -fleeceless -fleecelike -fleece-lined -fleecer -fleecers -fleeces -fleece's -fleece-vine -fleece-white -fleech -fleeched -fleeches -fleeching -fleechment -fleecy -fleecier -fleeciest -fleecily -fleecy-looking -fleeciness -fleecing -fleecy-white -fleecy-winged -fleeing -Fleeman -fleer -fleered -fleerer -fleering -fleeringly -fleerish -fleers -flees -Fleet -Fleeta -fleeted -fleeten -fleeter -fleetest -fleet-foot -fleet-footed -fleetful -fleeting -fleetingly -fleetingness -fleetings -fleetly -fleetness -fleetnesses -fleets -Fleetville -fleetwing -Fleetwood -flegm -fley -fleyed -fleyedly -fleyedness -fleying -fleyland -fleing -fleys -Fleischer -Fleischmanns -Fleisher -fleishig -Fleisig -fleysome -Flem -Flem. -fleme -flemer -Fleming -Flemings -Flemingsburg -Flemington -Flemish -Flemish-coil -flemished -flemishes -flemishing -Flemming -flench -flenched -flenches -flench-gut -flenching -Flensburg -flense -flensed -flenser -flensers -flenses -flensing -flentes -flerry -flerried -flerrying -flesh -flesh-bearing -fleshbrush -flesh-color -flesh-colored -flesh-colour -flesh-consuming -flesh-devouring -flesh-eater -flesh-eating -fleshed -fleshen -flesher -fleshers -fleshes -flesh-fallen -flesh-fly -fleshful -fleshhood -fleshhook -fleshy -fleshier -fleshiest -fleshy-fruited -fleshiness -fleshing -fleshings -fleshless -fleshlessness -fleshly -fleshlier -fleshliest -fleshlike -fleshlily -fleshly-minded -fleshliness -fleshling -fleshment -fleshmonger -flesh-pink -fleshpot -flesh-pot -fleshpots -fleshquake -Flessel -flet -Fleta -Fletch -fletched -Fletcher -Fletcherise -Fletcherised -Fletcherising -Fletcherism -Fletcherite -Fletcherize -Fletcherized -Fletcherizing -fletchers -fletches -fletching -fletchings -flether -fletton -Fleur -fleur-de-lis -fleur-de-lys -fleuret -Fleurette -fleurettee -fleuretty -Fleury -fleuron -fleuronee -fleuronne -fleuronnee -fleurs-de-lis -fleurs-de-lys -flew -flewed -Flewelling -flewit -flews -flex -flexagon -flexanimous -flexed -flexes -flexibility -flexibilities -flexibilty -flexible -flexibleness -flexibly -flexile -flexility -flexing -flexion -flexional -flexionless -flexions -flexity -flexitime -flexive -Flexner -flexo -Flexography -flexographic -flexographically -flexor -flexors -Flexowriter -flextime -flexuose -flexuosely -flexuoseness -flexuosity -flexuosities -flexuoso- -flexuous -flexuously -flexuousness -flexura -flexural -flexure -flexured -flexures -fly -flyability -flyable -flyaway -fly-away -flyaways -flyback -flyball -flybane -fly-bane -flibbertigibbet -flibbertigibbety -flibbertigibbets -flybelt -flybelts -flyby -fly-by-night -flybys -fly-bitten -flyblew -flyblow -fly-blow -flyblowing -flyblown -fly-blown -flyblows -flyboat -fly-boat -flyboats -flyboy -fly-boy -flyboys -flybook -flybrush -flibustier -flic -flycaster -flycatcher -fly-catcher -flycatchers -fly-catching -flicflac -flichter -flichtered -flichtering -flichters -flick -flicked -flicker -flickered -flickery -flickering -flickeringly -flickermouse -flickerproof -flickers -flickertail -flicky -flicking -flicks -Flicksville -flics -flidder -flidge -fly-dung -flyeater -flied -Flieger -Fliegerabwehrkanone -flier -flyer -flier-out -fliers -flyers -flyer's -flies -fliest -fliffus -fly-fish -fly-fisher -fly-fisherman -fly-fishing -flyflap -fly-flap -flyflapper -flyflower -fly-free -fligged -fligger -Flight -flighted -flighter -flightful -flighthead -flighty -flightier -flightiest -flightily -flightiness -flighting -flightless -flights -flight's -flight-shooting -flightshot -flight-shot -flight-test -flightworthy -flying -Flyingh -flyingly -flyings -fly-yrap -fly-killing -flyleaf -fly-leaf -flyleaves -flyless -flyman -flymen -flimflam -flim-flam -flimflammed -flimflammer -flimflammery -flimflamming -flimflams -flimmer -flimp -flimsy -flimsier -flimsies -flimsiest -flimsily -flimsilyst -flimsiness -flimsinesses -Flin -Flyn -flinch -flinched -flincher -flincher-mouse -flinchers -flinches -flinching -flinchingly -flinder -flinders -Flindersia -flindosa -flindosy -flyness -fly-net -fling -flingdust -flinger -flingers -flingy -flinging -flinging-tree -flings -fling's -flinkite -Flinn -Flynn -Flint -flint-dried -flinted -flinter -flint-glass -flinthead -flinthearted -flinty -flintier -flintiest -flintify -flintified -flintifying -flintily -flintiness -flinting -flintless -flintlike -flintlock -flint-lock -flintlocks -Flinton -flints -Flintshire -Flintstone -Flintville -flintwood -flintwork -flintworker -flyoff -flyoffs -flioma -flyover -flyovers -Flip -flypaper -flypapers -flypast -fly-past -flypasts -flipe -flype -fliped -flip-flap -flipflop -flip-flop -flip-flopped -flip-flopping -flip-flops -fliping -flipjack -flippance -flippancy -flippancies -flippant -flippantly -flippantness -flipped -flipper -flippery -flipperling -flippers -flipperty-flopperty -flippest -Flippin -flipping -flippity-flop -flyproof -flips -Flip-top -flip-up -fly-rail -flirt -flirtable -flirtation -flirtational -flirtationless -flirtation-proof -flirtations -flirtatious -flirtatiously -flirtatiousness -flirted -flirter -flirters -flirt-gill -flirty -flirtier -flirtiest -flirtigig -flirting -flirtingly -flirtish -flirtishness -flirtling -flirts -Flysch -flysches -fly-sheet -flisk -flisked -flisky -fliskier -fliskiest -flyspeck -flyspecked -fly-specked -flyspecking -flyspecks -fly-spleckled -fly-strike -fly-stuck -fly-swarmed -flyswat -flyswatter -flit -Flita -flytail -flitch -flitched -flitchen -flitches -flitching -flitchplate -flite -flyte -flited -flyted -flites -flytes -flitfold -flytier -flytiers -flytime -fliting -flyting -flytings -flytrap -flytraps -flits -flitted -flitter -flitterbat -flittered -flittering -flittermice -flittermmice -flittermouse -flitter-mouse -flittern -flitters -flitty -flittiness -flitting -flittingly -flitwite -fly-up -flivver -flivvers -flyway -flyways -flyweight -flyweights -flywheel -fly-wheel -flywheel-explosion -flywheels -flywinch -flywire -flywort -flix -flixweed -fll -FLN -flnerie -flneur -flneuse -Flo -fload -float -floatability -floatable -floatage -floatages -floatation -floatative -floatboard -float-boat -float-cut -floated -floatel -floatels -floater -floaters -float-feed -floaty -floatier -floatiest -floatiness -floating -floatingly -float-iron -floative -floatless -floatmaker -floatman -floatmen -floatplane -floats -floatsman -floatsmen -floatstone -float-stone -flob -flobby -Flobert -floc -flocced -flocci -floccilation -floccillation -floccing -floccipend -floccose -floccosely -flocculable -flocculant -floccular -flocculate -flocculated -flocculating -flocculation -flocculator -floccule -flocculence -flocculency -flocculent -flocculently -floccules -flocculi -flocculose -flocculous -flocculus -floccus -flock -flockbed -flocked -flocker -flocky -flockier -flockiest -flocking -flockings -flockless -flocklike -flockling -flockman -flockmaster -flock-meal -flockowner -flocks -flockwise -flocoon -flocs -Flodden -flodge -floe -floeberg -floey -Floerkea -floes -Floeter -flog -floggable -flogged -flogger -floggers -flogging -floggingly -floggings -flogmaster -flogs -flogster -Floy -Floyce -Floyd -Floydada -Floyddale -Flois -floit -floyt -flokati -flokatis -flokite -Flom -Flomaton -Flomot -Flon -flong -flongs -Flood -floodable -floodage -floodboard -floodcock -flooded -flooder -flooders -floodgate -flood-gate -floodgates -flood-hatch -floody -flooding -floodless -floodlet -floodlight -floodlighted -floodlighting -floodlights -floodlike -floodlilit -floodlit -floodmark -floodometer -floodplain -floodproof -floods -flood-tide -floodtime -floodway -floodways -floodwall -floodwater -floodwaters -Floodwood -flooey -flooie -flook -flookan -floor -floorage -floorages -floorboard -floorboards -floorcloth -floor-cloth -floorcloths -floored -floorer -floorers -floorhead -flooring -floorings -floor-length -floorless -floor-load -floorman -floormen -floors -floorshift -floorshifts -floorshow -floorthrough -floorway -floorwalker -floor-walker -floorwalkers -floorward -floorwise -floosy -floosie -floosies -floozy -floozie -floozies -FLOP -flop-eared -floperoo -flophouse -flophouses -flopover -flopovers -flopped -flopper -floppers -floppy -floppier -floppies -floppiest -floppily -floppiness -flopping -FLOPS -flop's -flop-top -flopwing -Flor -flor. -Flora -florae -Floral -Florala -Floralia -floralize -florally -floramor -floramour -floran -Florance -floras -florate -Flore -Floreal -floreat -floreate -floreated -floreating -Florey -Florella -Florence -florences -Florencia -Florencita -Florenda -florent -Florentia -Florentine -florentines -Florentinism -florentium -Florenz -Florenza -Flores -florescence -florescent -floressence -Floresville -floret -floreta -floreted -florets -Florette -floretty -floretum -Flori -Flory -flori- -Floria -floriage -Florian -Floriano -Florianolis -Florianopolis -floriate -floriated -floriation -floribunda -florican -floricin -floricomous -floricultural -floriculturally -floriculture -floriculturist -florid -Florida -Floridan -floridans -Florideae -floridean -florideous -Floridia -Floridian -floridians -floridity -floridities -floridly -floridness -Florie -Florien -floriferous -floriferously -floriferousness -florification -floriform -florigen -florigenic -florigens -florigraphy -florikan -floriken -florilage -florilege -florilegia -florilegium -florimania -florimanist -Florin -Florina -Florinda -Florine -florins -Florio -floriparous -floripondio -Floris -floriscope -Florissant -florist -floristic -floristically -floristics -Floriston -floristry -florists -florisugent -florivorous -florizine -Floro -floroon -floroscope -floroun -florous -Florri -Florry -Florrie -floruit -floruits -florula -florulae -florulas -florulent -floscular -Floscularia -floscularian -Flosculariidae -floscule -flosculet -flosculose -flosculous -flos-ferri -flosh -Flosi -Floss -flossa -flossed -Flosser -flosses -flossflower -Flossi -Flossy -Flossie -flossier -flossies -flossiest -flossification -flossily -flossiness -flossing -Flossmoor -floss-silk -flot -flota -flotage -flotages -flotant -flotas -flotation -flotations -flotative -flote -floter -flotilla -flotillas -flotorial -Flotow -flots -flotsam -flotsams -flotsan -flotsen -flotson -flotten -flotter -flounce -flounced -flouncey -flounces -flouncy -flouncier -flounciest -flouncing -flounder -floundered -floundering -flounderingly -flounder-man -flounders -flour -floured -flourescent -floury -flouriness -flouring -flourish -flourishable -flourished -flourisher -flourishes -flourishy -flourishing -flourishingly -flourishment -flourless -flourlike -flours -Flourtown -flouse -floush -flout -flouted -flouter -flouters -flouting -floutingly -flouts -Flovilla -flow -flowable -flowage -flowages -flow-blue -flowchart -flowcharted -flowcharting -flowcharts -flowcontrol -flowe -flowed -Flower -flowerage -flower-bearing -flowerbed -flower-bespangled -flower-besprinkled -flower-breeding -flower-crowned -flower-decked -flower-de-luce -flowered -flower-embroidered -flower-enameled -flower-enwoven -flowerer -flowerers -floweret -flowerets -flower-faced -flowerfence -flowerfly -flowerful -flower-gentle -flower-growing -flower-hung -flowery -flowerier -floweriest -flowery-kirtled -flowerily -flowery-mantled -floweriness -flowerinesses -flower-infolding -flowering -flower-inwoven -flowerist -flower-kirtled -flowerless -flowerlessness -flowerlet -flowerlike -flower-of-an-hour -flower-of-Jove -flowerpecker -flower-pecker -flowerpot -flower-pot -flowerpots -Flowers -flower-scented -flower-shaped -flowers-of-Jove -flower-sprinkled -flower-strewn -flower-sucking -flower-sweet -flower-teeming -flowerwork -flowing -flowingly -flowingness -flowing-robed -flowk -flowmanostat -flowmeter -flown -flowoff -flow-on -flows -flowsheet -flowsheets -flowstone -FLRA -flrie -FLS -Flss -FLT -flu -fluate -fluavil -fluavile -flub -flubbed -flubber -flubbers -flubbing -flubdub -flubdubbery -flubdubberies -flubdubs -flubs -flucan -flucti- -fluctiferous -fluctigerous -fluctisonant -fluctisonous -fluctuability -fluctuable -fluctuant -fluctuate -fluctuated -fluctuates -fluctuating -fluctuation -fluctuational -fluctuation-proof -fluctuations -fluctuosity -fluctuous -flue -flue-cure -flue-cured -flue-curing -flued -fluegelhorn -fluey -flueless -fluellen -fluellin -fluellite -flueman -fluemen -fluence -fluency -fluencies -fluent -fluently -fluentness -fluer -flueric -fluerics -flues -fluework -fluff -fluffed -fluffer -fluff-gib -fluffy -fluffier -fluffiest -fluffy-haired -fluffily -fluffy-minded -fluffiness -fluffing -fluffs -flugel -Flugelhorn -flugelman -flugelmen -fluible -fluid -fluidacetextract -fluidal -fluidally -fluid-compressed -fluidextract -fluidglycerate -fluidible -fluidic -fluidics -fluidify -fluidification -fluidified -fluidifier -fluidifying -fluidimeter -fluidisation -fluidise -fluidised -fluidiser -fluidises -fluidising -fluidism -fluidist -fluidity -fluidities -fluidization -fluidize -fluidized -fluidizer -fluidizes -fluidizing -fluidly -fluidmeter -fluidness -fluidounce -fluidounces -fluidrachm -fluidram -fluidrams -fluids -fluigram -fluigramme -fluing -fluyt -fluitant -fluyts -fluke -fluked -flukey -flukeless -Fluker -flukes -flukeworm -flukewort -fluky -flukier -flukiest -flukily -flukiness -fluking -flumadiddle -flumdiddle -flume -flumed -flumerin -flumes -fluming -fluminose -fluminous -flummadiddle -flummer -flummery -flummeries -flummydiddle -flummox -flummoxed -flummoxes -flummoxing -flump -flumped -flumping -flumps -flung -flunk -flunked -flunkey -flunkeydom -flunkeyhood -flunkeyish -flunkeyism -flunkeyistic -flunkeyite -flunkeyize -flunkeys -flunker -flunkers -flunky -flunkydom -flunkies -flunkyhood -flunkyish -flunkyism -flunkyistic -flunkyite -flunkyize -flunking -flunks -fluo- -fluoaluminate -fluoaluminic -fluoarsenate -fluoborate -fluoboric -fluoborid -fluoboride -fluoborite -fluobromide -fluocarbonate -fluocerine -fluocerite -fluochloride -fluohydric -fluophosphate -fluor -fluor- -fluoran -fluorane -fluoranthene -fluorapatite -fluorate -fluorated -fluorbenzene -fluorboric -fluorene -fluorenes -fluorenyl -fluoresage -fluoresce -fluoresced -fluorescein -fluoresceine -fluorescence -fluorescences -fluorescent -fluorescer -fluoresces -fluorescigenic -fluorescigenous -fluorescin -fluorescing -fluorhydric -fluoric -fluorid -fluoridate -fluoridated -fluoridates -fluoridating -fluoridation -fluoridations -fluoride -fluorides -fluoridisation -fluoridise -fluoridised -fluoridising -fluoridization -fluoridize -fluoridized -fluoridizing -fluorids -fluoryl -fluorimeter -fluorimetry -fluorimetric -fluorin -fluorinate -fluorinated -fluorinates -fluorinating -fluorination -fluorinations -fluorindin -fluorindine -fluorine -fluorines -fluorins -fluorite -fluorites -fluormeter -fluoro- -fluorobenzene -fluoroborate -fluorocarbon -fluorocarbons -fluorochrome -fluoroform -fluoroformol -fluorogen -fluorogenic -fluorography -fluorographic -fluoroid -fluorometer -fluorometry -fluorometric -fluorophosphate -fluoroscope -fluoroscoped -fluoroscopes -fluoroscopy -fluoroscopic -fluoroscopically -fluoroscopies -fluoroscoping -fluoroscopist -fluoroscopists -fluorosis -fluorotic -fluorotype -fluorouracil -fluors -fluorspar -fluor-spar -fluosilicate -fluosilicic -fluotantalate -fluotantalic -fluotitanate -fluotitanic -fluozirconic -fluphenazine -flurn -flurr -flurry -flurried -flurriedly -flurries -flurrying -flurriment -flurt -flus -flush -flushable -flushboard -flush-bound -flush-cut -flush-decked -flush-decker -flushed -flusher -flusherman -flushermen -flushers -flushes -flushest -flushgate -flush-headed -flushy -Flushing -flushingly -flush-jointed -flushness -flush-plated -flusk -flusker -fluster -flusterate -flusterated -flusterating -flusteration -flustered -flusterer -flustery -flustering -flusterment -flusters -Flustra -flustrate -flustrated -flustrating -flustration -flustrine -flustroid -flustrum -flute -flutebird -fluted -flute-douce -flutey -flutelike -flutemouth -fluter -fluters -flutes -flute-shaped -flutework -fluther -fluty -Flutidae -flutier -flutiest -flutina -fluting -flutings -flutist -flutists -flutter -flutterable -flutteration -flutterboard -fluttered -flutterer -flutterers -flutter-headed -fluttery -flutteriness -fluttering -flutteringly -flutterless -flutterment -flutters -fluttersome -Fluvanna -fluvial -fluvialist -fluviatic -fluviatile -fluviation -fluvicoline -fluvio -fluvio-aeolian -fluvioglacial -fluviograph -fluviolacustrine -fluviology -fluviomarine -fluviometer -fluviose -fluvioterrestrial -fluvious -fluviovolcanic -flux -fluxation -fluxed -fluxer -fluxes -fluxgraph -fluxibility -fluxible -fluxibleness -fluxibly -fluxile -fluxility -fluxing -fluxion -fluxional -fluxionally -fluxionary -fluxionist -fluxions -fluxive -fluxmeter -fluxroot -fluxure -fluxweed -FM -fm. -FMAC -FMB -FMC -FMCS -FMEA -FMk -FMN -FMR -FMS -fmt -fn -fname -FNC -Fnen -fnese -FNMA -FNPA -f-number -FO -fo. -FOAC -Foah -foal -foaled -foalfoot -foalfoots -foalhood -foaly -foaling -foals -foam -foamable -foam-beat -foam-born -foambow -foam-crested -foamed -foamer -foamers -foam-flanked -foam-flecked -foamflower -foam-girt -foamy -foamier -foamiest -foamily -foaminess -foaming -foamingly -Foamite -foamless -foamlike -foam-lit -foam-painted -foams -foam-white -FOB -fobbed -fobbing -fobs -FOC -focal -focalisation -focalise -focalised -focalises -focalising -focalization -focalize -focalized -focalizes -focalizing -focally -focaloid -Foch -foci -focimeter -focimetry -fockle -focoids -focometer -focometry -focsle -fo'c'sle -fo'c's'le -focus -focusable -focused -focuser -focusers -focuses -focusing -focusless -focussed -focusses -focussing -fod -fodda -fodder -foddered -fodderer -foddering -fodderless -fodders -foder -fodge -fodgel -fodient -Fodientia -FOE -Foecunditatis -foederal -foederati -foederatus -foederis -foe-encompassed -foeffment -foehn -foehnlike -foehns -foeish -foeless -foelike -foeman -foemanship -foemen -Foeniculum -foenngreek -foe-reaped -foes -foe's -foeship -foe-subduing -foetal -foetalism -foetalization -foetation -foeti -foeti- -foeticidal -foeticide -foetid -foetiferous -foetiparous -foetor -foetors -foeture -foetus -foetuses -fofarraw -fog -Fogarty -fogas -fogbank -fog-bank -fog-beset -fog-blue -fog-born -fogbound -fogbow -fogbows -fog-bred -fogdog -fogdogs -fogdom -foge -fogeater -fogey -fogeys -Fogel -Fogelsville -Fogertown -fogfruit -fogfruits -Fogg -foggage -foggages -foggara -fogged -fogger -foggers -foggy -Foggia -foggier -foggiest -foggily -fogginess -fogging -foggish -fog-hidden -foghorn -foghorns -fogy -fogydom -fogie -fogies -fogyish -fogyishness -fogyism -fogyisms -fogle -fogless -foglietto -fog-logged -fogman -fogmen -fogo -fogon -fogou -fogproof -fogram -fogramite -fogramity -fog-ridden -fogrum -fogs -fog's -fogscoffer -fog-signal -fogus -foh -fohat -fohn -fohns -Foy -FOIA -foyaite -foyaitic -foible -foibles -foiblesse -foyboat -foyer -foyers -Foyil -foil -foilable -foiled -foiler -foiling -foils -foilsman -foilsmen -FOIMS -foin -foined -foining -foiningly -foins -FOIRL -foys -foysen -Foism -foison -foisonless -foisons -Foist -foisted -foister -foisty -foistiness -foisting -foists -foiter -Foix -Fokine -Fokker -Fokos -fol -fol. -Fola -folacin -folacins -folate -folates -Folberth -folcgemot -Folcroft -fold -foldable -foldage -foldaway -foldboat -foldboater -foldboating -foldboats -foldcourse -folded -foldedly -folden -folder -folderol -folderols -folders -folder-up -foldy -folding -foldless -foldout -foldouts -folds -foldskirt -foldstool -foldure -foldwards -fole -Foley -foleye -Folger -folgerite -folia -foliaceous -foliaceousness -foliage -foliaged -foliageous -foliages -foliaging -folial -foliar -foliary -foliate -foliated -foliates -foliating -foliation -foliato- -foliator -foliature -folic -folie -folies -foliicolous -foliiferous -foliiform -folily -folio -foliobranch -foliobranchiate -foliocellosis -folioed -folioing -foliolate -foliole -folioliferous -foliolose -folios -foliose -foliosity -foliot -folious -foliously -folium -foliums -folk -folkboat -folkcraft -folk-dancer -Folkestone -Folkething -folk-etymological -Folketing -folkfree -folky -folkie -folkies -folkish -folkishness -folkland -folklike -folklore -folk-lore -folklores -folkloric -folklorish -folklorism -folklorist -folkloristic -folklorists -folkmoot -folkmooter -folkmoots -folkmot -folkmote -folkmoter -folkmotes -folkmots -folkright -folk-rock -folks -folk's -folksay -folksey -folksy -folksier -folksiest -folksily -folksiness -folk-sing -folksinger -folksinging -folksong -folksongs -Folkston -folktale -folktales -Folkvang -Folkvangr -folkway -folkways -foll -foll. -Follansbee -foller -folles -folletage -Follett -folletti -folletto -Folly -folly-bent -folly-blind -follicle -follicles -follicular -folliculate -folliculated -follicule -folliculin -Folliculina -folliculitis -folliculose -folliculosis -folliculous -folly-drenched -follied -follyer -follies -folly-fallen -folly-fed -folliful -follying -follily -folly-maddened -folly-painting -follyproof -follis -folly-snared -folly-stricken -Follmer -follow -followable -followed -follower -followers -followership -follower-up -followeth -following -followingly -followings -follow-my-leader -follow-on -follows -follow-through -followup -follow-up -Folsom -Folsomville -Fomalhaut -Fombell -foment -fomentation -fomentations -fomented -fomenter -fomenters -fomenting -fomento -foments -fomes -fomite -fomites -Fomor -Fomorian -FON -fonctionnaire -fond -Fonda -fondaco -fondak -fondant -fondants -fondateur -fond-blind -fond-conceited -Fonddulac -Fondea -fonded -fonder -fondest -fond-hardy -fonding -fondish -fondle -fondled -fondler -fondlers -fondles -fondlesome -fondly -fondlike -fondling -fondlingly -fondlings -fondness -fondnesses -fondon -Fondouk -fonds -fond-sparkling -fondu -fondue -fondues -fonduk -fondus -fone -Foneswood -Fong -fonly -fonnish -fono -Fons -Fonseca -Fonsie -font -Fontaine -Fontainea -Fontainebleau -fontal -fontally -Fontana -fontanel -Fontanelle -fontanels -Fontanet -fontange -fontanges -Fontanne -fonted -Fonteyn -Fontenelle -Fontenoy -Fontes -fontful -fonticulus -Fontina -fontinal -Fontinalaceae -fontinalaceous -Fontinalis -fontinas -fontlet -fonts -font's -Fonville -Fonz -Fonzie -foo -FOOBAR -Foochow -Foochowese -food -fooder -foodful -food-gathering -foody -foodie -foodies -foodless -foodlessness -food-processing -food-producing -food-productive -food-providing -foods -food's -foodservices -food-sick -food-size -foodstuff -foodstuffs -foodstuff's -foofaraw -foofaraws -foo-foo -fooyoung -fooyung -fool -foolable -fool-bold -fool-born -fooldom -fooled -fooler -foolery -fooleries -fooless -foolfish -foolfishes -fool-frequented -fool-frighting -fool-happy -foolhardy -foolhardier -foolhardiest -foolhardihood -foolhardily -foolhardiness -foolhardinesses -foolhardiship -fool-hasty -foolhead -foolheaded -fool-headed -foolheadedness -fool-heady -foolify -fooling -foolish -foolish-bold -foolisher -foolishest -foolishly -foolish-looking -foolishness -foolishnesses -foolish-wise -foolish-witty -fool-large -foollike -foolmonger -foolocracy -foolproof -fool-proof -foolproofness -fools -foolscap -fool's-cap -foolscaps -foolship -fool's-parsley -fooner -Foosland -fooster -foosterer -Foot -foot-acted -footage -footages -footback -football -footballer -footballist -footballs -football's -footband -footbath -footbaths -footbeat -foot-binding -footblower -footboard -footboards -footboy -footboys -footbreadth -foot-breadth -footbridge -footbridges -footcandle -foot-candle -footcandles -footcloth -foot-cloth -footcloths -foot-dragger -foot-dragging -Foote -footed -footeite -footer -footers -footfall -footfalls -footfarer -foot-faring -footfault -footfeed -foot-firm -footfolk -foot-free -footful -footganger -footgear -footgears -footgeld -footglove -foot-grain -footgrip -foot-guard -foothalt -foothil -foothill -foothills -foothils -foothold -footholds -foothook -foot-hook -foothot -foot-hot -footy -footie -footier -footies -footiest -footing -footingly -footings -foot-lambert -foot-lame -footle -footled -foot-length -footler -footlers -footles -footless -footlessly -footlessness -footlicker -footlicking -foot-licking -footlight -footlights -footlike -footling -footlining -footlock -footlocker -footlockers -footlog -footloose -foot-loose -footmaker -footman -footmanhood -footmanry -footmanship -foot-mantle -footmark -foot-mark -footmarks -footmen -footmenfootpad -footnote -foot-note -footnoted -footnotes -footnote's -footnoting -footpace -footpaces -footpad -footpaddery -footpads -foot-payh -foot-pale -footpath -footpaths -footpick -footplate -footpound -foot-pound -foot-poundal -footpounds -foot-pound-second -foot-power -footprint -footprints -footprint's -footrace -footraces -footrail -footrest -footrests -footrill -footroom -footrope -footropes -foot-running -foots -footscald -footscraper -foot-second -footsy -footsie -footsies -footslog -foot-slog -footslogged -footslogger -footslogging -footslogs -footsoldier -footsoldiers -footsore -foot-sore -footsoreness -footsores -footstalk -footstall -footstep -footsteps -footstick -footstock -footstone -footstool -footstools -foot-tiring -foot-ton -foot-up -Footville -footway -footways -footwalk -footwall -foot-wall -footwalls -footwarmer -footwarmers -footwear -footweary -foot-weary -footwears -footwork -footworks -footworn -foozle -foozled -foozler -foozlers -foozles -foozling -fop -fopdoodle -fopling -fopped -foppery -fopperies -fopperly -foppy -fopping -foppish -foppishly -foppishness -fops -fopship -FOR -for- -for. -fora -forage -foraged -foragement -forager -foragers -forages -foraging -foray -forayed -forayer -forayers -foraying -forays -foray's -Foraker -foralite -foram -foramen -foramens -foramina -foraminal -foraminate -foraminated -foramination -foraminifer -Foraminifera -foraminiferal -foraminiferan -foraminiferous -foraminose -foraminous -foraminulate -foraminule -foraminulose -foraminulous -forams -forane -foraneen -foraneous -foraramens -foraramina -forasmuch -forastero -forb -forbad -forbade -forbar -forbare -forbarred -forbathe -forbbore -forbborne -forbear -forbearable -forbearance -forbearances -forbearant -forbearantly -forbearer -forbearers -forbearing -forbearingly -forbearingness -forbears -forbear's -forbecause -Forbes -forbesite -Forbestown -forby -forbid -forbidal -forbidals -forbiddable -forbiddal -forbiddance -forbidden -forbiddenly -forbiddenness -forbidder -forbidding -forbiddingly -forbiddingness -forbids -forbye -forbysen -forbysening -forbit -forbite -forblack -forbled -forblow -forbode -forboded -forbodes -forboding -forbore -forborn -forborne -forbow -forbreak -forbruise -forbs -forcaria -forcarve -forcat -force -forceable -force-closed -forced -forcedly -forcedness -force-fed -force-feed -force-feeding -forceful -forcefully -forcefulness -forceless -forcelessness -forcelet -forcemeat -force-meat -forcement -forcene -force-out -forceps -forcepses -forcepslike -forceps-shaped -force-pump -forceput -force-put -forcer -force-ripe -forcers -Forces -force's -forcet -forchase -forche -forches -forcy -forcibility -forcible -forcible-feeble -forcibleness -forcibly -Forcier -forcing -forcingly -forcing-pump -forcipal -forcipate -forcipated -forcipation -forcipes -forcipial -forcipiform -forcipressure -Forcipulata -forcipulate -forcite -forcive -forcleave -forclose -forconceit -FORCS -forcut -FORD -fordable -fordableness -fordays -fordam -Fordcliff -fordeal -forded -Fordham -fordy -Fordyce -Fordicidia -fordid -Fording -Fordize -Fordized -Fordizing -Fordland -fordless -fordo -Fordoche -fordoes -fordoing -fordone -fordrive -Fords -Fordsville -fordull -Fordville -fordwine -fore -fore- -foreaccounting -foreaccustom -foreacquaint -foreact -foreadapt -fore-adapt -foreadmonish -foreadvertise -foreadvice -foreadvise -fore-age -foreallege -fore-alleged -foreallot -fore-and-aft -fore-and-after -fore-and-aft-rigged -foreannounce -foreannouncement -foreanswer -foreappoint -fore-appoint -foreappointment -forearm -forearmed -forearming -forearms -forearm's -foreassign -foreassurance -fore-axle -forebackwardly -forebay -forebays -forebar -forebear -forebearing -forebears -fore-being -forebemoan -forebemoaned -forebespeak -foreby -forebye -forebitt -forebitten -forebitter -forebless -foreboard -forebode -foreboded -forebodement -foreboder -forebodes -forebody -forebodies -foreboding -forebodingly -forebodingness -forebodings -foreboom -forebooms -foreboot -forebow -forebowels -forebowline -forebows -forebrace -forebrain -forebreast -forebridge -forebroads -foreburton -forebush -forecabin -fore-cabin -forecaddie -forecar -forecarriage -forecast -forecasted -forecaster -forecasters -forecasting -forecastingly -forecastle -forecastlehead -forecastleman -forecastlemen -forecastles -forecastors -forecasts -forecatching -forecatharping -forechamber -forechase -fore-check -forechoice -forechoir -forechoose -forechurch -forecited -fore-cited -foreclaw -foreclosable -foreclose -foreclosed -forecloses -foreclosing -foreclosure -foreclosures -forecome -forecomingness -forecommend -foreconceive -foreconclude -forecondemn -foreconscious -foreconsent -foreconsider -forecontrive -forecool -forecooler -forecounsel -forecount -forecourse -forecourt -fore-court -forecourts -forecover -forecovert -foreday -foredays -foredate -foredated -fore-dated -foredates -foredating -foredawn -foredeck -fore-deck -foredecks -foredeclare -foredecree -foredeem -foredeep -foredefeated -foredefine -foredenounce -foredescribe -foredeserved -foredesign -foredesignment -foredesk -foredestine -foredestined -foredestiny -foredestining -foredetermination -foredetermine -foredevised -foredevote -foredid -forediscern -foredispose -foredivine -foredo -foredoes -foredoing -foredone -foredoom -foredoomed -foredoomer -foredooming -foredooms -foredoor -foredune -fore-edge -fore-elder -fore-elders -fore-end -fore-exercise -foreface -forefaces -forefather -forefatherly -forefathers -forefather's -forefault -forefeel -forefeeling -forefeelingly -forefeels -forefeet -forefelt -forefence -forefend -forefended -forefending -forefends -foreffelt -forefield -forefigure -forefin -forefinger -forefingers -forefinger's -forefit -foreflank -foreflap -foreflipper -forefoot -fore-foot -forefront -forefronts -foregahger -foregallery -foregame -fore-game -foreganger -foregate -foregather -foregathered -foregathering -foregathers -foregift -foregirth -foreglance -foregleam -fore-glide -foreglimpse -foreglimpsed -foreglow -forego -foregoer -foregoers -foregoes -foregoing -foregone -foregoneness -foreground -foregrounds -foreguess -foreguidance -foregut -fore-gut -foreguts -forehalf -forehall -forehammer -fore-hammer -forehand -forehanded -fore-handed -forehandedly -forehandedness -forehands -forehandsel -forehard -forehatch -forehatchway -forehead -foreheaded -foreheads -forehead's -forehear -forehearth -fore-hearth -foreheater -forehent -forehew -forehill -forehinting -forehock -forehold -forehood -forehoof -forehoofs -forehook -forehooves -forehorse -foreyard -foreyards -foreyear -foreign -foreign-aid -foreign-appearing -foreign-born -foreign-bred -foreign-built -foreigneering -foreigner -foreigners -foreignership -foreign-flag -foreignism -foreignization -foreignize -foreignly -foreign-looking -foreign-made -foreign-manned -foreignness -foreign-owned -foreigns -foreign-speaking -foreimagination -foreimagine -foreimpressed -foreimpression -foreinclined -foreinstruct -foreintend -foreiron -forejudge -fore-judge -forejudged -forejudger -forejudging -forejudgment -forekeel -foreking -foreknee -foreknew -foreknow -foreknowable -foreknowableness -foreknower -foreknowing -foreknowingly -foreknowledge -foreknowledges -foreknown -foreknows -forel -forelady -foreladies -forelay -forelaid -forelaying -Foreland -forelands -foreleader -foreleech -foreleg -forelegs -fore-lie -forelimb -forelimbs -forelive -forellenstein -Forelli -forelock -forelocks -forelook -foreloop -forelooper -foreloper -forelouper -foremade -Foreman -foremanship -foremarch -foremark -foremartyr -foremast -foremasthand -foremastman -foremastmen -foremasts -foremean -fore-mean -foremeant -foremelt -foremen -foremention -fore-mention -forementioned -foremessenger -foremilk -foremilks -foremind -foremisgiving -foremistress -foremost -foremostly -foremother -forename -forenamed -forenames -forenent -forenews -forenight -forenoon -forenoons -forenote -forenoted -forenotice -fore-notice -forenotion -forensal -forensic -forensical -forensicality -forensically -forensics -fore-oath -foreordain -foreordained -foreordaining -foreordainment -foreordainments -foreordains -foreorder -foreordinate -foreordinated -foreordinating -foreordination -foreorlop -forepad -forepayment -forepale -forepaled -forepaling -foreparent -foreparents -forepart -fore-part -foreparts -forepass -forepassed -forepast -forepaw -forepaws -forepeak -forepeaks -foreperiod -forepiece -fore-piece -foreplace -foreplay -foreplays -foreplan -foreplanting -forepleasure -foreplot -forepoint -forepointer -forepole -forepoled -forepoling -foreporch -fore-possess -forepossessed -forepost -forepredicament -forepreparation -foreprepare -forepretended -foreprise -foreprize -foreproduct -foreproffer -forepromise -forepromised -foreprovided -foreprovision -forepurpose -fore-purpose -forequarter -forequarters -fore-quote -forequoted -forerake -foreran -forerank -fore-rank -foreranks -forereach -fore-reach -forereaching -foreread -fore-read -forereading -forerecited -fore-recited -forereckon -forerehearsed -foreremembered -forereport -forerequest -forerevelation -forerib -foreribs -fore-rider -forerigging -foreright -foreroyal -foreroom -forerun -fore-run -forerunner -forerunners -forerunnership -forerunning -forerunnings -foreruns -fores -foresaddle -foresay -fore-say -foresaid -foresaying -foresail -fore-sail -foresails -foresays -foresaw -forescene -forescent -foreschool -foreschooling -forescript -foreseason -foreseat -foresee -foreseeability -foreseeable -foreseeing -foreseeingly -foreseen -foreseer -foreseers -foresees -foresey -foreseing -foreseize -foresend -foresense -foresentence -foreset -foresettle -foresettled -foreshadow -foreshadowed -foreshadower -foreshadowing -foreshadows -foreshaft -foreshank -foreshape -foresheet -fore-sheet -foresheets -foreshift -foreship -foreshock -foreshoe -foreshop -foreshore -foreshorten -foreshortened -foreshortening -foreshortens -foreshot -foreshots -foreshoulder -foreshow -foreshowed -foreshower -foreshowing -foreshown -foreshows -foreshroud -foreside -foresides -foresight -foresighted -foresightedly -foresightedness -foresightednesses -foresightful -foresightless -foresights -foresign -foresignify -foresin -foresing -foresinger -foreskin -foreskins -foreskirt -fore-skysail -foreslack -foresleeve -foreslow -foresound -forespake -forespeak -forespeaker -forespeaking -forespecified -forespeech -forespeed -forespencer -forespent -forespoke -forespoken -Forest -forestaff -fore-staff -forestaffs -forestage -fore-stage -forestay -fore-stay -forestair -forestays -forestaysail -forestal -forestall -forestalled -forestaller -forestalling -forestallment -forestalls -forestalment -forestarling -forestate -forestation -forestaves -forest-belted -forest-born -forest-bosomed -forest-bound -forest-bred -Forestburg -Forestburgh -forest-clad -forest-covered -forestcraft -forest-crowned -Forestdale -forest-dwelling -forested -foresteep -forestem -forestep -Forester -forestery -foresters -forestership -forest-felling -forest-frowning -forestful -forest-grown -foresty -forestial -Forestian -forestick -fore-stick -Forestiera -forestine -foresting -forestish -forestland -forestlands -forestless -forestlike -forestology -Foreston -Forestport -forestral -forestress -forestry -forestries -forest-rustling -forests -forestside -forestudy -Forestville -forestwards -foresummer -foresummon -foreswear -foresweared -foreswearing -foreswears -foresweat -foreswore -foresworn -foret -foretack -fore-tack -foretackle -foretake -foretalk -foretalking -foretaste -foretasted -foretaster -foretastes -foretasting -foreteach -foreteeth -foretell -foretellable -foretellableness -foreteller -foretellers -foretelling -foretells -forethink -forethinker -forethinking -forethough -forethought -forethoughted -forethoughtful -forethoughtfully -forethoughtfulness -forethoughtless -forethoughts -forethrift -foretime -foretimed -foretimes -foretype -foretypified -foretoken -foretokened -foretokening -foretokens -foretold -foretooth -fore-tooth -foretop -fore-topgallant -foretopman -foretopmast -fore-topmast -foretopmen -foretops -foretopsail -fore-topsail -foretrace -foretriangle -foretrysail -foreturn -fore-uard -foreuse -foreutter -forevalue -forever -forevermore -foreverness -forevers -foreview -forevision -forevouch -forevouched -fore-vouched -forevow -foreward -forewarm -forewarmer -forewarn -forewarned -forewarner -forewarning -forewarningly -forewarnings -forewarns -forewaters -foreween -foreweep -foreweigh -forewent -forewind -fore-wind -forewing -forewings -forewinning -forewisdom -forewish -forewit -fore-wit -forewoman -forewomen -forewonted -foreword -forewords -foreworld -foreworn -forewritten -forewrought -forex -forfairn -forfalt -Forfar -forfare -forfars -forfault -forfaulture -forfear -forfeit -forfeitable -forfeitableness -forfeited -forfeiter -forfeiting -forfeits -forfeiture -forfeitures -forfend -forfended -forfending -forfends -forfex -forficate -forficated -forfication -forficiform -Forficula -forficulate -Forficulidae -forfit -forfouchten -forfoughen -forfoughten -forgab -forgainst -Forgan -forgat -forgather -forgathered -forgathering -forgathers -forgave -forge -forgeability -forgeable -forged -forgedly -forgeful -forgeman -forgemen -forger -forgery -forgeries -forgery-proof -forgery's -forgers -forges -forget -forgetable -forgetful -forgetfully -forgetfulness -forgetive -forget-me-not -forgetness -forgets -forgett -forgettable -forgettably -forgette -forgetter -forgettery -forgetters -forgetting -forgettingly -forgie -forgift -forging -forgings -forgivable -forgivableness -forgivably -forgive -forgiveable -forgiveably -forgiveless -forgiven -forgiveness -forgivenesses -forgiver -forgivers -forgives -forgiving -forgivingly -forgivingness -forgo -forgoer -forgoers -forgoes -forgoing -forgone -forgot -forgotten -forgottenness -forgrow -forgrown -forhaile -forhale -forheed -forhoo -forhooy -forhooie -forhow -foryield -forinsec -forinsecal -forint -forints -forisfamiliate -forisfamiliation -Foristell -forjaskit -forjesket -forjudge -forjudged -forjudger -forjudges -forjudging -forjudgment -fork -forkable -forkball -forkbeard -fork-carving -forked -forked-headed -forkedly -forkedness -forked-tailed -Forkey -fork-end -forker -forkers -fork-filled -forkful -forkfuls -forkhead -fork-head -forky -forkier -forkiest -forkiness -forking -Forkland -forkless -forklift -forklifts -forklike -forkman -forkmen -fork-pronged -fork-ribbed -Forks -forksful -fork-shaped -forksmith -Forksville -forktail -fork-tail -fork-tailed -fork-tined -fork-tongued -Forkunion -Forkville -forkwise -Forl -forlay -forlain -forlana -forlanas -Forland -forlane -forleave -forleaving -forleft -forleit -forlese -forlet -forletting -Forli -forlie -Forlini -forlive -forloin -forlore -forlorn -forlorner -forlornest -forlornity -forlornly -forlornness -form -form- -forma -formability -formable -formably -formagen -formagenic -formal -formalazine -formaldehyd -formaldehyde -formaldehydes -formaldehydesulphoxylate -formaldehydesulphoxylic -formaldoxime -formalesque -Formalin -formalins -formalisation -formalise -formalised -formaliser -formalising -formalism -formalisms -formalism's -formalist -formalistic -formalistically -formaliter -formalith -formality -formalities -formalizable -formalization -formalizations -formalization's -formalize -formalized -formalizer -formalizes -formalizing -formally -formalness -formals -formamide -formamidine -formamido -formamidoxime -Forman -formanilide -formant -formants -format -formate -formated -formates -formating -formation -formational -formations -formation's -formative -formatively -formativeness -formats -formatted -formatter -formatters -formatter's -formatting -formature -formazan -formazyl -formby -formboard -forme -formed -formedon -formee -formel -formelt -formene -formenic -formentation -Formenti -former -formeret -formerly -formerness -formers -formes -form-establishing -formfeed -formfeeds -formfitting -form-fitting -formful -form-giving -formy -formiate -formic -Formica -formican -formicary -formicaria -Formicariae -formicarian -formicaries -Formicariidae -formicarioid -formicarium -formicaroid -formicate -formicated -formicating -formication -formicative -formicicide -formicid -Formicidae -formicide -Formicina -Formicinae -formicine -Formicivora -formicivorous -Formicoidea -formidability -formidable -formidableness -formidably -formidolous -formyl -formylal -formylate -formylated -formylating -formylation -formyls -formin -forminate -forming -formism -formity -formless -formlessly -formlessness -formly -formnail -formo- -Formol -formolit -formolite -formols -formonitrile -Formosa -Formosan -formose -formosity -Formoso -Formosus -formous -formoxime -form-relieve -form-revealing -forms -formula -formulable -formulae -formulaic -formulaically -formular -formulary -formularies -formularisation -formularise -formularised -formulariser -formularising -formularism -formularist -formularistic -formularization -formularize -formularized -formularizer -formularizing -formulas -formula's -formulate -formulated -formulates -formulating -formulation -formulations -formulator -formulatory -formulators -formulator's -formule -formulisation -formulise -formulised -formuliser -formulising -formulism -formulist -formulistic -formulization -formulize -formulized -formulizer -formulizing -formwork -Fornacalia -fornacic -Fornacis -Fornax -fornaxid -forncast -Forney -Forneys -fornenst -fornent -fornical -fornicate -fornicated -fornicates -fornicating -fornication -fornications -fornicator -fornicatory -fornicators -fornicatress -fornicatrices -fornicatrix -fornices -forniciform -forninst -fornix -Fornof -forold -forpass -forpet -forpine -forpined -forpining -forpit -forprise -forra -forrad -forrader -forrard -forrarder -Forras -forrel -Forrer -Forrest -Forrestal -Forrester -Forreston -forride -forril -forrit -forritsome -forrue -forsado -forsay -forsake -forsaken -forsakenly -forsakenness -forsaker -forsakers -forsakes -forsaking -Forsan -forsar -forsee -forseeable -forseek -forseen -forset -Forsete -Forseti -forshape -Forsyth -Forsythe -Forsythia -forsythias -forslack -forslake -forsloth -forslow -forsook -forsooth -forspeak -forspeaking -forspend -forspent -forspoke -forspoken -forspread -Forssman -Forst -Forsta -forstall -forstand -forsteal -Forster -forsterite -forstraught -forsung -forswat -forswear -forswearer -forswearing -forswears -forswore -forsworn -forswornness -Fort -fort. -Forta -fortake -Fortaleza -fortalice -Fortas -fortaxed -Fort-de-France -forte -fortemente -fortepiano -forte-piano -fortes -Fortescue -fortescure -Forth -forthby -forthbring -forthbringer -forthbringing -forthbrought -forthcall -forthcame -forthcome -forthcomer -forthcoming -forthcomingness -forthcut -forthfare -forthfigured -forthgaze -forthgo -forthgoing -forthy -forthink -forthinking -forthon -forthought -forthputting -forthright -forthrightly -forthrightness -forthrightnesses -forthrights -forthset -forthtell -forthteller -forthward -forthwith -forty -forty-acre -forty-eight -forty-eighth -forty-eightmo -forty-eightmos -Fortier -forties -fortieth -fortieths -fortify -fortifiable -fortification -fortifications -fortified -fortifier -fortifiers -fortifies -forty-fifth -fortifying -fortifyingly -forty-first -fortifys -fortyfive -Forty-Five -fortyfives -fortyfold -forty-foot -forty-four -forty-fourth -forty-year -fortyish -forty-knot -fortilage -forty-legged -forty-mile -Fortin -forty-nine -forty-niner -forty-ninth -forty-one -fortiori -fortypenny -forty-pound -fortis -Fortisan -forty-second -forty-seven -forty-seventh -forty-six -forty-sixth -forty-skewer -forty-spot -fortissimi -fortissimo -fortissimos -forty-third -forty-three -forty-ton -fortitude -fortitudes -fortitudinous -forty-two -Fort-Lamy -fortlet -Fortna -fortnight -fortnightly -fortnightlies -fortnights -FORTRAN -fortranh -fortravail -fortread -fortress -fortressed -fortresses -fortressing -fortress's -forts -fort's -fortuity -fortuities -fortuitism -fortuitist -fortuitous -fortuitously -fortuitousness -fortuitus -Fortuna -fortunate -fortunately -fortunateness -fortunation -Fortunato -Fortune -fortuned -fortune-hunter -fortune-hunting -fortunel -fortuneless -Fortunella -fortunes -fortune's -fortunetell -fortune-tell -fortuneteller -fortune-teller -fortunetellers -fortunetelling -fortune-telling -Fortunia -fortuning -Fortunio -fortunite -fortunize -Fortunna -fortunous -fortuuned -Forum -forumize -forums -forum's -forvay -forwake -forwaked -forwalk -forwander -Forward -forwardal -forwardation -forward-bearing -forward-creeping -forwarded -forwarder -forwarders -forwardest -forward-flowing -forwarding -forwardly -forward-looking -forwardness -forwardnesses -forward-pressing -forwards -forwardsearch -forward-turned -forwarn -forwaste -forwean -forwear -forweary -forwearied -forwearying -forweend -forweep -forwelk -forwent -forwhy -forwoden -forworden -forwore -forwork -forworn -forwrap -forz -forzando -forzandos -forzato -FOS -Foscalina -Fosdick -FOSE -fosh -Foshan -fosie -Fosite -Foskett -Fosque -Foss -fossa -fossae -fossage -fossane -fossarian -fossate -fosse -fossed -fosses -fosset -fossette -fossettes -fossick -fossicked -fossicker -fossicking -fossicks -fossified -fossiform -fossil -fossilage -fossilated -fossilation -fossildom -fossiled -fossiliferous -fossilify -fossilification -fossilisable -fossilisation -fossilise -fossilised -fossilising -fossilism -fossilist -fossilizable -fossilization -fossilize -fossilized -fossilizes -fossilizing -fossillike -fossilogy -fossilogist -fossilology -fossilological -fossilologist -fossils -fosslfying -fosslify -fosslology -fossor -Fossores -Fossoria -fossorial -fossorious -fossors -Fosston -fossula -fossulae -fossulate -fossule -fossulet -fostell -Foster -fosterable -fosterage -foster-brother -foster-child -fostered -fosterer -fosterers -foster-father -fosterhood -fostering -fosteringly -fosterite -fosterland -fosterling -fosterlings -foster-mother -foster-nurse -Fosters -fostership -foster-sister -foster-son -Fosterville -Fostoria -fostress -FOT -fotch -fotched -fother -Fothergilla -fothering -Fotheringhay -Fotina -Fotinas -fotive -fotmal -Fotomatic -Fotosetter -Fototronic -fotui -fou -Foucault -Foucquet -foud -foudroyant -fouett -fouette -fouettee -fouettes -fougade -fougasse -Fougere -Fougerolles -fought -foughten -foughty -fougue -foujdar -foujdary -foujdarry -Foujita -Fouke -foul -foulage -foulard -foulards -Foulbec -foul-breathed -foulbrood -foul-browed -foulder -fouldre -fouled -fouled-up -fouler -foulest -foul-faced -foul-handed -fouling -foulings -foulish -Foulk -foully -foul-looking -foulmart -foulminded -foul-minded -foul-mindedness -foulmouth -foulmouthed -foul-mouthed -foulmouthedly -foulmouthedness -Foulness -foulnesses -foul-reeking -fouls -foul-smelling -foulsome -foul-spoken -foul-tasting -foul-tongued -foul-up -foumart -foun -founce -found -foundation -foundational -foundationally -foundationary -foundationed -foundationer -foundationless -foundationlessness -foundations -foundation's -founded -founder -foundered -foundery -foundering -founderous -founders -foundership -founding -foundling -foundlings -foundress -foundry -foundries -foundryman -foundrymen -foundry's -foundrous -founds -Fount -fountain -fountained -fountaineer -fountainhead -fountainheads -fountaining -fountainless -fountainlet -fountainlike -fountainous -fountainously -fountains -fountain's -Fountaintown -Fountainville -fountainwise -founte -fountful -founts -fount's -Fouqu -Fouque -Fouquet -Fouquieria -Fouquieriaceae -fouquieriaceous -Fouquier-Tinville -Four -four-a-cat -four-acre -fourb -fourbagger -four-bagger -fourball -four-ball -fourberie -four-bit -fourble -four-cant -four-cent -four-centered -fourche -fourchee -fourcher -fourchet -fourchette -fourchite -four-cycle -four-cylinder -four-cylindered -four-color -four-colored -four-colour -four-cornered -four-coupled -four-cutter -four-day -four-deck -four-decked -four-decker -four-dimensional -four-dimensioned -four-dollar -Fourdrinier -four-edged -four-eyed -four-eyes -fourer -four-faced -four-figured -four-fingered -fourfiusher -four-flowered -four-flush -fourflusher -four-flusher -fourflushers -four-flushing -fourfold -four-foot -four-footed -four-footer -four-gallon -fourgon -fourgons -four-grain -four-gram -four-gun -Four-h -four-hand -fourhanded -four-handed -four-hander -four-headed -four-horned -four-horse -four-horsed -four-hour -four-hours -four-yard -four-year -four-year-old -four-year-older -Fourier -Fourierian -Fourierism -Fourierist -Fourieristic -Fourierite -four-inch -four-in-hand -four-leaf -four-leafed -four-leaved -four-legged -four-letter -four-lettered -four-line -four-lined -fourling -four-lobed -four-masted -four-master -Fourmile -four-minute -four-month -fourneau -fourness -Fournier -fourniture -Fouroaks -four-oar -four-oared -four-oclock -four-o'clock -four-ounce -four-part -fourpence -fourpenny -four-percenter -four-phase -four-place -fourplex -four-ply -four-post -four-posted -fourposter -four-poster -fourposters -four-pound -fourpounder -Four-power -four-quarter -fourquine -fourrag -fourragere -fourrageres -four-rayed -fourre -fourrier -four-ring -four-roomed -four-rowed -fours -fourscore -fourscorth -four-second -four-shilling -four-sided -foursome -foursomes -four-spined -four-spot -four-spotted -foursquare -four-square -foursquarely -foursquareness -four-story -four-storied -fourstrand -four-stranded -four-stringed -four-striped -four-striper -four-stroke -four-stroke-cycle -fourteen -fourteener -fourteenfold -fourteens -fourteenth -fourteenthly -fourteenths -fourth -fourth-born -fourth-class -fourth-dimensional -fourther -fourth-form -fourth-hand -fourth-year -fourthly -fourth-rate -fourth-rateness -fourth-rater -fourths -four-time -four-times-accented -four-tined -four-toed -four-toes -four-ton -four-tooth -four-way -four-week -four-wheel -four-wheeled -four-wheeler -four-winged -Foushee -foussa -foute -fouter -fouth -fouty -foutra -foutre -FOV -fovea -foveae -foveal -foveas -foveate -foveated -foveation -foveiform -fovent -foveola -foveolae -foveolar -foveolarious -foveolas -foveolate -foveolated -foveole -foveoles -foveolet -foveolets -fovilla -fow -fowage -Fowey -fowells -fowent -fowk -Fowkes -fowl -Fowle -fowled -Fowler -fowlery -fowlerite -fowlers -Fowlerton -Fowlerville -fowlfoot -Fowliang -fowling -fowling-piece -fowlings -Fowlkes -fowlpox -fowlpoxes -fowls -Fowlstown -Fox -foxbane -foxberry -foxberries -Foxboro -Foxborough -Foxburg -foxchop -fox-colored -Foxcroft -Foxe -foxed -foxer -foxery -foxes -fox-faced -foxfeet -foxfinger -foxfire -fox-fire -foxfires -foxfish -foxfishes -fox-flove -fox-fur -fox-furred -foxglove -foxgloves -Foxhall -foxhole -foxholes -Foxholm -foxhound -foxhounds -fox-hunt -fox-hunting -foxy -foxie -foxier -foxiest -foxily -foxiness -foxinesses -foxing -foxings -foxish -foxite -foxly -foxlike -fox-like -fox-nosed -foxproof -fox's -foxship -foxskin -fox-skinned -foxskins -foxtail -foxtailed -foxtails -foxter-leaves -Foxton -foxtongue -Foxtown -Foxtrot -fox-trot -foxtrots -fox-trotted -fox-trotting -fox-visaged -foxwood -Foxworth -fozy -fozier -foziest -foziness -fozinesses -FP -FPA -FPC -FPDU -FPE -FPHA -FPLA -fplot -FPM -FPO -FPP -FPS -fpsps -FPU -FQDN -FR -Fr. -FR-1 -Fra -Fraase -frab -frabbit -frabjous -frabjously -frabous -fracas -fracases -Fracastorius -fracedinous -frache -fracid -frack -Frackville -fract -fractable -fractabling -FRACTAL -fractals -fracted -fracti -Fracticipita -fractile -Fraction -fractional -fractionalism -fractionalization -fractionalize -fractionalized -fractionalizing -fractionally -fractional-pitch -fractionary -fractionate -fractionated -fractionating -fractionation -fractionator -fractioned -fractioning -fractionisation -fractionise -fractionised -fractionising -fractionization -fractionize -fractionized -fractionizing -fractionlet -fractions -fraction's -fractious -fractiously -fractiousness -fractocumulus -fractonimbus -fractostratus -fractuosity -fractur -fracturable -fracturableness -fractural -fracture -fractured -fractureproof -fractures -fracturing -fracturs -fractus -fradicin -Fradin -frae -fraela -fraena -fraenula -fraenular -fraenulum -fraenum -fraenums -frag -Fragaria -Frager -fragged -fragging -fraggings -fraghan -Fragilaria -Fragilariaceae -fragile -fragilely -fragileness -fragility -fragilities -fragment -fragmental -fragmentalize -fragmentally -fragmentary -fragmentarily -fragmentariness -fragmentate -fragmentation -fragmentations -fragmented -fragmenting -fragmentisation -fragmentise -fragmentised -fragmentising -fragmentist -fragmentitious -fragmentization -fragmentize -fragmentized -fragmentizer -fragmentizing -fragments -Fragonard -fragor -fragrance -fragrances -fragrance's -fragrancy -fragrancies -fragrant -fragrantly -fragrantness -frags -fray -Fraya -fraicheur -fraid -Frayda -fraid-cat -fraidycat -fraidy-cat -frayed -frayedly -frayedness -fraying -frayings -fraik -frail -frail-bodied -fraile -frailejon -frailer -frailero -fraileros -frailes -frailest -frailish -frailly -frailness -frails -frailty -frailties -frayn -Frayne -frayproof -frays -fraischeur -fraise -fraised -fraiser -fraises -fraising -fraist -fraken -Frakes -frakfurt -Fraktur -frakturs -FRAM -framable -framableness -frambesia -framboesia -framboise -Frame -framea -frameable -frameableness -frameae -framed -frame-house -frameless -frame-made -framer -framers -frames -frameshift -framesmith -Frametown -frame-up -framework -frame-work -frameworks -framework's -framing -Framingham -framings -frammit -frampler -frampold -Fran -franc -franca -Francaix -franc-archer -francas -France -Francene -Frances -france's -Francesca -Francescatti -Francesco -Francestown -Francesville -Franche-Comt -franchisal -franchise -franchised -franchisee -franchisees -franchisement -franchiser -franchisers -franchises -franchise's -franchising -franchisor -Franchot -Franci -Francy -francia -Francic -Francie -Francine -Francyne -Francis -francisc -Francisca -Franciscan -Franciscanism -franciscans -Franciscka -Francisco -Franciscus -Franciska -Franciskus -Francitas -francium -franciums -Francize -Franck -Francklin -Francklyn -Franckot -Franco -Franco- -Franco-american -Franco-annamese -Franco-austrian -Franco-british -Franco-canadian -Franco-chinese -Franco-gallic -Franco-gallician -Franco-gaul -Franco-german -Francois -Francoise -Francoism -Francoist -Franco-italian -Franco-latin -francolin -francolite -Franco-lombardic -Francomania -Franco-mexican -Franco-negroid -Franconia -Franconian -Francophil -Francophile -Francophilia -Francophilism -Francophobe -Francophobia -francophone -Franco-provencal -Franco-prussian -Franco-roman -Franco-russian -Franco-soviet -Franco-spanish -Franco-swiss -francs -francs-archers -francs-tireurs -franc-tireur -Franek -frangent -franger -Frangi -frangibility -frangibilities -frangible -frangibleness -frangipane -frangipani -frangipanis -frangipanni -Franglais -Frangos -frangula -Frangulaceae -frangulic -frangulin -frangulinic -franion -Frank -frankability -frankable -frankalmoign -frank-almoign -frankalmoigne -frankalmoin -Frankclay -Franke -franked -Frankel -Frankenia -Frankeniaceae -frankeniaceous -Frankenmuth -Frankenstein -frankensteins -franker -frankers -frankest -Frankewing -frank-faced -frank-fee -frank-ferm -frankfold -Frankford -Frankfort -frankforter -frankforters -frankforts -Frankfurt -Frankfurter -frankfurters -frankfurts -frankhearted -frankheartedly -frankheartedness -frankheartness -Frankhouse -Franky -Frankie -Frankify -frankincense -frankincensed -frankincenses -franking -Frankish -Frankist -franklandite -frank-law -frankly -Franklin -Franklyn -Franklinia -Franklinian -Frankliniana -Franklinic -Franklinism -Franklinist -franklinite -Franklinization -franklins -Franklinton -Franklintown -Franklinville -frankmarriage -frank-marriage -frankness -franknesses -Franko -frankpledge -frank-pledge -franks -frank-spoken -Frankston -Franksville -frank-tenement -Frankton -Franktown -Frankville -Franni -Franny -Frannie -Frans -Fransen -franseria -Fransis -Fransisco -frantic -frantically -franticly -franticness -Frants -Frantz -Franz -Franza -Franzen -franzy -Franzoni -frap -frape -fraple -frapler -frapp -frappe -frapped -frappeed -frappeing -frappes -frapping -fraps -frary -Frascati -Frasch -Frasco -frase -Fraser -Frasera -Frasier -Frasquito -frass -frasse -frat -fratch -fratched -fratcheous -fratcher -fratchety -fratchy -fratching -frate -frater -Fratercula -fratery -frateries -fraternal -fraternalism -fraternalist -fraternality -fraternally -fraternate -fraternation -fraternisation -fraternise -fraternised -fraterniser -fraternising -fraternism -fraternity -fraternities -fraternity's -fraternization -fraternizations -fraternize -fraternized -fraternizer -fraternizes -fraternizing -fraters -Fraticelli -Fraticellian -fratority -fratry -fratriage -Fratricelli -fratricidal -fratricide -fratricides -fratries -frats -Frau -fraud -frauder -fraudful -fraudfully -fraudless -fraudlessly -fraudlessness -fraudproof -frauds -fraud's -fraudulence -fraudulency -fraudulent -fraudulently -fraudulentness -Frauen -Frauenfeld -fraughan -fraught -fraughtage -fraughted -fraughting -fraughts -Fraulein -frauleins -fraunch -Fraunhofer -Fraus -Fravashi -frawn -fraxetin -fraxin -fraxinella -Fraxinus -Fraze -frazed -Frazee -Frazeysburg -Frazer -Frazier -frazil -frazils -frazing -frazzle -frazzled -frazzles -frazzling -FRB -FRC -FRCM -FRCO -FRCP -FRCS -FRD -frden -freak -freakdom -freaked -freaked-out -freakery -freakful -freaky -freakier -freakiest -freakily -freakiness -freaking -freakish -freakishly -freakishness -freakout -freak-out -freakouts -freakpot -freaks -freak's -fream -Frear -freath -Freberg -Frecciarossa -Frech -Frechet -Frechette -freck -frecked -frecken -freckened -frecket -freckle -freckled -freckled-faced -freckledness -freckle-faced -freckleproof -freckles -freckly -frecklier -freckliest -freckliness -freckling -frecklish -FRED -Freda -fredaine -Freddi -Freddy -Freddie -freddo -Fredek -Fredel -Fredela -Fredelia -Fredella -Fredenburg -Frederic -Frederica -Frederich -Fredericia -Frederick -Fredericka -Fredericks -Fredericksburg -Fredericktown -Frederico -Fredericton -Frederigo -Frederik -Frederika -Frederiksberg -Frederiksen -Frederiksted -Frederique -Fredette -Fredholm -Fredi -Fredia -Fredie -Fredkin -Fredonia -Fredra -Fredric -Fredrich -fredricite -Fredrick -Fredrickson -Fredrik -Fredrika -Fredrikstad -fred-stole -Fredville -free -free-acting -free-armed -free-associate -free-associated -free-associating -free-banking -freebase -freebee -freebees -free-bestowed -freeby -freebie -freebies -free-blown -freeboard -free-board -freeboot -free-boot -freebooted -freebooter -freebootery -freebooters -freebooty -freebooting -freeboots -free-bored -Freeborn -free-born -free-bred -Freeburg -Freeburn -free-burning -Freechurchism -Freed -free-denizen -Freedman -freedmen -Freedom -Freedomites -freedoms -freedom's -freedoot -freedstool -freedwoman -freedwomen -free-enterprise -free-falling -freefd -free-floating -free-flowering -free-flowing -free-footed -free-for-all -freeform -free-form -free-going -free-grown -freehand -free-hand -freehanded -free-handed -freehandedly -free-handedly -freehandedness -free-handedness -freehearted -free-hearted -freeheartedly -freeheartedness -Freehold -freeholder -freeholders -freeholdership -freeholding -freeholds -freeing -freeings -freeish -Freekirker -freelage -freelance -free-lance -freelanced -freelancer -free-lancer -freelances -freelancing -Freeland -Freelandville -freely -free-liver -free-living -freeload -freeloaded -freeloader -freeloaders -freeloading -freeloads -freeloving -freelovism -free-lovism -free-machining -Freeman -freemanship -Freemanspur -freemartin -Freemason -freemasonic -freemasonical -freemasonism -Freemasonry -freemasons -freemen -free-minded -free-mindedly -free-mindedness -Freemon -free-mouthed -free-moving -freen -freend -freeness -freenesses -Freeport -free-quarter -free-quarterer -Freer -free-range -free-reed -free-rider -freers -frees -free-select -freesheet -Freesia -freesias -free-silver -freesilverism -freesilverite -Freesoil -free-soil -free-soiler -Free-soilism -freesp -freespac -freespace -free-speaking -free-spending -free-spirited -free-spoken -free-spokenly -free-spokenness -freest -freestanding -free-standing -freestyle -freestyler -freestone -free-stone -freestones -free-swimmer -free-swimming -freet -free-tailed -freethink -freethinker -free-thinker -freethinkers -freethinking -free-throw -freety -free-tongued -Freetown -free-trade -freetrader -free-trader -free-trading -free-tradist -Freeunion -free-versifier -Freeville -freeway -freeways -freeward -Freewater -freewheel -freewheeler -freewheelers -freewheeling -freewheelingness -freewill -free-willed -free-willer -freewoman -freewomen -free-working -freezable -freeze -freezed -freeze-dry -freeze-dried -freeze-drying -freeze-out -freezer -freezers -freezes -freeze-up -freezy -freezing -freezingly -Fregata -Fregatae -Fregatidae -Frege -Fregger -fregit -Frei -Frey -Freia -Freya -Freyah -freyalite -freibergite -Freiburg -Freycinetia -Freida -freieslebenite -freiezlebenhe -freight -freightage -freighted -freighter -freighters -freightyard -freighting -freightless -freightliner -freightment -freight-mile -freights -Freyja -freijo -Freiman -freinage -freir -Freyr -Freyre -Freistatt -freit -Freytag -freith -freity -Frejus -Frelimo -Frelinghuysen -Fremantle -fremd -fremdly -fremdness -fremescence -fremescent -fremitus -fremituses -Fremont -Fremontia -Fremontodendron -fremt -fren -frena -frenal -Frenatae -frenate -French -French-born -Frenchboro -French-bred -French-built -Frenchburg -frenched -French-educated -frenchen -frenches -French-fashion -French-grown -French-heeled -Frenchy -Frenchier -Frenchies -Frenchiest -Frenchify -Frenchification -Frenchified -Frenchifying -Frenchily -Frenchiness -frenching -Frenchism -Frenchize -French-kiss -Frenchless -Frenchly -Frenchlick -french-like -French-looking -French-loving -French-made -Frenchman -French-manned -Frenchmen -French-minded -Frenchness -French-polish -French-speaking -Frenchtown -Frenchville -Frenchweed -Frenchwise -Frenchwoman -Frenchwomen -Frendel -Freneau -frenetic -frenetical -frenetically -frenetics -Frenghi -frenne -Frentz -frenula -frenular -frenulum -frenum -frenums -frenuna -frenzelite -frenzy -frenzic -frenzied -frenziedly -frenziedness -frenzies -frenzying -frenzily -Freon -freq -freq. -frequence -frequency -frequencies -frequency-modulated -frequent -frequentable -frequentage -frequentation -frequentative -frequented -frequenter -frequenters -frequentest -frequenting -frequently -frequentness -frequents -Frere -freres -Frerichs -frescade -fresco -Frescobaldi -frescoed -frescoer -frescoers -frescoes -frescoing -frescoist -frescoists -frescos -fresh -fresh-baked -fresh-boiled -fresh-caught -fresh-cleaned -fresh-coined -fresh-colored -fresh-complexioned -fresh-cooked -fresh-cropped -fresh-cut -fresh-drawn -freshed -freshen -freshened -freshener -fresheners -freshening -freshens -fresher -freshes -freshest -freshet -freshets -fresh-faced -fresh-fallen -freshhearted -freshing -freshish -fresh-killed -fresh-laid -fresh-leaved -freshly -fresh-looking -fresh-made -freshman -freshmanhood -freshmanic -freshmanship -freshmen -freshment -freshness -freshnesses -fresh-painted -fresh-picked -fresh-run -fresh-slaughtered -fresh-washed -freshwater -fresh-water -fresh-watered -freshwoman -Fresison -fresne -Fresnel -fresnels -Fresno -fress -fresser -fret -fretful -fretfully -fretfulness -fretfulnesses -fretish -fretize -fretless -frets -fretsaw -fret-sawing -fretsaws -fretsome -frett -frettage -frettation -frette -fretted -fretten -fretter -fretters -fretty -frettier -frettiest -fretting -frettingly -fretum -fretways -Fretwell -fretwise -fretwork -fretworked -fretworks -Freud -Freudberg -Freudian -Freudianism -freudians -Freudism -Freudist -Frewsburg -FRG -FRGS -Fri -Fry -Fri. -Fria -friability -friable -friableness -friand -friandise -Friant -friar -friarbird -friarhood -friary -friaries -friarly -friarling -friars -friar's -friation -frib -fribby -fribble -fribbled -fribbleism -fribbler -fribblery -fribblers -fribbles -fribbling -fribblish -friborg -friborgh -Fribourg -Fryburg -fricace -fricandeau -fricandeaus -fricandeaux -fricandel -fricandelle -fricando -fricandoes -fricassee -fricasseed -fricasseeing -fricassees -fricasseing -frication -fricative -fricatives -fricatrice -FRICC -Frick -Fricke -frickle -fry-cooker -fricti -friction -frictionable -frictional -frictionally -friction-head -frictionize -frictionized -frictionizing -frictionless -frictionlessly -frictionlessness -frictionproof -frictions -friction's -friction-saw -friction-sawed -friction-sawing -friction-sawn -friction-tight -Fryd -Frida -Friday -Fridays -friday's -Fridell -fridge -fridges -Fridila -Fridley -Fridlund -Frydman -fridstool -Fridtjof -Frye -Fryeburg -Fried -Frieda -Friedberg -friedcake -Friede -friedelite -Friedens -Friedensburg -Frieder -Friederike -Friedheim -Friedland -Friedlander -Friedly -Friedman -Friedrich -friedrichsdor -Friedrichshafen -Friedrichstrasse -Friedrick -Friend -friended -friending -friendless -friendlessness -Friendly -friendlier -friendlies -friendliest -friendlike -friendlily -friendliness -friendlinesses -friendliwise -friends -friend's -Friendship -friendships -friendship's -Friendsville -Friendswood -frier -fryer -friers -fryers -Frierson -Fries -friese -frieseite -Friesian -Friesic -Friesish -Friesland -Friesz -frieze -frieze-coated -friezed -friezer -friezes -frieze's -friezy -friezing -frig -frigage -frigate -frigate-built -frigates -frigate's -frigatoon -frigefact -Frigg -Frigga -frigged -frigger -frigging -friggle -fright -frightable -frighted -frighten -frightenable -frightened -frightenedly -frightenedness -frightener -frightening -frighteningly -frighteningness -frightens -frighter -frightful -frightfully -frightfulness -frightfulnesses -frighty -frighting -frightless -frightment -frights -frightsome -frigid -Frigidaire -frigidaria -frigidarium -frigiddaria -frigidity -frigidities -frigidly -frigidness -frigidoreceptor -frigiferous -frigolabile -frigor -frigoric -frigorify -frigorific -frigorifical -frigorifico -frigorimeter -Frigoris -frigostable -frigotherapy -frigs -frying -frying-pan -Frija -frijol -frijole -frijoles -frijolillo -frijolito -frike -frilal -frill -frillback -frill-bark -frill-barking -frilled -friller -frillery -frillers -frilly -frillier -frillies -frilliest -frillily -frilliness -frilling -frillings -frill-like -frills -frill's -frim -Frimaire -Frymire -frimitts -Friml -fringe -fringe-bell -fringed -fringeflower -fringefoot -fringehead -fringeless -fringelet -fringelike -fringent -fringepod -fringes -Fringetail -fringy -fringier -fringiest -Fringilla -fringillaceous -fringillid -Fringillidae -fringilliform -Fringilliformes -fringilline -fringilloid -fringiness -fringing -Friona -frypan -fry-pan -frypans -friponerie -fripper -fripperer -frippery -fripperies -frippet -Fris -Fris. -frisado -Frisbee -frisbees -frisca -friscal -Frisch -Frisco -frise -frises -Frisesomorum -frisette -frisettes -friseur -friseurs -Frisian -Frisii -frisk -frisked -frisker -friskers -friskest -frisket -friskets -friskful -frisky -friskier -friskiest -friskily -friskin -friskiness -friskinesses -frisking -friskingly -friskle -frisks -frislet -frisolee -frison -friss -Frisse -Frissell -frisson -frissons -frist -frisure -friszka -frit -Fritch -frit-fly -frith -frithborgh -frithborh -frithbot -frith-guild -frithy -frithles -friths -frithsoken -frithstool -frith-stool -frithwork -fritillary -Fritillaria -fritillaries -fritniency -Frits -fritt -frittata -fritted -fritter -frittered -fritterer -fritterers -frittering -fritters -fritting -Fritts -Fritz -Fritze -fritzes -Fritzie -Fritzsche -Friuli -Friulian -frivol -frivoled -frivoler -frivolers -frivoling -frivolism -frivolist -frivolity -frivolities -frivolity-proof -frivolize -frivolized -frivolizing -frivolled -frivoller -frivolling -frivolous -frivolously -frivolousness -frivols -frixion -friz -frizado -frize -frized -frizel -frizer -frizers -frizes -frizette -frizettes -frizing -frizz -frizzante -frizzed -frizzen -frizzer -frizzers -frizzes -frizzy -frizzier -frizziest -frizzily -frizziness -frizzing -frizzle -frizzled -frizzler -frizzlers -frizzles -frizzly -frizzlier -frizzliest -frizzling -Frl -Frlein -fro -Frobisher -frock -frock-coat -frocked -frocking -frockless -frocklike -frockmaker -frocks -frock's -Frodeen -Frodi -Frodin -Frodina -Frodine -froe -Froebel -Froebelian -Froebelism -Froebelist -Froehlich -froeman -Froemming -froes -FROG -frog-belly -frogbit -frog-bit -frogeater -frogeye -frogeyed -frog-eyed -frogeyes -frogface -frogfish -frog-fish -frogfishes -frogflower -frogfoot -frogged -frogger -froggery -froggy -froggier -froggies -froggiest -frogginess -frogging -froggish -froghood -froghopper -frogland -frogleaf -frogleg -froglet -froglets -froglike -frogling -frogman -frogmarch -frog-march -frogmen -Frogmore -frogmouth -frog-mouth -frogmouths -frognose -frogs -frog's -frog's-bit -frogskin -frogskins -frogspawn -frog-spawn -frogstool -frogtongue -frogwort -Froh -frohlich -Frohman -Frohna -Frohne -Froid -froideur -froise -Froissart -froisse -frokin -frolic -frolicful -Frolick -frolicked -frolicker -frolickers -frolicky -frolicking -frolickly -frolicks -frolicly -frolicness -frolics -frolicsome -frolicsomely -frolicsomeness -from -Froma -fromage -fromages -Fromberg -Frome -Fromental -fromenty -fromenties -Fromentin -fromfile -Fromm -Fromma -fromward -fromwards -Frona -frond -Fronda -frondage -frondation -Fronde -fronded -frondent -frondesce -frondesced -frondescence -frondescent -frondescing -Frondeur -frondeurs -frondiferous -frondiform -frondigerous -frondivorous -Frondizi -frondless -frondlet -frondose -frondosely -frondous -fronds -Fronia -Fronya -Fronnia -Fronniah -frons -front -frontad -frontage -frontager -frontages -frontal -frontalis -frontality -frontally -frontals -frontate -frontbencher -front-connected -frontcourt -fronted -Frontenac -frontenis -fronter -frontes -front-fanged -front-focus -front-focused -front-foot -frontier -frontierless -frontierlike -frontierman -frontiers -frontier's -frontiersman -frontiersmen -frontignac -Frontignan -fronting -frontingly -Frontirostria -frontis -frontispiece -frontispieced -frontispieces -frontispiecing -frontlash -frontless -frontlessly -frontlessness -frontlet -frontlets -fronto- -frontoauricular -frontoethmoid -frontogenesis -frontolysis -frontomalar -frontomallar -frontomaxillary -frontomental -fronton -frontonasal -frontons -frontooccipital -frontoorbital -frontoparietal -frontopontine -frontosphenoidal -frontosquamosal -frontotemporal -frontozygomatic -front-page -front-paged -front-paging -frontpiece -front-rank -front-ranker -Frontroyal -frontrunner -front-runner -fronts -frontsman -frontspiece -frontspieces -frontstall -fronture -frontways -frontward -frontwards -front-wheel -frontwise -froom -froppish -frore -froren -frory -frosh -frosk -Frost -frostation -frost-beaded -frostbird -frostbit -frost-bit -frostbite -frost-bite -frostbiter -frostbites -frostbiting -frostbitten -frost-bitten -frost-blite -frostbound -frost-bound -frostbow -Frostburg -frost-burnt -frost-chequered -frost-concocted -frost-congealed -frost-covered -frost-crack -frosted -frosteds -froster -frost-fettered -frost-firmed -frostfish -frostfishes -frostflower -frost-free -frost-hardy -frost-hoar -frosty -frostier -frostiest -frosty-face -frosty-faced -frostily -frosty-mannered -frosty-natured -frostiness -frosting -frostings -frosty-spirited -frosty-whiskered -frost-kibed -frostless -frostlike -frost-nip -frostnipped -frost-nipped -Frostproof -frostproofing -frost-pure -frost-rent -frost-ridge -frost-riven -frostroot -frosts -frost-tempered -frostweed -frostwork -frost-work -frostwort -frot -froth -froth-becurled -froth-born -froth-clad -frothed -frother -froth-faced -froth-foamy -Frothi -frothy -frothier -frothiest -frothily -frothiness -frothing -frothless -froths -frothsome -frottage -frottages -frotted -frotteur -frotteurs -frotting -frottola -frottole -frotton -Froude -froufrou -frou-frou -froufrous -frough -froughy -frounce -frounced -frounceless -frounces -frouncing -frousy -frousier -frousiest -froust -frousty -frouze -frouzy -frouzier -frouziest -frow -froward -frowardly -frowardness -frower -frowy -frowl -frown -frowned -frowner -frowners -frownful -frowny -frowning -frowningly -frownless -frowns -frows -frowsy -frowsier -frowsiest -frowsily -frowsiness -frowst -frowsted -frowsty -frowstier -frowstiest -frowstily -frowstiness -frowsts -frowze -frowzy -frowzier -frowziest -frowzy-headed -frowzily -frowziness -frowzled -frowzly -froze -frozen -frozenhearted -frozenly -frozenness -FRPG -FRR -FRS -Frs. -frsiket -frsikets -FRSL -FRSS -Frst -frt -frt. -FRU -frubbish -fruchtschiefer -fructed -fructescence -fructescent -fructiculose -fructicultural -fructiculture -Fructidor -fructiferous -fructiferously -fructiferousness -fructify -fructification -fructificative -fructified -fructifier -fructifies -fructifying -fructiform -fructiparous -fructivorous -fructokinase -fructosan -fructose -fructoses -fructoside -fructuary -fructuarius -fructuate -fructuose -fructuosity -fructuous -fructuously -fructuousness -fructure -fructus -Fruehauf -frug -frugal -frugalism -frugalist -frugality -frugalities -frugally -frugalness -fruggan -frugged -fruggin -frugging -frugiferous -frugiferousness -Frugivora -frugivorous -frugs -Fruin -fruit -Fruita -fruitade -fruitage -fruitages -fruitarian -fruitarianism -fruitbearing -fruit-bringing -fruitcake -fruitcakey -fruitcakes -fruit-candying -Fruitdale -fruit-drying -fruit-eating -fruited -fruiter -fruiterer -fruiterers -fruiteress -fruitery -fruiteries -fruiters -fruitester -fruit-evaporating -fruitful -fruitfuller -fruitfullest -fruitfully -fruitfullness -fruitfulness -fruitfulnesses -fruitgrower -fruit-grower -fruitgrowing -fruit-growing -Fruithurst -fruity -fruitier -fruitiest -fruitily -fruitiness -fruiting -fruition -fruitions -fruitist -fruitive -Fruitland -fruitless -fruitlessly -fruitlessness -fruitlet -fruitlets -fruitlike -fruitling -fruit-paring -Fruitport -fruit-producing -fruits -fruit's -fruitstalk -fruittime -Fruitvale -fruitwise -fruitwoman -fruitwomen -fruitwood -fruitworm -Frulein -Frulla -Frum -Fruma -frumaryl -frument -frumentaceous -frumentarious -frumentation -frumenty -frumenties -Frumentius -frumentum -frumety -frump -frumpery -frumperies -frumpy -frumpier -frumpiest -frumpily -frumpiness -frumpish -frumpishly -frumpishness -frumple -frumpled -frumpling -frumps -frundel -Frunze -frush -frusla -frust -frusta -frustrable -frustraneous -frustrate -frustrated -frustrately -frustrater -frustrates -frustrating -frustratingly -frustration -frustrations -frustrative -frustratory -frustula -frustule -frustulent -frustules -frustulose -frustulum -frustum -frustums -frutage -frutescence -frutescent -frutex -fruticant -fruticeous -frutices -fruticeta -fruticetum -fruticose -fruticous -fruticulose -fruticulture -frutify -frutilla -fruz -frwy -FS -f's -FSA -FSCM -F-scope -FSDO -FSE -FSF -FSH -F-shaped -F-sharp -fsiest -FSK -FSLIC -FSR -FSS -F-state -f-stop -fstore -FSU -FSW -FT -ft. -FT1 -FTAM -FTC -FTE -FTG -fth -fth. -fthm -FTL -ft-lb -ftncmd -ftnerr -FTP -ft-pdl -FTPI -FTS -FTW -FTZ -Fu -Fuad -fuage -fub -FUBAR -fubbed -fubbery -fubby -fubbing -fubs -fubsy -fubsier -fubsiest -Fucaceae -fucaceous -Fucales -fucate -fucation -fucatious -fuchi -Fu-chou -Fuchs -Fuchsia -fuchsia-flowered -Fuchsian -fuchsias -fuchsin -fuchsine -fuchsines -fuchsinophil -fuchsinophilous -fuchsins -fuchsite -fuchsone -fuci -fucinita -fuciphagous -fucivorous -fuck -fucked -fucker -fuckers -fucking -fucks -fuckup -fuckups -fuckwit -fucoid -fucoidal -Fucoideae -fucoidin -fucoids -fucosan -fucose -fucoses -fucous -fucoxanthin -fucoxanthine -fucus -fucused -fucuses -FUD -fudder -fuddy-duddy -fuddy-duddies -fuddy-duddiness -fuddle -fuddlebrained -fuddle-brained -fuddled -fuddledness -fuddlement -fuddler -fuddles -fuddling -fuder -fudge -fudged -fudger -fudges -fudgy -fudging -fuds -Fuegian -Fuehrer -fuehrers -fuel -fueled -fueler -fuelers -fueling -fuelizer -fuelled -fueller -fuellers -fuelling -fuels -fuelwood -fuerte -Fuertes -Fuerteventura -fuff -fuffy -fuffit -fuffle -fug -fugacy -fugacious -fugaciously -fugaciousness -fugacity -fugacities -fugal -fugally -fugara -fugard -Fugate -fugato -fugatos -Fugazy -fuge -Fugere -Fuget -fugged -Fugger -fuggy -fuggier -fuggiest -fuggily -fugging -fughetta -fughettas -fughette -fugie -fugient -fugio -fugios -fugit -fugitate -fugitated -fugitating -fugitation -fugitive -fugitively -fugitiveness -fugitives -fugitive's -fugitivism -fugitivity -fugle -fugled -fugleman -fuglemanship -fuglemen -fugler -fugles -fugling -fugs -fugu -fugue -fugued -fuguelike -fugues -fuguing -fuguist -fuguists -fugus -Fuhrer -fuhrers -Fuhrman -Fu-hsi -fu-yang -fuidhir -fuye -fuirdays -Fuirena -Fuji -Fujiyama -Fujio -fujis -Fujisan -Fuji-san -Fujitsu -Fujiwara -Fukien -Fukuda -Fukuoka -Fukushima -ful -Fula -Fulah -Fulahs -Fulah-zandeh -Fulani -Fulanis -Fulas -Fulbert -Fulbright -Fulcher -fulciform -fulciment -fulcra -fulcraceous -fulcral -fulcrate -fulcrum -fulcrumage -fulcrumed -fulcruming -fulcrums -Fuld -Fulda -fulfil -fulfill -fulfilled -fulfiller -fulfillers -fulfilling -fulfillment -fulfillments -fulfills -fulfilment -fulfils -fulful -Fulfulde -fulfullment -fulgence -fulgency -Fulgencio -fulgent -fulgently -fulgentness -fulgid -fulgide -fulgidity -fulgor -Fulgora -fulgorid -Fulgoridae -Fulgoroidea -fulgorous -fulgour -fulgourous -Fulgur -fulgural -fulgurant -fulgurantly -fulgurata -fulgurate -fulgurated -fulgurating -fulguration -fulgurator -fulgurite -fulgurous -Fulham -fulhams -Fulica -Fulicinae -fulicine -fuliginosity -fuliginous -fuliginously -fuliginousness -fuligo -Fuligula -Fuligulinae -fuliguline -fulyie -fulimart -fulk -Fulke -Fulks -full -full-accomplished -full-acorned -full-adjusted -fullage -fullam -fullams -full-annealing -full-armed -full-assembled -full-assured -full-attended -fullback -fullbacks -full-banked -full-beaming -full-bearded -full-bearing -full-bellied -full-blood -full-blooded -full-bloodedness -full-bloomed -full-blossomed -full-blown -fullbodied -full-bodied -full-boled -full-bore -full-born -full-bosomed -full-bottom -full-bottomed -full-bound -full-bowed -full-brained -full-breasted -full-brimmed -full-buckramed -full-built -full-busted -full-buttocked -full-cell -full-celled -full-centered -full-charge -full-charged -full-cheeked -full-chested -full-chilled -full-clustered -full-colored -full-crammed -full-cream -full-crew -full-crown -full-cut -full-depth -full-diamond -full-diesel -full-digested -full-distended -fulldo -full-draught -full-drawn -full-dress -full-dressed -full-dug -full-eared -fulled -full-edged -full-eyed -Fuller -fullerboard -fullered -fullery -fulleries -fullering -fullers -Fullerton -fullest -full-exerted -full-extended -fullface -full-faced -fullfaces -full-fashioned -full-fatted -full-feathered -full-fed -full-feed -full-feeding -full-felled -full-figured -fullfil -full-finished -full-fired -full-flanked -full-flavored -full-fledged -full-fleshed -full-floating -full-flocked -full-flowering -full-flowing -full-foliaged -full-form -full-formed -full-fortuned -full-fraught -full-freight -full-freighted -full-frontal -full-fronted -full-fruited -full-glowing -full-gorged -full-grown -fullgrownness -full-haired -full-hand -full-handed -full-happinessed -full-hard -full-haunched -full-headed -fullhearted -full-hearted -full-hipped -full-hot -fully -fullymart -fulling -fullish -full-jeweled -full-jointed -full-known -full-laden -full-leather -full-leaved -full-length -full-leveled -full-licensed -full-limbed -full-lined -full-lipped -full-load -full-made -full-manned -full-measured -full-minded -full-moon -fullmouth -fullmouthed -full-mouthed -fullmouthedly -full-mouthedly -full-natured -full-necked -full-nerved -fullness -fullnesses -fullom -Fullonian -full-opening -full-orbed -full-out -full-page -full-paid -full-panoplied -full-paunched -full-personed -full-pitch -full-plumed -full-power -full-powered -full-proportioned -full-pulsing -full-rayed -full-resounding -full-rigged -full-rigger -full-ripe -full-ripened -full-roed -full-run -fulls -full-sailed -full-scale -full-sensed -full-sharer -full-shouldered -full-shroud -full-size -full-sized -full-skirted -full-souled -full-speed -full-sphered -full-spread -full-stage -full-statured -full-stomached -full-strained -full-streamed -full-strength -full-stuffed -full-summed -full-swelling -fullterm -full-term -full-throated -full-tide -fulltime -full-time -full-timed -full-timer -full-to-full -full-toned -full-top -full-trimmed -full-tuned -full-tushed -full-uddered -full-value -full-voiced -full-volumed -full-way -full-wave -full-weight -full-weighted -full-whiskered -full-winged -full-witted -fullword -fullwords -fulmar -fulmars -Fulmarus -fulmen -Fulmer -fulmicotton -fulmina -fulminancy -fulminant -fulminate -fulminated -fulminates -fulminating -fulmination -fulminations -fulminator -fulminatory -fulmine -fulmined -fulmineous -fulmines -fulminic -fulmining -fulminous -fulminurate -fulminuric -Fulmis -fulness -fulnesses -Fuls -fulsamic -Fulshear -fulsome -fulsomely -fulsomeness -fulth -Fulton -Fultondale -Fultonham -Fultonville -Fults -Fultz -Fulup -fulvene -fulvescent -Fulvi -Fulvia -Fulviah -fulvid -fulvidness -fulvous -fulwa -fulzie -fum -fumacious -fumade -fumado -fumados -fumage -fumagine -Fumago -fumant -fumarase -fumarases -fumarate -fumarates -Fumaria -Fumariaceae -fumariaceous -fumaric -fumaryl -fumarin -fumarine -fumarium -fumaroid -fumaroidal -fumarole -fumaroles -fumarolic -fumatory -fumatoria -fumatories -fumatorium -fumatoriums -fumattoria -fumble -fumbled -fumble-fist -fumbler -fumblers -fumbles -fumbling -fumblingly -fumblingness -fumbulator -fume -fumed -fumeless -fumelike -fumer -fumerel -fumeroot -fumers -fumes -fumet -fumets -fumette -fumettes -fumeuse -fumeuses -fumewort -fumy -fumid -fumidity -fumiduct -fumier -fumiest -fumiferana -fumiferous -fumify -fumigant -fumigants -fumigate -fumigated -fumigates -fumigating -fumigation -fumigations -fumigator -fumigatory -fumigatories -fumigatorium -fumigators -fumily -fuminess -fuming -fumingly -fumish -fumishing -fumishly -fumishness -fumistery -fumitory -fumitories -fummel -fummle -fumose -fumosity -fumous -fumously -fumuli -fumulus -fun -funambulant -funambulate -funambulated -funambulating -funambulation -funambulator -funambulatory -funambule -funambulic -funambulism -funambulist -funambulo -funambuloes -Funaria -Funariaceae -funariaceous -funbre -Funch -Funchal -function -functional -functionalism -functionalist -functionalistic -functionality -functionalities -functionalize -functionalized -functionalizing -functionally -functionals -functionary -functionaries -functionarism -functionate -functionated -functionating -functionation -functioned -functioning -functionize -functionless -functionlessness -functionnaire -functions -function's -functor -functorial -functors -functor's -functus -fund -Funda -fundable -fundal -fundament -fundamental -fundamentalism -fundamentalist -fundamentalistic -fundamentalists -fundamentality -fundamentally -fundamentalness -fundamentals -fundatorial -fundatrices -fundatrix -funded -funder -funders -fundholder -fundi -Fundy -fundic -fundiform -funding -funditor -funditores -fundless -fundmonger -fundmongering -fundraise -fundraising -funds -funduck -Fundulinae -funduline -Fundulus -fundungi -fundus -funebre -funebrial -funebrious -funebrous -funeral -funeralize -funerally -funerals -funeral's -funerary -funerate -funeration -funereal -funereality -funereally -funerealness -funest -funestal -funfair -fun-fair -funfairs -funfest -fun-filled -Funfkirchen -fungaceous -fungal -Fungales -fungals -fungate -fungated -fungating -fungation -funge -fungi -fungi- -Fungia -fungian -fungibility -fungible -fungibles -fungic -fungicidal -fungicidally -fungicide -fungicides -fungicolous -fungid -fungiferous -fungify -fungiform -fungilliform -fungillus -fungin -fungistat -fungistatic -fungistatically -fungite -fungitoxic -fungitoxicity -fungivorous -fungo -fungoes -fungoid -fungoidal -fungoids -fungology -fungological -fungologist -fungose -fungosity -fungosities -fungous -Fungurume -fungus -fungus-covered -fungus-digesting -fungused -funguses -fungusy -funguslike -fungus-proof -funic -funicle -funicles -funicular -funiculars -funiculate -funicule -funiculi -funiculitis -funiculus -funiform -funiliform -funipendulous -funis -Funje -Funk -funked -funker -funkers -funky -Funkia -funkias -funkier -funkiest -funkiness -funking -funks -Funkstown -funli -fun-loving -funmaker -funmaking -funned -funnel -funnel-breasted -funnel-chested -funneled -funnel-fashioned -funnelform -funnel-formed -funneling -funnelled -funnellike -funnelling -funnel-necked -funnels -funnel-shaped -funnel-web -funnelwise -funny -funnier -funnies -funniest -funnily -funnyman -funnymen -funniment -funniness -funning -funori -funorin -funs -fun-seeking -funster -Funston -funt -Funtumia -Fuquay -Fur -fur. -furacana -furacious -furaciousness -furacity -fural -furaldehyde -furan -furandi -furane -furanes -furanoid -furanose -furanoses -furanoside -furans -furazan -furazane -furazolidone -furbearer -fur-bearing -furbelow -furbelowed -furbelowing -furbelows -furbish -furbishable -furbished -furbisher -furbishes -furbishing -furbishment -furca -furcae -furcal -fur-capped -furcate -furcated -furcately -furcates -furcating -furcation -Furcellaria -furcellate -furciferine -furciferous -furciform -furcilia -fur-clad -fur-coated -fur-collared -Furcraea -furcraeas -fur-cuffed -furcula -furculae -furcular -furcule -furculum -furdel -furdle -Furey -Furfooz -Furfooz-grenelle -furfur -furfuraceous -furfuraceously -furfural -furfuralcohol -furfuraldehyde -furfurals -furfuramid -furfuramide -furfuran -furfurans -furfuration -furfures -furfuryl -furfurylidene -furfurine -furfuroid -furfurol -furfurole -furfurous -Furgeson -fur-gowned -Fury -Furiae -furial -furiant -furibund -furicane -fury-driven -Furie -furied -Furies -furify -fury-haunted -Furiya -furil -furyl -furile -furilic -fury-moving -furiosa -furiosity -furioso -furious -furiouser -furious-faced -furiousity -furiously -furiousness -fury's -furison -furivae -furl -furlable -Furlan -furlana -furlanas -furlane -Furlani -furled -furler -furlers -furless -fur-lined -furling -Furlong -furlongs -furlough -furloughed -furloughing -furloughs -furls -Furman -Furmark -furmente -furmenty -furmenties -furmety -furmeties -furmint -furmity -furmities -furnace -furnaced -furnacelike -furnaceman -furnacemen -furnacer -furnaces -furnace's -furnacing -furnacite -furnage -Furnary -Furnariidae -Furnariides -Furnarius -furner -Furnerius -Furness -furniment -furnish -furnishable -furnished -furnisher -furnishes -furnishing -furnishings -furnishment -furnishness -furnit -furniture -furnitureless -furnitures -Furnivall -furoate -furodiazole -furoic -furoid -furoin -furole -furomethyl -furomonazole -furor -furore -furores -furors -furosemide -furphy -Furr -furr-ahin -furred -furry -furrier -furriered -furriery -furrieries -furriers -furriest -furrily -furriner -furriners -furriness -furring -furrings -furrow -furrow-cloven -furrowed -furrower -furrowers -furrow-faced -furrow-fronted -furrowy -furrowing -furrowless -furrowlike -furrows -furrure -furs -fur's -fursemide -furstone -Furtek -Furth -further -furtherance -furtherances -furthered -furtherer -furtherest -furthering -furtherly -furthermore -furthermost -furthers -furthersome -furthest -furthy -furtive -furtively -furtiveness -furtivenesses -fur-touched -fur-trimmed -furtum -Furtwler -Furud -furuncle -furuncles -furuncular -furunculoid -furunculosis -furunculous -furunculus -furze -furzechat -furze-clad -furzed -furzeling -furzery -furzes -furzetop -furzy -furzier -furziest -FUS -fusain -fusains -Fusan -fusarial -fusariose -fusariosis -Fusarium -fusarole -fusate -fusc -fuscescent -fuscin -Fusco -fusco- -fusco-ferruginous -fuscohyaline -fusco-piceous -fusco-testaceous -fuscous -FUSE -fuseau -fuseboard -fused -fusee -fusees -fusel -fuselage -fuselages -fuseless -Fuseli -fuselike -fusels -fuseplug -fuses -fusetron -Fushih -fusht -Fushun -fusi- -fusibility -fusible -fusibleness -fusibly -Fusicladium -Fusicoccum -fusiform -Fusiformis -fusil -fusilade -fusiladed -fusilades -fusilading -fusile -fusileer -fusileers -fusilier -fusiliers -fusillade -fusilladed -fusillades -fusillading -fusilly -fusils -fusing -fusinist -fusinite -fusion -fusional -fusionism -fusionist -fusionless -fusions -fusk -fusobacteria -fusobacterium -fusobteria -fusoid -fuss -fussbudget -fuss-budget -fussbudgety -fuss-budgety -fussbudgets -fussed -fusser -fussers -fusses -fussy -fussier -fussiest -fussify -fussification -fussily -fussiness -fussinesses -fussing -fussle -fussock -fusspot -fusspots -fust -fustanella -fustanelle -fustee -fuster -fusteric -fustet -fusty -fustian -fustianish -fustianist -fustianize -fustians -fustic -fustics -fustie -fustier -fustiest -fusty-framed -fustigate -fustigated -fustigating -fustigation -fustigator -fustigatory -fustilarian -fustily -fusty-looking -fustilugs -fustin -fustinella -fustiness -fusty-rusty -fustle -fustoc -fusula -fusulae -fusulas -Fusulina -fusuma -fusure -Fusus -fut -fut. -Futabatei -futchel -futchell -fute -futharc -futharcs -futhark -futharks -futhermore -futhorc -futhorcs -futhork -futhorks -futile -futiley -futilely -futileness -futilitarian -futilitarianism -futility -futilities -futilize -futilous -futon -futons -futtah -futter -futteret -futtermassel -futtock -futtocks -Futura -futurable -futural -futurama -futuramic -future -futureless -futurely -future-minded -futureness -futures -future's -futuric -Futurism -futurisms -Futurist -futuristic -futuristically -futurists -futurity -futurities -futurition -futurize -futuro -futurology -futurologist -futurologists -futwa -futz -futzed -futzes -futzing -fuze -fuzed -fuzee -fuzees -fuzes -fuzil -fuzils -fuzing -fuzz -fuzzball -fuzz-ball -fuzzed -fuzzes -fuzzy -fuzzier -fuzziest -fuzzy-guzzy -fuzzy-haired -fuzzy-headed -fuzzy-legged -fuzzily -fuzzines -fuzziness -fuzzinesses -fuzzing -fuzzy-wuzzy -fuzzle -fuzztail -FV -FW -FWA -FWD -fwd. -fwelling -FWHM -FWIW -FX -fz -FZS -G -G. -G.A. -G.A.R. -G.B. -G.B.E. -G.C.B. -G.C.F. -G.C.M. -G.H.Q. -G.I. -G.M. -G.O. -G.O.P. -G.P. -G.P.O. -G.P.U. -G.S. -g.u. -g.v. -GA -Ga. -Gaal -GAAP -GAAS -Gaastra -gaatch -GAB -Gabaon -Gabaonite -Gabar -gabardine -gabardines -gabari -gabarit -gabback -Gabbai -Gabbaim -gabbais -gabbard -gabbards -gabbart -gabbarts -gabbed -Gabbey -gabber -gabbers -Gabbert -Gabbi -Gabby -Gabbie -gabbier -gabbiest -gabbiness -gabbing -gabble -gabbled -gabblement -gabbler -gabblers -gabbles -gabbling -gabbro -gabbroic -gabbroid -gabbroitic -gabbro-porphyrite -gabbros -Gabbs -Gabe -Gabey -Gabel -gabeler -gabelle -gabelled -gabelleman -gabeller -gabelles -gabendum -gaberdine -gaberdines -gaberloonie -gaberlunzie -gaberlunzie-man -Gaberones -gabert -Gabes -gabfest -gabfests -gabgab -Gabi -Gaby -Gabie -gabies -gabion -gabionade -gabionage -gabioned -gabions -gablatores -Gable -gableboard -gable-bottom -gabled -gable-end -gableended -gable-ended -gablelike -Gabler -gable-roofed -gables -gable-shaped -gablet -gable-walled -gablewindowed -gable-windowed -gablewise -gabling -gablock -Gabo -Gabon -Gabonese -Gaboon -gaboons -Gabor -Gaboriau -Gaborone -Gabriel -Gabriela -Gabriele -Gabrieli -Gabriell -Gabriella -Gabrielle -Gabrielli -Gabriellia -Gabriello -Gabrielrache -Gabriels -Gabrielson -Gabrila -Gabrilowitsch -gabs -Gabumi -Gabun -Gabunese -gachupin -Gackle -Gad -Gadaba -gadabout -gadabouts -gadaea -Gadarene -Gadaria -gadbee -gad-bee -gadbush -Gaddafi -Gaddang -gadded -gadder -gadders -Gaddi -gadding -gaddingly -gaddis -gaddish -gaddishness -gade -gadean -Gader -gades -gadfly -gad-fly -gadflies -gadge -gadger -gadget -gadgeteer -gadgeteers -gadgety -gadgetry -gadgetries -gadgets -gadget's -Gadhelic -gadi -gadid -Gadidae -gadids -gadinic -gadinine -gadis -Gaditan -Gadite -gadling -gadman -Gadmann -Gadmon -GADO -gadoid -Gadoidea -gadoids -gadolinia -gadolinic -gadolinite -gadolinium -gadroon -gadroonage -gadrooned -gadrooning -gadroons -gads -Gadsbodikins -Gadsbud -Gadsden -Gadslid -gadsman -gadso -Gadswoons -gaduin -Gadus -gadwall -gadwalls -gadwell -Gadzooks -Gae -gaea -gaed -gaedelian -gaedown -gaeing -Gaekwar -Gael -Gaelan -Gaeldom -Gaelic -Gaelicism -Gaelicist -Gaelicization -Gaelicize -gaels -Gaeltacht -gaen -Gaertnerian -gaes -gaet -Gaeta -Gaetano -Gaetulan -Gaetuli -Gaetulian -gaff -gaffe -gaffed -gaffer -gaffers -gaffes -gaffing -Gaffkya -gaffle -Gaffney -gaff-rigged -gaffs -gaffsail -gaffsman -gaff-topsail -Gafsa -Gag -gaga -gagaku -Gagarin -gagate -Gagauzi -gag-bit -gag-check -Gage -gageable -gaged -gagee -gageite -gagelike -gager -gagers -gagership -gages -Gagetown -gagged -gagger -gaggery -gaggers -gagging -gaggle -gaggled -gaggler -gaggles -gaggling -gaging -Gagliano -gagman -gagmen -Gagne -Gagnon -gagor -gag-reined -gagroot -gags -gagster -gagsters -gagtooth -gag-tooth -gagwriter -Gahan -Gahanna -Gahl -gahnite -gahnites -Gahrwali -Gay -GAIA -Gaya -gayal -gayals -gaiassa -gayatri -gay-beseen -gaybine -gaycat -gay-chirping -gay-colored -Gaidano -gaydiang -Gaidropsaridae -Gaye -Gayel -Gayelord -gayer -gayest -gaiety -gayety -gaieties -gayeties -gay-feather -gay-flowered -Gaige -gay-glancing -gay-green -gay-hued -gay-humored -gayyou -gayish -Gaikwar -Gail -Gayl -Gayla -Gaile -Gayle -Gayleen -Gaylene -Gayler -Gaylesville -gaily -gayly -gaylies -Gaillard -Gaillardia -gay-looking -Gaylor -Gaylord -Gaylordsville -Gay-Lussac -Gaylussacia -gaylussite -gayment -gay-motleyed -gain -Gayn -gain- -gainable -gainage -gainbirth -gaincall -gaincome -gaincope -gaine -gained -Gainer -Gayner -gainers -Gaines -Gainesboro -gayness -gaynesses -Gainestown -Gainesville -gainful -gainfully -gainfulness -gaingiving -gain-giving -gainyield -gaining -gainings -gainless -gainlessness -gainly -gainlier -gainliest -gainliness -Gainor -Gaynor -gainpain -gains -gainsay -gainsaid -gainsayer -gainsayers -gainsaying -gainsays -Gainsborough -gainset -gainsome -gainspeaker -gainspeaking -gainst -gainstand -gainstrive -gainturn -gaintwist -gainward -Gayomart -gay-painted -Gay-Pay-Oo -Gaypoo -gair -gairfish -gairfowl -Gays -gay-seeming -Gaiser -Gaiseric -gaisling -gay-smiling -gaysome -gay-spent -gay-spotted -gaist -Gaysville -gait -gay-tailed -gaited -gaiter -gaiter-in -gaiterless -gaiters -Gaither -Gaithersburg -gay-throned -gaiting -gaits -Gaitskell -gaitt -Gaius -Gayville -Gaivn -gayway -gaywing -gaywings -gaize -gaj -Gajcur -Gajda -Gakona -Gal -Gal. -Gala -galabeah -galabia -galabias -galabieh -galabiya -Galacaceae -galact- -galactagog -galactagogue -galactagoguic -galactan -galactase -galactemia -galacthidrosis -Galactia -galactic -galactically -galactidrosis -galactin -galactite -galacto- -galactocele -galactodendron -galactodensimeter -galactogenetic -galactogogue -galactohemia -galactoid -galactolipide -galactolipin -galactolysis -galactolytic -galactoma -galactometer -galactometry -galactonic -galactopathy -galactophagist -galactophagous -galactophygous -galactophlebitis -galactophlysis -galactophore -galactophoritis -galactophorous -galactophthysis -galactopyra -galactopoiesis -galactopoietic -galactorrhea -galactorrhoea -galactosamine -galactosan -galactoscope -galactose -galactosemia -galactosemic -galactosidase -galactoside -galactosyl -galactosis -galactostasis -galactosuria -galactotherapy -galactotrophy -galacturia -galagala -Galaginae -Galago -galagos -galah -Galahad -galahads -galahs -Galan -galanas -Galang -galanga -galangal -galangals -galangin -galany -galant -galante -Galanthus -Galanti -galantine -galantuomo -galapago -Galapagos -galapee -galas -Galashiels -Galasyn -Galata -Galatae -Galatea -Galateah -galateas -Galati -Galatia -Galatian -Galatians -Galatic -galatine -galatotrophic -Galatz -galavant -galavanted -galavanting -galavants -Galax -galaxes -Galaxy -galaxian -Galaxias -galaxies -Galaxiidae -galaxy's -Galba -galban -galbanum -galbanums -galbe -Galbraith -galbraithian -Galbreath -Galbula -Galbulae -Galbulidae -Galbulinae -galbulus -Galcaio -Galcha -Galchas -Galchic -Gale -galea -galeae -galeage -Galeao -galeas -galeass -galeate -galeated -galeche -gale-driven -galee -galeeny -galeenies -Galega -galegine -Galei -galey -galeid -Galeidae -galeiform -galempong -galempung -Galen -Galena -galenas -Galenian -Galenic -Galenical -Galenism -Galenist -galenite -galenites -galenobismutite -galenoid -Galenus -galeod -Galeodes -Galeodidae -galeoid -Galeopithecus -Galeopsis -Galeorchis -Galeorhinidae -Galeorhinus -galeproof -Galer -galera -galere -galeres -galericulate -galerie -galerite -galerum -galerus -gales -galesaur -Galesaurus -Galesburg -Galesville -galet -Galeton -galette -Galeus -galewort -Galga -Galgal -Galgulidae -gali -galyac -galyacs -galyak -galyaks -galianes -Galibi -Galibis -Galicia -Galician -Galictis -Galidia -Galidictis -Galien -Galik -Galilean -Galilee -galilees -galilei -Galileo -Galili -galimatias -Galina -galinaceous -galingale -Galinsoga -Galinthias -Galion -galiongee -galionji -galiot -galiots -galipidine -galipine -galipoidin -galipoidine -galipoipin -galipot -galipots -Galitea -Galium -galivant -galivanted -galivanting -galivants -galjoen -Gall -Galla -gallacetophenone -gallach -Gallager -Gallagher -gallah -gallamine -gallanilide -gallant -gallanted -gallanting -gallantize -gallantly -gallantness -gallantry -gallantries -gallants -Gallard -Gallas -gallate -gallates -Gallatin -gallature -Gallaudet -Gallaway -gallberry -gallberries -gallbladder -gallbladders -gallbush -Galle -galleass -galleasses -galled -Gallegan -Gallegos -galley -galley-fashion -galleylike -galleyman -galley-man -gallein -galleine -galleins -galleypot -galleys -galley's -galley-slave -galley-tile -galley-west -galleyworm -Gallenz -galleon -galleons -galler -gallera -gallery -Galleria -gallerian -galleried -galleries -gallerygoer -Galleriidae -galleriies -gallerying -galleryite -gallerylike -gallet -galleta -galletas -galleted -galleting -gallets -gallfly -gall-fly -gallflies -gallflower -Galli -Gally -Gallia -galliambic -galliambus -Gallian -Galliano -galliard -galliardise -galliardize -galliardly -galliardness -galliards -galliass -galliasses -gallybagger -gallybeggar -Gallic -Gallican -Gallicanism -Galliccally -Gallice -Gallicisation -Gallicise -Gallicised -Galliciser -Gallicising -Gallicism -gallicisms -Gallicization -Gallicize -Gallicized -Gallicizer -Gallicizing -Gallico -gallicola -Gallicolae -gallicole -gallicolous -gallycrow -Galli-Curci -gallied -Gallienus -gallies -Galliett -galliferous -Gallify -Gallification -galliform -Galliformes -Galligan -Galligantus -galligaskin -galligaskins -gallygaskins -gallying -gallimatia -gallimaufry -gallimaufries -Gallina -Gallinaceae -gallinacean -Gallinacei -gallinaceous -Gallinae -gallinaginous -Gallinago -Gallinas -gallinazo -galline -galliney -galling -gallingly -gallingness -gallinipper -Gallinula -gallinule -gallinulelike -gallinules -Gallinulinae -gallinuline -Gallion -galliot -galliots -Gallipoli -Gallipolis -gallipot -gallipots -Gallirallus -gallish -gallisin -Gallitzin -gallium -galliums -gallivant -gallivanted -gallivanter -gallivanters -gallivanting -gallivants -gallivat -gallivorous -galliwasp -gallywasp -gallize -gall-less -gall-like -Gallman -gallnut -gall-nut -gallnuts -Gallo- -Gallo-briton -gallocyanin -gallocyanine -galloflavin -galloflavine -galloglass -Gallo-grecian -Galloman -Gallomania -Gallomaniac -gallon -gallonage -galloner -gallons -gallon's -galloon -gallooned -galloons -galloot -galloots -gallop -gallopade -galloped -galloper -Galloperdix -gallopers -Gallophile -Gallophilism -Gallophobe -Gallophobia -galloping -gallops -galloptious -Gallo-Rom -Gallo-roman -Gallo-Romance -gallotannate -gallo-tannate -gallotannic -gallo-tannic -gallotannin -gallous -Gallovidian -gallow -Galloway -gallowglass -gallows -gallows-bird -gallowses -gallows-grass -gallowsmaker -gallowsness -gallows-tree -gallowsward -galls -gallstone -gall-stone -gallstones -galluot -Gallup -galluptious -Gallupville -Gallus -gallused -galluses -gallweed -gallwort -galoch -Galofalo -Galois -Galoisian -galoot -galoots -galop -galopade -galopades -galoped -galopin -galoping -galops -galore -galores -galosh -galoshe -galoshed -galoshes -galoubet -galp -galravage -galravitch -gals -Galsworthy -Galt -Galton -Galtonia -Galtonian -galtrap -galuchat -galumph -galumphed -galumphing -galumphs -galumptious -Galuppi -Galusha -galut -Galuth -galv -Galva -galvayne -galvayned -galvayning -Galvan -Galvani -galvanic -galvanical -galvanically -galvanisation -galvanise -galvanised -galvaniser -galvanising -galvanism -galvanist -galvanization -galvanizations -galvanize -galvanized -galvanizer -galvanizers -galvanizes -galvanizing -galvano- -galvanocautery -galvanocauteries -galvanocauterization -galvanocontractility -galvanofaradization -galvanoglyph -galvanoglyphy -galvanograph -galvanography -galvanographic -galvanolysis -galvanology -galvanologist -galvanomagnet -galvanomagnetic -galvanomagnetism -galvanometer -galvanometers -galvanometry -galvanometric -galvanometrical -galvanometrically -galvanoplasty -galvanoplastic -galvanoplastical -galvanoplastically -galvanoplastics -galvanopsychic -galvanopuncture -galvanoscope -galvanoscopy -galvanoscopic -galvanosurgery -galvanotactic -galvanotaxis -galvanotherapy -galvanothermy -galvanothermometer -galvanotonic -galvanotropic -galvanotropism -Galven -Galveston -Galvin -galvo -galvvanoscopy -Galway -Galways -Galwegian -galziekte -gam -gam- -Gama -Gamages -gamahe -Gamay -gamays -Gamal -Gamali -Gamaliel -gamari -gamas -gamash -gamashes -gamasid -Gamasidae -Gamasoidea -gamb -gamba -gambade -gambades -gambado -gambadoes -gambados -gambang -Gambart -gambas -gambe -gambeer -gambeered -gambeering -Gambell -gambelli -Gamber -gambes -gambeson -gambesons -gambet -Gambetta -gambette -Gambi -Gambia -gambiae -gambian -gambians -gambias -Gambier -gambiers -gambir -gambirs -gambist -gambit -gambits -Gamble -gambled -gambler -gamblers -gambles -gamblesome -gamblesomeness -gambling -gambodic -gamboge -gamboges -gambogian -gambogic -gamboised -gambol -gamboled -gamboler -gamboling -gambolled -gamboller -gambolling -gambols -gambone -gambrel -gambreled -Gambrell -gambrelled -gambrel-roofed -gambrels -Gambrill -Gambrills -Gambrinus -gambroon -gambs -Gambusia -gambusias -Gambut -gamdeboo -gamdia -game -gamebag -gameball -gamecock -game-cock -gamecocks -gamecraft -gamed -game-destroying -game-fowl -gameful -gamey -gamekeeper -gamekeepers -gamekeeping -gamelan -gamelang -gamelans -game-law -gameless -gamely -gamelike -gamelin -Gamelion -gamelote -gamelotte -gamene -gameness -gamenesses -gamer -games -gamesman -gamesmanship -gamesome -gamesomely -gamesomeness -games-player -gamest -gamester -gamesters -gamestress -gamet- -gametal -gametange -gametangia -gametangium -gamete -gametes -gametic -gametically -gameto- -gametocyst -gametocyte -gametogenesis -gametogeny -gametogenic -gametogenous -gametogony -gametogonium -gametoid -gametophagia -gametophyll -gametophyte -gametophytic -gametophobia -gametophore -gametophoric -gamgee -gamgia -gamy -gamic -gamier -gamiest -gamily -Gamin -gamine -gamines -gaminesque -gaminess -gaminesses -gaming -gaming-proof -gamings -gaminish -gamins -Gamma -gammacism -gammacismus -gammadia -gammadion -gammarid -Gammaridae -gammarine -gammaroid -Gammarus -gammas -gammation -gammed -Gammelost -gammer -gammerel -gammers -gammerstang -Gammexane -gammy -gammick -gammier -gammiest -gamming -gammock -gammon -gammoned -gammoner -gammoners -gammon-faced -gammoning -gammons -gammon-visaged -gamo- -gamobium -gamodeme -gamodemes -gamodesmy -gamodesmic -gamogamy -gamogenesis -gamogenetic -gamogenetical -gamogenetically -gamogeny -gamogony -Gamolepis -gamomania -gamond -gamone -gamont -Gamopetalae -gamopetalous -gamophagy -gamophagia -gamophyllous -gamori -gamosepalous -gamostele -gamostely -gamostelic -gamotropic -gamotropism -gamous -gamp -gamphrel -gamps -gams -gamut -gamuts -GAN -Ganado -ganam -ganancial -gananciales -ganancias -Ganapati -Gance -ganch -ganched -ganching -Gand -Ganda -Gandeeville -Gander -gandered -ganderess -gandergoose -gandering -gandermooner -ganders -ganderteeth -gandertmeeth -Gandhara -Gandharan -Gandharva -Gandhi -Gandhian -Gandhiism -Gandhiist -Gandhism -Gandhist -gandoura -gandul -gandum -gandurah -Gandzha -gane -ganef -ganefs -Ganesa -Ganesha -ganev -ganevs -gang -Ganga -Gangamopteris -gangan -gangava -gangbang -gangboard -gang-board -gangbuster -gang-cask -gang-days -gangdom -gange -ganged -ganger -gangerel -gangers -Ganges -Gangetic -gangflower -gang-flower -ganggang -ganging -gangion -gangism -gangland -ganglander -ganglands -gangle-shanked -gangly -gangli- -ganglia -gangliac -ganglial -gangliar -gangliasthenia -gangliate -gangliated -gangliectomy -ganglier -gangliest -gangliform -gangliglia -gangliglions -gangliitis -gangling -ganglioblast -gangliocyte -ganglioform -ganglioid -ganglioma -gangliomas -gangliomata -ganglion -ganglionary -ganglionate -ganglionated -ganglionectomy -ganglionectomies -ganglioneural -ganglioneure -ganglioneuroma -ganglioneuron -ganglionic -ganglionitis -ganglionless -ganglions -ganglioplexus -ganglioside -gangman -gangmaster -gangplank -gang-plank -gangplanks -gangplow -gangplows -gangrel -gangrels -gangrenate -gangrene -gangrened -gangrenes -gangrenescent -gangrening -gangrenous -gangs -gang's -gangsa -gangshag -gangsman -gangster -gangsterism -gangsters -gangster's -gangtide -Gangtok -gangue -Ganguela -gangues -gangwa -gangway -gangwayed -gangwayman -gangwaymen -gangways -gang-week -Ganiats -ganyie -Ganymeda -Ganymede -Ganymedes -ganister -ganisters -ganja -ganjah -ganjahs -ganjas -Ganley -ganner -Gannes -gannet -gannetry -gannets -Gannett -Ganny -Gannie -gannister -Gannon -Gannonga -ganoblast -Ganocephala -ganocephalan -ganocephalous -ganodont -Ganodonta -Ganodus -ganof -ganofs -ganoid -ganoidal -ganoidean -Ganoidei -ganoidian -ganoids -ganoin -ganoine -ganomalite -ganophyllite -ganoses -ganosis -Ganowanian -Gans -gansa -gansey -gansel -ganser -Gansevoort -gansy -Gant -ganta -gantang -gantangs -gantelope -gantlet -gantleted -gantleting -gantlets -gantline -gantlines -gantlope -gantlopes -ganton -gantry -gantries -gantryman -Gantrisin -gantsl -Gantt -ganza -ganzie -GAO -gaol -gaolage -gaolbird -gaoled -gaoler -gaolering -gaolerness -gaolers -gaoling -gaoloring -gaols -Gaon -Gaonate -Gaonic -Gaons -gap -Gapa -gape -gaped -gape-gaze -gaper -Gaperon -gapers -gapes -gapeseed -gape-seed -gapeseeds -gapeworm -gapeworms -gapy -Gapin -gaping -gapingly -gapingstock -Gapland -gapless -gaplessness -gapo -gaposis -gaposises -gapped -gapper -gapperi -gappy -gappier -gappiest -gapping -gaps -gap's -gap-toothed -Gapville -GAR -gara -garabato -garad -garage -garaged -garageman -garages -garaging -Garald -Garamas -Garamond -garance -garancin -garancine -Garand -garapata -garapato -Garardsfort -Garate -garau -garava -garavance -Garaway -garawi -garb -garbage -garbages -garbage's -garbanzo -garbanzos -garbardine -Garbe -garbed -garbel -garbell -Garber -Garbers -Garberville -garbill -garbing -garble -garbleable -garbled -garbler -garblers -garbles -garbless -garbline -garbling -garblings -Garbo -garboard -garboards -garboil -garboils -garbologist -garbs -garbure -garce -Garceau -Garcia -Garcia-Godoy -Garcia-Inchaustegui -Garciasville -Garcinia -Garcon -garcons -Gard -Garda -Gardal -gardant -Gardas -gardbrace -garde -gardebras -garde-collet -garde-du-corps -gardeen -garde-feu -garde-feux -Gardel -Gardell -garde-manger -Garden -Gardena -gardenable -gardencraft -Gardendale -gardened -Gardener -gardeners -gardenership -gardenesque -gardenful -garden-gate -gardenhood -garden-house -gardeny -Gardenia -gardenias -gardenin -gardening -gardenize -gardenless -gardenly -gardenlike -gardenmaker -gardenmaking -gardens -garden-seated -garden-variety -Gardenville -gardenwards -gardenwise -garde-reins -garderobe -gardeviance -gardevin -gardevisure -Gardy -Gardia -Gardie -gardyloo -Gardiner -gardinol -gardnap -Gardner -Gardners -Gardnerville -Gardol -gardon -Gare -garefowl -gare-fowl -garefowls -gareh -Garey -Garek -Gareri -Gareth -Garett -garetta -garewaite -Garfield -Garfinkel -garfish -garfishes -garg -Gargalianoi -gargalize -Gargan -garganey -garganeys -Gargantua -Gargantuan -Gargaphia -gargarism -gargarize -Garges -garget -gargety -gargets -gargil -gargle -gargled -gargler -garglers -gargles -gargling -gargoyle -gargoyled -gargoyley -gargoyles -gargoylish -gargoylishly -gargoylism -gargol -Garhwali -Gari -Gary -garial -gariba -Garibald -Garibaldi -Garibaldian -Garibold -Garibull -Gariepy -Garifalia -garigue -garigues -Garik -Garin -GARIOA -Garysburg -garish -garishly -garishness -Garita -Garyville -Garlaand -Garlan -Garland -Garlanda -garlandage -garlanded -garlanding -garlandless -garlandlike -garlandry -garlands -garlandwise -garle -Garlen -garlic -garlicky -garliclike -garlicmonger -garlics -garlicwort -Garlinda -Garling -garlion -garlopa -Garm -Garmaise -garment -garmented -garmenting -garmentless -garmentmaker -garments -garment's -garmenture -garmentworker -Garmisch-Partenkirchen -Garmr -garn -Garnavillo -Garneau -garnel -Garner -garnerage -garnered -garnering -garners -Garnerville -Garnes -Garnet -garnetberry -garnet-breasted -garnet-colored -garneter -garnetiferous -garnetlike -garnet-red -garnets -Garnett -Garnette -garnetter -garnetwork -garnetz -garni -garnice -garniec -garnierite -garnish -garnishable -garnished -garnishee -garnisheed -garnisheeing -garnisheement -garnishees -garnisheing -garnisher -garnishes -garnishing -garnishment -garnishments -garnishry -garnison -garniture -garnitures -Garo -Garofalo -Garold -garon -Garonne -garoo -garookuh -garote -garoted -garoter -garotes -garoting -garotte -garotted -garotter -garotters -garottes -garotting -Garoua -garous -garpike -gar-pike -garpikes -garrafa -garran -Garrard -garrat -Garratt -Garrattsville -garred -Garrek -Garret -garreted -garreteer -Garreth -garretmaster -garrets -Garretson -Garrett -Garrettsville -Garry -Garrya -Garryaceae -Garrick -garridge -garrigue -Garrigues -Garrik -garring -Garris -Garrison -garrisoned -Garrisonian -garrisoning -Garrisonism -garrisons -Garrisonville -Garrity -garrnishable -garron -garrons -garroo -garrooka -Garrot -garrote -garroted -garroter -garroters -garrotes -garroting -Garrott -garrotte -garrotted -garrotter -garrottes -garrotting -Garrulinae -garruline -garrulity -garrulities -garrulous -garrulously -garrulousness -garrulousnesses -Garrulus -garrupa -gars -garse -Garshuni -garsil -Garson -garston -Gart -garten -Garter -garter-blue -gartered -gartering -garterless -garters -garter's -Garth -garthman -Garthrod -garths -Gartner -garua -Garuda -garum -Garv -garvance -garvanzo -Garvey -garveys -Garvy -garvie -Garvin -garvock -Garwin -Garwood -Garzon -GAS -gas-absorbing -gasalier -gasaliers -Gasan -gasbag -gas-bag -gasbags -gasboat -Gasburg -gas-burning -gas-charged -gascheck -gas-check -Gascogne -gascoign -Gascoigne -gascoigny -gascoyne -Gascon -Gasconade -gasconaded -gasconader -gasconading -Gascony -Gasconism -gascons -gascromh -gas-delivering -gas-driven -gaseity -gas-electric -gaselier -gaseliers -gaseosity -gaseous -gaseously -gaseousness -gases -gas-filled -gas-fired -gasfiring -gas-fitter -gas-fitting -gash -gas-heat -gas-heated -gashed -gasher -gashes -gashest -gashful -gash-gabbit -gashy -gashing -gashly -gashliness -gasholder -gashouse -gashouses -gash's -gasify -gasifiable -gasification -gasified -gasifier -gasifiers -gasifies -gasifying -gasiform -Gaskell -gasket -gaskets -Gaskill -Gaskin -gasking -gaskings -Gaskins -gas-laden -gas-lampy -gasless -gaslight -gas-light -gaslighted -gaslighting -gaslightness -gaslights -gaslike -gaslit -gaslock -gasmaker -gasman -Gasmata -gasmen -gasmetophytic -gasogen -gasogene -gasogenes -gasogenic -gasohol -gasohols -gasolene -gasolenes -gasolier -gasoliery -gasoliers -gasoline -gasoline-electric -gasolineless -gasoline-propelled -gasoliner -gasolines -gasolinic -gasometer -gasometry -gasometric -gasometrical -gasometrically -gas-operated -gasoscope -gas-oxygen -gasp -Gaspar -Gaspard -gasparillo -Gasparo -Gaspe -gasped -Gaspee -Gasper -gaspereau -gaspereaus -gaspergou -gaspergous -Gasperi -Gasperoni -gaspers -gaspy -gaspiness -gasping -gaspingly -Gaspinsula -gas-plant -Gasport -gas-producing -gasproof -gas-propelled -gasps -Gasquet -gas-resisting -gas-retort -Gass -gas's -Gassaway -gassed -Gassendi -gassendist -Gasser -Gasserian -gassers -gasses -gassy -gassier -gassiest -gassiness -gassing -gassings -gassit -Gassman -Gassville -gast -gastaldite -gastaldo -gasted -gaster -gaster- -gasteralgia -gasteria -Gasterocheires -Gasterolichenes -gasteromycete -Gasteromycetes -gasteromycetous -Gasterophilus -gasteropod -Gasteropoda -gasterosteid -Gasterosteidae -gasterosteiform -gasterosteoid -Gasterosteus -gasterotheca -gasterothecal -Gasterotricha -gasterotrichan -gasterozooid -gasters -gas-testing -gastful -gasthaus -gasthauser -gasthauses -gastight -gastightness -Gastineau -gasting -gastly -gastness -gastnesses -Gaston -Gastonia -Gastonville -Gastornis -Gastornithidae -gastr- -gastradenitis -gastraea -gastraead -Gastraeadae -gastraeal -gastraeas -gastraeum -gastral -gastralgy -gastralgia -gastralgic -gastraneuria -gastrasthenia -gastratrophia -gastrea -gastreas -gastrectasia -gastrectasis -gastrectomy -gastrectomies -gastrelcosis -gastric -gastricism -gastrilegous -gastriloquy -gastriloquial -gastriloquism -gastriloquist -gastriloquous -gastrimargy -gastrin -gastrins -gastritic -gastritis -gastro- -gastroadenitis -gastroadynamic -gastroalbuminorrhea -gastroanastomosis -gastroarthritis -gastroatonia -gastroatrophia -gastroblennorrhea -gastrocatarrhal -gastrocele -gastrocentrous -Gastrochaena -Gastrochaenidae -gastrocystic -gastrocystis -gastrocnemial -gastrocnemian -gastrocnemii -gastrocnemius -gastrocoel -gastrocoele -gastrocolic -gastrocoloptosis -gastrocolostomy -gastrocolotomy -gastrocolpotomy -gastrodermal -gastrodermis -gastrodialysis -gastrodiaphanoscopy -gastrodidymus -gastrodynia -gastrodisc -gastrodisk -gastroduodenal -gastroduodenitis -gastroduodenoscopy -gastroduodenostomy -gastroduodenostomies -gastroduodenotomy -gastroelytrotomy -gastroenteralgia -gastroenteric -gastroenteritic -gastroenteritis -gastroenteroanastomosis -gastroenterocolitis -gastroenterocolostomy -gastroenterology -gastroenterologic -gastroenterological -gastroenterologically -gastroenterologist -gastroenterologists -gastroenteroptosis -gastroenterostomy -gastroenterostomies -gastroenterotomy -gastroepiploic -gastroesophageal -gastroesophagostomy -gastrogastrotomy -gastrogenic -gastrogenital -gastrogenous -gastrograph -gastrohelcosis -gastrohepatic -gastrohepatitis -gastrohydrorrhea -gastrohyperneuria -gastrohypertonic -gastrohysterectomy -gastrohysteropexy -gastrohysterorrhaphy -gastrohysterotomy -gastroid -gastrointestinal -gastrojejunal -gastrojejunostomy -gastrojejunostomies -gastrolater -gastrolatrous -gastrolavage -gastrolienal -gastrolysis -gastrolith -gastrolytic -Gastrolobium -gastrologer -gastrology -gastrological -gastrologically -gastrologist -gastrologists -gastromalacia -gastromancy -gastromelus -gastromenia -gastromyces -gastromycosis -gastromyxorrhea -gastronephritis -gastronome -gastronomer -gastronomes -gastronomy -gastronomic -gastronomical -gastronomically -gastronomics -gastronomies -gastronomist -gastronosus -gastro-omental -gastropancreatic -gastropancreatitis -gastroparalysis -gastroparesis -gastroparietal -gastropathy -gastropathic -gastroperiodynia -gastropexy -gastrophile -gastrophilism -gastrophilist -gastrophilite -Gastrophilus -gastrophrenic -gastrophthisis -gastropyloric -gastroplasty -gastroplenic -gastropleuritis -gastroplication -gastropneumatic -gastropneumonic -gastropod -Gastropoda -gastropodan -gastropodous -gastropods -gastropore -gastroptosia -gastroptosis -gastropulmonary -gastropulmonic -gastrorrhagia -gastrorrhaphy -gastrorrhea -gastroschisis -gastroscope -gastroscopy -gastroscopic -gastroscopies -gastroscopist -gastrosoph -gastrosopher -gastrosophy -gastrospasm -gastrosplenic -gastrostaxis -gastrostegal -gastrostege -gastrostenosis -gastrostomy -gastrostomies -gastrostomize -Gastrostomus -gastrosuccorrhea -gastrotaxis -gastrotheca -gastrothecal -gastrotympanites -gastrotome -gastrotomy -gastrotomic -gastrotomies -gastrotrich -Gastrotricha -gastrotrichan -gastrotubotomy -gastrovascular -gastroxynsis -gastrozooid -gastrula -gastrulae -gastrular -gastrulas -gastrulate -gastrulated -gastrulating -gastrulation -gastruran -gasts -gasworker -gasworks -Gat -gata -gatch -gatchwork -gate -gateado -gateage -gateau -gateaux -gate-crash -gatecrasher -gate-crasher -gatecrashers -GATED -gatefold -gatefolds -gatehouse -gatehouses -gatekeep -gatekeeper -gate-keeper -gatekeepers -gate-leg -gate-legged -gateless -gatelike -gatemaker -gateman -gatemen -gate-netting -gatepost -gate-post -gateposts -gater -Gates -Gateshead -Gatesville -gatetender -gateway -gatewaying -gatewayman -gatewaymen -gateways -gateway's -gateward -gatewards -gatewise -gatewoman -Gatewood -gateworks -gatewright -Gath -Gatha -Gathard -gather -gatherable -gathered -gatherer -gatherers -gathering -gatherings -Gathers -gatherum -Gathic -Gathings -Gati -Gatian -Gatias -gating -Gatlinburg -Gatling -gator -gators -Gatow -gats -gatsby -GATT -Gattamelata -gatten -gatter -gatteridge -gattine -Gattman -gat-toothed -Gatun -GATV -Gatzke -gau -gaub -gauby -gauche -gauchely -gaucheness -gaucher -gaucherie -gaucheries -gauchest -Gaucho -gauchos -gaucy -gaucie -Gaud -gaudeamus -gaudeamuses -gaudery -gauderies -Gaudet -Gaudete -Gaudette -gaudful -gaudy -Gaudibert -gaudy-day -gaudier -Gaudier-Brzeska -gaudies -gaudiest -gaudy-green -gaudily -gaudiness -gaudinesses -gaudish -gaudless -gauds -gaudsman -gaufer -gauffer -gauffered -gaufferer -gauffering -gauffers -gauffre -gauffred -gaufre -gaufrette -gaufrettes -Gaugamela -gauge -gaugeable -gaugeably -gauged -gauger -gaugers -gaugership -gauges -Gaughan -gauging -Gauguin -Gauhati -gauily -gauk -Gaul -Gauldin -gaulding -Gauleiter -Gaulic -Gaulin -Gaulish -Gaulle -Gaullism -Gaullist -gauloiserie -gauls -gaulsh -Gault -gaulter -gaultherase -Gaultheria -gaultherin -gaultherine -Gaultiero -gaults -gaum -gaumed -gaumy -gauming -gaumish -gaumless -gaumlike -gaums -gaun -gaunch -Gaunt -gaunt-bellied -gaunted -gaunter -gauntest -gaunty -gauntlet -gauntleted -gauntleting -gauntlets -Gauntlett -gauntly -gauntness -gauntnesses -gauntree -gauntry -gauntries -gaup -gauping -gaupus -gaur -Gaura -gaure -Gauri -Gaurian -gauric -Gauricus -gaurie -gaurs -gaus -Gause -Gausman -Gauss -gaussage -gaussbergite -gausses -Gaussian -gaussmeter -gauster -gausterer -Gaut -Gautama -Gautea -gauteite -Gauthier -Gautier -Gautious -gauze -gauzelike -gauzes -gauzewing -gauze-winged -gauzy -gauzier -gauziest -gauzily -gauziness -Gav -gavage -gavages -gavall -Gavan -gave -gavel -gavelage -gaveled -gaveler -gavelet -gaveling -gavelkind -gavelkinder -gavelled -gaveller -gavelling -gavelman -gavelmen -gavelock -gavelocks -gavels -Gaven -gaverick -Gavette -Gavia -Gaviae -gavial -Gavialis -gavialoid -gavials -Gaviiformes -Gavin -Gavini -gavyuti -Gavle -gavot -gavots -gavotte -gavotted -gavottes -gavotting -Gavra -Gavrah -Gavriella -Gavrielle -Gavrila -Gavrilla -GAW -Gawain -gawby -gawcey -gawcie -Gawen -gawgaw -gawish -gawk -gawked -gawker -gawkers -gawkhammer -gawky -gawkier -gawkies -gawkiest -gawkihood -gawkily -gawkiness -gawking -gawkish -gawkishly -gawkishness -gawks -Gawlas -gawm -gawn -gawney -gawp -gawped -gawping -gawps -Gawra -gawsy -gawsie -gaz -gaz. -Gaza -gazabo -gazaboes -gazabos -gazangabin -Gazania -Gazankulu -gaze -gazebo -gazeboes -gazebos -gazed -gazee -gazeful -gazehound -gaze-hound -gazel -gazeless -Gazella -gazelle -gazelle-boy -gazelle-eyed -gazellelike -gazelles -gazelline -gazement -gazer -gazer-on -gazers -gazes -gazet -gazettal -gazette -gazetted -gazetteer -gazetteerage -gazetteerish -gazetteers -gazetteership -gazettes -gazetting -gazi -gazy -Gaziantep -gazing -gazingly -gazingstock -gazing-stock -Gazo -gazogene -gazogenes -gazolyte -gazometer -gazon -gazook -gazophylacium -gazoz -gazpacho -gazpachos -gazump -gazumped -gazumper -gazumps -gazzetta -Gazzo -GB -GBA -Gbari -Gbaris -GBE -GBG -GBH -GBIP -GBJ -GBM -GBS -GBT -GBZ -GC -Gc/s -GCA -g-cal -GCB -GCC -GCD -GCE -GCF -GCI -GCL -GCM -GCMG -gconv -gconvert -GCR -GCS -GCT -GCVO -GCVS -GD -Gda -Gdansk -GDB -Gde -Gdel -gdinfo -Gdynia -Gdns -GDP -GDR -GDS -gds. -GE -ge- -gea -Geadephaga -geadephagous -Geaghan -geal -Gean -Geanine -geanticlinal -geanticline -gear -Gearalt -Gearard -gearbox -gearboxes -gearcase -gearcases -gear-cutting -gear-driven -geared -Gearhart -Geary -gearing -gearings -gearksutite -gearless -gearman -gear-operated -gears -gearset -gearshift -gearshifts -gearwheel -gearwheels -gease -geason -geast -Geaster -Geat -Geatas -Geb -gebang -gebanga -Gebaur -gebbie -Gebelein -Geber -Gebhardt -Gebler -Gebrauchsmusik -gebur -gecarcinian -Gecarcinidae -Gecarcinus -geck -gecked -gecking -gecko -geckoes -geckoid -geckos -geckotian -geckotid -Geckotidae -geckotoid -gecks -GECOS -GECR -Ged -gedackt -gedact -Gedaliah -gedanite -gedanken -Gedankenexperiment -gedd -gedder -Geddes -gedds -gedeckt -gedecktwork -Gederathite -Gederite -gedrite -geds -gedunk -Gee -geebong -geebung -Geechee -geed -geegaw -geegaws -gee-gee -Geehan -gee-haw -geeing -geejee -geek -geeky -geekier -geekiest -geeks -geelbec -geelbeck -geelbek -geeldikkop -geelhout -Geelong -geepound -geepounds -Geer -geerah -Geerts -gees -geese -Geesey -geest -geests -geet -gee-throw -gee-up -Geez -Ge'ez -geezer -geezers -Gefell -Gefen -Geff -Geffner -gefilte -gefulltefish -gegenion -gegen-ion -Gegenschein -gegg -geggee -gegger -geggery -gehey -Geheimrat -Gehenna -Gehlbach -gehlenite -Gehman -Gehrig -gey -geyan -Geibel -geic -Geier -geyerite -Geiger -Geigertown -Geigy -Geikia -Geikie -geikielite -Geilich -geylies -gein -geir -geira -GEIS -geisa -GEISCO -Geisel -Geisenheimer -geyser -geyseral -geyseric -geyserine -geyserish -geyserite -geysers -Geyserville -geisha -geishas -Geismar -geison -geisotherm -geisothermal -Geiss -Geissoloma -Geissolomataceae -Geissolomataceous -Geissorhiza -geissospermin -geissospermine -Geist -Geistesgeschichte -geistlich -Geistown -Geithner -geitjie -geitonogamy -geitonogamous -Gekko -Gekkones -gekkonid -Gekkonidae -gekkonoid -Gekkota -Gel -Gela -gelable -gelada -geladas -gelandejump -gelandelaufer -gelandesprung -Gelanor -gelant -gelants -Gelasia -Gelasian -Gelasias -Gelasimus -Gelasius -gelastic -Gelastocoridae -gelate -gelated -gelates -gelati -gelatia -gelatification -gelatigenous -gelatin -gelatinate -gelatinated -gelatinating -gelatination -gelatin-coated -gelatine -gelatined -gelatines -gelating -gelatiniferous -gelatinify -gelatiniform -gelatinigerous -gelatinisation -gelatinise -gelatinised -gelatiniser -gelatinising -gelatinity -gelatinizability -gelatinizable -gelatinization -gelatinize -gelatinized -gelatinizer -gelatinizing -gelatino- -gelatinobromide -gelatinochloride -gelatinoid -gelatinotype -gelatinous -gelatinously -gelatinousness -gelatins -gelation -gelations -gelato -gelatos -gelatose -Gelb -geld -geldability -geldable -geldant -gelded -Geldens -gelder -Gelderland -gelders -geldesprung -gelding -geldings -gelds -Gelechia -gelechiid -Gelechiidae -Gelee -geleem -gelees -Gelene -Gelett -Gelfomino -Gelhar -Gelya -Gelibolu -gelid -Gelidiaceae -gelidity -gelidities -Gelidium -gelidly -gelidness -gelignite -gelilah -gelinotte -gell -gellant -gellants -gelled -Geller -Gellert -gelly -Gelligaer -gelling -Gellman -Gelman -gelndesprung -gelofer -gelofre -gelogenic -gelong -Gelonus -geloscopy -gelose -gelosie -gelosin -gelosine -gelotherapy -gelotometer -gelotoscopy -gelototherapy -gels -gel's -gelsemia -gelsemic -gelsemin -gelsemine -gelseminic -gelseminine -Gelsemium -gelsemiumia -gelsemiums -Gelsenkirchen -gelt -gelts -Gelugpa -GEM -Gemara -Gemaric -Gemarist -gematria -gematrical -gematriot -gemauve -gem-bearing -gem-bedewed -gem-bedizened -gem-bespangled -gem-bright -gem-cutting -gem-decked -gemeinde -gemeinschaft -gemeinschaften -gemel -gemeled -gemelled -gemellion -gemellione -gemellus -gemels -gem-engraving -gem-faced -gem-fruit -gem-grinding -Gemina -geminal -geminally -geminate -geminated -geminately -geminates -geminating -gemination -geminations -geminative -Gemini -Geminian -Geminiani -Geminid -geminiflorous -geminiform -geminis -Geminius -geminorum -geminous -Geminus -Gemitores -gemitorial -gemless -gemlich -gemlike -Gemma -gemmaceous -gemmae -gemman -gemmary -gemmate -gemmated -gemmates -gemmating -gemmation -gemmative -gemmed -gemmel -Gemmell -gemmeous -gemmer -gemmery -gemmy -gemmier -gemmiest -gemmiferous -gemmiferousness -gemmification -gemmiform -gemmily -gemminess -gemming -Gemmingia -gemmipara -gemmipares -gemmiparity -gemmiparous -gemmiparously -gemmoid -gemmology -gemmological -gemmologist -gemmologists -gemmula -gemmulation -gemmule -gemmules -gemmuliferous -Gemoets -gemology -gemological -gemologies -gemologist -gemologists -gemonies -gemot -gemote -gemotes -gemots -Gemperle -gempylid -GEMS -gem's -gemsbok -gemsboks -gemsbuck -gemsbucks -gemse -gemses -gem-set -gemshorn -gem-spangled -gemstone -gemstones -gemuetlich -Gemuetlichkeit -gemul -gemuti -gemutlich -Gemutlichkeit -gemwork -gen -gen- -Gen. -Gena -genae -genal -genapp -genappe -genapped -genapper -genapping -genarch -genarcha -genarchaship -genarchship -Genaro -gendarme -gendarmery -gendarmerie -gendarmes -gender -gendered -genderer -gendering -genderless -genders -gender's -gene -geneal -geneal. -genealogy -genealogic -genealogical -genealogically -genealogies -genealogist -genealogists -genealogize -genealogizer -genear -genearch -geneat -Geneautry -genecology -genecologic -genecological -genecologically -genecologist -genecor -Geneen -Geneina -geneki -geneology -geneological -geneologically -geneologist -geneologists -genep -genepi -genera -generability -generable -generableness -general -generalate -generalcy -generalcies -generale -generalia -Generalidad -generalific -generalisable -generalisation -generalise -generalised -generaliser -generalising -generalism -generalissima -generalissimo -generalissimos -generalist -generalistic -generalists -generalist's -generaliter -generality -generalities -generalizability -generalizable -generalization -generalizations -generalization's -generalize -generalizeable -generalized -generalizer -generalizers -generalizes -generalizing -generall -generally -generalness -general-purpose -generals -generalship -generalships -generalty -generant -generate -generated -generater -generates -generating -generation -generational -generationism -generations -generative -generatively -generativeness -generator -generators -generator's -generatrices -generatrix -generic -generical -generically -genericalness -genericness -generics -generification -generis -generosity -generosities -generosity's -generous -generous-hearted -generously -generousness -generousnesses -genes -gene's -Genesa -Genesco -Genesee -Geneseo -geneserin -geneserine -geneses -Genesia -Genesiac -Genesiacal -genesial -genesic -genesiology -genesis -Genesitic -genesiurgic -gene-string -Genet -genethliac -genethliacal -genethliacally -genethliacism -genethliacon -genethliacs -genethlialogy -genethlialogic -genethlialogical -genethliatic -genethlic -genetic -genetical -genetically -geneticism -geneticist -geneticists -genetics -genetika -Genetyllis -genetmoil -genetoid -genetor -genetous -Genetrix -genets -Genetta -genette -genettes -Geneura -Geneva -Geneva-cross -Genevan -genevas -Geneve -Genevese -Genevi -Genevieve -Genevois -genevoise -Genevra -Genf -Genfersee -genghis -Gengkow -geny -Genia -genial -geniality -genialities -genialize -genially -genialness -genian -genyantrum -genic -genically -genicular -geniculate -geniculated -geniculately -geniculation -geniculum -Genie -genies -genii -genin -genio -genio- -genioglossal -genioglossi -genioglossus -geniohyoglossal -geniohyoglossus -geniohyoid -geniolatry -genion -Genyophrynidae -genioplasty -genyoplasty -genip -Genipa -genipap -genipapada -genipaps -genyplasty -genips -genys -genisaro -Genisia -Genista -genistein -genistin -genit -genit. -genital -genitalia -genitalial -genitalic -genitally -genitals -geniting -genitival -genitivally -genitive -genitives -genito- -genitocrural -genitofemoral -genitor -genitory -genitorial -genitors -genitourinary -Genitrix -geniture -genitures -genius -geniuses -genius's -genizah -genizero -Genk -Genl -Genl. -Genna -Gennaro -Gennevilliers -Genni -Genny -Gennie -Gennifer -Geno -geno- -Genoa -genoas -genoblast -genoblastic -genocidal -genocide -genocides -Genoese -genoise -genoises -Genolla -genom -genome -genomes -genomic -genoms -genonema -genophobia -genos -genospecies -genotype -genotypes -genotypic -genotypical -genotypically -genotypicity -genouillere -genous -Genova -Genovera -Genovese -Genoveva -genovino -genre -genres -genre's -genro -genros -gens -Gensan -genseng -gensengs -Genseric -Gensler -Gensmer -genson -Gent -gentamicin -genteel -genteeler -genteelest -genteelish -genteelism -genteelize -genteelly -genteelness -Gentes -genthite -genty -gentian -Gentiana -Gentianaceae -gentianaceous -gentianal -Gentianales -gentianella -gentianic -gentianin -gentianose -gentians -gentianwort -gentiin -gentil -Gentile -gentiledom -gentile-falcon -gentiles -gentilesse -gentilhomme -gentilic -Gentilis -gentilish -gentilism -gentility -gentilitial -gentilitian -gentilities -gentilitious -gentilization -gentilize -gentill- -Gentille -gentiobiose -gentiopicrin -gentisate -gentisein -gentisic -gentisin -gentium -gentle -gentle-born -gentle-bred -gentle-browed -gentled -gentle-eyed -gentlefolk -gentlefolks -gentle-handed -gentle-handedly -gentle-handedness -gentlehearted -gentleheartedly -gentleheartedness -gentlehood -gentle-looking -gentleman -gentleman-adventurer -gentleman-agent -gentleman-at-arms -gentleman-beggar -gentleman-cadet -gentleman-commoner -gentleman-covenanter -gentleman-dependent -gentleman-digger -gentleman-farmer -gentlemanhood -gentlemanism -gentlemanize -gentleman-jailer -gentleman-jockey -gentleman-lackey -gentlemanly -gentlemanlike -gentlemanlikeness -gentlemanliness -gentleman-lodger -gentleman-murderer -gentle-mannered -gentle-manneredly -gentle-manneredness -gentleman-pensioner -gentleman-porter -gentleman-priest -gentleman-ranker -gentleman-recusant -gentleman-rider -gentleman-scholar -gentleman-sewer -gentlemanship -gentleman-tradesman -gentleman-usher -gentleman-vagabond -gentleman-volunteer -gentleman-waiter -gentlemen -gentlemen-at-arms -gentlemen-commoners -gentlemen-farmers -gentlemen-pensioners -gentlemens -gentle-minded -gentle-mindedly -gentle-mindedness -gentlemouthed -gentle-natured -gentle-naturedly -gentle-naturedness -gentleness -gentlenesses -gentlepeople -gentler -gentles -gentleship -gentle-spoken -gentle-spokenly -gentle-spokenness -gentlest -gentle-voiced -gentle-voicedly -gentle-voicedness -gentlewoman -gentlewomanhood -gentlewomanish -gentlewomanly -gentlewomanlike -gentlewomanliness -gentlewomen -gently -gentling -gentman -Gentoo -Gentoos -Gentry -gentrice -gentrices -gentries -gentrify -gentrification -Gentryville -gents -genu -genua -genual -Genucius -genuclast -genuflect -genuflected -genuflecting -genuflection -genuflections -genuflector -genuflectory -genuflects -genuflex -genuflexion -genuflexuous -genuine -genuinely -genuineness -genuinenesses -genupectoral -genus -genuses -Genvieve -GEO -geo- -geoaesthesia -geoagronomic -geobiology -geobiologic -geobiont -geobios -geoblast -geobotany -geobotanic -geobotanical -geobotanically -geobotanist -geocarpic -geocentric -geocentrical -geocentrically -geocentricism -geocerite -geochemical -geochemically -geochemist -geochemistry -geochemists -geochrony -geochronic -geochronology -geochronologic -geochronological -geochronologically -geochronologist -geochronometry -geochronometric -geocyclic -geocline -Geococcyx -geocoronium -geocratic -geocronite -geod -geod. -geodaesia -geodal -geode -geodes -geodesy -geodesia -geodesic -geodesical -geodesics -geodesies -geodesist -geodesists -geodete -geodetic -geodetical -geodetically -geodetician -geodetics -geodiatropism -geodic -geodiferous -geodynamic -geodynamical -geodynamicist -geodynamics -geodist -geoduck -geoducks -geoemtry -geoethnic -Geof -Geoff -Geoffrey -Geoffry -geoffroyin -geoffroyine -geoform -geog -geog. -geogen -geogenesis -geogenetic -geogeny -geogenic -geogenous -geoglyphic -Geoglossaceae -Geoglossum -geognosy -geognosies -geognosis -geognosist -geognost -geognostic -geognostical -geognostically -geogony -geogonic -geogonical -geographer -geographers -geography -geographic -geographical -geographically -geographics -geographies -geographism -geographize -geographized -geohydrology -geohydrologic -geohydrologist -geoid -geoidal -geoids -geoid-spheroid -geoisotherm -geol -geol. -geolatry -GeolE -geolinguistics -geologer -geologers -geology -geologian -geologic -geological -geologically -geologician -geologies -geologise -geologised -geologising -geologist -geologists -geologist's -geologize -geologized -geologizing -geom -geom. -geomagnetic -geomagnetically -geomagnetician -geomagnetics -geomagnetism -geomagnetist -geomaly -geomalic -geomalism -geomance -geomancer -geomancy -geomancies -geomant -geomantic -geomantical -geomantically -geomechanics -geomedical -geomedicine -geometdecrne -geometer -geometers -geometry -geometric -geometrical -geometrically -geometrician -geometricians -geometricism -geometricist -geometricize -geometrid -Geometridae -geometries -geometriform -Geometrina -geometrine -geometrise -geometrised -geometrising -geometrize -geometrized -geometrizing -geometroid -Geometroidea -geomyid -Geomyidae -Geomys -geomoroi -geomorphy -geomorphic -geomorphist -geomorphogeny -geomorphogenic -geomorphogenist -geomorphology -geomorphologic -geomorphological -geomorphologically -geomorphologist -Geon -geonavigation -geo-navigation -geonegative -Geonic -geonyctinastic -geonyctitropic -Geonim -Geonoma -geoparallelotropic -geophagy -geophagia -geophagies -geophagism -geophagist -geophagous -Geophila -geophilid -Geophilidae -geophilous -Geophilus -geophysical -geophysically -geophysicist -geophysicists -geophysics -geophyte -geophytes -geophytic -Geophone -geophones -geoplagiotropism -Geoplana -Geoplanidae -geopolar -geopolitic -geopolitical -geopolitically -geopolitician -geopolitics -Geopolitik -geopolitist -geopony -geoponic -geoponical -geoponics -geopositive -geopotential -geoprobe -Geoprumnon -georama -Georas -Geordie -Georg -Georgadjis -Georgann -George -Georgeanna -Georgeanne -Georged -Georgemas -Georgena -Georgene -Georges -Georgesman -Georgesmen -Georgeta -Georgetown -Georgetta -Georgette -Georgi -Georgy -Georgia -georgiadesite -Georgian -Georgiana -Georgianna -Georgianne -georgians -georgic -georgical -georgics -Georgie -Georgina -Georgine -georgium -Georgius -Georglana -geoscience -geoscientist -geoscientists -geoscopy -geoscopic -geoselenic -geosid -geoside -geosynchronous -geosynclinal -geosyncline -geosynclines -geosphere -Geospiza -geostatic -geostatics -geostationary -geostrategy -geostrategic -geostrategist -geostrophic -geostrophically -geotactic -geotactically -geotaxes -geotaxy -geotaxis -geotechnic -geotechnics -geotectology -geotectonic -geotectonically -geotectonics -Geoteuthis -geotherm -geothermal -geothermally -geothermic -geothermometer -Geothlypis -geoty -geotic -geotical -geotilla -geotonic -geotonus -geotropy -geotropic -geotropically -geotropism -Gepeoo -Gephyrea -gephyrean -gephyrocercal -gephyrocercy -gephyrophobia -Gepidae -gepoun -Gepp -Ger -Ger. -Gera -geraera -gerah -gerahs -Geraint -Gerald -Geralda -Geraldina -Geraldine -Geraldton -Geraniaceae -geraniaceous -geranial -Geraniales -geranials -geranic -geranyl -geranin -geraniol -geraniols -Geranium -geraniums -geranomorph -Geranomorphae -geranomorphic -Gerar -gerara -Gerard -gerardia -gerardias -Gerardo -Gerasene -gerastian -gerate -gerated -gerately -geraty -geratic -geratology -geratologic -geratologous -Geraud -gerb -Gerbatka -gerbe -Gerber -Gerbera -gerberas -Gerberia -gerbil -gerbille -gerbilles -Gerbillinae -Gerbillus -gerbils -gerbo -Gerbold -gercrow -Gerd -Gerda -Gerdeen -Gerdi -Gerdy -Gerdie -Gerdye -Gere -gereagle -gerefa -Gerek -Gereld -gerenda -gerendum -gerent -gerents -gerenuk -gerenuks -Gereron -gerfalcon -Gerfen -gerful -Gerge -Gerger -Gerhan -Gerhard -Gerhardine -Gerhardt -gerhardtite -Gerhardus -Gerhart -Geri -Gery -Gerianna -Gerianne -geriatric -geriatrician -geriatrics -geriatrist -Gericault -Gerick -Gerygone -Gerik -gerim -Gering -Geryon -Geryoneo -Geryones -Geryonia -geryonid -Geryonidae -Geryoniidae -gerip -Gerita -Gerius -gerkin -Gerkman -Gerlac -Gerlach -Gerlachovka -Gerladina -gerland -Gerlaw -germ -Germain -Germaine -Germayne -germal -German -Germana -German-american -German-built -germander -germane -germanely -germaneness -German-english -Germanesque -German-french -Germanhood -German-hungarian -Germany -Germania -Germanic -Germanical -Germanically -Germanics -germanies -Germanify -Germanification -germanyl -germanious -Germanisation -Germanise -Germanised -Germaniser -Germanish -Germanising -Germanism -Germanist -Germanistic -German-italian -germanite -Germanity -germanium -germaniums -Germanization -Germanize -Germanized -Germanizer -Germanizing -German-jewish -Germanly -German-made -Germann -Germanness -Germano -germano- -Germanocentric -Germanomania -Germanomaniac -Germanophile -Germanophilist -Germanophobe -Germanophobia -Germanophobic -Germanophobist -germanous -German-owned -German-palatine -germans -german's -German-speaking -Germansville -German-swiss -Germanton -Germantown -germarium -Germaun -germen -germens -germ-forming -germfree -germy -germicidal -germicide -germicides -germiculture -germier -germiest -germifuge -germigene -germigenous -Germin -germina -germinability -germinable -Germinal -germinally -germinance -germinancy -germinant -germinate -germinated -germinates -germinating -germination -germinational -germinations -germinative -germinatively -germinator -germing -germiniparous -germinogony -germiparity -germiparous -Germiston -germless -germlike -germling -germon -germproof -germs -germ's -germule -gernative -Gernhard -gernitz -gerocomy -gerocomia -gerocomical -geroderma -gerodermia -gerodontia -gerodontic -gerodontics -gerodontology -Gerome -geromorphism -Gerona -Geronimo -Geronomite -geront -geront- -gerontal -gerontes -gerontic -gerontine -gerontism -geronto -geronto- -gerontocracy -gerontocracies -gerontocrat -gerontocratic -gerontogeous -gerontology -gerontologic -gerontological -gerontologies -gerontologist -gerontologists -gerontomorphosis -gerontophilia -gerontotherapy -gerontotherapies -gerontoxon -geropiga -gerous -Gerousia -Gerrald -Gerrard -Gerrardstown -Gerres -gerrhosaurid -Gerrhosauridae -Gerri -Gerry -Gerridae -Gerrie -Gerrilee -gerrymander -gerrymandered -gerrymanderer -gerrymandering -gerrymanders -Gerrit -Gers -Gersam -gersdorffite -Gersham -Gershom -Gershon -Gershonite -Gershwin -Gerson -Gerstein -Gerstner -gersum -Gert -Gerta -Gerti -Gerty -Gertie -Gerton -Gertrud -Gertruda -Gertrude -Gertrudis -gerund -gerundial -gerundially -gerundival -gerundive -gerundively -gerunds -Gerusia -Gervais -gervao -Gervas -Gervase -Gerzean -Ges -Gesan -Gesell -Gesellschaft -gesellschaften -Geshurites -gesith -gesithcund -gesithcundman -gesling -Gesner -Gesnera -Gesneraceae -gesneraceous -gesnerad -Gesneria -Gesneriaceae -gesneriaceous -Gesnerian -gesning -gess -gessamine -Gessen -gesseron -Gessner -gesso -gessoed -gessoes -gest -gestae -Gestalt -gestalten -gestalter -gestaltist -gestalts -gestant -Gestapo -gestapos -gestate -gestated -gestates -gestating -gestation -gestational -gestations -gestative -gestatory -gestatorial -gestatorium -geste -gested -gesten -gestening -gester -gestes -gestic -gestical -gesticulacious -gesticulant -gesticular -gesticularious -gesticulate -gesticulated -gesticulates -gesticulating -gesticulation -gesticulations -gesticulative -gesticulatively -gesticulator -gesticulatory -gestio -gestion -gestning -gestonie -gestor -gests -gestura -gestural -gesture -gestured -gestureless -gesturer -gesturers -gestures -gesturing -gesturist -Gesualdo -gesundheit -geswarp -ges-warp -get -geta -getable -Getae -getah -getas -getatability -get-at-ability -getatable -get-at-able -getatableness -get-at-ableness -getaway -get-away -getaways -getfd -Geth -gether -Gethsemane -Gethsemanic -Getic -getid -getling -getmesost -getmjlkost -get-off -get-out -getpenny -Getraer -gets -getspa -getspace -Getsul -gettable -gettableness -Getter -gettered -gettering -getters -getter's -Getty -getting -Gettings -Gettysburg -get-together -get-tough -getup -get-up -get-up-and-get -get-up-and-go -getups -Getzville -geulah -Geulincx -Geullah -Geum -geumatophobia -geums -GeV -Gevaert -gewgaw -gewgawed -gewgawy -gewgawish -gewgawry -gewgaws -Gewirtz -Gewrztraminer -Gex -gez -Gezer -gezerah -Gezira -GFCI -G-flat -GFTU -GG -GGP -ggr -GH -GHA -ghaffir -ghafir -ghain -ghaist -ghalva -Ghan -Ghana -Ghanaian -ghanaians -Ghanian -Ghardaia -gharial -gharnao -gharri -gharry -gharries -gharris -gharry-wallah -Ghassan -Ghassanid -ghast -ghastful -ghastfully -ghastfulness -ghastily -ghastly -ghastlier -ghastliest -ghastlily -ghastliness -ghat -Ghats -ghatti -ghatwal -ghatwazi -ghaut -ghauts -ghawazee -ghawazi -ghazal -Ghazali -ghazel -ghazi -ghazies -ghazis -ghazism -Ghaznevid -Ghazzah -Ghazzali -ghbor -Gheber -ghebeta -Ghedda -ghee -Gheen -Gheens -ghees -Gheg -Ghegish -Ghelderode -gheleem -Ghent -ghenting -Gheorghe -gherao -gheraoed -gheraoes -gheraoing -Gherardi -Gherardo -gherkin -gherkins -Gherlein -ghess -ghetchoo -ghetti -ghetto -ghetto-dwellers -ghettoed -ghettoes -ghettoing -ghettoization -ghettoize -ghettoized -ghettoizes -ghettoizing -ghettos -ghi -Ghibelline -Ghibellinism -Ghiberti -ghibli -ghiblis -ghyll -ghillie -ghillies -ghylls -Ghilzai -Ghiordes -Ghirlandaio -Ghirlandajo -ghis -Ghiselin -ghizite -ghole -ghoom -ghorkhar -ghost -ghostcraft -ghostdom -ghosted -ghoster -ghostess -ghost-fearing -ghost-filled -ghostfish -ghostfishes -ghostflower -ghost-haunted -ghosthood -ghosty -ghostier -ghostiest -ghostified -ghostily -ghosting -ghostish -ghostism -ghostland -ghostless -ghostlet -ghostly -ghostlier -ghostliest -ghostlify -ghostlike -ghostlikeness -ghostlily -ghostliness -ghostmonger -ghostology -ghost-ridden -Ghosts -ghostship -ghostweed -ghost-weed -ghostwrite -ghostwriter -ghost-writer -ghostwriters -ghostwrites -ghostwriting -ghostwritten -ghostwrote -ghoul -ghoulery -ghoulie -ghoulish -ghoulishly -ghoulishness -ghouls -GHQ -GHRS -ghrush -ghurry -Ghuz -GHZ -GI -Gy -gy- -gi. -Giacamo -Giacinta -Giacobo -Giacometti -Giacomo -Giacomuzzo -Giacopo -Giai -Giaimo -Gyaing -gyal -giallolino -giambeux -Giamo -Gian -Giana -Gyani -Gianina -Gianna -Gianni -Giannini -Giansar -giant -giantesque -giantess -giantesses -gianthood -giantish -giantism -giantisms -giantize -giantkind -giantly -giantlike -giant-like -giantlikeness -giantry -giants -giant's -giantship -giantsize -giant-sized -giaour -giaours -Giardia -giardiasis -Giarla -giarra -giarre -Gyarung -Gyas -gyascutus -Gyasi -gyassa -Gyatt -Giauque -Giavani -Gib -gibaro -Gibb -gibbals -gibbar -gibbartas -gibbed -Gibbeon -gibber -gibbered -Gibberella -gibberellin -gibbergunyah -gibbering -gibberish -gibberishes -gibberose -gibberosity -gibbers -gibbert -gibbet -gibbeted -gibbeting -gibbets -gibbetted -gibbetting -gibbetwise -Gibbi -Gibby -Gibbie -gibbier -gibbing -gibbled -gibblegabble -gibble-gabble -gibblegabbler -gibble-gabbler -gibblegable -gibbles -gibbol -Gibbon -Gibbons -Gibbonsville -gibbose -gibbosely -gibboseness -gibbosity -gibbosities -gibboso- -gibbous -gibbously -gibbousness -Gibbs -Gibbsboro -gibbsite -gibbsites -Gibbstown -gibbus -gib-cat -Gibe -gybe -gibed -gybed -gibel -gibelite -Gibeon -Gibeonite -giber -gyber -gibers -Gibert -gibes -gybes -gibetting -gib-head -gibier -Gibil -gibing -gybing -gibingly -gibleh -giblet -giblet-check -giblet-checked -giblet-cheek -giblets -gibli -giboia -Giboulee -Gibraltar -Gibran -Gibrian -gibs -Gibsland -Gibson -Gibsonburg -Gibsonia -gibsons -Gibsonton -Gibsonville -gibstaff -Gibun -gibus -gibuses -GID -GI'd -giddap -giddea -giddy -giddyap -giddyberry -giddybrain -giddy-brained -giddy-drunk -giddied -giddier -giddies -giddiest -giddify -giddy-go-round -giddyhead -giddy-headed -giddying -giddyish -giddily -giddiness -giddinesses -Giddings -giddy-paced -giddypate -giddy-pated -giddyup -giddy-witted -Gide -Gideon -Gideonite -gidgea -gidgee -gidyea -gidjee -gids -gie -gye -gieaway -gieaways -gied -Giefer -gieing -Gielgud -gien -Gienah -gier-eagle -Gierek -gierfalcon -Gies -Gyes -Giesecke -gieseckite -Gieseking -giesel -Giess -Giessen -Giesser -GIF -gifblaar -Giff -Giffard -Giffer -Gifferd -giffgaff -giff-gaff -Giffy -Giffie -Gifford -Gifola -gift -giftbook -gifted -giftedly -giftedness -giftie -gifting -giftless -giftlike -giftling -gift-rope -gifts -gifture -giftware -giftwrap -gift-wrap -gift-wrapped -gift-wrapper -giftwrapping -gift-wrapping -gift-wrapt -Gifu -gig -giga -giga- -gigabit -gigabyte -gigabytes -gigabits -gigacycle -gigadoid -Gygaea -gigahertz -gigahertzes -gigaherz -gigamaree -gigameter -gigant -gigant- -gigantal -Gigante -gigantean -Gigantes -gigantesque -gigantic -gigantical -gigantically -giganticidal -giganticide -giganticness -gigantine -gigantism -gigantize -gigantoblast -gigantocyte -gigantolite -gigantology -gigantological -gigantomachy -gigantomachia -Gigantopithecus -Gigantosaurus -Gigantostraca -gigantostracan -gigantostracous -Gigartina -Gigartinaceae -gigartinaceous -Gigartinales -gigas -gigasecond -gigaton -gigatons -gigavolt -gigawatt -gigawatts -gigback -Gyge -gigelira -gigeria -gigerium -Gyges -gigful -gigge -gigged -gigger -gigget -gigging -giggish -giggit -giggle -giggled -giggledom -gigglement -giggler -gigglers -giggles -gigglesome -giggly -gigglier -giggliest -giggling -gigglingly -gigglish -gighe -Gigi -Gygis -gig-lamp -Gigle -giglet -giglets -Gigli -gigliato -Giglio -giglot -giglots -gigman -gigmaness -gigmanhood -gigmania -gigmanic -gigmanically -gigmanism -gigmanity -gig-mill -Gignac -gignate -gignitive -GIGO -gigolo -gigolos -gigot -gigots -gigs -gigsman -gigsmen -gigster -gigtree -gigue -Giguere -gigues -gigunu -giher -Gyimah -GI'ing -giinwale -Gij -Gijon -Gil -Gila -Gilaki -Gilba -Gilbart -Gilbert -Gilberta -gilbertage -Gilberte -Gilbertese -Gilbertian -Gilbertianism -Gilbertina -Gilbertine -gilbertite -Gilberto -Gilberton -Gilbertown -Gilberts -Gilbertson -Gilbertsville -Gilbertville -Gilby -Gilbye -Gilboa -Gilburt -Gilchrist -Gilcrest -gild -Gilda -gildable -Gildas -Gildea -gilded -gildedness -gilden -Gylden -Gilder -gilders -Gildford -gildhall -gildhalls -gilding -gildings -gilds -gildship -gildsman -gildsmen -Gildus -Gile -gyle -Gilead -Gileadite -gyle-fat -Gilels -Gilemette -gilenyer -gilenyie -Gileno -Giles -gilet -Gilford -gilgai -Gilgal -gilgames -Gilgamesh -Gilges -gilgie -gilguy -gilgul -gilgulim -Gilia -Giliak -Giliana -Giliane -gilim -Gylys -Gill -gill-ale -Gillan -gillar -gillaroo -gillbird -gill-book -gill-cup -Gillead -gilled -Gilley -Gillenia -Gilleod -giller -gillers -Gilles -Gillespie -Gillett -Gilletta -Gillette -gillflirt -gill-flirt -Gillham -gillhooter -Gilli -Gilly -Gilliam -Gillian -Gillie -gillied -gillies -Gilliette -gillie-wetfoot -gillie-whitefoot -gilliflirt -gilliflower -gillyflower -Gilligan -gillygaupus -gillying -gilling -Gillingham -gillion -gilliver -gill-less -gill-like -Gillman -Gillmore -gillnet -gillnets -gillnetted -gill-netter -gillnetting -gillot -gillotage -gillotype -gill-over-the-ground -Gillray -gill-run -gills -gill's -gill-shaped -gillstoup -Gillsville -Gilman -Gilmanton -Gilmer -Gilmore -Gilmour -gilo -Gilolo -gilour -gilpey -gilpy -Gilpin -gilravage -gilravager -Gilroy -gils -gilse -Gilson -Gilsonite -Gilsum -gilt -giltcup -gilt-edge -gilt-edged -gilten -gilt-handled -gilthead -gilt-head -gilt-headed -giltheads -gilty -gilt-knobbed -Giltner -gilt-robed -gilts -gilttail -gilt-tail -Giltzow -Gilud -Gilus -gilver -gim -gym -gimbal -gimbaled -gimbaling -gimbaljawed -gimballed -gimballing -gimbals -gimbawawed -Gimbel -gimberjawed -Gimble -gimblet -gimbri -gimcrack -gimcrackery -gimcracky -gimcrackiness -gimcracks -gimel -gymel -gimels -Gimirrai -gymkhana -gymkhanas -gimlet -gimleted -gimleteyed -gimlet-eyed -gimlety -gimleting -gimlets -gymm- -gimmal -gymmal -gimmaled -gimmals -gimme -gimmer -gimmeringly -gimmerpet -gimmick -gimmicked -gimmickery -gimmicky -gimmicking -gimmickry -gimmicks -gimmick's -gimmie -gimmies -gimmor -Gymnadenia -Gymnadeniopsis -Gymnanthes -gymnanthous -Gymnarchidae -Gymnarchus -gymnasia -gymnasial -gymnasiarch -gymnasiarchy -gymnasiast -gymnasic -gymnasisia -gymnasisiums -Gymnasium -gymnasiums -gymnasium's -gymnast -gymnastic -gymnastical -gymnastically -gymnastics -gymnasts -gymnast's -gymnemic -gymnetrous -gymnic -gymnical -gymnics -gymnite -gymno- -Gymnoblastea -gymnoblastic -Gymnocalycium -gymnocarpic -gymnocarpous -Gymnocerata -gymnoceratous -gymnocidium -Gymnocladus -Gymnoconia -Gymnoderinae -Gymnodiniaceae -gymnodiniaceous -Gymnodiniidae -Gymnodinium -gymnodont -Gymnodontes -gymnogen -gymnogene -gymnogenous -gymnogynous -Gymnogyps -Gymnoglossa -gymnoglossate -Gymnolaema -Gymnolaemata -gymnolaematous -Gymnonoti -Gymnopaedes -gymnopaedic -gymnophiona -gymnophobia -gymnoplast -Gymnorhina -gymnorhinal -Gymnorhininae -gymnosoph -gymnosophy -gymnosophical -gymnosophist -gymnosperm -Gymnospermae -gymnospermal -gymnospermy -gymnospermic -gymnospermism -Gymnospermous -gymnosperms -Gymnosporangium -gymnospore -gymnosporous -Gymnostomata -Gymnostomina -gymnostomous -Gymnothorax -gymnotid -Gymnotidae -Gymnotoka -gymnotokous -Gymnotus -Gymnura -gymnure -Gymnurinae -gymnurine -gimp -gimped -Gimpel -gimper -gimpy -gympie -gimpier -gimpiest -gimping -gimps -gyms -gymsia -gymslip -GIN -gyn -gyn- -Gina -gynaecea -gynaeceum -gynaecia -gynaecian -gynaecic -gynaecium -gynaeco- -gynaecocoenic -gynaecocracy -gynaecocracies -gynaecocrat -gynaecocratic -gynaecoid -gynaecol -gynaecology -gynaecologic -gynaecological -gynaecologist -gynaecomasty -gynaecomastia -gynaecomorphous -gynaeconitis -Gynaecothoenas -gynaeocracy -gynaeolater -gynaeolatry -gynander -gynandrarchy -gynandrarchic -gynandry -Gynandria -gynandrian -gynandries -gynandrism -gynandro- -gynandroid -gynandromorph -gynandromorphy -gynandromorphic -gynandromorphism -gynandromorphous -gynandrophore -gynandrosporous -gynandrous -gynantherous -gynarchy -gynarchic -gynarchies -Ginder -Gine -gyne -gynec- -gyneccia -gynecia -gynecic -gynecidal -gynecide -gynecium -gyneco- -gynecocentric -gynecocracy -gynecocracies -gynecocrat -gynecocratic -gynecocratical -gynecoid -gynecol -gynecolatry -gynecology -gynecologic -gynecological -gynecologies -gynecologist -gynecologists -gynecomania -gynecomaniac -gynecomaniacal -gynecomasty -gynecomastia -gynecomastism -gynecomazia -gynecomorphous -gyneconitis -gynecopathy -gynecopathic -gynecophore -gynecophoric -gynecophorous -gynecotelic -gynecratic -Ginelle -gyneocracy -gyneolater -gyneolatry -ginep -gynephobia -Gynergen -Gynerium -ginete -gynethusia -gynetype -Ginevra -ging -gingal -gingall -gingalls -gingals -gingeley -gingeleys -gingeli -gingely -gingelies -gingelis -gingelli -gingelly -gingellies -Ginger -gingerade -ginger-beer -ginger-beery -gingerberry -gingerbread -gingerbready -gingerbreads -ginger-color -ginger-colored -gingered -ginger-faced -ginger-hackled -ginger-haired -gingery -gingerin -gingering -gingerleaf -gingerly -gingerline -gingerliness -gingerness -gingernut -gingerol -gingerous -ginger-pop -ginger-red -gingerroot -gingers -gingersnap -gingersnaps -gingerspice -gingerwork -gingerwort -gingham -ginghamed -ginghams -gingili -gingilis -gingilli -gingiv- -gingiva -gingivae -gingival -gingivalgia -gingivectomy -gingivitis -gingivitises -gingivoglossitis -gingivolabial -gingko -gingkoes -gingle -gingles -ginglyform -ginglymi -ginglymoarthrodia -ginglymoarthrodial -Ginglymodi -ginglymodian -ginglymoid -ginglymoidal -Ginglymostoma -ginglymostomoid -ginglymus -ginglyni -ginglmi -Gingras -ginhound -ginhouse -gyny -gyniatry -gyniatrics -gyniatries -gynic -gynics -gyniolatry -gink -Ginkgo -Ginkgoaceae -ginkgoaceous -Ginkgoales -ginkgoes -ginkgos -ginks -ginmill -gin-mill -Ginn -ginned -ginney -ginnel -ginner -ginnery -ginneries -ginners -ginnet -Ginni -Ginny -ginny-carriage -Ginnie -ginnier -ginniest -Ginnifer -ginning -ginnings -ginnle -Ginnungagap -Gino -gyno- -gynobase -gynobaseous -gynobasic -gynocardia -gynocardic -gynocracy -gynocratic -gynodioecious -gynodioeciously -gynodioecism -gynoecia -gynoecium -gynoeciumcia -gynogenesis -gynogenetic -gynomonecious -gynomonoecious -gynomonoeciously -gynomonoecism -gynopara -gynophagite -gynophore -gynophoric -ginorite -gynosporangium -gynospore -gynostegia -gynostegigia -gynostegium -gynostemia -gynostemium -gynostemiumia -gynous -gin-palace -gin-run -gins -gin's -gin-saw -Ginsberg -Ginsburg -ginseng -ginsengs -gin-shop -gin-sling -Gintz -Gynura -ginward -Ginza -Ginzberg -Ginzburg -ginzo -ginzoes -Gio -giobertite -Gioconda -giocoso -giojoso -gyokuro -Giono -Gyor -Giordano -Giorgi -Giorgia -Giorgio -Giorgione -giornata -giornatate -Giottesque -Giotto -Giovanna -Giovanni -Giovannida -gip -gyp -Gypaetus -gype -gyplure -gyplures -gipon -gipons -Gyppaz -gipped -gypped -gipper -gypper -gyppery -gippers -gyppers -Gippy -gipping -gypping -gippo -Gyppo -Gipps -Gippsland -gyp-room -gips -Gyps -gipseian -gypseian -gypseous -gipser -Gipsy -Gypsy -gipsydom -gypsydom -gypsydoms -Gypsie -gipsied -gypsied -Gipsies -Gypsies -gipsyesque -gypsyesque -gypsiferous -gipsyfy -gypsyfy -gipsyhead -gypsyhead -gipsyhood -gypsyhood -gipsying -gypsying -gipsyish -gypsyish -gipsyism -gypsyism -gypsyisms -gipsylike -gypsylike -gypsy-like -gypsine -gipsiologist -gypsiologist -gipsire -gipsyry -gypsyry -gipsy's -gypsy's -gypsite -gipsyweed -gypsyweed -gypsywise -gipsywort -gypsywort -gypsography -gipsology -gypsology -gypsologist -Gipson -Gypsophila -gypsophily -gypsophilous -gypsoplast -gypsous -gypster -gypsters -gypsum -gypsumed -gypsuming -gypsums -gyr- -Gyracanthus -Girafano -Giraffa -giraffe -giraffes -giraffe's -giraffesque -Giraffidae -giraffine -giraffish -giraffoid -gyral -Giralda -Giraldo -gyrally -Girand -girandola -girandole -gyrant -Girard -Girardi -Girardo -girasol -girasole -girasoles -girasols -gyrate -gyrated -gyrates -gyrating -gyration -gyrational -gyrations -gyrator -gyratory -gyrators -Giraud -Giraudoux -girba -gird -girded -girder -girderage -girdering -girderless -girders -girder's -girding -girdingly -girdle -girdlecake -girdled -girdlelike -Girdler -girdlers -girdles -girdlestead -Girdletree -girdling -girdlingly -girds -Girdwood -gire -gyre -gyrectomy -gyrectomies -gyred -Girella -Girellidae -Gyrencephala -gyrencephalate -gyrencephalic -gyrencephalous -gyrene -gyrenes -gyres -gyrfalcon -gyrfalcons -Girgashite -Girgasite -Girgenti -Girhiny -gyri -gyric -gyring -gyrinid -Gyrinidae -Gyrinus -Girish -girja -girkin -girl -girland -girlchild -girleen -girlery -girlfriend -girlfriends -girlfully -girlhood -girlhoods -girly -girlie -girlies -girliness -girling -girlish -girlishly -girlishness -girlism -girllike -girllikeness -girl-o -girl-os -girls -girl's -girl-shy -girl-watcher -girn -girnal -girned -girnel -girny -girnie -girning -girns -giro -gyro -gyro- -gyrocar -gyroceracone -gyroceran -Gyroceras -gyrochrome -gyrocompass -gyrocompasses -Gyrodactylidae -Gyrodactylus -gyrodyne -giroflore -gyrofrequency -gyrofrequencies -gyrogonite -gyrograph -gyrohorizon -gyroidal -gyroidally -Girolamo -gyrolite -gyrolith -gyroma -gyromagnetic -gyromancy -gyromele -gyrometer -Gyromitra -giron -gyron -Gironde -Girondin -Girondism -Girondist -gironny -gyronny -girons -gyrons -Gyrophora -Gyrophoraceae -Gyrophoraceous -gyrophoric -gyropigeon -Gyropilot -gyroplane -giros -gyros -gyroscope -gyroscopes -gyroscope's -gyroscopic -gyroscopically -gyroscopics -gyrose -gyrosyn -girosol -girosols -gyrostabilized -gyrostabilizer -Gyrostachys -gyrostat -gyrostatic -gyrostatically -gyrostatics -gyrostats -Gyrotheca -girouette -girouettes -girouettism -gyrous -gyrovagi -gyrovague -gyrovagues -Girovard -gyrowheel -girr -girrit -girrock -Girru -girse -girsh -girshes -girsle -girt -girted -girth -girthed -girthing -girthline -girths -girth-web -Girtin -girting -girtline -girt-line -girtonian -girts -gyrus -Giruwa -Girvin -Girzfelden -GIs -gisant -gisants -gisarme -gisarmes -Gisborne -gise -gyse -gisel -Gisela -Giselbert -Gisele -Gisella -Giselle -gisement -Gish -Gishzida -gisla -gisler -gismo -gismondine -gismondite -gismos -gispin -GISS -Gisser -Gissing -gist -gists -git -gitaligenin -gitalin -Gitana -Gitanemuck -gitanemuk -gitano -gitanos -gite -gyte -Gitel -giterne -gith -Gytheion -Githens -gitim -Gitksan -Gytle -gytling -Gitlow -gitonin -gitoxigenin -gitoxin -gytrash -Gitt -Gittel -gitter -gittern -gitterns -Gittite -gittith -gyttja -Gittle -Giuba -Giuditta -Giuki -Giukung -Giule -Giulia -Giuliana -Giuliano -Giulietta -Giulini -Giulio -giunta -Giuseppe -giust -giustamente -Giustina -Giustino -Giusto -give -gyve -giveable -give-and-take -giveaway -giveaways -giveback -gyved -givey -Given -givenness -givens -giver -Giverin -giver-out -givers -gives -gyves -giveth -give-up -givin -giving -gyving -givingness -Givors-Badan -Giza -Gizeh -Gizela -gizmo -gizmos -Gizo -gizz -gizzard -gizzards -gizzen -gizzened -gizzern -gjedost -Gjellerup -gjetost -gjetosts -Gjuki -Gjukung -Gk -GKS -GKSM -Gl -gl. -Glaab -glabbella -glabella -glabellae -glabellar -glabellous -glabellum -Glaber -glabrate -glabreity -glabrescent -glabriety -glabrous -glabrousness -Glace -glaceed -glaceing -glaces -glaciable -Glacial -glacialism -glacialist -glacialize -glacially -glaciaria -glaciarium -glaciate -glaciated -glaciates -glaciating -glaciation -glacier -glaciered -glacieret -glacierist -glaciers -glacier's -glacify -glacification -glacioaqueous -glaciolacustrine -glaciology -glaciologic -glaciological -glaciologist -glaciologists -glaciomarine -glaciometer -glacionatant -glacious -glacis -glacises -glack -Glackens -glacon -Glad -gladatorial -Gladbeck -Gladbrook -glad-cheered -gladded -gladden -gladdened -gladdener -gladdening -gladdens -gladder -gladdest -Gladdy -Gladdie -gladding -gladdon -glade -gladeye -gladelike -gladen -glades -Gladeville -Gladewater -glad-flowing -gladful -gladfully -gladfulness -glad-hand -glad-handed -glad-hander -gladhearted -Gladi -Glady -gladiate -gladiator -gladiatory -gladiatorial -gladiatorism -gladiators -gladiatorship -gladiatrix -gladier -gladiest -gladify -gladii -Gladine -gladiola -gladiolar -gladiolas -gladiole -gladioli -gladiolus -gladioluses -Gladis -Gladys -gladite -gladius -gladkaite -gladless -gladly -gladlier -gladliest -gladness -gladnesses -gladrags -glads -glad-sad -Gladsheim -gladship -gladsome -gladsomely -gladsomeness -gladsomer -gladsomest -Gladstone -Gladstonian -Gladstonianism -glad-surviving -Gladwin -Gladwyne -glaga -glagah -Glagol -Glagolic -Glagolitic -Glagolitsa -glaieul -glaik -glaiket -glaiketness -glaikit -glaikitness -glaiks -glaymore -glair -glaire -glaired -glaireous -glaires -glairy -glairier -glairiest -glairin -glairiness -glairing -glairs -Glaisher -glaister -glaistig -glaive -glaived -glaives -glaizie -glaked -glaky -glali -glam -glamberry -glamor -Glamorgan -Glamorganshire -glamorization -glamorizations -glamorize -glamorized -glamorizer -glamorizes -glamorizing -glamorous -glamorously -glamorousness -glamors -glamour -glamoured -glamoury -glamourie -glamouring -glamourization -glamourize -glamourizer -glamourless -glamourous -glamourously -glamourousness -glamours -glance -glanced -glancer -glancers -glances -glancing -glancingly -gland -glandaceous -glandarious -glander -glandered -glanderous -glanders -glandes -glandiferous -glandiform -glanditerous -glandless -glandlike -Glandorf -glands -gland's -glandula -glandular -glandularly -glandulation -glandule -glandules -glanduliferous -glanduliform -glanduligerous -glandulose -glandulosity -glandulous -glandulousness -Glaniostomi -glanis -glans -Glanti -Glantz -Glanville -glar -glare -glared -glare-eyed -glareless -Glareola -glareole -Glareolidae -glareous -glareproof -glares -glareworm -glary -glarier -glariest -glarily -glariness -glaring -glaringly -glaringness -glarry -Glarum -Glarus -Glasco -Glaser -Glaserian -glaserite -Glasford -Glasgo -Glasgow -glashan -Glaspell -Glass -glassblower -glass-blower -glassblowers -glassblowing -glass-blowing -glassblowings -Glassboro -glass-bottomed -glass-built -glass-cloth -Glassco -glass-coach -glass-coated -glass-colored -glass-covered -glass-cutter -glass-cutting -glass-eater -glassed -glassed-in -glasseye -glass-eyed -glassen -Glasser -glasses -glass-faced -glassfish -glass-fronted -glassful -glassfuls -glass-glazed -glass-green -glass-hard -glasshouse -glass-house -glasshouses -glassy -glassie -glassy-eyed -glassier -glassies -glassiest -glassily -glassin -glassine -glassines -glassiness -glassing -Glassite -glassless -glasslike -glasslikeness -glass-lined -glassmaker -glass-maker -glassmaking -Glassman -glass-man -glassmen -glassophone -glass-paneled -glass-paper -Glassport -glassrope -glassteel -Glasston -glass-topped -glassware -glasswares -glassweed -glasswork -glass-work -glassworker -glassworkers -glassworking -glassworks -glassworm -glasswort -Glastonbury -Glaswegian -Glathsheim -Glathsheimr -glauber -glauberite -Glauce -glaucescence -glaucescent -Glaucia -glaucic -Glaucidium -glaucin -glaucine -Glaucionetta -Glaucium -glaucochroite -glaucodot -glaucodote -glaucolite -glaucoma -glaucomas -glaucomatous -Glaucomys -Glauconia -glauconiferous -Glauconiidae -glauconite -glauconitic -glauconitization -glaucophane -glaucophanite -glaucophanization -glaucophanize -glaucophyllous -Glaucopis -glaucosis -glaucosuria -glaucous -glaucous-green -glaucously -glaucousness -glaucous-winged -Glaucus -Glaudia -Glauke -glaum -glaumrie -glaur -glaury -Glaux -glave -glaver -glavered -glavering -Glavin -glaze -glazed -glazement -glazen -glazer -glazers -glazes -glazework -glazy -glazier -glaziery -glazieries -glaziers -glaziest -glazily -glaziness -glazing -glazing-bar -glazings -Glazunoff -Glazunov -glb -GLC -Gld -Gle -glead -gleam -gleamed -gleamer -gleamers -gleamy -gleamier -gleamiest -gleamily -gleaminess -gleaming -gleamingly -gleamless -gleams -glean -gleanable -gleaned -gleaner -gleaners -gleaning -gleanings -gleans -gleary -Gleason -gleave -gleba -glebae -glebal -glebe -glebeless -glebes -gleby -glebous -Glecoma -gled -Gleda -glede -gledes -gledge -gledy -Gleditsia -gleds -Glee -gleed -gleeds -glee-eyed -gleeful -gleefully -gleefulness -gleeishly -gleek -gleeked -gleeking -gleeks -gleemaiden -gleeman -gleemen -gleen -glees -gleesome -gleesomely -gleesomeness -Gleeson -gleet -gleeted -gleety -gleetier -gleetiest -gleeting -gleets -gleewoman -gleg -glegly -glegness -glegnesses -gley -Gleich -gleyde -Gleipnir -gleir -gleys -gleit -Gleiwitz -gleization -Gleizes -Glen -Glenallan -Glenallen -Glenarbor -Glenarm -Glenaubrey -Glenbeulah -Glenbrook -Glenburn -Glenburnie -Glencarbon -Glencliff -Glencoe -Glencross -Glenda -Glendale -Glendaniel -Glendean -Glenden -Glendive -Glendo -Glendon -Glendora -glendover -Glendower -glene -Gleneaston -Glenecho -Glenelder -Glenellen -Glenellyn -Glenferris -Glenfield -Glenflora -Glenford -Glengary -Glengarry -glengarries -Glenhayes -Glenham -Glenhead -Glenice -Glenine -Glenis -Glenyss -Glenjean -glenlike -Glenlyn -glenlivet -Glenmont -Glenmoore -Glenmora -Glenmorgan -Glenn -Glenna -Glennallen -Glenndale -Glennie -Glennis -Glennon -Glennville -gleno- -glenohumeral -glenoid -glenoidal -Glenolden -Glenoma -Glenpool -Glenrio -Glenrose -Glenrothes -glens -glen's -Glenshaw -Glenside -Glenspey -glent -Glentana -Glenullin -Glenus -Glenview -Glenvil -Glenville -Glenwhite -Glenwild -Glenwillard -Glenwilton -Glenwood -Glessariae -glessite -gletscher -gletty -glew -Glhwein -glia -gliadin -gliadine -gliadines -gliadins -glial -Glialentn -glias -glib -glibber -glibbery -glibbest -glib-gabbet -glibly -glibness -glibnesses -glib-tongued -glyc -glyc- -glycaemia -glycaemic -glycan -glycans -glycemia -glycemic -glycer- -glyceral -glyceraldehyde -glycerate -Glyceria -glyceric -glyceride -glyceridic -glyceryl -glyceryls -glycerin -glycerinate -glycerinated -glycerinating -glycerination -glycerine -glycerines -glycerinize -glycerins -glycerite -glycerize -glycerizin -glycerizine -glycero- -glycerogel -glycerogelatin -glycerol -glycerolate -glycerole -glycerolyses -glycerolysis -glycerolize -glycerols -glycerophosphate -glycerophosphoric -glycerose -glyceroxide -Glichingen -glycic -glycid -glycide -glycidic -glycidol -glycyl -glycyls -glycin -Glycine -glycines -glycinin -glycins -glycyphyllin -glycyrize -Glycyrrhiza -glycyrrhizin -Glick -glyco- -glycocholate -glycocholic -glycocin -glycocoll -glycogelatin -glycogen -glycogenase -glycogenesis -glycogenetic -glycogeny -glycogenic -glycogenize -glycogenolysis -glycogenolytic -glycogenosis -glycogenous -glycogens -glycohaemia -glycohemia -glycol -glycolaldehyde -glycolate -glycolic -glycolide -glycolyl -glycolylurea -glycolipid -glycolipide -glycolipin -glycolipine -glycolysis -glycolytic -glycolytically -glycollate -glycollic -glycollide -glycols -glycoluric -glycoluril -glyconean -glyconeogenesis -glyconeogenetic -Glyconian -Glyconic -glyconics -glyconin -glycopeptide -glycopexia -glycopexis -glycoproteid -glycoprotein -glycosaemia -glycose -glycosemia -glycosidase -glycoside -glycosides -glycosidic -glycosidically -glycosyl -glycosyls -glycosin -glycosine -glycosuria -glycosuric -glycuresis -glycuronic -glycuronid -glycuronide -Glidden -glidder -gliddery -glide -glide-bomb -glide-bombing -glided -glideless -glideness -glider -gliderport -gliders -glides -glidewort -gliding -glidingly -Gliere -gliff -gliffy -gliffing -gliffs -glike -glykopectic -glykopexic -glim -glime -glimed -glimes -gliming -glimmer -glimmered -glimmery -glimmering -glimmeringly -glimmerings -glimmerite -glimmerous -glimmers -Glimp -glimpse -glimpsed -glimpser -glimpsers -glimpses -glimpsing -glims -Glyn -Glynas -Glynda -Glyndon -Glynias -Glinys -Glynis -glink -Glinka -Glynn -Glynne -Glynnis -glinse -glint -glinted -glinting -glints -gliocyte -glioma -gliomas -gliomata -gliomatous -gliosa -gliosis -glyoxal -glyoxalase -glyoxalic -glyoxalin -glyoxaline -glyoxyl -glyoxylic -glyoxilin -glyoxim -glyoxime -glyph -glyphic -glyphograph -glyphographer -glyphography -glyphographic -glyphs -glyptal -glyptic -glyptical -glyptician -glyptics -Glyptodon -glyptodont -Glyptodontidae -glyptodontoid -glyptograph -glyptographer -glyptography -glyptographic -glyptolith -glyptology -glyptological -glyptologist -glyptotheca -Glyptotherium -Glires -Gliridae -gliriform -Gliriformia -glirine -Glis -glisk -glisky -gliss -glissade -glissaded -glissader -glissades -glissading -glissandi -glissando -glissandos -glissette -glist -glisten -glistened -glistening -glisteningly -glistens -glister -glyster -glistered -glistering -glisteringly -glisters -glitch -glitches -glitchy -Glitnir -glitter -glitterance -glittered -glittery -glittering -glitteringly -glitters -glittersome -Glitz -glitzes -glitzy -glitzier -Glivare -Gliwice -gloam -gloaming -gloamings -gloams -gloat -gloated -gloater -gloaters -gloating -gloatingly -gloats -glob -global -globalism -globalist -globalists -globality -globalization -globalize -globalized -globalizing -globally -globate -globated -globby -globbier -Globe -globed -globefish -globefishes -globeflower -globe-girdler -globe-girdling -globeholder -globelet -globelike -globes -globe's -globe-shaped -globe-trot -globetrotter -globe-trotter -globetrotters -globetrotting -globe-trotting -globy -globical -Globicephala -globiferous -Globigerina -globigerinae -globigerinas -globigerine -Globigerinidae -globin -globing -globins -Globiocephalus -globo-cumulus -globoid -globoids -globose -globosely -globoseness -globosite -globosity -globosities -globosphaerite -globous -globously -globousness -globs -globular -Globularia -Globulariaceae -globulariaceous -globularity -globularly -globularness -globule -globules -globulet -globulicidal -globulicide -globuliferous -globuliform -globulimeter -globulin -globulins -globulinuria -globulysis -globulite -globulitic -globuloid -globulolysis -globulose -globulous -globulousness -globus -glochchidia -glochid -glochideous -glochidia -glochidial -glochidian -glochidiate -glochidium -glochids -glochines -glochis -glockenspiel -glockenspiels -glod -gloea -gloeal -Gloeocapsa -gloeocapsoid -gloeosporiose -Gloeosporium -Glogau -glogg -gloggs -gloy -Gloiopeltis -Gloiosiphonia -Gloiosiphoniaceae -glom -glome -glomeli -glomera -glomerate -glomeration -Glomerella -glomeroporphyritic -glomerular -glomerulate -glomerule -glomeruli -glomerulitis -glomerulonephritis -glomerulose -glomerulus -glomi -Glomma -glommed -glomming -glommox -GLOMR -gloms -glomus -glonoin -glonoine -glonoins -glood -gloom -gloomed -gloomful -gloomfully -gloomy -gloomy-browed -gloomier -gloomiest -gloomy-faced -gloomily -gloominess -gloominesses -glooming -gloomingly -gloomings -gloomless -glooms -gloomth -Glooscap -glop -glopnen -glopped -gloppen -gloppy -glopping -glops -glor -glore -glor-fat -Glori -Glory -Gloria -gloriam -Gloriana -Gloriane -Gloriann -Glorianna -glorias -gloriation -Glorie -gloried -glories -Glorieta -gloriette -glorify -glorifiable -glorification -glorifications -glorified -glorifier -glorifiers -glorifies -glorifying -gloryful -glory-hole -glorying -gloryingly -gloryless -glory-of-the-snow -glory-of-the-snows -glory-of-the-sun -glory-of-the-suns -gloriole -glorioles -Gloriosa -gloriosity -glorioso -glorious -gloriously -gloriousness -glory-pea -Glos -gloss -gloss- -gloss. -Glossa -glossae -glossagra -glossal -glossalgy -glossalgia -glossanthrax -glossary -glossarial -glossarially -glossarian -glossaries -glossary's -glossarist -glossarize -glossas -Glossata -glossate -glossator -glossatorial -glossectomy -glossectomies -glossed -glossem -glossematic -glossematics -glosseme -glossemes -glossemic -glosser -glossers -glosses -glossy -glossy-black -glossic -glossier -glossies -glossiest -glossy-leaved -glossily -Glossina -glossinas -glossiness -glossinesses -glossing -glossingly -Glossiphonia -Glossiphonidae -glossist -glossitic -glossitis -glossy-white -glossless -glossmeter -glosso- -glossocarcinoma -glossocele -glossocoma -glossocomium -glossocomon -glossodynamometer -glossodynia -glossoepiglottic -glossoepiglottidean -glossograph -glossographer -glossography -glossographical -glossohyal -glossoid -glossokinesthetic -glossolabial -glossolabiolaryngeal -glossolabiopharyngeal -glossolaly -glossolalia -glossolalist -glossolaryngeal -glossolysis -glossology -glossological -glossologies -glossologist -glossoncus -glossopalatine -glossopalatinus -glossopathy -glossopetra -Glossophaga -glossophagine -glossopharyngeal -glossopharyngeus -glossophytia -glossophobia -Glossophora -glossophorous -glossopyrosis -glossoplasty -glossoplegia -glossopode -glossopodium -Glossopteris -glossoptosis -glossorrhaphy -glossoscopy -glossoscopia -glossospasm -glossosteresis -Glossotherium -glossotype -glossotomy -glossotomies -glost -Gloster -glost-fired -glosts -glott- -glottal -glottalite -glottalization -glottalize -glottalized -glottalizing -glottic -glottid -glottidean -glottides -glottis -glottiscope -glottises -glottitis -glotto- -glottochronology -glottochronological -glottogony -glottogonic -glottogonist -glottology -glottologic -glottological -glottologies -glottologist -glotum -Gloucester -Gloucestershire -Glouster -glout -glouted -glouting -glouts -glove -gloved -glovey -gloveless -glovelike -glovemaker -glovemaking -gloveman -glovemen -Glover -gloveress -glovers -Gloversville -Gloverville -gloves -gloving -Glovsky -glow -glowbard -glowbird -glowed -glower -glowered -glowerer -glowering -gloweringly -glowers -glowfly -glowflies -glowing -glowingly -glows -glowworm -glow-worm -glowworms -Gloxinia -gloxinias -gloze -glozed -glozer -glozes -glozing -glozingly -glt -glt. -glub -glucaemia -glucagon -glucagons -glucase -glucate -glucemia -glucic -glucid -glucide -glucidic -glucina -glucine -glucinic -glucinium -glucinum -glucinums -Gluck -glucke -gluck-gluck -glucocorticoid -glucocorticord -glucofrangulin -glucogene -glucogenesis -glucogenic -glucokinase -glucokinin -glucolipid -glucolipide -glucolipin -glucolipine -glucolysis -gluconate -gluconeogenesis -gluconeogenetic -gluconeogenic -gluconokinase -glucoprotein -glucosaemia -glucosamine -glucosan -glucosane -glucosazone -glucose -glucosemia -glucoses -glucosic -glucosid -glucosidal -glucosidase -glucoside -glucosidic -glucosidically -glucosin -glucosine -glucosone -glucosulfone -glucosuria -glucosuric -glucuronic -glucuronidase -glucuronide -glue -glued -glued-up -gluey -glueyness -glueing -gluelike -gluelikeness -gluemaker -gluemaking -glueman -gluepot -glue-pot -gluepots -gluer -gluers -glues -glug -glugged -glugging -glugglug -glugs -gluhwein -gluier -gluiest -gluily -gluiness -gluing -gluing-off -gluish -gluishness -glum -gluma -Glumaceae -glumaceous -glumal -Glumales -glume -glumelike -glumella -glumes -glumiferous -Glumiflorae -glumly -glummer -glummest -glummy -glumness -glumnesses -glumose -glumosity -glumous -glump -glumpy -glumpier -glumpiest -glumpily -glumpiness -glumpish -glunch -glunched -glunches -glunching -Gluneamie -glunimie -gluon -gluons -glusid -gluside -glut -glut- -glutael -glutaeous -glutamate -glutamates -glutamic -glutaminase -glutamine -glutaminic -glutaraldehyde -glutaric -glutathione -glutch -gluteal -glutei -glutelin -glutelins -gluten -glutenin -glutenous -glutens -gluteofemoral -gluteoinguinal -gluteoperineal -glutetei -glutethimide -gluteus -glutimate -glutin -glutinant -glutinate -glutination -glutinative -glutinize -glutinose -glutinosity -glutinous -glutinously -glutinousness -glutition -glutoid -glutose -gluts -glutted -gluttei -glutter -gluttery -glutting -gluttingly -glutton -gluttoness -gluttony -gluttonies -gluttonise -gluttonised -gluttonish -gluttonising -gluttonism -gluttonize -gluttonized -gluttonizing -gluttonous -gluttonously -gluttonousness -gluttons -Glux -GM -G-man -Gmat -GMB -GMBH -GMC -Gmelina -gmelinite -G-men -GMRT -GMT -Gmur -GMW -GN -gnabble -Gnaeus -gnamma -gnaphalioid -Gnaphalium -gnapweed -gnar -gnarl -gnarled -gnarly -gnarlier -gnarliest -gnarliness -gnarling -gnarls -gnarr -gnarred -gnarring -gnarrs -gnars -gnash -gnashed -gnashes -gnashing -gnashingly -gnast -gnat -gnatcatcher -gnateater -gnatflower -gnath- -gnathal -gnathalgia -gnathic -gnathidium -gnathion -gnathions -gnathism -gnathite -gnathites -gnathitis -Gnatho -gnathobase -gnathobasic -Gnathobdellae -Gnathobdellida -gnathometer -gnathonic -gnathonical -gnathonically -gnathonism -gnathonize -gnathophorous -gnathoplasty -gnathopod -Gnathopoda -gnathopodite -gnathopodous -gnathostegite -Gnathostoma -Gnathostomata -gnathostomatous -gnathostome -Gnathostomi -gnathostomous -gnathotheca -gnathous -gnatlike -gnatling -gnatoo -gnatproof -gnats -gnat's -gnatsnap -gnatsnapper -gnatter -gnatty -gnattier -gnattiest -gnatworm -gnaw -gnawable -gnawed -gnawer -gnawers -gnawing -gnawingly -gnawings -gnawn -gnaws -GND -gneiss -gneisses -gneissy -gneissic -gneissitic -gneissoid -gneissoid-granite -gneissose -Gnesdilov -Gnesen -Gnesio-lutheran -gnessic -Gnetaceae -gnetaceous -Gnetales -Gnetum -gnetums -gneu -gnide -Gniezno -GNMA -Gnni -gnocchetti -gnocchi -gnoff -gnome -gnomed -gnomelike -gnomes -gnomesque -gnomic -gnomical -gnomically -gnomide -gnomish -gnomist -gnomists -gnomology -gnomologic -gnomological -gnomologist -gnomon -Gnomonia -Gnomoniaceae -gnomonic -gnomonical -gnomonics -gnomonology -gnomonological -gnomonologically -gnomons -gnoses -gnosiology -gnosiological -gnosis -Gnossian -Gnossus -Gnostic -gnostical -gnostically -Gnosticise -Gnosticised -Gnosticiser -Gnosticising -Gnosticism -gnosticity -Gnosticize -Gnosticized -Gnosticizer -Gnosticizing -gnostology -G-note -gnotobiology -gnotobiologies -gnotobiosis -gnotobiote -gnotobiotic -gnotobiotically -gnotobiotics -gnow -GNP -gns -GNU -gnus -GO -Goa -go-about -goad -goaded -goading -goadlike -goads -goadsman -goadster -goaf -go-ahead -Goajiro -goal -Goala -goalage -goaled -goalee -goaler -goalers -goalie -goalies -goaling -goalkeeper -goalkeepers -goalkeeping -goalless -goalmouth -goalpost -goalposts -goals -goal's -goaltender -goaltenders -goaltending -Goalundo -Goan -Goanese -goanna -goannas -Goar -goas -go-ashore -Goasila -go-as-you-please -Goat -goatbeard -goat-bearded -goatbrush -goatbush -goat-drunk -goatee -goateed -goatees -goatee's -goat-eyed -goatfish -goatfishes -goat-footed -goat-headed -goatherd -goat-herd -goatherdess -goatherds -goat-hoofed -goat-horned -goaty -goatish -goatishly -goatishness -goat-keeping -goat-kneed -goatland -goatly -goatlike -goatling -goatpox -goat-pox -goatroot -goats -goat's -goatsbane -goatsbeard -goat's-beard -goatsfoot -goatskin -goatskins -goat's-rue -goatstone -goatsucker -goat-toothed -goatweed -goave -goaves -gob -goback -go-back -goban -gobang -gobangs -gobans -Gobat -gobbe -gobbed -gobber -gobbet -gobbets -Gobbi -gobby -gobbin -gobbing -gobble -gobbled -gobbledegook -gobbledegooks -gobbledygook -gobbledygooks -gobbler -gobblers -gobbles -gobbling -Gobelin -gobemouche -gobe-mouches -Gober -gobernadora -Gobert -gobet -go-between -Gobi -goby -go-by -Gobia -Gobian -gobies -gobiesocid -Gobiesocidae -gobiesociform -Gobiesox -gobiid -Gobiidae -gobiiform -Gobiiformes -gobylike -Gobinism -Gobinist -Gobio -gobioid -Gobioidea -Gobioidei -gobioids -Gobler -Gobles -goblet -gobleted -gobletful -goblets -goblet's -goblin -gobline -gob-line -goblinesque -goblinish -goblinism -goblinize -goblinry -goblins -goblin's -gobmouthed -gobo -goboes -gobonated -gobonee -gobony -gobos -gobs -gobstick -gobstopper -goburra -GOC -gocart -go-cart -Goclenian -Goclenius -God -Goda -God-adoring -god-almighty -god-a-mercy -Godard -Godart -Godavari -godawful -God-awful -Godbeare -God-begot -God-begotten -God-beloved -Godber -God-bless -God-built -godchild -god-child -godchildren -God-conscious -God-consciousness -God-created -God-cursed -Goddam -goddammed -goddamming -goddammit -goddamn -god-damn -goddamndest -goddamned -goddamnedest -goddamning -goddamnit -goddamns -goddams -Goddard -Goddart -goddaughter -god-daughter -goddaughters -godded -Godden -Godderd -God-descended -goddess -goddesses -goddesshood -goddess-like -goddess's -goddessship -goddikin -Godding -goddize -Goddord -gode -Godeffroy -Godey -Godel -godelich -God-empowered -godendag -God-enlightened -God-entrusted -Goderich -Godesberg -godet -Godetia -go-devil -Godewyn -godfather -godfatherhood -godfathers -godfathership -God-fearing -God-forbidden -God-forgetting -God-forgotten -Godforsaken -Godfree -Godfrey -Godfry -Godful -God-given -Godhead -godheads -godhood -godhoods -god-horse -Godin -God-inspired -Godiva -godkin -god-king -Godley -godless -godlessly -godlessness -godlessnesses -godlet -godly -godlier -godliest -godlike -godlikeness -godly-learned -godlily -Godliman -godly-minded -godly-mindedness -godliness -godling -godlings -God-loved -God-loving -God-made -godmaker -godmaking -godmamma -god-mamma -God-man -God-manhood -God-men -godmother -godmotherhood -godmothers -godmother's -godmothership -Godolias -Godolphin -God-ordained -godown -go-down -godowns -Godowsky -godpapa -god-papa -godparent -god-parent -godparents -god-phere -Godred -Godric -Godrich -godroon -godroons -Gods -god's -Godsake -God-seeing -godsend -godsends -godsent -God-sent -godship -godships -godsib -godson -godsons -godsonship -God-sped -Godspeed -god-speed -god's-penny -God-taught -Godthaab -Godunov -Godward -Godwards -Godwin -Godwine -Godwinian -godwit -godwits -God-wrought -Goebbels -Goebel -goeduck -Goeger -Goehner -goel -goelism -Goemagot -Goemot -goen -Goer -goer-by -Goering -Goerke -Goerlitz -goers -GOES -Goeselt -Goessel -Goetae -Goethals -Goethe -Goethean -Goethian -goethite -goethites -goety -goetia -goetic -goetical -Goetz -Goetzville -gofer -gofers -Goff -goffer -goffered -gofferer -goffering -goffers -goffle -Goffstown -Gog -go-getter -go-getterism -gogetting -go-getting -gogga -goggan -Goggin -goggle -gogglebox -goggled -goggle-eye -goggle-eyed -goggle-eyes -goggle-nose -goggler -gogglers -goggles -goggly -gogglier -goggliest -goggling -Gogh -goglet -goglets -Goglidze -gogmagog -Gogo -go-go -Gogol -gogos -Gogra -Gohila -goi -goy -Goya -goiabada -Goyana -Goiania -Goias -goyazite -Goibniu -Goico -Goidel -Goidelic -Goyen -Goyetian -goyim -goyin -goyish -goyle -Goines -Going -going-concern -going-over -goings -goings-on -goings-over -gois -goys -goitcho -goiter -goitered -goiterogenic -goiters -goitral -goitre -goitres -goitrogen -goitrogenic -goitrogenicity -goitrous -GOK -go-kart -Gokey -Gokuraku -gol -Gola -golach -goladar -golandaas -golandause -Golanka -Golaseccan -Golconda -golcondas -Gold -Golda -goldang -goldanged -Goldarina -goldarn -goldarned -goldarnedest -goldarns -gold-ball -gold-banded -Goldbar -gold-basket -gold-bearing -goldbeater -gold-beater -goldbeating -gold-beating -Goldberg -Goldbird -gold-bloom -Goldbond -gold-bound -gold-braided -gold-breasted -goldbrick -gold-brick -goldbricked -goldbricker -goldbrickers -goldbricking -goldbricks -gold-bright -gold-broidered -goldbug -gold-bug -goldbugs -gold-ceiled -gold-chain -gold-clasped -gold-colored -gold-containing -goldcrest -gold-crested -goldcup -gold-daubed -gold-decked -gold-dig -gold-digger -gold-dust -gold-edged -goldeye -goldeyes -gold-embossed -gold-embroidered -Golden -golden-ager -goldenback -golden-banded -golden-bearded -Goldenberg -golden-breasted -golden-brown -golden-cheeked -golden-chestnut -golden-colored -golden-crested -golden-crowned -golden-cup -Goldendale -golden-eared -goldeney -goldeneye -golden-eye -golden-eyed -goldeneyes -goldener -goldenest -golden-fettered -golden-fingered -goldenfleece -golden-footed -golden-fruited -golden-gleaming -golden-glowing -golden-green -goldenhair -golden-haired -golden-headed -golden-hilted -golden-hued -golden-yellow -goldenknop -golden-leaved -goldenly -golden-locked -goldenlocks -Goldenmouth -goldenmouthed -golden-mouthed -goldenness -goldenpert -golden-rayed -goldenrod -golden-rod -goldenrods -goldenseal -golden-spotted -golden-throned -golden-tipped -golden-toned -golden-tongued -goldentop -golden-tressed -golden-voiced -goldenwing -golden-winged -gold-enwoven -golder -goldest -gold-exchange -Goldfarb -Goldfield -gold-field -goldfielder -goldfields -gold-fields -gold-filled -Goldfinch -goldfinches -gold-finder -goldfinny -goldfinnies -goldfish -gold-fish -goldfishes -goldflower -gold-foil -gold-framed -gold-fringed -gold-graved -gold-green -gold-haired -goldhammer -goldhead -gold-headed -gold-hilted -Goldi -Goldy -Goldia -Goldic -Goldie -gold-yellow -goldilocks -goldylocks -Goldin -Goldina -Golding -gold-inlaid -goldish -gold-laced -gold-laden -gold-leaf -goldless -goldlike -gold-lit -Goldman -Goldmark -gold-mine -goldminer -goldmist -gold-mounted -goldney -Goldner -gold-of-pleasure -Goldoni -Goldonian -Goldonna -Goldovsky -gold-plate -gold-plated -gold-plating -gold-red -gold-ribbed -gold-rimmed -gold-robed -gold-rolling -Goldrun -gold-rush -golds -Goldsboro -Goldschmidt -goldseed -gold-seeking -Goldshell -Goldshlag -goldsinny -Goldsmith -goldsmithery -goldsmithing -goldsmithry -goldsmiths -goldspink -gold-star -Goldstein -Goldstine -Goldston -goldstone -gold-striped -gold-strung -gold-studded -Goldsworthy -goldtail -gold-testing -goldthread -Goldthwaite -goldtit -goldurn -goldurned -goldurnedest -goldurns -Goldvein -gold-washer -Goldwasser -Goldwater -goldweed -gold-weight -Goldwin -Goldwyn -gold-winged -Goldwynism -goldwork -gold-work -goldworker -gold-wrought -golee -golem -golems -Goles -golet -Goleta -golf -golfdom -golfed -golfer -golfers -golfing -golfings -golfs -Golgi -Golgotha -golgothas -goli -Goliad -Goliard -goliardeys -goliardery -goliardic -goliards -Goliath -goliathize -goliaths -Golightly -golilla -golkakra -Goll -golland -gollar -goller -golly -Gollin -Golliner -gollywobbler -golliwog -gollywog -golliwogg -golliwogs -gollop -Golo -goloch -goloe -goloka -golosh -goloshe -goloshes -golo-shoe -golp -golpe -Golschmann -Golter -Goltry -Golts -Goltz -Golub -golundauze -goluptious -Golva -Goma -Gomar -gomari -Gomarian -Gomarist -Gomarite -gomart -gomashta -gomasta -gomavel -Gombach -gombay -gombeen -gombeenism -gombeen-man -gombeen-men -Gomberg -gombo -gombos -Gombosi -gombroon -gombroons -gome -Gomeisa -Gomel -Gomer -gomeral -gomerals -gomerec -gomerel -gomerels -gomeril -gomerils -Gomez -gomlah -gommelin -gommier -go-moku -gomoku-zogan -Gomontia -Gomorrah -Gomorrean -Gomorrha -Gomorrhean -gom-paauw -Gompers -gomphiasis -Gomphocarpus -gomphodont -Gompholobium -gomphoses -gomphosis -Gomphrena -gomukhi -Gomulka -gomuti -gomutis -gon -gon- -Gona -gonad -gonadal -gonadectomy -gonadectomies -gonadectomized -gonadectomizing -gonadial -gonadic -gonadotrope -gonadotrophic -gonadotrophin -gonadotropic -gonadotropin -gonads -gonaduct -gonagia -Gonagle -gonagra -Gonaives -gonake -gonakie -gonal -gonalgia -gonangia -gonangial -gonangium -gonangiums -gonapod -gonapophysal -gonapophysial -gonapophysis -gonarthritis -Gonave -goncalo -Goncharov -Goncourt -Gond -gondang -Gondar -Gondi -gondite -gondola -gondolas -gondolet -gondoletta -gondolier -gondoliere -gondoliers -Gondomar -Gondwana -Gondwanaland -Gone -gone-by -gonef -gonefs -goney -goneness -gonenesses -goneoclinic -gonepoiesis -gonepoietic -goner -Goneril -goners -gonesome -gonfalcon -gonfalon -gonfalonier -gonfalonierate -gonfaloniership -gonfalons -gonfanon -gonfanons -gong -gonged -gong-gong -gonging -gonglike -gongman -Gongola -Gongoresque -Gongorism -Gongorist -Gongoristic -gongs -gong's -gony -goni- -gonia -goniac -gonial -goniale -gonyalgia -Goniaster -goniatite -Goniatites -goniatitic -goniatitid -Goniatitidae -goniatitoid -gonyaulax -gonycampsis -Gonick -gonid -gonidangium -gonydeal -gonidia -gonidial -gonydial -gonidic -gonidiferous -gonidiogenous -gonidioid -gonidiophore -gonidiose -gonidiospore -gonidium -Gonyea -gonif -goniff -goniffs -gonifs -gonimic -gonimium -gonimoblast -gonimolobe -gonimous -goninidia -gonyocele -goniocraniometry -Goniodoridae -Goniodorididae -Goniodoris -goniometer -goniometry -goniometric -goniometrical -goniometrically -gonion -gonyoncus -gonionia -Goniopholidae -Goniopholis -goniostat -goniotheca -goniotropous -gonys -Gonystylaceae -gonystylaceous -Gonystylus -gonytheca -gonitis -gonium -goniums -goniunia -gonk -gonna -gonnardite -gonne -Gonnella -gono- -gonoblast -gonoblastic -gonoblastidial -gonoblastidium -gonocalycine -gonocalyx -gonocheme -gonochorism -gonochorismal -gonochorismus -gonochoristic -gonocyte -gonocytes -gonococcal -gonococci -gonococcic -gonococcocci -gonococcoid -gonococcus -gonocoel -gonocoele -gonoecium -gonof -gonofs -Go-no-further -gonogenesis -Gonolobus -gonomere -gonomery -gonoph -gonophore -gonophoric -gonophorous -gonophs -gonoplasm -gonopod -gonopodia -gonopodial -gonopodium -gonopodpodia -gonopoietic -gonopore -gonopores -gonorrhea -gonorrheal -gonorrheas -gonorrheic -gonorrhoea -gonorrhoeal -gonorrhoeic -gonosomal -gonosome -gonosphere -gonostyle -gonotheca -gonothecae -gonothecal -gonotyl -gonotype -gonotocont -gonotokont -gonotome -gonozooid -Gonroff -Gonsalve -Gonta -Gonvick -Gonzales -Gonzalez -Gonzalo -Gonzlez -gonzo -goo -Goober -goobers -Gooch -Goochland -Good -Goodacre -Goodard -goodby -good-by -goodbye -good-bye -goodbyes -good-bye-summer -goodbys -good-daughter -Goodden -good-den -good-doer -Goode -Goodell -Goodenia -Goodeniaceae -goodeniaceous -Goodenoviaceae -gooder -gooders -good-faith -good-father -good-fellow -good-fellowhood -good-fellowish -good-fellowship -Goodfield -good-for -good-for-naught -good-for-nothing -good-for-nothingness -goodhap -goodhearted -good-hearted -goodheartedly -goodheartedness -Goodhen -Goodhope -Goodhue -good-humored -good-humoredly -goodhumoredness -good-humoredness -good-humoured -good-humouredly -good-humouredness -Goody -goodie -Goodyear -Goodyera -goodies -goody-good -goody-goody -goody-goodies -goody-goodyism -goody-goodiness -goody-goodyness -goody-goodness -goodyish -goodyism -Goodill -goodyness -Gooding -goody's -goodish -goodyship -goodishness -Goodkin -Good-King-Henry -Good-King-Henries -Goodland -goodless -Goodlettsville -goodly -goodlier -goodliest -goodlihead -goodlike -good-liking -goodliness -good-looker -good-looking -good-lookingness -Goodman -good-mannered -goodmanship -goodmen -good-morning-spring -good-mother -good-natured -good-naturedly -goodnaturedness -good-naturedness -good-neighbor -good-neighbourhood -goodness -goodnesses -goodnight -good-night -good-o -good-oh -good-plucked -Goodrich -Goodrow -goods -goodship -goodsire -good-sister -good-size -good-sized -goodsome -Goodson -Goodspeed -good-tasting -good-tempered -good-temperedly -goodtemperedness -good-temperedness -good-time -Goodview -Goodville -Goodway -Goodwater -Goodwell -goodwife -goodwily -goodwilies -goodwill -goodwilled -goodwilly -goodwillie -goodwillies -goodwillit -goodwills -Goodwin -Goodwine -goodwives -gooey -goof -goofah -goofball -goofballs -goofed -goofer -go-off -goofy -goofier -goofiest -goofily -goofiness -goofinesses -goofing -goof-off -goofs -goof-up -goog -Googins -googly -googly-eyed -googlies -googol -googolplex -googolplexes -googols -goo-goo -googul -gooier -gooiest -gook -gooky -gooks -gool -goolah -goolde -Goole -gools -gooma -goombah -goombahs -goombay -goombays -goon -goonch -goonda -goondie -gooney -gooneys -goony -goonie -goonies -goons -Goop -goopy -goopier -goopiest -goops -gooral -goorals -gooranut -gooroo -goos -goosander -goose -goosebeak -gooseberry -gooseberry-eyed -gooseberries -goosebill -goose-bill -goosebird -gooseboy -goosebone -goose-cackle -goosecap -goosed -goose-egg -goosefish -goosefishes -gooseflesh -goose-flesh -goosefleshes -goose-fleshy -gooseflower -goosefoot -goose-foot -goose-footed -goosefoots -goosegirl -goosegog -goosegrass -goose-grass -goose-grease -goose-headed -gooseherd -goosehouse -goosey -gooselike -gooseliver -goosemouth -gooseneck -goose-neck -goosenecked -goose-pimple -goosepimply -goose-pimply -goose-quill -goosery -gooseries -gooserumped -gooses -goose-shaped -gooseskin -goose-skin -goose-step -goose-stepped -goose-stepper -goose-stepping -goosetongue -gooseweed -goosewing -goose-wing -goosewinged -goosy -goosier -goosiest -goosing -goosish -goosishly -goosishness -Goossens -gootee -goozle -GOP -gopak -gopher -gopherberry -gopherberries -gopherman -gopherroot -gophers -gopherwood -gopura -go-quick -Gor -Gora -goracco -Gorakhpur -goral -goralog -gorals -Goran -Goraud -gorb -gorbal -Gorbals -gorbelly -gorbellied -gorbellies -gorbet -gorbit -gorble -gorblimey -gorblimy -gorblin -Gorboduc -gorce -Gorchakov -gorcock -gorcocks -gorcrow -Gord -Gordan -Gorden -Gordy -Gordiacea -gordiacean -gordiaceous -Gordyaean -Gordian -Gordie -gordiid -Gordiidae -gordioid -Gordioidea -Gordius -Gordo -gordolobo -Gordon -Gordonia -Gordonsville -Gordonville -gordunite -Gore -gorebill -gored -Goree -gorefish -gore-fish -Gorey -Goren -gorer -gores -gorevan -Goreville -gorfly -Gorga -Gorgas -gorge -gorgeable -gorged -gorgedly -gorgelet -gorgeous -gorgeously -gorgeousness -gorger -gorgeret -gorgerin -gorgerins -gorgers -Gorges -gorget -gorgeted -gorgets -gorgia -Gorgias -gorging -gorgio -Gorgythion -gorglin -Gorgon -Gorgonacea -gorgonacean -gorgonaceous -gorgoneia -gorgoneion -gorgoneioneia -gorgonesque -gorgoneum -Gorgon-headed -Gorgonia -Gorgoniacea -gorgoniacean -gorgoniaceous -Gorgonian -gorgonin -gorgonise -gorgonised -gorgonising -gorgonize -gorgonized -gorgonizing -gorgonlike -gorgons -Gorgonzola -Gorgophone -Gorgosaurus -Gorham -gorhen -gorhens -gory -goric -Gorica -gorier -goriest -gorily -gorilla -gorillalike -gorillas -gorilla's -gorillaship -gorillian -gorilline -gorilloid -Gorin -goriness -gorinesses -Goring -Gorizia -Gorkhali -Gorki -Gorky -Gorkiesque -gorkun -Gorlicki -Gorlin -gorling -Gorlitz -gorlois -Gorlovka -Gorman -gormand -gormandise -gormandised -gormandiser -gormandising -gormandism -gormandize -gormandized -gormandizer -gormandizers -gormandizes -gormandizing -gormands -Gormania -gormaw -gormed -gormless -gorp -gorps -gorra -gorraf -gorrel -gorry -Gorrian -Gorrono -gorse -gorsebird -gorsechat -Gorsedd -gorsehatch -gorses -gorsy -gorsier -gorsiest -Gorski -gorst -Gortys -Gorton -Gortonian -Gortonite -Gorum -Gorz -GOS -gosain -Gosala -goschen -goschens -gosh -goshawful -gosh-awful -goshawk -goshawks -goshdarn -gosh-darn -Goshen -goshenite -GOSIP -Goslar -goslarite -goslet -gos-lettuce -gosling -goslings -gosmore -Gosney -Gosnell -Gospel -gospeler -gospelers -gospelist -gospelize -gospeller -gospelly -gospellike -gospelmonger -Gospels -gospel-true -gospelwards -Gosplan -gospoda -gospodar -gospodin -gospodipoda -Gosport -gosports -Goss -Gossaert -gossamer -gossamered -gossamery -gossameriness -gossamers -gossampine -gossan -gossaniferous -gossans -gossard -Gossart -Gosse -Gosselin -gossep -Gosser -gossy -gossip -gossipdom -gossiped -gossipee -gossiper -gossipers -gossiphood -gossipy -gossypin -gossypine -gossipiness -gossiping -gossipingly -Gossypium -gossipmonger -gossipmongering -gossypol -gossypols -gossypose -gossipped -gossipper -gossipping -gossipred -gossipry -gossipries -gossips -gossoon -gossoons -goster -gosther -got -Gotama -gotch -gotched -Gotcher -gotchy -gote -Gotebo -Goteborg -goter -Goth -Goth. -Gotha -Gotham -Gothamite -Gothar -Gothard -Gothart -Gothenburg -Gothic -Gothically -Gothicise -Gothicised -Gothiciser -Gothicising -Gothicism -Gothicist -Gothicity -Gothicize -Gothicized -Gothicizer -Gothicizing -Gothicness -gothics -Gothish -Gothism -gothite -gothites -Gothlander -Gothonic -goths -Gothurd -Gotiglacial -Gotland -Gotlander -Goto -go-to-itiveness -go-to-meeting -gotos -gotra -gotraja -Gott -gotta -gotten -Gotterdammerung -Gottfried -Gotthard -Gotthelf -Gottingen -Gottland -Gottlander -Gottlieb -Gottschalk -Gottuard -Gottwald -Gotz -gou -gouache -gouaches -gouaree -Goucher -Gouda -Goudeau -Goudy -gouge -gouged -gouger -gougers -gouges -Gough -gouging -gougingly -goujay -goujat -Goujon -goujons -goulan -goularo -goulash -goulashes -Gould -Gouldbusk -Goulden -Goulder -gouldian -Goulds -Gouldsboro -Goulet -Goulette -goumi -goumier -gounau -goundou -Gounod -goup -goupen -goupin -gour -Goura -gourami -gouramis -gourd -gourde -gourded -gourdes -gourdful -gourdhead -gourdy -Gourdine -gourdiness -gourding -gourdlike -gourds -gourd-shaped -gourdworm -goury -Gourinae -gourmand -gourmander -gourmanderie -gourmandise -gourmandism -gourmandize -gourmandizer -gourmands -gourmet -gourmetism -gourmets -Gourmont -Gournay -gournard -Gournia -gourounut -gousty -goustie -goustrous -gout -gouter -gouty -goutier -goutiest -goutify -goutily -goutiness -goutish -gouts -goutte -goutweed -goutwort -gouv- -gouvernante -gouvernantes -Gouverneur -Gov -Gov. -Gove -govern -governability -governable -governableness -governably -governail -governance -governante -governed -governeress -governess -governessdom -governesses -governesshood -governessy -governess-ship -governing -governingly -governless -government -governmental -governmentalism -governmentalist -governmentalize -governmentally -government-general -government-in-exile -governmentish -government-owned -governments -government's -governor -governorate -governor-elect -governor-general -governor-generalship -governors -governor's -governorship -governorships -governs -Govt -Govt. -Gow -gowan -Gowanda -gowaned -gowany -gowans -gowd -gowdy -gowdie -gowdnie -gowdnook -gowds -Gowen -Gower -gowf -gowfer -gowiddie -gowk -gowked -gowkedly -gowkedness -gowkit -gowks -gowl -gowlan -gowland -gown -gowned -gown-fashion -gowning -gownlet -gowns -gownsman -gownsmen -Gowon -gowpen -gowpin -Gowrie -GOX -goxes -gozell -gozill -gozzan -gozzard -GP -gpad -GPC -gpcd -GPCI -GPD -GpE -gph -GPI -GPIB -GPL -GPM -GPO -GPS -GPSI -GPSS -GPU -GQ -GR -Gr. -gra -Graaf -Graafian -graal -graals -grab -grab-all -grabbable -grabbed -grabber -grabbers -grabber's -grabby -grabbier -grabbiest -grabbing -grabbings -grabble -grabbled -grabbler -grabblers -grabbles -grabbling -grabbots -graben -grabens -grabhook -Grabill -grabman -grabouche -grabs -Gracchus -Grace -grace-and-favor -grace-and-favour -grace-cup -graced -graceful -gracefuller -gracefullest -gracefully -gracefulness -gracefulnesses -Gracey -graceless -gracelessly -gracelessness -gracelike -Gracemont -gracer -Graces -Graceville -Gracewood -gracy -Gracia -gracias -Gracie -Gracye -Gracilaria -gracilariid -Gracilariidae -gracile -gracileness -graciles -gracilescent -gracilis -gracility -gracing -graciosity -gracioso -graciosos -gracious -graciously -graciousness -graciousnesses -grackle -grackles -Graculus -grad -gradable -gradal -gradate -gradated -gradates -gradatim -gradating -gradation -gradational -gradationally -gradationately -gradations -gradation's -gradative -gradatively -gradatory -graddan -grade -graded -gradefinder -Gradey -Gradeigh -gradeless -gradely -grademark -grader -graders -grades -Gradgrind -Gradgrindian -Gradgrindish -Gradgrindism -Grady -gradient -gradienter -Gradientia -gradients -gradient's -gradin -gradine -gradines -grading -gradings -gradino -gradins -gradiometer -gradiometric -Gradyville -gradometer -Grados -grads -Gradual -graduale -gradualism -gradualist -gradualistic -graduality -gradually -gradualness -graduals -graduand -graduands -graduate -graduated -graduate-professional -graduates -graduateship -graduatical -graduating -graduation -graduations -graduator -graduators -gradus -graduses -Grae -Graeae -graecian -Graecise -Graecised -Graecising -Graecism -Graecize -Graecized -graecizes -Graecizing -Graeco- -graecomania -graecophil -Graeco-Roman -Graeculus -Graehl -Graehme -Graeme -Graettinger -Graf -Grafen -Graff -graffage -graffer -Graffias -graffiti -graffito -Graford -grafship -graft -graftage -graftages -graftdom -grafted -grafter -grafters -graft-hybridism -graft-hybridization -grafting -Grafton -graftonite -graftproof -grafts -Gragano -grager -gragers -Graham -Grahame -grahamism -grahamite -grahams -graham's -Grahamsville -Grahn -Gray -Graiae -Graian -Graiba -grayback -graybacks -gray-barked -graybeard -graybearded -gray-bearded -graybeards -gray-bellied -Graybill -gray-black -gray-blue -gray-bordered -gray-boughed -gray-breasted -gray-brindled -gray-brown -Grayce -gray-cheeked -gray-clad -graycoat -gray-colored -Graycourt -gray-crowned -Graydon -gray-drab -grayed -gray-eyed -grayer -grayest -gray-faced -grayfish -grayfishes -grayfly -Graig -gray-gowned -gray-green -gray-grown -grayhair -gray-haired -grayhead -gray-headed -gray-hooded -grayhound -gray-hued -graying -grayish -grayish-brown -grayishness -Grail -graylag -graylags -Grayland -gray-leaf -gray-leaved -grailer -grayly -grailing -Grayling -graylings -gray-lit -graille -grails -graymail -graymalkin -gray-mantled -graymill -gray-moldering -Graymont -gray-mustached -grain -grainage -grain-burnt -grain-carrying -grain-cleaning -grain-cut -graine -grain-eater -grain-eating -gray-necked -grained -grainedness -grainer -grainery -grainering -grainers -grayness -graynesses -grain-fed -Grainfield -grainfields -Grainger -grain-growing -grainy -grainier -grainiest -graininess -graining -grain-laden -grainland -grainless -grainman -grains -grainsick -grainsickness -grainsman -grainsmen -grainways -grayout -grayouts -graip -graypate -grays -graysby -graysbies -Grayslake -Grayson -gray-speckled -gray-spotted -graisse -Graysville -gray-tailed -graith -graithly -gray-tinted -gray-toned -Graytown -gray-twigged -gray-veined -Grayville -graywacke -graywall -grayware -graywether -gray-white -gray-winged -grakle -Grallae -Grallatores -grallatory -grallatorial -grallic -Grallina -gralline -gralloch -gram -gram. -grama -gramaphone -gramary -gramarye -gramaries -gramaryes -gramas -gramash -gramashes -Grambling -gram-centimeter -grame -gramenite -Gramercy -gramercies -Gram-fast -gramy -gramicidin -Graminaceae -graminaceous -Gramineae -gramineal -gramineous -gramineousness -graminicolous -graminiferous -graminifolious -graminiform -graminin -graminivore -graminivorous -graminology -graminological -graminous -Gramling -gramma -grammalogue -grammar -grammarian -grammarianism -grammarians -grammarless -grammars -grammar's -grammar-school -grammates -grammatic -grammatical -grammaticality -grammatically -grammaticalness -grammaticaster -grammatication -grammaticism -grammaticize -grammatico-allegorical -grammatics -grammatist -grammatistical -grammatite -grammatolator -grammatolatry -grammatology -Grammatophyllum -gramme -grammel -grammes -gram-meter -grammy -grammies -gram-molar -gram-molecular -Grammontine -Grammos -Gram-negative -gramoches -Gramont -Gramophone -gramophones -gramophonic -gramophonical -gramophonically -gramophonist -gramp -grampa -gramper -Grampian -Grampians -Gram-positive -gramps -grampus -grampuses -grams -gram-variable -Gran -Grana -Granada -granadilla -granadillo -Granadine -granado -Granados -granage -granam -granary -granaries -granary's -granat -granate -granatite -granatum -Granby -Granbury -granch -Grand -grand- -grandad -grandada -grandaddy -grandads -grandam -grandame -grandames -grandams -grandaunt -grand-aunt -grandaunts -grandbaby -grandchild -grandchildren -granddad -grand-dad -granddada -granddaddy -granddaddies -granddads -granddam -granddaughter -grand-daughter -granddaughterly -granddaughters -grand-ducal -Grande -grandee -grandeeism -grandees -grandeeship -grander -grandesque -grandest -Grande-Terre -grandeur -grandeurs -grandeval -grandevity -grandevous -grandeza -grandezza -grandfather -grandfatherhood -grandfatherish -grandfatherless -grandfatherly -grandfathers -grandfather's -grandfathership -grandfer -grandfilial -Grandgent -grandgore -Grand-guignolism -grandiflora -grandiloquence -grandiloquent -grandiloquently -grandiloquous -grandiose -grandiosely -grandioseness -grandiosity -grandioso -grandisonant -Grandisonian -Grandisonianism -grandisonous -grandity -grand-juryman -grand-juror -grandly -grandma -grandmama -grandmamma -grandmammy -grandmas -grandmaster -grandmaternal -Grandmontine -grandmother -grandmotherhood -grandmotherism -grandmotherly -grandmotherliness -grandmothers -grandmother's -grandnephew -grand-nephew -grandnephews -grandness -grandnesses -grandniece -grand-niece -grandnieces -grando -grandpa -grandpap -grandpapa -grandpappy -grandparent -grandparentage -grandparental -grandparenthood -grandparents -grandpas -grandpaternal -grandrelle -grands -grand-scale -grandsir -grandsire -grandsirs -grand-slammer -grandson -grandsons -grandson's -grandsonship -grandstand -grandstanded -grandstander -grandstanding -grandstands -grandtotal -granduncle -grand-uncle -granduncles -Grandview -Grandville -Grane -Graner -granes -Granese -granet -Grange -Grangemouth -Granger -grangerisation -grangerise -grangerised -grangeriser -grangerising -grangerism -grangerite -grangerization -grangerize -grangerized -grangerizer -grangerizing -grangers -granges -Grangeville -Grangousier -Grani -grani- -Grania -Graniah -Granicus -Graniela -graniferous -graniform -granilla -granita -granite -granite-dispersing -granite-gneiss -granite-gruss -granitelike -granites -granite-sprinkled -Graniteville -graniteware -granitic -granitical -graniticoline -granitiferous -granitification -granitiform -granitite -granitization -granitize -granitized -granitizing -granitoid -granitoidal -granivore -granivorous -granjeno -Granjon -grank -Granlund -granma -grannam -Granny -Grannia -Granniah -Grannias -grannybush -Grannie -grannies -grannyknot -Grannis -granny-thread -grannom -grano -grano- -granoblastic -granodiorite -granodioritic -Granoff -granogabbro -granola -granolas -granolite -Granolith -granolithic -Granollers -granomerite -granophyre -granophyric -granose -granospherite -grans -Grant -Granta -grantable -granted -grantedly -grantee -grantees -granter -granters -Granth -Grantha -Grantham -Granthem -granthi -Grantia -Grantiidae -grant-in-aid -granting -Grantland -Grantley -Granton -grantor -grantors -Grantorto -Grants -Grantsboro -Grantsburg -Grantsdale -grants-in-aid -grantsman -grantsmanship -grantsmen -Grantsville -Granttown -Grantville -granul- -granula -granular -granulary -granularity -granularities -granularly -granulate -granulated -granulater -granulates -granulating -granulation -granulations -granulative -granulator -granulators -granule -granules -granulet -granuliferous -granuliform -granulite -granulitic -granulitis -granulitization -granulitize -granulization -granulize -granulo- -granuloadipose -granuloblast -granuloblastic -granulocyte -granulocytic -granulocytopoiesis -granuloma -granulomas -granulomata -granulomatosis -granulomatous -granulometric -granulosa -granulose -granulosis -granulous -granum -Granville -Granville-Barker -granza -granzita -grape -grape-bearing -graped -grape-eater -grapeflower -grapefruit -grapefruits -grapeful -grape-hued -grapey -grapeys -Grapeland -grape-leaved -grapeless -grapelet -grapelike -grapeline -grapenuts -grapery -graperies -graperoot -grapes -grape's -grape-shaped -grapeshot -grape-shot -grape-sized -grapeskin -grapestalk -grapestone -grape-stone -Grapeview -Grapeville -Grapevine -grape-vine -grapevines -grapewise -grapewort -graph -Graphalloy -graphanalysis -graphed -grapheme -graphemes -graphemic -graphemically -graphemics -grapher -graphy -graphic -graphical -graphically -graphicalness -graphicly -graphicness -graphics -graphic-texture -Graphidiaceae -graphing -Graphiola -graphiology -graphiological -graphiologist -Graphis -graphist -graphite -graphiter -graphites -graphitic -graphitizable -graphitization -graphitize -graphitized -graphitizing -graphitoid -graphitoidal -Graphium -grapho- -graphoanalytical -grapholite -graphology -graphologic -graphological -graphologies -graphologist -graphologists -graphomania -graphomaniac -graphomaniacal -graphometer -graphometry -graphometric -graphometrical -graphometrist -graphomotor -graphonomy -graphophobia -Graphophone -graphophonic -graphorrhea -graphoscope -graphospasm -graphostatic -graphostatical -graphostatics -Graphotype -graphotypic -graphs -graph's -grapy -grapier -grapiest -graping -graplin -grapline -graplines -graplins -grapnel -grapnels -grappa -grappas -Grappelli -grapple -grappled -grapplement -grappler -grapplers -grapples -grappling -Grapsidae -grapsoid -Grapsus -Grapta -graptolite -Graptolitha -Graptolithida -Graptolithina -graptolitic -Graptolitoidea -Graptoloidea -graptomancy -gras -Grasmere -grasni -Grasonville -grasp -graspable -grasped -grasper -graspers -grasping -graspingly -graspingness -graspless -grasps -GRASS -grassant -grassation -grassbird -grass-blade -grass-carpeted -grasschat -grass-clad -grass-cloth -grass-covered -grass-cushioned -grasscut -grasscutter -grass-cutting -Grasse -grass-eater -grass-eating -grassed -grasseye -grass-embroidered -grasser -grasserie -grassers -grasses -grasset -grass-fed -grassfinch -grassfire -grassflat -grassflower -grass-green -grass-growing -grass-grown -grasshook -grass-hook -grasshop -grasshopper -grasshopperdom -grasshopperish -grasshoppers -grasshouse -Grassi -grassy -grassie -grassier -grassiest -grassy-green -grassy-leaved -grassily -grassiness -grassing -grass-killing -grassland -grasslands -grass-leaved -grassless -grasslike -Grassman -grassmen -grass-mowing -grassnut -grass-of-Parnassus -grassplat -grass-plat -grassplot -grassquit -grass-roofed -grassroots -grass-roots -Grasston -grass-tree -grasswards -grassweed -grasswidow -grasswidowhood -grasswork -grassworm -grass-woven -grass-wren -grat -Grata -gratae -grate -grated -grateful -gratefuller -gratefullest -gratefully -gratefullies -gratefulness -gratefulnesses -grateless -gratelike -grateman -grater -graters -grates -gratewise -Grath -grather -Grati -Gratia -Gratiae -Gratian -Gratiana -Gratianna -Gratiano -gratias -graticulate -graticulation -graticule -gratify -gratifiable -gratification -gratifications -gratified -gratifiedly -gratifier -gratifies -gratifying -gratifyingly -gratility -gratillity -gratin -gratinate -gratinated -gratinating -gratine -gratinee -grating -gratingly -gratings -gratins -Gratiola -gratiolin -gratiosolin -Gratiot -gratis -gratitude -Graton -Gratt -grattage -Grattan -gratten -gratters -grattoir -grattoirs -gratton -gratuitant -gratuity -gratuities -gratuity's -gratuito -gratuitous -gratuitously -gratuitousness -gratulant -gratulate -gratulated -gratulating -gratulation -gratulatory -gratulatorily -Gratz -Graubden -Graubert -Graubunden -graunt -graupel -graupels -Graustark -Graustarkian -grauwacke -grav -gravamem -gravamen -gravamens -gravamina -gravaminous -Gravante -gravat -gravata -grave -grave-born -grave-bound -grave-browed -graveclod -gravecloth -graveclothes -grave-clothes -grave-colored -graved -gravedigger -grave-digger -gravediggers -grave-digging -gravedo -grave-faced -gravegarth -graveyard -graveyards -gravel -gravel-bind -gravel-blind -gravel-blindness -graveldiver -graveled -graveless -gravel-grass -gravely -gravelike -graveling -gravelish -gravelled -Gravelly -gravelliness -gravelling -grave-looking -gravelous -gravel-pit -gravelroot -gravels -gravelstone -gravel-stone -gravel-walk -gravelweed -gravemaker -gravemaking -graveman -gravemaster -graven -graveness -gravenesses -Gravenhage -Gravenstein -graveolence -graveolency -graveolent -graver -gravery -grave-riven -graverobber -graverobbing -grave-robbing -gravers -Graves -Gravesend -graveship -graveside -gravest -gravestead -gravestone -gravestones -grave-toned -Gravette -Gravettian -grave-visaged -graveward -gravewards -grave-wax -gravy -gravi- -gravic -gravicembali -gravicembalo -gravicembalos -gravid -gravida -gravidae -gravidas -gravidate -gravidation -gravidity -gravidly -gravidness -graviers -gravies -gravific -Gravigrada -gravigrade -gravilea -gravimeter -gravimeters -gravimetry -gravimetric -gravimetrical -gravimetrically -graving -gravipause -gravisphere -gravispheric -gravitas -gravitate -gravitated -gravitater -gravitates -gravitating -gravitation -gravitational -gravitationally -gravitations -gravitative -Gravity -gravitic -gravity-circulation -gravities -gravity-fed -gravitometer -graviton -gravitons -gravo- -Gravolet -gravure -gravures -grawls -Grawn -Graz -grazable -graze -grazeable -grazed -grazer -grazers -grazes -Grazia -grazie -grazier -grazierdom -graziery -graziers -grazing -grazingly -grazings -grazioso -GRB -GRD -gre -Greabe -greable -greably -Grearson -grease -greaseball -greasebush -greased -grease-heel -grease-heels -greasehorn -greaseless -greaselessness -grease-nut -greasepaint -greaseproof -greaseproofness -greaser -greasers -greases -greasewood -greasy -greasier -greasiest -greasy-headed -greasily -greasiness -greasing -Great -great- -great-armed -great-aunt -great-bellied -great-boned -great-children -great-circle -greatcoat -great-coat -greatcoated -greatcoats -great-crested -great-eared -great-eyed -greaten -greatened -greatening -greatens -Greater -greatest -great-footed -great-grandaunt -great-grandchild -great-grandchildren -great-granddaughter -great-grandfather -great-grandmother -great-grandnephew -great-grandniece -great-grandparent -great-grandson -great-granduncle -great-great- -great-grown -greathead -great-head -great-headed -greatheart -greathearted -great-hearted -greatheartedly -greatheartedness -great-hipped -greatish -great-leaved -greatly -great-lipped -great-minded -great-mindedly -great-mindedness -greatmouthed -great-nephew -greatness -greatnesses -great-niece -great-nosed -Great-Power -Greats -great-sized -great-souled -great-sounding -great-spirited -great-stemmed -great-tailed -great-uncle -great-witted -greave -greaved -greaves -Greb -grebe -Grebenau -grebes -Grebo -grecale -grece -Grecia -Grecian -Grecianize -grecians -grecing -Grecise -Grecised -Grecising -Grecism -Grecize -Grecized -grecizes -Grecizing -Greco -Greco- -Greco-american -Greco-asiatic -Greco-buddhist -Greco-bulgarian -Greco-cretan -Greco-egyptian -Greco-hispanic -Greco-iberian -Greco-Italic -Greco-latin -Greco-macedonian -Grecomania -Grecomaniac -Greco-mohammedan -Greco-oriental -Greco-persian -Grecophil -Greco-phoenician -Greco-phrygian -Greco-punic -Greco-Roman -Greco-sicilian -Greco-trojan -Greco-turkish -grecoue -grecque -Gredel -gree -Greece -greed -greedy -greedier -greediest -greedygut -greedy-gut -greedyguts -greedily -greediness -greedinesses -greedless -greeds -greedsome -greegree -greegrees -greeing -Greek -Greekdom -Greekery -Greekess -Greekish -Greekism -Greekist -Greekize -Greekless -Greekling -greeks -greek's -Greeley -Greeleyville -Greely -Green -greenable -greenage -greenalite -Greenaway -Greenback -green-backed -Greenbacker -Greenbackism -greenbacks -Greenbackville -green-bag -green-banded -Greenbank -greenbark -green-barked -Greenbelt -green-belt -Greenberg -green-black -Greenblatt -green-blind -green-blue -greenboard -green-bodied -green-boled -greenbone -green-bordered -greenbottle -green-boughed -green-breasted -Greenbriar -Greenbrier -greenbug -greenbugs -greenbul -Greenburg -Greenbush -Greencastle -green-clad -Greencloth -greencoat -green-crested -green-curtained -Greendale -green-decked -Greendell -Greene -Greenebaum -greened -green-edged -greeney -green-eyed -green-embroidered -greener -greenery -greeneries -Greenes -greenest -Greeneville -green-faced -green-feathered -Greenfield -greenfinch -greenfish -green-fish -greenfishes -greenfly -green-fly -greenflies -green-flowered -Greenford -green-fringed -greengage -green-garbed -greengill -green-gilled -green-glazed -green-gold -green-gray -greengrocer -greengrocery -greengroceries -greengrocers -green-grown -green-haired -Greenhalgh -Greenhall -greenhead -greenheaded -green-headed -greenheart -greenhearted -greenhew -greenhide -Greenhills -greenhood -greenhorn -greenhornism -greenhorns -greenhouse -green-house -greenhouses -greenhouse's -green-hued -Greenhurst -greeny -greenyard -green-yard -greenie -green-yellow -greenier -greenies -greeniest -greening -greenings -greenish -greenish-blue -greenish-flowered -greenish-yellow -greenishness -greenkeeper -greenkeeping -Greenland -Greenlander -Greenlandic -Greenlandish -greenlandite -Greenlandman -Greenlane -Greenlawn -Greenleaf -green-leaved -Greenlee -greenleek -green-legged -greenless -greenlet -greenlets -greenly -greenling -Greenman -green-mantled -greenness -greennesses -Greenock -greenockite -Greenough -greenovite -green-peak -Greenport -Greenquist -green-recessed -green-ribbed -greenroom -green-room -greenrooms -green-rotted -greens -green-salted -greensand -green-sand -greensauce -Greensboro -Greensburg -Greensea -green-seeded -greenshank -green-shaving -green-sheathed -green-shining -greensick -greensickness -greenside -greenskeeper -green-skinned -greenslade -green-sleeves -green-stained -Greenstein -greenstick -greenstone -green-stone -green-striped -greenstuff -green-suited -greensward -greenswarded -greentail -green-tail -green-tailed -greenth -green-throated -greenths -greenthumbed -green-tinted -green-tipped -Greentown -Greentree -green-twined -greenuk -Greenup -Greenvale -green-veined -Greenview -Greenville -Greenway -Greenwald -greenware -greenwax -greenweed -Greenwell -Greenwich -greenwing -green-winged -greenwithe -Greenwood -greenwoods -greenwort -Greer -Greerson -grees -greesagh -greese -greeshoch -Greeson -greet -greeted -greeter -greeters -greeting -greetingless -greetingly -greetings -greets -greeve -Grefe -Grefer -Greff -greffe -greffier -greffotome -Greg -Grega -gregal -gregale -gregaloid -gregarian -gregarianism -Gregarina -Gregarinae -Gregarinaria -gregarine -gregarinian -Gregarinida -gregarinidal -gregariniform -Gregarinina -Gregarinoidea -gregarinosis -gregarinous -gregarious -gregariously -gregariousness -gregariousnesses -gregaritic -gregatim -gregau -grege -Gregg -gregge -greggle -Greggory -greggriffin -Greggs -grego -Gregoire -Gregoor -Gregor -Gregory -Gregorian -Gregorianist -Gregorianize -Gregorianizer -Gregorio -gregory-powder -Gregorius -gregos -Gregrory -Gregson -Grey -greyback -grey-back -greybeard -Greybull -grey-cheeked -Greycliff -greycoat -grey-coat -greyed -greyer -greyest -greyfish -greyfly -greyflies -Greig -greige -greiges -grey-headed -greyhen -grey-hen -greyhens -greyhound -greyhounds -Greyiaceae -greying -greyish -greylag -greylags -greyly -greyling -greillade -Greimmerath -grein -Greiner -greyness -greynesses -greing -Greynville -greypate -greys -greisen -greisens -greyskin -Greyso -Greyson -grey-state -greystone -Greysun -greit -greith -greywacke -greyware -greywether -Grekin -greking -grelot -gremial -gremiale -gremials -gremio -gremlin -gremlins -gremmy -gremmie -gremmies -Grenache -Grenada -grenade -grenades -grenade's -Grenadian -grenadier -grenadierial -grenadierly -grenadiers -grenadiership -grenadilla -grenadin -grenadine -Grenadines -grenado -grenat -grenatite -Grendel -grene -Grenelle -Grenfell -Grenier -Grenloch -Grenoble -Grenola -Grenora -Grenville -GREP -gres -Gresham -gresil -gressible -Gressoria -gressorial -gressorious -gret -Greta -Gretal -Gretchen -Grete -Gretel -Grethel -Gretna -Gretry -Gretta -greund -Greuze -Grevera -Greville -Grevillea -Grew -grewhound -Grewia -Grewitz -grewsome -grewsomely -grewsomeness -grewsomer -grewsomest -grewt -grex -grf -GRI -gry -gry- -gribane -gribble -gribbles -Gricault -grice -grid -gridded -gridder -gridders -gridding -griddle -griddlecake -griddlecakes -griddled -griddler -griddles -griddling -gride -gryde -grided -gridelin -Grider -grides -griding -gridiron -gridirons -Gridley -gridlock -grids -grid's -grieben -griece -grieced -griecep -grief -grief-bowed -grief-distraught -grief-exhausted -griefful -grieffully -grief-inspired -griefless -grieflessness -griefs -grief's -grief-scored -grief-shot -grief-stricken -grief-worn -Grieg -griege -grieko -Grier -Grierson -grieshoch -grieshuckle -grievable -grievance -grievances -grievance's -grievant -grievants -Grieve -grieved -grievedly -griever -grievers -grieves -grieveship -grieving -grievingly -grievous -grievously -grievousness -Griff -griffade -griffado -griffaun -griffe -Griffes -Griffy -Griffie -Griffin -griffinage -griffin-beaked -griffinesque -griffin-guarded -griffinhood -griffinish -griffinism -griffins -griffin-winged -Griffis -Griffith -griffithite -Griffiths -Griffithsville -Griffithville -Griffon -griffonage -griffonne -griffons -griffon-vulture -griffs -grift -grifted -grifter -grifters -grifting -Grifton -grifts -grig -griggles -Griggs -Griggsville -Grigioni -Grygla -Grignard -grignet -Grignolino -grigri -grigris -grigs -Grigson -grihastha -grihyasutra -grike -Grikwa -Grilikhes -grill -grillade -grilladed -grillades -grillading -grillage -grillages -grille -grylle -grilled -grillee -griller -grillers -grilles -grillework -grilly -grylli -gryllid -Gryllidae -grilling -gryllos -Gryllotalpa -Grillparzer -grillroom -grills -Gryllus -grillwork -grillworks -grilse -grilses -Grim -grimace -grimaced -grimacer -grimacers -grimaces -grimacier -grimacing -grimacingly -Grimaldi -Grimaldian -grimalkin -Grimaud -Grimbal -Grimbald -Grimbly -grim-cheeked -grime -grimed -grim-eyed -Grimes -Grimesland -grim-faced -grim-featured -grim-frowning -grimful -grimgribber -grim-grinning -Grimhild -grimy -grimier -grimiest -grimy-handed -grimily -grimines -griminess -griming -grimly -grimliness -grim-looking -Grimm -grimme -grimmer -grimmest -Grimmia -Grimmiaceae -grimmiaceous -grimmish -grimness -grimnesses -grimoire -Grimona -Grimonia -grimp -Grimsby -grim-set -grimsir -grimsire -Grimsley -Grimstead -grim-visaged -grin -Grynaeus -grinagog -grinch -grincome -grind -grindable -grindal -grinded -Grindelia -Grindelwald -grinder -grindery -grinderies -grinderman -grinders -grinding -grindingly -grindings -Grindlay -Grindle -grinds -grindstone -grindstones -grindstone's -Gring -gringo -gringole -gringolee -gringophobia -gringos -Grinling -grinned -Grinnell -Grinnellia -grinner -grinners -grinny -grinnie -grinning -grinningly -grins -grint -grinter -grintern -Grinzig -griot -griots -griotte -grip -grypanian -gripe -grype -griped -gripeful -gripey -griper -gripers -gripes -gripgrass -griph -gryph -Gryphaea -griphe -griphite -gryphite -gryphon -gryphons -Griphosaurus -Gryphosaurus -griphus -gripy -gripier -gripiest -griping -gripingly -gripless -gripman -gripmen -gripment -gryposis -Grypotherium -grippal -grippe -gripped -grippelike -gripper -grippers -grippes -grippy -grippier -grippiest -grippiness -gripping -grippingly -grippingness -grippit -gripple -gripple-handed -grippleness -grippotoxin -GRIPS -gripsack -gripsacks -gript -Griqua -griquaite -Griqualander -Gris -grisaille -grisailles -gris-amber -grisard -grisbet -grysbok -gris-de-lin -grise -Griselda -Griseldis -griseofulvin -griseous -grisette -grisettes -grisettish -grisgris -gris-gris -Grishilda -Grishilde -Grishun -griskin -griskins -grisled -grisly -grislier -grisliest -grisliness -Grison -Grisons -grisounite -grisoutine -grisping -Grissel -grissen -grissens -grisset -Grissom -grissons -grist -gristbite -Gristede -grister -Gristhorbia -gristy -gristle -gristles -gristly -gristlier -gristliest -gristliness -gristmill -gristmiller -gristmilling -gristmills -grists -Griswold -Grit -grith -grithbreach -grithman -griths -gritless -gritrock -grits -grit's -gritstone -gritted -gritten -gritter -gritty -grittie -grittier -grittiest -grittily -grittiness -gritting -grittle -grivation -grivet -grivets -grivna -grivois -grivoise -Griz -grizard -Grizel -Grizelda -grizelin -Grizzel -grizzle -grizzled -grizzler -grizzlers -grizzles -grizzly -grizzlier -grizzlies -grizzliest -grizzlyman -grizzliness -grizzling -Grnewald -GRO -gro. -groan -groaned -groaner -groaners -groanful -groaning -groaningly -groans -Groark -groat -groats -groatsworth -Grobe -grobian -grobianism -grocer -grocerdom -groceress -grocery -groceries -groceryman -grocerymen -grocerly -grocers -grocer's -grocerwise -groceteria -Grochow -grockle -Grodin -Grodno -Groenendael -groenlandicus -Groesbeck -Groesz -Groete -Grof -Grofe -groff -grog -Grogan -grogged -grogger -groggery -groggeries -groggy -groggier -groggiest -groggily -grogginess -grogginesses -grogging -grognard -grogram -grograms -grogs -grogshop -grogshops -Groh -groin -groyne -groined -groinery -groynes -groining -groins -Groland -Grolier -Grolieresque -groma -gromatic -gromatical -gromatics -gromet -Gromia -Gromyko -gromil -gromyl -Gromme -grommet -grommets -gromwell -gromwells -Gronchi -grond -Grondin -grondwet -Groningen -Gronseth -gront -groof -groo-groo -groom -Groome -groomed -groomer -groomers -groomy -grooming -groomish -groomishly -groomlet -groomling -groom-porter -grooms -groomsman -groomsmen -groop -grooper -Groos -groose -Groot -Groote -Grootfontein -grooty -groove -groove-billed -grooved -grooveless -groovelike -groover -grooverhead -groovers -grooves -groovy -groovier -grooviest -grooviness -grooving -groow -GROPE -groped -groper -gropers -gropes -groping -gropingly -Gropius -Gropper -gropple -Grory -groroilite -grorudite -Gros -grosbeak -grosbeaks -Grosberg -groschen -Groscr -Grose -groser -groset -grosgrain -grosgrained -grosgrains -Grosmark -Gross -grossart -gross-beak -gross-bodied -gross-brained -Grosse -grossed -Grosseile -grossen -grosser -grossers -grosses -grossest -Grosset -Grosseteste -Grossetete -gross-featured -gross-fed -grosshead -gross-headed -grossierete -grossify -grossification -grossing -grossirete -gross-jawed -grossly -gross-lived -Grossman -gross-mannered -gross-minded -gross-money -gross-natured -grossness -grossnesses -grosso -gross-pated -grossulaceous -grossular -Grossularia -Grossulariaceae -grossulariaceous -grossularious -grossularite -Grosswardein -gross-witted -Grosvenor -Grosvenordale -Grosz -grosze -groszy -grot -Grote -groten -grotesco -Grotesk -grotesque -grotesquely -grotesqueness -grotesquery -grotesquerie -grotesqueries -grotesques -Grotewohl -grothine -grothite -Grotian -Grotianism -Grotius -Groton -grots -grottesco -grotty -grottier -grotto -grottoed -Grottoes -grottolike -grottos -grotto's -grottowork -grotzen -grouch -grouched -grouches -Grouchy -grouchier -grouchiest -grouchily -grouchiness -grouching -grouchingly -groucho -grouf -grough -ground -groundable -groundably -groundage -ground-ash -ground-bait -groundberry -groundbird -ground-bird -groundbreaker -ground-cherry -ground-down -grounded -groundedly -groundedness -grounden -groundenell -grounder -grounders -ground-fast -ground-floor -groundflower -groundhog -ground-hog -groundhogs -groundy -ground-ice -grounding -ground-ivy -groundkeeper -groundless -groundlessly -groundlessness -groundly -groundline -ground-line -groundliness -groundling -groundlings -groundman -ground-man -groundmass -groundneedle -groundnut -ground-nut -groundout -ground-pea -ground-pine -ground-plan -ground-plate -groundplot -ground-plot -ground-rent -Grounds -ground-sea -groundsel -groundsheet -ground-sheet -groundsill -groundskeep -groundskeeping -ground-sluicer -groundsman -groundspeed -ground-squirrel -groundswell -ground-swell -groundswells -ground-tackle -ground-to-air -ground-to-ground -groundway -groundwall -groundward -groundwards -groundwater -groundwaters -groundwave -groundwood -groundwork -groundworks -group -groupable -groupage -groupageness -group-connect -group-conscious -grouped -grouper -groupers -groupie -groupies -grouping -groupings -groupist -grouplet -groupment -groupoid -groupoids -groups -groupthink -groupwise -Grous -grouse -grouseberry -groused -grouseless -grouselike -grouser -grousers -grouses -grouseward -grousewards -grousy -grousing -grout -grouted -grouter -grouters -grouthead -grout-head -grouty -groutier -groutiest -grouting -groutite -groutnoll -grouts -grouze -Grove -groved -grovel -Groveland -groveled -groveler -grovelers -groveless -groveling -grovelingly -grovelings -grovelled -groveller -grovelling -grovellingly -grovellings -grovels -Groveman -Grover -grovers -Grovertown -Groves -grovet -Groveton -Grovetown -grovy -Grow -growable -growan -growed -grower -growers -growing -growingly -growingupness -growl -growled -growler -growlery -growleries -growlers -growly -growlier -growliest -growliness -growling -growlingly -growls -grown -grownup -grown-up -grown-upness -grownups -grownup's -grows -growse -growsome -growth -growthful -growthy -growthiness -growthless -growths -growze -grozart -grozer -grozet -grozing-iron -Grozny -GRPMOD -grr -GRS -gr-s -grub -grub- -Grubb -grubbed -grubber -grubbery -grubberies -grubbers -grubby -grubbier -grubbies -grubbiest -grubbily -grubbiness -grubbinesses -grubbing -grubble -Grubbs -Grube -Gruber -grubhood -grubless -Grubman -grub-prairie -grubroot -Grubrus -grubs -grub's -grubstake -grubstaked -grubstaker -grubstakes -grubstaking -Grubstreet -grub-street -Grubville -grubworm -grubworms -grucche -Gruchot -grudge -grudged -grudgeful -grudgefully -grudgefulness -grudgekin -grudgeless -grudgeons -grudger -grudgery -grudgers -grudges -grudge's -grudging -grudgingly -grudgingness -grudgment -grue -gruel -grueled -grueler -gruelers -grueling -gruelingly -gruelings -gruelled -grueller -gruellers -gruelly -gruelling -gruellings -gruels -Gruemberger -Gruenberg -Grues -gruesome -gruesomely -gruesomeness -gruesomer -gruesomest -Gruetli -gruf -gruff -gruffed -gruffer -gruffest -gruffy -gruffier -gruffiest -gruffily -gruffiness -gruffing -gruffish -gruffly -gruffness -gruffs -gruft -grufted -grugous -grugru -gru-gru -grugrus -Gruhenwald -Gruidae -Gruyere -gruyeres -gruiform -Gruiformes -gruine -Gruyre -Gruis -gruys -Gruithuisen -Grulla -grum -grumble -grumbled -grumbler -grumblers -grumbles -grumblesome -Grumbletonian -grumbly -grumbling -grumblingly -grume -Grumello -grumes -Grumium -grumly -Grumman -grummel -grummels -grummer -grummest -grummet -grummeter -grummets -grumness -grumose -grumous -grumousness -grump -grumped -grumph -grumphy -grumphie -grumphies -grumpy -grumpier -grumpiest -grumpily -grumpiness -grumping -grumpish -grumpishness -grumps -grun -Grunberg -grunch -grundel -Grundy -Grundified -Grundyism -Grundyist -Grundyite -grundy-swallow -Grundlov -grundsil -Grunenwald -grunerite -gruneritization -Grunewald -grunge -grunges -grungy -grungier -grungiest -grunion -grunions -Grunitsky -grunswel -grunt -grunted -grunter -grunters -Grunth -grunting -gruntingly -gruntle -gruntled -gruntles -gruntling -grunts -grunzie -gruppetto -gruppo -Grus -grush -grushie -Grusian -Grusinian -gruss -Grussing -grutch -grutched -grutches -grutching -grutten -Gruver -grx -GS -g's -GSA -GSAT -GSBCA -GSC -Gschu -GSFC -G-shaped -G-sharp -GSR -G-string -G-strophanthin -GSTS -G-suit -GT -gt. -Gta -GTC -gtd -gtd. -GTE -gteau -Gteborg -Gterdmerung -Gtersloh -gthite -Gtingen -G-type -GTO -GTS -GTSI -GTT -GU -guaba -guacacoa -guacamole -guachamaca -Guachanama -guacharo -guacharoes -guacharos -guachipilin -Guacho -Guacico -guacimo -guacin -guaco -guaconize -guacos -Guadagnini -Guadalajara -Guadalcanal -guadalcazarite -Guadalquivir -Guadalupe -Guadalupita -Guadeloup -Guadeloupe -Guadiana -guadua -Guafo -Guage -guageable -guaguanche -Guaharibo -Guahiban -Guahibo -Guahivo -guayaba -guayabera -guayaberas -guayabi -guayabo -guaiac -guayacan -guaiacol -guaiacolize -guaiacols -guaiaconic -guaiacs -guaiacum -guaiacums -Guayama -Guayaniil -Guayanilla -Guayaqui -Guayaquil -guaiaretic -guaiasanol -guaican -Guaycuru -Guaycuruan -Guaymas -Guaymie -Guaynabo -guaiocum -guaiocums -guaiol -Guaira -guayroto -Guayule -guayules -guajillo -guajira -guajiras -guaka -Gualaca -Gualala -Gualterio -Gualtiero -Guam -guama -guamachil -Guamanian -guamuchil -guan -Guana -guanabana -guanabano -Guanabara -guanaco -guanacos -guanay -guanayes -guanays -guanajuatite -Guanajuato -guanamine -guanare -guanase -guanases -Guanche -guaneide -guanethidine -guango -Guanica -guanidin -guanidine -guanidins -guanidopropionic -guaniferous -guanyl -guanylic -guanin -guanine -guanines -guanins -guanize -guano -guanophore -guanos -guanosine -guans -Guantanamo -Guantnamo -guao -guapena -guapilla -guapinol -Guapor -Guapore -Guaque -guar -guar. -guara -guarabu -guaracha -guarachas -guarache -guaraguao -guarana -guarand -Guarani -Guaranian -Guaranies -guaranin -guaranine -Guaranis -guarantee -guaranteed -guaranteeing -guaranteer -guaranteers -guarantees -guaranteeship -guaranteing -guaranty -guarantied -guaranties -guarantying -guarantine -guarantor -guarantors -guarantorship -guarapo -guarapucu -Guaraunan -Guarauno -guard -guardable -guarda-costa -Guardafui -guardage -guardant -guardants -guard-boat -guarded -guardedly -guardedness -guardee -guardeen -guarder -guarders -guardfish -guard-fish -guardful -guardfully -guardhouse -guard-house -guardhouses -Guardi -Guardia -guardian -guardiancy -guardianess -guardianless -guardianly -guardians -guardian's -guardianship -guardianships -guarding -guardingly -guardless -guardlike -guardo -guardrail -guard-rail -guardrails -guardroom -guard-room -guardrooms -Guards -guardship -guard-ship -guardsman -guardsmen -guardstone -Guarea -guary -guariba -guarico -Guarini -guarinite -Guarino -guarish -Guarneri -Guarnerius -Guarneriuses -Guarnieri -Guarrau -guarri -guars -Guaruan -guasa -Guastalline -Guasti -Guat -Guat. -guatambu -Guatemala -Guatemalan -guatemalans -Guatemaltecan -guatibero -guativere -Guato -Guatoan -Guatusan -Guatuso -Guauaenok -guava -guavaberry -guavas -guavina -guaxima -guaza -Guazuma -guazuti -guazzo -gubat -gubbertush -Gubbin -gubbings -gubbins -gubbo -Gubbrud -guberla -gubernacula -gubernacular -gubernaculum -gubernance -gubernation -gubernative -gubernator -gubernatorial -gubernatrix -gubernia -guberniya -guck -gucked -gucki -gucks -gud -gudame -guddle -guddled -guddler -guddling -Gude -Gudea -gudebrother -gudefather -gudemother -Gudermannian -gudes -gudesake -gudesakes -gudesire -gudewife -gudge -gudgeon -gudgeoned -gudgeoning -gudgeons -gudget -Gudmundsson -gudok -Gudren -Gudrin -Gudrun -gue -guebre -guebucu -Guedalla -Gueydan -guejarite -guelder-rose -Guelders -Guelf -Guelfic -Guelfism -Guelph -Guelphic -Guelphish -Guelphism -guemal -guemul -Guendolen -guenepe -Guenevere -Guenna -guenon -guenons -Guenther -Guenzi -guepard -gueparde -Guerche -guerdon -guerdonable -guerdoned -guerdoner -guerdoning -guerdonless -guerdons -guereba -Gueret -guereza -guergal -Guericke -Guerickian -gueridon -gueridons -guerilla -guerillaism -guerillas -Guerin -Guerinet -guerison -guerite -guerites -Guerneville -Guernica -Guernsey -guernseyed -Guernseys -Guerra -Guerrant -guerre -Guerrero -guerrila -guerrilla -guerrillaism -guerrillas -guerrilla's -guerrillaship -Guesde -Guesdism -Guesdist -guess -guessable -guessed -guesser -guessers -guesses -guessing -guessingly -guessive -guess-rope -guesstimate -guesstimated -guesstimates -guesstimating -guess-warp -guesswork -guess-work -guessworker -Guest -guestchamber -guest-chamber -guested -guesten -guester -guesthouse -guesthouses -guestimate -guestimated -guestimating -guesting -guestive -guestless -Guestling -guestmaster -guest-rope -guests -guest's -guestship -guest-warp -guestwise -guet-apens -Guetar -Guetare -guetre -Gueux -Guevara -Guevarist -gufa -guff -guffaw -guffawed -guffawing -guffaws -Guffey -guffer -guffy -guffin -guffs -gufought -gugal -Guggenheim -guggle -guggled -guggles -gugglet -guggling -guglet -guglets -guglia -Guglielma -Guglielmo -guglio -gugu -Guha -Guhayna -guhr -GUI -Guy -guiac -Guiana -Guyana -Guianan -Guyandot -Guianese -Guiano-brazilian -guib -guiba -Guibert -guichet -guid -guidable -guidage -guidance -guidances -GUIDE -guideboard -guidebook -guide-book -guidebooky -guidebookish -guidebooks -guidebook's -guidecraft -guided -guideless -guideline -guidelines -guideline's -guidepost -guide-post -guideposts -guider -guideress -guider-in -Guiderock -guiders -guidership -guides -guideship -guideway -guiding -guidingly -guidman -Guido -guydom -guidon -Guidonia -Guidonian -guidons -Guidotti -guids -guidsire -guidwife -guidwilly -guidwillie -guyed -Guienne -Guyenne -Guyer -guyers -guige -Guignardia -guigne -guignol -guying -guijo -Guilandina -Guilbert -Guild -guild-brother -guilder -Guilderland -guilders -Guildford -guildhall -guild-hall -guildic -guildite -guildry -Guildroy -guilds -guildship -guildsman -guildsmen -guild-socialistic -guile -guiled -guileful -guilefully -guilefulness -guileless -guilelessly -guilelessness -guilelessnesses -guiler -guilery -guiles -guilfat -Guilford -guily -guyline -guiling -Guillaume -guillem -Guillema -guillemet -Guillemette -guillemot -Guillen -Guillermo -guillevat -guilloche -guillochee -guillotinade -guillotine -guillotined -guillotinement -guillotiner -guillotines -guillotining -guillotinism -guillotinist -guilt -guilt-feelings -guiltful -guilty -guilty-cup -guiltier -guiltiest -guiltily -guiltiness -guiltinesses -guiltless -guiltlessly -guiltlessness -guilts -guiltsick -Guimar -guimbard -Guymon -Guimond -guimpe -guimpes -Guin -Guin. -Guinda -guinde -Guinea -Guinea-Bissau -guinea-cock -guinea-fowl -guinea-hen -Guineaman -guinea-man -Guinean -guinea-pea -guineapig -guinea-pig -guineas -Guinevere -guinfo -Guinn -Guinna -Guinness -Guion -Guyon -guyot -guyots -guipure -guipures -Guipuzcoa -Guiraldes -guirlande -guiro -Guys -Guisard -guisards -guisarme -Guiscard -Guise -guised -guiser -guises -guise's -Guisian -guising -Guysville -guitar -guitarfish -guitarfishes -guitarist -guitarists -guitarlike -guitar-picker -guitars -guitar's -guitar-shaped -guitermanite -guitguit -guit-guit -Guyton -guytrash -Guitry -Guittonian -guywire -Guizot -Gujar -Gujarat -Gujarati -Gujerat -Gujral -Gujranwala -Gujrati -gul -Gula -gulae -Gulag -gulags -gulaman -gulancha -guland -Gulanganes -gular -gularis -gulas -gulash -Gulbenkian -gulch -gulches -gulch's -guld -gulden -guldengroschen -guldens -gule -gules -Gulf -gulfed -Gulfhammock -gulfy -gulfier -gulfiest -gulfing -gulflike -Gulfport -gulfs -gulf's -gulfside -gulfwards -gulfweed -gulf-weed -gulfweeds -Gulgee -gulgul -guly -Gulick -gulinula -gulinulae -gulinular -gulist -gulix -gull -gullability -gullable -gullably -gullage -Gullah -gull-billed -gulled -gulley -gulleys -guller -gullery -gulleries -gullet -gulleting -gullets -gully -gullibility -gullible -gullibly -gullied -gullies -gullygut -gullyhole -gullying -gulling -gullion -gully-raker -gully's -gullish -gullishly -gullishness -Gulliver -gulllike -gull-like -gulls -Gullstrand -gull-wing -gulmohar -Gulo -gulonic -gulose -gulosity -gulosities -gulp -gulped -gulper -gulpers -gulph -gulpy -gulpier -gulpiest -gulpin -gulping -gulpingly -gulps -gulravage -guls -gulsach -Gulston -gult -Gum -Gumberry -gumby -gum-bichromate -Gumbo -gumboil -gumboils -gumbolike -gumbo-limbo -gumbo-limbos -gumboot -gumboots -gumbos -gumbotil -gumbotils -gumchewer -gum-dichromate -gumdigger -gumdigging -gumdrop -gumdrops -gumfield -gumflower -gum-gum -gumhar -gumi -gumihan -gum-lac -gumlah -gumless -gumly -gumlike -gumlikeness -gumma -gummage -gummaker -gummaking -gummas -gummata -gummatous -gummed -gummer -gummers -gummy -gummic -gummier -gummiest -gummiferous -gummy-legged -gumminess -gumming -gum-myrtle -gummite -gummites -gummose -gummoses -gummosis -gummosity -gummous -gump -gumpheon -gumphion -Gumpoldskirchner -gumption -gumptionless -gumptions -gumptious -gumpus -gum-resinous -gums -gum's -gum-saline -gumshield -gumshoe -gumshoed -gumshoeing -gumshoes -gumshoing -gum-shrub -gum-top -gumtree -gum-tree -gumtrees -gumweed -gumweeds -gumwood -gumwoods -Gun -guna -Gunar -gunarchy -Gunas -gunate -gunated -gunating -gunation -gunbarrel -gunbearer -gunboat -gun-boat -gunboats -gunbright -gunbuilder -gun-carrying -gun-cleaning -gun-cotten -guncotton -gunda -gundalow -gundeck -gun-deck -gundelet -gundelow -Gunderson -gundi -gundy -gundie -gundygut -gundog -gundogs -Gundry -gunebo -gun-equipped -gunfight -gunfighter -gunfighters -gunfighting -gunfights -gunfire -gunfires -gunflint -gunflints -gunfought -gung -gunge -gung-ho -gunhouse -gunyah -gunyang -gunyeh -Gunilla -Gunite -guniter -gunj -gunja -gunjah -gunk -gunkhole -gunkholed -gunkholing -gunky -gunks -gunl -gunlayer -gunlaying -gunless -gunline -Gunlock -gunlocks -gunmaker -gunmaking -gunman -gun-man -gunmanship -gunmen -gunmetal -gun-metal -gunmetals -gun-mounted -Gunn -gunnage -Gunnar -gunne -gunned -gunnel -gunnels -gunnen -Gunner -Gunnera -Gunneraceae -gunneress -gunnery -gunneries -gunners -gunner's -gunnership -gunny -gunnybag -gunny-bag -gunnies -Gunning -gunnings -gunnysack -gunnysacks -Gunnison -gunnung -gunocracy -gunong -gunpaper -gunpapers -gunplay -gunplays -gunpoint -gunpoints -gunport -gunpowder -gunpowdery -gunpowderous -gunpowders -gunpower -gunrack -gunreach -gun-rivet -gunroom -gun-room -gunrooms -gunrunner -gunrunning -guns -gun's -gunsel -gunsels -gun-shy -gun-shyness -gunship -gunships -gunshop -gunshot -gun-shot -gunshots -gunsling -gunslinger -gunslingers -gunslinging -gunsman -gunsmith -gunsmithery -gunsmithing -gunsmiths -gunster -gunstick -gunstock -gun-stock -gunstocker -gunstocking -gunstocks -gunstone -Guntar -Gunter -Guntersville -gun-testing -Gunthar -Gunther -gun-toting -Guntown -guntub -Guntur -gunung -gunwale -gunwales -gunwhale -Gunz -Gunzburg -Gunzian -Gunz-mindel -gup -guppy -guppies -Gupta -guptavidya -Gur -Gurabo -Guran -Gurango -gurdfish -gurdy -gurdle -Gurdon -gurdwara -Gurevich -gurge -gurged -gurgeon -gurgeons -gurges -gurging -gurgitation -gurgle -gurgled -gurgles -gurglet -gurglets -gurgly -gurgling -gurglingly -gurgoyl -gurgoyle -gurgulation -gurgulio -Guria -Gurian -Gurias -Guric -Gurish -gurjan -Gurjara -gurjun -gurk -Gurkha -Gurkhali -Gurkhas -Gurl -gurle -Gurley -gurlet -gurly -Gurmukhi -gurnard -gurnards -Gurnee -Gurney -Gurneyite -gurneys -gurnet -gurnets -gurnetty -gurniad -Gurolinick -gurr -gurrah -gurry -gurries -Gursel -gursh -gurshes -gurt -Gurtner -gurts -guru -gurus -guruship -guruships -GUS -gusain -Gusba -Gusella -guser -guserid -gush -gushed -Gusher -gushers -gushes -gushet -gushy -gushier -gushiest -gushily -gushiness -gushing -gushingly -gushingness -gusla -gusle -guslee -Guss -gusset -gusseted -gusseting -gussets -Gussi -Gussy -Gussie -gussied -gussies -gussying -Gussman -gust -Gusta -gustable -gustables -Gustaf -Gustafson -Gustafsson -gustard -gustation -gustative -gustativeness -gustatory -gustatorial -gustatorially -gustatorily -Gustav -Gustave -Gustavo -Gustavus -gusted -gustful -gustfully -gustfulness -Gusti -Gusty -Gustie -gustier -gustiest -gustily -Gustin -Gustine -gustiness -gusting -gustless -gusto -gustoes -gustoish -Guston -gustoso -gusts -gust's -Gustus -Gut -gut-ache -gutbucket -Gutenberg -Guthrey -Guthry -Guthrie -Guthrun -Guti -gutierrez -Gutium -gutless -gutlessness -gutlike -gutling -Gutnic -Gutnish -Gutow -guts -gutser -gutsy -gutsier -gutsiest -gutsily -gutsiness -gutt -gutta -guttable -guttae -gutta-gum -gutta-percha -guttar -guttate -guttated -guttatim -guttation -gutte -gutted -guttee -Guttenberg -gutter -Guttera -gutteral -gutterblood -gutter-blood -gutter-bred -guttered -gutter-grubbing -Guttery -guttering -gutterize -gutterlike -gutterling -gutterman -gutters -guttersnipe -gutter-snipe -guttersnipes -guttersnipish -gutterspout -gutterwise -gutti -gutty -guttide -guttie -guttier -guttiest -guttifer -Guttiferae -guttiferal -Guttiferales -guttiferous -guttiform -guttiness -gutting -guttle -guttled -guttler -guttlers -guttles -guttling -guttula -guttulae -guttular -guttulate -guttule -guttulous -guttur -guttural -gutturalisation -gutturalise -gutturalised -gutturalising -gutturalism -gutturality -gutturalization -gutturalize -gutturalized -gutturalizing -gutturally -gutturalness -gutturals -gutturine -gutturize -gutturo- -gutturonasal -gutturopalatal -gutturopalatine -gutturotetany -guttus -gutweed -gutwise -gutwort -guv -guvacine -guvacoline -guvs -guz -guze -Guzel -guzerat -Guzman -Guzmania -Guzmco -Guzul -guzzle -guzzled -guzzledom -guzzler -guzzlers -guzzles -guzzling -gv -GW -gwag -Gwalior -gwantus -Gwari -Gwaris -Gwawl -gweduc -gweduck -gweducks -gweducs -gweed -gweeon -Gweyn -gwely -Gwelo -GWEN -Gwenda -Gwendolen -Gwendolin -Gwendolyn -Gwendolynne -Gweneth -Gwenette -Gwenn -Gwenneth -Gwenni -Gwenny -Gwennie -Gwenora -Gwenore -Gwent -gwerziou -Gwydion -Gwin -Gwyn -gwine -Gwynedd -Gwyneth -Gwynfa -gwiniad -gwyniad -Gwinn -Gwynn -Gwynne -Gwinner -Gwinnett -Gwynneville -GWS -Gza -Gzhatsk -H -h. -h.a. -H.C. -H.C.F. -H.H. -H.I. -H.I.H. -H.M. -H.M.S. -H.P. -H.Q. -H.R. -H.R.H. -h.s. -H.S.H. -H.S.M. -H.V. -HA -ha' -HAA -haab -haaf -haafs -Haag -haak -Haakon -Haapsalu -haar -Haaretz -Haarlem -haars -Haas -Haase -Hab -Hab. -Haba -Habab -Habacuc -habaera -Habakkuk -Habana -habanera -habaneras -Habanero -Habbe -habble -habbub -Habdalah -habdalahs -Habe -habeas -habena -habenal -habenar -Habenaria -habendum -habenula -habenulae -habenular -Haber -haberdash -haberdasher -haberdasheress -haberdashery -haberdasheries -haberdashers -haberdine -habere -habergeon -Haberman -habet -Habib -habilable -habilant -habilatory -habile -habilement -habiliment -habilimental -habilimentary -habilimentation -habilimented -habiliments -habilitate -habilitated -habilitating -habilitation -habilitator -hability -habille -Habiri -Habiru -habit -habitability -habitable -habitableness -habitably -habitacle -habitacule -habitally -habitan -habitance -habitancy -habitancies -habitans -habitant -habitants -habitat -habitatal -habitate -habitatio -habitation -habitational -habitations -habitation's -habitative -habitator -habitats -habitat's -habited -habit-forming -habiting -habits -habit's -habitual -habituality -habitualize -habitually -habitualness -habitualnesses -habituate -habituated -habituates -habituating -habituation -habituations -habitude -habitudes -habitudinal -habitue -habitues -habiture -habitus -hable -habnab -hab-nab -haboob -haboobs -haboub -Habronema -habronemiasis -habronemic -habrowne -Habsburg -habu -habub -habuka -habus -habutae -habutai -habutaye -HAC -haccucal -HACD -hacek -haceks -hacendado -Hach -hache -Hachiman -hachis -Hachita -Hachman -Hachmann -hachment -Hachmin -hacht -hachure -hachured -hachures -hachuring -hacienda -haciendado -haciendas -hack -hack- -hackamatak -hackamore -Hackathorn -hackbarrow -hackberry -hackberries -hackbolt -hackbush -hackbut -hackbuteer -hackbuts -hackbutter -hackdriver -hacked -hackee -hackeem -hackees -hackeymal -Hackensack -Hacker -hackery -hackeries -hackers -Hackett -Hackettstown -hacky -hackia -hackie -hackies -hackin -hacking -hackingly -hackle -hackleback -Hackleburg -hackled -hackler -hacklers -hackles -hacklet -hackly -hacklier -hackliest -hackling -hacklog -hackmack -hackmall -hackman -hackmatack -hackmen -hack-me-tack -Hackney -hackney-carriage -hackney-chair -hackney-coach -hackneyed -hackneyedly -hackneyedness -hackneyer -hackneying -hackneyism -hackneyman -hackney-man -hackneys -hacks -hacksaw -hacksaws -hacksilber -hackster -hackthorn -hacktree -hackwood -hackwork -hack-work -hackworks -hacqueton -Had -hadada -hadal -Hadamard -Hadar -hadarim -Hadas -Hadassah -Hadasseh -hadaway -hadbot -hadbote -Haddad -Haddam -Hadden -hadder -haddest -haddie -haddin -Haddington -Haddix -haddo -haddock -haddocker -haddocks -Haddon -Haddonfield -hade -Hadean -haded -Haden -Hadendoa -Hadendowa -Hadensville -hadentomoid -Hadentomoidea -hadephobia -Hades -Hadfield -Hadhramaut -Hadhramautian -Hadik -hading -hadit -Hadith -hadiths -hadj -hadjee -hadjees -Hadjemi -hadjes -hadji -Hadjipanos -hadjis -hadjs -hadland -Hadlee -Hadley -Hadleigh -Hadlyme -Hadlock -hadnt -hadn't -Hadramaut -Hadramautian -Hadria -Hadrian -hadrom -hadrome -Hadromerina -hadromycosis -hadron -hadronic -hadrons -hadrosaur -Hadrosaurus -Hadsall -hadst -Hadwin -Hadwyn -hae -haec -haecceity -haecceities -Haeckel -Haeckelian -Haeckelism -haed -haeing -Haeju -haem -haem- -haema- -haemachrome -haemacytometer -haemad -haemagglutinate -haemagglutinated -haemagglutinating -haemagglutination -haemagglutinative -haemagglutinin -haemagogue -haemal -Haemamoeba -haemangioma -haemangiomas -haemangiomata -haemangiomatosis -Haemanthus -Haemaphysalis -haemapophysis -haemaspectroscope -haemat- -haematal -haematein -haematemesis -haematherm -haemathermal -haemathermous -haematic -haematics -haematid -haematin -haematinic -haematinon -haematins -haematinum -haematite -haematitic -haemato- -haematoblast -Haematobranchia -haematobranchiate -haematocele -haematocyst -haematocystis -haematocyte -Haematocrya -haematocryal -haemato-crystallin -haematocrit -haematogenesis -haematogenous -haemato-globulin -haematoid -haematoidin -haematoin -haematolysis -haematology -haematologic -haematological -haematologist -haematoma -haematomas -haematomata -haematometer -Haematophilina -haematophiline -haematophyte -haematopoiesis -haematopoietic -Haematopus -haematorrhachis -haematosepsis -haematosin -haematosis -Haematotherma -haematothermal -haematoxylic -haematoxylin -Haematoxylon -haematozoa -haematozoal -haematozoic -haematozoon -haematozzoa -haematuria -haemia -haemic -haemin -haemins -haemo- -haemoblast -haemochrome -haemocyanin -haemocyte -haemocytoblast -haemocytoblastic -haemocytometer -haemocoel -haemoconcentration -haemodialysis -haemodilution -haemodynamic -haemodynamics -Haemodoraceae -haemodoraceous -haemoflagellate -haemoglobic -haemoglobin -haemoglobinous -haemoglobinuria -haemogram -Haemogregarina -Haemogregarinidae -haemoid -haemolysin -haemolysis -haemolytic -haemometer -Haemon -haemonchiasis -haemonchosis -Haemonchus -haemony -haemophil -haemophile -haemophilia -haemophiliac -haemophilic -haemopod -haemopoiesis -Haemoproteus -haemoptysis -haemorrhage -haemorrhaged -haemorrhagy -haemorrhagia -haemorrhagic -haemorrhaging -haemorrhoid -haemorrhoidal -haemorrhoidectomy -haemorrhoids -haemosporid -Haemosporidia -haemosporidian -Haemosporidium -haemostasia -haemostasis -haemostat -haemostatic -haemothorax -haemotoxic -haemotoxin -haems -Haemulidae -haemuloid -Haemus -haen -haeredes -haeremai -haeres -Ha-erh-pin -Haerle -Haerr -haes -haet -haets -haf -Haff -haffat -haffet -haffets -haffit -haffits -haffkinize -haffle -hafflins -Hafgan -hafis -Hafiz -Hafler -haflin -hafnia -hafnyl -hafnium -hafniums -haft -haftara -Haftarah -Haftarahs -haftaras -haftarot -Haftaroth -hafted -hafter -hafters -hafting -haftorah -haftorahs -haftorot -haftoroth -hafts -Hag -Hag. -hagada -hagadic -hagadist -hagadists -Hagai -Hagaman -Hagan -Haganah -Hagar -hagarene -Hagarite -Hagarstown -Hagarville -hagberry -hagberries -hagboat -hag-boat -hagbolt -hagborn -hagbush -hagbushes -hagbut -hagbuts -hagden -hagdin -hagdon -hagdons -hagdown -Hagecius -hageen -hagein -Hagen -Hagenia -Hager -Hagerman -Hagerstown -hagfish -hagfishes -Haggada -Haggadah -Haggadahs -haggaday -haggadal -haggadas -haggadic -haggadical -haggadist -haggadistic -haggadot -Haggadoth -Haggai -Haggar -Haggard -haggardly -haggardness -haggards -hagged -haggeis -hagger -Haggerty -Haggi -haggy -hagging -haggiographal -haggis -haggises -haggish -haggishly -haggishness -haggister -haggle -haggled -haggler -hagglers -haggles -haggly -haggling -Hagi -hagi- -hagia -hagiarchy -hagiarchies -hagigah -hagio- -hagiocracy -hagiocracies -Hagiographa -hagiographal -hagiographer -hagiographers -hagiography -hagiographic -hagiographical -hagiographies -hagiographist -hagiolater -hagiolatry -hagiolatrous -hagiolith -hagiology -hagiologic -hagiological -hagiologically -hagiologies -hagiologist -hagiophobia -hagioscope -hagioscopic -haglet -haglike -haglin -hagmall -hagmane -hagmena -hagmenay -Hagno -Hagood -hagrid -hagridden -hag-ridden -hagride -hagrider -hagrides -hagriding -hagrode -hagrope -hags -hagseed -hagship -hagstone -Hagstrom -hagtaper -hag-taper -Hague -hagueton -hagweed -hagworm -hah -haha -ha-ha -hahas -Hahira -Hahn -Hahnemann -Hahnemannian -Hahnemannism -Hahnert -hahnium -hahniums -Hahnke -Hahnville -hahs -Hay -Haya -Hayakawa -haiari -Hayari -Hayashi -hay-asthma -Hayatake -Haiathalah -Hayato -hayband -haybird -hay-bird -haybote -hay-bote -haybox -hayburner -haycap -haycart -haick -haycock -hay-cock -haycocks -hay-color -hay-colored -Haida -Haidan -Haidarabad -Haidas -Haidee -hay-de-guy -Hayden -haydenite -Haydenville -Haidinger -haidingerite -Haydn -Haydon -haiduck -Haiduk -Haye -hayed -hayey -hayer -hayers -Hayes -Hayesville -Haifa -hay-fed -hay-fever -hayfield -hay-field -hayfields -hayfork -hay-fork -hayforks -Haig -Haigler -haygrower -Hayyim -haying -hayings -haik -haika -haikai -haikal -Haikh -haiks -haiku -haikun -haikwan -hail -haylage -haylages -Haile -hailed -Hailee -Hailey -Hayley -Haileyville -hailer -hailers -hailes -Hailesboro -hail-fellow -hail-fellow-well-met -Haily -haylift -hailing -hayloft -haylofts -hailproof -hails -hailse -Hailsham -hailshot -hail-shot -hailstone -hailstoned -hailstones -hailstorm -hailstorms -hailweed -Hailwood -Haim -Haym -haymaker -haymakers -haymaking -Hayman -Haymarket -Haimavati -Haimes -Haymes -haymish -Haymo -haymow -hay-mow -haymows -haimsucken -hain -Hainai -Hainan -Hainanese -Hainaut -hainberry -hainch -haine -Hayne -hained -Haines -Haynes -Hainesport -Haynesville -Hayneville -Haynor -hain't -Hay-on-Wye -Hayott -Haiphong -hair -hayrack -hay-rack -hayracks -hayrake -hay-rake -hayraker -hairball -hairballs -hairband -hairbands -hairbeard -hairbell -hairbird -hairbrain -hairbrained -hairbreadth -hairbreadths -hairbrush -hairbrushes -haircap -haircaps -hair-check -hair-checking -haircloth -haircloths -haircut -haircuts -haircut's -haircutter -haircutting -hairdo -hairdodos -hairdos -hair-drawn -hairdress -hairdresser -hairdressers -hairdressing -hair-drier -hairdryer -hairdryers -hairdryer's -haire -haired -hairen -hair-fibered -hairgrass -hair-grass -hairgrip -hairhoof -hairhound -hairy -hairy-armed -hairychested -hairy-chested -hayrick -hay-rick -hayricks -hairy-clad -hayride -hayrides -hairy-eared -hairier -hairiest -hairif -hairy-faced -hairy-foot -hairy-footed -hairy-fruited -hairy-handed -hairy-headed -hairy-legged -hairy-looking -hairiness -hairinesses -hairy-skinned -hairlace -hair-lace -hairless -hairlessness -hairlet -hairlike -hairline -hair-line -hairlines -hair-lip -hairlock -hairlocks -hairmeal -hairmoneering -hairmonger -hairnet -hairnets -hairof -hairpiece -hairpieces -hairpin -hairpins -hair-powder -hair-raiser -hair-raising -hairs -hair's -hairsbreadth -hairs-breadth -hair's-breadth -hairsbreadths -hairse -hair-shirt -hair-sieve -hairsplitter -hair-splitter -hairsplitters -hairsplitting -hair-splitting -hairspray -hairsprays -hairspring -hairsprings -hairst -hairstane -hair-stemmed -hairstyle -hairstyles -hairstyling -hairstylings -hairstylist -hairstylists -hairstone -hairstreak -hair-streak -hair-stroke -hairtail -hair-trigger -hairup -hair-waving -hairweave -hairweaver -hairweavers -hairweaving -hairweed -hairwood -hairwork -hairworks -hairworm -hair-worm -hairworms -Hays -hay-scented -Haise -Hayse -hayseed -hay-seed -hayseeds -haysel -hayshock -Haysi -Haisla -haystack -haystacks -haysuck -Haysville -hait -hay-tallat -Haithal -haythorn -Haiti -Hayti -Haitian -haitians -haytime -Haitink -Hayton -haitsai -haiver -haywagon -Hayward -haywards -hayweed -haywire -haywires -Haywood -hayz -haj -haje -hajes -haji -hajib -hajilij -hajis -hajj -hajjes -hajji -hajjis -hajjs -Hak -hakafoth -Hakai -Hakalau -hakam -hakamim -Hakan -hakdar -Hake -Hakea -Hakeem -hakeems -Hakenkreuz -Hakenkreuze -Hakenkreuzler -hakes -Hakim -hakims -Hakka -Hakluyt -Hako -Hakodate -Hakon -Hakone -haku -HAL -hal- -hala -halacha -Halachah -Halachas -Halachic -halachist -Halachot -Halaf -Halafian -halaka -Halakah -Halakahs -halakha -halakhas -halakhist -halakhot -Halakic -halakist -halakistic -halakists -Halakoth -halal -halala -halalah -halalahs -halalas -halalcor -Haland -halapepe -halas -halation -halations -halavah -halavahs -Halawi -halazone -halazones -Halbe -Halbeib -halberd -halberd-headed -halberdier -halberd-leaved -halberdman -halberds -halberd-shaped -halberdsman -Halbert -halberts -Halbur -halch -Halcyon -Halcyone -halcyonian -halcyonic -Halcyonidae -Halcyoninae -halcyonine -halcyons -Halcottsville -Halda -Haldan -Haldane -Haldanite -Haldas -Haldeman -Halden -Haldes -Haldi -Haldis -haldu -Hale -Haleakala -halebi -Halecomorphi -halecret -haled -haleday -Haledon -Haley -Haleigh -Haleyville -Haleiwa -halely -Halemaumau -haleness -halenesses -Halenia -hale-nut -haler -halers -haleru -halerz -hales -Halesia -halesome -Halesowen -halest -Haletky -Haletta -Halette -Halevi -Halevy -haleweed -half -half- -halfa -half-abandoned -half-accustomed -half-acquainted -half-acquiescent -half-acquiescently -half-acre -half-a-crown -half-addressed -half-admiring -half-admiringly -half-admitted -half-admittedly -half-a-dollar -half-adream -half-affianced -half-afloat -half-afraid -half-agreed -half-alike -half-alive -half-altered -Half-american -Half-americanized -half-and-half -Half-anglicized -half-angry -half-angrily -half-annoyed -half-annoying -half-annoyingly -half-ape -Half-aristotelian -half-armed -half-armor -half-ashamed -half-ashamedly -half-Asian -Half-asiatic -half-asleep -half-assed -half-awake -halfback -half-backed -halfbacks -half-baked -half-bald -half-ball -half-banked -half-baptize -half-barbarian -half-bare -half-barrel -halfbeak -half-beak -halfbeaks -half-beam -half-begging -half-begun -half-belief -half-believed -half-believing -half-bent -half-binding -half-bleached -half-blind -half-blindly -halfblood -half-blood -half-blooded -half-blown -half-blue -half-board -half-boiled -half-boiling -half-boot -half-bound -half-bowl -half-bred -half-breed -half-broken -half-brother -half-buried -half-burned -half-burning -half-bushel -half-butt -half-calf -half-cap -half-carried -half-caste -half-cell -half-cent -half-century -half-centuries -half-chanted -half-cheek -Half-christian -half-civil -half-civilized -half-civilly -half-clad -half-cleaned -half-clear -half-clearly -half-climbing -half-closed -half-closing -half-clothed -half-coaxing -half-coaxingly -halfcock -half-cock -halfcocked -half-cocked -half-colored -half-completed -half-concealed -half-concealing -Half-confederate -half-confessed -half-congealed -half-conquered -half-conscious -half-consciously -half-conservative -half-conservatively -half-consonant -half-consumed -half-consummated -half-contemptuous -half-contemptuously -half-contented -half-contentedly -half-convicted -half-convinced -half-convincing -half-convincingly -half-cooked -half-cordate -half-corrected -half-cotton -half-counted -half-courtline -half-cousin -half-covered -half-cracked -half-crazed -half-crazy -Half-creole -half-critical -half-critically -half-crown -half-crumbled -half-crumbling -half-cured -half-cut -half-Dacron -half-day -Halfdan -half-dark -half-dazed -half-dead -half-deaf -half-deafened -half-deafening -half-decade -half-deck -half-decked -half-decker -half-defiant -half-defiantly -half-deified -half-demented -half-democratic -half-demolished -half-denuded -half-deprecating -half-deprecatingly -half-deserved -half-deservedly -half-destroyed -half-developed -half-digested -half-dying -half-dime -half-discriminated -half-discriminating -half-disposed -half-divine -half-divinely -half-dollar -half-done -half-door -half-dozen -half-dram -half-dressed -half-dressedness -half-dried -half-drowned -half-drowning -half-drunk -half-drunken -half-dug -half-eagle -half-earnest -half-earnestly -half-eaten -half-ebb -half-educated -Half-elizabethan -half-embraced -half-embracing -half-embracingly -halfen -half-enamored -halfendeal -half-enforced -Half-english -halfer -half-erased -half-evaporated -half-evaporating -half-evergreen -half-expectant -half-expectantly -half-exploited -half-exposed -half-face -half-faced -half-false -half-famished -half-farthing -half-fascinated -half-fascinating -half-fascinatingly -half-fed -half-feminine -half-fertile -half-fertilely -half-fictitious -half-fictitiously -half-filled -half-finished -half-firkin -half-fish -half-flattered -half-flattering -half-flatteringly -half-flood -half-florin -half-folded -half-foot -half-forgiven -half-forgotten -half-formed -half-forward -Half-french -half-frowning -half-frowningly -half-frozen -half-fulfilled -half-fulfilling -half-full -half-furnished -half-gallon -Half-german -half-gill -half-god -half-great -Half-grecized -half-Greek -half-grown -half-guinea -half-hard -half-hardy -half-harvested -halfheaded -half-headed -half-healed -half-heard -halfhearted -half-hearted -halfheartedly -halfheartedness -halfheartednesses -half-heathen -Half-hessian -half-hidden -half-hypnotized -half-hitch -half-holiday -half-hollow -half-horse -half-hour -halfhourly -half-hourly -half-human -half-hungered -half-hunter -halfy -half-year -half-yearly -half-imperial -half-important -half-importantly -half-inch -half-inclined -half-indignant -half-indignantly -half-inferior -half-informed -half-informing -half-informingly -half-ingenious -half-ingeniously -half-ingenuous -half-ingenuously -half-inherited -half-insinuated -half-insinuating -half-insinuatingly -half-instinctive -half-instinctively -half-intellectual -half-intellectually -half-intelligible -half-intelligibly -half-intoned -half-intoxicated -half-invalid -half-invalidly -Half-irish -half-iron -half-island -half-Italian -half-jack -half-jelled -half-joking -half-jokingly -half-justified -half-knot -half-know -halflang -half-languaged -half-languishing -half-lapped -Half-latinized -half-latticed -half-learned -half-learnedly -half-learning -half-leather -half-left -half-length -halfly -half-liberal -half-liberally -halflife -half-life -half-light -halflin -half-lined -half-linen -halfling -halflings -half-liter -half-lived -halflives -half-lives -half-long -half-looper -half-lop -half-lunatic -half-lunged -half-mad -half-made -half-madly -half-madness -halfman -half-marked -half-marrow -half-mast -half-masticated -half-matured -half-meant -half-measure -half-melted -half-mental -half-mentally -half-merited -Half-mexican -half-miler -half-minded -half-minute -half-miseducated -half-misunderstood -half-mitten -Half-mohammedan -half-monitor -half-monthly -halfmoon -half-moon -half-moral -Half-moslem -half-mourning -half-Muhammadan -half-mumbled -half-mummified -half-Muslim -half-naked -half-nelson -half-nephew -halfness -halfnesses -half-niece -half-nylon -half-noble -half-normal -half-normally -half-note -half-numb -half-obliterated -half-offended -Halfon -half-on -half-one -half-open -half-opened -Halford -Half-oriental -half-orphan -half-oval -half-oxidized -halfpace -half-pace -halfpaced -half-pay -half-peck -halfpence -halfpenny -halfpennies -halfpennyworth -half-petrified -half-pike -half-pint -half-pipe -half-pitch -half-playful -half-playfully -half-plane -half-plate -half-pleased -half-pleasing -half-plucked -half-port -half-pound -half-pounder -half-praised -half-praising -half-present -half-price -half-profane -half-professed -half-profile -half-proletarian -half-protested -half-protesting -half-proved -half-proven -half-provocative -half-quarter -half-quartern -half-quarterpace -half-questioning -half-questioningly -half-quire -half-quixotic -half-quixotically -half-radical -half-radically -half-rayon -half-rater -half-raw -half-reactionary -half-read -half-reasonable -half-reasonably -half-reasoning -half-rebellious -half-rebelliously -half-reclaimed -half-reclined -half-reclining -half-refined -half-regained -half-reluctant -half-reluctantly -half-remonstrant -half-repentant -half-republican -half-retinal -half-revealed -half-reversed -half-rhyme -half-right -half-ripe -half-ripened -half-roasted -half-rod -half-romantic -half-romantically -half-rotted -half-rotten -half-round -half-rueful -half-ruefully -half-ruined -half-run -half-russia -Half-russian -half-sagittate -half-savage -half-savagely -half-saved -Half-scottish -half-seal -half-seas-over -half-second -half-section -half-seen -Half-semitic -half-sensed -half-serious -half-seriously -half-severed -half-shade -Half-shakespearean -half-shamed -half-share -half-shared -half-sheathed -half-shy -half-shyly -half-shoddy -half-shot -half-shouted -half-shroud -half-shrub -half-shrubby -half-shut -half-sib -half-sibling -half-sighted -half-sightedly -half-sightedness -half-silk -half-syllabled -half-sinking -half-sister -half-size -half-sleeve -half-sleeved -half-slip -half-smile -half-smiling -half-smilingly -half-smothered -half-snipe -half-sole -half-soled -half-solid -half-soling -half-souled -half-sovereign -Half-spanish -half-spoonful -half-spun -half-squadron -half-staff -half-starved -half-starving -half-step -half-sterile -half-stock -half-stocking -half-stopped -half-strain -half-strained -half-stroke -half-strong -half-stuff -half-subdued -half-submerged -half-successful -half-successfully -half-succulent -half-suit -half-sung -half-sunk -half-sunken -half-swing -half-sword -half-taught -half-tearful -half-tearfully -half-teaspoonful -half-tented -half-terete -half-term -half-theatrical -half-thickness -half-thought -half-tide -half-timber -half-timbered -halftime -half-time -half-timer -halftimes -half-title -halftone -half-tone -halftones -half-tongue -halftrack -half-track -half-tracked -half-trained -half-training -half-translated -half-true -half-truth -half-truths -half-turn -half-turned -half-turning -half-understood -half-undone -halfungs -half-used -half-utilized -half-veiled -half-vellum -half-verified -half-vexed -half-visibility -half-visible -half-volley -half-volleyed -half-volleyer -half-volleying -half-vowelish -Halfway -half-way -half-waking -half-whispered -half-whisperingly -half-white -half-wicket -half-wild -half-wildly -half-willful -half-willfully -half-winged -halfwise -halfwit -half-wit -half-witted -half-wittedly -half-wittedness -half-womanly -half-won -half-woolen -halfword -half-word -halfwords -half-world -half-worsted -half-woven -half-written -Hali -Haliaeetus -halyard -halyards -halibios -halibiotic -halibiu -halibut -halibuter -halibuts -Halicarnassean -Halicarnassian -Halicarnassus -Halichondriae -halichondrine -halichondroid -Halicore -Halicoridae -halicot -halid -halide -halides -halidom -halidome -halidomes -halidoms -halids -Halie -halieutic -halieutical -halieutically -halieutics -Halifax -Haligonian -Halima -Halimeda -halimot -halimous -haling -halinous -haliographer -haliography -Haliotidae -Haliotis -haliotoid -haliplankton -haliplid -Haliplidae -Halirrhothius -Haliserites -Halysites -halisteresis -halisteretic -halite -halites -Halitheriidae -Halitherium -Halitherses -halitoses -halitosis -halitosises -halituosity -halituous -halitus -halituses -Haliver -halkahs -halke -Hall -Halla -hallabaloo -Hallagan -hallage -hallah -hallahs -hallalcor -hallali -Hallam -hallan -Halland -Hallandale -hallanshaker -hallboy -hallcist -hall-door -Halle -hallebardier -Halleck -hallecret -Hallee -halleflinta -halleflintoid -Halley -Halleyan -Hallel -hallels -halleluiah -hallelujah -hallelujahs -hallelujatic -Haller -Hallerson -Hallett -Hallette -Hallettsville -hallex -Halli -Hally -halliard -halliards -halliblash -hallicet -Halliday -hallidome -Hallie -Hallieford -hallier -halling -hallion -Halliwell -Hall-Jones -hallman -hallmark -hall-mark -hallmarked -hallmarker -hallmarking -hallmarks -hallmark's -hallmoot -hallmote -hallo -halloa -halloaed -halloaing -halloas -Hallock -halloed -halloes -hall-of-famer -halloing -halloysite -halloo -hallooed -hallooing -halloos -Hallopididae -hallopodous -Hallopus -hallos -hallot -halloth -Hallouf -hallow -hallowd -Hallowday -hallowed -hallowedly -hallowedness -Halloween -Hallowe'en -hallow-e'en -halloweens -Hallowell -hallower -hallowers -hallowing -Hallowmas -hallows -Hallowtide -hallow-tide -hallroom -Halls -hall's -Hallsboro -Hallsy -Hallstadt -Hallstadtan -Hallstatt -Hallstattan -Hallstattian -Hallstead -Hallsville -Halltown -hallucal -halluces -hallucinate -hallucinated -hallucinates -hallucinating -hallucination -hallucinational -hallucinations -hallucinative -hallucinator -hallucinatory -hallucined -hallucinogen -hallucinogenic -hallucinogens -hallucinoses -hallucinosis -hallux -Hallvard -hallway -hallways -hallway's -Hallwood -halm -Halma -Halmaheira -Halmahera -halmalille -halmawise -halms -Halmstad -halo -halo- -Haloa -Halobates -halobiont -halobios -halobiotic -halo-bright -halocaine -halocarbon -halochromy -halochromism -Halocynthiidae -halocline -halo-crowned -haloed -haloes -haloesque -halogen -halogenate -halogenated -halogenating -halogenation -halogenoid -halogenous -halogens -Halogeton -halo-girt -halohydrin -haloid -haloids -haloing -halolike -halolimnic -halomancy -halometer -halomorphic -halomorphism -Halona -Halonna -haloperidol -halophile -halophilic -halophilism -halophilous -halophyte -halophytic -halophytism -Halopsyche -Halopsychidae -Haloragidaceae -haloragidaceous -halos -Halosauridae -Halosaurus -haloscope -halosere -Halosphaera -halothane -halotrichite -haloxene -haloxylin -halp -halpace -halper -Halpern -Hals -halse -Halsey -halsen -halser -halsfang -Halsy -Halstad -Halstead -Halsted -halt -halte -halted -Haltemprice -halter -halterbreak -haltere -haltered -halteres -Halteridium -haltering -halterlike -halterproof -halters -halter-sack -halter-wise -Haltica -halting -haltingly -haltingness -haltless -halts -halucket -halukkah -halurgy -halurgist -halutz -halutzim -halva -Halvaard -halvah -halvahs -halvaner -halvans -halvas -halve -halved -halvelings -halver -halvers -Halverson -halves -Halvy -halving -halwe -HAM -Hama -Hamachi -hamacratic -hamada -Hamadan -hamadas -hamadryad -hamadryades -hamadryads -hamadryas -Hamal -hamald -hamals -Hamamatsu -Hamamelidaceae -hamamelidaceous -Hamamelidanthemum -hamamelidin -Hamamelidoxylon -hamamelin -Hamamelis -Hamamelites -Haman -Hamann -hamantasch -hamantaschen -hamantash -hamantashen -hamartia -hamartias -hamartiology -hamartiologist -hamartite -hamartophobia -hamata -hamate -hamated -hamates -Hamath -Hamathite -hamatum -hamaul -hamauls -hamber -Hamberg -hambergite -hamber-line -hamble -Hambley -Hambleton -Hambletonian -hambone -hamboned -hambones -Hamborn -hambro -hambroline -Hamburg -Hamburger -hamburgers -hamburger's -hamburgs -Hamden -hamdmaid -hame -hameil -Hamel -Hamelia -Hamelin -Hameln -hamelt -Hamer -Hamersville -hames -hamesoken -hamesucken -hametugs -hametz -hamewith -hamfare -hamfat -hamfatter -ham-fisted -Hamford -Hamforrd -Hamfurd -ham-handed -ham-handedness -Hamhung -hami -Hamid -Hamidian -Hamidieh -hamiform -Hamil -hamilt -Hamilton -Hamiltonian -Hamiltonianism -Hamiltonism -hamingja -haminoea -hamirostrate -Hamish -Hamital -Hamite -Hamites -Hamitic -Hamiticized -Hamitism -Hamitoid -Hamito-negro -Hamito-Semitic -hamlah -Hamlani -Hamlen -Hamler -Hamlet -hamleted -hamleteer -hamletization -hamletize -hamlets -hamlet's -Hamletsburg -hamli -Hamlin -hamline -hamlinite -Hamm -Hammad -hammada -hammadas -hammaid -hammal -hammals -hammam -Hammarskj -Hammarskjold -hammed -Hammel -Hammer -hammerable -hammer-beam -hammerbird -hammercloth -hammer-cloth -hammercloths -hammerdress -hammered -hammerer -hammerers -Hammerfest -hammerfish -hammer-hard -hammer-harden -hammerhead -hammer-head -hammerheaded -hammerheads -hammering -hammeringly -hammerkop -hammerless -hammerlike -hammerlock -hammerlocks -hammerman -hammer-proof -hammer-refined -hammers -hammer-shaped -Hammerskjold -Hammersmith -Hammerstein -hammerstone -hammer-strong -hammertoe -hammertoes -hammer-weld -hammer-welded -hammerwise -hammerwork -hammerwort -hammer-wrought -Hammett -hammy -hammier -hammiest -hammily -hamminess -hamming -hammochrysos -Hammock -hammocklike -hammocks -hammock's -Hammon -Hammond -Hammondsport -Hammondsville -Hammonton -Hammurabi -Hammurapi -Hamner -Hamnet -Hamo -Hamon -hamose -hamotzi -hamous -Hampden -hamper -hampered -hamperedly -hamperedness -hamperer -hamperers -hampering -hamperman -hampers -Hampshire -hampshireman -hampshiremen -hampshirite -hampshirites -Hampstead -Hampton -Hamptonville -Hamrah -Hamrnand -hamrongite -hams -ham's -hamsa -hamshackle -Hamshire -hamster -hamsters -hamstring -hamstringed -hamstringing -hamstrings -hamstrung -Hamsun -Hamtramck -hamular -hamulate -hamule -hamuli -Hamulites -hamulose -hamulous -hamulus -hamus -hamza -hamzah -hamzahs -hamzas -Han -Hana -Hanae -Hanafee -Hanafi -Hanafite -hanahill -Hanako -Hanalei -Hanan -hanap -Hanapepe -hanaper -hanapers -Hanasi -ha-Nasi -hanaster -Hanau -Hanbalite -hanbury -Hance -hanced -hances -Hanceville -hanch -Hancock -hancockite -Hand -Handal -handarm -hand-ax -handbag -handbags -handbag's -handball -hand-ball -handballer -handballs -handbank -handbanker -handbarrow -hand-barrow -handbarrows -hand-beaten -handbell -handbells -handbill -handbills -hand-blocked -handblow -hand-blown -handbolt -Handbook -handbooks -handbook's -handbound -hand-bound -handbow -handbrake -handbreadth -handbreed -hand-broad -hand-broken -hand-built -hand-canter -handcar -hand-carry -handcars -handcart -hand-cart -handcarts -hand-carve -hand-chase -handclap -handclapping -handclasp -hand-clasp -handclasps -hand-clean -hand-closed -handcloth -hand-colored -hand-comb -handcraft -handcrafted -handcrafting -handcraftman -handcrafts -handcraftsman -hand-crushed -handcuff -handcuffed -handcuffing -handcuffs -hand-culverin -hand-cut -hand-dress -hand-drill -hand-drop -hand-dug -handed -handedly -handedness -Handel -Handelian -hand-embroidered -hander -handersome -handfast -handfasted -handfasting -handfastly -handfastness -handfasts -hand-fed -handfeed -hand-feed -hand-feeding -hand-fill -hand-filled -hand-fire -handfish -hand-fives -handflag -handflower -hand-fold -hand-footed -handful -handfuls -handgallop -hand-glass -handgrasp -handgravure -hand-grenade -handgrip -handgriping -handgrips -handgun -handguns -hand-habend -handhaving -hand-held -hand-hewn -hand-hidden -hand-high -handhold -handholds -handhole -Handy -handy-andy -handy-andies -handybilly -handy-billy -handybillies -handyblow -handybook -handicap -handicapped -handicapper -handicappers -handicapping -handicaps -handicap's -handicrafsman -handicrafsmen -handicraft -handicrafter -handicrafters -handicrafts -handicraftship -handicraftsman -handicraftsmanship -handicraftsmen -handicraftswoman -handicuff -handycuff -handy-dandy -handier -handiest -Handie-Talkie -handyfight -handyframe -handygrip -handygripe -handily -handyman -handymen -hand-in -handiness -handinesses -handing -hand-in-glove -hand-in-hand -handy-pandy -handiron -handy-spandy -handistroke -handiwork -handiworks -handjar -handkercher -handkerchief -handkerchiefful -handkerchiefs -handkerchief's -handkerchieves -hand-knit -hand-knitted -hand-knitting -hand-knotted -hand-labour -handlaid -handle -handleable -handlebar -handlebars -handled -Handley -handleless -Handler -handlers -handles -handless -hand-lettered -handlike -handline -hand-line -hand-liner -handling -handlings -handlist -hand-list -handlists -handload -handloader -handloading -handlock -handloom -hand-loom -handloomed -handlooms -hand-lopped -handmade -hand-made -handmaid -handmaiden -handmaidenly -handmaidens -handmaids -hand-me-down -hand-me-downs -hand-mill -hand-minded -hand-mindedness -hand-mix -hand-mold -handoff -hand-off -handoffs -hand-operated -hand-organist -handout -hand-out -handouts -hand-packed -handpick -hand-pick -handpicked -hand-picked -handpicking -handpicks -handpiece -hand-pitched -hand-play -hand-pollinate -hand-pollination -handpost -hand-power -handpress -hand-presser -hand-pressman -handprint -hand-printing -hand-pump -handrail -hand-rail -handrailing -handrails -handreader -handreading -hand-rear -hand-reared -handrest -hand-rinse -hand-rivet -hand-roll -hand-rub -hand-rubbed -Hands -handsale -handsaw -handsawfish -handsawfishes -handsaws -handsbreadth -hand's-breadth -handscrape -hands-down -handsel -handseled -handseling -handselled -handseller -handselling -handsels -hand-sent -handset -handsets -handsetting -handsew -hand-sew -handsewed -handsewing -handsewn -hand-sewn -handsful -hand-shackled -handshake -handshaker -handshakes -handshaking -handsled -handsmooth -hands-off -Handsom -handsome -handsome-featured -handsomeish -handsomely -handsomeness -handsomenesses -handsomer -handsomest -hand-sort -handspade -handspan -handspec -handspike -hand-splice -hand-split -handspoke -handspring -handsprings -hand-spun -handstaff -hand-staff -hand-stamp -hand-stamped -handstand -handstands -hand-stitch -handstone -handstroke -hand-stuff -hand-tailor -hand-tailored -hand-taut -hand-thrown -hand-tied -hand-tight -hand-to-hand -hand-to-mouth -hand-tooled -handtrap -hand-treat -hand-trim -hand-turn -hand-vice -handwaled -hand-wash -handwaving -handwear -hand-weave -handweaving -hand-weed -handwheel -handwhile -handwork -handworked -hand-worked -handworker -handworkman -handworks -handworm -handwoven -hand-woven -handwrist -hand-wrist -handwrit -handwrite -handwrites -handwriting -handwritings -handwritten -handwrote -handwrought -hand-wrought -hanefiyeh -Haney -Hanford -Hanforrd -Hanfurd -hang -hang- -hangability -hangable -hangalai -hangar -hangared -hangaring -hangars -hangar's -hang-back -hangby -hang-by -hangbird -hangbirds -hang-choice -Hangchow -hangdog -hang-dog -hangdogs -hang-down -hange -hanged -hangee -hanger -hanger-back -hanger-on -hangers -hangers-on -hanger-up -hang-fair -hangfire -hangfires -hang-glider -hang-head -hangie -hanging -hangingly -hangings -hangkang -hangle -hangman -hangmanship -hangmen -hangment -hangnail -hang-nail -hangnails -hangnest -hangnests -hangout -hangouts -hangover -hang-over -hangovers -hangover's -hangs -hangtag -hangtags -hangul -hangup -hang-up -hangups -hangwoman -hangworm -hangworthy -Hanya -Hanyang -hanif -hanifiya -hanifism -hanifite -Hank -Hankamer -hanked -hankey-pankey -Hankel -hanker -hankered -hankerer -hankerers -hankering -hankeringly -hankerings -hankers -hanky -hankie -hankies -hanking -Hankins -Hankinson -hanky-panky -hankle -Hankow -hanks -hanksite -Hanksville -hankt -hankul -Hanley -Hanleigh -Han-lin -Hanlon -Hanlontown -Hanna -Hannacroix -Hannaford -Hannah -hannayite -Hannan -Hannastown -Hanni -Hanny -Hannibal -Hannibalian -Hannibalic -Hannie -Hannis -Hanno -Hannon -Hannover -Hannus -Hano -Hanoi -hanologate -Hanotaux -Hanover -Hanoverian -Hanoverianize -Hanoverize -Hanoverton -Hanratty -Hans -Hansa -Hansard -Hansardization -Hansardize -hansas -Hansboro -Hanschen -Hanse -Hanseatic -Hansel -hanseled -hanseling -Hanselka -Hansell -hanselled -hanselling -hansels -Hansen -hansenosis -Hanser -hanses -Hansetown -Hansford -hansgrave -Hanshaw -Hansiain -Hanska -hansom -hansomcab -hansoms -Hanson -Hansteen -Hanston -Hansville -Hanswurst -hant -han't -ha'nt -hanted -hanting -hantle -hantles -Hants -Hanukkah -Hanuman -hanumans -Hanus -Hanway -Hanzelin -HAO -haole -haoles -haoma -haori -haoris -HAP -Hapale -Hapalidae -hapalote -Hapalotis -hapax -hapaxanthous -hapaxes -hapchance -ha'penny -ha'pennies -haphazard -haphazardly -haphazardness -haphazardry -haphophobia -Haphsiba -haphtara -Haphtarah -Haphtarahs -Haphtaroth -Hapi -hapiton -hapl- -hapless -haplessly -haplessness -haplessnesses -haply -haplite -haplites -haplitic -haplo- -haplobiont -haplobiontic -haplocaulescent -haplochlamydeous -Haplodoci -Haplodon -haplodont -haplodonty -haplography -haploid -haploidy -haploidic -haploidies -haploids -haplolaly -haplology -haplologic -haploma -haplome -Haplomi -haplomid -haplomitosis -haplomous -haplont -haplontic -haplonts -haploperistomic -haploperistomous -haplopetalous -haplophase -haplophyte -haplopia -haplopias -haploscope -haploscopic -haploses -haplosis -haplostemonous -haplotype -ha'p'orth -Happ -happed -happen -happenchance -happened -happening -happenings -happens -happenstance -happer -Happy -happier -happiest -happify -happy-go-lucky -happy-go-luckyism -happy-go-luckiness -happiless -happily -happiness -happing -haps -Hapsburg -Hapte -hapten -haptene -haptenes -haptenic -haptens -haptera -haptere -hapteron -haptic -haptical -haptics -haptoglobin -haptometer -haptophobia -haptophor -haptophoric -haptophorous -haptor -haptotropic -haptotropically -haptotropism -hapu -hapuku -haquebut -haqueton -Hara -harace -Harahan -Haraya -harakeke -hara-kin -harakiri -hara-kiri -Harald -Haralson -haram -harambee -harang -harangue -harangued -harangueful -haranguer -haranguers -harangues -haranguing -Harappa -Harappan -Harar -Harare -Hararese -Harari -haras -harass -harassable -harassed -harassedly -harasser -harassers -harasses -harassing -harassingly -harassment -harassments -harassness -harassnesses -harast -haratch -harateen -Haratin -haraucana -Harb -Harbard -Harberd -harbergage -Harbert -Harbeson -harbi -Harbin -harbinge -harbinger -harbingery -harbinger-of-spring -harbingers -harbingership -harbingers-of-spring -Harbird -Harbison -Harbona -harbor -harborage -harbored -harborer -harborers -harborful -harboring -harborless -harbormaster -harborough -harborous -harbors -Harborside -Harborton -harborward -Harbot -Harbour -harbourage -harboured -harbourer -harbouring -harbourless -harbourous -harbours -harbourside -harbourward -harbrough -Harco -Harcourt -hard -hard-acquired -Harday -Hardan -hard-and-fast -hard-and-fastness -hardanger -Hardaway -hardback -hardbacks -hardbake -hard-bake -hard-baked -hardball -hardballs -hard-barked -hardbeam -hard-beating -hardberry -hard-bill -hard-billed -hard-biting -hard-bitted -hard-bitten -hard-bittenness -hardboard -hard-boil -hardboiled -hard-boiled -hard-boiledness -hard-boned -hardboot -hardboots -hardbought -hard-bought -hardbound -hard-bred -Hardburly -hardcase -hard-coated -hard-contested -hard-cooked -hardcopy -hardcore -hard-core -hardcover -hardcovered -hardcovers -hard-cured -Hardden -hard-drawn -hard-dried -hard-drying -hard-drinking -hard-driven -hard-driving -hard-earned -Hardecanute -hardedge -hard-edge -hard-edged -Hardeeville -hard-eyed -Hardej -Harden -hardenability -hardenable -Hardenberg -Hardenbergia -hardened -hardenedness -hardener -hardeners -hardening -hardenite -hardens -Hardenville -harder -Harderian -hardest -Hardesty -hard-faced -hard-fated -hard-favored -hard-favoredness -hard-favoured -hard-favouredness -hard-feathered -hard-featured -hard-featuredness -hard-fed -hardfern -hard-fighting -hard-finished -hard-fired -hardfist -hardfisted -hard-fisted -hardfistedness -hard-fistedness -hard-fleshed -hard-fought -hard-gained -hard-got -hard-grained -hardhack -hardhacks -hard-haired -hardhanded -hard-handed -hardhandedness -hard-handled -hardhat -hard-hat -hardhats -hardhead -hardheaded -hard-headed -hardheadedly -hardheadedness -hardheads -hard-heart -hardhearted -hard-hearted -hardheartedly -hardheartedness -hardheartednesses -hardhewer -hard-hit -hard-hitting -Hardi -Hardy -Hardicanute -Hardie -hardier -hardies -hardiesse -hardiest -Hardigg -hardihead -hardyhead -hardihood -hardily -hardim -hardiment -Hardin -hardiness -hardinesses -Harding -Hardinsburg -hard-iron -hardish -hardishrew -hardystonite -Hardyville -hard-laid -hard-learned -hardly -hardline -hard-line -hard-living -hard-looking -Hardman -hard-minded -hardmouth -hardmouthed -hard-mouthed -hard-natured -Hardner -hardness -hardnesses -hardnose -hard-nosed -hard-nosedness -hardock -hard-of-hearing -hardpan -hard-pan -hardpans -hard-plucked -hard-pressed -hard-pushed -hard-ridden -hard-riding -hard-run -hards -hardsalt -hardscrabble -hardset -hard-set -hardshell -hard-shell -hard-shelled -hardship -hardships -hardship's -hard-skinned -hard-spirited -hard-spun -hardstand -hardstanding -hardstands -hard-surface -hard-surfaced -hard-swearing -hardtack -hard-tack -hardtacks -hardtail -hardtails -hard-timbered -Hardtner -hardtop -hardtops -hard-trotting -Hardunn -hard-upness -hard-uppishness -hard-used -hard-visaged -hardway -hardwall -hardware -hardwareman -hardwares -hard-wearing -hardweed -Hardwick -Hardwicke -Hardwickia -hardwire -hardwired -hard-witted -hard-won -hardwood -hard-wooded -hardwoods -hard-worked -hardworking -hard-working -hard-wrought -hard-wrung -Hare -harebell -harebells -harebottle -harebrain -hare-brain -harebrained -hare-brained -harebrainedly -harebrainedness -harebur -hared -hare-eyed -hareem -hareems -hare-finder -harefoot -harefooted -harehearted -harehound -hareld -Harelda -harelike -harelip -hare-lip -harelipped -harelips -harem -hare-mad -haremism -haremlik -harems -harengiform -harenut -hares -hare's -hare's-ear -hare's-foot -Harewood -harfang -Harford -Hargeisa -Hargesia -Hargill -Hargreaves -Harhay -hariana -Haryana -harianas -harico -haricot -haricots -harier -hariffe -harigalds -Harijan -harijans -harikari -hari-kari -Harilda -Harim -haring -Haringey -harynges -hariolate -hariolation -hariolize -harish -hark -harka -harked -harkee -harken -harkened -harkener -harkeners -harkening -harkens -harking -Harkins -Harkness -harks -Harl -Harlamert -Harlan -Harland -Harle -Harlech -harled -Harley -Harleian -Harleigh -Harleysville -Harleyville -Harlem -Harlemese -Harlemite -Harlen -Harlene -Harlequin -harlequina -harlequinade -harlequinery -harlequinesque -harlequinic -harlequinism -harlequinize -harlequins -Harleton -Harli -Harlie -Harlin -harling -Harlingen -harlock -harlot -harlotry -harlotries -harlots -harlot's -Harlow -Harlowton -harls -HARM -Harmachis -harmal -harmala -harmalin -harmaline -Harman -Harmaning -Harmans -Harmat -harmattan -harmed -harmel -harmer -harmers -harmful -harmfully -harmfulness -harmfulnesses -harmin -harmine -harmines -harming -harminic -harmins -harmless -harmlessly -harmlessness -harmlessnesses -Harmon -Harmony -Harmonia -harmoniacal -harmonial -harmonic -harmonica -harmonical -harmonically -harmonicalness -harmonicas -harmonichord -harmonici -harmonicism -harmonicon -harmonics -Harmonides -Harmonie -harmonies -harmonious -harmoniously -harmoniousness -harmoniousnesses -harmoniphon -harmoniphone -harmonisable -harmonisation -harmonise -harmonised -harmoniser -harmonising -Harmonist -harmonistic -harmonistically -Harmonite -harmonium -harmoniums -harmonizable -harmonization -harmonizations -harmonize -harmonized -harmonizer -harmonizers -harmonizes -harmonizing -harmonogram -harmonograph -harmonometer -Harmonsburg -harmoot -harmost -Harmothoe -harmotome -harmotomic -harmout -harmproof -Harms -Harmsworth -harn -Harnack -Harned -Harneen -Harness -harness-bearer -harness-cask -harnessed -harnesser -harnessers -harnesses -harnessing -harnessless -harnesslike -harnessry -Harnett -harnpan -harns -Harod -Harold -Harolda -Haroldson -haroset -haroseth -Haroun -Harp -Harpa -harpago -harpagon -Harpagornis -Harpalyce -Harpalides -Harpalinae -Harpalus -harpaxophobia -harped -Harper -harperess -harpers -Harpersfield -Harpersville -Harperville -Harpy -harpy-bat -Harpidae -harpy-eagle -harpier -Harpies -harpy-footed -Harpyia -harpylike -harpin -Harpina -harping -harping-iron -harpingly -harpings -harpins -harpist -harpists -harpless -harplike -Harpocrates -Harpole -harpoon -harpooned -harpooneer -harpooner -harpooners -harpooning -harpoonlike -harpoons -Harporhynchus -Harpp -harpress -harps -harp-shaped -harpsical -harpsichon -harpsichord -harpsichordist -harpsichords -Harpster -harpula -Harpullia -Harpursville -harpwaytuning -harpwise -harquebus -harquebusade -harquebuse -harquebuses -harquebusier -harquebuss -harr -Harragan -harrage -Harrah -Harrar -harrateen -harre -Harrell -Harrells -Harrellsville -Harri -Harry -harrycane -harrid -harridan -harridans -Harrie -harried -harrier -harriers -harries -Harriet -Harriett -Harrietta -Harriette -harrying -Harriman -Harrington -Harriot -Harriott -Harris -Harrisburg -Harrisia -harrisite -Harrison -Harrisonburg -Harrisonville -Harriston -Harristown -Harrisville -Harrod -Harrodsburg -Harrogate -Harrold -Harrovian -Harrow -harrowed -harrower -harrowers -harrowing -harrowingly -harrowingness -harrowment -harrows -harrowtry -harrumph -harrumphed -harrumphing -harrumphs -Harrus -harsh -Harshaw -harsh-blustering -harshen -harshened -harshening -harshens -harsher -harshest -harsh-featured -harsh-grating -harshish -harshlet -harshlets -harshly -harsh-looking -Harshman -harsh-mannered -harshness -harshnesses -Harsho -harsh-syllabled -harsh-sounding -harsh-tongued -harsh-voiced -harshweed -harslet -harslets -harst -Harstad -harstigite -harstrang -harstrong -Hart -hartail -hartake -hartal -hartall -hartals -hartberry -Harte -hartebeest -hartebeests -harten -Hartfield -Hartford -Harthacanute -Harthacnut -Harty -Hartill -hartin -Hartington -hartite -Hartke -Hartland -Hartley -Hartleian -Hartleyan -Hartlepool -Hartleton -Hartly -Hartline -Hartman -Hartmann -Hartmannia -Hartmunn -Hartnell -Hartnett -Hartogia -Harts -Hartsburg -Hartsdale -Hartsel -Hartselle -Hartsfield -Hartshorn -Hartshorne -hartstongue -harts-tongue -hart's-tongue -Hartstown -Hartsville -harttite -Hartungen -Hartville -Hartwell -Hartwick -Hartwood -hartwort -Hartzel -Hartzell -Hartzke -harumph -harumphs -harum-scarum -harum-scarumness -Harunobu -haruspex -haruspical -haruspicate -haruspication -haruspice -haruspices -haruspicy -Harv -Harvard -Harvardian -Harvardize -Harve -Harvey -Harveian -Harveyize -Harveyized -Harveyizing -Harveysburg -Harveyville -Harvel -Harvest -harvestable -harvestbug -harvest-bug -harvested -harvester -harvesters -harvester-thresher -harvest-field -harvestfish -harvestfishes -harvesting -harvestless -harvest-lice -harvestman -harvestmen -harvestry -harvests -harvesttime -Harvie -Harviell -Harvison -Harwell -Harwich -Harwichport -Harwick -Harwill -Harwilll -Harwin -Harwood -Harz -harzburgite -Harze -has -Hasa -Hasan -Hasanlu -hasard -has-been -Hasdai -Hasdrubal -Hase -Hasek -Hasen -hasenpfeffer -hash -hashab -hashabi -hashed -Hasheem -hasheesh -hasheeshes -hasher -hashery -hashes -hashhead -hashheads -hashy -Hashiya -Hashim -Hashimite -Hashimoto -hashing -hashish -hashishes -hash-slinger -hasht -Hashum -Hasid -Hasidaean -Hasidean -Hasidic -Hasidim -Hasidism -Hasin -Hasinai -hask -Haskalah -haskard -Haskel -Haskell -hasky -Haskins -haskness -haskwort -Haslam -Haslet -haslets -Haslett -haslock -Hasmonaean -hasmonaeans -Hasmonean -hasn -hasnt -hasn't -HASP -hasped -haspicol -hasping -haspling -hasps -haspspecs -Hassam -Hassan -Hassani -hassar -Hasse -hassel -Hassell -hassels -Hasselt -Hasseman -hassenpfeffer -Hassett -Hassi -Hassin -hassing -hassle -hassled -hassles -hasslet -hassling -hassock -hassocky -hassocks -hast -hasta -hastate -hastated -hastately -hastati -hastato- -hastatolanceolate -hastatosagittate -haste -hasted -hasteful -hastefully -hasteless -hastelessness -hasten -hastened -hastener -hasteners -hastening -hastens -hasteproof -haster -hastes -Hasty -Hastie -hastier -hastiest -hastif -hastifly -hastifness -hastifoliate -hastiform -hastile -hastily -hastilude -hastiness -hasting -Hastings -hastingsite -Hastings-on-Hudson -hastish -hastive -hastler -hastula -Haswell -HAT -hatable -Hatasu -hatband -hatbands -Hatboro -hatbox -hatboxes -hatbrim -hatbrush -Hatch -hatchability -hatchable -hatchback -hatchbacks -hatch-boat -Hatchechubbee -hatcheck -hatched -hatchel -hatcheled -hatcheler -hatcheling -hatchelled -hatcheller -hatchelling -hatchels -Hatcher -hatchery -hatcheries -hatcheryman -hatchers -hatches -hatchet -hatchetback -hatchetfaced -hatchet-faced -hatchetfish -hatchetfishes -hatchety -hatchetlike -hatchetman -hatchets -hatchet's -hatchet-shaped -hatchettin -hatchettine -hatchettite -hatchettolite -hatchgate -hatching -hatchings -hatchite -hatchling -hatchman -hatchment -hatchminder -hatchway -hatchwayman -hatchways -hate -hateable -hated -hateful -hatefully -hatefullness -hatefullnesses -hatefulness -hatel -hateless -hatelessness -hatemonger -hatemongering -hater -haters -hates -Hatfield -hatful -hatfuls -hath -hatha-yoga -Hathaway -Hathcock -hatherlite -hathi -Hathor -Hathor-headed -Hathoric -Hathorne -hathpace -Hati -Hatia -Hatikva -Hatikvah -Hatillo -hating -hat-in-hand -Hatley -hatless -hatlessness -hatlike -hatmaker -hatmakers -hatmaking -hat-money -hatpin -hatpins -hatrack -hatracks -hatrail -hatred -hatreds -hatress -hats -hat's -hatsful -hat-shag -hat-shaped -Hatshepset -Hatshepsut -hatstand -hatt -Hatta -hatte -hatted -Hattemist -Hattenheimer -hatter -Hatteras -hattery -Hatteria -hatterias -hatters -Hatti -Hatty -Hattian -Hattic -Hattie -Hattiesburg -Hattieville -hatting -Hattism -Hattize -hattock -Hatton -Hattusas -Hatvan -Hau -haubergeon -hauberget -hauberk -hauberks -hauberticum -haubois -Haubstadt -hauchecornite -Hauck -hauerite -hauflin -Hauge -Haugen -Hauger -haugh -Haughay -haughland -haughs -haught -haughty -haughtier -haughtiest -haughtily -haughtiness -haughtinesses -haughtly -haughtness -Haughton -haughtonite -hauyne -hauynite -hauynophyre -Haukom -haul -haulabout -haulage -haulages -haulageway -haulaway -haulback -hauld -hauled -hauler -haulers -haulyard -haulyards -haulier -hauliers -hauling -haulm -haulmy -haulmier -haulmiest -haulms -hauls -haulse -haulster -hault -haum -Haunce -haunch -haunch-bone -haunched -hauncher -haunches -haunchy -haunching -haunchless -haunch's -haunt -haunted -haunter -haunters -haunty -haunting -hauntingly -haunts -haupia -Hauppauge -Hauptmann -Hauranitic -hauriant -haurient -Hausa -Hausas -Hausdorff -hause -hausen -hausens -Hauser -hausfrau -hausfrauen -hausfraus -Haushofer -Hausmann -hausmannite -Hausner -Haussa -Haussas -hausse -hausse-col -Haussmann -Haussmannization -Haussmannize -haust -Haustecan -haustella -haustellate -haustellated -haustellous -haustellum -haustement -haustoria -haustorial -haustorium -haustral -haustrum -haustus -haut -hautain -hautboy -hautboyist -hautbois -hautboys -haute -haute-feuillite -Haute-Garonne -hautein -Haute-Loire -Haute-Marne -Haute-Normandie -haute-piece -Haute-Sa -Hautes-Alpes -Haute-Savoie -Hautes-Pyrn -hautesse -hauteur -hauteurs -Haute-Vienne -haut-gout -haut-pas -haut-relief -Haut-Rhin -Hauts-de-Seine -haut-ton -Hauula -hav -Havaco -havage -Havaiki -Havaikian -Havana -havance -Havanese -Havant -Havard -havarti -havartis -Havasu -Havdala -Havdalah -havdalahs -have -haveable -haveage -have-been -havey-cavey -Havel -haveless -Havelock -havelocks -Haveman -Haven -havenage -havened -Havener -havenership -havenet -havenful -havening -havenless -Havenner -have-not -have-nots -Havens -haven's -Havensville -havent -haven't -havenward -haver -haveral -havercake -haver-corn -havered -haverel -haverels -haverer -Haverford -havergrass -Haverhill -Havering -havermeal -havers -haversack -haversacks -Haversian -haversine -Haverstraw -haves -havier -Havilah -Haviland -havildar -Havilland -having -havingness -havings -havior -haviored -haviors -haviour -havioured -haviours -havlagah -havoc -havocked -havocker -havockers -havocking -havocs -Havre -Havstad -haw -Hawaii -Hawaiian -hawaiians -hawaiite -Hawarden -hawbuck -hawcuaite -hawcubite -hawebake -hawe-bake -hawed -hawer -Hawesville -hawfinch -hawfinches -Hawger -Hawhaw -haw-haw -Hawi -Hawick -Hawiya -hawing -Hawk -hawk-beaked -hawkbill -hawk-billed -hawkbills -hawkbit -hawked -hawkey -Hawkeye -hawk-eyed -Hawkeyes -hawkeys -Hawken -Hawker -hawkery -hawkers -hawk-faced -hawk-headed -hawky -Hawkie -hawkies -hawking -hawkings -Hawkins -Hawkyns -Hawkinsville -hawkish -hawkishly -hawkishness -hawklike -hawkmoth -hawk-moth -hawkmoths -hawknose -hawk-nose -hawknosed -hawk-nosed -hawknoses -hawknut -hawk-owl -Hawks -hawksbeak -hawk's-beard -hawk's-bell -hawksbill -hawk's-bill -hawk's-eye -hawkshaw -hawkshaws -Hawksmoor -hawk-tailed -hawkweed -hawkweeds -hawkwise -Hawley -Hawleyville -hawm -hawok -Haworth -Haworthia -haws -hawse -hawsed -hawse-fallen -hawse-full -hawsehole -hawseman -hawsepiece -hawsepipe -hawser -hawser-laid -hawsers -hawserwise -hawses -hawsing -Hawthorn -Hawthorne -hawthorned -Hawthornesque -hawthorny -hawthorns -Hax -Haxtun -Hazaki -hazan -hazanim -hazans -hazanut -Hazara -Hazard -hazardable -hazarded -hazarder -hazardful -hazarding -hazardize -hazardless -hazardous -hazardously -hazardousness -hazardry -hazards -hazard's -Haze -hazed -Hazeghi -Hazel -Hazelbelle -Hazelcrest -hazeled -hazel-eyed -hazeless -hazel-gray -hazel-grouse -hazelhen -hazel-hen -hazel-hooped -Hazelhurst -hazeline -hazel-leaved -hazelly -hazelnut -hazel-nut -hazelnuts -hazels -Hazeltine -Hazelton -Hazelwood -hazel-wood -hazelwort -Hazem -hazemeter -Hazen -hazer -hazers -hazes -haze's -hazy -hazier -haziest -hazily -haziness -hazinesses -hazing -hazings -hazle -Hazlehurst -Hazlet -Hazleton -Hazlett -Hazlip -Hazlitt -haznadar -Hazor -hazzan -hazzanim -hazzans -hazzanut -HB -HBA -H-bar -H-beam -Hbert -H-blast -HBM -HBO -H-bomb -HC -hcb -HCF -HCFA -HCL -HCM -hconvert -HCR -HCSDS -HCTDS -HD -hd. -HDA -hdbk -HDBV -Hder -Hderlin -hdkf -HDL -HDLC -hdqrs -hdqrs. -Hdr -HDTV -hdwe -HDX -HE -head -headache -headaches -headache's -headachy -headachier -headachiest -head-aching -headband -headbander -headbands -head-block -headboard -head-board -headboards -headborough -headbox -headcap -headchair -headcheese -headchute -headcloth -head-cloth -headclothes -headcloths -head-court -headdress -head-dress -headdresses -headed -headend -headender -headends -header -headers -header-up -headfast -headfirst -headfish -headfishes -head-flattening -headforemost -head-foremost -headframe -headful -headgate -headgates -headgear -head-gear -headgears -head-hanging -head-high -headhunt -head-hunt -headhunted -headhunter -head-hunter -headhunters -headhunting -head-hunting -headhunts -Heady -headier -headiest -headily -headiness -heading -heading-machine -headings -heading's -headkerchief -headlamp -headlamps -Headland -headlands -headland's -headle -headledge -headless -headlessness -headly -headlight -headlighting -headlights -headlike -headliked -headline -head-line -headlined -headliner -headliners -headlines -headling -headlining -headload -head-load -headlock -headlocks -headlong -headlongly -headlongness -headlongs -headlongwise -headman -head-man -headmark -headmaster -headmasterly -headmasters -headmastership -headmen -headmistress -headmistresses -headmistressship -headmistress-ship -headmold -head-money -headmost -headmould -headnote -head-note -headnotes -head-on -head-over-heels -head-pan -headpenny -head-penny -headphone -headphones -headpiece -head-piece -headpieces -headpin -headpins -headplate -head-plate -headpost -headquarter -headquartered -headquartering -headquarters -headrace -head-race -headraces -headrail -head-rail -headreach -headrent -headrest -headrests -Headrick -headrig -headright -headring -headroom -headrooms -headrope -head-rope -heads -headsail -head-sail -headsails -headsaw -headscarf -headset -headsets -headshake -headshaker -head-shaking -headsheet -headsheets -headship -headships -headshrinker -headsill -headskin -headsman -headsmen -headspace -head-splitting -headspring -headsquare -headstay -headstays -headstall -head-stall -headstalls -headstand -headstands -headstick -headstock -headstone -headstones -headstream -headstrong -headstrongly -headstrongness -heads-up -headtire -head-tire -head-tossing -head-turned -head-voice -headway -headways -headwaiter -headwaiters -headwall -headward -headwards -headwark -headwater -headwaters -headwear -headwind -headwinds -headword -headwords -headwork -headworker -headworking -headworks -heaf -heal -healable -heal-all -heal-bite -heald -healder -heal-dog -Healdsburg -Healdton -healed -Healey -healer -healers -healful -Healy -healing -healingly -Healion -Heall -he-all -healless -heals -healsome -healsomeness -health -healthcare -healthcraft -health-enhancing -healthful -healthfully -healthfulness -healthfulnesses -healthguard -healthy -healthier -healthiest -healthily -healthy-minded -healthy-mindedly -healthy-mindedness -healthiness -healthless -healthlessness -health-preserving -healths -healthsome -healthsomely -healthsomeness -healthward -HEAO -HEAP -heaped -heaped-up -heaper -heapy -heaping -Heaps -heapstead -hear -hearable -heard -hearer -hearers -hearing -hearingless -hearings -hearken -hearkened -hearkener -hearkening -hearkens -Hearn -Hearne -hears -hearsay -hearsays -hearse -hearsecloth -hearsed -hearselike -hearses -Hearsh -hearsing -Hearst -heart -heartache -heart-ache -heartaches -heartaching -heart-affecting -heart-angry -heart-back -heartbeat -heartbeats -heartbird -heartblock -heartblood -heart-blood -heart-bond -heart-bound -heartbreak -heart-break -heartbreaker -heartbreaking -heartbreakingly -heartbreaks -heart-bred -heartbroke -heartbroken -heart-broken -heartbrokenly -heartbrokenness -heart-burdened -heartburn -heartburning -heart-burning -heartburns -heart-cheering -heart-chilled -heart-chilling -heart-corroding -heart-deadened -heartdeep -heart-dulling -heartease -heart-eating -hearted -heartedly -heartedness -hearten -heartened -heartener -heartening -hearteningly -heartens -heart-expanding -heart-fallen -heart-fashioned -heartfelt -heart-felt -heart-flowered -heart-free -heart-freezing -heart-fretting -heartful -heartfully -heartfulness -heart-gnawing -heartgrief -heart-gripping -hearth -heart-happy -heart-hardened -heart-hardening -heart-heavy -heart-heaviness -hearthless -hearthman -hearth-money -hearthpenny -hearth-penny -hearthrug -hearth-rug -hearths -hearthside -hearthsides -hearthstead -hearth-stead -hearthstone -hearthstones -hearth-tax -heart-hungry -hearthward -hearthwarming -hearty -heartier -hearties -heartiest -heartikin -heartily -heart-ill -heartiness -heartinesses -hearting -heartland -heartlands -heartleaf -heart-leaved -heartless -heartlessly -heartlessness -heartlet -heartly -heartlike -heartling -heart-melting -heart-moving -heartnut -heartpea -heart-piercing -heart-purifying -heartquake -heart-quake -heart-ravishing -heartrending -heart-rending -heartrendingly -heart-rendingly -heart-robbing -heartroot -heartrot -hearts -hearts-and-flowers -heartscald -heart-searching -heartsease -heart's-ease -heartseed -heartsette -heartshake -heart-shaking -heart-shaped -heart-shed -heartsick -heart-sick -heartsickening -heartsickness -heartsicknesses -heartsmitten -heartsome -heartsomely -heartsomeness -heartsore -heart-sore -heartsoreness -heart-sorrowing -heart-spoon -heart-stirring -heart-stricken -heart-strickenly -heart-strike -heartstring -heartstrings -heart-strings -heart-struck -heart-swelling -heart-swollen -heart-tearing -heart-thrilling -heartthrob -heart-throb -heart-throbbing -heartthrobs -heart-tickling -heart-to-heart -heartward -heart-warm -heartwarming -heart-warming -heartwater -heart-weary -heart-weariness -heartweed -Heartwell -heart-whole -heart-wholeness -heartwise -heart-wise -heartwood -heart-wood -heartwoods -heartworm -heartwort -heart-wounded -heartwounding -heart-wounding -heart-wringing -heart-wrung -heat -heatable -heat-absorbing -heat-conducting -heat-cracked -heatdrop -heat-drop -heatdrops -heated -heatedly -heatedness -heaten -Heater -heaterman -Heaters -heater-shaped -heat-forming -heatful -heat-giving -Heath -heath-bell -heathberry -heath-berry -heathberries -heathbird -heath-bird -heathbrd -heath-clad -heath-cock -Heathcote -heathen -heathendom -heatheness -heathenesse -heathenhood -heathenise -heathenised -heathenish -heathenishly -heathenishness -heathenising -heathenism -heathenist -heathenize -heathenized -heathenizing -heathenly -heathenness -heathenry -heathens -heathenship -Heather -heather-bell -heather-bleat -heather-blutter -heathered -heathery -heatheriness -heathers -heathfowl -heath-hen -heathy -heathier -heathiest -Heathkit -heathless -heathlike -heath-pea -heathrman -heaths -Heathsville -heathwort -heating -heatingly -heating-up -heat-island -heat-killed -heat-laden -heatless -heatlike -heat-loving -heatmaker -heatmaking -Heaton -heat-oppressed -heat-producing -heatproof -heat-radiating -heat-reducing -heat-regulating -heat-resistant -heat-resisting -heatronic -heats -heatsman -heat-softened -heat-spot -heatstroke -heatstrokes -heat-tempering -heat-treat -heat-treated -heat-treating -heat-treatment -heat-wave -heaume -heaumer -heaumes -heautarit -heauto- -heautomorphism -Heautontimorumenos -heautophany -heave -heaved -heave-ho -heaveless -Heaven -heaven-accepted -heaven-aspiring -heaven-assailing -heaven-begot -heaven-bent -heaven-born -heaven-bred -heaven-built -heaven-clear -heaven-controlled -heaven-daring -heaven-dear -heaven-defying -heaven-descended -heaven-devoted -heaven-directed -Heavener -heaven-erected -Heavenese -heaven-fallen -heaven-forsaken -heavenful -heaven-gate -heaven-gifted -heaven-given -heaven-guided -heaven-high -heavenhood -heaven-inspired -heaven-instructed -heavenish -heavenishly -heavenize -heaven-kissing -heavenless -heavenly -heavenlier -heavenliest -heaven-lighted -heavenlike -heavenly-minded -heavenly-mindedness -heavenliness -heaven-lit -heaven-made -heaven-prompted -heaven-protected -heaven-reaching -heaven-rending -Heavens -heaven-sent -heaven-sprung -heaven-sweet -heaven-taught -heaven-threatening -heaven-touched -heavenward -heavenwardly -heavenwardness -heavenwards -heaven-warring -heaven-wide -heave-offering -heaver -heaver-off -heaver-out -heaver-over -heavers -heaves -heave-shouldered -heavy -heavy-armed -heavyback -heavy-bearded -heavy-blossomed -heavy-bodied -heavy-boned -heavy-booted -heavy-boughed -heavy-drinking -heavy-duty -heavy-eared -heavy-eyed -heavier -heavier-than-air -heavies -heaviest -heavy-faced -heavy-featured -heavy-fisted -heavy-fleeced -heavy-footed -heavy-footedness -heavy-fruited -heavy-gaited -heavyhanded -heavy-handed -heavy-handedly -heavyhandedness -heavy-handedness -heavy-head -heavyheaded -heavy-headed -heavyhearted -heavy-hearted -heavyheartedly -heavy-heartedly -heavyheartedness -heavy-heartedness -heavy-heeled -heavy-jawed -heavy-laden -heavy-leaved -heavily -heavy-lidded -heavy-limbed -heavy-lipped -heavy-looking -heavy-mettled -heavy-mouthed -heaviness -heavinesses -heaving -heavinsogme -heavy-paced -heavy-scented -heavy-seeming -heavyset -heavy-set -heavy-shotted -heavy-shouldered -heavy-shuttered -Heaviside -heavy-smelling -heavy-soled -heavisome -heavy-tailed -heavity -heavy-timbered -heavyweight -heavy-weight -heavyweights -heavy-winged -heavy-witted -heavy-wooded -heazy -Heb -Heb. -he-balsam -hebamic -Hebbe -Hebbel -Hebbronville -hebdomad -hebdomadal -hebdomadally -hebdomadary -hebdomadaries -hebdomader -hebdomads -hebdomary -hebdomarian -hebdomcad -Hebe -hebe- -hebeanthous -hebecarpous -hebecladous -hebegynous -Hebel -heben -hebenon -hebeosteotomy -hebepetalous -hebephrenia -hebephreniac -hebephrenic -Heber -Hebert -hebes -hebetate -hebetated -hebetates -hebetating -hebetation -hebetative -hebete -hebetic -hebetomy -hebetude -hebetudes -hebetudinous -Hebner -Hebo -hebotomy -Hebr -Hebraean -Hebraic -Hebraica -Hebraical -Hebraically -Hebraicize -Hebraisation -Hebraise -Hebraised -Hebraiser -Hebraising -Hebraism -Hebraist -Hebraistic -Hebraistical -Hebraistically -hebraists -Hebraization -Hebraize -Hebraized -Hebraizer -hebraizes -Hebraizing -Hebrew -Hebrewdom -Hebrewess -Hebrewism -Hebrews -Hebrew-wise -Hebrician -Hebridean -Hebrides -Hebridian -Hebron -Hebronite -he-broom -heb-sed -he-cabbage-tree -Hecabe -Hecaleius -Hecamede -hecastotheism -Hecataean -Hecate -Hecatean -Hecatic -Hecatine -hecatomb -Hecatombaeon -hecatombed -hecatombs -hecatomped -hecatompedon -Hecatoncheires -Hecatonchires -hecatonstylon -hecatontarchy -hecatontome -hecatophyllous -hecchsmhaer -hecco -hecctkaerre -hech -hechsher -hechsherim -hechshers -Hecht -Hechtia -Heck -heckelphone -Hecker -Heckerism -heck-how -heckimal -Hecklau -heckle -heckled -heckler -hecklers -heckles -heckling -Heckman -hecks -Hecla -hect- -hectar -hectare -hectares -hecte -hectic -hectical -hectically -hecticly -hecticness -hectyli -hective -hecto- -hecto-ampere -hectocotyl -hectocotyle -hectocotyli -hectocotyliferous -hectocotylization -hectocotylize -hectocotylus -hectogram -hectogramme -hectograms -hectograph -hectography -hectographic -hectoliter -hectoliters -hectolitre -hectometer -hectometers -Hector -Hectorean -hectored -hectorer -Hectorian -hectoring -hectoringly -hectorism -hectorly -hectors -hectorship -hectostere -hectowatt -Hecuba -hed -he'd -Heda -Hedberg -Hedda -Heddi -Heddy -Heddie -heddle -heddlemaker -heddler -heddles -hede -hedebo -Hedelman -hedenbergite -Hedeoma -heder -Hedera -hederaceous -hederaceously -hederal -hederated -hederic -hederiferous -hederiform -hederigerent -hederin -hederose -heders -Hedgcock -hedge -hedgebe -hedgeberry -hedge-bird -hedgeborn -hedgebote -hedge-bound -hedgebreaker -hedge-creeper -hedged -hedged-in -hedge-hyssop -hedgehog -hedgehoggy -hedgehogs -hedgehog's -hedgehop -hedgehoppe -hedgehopped -hedgehopper -hedgehopping -hedgehops -hedgeless -hedgemaker -hedgemaking -hedgepig -hedge-pig -hedgepigs -hedge-priest -hedger -hedgerow -hedgerows -hedgers -Hedges -hedge-school -hedgesmith -hedge-sparrow -Hedgesville -hedgetaper -hedgeweed -hedgewise -hedgewood -hedgy -hedgier -hedgiest -hedging -hedging-in -hedgingly -Hedi -Hedy -Hedychium -Hedie -Hedin -hedyphane -Hedysarum -Hedjaz -Hedley -HEDM -Hedone -hedonic -hedonical -hedonically -hedonics -hedonism -hedonisms -hedonist -hedonistic -hedonistically -hedonists -hedonology -hedonophobia -hedral -Hedrick -hedriophthalmous -hedrocele -hedron -hedrumite -Hedva -Hedvah -Hedve -Hedveh -Hedvig -Hedvige -Hedwig -Hedwiga -hee -heebie-jeebies -heed -heeded -heeder -heeders -heedful -heedfully -heedfulness -heedfulnesses -heedy -heedily -heediness -heeding -heedless -heedlessly -heedlessness -heedlessnesses -heeds -heehaw -hee-haw -heehawed -heehawing -heehaws -hee-hee -hee-hee! -heel -heel-and-toe -heel-attaching -heelball -heel-ball -heelballs -heelband -heel-bone -heel-breast -heel-breaster -heelcap -heeled -Heeley -heeler -heelers -heel-fast -heelgrip -heeling -heelings -heelless -heelmaker -heelmaking -heelpath -heelpiece -heel-piece -heelplate -heel-plate -heelpost -heel-post -heelposts -heelprint -heel-rope -heels -heelstrap -heeltap -heel-tap -heeltaps -heeltree -heel-way -heelwork -heemraad -heemraat -Heenan -Heep -Heer -Heerlen -heeze -heezed -heezes -heezy -heezie -heezing -Heffron -Heflin -heft -hefted -Hefter -hefters -hefty -heftier -heftiest -heftily -heftiness -hefting -hefts -hegari -hegaris -Hegarty -Hege -Hegel -Hegeleos -Hegelian -Hegelianism -Hegelianize -Hegelizer -hegemon -Hegemone -Hegemony -hegemonic -hegemonical -hegemonies -hegemonist -hegemonistic -hegemonizer -Heger -Hegyera -Hegyeshalom -Hegins -Hegira -hegiras -he-goat -hegumen -hegumene -hegumenes -hegumeness -hegumeny -hegumenies -hegumenos -hegumens -heh -Hehe -he-he! -he-heather -HEHO -he-holly -Hehre -hehs -he-huckleberry -he-huckleberries -hei -Hey -Heian -heiau -Heyburn -Heid -Heida -heyday -hey-day -heydays -Heyde -Heidegger -Heideggerian -Heideggerianism -heydeguy -heydey -heydeys -Heidelberg -Heidenheimer -Heidenstam -Heidi -Heidy -Heidie -Heydon -Heydrich -Heidrick -Heidrun -Heidt -Heiduc -Heyduck -Heiduk -Heyduke -Heyer -Heyerdahl -Heyes -heifer -heiferhood -heifers -Heifetz -heigh -heygh -heighday -heigh-ho -Heigho -height -heighted -heighten -heightened -heightener -heightening -heightens -heighth -heighths -heights -height-to-paper -Heigl -hey-ho -heii -Heijo -Heike -Heikum -heil -Heilbronn -heild -heiled -heily -Heiligenschein -Heiligenscheine -heiling -Heilman -Heilner -heils -Heiltsuk -Heilungkiang -Heilwood -Heim -Heymaey -Heyman -Heymann -Heymans -Heimdal -Heimdall -Heimdallr -Heimer -heimin -heimish -Heimlich -Heimweh -Hein -Heindrick -Heine -Heiney -Heiner -Heinesque -Heinie -heinies -heynne -heinous -heinously -heinousness -heinousnesses -Heinrich -Heinrick -Heinrik -Heinrike -Heins -Heintz -heintzite -Heinz -heypen -heir -heyrat -heir-at-law -heirdom -heirdoms -heired -heiress -heiressdom -heiresses -heiresshood -heiress's -heiress-ship -heiring -heirless -heirlo -heirloom -heirlooms -Heyrovsky -heirs -heir's -heirship -heirships -heirskip -Heis -Heise -Heyse -Heisel -Heisenberg -Heysham -heishi -Heiskell -Heislerville -Heisser -Heisson -heist -heisted -heister -heisters -heisting -heists -heitiki -Heitler -Heyward -Heywood -Heyworth -heize -heized -heizing -Hejaz -Hejazi -Hejazian -Hejira -hejiras -Hekataean -Hekate -Hekatean -hekhsher -hekhsherim -hekhshers -Hekker -Hekking -Hekla -hektare -hektares -hekteus -hektogram -hektograph -hektoliter -hektometer -hektostere -Hel -Hela -Helain -Helaina -Helaine -Helali -helas -Helban -helbeh -Helbon -Helbona -Helbonia -Helbonna -Helbonnah -Helbonnas -helco -helcoid -helcology -helcoplasty -helcosis -helcotic -Held -Helda -Heldentenor -heldentenore -heldentenors -helder -Helderbergian -hele -Helechawa -Helen -Helena -Helendale -Helene -Helen-Elizabeth -helenin -helenioid -Helenium -Helenka -helenn -Helenor -Helenus -Helenville -Helenwood -helepole -helewou -Helfand -Helfant -Helfenstein -Helga -Helge -Helgeson -Helgoland -Heli -heli- -heliac -heliacal -heliacally -Heliadae -Heliades -Heliaea -heliaean -Heliamphora -Heliand -helianthaceous -Helianthemum -helianthic -helianthin -Helianthium -Helianthoidea -Helianthoidean -Helianthus -helianthuses -heliast -heliastic -heliasts -heliazophyte -helibus -helic- -helical -helically -Helicaon -Helice -heliced -helices -helichryse -helichrysum -Helicidae -heliciform -helicin -Helicina -helicine -Helicinidae -helicity -helicitic -helicities -helicline -helico- -helicogyrate -helicogyre -helicograph -helicoid -helicoidal -helicoidally -helicoids -helicometry -Helicon -Heliconia -Heliconian -Heliconiidae -Heliconiinae -heliconist -Heliconius -helicons -helicoprotein -helicopt -helicopted -helicopter -helicopters -helicopting -helicopts -helicorubin -helicotrema -Helicteres -helictite -helide -helidrome -Heligmus -Heligoland -helilift -Helyn -Helyne -heling -helio -helio- -heliocentric -heliocentrical -heliocentrically -heliocentricism -heliocentricity -Heliochrome -heliochromy -heliochromic -heliochromoscope -heliochromotype -helioculture -heliodon -heliodor -helioelectric -helioengraving -heliofugal -Heliogabalize -Heliogabalus -heliogram -heliograph -heliographer -heliography -heliographic -heliographical -heliographically -heliographs -heliogravure -helioid -heliolater -heliolator -heliolatry -heliolatrous -heliolite -Heliolites -heliolithic -Heliolitidae -heliology -heliological -heliologist -heliometer -heliometry -heliometric -heliometrical -heliometrically -heliomicrometer -Helion -heliophilia -heliophiliac -heliophyllite -heliophilous -heliophyte -heliophobe -heliophobia -heliophobic -heliophobous -heliophotography -Heliopolis -Heliopora -heliopore -Helioporidae -Heliopsis -heliopticon -Heliornis -Heliornithes -Heliornithidae -Helios -helioscope -helioscopy -helioscopic -heliosis -heliostat -heliostatic -heliotactic -heliotaxis -heliotherapy -heliotherapies -heliothermometer -Heliothis -heliotype -heliotyped -heliotypy -heliotypic -heliotypically -heliotyping -heliotypography -heliotrope -heliotroper -heliotropes -heliotropy -Heliotropiaceae -heliotropian -heliotropic -heliotropical -heliotropically -heliotropin -heliotropine -heliotropism -Heliotropium -Heliozoa -heliozoan -heliozoic -helipad -helipads -heliport -heliports -Helipterum -helispheric -helispherical -helistop -helistops -helium -heliums -Helius -helix -helixes -helixin -helizitic -Hell -he'll -Helladian -Helladic -Helladotherium -hellandite -hellanodic -Hellas -hell-begotten -hellbender -hellbent -hell-bent -hell-bind -hell-black -hellbore -hellborn -hell-born -hell-bound -hellbox -hellboxes -hellbred -hell-bred -hell-brewed -hellbroth -hellcat -hell-cat -hellcats -hell-dark -hell-deep -hell-devil -helldiver -hell-diver -helldog -hell-doomed -hell-driver -Helle -helleboraceous -helleboraster -hellebore -helleborein -hellebores -helleboric -helleborin -Helleborine -helleborism -Helleborus -helled -Hellelt -Hellen -Hellene -hellenes -hell-engendered -Hellenian -Hellenic -Hellenically -Hellenicism -Hellenisation -Hellenise -Hellenised -Helleniser -Hellenising -Hellenism -Hellenist -Hellenistic -Hellenistical -Hellenistically -Hellenisticism -hellenists -Hellenization -Hellenize -Hellenized -Hellenizer -Hellenizing -Hellenocentric -Helleno-italic -Hellenophile -Heller -helleri -hellery -helleries -hellers -Hellertown -Helles -Hellespont -Hellespontine -Hellespontus -hellfire -hell-fire -hell-fired -hellfires -hell-for-leather -hell-gate -hellgrammite -hellgrammites -hellhag -hell-hard -hell-hatched -hell-haunted -hellhole -hellholes -hellhound -hell-hound -Helli -helly -hellicat -hellicate -Hellier -hellim -helling -hellion -hellions -hellish -hellishly -hellishness -hellkite -hellkites -hell-like -Hellman -hellness -hello -helloed -helloes -helloing -hellos -hell-raiser -hell-raker -hell-red -hellroot -hells -hell's -hellship -helluo -helluva -hellvine -hell-vine -hellward -hellweed -Helm -helmage -Helman -Helmand -helmed -Helmer -helmet -helmet-crest -helmeted -helmetflower -helmeting -helmetlike -helmetmaker -helmetmaking -helmetpod -helmets -helmet's -helmet-shaped -Helmetta -helmet-wearing -Helmholtz -Helmholtzian -helming -helminth -helminth- -helminthagogic -helminthagogue -Helminthes -helminthiasis -helminthic -helminthism -helminthite -Helminthocladiaceae -helminthoid -helminthology -helminthologic -helminthological -helminthologist -helminthophobia -helminthosporiose -Helminthosporium -helminthosporoid -helminthous -helminths -helmless -Helmont -Helms -Helmsburg -helmsman -helmsmanship -helmsmen -Helmut -Helmuth -Helmville -helm-wind -helobious -heloderm -Heloderma -Helodermatidae -helodermatoid -helodermatous -helodes -heloe -Heloise -heloma -Helonia -Helonias -helonin -helosis -Helot -helotage -helotages -Helotes -helotism -helotisms -helotize -helotomy -helotry -helotries -helots -help -helpable -helped -Helper -helpers -helpful -helpfully -helpfulness -helpfulnesses -helping -helpingly -helpings -helpless -helplessly -helplessness -helplessnesses -helply -Helpmann -helpmate -helpmates -helpmeet -helpmeets -Helprin -helps -helpsome -helpworthy -Helsa -Helse -Helsell -Helsie -Helsingborg -Helsingfors -helsingkite -Helsingo -Helsingor -Helsinki -helter-skelter -helterskelteriness -helter-skelteriness -Heltonville -Helve -helved -helvell -Helvella -Helvellaceae -helvellaceous -Helvellales -helvellic -Helvellyn -helver -helves -Helvetia -Helvetian -Helvetic -Helvetica -Helvetii -Helvetius -Helvidian -helvin -helvine -helving -helvite -Helvtius -helzel -HEM -hem- -hema- -hemabarometer -hemachate -hemachrome -hemachrosis -hemacite -hemacytometer -hemad -hemadynameter -hemadynamic -hemadynamics -hemadynamometer -hemadrometer -hemadrometry -hemadromograph -hemadromometer -hemafibrite -hemagglutinate -hemagglutinated -hemagglutinating -hemagglutination -hemagglutinative -hemagglutinin -hemagog -hemagogic -hemagogs -hemagogue -hemal -hemalbumen -hemameba -hemamoeba -Heman -he-man -hemanalysis -hemangioma -hemangiomas -hemangiomata -hemangiomatosis -hemangiosarcoma -he-mannish -Hemans -hemaphein -hemaphobia -hemapod -hemapodous -hemapoiesis -hemapoietic -hemapophyseal -hemapophysial -hemapophysis -hemarthrosis -hemase -hemaspectroscope -hemastatics -hemat- -hematachometer -hematachometry -hematal -hematein -hemateins -hematemesis -hematemetic -hematencephalon -hematherapy -hematherm -hemathermal -hemathermous -hemathidrosis -hematic -hematics -hematid -hematidrosis -hematimeter -hematin -hematine -hematines -hematinic -hematinometer -hematinometric -hematins -hematinuria -hematite -hematites -hematitic -hemato- -hematobic -hematobious -hematobium -hematoblast -hematoblastic -hematobranchiate -hematocatharsis -hematocathartic -hematocele -hematochezia -hematochyluria -hematochrome -hematocyanin -hematocyst -hematocystis -hematocyte -hematocytoblast -hematocytogenesis -hematocytometer -hematocytotripsis -hematocytozoon -hematocyturia -hematoclasia -hematoclasis -hematocolpus -hematocryal -hematocrystallin -hematocrit -hematodynamics -hematodynamometer -hematodystrophy -hematogen -hematogenesis -hematogenetic -hematogenic -hematogenous -hematoglobulin -hematography -hematohidrosis -hematoid -hematoidin -hematoids -hematolymphangioma -hematolin -hematolysis -hematolite -hematolytic -hematology -hematologic -hematological -hematologies -hematologist -hematologists -hematoma -hematomancy -hematomas -hematomata -hematometer -hematometra -hematometry -hematomyelia -hematomyelitis -hematomphalocele -hematonephrosis -hematonic -hematopathology -hematopenia -hematopericardium -hematopexis -hematophagous -hematophyte -hematophobia -hematoplast -hematoplastic -hematopoiesis -hematopoietic -hematopoietically -hematoporphyria -hematoporphyrin -hematoporphyrinuria -hematorrhachis -hematorrhea -hematosalpinx -hematoscope -hematoscopy -hematose -hematosepsis -hematosin -hematosis -hematospectrophotometer -hematospectroscope -hematospermatocele -hematospermia -hematostibiite -hematotherapy -hematothermal -hematothorax -hematoxic -hematoxylic -hematoxylin -hematozymosis -hematozymotic -hematozoa -hematozoal -hematozoan -hematozoic -hematozoon -hematozzoa -hematuresis -hematuria -hematuric -hemautogram -hemautograph -hemautography -hemautographic -Hembree -heme -hemelytra -hemelytral -hemelytron -hemelytrum -hemelyttra -hemellitene -hemellitic -hemen -he-men -Hemera -hemeralope -hemeralopia -hemeralopic -Hemerasia -hemerythrin -Hemerobaptism -Hemerobaptist -Hemerobian -Hemerobiid -Hemerobiidae -Hemerobius -Hemerocallis -hemerology -hemerologium -hemes -Hemet -hemi- -hemia -hemiablepsia -hemiacetal -hemiachromatopsia -hemiageusia -hemiageustia -hemialbumin -hemialbumose -hemialbumosuria -hemialgia -hemiamaurosis -hemiamb -hemiamblyopia -hemiamyosthenia -hemianacusia -hemianalgesia -hemianatropous -hemianesthesia -hemianopia -hemianopic -hemianopsia -hemianoptic -hemianosmia -hemiapraxia -Hemiascales -Hemiasci -Hemiascomycetes -hemiasynergia -hemiataxy -hemiataxia -hemiathetosis -hemiatrophy -hemiauxin -hemiazygous -Hemibasidiales -Hemibasidii -Hemibasidiomycetes -hemibasidium -hemibathybian -hemibenthic -hemibenthonic -hemibranch -hemibranchiate -Hemibranchii -hemic -hemicanities -hemicardia -hemicardiac -hemicarp -hemicatalepsy -hemicataleptic -hemicellulose -hemicentrum -hemicephalous -hemicerebrum -hemicholinium -Hemichorda -hemichordate -hemichorea -hemichromatopsia -hemicycle -hemicyclic -hemicyclium -hemicylindrical -hemicircle -hemicircular -hemiclastic -hemicollin -hemicrane -hemicrany -hemicrania -hemicranic -hemicrystalline -hemidactyl -hemidactylous -Hemidactylus -hemidemisemiquaver -hemidiapente -hemidiaphoresis -hemidysergia -hemidysesthesia -hemidystrophy -hemiditone -hemidomatic -hemidome -hemidrachm -hemiekton -hemielytra -hemielytral -hemielytron -hemi-elytrum -hemielliptic -hemiepes -hemiepilepsy -hemifacial -hemiform -Hemigale -Hemigalus -Hemiganus -hemigastrectomy -hemigeusia -hemiglyph -hemiglobin -hemiglossal -hemiglossitis -hemignathous -hemihdry -hemihedral -hemihedrally -hemihedric -hemihedrism -hemihedron -hemihydrate -hemihydrated -hemihydrosis -hemihypalgesia -hemihyperesthesia -hemihyperidrosis -hemihypertonia -hemihypertrophy -hemihypesthesia -hemihypoesthesia -hemihypotonia -hemiholohedral -hemikaryon -hemikaryotic -hemilaminectomy -hemilaryngectomy -Hemileia -hemilethargy -hemiligulate -hemilingual -hemimellitene -hemimellitic -hemimelus -Hemimeridae -Hemimerus -Hemimetabola -hemimetabole -hemimetaboly -hemimetabolic -hemimetabolism -hemimetabolous -hemimetamorphic -hemimetamorphosis -hemimetamorphous -Hemimyaria -hemimorph -hemimorphy -hemimorphic -hemimorphism -hemimorphite -hemin -hemina -hemine -heminee -hemineurasthenia -Hemingford -Hemingway -Hemingwayesque -hemins -hemiobol -hemiola -hemiolas -hemiolia -hemiolic -hemionus -hemiope -hemiopia -hemiopic -hemiopsia -hemiorthotype -hemiparalysis -hemiparanesthesia -hemiparaplegia -hemiparasite -hemiparasitic -hemiparasitism -hemiparesis -hemiparesthesia -hemiparetic -hemipenis -hemipeptone -hemiphrase -hemipic -hemipinnate -hemipyramid -hemiplane -hemiplankton -hemiplegy -hemiplegia -hemiplegic -hemipod -hemipodan -hemipode -Hemipodii -Hemipodius -hemippe -hemiprism -hemiprismatic -hemiprotein -hemipter -Hemiptera -hemipteral -hemipteran -hemipteroid -hemipterology -hemipterological -hemipteron -hemipterous -hemipters -hemiquinonoid -hemiramph -Hemiramphidae -Hemiramphinae -hemiramphine -Hemiramphus -hemisaprophyte -hemisaprophytic -hemiscotosis -hemisect -hemisection -hemisymmetry -hemisymmetrical -hemisystematic -hemisystole -hemispasm -hemispheral -hemisphere -hemisphered -hemispheres -hemisphere's -hemispheric -hemispherical -hemispherically -hemispherico-conical -hemispherico-conoid -hemispheroid -hemispheroidal -hemispherule -hemistater -hemistich -hemistichal -hemistichs -hemistrumectomy -hemiterata -hemiteratic -hemiteratics -hemitery -hemiteria -hemiterpene -Hemithea -hemithyroidectomy -hemitype -hemi-type -hemitypic -hemitone -hemitremor -hemitrichous -hemitriglyph -hemitropal -hemitrope -hemitropy -hemitropic -hemitropism -hemitropous -hemivagotony -hemizygote -hemizygous -heml -hemline -hemlines -hemlock -hemlock-leaved -hemlocks -hemlock's -hemmed -hemmed-in -hemmel -hemmer -hemmers -hemming -Hemminger -hemming-in -hemo- -hemoalkalimeter -hemoblast -hemochromatosis -hemochromatotic -hemochrome -hemochromogen -hemochromometer -hemochromometry -hemocyanin -hemocyte -hemocytes -hemocytoblast -hemocytoblastic -hemocytogenesis -hemocytolysis -hemocytometer -hemocytotripsis -hemocytozoon -hemocyturia -hemoclasia -hemoclasis -hemoclastic -hemocoel -hemocoele -hemocoelic -hemocoelom -hemocoels -hemoconcentration -hemoconia -hemoconiosis -hemocry -hemocrystallin -hemoculture -hemodia -hemodiagnosis -hemodialyses -hemodialysis -hemodialyzer -hemodilution -hemodynameter -hemodynamic -hemodynamically -hemodynamics -hemodystrophy -hemodrometer -hemodrometry -hemodromograph -hemodromometer -hemoerythrin -hemoflagellate -hemofuscin -hemogastric -hemogenesis -hemogenetic -hemogenia -hemogenic -hemogenous -hemoglobic -hemoglobin -hemoglobinemia -hemoglobinic -hemoglobiniferous -hemoglobinocholia -hemoglobinometer -hemoglobinopathy -hemoglobinophilic -hemoglobinous -hemoglobinuria -hemoglobinuric -hemoglobulin -hemogram -hemogregarine -hemoid -hemokonia -hemokoniosis -hemol -hemoleucocyte -hemoleucocytic -hemolymph -hemolymphatic -hemolysate -hemolysin -hemolysis -hemolytic -hemolyze -hemolyzed -hemolyzes -hemolyzing -hemology -hemologist -hemomanometer -hemometer -hemometry -Hemon -hemonephrosis -hemopathy -hemopathology -hemopericardium -hemoperitoneum -hemopexis -hemophage -hemophagy -hemophagia -hemophagocyte -hemophagocytosis -hemophagous -hemophile -Hemophileae -hemophilia -hemophiliac -hemophiliacs -hemophilic -hemophilioid -Hemophilus -hemophobia -hemophthalmia -hemophthisis -hemopiezometer -hemopyrrole -hemoplasmodium -hemoplastic -hemopneumothorax -hemopod -hemopoiesis -hemopoietic -hemoproctia -hemoprotein -hemoptysis -hemoptoe -hemorrhage -hemorrhaged -hemorrhages -hemorrhagic -hemorrhagin -hemorrhaging -hemorrhea -hemorrhodin -hemorrhoid -hemorrhoidal -hemorrhoidectomy -hemorrhoidectomies -hemorrhoids -hemosalpinx -hemoscope -hemoscopy -hemosiderin -hemosiderosis -hemosiderotic -hemospasia -hemospastic -hemospermia -hemosporid -hemosporidian -hemostasia -hemostasis -hemostat -hemostatic -hemostats -hemotachometer -hemotherapeutics -hemotherapy -hemothorax -hemotoxic -hemotoxin -hemotrophe -hemotrophic -hemotropic -hemozoon -HEMP -hemp-agrimony -hempbush -hempen -hempherds -Hemphill -hempy -hempie -hempier -hempiest -hemplike -hemp-nettle -hemps -hempseed -hempseeds -Hempstead -hempstring -hempweed -hempweeds -hempwort -HEMS -hem's -hemself -hemstitch -hem-stitch -hemstitched -hemstitcher -hemstitches -hemstitching -HEMT -hemule -Hen -henad -Henagar -hen-and-chickens -henbane -henbanes -henbill -henbit -henbits -hence -henceforth -henceforward -henceforwards -Hench -henchboy -hench-boy -henchman -henchmanship -henchmen -hencoop -hen-coop -hencoops -hencote -hend -Hendaye -hendeca- -hendecacolic -hendecagon -hendecagonal -hendecahedra -hendecahedral -hendecahedron -hendecahedrons -hendecane -hendecasemic -hendecasyllabic -hendecasyllable -hendecatoic -hendecyl -hendecoic -hendedra -Hendel -Henden -Henderson -Hendersonville -hendy -hendiadys -Hendley -hendly -hendness -Hendon -Hendren -Hendry -Hendrick -Hendricks -Hendrickson -Hendrik -Hendrika -hen-driver -Hendrix -Hendrum -Henebry -Henefer -hen-egg -heneicosane -henen -henequen -henequens -henequin -henequins -hen-fat -hen-feathered -hen-feathering -henfish -Heng -henge -Hengel -Hengelo -Hengest -Hengfeng -Henghold -Hengyang -Heng-yang -Hengist -hen-harrier -henhawk -hen-hawk -henhearted -hen-hearted -henheartedness -henhouse -hen-house -henhouses -henhussy -henhussies -henyard -Henie -Henig -Henigman -Henioche -heniquen -heniquens -henism -Henka -Henke -Henlawson -Henley -Henleigh -Henley-on-Thames -henlike -henmoldy -Henn -henna -hennaed -Hennahane -hennaing -hennas -Hennebery -Hennebique -Hennepin -hennery -henneries -hennes -Hennessey -Hennessy -Henni -henny -Hennie -Hennig -Henniker -hennin -Henning -hennish -Henoch -henogeny -henotheism -henotheist -henotheistic -henotic -henpeck -hen-peck -henpecked -hen-pecked -henpecking -henpecks -henpen -Henri -Henry -Henrician -Henricks -Henrico -Henrie -henries -Henrieta -Henrietta -Henryetta -Henriette -Henrieville -Henriha -Henrik -Henryk -Henrika -Henrion -Henrique -Henriques -henrys -Henryson -Henryton -Henryville -henroost -hen-roost -hens -hen's -hens-and-chickens -Hensel -hen's-foot -Hensley -Hensler -Henslowe -Henson -Hensonville -hent -hen-tailed -hented -Hentenian -henter -Henty -henting -hentriacontane -Hentrich -hents -henware -henwife -henwile -henwise -henwoodite -Henzada -Henze -HEO -he-oak -heortology -heortological -heortologion -HEP -hepar -heparin -heparinization -heparinize -heparinized -heparinizing -heparinoid -heparins -hepat- -hepatalgia -hepatatrophy -hepatatrophia -hepatauxe -hepatectomy -hepatectomies -hepatectomize -hepatectomized -hepatectomizing -hepatic -Hepatica -Hepaticae -hepatical -hepaticas -hepaticoduodenostomy -hepaticoenterostomy -hepaticoenterostomies -hepaticogastrostomy -hepaticology -hepaticologist -hepaticopulmonary -hepaticostomy -hepaticotomy -hepatics -hepatisation -hepatise -hepatised -hepatising -hepatite -hepatitis -hepatization -hepatize -hepatized -hepatizes -hepatizing -hepato- -hepatocele -hepatocellular -hepatocirrhosis -hepatocystic -hepatocyte -hepatocolic -hepatodynia -hepatodysentery -hepatoduodenal -hepatoduodenostomy -hepatoenteric -hepatoflavin -hepatogastric -hepatogenic -hepatogenous -hepatography -hepatoid -hepatolenticular -hepatolysis -hepatolith -hepatolithiasis -hepatolithic -hepatolytic -hepatology -hepatological -hepatologist -hepatoma -hepatomalacia -hepatomas -hepatomata -hepatomegaly -hepatomegalia -hepatomelanosis -hepatonephric -hepatopancreas -hepato-pancreas -hepatopathy -hepatoperitonitis -hepatopexy -hepatopexia -hepatophyma -hepatophlebitis -hepatophlebotomy -hepatopneumonic -hepatoportal -hepatoptosia -hepatoptosis -hepatopulmonary -hepatorenal -hepatorrhagia -hepatorrhaphy -hepatorrhea -hepatorrhexis -hepatorrhoea -hepatoscopy -hepatoscopies -hepatostomy -hepatotherapy -hepatotomy -hepatotoxemia -hepatotoxic -hepatotoxicity -hepatotoxin -hepatoumbilical -Hepburn -hepcat -hepcats -Hephaesteum -Hephaestian -Hephaestic -Hephaestus -Hephaistos -hephthemimer -hephthemimeral -Hephzibah -Hephzipa -Hephzipah -hepialid -Hepialidae -Hepialus -Hepler -heppen -hepper -Hepplewhite -Heppman -Heppner -Hepsiba -Hepsibah -hepta- -heptacapsular -heptace -heptachlor -heptachord -heptachronous -heptacolic -heptacosane -heptad -heptadecane -heptadecyl -heptadic -heptads -heptagynia -heptagynous -heptaglot -heptagon -heptagonal -heptagons -heptagrid -heptahedra -heptahedral -heptahedrdra -heptahedrical -heptahedron -heptahedrons -heptahexahedral -heptahydrate -heptahydrated -heptahydric -heptahydroxy -heptal -heptameride -Heptameron -heptamerous -heptameter -heptameters -heptamethylene -heptametrical -heptanaphthene -Heptanchus -heptandria -heptandrous -heptane -heptanes -Heptanesian -heptangular -heptanoic -heptanone -heptapetalous -heptaphyllous -heptaploid -heptaploidy -heptapody -heptapodic -heptarch -heptarchal -heptarchy -heptarchic -heptarchical -heptarchies -heptarchist -heptarchs -heptasemic -heptasepalous -heptasyllabic -heptasyllable -heptaspermous -heptastich -heptastylar -heptastyle -heptastylos -heptastrophic -heptasulphide -Heptateuch -heptatomic -heptatonic -Heptatrema -heptavalent -heptene -hepteris -heptyl -heptylene -heptylic -heptine -heptyne -heptite -heptitol -heptode -heptoic -heptorite -heptose -heptoses -heptoxide -Heptranchias -Hepworth -Hepza -Hepzi -Hepzibah -her -her. -HERA -Heraclea -Heraclean -heracleid -Heracleidae -Heracleidan -Heracleonite -Heracleopolitan -Heracleopolite -Heracles -Heracleum -Heraclid -Heraclidae -Heraclidan -Heraclitean -Heracliteanism -Heraclitic -Heraclitical -Heraclitism -Heraclitus -Heraclius -Heraea -Heraye -Heraklean -Herakleion -Herakles -Heraklid -Heraklidan -Herald -heralded -heraldess -heraldic -heraldical -heraldically -heralding -heraldist -heraldists -heraldize -heraldress -heraldry -heraldries -heralds -heraldship -herapathite -Herat -heraud -Herault -heraus -Herb -herba -herbaceous -herbaceously -herbage -herbaged -herbager -herbages -herbagious -herbal -herbalism -herbalist -herbalists -herbalize -herbals -herbane -herbar -herbarbaria -herbary -herbaria -herbarial -herbarian -herbariia -herbariiums -herbarism -herbarist -herbarium -herbariums -herbarize -herbarized -herbarizing -Herbart -Herbartian -Herbartianism -herbbane -herbed -herber -herbergage -herberger -Herbert -herbescent -herb-grace -Herby -herbicidal -herbicidally -herbicide -herbicides -herbicolous -herbid -Herbie -herbier -herbiest -herbiferous -herbish -herbist -Herbivora -herbivore -herbivores -herbivorism -herbivority -herbivorous -herbivorously -herbivorousness -herbless -herblet -herblike -Herblock -herbman -herborist -herborization -herborize -herborized -herborizer -herborizing -Herborn -herbose -herbosity -herbous -herbrough -herbs -herb's -Herbst -Herbster -herbwife -herbwoman -herb-woman -Herc -Hercegovina -Herceius -Hercyna -Hercynian -hercynite -hercogamy -hercogamous -Herculanean -Herculanensian -Herculaneum -Herculanian -Hercule -Herculean -Hercules -Hercules'-club -herculeses -Herculid -Herculie -Herculis -herd -herdboy -herd-boy -herdbook -herd-book -herded -Herder -herderite -herders -herdess -herd-grass -herd-groom -herdic -herdics -herding -herdlike -herdman -herdmen -herds -herd's-grass -herdship -herdsman -herdsmen -herdswoman -herdswomen -Herdwick -Here -hereabout -hereabouts -hereadays -hereafter -hereafters -hereafterward -hereagain -hereagainst -hereamong -hereanent -hereat -hereaway -hereaways -herebefore -hereby -heredes -Heredia -heredipety -heredipetous -hereditability -hereditable -hereditably -heredital -hereditament -hereditaments -hereditary -hereditarian -hereditarianism -hereditarily -hereditariness -hereditarist -hereditas -hereditation -hereditative -heredity -heredities -hereditism -hereditist -hereditivity -heredium -heredofamilial -heredolues -heredoluetic -heredosyphilis -heredosyphilitic -heredosyphilogy -heredotuberculosis -Hereford -herefords -Herefordshire -herefore -herefrom -heregeld -heregild -herehence -here-hence -herein -hereinabove -hereinafter -hereinbefore -hereinbelow -hereinto -Hereld -herem -heremeit -herenach -hereness -hereniging -hereof -hereon -hereout -hereright -Herero -heres -here's -heresy -heresiarch -heresies -heresimach -heresiographer -heresiography -heresiographies -heresiologer -heresiology -heresiologies -heresiologist -heresyphobia -heresyproof -heretic -heretical -heretically -hereticalness -hereticate -hereticated -heretication -hereticator -hereticide -hereticize -heretics -heretic's -hereto -heretoch -heretofore -heretoforetime -heretoga -heretrices -heretrix -heretrixes -hereunder -hereunto -hereupon -hereupto -Hereward -herewith -herewithal -herezeld -Hergesheimer -hery -Heriberto -herigaut -Herigonius -herile -Hering -Heringer -Herington -heriot -heriotable -heriots -Herisau -herisson -heritability -heritabilities -heritable -heritably -heritage -heritages -heritance -Heritiera -heritor -heritors -heritress -heritrices -heritrix -heritrixes -herky-jerky -Herkimer -herl -herling -Herlong -herls -Herm -Herma -hermae -hermaean -hermai -hermaic -Herman -hermandad -Hermann -Hermannstadt -Hermansville -Hermanville -hermaphrodeity -hermaphrodism -hermaphrodite -hermaphrodites -hermaphroditic -hermaphroditical -hermaphroditically -hermaphroditish -hermaphroditism -hermaphroditize -Hermaphroditus -Hermas -hermatypic -hermele -hermeneut -hermeneutic -hermeneutical -hermeneutically -hermeneutics -hermeneutist -Hermes -Hermesian -Hermesianism -Hermetic -hermetical -hermetically -Hermeticism -Hermetics -Hermetism -Hermetist -hermi -Hermy -Hermia -hermidin -Hermie -Hermina -Hermine -Herminia -Herminie -Herminone -Hermione -Hermiston -Hermit -Hermitage -hermitages -hermitary -Hermite -hermitess -hermitian -hermitic -hermitical -hermitically -hermitish -hermitism -hermitize -hermitlike -hermitry -hermitries -hermits -hermit's -hermitship -Hermleigh -Hermo -hermo- -Hermod -hermodact -hermodactyl -Hermogenian -hermogeniarnun -hermoglyphic -hermoglyphist -hermokopid -Hermon -Hermosa -Hermosillo -Hermoupolis -herms -hern -her'n -Hernandez -Hernandia -Hernandiaceae -hernandiaceous -Hernando -hernanesell -hernani -hernant -Hernardo -Herndon -Herne -hernia -herniae -hernial -herniary -Herniaria -herniarin -hernias -herniate -herniated -herniates -herniating -herniation -herniations -hernio- -hernioenterotomy -hernioid -herniology -hernioplasty -hernioplasties -herniopuncture -herniorrhaphy -herniorrhaphies -herniotome -herniotomy -herniotomies -herniotomist -herns -hernsew -Hernshaw -HERO -heroarchy -Herod -Herodian -Herodianic -Herodias -Herodii -Herodiones -herodionine -Herodotus -heroes -heroess -herohead -herohood -heroic -heroical -heroically -heroicalness -heroicity -heroicly -heroicness -heroicomic -heroi-comic -heroicomical -heroics -heroid -Heroides -heroify -Heroin -heroine -heroines -heroine's -heroineship -heroinism -heroinize -heroins -heroism -heroisms -heroistic -heroization -heroize -heroized -heroizes -heroizing -herola -Herold -herolike -heromonger -Heron -heronbill -heroner -heronite -heronry -heronries -herons -heron's -heron's-bill -heronsew -heroogony -heroology -heroologist -Herophile -Herophilist -Herophilus -Heros -heroship -hero-shiped -hero-shiping -hero-shipped -hero-shipping -herotheism -hero-worship -hero-worshiper -hero-worshiping -heroworshipper -herp -herp. -herpangina -herpes -herpeses -Herpestes -Herpestinae -herpestine -herpesvirus -herpet -herpet- -herpetic -herpetiform -herpetism -herpetography -herpetoid -herpetology -herpetologic -herpetological -herpetologically -herpetologies -herpetologist -herpetologists -herpetomonad -Herpetomonas -herpetophobia -herpetotomy -herpetotomist -herpolhode -Herpotrichia -herquein -Herr -Herra -Herrah -herr-ban -Herreid -Herren -herrengrundite -Herrenvolk -Herrenvolker -Herrera -Herrerista -herrgrdsost -herry -Herrick -herried -Herries -herrying -herryment -Herrin -Herring -herringbone -herring-bone -herringbones -herringer -herring-kale -herringlike -herring-pond -Herrings -herring's -herring-shaped -Herrington -Herriot -Herriott -Herrle -Herrmann -Herrnhuter -Herrod -Herron -hers -hersall -Hersch -Herschel -Herschelian -herschelite -Herscher -Herse -hersed -Hersey -herself -Hersh -Hershey -Hershel -Hershell -hership -Hersilia -hersir -Herskowitz -Herson -Herstein -Herstmonceux -hert -Herta -Hertberg -Hertel -Herter -Hertford -Hertfordshire -Hertha -Hertogenbosch -Herts -Hertz -hertzes -Hertzfeld -Hertzian -Hertzog -Heruli -Herulian -Herut -Herv -Hervati -Herve -Hervey -Herwick -Herwig -Herwin -Herzberg -Herzegovina -Herzegovinian -Herzel -Herzen -Herzig -Herzl -Herzog -hes -he's -Hescock -Heshum -Heshvan -Hesychasm -Hesychast -Hesychastic -Hesiod -Hesiodic -Hesiodus -Hesione -Hesionidae -hesitance -hesitancy -hesitancies -hesitant -hesitantly -hesitate -hesitated -hesitater -hesitaters -hesitates -hesitating -hesitatingly -hesitatingness -hesitation -hesitations -hesitative -hesitatively -hesitator -hesitatory -Hesketh -Hesky -Hesler -hesped -hespel -hespeperidia -Hesper -hesper- -Hespera -Hespere -Hesperia -Hesperian -Hesperic -Hesperid -hesperid- -hesperidate -hesperidene -hesperideous -Hesperides -hesperidia -Hesperidian -hesperidin -hesperidium -hesperiid -Hesperiidae -hesperinon -hesperinos -Hesperis -hesperitin -Hesperornis -Hesperornithes -hesperornithid -Hesperornithiformes -hesperornithoid -Hesperus -Hess -Hesse -Hessel -Hessen -Hesse-Nassau -Hessen-Nassau -Hessian -hessians -hessite -hessites -Hessler -Hessmer -Hessney -hessonite -Hesston -hest -Hesta -Hestand -Hester -hestern -hesternal -Hesther -hesthogenous -Hestia -hests -het -hetaera -hetaerae -hetaeras -hetaery -hetaeria -hetaeric -hetaerio -hetaerism -Hetaerist -hetaeristic -hetaerocracy -hetaerolite -hetaira -hetairai -hetairas -hetairy -hetairia -hetairic -hetairism -hetairist -hetairistic -hetchel -hete -heter- -heteradenia -heteradenic -heterakid -Heterakis -Heteralocha -heterandry -heterandrous -heteratomic -heterauxesis -heteraxial -heterecious -heteric -heterically -hetericism -hetericist -heterism -heterization -heterize -hetero -hetero- -heteroagglutinin -heteroalbumose -heteroaromatic -heteroatom -heteroatomic -heteroautotrophic -heteroauxin -heteroblasty -heteroblastic -heteroblastically -heterocaryon -heterocaryosis -heterocaryotic -heterocarpism -heterocarpous -Heterocarpus -heterocaseose -heterocellular -heterocentric -heterocephalous -Heterocera -heterocerc -heterocercal -heterocercality -heterocercy -heterocerous -heterochiral -heterochlamydeous -Heterochloridales -heterochromatic -heterochromatin -heterochromatism -heterochromatization -heterochromatized -heterochrome -heterochromy -heterochromia -heterochromic -heterochromosome -heterochromous -heterochrony -heterochronic -heterochronism -heterochronistic -heterochronous -heterochrosis -heterochthon -heterochthonous -heterocycle -heterocyclic -heterocyst -heterocystous -heterocline -heteroclinous -heteroclital -heteroclite -heteroclitic -heteroclitica -heteroclitical -heteroclitous -Heterocoela -heterocoelous -Heterocotylea -heterocrine -heterodactyl -Heterodactylae -heterodactylous -Heterodera -heterodyne -heterodyned -heterodyning -Heterodon -heterodont -Heterodonta -Heterodontidae -heterodontism -heterodontoid -Heterodontus -heterodox -heterodoxal -heterodoxy -heterodoxical -heterodoxies -heterodoxly -heterodoxness -heterodromy -heterodromous -heteroecy -heteroecious -heteroeciously -heteroeciousness -heteroecism -heteroecismal -heteroepy -heteroepic -heteroerotic -heteroerotism -heterofermentative -heterofertilization -heterogalactic -heterogamete -heterogamety -heterogametic -heterogametism -heterogamy -heterogamic -heterogamous -heterogangliate -heterogen -heterogene -heterogeneal -heterogenean -heterogeneity -heterogeneities -heterogeneous -heterogeneously -heterogeneousness -heterogenesis -heterogenetic -heterogenetically -heterogeny -heterogenic -heterogenicity -heterogenisis -heterogenist -heterogenous -heterogenously -heterogenousness -heterogenousnesses -Heterogyna -heterogynal -heterogynous -heteroglobulose -heterognath -Heterognathi -heterogone -heterogony -heterogonic -heterogonism -heterogonous -heterogonously -heterograft -heterography -heterographic -heterographical -heterographies -heteroicous -heteroimmune -heteroinfection -heteroinoculable -heteroinoculation -heterointoxication -heterokaryon -heterokaryosis -heterokaryotic -heterokinesia -heterokinesis -heterokinetic -Heterokontae -heterokontan -heterolalia -heterolateral -heterolecithal -heterolysin -heterolysis -heterolith -heterolytic -heterolobous -heterology -heterologic -heterological -heterologically -heterologies -heterologous -heterologously -heteromallous -heteromastigate -heteromastigote -Heteromeles -Heteromera -heteromeral -Heteromeran -Heteromeri -heteromeric -heteromerous -heteromesotrophic -Heterometabola -heterometabole -heterometaboly -heterometabolic -heterometabolism -heterometabolous -heterometatrophic -heterometric -Heteromi -Heteromya -Heteromyaria -heteromyarian -Heteromyidae -Heteromys -Heteromita -Heteromorpha -Heteromorphae -heteromorphy -heteromorphic -heteromorphism -heteromorphite -heteromorphosis -heteromorphous -heteronereid -heteronereis -Heteroneura -heteronym -heteronymy -heteronymic -heteronymous -heteronymously -heteronomy -heteronomic -heteronomous -heteronomously -heteronuclear -heteroousia -Heteroousian -Heteroousiast -heteroousious -heteropathy -heteropathic -heteropelmous -heteropetalous -Heterophaga -Heterophagi -heterophagous -heterophasia -heterophemy -heterophemism -heterophemist -heterophemistic -heterophemize -heterophil -heterophile -heterophylesis -heterophyletic -heterophyly -heterophilic -heterophylly -heterophyllous -heterophyte -heterophytic -heterophobia -heterophony -heterophonic -heterophoria -heterophoric -Heteropia -heteropycnosis -Heteropidae -heteroplasia -heteroplasm -heteroplasty -heteroplastic -heteroplasties -heteroploid -heteroploidy -heteropod -Heteropoda -heteropodal -heteropodous -heteropolar -heteropolarity -heteropoly -heteropolysaccharide -heteroproteide -heteroproteose -heteropter -Heteroptera -heteropterous -heteroptics -Heterorhachis -heteros -heteroscedasticity -heteroscian -heteroscope -heteroscopy -heteroses -heterosex -heterosexual -heterosexuality -heterosexually -heterosexuals -heteroside -heterosyllabic -Heterosiphonales -heterosis -Heterosomata -Heterosomati -heterosomatous -heterosome -Heterosomi -heterosomous -heterosphere -Heterosporeae -heterospory -heterosporic -Heterosporium -heterosporous -heterostatic -heterostemonous -heterostyled -heterostyly -heterostylism -heterostylous -Heterostraca -heterostracan -Heterostraci -heterostrophy -heterostrophic -heterostrophous -heterostructure -heterosuggestion -heterotactic -heterotactous -heterotaxy -heterotaxia -heterotaxic -heterotaxis -heterotelic -heterotelism -heterothallic -heterothallism -heterothermal -heterothermic -heterotic -heterotype -heterotypic -heterotypical -heterotopy -heterotopia -heterotopic -heterotopism -heterotopous -heterotransplant -heterotransplantation -heterotrich -Heterotricha -Heterotrichales -Heterotrichida -heterotrichosis -heterotrichous -heterotropal -heterotroph -heterotrophy -heterotrophic -heterotrophically -heterotropia -heterotropic -heterotropous -heteroxanthine -heteroxenous -heterozetesis -heterozygosis -heterozygosity -heterozygote -heterozygotes -heterozygotic -heterozygous -heterozygousness -Heth -hethen -hething -heths -Heti -Hetland -Hetman -hetmanate -hetmans -hetmanship -HETP -hets -Hett -hetter -hetterly -Hetti -Hetty -Hettick -Hettie -Hettinger -heuau -Heublein -heuch -Heuchera -heuchs -heugh -heughs -heuk -heulandite -heumite -Heuneburg -Heunis -heureka -heuretic -heuristic -heuristically -heuristics -heuristic's -Heurlin -Heusen -Heuser -heuvel -Heuvelton -Hevea -heved -Hevelius -Hevesy -hevi -HEW -hewable -Hewart -Hewe -hewed -hewel -hewer -hewers -Hewes -Hewet -Hewett -Hewette -hewettite -hewgag -hewgh -hewhall -hewhole -hew-hole -Hewie -hewing -Hewitt -Hewlett -hewn -hews -hewt -hex -hex- -hexa -hexa- -hexabasic -Hexabiblos -hexabiose -hexabromid -hexabromide -hexacanth -hexacanthous -hexacapsular -hexacarbon -hexace -hexachloraphene -hexachlorethane -hexachloride -hexachlorocyclohexane -hexachloroethane -hexachlorophene -hexachord -hexachronous -hexacyclic -hexacid -hexacolic -Hexacoralla -hexacorallan -Hexacorallia -hexacosane -hexacosihedroid -hexact -hexactinal -hexactine -hexactinellid -Hexactinellida -hexactinellidan -hexactinelline -hexactinian -hexad -hexadactyle -hexadactyly -hexadactylic -hexadactylism -hexadactylous -hexadd -hexade -hexadecahedroid -hexadecane -hexadecanoic -hexadecene -hexadecyl -hexadecimal -hexades -hexadic -hexadiene -hexadiine -hexadiyne -hexads -hexaemeric -hexaemeron -hexafluoride -hexafoil -hexagyn -Hexagynia -hexagynian -hexagynous -hexaglot -hexagon -hexagonal -hexagonally -hexagon-drill -hexagonial -hexagonical -hexagonous -hexagons -hexagram -Hexagrammidae -hexagrammoid -Hexagrammos -hexagrams -hexahedra -hexahedral -hexahedron -hexahedrons -hexahemeric -hexahemeron -hexahydrate -hexahydrated -hexahydric -hexahydride -hexahydrite -hexahydrobenzene -hexahydrothymol -hexahydroxy -hexahydroxycyclohexane -hexakis- -hexakisoctahedron -hexakistetrahedron -hexamer -hexameral -hexameric -hexamerism -hexameron -hexamerous -hexameter -hexameters -hexamethylenamine -hexamethylene -hexamethylenetetramine -hexamethonium -hexametral -hexametric -hexametrical -hexametrist -hexametrize -hexametrographer -hexamine -hexamines -Hexamita -hexamitiasis -hexammin -hexammine -hexammino -hexanal -hexanaphthene -Hexanchidae -Hexanchus -hexandry -Hexandria -hexandric -hexandrous -hexane -hexanedione -hexanes -hexangle -hexangular -hexangularly -hexanitrate -hexanitrodiphenylamine -hexapartite -hexaped -hexapetaloid -hexapetaloideous -hexapetalous -hexaphyllous -hexapla -hexaplar -hexaplarian -hexaplaric -hexaplas -hexaploid -hexaploidy -hexapod -Hexapoda -hexapodal -hexapodan -hexapody -hexapodic -hexapodies -hexapodous -hexapods -hexapterous -hexaradial -hexarch -hexarchy -hexarchies -hexascha -hexaseme -hexasemic -hexasepalous -hexasyllabic -hexasyllable -hexaspermous -hexastemonous -hexaster -hexastich -hexasticha -hexastichy -hexastichic -hexastichon -hexastichous -hexastigm -hexastylar -hexastyle -hexastylos -hexasulphide -hexatetrahedron -Hexateuch -Hexateuchal -hexathlon -hexatomic -hexatriacontane -hexatriose -hexavalent -hexaxon -hexdra -hexecontane -hexed -hexenbesen -hexene -hexer -hexerei -hexereis -hexeris -hexers -hexes -hexestrol -hexicology -hexicological -hexyl -hexylene -hexylic -hexylresorcinol -hexyls -hexine -hexyne -hexing -hexiology -hexiological -hexis -hexitol -hexobarbital -hexobiose -hexoctahedral -hexoctahedron -hexode -hexoestrol -hexogen -hexoic -hexoylene -hexokinase -hexone -hexones -hexonic -hexosamine -hexosaminic -hexosan -hexosans -hexose -hexosediphosphoric -hexosemonophosphoric -hexosephosphatase -hexosephosphoric -hexoses -hexpartite -hexs -hexsub -Hext -Hezbollah -Hezekiah -Hezron -Hezronites -HF -hf. -HFDF -HFE -HFS -HG -HGA -hgrnotine -hgt -hgt. -HGV -hgwy -HH -HHD -HHFA -H-hinge -H-hour -HI -Hy -hia -hyacine -Hyacinth -Hyacintha -Hyacinthe -hyacinth-flowered -Hyacinthia -hyacinthian -Hyacinthides -Hyacinthie -hyacinthin -hyacinthine -hyacinths -Hyacinthus -Hyades -Hyads -hyaena -Hyaenanche -Hyaenarctos -hyaenas -hyaenic -hyaenid -Hyaenidae -Hyaenodon -hyaenodont -hyaenodontoid -hyahya -Hyakume -hyal- -Hialeah -hyalescence -hyalescent -hyalin -hyaline -hyalines -hyalinization -hyalinize -hyalinized -hyalinizing -hyalinocrystalline -hyalinosis -hyalins -hyalite -hyalites -hyalithe -hyalitis -hyalo- -hyaloandesite -hyalobasalt -hyalocrystalline -hyalodacite -hyalogen -hyalogens -hyalograph -hyalographer -hyalography -hyaloid -hyaloiditis -hyaloids -hyaloliparite -hyalolith -hyalomelan -hyalomere -hyalomucoid -Hyalonema -hyalophagia -hyalophane -hyalophyre -hyalopilitic -hyaloplasm -hyaloplasma -hyaloplasmic -hyalopsite -hyalopterous -hyalosiderite -Hyalospongia -hyalotekite -hyalotype -hyalts -hyaluronic -hyaluronidase -Hyampom -Hyams -Hianakoto -Hyannis -Hyannisport -hiant -hiatal -hiate -hiation -Hiatt -Hyatt -Hyattsville -Hyattville -hiatus -hiatuses -Hiawassee -Hiawatha -hibachi -hibachis -Hybanthus -Hibbard -Hibben -Hibbert -Hibbertia -hibbin -Hibbing -Hibbitts -Hibbs -hybern- -hibernacle -hibernacula -hibernacular -hibernaculum -hibernal -hibernate -hibernated -hibernates -hibernating -hibernation -hibernations -hibernator -hibernators -Hibernia -Hibernian -Hibernianism -Hibernic -Hibernical -Hibernically -Hibernicise -Hibernicised -Hibernicising -Hibernicism -Hibernicize -Hibernicized -Hibernicizing -Hibernization -Hibernize -hiberno- -Hiberno-celtic -Hiberno-english -Hibernology -Hibernologist -Hiberno-Saxon -Hibiscus -hibiscuses -Hibito -Hibitos -hibla -Hybla -Hyblaea -Hyblaean -Hyblan -hybodont -Hybodus -hybosis -Hy-brasil -hybrid -hybrida -hybridae -hybridal -hybridation -hybridisable -hybridise -hybridised -hybridiser -hybridising -hybridism -hybridist -hybridity -hybridizable -hybridization -hybridizations -hybridize -hybridized -hybridizer -hybridizers -hybridizes -hybridizing -hybridous -hybrids -hybris -hybrises -hybristic -Hibunci -HIC -hicaco -hicatee -hiccough -hic-cough -hiccoughed -hiccoughing -hiccoughs -hiccup -hiccuped -hiccuping -hiccup-nut -hiccupped -hiccupping -hiccups -Hicetaon -Hichens -hicht -hichu -hick -Hickey -hickeyes -hickeys -hicket -hicky -Hickie -hickies -hickified -hickish -hickishness -Hickman -Hickok -Hickory -hickories -Hickorywithe -Hicks -hickscorner -Hicksite -Hicksville -hickway -hickwall -Hico -Hicoria -hid -hyd -hidable -hidage -hydage -hidalgism -Hidalgo -hidalgoism -hidalgos -hydantoate -hydantoic -hydantoin -hidated -hydathode -hydatic -hydatid -hydatidiform -hydatidinous -hydatidocele -hydatids -hydatiform -hydatigenous -Hydatina -hidation -hydatogenesis -hydatogenic -hydatogenous -hydatoid -hydatomorphic -hydatomorphism -hydatopyrogenic -hydatopneumatic -hydatopneumatolytic -hydatoscopy -Hidatsa -Hidatsas -hiddels -hidden -hidden-fruited -Hiddenite -hiddenly -hiddenmost -hiddenness -hidden-veined -hide -Hyde -hide-and-go-seek -hide-and-seek -hideaway -hideaways -hidebind -hidebound -hideboundness -hided -hidegeld -hidey-hole -Hideyo -Hideyoshi -Hideki -hidel -hideland -hideless -hideling -Hyden -hideosity -hideous -hideously -hideousness -hideousnesses -hideout -hide-out -hideouts -hideout's -hider -Hyderabad -hiders -hides -Hydes -Hydesville -Hydetown -Hydeville -Hidie -hidy-hole -hiding -hidings -hidling -hidlings -hidlins -Hydnaceae -hydnaceous -hydnocarpate -hydnocarpic -Hydnocarpus -hydnoid -Hydnora -Hydnoraceae -hydnoraceous -Hydnum -hydr- -Hydra -hydracetin -Hydrachna -hydrachnid -Hydrachnidae -hydracid -hydracids -hydracoral -hydracrylate -hydracrylic -Hydractinia -hydractinian -hidradenitis -Hydradephaga -hydradephagan -hydradephagous -hydrae -hydraemia -hydraemic -hydragog -hydragogy -hydragogs -hydragogue -Hydra-headed -hydralazine -hydramide -hydramine -hydramnion -hydramnios -Hydrangea -Hydrangeaceae -hydrangeaceous -hydrangeas -hydrant -hydranth -hydranths -hydrants -hydrarch -hydrargillite -hydrargyrate -hydrargyria -hydrargyriasis -hydrargyric -hydrargyrism -hydrargyrosis -hydrargyrum -hydrarthrosis -hydrarthrus -hydras -hydrase -hydrases -hydrastine -hydrastinine -Hydrastis -Hydra-tainted -hydrate -hydrated -hydrates -hydrating -hydration -hydrations -hydrator -hydrators -hydratropic -hydraucone -hydraul -hydrauli -hydraulic -hydraulically -hydraulician -hydraulicity -hydraulicked -hydraulicking -hydraulico- -hydraulicon -hydraulics -hydraulis -hydraulist -hydraulus -hydrauluses -hydrazide -hydrazidine -hydrazyl -hydrazimethylene -hydrazin -hydrazine -hydrazino -hydrazo -hydrazoate -hydrazobenzene -hydrazoic -hydrazone -hydremia -hydremic -hydrencephalocele -hydrencephaloid -hydrencephalus -Hydri -hydria -hydriad -hydriae -hydriatry -hydriatric -hydriatrist -hydric -hydrically -Hydrid -hydride -hydrides -hydrids -hydriform -hydrindene -hydriodate -hydriodic -hydriodide -hydrion -hydriotaphia -Hydriote -hydro -hidro- -hydro- -hydroa -hydroacoustic -hydroadipsia -hydroaeric -hydro-aeroplane -hydroairplane -hydro-airplane -hydroalcoholic -hydroaromatic -hydroatmospheric -hydroaviation -hydrobarometer -Hydrobates -Hydrobatidae -hydrobenzoin -hydrobilirubin -hydrobiology -hydrobiological -hydrobiologist -hydrobiosis -hydrobiplane -hydrobomb -hydroboracite -hydroborofluoric -hydrobranchiate -hydrobromate -hydrobromic -hydrobromid -hydrobromide -hydrocarbide -hydrocarbon -hydrocarbonaceous -hydrocarbonate -hydrocarbonic -hydrocarbonous -hydrocarbons -hydrocarbostyril -hydrocarburet -hydrocardia -Hydrocaryaceae -hydrocaryaceous -hydrocatalysis -hydrocauline -hydrocaulus -hydrocele -hydrocellulose -hydrocephali -hydrocephaly -hydrocephalic -hydrocephalies -hydrocephalocele -hydrocephaloid -hydrocephalous -hydrocephalus -hydroceramic -hydrocerussite -Hydrocharidaceae -hydrocharidaceous -Hydrocharis -Hydrocharitaceae -hydrocharitaceous -Hydrochelidon -hydrochemical -hydrochemistry -hydrochlorate -hydrochlorauric -hydrochloric -hydrochlorid -hydrochloride -hydrochlorothiazide -hydrochlorplatinic -hydrochlorplatinous -Hydrochoerus -hydrocholecystis -hydrocyanate -hydrocyanic -hydrocyanide -hydrocycle -hydrocyclic -hydrocyclist -hydrocinchonine -hydrocinnamaldehyde -hydrocinnamic -hydrocinnamyl -hydrocinnamoyl -Hydrocyon -hydrocirsocele -hydrocyst -hydrocystic -hidrocystoma -hydrocladium -hydroclastic -Hydrocleis -hydroclimate -hydrocobalticyanic -hydrocoele -hydrocollidine -hydrocolloid -hydrocolloidal -hydroconion -hydrocoral -Hydrocorallia -Hydrocorallinae -hydrocoralline -Hydrocores -Hydrocorisae -hydrocorisan -hydrocortisone -Hydrocortone -hydrocotarnine -Hydrocotyle -hydrocoumaric -hydrocrack -hydrocracking -hydrocupreine -Hydrodamalidae -Hydrodamalis -hydrodesulfurization -hydrodesulphurization -Hydrodictyaceae -Hydrodictyon -hydrodynamic -hydrodynamical -hydrodynamically -hydrodynamicist -hydrodynamics -hydrodynamometer -HydroDiuril -hydrodrome -Hydrodromica -hydrodromican -hydroeconomics -hydroelectric -hydro-electric -hydroelectrically -hydroelectricity -hydroelectricities -hydroelectrization -hydroergotinine -hydroextract -hydroextractor -hydroferricyanic -hydroferrocyanate -hydroferrocyanic -hydrofluate -hydrofluoboric -hydrofluoric -hydrofluorid -hydrofluoride -hydrofluosilicate -hydrofluosilicic -hydrofluozirconic -hydrofoil -hydrofoils -hydroformer -hydroformylation -hydroforming -hydrofranklinite -hydrofuge -hydrogalvanic -hydrogasification -hydrogel -hydrogels -hydrogen -hydrogenase -hydrogenate -hydrogenated -hydrogenates -hydrogenating -hydrogenation -hydrogenations -hydrogenator -hydrogen-bomb -hydrogenic -hydrogenide -hydrogenisation -hydrogenise -hydrogenised -hydrogenising -hydrogenium -hydrogenization -hydrogenize -hydrogenized -hydrogenizing -hydrogenolyses -hydrogenolysis -Hydrogenomonas -hydrogenous -hydrogens -hydrogen's -hydrogeology -hydrogeologic -hydrogeological -hydrogeologist -hydrogymnastics -hydroglider -hydrognosy -hydrogode -hydrograph -hydrographer -hydrographers -hydrography -hydrographic -hydrographical -hydrographically -hydroguret -hydrohalide -hydrohematite -hydrohemothorax -hydroid -Hydroida -Hydroidea -hydroidean -hydroids -hydroiodic -hydro-jet -hydrokineter -hydrokinetic -hydrokinetical -hydrokinetics -hydrol -hydrolant -hydrolase -hydrolatry -Hydrolea -Hydroleaceae -hydrolysable -hydrolysate -hydrolysation -hydrolyse -hydrolysed -hydrolyser -hydrolyses -hydrolysing -hydrolysis -hydrolyst -hydrolyte -hydrolytic -hydrolytically -hydrolyzable -hydrolyzate -hydrolyzation -hydrolize -hydrolyze -hydrolyzed -hydrolyzer -hydrolyzing -hydrology -hydrologic -hydrological -hydrologically -hydrologist -hydrologists -hydromagnesite -hydromagnetic -hydromagnetics -hydromancer -hidromancy -hydromancy -hydromania -hydromaniac -hydromantic -hydromantical -hydromantically -hydromassage -Hydromatic -hydrome -hydromechanic -hydromechanical -hydromechanics -hydromedusa -Hydromedusae -hydromedusan -hydromedusoid -hydromel -hydromels -hydromeningitis -hydromeningocele -hydrometallurgy -hydrometallurgical -hydrometallurgically -hydrometamorphism -hydrometeor -hydrometeorology -hydrometeorologic -hydrometeorological -hydrometeorologist -hydrometer -hydrometers -hydrometra -hydrometry -hydrometric -hydrometrical -hydrometrid -Hydrometridae -hydromica -hydromicaceous -hydromyelia -hydromyelocele -hydromyoma -Hydromys -hydromonoplane -hydromorph -hydromorphy -hydromorphic -hydromorphous -hydromotor -hydronaut -hydrone -hydronegative -hydronephelite -hydronephrosis -hydronephrotic -hydronic -hydronically -hydronitric -hydronitrogen -hydronitroprussic -hydronitrous -hydronium -hydropac -hydroparacoumaric -Hydroparastatae -hydropath -hydropathy -hydropathic -hydropathical -hydropathically -hydropathist -hydropericarditis -hydropericardium -hydroperiod -hydroperitoneum -hydroperitonitis -hydroperoxide -hydrophane -hydrophanous -hydrophid -Hydrophidae -hydrophil -hydrophylacium -hydrophile -hydrophily -hydrophilic -hydrophilicity -hydrophilid -Hydrophilidae -hydrophilism -hydrophilite -hydrophyll -Hydrophyllaceae -hydrophyllaceous -hydrophylliaceous -hydrophyllium -Hydrophyllum -hydrophiloid -hydrophilous -Hydrophinae -Hydrophis -hydrophysometra -hydrophyte -hydrophytic -hydrophytism -hydrophyton -hydrophytous -hydrophobe -hydrophoby -hydrophobia -hydrophobias -hydrophobic -hydrophobical -hydrophobicity -hydrophobist -hydrophobophobia -hydrophobous -hydrophoid -hydrophone -hydrophones -Hydrophora -hydrophoran -hydrophore -hydrophoria -hydrophorous -hydrophthalmia -hydrophthalmos -hydrophthalmus -hydropic -hydropical -hydropically -hydropigenous -hydroplane -hydroplaned -hydroplaner -hydroplanes -hydroplaning -hydroplanula -hydroplatinocyanic -hydroplutonic -hydropneumatic -hydro-pneumatic -hydropneumatization -hydropneumatosis -hydropneumopericardium -hydropneumothorax -hidropoiesis -hidropoietic -hydropolyp -hydroponic -hydroponically -hydroponicist -hydroponics -hydroponist -hydropositive -hydropot -Hydropotes -hydropower -hydropropulsion -hydrops -hydropses -hydropsy -hydropsies -Hydropterideae -hydroptic -hydropult -hydropultic -hydroquinine -hydroquinol -hydroquinoline -hydroquinone -hydrorachis -hydrorhiza -hydrorhizae -hydrorhizal -hydrorrhachis -hydrorrhachitis -hydrorrhea -hydrorrhoea -hydrorubber -hydros -hydrosalpinx -hydrosalt -hydrosarcocele -hydroscope -hydroscopic -hydroscopical -hydroscopicity -hydroscopist -hydroselenic -hydroselenide -hydroselenuret -hydroseparation -hydrosere -hidroses -hydrosilicate -hydrosilicon -hidrosis -hydroski -hydro-ski -hydrosol -hydrosole -hydrosolic -hydrosols -hydrosoma -hydrosomal -hydrosomata -hydrosomatous -hydrosome -hydrosorbic -hydrospace -hydrosphere -hydrospheres -hydrospheric -hydrospire -hydrospiric -hydrostat -hydrostatic -hydrostatical -hydrostatically -hydrostatician -hydrostatics -hydrostome -hydrosulfate -hydrosulfide -hydrosulfite -hydrosulfurous -hydrosulphate -hydrosulphide -hydrosulphite -hydrosulphocyanic -hydrosulphurated -hydrosulphuret -hydrosulphureted -hydrosulphuric -hydrosulphuryl -hydrosulphurous -hydrotachymeter -hydrotactic -hydrotalcite -hydrotasimeter -hydrotaxis -hydrotechny -hydrotechnic -hydrotechnical -hydrotechnologist -hydroterpene -hydrotheca -hydrothecae -hydrothecal -hydrotherapeutic -hydrotherapeutical -hydrotherapeutically -hydrotherapeutician -hydrotherapeuticians -hydrotherapeutics -hydrotherapy -hydrotherapies -hydrotherapist -hydrothermal -hydrothermally -hydrothoracic -hydrothorax -hidrotic -hydrotic -hydrotical -hydrotimeter -hydrotimetry -hydrotimetric -hydrotype -hydrotomy -hydrotropic -hydrotropically -hydrotropism -hydroturbine -hydro-ureter -hydrous -hydrovane -hydroxamic -hydroxamino -hydroxy -hydroxy- -hydroxyacetic -hydroxyanthraquinone -hydroxyapatite -hydroxyazobenzene -hydroxybenzene -hydroxybutyricacid -hydroxycorticosterone -hydroxide -hydroxydehydrocorticosterone -hydroxides -hydroxydesoxycorticosterone -hydroxyketone -hydroxyl -hydroxylactone -hydroxylamine -hydroxylase -hydroxylate -hydroxylation -hydroxylic -hydroxylization -hydroxylize -hydroxyls -hydroximic -hydroxyproline -hydroxytryptamine -hydroxyurea -hydroxyzine -hydrozincite -Hydrozoa -hydrozoal -hydrozoan -hydrozoic -hydrozoon -hydrula -Hydruntine -hydruret -Hydrurus -Hydrus -hydurilate -hydurilic -hie -Hye -hied -hieder -hieing -hielaman -hielamen -hielamon -hieland -hield -hielmite -hiemal -hyemal -hiemate -hiemation -Hiemis -hiems -hyena -hyenadog -hyena-dog -hyenanchin -hyenas -hyenia -hyenic -hyeniform -hyenine -hyenoid -hienz -hier- -Hiera -Hieracian -hieracite -Hieracium -hieracosphinges -hieracosphinx -hieracosphinxes -hierapicra -hierarch -hierarchal -hierarchy -hierarchial -hierarchic -hierarchical -hierarchically -hierarchies -hierarchy's -hierarchise -hierarchised -hierarchising -hierarchism -hierarchist -hierarchize -hierarchized -hierarchizing -hierarchs -hieratic -hieratica -hieratical -hieratically -hieraticism -hieratite -Hyeres -hiero- -Hierochloe -hierocracy -hierocracies -hierocratic -hierocratical -hierodeacon -hierodule -hierodulic -Hierofalco -hierogamy -hieroglyph -hieroglypher -hieroglyphy -hieroglyphic -hieroglyphical -hieroglyphically -hieroglyphics -hieroglyphist -hieroglyphize -hieroglyphology -hieroglyphologist -hierogram -hierogrammat -hierogrammate -hierogrammateus -hierogrammatic -hierogrammatical -hierogrammatist -hierograph -hierographer -hierography -hierographic -hierographical -hierolatry -hierology -hierologic -hierological -hierologist -hieromachy -hieromancy -hieromartyr -hieromnemon -hieromonach -hieromonk -hieron -Hieronymian -Hieronymic -Hieronymite -Hieronymus -hieropathic -hierophancy -hierophant -hierophantes -hierophantic -hierophantically -hierophanticly -hierophants -hierophobia -hieros -hieroscopy -Hierosolymitan -Hierosolymite -Hierro -hierurgy -hierurgical -hierurgies -hies -Hiestand -hyet- -hyetal -hyeto- -hyetograph -hyetography -hyetographic -hyetographical -hyetographically -hyetology -hyetological -hyetologist -hyetometer -hyetometric -hyetometrograph -hyetometrographic -Hiett -hifalutin -hifalutin' -hi-fi -HIFO -Higbee -Higden -Higdon -hygeen -Hygeia -Hygeian -hygeiolatry -hygeist -hygeistic -hygeists -hygenics -hygeology -higgaion -Higganum -Higginbotham -Higgins -higginsite -Higginson -Higginsport -Higginsville -higgle -higgled -higgledy-piggledy -higglehaggle -higgler -higglery -higglers -higgles -higgling -Higgs -High -high-aimed -high-aiming -Highams -high-and-mighty -high-and-mightiness -high-angled -high-arched -high-aspiring -high-backed -highball -highballed -highballing -highballs -highbelia -highbinder -high-binder -highbinding -high-blazing -high-blessed -high-blooded -high-blower -high-blown -highboard -high-bodiced -highboy -high-boiling -highboys -high-boned -highborn -high-born -high-breasted -highbred -high-bred -highbrow -high-brow -highbrowed -high-browed -high-browish -high-browishly -highbrowism -high-browism -highbrows -high-built -highbush -high-caliber -high-camp -high-case -high-caste -high-ceiled -high-ceilinged -highchair -highchairs -High-Church -High-Churchism -High-Churchist -High-Churchman -High-churchmanship -high-class -high-climber -high-climbing -high-collared -high-colored -high-coloured -high-complexioned -high-compression -high-count -high-crested -high-crowned -high-cut -highdaddy -highdaddies -high-density -high-duty -high-elbowed -high-embowed -higher -highermost -higher-up -higher-ups -highest -highest-ranking -Highet -high-explosive -highfalutin -highfalutin' -high-falutin -highfaluting -high-faluting -highfalutinism -high-fated -high-feathered -high-fed -high-fidelity -high-flavored -highflier -high-flier -highflyer -high-flyer -highflying -high-flying -high-flowing -high-flown -high-flushed -high-foreheaded -high-frequency -high-gazing -high-geared -high-grade -high-grown -highhanded -high-handed -highhandedly -high-handedly -highhandedness -high-handedness -highhat -high-hat -high-hatted -high-hattedness -high-hatter -high-hatty -high-hattiness -highhatting -high-hatting -high-headed -high-heaped -highhearted -high-hearted -highheartedly -highheartedness -high-heel -high-heeled -high-hoe -highholder -high-holder -highhole -high-hole -high-horned -high-hung -highish -highjack -highjacked -highjacker -highjacking -highjacks -high-judging -high-key -high-keyed -Highland -Highlander -highlanders -highlandish -Highlandman -Highlandry -Highlands -Highlandville -high-level -highly -highlife -highlight -highlighted -highlighting -highlights -high-lying -highline -high-lineaged -high-lived -highliving -high-living -highly-wrought -high-lone -highlow -high-low -high-low-jack -high-lows -highman -high-mettled -high-minded -high-mindedly -high-mindedness -highmoor -Highmore -highmost -high-motived -high-mounted -high-mounting -high-muck-a -high-muck-a-muck -high-muckety-muck -high-necked -Highness -highnesses -highness's -high-nosed -high-notioned -high-octane -high-pass -high-peaked -high-pitch -high-pitched -high-placed -highpockets -high-pointing -high-pooped -high-potency -high-potential -high-power -high-powered -high-pressure -high-pressured -high-pressuring -high-priced -high-principled -high-priority -high-prized -high-proof -high-quality -high-raised -high-ranking -high-reaching -high-reared -high-resolved -high-rigger -high-rise -high-riser -highroad -highroads -high-roofed -high-runner -highs -highschool -high-school -high-sea -high-seasoned -high-seated -high-set -Highshoals -high-shoe -high-shouldered -high-sided -high-sighted -high-soaring -high-society -high-soled -high-souled -high-sounding -high-speed -Highspire -high-spirited -high-spiritedly -high-spiritedness -high-stepper -high-stepping -high-stomached -high-strung -high-sulphur -high-swelling -high-swollen -high-swung -hight -hightail -high-tail -hightailed -hightailing -hightails -high-tasted -highted -high-tempered -high-tension -high-test -highth -high-thoughted -high-throned -highths -high-thundering -high-tide -highting -highty-tighty -hightoby -high-tone -high-toned -hightop -high-topped -high-tory -Hightower -high-towered -Hightown -hights -Hightstown -high-tuned -high-up -high-ups -high-vaulted -Highveld -high-velocity -Highview -high-voltage -highway -highwayman -highwaymen -highways -highway's -high-waisted -high-walled -high-warp -high-water -Highwood -high-wrought -hygiantic -hygiantics -hygiastic -hygiastics -hygieist -hygieists -hygienal -hygiene -hygienes -hygienic -hygienical -hygienically -hygienics -hygienist -hygienists -hygienization -hygienize -Higinbotham -Hyginus -hygiology -hygiologist -Higley -hygr- -higra -hygric -hygrin -hygrine -hygristor -hygro- -hygroblepharic -hygrodeik -hygroexpansivity -hygrogram -hygrograph -hygrology -hygroma -hygromatous -hygrometer -hygrometers -hygrometry -hygrometric -hygrometrical -hygrometrically -hygrometries -hygrophaneity -hygrophanous -hygrophilous -hygrophyte -hygrophytic -hygrophobia -hygrophthalmic -hygroplasm -hygroplasma -hygroscope -hygroscopy -hygroscopic -hygroscopical -hygroscopically -hygroscopicity -hygrostat -hygrostatics -hygrostomia -hygrothermal -hygrothermograph -higuero -HIH -Hihat -hiyakkin -hying -hyingly -HIIPS -Hiiumaa -hijack -hijacked -hijacker -hijackers -hijacking -hijackings -hijacks -Hijaz -hijinks -Hijoung -Hijra -Hijrah -Hike -hyke -hiked -hiker -hikers -hikes -hiking -Hiko -Hyksos -hikuli -hyl- -hila -Hyla -hylactic -hylactism -hylaeosaurus -Hylaeus -Hilaira -Hilaire -Hylan -Hiland -Hyland -Hilar -Hilara -hylarchic -hylarchical -Hilary -Hilaria -Hilarymas -Hilario -hilarious -hilariously -hilariousness -hilarity -Hilarytide -hilarities -Hilarius -hilaro-tragedy -Hilarus -Hylas -hilasmic -hylasmus -Hilbert -hilborn -hilch -Hild -Hilda -Hildagard -Hildagarde -Hilde -Hildebran -Hildebrand -Hildebrandian -Hildebrandic -Hildebrandine -Hildebrandism -Hildebrandist -Hildebrandslied -Hildebrandt -Hildegaard -Hildegard -Hildegarde -Hildesheim -Hildy -Hildick -Hildie -hilding -hildings -Hildreth -hile -hyle -hylean -hyleg -hylegiacal -Hilel -Hilger -Hilham -hili -hyli -hylic -hylicism -hylicist -Hylidae -hylids -hiliferous -hylism -hylist -Hill -Hilla -hill-altar -Hillard -Hillari -Hillary -hillberry -hillbilly -hillbillies -hillbird -Hillburn -Hillcrest -hillculture -hill-dwelling -Hilleary -hillebrandite -hilled -Hillegass -Hillel -Hillell -Hiller -Hillery -hillers -hillet -hillfort -hill-fort -hill-girdled -hill-girt -Hillhouse -Hillhousia -Hilly -Hilliard -Hilliards -Hilliary -hilly-billy -Hillie -Hillier -Hillyer -hilliest -Hillinck -hilliness -hilling -Hillingdon -Hillis -Hillisburg -Hillister -Hillman -hill-man -hillmen -hillo -hilloa -hilloaed -hilloaing -hilloas -hillock -hillocked -hillocky -hillocks -hilloed -hilloing -hillos -Hillrose -Hills -hill's -hillsale -hillsalesman -Hillsboro -Hillsborough -Hillsdale -Hillside -hill-side -hillsides -hillsite -hillsman -hill-surrounded -Hillsville -hilltop -hill-top -hilltopped -hilltopper -hilltopping -hilltops -hilltop's -Hilltown -hilltrot -Hyllus -Hillview -hillward -hillwoman -hillwort -Hilmar -Hilo -hylo- -Hylobates -hylobatian -hylobatic -hylobatine -Hylocereus -Hylocichla -Hylocomium -Hylodes -hylogenesis -hylogeny -hyloid -hyloist -hylology -Hylomys -hylomorphic -hylomorphical -hylomorphism -hylomorphist -hylomorphous -hylopathy -hylopathism -hylopathist -hylophagous -hylotheism -hylotheist -hylotheistic -hylotheistical -hylotomous -hylotropic -hylozoic -hylozoism -hylozoist -hylozoistic -hylozoistically -hilsa -hilsah -hilt -Hiltan -hilted -Hilten -hilting -hiltless -Hiltner -Hilton -Hylton -Hiltons -hilts -hilt's -hilum -hilus -Hilversum -HIM -Hima -Himalaya -Himalayan -Himalayas -Himalo-chinese -himamatia -Hyman -Himantopus -himati -himatia -himation -himations -Himavat -himawan -Hime -Himeji -Himelman -Hymen -Hymenaea -Hymenaeus -Hymenaic -hymenal -himene -hymeneal -hymeneally -hymeneals -hymenean -hymenia -hymenial -hymenic -hymenicolar -hymeniferous -hymeniophore -hymenium -hymeniumnia -hymeniums -hymeno- -Hymenocallis -Hymenochaete -Hymenogaster -Hymenogastraceae -hymenogeny -hymenoid -Hymenolepis -hymenomycetal -hymenomycete -Hymenomycetes -hymenomycetoid -hymenomycetous -Hymenophyllaceae -hymenophyllaceous -Hymenophyllites -Hymenophyllum -hymenophore -hymenophorum -hymenopter -Hymenoptera -hymenopteran -hymenopterist -hymenopterology -hymenopterological -hymenopterologist -hymenopteron -hymenopterous -hymenopttera -hymenotome -hymenotomy -hymenotomies -hymens -Hymera -Himeros -Himerus -Hymettian -Hymettic -Hymettius -Hymettus -Him-Heup -Himyaric -Himyarite -Himyaritic -Hymie -Himinbjorg -Hymir -himming -Himmler -hymn -hymnal -hymnals -hymnary -hymnaria -hymnaries -hymnarium -hymnariunaria -hymnbook -hymnbooks -himne -hymned -hymner -hymnic -hymning -hymnist -hymnists -hymnless -hymnlike -hymn-loving -hymnode -hymnody -hymnodical -hymnodies -hymnodist -hymnograher -hymnographer -hymnography -hymnology -hymnologic -hymnological -hymnologically -hymnologist -hymns -hymn's -hymn-tune -hymnwise -himp -himple -Himrod -Hims -himself -himward -himwards -hin -Hinayana -Hinayanist -hinau -Hinch -Hinckley -Hind -hynd -Hind. -Hinda -Hynda -Hindarfjall -hindberry -hindbrain -hind-calf -hindcast -hinddeck -hynde -Hindemith -Hindenburg -hinder -hynder -hinderance -hindered -hinderer -hinderers -hinderest -hinderful -hinderfully -hindering -hinderingly -hinderlands -hinderly -hinderlings -hinderlins -hinderment -hindermost -hinders -hindersome -Hindfell -hind-foremost -hindgut -hind-gut -hindguts -hindhand -hindhead -hind-head -Hindi -Hindman -Hyndman -hindmost -Hindoo -Hindooism -Hindoos -Hindoostani -Hindorff -Hindostani -hindquarter -hindquarters -hindrance -hindrances -hinds -hindsaddle -Hindsboro -hindsight -hind-sight -hindsights -Hindsville -Hindu -Hinduism -Hinduize -Hinduized -Hinduizing -Hindu-javan -Hindu-malayan -Hindus -Hindustan -Hindustani -hindward -hindwards -hine -hyne -hiney -Hynek -Hines -Hynes -Hinesburg -Hineston -Hinesville -hing -hinge -hingecorner -hinged -hingeflower -hingeless -hingelike -hinge-pole -hinger -hingers -hinges -hingeways -Hingham -hinging -hingle -Hinkel -Hinkle -Hinkley -Hinman -hinney -hinner -hinny -hinnible -hinnied -hinnies -hinnying -Hinnites -hinoid -hinoideous -hinoki -hins -Hinsdale -hinsdalite -Hinshelwood -Hinson -hint -hinted -hintedly -hinter -hinterland -hinterlander -hinterlands -hinters -hinting -hintingly -Hinton -hintproof -hints -Hintze -hintzeite -Hinze -Hyo -hyo- -hyobranchial -hyocholalic -hyocholic -Hiodon -hiodont -Hiodontidae -hyoepiglottic -hyoepiglottidean -hyoglycocholic -hyoglossal -hyoglossi -hyoglossus -hyoid -hyoidal -hyoidan -hyoideal -hyoidean -hyoides -hyoids -Hyolithes -hyolithid -Hyolithidae -hyolithoid -hyomandibula -hyomandibular -hyomental -hyoplastral -hyoplastron -Hiordis -hiortdahlite -hyoscapular -hyoscyamine -Hyoscyamus -hyoscine -hyoscines -hyosternal -hyosternum -hyostyly -hyostylic -hyothere -Hyotherium -hyothyreoid -hyothyroid -Hyozo -hip -hyp -hyp- -hyp. -hypabyssal -hypabyssally -hypacusia -hypacusis -hypaesthesia -hypaesthesic -hypaethral -hypaethron -hypaethros -hypaethrum -hypalgesia -hypalgesic -hypalgia -hypalgic -hypallactic -hypallage -Hypanis -hypanthia -hypanthial -hypanthium -hypantrum -Hypapante -hypapophysial -hypapophysis -hyparterial -hypaspist -hypate -Hypatia -Hypatie -hypaton -hypautomorphic -hypaxial -hipberry -hipbone -hip-bone -hipbones -hipe -hype -hyped -hypegiaphobia -Hypenantron -hiper -hyper -hyper- -hyperabelian -hyperabsorption -hyperaccuracy -hyperaccurate -hyperaccurately -hyperaccurateness -hyperacid -hyperacidaminuria -hyperacidity -hyperacidities -hyperacousia -hyperacoustics -hyperaction -hyperactive -hyperactively -hyperactivity -hyperactivities -hyperacuity -hyperacuness -hyperacusia -hyperacusis -hyperacute -hyperacuteness -hyperadenosis -hyperadipose -hyperadiposis -hyperadiposity -hyperadrenalemia -hyperadrenalism -hyperadrenia -hyperaemia -hyperaemic -hyperaeolism -hyperaesthesia -hyperaesthete -hyperaesthetic -hyperaggressive -hyperaggressiveness -hyperaggressivenesses -hyperalbuminosis -hyperaldosteronism -hyperalgebra -hyperalgesia -hyperalgesic -hyperalgesis -hyperalgetic -hyperalgia -hyperalimentation -hyperalkalinity -hyperaltruism -hyperaltruist -hyperaltruistic -hyperaminoacidemia -hyperanabolic -hyperanabolism -hyperanacinesia -hyperanakinesia -hyperanakinesis -hyperanarchy -hyperanarchic -hyperangelic -hyperangelical -hyperangelically -hyperanxious -hyperaphia -hyperaphic -hyperapophyseal -hyperapophysial -hyperapophysis -hyperarchaeological -hyperarchepiscopal -hyperaspist -hyperazotemia -hyperazoturia -hyperbarbarism -hyperbarbarous -hyperbarbarously -hyperbarbarousness -hyperbaric -hyperbarically -hyperbarism -hyperbata -hyperbatbata -hyperbatic -hyperbatically -hyperbaton -hyperbatons -hyperbola -hyperbolae -hyperbolaeon -hyperbolas -hyperbole -hyperboles -hyperbolic -hyperbolical -hyperbolically -hyperbolicly -hyperbolism -hyperbolist -hyperbolize -hyperbolized -hyperbolizing -hyperboloid -hyperboloidal -hyperboreal -Hyperborean -hyperbrachycephal -hyperbrachycephaly -hyperbrachycephalic -hyperbrachycranial -hyperbrachyskelic -hyperbranchia -hyperbranchial -hyperbrutal -hyperbrutally -hyperbulia -hypercalcaemia -hypercalcemia -hypercalcemias -hypercalcemic -hypercalcinaemia -hypercalcinemia -hypercalcinuria -hypercalciuria -hypercalcuria -Hyper-calvinism -Hyper-calvinist -Hyper-calvinistic -hypercapnia -hypercapnic -hypercarbamidemia -hypercarbia -hypercarbureted -hypercarburetted -hypercarnal -hypercarnally -hypercatabolism -hypercatalectic -hypercatalexis -hypercatharsis -hypercathartic -hypercathexis -hypercautious -hypercenosis -hyperchamaerrhine -hypercharge -Hypercheiria -hyperchloraemia -hyperchloremia -hyperchlorhydria -hyperchloric -hyperchlorination -hypercholesteremia -hypercholesteremic -hypercholesterinemia -hypercholesterolemia -hypercholesterolemic -hypercholesterolia -hypercholia -hypercyanosis -hypercyanotic -hypercycle -hypercylinder -hypercythemia -hypercytosis -hypercivilization -hypercivilized -hyperclassical -hyperclassicality -hyperclean -hyperclimax -hypercoagulability -hypercoagulable -hypercomplex -hypercomposite -hyperconcentration -hypercone -hyperconfidence -hyperconfident -hyperconfidently -hyperconformist -hyperconformity -hyperconscientious -hyperconscientiously -hyperconscientiousness -hyperconscious -hyperconsciousness -hyperconservatism -hyperconservative -hyperconservatively -hyperconservativeness -hyperconstitutional -hyperconstitutionalism -hyperconstitutionally -hypercoracoid -hypercorrect -hypercorrection -hypercorrectness -hypercorticoidism -hypercosmic -hypercreaturely -hypercryaesthesia -hypercryalgesia -hypercryesthesia -hypercrinemia -hypercrinia -hypercrinism -hypercrisia -hypercritic -hypercritical -hypercritically -hypercriticalness -hypercriticism -hypercriticize -hypercube -hyperdactyl -hyperdactyly -hyperdactylia -hyperdactylism -hyperdeify -hyperdeification -hyperdeified -hyperdeifying -hyperdelicacy -hyperdelicate -hyperdelicately -hyperdelicateness -hyperdelicious -hyperdeliciously -hyperdeliciousness -hyperdelness -hyperdemocracy -hyperdemocratic -hyperdeterminant -hyperdiabolical -hyperdiabolically -hyperdiabolicalness -hyperdialectism -hyperdiapason -hyperdiapente -hyperdiastole -hyperdiastolic -hyperdiatessaron -hyperdiazeuxis -hyperdicrotic -hyperdicrotism -hyperdicrotous -hyperdimensional -hyperdimensionality -hyperdiploid -hyperdissyllable -hyperdistention -hyperditone -hyperdivision -hyperdolichocephal -hyperdolichocephaly -hyperdolichocephalic -hyperdolichocranial -Hyper-dorian -hyperdoricism -hyperdulia -hyperdulic -hyperdulical -hyperelegance -hyperelegancy -hyperelegant -hyperelegantly -hyperelliptic -hyperemesis -hyperemetic -hyperemia -hyperemic -hyperemization -hyperemotional -hyperemotionally -hyperemotive -hyperemotively -hyperemotiveness -hyperemotivity -hyperemphasize -hyperemphasized -hyperemphasizing -hyperendocrinia -hyperendocrinism -hyperendocrisia -hyperenergetic -Hyperenor -hyperenthusiasm -hyperenthusiastic -hyperenthusiastically -hypereosinophilia -hyperephidrosis -hyperepinephry -hyperepinephria -hyperepinephrinemia -hyperequatorial -hypererethism -hyperessence -hyperesthesia -hyperesthete -hyperesthetic -hyperethical -hyperethically -hyperethicalness -hypereuryprosopic -hypereutectic -hypereutectoid -hyperexaltation -hyperexcitability -hyperexcitable -hyperexcitableness -hyperexcitably -hyperexcitement -hyperexcursive -hyperexcursively -hyperexcursiveness -hyperexophoria -hyperextend -hyperextension -hyperfastidious -hyperfastidiously -hyperfastidiousness -hyperfederalist -hyperfine -hyperflexibility -hyperflexible -hyperflexibleness -hyperflexibly -hyperflexion -hyperfocal -hyperform -hyperfunction -hyperfunctional -hyperfunctionally -hyperfunctioning -hypergalactia -hypergalactosia -hypergalactosis -hypergamy -hypergamous -hypergenesis -hypergenetic -hypergenetical -hypergenetically -hypergeneticalness -hypergeometry -hypergeometric -hypergeometrical -hypergeusesthesia -hypergeusia -hypergeustia -hyperglycaemia -hyperglycaemic -hyperglycemia -hyperglycemic -hyperglycistia -hyperglycorrhachia -hyperglycosuria -hyperglobulia -hyperglobulism -hypergoddess -hypergol -hypergolic -hypergolically -hypergols -Hypergon -hypergrammatical -hypergrammatically -hypergrammaticalness -hyperhedonia -hyperhemoglobinemia -hyperhepatia -hyperhidrosis -hyperhidrotic -hyperhilarious -hyperhilariously -hyperhilariousness -hyperhypocrisy -Hypericaceae -hypericaceous -Hypericales -hypericin -hypericism -Hypericum -hyperidealistic -hyperidealistically -hyperideation -hyperidrosis -hyperimmune -hyperimmunity -hyperimmunization -hyperimmunize -hyperimmunized -hyperimmunizing -hyperin -hyperinflation -hyperingenuity -hyperinosis -hyperinotic -hyperinsulinism -hyperinsulinization -hyperinsulinize -hyperintellectual -hyperintellectually -hyperintellectualness -hyperintelligence -hyperintelligent -hyperintelligently -hyperintense -hyperinvolution -Hyperion -Hyper-ionian -hyperirritability -hyperirritable -hyperisotonic -hyperite -Hyper-jacobean -hyperkalemia -hyperkalemic -hyperkaliemia -hyperkatabolism -hyperkeratoses -hyperkeratosis -hyperkeratotic -hyperkinesia -hyperkinesis -hyperkinetic -hyperlactation -Hyper-latinistic -hyperleptoprosopic -hyperlethal -hyperlethargy -hyperleucocytosis -hyperleucocytotic -hyperleukocytosis -hyperlexis -Hyper-lydian -hyperlipaemia -hyperlipaemic -hyperlipemia -hyperlipemic -hyperlipidemia -hyperlipoidemia -hyperlithuria -hyperlogical -hyperlogicality -hyperlogically -hyperlogicalness -hyperlustrous -hyperlustrously -hyperlustrousness -hypermagical -hypermagically -hypermakroskelic -hypermarket -hypermasculine -hypermedication -hypermegasoma -hypermenorrhea -hypermetabolism -hypermetamorphic -hypermetamorphism -hypermetamorphoses -hypermetamorphosis -hypermetamorphotic -hypermetaphysical -hypermetaphoric -hypermetaphorical -hypermetaplasia -hypermeter -hypermetric -hypermetrical -hypermetron -hypermetrope -hypermetropy -hypermetropia -hypermetropic -hypermetropical -hypermicrosoma -hypermilitant -hypermyotonia -hypermyotrophy -hypermiraculous -hypermiraculously -hypermiraculousness -hypermyriorama -hypermystical -hypermystically -hypermysticalness -hypermixolydian -hypermnesia -hypermnesic -hypermnesis -hypermnestic -Hypermnestra -hypermodest -hypermodestly -hypermodestness -hypermonosyllable -hypermoral -hypermoralistic -hypermorally -hypermorph -hypermorphic -hypermorphism -hypermorphosis -hypermotile -hypermotility -hypernationalistic -hypernatremia -hypernatronemia -hypernatural -hypernaturally -hypernaturalness -hypernephroma -hyperneuria -hyperneurotic -hypernic -hypernik -hypernitrogenous -hypernomian -hypernomic -hypernormal -hypernormality -hypernormally -hypernormalness -hypernote -hypernotion -hypernotions -hypernutrition -hypernutritive -Hyperoartia -hyperoartian -hyperobtrusive -hyperobtrusively -hyperobtrusiveness -hyperodontogeny -hyperon -hyperons -Hyperoodon -hyperoon -hyperope -hyperopes -hyperopia -hyperopic -hyperorganic -hyperorganically -hyperorthodox -hyperorthodoxy -hyperorthognathy -hyperorthognathic -hyperorthognathous -hyperosmia -hyperosmic -hyperosteogeny -hyperostoses -hyperostosis -hyperostotic -hyperothodox -hyperothodoxy -Hyperotreta -hyperotretan -Hyperotreti -hyperotretous -hyperovaria -hyperovarianism -hyperovarism -hyperoxemia -hyperoxidation -hyperoxide -hyperoxygenate -hyperoxygenating -hyperoxygenation -hyperoxygenize -hyperoxygenized -hyperoxygenizing -hyperoxymuriate -hyperoxymuriatic -hyperpanegyric -hyperparasite -hyperparasitic -hyperparasitism -hyperparasitize -hyperparathyroidism -hyperparoxysm -hyperpathetic -hyperpathetical -hyperpathetically -hyperpathia -hyperpathic -hyperpatriotic -hyperpatriotically -hyperpatriotism -hyperpencil -hyperpepsinia -hyperper -hyperperfection -hyperperistalsis -hyperperistaltic -hyperpersonal -hyperpersonally -hyperphagia -hyperphagic -hyperphalangeal -hyperphalangism -hyperpharyngeal -hyperphenomena -hyperphysical -hyperphysically -hyperphysics -hyperphoria -hyperphoric -hyperphosphatemia -hyperphospheremia -hyperphosphorescence -Hyper-phrygian -hyperpiesia -hyperpiesis -hyperpietic -hyperpietist -hyperpigmentation -hyperpigmented -hyperpinealism -hyperpyramid -hyperpyretic -hyperpyrexia -hyperpyrexial -hyperpituitary -hyperpituitarism -hyperplagiarism -hyperplane -hyperplasia -hyperplasic -hyperplastic -hyperplatyrrhine -hyperploid -hyperploidy -hyperpnea -hyperpneic -hyperpnoea -hyperpolarization -hyperpolarize -hyperpolysyllabic -hyperpolysyllabically -hyperpotassemia -hyperpotassemic -hyperpredator -hyperprism -hyperproduction -hyperprognathous -hyperprophetic -hyperprophetical -hyperprophetically -hyperprosexia -hyperpulmonary -hyperpure -hyperpurist -hyperquadric -hyperrational -hyperrationally -hyperreactive -hyperrealistic -hyperrealize -hyperrealized -hyperrealizing -hyperresonance -hyperresonant -hyperreverential -hyperrhythmical -hyperridiculous -hyperridiculously -hyperridiculousness -hyperritualism -hyperritualistic -hyperromantic -Hyper-romantic -hyperromantically -hyperromanticism -hypersacerdotal -hypersaintly -hypersalivation -hypersceptical -hyperscholastic -hyperscholastically -hyperscrupulosity -hyperscrupulous -hypersecretion -hypersensibility -hypersensitisation -hypersensitise -hypersensitised -hypersensitising -hypersensitive -hypersensitiveness -hypersensitivenesses -hypersensitivity -hypersensitivities -hypersensitization -hypersensitize -hypersensitized -hypersensitizing -hypersensual -hypersensualism -hypersensually -hypersensualness -hypersensuous -hypersensuously -hypersensuousness -hypersentimental -hypersentimentally -hypersexual -hypersexuality -hypersexualities -hypersystole -hypersystolic -hypersolid -hypersomnia -hypersonic -hypersonically -hypersonics -hypersophisticated -hypersophistication -hyperspace -hyperspatial -hyperspeculative -hyperspeculatively -hyperspeculativeness -hypersphere -hyperspherical -hyperspiritualizing -hypersplenia -hypersplenism -hyperstatic -hypersthene -hypersthenia -hypersthenic -hypersthenite -hyperstoic -hyperstoical -hyperstrophic -hypersubtle -hypersubtlety -hypersuggestibility -hypersuggestible -hypersuggestibleness -hypersuggestibly -hypersuperlative -hypersurface -hypersusceptibility -hypersusceptible -hypersuspicious -hypertechnical -hypertechnically -hypertechnicalness -hypertely -hypertelic -hypertense -hypertensely -hypertenseness -hypertensin -hypertensinase -hypertensinogen -hypertension -hypertensions -hypertensive -hypertensives -hyperterrestrial -hypertetrahedron -Hypertherm -hyperthermal -hyperthermalgesia -hyperthermally -hyperthermesthesia -hyperthermy -hyperthermia -hyperthermic -hyperthesis -hyperthetic -hyperthetical -hyperthymia -hyperthyreosis -hyperthyroid -hyperthyroidism -hyperthyroidization -hyperthyroidize -hyperthyroids -hyperthrombinemia -hypertype -hypertypic -hypertypical -hypertocicity -hypertonia -hypertonic -hypertonicity -hypertonus -hypertorrid -hypertoxic -hypertoxicity -hypertragic -hypertragical -hypertragically -hypertranscendent -hypertrichy -hypertrichosis -hypertridimensional -hypertrophy -hypertrophic -hypertrophied -hypertrophies -hypertrophying -hypertrophyphied -hypertrophous -hypertropia -hypertropical -Hyper-uranian -hyperurbanism -hyperuresis -hyperuricemia -hypervascular -hypervascularity -hypervelocity -hypervenosity -hyperventilate -hyperventilation -hypervigilant -hypervigilantly -hypervigilantness -hyperviscosity -hyperviscous -hypervitalization -hypervitalize -hypervitalized -hypervitalizing -hypervitaminosis -hypervolume -hypervoluminous -hyperwrought -hypes -hypesthesia -hypesthesic -hypethral -hipflask -hip-girdle -hip-gout -hypha -hyphae -Hyphaene -hyphaeresis -hyphal -hiphalt -hyphantria -hiphape -hyphedonia -hyphema -hyphemia -hyphemias -hyphen -hyphenate -hyphenated -hyphenates -hyphenating -hyphenation -hyphenations -hyphened -hyphenic -hyphening -hyphenisation -hyphenise -hyphenised -hyphenising -hyphenism -hyphenization -hyphenize -hyphenized -hyphenizing -hyphenless -hyphens -hyphen's -hypho -hyphodrome -Hyphomycetales -hyphomycete -Hyphomycetes -hyphomycetic -hyphomycetous -hyphomycosis -hyphopdia -hyphopodia -hyphopodium -hiphuggers -hip-huggers -hypidiomorphic -hypidiomorphically -hyping -hypinosis -hypinotic -hip-joint -hiplength -hipless -hiplike -hipline -hiplines -hipmi -hipmold -hypn- -Hypnaceae -hypnaceous -hypnagogic -hypnale -hipness -hipnesses -hypnesthesis -hypnesthetic -hypnic -hypno- -hypnoanalyses -hypnoanalysis -hypnoanalytic -hypnobate -hypnocyst -hypnody -hypnoetic -hypnogenesis -hypnogenetic -hypnogenetically -hypnogia -hypnogogic -hypnograph -hypnoid -hypnoidal -hypnoidization -hypnoidize -hypnology -hypnologic -hypnological -hypnologist -hypnone -hypnopaedia -hypnophoby -hypnophobia -hypnophobias -hypnophobic -hypnopompic -Hypnos -hypnoses -hypnosis -hypnosperm -hypnosporangia -hypnosporangium -hypnospore -hypnosporic -hypnotherapy -hypnotherapist -hypnotic -hypnotically -hypnotics -hypnotisability -hypnotisable -hypnotisation -hypnotise -hypnotised -hypnotiser -hypnotising -hypnotism -hypnotisms -hypnotist -hypnotistic -hypnotists -hypnotizability -hypnotizable -hypnotization -hypnotize -hypnotized -hypnotizer -hypnotizes -hypnotizing -hypnotoid -hypnotoxin -Hypnum -Hypnus -hypo -hipo- -Hypo- -hypoacid -hypoacidity -hypoactive -hypoactivity -hypoacusia -hypoacussis -hypoadenia -hypoadrenia -hypoaeolian -hypoalbuminemia -hypoalimentation -hypoalkaline -hypoalkalinity -hypoalonemia -hypo-alum -hypoaminoacidemia -hypoantimonate -hypoazoturia -hypobaric -hypobarism -hypobaropathy -hypobasal -hypobases -hypobasis -hypobatholithic -hypobenthonic -hypobenthos -hypoblast -hypoblastic -hypobole -hypobranchial -hypobranchiate -hypobromite -hypobromites -hypobromous -hypobulia -hypobulic -hypocalcemia -hypocalcemic -hypocarp -hypocarpium -hypocarpogean -hypocatharsis -hypocathartic -hypocathexis -hypocaust -hypocenter -hypocenters -hypocentral -hypocentre -hypocentrum -hypocephalus -Hypochaeris -hypochchilia -hypochdria -hypochil -hypochilia -hypochylia -hypochilium -hypochloremia -hypochloremic -hypochlorhydria -hypochlorhydric -hypochloric -hypochloridemia -hypochlorite -hypochlorous -hypochloruria -Hypochnaceae -hypochnose -Hypochnus -hypocholesteremia -hypocholesterinemia -hypocholesterolemia -hypochonder -hypochondry -hypochondria -hypochondriac -hypochondriacal -hypochondriacally -hypochondriacism -hypochondriacs -hypochondrial -hypochondrias -hypochondriasis -hypochondriast -hypochondric -hypochondrium -hypochordal -hypochromia -hypochromic -hypochrosis -hypocycloid -hypocycloidal -hypocist -hypocistis -hypocystotomy -hypocytosis -hypocleidian -hypocleidium -hypocoelom -hypocondylar -hypocone -hypoconid -hypoconule -hypoconulid -hypocopy -hypocoracoid -hypocorism -hypocoristic -hypocoristical -hypocoristically -hypocotyl -hypocotyleal -hypocotyledonary -hypocotyledonous -hypocotylous -hypocrater -hypocrateriform -hypocraterimorphous -Hypocreaceae -hypocreaceous -Hypocreales -hypocrinia -hypocrinism -hypocrisy -hypocrisies -hypocrisis -hypocrystalline -hypocrital -hypocrite -hypocrites -hypocrite's -hypocritic -hypocritical -hypocritically -hypocriticalness -hypocrize -hypodactylum -hypoderm -hypoderma -hypodermal -hypodermatic -hypodermatically -hypodermatoclysis -hypodermatomy -Hypodermella -hypodermic -hypodermically -hypodermics -hypodermis -hypodermoclysis -hypodermosis -hypodermous -hypoderms -hypodiapason -hypodiapente -hypodiastole -hypodiatessaron -hypodiazeuxis -hypodicrotic -hypodicrotous -hypodynamia -hypodynamic -hypodiploid -hypodiploidy -hypoditone -Hypodorian -hypoed -hypoeliminator -hypoendocrinia -hypoendocrinism -hypoendocrisia -hypoeosinophilia -hypoergic -hypoeutectic -hypoeutectoid -hypofunction -hypogaeic -hypogamy -hypogastria -hypogastric -hypogastrium -hypogastrocele -hypogea -hypogeal -hypogeally -hypogean -hypogee -hypogeic -hypogeiody -hypogene -hypogenesis -hypogenetic -hypogenic -hypogenous -hypogeocarpous -hypogeous -hypogeugea -hypogeum -hypogeusia -hypogyn -hypogyny -hypogynic -hypogynies -hypogynium -hypogynous -hypoglycaemia -hypoglycemia -hypoglycemic -hypoglobulia -hypoglossal -hypoglossis -hypoglossitis -hypoglossus -hypoglottis -hypognathism -hypognathous -hypogonadia -hypogonadism -hypogonation -hypohalous -hypohemia -hypohepatia -hypohyal -hypohyaline -hypohydrochloria -hypohidrosis -hypohypophysism -Hypohippus -hypoid -hypoidrosis -hypoing -hypoinosemia -hypoiodite -hypoiodous -hypoionian -hypoischium -hypoisotonic -hypokalemia -hypokalemic -hypokaliemia -hypokeimenometry -hypokinemia -hypokinesia -hypokinesis -hypokinetic -hypokoristikon -hypolemniscus -hypoleptically -hypoleucocytosis -Hypolydian -hypolimnetic -hypolimnia -hypolimnial -hypolimnion -hypolimnionia -Hypolite -hypolithic -hypolocrian -hypomania -hypomanic -hypomelancholia -hypomeral -hypomere -hypomeron -hypometropia -hypomyotonia -hypomixolydian -hypomnematic -hypomnesia -hypomnesis -hypomochlion -hypomorph -hypomorphic -hypomotility -hyponasty -hyponastic -hyponastically -hyponatremia -hyponea -hyponeas -hyponeuria -hyponychial -hyponychium -hyponym -hyponymic -hyponymous -hyponitric -hyponitrite -hyponitrous -hyponoetic -hyponoia -hyponoias -hyponome -hyponomic -hypo-ovarianism -hypoparathyroidism -Hypoparia -hypopepsy -hypopepsia -hypopepsinia -hypopetaly -hypopetalous -hypophalangism -hypophamin -hypophamine -hypophare -hypopharyngeal -hypopharynges -hypopharyngoscope -hypopharyngoscopy -hypopharynx -hypopharynxes -hypophyge -hypophyll -hypophyllium -hypophyllous -hypophyllum -hypophysism -hypophyse -hypophyseal -hypophysectomy -hypophysectomies -hypophysectomize -hypophysectomized -hypophysectomizing -hypophyseoprivic -hypophyseoprivous -hypophyses -hypophysial -hypophysical -hypophysics -hypophysis -hypophysitis -hypophloeodal -hypophloeodic -hypophloeous -hypophonesis -hypophonia -hypophonic -hypophonous -hypophora -hypophoria -hypophosphate -hypophosphite -hypophosphoric -hypophosphorous -hypophrenia -hypophrenic -hypophrenosis -hypophrygian -hypopial -hypopiesia -hypopiesis -hypopygial -hypopygidium -hypopygium -hypopinealism -hypopyon -hypopyons -Hypopitys -hypopituitary -hypopituitarism -hypoplankton -hypoplanktonic -hypoplasy -hypoplasia -hypoplasty -hypoplastic -hypoplastral -hypoplastron -hypoploid -hypoploidy -hypopnea -hypopneas -hypopnoea -hypopoddia -hypopodia -hypopodium -hypopotassemia -hypopotassemic -hypopraxia -hypoprosexia -hypoproteinemia -hypoproteinosis -hypopselaphesia -hypopsychosis -hypopteral -hypopteron -hypoptyalism -hypoptilar -hypoptilum -hypoptosis -hypopus -hyporadial -hyporadiolus -hyporadius -hyporchema -hyporchemata -hyporchematic -hyporcheme -hyporchesis -hyporhachidian -hyporhachis -hyporhined -hyporight -hyporit -hyporrhythmic -hypos -hyposalemia -hyposarca -hyposcenium -hyposcleral -hyposcope -hyposecretion -hyposensitive -hyposensitivity -hyposensitization -hyposensitize -hyposensitized -hyposensitizing -hyposyllogistic -hyposynaphe -hyposynergia -hyposystole -hyposkeletal -hyposmia -hypospadiac -hypospadias -hyposphene -hyposphresia -hypospray -hypostase -hypostases -hypostasy -hypostasis -hypostasise -hypostasised -hypostasising -hypostasization -hypostasize -hypostasized -hypostasizing -hypostatic -hypostatical -hypostatically -hypostatisation -hypostatise -hypostatised -hypostatising -hypostatization -hypostatize -hypostatized -hypostatizing -hyposternal -hyposternum -hyposthenia -hyposthenic -hyposthenuria -hypostigma -hypostilbite -hypostyle -hypostypsis -hypostyptic -hypostoma -Hypostomata -hypostomatic -hypostomatous -hypostome -hypostomial -Hypostomides -hypostomous -hypostrophe -hyposulfite -hyposulfurous -hyposulphate -hyposulphite -hyposulphuric -hyposulphurous -hyposuprarenalism -hypotactic -hypotarsal -hypotarsus -hypotaxia -hypotaxic -hypotaxis -hypotension -hypotensions -hypotensive -hypotensor -hypotenusal -hypotenuse -hypotenuses -hypoth -hypoth. -hypothalami -hypothalamic -hypothalamus -hypothalli -hypothalline -hypothallus -hypothami -hypothec -hypotheca -hypothecal -hypothecary -hypothecate -hypothecated -hypothecater -hypothecates -hypothecating -hypothecation -hypothecative -hypothecator -hypothecatory -hypothecia -hypothecial -hypothecium -hypothecs -hypothenal -hypothenar -hypothenic -hypothenusal -hypothenuse -Hypotheria -hypothermal -hypothermy -hypothermia -hypothermic -hypotheses -hypothesi -hypothesis -hypothesise -hypothesised -hypothesiser -hypothesising -hypothesist -hypothesists -hypothesize -hypothesized -hypothesizer -hypothesizers -hypothesizes -hypothesizing -hypothetic -hypothetical -hypothetically -hypotheticalness -hypothetico-disjunctive -hypothetics -hypothetist -hypothetize -hypothetizer -hypothyreosis -hypothyroid -hypothyroidism -hypothyroids -hypotympanic -hypotype -hypotypic -hypotypical -hypotyposis -hypotony -hypotonia -hypotonic -hypotonically -hypotonicity -hypotonus -hypotoxic -hypotoxicity -hypotrachelia -hypotrachelium -hypotralia -Hypotremata -hypotrich -Hypotricha -Hypotrichida -hypotrichosis -hypotrichous -hypotrochanteric -hypotrochoid -hypotrochoidal -hypotrophy -hypotrophic -hypotrophies -hypotthalli -hypovalve -hypovanadate -hypovanadic -hypovanadious -hypovanadous -hypovitaminosis -hypoxanthic -hypoxanthine -hypoxemia -hypoxemic -hypoxia -hypoxias -hypoxic -Hypoxylon -Hypoxis -hypozeugma -hypozeuxis -Hypozoa -hypozoan -hypozoic -hipp- -Hippa -hippalectryon -Hippalus -hipparch -hipparchs -Hipparchus -Hipparion -Hippeastrum -hipped -hypped -Hippel -Hippelates -hippen -hipper -hippest -hippety-hop -hippety-hoppety -HIPPI -hippy -Hippia -hippian -Hippias -hippiater -hippiatry -hippiatric -hippiatrical -hippiatrics -hippiatrist -hippic -Hippidae -Hippidion -Hippidium -hippie -hippiedom -hippiedoms -hippiehood -hippiehoods -hippier -hippies -hippiest -hipping -hippish -hyppish -hipple -Hippo -hippo- -Hippobosca -hippoboscid -Hippoboscidae -hippocamp -hippocampal -hippocampi -hippocampine -hippocampus -Hippocastanaceae -hippocastanaceous -hippocaust -hippocentaur -hippocentauric -hippocerf -hippocoprosterol -hippocras -Hippocratea -Hippocrateaceae -hippocrateaceous -Hippocrates -Hippocratian -Hippocratic -Hippocratical -Hippocratism -Hippocrene -Hippocrenian -hippocrepian -hippocrepiform -Hippocurius -Hippodamas -hippodame -Hippodamia -hippodamous -hippodrome -hippodromes -hippodromic -hippodromist -hippogastronomy -Hippoglosinae -Hippoglossidae -Hippoglossus -hippogriff -hippogriffin -hippogryph -hippoid -Hippolyta -Hippolytan -hippolite -Hippolyte -hippolith -Hippolytidae -Hippolytus -Hippolochus -hippology -hippological -hippologist -hippomachy -hippomancy -hippomanes -Hippomedon -hippomelanin -Hippomenes -hippometer -hippometry -hippometric -Hipponactean -hipponosology -hipponosological -Hipponous -hippopathology -hippopathological -hippophagi -hippophagy -hippophagism -hippophagist -hippophagistical -hippophagous -hippophile -hippophobia -hippopod -hippopotami -hippopotamian -hippopotamic -Hippopotamidae -hippopotamine -hippopotamoid -hippopotamus -hippopotamuses -hippos -Hipposelinum -Hippothous -hippotigrine -Hippotigris -hippotomy -hippotomical -hippotomist -hippotragine -Hippotragus -hippurate -hippuria -hippuric -hippurid -Hippuridaceae -Hippuris -hippurite -Hippurites -hippuritic -Hippuritidae -hippuritoid -hippus -hip-roof -hip-roofed -hips -hip's -Hyps -hyps- -Hypseus -hipshot -hip-shot -hypsi- -hypsibrachycephaly -hypsibrachycephalic -hypsibrachycephalism -hypsicephaly -hypsicephalic -hypsicephalous -hypsidolichocephaly -hypsidolichocephalic -hypsidolichocephalism -hypsiliform -hypsiloid -Hypsilophodon -hypsilophodont -hypsilophodontid -Hypsilophodontidae -hypsilophodontoid -Hypsipyle -Hypsiprymninae -Hypsiprymnodontinae -Hypsiprymnus -Hypsistarian -hypsistenocephaly -hypsistenocephalic -hypsistenocephalism -Hypsistus -hypso- -hypsobathymetric -hypsocephalous -hypsochrome -hypsochromy -hypsochromic -hypsodont -hypsodonty -hypsodontism -hypsography -hypsographic -hypsographical -hypsoisotherm -hypsometer -hypsometry -hypsometric -hypsometrical -hypsometrically -hypsometrist -hypsophyll -hypsophyllar -hypsophyllary -hypsophyllous -hypsophyllum -hypsophobia -hypsophoeia -hypsophonous -hypsothermometer -hipster -hipsterism -hipsters -hypt -hypural -hipwort -hir -hirable -hyraces -hyraceum -Hyrachyus -hyraci- -hyracid -Hyracidae -hyraciform -Hyracina -Hyracodon -hyracodont -hyracodontid -Hyracodontidae -hyracodontoid -hyracoid -Hyracoidea -hyracoidean -hyracoidian -hyracoids -hyracothere -hyracotherian -Hyracotheriinae -Hyracotherium -hiragana -hiraganas -Hirai -Hiram -Hiramite -Hiranuma -Hirasuna -hyrate -hyrax -hyraxes -Hyrcan -Hyrcania -Hyrcanian -hircarra -hircic -hircin -hircine -hircinous -hircocerf -hircocervus -hircosity -hircus -hirdie-girdie -hirdum-dirdum -hire -hireable -hired -hireless -hireling -hirelings -hireman -Hiren -hire-purchase -hirer -hirers -HIRES -Hyrie -hiring -hirings -hirling -Hyrmina -hirmologion -hirmos -Hirneola -Hyrnetho -Hiro -hirofumi -Hirohito -hiroyuki -Hiroko -hirondelle -Hiroshi -Hiroshige -Hiroshima -hirotoshi -hirple -hirpled -hirples -hirpling -hirrient -Hirsch -Hirschfeld -hirse -hyrse -hirsel -hirseled -hirseling -hirselled -hirselling -hirsels -Hirsh -hirsle -hirsled -hirsles -hirsling -Hirst -hyrst -hirstie -hirsute -hirsuteness -hirsuties -hirsutism -hirsuto-rufous -hirsutulous -hirtch -Hirtella -hirtellous -Hyrtius -Hirudin -hirudinal -hirudine -Hirudinea -hirudinean -hirudiniculture -Hirudinidae -hirudinize -hirudinoid -hirudins -Hirudo -Hiruko -Hyrum -hirundine -Hirundinidae -hirundinous -Hirundo -Hyrup -Hirz -Hirza -HIS -Hisbe -Hiseville -hish -Hysham -hisingerite -hisis -hislopite -hisn -his'n -hyson -hysons -Hispa -Hispania -Hispanic -Hispanically -Hispanicisation -Hispanicise -Hispanicised -Hispanicising -Hispanicism -Hispanicization -Hispanicize -Hispanicized -Hispanicizing -hispanics -hispanidad -Hispaniola -Hispaniolate -Hispaniolize -hispanism -Hispanist -Hispanize -Hispano -hispano- -Hispano-american -Hispano-gallican -Hispano-german -Hispano-italian -Hispano-moresque -Hispanophile -Hispanophobe -hy-spy -hispid -hispidity -hispidulate -hispidulous -Hispinae -Hiss -Hissarlik -hissed -hissel -hisself -hisser -hissers -hisses -hissy -hissing -hissingly -hissings -Hissop -hyssop -hyssop-leaved -hyssops -Hyssopus -hissproof -hist -hist- -hyst- -hist. -Histadrut -histamin -histaminase -histamine -histaminergic -histamines -histaminic -histamins -hystazarin -histed -hister -hyster- -hysteralgia -hysteralgic -hysteranthous -hysterectomy -hysterectomies -hysterectomize -hysterectomized -hysterectomizes -hysterectomizing -hysterelcosis -hysteresial -hysteresis -hysteretic -hysteretically -hysteria -hysteriac -Hysteriales -hysteria-proof -hysterias -hysteric -hysterical -hysterically -hystericky -hysterics -hystericus -hysteriform -hysterioid -hystero- -Hysterocarpus -hysterocatalepsy -hysterocele -hysterocystic -hysterocleisis -hysterocrystalline -hysterodynia -hystero-epilepsy -hystero-epileptic -hystero-epileptogenic -hysterogen -hysterogenetic -hysterogeny -hysterogenic -hysterogenous -hysteroid -hysteroidal -hysterolaparotomy -hysterolysis -hysterolith -hysterolithiasis -hysterology -hysteromania -hysteromaniac -hysteromaniacal -hysterometer -hysterometry -hysteromyoma -hysteromyomectomy -hysteromorphous -hysteron -hysteroneurasthenia -hysteron-proteron -hystero-oophorectomy -hysteropathy -hysteropexy -hysteropexia -Hysterophyta -hysterophytal -hysterophyte -hysterophore -hysteroproterize -hysteroptosia -hysteroptosis -hysterorrhaphy -hysterorrhexis -hystero-salpingostomy -hysteroscope -hysterosis -hysterotely -hysterotome -hysterotomy -hysterotomies -hysterotraumatism -histidin -histidine -histidins -histie -histing -histiocyte -histiocytic -histioid -histiology -Histiophoridae -Histiophorus -histo- -histoblast -histochemic -histochemical -histochemically -histochemistry -histocyte -histoclastic -histocompatibility -histodiagnosis -histodialysis -histodialytic -histogen -histogenesis -histogenetic -histogenetically -histogeny -histogenic -histogenous -histogens -histogram -histograms -histogram's -histographer -histography -histographic -histographical -histographically -histographies -histoid -histolysis -histolytic -histology -histologic -histological -histologically -histologies -histologist -histologists -histometabasis -histomorphology -histomorphological -histomorphologically -histon -histonal -histone -histones -histonomy -histopathology -histopathologic -histopathological -histopathologically -histopathologist -histophyly -histophysiology -histophysiologic -histophysiological -Histoplasma -histoplasmin -histoplasmosis -history -historial -historian -historians -historian's -historiated -historic -historical -historically -historicalness -historician -historicism -historicist -historicity -historicize -historico- -historicocabbalistical -historicocritical -historicocultural -historicodogmatic -historico-ethical -historicogeographical -historicophilosophica -historicophysical -historicopolitical -historicoprophetic -historicoreligious -historics -historicus -historied -historier -histories -historiette -historify -historiograph -historiographer -historiographers -historiographership -historiography -historiographic -historiographical -historiographically -historiographies -historiology -historiological -historiometry -historiometric -historionomer -historious -history's -historism -historize -histotherapy -histotherapist -histothrombin -histotome -histotomy -histotomies -histotrophy -histotrophic -histotropic -histozyme -histozoic -hystriciasis -hystricid -Hystricidae -Hystricinae -hystricine -hystricism -hystricismus -hystricoid -hystricomorph -Hystricomorpha -hystricomorphic -hystricomorphous -histrio -Histriobdella -Histriomastix -histrion -histrionic -histrionical -histrionically -histrionicism -histrionics -histrionism -histrionize -Hystrix -hists -hit -Hitachi -hit-and-miss -hit-and-run -hitch -Hitchcock -hitched -hitchel -hitcher -hitchers -hitches -hitchhike -hitchhiked -hitchhiker -hitch-hiker -hitchhikers -hitchhikes -hitchhiking -hitchy -hitchier -hitchiest -hitchily -hitchiness -hitching -Hitchins -Hitchita -Hitchiti -hitchproof -Hite -hyte -hithe -hither -hythergraph -hithermost -hithertills -hitherto -hithertoward -hitherunto -hitherward -hitherwards -hit-in -Hitler -hitlerian -Hitlerism -Hitlerite -hitless -hit-off -hit-or-miss -hit-or-missness -Hitoshi -hit-run -hits -hit's -hit-skip -Hitt -hittable -Hittel -hitter -Hitterdal -hitters -hitter's -hitty-missy -hitting -hitting-up -Hittite -Hittitics -Hittitology -Hittology -Hiung-nu -HIV -hive -hived -hiveless -hivelike -hiver -hives -hiveward -hiving -Hivite -Hiwasse -Hiwassee -Hixson -Hixton -Hizar -hyzone -hizz -hizzie -hizzoner -HJ -Hjerpe -Hjordis -HJS -HK -HKJ -HL -HLBB -HLC -hld -Hler -HLHSR -Hlidhskjalf -Hliod -Hlithskjalf -HLL -Hloise -Hlorrithi -hlqn -Hluchy -HLV -HM -h'm -HMAS -HMC -HMI -hmm -HMOS -HMP -HMS -HMSO -HMT -HNC -HND -hny -HNPA -HNS -HO -hoactzin -hoactzines -hoactzins -Hoad -Hoag -hoagy -hoagie -hoagies -Hoagland -hoaming -Hoang -Hoangho -hoar -hoard -hoarded -hoarder -hoarders -hoarding -hoardings -hoards -hoardward -Hoare -hoared -hoarfrost -hoar-frost -hoar-frosted -hoarfrosts -hoarhead -hoarheaded -hoarhound -hoary -hoary-eyed -hoarier -hoariest -hoary-feathered -hoary-haired -hoaryheaded -hoary-headed -hoary-leaved -hoarily -hoariness -hoarinesses -hoarish -hoary-white -hoarness -hoars -hoarse -hoarsely -hoarsen -hoarsened -hoarseness -hoarsenesses -hoarsening -hoarsens -hoarser -hoarsest -hoarstone -hoar-stone -hoarwort -Hoashis -hoast -hoastman -hoatching -hoatzin -hoatzines -hoatzins -hoax -hoaxability -hoaxable -hoaxed -hoaxee -hoaxer -hoaxers -hoaxes -hoaxing -hoaxproof -hoazin -Hob -Hoban -hob-and-nob -Hobard -Hobart -hobbed -Hobbema -hobber -Hobbes -Hobbesian -hobbet -hobby -Hobbian -Hobbie -hobbies -hobbyhorse -hobby-horse -hobbyhorses -hobbyhorsical -hobbyhorsically -hobbyism -hobbyist -hobbyists -hobbyist's -hobbil -hobbyless -hobbing -hobbinoll -hobby's -Hobbism -Hobbist -Hobbistical -hobbit -hobble -hobblebush -hobble-bush -hobbled -hobbledehoy -hobbledehoydom -hobbledehoyhood -hobbledehoyish -hobbledehoyishness -hobbledehoyism -hobbledehoys -hobbledygee -hobbler -hobblers -hobbles -hobbly -hobbling -hobblingly -Hobbs -Hobbsville -Hobey -Hobgoblin -hobgoblins -Hobgood -hobhouchin -HOBIC -Hobie -hobiler -ho-bird -HOBIS -hobits -hoblike -hoblob -hobnail -hobnailed -hobnailer -hobnails -hobnob -hob-nob -hobnobbed -hobnobber -hobnobbing -hobnobs -hobo -hoboe -hoboed -hoboes -hoboing -hoboism -hoboisms -Hoboken -Hobomoco -hobos -Hobrecht -hobs -Hobson -hobson-jobson -hobthrush -hob-thrush -Hobucken -hoc -Hoccleve -hocco -hoch -Hochelaga -Hochheim -Hochheimer -hochhuth -Hochman -Hochpetsch -Hock -hockamore -hock-cart -Hockday -hock-day -hocked -hockey -hockeys -hockelty -Hockenheim -Hocker -hockers -Hockessin -hocket -hocky -Hocking -Hockingport -hockle -hockled -Hockley -hockling -hockmoney -Hockney -hocks -hockshin -hockshop -hockshops -Hocktide -hocus -hocused -hocuses -hocusing -hocus-pocus -hocus-pocused -hocus-pocusing -hocus-pocussed -hocus-pocussing -hocussed -hocusses -hocussing -hod -hodad -hodaddy -hodaddies -hodads -hodden -hoddens -hodder -hoddy -hoddy-doddy -hoddin -Hodding -hoddins -hoddypeak -hoddle -Hode -Hodeida -hodening -Hoder -Hodess -hodful -Hodge -Hodgen -Hodgenville -hodgepodge -hodge-podge -hodgepodges -hodge-pudding -Hodges -Hodgkin -Hodgkinson -hodgkinsonite -Hodgson -hodiernal -Hodler -hodman -hodmandod -hodmen -Hodmezovasarhely -hodograph -hodometer -hodometrical -hodophobia -hodoscope -Hodosh -hods -Hodur -hodure -Hoe -Hoebart -hoecake -hoe-cake -hoecakes -hoed -hoedown -hoedowns -hoeful -Hoeg -Hoehne -hoey -hoeing -hoelike -Hoem -Hoenack -Hoenir -hoe-plough -hoer -hoernesite -hoers -Hoes -hoe's -hoeshin -Hoeve -Hofei -Hofer -Hoff -Hoffa -Hoffarth -Hoffer -Hoffert -Hoffman -Hoffmann -Hoffmannist -Hoffmannite -Hoffmeister -Hofmann -Hofmannsthal -Hofstadter -Hofstetter -Hofuf -hog -hoga -Hogan -hogans -Hogansburg -Hogansville -Hogarth -Hogarthian -hogback -hog-backed -hogbacks -hog-brace -hogbush -hogchoker -hogcote -hog-cote -hog-deer -Hogeland -Hogen -Hogen-mogen -hog-faced -hog-fat -hogfish -hog-fish -hogfishes -hogframe -hog-frame -Hogg -hoggaster -hogged -hoggee -hogger -hoggerel -hoggery -hoggeries -hoggers -hogget -hoggets -hoggy -hoggie -hoggin -hogging -hogging-frame -hoggins -hoggish -hoggishly -hoggishness -hoggism -hoggler -hoggs -hoghead -hogherd -hoghide -hoghood -hogyard -Hogle -hoglike -hogling -hog-louse -hogmace -Hogmanay -hogmanays -hogmane -hog-maned -hogmanes -hogmenay -hogmenays -hogmolly -hogmollies -hog-mouthed -hog-necked -Hogni -hognose -hog-nose -hog-nosed -hognoses -hognut -hog-nut -hognuts -hogo -hogpen -hog-plum -hog-raising -hogreeve -hog-reeve -hogrophyte -hogs -hog's -hog's-back -hog-score -hogshead -hogsheads -hogship -hogshouther -hogskin -hog-skin -hogsteer -hogsty -hogsucker -hogtie -hog-tie -hogtied -hog-tied -hogtieing -hogties -hog-tight -hogtiing -hogtying -hogton -hog-trough -Hogue -hogward -hogwash -hog-wash -hogwashes -hogweed -hogweeds -hog-wild -hogwort -Hohe -Hohenlinden -Hohenlohe -Hohenstaufen -Hohenwald -Hohenzollern -Hohenzollernism -hohl-flute -hohn -hoho -ho-ho -Hohokam -Hohokus -ho-hum -Hoi -Hoy -Hoya -hoyas -hoick -hoicked -hoicking -hoicks -hoiden -hoyden -hoidened -hoydened -hoydenhood -hoidening -hoydening -hoidenish -hoydenish -hoydenishness -hoydenism -hoidens -hoydens -Hoye -hoihere -Hoylake -Hoyle -hoyles -Hoyleton -hoyman -hoin -hoys -Hoisch -hoise -hoised -hoises -hoising -Hoisington -hoist -hoist- -hoistaway -hoisted -hoister -hoisters -hoisting -hoistman -hoists -hoistway -hoit -Hoyt -hoity-toity -hoity-toityism -hoity-toitiness -hoity-toityness -Hoytville -Hojo -hoju -Hokah -Hokaltecan -Hokan -Hokan-Coahuiltecan -Hokan-Siouan -Hokanson -hoke -hoked -hokey -hokeyness -hokeypokey -hokey-pokey -hoker -hokerer -hokerly -hokes -Hokiang -hokier -hokiest -hokily -hokiness -hoking -Hokinson -hokypoky -hokypokies -Hokkaido -hokku -Hok-lo -Hokoto -hokum -hokums -Hokusai -HOL -hol- -Hola -Holabird -holagogue -holandry -holandric -Holarctic -holard -holards -holarthritic -holarthritis -holaspidean -Holbein -Holblitzell -Holbrook -Holbrooke -HOLC -holcad -Holcman -holcodont -Holcomb -Holcombe -Holconoti -Holcus -hold -holdable -holdall -hold-all -holdalls -holdback -hold-back -holdbacks -hold-clear -hold-down -Holden -holdenite -Holdenville -Holder -holder-forth -Holderlin -Holderness -holder-on -holders -holdership -holder-up -holdfast -holdfastness -holdfasts -holding -Holdingford -holdingly -holdings -holdman -hold-off -holdout -holdouts -holdover -holdovers -Holdredge -Holdrege -Holds -holdsman -holdup -hold-up -holdups -Hole -holeable -hole-and-comer -hole-and-corner -Holectypina -holectypoid -holed -hole-high -Holey -hole-in-corner -holeless -holeman -holeproof -holer -holes -holethnic -holethnos -holewort -holgate -Holgu -Holguin -Holi -holy -holia -holibut -holibuts -Holicong -Holiday -holyday -holy-day -holidayed -holidayer -holidaying -holidayism -holidaymaker -holiday-maker -holidaymaking -holiday-making -holidays -holiday's -holydays -holidam -holier -holier-than-thou -holies -holiest -Holyhead -holily -holy-minded -holy-mindedness -Holiness -holinesses -holing -holinight -Holinshed -Holyoake -Holyoke -holyokeite -Holyrood -holishkes -holism -holisms -holist -holistic -holistically -holystone -holystoned -holystones -holystoning -holists -holytide -holytides -holk -holked -holking -holks -holl -holla -Holladay -hollaed -Hollah -hollaing -hollaite -Holland -Hollandaise -Hollandale -Hollander -hollanders -Hollandia -Hollandish -hollandite -Hollands -Hollansburg -Hollantide -hollas -Holle -Holley -holleke -Hollenbeck -Hollenberg -holler -Holleran -hollered -hollering -Hollerith -Hollerman -hollers -Holli -Holly -Hollyanne -Holly-Anne -Hollybush -Holliday -Hollidaysburg -Hollie -hollies -Holliger -holly-green -hollyhock -hollyhocks -hollyleaf -holly-leaved -hollin -Hollinger -Hollingshead -Hollingsworth -Hollington -Hollins -holliper -Hollis -Hollister -Holliston -Hollytree -Hollywood -Hollywooder -Hollywoodian -Hollywoodish -Hollywoodite -Hollywoodize -hollo -holloa -holloaed -holloaing -holloas -hollock -holloed -holloes -holloing -Holloman -hollong -holloo -hollooed -hollooing -holloos -hollos -hollow -Holloway -holloware -hollow-back -hollow-backed -hollow-billed -hollow-cheeked -hollow-chested -hollowed -hollow-eyed -hollower -hollowest -hollowfaced -hollowfoot -hollow-footed -hollow-forge -hollow-forged -hollow-forging -hollow-fronted -hollow-ground -hollowhearted -hollow-hearted -hollowheartedness -hollow-horned -hollowing -hollow-jawed -hollowly -hollowness -hollownesses -hollow-pointed -hollowroot -hollow-root -hollows -hollow-toned -hollow-toothed -hollow-vaulted -Hollowville -hollow-voiced -hollowware -hollow-ware -Hollsopple -holluschick -holluschickie -Holm -Holman -Holman-Hunt -Holmann -holmberry -Holmdel -Holmen -Holmes -Holmesville -holmgang -holmia -holmic -holmium -holmiums -holm-oak -holmos -Holms -Holmsville -holm-tree -Holmun -Holna -holo- -holobaptist -holobenthic -holoblastic -holoblastically -holobranch -Holocaine -holocarpic -holocarpous -holocaust -holocaustal -holocaustic -holocausts -Holocene -holocentrid -Holocentridae -holocentroid -Holocentrus -Holocephala -holocephalan -Holocephali -holocephalian -holocephalous -Holochoanites -holochoanitic -holochoanoid -Holochoanoida -holochoanoidal -holochordate -holochroal -holoclastic -holocrine -holocryptic -holocrystalline -holodactylic -holodedron -Holodiscus -holoenzyme -Holofernes -hologamy -hologamous -hologastrula -hologastrular -hologyny -hologynic -hologynies -Holognatha -holognathous -hologonidia -hologonidium -hologoninidia -hologram -holograms -hologram's -holograph -holography -holographic -holographical -holographically -holographies -holographs -holohedral -holohedry -holohedric -holohedrism -holohedron -holohemihedral -holohyaline -holoku -hololith -holomastigote -Holometabola -holometabole -holometaboly -holometabolian -holometabolic -holometabolism -holometabolous -holometer -Holomyaria -holomyarian -Holomyarii -holomorph -holomorphy -holomorphic -holomorphism -holomorphosis -holoparasite -holoparasitic -Holophane -holophyte -holophytic -holophotal -holophote -holophotometer -holophrase -holophrases -holophrasis -holophrasm -holophrastic -holoplankton -holoplanktonic -holoplexia -holopneustic -holoproteide -holoptic -holoptychian -holoptychiid -Holoptychiidae -Holoptychius -holoquinoid -holoquinoidal -holoquinonic -holoquinonoid -holorhinal -holosaprophyte -holosaprophytic -holoscope -holosericeous -holoside -holosiderite -holosymmetry -holosymmetric -holosymmetrical -Holosiphona -holosiphonate -holosystematic -holosystolic -Holosomata -holosomatous -holospondaic -holostean -Holostei -holosteous -holosteric -Holosteum -holostylic -Holostomata -holostomate -holostomatous -holostome -holostomous -holothecal -holothoracic -Holothuria -holothurian -Holothuridea -holothurioid -Holothurioidea -Holothuroidea -holotype -holotypes -holotypic -holotony -holotonia -holotonic -holotrich -Holotricha -holotrichal -Holotrichida -holotrichous -holour -holozoic -holp -holpen -hols -holsom -Holst -Holstein -Holstein-Friesian -holsteins -holster -holstered -holsters -Holsworth -Holt -Holton -Holtorf -holts -Holtsville -Holtville -Holtwood -Holtz -Holub -holus-bolus -holw -Holzman -Hom -hom- -homacanth -Homadus -homage -homageable -homaged -homager -homagers -homages -homaging -Homagyrius -homagium -Homalin -Homalocenchrus -homalogonatous -homalographic -homaloid -homaloidal -Homalonotus -Homalopsinae -Homaloptera -Homalopterous -homalosternal -Homalosternii -Homam -Homans -homard -Homaridae -homarine -homaroid -Homarus -homatomic -homaxial -homaxonial -homaxonic -hombre -hombres -Homburg -homburgs -Home -home- -home-abiding -home-along -home-baked -homebody -homebodies -homeborn -home-born -homebound -homebred -home-bred -homebreds -homebrew -home-brew -homebrewed -home-brewed -home-bringing -homebuild -homebuilder -homebuilders -homebuilding -home-building -home-built -homecome -home-come -homecomer -homecoming -home-coming -homecomings -homecraft -homecroft -homecrofter -homecrofting -homed -Homedale -home-driven -home-dwelling -homefarer -home-faring -homefarm -home-fed -homefelt -home-felt -homefolk -homefolks -homegoer -home-going -homeground -home-growing -homegrown -home-grown -homey -homeyness -homekeeper -homekeeping -home-keeping -home-killed -homeland -homelander -homelands -homeless -homelessly -homelessness -homelet -homely -homelier -homeliest -homelife -homelike -homelikeness -homelily -homelyn -homeliness -homelinesses -homeling -home-loving -homelovingness -homemade -home-made -homemake -homemaker -homemakers -homemaker's -homemaking -homemakings -homeo- -homeoblastic -homeochromatic -homeochromatism -homeochronous -homeocrystalline -homeogenic -homeogenous -homeoid -homeoidal -homeoidality -homeokinesis -homeokinetic -homeomerous -homeomorph -homeomorphy -homeomorphic -homeomorphism -homeomorphisms -homeomorphism's -homeomorphous -homeopath -homeopathy -homeopathic -homeopathically -homeopathician -homeopathicity -homeopathies -homeopathist -homeophony -homeoplasy -homeoplasia -homeoplastic -homeopolar -homeosis -homeostases -homeostasis -homeostatic -homeostatically -homeostatis -homeotherapy -homeotherm -homeothermal -homeothermy -homeothermic -homeothermism -homeothermous -homeotic -homeotype -homeotypic -homeotypical -homeotransplant -homeotransplantation -homeown -homeowner -homeowners -home-owning -homeozoic -homeplace -Homer -home-raised -Homere -home-reared -homered -Homerian -Homeric -Homerical -Homerically -Homerid -Homeridae -Homeridian -homering -Homerist -homerite -Homerology -Homerologist -Homeromastix -homeroom -homerooms -homers -Homerus -Homerville -homes -home-sailing -homeseeker -home-sent -homesick -home-sick -homesickly -homesickness -home-sickness -homesicknesses -homesite -homesites -homesome -homespun -homespuns -homestay -home-staying -homestall -Homestead -homesteader -homesteaders -homesteads -homester -homestretch -homestretches -home-thrust -Hometown -hometowns -homeward -homeward-bound -homeward-bounder -homewardly -homewards -Homewood -homework -homeworker -homeworks -homewort -Homeworth -home-woven -homy -homichlophobia -homicidal -homicidally -homicide -homicides -homicidious -homicidium -homiculture -homier -homiest -homiform -homilete -homiletic -homiletical -homiletically -homiletics -homily -homiliary -homiliaries -homiliarium -homilies -homilist -homilists -homilite -homilize -hominal -hominem -homines -hominess -hominesses -homing -Hominy -Hominian -hominians -hominid -Hominidae -hominids -hominies -hominify -hominiform -hominine -hominisection -hominivorous -hominization -hominize -hominized -hominoid -hominoids -homish -homishness -hommack -hommage -homme -Hommel -hommock -hommocks -hommos -hommoses -Homo -homo- -homoanisaldehyde -homoanisic -homoarecoline -homobaric -homoblasty -homoblastic -homobront -homocarpous -homocategoric -homocentric -homocentrical -homocentrically -homocerc -homocercal -homocercality -homocercy -homocerebrin -homochiral -homochlamydeous -homochromatic -homochromatism -homochrome -homochromy -homochromic -homochromosome -homochromous -homochronous -homocycle -homocyclic -homoclinal -homocline -Homocoela -homocoelous -homocreosol -homodermy -homodermic -homodynamy -homodynamic -homodynamous -homodyne -homodont -homodontism -homodox -homodoxian -homodromal -homodrome -homodromy -homodromous -Homoean -Homoeanism -homoecious -homoeo- -homoeoarchy -homoeoblastic -homoeochromatic -homoeochronous -homoeocrystalline -homoeogenic -homoeogenous -homoeography -homoeoid -homoeokinesis -homoeomerae -homoeomeral -Homoeomeri -homoeomery -homoeomeria -homoeomerian -homoeomerianism -homoeomeric -homoeomerical -homoeomerous -homoeomorph -homoeomorphy -homoeomorphic -homoeomorphism -homoeomorphous -homoeopath -homoeopathy -homoeopathic -homoeopathically -homoeopathician -homoeopathicity -homoeopathist -homoeophyllous -homoeophony -homoeoplasy -homoeoplasia -homoeoplastic -homoeopolar -homoeosis -homoeotel -homoeoteleutic -homoeoteleuton -homoeotic -homoeotype -homoeotypic -homoeotypical -homoeotopy -homoeozoic -homoerotic -homoeroticism -homoerotism -homofermentative -homogametic -homogamy -homogamic -homogamies -homogamous -homogangliate -homogen -homogenate -homogene -homogeneal -homogenealness -homogeneate -homogeneity -homogeneities -homogeneity's -homogeneization -homogeneize -homogeneous -homogeneously -homogeneousness -homogeneousnesses -homogenesis -homogenetic -homogenetical -homogenetically -homogeny -homogenic -homogenies -homogenization -homogenize -homogenized -homogenizer -homogenizers -homogenizes -homogenizing -homogenous -homogentisic -homoglot -homogone -homogony -homogonies -homogonous -homogonously -homograft -homograph -homography -homographic -homographs -homohedral -homo-hetero-analysis -homoi- -homoio- -homoiotherm -homoiothermal -homoiothermy -homoiothermic -homoiothermism -homoiothermous -homoiousia -Homoiousian -Homoiousianism -homoiousious -homolateral -homolecithal -homolegalis -homolysin -homolysis -homolytic -homolog -homologal -homologate -homologated -homologating -homologation -homology -homologic -homological -homologically -homologies -homologise -homologised -homologiser -homologising -homologist -homologize -homologized -homologizer -homologizing -homologon -homologoumena -homologous -homolography -homolographic -homologs -homologue -homologumena -homolosine -homomallous -homomeral -homomerous -homometrical -homometrically -homomorph -Homomorpha -homomorphy -homomorphic -homomorphism -homomorphisms -homomorphism's -homomorphosis -homomorphous -Homoneura -homonid -homonym -homonymy -homonymic -homonymies -homonymity -homonymous -homonymously -homonyms -homonomy -homonomous -homonuclear -homo-organ -homoousia -Homoousian -Homoousianism -Homoousianist -Homoousiast -Homoousion -homoousious -homopathy -homopause -homoperiodic -homopetalous -homophene -homophenous -homophile -homophiles -homophyly -homophylic -homophyllous -homophobia -homophobic -homophone -homophones -homophony -homophonic -homophonically -homophonous -homophthalic -homopiperonyl -homoplasy -homoplasis -homoplasmy -homoplasmic -homoplassy -homoplast -homoplastic -homoplastically -homopolar -homopolarity -homopolic -homopolymer -homopolymerization -homopolymerize -homopter -Homoptera -homopteran -homopteron -homopterous -Homorelaps -homorganic -homos -Homosassa -homoscedastic -homoscedasticity -homoseismal -homosex -homosexual -homosexualism -homosexualist -homosexuality -homosexually -homosexuals -homosystemic -homosphere -homospory -homosporous -Homosteus -homostyled -homostyly -homostylic -homostylism -homostylous -homotactic -homotatic -homotaxeous -homotaxy -homotaxia -homotaxial -homotaxially -homotaxic -homotaxis -homothallic -homothallism -homotherm -homothermal -homothermy -homothermic -homothermism -homothermous -homothety -homothetic -homotypal -homotype -homotypy -homotypic -homotypical -homotony -homotonic -homotonous -homotonously -homotopy -homotopic -homotransplant -homotransplantation -homotropal -homotropous -homousian -homovanillic -homovanillin -Homovec -homoveratric -homoveratrole -homozygosis -homozygosity -homozygote -homozygotes -homozygotic -homozygous -homozygously -homozygousness -homrai -Homs -homuncio -homuncle -homuncular -homuncule -homunculi -homunculus -Hon -Honaker -Honan -honans -Honaunau -honcho -honchoed -honchos -Hond -Hond. -Honda -hondas -hondle -hondled -hondles -hondling -Hondo -Honduran -Honduranean -Honduranian -hondurans -Honduras -Hondurean -Hondurian -hone -Honeapath -Honebein -Honecker -honed -Honegger -Honey -honeyballs -honey-bear -honey-bearing -honeybee -honey-bee -honeybees -honeyberry -honeybind -honey-bird -honeyblob -honey-blond -honeybloom -honey-bloom -Honeybrook -honeybun -honeybunch -honeybuns -honey-buzzard -honey-color -honey-colored -honeycomb -honeycombed -honeycombing -honeycombs -honeycreeper -honeycup -honeydew -honey-dew -honeydewed -honeydews -honeydrop -honey-drop -honey-dropping -honey-eater -honey-eating -honeyed -honeyedly -honeyedness -honeyfall -honeyflower -honey-flower -honey-flowing -honeyfogle -honeyfugle -honeyful -honey-gathering -honey-guide -honeyhearted -honey-heavy -honey-yielding -honeying -honey-laden -honeyless -honeylike -honeylipped -honey-loaded -Honeyman -honeymonth -honey-month -honeymoon -honeymooned -honeymooner -honeymooners -honeymoony -honeymooning -honeymoonlight -honeymoons -honeymoonshine -honeymoonstruck -honeymouthed -honey-mouthed -honeypod -honeypot -honey-pot -honeys -honey-secreting -honey-stalks -honey-steeped -honeystone -honey-stone -honey-stored -honey-storing -honeystucker -honeysuck -honeysucker -honeysuckle -honeysuckled -honeysuckles -honeysweet -honey-sweet -honey-tasting -honey-tongued -Honeyville -honey-voiced -honeyware -Honeywell -Honeywood -honeywort -Honeoye -honer -honers -hones -Honesdale -honest -honester -honestest -honestete -honesty -honesties -honestly -honestness -honestone -honest-to-God -honewort -honeworts -Honfleur -Hong -hongkong -Hong-Kong -Hongleur -hongs -Honiara -honied -Honig -honily -honing -Honiton -honk -honked -honkey -honkeys -honker -honkers -honky -honkie -honkies -honking -honky-tonk -honkytonks -honks -Honna -Honniball -Honobia -Honokaa -Honolulu -Honomu -Honor -Honora -honorability -honorable -honorableness -honorables -honorableship -honorably -honorance -honorand -honorands -honorararia -honorary -honoraria -honoraries -honorarily -honorarium -honorariums -Honoraville -honor-bound -honored -honoree -honorees -honorer -honorers -honoress -honor-fired -honor-giving -Honoria -honorific -honorifical -honorifically -honorifics -Honorine -honoring -Honorius -honorless -honorous -honor-owing -honors -honorsman -honor-thirsty -honorworthy -Honour -Honourable -honourableness -honourably -honoured -honourer -honourers -honouring -honourless -honours -Hons -Honshu -hont -hontish -hontous -Honus -honzo -Hoo -Hooch -hooches -hoochinoo -hood -hoodcap -hood-crowned -hooded -hoodedness -hoodful -hoody -hoodie -hoodies -hooding -hoodle -hoodless -hoodlike -hoodlum -hoodlumish -hoodlumism -hoodlumize -hoodlums -hoodman -hoodman-blind -hoodmen -hoodmold -hood-mould -hoodoes -hoodoo -hoodooed -hoodooing -hoodooism -hoodoos -hoods -hood-shaped -hoodsheaf -hoodshy -hoodshyness -Hoodsport -hoodwink -hoodwinkable -hoodwinked -hoodwinker -hoodwinking -hoodwinks -hoodwise -hoodwort -hooey -hooeys -hoof -hoofbeat -hoofbeats -hoofbound -hoof-bound -hoof-cast -hoof-cut -hoofed -hoofer -hoofers -hoofy -hoofiness -hoofing -hoofish -hoofless -hooflet -hooflike -hoofmark -hoofmarks -hoof-plowed -hoofprint -hoof-printed -hoofrot -hoofs -hoof's -hoof-shaped -hoofworm -hoogaars -Hooge -Hoogh -Hooghly -hoo-ha -hooye -Hook -hooka -hookah -hookahs -hook-and-ladder -hook-armed -hookaroon -hookas -hook-backed -hook-beaked -hook-bill -hook-billed -hookcheck -Hooke -hooked -hookedness -hookedwise -hookey -hookeys -hookem-snivey -Hooker -Hookera -hookerman -hooker-off -hooker-on -hooker-out -hooker-over -hookers -Hookerton -hooker-up -hook-handed -hook-headed -hookheal -hooky -hooky-crooky -hookier -hookies -hookiest -hooking -hookish -hookland -hookless -hooklet -hooklets -hooklike -hookmaker -hookmaking -hookman -hooknose -hook-nose -hook-nosed -hooknoses -Hooks -hook-shaped -hookshop -hook-shouldered -hooksmith -hook-snouted -Hookstown -hookswinging -hooktip -hook-tipped -hookum -hookup -hook-up -hookups -hookupu -hookweed -hookwise -hookworm -hookwormer -hookwormy -hookworms -hool -hoolakin -hoolaulea -hoolee -Hoolehua -hooley -hooly -hoolie -hooligan -hooliganish -hooliganism -hooliganize -hooligans -hoolihan -hoolock -hoom -Hoon -hoondee -hoondi -hoonoomaun -hoop -Hoopa -hoop-back -hooped -Hoopen -Hooper -Hooperating -hooperman -hoopers -Hoopes -Hoopeston -hooping -hooping-cough -hoopla -hoop-la -hooplas -Hoople -hoopless -hooplike -hoopmaker -hoopman -hoopmen -hoopoe -hoopoes -hoopoo -hoopoos -hoop-petticoat -Hooppole -hoops -hoop-shaped -hoopskirt -hoopster -hoopsters -hoopstick -hoop-stick -hoopwood -hoorah -hoorahed -hoorahing -hoorahs -hooray -hoorayed -hooraying -hoorays -hooroo -hooroosh -hoose -hoosegow -hoosegows -hoosgow -hoosgows -hoosh -Hoosick -Hoosier -Hoosierdom -Hoosierese -Hoosierize -hoosiers -hoot -hootay -hootch -hootches -hootchie-kootchie -hootchy-kootch -hootchy-kootchy -hootchy-kootchies -hooted -hootenanny -hootenannies -hooter -hooters -hooty -hootier -hootiest -hooting -hootingly -hootmalalie -Hootman -Hooton -hoots -hoove -hooved -hoovey -Hooven -Hoover -Hooverism -Hooverize -Hooversville -Hooverville -hooves -hop -hop-about -hopak -Hopatcong -hopbind -hopbine -Hopbottom -hopbush -Hopcalite -hopcrease -Hope -hoped -Hopedale -hoped-for -hopeful -hopefully -hopefulness -hopefulnesses -hopefuls -Hopeh -Hopehull -Hopei -hopeite -Hopeland -hopeless -hopelessly -hopelessness -hopelessnesses -hoper -hopers -hopes -Hopestill -Hopeton -Hopewell -Hopfinger -hop-garden -hophead -hopheads -Hopi -hopyard -hop-yard -Hopin -hoping -hopingly -Hopis -Hopkins -Hopkinsian -Hopkinsianism -Hopkinson -Hopkinsonian -Hopkinsville -Hopkinton -Hopland -Hoples -hoplite -hoplites -hoplitic -hoplitodromos -hoplo- -Hoplocephalus -hoplology -hoplomachy -hoplomachic -hoplomachist -hoplomachos -Hoplonemertea -hoplonemertean -hoplonemertine -Hoplonemertini -hoplophoneus -hopoff -hop-o'-my-thumb -hop-o-my-thumb -Hoppe -hopped -hopped-up -Hopper -hopperburn -hoppercar -hopperdozer -hopperette -hoppergrass -hopperings -hopperman -hoppers -hopper's -hopper-shaped -hoppestere -hoppet -hoppy -hop-picker -hopping -hoppingly -hoppity -hoppytoad -hopple -hoppled -hopples -hoppling -hoppo -hops -hopsack -hop-sack -hopsacking -hop-sacking -hopsacks -hopsage -hopscotch -hopscotcher -hop-shaped -hopthumb -hoptoad -hoptoads -hoptree -hopvine -Hopwood -Hoquiam -hor -hor. -hora -Horace -Horacio -Horae -horah -horahs -horal -Horan -horary -horas -Horatia -Horatian -Horatii -horatiye -Horatio -horation -Horatius -horatory -horbachite -Horbal -Horcus -hordary -hordarian -horde -hordeaceous -hordeate -horded -hordeiform -hordein -hordeins -hordenine -hordeola -hordeolum -hordes -horde's -Hordeum -hording -hordock -Hordville -hore -Horeb -horehoond -horehound -horehounds -Horgan -hory -Horick -Horicon -Horim -horismology -Horite -horizometer -horizon -horizonal -horizonless -horizons -horizon's -horizontal -horizontalism -horizontality -horizontalization -horizontalize -horizontally -horizontalness -horizontic -horizontical -horizontically -horizonward -horkey -horla -Horlacher -horme -hormephobia -hormetic -hormic -hormigo -Hormigueros -hormion -Hormisdas -hormism -hormist -hormogon -Hormogonales -Hormogoneae -Hormogoneales -hormogonium -hormogonous -hormonal -hormonally -hormone -hormonelike -hormones -hormone's -hormonic -hormonize -hormonogenesis -hormonogenic -hormonoid -hormonology -hormonopoiesis -hormonopoietic -hormos -Hormuz -Horn -hornada -Hornbeak -hornbeam -hornbeams -Hornbeck -hornbill -hornbills -hornblende -hornblende-gabbro -hornblendic -hornblendite -hornblendophyre -Hornblower -hornbook -horn-book -hornbooks -Hornbrook -Horne -horned -hornedness -Horney -horn-eyed -Hornell -Horner -hornerah -hornero -Hornersville -hornet -hornety -hornets -hornet's -hornfair -hornfels -hornfish -horn-fish -horn-footed -hornful -horngeld -horny -Hornick -Hornie -hornier -horniest -hornify -hornification -hornified -horny-fingered -horny-fisted -hornyhanded -hornyhead -horny-hoofed -horny-knuckled -hornily -horniness -horning -horny-nibbed -hornish -hornist -hornists -hornito -horny-toad -Hornitos -hornkeck -hornless -hornlessness -hornlet -hornlike -horn-mad -horn-madness -hornmouth -hornotine -horn-owl -hornpipe -hornpipes -hornplant -horn-plate -hornpout -hornpouts -horn-rimmed -horn-rims -horns -Hornsby -horn-shaped -horn-silver -hornslate -hornsman -hornstay -Hornstein -hornstone -hornswaggle -hornswoggle -hornswoggled -hornswoggling -horntail -horntails -hornthumb -horntip -Horntown -hornweed -hornwood -horn-wood -hornwork -hornworm -hornworms -hornwort -hornworts -hornwrack -Horodko -horograph -horographer -horography -horokaka -horol -horol. -horologe -horologer -horologes -horology -horologia -horologic -horological -horologically -horologies -horologigia -horologiography -horologist -horologists -Horologium -horologue -horometer -horometry -horometrical -Horonite -horopito -horopter -horoptery -horopteric -horoscopal -horoscope -horoscoper -horoscopes -horoscopy -horoscopic -horoscopical -horoscopist -horotely -horotelic -Horouta -Horowitz -horrah -horray -horral -Horrebow -horrendous -horrendously -horrent -horrescent -horreum -horry -horribility -horrible -horribleness -horriblenesses -horribles -horribly -horrid -horridity -horridly -horridness -horrify -horrific -horrifically -horrification -horrified -horrifiedly -horrifies -horrifying -horrifyingly -horripilant -horripilate -horripilated -horripilating -horripilation -horrisonant -Horrocks -horror -horror-crowned -horror-fraught -horrorful -horror-inspiring -horrorish -horrorist -horrorize -horror-loving -horrormonger -horrormongering -horrorous -horrors -horror's -horrorsome -horror-stricken -horror-struck -hors -Horsa -horse -horse-and-buggy -horseback -horse-back -horsebacker -horsebacks -horsebane -horsebean -horse-bitten -horse-block -horse-boat -horseboy -horse-boy -horsebox -horse-box -horse-bread -horsebreaker -horse-breaker -horsebush -horsecar -horse-car -horsecars -horsecart -horse-chestnut -horsecloth -horsecloths -horse-collar -horse-coper -horse-corser -horse-course -horsecraft -horsed -horse-dealing -horsedom -horsedrawing -horse-drawn -horse-eye -horseess -horse-faced -horsefair -horse-fair -horsefeathers -horsefettler -horsefight -horsefish -horse-fish -horsefishes -horseflesh -horse-flesh -horsefly -horse-fly -horseflies -horseflower -horsefoot -horse-foot -horsegate -horse-godmother -horse-guard -Horse-guardsman -horsehair -horsehaired -horsehairs -horsehead -horse-head -Horseheads -horseheal -horseheel -horseherd -horsehide -horsehides -horse-hoe -horsehood -horsehoof -horse-hoof -horse-hour -Horsey -horseier -horseiest -horsejockey -horse-jockey -horsekeeper -horsekeeping -horselaugh -horse-laugh -horselaugher -horselaughs -horselaughter -horseleach -horseleech -horse-leech -horseless -horsely -horselike -horse-litter -horseload -horse-load -horselock -horse-loving -horse-mackerel -horseman -horsemanship -horsemanships -horse-marine -horse-master -horsemastership -horse-matcher -horsemen -horse-mill -horsemint -horse-mint -horsemonger -horsenail -horse-nail -Horsens -horse-owning -Horsepen -horsepipe -horseplay -horse-play -horseplayer -horseplayers -horseplayful -horseplays -horse-plum -horsepond -horse-pond -horsepower -horse-power -horsepower-hour -horsepower-year -horsepowers -horsepox -horse-pox -horser -horse-race -horseradish -horse-radish -horseradishes -horses -horse-scorser -horse-sense -horseshit -horseshoe -horseshoed -horseshoeing -horseshoer -horseshoers -horseshoes -horseshoe-shaped -horseshoing -horsetail -horse-tail -horsetails -horse-taming -horsetongue -Horsetown -horse-trade -horse-traded -horse-trading -horsetree -horseway -horseweed -horsewhip -horsewhipped -horsewhipper -horsewhipping -horsewhips -horsewoman -horsewomanship -horsewomen -horsewood -horsfordite -Horsham -horsy -horsier -horsiest -horsify -horsyism -horsily -horsiness -horsing -Horst -horste -horstes -horsts -Hort -hort. -Horta -hortation -hortative -hortatively -hortator -hortatory -hortatorily -Horten -Hortensa -Hortense -Hortensia -hortensial -Hortensian -Hortensius -Horter -hortesian -Horthy -hortyard -horticultor -horticultural -horticulturalist -horticulturally -horticulture -horticultures -horticulturist -horticulturists -hortite -Horton -hortonolite -Hortonville -hortorium -hortulan -Horus -Horvatian -Horvitz -Horwath -Horwitz -Hos -Hos. -Hosackia -hosanna -hosannaed -hosannah -hosannaing -hosannas -Hosbein -Hoschton -Hose -Hosea -hosebird -hosecock -hosed -Hoseia -Hosein -hose-in-hose -hosel -hoseless -hoselike -hosels -hoseman -hosen -hose-net -hosepipe -hoses -hose's -Hosfmann -Hosford -Hoshi -hosier -hosiery -hosieries -hosiers -hosing -hosiomartyr -Hoskins -Hoskinson -Hoskinston -Hosmer -hosp -hosp. -Hospers -hospice -hospices -hospita -hospitable -hospitableness -hospitably -hospitage -hospital -hospitalary -Hospitaler -Hospitalet -hospitalism -hospitality -hospitalities -hospitalization -hospitalizations -hospitalize -hospitalized -hospitalizes -hospitalizing -Hospitaller -hospitalman -hospitalmen -hospitals -hospital's -hospitant -hospitate -hospitation -hospitator -hospitia -hospitious -hospitium -hospitize -hospodar -hospodariat -hospodariate -hospodars -hoss -Hosston -Host -Hosta -hostage -hostaged -hostager -hostages -hostage's -hostageship -hostaging -hostal -hostas -hosted -hostel -hosteled -hosteler -hostelers -hosteling -hosteller -hostelling -hostelry -hostelries -hostels -hoster -hostess -hostessed -hostesses -hostessing -hostess's -hostess-ship -Hostetter -hostie -hostile -hostiley -hostilely -hostileness -hostiles -hostility -hostilities -hostilize -hosting -hostle -hostler -hostlers -hostlership -hostlerwife -hostless -hostly -hostry -hosts -hostship -hot -hot-air -hot-air-heat -hot-air-heated -Hotatian -hotbed -hotbeds -hot-blast -hotblood -hotblooded -hot-blooded -hot-bloodedness -hotbloods -hotbox -hotboxes -hot-brain -hotbrained -hot-breathed -hot-bright -hot-broached -hotcake -hotcakes -hotch -hotcha -hotched -hotches -hotching -Hotchkiss -hotchpot -hotchpotch -hotchpotchly -hotchpots -hot-cold -hot-deck -hot-dipped -hotdog -hot-dog -hotdogged -hotdogger -hotdogging -hotdogs -hot-draw -hot-drawing -hot-drawn -hot-drew -hot-dry -hote -Hotei -hot-eyed -hotel -hoteldom -hotelhood -hotelier -hoteliers -hotelization -hotelize -hotelkeeper -hotelless -hotelman -hotelmen -hotels -hotel's -hotelward -Hotevilla -hotfoot -hot-foot -hotfooted -hotfooting -hotfoots -hot-forged -hot-galvanize -hot-gospeller -hothead -hotheaded -hot-headed -hotheadedly -hotheadedness -hotheadednesses -hotheads -hothearted -hotheartedly -hotheartedness -hot-hoof -hothouse -hot-house -hothouses -hot-humid -hoti -Hotien -hotkey -hotly -hotline -hotlines -hot-livered -hotmelt -hot-mettled -hot-mix -hot-moist -hotmouthed -hotness -hotnesses -HOTOL -hotplate -hotpot -hot-pot -hotpress -hot-press -hotpressed -hot-presser -hotpresses -hotpressing -hot-punched -hotrod -hotrods -hot-roll -hot-rolled -hots -hot-short -hot-shortness -hotshot -hot-shot -hotshots -hotsy-totsy -hot-spirited -hot-spot -hot-spotted -hot-spotting -hotsprings -Hotspur -hotspurred -hotspurs -hot-stomached -hot-swage -hotta -hotted -hot-tempered -Hottentot -Hottentotese -Hottentotic -Hottentotish -Hottentotism -hotter -hottery -hottest -hottie -hotting -hottish -hottle -Hottonia -hot-vulcanized -hot-water-heat -hot-water-heated -hot-windy -hot-wire -hot-work -Hotze -hotzone -houbara -Houck -houdah -houdahs -Houdaille -Houdan -Houdini -Houdon -Hough -houghband -hougher -houghite -houghmagandy -houghsinew -hough-sinew -Houghton -Houghton-le-Spring -houhere -Houyhnhnm -Houlberg -houlet -Houlka -hoult -Houlton -Houma -houmous -hounce -Hound -hound-dog -hounded -hounder -hounders -houndfish -hound-fish -houndfishes -houndy -hounding -houndish -houndlike -houndman -hound-marked -hounds -houndsbane -houndsberry -hounds-berry -houndsfoot -houndshark -hound's-tongue -hound's-tooth -hounskull -Hounslow -houpelande -Houphouet-Boigny -houppelande -hour -hour-circle -hourful -hourglass -hour-glass -hourglasses -hourglass-shaped -houri -Hourigan -Hourihan -houris -hourless -hourly -hourlong -hour-long -Hours -housage -housal -Housatonic -House -houseball -houseboat -house-boat -houseboating -houseboats -houseboy -houseboys -housebote -housebound -housebreak -housebreaker -housebreakers -housebreaking -housebreaks -housebroke -housebroken -house-broken -housebrokenness -housebug -housebuilder -house-builder -housebuilding -house-cap -housecarl -houseclean -housecleaned -housecleaner -housecleaning -housecleanings -housecleans -housecoat -housecoats -housecraft -house-craft -housed -house-dog -house-dove -housedress -housefast -housefather -house-father -housefly -houseflies -housefly's -housefront -houseful -housefuls -housefurnishings -houseguest -house-headship -household -householder -householders -householdership -householding -householdry -households -household-stuff -househusband -househusbands -housey-housey -housekeep -housekeeper -housekeeperly -housekeeperlike -housekeepers -housekeeper's -housekeeping -housekept -housekkept -housel -Houselander -houseled -houseleek -houseless -houselessness -houselet -houselights -houseline -houseling -houselled -houselling -housels -housemaid -housemaidenly -housemaidy -housemaiding -housemaids -houseman -housemaster -housemastership -housemate -housemates -housemating -housemen -houseminder -housemistress -housemother -house-mother -housemotherly -housemothers -Housen -houseowner -housepaint -houseparent -housephone -house-place -houseplant -house-proud -Houser -house-raising -houseridden -houseroom -house-room -housers -houses -housesat -house-search -housesit -housesits -housesitting -housesmith -house-to-house -housetop -house-top -housetops -housetop's -house-train -houseward -housewares -housewarm -housewarmer -housewarming -house-warming -housewarmings -housewear -housewife -housewifely -housewifeliness -housewifelinesses -housewifery -housewiferies -housewifeship -housewifish -housewive -housewives -housework -houseworker -houseworkers -houseworks -housewrecker -housewright -housy -housing -housings -housling -Housman -houss -Houssay -housty -Houston -Houstonia -Housum -hout -houting -houtou -Houtzdale -houvari -houve -Hova -Hove -hovedance -Hovey -hovel -hoveled -hoveler -hoveling -hovelled -hoveller -hovelling -hovels -hovel's -Hoven -Hovenia -hover -hovercar -Hovercraft -hovercrafts -hovered -hoverer -hoverers -hovering -hoveringly -hoverly -hoverport -hovers -hovertrain -Hovland -HOW -howadji -Howard -howardite -Howardstown -Howarth -howbeit -howdah -howdahs -how-de-do -howder -howdy -howdy-do -howdie -howdied -how-d'ye-do -howdies -howdying -how-do-ye -how-do-ye-do -how-do-you-do -Howe -Howea -howe'er -Howey -howel -Howell -Howells -Howenstein -Howertons -Howes -however -howf -howff -howffs -howfing -howfs -howgates -Howie -howish -Howison -howitz -howitzer -howitzers -howk -howked -howker -howking -howkit -howks -howl -Howlan -Howland -howled -Howlend -howler -howlers -howlet -howlets -Howlyn -howling -howlingly -howlite -Howlond -howls -Howrah -hows -howsabout -howso -howsoever -howsomever -howsour -how-to -howtowdie -Howund -Howzell -hox -Hoxeyville -Hoxha -Hoxie -Hoxsie -HP -HPD -HPIB -hpital -HPLT -HPN -HPO -HPPA -HQ -HR -hr- -hr. -Hradcany -Hrault -Hrdlicka -hrdwre -HRE -Hreidmar -HRH -HRI -Hrimfaxi -HRIP -Hrolf -Hrothgar -Hrozny -hrs -Hruska -Hrutkay -Hrvatska -hrzn -HS -h's -HSB -HSC -HSFS -HSH -HSI -Hsia -Hsiamen -Hsia-men -Hsian -Hsiang -hsien -Hsingan -Hsingborg -Hsin-hai-lien -Hsining -Hsinking -HSLN -HSM -HSP -HSSDS -HST -H-steel -H-stretcher -Hsu -hsuan -HT -ht. -htel -Htindaw -Htizwe -HTK -Hts -HU -HUAC -huaca -Huachuca -huaco -Huai -Huai-nan -huajillo -Hualapai -Huambo -huamuchil -Huan -huanaco -Huang -huantajayite -Huanuco -huapango -huapangos -huarache -huaraches -huaracho -huarachos -Huaras -Huari -huarizo -Huascar -Huascaran -huashi -Huastec -Huastecan -Huastecs -Huave -Huavean -hub -Huba -hubb -hubba -hubbaboo -hub-band -hub-bander -hub-banding -Hubbard -Hubbardston -Hubbardsville -hubbed -Hubbell -hubber -hubby -hubbies -hubbing -Hubbite -Hubble -hubble-bubble -hubbly -hubbob -hub-boring -hubbub -hubbuboo -hubbubs -hubcap -hubcaps -hub-deep -Hube -Hubey -Huber -Huberman -Hubert -Huberty -Huberto -Hubertus -Hubertusburg -Hubie -Hubing -Hubli -hubmaker -hubmaking -hubnerite -hubris -hubrises -hubristic -hubristically -hubs -hub's -Hubsher -hubshi -hub-turning -Hucar -huccatoon -huchen -Huchnom -hucho -huck -huckaback -Huckaby -huckle -huckleback -hucklebacked -huckleberry -huckleberries -hucklebone -huckle-bone -huckles -huckmuck -hucks -huckster -hucksterage -huckstered -hucksterer -hucksteress -huckstery -huckstering -hucksterism -hucksterize -hucksters -huckstress -HUD -Huda -hudder-mudder -hudderon -Huddersfield -Huddy -Huddie -huddle -huddled -huddledom -huddlement -huddler -huddlers -huddles -Huddleston -huddling -huddlingly -huddock -huddroun -huddup -Hudgens -Hudgins -Hudibras -Hudibrastic -Hudibrastically -Hudis -Hudnut -Hudson -Hudsonia -Hudsonian -hudsonite -Hudsonville -Hue -Huebner -hued -hueful -huehuetl -Huei -Huey -Hueysville -Hueytown -hueless -huelessness -Huelva -huemul -huer -Huerta -hues -hue's -Huesca -Huesman -Hueston -Huff -huffaker -huffcap -huff-cap -huff-duff -huffed -huffer -huffy -huffier -huffiest -huffily -huffiness -huffing -huffingly -huffish -huffishly -huffishness -huffle -huffler -Huffman -huffs -huff-shouldered -huff-snuff -Hufnagel -Hufuf -hug -HUGE -huge-armed -huge-bellied -huge-bodied -huge-boned -huge-built -huge-grown -huge-horned -huge-jawed -Hugel -hugely -Hugelia -huge-limbed -hugelite -huge-looking -hugeness -hugenesses -hugeous -hugeously -hugeousness -huge-proportioned -Huger -hugest -huge-tongued -huggable -hugged -hugger -huggery -huggermugger -hugger-mugger -huggermuggery -hugger-muggery -hugger-muggeries -huggers -Huggin -hugging -huggingly -Huggins -huggle -Hugh -Hughes -Hugheston -Hughesville -Hughett -Hughie -Hughmanick -Hughoc -Hughson -Hughsonville -Hugi -hugy -Hugibert -Hugin -Hugli -hugmatee -hug-me-tight -Hugo -Hugoesque -Hugon -hugonis -Hugoton -hugs -hugsome -Huguenot -Huguenotic -Huguenotism -huguenots -Hugues -huh -Huhehot -Hui -huia -huic -Huichou -Huidobro -Huig -Huygenian -Huygens -huyghenian -Huyghens -Huila -huile -huipil -huipiles -huipilla -huipils -huisache -huiscoyol -huisher -Huysmans -huisquil -huissier -huitain -huitre -Huitzilopochtli -Hujsak -Huk -Hukawng -Hukbalahap -huke -Hukill -hula -Hula-Hoop -hula-hula -hulas -Hulbard -Hulbert -Hulbig -Hulburt -hulch -hulchy -Hulda -Huldah -huldee -Huldreich -Hulen -Hulett -huly -hulk -hulkage -hulked -hulky -hulkier -hulkiest -hulkily -hulkiness -hulking -hulkingly -hulkingness -hulks -Hull -hullaballoo -hullaballoos -hullabaloo -hullabaloos -Hullda -hulled -huller -hullers -hulling -hull-less -hullo -hulloa -hulloaed -hulloaing -hulloas -hullock -hulloed -hulloes -hulloing -hulloo -hullooed -hullooing -hulloos -hullos -hulls -hull's -Hulme -huloist -hulotheism -Hulsean -hulsite -hulster -Hultgren -Hultin -Hulton -hulu -Hulutao -hulver -hulverhead -hulverheaded -hulwort -Hum -Huma -Humacao -Humayun -human -humanate -humane -humanely -humaneness -humanenesses -humaner -humanest -human-headed -humanhood -humanics -humanify -humanification -humaniform -humaniformian -humanisation -humanise -humanised -humaniser -humanises -humanish -humanising -humanism -humanisms -humanist -humanistic -humanistical -humanistically -humanists -humanitary -humanitarian -humanitarianism -humanitarianisms -humanitarianist -humanitarianize -humanitarians -humanity -humanitian -humanities -humanitymonger -humanity's -humanization -humanizations -humanize -humanized -humanizer -humanizers -humanizes -humanizing -humankind -humankinds -humanly -humanlike -humanness -humannesses -humanoid -humanoids -humans -Humansville -Humarock -Humash -Humashim -humate -humates -humation -Humber -Humberside -Humbert -Humberto -Humbird -hum-bird -Humble -humblebee -humble-bee -humbled -humblehearted -humble-looking -humble-mannered -humble-minded -humble-mindedly -humble-mindedness -humblemouthed -humbleness -humblenesses -humbler -humblers -humbles -humble-spirited -humblesse -humblesso -humblest -humble-visaged -humbly -humblie -humbling -humblingly -humbo -Humboldt -Humboldtianum -humboldtilite -humboldtine -humboldtite -humbug -humbugability -humbugable -humbugged -humbugger -humbuggery -humbuggers -humbugging -humbuggism -humbug-proof -humbugs -humbuzz -humdinger -humdingers -humdrum -humdrumminess -humdrummish -humdrummishness -humdrumness -humdrums -humdudgeon -Hume -Humean -humect -humectant -humectate -humectation -humective -humeral -humerals -humeri -humermeri -humero- -humeroabdominal -humerocubital -humerodigital -humerodorsal -humerometacarpal -humero-olecranal -humeroradial -humeroscapular -humeroulnar -humerus -Humeston -humet -humettee -humetty -Humfrey -Humfrid -Humfried -humhum -humic -humicubation -humid -humidate -humidfied -humidfies -humidify -humidification -humidifications -humidified -humidifier -humidifiers -humidifies -humidifying -humidistat -humidity -humidities -humidityproof -humidity-proof -humidly -humidness -humidor -humidors -humify -humific -humification -humified -humifuse -humilation -humiliant -humiliate -humiliated -humiliates -humiliating -humiliatingly -humiliation -humiliations -humiliative -humiliator -humiliatory -humilific -humilis -humility -humilities -humilitude -humin -Humiria -Humiriaceae -Humiriaceous -Humism -Humist -humistratous -humit -humite -humiture -humlie -hummable -hummaul -hummed -Hummel -hummeler -Hummelstown -hummer -hummeri -hummers -hummie -humming -hummingbird -humming-bird -hummingbirds -hummingly -hummock -hummocky -hummocks -hummum -hummus -hummuses -Humnoke -Humo -humongous -humor -humoral -humoralism -humoralist -humoralistic -humored -humorer -humorers -humoresque -humoresquely -humorful -humorific -humoring -humorism -humorist -humoristic -humoristical -humorists -humorize -humorless -humorlessly -humorlessness -humorlessnesses -humorology -humorous -humorously -humorousness -humorousnesses -humorproof -humors -humorsome -humorsomely -humorsomeness -Humorum -humour -humoural -humoured -humourful -humouring -humourist -humourize -humourless -humourlessness -humours -humoursome -humous -Hump -Humpage -humpback -humpbacked -hump-backed -humpbacks -humped -Humperdinck -Humph -humphed -humphing -Humphrey -Humphreys -humphs -humpy -humpier -humpies -humpiest -humpiness -humping -humpless -humps -hump-shaped -hump-shoulder -hump-shouldered -humpty -humpty-dumpty -Humptulips -Hums -humstrum -humuhumunukunukuapuaa -humulene -humulon -humulone -Humulus -humus -humuses -humuslike -Hun -Hunan -Hunanese -hunch -Hunchakist -hunchback -hunchbacked -hunchbacks -hunched -hunches -hunchet -hunchy -hunching -hund -hunder -hundi -hundred -hundredal -hundredary -hundred-dollar -hundred-eyed -hundreder -hundred-feathered -hundredfold -hundred-footed -hundred-handed -hundred-headed -hundred-year -hundred-leaf -hundred-leaved -hundred-legged -hundred-legs -hundredman -hundred-mile -hundredpenny -hundred-percent -hundred-percenter -hundred-pound -hundred-pounder -hundreds -hundredth -hundredths -hundredweight -hundredweights -hundredwork -Huneker -hunfysh -Hunfredo -Hung -Hung. -hungar -Hungary -Hungaria -Hungarian -hungarians -hungaric -hungarite -Hunger -hunger-bit -hunger-bitten -hunger-driven -hungered -hungerer -Hungerford -hungering -hungeringly -hungerless -hungerly -hunger-mad -hunger-pressed -hungerproof -hungerroot -hungers -hunger-starve -hunger-stricken -hunger-stung -hungerweed -hunger-worn -Hungnam -hungry -hungrier -hungriest -hungrify -hungrily -hungriness -hung-up -hunh -Hunyadi -Hunyady -Hunyak -Hunk -Hunker -hunkered -hunkering -Hunkerism -Hunkerous -Hunkerousness -hunkers -hunky -hunky-dory -Hunkie -hunkies -Hunkpapa -hunks -hunk's -Hunley -Hunlike -hunner -Hunnewell -Hunnian -Hunnic -Hunnican -Hunnish -Hunnishness -huns -Hunsinger -Hunt -huntable -huntaway -hunted -huntedly -Hunter -Hunterian -hunterlike -Hunters -Huntersville -Huntertown -huntilite -hunting -Huntingburg -Huntingdon -Huntingdonshire -hunting-ground -huntings -Huntington -Huntingtown -Huntland -Huntlee -Huntley -Huntly -huntress -huntresses -Hunts -Huntsburg -huntsman -huntsman's-cup -huntsmanship -huntsmen -hunt's-up -Huntsville -huntswoman -Huoh -hup -Hupa -hupaithric -Hupeh -huppah -huppahs -Huppert -huppot -huppoth -Hura -hurcheon -Hurd -hurden -hurdies -hurdy-gurdy -hurdy-gurdies -hurdy-gurdyist -hurdy-gurdist -hurdis -Hurdland -hurdle -hurdled -hurdleman -hurdler -hurdlers -hurdles -hurdlewise -hurdling -hurds -Hurdsfield -hure -hureaulite -hureek -hurf -Hurff -hurgila -hurkaru -hurkle -hurl -hurlbarrow -hurlbat -hurl-bone -Hurlbut -hurled -Hurlee -Hurley -Hurleigh -hurleyhacket -hurley-hacket -hurleyhouse -hurleys -Hurleyville -hurlement -hurler -hurlers -Hurless -hurly -hurly-burly -hurly-burlies -hurlies -hurling -hurlings -Hurlock -Hurlow -hurlpit -hurls -hurlwind -Hurok -Huron -Huronian -hurr -hurrah -hurrahed -hurrahing -hurrahs -hurray -hurrayed -hurraying -hurrays -hurr-bur -hurrer -Hurri -hurry -Hurrian -hurry-burry -hurricane -hurricane-decked -hurricane-proof -hurricanes -hurricane's -hurricanize -hurricano -hurridly -hurried -hurriedly -hurriedness -hurrier -hurriers -hurries -hurrygraph -hurrying -hurryingly -hurryproof -Hurris -hurry-scurry -hurry-scurried -hurry-scurrying -hurry-skurry -hurry-skurried -hurry-skurrying -hurrisome -hurry-up -hurrock -hurroo -hurroosh -hursinghar -Hurst -Hurstmonceux -hursts -hurt -hurtable -hurted -hurter -hurters -hurtful -hurtfully -hurtfulness -Hurty -hurting -hurtingest -hurtle -hurtleberry -hurtleberries -hurtled -hurtles -hurtless -hurtlessly -hurtlessness -hurtling -hurtlingly -hurts -Hurtsboro -hurtsome -Hurwit -Hurwitz -Hus -Husain -husband -husbandable -husbandage -husbanded -husbander -husbandfield -husbandhood -husbanding -husbandland -husbandless -husbandly -husbandlike -husbandliness -husbandman -husbandmen -husbandress -husbandry -husbandries -husbands -husband's -husbandship -husband-to-be -huscarl -Husch -huse -Husein -hush -Husha -hushaby -hushable -hush-boat -hushcloth -hushed -hushedly -hushed-up -husheen -hushel -husher -hushes -hushful -hushfully -hush-hush -hushing -hushingly -hushion -hushllsost -hush-money -husho -hushpuppy -hushpuppies -husht -hush-up -Husk -Huskamp -huskanaw -husked -Huskey -huskened -husker -huskers -huskershredder -Husky -huskier -huskies -huskiest -huskily -huskiness -huskinesses -husking -huskings -Huskisson -husklike -huskroot -husks -husk-tomato -huskwort -huso -huspel -huspil -Huss -Hussar -hussars -Hussey -Hussein -Husser -Husserl -Husserlian -hussy -hussydom -hussies -hussyness -Hussism -Hussite -Hussitism -hust -husting -hustings -Hustisford -hustle -hustlecap -hustle-cap -hustled -hustlement -hustler -hustlers -hustles -hustling -Huston -Hustontown -Hustonville -Husum -huswife -huswifes -huswives -HUT -hutch -hutched -hutcher -hutches -Hutcheson -hutchet -hutchie -hutching -Hutchings -Hutchins -Hutchinson -Hutchinsonian -Hutchinsonianism -hutchinsonite -Hutchison -Huterian -HUTG -Huther -huthold -hutholder -hutia -hut-keep -hutkeeper -hutlet -hutlike -hutment -hutments -Hutner -hutre -huts -hut's -hut-shaped -Hutson -Hutsonville -Hutsulian -Hutt -Huttan -hutted -Hutterites -Huttig -hutting -Hutto -Hutton -Huttonian -Huttonianism -huttoning -Huttonsville -huttonweed -Hutu -hutukhtu -hutuktu -hutung -hutzpa -hutzpah -hutzpahs -hutzpas -huurder -huvelyk -Hux -Huxford -Huxham -Huxley -Huxleian -Huxleyan -Huxtable -huxter -huzoor -Huzvaresh -huzz -huzza -huzzaed -huzzah -huzzahed -huzzahing -huzzahs -huzzaing -huzzard -huzzas -huzzy -HV -HVAC -Hvar -Hvasta -hvy -HW -hw- -hwa -Hwaiyang -Hwajung -hwan -Hwang -Hwanghwatsun -Hwangmei -H-war -HWD -Hwelon -hwy -hwyl -HWM -hwt -Hwu -HZ -i -y -i' -i- --i- -y- -i. -Y. -I.C. -I.C.S. -I.D. -i.e. -I.F.S. -I.M. -Y.M.C.A. -Y.M.H.A. -I.N.D. -I.O.O.F. -i.q. -I.R.A. -Y.T. -I.T.U. -I.V. -Y.W.C.A. -Y.W.H.A. -I.W.W. -i/c -I/O -ia -YA -ia- -Ia. -IAA -Yaakov -IAB -yaba -yabber -yabbered -yabbering -yabbers -yabbi -yabby -yabbie -yabble -Yablon -Yablonovoi -yaboo -yabu -Yabucoa -yacal -Yacano -yacare -yacata -YACC -yacca -Iacchic -Iacchos -Iacchus -yachan -Yachats -Iache -Iachimo -yacht -yacht-built -yachtdom -yachted -yachter -yachters -yachty -yachting -yachtings -yachtist -yachtman -yachtmanship -yachtmen -yachts -yachtsman -yachtsmanlike -yachtsmanship -yachtsmen -yachtswoman -yachtswomen -yack -yacked -yackety-yack -yackety-yak -yackety-yakked -yackety-yakking -yacking -yacks -Yacolt -Yacov -IAD -yad -yadayim -Yadava -IADB -yade -yadim -Yadkin -Yadkinville -IAEA -Iaeger -Yaeger -Yael -IAF -Yafa -yaff -yaffed -yaffil -yaffing -yaffingale -yaffle -yaffler -yaffs -Yafo -Yager -yagers -yagger -yaghourt -yagi -yagis -Yagnob -Iago -yagourundi -Yagua -yaguarundi -yaguas -yaguaza -IAH -yah -yahan -Yahata -Yahgan -Yahganan -Yahgans -Yahiya -Yahoo -Yahoodom -Yahooish -Yahooism -yahooisms -Yahoos -Yahrzeit -yahrzeits -Yahuna -Yahuskin -Yahve -Yahveh -Yahvist -Yahvistic -Yahwe -Yahweh -Yahwism -Yahwist -Yahwistic -yay -Yaya -Iain -yair -yaird -yairds -yays -yaje -yajein -yajeine -yajenin -yajenine -Yajna -Yajnavalkya -yajnopavita -Yajur-Veda -yak -Yaka -Yakala -yakalo -yakamik -Yakan -yakattalo -Yaker -yakety-yak -yakety-yakked -yakety-yakking -yak-yak -Yakima -yakin -yakity-yak -yakitori -yakitoris -yakka -yakked -yakker -yakkers -yakkety-yak -yakking -yakmak -yakman -Yakona -Yakonan -yaks -yaksha -yakshi -Yakut -Yakutat -Yakutsk -ial -Yalaha -yalb -yald -Yale -Yalensian -yali -Ialysos -Ialysus -yalla -yallaer -yallock -yallow -Ialmenus -Yalonda -Yalta -Yalu -IAM -Yam -Yama -Yamacraw -Yamagata -Yamaha -yamalka -yamalkas -Yamamadi -yamamai -yamanai -Yamani -Yamashita -yamaskite -Yamassee -Yamato -Yamato-e -iamatology -Yamauchi -iamb -Iambe -iambelegus -iambi -iambic -iambical -iambically -iambics -iambist -iambize -iambographer -iambs -iambus -iambuses -Yamel -yamen -yamens -Yameo -Yami -yamilke -Yamis -yammadji -yammer -yammered -yammerer -yammerers -yammering -yammerly -yammers -yamp -Yampa -yampee -yamph -yam-root -Iams -yams -yamshik -yamstchick -yamstchik -yamulka -yamulkas -yamun -yamuns -Iamus -ian -Yan -iana -Yana -yanacona -Yanan -Yanaton -Yance -Yancey -Yanceyville -Yancy -yancopin -Iand -Yand -yander -Yang -yanggona -yang-kin -Yangku -yangs -yangtao -Yangtze -Yangtze-Kiang -Yanina -Yank -yanked -Yankee -Yankeedom -Yankee-doodle -Yankee-doodledom -Yankee-doodleism -Yankeefy -Yankeefied -Yankeefying -Yankeeism -Yankeeist -Yankeeize -Yankeeland -Yankeeness -yankees -Yankeetown -yanker -yanky -yanking -yanks -Yankton -Yanktonai -Yann -yannam -Yannigan -Yannina -yanolite -yanqui -yanquis -Ianteen -Ianthe -Ianthina -ianthine -ianthinite -Yantic -Yantis -yantra -yantras -Ianus -iao -Yao -Yao-min -yaoort -Yaounde -yaourt -yaourti -Yap -yapa -Iapetus -Yaphank -Iapyges -Iapigia -Iapygian -Iapygii -Iapyx -yaply -Yapman -yapness -yapock -yapocks -yapok -yapoks -yapon -yapons -yapp -yapped -yapper -yappers -yappy -yappiness -yapping -yappingly -yappish -IAPPP -yaps -yapster -Yapur -yaqona -Yaqui -Yaquina -yar -yaray -Yarak -yarb -Iarbas -Yarborough -Yard -yardage -yardages -yardang -Iardanus -yardarm -yard-arm -yardarms -yardbird -yardbirds -yard-broad -yard-deep -yarded -yarder -yardful -yardgrass -yarding -yardkeep -yardland -yardlands -Yardley -yard-long -yardman -yardmaster -yardmasters -yard-measure -yardmen -yard-of-ale -Yards -yard's -yardsman -yard-square -yardstick -yardsticks -yardstick's -yard-thick -yardwand -yard-wand -yardwands -yard-wide -yardwork -yardworks -iare -yare -yarely -yarer -yarest -yareta -Iaria -yariyari -yark -Yarkand -yarke -yarkee -yarl -yarly -yarm -yarmalke -yarmelke -yarmelkes -Yarmouth -Yarmuk -yarmulka -yarmulke -yarmulkes -yarn -yarn-boiling -yarn-cleaning -yarn-dye -yarn-dyed -yarned -Yarnell -yarnen -yarner -yarners -yarning -yarn-measuring -yarn-mercerizing -yarns -yarn's -yarn-spinning -yarn-testing -yarnwindle -Yaron -Yaroslavl -iarovization -yarovization -iarovize -yarovize -iarovized -yarovized -iarovizing -yarovizing -yarpha -yarr -yarraman -yarramen -yarran -yarry -yarringle -yarrow -yarrows -yarth -yarthen -Yaru -Yarura -Yaruran -Yaruro -Yarvis -yarwhelp -yarwhip -IAS -yas -yashiro -yashmac -yashmacs -yashmak -yashmaks -Yasht -Yashts -Iasi -Iasion -iasis -yasmak -yasmaks -Yasmeen -Yasmin -Yasmine -Yasna -Yasnian -Iaso -Yassy -Yasu -Yasui -Yasuo -Iasus -yat -IATA -yatagan -yatagans -yataghan -yataghans -yatalite -ya-ta-ta -Yate -Yates -Yatesboro -Yatesville -yati -Yatigan -iatraliptic -iatraliptics -iatry -iatric -iatrical -iatrics -iatro- -iatrochemic -iatrochemical -iatrochemically -iatrochemist -iatrochemistry -iatrogenic -iatrogenically -iatrogenicity -iatrology -iatrological -iatromathematical -iatromathematician -iatromathematics -iatromechanical -iatromechanist -iatrophysical -iatrophysicist -iatrophysics -iatrotechnics -IATSE -yatter -yattered -yattering -yatters -Yatvyag -Yatzeck -IAU -Yauapery -IAUC -Yauco -yaud -yauds -yauld -Yaunde -yaup -yauped -yauper -yaupers -yauping -yaupon -yaupons -yaups -yautia -yautias -yava -Yavapai -Yavar -Iaverne -yaw -Yawata -yawed -yawey -yaw-haw -yawy -yaw-yaw -yawing -Yawkey -yawl -yawled -yawler -yawling -yawl-rigged -yawls -yawlsman -yawmeter -yawmeters -yawn -yawned -yawney -yawner -yawners -yawnful -yawnfully -yawny -yawnily -yawniness -yawning -yawningly -yawnproof -yawns -yawnups -yawp -yawped -yawper -yawpers -yawping -yawpings -yawps -yawroot -yaws -yawshrub -yaw-sighted -yaw-ways -yawweed -yaxche -y-axes -y-axis -yazata -Yazbak -Yazd -Yazdegerdian -Yazoo -IB -YB -ib. -IBA -Ibad -Ibada -Ibadan -Ibadhi -Ibadite -Ibagu -y-bake -Iban -Ibanag -Ibanez -Ibapah -Ibaraki -Ibarruri -Ibbetson -Ibby -Ibbie -Ibbison -I-beam -Iberes -Iberi -Iberia -Iberian -iberians -Iberic -Iberis -Iberism -iberite -Ibero- -Ibero-aryan -Ibero-celtic -Ibero-insular -Ibero-pictish -Ibert -IBEW -ibex -ibexes -Ibibio -ibices -Ibycter -Ibycus -ibid -ibid. -ibidem -Ibididae -Ibidinae -ibidine -Ibidium -Ibilao -ibility -ibis -ibisbill -ibises -Ibiza -ible -y-blend -y-blenny -y-blennies -yblent -y-blent -Iblis -IBM -IBN -ibn-Batuta -ibn-Rushd -ibn-Saud -ibn-Sina -Ibo -ibogaine -ibolium -Ibos -ibota -Ibrahim -IBRD -Ibsen -Ibsenian -Ibsenic -Ibsenish -Ibsenism -Ibsenite -Ibson -IBTCWH -I-bunga -ibuprofen -ic -ICA -ICAAAA -Icacinaceae -icacinaceous -icaco -Icacorea -ical -ically -ICAN -ICAO -Icard -Icaria -Icarian -Icarianism -Icarius -Icarus -icasm -y-cast -ICB -ICBM -ICBW -ICC -ICCC -ICCCM -ICD -ice -Ice. -iceberg -icebergs -iceberg's -ice-bird -ice-blind -iceblink -iceblinks -iceboat -ice-boat -iceboater -iceboating -iceboats -ice-bolt -icebone -icebound -ice-bound -icebox -iceboxes -icebreaker -ice-breaker -icebreakers -ice-breaking -ice-brook -ice-built -icecap -ice-cap -ice-capped -icecaps -ice-chipping -ice-clad -ice-cold -ice-cool -ice-cooled -ice-covered -icecraft -ice-cream -ice-crushing -ice-crusted -ice-cube -ice-cubing -ice-cutting -iced -ice-encrusted -ice-enveloped -icefall -ice-fall -icefalls -ice-field -icefish -icefishes -ice-floe -ice-foot -ice-free -ice-green -ice-hill -ice-hook -icehouse -ice-house -icehouses -ice-imprisoned -ice-island -icekhana -icekhanas -Icel -Icel. -ice-laid -Iceland -Icelander -icelanders -Icelandian -Icelandic -iceleaf -iceless -Icelidae -icelike -ice-locked -Icelus -iceman -ice-master -icemen -ice-mountain -Iceni -Icenic -icepick -ice-plant -ice-plough -icequake -Icerya -iceroot -icers -ices -ice-scoured -ice-sheet -iceskate -ice-skate -iceskated -ice-skated -iceskating -ice-skating -icespar -ice-stream -icework -ice-work -ICFTU -ich -Ichabod -Ichang -ichebu -IChemE -ichibu -Ichinomiya -ichn- -Ichneumia -ichneumon -ichneumon- -ichneumoned -Ichneumones -ichneumonid -Ichneumonidae -ichneumonidan -Ichneumonides -ichneumoniform -ichneumonized -ichneumonoid -Ichneumonoidea -ichneumonology -ichneumous -ichneutic -ichnite -ichnites -ichnography -ichnographic -ichnographical -ichnographically -ichnographies -ichnolite -ichnolithology -ichnolitic -ichnology -ichnological -ichnomancy -icho -ichoglan -ichor -ichorous -ichorrhaemia -ichorrhea -ichorrhemia -ichorrhoea -ichors -Y-chromosome -ichs -ichth -ichthammol -ichthy- -ichthyal -ichthyian -ichthyic -ichthyician -ichthyism -ichthyisms -ichthyismus -ichthyization -ichthyized -ichthyo- -ichthyobatrachian -Ichthyocentaur -Ichthyocephali -ichthyocephalous -ichthyocol -ichthyocolla -ichthyocoprolite -Ichthyodea -Ichthyodectidae -ichthyodian -ichthyodont -ichthyodorylite -ichthyodorulite -ichthyofauna -ichthyofaunal -ichthyoform -ichthyographer -ichthyography -ichthyographia -ichthyographic -ichthyographies -ichthyoid -ichthyoidal -Ichthyoidea -Ichthyol -ichthyol. -ichthyolatry -ichthyolatrous -ichthyolite -ichthyolitic -ichthyology -ichthyologic -ichthyological -ichthyologically -ichthyologies -ichthyologist -ichthyologists -ichthyomancy -ichthyomania -ichthyomantic -Ichthyomorpha -ichthyomorphic -ichthyomorphous -ichthyonomy -ichthyopaleontology -ichthyophagan -ichthyophagi -ichthyophagy -ichthyophagian -ichthyophagist -ichthyophagize -ichthyophagous -ichthyophile -ichthyophobia -ichthyophthalmite -ichthyophthiriasis -ichthyophthirius -ichthyopolism -ichthyopolist -ichthyopsid -Ichthyopsida -ichthyopsidan -Ichthyopterygia -ichthyopterygian -ichthyopterygium -Ichthyornis -Ichthyornithes -ichthyornithic -Ichthyornithidae -Ichthyornithiformes -ichthyornithoid -ichthyosaur -Ichthyosauria -ichthyosaurian -ichthyosaurid -Ichthyosauridae -ichthyosauroid -Ichthyosaurus -ichthyosauruses -ichthyosiform -ichthyosis -ichthyosism -ichthyotic -Ichthyotomi -ichthyotomy -ichthyotomist -ichthyotomous -ichthyotoxin -ichthyotoxism -ichthys -ichthytaxidermy -ichthulin -ichthulinic -ichthus -ichu -ichulle -ICI -icy -ician -icica -icicle -icicled -icicles -icy-cold -ycie -icier -iciest -icily -iciness -icinesses -icing -icings -icity -ICJ -ick -Icken -icker -ickers -Ickes -Ickesburg -icky -ickier -ickiest -ickily -ickiness -ickle -ICL -YCL -yclad -ycleped -ycleping -yclept -y-clept -ICLID -ICM -ICMP -icod -i-come -ICON -icon- -icones -Iconian -iconic -iconical -iconically -iconicity -iconism -Iconium -iconize -icono- -iconoclasm -iconoclasms -iconoclast -iconoclastic -iconoclastically -iconoclasticism -iconoclasts -iconodule -iconoduly -iconodulic -iconodulist -iconograph -iconographer -iconography -iconographic -iconographical -iconographically -iconographies -iconographist -iconolagny -iconolater -iconolatry -iconolatrous -iconology -iconological -iconologist -iconomachal -iconomachy -iconomachist -iconomania -iconomatic -iconomatically -iconomaticism -iconomatography -iconometer -iconometry -iconometric -iconometrical -iconometrically -iconophile -iconophily -iconophilism -iconophilist -iconoplast -Iconoscope -iconostas -iconostases -iconostasion -iconostasis -iconotype -icons -iconv -iconvert -icos- -icosaheddra -icosahedra -icosahedral -icosahedron -icosahedrons -Icosandria -icosasemic -icosian -icositedra -icositetrahedra -icositetrahedron -icositetrahedrons -icosteid -Icosteidae -icosteine -Icosteus -icotype -ICP -ICRC -i-cried -ics -ICSC -ICSH -ICST -ICT -icteric -icterical -icterics -Icteridae -icterine -icteritious -icteritous -icterode -icterogenetic -icterogenic -icterogenous -icterohematuria -icteroid -icterous -icterus -icteruses -ictic -Ictinus -Ictonyx -ictuate -ictus -ictuses -id -I'd -yd -id. -IDA -Idabel -idae -Idaea -Idaean -idaein -Idaho -Idahoan -idahoans -yday -Idaic -Idalia -Idalian -Idalina -Idaline -Ydalir -Idalla -Idalou -Idamay -idan -Idanha -idant -Idas -Idaville -IDB -IDC -idcue -iddat -IDDD -Idden -iddhi -Iddio -Iddo -ide -IDEA -idea'd -ideaed -ideaful -ideagenous -ideaistic -ideal -idealess -idealy -idealisation -idealise -idealised -idealiser -idealises -idealising -idealism -idealisms -idealist -idealistic -idealistical -idealistically -idealists -ideality -idealities -idealization -idealizations -idealization's -idealize -idealized -idealizer -idealizes -idealizing -idealless -ideally -idealness -idealogy -idealogical -idealogies -idealogue -ideals -ideamonger -Idean -ideas -idea's -ideata -ideate -ideated -ideates -ideating -ideation -ideational -ideationally -ideations -ideative -ideatum -idee -ideefixe -idee-force -idee-maitresse -ideist -Idel -Ideler -Idelia -Idell -Idelle -Idelson -idem -idemfactor -idempotency -idempotent -idems -Iden -idence -idenitifiers -ident -identic -identical -identicalism -identically -identicalness -identies -identifer -identifers -identify -identifiability -identifiable -identifiableness -identifiably -identific -identification -identificational -identifications -identified -identifier -identifiers -identifies -identifying -Identikit -identism -identity -identities -identity's -ideo -ideo- -ideogenetic -ideogeny -ideogenical -ideogenous -ideoglyph -ideogram -ideogramic -ideogrammatic -ideogrammic -ideograms -ideograph -ideography -ideographic -ideographical -ideographically -ideographs -ideokinetic -ideolatry -ideolect -ideology -ideologic -ideological -ideologically -ideologies -ideologise -ideologised -ideologising -ideologist -ideologize -ideologized -ideologizing -ideologue -ideomania -ideomotion -ideomotor -ideoogist -ideophobia -ideophone -ideophonetics -ideophonous -ideoplasty -ideoplastia -ideoplastic -ideoplastics -ideopraxist -ideotype -ideo-unit -Ider -ides -idesia -idest -ideta -Idette -Idewild -IDF -idgah -Idhi -IDI -idiasm -idic -idigbo -idyl -idyler -idylian -idylism -idylist -idylists -idylize -idyll -idyller -idyllia -idyllian -idyllic -idyllical -idyllically -idyllicism -idyllion -idyllist -idyllists -idyllium -idylls -Idyllwild -idyls -idin -idio- -idiobiology -idioblast -idioblastic -idiochromatic -idiochromatin -idiochromosome -idiocy -idiocyclophanous -idiocies -idiocrasy -idiocrasies -idiocrasis -idiocratic -idiocratical -idiocratically -idiodynamic -idiodynamics -idioelectric -idioelectrical -Idiogastra -idiogenesis -idiogenetic -idiogenous -idioglossia -idioglottic -idiogram -idiograph -idiographic -idiographical -idiohypnotism -idiolalia -idiolatry -idiolect -idiolectal -idiolects -idiolysin -idiologism -idiom -idiomatic -idiomatical -idiomatically -idiomaticalness -idiomaticity -idiomaticness -idiomelon -idiometer -idiomography -idiomology -idiomorphic -idiomorphically -idiomorphic-granular -idiomorphism -idiomorphous -idioms -idiomuscular -idion -idiopathetic -idiopathy -idiopathic -idiopathical -idiopathically -idiopathies -idiophanism -idiophanous -idiophone -idiophonic -idioplasm -idioplasmatic -idioplasmic -idiopsychology -idiopsychological -idioreflex -idiorepulsive -idioretinal -idiorrhythmy -idiorrhythmic -idiorrhythmism -Idiosepiidae -Idiosepion -idiosyncracy -idiosyncracies -idiosyncrasy -idiosyncrasies -idiosyncrasy's -idiosyncratic -idiosyncratical -idiosyncratically -idiosome -idiospasm -idiospastic -idiostatic -idiot -idiotcy -idiotcies -idiothalamous -idiothermy -idiothermic -idiothermous -idiotic -idiotical -idiotically -idioticalness -idioticon -idiotype -idiotypic -idiotise -idiotised -idiotish -idiotising -idiotism -idiotisms -idiotize -idiotized -idiotizing -idiotry -idiotropian -idiotropic -idiots -idiot's -idiozome -Idism -Idist -Idistic -Iditarod -idite -iditol -idium -IDL -idle -idleby -idle-brained -idled -Idledale -idleful -idle-handed -idleheaded -idle-headed -idlehood -idle-looking -Idleman -idlemen -idlement -idle-minded -idleness -idlenesses -idle-pated -idler -idlers -idles -idleset -idleship -idlesse -idlesses -idlest -idlety -Idlewild -idle-witted -idly -idling -idlish -IDM -Idmon -IDN -Ido -idocrase -idocrases -Idoism -Idoist -Idoistic -idol -Idola -Idolah -idolaster -idolastre -idolater -idolaters -idolator -idolatress -idolatry -idolatric -idolatrical -idolatries -idolatrise -idolatrised -idolatriser -idolatrising -idolatrize -idolatrized -idolatrizer -idolatrizing -idolatrous -idolatrously -idolatrousness -idolet -idolify -idolisation -idolise -idolised -idoliser -idolisers -idolises -idolish -idolising -idolism -idolisms -idolist -idolistic -idolization -idolize -idolized -idolizer -idolizers -idolizes -idolizing -Idolla -idolo- -idoloclast -idoloclastic -idolodulia -idolographical -idololater -idololatry -idololatrical -idolomancy -idolomania -idolon -idolothyte -idolothytic -idolous -idols -idol's -idolum -Idomeneo -Idomeneus -Idona -Idonah -Idonea -idoneal -idoneity -idoneities -idoneous -idoneousness -Idonna -idorgan -idosaccharic -idose -Idotea -Idoteidae -Idothea -Idotheidae -Idou -Idoux -IDP -Idria -idrialin -idrialine -idrialite -idryl -Idris -Idrisid -Idrisite -idrosis -IDS -yds -Idumaea -Idumaean -Idumea -Idumean -Idun -Iduna -IDV -IDVC -Idzik -ie -ye -ie- -yea -yea-and-nay -yea-and-nayish -Yeaddiss -Yeager -Yeagertown -yeah -yeah-yeah -yealing -yealings -yean -yea-nay -yeaned -yeaning -yeanling -yeanlings -yeans -yeaoman -year -yeara -year-around -yearbird -yearbook -year-book -yearbooks -year-born -year-counted -yeard -yearday -year-daimon -year-demon -yeared -yearend -year-end -yearends -yearful -Yeargain -yearly -yearlies -yearling -yearlings -yearlong -year-long -year-marked -yearn -yearned -yearner -yearners -yearnful -yearnfully -yearnfulness -yearning -yearningly -yearnings -yearnling -yearns -yearock -year-old -year-round -years -year's -yearth -Yearwood -yeas -yeasayer -yea-sayer -yeasayers -yea-saying -yeast -yeast-bitten -yeasted -yeasty -yeastier -yeastiest -yeastily -yeastiness -yeasting -yeastless -yeastlike -yeasts -yeast's -yeat -yeather -Yeaton -Yeats -Yeatsian -IEC -yecch -yecchy -yecchs -yech -yechy -yechs -Yecies -yed -Ieda -yedding -yede -yederly -Yedo -IEE -Yee -yeech -IEEE -yeel -yeelaman -yeelin -yeelins -yees -yeeuch -yeeuck -Yefremov -yegg -yeggman -yeggmen -yeggs -yeguita -Yeh -Yehudi -Yehudit -Iey -Ieyasu -Yeisk -Yekaterinburg -Yekaterinodar -Yekaterinoslav -yeld -yeldrin -yeldrine -yeldring -yeldrock -yelek -Yelena -Ielene -Yelich -Yelisavetgrad -Yelisavetpol -yelk -yelks -yell -yelled -yeller -yellers -yelly-hoo -yelly-hooing -yelling -yelloch -yellow -yellowammer -yellow-aproned -yellow-armed -yellowback -yellow-backed -yellow-banded -yellowbark -yellow-bark -yellow-barked -yellow-barred -yellow-beaked -yellow-bearded -yellowbelly -yellow-belly -yellowbellied -yellow-bellied -yellowbellies -yellowberry -yellowberries -yellowbill -yellow-billed -yellowbird -yellow-black -yellow-blossomed -yellow-blotched -yellow-bodied -yellow-breasted -yellow-browed -yellow-brown -yellowcake -yellow-capped -yellow-centered -yellow-checked -yellow-cheeked -yellow-chinned -yellow-collared -yellow-colored -yellow-complexioned -yellow-covered -yellow-crested -yellow-cross -yellowcrown -yellow-crowned -yellowcup -yellow-daisy -yellow-dye -yellow-dyed -yellow-dog -yellow-dotted -yellow-dun -yellow-eared -yellow-earth -yellowed -yellow-eye -yellow-eyed -yellower -yellowest -yellow-faced -yellow-feathered -yellow-fever -yellowfin -yellow-fin -yellow-fingered -yellow-finned -yellowfish -yellow-flagged -yellow-fleeced -yellow-fleshed -yellow-flowered -yellow-flowering -yellow-footed -yellow-fringed -yellow-fronted -yellow-fruited -yellow-funneled -yellow-girted -yellow-gloved -yellow-green -yellow-haired -yellowhammer -yellow-hammer -yellow-handed -yellowhead -yellow-headed -yellow-hilted -yellow-horned -yellow-hosed -yellowy -yellowing -yellowish -yellowish-amber -yellowish-brown -yellowish-colored -yellowish-gold -yellowish-gray -yellowish-green -yellowish-green-yellow -yellowish-haired -yellowishness -yellowish-orange -yellowish-pink -yellowish-red -yellowish-red-yellow -yellowish-rose -yellowish-skinned -yellowish-tan -yellowish-white -yellow-jerkined -Yellowknife -yellow-labeled -yellow-leaved -yellow-legged -yellow-legger -yellow-legginged -yellowlegs -yellow-lettered -yellowly -yellow-lit -yellow-locked -yellow-lustered -yellowman -yellow-maned -yellow-marked -yellow-necked -yellowness -yellow-nosed -yellow-olive -yellow-orange -yellow-painted -yellow-papered -yellow-pyed -yellow-pinioned -yellow-rayed -yellow-red -yellow-ringed -yellow-ringleted -yellow-ripe -yellow-robed -yellowroot -yellow-rooted -yellowrump -yellow-rumped -yellows -yellow-sallow -yellow-seal -yellow-sealed -yellowseed -yellow-shafted -yellowshank -yellow-shanked -yellowshanks -yellowshins -yellow-shouldered -yellow-skinned -yellow-skirted -yellow-speckled -yellow-splotched -yellow-spotted -yellow-sprinkled -yellow-stained -yellow-starched -Yellowstone -yellow-striped -yellowtail -yellow-tailed -yellowtails -yellowthorn -yellowthroat -yellow-throated -yellow-tinged -yellow-tinging -yellow-tinted -yellow-tipped -yellow-toed -yellowtop -yellow-tressed -yellow-tufted -yellow-vented -yellowware -yellow-washed -yellowweed -yellow-white -yellow-winged -yellowwood -yellowwort -yells -Yellville -Yelm -Yelmene -yelmer -yelp -yelped -yelper -yelpers -yelping -yelps -yelt -yelver -ye-makimono -Yemane -Yemassee -yemeless -Yemen -Yemeni -Yemenic -Yemenite -yemenites -yeming -yemschik -yemsel -IEN -Yen -Yenakiyero -Yenan -y-end -yender -Iene -Yengee -yengees -Yengeese -yeni -Yenisei -Yeniseian -yenite -yenned -yenning -yens -yenta -Yentai -yentas -yente -yentes -yentnite -Yeo -yeom -yeoman -yeomaness -yeomanette -yeomanhood -yeomanly -yeomanlike -yeomanry -yeomanries -yeomanwise -yeomen -Yeorgi -yeorling -yeowoman -yeowomen -yep -yepeleic -yepely -Ieper -yephede -yeply -ier -yer -Yerava -Yeraver -yerb -yerba -yerbal -yerbales -yerba-mate -yerbas -yercum -yerd -yere -Yerevan -Yerga -Yerington -yerk -yerked -Yerkes -yerking -Yerkovich -yerks -Yermo -yern -Ierna -Ierne -ier-oe -yertchuk -yerth -yerva -Yerwa-Maiduguri -Yerxa -yes -yese -ye'se -Yesenin -yeses -IESG -Yeshibah -Yeshiva -yeshivah -yeshivahs -yeshivas -yeshivot -yeshivoth -Yesilk -Yesilkoy -Yesima -yes-man -yes-no -yes-noer -yes-noism -Ieso -Yeso -yessed -yesses -yessing -yesso -yest -yester -yester- -yesterday -yesterdayness -yesterdays -yestereve -yestereven -yesterevening -yesteryear -yester-year -yesteryears -yestermorn -yestermorning -yestern -yesternight -yesternoon -yesterweek -yesty -yestreen -yestreens -yet -Yeta -Yetac -Yetah -yetapa -IETF -yeth -yether -yethhounds -yeti -yetis -yetlin -yetling -yett -Ietta -Yetta -Yettem -yetter -Yetti -Yetty -Yettie -yetts -yetzer -yeuk -yeuked -yeuky -yeukieness -yeuking -yeuks -Yeung -yeven -Yevette -Yevtushenko -yew -yew-besprinkled -yew-crested -yew-hedged -yew-leaved -yew-roofed -yews -yew-shaded -yew-treed -yex -yez -Yezd -Yezdi -Yezidi -Yezo -yezzy -IF -yfacks -i'faith -IFB -IFC -if-clause -Ife -ifecks -i-fere -yfere -iferous -yferre -IFF -iffy -iffier -iffiest -iffiness -iffinesses -ify -Ifill -ifint -IFIP -IFLA -IFLWU -Ifni -IFO -iform -IFR -ifreal -ifree -ifrit -IFRPS -IFS -Ifugao -Ifugaos -IG -igad -Igal -ygapo -Igara -igarape -igasuric -Igbira -Igbo -Igbos -Igdyr -Igdrasil -Ygdrasil -igelstromite -Igenia -Igerne -Ygerne -IGES -IGFET -Iggdrasil -Yggdrasil -Iggy -Iggie -ighly -IGY -Igigi -igitur -Iglau -iglesia -Iglesias -igloo -igloos -iglu -Iglulirmiut -iglus -IGM -IGMP -ign -ign. -Ignace -Ignacia -Ignacio -Ignacius -igname -ignaro -Ignatia -Ignatian -Ignatianist -ignatias -Ignatius -Ignatz -Ignatzia -ignavia -ignaw -Ignaz -Ignazio -igneoaqueous -igneous -ignescence -ignescent -igni- -ignicolist -igniferous -igniferousness -ignify -ignified -ignifies -ignifying -ignifluous -igniform -ignifuge -ignigenous -ignipotent -ignipuncture -ignis -ignitability -ignitable -ignite -ignited -igniter -igniters -ignites -ignitibility -ignitible -igniting -ignition -ignitions -ignitive -ignitor -ignitors -ignitron -ignitrons -ignivomous -ignivomousness -ignobility -ignoble -ignobleness -ignoblesse -ignobly -ignominy -ignominies -ignominious -ignominiously -ignominiousness -ignomious -ignorable -ignoramus -ignoramuses -ignorance -ignorances -ignorant -ignorantia -Ignorantine -ignorantism -ignorantist -ignorantly -ignorantness -ignoration -ignore -ignored -ignorement -ignorer -ignorers -ignores -ignoring -ignote -ignotus -Igo -I-go -Igor -Igorot -Igorots -IGP -Igraine -Iguac -iguana -iguanas -Iguania -iguanian -iguanians -iguanid -Iguanidae -iguaniform -Iguanodon -iguanodont -Iguanodontia -Iguanodontidae -iguanodontoid -Iguanodontoidea -iguanoid -Iguassu -Y-gun -Iguvine -YHA -Ihab -IHD -ihi -Ihlat -ihleite -Ihlen -IHP -ihram -ihrams -IHS -YHVH -YHWH -ii -Iy -Yi -YY -IIA -Iyang -Iyar -iiasa -Yid -Yiddish -Yiddisher -Yiddishism -Yiddishist -yids -IIE -Iyeyasu -yield -yieldable -yieldableness -yieldance -yielded -yielden -yielder -yielders -yieldy -yielding -yieldingly -yieldingness -yields -Iiette -Yigdal -yigh -IIHF -iii -Iyyar -yike -yikes -Yikirgaulit -IIL -Iila -Yila -Yildun -yill -yill-caup -yills -yilt -Yim -IIN -Yin -yince -Yinchuan -Iinde -Iinden -Yingkow -yins -yinst -Iynx -iyo -yip -yipe -yipes -yipped -yippee -yippie -yippies -yipping -yips -yird -yirds -Iyre -Yirinec -yirk -yirm -yirmilik -yirn -yirr -yirred -yirring -yirrs -yirth -yirths -yis -I-ism -IISPB -yite -Iives -iiwi -Yizkor -Ij -Ijamsville -ijithad -ijma -ijmaa -Ijo -ijolite -Ijore -IJssel -IJsselmeer -ijussite -ik -ikan -Ikara -ikary -Ikaria -ikat -Ike -ikebana -ikebanas -Ikeda -Ikey -Ikeya-Seki -ikeyness -Ikeja -Ikhnaton -Ikhwan -Ikkela -ikon -ikona -ikons -ikra -ikrar-namah -il -yl -il- -ILA -ylahayll -Ilaire -Ilam -ilama -Ilan -Ilana -ilang-ilang -ylang-ylang -Ilario -Ilarrold -Ilbert -ile -ile- -ILEA -ileac -ileal -Ileana -Ileane -Ile-de-France -ileectomy -ileitides -Ileitis -ylem -ylems -Ilene -ileo- -ileocaecal -ileocaecum -ileocecal -ileocolic -ileocolitis -ileocolostomy -ileocolotomy -ileo-ileostomy -ileon -ileosigmoidostomy -ileostomy -ileostomies -ileotomy -Ilesha -ilesite -Iletin -ileum -ileus -ileuses -Y-level -ilex -ilexes -Ilford -ILGWU -Ilha -Ilheus -Ilia -Ilya -Iliac -iliacus -Iliad -Iliadic -Iliadist -Iliadize -iliads -iliahi -ilial -Iliamna -Ilian -iliau -Ilicaceae -ilicaceous -ilicic -ilicin -Iliff -Iligan -ilima -Iline -ilio- -iliocaudal -iliocaudalis -iliococcygeal -iliococcygeus -iliococcygian -iliocostal -iliocostales -iliocostalis -iliodorsal -iliofemoral -iliohypogastric -ilioinguinal -ilio-inguinal -ilioischiac -ilioischiatic -iliolumbar -Ilion -Ilione -Ilioneus -iliopectineal -iliopelvic -ilioperoneal -iliopsoas -iliopsoatic -iliopubic -iliosacral -iliosciatic -ilioscrotal -iliospinal -iliotibial -iliotrochanteric -Ilisa -Ilysa -Ilysanthes -Ilise -Ilyse -Ilysia -Ilysiidae -ilysioid -Ilyssa -Ilissus -Ilithyia -ility -Ilium -Ilyushin -ilixanthin -ilk -Ilka -ilkane -Ilke -Ilkeston -Ilkley -ilks -Ill -ill- -I'll -Ill. -Illa -Ylla -illabile -illaborate -ill-according -ill-accoutered -ill-accustomed -ill-achieved -illachrymable -illachrymableness -ill-acquired -ill-acted -ill-adapted -ill-adventured -ill-advised -ill-advisedly -Illaenus -ill-affected -ill-affectedly -ill-affectedness -ill-agreeable -ill-agreeing -illamon -Illampu -ill-annexed -Illano -Illanun -illapsable -illapse -illapsed -illapsing -illapsive -illaqueable -illaqueate -illaqueation -ill-armed -ill-arranged -ill-assimilated -ill-assorted -ill-at-ease -illation -illations -illative -illatively -illatives -illaudable -illaudably -illaudation -illaudatory -Illawarra -ill-balanced -ill-befitting -ill-begotten -ill-behaved -ill-being -ill-beseeming -ill-bested -ill-boding -ill-born -ill-borne -ill-breathed -illbred -ill-bred -ill-built -ill-calculating -ill-cared -ill-celebrated -ill-cemented -ill-chosen -ill-clad -ill-cleckit -ill-coined -ill-colored -ill-come -ill-comer -ill-composed -ill-concealed -ill-conceived -ill-concerted -ill-conditioned -ill-conditionedness -ill-conducted -ill-considered -ill-consisting -ill-contented -ill-contenting -ill-contrived -ill-cured -ill-customed -ill-deedy -ill-defined -ill-definedness -ill-devised -ill-digested -ill-directed -ill-disciplined -ill-disposed -illdisposedness -ill-disposedness -ill-dissembled -ill-doing -ill-done -ill-drawn -ill-dressed -Illecebraceae -illecebration -illecebrous -illeck -illect -ill-educated -Ille-et-Vilaine -ill-effaceable -illegal -illegalisation -illegalise -illegalised -illegalising -illegality -illegalities -illegalization -illegalize -illegalized -illegalizing -illegally -illegalness -illegals -illegibility -illegibilities -illegible -illegibleness -illegibly -illegitimacy -illegitimacies -illegitimate -illegitimated -illegitimately -illegitimateness -illegitimating -illegitimation -illegitimatise -illegitimatised -illegitimatising -illegitimatize -illegitimatized -illegitimatizing -illeism -illeist -Illene -ill-equipped -iller -ill-erected -Illertissen -illess -illest -illeviable -ill-executed -ill-famed -ill-fardeled -illfare -ill-faring -ill-faringly -ill-fashioned -ill-fated -ill-fatedness -ill-favor -ill-favored -ill-favoredly -ill-favoredness -ill-favoured -ill-favouredly -ill-favouredness -ill-featured -ill-fed -ill-fitted -ill-fitting -ill-flavored -ill-foreseen -ill-formed -ill-found -ill-founded -ill-friended -ill-furnished -ill-gauged -ill-gendered -ill-given -ill-got -ill-gotten -ill-governed -ill-greeting -ill-grounded -illguide -illguided -illguiding -ill-hap -ill-headed -ill-health -ill-housed -illhumor -ill-humor -illhumored -ill-humored -ill-humoredly -ill-humoredness -ill-humoured -ill-humouredly -ill-humouredness -illy -Illia -illiberal -illiberalise -illiberalism -illiberality -illiberalize -illiberalized -illiberalizing -illiberally -illiberalness -Illich -illicit -illicitly -illicitness -Illicium -Illyes -illigation -illighten -ill-imagined -Illimani -illimitability -illimitable -illimitableness -illimitably -illimitate -illimitation -illimited -illimitedly -illimitedness -ill-informed -illing -illinition -illinium -illiniums -Illinoian -Illinois -Illinoisan -Illinoisian -ill-intentioned -ill-invented -ill-yoked -Illiopolis -Illipe -illipene -illiquation -illiquid -illiquidity -illiquidly -Illyria -Illyrian -Illyric -Illyric-anatolian -Illyricum -Illyrius -illish -illision -illite -illiteracy -illiteracies -illiteral -illiterate -illiterately -illiterateness -illiterates -illiterati -illiterature -illites -illitic -illium -ill-joined -ill-judge -ill-judged -ill-judging -ill-kempt -ill-kept -ill-knotted -ill-less -ill-lighted -ill-limbed -ill-lit -ill-lived -ill-looked -ill-looking -ill-lookingness -ill-made -ill-manageable -ill-managed -ill-mannered -ill-manneredly -illmanneredness -ill-manneredness -ill-mannerly -ill-marked -ill-matched -ill-mated -ill-meant -ill-met -ill-minded -ill-mindedly -ill-mindedness -illnature -ill-natured -illnaturedly -ill-naturedly -ill-naturedness -ill-neighboring -illness -illnesses -illness's -ill-noised -ill-nurtured -ill-observant -illocal -illocality -illocally -ill-occupied -illocution -illogic -illogical -illogicality -illogicalities -illogically -illogicalness -illogician -illogicity -illogics -illoyal -illoyalty -ill-omened -ill-omenedness -Illona -Illoricata -illoricate -illoricated -ill-paid -ill-perfuming -ill-persuaded -ill-placed -ill-pleased -ill-proportioned -ill-provided -ill-qualified -ill-regulated -ill-requite -ill-requited -ill-resounding -ill-rewarded -ill-roasted -ill-ruled -ills -ill-satisfied -ill-savored -ill-scented -ill-seasoned -ill-seen -ill-served -ill-set -ill-shaped -ill-smelling -ill-sorted -ill-sounding -ill-spent -ill-spun -ill-starred -ill-strung -ill-succeeding -ill-suited -ill-suiting -ill-supported -ill-tasted -ill-taught -illtempered -ill-tempered -ill-temperedly -ill-temperedness -illth -ill-time -ill-timed -ill-tongued -ill-treat -ill-treated -ill-treater -illtreatment -ill-treatment -ill-tuned -ill-turned -illucidate -illucidation -illucidative -illude -illuded -illudedly -illuder -illuding -illume -illumed -illumer -illumes -illuminability -illuminable -illuminance -illuminant -illuminate -illuminated -illuminates -Illuminati -illuminating -illuminatingly -illumination -illuminational -illuminations -illuminatism -illuminatist -illuminative -illuminato -illuminator -illuminatory -illuminators -illuminatus -illumine -illumined -illuminee -illuminer -illumines -illuming -illumining -Illuminism -illuminist -Illuministic -Illuminize -illuminometer -illuminous -illumonate -ill-understood -illupi -illure -illurement -illus -ill-usage -ill-use -ill-used -illusible -ill-using -illusion -illusionable -illusional -illusionary -illusioned -illusionism -illusionist -illusionistic -illusionists -illusion-proof -illusions -illusion's -illusive -illusively -illusiveness -illusor -illusory -illusorily -illusoriness -illust -illust. -illustrable -illustratable -illustrate -illustrated -illustrates -illustrating -illustration -illustrational -illustrations -illustrative -illustratively -illustrator -illustratory -illustrators -illustrator's -illustratress -illustre -illustricity -illustrious -illustriously -illustriousness -illustriousnesses -illustrissimo -illustrous -illutate -illutation -illuvia -illuvial -illuviate -illuviated -illuviating -illuviation -illuvium -illuviums -illuvivia -ill-ventilated -ill-weaved -ill-wedded -ill-willed -ill-willer -ill-willy -ill-willie -ill-willing -ill-wish -ill-wisher -ill-won -ill-worded -ill-written -ill-wrought -Ilmarinen -Ilmen -ilmenite -ilmenites -ilmenitite -ilmenorutile -ILO -Ilocano -Ilocanos -Iloilo -Ilokano -Ilokanos -Iloko -Ilona -Ilone -Ilongot -Ilonka -Ilorin -ilot -Ilotycin -Ilowell -ILP -Ilpirra -ILS -Ilsa -Ilse -Ilsedore -ilth -ILV -ilvaite -Ilwaco -Ilwain -ILWU -IM -ym -im- -I'm -Ima -Yma -image -imageable -image-breaker -image-breaking -imaged -imageless -image-maker -imagen -imager -imagery -imagerial -imagerially -imageries -imagers -images -image-worship -imagilet -imaginability -imaginable -imaginableness -imaginably -imaginal -imaginant -imaginary -imaginaries -imaginarily -imaginariness -imaginate -imaginated -imaginating -imagination -imaginational -imaginationalism -imagination-proof -imaginations -imagination's -imaginative -imaginatively -imaginativeness -imaginator -imagine -imagined -imaginer -imaginers -imagines -imaging -imagining -imaginings -imaginist -imaginous -imagism -imagisms -imagist -imagistic -imagistically -imagists -imagnableness -imago -imagoes -imagos -Imalda -imam -imamah -imamate -imamates -imambara -imambarah -imambarra -imamic -Imamite -imams -imamship -Iman -imanlaut -Imantophyllum -IMAP -IMAP3 -IMarE -imaret -imarets -IMAS -imaum -imaumbarah -imaums -imb- -imbalance -imbalances -imbalm -imbalmed -imbalmer -imbalmers -imbalming -imbalmment -imbalms -imban -imband -imbannered -imbarge -imbark -imbarkation -imbarked -imbarking -imbarkment -imbarks -imbarn -imbase -imbased -imbastardize -imbat -imbathe -imbauba -imbe -imbecile -imbecilely -imbeciles -imbecilic -imbecilitate -imbecilitated -imbecility -imbecilities -imbed -imbedded -imbedding -imbeds -imbellic -imbellious -imber -imberbe -imbesel -imbibe -imbibed -imbiber -imbibers -imbibes -imbibing -imbibition -imbibitional -imbibitions -imbibitory -imbirussu -imbitter -imbittered -imbitterer -imbittering -imbitterment -imbitters -imblaze -imblazed -imblazes -imblazing -Imbler -Imboden -imbody -imbodied -imbodies -imbodying -imbodiment -imbolden -imboldened -imboldening -imboldens -imbolish -imbondo -imbonity -imborder -imbordure -imborsation -imboscata -imbosk -imbosom -imbosomed -imbosoming -imbosoms -imbower -imbowered -imbowering -imbowers -imbracery -imbraceries -imbranch -imbrangle -imbrangled -imbrangling -imbreathe -imbred -imbreviate -imbreviated -imbreviating -imbrex -imbricate -imbricated -imbricately -imbricating -imbrication -imbrications -imbricative -imbricato- -imbrices -imbrier -Imbrium -Imbrius -imbrocado -imbroccata -imbroglio -imbroglios -imbroin -Imbros -imbrown -imbrowned -imbrowning -imbrowns -imbrue -imbrued -imbruement -imbrues -imbruing -imbrute -imbruted -imbrutement -imbrutes -imbruting -imbu -imbue -imbued -imbuement -imbues -imbuia -imbuing -imburse -imbursed -imbursement -imbursing -imbute -IMC -YMCA -YMCathA -imcnt -IMCO -IMD -imdtly -Imelda -Imelida -imelle -Imena -Imer -Imerina -Imeritian -IMF -YMHA -IMHO -imi -imid -imidazol -imidazole -imidazolyl -imide -imides -imidic -imido -imidogen -imids -iminazole -imine -imines -imino -iminohydrin -iminourea -Imipramine -Ymir -imit -imit. -imitability -imitable -imitableness -imitancy -imitant -imitate -imitated -imitatee -imitates -imitating -imitation -imitational -imitationist -imitation-proof -imitations -imitative -imitatively -imitativeness -imitator -imitators -imitatorship -imitatress -imitatrix -Imitt -Imlay -Imlaystown -Imler -IMM -immaculacy -immaculance -Immaculata -immaculate -immaculately -immaculateness -immailed -immalleable -immanacle -immanacled -immanacling -immanation -immane -immanely -immanence -immanency -immaneness -immanent -immanental -immanentism -immanentist -immanentistic -immanently -Immanes -immanifest -immanifestness -immanity -immantle -immantled -immantling -Immanuel -immarble -immarcescible -immarcescibly -immarcibleness -immarginate -immartial -immask -immatchable -immatchless -immatereality -immaterial -immaterialise -immaterialised -immaterialising -immaterialism -immaterialist -immaterialistic -immateriality -immaterialities -immaterialization -immaterialize -immaterialized -immaterializing -immaterially -immaterialness -immaterials -immateriate -immatriculate -immatriculation -immature -immatured -immaturely -immatureness -immatures -immaturity -immaturities -immeability -immeasurability -immeasurable -immeasurableness -immeasurably -immeasured -immechanical -immechanically -immediacy -immediacies -immedial -immediate -immediately -immediateness -immediatism -immediatist -immediatly -immedicable -immedicableness -immedicably -immelmann -immelodious -immember -immemorable -immemorial -immemorially -immense -immensely -immenseness -immenser -immensest -immensible -immensity -immensities -immensittye -immensive -immensurability -immensurable -immensurableness -immensurate -immerd -immerge -immerged -immergence -immergent -immerges -immerging -immerit -immerited -immeritorious -immeritoriously -immeritous -immerse -immersed -immersement -immerses -immersible -immersing -immersion -immersionism -immersionist -immersions -immersive -immesh -immeshed -immeshes -immeshing -immethodic -immethodical -immethodically -immethodicalness -immethodize -immetrical -immetrically -immetricalness -immeubles -immew -immi -immy -immies -immigrant -immigrants -immigrant's -immigrate -immigrated -immigrates -immigrating -immigration -immigrational -immigrations -immigrator -immigratory -immind -imminence -imminences -imminency -imminent -imminently -imminentness -Immingham -immingle -immingled -immingles -immingling -imminute -imminution -immis -immiscibility -immiscible -immiscibly -immiss -immission -immit -immitigability -immitigable -immitigableness -immitigably -immittance -immitted -immix -immixable -immixed -immixes -immixing -immixt -immixting -immixture -immobile -immobiles -immobilia -immobilisation -immobilise -immobilised -immobilising -immobilism -immobility -immobilities -immobilization -immobilize -immobilized -immobilizer -immobilizes -immobilizing -immoderacy -immoderacies -immoderate -immoderately -immoderateness -immoderation -immodest -immodesty -immodesties -immodestly -immodish -immodulated -Immokalee -immolate -immolated -immolates -immolating -immolation -immolations -immolator -immoment -immomentous -immonastered -immoral -immoralise -immoralised -immoralising -immoralism -immoralist -immorality -immoralities -immoralize -immoralized -immoralizing -immorally -immorigerous -immorigerousness -immortability -immortable -immortal -immortalisable -immortalisation -immortalise -immortalised -immortaliser -immortalising -immortalism -immortalist -immortality -immortalities -immortalizable -immortalization -immortalize -immortalized -immortalizer -immortalizes -immortalizing -immortally -immortalness -Immortals -immortalship -immortelle -immortification -immortified -immote -immotile -immotility -immotioned -immotive -immound -immov -immovability -immovabilities -immovable -immovableness -immovables -immovably -immoveability -immoveable -immoveableness -immoveables -immoveably -immoved -immun -immund -immundicity -immundity -immune -immunes -immunisation -immunise -immunised -immuniser -immunises -immunising -immunist -immunity -immunities -immunity's -immunization -immunizations -immunize -immunized -immunizer -immunizes -immunizing -immuno- -immunoassay -immunochemical -immunochemically -immunochemistry -immunodiffusion -immunoelectrophoresis -immunoelectrophoretic -immunoelectrophoretically -immunofluorescence -immunofluorescent -immunogen -immunogenesis -immunogenetic -immunogenetical -immunogenetically -immunogenetics -immunogenic -immunogenically -immunogenicity -immunoglobulin -immunohematology -immunohematologic -immunohematological -immunol -immunology -immunologic -immunological -immunologically -immunologies -immunologist -immunologists -immunopathology -immunopathologic -immunopathological -immunopathologist -immunoreaction -immunoreactive -immunoreactivity -immunosuppressant -immunosuppressants -immunosuppression -immunosuppressive -immunotherapy -immunotherapies -immunotoxin -immuration -immure -immured -immurement -immures -immuring -immusical -immusically -immutability -immutabilities -immutable -immutableness -immutably -immutate -immutation -immute -immutilate -immutual -Imnaha -Imo -Imogen -Imogene -Imojean -Imola -Imolinda -imonium -IMP -Imp. -impacability -impacable -impack -impackment -IMPACT -impacted -impacter -impacters -impactful -impacting -impaction -impactionize -impactite -impactive -impactment -impactor -impactors -impactor's -impacts -impactual -impages -impayable -impaint -impainted -impainting -impaints -impair -impairable -impaired -impairer -impairers -impairing -impairment -impairments -impairs -impala -impalace -impalas -impalatable -impale -impaled -impalement -impalements -impaler -impalers -impales -impaling -impall -impallid -impalm -impalmed -impalpability -impalpable -impalpably -impalsy -impaludism -impanate -impanated -impanation -impanator -impane -impanel -impaneled -impaneling -impanelled -impanelling -impanelment -impanels -impapase -impapyrate -impapyrated -impar -imparadise -imparadised -imparadising -imparalleled -imparasitic -impardonable -impardonably -imparidigitate -imparipinnate -imparisyllabic -imparity -imparities -impark -imparkation -imparked -imparking -imparks -imparl -imparlance -imparled -imparling -imparsonee -impart -impartability -impartable -impartance -impartation -imparted -imparter -imparters -impartial -impartialism -impartialist -impartiality -impartialities -impartially -impartialness -impartibilibly -impartibility -impartible -impartibly -imparticipable -imparting -impartite -impartive -impartivity -impartment -imparts -impassability -impassable -impassableness -impassably -impasse -impasses -impassibilibly -impassibility -impassible -impassibleness -impassibly -impassion -impassionable -impassionate -impassionately -impassioned -impassionedly -impassionedness -impassioning -impassionment -impassive -impassively -impassiveness -impassivity -impassivities -impastation -impaste -impasted -impastes -impasting -impasto -impastoed -impastos -impasture -impaternate -impatible -impatience -impatiences -impatiency -Impatiens -impatient -Impatientaceae -impatientaceous -impatiently -impatientness -impatronize -impave -impavid -impavidity -impavidly -impawn -impawned -impawning -impawns -impeach -impeachability -impeachable -impeachableness -impeached -impeacher -impeachers -impeaches -impeaching -impeachment -impeachments -impearl -impearled -impearling -impearls -impeccability -impeccable -impeccableness -impeccably -impeccance -impeccancy -impeccant -impeccunious -impectinate -impecuniary -impecuniosity -impecunious -impecuniously -impecuniousness -impecuniousnesses -imped -impedance -impedances -impedance's -impede -impeded -impeder -impeders -impedes -impedibility -impedible -impedient -impediment -impedimenta -impedimental -impedimentary -impediments -impediment's -impeding -impedingly -impedit -impedite -impedition -impeditive -impedometer -impedor -impeevish -Impeyan -impel -impelled -impellent -impeller -impellers -impelling -impellor -impellors -impels -impen -impend -impended -impendence -impendency -impendent -impending -impendingly -impends -impenetrability -impenetrabilities -impenetrable -impenetrableness -impenetrably -impenetrate -impenetration -impenetrative -impenitence -impenitences -impenitency -impenitent -impenitently -impenitentness -impenitible -impenitibleness -impennate -Impennes -impennous -impent -impeople -imper -imper. -imperance -imperant -Imperata -imperate -imperation -imperatival -imperativally -imperative -imperatively -imperativeness -imperatives -imperator -imperatory -imperatorial -imperatorially -imperatorian -imperatorin -imperatorious -imperatorship -imperatrice -imperatrix -imperceivable -imperceivableness -imperceivably -imperceived -imperceiverant -imperceptibility -imperceptible -imperceptibleness -imperceptibly -imperception -imperceptive -imperceptiveness -imperceptivity -impercipience -impercipient -imperdible -imperence -imperent -imperf -imperf. -imperfect -imperfectability -imperfected -imperfectibility -imperfectible -imperfection -imperfections -imperfection's -imperfectious -imperfective -imperfectly -imperfectness -imperfects -imperforable -Imperforata -imperforate -imperforated -imperforates -imperforation -imperformable -impery -Imperia -Imperial -imperialin -imperialine -imperialisation -imperialise -imperialised -imperialising -imperialism -imperialist -imperialistic -imperialistically -imperialists -imperialist's -imperiality -imperialities -imperialization -imperialize -imperialized -imperializing -imperially -imperialness -imperials -imperialty -imperii -imperil -imperiled -imperiling -imperilled -imperilling -imperilment -imperilments -imperils -imperious -imperiously -imperiousness -imperish -imperishability -imperishable -imperishableness -imperishably -imperite -imperium -imperiums -impermanence -impermanency -impermanent -impermanently -impermeability -impermeabilities -impermeabilization -impermeabilize -impermeable -impermeableness -impermeably -impermeated -impermeator -impermissibility -impermissible -impermissibly -impermixt -impermutable -imperperia -impers -impers. -imperscriptible -imperscrutable -imperseverant -impersonable -impersonal -impersonalisation -impersonalise -impersonalised -impersonalising -impersonalism -impersonality -impersonalities -impersonalization -impersonalize -impersonalized -impersonalizing -impersonally -impersonate -impersonated -impersonates -impersonating -impersonation -impersonations -impersonative -impersonator -impersonators -impersonatress -impersonatrix -impersonify -impersonification -impersonization -impersonize -imperspicable -imperspicuity -imperspicuous -imperspirability -imperspirable -impersuadability -impersuadable -impersuadableness -impersuasibility -impersuasible -impersuasibleness -impersuasibly -impertinacy -impertinence -impertinences -impertinency -impertinencies -impertinent -impertinently -impertinentness -impertransible -imperturbability -imperturbable -imperturbableness -imperturbably -imperturbation -imperturbed -imperverse -impervertible -impervestigable -imperviability -imperviable -imperviableness -impervial -impervious -imperviously -imperviousness -impest -impestation -impester -impeticos -impetiginous -impetigo -impetigos -impetition -impetrable -impetrate -impetrated -impetrating -impetration -impetrative -impetrator -impetratory -impetre -impetulant -impetulantly -impetuosity -impetuosities -impetuoso -impetuous -impetuousity -impetuousities -impetuously -impetuousness -impeturbability -impetus -impetuses -impf -impf. -Imphal -imphee -imphees -impi -impy -impicture -impierce -impierceable -impies -impiety -impieties -impignorate -impignorated -impignorating -impignoration -imping -impinge -impinged -impingement -impingements -impingence -impingent -impinger -impingers -impinges -impinging -impings -impinguate -impious -impiously -impiousness -impis -impish -impishly -impishness -impishnesses -impiteous -impitiably -implacability -implacabilities -implacable -implacableness -implacably -implacement -implacental -Implacentalia -implacentate -implant -implantable -implantation -implanted -implanter -implanting -implants -implastic -implasticity -implate -implausibility -implausibilities -implausible -implausibleness -implausibly -impleach -implead -impleadable -impleaded -impleader -impleading -impleads -impleasing -impledge -impledged -impledges -impledging -implement -implementable -implemental -implementation -implementational -implementations -implementation's -implemented -implementer -implementers -implementiferous -implementing -implementor -implementors -implementor's -implements -implete -impletion -impletive -implex -imply -impliability -impliable -impliably -implial -implicant -implicants -implicant's -implicate -implicated -implicately -implicateness -implicates -implicating -implication -implicational -implications -implicative -implicatively -implicativeness -implicatory -implicit -implicity -implicitly -implicitness -implied -impliedly -impliedness -implies -implying -impling -implode -imploded -implodent -implodes -imploding -implorable -imploration -implorations -implorator -imploratory -implore -implored -implorer -implorers -implores -imploring -imploringly -imploringness -implosion -implosions -implosive -implosively -implume -implumed -implunge -impluvia -impluvium -impocket -impofo -impoison -impoisoner -impolarily -impolarizable -impolder -impolicy -impolicies -impolished -impolite -impolitely -impoliteness -impolitic -impolitical -impolitically -impoliticalness -impoliticly -impoliticness -impollute -imponderabilia -imponderability -imponderable -imponderableness -imponderables -imponderably -imponderous -impone -imponed -imponent -impones -imponing -impoor -impopular -impopularly -imporosity -imporous -import -importability -importable -importableness -importably -importance -importancy -important -importantly -importation -importations -imported -importee -importer -importers -importing -importless -importment -importray -importraiture -imports -importunable -importunacy -importunance -importunate -importunately -importunateness -importunator -importune -importuned -importunely -importunement -importuner -importunes -importuning -importunite -importunity -importunities -imposable -imposableness -imposal -impose -imposed -imposement -imposer -imposers -imposes -imposing -imposingly -imposingness -imposition -impositional -impositions -imposition's -impositive -impossibilia -impossibilification -impossibilism -impossibilist -impossibilitate -impossibility -impossibilities -impossible -impossibleness -impossibly -impost -imposted -imposter -imposterous -imposters -imposthumate -imposthume -imposting -impostor -impostorism -impostors -impostor's -impostorship -impostress -impostrix -impostrous -imposts -impostumate -impostumation -impostume -imposture -impostures -impostury -imposturism -imposturous -imposure -impot -impotable -impotence -impotences -impotency -impotencies -impotent -impotently -impotentness -impotents -impotionate -impound -impoundable -impoundage -impounded -impounder -impounding -impoundment -impoundments -impounds -impoverish -impoverished -impoverisher -impoverishes -impoverishing -impoverishment -impoverishments -impower -impowered -impowering -impowers -imp-pole -impracticability -impracticable -impracticableness -impracticably -impractical -impracticality -impracticalities -impractically -impracticalness -imprasa -imprecant -imprecate -imprecated -imprecates -imprecating -imprecation -imprecations -imprecator -imprecatory -imprecatorily -imprecators -imprecise -imprecisely -impreciseness -imprecisenesses -imprecision -imprecisions -impredicability -impredicable -impreg -impregability -impregabilities -impregable -impregn -impregnability -impregnable -impregnableness -impregnably -impregnant -impregnate -impregnated -impregnates -impregnating -impregnation -impregnations -impregnative -impregnator -impregnatory -impregned -impregning -impregns -imprejudicate -imprejudice -impremeditate -imprenable -impreparation -impresa -impresari -impresario -impresarios -impresas -imprescience -imprescribable -imprescriptibility -imprescriptible -imprescriptibly -imprese -impreses -impress -impressa -impressable -impressari -impressario -impressed -impressedly -impresser -impressers -impresses -impressibility -impressible -impressibleness -impressibly -impressing -impression -impressionability -impressionable -impressionableness -impressionably -impressional -impressionalist -impressionality -impressionally -impressionary -impressionis -impressionism -impressionist -impressionistic -impressionistically -impressionists -impressionless -impressions -impression's -impressive -impressively -impressiveness -impressivenesses -impressment -impressments -impressor -impressure -imprest -imprestable -imprested -impresting -imprests -imprevalency -impreventability -impreventable -imprevisibility -imprevisible -imprevision -imprevu -imprimatur -imprimatura -imprimaturs -imprime -impriment -imprimery -imprimis -imprimitive -imprimitivity -imprint -imprinted -imprinter -imprinters -imprinting -imprints -imprison -imprisonable -imprisoned -imprisoner -imprisoning -imprisonment -imprisonments -imprisonment's -imprisons -improbability -improbabilities -improbabilize -improbable -improbableness -improbably -improbate -improbation -improbative -improbatory -improbity -improcreant -improcurability -improcurable -improducible -improduction -improficience -improficiency -improfitable -improgressive -improgressively -improgressiveness -improlific -improlificate -improlificical -imprompt -impromptitude -impromptu -impromptuary -impromptuist -impromptus -improof -improper -improperation -Improperia -improperly -improperness -impropitious -improportion -impropry -impropriate -impropriated -impropriating -impropriation -impropriator -impropriatrice -impropriatrix -impropriety -improprieties -improprium -improsperity -improsperous -improv -improvability -improvable -improvableness -improvably -improve -improved -improvement -improvements -improver -improvers -improvership -improves -improvided -improvidence -improvidences -improvident -improvidentially -improvidently -improving -improvingly -improvisate -improvisation -improvisational -improvisations -improvisation's -improvisatize -improvisator -improvisatore -improvisatory -improvisatorial -improvisatorially -improvisatorize -improvisatrice -improvise -improvised -improvisedly -improviser -improvisers -improvises -improvising -improvision -improviso -improvisor -improvisors -improvs -improvvisatore -improvvisatori -imprudence -imprudences -imprudency -imprudent -imprudential -imprudently -imprudentness -imps -impship -impsonite -impuberal -impuberate -impuberty -impubic -impudence -impudences -impudency -impudencies -impudent -impudently -impudentness -impudicity -impugn -impugnability -impugnable -impugnation -impugned -impugner -impugners -impugning -impugnment -impugns -impuissance -impuissant -impulse -impulsed -impulses -impulsing -impulsion -impulsions -impulsive -impulsively -impulsiveness -impulsivenesses -impulsivity -impulsor -impulsory -impunctate -impunctual -impunctuality -impune -impunely -impunible -impunibly -impunity -impunities -impunitive -impuration -impure -impurely -impureness -impurify -impuritan -impuritanism -impurity -impurities -impurity's -impurple -imput -imputability -imputable -imputableness -imputably -imputation -imputations -imputative -imputatively -imputativeness -impute -imputed -imputedly -imputer -imputers -imputes -imputing -imputrescence -imputrescibility -imputrescible -imputrid -imputting -impv -impv. -Imray -Imre -Imroz -IMS -IMSA -imshi -IMSL -IMSO -imsonic -IMSVS -IMT -Imtiaz -IMTS -imu -IMunE -imvia -in -yn -in- -in. -ina -inability -inabilities -inable -inabordable -inabstinence -inabstracted -inabusively -inaccentuated -inaccentuation -inacceptable -inaccessibility -inaccessibilities -inaccessible -inaccessibleness -inaccessibly -inaccordance -inaccordancy -inaccordant -inaccordantly -inaccuracy -inaccuracies -inaccurate -inaccurately -inaccurateness -inachid -Inachidae -inachoid -Inachus -inacquaintance -inacquiescent -inact -inactinic -inaction -inactionist -inactions -inactivate -inactivated -inactivates -inactivating -inactivation -inactivations -inactive -inactively -inactiveness -inactivity -inactivities -inactuate -inactuation -inadaptability -inadaptable -inadaptation -inadaptive -inadept -inadeptly -inadeptness -inadequacy -inadequacies -inadequate -inadequately -inadequateness -inadequation -inadequative -inadequatively -inadherent -inadhesion -inadhesive -inadjustability -inadjustable -inadmissability -inadmissable -inadmissibility -inadmissible -inadmissibly -INADS -inadulterate -inadventurous -inadvertant -inadvertantly -inadvertence -inadvertences -inadvertency -inadvertencies -inadvertent -inadvertently -inadvertisement -inadvisability -inadvisabilities -inadvisable -inadvisableness -inadvisably -inadvisedly -inae -inaesthetic -inaffability -inaffable -inaffably -inaffectation -inaffected -inagglutinability -inagglutinable -inaggressive -inagile -inaidable -inaidible -inaja -inalacrity -inalienability -inalienabilities -inalienable -inalienableness -inalienably -inalimental -inalterability -inalterable -inalterableness -inalterably -ynambu -inamia -inamissibility -inamissible -inamissibleness -inamorata -inamoratas -inamorate -inamoration -inamorato -inamoratos -inamour -inamovability -inamovable -Ynan -in-and-in -in-and-out -in-and-outer -inane -inanely -inaneness -inaner -inaners -inanes -inanest -inanga -inangular -inangulate -inanimadvertence -inanimate -inanimated -inanimately -inanimateness -inanimatenesses -inanimation -inanity -inanities -inanition -inanitions -Inanna -inantherate -inapathy -inapostate -inapparent -inapparently -inappealable -inappeasable -inappellability -inappellable -inappendiculate -inapperceptible -inappertinent -inappetence -inappetency -inappetent -inappetible -inapplicability -inapplicable -inapplicableness -inapplicably -inapplication -inapposite -inappositely -inappositeness -inappositenesses -inappreciability -inappreciable -inappreciably -inappreciation -inappreciative -inappreciatively -inappreciativeness -inapprehensibility -inapprehensible -inapprehensibly -inapprehension -inapprehensive -inapprehensively -inapprehensiveness -inapproachability -inapproachable -inapproachably -inappropriable -inappropriableness -inappropriate -inappropriately -inappropriateness -inappropriatenesses -inapropos -inapt -inaptitude -inaptly -inaptness -inaquate -inaqueous -inarable -inarch -inarched -inarches -inarching -inarculum -inarguable -inarguably -Inari -inark -inarm -inarmed -inarming -inarms -inarticulacy -Inarticulata -inarticulate -inarticulated -inarticulately -inarticulateness -inarticulation -inartificial -inartificiality -inartificially -inartificialness -inartistic -inartistical -inartisticality -inartistically -inasmuch -inassimilable -inassimilation -inassuageable -inattackable -inattention -inattentions -inattentive -inattentively -inattentiveness -inattentivenesses -inaudibility -inaudible -inaudibleness -inaudibly -inaugur -inaugural -inaugurals -inaugurate -inaugurated -inaugurates -inaugurating -inauguration -inaugurations -inaugurative -inaugurator -inauguratory -inaugurer -inaunter -inaurate -inauration -inauspicate -inauspicious -inauspiciously -inauspiciousness -inauthentic -inauthenticity -inauthoritative -inauthoritativeness -Inavale -inaxon -inbardge -inbassat -inbbred -inbd -inbe -inbeaming -in-beaming -inbearing -inbeing -in-being -inbeings -inbending -inbent -in-between -inbetweener -inby -inbye -inbirth -inbits -inblow -inblowing -inblown -inboard -inboard-rigged -inboards -inbody -inbond -in-book -inborn -inbound -inbounds -inbow -inbowed -inbread -inbreak -inbreaking -inbreath -inbreathe -inbreathed -inbreather -inbreathing -inbred -inbreds -inbreed -inbreeder -inbreeding -in-breeding -inbreedings -inbreeds -inbring -inbringer -inbringing -inbrought -inbuilt -in-built -inburning -inburnt -inburst -inbursts -inbush -INC -Inc. -Inca -Incabloc -incage -incaged -incages -incaging -Incaic -incalculability -incalculable -incalculableness -incalculably -incalendared -incalescence -incalescency -incalescent -in-calf -incaliculate -incalver -incalving -incameration -incamp -Incan -incandent -incandesce -incandesced -incandescence -incandescences -incandescency -incandescent -incandescently -incandescing -incanescent -incanous -incant -incantation -incantational -incantations -incantator -incantatory -incanted -incanton -incants -incapability -incapabilities -incapable -incapableness -incapably -incapacious -incapaciousness -incapacitant -incapacitate -incapacitated -incapacitates -incapacitating -incapacitation -incapacitator -incapacity -incapacities -Incaparina -incapsulate -incapsulated -incapsulating -incapsulation -incaptivate -in-car -incarcerate -incarcerated -incarcerates -incarcerating -incarceration -incarcerations -incarcerative -incarcerator -incarcerators -incardinate -incardinated -incardinating -incardination -Incarial -incarmined -incarn -incarnadine -incarnadined -incarnadines -incarnadining -incarnalise -incarnalised -incarnalising -incarnalize -incarnalized -incarnalizing -incarnant -incarnate -incarnated -incarnates -incarnating -Incarnation -incarnational -incarnationist -incarnations -incarnation's -incarnative -incarve -Incarvillea -incas -incase -incased -incasement -incases -incasing -incask -incast -incastellate -incastellated -incatenate -incatenation -incautelous -incaution -incautious -incautiously -incautiousness -incavate -incavated -incavation -incave -incavern -incavo -incede -incedingly -incelebrity -incend -incendiary -incendiaries -incendiarism -incendiarist -incendiarize -incendiarized -incendious -incendium -incendivity -incensation -incense -incense-breathing -incensed -incenseless -incensement -incenser -incenses -incensing -incension -incensive -incensor -incensory -incensories -incensurable -incensurably -incenter -incentive -incentively -incentives -incentive's -incentor -incentre -incept -incepted -incepting -inception -inceptions -inceptive -inceptively -inceptor -inceptors -incepts -incerate -inceration -incertain -incertainty -incertitude -incessable -incessably -incessancy -incessant -incessantly -incessantness -incession -incest -incests -incestuous -incestuously -incestuousness -incgrporate -inch -inchain -inchamber -inchangeable -inchant -incharitable -incharity -inchase -inchastity -inch-deep -inched -Inchelium -incher -inches -inchest -inch-high -inching -inchling -inch-long -inchmeal -inchoacy -inchoant -inchoate -inchoated -inchoately -inchoateness -inchoating -inchoation -inchoative -inchoatively -Inchon -inchpin -inch-pound -inch-thick -inch-ton -inchurch -inch-wide -inchworm -inchworms -incicurable -incide -incidence -incidences -incidency -incident -incidental -incidentalist -incidentally -incidentalness -incidentals -incidentless -incidently -incidents -incident's -incienso -incinerable -incinerate -incinerated -incinerates -incinerating -incineration -incinerations -incinerator -incinerators -incipience -incipiency -incipiencies -incipient -incipiently -incipit -incipits -incipitur -incircle -incirclet -incircumscriptible -incircumscription -incircumspect -incircumspection -incircumspectly -incircumspectness -incisal -incise -incised -incisely -incises -incisiform -incising -incision -incisions -incisive -incisively -incisiveness -inciso- -incisor -incisory -incisorial -incisors -incysted -incisura -incisural -incisure -incisures -incitability -incitable -incitamentum -incitant -incitants -incitate -incitation -incitations -incitative -incite -incited -incitement -incitements -inciter -inciters -incites -inciting -incitingly -incitive -incito-motor -incitory -incitress -incivic -incivil -incivility -incivilities -incivilization -incivilly -incivism -incl -incl. -inclamation -inclasp -inclasped -inclasping -inclasps -inclaudent -inclavate -inclave -incle -in-clearer -in-clearing -inclemency -inclemencies -inclement -inclemently -inclementness -in-clerk -inclinable -inclinableness -inclination -inclinational -inclinations -inclination's -inclinator -inclinatory -inclinatorily -inclinatorium -incline -inclined -incliner -incliners -inclines -inclining -inclinograph -inclinometer -inclip -inclipped -inclipping -inclips -incloister -inclose -inclosed -incloser -inclosers -incloses -inclosing -inclosure -inclosures -incloude -includable -include -included -includedness -includer -includes -includible -including -inclusa -incluse -inclusion -inclusion-exclusion -inclusionist -inclusions -inclusion's -inclusive -inclusively -inclusiveness -inclusory -inclusus -incoached -incoacted -incoagulable -incoalescence -incocted -incoercible -incoexistence -incoffin -incog -incogent -incogitability -incogitable -incogitance -incogitancy -incogitant -incogitantly -incogitative -incognita -incognite -incognitive -Incognito -incognitos -incognizability -incognizable -incognizance -incognizant -incognoscent -incognoscibility -incognoscible -incogs -incoherence -incoherences -incoherency -incoherencies -incoherent -incoherentific -incoherently -incoherentness -incohering -incohesion -incohesive -incoincidence -incoincident -incolant -incolumity -incomber -incombining -incombustibility -incombustible -incombustibleness -incombustibly -incombustion -income -incomeless -incomer -incomers -incomes -income-tax -incoming -incomings -incommend -incommensurability -incommensurable -incommensurableness -incommensurably -incommensurate -incommensurately -incommensurateness -incommiscibility -incommiscible -incommixed -incommodate -incommodation -incommode -incommoded -incommodement -incommodes -incommoding -incommodious -incommodiously -incommodiousness -incommodity -incommodities -incommunicability -incommunicable -incommunicableness -incommunicably -incommunicado -incommunicated -incommunicative -incommunicatively -incommunicativeness -incommutability -incommutable -incommutableness -incommutably -incompact -incompacted -incompactly -incompactness -incomparability -incomparable -incomparableness -incomparably -incompared -incompassion -incompassionate -incompassionately -incompassionateness -incompatibility -incompatibilities -incompatibility's -incompatible -incompatibleness -incompatibles -incompatibly -incompendious -incompensated -incompensation -incompentence -incompetence -incompetences -incompetency -incompetencies -incompetent -incompetently -incompetentness -incompetents -incompetent's -incompetible -incompletability -incompletable -incompletableness -incomplete -incompleted -incompletely -incompleteness -incompletenesses -incompletion -incomplex -incompliable -incompliance -incompliancy -incompliancies -incompliant -incompliantly -incomplicate -incomplying -incomportable -incomposed -incomposedly -incomposedness -incomposite -incompossibility -incompossible -incomposure -incomprehended -incomprehending -incomprehendingly -incomprehense -incomprehensibility -incomprehensible -incomprehensibleness -incomprehensibly -incomprehensiblies -incomprehension -incomprehensive -incomprehensively -incomprehensiveness -incompressable -incompressibility -incompressible -incompressibleness -incompressibly -incompt -incomputable -incomputably -inconcealable -inconceivability -inconceivabilities -inconceivable -inconceivableness -inconceivably -inconceptible -inconcernino -inconcievable -inconciliable -inconcinn -inconcinnate -inconcinnately -inconcinnity -inconcinnous -inconcludent -inconcluding -inconclusible -inconclusion -inconclusive -inconclusively -inconclusiveness -inconcoct -inconcocted -inconcoction -inconcrete -inconcurrent -inconcurring -inconcussible -incondensability -incondensable -incondensibility -incondensible -incondite -inconditional -inconditionate -inconditioned -inconducive -inconel -inconfirm -inconfirmed -inconform -inconformable -inconformably -inconformity -inconfused -inconfusedly -inconfusion -inconfutable -inconfutably -incongealable -incongealableness -incongenerous -incongenial -incongeniality -inconglomerate -incongruence -incongruent -incongruently -incongruity -incongruities -incongruous -incongruously -incongruousness -incony -inconjoinable -inconjunct -inconnected -inconnectedness -inconnection -inconnexion -inconnu -inconnus -inconquerable -inconscience -inconscient -inconsciently -inconscionable -inconscious -inconsciously -inconsecutive -inconsecutively -inconsecutiveness -inconsequence -inconsequences -inconsequent -inconsequentia -inconsequential -inconsequentiality -inconsequentially -inconsequently -inconsequentness -inconsiderable -inconsiderableness -inconsiderably -inconsideracy -inconsiderate -inconsiderately -inconsiderateness -inconsideratenesses -inconsideration -inconsidered -inconsistable -inconsistence -inconsistences -inconsistency -inconsistencies -inconsistency's -inconsistent -inconsistently -inconsistentness -inconsolability -inconsolable -inconsolableness -inconsolably -inconsolate -inconsolately -inconsonance -inconsonant -inconsonantly -inconspicuous -inconspicuously -inconspicuousness -inconstance -inconstancy -inconstancies -inconstant -inconstantly -inconstantness -inconstruable -inconsultable -inconsumable -inconsumably -inconsumed -inconsummate -inconsumptible -incontaminable -incontaminate -incontaminateness -incontemptible -incontestability -incontestabilities -incontestable -incontestableness -incontestably -incontested -incontiguous -incontinence -incontinences -incontinency -incontinencies -incontinent -incontinently -incontinuity -incontinuous -incontracted -incontractile -incontraction -incontrollable -incontrollably -incontrolled -incontrovertibility -incontrovertible -incontrovertibleness -incontrovertibly -inconvenience -inconvenienced -inconveniences -inconveniency -inconveniencies -inconveniencing -inconvenient -inconvenienti -inconveniently -inconvenientness -inconversable -inconversant -inconversibility -inconverted -inconvertibility -inconvertibilities -inconvertible -inconvertibleness -inconvertibly -inconvinced -inconvincedly -inconvincibility -inconvincible -inconvincibly -incoordinate -inco-ordinate -in-co-ordinate -incoordinated -in-co-ordinated -incoordination -inco-ordination -in-co-ordination -incopresentability -incopresentable -incor -incord -incornished -incoronate -incoronated -incoronation -incorp -incorporable -incorporal -incorporality -incorporally -incorporalness -incorporate -incorporated -incorporatedness -incorporates -incorporating -incorporation -incorporations -incorporative -incorporator -incorporators -incorporatorship -incorporeal -incorporealism -incorporealist -incorporeality -incorporealize -incorporeally -incorporealness -incorporeity -incorporeities -incorporeous -incorpse -incorpsed -incorpses -incorpsing -incorr -incorrect -incorrection -incorrectly -incorrectness -incorrectnesses -incorrespondence -incorrespondency -incorrespondent -incorresponding -incorrigibility -incorrigibilities -incorrigible -incorrigibleness -incorrigibly -incorrodable -incorrodible -incorrosive -incorrupt -incorrupted -incorruptibility -incorruptibilities -Incorruptible -incorruptibleness -incorruptibly -incorruption -incorruptive -incorruptly -incorruptness -incoup -incourse -incourteous -incourteously -incr -incr. -incra -incrash -incrassate -incrassated -incrassating -incrassation -incrassative -increasable -increasableness -Increase -increased -increasedly -increaseful -increasement -increaser -increasers -increases -increasing -increasingly -increate -increately -increative -incredibility -incredibilities -incredible -incredibleness -incredibly -increditability -increditable -incredited -incredulity -incredulities -incredulous -incredulously -incredulousness -increep -increeping -incremable -incremate -incremated -incremating -incremation -increment -incremental -incrementalism -incrementalist -incrementally -incrementation -incremented -incrementer -incrementing -increments -increpate -increpation -incrept -increscence -increscent -increst -incretion -incretionary -incretory -incriminate -incriminated -incriminates -incriminating -incrimination -incriminations -incriminator -incriminatory -incrystal -incrystallizable -Incrocci -incroyable -incross -incrossbred -incrosses -incrossing -incrotchet -in-crowd -incruent -incruental -incruentous -incrust -incrustant -Incrustata -incrustate -incrustated -incrustating -incrustation -incrustations -incrustator -incrusted -incrusting -incrustive -incrustment -incrusts -inctirate -inctri -incubate -incubated -incubates -incubating -incubation -incubational -incubations -incubative -incubator -incubatory -incubatorium -incubators -incubator's -incube -incubee -incubi -incubiture -incubous -incubus -incubuses -incudal -incudate -incudectomy -incudes -incudomalleal -incudostapedial -inculcate -inculcated -inculcates -inculcating -inculcation -inculcations -inculcative -inculcator -inculcatory -inculk -inculp -inculpability -inculpable -inculpableness -inculpably -inculpate -inculpated -inculpates -inculpating -inculpation -inculpative -inculpatory -incult -incultivated -incultivation -inculture -incumbant -incumbence -incumbency -incumbencies -incumbent -incumbentess -incumbently -incumbents -incumber -incumbered -incumbering -incumberment -incumbers -incumbition -incumbrance -incumbrancer -incumbrances -incunable -incunabula -incunabular -incunabulist -incunabulum -incunabuulum -incuneation -incur -incurability -incurable -incurableness -incurably -incuriosity -incurious -incuriously -incuriousness -incurment -incurrable -incurred -incurrence -incurrent -incurrer -incurring -incurs -incurse -incursion -incursionary -incursionist -incursions -incursive -incurtain -incurvate -incurvated -incurvating -incurvation -incurvature -incurve -incurved -incurves -incurving -incurvity -incurvous -incus -incuse -incused -incuses -incusing -incuss -incut -incute -incutting -IND -ind- -Ind. -indaba -indabas -indaconitin -indaconitine -indagate -indagated -indagates -indagating -indagation -indagative -indagator -indagatory -indamage -indamin -indamine -indamines -indamins -indan -indane -Indanthrene -indart -indazin -indazine -indazol -indazole -IndE -indear -indebitatus -indebt -indebted -indebtedness -indebtednesses -indebting -indebtment -indecence -indecency -indecencies -indecent -indecenter -indecentest -indecently -indecentness -Indecidua -indeciduate -indeciduous -indecimable -indecipherability -indecipherable -indecipherableness -indecipherably -indecision -indecisions -indecisive -indecisively -indecisiveness -indecisivenesses -indecl -indeclinable -indeclinableness -indeclinably -indecomponible -indecomposable -indecomposableness -indecorous -indecorously -indecorousness -indecorousnesses -indecorum -indeed -indeedy -indef -indef. -indefaceable -indefatigability -indefatigable -indefatigableness -indefatigably -indefeasibility -indefeasible -indefeasibleness -indefeasibly -indefeatable -indefectibility -indefectible -indefectibly -indefective -indefensibility -indefensible -indefensibleness -indefensibly -indefensive -indeficiency -indeficient -indeficiently -indefinability -indefinable -indefinableness -indefinably -indefinite -indefinitely -indefiniteness -indefinity -indefinitive -indefinitively -indefinitiveness -indefinitude -indeflectible -indefluent -indeformable -indehiscence -indehiscent -indelectable -indelegability -indelegable -indeliberate -indeliberately -indeliberateness -indeliberation -indelibility -indelible -indelibleness -indelibly -indelicacy -indelicacies -indelicate -indelicately -indelicateness -indemnify -indemnification -indemnifications -indemnificator -indemnificatory -indemnified -indemnifier -indemnifies -indemnifying -indemnitee -indemnity -indemnities -indemnitor -indemnization -indemoniate -indemonstrability -indemonstrable -indemonstrableness -indemonstrably -indene -indenes -indenize -indent -indentation -indentations -indentation's -indented -indentedly -indentee -indenter -indenters -indentifiers -indenting -indention -indentions -indentment -indentor -indentors -indents -indenture -indentured -indentures -indentureship -indenturing -indentwise -independable -Independence -Independency -independencies -Independent -independentism -independently -independents -independing -Independista -indeposable -indepravate -indeprehensible -indeprivability -indeprivable -inderite -inderivative -indescribability -indescribabilities -indescribable -indescribableness -indescribably -indescript -indescriptive -indesert -indesignate -indesinent -indesirable -indestrucibility -indestrucible -indestructibility -indestructible -indestructibleness -indestructibly -indetectable -indeterminable -indeterminableness -indeterminably -indeterminacy -indeterminacies -indeterminacy's -indeterminancy -indeterminate -indeterminately -indeterminateness -indetermination -indeterminative -indetermined -indeterminism -indeterminist -indeterministic -indevirginate -indevote -indevoted -indevotion -indevotional -indevout -indevoutly -indevoutness -indew -index -indexable -indexation -indexed -indexer -indexers -indexes -indexical -indexically -indexing -indexless -indexlessness -index-linked -indexterity -Indi -Indy -indi- -India -India-cut -indiadem -indiademed -Indiahoma -Indiaman -Indiamen -Indian -Indiana -indianaite -Indianan -indianans -Indianapolis -Indianeer -Indianesque -Indianhead -Indianhood -Indianian -indianians -Indianisation -Indianise -Indianised -Indianising -Indianism -Indianist -indianite -Indianization -Indianize -Indianized -Indianizing -Indianola -indians -indian's -Indiantown -indiary -india-rubber -Indic -indic. -indicable -indical -indican -indicans -indicant -indicants -indicanuria -indicatable -indicate -indicated -indicates -indicating -indication -indicational -indications -indicative -indicatively -indicativeness -indicatives -indicator -indicatory -Indicatoridae -Indicatorinae -indicators -indicator's -indicatrix -indicavit -indice -indices -indicia -indicial -indicially -indicias -indicible -indicium -indiciums -indico -indicolite -indict -indictability -indictable -indictableness -indictably -indicted -indictee -indictees -indicter -indicters -indicting -indiction -indictional -indictive -indictment -indictments -indictment's -indictor -indictors -indicts -indidicia -indie -Indienne -Indies -indiferous -indifference -indifferences -indifferency -indifferencies -indifferent -indifferential -indifferentiated -indifferentism -indifferentist -indifferentistic -indifferently -indifferentness -indifulvin -indifuscin -indigen -indigena -indigenae -indigenal -indigenate -indigence -indigences -indigency -indigene -indigeneity -indigenes -Indigenismo -indigenist -indigenity -indigenous -indigenously -indigenousness -indigens -indigent -indigently -indigents -indiges -indigest -indigested -indigestedness -indigestibility -indigestibilty -indigestible -indigestibleness -indigestibly -indigestion -indigestions -indigestive -indigitamenta -indigitate -indigitation -indigites -indiglucin -indign -indignance -indignancy -indignant -indignantly -indignation -indignation-proof -indignations -indignatory -indignify -indignified -indignifying -indignity -indignities -indignly -indigo -indigo-bearing -indigoberry -indigo-bird -indigo-blue -indigo-dyed -indigoes -Indigofera -indigoferous -indigogen -indigo-grinding -indigoid -indigoids -indigo-yielding -indigometer -indigo-plant -indigo-producing -indigos -indigotate -indigotic -indigotin -indigotindisulphonic -indigotine -indigo-white -indiguria -Indihar -indihumin -indii -indijbiously -indyl -indilatory -indylic -indiligence -indimensible -in-dimension -indimensional -indiminishable -indimple -indin -Indio -Indira -indirect -indirected -indirecting -indirection -indirections -indirectly -indirectness -indirectnesses -indirects -indirubin -indirubine -indiscernibility -indiscernible -indiscernibleness -indiscernibly -indiscerpible -indiscerptibility -indiscerptible -indiscerptibleness -indiscerptibly -indisciplinable -indiscipline -indisciplined -indiscoverable -indiscoverably -indiscovered -indiscovery -indiscreet -indiscreetly -indiscreetness -indiscrete -indiscretely -indiscretion -indiscretionary -indiscretions -indiscrimanently -indiscriminantly -indiscriminate -indiscriminated -indiscriminately -indiscriminateness -indiscriminating -indiscriminatingly -indiscrimination -indiscriminative -indiscriminatively -indiscriminatory -indiscussable -indiscussed -indiscussible -indish -indispellable -indispensability -indispensabilities -indispensable -indispensableness -indispensables -indispensably -indispensible -indispersed -indispose -indisposed -indisposedness -indisposing -indisposition -indispositions -indisputability -indisputable -indisputableness -indisputably -indisputed -indissipable -indissociable -indissociably -indissolubility -indissoluble -indissolubleness -indissolubly -indissolute -indissolvability -indissolvable -indissolvableness -indissolvably -indissuadable -indissuadably -indistance -indistant -indistinct -indistinctible -indistinction -indistinctive -indistinctively -indistinctiveness -indistinctly -indistinctness -indistinctnesses -indistinguishability -indistinguishable -indistinguishableness -indistinguishably -indistinguished -indistinguishing -indistortable -indistributable -indisturbable -indisturbance -indisturbed -inditch -indite -indited -inditement -inditer -inditers -indites -inditing -indium -indiums -indiv -indivertible -indivertibly -individ -individable -individed -individua -individual -individualisation -individualise -individualised -individualiser -individualising -individualism -individualist -individualistic -individualistically -individualists -individuality -individualities -individualization -individualize -individualized -individualizer -individualizes -individualizing -individualizingly -individually -individuals -individual's -individuate -individuated -individuates -individuating -individuation -individuative -individuator -individuity -individuous -individuum -individuums -indivinable -indivinity -indivisibility -indivisible -indivisibleness -indivisibly -indivisim -indivision -indn -Indo- -Indo-afghan -Indo-african -Indo-Aryan -Indo-australian -Indo-british -Indo-briton -Indo-burmese -Indo-celtic -Indochina -Indochinese -Indo-Chinese -indocibility -indocible -indocibleness -indocile -indocilely -indocility -indoctrinate -indoctrinated -indoctrinates -indoctrinating -indoctrination -indoctrinations -indoctrinator -indoctrine -indoctrinization -indoctrinize -indoctrinized -indoctrinizing -Indo-dutch -Indo-egyptian -Indo-english -Indoeuropean -Indo-European -Indo-europeanist -Indo-french -Indogaea -Indogaean -Indo-gangetic -indogen -indogenide -Indo-german -Indo-Germanic -Indo-greek -Indo-hellenistic -Indo-Hittite -indoin -Indo-Iranian -indol -indole -indolence -indolences -indolent -indolently -indoles -indolyl -indolin -indoline -indologenous -Indology -Indologian -Indologist -Indologue -indoloid -indols -indomable -Indo-malayan -Indo-malaysian -indomethacin -indominitable -indominitably -indomitability -indomitable -indomitableness -indomitably -Indo-mohammedan -Indone -Indonesia -Indonesian -indonesians -Indo-oceanic -indoor -indoors -Indo-Pacific -indophenin -indophenol -Indophile -Indophilism -Indophilist -Indo-portuguese -Indore -indorsable -indorsation -indorse -indorsed -indorsee -indorsees -indorsement -indorser -indorsers -indorses -indorsing -indorsor -indorsors -Indo-saracenic -Indo-scythian -Indo-spanish -Indo-sumerian -Indo-teutonic -indow -indowed -indowing -indows -indoxyl -indoxylic -indoxyls -indoxylsulphuric -Indra -indraft -indrafts -Indrani -indrape -indraught -indrawal -indrawing -indrawn -Indre -Indre-et-Loire -indrench -indri -Indris -indubious -indubiously -indubitability -indubitable -indubitableness -indubitably -indubitate -indubitatively -induc -induc. -induce -induceable -induced -inducedly -inducement -inducements -inducement's -inducer -inducers -induces -induciae -inducibility -inducible -inducing -inducive -induct -inductance -inductances -inducted -inductee -inductees -inducteous -inductile -inductility -inducting -induction -inductional -inductionally -inductionless -inductions -induction's -inductive -inductively -inductiveness -inductivity -inducto- -inductometer -inductophone -inductor -inductory -inductorium -inductors -inductor's -inductoscope -inductothermy -inductril -inducts -indue -indued -induement -indues -induing -induism -indulge -indulgeable -indulged -indulgement -indulgence -indulgenced -indulgences -indulgence's -indulgency -indulgencies -indulgencing -indulgent -indulgential -indulgentially -indulgently -indulgentness -indulger -indulgers -indulges -indulgiate -indulging -indulgingly -indulin -induline -indulines -indulins -indult -indulto -indults -indument -indumenta -indumentum -indumentums -induna -induplicate -induplication -induplicative -indurable -indurance -indurate -indurated -indurates -indurating -induration -indurations -indurative -indure -indurite -Indus -indusia -indusial -indusiate -indusiated -indusiform -indusioid -indusium -industry -industrial -industrialisation -industrialise -industrialised -industrialising -industrialism -industrialist -industrialists -industrialist's -industrialization -industrializations -industrialize -industrialized -industrializes -industrializing -industrially -industrialness -industrials -industries -industrious -industriously -industriousness -industriousnesses -industrys -industry's -industrochemical -indutive -induviae -induvial -induviate -indwell -indweller -indwelling -indwellingness -indwells -indwelt -ine -yne -inearth -inearthed -inearthing -inearths -inebriacy -inebriant -inebriate -inebriated -inebriates -inebriating -inebriation -inebriations -inebriative -inebriety -inebrious -ineconomy -ineconomic -inedibility -inedible -inedita -inedited -Ineducabilia -ineducabilian -ineducability -ineducable -ineducation -ineffability -ineffable -ineffableness -ineffably -ineffaceability -ineffaceable -ineffaceably -ineffectible -ineffectibly -ineffective -ineffectively -ineffectiveness -ineffectivenesses -ineffectual -ineffectuality -ineffectually -ineffectualness -ineffectualnesses -ineffervescence -ineffervescent -ineffervescibility -ineffervescible -inefficacy -inefficacious -inefficaciously -inefficaciousness -inefficacity -inefficience -inefficiency -inefficiencies -inefficient -inefficiently -ineffulgent -inegalitarian -ineye -inelaborate -inelaborated -inelaborately -inelastic -inelastically -inelasticate -inelasticity -inelasticities -inelegance -inelegances -inelegancy -inelegancies -inelegant -inelegantly -ineligibility -ineligible -ineligibleness -ineligibles -ineligibly -ineliminable -ineloquence -ineloquent -ineloquently -ineluctability -ineluctable -ineluctably -ineludible -ineludibly -inembryonate -inemendable -inemotivity -inemulous -inenarrability -inenarrable -inenarrably -inenergetic -inenubilable -inenucleable -inept -ineptitude -ineptitudes -ineptly -ineptness -ineptnesses -inequable -inequal -inequalitarian -inequality -inequalities -inequally -inequalness -inequation -inequi- -inequiaxial -inequicostate -inequidistant -inequigranular -inequilateral -inequilaterally -inequilibrium -inequilobate -inequilobed -inequipotential -inequipotentiality -inequitable -inequitableness -inequitably -inequitate -inequity -inequities -inequivalent -inequivalve -inequivalved -inequivalvular -ineradicability -ineradicable -ineradicableness -ineradicably -inerasable -inerasableness -inerasably -inerasible -inergetic -Ineri -inerm -Inermes -Inermi -Inermia -inermous -Inerney -inerrability -inerrable -inerrableness -inerrably -inerrancy -inerrant -inerrantly -inerratic -inerring -inerringly -inerroneous -inert -inertance -inertia -inertiae -inertial -inertially -inertias -inertion -inertly -inertness -inertnesses -inerts -inerubescent -inerudite -ineruditely -inerudition -Ines -Ynes -inescapable -inescapableness -inescapably -inescate -inescation -inesculent -inescutcheon -Inesita -inesite -Ineslta -I-ness -Inessa -inessential -inessentiality -inessive -inesthetic -inestimability -inestimable -inestimableness -inestimably -inestivation -inethical -ineunt -ineuphonious -inevadible -inevadibly -inevaporable -inevasible -inevasibleness -inevasibly -inevidence -inevident -inevitability -inevitabilities -inevitable -inevitableness -inevitably -inexact -inexacting -inexactitude -inexactly -inexactness -inexcellence -inexcitability -inexcitable -inexcitableness -inexcitably -inexclusive -inexclusively -inexcommunicable -inexcusability -inexcusable -inexcusableness -inexcusably -inexecrable -inexecutable -inexecution -inexertion -inexhalable -inexhaust -inexhausted -inexhaustedly -inexhaustibility -inexhaustible -inexhaustibleness -inexhaustibly -inexhaustive -inexhaustively -inexhaustless -inexigible -inexist -inexistence -inexistency -inexistent -inexorability -inexorable -inexorableness -inexorably -inexpansible -inexpansive -inexpectable -inexpectance -inexpectancy -inexpectant -inexpectation -inexpected -inexpectedly -inexpectedness -inexpedience -inexpediency -inexpedient -inexpediently -inexpensive -inexpensively -inexpensiveness -inexperience -inexperienced -inexperiences -inexpert -inexpertly -inexpertness -inexpertnesses -inexperts -inexpiable -inexpiableness -inexpiably -inexpiate -inexplainable -inexpleble -inexplicability -inexplicable -inexplicableness -inexplicables -inexplicably -inexplicit -inexplicitly -inexplicitness -inexplorable -inexplosive -inexportable -inexposable -inexposure -inexpress -inexpressibility -inexpressibilities -inexpressible -inexpressibleness -inexpressibles -inexpressibly -inexpressive -inexpressively -inexpressiveness -inexpugnability -inexpugnable -inexpugnableness -inexpugnably -inexpungeable -inexpungibility -inexpungible -inexsuperable -inextant -inextended -inextensibility -inextensible -inextensile -inextension -inextensional -inextensive -inexterminable -inextinct -inextinguible -inextinguishability -inextinguishable -inextinguishables -inextinguishably -inextinguished -inextirpable -inextirpableness -inextricability -inextricable -inextricableness -inextricably -Inez -Ynez -Inf -Inf. -inface -infair -infall -infallibilism -infallibilist -infallibility -infallible -infallibleness -infallibly -infallid -infalling -infalsificable -infamation -infamatory -infame -infamed -infamy -infamia -infamies -infamiliar -infamiliarity -infamize -infamized -infamizing -infamonize -infamous -infamously -infamousness -infancy -infancies -infand -infandous -infang -infanglement -infangthef -infangthief -infans -infant -infanta -infantado -infantas -infante -infantes -infanthood -infanticidal -infanticide -infanticides -infantile -infantilism -infantility -infantilize -infantine -infantive -infantly -infantlike -infantry -infantries -infantryman -infantrymen -infants -infant's -infant-school -infarce -infarct -infarctate -infarcted -infarction -infarctions -infarcts -infare -infares -infashionable -infatigable -infatuate -infatuated -infatuatedly -infatuatedness -infatuates -infatuating -infatuation -infatuations -infatuator -infauna -infaunae -infaunal -infaunas -infaust -infausting -infeasibility -infeasibilities -infeasible -infeasibleness -infect -infectant -infected -infectedness -infecter -infecters -infectible -infecting -infection -infectionist -infections -infection's -infectious -infectiously -infectiousness -infective -infectiveness -infectivity -infector -infectors -infectress -infects -infectum -infectuous -infecund -infecundity -infeeble -infeed -infeft -infefting -infeftment -infeijdation -Infeld -infelicific -infelicity -infelicities -infelicitous -infelicitously -infelicitousness -infelonious -infelt -infeminine -infenible -infeodation -infeof -infeoff -infeoffed -infeoffing -infeoffment -infeoffs -infer -inferable -inferably -inference -inferenced -inferences -inference's -inferencing -inferent -inferential -inferentialism -inferentialist -inferentially -Inferi -inferial -inferible -inferior -inferiorism -inferiority -inferiorities -inferiorize -inferiorly -inferiorness -inferiors -inferior's -infern -infernal -infernalism -infernality -infernalize -infernally -infernalry -infernalship -Inferno -infernos -inferno's -infero- -inferoanterior -inferobranch -inferobranchiate -inferofrontal -inferolateral -inferomedian -inferoposterior -inferred -inferrer -inferrers -inferribility -inferrible -inferring -inferringly -infers -infertile -infertilely -infertileness -infertility -infertilities -infest -infestant -infestation -infestations -infested -infester -infesters -infesting -infestious -infestive -infestivity -infestment -infests -infeudate -infeudation -infibulate -infibulation -inficete -infidel -infidelic -infidelical -infidelism -infidelistic -infidelity -infidelities -infidelize -infidelly -infidels -infidel's -Infield -infielder -infielders -infields -infieldsman -infight -infighter -infighters -infighting -in-fighting -infights -infigured -infile -infill -infilling -infilm -infilter -infiltered -infiltering -infiltrate -infiltrated -infiltrates -infiltrating -infiltration -infiltrations -infiltrative -infiltrator -infiltrators -infima -infimum -infin -infin. -infinitant -infinitary -infinitarily -infinitate -infinitated -infinitating -infinitation -infinite -infinitely -infiniteness -infinites -infinitesimal -infinitesimalism -infinitesimality -infinitesimally -infinitesimalness -infinitesimals -infiniteth -infinity -infinities -infinitieth -infinitival -infinitivally -infinitive -infinitively -infinitives -infinitive's -infinitize -infinitized -infinitizing -infinito- -infinito-absolute -infinito-infinitesimal -infinitude -infinitudes -infinitum -infinituple -infirm -infirmable -infirmarer -infirmaress -infirmary -infirmarian -infirmaries -infirmate -infirmation -infirmative -infirmatory -infirmed -infirming -infirmity -infirmities -infirmly -infirmness -infirms -infissile -infit -infitter -infix -infixal -infixation -infixed -infixes -infixing -infixion -infixions -infl -inflamable -inflame -inflamed -inflamedly -inflamedness -inflamer -inflamers -inflames -inflaming -inflamingly -inflammability -inflammabilities -inflammable -inflammableness -inflammably -inflammation -inflammations -inflammative -inflammatory -inflammatorily -inflatable -inflate -inflated -inflatedly -inflatedness -inflater -inflaters -inflates -inflatile -inflating -inflatingly -inflation -inflationary -inflationism -inflationist -inflationists -inflations -inflative -inflator -inflators -inflatus -inflect -inflected -inflectedness -inflecting -inflection -inflectional -inflectionally -inflectionless -inflections -inflective -inflector -inflects -inflesh -inflex -inflexed -inflexibility -inflexibilities -inflexible -inflexibleness -inflexibly -inflexion -inflexional -inflexionally -inflexionless -inflexive -inflexure -inflict -inflictable -inflicted -inflicter -inflicting -infliction -inflictions -inflictive -inflictor -inflicts -inflight -in-flight -inflood -inflooding -inflorescence -inflorescent -inflow -inflowering -inflowing -inflows -influe -influencability -influencable -influence -influenceability -influenceabilities -influenceable -influenced -influencer -influences -influencing -influencive -influent -influential -influentiality -influentially -influentialness -influents -influenza -influenzal -influenzalike -influenzas -influenzic -influx -influxable -influxes -influxible -influxibly -influxion -influxionism -influxious -influxive -info -infold -infolded -infolder -infolders -infolding -infoldment -infolds -infoliate -inforgiveable -inform -informable -informal -informalism -informalist -informality -informalities -informalize -informally -informalness -informant -informants -informant's -Informatica -informatics -information -informational -informations -informative -informatively -informativeness -informatory -informatus -informed -informedly -informer -informers -informidable -informing -informingly -informity -informous -informs -infortiate -infortitude -infortunate -infortunately -infortunateness -infortune -infortunity -infos -infought -infound -infra -infra- -infra-anal -infra-angelic -infra-auricular -infra-axillary -infrabasal -infrabestial -infrabranchial -infrabuccal -infracanthal -infracaudal -infracelestial -infracentral -infracephalic -infraclavicle -infraclavicular -infraclusion -infraconscious -infracortical -infracostal -infracostalis -infracotyloid -infract -infracted -infractible -infracting -infraction -infractions -infractor -infracts -infradentary -infradiaphragmatic -infra-esophageal -infragenual -infraglacial -infraglenoid -infraglottic -infragrant -infragular -infrahyoid -infrahuman -infralabial -infralapsarian -infralapsarianism -Infra-lias -infralinear -infralittoral -inframammary -inframammillary -inframandibular -inframarginal -inframaxillary -inframedian -inframercurial -inframercurian -inframolecular -inframontane -inframundane -infranatural -infranaturalism -infranchise -infrangibility -infrangible -infrangibleness -infrangibly -infranodal -infranuclear -infraoccipital -infraocclusion -infraocular -infraoral -infraorbital -infraordinary -infrapapillary -infrapatellar -infraperipherial -infrapose -infraposed -infraposing -infraposition -infraprotein -infrapubian -infraradular -infrared -infra-red -infrareds -infrarenal -infrarenally -infrarimal -infrascapular -infrascapularis -infrascientific -infrasonic -infrasonics -infraspecific -infraspinal -infraspinate -infraspinatus -infraspinous -infrastapedial -infrasternal -infrastigmatal -infrastipular -infrastructure -infrastructures -infrasutral -infratemporal -infraterrene -infraterritorial -infrathoracic -infratonsillar -infratracheal -infratrochanteric -infratrochlear -infratubal -infraturbinal -infra-umbilical -infravaginal -infraventral -infree -infrequence -infrequency -infrequent -infrequentcy -infrequently -infrigidate -infrigidation -infrigidative -infringe -infringed -infringement -infringements -infringement's -infringer -infringers -infringes -infringible -infringing -infructiferous -infructuose -infructuosity -infructuous -infructuously -infrugal -infrunite -infrustrable -infrustrably -infula -infulae -infumate -infumated -infumation -infume -infund -infundibula -infundibular -Infundibulata -infundibulate -infundibuliform -infundibulum -infuneral -infuriate -infuriated -infuriatedly -infuriately -infuriates -infuriating -infuriatingly -infuriation -infuscate -infuscated -infuscation -infuse -infused -infusedly -infuser -infusers -infuses -infusibility -infusible -infusibleness -infusile -infusing -infusion -infusionism -infusionist -infusions -infusive -infusory -Infusoria -infusorial -infusorian -infusories -infusoriform -infusorioid -infusorium -ing -Inga -Ingaberg -Ingaborg -Ingaevones -Ingaevonic -ingallantry -Ingalls -Ingamar -ingan -ingang -ingangs -ingannation -Ingar -ingate -ingates -ingather -ingathered -ingatherer -ingathering -ingathers -Inge -Ingeberg -Ingeborg -Ingelbert -ingeldable -Ingelow -ingem -Ingemar -ingeminate -ingeminated -ingeminating -ingemination -ingender -ingene -ingenerability -ingenerable -ingenerably -ingenerate -ingenerated -ingenerately -ingenerating -ingeneration -ingenerative -ingeny -ingeniary -ingeniate -ingenie -ingenier -ingenio -ingeniosity -ingenious -ingeniously -ingeniousness -ingeniousnesses -ingenit -ingenital -ingenite -ingent -ingenu -ingenue -ingenues -ingenuity -ingenuities -ingenuous -ingenuously -ingenuousness -ingenuousnesses -Inger -ingerminate -Ingersoll -ingest -ingesta -ingestant -ingested -ingester -ingestible -ingesting -ingestion -ingestive -ingests -Ingham -Inghamite -Inghilois -Inghirami -ingine -ingirt -ingiver -ingiving -Ingle -Inglebert -Ingleborough -ingle-bred -Inglefield -inglenook -inglenooks -Ingles -inglesa -Ingleside -Inglewood -Inglis -inglobate -inglobe -inglobed -inglobing -inglorious -ingloriously -ingloriousness -inglu -inglut -inglutition -ingluvial -ingluvies -ingluviitis -ingluvious -Ingmar -ingnue -in-goal -ingoing -in-going -ingoingness -Ingold -Ingolstadt -Ingomar -ingorge -ingot -ingoted -ingoting -ingotman -ingotmen -ingots -Ingra -ingracious -ingraft -ingraftation -ingrafted -ingrafter -ingrafting -ingraftment -ingrafts -Ingraham -ingrain -ingrained -ingrainedly -ingrainedness -ingraining -ingrains -Ingram -ingrammaticism -ingramness -ingrandize -ingrapple -ingrate -ingrateful -ingratefully -ingratefulness -ingrately -ingrates -ingratiate -ingratiated -ingratiates -ingratiating -ingratiatingly -ingratiation -ingratiatory -ingratitude -ingratitudes -ingrave -ingravescence -ingravescent -ingravidate -ingravidation -ingreat -ingredience -ingredient -ingredients -ingredient's -INGRES -ingress -ingresses -ingression -ingressive -ingressiveness -ingreve -Ingrid -Ingrim -ingross -ingrossing -ingroup -in-group -ingroups -ingrow -ingrowing -ingrown -ingrownness -ingrowth -ingrowths -ingruent -inguen -inguilty -inguinal -inguino- -inguinoabdominal -inguinocrural -inguinocutaneous -inguinodynia -inguinolabial -inguinoscrotal -Inguklimiut -ingulf -ingulfed -ingulfing -ingulfment -ingulfs -Ingunna -ingurgitate -ingurgitated -ingurgitating -ingurgitation -Ingush -ingustable -Ingvaeonic -Ingvar -Ingveonic -Ingwaeonic -Ingweonic -INH -inhabile -inhabit -inhabitability -inhabitable -inhabitance -inhabitancy -inhabitancies -inhabitant -inhabitants -inhabitant's -inhabitate -inhabitation -inhabitative -inhabitativeness -inhabited -inhabitedness -inhabiter -inhabiting -inhabitiveness -inhabitress -inhabits -inhalant -inhalants -inhalation -inhalational -inhalations -inhalator -inhalators -inhale -inhaled -inhalement -inhalent -inhaler -inhalers -inhales -inhaling -Inhambane -inhame -inhance -inharmony -inharmonic -inharmonical -inharmonious -inharmoniously -inharmoniousness -inhaul -inhauler -inhaulers -inhauls -inhaust -inhaustion -inhearse -inheaven -inhelde -inhell -inhere -inhered -inherence -inherency -inherencies -inherent -inherently -inheres -inhering -inherit -inheritability -inheritabilities -inheritable -inheritableness -inheritably -inheritage -inheritance -inheritances -inheritance's -inherited -inheriting -inheritor -inheritors -inheritor's -inheritress -inheritresses -inheritress's -inheritrice -inheritrices -inheritrix -inherits -inherle -inhesion -inhesions -inhesive -inhiate -inhibit -inhibitable -inhibited -inhibiter -inhibiting -inhibition -inhibitionist -inhibitions -inhibition's -inhibitive -inhibitor -inhibitory -inhibitors -inhibits -Inhiston -inhive -inhold -inholder -inholding -inhomogeneity -inhomogeneities -inhomogeneous -inhomogeneously -inhonest -inhoop -inhospitable -inhospitableness -inhospitably -inhospitality -in-house -inhuman -inhumane -inhumanely -inhumaneness -inhumanism -inhumanity -inhumanities -inhumanize -inhumanly -inhumanness -inhumate -inhumation -inhumationist -inhume -inhumed -inhumer -inhumers -inhumes -inhuming -inhumorous -inhumorously -Iny -Inia -inial -inyala -Inyanga -inidoneity -inidoneous -Inigo -inimaginable -inimicability -inimicable -inimical -inimicality -inimically -inimicalness -inimicitious -inimicous -inimitability -inimitable -inimitableness -inimitably -inimitative -Inin -Inina -Inine -inyoite -inyoke -Inyokern -iniome -Iniomi -iniomous -inion -inique -iniquitable -iniquitably -iniquity -iniquities -iniquity's -iniquitous -iniquitously -iniquitousness -iniquous -inirritability -inirritable -inirritably -inirritant -inirritative -inisle -inissuable -init -init. -inital -initial -initialed -initialer -initialing -initialisation -initialise -initialised -initialism -initialist -initialization -initializations -initialization's -initialize -initialized -initializer -initializers -initializes -initializing -initialled -initialler -initially -initialling -initialness -initials -initiant -initiary -initiate -initiated -initiates -initiating -initiation -initiations -initiative -initiatively -initiatives -initiative's -initiator -initiatory -initiatorily -initiators -initiator's -initiatress -initiatrices -initiatrix -initiatrixes -initio -inition -initis -initive -inject -injectable -injectant -injected -injecting -injection -injection-gneiss -injections -injection's -injective -injector -injectors -injects -injelly -injoin -injoint -injucundity -injudicial -injudicially -injudicious -injudiciously -injudiciousness -injudiciousnesses -Injun -injunct -injunction -injunctions -injunction's -injunctive -injunctively -injurable -injure -injured -injuredly -injuredness -injurer -injurers -injures -injury -injuria -injuries -injuring -injurious -injuriously -injuriousness -injury-proof -injury's -injust -injustice -injustices -injustice's -injustifiable -injustly -ink -inkberry -ink-berry -inkberries -ink-black -inkblot -inkblots -ink-blurred -inkbush -ink-cap -ink-carrying -ink-colored -ink-distributing -ink-dropping -inked -inken -inker -Inkerman -inkers -inket -inkfish -inkholder -inkhorn -inkhornism -inkhornist -inkhornize -inkhornizer -inkhorns -inky -inky-black -inkie -inkier -inkies -inkiest -inkindle -inkiness -inkinesses -inking -inkings -inkish -inkjet -inkle -inkles -inkless -inklike -inkling -inklings -inkling's -inkmaker -inkmaking -inkman -in-knee -in-kneed -inknit -inknot -Inkom -inkos -inkosi -inkpot -inkpots -Inkra -inkroot -inks -inkshed -ink-slab -inkslinger -inkslinging -ink-spotted -inkstain -ink-stained -inkstand -inkstandish -inkstands -Inkster -inkstone -ink-wasting -inkweed -inkwell -inkwells -inkwood -inkwoods -inkwriter -ink-writing -ink-written -INL -inlace -inlaced -inlaces -inlacing -inlagary -inlagation -inlay -inlaid -inlayed -inlayer -inlayers -inlaying -inlaik -inlays -inlake -inland -inlander -inlanders -inlandish -inlands -inlapidate -inlapidatee -inlard -inlaut -inlaw -in-law -inlawry -in-laws -in-lb -inleague -inleagued -inleaguer -inleaguing -inleak -inleakage -in-lean -inless -inlet -inlets -inlet's -inletting -inly -inlier -inliers -inlighten -inlying -inlike -inline -in-line -inlook -inlooker -inlooking -in-lot -Inman -in-marriage -inmate -inmates -inmate's -inmeat -inmeats -inmesh -inmeshed -inmeshes -inmeshing -inmew -inmigrant -in-migrant -in-migrate -in-migration -inmixture -inmore -inmost -inmprovidence -INMS -INN -Inna -innage -innards -innascibility -innascible -innate -innately -innateness -innatism -innative -innato- -innatural -innaturality -innaturally -innavigable -inne -inned -inneity -Inner -inner-city -inner-directed -inner-directedness -inner-direction -innerly -innermore -innermost -innermostly -innerness -inners -innersole -innersoles -innerspring -innervate -innervated -innervates -innervating -innervation -innervational -innervations -innerve -innerved -innerves -innerving -Innes -Inness -innest -innet -innholder -innyard -inning -innings -inninmorite -Innis -Innisfail -Inniskilling -innitency -innkeeper -innkeepers -innless -innobedient -innocence -innocences -innocency -innocencies -innocent -innocenter -innocentest -innocently -innocentness -innocents -innocuity -innoculate -innoculated -innoculating -innoculation -innocuous -innocuously -innocuousness -innodate -innominability -innominable -innominables -innominata -innominate -innominatum -innomine -innovant -innovate -innovated -innovates -innovating -innovation -innovational -innovationist -innovation-proof -innovations -innovation's -innovative -innovatively -innovativeness -innovator -innovatory -innovators -innoxious -innoxiously -innoxiousness -inns -Innsbruck -innuate -innubilous -innuendo -innuendoed -innuendoes -innuendoing -innuendos -Innuit -innumerability -innumerable -innumerableness -innumerably -innumerate -innumerous -innutrient -innutrition -innutritious -innutritiousness -innutritive -Ino -ino- -inobedience -inobedient -inobediently -inoblast -inobnoxious -inobscurable -inobservable -inobservance -inobservancy -inobservant -inobservantly -inobservantness -inobservation -inobtainable -inobtrusive -inobtrusively -inobtrusiveness -inobvious -INOC -inocarpin -Inocarpus -inoccupation -Inoceramus -inochondritis -inochondroma -inocystoma -inocyte -inocula -inoculability -inoculable -inoculant -inocular -inoculate -inoculated -inoculates -inoculating -inoculation -inoculations -inoculative -inoculativity -inoculator -inoculum -inoculums -Inodes -inodiate -inodorate -inodorous -inodorously -inodorousness -inoepithelioma -in-off -inoffending -inoffensive -inoffensively -inoffensiveness -inofficial -inofficially -inofficiosity -inofficious -inofficiously -inofficiousness -inogen -inogenesis -inogenic -inogenous -inoglia -inohymenitic -Inola -inolith -inoma -inominous -inomyoma -inomyositis -inomyxoma -inone -inoneuroma -Inonu -inoperability -inoperable -inoperation -inoperational -inoperative -inoperativeness -inopercular -Inoperculata -inoperculate -inopinable -inopinate -inopinately -inopine -inopportune -inopportunely -inopportuneness -inopportunism -inopportunist -inopportunity -inoppressive -inoppugnable -inopulent -inorb -inorderly -inordinacy -inordinance -inordinancy -inordinary -inordinate -inordinately -inordinateness -inordination -inorg -inorg. -inorganic -inorganical -inorganically -inorganity -inorganizable -inorganization -inorganized -inoriginate -inornate -inornateness -inorthography -inosclerosis -inoscopy -inosculate -inosculated -inosculating -inosculation -inosic -inosilicate -inosin -inosine -inosinic -inosite -inosites -inositol -inositol-hexaphosphoric -inositols -inostensible -inostensibly -inotropic -Inoue -inower -inoxidability -inoxidable -inoxidizable -inoxidize -inoxidized -inoxidizing -inp- -inpayment -inparabola -inpardonable -inparfit -inpatient -in-patient -inpatients -inpensioner -inphase -in-phase -inphases -in-plant -inpolygon -inpolyhedron -inponderable -inport -inpour -inpoured -inpouring -inpours -inpush -input -input/output -inputfile -inputs -input's -inputted -inputting -inqilab -inquaintance -inquartation -in-quarto -inquest -inquests -inquestual -inquiet -inquietation -inquieted -inquieting -inquietly -inquietness -inquiets -inquietude -inquietudes -Inquilinae -inquiline -inquilinism -inquilinity -inquilinous -inquinate -inquinated -inquinating -inquination -inquirable -inquirance -inquirant -inquiration -inquire -inquired -inquirendo -inquirent -inquirer -inquirers -inquires -inquiry -inquiries -inquiring -inquiringly -inquiry's -inquisible -inquisit -inquisite -Inquisition -inquisitional -inquisitionist -inquisitions -inquisition's -inquisitive -inquisitively -inquisitiveness -inquisitivenesses -inquisitor -Inquisitor-General -inquisitory -inquisitorial -inquisitorially -inquisitorialness -inquisitorious -inquisitors -inquisitorship -inquisitress -inquisitrix -inquisiturient -inracinate -inradii -inradius -inradiuses -inrail -inreality -inregister -INRI -INRIA -inrigged -inrigger -inrighted -inring -inro -inroad -inroader -inroads -inrol -inroll -inrolling -inrooted -inrub -inrun -inrunning -inruption -inrush -inrushes -inrushing -INS -ins. -insabbatist -insack -insafety -insagacity -in-sail -insalivate -insalivated -insalivating -insalivation -insalubrious -insalubriously -insalubriousness -insalubrity -insalubrities -insalutary -insalvability -insalvable -insame -insanable -insane -insanely -insaneness -insaner -insanest -insaniate -insanie -insanify -insanitary -insanitariness -insanitation -insanity -insanities -insanity-proof -insapiency -insapient -insapory -insatiability -insatiable -insatiableness -insatiably -insatiate -insatiated -insatiately -insatiateness -insatiety -insatisfaction -insatisfactorily -insaturable -inscape -inscapes -inscenation -inscibile -inscience -inscient -inscious -insconce -inscribable -inscribableness -inscribe -inscribed -inscriber -inscribers -inscribes -inscribing -inscript -inscriptible -inscription -inscriptional -inscriptioned -inscriptionist -inscriptionless -inscriptions -inscription's -inscriptive -inscriptively -inscriptured -inscroll -inscrolled -inscrolling -inscrolls -inscrutability -inscrutable -inscrutableness -inscrutables -inscrutably -insculp -insculped -insculping -insculps -insculpture -insculptured -inscutcheon -insea -inseam -inseamer -inseams -insearch -insecable -insect -Insecta -insectan -insectary -insectaria -insectaries -insectarium -insectariums -insectation -insectean -insect-eating -insected -insecticidal -insecticidally -insecticide -insecticides -insectiferous -insectiform -insectifuge -insectile -insectine -insection -insectival -Insectivora -insectivore -insectivory -insectivorous -insectlike -insectmonger -insectologer -insectology -insectologist -insectproof -insects -insect's -insecuration -insecurations -insecure -insecurely -insecureness -insecurity -insecurities -insecution -insee -inseeing -inseer -inselberg -inselberge -inseminate -inseminated -inseminates -inseminating -insemination -inseminations -inseminator -inseminators -insenescible -insensate -insensately -insensateness -insense -insensed -insensibility -insensibilities -insensibilization -insensibilize -insensibilizer -insensible -insensibleness -insensibly -insensing -insensitive -insensitively -insensitiveness -insensitivity -insensitivities -insensuous -insentience -insentiences -insentiency -insentient -insep -inseparability -inseparable -inseparableness -inseparables -inseparably -inseparate -inseparately -insequent -insert -insertable -inserted -inserter -inserters -inserting -insertion -insertional -insertions -insertion's -insertive -inserts -inserve -in-service -inserviceable -inservient -insession -insessor -Insessores -insessorial -inset -insets -insetted -insetter -insetters -insetting -inseverable -inseverably -inshade -inshave -insheath -insheathe -insheathed -insheathing -insheaths -inshell -inshining -inship -inshoe -inshoot -inshore -inshrine -inshrined -inshrines -inshrining -inside -insident -inside-out -insider -insiders -insides -insidiate -insidiation -insidiator -insidiosity -insidious -insidiously -insidiousness -insidiousnesses -insight -insighted -insightful -insightfully -insights -insight's -insigne -insignes -insignia -insignias -insignificance -insignificancy -insignificancies -insignificant -insignificantly -insignificative -insignisigne -insignment -insimplicity -insimulate -insincere -insincerely -insincerity -insincerities -insinew -insinking -insinuant -insinuate -insinuated -insinuates -insinuating -insinuatingly -insinuation -insinuations -insinuative -insinuatively -insinuativeness -insinuator -insinuatory -insinuators -insinuendo -insipid -insipidity -insipidities -insipidly -insipidness -insipidus -insipience -insipient -insipiently -insist -insisted -insistence -insistences -insistency -insistencies -insistent -insistently -insister -insisters -insisting -insistingly -insistive -insists -insisture -insistuvree -insite -insitiency -insition -insititious -Insko -insnare -insnared -insnarement -insnarer -insnarers -insnares -insnaring -insobriety -insociability -insociable -insociableness -insociably -insocial -insocially -insociate -insofar -insol -insolate -insolated -insolates -insolating -insolation -insole -insolence -insolences -insolency -insolent -insolently -insolentness -insolents -insoles -insolid -insolidity -insolite -insolubility -insolubilities -insolubilization -insolubilize -insolubilized -insolubilizing -insoluble -insolubleness -insolubly -insolvability -insolvable -insolvably -insolvence -insolvency -insolvencies -insolvent -insomnia -insomniac -insomniacs -insomnia-proof -insomnias -insomnious -insomnolence -insomnolency -insomnolent -insomnolently -insomuch -insonorous -insooth -insorb -insorbent -insordid -insouciance -insouciances -insouciant -insouciantly -insoul -insouled -insouling -insouls -insp -insp. -inspake -inspan -inspanned -inspanning -inspans -inspeak -inspeaking -inspect -inspectability -inspectable -inspected -inspecting -inspectingly -inspection -inspectional -inspectioneer -inspections -inspection's -inspective -inspector -inspectoral -inspectorate -inspectorial -inspectors -inspector's -inspectorship -inspectress -inspectrix -inspects -insperge -insperse -inspeximus -inspheration -insphere -insphered -inspheres -insphering -inspinne -inspirability -inspirable -inspirant -inspirate -inspiration -inspirational -inspirationalism -inspirationally -inspirationist -inspirations -inspiration's -inspirative -inspirator -inspiratory -inspiratrix -inspire -inspired -inspiredly -inspirer -inspirers -inspires -inspiring -inspiringly -inspirit -inspirited -inspiriter -inspiriting -inspiritingly -inspiritment -inspirits -inspirometer -inspissant -inspissate -inspissated -inspissating -inspissation -inspissator -inspissosis -inspoke -inspoken -inspreith -Inst -inst. -instability -instabilities -instable -instal -install -installant -installation -installations -installation's -installed -installer -installers -installing -installment -installments -installment's -installs -instalment -instals -instamp -instance -instanced -instances -instancy -instancies -instancing -instanding -instant -instantaneity -instantaneous -instantaneously -instantaneousness -instanter -instantial -instantiate -instantiated -instantiates -instantiating -instantiation -instantiations -instantiation's -instantly -instantness -instants -instar -instarred -instarring -instars -instate -instated -instatement -instates -instating -instaurate -instauration -instaurator -instead -instealing -insteam -insteep -instellatinn -instellation -instep -insteps -instigant -instigate -instigated -instigates -instigating -instigatingly -instigation -instigations -instigative -instigator -instigators -instigator's -instigatrix -instil -instyle -instill -instillation -instillator -instillatory -instilled -instiller -instillers -instilling -instillment -instills -instilment -instils -instimulate -instinct -instinction -instinctive -instinctively -instinctiveness -instinctivist -instinctivity -instincts -instinct's -instinctual -instinctually -instipulate -institor -institory -institorial -institorian -institue -institute -instituted -instituter -instituters -Institutes -instituting -institution -institutional -institutionalisation -institutionalise -institutionalised -institutionalising -institutionalism -institutionalist -institutionalists -institutionality -institutionalization -institutionalize -institutionalized -institutionalizes -institutionalizing -institutionally -institutionary -institutionize -institutions -institutive -institutively -institutor -institutors -institutress -institutrix -instonement -instop -instore -instr -instr. -instransitive -instratified -instreaming -instrengthen -instressed -instroke -instrokes -instruct -instructable -instructed -instructedly -instructedness -instructer -instructible -instructing -instruction -instructional -instructionary -instruction-proof -instructions -instruction's -instructive -instructively -instructiveness -instructor -instructorial -instructorless -instructors -instructor's -instructorship -instructorships -instructress -instructs -instrument -instrumental -instrumentalism -instrumentalist -instrumentalists -instrumentalist's -instrumentality -instrumentalities -instrumentalize -instrumentally -instrumentals -instrumentary -instrumentate -instrumentation -instrumentations -instrumentative -instrumented -instrumenting -instrumentist -instrumentman -instruments -insuavity -insubduable -insubjection -insubmergible -insubmersible -insubmission -insubmissive -insubordinate -insubordinately -insubordinateness -insubordination -insubordinations -insubstantial -insubstantiality -insubstantialize -insubstantially -insubstantiate -insubstantiation -insubvertible -insuccate -insuccation -insuccess -insuccessful -insucken -insue -insuetude -insufferable -insufferableness -insufferably -insufficent -insufficience -insufficiency -insufficiencies -insufficient -insufficiently -insufficientness -insufflate -insufflated -insufflating -insufflation -insufflator -insuitable -insula -insulae -insulance -insulant -insulants -insular -insulary -insularism -insularity -insularities -insularize -insularized -insularizing -insularly -insulars -insulate -insulated -insulates -insulating -insulation -insulations -insulator -insulators -insulator's -insulin -insulinase -insulination -insulinize -insulinized -insulinizing -insulins -insulize -Insull -insulphured -insulse -insulsity -insult -insultable -insultant -insultation -insulted -insulter -insulters -insulting -insultingly -insultment -insultproof -insults -insume -insunk -insuper -insuperability -insuperable -insuperableness -insuperably -insupportable -insupportableness -insupportably -insupposable -insuppressibility -insuppressible -insuppressibly -insuppressive -insurability -insurable -insurance -insurances -insurant -insurants -insure -insured -insureds -insuree -insurer -insurers -insures -insurge -insurgence -insurgences -insurgency -insurgencies -insurgent -insurgentism -insurgently -insurgents -insurgent's -insurgescence -insuring -insurmounable -insurmounably -insurmountability -insurmountable -insurmountableness -insurmountably -insurpassable -insurrect -insurrection -insurrectional -insurrectionally -insurrectionary -insurrectionaries -insurrectionise -insurrectionised -insurrectionising -insurrectionism -insurrectionist -insurrectionists -insurrectionize -insurrectionized -insurrectionizing -insurrections -insurrection's -insurrecto -insurrectory -insusceptibility -insusceptibilities -insusceptible -insusceptibly -insusceptive -insuspect -insusurration -inswamp -inswarming -inswathe -inswathed -inswathement -inswathes -inswathing -insweeping -inswell -inswept -inswing -inswinger -Int -in't -int. -inta -intablature -intabulate -intact -intactible -intactile -intactly -intactness -intagli -intagliated -intagliation -intaglio -intaglioed -intaglioing -intaglios -intagliotype -intail -intake -intaker -intakes -intaminated -intangibility -intangibilities -intangible -intangibleness -intangibles -intangible's -intangibly -intangle -INTAP -intaria -intarissable -intarsa -intarsas -intarsia -intarsias -intarsiate -intarsist -intastable -intaxable -intebred -intebreeding -intechnicality -integer -integers -integer's -integrability -integrable -integral -integrality -integralization -integralize -integrally -integrals -integral's -integrand -integrant -integraph -integrate -integrated -integrates -integrating -integration -integrationist -integrations -integrative -integrator -integrifolious -integrious -integriously -integripallial -integripalliate -integrity -integrities -integrodifferential -integropallial -Integropallialia -Integropalliata -integropalliate -integumation -integument -integumental -integumentary -integumentation -integuments -inteind -intel -intellect -intellectation -intellected -intellectible -intellection -intellective -intellectively -intellects -intellect's -intellectual -intellectualisation -intellectualise -intellectualised -intellectualiser -intellectualising -intellectualism -intellectualisms -intellectualist -intellectualistic -intellectualistically -intellectuality -intellectualities -intellectualization -intellectualizations -intellectualize -intellectualized -intellectualizer -intellectualizes -intellectualizing -intellectually -intellectualness -intellectuals -intelligence -intelligenced -intelligencer -intelligences -intelligency -intelligencing -intelligent -intelligential -intelligentiary -intelligently -intelligentsia -intelligibility -intelligibilities -intelligible -intelligibleness -intelligibly -intelligize -INTELSAT -intemerate -intemerately -intemerateness -intemeration -intemperable -intemperably -intemperament -intemperance -intemperances -intemperancy -intemperant -intemperate -intemperately -intemperateness -intemperatenesses -intemperature -intemperies -intempestive -intempestively -intempestivity -intemporal -intemporally -intenability -intenable -intenancy -intend -intendance -intendancy -intendancies -intendant -intendantism -intendantship -intended -intendedly -intendedness -intendeds -intendence -intendency -intendencia -intendencies -intendente -intender -intenders -intendible -intendiment -intending -intendingly -intendit -intendment -intends -intenerate -intenerated -intenerating -inteneration -intenible -intens -intens. -intensate -intensation -intensative -intense -intensely -intenseness -intenser -intensest -intensify -intensification -intensifications -intensified -intensifier -intensifiers -intensifies -intensifying -intension -intensional -intensionally -intensity -intensities -intensitive -intensitometer -intensive -intensively -intensiveness -intensivenyess -intensives -intent -intentation -intented -intention -intentional -intentionalism -intentionality -intentionally -intentioned -intentionless -intentions -intentive -intentively -intentiveness -intently -intentness -intentnesses -intents -inter -inter- -inter. -interabang -interabsorption -interacademic -interacademically -interaccessory -interaccuse -interaccused -interaccusing -interacinar -interacinous -interacra -interact -interactant -interacted -interacting -interaction -interactional -interactionism -interactionist -interactions -interaction's -interactive -interactively -interactivity -interacts -interadaptation -interadaption -interadditive -interadventual -interaffiliate -interaffiliated -interaffiliation -interage -interagency -interagencies -interagent -inter-agent -interagglutinate -interagglutinated -interagglutinating -interagglutination -interagree -interagreed -interagreeing -interagreement -interalar -interall -interally -interalliance -interallied -inter-Allied -interalveolar -interambulacra -interambulacral -interambulacrum -Inter-american -interamnian -Inter-andean -interangular -interanimate -interanimated -interanimating -interannular -interantagonism -interantennal -interantennary -interapophysal -interapophyseal -interapplication -interarboration -interarch -interarcualis -interarytenoid -interarmy -interarrival -interarticular -interartistic -interassociate -interassociated -interassociation -interassure -interassured -interassuring -interasteroidal -interastral -interatomic -interatrial -interattrition -interaulic -interaural -interauricular -interavailability -interavailable -interaxal -interaxes -interaxial -interaxillary -interaxis -interbalance -interbalanced -interbalancing -interbanded -interbank -interbanking -interbastate -interbbred -interbed -interbedded -interbelligerent -interblend -interblended -interblending -interblent -interblock -interbody -interbonding -interborough -interbourse -interbrachial -interbrain -inter-brain -interbranch -interbranchial -interbreath -interbred -interbreed -interbreeding -interbreeds -interbrigade -interbring -interbronchial -interbrood -interbusiness -intercadence -intercadent -intercalar -intercalare -intercalary -intercalarily -intercalarium -intercalate -intercalated -intercalates -intercalating -intercalation -intercalations -intercalative -intercalatory -intercale -intercalm -intercampus -intercanal -intercanalicular -intercapillary -intercardinal -intercarotid -intercarpal -intercarpellary -intercarrier -intercartilaginous -intercaste -intercatenated -intercausative -intercavernous -intercede -interceded -intercedent -interceder -intercedes -interceding -intercellular -intercellularly -intercensal -intercentra -intercentral -intercentrum -intercept -interceptable -intercepted -intercepter -intercepting -interception -interceptions -interceptive -interceptor -interceptors -interceptress -intercepts -intercerebral -intercess -intercession -intercessional -intercessionary -intercessionate -intercessionment -intercessions -intercessive -intercessor -intercessory -intercessorial -intercessors -interchaff -interchain -interchange -interchangeability -interchangeable -interchangeableness -interchangeably -interchanged -interchangement -interchanger -interchanges -interchanging -interchangings -interchannel -interchapter -intercharge -intercharged -intercharging -interchase -interchased -interchasing -intercheck -interchoke -interchoked -interchoking -interchondral -interchurch -intercident -Intercidona -interciliary -intercilium -intercipient -intercircle -intercircled -intercircling -intercirculate -intercirculated -intercirculating -intercirculation -intercision -intercystic -intercity -intercitizenship -intercivic -intercivilization -interclash -interclasp -interclass -interclavicle -interclavicular -interclerical -interclose -intercloud -interclub -interclude -interclusion -intercoastal -intercoccygeal -intercoccygean -intercohesion -intercollege -intercollegian -intercollegiate -intercolline -intercolonial -intercolonially -intercolonization -intercolonize -intercolonized -intercolonizing -intercolumn -intercolumnal -intercolumnar -intercolumnation -intercolumniation -intercom -intercombat -intercombination -intercombine -intercombined -intercombining -intercome -intercommission -intercommissural -intercommon -intercommonable -intercommonage -intercommoned -intercommoner -intercommoning -intercommunal -intercommune -intercommuned -intercommuner -intercommunicability -intercommunicable -intercommunicate -intercommunicated -intercommunicates -intercommunicating -intercommunication -intercommunicational -intercommunications -intercommunicative -intercommunicator -intercommuning -intercommunion -intercommunional -intercommunity -intercommunities -intercompany -intercomparable -intercompare -intercompared -intercomparing -intercomparison -intercomplexity -intercomplimentary -intercoms -interconal -interconciliary -intercondenser -intercondylar -intercondylic -intercondyloid -interconfessional -interconfound -interconnect -interconnected -interconnectedness -interconnecting -interconnection -interconnections -interconnection's -interconnects -interconnexion -interconsonantal -intercontinental -intercontorted -intercontradiction -intercontradictory -interconversion -interconvert -interconvertibility -interconvertible -interconvertibly -intercooler -intercooling -intercoracoid -intercorporate -intercorpuscular -intercorrelate -intercorrelated -intercorrelating -intercorrelation -intercorrelations -intercortical -intercosmic -intercosmically -intercostal -intercostally -intercostobrachial -intercostohumeral -intercotylar -intercounty -intercouple -intercoupled -intercoupling -Intercourse -intercourses -intercoxal -intercranial -intercreate -intercreated -intercreating -intercreedal -intercrescence -intercrinal -intercrystalline -intercrystallization -intercrystallize -intercrop -intercropped -intercropping -intercross -intercrossed -intercrossing -intercrural -intercrust -intercultural -interculturally -interculture -intercupola -intercur -intercurl -intercurrence -intercurrent -intercurrently -intercursation -intercuspidal -intercut -intercutaneous -intercuts -intercutting -interdash -interdata -interdeal -interdealer -interdebate -interdebated -interdebating -interdenominational -interdenominationalism -interdental -interdentally -interdentil -interdepartmental -interdepartmentally -interdepend -interdependability -interdependable -interdependence -interdependences -interdependency -interdependencies -interdependent -interdependently -interderivative -interdespise -interdestructive -interdestructively -interdestructiveness -interdetermination -interdetermine -interdetermined -interdetermining -interdevour -interdict -interdicted -interdicting -interdiction -interdictions -interdictive -interdictor -interdictory -interdicts -interdictum -interdifferentiate -interdifferentiated -interdifferentiating -interdifferentiation -interdiffuse -interdiffused -interdiffusiness -interdiffusing -interdiffusion -interdiffusive -interdiffusiveness -interdigital -interdigitally -interdigitate -interdigitated -interdigitating -interdigitation -interdine -interdiscal -interdisciplinary -interdispensation -interdistinguish -interdistrict -interdivision -interdivisional -interdome -interdorsal -interdrink -intereat -interelectrode -interelectrodic -interelectronic -interembrace -interembraced -interembracing -interempire -interemption -interenjoy -interentangle -interentangled -interentanglement -interentangling -interepidemic -interepimeral -interepithelial -interequinoctial -interess -interesse -interessee -interessor -interest -interested -interestedly -interestedness -interester -interesterification -interesting -interestingly -interestingness -interestless -interests -interestuarine -interethnic -Inter-european -interexchange -interface -interfaced -interfacer -interfaces -interfacial -interfacing -interfactional -interfaculty -interfaith -interfamily -interfascicular -interfault -interfector -interfederation -interfemoral -interfenestral -interfenestration -interferant -interfere -interfered -interference -interference-proof -interferences -interferent -interferential -interferer -interferers -interferes -interfering -interferingly -interferingness -interferogram -interferometer -interferometers -interferometry -interferometric -interferometrically -interferometries -interferon -interferric -interfertile -interfertility -interfiber -interfibrillar -interfibrillary -interfibrous -interfilamentar -interfilamentary -interfilamentous -interfilar -interfile -interfiled -interfiles -interfiling -interfilling -interfiltrate -interfiltrated -interfiltrating -interfiltration -interfinger -interfirm -interflange -interflashing -interflow -interfluence -interfluent -interfluminal -interfluous -interfluve -interfluvial -interflux -interfold -interfoliaceous -interfoliar -interfoliate -interfollicular -interforce -interframe -interfraternal -interfraternally -interfraternity -interfret -interfretted -interfriction -interfrontal -interfruitful -interfulgent -interfuse -interfused -interfusing -interfusion -intergalactic -intergang -interganglionic -intergatory -intergenerant -intergenerating -intergeneration -intergenerational -intergenerative -intergeneric -intergential -intergesture -intergilt -intergyral -interglacial -interglandular -interglyph -interglobular -intergonial -intergossip -intergossiped -intergossiping -intergossipped -intergossipping -intergovernmental -intergradation -intergradational -intergrade -intergraded -intergradient -intergrading -intergraft -intergranular -intergrapple -intergrappled -intergrappling -intergrave -intergroup -intergroupal -intergrow -intergrown -intergrowth -intergular -interhabitation -interhaemal -interhemal -interhemispheric -interhyal -interhybridize -interhybridized -interhybridizing -interhostile -interhuman -interieur -Interim -interimist -interimistic -interimistical -interimistically -interimperial -Inter-imperial -interims -interincorporation -interindependence -interindicate -interindicated -interindicating -interindividual -interindustry -interinfluence -interinfluenced -interinfluencing -interinhibition -interinhibitive -interinsert -interinstitutional -interinsular -interinsurance -interinsurer -interinvolve -interinvolved -interinvolving -interionic -Interior -interiorism -interiorist -interiority -interiorization -interiorize -interiorized -interiorizes -interiorizing -interiorly -interiorness -interiors -interior's -interior-sprung -interirrigation -interisland -interj -interj. -interjacence -interjacency -interjacent -interjaculate -interjaculateded -interjaculating -interjaculatory -interjangle -interjealousy -interject -interjected -interjecting -interjection -interjectional -interjectionalise -interjectionalised -interjectionalising -interjectionalize -interjectionalized -interjectionalizing -interjectionally -interjectionary -interjectionize -interjections -interjectiveness -interjector -interjectory -interjectorily -interjectors -interjects -interjectural -interjoin -interjoinder -interjoist -interjudgment -interjugal -interjugular -interjunction -interkinesis -interkinetic -interknit -interknitted -interknitting -interknot -interknotted -interknotting -interknow -interknowledge -interlabial -interlaboratory -interlace -interlaced -interlacedly -interlacement -interlacer -interlacery -interlaces -Interlachen -interlacing -interlacustrine -interlay -interlaid -interlayer -interlayering -interlaying -interlain -interlays -interlake -Interlaken -interlamellar -interlamellation -interlaminar -interlaminate -interlaminated -interlaminating -interlamination -interlanguage -interlap -interlapped -interlapping -interlaps -interlapse -interlard -interlardation -interlarded -interlarding -interlardment -interlards -interlatitudinal -interlaudation -interleaf -interleague -interleave -interleaved -interleaver -interleaves -interleaving -interlibel -interlibeled -interlibelling -interlibrary -interlie -interligamentary -interligamentous -interlight -interlying -interlimitation -interline -interlineal -interlineally -interlinear -interlineary -interlinearily -interlinearly -interlineate -interlineated -interlineating -interlineation -interlineations -interlined -interlinement -interliner -interlines -Interlingua -interlingual -interlinguist -interlinguistic -interlining -interlink -interlinkage -interlinked -interlinking -interlinks -interlisp -interloan -interlobar -interlobate -interlobular -interlocal -interlocally -interlocate -interlocated -interlocating -interlocation -Interlochen -interlock -interlocked -interlocker -interlocking -interlocks -interlocular -interloculli -interloculus -interlocus -interlocution -interlocutive -interlocutor -interlocutory -interlocutorily -interlocutors -interlocutress -interlocutresses -interlocutrice -interlocutrices -interlocutrix -interloli -interloop -interlope -interloped -interloper -interlopers -interlopes -interloping -interlot -interlotted -interlotting -interlucate -interlucation -interlucent -interlude -interluder -interludes -interludial -interluency -interlunar -interlunary -interlunation -intermachine -intermalar -intermalleolar -intermammary -intermammillary -intermandibular -intermanorial -intermarginal -intermarine -intermarry -intermarriage -intermarriageable -intermarriages -intermarried -intermarries -intermarrying -intermason -intermastoid -intermat -intermatch -intermatted -intermatting -intermaxilla -intermaxillar -intermaxillary -intermaze -intermazed -intermazing -intermean -intermeasurable -intermeasure -intermeasured -intermeasuring -intermeddle -intermeddled -intermeddlement -intermeddler -intermeddlesome -intermeddlesomeness -intermeddling -intermeddlingly -intermede -intermedia -intermediacy -intermediae -intermedial -intermediary -intermediaries -intermediate -intermediated -intermediately -intermediateness -intermediates -intermediate's -intermediating -intermediation -intermediator -intermediatory -intermedin -intermedio-lateral -intermedious -intermedium -intermedius -intermeet -intermeeting -intermell -intermelt -intermembral -intermembranous -intermeningeal -intermenstrual -intermenstruum -interment -intermental -intermention -interments -intermercurial -intermesenterial -intermesenteric -intermesh -intermeshed -intermeshes -intermeshing -intermessage -intermessenger -intermet -intermetacarpal -intermetallic -intermetameric -intermetatarsal -intermew -intermewed -intermewer -intermezzi -intermezzo -intermezzos -intermiddle -intermigrate -intermigrated -intermigrating -intermigration -interminability -interminable -interminableness -interminably -interminant -interminate -interminated -intermination -intermine -intermined -intermingle -intermingled -intermingledom -interminglement -intermingles -intermingling -intermining -interminister -interministerial -interministerium -intermise -intermission -intermissions -intermissive -intermit -intermits -intermitted -intermittedly -intermittence -intermittency -intermittencies -intermittent -intermittently -intermitter -intermitting -intermittingly -intermittor -intermix -intermixable -intermixed -intermixedly -intermixes -intermixing -intermixt -intermixtly -intermixture -intermixtures -intermmet -intermobility -intermodification -intermodillion -intermodulation -intermodule -intermolar -intermolecular -intermolecularly -intermomentary -intermontane -intermorainic -intermotion -intermountain -intermundane -intermundial -intermundian -intermundium -intermunicipal -intermunicipality -intermural -intermure -intermuscular -intermuscularity -intermuscularly -intermutation -intermutual -intermutually -intermutule -intern -internal -internal-combustion -internality -internalities -internalization -internalize -internalized -internalizes -internalizing -internally -internalness -internals -internarial -internasal -internat -internat. -internation -International -Internationale -internationalisation -internationalise -internationalised -internationalising -internationalism -internationalisms -internationalist -internationalists -internationality -internationalization -internationalizations -internationalize -internationalized -internationalizes -internationalizing -internationally -international-minded -internationals -internatl -interne -interneciary -internecinal -internecine -internecion -internecive -internect -internection -interned -internee -internees -internegative -internes -internescine -interneship -internet -internetted -internetwork -internetworking -internetworks -interneural -interneuron -interneuronal -interneuronic -internidal -interning -internist -internists -internity -internment -internments -interno- -internobasal -internodal -internode -internodes -internodia -internodial -internodian -internodium -internodular -interns -internship -internships -internuclear -internunce -internuncial -internuncially -internunciary -internunciatory -internunciess -internuncio -internuncios -internuncioship -internuncius -internuptial -internuptials -interobjective -interoceanic -interoceptive -interoceptor -interocular -interoffice -interolivary -interopercle -interopercular -interoperculum -interoptic -interorbital -interorbitally -interoscillate -interoscillated -interoscillating -interosculant -interosculate -interosculated -interosculating -interosculation -interosseal -interossei -interosseous -interosseus -interownership -interpage -interpalatine -interpale -interpalpebral -interpapillary -interparenchymal -interparental -interparenthetic -interparenthetical -interparenthetically -interparietal -interparietale -interparliament -interparliamentary -interparoxysmal -interparty -interparticle -interpass -interpause -interpave -interpaved -interpaving -interpeal -interpectoral -interpeduncular -interpel -interpellant -interpellate -interpellated -interpellating -interpellation -interpellator -interpelled -interpelling -interpendent -interpenetrable -interpenetrant -interpenetrate -interpenetrated -interpenetrating -interpenetration -interpenetrative -interpenetratively -interpermeate -interpermeated -interpermeating -interpersonal -interpersonally -interpervade -interpervaded -interpervading -interpervasive -interpervasively -interpervasiveness -interpetaloid -interpetalous -interpetiolar -interpetiolary -interphalangeal -interphase -Interphone -interphones -interpiece -interpilaster -interpilastering -interplace -interplacental -interplay -interplaying -interplays -interplait -inter-plane -interplanetary -interplant -interplanting -interplea -interplead -interpleaded -interpleader -interpleading -interpleads -interpled -interpledge -interpledged -interpledging -interpleural -interplical -interplicate -interplication -interplight -interpoint -Interpol -interpolable -interpolant -interpolar -interpolary -interpolate -interpolated -interpolater -interpolates -interpolating -interpolation -interpolations -interpolative -interpolatively -interpolator -interpolatory -interpolators -interpole -interpolymer -interpolish -interpolity -interpolitical -interpollinate -interpollinated -interpollinating -interpone -interpopulation -interportal -interposable -interposal -interpose -interposed -interposer -interposers -interposes -interposing -interposingly -interposition -interpositions -interposure -interpour -interppled -interppoliesh -interprater -interpressure -interpret -interpretability -interpretable -interpretableness -interpretably -interpretament -interpretate -interpretation -interpretational -interpretations -interpretation's -interpretative -interpretatively -interpreted -interpreter -interpreters -interpretership -interpreting -interpretive -interpretively -interpretorial -interpretress -interprets -interprismatic -interprocess -interproduce -interproduced -interproducing -interprofessional -interprofessionally -interproglottidal -interproportional -interprotoplasmic -interprovincial -interproximal -interproximate -interpterygoid -interpubic -interpulmonary -interpunct -interpunction -interpunctuate -interpunctuation -interpupil -interpupillary -interquarrel -interquarreled -interquarreling -interquarter -interquartile -interrace -interracial -interracialism -interradial -interradially -interradiate -interradiated -interradiating -interradiation -interradii -interradium -interradius -interrailway -interramal -interramicorn -interramification -interran -interreact -interreceive -interreceived -interreceiving -interrecord -interred -interreflect -interreflection -interregal -interregency -interregent -interreges -interregimental -interregional -interregionally -interregna -interregnal -interregnum -interregnums -interreign -interrelate -interrelated -interrelatedly -interrelatedness -interrelatednesses -interrelates -interrelating -interrelation -interrelations -interrelationship -interrelationships -interrelationship's -interreligious -interreligiously -interrena -interrenal -interrenalism -interrepellent -interrepulsion -interrer -interresist -interresistance -interresistibility -interresponsibility -interresponsible -interresponsive -interreticular -interreticulation -interrex -interrhyme -interrhymed -interrhyming -interright -interring -interriven -interroad -interrobang -interrog -interrog. -interrogability -interrogable -interrogant -interrogate -interrogated -interrogatedness -interrogatee -interrogates -interrogating -interrogatingly -interrogation -interrogational -interrogations -interrogative -interrogatively -interrogatives -interrogator -interrogatory -interrogatories -interrogatorily -interrogator-responsor -interrogators -interrogatrix -interrogee -interroom -interrow -interrule -interruled -interruling -interrun -interrunning -interrupt -interruptable -interrupted -interruptedly -interruptedness -interrupter -interrupters -interruptible -interrupting -interruptingly -interruption -interruptions -interruption's -interruptive -interruptively -interruptor -interruptory -interrupts -inters -intersale -intersalute -intersaluted -intersaluting -interscapilium -interscapular -interscapulum -interscendent -interscene -interscholastic -interschool -interscience -interscribe -interscribed -interscribing -interscription -interseaboard -interseam -interseamed -intersecant -intersect -intersectant -intersected -intersecting -intersection -intersectional -intersections -intersection's -intersector -intersects -intersegmental -interseminal -interseminate -interseminated -interseminating -intersentimental -interseptal -interseptum -intersert -intersertal -interservice -intersesamoid -intersession -intersessional -intersessions -interset -intersetting -intersex -intersexes -intersexual -intersexualism -intersexuality -intersexualities -intersexually -intershade -intershaded -intershading -intershifting -intershock -intershoot -intershooting -intershop -intershot -intersidereal -intersystem -intersystematic -intersystematical -intersystematically -intersituate -intersituated -intersituating -intersocial -intersocietal -intersociety -intersoil -intersole -intersoled -intersoling -intersolubility -intersoluble -intersomnial -intersomnious -intersonant -intersow -interspace -interspaced -interspacing -interspatial -interspatially -interspeaker -interspecial -interspecies -interspecific -interspeech -interspersal -intersperse -interspersed -interspersedly -intersperses -interspersing -interspersion -interspersions -interspheral -intersphere -interspicular -interspinal -interspinalis -interspinous -interspiral -interspiration -interspire -intersporal -intersprinkle -intersprinkled -intersprinkling -intersqueeze -intersqueezed -intersqueezing -intersshot -interstade -interstadial -interstage -interstaminal -interstapedial -interstate -interstates -interstation -interstellar -interstellary -intersterile -intersterility -intersternal -interstice -intersticed -interstices -intersticial -interstimulate -interstimulated -interstimulating -interstimulation -interstinctive -interstitial -interstitially -interstition -interstitious -interstitium -interstratify -interstratification -interstratified -interstratifying -interstreak -interstream -interstreet -interstrial -interstriation -interstrive -interstriven -interstriving -interstrove -interstructure -intersubjective -intersubjectively -intersubjectivity -intersubsistence -intersubstitution -intersuperciliary -intersusceptation -intertalk -intertangle -intertangled -intertanglement -intertangles -intertangling -intertarsal -intertask -interteam -intertear -intertentacular -intertergal -interterm -interterminal -interterritorial -intertessellation -intertestamental -intertex -intertexture -interthing -interthread -interthreaded -interthreading -interthronging -intertidal -intertidally -intertie -intertied -intertieing -interties -intertill -intertillage -intertinge -intertinged -intertinging -Intertype -intertissue -intertissued -intertoll -intertone -intertongue -intertonic -intertouch -intertown -intertrabecular -intertrace -intertraced -intertracing -intertrade -intertraded -intertrading -intertraffic -intertrafficked -intertrafficking -intertragian -intertransformability -intertransformable -intertransmissible -intertransmission -intertranspicuous -intertransversal -intertransversalis -intertransversary -intertransverse -intertrappean -intertree -intertribal -intertriginous -intertriglyph -intertrigo -intertrinitarian -intertrochanteric -intertrochlear -intertroop -intertropic -intertropical -intertropics -intertrude -intertuberal -intertubercular -intertubular -intertwin -intertwine -intertwined -intertwinement -intertwinements -intertwines -intertwining -intertwiningly -intertwist -intertwisted -intertwisting -intertwistingly -interungular -interungulate -interunion -interuniversity -interurban -interureteric -intervaginal -interval -Intervale -intervaled -intervalic -intervaling -intervalled -intervalley -intervallic -intervalling -intervallum -intervalometer -intervals -interval's -intervalvular -intervary -intervariation -intervaried -intervarietal -intervarying -intervarsity -inter-varsity -inter-'varsity -intervascular -intervein -interveinal -interveined -interveining -interveinous -intervenant -intervene -intervened -intervener -interveners -intervenes -intervenience -interveniency -intervenient -intervening -intervenium -intervenor -intervent -intervention -interventional -interventionism -interventionist -interventionists -interventions -intervention's -interventive -interventor -interventral -interventralia -interventricular -intervenue -intervenular -interverbal -interversion -intervert -intervertebra -intervertebral -intervertebrally -interverting -intervesicular -interview -interviewable -interviewed -interviewee -interviewees -interviewer -interviewers -interviewing -interviews -intervillage -intervillous -intervisibility -intervisible -intervisit -intervisitation -intervital -intervocal -intervocalic -intervocalically -intervolute -intervolution -intervolve -intervolved -intervolving -interwar -interwarred -interwarring -interweave -interweaved -interweavement -interweaver -interweaves -interweaving -interweavingly -interwed -interweld -interwhiff -interwhile -interwhistle -interwhistled -interwhistling -interwind -interwinded -interwinding -interwish -interword -interwork -interworked -interworking -interworks -interworld -interworry -interwound -interwove -interwoven -interwovenly -interwrap -interwrapped -interwrapping -interwreathe -interwreathed -interwreathing -interwrought -interwwrought -interxylary -interzygapophysial -interzonal -interzone -interzooecial -intestable -intestacy -intestacies -intestate -intestation -intestinal -intestinally -intestine -intestineness -intestines -intestine's -intestiniform -intestinovesical -intexine -intext -intextine -intexture -in-the-wool -inthral -inthrall -inthralled -inthralling -inthrallment -inthralls -inthralment -inthrals -inthrone -inthroned -inthrones -inthrong -inthroning -inthronistic -inthronizate -inthronization -inthronize -inthrow -inthrust -inti -intially -intice -intil -intill -intima -intimacy -intimacies -intimado -intimados -intimae -intimal -intimas -intimate -intimated -intimately -intimateness -intimater -intimaters -intimates -intimating -intimation -intimations -intime -intimidate -intimidated -intimidates -intimidating -intimidation -intimidations -intimidator -intimidatory -intimidity -Intimism -intimist -intimiste -intimity -intimous -intinct -intinction -intinctivity -intine -intines -intire -Intyre -intis -Intisar -intisy -intitle -intitled -intitles -intitling -intitulation -intitule -intituled -intitules -intituling -intl -intnl -into -intoed -in-toed -intolerability -intolerable -intolerableness -intolerably -intolerance -intolerances -intolerancy -intolerant -intolerantly -intolerantness -intolerated -intolerating -intoleration -intollerably -intomb -intombed -intombing -intombment -intombs -intonable -intonaci -intonaco -intonacos -intonate -intonated -intonates -intonating -intonation -intonational -intonations -intonation's -intonator -intone -intoned -intonement -intoner -intoners -intones -intoning -intoothed -in-to-out -intorsion -intort -intorted -intortillage -intorting -intortion -intorts -intortus -Intosh -intourist -intower -intown -intoxation -intoxicable -intoxicant -intoxicantly -intoxicants -intoxicate -intoxicated -intoxicatedly -intoxicatedness -intoxicates -intoxicating -intoxicatingly -intoxication -intoxications -intoxicative -intoxicatively -intoxicator -intoxicators -intr -intr. -intra -intra- -intraabdominal -intra-abdominal -intra-abdominally -intra-acinous -intra-alveolar -intra-appendicular -intra-arachnoid -intraarterial -intra-arterial -intraarterially -intra-articular -intra-atomic -intra-atrial -intra-aural -intra-auricular -intrabiontic -intrabranchial -intrabred -intrabronchial -intrabuccal -intracalicular -intracanalicular -intracanonical -intracapsular -intracardiac -intracardial -intracardially -intracarpal -intracarpellary -intracartilaginous -intracellular -intracellularly -intracephalic -intracerebellar -intracerebral -intracerebrally -intracervical -intrachordal -intracistern -intracystic -intracity -intraclitelline -intracloacal -intracoastal -intracoelomic -intracolic -intracollegiate -intracommunication -intracompany -intracontinental -intracorporeal -intracorpuscular -intracortical -intracosmic -intracosmical -intracosmically -intracostal -intracranial -intracranially -intractability -intractable -intractableness -intractably -intractile -intracutaneous -intracutaneously -intrada -intraday -intradepartment -intradepartmental -intradermal -intradermally -intradermic -intradermically -intradermo -intradistrict -intradivisional -intrado -intrados -intradoses -intradoss -intraduodenal -intradural -intraecclesiastical -intraepiphyseal -intraepithelial -intrafactory -intrafascicular -intrafissural -intrafistular -intrafoliaceous -intraformational -intrafusal -intragalactic -intragantes -intragastric -intragemmal -intragyral -intraglacial -intraglandular -intraglobular -intragroup -intragroupal -intrahepatic -intrahyoid -in-tray -intrail -intraimperial -intrait -intrajugular -intralamellar -intralaryngeal -intralaryngeally -intraleukocytic -intraligamentary -intraligamentous -intraliminal -intraline -intralingual -intralobar -intralobular -intralocular -intralogical -intralumbar -intramachine -intramammary -intramarginal -intramastoid -intramatrical -intramatrically -intramedullary -intramembranous -intrameningeal -intramental -intra-mercurial -intrametropolitan -intramyocardial -intramolecular -intramolecularly -intramontane -intramorainic -intramundane -intramural -intramuralism -intramurally -intramuscular -intramuscularly -intranarial -intranasal -intranatal -intranational -intraneous -intranet -intranetwork -intraneural -intranidal -intranquil -intranquillity -intrans -intrans. -intranscalency -intranscalent -intransferable -intransferrable -intransformable -intransfusible -intransgressible -intransient -intransigeance -intransigeancy -intransigeant -intransigeantly -intransigence -intransigences -intransigency -intransigent -intransigentism -intransigentist -intransigently -intransigents -intransitable -intransitive -intransitively -intransitiveness -intransitives -intransitivity -intransitu -intranslatable -intransmissible -intransmutability -intransmutable -intransparency -intransparent -intrant -intrants -intranuclear -intraoctave -intraocular -intraoffice -intraoral -intraorbital -intraorganization -intraossal -intraosseous -intraosteal -intraovarian -intrap -intrapair -intraparenchymatous -intraparietal -intraparochial -intraparty -intrapelvic -intrapericardiac -intrapericardial -intraperineal -intraperiosteal -intraperitoneal -intraperitoneally -intrapersonal -intrapetiolar -intraphilosophic -intrapial -intrapyretic -intraplacental -intraplant -intrapleural -intrapolar -intrapontine -intrapopulation -intraprocess -intraprocessor -intraprostatic -intraprotoplasmic -intrapsychic -intrapsychical -intrapsychically -intrapulmonary -intrarachidian -intrarectal -intrarelation -intrarenal -intraretinal -intrarhachidian -intraschool -intrascrotal -intrasegmental -intraselection -intrasellar -intraseminal -intraseptal -intraserous -intrashop -intrasynovial -intraspecies -intraspecific -intraspecifically -intraspinal -intraspinally -intrastate -intrastromal -intrasusception -intratarsal -intrate -intratelluric -intraterritorial -intratesticular -intrathecal -intrathyroid -intrathoracic -intratympanic -intratomic -intratonsillar -intratrabecular -intratracheal -intratracheally -intratropical -intratubal -intratubular -intra-urban -intra-urethral -intrauterine -intra-uterine -intravaginal -intravalvular -intravasation -intravascular -intravascularly -intravenous -intravenously -intraventricular -intraverbal -intraversable -intravertebral -intravertebrally -intravesical -intravital -intravitally -intravitam -intra-vitam -intravitelline -intravitreous -intraxylary -intrazonal -intreasure -intreat -intreatable -intreated -intreating -intreats -intrench -intrenchant -intrenched -intrencher -intrenches -intrenching -intrenchment -intrepid -intrepidity -intrepidities -intrepidly -intrepidness -intricable -intricacy -intricacies -intricate -intricately -intricateness -intrication -intrigant -intrigante -intrigantes -intrigants -intrigaunt -intrigo -intriguant -intriguante -intrigue -intrigued -intrigueproof -intriguer -intriguery -intriguers -intrigues -intriguess -intriguing -intriguingly -intrince -intrine -intrinse -intrinsic -intrinsical -intrinsicality -intrinsically -intrinsicalness -intrinsicate -intro -intro- -intro. -introactive -introceptive -introconversion -introconvertibility -introconvertible -introd -introdden -introduce -introduced -introducee -introducement -introducer -introducers -introduces -introducible -introducing -introduct -introduction -introductions -introduction's -introductive -introductively -introductor -introductory -introductorily -introductoriness -introductress -introfaction -introfy -introfied -introfier -introfies -introfying -introflex -introflexion -introgressant -introgression -introgressive -introinflection -Introit -introits -introitus -introject -introjection -introjective -intromissibility -intromissible -intromission -intromissive -intromit -intromits -intromitted -intromittence -intromittent -intromitter -intromitting -intron -introns -intropression -intropulsive -intropunitive -introreception -introrsal -introrse -introrsely -intros -introscope -introsensible -introsentient -introspect -introspectable -introspected -introspectible -introspecting -introspection -introspectional -introspectionism -introspectionist -introspectionistic -introspections -introspective -introspectively -introspectiveness -introspectivism -introspectivist -introspector -introspects -introsuction -introsume -introsuscept -introsusception -introthoracic -introtraction -introvenient -introverse -introversibility -introversible -introversion -introversions -introversive -introversively -introvert -introverted -introvertedness -introverting -introvertive -introverts -introvision -introvolution -intrudance -intrude -intruded -intruder -intruders -intruder's -intrudes -intruding -intrudingly -intrudress -intrunk -intrus -intruse -intrusion -intrusional -intrusionism -intrusionist -intrusions -intrusion's -intrusive -intrusively -intrusiveness -intrusivenesses -intruso -intrust -intrusted -intrusting -intrusts -intsv -intubate -intubated -intubates -intubating -intubation -intubationist -intubator -intubatting -intube -INTUC -intue -intuent -intuicity -intuit -intuitable -intuited -intuiting -intuition -intuitional -intuitionalism -intuitionalist -intuitionally -intuitionism -intuitionist -intuitionistic -intuitionless -intuitions -intuition's -intuitive -intuitively -intuitiveness -intuitivism -intuitivist -intuito -intuits -intumesce -intumesced -intumescence -intumescent -intumescing -intumulate -intune -inturbidate -inturgescence -inturn -inturned -inturning -inturns -intuse -intussuscept -intussusception -intussusceptive -intwine -intwined -intwinement -intwines -intwining -intwist -intwisted -intwisting -intwists -Inuit -inukshuk -inula -inulaceous -inulase -inulases -inulin -inulins -inuloid -inumbrate -inumbration -inunct -inunction -inunctum -inunctuosity -inunctuous -inundable -inundant -inundate -inundated -inundates -inundating -inundation -inundations -inundator -inundatory -inunderstandable -inunderstanding -inurbane -inurbanely -inurbaneness -inurbanity -inure -inured -inuredness -inurement -inurements -inures -inuring -inurn -inurned -inurning -inurnment -inurns -inusitate -inusitateness -inusitation -inust -inustion -inutile -inutilely -inutility -inutilities -inutilized -inutterable -inv -inv. -invaccinate -invaccination -invadable -invade -invaded -invader -invaders -invades -invading -invaginable -invaginate -invaginated -invaginating -invagination -invalescence -invaletudinary -invalid -invalidate -invalidated -invalidates -invalidating -invalidation -invalidations -invalidator -invalidcy -invalided -invalidhood -invaliding -invalidish -invalidism -invalidity -invalidities -invalidly -invalidness -invalids -invalidship -invalorous -invaluable -invaluableness -invaluably -invalued -Invar -invariability -invariable -invariableness -invariably -invariance -invariancy -invariant -invariantive -invariantively -invariantly -invariants -invaried -invars -invasion -invasionary -invasionist -invasions -invasion's -invasive -invasiveness -invecked -invect -invected -invection -invective -invectively -invectiveness -invectives -invectivist -invector -inveigh -inveighed -inveigher -inveighing -inveighs -inveigle -inveigled -inveiglement -inveigler -inveiglers -inveigles -inveigling -inveil -invein -invendibility -invendible -invendibleness -inveneme -invenient -invenit -invent -inventable -inventary -invented -inventer -inventers -inventful -inventibility -inventible -inventibleness -inventing -invention -inventional -inventionless -inventions -invention's -inventive -inventively -inventiveness -inventivenesses -inventor -inventory -inventoriable -inventorial -inventorially -inventoried -inventories -inventorying -inventory's -inventors -inventor's -inventress -inventresses -invents -inventurous -inveracious -inveracity -inveracities -Invercargill -inverebrate -inverisimilitude -inverity -inverities -inverminate -invermination -invernacular -Inverness -invernesses -Invernessshire -inversable -inversatile -inverse -inversed -inversedly -inversely -inverses -inversing -inversion -inversionist -inversions -inversive -Inverson -inversor -invert -invertant -invertase -invertebracy -invertebral -Invertebrata -invertebrate -invertebrated -invertebrateness -invertebrates -invertebrate's -inverted -invertedly -invertend -inverter -inverters -invertibility -invertible -invertibrate -invertibrates -invertile -invertin -inverting -invertive -invertor -invertors -inverts -invest -investable -invested -investible -investient -investigable -investigatable -investigate -investigated -investigates -investigating -investigatingly -investigation -investigational -investigations -investigative -investigator -investigatory -investigatorial -investigators -investigator's -investing -investion -investitive -investitor -investiture -investitures -investment -investments -investment's -investor -investors -investor's -invests -investure -inveteracy -inveteracies -inveterate -inveterately -inveterateness -inveteration -inviability -inviabilities -inviable -inviably -invict -invicted -invictive -invidia -invidious -invidiously -invidiousness -invigilance -invigilancy -invigilate -invigilated -invigilating -invigilation -invigilator -invigor -invigorant -invigorate -invigorated -invigorates -invigorating -invigoratingly -invigoratingness -invigoration -invigorations -invigorative -invigoratively -invigorator -invigour -invile -invillage -invinate -invination -invincibility -invincibilities -invincible -invincibleness -invincibly -inviolability -inviolabilities -inviolable -inviolableness -inviolably -inviolacy -inviolate -inviolated -inviolately -inviolateness -invious -inviousness -invirile -invirility -invirtuate -inviscate -inviscation -inviscerate -inviscid -inviscidity -invised -invisibility -invisibilities -invisible -invisibleness -invisibly -invision -invitable -invital -invitant -invitation -invitational -invitations -invitation's -invitatory -invite -invited -invitee -invitees -invitement -inviter -inviters -invites -invitiate -inviting -invitingly -invitingness -invitress -invitrifiable -invivid -invocable -invocant -invocate -invocated -invocates -invocating -invocation -invocational -invocations -invocation's -invocative -invocator -invocatory -invoy -invoice -invoiced -invoices -invoicing -invoke -invoked -invoker -invokers -invokes -invoking -involatile -involatility -involucel -involucelate -involucelated -involucellate -involucellated -involucra -involucral -involucrate -involucre -involucred -involucres -involucriform -involucrum -involuntary -involuntarily -involuntariness -involute -involuted -involutedly -involute-leaved -involutely -involutes -involuting -involution -involutional -involutionary -involutions -involutory -involutorial -involve -involved -involvedly -involvedness -involvement -involvements -involvement's -involvent -involver -involvers -involves -involving -invt -invt. -invulgar -invulnerability -invulnerable -invulnerableness -invulnerably -invulnerate -invultuation -invultvation -inwale -inwall -inwalled -inwalling -inwalls -inwandering -inward -inward-bound -inwardly -inwardness -inwards -INWATS -inweave -inweaved -inweaves -inweaving -inwedged -inweed -inweight -inwheel -inwick -inwind -inwinding -inwinds -inwit -inwith -Inwood -inwork -inworks -inworn -inwound -inwove -inwoven -inwrap -inwrapment -inwrapped -inwrapping -inwraps -inwrapt -inwreathe -inwreathed -inwreathing -inwrit -inwritten -inwrought -IO -yo -io- -Ioab -Yoakum -Ioannides -Ioannina -YOB -Iobates -yobbo -yobboes -yobbos -yobi -yobs -IOC -IOCC -yocco -yochel -yock -yocked -yockel -yockernut -yocking -yocks -iocs -IOD -yod -iod- -iodal -Iodama -Iodamoeba -iodate -iodated -iodates -iodating -iodation -iodations -iode -yode -yodel -yodeled -yodeler -yodelers -yodeling -yodelist -yodelled -yodeller -yodellers -yodelling -yodels -Yoder -yodh -iodhydrate -iodhydric -iodhydrin -yodhs -iodic -iodid -iodide -iodides -iodids -iodiferous -iodimetry -iodimetric -iodin -iodinate -iodinated -iodinates -iodinating -iodination -iodine -iodines -iodinium -iodinophil -iodinophile -iodinophilic -iodinophilous -iodins -iodyrite -iodisation -iodism -iodisms -iodite -iodization -iodize -iodized -iodizer -iodizers -iodizes -iodizing -yodle -yodled -yodler -yodlers -yodles -yodling -iodo -iodo- -iodobehenate -iodobenzene -iodobromite -iodocasein -iodochlorid -iodochloride -iodochromate -iodocresol -iododerma -iodoethane -iodoform -iodoforms -iodogallicin -iodohydrate -iodohydric -iodohydrin -Iodol -iodols -iodomercurate -iodomercuriate -iodomethane -iodometry -iodometric -iodometrical -iodometrically -iodonium -iodophor -iodophors -iodoprotein -iodopsin -iodopsins -iodoso -iodosobenzene -iodospongin -iodotannic -iodotherapy -iodothyrin -iodous -iodoxy -iodoxybenzene -yods -yoe -IOF -Yoga -yogas -yogasana -yogee -yogeeism -yogees -yogh -yoghourt -yoghourts -yoghs -yoghurt -yoghurts -Yogi -Yogic -Yogin -yogini -yoginis -yogins -yogis -Yogism -Yogist -yogoite -yogurt -yogurts -yo-heave-ho -yohimbe -yohimbenine -yohimbi -yohimbin -yohimbine -yohimbinization -yohimbinize -Yoho -yo-ho -yo-ho-ho -yohourt -yoi -yoy -Ioyal -yoick -yoicks -yoyo -Yo-yo -Yo-Yos -yojan -yojana -Yojuane -yok -yokage -yoke -yokeable -yokeableness -yokeage -yoked -yokefellow -yoke-footed -yokel -yokeldom -yokeless -yokelish -yokelism -yokelry -yokels -yokemate -yokemates -yokemating -yoker -yokes -yoke's -yoke-toed -yokewise -yokewood -yoky -yoking -yo-kyoku -Yokkaichi -Yoko -Yokohama -Yokoyama -Yokosuka -yokozuna -yokozunas -yoks -Yokum -Yokuts -Iola -Yola -Yolanda -Iolande -Yolande -Yolane -Iolanthe -Yolanthe -Iolaus -yolden -Yoldia -yoldring -Iole -Iolenta -Yolyn -iolite -iolites -yolk -yolked -yolky -yolkier -yolkiest -yolkiness -yolkless -yolks -Yolo -IOM -yom -yomer -yomim -yomin -Yompur -Yomud -ion -yon -Iona -Yona -Yonah -Yonatan -Yoncalla -yoncopin -yond -yonder -yondmost -yondward -Ione -Ionesco -Iong -Yong -Ioni -yoni -Ionia -Ionian -Ionic -yonic -ionical -Ionicism -ionicity -ionicities -Ionicization -Ionicize -ionics -Ionidium -Yonina -yonis -ionisable -ionisation -ionise -ionised -ioniser -ionises -ionising -Ionism -Ionist -Yonit -Yonita -ionium -ioniums -ionizable -Ionization -ionizations -Ionize -ionized -ionizer -ionizers -ionizes -ionizing -Yonkalla -yonker -Yonkers -Yonkersite -IONL -Yonne -yonner -yonnie -ionogen -ionogenic -ionogens -ionomer -ionomers -ionone -ionones -ionopause -ionophore -Ionornis -ionosphere -ionospheres -ionospheric -ionospherically -Ionoxalis -ions -yonside -yont -iontophoresis -Yoo -IOOF -yoo-hoo -yook -Yoong -yoop -IOP -ioparameters -ior -yor -Yordan -yore -yores -yoretime -Yorgen -Iorgo -Yorgo -Iorgos -Yorgos -Yorick -Iorio -York -Yorke -Yorker -yorkers -Yorkish -Yorkist -Yorklyn -Yorks -Yorkshire -Yorkshireism -Yorkshireman -Yorksppings -Yorkton -Yorktown -Yorkville -yorlin -Iormina -Iormungandr -iortn -Yoruba -Yorubaland -Yoruban -Yorubas -Ios -Yosemite -Iosep -Yoshi -Yoshihito -Yoshiko -Yoshio -Yoshkar-Ola -Ioskeha -Yost -IOT -yot -IOTA -iotacism -yotacism -iotacisms -iotacismus -iotacist -yotacize -iotas -yote -iotization -iotize -iotized -iotizing -IOU -you -you-all -you-be-damned -you-be-damnedness -youd -you'd -youden -youdendrift -youdith -youff -you-know-what -you-know-who -youl -you'll -Youlou -Youlton -Young -youngberry -youngberries -young-bladed -young-chinned -young-conscienced -young-counseled -young-eyed -Younger -youngers -youngest -youngest-born -young-headed -younghearted -young-yeared -youngish -young-ladydom -young-ladyfied -young-ladyhood -young-ladyish -young-ladyism -young-ladylike -young-ladyship -younglet -youngly -youngling -younglings -young-looking -Younglove -Youngman -young-manhood -young-manly -young-manlike -young-manliness -young-mannish -young-mannishness -young-manship -youngness -young-old -Youngran -youngs -youngster -youngsters -youngster's -Youngstown -Youngsville -youngth -Youngtown -youngun -young-winged -young-womanhood -young-womanish -young-womanishness -young-womanly -young-womanlike -young-womanship -Youngwood -younker -younkers -Yountville -youp -youpon -youpons -iour -your -youre -you're -yourn -your'n -yours -yoursel -yourself -yourselves -yourt -ious -yous -youse -Youskevitch -youstir -Yousuf -youth -youth-bold -youth-consuming -youthen -youthened -youthening -youthens -youthes -youthful -youthfully -youthfullity -youthfulness -youthfulnesses -youthhead -youthheid -youthhood -youthy -youthily -youthiness -youthless -youthlessness -youthly -youthlike -youthlikeness -youths -youthsome -youthtide -youthwort -you-uns -youve -you've -youward -youwards -youze -Ioved -yoven -Iover -Ioves -Yovonnda -IOW -yow -Iowa -Iowan -iowans -Iowas -yowden -yowe -yowed -yowes -yowie -yowies -yowing -yowl -yowled -yowley -yowler -yowlers -yowling -yowlring -yowls -yows -iowt -yowt -yox -Ioxus -IP -YP -IPA -y-painted -Ipalnemohuani -Ipava -IPBM -IPC -IPCC -IPCE -IPCS -IPDU -IPE -ipecac -ipecacs -ipecacuanha -ipecacuanhic -yperite -yperites -iph -Iphagenia -Iphianassa -Iphicles -Iphidamas -Iphigenia -Iphigeniah -Iphimedia -Iphinoe -Iphis -Iphition -Iphitus -Iphlgenia -Iphthime -IPI -IPY -Ipiales -ipid -Ipidae -ipil -ipilipil -Ipiutak -IPL -IPLAN -IPM -IPMS -IPO -ipocras -ypocras -Ipoctonus -Ipoh -y-pointing -ipomea -Ipomoea -ipomoeas -ipomoein -Yponomeuta -Yponomeutid -Yponomeutidae -Y-potential -ippi-appa -ipr -Ypres -iproniazid -IPS -Ipsambul -YPSCE -IPSE -ipseand -ipsedixitish -ipsedixitism -ipsedixitist -ipseity -Ypsilanti -ipsilateral -ipsilaterally -ypsiliform -ypsiloid -ipso -Ipsus -Ipswich -IPT -Ypurinan -YPVS -IPX -IQ -Iqbal -IQR -iqs -IQSY -Yquem -Iquique -Iquitos -IR -yr -ir- -Ir. -IRA -Iraan -iracund -iracundity -iracundulous -irade -irades -IRAF -I-railed -Irak -Iraki -Irakis -Iraklion -Iran -Iran. -Irani -Iranian -iranians -Iranic -Iranism -Iranist -Iranize -Irano-semite -y-rapt -Iraq -Iraqi -Iraqian -Iraqis -IRAS -Irasburg -irascent -irascibility -irascibilities -irascible -irascibleness -irascibly -irate -irately -irateness -irater -iratest -Irazu -Irby -Irbid -Irbil -irbis -yrbk -IRBM -IRC -irchin -IRD -IRDS -IRE -Ire. -ired -Iredale -Iredell -ireful -irefully -irefulness -Yreka -Ireland -Irelander -ireland's -ireless -Irena -Irenaeus -irenarch -Irene -irenic -irenica -irenical -irenically -irenicism -irenicist -irenicon -irenics -irenicum -ireos -ires -ire's -Iresine -Ireton -Irfan -IRG -IrGael -Irgun -Irgunist -Iri -irian -Iriartea -Iriarteaceae -Iricise -Iricised -Iricising -Iricism -Iricize -Iricized -Iricizing -irid -irid- -Iridaceae -iridaceous -iridadenosis -iridal -iridalgia -iridate -iridauxesis -iridectome -iridectomy -iridectomies -iridectomise -iridectomised -iridectomising -iridectomize -iridectomized -iridectomizing -iridectropium -iridemia -iridencleisis -iridentropium -irideous -irideremia -irides -iridesce -iridescence -iridescences -iridescency -iridescent -iridescently -iridial -iridian -iridiate -iridic -iridical -iridin -iridine -iridiocyte -iridiophore -iridioplatinum -iridious -Iridis -Iridissa -iridite -iridium -iridiums -iridization -iridize -iridized -iridizing -irido -irido- -iridoavulsion -iridocapsulitis -iridocele -iridoceratitic -iridochoroiditis -iridocyclitis -iridocyte -iridocoloboma -iridoconstrictor -iridodesis -iridodiagnosis -iridodialysis -iridodonesis -iridokinesia -iridoline -iridomalacia -Iridomyrmex -iridomotor -iridoncus -iridoparalysis -iridophore -iridoplegia -iridoptosis -iridopupillary -iridorhexis -iridosclerotomy -iridosmine -iridosmium -iridotasis -iridotome -iridotomy -iridotomies -iridous -irids -Iridum -Irina -iring -Iris -Irisa -irisate -irisated -irisation -iriscope -irised -irises -Irish -Irish-american -Irish-born -Irish-bred -Irish-canadian -Irish-english -Irisher -irish-gaelic -Irish-grown -Irishy -Irishian -Irishise -Irishised -Irishising -Irishism -Irishize -Irishized -Irishizing -Irishly -Irishman -Irishmen -Irishness -Irishry -Irish-speaking -Irishwoman -Irishwomen -irisin -iris-in -irising -irislike -iris-out -irisroot -Irita -iritic -iritis -iritises -Irja -irk -irked -irking -Irklion -irks -irksome -irksomely -irksomeness -Irkutsk -IRL -IRM -Irma -Irme -Irmgard -Irmina -Irmine -Irmo -IRMS -IRN -IRO -Irob-saho -Iroha -irok -iroko -iron -ironback -iron-banded -ironbark -iron-bark -ironbarks -iron-barred -Ironbelt -iron-black -ironbound -iron-bound -iron-boweled -iron-braced -iron-branded -iron-burnt -ironbush -iron-calked -iron-capped -iron-cased -ironclad -ironclads -iron-clenched -iron-coated -iron-colored -iron-cored -Irondale -Irondequoit -irone -ironed -iron-enameled -ironer -ironers -ironer-up -irones -iron-faced -iron-fastened -ironfisted -ironflower -iron-forged -iron-founder -iron-free -iron-gloved -iron-gray -iron-grated -iron-grey -Iron-Guard -iron-guarded -ironhanded -iron-handed -ironhandedly -ironhandedness -ironhard -iron-hard -ironhead -ironheaded -ironheads -ironhearted -iron-hearted -ironheartedly -iron-heartedly -ironheartedness -iron-heartedness -iron-heeled -iron-hooped -irony -Ironia -ironic -ironical -ironically -ironicalness -ironice -ironies -ironing -ironings -ironiously -irony-proof -ironish -ironism -ironist -ironists -ironize -ironized -ironizes -iron-jawed -iron-jointed -iron-knotted -ironless -ironly -ironlike -iron-lined -ironmaker -ironmaking -ironman -iron-man -iron-marked -ironmaster -ironmen -iron-mine -iron-mold -ironmonger -ironmongery -ironmongeries -ironmongering -iron-mooded -iron-mould -iron-nailed -iron-nerved -ironness -ironnesses -iron-ore -iron-pated -iron-railed -iron-red -iron-ribbed -iron-riveted -Irons -iron-sand -iron-sceptered -iron-sheathed -ironshod -ironshot -iron-sick -Ironside -ironsided -Ironsides -ironsmith -iron-souled -iron-spotted -iron-stained -ironstone -ironstones -iron-strapped -iron-studded -iron-tipped -iron-tired -Ironton -iron-toothed -iron-tree -iron-visaged -ironware -ironwares -ironweed -ironweeds -iron-willed -iron-winged -iron-witted -ironwood -ironwoods -iron-worded -ironwork -ironworked -ironworker -ironworkers -ironworking -ironworks -ironwort -Iroquoian -iroquoians -Iroquois -IROR -irous -irpe -Irpex -IRQ -Irra -irradiance -irradiancy -irradiant -irradiate -irradiated -irradiates -irradiating -irradiatingly -irradiation -irradiations -irradiative -irradiator -irradicable -irradicably -irradicate -irradicated -irrarefiable -irrate -irrationability -irrationable -irrationably -irrational -irrationalise -irrationalised -irrationalising -irrationalism -irrationalist -irrationalistic -irrationality -irrationalities -irrationalize -irrationalized -irrationalizing -irrationally -irrationalness -irrationals -Irrawaddy -irreal -irreality -irrealizable -irrebuttable -irreceptive -irreceptivity -irreciprocal -irreciprocity -irreclaimability -irreclaimable -irreclaimableness -irreclaimably -irreclaimed -irrecognition -irrecognizability -irrecognizable -irrecognizably -irrecognizant -irrecollection -irreconcilability -irreconcilabilities -irreconcilable -irreconcilableness -irreconcilably -irreconcile -irreconciled -irreconcilement -irreconciliability -irreconciliable -irreconciliableness -irreconciliably -irreconciliation -irrecordable -irrecoverable -irrecoverableness -irrecoverably -irrecuperable -irrecurable -irrecusable -irrecusably -irred -irredeemability -irredeemable -irredeemableness -irredeemably -irredeemed -irredenta -irredential -Irredentism -Irredentist -irredentists -irredressibility -irredressible -irredressibly -irreducibility -irreducibilities -irreducible -irreducibleness -irreducibly -irreductibility -irreductible -irreduction -irreferable -irreflection -irreflective -irreflectively -irreflectiveness -irreflexive -irreformability -irreformable -irrefragability -irrefragable -irrefragableness -irrefragably -irrefrangibility -irrefrangible -irrefrangibleness -irrefrangibly -irrefusable -irrefutability -irrefutable -irrefutableness -irrefutably -irreg -irreg. -irregardless -irregeneracy -irregenerate -irregeneration -irregular -irregularism -irregularist -irregularity -irregularities -irregularize -irregularly -irregularness -irregulars -irregulate -irregulated -irregulation -irregulous -irrejectable -irrelapsable -irrelate -irrelated -irrelation -irrelative -irrelatively -irrelativeness -irrelevance -irrelevances -irrelevancy -irrelevancies -irrelevant -irrelevantly -irreliability -irrelievable -irreligion -irreligionism -irreligionist -irreligionize -irreligiosity -irreligious -irreligiously -irreligiousness -irreluctant -irremeable -irremeably -irremediable -irremediableness -irremediably -irremediless -irrememberable -irremissibility -irremissible -irremissibleness -irremissibly -irremission -irremissive -irremittable -irremovability -irremovable -irremovableness -irremovably -irremunerable -irrenderable -irrenewable -irrenowned -irrenunciable -irrepair -irrepairable -irreparability -irreparable -irreparableness -irreparably -irrepassable -irrepatriable -irrepealability -irrepealable -irrepealableness -irrepealably -irrepentance -irrepentant -irrepentantly -irrepetant -irreplacable -irreplacably -irreplaceability -irreplaceable -irreplaceableness -irreplaceably -irrepleviable -irreplevisable -irreportable -irreprehensibility -irreprehensible -irreprehensibleness -irreprehensibly -irrepresentable -irrepresentableness -irrepressibility -irrepressible -irrepressibleness -irrepressibly -irrepressive -irreproachability -irreproachable -irreproachableness -irreproachably -irreproducibility -irreproducible -irreproductive -irreprovable -irreprovableness -irreprovably -irreption -irreptitious -irrepublican -irreputable -irresilience -irresiliency -irresilient -irresistable -irresistably -irresistance -irresistibility -irresistible -irresistibleness -irresistibly -irresistless -irresolubility -irresoluble -irresolubleness -irresolute -irresolutely -irresoluteness -irresolution -irresolutions -irresolvability -irresolvable -irresolvableness -irresolved -irresolvedly -irresonance -irresonant -irrespectability -irrespectable -irrespectful -irrespective -irrespectively -irrespirable -irrespondence -irresponsibility -irresponsibilities -irresponsible -irresponsibleness -irresponsibly -irresponsive -irresponsiveness -irrestrainable -irrestrainably -irrestrictive -irresultive -irresuscitable -irresuscitably -irretention -irretentive -irretentiveness -irreticence -irreticent -irretraceable -irretraceably -irretractable -irretractile -irretrievability -irretrievable -irretrievableness -irretrievably -irreturnable -irrevealable -irrevealably -irreverence -irreverences -irreverend -irreverendly -irreverent -irreverential -irreverentialism -irreverentially -irreverently -irreversibility -irreversible -irreversibleness -irreversibly -irrevertible -irreviewable -irrevisable -irrevocability -irrevocable -irrevocableness -irrevocably -irrevoluble -irrhation -irride -irridenta -irrigable -irrigably -irrigant -irrigate -irrigated -irrigates -irrigating -irrigation -irrigational -irrigationist -irrigations -irrigative -irrigator -irrigatory -irrigatorial -irrigators -Irrigon -irriguous -irriguousness -irrisible -irrision -irrisor -irrisory -Irrisoridae -irritability -irritabilities -irritable -irritableness -irritably -irritament -irritancy -irritancies -irritant -irritants -irritate -irritated -irritatedly -irritates -irritating -irritatingly -irritation -irritation-proof -irritations -irritative -irritativeness -irritator -irritatory -irrite -Irritila -irritomotile -irritomotility -irrogate -irrorate -irrorated -irroration -irrotational -irrotationally -irrubrical -irrugate -irrumation -irrupt -irrupted -irruptible -irrupting -irruption -irruptions -irruptive -irruptively -irrupts -IRS -YRS -yrs. -IRSG -IRTF -Irtish -Irtysh -Irus -Irv -Irvin -Irvine -Irving -Irvingesque -Irvingiana -Irvingism -Irvingite -Irvington -Irvona -Irwin -Irwinn -Irwinville -is -i's -ys -is- -y's -Is. -ISA -Isaac -Isaacs -Isaacson -Isaak -Isaban -Isabea -Isabeau -Isabel -Ysabel -Isabela -isabelina -Isabelita -isabelite -Isabella -Isabelle -Isabelline -isabnormal -Isac -Isacco -isaconitine -isacoustic -isadelphous -isadnormal -Isador -Isadora -Isadore -isagoge -isagoges -isagogic -isagogical -isagogically -isagogics -isagon -Isahella -Isai -Isaiah -Isaian -Isaianic -Isaias -Ysaye -Isak -isallobar -isallobaric -isallotherm -ISAM -isamin -isamine -Isamu -Isander -isandrous -isanemone -isangoma -isanomal -isanomalous -isanthous -Isanti -isapostolic -Isar -Isaria -isarioid -isarithm -isarithms -ISAS -isat- -isatate -isatic -isatid -isatide -isatin -isatine -isatines -isatinic -isatins -isation -Isatis -isatogen -isatogenic -Isauria -Isaurian -isauxesis -isauxetic -Isawa -isazoxy -isba -isbas -ISBD -Isbel -Isbella -ISBN -Isborne -ISC -y-scalded -Iscariot -Iscariotic -Iscariotical -Iscariotism -ISCH -ischaemia -ischaemic -ischar -ischchia -ischemia -ischemias -ischemic -Ischepolis -Ischia -ischiac -ischiadic -ischiadicus -ischial -ischialgia -ischialgic -ischiatic -ischidrosis -ischio- -ischioanal -ischiobulbar -ischiocapsular -ischiocaudal -ischiocavernosus -ischiocavernous -ischiocele -ischiocerite -ischiococcygeal -Ischyodus -ischiofemoral -ischiofibular -ischioiliac -ischioneuralgia -ischioperineal -ischiopodite -ischiopubic -ischiopubis -ischiorectal -ischiorrhogic -ischiosacral -ischiotibial -ischiovaginal -ischiovertebral -Ischys -ischium -ischocholia -ischuretic -ischury -ischuria -iscose -ISDN -ISDT -ise -Iseabal -ised -ISEE -Isegrim -Iselin -isenergic -Isenland -Isenstein -isenthalpic -isentrope -isentropic -isentropically -isepiptesial -isepiptesis -Yser -Isere -iserine -iserite -isethionate -isethionic -Iseult -Yseult -Yseulta -Yseulte -Iseum -ISF -Isfahan -ISFUG -ish -Ishan -Y-shaped -Ish-bosheth -Isherwood -Ishii -ishime -I-ship -Ishmael -Ishmaelite -Ishmaelitic -Ishmaelitish -Ishmaelitism -Ishmul -Ishpeming -ishpingo -ishshakku -Ishtar -Ishum -Ishvara -ISI -ISY -Isia -Isiac -Isiacal -Isiah -Isiahi -isicle -Isidae -isidia -isidiiferous -isidioid -isidiophorous -isidiose -isidium -isidoid -Isidor -Isidora -Isidore -Isidorean -Isidorian -Isidoric -Isidoro -Isidorus -Isidro -Isimud -Isin -Isinai -isindazole -Ising -isinglass -ising-star -ISIS -is-it -isize -Iskenderun -Isl -Isla -Islaen -Islay -Islam -Islamabad -Islamic -Islamisation -Islamise -Islamised -Islamising -Islamism -Islamist -Islamistic -Islamite -Islamitic -Islamitish -Islamization -Islamize -Islamized -Islamizing -Islamorada -Island -island-belted -island-born -island-contained -island-dotted -island-dweller -islanded -islander -islanders -islandhood -island-hop -islandy -islandic -islanding -islandish -islandless -islandlike -islandman -islandmen -islandology -islandologist -islandress -islandry -islands -island-strewn -island-studded -Islandton -Isle -Islean -Isleana -isled -Isleen -Islek -isleless -isleman -isles -isle's -Islesboro -Islesford -islesman -islesmen -islet -Isleta -isleted -Isleton -islets -islet's -isleward -isling -Islington -Islip -ISLM -islot -isls -ISLU -ism -Isma -Ismael -ismaelian -Ismaelism -Ismaelite -Ismaelitic -Ismaelitical -Ismaelitish -Ismay -Ismaili -Ismailia -Ismailian -Ismailiya -Ismailite -ismal -Isman -Ismarus -ismatic -ismatical -ismaticalness -ismdom -Ismene -Ismenus -Ismet -ismy -isms -ISN -isnad -Isnardia -isnt -isn't -ISO -YSO -iso- -isoabnormal -isoagglutination -isoagglutinative -isoagglutinin -isoagglutinogen -isoalantolactone -isoallyl -isoalloxazine -isoamarine -isoamid -isoamide -isoamyl -isoamylamine -isoamylene -isoamylethyl -isoamylidene -isoantibody -isoantigen -isoantigenic -isoantigenicity -isoapiole -isoasparagine -isoaurore -isobar -isobarbaloin -isobarbituric -isobare -isobares -isobaric -isobarism -isobarometric -isobars -isobase -isobath -isobathic -isobathytherm -isobathythermal -isobathythermic -isobaths -Isobel -isobenzofuran -isobilateral -isobilianic -isobiogenetic -isoborneol -isobornyl -isobront -isobronton -isobutane -isobutene -isobutyl -isobutylene -isobutyraldehyde -isobutyrate -isobutyric -isobutyryl -isocamphor -isocamphoric -isocaproic -isocarbostyril -Isocardia -Isocardiidae -isocarpic -isocarpous -isocellular -isocephaly -isocephalic -isocephalism -isocephalous -isoceraunic -isocercal -isocercy -isochasm -isochasmic -isocheim -isocheimal -isocheimenal -isocheimic -isocheimonal -isocheims -isochela -isochimal -isochime -isochimenal -isochimes -isochlor -isochlorophyll -isochlorophyllin -isocholanic -isocholesterin -isocholesterol -isochor -isochore -isochores -isochoric -isochors -isochromatic -isochron -isochronal -isochronally -isochrone -isochrony -isochronic -isochronical -isochronism -isochronize -isochronized -isochronizing -isochronon -isochronous -isochronously -isochrons -isochroous -isocyanate -isocyanic -isocyanid -isocyanide -isocyanin -isocyanine -isocyano -isocyanogen -isocyanurate -isocyanuric -isocyclic -isocymene -isocinchomeronic -isocinchonine -isocytic -isocitric -isoclasite -isoclimatic -isoclinal -isoclinally -isocline -isoclines -isoclinic -isoclinically -isocodeine -isocola -isocolic -isocolon -isocoria -isocorybulbin -isocorybulbine -isocorydine -isocoumarin -isocracy -isocracies -isocrat -Isocrates -isocratic -isocreosol -isocrymal -isocryme -isocrymic -isocrotonic -isodactylism -isodactylous -ISODE -isodef -isodiabatic -isodialuric -isodiametric -isodiametrical -isodiaphere -isodiazo -isodiazotate -isodimorphic -isodimorphism -isodimorphous -isodynamia -isodynamic -isodynamical -isodynamous -isodomic -isodomon -isodomous -isodomum -isodont -isodontous -isodose -isodrin -isodrome -isodrosotherm -isodulcite -isodurene -isoelastic -isoelectric -isoelectrically -isoelectronic -isoelectronically -isoelemicin -isoemodin -isoenergetic -isoenzymatic -isoenzyme -isoenzymic -isoerucic -Isoetaceae -Isoetales -Isoetes -isoeugenol -isoflavone -isoflor -isogam -isogamete -isogametic -isogametism -isogamy -isogamic -isogamies -isogamous -isogen -isogeneic -isogenesis -isogenetic -isogeny -isogenic -isogenies -isogenotype -isogenotypic -isogenous -isogeotherm -isogeothermal -isogeothermic -isogynous -isogyre -isogloss -isoglossal -isoglosses -isognathism -isognathous -isogon -isogonal -isogonality -isogonally -isogonals -isogone -isogones -isogony -isogonic -isogonics -isogonies -isogoniostat -isogonism -isogons -isogradient -isograft -isogram -isograms -isograph -isography -isographic -isographical -isographically -isographs -isogriv -isogrivs -isohaline -isohalsine -isohel -isohels -isohemolysis -isohemopyrrole -isoheptane -isohesperidin -isohexyl -isohydric -isohydrocyanic -isohydrosorbic -isohyet -isohyetal -isohyets -isohume -isoimmune -isoimmunity -isoimmunization -isoimmunize -isoindazole -isoindigotin -isoindole -isoyohimbine -isoionone -isokeraunic -isokeraunographic -isokeraunophonic -Isokontae -isokontan -isokurtic -Isola -isolability -isolable -isolapachol -isolatable -isolate -isolated -isolatedly -isolates -isolating -isolation -isolationalism -isolationalist -isolationalists -isolationism -isolationist -isolationists -isolations -isolative -isolator -isolators -Isolda -Isolde -Ysolde -isolead -isoleads -isolecithal -isolette -isoleucine -isolex -isolichenin -isoline -isolines -isolinolenic -isolysin -isolysis -isoln -isolog -isology -isologous -isologs -isologue -isologues -Isoloma -Isolt -Isom -isomagnetic -isomaltose -isomastigate -isomelamine -isomenthone -isomer -Isomera -isomerase -isomere -isomery -isomeric -isomerical -isomerically -isomeride -isomerism -isomerization -isomerize -isomerized -isomerizing -isomeromorphism -isomerous -isomers -isometry -isometric -isometrical -isometrically -isometrics -isometries -isometrograph -isometropia -Isomyaria -isomyarian -isomorph -isomorphic -isomorphically -isomorphism -isomorphisms -isomorphism's -isomorphous -isomorphs -ison -isoneph -isonephelic -isonergic -isoniazid -isonicotinic -isonym -isonymy -isonymic -isonitramine -isonitril -isonitrile -isonitro -isonitroso -isonomy -isonomic -isonomies -isonomous -isonuclear -Isonville -Isonzo -ISOO -isooctane -iso-octane -isooleic -isoosmosis -iso-osmotic -ISOP -isopach -isopachous -isopachs -isopag -isoparaffin -isopathy -isopectic -isopedin -isopedine -isopelletierin -isopelletierine -isopentane -isopentyl -isoperimeter -isoperimetry -isoperimetric -isoperimetrical -isopetalous -isophanal -isophane -isophasal -isophene -isophenomenal -isophylly -isophyllous -isophone -isophoria -isophorone -isophotal -isophote -isophotes -isophthalic -isophthalyl -isopycnal -isopycnic -isopicramic -isopiestic -isopiestically -isopilocarpine -isopyre -isopyromucic -isopyrrole -isoplere -isopleth -isoplethic -isopleths -Isopleura -isopleural -isopleuran -isopleure -isopleurous -isopod -Isopoda -isopodan -isopodans -isopodiform -isopodimorphous -isopodous -isopods -isopogonous -isopoly -isopolite -isopolity -isopolitical -isopor -isoporic -isoprenaline -isoprene -isoprenes -isoprenoid -Isoprinosine -isopropanol -isopropenyl -isopropyl -isopropylacetic -isopropylamine -isopropylideneacetone -isoproterenol -isopsephic -isopsephism -Isoptera -isopterous -isoptic -isopulegone -isopurpurin -isoquercitrin -isoquinine -isoquinoline -isorcinol -isorhamnose -isorhythm -isorhythmic -isorhythmically -isorhodeose -isorithm -isorosindone -isorrhythmic -isorropic -isort -isosaccharic -isosaccharin -isoscele -isosceles -isoscope -isoseismal -isoseismic -isoseismical -isoseist -isoserine -isosmotic -isosmotically -isospin -isospins -Isospondyli -isospondylous -isospore -isospory -isosporic -isospories -isosporous -isostacy -isostasy -isostasies -isostasist -isostatic -isostatical -isostatically -isostemony -isostemonous -isoster -isostere -isosteric -isosterism -isostrychnine -isostructural -isosuccinic -isosulphide -isosulphocyanate -isosulphocyanic -isosultam -isotac -isotach -isotachs -isotactic -isoteles -isotely -isoteniscope -isotere -isoteric -isotheral -isothere -isotheres -isotherm -isothermal -isothermally -isothermic -isothermical -isothermobath -isothermobathic -isothermobaths -isothermous -isotherms -isotherombrose -isothiocyanates -isothiocyanic -isothiocyano -isothujone -isotimal -isotimic -isotype -isotypes -isotypic -isotypical -isotome -isotomous -isotone -isotones -isotony -isotonia -isotonic -isotonically -isotonicity -isotope -isotopes -isotope's -isotopy -isotopic -isotopically -isotopies -isotopism -isotrehalose -Isotria -isotrimorphic -isotrimorphism -isotrimorphous -isotron -isotronic -isotrope -isotropy -isotropic -isotropies -isotropil -isotropism -isotropous -iso-urea -iso-uretine -iso-uric -isovalerate -isovalerianate -isovalerianic -isovaleric -isovalerone -isovaline -isovanillic -isovoluminal -isoxanthine -isoxazine -isoxazole -isoxylene -isoxime -isozyme -isozymes -isozymic -isozooid -ispaghul -Ispahan -I-spy -ISPM -ispraynik -ispravnik -ISR -Israel -Israeli -Israelis -Israelite -israelites -Israeliteship -Israelitic -Israelitish -Israelitism -Israelitize -Israfil -ISRG -ISS -Issachar -Issacharite -Issayeff -issanguila -Issaquah -y-ssed -Issedoi -Issedones -Issei -isseis -Yssel -ISSI -Issy -Issiah -Issie -Issyk-Kul -Issy-les-Molineux -issite -ISSN -issuable -issuably -issuance -issuances -issuant -issue -issued -issueless -issuer -issuers -issues -issuing -Issus -ist -YST -Istachatta -istana -Istanbul -ister -Isth -Isth. -isthm -isthmal -isthmectomy -isthmectomies -isthmi -Isthmia -isthmial -Isthmian -isthmians -isthmiate -isthmic -isthmics -isthmist -isthmistic -isthmistical -isthmistics -isthmoid -isthmus -isthmuses -istic -istiophorid -Istiophoridae -Istiophorus -istle -istles -istoke -Istria -Istrian -Istvaeones -Istvan -ISUP -isuret -isuretine -Isuridae -isuroid -Isurus -Isus -ISV -Iswara -isz -IT -YT -IT&T -ITA -itabirite -Itabuna -itacism -itacist -itacistic -itacolumite -itaconate -itaconic -Itagaki -itai -Itajai -Ital -Ital. -Itala -Itali -Italy -Italia -Italian -Italianate -Italianated -Italianately -Italianating -Italianation -Italianesque -italianiron -Italianisation -Italianise -Italianised -Italianish -Italianising -Italianism -Italianist -Italianity -Italianization -Italianize -Italianized -Italianizer -Italianizing -Italianly -italians -italian's -Italic -Italical -Italically -Italican -Italicanist -Italici -Italicism -italicization -italicizations -italicize -italicized -italicizes -italicizing -italics -italiot -Italiote -italite -Italo -Italo- -Italo-austrian -Italo-byzantine -Italo-celt -Italo-classic -Italo-grecian -Italo-greek -Italo-hellenic -Italo-hispanic -Italomania -Italon -Italophil -Italophile -Italo-serb -Italo-slav -Italo-swiss -Italo-turkish -itamalate -itamalic -ita-palm -Itapetininga -Itasca -itatartaric -itatartrate -itauba -Itaves -ITC -Itch -itched -itcheoglan -itches -itchy -itchier -itchiest -itchily -itchiness -itching -itchingly -itchings -itchless -itchproof -itchreed -itchweed -itchwood -ITCZ -itcze -itd -it'd -YTD -ite -Itea -Iteaceae -itel -Itelmes -item -itemed -itemy -iteming -itemise -itemization -itemizations -itemization's -itemize -itemized -itemizer -itemizers -itemizes -itemizing -items -item's -Iten -Itenean -iter -iterable -iterance -iterances -iterancy -iterant -iterate -iterated -iterately -iterates -iterating -iteration -iterations -iterative -iteratively -iterativeness -iterator -iterators -iterator's -iteroparity -iteroparous -iters -iterum -Ithaca -Ithacan -Ithacensian -ithagine -Ithaginis -Ithaman -ithand -ither -itherness -Ithiel -ithyphallic -Ithyphallus -ithyphyllous -Ithnan -Ithomatas -Ithome -ithomiid -Ithomiidae -Ithomiinae -Ithun -Ithunn -Ithuriel's-spear -ity -Itylus -Itin -itineracy -itinerancy -itinerant -itinerantly -itinerants -itinerary -itineraria -itinerarian -itineraries -Itinerarium -itinerariums -itinerate -itinerated -itinerating -itineration -itinereraria -itinerite -itinerition -itineritious -itineritis -itineritive -itinerous -ition -itious -itis -Itys -itll -it'll -ITM -Itmann -itmo -Itnez -ITO -Itoism -Itoist -itol -Itoland -Itonama -Itonaman -Itonia -itonidid -Itonididae -Itonius -itoubou -itous -ITS -it's -ITSEC -itself -itsy -itsy-bitsy -itsy-witsy -ITSO -ITT -Ittabena -ytter -ytterbia -ytterbias -ytterbic -ytterbite -ytterbium -ytterbous -ytterite -itty-bitty -ittria -yttria -yttrialite -yttrias -yttric -yttriferous -yttrious -yttrium -yttriums -yttro- -yttrocerite -yttrocolumbite -yttrocrasite -yttrofluorite -yttrogummite -yttrotantalite -ITU -Ituraean -Iturbi -Iturbide -iturite -ITUSA -ITV -Itza -itzebu -Itzhak -IU -YU -iu- -Yuan -yuans -Yuapin -yuca -Yucaipa -Yucat -Yucatan -Yucatec -Yucatecan -Yucateco -Yucatecs -Yucatnel -Yucca -yuccas -yucch -yuch -Yuchi -yuck -yucked -yuckel -yucker -yucky -yuckier -yuckiest -yucking -yuckle -yucks -IUD -iuds -IUE -Yuechi -Yueh-pan -yuft -yug -Yuga -yugada -yugas -Yugo -Yugo. -Yugoslav -Yugo-Slav -Yugoslavia -Yugoslavian -yugoslavians -Yugoslavic -yugoslavs -yuh -Yuhas -Yuille -Yuit -Yuji -Yuk -Iuka -Yukaghir -Yukaghirs -yukata -Yukawa -yuke -Yuki -Yukian -Yukio -yuk-yuk -yukked -yukkel -yukking -Yukon -Yukoner -yuks -Yul -Yulan -yulans -Yule -yuleblock -Yulee -yules -Yuletide -yuletides -iulidan -Yulma -Iulus -ium -yum -Yuma -Yuman -Yumas -yum-yum -yummy -yummier -yummies -yummiest -Yumuk -Yun -Yunca -Yuncan -Yunfei -Yung -yungan -Yung-cheng -Yungkia -Yungning -Yunick -yunker -Yunnan -Yunnanese -Yup -yupon -yupons -yuppie -yuppies -yuquilla -yuquillas -Yurak -iurant -Yurev -Yuri -Yuria -Yurik -Yurimaguas -Yurok -Yursa -Yurt -yurta -yurts -Yurucare -Yurucarean -Yurucari -Yurujure -Yuruk -Yuruna -Yurupary -IUS -yus -yusdrum -Yusem -Yustaga -Yusuk -Yutan -yutu -Yuu -iuus -IUV -Yuzik -yuzlik -yuzluk -Yuzovka -IV -YV -Iva -Ivah -Ivan -Ivana -Ivanah -Ivanhoe -Ivanna -Ivanov -Ivanovce -Ivanovo -Ivar -Ivatan -Ivatts -IVB -IVDT -ive -I've -Ivey -Ivekovic -Ivel -Yvelines -Ivens -Iver -Ivers -Iverson -Ives -Yves -Ivesdale -Iveson -Ivett -Ivette -Yvette -Ivetts -Ivy -ivybells -ivyberry -ivyberries -ivy-bush -Ivydale -Ivie -ivied -ivies -ivyflower -ivy-green -ivylike -ivin -Ivins -Ivis -ivy's -Ivyton -ivyweed -ivywood -ivywort -Iviza -Ivo -Ivon -Yvon -Ivonne -Yvonne -Yvonner -Ivor -Yvor -Ivory -ivory-backed -ivory-beaked -ivorybill -ivory-billed -ivory-black -ivory-bound -ivory-carving -ivoried -ivories -ivory-faced -ivory-finished -ivory-hafted -ivory-handled -ivory-headed -ivory-hilted -ivorylike -ivorine -ivoriness -ivorist -ivory-studded -ivory-tinted -ivorytype -ivory-type -Ivoryton -ivory-toned -ivory-tower -ivory-towered -ivory-towerish -ivory-towerishness -ivory-towerism -ivory-towerist -ivory-towerite -ivory-white -ivorywood -ivory-wristed -IVP -ivray -ivresse -Ivry-la-Bataille -IVTS -IW -iwa -iwaiwa -Iwao -y-warn -iwbells -iwberry -IWBNI -IWC -YWCA -iwearth -iwflower -YWHA -iwis -ywis -Iwo -iworth -iwound -IWS -Iwu -iwurche -iwurthen -IWW -iwwood -iwwort -IX -IXC -Ixelles -Ixia -Ixiaceae -Ixiama -ixias -Ixil -Ixion -Ixionian -IXM -Ixodes -ixodian -ixodic -ixodid -Ixodidae -ixodids -Ixonia -Ixora -ixoras -Ixtaccihuatl -Ixtacihuatl -ixtle -ixtles -Iz -Izaak -Izabel -izafat -Izak -Izanagi -Izanami -Izar -Izard -izars -ization -Izawa -izba -Izcateco -izchak -Izdubar -ize -izer -Izhevsk -Izy -izing -Izyum -izle -Izmir -Izmit -Iznik -izote -Iztaccihuatl -iztle -izumi -Izvestia -izvozchik -Izzak -izzard -izzards -izzat -Izzy -J -J. -J.A. -J.A.G. -J.C. -J.C.D. -J.C.L. -J.C.S. -J.D. -J.P. -J.S.D. -J.W.V. -JA -Ja. -Jaal -Jaala -jaal-goat -Jaalin -Jaan -jaap -jab -Jabal -jabalina -Jabalpur -Jaban -Jabarite -jabbed -jabber -jabbered -jabberer -jabberers -jabbering -jabberingly -jabberment -jabbernowl -jabbers -Jabberwock -Jabberwocky -jabberwockian -Jabberwockies -jabbing -jabbingly -jabble -Jabe -jabers -Jabez -jabia -Jabin -Jabir -jabiru -jabirus -Jablon -Jablonsky -Jabon -jaborandi -jaborandis -jaborin -jaborine -jabot -jaboticaba -jabots -Jabrud -jabs -jab's -jabul -jabules -jaburan -JAC -jacal -jacales -Jacalin -Jacalyn -Jacalinne -jacals -Jacaltec -Jacalteca -jacamar -Jacamaralcyon -jacamars -jacameropine -Jacamerops -jacami -jacamin -Jacana -jacanas -Jacanidae -Jacaranda -jacarandas -jacarandi -jacare -Jacarta -jacate -jacatoo -jacchus -jacconet -jacconot -Jacey -jacens -jacent -Jacenta -Jachin -jacht -Jacy -Jacie -Jacinda -Jacinta -Jacinth -Jacynth -Jacintha -Jacinthe -jacinthes -jacinths -Jacinto -jacitara -Jack -jack-a-dandy -jack-a-dandies -jack-a-dandyism -jackal -Jack-a-lent -jackals -jackanapes -jackanapeses -jackanapish -jackaroo -jackarooed -jackarooing -jackaroos -jackash -jackass -jackassery -jackasses -jackassification -jackassism -jackassness -jackass-rigged -jack-at-a-pinch -jackbird -jack-by-the-hedge -jackboy -jack-boy -jackboot -jack-boot -jackbooted -jack-booted -jackboots -jackbox -jack-chain -jackdaw -jackdaws -jacked -jackeen -jackey -Jackelyn -jacker -jackeroo -jackerooed -jackerooing -jackeroos -jackers -jacket -jacketed -jackety -jacketing -jacketless -jacketlike -jackets -jacketwise -jackfish -jackfishes -Jack-fool -jack-frame -jackfruit -jack-fruit -Jack-go-to-bed-at-noon -jackhammer -jackhammers -jackhead -Jackhorn -Jacki -Jacky -jackyard -jackyarder -jack-yarder -Jackie -jackye -Jackies -jack-in-a-box -jack-in-a-boxes -jacking -jacking-up -jack-in-office -jack-in-the-box -jack-in-the-boxes -jack-in-the-green -jack-in-the-pulpit -jack-in-the-pulpits -jackknife -jack-knife -jackknifed -jackknife-fish -jackknife-fishes -jackknifes -jackknifing -jackknives -jackleg -jacklegs -jacklight -jacklighter -Jacklin -Jacklyn -jack-line -Jackman -jackmen -jacknifed -jacknifing -jacknives -jacko -jack-of-all-trades -jack-o'-lantern -jack-o-lantern -jackpile -jackpiling -jackplane -jack-plane -jackpot -jackpots -jackpudding -jack-pudding -jackpuddinghood -Jackquelin -Jackqueline -jackrabbit -jack-rabbit -jackrabbits -jackrod -jackroll -jackrolled -jackrolling -jackrolls -jacks -jacksaw -Jacksboro -jackscrew -jack-screw -jackscrews -jackshaft -jackshay -jackshea -jackslave -jacksmelt -jacksmelts -jacksmith -jacksnipe -jack-snipe -jacksnipes -jacks-of-all-trades -Jackson -Jacksonboro -Jacksonburg -Jacksonia -Jacksonian -Jacksonism -Jacksonite -Jacksonport -Jacksontown -Jacksonville -jack-spaniard -jack-staff -jackstay -jackstays -jackstock -jackstone -jack-stone -jackstones -jackstraw -jack-straw -jackstraws -jacktan -jacktar -jack-tar -Jack-the-rags -jackweed -jackwood -Jaclin -Jaclyn -JACM -Jacmel -Jaco -Jacob -Jacoba -jacobaea -jacobaean -Jacobah -Jacobba -Jacobean -Jacobethan -Jacobi -Jacoby -Jacobian -Jacobic -Jacobin -Jacobina -Jacobine -Jacobinia -Jacobinic -Jacobinical -Jacobinically -Jacobinisation -Jacobinise -Jacobinised -Jacobinising -Jacobinism -Jacobinization -Jacobinize -Jacobinized -Jacobinizing -jacobins -Jacobite -Jacobitely -Jacobitiana -Jacobitic -Jacobitical -Jacobitically -Jacobitish -Jacobitishly -Jacobitism -Jacobo -Jacobs -Jacobsburg -Jacobsen -jacobsite -Jacob's-ladder -Jacobsohn -Jacobson -Jacobus -jacobuses -jacolatt -jaconace -jaconet -jaconets -Jacopo -jacounce -Jacquard -jacquards -Jacquel -Jacquely -Jacquelin -Jacquelyn -Jacqueline -Jacquelynn -jacquemart -Jacqueminot -Jacquenetta -Jacquenette -Jacquerie -Jacques -Jacquet -Jacquetta -Jacquette -Jacqui -Jacquie -jactance -jactancy -jactant -jactation -jacteleg -jactitate -jactitated -jactitating -jactitation -jactivus -jactura -jacture -jactus -jacu -jacuaru -jaculate -jaculated -jaculates -jaculating -jaculation -jaculative -jaculator -jaculatory -jaculatorial -jaculiferous -Jacumba -Jacunda -jacutinga -Jacuzzi -jad -Jada -Jadd -Jadda -Jaddan -jadded -jadder -jadding -Jaddo -Jade -jaded -jadedly -jadedness -jade-green -jadeite -jadeites -jadelike -jadery -jades -jadesheen -jadeship -jadestone -jade-stone -jady -jading -jadish -jadishly -jadishness -jaditic -Jadotville -j'adoube -Jadwiga -Jadwin -Jae -jaegars -Jaeger -jaegers -Jaehne -Jael -Jaela -Jaella -Jaen -Jaenicke -Jaf -Jaffa -Jaffe -Jaffna -Jaffrey -JAG -Jaga -jagamohan -Jaganmati -Jagannath -Jagannatha -jagat -Jagatai -Jagataic -jagath -jageer -Jagello -Jagellon -Jagellonian -Jagellos -jager -jagers -jagg -Jagganath -jaggar -jaggary -jaggaries -jagged -jaggeder -jaggedest -jaggedly -jaggedness -jagged-toothed -Jagger -jaggery -jaggeries -jaggers -jagghery -jaggheries -jaggy -jaggier -jaggiest -jagging -jaggs -Jaghatai -jagheer -jagheerdar -jaghir -jaghirdar -jaghire -jaghiredar -Jagiello -Jagiellonian -Jagiellos -Jagielon -Jagir -jagirdar -jagla -jagless -Jago -jagong -jagra -jagras -jagrata -jags -jagua -jaguar -jaguarete -jaguar-man -jaguarondi -jaguars -jaguarundi -jaguarundis -jaguey -jah -Jahangir -jahannan -Jahdai -Jahdal -Jahdiel -Jahdol -Jahel -Jahn -Jahncke -Jahrum -Jahrzeit -Jahve -Jahveh -Jahvism -Jahvist -Jahvistic -Jahwe -Jahweh -Jahwism -Jahwist -Jahwistic -jai -Jay -jayant -Jayawardena -jaybird -jay-bird -jaybirds -Jaycee -jaycees -Jaye -Jayem -jayesh -Jayess -jaygee -jaygees -jayhawk -Jayhawker -jay-hawker -jail -jailage -jailbait -jailbird -jail-bird -jailbirds -jailbreak -jailbreaker -jailbreaks -jail-delivery -jaildom -jailed -Jaylene -jailer -jaileress -jailering -jailers -jailership -jail-fever -jailhouse -jailhouses -jailyard -jailing -jailish -jailkeeper -jailless -jaillike -jailmate -jailor -jailoring -jailors -jails -Jailsco -jailward -Jaime -Jayme -Jaymee -Jaimie -Jaymie -Jain -Jayn -Jaina -Jaine -Jayne -Jaynell -Jaynes -Jainism -Jainist -Jaynne -jaypie -jaypiet -Jaipur -Jaipuri -Jair -Jairia -jays -Jayson -Jayton -Jayuya -jayvee -jay-vee -jayvees -jaywalk -jaywalked -jaywalker -jaywalkers -jaywalking -jaywalks -Jajapura -Jajawijaja -jajman -jak -Jakarta -Jake -jakey -jakes -jakfruit -Jakie -Jakin -jako -Jakob -Jakoba -Jakobson -Jakop -jakos -Jakun -JAL -Jala -Jalalabad -Jalalaean -jalap -Jalapa -jalapeno -jalapenos -jalapic -jalapin -jalapins -jalaps -Jalbert -jalee -jalet -Jalgaon -Jalisco -jalkar -Jallier -jalloped -jalop -jalopy -jalopies -jaloppy -jaloppies -jalops -jalor -jalouse -jaloused -jalousie -jalousied -jalousies -jalousing -jalpaite -jalur -Jam -Jam. -jama -Jamaal -jamadar -Jamaica -Jamaican -jamaicans -Jamal -Jamalpur -jaman -jamb -jambalaya -jambart -jambarts -jambe -jambeau -jambeaux -jambed -jambee -jamber -jambes -Jambi -jambiya -jambing -jambo -jamboy -jambolan -jambolana -jambon -jambone -jambonneau -jambool -jamboree -jamborees -Jambos -jambosa -jambs -jambstone -jambul -jamdanee -jamdani -Jamey -Jamel -James -Jamesburg -Jamesy -Jamesian -Jamesina -Jameson -jamesonite -Jamesport -Jamesstore -Jamestown -jamestown-weed -Jamesville -jam-full -Jami -Jamie -Jamieson -Jamil -Jamila -Jamill -Jamilla -Jamille -Jamima -Jamin -Jamison -jamlike -Jammal -jammed -jammedness -jammer -jammers -jammy -Jammie -Jammin -jamming -Jammu -Jamnagar -Jamnes -Jamnia -Jamnis -jamnut -jamoke -jam-pack -jampacked -jam-packed -jampan -jampanee -jampani -jamrosade -jams -Jamshedpur -Jamshid -Jamshyd -jamtland -Jamul -jam-up -jamwood -Jan -Jan. -Jana -Janacek -Janaya -Janaye -janapa -janapan -janapum -Janata -Jandel -janders -Jandy -Jane -Janean -Janeczka -Janeen -Janey -Janeiro -Janek -Janel -Janela -Janelew -Janella -Janelle -Janene -Janenna -jane-of-apes -Janerich -janes -Janessa -Janesville -JANET -Janeta -Janetta -Janette -Janeva -jangada -jangar -Janghey -jangkar -jangle -jangled -jangler -janglery -janglers -jangles -jangly -jangling -Jangro -Jany -Jania -Janice -janiceps -Janicki -Janiculan -Janiculum -Janie -Janye -Janifer -Janiform -Janik -Janina -Janine -Janis -Janys -janisary -janisaries -Janissary -Janissarian -Janissaries -Janyte -Janith -janitor -janitorial -janitors -janitor's -janitorship -janitress -janitresses -janitrix -Janiuszck -Janizary -Janizarian -Janizaries -jank -Janka -Jankey -Jankell -janker -jankers -Jann -Janna -Jannel -Jannelle -janner -Jannery -jannock -Janok -Janos -Janot -Jansen -Jansenism -Jansenist -Jansenistic -Jansenistical -Jansenize -Janson -Janssen -Jansson -jant -jantee -Janthina -Janthinidae -janty -jantu -janua -January -Januaries -january's -Januarius -Januisz -Janus -Janus-face -Janus-faced -Janus-headed -Januslike -Janus-like -jaob -Jap -Jap. -japaconin -japaconine -japaconitin -japaconitine -Japan -Japanee -Japanese -japanesery -Japanesy -Japanesque -Japanesquely -Japanesquery -Japanicize -Japanism -Japanization -Japanize -japanized -japanizes -japanizing -japanned -Japanner -japannery -japanners -japanning -Japannish -Japanolatry -Japanology -Japanologist -Japanophile -Japanophobe -Japanophobia -Japans -jape -japed -japer -japery -japeries -japers -japes -Japeth -Japetus -Japha -Japheth -Japhetic -Japhetide -Japhetite -japygid -Japygidae -japygoid -japing -japingly -japish -japishly -japishness -Japyx -Japn -japonaiserie -Japonic -japonica -Japonically -japonicas -Japonicize -Japonism -Japonize -Japonizer -Japur -Japura -Jaqitsch -Jaquelee -Jaquelin -Jaquelyn -Jaqueline -Jaquenetta -Jaquenette -Jaques -Jaques-Dalcroze -Jaquesian -jaquette -jaquima -Jaquiss -Jaquith -jar -Jara -jara-assu -jarabe -Jarabub -Jarad -jaragua -Jarales -jarana -jararaca -jararacussu -Jarash -Jarbidge -jarbird -jar-bird -jarble -jarbot -jar-burial -Jard -jarde -Jardena -jardin -jardini -jardiniere -jardinieres -jardon -Jareb -Jared -jareed -Jarek -Jaret -jarfly -jarful -jarfuls -jarg -jargle -jargogle -jargon -jargonal -jargoned -jargoneer -jargonel -jargonelle -jargonels -jargoner -jargonesque -jargonic -jargoning -jargonisation -jargonise -jargonised -jargonish -jargonising -jargonist -jargonistic -jargonium -jargonization -jargonize -jargonized -jargonizer -jargonizing -jargonnelle -jargons -jargoon -jargoons -jarhead -Jari -Jary -Jariah -Jarib -Jarid -Jarietta -jarina -jarinas -Jarita -jark -jarkman -Jarl -Jarlath -Jarlathus -jarldom -jarldoms -Jarlen -jarless -jarlite -jarls -jarlship -jarmo -Jarnagin -jarnut -Jaromir -jarool -jarosite -jarosites -Jaroslav -Jaroso -jarovization -jarovize -jarovized -jarovizes -jarovizing -jar-owl -jarp -jarra -Jarrad -jarrah -jarrahs -Jarratt -Jarreau -Jarred -Jarrell -Jarret -Jarrett -Jarrettsville -Jarry -Jarrid -jarring -jarringly -jarringness -Jarrod -Jarrow -jars -jar's -jarsful -Jarv -Jarvey -jarveys -jarvy -jarvie -jarvies -Jarvin -Jarvis -Jarvisburg -Jas -Jas. -Jascha -Jase -jasey -jaseyed -jaseys -Jasen -jasy -jasies -Jasik -Jasione -Jasisa -Jasmin -Jasmina -Jasminaceae -Jasmine -jasmined -jasminelike -jasmines -jasminewood -jasmins -Jasminum -jasmone -Jason -Jasonville -jasp -jaspachate -jaspagate -jaspe -Jasper -jasperated -jaspered -jaspery -jasperite -jasperize -jasperized -jasperizing -jasperoid -Jaspers -jasperware -jaspidean -jaspideous -jaspilite -jaspilyte -jaspis -jaspoid -jasponyx -jaspopal -jass -Jassy -jassid -Jassidae -jassids -jassoid -Jastrzebie -Jasun -jasz -Jat -jataco -Jataka -jatamansi -Jateorhiza -jateorhizin -jateorhizine -jatha -jati -Jatki -Jatni -JATO -jatoba -jatos -Jatropha -jatrophic -jatrorrhizine -Jatulian -Jauch -jaudie -jauk -jauked -jauking -jauks -jaun -jaunce -jaunced -jaunces -jauncing -jaunder -jaunders -jaundice -jaundiced -jaundice-eyed -jaundiceroot -jaundices -jaundicing -jauner -Jaunita -jaunt -jaunted -jaunty -jauntie -jauntier -jauntiest -jauntily -jauntiness -jauntinesses -jaunting -jaunting-car -jauntingly -jaunts -jaunt's -jaup -jauped -jauping -jaups -Jaur -Jaures -Jav -Jav. -Java -Javahai -Javakishvili -javali -Javan -Javanee -Javanese -javanine -Javari -Javary -javas -Javed -javel -javelin -javelina -javelinas -javeline -javelined -javelineer -javelining -javelin-man -javelins -javelin's -javelot -javer -Javier -Javitero -Javler -jaw -jawab -Jawaharlal -Jawan -jawans -Jawara -jawbation -jawbone -jaw-bone -jawboned -jawboner -jawbones -jawboning -jawbreak -jawbreaker -jawbreakers -jawbreaking -jawbreakingly -jaw-cracking -jawcrusher -jawed -jawfall -jaw-fall -jawfallen -jaw-fallen -jawfeet -jawfish -jawfishes -jawfoot -jawfooted -jawhole -jawy -jawing -Jawlensky -jawless -jawlike -jawline -jawlines -jaw-locked -jawn -Jaworski -jawp -jawrope -jaws -jaw's -jaw's-harp -jawsmith -jaw-tied -jawtwister -jaw-twister -Jaxartes -jazey -jazeys -jazeran -jazerant -jazy -jazies -Jazyges -Jazmin -jazz -jazzbow -jazzed -jazzer -jazzers -jazzes -jazzy -jazzier -jazziest -jazzily -jazziness -jazzing -jazzist -jazzlike -jazzman -jazzmen -Jbeil -JBS -JC -JCA -JCAC -JCAE -Jcanette -JCB -JCD -JCEE -JCET -JCL -JCR -JCS -jct -jct. -jctn -JD -Jdavie -JDS -Je -Jea -jealous -jealouse -jealous-hood -jealousy -jealousies -jealousy-proof -jealously -jealousness -jealous-pated -Jeames -Jean -Jeana -jean-christophe -Jean-Claude -Jeane -Jeanelle -Jeanerette -Jeanette -jeany -Jeanie -Jeanine -Jeanna -Jeanne -Jeannetta -Jeannette -Jeannie -Jeannye -Jeannine -Jeanpaulia -jean-pierre -Jeans -jean's -jeapordize -jeapordized -jeapordizes -jeapordizing -jeapordous -jear -Jeavons -Jeaz -Jeb -jebat -Jebb -jebel -jebels -Jebus -Jebusi -Jebusite -Jebusitic -Jebusitical -Jebusitish -JECC -Jecho -Jecoa -Jecon -Jeconiah -jecoral -jecorin -jecorize -Jed -Jedburgh -jedcock -Jedd -Jedda -Jeddy -jedding -Jeddo -jeddock -Jedediah -Jedidiah -Jedlicka -Jedthus -jee -jeed -jeeing -jeel -jeep -jeeped -jeepers -jeeping -jeepney -jeepneys -Jeeps -jeep's -jeer -jeered -jeerer -jeerers -jeery -jeering -jeeringly -jeerproof -jeers -jeer's -jees -jeetee -jeewhillijers -jeewhillikens -jeez -jef -jefe -jefes -Jeff -Jeffcott -Jefferey -Jeffery -jefferisite -Jeffers -Jefferson -Jeffersonia -Jeffersonian -Jeffersonianism -jeffersonians -jeffersonite -Jeffersonton -Jeffersontown -Jeffersonville -Jeffy -Jeffie -Jeffrey -Jeffreys -Jeffry -Jeffries -jeg -Jegar -Jeggar -Jegger -Jeh -jehad -jehads -Jehan -Jehangir -Jehanna -Jehiah -Jehial -Jehias -Jehiel -Jehius -Jehoash -Jehoiada -Jehol -Jehoshaphat -Jehovah -Jehovic -Jehovism -Jehovist -Jehovistic -Jehu -Jehudah -jehup -jehus -JEIDA -jejun- -jejuna -jejunal -jejunator -jejune -jejunectomy -jejunectomies -jejunely -jejuneness -jejunity -jejunities -jejunitis -jejuno-colostomy -jejunoduodenal -jejunoileitis -jejuno-ileostomy -jejuno-jejunostomy -jejunostomy -jejunostomies -jejunotomy -jejunum -jejunums -jekyll -jelab -Jelena -Jelene -jelerang -jelib -jelick -Jelks -jell -jellab -jellaba -jellabas -Jelle -jelled -jelly -jellib -jellybean -jellybeans -jellica -Jellico -Jellicoe -jellydom -jellied -jelliedness -jellies -jellify -jellification -jellified -jellifies -jellifying -jellyfish -jelly-fish -jellyfishes -jellying -jellyleaf -jellily -jellylike -jellylikeness -jelling -jellyroll -jelly's -jello -Jell-O -jelloid -jells -Jelm -jelotong -jelske -Jelsma -jelutong -jelutongs -JEM -jemadar -jemadars -Jemappes -jembe -jemble -Jemena -Jemez -Jemy -jemidar -jemidars -Jemie -Jemima -Jemimah -Jemina -Jeminah -Jemine -Jemison -Jemma -Jemmy -Jemmie -jemmied -jemmies -jemmying -jemmily -jemminess -Jempty -Jen -Jena -Jena-Auerstedt -Jenda -Jenei -Jenelle -jenequen -Jenesia -Jenette -Jeni -Jenica -Jenice -Jeniece -Jenifer -Jeniffer -Jenilee -Jenin -Jenine -Jenison -Jenkel -jenkin -Jenkins -Jenkinsburg -Jenkinson -Jenkinsville -Jenkintown -Jenks -Jenn -Jenna -Jenne -Jennee -Jenner -jennerization -jennerize -Jennerstown -Jenness -jennet -jenneting -jennets -Jennette -Jenni -Jenny -Jennica -Jennie -jennier -jennies -Jennifer -Jennilee -Jennine -Jennings -Jeno -jenoar -Jens -Jensen -Jenson -jentacular -Jentoft -Jenufa -jeofail -jeon -jeopard -jeoparded -jeoparder -jeopardy -jeopardied -jeopardies -jeopardying -jeoparding -jeopardious -jeopardise -jeopardised -jeopardising -jeopardize -jeopardized -jeopardizes -jeopardizing -jeopardous -jeopardously -jeopardousness -jeopards -jeopordize -jeopordized -jeopordizes -jeopordizing -Jephte -Jephthah -Jephum -Jepson -Jepum -jequerity -Jequie -jequirity -jequirities -Jer -Jer. -Jerad -Jerahmeel -Jerahmeelites -Jerald -Jeraldine -Jeralee -Jeramey -Jeramie -Jerash -Jerba -jerbil -jerboa -jerboas -Jere -jereed -jereeds -Jereld -Jereme -jeremejevite -Jeremy -jeremiad -jeremiads -Jeremiah -Jeremian -Jeremianic -Jeremias -Jeremie -Jeres -Jerez -jerfalcon -Jeri -jerib -jerican -Jericho -jerid -jerids -Jeris -Jeritah -Jeritza -jerk -jerked -jerker -jerkers -jerky -jerkier -jerkies -jerkiest -jerkily -jerkin -jerkined -jerkiness -jerking -jerkingly -jerkings -jerkinhead -jerkin-head -jerkins -jerkish -jerk-off -jerks -jerksome -jerkwater -jerl -jerm -jerm- -Jermain -Jermaine -Jermayne -Jerman -Jermyn -jermonal -jermoonal -jernie -Jeroboam -jeroboams -Jerol -Jerold -Jeroma -Jerome -Jeromesville -Jeromy -Jeromian -Jeronima -Jeronymite -jeropiga -jerque -jerqued -jerquer -jerquing -Jerre -jerreed -jerreeds -Jerri -Jerry -jerrybuild -jerry-build -jerry-builder -jerrybuilding -jerry-building -jerrybuilt -jerry-built -jerrican -jerrycan -jerricans -jerrycans -jerrid -jerrids -Jerrie -Jerries -jerryism -Jerrilee -Jerrylee -Jerrilyn -Jerrine -Jerrol -Jerrold -Jerroll -Jerrome -Jersey -Jerseyan -jerseyed -Jerseyite -jerseyites -Jerseyman -jerseys -jersey's -Jerseyville -jert -Jerubbaal -Jerubbal -Jerusalem -Jerusalemite -jervia -jervin -jervina -jervine -Jervis -Jerz -JES -Jesh -Jesher -Jesmine -jesper -Jespersen -Jess -Jessa -Jessabell -jessakeed -Jessalin -Jessalyn -jessamy -jessamies -Jessamyn -Jessamine -jessant -Jesse -Jessean -jessed -Jessee -Jessey -Jesselyn -Jesselton -Jessen -jesses -Jessi -Jessy -Jessica -Jessie -Jessieville -Jessika -jessing -Jessore -Jessup -jessur -jest -jestbook -jest-book -jested -jestee -jester -jesters -jestful -jesting -jestingly -jestings -jestingstock -jestmonger -jestproof -jests -Jestude -jestwise -jestword -Jesu -Jesuate -jesuist -Jesuit -Jesuited -Jesuitess -Jesuitic -Jesuitical -Jesuitically -Jesuitisation -Jesuitise -Jesuitised -Jesuitish -Jesuitising -Jesuitism -Jesuitist -Jesuitization -Jesuitize -Jesuitized -Jesuitizing -Jesuitocracy -Jesuitry -jesuitries -jesuits -Jesup -JESUS -JET -jetavator -jetbead -jetbeads -jet-black -jete -je-te -Jetersville -jetes -Jeth -Jethra -Jethro -Jethronian -jetliner -jetliners -Jetmore -jeton -jetons -jet-pile -jetport -jetports -jet-propelled -jet-propulsion -jets -jet's -jetsam -jetsams -jet-set -jet-setter -jetsom -jetsoms -Jetson -jetstream -jettage -jettatore -jettatura -jetteau -jetted -jetter -jetty -Jettie -jettied -jettier -jetties -jettiest -jettyhead -jettying -jettiness -jetting -jettingly -jettison -jettisonable -jettisoned -jettisoning -jettisons -jettywise -jetton -jettons -jettru -jetware -Jeu -Jeunesse -jeux -Jeuz -Jevon -Jevons -Jew -Jew-bait -Jew-baiter -Jew-baiting -jewbird -jewbush -Jewdom -jewed -Jewel -jewel-block -jewel-bright -jewel-colored -jeweled -jewel-enshrined -jeweler -jewelers -jewelfish -jewelfishes -jewel-gleaming -jewel-headed -jewelhouse -jewel-house -jewely -jeweling -Jewell -Jewelle -jewelled -jeweller -jewellery -jewellers -jewelless -jewelly -jewellike -jewelling -jewel-loving -jewel-proof -jewelry -jewelries -jewels -jewelsmith -jewel-studded -jewelweed -jewelweeds -Jewess -Jewett -jewfish -jew-fish -jewfishes -Jewhood -Jewy -jewing -jewis -Jewish -Jewishly -Jewishness -Jewism -Jewless -Jewlike -Jewling -Jewry -Jewries -Jews -jew's-ear -jews'harp -jew's-harp -Jewship -Jewstone -Jez -Jezabel -Jezabella -Jezabelle -jezail -jezails -Jezebel -Jezebelian -Jezebelish -jezebels -jezekite -jeziah -Jezreel -Jezreelite -JFET -JFIF -JFK -JFMIP -JFS -jg -Jger -JGR -Jhansi -jharal -jheel -Jhelum -jhool -jhow -JHS -Jhuria -JHVH -JHWH -ji -Jy -jianyun -jiao -jib -jibb -jibba -jibbah -jibbed -jibbeh -jibber -jibbers -jibby -jibbing -jibbings -jibbons -jibboom -jib-boom -jibbooms -jibbs -jib-door -jibe -jibed -jiber -jibers -jibes -jibhead -jib-headed -jib-header -jibi -jibing -jibingly -jibman -jibmen -jiboa -jiboya -jib-o-jib -Jibouti -jibs -jibstay -Jibuti -JIC -jicama -jicamas -Jicaque -Jicaquean -jicara -Jicarilla -Jidda -jiff -jiffy -jiffies -jiffle -jiffs -jig -jigaboo -jigaboos -jigamaree -jig-back -jig-drill -jig-file -jigged -Jigger -jiggered -jiggerer -jiggery-pokery -jiggerman -jiggermast -jiggers -jigget -jiggety -jiggy -jigginess -jigging -jiggish -jiggit -jiggle -jiggled -jiggler -jiggles -jiggly -jigglier -jiggliest -jiggling -jiggumbob -jig-jig -jig-jog -jig-joggy -jiglike -jigman -jigmen -jigote -jigs -jig's -jigsaw -jig-saw -jigsawed -jigsawing -jigsawn -jigsaws -jihad -jihads -Jihlava -Jijiga -jikungu -JILA -Jill -Jillayne -Jillana -Jylland -Jillane -jillaroo -Jilleen -Jillene -jillet -jillflirt -jill-flirt -Jilli -Jilly -Jillian -Jillie -jilling -jillion -jillions -jills -Jilolo -jilt -jilted -jiltee -jilter -jilters -jilting -jiltish -jilts -JIM -jimbang -jimberjaw -jimberjawed -jimbo -jimcrack -Jim-Crow -jim-dandy -Jimenez -jimigaki -jiminy -jimjam -jim-jam -jimjams -jimjums -jimmer -Jimmy -Jimmie -Jymmye -jimmied -jimmies -jimmying -jimminy -jimmyweed -Jimnez -jymold -jimp -jimper -jimpest -jimpy -jimply -jimpness -jimpricute -jimsedge -jimson -jimsonweed -jimson-weed -jimsonweeds -jin -jina -Jinan -jincamas -Jincan -jinchao -jinete -jing -jingal -jingall -jingalls -jingals -jingbai -jingbang -Jynginae -jyngine -jingko -jingkoes -jingle -jinglebob -jingled -jinglejangle -jingle-jangle -jingler -jinglers -jingles -jinglet -jingly -jinglier -jingliest -jingling -jinglingly -jingo -jingodom -jingoed -jingoes -jingoing -jingoish -jingoism -jingoisms -jingoist -jingoistic -jingoistically -jingoists -jingu -Jinja -jinjili -jink -jinked -jinker -jinkers -jinket -jinking -jinkle -jinks -jinn -Jinnah -jinnee -jinnestan -jinni -Jinny -jinnies -jinniyeh -jinniwink -jinnywink -jinns -jinricksha -jinrickshaw -jinriki -jinrikiman -jinrikimen -jinrikisha -jinrikishas -jinriksha -jins -Jinsen -jinsha -jinshang -jinsing -Jinx -Jynx -jinxed -jinxes -jinxing -Jyoti -jipijapa -jipijapas -jipper -jiqui -jirble -jirga -jirgah -jiri -jirkinet -JIS -JISC -jisheng -jism -jisms -jissom -JIT -jitendra -jiti -jitney -jitneyed -jitneying -jitneyman -jitneys -jitneur -jitneuse -jitro -jitter -jitterbug -jitterbugged -jitterbugger -jitterbugging -jitterbugs -jittered -jittery -jitteriness -jittering -jitters -jiujitsu -jiu-jitsu -jiujitsus -jiujutsu -jiujutsus -jiva -Jivaran -Jivaro -Jivaroan -Jivaros -jivatma -jive -jiveass -jived -jiver -jivers -jives -jiving -jixie -jizya -jizyah -jizzen -JJ -JJ. -Jkping -Jl -JLE -JMP -JMS -JMX -jnana -jnanayoga -jnanamarga -jnana-marga -jnanas -jnanashakti -jnanendriya -jnd -Jno -Jnr -jnt -JO -Joab -Joachim -Joachima -Joachimite -Joacima -Joacimah -Joan -Joana -Joane -Joanie -JoAnn -Jo-Ann -Joanna -JoAnne -Jo-Anne -Joannes -Joannite -Joao -Joappa -Joaquin -joaquinite -Joas -Joash -Joashus -JOAT -Job -jobade -jobarbe -jobation -jobbed -jobber -jobbery -jobberies -jobbernowl -jobbernowlism -jobbers -jobbet -jobbing -jobbish -jobble -Jobcentre -Jobe -Jobey -jobholder -jobholders -Jobi -Joby -Jobie -Jobye -Jobina -Jobyna -jobless -joblessness -joblots -jobman -jobmaster -jobmen -jobmistress -jobmonger -jobname -jobnames -jobo -jobs -job's -jobsite -jobsmith -jobson -Job's-tears -Jobstown -jocant -Jocasta -Jocaste -jocatory -Jocelin -Jocelyn -Joceline -Jocelyne -Jocelynne -joch -Jochabed -Jochbed -Jochebed -jochen -Jochum -Jock -jockey -jockeydom -jockeyed -jockeying -jockeyish -jockeyism -jockeylike -jockeys -jockeyship -jocker -jockette -jockettes -Jocko -jockos -jocks -jockstrap -jockstraps -jockteleg -jocooserie -jocoque -jocoqui -jocose -jocosely -jocoseness -jocoseriosity -jocoserious -jocosity -jocosities -jocote -jocteleg -jocu -jocular -jocularity -jocularities -jocularly -jocularness -joculator -joculatory -jocum -jocuma -jocund -jocundity -jocundities -jocundly -jocundness -jocundry -jocuno -jocunoity -jo-darter -Jodean -Jodee -Jodeen -jodel -jodelr -Jodene -Jodhpur -Jodhpurs -Jodi -Jody -Jodie -Jodyn -Jodine -Jodynne -Jodl -Jodo -Jodoin -Jodo-shu -Jodrell -Joe -Joeann -joebush -Joed -Joey -joeyes -Joeys -Joel -Joela -Joelie -Joelynn -Joell -Joella -Joelle -Joellen -Joelly -Joellyn -Joelton -Joe-millerism -Joe-millerize -Joensuu -Joerg -Joes -Joete -Joette -joewood -Joffre -jog -jogged -jogger -joggers -jogging -joggings -joggle -joggled -joggler -jogglers -joggles -jogglety -jogglework -joggly -joggling -Jogjakarta -jog-jog -jogs -jogtrot -jog-trot -jogtrottism -Joh -Johan -Johanan -Johann -Johanna -Johannah -Johannean -Johannes -Johannesburg -Johannessen -Johannine -Johannisberger -Johannist -Johannite -Johansen -Johanson -Johathan -Johen -Johiah -Johm -John -Johna -Johnadreams -john-a-nokes -John-apple -john-a-stiles -Johnath -Johnathan -Johnathon -johnboat -johnboats -John-bullish -John-bullism -John-bullist -Johnday -Johnette -Johny -Johnian -johnin -Johnna -Johnny -johnnycake -johnny-cake -Johnny-come-lately -Johnny-come-latelies -johnnydom -Johnnie -Johnnie-come-lately -Johnnies -Johnnies-come-lately -Johnny-jump-up -Johnny-on-the-spot -Johns -Johnsburg -Johnsen -Johnsmas -Johnson -Johnsonburg -Johnsonese -Johnsonian -Johnsoniana -Johnsonianism -Johnsonianly -Johnsonism -Johnsonville -Johnsson -Johnsten -Johnston -Johnstone -Johnstown -johnstrupite -Johor -Johore -Johppa -Johppah -Johst -Joy -Joya -Joiada -Joyan -Joyance -joyances -joyancy -Joyann -joyant -joy-bereft -joy-bright -joy-bringing -Joice -Joyce -Joycean -Joycelin -joy-deserted -joy-dispelling -joie -Joye -joyed -joy-encompassed -joyful -joyfuller -joyfullest -joyfully -joyfulness -joyhop -joyhouse -joying -joy-inspiring -joy-juice -joy-killer -joyleaf -joyless -joylessly -joylessness -joylet -joy-mixed -join -join- -joinable -joinant -joinder -joinders -joined -Joiner -joinered -joinery -joineries -joinering -joiners -Joinerville -joinhand -joining -joining-hand -joiningly -joinings -joins -joint -jointage -joint-bedded -jointed -jointedly -jointedness -jointer -jointers -jointy -jointing -jointist -jointless -jointlessness -jointly -jointress -joint-ring -joints -joint's -joint-stockism -joint-stool -joint-tenant -jointure -jointured -jointureless -jointures -jointuress -jointuring -jointweed -jointwood -jointworm -joint-worm -Joinvile -Joinville -Joyous -joyously -joyousness -joyousnesses -joypop -joypopped -joypopper -joypopping -joypops -joyproof -joy-rapt -joy-resounding -joyridden -joy-ridden -joyride -joy-ride -joyrider -joyriders -joyrides -joyriding -joy-riding -joyridings -joyrode -joy-rode -joys -joy's -joysome -joist -joisted -joystick -joysticks -joisting -joistless -joists -joyweed -joy-wrung -Jojo -jojoba -jojobas -Jokai -joke -jokebook -joked -jokey -jokeless -jokelet -jokeproof -joker -jokers -jokes -jokesmith -jokesome -jokesomeness -jokester -jokesters -joky -jokier -jokiest -joking -jokingly -joking-relative -jokish -jokist -Jokjakarta -joktaleg -Joktan -jokul -Jola -Jolanta -Jolda -jole -Jolee -Joleen -Jolene -Jolenta -joles -Joletta -Joli -Joly -Jolie -Joliet -Joliette -Jolyn -Joline -Jolynn -Joliot-Curie -Jolivet -joll -Jolla -Jollanta -Jolley -jolleyman -Jollenta -jolly -jolly-boat -jollied -jollier -jollyer -jollies -jolliest -jollify -jollification -jollifications -jollified -jollifies -jollifying -jollyhead -jollying -jollily -jolliment -jolliness -jollytail -jollity -jollities -jollitry -jollop -jolloped -Jolo -Joloano -Jolon -Jolson -jolt -jolted -jolter -jolterhead -jolter-head -jolterheaded -jolterheadedness -jolters -jolthead -joltheaded -jolty -joltier -joltiest -joltily -joltiness -jolting -joltingly -joltless -joltproof -jolts -jolt-wagon -Jomo -jomon -Jon -Jona -Jonah -Jonahesque -Jonahism -jonahs -Jonancy -Jonas -Jonathan -Jonathanization -Jonathon -Jonati -Jonben -jondla -Jone -Jonel -Jonell -Jones -Jonesboro -Jonesborough -Jonesburg -Joneses -Jonesian -Jonesport -Jonestown -Jonesville -Jonette -jong -Jongkind -jonglem -jonglery -jongleur -jongleurs -Joni -Jonie -Jonina -Jonis -Jonkoping -Jonme -Jonna -Jonny -jonnick -jonnock -jonque -Jonquil -jonquille -jonquils -Jonson -Jonsonian -Jonval -jonvalization -jonvalize -Joo -jook -jookerie -joola -joom -Joon -Jooss -Joost -Jooste -Jopa -Jophiel -Joplin -Joppa -joram -jorams -Jordaens -Jordain -Jordan -Jordana -Jordanian -jordanians -jordanite -Jordanna -jordanon -Jordans -Jordanson -Jordanville -jorden -Jordison -Jordon -joree -Jorey -Jorgan -Jorge -Jorgensen -Jorgenson -Jori -Jory -Jorie -Jorin -Joris -Jorist -Jormungandr -jornada -jornadas -joropo -joropos -jorram -Jorry -Jorrie -jorum -jorums -Jos -Joscelin -Jose -Josee -Josef -Josefa -Josefina -josefite -Josey -joseite -Joseito -Joselyn -Joselow -Josep -Joseph -Josepha -Josephina -Josephine -Josephine's-lily -Josephinism -josephinite -Josephism -Josephite -josephs -Joseph's-coat -Josephson -Josephus -Joser -Joses -Josh -Josh. -joshed -josher -joshers -joshes -Joshi -Joshia -joshing -Joshua -Joshuah -Josi -Josy -Josiah -Josias -Josie -Josip -joskin -Josler -Joslyn -Josquin -joss -jossakeed -Josselyn -josser -josses -jostle -jostled -jostlement -jostler -jostlers -jostles -jostling -Josue -jot -jota -jotas -jotation -Jotham -jotisaru -jotisi -Jotnian -jots -jotted -jotter -jotters -jotty -jotting -jottings -Jotun -Jotunheim -Jotunn -Jotunnheim -joual -jouals -Joub -joubarb -Joubert -joug -jough -jougs -Jouhaux -jouisance -jouissance -jouk -Joukahainen -jouked -joukery -joukerypawkery -jouking -jouks -joul -Joule -joulean -joulemeter -joules -jounce -jounced -jounces -jouncy -jouncier -jounciest -jouncing -Joung -Jounieh -jour -jour. -Jourdain -Jourdan -Jourdanton -journ -journal -journalary -journal-book -journaled -journalese -journaling -journalise -journalised -journalish -journalising -journalism -journalisms -journalist -journalistic -journalistically -journalists -journalist's -journalization -journalize -journalized -journalizer -journalizes -journalizing -journalled -journalling -journals -journal's -journey -journeycake -journeyed -journeyer -journeyers -journeying -journeyings -journeyman -journeymen -journeys -journeywoman -journeywomen -journeywork -journey-work -journeyworker -journo -jours -joust -jousted -jouster -jousters -jousting -jousts -joutes -Jouve -j'ouvert -Jova -Jovanovich -JOVE -Jovi -jovy -Jovia -JOVIAL -jovialist -jovialistic -joviality -jovialize -jovialized -jovializing -jovially -jovialness -jovialty -jovialties -Jovian -Jovianly -Jovicentric -Jovicentrical -Jovicentrically -jovilabe -Joviniamish -Jovinian -Jovinianism -Jovinianist -Jovinianistic -Jovita -Jovitah -Jovite -Jovitta -jow -jowar -jowari -jowars -jowed -jowel -jower -jowery -Jowett -jowing -jowl -jowled -jowler -jowly -jowlier -jowliest -jowlish -jowlop -jowls -jowpy -jows -jowser -jowter -Joxe -Jozef -Jozy -JP -JPEG -JPL -Jr -Jr. -JRC -js -j's -Jsandye -JSC -J-scope -JSD -JSN -JSRC -JST -JSW -jt -JTIDS -JTM -Jtunn -Ju -juamave -Juan -Juana -Juanadiaz -Juang -Juanita -Juan-les-Pins -Juanne -juans -Juantorena -Juarez -Juba -Juback -Jubal -jubarb -jubardy -jubartas -jubartes -jubas -jubate -jubbah -jubbahs -jubbe -Jubbulpore -jube -juberous -jubes -jubhah -jubhahs -jubilance -jubilancy -jubilant -jubilantly -jubilar -jubilarian -Jubilate -jubilated -jubilates -jubilating -jubilatio -jubilation -jubilations -jubilatory -Jubile -jubileal -jubilean -jubilee -jubilees -jubiles -jubili -jubilist -jubilization -jubilize -jubilus -jublilantly -jublilation -jublilations -jubus -juchart -juck -juckies -Jucuna -jucundity -JUD -Jud. -Juda -Judaea -Judaean -Judaeo- -Judaeo-arabic -Judaeo-christian -Judaeo-German -Judaeomancy -Judaeo-persian -Judaeophile -Judaeophilism -Judaeophobe -Judaeophobia -Judaeo-Spanish -Judaeo-tunisian -Judah -Judahite -Judaic -Judaica -Judaical -Judaically -Judaisation -Judaise -Judaised -judaiser -Judaising -Judaism -Judaist -Judaistic -Judaistically -Judaization -Judaize -Judaized -Judaizer -Judaizing -Judas -Judas-ear -judases -Judaslike -Judas-like -judas-tree -judcock -Judd -judder -juddered -juddering -judders -juddock -Jude -Judea -Judean -Judenberg -Judeo-German -Judeophobia -Judeo-Spanish -Judette -judex -Judezmo -Judg -Judge -judgeable -judged -judgeless -judgelike -judge-made -judgement -judgemental -judgements -judger -judgers -Judges -judgeship -judgeships -judging -judgingly -judgmatic -judgmatical -judgmatically -Judgment -judgmental -judgment-day -judgment-hall -judgment-proof -judgments -judgment's -judgment-seat -judgmetic -judgship -Judi -Judy -Judica -judicable -judical -judicata -judicate -judicatio -judication -judicative -judicator -judicatory -judicatorial -judicatories -judicature -judicatures -judice -judices -judicia -judiciable -judicial -judicialis -judiciality -judicialize -judicialized -judicializing -judicially -judicialness -Judiciary -judiciaries -judiciarily -judicious -judiciously -judiciousness -judiciousnesses -judicium -Judie -Judye -Judith -Juditha -judo -judogi -judoist -judoists -judoka -judokas -Judon -judophobia -Judophobism -judos -Judsen -Judson -Judsonia -Judus -jueces -juergen -Jueta -Juetta -juffer -jufti -jufts -jug -Juga -jugal -jugale -Jugatae -jugate -jugated -jugation -jug-bitten -Jugendstil -juger -jugerum -JUGFET -jugful -jugfuls -jugged -jugger -Juggernaut -Juggernautish -juggernauts -jugging -juggins -jugginses -juggle -juggled -jugglement -juggler -jugglery -juggleries -jugglers -juggles -juggling -jugglingly -jugglings -jug-handle -jughead -jugheads -jug-jug -Juglandaceae -juglandaceous -Juglandales -juglandin -Juglans -juglar -juglone -Jugoslav -Jugoslavia -Jugoslavian -Jugoslavic -jugs -jug's -jugsful -jugula -jugular -Jugulares -jugulary -jugulars -jugulate -jugulated -jugulates -jugulating -jugulation -jugulum -jugum -jugums -Jugurtha -Jugurthine -juha -Juyas -juice -juiced -juiceful -juicehead -juiceless -juicelessness -juicer -juicers -juices -juice's -juicy -juicier -juiciest -juicily -juiciness -juicinesses -juicing -Juieta -Juin -juise -jujitsu -ju-jitsu -jujitsus -juju -ju-ju -jujube -jujubes -Jujuy -jujuism -jujuisms -jujuist -jujuists -jujus -jujutsu -jujutsus -juke -jukebox -jukeboxes -juked -Jukes -juking -Jul -Jul. -julaceous -Jule -Julee -Juley -julep -juleps -Jules -Julesburg -Juletta -Juli -July -Julia -Juliaetta -Julian -Juliana -Juliane -Julianist -Juliann -Julianna -Julianne -Juliano -julianto -julid -Julidae -julidan -Julide -Julie -Julien -julienite -Julienne -juliennes -Julies -Juliet -Julieta -juliett -Julietta -Juliette -Julyflower -Julina -Juline -Julio -juliott -Julis -july's -Julissa -Julita -Julius -Juliustown -Jullundur -juloid -Juloidea -juloidian -julole -julolidin -julolidine -julolin -juloline -Julus -Jumada -Jumana -jumart -jumba -jumbal -Jumbala -jumbals -jumby -jumbie -jumble -jumbled -jumblement -jumbler -jumblers -jumbles -jumbly -jumbling -jumblingly -Jumbo -jumboesque -jumboism -jumbos -jumbuck -jumbucks -jumelle -jument -jumentous -jumfru -jumillite -jumma -Jumna -Jump -jump- -jumpable -jumped -jumped-up -jumper -jumperism -jumpers -jump-hop -jumpy -jumpier -jumpiest -jumpily -jumpiness -jumping -jumpingly -jumping-off-place -jumpmaster -jumpness -jumpoff -jump-off -jumpoffs -jumprock -jumprocks -jumps -jumpscrape -jumpseed -jump-shift -jumpsome -jump-start -jumpsuit -jumpsuits -jump-up -Jun -Jun. -Juna -Junc -Juncaceae -juncaceous -Juncaginaceae -juncaginaceous -juncagineous -Juncal -juncat -junciform -juncite -Junco -juncoes -Juncoides -Juncos -juncous -Junction -junctional -junctions -junction's -junctive -junctly -junctor -junctural -juncture -junctures -juncture's -Juncus -jundy -Jundiai -jundie -jundied -jundies -jundying -June -juneating -Juneau -Juneberry -Juneberries -Junebud -junectomy -Junedale -junefish -Juneflower -JUNET -Juneteenth -Junette -Jung -Junger -Jungermannia -Jungermanniaceae -jungermanniaceous -Jungermanniales -Jungfrau -Junggrammatiker -Jungian -jungle -jungle-clad -jungle-covered -jungled -junglegym -jungles -jungle's -jungleside -jungle-traveling -jungle-walking -junglewards -junglewood -jungle-worn -jungli -jungly -junglier -jungliest -Juni -Junia -Juniata -Junie -Junieta -Junina -Junior -juniorate -juniority -juniors -junior's -juniorship -juniper -Juniperaceae -junipers -Juniperus -Junius -Junji -junk -junkboard -junk-bottle -junkdealer -junked -Junker -Junkerdom -junkerish -Junkerism -Junkers -junket -junketed -junketeer -junketeers -junketer -junketers -junketing -junkets -junketter -junky -junkyard -junkyards -junkie -junkier -junkies -junkiest -junking -junkman -junkmen -Junko -junks -Junna -Junno -Juno -Junoesque -Junonia -Junonian -Junot -Junr -junt -Junta -juntas -junto -juntos -Juntura -jupard -jupati -jupe -jupes -Jupiter -Jupiter's-beard -jupon -jupons -Jur -Jura -jural -jurally -jurament -juramenta -juramentado -juramentados -juramental -juramentally -juramentum -Jurane -Juranon -jurant -jurants -jurara -jurare -Jurassic -jurat -jurata -juration -jurative -jurator -juratory -juratorial -Jura-trias -Jura-triassic -jurats -Jurdi -jure -jurel -jurels -jurevis -Jurez -Jurgen -juri -jury -jury- -juridic -juridical -juridically -juridicial -juridicus -juries -jury-fixer -juryless -juryman -jury-mast -jurymen -juring -jury-packing -jury-rig -juryrigged -jury-rigged -jury-rigging -juris -jury's -jurisconsult -jurisdiction -jurisdictional -jurisdictionalism -jurisdictionally -jurisdictions -jurisdiction's -jurisdictive -jury-shy -jurisp -jurisp. -jurisprude -jurisprudence -jurisprudences -jurisprudent -jurisprudential -jurisprudentialist -jurisprudentially -jury-squaring -jurist -juristic -juristical -juristically -jurists -jurywoman -jurywomen -Jurkoic -juror -jurors -juror's -Juru -Jurua -jurupaite -jus -juslik -juslted -jusquaboutisme -jusquaboutist -jussal -jussel -Jusserand -jusshell -Jussi -Jussiaea -Jussiaean -Jussieuan -jussion -jussive -jussives -jussory -Just -Justa -justaucorps -justed -juste-milieu -juste-milieux -Justen -Juster -justers -justest -Justice -Justiceburg -justiced -justice-dealing -Justice-generalship -justicehood -justiceless -justicelike -justice-loving -justice-proof -justicer -justices -justice's -justiceship -justice-slighting -justiceweed -Justicia -justiciability -justiciable -justicial -justiciar -justiciary -justiciaries -justiciaryship -justiciarship -justiciatus -justicier -justicies -justicing -justico -justicoat -Justicz -justifably -justify -justifiability -justifiable -justifiableness -justifiably -justification -justifications -justificative -justificator -justificatory -justified -justifiedly -justifier -justifiers -justifier's -justifies -justifying -justifyingly -Justin -Justina -Justine -justing -Justinian -Justinianean -justinianeus -Justinianian -Justinianist -Justinn -Justino -Justis -Justitia -justle -justled -justler -justles -justly -justling -justment -justments -justness -justnesses -justo -justs -Justus -jut -Juta -Jute -jutelike -jutes -Jutic -Jutish -jutka -Jutland -Jutlander -Jutlandish -juts -Jutta -jutted -jutty -juttied -jutties -juttying -jutting -juttingly -Juturna -juv -Juvara -Juvarra -Juvavian -Juvenal -Juvenalian -juvenals -juvenate -juvenescence -juvenescent -juvenile -juvenilely -juvenileness -juveniles -juvenile's -juvenilia -juvenilify -juvenilism -juvenility -juvenilities -juvenilize -juvenocracy -juvenolatry -juvent -Juventas -juventude -Juverna -juvia -juvite -juwise -Juxon -juxta -juxta-ampullar -juxta-articular -juxtalittoral -juxtamarine -juxtapyloric -juxtapose -juxtaposed -juxtaposes -juxtaposing -juxtaposit -juxtaposition -juxtapositional -juxtapositions -juxtapositive -juxtaspinal -juxtaterrestrial -juxtatropical -Juza -Juznik -JV -JVNC -jwahar -Jwanai -JWV -K -K. -K.B.E. -K.C.B. -K.C.M.G. -K.C.V.O. -K.G. -K.K.K. -K.O. -K.P. -K.T. -K.V. -K2 -K9 -Ka -ka- -Kaaawa -Kaaba -kaama -Kaapstad -kaas -kaataplectic -kab -kabab -Kababish -kababs -kabaya -kabayas -Kabaka -kabakas -kabala -kabalas -Kabalevsky -kabar -kabaragoya -Kabard -Kabardian -kabars -kabassou -kabbala -kabbalah -kabbalahs -kabbalas -Kabbeljaws -Kabeiri -kabel -kabeljou -kabeljous -kaberu -kabiet -kabiki -kabikis -Kabyle -Kabylia -Kabinettwein -Kabir -Kabirpanthi -Kabistan -Kablesh -kabob -kabobs -Kabonga -kabs -Kabuki -kabukis -Kabul -Kabuli -kabuzuchi -Kacey -Kacerek -kacha -Kachari -kachcha -Kachin -kachina -kachinas -Kachine -Kacy -Kacie -Kackavalj -Kaczer -Kaczmarczyk -kad- -Kadaga -Kadai -kadaya -Kadayan -Kadar -Kadarite -kadder -Kaddish -kaddishes -Kaddishim -kadein -Kaden -kadi -Kadiyevka -kadikane -kadine -kadis -kadischi -kadish -kadishim -Kadmi -Kadner -Kado -Kadoka -kados -kadsura -Kadu -Kaduna -kae -Kaela -kaempferol -Kaenel -kaes -Kaesong -Kaete -Kaf -Kafa -kaferita -Kaffeeklatsch -Kaffia -kaffiyeh -kaffiyehs -Kaffir -Kaffirs -Kaffraria -Kaffrarian -kafila -Kafir -Kafiri -kafirin -Kafiristan -Kafirs -kafiz -Kafka -Kafkaesque -Kafre -kafs -kafta -kaftan -kaftans -Kagawa -Kagera -Kagi -kago -kagos -Kagoshima -kagu -kagura -kagus -kaha -kahala -Kahaleel -kahar -kahau -kahawai -kahikatea -kahili -Kahl -Kahle -Kahler -Kahlil -Kahlotus -Kahlua -Kahn -Kahoka -Kahoolawe -kahu -Kahuku -Kahului -kahuna -kahunas -Kai -Kay -Kaia -Kaya -kaiak -kayak -kayaked -kayaker -kayakers -kayaking -kaiaks -kayaks -Kayan -Kayasth -Kayastha -Kaibab -Kaibartha -Kaycee -kaid -Kaye -Kayenta -Kayes -Kaieteur -kaif -Kaifeng -kaifs -Kayibanda -kaik -kai-kai -kaikara -kaikawaka -kail -Kaila -Kayla -Kailasa -Kaile -Kayle -Kaylee -Kailey -Kayley -kayles -kailyard -kailyarder -kailyardism -kailyards -Kaylil -Kaylyn -Kaylor -kails -Kailua -Kailuakona -kaimakam -kaiman -Kaimo -Kain -Kainah -Kaine -Kayne -kainga -Kaingang -Kaingangs -kaingin -kainyn -kainit -kainite -kainites -kainits -kainogenesis -kainozoic -kains -kainsi -kayo -kayoed -kayoes -kayoing -kayos -kairin -kairine -kairolin -kairoline -kairos -kairotic -Kairouan -Kairwan -kays -Kaiser -kaiserdom -Kayseri -Kaiserin -kaiserins -kaiserism -kaisers -kaisership -Kaiserslautern -Kaysville -kaitaka -Kaithi -Kaitlin -Kaitlyn -Kaitlynn -Kaiulani -kaivalya -kayvan -kayward -kaiwhiria -kaiwi -kaj -Kaja -Kajaani -Kajar -kajawah -Kajdan -kajeput -kajeputs -kajugaru -kaka -Kakalina -Kakan -kakapo -kakapos -kakar -kakarali -kakaralli -kakariki -kakas -Kakatoe -Kakatoidae -kakawahie -kakemono -kakemonos -kaki -kakidrosis -kakis -kakistocracy -kakistocracies -kakistocratical -kakkak -kakke -kako- -kakogenic -kakorraphiaphobia -kakortokite -kakotopia -Kal -Kala -kalaazar -Kala-Azar -kalach -kaladana -Kalagher -Kalahari -Kalaheo -Kalakh -kalam -Kalama -kalamalo -kalamansanai -Kalamazoo -Kalamian -Kalamist -kalamkari -kalams -kalan -Kalanchoe -Kalandariyah -Kalang -Kalapooian -kalashnikov -kalasie -Kalasky -Kalat -kalathoi -kalathos -Kalaupapa -Kalb -Kalbli -Kaldani -Kale -kale- -Kaleb -kaleege -Kaleena -kaleyard -kaleyards -kaleidescope -kaleidophon -kaleidophone -kaleidoscope -kaleidoscopes -kaleidoscopic -kaleidoscopical -kaleidoscopically -Kalekah -kalema -Kalemie -kalend -Kalendae -kalendar -kalendarial -kalends -kales -Kaleva -Kalevala -kalewife -kalewives -Kalfas -Kalgan -Kalgoorlie -Kali -kalian -Kaliana -kalians -kaliborite -Kalida -Kalidasa -kalidium -Kalie -kalif -kalifate -kalifates -kaliform -kalifs -kaligenous -Kaliyuga -Kalikow -Kalil -Kalila -Kalimantan -kalimba -kalimbas -kalymmaukion -kalymmocyte -Kalin -Kalina -Kalinda -Kalindi -Kalinga -Kalinin -Kaliningrad -kalinite -Kaliope -kaliophilite -kalipaya -kaliph -kaliphs -kalyptra -kalyptras -kalis -Kalisch -kalysis -Kaliski -Kalispel -Kalispell -Kalisz -kalium -kaliums -Kalk -Kalkaska -Kalki -kalkvis -Kall -kallah -Kalle -kallege -Kalli -Kally -Kallick -kallidin -kallidins -Kallikak -kallilite -Kallima -Kallinge -Kallista -kallitype -Kallman -Kalman -Kalmar -Kalmarian -Kalmia -kalmias -Kalmick -Kalmuck -Kalmuk -kalo -kalogeros -kalokagathia -kalon -Kalona -kalong -kalongs -kalpa -kalpak -kalpaks -kalpas -kalpis -Kalskag -kalsomine -kalsomined -kalsominer -kalsomining -kaltemail -Kaltman -Kaluga -kalumpang -kalumpit -kalunti -Kalvesta -Kalvin -Kalvn -Kalwar -Kam -Kama -kamaaina -kamaainas -kamachi -kamachile -kamacite -kamacites -Kamadhenu -kamahi -Kamay -Kamakura -Kamal -kamala -kamalas -Kamaloka -kamanichile -kamansi -kamao -Kamares -kamarezite -Kamaria -kamarupa -kamarupic -Kamas -Kamasin -Kamass -kamassi -Kamasutra -Kamat -kamavachara -Kamba -kambal -kamboh -kambou -Kamchadal -Kamchatka -Kamchatkan -kame -kameel -kameeldoorn -kameelthorn -Kameko -kamel -kamelaukia -kamelaukion -kamelaukions -kamelkia -Kamenic -Kamensk-Uralski -Kamerad -Kamerman -Kamerun -kames -Kamet -kami -Kamiah -kamian -kamias -kamichi -kamiya -kamik -kamika -Kamikaze -kamikazes -kamiks -Kamila -Kamilah -Kamillah -Kamin -Kamina -kamis -kamleika -Kamloops -kammalan -Kammerchor -Kammerer -kammererite -kammeu -kammina -Kamp -Kampala -kamperite -kampylite -Kampliles -Kampmann -Kampmeier -Kampong -kampongs -kampseen -Kampsville -kamptomorph -kamptulicon -Kampuchea -Kamrar -Kamsa -kamseen -kamseens -kamsin -kamsins -Kamuela -Kan -kana -Kanab -kanae -kanaff -kanagi -kanaima -Kanaka -Kanal -kana-majiri -kanamycin -kanamono -Kananga -Kananur -kanap -Kanara -Kanarak -Kanaranzi -Kanarese -kanari -Kanarraville -kanas -kanat -Kanauji -Kanawari -Kanawha -Kanazawa -Kanchenjunga -kanchil -Kanchipuram -Kancler -kand -Kandace -Kandahar -kande -Kandelia -Kandy -Kandiyohi -Kandinski -Kandinsky -kandjar -kandol -Kane -kaneelhart -kaneh -Kaneoche -Kaneohe -kanephore -kanephoros -kanes -Kaneshite -Kanesian -Kaneville -kang -kanga -kangayam -kangani -kangany -kangaroo -kangarooer -kangarooing -kangaroolike -kangaroo-rat -kangaroos -Kangchenjunga -kangla -Kangli -kangri -K'ang-te -KaNgwane -Kania -Kanya -kanyaw -Kanji -kanjis -Kankakee -Kankan -Kankanai -kankedort -kankie -kankrej -Kannada -Kannan -Kannapolis -kannen -Kannry -kannu -kannume -Kano -Kanona -kanone -kanoon -Kanopolis -Kanorado -Kanosh -Kanpur -Kanred -Kans -Kans. -Kansa -Kansan -kansans -Kansas -Kansasville -Kansu -Kant -kantar -kantars -kantela -kantele -kanteles -kanteletar -kanten -Kanter -kanthan -kantharoi -kantharos -Kantian -Kantianism -kantians -kantiara -Kantism -Kantist -Kantner -Kantor -Kantos -kantry -KANU -kanuka -Kanuri -Kanwar -kanzu -KAO -Kaohsiung -Kaolack -Kaolak -kaoliang -kaoliangs -Kaolikung -kaolin -kaolinate -kaoline -kaolines -kaolinic -kaolinisation -kaolinise -kaolinised -kaolinising -kaolinite -kaolinization -kaolinize -kaolinized -kaolinizing -kaolins -kaon -kaons -KAOS -kapa -Kapaa -Kapaau -kapai -kapas -Kape -kapeika -Kapell -kapelle -Kapellmeister -Kapfenberg -kaph -kaphs -Kapila -Kaplan -kapok -kapoks -Kapoor -Kapor -kapote -Kapowsin -kapp -kappa -kapparah -kappas -kappe -Kappel -kappellmeister -Kappenne -kappie -kappland -kapuka -kapur -kaput -kaputt -Kapwepwe -Kara -Karabagh -karabiner -karaburan -Karachi -karacul -Karafuto -karagan -Karaganda -Karaya -Karaism -Karaite -Karaitic -Karaitism -Karajan -karaka -Kara-Kalpak -Kara-Kalpakia -Kara-Kalpakistan -Karakatchan -Karakoram -Karakorum -Karakul -karakule -karakuls -karakurt -Karalee -Karalynn -Kara-Lynn -Karamanlis -Karamazov -Karame -Karameh -Karami -Karamojo -Karamojong -karamu -karanda -Karankawa -karaoke -Karas -karat -Karatas -karate -karateist -karates -karats -karatto -Karb -Karbala -karbi -karch -Kardelj -Kare -kareao -kareau -Karee -Kareem -kareeta -Karel -karela -Karelia -Karelian -Karen -Karena -Karens -karewa -karez -Karharbari -Kari -Kary -kary- -Karia -karyaster -karyatid -Kariba -Karie -karyenchyma -Karil -Karyl -Karylin -Karilynn -Karilla -Karim -Karin -Karyn -Karina -Karine -karinghota -Karynne -karyo- -karyochylema -karyochrome -karyocyte -karyogamy -karyogamic -karyokinesis -karyokinetic -karyolymph -Karyolysidae -karyolysis -Karyolysus -karyolitic -karyolytic -karyology -karyologic -karyological -karyologically -karyomere -karyomerite -karyomicrosome -karyomitoic -karyomitome -karyomiton -karyomitosis -karyomitotic -karyon -karyopyknosis -karyoplasm -karyoplasma -karyoplasmatic -karyoplasmic -karyorrhexis -karyoschisis -karyosystematics -karyosoma -karyosome -karyotin -karyotins -karyotype -karyotypic -karyotypical -Kariotta -Karisa -Karissa -Karita -karite -kariti -Karl -Karla -Karlan -Karlee -Karleen -Karlen -Karlene -Karlens -Karlfeldt -Karli -Karly -Karlie -Karlik -Karlin -Karlyn -Karling -Karlis -Karlise -Karl-Marx-Stadt -Karloff -Karlotta -Karlotte -Karlow -Karlsbad -Karlsruhe -Karlstad -Karluk -Karma -karmadharaya -karma-marga -karmas -Karmathian -Karmen -karmic -karmouth -karn -Karna -Karnack -Karnak -Karnataka -Karney -karnofsky -karns -karo -Karol -Karola -Karole -Karoly -Karolyn -Karolina -Karoline -Karon -Karoo -karoos -karos -kaross -karosses -karou -Karp -karpas -Karpov -Karr -Karrah -karree -karren -Karrer -karri -Karry -Karrie -karri-tree -Karroo -Karroos -karrusel -Kars -karsha -Karshuni -Karst -Karsten -karstenite -karstic -karsts -kart -kartel -Karthaus -Karthli -karting -kartings -Kartis -kartometer -kartos -karts -Karttikeya -Kartvel -Kartvelian -karuna -Karval -karvar -Karwan -karwar -Karwinskia -Kas -kasa -Kasai -Kasaji -Kasavubu -Kasbah -kasbahs -Kasbeer -Kasbek -kasbeke -kascamiol -Kase -Kasey -kaser -Kasevich -Kasha -Kashan -kashas -Kashden -kasher -kashered -kashering -kashers -kashga -Kashgar -kashi -Kashyapa -kashim -kashima -kashira -Kashmir -Kashmiri -Kashmirian -Kashmiris -kashmirs -Kashoubish -kashrut -Kashruth -kashruths -kashruts -Kashube -Kashubian -Kasyapa -kasida -Kasigluk -Kasikumuk -Kasilof -Kask -Kaska -Kaskaskia -Kaslik -kasm -kasolite -Kasota -Kaspar -Kasper -Kasperak -Kass -Kassa -Kassab -kassabah -Kassak -Kassala -Kassandra -Kassapa -Kassaraba -Kassey -Kassel -Kassem -Kasseri -Kassi -Kassia -Kassie -Kassite -Kassity -Kasson -kassu -Kast -Kastner -Kastro -Kastrop-Rauxel -kastura -Kasubian -Kat -kat- -Kata -kata- -Katabanian -katabases -katabasis -katabatic -katabella -katabolic -katabolically -katabolism -katabolite -katabolize -katabothra -katabothron -katachromasis -katacrotic -katacrotism -katagelophobia -katagenesis -katagenetic -Katahdin -Katayev -katakana -katakanas -katakinesis -katakinetic -katakinetomer -katakinetomeric -katakiribori -katalase -Katalin -katalyses -katalysis -katalyst -katalytic -katalyze -katalyzed -katalyzer -katalyzing -katamorphic -katamorphism -katana -Katanga -Katangese -kataphoresis -kataphoretic -kataphoric -kataphrenia -kataplasia -kataplectic -kataplexy -Katar -katastate -katastatic -katat -katathermometer -katatype -katatonia -katatonic -Kataway -katchina -katchung -katcina -katcinas -Kate -Katee -Katey -Katemcy -Kateri -Katerina -Katerine -Kath -Katha -Kathak -kathal -Katharevusa -Katharyn -Katharina -Katharine -katharometer -katharses -katharsis -kathartic -Kathe -kathemoglobin -kathenotheism -Katherin -Katheryn -Katherina -Katherine -Kathi -Kathy -Kathiawar -Kathie -Kathye -kathisma -kathismata -Kathlee -Kathleen -Kathlene -Kathlin -Kathlyn -Kathlynne -Kathmandu -kathodal -kathode -kathodes -kathodic -katholikoi -Katholikos -katholikoses -Kathopanishad -Kathryn -Kathrine -Kathryne -Kathrynn -Kati -Katy -Katya -katydid -katydids -Katie -Katik -Katina -Katine -Katinka -kation -kations -katipo -Katipunan -Katipuneros -Katyusha -katjepiering -Katlaps -Katleen -Katlin -Katmai -Katmandu -katmon -Kato -katogle -Katonah -Katowice -Katrina -Katryna -Katrine -Katrinka -kats -Katsina -Katsuyama -katsunkel -katsup -Katsushika -Katsuwonidae -Katt -Kattegat -Katti -Kattie -Kattowitz -Katuf -katuka -Katukina -katun -katurai -Katuscha -Katusha -Katushka -Katz -Katzen -katzenjammer -Katzir -Katzman -Kauai -kauch -Kauffman -Kauffmann -Kaufman -Kaufmann -Kaukauna -Kaule -Kaumakani -Kaunakakai -Kaunas -Kaunda -Kauppi -Kauravas -kauri -kaury -kauries -kauris -Kauslick -Kautsky -kava -Kavaic -kavakava -Kavalla -Kavanagh -Kavanaugh -Kavaphis -kavas -kavass -kavasses -kaver -Kaveri -Kavi -kavika -Kavita -Kavla -Kaw -kaw- -Kawabata -Kawaguchi -Kawai -kawaka -kawakawa -Kawasaki -Kawchodinne -Kaweah -kawika -Kawkawlin -Kaz -kazachki -kazachok -Kazak -Kazakh -Kazakhstan -Kazakstan -Kazan -Kazanlik -Kazantzakis -kazatske -kazatski -kazatsky -kazatskies -Kazbek -Kazdag -kazi -Kazim -Kazimir -Kazincbarcika -Kazmirci -kazoo -kazoos -Kazue -kazuhiro -KB -kbar -kbars -KBE -KBP -KBPS -KBS -KC -kc/s -kcal -KCB -kCi -KCL -KCMG -KCSI -KCVO -KD -Kdar -KDCI -KDD -KDT -KE -Kea -Keaau -keach -keacorn -Kealakekua -Kealey -Kealia -Kean -Keane -Keansburg -keap -Keare -Keary -kearn -Kearney -Kearneysville -Kearny -Kearns -Kearsarge -keas -Keasbey -keat -Keatchie -Keating -Keaton -Keats -Keatsian -Keavy -keawe -Keb -kebab -kebabs -kebar -kebars -kebby -kebbie -kebbies -kebbock -kebbocks -kebbuck -kebbucks -kebyar -keblah -keblahs -Keble -kebob -kebobs -kechel -Kechi -Kechua -Kechuan -Kechuans -Kechuas -Kechumaran -keck -kecked -kecky -kecking -keckle -keckled -keckles -keckling -kecks -kecksy -kecksies -Kecskem -Kecskemet -ked -Kedah -Kedar -Kedarite -keddah -keddahs -Keddie -kedge -kedge-anchor -kedged -kedger -kedgeree -kedgerees -kedges -kedgy -kedging -Kediri -kedjave -kedlock -Kedron -Kedushah -Kedushoth -Kedushshah -Kee -keech -Keedysville -keef -Keefe -Keefer -keefs -Keegan -keek -keeked -keeker -keekers -keeking -keeks -keekwilee-house -Keel -keelage -keelages -keelback -Keelby -keelbill -keelbird -keelblock -keelboat -keel-boat -keelboatman -keelboatmen -keelboats -keel-bully -keeldrag -Keele -keeled -Keeley -Keeler -keelfat -keelhale -keelhaled -keelhales -keelhaling -keelhaul -keelhauled -keelhauling -keelhauls -Keely -Keelia -Keelie -Keelin -Keeline -keeling -keelivine -keelless -keelman -keelrake -keels -keelson -keelsons -Keelung -keelvat -Keen -keena -Keenan -keen-biting -Keene -keen-eared -keened -keen-edged -keen-eyed -Keener -keeners -Keenes -Keenesburg -keenest -keening -keenly -keenness -keennesses -keen-nosed -keen-o -keen-o-peachy -keens -Keensburg -keen-scented -keen-sighted -keen-witted -keen-wittedness -keep -keepable -keeper -keeperess -keepering -keeperless -keepers -keepership -keeping -keeping-room -keepings -keepnet -keeps -keepsake -keepsakes -keepsaky -keepworthy -keerie -keerogue -kees -Keese -Keeseville -keeshond -keeshonden -keeshonds -keeslip -keest -keester -keesters -keet -Keeton -keets -keeve -Keever -keeves -Keewatin -Keezletown -kef -Kefalotir -Kefauver -keffel -Keffer -keffiyeh -kefiatoid -kefifrel -kefir -kefiric -kefirs -Keflavik -kefs -Kefti -Keftian -Keftiu -Keg -Kegan -kegeler -kegelers -kegful -keggmiengg -Kegley -kegler -keglers -kegling -keglings -kegs -kehaya -Keheley -kehillah -kehilloth -Kehoe -kehoeite -Kehr -Kei -Key -keyage -keyaki -Keyapaha -kei-apple -keyboard -keyboarded -keyboarder -keyboarding -keyboards -keyboard's -key-bugle -keybutton -keycard -keycards -key-cold -Keid -key-drawing -keyed -keyed-up -Keyek -keyer -Keyes -Keyesport -Keifer -Keighley -keyhole -keyholes -keying -Keijo -Keiko -Keil -Keylargo -keyless -keylet -keilhauite -Keily -keylock -keyman -Keymar -keymen -keymove -Keynes -Keynesian -Keynesianism -keynote -key-note -keynoted -keynoter -keynoters -keynotes -keynoting -keypad -keypads -keypad's -Keyport -keypress -keypresses -keypunch -keypunched -keypuncher -keypunchers -keypunches -keypunching -Keir -keirs -keys -keyseat -keyseater -Keiser -Keyser -keyserlick -Keyserling -keyset -keysets -Keisling -keyslot -keysmith -keist -keister -keyster -keisters -keysters -Keisterville -keystone -keystoned -Keystoner -keystones -keystroke -keystrokes -keystroke's -Keysville -Keita -Keyte -Keitel -Keytesville -Keith -Keithley -Keithsburg -Keithville -keitloa -keitloas -keyway -keyways -keywd -keyword -keywords -keyword's -keywrd -Keizer -Kekaha -Kekchi -Kekkonen -kekotene -Kekulmula -kekuna -Kel -Kela -Kelayres -Kelantan -Kelbee -Kelby -Kelcey -kelchin -kelchyn -Kelci -Kelcy -Kelcie -keld -Kelda -Keldah -kelder -Keldon -Keldron -Kele -kelebe -kelectome -keleh -kelek -kelep -keleps -Kelford -Keli -kelia -Keligot -Kelila -Kelima -kelyphite -kelk -Kell -Kella -Kellby -Kellda -kelleg -kellegk -Kelleher -Kelley -Kellen -Kellene -Keller -Kellerman -Kellerton -kellet -Kelli -Kelly -Kellia -Kellyann -kellick -Kellie -kellies -Kelliher -Kellyn -Kellina -kellion -kellys -Kellysville -Kellyton -Kellyville -Kellnersville -kellock -Kellogg -Kellsie -kellupweed -keloid -keloidal -keloids -kelotomy -kelotomies -kelowna -kelp -kelped -kelper -kelpfish -kelpfishes -kelpy -kelpie -kelpies -kelping -kelps -kelpware -kelpwort -Kelsey -Kelseyville -Kelsi -Kelsy -Kelso -Kelson -kelsons -Kelt -kelter -kelters -kelty -Keltic -Keltically -keltics -keltie -Keltoi -Kelton -kelts -Kelula -Kelvin -kelvins -Kelwen -Kelwin -Kelwunn -Kemah -kemal -Kemalism -Kemalist -kemancha -kemb -Kemble -Kemblesville -kemelin -Kemeny -Kemerovo -Kemi -Kemme -Kemmerer -Kemp -kempas -Kempe -kemperyman -kemp-haired -kempy -Kempis -kempite -kemple -Kempner -Kemppe -kemps -Kempster -kempt -kemptken -Kempton -kempts -Ken -kenaf -kenafs -Kenai -Kenay -Kenansville -kenareh -Kenaz -kench -kenches -kend -Kendal -Kendalia -Kendall -Kendallville -Kendell -Kendy -Kendyl -kendir -kendyr -Kendleton -kendna -kendo -kendoist -kendos -Kendra -Kendrah -Kendre -Kendrew -Kendry -Kendrick -Kendricks -Kenduskeag -Kenedy -Kenefic -Kenelm -kenema -Kenesaw -Kenhorst -Kenya -Kenyan -kenyans -Kenyatta -Kenilworth -Kenyon -Kenipsim -Kenison -kenyte -Kenitra -Kenji -Kenlay -Kenlee -Kenley -Kenleigh -Kenly -kenlore -Kenmare -kenmark -Kenmore -kenmpy -Kenn -Kenna -Kennan -Kennard -Kennebec -kennebecker -Kennebunk -kennebunker -Kennebunkport -Kennecott -kenned -Kennedale -Kennedy -Kennedya -Kennedyville -Kenney -kennel -kenneled -kenneling -kennell -kennelled -Kennelly -kennelling -kennelman -kennels -kennel's -Kenner -Kennerdell -Kennesaw -Kennet -Kenneth -Kennett -Kennewick -Kenny -Kennie -kenning -kennings -kenningwort -Kennith -kenno -keno -kenogenesis -kenogenetic -kenogenetically -kenogeny -Kenon -kenophobia -kenos -Kenosha -kenosis -kenosises -kenotic -kenoticism -kenoticist -kenotism -kenotist -kenotoxin -kenotron -kenotrons -Kenova -Kenric -Kenrick -kens -Kensal -kenscoff -Kenseikai -Kensell -Kensett -Kensington -Kensitite -kenspac -kenspeck -kenspeckle -kenspeckled -Kent -Kenta -kentallenite -kente -Kenti -Kentia -Kenticism -Kentiga -Kentigera -Kentigerma -Kentiggerma -Kentish -Kentishman -Kentishmen -Kentland -kentle -kentledge -Kenton -kentrogon -kentrolite -Kentuck -Kentucky -Kentuckian -kentuckians -Kentwood -Kenvil -Kenvir -Kenway -Kenward -Kenwee -Kenweigh -Kenwood -Kenwrick -Kenzi -Kenzie -Keo -keogenesis -Keogh -Keokee -Keokuk -Keon -Keos -Keosauqua -Keota -keout -kep -kephalin -kephalins -Kephallenia -Kephallina -kephalo- -kephir -kepi -kepis -Kepler -Keplerian -Kepner -kepped -Keppel -keppen -kepping -keps -kept -Ker -kera- -keracele -keraci -Kerak -Kerala -keralite -keramic -keramics -kerana -keraphyllocele -keraphyllous -kerasin -kerasine -kerat -kerat- -keratalgia -keratectacia -keratectasia -keratectomy -keratectomies -Keraterpeton -keratin -keratinization -keratinize -keratinized -keratinizing -keratinoid -keratinophilic -keratinose -keratinous -keratins -keratitis -kerato- -keratoangioma -keratocele -keratocentesis -keratocni -keratoconi -keratoconjunctivitis -keratoconus -keratocricoid -keratode -keratoderma -keratodermia -keratogenic -keratogenous -keratoglobus -keratoglossus -keratohelcosis -keratohyal -keratoid -Keratoidea -keratoiritis -Keratol -keratoleukoma -keratolysis -keratolytic -keratoma -keratomalacia -keratomas -keratomata -keratome -keratometer -keratometry -keratometric -keratomycosis -keratoncus -keratonyxis -keratonosus -keratophyr -keratophyre -keratoplasty -keratoplastic -keratoplasties -keratorrhexis -keratoscope -keratoscopy -keratose -keratoses -keratosic -keratosis -keratosropy -keratotic -keratotome -keratotomy -keratotomies -keratto -keraulophon -keraulophone -Keraunia -keraunion -keraunograph -keraunography -keraunographic -keraunophobia -keraunophone -keraunophonic -keraunoscopy -keraunoscopia -kerb -kerbaya -kerbed -Kerbela -Kerby -kerbing -kerbs -kerbstone -kerb-stone -Kerch -kercher -kerchief -kerchiefed -kerchiefs -kerchief's -kerchieft -kerchieves -kerchoo -kerchug -kerchunk -kerectomy -Kerek -Kerekes -kerel -Keremeos -Kerens -Kerenski -Kerensky -Keres -Keresan -Kerewa -kerf -kerfed -kerfing -kerflap -kerflop -kerflummox -kerfs -kerfuffle -Kerge -Kerguelen -Kerhonkson -Keri -Kery -Keriann -Kerianne -kerygma -kerygmata -kerygmatic -kerykeion -Kerin -kerystic -kerystics -Kerite -Keryx -Kerk -Kerkhoven -Kerki -Kerkyra -Kerkrade -kerl -Kermadec -Kerman -Kermanji -Kermanshah -kermes -kermesic -kermesite -kermess -kermesses -Kermy -Kermie -kermis -kermises -KERMIT -Kern -Kernan -kerne -kerned -kernel -kerneled -kerneling -kernella -kernelled -kernelless -kernelly -kernelling -kernels -kernel's -kerner -Kernersville -kernes -kernetty -Kernighan -kerning -kernish -kernite -kernites -kernoi -kernos -Kerns -Kernville -kero -kerogen -kerogens -kerolite -keros -kerosene -kerosenes -kerosine -kerosines -Kerouac -kerplunk -Kerr -Kerri -Kerry -Kerria -kerrias -Kerrick -Kerrie -kerries -kerrikerri -Kerril -Kerrill -Kerrin -Kerrison -kerrite -Kerrville -kers -kersanne -kersantite -Kersey -kerseymere -kerseynette -kerseys -Kershaw -kerslam -kerslosh -kersmash -Kerst -Kersten -Kerstin -kerugma -kerugmata -keruing -kerve -kerwham -Kerwin -Kerwinn -Kerwon -kesar -Keshena -Keshenaa -Kesia -Kesley -keslep -Keslie -kesse -Kessel -Kesselring -Kessia -Kessiah -Kessler -kesslerman -Kester -Kesteven -kestrel -kestrels -Keswick -Ket -ket- -keta -ketal -ketapang -ketatin -ketazine -ketch -Ketchan -ketchcraft -ketches -ketchy -Ketchikan -ketch-rigged -Ketchum -ketchup -ketchups -ketembilla -keten -ketene -ketenes -kethib -kethibh -ketyl -ketimid -ketimide -ketimin -ketimine -ketine -ketipate -ketipic -ketmie -keto -keto- -ketogen -ketogenesis -ketogenetic -ketogenic -ketoheptose -ketohexose -Ketoi -ketoketene -ketol -ketole -ketolyses -ketolysis -ketolytic -ketols -ketonaemia -ketone -ketonemia -ketones -ketonic -ketonimid -ketonimide -ketonimin -ketonimine -ketonization -ketonize -ketonuria -ketose -ketoses -ketoside -ketosis -ketosteroid -ketosuccinic -ketotic -ketoxime -kette -Kettering -Ketti -Ketty -Kettie -ketting -kettle -kettle-bottom -kettle-bottomed -kettlecase -kettledrum -kettledrummer -kettledrums -kettleful -kettlemaker -kettlemaking -kettler -Kettlersville -kettles -kettle's -kettle-stitch -kettrin -Ketu -ketuba -ketubah -ketubahs -Ketubim -ketuboth -ketupa -Keturah -Ketuvim -ketway -Keung -keup -Keuper -keurboom -Kev -kevalin -Kevan -kevazingo -kevel -kevelhead -kevels -Keven -kever -Keverian -Keverne -Kevil -kevils -Kevin -Kevyn -Kevina -Kevon -kevutzah -kevutzoth -Kew -Kewadin -Kewanee -Kewanna -Kewaskum -Kewaunee -Keweenawan -keweenawite -Kewpie -kex -kexes -kexy -Kezer -KFT -KG -kg. -KGB -kgf -kg-m -kgr -Kha -Khabarovo -Khabarovsk -Khabur -Khachaturian -khaddar -khaddars -khadi -khadis -khaf -Khafaje -khafajeh -Khafre -khafs -khagiarite -khahoon -Khai -Khaya -khayal -Khayy -Khayyam -khaiki -khair -khaja -Khajeh -khajur -khakanship -khakham -khaki -khaki-clad -khaki-clothed -khaki-colored -khakied -khaki-hued -khakilike -khakis -khalal -khalat -Khalde -Khaldian -Khaled -Khalid -khalif -khalifa -khalifas -Khalifat -khalifate -khalifs -Khalil -Khalin -Khalk -Khalkha -Khalkidike -Khalkidiki -Khalkis -Khalq -Khalsa -khalsah -Khama -khamal -Khami -Khammurabi -khamseen -khamseens -khamsin -khamsins -Khamti -Khan -khanate -khanates -khanda -khandait -khanga -Khania -khanjar -khanjee -khankah -Khanna -Khano -khans -khansama -khansamah -khansaman -khanum -khaph -khaphs -khar -kharaj -Kharia -kharif -Kharijite -Kharkov -Kharoshthi -kharouba -kharroubah -Khartoum -Khartoumer -Khartum -kharua -kharwa -Kharwar -Khasa -Khasi -Khaskovo -Khas-kura -khass -khat -khatib -khatin -khatri -khats -Khatti -Khattish -Khattusas -Khazar -Khazarian -khazen -khazenim -khazens -kheda -khedah -khedahs -khedas -khediva -khedival -khedivate -khedive -khedives -khediviah -khedivial -khediviate -Khelat -khella -khellin -Khem -Khenifra -khepesh -Kherson -Kherwari -Kherwarian -khesari -khet -kheth -kheths -khets -Khevzur -khi -Khiam -Khichabia -khidmatgar -khidmutgar -Khieu -Khila -khilat -Khios -khir -khirka -khirkah -khirkahs -khis -Khitan -khitmatgar -khitmutgar -Khiva -Khivan -Khlyst -Khlysti -Khlysty -Khlysts -Khlustino -Khmer -Khnum -Kho -khodja -Khoi -Khoikhoi -Khoi-khoin -Khoin -Khoiniki -Khoisan -Khoja -khojah -Khojent -khoka -Khokani -Khond -Khondi -Khorassan -Khorma -Khorramshahr -Khos -Khosa -Khosrow -khot -Khotan -Khotana -Khotanese -khoum -Khoumaini -khoums -Khoury -Khowar -Khrushchev -khu -Khuai -khubber -khud -Khudari -Khufu -khula -khulda -Khulna -khuskhus -khus-khus -Khussak -khutba -Khutbah -khutuktu -Khuzi -Khuzistan -khvat -Khwarazmian -KHz -KI -KY -Ky. -KIA -kiaat -kiabooca -kyabuka -kiack -Kyack -kyacks -Kiah -kyah -Kiahsville -kyak -kiaki -kyaks -Kial -kialee -kialkee -kiang -kyang -Kiangan -Kiangyin -Kiangling -Kiangpu -kiangs -Kiangsi -Kiangsu -Kiangwan -kyanise -kyanised -kyanises -kyanising -kyanite -kyanites -kyanization -kyanize -kyanized -kyanizes -kyanizing -kyano- -kyanol -Kiaochow -kyar -kyars -KIAS -kyat -kyathoi -kyathos -kyats -kiaugh -kiaughs -kyaung -kibbe -kibbeh -kibbehs -kibber -kibbes -kibble -kibbled -kibbler -kibblerman -kibbles -kibbling -kibbutz -kibbutzim -kibbutznik -kibe -Kibei -kibeis -Kybele -kibes -kiby -kibitka -kibitz -kibitzed -kibitzer -kibitzers -kibitzes -kibitzing -kibla -kiblah -kiblahs -kiblas -kibosh -kiboshed -kiboshes -kiboshing -kibsey -Kyburz -kichel -kick -kickable -kick-about -Kickapoo -kickback -kickbacks -kickball -kickboard -kickdown -kicked -kickee -kicker -kickers -kicky -kickier -kickiest -kickie-wickie -kicking -kicking-colt -kicking-horses -kickish -kickless -kickoff -kick-off -kickoffs -kickout -kickplate -kicks -kickseys -kicksey-winsey -kickshaw -kickshaws -kicksies -kicksie-wicksie -kicksy-wicksy -kick-sled -kicksorter -kickstand -kickstands -kick-start -kicktail -kickup -kick-up -kickups -kickwheel -kickxia -Kicva -Kid -Kyd -kidang -kidcote -Kidd -Kidde -kidded -Kidder -Kidderminster -kidders -kiddy -kiddie -kiddier -kiddies -kidding -kiddingly -kiddish -kiddishness -kiddle -kiddo -kiddoes -kiddos -Kiddush -kiddushes -kiddushin -kid-glove -kid-gloved -kidhood -kidlet -kidlike -kidling -kidnap -kidnaped -kidnapee -kidnaper -kidnapers -kidnaping -Kidnapped -kidnappee -kidnapper -kidnappers -kidnapper's -kidnapping -kidnappings -kidnapping's -kidnaps -kidney -kidney-leaved -kidneylike -kidneylipped -kidneyroot -kidneys -kidney's -kidney-shaped -kidneywort -Kidron -Kids -kid's -kidskin -kid-skin -kidskins -kidsman -kidvid -kidvids -kie -kye -Kief -kiefekil -Kiefer -Kieffer -kiefs -Kieger -Kiehl -Kiehn -kieye -kiekie -Kiel -kielbasa -kielbasas -kielbasi -kielbasy -Kielce -Kiele -Kieler -Kielstra -Kielty -Kienan -Kiepura -Kier -Kieran -Kierkegaard -Kierkegaardian -Kierkegaardianism -Kiernan -kiers -Kiersten -Kies -kieselguhr -kieselgur -kieserite -kiesselguhr -kiesselgur -kiesserite -Kiester -kiesters -kiestless -Kieta -Kiev -Kievan -Kiewit -KIF -kifs -Kigali -Kigensetsu -Kihei -Kiho -kiyas -kiyi -ki-yi -Kiyohara -Kiyoshi -Kiirun -Kikai -kikar -Kikatsik -kikawaeo -kike -kyke -Kikelia -Kiker -kikes -Kiki -kikki -Kikldhes -Kyklopes -Kyklops -kikoi -Kikongo -kikori -kiku -kikuel -Kikuyu -Kikuyus -kikumon -Kikwit -kil -Kyl -Kila -Kyla -kiladja -Kilah -Kylah -Kilaya -kilampere -Kilan -Kylander -Kilar -Kilauea -Kilby -Kilbourne -kilbrickenite -Kilbride -Kildare -kildee -kilderkin -Kile -Kyle -kileh -Kiley -kileys -Kylen -kilerg -Kylertown -Kilgore -Kilhamite -kilhig -Kilian -kiliare -Kylie -kylies -kilij -kylikec -kylikes -Kylila -kilim -Kilimanjaro -kilims -kylin -Kylynn -kylite -kylix -Kilk -Kilkenny -kill -kill- -killable -killadar -Killam -Killanin -Killarney -killas -Killawog -Killbuck -killcalf -kill-courtesy -kill-cow -kill-crazy -killcrop -killcu -killdee -killdeer -killdeers -killdees -kill-devil -Killduff -killed -Killeen -Killen -killer -killer-diller -killers -killese -Killy -Killian -killick -killickinnic -killickinnick -killicks -Killie -Killiecrankie -killies -killifish -killifishes -killig -Killigrew -killikinic -killikinick -killing -killingly -killingness -killings -Killington -killinite -Killion -killjoy -kill-joy -killjoys -kill-kid -killoch -killock -killocks -killogie -Killona -Killoran -killow -kills -kill-time -kill-wart -killweed -killwort -Kilmarnock -Kilmarx -Kilmer -Kilmichael -Kiln -kiln-burnt -kiln-dry -kiln-dried -kiln-drying -kilned -kilneye -kilnhole -kilning -kilnman -kilnrib -kilns -kilnstick -kilntree -kilo -kylo -kilo- -kiloampere -kilobar -kilobars -kilobaud -kilobit -kilobyte -kilobytes -kilobits -kiloblock -kilobuck -kilocalorie -kilocycle -kilocycles -kilocurie -kilodyne -kyloe -kilogauss -kilograin -kilogram -kilogram-calorie -kilogram-force -kilogramme -kilogramme-metre -kilogram-meter -kilogrammetre -kilograms -kilohertz -kilohm -kilojoule -kiloline -kiloliter -kilolitre -kilolumen -kilom -kilomegacycle -kilometer -kilometers -kilometrage -kilometre -kilometric -kilometrical -kilomole -kilomoles -kilooersted -kilo-oersted -kiloparsec -kilopoise -kilopound -kilorad -kilorads -kilos -kilostere -kiloton -kilotons -kilovar -kilovar-hour -kilovolt -kilovoltage -kilovolt-ampere -kilovolt-ampere-hour -kilovolts -kiloware -kilowatt -kilowatt-hour -kilowatts -kiloword -kilp -Kilpatrick -Kilroy -Kilsyth -Kylstra -kilt -kilted -kilter -kilters -kilty -kiltie -kilties -kilting -kiltings -kiltlike -kilts -Kiluba -kiluck -Kilung -Kilwich -Kim -Kym -kymation -kymatology -Kimball -Kimballton -kymbalon -kimbang -Kimbe -Kimbell -Kimber -Kimberlee -Kimberley -Kimberli -Kimberly -kimberlin -Kimberlyn -kimberlite -Kimberton -Kimble -kimbo -Kimbolton -Kimbra -Kimbundu -kimchee -kimchees -kimchi -kimchis -Kimeridgian -kimigayo -Kimitri -kim-kam -Kimmel -Kimmell -kimmer -kimmeridge -Kimmi -Kimmy -Kimmie -kimmo -Kimmochi -Kimmswick -kimnel -kymnel -kymogram -kymograms -kymograph -kymography -kymographic -Kimon -kimono -kimonoed -kimonos -Kimper -Kimpo -Kymry -Kymric -Kimura -kin -kina -Kinabalu -kinabulu -kinaestheic -kinaesthesia -kinaesthesias -kinaesthesis -kinaesthetic -kinaesthetically -kinah -Kynan -Kinards -kinas -kinase -kinases -Kinata -Kinau -kinboot -kinbot -kinbote -Kincaid -Kincardine -Kincardineshire -Kinch -Kincheloe -Kinchen -kinchin -Kinchinjunga -kinchinmort -kincob -Kind -kindal -Kinde -Kinder -kindergarten -kindergartener -kindergartening -kindergartens -kindergartner -kindergartners -Kinderhook -Kindertotenlieder -kindest -kindheart -kindhearted -kind-hearted -kindheartedly -kindheartedness -Kindig -kindjal -kindle -kindled -kindler -kindlers -kindles -kindlesome -kindless -kindlessly -kindly -kindly-disposed -kindlier -kindliest -kindlily -kindliness -kindlinesses -kindling -kindlings -kind-mannered -kindness -kindnesses -kindred -kindredless -kindredly -kindredness -kindreds -kindredship -kindrend -kinds -Kindu -Kindu-Port-Empain -kine -Kyne -Kinelski -kinema -kinemas -kinematic -kinematical -kinematically -kinematics -kinematograph -kinematographer -kinematography -kinematographic -kinematographical -kinematographically -kinemometer -kineplasty -kinepox -kines -kinesalgia -kinescope -kinescoped -kinescopes -kinescoping -kineses -kinesi- -kinesiatric -kinesiatrics -kinesic -kinesically -kinesics -kinesimeter -kinesiology -kinesiologic -kinesiological -kinesiologies -kinesiometer -kinesipathy -kinesis -kinesitherapy -kinesodic -kinestheses -kinesthesia -kinesthesias -kinesthesis -kinesthetic -kinesthetically -kinetic -kinetical -kinetically -kineticism -kineticist -kinetics -kinetin -kinetins -kineto- -kinetochore -kinetogenesis -kinetogenetic -kinetogenetically -kinetogenic -kinetogram -kinetograph -kinetographer -kinetography -kinetographic -kinetomer -kinetomeric -kinetonema -kinetonucleus -kinetophobia -kinetophone -kinetophonograph -kinetoplast -kinetoplastic -kinetoscope -kinetoscopic -kinetosis -kinetosome -Kynewulf -kinfolk -kinfolks -King -kingbird -king-bird -kingbirds -kingbolt -king-bolt -kingbolts -Kingchow -kingcob -king-crab -kingcraft -king-craft -kingcup -king-cup -kingcups -kingdom -kingdomed -kingdomful -kingdomless -kingdoms -kingdom's -kingdomship -Kingdon -kinged -king-emperor -Kingfield -kingfish -king-fish -Kingfisher -kingfishers -kingfishes -kinghead -king-hit -kinghood -kinghoods -Kinghorn -kinghunter -kinging -king-killer -kingklip -Kinglake -kingless -kinglessness -kinglet -kinglets -kingly -kinglier -kingliest -kinglihood -kinglike -kinglily -kingliness -kingling -kingmaker -king-maker -kingmaking -Kingman -Kingmont -king-of-arms -king-of-the-herrings -king-of-the-salmon -kingpiece -king-piece -kingpin -king-pin -kingpins -kingpost -king-post -kingposts -king-ridden -kingrow -Kings -Kingsburg -Kingsbury -Kingsdown -Kingsford -kingship -kingships -kingside -kingsides -kingsize -king-size -king-sized -Kingsland -Kingsley -Kingsly -kingsman -kingsnake -kings-of-arms -Kingsport -Kingston -Kingston-upon-Hull -Kingstown -Kingstree -Kingsville -Kingtehchen -Kingu -Kingwana -kingweed -king-whiting -king-whitings -Kingwood -kingwoods -kinhin -Kinhwa -kinic -kinin -kininogen -kininogenic -kinins -Kinipetu -kink -kinkable -Kinkaid -Kinkaider -kinkajou -kinkajous -kinkcough -kinked -kinker -kinkhab -kinkhaust -kinkhost -kinky -kinkier -kinkiest -kinkily -kinkiness -kinking -kinkle -kinkled -kinkly -kinks -kinksbush -kinless -Kinloch -Kinmundy -Kinna -Kinnard -Kinnear -Kinney -Kinnelon -kinnery -Kinny -Kinnie -kinnikinic -kinnikinick -kinnikinnic -kinnikinnick -kinnikinnik -Kinnon -kinnor -kino -kinofluous -kinology -kinone -kinoo -kinoos -kinoplasm -kinoplasmic -Kinorhyncha -kinos -kinospore -Kinosternidae -Kinosternon -kinot -kinotannic -Kinross -Kinrossshire -kins -Kinsale -Kinsey -kinsen -kinsfolk -Kinshasa -Kinshasha -kinship -kinships -Kinsley -Kinsler -Kinsman -kinsmanly -kinsmanship -kinsmen -Kinson -kinspeople -Kinston -kinswoman -kinswomen -Kinta -kintar -Kynthia -Kintyre -kintlage -Kintnersville -kintra -kintry -Kinu -kinura -kynurenic -kynurin -kynurine -Kinzer -Kinzers -kioea -Kioga -Kyoga -Kioko -Kiona -kionectomy -kionectomies -Kyongsong -kionotomy -kionotomies -kyoodle -kyoodled -kyoodling -kiosk -kiosks -Kioto -Kyoto -kiotome -kiotomy -kiotomies -Kiowa -Kioway -Kiowan -Kiowas -KIP -kipage -Kipchak -kipe -kipfel -kip-ft -kyphoscoliosis -kyphoscoliotic -kyphoses -Kyphosidae -kyphosis -kyphotic -Kipling -Kiplingese -Kiplingism -Kipnis -Kipnuk -Kipp -kippage -Kippar -kipped -kippeen -kippen -Kipper -kippered -kipperer -kippering -kipper-nut -kippers -Kippy -Kippie -kippin -kipping -kippur -Kyprianou -KIPS -kipsey -kipskin -kipskins -Kipton -kipuka -kir -Kira -Kyra -Kiran -Kiranti -Kirbee -Kirby -Kirbie -kirbies -Kirby-Smith -Kirbyville -Kirch -Kircher -Kirchhoff -Kirchner -Kirchoff -Kirghiz -Kirghizean -Kirghizes -Kirghizia -Kiri -Kyriako -kyrial -Kyriale -Kiribati -Kirichenko -Kyrie -kyrielle -kyries -kirigami -kirigamis -Kirilenko -Kirillitsa -Kirima -Kirimia -kirimon -Kirin -kyrine -kyriologic -kyrios -Kirit -Kiriwina -Kirk -Kirkby -Kirkcaldy -Kirkcudbright -Kirkcudbrightshire -Kirkenes -kirker -Kirkersville -kirkyard -kirkify -kirking -kirkinhead -Kirkland -kirklike -Kirklin -Kirkman -kirkmen -Kirkpatrick -kirks -Kirksey -kirk-shot -Kirksville -kirkton -kirktown -Kirkuk -Kirkville -Kirkwall -kirkward -Kirkwood -Kirman -Kirmanshah -kirmess -kirmesses -kirmew -kirn -kirned -kirning -kirns -kirombo -Kiron -Kironde -Kirov -Kirovabad -Kirovograd -kirpan -kirs -Kirsch -kirsches -Kirschner -kirschwasser -kirsen -Kirshbaum -Kirst -Kirsten -Kirsteni -Kirsti -Kirsty -Kirstin -Kirstyn -Kyrstin -Kirt -Kirtland -kirtle -kirtled -Kirtley -kirtles -Kiruna -Kirundi -kirve -Kirven -kirver -Kirvin -Kirwin -kisaeng -kisan -kisang -Kisangani -kischen -kyschty -kyschtymite -Kiselevsk -Kish -Kishambala -Kishar -kishen -Kishi -kishy -Kishinev -kishka -kishkas -kishke -kishkes -kishon -kiskadee -kiskatom -kiskatomas -kiskitom -kiskitomas -Kislev -Kismayu -kismat -kismats -Kismet -kismetic -kismets -Kisor -kisra -KISS -kissability -kissable -kissableness -kissably -kissage -kissar -kissed -Kissee -Kissel -kisser -kissers -kisses -kissy -Kissiah -Kissie -Kissimmee -kissing -Kissinger -kissingly -kiss-me -kiss-me-quick -Kissner -kiss-off -kissproof -kisswise -kist -kistful -kistfuls -Kistiakowsky -Kistler -Kistna -Kistner -kists -kistvaen -Kisumu -Kisung -kiswa -kiswah -Kiswahili -Kit -kitab -kitabi -kitabis -Kitakyushu -Kitalpha -Kitamat -kitambilla -Kitan -kitar -Kitasato -kitbag -kitcat -kit-cat -Kitchen -kitchendom -Kitchener -kitchenet -kitchenette -kitchenettes -kitchenful -kitcheny -kitchenless -kitchenmaid -kitchenman -kitchen-midden -kitchenry -kitchens -kitchen's -kitchenward -kitchenwards -kitchenware -kitchenwife -kitchie -Kitchi-juz -kitching -kite -Kyte -kited -kiteflier -kiteflying -kitelike -kitenge -kiter -kiters -kites -kytes -kite-tailed -kite-wind -kit-fox -kith -kithara -kitharas -kithe -kythe -kithed -kythed -Kythera -kithes -kythes -kithing -kything -Kythira -kithless -kithlessness -kithogue -kiths -kiting -kitish -kitysol -Kitkahaxki -Kitkehahki -kitling -kitlings -Kitlope -kitman -kitmudgar -kytoon -kits -kit's -kitsch -kitsches -kitschy -Kittanning -kittar -Kittatinny -kitted -kittel -kitten -kitten-breeches -kittendom -kittened -kittenhearted -kittenhood -kittening -kittenish -kittenishly -kittenishness -kittenless -kittenlike -kittens -kitten's -kittenship -kitter -kittereen -Kittery -kitthoge -Kitti -Kitty -kitty-cat -kittycorner -kitty-corner -kittycornered -kitty-cornered -Kittie -kitties -Kittyhawk -Kittikachorn -kitting -kittisol -kittysol -Kittitas -kittiwake -kittle -kittled -kittlepins -kittler -kittles -kittlest -kittly -kittly-benders -kittling -kittlish -kittock -kittool -Kittredge -Kittrell -kittul -Kitunahan -Kitwe -Kitzmiller -kyu -kyung -Kiungchow -Kiungshan -Kyurin -Kyurinish -Kiushu -Kyushu -kiutle -kiva -kivas -kiver -kivikivi -Kivu -kiwach -Kiwai -Kiwanian -Kiwanis -kiwi -kiwikiwi -kiwis -Kizi-kumuk -Kizil -Kyzyl -Kizilbash -Kizzee -Kizzie -kJ -Kjeldahl -kjeldahlization -kjeldahlize -Kjersti -Kjolen -Kkyra -KKK -KKt -KKtP -kl -kl- -kl. -klaberjass -Klabund -klafter -klaftern -Klagenfurt -Klagshamn -Klayman -Klaipeda -klam -Klamath -Klamaths -Klan -Klangfarbe -Klanism -klans -Klansman -Klansmen -Klanswoman -Klapp -Klappvisier -Klaproth -klaprotholite -Klara -Klarika -Klarrisa -Klaskino -klatch -klatches -klatsch -klatsches -Klatt -klaudia -Klaus -Klausenburg -klavern -klaverns -Klavier -Klaxon -klaxons -Klber -kleagle -kleagles -Kleber -Klebs -Klebsiella -Klecka -Klee -Kleeman -kleeneboc -kleenebok -Kleenex -Kleffens -Klehm -Kleiber -kleig -Kleiman -Klein -Kleinian -kleinite -Kleinstein -Kleist -Kleistian -Klemens -Klement -Klemm -Klemme -Klemperer -klendusic -klendusity -klendusive -Klenk -Kleon -Klepac -Kleper -klepht -klephtic -klephtism -klephts -klept- -kleptic -kleptistic -kleptomania -kleptomaniac -kleptomaniacal -kleptomaniacs -kleptomanias -kleptomanist -kleptophobia -Kler -klesha -Kletter -Kleve -klezmer -Kliber -klick -klicket -Klickitat -Klydonograph -klieg -Klikitat -Kliman -Kliment -Klimesh -Klimt -Klina -Kline -K-line -Kling -Klingel -Klinger -Klingerstown -Klinges -Klingsor -klino -klip -klipbok -klipdachs -klipdas -klipfish -kliphaas -klippe -klippen -KLIPS -klipspringer -klismoi -klismos -klister -klisters -Klystron -klystrons -Kljuc -kln -Klngsley -KLOC -Klockau -klockmannite -kloesse -klom -Kloman -Klondike -Klondiker -klong -klongs -klooch -kloof -kloofs -klook-klook -klootch -klootchman -klop -klops -Klopstock -Klos -klosh -klosse -Klossner -Kloster -Klosters -Klotz -klowet -Kluang -Kluck -klucker -Kluckhohn -Kluczynski -kludge -kludged -kludges -kludging -Klug -Kluge -kluges -Klump -klunk -Klusek -Klute -klutz -klutzes -klutzy -klutzier -klutziest -klutziness -Klux -Kluxer -klva -km -km. -km/sec -kMc -kmel -K-meson -kmet -Kmmel -kmole -KN -kn- -kn. -knab -knabble -Knaben -knack -knackaway -knackebrod -knacked -knacker -knackery -knackeries -knackers -knacky -knackier -knackiest -knacking -knackish -knacks -Knackwurst -knackwursts -knag -knagged -knaggy -knaggier -knaggiest -knaidel -knaidlach -knaydlach -knap -knapbottle -knap-bottle -knape -Knapp -knappan -knappe -knapped -knapper -knappers -knappy -knapping -knappish -knappishly -knapple -knaps -knapsack -knapsacked -knapsacking -knapsacks -knapsack's -knapscap -knapscull -knapweed -knapweeds -knar -knark -knarl -knarle -knarred -knarry -knars -knaster -knatch -knatte -Knauer -knaur -knaurs -Knautia -knave -knave-child -knavery -knaveries -knaves -knave's -knaveship -knavess -knavish -knavishly -knavishness -knaw -knawel -knawels -knead -kneadability -kneadable -kneaded -kneader -kneaders -kneading -kneadingly -kneading-trough -kneads -knebelite -knee -knee-bent -knee-bowed -knee-braced -knee-breeched -kneebrush -kneecap -knee-cap -kneecapping -kneecappings -kneecaps -knee-crooking -kneed -knee-deep -knee-high -kneehole -knee-hole -kneeholes -kneeing -knee-joint -knee-jointed -kneel -Kneeland -kneeled -knee-length -kneeler -kneelers -kneelet -kneeling -kneelingly -kneels -kneepad -kneepads -kneepan -knee-pan -kneepans -kneepiece -knees -knee-shaking -knee-shaped -knee-sprung -kneestone -knee-tied -knee-timber -knee-worn -Kneiffia -Kneippism -knell -knelled -Kneller -knelling -knell-like -knells -knell's -knelt -Knepper -Knesset -Knesseth -knessets -knet -knetch -knevel -knew -knez -knezi -kniaz -knyaz -kniazi -knyazi -Knick -knicker -Knickerbocker -knickerbockered -knickerbockers -knickerbocker's -knickered -knickers -knickknack -knick-knack -knickknackatory -knickknacked -knickknackery -knickknacket -knickknacky -knickknackish -knickknacks -knicknack -knickpoint -Knierim -Knies -knife -knife-backed -knife-bladed -knifeboard -knife-board -knifed -knife-edge -knife-edged -knife-featured -knifeful -knife-grinder -knife-handle -knife-jawed -knifeless -knifelike -knifeman -knife-plaited -knife-point -knifeproof -knifer -kniferest -knifers -knifes -knife-shaped -knifesmith -knife-stripped -knifeway -knifing -knifings -Knifley -Kniggr -Knight -knight-adventurer -knightage -Knightdale -knighted -knight-errant -knight-errantry -knight-errantries -knight-errantship -knightess -knighthead -knight-head -knighthood -knighthood-errant -knighthoods -Knightia -knighting -knightless -knightly -knightlihood -knightlike -knightliness -knightling -Knighton -knights -Knightsbridge -Knightsen -knights-errant -knight-service -knightship -knight's-spur -Knightstown -Knightsville -knightswort -Knigsberg -Knigshte -Knik -Knin -Knipe -Kniphofia -Knippa -knipperdolling -knish -knishes -knysna -Knisteneaux -knit -knitback -knitch -Knitra -knits -knitster -knittable -knitted -Knitter -knitters -knittie -knitting -knittings -knittle -knitwear -knitwears -knitweed -knitwork -knive -knived -knivey -knives -knob -knobbed -knobber -knobby -knobbier -knobbiest -knob-billed -knobbiness -knobbing -knobble -knobbled -knobbler -knobbly -knobblier -knobbliest -knobbling -Knobel -knobkerry -knobkerrie -Knoblick -knoblike -Knobloch -knob-nosed -Knobnoster -knobs -knob's -knobstick -knobstone -knobular -knobweed -knobwood -knock -knock- -knockabout -knock-about -knockaway -knockdown -knock-down -knock-down-and-drag -knock-down-and-drag-out -knock-down-drag-out -knockdowns -knocked -knocked-down -knockemdown -knocker -knocker-off -knockers -knocker-up -knocking -knockings -knocking-shop -knock-knee -knock-kneed -knock-knees -knockless -knock-me-down -knockoff -knockoffs -knock-on -knockout -knock-out -knockouts -knocks -knockstone -knockup -knockwurst -knockwursts -knoit -Knoke -knol-khol -Knoll -knolled -knoller -knollers -knolly -knolling -knolls -knoll's -knop -knopite -knopped -knopper -knoppy -knoppie -knops -knopweed -knorhaan -knorhmn -knorr -Knorria -Knorring -knosp -knosped -knosps -Knossian -Knossos -knot -knotberry -knotgrass -knot-grass -knothead -knothole -knotholes -knothorn -knot-jointed -knotless -knotlike -knot-portering -knotroot -knots -knot's -Knott -knotted -knotter -knotters -knotty -knottier -knottiest -knotty-leaved -knottily -knottiness -knotting -knotty-pated -knotweed -knotweeds -knotwork -knotwort -knout -knouted -knouting -knouts -know -knowability -knowable -knowableness -know-all -knowe -knower -knowers -knoweth -knowhow -know-how -knowhows -knowing -knowinger -knowingest -knowingly -knowingness -knowings -know-it-all -Knowland -Knowle -knowledgable -knowledgableness -knowledgably -knowledge -knowledgeability -knowledgeable -knowledgeableness -knowledgeably -knowledged -knowledge-gap -knowledgeless -knowledgement -knowledges -knowledging -Knowles -Knowlesville -Knowling -know-little -Knowlton -known -know-nothing -knownothingism -Know-nothingism -know-nothingness -knowns -knowperts -knows -Knox -Knoxboro -Knoxdale -Knoxian -Knoxville -knoxvillite -KNP -Knt -Knt. -knub -knubby -knubbier -knubbiest -knubbly -knublet -knuckle -knuckleball -knuckleballer -knucklebone -knuckle-bone -knucklebones -knuckled -knuckle-deep -knuckle-duster -knuckle-dusters -knucklehead -knuckleheaded -knuckleheadedness -knuckleheads -knuckle-joint -knuckle-kneed -knuckler -knucklers -knuckles -knucklesome -knuckly -knucklier -knuckliest -knuckling -knucks -knuclesome -Knudsen -Knudson -knuffe -knulling -knur -knurl -knurled -knurly -knurlier -knurliest -knurlin -knurling -knurls -knurry -knurs -Knut -Knute -Knuth -Knutsen -Knutson -knutty -KO -Koa -koae -Koah -Koal -koala -koalas -koali -koan -koans -koas -Koasati -kob -Kobayashi -Koball -koban -kobang -Kobarid -Kobe -kobellite -Kobenhavn -Kobi -Koby -Kobylak -kobird -Koblas -Koblenz -Koblick -kobo -kobold -kobolds -kobong -kobs -kobu -Kobus -Koch -Kochab -Kocher -Kochetovka -Kochi -Kochia -Kochkin -kochliarion -koda -Kodachrome -Kodagu -Kodak -Kodaked -kodaker -Kodaking -kodakist -kodakked -kodakking -kodakry -Kodaly -Kodashim -Kodiak -Kodyma -kodkod -kodogu -Kodok -kodro -kodurite -kOe -Koeberlinia -Koeberliniaceae -koeberliniaceous -koechlinite -Koehler -Koeksotenok -koel -Koellia -Koelreuteria -koels -Koeltztown -koenenite -Koenig -Koenigsberg -Koeninger -Koenraad -Koepang -Koeppel -Koeri -Koerlin -Koerner -Koestler -Koetke -koff -Koffka -Koffler -Koffman -koft -kofta -koftgar -koftgari -Kofu -kogai -kogasin -koggelmannetje -Kogia -Koh -Kohanim -Kohathite -kohekohe -Koheleth -kohemp -Kohen -Kohens -Kohima -Kohinoor -Koh-i-noor -Kohistan -Kohistani -Kohl -Kohlan -Kohler -kohlrabi -kohlrabies -kohls -Kohn -Kohoutek -kohua -koi -Koy -koyan -Koiari -Koibal -koyemshi -koi-kopal -koil -koila -koilanaglyphic -koilon -koilonychia -koimesis -Koine -koines -koinon -koinonia -Koipato -Koirala -Koitapu -kojang -Kojiki -kojima -kojiri -kokako -kokam -kokama -kokan -Kokand -kokanee -kokanees -Kokaras -Kokas -ko-katana -Kokengolo -kokerboom -kokia -kokil -kokila -kokio -Kokka -Kokkola -koklas -koklass -Koko -kokobeh -Kokoda -Kokomo -kokoon -Kokoona -kokopu -kokoromiko -Kokoruda -kokos -Kokoschka -kokowai -kokra -koksaghyz -kok-saghyz -koksagyz -Kok-Sagyz -kokstad -koktaite -koku -kokum -kokumin -kokumingun -Kokura -Kol -Kola -kolach -Kolacin -kolacky -Kolami -Kolar -Kolarian -kolas -Kolasin -kolattam -Kolb -kolbasi -kolbasis -kolbassi -Kolbe -Kolchak -Koldaji -Koldewey -Kolding -kolea -Koleen -koleroga -Kolhapur -kolhoz -kolhozes -kolhozy -Koli -Kolima -Kolyma -kolinski -kolinsky -kolinskies -Kolis -Kolivas -Kolk -kolkhos -kolkhoses -kolkhosy -kolkhoz -kolkhozes -kolkhozy -kolkhoznik -kolkka -kolkoz -kolkozes -kolkozy -kollast -kollaster -Koller -kollergang -Kollwitz -Kolmar -kolmogorov -Koln -Kolnick -Kolnos -kolo -Koloa -kolobia -kolobion -kolobus -Kolodgie -kolokolo -Kolomak -Kolombangara -Kolomea -Kolomna -kolos -Kolosick -Koloski -Kolozsv -Kolozsvar -kolskite -kolsun -koltunna -koltunnor -Koluschan -Kolush -Kolva -Kolwezi -Komara -komarch -Komarek -Komati -komatik -komatiks -kombu -Kome -Komi -Komintern -kominuter -komitadji -komitaji -komma-ichi-da -kommandatura -kommetje -kommos -Kommunarsk -Komondor -komondoroc -komondorock -Komondorok -Komondors -kompeni -kompow -Komsa -Komsomol -Komsomolsk -komtok -Komura -kon -Kona -konak -Konakri -Konakry -Konarak -Konariot -Konawa -Konde -kondo -Kondon -Kone -Koner -Konev -konfyt -Kong -Kongo -Kongoese -Kongolese -kongoni -kongsbergite -kongu -Konia -Konya -Koniaga -Konyak -Konia-ladik -Konig -Koniga -Koniggratz -Konigsberg -Konigshutte -Konikow -konilite -konimeter -Konyn -koninckite -konini -koniology -koniophobia -koniscope -konjak -konk -Konkani -konked -konking -konks -Kono -konohiki -Konoye -Konomihu -Konopka -Konrad -konseal -Konstance -Konstantin -Konstantine -konstantinos -Konstanz -Konstanze -kontakia -kontakion -Konzentrationslager -Konzertmeister -Koo -koodoo -koodoos -Kooima -kook -kooka -kookaburra -kookeree -kookery -kooky -kookie -kookier -kookiest -kookiness -kookri -kooks -koolah -koolau -kooletah -kooliman -koolokamba -Koolooly -koombar -koomkie -Kooning -koonti -koopbrief -koorajong -Koord -Koorg -koorhmn -koorka -Koosharem -koosin -Koosis -Kooskia -kootcha -kootchar -Kootenai -Kootenay -kop -Kopagmiut -Kopans -Kopaz -kopec -kopeck -kopecks -Kopeisk -Kopeysk -kopek -kopeks -kopfring -koph -kophs -kopi -kopis -kopje -kopjes -kopophobia -Kopp -koppa -koppas -Koppel -koppen -Kopperl -Koppers -Kopperston -koppie -koppies -koppite -Kopple -Koprino -kops -kor -Kora -koradji -Korah -Korahite -Korahitic -korai -korait -korakan -Koral -Koralie -Koralle -Koran -Korana -Koranic -Koranist -korari -korat -korats -Korbel -Korbut -Korc -Korchnoi -kordax -Kordofan -Kordofanian -Kordula -Kore -Korea -Korean -koreans -korec -koreci -Korey -Koreish -Koreishite -Korella -Koren -Korenblat -korero -Koreshan -Koreshanity -Koressa -korfball -Korff -Korfonta -korhmn -Kori -Kory -Koryak -Koridethianus -Korie -korimako -korymboi -korymbos -korin -korma -Korman -Kornberg -Korney -Kornephorus -kornerupine -Korngold -Kornher -Korns -kornskeppa -kornskeppur -korntonde -korntonder -korntunna -korntunnur -Koroa -koromika -koromiko -korona -Koror -Koroseal -korova -korrel -Korry -Korrie -korrigan -korrigum -kors -korsakoff -korsakow -Kort -Korten -Kortrijk -korumburra -korun -koruna -korunas -koruny -Korwa -Korwin -Korwun -korzec -Korzybski -Kos -Kosak -Kosaka -Kosalan -Koschei -Kosciusko -Kosey -Kosel -Koser -kosha -koshare -kosher -koshered -koshering -koshers -Koshkonong -Koshu -Kosice -Kosygin -Kosimo -kosin -Kosiur -Koslo -kosmokrator -Koso -kosong -kosos -kosotoxin -Kosovo -Kosovo-Metohija -Kosrae -Koss -Kossaean -Kosse -Kossean -Kossel -Kossuth -Kostelanetz -Kosteletzkya -Kosti -Kostival -Kostman -Kostroma -koswite -Kota -Kotabaru -kotal -Kotar -Kotchian -Kotick -kotyle -kotylos -Kotlik -koto -kotoite -Kotoko -kotos -kotow -kotowed -kotower -kotowers -kotowing -kotows -kotschubeite -Kotta -kottaboi -kottabos -kottigite -Kotto -kotuku -kotukutuku -kotwal -kotwalee -kotwali -Kotz -Kotzebue -kou -koulan -koulibiaca -koumis -koumys -koumises -koumyses -koumiss -koumyss -koumisses -koumysses -Koungmiut -Kountze -kouprey -koupreys -kouproh -kourbash -kouroi -kouros -Kourou -kousin -Koussevitzky -koussin -kousso -koussos -Kouts -kouza -Kovacev -Kovacs -Koval -Kovalevsky -Kovar -kovil -Kovno -Kovrov -Kowagmiut -Kowal -Kowalewski -Kowalski -Kowatch -kowbird -KOWC -Koweit -kowhai -Kowloon -Kowtko -kowtow -kow-tow -kowtowed -kowtower -kowtowers -kowtowing -kowtows -Kozani -Kozhikode -Koziara -Koziarz -Koziel -Kozloski -Kozlov -kozo -kozuka -KP -K-particle -kpc -kph -KPNO -KPO -Kpuesi -KQC -KR -kr. -Kra -kraal -kraaled -kraaling -kraals -K-radiation -Kraemer -Kraepelin -Krafft -Krafft-Ebing -Kraft -krafts -Krag -kragerite -krageroite -Kragh -Kragujevac -Krahling -Krahmer -krait -kraits -Krak -Krakatao -Krakatau -Krakatoa -Krakau -Kraken -krakens -Krakow -krakowiak -kral -Krall -Krama -Kramatorsk -Kramer -Krameria -Krameriaceae -krameriaceous -Kramlich -kran -Kranach -krang -Kranj -krans -Krantz -krantzite -Kranzburg -krapfen -Krapina -kras -krasis -Kraska -Krasner -Krasny -Krasnodar -Krasnoff -Krasnoyarsk -krater -kraters -kratogen -kratogenic -Kraul -Kraunhia -kraurite -kraurosis -kraurotic -Kraus -Krause -krausen -krausite -Krauss -Kraut -Krauthead -krauts -krautweed -kravers -Kravits -Krawczyk -Kreager -Kreamer -kreatic -Krebs -Kreda -Kreegar -kreep -kreeps -kreese -Krefeld -Krefetz -Kreg -Kreigs -Kreiker -kreil -Kreymborg -Krein -Kreindler -Kreiner -Kreis -Kreisky -Kreisler -Kreistag -kreistle -Kreit -Kreitman -kreitonite -kreittonite -kreitzman -Krell -krelos -Kremenchug -Kremer -kremersite -Kremlin -Kremlinology -Kremlinologist -kremlinologists -kremlins -Kremmling -Krems -Kremser -Krenek -kreng -Krenn -krennerite -kreosote -Krepi -krepis -kreplach -kreplech -Kresge -Kresgeville -Kresic -Kress -Kreutzer -kreutzers -kreuzer -kreuzers -Krever -Krieg -Kriege -Krieger -kriegspiel -krieker -Kriemhild -Kries -Krigia -Krigsman -kriya-sakti -kriya-shakti -krikorian -krill -krills -Krylon -Krilov -Krym -krimmer -krimmers -krym-saghyz -krina -Krinthos -Krio -kryo- -kryokonite -kryolite -kryolites -kryolith -kryoliths -Kriophoros -Krips -krypsis -kryptic -krypticism -kryptocyanine -kryptol -kryptomere -krypton -kryptonite -kryptons -Kris -Krys -Krischer -krises -Krisha -Krishna -Krishnah -Krishnaism -Krishnaist -Krishnaite -Krishnaitic -Kryska -krispies -Krispin -Kriss -Krissy -Krissie -Krista -Krysta -Kristal -Krystal -Krystalle -Kristan -Kriste -Kristel -Kristen -Kristi -Kristy -Kristian -Kristiansand -Kristianson -Kristianstad -Kristie -Kristien -Kristin -Kristyn -Krystin -Kristina -Krystyna -Kristinaux -Kristine -Krystle -Kristmann -Kristo -Kristof -Kristofer -Kristoffer -Kristofor -Kristoforo -Kristopher -Kristos -krisuvigite -kritarchy -Krithia -kriton -kritrima -krivu -krna -krobyloi -krobylos -krocidolite -Krock -krocket -Kroeber -Krogh -krohnkite -Kroll -krome -kromeski -kromesky -kromogram -kromskop -krona -Kronach -krone -Kronecker -kronen -kroner -Kronfeld -Krongold -Kronick -Kronion -kronor -Kronos -Kronstadt -kronur -Kroo -kroon -krooni -kroons -Kropotkin -krosa -krouchka -kroushka -KRP -krs -Krti -Kru -krubi -krubis -krubut -krubuts -Krucik -Krueger -Krug -Kruger -Krugerism -Krugerite -Krugerrand -Krugersdorp -kruller -krullers -Krum -Kruman -krumhorn -Krummholz -krummhorn -Krupp -Krupskaya -Krusche -Kruse -Krusenstern -Krutch -Krute -Kruter -Krutz -krzysztof -KS -k's -ksar -KSC -K-series -KSF -KSH -K-shaped -Kshatriya -Kshatriyahood -ksi -KSR -KSU -KT -Kt. -KTB -Kten -K-term -kthibh -Kthira -K-truss -KTS -KTU -Ku -Kua -Kualapuu -Kuan -Kuangchou -Kuantan -Kuan-tung -Kuar -Kuba -Kubachi -Kuban -Kubango -Kubanka -kubba -Kubelik -Kubera -Kubetz -Kubiak -Kubis -kubong -Kubrick -kubuklion -Kuchean -kuchen -kuchens -Kuching -Kucik -kudize -kudo -kudos -Kudrun -kudu -Kudur-lagamar -kudus -Kudva -kudzu -kudzus -kue -Kuebbing -kueh -Kuehn -Kuehnel -Kuehneola -kuei -Kuenlun -kues -Kufa -kuffieh -Kufic -kufiyeh -kuge -kugel -kugelhof -kugels -Kuhlman -Kuhn -Kuhnau -Kuhnia -Kui -Kuibyshev -kuichua -Kuyp -kujawiak -kukang -kukeri -Kuki -Kuki-Chin -Ku-Klux -Ku-kluxer -Ku-kluxism -kukoline -kukri -kukris -Kuksu -kuku -kukui -Kukulcan -kukupa -Kukuruku -Kula -kulack -Kulah -kulaite -kulak -kulaki -kulakism -kulaks -kulan -Kulanapan -kulang -Kulda -kuldip -Kuli -kulimit -kulkarni -Kulla -kullaite -Kullani -Kullervo -Kulm -kulmet -Kulpmont -Kulpsville -Kulseth -Kulsrud -Kultur -Kulturkampf -Kulturkreis -Kulturkreise -kulturs -Kulun -Kum -Kumagai -Kumamoto -Kuman -Kumar -kumara -kumari -Kumasi -kumbaloi -kumbi -kumbuk -kumhar -Kumyk -kumis -kumys -kumyses -kumiss -kumisses -kumkum -Kumler -Kummel -kummels -Kummer -kummerbund -kumminost -Kumni -kumquat -kumquats -kumrah -kumshaw -Kun -Kuna -kunai -Kunama -Kunbi -kundalini -Kundry -Kuneste -Kung -kung-fu -Kungs -Kungur -Kunia -Kuniyoshi -Kunin -kunk -Kunkle -Kunkletown -kunkur -Kunlun -Kunming -Kunmiut -Kunowsky -Kunstlied -Kunst-lied -Kunstlieder -Kuntsevo -kunwari -Kunz -kunzite -kunzites -Kuo -kuo-yu -Kuomintang -Kuopio -kupfernickel -kupfferite -kuphar -kupper -Kuprin -Kur -Kura -kurajong -Kuranko -kurbash -kurbashed -kurbashes -kurbashing -kurchatovium -kurchicine -kurchine -Kurd -Kurdish -Kurdistan -Kure -Kurg -Kurgan -kurgans -Kuri -kurikata -Kurilian -Kurys -Kurku -Kurland -Kurma -Kurman -kurmburra -Kurmi -kurn -Kuroki -Kuropatkin -Kurosawa -Kuroshio -Kurr -kurrajong -Kursaal -kursch -Kursh -Kursk -Kurt -kurta -kurtas -Kurten -Kurth -Kurthwood -Kurtis -Kurtistown -kurtosis -kurtosises -Kurtz -Kurtzig -Kurtzman -kuru -Kuruba -Kurukh -kuruma -kurumaya -Kurumba -kurung -Kurus -Kurusu -kurvey -kurveyor -Kurzawa -Kurzeme -Kus -kusa -kusam -Kusan -Kusch -Kush -kusha -Kushner -Kushshu -kusimanse -kusimansel -Kusin -Kuska -kuskite -Kuskokwim -kuskos -kuskus -Kuskwogmiut -Kussell -kusso -kussos -Kustanai -Kustenau -Kuster -kusti -kusum -Kutais -Kutaisi -Kutch -kutcha -Kutchin -Kutchins -Kutenai -Kutenay -Kuth -kutta -kuttab -kuttar -kuttaur -Kuttawa -Kutuzov -Kutzenco -Kutzer -Kutztown -kuvasz -kuvaszok -Kuvera -Kuwait -Kuwaiti -KV -kVA -kVAH -Kval -kVAr -kvarner -kvas -kvases -kvass -kvasses -kvetch -kvetched -kvetches -kvetching -kvint -kvinter -kvutza -kvutzah -KW -Kwa -Kwabena -kwacha -kwachas -kwaiken -Kwajalein -Kwajalein-Eniwetok -Kwakiutl -Kwame -kwamme -Kwan -Kwang -Kwangchow -Kwangchowan -Kwangju -Kwangtung -Kwannon -Kwantung -kwanza -kwanzas -Kwapa -Kwapong -Kwara -kwarta -Kwarteng -kwarterka -kwartje -kwashiorkor -Kwasi -kwatuma -kwaznku -kwazoku -Kwazulu -kwe-bird -Kwei -Kweichow -Kweihwating -Kweiyang -Kweilin -Kweisui -kwela -Kwethluk -kWh -kwhr -KWIC -Kwigillingok -kwintra -KWOC -Kwok -Kwon -KWT -L -l- -L. -L.A. -l.c. -L.C.L. -L.D.S. -l.h. -L.I. -L.P. -L.S.D. -l.t. -L/C -L/Cpl -L/P -l/w -L1 -L2 -L3 -L4 -L5 -LA -La. -Laager -laagered -laagering -laagers -Laaland -laang -Laaspere -LAB -Lab. -labaara -Labadie -Labadieville -labadist -Laban -Labana -Laband -Labanna -Labannah -labara -Labarge -labaria -LaBarre -labarum -labarums -LaBaw -labba -labbella -labber -labby -labdacism -labdacismus -Labdacus -labdanum -labdanums -Labe -labefact -labefactation -labefaction -labefy -labefied -labefying -label -labeled -labeler -labelers -labeling -labella -labellate -LaBelle -labelled -labeller -labellers -labelling -labelloid -labellum -labels -labia -labial -labialisation -labialise -labialised -labialising -labialism -labialismus -labiality -labialization -labialize -labialized -labializing -labially -labials -Labiatae -labiate -labiated -labiates -labiatiflorous -labibia -Labiche -labidometer -labidophorous -Labidura -Labiduridae -labiella -labile -lability -labilities -labilization -labilize -labilized -labilizing -labio- -labioalveolar -labiocervical -labiodendal -labiodental -labioglossal -labioglossolaryngeal -labioglossopharyngeal -labiograph -labiogression -labioguttural -labiolingual -labiomancy -labiomental -labionasal -labiopalatal -labiopalatalize -labiopalatine -labiopharyngeal -labioplasty -labiose -labiotenaculum -labiovelar -labiovelarisation -labiovelarise -labiovelarised -labiovelarising -labiovelarization -labiovelarize -labiovelarized -labiovelarizing -labioversion -Labyrinth -labyrinthal -labyrinthally -labyrinthed -labyrinthian -labyrinthibranch -labyrinthibranchiate -Labyrinthibranchii -labyrinthic -labyrinthical -labyrinthically -Labyrinthici -labyrinthiform -labyrinthine -labyrinthitis -Labyrinthodon -labyrinthodont -Labyrinthodonta -labyrinthodontian -labyrinthodontid -labyrinthodontoid -labyrinths -Labyrinthula -Labyrinthulidae -labis -labite -labium -lablab -Labolt -labor -laborability -laborable -laborage -laborant -laboratory -laboratorial -laboratorially -laboratorian -laboratories -laboratory's -labordom -labored -laboredly -laboredness -laborer -laborers -labores -laboress -laborhood -laboring -laboringly -laborings -laborious -laboriously -laboriousness -Laborism -laborist -laboristic -Laborite -laborites -laborius -laborless -laborous -laborously -laborousness -Labors -laborsaving -labor-saving -laborsome -laborsomely -laborsomeness -Laboulbenia -Laboulbeniaceae -laboulbeniaceous -Laboulbeniales -labour -labourage -laboured -labouredly -labouredness -labourer -labourers -labouress -labouring -labouringly -Labourism -labourist -Labourite -labourless -labours -laboursaving -labour-saving -laboursome -laboursomely -labra -Labrador -Labradorean -Labradorian -labradorite -labradoritic -Labrador-Ungava -labral -labras -labredt -labret -labretifery -labrets -labrid -Labridae -labrys -labroid -Labroidea -labroids -labrosaurid -labrosauroid -Labrosaurus -labrose -labrum -labrums -Labrus -labrusca -labs -lab's -Labuan -Laburnum -laburnums -LAC -Lacagnia -Lacaille -Lacamp -Lacarne -Lacassine -lacatan -lacca -Laccadive -laccaic -laccainic -laccase -laccic -laccin -laccol -laccolite -laccolith -laccolithic -laccoliths -laccolitic -lace -lacebark -lace-bordered -lace-covered -lace-curtain -lace-curtained -laced -Lacedaemon -Lacedaemonian -Lacee -lace-edged -lace-fern -Lacefield -lace-finishing -laceflower -lace-fronted -Lacey -laceybark -laceier -laceiest -Laceyville -laceleaf -lace-leaf -lace-leaves -laceless -lacelike -lacemaker -lacemaking -laceman -lacemen -lacepiece -lace-piece -lacepod -lacer -lacerability -lacerable -lacerant -lacerate -lacerated -lacerately -lacerates -lacerating -laceration -lacerations -lacerative -lacery -lacerna -lacernae -lacernas -lacers -lacert -Lacerta -Lacertae -lacertian -Lacertid -Lacertidae -lacertids -lacertiform -Lacertilia -Lacertilian -lacertiloid -lacertine -lacertoid -lacertose -laces -lacet -lacetilian -lace-trimmed -lace-vine -lacewing -lace-winged -lacewings -lacewoman -lacewomen -lacewood -lacewoods -lacework -laceworker -laceworks -Lach -Lachaise -Lachance -lache -Lachenalia -laches -Lachesis -Lachine -Lachish -Lachlan -Lachman -Lachnanthes -Lachnosterna -lachryma -lachrymable -lachrymae -lachrymaeform -lachrymal -lachrymally -lachrymalness -lachrymary -lachrymation -lachrymator -lachrymatory -lachrymatories -lachrymiform -lachrymist -lachrymogenic -lachrymonasal -lachrymosal -lachrymose -lachrymosely -lachrymosity -lachrymous -lachsa -Lachus -Lacy -Lacie -lacier -laciest -Lacygne -lacily -Lacinaria -laciness -lacinesses -lacing -lacings -lacinia -laciniate -laciniated -laciniation -laciniform -laciniola -laciniolate -laciniose -lacinious -lacinula -lacinulas -lacinulate -lacinulose -lacis -lack -lackaday -lackadaisy -lackadaisic -lackadaisical -lackadaisicality -lackadaisically -lackadaisicalness -lack-all -Lackawanna -Lackawaxen -lack-beard -lack-brain -lackbrained -lackbrainedness -lacked -lackey -lackeydom -lackeyed -lackeying -lackeyism -lackeys -lackeyship -lacker -lackered -lackerer -lackering -lackers -lack-fettle -lackies -lacking -lackland -lack-latin -lack-learning -lack-linen -lack-love -lackluster -lacklusterness -lacklustre -lack-lustre -lacklustrous -lack-pity -lacks -lacksense -lackwit -lackwitted -lackwittedly -lackwittedness -Laclede -Laclos -lacmoid -lacmus -lacoca -lacolith -Lacombe -Lacon -Lacona -Laconia -Laconian -Laconic -laconica -laconical -laconically -laconicalness -laconicism -laconicness -laconics -laconicum -laconism -laconisms -laconize -laconized -laconizer -laconizing -Lacoochee -Lacosomatidae -Lacoste -Lacota -lacquey -lacqueyed -lacqueying -lacqueys -lacquer -lacquered -lacquerer -lacquerers -lacquering -lacquerist -lacquers -lacquerwork -Lacrescent -Lacretelle -lacrym -lacrim- -lacrimal -lacrimals -lacrimation -lacrimator -lacrimatory -lacrimatories -Lacroix -lacroixite -Lacrosse -lacrosser -lacrosses -lacs -lact- -lactagogue -lactalbumin -lactam -lactamide -lactams -lactant -lactarene -lactary -lactarine -lactarious -lactarium -Lactarius -lactase -lactases -lactate -lactated -lactates -lactating -lactation -lactational -lactationally -lactations -lacteal -lacteally -lacteals -lactean -lactenin -lacteous -lactesce -lactescence -lactescency -lactescenle -lactescense -lactescent -lactic -lacticinia -lactid -lactide -lactiferous -lactiferousness -lactify -lactific -lactifical -lactification -lactified -lactifying -lactiflorous -lactifluous -lactiform -lactifuge -lactigenic -lactigenous -lactigerous -lactyl -lactim -lactimide -lactinate -lactivorous -lacto -lacto- -lactobaccilli -lactobacilli -Lactobacillus -lactobutyrometer -lactocele -lactochrome -lactocitrate -lactodensimeter -lactoflavin -lactogen -lactogenic -lactoglobulin -lactoid -lactol -lactometer -lactone -lactones -lactonic -lactonization -lactonize -lactonized -lactonizing -lactophosphate -lactoproteid -lactoprotein -lactoscope -lactose -lactoses -lactosid -lactoside -lactosuria -lactothermometer -lactotoxin -lactovegetarian -Lactuca -lactucarium -lactucerin -lactucin -lactucol -lactucon -lacuna -lacunae -lacunal -lacunar -lacunary -lacunaria -lacunaris -lacunars -lacunas -lacunate -lacune -lacunes -lacunome -lacunose -lacunosis -lacunosity -lacunule -lacunulose -lacuscular -lacustral -lacustrian -lacustrine -LACW -lacwork -Lad -Ladakhi -ladakin -ladang -ladanigerous -ladanum -ladanums -LADAR -Ladd -ladder -ladder-back -ladder-backed -laddered -laddery -laddering -ladderless -ladderlike -ladderman -laddermen -ladders -ladderway -ladderwise -laddess -Laddy -Laddie -laddies -laddikie -laddish -l'addition -laddock -Laddonia -lade -laded -la-de-da -lademan -Laden -ladened -ladening -ladens -lader -laders -lades -Ladew -ladhood -Lady -ladybird -lady-bird -ladybirds -ladybug -ladybugs -ladyclock -lady-cow -la-di-da -ladydom -ladies -Ladiesburg -ladies-in-waiting -ladies-of-the-night -ladies'-tobacco -ladies'-tobaccoes -ladies'-tobaccos -ladies-tresses -ladyfern -ladify -ladyfy -ladified -ladifying -ladyfinger -ladyfingers -ladyfish -lady-fish -ladyfishes -ladyfly -ladyflies -lady-help -ladyhood -ladyhoods -lady-in-waiting -ladyish -ladyishly -ladyishness -ladyism -Ladik -ladykiller -lady-killer -lady-killing -ladykin -ladykind -ladykins -ladyless -ladyly -ladylike -ladylikely -ladylikeness -ladyling -ladylintywhite -ladylove -lady-love -ladyloves -Ladin -lading -ladings -Ladino -Ladinos -lady-of-the-night -ladypalm -ladypalms -lady's -lady's-eardrop -ladysfinger -Ladyship -ladyships -Ladislas -Ladislaus -ladyslipper -lady-slipper -lady's-mantle -Ladysmith -lady-smock -ladysnow -lady's-slipper -lady's-smock -lady's-thistle -lady's-thumb -lady's-tresses -Ladytide -ladkin -ladle -ladled -ladleful -ladlefuls -ladler -ladlers -ladles -ladlewood -ladling -ladner -Ladoga -Ladon -Ladonia -Ladonna -Ladora -ladron -ladrone -Ladrones -ladronism -ladronize -ladrons -lads -Ladson -LADT -Ladue -Lae -Lael -Laelaps -Laelia -Laelius -Laemmle -laemodipod -Laemodipoda -laemodipodan -laemodipodiform -laemodipodous -laemoparalysis -laemostenosis -laen -laender -Laennec -laeotropic -laeotropism -laeotropous -Laertes -Laertiades -Laestrygon -Laestrygones -Laestrygonians -laet -laetation -laeti -laetic -Laetitia -laetrile -laevigate -Laevigrada -laevo -laevo- -laevoduction -laevogyrate -laevogyre -laevogyrous -laevolactic -laevorotation -laevorotatory -laevotartaric -laevoversion -laevulin -laevulose -LaF -Lafayette -Lafarge -Lafargeville -Lafcadio -Laferia -Lafferty -Laffite -Lafite -Lafitte -Laflam -Lafleur -Lafollette -Lafontaine -Laforge -Laforgue -Lafox -Lafrance -laft -LAFTA -lag -lagan -lagans -lagarto -Lagas -Lagash -Lagasse -lagen -lagena -lagenae -Lagenaria -lagend -lagends -lagenian -lageniform -lageniporm -Lager -lagered -lagering -Lagerkvist -Lagerl -Lagerlof -lagers -lagerspetze -Lagerstroemia -Lagetta -lagetto -laggar -laggard -laggardism -laggardly -laggardness -laggardnesses -laggards -lagged -laggen -laggen-gird -lagger -laggers -laggin -lagging -laggingly -laggings -laggins -Laghouat -laglast -lagly -lagna -lagnappe -lagnappes -lagniappe -lagniappes -Lagomyidae -lagomorph -Lagomorpha -lagomorphic -lagomorphous -lagomrph -lagonite -lagoon -lagoonal -lagoons -lagoon's -lagoonside -lagophthalmos -lagophthalmus -lagopode -lagopodous -lagopous -Lagopus -Lagorchestes -Lagos -lagostoma -Lagostomus -Lagothrix -Lagrange -Lagrangeville -Lagrangian -Lagro -lags -Lagthing -Lagting -Laguerre -Laguiole -Laguna -lagunas -Laguncularia -lagune -Lagunero -lagunes -Lagunitas -Lagurus -lagwort -lah -Lahabra -Lahaina -Lahamu -lahar -Laharpe -lahars -Lahaska -lah-di-dah -Lahey -Lahmansville -Lahmu -Lahnda -Lahoma -Lahontan -Lahore -Lahti -Lahuli -Lai -Lay -layabout -layabouts -Layamon -Layard -layaway -layaways -Laibach -layback -lay-by -layboy -laic -laical -laicality -laically -laich -laichs -laicisation -laicise -laicised -laicises -laicising -laicism -laicisms -laicity -laicization -laicize -laicized -laicizer -laicizes -laicizing -laics -laid -lay-day -Laidlaw -laidly -laydown -lay-down -Laie -layed -layer -layerage -layerages -layered -layery -layering -layerings -layer-on -layer-out -layer-over -layers -layers-out -layer-up -layette -layettes -lay-fee -layfolk -laigh -laighs -Layia -laying -laik -Lail -Layla -Layland -lay-land -laylight -layloc -laylock -Layman -lay-man -laymanship -laymen -lay-minded -lain -Laina -lainage -Laine -Layne -Lainey -Layney -lainer -layner -Laing -Laings -Laingsburg -layoff -lay-off -layoffs -lay-on -laiose -layout -lay-out -layouts -layout's -layover -lay-over -layovers -layperson -lair -lairage -Laird -lairdess -lairdie -lairdly -lairdocracy -lairds -lairdship -Lairdsville -laired -lairy -lairing -lairless -lairman -lairmen -layrock -lairs -lair's -lairstone -LAIS -lays -Laise -laiser -layshaft -lay-shaft -layship -laisse -laisser-aller -laisser-faire -laissez -laissez-aller -laissez-faire -laissez-faireism -laissez-passer -laystall -laystow -Lait -laitance -laitances -Laith -laithe -laithly -laity -laities -Layton -Laytonville -layup -lay-up -layups -Laius -laywoman -laywomen -Lajas -Lajoie -Lajos -Lajose -Lak -lakarpite -lakatan -lakatoi -Lake -lake-bound -lake-colored -laked -lakefront -lake-girt -Lakehurst -lakey -Lakeland -lake-land -lakelander -lakeless -lakelet -lakelike -lakemanship -lake-moated -Lakemore -lakeport -lakeports -laker -lake-reflected -lake-resounding -lakers -lakes -lake's -lakeshore -lakeside -lakesides -lake-surrounded -Lakeview -lakeward -lakeweed -Lakewood -lakh -lakhs -laky -lakie -lakier -lakiest -Lakin -laking -lakings -lakish -lakishness -lakism -lakist -lakke -Lakme -lakmus -Lakota -Laks -laksa -Lakshadweep -Lakshmi -Laktasic -LAL -Lala -la-la -Lalage -Lalande -lalang -lalapalooza -lalaqui -Lali -lalia -laliophobia -Lalise -Lalita -Lalitta -Lalittah -lall -Lalla -Lallage -Lallan -Lalland -lallands -Lallans -lallapalooza -lallation -lalled -L'Allegro -Lally -Lallies -lallygag -lallygagged -lallygagging -lallygags -lalling -lalls -Lalo -Laloma -laloneurosis -lalopathy -lalopathies -lalophobia -laloplegia -Lalu -Laluz -LAM -Lam. -LAMA -Lamadera -lamaic -Lamaism -Lamaist -Lamaistic -Lamaite -lamany -Lamanism -Lamanite -Lamano -lamantin -Lamar -Lamarck -Lamarckia -Lamarckian -Lamarckianism -Lamarckism -Lamarque -Lamarre -Lamartine -Lamas -lamasary -lamasery -lamaseries -lamastery -Lamb -Lamba -lamback -Lambadi -lambale -Lambard -Lambarn -Lambart -lambast -lambaste -lambasted -lambastes -lambasting -lambasts -lambda -lambdacism -lambdas -lambdiod -lambdoid -lambdoidal -lambeau -lambed -lambency -lambencies -lambent -lambently -lamber -lambers -Lambert -Lamberto -Lamberton -lamberts -Lambertson -Lambertville -lambes -Lambeth -lambhood -lamby -lambie -lambies -lambiness -lambing -lambish -lambitive -lambkill -lambkills -lambkin -lambkins -lambly -Lamblia -lambliasis -lamblike -lamb-like -lamblikeness -lambling -lamboy -lamboys -Lambrecht -lambrequin -Lambric -Lambrook -Lambrusco -lambs -lamb's -Lambsburg -lambsdown -lambskin -lambskins -lamb's-quarters -lambsuccory -lamb's-wool -LAMDA -lamdan -lamden -Lamdin -lame -lame-born -lamebrain -lame-brain -lamebrained -lamebrains -Lamech -lamed -lamedh -lamedhs -lamedlamella -lameds -lameduck -LaMee -lame-footed -lame-horsed -lamel -lame-legged -lamely -lamell- -lamella -lamellae -lamellar -lamellary -Lamellaria -Lamellariidae -lamellarly -lamellas -lamellate -lamellated -lamellately -lamellation -lamelli- -lamellibranch -Lamellibranchia -Lamellibranchiata -lamellibranchiate -lamellicorn -lamellicornate -Lamellicornes -Lamellicornia -lamellicornous -lamelliferous -lamelliform -lamellirostral -lamellirostrate -Lamellirostres -lamelloid -lamellose -lamellosity -lamellule -lameness -lamenesses -lament -lamentabile -lamentability -lamentable -lamentableness -lamentably -lamentation -lamentational -Lamentations -lamentation's -lamentatory -lamented -lamentedly -lamenter -lamenters -lamentful -lamenting -lamentingly -lamentive -lamentory -laments -lamer -Lamero -lames -Lamesa -lamest -lamester -lamestery -lameter -lametta -lamia -Lamiaceae -lamiaceous -lamiae -lamias -Lamicoid -lamiger -lamiid -Lamiidae -Lamiides -Lamiinae -lamin -lamin- -lamina -laminability -laminable -laminae -laminal -laminar -laminary -Laminaria -Laminariaceae -laminariaceous -Laminariales -laminarian -laminarin -laminarioid -laminarite -laminas -laminate -laminated -laminates -laminating -lamination -laminations -laminator -laminboard -laminectomy -laming -lamington -lamini- -laminiferous -laminiform -laminiplantar -laminiplantation -laminitis -laminose -laminous -lamish -Lamison -Lamista -lamister -lamisters -lamiter -Lamium -lamm -Lammas -Lammastide -lammed -lammer -lammergeier -lammergeyer -lammergeir -lammy -lammie -lamming -lammock -Lammond -Lamna -lamnectomy -lamnid -Lamnidae -lamnoid -Lamoille -Lamond -Lamoni -LaMonica -Lamont -Lamonte -Lamoree -LaMori -Lamotte -Lamoure -Lamoureux -Lamp -lampad -lampadaire -lampadary -lampadaries -lampadedromy -lampadephore -lampadephoria -lampadist -lampadite -lampads -Lampang -lampara -lampas -Lampasas -lampases -lampate -lampatia -lamp-bearing -lamp-bedecked -lampblack -lamp-black -lampblacked -lampblacking -lamp-blown -lamp-decked -Lampe -lamped -Lampedusa -lamper -lamper-eel -lampern -lampers -lamperses -Lampert -Lampeter -Lampetia -lampf -lampfly -lampflower -lamp-foot -lampful -lamp-heated -Lamphere -lamphole -lamp-hour -lampic -lamping -lampion -lampions -lampyrid -Lampyridae -lampyrids -lampyrine -Lampyris -lamp-iron -lampist -lampistry -lampless -lamplet -lamplight -lamplighted -lamplighter -lamp-lined -lamplit -lampmaker -lampmaking -lampman -lampmen -lamp-oil -Lampong -lampoon -lampooned -lampooner -lampoonery -lampooners -lampooning -lampoonist -lampoonists -lampoons -lamppost -lamp-post -lampposts -Lamprey -lampreys -lamprel -lampret -Lampridae -lampro- -lampron -lamprophyre -lamprophyric -lamprophony -lamprophonia -lamprophonic -lamprotype -lamps -lamp's -lampshade -lampshell -Lampsilis -Lampsilus -lampstand -lamp-warmed -lampwick -lampworker -lampworking -Lamrert -Lamrouex -lams -lamsiekte -Lamson -lamster -lamsters -Lamus -Lamut -lamziekte -LAN -Lana -Lanae -Lanagan -Lanai -lanais -Lanam -lanameter -Lananna -Lanao -Lanark -Lanarkia -lanarkite -Lanarkshire -lanas -lanate -lanated -lanaz -Lancashire -Lancaster -Lancaster' -Lancasterian -Lancastrian -LANCE -lance-acuminated -lance-breaking -lanced -lance-fashion -lancegay -lancegaye -Lancey -lancejack -lance-jack -lance-knight -lance-leaved -lancelet -lancelets -lancely -lancelike -lance-linear -Lancelle -Lancelot -lanceman -lancemen -lance-oblong -lanceolar -lanceolate -lanceolated -lanceolately -lanceolation -lance-oval -lance-ovate -lancepesade -lance-pierced -lancepod -lanceprisado -lanceproof -lancer -lancers -lances -lance-shaped -lancet -lanceted -lanceteer -lancetfish -lancetfishes -lancets -lancewood -lance-worn -lanch -lancha -lanchara -Lanchow -lanciers -lanciferous -lanciform -lancinate -lancinated -lancinating -lancination -Lancing -Lancs -Lanctot -Land -Landa -landage -Landahl -landamman -landammann -Landan -Landau -landaulet -landaulette -landaus -land-bank -Landbert -landblink -landbook -land-born -land-bred -land-breeze -land-cast -land-crab -land-damn -land-devouring -landdrost -landdrosten -lande -land-eating -landed -Landel -Landenberg -Lander -Landers -Landes -Landeshauptmann -landesite -Landess -landfall -landfalls -landfang -landfast -landfill -landfills -landflood -land-flood -landfolk -landform -landforms -landgafol -landgate -landgates -land-gavel -land-girt -land-grabber -land-grabbing -landgravate -landgrave -landgraveship -landgravess -landgraviate -landgravine -landhold -landholder -land-holder -landholders -landholdership -landholding -landholdings -land-horse -land-hungry -Landy -landyard -landimere -Landing -landing-place -landings -Landingville -landing-waiter -Landini -Landino -landiron -Landis -Landisburg -Landisville -landlady -landladydom -landladies -landladyhood -landladyish -landlady's -landladyship -land-law -Land-leaguer -Land-leaguism -landleaper -land-leaper -landler -landlers -landless -landlessness -landlike -landline -land-line -landlock -landlocked -landlook -landlooker -landloper -land-loper -landloping -landlord -landlordism -landlordly -landlordry -landlords -landlord's -landlordship -landlouper -landlouping -landlubber -land-lubber -landlubberish -landlubberly -landlubbers -landlubbing -landman -landmark -Landmarker -landmarks -landmark's -landmass -landmasses -land-measure -Landmeier -landmen -land-mere -land-meter -land-metster -landmil -landmonger -Lando -land-obsessed -landocracy -landocracies -landocrat -Landolphia -Landon -Landor -landowner -landowners -landowner's -landownership -landowning -Landowska -landplane -land-poor -Landrace -landrail -landraker -land-rat -Landre -landreeve -Landri -Landry -landright -land-rover -Landrum -lands -landsale -landsat -landscape -landscaped -landscaper -landscapers -landscapes -landscaping -landscapist -Landseer -land-service -landshard -landshark -land-sheltered -landship -Landshut -landsick -landside -land-side -landsides -landskip -landskips -landsknecht -land-slater -landsleit -landslid -landslidden -landslide -landslided -landslides -landsliding -landslip -landslips -Landsm' -Landsmaal -Landsmal -Landsm'al -Landsman -landsmanleit -landsmanshaft -landsmanshaften -landsmen -landspout -land-spring -landspringy -Landsteiner -Landsthing -Landsting -landstorm -Landsturm -land-surrounded -land-surveying -landswoman -Landtag -land-tag -land-tax -land-taxer -land-tie -landtrost -Landuman -Landus -land-value -Landville -land-visiting -landway -landways -landwaiter -landward -landwards -landwash -land-water -Landwehr -landwhin -land-wind -landwire -landwrack -landwreck -Lane -Laneburg -Laney -lanely -lanes -lane's -Lanesboro -lanesome -Lanesville -lanete -Lanett -Lanette -Laneview -Laneville -laneway -Lanexa -Lanford -Lanfranc -Lanfri -Lang -lang. -langaha -Langan -langarai -langate -langauge -langbanite -Langbehn -langbeinite -langca -Langdon -Lange -langeel -langel -Langelo -Langeloth -Langer -Langford -Langham -Langhian -Langhorne -langi -langiel -Langill -Langille -langite -langka -lang-kail -Langland -langlauf -langlaufer -langlaufers -langlaufs -langle -Langley -langleys -Langlois -Langmuir -Lango -Langobard -Langobardic -langoon -langooty -langosta -langourous -langourously -langouste -langrage -langrages -langrel -langrels -Langrenus -Langreo -Langres -langret -langridge -langsat -Langsdon -Langsdorffia -langset -langsettle -Langshan -langshans -Langside -langsyne -langsynes -langspiel -langspil -Langston -Langsville -langteraloo -Langton -Langtry -language -languaged -languageless -languages -language's -languaging -langue -langued -Languedoc -Languedocian -Languedoc-Roussillon -languent -langues -languescent -languet -languets -languette -languid -languidly -languidness -languidnesses -languish -languished -languisher -languishers -languishes -languishing -languishingly -languishment -languor -languorment -languorous -languorously -languorousness -languors -langur -langurs -Langworthy -Lanham -Lani -laniard -lanyard -laniards -lanyards -laniary -laniaries -laniariform -laniate -Lanie -Lanier -laniferous -lanific -lanifice -laniflorous -laniform -lanigerous -Laniidae -laniiform -Laniinae -Lanikai -lanioid -lanista -lanistae -Lanita -Lanital -lanitals -Lanius -lank -Lanka -lank-bellied -lank-blown -lank-cheeked -lank-eared -lanker -lankest -Lankester -lanket -lank-haired -lanky -lankier -lankiest -lankily -Lankin -lankiness -lankish -lank-jawed -lank-lean -lankly -lankness -lanknesses -lank-sided -Lankton -lank-winged -LANL -Lanna -lanner -lanneret -lannerets -lanners -Lanni -Lanny -Lannie -Lannon -lanolated -lanolin -lanoline -lanolines -lanolins -lanose -lanosity -lanosities -lansa -lansat -Lansberg -Lansdale -Lansdowne -Lanse -lanseh -Lansford -lansfordite -Lansing -lansknecht -lanson -lansquenet -lant -Lanta -lantaca -lantaka -Lantana -lantanas -lantanium -lantcha -lanterloo -lantern -lanterned -lanternfish -lanternfishes -lanternflower -lanterning -lanternist -lantern-jawed -lanternleaf -lanternlit -lanternman -lanterns -lantern's -Lantha -lanthana -lanthania -lanthanid -lanthanide -lanthanite -lanthanon -Lanthanotidae -Lanthanotus -lanthanum -lanthopin -lanthopine -lanthorn -lanthorns -Lanti -Lantry -Lantsang -lantum -Lantz -lanuginose -lanuginous -lanuginousness -lanugo -lanugos -lanum -Lanuvian -lanx -Lanza -lanzknecht -lanzon -LAO -Laoag -Laocoon -laodah -Laodamas -Laodamia -Laodice -Laodicea -Laodicean -Laodiceanism -Laodocus -Laoighis -Laomedon -Laon -Laona -Laos -Laothoe -Laotian -laotians -Lao-tse -Laotto -Laotze -Lao-tzu -LAP -lapacho -lapachol -lapactic -Lapageria -laparectomy -laparo- -laparocele -laparocholecystotomy -laparocystectomy -laparocystotomy -laparocolectomy -laparocolostomy -laparocolotomy -laparocolpohysterotomy -laparocolpotomy -laparoelytrotomy -laparoenterostomy -laparoenterotomy -laparogastroscopy -laparogastrotomy -laparohepatotomy -laparohysterectomy -laparohysteropexy -laparohysterotomy -laparoileotomy -laparomyitis -laparomyomectomy -laparomyomotomy -laparonephrectomy -laparonephrotomy -laparorrhaphy -laparosalpingectomy -laparosalpingotomy -laparoscope -laparoscopy -laparosplenectomy -laparosplenotomy -laparostict -Laparosticti -laparothoracoscopy -laparotome -laparotomy -laparotomies -laparotomist -laparotomize -laparotomized -laparotomizing -laparotrachelotomy -laparo-uterotomy -Lapaz -LAPB -lapboard -lapboards -lap-butted -lap-chart -lapcock -LAPD -lapdog -lap-dog -lapdogs -Lapeer -Lapeyrouse -Lapeirousia -lapel -lapeled -lapeler -lapelled -lapels -lapel's -lapful -lapfuls -Lapham -Laphystius -Laphria -lapicide -lapidary -lapidarian -lapidaries -lapidarist -lapidate -lapidated -lapidates -lapidating -lapidation -lapidator -lapideon -lapideous -Lapides -lapidescence -lapidescent -lapidicolous -lapidify -lapidific -lapidifical -lapidification -lapidified -lapidifies -lapidifying -lapidist -lapidists -lapidity -lapidose -lapies -lapilli -lapilliform -lapillo -lapillus -lapin -Lapine -lapinized -lapins -lapis -lapises -Lapith -Lapithae -Lapithaean -Lapiths -lap-jointed -Laplace -Laplacian -Lapland -Laplander -laplanders -Laplandian -Laplandic -Laplandish -lap-lap -lapling -lap-love -LAPM -Lapointe -lapon -Laportea -Lapotin -Lapp -Lappa -lappaceous -lappage -lapped -Lappeenranta -lapper -lappered -lappering -lappers -lappet -lappeted -lappethead -lappets -Lappic -lappilli -lapping -Lappish -Lapponese -Lapponian -lapps -Lappula -lapputan -Lapryor -lap-rivet -laps -lap's -lapsability -lapsable -Lapsana -lapsation -lapse -lapsed -Lapsey -lapser -lapsers -lapses -lapsful -lapsi -lapsibility -lapsible -lapsided -lapsing -lapsingly -lapstone -lapstrake -lapstreak -lap-streak -lapstreaked -lapstreaker -lapsus -laptop -laptops -lapulapu -Laputa -Laputan -laputically -Lapwai -lapwing -lapwings -lapwork -laquais -laquear -laquearia -laquearian -laquei -Laquey -laqueus -L'Aquila -LAR -Lara -Laraine -Laralia -Laramide -Laramie -larararia -lararia -lararium -Larbaud -larboard -larboards -larbolins -larbowlines -LARC -larcenable -larcener -larceners -larceny -larcenic -larcenies -larcenish -larcenist -larcenists -larcenous -larcenously -larcenousness -larch -larchen -Larcher -larches -Larchmont -Larchwood -larcin -larcinry -lard -lardacein -lardaceous -lard-assed -larded -larder -larderellite -larderer -larderful -larderie -larderlike -larders -lardy -lardy-dardy -lardier -lardiest -lardiform -lardiner -larding -lardite -Lardizabalaceae -lardizabalaceous -lardlike -Lardner -lardon -lardons -lardoon -lardoons -lardry -lards -lardworm -lare -lareabell -Laredo -laree -Lareena -larees -Lareine -Larena -Larentalia -Larentia -Larentiidae -Lares -Laresa -largamente -largando -large -large-acred -large-ankled -large-bayed -large-billed -large-bodied -large-boned -large-bore -large-bracted -largebrained -large-browed -large-built -large-caliber -large-celled -large-crowned -large-diameter -large-drawn -large-eared -large-eyed -large-finned -large-flowered -large-footed -large-framed -large-fronded -large-fruited -large-grained -large-grown -largehanded -large-handed -large-handedness -large-headed -largehearted -large-hearted -largeheartedly -largeheartedness -large-heartedness -large-hipped -large-horned -large-leaved -large-lettered -largely -large-limbed -large-looking -large-lunged -large-minded -large-mindedly -large-mindedness -large-molded -largemouth -largemouthed -largen -large-natured -large-necked -largeness -largenesses -large-nostriled -Largent -largeour -largeous -large-petaled -larger -large-rayed -larges -large-scale -large-scaled -large-size -large-sized -large-souled -large-spaced -largess -largesse -largesses -largest -large-stomached -larget -large-tailed -large-thoughted -large-throated -large-type -large-toothed -large-trunked -large-utteranced -large-viewed -large-wheeled -large-wristed -larghetto -larghettos -larghissimo -larghissimos -largy -largifical -largish -largishness -largition -largitional -Largo -largos -Lari -Laria -Larianna -lariat -lariated -lariating -lariats -larick -larid -Laridae -laridine -larigo -larigot -lariid -Lariidae -larikin -Larimer -Larimor -Larimore -larin -Larina -Larinae -Larine -laryng- -laryngal -laryngalgia -laryngeal -laryngeally -laryngean -laryngeating -laryngectomee -laryngectomy -laryngectomies -laryngectomize -laryngectomized -laryngectomizing -laryngemphraxis -laryngendoscope -larynges -laryngic -laryngismal -laryngismus -laryngitic -laryngitis -laryngitises -laryngitus -laryngo- -laryngocele -laryngocentesis -laryngofission -laryngofissure -laryngograph -laryngography -laryngology -laryngologic -laryngological -laryngologist -laryngometry -laryngoparalysis -laryngopathy -laryngopharyngeal -laryngopharynges -laryngopharyngitis -laryngopharynx -laryngopharynxes -laryngophony -laryngophthisis -laryngoplasty -laryngoplegia -laryngorrhagia -laryngorrhea -laryngoscleroma -laryngoscope -laryngoscopy -laryngoscopic -laryngoscopical -laryngoscopically -laryngoscopies -laryngoscopist -laryngospasm -laryngostasis -laryngostenosis -laryngostomy -laryngostroboscope -laryngotyphoid -laryngotome -laryngotomy -laryngotomies -laryngotracheal -laryngotracheitis -laryngotracheoscopy -laryngotracheotomy -laryngovestibulitis -larynx -larynxes -Laris -Larisa -Larissa -Laryssa -larithmic -larithmics -Larix -larixin -Lark -lark-colored -larked -larker -larkers -lark-heel -lark-heeled -larky -larkier -larkiest -Larkin -larkiness -larking -larkingly -Larkins -larkish -larkishly -larkishness -larklike -larkling -larks -lark's -larksome -larksomes -Larkspur -larkspurs -Larksville -larlike -larmier -larmoyant -larn -larnakes -Larnaudian -larnax -Larned -Larner -larnyx -Larochelle -Laroy -laroid -laron -Larose -Larousse -Larrabee -larree -Larry -Larrie -larries -larrigan -larrigans -larrikin -larrikinalian -larrikiness -larrikinism -larrikins -larriman -Larrisa -larrup -larruped -larruper -larrupers -larruping -larrups -Lars -Larsa -Larsen -larsenite -Larslan -Larson -l-arterenol -Larto -LaRue -larum -larum-bell -larums -Larunda -Larus -Larussell -larva -Larvacea -larvae -larval -Larvalia -larvaria -larvarium -larvariums -larvas -larvate -larvated -larve -larvi- -larvicidal -larvicide -larvicolous -larviform -larvigerous -larvikite -larviparous -larviposit -larviposition -larvivorous -larvule -Larwill -Larwood -Las -lasa -lasagna -lasagnas -lasagne -lasagnes -Lasal -Lasala -Lasalle -lasarwort -lascar -lascaree -lascarine -lascars -Lascassas -Lascaux -laschety -lascivient -lasciviently -lascivious -lasciviously -lasciviousness -lasciviousnesses -lase -lased -LASER -laserdisk -laserdisks -laserjet -Laserpitium -lasers -laser's -laserwort -lases -Lash -Lashar -lashed -lasher -lashers -lashes -lashing -lashingly -lashings -lashins -Lashio -Lashkar -lashkars -lashless -lashlight -lashlite -Lashmeet -lashness -Lashoh -Lashond -Lashonda -Lashonde -Lashondra -lashorn -lash-up -Lasi -lasianthous -lasing -Lasiocampa -lasiocampid -Lasiocampidae -Lasiocampoidea -lasiocarpous -Lasius -lask -Lasker -lasket -Laski -Lasky -lasking -Lasko -Lasley -Lasmarias -Lasonde -LaSorella -Laspeyresia -Laspisa -laspring -lasque -LASS -Lassa -Lassalle -Lasse -Lassell -Lasser -lasses -lasset -Lassie -lassiehood -lassieish -lassies -lassiky -Lassiter -lassitude -lassitudes -lasslorn -lasso -lassock -lassockie -lassoed -lassoer -lassoers -lassoes -lassoing -lassos -lass's -lassu -Lassus -last -lastage -lastage-free -last-born -last-cyclic -last-cited -last-ditch -last-ditcher -lasted -laster -last-erected -lasters -Lastex -lasty -last-in -lasting -lastingly -lastingness -lastings -lastjob -lastly -last-made -last-mentioned -last-minute -last-named -lastness -lastre -Lastrup -lasts -lastspring -Laszlo -LAT -Lat. -LATA -Latah -Latakia -latakias -Latania -latanier -Latashia -Latax -latch -latched -latcher -latches -latchet -latchets -latching -latchkey -latch-key -latchkeys -latchless -latchman -latchmen -latchstring -latch-string -latchstrings -late -Latea -late-begun -late-betrayed -late-blooming -late-born -latebra -latebricole -late-built -late-coined -late-come -latecomer -late-comer -latecomers -latecoming -late-cruising -lated -late-disturbed -late-embarked -lateen -lateener -lateeners -lateenrigged -lateen-rigged -lateens -late-filled -late-flowering -late-found -late-imprisoned -late-kissed -late-lamented -lately -lateliness -late-lingering -late-lost -late-met -late-model -latemost -laten -latence -latency -latencies -latened -lateness -latenesses -latening -latens -latensify -latensification -latensified -latensifying -latent -latentize -latently -latentness -latents -late-protracted -later -latera -laterad -lateral -lateraled -lateraling -lateralis -laterality -lateralities -lateralization -lateralize -lateralized -lateralizing -laterally -laterals -Lateran -lateri- -latericeous -latericumbent -lateriflexion -laterifloral -lateriflorous -laterifolious -Laterigradae -laterigrade -laterinerved -late-ripening -laterite -laterites -lateritic -lateritious -lateriversion -laterization -laterize -latero- -lateroabdominal -lateroanterior -laterocaudal -laterocervical -laterodeviation -laterodorsal -lateroduction -lateroflexion -lateromarginal -lateronuchal -lateroposition -lateroposterior -lateropulsion -laterostigmatal -laterostigmatic -laterotemporal -laterotorsion -lateroventral -lateroversion -late-sacked -latescence -latescent -latesome -latest -latest-born -latests -late-taken -late-transformed -late-wake -lateward -latewhile -latewhiles -late-won -latewood -latewoods -latex -latexes -Latexo -latexosis -lath -Latham -Lathan -lath-backed -Lathe -lathe-bore -lathed -lathee -latheman -lathen -lather -latherability -latherable -lathered -lathereeve -latherer -latherers -lathery -latherin -lathering -latheron -lathers -latherwort -lathes -lathesman -lathesmen -lathhouse -lathi -lathy -lathie -lathier -lathiest -lathing -lathings -lathyric -lathyrism -lathyritic -Lathyrus -lathis -lath-legged -lathlike -Lathraea -lathreeve -Lathrop -Lathrope -laths -lathwork -lathworks -Lati -lati- -Latia -Latian -latibule -latibulize -latices -laticifer -laticiferous -laticlave -laticostate -latidentate -Latif -latifolia -latifoliate -latifolious -latifundia -latifundian -latifundio -latifundium -latigo -latigoes -latigos -Latimer -Latimeria -Latimore -Latin -Latina -Latin-American -Latinate -Latiner -Latinesce -Latinesque -Latini -Latinian -Latinic -Latiniform -Latinisation -Latinise -Latinised -Latinising -Latinism -Latinist -Latinistic -Latinistical -Latinitaster -Latinity -latinities -Latinization -Latinize -Latinized -Latinizer -latinizes -Latinizing -Latinless -Latino -latinos -latins -Latinus -lation -latipennate -latipennine -latiplantar -latirostral -Latirostres -latirostrous -Latirus -LATIS -latisept -latiseptal -latiseptate -latish -Latisha -latissimi -latissimus -latisternal -latitancy -latitant -latitat -latite -Latitia -latitude -latitudes -latitude's -latitudinal -latitudinally -latitudinary -Latitudinarian -latitudinarianism -latitudinarianisn -latitudinarians -latitudinous -Latium -lative -latke -latkes -Latoya -Latoye -Latoyia -latomy -latomia -Laton -Latona -Latonia -Latoniah -Latonian -Latooka -latosol -latosolic -latosols -Latouche -latoun -Latour -latrant -latrate -latration -latrede -Latreece -Latreese -Latrell -Latrena -Latreshia -latreutic -latreutical -latry -latria -latrial -latrially -latrian -latrias -Latrice -Latricia -Latrididae -Latrina -latrine -latrines -latrine's -Latris -latro -Latrobe -latrobite -latrociny -latrocinium -Latrodectus -latron -lats -Latt -Latta -latten -lattener -lattens -latter -latter-day -latterkin -latterly -Latterll -lattermath -lattermint -lattermost -latterness -Latty -lattice -latticed -latticeleaf -lattice-leaf -lattice-leaves -latticelike -lattices -lattice's -lattice-window -latticewise -latticework -lattice-work -latticicini -latticing -latticinii -latticinio -Lattie -Lattimer -Lattimore -lattin -lattins -Latton -Lattonia -Latuka -latus -Latvia -Latvian -latvians -Latviia -Latvina -Lau -lauan -lauans -laubanite -Lauber -Laubin -Laud -Lauda -laudability -laudable -laudableness -laudably -laudanidine -laudanin -laudanine -laudanosine -laudanum -laudanums -laudation -laudative -laudator -laudatory -laudatorily -laudators -laude -lauded -Lauder -Lauderdale -lauders -laudes -Laudian -Laudianism -Laudianus -laudification -lauding -Laudism -Laudist -lauds -Laue -Lauenburg -Lauer -Laufer -laugh -laughability -laughable -laughableness -laughably -laughed -laughee -laugher -laughers -laughful -laughy -laughing -laughingly -laughings -laughingstock -laughing-stock -laughingstocks -Laughlin -Laughlintown -Laughry -laughs -laughsome -laughter -laughter-dimpled -laughterful -laughterless -laughter-lighted -laughter-lit -laughter-loving -laughter-provoking -laughters -laughter-stirring -Laughton -laughworthy -lauhala -lauia -laulau -laumonite -laumontite -laun -Launce -Launceiot -Launcelot -launces -Launceston -launch -launchable -launched -launcher -launchers -launches -launchful -launching -launchings -launchpad -launchplex -launchways -launch-ways -laund -launder -launderability -launderable -laundered -launderer -launderers -launderess -launderesses -Launderette -laundering -launderings -launders -Laundes -laundress -laundresses -laundry -laundries -laundrymaid -laundryman -laundrymen -laundryowner -laundrywoman -laundrywomen -Laundromat -laundromats -launeddas -Laupahoehoe -laur -Laura -Lauraceae -lauraceous -laurae -Lauraine -Laural -lauraldehyde -Lauralee -Laurance -lauras -Laurasia -laurate -laurdalite -Laure -laureal -laureate -laureated -laureates -laureateship -laureateships -laureating -laureation -Lauree -Laureen -Laurel -laurel-bearing -laurel-browed -laurel-crowned -laurel-decked -laureled -laureling -Laurella -laurel-leaf -laurel-leaved -laurelled -laurellike -laurelling -laurel-locked -laurels -laurel's -laurelship -Laurelton -Laurelville -laurelwood -laurel-worthy -laurel-wreathed -Lauren -Laurena -Laurence -Laurencia -Laurencin -Laurene -Laurens -Laurent -Laurentia -Laurentian -Laurentians -Laurentide -Laurentides -Laurentium -Laurentius -laureole -laurestinus -Lauretta -Laurette -Lauri -laury -Laurianne -lauric -Laurice -Laurie -Laurier -lauryl -Laurin -Lauryn -Laurinburg -Laurinda -laurinoxylon -laurionite -Laurissa -Laurita -laurite -Lauritz -Laurium -Lauro -Laurocerasus -lauroyl -laurone -laurotetanine -Laurus -laurustine -laurustinus -laurvikite -laus -Lausanne -lautarite -lautenclavicymbal -Lauter -lautite -lautitious -Lautreamont -Lautrec -lautu -Lautverschiebung -lauwine -lauwines -Laux -Lauzon -lav -lava -lavable -Lavabo -lavaboes -lavabos -lava-capped -lavacre -Lavada -lavadero -lavage -lavages -Laval -lavalava -lava-lava -lavalavas -Lavalette -lavalier -lavaliere -lavalieres -lavaliers -lavalike -lava-lit -Lavalle -Lavallette -lavalliere -lavament -lavandera -lavanderas -lavandero -lavanderos -lavandin -Lavandula -lavanga -lavant -lava-paved -L'Avare -lavaret -lavas -lavash -Lavater -Lavatera -lavatic -lavation -lavational -lavations -lavatory -lavatorial -lavatories -lavatory's -lavature -LAVC -lave -laveche -laved -Laveen -laveer -laveered -laveering -laveers -Lavehr -Lavella -Lavelle -lavement -Laven -Lavena -lavender -lavender-blue -lavendered -lavender-flowered -lavendering -lavenders -lavender-scented -lavender-tinted -lavender-water -lavenite -Laver -Laveran -Laverania -Lavergne -Lavery -Laverkin -Lavern -Laverna -Laverne -Lavernia -laveroc -laverock -laverocks -lavers -laverwort -laves -Laveta -lavette -Lavi -lavy -lavialite -lavic -Lavilla -Lavina -Lavine -laving -Lavinia -Lavinie -lavish -lavished -lavisher -lavishers -lavishes -lavishest -lavishing -lavishingly -lavishly -lavishment -lavishness -Lavoie -Lavoisier -lavolta -Lavon -Lavona -Lavonia -Lavonne -lavrock -lavrocks -lavroffite -lavrovite -lavs -Law -law-abiding -lawabidingness -law-abidingness -Lawai -Laward -law-beaten -lawbook -law-book -lawbooks -law-borrow -lawbreak -lawbreaker -law-breaker -lawbreakers -lawbreaking -law-bred -law-condemned -lawcourt -lawcraft -law-day -lawed -Lawen -laweour -Lawes -law-fettered -Lawford -lawful -lawfully -lawfullness -lawfulness -lawgive -lawgiver -lawgivers -lawgiving -law-hand -law-honest -lawyer -lawyered -lawyeress -lawyeresses -lawyery -lawyering -lawyerism -lawyerly -lawyerlike -lawyerling -lawyers -lawyer's -lawyership -Lawyersville -lawine -lawines -lawing -lawings -lawish -lawk -lawks -lawlants -law-learned -law-learnedness -Lawley -Lawler -lawless -lawlessly -lawlessness -lawlike -Lawlor -law-loving -law-magnifying -lawmake -lawmaker -law-maker -lawmakers -lawmaking -Lawman -lawmen -law-merchant -lawmonger -lawn -Lawndale -lawned -lawner -lawny -lawnleaf -lawnlet -lawnlike -lawnmower -lawn-roller -lawns -lawn's -Lawnside -lawn-sleeved -lawn-tennis -lawn-tractor -lawproof -law-reckoning -Lawrence -Lawrenceburg -Lawrenceville -Lawrencian -lawrencite -lawrencium -Lawrenson -Lawrentian -law-revering -Lawry -law-ridden -Lawrie -lawrightman -lawrightmen -Laws -law's -Lawson -lawsone -Lawsoneve -Lawsonia -lawsonite -Lawsonville -law-stationer -lawsuit -lawsuiting -lawsuits -lawsuit's -Lawtey -Lawtell -lawter -Lawton -Lawtons -Lawtun -law-worthy -lawzy -LAX -laxate -laxation -laxations -laxative -laxatively -laxativeness -laxatives -laxator -laxer -laxest -lax-flowered -laxiflorous -laxifoliate -laxifolious -laxism -laxist -laxity -laxities -laxly -Laxness -laxnesses -Laz -Lazar -Lazare -lazaret -lazarets -lazarette -lazaretto -lazarettos -lazar-house -lazary -Lazarist -lazarly -lazarlike -Lazaro -lazarole -lazarone -lazarous -lazars -Lazaruk -Lazarus -Lazbuddie -laze -Lazear -lazed -Lazes -lazy -lazyback -lazybed -lazybird -lazybone -lazybones -lazyboots -lazied -lazier -lazies -laziest -lazyhood -lazying -lazyish -lazylegs -lazily -laziness -lazinesses -lazing -Lazio -lazys -lazyship -Lazor -Lazos -lazule -lazuli -lazuline -lazulis -lazulite -lazulites -lazulitic -lazurite -lazurites -Lazzaro -lazzarone -lazzaroni -LB -lb. -Lbeck -lbf -LBHS -lbinit -LBJ -LBL -LBO -LBP -LBS -lbw -LC -LCA -LCAMOS -LCC -LCCIS -LCCL -LCCLN -LCD -LCDN -LCDR -LCF -l'chaim -LCI -LCIE -LCJ -LCL -LCLOC -LCM -LCN -lconvert -LCP -LCR -LCS -LCSE -LCSEN -lcsymbol -LCT -LCVP -LD -Ld. -LDC -LDEF -Ldenscheid -Lderitz -LDF -Ldg -ldinfo -LDL -LDMTS -L-dopa -LDP -LDS -LDX -le -LEA -lea. -Leach -leachability -leachable -leachate -leachates -leached -leacher -leachers -leaches -leachy -leachier -leachiest -leaching -leachman -leachmen -Leachville -Leacock -Lead -leadable -leadableness -leadage -Leaday -leadback -Leadbelly -lead-blue -lead-burn -lead-burned -lead-burner -lead-burning -lead-clad -lead-coated -lead-colored -lead-covered -leaded -leaden -leaden-blue -lead-encased -leaden-colored -leaden-eyed -leaden-footed -leaden-headed -leadenhearted -leadenheartedness -leaden-heeled -leaden-hued -leadenly -leaden-natured -leadenness -leaden-paced -leadenpated -leaden-skulled -leaden-soled -leaden-souled -leaden-spirited -leaden-thoughted -leaden-weighted -leaden-willed -leaden-winged -leaden-witted -leader -leaderess -leaderette -leaderless -leaders -leadership -leaderships -leadership's -leadeth -lead-filled -lead-gray -lead-hardening -lead-headed -leadhillite -leady -leadier -leadiest -leadin -lead-in -leadiness -leading -leadingly -leadings -lead-lapped -lead-lead -leadless -leadline -lead-lined -leadman -lead-melting -leadmen -leadoff -lead-off -leadoffs -Leadore -leadout -leadplant -leadproof -lead-pulverizing -lead-ruled -leads -lead-sheathed -leadsman -lead-smelting -leadsmen -leadstone -lead-tempering -lead-up -Leadville -leadway -Leadwood -leadwork -leadworks -leadwort -leadworts -Leaf -leafage -leafages -leaf-bearing -leafbird -leafboy -leaf-clad -leaf-climber -leaf-climbing -leafcup -leaf-cutter -leafdom -leaf-eared -leaf-eating -leafed -leafen -leafer -leafery -leaf-footed -leaf-forming -leaf-fringed -leafgirl -leaf-gold -leafhopper -leaf-hopper -leafhoppers -leafy -leafier -leafiest -leafiness -leafing -leafy-stemmed -leafit -leaf-laden -leaf-lard -leafless -leaflessness -leaflet -leafleteer -leaflets -leaflet's -leaflike -leafmold -leaf-nose -leaf-nosed -leafs -leaf-shaded -leaf-shaped -leaf-sheltered -leafstalk -leafstalks -leaf-strewn -leafwood -leafwork -leafworm -leafworms -league -leagued -leaguelong -leaguer -leaguered -leaguerer -leaguering -leaguers -leagues -leaguing -Leah -Leahey -Leahy -leak -leakage -leakages -leakage's -leakance -Leake -leaked -Leakey -leaker -leakers -Leakesville -leaky -leakier -leakiest -leakily -leakiness -leaking -leakless -leakproof -leaks -Leal -lealand -lea-land -leally -lealness -lealty -lealties -leam -leamer -Leamington -Lean -Leanard -lean-cheeked -Leander -Leandra -Leandre -Leandro -lean-eared -leaned -leaner -leaners -leanest -lean-face -lean-faced -lean-fleshed -leangle -lean-headed -lean-horned -leany -leaning -leanings -leanish -lean-jawed -leanly -lean-limbed -lean-looking -lean-minded -Leann -Leanna -Leanne -lean-necked -leanness -leannesses -Leanor -Leanora -lean-ribbed -leans -lean-souled -leant -lean-to -lean-tos -lean-witted -Leao -LEAP -leapable -leaped -Leaper -leapers -leapfrog -leap-frog -leapfrogged -leapfrogger -leapfrogging -leapfrogs -leapful -leaping -leapingly -leaps -leapt -Lear -Learchus -Leary -learier -leariest -lea-rig -learn -learnable -Learned -learnedly -learnedness -learner -learners -learnership -learning -learnings -learns -learnt -Learoy -Learoyd -lears -LEAS -leasable -Leasburg -lease -leaseback -lease-back -leased -leasehold -leaseholder -leaseholders -leaseholding -leaseholds -lease-lend -leaseless -leaseman -leasemen -leasemonger -lease-pardle -lease-purchase -leaser -leasers -leases -leash -leashed -leashes -leashing -leashless -leash's -Leasia -leasing -leasings -leasow -least -leasts -leastways -leastwise -leat -leath -leather -leatherback -leather-backed -leatherbark -leatherboard -leather-bound -leatherbush -leathercoat -leather-colored -leather-covered -leathercraft -leather-cushioned -leather-cutting -leathered -leatherer -Leatherette -leather-faced -leatherfish -leatherfishes -leatherflower -leather-hard -Leatherhead -leather-headed -leathery -leatherine -leatheriness -leathering -leatherize -leatherjacket -leather-jacket -leatherleaf -leatherleaves -leatherlike -leatherlikeness -leather-lined -leather-lunged -leathermaker -leathermaking -leathern -leatherneck -leather-necked -leathernecks -Leatheroid -leatherroot -leathers -leatherside -Leatherstocking -leatherware -leatherwing -leather-winged -Leatherwood -leatherwork -leatherworker -leatherworking -leathwake -leatman -leatmen -Leatri -Leatrice -leave -leaved -leaveless -Leavelle -leavelooker -leaven -leavened -leavening -leavenish -leavenless -leavenous -leavens -Leavenworth -leaver -leavers -leaverwood -leaves -leavetaking -leave-taking -Leavy -leavier -leaviest -leaving -leavings -Leavis -Leavitt -Leavittsburg -leawill -Leawood -Lebam -Leban -Lebanese -Lebanon -Lebar -Lebaron -lebban -lebbek -Lebbie -Lebeau -Lebec -leben -lebens -Lebensraum -lebes -Lebesgue -lebhaft -Lebistes -lebkuchen -Leblanc -Lebna -Lebo -Leboff -Lebowa -lebrancho -LeBrun -Leburn -LEC -lecama -lecaniid -Lecaniinae -lecanine -Lecanium -lecanomancer -lecanomancy -lecanomantic -Lecanora -Lecanoraceae -lecanoraceous -lecanoric -lecanorine -lecanoroid -lecanoscopy -lecanoscopic -Lecanto -Lecce -Lech -lechayim -lechayims -lechatelierite -leche -Lechea -Lecheates -leched -lecher -lechered -lecherer -lechery -lecheries -lechering -lecherous -lecherously -lecherousness -lecherousnesses -lechers -leches -leching -Lechner -lechosa -lechriodont -Lechriodonta -lechuguilla -lechuguillas -lechwe -Lecia -Lecidea -Lecideaceae -lecideaceous -lecideiform -lecideine -lecidioid -lecyth -lecithal -lecithalbumin -lecithality -lecythi -lecithic -lecythid -Lecythidaceae -lecythidaceous -lecithin -lecithinase -lecithins -Lecythis -lecithoblast -lecythoi -lecithoid -lecythoid -lecithoprotein -lecythus -leck -lecker -Lecky -Leckie -Leckkill -Leckrone -Leclair -Leclaire -Lecoma -Lecompton -lecontite -lecotropal -LeCroy -lect -lect. -lectern -lecterns -lecthi -lectica -lectin -lectins -lection -lectionary -lectionaries -lections -lectisternium -lector -lectorate -lectorial -lectors -lectorship -lectotype -Lectra -lectress -lectrice -lectual -lectuary -lecture -lectured -lecture-demonstration -lecturee -lectureproof -lecturer -lecturers -lectures -lectureship -lectureships -lecturess -lecturette -lecturing -lecturn -Lecuona -LED -Leda -Ledah -Ledbetter -Ledda -Leddy -lede -Ledeen -leden -Lederach -Lederberg -Lederer -lederhosen -lederite -ledge -ledged -ledgeless -ledgeman -ledgement -Ledger -ledger-book -ledgerdom -ledgered -ledgering -ledgers -ledges -ledget -Ledgewood -ledgy -ledgier -ledgiest -ledging -ledgment -Ledyard -Ledidae -ledol -LeDoux -leds -Ledum -Lee -leeangle -LeeAnn -Leeanne -leeboard -lee-board -leeboards -lee-bow -leech -leech-book -Leechburg -leechcraft -leechdom -leecheater -leeched -leecher -leechery -leeches -leeching -leechkin -leechlike -leechman -leech's -leechwort -Leeco -leed -Leede -Leedey -Leeds -Lee-Enfield -leef -leefang -leefange -leeftail -leeful -leefully -leegatioen -Leegrant -leegte -leek -Leeke -leek-green -leeky -leekish -leeks -Leela -Leelah -Leeland -leelane -leelang -Lee-Metford -Leemont -Leena -leep -Leeper -leepit -leer -leered -leerfish -leery -leerier -leeriest -leerily -leeriness -leering -leeringly -leerish -leerness -Leeroy -leeroway -leers -Leersia -lees -Leesa -Leesburg -Leese -Leesen -leeser -leeshyy -leesing -leesome -leesomely -Leesport -Leesville -Leet -Leeth -leetle -leetman -leetmen -Leeton -Leetonia -leets -Leetsdale -Leeuwarden -Leeuwenhoek -Leeuwfontein -Leevining -leeway -lee-way -leeways -leewan -leeward -leewardly -leewardmost -leewardness -leewards -leewill -Leewood -Leff -Leffen -Leffert -Lefkowitz -Lefor -Lefors -lefsel -lefsen -left -left-bank -left-brained -left-eyed -left-eyedness -lefter -leftest -left-foot -left-footed -left-footedness -left-footer -left-hand -left-handed -left-handedly -left-handedness -left-hander -left-handiness -Lefty -lefties -leftish -leftism -leftisms -Leftist -leftists -leftist's -left-lay -left-laid -left-legged -left-leggedness -leftments -leftmost -leftness -left-off -Lefton -leftover -left-over -leftovers -leftover's -lefts -left-sided -leftward -leftwardly -leftwards -Leftwich -leftwing -left-wing -leftwinger -left-winger -left-wingish -left-wingism -leg -leg. -legacy -legacies -legacy's -legal -legalese -legaleses -legalise -legalised -legalises -legalising -legalism -legalisms -legalist -legalistic -legalistically -legalists -legality -legalities -legalization -legalizations -legalize -legalized -legalizes -legalizing -legally -legalness -legals -legantine -legantinelegatary -Legaspi -legatary -legate -legated -legatee -legatees -legates -legateship -legateships -legati -legatine -legating -legation -legationary -legations -legative -legato -legator -legatory -legatorial -legators -legatos -legature -legatus -Legazpi -leg-bail -legbar -leg-break -leg-breaker -lege -legend -legenda -legendary -legendarian -legendaries -legendarily -legendic -legendist -legendize -legendized -legendizing -legendless -Legendre -legendry -Legendrian -legendries -legends -legend's -Leger -legerdemain -legerdemainist -legerdemains -legerete -legerity -legerities -legers -leges -Leggat -Legge -legged -legger -Leggett -leggy -leggiadrous -leggier -leggiero -leggiest -leggin -legginess -legging -legginged -leggings -leggins -legharness -leg-harness -Leghorn -leghorns -legibility -legibilities -legible -legibleness -legibly -legifer -legific -legion -legionary -legionaries -legioned -legioner -legionnaire -legionnaires -legionry -legions -legion's -leg-iron -Legis -legislate -legislated -legislates -legislating -legislation -legislational -legislations -legislativ -legislative -legislatively -legislator -legislatorial -legislatorially -legislators -legislator's -legislatorship -legislatress -legislatresses -legislatrices -legislatrix -legislatrixes -legislature -legislatures -legislature's -legist -legister -legists -legit -legitim -legitimacy -legitimacies -legitimate -legitimated -legitimately -legitimateness -legitimating -legitimation -legitimatise -legitimatised -legitimatising -legitimatist -legitimatization -legitimatize -legitimatized -legitimatizing -legitime -legitimisation -legitimise -legitimised -legitimising -legitimism -legitimist -legitimistic -legitimity -legitimization -legitimizations -legitimize -legitimized -legitimizer -legitimizes -legitimizing -legitimum -legits -leglen -legless -leglessness -leglet -leglike -legman -legmen -Legnica -LEGO -legoa -leg-of-mutton -lego-literary -leg-o'-mutton -legong -legongs -legpiece -legpull -leg-pull -legpuller -leg-puller -legpulling -Legra -Legrand -Legree -legrete -legroom -legrooms -legrope -legs -legua -leguan -Leguatia -Leguia -leguleian -leguleious -legume -legumelin -legumen -legumes -legumin -leguminiform -Leguminosae -leguminose -leguminous -legumins -leg-weary -legwork -legworks -lehay -lehayim -lehayims -Lehar -Lehet -Lehi -Lehigh -Lehighton -Lehman -Lehmann -Lehmbruck -lehmer -Lehr -lehrbachite -Lehrer -Lehrfreiheit -lehrman -lehrmen -lehrs -lehrsman -lehrsmen -lehua -lehuas -lei -Ley -Leia -Leibman -Leibnitz -Leibnitzian -Leibnitzianism -Leibniz -Leibnizian -Leibnizianism -Leicester -Leicestershire -Leichhardt -Leics -Leid -Leiden -Leyden -Leyes -Leif -Leifer -Leifeste -leifite -leiger -Leigh -Leigha -Leighland -Leighton -Leila -Leyla -Leilah -leyland -Leilani -leimtype -Leinsdorf -Leinster -leio- -leiocephalous -leiocome -leiodermatous -leiodermia -leiomyofibroma -leiomyoma -leiomyomas -leiomyomata -leiomyomatous -leiomyosarcoma -leiophyllous -Leiophyllum -Leiothrix -Leiotrichan -Leiotriches -Leiotrichi -leiotrichy -Leiotrichidae -Leiotrichinae -leiotrichine -leiotrichous -leiotropic -leip- -Leipoa -Leipsic -Leipzig -Leiria -Leis -leys -Leisenring -Leiser -Leisha -Leishmania -leishmanial -leishmaniasis -leishmanic -leishmanioid -leishmaniosis -leysing -leiss -Leisten -leister -leistered -leisterer -leistering -leisters -leisurabe -leisurable -leisurably -leisure -leisured -leisureful -leisureless -leisurely -leisureliness -leisureness -leisures -Leitao -Leitchfield -Leyte -Leiter -Leitersford -Leith -Leitman -leitmotif -leitmotifs -leitmotiv -Leitneria -Leitneriaceae -leitneriaceous -Leitneriales -Leyton -Leitrim -Leitus -Leivasy -Leix -Lejeune -Lek -lekach -lekanai -lekane -leke -lekha -lekythi -lekythoi -lekythos -lekythus -lekker -leks -leku -lekvar -lekvars -Lela -Lelah -Leland -Leler -Lely -Lelia -Lelith -Lello -lelwel -LEM -lem- -Lema -Lemaceon -LeMay -Lemaireocereus -Lemaitre -Lemal -Leman -Lemanea -Lemaneaceae -lemanry -lemans -Lemar -Lemars -Lemass -Lemasters -Lemberg -Lemcke -leme -lemel -Lemessus -Lemhi -Lemieux -Leming -Lemire -Lemitar -Lemkul -lemma -lemmas -lemma's -lemmata -lemmatize -Lemmy -Lemmie -lemming -lemmings -Lemminkainen -lemmitis -lemmoblastic -lemmocyte -Lemmon -Lemmuela -Lemmueu -Lemmus -Lemna -Lemnaceae -lemnaceous -lemnad -Lemnian -lemniscata -lemniscate -lemniscatic -lemnisci -lemniscus -lemnisnisci -Lemnitzer -Lemnos -lemogra -lemography -Lemoyen -Lemoyne -lemology -Lemon -lemonade -lemonades -lemonado -lemon-color -lemon-colored -lemon-faced -lemonfish -lemonfishes -lemon-flavored -lemongrass -lemon-green -lemony -Lemonias -lemon-yellow -Lemoniidae -Lemoniinae -lemonish -lemonlike -Lemonnier -lemons -lemon's -lemon-scented -Lemont -lemon-tinted -lemonweed -lemonwood -Lemoore -Lemosi -Lemovices -Lemper -lempira -lempiras -Lempres -Lempster -Lemuel -Lemuela -Lemuelah -lemur -Lemuralia -lemures -Lemuria -Lemurian -lemurid -Lemuridae -lemuriform -Lemurinae -lemurine -lemurlike -lemuroid -Lemuroidea -lemuroids -lemurs -Len -Lena -lenad -Lenaea -Lenaean -Lenaeum -Lenaeus -Lenapah -Lenape -Lenapes -Lenard -Lenca -Lencan -Lencas -lench -lencheon -Lenci -LENCL -Lenclos -lend -lendable -lended -lendee -lender -lenders -lending -lend-lease -lend-leased -lend-leasing -lends -Lendu -lene -Lenee -Lenes -Lenette -L'Enfant -leng -Lengby -Lengel -lenger -lengest -Lenglen -length -lengthen -lengthened -lengthener -lengtheners -lengthening -lengthens -lengther -lengthful -lengthy -lengthier -lengthiest -lengthily -lengthiness -lengthly -lengthman -lengths -lengthsman -lengthsmen -lengthsome -lengthsomeness -lengthways -lengthwise -Lenhard -Lenhart -Lenhartsville -leniate -lenience -leniences -leniency -leniencies -lenient -leniently -lenientness -lenify -Leni-lenape -Lenin -Leninabad -Leninakan -Leningrad -Leninism -Leninist -leninists -Leninite -lenis -lenity -lenitic -lenities -lenition -lenitive -lenitively -lenitiveness -lenitives -lenitude -Lenka -Lenna -Lennard -Lenni -Lenny -Lennie -lennilite -Lenno -Lennoaceae -lennoaceous -Lennon -lennow -Lennox -Leno -lenocinant -Lenoir -Lenora -Lenorah -Lenore -lenos -Lenotre -Lenox -Lenoxdale -Lenoxville -Lenrow -lens -lense -lensed -lenses -lensing -lensless -lenslike -lensman -lensmen -lens-mount -lens's -Lenssen -lens-shaped -lent -lentamente -lentando -Lenten -Lententide -lenth -Lentha -Lenthiel -lenthways -Lentibulariaceae -lentibulariaceous -lentic -lenticel -lenticellate -lenticels -lenticle -lenticonus -lenticula -lenticular -lenticulare -lenticularis -lenticularly -lenticulas -lenticulate -lenticulated -lenticulating -lenticulation -lenticule -lenticulo-optic -lenticulostriate -lenticulothalamic -lentiform -lentigerous -lentigines -lentiginose -lentiginous -lentigo -lentil -lentile -Lentilla -lentils -lentil's -lentiner -lentisc -lentiscine -lentisco -lentiscus -lentisk -lentisks -lentissimo -lentitude -lentitudinous -Lentner -lento -lentoid -lentor -lentos -lentous -lenvoi -lenvoy -l'envoy -Lenwood -Lenz -Lenzburg -Lenzi -Lenzites -LEO -Leoben -Leocadia -Leod -leodicid -Leodis -Leodora -Leofric -Leoine -Leola -Leoline -Leoma -Leominster -Leon -Leona -Leonanie -Leonard -Leonardesque -Leonardi -Leonardo -Leonardsville -Leonardtown -Leonardville -Leonato -Leoncavallo -leoncito -Leone -Leonelle -Leonerd -leones -Leonese -Leong -Leonhard -leonhardite -Leoni -Leonia -Leonid -Leonidas -Leonides -Leonids -Leonie -Leonine -leoninely -leonines -Leonis -Leonist -leonite -Leonnoys -Leonor -Leonora -Leonore -Leonotis -Leonov -Leonsis -Leonteen -Leonteus -leontiasis -Leontina -Leontine -Leontyne -Leontocebus -leontocephalous -Leontodon -Leontopodium -Leonurus -Leonville -leopard -leoparde -leopardess -Leopardi -leopardine -leopardite -leopard-man -leopards -leopard's -leopard's-bane -leopardskin -leopardwood -Leopold -Leopoldeen -Leopoldine -Leopoldinia -leopoldite -Leopoldo -Leopoldville -Leopolis -Leor -Leora -Leos -Leota -leotard -leotards -Leoti -Leotie -Leotine -Leotyne -lep -lepa -lepadid -Lepadidae -lepadoid -lepage -Lepaya -lepal -Lepanto -lepargylic -Lepargyraea -Lepas -Lepaute -Lepcha -leper -leperdom -lepered -lepero -lepers -lepid -lepid- -lepidene -lepidin -lepidine -lepidity -Lepidium -lepidly -lepido- -lepidoblastic -Lepidodendraceae -lepidodendraceous -lepidodendrid -lepidodendrids -lepidodendroid -lepidodendroids -Lepidodendron -lepidoid -Lepidoidei -lepidolite -lepidomelane -lepidophyllous -Lepidophyllum -lepidophyte -lepidophytic -Lepidophloios -lepidoporphyrin -lepidopter -Lepidoptera -lepidopteral -lepidopteran -lepidopterid -lepidopterist -lepidopterology -lepidopterological -lepidopterologist -lepidopteron -lepidopterous -Lepidosauria -lepidosaurian -lepidoses -Lepidosiren -Lepidosirenidae -lepidosirenoid -lepidosis -Lepidosperma -Lepidospermae -Lepidosphes -Lepidostei -lepidosteoid -Lepidosteus -Lepidostrobus -lepidote -Lepidotes -lepidotic -Lepidotus -Lepidurus -Lepidus -Lepilemur -Lepine -Lepiota -Lepisma -Lepismatidae -Lepismidae -lepismoid -Lepisosteidae -Lepisosteus -Lepley -lepocyta -lepocyte -Lepomis -leporicide -leporid -Leporidae -leporide -leporids -leporiform -leporine -Leporis -Lepospondyli -lepospondylous -Leposternidae -Leposternon -lepothrix -Lepp -Lepper -leppy -lepra -Lepralia -lepralian -lepre -leprechaun -leprechauns -lepry -lepric -leprid -leprine -leproid -leprology -leprologic -leprologist -leproma -lepromatous -leprosaria -leprosarium -leprosariums -leprose -leprosed -leprosery -leproseries -leprosy -leprosied -leprosies -leprosis -leprosity -leprotic -leprous -leprously -leprousness -lepsaria -lepsy -Lepsius -lept -lepta -Leptamnium -Leptandra -leptandrin -leptene -leptera -leptid -Leptidae -leptiform -Leptilon -leptynite -leptinolite -Leptinotarsa -leptite -lepto- -leptobos -Leptocardia -leptocardian -Leptocardii -leptocentric -leptocephalan -leptocephali -leptocephaly -leptocephalia -leptocephalic -leptocephalid -Leptocephalidae -leptocephaloid -leptocephalous -Leptocephalus -leptocercal -leptochlorite -leptochroa -leptochrous -leptoclase -leptodactyl -Leptodactylidae -leptodactylous -Leptodactylus -leptodermatous -leptodermous -Leptodora -Leptodoridae -leptoform -lepto-form -Leptogenesis -leptokurtic -leptokurtosis -Leptolepidae -Leptolepis -Leptolinae -leptology -leptomatic -leptome -Leptomedusae -leptomedusan -leptomeningeal -leptomeninges -leptomeningitis -leptomeninx -leptometer -leptomonad -Leptomonas -Lepton -leptonecrosis -leptonema -leptonic -leptons -leptopellic -leptophyllous -Leptophis -leptoprosope -leptoprosopy -leptoprosopic -leptoprosopous -Leptoptilus -Leptorchis -leptorrhin -leptorrhine -leptorrhiny -leptorrhinian -leptorrhinism -Leptosyne -leptosomatic -leptosome -leptosomic -leptosperm -Leptospermum -Leptosphaeria -Leptospira -leptospirae -leptospiral -leptospiras -leptospire -leptospirosis -leptosporangiate -Leptostraca -leptostracan -leptostracous -Leptostromataceae -leptotene -Leptothrix -lepto-type -Leptotyphlopidae -Leptotyphlops -Leptotrichia -leptus -Lepus -lequear -Lequire -Ler -Leraysville -LERC -lere -Lerida -Lermontov -Lerna -Lernaea -Lernaeacea -Lernaean -Lernaeidae -lernaeiform -lernaeoid -Lernaeoides -Lerne -Lernean -Lerner -Lernfreiheit -Leroi -LeRoy -Lerona -Leros -Lerose -lerot -lerp -lerret -Lerwa -Lerwick -Les -Lesage -Lesak -Lesath -Lesbia -Lesbian -Lesbianism -lesbianisms -lesbians -Lesbos -lesche -Leschen -Leschetizky -lese -lesed -lese-majesty -Lesgh -Lesh -Leshia -Lesya -lesiy -lesion -lesional -lesioned -lesions -Leskea -Leskeaceae -leskeaceous -Lesko -Leslee -Lesley -Lesleya -Lesli -Lesly -Leslie -Lesotho -Lespedeza -Lesquerella -less -Lessard -lessee -lessees -lesseeship -lessen -lessened -lessener -lessening -lessens -Lesseps -Lesser -lesses -lessest -Lessing -lessive -Lesslie -lessn -lessness -lesson -lessoned -lessoning -lessons -lesson's -lessor -lessors -LEST -leste -Lester -Lesterville -lestiwarite -lestobioses -lestobiosis -lestobiotic -Lestodon -Lestosaurus -lestrad -Lestrigon -Lestrigonian -Lesueur -let -Leta -let-alone -Letart -Letch -letched -Letcher -letches -letchy -letching -Letchworth -letdown -letdowns -lete -letgame -Letha -lethal -lethality -lethalities -lethalize -lethally -lethals -lethargy -lethargic -lethargical -lethargically -lethargicalness -lethargies -lethargise -lethargised -lethargising -lethargize -lethargized -lethargizing -lethargus -Lethbridge -Lethe -Lethean -lethes -lethy -Lethia -Lethied -lethiferous -Lethocerus -lethologica -Leticia -Letisha -Letitia -Letizia -Leto -letoff -let-off -Letohatchee -Letona -letorate -let-out -let-pass -L'Etranger -Letreece -Letrice -letrist -lets -let's -Letsou -Lett -Letta -lettable -Lette -letted -letten -letter -letter-bound -lettercard -letter-card -letter-copying -letter-duplicating -lettered -letterer -letter-erasing -letterers -letteret -letter-fed -letter-folding -letterform -lettergae -lettergram -letterhead -letterheads -letter-high -letterin -lettering -letterings -letterleaf -letter-learned -letterless -letterman -lettermen -lettern -letter-opener -letter-perfect -letterpress -letter-press -letters -letterset -letterspace -letterspaced -letterspacing -letterure -letterweight -letter-winged -letterwood -Letti -Letty -Lettic -Lettice -Lettie -lettiga -letting -Lettish -Letto-lithuanian -Letto-slavic -Letto-slavonic -lettrin -lettrure -Letts -lettsomite -Lettsworth -lettuce -lettuces -letuare -letup -let-up -letups -leu -leuc- -Leucadendron -Leucadian -leucaemia -leucaemic -Leucaena -leucaethiop -leucaethiopes -leucaethiopic -Leucaeus -leucaniline -leucanthous -Leucas -leucaugite -leucaurin -Leuce -leucemia -leucemias -leucemic -Leucetta -leuch -leuchaemia -leuchemia -leuchtenbergite -leucic -Leucichthys -Leucifer -Leuciferidae -leucyl -leucin -leucine -leucines -leucins -Leucippe -Leucippides -Leucippus -leucism -leucite -leucite-basanite -leucites -leucite-tephrite -leucitic -leucitis -leucitite -leucitohedron -leucitoid -leucitophyre -Leuckartia -Leuckartiidae -leuco -leuco- -leucobasalt -leucoblast -leucoblastic -Leucobryaceae -Leucobryum -leucocarpous -leucochalcite -leucocholy -leucocholic -leucochroic -leucocyan -leucocidic -leucocidin -leucocism -leucocytal -leucocyte -leucocythaemia -leucocythaemic -leucocythemia -leucocythemic -leucocytic -leucocytoblast -leucocytogenesis -leucocytoid -leucocytolysin -leucocytolysis -leucocytolytic -leucocytology -leucocytometer -leucocytopenia -leucocytopenic -leucocytoplania -leucocytopoiesis -leucocytosis -leucocytotherapy -leucocytotic -Leucocytozoon -leucocrate -leucocratic -Leucocrinum -leucoderma -leucodermatous -leucodermia -leucodermic -leucoencephalitis -leucoethiop -leucogenic -leucoid -leucoindigo -leucoindigotin -Leucojaceae -Leucojum -leucoline -leucolytic -leucoma -leucomaine -leucomas -leucomatous -leucomelanic -leucomelanous -Leucon -leucones -leuconoid -Leuconostoc -leucopenia -leucopenic -leucophane -leucophanite -leucophyllous -leucophyre -leucophlegmacy -leucophoenicite -leucophore -Leucophryne -leucopyrite -leucoplakia -leucoplakial -leucoplast -leucoplastid -leucopoiesis -leucopoietic -leucopus -leucoquinizarin -leucoryx -leucorrhea -leucorrheal -leucorrhoea -leucorrhoeal -leucosyenite -leucosis -Leucosolenia -Leucosoleniidae -leucospermous -leucosphenite -leucosphere -leucospheric -leucostasis -Leucosticte -leucotactic -leucotaxin -leucotaxine -Leucothea -Leucothoe -leucotic -leucotome -leucotomy -leucotomies -leucotoxic -leucous -leucoxene -Leuctra -Leucus -leud -leudes -leuds -leuk -leukaemia -leukaemic -Leukas -leukemia -leukemias -leukemic -leukemics -leukemid -leukemoid -leuko- -leukoblast -leukoblastic -leukocidic -leukocidin -leukocyt- -leukocyte -leukocytes -leukocythemia -leukocytic -leukocytoblast -leukocytoid -leukocytopenia -leukocytosis -leukocytotic -leukoctyoid -leukoderma -leukodystrophy -leukoma -leukomas -leukon -leukons -leukopedesis -leukopenia -leukopenic -leukophoresis -leukopoiesis -leukopoietic -leukorrhea -leukorrheal -leukorrhoea -leukorrhoeal -leukoses -leukosis -leukotaxin -leukotaxine -Leukothea -leukotic -leukotomy -leukotomies -leuma -Leund -leung -Leupold -Leupp -Leuricus -Leutze -Leuven -Lev -lev- -Lev. -leva -levade -Levallois -Levalloisian -Levan -Levana -levance -levancy -Levania -Levant -levanted -Levanter -levantera -levanters -Levantine -levanting -Levantinism -levanto -levants -levarterenol -Levasy -levation -levator -levatores -levators -leve -leveche -levee -leveed -leveeing -levees -levee's -leveful -Levey -level -level-coil -leveled -leveler -levelers -levelheaded -level-headed -levelheadedly -levelheadedness -level-headedness -leveling -levelish -levelism -level-jawed -Levelland -levelled -Leveller -levellers -levellest -levelly -levelling -levelman -levelness -levelnesses -Levelock -level-off -levels -level-wind -Leven -Levenson -Leventhal -Leventis -Lever -lever-action -leverage -leveraged -leverages -leveraging -levered -leverer -leveret -leverets -Leverett -Leverhulme -Leverick -Leveridge -Levering -Leverkusen -leverlike -leverman -Leveroni -Leverrier -levers -lever's -leverwood -levesel -Levesque -levet -Levi -Levy -leviable -leviathan -leviathans -leviation -levied -levier -leviers -levies -levigable -levigate -levigated -levigates -levigating -levigation -levigator -levying -levyist -Levin -Levina -Levine -levyne -leviner -levining -levynite -Levins -Levinson -levir -levirate -levirates -leviratic -leviratical -leviration -Levis -levi's -Levison -Levisticum -Levi-Strauss -Levit -Levit. -Levitan -levitant -levitate -levitated -levitates -levitating -levitation -levitational -levitations -levitative -levitator -Levite -leviter -levity -Levitical -Leviticalism -Leviticality -Levitically -Leviticalness -Leviticism -Leviticus -levities -Levitism -Levitt -Levittown -LeVitus -Levkas -levo -levo- -levodopa -levoduction -levogyrate -levogyre -levogyrous -levoglucose -levolactic -levolimonene -Levon -Levona -Levophed -levo-pinene -levorotary -levorotation -levorotatory -levotartaric -levoversion -Levroux -levulic -levulin -levulinic -levulins -levulose -levuloses -levulosuria -Lew -Lewak -Lewan -Lewanna -lewd -lewder -lewdest -lewdly -lewdness -lewdnesses -lewdster -lewe -Lewellen -Lewendal -Lewert -Lewes -Lewie -Lewin -lewing -Lewis -Lewisberry -Lewisburg -lewises -Lewisetta -Lewisham -Lewisia -Lewisian -lewisite -lewisites -Lewisohn -Lewison -Lewisport -Lewiss -lewisson -lewissons -lewist -Lewiston -Lewistown -Lewisville -Lewls -lewnite -Lewse -lewth -lewty -lew-warm -lex -lex. -Lexa -Lexell -lexeme -lexemes -lexemic -lexes -Lexi -Lexy -lexia -lexic -lexica -lexical -lexicalic -lexicality -lexically -lexicog -lexicog. -lexicographer -lexicographers -lexicography -lexicographian -lexicographic -lexicographical -lexicographically -lexicographies -lexicographist -lexicology -lexicologic -lexicological -lexicologist -lexicon -lexiconist -lexiconize -lexicons -lexicon's -lexicostatistic -lexicostatistical -lexicostatistics -Lexie -lexigraphy -lexigraphic -lexigraphical -lexigraphically -Lexine -Lexington -lexiphanes -lexiphanic -lexiphanicism -Lexis -lexological -lez -lezes -Lezghian -Lezley -Lezlie -lezzy -lezzie -lezzies -LF -LFACS -LFS -LFSA -LG -lg. -LGA -LGB -LGBO -Lger -LGk -l-glucose -LGM -lgth -lgth. -LH -Lhary -Lhasa -lhb -LHD -lherzite -lherzolite -Lhevinne -lhiamba -Lho-ke -L'Hospital -Lhota -LHS -LI -ly -Lia -liability -liabilities -liability's -liable -liableness -Lyaeus -liaise -liaised -liaises -liaising -liaison -liaisons -liaison's -Liakoura -Lyall -Lyallpur -Liam -lyam -liamba -lyam-hound -Lian -Liana -lianas -lyance -Liane -lianes -liang -liangle -liangs -Lianna -Lianne -lianoid -Liao -Liaoyang -Liaoning -Liaopeh -Liaotung -liar -Liard -lyard -liards -liars -liar's -lyart -Lias -Lyas -lyase -lyases -liasing -liason -Liassic -Liatrice -Liatris -Lyautey -Lib -Lib. -Liba -libament -libaniferous -libanophorous -libanotophorous -libant -libard -libate -libated -libating -libation -libational -libationary -libationer -libations -libatory -Libau -Libava -Libb -libbard -libbed -Libbey -libber -libbers -libbet -Libbi -Libby -Libbie -libbing -Libbna -libbra -libecchio -libeccio -libeccios -libel -libelant -libelants -libeled -libelee -libelees -libeler -libelers -libeling -libelist -libelists -libellant -libellary -libellate -libelled -libellee -libellees -libeller -libellers -libelling -libellist -libellous -libellously -Libellula -libellulid -Libellulidae -libelluloid -libelous -libelously -libels -Libenson -Liber -Libera -Liberal -Liberalia -liberalisation -liberalise -liberalised -liberaliser -liberalising -Liberalism -liberalisms -liberalist -liberalistic -liberalites -liberality -liberalities -liberalization -liberalizations -liberalize -liberalized -liberalizer -liberalizes -liberalizing -liberally -liberal-minded -liberal-mindedness -liberalness -liberals -liberate -liberated -liberates -Liberati -liberating -liberation -liberationism -liberationist -liberationists -liberations -liberative -Liberator -liberatory -liberators -liberator's -liberatress -liberatrice -liberatrix -Liberec -Liberia -Liberian -liberians -Liberius -liberomotor -libers -libertarian -libertarianism -libertarians -Libertas -Liberty -liberticidal -liberticide -liberties -libertyless -libertinage -libertine -libertines -libertinism -liberty's -Libertytown -Libertyville -liberum -libethenite -libget -Libia -Libya -Libyan -libyans -libidibi -libidinal -libidinally -libidinist -libidinization -libidinized -libidinizing -libidinosity -libidinous -libidinously -libidinousness -libido -libidos -libinit -Libyo-phoenician -Libyo-teutonic -Libytheidae -Libytheinae -Libitina -libitum -libken -libkin -liblab -Lib-Lab -liblabs -Libna -Libnah -Libocedrus -Liborio -Libove -libr -Libra -Librae -librairie -libral -library -librarian -librarianess -librarians -librarian's -librarianship -libraries -librarii -libraryless -librarious -library's -librarius -libras -librate -librated -librates -librating -libration -librational -libratory -Libre -libretti -librettist -librettists -libretto -librettos -libretto-writing -Libreville -libri -Librid -libriform -libris -Librium -libroplast -libs -Lyburn -Libuse -lyc -Lycaena -lycaenid -Lycaenidae -Lycaeus -Lican-antai -Licania -lycanthrope -lycanthropy -lycanthropia -lycanthropic -lycanthropies -lycanthropist -lycanthropize -lycanthropous -Lycaon -Lycaonia -licareol -Licastro -licca -lice -lycea -lyceal -lycee -lycees -licence -licenceable -licenced -licencee -licencees -licencer -licencers -licences -licencing -licensable -license -licensed -licensee -licensees -licenseless -licenser -licensers -licenses -licensing -licensor -licensors -licensure -licente -licenti -licentiate -licentiates -licentiateship -licentiation -licentious -licentiously -licentiousness -licentiousnesses -licet -Licetus -Lyceum -lyceums -lich -lych -Licha -licham -lichanos -Lichas -lichee -lychee -lichees -lychees -lichen -lichenaceous -lichen-clad -lichen-crusted -lichened -Lichenes -lichen-grown -licheny -lichenian -licheniasis -lichenic -lichenicolous -lichenification -licheniform -lichenin -lichening -lichenins -lichenise -lichenised -lichenising -lichenism -lichenist -lichenivorous -lichenization -lichenize -lichenized -lichenizing -lichen-laden -lichenlike -lichenographer -lichenography -lichenographic -lichenographical -lichenographist -lichenoid -lichenology -lichenologic -lichenological -lichenologist -Lichenopora -Lichenoporidae -lichenose -lichenous -lichens -lichen's -liches -Lichfield -lich-gate -lych-gate -lich-house -lichi -lichis -Lychnic -Lychnis -lychnises -lychnomancy -Lichnophora -Lichnophoridae -lychnoscope -lychnoscopic -lich-owl -Licht -lichted -Lichtenberg -Lichtenfeld -Lichtenstein -Lichter -lichting -lichtly -lichts -lichwake -Licia -Lycia -Lycian -lycid -Lycidae -Lycidas -Licymnius -lycine -Licinian -licit -licitation -licitly -licitness -Lycium -Lick -lick-dish -licked -licker -licker-in -lickerish -lickerishly -lickerishness -lickerous -lickers -lickety -lickety-brindle -lickety-cut -lickety-split -lick-finger -lick-foot -Licking -lickings -Lickingville -lick-ladle -Lyckman -Licko -lickpenny -lick-platter -licks -lick-spigot -lickspit -lickspits -lickspittle -lick-spittle -lickspittling -Lycodes -Lycodidae -lycodoid -Lycomedes -Lycoming -Lycon -lycopene -lycopenes -Lycoperdaceae -lycoperdaceous -Lycoperdales -lycoperdoid -Lycoperdon -Lycopersicon -Lycophron -lycopin -lycopod -lycopode -Lycopodiaceae -lycopodiaceous -Lycopodiales -Lycopodium -lycopods -Lycopsida -Lycopsis -Lycopus -licorice -licorices -lycorine -licorn -licorne -licorous -Lycosa -lycosid -Lycosidae -Lycotherses -licour -lyctid -Lyctidae -lictor -lictorian -lictors -Lyctus -Licuala -Lycurgus -licuri -licury -Lycus -lid -Lida -Lyda -Lidah -LIDAR -lidars -Lidda -Lydda -lidded -lidder -Lidderdale -lidderon -Liddy -Liddiard -Liddie -lidding -lyddite -lyddites -Liddle -Lide -Lydell -lidflower -lidgate -Lydgate -Lidgerwood -Lidia -Lydia -Lydian -lidias -Lidice -lidicker -Lidie -Lydie -lydite -lidless -lidlessly -Lido -lidocaine -Lydon -lidos -lids -lid's -Lidstone -Lie -lye -lie-abed -liebenerite -Liebenthal -lieberkuhn -Lieberman -Liebermann -Liebeslied -Liebfraumilch -liebgeaitor -lie-by -Liebig -liebigite -lie-bys -Liebknecht -lieblich -Liebman -Liebowitz -Liechtenstein -lied -lieder -Liederkranz -Liederman -Liedertafel -lie-down -Lief -liefer -liefest -liefly -liefsome -Liege -liegedom -liegeful -liegefully -liegeless -liegely -liegeman -liege-manship -liegemen -lieger -lieges -liegewoman -liegier -Liegnitz -Lyell -lien -lienable -lienal -Lyencephala -lyencephalous -lienculi -lienculus -lienectomy -lienectomies -lienee -Lienhard -lienholder -lienic -lienitis -lieno- -lienocele -lienogastric -lienointestinal -lienomalacia -lienomedullary -lienomyelogenous -lienopancreatic -lienor -lienorenal -lienotoxin -liens -lien's -lientery -lienteria -lienteric -lienteries -Liepaja -liepot -lieproof -lieprooflier -lieproofliest -lier -lyery -Lyerly -lierne -liernes -lierre -liers -lies -lyes -Liesa -liesh -liespfund -liest -Liestal -Lietman -Lietuva -lieu -lieue -lieus -Lieut -Lieut. -lieutenancy -lieutenancies -lieutenant -lieutenant-colonelcy -lieutenant-general -lieutenant-governorship -lieutenantry -lieutenants -lieutenant's -lieutenantship -lievaart -lieve -liever -lievest -lievrite -Liew -Lif -Lifar -Life -life-abhorring -life-and-death -life-bearing -life-beaten -life-begetting -life-bereft -lifeblood -life-blood -lifebloods -lifeboat -lifeboatman -lifeboatmen -lifeboats -life-breathing -life-bringing -lifebuoy -life-consuming -life-creating -life-crowded -lifeday -life-deserted -life-destroying -life-devouring -life-diffusing -lifedrop -life-ending -life-enriching -life-force -lifeful -lifefully -lifefulness -life-giver -life-giving -lifeguard -life-guard -lifeguards -life-guardsman -lifehold -lifeholder -lifehood -life-hugging -lifey -life-yielding -life-infatuate -life-infusing -life-invigorating -lifeleaf -life-lengthened -lifeless -lifelessly -lifelessness -lifelet -lifelike -life-like -lifelikeness -lifeline -lifelines -lifelong -life-lorn -life-lost -life-maintaining -lifemanship -lifen -life-or-death -life-outfetching -life-penetrated -life-poisoning -life-preserver -life-preserving -life-prolonging -life-quelling -lifer -life-rendering -life-renewing -liferent -liferented -liferenter -liferenting -liferentrix -life-restoring -liferoot -lifers -life-sapping -lifesaver -life-saver -lifesavers -lifesaving -lifesavings -life-serving -life-size -life-sized -lifeskills -lifesome -lifesomely -lifesomeness -lifespan -lifespans -life-spent -lifespring -lifestyle -life-style -lifestyles -life-sustaining -life-sweet -life-teeming -life-thirsting -life-tide -lifetime -life-timer -lifetimes -lifetime's -lifeway -lifeways -lifeward -life-weary -life-weariness -life-while -lifework -lifeworks -life-worthy -Liffey -LIFIA -lyfkie -liflod -LIFO -Lyford -Lifschitz -lift -liftable -liftboy -lifted -lifter -lifters -liftgate -lifting -liftless -liftman -liftmen -liftoff -lift-off -liftoffs -Lifton -lifts -lift-slab -lig -ligable -lygaeid -Lygaeidae -ligament -ligamenta -ligamental -ligamentary -ligamentous -ligamentously -ligaments -ligamentta -ligamentum -ligan -ligand -ligands -ligans -ligas -ligase -ligases -ligate -ligated -ligates -ligating -ligation -ligations -ligative -ligator -ligatory -ligature -ligatured -ligatures -ligaturing -lig-by -lige -ligeance -Ligeia -liger -ligers -Ligeti -Ligetti -Lygeum -liggat -ligge -ligger -Ligget -Liggett -Liggitt -Light -lightable -light-adapted -lightage -light-armed -light-bearded -light-bellied -light-blue -light-bluish -lightboard -lightboat -light-bob -light-bodied -light-borne -light-bounding -lightbrained -light-brained -light-built -lightbulb -lightbulbs -light-causing -light-century -light-charged -light-cheap -light-clad -light-colored -light-complexioned -light-creating -light-diffusing -light-disposed -light-drab -light-draft -lighted -light-embroidered -lighten -lightened -lightener -lighteners -lightening -lightens -lighter -lighterage -lightered -lighterful -lightering -lighterman -lightermen -lighters -lighter's -lighter-than-air -lightest -lightface -lightfaced -light-faced -lightfast -light-fast -lightfastness -lightfingered -light-fingered -light-fingeredness -Lightfoot -light-foot -lightfooted -light-footed -light-footedly -light-footedness -lightful -lightfully -lightfulness -light-gilded -light-giving -light-gray -light-grasp -light-grasping -light-green -light-haired -light-handed -light-handedly -light-handedness -light-harnessed -light-hating -lighthead -lightheaded -light-headed -lightheadedly -light-headedly -lightheadedness -light-headedness -lighthearted -light-hearted -lightheartedly -light-heartedly -lightheartedness -light-heartedness -lightheartednesses -light-heeled -light-horseman -light-horsemen -lighthouse -lighthouseman -lighthouses -lighthouse's -light-hued -lighty -light-year -lightyears -light-years -light-yellow -lighting -lightings -lightish -lightish-blue -lightkeeper -light-leaved -light-legged -lightless -lightlessness -lightly -light-limbed -light-loaded -light-locked -Lightman -lightmans -lightmanship -light-marching -lightmen -light-minded -lightmindedly -light-mindedly -lightmindedness -light-mindedness -lightmouthed -lightness -lightnesses -lightning -lightningbug -lightninged -lightninglike -lightning-like -lightningproof -lightnings -lightning's -light-of-love -light-o'love -light-o'-love -light-pervious -lightplane -light-poised -light-producing -lightproof -light-proof -light-reactive -light-refracting -light-refractive -light-robed -lightroom -light-rooted -light-rootedness -lights -light-scattering -lightscot -light-sensitive -lightship -lightships -light-skinned -light-skirts -lightsman -lightsmen -lightsome -lightsomely -lightsomeness -lights-out -light-spirited -light-spreading -light-struck -light-thoughted -lighttight -light-timbered -light-tongued -light-treaded -light-veined -lightwards -light-waved -lightweight -light-weight -lightweights -light-winged -light-witted -lightwood -lightwort -Ligyda -Ligydidae -ligitimized -ligitimizing -lign- -lignaloes -lign-aloes -lignatile -ligne -ligneous -lignes -lignescent -ligni- -lignicole -lignicoline -lignicolous -ligniferous -lignify -lignification -lignifications -lignified -lignifies -lignifying -ligniform -lignin -lignins -ligninsulphonate -ligniperdous -lignite -lignites -lignitic -lignitiferous -lignitize -lignivorous -ligno- -lignocaine -lignocellulose -lignocellulosic -lignoceric -lignography -lignone -lignose -lignosity -lignosulfonate -lignosulphite -lignosulphonate -lignous -lignum -lignums -Lygodesma -Lygodium -Ligon -Ligonier -Lygosoma -ligroin -ligroine -ligroines -ligroins -ligula -ligulae -ligular -Ligularia -ligulas -ligulate -ligulated -ligulate-flowered -ligule -ligules -liguli- -Liguliflorae -liguliflorous -liguliform -ligulin -liguloid -Liguori -Liguorian -ligure -ligures -Liguria -Ligurian -ligurite -ligurition -ligurrition -lygus -Ligusticum -ligustrin -Ligustrum -Lihyanite -Lihue -liin -lying -lying-in -lying-ins -lyingly -lyings -lyings-in -liyuan -lija -likability -likable -likableness -Likasi -like -likeability -likeable -likeableness -liked -like-eyed -like-fashioned -like-featured -likeful -likehood -Likely -likelier -likeliest -likelihead -likelihood -likelihoods -likeliness -like-looking -like-made -likeminded -like-minded -like-mindedly -likemindedness -like-mindedness -liken -lyken -like-natured -likened -likeness -likenesses -likeness's -likening -likens -Lykens -like-persuaded -liker -likerish -likerous -likers -likes -Lykes -like-sex -like-shaped -like-sized -likesome -likest -likeways -lykewake -lyke-wake -likewalk -likewise -likewisely -likewiseness -likin -liking -likingly -likings -likker -liknon -Likoura -Likud -likuta -Lil -Lila -Lilac -lilac-banded -lilac-blue -lilac-colored -lilaceous -lilac-flowered -lilac-headed -lilacin -lilacky -lilac-mauve -lilac-pink -lilac-purple -lilacs -lilac's -lilacthroat -lilactide -lilac-tinted -lilac-violet -Lilaeopsis -Lilah -Lilas -Lilbourn -Lilburn -Lilburne -lile -Lyle -liles -Lyles -Lilesville -Lili -Lily -Lyly -Lilia -Liliaceae -liliaceous -lilial -Liliales -Lilian -Lilyan -Liliane -Lilias -liliated -Lilibel -Lilybel -Lilibell -Lilibelle -Lilybelle -lily-cheeked -lily-clear -lily-cradled -lily-crowned -Lilydale -lilied -Lilienthal -lilies -lilyfy -lily-fingered -lily-flower -liliform -lilyhanded -Liliiflorae -lilylike -lily-liver -lily-livered -lily-liveredness -lily-paved -lily-pot -lily-robed -lily's -lily-shaped -lily-shining -Lilith -Lilithe -lily-tongued -lily-trotter -Lilium -Liliuokalani -Lilius -Lily-white -lily-whiteness -lilywood -lilywort -lily-wristed -lill -Lilla -Lille -Lilli -Lilly -Lillian -lillianite -Lillibullero -Lillie -lilly-low -Lillington -lilly-pilly -Lilliput -Lilliputian -Lilliputianize -lilliputians -lilliputs -Lillis -Lillith -Lilliwaup -Lillywhite -Lilllie -Lillo -Lilo -Lilongwe -lilt -lilted -lilty -lilting -liltingly -liltingness -lilts -LIM -lym -Lima -limace -Limacea -limacel -limacelle -limaceous -Limacidae -limaciform -Limacina -limacine -limacines -limacinid -Limacinidae -limacoid -limacon -limacons -limail -limaille -Liman -Lyman -Limann -Lymann -limans -Lymantria -lymantriid -Lymantriidae -limas -Limassol -limation -Limaville -Limawood -Limax -limb -limba -limbal -limbas -limbat -limbate -limbation -limbec -limbeck -limbecks -limbed -Limber -limbered -limberer -limberest -limberham -limbering -limberly -limberneck -limber-neck -limberness -limbers -Limbert -limbi -limby -limbic -limbie -limbier -limbiest -limbiferous -limbing -limbless -limbmeal -limb-meal -limbo -limboinfantum -limbos -Limbourg -limbous -limbs -Limbu -Limburg -Limburger -limburgite -limbus -limbuses -lime -Lyme -limeade -limeades -Limean -lime-ash -limeberry -limeberries -lime-boiled -lime-burner -limebush -limed -lyme-grass -lyme-hound -Limehouse -limey -limeys -lime-juicer -limekiln -lime-kiln -limekilns -limeless -limelight -limelighter -limelights -limelike -limeman -Limemann -limen -Limenia -limens -lime-pit -Limeport -limequat -limer -Limerick -limericks -lime-rod -limes -lime's -limestone -limestones -limesulfur -limesulphur -lime-sulphur -limetta -limettin -lime-twig -limewash -limewater -lime-water -lime-white -limewood -limewort -lymhpangiophlebitis -limy -Limicolae -limicoline -limicolous -Limidae -limier -limiest -limina -liminal -liminary -limine -liminess -liminesses -liming -Limington -Lymington -limit -limitability -limitable -limitableness -limitably -limital -limitanean -limitary -limitarian -limitaries -limitate -limitation -limitational -limitations -limitation's -limitative -limitatively -limited -limitedly -limitedness -limiteds -limiter -limiters -limites -limity -limiting -limitive -limitless -limitlessly -limitlessness -limitor -limitrophe -limits -limit-setting -limivorous -limli -LIMM -limma -Limmasol -limmata -limmer -limmers -limmock -L'Immoraliste -limmu -limn -Lymn -Limnaea -Lymnaea -lymnaean -lymnaeid -Lymnaeidae -limnal -limnanth -Limnanthaceae -limnanthaceous -Limnanthemum -Limnanthes -limned -limner -limnery -limners -limnetic -Limnetis -limniad -limnic -limnimeter -limnimetric -limning -limnite -limnobiology -limnobiologic -limnobiological -limnobiologically -limnobios -Limnobium -Limnocnida -limnograph -limnology -limnologic -limnological -limnologically -limnologist -limnometer -limnophil -limnophile -limnophilid -Limnophilidae -limnophilous -limnophobia -limnoplankton -Limnorchis -Limnoria -Limnoriidae -limnorioid -limns -limo -Limodorum -Limoges -limoid -Limoli -Limon -limoncillo -limoncito -limonene -limonenes -limoniad -limonin -limonite -limonites -limonitic -limonitization -limonium -limos -Limosa -limose -Limosella -Limosi -limous -Limousin -limousine -limousine-landaulet -limousines -limp -limpa -limpas -limped -limper -limpers -limpest -limpet -limpets -lymph -lymph- -lymphad -lymphadenectasia -lymphadenectasis -lymphadenia -lymphadenitis -lymphadenoid -lymphadenoma -lymphadenomas -lymphadenomata -lymphadenome -lymphadenopathy -lymphadenosis -lymphaemia -lymphagogue -lymphangeitis -lymphangial -lymphangiectasis -lymphangiectatic -lymphangiectodes -lymphangiitis -lymphangioendothelioma -lymphangiofibroma -lymphangiology -lymphangioma -lymphangiomas -lymphangiomata -lymphangiomatous -lymphangioplasty -lymphangiosarcoma -lymphangiotomy -lymphangitic -lymphangitides -lymphangitis -lymphatic -lymphatical -lymphatically -lymphation -lymphatism -lymphatitis -lymphatolysin -lymphatolysis -lymphatolytic -limphault -lymphectasia -lymphedema -lymphemia -lymphenteritis -lymphy -lympho- -lymphoadenoma -lympho-adenoma -lymphoblast -lymphoblastic -lymphoblastoma -lymphoblastosis -lymphocele -lymphocyst -lymphocystosis -lymphocyte -lymphocytes -lymphocythemia -lymphocytic -lymphocytoma -lymphocytomatosis -lymphocytopenia -lymphocytosis -lymphocytotic -lymphocytotoxin -lymphodermia -lymphoduct -lymphoedema -lymphogenic -lymphogenous -lymphoglandula -lymphogranuloma -lymphogranulomas -lymphogranulomata -lymphogranulomatosis -lymphogranulomatous -lymphography -lymphographic -lymphoid -lymphoidectomy -lymphoidocyte -lymphology -lymphoma -lymphomas -lymphomata -lymphomatoid -lymphomatosis -lymphomatous -lymphomyxoma -lymphomonocyte -lymphopathy -lymphopenia -lymphopenial -lymphopoieses -lymphopoiesis -lymphopoietic -lymphoprotease -lymphorrhage -lymphorrhagia -lymphorrhagic -lymphorrhea -lymphosarcoma -lymphosarcomas -lymphosarcomatosis -lymphosarcomatous -lymphosporidiosis -lymphostasis -lymphotaxis -lymphotome -lymphotomy -lymphotoxemia -lymphotoxin -lymphotrophy -lymphotrophic -lymphous -lymphs -lymphuria -lymph-vascular -limpy -limpid -limpidity -limpidly -limpidness -limpily -limpin -limpiness -limping -limpingly -limpingness -limpish -limpkin -limpkins -limply -limpness -limpnesses -Limpopo -limps -limpsey -limpsy -limpsier -limpwort -limsy -limu -limu-eleele -limu-kohu -limuli -limulid -Limulidae -limuloid -Limuloidea -limuloids -Limulus -limurite -Lin -Lyn -lin. -Lina -linable -linac -Linaceae -linaceous -Linacre -linacs -linaga -linage -linages -linalyl -linaloa -linaloe -linalol -linalols -linalool -linalools -linamarin -Linanthus -Linares -Linaria -linarite -Linasec -Lynbrook -LINC -lyncean -Lynceus -Linch -Lynch -lynchable -linchbolt -Lynchburg -lynched -lyncher -lynchers -lynches -linchet -lynchet -lynching -lynchings -linchpin -linch-pin -lynchpin -linchpinned -linchpins -Lyncid -lyncine -Lyncis -lincloth -Lynco -Lincoln -Lincolndale -Lincolnesque -Lincolnian -Lincolniana -Lincolnlike -Lincolnshire -Lincolnton -Lincolnville -lincomycin -Lincroft -lincrusta -Lincs -lincture -linctus -Lind -Lynd -Linda -Lynda -lindabrides -lindackerite -Lindahl -Lindale -lindane -lindanes -Lindberg -Lindbergh -Lindblad -Lindbom -Lynde -Lindeberg -Lyndeborough -Lyndel -Lindell -Lyndell -Lindemann -Linden -Lynden -Lindenau -Lindenhurst -lindens -Lindenwold -Lindenwood -Linder -Lindera -Linders -Lyndes -Lindesnes -Lindgren -Lindholm -Lyndhurst -Lindi -Lindy -Lyndy -Lindybeth -Lindie -lindied -lindies -lindying -Lindylou -Lindisfarne -Lindley -Lindleyan -Lindly -Lindner -Lindo -lindoite -Lindon -Lyndon -Lyndonville -Lyndora -Lindquist -Lindrith -Lindsay -Lyndsay -Lindsborg -Lindsey -Lyndsey -Lindseyville -Lindsy -Lindside -Lyndsie -Lindsley -Lindstrom -Lindwall -lindworm -Line -Linea -Lynea -lineable -lineage -lineaged -lineages -lineal -lineality -lineally -lineament -lineamental -lineamentation -lineaments -lineameter -linear -linear-acute -linear-attenuate -linear-awled -linear-elliptical -linear-elongate -linear-ensate -linear-filiform -lineary -linearifolius -linearisation -linearise -linearised -linearising -linearity -linearities -linearizable -linearization -linearize -linearized -linearizes -linearizing -linear-lanceolate -linear-leaved -linearly -linear-ligulate -linear-oblong -linear-obovate -linear-setaceous -linear-shaped -linear-subulate -lineas -lineate -lineated -lineation -lineatum -lineature -linebacker -linebackers -linebacking -linebred -line-bred -linebreed -line-breed -linebreeding -line-bucker -linecaster -linecasting -line-casting -linecut -linecuts -lined -line-engraving -linefeed -linefeeds -line-firing -Linehan -line-haul -line-hunting -liney -lineiform -lineless -linelet -linelike -Linell -Lynelle -lineman -linemen -linen -Lynen -linen-armourer -linendrapers -Linene -linener -linenette -linenfold -lineny -linenize -linenizer -linenman -linens -linen's -linenumber -linenumbers -lineocircular -lineograph -lineolate -lineolated -line-out -lineprinter -liner -linerange -linerless -liners -lines -line's -line-sequential -linesides -linesman -linesmen -Linesville -Linet -linetest -Lynett -Linetta -Linette -Lynette -lineup -line-up -lineups -Lineville -linewalker -linework -ling -ling. -linga -Lingayat -Lingayata -lingala -lingam -lingams -lingas -lingberry -lingberries -Lyngbyaceae -Lyngbyeae -lingbird -lingcod -lingcods -linge -lingel -lingenberry -lingence -linger -lingered -lingerer -lingerers -lingerie -lingeries -lingering -lingeringly -lingers -linget -lingy -Lyngi -lingier -lingiest -lingism -Lingle -Lingleville -lingo -lingoe -lingoes -lingonberry -lingonberries -lingot -Lingoum -lings -lingster -lingtow -lingtowman -lingu- -lingua -linguacious -linguaciousness -linguadental -linguae -linguaeform -lingual -linguale -lingualis -linguality -lingualize -lingually -linguals -Lingualumina -linguanasal -Linguata -Linguatula -Linguatulida -Linguatulina -linguatuline -linguatuloid -linguet -linguidental -linguiform -linguine -linguines -linguini -linguinis -linguipotence -linguished -linguist -linguister -linguistic -linguistical -linguistically -linguistician -linguistics -linguistry -linguists -linguist's -lingula -lingulae -lingulate -lingulated -Lingulella -lingulid -Lingulidae -linguliferous -linguliform -linguloid -linguo- -linguodental -linguodistal -linguogingival -linguopalatal -linguopapillitis -linguoversion -Lingwood -lingwort -linha -linhay -liny -linie -linier -liniest -liniya -liniment -liniments -linin -lininess -lining -lining-out -linings -lining-up -linins -Linyphia -linyphiid -Linyphiidae -Linis -linitis -Linyu -linja -linje -Link -linkable -linkage -linkages -linkage's -linkboy -link-boy -linkboys -linked -linkedit -linkedited -linkediting -linkeditor -linkeditted -linkeditting -linkedness -Linker -linkers -linky -linkier -linkiest -linking -linkman -linkmen -Linkoping -Linkoski -Linkping -links -linksman -linksmen -linksmith -linkster -linkup -link-up -linkups -Linkwood -linkwork -linkworks -lin-lan-lone -linley -Linlithgow -Linn -Lynn -Lynna -Linnaea -Linnaean -Linnaeanism -linnaeite -Linnaeus -Lynndyl -Linne -Lynne -Linnea -Lynnea -Linnean -Linnell -Lynnell -Lynnelle -Linneman -linneon -Linnet -Lynnet -Linnete -linnets -Lynnett -Linnette -Lynnette -Linneus -Lynnfield -lynnhaven -Linnhe -Linnie -linns -Lynnville -Lynnwood -Lynnworth -lino -linocut -linocuts -Linoel -Linofilm -linolate -linoleate -linoleic -linolein -linolenate -linolenic -linolenin -linoleum -linoleums -linolic -linolin -linometer -linon -linonophobia -Linopteris -Linos -Linotype -Linotyped -Linotyper -linotypes -Linotyping -linotypist -lino-typist -linous -linoxin -linoxyn -linpin -linquish -Lins -Lyns -Linsang -linsangs -linseed -linseeds -linsey -Lynsey -linseys -linsey-woolsey -linsey-woolseys -Linsk -Linskey -Linson -linstock -linstocks -lint -lintel -linteled -linteling -lintelled -lintelling -lintels -linten -linter -lintern -linters -linty -lintie -lintier -lintiest -lintless -lintol -lintols -Linton -lintonite -lints -lintseed -lintwhite -lint-white -Linum -linums -linuron -linurons -Linus -Lynus -Linville -Linwood -Lynwood -Lynx -lynx-eyed -lynxes -lynxlike -lynx's -Linz -Linzer -Linzy -lyo- -lyocratic -Liod -liodermia -lyolysis -lyolytic -Lyomeri -lyomerous -liomyofibroma -liomyoma -Lion -Lyon -Lyonais -lion-bold -lionced -lioncel -lion-color -lion-drunk -Lionel -Lionello -Lyonese -lionesque -lioness -lionesses -lioness's -lionet -Lyonetia -lyonetiid -Lyonetiidae -lionfish -lionfishes -lion-footed -lion-guarded -lion-haunted -lion-headed -lionheart -lion-heart -lionhearted -lion-hearted -lionheartedly -lionheartedness -lion-hided -lionhood -lion-hued -lionisation -lionise -lionised -lioniser -lionisers -lionises -lionising -lionism -lionizable -lionization -lionizations -lionize -lionized -lionizer -lionizers -lionizes -lionizing -lionly -lionlike -lion-like -lion-maned -lion-mettled -Lyonnais -lyonnaise -lionne -Lyonnesse -lionproof -Lions -lion's -Lyons -lionship -lion-tailed -lion-tawny -lion-thoughted -Lyontine -lion-toothed -lyophil -lyophile -lyophiled -lyophilic -lyophilization -lyophilize -lyophilized -lyophilizer -lyophilizing -lyophobe -lyophobic -Lyopoma -Lyopomata -lyopomatous -Liothrix -Liotrichi -Liotrichidae -liotrichine -lyotrope -lyotropic -Liou -Liouville -lip -lip- -lipa -lipacidemia -lipaciduria -lipaemia -lipaemic -Lipan -Liparian -liparid -Liparidae -Liparididae -Liparis -liparite -liparocele -liparoid -liparomphalus -liparous -lipase -lipases -lip-back -lip-bearded -lip-blushing -lip-born -Lipchitz -Lipcombe -lip-deep -lipectomy -lipectomies -lypemania -lipemia -lipemic -Lyperosia -Lipetsk -Lipeurus -Lipfert -lip-good -lipic -lipid -lipide -lipides -lipidic -lipids -lipin -lipins -Lipinski -Lipizzaner -Lipkin -lip-labour -lip-learned -lipless -liplet -lip-licking -liplike -Lipman -Lipmann -lipo- -lipoblast -lipoblastoma -Lipobranchia -lipocaic -lipocardiac -lipocele -lipoceratous -lipocere -lipochondroma -lipochrome -lipochromic -lipochromogen -lipocyte -lipocytes -lipoclasis -lipoclastic -lipodystrophy -lipodystrophia -lipoferous -lipofibroma -lipogenesis -lipogenetic -lipogenic -lipogenous -lipogram -lipogrammatic -lipogrammatism -lipogrammatist -lipography -lipographic -lipohemia -lipoid -lipoidaemia -lipoidal -lipoidemia -lipoidic -lipoids -lipolyses -lipolysis -lipolitic -lipolytic -lipoma -lipomas -lipomata -lipomatosis -lipomatous -lipometabolic -lipometabolism -lipomyoma -lipomyxoma -lipomorph -Liponis -lipopectic -lip-open -lipopexia -lipophagic -lipophilic -lipophore -lipopod -Lipopoda -lipopolysaccharide -lipoprotein -liposarcoma -liposis -liposoluble -liposome -lipostomy -lipothymy -lipothymia -lypothymia -lipothymial -lipothymic -lipotype -Lipotyphla -lipotrophy -lipotrophic -lipotropy -lipotropic -lipotropin -lipotropism -lipovaccine -lipoxeny -lipoxenous -lipoxidase -Lipp -Lippe -lipped -lippen -lippened -lippening -lippens -lipper -lippered -lippering -lipperings -lippers -Lippershey -Lippi -lippy -Lippia -lippie -lippier -lippiest -Lippincott -lippiness -lipping -lippings -lippitude -lippitudo -Lippizaner -Lippizzana -Lippmann -Lippold -Lipps -lipread -lip-read -lipreading -lip-reading -lipreadings -lip-red -lip-round -lip-rounding -LIPS -lip's -lipsalve -lipsanographer -lipsanotheca -Lipschitz -Lipscomb -lipse -Lipsey -Lipski -lip-smacking -Lipson -lip-spreading -lipstick -lipsticks -Liptauer -lip-teeth -Lipton -lipuria -lipwork -liq -liq. -liquable -liquamen -liquate -liquated -liquates -liquating -liquation -liquefacient -liquefaction -liquefactions -liquefactive -liquefy -liquefiability -liquefiable -liquefied -liquefier -liquefiers -liquefies -liquefying -liquer -liquesce -liquescence -liquescency -liquescent -liquet -liqueur -liqueured -liqueuring -liqueurs -liquid -liquidable -Liquidambar -liquidamber -liquidate -liquidated -liquidates -liquidating -liquidation -liquidations -liquidation's -liquidator -liquidators -liquidatorship -liquidy -liquidise -liquidised -liquidising -liquidity -liquidities -liquidization -liquidize -liquidized -liquidizer -liquidizes -liquidizing -liquidless -liquidly -liquidness -liquidogenic -liquidogenous -liquids -liquid's -liquidus -liquify -liquified -liquifier -liquifiers -liquifies -liquifying -liquiform -liquor -liquor-drinking -liquored -liquorer -liquory -liquorice -liquoring -liquorish -liquorishly -liquorishness -liquorist -liquorless -liquor-loving -liquors -liquor's -Lir -Lira -Lyra -Lyrae -Lyraid -liras -lirate -lyrate -lyrated -lyrately -lyrate-lobed -liration -lyraway -lire -lyre -lyrebird -lyrebirds -lyreflower -lyre-guitar -lyre-leaved -lirella -lirellate -lirelliform -lirelline -lirellous -lyreman -lyres -lyre-shaped -lyretail -lyre-tailed -lyric -lyrical -lyrically -lyricalness -lyrichord -lyricisation -lyricise -lyricised -lyricises -lyricising -lyricism -lyricisms -lyricist -lyricists -lyricization -lyricize -lyricized -lyricizes -lyricizing -lyricked -lyricking -lyrico-dramatic -lyrico-epic -lyrics -lyric-writing -Lyrid -lyriform -lirioddra -liriodendra -Liriodendron -liriodendrons -liripipe -liripipes -liripoop -Liris -Lyris -lyrism -lyrisms -lyrist -lyrists -liroconite -lirot -liroth -Lyrurus -Lyrus -lis -Lys -lys- -LISA -Lisabet -Lisabeth -Lisan -Lysander -Lisandra -Lysandra -Li-sao -lysate -lysates -Lisbeth -Lisboa -Lisbon -Lisco -Liscomb -Lise -lyse -lysed -Liselotte -Lysenko -Lysenkoism -lisente -lisere -lysergic -lyses -Lisetta -Lisette -lish -Lisha -Lishe -Lysias -lysidin -lysidine -lisiere -Lisieux -lysigenic -lysigenous -lysigenously -Lysiloma -Lysimachia -Lysimachus -lysimeter -lysimetric -lysin -lysine -lysines -lysing -lysins -Lysippe -Lysippus -lysis -Lysistrata -Lysite -Lisk -Lisle -lisles -Lisman -Lismore -lyso- -lysogen -lysogenesis -lysogenetic -lysogeny -lysogenic -lysogenicity -lysogenies -lysogenization -lysogenize -lysogens -Lysol -lysolecithin -lysosomal -lysosomally -lysosome -lysosomes -lysozyme -lysozymes -LISP -lisped -lisper -lispers -lisping -lispingly -lispound -lisps -lisp's -lispund -Liss -Lissa -Lyssa -Lissajous -Lissak -Lissamphibia -lissamphibian -lyssas -Lissencephala -lissencephalic -lissencephalous -lisses -Lissi -Lissy -lyssic -Lissie -Lissner -Lissoflagellata -lissoflagellate -lissom -lissome -lissomely -lissomeness -lissomly -lissomness -lyssophobia -lissotrichan -Lissotriches -lissotrichy -lissotrichous -LIST -listable -listed -listedness -listel -listels -listen -listenable -listened -listener -listener-in -listeners -listenership -listening -listenings -listens -Lister -Listera -listerelloses -listerellosis -Listeria -Listerian -listeriases -listeriasis -Listerine -listerioses -listeriosis -Listerise -Listerised -Listerising -Listerism -Listerize -Listerized -Listerizing -listers -listful -listy -Listie -listing -listings -listing's -listless -listlessly -listlessness -listlessnesses -listred -lists -listwork -Lisuarte -Liszt -Lisztian -Lit -lit. -Lita -Litae -litai -litaneutical -litany -litanies -litanywise -litarge -litas -litation -litatu -LitB -Litch -Litchfield -litchi -litchis -Litchville -LitD -lite -lyte -liter -literacy -literacies -literaehumaniores -literaily -literal -literalisation -literalise -literalised -literaliser -literalising -literalism -literalist -literalistic -literalistically -literality -literalities -literalization -literalize -literalized -literalizer -literalizing -literally -literalminded -literal-minded -literalmindedness -literalness -literals -literary -literarian -literaryism -literarily -literariness -literata -literate -literated -literately -literateness -literates -literati -literatim -literation -literatist -literato -literator -literatos -literature -literatured -literatures -literature's -literatus -Literberry -lyterian -literose -literosity -liters -lites -lith -lith- -Lith. -Litha -lithaemia -lithaemic -lithagogue -lithangiuria -lithanode -lithanthrax -litharge -litharges -lithate -lithatic -lithe -lythe -Lithea -lithectasy -lithectomy -lithely -lithemia -lithemias -lithemic -litheness -lither -litherly -litherness -lithesome -lithesomeness -lithest -lithi -lithy -Lithia -lithias -lithiasis -lithiastic -lithiate -lithic -lithically -lithifaction -lithify -lithification -lithified -lithifying -lithiophilite -lithite -lithium -lithiums -lithless -litho -litho- -litho. -lithobiid -Lithobiidae -lithobioid -Lithobius -Lithocarpus -lithocenosis -lithochemistry -lithochromatic -lithochromatics -lithochromatography -lithochromatographic -lithochromy -lithochromic -lithochromography -lithocyst -lithocystotomy -lithoclase -lithoclast -lithoclasty -lithoclastic -lithoculture -Lithodes -lithodesma -lithodialysis -lithodid -Lithodidae -lithodomous -Lithodomus -lithoed -lithofellic -lithofellinic -lithofracteur -lithofractor -lithog -lithogenesy -lithogenesis -lithogenetic -lithogeny -lithogenous -lithoglyph -lithoglypher -lithoglyphic -lithoglyptic -lithoglyptics -lithograph -lithographed -lithographer -lithographers -lithography -lithographic -lithographical -lithographically -lithographies -lithographing -lithographize -lithographs -lithogravure -lithoid -lithoidal -lithoidite -lithoing -lithol -lithol. -litholabe -litholapaxy -litholatry -litholatrous -litholysis -litholyte -litholytic -lithology -lithologic -lithological -lithologically -lithologist -lithomancy -lithomarge -lithometeor -lithometer -lithonephria -lithonephritis -lithonephrotomy -lithonephrotomies -Lithonia -lithontriptic -lithontriptist -lithontriptor -lithopaedion -lithopaedium -lithopedion -lithopedium -lithophagous -lithophane -lithophany -lithophanic -lithophyl -lithophile -lithophyll -lithophyllous -lithophilous -lithophysa -lithophysae -lithophysal -lithophyte -lithophytic -lithophytous -lithophone -lithophotography -lithophotogravure -lithophthisis -Lithopolis -lithopone -lithoprint -lithoprinter -lithos -lithoscope -lithosere -lithosian -lithosiid -Lithosiidae -Lithosiinae -lithosis -lithosol -lithosols -lithosperm -lithospermon -lithospermous -Lithospermum -lithosphere -lithospheric -lithotint -lithotype -lithotyped -lithotypy -lithotypic -lithotyping -lithotome -lithotomy -lithotomic -lithotomical -lithotomies -lithotomist -lithotomize -lithotomous -lithotony -lithotresis -lithotripsy -lithotriptor -lithotrite -lithotrity -lithotritic -lithotrities -lithotritist -lithotritor -lithous -lithoxyl -lithoxyle -lithoxylite -Lythraceae -lythraceous -Lythrum -lithsman -Lithuania -Lithuanian -lithuanians -Lithuanic -lithuresis -lithuria -liti -lytic -lytically -liticontestation -Lityerses -litigable -litigant -litigants -litigate -litigated -litigates -litigating -litigation -litigationist -litigations -litigator -litigatory -litigators -litigiosity -litigious -litigiously -litigiousness -litigiousnesses -Litiopa -litiscontest -litiscontestation -litiscontestational -Lititz -Lytle -Litman -litmus -litmuses -Litopterna -litoral -Litorina -Litorinidae -litorinoid -litotes -litotic -litra -litre -litres -lits -Litsea -litster -Litt -Litta -lytta -lyttae -lyttas -LittB -Littcarr -LittD -Littell -litten -Lytten -litter -litterateur -litterateurs -litteratim -litterbag -litter-bearer -litterbug -litterbugs -littered -litterer -litterers -littery -littering -littermate -littermates -litters -Little -little-able -little-by-little -little-bitsy -little-bitty -little-boukit -little-branched -little-ease -Little-endian -Littlefield -little-footed -little-girlish -little-girlishness -little-go -Little-good -little-haired -little-headed -Littlejohn -little-known -littleleaf -little-loved -little-minded -little-mindedness -littleneck -littlenecks -littleness -littlenesses -Littleport -little-prized -littler -little-read -little-regarded -littles -littlest -little-statured -Littlestown -Littleton -little-trained -little-traveled -little-used -littlewale -little-worth -littlin -littling -littlish -LittM -Littman -Litton -Lytton -littoral -littorals -Littorella -Littoria -littrateur -Littre -littress -Littrow -litu -lituate -litui -lituiform -lituite -Lituites -Lituitidae -lituitoid -Lituola -lituoline -lituoloid -liturate -liturgy -liturgic -liturgical -liturgically -liturgician -liturgics -liturgies -liturgiology -liturgiological -liturgiologist -liturgism -liturgist -liturgistic -liturgistical -liturgists -liturgize -litus -lituus -Litvak -Litvinov -litz -LIU -Lyubertsy -Lyublin -Lyudmila -Liuka -Liukiu -Liv -Liva -livability -livabilities -livable -livableness -livably -Livarot -live -liveability -liveable -liveableness -livebearer -live-bearer -live-bearing -liveborn -live-box -lived -lived-in -livedo -live-ever -live-forever -liveyer -live-in-idleness -Lively -livelier -liveliest -livelihead -livelihood -livelihoods -livelily -liveliness -livelinesses -livelong -liven -livened -livener -liveners -liveness -livenesses -livening -livens -Livenza -live-oak -liver -liverance -liverberry -liverberries -liver-brown -liver-colored -livered -liverhearted -liverheartedness -liver-hued -livery -liverydom -liveried -liveries -liveryless -liveryman -livery-man -liverymen -livering -liverish -liverishness -livery-stable -liverleaf -liverleaves -liverless -Livermore -liver-moss -Liverpool -Liverpudlian -liver-rot -livers -liver-white -liverwort -liverworts -liverwurst -liverwursts -lives -Livesay -live-sawed -livest -livestock -livestocks -liveth -livetin -livetrap -livetrapped -livetrapping -livetraps -liveware -liveweight -Livi -Livy -Livia -Livian -livid -livid-brown -lividity -lividities -lividly -lividness -livier -livyer -liviers -livyers -living -livingless -livingly -livingness -livings -Livingston -Livingstone -livingstoneite -Livish -livishly -Livistona -livlihood -Livonia -Livonian -livor -Livorno -livraison -livre -livres -Livvi -Livvy -Livvie -Livvyy -liwan -lixive -lixivia -lixivial -lixiviate -lixiviated -lixiviating -lixiviation -lixiviator -lixivious -lixivium -lixiviums -lyxose -Liz -Liza -Lizabeth -Lizard -lizardfish -lizardfishes -lizardlike -lizards -lizard's -lizards-tail -lizard's-tail -lizardtail -lizary -Lizbeth -lyze -Lizella -Lizemores -Lizette -Lizton -Lizzy -Lizzie -LJ -LJBF -Ljod -Ljoka -Ljubljana -Ljutomer -LL -'ll -ll. -LL.B. -LL.D. -LL.M. -LLAMA -llamas -Llanberisslate -Llandaff -Llandeilo -Llandovery -Llandudno -Llanelli -Llanelly -llanero -Llanfairpwllgwyngyll -Llangollen -Llano -llanos -llareta -llautu -LLB -LLC -LLD -Lleburgaz -ller -Lleu -Llew -Llewelyn -Llewellyn -llyn -L-line -Llyr -Llywellyn -LLM -LLN -LLNL -LLO -LLoyd -lloyd's -Llovera -LLOX -LLP -Llud -Lludd -LM -lm/ft -lm/m -lm/W -Lman -LMC -LME -LMF -lm-hr -LMMS -LMOS -LMT -ln -LN2 -lndg -Lneburg -LNG -l-noradrenaline -l-norepinephrine -Lnos -lnr -LO -LOA -loach -Loachapoka -loaches -load -loadable -loadage -loaded -loadedness -loaden -loader -loaders -loadinfo -loading -loadings -loadless -loadpenny -loads -loadsome -loadspecs -loadstar -loadstars -loadstone -loadstones -loadum -load-water-line -loaf -loafed -loafer -loaferdom -loaferish -Loafers -loafing -loafingly -Loafishness -loaflet -loafs -loaf-sugar -loaghtan -loaiasis -loam -loamed -Loami -loamy -loamier -loamiest -loamily -loaminess -loaming -loamless -Loammi -loams -loan -loanable -loanblend -Loanda -loaned -loaner -loaners -loange -loanin -loaning -loanings -loanmonger -loan-office -loans -loanshark -loan-shark -loansharking -loan-sharking -loanshift -loanword -loanwords -Loar -Loasa -Loasaceae -loasaceous -loath -loathe -loathed -loather -loathers -loathes -loathful -loathfully -loathfulness -loathy -loathing -loathingly -loathings -loathly -loathliness -loathness -loathsome -loathsomely -loathsomeness -Loats -Loatuko -loave -loaves -LOB -lob- -Lobachevsky -Lobachevskian -lobal -Lobale -lobar -Lobaria -Lobata -Lobatae -lobate -lobated -lobately -lobation -lobations -lobato- -lobato-digitate -lobato-divided -lobato-foliaceous -lobato-partite -lobato-ramulose -lobbed -Lobber -lobbers -lobby -lobbied -lobbyer -lobbyers -lobbies -lobbygow -lobbygows -lobbying -lobbyism -lobbyisms -lobbyist -lobbyists -lobbyman -lobbymen -lobbing -lobbish -lobcock -lobcokt -lobe -Lobeco -lobectomy -lobectomies -lobed -lobed-leaved -lobefin -lobefins -lobefoot -lobefooted -lobefoots -Lobel -lobeless -lobelet -Lobelia -Lobeliaceae -lobeliaceous -lobelias -lobelin -lobeline -lobelines -Lobell -lobellated -Lobelville -Lobengula -lobes -lobe's -lobfig -lobi -lobiform -lobigerous -lobing -lobiped -Lobito -loblolly -loblollies -lobo -lobola -lobolo -lobolos -lobopodium -lobos -Lobosa -lobose -lobotomy -lobotomies -lobotomize -lobotomized -lobotomizing -lobs -lobscourse -lobscouse -lobscouser -lobsided -lobster -lobster-horns -lobstering -lobsterish -lobsterlike -lobsterman -lobsterproof -lobster-red -lobsters -lobster's -lobsters-claw -lobster-tail -lobster-tailed -lobstick -lobsticks -lobtail -lobular -Lobularia -lobularly -lobulate -lobulated -lobulation -lobule -lobules -lobulette -lobuli -lobulose -lobulous -lobulus -lobus -lobworm -lob-worm -lobworms -LOC -loca -locable -local -locale -localed -locales -localing -localisable -localisation -localise -localised -localiser -localises -localising -localism -localisms -localist -localistic -localists -localite -localites -locality -localities -locality's -localizable -localization -localizations -localize -localized -localizer -localizes -localizing -localled -locally -localling -localness -locals -locanda -LOCAP -Locarnist -Locarnite -Locarnize -Locarno -locatable -locate -located -locater -locaters -locates -locating -locatio -location -locational -locationally -locations -locative -locatives -locator -locators -locator's -locatum -locellate -locellus -Loch -lochaber -lochage -lochagus -lochan -loche -lochetic -Lochgelly -lochi -lochy -Lochia -lochial -Lochinvar -lochiocyte -lochiocolpos -lochiometra -lochiometritis -lochiopyra -lochiorrhagia -lochiorrhea -lochioschesis -Lochlin -Lochloosa -Lochmere -Lochner -lochometritis -lochoperitonitis -lochopyra -lochs -lochus -loci -lociation -lock -lockable -lock-a-daisy -lockage -lockages -Lockatong -Lockbourne -lockbox -lockboxes -Locke -Lockean -Lockeanism -locked -Lockeford -locker -Lockerbie -lockerman -lockermen -lockers -Lockesburg -locket -lockets -Lockett -lockfast -lockful -lock-grained -Lockhart -Lockheed -lockhole -Locky -Lockian -Lockianism -Lockie -Lockyer -locking -lockings -lockjaw -lock-jaw -lockjaws -Lockland -lockless -locklet -Locklin -lockmaker -lockmaking -lockman -Lockney -locknut -locknuts -lockout -lock-out -lockouts -lockout's -lockpin -Lockport -lockram -lockrams -lockrum -locks -locksman -locksmith -locksmithery -locksmithing -locksmiths -lockspit -lockstep -locksteps -lockstitch -lockup -lock-up -lockups -lockup's -Lockwood -lockwork -locn -Loco -locodescriptive -loco-descriptive -locoed -locoes -Locofoco -loco-foco -Locofocoism -locofocos -locoing -locoism -locoisms -locoman -locomobile -locomobility -locomote -locomoted -locomotes -locomotility -locomoting -locomotion -locomotions -locomotive -locomotively -locomotiveman -locomotivemen -locomotiveness -locomotives -locomotive's -locomotivity -locomotor -locomotory -locomutation -locos -locoweed -locoweeds -Locrian -Locrine -Locris -Locrus -loculament -loculamentose -loculamentous -locular -loculate -loculated -loculation -locule -loculed -locules -loculi -loculicidal -loculicidally -loculose -loculous -loculus -locum -locums -locum-tenency -locuplete -locupletely -locus -locusca -locust -locusta -locustae -locustal -locustberry -Locustdale -locustelle -locustid -Locustidae -locusting -locustlike -locusts -locust's -locust-tree -Locustville -locution -locutionary -locutions -locutor -locutory -locutoria -locutories -locutorium -locutorship -locuttoria -Lod -Loda -Loddigesia -lode -lodeman -lodemanage -loden -lodens -lodes -lodesman -lodesmen -lodestar -lodestars -lodestone -lodestuff -Lodge -lodgeable -lodged -lodgeful -Lodgegrass -lodgeman -lodgement -lodgements -lodgepole -lodger -lodgerdom -lodgers -lodges -lodging -lodginghouse -lodgings -lodgment -lodgments -Lodha -Lodhia -Lodi -Lody -lodicula -lodicule -lodicules -Lodie -Lodmilla -Lodoicea -Lodovico -Lodowic -Lodowick -Lodur -Lodz -LOE -Loeb -loed -Loeffler -Loegria -loeil -l'oeil -loeing -Loella -loellingite -Loesceke -loess -loessal -loesses -loessial -loessic -loessland -loessoid -Loewe -Loewi -Loewy -LOF -Loferski -Loffler -Lofn -lofstelle -LOFT -loft-dried -lofted -lofter -lofters -Lofti -lofty -lofty-browed -loftier -loftiest -lofty-headed -lofty-humored -loftily -lofty-looking -lofty-minded -loftiness -loftinesses -Lofting -lofty-notioned -lofty-peaked -lofty-plumed -lofty-roofed -Loftis -lofty-sounding -loftless -loftman -loftmen -lofts -loft's -loftsman -loftsmen -Loftus -log -log- -Logan -loganberry -loganberries -Logandale -Logania -Loganiaceae -loganiaceous -loganin -logans -Logansport -logan-stone -Loganton -Loganville -logaoedic -logarithm -logarithmal -logarithmetic -logarithmetical -logarithmetically -logarithmic -logarithmical -logarithmically -logarithmomancy -logarithms -logarithm's -logbook -log-book -logbooks -logchip -logcock -loge -logeia -logeion -loger -loges -logeum -loggat -loggats -logged -logger -loggerhead -loggerheaded -loggerheads -loggers -logger's -logget -loggets -loggy -Loggia -loggias -loggie -loggier -loggiest -loggin -logginess -logging -loggings -Loggins -loggish -loghead -logheaded -Logi -logy -logia -logian -logic -logical -logicalist -logicality -logicalization -logicalize -logically -logicalness -logicaster -logic-chopper -logic-chopping -logician -logicianer -logicians -logician's -logicise -logicised -logicises -logicising -logicism -logicist -logicity -logicize -logicized -logicizes -logicizing -logicless -logico-metaphysical -logics -logic's -logie -logier -logiest -logily -login -loginess -loginesses -Loginov -logins -logion -logions -logis -logist -logistic -logistical -logistically -logistician -logisticians -logistics -logium -logjam -logjams -loglet -loglike -loglog -log-log -logman -lognormal -lognormality -lognormally -logo -logo- -logocracy -logodaedaly -logodaedalus -logoes -logoff -logogogue -logogram -logogrammatic -logogrammatically -logograms -logograph -logographer -logography -logographic -logographical -logographically -logogriph -logogriphic -logoi -logolatry -logology -logomach -logomacher -logomachy -logomachic -logomachical -logomachies -logomachist -logomachize -logomachs -logomancy -logomania -logomaniac -logometer -logometric -logometrical -logometrically -logopaedics -logopedia -logopedic -logopedics -logophobia -logorrhea -logorrheic -logorrhoea -Logos -logothete -logothete- -logotype -logotypes -logotypy -logotypies -logout -logperch -logperches -Logres -Logria -Logris -logroll -log-roll -logrolled -logroller -log-roller -logrolling -log-rolling -logrolls -Logrono -logs -log's -logship -logue -logway -logways -logwise -logwood -logwoods -logwork -lohan -Lohana -Lohar -Lohengrin -Lohman -Lohn -Lohner -lohoch -lohock -Lohrman -Lohrmann -Lohrville -Lohse -LOI -Loy -loyal -loyaler -loyalest -loyalism -loyalisms -Loyalist -loyalists -loyalize -Loyall -loyally -loyalness -loyalty -loyalties -loyalty's -Loyalton -Loyang -loiasis -Loyce -loyd -Loyde -Loydie -loimic -loimography -loimology -loin -loyn -loincloth -loinclothes -loincloths -loined -loinguard -loins -loin's -Loyola -Loyolism -Loyolite -loir -Loire -Loire-Atlantique -Loiret -Loir-et-Cher -Lois -Loysburg -Loise -Loiseleuria -Loysville -loiter -loitered -loiterer -loiterers -loitering -loiteringly -loiteringness -loiters -Loiza -Loja -loka -lokacara -Lokayata -Lokayatika -lokao -lokaose -lokapala -loke -lokelani -loket -Loki -lokiec -Lokindra -Lokman -lokshen -Lola -Lolande -Lolanthe -Lole -Loleta -loli -Loliginidae -Loligo -Lolita -Lolium -loll -Lolland -lollapaloosa -lollapalooza -Lollard -Lollardy -Lollardian -Lollardism -Lollardist -Lollardize -Lollardlike -Lollardry -lolled -loller -lollers -Lolly -lollies -lollygag -lollygagged -lollygagging -lollygags -lolling -lollingite -lollingly -lollipop -lollypop -lollipops -lollypops -lollop -lolloped -lollopy -lolloping -lollops -lolls -loll-shraub -lollup -Lolo -Lom -Loma -Lomalinda -Lomamar -Loman -Lomasi -lomastome -lomata -lomatine -lomatinous -Lomatium -Lomax -Lomb -Lombard -Lombardeer -Lombardesque -Lombardi -Lombardy -Lombardian -Lombardic -Lombardo -lombard-street -lomboy -Lombok -Lombrosian -Lombroso -Lome -lomein -lomeins -loment -lomenta -lomentaceous -Lomentaria -lomentariaceous -lomentlike -loments -lomentum -lomentums -Lometa -lomilomi -lomi-lomi -Lomira -Lomita -lommock -Lomond -lomonite -Lompoc -lomta -LON -Lona -Lonaconing -Lonchocarpus -Lonchopteridae -lond -Londinensian -London -Londonderry -Londoner -londoners -Londonese -Londonesque -Londony -Londonian -Londonish -Londonism -Londonization -Londonize -Londres -Londrina -lone -Lonedell -Lonee -loneful -Loney -Lonejack -lonely -lonelier -loneliest -lonelihood -lonelily -loneliness -lonelinesses -loneness -lonenesses -loner -Lonergan -loners -lonesome -lonesomely -lonesomeness -lonesomenesses -lonesomes -Lonestar -Lonetree -long -long- -longa -long-accustomed -longacre -long-acre -long-agitated -long-ago -Longan -longanamous -longanimity -longanimities -longanimous -longans -long-arm -long-armed -Longaville -Longawa -long-awaited -long-awned -long-axed -long-backed -long-barreled -longbeak -long-beaked -longbeard -long-bearded -long-bellied -Longbenton -long-berried -longbill -long-billed -longboat -long-boat -longboats -long-bodied -long-borne -Longbottom -longbow -long-bow -longbowman -longbows -long-bracted -long-branched -long-breathed -long-buried -long-celled -long-chained -long-cycle -long-cycled -long-clawed -longcloth -long-coated -long-coats -long-contended -long-continued -long-continuing -long-coupled -long-crested -long-day -Longdale -long-dated -long-dead -long-delayed -long-descending -long-deserted -long-desired -long-destroying -long-distance -long-docked -long-drawn -long-drawn-out -longe -longear -long-eared -longed -longed-for -longee -longeing -long-enduring -longer -Longerich -longeron -longerons -longers -longes -longest -long-established -longeval -longeve -longevity -longevities -longevous -long-exerted -long-expected -long-experienced -long-extended -long-faced -long-faded -long-favored -long-fed -Longfellow -longfelt -long-fiber -long-fibered -longfin -long-fingered -long-finned -long-fleeced -long-flowered -long-footed -Longford -long-forgotten -long-fronted -long-fruited -longful -long-gown -long-gowned -long-grassed -longhair -long-hair -longhaired -long-haired -longhairs -longhand -long-hand -long-handed -long-handled -longhands -longhead -long-head -longheaded -long-headed -longheadedly -longheadedness -long-headedness -longheads -long-heeled -long-hid -Longhorn -long-horned -longhorns -longhouse -longi- -longicaudal -longicaudate -longicone -longicorn -Longicornia -Longyearbyen -longies -longyi -longilateral -longilingual -longiloquence -longiloquent -longimanous -longimetry -longimetric -Longinean -longing -longingly -longingness -longings -Longinian -longinquity -Longinus -longipennate -longipennine -longirostral -longirostrate -longirostrine -Longirostrines -longisection -longish -longitude -longitudes -longitude's -longitudianl -longitudinal -longitudinally -longjaw -long-jawed -longjaws -long-jointed -long-journey -Longkey -long-kept -long-lacked -Longlane -long-lasting -long-lastingness -Longleaf -long-leaved -longleaves -longleg -long-leg -long-legged -longlegs -Longley -longly -longlick -long-limbed -longline -long-line -long-lined -longliner -long-liner -longlinerman -longlinermen -longlines -long-lining -long-lived -long-livedness -long-living -long-locked -long-lost -long-lunged -Longmeadow -long-memoried -Longmire -Longmont -longmouthed -long-nebbed -longneck -long-necked -longness -longnesses -longnose -long-nosed -Longo -Longobard -Longobardi -Longobardian -Longobardic -long-off -Longomontanus -long-on -long-parted -long-past -long-pasterned -long-pending -long-playing -long-planned -long-plumed -longpod -long-pod -long-podded -Longport -long-possessed -long-projected -long-protracted -long-quartered -long-range -long-reaching -long-resounding -long-ribbed -long-ridged -long-robed -long-roofed -longroot -long-rooted -longrun -Longs -long-saved -long-settled -long-shaded -long-shadowed -long-shafted -long-shanked -longshanks -long-shaped -longship -longships -longshore -long-shore -longshoreman -longshoremen -longshoring -longshot -longshucks -long-shut -longsighted -long-sighted -longsightedness -long-sightedness -long-skulled -long-sleeved -longsleever -long-snouted -longsome -longsomely -longsomeness -long-sought -long-span -long-spine -long-spined -longspun -long-spun -longspur -long-spurred -longspurs -long-staffed -long-stalked -longstanding -long-standing -long-staple -long-stapled -long-stemmed -long-styled -long-stocked -long-streaming -Longstreet -long-stretched -long-stroke -long-succeeding -long-sufferance -long-suffered -longsuffering -long-suffering -long-sufferingly -long-sundered -longtail -long-tail -long-tailed -long-term -long-termer -long-thinking -long-threatened -longtime -long-time -long-timed -longtimer -Longtin -long-toed -Longton -long-tongue -long-tongued -long-toothed -long-traveled -longue -longues -Longueuil -longueur -longueurs -longulite -Longus -Longview -Longville -long-visaged -longway -longways -long-waisted -longwall -long-wandered -long-wandering -long-wave -long-wedded -long-winded -long-windedly -long-windedness -long-winged -longwise -long-wished -long-withdrawing -long-withheld -Longwood -longwool -long-wooled -longword -long-worded -longwork -longwort -Longworth -lonhyn -Loni -Lonicera -Lonie -Lonier -Lonk -Lonna -Lonnard -Lonne -Lonni -Lonny -Lonnie -Lonnrot -Lonoke -lonouhard -lonquhard -Lonsdale -Lons-le-Saunier -lontar -Lontson -Lonzie -Lonzo -loo -loob -looby -loobies -loobyish -loobily -looch -lood -looed -looey -looeys -loof -loofa -loofah -loofahs -loofas -loofie -loofness -loofs -Loogootee -looie -looies -looing -look -lookahead -look-alike -look-alikes -lookdown -look-down -lookdowns -Lookeba -looked -looked-for -lookee -looker -looker-on -lookers -lookers-on -looky -look-in -looking -looking-glass -lookout -lookouts -look-over -looks -look-see -look-through -lookum -lookup -look-up -lookups -lookup's -LOOM -loomed -loomer -loomery -loomfixer -looming -Loomis -looms -loom-state -Loon -looney -looneys -Looneyville -loonery -loony -loonybin -loonier -loonies -looniest -looniness -loons -loop -loopback -loope -looped -looper -loopers -loopful -loophole -loop-hole -loopholed -loopholes -loophole's -loopholing -loopy -loopier -loopiest -looping -loopist -looplet -looplike -LOOPS -loop-the-loop -loord -loory -Loos -loose -loose-barbed -loose-bodied -loosebox -loose-coupled -loose-curled -loosed -loose-driving -loose-enrobed -loose-fibered -loose-fitting -loose-fleshed -loose-floating -loose-flowered -loose-flowing -loose-footed -loose-girdled -loose-gowned -loose-handed -loose-hanging -loose-hipped -loose-hung -loose-jointed -loose-kneed -looseleaf -loose-leaf -looseleafs -loosely -loose-lying -loose-limbed -loose-lipped -loose-lived -loose-living -loose-locked -loose-mannered -loose-moraled -loosemouthed -loosen -loose-necked -loosened -loosener -looseners -looseness -loosenesses -loosening -loosens -loose-packed -loose-panicled -loose-principled -looser -loose-robed -looses -loose-skinned -loose-spiked -loosest -loosestrife -loose-thinking -loose-tongued -loose-topped -loose-wadded -loose-wived -loose-woven -loose-writ -loosing -loosish -loot -lootable -looted -looten -looter -looters -lootie -lootiewallah -looting -loots -lootsman -lootsmans -loover -LOP -Lopatnikoff -Lopatnikov -Lope -lop-ear -lop-eared -loped -lopeman -Lopeno -loper -lopers -Lopes -lopeskonce -Lopez -Lopezia -lopheavy -lophiid -Lophiidae -lophin -lophine -Lophiodon -lophiodont -Lophiodontidae -lophiodontoid -Lophiola -Lophiomyidae -Lophiomyinae -Lophiomys -lophiostomate -lophiostomous -lopho- -lophobranch -lophobranchiate -Lophobranchii -lophocalthrops -lophocercal -Lophocome -Lophocomi -Lophodermium -lophodont -lophophytosis -Lophophora -lophophoral -lophophore -Lophophorinae -lophophorine -Lophophorus -Lophopoda -Lophornis -Lophortyx -lophostea -lophosteon -lophosteons -lophotriaene -lophotrichic -lophotrichous -Lophura -loping -Lopoldville -lopolith -loppard -lopped -lopper -loppered -loppering -loppers -loppet -loppy -loppier -loppiest -lopping -lops -lopseed -lopsided -lop-sided -lopsidedly -lopsidedness -lopsidednesses -lopstick -lopsticks -loq -loq. -loquacious -loquaciously -loquaciousness -loquacity -loquacities -loquat -loquats -loquence -loquency -loquent -loquently -loquitur -lor -lor' -Lora -Lorado -Lorain -Loraine -Loral -Loralee -Loralie -Loralyn -Loram -LORAN -lorandite -Lorane -Loranger -lorans -loranskite -Lorant -Loranthaceae -loranthaceous -Loranthus -lorarii -lorarius -lorate -Lorca -lorcha -Lord -Lordan -lorded -lordy -lording -lordings -lord-in-waiting -lordkin -lordless -lordlet -lordly -lordlier -lordliest -lord-lieutenancy -lord-lieutenant -lordlike -lordlily -lordliness -lordling -lordlings -lordolatry -lordoma -lordomas -lordoses -lordosis -lordotic -Lords -lords-and-ladies -Lordsburg -Lordship -lordships -lords-in-waiting -lordswike -lordwood -Lore -loreal -Loreauville -lored -Loredana -Loredo -Loree -Loreen -lorel -Lorelei -loreless -Lorelie -Lorella -Lorelle -Loren -Lorena -Lorence -Lorene -Lorens -Lorentz -Lorenz -Lorenza -Lorenzan -Lorenzana -lorenzenite -Lorenzetti -Lorenzo -lores -Lorestan -Loresz -loretin -Loretta -Lorette -Lorettine -Loretto -lorettoite -lorgnette -lorgnettes -lorgnon -lorgnons -Lori -Lory -Loria -Lorianna -Lorianne -loric -lorica -loricae -loricarian -Loricariidae -loricarioid -Loricata -loricate -loricated -loricates -Loricati -loricating -lorication -loricoid -Lorida -Lorie -Lorien -Lorient -lories -lorikeet -lorikeets -Lorilee -lorilet -Lorilyn -Lorimer -lorimers -Lorimor -Lorin -Lorinda -Lorine -Loriner -loriners -Loring -loriot -Loris -lorises -lorisiform -Lorita -Lorius -Lorman -lormery -Lorn -Lorna -Lorne -lornness -lornnesses -loro -Lorola -Lorolla -Lorollas -loros -Lorou -Lorrain -Lorraine -Lorrayne -Lorrainer -Lorrainese -Lorri -Lorry -Lorrie -lorries -lorriker -Lorrimer -Lorrimor -Lorrin -Lorris -lors -Lorsung -Lorton -lorum -Lorus -Lorusso -LOS -losable -losableness -losang -Lose -Loseff -Losey -losel -loselism -loselry -losels -losenger -lose-out -loser -losers -loses -LOSF -losh -losing -losingly -losings -Loss -Lossa -Losse -lossenite -losser -losses -lossful -lossy -lossier -lossiest -lossless -lossproof -loss's -lost -Lostant -Lostine -lostling -lostness -lostnesses -Lot -Lota -L'Otage -lotah -lotahs -lotan -lotas -lotase -lote -lotebush -Lot-et-Garonne -lotewood -loth -Lotha -Lothair -Lothaire -Lothar -Lotharingian -Lothario -Lotharios -Lothian -Lothians -lothly -Lothringen -lothsome -Loti -lotic -lotiform -lotion -lotions -Lotis -lotium -lotment -loto -lotong -Lotophagi -lotophagous -lotophagously -lotor -lotos -lotoses -lotrite -LOTS -lot's -Lotson -Lott -Lotta -Lotte -lotted -lotter -lottery -lotteries -Lotti -Lotty -Lottie -lotting -lotto -lottos -Lottsburg -Lotuko -Lotus -lotus-eater -lotus-eating -lotuses -lotusin -lotuslike -Lotz -Lotze -Lou -Louann -Louanna -Louanne -louch -louche -louchettes -Loucheux -loud -loud-acclaiming -loud-applauding -loud-bellowing -loud-blustering -loud-calling -loud-clamoring -loud-cursing -louden -loudened -loudening -loudens -louder -loudering -loudest -loud-hailer -loudy-da -loudish -loudishness -loud-laughing -loudly -loudlier -loudliest -loudmouth -loud-mouth -loudmouthed -loud-mouthed -loudmouths -loud-mouths -loudness -loudnesses -Loudon -Loudonville -loud-ringing -loud-roared -loud-roaring -loud-screaming -loud-singing -loud-sounding -loudspeak -loudspeaker -loud-speaker -loudspeakers -loudspeaker's -loudspeaking -loud-speaking -loud-spoken -loud-squeaking -loud-thundering -loud-ticking -loud-voiced -louey -Louella -Louellen -Lough -Loughborough -Lougheed -lougheen -Loughlin -Loughman -loughs -Louhi -Louie -louies -Louin -louiqa -Louis -Louys -Louisa -Louisburg -Louise -Louisette -Louisiana -Louisianan -louisianans -Louisianian -louisianians -louisine -Louisville -Louisvillian -louk -loukas -loukoum -loukoumi -Louls -loulu -loun -lounder -lounderer -Lounge -lounged -lounger -loungers -lounges -loungy -lounging -loungingly -Lounsbury -Loup -loupcervier -loup-cervier -loupcerviers -loupe -louped -loupen -loupes -loup-garou -louping -loups -loups-garous -lour -lourd -Lourdes -lourdy -lourdish -loured -loury -Lourie -louring -louringly -louringness -lours -louse -louseberry -louseberries -loused -louses -louse-up -lousewort -lousy -lousier -lousiest -lousily -lousiness -lousinesses -lousing -louster -lout -louted -louter -Louth -louther -louty -louting -loutish -loutishly -loutishness -Loutitia -loutre -loutrophoroi -loutrophoros -louts -Louvain -Louvale -louvar -louver -louvered -louvering -louvers -Louvertie -L'Ouverture -louverwork -Louviers -Louvre -louvred -louvres -Loux -lovability -lovable -lovableness -lovably -lovage -lovages -lovanenty -Lovash -lovat -Lovato -lovats -Love -loveability -loveable -loveableness -loveably -love-anguished -love-apple -love-begot -love-begotten -lovebird -love-bird -lovebirds -love-bitten -love-born -love-breathing -lovebug -lovebugs -love-crossed -loved -loveday -love-darting -love-delighted -love-devouring -love-drury -lovee -love-entangle -love-entangled -love-enthralled -love-feast -loveflower -loveful -lovegrass -lovehood -lovey -lovey-dovey -love-illumined -love-in-a-mist -love-in-idleness -love-inspired -love-inspiring -Lovejoy -love-knot -Lovel -Lovelace -Lovelaceville -love-lacking -love-laden -Lovelady -Loveland -lovelass -love-learned -loveless -lovelessly -lovelessness -Lovely -lovelier -lovelies -love-lies-bleeding -loveliest -lovelihead -lovelily -love-lilt -loveliness -lovelinesses -loveling -Lovell -Lovelock -lovelocks -lovelorn -love-lorn -lovelornness -love-mad -love-madness -love-maker -lovemaking -love-making -loveman -lovemans -lovemate -lovemonger -love-mourning -love-performing -lovepot -loveproof -Lover -lover-boy -loverdom -lovered -loverhood -lovery -Loveridge -Lovering -loverless -loverly -loverlike -loverliness -lovers -lovership -loverwise -loves -lovesick -love-sick -lovesickness -love-smitten -lovesome -lovesomely -lovesomeness -love-spent -love-starved -love-stricken -love-touched -Lovett -Lovettsville -Loveville -lovevine -lovevines -love-whispering -loveworth -loveworthy -love-worthy -love-worthiness -love-wounded -Lovich -Lovie -lovier -loviers -Lovilia -Loving -lovingkindness -loving-kindness -lovingly -lovingness -Lovingston -Lovington -Lovmilla -Low -lowa -lowable -Lowake -lowan -lowance -low-arched -low-backed -lowball -lowballs -lowbell -low-bellowing -low-bended -Lowber -low-blast -low-blooded -low-bodied -lowboy -low-boiling -lowboys -lowborn -low-born -low-boughed -low-bowed -low-breasted -lowbred -low-bred -lowbrow -low-brow -low-browed -lowbrowism -lowbrows -low-built -low-camp -low-caste -low-ceiled -low-ceilinged -low-charge -Low-Churchism -Low-churchist -Low-Churchman -Low-churchmanship -low-class -low-conceited -low-conditioned -low-consumption -low-cost -low-country -low-crested -low-crowned -low-current -low-cut -lowdah -low-deep -Lowden -Lowder -lowdown -low-down -low-downer -low-downness -lowdowns -Lowe -low-ebbed -lowed -loweite -Lowell -Lowellville -Lowenstein -Lowenstern -Lower -lowerable -lowercase -lower-case -lower-cased -lower-casing -lowerclassman -lowerclassmen -lowered -lowerer -Lowery -lowering -loweringly -loweringness -lowermost -lowers -Lowes -lowest -Lowestoft -Lowesville -low-filleted -low-flighted -low-fortuned -low-frequency -low-gauge -low-geared -low-grade -low-heeled -low-hung -lowy -lowigite -lowing -lowings -low-intensity -Lowis -lowish -lowishly -lowishness -low-key -low-keyed -Lowl -Lowland -Lowlander -lowlanders -Lowlands -low-level -low-leveled -lowly -lowlier -lowliest -lowlife -lowlifer -lowlifes -lowlihead -lowlihood -low-lying -lowlily -lowliness -lowlinesses -low-lipped -low-lived -lowlives -low-living -low-low -Lowman -Lowmansville -low-masted -low-melting -lowmen -low-minded -low-mindedly -low-mindedness -Lowmoor -lowmost -low-murmuring -low-muttered -lown -Lowndes -Lowndesboro -Lowndesville -low-necked -Lowney -lowness -lownesses -lownly -low-paneled -low-pitched -low-power -low-pressure -low-priced -low-principled -low-priority -low-profile -low-purposed -low-quality -low-quartered -Lowrance -low-rate -low-rented -low-resistance -Lowry -lowrider -Lowrie -low-rimmed -low-rise -low-roofed -lows -lowse -lowsed -lowser -lowsest -low-set -lowsin -lowsing -low-sized -Lowson -low-sounding -low-spirited -low-spiritedly -low-spiritedness -low-spoken -low-statured -low-temperature -low-tension -low-test -lowth -low-thoughted -low-toned -low-tongued -low-tread -low-uttered -Lowveld -Lowville -low-voiced -low-voltage -low-waisted -low-water -low-wattage -low-wheeled -low-withered -low-witted -lowwood -LOX -Loxahatchee -loxed -loxes -loxia -Loxias -loxic -Loxiinae -loxing -Loxley -loxoclase -loxocosm -loxodograph -Loxodon -loxodont -Loxodonta -loxodontous -loxodrome -loxodromy -loxodromic -loxodromical -loxodromically -loxodromics -loxodromism -Loxolophodon -loxolophodont -Loxomma -loxophthalmus -Loxosoma -Loxosomidae -loxotic -loxotomy -Loz -Lozano -Lozar -lozenge -lozenged -lozenger -lozenges -lozenge-shaped -lozengeways -lozengewise -lozengy -Lozere -Lozi -LP -L-P -LPC -LPCDF -LPDA -LPF -LPG -LPL -lpm -LPN -LPP -LPR -LPS -LPT -LPV -lpW -LR -L-radiation -LRAP -LRB -LRBM -LRC -lrecisianism -lrecl -Lrida -LRS -LRSP -LRSS -LRU -LS -l's -LSAP -LSB -LSC -LSD -LSD-25 -LSE -L-series -L-shell -LSI -LSM -LSP -LSR -LSRP -LSS -LSSD -LST -LSV -LT -Lt. -LTA -LTAB -LTC -LTD -Ltd. -LTF -LTG -LTh -lt-yr -LTJG -LTL -LTP -LTPD -ltr -l'tre -LTS -LTV -LTVR -Ltzen -LU -Lualaba -Luana -Luanda -Luane -Luann -Luanne -Luanni -luau -luaus -lub -Luba -Lubba -lubbard -lubber -lubbercock -lubber-hole -Lubberland -lubberly -lubberlike -lubberliness -lubbers -Lubbi -Lubbock -lube -Lubec -Lubeck -Lubell -Luben -lubes -Lubet -Luby -Lubin -Lubiniezky -Lubitsch -Lubke -Lublin -Lubow -lubra -lubric -lubrical -lubricant -lubricants -lubricant's -lubricate -lubricated -lubricates -lubricating -lubrication -lubricational -lubrications -lubricative -lubricator -lubricatory -lubricators -lubricious -lubriciously -lubriciousness -lubricity -lubricities -lubricous -lubrifaction -lubrify -lubrification -lubritory -lubritorian -lubritorium -Lubumbashi -luc -Luca -Lucayan -Lucais -Lucama -Lucan -Lucania -lucanid -Lucanidae -Lucanus -lucarne -lucarnes -Lucas -Lucasville -lucban -Lucca -Lucchese -Lucchesi -Luce -Lucedale -Lucey -Lucelle -lucence -lucences -lucency -lucencies -lucent -Lucentio -lucently -Luceres -lucern -lucernal -Lucernaria -lucernarian -Lucernariidae -Lucerne -lucernes -lucerns -luces -lucet -Luchesse -Lucho -Luchuan -Luci -Lucy -Lucia -Lucian -Luciana -Lucianne -Luciano -Lucias -lucible -Lucic -lucid -lucida -lucidae -lucidity -lucidities -lucidly -lucidness -lucidnesses -Lucie -Lucien -Lucienne -Lucier -lucifee -Lucifer -luciferase -Luciferian -Luciferidae -luciferin -luciferoid -luciferous -luciferously -luciferousness -lucifers -lucific -luciform -lucifugal -lucifugous -lucigen -Lucila -Lucile -Lucilia -Lucilius -Lucilla -Lucille -lucimeter -Lucina -Lucinacea -Lucinda -Lucine -Lucinidae -lucinoid -Lucio -Lucita -Lucite -Lucius -lucivee -Luck -lucked -Luckey -lucken -Luckett -luckful -Lucky -lucky-bag -luckie -luckier -luckies -luckiest -luckily -Luckin -luckiness -luckinesses -lucking -luckless -lucklessly -lucklessness -luckly -Lucknow -lucks -lucombe -lucration -lucrative -lucratively -lucrativeness -lucrativenesses -lucre -Lucrece -lucres -Lucretia -Lucretian -Lucretius -Lucrezia -lucriferous -lucriferousness -lucrify -lucrific -Lucrine -lucrous -lucrum -luctation -luctiferous -luctiferousness -luctual -lucubrate -lucubrated -lucubrates -lucubrating -lucubration -lucubrations -lucubrator -lucubratory -lucule -luculent -luculently -Lucullan -Lucullean -Lucullian -lucullite -Lucullus -Lucuma -lucumia -Lucumo -lucumony -Lud -Ludd -ludden -luddy -Luddism -Luddite -Ludditism -lude -ludefisk -Ludell -Ludeman -Ludendorff -Luderitz -ludes -Ludewig -Ludgate -Ludgathian -Ludgatian -Ludhiana -Ludian -ludibry -ludibrious -ludic -ludicro- -ludicropathetic -ludicroserious -ludicrosity -ludicrosities -ludicrosplenetic -ludicrous -ludicrously -ludicrousness -ludicrousnesses -Ludie -ludification -Ludington -ludlamite -Ludlew -Ludly -Ludlovian -Ludlow -Ludmilla -ludo -Ludolphian -Ludovick -Ludovico -Ludovika -Ludowici -Ludvig -Ludwig -Ludwigg -ludwigite -Ludwigsburg -Ludwigshafen -Ludwog -lue -Luebbering -Luebke -Lueders -Luedtke -Luehrmann -Luella -Luelle -Luening -lues -luetic -luetically -luetics -lufbery -lufberry -luff -Luffa -luffas -luffed -luffer -luffing -luffs -Lufkin -Lufthansa -Luftwaffe -LUG -Lugana -Luganda -Lugansk -Lugar -luge -luged -lugeing -Luger -luges -luggage -luggageless -luggages -luggar -luggard -lugged -lugger -luggers -luggie -luggies -lugging -Luggnagg -lughdoan -luging -lugmark -Lugnas -Lugnasad -Lugo -Lugoff -Lugones -lug-rigged -lugs -lugsail -lugsails -lugsome -lugubriosity -lugubrious -lugubriously -lugubriousness -lugubriousnesses -lugubrous -lugworm -lug-worm -lugworms -Luhe -Luhey -luhinga -Luht -lui -Luian -Luigi -luigini -Luigino -Luik -Luing -Luis -Luisa -Luise -Luiseno -Luite -Luiza -lujaurite -lujavrite -lujula -Luk -Lukacs -Lukan -Lukas -Lukash -Lukasz -Lukaszewicz -Luke -Lukey -lukely -lukemia -lukeness -luket -Lukeville -lukeward -lukewarm -lukewarmish -lukewarmly -lukewarmness -lukewarmth -Lukin -Luks -Lula -lulab -lulabim -lulabs -lulav -lulavim -lulavs -Lulea -Luli -Lulie -Luling -Lulita -Lull -Lullaby -lullabied -lullabies -lullabying -lullay -lulled -luller -Lulli -Lully -Lullian -lulliloo -lullilooed -lullilooing -lulling -lullingly -lulls -Lulu -Luluabourg -luluai -lulus -lum -lumachel -lumachella -lumachelle -lumb- -lumbaginous -lumbago -lumbagos -lumbayao -lumbang -lumbar -Lumbard -lumbarization -lumbars -lumber -lumberdar -lumberdom -lumbered -lumberer -lumberers -lumberyard -lumberyards -lumbering -lumberingly -lumberingness -lumberjack -lumberjacket -lumberjacks -lumberless -lumberly -lumberman -lumbermen -lumbermill -lumber-pie -Lumberport -lumbers -lumbersome -Lumberton -Lumbye -lumbo- -lumbo-abdominal -lumbo-aortic -lumbocolostomy -lumbocolotomy -lumbocostal -lumbodynia -lumbodorsal -lumbo-iliac -lumbo-inguinal -lumbo-ovarian -lumbosacral -lumbovertebral -lumbrical -lumbricales -lumbricalis -lumbricid -Lumbricidae -lumbriciform -lumbricine -lumbricoid -lumbricosis -Lumbricus -lumbrous -lumbus -Lumen -lumenal -lumen-hour -lumens -lumeter -Lumiere -lumin- -lumina -luminaire -Luminal -luminance -luminances -luminant -luminare -luminary -luminaria -luminaries -luminarious -luminarism -luminarist -luminate -lumination -luminative -luminator -lumine -lumined -luminesce -luminesced -luminescence -luminescences -luminescent -luminesces -luminescing -luminiferous -luminificent -lumining -luminism -luminist -luministe -luminists -luminodynamism -luminodynamist -luminologist -luminometer -luminophor -luminophore -luminosity -luminosities -luminous -luminously -luminousness -lumisterol -lumme -lummy -lummox -lummoxes -lump -lumpectomy -lumped -lumpen -lumpenproletariat -lumpens -lumper -lumpers -lumpet -lumpfish -lump-fish -lumpfishes -lumpy -lumpier -lumpiest -lumpily -lumpiness -lumping -lumpingly -lumpish -lumpishly -lumpishness -Lumpkin -lumpman -lumpmen -lumps -lumpsucker -Lumpur -lums -Lumumba -lumut -LUN -Luna -lunacy -lunacies -lunambulism -lunar -lunar-diurnal -lunare -lunary -Lunaria -lunarian -lunarians -lunarist -lunarium -lunars -lunas -lunata -lunate -lunated -lunately -lunatellus -lunatic -lunatical -lunatically -lunatics -lunation -lunations -lunatize -lunatum -lunch -lunched -luncheon -luncheoner -luncheonette -luncheonettes -luncheonless -luncheons -luncheon's -luncher -lunchers -lunches -lunchhook -lunching -lunchless -lunchroom -lunchrooms -lunchtime -Lund -Lunda -Lundale -Lundberg -Lundeen -Lundell -Lundgren -Lundy -lundyfoot -Lundin -Lundinarium -Lundquist -lundress -Lundt -Lune -Lunel -Lunenburg -lunes -lunet -lunets -Lunetta -Lunette -lunettes -Luneville -lung -lungan -lungans -lunge -lunged -lungee -lungees -lungeous -lunger -lungers -lunges -lungfish -lungfishes -lungflower -lungful -lungi -lungy -lungie -lungyi -lungyis -lunging -lungis -Lungki -lungless -lungmotor -lungoor -lungs -lungsick -lungworm -lungworms -lungwort -lungworts -luny -lunicurrent -lunier -lunies -luniest -luniform -lunyie -Lunik -Luning -lunisolar -lunistice -lunistitial -lunitidal -lunk -Lunka -lunker -lunkers -lunkhead -lunkheaded -lunkheads -lunks -Lunn -Lunna -Lunneta -Lunnete -lunoid -Luns -Lunseth -Lunsford -Lunt -lunted -lunting -lunts -lunula -lunulae -lunular -Lunularia -lunulate -lunulated -lunule -lunules -lunulet -lunulite -Lunulites -Lunville -Luo -Luorawetlan -lupanar -lupanarian -lupanars -lupanin -lupanine -Lupe -Lupee -lupeol -lupeose -Lupercal -Lupercalia -Lupercalian -Lupercalias -Luperci -Lupercus -lupetidin -lupetidine -Lupi -lupicide -Lupid -Lupien -lupiform -lupin -lupinaster -lupine -lupines -lupinin -lupinine -lupinosis -lupinous -lupins -Lupinus -lupis -Lupita -lupoid -lupoma -lupous -Lupton -lupulic -lupulin -lupuline -lupulinic -lupulinous -lupulins -lupulinum -lupulone -lupulus -Lupus -lupuserythematosus -lupuses -Luquillo -Lur -Lura -luracan -Luray -lural -Lurcat -lurch -lurched -lurcher -lurchers -lurches -lurching -lurchingfully -lurchingly -lurchline -lurdan -lurdane -lurdanes -lurdanism -lurdans -lure -lured -lureful -lurement -lurer -lurers -lures -luresome -Lurette -Lurex -lurg -Lurgan -lurgworm -Luri -lurid -luridity -luridly -luridness -Lurie -luring -luringly -Luristan -lurk -lurked -lurker -lurkers -lurky -lurking -lurkingly -lurkingness -lurks -Lurleen -Lurlei -Lurlene -Lurline -lurry -lurrier -lurries -Lurton -Lusa -Lusaka -Lusatia -Lusatian -Lusby -Luscinia -luscious -lusciously -lusciousness -lusciousnesses -luser -lush -Lushai -lushburg -lushed -Lushei -lusher -lushes -lushest -lushy -lushier -lushiest -lushing -lushly -lushness -lushnesses -Lusia -Lusiad -Lusian -Lusitania -Lusitanian -Lusitano-american -Lusk -lusky -lusory -Lussi -Lussier -Lust -lust-born -lust-burned -lust-burning -lusted -lust-engendered -luster -lustered -lusterer -lustering -lusterless -lusterlessness -lusters -lusterware -lustful -lustfully -lustfulness -Lusty -Lustick -lustier -lustiest -Lustig -lustihead -lustihood -lustily -lustiness -lustinesses -lusting -lustless -lustly -Lustprinzip -lustra -lustral -lustrant -lustrate -lustrated -lustrates -lustrating -lustration -lustrational -lustrative -lustratory -lustre -lustred -lustreless -lustres -lustreware -lustrical -lustrify -lustrification -lustrine -lustring -lustrings -lustrous -lustrously -lustrousness -lustrum -lustrums -lusts -lust-stained -lust-tempting -lusus -lususes -LUT -lutaceous -Lutayo -lutany -lutanist -lutanists -Lutao -lutarious -lutation -Lutcher -lute -lute- -lutea -luteal -lute-backed -lutecia -lutecium -luteciums -luted -lute-fashion -luteic -lutein -luteinization -luteinize -luteinized -luteinizing -luteins -lutelet -lutemaker -lutemaking -Lutenist -lutenists -luteo -luteo- -luteocobaltic -luteofulvous -luteofuscescent -luteofuscous -luteolin -luteolins -luteolous -luteoma -luteorufescent -luteotrophic -luteotrophin -luteotropic -luteotropin -luteous -luteovirescent -lute-playing -luter -Lutero -lutes -lute's -lutescent -lutestring -lute-string -Lutesville -Lutetia -Lutetian -lutetium -lutetiums -luteum -lute-voiced -luteway -lutfisk -Luth -Luth. -Luthanen -Luther -Lutheran -Lutheranic -Lutheranism -Lutheranize -Lutheranizer -lutherans -Lutherism -Lutherist -luthern -lutherns -Luthersburg -Luthersville -Lutherville -luthier -luthiers -Luthuli -lutianid -Lutianidae -lutianoid -Lutianus -lutidin -lutidine -lutidinic -Lutyens -luting -lutings -lutist -lutists -Lutjanidae -Lutjanus -Luton -lutose -Lutoslawski -Lutra -Lutraria -Lutreola -lutrin -Lutrinae -lutrine -Lutsen -Luttrell -Lutts -Lutuamian -Lutuamians -lutulence -lutulent -Lutz -luv -Luvaridae -Luverne -Luvian -Luvish -luvs -Luwana -Luwian -Lux -Lux. -luxate -luxated -luxates -luxating -luxation -luxations -luxe -Luxembourg -Luxemburg -Luxemburger -Luxemburgian -luxes -luxive -Luxor -Luxora -luxulianite -luxullianite -luxury -luxuria -luxuriance -luxuriances -luxuriancy -luxuriant -luxuriantly -luxuriantness -luxuriate -luxuriated -luxuriates -luxuriating -luxuriation -luxurient -luxuries -luxuriety -luxury-loving -luxurious -luxuriously -luxuriousness -luxury-proof -luxury's -luxurist -luxurity -luxus -Luz -Luzader -Luzern -Luzerne -Luzon -Luzula -LV -lv. -lvalue -lvalues -Lviv -Lvos -Lvov -L'vov -LW -Lwe -lwei -lweis -LWL -LWM -Lwo -Lwoff -lwop -LWP -LWSP -LWT -lx -LXE -LXX -LZ -Lzen -m -M' -M'- -'m -M. -M.A. -M.Arch. -M.B. -M.B.A. -M.B.E. -M.C. -M.D. -M.E. -M.Ed. -M.I.A. -M.M. -m.m.f. -M.O. -M.P. -M.P.S. -M.S. -m.s.l. -M.Sc. -M/D -m/s -M-1 -M-14 -M-16 -MA -MAA -maad -MAAG -Maalox -maam -ma'am -maamselle -maana -MAAP -maar -MAArch -Maarianhamina -Maarib -maars -maarten -Maas -Maastricht -Maat -Mab -Maba -Mabank -mabble -mabe -Mabel -mabela -Mabelle -Mabellona -Mabelvale -Maben -mabes -mabi -Mabie -mabyer -Mabinogion -Mable -Mableton -mabolo -Mabscott -Mabton -Mabuse -mabuti -MAC -Mac- -macaasim -macaber -macabi -macaboy -macabre -macabrely -macabreness -macabresque -Macaca -macaco -macacos -Macacus -macadam -macadamer -Macadamia -macadamise -macadamite -macadamization -macadamize -macadamized -macadamizer -macadamizes -macadamizing -macadams -Macaglia -macague -macan -macana -Macanese -Macao -Macap -Macapa -Macapagal -macaque -macaques -Macaranga -Macarani -Macareus -Macario -macarism -macarize -macarized -macarizing -macaron -macaroni -macaronic -macaronical -macaronically -macaronicism -macaronics -macaronies -macaronis -macaronism -macaroon -macaroons -MacArthur -Macartney -Macassar -Macassarese -Macatawa -Macau -macauco -Macaulay -macaviator -macaw -macaws -Macbeth -MACBS -Macc -Macc. -Maccabaeus -maccabaw -maccabaws -Maccabean -Maccabees -maccaboy -maccaboys -Maccarone -maccaroni -MacCarthy -macchia -macchie -macchinetta -MacClenny -MacClesfield -macco -maccoboy -maccoboys -maccus -MacDermot -MacDoel -MacDona -MacDonald -MacDonell -MacDougall -MacDowell -Macduff -Mace -macebearer -mace-bearer -Maced -Maced. -macedoine -Macedon -Macedonia -Macedonian -Macedonian-persian -macedonians -Macedonic -MacEgan -macehead -Macey -Maceio -macellum -maceman -Maceo -macer -macerable -macerate -macerated -macerater -maceraters -macerates -macerating -maceration -macerative -macerator -macerators -macers -maces -MacFadyn -MacFarlan -MacFarlane -Macflecknoe -MacGregor -MacGuiness -Mach -mach. -Macha -Machabees -Machado -Machaerus -machair -machaira -machairodont -Machairodontidae -Machairodontinae -Machairodus -machan -Machaon -machar -Machault -Machaut -mache -machecoled -macheer -Machel -Machen -machera -maches -machete -Machetes -machi -machy -Machias -Machiasport -Machiavel -Machiavelian -Machiavelli -Machiavellian -Machiavellianism -Machiavellianist -Machiavellianly -machiavellians -Machiavellic -Machiavellism -machiavellist -Machiavellistic -machicolate -machicolated -machicolating -machicolation -machicolations -machicoulis -Machicui -machila -Machilidae -Machilis -machin -machina -machinability -machinable -machinal -machinament -machinate -machinated -machinates -machinating -machination -machinations -machinator -machine -machineable -machine-breaking -machine-broken -machine-cut -machined -machine-drilled -machine-driven -machine-finished -machine-forged -machineful -machine-gun -machine-gunned -machine-gunning -machine-hour -machine-knitted -machineless -machinely -machinelike -machine-made -machineman -machinemen -machine-mixed -machinemonger -machiner -machinery -machineries -machines -machine's -machine-sewed -machine-stitch -machine-stitched -machine-tooled -machine-woven -machine-wrought -machinify -machinification -machining -machinism -machinist -machinists -machinization -machinize -machinized -machinizing -machinoclast -machinofacture -machinotechnique -machinule -Machipongo -machismo -machismos -Machmeter -macho -Machogo -machopolyp -Machos -machree -machrees -machs -Machtpolitik -Machute -Machutte -machzor -machzorim -machzors -Macy -macies -Macigno -macilence -macilency -macilent -MacIlroy -macing -MacIntyre -MacIntosh -macintoshes -Mack -MacKay -mackaybean -mackallow -Mackey -MacKeyville -mackenboy -Mackenie -Mackensen -MacKenzie -mackerel -mackereler -mackereling -mackerels -Mackerras -Mackie -Mackinac -Mackinaw -mackinawed -mackinaws -mackinboy -mackins -Mackintosh -mackintoshed -mackintoshes -mackintoshite -mackle -mackled -Mackler -mackles -macklike -mackling -Macknair -Mackoff -macks -Macksburg -Macksinn -Macksville -Mackville -MacLay -MacLaine -macle -Macleaya -MacLean -Maclear -macled -MacLeish -MacLeod -macles -maclib -Maclura -Maclurea -maclurin -MacMahon -MacMillan -Macmillanite -MacMullin -MacNair -MacNamara -MacNeice -maco -macoma -Macomb -Macomber -Macon -maconite -maconne -macons -MacPherson -Macquarie' -macquereau -macr- -Macracanthorhynchus -macracanthrorhynchiasis -macradenous -MacRae -macram -macrame -macrames -macrander -macrandre -macrandrous -macrauchene -Macrauchenia -macraucheniid -Macraucheniidae -macraucheniiform -macrauchenioid -Macready -macrencephaly -macrencephalic -macrencephalous -Macri -macrli -macro -macro- -macroaggregate -macroaggregated -macroanalysis -macroanalyst -macroanalytical -macro-axis -macrobacterium -macrobian -macrobiosis -macrobiote -macrobiotic -macrobiotically -macrobiotics -Macrobiotus -Macrobius -macroblast -macrobrachia -macrocarpous -Macrocentrinae -Macrocentrus -macrocephali -macrocephaly -macrocephalia -macrocephalic -macrocephalism -macrocephalous -macrocephalus -macrochaeta -macrochaetae -macrocheilia -Macrochelys -macrochemical -macrochemically -macrochemistry -Macrochira -macrochiran -Macrochires -macrochiria -Macrochiroptera -macrochiropteran -macrocyst -Macrocystis -macrocyte -macrocythemia -macrocytic -macrocytosis -macrocladous -macroclimate -macroclimatic -macroclimatically -macroclimatology -macrococcus -macrocoly -macroconidial -macroconidium -macroconjugant -macrocornea -macrocosm -macrocosmic -macrocosmical -macrocosmically -macrocosmology -macrocosmos -macrocosms -macrocrystalline -macrodactyl -macrodactyly -macrodactylia -macrodactylic -macrodactylism -macrodactylous -macrodiagonal -macrodomatic -macrodome -macrodont -macrodontia -macrodontic -macrodontism -macroeconomic -macroeconomics -macroelement -macroergate -macroevolution -macroevolutionary -macrofarad -macrofossil -macrogamete -macrogametocyte -macrogamy -macrogastria -macroglobulin -macroglobulinemia -macroglobulinemic -macroglossate -macroglossia -macrognathic -macrognathism -macrognathous -macrogonidium -macrograph -macrography -macrographic -macroinstruction -macrolecithal -macrolepidoptera -macrolepidopterous -macrolinguistic -macrolinguistically -macrolinguistics -macrolith -macrology -macromandibular -macromania -macromastia -macromazia -macromelia -macromeral -macromere -macromeric -macromerite -macromeritic -macromesentery -macrometeorology -macrometeorological -macrometer -macromethod -macromyelon -macromyelonal -macromole -macromolecular -macromolecule -macromolecules -macromolecule's -macron -macrons -macronuclear -macronucleate -macronucleus -macronutrient -macropetalous -macrophage -macrophagic -macrophagocyte -macrophagus -macrophyllous -macrophysics -macrophyte -macrophytic -Macrophoma -macrophotograph -macrophotography -macropia -Macropygia -macropinacoid -macropinacoidal -macropyramid -macroplankton -macroplasia -macroplastia -macropleural -macropod -macropodia -macropodian -Macropodidae -Macropodinae -macropodine -macropodous -macroprism -macroprocessor -macroprosopia -macropsy -macropsia -macropteran -macroptery -macropterous -macroptic -Macropus -macroreaction -Macrorhamphosidae -Macrorhamphosus -macrorhinia -Macrorhinus -macros -macro's -macroscale -macroscelia -Macroscelides -macroscian -macroscopic -macroscopical -macroscopically -macrosegment -macroseism -macroseismic -macroseismograph -macrosepalous -macroseptum -macrosymbiont -macrosmatic -macrosomatia -macrosomatous -macrosomia -macrospecies -macrosphere -macrosplanchnic -macrosporange -macrosporangium -macrospore -macrosporic -Macrosporium -macrosporophyl -macrosporophyll -macrosporophore -Macrostachya -macrostyle -macrostylospore -macrostylous -macrostomatous -macrostomia -macrostructural -macrostructure -macrothere -Macrotheriidae -macrotherioid -Macrotherium -macrotherm -macrotia -macrotin -Macrotolagus -macrotome -macrotone -macrotous -macrourid -Macrouridae -Macrourus -Macrozamia -macrozoogonidium -macrozoospore -Macrura -macrural -macruran -macrurans -macruroid -macrurous -macs -MACSYMA -MacSwan -mactation -Mactra -Mactridae -mactroid -macuca -macula -maculacy -maculae -macular -maculas -maculate -maculated -maculates -maculating -maculation -maculations -macule -maculed -macules -maculicole -maculicolous -maculiferous -maculing -maculocerebral -maculopapular -maculose -Macumba -Macungie -macupa -macupi -Macur -macushla -Macusi -macuta -macute -MAD -Mada -madafu -Madag -Madag. -Madagascan -Madagascar -Madagascarian -Madagass -Madai -Madaih -Madalena -Madalyn -Madalynne -madam -Madame -madames -madams -Madancy -Madang -madapolam -madapolan -madapollam -mad-apple -Madaras -Madariaga -madarosis -madarotic -Madawaska -madbrain -madbrained -mad-brained -mad-bred -madcap -madcaply -madcaps -MADD -Maddalena -madded -Madden -maddened -maddening -maddeningly -maddeningness -maddens -madder -madderish -madders -madderwort -maddest -Maddeu -Maddi -Maddy -Maddie -madding -maddingly -Maddis -maddish -maddle -maddled -Maddock -Maddocks -mad-doctor -Maddox -made -Madea -made-beaver -Madecase -madefaction -madefy -Madegassy -Madeira -Madeiran -madeiras -Madeiravine -Madel -Madelaine -Madeleine -Madelen -Madelena -Madelene -Madeli -Madelia -Madelin -Madelyn -Madelina -Madeline -Madella -Madelle -Madelon -mademoiselle -mademoiselles -made-over -Madera -Maderno -Madero -madescent -made-to-measure -made-to-order -made-up -Madge -madhab -mad-headed -Madhyamika -madhouse -madhouses -madhuca -Madhva -Madi -Mady -Madia -Madian -Madid -madidans -Madiga -Madigan -Madill -Madinensor -Madison -Madisonburg -Madisonville -madisterium -Madlen -madly -Madlin -Madlyn -madling -Madm -madman -madmen -MADN -madnep -madness -madnesses -mado -Madoc -Madoera -Madonia -Madonna -Madonnahood -Madonnaish -Madonnalike -madonnas -madoqua -Madora -Madotheca -Madox -Madra -madrague -Madras -madrasah -madrases -Madrasi -madrassah -madrasseh -madre -madreline -madreperl -madre-perl -Madrepora -Madreporacea -madreporacean -madreporal -Madreporaria -madreporarian -madrepore -madreporian -madreporic -madreporiform -madreporite -madreporitic -madres -Madrid -Madriene -madrier -madrigal -madrigaler -madrigalesque -madrigaletto -madrigalian -madrigalist -madrigals -madrih -madril -Madrilene -Madrilenian -madroa -madrona -madronas -madrone -madrones -madrono -madronos -mads -Madsen -madship -Madson -madstone -madtom -Madura -Madurai -Madurese -maduro -maduros -madweed -madwoman -madwomen -madwort -madworts -madzoon -madzoons -MAE -Maeander -Maeandra -Maeandrina -maeandrine -maeandriniform -maeandrinoid -maeandroid -Maebashi -Maebelle -Maecenas -Maecenasship -MAEd -Maegan -maegbot -maegbote -maeing -Maeystown -Mael -Maely -Maelstrom -maelstroms -Maemacterion -maenad -maenades -maenadic -maenadically -maenadism -maenads -maenaite -Maenalus -Maenidae -Maeon -Maeonian -Maeonides -Maera -MAeroE -maes -maestive -maestoso -maestosos -maestra -maestri -Maestricht -maestro -maestros -Maeterlinck -Maeterlinckian -Maeve -Maewo -MAF -Mafala -Mafalda -mafey -Mafeking -Maffa -Maffei -maffia -maffias -maffick -mafficked -mafficker -mafficking -mafficks -maffioso -maffle -maffler -mafflin -Mafia -mafias -mafic -mafiosi -Mafioso -mafoo -maftir -maftirs -mafura -mafurra -MAG -mag. -Maga -Magadhi -magadis -magadize -Magahi -Magalensia -Magalia -Magallanes -Magan -Magangue -magani -Magas -magasin -Magavern -magazinable -magazinage -magazine -magazined -magazinelet -magaziner -magazines -magazine's -magazinette -magaziny -magazining -magazinish -magazinism -magazinist -Magbie -magbote -Magda -Magdaia -Magdala -Magdalen -Magdalena -Magdalene -magdalenes -Magdalenian -Magdalenne -magdalens -magdaleon -Magdau -Magdeburg -mage -MAgEc -MAgEd -Magee -Magel -Magelhanz -Magellan -Magellanian -Magellanic -Magen -Magena -Magenta -magentas -magerful -Mages -magestical -magestically -magged -Maggee -Maggi -Maggy -Maggie -magging -Maggio -Maggiore -maggle -maggot -maggoty -maggotiness -maggotpie -maggot-pie -maggotry -maggots -maggot's -Maggs -Magh -Maghi -Maghreb -Maghrib -Maghribi -Maghutte -maghzen -Magi -Magian -Magianism -magians -Magyar -Magyaran -Magyarism -Magyarization -Magyarize -Magyarized -Magyarizing -Magyarorsz -Magyarorszag -magyars -magic -magical -magicalize -magically -magicdom -magician -magicians -magician's -magicianship -magicked -magicking -magico-religious -magico-sympathetic -magics -Magill -magilp -magilps -Magindanao -Magindanaos -Maginus -magiric -magirics -magirist -magiristic -magirology -magirological -magirologist -Magism -magister -magistery -magisterial -magisteriality -magisterially -magisterialness -magisteries -magisterium -magisters -magistracy -magistracies -magistral -magistrality -magistrally -magistrand -magistrant -magistrate -magistrates -magistrate's -magistrateship -magistratic -magistratical -magistratically -magistrative -magistrature -magistratus -Maglemose -Maglemosean -Maglemosian -maglev -magma -magmas -magmata -magmatic -magmatism -Magna -magnale -magnality -magnalium -magnanerie -magnanime -magnanimity -magnanimities -magnanimous -magnanimously -magnanimousness -magnanimousnesses -magnascope -magnascopic -magnate -magnates -magnateship -magne- -magnecrystallic -magnelectric -magneoptic -Magner -magnes -Magnesia -magnesial -magnesian -magnesias -magnesic -magnesioferrite -magnesite -magnesium -magnesiums -Magness -magnet -magnet- -magneta -magnetic -magnetical -magnetically -magneticalness -magnetician -magnetico- -magnetics -magnetiferous -magnetify -magnetification -magnetimeter -magnetisation -magnetise -magnetised -magnetiser -magnetising -magnetism -magnetisms -magnetism's -magnetist -magnetite -magnetite-basalt -magnetite-olivinite -magnetites -magnetite-spinellite -magnetitic -magnetizability -magnetizable -magnetization -magnetizations -magnetize -magnetized -magnetizer -magnetizers -magnetizes -magnetizing -magneto -magneto- -magnetobell -magnetochemical -magnetochemistry -magnetod -magnetodynamo -magnetoelectric -magneto-electric -magnetoelectrical -magnetoelectricity -magneto-electricity -magnetofluiddynamic -magnetofluiddynamics -magnetofluidmechanic -magnetofluidmechanics -magnetogasdynamic -magnetogasdynamics -magnetogenerator -magnetogram -magnetograph -magnetographic -magnetohydrodynamic -magnetohydrodynamically -magnetohydrodynamics -magnetoid -magnetolysis -magnetomachine -magnetometer -magnetometers -magnetometry -magnetometric -magnetometrical -magnetometrically -magnetomotive -magnetomotivity -magnetomotor -magneton -magnetons -magnetooptic -magnetooptical -magnetooptically -magnetooptics -magnetopause -magnetophone -magnetophonograph -magnetoplasmadynamic -magnetoplasmadynamics -magnetoplumbite -magnetoprinter -magnetoresistance -magnetos -magnetoscope -magnetosphere -magnetospheric -magnetostatic -magnetostriction -magnetostrictive -magnetostrictively -magnetotelegraph -magnetotelephone -magnetotelephonic -magnetotherapy -magnetothermoelectricity -magnetotransmitter -magnetron -magnets -magnicaudate -magnicaudatous -Magnien -magnify -magnifiable -magnific -magnifical -magnifically -Magnificat -magnificate -magnification -magnifications -magnificative -magnifice -magnificence -magnificences -magnificent -magnificently -magnificentness -magnifico -magnificoes -magnificos -magnified -magnifier -magnifiers -magnifies -magnifying -magnifique -magniloquence -magniloquent -magniloquently -magniloquy -magnipotence -magnipotent -magnirostrate -magnisonant -Magnitogorsk -magnitude -magnitudes -magnitude's -magnitudinous -magnochromite -magnoferrite -Magnolia -Magnoliaceae -magnoliaceous -magnolias -magnon -Magnum -magnums -Magnus -Magnuson -Magnusson -Magocsi -Magog -magot -magots -magpie -magpied -magpieish -magpies -MAgr -Magree -magrim -Magritte -Magruder -mags -magsman -maguari -maguey -magueys -Maguire -Magulac -Magus -Mah -maha -Mahabalipuram -Mahabharata -Mahadeva -Mahaffey -Mahayana -Mahayanism -Mahayanist -Mahayanistic -mahajan -mahajun -mahal -Mahala -mahalamat -mahaleb -mahaly -Mahalia -Mahalie -mahalla -Mahamaya -Mahan -Mahanadi -mahant -mahar -maharaj -maharaja -maharajah -maharajahs -maharajas -maharajrana -maharana -maharanee -maharanees -maharani -maharanis -maharao -Maharashtra -Maharashtri -maharawal -maharawat -maharishi -maharishis -maharmah -maharshi -Mahasamadhi -Mahaska -mahat -mahatma -mahatmaism -mahatmas -Mahau -Mahavira -mahbub -Mahdi -Mahdian -Mahdis -Mahdiship -Mahdism -Mahdist -Mahendra -Maher -mahesh -mahewu -Mahi -Mahican -Mahicans -mahimahi -mahjong -mahjongg -Mah-Jongg -mahjonggs -mahjongs -Mahla -Mahler -Mahlon -mahlstick -mahmal -Mahmoud -Mahmud -mahmudi -Mahnomen -mahoe -mahoes -mahogany -mahogany-brown -mahoganies -mahoganize -mahogony -mahogonies -mahoitre -maholi -maholtine -Mahomet -Mahometan -Mahometry -Mahon -mahone -Mahoney -Mahonia -mahonias -Mahopac -Mahori -Mahound -mahout -mahouts -Mahra -Mahran -Mahratta -Mahratti -Mahren -Mahri -Mahrisch-Ostrau -Mahri-sokotri -mahseer -mahsir -mahsur -Mahto -Mahtowa -mahu -mahua -mahuang -mahuangs -mahwa -Mahwah -mahzor -mahzorim -mahzors -Mai -May -Maia -Maya -Mayaca -Mayacaceae -mayacaceous -Maiacca -Mayag -Mayaguez -Maiah -Mayakovski -Mayakovsky -Mayan -Mayance -mayans -Maianthemum -mayapis -mayapple -may-apple -mayapples -Maya-quiche -Mayas -Mayathan -Maibach -maybe -Maybee -Maybell -Maybelle -Mayberry -maybes -Maybeury -Maybird -Maible -Maybloom -Maybrook -may-bug -maybush -may-bush -maybushes -may-butter -Maice -Mayce -Maycock -maid -Maida -Mayda -Mayday -May-day -maydays -maidan -Maidanek -maidchild -Maidel -Maydelle -maiden -maidenchild -maidenhair -maidenhairs -maidenhairtree -maidenhair-tree -maidenhair-vine -Maidenhead -maidenheads -maidenhood -maidenhoods -maidenish -maidenism -maidenly -maidenlike -maidenliness -Maidens -maidenship -maiden's-tears -maiden's-wreath -maiden's-wreaths -maidenweed -may-dew -maidhead -maidhood -maidhoods -Maidy -Maidie -maidin -maid-in-waiting -maidish -maidishness -maidism -maidkin -maidly -maidlike -maidling -maids -maidservant -maidservants -maids-hair -maids-in-waiting -Maidstone -Maidsville -Maidu -Maiduguri -mayduke -Maye -mayed -Mayeda -maiefic -Mayey -Mayeye -Mayence -Mayenne -Maier -Mayer -Mayersville -Mayes -mayest -Mayesville -Mayetta -maieutic -maieutical -maieutics -Mayfair -Mayfield -mayfish -mayfishes -Mayfly -may-fly -mayflies -Mayflower -mayflowers -Mayfowl -Maiga -may-game -Maighdiln -Maighdlin -maigre -mayhap -mayhappen -mayhaps -maihem -mayhem -mayhemmed -mayhemming -maihems -mayhems -Mayhew -maiid -Maiidae -Maying -mayings -Mayking -Maikop -mail -mailability -mailable -may-lady -Mailand -mailbag -mailbags -mailbox -mailboxes -mailbox's -mailcatcher -mail-cheeked -mailclad -mailcoach -mail-coach -maile -mailed -mailed-cheeked -Maylene -Mailer -mailers -mailes -mailguard -mailie -Maylike -mailing -mailings -maill -Maillart -maille -maillechort -mailless -Maillol -maillot -maillots -maills -mailman -mailmen -may-lord -mailperson -mailpersons -mailplane -mailpouch -mails -mailsack -mailwoman -mailwomen -maim -Mayman -Mayme -maimed -maimedly -maimedness -maimer -maimers -maiming -maimon -Maimonidean -Maimonides -Maimonist -maims -maimul -Main -Mainan -Maynard -Maynardville -Mainauer -mainbrace -main-brace -main-course -main-deck -main-de-fer -Maine -Mayne -Maine-et-Loire -Mainer -Mainesburg -Maynet -Maineville -mainferre -mainframe -mainframes -mainframe's -main-guard -main-yard -main-yardman -Mainis -Mainland -mainlander -mainlanders -mainlands -mainly -mainline -mainlined -mainliner -mainliners -mainlines -mainlining -mainmast -mainmasts -mainmortable -mainor -Maynord -mainour -mainpast -mainpernable -mainpernor -mainpin -mainport -mainpost -mainprise -mainprised -mainprising -mainprisor -mainprize -mainprizer -mains -mainsail -mainsails -mainsheet -main-sheet -mainspring -mainsprings -mainstay -mainstays -mainstream -mainstreams -Mainstreeter -Mainstreetism -mainswear -mainsworn -maint -maynt -mayn't -maintain -maintainability -maintainabilities -maintainable -maintainableness -maintainance -maintainances -maintained -maintainer -maintainers -maintaining -maintainment -maintainor -maintains -maintenance -maintenances -maintenance's -Maintenon -maintien -maintop -main-top -main-topgallant -main-topgallantmast -maintopman -maintopmast -main-topmast -maintopmen -maintops -maintopsail -main-topsail -mainward -Mainz -Mayo -Maiocco -Mayodan -maioid -Maioidea -maioidean -Maioli -maiolica -maiolicas -Mayologist -Mayon -Maiongkong -mayonnaise -mayonnaises -Mayor -mayoral -mayorality -mayoralty -mayoralties -mayor-elect -mayoress -mayoresses -mayors -mayor's -mayorship -mayorships -Mayoruna -mayos -Mayotte -Maypearl -Maypole -maypoles -Maypoling -maypop -maypops -Mayport -Maipure -Mair -mairatour -Maire -mairie -mairs -Mays -Maise -Maisey -Maisel -Maysel -Maysfield -Maisie -maysin -Mayslick -Maison -maison-dieu -maisonette -maisonettes -maist -mayst -maister -maistres -maistry -maists -Maysville -Mai-Tai -Maite -mayten -Maytenus -maythe -maythes -Maithili -Maythorn -maithuna -Maytide -Maitilde -Maytime -Maitland -maitlandite -Maytown -maitre -Maitreya -maitres -maitresse -maitrise -Maitund -Maius -Mayview -Mayville -mayvin -mayvins -mayweed -mayweeds -Maywings -Maywood -may-woon -Mayworm -Maywort -Maize -maizebird -maize-eater -maizenic -maizer -maizes -Maj -Maja -Majagga -majagua -majaguas -majas -Maje -Majesta -majestatic -majestatis -Majesty -majestic -majestical -majestically -majesticalness -majesticness -majesties -majestious -majesty's -majestyship -majeure -majidieh -Majka -Majlis -majo -majolica -majolicas -majolist -ma-jong -majoon -Major -majora -majorat -majorate -majoration -Majorca -Majorcan -majordomo -major-domo -majordomos -major-domos -major-domoship -majored -majorem -majorette -majorettes -major-general -major-generalcy -major-generalship -majoring -Majorism -Majorist -Majoristic -majoritarian -majoritarianism -majority -majorities -majority's -majorize -major-league -major-leaguer -majors -majorship -majos -Majunga -Majuro -majusculae -majuscular -majuscule -majuscules -Mak -makable -makadoo -Makah -makahiki -makale -Makalu -Makanda -makar -makara -Makaraka -Makari -makars -Makasar -Makassar -makatea -Makawao -Makaweli -make -make- -makeable -make-ado -makebate -makebates -make-belief -make-believe -Makedhonia -make-do -makedom -Makeevka -make-faith -make-falcon -makefast -makefasts -makefile -make-fire -make-fray -make-game -make-hawk -Makeyevka -make-king -make-law -makeless -Makell -make-mirth -make-or-break -make-peace -Maker -makeready -make-ready -makeress -maker-off -makers -makership -maker-up -makes -make-shame -makeshift -makeshifty -makeshiftiness -makeshiftness -makeshifts -make-sport -make-talk -makeup -make-up -makeups -make-way -makeweight -make-weight -makework -make-work -Makhachkala -makhorka -makhzan -makhzen -maki -makimono -makimonos -Makinen -making -makings -making-up -Makkah -makluk -mako -makomako -Makonde -makopa -makos -Makoti -makoua -makran -makroskelic -maksoorah -Maku -Makua -makuk -Makurdi -makuta -makutas -makutu -MAL -mal- -Mala -malaanonang -Malabar -Malabarese -malabathrum -Malabo -malabsorption -malac- -malacanthid -Malacanthidae -malacanthine -Malacanthus -malacaton -Malacca -Malaccan -malaccas -malaccident -Malaceae -malaceous -Malachi -Malachy -malachite -malacia -Malaclemys -malaclypse -malaco- -Malacobdella -Malacocotylea -malacoderm -Malacodermatidae -malacodermatous -Malacodermidae -malacodermous -malacoid -malacolite -malacology -malacologic -malacological -malacologist -malacon -malacone -malacophyllous -malacophilous -malacophonous -malacopod -Malacopoda -malacopodous -malacopterygian -Malacopterygii -malacopterygious -Malacoscolices -Malacoscolicine -Malacosoma -Malacostraca -malacostracan -malacostracology -malacostracous -malacotic -malactic -maladapt -maladaptation -maladapted -maladaptive -maladdress -malade -malady -maladies -malady's -maladive -maladjust -maladjusted -maladjustive -maladjustment -maladjustments -maladminister -maladministered -maladministering -maladministers -maladministration -maladministrative -maladministrator -maladresse -maladroit -maladroitly -maladroitness -maladventure -Malaga -malagash -Malagasy -Malagigi -malagma -malaguea -malaguena -malaguenas -malaguetta -malahack -Malay -Malaya -Malayalam -Malayalim -Malayan -malayans -Malayic -Malayize -malayo- -Malayoid -Malayo-Indonesian -Malayo-Javanese -Malayo-negrito -Malayo-Polynesian -malays -malaise -malaises -Malaysia -Malaysian -malaysians -Malakal -malakin -Malakoff -malakon -malalignment -malam -malambo -Malamud -Malamut -malamute -malamutes -Malan -malander -malandered -malanders -malandrous -Malang -malanga -malangas -Malange -Malanie -Malanje -malapaho -malapert -malapertly -malapertness -malaperts -malapi -malapplication -malappointment -malapportioned -malapportionment -malappropriate -malappropriation -Malaprop -malapropian -malapropish -malapropism -malapropisms -malapropoism -malapropos -malaprops -Malapterurus -Malar -malaria -malarial -malarian -malariaproof -malarias -malarin -malarioid -malariology -malariologist -malariotherapy -malarious -Malarkey -malarkeys -malarky -malarkies -malaroma -malaromas -malarrangement -malars -malasapsap -Malaspina -malassimilation -malassociation -malate -malates -Malatesta -Malathion -malati -Malatya -malattress -Malawi -malawians -malax -malaxable -malaxage -malaxate -malaxation -malaxator -malaxed -malaxerman -malaxermen -malaxing -Malaxis -malbehavior -malbrouck -Malca -Malcah -Malchy -malchite -Malchus -Malcolm -Malcom -malconceived -malconduct -malconformation -malconstruction -malcontent -malcontented -malcontentedly -malcontentedness -malcontentism -malcontently -malcontentment -malcontents -malconvenance -malcreated -malcultivation -MALD -Malda -Malden -maldeveloped -maldevelopment -maldigestion -maldirection -maldistribute -maldistribution -Maldive -Maldives -Maldivian -maldocchio -Maldon -maldonite -malduck -Male -male- -maleability -malease -maleate -maleates -maleberry -Malebolge -Malebolgian -Malebolgic -Malebranche -Malebranchism -Malecite -maledicent -maledict -maledicted -maledicting -malediction -maledictions -maledictive -maledictory -maledicts -maleducation -malee -Maleeny -malefaction -malefactions -malefactor -malefactory -malefactors -malefactor's -malefactress -malefactresses -malefeazance -malefic -malefical -malefically -malefice -maleficence -maleficences -maleficent -maleficently -maleficia -maleficial -maleficiate -maleficiation -maleficio -maleficium -maleic -maleinoid -maleinoidal -Malek -Maleki -malella -malellae -malemiut -malemiuts -malemuit -malemuits -Malemute -malemutes -Malena -maleness -malenesses -malengin -malengine -Malenkov -malentendu -mal-entendu -maleo -maleos -maleruption -males -male's -Malesherbia -Malesherbiaceae -malesherbiaceous -male-sterile -Malet -maletolt -maletote -Maletta -Malevich -malevolence -malevolences -malevolency -malevolent -malevolently -malevolous -malexecution -malfeasance -malfeasances -malfeasant -malfeasantly -malfeasants -malfeasor -malfed -malformation -malformations -malformed -malfortune -malfunction -malfunctioned -malfunctioning -malfunctions -malgovernment -malgr -malgrace -malgrado -malgre -malguzar -malguzari -Malherbe -malheur -malhygiene -malhonest -Mali -Malia -Malibran -Malibu -malic -malice -maliceful -maliceproof -malices -malicho -malicious -maliciously -maliciousness -malicorium -malidentification -malie -maliferous -maliform -malign -malignance -malignancy -malignancies -malignant -malignantly -malignation -maligned -maligner -maligners -malignify -malignified -malignifying -maligning -malignity -malignities -malignly -malignment -maligns -malihini -malihinis -Malik -malikadna -malikala -malikana -Maliki -Malikite -malikzadi -malimprinted -Malin -Malina -malinche -Malinda -Malynda -Malinde -maline -Malines -malinfluence -malinger -malingered -malingerer -malingerers -malingery -malingering -malingers -Malinin -Malinke -Malinois -Malinovsky -Malinowski -malinowskite -malinstitution -malinstruction -Malinta -malintent -malinvestment -Malipiero -malism -malison -malisons -Malissa -Malissia -malist -malistic -Malita -malitia -Maljamar -Malka -Malkah -Malkin -malkins -Malkite -Mall -malladrite -mallam -mallanders -mallangong -mallard -mallardite -mallards -Mallarme -malleability -malleabilities -malleabilization -malleable -malleableize -malleableized -malleableizing -malleableness -malleably -malleablize -malleablized -malleablizing -malleal -mallear -malleate -malleated -malleating -malleation -mallecho -malled -mallee -mallees -mallei -Malley -Malleifera -malleiferous -malleiform -mallein -malleinization -malleinize -malleli -mallemaroking -mallemuck -Mallen -mallender -mallenders -malleoincudal -malleolable -malleolar -malleoli -malleolus -Maller -Mallet -malleted -malleting -mallets -mallet's -malleus -Mallia -Mallie -Mallin -Mallina -Malling -Mallis -Mallissa -Malloch -Malloy -Mallon -Mallophaga -mallophagan -mallophagous -Mallorca -Mallory -Mallorie -malloseismic -Mallotus -mallow -mallows -mallowwort -malls -mallum -mallus -malm -malmag -Malmaison -malmarsh -Malmdy -malmed -Malmedy -Malmesbury -malmy -malmier -malmiest -malmignatte -malming -Malmo -malmock -malms -malmsey -malmseys -malmstone -malnourished -malnourishment -malnutrite -malnutrition -malnutritions -Malo -malobservance -malobservation -mal-observation -maloca -malocchio -maloccluded -malocclusion -malocclusions -malodor -malodorant -malodorous -malodorously -malodorousness -malodorousnesses -malodors -malodour -Maloy -malojilla -malolactic -malonate -Malone -Maloney -Maloneton -Malony -malonic -malonyl -malonylurea -Malonis -Malope -maloperation -malorganization -malorganized -Malory -Malorie -maloti -Malott -malouah -malpais -Malpighi -Malpighia -Malpighiaceae -malpighiaceous -Malpighian -malplaced -malpoise -malposed -malposition -malpractice -malpracticed -malpractices -malpracticing -malpractioner -malpractitioner -malpraxis -malpresentation -malproportion -malproportioned -malpropriety -malpublication -Malraux -malreasoning -malrotation -MALS -malshapen -malsworn -malt -Malta -maltable -maltalent -maltase -maltases -malt-dust -malted -malteds -malter -Maltese -maltha -malthas -Malthe -malthene -malthite -malt-horse -malthouse -malt-house -Malthus -Malthusian -Malthusianism -Malthusiast -Malti -malty -maltier -maltiest -maltine -maltiness -malting -maltman -Malto -maltobiose -maltodextrin -maltodextrine -maltol -maltols -maltolte -Malton -maltose -maltoses -maltreat -maltreated -maltreating -maltreatment -maltreatments -maltreator -maltreats -malts -maltster -maltsters -malturned -maltworm -malt-worm -Maltz -Maltzman -Maluku -malum -malunion -Malurinae -malurine -Malurus -Malus -Malva -Malvaceae -malvaceous -malval -Malvales -Malvasia -malvasian -malvasias -Malvastrum -Malvern -Malverne -malversation -malverse -Malvia -Malvie -Malvin -Malvina -Malvine -Malvino -malvoisie -malvolition -malwa -Mam -Mama -mamaguy -mamaliga -Mamallapuram -mamaloi -mamamouchi -mamamu -Mamaroneck -mamas -mamba -mambas -mambo -mamboed -mamboes -mamboing -mambos -mambu -Mame -mamey -mameyes -mameys -mameliere -mamelon -mamelonation -mameluco -Mameluke -mamelukes -Mamercus -Mamers -Mamertine -Mamertino -Mamie -mamies -Mamilius -mamilla -mamillary -mamillate -mamillated -mamillation -Mamisburg -mamlatdar -mamluk -mamluks -mamlutdar -mamma -mammae -mammal -mammalgia -Mammalia -mammalian -mammalians -mammaliferous -mammality -mammalogy -mammalogical -mammalogist -mammalogists -mammals -mammal's -mammary -mammas -mamma's -mammate -mammati -mammatocumulus -mammato-cumulus -mammatus -Mammea -mammectomy -mammee -mammees -mammey -mammeys -mammer -mammered -mammering -mammers -mammet -mammets -mammy -mammie -mammies -mammifer -Mammifera -mammiferous -mammiform -mammilate -mammilated -mammilla -mammillae -mammillaplasty -mammillar -mammillary -Mammillaria -mammillate -mammillated -mammillation -mammilliform -mammilloid -mammilloplasty -mammin -mammitides -mammitis -mammock -mammocked -mammocking -mammocks -mammodi -mammogen -mammogenic -mammogenically -mammogram -mammography -mammographic -mammographies -Mammon -mammondom -mammoni -mammoniacal -mammonish -mammonism -mammonist -mammonistic -mammonite -mammonitish -mammonization -mammonize -mammonolatry -mammons -Mammonteus -mammose -mammoth -mammothrept -mammoths -mammotomy -mammotropin -mammula -mammulae -mammular -Mammut -Mammutidae -mamo -mamona -mamoncillo -mamoncillos -Mamor -Mamore -mamoty -Mamou -Mamoun -mampalon -mampara -mampus -mamry -mamsell -Mamurius -mamushi -mamzer -MAN -Man. -Mana -man-abhorring -man-about-town -Manabozho -manace -manacing -manacle -manacled -manacles -manacling -Manacus -manada -Manado -manage -manageability -manageabilities -manageable -manageableness -manageablenesses -manageably -managed -managee -manageless -management -managemental -managements -management's -manager -managerdom -manageress -managery -managerial -managerially -managers -manager's -managership -manages -managing -Managua -Manahawkin -manaism -manak -Manaker -manakin -manakins -Manakinsabot -manal -Manala -Manama -manana -mananas -Manannn -Manara -Manard -manarvel -manas -manasic -Manasquan -Manassa -Manassas -Manasseh -Manasses -Manassite -Manat -man-at-arms -manatee -manatees -Manati -Manatidae -manatine -manation -manatoid -Manatus -Manaus -manavel -manavelins -manavendra -manavilins -manavlins -Manawa -Manawyddan -manba -man-back -manbarklak -man-bearing -man-begot -manbird -man-bodied -man-born -manbot -manbote -manbria -man-brute -mancala -mancando -man-carrying -man-catching -Mancelona -man-centered -Manchaca -man-changed -Manchaug -Manche -manches -Manchester -Manchesterdom -Manchesterism -Manchesterist -Manchestrian -manchet -manchets -manchette -manchild -man-child -manchineel -Manchu -Manchukuo -Manchuria -Manchurian -manchurians -Manchus -mancy -mancinism -Mancino -mancipable -mancipant -mancipare -mancipate -mancipation -mancipative -mancipatory -mancipee -mancipia -mancipium -manciple -manciples -mancipleship -mancipular -man-compelling -mancono -Mancos -man-created -Mancunian -mancus -mand -Manda -mandacaru -Mandaean -Mandaeism -man-day -Mandaic -man-days -Mandaite -Mandal -mandala -Mandalay -mandalas -mandalic -mandament -mandamus -mandamuse -mandamused -mandamuses -mandamusing -Mandan -mandant -mandapa -mandar -mandarah -Mandaree -Mandarin -mandarinate -mandarindom -mandarined -mandariness -mandarinic -mandarining -mandarinism -mandarinize -mandarins -mandarinship -mandat -mandatary -mandataries -mandate -mandated -mandatedness -mandatee -mandates -mandating -mandation -mandative -mandator -mandatory -mandatories -mandatorily -mandatoriness -mandators -mandats -mandatum -Mande -Mandean -man-degrading -Mandel -mandelate -Mandelbaum -mandelic -Mandell -manderelle -Manderson -man-destroying -Mandeville -man-devised -man-devouring -Mandi -Mandy -mandyai -mandyas -mandyases -mandible -mandibles -mandibula -mandibular -mandibulary -Mandibulata -mandibulate -mandibulated -mandibuliform -mandibulo- -mandibulo-auricularis -mandibulohyoid -mandibulomaxillary -mandibulopharyngeal -mandibulosuspensorial -Mandych -Mandie -mandyi -mandil -mandilion -Mandingan -Mandingo -Mandingoes -Mandingos -mandioca -mandiocas -mandir -Mandle -mandlen -Mandler -mandment -mando-bass -mando-cello -mandoer -mandola -mandolas -mandolin -mandoline -mandolinist -mandolinists -mandolins -mandolute -mandom -mandora -mandore -mandorla -mandorlas -mandorle -mandra -mandragora -mandragvn -mandrake -mandrakes -mandrel -mandrels -mandriarch -mandril -mandrill -mandrills -mandrils -mandrin -mandritta -mandruka -mands -mandua -manducable -manducate -manducated -manducating -manducation -manducatory -mane -man-eater -man-eating -maned -manege -maneges -maneh -manei -maney -maneless -Manella -man-enchanting -man-enslaved -manent -manequin -manerial -Manes -mane's -manesheet -maness -Manet -Manetho -Manetti -Manettia -maneuver -maneuverability -maneuverabilities -maneuverable -maneuvered -maneuverer -maneuvering -maneuvers -maneuvrability -maneuvrable -maneuvre -maneuvred -maneuvring -man-fashion -man-fearing -manfish -man-forked -Manfred -Manfreda -manful -manfully -manfulness -mang -manga -mangabey -mangabeira -mangabeys -mangabev -mangaby -mangabies -mangal -Mangalitza -Mangalore -mangan- -mangana -manganapatite -manganate -manganblende -manganbrucite -manganeisen -manganese -manganeses -manganesian -manganesic -manganetic -manganhedenbergite -manganic -manganiferous -Manganin -manganite -manganium -manganize -Manganja -manganocalcite -manganocolumbite -manganophyllite -manganosiderite -manganosite -manganostibiite -manganotantalite -manganous -manganpectolite -Mangar -Mangarevan -Mangbattu -mange -mangeao -mangey -mangeier -mangeiest -mangel -mangelin -mangels -mangelwurzel -mangel-wurzel -mange-mange -manger -mangery -mangerite -mangers -manger's -manges -Mangham -mangi -mangy -Mangyan -mangier -mangiest -Mangifera -mangily -manginess -mangle -mangled -mangleman -mangler -manglers -mangles -mangling -manglingly -Mango -man-god -mangoes -Mangohick -mangold -mangolds -mangold-wurzel -mangona -mangonel -mangonels -mangonism -mangonization -mangonize -mangoro -mangos -mango-squash -mangosteen -mangour -mangrass -mangrate -mangrove -mangroves -man-grown -Mangrum -Mangue -Mangum -mangwe -manhaden -manhandle -man-handle -manhandled -manhandler -manhandles -manhandling -Manhasset -man-hater -man-hating -Manhattan -Manhattanite -Manhattanize -manhattans -manhead -man-headed -Manheim -man-high -manhole -man-hole -manholes -manhood -manhoods -man-hour -manhours -manhunt -manhunter -man-hunter -manhunting -manhunts -Mani -many -many- -mania -Manya -maniable -maniac -maniacal -maniacally -many-acred -maniacs -maniac's -many-angled -maniaphobia -many-armed -manias -manyatta -many-banded -many-beaming -many-belled -manyberry -many-bleating -many-blossomed -many-blossoming -many-branched -many-breasted -manic -manically -Manicamp -Manicaria -manicate -manic-depressive -many-celled -Manichae -Manichaean -Manichaeanism -Manichaeanize -Manichaeism -Manichaeist -Manichaeus -many-chambered -Manichean -Manicheanism -Manichee -Manicheism -Manicheus -manichord -manichordon -many-cobwebbed -manicole -many-colored -many-coltered -manicon -manicord -many-cornered -manicotti -manics -maniculatus -manicure -manicured -manicures -manicuring -manicurist -manicurists -manid -Manidae -manie -man-year -many-eared -many-eyed -Manyema -manienie -maniere -many-faced -many-facedness -many-faceted -manifer -manifest -manifesta -manifestable -manifestant -manifestation -manifestational -manifestationist -manifestations -manifestation's -manifestative -manifestatively -manifested -manifestedness -manifester -manifesting -manifestive -manifestly -manifestness -manifesto -manifestoed -manifestoes -manifestos -manifests -manify -manificum -many-flowered -manifold -manyfold -manifolded -many-folded -manifolder -manifolding -manifoldly -manifoldness -manifolds -manifold's -manifoldwise -maniform -many-formed -many-fountained -many-gifted -many-handed -many-headed -many-headedness -many-horned -Manihot -manihots -many-hued -many-yeared -many-jointed -manikin -manikinism -manikins -many-knotted -Manila -many-lay -many-languaged -manilas -many-leaved -many-legged -manilio -Manilius -many-lived -Manilla -manillas -manille -manilles -many-lobed -many-meaning -many-millioned -many-minded -many-mingled -many-mingling -many-mouthed -many-named -many-nationed -many-nerved -manyness -manini -Maninke -manioc -manioca -maniocas -maniocs -many-one -Manyoshu -many-parted -many-peopled -many-petaled -many-pigeonholed -many-pillared -maniple -maniples -manyplies -many-pointed -manipulability -manipulable -manipular -manipulary -manipulatability -manipulatable -manipulate -manipulated -manipulates -manipulating -manipulation -manipulational -manipulations -manipulative -manipulatively -manipulator -manipulatory -manipulators -manipulator's -Manipur -Manipuri -many-rayed -many-ranked -many-ribbed -manyroot -many-rooted -many-rowed -Manis -Manisa -many-seated -many-seatedness -many-seeded -many-sided -manysidedness -many-sidedness -many-syllabled -manism -many-sounding -many-spangled -many-spotted -manist -Manistee -many-steepled -many-stemmed -manistic -Manistique -many-storied -many-stringed -manit -many-tailed -Manity -many-tinted -Manito -Manitoba -Manitoban -many-toned -many-tongued -manitos -Manitou -Manitoulin -manitous -many-towered -Manitowoc -many-tribed -manitrunk -manitu -many-tubed -manitus -many-twinkling -maniu -Manius -Maniva -many-valued -many-valved -many-veined -many-voiced -manyways -many-wandering -many-weathered -manywhere -many-winding -many-windowed -many-wintered -manywise -Manizales -manjack -manjak -manjeet -manjel -manjeri -Manjusri -mank -Mankato -man-keen -mankeeper -manky -mankie -Mankiewicz -mankiller -man-killer -mankilling -man-killing -mankin -mankind -mankindly -mankind's -manks -Manley -manless -manlessly -manlessness -manlet -Manly -manlier -manliest -manlihood -manlike -manlikely -manlikeness -manlily -manliness -manling -Manlius -Manlove -manmade -man-made -man-maiming -man-making -man-midwife -man-midwifery -man-milliner -man-mimicking -man-minded -man-minute -Mann -mann- -manna -manna-croup -Mannaean -mannaia -mannan -mannans -Mannar -mannas -Mannboro -manned -mannequin -mannequins -manner -mannerable -mannered -manneredness -Mannerheim -mannerhood -mannering -mannerism -mannerisms -Mannerist -manneristic -manneristical -manneristically -mannerize -mannerless -mannerlessness -mannerly -mannerliness -mannerlinesses -Manners -mannersome -Mannes -manness -mannet -Mannford -Mannheim -Mannheimar -Manny -mannide -Mannie -manniferous -mannify -mannified -mannikin -mannikinism -mannikins -Manning -Mannington -mannire -mannish -mannishly -mannishness -mannishnesses -mannitan -mannite -mannites -mannitic -mannitol -mannitols -mannitose -Mannlicher -Manno -mannoheptite -mannoheptitol -mannoheptose -mannoketoheptose -mannonic -mannopus -Mannos -mannosan -mannose -mannoses -Mannschoice -Mannsville -Mannuela -Mano -Manoah -Manobo -manoc -manoeuver -manoeuvered -manoeuvering -manoeuvre -manoeuvred -manoeuvreing -manoeuvrer -manoeuvring -Manoff -man-of-the-earths -man-of-war -manograph -manoir -Manokin -Manokotak -Manolete -manolis -Manolo -Manomet -manometer -manometers -manometer's -manometry -manometric -manometrical -manometrically -manometries -manomin -Manon -manor -man-orchis -Manorhaven -manor-house -manorial -manorialism -manorialisms -manorialize -manors -manor's -manorship -Manorville -manos -manoscope -manostat -manostatic -Manouch -man-o'-war -manpack -man-pleasing -manpower -manpowers -manqu -manque -manquee -manqueller -Manquin -manred -manrent -Manresa -man-ridden -manroot -manrope -manropes -Mans -man's -Mansard -mansarded -mansards -Mansart -manscape -manse -manser -manservant -man-servant -manses -Mansfield -man-shaped -manship -Mansholt -mansion -mansional -mansionary -mansioned -mansioneer -mansion-house -mansionry -mansions -mansion's -man-size -man-sized -manslayer -manslayers -manslaying -manslaughter -manslaughterer -manslaughtering -manslaughterous -manslaughters -manso -Manson -mansonry -Mansoor -Mansra -man-stalking -manstealer -manstealing -manstopper -manstopping -man-subduing -mansuete -mansuetely -mansuetude -man-supporting -Mansur -Mansura -manswear -mansworn -mant -Manta -Mantachie -Mantador -man-tailored -mantal -mantapa -mantappeaux -mantas -man-taught -manteau -manteaus -manteaux -Manteca -Mantee -manteel -mantegar -Mantegna -mantel -mantelet -mantelets -manteline -Mantell -mantelletta -mantellone -mantellshelves -mantelpiece -mantelpieces -mantels -mantel's -mantelshelf -manteltree -mantel-tree -Manteno -Manteo -Manter -mantes -mantevil -Manthei -Manti -manty -mantic -mantically -manticism -manticora -manticore -mantid -Mantidae -mantids -mantilla -mantillas -Mantinea -Mantinean -mantis -mantises -Mantisia -Mantispa -mantispid -Mantispidae -mantissa -mantissas -mantissa's -mantistic -Mantius -Mantle -mantled -mantlepiece -mantlepieces -mantlerock -mantle-rock -mantles -mantle's -mantlet -mantletree -mantlets -mantling -mantlings -Manto -Mantodea -mantoid -Mantoidea -mantology -mantologist -Mantoloking -man-to-man -Manton -Mantorville -Mantova -mantra -mantram -mantrap -man-trap -mantraps -mantras -mantric -Mantua -mantuamaker -mantuamaking -Mantuan -mantuas -Mantzu -Manu -manual -manualii -manualism -manualist -manualiter -manually -manuals -manual's -manuao -manuary -manubaliste -manubria -manubrial -manubriated -manubrium -manubriums -manucaption -manucaptor -manucapture -manucode -Manucodia -manucodiata -manuduce -manuduct -manuduction -manuductive -manuductor -manuductory -Manue -Manuel -Manuela -manuever -manueverable -manuevered -manuevers -manuf -manuf. -manufact -manufaction -manufactor -manufactory -manufactories -manufacturable -manufactural -manufacture -manufactured -manufacturer -manufacturers -manufacturer's -manufactures -manufacturess -manufacturing -manuka -Manukau -manul -manuma -manumea -manumisable -manumise -manumission -manumissions -manumissive -manumit -manumits -manumitted -manumitter -manumitting -manumotive -manuprisor -manurable -manurage -manurance -manure -manured -manureless -manurement -manurer -manurers -manures -Manuri -manurial -manurially -manuring -Manus -manuscript -manuscriptal -manuscription -manuscripts -manuscript's -manuscriptural -manusina -manustupration -manutagi -manutenency -manutergium -Manutius -Manvantara -Manvel -Manvell -Manvil -Manville -manway -manward -manwards -manweed -Manwell -manwise -man-woman -man-worshiping -manworth -man-worthy -man-worthiness -Manx -Manxman -Manxmen -Manxwoman -manzana -Manzanilla -manzanillo -manzanita -Manzanola -Manzas -manzil -Manzoni -Manzu -Mao -Maoism -Maoist -maoists -maomao -Maori -Maoridom -Maoriland -Maorilander -Maoris -maormor -MAP -mapach -mapache -mapau -Mapaville -Mapel -Mapes -maphrian -mapland -maple -maplebush -Maplecrest -mapleface -maple-faced -maple-leaved -maplelike -Maples -maple's -Mapleshade -Maplesville -Mapleton -Mapleview -Mapleville -Maplewood -maplike -mapmaker -mapmakers -mapmaking -mapo -mappable -Mappah -mapped -mappemonde -mappen -mapper -mappers -mappy -Mappila -mapping -mappings -mapping's -mappist -Mappsville -maps -map's -MAPSS -MAPTOP -Mapuche -Maputo -mapwise -maquahuitl -maquereau -maquette -maquettes -maqui -maquillage -Maquiritare -maquis -maquisard -Maquoketa -Maquon -MAR -mar- -Mar. -Mara -Marabel -Marabelle -marabotin -marabou -marabous -Marabout -maraboutism -marabouts -marabunta -marabuto -maraca -Maracay -Maracaibo -maracan -Maracanda -maracas -maracock -marae -Maragato -marage -maraged -maraging -marah -maray -marais -Maraj -marajuana -marakapas -maral -Marala -Maralina -Maraline -Maramec -Marana -maranao -maranatha -marang -Maranh -Maranha -Maranham -Maranhao -Maranon -Maranta -Marantaceae -marantaceous -marantas -marantic -marara -mararie -maras -Marasar -marasca -marascas -maraschino -maraschinos -Marasco -Marashio -marasmic -Marasmius -marasmoid -marasmous -marasmus -marasmuses -Marat -Maratha -Marathi -Marathon -marathoner -Marathonian -marathons -Maratism -Maratist -Marattia -Marattiaceae -marattiaceous -Marattiales -maraud -marauded -marauder -marauders -marauding -marauds -maravedi -maravedis -Maravi -marbelization -marbelize -marbelized -marbelizing -MARBI -Marble -marble-arched -marble-breasted -marble-calm -marble-checkered -marble-colored -marble-constant -marble-covered -marbled -marble-faced -marble-grinding -marble-hard -Marblehead -marbleheader -marblehearted -marble-imaged -marbleization -marbleize -marbleized -marbleizer -marbleizes -marbleizing -marblelike -marble-looking -marble-minded -marble-mindedness -marbleness -marble-pale -marble-paved -marble-piled -marble-pillared -marble-polishing -marble-quarrying -marbler -marble-ribbed -marblers -marbles -marble-sculptured -marble-topped -marble-white -marblewood -marbly -marblier -marbliest -marbling -marblings -marblish -marbrinus -Marburg -Marbury -Marbut -MARC -Marcan -marcando -marcantant -Marcantonio -marcasite -marcasitic -marcasitical -marcassin -marcatissimo -marcato -Marceau -Marcel -Marcela -Marcelia -Marceline -Marcell -Marcella -Marcelle -marcelled -marceller -Marcellette -Marcellian -Marcellianism -Marcellina -Marcelline -marcelling -Marcello -Marcellus -Marcelo -marcels -marcescence -marcescent -marcgrave -Marcgravia -Marcgraviaceae -marcgraviaceous -MArch -March. -Marchak -Marchal -Marchall -Marchand -Marchantia -Marchantiaceae -marchantiaceous -Marchantiales -MArchE -marched -Marchelle -Marchen -marcher -marchers -Marches -marchesa -Marchese -Marcheshvan -marchesi -marchet -Marchette -marchetti -marchetto -marching -marchioness -marchionesses -marchioness-ship -marchite -marchland -march-land -marchman -march-man -marchmen -Marchmont -marchpane -march-past -Marci -Marcy -Marcia -Marcian -Marciano -Marcianus -marcid -Marcie -Marcile -Marcille -Marcin -Marcion -Marcionism -Marcionist -Marcionite -Marcionitic -Marcionitish -Marcionitism -Marcite -Marcius -Marco -Marcobrunner -Marcola -Marcomanni -Marcomannic -Marconi -marconigram -marconigraph -marconigraphy -Marconi-rigged -marcor -Marcos -Marcosian -marcot -marcottage -Marcoux -marcs -Marcus -Marcuse -Marcushook -Marden -Marder -Mardi -mardy -Mardochai -Marduk -Mare -Mareah -mareblob -Mareca -marechal -marechale -Maregos -Marehan -Marek -marekanite -Marela -Mareld -Marelda -Marelya -Marella -maremma -maremmatic -maremme -maremmese -Maren -Marena -Marengo -Marenisco -marennin -Marentic -Marenzio -mareograph -Mareotic -Mareotid -mare-rode -mares -mare's -mareschal -mare's-nest -Maressa -mare's-tail -Maretta -Marette -Maretz -marezzo -Marfa -Marfik -marfire -Marfrance -marg -marg. -Marga -margay -margays -Margalit -Margalo -margarate -Margarelon -Margaret -Margareta -Margarete -Margaretha -Margarethe -Margaretta -Margarette -Margarettsville -Margaretville -margaric -Margarida -margarin -margarine -margarines -margarins -Margarita -margaritaceous -margaritae -margarite -margaritic -margaritiferous -margaritomancy -Margarodes -margarodid -Margarodinae -margarodite -Margaropus -margarosanite -Margate -Margaux -Marge -Margeaux -marged -margeline -margent -margented -margenting -margents -Margery -marges -Marget -Margette -Margetts -Margherita -Margi -Margy -Margie -margin -marginability -marginal -marginalia -marginality -marginalize -marginally -marginals -marginate -marginated -marginating -margination -margined -Marginella -Marginellidae -marginelliform -marginicidal -marginiform -margining -marginirostral -Marginis -marginoplasty -margins -margin's -Margit -Margo -margosa -Margot -margravate -margrave -margravely -margraves -margravial -margraviate -margravine -Margret -Margreta -Marguerie -Marguerita -Marguerite -marguerites -margullie -marhala -mar-hawk -Marheshvan -Mari -Mary -Maria -Marya -mariachi -mariachis -Maria-Giuseppe -Maryalice -marialite -Mariam -Mariamman -Marian -Mariana -Marianao -Mariand -Mariande -Mariandi -Marianic -marianist -Mariann -Maryann -Marianna -Maryanna -Marianne -Maryanne -Mariano -Marianolatry -Marianolatrist -Marianskn -Mariastein -Mariba -Maribel -Marybella -Maribelle -Marybelle -Maribeth -Marybeth -Marybob -Maribor -Maryborough -marybud -marica -Maricao -Marice -maricolous -Maricopa -mariculture -marid -Maryd -Maridel -Marydel -Marydell -Marie -Marieann -Marie-Ann -Mariehamn -Mariejeanne -Marie-Jeanne -Mariel -Mariele -Marielle -Mariellen -Maryellen -Marienbad -mariengroschen -Marienthal -Marienville -maries -mariet -Mariett -Marietta -Mariette -Marifrances -Maryfrances -Marigene -marigenous -Marigold -Marigolda -Marigolde -marigolds -marigram -marigraph -marigraphic -marihuana -marihuanas -Mariya -Marijane -Maryjane -Marijn -Marijo -Maryjo -marijuana -marijuanas -Marika -Marykay -Mariken -marikina -Maryknoll -Mariko -Maril -Maryl -Maryland -Marylander -marylanders -Marylandian -Marilee -Marylee -Marylhurst -Maryly -Marilin -Marilyn -Marylin -Marylyn -Marylinda -Marilynne -Marylynne -Marilla -Marillin -Marilou -Marylou -Marymass -marimba -marimbaist -marimbas -marimonda -Marin -Maryn -Marina -marinade -marinaded -marinades -marinading -marinal -marinara -marinaras -marinas -marinate -marinated -marinates -marinating -marination -Marinduque -marine -Maryneal -marined -marine-finish -Marinelli -Mariner -mariners -marinership -marines -Marinette -Marinetti -Maringouin -marinheiro -Marini -Marinism -Marinist -Marinistic -Marinna -Marino -marinorama -Marinus -Mario -mariola -Mariolater -Mariolatry -Mariolatrous -Mariology -Mariological -Mariologist -Marion -marionet -marionette -marionettes -Marionville -mariou -Mariposa -Mariposan -mariposas -mariposite -Mariquilla -Maryrose -Maryruth -Maris -Marys -Marisa -Marysa -marish -marishes -marishy -marishness -Mariska -Marisol -marysole -Marissa -Marist -Marysvale -Marysville -Marita -maritage -maritagium -Maritain -marital -maritality -maritally -mariti -mariticidal -mariticide -maritimal -maritimate -Maritime -Maritimer -maritimes -maritorious -Maritsa -Mariupol -mariupolite -Marius -Maryus -Marivaux -Maryville -Marj -Marja -Marjana -Marje -Marji -Marjy -Marjie -marjoram -marjorams -Marjory -Marjorie -Mark -marka -Markab -markable -Markan -markaz -markazes -markdown -markdowns -Markeb -marked -markedly -markedness -marker -marker-down -markery -marker-off -marker-out -markers -markers-off -Markesan -Market -Marketa -marketability -marketable -marketableness -marketably -marketech -marketed -marketeer -marketeers -marketer -marketers -marketing -marketings -marketman -marketplace -marketplaces -marketplace's -market-ripe -markets -marketstead -marketwise -Markevich -markfieldite -Markgenossenschaft -Markham -markhoor -markhoors -markhor -markhors -marking -markingly -markings -markis -markka -markkaa -markkas -Markland -Markle -Markleeville -Markleysburg -markless -Markleton -Markleville -Markman -markmen -markmoot -markmote -Marko -mark-on -Markos -Markov -Markova -Markovian -Markowitz -Marks -markshot -marksman -marksmanly -marksmanship -marksmanships -marksmen -Markson -markstone -Marksville -markswoman -markswomen -markup -mark-up -markups -Markus -Markville -markweed -markworthy -Marl -Marla -marlaceous -marlacious -Marland -Marlane -marlberry -Marlboro -Marlborough -Marlea -Marleah -marled -Marlee -Marleen -Marleene -Marley -Marleigh -Marlen -Marlena -Marlene -Marler -marlet -Marlette -marli -marly -Marlie -marlier -marliest -Marlin -Marlyn -Marline -marlines -marlinespike -marline-spike -marlinespikes -marling -marlings -marlingspike -marlins -marlinspike -marlinsucker -Marlinton -marlite -marlites -marlitic -marllike -Marlo -marlock -Marlon -Marlovian -Marlow -Marlowe -Marlowesque -Marlowish -Marlowism -marlpit -marl-pit -marls -Marlton -marm -Marmaduke -marmalade -marmalades -marmalady -Marmar -Marmara -marmaritin -marmarization -marmarize -marmarized -marmarizing -marmarosis -Marmarth -marmatite -Marmawke -Marmax -MarMechE -marmelos -marmennill -Marmet -marmink -Marmion -marmit -Marmite -marmites -Marmolada -marmolite -marmor -Marmora -marmoraceous -marmorate -marmorated -marmoration -marmoreal -marmoreally -marmorean -marmoric -marmorize -Marmosa -marmose -marmoset -marmosets -marmot -Marmota -marmots -Marna -Marne -Marney -Marni -Marnia -Marnie -marnix -Maro -Maroa -Maroc -marocain -Maroilles -marok -Marola -Marolda -Marolles -Maron -Maroney -Maronian -Maronist -Maronite -maroon -marooned -marooner -marooning -maroons -maroquin -maror -Maros -marotte -Marou -marouflage -Marozas -Marozik -Marpessa -Marpet -marplot -marplotry -marplots -Marprelate -Marq -Marquand -Marquardt -marque -marquee -marquees -marques -Marquesan -marquess -marquessate -marquesses -Marquet -marqueterie -marquetry -Marquette -Marquez -Marquis -marquisal -marquisate -marquisdom -marquise -marquises -marquisess -marquisette -marquisettes -marquisina -marquisotte -marquisship -Marquita -marquito -marquois -Marr -Marra -marraine -Marrakech -Marrakesh -marram -marrams -Marranism -marranize -Marrano -Marranoism -Marranos -Marras -marred -marree -Marrella -marrer -Marrero -marrers -marry -marriable -marriage -marriageability -marriageable -marriageableness -marriage-bed -marriageproof -marriages -marriage's -Marryat -married -marriedly -marrieds -marrier -marryer -marriers -marries -Marrietta -marrying -Marrilee -marrymuffe -Marrin -marring -Marriott -Marris -marrys -Marrissa -marrock -Marron -marrons -marrot -marrow -marrowbone -marrowbones -marrowed -marrowfat -marrowy -marrowing -marrowish -marrowless -marrowlike -marrows -marrowsky -marrowskyer -marrube -Marrubium -Marrucinian -Marruecos -MARS -Marsala -marsalas -Marsden -Marsdenia -marse -marseillais -Marseillaise -Marseille -Marseilles -marses -Marsh -Marsha -Marshal -marshalate -marshalcy -marshalcies -marshaled -marshaler -marshaless -marshaling -Marshall -Marshallberg -marshalled -marshaller -Marshallese -marshalling -marshalls -Marshalltown -Marshallville -marshalman -marshalment -marshals -Marshalsea -marshalship -marshbanker -marshberry -marshberries -marshbuck -marshes -Marshessiding -Marshfield -marshfire -marshflower -marshy -marshier -marshiest -marshiness -marshite -marshland -marshlander -marshlands -marshlike -marshlocks -marshmallow -marsh-mallow -marshmallowy -marshmallows -marshman -marshmen -marshs -marsh's -Marshville -marshwort -Marsi -Marsian -Marsyas -Marsiella -Marsilea -Marsileaceae -marsileaceous -Marsilia -Marsiliaceae -Marsilid -Marsing -marsipobranch -Marsipobranchia -Marsipobranchiata -marsipobranchiate -Marsipobranchii -Marsland -marsoon -Marspiter -Marssonia -Marssonina -Marsteller -Marston -marsupia -marsupial -Marsupialia -marsupialian -marsupialise -marsupialised -marsupialising -marsupialization -marsupialize -marsupialized -marsupializing -marsupials -marsupian -Marsupiata -marsupiate -marsupium -Mart -Marta -Martaban -martagon -martagons -Martainn -Marte -marted -Marteena -Martel -martele -marteline -Martell -Martella -martellate -martellato -Martelle -martellement -Martelli -Martello -martellos -martemper -Marten -marteniko -martenot -Martens -Martensdale -martensite -martensitic -martensitically -Martes -martext -Martguerita -Marth -Martha -Marthasville -Marthaville -Marthe -Marthena -Marti -Marty -Martial -martialed -martialing -martialism -Martialist -martialists -martiality -martialization -martialize -martialled -martially -martialling -martialness -martials -Martian -martians -Martica -Martie -Martijn -martiloge -Martin -Martyn -Martin' -Martina -Martindale -Martine -Martineau -Martinelli -martinet -martineta -martinetish -martinetishness -martinetism -martinets -martinetship -Martinez -marting -martingal -martingale -martingales -Martini -Martynia -Martyniaceae -martyniaceous -Martinic -Martinican -martinico -Martini-Henry -Martinique -martinis -Martinism -Martinist -Martinmas -Martynne -Martino -martinoe -Martinon -martins -Martinsburg -Martinsdale -Martinsen -Martinson -Martinsville -Martinton -Martinu -Martyr -martyrdom -martyrdoms -martyred -martyrer -martyress -martyry -martyria -martyries -martyring -martyrisation -martyrise -martyrised -martyrish -martyrising -martyrium -martyrization -martyrize -martyrized -martyrizer -martyrizing -martyrly -martyrlike -martyrolatry -martyrologe -martyrology -martyrologic -martyrological -martyrologist -martyrologistic -martyrologium -martyrs -martyr's -martyrship -martyrtyria -Martita -martite -Martius -martlet -martlets -martnet -Martres -martrix -marts -Martsen -Martu -Martville -Martz -maru -Marucci -Marut -Marutani -Marv -Marva -Marve -Marvel -marveled -marveling -Marvell -Marvella -marvelled -marvelling -marvellous -marvellously -marvellousness -marvelment -marvel-of-Peru -marvelous -marvelously -marvelousness -marvelousnesses -marvelry -marvels -Marven -marver -marvy -Marvin -Marwar -Marwari -marwer -Marwin -Marx -Marxian -Marxianism -Marxism -Marxism-Leninism -Marxist -Marxist-Leninist -marxists -Marzi -marzipan -marzipans -mas -masa -Masaccio -Masai -masais -Masan -masanao -masanobu -Masao -masarid -masaridid -Masarididae -Masaridinae -Masaryk -Masaris -MASB -Masbate -MASC -masc. -Mascagni -mascagnine -mascagnite -mascally -mascara -mascaras -mascaron -maschera -Mascherone -Mascia -mascle -mascled -mascleless -mascon -mascons -Mascot -mascotism -mascotry -mascots -Mascotte -Mascoutah -Mascouten -mascularity -masculate -masculation -masculy -Masculine -masculinely -masculineness -masculines -masculinism -masculinist -masculinity -masculinities -masculinization -masculinizations -masculinize -masculinized -masculinizing -masculist -masculo- -masculofeminine -masculonucleus -masdeu -Masdevallia -Masefield -maselin -MASER -Masera -masers -Maseru -Masgat -MASH -Masha -mashak -mashal -mashallah -masham -Masharbrum -Mashe -mashed -mashelton -masher -mashers -mashes -mashgiach -mashgiah -mashgichim -mashgihim -Mashhad -mashy -mashie -mashier -mashies -mashiest -mashiness -mashing -mashlam -mashlin -mashloch -mashlum -mashman -mashmen -Mashona -Mashpee -mashrebeeyah -mashrebeeyeh -mashru -Masinissa -masjid -masjids -mask -maskable -maskalonge -maskalonges -maskanonge -maskanonges -masked -maskeg -Maskegon -maskegs -Maskelyne -maskelynite -Maskell -masker -maskery -maskers -maskette -maskflower -masking -maskings -maskinonge -maskinonges -Maskins -masklike -maskmv -Maskoi -maskoid -masks -maslin -MASM -masochism -masochisms -masochist -masochistic -masochistically -masochists -masochist's -Masolino -Mason -masoned -masoner -Masonic -masonically -masoning -Masonite -masonry -masonried -masonries -masonrying -masons -mason's -Masontown -Masonville -masonwork -masooka -masoola -Masora -Masorah -Masorete -Masoreth -Masoretic -Masoretical -Masorite -Maspero -Maspiter -Masqat -masque -masquer -masquerade -masqueraded -masquerader -masqueraders -masquerades -masquerading -masquers -masques -Masry -Mass -Massa -Massachuset -Massachusetts -massacre -massacred -massacrer -massacrers -massacres -massacring -massacrous -massage -massaged -massager -massagers -massages -massageuse -massaging -massagist -massagists -Massalia -Massalian -Massapequa -massaranduba -Massarelli -massas -massasauga -Massasoit -Massaua -Massawa -mass-book -masscult -masse -massebah -massecuite -massed -massedly -massedness -Massey -Massekhoth -massel -masselgem -Massena -mass-energy -Massenet -masser -masses -masseter -masseteric -masseterine -masseters -masseur -masseurs -masseuse -masseuses -mass-fiber -mass-house -massy -massicot -massicotite -massicots -Massie -massier -massiest -massif -massifs -massig -massily -Massilia -Massilian -Massillon -Massimiliano -Massimo -massymore -Massine -massiness -massing -Massinger -Massingill -Massinisa -Massinissa -massy-proof -Massys -massive -massively -massiveness -massivenesses -massivity -masskanne -massless -masslessness -masslessnesses -masslike -mass-minded -mass-mindedness -Massmonger -mass-monger -Massna -massoy -Masson -massoola -Massora -Massorah -Massorete -Massoretic -Massoretical -massotherapy -massotherapist -mass-penny -mass-priest -mass-produce -mass-produced -massula -mass-word -MAST -mast- -mastaba -mastabah -mastabahs -mastabas -mastadenitis -mastadenoma -mastage -mastalgia -Mastat -mastatrophy -mastatrophia -mastauxe -mastax -mastectomy -mastectomies -masted -Master -masterable -master-at-arms -masterate -master-builder -masterdom -mastered -masterer -masterfast -masterful -masterfully -masterfulness -master-hand -masterhood -mastery -masteries -mastering -masterings -master-key -masterless -masterlessness -masterly -masterlike -masterlily -masterliness -masterling -masterman -master-mason -mastermen -mastermind -masterminded -masterminding -masterminds -masterous -masterpiece -masterpieces -masterpiece's -masterproof -masters -master's -masters-at-arms -mastership -masterships -mastersinger -master-singer -mastersingers -Masterson -masterstroke -master-stroke -master-vein -masterwork -master-work -masterworks -masterwort -mast-fed -mastful -masthead -mast-head -mastheaded -mastheading -mastheads -masthelcosis -masty -Mastic -masticability -masticable -masticate -masticated -masticates -masticating -mastication -mastications -masticator -masticatory -masticatories -mastiche -mastiches -masticic -masticot -mastics -Masticura -masticurous -mastiff -mastiffs -Mastigamoeba -mastigate -mastigia -mastigium -mastigobranchia -mastigobranchial -mastigoneme -mastigophobia -Mastigophora -mastigophoran -mastigophore -mastigophoric -mastigophorous -mastigopod -Mastigopoda -mastigopodous -mastigote -mastigure -masting -mastitic -mastitides -mastitis -mastix -mastixes -mastless -mastlike -mastman -mastmen -masto- -mastocarcinoma -mastocarcinomas -mastocarcinomata -mastoccipital -mastochondroma -mastochondrosis -mastodynia -mastodon -mastodonic -mastodons -mastodonsaurian -Mastodonsaurus -mastodont -mastodontic -Mastodontidae -mastodontine -mastodontoid -mastoid -mastoidal -mastoidale -mastoideal -mastoidean -mastoidectomy -mastoidectomies -mastoideocentesis -mastoideosquamous -mastoiditis -mastoidohumeral -mastoidohumeralis -mastoidotomy -mastoids -mastology -mastological -mastologist -mastomenia -mastoncus -mastooccipital -mastoparietal -mastopathy -mastopathies -mastopexy -mastoplastia -mastorrhagia -mastoscirrhus -mastosquamose -mastotympanic -mastotomy -mastras -Mastrianni -masts -masturbate -masturbated -masturbates -masturbatic -masturbating -masturbation -masturbational -masturbations -masturbator -masturbatory -masturbators -mastwood -masu -Masulipatam -Masuren -Masury -Masuria -masurium -masuriums -Mat -Mata -Matabele -Matabeleland -Matabeles -Matacan -matachin -matachina -matachinas -mataco -matadero -Matadi -Matador -matadors -mataeology -mataeological -mataeologue -mataeotechny -Matagalpa -Matagalpan -matagasse -Matagorda -matagory -matagouri -matai -matajuelo -matalan -matamata -mata-mata -matambala -Matamoras -matamoro -Matamoros -Matane -Matanuska -matanza -Matanzas -Matapan -matapi -Matar -matara -matasano -Matatua -Matawan -matax -Matazzoni -matboard -MATCALS -match -matchable -matchableness -matchably -matchboard -match-board -matchboarding -matchbook -matchbooks -matchbox -matchboxes -matchcloth -matchcoat -matched -matcher -matchers -matches -matchet -matchy -matching -matchings -matchless -matchlessly -matchlessness -match-lined -matchlock -matchlocks -matchmake -matchmaker -matchmakers -matchmaking -matchmark -Matchotic -matchsafe -matchstalk -matchstick -matchup -matchups -matchwood -matc-maker -mat-covered -MatE -mated -mategriffon -matehood -matey -Mateya -mateyness -mateys -Matejka -matelass -matelasse -Matelda -mateley -mateless -matelessness -mately -matellasse -matelot -matelotage -matelote -matelotes -matelotte -matelow -matemilk -Mateo -mateo- -mater -materfamilias -Materi -materia -materiable -material -materialisation -materialise -materialised -materialiser -materialising -materialism -materialisms -materialist -materialistic -materialistical -materialistically -materialists -materiality -materialities -materialization -materializations -materialize -materialized -materializee -materializer -materializes -materializing -materially -materialman -materialmen -materialness -materials -materiarian -materiate -materiation -materiel -materiels -maternal -maternalise -maternalised -maternalising -maternalism -maternalistic -maternality -maternalize -maternalized -maternalizing -maternally -maternalness -maternity -maternities -maternology -maters -Materse -mates -mate's -mateship -mateships -Mateusz -Matewan -matezite -MATFAP -matfellon -matfelon -mat-forming -matgrass -math -math. -matha -Mathe -mathematic -mathematical -mathematically -mathematicals -mathematician -mathematicians -mathematician's -mathematicize -mathematico- -mathematico-logical -mathematico-physical -mathematics -Mathematik -mathematization -mathematize -mathemeg -Matheny -Mather -Matherville -mathes -mathesis -Matheson -mathetic -Mathew -Mathews -Mathewson -Mathi -Mathia -Mathian -Mathias -Mathieu -Mathilda -Mathilde -Mathis -Mathiston -Matholwych -Mathre -maths -Mathur -Mathura -Mathurin -Mathusala -maty -Matias -matico -matie -maties -Matilda -matildas -Matilde -matildite -matin -Matina -matinal -matindol -matinee -matinees -matiness -matinesses -mating -matings -Matinicus -matins -matipo -Matisse -matka -matkah -Matland -Matless -Matlick -matlo -Matlock -matlockite -matlow -matmaker -matmaking -matman -Matoaka -matoke -Matozinhos -matr- -matra -matrace -matrah -matral -Matralia -matranee -matrass -matrasses -matreed -matres -matri- -matriarch -matriarchal -matriarchalism -matriarchate -matriarches -matriarchy -matriarchic -matriarchical -matriarchies -matriarchist -matriarchs -matric -matrical -Matricaria -matrice -matrices -matricidal -matricide -matricides -matriclan -matriclinous -matricula -matriculable -matriculae -matriculant -matriculants -matricular -matriculate -matriculated -matriculates -matriculating -matriculation -matriculations -matriculator -matriculatory -mat-ridden -Matrigan -matriheritage -matriherital -matrilateral -matrilaterally -matriline -matrilineage -matrilineal -matrilineally -matrilinear -matrilinearism -matrilinearly -matriliny -matrilinies -matrilocal -matrilocality -matrimony -matrimonial -matrimonially -matrimonies -matrimonii -matrimonious -matrimoniously -matriotism -matripotestal -matris -matrisib -matrix -matrixes -matrixing -matroclinal -matrocliny -matroclinic -matroclinous -matroid -matron -Matrona -matronage -matronal -Matronalia -matronhood -matronymic -matronism -matronize -matronized -matronizing -matronly -matronlike -matron-like -matronliness -Matronna -matrons -matronship -mat-roofed -matross -MATS -mat's -matsah -matsahs -Matsya -Matsys -Matson -matster -Matsu -matsue -Matsuyama -Matsumoto -matsuri -Matt -Matt. -Matta -Mattah -mattamore -Mattapoisett -Mattaponi -Mattapony -mattaro -Mattathias -Mattawamkeag -Mattawan -Mattawana -mattboard -matte -matted -mattedly -mattedness -Matteo -Matteotti -matter -matterate -matterative -mattered -matterful -matterfulness -Matterhorn -mattery -mattering -matterless -matter-of -matter-of-course -matter-of-fact -matter-of-factly -matter-of-factness -matters -mattes -Matteson -Matteuccia -Matthaean -Matthaeus -Matthaus -matthean -Matthei -Mattheus -Matthew -Matthews -Matthia -Matthias -Matthyas -Matthieu -Matthiew -Matthiola -Matthus -Matti -Matty -Mattias -Mattie -mattin -matting -mattings -mattins -Mattituck -Mattland -mattock -mattocks -mattoid -mattoids -mattoir -Mattoon -Mattox -mattrass -mattrasses -mattress -mattresses -mattress's -matts -Mattson -mattulla -maturable -maturant -maturate -maturated -maturates -maturating -maturation -maturational -maturations -maturative -mature -matured -maturely -maturement -matureness -maturer -matures -maturescence -maturescent -maturest -Maturine -maturing -maturish -maturity -maturities -Matusow -Matuta -matutinal -matutinally -matutinary -matutine -matutinely -matweed -matza -matzah -matzahs -matzas -matzo -matzoh -matzohs -matzoon -matzoons -matzos -matzot -matzoth -MAU -Maubeuge -mauby -maucaco -maucauco -Mauceri -maucherite -Mauchi -Mauckport -Maud -Maude -maudeline -Maudy -Maudie -Maudye -maudle -maudlin -maudlinism -maudlinize -maudlinly -maudlinness -maudlinwort -mauds -Maudslay -Mauer -Maugansville -mauger -maugh -Maugham -maught -Maugis -maugrabee -maugre -Maui -Mauk -maukin -maul -Maulana -Maulawiyah -Mauldin -Mauldon -mauled -mauley -Mauler -maulers -mauling -Maulmain -mauls -maulstick -maulvi -Mauman -Mau-Mau -Maumee -maumet -maumetry -maumetries -maumets -Maun -Maunabo -maunch -maunche -maund -maunder -maundered -maunderer -maunderers -maundering -maunders -maundful -maundy -maundies -maunds -maunge -maungy -Maunie -maunna -Maunsell -Maupassant -Maupertuis -Maupin -mauquahog -Maura -Mauralia -Maurandia -Maure -Maureen -Maureene -Maurey -Maurene -Maurepas -Maurer -Maurertown -mauresque -Mauretania -Mauretanian -Mauretta -Mauri -Maury -Maurya -Mauriac -Mauryan -Maurice -Mauricetown -Mauriceville -Mauricio -Maurie -Maurili -Maurilia -Maurilla -Maurine -Maurise -Maurist -Maurita -Mauritania -Mauritanian -mauritanians -Mauritia -Mauritian -Mauritius -Maurits -Maurizia -Maurizio -Mauro -Maurois -Maurreen -Maurus -Mauser -mausole -mausolea -mausoleal -mausolean -mausoleum -mausoleums -Mauston -maut -mauther -mauts -Mauve -mauvein -mauveine -mauves -mauvette -mauvine -maux -maven -mavens -maverick -mavericks -mavie -mavies -Mavilia -mavin -mavins -Mavis -Mavisdale -mavises -Mavortian -mavourneen -mavournin -Mavra -Mavrodaphne -maw -mawali -mawbound -mawed -mawger -mawing -mawk -mawky -mawkin -mawkingly -mawkish -mawkishly -mawkishness -mawkishnesses -mawks -mawmish -mawn -mawp -Mawr -maws -mawseed -mawsie -Mawson -Mawworm -Max -max. -Maxa -Maxama -Maxantia -Maxatawny -Maxbass -Maxey -Maxentia -Maxfield -MAXI -Maxy -Maxia -maxicoat -maxicoats -Maxie -maxilla -maxillae -maxillar -maxillary -maxillaries -maxillas -maxilliferous -maxilliform -maxilliped -maxillipedary -maxillipede -maxillo- -maxillodental -maxillofacial -maxillojugal -maxillolabial -maxillomandibular -maxillopalatal -maxillopalatine -maxillopharyngeal -maxillopremaxillary -maxilloturbinal -maxillozygomatic -Maxim -Maxima -maximal -Maximalism -Maximalist -maximally -maximals -maximate -maximation -Maxime -maximed -Maximes -Maximilian -Maximilianus -Maximilien -maximin -maximins -maximise -maximised -maximises -maximising -maximist -maximistic -maximite -maximites -maximization -maximize -maximized -maximizer -maximizers -maximizes -maximizing -Maximo -Maximon -maxims -maxim's -maximum -maximumly -maximums -Maximus -Maxine -maxis -maxisingle -maxiskirt -maxixe -maxixes -Maxma -Maxton -Maxwell -Maxwellian -maxwells -Maxwelton -maza -mazaedia -mazaedidia -mazaedium -mazagran -mazalgia -Mazama -mazame -Mazanderani -mazapilite -mazard -mazards -Mazarin -mazarine -Mazatec -Mazateco -Mazatl -Mazatlan -Mazda -Mazdaism -Mazdaist -Mazdakean -Mazdakite -Mazdean -mazdoor -mazdur -Maze -mazed -mazedly -mazedness -mazeful -maze-gane -Mazel -mazelike -mazement -Mazeppa -mazer -mazers -mazes -maze's -Mazhabi -mazy -Maziar -mazic -Mazie -mazier -maziest -mazily -maziness -mazinesses -mazing -Mazlack -Mazman -mazocacothesis -mazodynia -mazolysis -mazolytic -Mazomanie -Mazon -Mazonson -mazopathy -mazopathia -mazopathic -mazopexy -mazourka -mazourkas -Mazovian -mazuca -mazuma -mazumas -Mazur -Mazurek -Mazurian -mazurka -mazurkas -mazut -mazzard -mazzards -Mazzini -Mazzinian -Mazzinianism -Mazzinist -MB -MBA -M'Ba -Mbabane -Mbaya -mbalolo -Mbandaka -mbd -MBE -mbeuer -mbira -mbiras -Mbm -MBO -Mboya -mbori -MBPS -Mbuba -Mbujimayi -Mbunda -MBWA -MC -Mc- -MCA -MCAD -McAdams -McAdenville -McAdoo -MCAE -McAfee -McAlester -McAlister -McAlisterville -McAllen -McAllister -McAlpin -McAndrews -McArthur -McBain -McBee -McBride -McBrides -MCC -McCabe -McCafferty -mccaffrey -McCahill -McCaysville -McCall -McCalla -McCallion -McCallsburg -McCallum -McCamey -McCammon -McCandless -McCann -McCanna -McCarley -McCarr -McCartan -McCarthy -McCarthyism -McCarty -McCartney -McCaskill -McCauley -McCaulley -McCausland -McClain -McClary -McClave -McCleary -McClees -McClellan -McClelland -McClellandtown -McClellanville -McClenaghan -McClenon -McClimans -McClish -McCloy -McCloud -McClure -McClurg -McCluskey -McClusky -McCoy -McColl -McCollum -McComas -McComb -McCombs -McConaghy -McCondy -McConnel -McConnell -McConnells -McConnellsburg -McConnellstown -McConnellsville -McConnelsville -McCook -McCool -McCord -McCordsville -McCormac -McCormack -McCormick -McCourt -McCowyn -McCracken -McCrae -McCready -McCreary -McCreery -McCrory -MCCS -McCullers -McCully -McCulloch -McCullough -McCune -McCurdy -McCurtain -McCutchenville -McCutcheon -McDade -McDaniel -McDaniels -McDavid -McDermitt -McDermott -McDiarmid -McDonald -McDonnell -McDonough -McDougal -McDougall -McDowell -McElhattan -McElroy -McEvoy -McEwen -McEwensville -Mcf -McFadden -McFaddin -McFall -McFarlan -McFarland -Mcfd -McFee -McFerren -mcg -McGaheysville -McGannon -McGaw -McGean -McGee -McGehee -McGill -McGilvary -McGinnis -McGirk -McGonagall -McGovern -McGowan -McGrady -McGray -McGrann -McGrath -McGraw -McGraws -McGregor -McGrew -McGrody -McGruter -McGuffey -McGuire -McGurn -MCH -McHail -McHale -MCHB -Mchen -Mchen-Gladbach -McHenry -McHugh -MCI -MCIAS -McIlroy -McIntire -McIntyre -McIntosh -MCJ -McKay -McKale -McKean -McKee -McKeesport -McKenna -McKenney -McKenzie -McKeon -McKesson -McKim -McKinley -McKinney -McKinnon -McKissick -McKittrick -McKnight -McKnightstown -McKuen -McLain -McLaughlin -McLaurin -McLean -McLeansboro -McLeansville -McLemoresville -McLeod -McLeroy -McLyman -McLoughlin -McLouth -McLuhan -McMahon -McMaster -McMath -McMechen -McMillan -McMillin -McMinnville -McMullan -McMullen -McMurry -MCN -McNabb -McNair -McNalley -McNally -McNamara -McNamee -McNary -McNaughton -MCNC -McNeal -McNeely -McNeil -McNeill -McNelly -McNully -McNulty -McNutt -Mcon -Mconnais -MCP -MCPAS -mcphail -McPherson -MCPO -McQuade -McQuady -McQueen -McQueeney -McQuillin -McQuoid -MCR -McRae -McReynolds -McRipley -McRoberts -MCS -McShan -McSherrystown -McSpadden -MCSV -McTeague -McTyre -MCTRAP -MCU -McVeigh -McVeytown -McVille -McWherter -McWhorter -McWilliams -MD -Md. -MDACS -M-day -MDAP -MDAS -MDC -MDDS -MDE -MDEC -MDES -Mdewakanton -MDF -MDI -MDiv -Mdlle -Mdlles -Mdm -Mdme -Mdms -mdnt -Mdoc -MDQS -MDRE -MDS -mdse -MDT -MDU -MDX -ME -Me. -MEA -meable -meach -meaching -meacock -meacon -Mead -Meade -meader -Meador -Meadow -Meadowbrook -meadow-brown -meadowbur -meadowed -meadower -meadowy -meadowing -meadowink -meadowland -meadowlands -meadowlark -meadowlarks -meadowless -Meadows -meadow's -meadowsweet -meadow-sweet -meadowsweets -meadowwort -Meads -meadsman -meadsweet -Meadville -meadwort -Meagan -meager -meagerly -meagerness -meagernesses -Meaghan -Meagher -meagre -meagrely -meagreness -meak -Meakem -meaking -meal -mealable -mealberry -mealed -mealer -mealy -mealy-back -mealybug -mealybugs -mealie -mealier -mealies -mealiest -mealily -mealymouth -mealymouthed -mealy-mouthed -mealymouthedly -mealymouthedness -mealy-mouthedness -mealiness -mealing -mealywing -mealless -Meally -mealman -mealmen -mealmonger -mealmouth -mealmouthed -mealock -mealproof -meals -meal's -mealtide -mealtime -mealtimes -mealworm -mealworms -mean -mean-acting -mean-conditioned -meander -meandered -meanderer -meanderers -meandering -meanderingly -meanders -mean-dressed -meandrine -meandriniform -meandrite -meandrous -meandrously -meaned -meaner -meaners -meanest -Meany -meanie -meanies -meaning -meaningful -meaningfully -meaningfulness -meaningless -meaninglessly -meaninglessness -meaningly -meaningness -meanings -meaning's -meanish -meanless -meanly -mean-looking -mean-minded -meanness -meannesses -MEANS -mean-souled -meanspirited -mean-spirited -meanspiritedly -mean-spiritedly -meanspiritedness -mean-spiritedness -Meansville -meant -Meantes -meantime -meantimes -meantone -meanwhile -meanwhiles -mean-witted -mear -Meara -Meares -Mears -mearstone -meas -mease -measle -measled -measledness -measles -measlesproof -measly -measlier -measliest -measondue -measurability -measurable -measurableness -measurably -measurage -measuration -measure -measured -measuredly -measuredness -measureless -measurelessly -measurelessness -measurely -measurement -measurements -measurement's -measurer -measurers -measures -measuring -measuringworm -meat -meatal -meatball -meatballs -meatbird -meatcutter -meat-eater -meat-eating -meated -meat-fed -Meath -meathe -meathead -meatheads -meathook -meathooks -meat-hungry -meaty -meatic -meatier -meatiest -meatily -meatiness -meatless -meatloaf -meatman -meatmen -meato- -meatometer -meatorrhaphy -meatoscope -meatoscopy -meatotome -meatotomy -meat-packing -meats -meat's -meature -meatus -meatuses -meatworks -meaul -Meave -meaw -meazle -Mebane -mebos -Mebsuta -MEC -mecamylamine -Mecaptera -mecate -mecati -Mecca -Meccan -Meccano -meccas -Meccawee -mech -mech. -mechael -mechan- -mechanal -mechanality -mechanalize -Mechaneus -mechanic -mechanical -mechanicalism -mechanicalist -mechanicality -mechanicalization -mechanicalize -mechanically -mechanicalness -mechanician -mechanico- -mechanicochemical -mechanicocorpuscular -mechanicointellectual -mechanicotherapy -mechanics -mechanic's -Mechanicsburg -Mechanicstown -Mechanicsville -Mechanicville -mechanism -mechanismic -mechanisms -mechanism's -mechanist -mechanistic -mechanistically -mechanists -mechanizable -mechanization -mechanizations -mechanization's -mechanize -mechanized -mechanizer -mechanizers -mechanizes -mechanizing -mechanochemical -mechanochemistry -mechanolater -mechanology -mechanomorphic -mechanomorphically -mechanomorphism -mechanophobia -mechanoreception -mechanoreceptive -mechanoreceptor -mechanotherapeutic -mechanotherapeutics -mechanotherapy -mechanotherapies -mechanotherapist -mechanotherapists -mechanotheraputic -mechanotheraputically -mechant -Mechelen -Mechelle -Mechir -Mechitarist -Mechitaristican -mechitzah -mechitzoth -Mechlin -Mechling -Mechnikov -mechoacan -Mecisteus -meck -Mecke -meckelectomy -Meckelian -Mecklenburg -Mecklenburgian -Meckling -meclizine -MECO -mecodont -Mecodonta -mecometer -mecometry -mecon -meconic -meconidium -meconin -meconioid -meconium -meconiums -meconology -meconophagism -meconophagist -Mecoptera -mecopteran -mecopteron -mecopterous -Mecosta -mecrobeproof -mecum -mecums -mecurial -mecurialism -MED -med. -Meda -medaddy-bush -medaillon -medaka -medakas -medal -medaled -medalet -medaling -medalist -medalists -medalize -medallary -medalled -medallic -medallically -medalling -medallion -medallioned -medallioning -medallionist -medallions -medallion's -medallist -medals -medal's -Medan -Medanales -Medarda -Medardas -Medaryville -Medawar -meddle -meddlecome -meddled -meddlement -meddler -meddlers -meddles -meddlesome -meddlesomely -meddlesomeness -meddling -meddlingly -Mede -Medea -Medeah -Medell -Medellin -medenagan -Medeola -Medeus -medevac -medevacs -Medfield -medfly -medflies -Medford -medi- -Media -mediacy -mediacid -mediacies -mediad -mediae -mediaeval -mediaevalism -mediaevalist -mediaevalize -mediaevally -medial -medialization -medialize -medialkaline -medially -medials -Median -medianic -medianimic -medianimity -medianism -medianity -medianly -medians -median's -mediant -mediants -Mediapolis -mediary -medias -mediastina -mediastinal -mediastine -mediastinitis -mediastino-pericardial -mediastino-pericarditis -mediastinotomy -mediastinum -mediate -mediated -mediately -mediateness -mediates -mediating -mediatingly -mediation -mediational -mediations -mediatisation -mediatise -mediatised -mediatising -mediative -mediatization -mediatize -mediatized -mediatizing -mediator -mediatory -mediatorial -mediatorialism -mediatorially -mediatorious -mediators -mediatorship -mediatress -mediatrice -mediatrices -mediatrix -mediatrixes -Medic -medica -medicable -medicably -Medicago -Medicaid -medicaids -medical -medicalese -medically -medicals -medicament -medicamental -medicamentally -medicamentary -medicamentation -medicamentous -medicaments -medicant -Medicare -medicares -medicaster -medicate -medicated -medicates -medicating -medication -medications -medicative -medicator -medicatory -Medicean -Medici -medicinable -medicinableness -medicinal -medicinally -medicinalness -medicinary -medicine -medicined -medicinelike -medicinemonger -mediciner -medicines -medicine's -medicining -medick -medicks -medico -medico- -medicobotanical -medicochirurgic -medicochirurgical -medicodental -medicolegal -medicolegally -medicomania -medicomechanic -medicomechanical -medicommissure -medicomoral -medicophysical -medicophysics -medicopsychology -medicopsychological -medicos -medicostatistic -medicosurgical -medicotopographic -medicozoologic -medics -medic's -medidia -medidii -mediety -Medieval -medievalism -medievalisms -medievalist -medievalistic -medievalists -medievalize -medievally -medievals -medifixed -mediglacial -Medii -Medill -medille -medimn -medimno -medimnos -medimnus -Medin -Medina -Medinah -medinas -medine -Medinilla -medino -medio -medio- -medioanterior -mediocarpal -medioccipital -mediocracy -mediocral -mediocre -mediocrely -mediocreness -mediocris -mediocrist -mediocrity -mediocrities -mediocubital -mediodepressed -mediodigital -mediodorsal -mediodorsally -mediofrontal -mediolateral -mediopalatal -mediopalatine -mediopassive -medio-passive -mediopectoral -medioperforate -mediopontine -medioposterior -mediosilicic -mediostapedial -mediotarsal -medioventral -medisance -medisect -medisection -Medish -Medism -Medit -Medit. -meditabund -meditance -meditant -meditate -meditated -meditatedly -meditater -meditates -meditating -meditatingly -meditatio -meditation -meditationist -meditations -meditatist -meditative -meditatively -meditativeness -meditator -mediterrane -Mediterranean -Mediterraneanism -Mediterraneanization -Mediterraneanize -mediterraneous -medithorax -Meditrinalia -meditullium -medium -medium-dated -mediumism -mediumistic -mediumization -mediumize -mediumly -medium-rare -mediums -medium's -mediumship -medium-sized -medius -Medize -Medizer -medjidie -medjidieh -medlar -medlars -medle -medley -medleyed -medleying -medleys -medlied -Medlin -Medoc -Medomak -Medon -Medo-persian -Medor -Medora -Medorra -Medovich -medregal -Medrek -medrick -medrinacks -medrinacles -medrinaque -MedScD -medscheat -medula -medulla -medullae -medullar -medullary -medullas -medullate -medullated -medullation -medullispinal -medullitis -medullization -medullose -medullous -Medusa -medusae -Medusaean -medusal -medusalike -medusan -medusans -Medusas -medusiferous -medusiform -medusoid -medusoids -Medway -Medwin -Mee -meebos -Meece -meech -meecher -meeching -meed -meedful -meedless -meeds -Meehan -Meek -meek-browed -meek-eyed -meeken -Meeker -meekest -meekhearted -meekheartedness -meekly -meekling -meek-minded -meekness -meeknesses -Meekoceras -Meeks -meek-spirited -Meenen -Meer -meered -meerkat -Meers -meerschaum -meerschaums -Meerut -meese -meet -meetable -Meeteetse -meeten -meeter -meeterly -meeters -meeth -meethelp -meethelper -meeting -meetinger -meetinghouse -meeting-house -meetinghouses -meeting-place -meetings -meetly -meetness -meetnesses -meets -Mefitis -Meg -mega- -megaara -megabar -megabars -megabaud -megabit -megabyte -megabytes -megabits -megabuck -megabucks -megacephaly -megacephalia -megacephalic -megacephalous -megacerine -Megaceros -megacerotine -Megachile -megachilid -Megachilidae -Megachiroptera -megachiropteran -megachiropterous -megacycle -megacycles -megacity -megacolon -megacosm -megacoulomb -megacurie -megadeath -megadeaths -megadynamics -megadyne -megadynes -megadont -megadonty -megadontia -megadontic -megadontism -megadose -Megadrili -Megaera -megaerg -megafarad -megafog -megagamete -megagametophyte -megahertz -megahertzes -megajoule -megakaryoblast -megakaryocyte -megakaryocytic -megal- -Megalactractus -Megaladapis -Megalaema -Megalaemidae -Megalania -megalecithal -megaleme -Megalensian -megalerg -Megalesia -Megalesian -megalesthete -megalethoscope -Megalichthyidae -Megalichthys -megalith -megalithic -megaliths -megalo- -Megalobatrachus -megaloblast -megaloblastic -megalocardia -megalocarpous -megalocephaly -megalocephalia -megalocephalic -megalocephalous -Megaloceros -megalochirous -megalocyte -megalocytosis -megalocornea -megalodactylia -megalodactylism -megalodactylous -Megalodon -megalodont -megalodontia -Megalodontidae -megaloenteron -megalogastria -megaloglossia -megalograph -megalography -megalohepatia -megalokaryocyte -megalomania -megalomaniac -megalomaniacal -megalomaniacally -megalomaniacs -megalomanic -megalomelia -Megalonychidae -Megalonyx -megalopa -megalopenis -megalophonic -megalophonous -megalophthalmus -megalopia -megalopic -Megalopidae -Megalopyge -Megalopygidae -Megalopinae -megalopine -megaloplastocyte -megalopolis -megalopolises -megalopolistic -megalopolitan -megalopolitanism -megalopore -megalops -megalopsia -megalopsychy -Megaloptera -megalopteran -megalopterous -Megalornis -Megalornithidae -megalosaur -megalosaurian -Megalosauridae -megalosauroid -Megalosaurus -megaloscope -megaloscopy -megalosyndactyly -megalosphere -megalospheric -megalosplenia -megaloureter -Megaluridae -Megamastictora -megamastictoral -Megamede -megamere -megameter -megametre -megampere -Megan -Meganeura -Meganthropus -meganucleus -megaparsec -Megapenthes -megaphyllous -Megaphyton -megaphone -megaphoned -megaphones -megaphonic -megaphonically -megaphoning -megaphotography -megaphotographic -megapod -megapode -megapodes -Megapodidae -Megapodiidae -Megapodius -megapods -megapolis -megapolitan -megaprosopous -Megaptera -Megapterinae -megapterine -Megara -megarad -Megarean -Megarensian -Megargee -Megargel -Megarhinus -Megarhyssa -Megarian -Megarianism -Megaric -Megaris -megaron -megarons -Megarus -megasclere -megascleric -megasclerous -megasclerum -megascope -megascopic -megascopical -megascopically -megaseism -megaseismic -megaseme -megasynthetic -Megasoma -megasporange -megasporangium -megaspore -megasporic -megasporogenesis -megasporophyll -megass -megasse -megasses -megathere -megatherian -Megatheriidae -megatherine -megatherioid -Megatherium -megatherm -megathermal -megathermic -megatheroid -megatype -megatypy -megaton -megatons -megatron -megavitamin -megavolt -megavolt-ampere -megavolts -megawatt -megawatt-hour -megawatts -megaweber -megaword -megawords -megazooid -megazoospore -megbote -Megdal -Megen -megerg -Meges -Megger -Meggi -Meggy -Meggie -Meggs -Meghalaya -Meghan -Meghann -Megiddo -megillah -megillahs -megilloth -megilp -megilph -megilphs -megilps -megmho -megnetosphere -megohm -megohmit -megohmmeter -megohms -megomit -megophthalmus -megotalc -Megrel -Megrez -megrim -megrimish -megrims -meguilp -Mehala -Mehalek -Mehalick -mehalla -mehari -meharis -meharist -Mehelya -Meherrin -Mehetabel -Mehitabel -Mehitable -mehitzah -mehitzoth -mehmandar -Mehoopany -mehrdad -Mehta -mehtar -mehtarship -Mehul -Mehuman -Mei -Meibers -Meibomia -Meibomian -Meier -Meyer -Meyerbeer -Meyerhof -meyerhofferite -Meyeroff -Meyers -Meyersdale -Meyersville -meigomian -Meigs -Meijer -Meiji -meikle -meikles -meile -Meilen -meiler -Meilewagon -Meilhac -Meilichius -Meill -mein -Meindert -meindre -Meingolda -Meingoldas -meiny -meinie -meinies -Meinong -meio -meiobar -meiocene -meionite -meiophylly -meioses -meiosis -meiostemonous -meiotaxy -meiotic -meiotically -Meir -Meisel -meisje -Meissa -Meissen -Meissonier -Meistersinger -Meistersingers -Meisterstck -Meit -meith -Meithei -Meitner -meizoseismal -meizoseismic -mejorana -Mekbuda -Mekhitarist -mekilta -Mekinock -Mekka -Mekn -Meknes -mekometer -Mekong -Mekoryuk -Mel -Mela -melaconite -melada -meladiorite -melaena -melaenic -melagabbro -melagra -melagranite -Melaka -Melaleuca -melalgia -melam -melamdim -Melamed -Melamie -melamin -melamine -melamines -melammdim -melammed -melampyrin -melampyrite -melampyritol -Melampyrum -melampod -melampode -melampodium -Melampsora -Melampsoraceae -Melampus -Melan -melan- -melanaemia -melanaemic -melanagogal -melanagogue -melancholy -melancholia -melancholiac -melancholiacs -melancholian -melancholic -melancholically -melancholies -melancholyish -melancholily -melancholiness -melancholious -melancholiously -melancholiousness -melancholish -melancholist -melancholize -melancholomaniac -Melanchthon -Melanchthonian -Melanconiaceae -melanconiaceous -Melanconiales -Melanconium -melanemia -melanemic -Melanesia -Melanesian -melanesians -melange -melanger -melanges -melangeur -Melany -Melania -melanian -melanic -melanics -Melanie -melaniferous -Melaniidae -melanilin -melaniline -melanin -melanins -Melanion -Melanippe -Melanippus -melanism -melanisms -melanist -melanistic -melanists -melanite -melanites -melanitic -melanization -melanize -melanized -melanizes -melanizing -melano -melano- -melanoblast -melanoblastic -melanoblastoma -melanocarcinoma -melanocerite -Melanochroi -melanochroic -Melanochroid -melanochroite -melanochroous -melanocyte -melanocomous -melanocrate -melanocratic -Melanodendron -melanoderm -melanoderma -melanodermia -melanodermic -Melanogaster -melanogen -melanogenesis -Melanoi -melanoid -melanoidin -melanoids -melanoma -melanomas -melanomata -Melano-papuan -melanopathy -melanopathia -melanophore -melanoplakia -Melanoplus -melanorrhagia -melanorrhea -Melanorrhoea -melanosarcoma -melanosarcomatosis -melanoscope -melanose -melanosed -melanosis -melanosity -melanosome -melanospermous -melanotekite -melanotic -melanotype -melanotrichous -melanous -melanterite -Melantha -Melanthaceae -melanthaceous -melanthy -Melanthium -Melanthius -Melantho -Melanthus -melanure -melanurenic -melanuresis -melanuria -melanuric -melaphyre -Melar -Melas -melasma -melasmic -melasses -melassigenic -Melastoma -Melastomaceae -melastomaceous -melastomad -melastome -melatonin -melatope -melaxuma -Melba -Melber -Melbeta -Melborn -Melbourne -Melburn -Melburnian -Melcarth -melch -Melcher -Melchers -Melchiades -Melchior -Melchisedech -Melchite -Melchizedek -Melchora -Melcroft -MELD -Melda -melded -Melder -melders -melding -Meldoh -meldometer -Meldon -Meldrim -meldrop -melds -mele -Meleager -Meleagridae -Meleagrina -Meleagrinae -meleagrine -Meleagris -melebiose -Melecent -melee -melees -Melena -melene -MElEng -melenic -Melentha -Meles -Melesa -Melessa -Melete -Meletian -meletin -Meletius -Meletski -melezitase -melezitose -Melfa -Melgar -Meli -Melia -Meliaceae -meliaceous -Meliad -Meliadus -Meliae -Melian -Melianthaceae -melianthaceous -Melianthus -meliatin -melibiose -Meliboea -melic -Melica -Melicent -melicera -meliceric -meliceris -melicerous -Melicerta -Melicertes -Melicertidae -melichrous -melicitose -Melicocca -melicoton -melicrate -melicraton -melicratory -melicratum -Melie -melilite -melilite-basalt -melilites -melilitite -Melilla -melilot -melilots -Melilotus -Melina -Melinae -Melinda -Melinde -meline -Melinis -melinite -melinites -Meliola -melior -meliorability -meliorable -meliorant -meliorate -meliorated -meliorater -meliorates -meliorating -melioration -meliorations -meliorative -melioratively -meliorator -meliorism -meliorist -melioristic -meliority -meliphagan -Meliphagidae -meliphagidan -meliphagous -meliphanite -Melipona -Meliponinae -meliponine -melis -Melisa -Melisande -Melisandra -Melise -Melisenda -Melisent -melisma -melismas -melismata -melismatic -melismatics -Melissa -Melisse -Melisseus -Melissy -Melissie -melissyl -melissylic -Melita -Melitaea -melitaemia -melitemia -Melitene -melithaemia -melithemia -melitis -Melitopol -melitose -melitriose -Melitta -melittology -melittologist -melituria -melituric -melkhout -Melkite -Mell -Mella -mellaginous -mellah -mellay -Mellar -mellate -mell-doll -melled -Mellen -Mellenville -melleous -meller -Mellers -Melleta -Mellette -Melli -Melly -mellic -Mellicent -Mellie -Mellifera -melliferous -mellific -mellificate -mellification -mellifluate -mellifluence -mellifluent -mellifluently -mellifluous -mellifluously -mellifluousness -mellifluousnesses -mellilita -mellilot -mellimide -melling -Mellins -Mellisa -Mellisent -mellisonant -mellisugent -mellit -mellita -mellitate -mellite -mellitic -mellitum -mellitus -Mellitz -Mellivora -Mellivorinae -mellivorous -Mellman -Mello -Mellon -mellone -Melloney -mellonides -mellophone -Mellott -mellow -mellow-breathing -mellow-colored -mellow-deep -mellowed -mellow-eyed -mellower -mellowest -mellow-flavored -mellowy -mellowing -mellowly -mellow-lighted -mellow-looking -mellow-mouthed -mellowness -mellownesses -mellowphone -mellow-ripe -mellows -mellow-tasted -mellow-tempered -mellow-toned -mells -mellsman -mell-supper -Mellwood -Melmon -Melmore -Melnick -Melocactus -melocoton -melocotoon -Melodee -melodeon -melodeons -Melody -melodia -melodial -melodially -melodias -melodic -melodica -melodical -melodically -melodicon -melodics -Melodie -Melodye -melodied -melodies -melodying -melodyless -melodiograph -melodion -melodious -melodiously -melodiousness -melodiousnesses -melody's -melodise -melodised -melodises -melodising -melodism -melodist -melodists -melodium -melodize -melodized -melodizer -melodizes -melodizing -melodractically -melodram -melodrama -melodramas -melodrama's -melodramatic -melodramatical -melodramatically -melodramaticism -melodramatics -melodramatise -melodramatised -melodramatising -melodramatist -melodramatists -melodramatization -melodramatize -melodrame -meloe -melogram -Melogrammataceae -melograph -melographic -meloid -Meloidae -meloids -melologue -Melolontha -melolonthid -Melolonthidae -melolonthidan -Melolonthides -Melolonthinae -melolonthine -melomame -melomane -melomania -melomaniac -melomanic -melon -melon-bulb -meloncus -Melone -Melonechinus -melon-faced -melon-formed -melongena -melongrower -Melony -Melonie -melon-yellow -melonist -melonite -Melonites -melon-laden -melon-leaved -melonlike -melonmonger -melonry -melons -melon's -melon-shaped -melophone -melophonic -melophonist -melopiano -melopianos -meloplast -meloplasty -meloplastic -meloplasties -melopoeia -melopoeic -Melos -Melosa -Melospiza -melote -Melothria -melotragedy -melotragic -melotrope -melpell -Melpomene -Melquist -Melrose -mels -Melstone -melt -meltability -meltable -meltage -meltages -meltdown -meltdowns -melted -meltedness -melteigite -melter -melters -melteth -melting -meltingly -meltingness -meltith -Melton -Meltonian -meltons -melts -meltwater -Melun -Melungeon -Melursus -Melva -Melvena -Melvern -melvie -Melvil -Melville -Melvin -Melvyn -Melvina -Melvindale -mem -mem. -Member -membered -Memberg -memberless -members -member's -membership -memberships -membership's -membracid -Membracidae -membracine -membral -membrally -membrana -membranaceous -membranaceously -membranal -membranate -membrane -membraned -membraneless -membranelike -membranella -membranelle -membraneous -membranes -membraniferous -membraniform -membranin -Membranipora -Membraniporidae -membranocalcareous -membranocartilaginous -membranocoriaceous -membranocorneous -membranogenic -membranoid -membranology -membranonervous -membranophone -membranophonic -membranosis -membranous -membranously -membranula -membranule -membrette -membretto -Memel -memento -mementoes -mementos -meminna -Memlinc -Memling -Memnon -Memnonia -Memnonian -Memnonium -memo -memoir -memoire -memoirism -memoirist -memoirs -memorabile -memorabilia -memorability -memorabilities -memorable -memorableness -memorablenesses -memorably -memoranda -memorandist -memorandize -memorandum -memorandums -memorate -memoration -memorative -memorda -Memory -memoria -memorial -memorialisation -memorialise -memorialised -memorialiser -memorialising -memorialist -memorialization -memorializations -memorialize -memorialized -memorializer -memorializes -memorializing -memorially -memorials -memoried -memories -memoryless -memorylessness -memorious -memory's -memorise -memorist -memoriter -memory-trace -memorizable -memorization -memorizations -memorize -memorized -memorizer -memorizers -memorizes -memorizing -memos -memo's -Memphian -Memphis -Memphite -Memphitic -Memphremagog -mems -memsahib -mem-sahib -memsahibs -men -men- -Mena -menaccanite -menaccanitic -menace -menaceable -menaced -menaceful -menacement -menacer -menacers -menaces -menacing -menacingly -menacme -menad -menadic -menadione -Menado -menads -Menaechmi -menage -menagerie -menageries -menagerist -menages -Menahga -menald -Menam -Menan -Menander -Menangkabau -menaquinone -menarche -menarcheal -menarches -menarchial -Menard -Menasha -Menashem -Menaspis -menat -men-at-arms -menazon -menazons -Mencher -men-children -Mencius -Mencken -Menckenian -Mend -mendable -mendacious -mendaciously -mendaciousness -mendacity -mendacities -Mendaite -Mende -mended -mendee -Mendel -Mendeleev -Mendeleyev -Mendelejeff -mendelevium -Mendelian -Mendelianism -Mendelianist -mendelyeevite -Mendelism -Mendelist -Mendelize -Mendelsohn -Mendelson -Mendelssohn -Mendelssohnian -Mendelssohnic -Mendenhall -mender -Menderes -menders -Mendes -Mendez -Mendham -Mendi -Mendy -mendiant -mendicancy -mendicancies -mendicant -mendicantism -mendicants -mendicate -mendicated -mendicating -mendication -mendicity -Mendie -mendigo -mendigos -mending -mendings -mendipite -Mendips -Mendive -mendment -Mendocino -mendole -Mendon -Mendota -Mendoza -mendozite -mends -mene -Meneau -Menedez -meneghinite -menehune -Menelaus -Menell -Menemsha -Menendez -Meneptah -Menes -Menestheus -Menesthius -menevian -menfolk -men-folk -menfolks -Menfra -Menfro -Meng -Mengelberg -Mengtze -Meng-tze -Mengwe -menhaden -menhadens -menhir -menhirs -meny -menial -menialism -meniality -menially -menialness -menials -menialty -Menyanthaceae -Menyanthaceous -Menyanthes -Menic -Menides -Menifee -menyie -menilite -mening- -meningeal -meninges -meningic -meningina -meningioma -meningism -meningismus -meningitic -meningitides -meningitis -meningitophobia -meningo- -meningocele -meningocephalitis -meningocerebritis -meningococcal -meningococcemia -meningococci -meningococcic -meningococcocci -meningococcus -meningocortical -meningoencephalitic -meningoencephalitis -meningoencephalocele -meningomalacia -meningomyclitic -meningomyelitis -meningomyelocele -meningomyelorrhaphy -meningo-osteophlebitis -meningorachidian -meningoradicular -meningorhachidian -meningorrhagia -meningorrhea -meningorrhoea -meningosis -meningospinal -meningotyphoid -meninting -meninx -Menippe -Menis -meniscal -meniscate -meniscectomy -menisci -menisciform -meniscitis -meniscocytosis -meniscoid -meniscoidal -Meniscotheriidae -Meniscotherium -meniscus -meniscuses -menise -menison -menisperm -Menispermaceae -menispermaceous -menispermin -menispermine -Menispermum -meniver -Menkalinan -Menkar -Menken -Menkib -menkind -Menkure -Menlo -Menninger -Menno -mennom -mennon -Mennonist -Mennonite -mennonites -Mennonitism -mennuet -Meno -meno- -Menobranchidae -Menobranchus -Menodice -Menoeceus -Menoetes -Menoetius -men-of-the-earth -men-of-war -menognath -menognathous -Menoken -menology -menologies -menologyes -menologium -menometastasis -Menominee -Menomini -Menomonie -Menon -menopausal -menopause -menopauses -menopausic -menophania -menoplania -Menopoma -Menorah -menorahs -Menorca -Menorhyncha -menorhynchous -menorrhagy -menorrhagia -menorrhagic -menorrhea -menorrheic -menorrhoea -menorrhoeic -menoschesis -menoschetic -menosepsis -menostasia -menostasis -menostatic -menostaxis -Menotyphla -menotyphlic -Menotti -menow -menoxenia -mens -men's -Mensa -mensae -mensal -mensalize -mensas -Mensch -menschen -mensches -mense -mensed -menseful -menseless -menservants -menses -Menshevik -Menshevism -Menshevist -mensing -mensis -mensk -menstrua -menstrual -menstruant -menstruate -menstruated -menstruates -menstruating -menstruation -menstruations -menstrue -menstruoos -menstruosity -menstruous -menstruousness -menstruum -menstruums -mensual -mensurability -mensurable -mensurableness -mensurably -mensural -mensuralist -mensurate -mensuration -mensurational -mensurative -menswear -menswears -ment -menta -mentagra -mental -mentalis -mentalism -mentalist -mentalistic -mentalistically -mentalists -mentality -mentalities -mentalization -mentalize -mentally -mentary -mentation -Mentcle -mentery -Mentes -Mentha -Menthaceae -menthaceous -menthadiene -menthan -menthane -Menthe -menthene -menthenes -menthenol -menthenone -menthyl -menthol -mentholated -Mentholatum -menthols -menthone -menticide -menticultural -menticulture -mentiferous -mentiform -mentigerous -mentimeter -mentimutation -mention -mentionability -mentionable -mentioned -mentioner -mentioners -mentioning -mentionless -mentions -mentis -Mentmore -mento- -mentoanterior -mentobregmatic -mentocondylial -mentohyoid -mentolabial -mentomeckelian -Menton -Mentone -mentoniere -mentonniere -mentonnieres -mentoposterior -Mentor -mentored -mentorial -mentorism -Mentor-on-the-Lake-Village -mentors -mentor's -mentorship -mentum -Mentzelia -menu -Menuhin -menuiserie -menuiseries -menuisier -menuisiers -menuki -Menura -Menurae -Menuridae -menus -menu's -menzie -Menzies -Menziesia -Meo -meou -meoued -meouing -meous -meow -meowed -meowing -meows -MEP -MEPA -mepacrine -meperidine -Mephisto -Mephistophelean -Mephistopheleanly -Mephistopheles -Mephistophelian -Mephistophelic -Mephistophelistic -mephitic -mephitical -mephitically -Mephitinae -mephitine -Mephitis -mephitises -mephitism -Meppen -meprobamate -meq -Mequon -mer -mer- -Mera -Merak -meralgia -meraline -Merano -Meraree -Merari -Meras -Merat -Meratia -Meraux -merbaby -merbromin -Merc -Merca -Mercado -mercal -mercantile -mercantilely -mercantilism -mercantilist -mercantilistic -mercantilists -mercantility -mercaptal -mercaptan -mercaptide -mercaptides -mercaptids -mercapto -mercapto- -mercaptol -mercaptole -mercaptopurine -Mercast -mercat -Mercator -mercatoria -Mercatorial -mercature -Merce -Merced -Mercedarian -Mercedes -Mercedinus -Mercedita -Mercedonius -Merceer -mercement -mercenary -mercenarian -mercenaries -mercenarily -mercenariness -mercenarinesses -mercenary's -Mercer -merceress -mercery -merceries -mercerization -mercerize -mercerized -mercerizer -mercerizes -mercerizing -mercers -Mercersburg -mercership -merch -merchandy -merchandisability -merchandisable -merchandise -merchandised -merchandiser -merchandisers -merchandises -merchandising -merchandize -merchandized -merchandry -merchandrise -Merchant -merchantability -merchantable -merchantableness -merchant-adventurer -merchanted -merchanteer -merchanter -merchanthood -merchanting -merchantish -merchantly -merchantlike -merchantman -merchantmen -merchantry -merchantries -merchants -merchant's -merchantship -merchant-tailor -merchant-venturer -Merchantville -merchet -Merci -Mercy -Mercia -merciable -merciablely -merciably -Mercian -Mercie -Mercier -mercies -mercify -merciful -mercifully -mercifulness -merciless -mercilessly -mercilessness -merciment -mercyproof -mercy-seat -Merck -Mercola -Mercorr -Mercouri -mercur- -mercurate -mercuration -Mercurean -Mercuri -Mercury -mercurial -Mercurialis -mercurialisation -mercurialise -mercurialised -mercurialising -mercurialism -mercurialist -mercuriality -mercurialization -mercurialize -mercurialized -mercurializing -mercurially -mercurialness -mercurialnesses -mercuriamines -mercuriammonium -Mercurian -mercuriate -mercuric -mercurid -mercuride -mercuries -mercurify -mercurification -mercurified -mercurifying -Mercurius -mercurization -mercurize -mercurized -mercurizing -Mercurochrome -mercurophen -mercurous -merd -merde -merdes -Merdith -merdivorous -merdurinous -mere -mered -Meredeth -Meredi -Meredith -Meredyth -Meredithe -Meredithian -Meredithville -Meredosia -merel -merely -Merell -merels -merenchyma -merenchymatous -merengue -merengued -merengues -merenguing -merer -meres -meresman -meresmen -merest -merestone -mereswine -Mereta -Merete -meretrices -meretricious -meretriciously -meretriciousness -meretrix -merfold -merfolk -merganser -mergansers -merge -merged -mergence -mergences -merger -mergers -merges -mergh -Merginae -merging -Mergui -Mergulus -Mergus -Meri -meriah -mericarp -merice -Merychippus -merycism -merycismus -Merycoidodon -Merycoidodontidae -Merycopotamidae -Merycopotamus -Merida -Meridale -Meridel -Meriden -Merideth -Meridian -Meridianii -meridians -Meridianville -meridie -meridiem -meridienne -Meridion -Meridionaceae -Meridional -meridionality -meridionally -Meridith -Meriel -Merigold -meril -Meryl -Merilee -Merilyn -Merill -Merima -meringue -meringued -meringues -meringuing -Merino -merinos -Meriones -Merioneth -Merionethshire -meriquinoid -meriquinoidal -meriquinone -meriquinonic -meriquinonoid -Meris -Merise -merises -merisis -merism -merismatic -merismoid -Merissa -merist -meristele -meristelic -meristem -meristematic -meristematically -meristems -meristic -meristically -meristogenous -merit -meritable -merited -meritedly -meritedness -meriter -meritful -meriting -meritless -meritlessness -meritmonger -merit-monger -meritmongery -meritmongering -meritocracy -meritocracies -meritocrat -meritocratic -meritory -meritorious -meritoriously -meritoriousness -meritoriousnesses -merits -Meriwether -merk -Merkel -merkhet -merkin -Merkle -Merkley -merks -Merl -Merla -Merle -Merleau-Ponty -merles -merlette -merligo -Merlin -Merlina -Merline -merling -merlins -merlion -merlon -merlons -merlot -merlots -merls -Merlucciidae -Merluccius -mermaid -mermaiden -mermaids -merman -mermen -Mermentau -Mermerus -Mermis -mermithaner -mermithergate -Mermithidae -mermithization -mermithized -mermithogyne -Mermnad -Mermnadae -mermother -Merna -Merneptah -mero -mero- -meroblastic -meroblastically -merocele -merocelic -merocerite -meroceritic -merocyte -merocrine -merocrystalline -Merodach -merodus -Meroe -merogamy -merogastrula -merogenesis -merogenetic -merogenic -merognathite -merogony -merogonic -merohedral -merohedric -merohedrism -meroistic -Meroitic -Merola -Merom -Meromyaria -meromyarian -meromyosin -meromorphic -merop -Merope -Meropes -meropia -meropias -meropic -Meropidae -meropidan -meroplankton -meroplanktonic -meropodite -meropoditic -Merops -merorganization -merorganize -meros -merosymmetry -merosymmetrical -merosystematic -merosomal -Merosomata -merosomatous -merosome -merosthenic -Merostomata -merostomatous -merostome -merostomous -merotomy -merotomize -merotropy -merotropism -merous -Merovingian -Merow -meroxene -Merozoa -merozoite -MERP -merpeople -Merralee -Merras -Merrel -Merrell -Merri -Merry -Merriam -merry-andrew -merry-andrewism -merry-andrewize -merribauks -merribush -Merrick -Merricourt -Merridie -Merrie -merry-eyed -Merrielle -merrier -merriest -merry-faced -Merrifield -merry-go-round -merry-hearted -Merril -Merrile -Merrilee -merriless -Merrili -Merrily -Merrilyn -Merrill -Merrillan -Merrimac -Merrimack -merrymake -merry-make -merrymaker -merrymakers -merrymaking -merry-making -merrymakings -Merriman -merryman -merrymeeting -merry-meeting -merrymen -merriment -merriments -merry-minded -merriness -Merriott -merry-singing -merry-smiling -merrythought -merry-totter -merrytrotter -Merritt -Merrittstown -Merryville -merrywing -Merrouge -Merrow -merrowes -MERS -Merse -Merseburg -Mersey -Merseyside -Mershon -Mersin -mersion -Mert -Merta -Mertens -Mertensia -Merth -Merthiolate -Merton -Mertzon -Mertztown -meruit -Merula -meruline -merulioid -Merulius -Merv -mervail -merveileux -merveilleux -Mervin -Mervyn -Merwin -Merwyn -merwinite -merwoman -Mes -mes- -mesa -mesabite -mesaconate -mesaconic -mesad -Mesadenia -mesail -mesal -mesalike -mesally -mesalliance -mesalliances -mesameboid -mesange -mesaortitis -mesaraic -mesaraical -mesarch -mesarteritic -mesarteritis -Mesartim -mesas -mesaticephal -mesaticephali -mesaticephaly -mesaticephalic -mesaticephalism -mesaticephalous -mesatipellic -mesatipelvic -mesatiskelic -Mesaverde -mesaxonic -mescal -Mescalero -mescaline -mescalism -mescals -meschant -meschantly -mesdames -mesdemoiselles -mese -mesectoderm -meseemed -meseems -mesel -mesela -meseled -meseledness -mesely -meselry -mesem -Mesembryanthemaceae -Mesembryanthemum -mesembryo -mesembryonic -Mesena -mesencephala -mesencephalic -mesencephalon -mesencephalons -mesenchyma -mesenchymal -mesenchymatal -mesenchymatic -mesenchymatous -mesenchyme -mesendoderm -mesenna -mesentera -mesentery -mesenterial -mesenteric -mesenterical -mesenterically -mesenteries -mesenteriform -mesenteriolum -mesenteritic -mesenteritis -mesenterium -mesenteron -mesenteronic -mesentoderm -mesepimeral -mesepimeron -mesepisternal -mesepisternum -mesepithelial -mesepithelium -meseraic -Meservey -mesethmoid -mesethmoidal -mesh -Meshach -Meshech -Meshed -meshes -meshy -meshier -meshiest -meshing -Meshoppen -meshrabiyeh -meshrebeeyeh -meshuga -meshugaas -meshugah -meshugana -meshugga -meshuggaas -meshuggah -meshuggana -meshugge -meshuggenah -meshummad -meshwork -meshworks -mesiad -mesial -mesially -mesian -mesic -mesically -Mesick -Mesics -Mesilla -mesymnion -mesiobuccal -mesiocervical -mesioclusion -mesiodistal -mesiodistally -mesiogingival -mesioincisal -mesiolabial -mesiolingual -mesion -mesioocclusal -mesiopulpal -mesioversion -Mesita -Mesitae -Mesites -Mesitidae -mesityl -mesitylene -mesitylenic -mesitine -mesitite -mesivta -mesked -meslen -Mesmer -mesmerian -mesmeric -mesmerical -mesmerically -mesmerisation -mesmerise -mesmeriser -mesmerism -mesmerisms -mesmerist -mesmerists -mesmerite -mesmerizability -mesmerizable -mesmerization -mesmerize -mesmerized -mesmerizee -mesmerizer -mesmerizers -mesmerizes -mesmerizing -mesmeromania -mesmeromaniac -mesnage -mesnality -mesnalty -mesnalties -mesne -mesnes -meso -meso- -mesoappendiceal -mesoappendicitis -mesoappendix -mesoarial -mesoarium -mesobar -mesobenthos -mesoblast -mesoblastem -mesoblastema -mesoblastemic -mesoblastic -mesobranchial -mesobregmate -mesocadia -mesocaecal -mesocaecum -mesocardia -mesocardium -mesocarp -mesocarpic -mesocarps -mesocentrous -mesocephal -mesocephaly -mesocephalic -mesocephalism -mesocephalon -mesocephalous -mesochilium -mesochondrium -mesochroic -mesocoele -mesocoelia -mesocoelian -mesocoelic -mesocola -mesocolic -mesocolon -mesocolons -mesocoracoid -mesocranial -mesocranic -mesocratic -mesocuneiform -mesode -mesoderm -mesodermal -mesodermic -mesoderms -Mesodesma -Mesodesmatidae -Mesodesmidae -Mesodevonian -Mesodevonic -mesodic -mesodisilicic -mesodont -mesodontic -mesodontism -Mesoenatides -mesofurca -mesofurcal -mesogaster -mesogastral -mesogastric -mesogastrium -mesogyrate -mesoglea -mesogleal -mesogleas -mesogloea -mesogloeal -mesognathy -mesognathic -mesognathion -mesognathism -mesognathous -mesohepar -Mesohippus -mesokurtic -mesolabe -mesole -mesolecithal -Mesolgion -mesolimnion -mesolite -Mesolithic -mesology -mesologic -mesological -Mesolonghi -mesomere -mesomeres -mesomeric -mesomerism -mesometeorology -mesometeorological -mesometral -mesometric -mesometrium -Mesomyodi -mesomyodian -mesomyodous -mesomitosis -mesomorph -mesomorphy -mesomorphic -mesomorphism -mesomorphous -meson -mesonasal -Mesonemertini -mesonephric -mesonephridium -mesonephritic -mesonephroi -mesonephros -mesonic -Mesonychidae -Mesonyx -mesonotal -mesonotum -mesons -mesoparapteral -mesoparapteron -mesopause -mesopeak -mesopectus -mesopelagic -mesoperiodic -mesopetalum -mesophil -mesophyl -mesophile -mesophilic -mesophyll -mesophyllic -mesophyllous -mesophyllum -mesophilous -mesophyls -mesophyte -mesophytic -mesophytism -mesophragm -mesophragma -mesophragmal -mesophryon -mesopic -mesoplankton -mesoplanktonic -mesoplast -mesoplastic -mesoplastra -mesoplastral -mesoplastron -mesopleura -mesopleural -mesopleuron -Mesoplodon -mesoplodont -mesopodia -mesopodial -mesopodiale -mesopodialia -mesopodium -Mesopotamia -Mesopotamian -mesopotamic -mesoprescutal -mesoprescutum -mesoprosopic -mesopterygial -mesopterygium -mesopterygoid -mesorchial -mesorchium -Mesore -mesorecta -mesorectal -mesorectta -mesorectum -mesorectums -Mesoreodon -mesorhin -mesorhinal -mesorhine -mesorhiny -mesorhinian -mesorhinism -mesorhinium -mesorrhin -mesorrhinal -mesorrhine -mesorrhiny -mesorrhinian -mesorrhinism -mesorrhinium -mesosalpinx -mesosaur -Mesosauria -Mesosaurus -mesoscale -mesoscapula -mesoscapular -mesoscutal -mesoscutellar -mesoscutellum -mesoscutum -mesoseismal -mesoseme -mesosiderite -mesosigmoid -mesoskelic -mesosoma -mesosomata -mesosomatic -mesosome -mesosomes -mesosperm -mesosphere -mesospheric -mesospore -mesosporic -mesosporium -mesost -mesostasis -mesosterna -mesosternal -mesosternebra -mesosternebral -mesosternum -mesostethium -mesostyle -mesostylous -Mesostoma -Mesostomatidae -mesostomid -Mesosuchia -mesosuchian -Mesotaeniaceae -Mesotaeniales -mesotarsal -mesotartaric -Mesothelae -mesothelia -mesothelial -mesothelioma -mesothelium -mesotherm -mesothermal -mesothesis -mesothet -mesothetic -mesothetical -mesothoraces -mesothoracic -mesothoracotheca -mesothorax -mesothoraxes -mesothorium -mesotympanic -mesotype -mesotonic -mesotroch -mesotrocha -mesotrochal -mesotrochous -mesotron -mesotronic -mesotrons -mesotrophic -mesotropic -mesovaria -mesovarian -mesovarium -mesoventral -mesoventrally -mesoxalate -mesoxalic -mesoxalyl -mesoxalyl-urea -Mesozoa -mesozoan -Mesozoic -mespil -Mespilus -Mespot -mesprise -mesquin -mesquit -mesquita -Mesquite -mesquites -mesquits -Mesropian -mess -message -message-bearer -messaged -messageer -messagery -messages -message's -messaging -Messalian -Messalina -messaline -messan -messans -Messapian -Messapic -messe -messed -messed-up -Messeigneurs -messelite -Messene -messenger -messengers -messenger's -messengership -Messenia -messer -Messere -Messerschmitt -messes -messet -messy -Messiaen -Messiah -messiahs -Messiahship -Messianic -Messianically -Messianism -Messianist -Messianize -Messias -Messidor -Messier -messiest -messieurs -messily -messin -Messina -Messines -Messinese -messiness -Messing -messire -mess-john -messkit -messman -messmate -messmates -messmen -messor -messroom -Messrs -messtin -messuage -messuages -mess-up -mest -mestee -mestees -mesteno -mester -mesteso -mestesoes -mestesos -mestfull -Mesthles -mestino -mestinoes -mestinos -mestiza -mestizas -mestizo -mestizoes -mestizos -mestlen -mestome -Mestor -mestranol -Mesua -Mesvinian -MET -met. -Meta -meta- -metabases -metabasis -metabasite -metabatic -Metabel -metabiology -metabiological -metabiosis -metabiotic -metabiotically -metabismuthic -metabisulphite -metabit -metabits -metabletic -Metabola -metabole -metaboly -Metabolia -metabolian -metabolic -metabolical -metabolically -metabolise -metabolised -metabolising -metabolism -metabolisms -metabolite -metabolites -metabolizability -metabolizable -metabolize -metabolized -metabolizes -metabolizing -metabolon -metabolous -metaborate -metaboric -metabranchial -metabrushite -metabular -Metabus -metacapi -metacarpal -metacarpale -metacarpals -metacarpi -metacarpophalangeal -metacarpus -metacenter -metacentral -metacentre -metacentric -metacentricity -metacercaria -metacercarial -metacetone -metachemic -metachemical -metachemistry -Metachlamydeae -metachlamydeous -metachromasis -metachromatic -metachromatin -metachromatinic -metachromatism -metachrome -metachronal -metachronism -metachronistic -metachrosis -metacyclic -metacymene -metacinnabar -metacinnabarite -metacircular -metacircularity -metacism -metacismus -metaclase -metacneme -metacoele -metacoelia -Metacomet -metaconal -metacone -metaconid -metaconule -metacoracoid -metacrasis -metacresol -metacryst -metacromial -metacromion -metad -metadiabase -metadiazine -metadiorite -metadiscoidal -metadromous -metae -metaethical -metaethics -metafemale -metafluidal -metaformaldehyde -metafulminuric -metagalactic -metagalaxy -metagalaxies -metagaster -metagastric -metagastrula -metage -Metageitnion -metagelatin -metagelatine -metagenesis -metagenetic -metagenetically -metagenic -metageometer -metageometry -metageometrical -metages -metagnath -metagnathism -metagnathous -metagnomy -metagnostic -metagnosticism -metagram -metagrammatism -metagrammatize -metagraphy -metagraphic -metagrobolize -metahewettite -metahydroxide -metayage -metayer -metaigneous -metainfective -Metairie -metakinesis -metakinetic -metal -metal. -metalammonium -metalanguage -metalaw -metalbearing -metal-bearing -metal-bending -metal-boring -metal-bound -metal-broaching -metalbumin -metal-bushed -metal-clad -metal-clasped -metal-cleaning -metal-coated -metal-covered -metalcraft -metal-cutting -metal-decorated -metaldehyde -metal-drying -metal-drilling -metaled -metal-edged -metal-embossed -metalepses -metalepsis -metaleptic -metaleptical -metaleptically -metaler -metal-forged -metal-framed -metal-grinding -Metaline -metalined -metaling -metalinguistic -metalinguistically -metalinguistics -metalise -metalised -metalises -metalising -metalism -metalist -metalists -metalization -metalize -metalized -metalizes -metalizing -metal-jacketed -metall -metallary -metalled -metalleity -metaller -metallic -metallical -metallically -metallicity -metallicize -metallicly -metallics -metallide -metallifacture -metalliferous -metallify -metallification -metalliform -metallik -metallike -metalline -metal-lined -metalling -metallisation -metallise -metallised -metallish -metallising -metallism -metallist -metal-lithography -metallization -metallizations -metallize -metallized -metallizing -metallo- -metallocene -metallochrome -metallochromy -metalloenzyme -metallogenetic -metallogeny -metallogenic -metallograph -metallographer -metallography -metallographic -metallographical -metallographically -metallographist -metalloid -metalloidal -metallometer -metallo-organic -metallophobia -metallophone -metalloplastic -metallorganic -metallotherapeutic -metallotherapy -metallurgy -metallurgic -metallurgical -metallurgically -metallurgies -metallurgist -metallurgists -metalmark -metal-melting -metalmonger -metalogic -metalogical -metaloph -metalorganic -metaloscope -metaloscopy -metal-perforating -metal-piercing -metals -metal's -metal-shaping -metal-sheathed -metal-slitting -metal-slotting -metalsmith -metal-studded -metal-testing -metal-tipped -metal-trimming -metaluminate -metaluminic -metalware -metalwares -metalwork -metalworker -metalworkers -metalworking -metalworkings -metalworks -metamale -metamathematical -metamathematician -metamathematics -metamer -metameral -metamere -metameres -metamery -metameric -metamerically -metameride -metamerism -metamerization -metamerize -metamerized -metamerous -metamers -Metamynodon -metamitosis -Metamora -metamorphy -metamorphic -metamorphically -metamorphism -metamorphisms -metamorphize -metamorphopsy -metamorphopsia -metamorphosable -metamorphose -metamorphosed -metamorphoser -Metamorphoses -metamorphosy -metamorphosian -metamorphosic -metamorphosical -metamorphosing -metamorphosis -metamorphostical -metamorphotic -metamorphous -metanalysis -metanauplius -Metanemertini -metanephric -metanephritic -metanephroi -metanephron -metanephros -metanepionic -metanetwork -metanilic -metaniline -metanym -metanitroaniline -metanitrophenol -metanoia -metanomen -metanotal -metanotion -metanotions -metanotum -metantimonate -metantimonic -metantimonious -metantimonite -metantimonous -metaorganism -metaparapteral -metaparapteron -metapectic -metapectus -metapepsis -metapeptone -metaperiodic -metaph -metaph. -metaphase -Metaphen -metaphenylene -metaphenylenediamin -metaphenylenediamine -metaphenomenal -metaphenomenon -metaphys -metaphyseal -metaphysic -Metaphysical -metaphysically -metaphysician -metaphysicianism -metaphysicians -metaphysicist -metaphysicize -metaphysico- -metaphysicous -metaphysics -metaphysis -metaphyte -metaphytic -metaphyton -metaphloem -metaphony -metaphonical -metaphonize -metaphor -metaphoric -metaphorical -metaphorically -metaphoricalness -metaphorist -metaphorize -metaphors -metaphor's -metaphosphate -metaphosphated -metaphosphating -metaphosphoric -metaphosphorous -metaphragm -metaphragma -metaphragmal -metaphrase -metaphrased -metaphrasing -metaphrasis -metaphrast -metaphrastic -metaphrastical -metaphrastically -metaplasia -metaplasis -metaplasm -metaplasmic -metaplast -metaplastic -metapleur -metapleura -metapleural -metapleure -metapleuron -metaplumbate -metaplumbic -metapneumonic -metapneustic -metapodia -metapodial -metapodiale -metapodium -metapolitic -metapolitical -metapolitician -metapolitics -metapophyseal -metapophysial -metapophysis -metapore -metapostscutellar -metapostscutellum -metaprescutal -metaprescutum -metaprotein -metapsychic -metapsychical -metapsychics -metapsychism -metapsychist -metapsychology -metapsychological -metapsychosis -metapterygial -metapterygium -metapterygoid -metarabic -metargon -metarhyolite -metarossite -metarsenic -metarsenious -metarsenite -metarule -metarules -metas -metasaccharinic -metascope -metascutal -metascutellar -metascutellum -metascutum -metasedimentary -metasequoia -metasilicate -metasilicic -metasymbol -metasyntactic -metasoma -metasomal -metasomasis -metasomatic -metasomatically -metasomatism -metasomatosis -metasome -metasperm -Metaspermae -metaspermic -metaspermous -metastability -metastable -metastably -metastannate -metastannic -metastases -Metastasio -metastasis -metastasize -metastasized -metastasizes -metastasizing -metastatic -metastatical -metastatically -metasternal -metasternum -metasthenic -metastibnite -metastigmate -metastyle -metastoma -metastomata -metastome -metastrophe -metastrophic -metatantalic -metatarsal -metatarsale -metatarsally -metatarse -metatarsi -metatarsophalangeal -metatarsus -metatarsusi -metatatic -metatatical -metatatically -metataxic -metataxis -metate -metates -metathalamus -metatheology -metatheory -Metatheria -metatherian -metatheses -metathesis -metathesise -metathesize -metathetic -metathetical -metathetically -metathoraces -metathoracic -metathorax -metathoraxes -metatype -metatypic -metatitanate -metatitanic -metatoluic -metatoluidine -meta-toluidine -metatracheal -metatroph -metatrophy -metatrophic -metatungstic -Metaurus -metavanadate -metavanadic -metavariable -metavauxite -metavoltine -Metaxa -Metaxas -metaxenia -metaxylem -metaxylene -metaxite -Metazoa -metazoal -metazoan -metazoans -metazoea -metazoic -metazoon -Metcalf -Metcalfe -Metchnikoff -mete -metecorn -meted -metegritics -meteyard -metel -metely -metempiric -metempirical -metempirically -metempiricism -metempiricist -metempirics -metempsychic -metempsychosal -metempsychose -metempsychoses -metempsychosic -metempsychosical -metempsychosis -metempsychosize -metemptosis -metencephala -metencephalic -metencephalla -metencephalon -metencephalons -metensarcosis -metensomatosis -metenteron -metenteronic -meteogram -meteograph -meteor -meteorgraph -meteoric -meteorical -meteorically -meteoris -meteorism -meteorist -meteoristic -meteorital -meteorite -meteorites -meteoritic -meteoritical -meteoritics -meteorization -meteorize -meteorlike -meteorogram -meteorograph -meteorography -meteorographic -meteoroid -meteoroidal -meteoroids -meteorol -meteorol. -meteorolite -meteorolitic -meteorology -meteorologic -meteorological -meteorologically -meteorologies -meteorologist -meteorologists -meteoromancy -meteorometer -meteoropathologic -meteoroscope -meteoroscopy -meteorous -meteors -meteor's -meteorscope -metepa -metepas -metepencephalic -metepencephalon -metepimeral -metepimeron -metepisternal -metepisternum -meter -meterable -meterage -meterages -meter-ampere -meter-candle -meter-candle-second -metered -metergram -metering -meter-kilogram -meter-kilogram-second -meterless -meterman -meter-millimeter -meterological -meter-reading -meters -metership -meterstick -metes -metestick -metestrus -metewand -Meth -meth- -methacrylate -methacrylic -methadon -methadone -methadones -methadons -methaemoglobin -methamphetamine -methanal -methanate -methanated -methanating -methane -methanes -methanoic -methanol -methanolic -methanolysis -methanols -methanometer -methantheline -methaqualone -Methedrine -metheglin -methemoglobin -methemoglobinemia -methemoglobinuria -methenamine -methene -methenyl -mether -methhead -methicillin -methid -methide -methyl -methylacetanilide -methylal -methylals -methylamine -methylaniline -methylanthracene -methylase -methylate -methylated -methylating -methylation -methylator -methylbenzene -methylcatechol -methylcholanthrene -methyldopa -methylene -methylenimine -methylenitan -methylethylacetic -methylglycine -methylglycocoll -methylglyoxal -methylheptenone -methylic -methylidyne -methylmalonic -methylnaphthalene -methylol -methylolurea -methylosis -methylotic -methylparaben -methylpentose -methylpentoses -methylphenidate -methylpropane -methyls -methylsulfanol -methyltri-nitrob -methyltrinitrobenzene -methine -methinks -methiodide -methionic -methionine -methyprylon -methysergide -metho -methobromide -Method -methodaster -methodeutic -Methody -methodic -methodical -methodically -methodicalness -methodicalnesses -methodics -methodise -methodised -methodiser -methodising -Methodism -Methodist -Methodisty -Methodistic -Methodistical -Methodistically -methodists -methodist's -Methodius -methodization -Methodize -methodized -methodizer -methodizes -methodizing -methodless -methodology -methodological -methodologically -methodologies -methodology's -methodologist -methodologists -methods -method's -methol -methomania -methone -methotrexate -methought -Methow -methoxamine -methoxy -methoxybenzene -methoxychlor -methoxide -methoxyflurane -methoxyl -methronic -meths -Methuen -Methuselah -metic -Metycaine -meticais -metical -meticals -meticulosity -meticulous -meticulously -meticulousness -meticulousnesses -metier -metiers -metif -metin -meting -Metioche -Metion -Metis -Metiscus -metisse -metisses -Metius -Metoac -metochy -metochous -metoestrous -metoestrum -metoestrus -Metol -metonic -metonym -metonymy -metonymic -metonymical -metonymically -metonymies -metonymous -metonymously -metonyms -me-too -me-tooism -metopae -Metope -metopes -Metopias -metopic -metopion -metopism -Metopoceros -metopomancy -metopon -metopons -metoposcopy -metoposcopic -metoposcopical -metoposcopist -metorganism -metosteal -metosteon -metostylous -metoxazine -metoxeny -metoxenous -metr- -metra -metralgia -metran -metranate -metranemia -metratonia -Metrazol -metre -metre-candle -metrectasia -metrectatic -metrectomy -metrectopy -metrectopia -metrectopic -metrectotmy -metred -metregram -metre-kilogram-second -metreless -metreme -metres -metreship -metreta -metrete -metretes -metreza -metry -metria -metric -metrical -metrically -metricate -metricated -metricates -metricating -metrication -metrications -metrician -metricise -metricised -metricising -metricism -metricist -metricity -metricize -metricized -metricizes -metricizing -metrics -metric's -Metridium -metrify -metrification -metrified -metrifier -metrifies -metrifying -metring -metriocephalic -metrise -metrist -metrists -metritis -metritises -metrizable -metrization -metrize -metrized -metrizing -metro -metro- -metrocampsis -metrocarat -metrocarcinoma -metrocele -metrocystosis -metroclyst -metrocolpocele -metrocracy -metrocratic -metrodynia -metrofibroma -metrography -metrolymphangitis -metroliner -metroliners -metrology -metrological -metrologically -metrologies -metrologist -metrologue -metromalacia -metromalacoma -metromalacosis -metromania -metromaniac -metromaniacal -metrometer -metron -metroneuria -metronidazole -metronym -metronymy -metronymic -metronome -metronomes -metronomic -metronomical -metronomically -metroparalysis -metropathy -metropathia -metropathic -metroperitonitis -metrophlebitis -metrophotography -metropole -metropoleis -metropolic -Metropolis -metropolises -metropolitan -metropolitanate -metropolitancy -metropolitanism -metropolitanize -metropolitanized -metropolitanship -metropolite -metropolitic -metropolitical -metropolitically -metroptosia -metroptosis -metroradioscope -metrorrhagia -metrorrhagic -metrorrhea -metrorrhexis -metrorthosis -metros -metrosalpingitis -metrosalpinx -metroscirrhus -metroscope -metroscopy -Metrosideros -metrosynizesis -metrostaxis -metrostenosis -metrosteresis -metrostyle -metrotherapy -metrotherapist -metrotome -metrotometry -metrotomy -Metroxylon -mets -Metsys -Metsky -Mettah -mettar -Metter -Metternich -Metty -Mettie -mettle -mettled -mettles -mettlesome -mettlesomely -mettlesomeness -Metton -Metts -Metuchen -metump -metumps -metus -metusia -metwand -Metz -metze -Metzgar -Metzger -Metzler -meu -meubles -Meum -Meung -meuni -Meunier -meuniere -Meurer -Meursault -Meurthe-et-Moselle -meurtriere -Meuse -Meuser -meute -MeV -mew -Mewar -meward -me-ward -mewed -mewer -mewing -mewl -mewled -mewler -mewlers -mewling -mewls -mews -MEX -Mexia -Mexica -mexical -Mexicali -Mexican -Mexicanize -Mexicano -mexicans -Mexico -Mexitl -Mexitli -MexSp -MEZ -mezail -mezair -mezcal -mezcaline -mezcals -Mezentian -Mezentism -Mezentius -mezereon -mezereons -mezereum -mezereums -mezo -Mezoff -mezquit -mezquite -mezquites -mezquits -mezuza -mezuzah -mezuzahs -mezuzas -mezuzot -mezuzoth -mezzanine -mezzanines -mezzavoce -mezzo -mezzograph -mezzolith -mezzolithic -mezzo-mezzo -mezzo-relievo -mezzo-relievos -mezzo-rilievi -mezzo-rilievo -mezzos -mezzo-soprano -mezzotint -mezzotinted -mezzotinter -mezzotinting -mezzotinto -MF -MFA -MFB -mfd -mfd. -MFENET -MFG -MFH -MFJ -MFLOPS -MFM -MFR -MFS -MFT -MG -mGal -MGB -mgd -MGeolE -MGH -MGk -MGM -MGr -MGT -MH -MHA -Mhausen -MHD -MHE -MHF -MHG -MHL -mho -mhometer -mhorr -mhos -MHR -MHS -m-hum -MHW -MHz -MI -MY -mi- -my- -mi. -MI5 -MI6 -MIA -Mya -Myacea -miacis -miae -Mial -myal -myalgia -myalgias -myalgic -myalia -myalism -myall -Miami -miamia -Miamis -Miamisburg -Miamitown -Miamiville -mian -Miao -Miaotse -Miaotze -miaou -miaoued -miaouing -miaous -miaow -miaowed -miaower -miaowing -miaows -Miaplacidus -miargyrite -Myaria -myarian -miarolitic -mias -miascite -myases -myasis -miaskite -miasm -miasma -miasmal -miasmas -miasmata -miasmatic -miasmatical -miasmatically -miasmatize -miasmatology -miasmatous -miasmic -miasmology -miasmous -miasms -Miass -myasthenia -myasthenic -Miastor -myatony -myatonia -myatonic -myatrophy -miauer -miaul -miauled -miauler -miauling -miauls -miauw -miazine -MIB -mibound -mibs -Mic -myc -myc- -Mic. -mica -Myca -micaceous -micacious -micacite -Micaela -Micah -Mycah -Micajah -Micanopy -micas -micasization -micasize -micast -micasting -micasts -micate -mication -Micaville -Micawber -Micawberish -Micawberism -micawbers -Micco -Miccosukee -MICE -mycele -myceles -mycelia -mycelial -mycelian -Mycelia-sterilia -mycelioid -mycelium -micell -micella -micellae -micellar -micellarly -micelle -micelles -micells -myceloid -Mycenae -Mycenaean -miceplot -Mycerinus -micerun -micesource -mycete -Mycetes -mycetism -myceto- -mycetocyte -mycetogenesis -mycetogenetic -mycetogenic -mycetogenous -mycetoid -mycetology -mycetological -mycetoma -mycetomas -mycetomata -mycetomatous -mycetome -Mycetophagidae -mycetophagous -mycetophilid -Mycetophilidae -mycetous -Mycetozoa -mycetozoan -mycetozoon -Mich -Mich. -Michabo -Michabou -Michael -Mychael -Michaela -Michaelangelo -Michaele -Michaelina -Michaeline -Michaelites -Michaella -Michaelmas -Michaelmastide -Michaeu -Michail -Michal -Mychal -Michale -Michaud -Michaux -Miche -Micheal -Micheas -miched -Michey -Micheil -Michel -Michelangelesque -Michelangelism -Michelangelo -Michele -Michelia -Michelin -Michelina -Micheline -Michell -Michella -Michelle -Michelozzo -Michelsen -Michelson -Michener -micher -michery -miches -Michi -Michie -michiel -Michigamea -Michigamme -Michigan -Michigander -Michiganian -Michiganite -Michiko -miching -Michoac -Michoacan -Michoacano -Michol -Michon -micht -Mick -Mickey -Mickeys -Mickelson -mickery -Micki -Micky -Mickie -mickies -Mickiewicz -mickle -micklemote -mickle-mouthed -mickleness -mickler -mickles -micklest -Mickleton -micks -Micmac -Micmacs -mico -myco- -Mycobacteria -Mycobacteriaceae -mycobacterial -Mycobacterium -mycocecidium -mycocyte -mycoderm -mycoderma -mycodermatoid -mycodermatous -mycodermic -mycodermitis -mycodesmoid -mycodomatium -mycoflora -mycogastritis -Mycogone -mycohaemia -mycohemia -mycoid -mycol -mycol. -mycology -mycologic -mycological -mycologically -mycologies -mycologist -mycologists -mycologize -mycomycete -Mycomycetes -mycomycetous -mycomycin -mycomyringitis -miconcave -Miconia -mycophagy -mycophagist -mycophagous -mycophyte -Mycoplana -mycoplasm -mycoplasma -mycoplasmal -mycoplasmic -mycoprotein -mycorhiza -mycorhizal -mycorrhiza -mycorrhizae -mycorrhizal -mycorrhizic -mycorrihizas -mycose -mycoses -mycosymbiosis -mycosin -mycosis -mycosozin -Mycosphaerella -Mycosphaerellaceae -mycostat -mycostatic -Mycostatin -mycosterol -mycotic -mycotoxic -mycotoxin -mycotrophic -MICR -micr- -micra -micraco -micracoustic -micraesthete -micramock -Micrampelis -micranatomy -micrander -micrandrous -micraner -micranthropos -Micraster -micrencephaly -micrencephalia -micrencephalic -micrencephalous -micrencephalus -micrergate -micresthete -micrify -micrified -micrifies -micrifying -Micro -micro- -microaerophile -micro-aerophile -microaerophilic -micro-aerophilic -microammeter -microampere -microanalyses -microanalysis -microanalyst -microanalytic -microanalytical -microanatomy -microanatomical -microangstrom -microapparatus -microarchitects -microarchitecture -microarchitectures -micro-audiphone -microbacteria -microbacterium -microbacteteria -microbal -microbalance -microbar -microbarogram -microbarograph -microbars -microbattery -microbe -microbeam -microbeless -microbeproof -microbes -microbial -microbian -microbic -microbicidal -microbicide -microbiology -microbiologic -microbiological -microbiologically -microbiologies -microbiologist -microbiologists -microbion -microbiophobia -microbiosis -microbiota -microbiotic -microbious -microbism -microbium -microblast -microblephary -microblepharia -microblepharism -microbody -microbrachia -microbrachius -microburet -microburette -microburner -microbus -microbuses -microbusses -microcaltrop -microcamera -microcapsule -microcard -microcardia -microcardius -microcards -microcarpous -Microcebus -microcellular -microcentrosome -microcentrum -microcephal -microcephali -microcephaly -microcephalia -microcephalic -microcephalism -microcephalous -microcephalus -microceratous -microchaeta -microchaetae -microcharacter -microcheilia -microcheiria -microchemic -microchemical -microchemically -microchemistry -microchip -microchiria -Microchiroptera -microchiropteran -microchiropterous -microchromosome -microchronometer -microcycle -microcycles -microcinema -microcinematograph -microcinematography -microcinematographic -Microciona -Microcyprini -microcircuit -microcircuitry -microcirculation -microcirculatory -microcyst -microcyte -microcythemia -microcytic -microcytosis -Microcitrus -microclastic -microclimate -microclimates -microclimatic -microclimatically -microclimatology -microclimatologic -microclimatological -microclimatologist -microcline -microcnemia -microcoat -micrococcal -Micrococceae -micrococci -micrococcic -micrococcocci -Micrococcus -microcode -microcoded -microcodes -microcoding -microcoleoptera -microcolon -microcolorimeter -microcolorimetry -microcolorimetric -microcolorimetrically -microcolumnar -microcombustion -microcomputer -microcomputers -microcomputer's -microconidial -microconidium -microconjugant -Microconodon -microconstituent -microcopy -microcopied -microcopies -microcopying -microcoria -microcos -microcosm -microcosmal -microcosmian -microcosmic -microcosmical -microcosmically -microcosmography -microcosmology -microcosmos -microcosms -microcosmus -microcoulomb -microcranous -microcryptocrystalline -microcrystal -microcrystalline -microcrystallinity -microcrystallogeny -microcrystallography -microcrystalloscopy -microcrith -microcultural -microculture -microcurie -microdactylia -microdactylism -microdactylous -microdensitometer -microdensitometry -microdensitometric -microdentism -microdentous -microdetection -microdetector -microdetermination -microdiactine -microdimensions -microdyne -microdissection -microdistillation -microdont -microdonty -microdontia -microdontic -microdontism -microdontous -microdose -microdot -microdrawing -Microdrili -microdrive -microeconomic -microeconomics -microelectrode -microelectrolysis -microelectronic -microelectronically -microelectronics -microelectrophoresis -microelectrophoretic -microelectrophoretical -microelectrophoretically -microelectroscope -microelement -microencapsulate -microencapsulation -microenvironment -microenvironmental -microerg -microestimation -microeutaxitic -microevolution -microevolutionary -microexamination -microfarad -microfauna -microfaunal -microfelsite -microfelsitic -microfibril -microfibrillar -microfiche -microfiches -microfilaria -microfilarial -microfilm -microfilmable -microfilmed -microfilmer -microfilming -microfilms -microfilm's -microflora -microfloral -microfluidal -microfoliation -microform -micro-form -microforms -microfossil -microfungal -microfungus -microfurnace -Microgadus -microgalvanometer -microgamete -microgametocyte -microgametophyte -microgamy -microgamies -Microgaster -microgastria -Microgastrinae -microgastrine -microgauss -microgeology -microgeological -microgeologist -microgilbert -microgyne -microgyria -microglia -microglial -microglossia -micrognathia -micrognathic -micrognathous -microgonidial -microgonidium -microgram -microgramme -microgrammes -microgramming -micrograms -microgranite -microgranitic -microgranitoid -microgranular -microgranulitic -micrograph -micrographer -micrography -micrographic -micrographical -micrographically -micrographist -micrographs -micrograver -microgravimetric -microgroove -microgrooves -microhabitat -microhardness -microhenry -microhenries -microhenrys -microhepatia -Microhymenoptera -microhymenopteron -microhistochemical -microhistology -microhm -microhmmeter -microhms -microimage -microinch -microinjection -microinstruction -microinstructions -microinstruction's -micro-instrumentation -microjoule -microjump -microjumps -microlambert -microlecithal -microlepidopter -microlepidoptera -microlepidopteran -microlepidopterist -microlepidopteron -microlepidopterous -microleukoblast -microlevel -microlite -microliter -microlith -microlithic -microlitic -micrology -micrologic -micrological -micrologically -micrologist -micrologue -microluces -microlux -microluxes -micromania -micromaniac -micromanipulation -micromanipulator -micromanipulators -micromanometer -Micromastictora -micromazia -micromeasurement -micromechanics -micromeli -micromelia -micromelic -micromelus -micromembrane -micromeral -micromere -Micromeria -micromeric -micromerism -micromeritic -micromeritics -micromesentery -micrometallographer -micrometallography -micrometallurgy -micrometeorite -micrometeoritic -micrometeorogram -micrometeorograph -micrometeoroid -micrometeorology -micrometeorological -micrometeorologist -micrometer -micrometers -micromethod -micrometry -micrometric -micrometrical -micrometrically -micromho -micromhos -micromicrocurie -micromicrofarad -micromicron -micromyelia -micromyeloblast -micromil -micromillimeter -micromineralogy -micromineralogical -microminiature -microminiatures -microminiaturization -microminiaturizations -microminiaturize -microminiaturized -microminiaturizing -micromodule -micromolar -micromole -micromorph -micromorphology -micromorphologic -micromorphological -micromorphologically -micromotion -micromotoscope -micro-movie -micron -micro-needle -micronemous -Micronesia -Micronesian -micronesians -micronization -micronize -micronometer -microns -micronuclear -micronucleate -micronuclei -micronucleus -micronutrient -microoperations -microorganic -microorganism -microorganismal -microorganisms -micropalaeontology -micropaleontology -micropaleontologic -micropaleontological -micropaleontologist -micropantograph -microparasite -microparasitic -micropathology -micropathological -micropathologies -micropathologist -micropegmatite -micropegmatitic -micropenis -microperthite -microperthitic -micropetalous -micropetrography -micropetrology -micropetrologist -microphage -microphagy -microphagocyte -microphagous -microphakia -microphallus -microphyll -microphyllous -microphysical -microphysically -microphysics -microphysiography -microphytal -microphyte -microphytic -microphytology -microphobia -microphone -microphones -microphonic -microphonics -microphoning -microphonism -microphonograph -microphot -microphotograph -microphotographed -microphotographer -microphotography -microphotographic -microphotographing -microphotographs -microphotometer -microphotometry -microphotometric -microphotometrically -microphotoscope -microphthalmia -microphthalmic -microphthalmos -microphthalmus -micropia -micropylar -micropyle -micropin -micropipet -micropipette -micropyrometer -microplakite -microplankton -microplastocyte -microplastometer -micropodal -Micropodi -micropodia -Micropodidae -Micropodiformes -micropodous -micropoecilitic -micropoicilitic -micropoikilitic -micropolariscope -micropolarization -micropopulation -micropore -microporosity -microporous -microporphyritic -microprint -microprobe -microprocedure -microprocedures -microprocessing -microprocessor -microprocessors -microprocessor's -microprogram -microprogrammable -microprogrammed -microprogrammer -microprogramming -microprograms -microprogram's -microprojection -microprojector -micropsy -micropsia -micropterygid -Micropterygidae -micropterygious -Micropterygoidea -micropterism -Micropteryx -micropterous -Micropterus -microptic -micropublisher -micropublishing -micropulsation -micropuncture -Micropus -microradiograph -microradiography -microradiographic -microradiographical -microradiographically -microradiometer -microreaction -microreader -microrefractometer -microreproduction -microrhabdus -microrheometer -microrheometric -microrheometrical -Microrhopias -micros -Microsauria -microsaurian -microscale -microsclere -microsclerous -microsclerum -microscopal -microscope -microscopes -microscope's -microscopy -microscopial -microscopic -microscopical -microscopically -microscopics -Microscopid -microscopies -microscopist -Microscopium -microscopize -microscopopy -microsec -microsecond -microseconds -microsecond's -microsection -microsegment -microseism -microseismic -microseismical -microseismicity -microseismograph -microseismology -microseismometer -microseismometry -microseismometrograph -microseme -microseptum -microsiemens -microsystems -microskirt -microsmatic -microsmatism -microsoftware -microsoma -microsomal -microsomatous -microsome -microsomia -microsomial -microsomic -microsommite -Microsorex -microspace -microspacing -microspecies -microspectrophotometer -microspectrophotometry -microspectrophotometric -microspectrophotometrical -microspectrophotometrically -microspectroscope -microspectroscopy -microspectroscopic -Microspermae -microspermous -Microsphaera -microsphaeric -microsphere -microspheric -microspherical -microspherulitic -microsplanchnic -microsplenia -microsplenic -microsporange -microsporanggia -microsporangia -microsporangiate -microsporangium -microspore -microsporiasis -microsporic -Microsporidia -microsporidian -microsporocyte -microsporogenesis -Microsporon -microsporophyll -microsporophore -microsporosis -microsporous -Microsporum -microstat -microstate -microstates -microstethoscope -microsthene -Microsthenes -microsthenic -Microstylis -microstylospore -microstylous -microstomatous -microstome -microstomia -microstomous -microstore -microstress -micro-stress -microstructural -microstructure -microsublimation -microsurgeon -microsurgeons -microsurgery -microsurgeries -microsurgical -microswitch -microtasimeter -microtechnic -microtechnique -microtektite -microtelephone -microtelephonic -Microthelyphonida -microtheos -microtherm -microthermic -Microthyriaceae -microthorax -microtia -Microtinae -microtine -microtines -microtypal -microtype -microtypical -microtitration -microtome -microtomy -microtomic -microtomical -microtomist -microtonal -microtonality -microtonally -microtone -microtubular -microtubule -Microtus -microvasculature -microvax -microvaxes -microvillar -microvillous -microvillus -microvolt -microvolume -microvolumetric -microwatt -microwave -microwaves -microweber -microword -microwords -microzyma -microzyme -microzymian -microzoa -microzoal -microzoan -microzoary -microzoaria -microzoarian -microzoic -microzone -microzooid -microzoology -microzoon -microzoospore -micrurgy -micrurgic -micrurgical -micrurgies -micrurgist -Micrurus -Mycteria -mycteric -mycterism -miction -Myctodera -myctophid -Myctophidae -Myctophum -micturate -micturated -micturating -micturation -micturition -Miculek -MID -mid- -'mid -Mid. -mid-act -Mid-african -midafternoon -mid-age -mid-aged -Mydaidae -midair -mid-air -midairs -mydaleine -Mid-america -Mid-american -Mid-april -mid-arctic -MIDAS -Mid-asian -Mid-atlantic -mydatoxine -Mid-august -Mydaus -midautumn -midaxillary -mid-back -midband -mid-block -midbody -mid-body -midbrain -midbrains -mid-breast -Mid-cambrian -mid-career -midcarpal -mid-carpal -mid-central -mid-century -midchannel -mid-channel -mid-chest -mid-continent -midcourse -mid-course -mid-court -mid-crowd -midcult -midcults -mid-current -midday -middays -Mid-december -Middelburg -midden -Middendorf -middens -middenstead -middes -middest -middy -mid-diastolic -middies -mid-dish -mid-distance -Middle -Middle-age -middle-aged -middle-agedly -middle-agedness -Middle-ageism -Middlebass -Middleboro -Middleborough -Middlebourne -middlebreaker -Middlebrook -middlebrow -middlebrowism -middlebrows -Middleburg -Middleburgh -Middlebury -middle-burst -middlebuster -middleclass -middle-class -middle-classdom -middle-classism -middle-classness -middle-colored -middled -middle-distance -middle-earth -Middlefield -middle-growthed -middlehand -middle-horned -middleland -middleman -middlemanism -middlemanship -Middlemarch -middlemen -middlemost -middleness -middle-of-the-road -middle-of-the-roader -Middleport -middler -middle-rate -middle-road -middlers -middles -middlesail -Middlesboro -Middlesbrough -Middlesex -middle-sized -middle-sizedness -middlesplitter -middle-statured -Middlesworth -Middleton -middletone -middle-tone -Middletown -Middleville -middleway -middlewards -middleweight -middleweights -middle-witted -middlewoman -middlewomen -middle-wooled -middling -middlingish -middlingly -middlingness -middlings -middorsal -Mide -mid-earth -Mideast -Mideastern -mid-eighteenth -Mid-empire -Mider -Mid-europe -Mid-european -midevening -midewin -midewiwin -midfacial -mid-feather -Mid-february -Midfield -mid-field -midfielder -midfields -mid-flight -midforenoon -mid-forty -mid-front -midfrontal -Midgard -Midgardhr -Midgarth -Midge -midges -midget -midgety -midgets -midgy -mid-gray -midgut -mid-gut -midguts -Midheaven -mid-heaven -mid-hour -Mid-huronian -MIDI -Midian -Midianite -Midianitish -mid-ice -midicoat -Mididae -midyear -midyears -midified -mid-incisor -mydine -midinette -midinettes -Midi-Pyrn -midiron -midirons -Midis -midiskirt -Mid-italian -Mid-january -Mid-july -Mid-june -mid-kidney -Midkiff -mid-lake -Midland -Midlander -Midlandize -Midlands -midlandward -midlatitude -midleg -midlegs -mid-length -mid-lent -midlenting -midlife -mid-life -midline -mid-line -midlines -mid-link -midlives -mid-lobe -Midlothian -Mid-may -midmain -midmandibular -Mid-march -mid-mixed -midmonth -midmonthly -midmonths -midmorn -midmorning -midmost -midmosts -mid-mouth -mid-movement -midn -midnight -midnightly -midnights -mid-nineteenth -midnoon -midnoons -Mid-november -midocean -mid-ocean -Mid-october -mid-oestral -mid-off -mid-on -mid-orbital -Mid-pacific -midparent -midparentage -midparental -mid-part -mid-period -mid-periphery -mid-pillar -Midpines -midpit -Mid-pleistocene -midpoint -mid-point -midpoints -midpoint's -mid-position -midrange -midranges -midrash -midrashic -midrashim -midrashoth -mid-refrain -mid-region -Mid-renaissance -mydriasine -mydriasis -mydriatic -mydriatine -midrib -midribbed -midribs -midriff -midriffs -mid-river -mid-road -mids -midscale -mid-sea -midseason -mid-season -midsection -midsemester -midsentence -Mid-september -midship -midshipman -midshipmanship -midshipmen -midshipmite -midships -Mid-siberian -mid-side -midsize -mid-sky -mid-slope -mid-sole -midspace -midspaces -midspan -mid-span -midst -'midst -midstead -midstyled -mid-styled -midstory -midstories -midstout -midstream -midstreams -midstreet -mid-stride -midstroke -midsts -midsummer -midsummery -midsummerish -midsummer-men -midsummers -mid-sun -mid-swing -midtap -midtarsal -mid-tarsal -midterm -mid-term -midterms -Mid-tertiary -mid-thigh -mid-thoracic -mid-tide -mid-time -mid-totality -mid-tow -midtown -mid-town -midtowns -mid-travel -Mid-upper -Midvale -mid-value -midvein -midventral -mid-ventral -midverse -Mid-victorian -Mid-victorianism -Midville -mid-volley -Midway -midways -mid-walk -mid-wall -midward -midwatch -midwatches -mid-water -midweek -mid-week -midweekly -midweeks -Midwest -Midwestern -Midwesterner -midwesterners -midwestward -mid-wicket -midwife -midwifed -midwifery -midwiferies -midwifes -midwifing -midwinter -midwinterly -midwinters -midwintry -midwise -midwived -midwives -midwiving -mid-workings -mid-world -mid-zone -MIE -myectomy -myectomize -myectopy -myectopia -miek -myel -myel- -myelalgia -myelapoplexy -myelasthenia -myelatrophy -myelauxe -myelemia -myelencephala -myelencephalic -myelencephalon -myelencephalons -myelencephalous -myelic -myelin -myelinate -myelinated -myelination -myeline -myelines -myelinic -myelinization -myelinogenesis -myelinogenetic -myelinogeny -myelins -myelitic -myelitides -myelitis -myelo- -myeloblast -myeloblastic -myelobrachium -myelocele -myelocerebellar -myelocyst -myelocystic -myelocystocele -myelocyte -myelocythaemia -myelocythemia -myelocytic -myelocytosis -myelocoele -myelodiastasis -myeloencephalitis -myelofibrosis -myelofibrotic -myeloganglitis -myelogenesis -myelogenetic -myelogenic -myelogenous -myelogonium -myelography -myelographic -myelographically -myeloic -myeloid -myelolymphangioma -myelolymphocyte -myeloma -myelomalacia -myelomas -myelomata -myelomatoid -myelomatosis -myelomatous -myelomenia -myelomeningitis -myelomeningocele -myelomere -myelon -myelonal -myeloneuritis -myelonic -myeloparalysis -myelopathy -myelopathic -myelopetal -myelophthisis -myeloplast -myeloplastic -myeloplax -myeloplaxes -myeloplegia -myelopoiesis -myelopoietic -myeloproliferative -myelorrhagia -myelorrhaphy -myelosarcoma -myelosclerosis -myelosyphilis -myelosyphilosis -myelosyringosis -myelospasm -myelospongium -myelosuppression -myelosuppressions -myelotherapy -Myelozoa -myelozoan -Mielziner -mien -miens -Mientao -myentasis -myenteric -myenteron -Myer -Mieres -Myers -miersite -Myerstown -Myersville -Miescherian -myesthesia -Miett -MIF -MIFASS -miff -miffed -miffy -miffier -miffiest -miffiness -miffing -Mifflin -Mifflinburg -Mifflintown -Mifflinville -miffs -Mig -myg -migale -mygale -mygalid -mygaloid -Mygdon -Migeon -migg -miggle -miggles -miggs -Mighell -might -might-be -mighted -mightful -mightfully -mightfulness -might-have-been -mighty -mighty-brained -mightier -mightiest -mighty-handed -mightyhearted -mightily -mighty-minded -mighty-mouthed -mightiness -mightyship -mighty-spirited -mightless -mightly -mightnt -mightn't -mights -miglio -migmatite -migniard -migniardise -migniardize -Mignon -Mignonette -mignonettes -mignonette-vine -Mignonne -mignonness -mignons -Migonitis -migraine -migraines -migrainoid -migrainous -migrans -migrant -migrants -migratation -migratational -migratations -migrate -migrated -migrates -migrating -migration -migrational -migrationist -migrations -migrative -migrator -migratory -migratorial -migrators -migs -Miguel -Miguela -Miguelita -Mihail -Mihalco -miharaite -Mihe -mihrab -mihrabs -Myiarchus -Miyasawa -myiases -myiasis -myiferous -Myingyan -myiodesopsia -myiosis -myitis -mijakite -mijl -mijnheer -mijnheerl -mijnheers -Mika -Mikado -mikadoate -mikadoism -mikados -Mikael -Mikaela -Mikal -Mikan -Mikana -Mikania -Mikasuki -Mike -Myke -miked -Mikey -Mikel -Mykerinos -Mikes -Mikhail -Miki -mikie -Mikihisa -miking -Mikir -Mikiso -mykiss -Mikkanen -Mikkel -Miko -Mikol -mikra -mikrkra -mikron -mikrons -Miksen -mikvah -mikvahs -mikveh -mikvehs -mikvoth -MIL -mil. -Mila -Milaca -milacre -miladi -milady -miladies -miladis -milage -milages -Milam -milammeter -Milan -Mylan -milanaise -Mylander -Milanese -Milanion -Milano -Milanov -Milanville -Mylar -milarite -Milazzo -Milbank -Milburn -Milburr -Milburt -milch -milch-cow -milched -milcher -milchy -milchig -milchigs -mild -Milda -mild-aired -mild-aspected -mild-blowing -mild-brewed -mild-cured -Milde -mild-eyed -milden -mildened -mildening -mildens -milder -mildest -mildew -mildewed -mildewer -mildewy -mildewing -mildewproof -mildew-proof -mildews -mild-faced -mild-flavored -mildful -mildfulness -mildhearted -mildheartedness -mildish -mildly -mild-looking -mild-mannered -mild-mooned -mildness -mildnesses -Mildred -Mildrid -mild-savored -mild-scented -mild-seeming -mild-spirited -mild-spoken -mild-tempered -mild-tongued -mild-worded -Mile -mileage -mileages -Miledh -Mi-le-fo -Miley -Milena -mile-ohm -mileometer -milepost -mileposts -mile-pound -miler -milers -Miles -mile's -Myles -Milesburg -Milesian -milesima -milesimo -milesimos -Milesius -milestone -milestones -milestone's -Milesville -mile-ton -Miletus -mileway -Milewski -Milfay -milfoil -milfoils -mil-foot -Milford -milha -Milhaud -milia -miliaceous -miliarenses -miliarensis -miliary -miliaria -miliarial -miliarias -miliarium -milice -Milicent -milieu -milieus -milieux -Milinda -myliobatid -Myliobatidae -myliobatine -myliobatoid -Miliola -milioliform -milioline -miliolite -miliolitic -Milissa -Milissent -milit -milit. -militancy -militancies -militant -militantly -militantness -militants -militar -military -militaries -militaryism -militarily -militaryment -military-minded -militariness -militarisation -militarise -militarised -militarising -militarism -militarisms -militarist -militaristic -militaristical -militaristically -militarists -militarization -militarize -militarized -militarizes -militarizing -militaster -militate -militated -militates -militating -militation -militia -militiaman -militiamen -militias -militiate -Mylitta -Milyukov -milium -miljee -milk -Milka -milk-and-water -milk-and-watery -milk-and-wateriness -milk-and-waterish -milk-and-waterism -milk-bearing -milk-blended -milk-borne -milk-breeding -milkbush -milk-condensing -milk-cooling -milk-curdling -milk-drying -milked -milken -milker -milkeress -milkers -milk-faced -milk-fed -milkfish -milkfishes -milk-giving -milkgrass -milkhouse -milk-hued -milky -milkier -milkiest -milk-yielding -milkily -milkiness -milkinesses -milking -milkless -milklike -milk-livered -milkmaid -milkmaids -milkmaid's -milkman -milkmen -milkness -milko -milk-punch -Milks -milkshake -milkshed -milkshop -milksick -milksop -milksopism -milksoppery -milksoppy -milksoppiness -milksopping -milksoppish -milksoppishness -milksops -milkstone -milk-tested -milk-testing -milktoast -milk-toast -milk-tooth -milkwagon -milk-warm -milk-washed -milkweed -milkweeds -milk-white -milkwood -milkwoods -milkwort -milkworts -Mill -Milla -millable -Milladore -millage -millages -Millay -Millais -Millan -millanare -Millar -Millard -millboard -Millboro -Millbrae -Millbrook -Millbury -Millburn -millcake -millclapper -millcourse -Millda -Milldale -milldam -mill-dam -milldams -milldoll -mille -Millecent -milled -Milledgeville -millefeuille -millefiore -millefiori -millefleur -millefleurs -milleflorous -millefoliate -Millen -millenary -millenarian -millenarianism -millenaries -millenarist -millenia -millenist -millenium -millennia -millennial -millennialism -millennialist -millennialistic -millennially -millennian -millenniary -millenniarism -millennium -millenniums -milleped -millepede -millepeds -Millepora -millepore -milleporiform -milleporine -milleporite -milleporous -millepunctate -Miller -Millerand -milleress -milleri -millering -Millerism -Millerite -millerole -Millers -Millersburg -Millersport -miller's-thumb -Millerstown -Millersville -Millerton -Millerville -Milles -millesimal -millesimally -Millet -millets -Millettia -millfeed -Millfield -Millford -millful -Millhall -Millham -mill-headed -Millheim -Millhon -millhouse -Millhousen -Milli -Milly -milli- -milliad -milliammeter -milliamp -milliampere -milliamperemeter -milliamperes -Millian -milliangstrom -milliard -milliardaire -milliards -milliare -milliares -milliary -milliarium -millibar -millibarn -millibars -Millican -Millicent -millicron -millicurie -millidegree -Millie -millieme -milliemes -milliequivalent -millier -milliers -millifarad -millifold -milliform -milligal -milligals -Milligan -milligrade -milligram -milligramage -milligram-hour -milligramme -milligrams -millihenry -millihenries -millihenrys -millijoule -Millikan -Milliken -millilambert -millile -milliliter -milliliters -millilitre -milliluces -millilux -milliluxes -millime -millimes -millimeter -millimeters -millimetmhos -millimetre -millimetres -millimetric -millimho -millimhos -millimiccra -millimicra -millimicron -millimicrons -millimol -millimolar -millimole -millincost -milline -milliner -millinery -millinerial -millinering -milliners -millines -milling -millings -Millington -Millingtonia -mill-ink -Millinocket -millinormal -millinormality -millioctave -millioersted -milliohm -milliohms -million -millionaire -millionairedom -millionaires -millionaire's -millionairess -millionairish -millionairism -millionary -millioned -millioner -millionfold -millionism -millionist -millionize -millionnaire -millionocracy -millions -millionth -millionths -milliped -millipede -millipedes -millipede's -millipeds -milliphot -millipoise -milliradian -millirem -millirems -milliroentgen -Millis -millisec -millisecond -milliseconds -Millisent -millisiemens -millistere -Millite -millithrum -millivolt -millivoltmeter -millivolts -milliwatt -milliweber -millken -mill-lead -mill-leat -Millman -millmen -Millmont -millnia -millocracy -millocrat -millocratism -millosevichite -millowner -millpond -mill-pond -millponds -millpool -Millport -millpost -mill-post -millrace -mill-race -millraces -Millry -Millrift -millrind -mill-rind -millrynd -mill-round -millrun -mill-run -millruns -Mills -Millsap -Millsboro -Millshoals -millsite -mill-sixpence -Millstadt -millstock -Millston -millstone -millstones -millstone's -millstream -millstreams -milltail -Milltown -Millur -Millvale -Millville -millward -Millwater -millwheel -mill-wheel -Millwood -millwork -millworker -millworks -millwright -millwrighting -millwrights -Milmay -Milman -Milmine -Milne -milneb -milnebs -Milner -Milnesand -Milnesville -MILNET -Milnor -Milo -Mylo -mylodei -Mylodon -mylodont -Mylodontidae -mylohyoid -mylohyoidean -mylohyoidei -mylohyoideus -milometer -Milon -Milone -mylonite -mylonites -mylonitic -milor -Mylor -milord -milords -Milore -Milos -Milovan -milpa -milpas -Milpitas -Milquetoast -milquetoasts -MILR -milreis -milrind -Milroy -mils -milsey -milsie -Milson -MILSTD -Milstein -Milstone -Milt -milted -milter -milters -Milty -Miltiades -Miltie -miltier -miltiest -milting -miltlike -Milton -Miltona -Miltonia -Miltonian -Miltonic -Miltonically -Miltonism -Miltonist -Miltonize -Miltonvale -miltos -Miltown -milts -miltsick -miltwaste -Milurd -Milvago -Milvinae -milvine -milvinous -Milvus -Milwaukee -Milwaukeean -Milwaukie -milwell -milzbrand -Milzie -MIM -mym -Mima -Mimamsa -Mymar -mymarid -Mymaridae -Mimas -mimbar -mimbars -mimble -Mimbreno -Mimbres -MIMD -MIME -mimed -mimeo -mimeoed -Mimeograph -mimeographed -mimeography -mimeographic -mimeographically -mimeographing -mimeographist -mimeographs -mimeoing -mimeos -mimer -mimers -mimes -mimesis -mimesises -mimester -mimetene -mimetesite -mimetic -mimetical -mimetically -mimetism -mimetite -mimetites -Mimi -mimiambi -mimiambic -mimiambics -mimic -mimical -mimically -mimicism -mimicked -mimicker -mimickers -mimicking -mimicry -mimicries -mimics -Mimidae -Miminae -MIMinE -miming -miminypiminy -miminy-piminy -Mimir -mimish -mimly -mimmation -mimmed -mimmest -mimming -mimmock -mimmocky -mimmocking -mimmood -mimmoud -mimmouthed -mimmouthedness -mimodrama -mimographer -mimography -mimologist -Mimosa -Mimosaceae -mimosaceous -mimosa-leaved -mimosas -mimosis -mimosite -mimotannic -mimotype -mimotypic -mimp -Mimpei -Mims -mimsey -mimsy -Mimulus -MIMunE -Mimus -Mimusops -mimzy -MIN -min. -Mina -Myna -Minabe -minable -minacious -minaciously -minaciousness -minacity -minacities -mynad-minded -minae -Minaean -minah -mynah -Minahassa -Minahassan -Minahassian -mynahs -Minamoto -minar -Minardi -minaret -minareted -minarets -minargent -minas -mynas -minasragrite -Minatare -minatnrial -minatory -minatorial -minatorially -minatories -minatorily -minauderie -minaway -minbar -minbu -Minburn -MINCE -minced -minced-pie -mincemeat -mince-pie -mincer -mincers -minces -Minch -Minchah -minchen -minchery -minchiate -mincy -mincier -minciers -minciest -mincing -mincingly -mincingness -mincio -Minco -Mincopi -Mincopie -Mind -Minda -Mindanao -mind-blind -mind-blindness -mindblower -mind-blowing -mind-body -mind-boggler -mind-boggling -mind-changer -mind-changing -mind-curist -minded -mindedly -mindedness -Mindel -Mindelian -MindelMindel-riss -Mindel-riss -Minden -minder -Mindererus -minders -mind-expanding -mind-expansion -mindful -mindfully -mindfulness -mind-healer -mind-healing -Mindi -Mindy -mind-infected -minding -mind-your-own-business -mindless -mindlessly -mindlessness -mindlessnesses -mindly -Mindoro -mind-perplexing -mind-ravishing -mind-reader -minds -mindset -mind-set -mindsets -mind-sick -mindsickness -mindsight -mind-stricken -Mindszenty -mind-torturing -mind-wrecking -MiNE -mineable -mined -minefield -minelayer -minelayers -Minelamotte -Minenwerfer -Mineola -mineowner -Miner -mineragraphy -mineragraphic -mineraiogic -mineral -mineral. -mineralise -mineralised -mineralising -mineralist -mineralizable -mineralization -mineralize -mineralized -mineralizer -mineralizes -mineralizing -mineralocorticoid -mineralogy -mineralogic -mineralogical -mineralogically -mineralogies -mineralogist -mineralogists -mineralogize -mineraloid -minerals -mineral's -minery -minerology -minerological -minerologies -minerologist -minerologists -miners -Minersville -mine-run -Minerva -minerval -Minervan -Minervic -Mines -minestra -minestrone -minesweeper -minesweepers -minesweeping -Minetta -Minette -Minetto -minever -Mineville -mineworker -Minford -Ming -Mingche -minge -mingelen -mingy -mingie -mingier -mingiest -minginess -mingle -mingleable -mingled -mingledly -mingle-mangle -mingle-mangleness -mingle-mangler -minglement -mingler -minglers -mingles -mingling -minglingly -Mingo -Mingoville -Mingrelian -minguetite -Mingus -mingwort -minhag -minhagic -minhagim -Minhah -Mynheer -mynheers -Minho -Minhow -Mini -miny -mini- -Minya -miniaceous -Minyades -Minyadidae -Minyae -Minyan -minyanim -minyans -miniard -Minyas -miniate -miniated -miniating -miniator -miniatous -miniature -miniatured -miniatureness -miniatures -miniature's -miniaturing -miniaturist -miniaturistic -miniaturists -miniaturization -miniaturizations -miniaturize -miniaturized -miniaturizes -miniaturizing -minibike -minibikes -minibrain -minibrains -minibudget -minibudgets -minibus -minibuses -minibusses -Minica -minicab -minicabs -minicalculator -minicalculators -minicam -minicamera -minicameras -minicar -minicars -miniclock -miniclocks -minicomponent -minicomponents -minicomputer -minicomputers -minicomputer's -Miniconjou -miniconvention -miniconventions -minicourse -minicourses -minicrisis -minicrisises -minidisk -minidisks -minidrama -minidramas -minidress -minidresses -Minie -minienize -Minier -minifestival -minifestivals -minify -minification -minified -minifies -minifying -minifloppy -minifloppies -minigarden -minigardens -minigrant -minigrants -minigroup -minigroups -miniguide -miniguides -minihospital -minihospitals -miniken -minikin -minikinly -minikins -minilanguage -minileague -minileagues -minilecture -minilectures -minim -minima -minimacid -minimal -minimalism -Minimalist -minimalists -minimalkaline -minimally -minimals -minimarket -minimarkets -minimax -minimaxes -miniment -minimetric -minimi -minimifidian -minimifidianism -minimiracle -minimiracles -minimis -minimisation -minimise -minimised -minimiser -minimises -minimising -minimism -minimistic -Minimite -minimitude -minimization -minimizations -minimization's -minimize -minimized -minimizer -minimizers -minimizes -minimizing -minims -minimum -minimums -minimus -minimuscular -minimuseum -minimuseums -minination -mininations -mininetwork -mininetworks -mining -minings -mininovel -mininovels -minion -minionette -minionism -minionly -minions -minionship -minious -minipanic -minipanics -minipark -minipill -miniprice -miniprices -miniproblem -miniproblems -minirebellion -minirebellions -minirecession -minirecessions -minirobot -minirobots -minis -miniscandal -miniscandals -minischool -minischools -miniscule -minisedan -minisedans -miniseries -miniserieses -minish -minished -minisher -minishes -minishing -minishment -minisystem -minisystems -miniski -miniskirt -miniskirted -miniskirts -miniskis -minislump -minislumps -minisociety -minisocieties -mini-specs -ministate -ministates -minister -ministered -minister-general -ministeriable -ministerial -ministerialism -ministerialist -ministeriality -ministerially -ministerialness -ministering -ministerium -ministers -minister's -ministership -ministrable -ministral -ministrant -ministrants -ministrate -ministration -ministrations -ministrative -ministrator -ministrer -ministress -ministry -ministries -ministrike -ministrikes -ministry's -ministryship -minisub -minisubmarine -minisubmarines -minisurvey -minisurveys -minitant -Minitari -miniterritory -miniterritories -minitheater -minitheaters -Minitrack -minitrain -minitrains -minium -miniums -minivacation -minivacations -minivan -minivans -miniver -minivers -miniversion -miniversions -minivet -mink -minke -minkery -minkes -minkfish -minkfishes -minkish -Minkopi -mink-ranching -minks -mink's -Minn -Minn. -Minna -Minnaminnie -Minne -Minneapolis -Minneapolitan -Minnehaha -Minneola -Minneota -minnesinger -minnesingers -minnesong -Minnesota -Minnesotan -minnesotans -minnesota's -Minnetaree -Minnetonka -Minnewaukan -Minnewit -Minni -Minny -Minnie -minniebush -minnies -minning -Minnis -Minnnie -minnow -minnows -minnow's -Mino -Minoa -Minoan -Minocqua -minoize -minole-mangle -minometer -Minong -Minonk -Minooka -Minor -minora -minorage -minorate -minoration -Minorca -Minorcan -minorcas -minored -Minoress -minoring -Minorist -Minorite -minority -minorities -minority's -minor-league -minor-leaguer -minors -minor's -minorship -Minoru -Minos -Minot -Minotaur -Minotola -minow -mynpacht -mynpachtbrief -mins -Minseito -minsitive -Minsk -Minsky -Minster -minsteryard -minsters -minstrel -minstreless -minstrels -minstrel's -minstrelship -minstrelsy -minstrelsies -mint -Minta -mintage -mintages -Mintaka -mintbush -minted -Minter -minters -Minthe -minty -mintier -mintiest -minting -mintmaker -mintmaking -mintman -mintmark -mintmaster -Minto -Mintoff -Minton -mints -Mintun -Minturn -mintweed -Mintz -minuend -minuends -minuet -minuetic -minuetish -minuets -Minuit -minum -minunet -minus -minuscular -minuscule -minuscules -minuses -minutary -minutation -minute -minuted -minutely -Minuteman -minutemen -minuteness -minutenesses -minuter -minutes -minutest -minuthesis -minutia -minutiae -minutial -minuting -minutiose -minutious -minutiously -minutissimic -minvend -minverite -MINX -minxes -minxish -minxishly -minxishness -minxship -Mio -Myo -mio- -myo- -myoalbumin -myoalbumose -myoatrophy -MYOB -myoblast -myoblastic -myoblasts -miocardia -myocardia -myocardiac -myocardial -myocardiogram -myocardiograph -myocarditic -myocarditis -myocardium -myocdia -myocele -myocellulitis -Miocene -Miocenic -myocyte -myoclonic -myoclonus -myocoel -myocoele -myocoelom -myocolpitis -myocomma -myocommata -myodegeneration -Myodes -myodiastasis -myodynamia -myodynamic -myodynamics -myodynamiometer -myodynamometer -myoedema -myoelectric -myoendocarditis -myoenotomy -myoepicardial -myoepithelial -myofibril -myofibrilla -myofibrillar -myofibroma -myofilament -myogen -myogenesis -myogenetic -myogenic -myogenicity -myogenous -myoglobin -myoglobinuria -myoglobulin -myogram -myograph -myographer -myography -myographic -myographical -myographically -myographist -myographs -myohaematin -myohematin -myohemoglobin -myohemoglobinuria -Miohippus -myoid -myoidema -myoinositol -myokymia -myokinesis -myolemma -myolipoma -myoliposis -myoliposmias -myolysis -miolithic -Miollnir -Miolnir -myology -myologic -myological -myologies -myologisral -myologist -myoma -myomalacia -myomancy -myomantic -myomas -myomata -myomatous -miombo -myomectomy -myomectomies -myomelanosis -myomere -myometritis -myometrium -myomohysterectomy -myomorph -Myomorpha -myomorphic -myomotomy -myonema -myoneme -myoneural -myoneuralgia -myoneurasthenia -myoneure -myoneuroma -myoneurosis -myonosus -myopachynsis -myoparalysis -myoparesis -myopathy -myopathia -myopathic -myopathies -myope -myoperitonitis -myopes -myophan -myophysical -myophysics -myophore -myophorous -myopy -myopia -myopias -myopic -myopical -myopically -myopies -myoplasm -mioplasmia -myoplasty -myoplastic -myopolar -Myoporaceae -myoporaceous -myoporad -Myoporum -myoproteid -myoprotein -myoproteose -myops -myorrhaphy -myorrhexis -myosalpingitis -myosarcoma -myosarcomatous -myosclerosis -myoscope -myoscopes -myoseptum -mioses -myoses -myosin -myosynizesis -myosinogen -myosinose -myosins -miosis -myosis -myositic -myositis -myosote -myosotes -Myosotis -myosotises -myospasm -myospasmia -Myosurus -myosuture -myotacismus -Myotalpa -Myotalpinae -myotasis -myotenotomy -miothermic -myothermic -miotic -myotic -miotics -myotics -myotome -myotomes -myotomy -myotomic -myotomies -myotony -myotonia -myotonias -myotonic -myotonus -myotrophy -myowun -Myoxidae -myoxine -Myoxus -MIP -Miphiboseth -MIPS -miqra -Miquela -miquelet -miquelets -Miquelon -Miquon -MIR -Mira -Myra -myrabalanus -Mirabeau -Mirabel -Mirabell -Mirabella -Mirabelle -mirabile -mirabilia -mirabiliary -Mirabilis -mirabilite -mirable -myrabolam -Mirac -Mirach -miracicidia -miracidia -miracidial -miracidium -miracle -miracle-breeding -miracled -miraclemonger -miraclemongering -miracle-proof -miracles -miracle's -miracle-worker -miracle-working -miracling -miraclist -miracular -miraculist -miraculize -miraculosity -miraculous -miraculously -miraculousness -mirador -miradors -Miraflores -mirage -mirages -miragy -Myrah -Mirak -Miraloma -Miramar -Miramolin -Miramonte -Miran -Mirana -Miranda -Myranda -mirandous -Miranha -Miranhan -mirate -mirbane -myrcene -Myrcia -mircrobicidal -mird -mirdaha -mirdha -mire -mired -Mireielle -Mireille -Mirella -Mirelle -mirepois -mirepoix -mires -miresnipe -mirex -mirexes -Mirfak -miri -miry -myria- -myriacanthous -miryachit -myriacoulomb -myriad -myriaded -myriadfold -myriad-leaf -myriad-leaves -myriadly -myriad-minded -myriads -myriadth -myriagram -myriagramme -myrialiter -myrialitre -Miriam -Miryam -Myriam -myriameter -myriametre -miriamne -Myrianida -myriapod -Myriapoda -myriapodan -myriapodous -myriapods -myriarch -myriarchy -myriare -Myrica -Myricaceae -myricaceous -Myricales -myricas -myricetin -myricyl -myricylic -myricin -myrick -mirid -Miridae -Mirielle -Myrientomata -mirier -miriest -mirific -mirifical -miriki -Mirilla -Myrilla -Myrina -miriness -mirinesses -miring -myringa -myringectomy -myringitis -myringodectomy -myringodermatitis -myringomycosis -myringoplasty -myringotome -myringotomy -myrio- -myriological -myriologist -myriologue -myriophyllite -myriophyllous -Myriophyllum -myriopod -Myriopoda -myriopodous -myriopods -myriorama -myrioscope -myriosporous -myriotheism -myriotheist -Myriotrichia -Myriotrichiaceae -myriotrichiaceous -mirish -Mirisola -myristate -myristic -Myristica -Myristicaceae -myristicaceous -Myristicivora -myristicivorous -myristin -myristone -mirk -mirker -mirkest -mirky -mirkier -mirkiest -mirkily -mirkiness -mirkish -mirkly -mirkness -mirks -mirksome -Myrle -mirled -Myrlene -mirly -mirligo -mirliton -mirlitons -myrmec- -Myrmecia -myrmeco- -Myrmecobiinae -myrmecobiine -myrmecobine -Myrmecobius -myrmecochory -myrmecochorous -myrmecoid -myrmecoidy -myrmecology -myrmecological -myrmecologist -Myrmecophaga -Myrmecophagidae -myrmecophagine -myrmecophagoid -myrmecophagous -myrmecophile -myrmecophily -myrmecophilism -myrmecophilous -myrmecophyte -myrmecophytic -myrmecophobic -myrmekite -Myrmeleon -Myrmeleonidae -Myrmeleontidae -Myrmica -myrmicid -Myrmicidae -myrmicine -myrmicoid -Myrmidon -Myrmidones -Myrmidonian -Myrmidons -myrmotherine -Mirna -Myrna -Miro -myrobalan -Myron -myronate -myronic -myropolist -myrosin -myrosinase -Myrothamnaceae -myrothamnaceous -Myrothamnus -Mirounga -Myroxylon -myrrh -Myrrha -myrrhed -myrrhy -myrrhic -myrrhine -Myrrhis -myrrhol -myrrhophore -myrrhs -myrrh-tree -mirror -mirrored -mirror-faced -mirrory -mirroring -mirrorize -mirrorlike -mirrors -mirrorscope -mirror-writing -MIRS -Myrsinaceae -myrsinaceous -myrsinad -Myrsiphyllum -Myrt -Myrta -Myrtaceae -myrtaceous -myrtal -Myrtales -Mirth -mirthful -mirthfully -mirthfulness -mirthfulnesses -mirth-inspiring -mirthless -mirthlessly -mirthlessness -mirth-loving -mirth-making -mirth-marring -mirth-moving -mirth-provoking -mirths -mirthsome -mirthsomeness -Myrtia -Myrtice -Myrtie -myrtiform -Myrtilus -Myrtle -myrtleberry -myrtle-berry -myrtle-leaved -myrtlelike -myrtles -Myrtlewood -myrtol -Myrtus -Miru -MIRV -Myrvyn -mirvs -Myrwyn -mirza -mirzas -MIS -mis- -misaccent -misaccentuation -misaccept -misacception -misaccount -misaccused -misachievement -misacknowledge -misact -misacted -misacting -misacts -misadapt -misadaptation -misadapted -misadapting -misadapts -misadd -misadded -misadding -misaddress -misaddressed -misaddresses -misaddressing -misaddrest -misadds -misadjudicated -misadjust -misadjusted -misadjusting -misadjustment -misadjusts -misadmeasurement -misadminister -misadministration -misadressed -misadressing -misadrest -misadvantage -misadventure -misadventurer -misadventures -misadventurous -misadventurously -misadvertence -misadvice -misadvise -misadvised -misadvisedly -misadvisedness -misadvises -misadvising -misaffect -misaffected -misaffection -misaffirm -misagent -misagents -misaim -misaimed -misaiming -misaims -misalienate -misalign -misaligned -misalignment -misalignments -misallegation -misallege -misalleged -misalleging -misally -misalliance -misalliances -misallied -misallies -misallying -misallocation -misallot -misallotment -misallotted -misallotting -misallowance -misalphabetize -misalphabetized -misalphabetizes -misalphabetizing -misalter -misaltered -misaltering -misalters -misanalysis -misanalyze -misanalyzed -misanalyzely -misanalyzing -misandry -misanswer -misanthrope -misanthropes -misanthropi -misanthropy -misanthropia -misanthropic -misanthropical -misanthropically -misanthropies -misanthropism -misanthropist -misanthropists -misanthropize -misanthropos -misapparel -misappear -misappearance -misappellation -misappended -misapply -misapplicability -misapplication -misapplied -misapplier -misapplies -misapplying -misappoint -misappointment -misappraise -misappraised -misappraisement -misappraising -misappreciate -misappreciation -misappreciative -misapprehend -misapprehended -misapprehending -misapprehendingly -misapprehends -misapprehensible -misapprehension -misapprehensions -misapprehensive -misapprehensively -misapprehensiveness -misappropriate -misappropriated -misappropriately -misappropriates -misappropriating -misappropriation -misappropriations -misarchism -misarchist -misarray -misarrange -misarranged -misarrangement -misarrangements -misarranges -misarranging -misarticulate -misarticulated -misarticulating -misarticulation -misascribe -misascription -misasperse -misassay -misassayed -misassaying -misassays -misassent -misassert -misassertion -misassign -misassignment -misassociate -misassociation -misate -misatone -misatoned -misatones -misatoning -misattend -misattribute -misattribution -misaunter -misauthorization -misauthorize -misauthorized -misauthorizing -misaventeur -misaver -mis-aver -misaverred -misaverring -misavers -misaward -misawarded -misawarding -misawards -misbandage -misbaptize -misbear -misbecame -misbecome -misbecoming -misbecomingly -misbecomingness -misbede -misbefall -misbefallen -misbefitting -misbegan -misbeget -misbegetting -misbegin -misbeginning -misbegins -misbegot -misbegotten -misbegun -misbehave -misbehaved -misbehaver -misbehavers -misbehaves -misbehaving -misbehavior -misbehaviors -misbehaviour -misbeholden -misbelief -misbeliefs -misbelieve -misbelieved -misbeliever -misbelieving -misbelievingly -misbelove -misbeseem -misbestow -misbestowal -misbestowed -misbestowing -misbestows -misbetide -misbias -misbiased -misbiases -misbiasing -misbiassed -misbiasses -misbiassing -misbill -misbilled -misbilling -misbills -misbind -misbinding -misbinds -misbirth -misbode -misboden -misborn -misbound -misbrand -misbranded -misbranding -misbrands -misbrew -misbuild -misbuilding -misbuilds -misbuilt -misbusy -misbuttoned -misc -misc. -miscal -miscalculate -miscalculated -miscalculates -miscalculating -miscalculation -miscalculations -miscalculation's -miscalculator -miscall -miscalled -miscaller -miscalling -miscalls -miscanonize -miscarry -miscarriage -miscarriageable -miscarriages -miscarried -miscarries -miscarrying -miscast -miscasted -miscasting -miscasts -miscasualty -miscategorize -miscategorized -miscategorizing -misce -misceability -miscegenate -miscegenation -miscegenational -miscegenationist -miscegenations -miscegenator -miscegenetic -miscegenist -miscegine -miscellanarian -miscellane -miscellanea -miscellaneal -miscellaneity -miscellaneous -miscellaneously -miscellaneousness -miscellaneousnesses -miscellany -miscellanies -miscellanist -miscensure -mis-censure -miscensured -miscensuring -mis-center -MISCF -Mischa -mischallenge -mischance -mischanceful -mischances -mischancy -mischanter -mischaracterization -mischaracterize -mischaracterized -mischaracterizing -mischarge -mischarged -mischarges -mischarging -mischief -mischiefful -mischief-loving -mischief-maker -mischief-making -mischiefs -mischief-working -mischieve -mischievous -mischievously -mischievousness -mischievousnesses -mischio -mischoice -mischoose -mischoosing -mischose -mischosen -mischristen -miscibility -miscibilities -miscible -miscipher -miscitation -mis-citation -miscite -mis-cite -miscited -miscites -misciting -misclaim -misclaimed -misclaiming -misclaims -misclass -misclassed -misclasses -misclassify -misclassification -misclassifications -misclassified -misclassifies -misclassifying -misclassing -miscode -miscoded -miscodes -miscognizable -miscognizant -miscoin -miscoinage -miscoined -miscoining -miscoins -miscollocation -miscolor -miscoloration -miscolored -miscoloring -miscolors -miscolour -miscomfort -miscommand -miscommit -miscommunicate -miscommunication -miscommunications -miscompare -miscomplacence -miscomplain -miscomplaint -miscompose -miscomprehend -miscomprehension -miscomputation -miscompute -miscomputed -miscomputing -mis-con -misconceit -misconceive -misconceived -misconceiver -misconceives -misconceiving -misconception -misconceptions -misconception's -misconclusion -miscondition -misconduct -misconducted -misconducting -misconducts -misconfer -misconfidence -misconfident -misconfiguration -misconjecture -misconjectured -misconjecturing -misconjugate -misconjugated -misconjugating -misconjugation -misconjunction -misconnection -misconsecrate -misconsecrated -misconsequence -misconstitutional -misconstruable -misconstrual -misconstruct -misconstruction -misconstructions -misconstructive -misconstrue -misconstrued -misconstruer -misconstrues -misconstruing -miscontent -miscontinuance -misconvey -misconvenient -miscook -miscooked -miscookery -miscooking -miscooks -miscopy -mis-copy -miscopied -miscopies -miscopying -miscorrect -miscorrected -miscorrecting -miscorrection -miscounsel -miscounseled -miscounseling -miscounselled -miscounselling -miscount -miscounted -miscounting -miscounts -miscovet -miscreance -miscreancy -miscreant -miscreants -miscreate -miscreated -miscreating -miscreation -miscreative -miscreator -miscredit -miscredited -miscredulity -miscreed -miscript -miscrop -miscue -mis-cue -miscued -miscues -miscuing -miscultivated -misculture -miscurvature -miscut -miscuts -miscutting -misdate -misdated -misdateful -misdates -misdating -misdaub -misdeal -misdealer -misdealing -misdeals -misdealt -misdecide -misdecision -misdeclaration -misdeclare -misdeed -misdeeds -misdeem -misdeemed -misdeemful -misdeeming -misdeems -misdefine -misdefined -misdefines -misdefining -misdeformed -misdeliver -misdelivery -misdeliveries -misdemean -misdemeanant -misdemeaned -misdemeaning -misdemeanist -misdemeanor -misdemeanors -misdemeanour -misdentition -misdepart -misderivation -misderive -misderived -misderiving -misdescribe -misdescribed -misdescriber -misdescribing -misdescription -misdescriptive -misdesert -misdeserve -misdesignate -misdesire -misdetermine -misdevise -misdevoted -misdevotion -misdiagnose -misdiagnosed -misdiagnoses -misdiagnosing -misdiagnosis -misdiagrammed -misdial -misdials -misdictated -misdid -misdidived -misdiet -misdight -misdirect -misdirected -misdirecting -misdirection -misdirections -misdirects -misdispose -misdisposition -misdistinguish -misdistribute -misdistribution -misdived -misdivide -misdividing -misdivision -misdo -misdoer -misdoers -misdoes -misdoing -misdoings -misdone -misdoubt -misdoubted -misdoubtful -misdoubting -misdoubts -misdower -misdraw -misdrawing -misdrawn -misdraws -misdread -misdrew -misdrive -misdriven -misdrives -misdriving -misdrove -mise -misease -miseased -miseases -miseat -mis-eat -miseating -miseats -misecclesiastic -misedit -misedited -misediting -misedits -miseducate -miseducated -miseducates -miseducating -miseducation -miseducative -mise-enscene -mise-en-scene -miseffect -mysel -myself -mysell -misemphasis -misemphasize -misemphasized -misemphasizing -misemploy -misemployed -misemploying -misemployment -misemploys -misencourage -misendeavor -misenforce -misengrave -Misenheimer -misenite -misenjoy -Miseno -misenrol -misenroll -misenrolled -misenrolling -misenrolls -misenrols -misenter -mis-enter -misentered -misentering -misenters -misentitle -misentreat -misentry -mis-entry -misentries -misenunciation -Misenus -miser -miserabilia -miserabilism -miserabilist -miserabilistic -miserability -miserable -miserableness -miserablenesses -miserably -miseration -miserdom -misere -miserected -Miserere -misereres -miserhood -misery -misericord -misericorde -Misericordia -miseries -misery's -miserism -miserly -miserliness -miserlinesses -misers -mises -misesteem -misesteemed -misesteeming -misestimate -misestimated -misestimating -misestimation -misevaluate -misevaluation -misevent -mis-event -misevents -misexample -misexecute -misexecution -misexpectation -misexpend -misexpenditure -misexplain -misexplained -misexplanation -misexplicate -misexplication -misexposition -misexpound -misexpress -misexpression -misexpressive -misfaith -misfaiths -misfall -misfare -misfashion -misfashioned -misfate -misfather -misfault -misfeasance -misfeasances -misfeasor -misfeasors -misfeature -misfeatured -misfeign -misfield -misfielded -misfielding -misfields -misfigure -misfile -misfiled -misfiles -misfiling -misfire -misfired -misfires -misfiring -misfit -misfits -misfit's -misfitted -misfitting -misfocus -misfocused -misfocusing -misfocussed -misfocussing -misfond -misforgive -misform -misformation -misformed -misforming -misforms -misfortunate -misfortunately -misfortune -misfortuned -misfortune-proof -misfortuner -misfortunes -misfortune's -misframe -misframed -misframes -misframing -misgauge -misgauged -misgauges -misgauging -misgave -misgesture -misgye -misgive -misgiven -misgives -misgiving -misgivingly -misgivinglying -misgivings -misgo -misgotten -misgovern -misgovernance -misgoverned -misgoverning -misgovernment -misgovernor -misgoverns -misgracious -misgrade -misgraded -misgrading -misgraff -misgraffed -misgraft -misgrafted -misgrafting -misgrafts -misgrave -misgrew -misground -misgrounded -misgrow -misgrowing -misgrown -misgrows -misgrowth -misguage -misguaged -misguess -misguessed -misguesses -misguessing -misguggle -misguidance -misguide -misguided -misguidedly -misguidedness -misguider -misguiders -misguides -misguiding -misguidingly -misguise -Misha -Mishaan -mis-hallowed -mishandle -mishandled -mishandles -mishandling -mishanter -mishap -mishappen -mishaps -mishap's -mishara -mishave -Mishawaka -mishear -mis-hear -misheard -mis-hearer -mishearing -mishears -mis-heed -Mishicot -Mishikhwutmetunne -Mishima -miships -mishit -mis-hit -mishits -mishitting -mishmash -mish-mash -mishmashes -mishmee -Mishmi -mishmosh -mishmoshes -Mishna -Mishnah -Mishnaic -Mishnayoth -Mishnic -Mishnical -mis-hold -Mishongnovi -mis-humility -misy -Mysia -Mysian -mysid -Mysidacea -Mysidae -mysidean -misidentify -misidentification -misidentifications -misidentified -misidentifies -misidentifying -mysids -Misima -misimagination -misimagine -misimpression -misimprove -misimproved -misimprovement -misimproving -misimputation -misimpute -misincensed -misincite -misinclination -misincline -misinfer -misinference -misinferred -misinferring -misinfers -misinflame -misinform -misinformant -misinformants -misinformation -misinformations -misinformative -misinformed -misinformer -misinforming -misinforms -misingenuity -misinspired -misinstruct -misinstructed -misinstructing -misinstruction -misinstructions -misinstructive -misinstructs -misintelligence -misintelligible -misintend -misintention -misinter -misinterment -misinterpret -misinterpretable -misinterpretation -misinterpretations -misinterpreted -misinterpreter -misinterpreting -misinterprets -misinterred -misinterring -misinters -misintimation -misyoke -misyoked -misyokes -misyoking -misiones -Mysis -misitemized -misjoin -misjoinder -misjoined -misjoining -misjoins -misjudge -misjudged -misjudgement -misjudger -misjudges -misjudging -misjudgingly -misjudgment -misjudgments -miskal -miskals -miskeep -miskeeping -miskeeps -misken -miskenning -miskept -misky -miskick -miskicks -miskill -miskin -miskindle -Miskito -misknew -misknow -misknowing -misknowledge -misknown -misknows -Miskolc -mislabel -mislabeled -mislabeling -mislabelled -mislabelling -mislabels -mislabor -mislabored -mislaboring -mislabors -mislay -mislaid -mislayer -mislayers -mislaying -mislain -mislays -mislanguage -mislead -misleadable -misleader -misleading -misleadingly -misleadingness -misleads -mislear -misleared -mislearn -mislearned -mislearning -mislearns -mislearnt -misled -misleered -mislen -mislest -misly -mislie -mis-lie -mislies -mislight -mislighted -mislighting -mislights -mislying -mislikable -mislike -misliked -misliken -mislikeness -misliker -mislikers -mislikes -misliking -mislikingly -mislin -mislippen -mislit -mislive -mislived -mislives -misliving -mislled -mislocate -mislocated -mislocating -mislocation -mislodge -mislodged -mislodges -mislodging -misluck -mismade -mismake -mismakes -mismaking -mismanage -mismanageable -mismanaged -mismanagement -mismanagements -mismanager -mismanages -mismanaging -mismannered -mismanners -mismark -mis-mark -mismarked -mismarking -mismarks -mismarry -mismarriage -mismarriages -mismatch -mismatched -mismatches -mismatching -mismatchment -mismate -mismated -mismates -mismating -mismaze -mismean -mismeasure -mismeasured -mismeasurement -mismeasuring -mismeet -mis-meet -mismeeting -mismeets -mismenstruation -mismet -mismetre -misminded -mismingle -mismosh -mismoshes -mismotion -mismount -mismove -mismoved -mismoves -mismoving -misname -misnamed -misnames -misnaming -misnarrate -misnarrated -misnarrating -misnatured -misnavigate -misnavigated -misnavigating -misnavigation -Misniac -misnomed -misnomer -misnomered -misnomers -misnumber -misnumbered -misnumbering -misnumbers -misnurture -misnutrition -miso -miso- -misobedience -misobey -misobservance -misobserve -misocainea -misocapnic -misocapnist -misocatholic -misoccupy -misoccupied -misoccupying -misogallic -misogamy -misogamic -misogamies -misogamist -misogamists -misogyne -misogyny -misogynic -misogynical -misogynies -misogynism -mysogynism -misogynist -misogynistic -misogynistical -misogynists -misogynous -misohellene -mysoid -misology -misologies -misologist -misomath -misoneism -misoneist -misoneistic -misopaedia -misopaedism -misopaedist -misopaterist -misopedia -misopedism -misopedist -mysophilia -mysophobia -misopinion -misopolemical -misorder -misordination -Mysore -misorganization -misorganize -misorganized -misorganizing -misorient -misorientation -misos -misoscopist -misosopher -misosophy -misosophist -mysosophist -mysost -mysosts -misotheism -misotheist -misotheistic -misotyranny -misotramontanism -misoxene -misoxeny -mispackaged -mispacked -mispage -mispaged -mispages -mispagination -mispaging -mispay -mispaid -mispaying -mispaint -mispainted -mispainting -mispaints -misparse -misparsed -misparses -misparsing -mispart -misparted -misparting -misparts -mispassion -mispatch -mispatched -mispatches -mispatching -mispen -mis-pen -mispenned -mispenning -mispens -misperceive -misperceived -misperceiving -misperception -misperform -misperformance -mispersuade -misperuse -misphrase -misphrased -misphrasing -mispick -mispickel -misplace -misplaced -misplacement -misplaces -misplacing -misplay -misplayed -misplaying -misplays -misplan -misplans -misplant -misplanted -misplanting -misplants -misplead -mispleaded -mispleading -mispleads -misplease -mispled -mispoint -mispointed -mispointing -mispoints -mispoise -mispoised -mispoises -mispoising -mispolicy -misposition -mispossessed -mispractice -mispracticed -mispracticing -mispractise -mispractised -mispractising -mispraise -misprejudiced -mispresent -misprice -misprincipled -misprint -misprinted -misprinting -misprints -misprisal -misprise -misprised -mispriser -misprising -misprision -misprisions -misprizal -misprize -misprized -misprizer -misprizes -misprizing -misproceeding -misproduce -misproduced -misproducing -misprofess -misprofessor -mispronounce -mispronounced -mispronouncement -mispronouncer -mispronounces -mispronouncing -mispronunciation -mispronunciations -misproportion -misproportioned -misproportions -misproposal -mispropose -misproposed -misproposing -misproud -misprovide -misprovidence -misprovoke -misprovoked -misprovoking -mispublicized -mispublished -mispunch -mispunctuate -mispunctuated -mispunctuating -mispunctuation -mispurchase -mispurchased -mispurchasing -mispursuit -misput -misputting -misqualify -misqualified -misqualifying -misquality -misquotation -misquotations -misquote -misquoted -misquoter -misquotes -misquoting -misraise -misraised -misraises -misraising -misrate -misrated -misrates -misrating -misread -misreaded -misreader -misreading -misreads -misrealize -misreason -misreceive -misrecital -misrecite -misreckon -misreckoned -misreckoning -misrecognition -misrecognize -misrecollect -misrecollected -misrefer -misreference -misreferred -misreferring -misrefers -misreflect -misreform -misregulate -misregulated -misregulating -misrehearsal -misrehearse -misrehearsed -misrehearsing -misrelate -misrelated -misrelating -misrelation -misrely -mis-rely -misreliance -misrelied -misrelies -misreligion -misrelying -misremember -misremembered -misremembrance -misrender -misrendering -misrepeat -misreport -misreported -misreporter -misreporting -misreports -misreposed -misrepresent -misrepresentation -misrepresentations -misrepresentation's -misrepresentative -misrepresented -misrepresentee -misrepresenter -misrepresenting -misrepresents -misreprint -misrepute -misresemblance -misresolved -misresult -misreward -misrhyme -misrhymed -misrhymer -misroute -misrule -misruled -misruler -misrules -misruly -misruling -misrun -Miss -Miss. -Missa -missable -missay -mis-say -missaid -missayer -missaying -missays -missal -missals -missample -missampled -missampling -missang -missary -missatical -misscribed -misscribing -misscript -mis-season -misseat -mis-seat -misseated -misseating -misseats -missed -mis-see -mis-seek -misseem -mis-seem -missel -missel-bird -misseldin -missels -missel-thrush -missemblance -missend -mis-send -missending -missends -missense -mis-sense -missenses -missent -missentence -misserve -mis-serve -misservice -misses -misset -mis-set -missets -missetting -miss-fire -misshape -mis-shape -misshaped -misshapen -mis-shapen -misshapenly -misshapenness -misshapes -misshaping -mis-sheathed -misship -mis-ship -misshipment -misshipped -misshipping -misshod -mis-shod -misshood -Missi -Missy -missible -Missie -missies -missificate -missyish -missile -missileer -missileman -missilemen -missileproof -missilery -missiles -missile's -missyllabication -missyllabify -missyllabification -missyllabified -missyllabifying -missilry -missilries -missiness -missing -mis-sing -missingly -missiology -mission -missional -missionary -missionaries -missionary's -missionaryship -missionarize -missioned -missioner -missioning -missionization -missionize -missionizer -missions -missis -Missisauga -missises -missish -missishness -Mississauga -Mississippi -Mississippian -mississippians -missit -missive -missives -missmark -missment -Miss-Nancyish -Missolonghi -mis-solution -missort -mis-sort -missorted -missorting -missorts -Missoula -missound -mis-sound -missounded -missounding -missounds -Missouri -Missourian -Missourianism -missourians -Missouris -missourite -missout -missouts -misspace -mis-space -misspaced -misspaces -misspacing -misspeak -mis-speak -misspeaking -misspeaks -misspeech -misspeed -misspell -mis-spell -misspelled -misspelling -misspellings -misspells -misspelt -misspend -mis-spend -misspender -misspending -misspends -misspent -misspoke -misspoken -misstay -misstart -mis-start -misstarted -misstarting -misstarts -misstate -mis-state -misstated -misstatement -misstatements -misstater -misstates -misstating -missteer -mis-steer -missteered -missteering -missteers -misstep -mis-step -misstepping -missteps -misstyle -mis-style -misstyled -misstyles -misstyling -mis-stitch -misstop -mis-stop -misstopped -misstopping -misstops -mis-strike -mis-stroke -missuade -mis-succeeding -mis-sue -missuggestion -missuit -mis-suit -missuited -missuiting -missuits -missummation -missung -missuppose -missupposed -missupposing -missus -missuses -mis-sway -mis-swear -mis-sworn -mist -myst -mystacal -mystacial -mystacine -mystacinous -Mystacocete -Mystacoceti -mystagog -mystagogy -mystagogic -mystagogical -mystagogically -mystagogs -mystagogue -mistakable -mistakableness -mistakably -mistake -mistakeful -mistaken -mistakenly -mistakenness -mistakeproof -mistaker -mistakers -mistakes -mistaking -mistakingly -mistakion -mistal -Mistassini -mistaste -mistaught -mystax -mist-blotted -mist-blurred -mistbow -mistbows -mist-clad -mistcoat -mist-covered -misteach -misteacher -misteaches -misteaching -misted -mistell -mistelling -mistemper -mistempered -mistend -mistended -mistendency -mistending -mistends -mist-enshrouded -Mister -mistered -mistery -mystery -mysterial -mysteriarch -mysteries -mistering -mysteriosophy -mysteriosophic -mysterious -mysteriously -mysteriousness -mysteriousnesses -mystery's -mysterize -misterm -mistermed -misterming -misterms -misters -mystes -mistetch -misteuk -mist-exhaling -mistfall -mistflower -mistful -misthink -misthinking -misthinks -misthought -misthread -misthrew -misthrift -misthrive -misthrow -misthrowing -misthrown -misthrows -Misti -Misty -mistic -Mystic -mystical -mysticality -mystically -mysticalness -Mysticete -Mysticeti -mysticetous -mysticise -mysticism -mysticisms -mysticity -mysticize -mysticized -mysticizing -mysticly -mistico -mystico- -mystico-allegoric -mystico-religious -mystics -mystic's -mistide -misty-eyed -mistier -mistiest -mistify -mystify -mystific -mystifically -mystification -mystifications -mystificator -mystificatory -mystified -mystifiedly -mystifier -mystifiers -mystifies -mystifying -mystifyingly -mistigri -mistigris -mistyish -mistily -mistilled -mis-tilled -mistime -mistimed -mistimes -mistiming -misty-moisty -mist-impelling -mistiness -misting -mistion -mistype -mistyped -mistypes -mistyping -mistypings -mystique -mystiques -mistitle -mistitled -mistitles -mistitling -mist-laden -mistle -mistless -mistletoe -mistletoes -mistold -Miston -mistone -mistonusk -mistook -mistouch -mistouched -mistouches -mistouching -mistrace -mistraced -mistraces -mistracing -mistradition -mistrain -Mistral -mistrals -mistranscribe -mistranscribed -mistranscribing -mistranscript -mistranscription -mistranslate -mistranslated -mistranslates -mistranslating -mistranslation -mistreading -mistreat -mistreated -mistreating -mistreatment -mistreatments -mistreats -Mistress -mistressdom -mistresses -mistresshood -mistressless -mistressly -mistress-piece -mistress-ship -mistry -mistrial -mistrials -mistrist -mistryst -mistrysted -mistrysting -mistrysts -Mistrot -mistrow -mistrust -mistrusted -mistruster -mistrustful -mistrustfully -mistrustfulness -mistrustfulnesses -mistrusting -mistrustingly -mistrustless -mistrusts -mistruth -Mists -mist-shrouded -mistune -mis-tune -mistuned -mistunes -mistuning -misture -misturn -mistutor -mistutored -mistutoring -mistutors -mist-wet -mist-wreathen -misunderstand -misunderstandable -misunderstanded -misunderstander -misunderstanders -misunderstanding -misunderstandingly -misunderstandings -misunderstanding's -misunderstands -misunderstood -misunderstoodness -misunion -mis-union -misunions -misura -misusage -misusages -misuse -misused -misuseful -misusement -misuser -misusers -misuses -misusing -misusurped -misvaluation -misvalue -misvalued -misvalues -misvaluing -misventure -misventurous -misviding -misvouch -misvouched -misway -miswandered -miswed -miswedded -misween -miswend -miswern -miswire -miswired -miswiring -miswisdom -miswish -miswoman -misword -mis-word -misworded -miswording -miswords -misworship -misworshiped -misworshiper -misworshipper -miswrest -miswrit -miswrite -miswrites -miswriting -miswritten -miswrote -miswrought -miszealous -miszone -miszoned -miszoning -MIT -Mita -mytacism -Mitakshara -Mitanni -Mitannian -Mitannic -Mitannish -mitapsis -Mitch -Mitchael -mitchboard -mitch-board -Mitchel -Mitchell -Mitchella -Mitchells -Mitchellsburg -Mitchellville -Mitchiner -mite -Mitella -miteproof -miter -miter-clamped -mitered -miterer -miterers -miterflower -mitergate -mitering -miter-jointed -miters -miterwort -mites -Mitford -myth -myth. -mithan -mither -mithers -Mithgarth -Mithgarthr -mythic -mythical -mythicalism -mythicality -mythically -mythicalness -mythicise -mythicised -mythiciser -mythicising -mythicism -mythicist -mythicization -mythicize -mythicized -mythicizer -mythicizing -mythico- -mythico-historical -mythico-philosophical -mythico-romantic -mythify -mythification -mythified -mythifier -mythifying -mythism -mythist -mythize -mythland -mythmaker -mythmaking -mytho- -mythoclast -mythoclastic -mythogeneses -mythogenesis -mythogeny -mythogony -mythogonic -mythographer -mythography -mythographies -mythographist -mythogreen -mythoheroic -mythohistoric -mythoi -mythol -mythologema -mythologer -mythology -mythologian -mythologic -mythological -mythologically -mythologies -mythology's -mythologise -mythologist -mythologists -mythologization -mythologize -mythologized -mythologizer -mythologizing -mythologue -mythomania -mythomaniac -mythometer -mythonomy -mythopastoral -mythopeic -mythopeist -mythopoeia -mythopoeic -mythopoeism -mythopoeist -mythopoem -mythopoesy -mythopoesis -mythopoet -mythopoetic -mythopoetical -mythopoetise -mythopoetised -mythopoetising -mythopoetize -mythopoetized -mythopoetizing -mythopoetry -mythos -Mithra -Mithraea -Mithraeum -Mithraeums -Mithraic -Mithraicism -Mithraicist -Mithraicize -Mithraism -Mithraist -Mithraistic -Mithraitic -Mithraize -Mithras -Mithratic -Mithriac -mithridate -Mithridatic -mithridatise -mithridatised -mithridatising -mithridatism -mithridatize -mithridatized -mithridatizing -myths -mythus -MITI -mity -miticidal -miticide -miticides -mitier -mitiest -mitigable -mitigant -mitigate -mitigated -mitigatedly -mitigates -mitigating -mitigation -mitigations -mitigative -mitigator -mitigatory -mitigators -Mytilacea -mytilacean -mytilaceous -Mytilene -Mytiliaspis -mytilid -Mytilidae -mytiliform -Mitilni -mytiloid -mytilotoxine -Mytilus -miting -Mitinger -mitis -mitises -Mytishchi -Mitman -Mitnagdim -Mitnagged -mitochondria -mitochondrial -mitochondrion -mitogen -mitogenetic -mitogenic -mitogenicity -mitogens -mitokoromono -mitome -mitomycin -Myton -mitoses -mitosis -mitosome -mitotic -mitotically -Mitra -mitraille -mitrailleur -mitrailleuse -mitral -Mitran -mitrate -Mitre -mitred -mitreflower -mitre-jointed -Mitrephorus -mitrer -mitres -mitrewort -mitre-wort -Mitridae -mitriform -mitring -MITS -mit's -Mitscher -Mitsukurina -Mitsukurinidae -mitsumata -mitsvah -mitsvahs -mitsvoth -mitt -mittatur -Mittel -Mitteleuropa -Mittel-europa -mittelhand -Mittelmeer -mitten -mittened -mittenlike -mittens -mitten's -mittent -Mitterrand -mitty -Mittie -mittimus -mittimuses -mittle -mitts -Mitu -Mitua -mitvoth -Mitzi -Mitzie -Mitzl -mitzvah -mitzvahs -mitzvoth -Miun -miurus -mix -myxa -mixability -mixable -mixableness -myxadenitis -myxadenoma -myxaemia -myxamoeba -myxangitis -myxasthenia -mixblood -Mixe -mixed -mixed-blood -myxedema -myxedemas -myxedematoid -myxedematous -myxedemic -mixedly -mixedness -mixed-up -myxemia -mixen -mixer -mixeress -mixers -mixes -Mix-hellene -mixhill -mixy -mixible -Mixie -mixilineal -mixy-maxy -Myxine -mixing -Myxinidae -myxinoid -Myxinoidei -mixite -myxo -mixo- -myxo- -Myxobacteria -Myxobacteriaceae -myxobacteriaceous -Myxobacteriales -mixobarbaric -myxoblastoma -myxochondroma -myxochondrosarcoma -mixochromosome -myxocystoma -myxocyte -myxocytes -Myxococcus -Mixodectes -Mixodectidae -myxoedema -myxoedemic -myxoenchondroma -myxofibroma -myxofibrosarcoma -myxoflagellate -myxogaster -Myxogasteres -Myxogastrales -Myxogastres -myxogastric -myxogastrous -myxoglioma -myxoid -myxoinoma -mixolydian -myxolipoma -mixology -mixologies -mixologist -myxoma -myxomas -myxomata -myxomatosis -myxomatous -Myxomycetales -myxomycete -Myxomycetes -myxomycetous -myxomyoma -myxoneuroma -myxopapilloma -Myxophyceae -myxophycean -Myxophyta -myxophobia -mixoploid -mixoploidy -myxopod -Myxopoda -myxopodan -myxopodia -myxopodium -myxopodous -myxopoiesis -myxorrhea -myxosarcoma -Mixosaurus -Myxospongiae -myxospongian -Myxospongida -myxospore -Myxosporidia -myxosporidian -Myxosporidiida -Myxosporium -myxosporous -Myxothallophyta -myxotheca -mixotrophic -myxoviral -myxovirus -mixt -Mixtec -Mixtecan -Mixteco -Mixtecos -Mixtecs -mixtiform -mixtilineal -mixtilinear -mixtilion -mixtion -mixture -mixtures -mixture's -mixup -mix-up -mixups -Mizar -Mize -mizen -mizenmast -mizen-mast -mizens -Mizitra -mizmaze -Myzodendraceae -myzodendraceous -Myzodendron -Mizoguchi -Myzomyia -myzont -Myzontes -Mizoram -Myzostoma -Myzostomata -myzostomatous -myzostome -myzostomid -Myzostomida -Myzostomidae -myzostomidan -myzostomous -Mizpah -mizrach -Mizrachi -mizrah -Mizrahi -Mizraim -Mizuki -mizzen -mizzenmast -mizzenmastman -mizzenmasts -mizzens -mizzentop -mizzentopman -mizzen-topmast -mizzentopmen -mizzy -mizzle -mizzled -mizzler -mizzles -mizzly -mizzling -mizzonite -MJ -Mjico -Mjollnir -Mjolnir -Mk -mk. -MKS -mkt -mkt. -MKTG -ML -ml. -MLA -Mlaga -mlange -Mlar -Mlawsky -MLC -MLCD -MLD -mlechchha -MLEM -Mler -MLF -MLG -Mli -M-line -MLitt -MLL -Mlle -Mlles -Mllly -MLO -Mlos -MLR -MLS -MLT -MLV -MLW -mlx -MM -MM. -MMC -MMDF -MME -MMES -MMetE -mmf -mmfd -MMFS -MMGT -MMH -mmHg -MMJ -MMM -mmmm -MMOC -MMP -MMS -MMT -MMU -MMus -MMW -MMX -MN -MNA -mnage -MNAS -MNE -mnem -mneme -mnemic -Mnemiopsis -Mnemon -mnemonic -mnemonical -mnemonicalist -mnemonically -mnemonicon -mnemonics -mnemonic's -mnemonism -mnemonist -mnemonization -mnemonize -mnemonized -mnemonizing -Mnemosyne -mnemotechny -mnemotechnic -mnemotechnical -mnemotechnics -mnemotechnist -mnesic -Mnesicles -mnestic -Mnevis -Mngr -Mniaceae -mniaceous -Mnidrome -mnioid -Mniotiltidae -Mnium -MNOS -MNP -MNRAS -MNS -MNurs -mo -Mo. -MOA -Moab -Moabite -Moabitess -Moabitic -Moabitish -moan -moaned -moanful -moanfully -moanification -moaning -moaningly -moanless -moans -Moapa -Moaria -Moarian -moas -moat -moated -moathill -moating -moatlike -moats -moat's -Moatsville -Moattalite -Moazami -mob -mobable -mobbable -mobbed -mobber -mobbers -mobby -mobbie -mobbing -mobbish -mobbishly -mobbishness -mobbism -mobbist -mobble -mobcap -mob-cap -mobcaps -mobed -Mobeetie -Moberg -Moberly -Mobil -Mobile -mobiles -mobilia -Mobilian -mobilianer -mobiliary -mobilisable -mobilisation -mobilise -mobilised -mobiliser -mobilises -mobilising -mobility -mobilities -mobilizable -mobilization -mobilizations -mobilize -mobilized -mobilizer -mobilizers -mobilizes -mobilizing -mobilometer -Mobius -Mobjack -moble -Mobley -moblike -mob-minded -mobocracy -mobocracies -mobocrat -mobocratic -mobocratical -mobocrats -mobolatry -mobproof -Mobridge -mobs -mob's -mobship -mobsman -mobsmen -mobster -mobsters -Mobula -Mobulidae -Mobutu -MOC -MOCA -Mocambique -moccasin -moccasins -moccasin's -moccenigo -Mocha -mochas -Moche -mochel -mochy -Mochica -mochila -mochilas -mochras -mochudi -Mochun -mock -mockable -mockado -mockage -mock-beggar -mockbird -mock-bird -mocked -mocker -mockery -mockeries -mockery-proof -mockernut -mockers -mocketer -mockful -mockfully -mockground -mock-heroic -mock-heroical -mock-heroically -mocking -mockingbird -mocking-bird -mockingbirds -mockingly -mockingstock -mocking-stock -mockish -mocks -Mocksville -mockup -mock-up -mockups -Moclips -mocmain -moco -Mocoa -Mocoan -mocock -mocomoco -Moctezuma -mocuck -MOD -mod. -modal -Modale -modalism -modalist -modalistic -modality -modalities -modality's -modalize -modally -modder -Mode -model -modeled -modeler -modelers -modeless -modelessness -modeling -modelings -modelist -modelize -modelled -modeller -modellers -modelling -modelmaker -modelmaking -models -model's -MODEM -modems -Modena -Modenese -moder -moderant -moderantism -moderantist -moderate -moderated -moderately -moderateness -moderatenesses -moderates -moderating -moderation -moderationism -moderationist -Moderations -moderatism -moderatist -moderato -moderator -moderatorial -moderators -moderatorship -moderatos -moderatrix -Moderatus -Modern -modern-bred -modern-built -moderne -moderner -modernest -modernicide -modernisation -modernise -modernised -moderniser -modernish -modernising -modernism -modernist -modernistic -modernists -modernity -modernities -modernizable -modernization -modernizations -modernize -modernized -modernizer -modernizers -modernizes -modernizing -modernly -modern-looking -modern-made -modernness -modernnesses -modern-practiced -moderns -modern-sounding -modes -modest -Modesta -Modeste -modester -modestest -Modesty -Modestia -modesties -Modestine -modestly -modestness -Modesto -Modesttown -modge -modi -mody -modiation -Modibo -modica -modicity -modicum -modicums -Modie -modif -modify -modifiability -modifiable -modifiableness -modifiably -modificability -modificable -modificand -modification -modificationist -modifications -modificative -modificator -modificatory -modified -modifier -modifiers -modifies -modifying -Modigliani -modili -modillion -modiolar -modioli -Modiolus -modish -modishly -modishness -modist -modiste -modistes -modistry -modius -Modjeska -Modla -modo -Modoc -Modred -Mods -modula -modulability -modulant -modular -modularity -modularities -modularization -modularize -modularized -modularizes -modularizing -modularly -modulate -modulated -modulates -modulating -modulation -modulations -modulative -modulator -modulatory -modulators -modulator's -module -modules -module's -modulet -moduli -Modulidae -modulize -modulo -modulus -modumite -modus -Moe -Moebius -moeble -moeck -Moed -Moehringia -moellon -Moen -Moerae -Moeragetes -moerithere -moeritherian -Moeritheriidae -Moeritherium -Moersch -Moesia -Moesogoth -Moeso-goth -Moesogothic -Moeso-gothic -moet -moeurs -mofette -mofettes -moff -Moffat -Moffett -moffette -moffettes -Moffit -Moffitt -moffle -mofussil -mofussilite -MOFW -MOG -Mogadiscio -Mogador -Mogadore -Mogan -Mogans -mogdad -Mogerly -moggan -mogged -moggy -moggies -mogging -moggio -Moghan -moghul -mogigraphy -mogigraphia -mogigraphic -mogilalia -mogilalism -Mogilev -mogiphonia -mogitocia -mogo -mogographia -Mogollon -mogos -mogote -Mograbi -Mogrebbin -mogs -moguey -Moguel -Mogul -moguls -mogulship -Moguntine -MOH -moha -mohabat -Mohacan -mohair -mohairs -mohalim -Mohall -Moham -Moham. -Mohamed -Mohammad -Mohammed -Mohammedan -Mohammedanism -Mohammedanization -Mohammedanize -Mohammedism -Mohammedist -Mohammedization -Mohammedize -Mohandas -Mohandis -mohar -Moharai -Moharram -mohatra -Mohave -Mohaves -Mohawk -Mohawkian -mohawkite -Mohawks -Mohegan -mohel -mohelim -mohels -Mohenjo-Daro -Mohican -Mohicans -Mohineyam -Mohism -Mohist -Mohl -Mohn -mohnseed -Mohnton -Moho -Mohock -Mohockism -Mohole -Moholy-Nagy -mohoohoo -mohos -Mohr -Mohrodendron -Mohrsville -Mohsen -Mohun -mohur -mohurs -mohwa -MOI -moy -Moia -Moya -moid -moider -moidore -moidores -moyen -moyen-age -moyenant -moyener -moyenless -moyenne -moier -Moyer -Moyers -moiest -moieter -moiety -moieties -MOIG -Moigno -moyite -moil -moyl -moile -moyle -moiled -moiley -moiler -moilers -moiles -moiling -moilingly -moils -moilsome -Moina -Moyna -Moynahan -moineau -Moines -Moingwena -moio -moyo -Moyobamba -Moyock -Moir -Moira -Moyra -Moirai -moire -moireed -moireing -moires -moirette -Moise -Moiseyev -Moiseiwitsch -Moises -Moishe -Moism -moison -Moissan -moissanite -moist -moisten -moistened -moistener -moisteners -moistening -moistens -moister -moistest -moistful -moisty -moistify -moistiness -moistish -moistishness -moistless -moistly -moistness -moistnesses -moisture -moisture-absorbent -moistureless -moistureproof -moisture-resisting -moistures -moisturize -moisturized -moisturizer -moisturizers -moisturizes -moisturizing -moit -moither -moity -moitier -moitiest -Moitoso -mojarra -mojarras -Mojave -Mojaves -Mojgan -Moji -Mojo -mojoes -mojos -Mok -mokaddam -mokador -mokamoka -Mokane -Mokas -moke -Mokena -mokes -Mokha -moki -moky -mokihana -mokihi -Moko -moko-moko -Mokpo -moksha -mokum -MOL -mol. -MOLA -molal -Molala -molality -molalities -Molalla -molar -molary -molariform -molarimeter -molarity -molarities -molars -molas -Molasse -molasses -molasseses -molassy -molassied -molave -mold -moldability -moldable -moldableness -moldasle -Moldau -Moldavia -Moldavian -moldavite -moldboard -moldboards -molded -molder -moldered -moldery -moldering -molders -moldy -moldier -moldiest -moldiness -moldinesses -molding -moldings -moldmade -Moldo-wallachian -moldproof -molds -moldwarp -moldwarps -Mole -mole-blind -mole-blindedly -molebut -molecast -mole-catching -Molech -molecula -molecular -molecularist -molecularity -molecularly -molecule -molecules -molecule's -mole-eyed -molehead -mole-head -moleheap -molehill -mole-hill -molehilly -molehillish -molehills -moleism -molelike -Molena -molendinar -molendinary -molengraaffite -moleproof -moler -moles -mole-sighted -moleskin -moleskins -molest -molestation -molestations -molested -molester -molesters -molestful -molestfully -molestie -molesting -molestious -molests -molet -molewarp -Molge -Molgula -Moli -moly -molybdate -molybdena -molybdenic -molybdeniferous -molybdenite -molybdenous -molybdenum -molybdic -molybdite -molybdocardialgia -molybdocolic -molybdodyspepsia -molybdomancy -molybdomenite -molybdonosus -molybdoparesis -molybdophyllite -molybdosis -molybdous -Molidae -Moliere -molies -molify -molified -molifying -molilalia -molimen -moliminous -Molina -molinary -Moline -molinet -moling -Molini -Molinia -Molinism -Molinist -Molinistic -Molino -Molinos -Moliones -molys -Molise -molysite -molition -molka -Moll -molla -Mollah -mollahs -molland -Mollberg -molle -Mollee -Mollendo -molles -mollescence -mollescent -Mollet -molleton -Molli -Molly -mollichop -mollycoddle -molly-coddle -mollycoddled -mollycoddler -mollycoddlers -mollycoddles -mollycoddling -mollycosset -mollycot -mollicrush -Mollie -mollienisia -mollient -molliently -Mollies -mollify -mollifiable -mollification -mollifications -mollified -mollifiedly -mollifier -mollifiers -mollifies -mollifying -mollifyingly -mollifyingness -molligrant -molligrubs -mollyhawk -mollymawk -mollipilose -Mollisiaceae -mollisiose -mollisol -mollities -mollitious -mollitude -Molloy -molls -Molluginaceae -Mollugo -mollusc -Mollusca -molluscan -molluscans -molluscicidal -molluscicide -molluscivorous -molluscoid -Molluscoida -molluscoidal -molluscoidan -Molluscoidea -molluscoidean -molluscous -molluscousness -molluscs -molluscum -mollusk -molluskan -mollusklike -mollusks -molman -molmen -molmutian -Moln -Molniya -Moloch -Molochize -molochs -Molochship -molocker -moloid -Molokai -Molokan -moloker -molompi -Molopo -Molorchus -molosse -molosses -Molossian -molossic -Molossidae -molossine -molossoid -Molossus -Molothrus -Molotov -molpe -molrooken -mols -molt -molted -molten -moltenly -molter -molters -molting -Moltke -molto -Molton -molts -moltten -Molucca -Moluccan -Moluccas -Moluccella -Moluche -Molus -molvi -mom -Mombasa -mombin -momble -Mombottu -mome -Momence -moment -momenta -momental -momentally -momentaneall -momentaneity -momentaneous -momentaneously -momentaneousness -momentany -momentary -momentarily -momentariness -momently -momento -momentoes -momentos -momentous -momentously -momentousment -momentousments -momentousness -momentousnesses -moments -moment's -Momentum -momentums -momes -Momi -momiology -momish -momism -momisms -momist -momma -mommas -momme -mommer -mommet -Mommi -Mommy -mommies -Mommsen -momo -Momordica -Momos -Momotidae -Momotinae -Momotus -Mompos -moms -momser -momsers -Momus -Momuses -MOMV -momzer -momzers -Mon -mon- -Mon. -Mona -Monaca -Monacan -monacanthid -Monacanthidae -monacanthine -monacanthous -monacetin -monach -Monacha -monachal -monachate -Monachi -monachism -monachist -monachization -monachize -monacid -monacidic -monacids -monacillo -monacillos -Monaco -monact -monactin -monactinal -monactine -monactinellid -monactinellidan -monad -monadal -monadelph -Monadelphia -monadelphian -monadelphous -monades -monadic -monadical -monadically -monadiform -monadigerous -Monadina -monadism -monadisms -monadistic -monadnock -monadology -monads -monaene -Monafo -Monagan -Monaghan -Monah -Monahan -Monahans -Monahon -monal -monamide -monamine -monamniotic -Monanday -monander -monandry -Monandria -monandrian -monandric -monandries -monandrous -Monango -monanthous -monaphase -monapsal -monarch -monarchal -monarchally -monarchess -monarchy -monarchial -Monarchian -monarchianism -Monarchianist -monarchianistic -monarchic -monarchical -monarchically -monarchies -monarchy's -monarchism -monarchist -monarchistic -monarchists -monarchize -monarchized -monarchizer -monarchizing -monarchlike -monarcho -monarchomachic -monarchomachist -monarchs -Monarda -monardas -Monardella -Monario -Monarski -monarthritis -monarticular -monas -Monasa -Monascidiae -monascidian -monase -Monash -monaster -monastery -monasterial -monasterially -monasteries -monastery's -monastic -monastical -monastically -monasticism -monasticisms -monasticize -monastics -Monastir -monatomic -monatomically -monatomicity -monatomism -monaul -monauli -monaulos -monaural -monaurally -Monaville -monax -monaxial -monaxile -monaxon -monaxonial -monaxonic -Monaxonida -monaxons -monazine -monazite -monazites -Monbazillac -Monbuttu -Moncear -Monceau -Monchengladbach -Monchhof -monchiquite -Monck -Monclova -Moncton -Moncure -Mond -Monda -Monday -Mondayish -Mondayishness -Mondayland -mondain -mondaine -Mondays -monday's -Mondale -Mondamin -monde -mondego -mondes -mondial -mondo -mondos -Mondovi -Mondrian -mondsee -mone -monecian -monecious -monedula -Monee -Monegasque -money -moneyage -moneybag -money-bag -moneybags -money-bloated -money-bound -money-box -money-breeding -moneychanger -money-changer -moneychangers -money-earning -moneyed -moneyer -moneyers -moneyflower -moneygetting -money-getting -money-grasping -moneygrub -money-grub -moneygrubber -moneygrubbing -money-grubbing -money-hungry -moneying -moneylender -money-lender -moneylenders -moneylending -moneyless -moneylessness -money-loving -money-mad -moneymake -moneymaker -money-maker -moneymakers -moneymaking -money-making -moneyman -moneymonger -moneymongering -moneyocracy -money-raising -moneys -moneysaving -money-saving -money-spelled -money-spinner -money's-worth -moneywise -moneywort -money-wort -Monel -monellin -monembryary -monembryony -monembryonic -moneme -monepic -monepiscopacy -monepiscopal -monepiscopus -moner -Monera -moneral -moneran -monergic -monergism -monergist -monergistic -moneric -moneron -monerons -Monerozoa -monerozoan -monerozoic -monerula -Moneses -monesia -Monessen -monest -monestrous -Monet -Moneta -monetary -monetarily -monetarism -monetarist -monetarists -moneth -monetise -monetised -monetises -monetising -monetite -monetization -monetize -monetized -monetizes -monetizing -Monett -Monetta -Monette -mong -mongcorn -Monge -Mongeau -mongeese -monger -mongered -mongerer -mongery -mongering -mongers -Monghol -Mongholian -Mongibel -mongler -Mongo -mongoe -mongoes -Mongoyo -Mongol -Mongolia -Mongolian -Mongolianism -mongolians -Mongolic -Mongolioid -Mongolish -Mongolism -mongolisms -Mongolization -Mongolize -Mongolo-dravidian -Mongoloid -mongoloids -Mongolo-manchurian -Mongolo-tatar -Mongolo-turkic -mongols -mongoose -Mongooses -mongos -mongrel -mongreldom -mongrelisation -mongrelise -mongrelised -mongreliser -mongrelish -mongrelising -mongrelism -mongrelity -mongrelization -mongrelize -mongrelized -mongrelizing -mongrelly -mongrelness -mongrels -mongst -'mongst -Monhegan -monheimite -mony -Monia -monial -Monias -monic -Monica -monicker -monickers -Monico -Monie -monied -monier -monies -Monika -moniker -monikers -monilated -monilethrix -Monilia -Moniliaceae -moniliaceous -monilial -Moniliales -moniliasis -monilicorn -moniliform -moniliformly -monilioid -moniment -Monimia -Monimiaceae -monimiaceous -monimolite -monimostylic -Monique -monish -monished -monisher -monishes -monishing -monishment -monism -monisms -monist -monistic -monistical -monistically -monists -monitary -monition -monitions -monitive -monitor -monitored -monitory -monitorial -monitorially -monitories -monitoring -monitorish -monitors -monitorship -monitress -monitrix -Moniz -Monjan -Monjo -Monk -monkbird -monkcraft -monkdom -monkey -monkey-ball -monkeyboard -monkeyed -monkeyface -monkey-face -monkey-faced -monkeyfy -monkeyfied -monkeyfying -monkeyflower -monkey-god -monkeyhood -monkeying -monkeyish -monkeyishly -monkeyishness -monkeyism -monkeylike -monkeynut -monkeypod -monkeypot -monkey-pot -monkeyry -monkey-rigged -monkeyrony -monkeys -monkeyshine -monkeyshines -monkeytail -monkey-tailed -monkery -monkeries -monkeryies -monkess -monkfish -monk-fish -monkfishes -monkflower -Mon-Khmer -monkhood -monkhoods -monkish -monkishly -monkishness -monkishnesses -monkism -monkly -monklike -monkliness -monkmonger -monks -monk's -monkship -monkshood -monk's-hood -monkshoods -Monkton -Monmouth -monmouthite -Monmouthshire -Monney -Monnet -monny -monniker -monnion -Mono -mono- -monoacetate -monoacetin -monoacid -monoacidic -monoacids -monoalphabetic -monoamid -monoamide -monoamin -monoamine -monoaminergic -monoamino -monoammonium -monoatomic -monoazo -monobacillary -monobase -monobasic -monobasicity -monobath -monoblastic -monoblepsia -monoblepsis -monobloc -monobranchiate -monobromacetone -monobromated -monobromide -monobrominated -monobromination -monobromized -monobromoacetanilide -monobromoacetone -monobutyrin -monocable -monocalcium -monocarbide -monocarbonate -monocarbonic -monocarboxylic -monocardian -monocarp -monocarpal -monocarpellary -monocarpian -monocarpic -monocarpous -monocarps -monocellular -monocentric -monocentrid -Monocentridae -Monocentris -monocentroid -monocephalous -monocerco -monocercous -Monoceros -Monocerotis -monocerous -monochasia -monochasial -monochasium -Monochlamydeae -monochlamydeous -monochlor -monochloracetic -monochloranthracene -monochlorbenzene -monochloride -monochlorinated -monochlorination -monochloro -monochloro- -monochloroacetic -monochlorobenzene -monochloromethane -monochoanitic -monochord -monochordist -monochordize -monochroic -monochromasy -monochromat -monochromate -monochromatic -monochromatically -monochromaticity -monochromatism -monochromator -monochrome -monochromes -monochromy -monochromic -monochromical -monochromically -monochromist -monochromous -monochronic -monochronometer -monochronous -monocyanogen -monocycle -monocycly -monocyclic -Monocyclica -monociliated -monocystic -Monocystidae -Monocystidea -Monocystis -monocyte -monocytes -monocytic -monocytoid -monocytopoiesis -monocle -monocled -monocleid -monocleide -monocles -monoclinal -monoclinally -monocline -monoclinian -monoclinic -monoclinism -monoclinometric -monoclinous -monoclonal -Monoclonius -Monocoelia -monocoelian -monocoelic -Monocondyla -monocondylar -monocondylian -monocondylic -monocondylous -monocoque -monocormic -monocot -monocotyl -monocotyledon -Monocotyledones -monocotyledonous -monocotyledons -monocots -monocracy -monocrat -monocratic -monocratis -monocrats -monocrotic -monocrotism -monocular -monocularity -monocularly -monoculate -monocule -monoculist -monoculous -monocultural -monoculture -monoculus -monodactyl -monodactylate -monodactyle -monodactyly -monodactylism -monodactylous -monodelph -Monodelphia -monodelphian -monodelphic -monodelphous -monodermic -monody -monodic -monodical -monodically -monodies -monodimetric -monodynamic -monodynamism -monodist -monodists -monodize -monodomous -Monodon -monodont -Monodonta -monodontal -monodram -monodrama -monodramatic -monodramatist -monodrame -monodromy -monodromic -monoecy -Monoecia -monoecian -monoecies -monoecious -monoeciously -monoeciousness -monoecism -monoeidic -monoenergetic -monoester -monoestrous -monoethanolamine -monoethylamine -monofil -monofilament -monofilm -monofils -monoflagellate -monoformin -monofuel -monofuels -monogamy -monogamian -monogamic -monogamies -monogamik -monogamist -monogamistic -monogamists -monogamou -monogamous -monogamously -monogamousness -monoganglionic -monogastric -monogene -Monogenea -monogenean -monogeneity -monogeneous -monogenesy -monogenesis -monogenesist -monogenetic -Monogenetica -monogeny -monogenic -monogenically -monogenies -monogenism -monogenist -monogenistic -monogenous -monogerm -monogyny -monogynia -monogynic -monogynies -monogynious -monogynist -monogynoecial -monogynous -monoglycerid -monoglyceride -monoglot -monogoneutic -monogony -monogonoporic -monogonoporous -monogram -monogramed -monograming -monogramm -monogrammatic -monogrammatical -monogrammed -monogrammic -monogramming -monograms -monogram's -monograph -monographed -monographer -monographers -monographes -monography -monographic -monographical -monographically -monographing -monographist -monographs -monograph's -monograptid -Monograptidae -Monograptus -monohybrid -monohydrate -monohydrated -monohydric -monohydrogen -monohydroxy -monohull -monoicous -monoid -mono-ideic -mono-ideism -mono-ideistic -mono-iodo -mono-iodohydrin -mono-iodomethane -mono-ion -monoketone -monokini -monolayer -monolater -monolatry -monolatrist -monolatrous -monoline -monolingual -monolinguist -monoliteral -monolith -monolithal -monolithic -monolithically -monolithism -monoliths -monolobular -monolocular -monolog -monology -monologian -monologic -monological -monologies -monologist -monologists -monologize -monologized -monologizing -monologs -monologue -monologues -monologuist -monologuists -monomachy -monomachist -monomail -monomania -monomaniac -monomaniacal -monomaniacs -monomanias -monomark -monomastigate -monomeniscous -monomer -monomeric -monomerous -monomers -monometalism -monometalist -monometallic -monometallism -monometallist -monometer -monomethyl -monomethylamine -monomethylated -monomethylic -monometric -monometrical -Monomya -monomial -monomials -monomyary -Monomyaria -monomyarian -monomict -monomineral -monomineralic -monomolecular -monomolecularly -monomolybdate -Monomorium -monomorphemic -monomorphic -monomorphism -monomorphous -Monon -Monona -mononaphthalene -mononch -Mononchus -mononeural -Monongah -Monongahela -mononychous -mononym -mononymy -mononymic -mononymization -mononymize -mononitrate -mononitrated -mononitration -mononitride -mononitrobenzene -mononomial -mononomian -monont -mononuclear -mononucleated -mononucleoses -mononucleosis -mononucleosises -mononucleotide -monoousian -monoousious -monoparental -monoparesis -monoparesthesia -monopathy -monopathic -monopectinate -monopersonal -monopersulfuric -monopersulphuric -Monopetalae -monopetalous -monophagy -monophagia -monophagism -monophagous -monophase -monophasia -monophasic -monophylety -monophyletic -monophyleticism -monophyletism -monophylite -monophyllous -monophyodont -monophyodontism -Monophysism -Monophysite -Monophysitic -Monophysitical -Monophysitism -monophobia -monophoic -monophone -monophony -monophonic -monophonically -monophonies -monophonous -monophotal -monophote -Monophoto -monophthalmic -monophthalmus -monophthong -monophthongal -monophthongization -monophthongize -monophthongized -monophthongizing -Monopylaea -Monopylaria -monopylean -monopyrenous -monopitch -monoplace -Monoplacophora -monoplacula -monoplacular -monoplaculate -monoplane -monoplanes -monoplanist -monoplasmatic -monoplasric -monoplast -monoplastic -monoplegia -monoplegic -monoploid -Monopneumoa -monopneumonian -monopneumonous -monopode -monopodes -monopody -monopodia -monopodial -monopodially -monopodic -monopodies -monopodium -monopodous -monopolar -monopolaric -monopolarity -monopole -monopoles -Monopoly -monopolies -monopolylogist -monopolylogue -monopoly's -monopolisation -monopolise -monopolised -monopoliser -monopolising -monopolism -monopolist -monopolistic -monopolistically -monopolists -monopolitical -monopolizable -monopolization -monopolizations -monopolize -monopolized -monopolizer -monopolizes -monopolizing -monopoloid -monopolous -monopotassium -monoprionid -monoprionidian -monoprogrammed -monoprogramming -monopropellant -monoprotic -monopsychism -monopsony -monopsonistic -monoptera -monopteral -Monopteridae -monopteroi -monopteroid -monopteron -monopteros -monopterous -monoptic -monoptical -monoptote -monoptotic -monopttera -monorail -monorailroad -monorails -monorailway -monorchid -monorchidism -monorchis -monorchism -monorganic -monorhyme -monorhymed -Monorhina -monorhinal -monorhine -monorhinous -monorhythmic -monorime -monos -monosaccharide -monosaccharose -monoschemic -monoscope -monose -monosemy -monosemic -monosepalous -monoservice -monosexuality -monosexualities -monosilane -monosilicate -monosilicic -monosyllabic -monosyllabical -monosyllabically -monosyllabicity -monosyllabism -monosyllabize -monosyllable -monosyllables -monosyllablic -monosyllogism -monosymmetry -monosymmetric -monosymmetrical -monosymmetrically -monosymptomatic -monosynaptic -monosynaptically -monosynthetic -monosiphonic -monosiphonous -monoski -monosodium -monosomatic -monosomatous -monosome -monosomes -monosomy -monosomic -monospace -monosperm -monospermal -monospermy -monospermic -monospermous -monospherical -monospondylic -monosporangium -monospore -monospored -monosporiferous -monosporous -monostable -monostele -monostely -monostelic -monostelous -monostich -monostichic -monostichous -monostylous -Monostomata -Monostomatidae -monostomatous -monostome -Monostomidae -monostomous -Monostomum -monostromatic -monostrophe -monostrophic -monostrophics -monosubstituted -monosubstitution -monosulfone -monosulfonic -monosulphide -monosulphone -monosulphonic -monotelephone -monotelephonic -monotellurite -monotessaron -Monothalama -monothalaman -monothalamian -monothalamic -monothalamous -monothecal -monotheism -monotheisms -monotheist -monotheistic -monotheistical -monotheistically -monotheists -Monothelete -Monotheletian -Monotheletic -Monotheletism -monothelious -Monothelism -Monothelite -Monothelitic -Monothelitism -monothetic -monotic -monotint -monotints -monotypal -Monotype -monotypes -monotypic -monotypical -monotypous -Monotocardia -monotocardiac -monotocardian -monotocous -monotomous -monotonal -monotone -monotones -monotony -monotonic -monotonical -monotonically -monotonicity -monotonies -monotonist -monotonize -monotonous -monotonously -monotonousness -monotonousnesses -monotremal -Monotremata -monotremate -monotrematous -monotreme -monotremous -monotrichate -monotrichic -monotrichous -monotriglyph -monotriglyphic -Monotrocha -monotrochal -monotrochian -monotrochous -monotron -Monotropa -Monotropaceae -monotropaceous -monotrophic -monotropy -monotropic -monotropically -monotropies -Monotropsis -monoureide -monovalence -monovalency -monovalent -monovariant -monoverticillate -Monoville -monovoltine -monovular -monoxenous -monoxy- -monoxide -monoxides -monoxyla -monoxyle -monoxylic -monoxylon -monoxylous -monoxime -monozygotic -monozygous -Monozoa -monozoan -monozoic -Monponsett -Monreal -Monro -Monroe -Monroeism -Monroeist -Monroeton -Monroeville -Monroy -monrolite -Monrovia -Mons -Monsanto -Monsarrat -Monsey -Monseigneur -monseignevr -monsia -monsieur -monsieurs -monsieurship -Monsignor -monsignore -Monsignori -monsignorial -monsignors -Monson -Monsoni -monsoon -monsoonal -monsoonish -monsoonishly -monsoons -Monsour -monspermy -monster -Monstera -monster-bearing -monster-breeding -monster-eating -monster-guarded -monsterhood -monsterlike -monsters -monster's -monstership -monster-taming -monster-teeming -monstrance -monstrances -monstrate -monstration -monstrator -monstricide -monstriferous -monstrify -monstrification -monstrosity -monstrosities -monstrous -monstrously -monstrousness -Mont -Mont. -montabyn -montadale -montage -montaged -montages -montaging -Montagna -Montagnac -Montagnais -Montagnard -Montagnards -montagne -Montagu -Montague -Montaigne -Montale -Montalvo -Montana -Montanan -montanans -Montanari -montanas -montana's -montane -montanes -Montanez -montanic -montanin -Montanism -Montanist -Montanistic -Montanistical -montanite -Montanize -Montano -montant -montanto -Montargis -Montasio -Montauban -Montauk -Montbliard -montbretia -Montcalm -Mont-Cenis -Montclair -mont-de-piete -mont-de-pit -Monte -montebrasite -Montefiascone -Montefiore -montegre -Monteith -monteiths -monte-jus -montem -Montenegrin -Montenegro -Montepulciano -montera -Monterey -Monteria -montero -monteros -Monterrey -Montes -Montesco -Montesinos -Montespan -Montesquieu -Montessori -Montessorian -Montessorianism -Monteux -Montevallo -Monteverdi -Montevideo -Montezuma -Montford -Montfort -Montgolfier -montgolfiers -Montgomery -Montgomeryshire -Montgomeryville -month -Montherlant -monthly -monthlies -monthlong -monthon -months -month's -Monti -Monty -Montia -monticellite -Monticello -monticle -monticola -monticolae -monticoline -monticulate -monticule -monticuline -Monticulipora -Monticuliporidae -monticuliporidean -monticuliporoid -monticulose -monticulous -monticulus -montiform -montigeneous -montilla -montjoy -Montjoie -montjoye -Montlucon -Montmartre -montmartrite -Montmelian -Montmorency -montmorillonite -montmorillonitic -montmorilonite -Monto -monton -Montoursville -Montparnasse -Montpelier -Montpellier -Montrachet -montre -Montreal -Montreuil -Montreux -montroydite -Montrose -montross -Monts -Mont-Saint-Michel -Montserrat -Montu -monture -montuvio -Monumbo -monument -monumental -monumentalise -monumentalised -monumentalising -monumentalism -monumentality -monumentalization -monumentalize -monumentalized -monumentalizing -monumentally -monumentary -monumented -monumenting -monumentless -monumentlike -monuments -monument's -monuron -monurons -Monza -Monzaemon -monzodiorite -monzogabbro -monzonite -monzonitic -moo -Mooachaht -moocah -mooch -moocha -mooched -moocher -moochers -mooches -mooching -moochulka -mood -mooder -Moody -moodier -moodiest -moodily -moodiness -moodinesses -moodir -Moodys -moodish -moodishly -moodishness -moodle -moods -mood's -Moodus -mooed -Mooers -mooing -Mook -mookhtar -mooktar -mool -moola -moolah -moolahs -moolas -mooley -mooleys -moolet -moolings -mools -moolum -moolvee -moolvi -moolvie -Moon -Moonachie -moonack -moonal -moonbeam -moonbeams -moonbill -moon-blanched -moon-blasted -moon-blasting -moonblind -moon-blind -moonblink -moon-born -moonbow -moonbows -moon-bright -moon-browed -mooncalf -moon-calf -mooncalves -moon-charmed -mooncreeper -moon-crowned -moon-culminating -moon-dial -moondog -moondown -moondrop -mooned -Mooney -mooneye -moon-eye -moon-eyed -mooneyes -mooner -moonery -moonet -moonface -moonfaced -moon-faced -moonfall -moon-fern -moonfish -moon-fish -moonfishes -moonflower -moon-flower -moong -moon-gathered -moon-gazing -moonglade -moon-glittering -moonglow -moon-god -moon-gray -moonhead -moony -moonie -Moonier -mooniest -moonily -mooniness -mooning -moonish -moonishly -moonite -moonja -moonjah -moon-led -moonless -moonlessness -moonlet -moonlets -moonlight -moonlighted -moonlighter -moonlighters -moonlighty -moonlighting -moonlights -moonlike -moonlikeness -moonling -moonlit -moonlitten -moon-loved -moon-mad -moon-made -moonman -moon-man -moonmen -moonpath -moonpenny -moonport -moonproof -moonquake -moon-raised -moonraker -moonraking -moonrat -moonrise -moonrises -moons -moonsail -moonsails -moonscape -moonscapes -moonseed -moonseeds -moonset -moonsets -moonshade -moon-shaped -moonshee -moonshine -moonshined -moonshiner -moonshiners -moonshines -moonshiny -moonshining -moonshot -moonshots -moonsick -moonsickness -moonsif -moonstone -moonstones -moonstricken -moon-stricken -moonstruck -moon-struck -moon-taught -moontide -moon-tipped -moon-touched -moon-trodden -moonway -moonwalk -moonwalker -moonwalking -moonwalks -moonward -moonwards -moon-white -moon-whitened -moonwort -moonworts -moop -Moor -moorage -moorages -moorball -moorband -moorberry -moorberries -moorbird -moor-bred -moorburn -moorburner -moorburning -moorcock -moor-cock -Moorcroft -Moore -moored -Moorefield -Mooreland -Mooresboro -Mooresburg -mooress -Moorestown -Mooresville -Mooreton -Mooreville -moorflower -moorfowl -moor-fowl -moorfowls -Moorhead -moorhen -moor-hen -moorhens -moory -moorier -mooriest -mooring -moorings -Moorish -moorishly -moorishness -Moorland -moorlander -moorlands -Moor-lipped -Moorman -moormen -moorn -moorpan -moor-pout -moorpunky -moors -Moorship -moorsman -moorstone -moortetter -mooruk -moorup -moorwort -moorworts -moos -moosa -moose -mooseberry -mooseberries -moosebird -moosebush -moosecall -moose-ear -mooseflower -Mooseheart -moosehood -moosey -moosemilk -moosemise -moose-misse -moosetongue -moosewob -moosewood -Moosic -moost -Moosup -moot -mootable -mootch -mooted -mooter -mooters -mooth -moot-hill -moot-house -mooting -mootman -mootmen -mootness -moots -mootstead -moot-stow -mootsuddy -mootworthy -MOP -Mopan -mopane -mopani -mopboard -mopboards -mope -moped -mopeder -mopeders -mopeds -mope-eyed -mopehawk -mopey -mopeier -mopeiest -moper -mopery -moperies -mopers -mopes -moph -mophead -mopheaded -mopheadedness -mopy -mopier -mopiest -moping -mopingly -mopish -mopishly -mopishness -mopla -moplah -mopoke -mopokes -mopped -mopper -moppers -moppers-up -mopper-up -moppet -moppets -moppy -mopping -mopping-up -Moppo -mops -mopsey -mopsy -mopstick -Mopsus -MOpt -mop-up -mopus -mopuses -mopusses -Moquelumnan -moquette -moquettes -Moqui -MOR -Mora -morabit -Moraceae -moraceous -morada -Moradabad -morae -Moraea -Moraga -Moray -morainal -moraine -moraines -morainic -morays -moral -morale -moraler -morales -moralioralist -moralise -moralised -moralises -moralising -moralism -moralisms -moralist -moralistic -moralistically -moralists -morality -moralities -moralization -moralize -moralized -moralizer -moralizers -moralizes -moralizing -moralizingly -moraller -moralless -morally -moralness -morals -Moran -Morandi -Morann -Morar -moras -morass -morasses -morassy -morassic -morassweed -morat -morate -moration -moratory -moratoria -moratorium -moratoriums -Morattico -morattoria -Moratuwa -Morava -Moravia -Moravian -Moravianism -Moravianized -Moravid -moravite -Moraxella -Morazan -morbid -morbidezza -morbidity -morbidities -morbidize -morbidly -morbidness -morbidnesses -Morbier -morbiferal -morbiferous -morbify -morbific -morbifical -morbifically -Morbihan -morbility -morbillary -morbilli -morbilliform -morbillous -morbleu -morbose -morbus -morceau -morceaux -morcellate -morcellated -morcellating -morcellation -morcellement -morcha -Morchella -Morcote -Mord -mordacious -mordaciously -mordacity -mordancy -mordancies -mordant -mordanted -mordanting -mordantly -mordants -Mordecai -Mordella -mordellid -Mordellidae -mordelloid -mordenite -mordent -mordents -Mordy -mordicant -mordicate -mordication -mordicative -mordieu -mordisheen -mordore -Mordred -mordu -Mordv -Mordva -Mordvin -Mordvinian -more -Morea -Moreau -Moreauville -Morecambe -Moreen -moreens -morefold -Morehead -Morehouse -Morey -moreish -Morel -Moreland -Morelia -Morell -morella -morelle -morelles -morello -morellos -Morelos -morels -Morena -Morenci -morencite -morendo -moreness -morenita -Moreno -morenosite -Morentz -Moreote -moreover -morepeon -morepork -mores -Moresby -Moresco -Moresque -moresques -Moreta -Moretown -Moretta -Morette -Moretus -Moreville -Morez -morfond -morfound -morfounder -morfrey -morg -morga -Morgagni -morgay -Morgan -Morgana -morganatic -morganatical -morganatically -Morganfield -morganic -Morganica -morganite -morganize -Morganne -Morganstein -Morganton -Morgantown -Morganville -Morganza -Morgen -morgengift -morgens -morgenstern -Morgenthaler -Morgenthau -morglay -morgue -morgues -Morgun -Mori -Moria -Moriah -morian -Moriarty -moribund -moribundity -moribundities -moribundly -moric -Morice -moriche -Moriches -Morie -moriform -morigerate -morigeration -morigerous -morigerously -morigerousness -moriglio -Moriyama -Morike -morillon -morin -Morinaceae -Morinda -morindin -morindone -morinel -Moringa -Moringaceae -moringaceous -moringad -Moringua -moringuid -Moringuidae -moringuoid -Morini -morion -morions -Moriori -Moriscan -Morisco -Moriscoes -Moriscos -morish -Morison -Morisonian -Morisonianism -Morissa -Morita -Moritz -morkin -Morland -Morlee -Morley -Morly -morling -morlop -mormaer -mormal -mormaor -mormaordom -mormaorship -mormyr -mormyre -mormyrian -mormyrid -Mormyridae -mormyroid -Mormyrus -mormo -Mormon -Mormondom -Mormoness -Mormonism -Mormonist -Mormonite -mormons -Mormonweed -Mormoops -mormorando -morn -Morna -Mornay -morne -morned -mornette -Morning -morning-breathing -morning-bright -morning-colored -morning-gift -morning-glory -morningless -morningly -mornings -morningstar -morningtide -morning-tide -morningward -morning-watch -morning-winged -mornless -mornlike -morns -morntime -mornward -Moro -moroc -morocain -Moroccan -moroccans -Morocco -Morocco-head -Morocco-jaw -moroccos -morocota -Morogoro -morology -morological -morologically -morologist -moromancy -moron -moroncy -morone -morones -morong -Moroni -moronic -moronically -Moronidae -moronism -moronisms -moronity -moronities -moronry -morons -Moropus -moror -Moros -morosaurian -morosauroid -Morosaurus -morose -morosely -moroseness -morosenesses -morosis -morosity -morosities -morosoph -Morovis -moroxite -morph -morph- -morphactin -morphallaxes -morphallaxis -morphea -Morphean -morpheme -morphemes -morphemic -morphemically -morphemics -morphetic -Morpheus -morphew -morphgan -morphy -morphia -morphias -morphiate -morphic -morphically -morphin -morphinate -morphine -morphines -morphinic -morphinism -morphinist -morphinization -morphinize -morphinomania -morphinomaniac -morphins -morphiomania -morphiomaniac -morphism -morphisms -morphized -morphizing -Morpho -morpho- -morphogeneses -morphogenesis -morphogenetic -morphogenetically -morphogeny -morphogenic -morphographer -morphography -morphographic -morphographical -morphographist -morphol -morpholin -morpholine -morphology -morphologic -morphological -morphologically -morphologies -morphologist -morphologists -morpholoical -morphometry -morphometric -morphometrical -morphometrically -morphon -morphoneme -morphonemic -morphonemics -morphonomy -morphonomic -morphophyly -morphophoneme -morphophonemic -morphophonemically -morphophonemics -morphoplasm -morphoplasmic -morphos -morphoses -morphosis -morphotic -morphotonemic -morphotonemics -morphotropy -morphotropic -morphotropism -morphous -morphrey -morphs -morpion -morpunkee -Morra -Morral -Morrell -Morrenian -Morrhua -morrhuate -morrhuin -morrhuine -Morry -Morrice -morricer -Morrie -Morrigan -Morril -Morrill -Morrilton -morrion -morrions -Morris -Morrisdale -morris-dance -Morrisean -morrises -Morrison -Morrisonville -morris-pike -Morrissey -Morriston -Morristown -Morrisville -morro -morros -Morrow -morrowing -morrowless -morrowmass -morrow-mass -morrows -morrowspeech -morrowtide -morrow-tide -Morrowville -Mors -morsal -Morse -morsel -morseled -morseling -morselization -morselize -morselled -morselling -morsels -morsel's -morsing -morsure -Mort -Morta -mortacious -mortadella -mortal -mortalism -mortalist -mortality -mortalities -mortalize -mortalized -mortalizing -mortally -mortalness -mortals -mortalty -mortalwise -mortancestry -mortar -mortarboard -mortar-board -mortarboards -mortared -mortary -mortaring -mortarize -mortarless -mortarlike -mortars -mortarware -mortbell -mortcloth -mortem -Morten -Mortensen -mortersheen -mortgage -mortgageable -mortgaged -mortgagee -mortgagees -mortgage-holder -mortgager -mortgagers -mortgages -mortgage's -mortgaging -mortgagor -mortgagors -morth -morthwyrtha -Morty -mortice -morticed -morticer -mortices -mortician -morticians -morticing -Mortie -mortier -mortiferous -mortiferously -mortiferousness -mortify -mortific -mortification -mortifications -mortified -mortifiedly -mortifiedness -mortifier -mortifies -mortifying -mortifyingly -Mortimer -mortis -mortise -mortised -mortiser -mortisers -mortises -mortising -mortlake -mortling -mortmain -mortmainer -mortmains -Morton -mortorio -mortress -mortreux -mortrewes -morts -mortuary -mortuarian -mortuaries -mortuous -morula -morulae -morular -morulas -morulation -morule -moruloid -Morus -Morven -Morville -Morvin -morw -morwong -MOS -Mosa -Mosaic -Mosaical -mosaically -mosaic-drawn -mosaic-floored -mosaicism -mosaicist -Mosaicity -mosaicked -mosaicking -mosaic-paved -mosaics -mosaic's -Mosaism -Mosaist -mosan -mosandrite -mosasaur -Mosasauri -Mosasauria -mosasaurian -mosasaurid -Mosasauridae -mosasauroid -Mosasaurus -Mosatenan -Mosby -Mosca -moschate -moschatel -moschatelline -Moschi -Moschidae -moschiferous -Moschinae -moschine -Moschus -Moscow -Mose -mosey -moseyed -moseying -moseys -Mosel -Moselblmchen -Moseley -Moselle -Mosenthal -Moser -Mosera -Moses -mosesite -Mosetena -mosette -MOSFET -Mosgu -Moshannon -moshav -moshavim -Moshe -Mosheim -Moshell -Mosherville -Moshesh -Moshi -Mosier -Mosinee -Mosira -mosk -moskeneer -mosker -Moskow -mosks -Moskva -Mosley -Moslem -Moslemah -Moslemic -Moslemin -Moslemism -Moslemite -Moslemize -Moslems -moslings -mosoceca -mosocecum -Mosora -Mosotho -mosque -mosquelet -Mosquero -mosques -mosquish -mosquital -Mosquito -mosquitobill -mosquito-bitten -mosquito-bred -mosquitocidal -mosquitocide -mosquitoey -mosquitoes -mosquitofish -mosquitofishes -mosquito-free -mosquitoish -mosquitoproof -mosquitos -mosquittoey -Mosra -Moss -mossback -moss-back -mossbacked -moss-backed -mossbacks -mossbanker -Mossbauer -moss-begrown -Mossberg -mossberry -moss-bordered -moss-bound -moss-brown -mossbunker -moss-clad -moss-covered -moss-crowned -mossed -mosser -mossery -mossers -mosses -mossful -moss-gray -moss-green -moss-grown -moss-hag -mosshead -mosshorn -Mossi -mossy -mossyback -mossy-backed -mossie -mossier -mossiest -mossiness -mossing -moss-inwoven -Mossyrock -mossless -mosslike -moss-lined -Mossman -mosso -moss's -mosstrooper -moss-trooper -mosstroopery -mosstrooping -Mossville -mosswort -moss-woven -most -mostaccioli -mostdeal -moste -mostest -mostests -mostic -Mosting -mostly -mostlike -mostlings -mostness -mostra -mosts -mostwhat -Mosul -mosur -Moszkowski -MOT -mota -motacil -Motacilla -motacillid -Motacillidae -Motacillinae -motacilline -MOTAS -motatory -motatorious -Motazilite -Motch -mote -moted -mote-hill -motey -motel -moteless -motels -motel's -moter -motes -motet -motets -motettist -motetus -Moth -mothball -mothballed -moth-balled -mothballing -mothballs -moth-eat -moth-eaten -mothed -Mother -motherboard -mother-church -mothercraft -motherdom -mothered -motherer -motherers -motherfucker -mothergate -motherhood -motherhoods -motherhouse -mothery -motheriness -mothering -mother-in-law -motherkin -motherkins -motherland -motherlands -motherless -motherlessness -motherly -motherlike -motherliness -motherling -mother-naked -mother-of-pearl -mother-of-thyme -mother-of-thymes -mother-of-thousands -mothers -mother's -mothership -mother-sick -mothers-in-law -mothersome -mother-spot -motherward -Motherwell -motherwise -motherwort -mothy -mothier -mothiest -mothless -mothlike -mothproof -mothproofed -mothproofer -mothproofing -moths -mothworm -motif -motific -motifs -motif's -motyka -Motilal -motile -motiles -motility -motilities -motion -motionable -motional -motioned -motioner -motioners -motioning -motionless -motionlessly -motionlessness -motionlessnesses -motion-picture -motions -MOTIS -motitation -motivate -motivated -motivates -motivating -motivation -motivational -motivationally -motivations -motivative -motivator -motive -motived -motiveless -motivelessly -motivelessness -motive-monger -motive-mongering -motiveness -motives -motivic -motiving -motivity -motivities -motivo -Motley -motleyer -motleyest -motley-minded -motleyness -motleys -motlier -motliest -motmot -motmots -moto- -motocar -motocycle -motocross -motofacient -motograph -motographic -motomagnetic -moton -motoneuron -motophone -motor -motorable -motorbicycle -motorbike -motorbikes -motorboat -motorboater -motorboating -motorboatman -motorboats -motorbus -motorbuses -motorbusses -motorcab -motorcade -motorcades -motor-camper -motor-camping -motorcar -motorcars -motorcar's -motorcycle -motorcycled -motorcycler -motorcycles -motorcycle's -motorcycling -motorcyclist -motorcyclists -motorcoach -motordom -motor-driven -motordrome -motored -motor-generator -motory -motorial -motoric -motorically -motoring -motorings -motorisation -motorise -motorised -motorises -motorising -motorism -motorist -motorists -motorist's -motorium -motorization -motorize -motorized -motorizes -motorizing -motorless -motorman -motor-man -motormen -motor-minded -motor-mindedness -motorneer -Motorola -motorphobe -motorphobia -motorphobiac -motors -motorsailer -motorscooters -motorship -motor-ship -motorships -motortruck -motortrucks -motorway -motorways -MOTOS -Motown -Motozintlec -Motozintleca -motricity -mots -MOTSS -Mott -motte -Motteo -mottes -mottetto -motty -mottle -mottled -mottledness -mottle-leaf -mottlement -mottler -mottlers -mottles -mottling -motto -mottoed -mottoes -mottoless -mottolike -mottos -mottramite -motts -Mottville -Motu -MOTV -MOU -mouch -moucharaby -moucharabies -mouchard -mouchardism -mouche -mouched -mouches -mouching -mouchoir -mouchoirs -mouchrabieh -moud -moudy -moudie -moudieman -moudy-warp -moue -mouedhin -moues -moufflon -moufflons -mouflon -mouflons -Mougeotia -Mougeotiaceae -mought -mouill -mouillation -mouille -mouillure -moujik -moujiks -Moukden -moul -moulage -moulages -mould -mouldboard -mould-board -moulded -Moulden -moulder -mouldered -mouldery -mouldering -moulders -mouldy -mouldier -mouldies -mouldiest -mouldiness -moulding -moulding-board -mouldings -mouldmade -Mouldon -moulds -mouldwarp -Moule -mouly -moulin -moulinage -moulinet -Moulins -moulleen -Moulmein -moulrush -mouls -moult -moulted -moulten -moulter -moulters -moulting -Moulton -Moultonboro -Moultrie -moults -moulvi -moun -Mound -mound-builder -mound-building -mounded -moundy -moundiness -mounding -moundlet -Mounds -moundsman -moundsmen -Moundsville -Moundville -moundwork -mounseer -Mount -mountable -mountably -Mountain -mountain-built -mountain-dwelling -mountained -mountaineer -mountaineered -mountaineering -mountaineers -mountainer -mountainet -mountainette -mountain-girdled -mountain-green -mountain-high -mountainy -mountainless -mountainlike -mountain-loving -mountainous -mountainously -mountainousness -mountains -mountain's -mountain-sick -Mountainside -mountainsides -mountaintop -mountaintops -mountain-walled -mountainward -mountainwards -mountance -mountant -Mountbatten -mountebank -mountebanked -mountebankery -mountebankeries -mountebankish -mountebankism -mountebankly -mountebanks -mounted -mountee -mounter -mounters -Mountford -Mountfort -Mounty -Mountie -Mounties -mounting -mounting-block -mountingly -mountings -mountlet -mounts -mounture -moup -Mourant -Moureaux -mourn -mourne -mourned -mourner -mourneress -mourners -mournful -mournfuller -mournfullest -mournfully -mournfulness -mournfulnesses -mourning -mourningly -mournings -mournival -mourns -mournsome -MOUSE -mousebane -mousebird -mouse-brown -mouse-color -mouse-colored -mouse-colour -moused -mouse-deer -mouse-dun -mousee -mouse-ear -mouse-eared -mouse-eaten -mousees -mousefish -mousefishes -mouse-gray -mousehawk -mousehole -mouse-hole -mousehound -mouse-hunt -mousey -Mouseion -mouse-killing -mousekin -mouselet -mouselike -mouseling -mousemill -mouse-pea -mousepox -mouseproof -mouser -mousery -mouseries -mousers -mouses -mouseship -mouse-still -mousetail -mousetrap -mousetrapped -mousetrapping -mousetraps -mouseweb -mousy -Mousie -mousier -mousiest -mousily -mousiness -mousing -mousingly -mousings -mousle -mouslingly -mousme -mousmee -Mousoni -mousquetaire -mousquetaires -moussaka -moussakas -mousse -mousseline -mousses -mousseux -Moussorgsky -moustache -moustached -moustaches -moustachial -moustachio -Mousterian -Moustierian -moustoc -mout -moutan -moutarde -mouth -mouthable -mouthbreeder -mouthbrooder -Mouthcard -mouthe -mouthed -mouther -mouthers -mouthes -mouth-filling -mouthful -mouthfuls -mouthy -mouthier -mouthiest -mouthily -mouthiness -mouthing -mouthingly -mouthishly -mouthless -mouthlike -mouth-made -mouth-organ -mouthpart -mouthparts -mouthpiece -mouthpieces -mouthpipe -mouthroot -mouths -mouth-to-mouth -mouthwash -mouthwashes -mouthwatering -mouth-watering -mouthwise -moutler -moutlers -Mouton -moutoneed -moutonnee -moutons -mouzah -mouzouna -MOV -movability -movable -movableness -movables -movably -movant -move -moveability -moveable -moveableness -moveables -moveably -moved -moveless -movelessly -movelessness -movement -movements -movement's -movent -mover -movers -moves -movie -moviedom -moviedoms -moviegoer -movie-goer -moviegoing -movieize -movieland -moviemaker -moviemakers -movie-minded -Movieola -movies -movie's -Movietone -Moville -moving -movingly -movingness -movings -Moviola -moviolas -mow -mowable -mowana -Mowbray -mowburn -mowburnt -mow-burnt -mowch -mowcht -mowe -Moweaqua -mowed -mower -mowers -mowha -mowhay -mowhawk -mowie -mowing -mowings -mowland -mown -mowra -mowrah -Mowrystown -mows -mowse -mowstead -mowt -mowth -moxa -Moxahala -moxas -Moxee -moxibustion -moxie -moxieberry -moxieberries -moxies -Moxo -Mozamb -Mozambican -Mozambique -Mozarab -Mozarabian -Mozarabic -Mozart -Mozartean -Mozartian -moze -Mozelle -mozemize -Mozes -mozetta -mozettas -mozette -Mozier -mozing -mozo -mozos -Mozza -mozzarella -mozzetta -mozzettas -mozzette -MP -MPA -Mpangwe -mpb -mpbs -MPC -MPCC -MPCH -MPDU -MPE -MPers -MPG -MPH -MPharm -MPhil -mphps -MPIF -MPL -MPO -Mpondo -MPOW -MPP -MPPD -MPR -mpret -MPS -MPT -MPU -MPV -MPW -MR -Mr. -MRA -Mraz -MrBrown -MRC -Mrchen -MRD -MRE -mrem -Mren -MRF -MRFL -MRI -Mrida -mridang -mridanga -mridangas -Mrike -mRNA -m-RNA -Mroz -MRP -MRS -Mrs. -MrsBrown -MrSmith -MRSR -MRSRM -MrsSmith -MRTS -MRU -MS -m's -MS. -MSA -MSAE -msalliance -MSAM -MSArch -MSB -MSBA -MSBC -MSBus -MSC -MScD -MSCDEX -MSCE -MSChE -MScMed -MSCons -MSCP -MSD -MSDOS -MSE -msec -MSEE -MSEM -MSEnt -M-series -MSF -MSFC -MSFM -MSFor -MSFR -MSG -MSGeolE -MSGM -MSGMgt -Msgr -Msgr. -MSgt -MSH -MSHA -M-shaped -MSHE -MSI -MSIE -M'sieur -msink -MSJ -MSL -MSM -MSME -MSMetE -MSMgtE -MSN -MSO -MSOrNHort -msource -MSP -MSPE -MSPH -MSPhar -MSPHE -MSPHEd -MSR -MSS -MSSc -MST -Mster -Msterberg -Ms-Th -MSTS -MSW -M-swahili -MT -Mt. -MTA -M'Taggart -MTB -Mtbaldy -MTBF -MTBRP -MTC -MTD -MTech -MTF -mtg -mtg. -mtge -MTh -MTI -mtier -Mtis -MTM -mtn -MTO -MTP -MTR -MTS -mtscmd -MTSO -MTTF -MTTFF -MTTR -MTU -MTV -Mtwara -MTX -MU -MUA -muang -mubarat -muc- -mucago -mucaro -mucate -mucedin -mucedinaceous -mucedine -mucedineous -mucedinous -much -muchacha -muchacho -muchachos -much-admired -much-advertised -much-branched -much-coiled -much-containing -much-devouring -much-discussed -muchel -much-enduring -much-engrossed -muches -muchfold -much-honored -much-hunger -much-lauded -muchly -much-loved -much-loving -much-mooted -muchness -muchnesses -much-pondering -much-praised -much-revered -much-sought -much-suffering -much-valued -muchwhat -much-worshiped -mucic -mucid -mucidity -mucidities -mucidness -muciferous -mucific -muciform -mucigen -mucigenous -mucilage -mucilages -mucilaginous -mucilaginously -mucilaginousness -mucin -mucinogen -mucinoid -mucinolytic -mucinous -mucins -muciparous -mucivore -mucivorous -muck -muckamuck -mucked -muckender -Mucker -muckerer -muckerish -muckerism -muckers -mucket -muckhill -muckhole -mucky -muckibus -muckier -muckiest -muckily -muckiness -mucking -muckite -muckle -muckles -muckluck -mucklucks -muckman -muckment -muckmidden -muckna -muckrake -muck-rake -muckraked -muckraker -muckrakers -muckrakes -muckraking -mucks -mucksy -mucksweat -muckthrift -muck-up -muckweed -muckworm -muckworms -mucluc -muclucs -muco- -mucocele -mucocellulose -mucocellulosic -mucocutaneous -mucodermal -mucofibrous -mucoflocculent -mucoid -mucoidal -mucoids -mucoitin-sulphuric -mucolytic -mucomembranous -muconic -mucopolysaccharide -mucoprotein -mucopurulent -mucopus -mucor -Mucoraceae -mucoraceous -Mucorales -mucorine -mucorioid -mucormycosis -mucorrhea -mucorrhoea -mucors -mucosa -mucosae -mucosal -mucosanguineous -mucosas -mucose -mucoserous -mucosity -mucosities -mucositis -mucoso- -mucosocalcareous -mucosogranular -mucosopurulent -mucososaccharine -mucous -mucousness -mucoviscidosis -mucoviscoidosis -mucro -mucronate -mucronated -mucronately -mucronation -mucrones -mucroniferous -mucroniform -mucronulate -mucronulatous -muculent -Mucuna -mucus -mucuses -mucusin -mud -mudar -mudbank -mud-bespattered -mud-built -mudcap -mudcapped -mudcapping -mudcaps -mudcat -mudcats -mud-color -mud-colored -Mudd -mudde -mudded -mudden -mudder -mudders -muddy -muddybrained -muddybreast -muddy-complexioned -muddied -muddier -muddies -muddiest -muddify -muddyheaded -muddying -muddily -muddy-mettled -muddiness -muddinesses -mudding -muddish -muddle -muddlebrained -muddled -muddledness -muddledom -muddlehead -muddleheaded -muddle-headed -muddleheadedness -muddlement -muddle-minded -muddleproof -muddler -muddlers -muddles -muddlesome -muddly -muddling -muddlingly -mudee -Mudejar -mud-exhausted -mudfat -mudfish -mud-fish -mudfishes -mudflow -mudflows -mudguard -mudguards -mudhead -mudhole -mudholes -mudhook -mudhopper -mudir -mudiria -mudirieh -Mudjar -mudland -mudlark -mudlarker -mudlarks -mudless -mud-lost -mudminnow -mudminnows -mudpack -mudpacks -mudproof -mudpuppy -mudpuppies -mudra -mudras -mudrock -mudrocks -mud-roofed -mudroom -mudrooms -muds -mud-shot -mudsill -mudsills -mudskipper -mudslide -mudsling -mudslinger -mudslingers -mudslinging -mud-slinging -mudspate -mud-splashed -mudspringer -mudstain -mudstone -mudstones -mudsucker -mudtrack -mud-walled -mudweed -mudwort -mueddin -mueddins -Muehlenbeckia -Mueller -Muenster -muensters -muermo -muesli -mueslis -muette -muezzin -muezzins -MUF -mufasal -muff -muffed -muffer -muffet -muffetee -muffy -Muffin -muffineer -muffing -muffins -muffin's -muffish -muffishness -muffle -muffled -muffledly -muffle-jaw -muffleman -mufflemen -muffler -mufflers -muffles -muffle-shaped -mufflin -muffling -muffs -muff's -Mufi -Mufinella -Mufti -mufty -muftis -Mufulira -mug -muga -Mugabe -mugearite -mugful -mugfuls -mugg -muggar -muggars -mugged -muggee -muggees -mugger -muggered -muggery -muggering -muggers -mugget -muggy -muggier -muggiest -muggily -mugginess -mugginesses -mugging -muggings -muggins -muggish -muggles -Muggletonian -Muggletonianism -muggs -muggur -muggurs -mugho -mughopine -mughouse -mug-house -mugience -mugiency -mugient -Mugil -Mugilidae -mugiliform -mugiloid -mugs -mug's -muguet -mug-up -mugweed -mugwet -mug-wet -mugwort -mugworts -mugwump -mugwumpery -mugwumpian -mugwumpish -mugwumpism -mugwumps -Muhajir -Muhajirun -Muhammad -Muhammadan -Muhammadanism -muhammadi -Muhammedan -Muharram -Muhlenberg -Muhlenbergia -muhly -muhlies -muid -Muilla -Muir -muirburn -muircock -Muire -muirfowl -Muirhead -Muysca -muishond -muist -mui-tsai -muyusa -Mujahedeen -mujeres -mujik -mujiks -mujtahid -mukade -Mukden -Mukerji -mukhtar -Mukilteo -mukluk -mukluks -Mukri -muktar -muktatma -muktear -mukti -muktuk -muktuks -Mukul -Mukund -Mukwonago -mulada -muladi -mulaprakriti -mulatta -mulatto -mulattoes -mulattoism -mulattos -mulatto-wood -mulattress -Mulberry -mulberries -mulberry-faced -mulberry's -Mulcahy -mulch -mulched -mulcher -mulches -mulching -Mulciber -Mulcibirian -mulct -mulctable -mulctary -mulctation -mulctative -mulctatory -mulcted -mulcting -mulcts -mulctuary -MULDEM -mulder -Mulderig -Muldon -Muldoon -Muldraugh -Muldrow -mule -muleback -muled -mule-fat -mulefoot -mule-foot -mulefooted -mule-headed -muley -muleys -mule-jenny -muleman -mulemen -mules -mule's -Muleshoe -mulet -muleta -muletas -muleteer -muleteers -muletress -muletta -mulewort -Mulford -Mulga -Mulhac -Mulhacen -Mulhall -Mulhausen -Mulhouse -muliebral -muliebria -muliebrile -muliebrity -muliebrous -mulier -mulierine -mulierly -mulierose -mulierosity -mulierty -muling -Mulino -mulish -mulishly -mulishness -mulishnesses -mulism -mulita -Mulius -mulk -Mulkeytown -Mulki -Mull -mulla -mullah -mullahism -mullahs -Mullan -Mullane -mullar -mullas -mulled -mulley -mullein -mulleins -mulleys -Mullen -mullenize -MullenMullens -Mullens -Muller -Mullerian -mullers -mullet -mulletry -mullets -mullid -Mullidae -Mulligan -mulligans -mulligatawny -mulligrubs -Mulliken -Mullin -mulling -Mullins -Mullinville -mullion -mullioned -mullioning -mullions -mullite -mullites -mullock -mullocker -mullocky -mullocks -Mulloy -mulloid -mulloway -mulls -Mullusca -mulm -mulmul -mulmull -Mulock -Mulry -mulse -mulsify -mult -Multan -multangle -multangula -multangular -multangularly -multangularness -multangulous -multangulum -Multani -multanimous -multarticulate -multeity -multi -multi- -multiage -multiangular -multiareolate -multiarmed -multiarticular -multiarticulate -multiarticulated -multiaxial -multiaxially -multiband -multibarreled -multibillion -multibirth -multibit -multibyte -multiblade -multibladed -multiblock -multibranched -multibranchiate -multibreak -multibuilding -multibus -multicamerate -multicapitate -multicapsular -multicar -multicarinate -multicarinated -multicast -multicasting -multicasts -multicelled -multicellular -multicellularity -multicenter -multicentral -multicentrally -multicentric -multichambered -multichannel -multichanneled -multichannelled -multicharge -multichord -multichrome -multicycle -multicide -multiciliate -multiciliated -multicylinder -multicylindered -multicipital -multicircuit -multicircuited -multicoccous -multicoil -multicollinearity -multicolor -multicolored -multicolorous -multi-colour -multicoloured -multicomponent -multicomputer -multiconductor -multiconstant -multicordate -multicore -multicorneal -multicostate -multicounty -multicourse -multicrystalline -MULTICS -multicultural -multicurie -multicuspid -multicuspidate -multicuspidated -multidenominational -multidentate -multidenticulate -multidenticulated -multidestination -multidigitate -multidimensional -multidimensionality -multidirectional -multidisciplinary -multidiscipline -multidisperse -multidivisional -multidrop -multidwelling -multiengine -multiengined -multiethnic -multiexhaust -multifaced -multifaceted -multifactor -multifactorial -multifactorially -multifamily -multifamilial -multifarious -multifariously -multifariousness -multifarous -multifarously -multiferous -multifetation -multifibered -multifibrous -multifid -multifidly -multifidous -multifidus -multifil -multifilament -multifistular -multifistulous -multiflagellate -multiflagellated -multiflash -multiflora -multiflorae -multifloras -multiflorous -multiflow -multiflue -multifocal -multifoil -multifoiled -multifold -multifoldness -multifoliate -multifoliolate -multifont -multiform -multiformed -multiformity -multiframe -multifunction -multifunctional -multifurcate -multiganglionic -multigap -multigerm -multigyrate -multigrade -multigranular -multigranulate -multigranulated -Multigraph -multigrapher -multigravida -multiguttulate -multihead -multiheaded -multihearth -multihop -multihospital -multihued -multihull -multiyear -multiinfection -multijet -multi-jet -multijugate -multijugous -multilaciniate -multilayer -multilayered -multilamellar -multilamellate -multilamellous -multilaminar -multilaminate -multilaminated -multilane -multilaned -multilateral -multilaterality -multilaterally -multileaving -multilevel -multileveled -multilighted -multilineal -multilinear -multilingual -multilingualism -multilingualisms -multilingually -multilinguist -multilirate -multiliteral -Multilith -multilobar -multilobate -multilobe -multilobed -multilobular -multilobulate -multilobulated -multilocation -multilocular -multiloculate -multiloculated -multiloquence -multiloquent -multiloquy -multiloquious -multiloquous -multimachine -multimacular -multimammate -multimarble -multimascular -multimedia -multimedial -multimegaton -multimember -multimetalic -multimetallic -multimetallism -multimetallist -multimeter -multimicrocomputer -multimillion -multimillionaire -multimillionaires -multimodal -multimodality -multimodalities -multimode -multimolecular -multimotor -multimotored -multinational -multinationals -multinervate -multinervose -multinodal -multinodate -multinode -multinodous -multinodular -multinomial -multinominal -multinominous -multinuclear -multinucleate -multinucleated -multinucleolar -multinucleolate -multinucleolated -multiovular -multiovulate -multiovulated -multipacket -multipara -multiparae -multiparient -multiparity -multiparous -multipart -multiparty -multipartisan -multipartite -multipass -multipath -multiped -multipede -multipeds -multiperforate -multiperforated -multipersonal -multiphase -multiphaser -multiphasic -multiphotography -multipying -multipinnate -multiplan -multiplane -multiplant -multiplated -multiple -multiple-choice -multiple-clutch -multiple-die -multiple-disk -multiple-dome -multiple-drill -multiple-line -multiple-pass -multiplepoinding -multiples -multiple's -multiple-series -multiple-speed -multiplet -multiple-threaded -multiple-toothed -multiple-tuned -multiple-valued -multiplex -multiplexed -multiplexer -multiplexers -multiplexes -multiplexing -multiplexor -multiplexors -multiplexor's -multiply -multi-ply -multipliable -multipliableness -multiplicability -multiplicable -multiplicand -multiplicands -multiplicand's -multiplicate -multiplication -multiplicational -multiplications -multiplicative -multiplicatively -multiplicatives -multiplicator -multiplicious -multiplicity -multiplicities -multiplied -multiplier -multipliers -multiplies -multiplying -multiplying-glass -multipointed -multipolar -multipolarity -multipole -multiported -multipotent -multipresence -multipresent -multiproblem -multiprocess -multiprocessing -multiprocessor -multiprocessors -multiprocessor's -multiproduct -multiprogram -multiprogrammed -multiprogramming -multipronged -multi-prop -multipurpose -multiracial -multiracialism -multiradial -multiradiate -multiradiated -multiradical -multiradicate -multiradicular -multiramified -multiramose -multiramous -multirate -multireflex -multiregister -multiresin -multirole -multiroomed -multirooted -multirotation -multirotatory -multisaccate -multisacculate -multisacculated -multiscience -multiscreen -multiseated -multisect -multisection -multisector -multisegmental -multisegmentate -multisegmented -multisense -multisensory -multisensual -multiseptate -multiserial -multiserially -multiseriate -multiserver -multiservice -multishot -multisided -multisiliquous -multisyllabic -multisyllability -multisyllable -multisystem -multisonant -multisonic -multisonorous -multisonorously -multisonorousness -multisonous -multispecies -multispeed -multispermous -multispicular -multispiculate -multispindle -multispindled -multispinous -multispiral -multispired -multistage -multistaminate -multistate -multistep -multistorey -multistory -multistoried -multistratified -multistratous -multistriate -multisulcate -multisulcated -multitagged -multitalented -multitarian -multitask -multitasking -multitentacled -multitentaculate -multitester -multitheism -multitheist -multithread -multithreaded -multititular -multitoed -multiton -multitoned -multitrack -multitube -Multituberculata -multituberculate -multituberculated -multituberculy -multituberculism -multitubular -multitude -multitudes -multitude's -multitudinal -multitudinary -multitudinism -multitudinist -multitudinistic -multitudinosity -multitudinous -multitudinously -multitudinousness -multiturn -multiunion -multiunit -multiuse -multiuser -multivagant -multivalence -multivalency -multivalent -multivalued -multivalve -multivalved -multivalvular -multivane -multivariant -multivariate -multivariates -multivarious -multiversant -multiverse -multiversion -multiversity -multiversities -multivibrator -multiview -multiviewing -multivincular -multivious -multivitamin -multivitamins -multivocal -multivocality -multivocalness -multivoiced -multivolent -multivoltine -multivolume -multivolumed -multivorous -multiway -multiwall -multiwarhead -multiword -multiwords -multo -multocular -multum -multungulate -multure -multurer -multures -Mulvane -mulvel -Mulvihill -mum -mumble -mumblebee -mumbled -mumblement -mumbler -mumblers -mumbles -mumble-the-peg -mumbletypeg -mumblety-peg -mumbly -mumbling -mumblingly -mumblings -mumbly-peg -mumbo -mumbo-jumbo -Mumbo-jumboism -mumbudget -mumchance -mume -mu-meson -Mumetal -Mumford -mumhouse -Mu'min -mumjuma -mumm -mummed -mummer -mummery -mummeries -mummers -mummy -mummia -mummy-brown -mummichog -mummick -mummy-cloth -mummydom -mummied -mummies -mummify -mummification -mummifications -mummified -mummifies -mummifying -mummiform -mummyhood -mummying -mummylike -mumming -mummy's -mumms -mumness -mump -mumped -mumper -mumpers -mumphead -mumping -mumpish -mumpishly -mumpishness -MUMPS -mumpsimus -mumruffin -mums -mumsy -mumu -mumus -Mun -mun. -Muna -Munafo -Munandi -Muncey -Muncerian -Munch -munchausen -Munchausenism -Munchausenize -munched -munchee -muncheel -muncher -munchers -munches -munchet -Munchhausen -munchy -munchies -munching -munchkin -Muncy -Muncie -muncupate -mund -Munda -Munday -mundal -mundane -mundanely -mundaneness -mundanism -mundanity -Mundari -mundation -mundatory -Mundelein -Munden -Mundford -Mundy -mundic -mundify -mundificant -mundification -mundified -mundifier -mundifying -mundil -mundivagant -mundle -Mundt -Mundugumor -Mundugumors -mundungo -mundungos -mundungus -mundunugu -Munford -Munfordville -MUNG -munga -mungcorn -munge -mungey -Munger -mungy -Mungo -mungofa -mungoos -mungoose -mungooses -mungos -Mungovan -mungrel -mungs -munguba -Munhall -Muni -Munia -munic -Munich -Munychia -Munychian -Munychion -Munichism -municipal -municipalise -municipalism -municipalist -municipality -municipalities -municipality's -municipalization -municipalize -municipalized -municipalizer -municipalizing -municipally -municipia -municipium -munify -munific -munificence -munificences -munificency -munificent -munificently -munificentness -munifience -muniment -muniments -Munin -Munippus -Munising -munite -munited -Munith -munity -muniting -munition -munitionary -munitioned -munitioneer -munitioner -munitioning -munitions -Munitus -munj -munjeet -munjistin -Munmro -Munn -Munniks -munnion -munnions -Munnopsidae -Munnopsis -Munnsville -Munro -Munroe -Muns -Munsee -Munsey -Munshi -munsif -munsiff -Munson -Munsonville -Munster -munsters -Munt -Muntiacus -muntin -munting -Muntingia -muntings -muntins -muntjac -muntjacs -muntjak -muntjaks -muntz -muon -Muong -muonic -muonium -muoniums -muons -MUP -Muphrid -Mur -Mura -Muradiyah -Muraena -muraenid -Muraenidae -muraenids -muraenoid -Murage -Muraida -mural -muraled -muralist -muralists -murally -murals -Muran -Muranese -murarium -muras -murasakite -Murat -Muratorian -murchy -Murchison -Murcia -murciana -murdabad -murder -murdered -murderee -murderees -murderer -murderers -murderess -murderesses -murdering -murderingly -murderish -murderment -murderous -murderously -murderousness -murders -Murdo -Murdocca -Murdoch -Murdock -murdrum -Mure -mured -Mureil -murein -mureins -murenger -Mures -murex -murexan -murexes -murexid -murexide -Murfreesboro -murga -murgavi -murgeon -Muriah -Murial -muriate -muriated -muriates -muriatic -muricate -muricated -murices -muricid -Muricidae -muriciform -muricine -muricoid -muriculate -murid -Muridae -muridism -murids -Muriel -Murielle -muriform -muriformly -Murillo -Murinae -murine -murines -muring -murinus -murionitric -muriti -murium -Murjite -murk -murker -murkest -murky -murkier -murkiest -murkily -murkiness -murkinesses -murkish -murkly -murkness -murks -murksome -murlack -murlain -murlemewes -murly -murlin -murlock -Murmansk -Murmi -murmur -murmuration -murmurator -murmured -murmurer -murmurers -murmuring -murmuringly -murmurish -murmurless -murmurlessly -murmurous -murmurously -murmurs -murnival -muroid -Murols -muromontite -murph -Murphy -murphied -murphies -murphying -Murphys -Murphysboro -murr -murra -Murrah -Murray -Murraya -murrain -murrains -Murraysville -Murrayville -murral -murraro -murras -murre -murrey -murreys -murrelet -murrelets -Murrell -murres -murrha -murrhas -murrhine -murrhuine -Murry -murries -Murrieta -murrina -murrine -murrion -Murrysville -murrnong -Murrow -murrs -Murrumbidgee -murshid -Murtagh -Murtaugh -Murtha -murther -murthered -murtherer -murthering -murthers -murthy -Murton -murumuru -Murut -muruxi -murva -Murvyn -murza -Murzim -Mus -mus. -Mus.B. -Musa -Musaceae -musaceous -Musaeus -Musagetes -musal -Musales -Musalmani -musang -musar -musard -musardry -MusB -Musca -muscade -muscadel -muscadelle -muscadels -Muscadet -muscadin -Muscadine -Muscadinia -Muscae -muscalonge -muscardine -Muscardinidae -Muscardinus -Muscari -muscariform -muscarine -muscarinic -muscaris -Muscat -muscatel -muscatels -Muscatine -muscatorium -muscats -muscavada -muscavado -muschelkalk -Musci -Muscicapa -Muscicapidae -muscicapine -muscicide -muscicole -muscicoline -muscicolous -muscid -Muscidae -muscids -musciform -Muscinae -muscle -musclebound -muscle-bound -muscle-building -muscle-celled -muscled -muscle-kneading -muscleless -musclelike -muscleman -musclemen -muscles -muscle-tired -muscly -muscling -Muscoda -Muscogee -muscoid -Muscoidea -Muscolo -muscology -muscologic -muscological -muscologist -muscone -muscose -muscoseness -muscosity -muscot -Muscotah -muscovade -muscovadite -muscovado -Muscovi -Muscovy -Muscovite -muscovites -Muscovitic -muscovitization -muscovitize -muscovitized -muscow -muscul- -musculamine -muscular -muscularity -muscularities -muscularize -muscularly -musculation -musculature -musculatures -muscule -musculi -musculin -musculo- -musculoarterial -musculocellular -musculocutaneous -musculodermic -musculoelastic -musculofibrous -musculointestinal -musculoligamentous -musculomembranous -musculopallial -musculophrenic -musculoskeletal -musculospinal -musculospiral -musculotegumentary -musculotendinous -musculous -musculus -MusD -Muse -mused -Muse-descended -museful -musefully -musefulness -Muse-haunted -Muse-inspired -museist -Muse-led -museless -muselessness -muselike -Musella -Muse-loved -museographer -museography -museographist -museology -museologist -muser -musery -Muse-ridden -musers -Muses -muset -Musetta -Musette -musettes -museum -museumize -museums -museum's -Musgu -mush -musha -mushaa -Mushabbihite -mushed -musher -mushers -mushes -mushhead -mushheaded -mushheadedness -mushy -mushier -mushiest -mushily -mushiness -mushing -mush-kinu -mushla -mushmelon -mushrebiyeh -Mushro -mushroom -mushroom-colored -mushroomed -mushroomer -mushroom-grown -mushroomy -mushroomic -mushrooming -mushroomlike -mushrooms -mushroom-shaped -mushru -mushrump -Musial -music -musica -musical -musicale -musicales -musicality -musicalization -musicalize -musically -musicalness -musicals -musicate -music-copying -music-drawing -music-flowing -music-footed -musician -musiciana -musicianer -musicianly -musicians -musicianship -musicianships -musicker -musicless -musiclike -music-like -music-loving -music-mad -music-making -musicmonger -musico -musico- -musicoartistic -musicodramatic -musicofanatic -musicographer -musicography -musicology -musicological -musicologically -musicologies -musicologist -musicologists -musicologue -musicomania -musicomechanical -musicophile -musicophilosophical -musicophysical -musicophobia -musicopoetic -musicotherapy -musicotherapies -music-panting -musicproof -musicry -musics -music-stirring -music-tongued -musie -Musigny -Musil -musily -musimon -musing -musingly -musings -musion -musit -musive -musjid -musjids -musk -muskadel -muskallonge -muskallunge -muskat -musk-cat -musk-cod -musk-deer -musk-duck -musked -muskeg -muskeggy -Muskego -Muskegon -muskegs -muskellunge -muskellunges -musket -musketade -musketeer -musketeers -musketlike -musketo -musketoon -musketproof -musketry -musketries -muskets -musket's -muskflower -muskgrass -Muskhogean -musky -muskie -muskier -muskies -muskiest -muskified -muskily -muskiness -muskinesses -muskish -muskit -muskits -musklike -muskmelon -muskmelons -Muskogean -Muskogee -Muskogees -muskone -muskox -musk-ox -muskoxen -muskrat -musk-rat -muskrats -muskrat's -muskroot -musk-root -musks -musk-tree -Muskwaki -muskwood -musk-wood -Muslem -Muslems -Muslim -Muslimism -Muslims -muslin -muslined -muslinet -muslinette -muslins -MusM -musmon -musnud -muso -Musophaga -Musophagi -Musophagidae -musophagine -musophobia -Muspelheim -Muspell -Muspellsheim -Muspelsheim -muspike -muspikes -musquash -musquashes -musquashroot -musquashweed -musquaspen -musquaw -musqueto -musrol -musroomed -muss -mussable -mussably -mussack -Mussaenda -mussal -mussalchee -mussed -mussel -musselcracker -musseled -musseler -mussellim -mussels -mussel's -mussel-shell -Musser -musses -Musset -mussy -mussick -mussier -mussiest -mussily -mussiness -mussinesses -mussing -mussitate -mussitation -Mussman -Mussolini -Mussorgski -Mussorgsky -mussuck -mussuk -Mussulman -Mussulmanic -Mussulmanish -Mussulmanism -Mussulmans -Mussulwoman -mussurana -must -mustache -mustached -mustaches -mustachial -mustachio -mustachioed -mustachios -mustafina -mustafuz -Mustagh -Mustahfiz -mustang -mustanger -mustangs -mustard -mustarder -mustardy -mustards -musted -mustee -mustees -Mustela -mustelid -Mustelidae -mustelin -musteline -mustelinous -musteloid -Mustelus -muster -musterable -musterdevillers -mustered -musterer -musterial -mustering -mustermaster -muster-out -musters -musth -musths -musty -mustier -musties -mustiest -mustify -mustily -mustiness -mustinesses -musting -mustnt -mustn't -Mustoe -musts -mustulent -musumee -mut -muta -Mutabilia -mutability -mutabilities -mutable -mutableness -mutably -mutafacient -mutage -mutagen -mutagenesis -mutagenetic -mutagenic -mutagenically -mutagenicity -mutagenicities -mutagens -mutandis -mutant -mutants -mutarotate -mutarotation -mutase -mutases -mutate -mutated -mutates -mutating -mutation -mutational -mutationally -mutationism -mutationist -mutations -mutatis -mutative -mutator -mutatory -mutawalli -mutawallis -Mutazala -Mutazila -Mutazilite -mutch -mutches -mutchkin -mutchkins -mute -muted -mutedly -mutedness -mutely -muteness -mutenesses -Muter -mutes -mutesarif -mutescence -mutessarif -mutessarifat -mutest -muth -muth-labben -muthmannite -muthmassel -mutic -muticate -muticous -mutilate -mutilated -mutilates -mutilating -mutilation -mutilations -mutilative -mutilator -mutilatory -mutilators -Mutilla -mutillid -Mutillidae -mutilous -mutinado -mutine -mutined -mutineer -mutineered -mutineering -mutineers -mutines -muting -mutiny -mutinied -mutinies -mutinying -mutining -mutiny's -mutinize -mutinous -mutinously -mutinousness -Mutinus -Mutisia -Mutisiaceae -mutism -mutisms -mutist -mutistic -mutive -mutivity -muto- -muton -mutons -mutoscope -mutoscopic -muts -mutsje -mutsuddy -Mutsuhito -mutt -mutten -mutter -muttered -mutterer -mutterers -muttering -mutteringly -mutters -mutton -muttonbird -muttonchop -mutton-chop -muttonchops -muttonfish -mutton-fish -muttonfishes -muttonhead -mutton-head -muttonheaded -muttonheadedness -muttonhood -muttony -mutton-legger -muttonmonger -muttons -muttonwood -Muttra -mutts -mutual -mutualisation -mutualise -mutualised -mutualising -mutualism -mutualist -mutualistic -mutuality -mutualities -mutualization -mutualize -mutualized -mutualizing -mutually -mutualness -mutuals -mutuant -mutuary -mutuate -mutuatitious -mutuel -mutuels -mutular -mutulary -mutule -mutules -Mutunus -Mutus -mutuum -mutwalli -Mutz -muumuu -muu-muu -muumuus -muvule -MUX -Muzak -muzarab -muzhik -muzhiks -Muzio -muzjik -muzjiks -Muzo -muzoona -Muzorewa -muzz -muzzy -muzzier -muzziest -muzzily -muzziness -muzzle -muzzled -muzzleloader -muzzle-loader -muzzleloading -muzzle-loading -muzzler -muzzlers -muzzles -muzzle's -muzzlewood -muzzling -MV -MVA -MVD -MVEd -MVY -MVO -MVP -MVS -MVSc -MVSSP -MVSXA -MW -MWA -mwalimu -Mwanza -Mweru -MWM -MWT -MX -mxd -MXU -mzee -Mzi -mzungu -n -n- -N. -N.A. -N.B. -N.C. -N.C.O. -n.d. -N.F. -N.G. -N.I. -N.Y. -N.Y.C. -N.J. -n.p. -N.S. -N.S.W. -N.T. -N.U.T. -N.W.T. -N.Z. -n/a -n/f -N/S/F -NA -NAA -NAACP -NAAFI -Naalehu -Naam -Naaman -Naamana -Naamann -Naameh -Naara -Naarah -NAAS -Naashom -Naassenes -NAB -NABAC -nabak -Nabal -Nabala -Nabalas -Nabalism -Nabalite -Nabalitic -Nabaloi -Nabalus -Nabataean -Nabatean -Nabathaean -Nabathean -Nabathite -Nabb -nabbed -nabber -nabbers -Nabby -nabbing -nabbuk -nabcheat -nabe -nabes -Nabila -Nabis -Nabisco -nabk -nabla -nablas -nable -Nablus -nabob -nabobery -naboberies -nabobess -nabobesses -nabobical -nabobically -nabobish -nabobishly -nabobism -nabobisms -nabobry -nabobrynabobs -nabobs -nabobship -Nabokov -Nabonassar -Nabonidus -Naboth -Nabothian -nabs -Nabu -Nabuchodonosor -NAC -NACA -nacarat -nacarine -Nace -nacelle -nacelles -nach -nachani -nachas -nache -Naches -Nachison -Nachitoch -Nachitoches -nacho -nachos -Nachschlag -nachtmml -Nachtmusik -nachus -Nachusa -Nacionalista -Nackenheimer -nacket -Naco -Nacoochee -nacre -nacred -nacreous -nacreousness -nacres -nacry -nacrine -nacrite -nacrous -NACS -NAD -Nada -Nadab -Nadaba -Nadabas -Nadabb -Nadabus -Nadaha -Nadbus -Nadda -nadder -Nadean -Nadeau -nadeem -Nadeen -Na-Dene -Nader -NADGE -NADH -Nady -Nadia -Nadya -Nadiya -Nadine -nadir -nadiral -nadirs -Nadja -Nadler -Nador -nadorite -NADP -nae -naebody -naegait -naegate -naegates -nael -Naemorhedinae -naemorhedine -Naemorhedus -naether -naething -naethings -naevi -naevoid -naevus -naf -Nafis -Nafl -Nafud -NAG -Naga -nagaika -Nagaland -nagami -nagana -naganas -Nagano -nagara -Nagari -Nagasaki -nagatelite -NAGE -Nageezi -Nagey -Nagel -naggar -nagged -nagger -naggers -naggy -naggier -naggiest -naggin -nagging -naggingly -naggingness -naggish -naggle -naggly -naght -Nagy -nagyagite -naging -Nagyszeben -Nagyvarad -Nagyvrad -nagkassar -Nagle -nagmaal -nagman -nagnag -nagnail -Nagoya -nagor -Nagpur -nags -nag's -Nagshead -nagsman -nagster -nag-tailed -Naguabo -nagual -nagualism -nagualist -Nah -Nah. -Naha -Nahama -Nahamas -Nahanarvali -Nahane -Nahani -Nahant -Naharvali -Nahma -nahoor -Nahor -Nahshon -Nahshu -Nahshun -Nahshunn -Nahtanha -Nahua -Nahuan -Nahuatl -Nahuatlac -Nahuatlan -Nahuatleca -Nahuatlecan -Nahuatls -Nahum -Nahunta -Nay -naiad -Naiadaceae -naiadaceous -Naiadales -Naiades -naiads -naiant -Nayar -Nayarit -Nayarita -Naias -nayaur -naib -naid -Naida -Naiditch -naif -naifly -naifs -naig -naigie -naigue -naik -nail -nail-bearing -nailbin -nail-biting -nailbrush -nail-clipping -nail-cutting -nailed -nailer -naileress -nailery -nailers -nailfile -nailfold -nailfolds -nailhead -nail-head -nail-headed -nailheads -naily -nailing -nailless -naillike -Naylor -nail-paring -nail-pierced -nailprint -nailproof -nailrod -nails -nailset -nailsets -nail-shaped -nailshop -nailsick -nail-sick -nailsickness -nailsmith -nail-studded -nail-tailed -nailwort -naim -Naima -nain -nainsel -nainsell -nainsook -nainsooks -naio -naipkin -naique -Nair -naira -nairy -Nairn -Nairnshire -Nairobi -nais -nays -naysay -nay-say -naysayer -naysaying -naish -naiskoi -naiskos -Naismith -naissance -naissant -Naytahwaush -naither -naitly -naive -naively -naiveness -naivenesses -naiver -naives -naivest -naivete -naivetes -naivety -naiveties -naivetivet -naivite -nayward -nayword -Naja -Naji -NAK -Nakada -Nakayama -Nakashima -Nakasuji -nake -naked -naked-armed -naked-bladed -naked-eared -naked-eye -naked-eyed -nakeder -nakedest -naked-flowered -naked-fruited -nakedish -nakedize -nakedly -nakedness -nakednesses -naked-seeded -naked-stalked -naked-tailed -nakedweed -nakedwood -nake-footed -naker -Nakhichevan -nakhlite -nakhod -nakhoda -Nakina -Nakir -Naknek -nako -Nakomgilisala -nakong -nakoo -Nakula -Nakuru -Nalani -Nalchik -Nalda -Naldo -nale -naled -naleds -Nalepka -NALGO -Nalita -nallah -Nallen -Nally -Nalline -Nalor -nalorphine -naloxone -naloxones -NAM -Nama -namability -namable -namaycush -Namaland -Naman -Namangan -Namaqua -Namaqualand -Namaquan -Namara -namare -namaste -namatio -namaz -namazlik -namban -Nambe -namby -namby-pamby -namby-pambical -namby-pambics -namby-pambies -namby-pambyish -namby-pambyism -namby-pambiness -namby-pambyness -namda -name -nameability -nameable -nameboard -name-caller -name-calling -name-child -named -name-day -name-drop -name-dropped -name-dropper -name-dropping -nameless -namelessless -namelessly -namelessness -namely -nameling -Namen -nameplate -nameplates -namer -namers -Names -namesake -namesakes -namesake's -nametag -nametags -nametape -Namhoi -Namibia -naming -NAMM -namma -nammad -nammo -Nammu -Nampa -Nampula -Namtar -Namur -Nan -Nana -Nanafalia -Nanaimo -Nanak -nanako -Nanakuli -nanander -Nananne -nanas -nanawood -Nance -Nancee -Nancey -nances -Nanchang -Nan-ching -Nanci -Nancy -Nancie -nancies -NAND -nanda -Nandi -nandin -Nandina -nandine -nandins -Nandor -nandow -nandu -nanduti -nane -nanes -Nanete -Nanette -nanga -nangca -nanger -nangka -Nanhai -Nani -Nanice -nanigo -Nanine -nanism -nanisms -nanitic -nanization -Nanjemoy -Nanji -nankeen -nankeens -Nankin -Nanking -Nankingese -nankins -nanmu -Nanna -nannander -nannandrium -nannandrous -Nannette -Nanni -Nanny -nannyberry -nannyberries -nannybush -Nannie -nannies -nanny-goat -Nanning -nanninose -nannofossil -nannoplankton -nannoplanktonic -nano- -nanocephaly -nanocephalia -nanocephalic -nanocephalism -nanocephalous -nanocephalus -nanocurie -nanocuries -nanogram -nanograms -nanoid -nanoinstruction -nanoinstructions -nanomelia -nanomelous -nanomelus -nanometer -nanometre -Nanon -Nanook -nanoplankton -nanoprogram -nanoprogramming -nanosec -nanosecond -nanoseconds -nanosoma -nanosomia -nanosomus -nanostore -nanostores -nanowatt -nanowatts -nanoword -NANP -nanpie -Nansen -nansomia -nant -Nantais -Nanterre -Nantes -Nanticoke -Nantyglo -nantle -nantokite -nants -Nantua -Nantucket -Nantung -Nantz -Nanuet -naoi -Naoise -naology -naological -Naoma -naometry -Naomi -Naor -Naos -Naosaurus -naoto -Nap -Napa -Napaea -Napaeae -Napaean -Napakiak -napal -napalm -napalmed -napalming -napalms -Napanoch -NAPAP -Napavine -nape -napead -napecrest -napellus -Naper -naperer -napery -Naperian -naperies -Naperville -napes -Naphtali -naphth- -naphtha -naphthacene -naphthalate -naphthalene -naphthaleneacetic -naphthalenesulphonic -naphthalenic -naphthalenoid -naphthalic -naphthalidine -naphthalin -naphthaline -naphthalise -naphthalised -naphthalising -naphthalization -naphthalize -naphthalized -naphthalizing -naphthalol -naphthamine -naphthanthracene -naphthas -naphthene -naphthenic -naphthyl -naphthylamine -naphthylaminesulphonic -naphthylene -naphthylic -naphthinduline -naphthionate -naphtho -naphthoic -naphthol -naphtholate -naphtholize -naphthols -naphtholsulphonate -naphtholsulphonic -naphthoquinone -naphthoresorcinol -naphthosalol -naphthous -naphthoxide -naphtol -naphtols -Napier -Napierian -napiform -napkin -napkined -napkining -napkins -napkin's -Naples -napless -naplessness -NAPLPS -Napoleon -Napoleonana -Napoleonic -Napoleonically -Napoleonism -Napoleonist -Napoleonistic -napoleonite -Napoleonize -napoleons -Napoleonville -Napoli -Naponee -napoo -napooh -nappa -Nappanee -nappe -napped -napper -nappers -nappes -Nappy -Nappie -nappier -nappies -nappiest -nappiness -napping -nappishness -naprapath -naprapathy -napron -naps -nap's -napthionic -napu -Naquin -NAR -Nara -Narah -Narayan -Narayanganj -Naraka -Naranjito -Naravisa -Narbada -Narberth -Narbonne -narc -Narcaciontes -Narcaciontidae -Narcaeus -narcein -narceine -narceines -narceins -Narcho -Narcis -narciscissi -narcism -narcisms -Narciss -Narcissan -narcissi -Narcissine -narcissism -narcissisms -narcissist -narcissistic -narcissistically -narcissists -Narcissus -narcissuses -narcist -narcistic -narcists -narco -narco- -narcoanalysis -narcoanesthesia -Narcobatidae -Narcobatoidea -Narcobatus -narcohypnia -narcohypnoses -narcohypnosis -narcohypnotic -narcolepsy -narcolepsies -narcoleptic -narcoma -narcomania -narcomaniac -narcomaniacal -narcomas -narcomata -narcomatous -Narcomedusae -narcomedusan -narcos -narcose -narcoses -narcosynthesis -narcosis -narcostimulant -narcotherapy -narcotherapies -narcotherapist -narcotia -narcotic -narcotical -narcotically -narcoticalness -narcoticism -narcoticness -narcotico-acrid -narcotico-irritant -narcotics -narcotin -narcotina -narcotine -narcotinic -narcotisation -narcotise -narcotised -narcotising -narcotism -narcotist -narcotization -narcotize -narcotized -narcotizes -narcotizing -narcous -narcs -nard -Narda -NARDAC -Nardin -nardine -nardoo -nards -nardu -Nardus -nare -naren -narendra -nares -Naresh -Narev -Narew -narghile -narghiles -nargil -nargile -nargileh -nargilehs -nargiles -Nari -Nary -narial -naric -narica -naricorn -nariform -Nariko -Narine -naringenin -naringin -naris -nark -Narka -narked -narky -narking -narks -Narmada -narr -Narra -Narraganset -Narragansett -Narragansetts -narrante -narras -narratable -narrate -narrated -narrater -narraters -narrates -narrating -narratio -narration -narrational -narrations -narrative -narratively -narratives -narrative's -narrator -narratory -narrators -narratress -narratrix -narrawood -narrishkeit -narrow -narrow-backed -narrow-billed -narrow-bladed -narrow-brained -narrow-breasted -narrowcast -narrow-celled -narrow-chested -narrow-crested -narrowed -narrow-eyed -narrow-ended -narrower -narrowest -narrow-faced -narrow-fisted -narrow-gage -narrow-gauge -narrow-gauged -narrow-guage -narrow-guaged -narrow-headed -narrowhearted -narrow-hearted -narrowheartedness -narrow-hipped -narrowy -narrowing -narrowingness -narrowish -narrow-jointed -narrow-laced -narrow-leaved -narrowly -narrow-meshed -narrow-minded -narrow-mindedly -narrow-mindedness -narrow-mouthed -narrow-necked -narrowness -narrownesses -narrow-nosed -narrow-petaled -narrow-rimmed -Narrows -Narrowsburg -narrow-seeded -narrow-shouldered -narrow-shouldred -narrow-skulled -narrow-souled -narrow-spirited -narrow-spiritedness -narrow-streeted -narrow-throated -narrow-toed -narrow-visioned -narrow-waisted -narsarsukite -narsinga -Narsinh -narthecal -Narthecium -narthex -narthexes -Narton -Naruna -Narva -Narvaez -Narvik -Narvon -narw -narwal -narwals -narwhal -narwhale -narwhales -narwhalian -narwhals -NAS -nas- -NASA -nasab -NASAGSFC -nasal -Nasalis -nasalise -nasalised -nasalises -nasalising -nasalism -nasality -nasalities -nasalization -nasalize -nasalized -nasalizes -nasalizing -nasally -nasals -nasalward -nasalwards -nasard -nasat -nasaump -Nasby -Nasca -Nascan -Nascapi -NASCAR -nascence -nascences -nascency -nascencies -nascent -nasch -nasciturus -NASD -NASDA -NASDAQ -naseberry -naseberries -Naseby -Naselle -nasethmoid -Nash -Nashbar -Nashe -nashgab -nash-gab -nashgob -Nashim -Nashira -Nashner -Nasho -Nashoba -Nashom -Nashoma -Nashotah -Nashport -Nashua -Nashville -Nashwauk -Nasi -Nasia -Nasya -nasial -nasicorn -Nasicornia -nasicornous -Nasiei -nasiform -nasilabial -nasillate -nasillation -nasioalveolar -nasiobregmatic -nasioinial -nasiomental -nasion -nasions -Nasireddin -nasitis -Naskhi -NASM -Nasmyth -naso -naso- -nasoalveola -nasoantral -nasobasilar -nasobronchial -nasobuccal -nasoccipital -nasociliary -nasoethmoidal -nasofrontal -nasolabial -nasolachrymal -nasolacrimal -nasology -nasological -nasologist -nasomalar -nasomaxillary -Nason -nasonite -nasoorbital -nasopalatal -nasopalatine -nasopharyngeal -nasopharynges -nasopharyngitis -nasopharynx -nasopharynxes -nasoprognathic -nasoprognathism -nasorostral -nasoscope -nasoseptal -nasosinuitis -nasosinusitis -nasosubnasal -nasoturbinal -NASP -nasrol -Nassa -Nassau -Nassawadox -Nassellaria -nassellarian -Nasser -Nassi -Nassidae -Nassir -nassology -Nast -nastaliq -Nastase -Nastassia -nasty -nastic -nastier -nasties -nastiest -nastika -nastily -nastiness -nastinesses -Nastrnd -nasturtion -nasturtium -nasturtiums -Nasua -nasus -nasute -nasuteness -nasutiform -nasutus -Nat -Nata -natability -nataka -Natal -Natala -Natalbany -Natale -Natalee -Natalia -Natalya -Natalian -Natalie -Natalina -Nataline -natalism -natalist -natality -natalitial -natalities -natally -nataloin -natals -Nataniel -natant -natantly -Nataraja -Natascha -Natasha -Natassia -natation -natational -natations -natator -natatores -natatory -natatoria -natatorial -natatorious -natatorium -natatoriums -natch -natchbone -natch-bone -Natchez -Natchezan -Natchitoches -natchnee -Nate -Natelson -nates -Nath -Nathalia -Nathalie -Nathan -Nathanael -Nathanial -Nathaniel -Nathanil -Nathanson -nathe -natheless -nathemo -nather -nathless -Nathrop -Natica -Naticidae -naticiform -naticine -Natick -naticoid -Natie -natiform -Natiha -Natika -natimortality -nation -National -nationaliser -nationalism -nationalisms -nationalist -nationalistic -nationalistically -nationalists -nationalist's -nationality -nationalities -nationality's -nationalization -nationalizations -nationalize -nationalized -nationalizer -nationalizes -nationalizing -nationally -nationalness -nationals -nationalty -nationhood -nationhoods -nationless -Nations -nation's -nation-state -nationwide -native -native-born -native-bornness -natively -nativeness -natives -Natividad -nativism -nativisms -nativist -nativistic -nativists -Nativity -nativities -nativus -Natka -natl -natl. -NATO -Natoma -Natorp -natr -natraj -Natricinae -natricine -natrium -natriums -natriuresis -natriuretic -Natrix -natrochalcite -natrojarosite -natrolite -natron -natrons -NATS -NATSOPA -Natt -Natta -natter -nattered -natteredness -nattering -natterjack -natters -Natty -Nattie -nattier -nattiest -nattily -nattiness -nattinesses -nattle -nattock -nattoria -natu -natuary -natura -naturae -natural -natural-born -naturale -naturalesque -naturalia -naturalisation -naturalise -naturaliser -naturalism -naturalisms -naturalist -naturalistic -naturalistically -naturalists -naturality -naturalization -naturalizations -naturalize -naturalized -naturalizer -naturalizes -naturalizing -naturally -naturalness -naturalnesses -naturals -naturata -Nature -naturecraft -natured -naturedly -naturel -naturelike -natureliked -naturellement -natureopathy -nature-print -nature-printing -natures -nature's -naturing -naturism -naturist -naturistic -naturistically -Naturita -naturize -naturopath -naturopathy -naturopathic -naturopathist -natus -NAU -Naubinway -nauch -nauclerus -naucorid -naucrar -naucrary -Naucratis -naufrage -naufragous -naugahyde -Naugatuck -nauger -naught -naughty -naughtier -naughtiest -naughtily -naughtiness -naughtinesses -naughts -naujaite -naukrar -naulage -naulum -Naum -naumacay -naumachy -naumachia -naumachiae -naumachias -naumachies -Naumann -naumannite -Naumburgia -naumk -naumkeag -naumkeager -naunt -nauntle -naupathia -nauplial -naupliform -nauplii -naupliiform -nauplioid -Nauplius -nauplplii -naur -nauropometer -Nauru -Nauruan -nauscopy -nausea -nauseam -nauseant -nauseants -nauseaproof -nauseas -nauseate -nauseated -nauseates -nauseating -nauseatingly -nauseation -nauseous -nauseously -nauseousness -Nauset -nauseum -Nausicaa -Nausithous -nausity -naut -naut. -nautch -nautches -Nautes -nauther -nautic -nautica -nautical -nauticality -nautically -nauticals -nautics -nautiform -Nautilacea -nautilacean -nautili -nautilicone -nautiliform -nautilite -nautiloid -Nautiloidea -nautiloidean -nautilus -nautiluses -nautophone -Nauvoo -nav -nav. -Nava -Navada -navagium -Navaglobe -Navaho -Navahoes -Navahos -navaid -navaids -Navajo -Navajoes -Navajos -Naval -navalese -navalism -navalist -navalistic -navalistically -navally -navar -navarch -navarchy -navarho -navarin -Navarino -Navarra -Navarre -Navarrese -Navarrian -Navarro -navars -Navasota -NAVDAC -nave -navel -naveled -navely -navellike -navels -navel-shaped -navelwort -naveness -naves -Navesink -navet -naveta -navete -navety -navette -navettes -navew -navi -navy -navicella -navicert -navicerts -navicula -Naviculaceae -naviculaeform -navicular -naviculare -naviculoid -navies -naviform -navig -navig. -navigability -navigabilities -navigable -navigableness -navigably -navigant -navigate -navigated -navigates -navigating -navigation -navigational -navigationally -navigations -navigator -navigators -navigator's -navigerous -navipendular -navipendulum -navis -navy's -navite -Navpaktos -Navratilova -NAVSWC -navvy -navvies -naw -nawab -nawabs -nawabship -nawies -nawle -nawob -Nawrocki -nawt -Naxalite -Naxera -Naxos -Nazar -Nazarate -nazard -Nazarean -Nazarene -nazarenes -Nazarenism -Nazareth -Nazario -Nazarite -Nazariteship -Nazaritic -Nazaritish -Nazaritism -Nazarius -nazdrowie -Naze -nazeranna -Nazerini -Nazi -Nazify -nazification -nazified -nazifies -nazifying -Naziism -nazim -Nazimova -nazir -Nazirate -Nazirite -Naziritic -Nazis -nazi's -Nazism -Nazler -Nazlini -NB -NBA -NBC -NbE -Nberg -NBFM -NBG -NBO -N-bomb -NBP -NBS -NBVM -NbW -NC -NCA -NCAA -NCAR -NCB -NCC -NCCF -NCCL -NCD -NCDC -NCE -NCGA -nCi -NCIC -NCMOS -NCO -NCP -NCR -NCS -NCSA -NCSC -NCSL -NCTE -NCTL -NCV -ND -NDA -NDAC -NDak -NDB -NDCC -NDDL -NDE -NDEA -Ndebele -Ndebeles -NDI -n-dimensional -NDIS -Ndjamena -N'Djamena -NDL -ndoderm -Ndola -NDP -NDSL -NDT -NDV -NE -ne- -NEA -Neaera -neaf -Neafus -Neagh -neakes -Neal -Neala -Nealah -Neale -Nealey -Nealy -Neall -neallotype -Nealon -Nealson -Neander -Neanderthal -Neanderthaler -Neanderthalism -Neanderthaloid -neanderthals -neanic -neanthropic -neap -neaped -Neapolis -Neapolitan -neapolitans -neaps -NEAR -near- -nearable -nearabout -nearabouts -near-acquainted -near-adjoining -nearaivays -near-at-hand -nearaway -nearaways -nearby -near-by -near-blindness -near-bordering -Nearch -near-colored -near-coming -Nearctic -Nearctica -near-dwelling -neared -nearer -nearest -near-fighting -near-following -near-growing -near-guessed -near-hand -nearing -nearish -near-legged -nearly -nearlier -nearliest -near-miss -nearmost -nearness -nearnesses -NEARNET -near-point -near-related -near-resembling -nears -nearshore -nearside -nearsight -near-sight -nearsighted -near-sighted -nearsightedly -nearsightedness -nearsightednesses -near-silk -near-smiling -near-stored -near-threatening -nearthrosis -near-touching -near-ushering -near-white -neascus -neat -neat-ankled -neat-dressed -neaten -neatened -neatening -neatens -neater -neatest -neat-faced -neat-fingered -neat-folded -neat-footed -neath -neat-handed -neat-handedly -neat-handedness -neatherd -neatherdess -neatherds -neathmost -neat-house -neatify -neatly -neat-limbed -neat-looking -neatness -neatnesses -neats -Neau -neavil -Neavitt -NEB -neback -Nebaioth -Nebalia -Nebaliacea -nebalian -Nebaliidae -nebalioid -nebbed -nebby -nebbish -nebbishes -nebbuck -nebbuk -NEbE -nebel -nebelist -nebenkern -Nebiim -NEbn -neb-neb -Nebo -Nebr -Nebr. -Nebraska -Nebraskan -nebraskans -nebris -nebrodi -Nebrophonus -NEBS -Nebuchadnezzar -Nebuchadrezzar -nebula -nebulae -nebular -nebularization -nebularize -nebulas -nebulated -nebulation -nebule -nebulescent -nebuly -nebuliferous -nebulisation -nebulise -nebulised -nebuliser -nebulises -nebulising -nebulite -nebulium -nebulization -nebulize -nebulized -nebulizer -nebulizers -nebulizes -nebulizing -nebulon -nebulose -nebulosity -nebulosities -nebulosus -nebulous -nebulously -nebulousness -NEC -necation -Necator -Necedah -necessar -necessary -necessarian -necessarianism -necessaries -necessarily -necessariness -necessarium -necessarius -necesse -necessism -necessist -necessitarian -necessitarianism -necessitate -necessitated -necessitatedly -necessitates -necessitating -necessitatingly -necessitation -necessitative -necessity -necessities -necessitous -necessitously -necessitousness -necessitude -necessitudo -Neche -Neches -Necho -necia -neck -Neckar -neckatee -neckband -neck-band -neckbands -neck-beef -neck-bone -neck-break -neck-breaking -neckcloth -neck-cracking -neck-deep -necked -neckenger -Necker -neckercher -neckerchief -neckerchiefs -neckerchieves -neckers -neck-fast -neckful -neckguard -neck-high -neck-hole -necking -neckinger -neckings -neckyoke -necklace -necklaced -necklaces -necklace's -necklaceweed -neckless -necklet -necklike -neckline -necklines -neckmold -neckmould -neckpiece -neck-piece -neck-rein -necks -neckstock -neck-stretching -necktie -neck-tie -necktieless -neckties -necktie's -neck-verse -neckward -neckwear -neckwears -neckweed -necr- -necraemia -necrectomy -necremia -necro -necro- -necrobacillary -necrobacillosis -necrobiosis -necrobiotic -necrogenic -necrogenous -necrographer -necrolatry -necrology -necrologic -necrological -necrologically -necrologies -necrologist -necrologue -necromancer -necromancers -necromancy -necromancies -necromancing -necromania -necromantic -necromantical -necromantically -necromimesis -necromorphous -necronite -necropathy -Necrophaga -necrophagan -necrophagy -necrophagia -necrophagous -necrophil -necrophile -necrophily -necrophilia -necrophiliac -necrophilic -necrophilism -necrophilistic -necrophilous -necrophobia -necrophobic -Necrophorus -necropoleis -necropoles -necropoli -necropolis -necropolises -necropolitan -necropsy -necropsied -necropsies -necropsying -necroscopy -necroscopic -necroscopical -necrose -necrosed -necroses -necrosing -necrosis -necrotic -necrotically -necrotype -necrotypic -necrotise -necrotised -necrotising -necrotization -necrotize -necrotized -necrotizing -necrotomy -necrotomic -necrotomies -necrotomist -Nectandra -nectar -nectar-bearing -nectar-breathing -nectar-dropping -nectareal -nectarean -nectared -nectareous -nectareously -nectareousness -nectary -nectarial -nectarian -nectaried -nectaries -nectariferous -nectarin -nectarine -nectarines -Nectarinia -Nectariniidae -nectarious -Nectaris -nectarise -nectarised -nectarising -nectarium -nectarivorous -nectarize -nectarized -nectarizing -nectarlike -nectar-loving -nectarous -nectars -nectar-secreting -nectar-seeking -nectar-spouting -nectar-streaming -nectar-tongued -nectiferous -nectocalyces -nectocalycine -nectocalyx -necton -Nectonema -nectophore -nectopod -Nectria -nectriaceous -Nectrioidaceae -nectron -Necturidae -Necturus -NED -Neda -NEDC -Nedda -nedder -Neddy -Neddie -neddies -Neddra -Nederland -Nederlands -Nedi -Nedra -Nedrah -Nedry -Nedrow -Nedrud -Nee -neebor -neebour -need -need-be -needed -needer -needers -needfire -needful -needfully -needfulness -needfuls -needgates -Needham -needy -needier -neediest -needily -neediness -needing -needle -needle-and-thread -needle-bar -needlebill -needle-billed -needlebook -needlebush -needlecase -needlecord -needlecraft -needled -needlefish -needle-fish -needlefishes -needle-form -needleful -needlefuls -needle-gun -needle-leaved -needlelike -needle-made -needlemaker -needlemaking -needleman -needlemen -needlemonger -needle-nosed -needlepoint -needle-point -needle-pointed -needlepoints -needleproof -needler -needlers -Needles -needle-scarred -needle-shaped -needle-sharp -needless -needlessly -needlessness -needlestone -needle-witted -needlewoman -needlewomen -needlewood -needlework -needleworked -needleworker -needleworks -needly -needling -needlings -needment -needments -Needmore -needn -need-not -neednt -needn't -needs -needs-be -needsly -needsome -Needville -neeger -Neel -Neela -neel-bhunder -neeld -neele -neelghan -Neely -Neelyton -Neelyville -Neelon -neem -neemba -neems -Neenah -neencephala -neencephalic -neencephalon -neencephalons -Neengatu -Neeoma -neep -neepour -neeps -neer -ne'er -ne'er-dos -neer-do-well -ne'er-do-well -neese -Neeses -neet -neetup -neeze -nef -nefandous -nefandousness -nefarious -nefariouses -nefariously -nefariousness -nefas -nefast -nefastus -Nefen -Nefertem -Nefertiti -Neff -neffy -Neffs -Nefretete -Nefreteted -Nefreteting -NEFS -neftgil -NEG -negara -negate -negated -negatedness -negater -negaters -negates -negating -negation -negational -negationalist -negationist -negation-proof -negations -negativate -negative -negatived -negatively -negativeness -negative-pole -negativer -negative-raising -negatives -negativing -negativism -negativist -negativistic -negativity -negaton -negatons -negator -negatory -negators -negatron -negatrons -Negaunee -neger -Negev -neginoth -neglect -neglectable -neglected -neglectedly -neglected-looking -neglectedness -neglecter -neglectful -neglectfully -neglectfulness -neglecting -neglectingly -neglection -neglective -neglectively -neglector -neglectproof -neglects -Negley -neglig -neglige -negligee -negligees -negligence -negligences -negligency -negligent -negligentia -negligently -negliges -negligibility -negligible -negligibleness -negligibly -negoce -negotiability -negotiable -negotiables -negotiably -negotiant -negotiants -negotiate -negotiated -negotiates -negotiating -negotiation -negotiations -negotiator -negotiatory -negotiators -negotiatress -negotiatrix -negotiatrixes -negotious -negqtiator -Negreet -Negress -Negrillo -Negrillos -negrine -Negris -negrita -Negritian -Negritic -Negritise -Negritised -Negritising -Negritize -Negritized -Negritizing -Negrito -Negritoes -Negritoid -Negritos -negritude -Negro -negrodom -Negroes -Negrofy -negrohead -negro-head -negrohood -Negroid -Negroidal -negroids -Negroise -Negroised -negroish -Negroising -Negroism -Negroization -Negroize -Negroized -Negroizing -negrolike -Negroloid -Negroni -negronis -Negrophil -Negrophile -Negrophilism -Negrophilist -Negrophobe -Negrophobia -Negrophobiac -Negrophobist -Negropont -Negros -Negrotic -Negundo -Negus -neguses -Neh -Neh. -Nehalem -Nehantic -Nehawka -Nehemiah -Nehemias -nehiloth -Nehru -NEI -Ney -neyanda -Neibart -Neidhardt -neif -neifs -neigh -neighbor -neighbored -neighborer -neighboress -neighborhood -neighborhoods -neighborhood's -neighboring -neighborless -neighborly -neighborlike -neighborlikeness -neighborliness -neighborlinesses -neighbors -neighborship -neighborstained -neighbour -neighboured -neighbourer -neighbouress -neighbourhood -neighbouring -neighbourless -neighbourly -neighbourlike -neighbourliness -neighbours -neighbourship -neighed -neigher -neighing -neighs -Neihart -Neil -Neila -Neilah -Neile -Neill -Neilla -Neille -Neillia -Neillsville -Neils -Neilson -Neilton -Neiman -nein -neiper -Neisa -Neysa -Neison -Neisse -Neisseria -Neisserieae -neist -Neith -neither -Neiva -Nejd -Nejdi -nek -Nekhbet -Nekhebet -Nekhebit -Nekhebt -Nekkar -Nekoma -Nekoosa -Nekrasov -nekton -nektonic -nektons -Nel -Nela -Nelan -Nelda -Neleus -Nelia -Nelides -Nelie -Neligh -nelken -Nell -Nella -Nellda -Nelle -Nelli -Nelly -Nellie -nellies -Nellir -Nellis -Nellysford -Nelliston -Nelrsa -Nels -Nelse -Nelsen -Nelson -Nelsonia -nelsonite -nelsons -Nelsonville -nelumbian -Nelumbium -Nelumbo -Nelumbonaceae -nelumbos -NEMA -Nemacolin -Nemaha -nemaline -Nemalion -Nemalionaceae -Nemalionales -nemalite -Neman -nemas -Nemastomaceae -nemat- -Nematelmia -nematelminth -Nematelminthes -nemathece -nemathecia -nemathecial -nemathecium -Nemathelmia -nemathelminth -Nemathelminthes -nematic -nematicidal -nematicide -nemato- -nematoblast -nematoblastic -Nematocera -nematoceran -nematocerous -nematocidal -nematocide -nematocyst -nematocystic -Nematoda -nematode -nematodes -nematodiasis -nematogen -nematogene -nematogenic -nematogenous -nematognath -Nematognathi -nematognathous -nematogone -nematogonous -nematoid -Nematoidea -nematoidean -nematology -nematological -nematologist -Nematomorpha -nematophyton -Nematospora -nematozooid -Nembutal -Nembutsu -Nemea -Nemean -Nemery -Nemertea -nemertean -nemertian -nemertid -Nemertina -nemertine -Nemertinea -nemertinean -Nemertini -nemertoid -Nemeses -Nemesia -nemesic -Nemesis -Nemhauser -Nemichthyidae -Nemichthys -nemine -Nemo -Nemocera -nemoceran -nemocerous -Nemopanthus -Nemophila -nemophily -nemophilist -nemophilous -nemoral -Nemorensian -nemoricole -nemoricoline -nemoricolous -nemos -Nemours -NEMP -nempne -Nemrod -Nemunas -Nena -nenarche -nene -nenes -Nengahiba -Nenney -Nenni -nenta -nenuphar -Nenzel -Neo -neo- -neoacademic -neoanthropic -Neoarctic -neoarsphenamine -Neo-attic -Neo-babylonian -Neobalaena -Neobeckia -neoblastic -neobotany -neobotanist -neo-Catholic -NeoCatholicism -neo-Celtic -Neocene -Neoceratodus -neocerotic -neochristianity -neo-Christianity -neocyanine -neocyte -neocytosis -neoclassic -neo-classic -neoclassical -neoclassically -Neoclassicism -neoclassicist -neo-classicist -neoclassicists -neocolonial -neocolonialism -neocolonialist -neocolonialists -neocolonially -Neocomian -neoconcretist -Neo-Confucian -Neo-Confucianism -Neo-Confucianist -neoconservative -neoconstructivism -neoconstructivist -neocortex -neocortical -neocosmic -neocracy -neocriticism -neocubism -neocubist -neodadaism -neodadaist -neodamode -neo-Darwinian -Neo-Darwinism -Neo-Darwinist -Neodesha -neodidymium -neodymium -neodiprion -Neo-egyptian -neoexpressionism -neoexpressionist -Neofabraea -neofascism -neofetal -neofetus -Neofiber -neoformation -neoformative -Neoga -Neogaea -Neogaeal -Neogaean -Neogaeic -neogamy -neogamous -Neogea -Neogeal -Neogean -Neogeic -Neogene -neogenesis -neogenetic -Neognathae -neognathic -neognathous -Neo-Gothic -neogrammarian -neo-grammarian -neogrammatical -neographic -neo-Greek -Neo-hebraic -Neo-hebrew -Neo-Hegelian -Neo-Hegelianism -Neo-hellenic -Neo-hellenism -neohexane -Neo-hindu -Neohipparion -neoholmia -neoholmium -neoimpressionism -Neo-Impressionism -neoimpressionist -Neo-Impressionist -neoytterbium -Neo-Ju -Neo-Kantian -Neo-kantianism -Neo-kantism -Neola -neolalia -Neo-Lamarckian -Neo-Lamarckism -Neo-lamarckist -neolater -Neo-Latin -neolatry -neolith -Neolithic -neoliths -neology -neologian -neologianism -neologic -neological -neologically -neologies -neologise -neologised -neologising -neologism -neologisms -neologist -neologistic -neologistical -neologization -neologize -neologized -neologizing -Neo-Lutheranism -Neom -Neoma -Neomah -Neo-malthusian -Neo-malthusianism -Neo-manichaean -Neo-marxian -neomedievalism -Neo-Melanesian -Neo-mendelian -Neo-mendelism -neomenia -neomenian -Neomeniidae -neomycin -neomycins -Neomylodon -neomiracle -neomodal -neomorph -Neomorpha -neomorphic -neomorphism -neomorphs -neon -Neona -neonatal -neonatally -neonate -neonates -neonatology -neonatus -neoned -neoneds -neonychium -neonomian -neonomianism -neons -neontology -neoologist -neoorthodox -neoorthodoxy -neo-orthodoxy -neopagan -neopaganism -neopaganize -Neopaleozoic -neopallial -neopallium -neoparaffin -Neo-persian -neophilism -neophilological -neophilologist -neophyte -neophytes -neophytic -neophytish -neophytism -neophobia -neophobic -neophrastic -Neophron -Neopieris -Neopilina -neopine -Neopit -Neo-Pythagorean -Neo-Pythagoreanism -Neo-plantonic -neoplasia -neoplasm -neoplasma -neoplasmata -neoplasms -neoplasty -Neoplastic -Neo-Plastic -neoplasticism -neo-Plasticism -Neoplasticist -Neo-Plasticist -neoplasties -Neoplatonic -Neoplatonician -neo-Platonician -Neoplatonism -Neo-Platonism -Neoplatonist -Neo-platonist -Neoplatonistic -neoprene -neoprenes -Neoprontosil -Neoptolemus -Neo-punic -neorama -neorealism -Neo-Realism -Neo-Realist -Neornithes -neornithic -neo-Roman -Neo-Romanticism -Neosalvarsan -neo-Sanskrit -neo-Sanskritic -neo-Scholastic -Neoscholasticism -neo-Scholasticism -Neosho -Neo-Synephrine -neo-Syriac -neo-Sogdian -Neosorex -Neosporidia -neossin -neossine -neossology -neossoptile -neostigmine -neostyle -neostyled -neostyling -neostriatum -neo-Sumerian -neoteinia -neoteinic -neoteny -neotenia -neotenic -neotenies -neotenous -neoteric -neoterical -neoterically -neoterics -neoterism -neoterist -neoteristic -neoterize -neoterized -neoterizing -neothalamus -neo-Thomism -neotype -neotypes -Neotoma -neotraditionalism -neotraditionalist -Neotragus -Neotremata -Neotropic -Neotropical -Neotsu -neovitalism -neovolcanic -Neowashingtonia -neoza -Neozoic -NEP -Nepa -Nepal -Nepalese -Nepali -Nepean -Nepenthaceae -nepenthaceous -nepenthe -nepenthean -Nepenthes -Neper -Neperian -Nepeta -Neph -nephalism -nephalist -nephalistic -nephanalysis -Nephele -nepheligenous -nepheline -nephelinic -nephelinite -nephelinitic -nephelinitoid -nephelite -nephelite-basanite -nephelite-diorite -nephelite-porphyry -nephelite-syenite -nephelite-tephrite -Nephelium -nephelo- -nephelognosy -nepheloid -nephelometer -nephelometry -nephelometric -nephelometrical -nephelometrically -nephelorometer -nepheloscope -nephesh -nephew -nephews -nephew's -nephewship -Nephi -Nephila -nephilim -Nephilinae -nephionic -Nephite -nephogram -nephograph -nephology -nephological -nephologist -nephometer -nephophobia -nephoscope -nephphridia -nephr- -nephradenoma -nephralgia -nephralgic -nephrapostasis -nephratonia -nephrauxe -nephrectasia -nephrectasis -nephrectomy -nephrectomies -nephrectomise -nephrectomised -nephrectomising -nephrectomize -nephrectomized -nephrectomizing -nephrelcosis -nephremia -nephremphraxis -nephria -nephric -nephridia -nephridial -nephridiopore -nephridium -nephrism -nephrisms -nephrite -nephrites -nephritic -nephritical -nephritides -nephritis -nephritises -nephro- -nephroabdominal -nephrocardiac -nephrocele -nephrocystitis -nephrocystosis -nephrocyte -nephrocoele -nephrocolic -nephrocolopexy -nephrocoloptosis -nephrodinic -Nephrodium -nephroerysipelas -nephrogastric -nephrogenetic -nephrogenic -nephrogenous -nephrogonaduct -nephrohydrosis -nephrohypertrophy -nephroid -Nephrolepis -nephrolysin -nephrolysis -nephrolith -nephrolithic -nephrolithosis -nephrolithotomy -nephrolithotomies -nephrolytic -nephrology -nephrologist -nephromalacia -nephromegaly -nephromere -nephron -nephroncus -nephrons -nephroparalysis -nephropathy -nephropathic -nephropexy -nephrophthisis -nephropyelitis -nephropyeloplasty -nephropyosis -nephropore -Nephrops -Nephropsidae -nephroptosia -nephroptosis -nephrorrhagia -nephrorrhaphy -nephros -nephrosclerosis -nephrosis -nephrostoma -nephrostome -nephrostomy -nephrostomial -nephrostomous -nephrotic -nephrotyphoid -nephrotyphus -nephrotome -nephrotomy -nephrotomies -nephrotomise -nephrotomize -nephrotoxic -nephrotoxicity -nephrotoxin -nephrotuberculosis -nephro-ureterectomy -nephrozymosis -Nephtali -Nephthys -Nepidae -Nepil -nepionic -nepit -nepman -nepmen -Neponset -Nepos -nepotal -nepote -nepotic -nepotious -nepotism -nepotisms -nepotist -nepotistic -nepotistical -nepotistically -nepotists -nepouite -nepquite -Neptune -Neptunean -Neptunian -neptunism -neptunist -neptunium -neral -Nerbudda -NERC -nerd -nerdy -nerds -nere -Nereen -Nereid -Nereidae -nereidean -nereides -nereidiform -Nereidiformia -nereidous -Nereids -Nereis -nereite -Nereocystis -Nereus -Nergal -Neri -Nerin -Nerine -Nerinx -Nerissa -Nerita -nerite -Nerites -neritic -Neritidae -Neritina -neritjc -neritoid -Nerium -nerka -Nerland -Nernst -Nero -Neroic -nerol -neroli -nerolis -nerols -Neron -Neronian -Neronic -Neronize -Nero's-crown -Nerstrand -Nert -Nerta -Nerte -nerterology -Nerthridae -Nerthrus -Nerthus -Nerti -Nerty -Nertie -nerts -nertz -Neruda -nerv- -Nerva -Nerval -nervate -nervation -nervature -nerve -nerve-ache -nerve-celled -nerve-cutting -nerved -nerve-deaf -nerve-deafness -nerve-destroying -nerve-irritating -nerve-jangling -nerveless -nervelessly -nervelessness -nervelet -nerveproof -nerver -nerve-racked -nerve-racking -nerve-rending -nerve-ridden -nerveroot -nerves -nerve's -nerve-shaken -nerve-shaking -nerve-shattering -nerve-stretching -nerve-tingling -nerve-trying -nerve-winged -nerve-wracking -nervy -nervid -nerviduct -nervier -nerviest -Nervii -nervily -nervimotion -nervimotor -nervimuscular -nervine -nervines -nerviness -nerving -nervings -nervish -nervism -nervo- -nervomuscular -nervosa -nervosanguineous -nervose -nervosism -nervosity -nervosities -nervous -nervously -nervousness -nervousnesses -nervular -nervule -nervules -nervulet -nervulose -nervuration -nervure -nervures -nervus -NES -NESAC -Nesbit -Nesbitt -NESC -nescience -nescient -nescients -Nesconset -Nescopeck -nese -Neses -nesh -Neshkoro -neshly -neshness -Nesiot -nesiote -Neskhi -neslave -Neslia -Nesline -Neslund -Nesmith -Nesogaea -Nesogaean -Nesokia -Nesonetta -nesosilicate -Nesotragus -Nespelem -Nespelim -Nesquehoning -nesquehonite -ness -Nessa -nessberry -Nesselrode -nesses -Nessi -Nessy -Nessie -Nessim -nesslerise -nesslerised -nesslerising -nesslerization -Nesslerize -nesslerized -nesslerizing -Nessus -nest -Nesta -nestable -nestage -nest-building -nested -nest-egg -Nester -nesters -nestful -nesty -nestiatria -nesting -nestings -nestitherapy -nestle -nestle-cock -nestled -nestler -nestlers -nestles -nestlike -nestling -nestlings -Nesto -Nestor -Nestorian -Nestorianism -Nestorianize -Nestorianizer -nestorine -Nestorius -nestors -nests -NET -Netaji -Netawaka -netball -NETBIOS -NETBLT -netbraider -netbush -NETCDF -netcha -Netchilik -Netcong -nete -neter -net-fashion -netful -Neth -Neth. -netheist -nether -Netherlander -Netherlandian -Netherlandic -Netherlandish -Netherlands -nethermore -nethermost -netherstock -netherstone -netherward -netherwards -netherworld -Nethinim -Nethou -Neti -netkeeper -netleaf -netless -netlike -netmaker -netmaking -netman -netmen -netminder -netmonger -Neto -netop -netops -nets -net's -netsman -netsuke -netsukes -Nett -Netta -nettable -nettably -Nettapus -Nette -netted -netted-veined -net-tender -netter -netters -Netti -Netty -Nettie -nettier -nettiest -nettie-wife -netting -nettings -Nettion -Nettle -nettlebed -nettlebird -nettle-cloth -nettled -nettlefire -nettlefish -nettlefoot -nettle-leaved -nettlelike -nettlemonger -nettler -nettle-rough -nettlers -nettles -nettlesome -nettle-stung -Nettleton -nettle-tree -nettlewort -nettly -nettlier -nettliest -nettling -netts -net-veined -net-winged -netwise -network -networked -networking -networks -network's -Neu -Neuberger -Neubrandenburg -Neuburger -Neuchatel -Neuchtel -Neudeckian -Neufchatel -Neufchtel -Neufer -neugkroschen -neugroschen -Neuilly -Neuilly-sur-Seine -neuk -Neukam -neuks -neum -neuma -Neumayer -Neumann -Neumark -neumatic -neumatizce -neumatize -neume -Neumeyer -neumes -neumic -neums -Neumster -Neupest -neur- -neurad -neuradynamia -neural -neurale -neuralgy -neuralgia -neuralgiac -neuralgias -neuralgic -neuralgiform -neuralist -neurally -neuraminidase -neurapophyseal -neurapophysial -neurapophysis -neurarthropathy -neurasthenia -neurasthenias -neurasthenic -neurasthenical -neurasthenically -neurasthenics -neurataxy -neurataxia -Neurath -neuration -neuratrophy -neuratrophia -neuratrophic -neuraxial -neuraxis -neuraxitis -neuraxon -neuraxone -neuraxons -neurectasy -neurectasia -neurectasis -neurectome -neurectomy -neurectomic -neurectopy -neurectopia -neurenteric -neurepithelium -neurergic -neurexairesis -neurhypnology -neurhypnotist -neuriatry -neuric -neuridine -neurilema -neurilematic -neurilemma -neurilemmal -neurilemmatic -neurilemmatous -neurilemmitis -neurility -neurin -neurine -neurines -neurinoma -neurinomas -neurinomata -neurypnology -neurypnological -neurypnologist -neurism -neuristor -neurite -neuritic -neuritics -neuritides -neuritis -neuritises -neuro- -neuroactive -neuroanatomy -neuroanatomic -neuroanatomical -neuroanatomist -neuroanotomy -neurobiology -neurobiological -neurobiologist -neurobiotactic -neurobiotaxis -neuroblast -neuroblastic -neuroblastoma -neurocanal -neurocardiac -neurocele -neurocelian -neurocental -neurocentral -neurocentrum -neurochemical -neurochemist -neurochemistry -neurochitin -neurochondrite -neurochord -neurochorioretinitis -neurocirculator -neurocirculatory -neurocyte -neurocity -neurocytoma -neuroclonic -neurocoel -neurocoele -neurocoelian -neurocrine -neurocrinism -neurodegenerative -neurodendrite -neurodendron -neurodermatitis -neurodermatosis -neurodermitis -neurodiagnosis -neurodynamic -neurodynia -neuroelectricity -neuroembryology -neuroembryological -neuroendocrine -neuroendocrinology -neuroepidermal -neuroepithelial -neuroepithelium -neurofibril -neurofibrilla -neurofibrillae -neurofibrillar -neurofibrillary -neurofibroma -neurofibromatosis -neurofil -neuroganglion -neurogastralgia -neurogastric -neurogenesis -neurogenetic -neurogenic -neurogenically -neurogenous -neuroglandular -neuroglia -neurogliac -neuroglial -neurogliar -neuroglic -neuroglioma -neurogliosis -neurogram -neurogrammic -neurography -neurographic -neurohypnology -neurohypnotic -neurohypnotism -neurohypophyseal -neurohypophysial -neurohypophysis -neurohistology -neurohormonal -neurohormone -neurohumor -neurohumoral -neuroid -neurokeratin -neurokyme -neurol -neurolemma -neuroleptanalgesia -neuroleptanalgesic -neuroleptic -neuroleptoanalgesia -neurolymph -neurolysis -neurolite -neurolytic -neurology -neurologic -neurological -neurologically -neurologies -neurologist -neurologists -neurologize -neurologized -neuroma -neuromalacia -neuromalakia -neuromas -neuromast -neuromastic -neuromata -neuromatosis -neuromatous -neuromere -neuromerism -neuromerous -neuromyelitis -neuromyic -neuromimesis -neuromimetic -neuromotor -neuromuscular -neuromusculature -neuron -neuronal -neurone -neurones -neuronic -neuronym -neuronymy -neuronism -neuronist -neuronophagy -neuronophagia -neurons -neuron's -neuroparalysis -neuroparalytic -neuropath -neuropathy -neuropathic -neuropathical -neuropathically -neuropathies -neuropathist -neuropathology -neuropathological -neuropathologist -Neurope -neurophagy -neuropharmacology -neuropharmacologic -neuropharmacological -neuropharmacologist -neurophil -neurophile -neurophilic -neurophysiology -neurophysiologic -neurophysiological -neurophysiologically -neurophysiologist -neuropil -neuropile -neuroplasm -neuroplasmatic -neuroplasmic -neuroplasty -neuroplexus -neuropod -neuropodial -neuropodium -neuropodous -neuropore -neuropsych -neuropsychiatry -neuropsychiatric -neuropsychiatrically -neuropsychiatrist -neuropsychic -neuropsychical -neuropsychology -neuropsychological -neuropsychologist -neuropsychopathy -neuropsychopathic -neuropsychosis -neuropter -Neuroptera -neuropteran -Neuropteris -neuropterist -neuropteroid -Neuropteroidea -neuropterology -neuropterological -neuropteron -neuropterous -neuroretinitis -neurorrhaphy -Neurorthoptera -neurorthopteran -neurorthopterous -neurosal -neurosarcoma -neuroscience -neuroscientist -neurosclerosis -neurosecretion -neurosecretory -neurosensory -neuroses -neurosynapse -neurosyphilis -neurosis -neuroskeletal -neuroskeleton -neurosome -neurospasm -neurospast -neurospongium -neurospora -neurosthenia -neurosurgeon -neurosurgeons -neurosurgery -neurosurgeries -neurosurgical -neurosuture -neurotendinous -neurotension -neurotherapeutics -neurotherapy -neurotherapist -neurothlipsis -neurotic -neurotically -neuroticism -neuroticize -neurotics -neurotization -neurotome -neurotomy -neurotomical -neurotomist -neurotomize -neurotonic -neurotoxia -neurotoxic -neurotoxicity -neurotoxicities -neurotoxin -neurotransmission -neurotransmitter -neurotransmitters -neurotripsy -neurotrophy -neurotrophic -neurotropy -neurotropic -neurotropism -neurovaccination -neurovaccine -neurovascular -neurovisceral -neurual -neurula -neurulae -neurulas -Neusatz -Neuss -neustic -neuston -neustonic -neustons -Neustria -Neustrian -neut -neut. -neuter -neutercane -neuterdom -neutered -neutering -neuterly -neuterlike -neuterness -neuters -neutral -neutralise -neutralism -neutralist -neutralistic -neutralists -neutrality -neutralities -neutralization -neutralizations -neutralize -neutralized -neutralizer -neutralizers -neutralizes -neutralizing -neutrally -neutralness -neutrals -neutral-tinted -neutretto -neutrettos -neutria -neutrino -neutrinos -neutrino's -neutro- -neutroceptive -neutroceptor -neutroclusion -Neutrodyne -neutrologistic -neutron -neutrons -neutropassive -neutropenia -neutrophil -neutrophile -neutrophilia -neutrophilic -neutrophilous -neutrophils -neutrosphere -Nev -Nev. -Neva -Nevada -Nevadan -nevadans -nevadians -nevadite -Nevai -nevat -Neve -Neveda -nevel -nevell -neven -never -never-ceasing -never-ceasingly -never-certain -never-changing -never-conquered -never-constant -never-daunted -never-dead -never-dietree -never-dying -never-ended -never-ending -never-endingly -never-endingness -never-fading -never-failing -Neverland -never-lasting -nevermass -nevermind -nevermore -never-needed -neverness -never-never -Never-Never-land -never-quenching -never-ready -never-resting -Nevers -never-say-die -never-satisfied -never-setting -never-shaken -never-silent -Neversink -never-sleeping -never-smiling -never-stable -never-strike -never-swerving -never-tamed -neverthelater -nevertheless -never-tiring -never-to-be-equaled -never-trodden -never-twinkling -never-vacant -never-varied -never-varying -never-waning -never-wearied -never-winking -never-withering -neves -nevi -nevyanskite -Neviim -Nevil -Nevile -Neville -Nevin -Nevins -Nevis -Nevisdale -Nevlin -nevo -nevoy -nevoid -Nevome -Nevsa -Nevski -nevus -New -new-admitted -new-apparel -Newar -Newari -Newark -Newark-on-Trent -new-array -new-awaked -new-begotten -Newberg -Newbery -newberyite -Newberry -Newby -Newbill -new-bladed -new-bloomed -new-blown -Newbold -newborn -new-born -newbornness -newborns -new-built -Newburg -Newburgh -Newbury -Newburyport -newcal -Newcastle -Newcastle-under-Lyme -Newcastle-upon-Tyne -Newchwang -new-coined -Newcomb -Newcombe -newcome -new-come -Newcomen -Newcomer -newcomers -newcomer's -Newcomerstown -new-create -new-cut -new-day -Newel -Newell -newel-post -newels -newelty -newer -newest -new-fallen -newfangle -newfangled -newfangledism -newfangledly -newfangledness -newfanglement -newfangleness -new-fashion -newfashioned -new-fashioned -Newfeld -Newfie -newfish -new-fledged -newfound -new-found -Newfoundland -Newfoundlander -new-front -new-furbish -new-furnish -Newgate -newground -new-grown -Newhall -Newham -Newhaven -Newhouse -Newichawanoc -newie -new-year -newies -newing -newings -newish -Newkirk -new-laid -Newland -newlandite -newly -newlight -new-light -Newlin -newline -newlines -newlings -newlins -newly-rich -newlywed -newlyweds -Newlon -new-looking -new-made -Newman -Newmanise -Newmanised -Newmanising -Newmanism -Newmanite -Newmanize -Newmanized -Newmanizing -Newmann -Newmark -Newmarket -new-mint -new-minted -new-mintedness -new-model -new-modeler -newmown -new-mown -new-name -newness -newnesses -new-people -Newport -new-rich -new-rigged -new-risen -NEWS -newsagent -newsbeat -newsbill -newsboard -newsboat -newsboy -newsboys -newsbreak -newscast -newscaster -newscasters -newscasting -newscasts -newsdealer -newsdealers -new-set -newsful -newsgirl -newsgirls -news-greedy -newsgroup -new-shaped -newshawk -newshen -newshound -newsy -newsie -newsier -newsies -newsiest -newsiness -newsless -newslessness -newsletter -news-letter -newsletters -newsmagazine -newsmagazines -news-making -newsman -news-man -newsmanmen -newsmen -newsmonger -newsmongery -newsmongering -Newsom -newspaper -newspaperdom -newspaperese -newspapery -newspaperish -newspaperized -newspaperman -newspapermen -newspapers -newspaper's -newspaperwoman -newspaperwomen -newspeak -newspeaks -newsprint -newsprints -new-sprung -new-spun -newsreader -newsreel -newsreels -newsroom -newsrooms -news-seeking -newssheet -news-sheet -newsstand -newsstands -newstand -newstands -newsteller -newsvendor -Newsweek -newswoman -newswomen -newsworthy -newsworthiness -newswriter -news-writer -newswriting -NEWT -newtake -New-Testament -Newton -Newtonabbey -Newtonian -Newtonianism -Newtonic -Newtonist -newtonite -newton-meter -newtons -newts -new-written -new-wrought -nexal -Nexo -NEXRAD -NEXT -next-beside -nextdoor -next-door -nextly -nextness -nexum -nexus -nexuses -NF -NFC -NFD -NFFE -NFL -NFPA -NFR -NFS -NFT -NFU -NFWI -NG -NGA -ngai -ngaio -Ngala -n'gana -Nganhwei -ngapi -Ngbaka -NGC -NGk -NGO -Ngoko -ngoma -Nguyen -ngultrum -Nguni -ngwee -NH -NHA -nhan -Nheengatu -NHG -NHI -NHL -NHLBI -NHR -NHS -NI -NY -NIA -NYA -Niabi -Nyac -niacin -niacinamide -niacins -Nyack -Niagara -Niagaran -niagra -Nyaya -niais -niaiserie -Nial -nyala -nialamide -nyalas -Niall -Niamey -Niam-niam -Nyamwezi -Niangua -Nyanja -Niantic -nyanza -Niarada -Niarchos -Nias -nyas -Nyasa -Nyasaland -Niasese -Nyassa -niata -nib -nibbana -nibbed -nibber -nibby -nibby-jibby -nibbing -nibble -nybble -nibbled -nibbler -nibblers -nibbles -nybbles -nibbling -nibblingly -nybblize -Nibbs -Nibelung -Nibelungenlied -Nibelungs -Nyberg -niblic -niblick -niblicks -niblike -Niblungs -nibong -nibs -nibsome -nibung -NIC -NYC -Nica -nicad -nicads -Nicaea -Nicaean -Nicaragua -Nicaraguan -nicaraguans -Nicarao -Nicasio -niccolic -niccoliferous -niccolite -Niccolo -niccolous -NICE -niceish -nicely -niceling -Nicene -nice-nelly -nice-Nellie -nice-Nellyism -niceness -nicenesses -Nicenian -Nicenist -nicer -nicesome -nicest -Nicetas -nicety -niceties -nicetish -Niceville -Nich -nichael -Nichani -niche -niched -nichelino -nicher -niches -nichevo -Nichy -nichil -niching -Nichol -Nichola -Nicholas -Nicholasville -Nichole -Nicholl -Nicholle -Nicholls -Nichols -Nicholson -Nicholville -Nichrome -nicht -nychthemer -nychthemeral -nychthemeron -nichts -nici -Nicias -Nicippe -Nick -nickar -nick-eared -nicked -Nickey -nickeys -nickel -nickelage -nickelbloom -nickeled -nyckelharpa -nickelic -nickeliferous -nickeline -nickeling -nickelise -nickelised -nickelising -nickelization -nickelize -nickelized -nickelizing -nickelled -nickellike -nickelling -nickelodeon -nickelodeons -nickelous -nickel-plate -nickel-plated -nickels -nickel's -Nickelsen -Nickelsville -nickeltype -nicker -nickered -nickery -nickering -nickerpecker -nickers -Nickerson -nicker-tree -Nicki -Nicky -Nickie -Nickieben -nicking -Nicklaus -nickle -nickled -Nickles -nickling -nicknack -nick-nack -nicknacks -nickname -nicknameable -nicknamed -nicknamee -nicknameless -nicknamer -nicknames -nicknaming -Nickneven -Nicko -Nickola -Nickolai -Nickolas -Nickolaus -nickpoint -nickpot -Nicks -nickstick -Nicktown -nickum -NICMOS -Nico -Nicobar -Nicobarese -Nicodemite -Nicodemus -Nicol -Nicola -Nicolai -Nicolay -nicolayite -Nicolais -Nicolaitan -Nicolaitanism -Nicolas -Nicolau -Nicolaus -Nicole -Nicolea -Nicolella -Nicolet -Nicolette -Nicoli -Nicolina -Nicoline -Nicolis -Nicolle -Nicollet -nicolo -nicols -Nicolson -Nicomachean -Nicosia -Nicostratus -nicotia -nicotian -Nicotiana -nicotianin -nicotic -nicotin -nicotina -nicotinamide -nicotine -nicotinean -nicotined -nicotineless -nicotines -nicotinian -nicotinic -nicotinise -nicotinised -nicotinising -nicotinism -nicotinize -nicotinized -nicotinizing -nicotins -nicotism -nicotize -Nyctaginaceae -nyctaginaceous -Nyctaginia -nyctalgia -nyctalope -nyctalopy -nyctalopia -nyctalopic -nyctalops -Nyctanthes -nictate -nictated -nictates -nictating -nictation -Nyctea -Nyctereutes -nycteribiid -Nycteribiidae -Nycteridae -nycterine -Nycteris -Nycteus -Nictheroy -nycti- -Nycticorax -Nyctimene -Nyctimus -nyctinasty -nyctinastic -nyctipelagic -Nyctipithecinae -nyctipithecine -Nyctipithecus -nictitant -nictitate -nictitated -nictitates -nictitating -nictitation -nyctitropic -nyctitropism -nycto- -nyctophobia -nycturia -Nicut -nid -Nida -nidal -nidamental -nidana -nidary -Nidaros -nidation -nidatory -nidder -niddering -niddick -niddicock -niddy-noddy -niddle -niddle-noddle -nide -nided -nidering -niderings -nides -nidge -nidget -nidgety -nidgets -Nidhug -nidi -Nidia -Nydia -nidicolous -nidify -nidificant -nidificate -nidificated -nidificating -nidification -nidificational -nidified -nidifier -nidifies -nidifying -nidifugous -niding -nidiot -nid-nod -nidology -nidologist -nidor -Nidorf -nidorose -nidorosity -nidorous -nidorulent -nidudi -nidulant -Nidularia -Nidulariaceae -nidulariaceous -Nidulariales -nidulate -nidulation -niduli -nidulus -nidus -niduses -Nye -Nieberg -Niebuhr -niece -nieceless -nieces -niece's -nieceship -Niederosterreich -Niedersachsen -Niehaus -Niel -Niela -niellated -nielled -nielli -niellist -niellists -niello -nielloed -nielloing -niellos -Niels -Nielsen -Nielson -Nielsville -Nyeman -Niemen -Niemler -Niemoeller -niepa -Niepce -Nier -Nierembergia -Nyerere -Nierman -Nierstein -Niersteiner -Nies -nieshout -nyet -Nietzsche -Nietzschean -Nietzscheanism -Nietzscheism -nieve -Nievelt -nieves -nieveta -nievie-nievie-nick-nack -nievling -nife -nifesima -niff -niffer -niffered -niffering -niffers -niffy-naffy -niff-naff -niff-naffy -nific -nifle -Niflheim -Niflhel -nifling -nifty -niftier -nifties -niftiest -niftily -niftiness -NIFTP -NIG -Nigel -Nigella -Niger -Niger-Congo -Nigeria -Nigerian -nigerians -niggard -niggarded -niggarding -niggardise -niggardised -niggardising -niggardize -niggardized -niggardizing -niggardly -niggardliness -niggardlinesses -niggardling -niggardness -niggards -nigged -nigger -niggerdom -niggered -niggerfish -niggerfishes -niggergoose -niggerhead -niggery -niggerish -niggerism -niggerling -niggers -niggertoe -niggerweed -nigget -nigging -niggle -niggled -niggler -nigglers -niggles -niggly -niggling -nigglingly -nigglings -niggot -niggra -niggun -nigh -nigh-destroyed -nigh-drowned -nigh-ebbed -nighed -nigher -nighest -nighhand -nigh-hand -nighing -nighish -nighly -nigh-naked -nighness -nighnesses -nigh-past -nighs -nigh-spent -night -night-bird -night-black -night-blind -night-blindness -night-blooming -night-blowing -night-born -night-bringing -nightcap -night-cap -nightcapped -nightcaps -night-cellar -night-cheering -nightchurr -night-clad -night-cloaked -nightclothes -night-clothes -nightclub -night-club -night-clubbed -nightclubber -night-clubbing -nightclubs -night-contending -night-cradled -nightcrawler -nightcrawlers -night-crow -night-dark -night-decking -night-dispersing -nightdress -night-dress -nighted -night-eyed -night-enshrouded -nighter -nightery -nighters -nightertale -nightfall -night-fallen -nightfalls -night-faring -night-feeding -night-filled -nightfish -night-fly -night-flying -nightflit -night-flowering -night-folded -night-foundered -nightfowl -nightgale -night-gaping -nightglass -night-glass -nightglow -nightgown -night-gown -nightgowns -night-grown -night-hag -night-haired -night-haunted -nighthawk -night-hawk -nighthawks -night-heron -night-hid -nighty -nightie -nighties -nightime -nighting -Nightingale -nightingales -nightingale's -nightingalize -nighty-night -nightish -nightjar -nightjars -nightless -nightlessness -nightly -nightlife -night-light -nightlike -nightlong -night-long -nightman -night-mantled -nightmare -nightmares -nightmare's -nightmary -nightmarish -nightmarishly -nightmarishness -nightmen -night-night -night-overtaken -night-owl -night-piece -night-prowling -night-rail -night-raven -nightrider -nightriders -nightriding -night-riding -night-robbing -night-robe -night-robed -night-rolling -nights -night-scented -night-season -nightshade -nightshades -night-shift -nightshine -night-shining -nightshirt -night-shirt -nightshirts -nightside -night-singing -night-spell -nightspot -nightspots -nightstand -nightstands -nightstick -nightstock -nightstool -night-straying -night-struck -night-swaying -night-swift -night-swollen -nighttide -night-tide -nighttime -night-time -nighttimes -night-traveling -night-tripping -night-veiled -nightwake -nightwalk -nightwalker -night-walker -nightwalkers -nightwalking -night-wandering -night-warbling -nightward -nightwards -night-watch -night-watching -night-watchman -nightwear -nightwork -night-work -nightworker -nignay -nignye -nigori -nigranilin -nigraniline -nigre -nigrescence -nigrescent -nigresceous -nigrescite -nigricant -nigrify -nigrification -nigrified -nigrifies -nigrifying -nigrine -Nigritian -nigrities -nigritude -nigritudinous -nigromancer -nigrosin -nigrosine -nigrosins -nigrous -nigua -NIH -Nyhagen -Nihal -Nihhi -Nihi -nihil -nihilianism -nihilianistic -nihilify -nihilification -Nihilism -nihilisms -nihilist -nihilistic -nihilistically -nihilists -nihility -nihilitic -nihilities -nihilobstat -nihils -nihilum -Nihon -niyama -niyanda -Niigata -Niihau -niyoga -nijholt -Nijinsky -Nijmegen -nik -Nika -Nikaniki -Nikaria -nikau -Nike -Nikeno -Nikep -nikethamide -Niki -Nikisch -Nikiski -Nikita -Nikki -Nikky -Nikkie -Nikko -nikkud -nikkudim -Niklaus -niklesite -Niko -Nykobing -Nikola -Nikolai -Nikolayer -Nikolayev -Nikolainkaupunki -Nikolaos -Nikolas -Nikolaus -Nikoletta -Nikolia -Nikolos -Nikolski -Nikon -Nikos -niku-bori -Nil -Nila -Niland -nylast -Nile -Niles -nilgai -nilgais -nilgau -nylgau -nilgaus -nilghai -nylghai -nilghais -nylghais -nilghau -nylghau -nilghaus -nylghaus -nill -Nilla -nilled -nilling -nilly-willy -nills -Nilometer -Nilometric -nylon -nylons -Nilo-Saharan -Niloscope -Nilot -Nilote -Nilotes -Nilotic -Nilous -nilpotent -Nils -Nilson -Nilsson -Nilus -Nilwood -NIM -nimb -nimbated -nimbed -nimbi -NIMBY -nimbiferous -nimbification -nimble -nimblebrained -nimble-eyed -nimble-feathered -nimble-fingered -nimble-footed -nimble-headed -nimble-heeled -nimble-jointed -nimble-mouthed -nimble-moving -nimbleness -nimblenesses -nimble-pinioned -nimbler -nimble-shifting -nimble-spirited -nimblest -nimble-stepping -nimble-tongued -nimble-toothed -nimble-winged -nimblewit -nimble-witted -nimble-wittedness -nimbly -nimbose -nimbosity -nimbostratus -Nimbus -nimbused -nimbuses -Nimes -Nimesh -NIMH -nimiety -nimieties -nymil -niminy -niminy-piminy -niminy-piminyism -niminy-pimininess -nimious -Nimitz -Nimkish -nimmed -nimmer -nimming -nimmy-pimmy -Nimocks -nymph -nympha -nymphae -Nymphaea -Nymphaeaceae -nymphaeaceous -nymphaeum -nymphal -nymphalid -Nymphalidae -Nymphalinae -nymphaline -nympheal -nymphean -nymphet -nymphets -nymphette -nympheum -nymphic -nymphical -nymphid -nymphine -Nymphipara -nymphiparous -nymphish -nymphitis -nymphly -nymphlike -nymphlin -nympho -Nymphoides -nympholepsy -nympholepsia -nympholepsies -nympholept -nympholeptic -nymphomania -nymphomaniac -nymphomaniacal -nymphomaniacs -nymphomanias -nymphon -Nymphonacea -nymphos -nymphosis -nymphotomy -nymphs -nymphwise -n'importe -Nimrod -Nimrodian -Nimrodic -Nimrodical -Nimrodize -nimrods -Nimrud -NIMS -nimshi -nymss -Nimwegen -Nymwegen -Nina -nincom -nincompoop -nincompoopery -nincompoophood -nincompoopish -nincompoops -nincum -Ninde -Nine -nine-banded -ninebark -ninebarks -nine-circled -nine-cornered -nine-day -nine-eyed -nine-eyes -ninefold -nine-foot -nine-hole -nineholes -nine-holes -nine-hour -nine-year -nine-inch -nine-jointed -nine-killer -nine-knot -nine-lived -nine-mile -nine-part -ninepegs -ninepence -ninepences -ninepenny -ninepennies -ninepin -ninepins -nine-ply -nine-point -nine-pound -nine-pounder -nine-power -nines -ninescore -nine-share -nine-shilling -nine-syllabled -nine-spined -nine-spot -nine-spotted -nine-tailed -nineted -nineteen -nineteenfold -nineteens -nineteenth -nineteenthly -nineteenths -nine-tenths -ninety -ninety-acre -ninety-day -ninety-eight -ninety-eighth -nineties -ninetieth -ninetieths -ninety-fifth -ninety-first -ninety-five -ninetyfold -ninety-four -ninety-fourth -ninety-hour -ninetyish -ninetyknot -ninety-mile -ninety-nine -ninety-ninth -ninety-one -ninety-second -ninety-seven -ninety-seventh -ninety-six -ninety-sixth -ninety-third -ninety-three -ninety-ton -ninety-two -ninety-word -Ninetta -Ninette -Nineveh -Ninevite -Ninevitical -Ninevitish -nine-voiced -nine-word -NYNEX -ning -Ningal -Ningirsu -ningle -Ningpo -Ningsia -ninhydrin -Ninhursag -Ninib -Ninigino-Mikoto -Ninilchik -ninja -ninjas -Ninkur -Ninlil -Ninmah -Ninnekah -Ninnetta -Ninnette -ninny -ninnies -ninnyhammer -ninny-hammer -ninnyish -ninnyism -ninnyship -ninnywatch -Nino -Ninon -ninons -Nynorsk -Ninos -Ninox -Ninsar -Ninshubur -ninth -ninth-born -ninth-built -ninth-class -ninth-formed -ninth-hand -ninth-known -ninthly -ninth-mentioned -ninth-rate -ninths -ninth-told -Nintoo -nintu -Ninurta -Ninus -ninut -niobate -Niobe -Niobean -niobic -Niobid -Niobite -niobium -niobiums -niobous -Niobrara -niog -Niolo -Nyoro -Niort -Niota -Niotaze -Nip -NYP -nipa -nipas -nipcheese -Nipha -niphablepsia -nyphomania -niphotyphlosis -Nipigon -Nipissing -Niple -Nipmuc -Nipmuck -Nipmucks -Nipomo -nipped -nipper -nipperkin -nippers -nipperty-tipperty -nippy -nippier -nippiest -nippily -nippiness -nipping -nippingly -nippitate -nippitaty -nippitato -nippitatum -nipple -nippled -nippleless -nipples -nipplewort -nippling -Nippon -Nipponese -Nipponism -nipponium -Nipponize -Nippur -nips -nipter -nip-up -Niquiran -Nyquist -NIR -NIRA -NIRC -Nyregyhza -Nireus -niris -nirles -nirls -Nirmalin -nirmanakaya -Nyroca -nirvana -nirvanas -nirvanic -NIS -Nisa -Nysa -Nisaean -Nisan -nisberry -Nisbet -NISC -NISDN -NYSE -Nisei -Nyseides -niseis -Nisen -NYSERNET -Nish -Nishada -Nishapur -Nishi -nishiki -Nishinomiya -nisi -nisi-prius -nisnas -NISO -nispero -Nisqualli -Nissa -Nyssa -Nyssaceae -Nissan -Nisse -Nissensohn -Nissy -Nissie -Nisswa -NIST -nystagmic -nystagmus -nystatin -Nistru -Nisula -nisus -nit -Nita -nitch -nitchevo -nitchie -nitchies -Nitella -nitency -nitent -nitently -Niter -niter-blue -niterbush -nitered -nitery -niteries -nitering -Niteroi -niters -nit-grass -nither -nithing -nitid -nitidous -nitidulid -Nitidulidae -Nitin -nitinol -nitinols -nito -niton -nitons -nitos -nitpick -nitpicked -nitpicker -nitpickers -nitpicking -nit-picking -nitpicks -nitr- -Nitralloy -nitramin -nitramine -nitramino -nitranilic -nitraniline -nitrate -nitrated -nitrates -nitratine -nitrating -nitration -nitrator -nitrators -nitre -nitred -nitres -Nitrian -nitriary -nitriaries -nitric -nitrid -nitridation -nitride -nitrided -nitrides -nitriding -nitridization -nitridize -nitrids -nitrifaction -nitriferous -nitrify -nitrifiable -nitrification -nitrified -nitrifier -nitrifies -nitrifying -nitril -nitryl -nytril -nitrile -nitriles -nitrils -Nitriot -nitriry -nitrite -nitrites -nitritoid -Nitro -nitro- -nitroalizarin -nitroamine -nitroanilin -nitroaniline -Nitrobacter -nitrobacteria -Nitrobacteriaceae -Nitrobacterieae -nitrobacterium -nitrobarite -nitrobenzene -nitrobenzol -nitrobenzole -nitrocalcite -nitrocellulose -nitro-cellulose -nitrocellulosic -nitrochloroform -nitrocotton -nitro-cotton -nitroform -nitrofuran -nitrogelatin -nitrogelatine -nitrogen -nitrogenate -nitrogenation -nitrogen-fixing -nitrogen-free -nitrogenic -nitrogenisation -nitrogenise -nitrogenised -nitrogenising -nitrogenization -nitrogenize -nitrogenized -nitrogenizing -nitrogenous -nitrogens -nitroglycerin -nitroglycerine -nitroglycerines -nitroglycerins -nitroglucose -nitro-hydro-carbon -nitrohydrochloric -nitrolamine -nitrolic -nitrolim -nitrolime -nitromagnesite -nitromannite -nitromannitol -nitromersol -nitrometer -nitromethane -nitrometric -nitromuriate -nitromuriatic -nitronaphthalene -nitroparaffin -nitrophenol -nitrophile -nitrophilous -nitrophyte -nitrophytic -nitroprussiate -nitroprussic -nitroprusside -nitros -nitros- -nitrosamin -nitrosamine -nitrosate -nitrosify -nitrosification -nitrosyl -nitrosyls -nitrosylsulfuric -nitrosylsulphuric -nitrosite -nitroso -nitroso- -nitrosoamine -nitrosobacteria -nitrosobacterium -nitrosochloride -Nitrosococcus -Nitrosomonas -nitrososulphuric -nitrostarch -nitrosulphate -nitrosulphonic -nitrosulphuric -nitrosurea -nitrotoluene -nitrotoluol -nitrotrichloromethane -nitrous -nitroxyl -nits -nitta -Nittayuma -nitter -Nitti -nitty -nittier -nittiest -nitty-gritty -nitwit -nitwits -nitwitted -Nitz -Nitza -Nitzschia -Nitzschiaceae -NIU -NYU -Niuan -Niue -Niuean -Niv -nival -nivation -niveau -nivellate -nivellation -nivellator -nivellization -Niven -nivenite -niveous -Nivernais -nivernaise -Niverville -nivicolous -Nivose -nivosity -Nivre -Niwot -nix -Nyx -Nixa -nixe -nixed -nixer -nixes -nixy -Nixie -nixies -nixing -nyxis -Nixon -nixtamal -Nizam -nizamat -nizamate -nizamates -nizams -nizamut -nizey -nizy -NJ -njave -Njord -Njorth -NKGB -Nkkelost -Nkomo -Nkrumah -NKS -NKVD -NL -NLC -NLDP -NLF -NLLST -NLM -NLP -NLRB -NLS -NM -NMC -NMI -NMOS -NMR -NMS -NMU -Nnamdi -NNE -nnethermore -NNP -NNTP -NNW -NNX -No -noa -NOAA -no-account -Noach -Noachian -Noachic -Noachical -Noachite -Noachiun -Noah -Noahic -Noak -Noakes -Noam -Noami -noance -NOAO -Noatun -nob -nobackspace -no-ball -nobatch -nobber -nobby -nobbier -nobbiest -nobbily -nobble -nobbled -nobbler -nobblers -nobbles -nobbling -nobbut -Nobe -no-being -Nobel -Nobelist -nobelists -nobelium -nobeliums -Nobell -Noby -Nobie -Nobile -nobiliary -nobilify -nobilitate -nobilitation -nobility -nobilities -nobis -Noble -noble-born -Nobleboro -noble-couraged -nobled -noble-featured -noble-fronted -noblehearted -nobleheartedly -nobleheartedness -nobley -noble-looking -nobleman -noblemanly -noblemem -noblemen -noble-minded -noble-mindedly -noble-mindedness -noble-natured -nobleness -noblenesses -nobler -nobles -noble-spirited -noblesse -noblesses -noblest -Noblesville -noble-tempered -Nobleton -noble-visaged -noblewoman -noblewomen -nobly -noblify -nobling -nobody -nobodyd -nobody'd -nobodies -nobodyness -nobs -Nobusuke -nobut -NOC -nocake -Nocardia -nocardiosis -Nocatee -nocence -nocent -nocerite -nocht -Nochur -nociassociation -nociceptive -nociceptor -nociperception -nociperceptive -nocive -nock -nocked -nockerl -nocket -nocking -nocks -nocktat -Nocona -noconfirm -no-count -NOCS -noct- -noctambulant -noctambulate -noctambulation -noctambule -noctambulism -noctambulist -noctambulistic -noctambulous -Nocten -nocti- -noctidial -noctidiurnal -noctiferous -noctiflorous -Noctilio -Noctilionidae -Noctiluca -noctilucae -noctilucal -noctilucan -noctilucence -noctilucent -Noctilucidae -noctilucin -noctilucine -noctilucous -noctiluminous -noctiluscence -noctimania -noctipotent -noctis -noctivagant -noctivagation -noctivagous -noctograph -Noctor -noctovision -noctua -Noctuae -noctuid -Noctuidae -noctuideous -noctuidous -noctuids -noctuiform -noctule -noctules -noctuoid -nocturia -nocturn -nocturnal -nocturnality -nocturnally -nocturne -nocturnes -nocturns -nocuity -nocument -nocumentum -nocuous -nocuously -nocuousness -Nod -Nodab -Nodababus -nodal -nodality -nodalities -nodally -Nodarse -nodated -Nodaway -nodded -nodder -nodders -noddi -noddy -noddies -nodding -noddingly -noddle -noddlebone -noddled -noddles -noddling -node -noded -no-deposit -no-deposit-no-return -nodes -node's -nodi -nodi- -nodiak -nodical -nodicorn -nodiferous -nodiflorous -nodiform -Nodosaria -nodosarian -nodosariform -nodosarine -nodosaur -nodose -nodosity -nodosities -nodous -nods -nod's -nodular -nodulate -nodulated -nodulation -nodule -noduled -nodules -noduli -nodulize -nodulized -nodulizing -nodulose -nodulous -nodulus -nodus -Noe -noebcd -noecho -noegenesis -noegenetic -Noel -Noelani -Noelyn -Noell -Noella -Noelle -Noellyn -noels -noematachograph -noematachometer -noematachometic -noematical -Noemi -Noemon -noerror -noes -noesis -noesises -Noetherian -noetian -Noetic -noetics -noex -noexecute -no-fault -nofile -Nofretete -nog -nogada -Nogai -nogaku -Nogal -Nogales -Nogas -nogg -nogged -noggen -Noggerath -noggin -nogging -noggings -noggins -noggs -noghead -nogheaded -no-go -no-good -nogs -Noguchi -Noh -nohes -nohex -no-hit -no-hitter -no-hoper -nohow -Nohuntsik -noy -noyade -noyaded -noyades -noyading -noyance -noyant -noyau -NoibN -noibwood -Noyes -noyful -noil -noilage -noiler -noily -noils -noint -nointment -Noyon -noyous -noir -noire -noires -noisance -noise -noised -noiseful -noisefully -noisefulness -noiseless -noiselessly -noiselessness -noisemake -noisemaker -noisemakers -noisemaking -noiseproof -noises -noisette -noisy -noisier -noisiest -noisily -noisiness -noisinesses -noising -noisome -noisomely -noisomeness -noix -Nokesville -Nokomis -nokta -nol -Nola -Nolan -Nolana -Noland -Nolanville -Nolascan -nold -Nolde -Nole -Nolensville -Noleta -Noletta -Noli -Nolie -noli-me-tangere -Nolita -nolition -Nolitta -Noll -nolle -nolleity -nollepros -Nolly -Nollie -noll-kholl -nolo -nolos -nol-pros -nol-prossed -nol-prossing -nolt -Nolte -Noludar -nom -nom. -Noma -nomad -nomade -nomades -nomadian -nomadic -nomadical -nomadically -Nomadidae -nomadise -nomadism -nomadisms -nomadization -nomadize -nomads -Noman -nomancy -no-man's-land -nomap -nomarch -nomarchy -nomarchies -nomarchs -Nomarthra -nomarthral -nomas -nombles -nombril -nombrils -Nome -Nomeidae -nomen -nomenclate -nomenclative -nomenclator -nomenclatory -nomenclatorial -nomenclatorship -nomenclatural -nomenclature -nomenclatures -nomenclaturist -nomes -Nomeus -Nomi -nomy -nomial -nomic -nomina -nominable -nominal -nominalism -nominalist -nominalistic -nominalistical -nominalistically -nominality -nominalize -nominalized -nominalizing -nominally -nominalness -nominals -nominate -nominated -nominately -nominates -nominating -nomination -nominations -nominatival -nominative -nominatively -nominatives -nominator -nominators -nominatrix -nominature -nomine -nominee -nomineeism -nominees -nominy -nomism -nomisma -nomismata -nomisms -nomistic -nomnem -nomo- -nomocanon -nomocracy -nomogeny -nomogenist -nomogenous -nomogram -nomograms -nomograph -nomographer -nomography -nomographic -nomographical -nomographically -nomographies -nomoi -nomology -nomological -nomologies -nomologist -nomopelmous -nomophylax -nomophyllous -nomos -nomotheism -nomothete -nomothetes -nomothetic -nomothetical -noms -Nomura -non -non- -Nona -nona- -nonabandonment -nonabatable -nonabdication -nonabdicative -nonabiding -nonabidingly -nonabidingness -nonability -non-ability -nonabjuration -nonabjuratory -nonabjurer -nonabolition -nonabortive -nonabortively -nonabortiveness -nonabrasive -nonabrasively -nonabrasiveness -nonabridgable -nonabridgment -nonabrogable -nonabsentation -nonabsolute -nonabsolutely -nonabsoluteness -nonabsolution -nonabsolutist -nonabsolutistic -nonabsolutistically -nonabsorbability -nonabsorbable -nonabsorbency -nonabsorbent -nonabsorbents -nonabsorbing -nonabsorption -nonabsorptive -nonabstainer -nonabstainers -nonabstaining -nonabstemious -nonabstemiously -nonabstemiousness -nonabstention -nonabstract -nonabstracted -nonabstractedly -nonabstractedness -nonabstractly -nonabstractness -nonabusive -nonabusively -nonabusiveness -nonacademic -nonacademical -nonacademically -nonacademicalness -nonacademics -nonaccedence -nonacceding -nonacceleration -nonaccelerative -nonacceleratory -nonaccent -nonaccented -nonaccenting -nonaccentual -nonaccentually -nonacceptance -nonacceptant -nonacceptation -nonaccepted -nonaccess -non-access -nonaccession -nonaccessory -nonaccessories -nonaccidental -nonaccidentally -nonaccidentalness -nonaccommodable -nonaccommodably -nonaccommodating -nonaccommodatingly -nonaccommodatingness -nonaccompanying -nonaccompaniment -nonaccomplishment -nonaccord -nonaccordant -nonaccordantly -nonaccredited -nonaccretion -nonaccretive -nonaccrued -nonaccruing -nonacculturated -nonaccumulating -nonaccumulation -nonaccumulative -nonaccumulatively -nonaccumulativeness -nonaccusing -nonachievement -nonacid -nonacidic -nonacidity -nonacids -nonacknowledgment -nonacosane -nonacoustic -nonacoustical -nonacoustically -nonacquaintance -nonacquaintanceship -nonacquiescence -nonacquiescent -nonacquiescently -nonacquiescing -nonacquisitive -nonacquisitively -nonacquisitiveness -nonacquittal -nonact -nonactinic -nonactinically -nonaction -nonactionable -nonactionably -nonactivation -nonactivator -nonactive -nonactives -nonactivity -nonactivities -nonactor -nonactual -nonactuality -nonactualities -nonactualness -nonacuity -nonaculeate -nonaculeated -nonacute -nonacutely -nonacuteness -nonadaptability -nonadaptable -nonadaptableness -nonadaptabness -nonadaptation -nonadaptational -nonadapter -nonadapting -nonadaptive -nonadaptor -nonaddict -nonaddicted -nonaddicting -nonaddictive -nonadditive -nonadditivity -nonaddress -nonaddresser -nonadecane -nonadept -nonadeptly -nonadeptness -nonadherence -nonadherences -nonadherent -nonadhering -nonadhesion -nonadhesive -nonadhesively -nonadhesiveness -nonadjacency -nonadjacencies -nonadjacent -nonadjacently -nonadjectival -nonadjectivally -nonadjectively -nonadjoining -nonadjournment -nonadjudicated -nonadjudication -nonadjudicative -nonadjudicatively -nonadjunctive -nonadjunctively -nonadjustability -nonadjustable -nonadjustably -nonadjuster -nonadjustive -nonadjustment -nonadjustor -nonadministrable -nonadministrant -nonadministrative -nonadministratively -nonadmiring -nonadmissibility -nonadmissible -nonadmissibleness -nonadmissibly -nonadmission -nonadmissions -nonadmissive -nonadmitted -nonadmittedly -nonadoptable -nonadopter -nonadoption -Nonadorantes -nonadorner -nonadorning -nonadornment -nonadult -nonadults -nonadvancement -nonadvantageous -nonadvantageously -nonadvantageousness -nonadventitious -nonadventitiously -nonadventitiousness -nonadventurous -nonadventurously -nonadventurousness -nonadverbial -nonadverbially -nonadvertence -nonadvertency -nonadvocacy -nonadvocate -nonaerated -nonaerating -nonaerobiotic -nonaesthetic -nonaesthetical -nonaesthetically -nonaffectation -nonaffecting -nonaffectingly -nonaffection -nonaffective -nonaffiliated -nonaffiliating -nonaffiliation -nonaffilliated -nonaffinity -nonaffinities -nonaffinitive -nonaffirmance -nonaffirmation -Non-african -nonage -nonagenary -nonagenarian -nonagenarians -nonagenaries -nonagency -nonagent -nonages -nonagesimal -nonagglomerative -nonagglutinant -nonagglutinating -nonagglutinative -nonagglutinator -nonaggression -nonaggressions -nonaggressive -nonagon -nonagons -nonagrarian -nonagreeable -nonagreement -nonagricultural -Nonah -nonahydrate -nonaid -nonair -nonalarmist -nonalcohol -nonalcoholic -non-Alexandrian -nonalgebraic -nonalgebraical -nonalgebraically -nonalien -nonalienating -nonalienation -nonalignable -nonaligned -nonalignment -nonalined -nonalinement -nonalkaloid -nonalkaloidal -nonallegation -nonallegiance -nonallegoric -nonallegorical -nonallegorically -nonallelic -nonallergenic -nonalliterated -nonalliterative -nonalliteratively -nonalliterativeness -nonallotment -nonalluvial -nonalphabetic -nonalphabetical -nonalphabetically -nonalternating -nonaltruistic -nonaltruistically -nonaluminous -nonamalgamable -nonamazedness -nonamazement -nonambiguity -nonambiguities -nonambiguous -nonambitious -nonambitiously -nonambitiousness -nonambulaties -nonambulatory -nonamenability -nonamenable -nonamenableness -nonamenably -nonamendable -nonamendment -Non-american -nonamino -nonamorous -nonamorously -nonamorousness -nonamotion -nonamphibian -nonamphibious -nonamphibiously -nonamphibiousness -nonamputation -nonanachronistic -nonanachronistically -nonanachronous -nonanachronously -nonanaemic -nonanalytic -nonanalytical -nonanalytically -nonanalyzable -nonanalyzed -nonanalogy -nonanalogic -nonanalogical -nonanalogically -nonanalogicalness -nonanalogous -nonanalogously -nonanalogousness -nonanaphoric -nonanaphthene -nonanarchic -nonanarchical -nonanarchically -nonanarchistic -nonanatomic -nonanatomical -nonanatomically -nonancestral -nonancestrally -nonane -nonanemic -nonanesthetic -nonanesthetized -nonangelic -Non-anglican -nonangling -nonanguished -nonanimal -nonanimality -nonanimate -nonanimated -nonanimating -nonanimatingly -nonanimation -nonannexable -nonannexation -nonannihilability -nonannihilable -nonannouncement -nonannuitant -nonannulment -nonanoic -nonanonymity -nonanonymousness -nonanswer -nonantagonistic -nonantagonistically -nonanticipation -nonanticipative -nonanticipatively -nonanticipatory -nonanticipatorily -nonantigenic -Nonantum -nonaphasiac -nonaphasic -nonaphetic -nonaphoristic -nonaphoristically -nonapologetic -nonapologetical -nonapologetically -nonapostatizing -nonapostolic -nonapostolical -nonapostolically -nonapparent -nonapparently -nonapparentness -nonapparitional -nonappealability -nonappealable -nonappealing -nonappealingly -nonappealingness -nonappearance -non-appearance -nonappearances -nonappearer -nonappearing -nonappeasability -nonappeasable -nonappeasing -nonappellate -nonappendance -nonappendant -nonappendence -nonappendent -nonappendicular -nonapply -nonapplicability -nonapplicable -nonapplicableness -nonapplicabness -nonapplication -nonapplicative -nonapplicatory -nonappointive -nonappointment -nonapportionable -nonapportionment -nonapposable -nonappraisal -nonappreciation -nonappreciative -nonappreciatively -nonappreciativeness -nonapprehensibility -nonapprehensible -nonapprehension -nonapprehensive -nonapproachability -nonapproachable -nonapproachableness -nonapproachabness -nonappropriable -nonappropriation -nonappropriative -nonapproval -nonaquatic -nonaqueous -Non-arab -Non-arabic -nonarbitrable -nonarbitrary -nonarbitrarily -nonarbitrariness -Non-archimedean -nonarching -nonarchitectonic -nonarchitectural -nonarchitecturally -nonarcing -nonarcking -non-arcking -nonargentiferous -nonarguable -nonargumentative -nonargumentatively -nonargumentativeness -nonary -non-Aryan -nonaries -nonaristocratic -nonaristocratical -nonaristocratically -nonarithmetic -nonarithmetical -nonarithmetically -nonarmament -nonarmigerous -nonaromatic -nonaromatically -nonarraignment -nonarresting -nonarrival -nonarrogance -nonarrogancy -nonarsenic -nonarsenical -nonart -nonarterial -nonartesian -nonarticulate -nonarticulated -nonarticulately -nonarticulateness -nonarticulation -nonarticulative -nonartistic -nonartistical -nonartistically -nonarts -nonas -nonasbestine -nonascendance -nonascendancy -nonascendant -nonascendantly -nonascendence -nonascendency -nonascendent -nonascendently -nonascertainable -nonascertainableness -nonascertainably -nonascertaining -nonascertainment -nonascetic -nonascetical -nonascetically -nonasceticism -nonascription -nonaseptic -nonaseptically -non-Asian -Non-asiatic -nonaspersion -nonasphalt -nonaspirate -nonaspirated -nonaspirating -nonaspiratory -nonaspiring -nonassault -nonassent -nonassentation -nonassented -nonassenting -nonassertion -nonassertive -nonassertively -nonassertiveness -nonassessability -nonassessable -nonassessment -nonassignability -nonassignabilty -nonassignable -nonassignably -nonassigned -nonassignment -nonassimilability -nonassimilable -nonassimilating -nonassimilation -nonassimilative -nonassimilatory -nonassistance -nonassistant -nonassister -nonassistive -nonassociability -nonassociable -nonassociation -nonassociational -nonassociative -nonassociatively -nonassonance -nonassonant -nonassortment -nonassumed -non-assumpsit -nonassumption -nonassumptive -nonassurance -nonasthmatic -nonasthmatically -nonastonishment -nonastral -nonastringency -nonastringent -nonastringently -nonastronomic -nonastronomical -nonastronomically -nonatheistic -nonatheistical -nonatheistically -nonathlete -nonathletic -nonathletically -nonatmospheric -nonatmospherical -nonatmospherically -nonatomic -nonatomical -nonatomically -nonatonement -nonatrophic -nonatrophied -nonattached -nonattachment -nonattacking -nonattainability -nonattainable -nonattainment -nonattendance -non-attendance -nonattendant -nonattention -nonattestation -Non-attic -nonattribution -nonattributive -nonattributively -nonattributiveness -nonaudibility -nonaudible -nonaudibleness -nonaudibly -nonaugmentative -nonauricular -nonauriferous -nonauthentic -nonauthentical -nonauthenticated -nonauthentication -nonauthenticity -nonauthoritative -nonauthoritatively -nonauthoritativeness -nonautobiographical -nonautobiographically -nonautomated -nonautomatic -nonautomatically -nonautomotive -nonautonomous -nonautonomously -nonautonomousness -nonavailability -nonavoidable -nonavoidableness -nonavoidably -nonavoidance -nonaxiomatic -nonaxiomatical -nonaxiomatically -nonazotized -nonbachelor -nonbacterial -nonbacterially -nonbailable -nonballoting -nonbanishment -nonbank -nonbankable -Non-bantu -Non-baptist -nonbarbarian -nonbarbaric -nonbarbarous -nonbarbarously -nonbarbarousness -nonbaronial -nonbase -nonbasement -nonbasic -nonbasing -nonbathing -nonbearded -nonbearing -nonbeatific -nonbeatifically -nonbeauty -nonbeauties -nonbeing -nonbeings -nonbelief -nonbeliever -nonbelievers -nonbelieving -nonbelievingly -nonbelligerency -nonbelligerent -nonbelligerents -nonbending -nonbeneficed -nonbeneficence -nonbeneficent -nonbeneficently -nonbeneficial -nonbeneficially -nonbeneficialness -nonbenevolence -nonbenevolent -nonbenevolently -nonbetrayal -nonbeverage -nonbiased -Non-biblical -non-Biblically -nonbibulous -nonbibulously -nonbibulousness -nonbigoted -nonbigotedly -nonbilabiate -nonbilious -nonbiliously -nonbiliousness -nonbillable -nonbinding -nonbindingly -nonbindingness -nonbinomial -nonbiodegradable -nonbiographical -nonbiographically -nonbiological -nonbiologically -nonbiting -nonbitter -nonbituminous -nonblack -nonblamable -nonblamableness -nonblamably -nonblameful -nonblamefully -nonblamefulness -nonblameless -nonblank -nonblasphemy -nonblasphemies -nonblasphemous -nonblasphemously -nonblasphemousness -nonbleach -nonbleeding -nonblended -nonblending -nonblinding -nonblindingly -nonblockaded -nonblocking -nonblooded -nonblooming -nonblundering -nonblunderingly -nonboaster -nonboasting -nonboastingly -nonbody -nonbodily -nonboding -nonbodingly -nonboiling -Non-bolshevik -non-Bolshevism -Non-bolshevist -non-Bolshevistic -nonbook -nonbookish -nonbookishly -nonbookishness -nonbooks -nonborrower -nonborrowing -nonbotanic -nonbotanical -nonbotanically -nonbourgeois -non-Brahmanic -Non-brahmanical -non-Brahminic -non-Brahminical -nonbrand -nonbranded -nonbreach -nonbreaching -nonbreakable -nonbreeder -nonbreeding -nonbristled -Non-british -nonbromidic -nonbroody -nonbroodiness -nonbrooding -nonbrowser -nonbrowsing -nonbrutal -nonbrutally -Non-buddhist -non-Buddhistic -nonbudding -nonbuying -nonbulbaceous -nonbulbar -nonbulbiferous -nonbulbous -nonbulkhead -nonbuoyancy -nonbuoyant -nonbuoyantly -nonburdensome -nonburdensomely -nonburdensomeness -nonbureaucratic -nonbureaucratically -nonburgage -nonburgess -nonburnable -nonburning -nonbursting -nonbusy -nonbusily -nonbusiness -nonbusyness -nonbuttressed -noncabinet -noncadenced -noncadent -noncaffeine -noncaffeinic -noncaking -Noncalcarea -noncalcareous -noncalcified -noncalculable -noncalculably -noncalculating -noncalculative -noncallability -noncallable -noncaloric -noncalumniating -noncalumnious -Non-calvinist -non-Calvinistic -non-Calvinistical -noncancelable -noncancellable -noncancellation -noncancerous -noncandescence -noncandescent -noncandescently -noncandidate -noncandidates -noncannibalistic -noncannibalistically -noncannonical -noncanonical -noncanonization -noncanvassing -noncapillary -noncapillaries -noncapillarity -noncapital -noncapitalist -noncapitalistic -noncapitalistically -noncapitalized -noncapitulation -noncapricious -noncapriciously -noncapriciousness -noncapsizable -noncaptious -noncaptiously -noncaptiousness -noncapture -noncarbohydrate -noncarbolic -noncarbon -noncarbonate -noncarbonated -noncareer -noncarnivorous -noncarnivorously -noncarnivorousness -noncarrier -noncartelized -noncash -noncaste -noncastigating -noncastigation -noncasual -noncasuistic -noncasuistical -noncasuistically -noncataclysmal -noncataclysmic -noncatalytic -noncatalytically -noncataloguer -noncatarrhal -noncatastrophic -noncatechistic -noncatechistical -noncatechizable -noncategorical -noncategorically -noncategoricalness -noncathartic -noncathartical -noncathedral -Non-catholic -noncatholicity -Non-caucasian -non-Caucasic -non-Caucasoid -noncausable -noncausal -noncausality -noncausally -noncausation -noncausative -noncausatively -noncausativeness -noncaustic -noncaustically -nonce -noncelebration -noncelestial -noncelestially -noncellular -noncellulosic -noncellulous -Non-celtic -noncensored -noncensorious -noncensoriously -noncensoriousness -noncensurable -noncensurableness -noncensurably -noncensus -noncentral -noncentrally -noncereal -noncerebral -nonceremonial -nonceremonially -nonceremonious -nonceremoniously -nonceremoniousness -noncertain -noncertainty -noncertainties -noncertification -noncertified -noncertitude -nonces -nonchafing -nonchalance -nonchalances -nonchalant -nonchalantly -nonchalantness -nonchalky -nonchallenger -nonchallenging -nonchampion -nonchangeable -nonchangeableness -nonchangeably -nonchanging -nonchanneled -nonchannelized -nonchaotic -nonchaotically -noncharacteristic -noncharacteristically -noncharacterized -nonchargeable -noncharismatic -noncharitable -noncharitableness -noncharitably -nonchastisement -nonchastity -Non-chaucerian -nonchemical -nonchemist -nonchimeric -nonchimerical -nonchimerically -Non-chinese -nonchivalric -nonchivalrous -nonchivalrously -nonchivalrousness -nonchokable -nonchokebore -noncholeric -Non-christian -nonchromatic -nonchromatically -nonchromosomal -nonchronic -nonchronical -nonchronically -nonchronological -nonchurch -nonchurched -nonchurchgoer -nonchurchgoers -nonchurchgoing -noncyclic -noncyclical -noncyclically -nonciliate -nonciliated -Non-cymric -noncircuit -noncircuital -noncircuited -noncircuitous -noncircuitously -noncircuitousness -noncircular -noncircularly -noncirculating -noncirculation -noncirculatory -noncircumscribed -noncircumscriptive -noncircumspect -noncircumspectly -noncircumspectness -noncircumstantial -noncircumstantially -noncircumvallated -noncitable -noncitation -nonciteable -noncitizen -noncitizens -noncivilian -noncivilizable -noncivilized -nonclaim -non-claim -nonclaimable -nonclamorous -nonclamorously -nonclarifiable -nonclarification -nonclarified -nonclass -nonclassable -nonclassic -nonclassical -nonclassicality -nonclassically -nonclassifiable -nonclassification -nonclassified -nonclastic -nonclearance -noncleistogamic -noncleistogamous -nonclergyable -nonclerical -nonclerically -nonclerics -nonclimactic -nonclimactical -nonclimbable -nonclimbing -noncling -nonclinging -nonclinical -nonclinically -noncloistered -nonclose -nonclosely -nonclosure -nonclotting -noncoagulability -noncoagulable -noncoagulating -noncoagulation -noncoagulative -noncoalescence -noncoalescent -noncoalescing -noncock -noncodified -noncoercible -noncoercion -noncoercive -noncoercively -noncoerciveness -noncogency -noncogent -noncogently -noncognate -noncognition -noncognitive -noncognizable -noncognizably -noncognizance -noncognizant -noncognizantly -noncohabitation -noncoherence -noncoherency -noncoherent -noncoherently -noncohesion -noncohesive -noncohesively -noncohesiveness -noncoinage -noncoincidence -noncoincident -noncoincidental -noncoincidentally -noncoking -non-coll -noncollaboration -noncollaborative -noncollapsable -noncollapsibility -noncollapsible -noncollectable -noncollectible -noncollection -noncollective -noncollectively -noncollectivistic -noncollegiate -non-collegiate -noncollinear -noncolloid -noncolloidal -noncollusion -noncollusive -noncollusively -noncollusiveness -noncolonial -noncolonially -noncolor -noncolorability -noncolorable -noncolorableness -noncolorably -noncoloring -noncom -non-com -noncombat -noncombatant -non-combatant -noncombatants -noncombative -noncombination -noncombinative -noncombining -noncombustibility -noncombustible -noncombustibles -noncombustion -noncombustive -noncome -noncomic -noncomical -noncomicality -noncomically -noncomicalness -noncoming -noncommemoration -noncommemorational -noncommemorative -noncommemoratively -noncommemoratory -noncommencement -noncommendable -noncommendableness -noncommendably -noncommendatory -noncommensurable -noncommercial -noncommerciality -noncommercially -noncommiseration -noncommiserative -noncommiseratively -noncommissioned -non-commissioned -noncommitally -noncommitment -noncommittal -non-committal -noncommittalism -noncommittally -noncommittalness -noncommitted -noncommodious -noncommodiously -noncommodiousness -noncommonable -noncommorancy -noncommunal -noncommunally -noncommunicability -noncommunicable -noncommunicableness -noncommunicant -non-communicant -noncommunicating -noncommunication -noncommunicative -noncommunicatively -noncommunicativeness -noncommunion -noncommunist -noncommunistic -noncommunistical -noncommunistically -noncommunists -noncommutative -noncompearance -noncompensable -noncompensating -noncompensation -noncompensative -noncompensatory -noncompetency -noncompetent -noncompetently -noncompeting -noncompetitive -noncompetitively -noncompetitiveness -noncomplacence -noncomplacency -noncomplacencies -noncomplacent -noncomplacently -noncomplaisance -noncomplaisant -noncomplaisantly -noncompletion -noncompliance -noncompliances -noncompliant -noncomplicity -noncomplicities -noncomplying -noncompos -noncomposes -noncomposite -noncompositely -noncompositeness -noncomposure -noncompound -noncompoundable -noncompounder -non-compounder -noncomprehendible -noncomprehending -noncomprehendingly -noncomprehensible -noncomprehensiblely -noncomprehension -noncomprehensive -noncomprehensively -noncomprehensiveness -noncompressibility -noncompressible -noncompression -noncompressive -noncompressively -noncompromised -noncompromising -noncompulsion -noncompulsive -noncompulsively -noncompulsory -noncompulsorily -noncompulsoriness -noncomputation -noncoms -noncon -non-con -nonconcealment -nonconceiving -nonconcentrated -nonconcentratiness -nonconcentration -nonconcentrative -nonconcentrativeness -nonconcentric -nonconcentrical -nonconcentrically -nonconcentricity -nonconception -nonconceptual -nonconceptually -nonconcern -nonconcession -nonconcessive -nonconciliating -nonconciliatory -nonconcision -nonconcludency -nonconcludent -nonconcluding -nonconclusion -nonconclusive -nonconclusively -nonconclusiveness -nonconcordant -nonconcordantly -nonconcur -nonconcurred -nonconcurrence -nonconcurrency -nonconcurrent -nonconcurrently -nonconcurring -noncondemnation -noncondensable -noncondensation -noncondensed -noncondensibility -noncondensible -noncondensing -non-condensing -noncondescending -noncondescendingly -noncondescendingness -noncondescension -noncondiment -noncondimental -nonconditional -nonconditioned -noncondonation -nonconduciness -nonconducive -nonconduciveness -nonconductibility -nonconductible -nonconducting -nonconduction -nonconductive -nonconductor -non-conductor -nonconductors -nonconfederate -nonconfederation -nonconferrable -nonconfession -nonconficient -nonconfidence -nonconfident -nonconfidential -nonconfidentiality -nonconfidentially -nonconfidentialness -nonconfidently -nonconfiding -nonconfined -nonconfinement -nonconfining -nonconfirmation -nonconfirmative -nonconfirmatory -nonconfirming -nonconfiscable -nonconfiscation -nonconfiscatory -nonconfitent -nonconflicting -nonconflictive -nonconform -nonconformability -nonconformable -nonconformably -nonconformance -nonconformer -nonconformest -nonconforming -nonconformism -Nonconformist -nonconformistical -nonconformistically -nonconformists -nonconformitant -nonconformity -nonconfrontation -nonconfutation -noncongealing -noncongenital -noncongestion -noncongestive -noncongratulatory -Non-congregational -noncongregative -Non-congressional -noncongruence -noncongruency -noncongruent -noncongruently -noncongruity -noncongruities -noncongruous -noncongruously -noncongruousness -nonconjecturable -nonconjecturably -nonconjectural -nonconjugal -nonconjugality -nonconjugally -nonconjugate -nonconjugation -nonconjunction -nonconjunctive -nonconjunctively -nonconnection -nonconnective -nonconnectively -nonconnectivity -nonconnivance -nonconnivence -nonconnotative -nonconnotatively -nonconnubial -nonconnubiality -nonconnubially -nonconscientious -nonconscientiously -nonconscientiousness -nonconscious -nonconsciously -nonconsciousness -nonconscriptable -nonconscription -nonconsecration -nonconsecutive -nonconsecutively -nonconsecutiveness -nonconsent -nonconsenting -nonconsequence -nonconsequent -nonconsequential -nonconsequentiality -nonconsequentially -nonconsequentialness -nonconservation -nonconservational -nonconservative -nonconserving -nonconsideration -nonconsignment -nonconsistorial -nonconsolable -nonconsolidation -nonconsoling -nonconsolingly -nonconsonance -nonconsonant -nonconsorting -nonconspirator -nonconspiratorial -nonconspiring -nonconstant -nonconstituent -nonconstituted -nonconstitutional -nonconstraining -nonconstraint -nonconstricted -nonconstricting -nonconstrictive -nonconstruability -nonconstruable -nonconstruction -nonconstructive -nonconstructively -nonconstructiveness -nonconsular -nonconsultative -nonconsultatory -nonconsumable -nonconsuming -nonconsummation -nonconsumption -nonconsumptive -nonconsumptively -nonconsumptiveness -noncontact -noncontagion -non-contagion -noncontagionist -noncontagious -noncontagiously -noncontagiousness -noncontaminable -noncontamination -noncontaminative -noncontemplative -noncontemplatively -noncontemplativeness -noncontemporaneous -noncontemporaneously -noncontemporaneousness -noncontemporary -noncontemporaries -noncontemptibility -noncontemptible -noncontemptibleness -noncontemptibly -noncontemptuous -noncontemptuously -noncontemptuousness -noncontending -noncontent -non-content -noncontention -noncontentious -noncontentiously -nonconterminal -nonconterminous -nonconterminously -noncontestable -noncontestation -noncontextual -noncontextually -noncontiguity -noncontiguities -noncontiguous -noncontiguously -noncontiguousness -noncontinence -noncontinency -noncontinental -noncontingency -noncontingent -noncontingently -noncontinuable -noncontinuably -noncontinuance -noncontinuation -noncontinuity -noncontinuous -noncontinuously -noncontinuousness -noncontraband -noncontrabands -noncontraction -noncontractual -noncontradiction -non-contradiction -noncontradictory -noncontradictories -noncontrariety -noncontrarieties -noncontrastable -noncontrastive -noncontributable -noncontributing -noncontribution -noncontributive -noncontributively -noncontributiveness -noncontributor -noncontributory -noncontributories -noncontrivance -noncontrollable -noncontrollablely -noncontrollably -noncontrolled -noncontrolling -noncontroversial -noncontroversially -noncontumacious -noncontumaciously -noncontumaciousness -nonconvective -nonconvectively -nonconveyance -nonconvenable -nonconventional -nonconventionally -nonconvergence -nonconvergency -nonconvergent -nonconvergently -nonconverging -nonconversable -nonconversableness -nonconversably -nonconversance -nonconversancy -nonconversant -nonconversantly -nonconversational -nonconversationally -nonconversion -nonconvertibility -nonconvertible -nonconvertibleness -nonconvertibly -nonconviction -nonconvivial -nonconviviality -nonconvivially -non-co-operate -noncooperating -noncooperation -nonco-operation -non-co-operation -noncooperationist -nonco-operationist -non-co-operationist -noncooperative -non-co-operative -noncooperator -nonco-operator -non-co-operator -noncoordinating -noncoordination -non-co-ordination -noncopying -noncoplanar -noncoring -noncorporate -noncorporately -noncorporation -noncorporative -noncorporeal -noncorporeality -noncorpuscular -noncorrection -noncorrectional -noncorrective -noncorrectively -noncorrelating -noncorrelation -noncorrelative -noncorrelatively -noncorrespondence -noncorrespondent -noncorresponding -noncorrespondingly -noncorroborating -noncorroboration -noncorroborative -noncorroboratively -noncorroboratory -noncorrodible -noncorroding -noncorrosive -noncorrosively -noncorrosiveness -noncorrupt -noncorrupter -noncorruptibility -noncorruptible -noncorruptibleness -noncorruptibly -noncorruption -noncorruptive -noncorruptly -noncorruptness -noncortical -noncortically -noncosmic -noncosmically -noncosmopolitan -noncosmopolitanism -noncosmopolite -noncosmopolitism -noncostraight -noncotyledonal -noncotyledonary -noncotyledonous -noncottager -noncounteractive -noncounterfeit -noncounty -noncovetous -noncovetously -noncovetousness -noncranking -noncreation -noncreative -noncreatively -noncreativeness -noncreativity -noncredence -noncredent -noncredibility -noncredible -noncredibleness -noncredibly -noncredit -noncreditable -noncreditableness -noncreditably -noncreditor -noncredulous -noncredulously -noncredulousness -noncreeping -noncrenate -noncrenated -noncretaceous -noncrime -noncriminal -noncriminality -noncriminally -noncrinoid -noncryptic -noncryptical -noncryptically -noncrystalline -noncrystallizable -noncrystallized -noncrystallizing -noncritical -noncritically -noncriticalness -noncriticizing -noncrossover -noncrucial -noncrucially -noncruciform -noncruciformly -noncrusading -noncrushability -noncrushable -noncrustaceous -nonculminating -nonculmination -nonculpability -nonculpable -nonculpableness -nonculpably -noncultivability -noncultivable -noncultivatable -noncultivated -noncultivation -noncultural -nonculturally -nonculture -noncultured -noncumbrous -noncumbrously -noncumbrousness -noncumulative -noncumulatively -noncurantist -noncurative -noncuratively -noncurativeness -noncurdling -noncuriosity -noncurious -noncuriously -noncuriousness -noncurling -noncurrency -noncurrent -noncurrently -noncursive -noncursively -noncurtailing -noncurtailment -noncuspidate -noncuspidated -noncustodial -noncustomary -noncustomarily -noncutting -Non-czech -non-Czechoslovakian -nonda -nondairy -Nondalton -nondamageable -nondamaging -nondamagingly -nondamnation -nondance -nondancer -nondangerous -nondangerously -nondangerousness -Non-danish -nondark -Non-darwinian -nondatival -nondeadly -nondeaf -nondeafened -nondeafening -nondeafeningly -nondeafly -nondeafness -nondealer -nondebatable -nondebater -nondebating -nondebilitating -nondebilitation -nondebilitative -nondebtor -nondecadence -nondecadency -nondecadent -nondecayed -nondecaying -nondecalcification -nondecalcified -nondecane -nondecasyllabic -nondecasyllable -nondecatoic -nondeceit -nondeceivable -nondeceiving -nondeceleration -nondeception -nondeceptive -nondeceptively -nondeceptiveness -Nondeciduata -nondeciduate -nondeciduous -nondeciduously -nondeciduousness -nondecision -nondecisive -nondecisively -nondecisiveness -nondeclamatory -nondeclarant -nondeclaration -nondeclarative -nondeclaratively -nondeclaratory -nondeclarer -nondeclivitous -nondecomposition -nondecorated -nondecoration -nondecorative -nondecorous -nondecorously -nondecorousness -nondecreasing -nondedication -nondedicative -nondedicatory -nondeducible -nondeductibility -nondeductible -nondeduction -nondeductive -nondeductively -nondeep -nondefalcation -nondefamatory -nondefaulting -nondefeasance -nondefeasibility -nondefeasible -nondefeasibleness -nondefeasibness -nondefeat -nondefecting -nondefection -nondefective -nondefectively -nondefectiveness -nondefector -nondefendant -nondefense -nondefensibility -nondefensible -nondefensibleness -nondefensibly -nondefensive -nondefensively -nondefensiveness -nondeferable -nondeference -nondeferent -nondeferential -nondeferentially -nondeferrable -nondefiance -nondefiant -nondefiantly -nondefiantness -nondeficiency -nondeficiencies -nondeficient -nondeficiently -nondefilement -nondefiling -nondefinability -nondefinable -nondefinably -nondefined -nondefiner -nondefining -nondefinite -nondefinitely -nondefiniteness -nondefinition -nondefinitive -nondefinitively -nondefinitiveness -nondeflation -nondeflationary -nondeflected -nondeflection -nondeflective -nondeforestation -nondeformation -nondeformed -nondeformity -nondeformities -nondefunct -nondegeneracy -nondegeneracies -nondegenerate -nondegenerately -nondegenerateness -nondegeneration -nondegenerative -nondegerming -nondegradable -nondegradation -nondegrading -nondegreased -nondehiscent -nondeist -nondeistic -nondeistical -nondeistically -nondelegable -nondelegate -nondelegation -nondeleterious -nondeleteriously -nondeleteriousness -nondeliberate -nondeliberately -nondeliberateness -nondeliberation -nondelicate -nondelicately -nondelicateness -nondelineation -nondelineative -nondelinquent -nondeliquescence -nondeliquescent -nondelirious -nondeliriously -nondeliriousness -nondeliverance -nondelivery -nondeliveries -nondeluded -nondeluding -nondelusive -nondemand -nondemanding -nondemise -nondemobilization -nondemocracy -nondemocracies -nondemocratic -nondemocratical -nondemocratically -nondemolition -nondemonstrability -nondemonstrable -nondemonstrableness -nondemonstrably -nondemonstration -nondemonstrative -nondemonstratively -nondemonstrativeness -nondendroid -nondendroidal -nondenial -nondenominational -nondenominationalism -nondenominationally -nondenotative -nondenotatively -nondense -nondenseness -nondensity -nondenumerable -nondenunciating -nondenunciation -nondenunciative -nondenunciatory -nondeodorant -nondeodorizing -nondepartmental -nondepartmentally -nondeparture -nondependability -nondependable -nondependableness -nondependably -nondependance -nondependancy -nondependancies -nondependence -nondependency -nondependencies -nondependent -nondepletion -nondepletive -nondepletory -nondeportation -nondeported -nondeposition -nondepositor -nondepravation -nondepraved -nondepravity -nondepravities -nondeprecating -nondeprecatingly -nondeprecative -nondeprecatively -nondeprecatory -nondeprecatorily -nondepreciable -nondepreciating -nondepreciation -nondepreciative -nondepreciatively -nondepreciatory -nondepressed -nondepressing -nondepressingly -nondepression -nondepressive -nondepressively -nondeprivable -nondeprivation -nonderelict -nonderisible -nonderisive -nonderivability -nonderivable -nonderivative -nonderivatively -nonderogation -nonderogative -nonderogatively -nonderogatory -nonderogatorily -nonderogatoriness -nondescribable -nondescript -nondescriptive -nondescriptively -nondescriptiveness -nondescriptly -nondesecration -nondesignate -nondesignative -nondesigned -nondesire -nondesirous -nondesistance -nondesistence -nondesisting -nondespotic -nondespotically -nondesquamative -nondestruction -nondestructive -nondestructively -nondestructiveness -nondesulfurization -nondesulfurized -nondesulphurized -nondetachability -nondetachable -nondetachment -nondetailed -nondetention -nondeterioration -nondeterminable -nondeterminacy -nondeterminant -nondeterminate -nondeterminately -nondetermination -nondeterminative -nondeterminatively -nondeterminativeness -nondeterminism -nondeterminist -nondeterministic -nondeterministically -nondeterrent -nondetest -nondetinet -nondetonating -nondetractive -nondetractively -nondetractory -nondetrimental -nondetrimentally -nondevelopable -nondeveloping -nondevelopment -nondevelopmental -nondevelopmentally -nondeviant -nondeviating -nondeviation -nondevious -nondeviously -nondeviousness -nondevotional -nondevotionally -nondevout -nondevoutly -nondevoutness -nondexterity -nondexterous -nondexterously -nondexterousness -nondextrous -nondiabetic -nondiabolic -nondiabolical -nondiabolically -nondiabolicalness -nondiagnosis -nondiagonal -nondiagonally -nondiagrammatic -nondiagrammatical -nondiagrammatically -nondialectal -nondialectally -nondialectic -nondialectical -nondialectically -nondialyzing -nondiametral -nondiametrally -nondiapausing -nondiaphanous -nondiaphanously -nondiaphanousness -nondiastasic -nondiastatic -nondiathermanous -nondiazotizable -nondichogamy -nondichogamic -nondichogamous -nondichotomous -nondichotomously -nondictation -nondictatorial -nondictatorially -nondictatorialness -nondictionary -nondidactic -nondidactically -nondietetic -nondietetically -nondieting -nondifferentation -nondifferentiable -nondifferentiation -nondifficult -nondiffidence -nondiffident -nondiffidently -nondiffractive -nondiffractively -nondiffractiveness -nondiffuse -nondiffused -nondiffusible -nondiffusibleness -nondiffusibly -nondiffusing -nondiffusion -nondigestibility -nondigestible -nondigestibleness -nondigestibly -nondigesting -nondigestion -nondigestive -nondilapidated -nondilatability -nondilatable -nondilation -nondiligence -nondiligent -nondiligently -nondilution -nondimensioned -nondiminishing -nondynamic -nondynamical -nondynamically -nondynastic -nondynastical -nondynastically -nondiocesan -nondiphtherial -nondiphtheric -nondiphtheritic -nondiphthongal -nondiplomacy -nondiplomatic -nondiplomatically -nondipterous -nondirection -nondirectional -nondirective -nondirigibility -nondirigible -nondisagreement -nondisappearing -nondisarmament -nondisastrous -nondisastrously -nondisastrousness -nondisbursable -nondisbursed -nondisbursement -nondiscerning -nondiscernment -nondischarging -nondisciplinable -nondisciplinary -nondisciplined -nondisciplining -nondisclaim -nondisclosure -nondiscontinuance -nondiscordant -nondiscountable -nondiscoverable -nondiscovery -nondiscoveries -nondiscretionary -nondiscriminating -nondiscriminatingly -nondiscrimination -nondiscriminations -nondiscriminative -nondiscriminatively -nondiscriminatory -nondiscursive -nondiscursively -nondiscursiveness -nondiscussion -nondiseased -nondisestablishment -nondisfigurement -nondisfranchised -nondisguised -nondisingenuous -nondisingenuously -nondisingenuousness -nondisintegrating -nondisintegration -nondisinterested -nondisjunct -nondisjunction -nondisjunctional -nondisjunctive -nondisjunctively -nondismemberment -nondismissal -nondisparaging -nondisparate -nondisparately -nondisparateness -nondisparity -nondisparities -nondispensable -nondispensation -nondispensational -nondispensible -nondyspeptic -nondyspeptical -nondyspeptically -nondispersal -nondispersion -nondispersive -nondisposable -nondisposal -nondisposed -nondisputatious -nondisputatiously -nondisputatiousness -nondisqualifying -nondisrupting -nondisruptingly -nondisruptive -nondissent -nondissenting -nondissidence -nondissident -nondissipated -nondissipatedly -nondissipatedness -nondissipative -nondissolution -nondissolving -nondistant -nondistillable -nondistillation -nondistinctive -nondistinguishable -nondistinguishableness -nondistinguishably -nondistinguished -nondistinguishing -nondistorted -nondistortedly -nondistortedness -nondistorting -nondistortingly -nondistortion -nondistortive -nondistracted -nondistractedly -nondistracting -nondistractingly -nondistractive -nondistribution -nondistributional -nondistributive -nondistributively -nondistributiveness -nondisturbance -nondisturbing -nondivergence -nondivergency -nondivergencies -nondivergent -nondivergently -nondiverging -nondiversification -nondividing -nondivinity -nondivinities -nondivisibility -nondivisible -nondivisiblity -nondivision -nondivisional -nondivisive -nondivisively -nondivisiveness -nondivorce -nondivorced -nondivulgence -nondivulging -nondo -nondoctrinaire -nondoctrinal -nondoctrinally -nondocumental -nondocumentary -nondocumentaries -nondogmatic -nondogmatical -nondogmatically -nondoing -nondomestic -nondomestically -nondomesticated -nondomesticating -nondominance -nondominant -nondominating -nondomination -nondomineering -nondonation -nondormant -nondoubtable -nondoubter -nondoubting -nondoubtingly -nondramatic -nondramatically -nondrying -nondrinkable -nondrinker -nondrinkers -nondrinking -nondriver -nondropsical -nondropsically -nondrug -Non-druid -nondruidic -nondruidical -nondualism -nondualistic -nondualistically -nonduality -nonductile -nonductility -nondumping -nonduplicating -nonduplication -nonduplicative -nonduplicity -nondurability -nondurable -nondurableness -nondurably -nondutiable -none -noneager -noneagerly -noneagerness -nonearning -noneastern -noneatable -nonebullience -nonebulliency -nonebullient -nonebulliently -noneccentric -noneccentrically -nonecclesiastic -nonecclesiastical -nonecclesiastically -nonechoic -noneclectic -noneclectically -noneclipsed -noneclipsing -nonecliptic -nonecliptical -nonecliptically -nonecompense -noneconomy -noneconomic -noneconomical -noneconomically -noneconomies -nonecstatic -nonecstatically -nonecumenic -nonecumenical -nonedibility -nonedible -nonedibleness -nonedibness -nonedified -noneditor -noneditorial -noneditorially -noneducable -noneducated -noneducation -noneducational -noneducationally -noneducative -noneducatory -noneffective -non-effective -noneffervescent -noneffervescently -noneffete -noneffetely -noneffeteness -nonefficacy -nonefficacious -nonefficaciously -nonefficiency -nonefficient -non-efficient -nonefficiently -noneffusion -noneffusive -noneffusively -noneffusiveness -Non-egyptian -Non-egyptologist -nonego -non-ego -nonegocentric -nonegoistic -nonegoistical -nonegoistically -nonegos -nonegotistic -nonegotistical -nonegotistically -nonegregious -nonegregiously -nonegregiousness -noneidetic -nonejaculatory -nonejecting -nonejection -nonejective -nonelaborate -nonelaborately -nonelaborateness -nonelaborating -nonelaborative -nonelastic -nonelastically -nonelasticity -nonelect -non-elect -nonelected -nonelection -nonelective -nonelectively -nonelectiveness -nonelector -nonelectric -non-electric -nonelectrical -nonelectrically -nonelectrification -nonelectrified -nonelectrized -nonelectrocution -nonelectrolyte -nonelectrolytic -nonelectronic -noneleemosynary -nonelemental -nonelementally -nonelementary -nonelevating -nonelevation -nonelicited -noneligibility -noneligible -noneligibly -nonelimination -noneliminative -noneliminatory -nonelite -nonelliptic -nonelliptical -nonelliptically -nonelongation -nonelopement -noneloquence -noneloquent -noneloquently -nonelucidating -nonelucidation -nonelucidative -nonelusive -nonelusively -nonelusiveness -nonemanant -nonemanating -nonemancipation -nonemancipative -nonembarkation -nonembellished -nonembellishing -nonembellishment -nonembezzlement -nonembryonal -nonembryonic -nonembryonically -nonemendable -nonemendation -nonemergence -nonemergent -nonemigrant -nonemigration -nonemission -nonemotional -nonemotionalism -nonemotionally -nonemotive -nonemotively -nonemotiveness -nonempathic -nonempathically -nonemphatic -nonemphatical -nonempiric -nonempirical -nonempirically -nonempiricism -nonemploying -nonemployment -nonempty -nonemulation -nonemulative -nonemulous -nonemulously -nonemulousness -nonenactment -nonencyclopaedic -nonencyclopedic -nonencyclopedical -nonenclosure -nonencroachment -nonendemic -nonendorsement -nonendowment -nonendurable -nonendurance -nonenduring -nonene -nonenemy -nonenemies -nonenergetic -nonenergetically -nonenergic -nonenervating -nonenforceability -nonenforceable -nonenforced -nonenforcedly -nonenforcement -nonenforcements -nonenforcing -nonengagement -nonengineering -Non-english -nonengrossing -nonengrossingly -nonenigmatic -nonenigmatical -nonenigmatically -nonenlightened -nonenlightening -nonenrolled -non-ens -nonent -nonentailed -nonenteric -nonenterprising -nonentertaining -nonentertainment -nonenthusiastic -nonenthusiastically -nonenticing -nonenticingly -nonentitative -nonentity -nonentities -nonentityism -nonentitive -nonentitize -nonentomologic -nonentomological -nonentrant -nonentreating -nonentreatingly -nonentres -nonentresse -nonentry -nonentries -nonenumerated -nonenumerative -nonenunciation -nonenunciative -nonenunciatory -nonenviable -nonenviableness -nonenviably -nonenvious -nonenviously -nonenviousness -nonenvironmental -nonenvironmentally -nonenzymic -nonephemeral -nonephemerally -nonepic -nonepical -nonepically -nonepicurean -nonepigrammatic -nonepigrammatically -nonepileptic -nonepiscopal -nonepiscopalian -non-Episcopalian -nonepiscopally -nonepisodic -nonepisodical -nonepisodically -nonepithelial -nonepochal -nonequability -nonequable -nonequableness -nonequably -nonequal -nonequalization -nonequalized -nonequalizing -nonequals -nonequation -nonequatorial -nonequatorially -nonequestrian -nonequilateral -nonequilaterally -nonequilibrium -nonequitable -nonequitably -nonequivalence -nonequivalency -nonequivalent -nonequivalently -nonequivalents -nonequivocal -nonequivocally -nonequivocating -noneradicable -noneradicative -nonerasure -nonerecting -nonerection -noneroded -nonerodent -noneroding -nonerosive -nonerotic -nonerotically -nonerrant -nonerrantly -nonerratic -nonerratically -nonerroneous -nonerroneously -nonerroneousness -nonerudite -noneruditely -noneruditeness -nonerudition -noneruption -noneruptive -nones -nonescape -none-so-pretty -none-so-pretties -nonesoteric -nonesoterically -nonespionage -nonespousal -nonessential -non-essential -nonessentials -nonestablishment -nonesthetic -nonesthetical -nonesthetically -nonestimable -nonestimableness -nonestimably -nonesuch -nonesuches -nonesurient -nonesuriently -nonet -noneternal -noneternally -noneternalness -noneternity -nonetheless -nonethereal -nonethereality -nonethereally -nonetherealness -nonethic -nonethical -nonethically -nonethicalness -nonethyl -nonethnic -nonethnical -nonethnically -nonethnologic -nonethnological -nonethnologically -nonets -nonetto -Non-euclidean -noneugenic -noneugenical -noneugenically -noneuphonious -noneuphoniously -noneuphoniousness -Non-european -nonevacuation -nonevadable -nonevadible -nonevading -nonevadingly -nonevaluation -nonevanescent -nonevanescently -nonevangelic -nonevangelical -nonevangelically -nonevaporable -nonevaporating -nonevaporation -nonevaporative -nonevasion -nonevasive -nonevasively -nonevasiveness -nonevent -nonevents -noneviction -nonevident -nonevidential -nonevil -nonevilly -nonevilness -nonevincible -nonevincive -nonevocative -nonevolutional -nonevolutionally -nonevolutionary -nonevolutionist -nonevolving -nonexactable -nonexacting -nonexactingly -nonexactingness -nonexaction -nonexaggerated -nonexaggeratedly -nonexaggerating -nonexaggeration -nonexaggerative -nonexaggeratory -nonexamination -nonexcavation -nonexcepted -nonexcepting -nonexceptional -nonexceptionally -nonexcerptible -nonexcessive -nonexcessively -nonexcessiveness -nonexchangeability -nonexchangeable -nonexcitable -nonexcitableness -nonexcitably -nonexcitative -nonexcitatory -nonexciting -nonexclamatory -nonexclusion -nonexclusive -nonexcommunicable -nonexculpable -nonexculpation -nonexculpatory -nonexcusable -nonexcusableness -nonexcusably -nonexecutable -nonexecution -nonexecutive -nonexemplary -nonexemplification -nonexemplificatior -nonexempt -nonexemption -nonexercisable -nonexercise -nonexerciser -nonexertion -nonexertive -nonexhausted -nonexhaustible -nonexhaustive -nonexhaustively -nonexhaustiveness -nonexhibition -nonexhibitionism -nonexhibitionistic -nonexhibitive -nonexhortation -nonexhortative -nonexhortatory -nonexigent -nonexigently -nonexistence -non-existence -nonexistences -nonexistent -non-existent -nonexistential -nonexistentialism -nonexistentially -nonexisting -nonexoneration -nonexotic -nonexotically -nonexpanded -nonexpanding -nonexpansibility -nonexpansible -nonexpansile -nonexpansion -nonexpansive -nonexpansively -nonexpansiveness -nonexpectant -nonexpectantly -nonexpectation -nonexpedience -nonexpediency -nonexpedient -nonexpediential -nonexpediently -nonexpeditious -nonexpeditiously -nonexpeditiousness -nonexpendable -nonexperience -nonexperienced -nonexperiential -nonexperientially -nonexperimental -nonexperimentally -nonexpert -nonexpiable -nonexpiation -nonexpiatory -nonexpiration -nonexpiry -nonexpiries -nonexpiring -nonexplainable -nonexplanative -nonexplanatory -nonexplicable -nonexplicative -nonexploitation -nonexplorative -nonexploratory -nonexplosive -nonexplosively -nonexplosiveness -nonexplosives -nonexponential -nonexponentially -nonexponible -nonexportable -nonexportation -nonexposure -nonexpressionistic -nonexpressive -nonexpressively -nonexpressiveness -nonexpulsion -nonexpulsive -nonextant -nonextempore -nonextended -nonextendible -nonextendibleness -nonextensibility -nonextensible -nonextensibleness -nonextensibness -nonextensile -nonextension -nonextensional -nonextensive -nonextensively -nonextensiveness -nonextenuating -nonextenuatingly -nonextenuative -nonextenuatory -nonexteriority -nonextermination -nonexterminative -nonexterminatory -nonexternal -nonexternality -nonexternalized -nonexternally -nonextinct -nonextinction -nonextinguishable -nonextinguished -nonextortion -nonextortive -nonextractable -nonextracted -nonextractible -nonextraction -nonextractive -nonextraditable -nonextradition -nonextraneous -nonextraneously -nonextraneousness -nonextreme -nonextricable -nonextricably -nonextrication -nonextrinsic -nonextrinsical -nonextrinsically -nonextrusive -nonexuberance -nonexuberancy -nonexuding -nonexultant -nonexultantly -nonexultation -nonfabulous -nonfacetious -nonfacetiously -nonfacetiousness -nonfacial -nonfacility -nonfacing -nonfact -nonfactious -nonfactiously -nonfactiousness -nonfactitious -nonfactitiously -nonfactitiousness -nonfactory -nonfacts -nonfactual -nonfactually -nonfacultative -nonfaculty -nonfaddist -nonfading -nonfailure -nonfallacious -nonfallaciously -nonfallaciousness -nonfalse -nonfaltering -nonfalteringly -nonfamily -nonfamilial -nonfamiliar -nonfamiliarly -nonfamilies -nonfamous -nonfan -nonfanatic -nonfanatical -nonfanatically -nonfanciful -nonfans -nonfantasy -nonfantasies -nonfarcical -nonfarcicality -nonfarcically -nonfarcicalness -nonfarm -nonfascist -Non-fascist -nonfascists -nonfashionable -nonfashionableness -nonfashionably -nonfastidious -nonfastidiously -nonfastidiousness -nonfat -nonfatal -nonfatalistic -nonfatality -nonfatalities -nonfatally -nonfatalness -nonfatigable -nonfattening -nonfatty -nonfaulty -nonfavorable -nonfavorableness -nonfavorably -nonfavored -nonfavorite -nonfealty -nonfealties -nonfeasance -non-feasance -nonfeasibility -nonfeasible -nonfeasibleness -nonfeasibly -nonfeasor -nonfeatured -nonfebrile -nonfecund -nonfecundity -nonfederal -nonfederated -nonfeeble -nonfeebleness -nonfeebly -nonfeeding -nonfeeling -nonfeelingly -nonfeldspathic -nonfelicity -nonfelicitous -nonfelicitously -nonfelicitousness -nonfelony -nonfelonious -nonfeloniously -nonfeloniousness -nonfenestrated -nonfermentability -nonfermentable -nonfermentation -nonfermentative -nonfermented -nonfermenting -nonferocious -nonferociously -nonferociousness -nonferocity -nonferrous -nonfertile -nonfertility -nonfervent -nonfervently -nonferventness -nonfervid -nonfervidly -nonfervidness -nonfestive -nonfestively -nonfestiveness -nonfeudal -nonfeudally -nonfeverish -nonfeverishly -nonfeverishness -nonfeverous -nonfeverously -nonfibrous -nonfiction -nonfictional -nonfictionally -nonfictitious -nonfictitiously -nonfictitiousness -nonfictive -nonfictively -nonfidelity -nonfiduciary -nonfiduciaries -nonfighter -nonfigurative -nonfiguratively -nonfigurativeness -nonfilamentous -nonfilial -nonfilter -nonfilterable -nonfimbriate -nonfimbriated -nonfinal -nonfinancial -nonfinancially -nonfinding -nonfinishing -nonfinite -nonfinitely -nonfiniteness -nonfireproof -nonfiscal -nonfiscally -nonfisherman -nonfishermen -nonfissile -nonfissility -nonfissionable -nonfixation -nonflagellate -nonflagellated -nonflagitious -nonflagitiously -nonflagitiousness -nonflagrance -nonflagrancy -nonflagrant -nonflagrantly -nonflaky -nonflakily -nonflakiness -nonflammability -nonflammable -nonflammatory -nonflatulence -nonflatulency -nonflatulent -nonflatulently -nonflawed -Non-flemish -nonflexibility -nonflexible -nonflexibleness -nonflexibly -nonflyable -nonflying -nonflirtatious -nonflirtatiously -nonflirtatiousness -nonfloatation -nonfloating -nonfloatingly -nonfloriferous -nonflowering -nonflowing -nonfluctuating -nonfluctuation -nonfluency -nonfluent -nonfluently -nonfluentness -nonfluid -nonfluidic -nonfluidity -nonfluidly -nonfluids -nonfluorescence -nonfluorescent -nonflux -nonfocal -nonfollowing -nonfood -nonforbearance -nonforbearing -nonforbearingly -nonforeclosing -nonforeclosure -nonforeign -nonforeigness -nonforeignness -nonforeknowledge -nonforensic -nonforensically -nonforest -nonforested -nonforfeitable -nonforfeiting -nonforfeiture -nonforfeitures -nonforgiving -nonform -nonformal -nonformalism -nonformalistic -nonformally -nonformalness -nonformation -nonformative -nonformatively -nonformidability -nonformidable -nonformidableness -nonformidably -nonforming -nonformulation -nonfortifiable -nonfortification -nonfortifying -nonfortuitous -nonfortuitously -nonfortuitousness -nonfossiliferous -nonfouling -nonfragile -nonfragilely -nonfragileness -nonfragility -nonfragmented -nonfragrant -nonfrangibility -nonfrangible -nonfrat -nonfraternal -nonfraternally -nonfraternity -nonfrauder -nonfraudulence -nonfraudulency -nonfraudulent -nonfraudulently -nonfreedom -nonfreeman -nonfreemen -nonfreezable -nonfreeze -nonfreezing -Non-french -nonfrenetic -nonfrenetically -nonfrequence -nonfrequency -nonfrequent -nonfrequently -nonfricative -nonfriction -nonfrigid -nonfrigidity -nonfrigidly -nonfrigidness -nonfrosted -nonfrosting -nonfrugal -nonfrugality -nonfrugally -nonfrugalness -nonfruition -nonfrustration -nonfuel -nonfugitive -nonfugitively -nonfugitiveness -nonfulfillment -nonfulminating -nonfunctional -nonfunctionally -nonfunctioning -nonfundable -nonfundamental -nonfundamentalist -nonfundamentally -nonfunded -nonfungible -nonfuroid -nonfused -nonfusibility -nonfusible -nonfusion -nonfutile -nonfuturistic -nonfuturity -nonfuturition -nong -Non-gaelic -nongay -nongays -nongalactic -nongalvanized -nongame -nonganglionic -nongangrenous -nongarrulity -nongarrulous -nongarrulously -nongarrulousness -nongas -nongaseness -nongaseous -nongaseousness -nongases -nongassy -nongelatinizing -nongelatinous -nongelatinously -nongelatinousness -nongelling -nongenealogic -nongenealogical -nongenealogically -nongeneralized -nongenerating -nongenerative -nongeneric -nongenerical -nongenerically -nongenetic -nongenetical -nongenetically -nongentile -nongenuine -nongenuinely -nongenuineness -nongeographic -nongeographical -nongeographically -nongeologic -nongeological -nongeologically -nongeometric -nongeometrical -nongeometrically -Non-german -nongermane -Non-germanic -nongerminal -nongerminating -nongermination -nongerminative -nongerundial -nongerundive -nongerundively -nongestic -nongestical -nongilded -nongildsman -nongilled -nongymnast -nongipsy -nongypsy -non-Gypsy -non-Gypsies -nonglacial -nonglacially -nonglandered -nonglandular -nonglandulous -nonglare -nonglazed -nonglobular -nonglobularly -nonglucose -nonglucosidal -nonglucosidic -nonglutenous -nongod -nongold -nongolfer -nongospel -Non-gothic -non-Gothically -nongovernance -nongovernment -Non-government -nongovernmental -nongraceful -nongracefully -nongracefulness -nongraciosity -nongracious -nongraciously -nongraciousness -nongraded -nongraduate -nongraduated -nongraduation -nongray -nongrain -nongrained -nongrammatical -nongranular -nongranulated -nongraphic -nongraphical -nongraphically -nongraphicalness -nongraphitic -nongrass -nongratification -nongratifying -nongratifyingly -nongratuitous -nongratuitously -nongratuitousness -nongraven -nongravitation -nongravitational -nongravitationally -nongravitative -nongravity -nongravities -nongreasy -non-Greek -nongreen -nongregarious -nongregariously -nongregariousness -nongrey -nongremial -non-gremial -nongrieved -nongrieving -nongrievous -nongrievously -nongrievousness -nongrooming -nongrounded -nongrounding -nonguarantee -nonguaranty -nonguaranties -nonguard -nonguidable -nonguidance -nonguilt -nonguilts -nonguttural -nongutturally -nongutturalness -nonhabitability -nonhabitable -nonhabitableness -nonhabitably -nonhabitation -nonhabitual -nonhabitually -nonhabitualness -nonhabituating -nonhackneyed -nonhalation -nonhallucinated -nonhallucination -nonhallucinatory -Non-hamitic -nonhandicap -nonhardenable -nonhardy -nonharmony -nonharmonic -nonharmonies -nonharmonious -nonharmoniously -nonharmoniousness -nonhazardous -nonhazardously -nonhazardousness -nonheading -nonhearer -nonheathen -nonheathens -Non-hebraic -non-Hebraically -Non-hebrew -nonhectic -nonhectically -nonhedonic -nonhedonically -nonhedonistic -nonhedonistically -nonheinous -nonheinously -nonheinousness -Non-hellenic -nonhematic -nonheme -nonhemophilic -nonhepatic -nonhereditability -nonhereditable -nonhereditably -nonhereditary -nonhereditarily -nonhereditariness -nonheretical -nonheretically -nonheritability -nonheritable -nonheritably -nonheritor -nonhero -nonheroes -nonheroic -nonheroical -nonheroically -nonheroicalness -nonheroicness -nonhesitant -nonhesitantly -nonheuristic -Non-hibernian -nonhydrated -nonhydraulic -nonhydrogenous -nonhydrolyzable -nonhydrophobic -nonhierarchic -nonhierarchical -nonhierarchically -nonhieratic -nonhieratical -nonhieratically -nonhygrometric -nonhygroscopic -nonhygroscopically -Non-hindu -Non-hinduized -nonhyperbolic -nonhyperbolical -nonhyperbolically -nonhypnotic -nonhypnotically -nonhypostatic -nonhypostatical -nonhypostatically -nonhistone -nonhistoric -nonhistorical -nonhistorically -nonhistoricalness -nonhistrionic -nonhistrionical -nonhistrionically -nonhistrionicalness -nonhomaloidal -nonhome -Non-homeric -nonhomiletic -nonhomogeneity -nonhomogeneous -nonhomogeneously -nonhomogeneousness -nonhomogenous -nonhomologous -nonhostile -nonhostilely -nonhostility -nonhouseholder -nonhousekeeping -nonhubristic -nonhuman -nonhumaness -nonhumanist -nonhumanistic -nonhumanized -nonhumanness -nonhumorous -nonhumorously -nonhumorousness -nonhumus -nonhunting -Noni -nonya -Non-yahgan -nonic -noniconoclastic -noniconoclastically -nonideal -nonidealist -nonidealistic -nonidealistically -nonideational -nonideationally -nonidempotent -nonidentical -nonidentification -nonidentity -nonidentities -nonideologic -nonideological -nonideologically -nonidyllic -nonidyllically -nonidiomatic -nonidiomatical -nonidiomatically -nonidiomaticalness -nonidolatrous -nonidolatrously -nonidolatrousness -Nonie -nonigneous -nonignitability -nonignitable -nonignitibility -nonignitible -nonignominious -nonignominiously -nonignominiousness -nonignorant -nonignorantly -nonyielding -nonyl -nonylene -nonylenic -nonylic -nonillative -nonillatively -nonillion -nonillionth -nonilluminant -nonilluminating -nonilluminatingly -nonillumination -nonilluminative -nonillusional -nonillusive -nonillusively -nonillusiveness -nonillustration -nonillustrative -nonillustratively -nonyls -nonimage -nonimaginary -nonimaginarily -nonimaginariness -nonimaginational -nonimbricate -nonimbricated -nonimbricately -nonimbricating -nonimbricative -nonimitability -nonimitable -nonimitating -nonimitation -nonimitational -nonimitative -nonimitatively -nonimitativeness -nonimmanence -nonimmanency -nonimmanent -nonimmanently -nonimmateriality -nonimmersion -nonimmigrant -nonimmigration -nonimmune -nonimmunity -nonimmunities -nonimmunization -nonimmunized -nonimpact -nonimpacted -nonimpairment -nonimpartation -nonimpartment -nonimpatience -nonimpeachability -nonimpeachable -nonimpeachment -nonimpedimental -nonimpedimentary -nonimperative -nonimperatively -nonimperativeness -nonimperial -nonimperialistic -nonimperialistically -nonimperially -nonimperialness -nonimperious -nonimperiously -nonimperiousness -nonimplement -nonimplemental -nonimplication -nonimplicative -nonimplicatively -nonimportation -non-importation -nonimporting -nonimposition -nonimpregnated -nonimpressionability -nonimpressionable -nonimpressionableness -nonimpressionabness -nonimpressionist -nonimpressionistic -nonimprovement -nonimpulsive -nonimpulsively -nonimpulsiveness -nonimputability -nonimputable -nonimputableness -nonimputably -nonimputation -nonimputative -nonimputatively -nonimputativeness -nonincandescence -nonincandescent -nonincandescently -nonincarnate -nonincarnated -nonincestuous -nonincestuously -nonincestuousness -nonincident -nonincidental -nonincidentally -nonincitement -noninclinable -noninclination -noninclinational -noninclinatory -noninclusion -noninclusive -noninclusively -noninclusiveness -nonincorporated -nonincorporative -nonincreasable -nonincrease -nonincreasing -nonincriminating -nonincrimination -nonincriminatory -nonincrusting -nonindependent -nonindependently -nonindexed -Non-indian -nonindictable -nonindictment -nonindigenous -nonindividual -nonindividualistic -nonindividuality -nonindividualities -Non-indo-european -noninduced -noninducible -noninductive -noninductively -noninductivity -nonindulgence -nonindulgent -nonindulgently -nonindurated -nonindurative -nonindustrial -nonindustrialization -nonindustrialized -nonindustrially -nonindustrious -nonindustriously -nonindustriousness -noninert -noninertial -noninertly -noninertness -noninfallibilist -noninfallibility -noninfallible -noninfallibleness -noninfallibly -noninfantry -noninfected -noninfecting -noninfection -noninfectious -noninfectiously -noninfectiousness -noninferable -noninferably -noninferential -noninferentially -noninfinite -noninfinitely -noninfiniteness -noninflammability -noninflammable -noninflammableness -noninflammably -noninflammatory -noninflation -noninflationary -noninflected -noninflectional -noninflectionally -noninfluence -noninfluential -noninfluentially -noninformational -noninformative -noninformatively -noninformativeness -noninfraction -noninfusibility -noninfusible -noninfusibleness -noninfusibness -noninhabitability -noninhabitable -noninhabitance -noninhabitancy -noninhabitancies -noninhabitant -noninherence -noninherent -noninherently -noninheritability -noninheritable -noninheritableness -noninheritabness -noninherited -noninhibitive -noninhibitory -noninitial -noninitially -noninjury -noninjuries -noninjurious -noninjuriously -noninjuriousness -noninoculation -noninoculative -noninquiring -noninquiringly -noninsect -noninsertion -noninsistence -noninsistency -noninsistencies -noninsistent -noninspissating -noninstinctive -noninstinctively -noninstinctual -noninstinctually -noninstitution -noninstitutional -noninstitutionally -noninstruction -noninstructional -noninstructionally -noninstructive -noninstructively -noninstructiveness -noninstructress -noninstrumental -noninstrumentalistic -noninstrumentally -noninsular -noninsularity -noninsurance -nonintegrable -nonintegrated -nonintegration -nonintegrity -nonintellectual -nonintellectually -nonintellectualness -nonintellectuals -nonintelligence -nonintelligent -nonintelligently -nonintent -nonintention -noninteracting -noninteractive -nonintercepting -noninterceptive -noninterchangeability -noninterchangeable -noninterchangeableness -noninterchangeably -nonintercourse -non-intercourse -noninterdependence -noninterdependency -noninterdependent -noninterdependently -noninterfaced -noninterference -non-interference -noninterferer -noninterfering -noninterferingly -noninterleaved -nonintermission -nonintermittence -nonintermittent -nonintermittently -nonintermittentness -noninternational -noninternationally -noninterpolating -noninterpolation -noninterpolative -noninterposition -noninterpretability -noninterpretable -noninterpretational -noninterpretative -noninterpretively -noninterpretiveness -noninterrupted -noninterruptedly -noninterruptedness -noninterruption -noninterruptive -nonintersecting -nonintersectional -nonintersector -nonintervention -non-intervention -noninterventional -noninterventionalist -noninterventionist -noninterventionists -nonintimidation -nonintoxicant -nonintoxicants -nonintoxicating -nonintoxicatingly -nonintoxicative -nonintrospective -nonintrospectively -nonintrospectiveness -nonintroversive -nonintroversively -nonintroversiveness -nonintroverted -nonintrovertedly -nonintrovertedness -nonintrusion -non-intrusion -nonintrusionism -nonintrusionist -nonintrusive -nonintuitive -nonintuitively -nonintuitiveness -noninvasive -noninverted -noninverting -noninvidious -noninvidiously -noninvidiousness -noninvincibility -noninvincible -noninvincibleness -noninvincibly -noninvolved -noninvolvement -noninvolvements -noniodized -nonion -nonionic -Non-ionic -nonionized -nonionizing -nonirate -nonirately -nonirenic -nonirenical -noniridescence -noniridescent -noniridescently -Non-irish -noniron -non-iron -nonironic -nonironical -nonironically -nonironicalness -nonirradiated -nonirrational -nonirrationally -nonirrationalness -nonirreparable -nonirrevocability -nonirrevocable -nonirrevocableness -nonirrevocably -nonirrigable -nonirrigated -nonirrigating -nonirrigation -nonirritability -nonirritable -nonirritableness -nonirritably -nonirritancy -nonirritant -nonirritating -Non-islamic -non-Islamitic -nonisobaric -nonisoelastic -nonisolable -nonisotropic -nonisotropous -Non-israelite -non-Israelitic -Non-israelitish -nonissuable -nonissuably -nonissue -Non-italian -non-Italic -Nonius -Non-japanese -Non-jew -Non-jewish -nonjoinder -non-joinder -nonjournalistic -nonjournalistically -nonjudgmental -nonjudicable -nonjudicative -nonjudicatory -nonjudicatories -nonjudiciable -nonjudicial -nonjudicially -nonjurable -nonjurancy -nonjurant -non-jurant -nonjurantism -nonjuress -nonjury -non-jury -nonjuridic -nonjuridical -nonjuridically -nonjuries -nonjurying -nonjuring -non-juring -nonjurist -nonjuristic -nonjuristical -nonjuristically -Nonjuror -non-juror -nonjurorism -nonjurors -Non-kaffir -nonkinetic -nonknowledge -nonknowledgeable -nonkosher -nonlabeling -nonlabelling -nonlacteal -nonlacteally -nonlacteous -nonlactescent -nonlactic -nonlayered -nonlaying -nonlaminable -nonlaminated -nonlaminating -nonlaminative -nonlanguage -nonlarcenous -non-Latin -nonlawyer -nonleaded -nonleafy -nonleaking -nonlegal -nonlegato -Non-legendrean -nonlegislative -nonlegislatively -nonlegitimacy -nonlegitimate -nonlegume -nonleguminous -nonlepidopteral -nonlepidopteran -nonlepidopterous -nonleprous -nonleprously -nonlethal -nonlethally -nonlethargic -nonlethargical -nonlethargically -nonlevel -nonleviable -nonlevulose -nonly -nonliability -nonliabilities -nonliable -nonlibelous -nonlibelously -nonliberal -nonliberalism -nonliberation -nonlibidinous -nonlibidinously -nonlibidinousness -nonlicensable -nonlicensed -nonlicentiate -nonlicentious -nonlicentiously -nonlicentiousness -nonlicet -nonlicit -nonlicking -nonlife -nonlimitation -nonlimitative -nonlimiting -nonlymphatic -nonlineal -nonlinear -nonlinearity -nonlinearities -nonlinearity's -nonlinearly -nonlinguistic -nonlinkage -nonlipoidal -nonliquefiable -nonliquefying -nonliquid -nonliquidating -nonliquidation -nonliquidly -nonlyric -nonlyrical -nonlyrically -nonlyricalness -nonlyricism -nonlister -nonlisting -nonliteracy -nonliteral -nonliterality -nonliterally -nonliteralness -nonliterary -nonliterarily -nonliterariness -nonliterate -non-literate -nonlitigated -nonlitigation -nonlitigious -nonlitigiously -nonlitigiousness -nonliturgic -nonliturgical -nonliturgically -nonlive -nonlives -nonliving -nonlixiviated -nonlixiviation -nonlocal -nonlocalizable -nonlocalized -nonlocally -nonlocals -nonlocation -nonlogic -nonlogical -nonlogicality -nonlogically -nonlogicalness -nonlogistic -nonlogistical -nonloyal -nonloyally -nonloyalty -nonloyalties -nonlosable -nonloser -nonlover -nonloving -nonloxodromic -nonloxodromical -nonlubricant -nonlubricating -nonlubricious -nonlubriciously -nonlubriciousness -nonlucid -nonlucidity -nonlucidly -nonlucidness -nonlucrative -nonlucratively -nonlucrativeness -nonlugubrious -nonlugubriously -nonlugubriousness -nonluminescence -nonluminescent -nonluminosity -nonluminous -nonluminously -nonluminousness -nonluster -nonlustrous -nonlustrously -nonlustrousness -Non-lutheran -Non-magyar -nonmagnetic -nonmagnetical -nonmagnetically -nonmagnetizable -nonmagnetized -nonmailable -nonmaintenance -nonmajor -nonmajority -nonmajorities -nonmakeup -Non-malay -Non-malayan -nonmalarial -nonmalarian -nonmalarious -nonmalicious -nonmaliciously -nonmaliciousness -nonmalignance -nonmalignancy -nonmalignant -nonmalignantly -nonmalignity -nonmalleability -nonmalleable -nonmalleableness -nonmalleabness -Non-malthusian -nonmammalian -nonman -nonmanagement -nonmandatory -nonmandatories -nonmanifest -nonmanifestation -nonmanifestly -nonmanifestness -nonmanila -nonmanipulative -nonmanipulatory -nonmannered -nonmanneristic -nonmannite -nonmanual -nonmanually -nonmanufacture -nonmanufactured -nonmanufacturing -Non-marcan -nonmarine -nonmarital -nonmaritally -nonmaritime -nonmarket -nonmarketability -nonmarketable -nonmarriage -nonmarriageability -nonmarriageable -nonmarriageableness -nonmarriageabness -nonmarrying -nonmartial -nonmartially -nonmartialness -nonmarveling -nonmasculine -nonmasculinely -nonmasculineness -nonmasculinity -nonmaskable -nonmason -Non-mason -nonmastery -nonmasteries -nonmatching -nonmaterial -nonmaterialistic -nonmaterialistically -nonmateriality -nonmaternal -nonmaternally -nonmathematic -nonmathematical -nonmathematically -nonmathematician -nonmatrimonial -nonmatrimonially -nonmatter -nonmaturation -nonmaturative -nonmature -nonmaturely -nonmatureness -nonmaturity -nonmeasurability -nonmeasurable -nonmeasurableness -nonmeasurably -nonmeat -nonmechanical -nonmechanically -nonmechanicalness -nonmechanistic -nonmediation -nonmediative -nonmedicable -nonmedical -nonmedically -nonmedicative -nonmedicinal -nonmedicinally -nonmeditative -nonmeditatively -nonmeditativeness -Non-mediterranean -nonmedullated -nonmelodic -nonmelodically -nonmelodious -nonmelodiously -nonmelodiousness -nonmelodramatic -nonmelodramatically -nonmelting -nonmember -non-member -nonmembers -nonmembership -nonmen -nonmenacing -Non-mendelian -nonmendicancy -nonmendicant -nonmenial -nonmenially -nonmental -nonmentally -nonmercantile -nonmercearies -nonmercenary -nonmercenaries -nonmerchantable -nonmeritorious -nonmetal -non-metal -nonmetallic -nonmetalliferous -nonmetallurgic -nonmetallurgical -nonmetallurgically -nonmetals -nonmetamorphic -nonmetamorphoses -nonmetamorphosis -nonmetamorphous -nonmetaphysical -nonmetaphysically -nonmetaphoric -nonmetaphorical -nonmetaphorically -nonmeteoric -nonmeteorically -nonmeteorologic -nonmeteorological -nonmeteorologically -nonmethodic -nonmethodical -nonmethodically -nonmethodicalness -Non-methodist -non-Methodistic -nonmetric -nonmetrical -nonmetrically -nonmetropolitan -nonmicrobic -nonmicroprogrammed -nonmicroscopic -nonmicroscopical -nonmicroscopically -nonmigrant -nonmigrating -nonmigration -nonmigratory -nonmilitancy -nonmilitant -nonmilitantly -nonmilitants -nonmilitary -nonmilitarily -nonmillionaire -nonmimetic -nonmimetically -nonmineral -nonmineralogical -nonmineralogically -nonminimal -nonministerial -nonministerially -nonministration -nonmyopic -nonmyopically -nonmiraculous -nonmiraculously -nonmiraculousness -nonmischievous -nonmischievously -nonmischievousness -nonmiscibility -nonmiscible -nonmissionary -nonmissionaries -nonmystic -nonmystical -nonmystically -nonmysticalness -nonmysticism -nonmythical -nonmythically -nonmythologic -nonmythological -nonmythologically -nonmitigation -nonmitigative -nonmitigatory -nonmobile -nonmobility -nonmodal -nonmodally -nonmoderate -nonmoderately -nonmoderateness -nonmodern -nonmodernistic -nonmodernly -nonmodernness -nonmodificative -nonmodificatory -nonmodifying -Non-mohammedan -nonmolar -nonmolecular -nonmomentary -nonmomentariness -nonmonarchal -nonmonarchally -nonmonarchial -nonmonarchic -nonmonarchical -nonmonarchically -nonmonarchist -nonmonarchistic -nonmonastic -nonmonastically -nonmoney -nonmonetary -Non-mongol -Non-mongolian -nonmonist -nonmonistic -nonmonistically -nonmonogamous -nonmonogamously -nonmonopolistic -nonmonotheistic -Non-moorish -nonmorainic -nonmoral -non-moral -nonmorality -Non-mormon -nonmortal -nonmortally -Non-moslem -Non-moslemah -non-Moslems -nonmotile -nonmotility -nonmotion -nonmotivated -nonmotivation -nonmotivational -nonmotoring -nonmotorist -nonmountainous -nonmountainously -nonmoveability -nonmoveable -nonmoveableness -nonmoveably -nonmucilaginous -nonmucous -non-Muhammadan -non-Muhammedan -nonmulched -nonmultiple -nonmultiplication -nonmultiplicational -nonmultiplicative -nonmultiplicatively -nonmunicipal -nonmunicipally -nonmuscular -nonmuscularly -nonmusic -nonmusical -nonmusically -nonmusicalness -non-Muslem -non-Muslems -non-Muslim -non-Muslims -nonmussable -nonmutability -nonmutable -nonmutableness -nonmutably -nonmutational -nonmutationally -nonmutative -nonmutinous -nonmutinously -nonmutinousness -nonmutual -nonmutuality -nonmutually -Nonna -Nonnah -nonnant -nonnarcism -nonnarcissism -nonnarcissistic -nonnarcotic -nonnarration -nonnarrative -nonnasal -nonnasality -nonnasally -nonnat -nonnational -nonnationalism -nonnationalistic -nonnationalistically -nonnationalization -nonnationally -nonnative -nonnatively -nonnativeness -nonnatives -nonnatty -non-natty -nonnattily -nonnattiness -nonnatural -non-natural -nonnaturalism -nonnaturalist -nonnaturalistic -nonnaturality -nonnaturally -nonnaturalness -nonnaturals -nonnautical -nonnautically -nonnaval -nonnavigability -nonnavigable -nonnavigableness -nonnavigably -nonnavigation -nonnebular -nonnebulous -nonnebulously -nonnebulousness -nonnecessary -nonnecessity -non-necessity -nonnecessities -nonnecessitous -nonnecessitously -nonnecessitousness -nonnegation -nonnegative -nonnegativism -nonnegativistic -nonnegativity -nonnegligence -nonnegligent -nonnegligently -nonnegligibility -nonnegligible -nonnegligibleness -nonnegligibly -nonnegotiability -nonnegotiable -nonnegotiation -Non-negritic -Non-negro -non-Negroes -nonnephritic -nonnervous -nonnervously -nonnervousness -nonnescience -nonnescient -nonneural -nonneurotic -nonneutral -nonneutrality -nonneutrally -nonnews -non-Newtonian -nonny -Non-nicene -nonnicotinic -nonnihilism -nonnihilist -nonnihilistic -nonny-nonny -nonnitric -nonnitrogenized -nonnitrogenous -nonnitrous -nonnobility -nonnoble -non-noble -nonnocturnal -nonnocturnally -nonnomad -nonnomadic -nonnomadically -nonnominalistic -nonnomination -non-Nordic -nonnormal -nonnormality -nonnormally -nonnormalness -Non-norman -Non-norse -nonnotable -nonnotableness -nonnotably -nonnotational -nonnotification -nonnotional -nonnoumenal -nonnoumenally -nonnourishing -nonnourishment -nonnovel -nonnuclear -nonnucleated -nonnullification -nonnumeral -nonnumeric -nonnumerical -nonnutrient -nonnutriment -nonnutritious -nonnutritiously -nonnutritiousness -nonnutritive -nonnutritively -nonnutritiveness -Nono -no-no -nonobedience -non-obedience -nonobedient -nonobediently -nonobese -nonobjectification -nonobjection -nonobjective -nonobjectivism -nonobjectivist -nonobjectivistic -nonobjectivity -nonobligated -nonobligatory -nonobligatorily -nonobscurity -nonobscurities -nonobservable -nonobservably -nonobservance -nonobservances -nonobservant -nonobservantly -nonobservation -nonobservational -nonobserving -nonobservingly -nonobsession -nonobsessional -nonobsessive -nonobsessively -nonobsessiveness -nonobstetric -nonobstetrical -nonobstetrically -nonobstructive -nonobstructively -nonobstructiveness -nonobvious -nonobviously -nonobviousness -nonoccidental -nonoccidentally -nonocclusion -nonocclusive -nonoccult -nonocculting -nonoccupance -nonoccupancy -nonoccupant -nonoccupation -nonoccupational -nonoccurrence -nonodoriferous -nonodoriferously -nonodoriferousness -nonodorous -nonodorously -nonodorousness -nonoecumenic -nonoecumenical -nonoffender -nonoffensive -nonoffensively -nonoffensiveness -nonofficeholder -nonofficeholding -nonofficial -nonofficially -nonofficinal -nonogenarian -nonohmic -nonoic -nonoily -nonolfactory -nonolfactories -nonoligarchic -nonoligarchical -nonomad -nonomissible -nonomission -nononerous -nononerously -nononerousness -no-nonsense -nonopacity -nonopacities -nonopaque -nonopening -nonoperable -nonoperatic -nonoperatically -nonoperating -nonoperational -nonoperative -nonopinionaness -nonopinionated -nonopinionatedness -nonopinionative -nonopinionatively -nonopinionativeness -nonopposable -nonopposal -nonopposing -nonopposition -nonoppression -nonoppressive -nonoppressively -nonoppressiveness -nonopprobrious -nonopprobriously -nonopprobriousness -nonoptic -nonoptical -nonoptically -nonoptimistic -nonoptimistical -nonoptimistically -nonoptional -nonoptionally -nonoral -nonorally -nonorchestral -nonorchestrally -nonordained -nonordered -nonordination -nonorganic -nonorganically -nonorganization -nonorientable -nonoriental -nonorientation -nonoriginal -nonoriginally -nonornamental -nonornamentality -nonornamentally -nonorthodox -nonorthodoxly -nonorthogonal -nonorthogonality -nonorthographic -nonorthographical -nonorthographically -non-Oscan -nonoscine -nonosmotic -nonosmotically -nonostensible -nonostensibly -nonostensive -nonostensively -nonostentation -nonoutlawry -nonoutlawries -nonoutrage -nonoverhead -nonoverlapping -nonowner -nonowners -nonowning -nonoxidating -nonoxidation -nonoxidative -nonoxidizable -nonoxidization -nonoxidizing -nonoxygenated -nonoxygenous -nonpacifiable -nonpacific -nonpacifical -nonpacifically -nonpacification -nonpacificatory -nonpacifist -nonpacifistic -nonpagan -nonpaganish -nonpagans -nonpaid -nonpayer -nonpaying -nonpayment -non-payment -nonpayments -nonpainter -nonpalatability -nonpalatable -nonpalatableness -nonpalatably -nonpalatal -nonpalatalization -Non-pali -nonpalliation -nonpalliative -nonpalliatively -nonpalpability -nonpalpable -nonpalpably -Non-paninean -nonpantheistic -nonpantheistical -nonpantheistically -nonpapal -nonpapist -nonpapistic -nonpapistical -nonpar -nonparabolic -nonparabolical -nonparabolically -nonparadoxical -nonparadoxically -nonparadoxicalness -nonparalyses -nonparalysis -nonparalytic -nonparallel -nonparallelism -nonparametric -nonparasitic -nonparasitical -nonparasitically -nonparasitism -nonpardoning -nonpareil -nonpareils -nonparent -nonparental -nonparentally -nonpariello -nonparishioner -Non-parisian -nonparity -nonparliamentary -nonparlor -nonparochial -nonparochially -nonparous -nonparty -nonpartial -nonpartiality -nonpartialities -nonpartially -nonpartible -nonparticipant -nonparticipants -nonparticipating -nonparticipation -nonpartisan -nonpartisanism -nonpartisans -nonpartisanship -nonpartizan -nonpartner -nonpassenger -nonpasserine -nonpassible -nonpassionate -nonpassionately -nonpassionateness -nonpast -nonpastoral -nonpastorally -nonpasts -nonpatentability -nonpatentable -nonpatented -nonpatently -nonpaternal -nonpaternally -nonpathogenic -nonpathologic -nonpathological -nonpathologically -nonpatriotic -nonpatriotically -nonpatterned -nonpause -nonpeak -nonpeaked -nonpearlitic -nonpecuniary -nonpedagogic -nonpedagogical -nonpedagogically -nonpedestrian -nonpedigree -nonpedigreed -nonpejorative -nonpejoratively -nonpelagic -nonpeltast -nonpenal -nonpenalized -nonpendant -nonpendency -nonpendent -nonpendently -nonpending -nonpenetrability -nonpenetrable -nonpenetrably -nonpenetrating -nonpenetration -nonpenitent -nonpensionable -nonpensioner -nonperceivable -nonperceivably -nonperceiving -nonperceptibility -nonperceptible -nonperceptibleness -nonperceptibly -nonperception -nonperceptional -nonperceptive -nonperceptively -nonperceptiveness -nonperceptivity -nonperceptual -nonpercipience -nonpercipiency -nonpercipient -nonpercussive -nonperfected -nonperfectibility -nonperfectible -nonperfection -nonperforate -nonperforated -nonperforating -nonperformance -non-performance -nonperformances -nonperformer -nonperforming -nonperilous -nonperilously -nonperiodic -nonperiodical -nonperiodically -nonperishable -nonperishables -nonperishing -nonperjured -nonperjury -nonperjuries -nonpermanence -nonpermanency -nonpermanent -nonpermanently -nonpermeability -nonpermeable -nonpermeation -nonpermeative -nonpermissibility -nonpermissible -nonpermissibly -nonpermission -nonpermissive -nonpermissively -nonpermissiveness -nonpermitted -nonperpendicular -nonperpendicularity -nonperpendicularly -nonperpetration -nonperpetual -nonperpetually -nonperpetuance -nonperpetuation -nonperpetuity -nonperpetuities -nonpersecuting -nonpersecution -nonpersecutive -nonpersecutory -nonperseverance -nonperseverant -nonpersevering -nonpersistence -nonpersistency -nonpersistent -nonpersistently -nonpersisting -nonperson -nonpersonal -nonpersonally -nonpersonification -nonpersons -nonperspective -nonpersuadable -nonpersuasible -nonpersuasive -nonpersuasively -nonpersuasiveness -nonpertinence -nonpertinency -nonpertinent -nonpertinently -nonperturbable -nonperturbing -Non-peruvian -nonperverse -nonperversely -nonperverseness -nonperversion -nonperversity -nonperversities -nonperversive -nonperverted -nonpervertedly -nonpervertible -nonpessimistic -nonpessimistically -nonpestilent -nonpestilential -nonpestilently -nonphagocytic -nonpharmaceutic -nonpharmaceutical -nonpharmaceutically -nonphenolic -nonphenomenal -nonphenomenally -nonphilanthropic -nonphilanthropical -nonphilologic -nonphilological -nonphilosophy -nonphilosophic -nonphilosophical -nonphilosophically -nonphilosophies -nonphysical -nonphysically -nonphysiologic -nonphysiological -nonphysiologically -nonphobic -nonphonemic -nonphonemically -nonphonetic -nonphonetical -nonphonetically -nonphosphatic -nonphosphorized -nonphosphorous -nonphotobiotic -nonphotographic -nonphotographical -nonphotographically -nonphrenetic -nonphrenetically -nonpickable -nonpictorial -nonpictorially -nonpigmented -nonpinaceous -nonpyogenic -nonpyritiferous -Non-pythagorean -nonplacental -nonplacet -non-placet -nonplay -nonplays -nonplanar -nonplane -nonplanetary -nonplantowning -nonplastic -nonplasticity -nonplate -nonplated -nonplatitudinous -nonplatitudinously -nonplausibility -nonplausible -nonplausibleness -nonplausibly -nonpleadable -nonpleading -nonpleadingly -nonpliability -nonpliable -nonpliableness -nonpliably -nonpliancy -nonpliant -nonpliantly -nonpliantness -nonpluralistic -nonplurality -nonpluralities -nonplus -nonplusation -nonplused -nonpluses -nonplushed -nonplusing -nonplussation -nonplussed -nonplusses -nonplussing -nonplutocratic -nonplutocratical -nonpneumatic -nonpneumatically -nonpoet -nonpoetic -nonpoisonous -nonpoisonously -nonpoisonousness -nonpolar -nonpolarity -nonpolarizable -nonpolarizing -nonpolemic -nonpolemical -nonpolemically -Non-polish -nonpolitical -nonpolitically -nonpolluted -nonpolluting -nonponderability -nonponderable -nonponderosity -nonponderous -nonponderously -nonponderousness -nonpoor -nonpopery -nonpopular -nonpopularity -nonpopularly -nonpopulous -nonpopulously -nonpopulousness -nonporness -nonpornographic -nonporous -nonporousness -nonporphyritic -nonport -nonportability -nonportable -nonportentous -nonportentously -nonportentousness -nonportrayable -nonportrayal -Non-portuguese -nonpositive -nonpositivistic -nonpossessed -nonpossession -nonpossessive -nonpossessively -nonpossessiveness -nonpossessory -nonpossible -nonpossibly -nonposthumous -nonpostponement -nonpotable -nonpotential -nonpower -nonpracticability -nonpracticable -nonpracticableness -nonpracticably -nonpractical -nonpracticality -nonpractically -nonpracticalness -nonpractice -nonpracticed -nonpraedial -nonpragmatic -nonpragmatical -nonpragmatically -nonpreaching -nonprecedent -nonprecedential -nonprecious -nonpreciously -nonpreciousness -nonprecipitation -nonprecipitative -nonpredatory -nonpredatorily -nonpredatoriness -nonpredestination -nonpredicative -nonpredicatively -nonpredictable -nonpredictive -nonpreferability -nonpreferable -nonpreferableness -nonpreferably -nonpreference -nonpreferential -nonpreferentialism -nonpreferentially -nonpreformed -nonpregnant -nonprehensile -nonprejudiced -nonprejudicial -nonprejudicially -nonprelatic -nonprelatical -nonpremium -nonprepayment -nonpreparation -nonpreparative -nonpreparatory -nonpreparedness -nonprepositional -nonprepositionally -nonpresbyter -Non-presbyterian -nonprescient -nonpresciently -nonprescribed -nonprescriber -nonprescription -nonprescriptive -nonpresence -nonpresentability -nonpresentable -nonpresentableness -nonpresentably -nonpresentation -nonpresentational -nonpreservable -nonpreservation -nonpreservative -nonpresidential -nonpress -nonpressing -nonpressure -nonpresumptive -nonpresumptively -nonprevalence -nonprevalent -nonprevalently -nonpreventable -nonpreventible -nonprevention -nonpreventive -nonpreventively -nonpreventiveness -nonpriestly -nonprimitive -nonprimitively -nonprimitiveness -nonprincipiate -nonprincipled -nonprint -nonprintable -nonprinting -nonprivileged -nonprivity -nonprivities -nonprobability -nonprobabilities -nonprobable -nonprobably -nonprobation -nonprobative -nonprobatory -nonproblematic -nonproblematical -nonproblematically -nonprocedural -nonprocedurally -nonprocessional -nonprocreation -nonprocreative -nonprocurable -nonprocuration -nonprocurement -nonproducer -nonproducible -nonproducing -nonproduction -nonproductive -nonproductively -nonproductiveness -nonproductivity -nonprofane -nonprofanely -nonprofaneness -nonprofanity -nonprofanities -nonprofessed -nonprofession -nonprofessional -nonprofessionalism -nonprofessionally -nonprofessorial -nonprofessorially -nonproficience -nonproficiency -non-proficiency -nonproficient -nonprofit -nonprofitability -nonprofitable -nonprofitablely -nonprofitableness -nonprofiteering -non-profit-making -nonprognostication -nonprognosticative -nonprogrammable -nonprogrammer -nonprogressive -nonprogressively -nonprogressiveness -nonprohibitable -nonprohibition -nonprohibitive -nonprohibitively -nonprohibitory -nonprohibitorily -nonprojecting -nonprojection -nonprojective -nonprojectively -nonproletarian -nonproletariat -nonproliferation -nonproliferations -nonproliferous -nonprolific -nonprolificacy -nonprolifically -nonprolificness -nonprolifiness -nonprolix -nonprolixity -nonprolixly -nonprolixness -nonprolongation -nonprominence -nonprominent -nonprominently -nonpromiscuous -nonpromiscuously -nonpromiscuousness -nonpromissory -nonpromotion -nonpromotive -nonpromulgation -nonpronunciation -nonpropagable -nonpropagandist -nonpropagandistic -nonpropagation -nonpropagative -nonpropellent -nonprophetic -nonprophetical -nonprophetically -nonpropitiable -nonpropitiation -nonpropitiative -nonproportionable -nonproportional -nonproportionally -nonproportionate -nonproportionately -nonproportionateness -nonproportioned -nonproprietary -nonproprietaries -nonpropriety -nonproprietor -nonprorogation -nonpros -non-pros -nonprosaic -nonprosaically -nonprosaicness -nonproscription -nonproscriptive -nonproscriptively -nonprosecution -non-prosequitur -nonprospect -nonprosperity -nonprosperous -nonprosperously -nonprosperousness -nonprossed -non-prossed -nonprosses -nonprossing -non-prossing -nonprotecting -nonprotection -nonprotective -nonprotectively -nonproteid -nonprotein -nonproteinaceous -Non-protestant -nonprotestation -nonprotesting -nonprotractile -nonprotractility -nonprotraction -nonprotrusion -nonprotrusive -nonprotrusively -nonprotrusiveness -nonprotuberance -nonprotuberancy -nonprotuberancies -nonprotuberant -nonprotuberantly -nonprovable -nonproven -nonprovided -nonprovident -nonprovidential -nonprovidentially -nonprovidently -nonprovider -nonprovincial -nonprovincially -nonprovisional -nonprovisionally -nonprovisionary -nonprovocation -nonprovocative -nonprovocatively -nonprovocativeness -nonproximity -nonprudence -nonprudent -nonprudential -nonprudentially -nonprudently -Non-prussian -nonpsychiatric -nonpsychic -nonpsychical -nonpsychically -nonpsychoanalytic -nonpsychoanalytical -nonpsychoanalytically -nonpsychologic -nonpsychological -nonpsychologically -nonpsychopathic -nonpsychopathically -nonpsychotic -nonpublic -nonpublication -nonpublicity -nonpublishable -nonpueblo -nonpuerile -nonpuerilely -nonpuerility -nonpuerilities -nonpulmonary -nonpulsating -nonpulsation -nonpulsative -nonpumpable -nonpunctual -nonpunctually -nonpunctualness -nonpunctuating -nonpunctuation -nonpuncturable -nonpungency -nonpungent -nonpungently -nonpunishable -nonpunishing -nonpunishment -nonpunitive -nonpunitory -nonpurchasability -nonpurchasable -nonpurchase -nonpurchaser -nonpurgation -nonpurgative -nonpurgatively -nonpurgatorial -nonpurification -nonpurifying -nonpuristic -nonpurposive -nonpurposively -nonpurposiveness -nonpursuance -nonpursuant -nonpursuantly -nonpursuit -nonpurulence -nonpurulent -nonpurulently -nonpurveyance -nonputrescence -nonputrescent -nonputrescible -nonputting -Non-quaker -non-Quakerish -nonqualification -nonqualifying -nonqualitative -nonqualitatively -nonquality -nonqualities -nonquantitative -nonquantitatively -nonquantitativeness -nonquota -nonrabbinical -nonracial -nonracially -nonradiable -nonradiance -nonradiancy -nonradiant -nonradiantly -nonradiating -nonradiation -nonradiative -nonradical -nonradically -nonradicalness -nonradicness -nonradioactive -nonrayed -nonrailroader -nonraisable -nonraiseable -nonraised -nonrandom -nonrandomly -nonrandomness -nonranging -nonrapport -nonratability -nonratable -nonratableness -nonratably -nonrateability -nonrateable -nonrateableness -nonrateably -nonrated -nonratification -nonratifying -nonrational -nonrationalism -nonrationalist -nonrationalistic -nonrationalistical -nonrationalistically -nonrationality -nonrationalization -nonrationalized -nonrationally -nonrationalness -nonreaction -nonreactionary -nonreactionaries -nonreactive -nonreactor -nonreadability -nonreadable -nonreadableness -nonreadably -nonreader -nonreaders -nonreading -nonrealism -nonrealist -nonrealistic -nonrealistically -nonreality -nonrealities -nonrealizable -nonrealization -nonrealizing -nonreasonability -nonreasonable -nonreasonableness -nonreasonably -nonreasoner -nonreasoning -nonrebel -nonrebellion -nonrebellious -nonrebelliously -nonrebelliousness -nonrecalcitrance -nonrecalcitrancy -nonrecalcitrant -nonreceipt -nonreceivable -nonreceiving -nonrecent -nonreception -nonreceptive -nonreceptively -nonreceptiveness -nonreceptivity -nonrecess -nonrecession -nonrecessive -nonrecipience -nonrecipiency -nonrecipient -nonreciprocal -nonreciprocally -nonreciprocals -nonreciprocating -nonreciprocity -nonrecision -nonrecital -nonrecitation -nonrecitative -nonreclaimable -nonreclamation -nonrecluse -nonreclusive -nonrecognition -nonrecognized -nonrecoil -nonrecoiling -non-recoiling -nonrecollection -nonrecollective -nonrecombinant -nonrecommendation -nonreconcilability -nonreconcilable -nonreconcilableness -nonreconcilably -nonreconciliation -nonrecourse -nonrecoverable -nonrecovery -nonrectangular -nonrectangularity -nonrectangularly -nonrectifiable -nonrectified -nonrecuperatiness -nonrecuperation -nonrecuperative -nonrecuperativeness -nonrecuperatory -nonrecurent -nonrecurently -nonrecurrent -nonrecurring -nonredeemable -nonredemptible -nonredemption -nonredemptive -nonredressing -nonreduced -nonreducibility -nonreducible -nonreducibly -nonreducing -nonreduction -non-reduction -nonreductional -nonreductive -nonre-eligibility -nonre-eligible -nonreference -nonrefillable -nonrefined -nonrefinement -nonreflected -nonreflecting -nonreflection -nonreflective -nonreflectively -nonreflectiveness -nonreflector -nonreformation -nonreformational -nonrefracting -nonrefraction -nonrefractional -nonrefractive -nonrefractively -nonrefractiveness -nonrefrigerant -nonrefueling -nonrefuelling -nonrefundable -nonrefutal -nonrefutation -nonregardance -nonregarding -nonregenerate -nonregenerating -nonregeneration -nonregenerative -nonregeneratively -nonregent -non-regent -nonregimental -nonregimented -nonregistered -nonregistrability -nonregistrable -nonregistration -nonregression -nonregressive -nonregressively -nonregulation -non-regulation -nonregulative -nonregulatory -nonrehabilitation -nonreigning -nonreimbursement -nonreinforcement -nonreinstatement -nonrejection -nonrejoinder -nonrelapsed -nonrelated -nonrelatiness -nonrelation -nonrelational -nonrelative -nonrelatively -nonrelativeness -nonrelativistic -nonrelativistically -nonrelativity -nonrelaxation -nonrelease -nonrelenting -nonreliability -nonreliable -nonreliableness -nonreliably -nonreliance -nonrelieving -nonreligion -nonreligious -nonreligiously -nonreligiousness -nonrelinquishment -nonremanie -nonremedy -nonremediability -nonremediable -nonremediably -nonremedial -nonremedially -nonremedies -nonremembrance -nonremissible -nonremission -nonremittable -nonremittably -nonremittal -nonremonstrance -nonremonstrant -nonremovable -nonremuneration -nonremunerative -nonremuneratively -nonrendition -nonrenewable -nonrenewal -nonrenouncing -nonrenunciation -nonrepayable -nonrepaying -nonrepair -nonrepairable -nonreparable -nonreparation -nonrepatriable -nonrepatriation -nonrepealable -nonrepealing -nonrepeat -nonrepeated -nonrepeater -nonrepellence -nonrepellency -nonrepellent -nonrepeller -nonrepentance -nonrepentant -nonrepentantly -nonrepetition -nonrepetitious -nonrepetitiously -nonrepetitiousness -nonrepetitive -nonrepetitively -nonreplaceable -nonreplacement -nonreplicate -nonreplicated -nonreplication -nonreportable -nonreprehensibility -nonreprehensible -nonreprehensibleness -nonreprehensibly -nonrepresentable -nonrepresentation -nonrepresentational -nonrepresentationalism -nonrepresentationist -nonrepresentative -nonrepresentatively -nonrepresentativeness -nonrepressed -nonrepressible -nonrepressibleness -nonrepressibly -nonrepression -nonrepressive -nonreprisal -nonreproducible -nonreproduction -nonreproductive -nonreproductively -nonreproductiveness -nonrepublican -nonrepudiable -nonrepudiation -nonrepudiative -nonreputable -nonreputably -nonrequirable -nonrequirement -nonrequisite -nonrequisitely -nonrequisiteness -nonrequisition -nonrequital -nonrescissible -nonrescission -nonrescissory -nonrescue -nonresemblance -nonreservable -nonreservation -nonreserve -nonresidence -non-residence -nonresidency -nonresident -non-resident -nonresidental -nonresidenter -nonresidential -non-residential -nonresidentiary -nonresidentor -nonresidents -nonresidual -nonresignation -nonresilience -nonresiliency -nonresilient -nonresiliently -nonresinifiable -nonresistance -non-resistance -nonresistant -non-resistant -nonresistants -nonresister -nonresistibility -nonresistible -nonresisting -nonresistive -nonresistively -nonresistiveness -nonresolution -nonresolvability -nonresolvable -nonresolvableness -nonresolvably -nonresolvabness -nonresonant -nonresonantly -nonrespectability -nonrespectabilities -nonrespectable -nonrespectableness -nonrespectably -nonrespirable -nonresponsibility -nonresponsibilities -nonresponsible -nonresponsibleness -nonresponsibly -nonresponsive -nonresponsively -nonrestitution -nonrestoration -nonrestorative -nonrestrained -nonrestraint -nonrestricted -nonrestrictedly -nonrestricting -nonrestriction -nonrestrictive -nonrestrictively -nonresumption -nonresurrection -nonresurrectional -nonresuscitable -nonresuscitation -nonresuscitative -nonretail -nonretainable -nonretainment -nonretaliation -nonretardation -nonretardative -nonretardatory -nonretarded -nonretardment -nonretention -nonretentive -nonretentively -nonretentiveness -nonreticence -nonreticent -nonreticently -nonretinal -nonretired -nonretirement -nonretiring -nonretraceable -nonretractation -nonretractile -nonretractility -nonretraction -nonretrenchment -nonretroactive -nonretroactively -nonretroactivity -nonreturn -nonreturnable -nonreusable -nonrevaluation -nonrevealing -nonrevelation -nonrevenge -nonrevenger -nonrevenue -nonreverence -nonreverent -nonreverential -nonreverentially -nonreverently -nonreverse -nonreversed -nonreversibility -nonreversible -nonreversibleness -nonreversibly -nonreversing -nonreversion -nonrevertible -nonrevertive -nonreviewable -nonrevision -nonrevival -nonrevivalist -nonrevocability -nonrevocable -nonrevocably -nonrevocation -nonrevokable -nonrevolting -nonrevoltingly -nonrevolution -nonrevolutionary -nonrevolutionaries -nonrevolving -nonrhetorical -nonrhetorically -nonrheumatic -nonrhyme -nonrhymed -nonrhyming -nonrhythm -nonrhythmic -nonrhythmical -nonrhythmically -nonriding -Non-riemannian -nonrigid -nonrigidity -nonrioter -nonrioting -nonriparian -nonritualistic -nonritualistically -nonrival -nonrivals -nonroyal -nonroyalist -nonroyally -nonroyalty -Non-roman -nonromantic -nonromantically -nonromanticism -nonrotatable -nonrotating -nonrotation -nonrotational -nonrotative -nonround -nonrousing -nonroutine -nonrubber -nonrudimental -nonrudimentary -nonrudimentarily -nonrudimentariness -nonruinable -nonruinous -nonruinously -nonruinousness -nonruling -nonruminant -Nonruminantia -nonruminating -nonruminatingly -nonrumination -nonruminative -nonrun -nonrupturable -nonrupture -nonrural -nonrurally -Non-russian -nonrustable -nonrustic -nonrustically -nonsabbatic -non-Sabbatic -non-Sabbatical -non-Sabbatically -nonsaccharin -nonsaccharine -nonsaccharinity -nonsacerdotal -nonsacerdotally -nonsacramental -nonsacred -nonsacredly -nonsacredness -nonsacrifice -nonsacrificial -nonsacrificing -nonsacrilegious -nonsacrilegiously -nonsacrilegiousness -nonsailor -nonsalability -nonsalable -nonsalably -nonsalaried -nonsale -nonsaleability -nonsaleable -nonsaleably -nonsaline -nonsalinity -nonsalubrious -nonsalubriously -nonsalubriousness -nonsalutary -nonsalutarily -nonsalutariness -nonsalutation -nonsalvageable -nonsalvation -nonsanative -nonsancties -nonsanctification -nonsanctimony -nonsanctimonious -nonsanctimoniously -nonsanctimoniousness -nonsanction -nonsanctity -nonsanctities -nonsane -nonsanely -nonsaneness -nonsanguine -nonsanguinely -nonsanguineness -nonsanity -Non-sanskritic -nonsaponifiable -nonsaponification -nonsaporific -nonsatiability -nonsatiable -nonsatiation -nonsatire -nonsatiric -nonsatirical -nonsatirically -nonsatiricalness -nonsatirizing -nonsatisfaction -nonsatisfying -nonsaturated -nonsaturation -nonsaving -nonsawing -Non-saxon -nonscalding -nonscaling -nonscandalous -nonscandalously -Non-scandinavian -nonscarcity -nonscarcities -nonscented -nonscheduled -nonschematic -nonschematically -nonschematized -nonschismatic -nonschismatical -nonschizophrenic -nonscholar -nonscholarly -nonscholastic -nonscholastical -nonscholastically -nonschooling -nonsciatic -nonscience -nonscientific -nonscientifically -nonscientist -nonscientists -nonscoring -nonscraping -nonscriptural -nonscripturalist -nonscrutiny -nonscrutinies -nonsculptural -nonsculpturally -nonsculptured -nonseasonable -nonseasonableness -nonseasonably -nonseasonal -nonseasonally -nonseasoned -nonsecession -nonsecessional -nonsecluded -nonsecludedly -nonsecludedness -nonseclusion -nonseclusive -nonseclusively -nonseclusiveness -nonsecrecy -nonsecrecies -nonsecret -nonsecretarial -nonsecretion -nonsecretionary -nonsecretive -nonsecretively -nonsecretly -nonsecretor -nonsecretory -nonsecretories -nonsectarian -nonsectional -nonsectionally -nonsectorial -nonsecular -nonsecurity -nonsecurities -nonsedentary -nonsedentarily -nonsedentariness -nonsedimentable -nonseditious -nonseditiously -nonseditiousness -nonsegmental -nonsegmentally -nonsegmentary -nonsegmentation -nonsegmented -nonsegregable -nonsegregated -nonsegregation -nonsegregative -nonseismic -nonseizure -nonselected -nonselection -nonselective -nonself -nonself-governing -nonselfregarding -nonselling -nonsemantic -nonsemantically -nonseminal -Non-semite -Non-semitic -nonsenatorial -nonsensate -nonsensation -nonsensationalistic -nonsense -nonsenses -nonsensibility -nonsensible -nonsensibleness -nonsensibly -nonsensic -nonsensical -nonsensicality -nonsensically -nonsensicalness -nonsensify -nonsensification -nonsensitive -nonsensitively -nonsensitiveness -nonsensitivity -nonsensitivities -nonsensitization -nonsensitized -nonsensitizing -nonsensory -nonsensorial -nonsensual -nonsensualistic -nonsensuality -nonsensually -nonsensuous -nonsensuously -nonsensuousness -nonsentence -nonsententious -nonsententiously -nonsententiousness -nonsentience -nonsentiency -nonsentient -nonsentiently -nonseparability -nonseparable -nonseparableness -nonseparably -nonseparating -nonseparation -nonseparatist -nonseparative -nonseptate -nonseptic -nonsequacious -nonsequaciously -nonsequaciousness -nonsequacity -nonsequent -nonsequential -nonsequentially -nonsequestered -nonsequestration -nonseraphic -nonseraphical -nonseraphically -nonserial -nonseriality -nonserially -nonseriate -nonseriately -nonserif -nonserious -nonseriously -nonseriousness -nonserous -nonserviceability -nonserviceable -nonserviceableness -nonserviceably -nonserviential -nonservile -nonservilely -nonservileness -nonsetter -nonsetting -nonsettlement -nonseverable -nonseverance -nonseverity -nonseverities -nonsexist -nonsexists -nonsexlinked -nonsex-linked -nonsexual -nonsexually -nonshaft -Non-shakespearean -non-Shakespearian -nonsharing -nonshatter -nonshattering -nonshedder -nonshedding -nonshipper -nonshipping -nonshredding -nonshrinkable -nonshrinking -nonshrinkingly -nonsibilance -nonsibilancy -nonsibilant -nonsibilantly -nonsiccative -nonsidereal -Non-sienese -nonsignable -nonsignatory -nonsignatories -nonsignature -nonsignificance -nonsignificancy -nonsignificant -nonsignificantly -nonsignification -nonsignificative -nonsilicate -nonsilicated -nonsiliceous -nonsilicious -nonsyllabic -nonsyllabicness -nonsyllogistic -nonsyllogistical -nonsyllogistically -nonsyllogizing -nonsilver -nonsymbiotic -nonsymbiotical -nonsymbiotically -nonsymbolic -nonsymbolical -nonsymbolically -nonsymbolicalness -nonsimilar -nonsimilarity -nonsimilarly -nonsimilitude -nonsymmetry -nonsymmetrical -nonsymmetries -nonsympathetic -nonsympathetically -nonsympathy -nonsympathies -nonsympathizer -nonsympathizing -nonsympathizingly -nonsymphonic -nonsymphonically -nonsymphonious -nonsymphoniously -nonsymphoniousness -nonsimplicity -nonsimplification -nonsymptomatic -nonsimular -nonsimulate -nonsimulation -nonsimulative -nonsync -nonsynchronal -nonsynchronic -nonsynchronical -nonsynchronically -nonsynchronous -nonsynchronously -nonsynchronousness -nonsyncopation -nonsyndicate -nonsyndicated -nonsyndication -nonsine -nonsynesthetic -nonsinging -nonsingle -nonsingleness -nonsingular -nonsingularity -nonsingularities -nonsinkable -nonsynodic -nonsynodical -nonsynodically -nonsynonymous -nonsynonymously -nonsynoptic -nonsynoptical -nonsynoptically -nonsyntactic -nonsyntactical -nonsyntactically -nonsyntheses -nonsynthesis -nonsynthesized -nonsynthetic -nonsynthetical -nonsynthetically -nonsyntonic -nonsyntonical -nonsyntonically -nonsinusoidal -nonsiphonage -Non-syrian -nonsystem -nonsystematic -nonsystematical -nonsystematically -nonsister -nonsitter -nonsitting -nonsked -nonskeds -nonskeletal -nonskeletally -nonskeptic -nonskeptical -nonskid -nonskidding -nonskier -nonskiers -nonskilled -nonskipping -nonslanderous -nonslaveholding -Non-slavic -nonslip -nonslippery -nonslipping -nonsludging -nonsmoker -nonsmokers -nonsmoking -nonsmutting -nonsober -nonsobering -nonsoberly -nonsoberness -nonsobriety -nonsociability -nonsociable -nonsociableness -nonsociably -nonsocial -nonsocialist -nonsocialistic -nonsociality -nonsocially -nonsocialness -nonsocietal -nonsociety -non-society -nonsociological -nonsolar -nonsoldier -nonsolicitation -nonsolicitous -nonsolicitously -nonsolicitousness -nonsolid -nonsolidarity -nonsolidification -nonsolidified -nonsolidifying -nonsolidly -nonsolids -nonsoluable -nonsoluble -nonsolubleness -nonsolubly -nonsolution -nonsolvability -nonsolvable -nonsolvableness -nonsolvency -nonsolvent -nonsonant -nonsophistic -nonsophistical -nonsophistically -nonsophisticalness -nonsoporific -nonsovereign -nonsovereignly -nonspacious -nonspaciously -nonspaciousness -nonspalling -Non-spanish -nonsparing -nonsparking -nonsparkling -Non-spartan -nonspatial -nonspatiality -nonspatially -nonspeaker -nonspeaking -nonspecial -nonspecialist -nonspecialists -nonspecialist's -nonspecialized -nonspecializing -nonspecially -nonspecie -nonspecifiable -nonspecific -nonspecifically -nonspecification -nonspecificity -nonspecified -nonspecious -nonspeciously -nonspeciousness -nonspectacular -nonspectacularly -nonspectral -nonspectrality -nonspectrally -nonspeculation -nonspeculative -nonspeculatively -nonspeculativeness -nonspeculatory -nonspheral -nonspheric -nonspherical -nonsphericality -nonspherically -nonspill -nonspillable -nonspinal -nonspiny -nonspinning -nonspinose -nonspinosely -nonspinosity -nonspiral -nonspirit -nonspirited -nonspiritedly -nonspiritedness -nonspiritous -nonspiritual -nonspirituality -nonspiritually -nonspiritualness -nonspirituness -nonspirituous -nonspirituousness -nonspontaneous -nonspontaneously -nonspontaneousness -nonspored -nonsporeformer -nonsporeforming -nonspore-forming -nonsporting -nonsportingly -nonspottable -nonsprouting -nonspurious -nonspuriously -nonspuriousness -nonstabile -nonstability -nonstable -nonstableness -nonstably -nonstainable -nonstainer -nonstaining -nonstampable -nonstandard -nonstandardization -nonstandardized -nonstanzaic -nonstaple -nonstarch -nonstarter -nonstarting -nonstatement -nonstatic -nonstationary -nonstationaries -nonstatistic -nonstatistical -nonstatistically -nonstative -nonstatutable -nonstatutory -nonstellar -nonstereotyped -nonstereotypic -nonstereotypical -nonsterile -nonsterilely -nonsterility -nonsterilization -nonsteroid -nonsteroidal -nonstick -nonsticky -nonstylization -nonstylized -nonstimulable -nonstimulant -nonstimulating -nonstimulation -nonstimulative -nonstyptic -nonstyptical -nonstipticity -nonstipulation -nonstock -Non-stoic -nonstoical -nonstoically -nonstoicalness -nonstooping -nonstop -nonstorable -nonstorage -nonstory -nonstowed -nonstrategic -nonstrategical -nonstrategically -nonstratified -nonstress -nonstretchable -nonstretchy -nonstriated -nonstrictness -nonstrictured -nonstriker -non-striker -nonstrikers -nonstriking -nonstringent -nonstriped -nonstrophic -nonstructural -nonstructurally -nonstructure -nonstructured -nonstudent -nonstudents -nonstudy -nonstudied -nonstudious -nonstudiously -nonstudiousness -nonstultification -nonsubconscious -nonsubconsciously -nonsubconsciousness -nonsubject -nonsubjected -nonsubjectification -nonsubjection -nonsubjective -nonsubjectively -nonsubjectiveness -nonsubjectivity -nonsubjugable -nonsubjugation -nonsublimation -nonsubliminal -nonsubliminally -nonsubmerged -nonsubmergence -nonsubmergibility -nonsubmergible -nonsubmersible -nonsubmissible -nonsubmission -nonsubmissive -nonsubmissively -nonsubmissiveness -nonsubordinate -nonsubordinating -nonsubordination -nonsubscriber -non-subscriber -nonsubscribers -nonsubscribing -nonsubscripted -nonsubscription -nonsubsidy -nonsubsidiary -nonsubsidiaries -nonsubsididies -nonsubsidies -nonsubsiding -nonsubsistence -nonsubsistent -nonsubstantial -non-substantial -nonsubstantialism -nonsubstantialist -nonsubstantiality -nonsubstantially -nonsubstantialness -nonsubstantiation -nonsubstantival -nonsubstantivally -nonsubstantive -nonsubstantively -nonsubstantiveness -nonsubstituted -nonsubstitution -nonsubstitutional -nonsubstitutionally -nonsubstitutionary -nonsubstitutive -nonsubtile -nonsubtilely -nonsubtileness -nonsubtility -nonsubtle -nonsubtleness -nonsubtlety -nonsubtleties -nonsubtly -nonsubtraction -nonsubtractive -nonsubtractively -nonsuburban -nonsubversion -nonsubversive -nonsubversively -nonsubversiveness -nonsuccess -nonsuccessful -nonsuccessfully -nonsuccession -nonsuccessional -nonsuccessionally -nonsuccessive -nonsuccessively -nonsuccessiveness -nonsuccor -nonsuccour -nonsuch -nonsuches -nonsuction -nonsuctorial -nonsudsing -nonsufferable -nonsufferableness -nonsufferably -nonsufferance -nonsuffrage -nonsugar -nonsugars -nonsuggestible -nonsuggestion -nonsuggestive -nonsuggestively -nonsuggestiveness -nonsuit -nonsuited -nonsuiting -nonsuits -nonsulfurous -nonsulphurous -nonsummons -nonsupervision -nonsupplemental -nonsupplementally -nonsupplementary -nonsupplicating -nonsupplication -nonsupport -nonsupportability -nonsupportable -nonsupportableness -nonsupportably -nonsupporter -nonsupporting -nonsupports -nonsupposed -nonsupposing -nonsuppositional -nonsuppositionally -nonsuppositive -nonsuppositively -nonsuppressed -nonsuppression -nonsuppressive -nonsuppressively -nonsuppressiveness -nonsuppurative -nonsupression -nonsurface -nonsurgical -nonsurgically -nonsurrealistic -nonsurrealistically -nonsurrender -nonsurvival -nonsurvivor -nonsusceptibility -nonsusceptible -nonsusceptibleness -nonsusceptibly -nonsusceptiness -nonsusceptive -nonsusceptiveness -nonsusceptivity -nonsuspect -nonsuspended -nonsuspension -nonsuspensive -nonsuspensively -nonsuspensiveness -nonsustainable -nonsustained -nonsustaining -nonsustenance -nonswearer -nonswearing -nonsweating -Non-swedish -nonswimmer -nonswimming -Non-swiss -nontabular -nontabularly -nontabulated -nontactic -nontactical -nontactically -nontactile -nontactility -nontalented -nontalkative -nontalkatively -nontalkativeness -nontan -nontangental -nontangential -nontangentially -nontangible -nontangibleness -nontangibly -nontannic -nontannin -nontanning -nontarget -nontariff -nontarnishable -nontarnished -nontarnishing -nontarred -Non-tartar -nontautological -nontautologically -nontautomeric -nontautomerizable -nontax -nontaxability -nontaxable -nontaxableness -nontaxably -nontaxation -nontaxer -nontaxes -nontaxonomic -nontaxonomical -nontaxonomically -nonteachability -nonteachable -nonteachableness -nonteachably -nonteacher -nonteaching -nontechnical -nontechnically -nontechnicalness -nontechnologic -nontechnological -nontechnologically -nonteetotaler -nonteetotalist -nontelegraphic -nontelegraphical -nontelegraphically -nonteleological -nonteleologically -nontelepathic -nontelepathically -nontelephonic -nontelephonically -nontelescopic -nontelescoping -nontelic -nontemperable -nontemperamental -nontemperamentally -nontemperate -nontemperately -nontemperateness -nontempered -nontemporal -nontemporally -nontemporary -nontemporarily -nontemporariness -nontemporizing -nontemporizingly -nontemptation -nontenability -nontenable -nontenableness -nontenably -nontenant -nontenantable -nontensile -nontensility -nontentative -nontentatively -nontentativeness -nontenure -non-tenure -nontenured -nontenurial -nontenurially -nonterm -non-term -nonterminability -nonterminable -nonterminableness -nonterminably -nonterminal -nonterminally -nonterminals -nonterminal's -nonterminating -nontermination -nonterminative -nonterminatively -nonterminous -nonterrestrial -nonterritorial -nonterritoriality -nonterritorially -nontestable -nontestamentary -nontesting -Non-teuton -Non-teutonic -nontextual -nontextually -nontextural -nontexturally -nontheatric -nontheatrical -nontheatrically -nontheistic -nontheistical -nontheistically -nonthematic -nonthematically -nontheocratic -nontheocratical -nontheocratically -nontheologic -nontheological -nontheologically -nontheoretic -nontheoretical -nontheoretically -nontheosophic -nontheosophical -nontheosophically -nontherapeutic -nontherapeutical -nontherapeutically -nonthermal -nonthermally -nonthermoplastic -nonthinker -nonthinking -nonthoracic -nonthoroughfare -nonthreaded -nonthreatening -nonthreateningly -nontidal -nontillable -nontimbered -nontinted -nontyphoidal -nontypical -nontypically -nontypicalness -nontypographic -nontypographical -nontypographically -nontyrannic -nontyrannical -nontyrannically -nontyrannicalness -nontyrannous -nontyrannously -nontyrannousness -nontitaniferous -nontitle -nontitled -nontitular -nontitularly -nontolerable -nontolerableness -nontolerably -nontolerance -nontolerant -nontolerantly -nontolerated -nontoleration -nontolerative -nontonal -nontonality -nontoned -nontonic -nontopographical -nontortuous -nontortuously -nontotalitarian -nontourist -nontoxic -nontoxically -nontraceability -nontraceable -nontraceableness -nontraceably -nontractability -nontractable -nontractableness -nontractably -nontraction -nontrade -nontrader -nontrading -nontradition -nontraditional -nontraditionalist -nontraditionalistic -nontraditionally -nontraditionary -nontragedy -nontragedies -nontragic -nontragical -nontragically -nontragicalness -nontrailing -nontrained -nontraining -nontraitorous -nontraitorously -nontraitorousness -nontranscribing -nontranscription -nontranscriptive -nontransferability -nontransferable -nontransference -nontransferential -nontransformation -nontransforming -nontransgression -nontransgressive -nontransgressively -nontransience -nontransiency -nontransient -nontransiently -nontransientness -nontransitional -nontransitionally -nontransitive -nontransitively -nontransitiveness -nontranslocation -nontranslucency -nontranslucent -nontransmission -nontransmittal -nontransmittance -nontransmittible -nontransparence -nontransparency -nontransparent -nontransparently -nontransparentness -nontransportability -nontransportable -nontransportation -nontransposable -nontransposing -nontransposition -nontraveler -nontraveling -nontraveller -nontravelling -nontraversable -nontreasonable -nontreasonableness -nontreasonably -nontreatable -nontreated -nontreaty -nontreaties -nontreatment -nontrespass -nontrial -nontribal -nontribally -nontribesman -nontribesmen -nontributary -nontrier -nontrigonometric -nontrigonometrical -nontrigonometrically -non-Trinitarian -nontrivial -nontriviality -nontronite -nontropic -nontropical -nontropically -nontroubling -nontruancy -nontruant -nontrump -nontrunked -nontrust -nontrusting -nontruth -nontruths -nontubercular -nontubercularly -nontuberculous -nontubular -nontumorous -nontumultuous -nontumultuously -nontumultuousness -nontuned -nonturbinate -nonturbinated -non-Turk -non-Turkic -Non-turkish -Non-tuscan -nontutorial -nontutorially -non-U -nonubiquitary -nonubiquitous -nonubiquitously -nonubiquitousness -Non-ukrainian -nonulcerous -nonulcerously -nonulcerousness -nonultrafilterable -nonumbilical -nonumbilicate -nonumbrellaed -Non-umbrian -nonunanimous -nonunanimously -nonunanimousness -nonuncial -nonundergraduate -nonunderstandable -nonunderstanding -nonunderstandingly -nonunderstood -nonundulant -nonundulate -nonundulating -nonundulatory -nonunification -nonunified -nonuniform -nonuniformist -nonuniformitarian -nonuniformity -nonuniformities -nonuniformly -nonunion -non-union -nonunionism -nonunionist -nonunions -nonunique -nonuniquely -nonuniqueness -nonunison -nonunitable -nonunitarian -Non-unitarian -nonuniteable -nonunited -nonunity -nonuniting -nonuniversal -nonuniversalist -Non-universalist -nonuniversality -nonuniversally -nonuniversity -nonuniversities -nonupholstered -nonuple -nonuples -nonuplet -nonuplicate -nonupright -nonuprightly -nonuprightness -Non-uralian -nonurban -nonurbanite -nonurgent -nonurgently -nonusable -nonusage -nonuse -nonuseable -nonuser -non-user -nonusers -nonuses -nonusing -nonusurious -nonusuriously -nonusuriousness -nonusurping -nonusurpingly -nonuterine -nonutile -nonutilitarian -nonutility -nonutilities -nonutilization -nonutilized -nonutterance -nonvacancy -nonvacancies -nonvacant -nonvacantly -nonvaccination -nonvacillating -nonvacillation -nonvacua -nonvacuous -nonvacuously -nonvacuousness -nonvacuum -nonvacuums -nonvaginal -nonvagrancy -nonvagrancies -nonvagrant -nonvagrantly -nonvagrantness -nonvalent -nonvalid -nonvalidation -nonvalidity -nonvalidities -nonvalidly -nonvalidness -nonvalorous -nonvalorously -nonvalorousness -nonvaluable -nonvaluation -nonvalue -nonvalued -nonvalve -nonvanishing -nonvaporosity -nonvaporous -nonvaporously -nonvaporousness -nonvariability -nonvariable -nonvariableness -nonvariably -nonvariance -nonvariant -nonvariation -nonvaried -nonvariety -nonvarieties -nonvarious -nonvariously -nonvariousness -nonvascular -non-vascular -nonvascularly -nonvasculose -nonvasculous -nonvassal -nonvector -Non-vedic -nonvegetable -nonvegetation -nonvegetative -nonvegetatively -nonvegetativeness -nonvegetive -nonvehement -nonvehemently -nonvenal -nonvenally -nonvendibility -nonvendible -nonvendibleness -nonvendibly -nonvenereal -Non-venetian -nonvenomous -nonvenomously -nonvenomousness -nonvenous -nonvenously -nonvenousness -nonventilation -nonventilative -nonveracious -nonveraciously -nonveraciousness -nonveracity -nonverbal -nonverbalized -nonverbally -nonverbosity -nonverdict -Non-vergilian -nonverifiable -nonverification -nonveritable -nonveritableness -nonveritably -nonverminous -nonverminously -nonverminousness -nonvernacular -nonversatility -nonvertebral -nonvertebrate -nonvertical -nonverticality -nonvertically -nonverticalness -nonvesicular -nonvesicularly -nonvesting -nonvesture -nonveteran -nonveterinary -nonveterinaries -nonvexatious -nonvexatiously -nonvexatiousness -nonviability -nonviable -nonvibratile -nonvibrating -nonvibration -nonvibrator -nonvibratory -nonvicarious -nonvicariously -nonvicariousness -nonvictory -nonvictories -nonvigilance -nonvigilant -nonvigilantly -nonvigilantness -nonvillager -nonvillainous -nonvillainously -nonvillainousness -nonvindicable -nonvindication -nonvinosity -nonvinous -nonvintage -nonviolability -nonviolable -nonviolableness -nonviolably -nonviolation -nonviolative -nonviolence -nonviolences -nonviolent -nonviolently -nonviral -nonvirginal -nonvirginally -Non-virginian -nonvirile -nonvirility -nonvirtue -nonvirtuous -nonvirtuously -nonvirtuousness -nonvirulent -nonvirulently -nonviruliferous -nonvisaed -nonvisceral -nonviscid -nonviscidity -nonviscidly -nonviscidness -nonviscous -nonviscously -nonviscousness -nonvisibility -nonvisibilities -nonvisible -nonvisibly -nonvisional -nonvisionary -nonvisitation -nonvisiting -nonvisual -nonvisualized -nonvisually -nonvital -nonvitality -nonvitalized -nonvitally -nonvitalness -nonvitiation -nonvitreous -nonvitrified -nonvitriolic -nonvituperative -nonvituperatively -nonviviparity -nonviviparous -nonviviparously -nonviviparousness -nonvocable -nonvocal -nonvocalic -nonvocality -nonvocalization -nonvocally -nonvocalness -nonvocational -nonvocationally -nonvoice -nonvoid -nonvoidable -nonvolant -nonvolatile -nonvolatileness -nonvolatility -nonvolatilizable -nonvolatilized -nonvolatiness -nonvolcanic -nonvolition -nonvolitional -nonvolubility -nonvoluble -nonvolubleness -nonvolubly -nonvoluntary -nonvortical -nonvortically -nonvoter -nonvoters -nonvoting -nonvulcanizable -nonvulcanized -nonvulgarity -nonvulgarities -nonvulval -nonvulvar -nonvvacua -nonwaiver -nonwalking -nonwar -nonwarrantable -nonwarrantably -nonwarranted -nonwashable -nonwasting -nonwatertight -nonwavering -nonwaxing -nonweakness -nonwelcome -nonwelcoming -Non-welsh -nonwestern -nonwetted -nonwhite -non-White -nonwhites -nonwinged -nonwithering -nonwonder -nonwondering -nonwoody -nonword -nonwords -nonworker -nonworkers -nonworking -nonworship -nonwoven -nonwrinkleable -nonwrite -nonzealous -nonzealously -nonzealousness -nonzebra -nonzero -Non-zionist -nonzodiacal -nonzonal -nonzonally -nonzonate -nonzonated -nonzoologic -nonzoological -nonzoologically -noo -noodge -noodged -noodges -noodging -noodle -noodled -noodledom -noodlehead -noodle-head -noodleism -noodles -noodling -nook -nooked -nookery -nookeries -nooky -nookie -nookier -nookies -nookiest -nooking -nooklet -nooklike -nooks -nook's -Nooksack -nook-shotten -noology -noological -noologist -noometry -noon -Noonan -Noonberg -noonday -noondays -no-one -nooned -noonflower -nooning -noonings -noonish -noonlight -noon-light -noonlit -noonmeat -noons -noonstead -noontide -noontides -noontime -noontimes -noonwards -noop -Noordbrabant -Noordholland -nooscopic -noose -noosed -nooser -noosers -nooses -noosing -noosphere -Nootka -Nootkas -NOP -nopal -Nopalea -nopalry -nopals -no-par -no-par-value -nope -nopinene -no-place -Nor -nor' -nor- -Nor. -Nora -NORAD -noradrenalin -noradrenaline -noradrenergic -Norah -norard -norate -noration -norbergite -Norbert -Norbertine -Norby -Norbie -Norborne -norcamphane -Norcatur -Norco -Norcross -Nord -Nordau -nordcaper -Norden -nordenfelt -nordenskioldine -Nordenskj -Nordenskjold -Nordgren -Nordhausen -Nordheim -Nordhoff -Nordic -Nordica -Nordicism -Nordicist -Nordicity -Nordicization -Nordicize -Nordin -Nordine -Nord-lais -Nordland -Nordman -nordmarkite -NORDO -Nordrhein-Westfalen -Nordstrom -Nore -Norean -noreast -nor'east -noreaster -nor'easter -Noreen -norelin -Norene -norepinephrine -Norfolk -Norfolkian -Norford -Norge -NORGEN -norgine -nori -noria -norias -Noric -norice -Noricum -norie -norimon -Norina -Norine -norit -Norita -norite -norites -noritic -norito -Nork -norkyn -norland -norlander -norlandism -norlands -Norlene -norleucine -Norlina -Norling -Norm -Norma -normal -normalacy -normalcy -normalcies -Normalie -normalisation -normalise -normalised -normalising -normalism -normalist -normality -normalities -normalizable -normalization -normalizations -normalize -normalized -normalizer -normalizes -normalizing -normally -normalness -normals -Normalville -Norman -Normand -Normandy -Normanesque -Norman-French -Normangee -Normanise -Normanish -Normanism -Normanist -Normanization -Normanize -Normanizer -Normanly -Normanna -Normannic -normans -Normantown -normated -normative -normatively -normativeness -normed -Normi -Normy -Normie -NORML -normless -normoblast -normoblastic -normocyte -normocytic -normotensive -normothermia -normothermic -norms -norm's -Norn -Norna -nornicotine -Nornis -nor-noreast -nornorwest -Norns -noropianic -Norphlet -norpinic -Norri -Norry -Norridgewock -Norrie -Norris -Norristown -Norrkoping -Norrkping -Norroy -Norroway -Norrv -Norse -Norse-american -norsel -Norseland -norseled -norseler -norseling -norselled -norselling -Norseman -norsemen -Norsk -nortelry -North -Northallerton -Northam -Northampton -Northamptonshire -Northants -north'ard -Northborough -northbound -Northcliffe -northcountryman -north-countryman -north-countriness -Northeast -north-east -northeaster -north-easter -northeasterly -north-easterly -northeastern -north-eastern -northeasterner -northeasternmost -northeasters -northeasts -northeastward -north-eastward -northeastwardly -northeastwards -Northey -northen -north-end -Northener -northeners -norther -northered -northering -northerly -northerlies -northerliness -Northern -Northerner -northerners -Northernise -Northernised -Northernising -Northernize -northernly -northernmost -northernness -northerns -northers -northest -northfieldite -north-following -northing -northings -Northington -Northland -northlander -northlight -north-light -Northman -Northmen -northmost -northness -north-northeast -north-north-east -north-northeastward -north-northeastwardly -north-northeastwards -north-northwest -north-north-west -north-northwestward -north-northwestwardly -north-northwestwards -north-polar -Northport -north-preceding -Northrop -Northrup -norths -north-seeking -north-sider -Northumb -Northumber -Northumberland -Northumbria -Northumbrian -northupite -Northvale -Northville -Northway -northward -northwardly -northwards -Northwest -north-west -northwester -north-wester -northwesterly -north-westerly -northwestern -north-western -northwesterner -northwests -northwestward -north-westward -northwestwardly -northwestwards -Northwich -Northwoods -Norty -Norton -Nortonville -nortriptyline -Norumbega -Norval -Norvall -Norvan -Norvell -Norvelt -Norven -Norvil -Norvin -Norvol -Norvun -Norw -Norw. -Norway -Norwalk -Norward -norwards -Norwegian -norwegians -norweyan -Norwell -norwest -nor'west -nor'-west -norwester -nor'wester -nor'-wester -norwestward -Norwich -Norwood -Norword -NOS -nos- -Nosairi -Nosairian -nosarian -NOSC -nose -nosean -noseanite -nosebag -nose-bag -nosebags -noseband -nose-band -nosebanded -nosebands -nose-belled -nosebleed -nose-bleed -nosebleeds -nosebone -noseburn -nosed -nosedive -nose-dive -nose-dived -nose-diving -nose-dove -nosee-um -nosegay -nosegaylike -nosegays -nose-grown -nose-heavy -noseherb -nose-high -nosehole -nosey -nose-leafed -nose-led -noseless -noselessly -noselessness -noselike -noselite -Nosema -Nosematidae -nose-nippers -noseover -nosepiece -nose-piece -nose-piercing -nosepinch -nose-pipe -nose-pulled -noser -nose-ring -noses -nose-shy -nosesmart -nose-smart -nosethirl -nose-thirl -nose-thumbing -nose-tickling -nosetiology -nose-up -nosewards -nosewheel -nosewing -nosewise -nose-wise -nosewort -nosh -noshed -nosher -noshers -noshes -noshing -no-show -nosh-up -nosy -no-side -nosier -nosiest -nosig -nosily -nosine -nosiness -nosinesses -nosing -nosings -nosism -no-system -nosite -noso- -nosochthonography -nosocomial -nosocomium -nosogenesis -nosogenetic -nosogeny -nosogenic -nosogeography -nosogeographic -nosogeographical -nosographer -nosography -nosographic -nosographical -nosographically -nosographies -nosohaemia -nosohemia -nosology -nosologic -nosological -nosologically -nosologies -nosologist -nosomania -nosomycosis -nosonomy -nosophyte -nosophobia -nosopoetic -nosopoietic -nosotaxy -nosotrophy -nossel -nostalgy -nostalgia -nostalgias -nostalgic -nostalgically -nostalgies -noster -nostic -Nostoc -Nostocaceae -nostocaceous -nostochine -nostocs -nostology -nostologic -nostomania -nostomanic -Nostradamic -Nostradamus -Nostrand -nostrificate -nostrification -nostril -nostriled -nostrility -nostrilled -nostrils -nostril's -nostrilsome -nostrum -nostrummonger -nostrummongery -nostrummongership -nostrums -Nosu -no-surrender -not -not- -nota -notabene -notabilia -notability -notabilities -notable -notableness -notables -notably -notacanthid -Notacanthidae -notacanthoid -notacanthous -Notacanthus -notaeal -notaeum -notal -notalgia -notalgic -Notalia -notan -notanduda -notandum -notandums -notanencephalia -notary -notarial -notarially -notariate -notaries -notarikon -notaryship -notarization -notarizations -notarize -notarized -notarizes -notarizing -Notasulga -notate -notated -notates -notating -notation -notational -notations -notation's -notative -notator -notaulix -not-being -notch -notchback -notchboard -notched -notched-leaved -notchel -notcher -notchers -notches -notchful -notchy -notching -notch-lobed -notchweed -notchwing -notchwort -not-delivery -note -note-blind -note-blindness -notebook -note-book -notebooks -notebook's -notecase -notecases -noted -notedly -notedness -notehead -noteholder -note-holder -notekin -Notelaea -noteless -notelessly -notelessness -notelet -noteman -notemigge -notemugge -notencephalocele -notencephalus -notepad -notepads -notepaper -note-paper -note-perfect -not-ephemeral -noter -noters -noterse -notes -notewise -noteworthy -noteworthily -noteworthiness -not-good -nothal -notharctid -Notharctidae -Notharctus -nother -nothing -nothingarian -nothingarianism -nothingism -nothingist -nothingize -nothingless -nothingly -nothingness -nothingnesses -nothingology -nothings -Nothofagus -Notholaena -no-thoroughfare -nothosaur -Nothosauri -nothosaurian -Nothosauridae -Nothosaurus -nothous -nothus -Noti -noticable -notice -noticeabili -noticeability -noticeable -noticeableness -noticeably -noticed -noticer -notices -noticing -Notidani -notidanian -notidanid -Notidanidae -notidanidan -notidanoid -Notidanus -notify -notifiable -notification -notificational -notifications -notified -notifyee -notifier -notifiers -notifies -notifying -no-tillage -noting -notion -notionable -notional -notionalist -notionality -notionally -notionalness -notionary -notionate -notioned -notionist -notionless -notions -Notiosorex -NOTIS -notist -notitia -notition -Notkerian -not-living -noto- -notocentrous -notocentrum -notochord -notochordal -notocord -notodontian -notodontid -Notodontidae -notodontoid -Notogaea -Notogaeal -Notogaean -Notogaeic -Notogea -notoire -notommatid -Notommatidae -Notonecta -notonectal -notonectid -Notonectidae -notopodial -notopodium -notopterid -Notopteridae -notopteroid -Notopterus -Notorhynchus -notorhizal -Notoryctes -notoriety -notorieties -notorious -notoriously -notoriousness -Notornis -Notostraca -notothere -Nototherium -Nototrema -nototribe -notoungulate -notour -notourly -not-out -Notre -Notrees -Notropis -no-trump -no-trumper -nots -notself -not-self -not-soul -Nottage -Nottawa -Nottingham -Nottinghamshire -Nottoway -Notts -notturni -notturno -notum -Notungulata -notungulate -Notus -notwithstanding -nou -Nouakchott -nouche -nougat -nougatine -nougats -nought -noughty -noughtily -noughtiness -noughtly -noughts -noughts-and-crosses -nouille -nouilles -nould -Nouma -Noumea -noumeaite -noumeite -noumena -noumenal -noumenalism -noumenalist -noumenality -noumenalize -noumenally -noumenism -noumenon -noumenona -noummos -noun -nounal -nounally -nounize -nounless -nouns -noun's -noup -nourice -nourish -nourishable -nourished -nourisher -nourishers -nourishes -nourishing -nourishingly -nourishment -nourishments -nouriture -nous -nousel -nouses -nouther -nouveau -nouveau-riche -nouveaute -nouveautes -nouveaux -nouvelle -Nouvelle-Caldonie -nouvelles -Nov -Nov. -Nova -Novachord -novaculite -novae -Novah -Novak -novale -novalia -novalike -Novalis -Novanglian -Novanglican -novantique -Novara -novarsenobenzene -novas -novate -Novatian -Novatianism -Novatianist -novation -novations -novative -Novato -novator -novatory -novatrix -novcic -noveboracensis -novel -novela -novelant -novelcraft -novel-crazed -noveldom -novelese -novelesque -novelet -noveletist -novelette -noveletter -novelettes -noveletty -novelettish -novelettist -Novelia -novelisation -novelise -novelised -novelises -novelish -novelising -novelism -novelist -novelistic -novelistically -novelists -novelist's -novelivelle -novelization -novelizations -novelize -novelized -novelizes -novelizing -novella -novellae -novellas -novelle -novelless -novelly -novellike -Novello -novel-making -novelmongering -novelness -novel-purchasing -novel-reading -novelry -Novels -novel's -novel-sick -novelty -novelties -novelty's -novelwright -novel-writing -novem -novemarticulate -November -Novemberish -novembers -november's -novemcostate -novemdecillion -novemdecillionth -novemdigitate -novemfid -novemlobate -novemnervate -novemperfoliate -novena -novenae -novenary -novenas -novendial -novene -novennial -novercal -noverify -noverint -Nov-Esperanto -Novgorod -Novi -Novia -Novial -novice -novicehood -novicelike -novicery -novices -novice's -noviceship -noviciate -Novick -Novikoff -novillada -novillero -novillo -novilunar -Novinger -novity -novitial -novitiate -novitiates -novitiateship -novitiation -novitious -Nov-Latin -novo -novobiocin -Novocain -Novocaine -Novocherkassk -novodamus -Novokuznetsk -Novonikolaevsk -novorolsky -Novorossiisk -Novoshakhtinsk -Novosibirsk -Novotny -Novo-zelanian -Novum -novus -now -now-accumulated -nowaday -now-a-day -nowadays -now-a-days -noway -noways -nowanights -Nowata -now-being -now-big -now-borne -nowch -now-dead -nowder -nowed -Nowel -Nowell -now-existing -now-fallen -now-full -nowhat -nowhen -nowhence -nowhere -nowhere-dense -nowhereness -nowheres -nowhit -nowhither -nowy -nowise -now-known -now-lost -now-neglected -nowness -Nowroze -nows -nowt -nowthe -nowther -nowtherd -nowts -now-waning -Nox -noxa -noxal -noxally -Noxapater -Noxen -noxial -noxious -noxiously -noxiousness -Noxon -Nozi -Nozicka -nozzle -nozzler -nozzles -NP -NPA -Npaktos -NPC -npeel -npfx -NPG -NPI -NPL -n-ple -n-ply -NPN -NPP -NPR -NPRM -NPSI -Npt -NPV -NQ -NQS -nr -nr. -NRA -NRAB -NRAO -nrarucu -NRC -NRDC -NRE -NREN -nritta -NRL -NRM -NRO -NROFF -NRPB -NRZ -NRZI -NS -n's -NSA -NSAP -ns-a-vis -NSB -NSC -NSCS -NSDSSO -NSE -NSEC -NSEL -NSEM -NSF -NSFNET -N-shaped -N-shell -NSO -NSP -NSPCC -NSPMP -NSRB -NSSDC -NST -NSTS -NSU -NSUG -NSW -NSWC -NT --n't -NTEC -NTEU -NTF -Nth -NTIA -n-type -NTIS -NTN -NTO -NTP -NTR -NTS -NTSB -NTSC -NTT -n-tuple -n-tuply -NU -NUA -NUAAW -nuadu -nuagism -nuagist -nuance -nuanced -nuances -nuancing -Nuangola -Nu-arawak -nub -Nuba -nubby -nubbier -nubbiest -nubbin -nubbiness -nubbins -nubble -nubbled -nubbles -nubbly -nubblier -nubbliest -nubbliness -nubbling -nubecula -nubeculae -Nubia -Nubian -nubias -Nubieber -nubiferous -nubiform -nubigenous -nubilate -nubilation -nubile -nubility -nubilities -nubilose -nubilous -Nubilum -Nubium -nubs -nucal -nucament -nucamentaceous -nucellar -nucelli -nucellus -nucha -nuchae -nuchal -nuchale -nuchalgia -nuchals -nuci- -nuciculture -nuciferous -nuciform -nucin -nucivorous -Nucla -nucle- -nucleal -nucleant -nuclear -nucleary -nuclease -nucleases -nucleate -nucleated -nucleates -nucleating -nucleation -nucleations -nucleator -nucleators -nucleclei -nuclei -nucleic -nucleiferous -nucleiform -nuclein -nucleinase -nucleins -nucleization -nucleize -nucleli -nucleo- -nucleoalbumin -nucleoalbuminuria -nucleocapsid -nucleofugal -nucleohyaloplasm -nucleohyaloplasma -nucleohistone -nucleoid -nucleoidioplasma -nucleolar -nucleolate -nucleolated -nucleole -nucleoles -nucleoli -nucleolini -nucleolinus -nucleolysis -nucleolocentrosome -nucleoloid -nucleolus -nucleomicrosome -nucleon -nucleone -nucleonic -nucleonics -nucleons -nucleopetal -nucleophile -nucleophilic -nucleophilically -nucleophilicity -nucleoplasm -nucleoplasmatic -nucleoplasmic -nucleoprotein -nucleosid -nucleosidase -nucleoside -nucleosynthesis -nucleotidase -nucleotide -nucleotides -nucleotide's -nucleus -nucleuses -nuclide -nuclides -nuclidic -Nucula -Nuculacea -nuculane -nuculania -nuculanium -nucule -nuculid -Nuculidae -nuculiform -nuculoid -Nuda -nudate -nudation -Nudd -nuddy -nuddle -nude -nudely -nudeness -nudenesses -Nudens -nuder -nudes -nudest -nudge -nudged -nudger -nudgers -nudges -nudging -nudi- -nudibranch -Nudibranchia -nudibranchian -nudibranchiate -nudicaudate -nudicaul -nudicaulous -nudie -nudies -nudifier -nudiflorous -nudiped -nudish -nudism -nudisms -nudist -nudists -nuditarian -nudity -nudities -nudnick -nudnicks -nudnik -nudniks -nudophobia -nudum -nudzh -nudzhed -nudzhes -nudzhing -Nueces -Nuevo -Nuffield -Nufud -nugacious -nugaciousness -nugacity -nugacities -nugae -nugament -nugator -nugatory -nugatorily -nugatoriness -Nugent -nuggar -nugget -nuggety -nuggets -nugi- -nugify -nugilogue -NUGMW -Nugumiut -NUI -nuisance -nuisancer -nuisances -nuisance's -nuisome -Nuits-Saint-Georges -Nuits-St-Georges -NUJ -nuke -nuked -nukes -nuking -Nuku'alofa -Nukuhivan -Nukus -NUL -Nuli -null -nullable -nullah -nullahs -nulla-nulla -nullary -nullbiety -nulled -nullibicity -nullibiety -nullibility -nullibiquitous -nullibist -nullify -nullification -nullificationist -nullifications -nullificator -nullifidian -nullifidianism -nullified -nullifier -nullifiers -nullifies -nullifying -nulling -nullipara -nulliparae -nulliparity -nulliparous -nullipennate -Nullipennes -nulliplex -nullipore -nulliporous -nullism -nullisome -nullisomic -nullity -nullities -nulliverse -null-manifold -nullo -nullos -nulls -Nullstellensatz -nullum -nullus -NUM -Numa -numac -Numantia -Numantine -Numanus -numb -numbat -numbats -numbed -numbedness -number -numberable -numbered -numberer -numberers -numberful -numbering -numberings -numberless -numberlessness -numberous -numberplate -Numbers -numbersome -numbest -numbfish -numb-fish -numbfishes -numbing -numbingly -numble -numbles -numbly -numbness -numbnesses -numbs -numbskull -numda -numdah -numen -Numenius -numerable -numerableness -numerably -numeracy -numeral -numerally -numerals -numeral's -numerant -numerary -numerate -numerated -numerates -numerating -numeration -numerations -numerative -numerator -numerators -numerator's -numeric -numerical -numerically -numericalness -numerics -Numerische -numerist -numero -numerology -numerological -numerologies -numerologist -numerologists -numeros -numerose -numerosity -numerous -numerously -numerousness -Numida -Numidae -Numidia -Numidian -Numididae -Numidinae -numina -Numine -numinism -numinous -numinouses -numinously -numinousness -numis -numis. -numismatic -numismatical -numismatically -numismatician -numismatics -numismatist -numismatists -numismatography -numismatology -numismatologist -Numitor -nummary -nummi -nummiform -nummular -nummulary -Nummularia -nummulated -nummulation -nummuline -Nummulinidae -nummulite -Nummulites -nummulitic -Nummulitidae -nummulitoid -nummuloidal -nummus -numnah -nump -numps -numskull -numskulled -numskulledness -numskullery -numskullism -numskulls -numud -Nun -Nunapitchuk -nunatak -nunataks -nunation -nunbird -nun-bird -nun-buoy -nunc -nunce -nunch -nunchaku -nuncheon -nunchion -Nunci -Nuncia -Nunciata -nunciate -nunciative -nunciatory -nunciature -nuncio -nuncios -nuncioship -nuncius -nuncle -nuncles -nuncupate -nuncupated -nuncupating -nuncupation -nuncupative -nuncupatively -nuncupatory -Nunda -nundinal -nundination -nundine -Nuneaton -Nunes -Nunez -nunhood -Nunica -Nunki -nunky -nunks -nunlet -nunlike -Nunn -nunnari -nunnated -nunnation -nunned -Nunnelly -Nunnery -nunneries -nunni -nunnify -nunning -nunnish -nunnishness -nunquam -nunry -nuns -nun's -nunship -nunting -nuntius -Nunu -NUPE -Nupercaine -Nuphar -nupson -nuptial -nuptiality -nuptialize -nuptially -nuptials -nuque -NUR -nuragh -nuraghe -nuraghes -nuraghi -NURBS -nurd -nurds -Nureyev -Nuremberg -nurhag -Nuri -Nuriel -Nuris -Nuristan -nurl -nurled -nurly -nurling -nurls -Nurmi -nurry -nursable -Nurse -nurse-child -nursed -nursedom -nurse-father -nursegirl -nursehound -nursekeeper -nursekin -nurselet -nurselike -nurseling -nursemaid -nursemaids -nurse-mother -nurser -nursery -nurserydom -nurseries -nurseryful -nurserymaid -nurserymaids -nurseryman -nurserymen -nursery's -nursers -nurses -nursetender -nurse-tree -nursy -nursing -nursingly -nursings -nursle -nursling -nurslings -nurturable -nurtural -nurturance -nurturant -nurture -nurtured -nurtureless -nurturer -nurturers -nurtures -nurtureship -nurturing -NUS -Nusairis -Nusakan -NUSC -nusfiah -Nusku -Nussbaum -NUT -nutant -nutarian -nutate -nutated -nutates -nutating -nutation -nutational -nutations -nutbreaker -nutbrown -nut-brown -nutcake -nutcase -nutcrack -nut-crack -nutcracker -nut-cracker -nutcrackery -nutcrackers -nut-cracking -nutgall -nut-gall -nutgalls -nut-gathering -nutgrass -nut-grass -nutgrasses -nuthatch -nuthatches -nuthook -nut-hook -nuthouse -nuthouses -nutjobber -Nutley -nutlet -nutlets -nutlike -nutmeat -nutmeats -nutmeg -nutmegged -nutmeggy -nutmegs -nut-oil -nutpecker -nutpick -nutpicks -nutramin -nutria -nutrias -nutrice -nutricial -nutricism -nutriculture -nutrient -nutrients -nutrify -nutrilite -nutriment -nutrimental -nutriments -Nutrioso -nutritial -nutrition -nutritional -nutritionally -nutritionary -nutritionist -nutritionists -nutritions -nutritious -nutritiously -nutritiousness -nutritive -nutritively -nutritiveness -nutritory -nutriture -nuts -nut's -nutsedge -nutsedges -nutseed -nut-shaped -nutshell -nut-shelling -nutshells -nutsy -nutsier -nutsiest -nut-sweet -Nuttallia -nuttalliasis -nuttalliosis -nut-tapper -nutted -Nutter -nuttery -nutters -nutty -nutty-brown -nuttier -nuttiest -nutty-flavored -nuttily -nutty-looking -nuttiness -Nutting -nuttings -nuttish -nuttishness -nut-toasting -nut-tree -Nuttsville -nut-weevil -nutwood -nutwoods -nu-value -NUWW -nuzzer -nuzzerana -Nuzzi -nuzzle -nuzzled -nuzzler -nuzzlers -nuzzles -nuzzling -NV -NVH -NVLAP -NVRAM -NW -NWA -NWbn -NWbW -NWC -NWLB -NWS -NWT -NXX -NZ -NZBC -o -O' -O'- -o- --o- -O. -O.B. -O.C. -O.D. -o.e. -O.E.D. -O.F.M. -O.G. -O.P. -o.r. -O.S. -O.S.A. -O.S.B. -O.S.D. -O.S.F. -O.T.C. -o/c -O/S -O2 -OA -OACIS -Oacoma -oad -oadal -oaf -oafdom -oafish -oafishly -oafishness -oafs -Oahu -OAK -oak-apple -oak-beamed -oakberry -Oakbluffs -oak-boarded -Oakboy -Oakboro -oak-clad -oak-covered -oak-crested -oak-crowned -Oakdale -oaken -oakenshaw -Oakes -Oakesdale -Oakesia -Oakfield -Oakford -Oakhall -Oakham -Oakhurst -oaky -Oakie -Oakland -Oaklawn -oak-leaved -Oakley -Oakleil -oaklet -oaklike -Oaklyn -oakling -Oakman -Oakmont -oakmoss -oakmosses -oak-paneled -Oaks -oak-tanned -oak-timbered -Oakton -oaktongue -Oaktown -oak-tree -oakum -oakums -Oakvale -Oakview -Oakville -oak-wainscoted -oakweb -oakwood -oam -Oannes -OAO -OAP -OAPC -oar -oarage -oarcock -oared -oarfish -oarfishes -oar-footed -oarhole -oary -oarial -oarialgia -oaric -oaring -oariocele -oariopathy -oariopathic -oariotomy -oaritic -oaritis -oarium -Oark -oarless -oarlike -oarlock -oarlocks -oarlop -oarman -oarrowheaded -oars -oar's -oarsman -oarsmanship -oarsmen -oarswoman -oarswomen -oarweed -OAS -oasal -oasean -oases -oasis -OASYS -oasitic -oast -oasthouse -oast-house -oast-houses -oasts -OAT -oat-bearing -oatbin -oatcake -oat-cake -oatcakes -oat-crushing -oatear -oaten -oatenmeal -oater -oaters -Oates -oat-fed -oatfowl -oat-growing -oath -oathay -oath-bound -oath-breaking -oath-despising -oath-detesting -oathed -oathful -oathlet -oath-making -oaths -oathworthy -oaty -Oatis -oatland -oatlike -Oatman -oatmeal -oatmeals -oat-producing -OATS -oatseed -oat-shaped -OAU -oaves -Oaxaca -OB -ob- -ob. -Oba -Obad -Obad. -Obadiah -Obadias -Obafemi -Obala -Oballa -Obama -obambulate -obambulation -obambulatory -Oban -Obara -obarne -obarni -Obasanjo -Obau -Obaza -obb -obb. -Obbard -Obbenite -obbligati -obbligato -obbligatos -obclavate -obclude -obcompressed -obconic -obconical -obcordate -obcordiform -obcuneate -OBD -obdeltoid -obdiplostemony -obdiplostemonous -obdormition -obdt -obdt. -obduce -obduction -obduracy -obduracies -obdurate -obdurated -obdurately -obdurateness -obdurating -obduration -obdure -OBE -obeah -obeahism -obeahisms -obeahs -obeche -Obed -Obeded -Obediah -obedience -obediences -obediency -obedient -obediential -obedientially -obedientialness -obedientiar -obedientiary -obedientiaries -obediently -obey -obeyable -obeyance -Obeid -obeyed -obeyeo -obeyer -obeyers -obeying -obeyingly -obeys -obeisance -obeisances -obeisant -obeisantly -obeish -obeism -Obel -obeli -Obelia -obeliac -obelial -obelias -obelion -obeliscal -obeliscar -obelise -obelised -obelises -obelising -obelisk -obelisked -obelisking -obeliskoid -obelisks -obelism -obelisms -obelize -obelized -obelizes -obelizing -Obellia -obelus -Obeng -Ober -Oberammergau -Oberg -Oberhausen -Oberheim -Oberland -Oberlin -Obernburg -Oberon -Oberosterreich -Oberstone -Obert -obes -obese -obesely -obeseness -obesity -obesities -obex -obfirm -obfuscable -obfuscate -obfuscated -obfuscates -obfuscating -obfuscation -obfuscations -obfuscator -obfuscatory -obfuscators -obfuscity -obfuscous -obfusk -obi -Oby -obia -obias -Obidiah -Obidicut -Obie -obiism -obiisms -obiit -Obion -obis -obispo -obit -obital -obiter -obits -obitual -obituary -obituarian -obituaries -obituarily -obituarist -obituarize -obj -obj. -object -objectable -objectant -objectation -objectative -objected -objectee -objecter -object-glass -objecthood -objectify -objectification -objectified -objectifying -objecting -objection -objectionability -objectionable -objectionableness -objectionably -objectional -objectioner -objectionist -objections -objection's -objectival -objectivate -objectivated -objectivating -objectivation -objective -objectively -objectiveness -objectivenesses -objectives -objectivism -objectivist -objectivistic -objectivity -objectivities -objectivize -objectivized -objectivizing -objectization -objectize -objectized -objectizing -objectless -objectlessly -objectlessness -object-matter -objector -objectors -objector's -objects -object's -objecttification -objet -objicient -objranging -objscan -objuration -objure -objurgate -objurgated -objurgates -objurgating -objurgation -objurgations -objurgative -objurgatively -objurgator -objurgatory -objurgatorily -objurgatrix -obl -Obla -oblanceolate -oblast -oblasti -oblasts -oblat -oblata -oblate -oblated -oblately -oblateness -oblates -oblating -oblatio -oblation -oblational -oblationary -oblations -oblatory -oblectate -oblectation -obley -obli -oblicque -obligability -obligable -obligancy -obligant -obligate -obligated -obligately -obligates -obligati -obligating -obligation -obligational -obligationary -obligations -obligation's -obligative -obligativeness -obligato -obligator -obligatory -obligatorily -obligatoriness -obligatos -obligatum -oblige -obliged -obligedly -obligedness -obligee -obligees -obligement -obliger -obligers -obliges -obliging -obligingly -obligingness -obligistic -obligor -obligors -obliquangular -obliquate -obliquation -oblique -oblique-angled -obliqued -oblique-fire -obliquely -obliqueness -obliquenesses -obliques -obliquing -obliquity -obliquities -obliquitous -obliquus -obliterable -obliterate -obliterated -obliterates -obliterating -obliteration -obliterations -obliterative -obliterator -obliterators -oblivescence -oblivial -obliviality -oblivion -oblivionate -oblivionist -oblivionize -oblivions -oblivious -obliviously -obliviousness -obliviousnesses -obliviscence -obliviscible -oblocution -oblocutor -oblong -oblong-acuminate -oblongata -oblongatae -oblongatal -oblongatas -oblongated -oblong-cylindric -oblong-cordate -oblong-elliptic -oblong-elliptical -oblong-falcate -oblong-hastate -oblongish -oblongitude -oblongitudinal -oblong-lanceolate -oblong-leaved -oblongly -oblong-linear -oblongness -oblong-ovate -oblong-ovoid -oblongs -oblong-spatulate -oblong-triangular -oblong-wedgeshaped -obloquy -obloquial -obloquies -obloquious -obmit -obmutescence -obmutescent -obnebulate -obnounce -obnounced -obnouncing -obnoxiety -obnoxious -obnoxiously -obnoxiousness -obnoxiousnesses -obnubilate -obnubilation -obnunciation -OBO -Oboe -oboes -O'Boyle -oboist -oboists -obol -Obola -obolary -Obolaria -obole -oboles -obolet -oboli -obolos -obols -obolus -obomegoid -Obongo -oboormition -Obote -obouracy -oboval -obovate -obovoid -obpyramidal -obpyriform -Obrazil -Obrecht -Obrenovich -obreption -obreptitious -obreptitiously -Obrien -O'Brien -OBrit -obrize -obrogate -obrogated -obrogating -obrogation -obrotund -OBS -obs. -obscene -obscenely -obsceneness -obscener -obscenest -obscenity -obscenities -obscura -obscurancy -obscurant -obscurantic -obscuranticism -obscurantism -obscurantist -obscurantists -obscuras -obscuration -obscurative -obscuratory -obscure -obscured -obscuredly -obscurely -obscurement -obscureness -obscurer -obscurers -obscures -obscurest -obscuring -obscurism -obscurist -obscurity -obscurities -obsecrate -obsecrated -obsecrating -obsecration -obsecrationary -obsecratory -obsede -obsequeence -obsequence -obsequent -obsequy -obsequial -obsequience -obsequies -obsequiosity -obsequious -obsequiously -obsequiousness -obsequiousnesses -obsequity -obsequium -observability -observable -observableness -observably -observance -observances -observance's -observancy -observanda -observandum -Observant -Observantine -Observantist -observantly -observantness -observatin -observation -observational -observationalism -observationally -observations -observation's -observative -observator -observatory -observatorial -observatories -observe -observed -observedly -observer -observers -observership -observes -observing -observingly -obsess -obsessed -obsesses -obsessing -obsessingly -obsession -obsessional -obsessionally -obsessionist -obsessions -obsession's -obsessive -obsessively -obsessiveness -obsessor -obsessors -obside -obsidian -obsidianite -obsidians -obsidional -obsidionary -obsidious -obsign -obsignate -obsignation -obsignatory -obsolesc -obsolesce -obsolesced -obsolescence -obsolescences -obsolescent -obsolescently -obsolescing -obsolete -obsoleted -obsoletely -obsoleteness -obsoletes -obsoleting -obsoletion -obsoletism -obstacle -obstacles -obstacle's -obstancy -obstant -obstante -obstet -obstet. -obstetric -obstetrical -obstetrically -obstetricate -obstetricated -obstetricating -obstetrication -obstetricy -obstetrician -obstetricians -obstetricies -obstetrics -obstetrist -obstetrix -obstinacy -obstinacies -obstinacious -obstinance -obstinancy -obstinant -obstinate -obstinately -obstinateness -obstination -obstinative -obstipant -obstipate -obstipated -obstipation -obstreperate -obstreperosity -obstreperous -obstreperously -obstreperousness -obstreperousnesses -obstriction -obstringe -obstruct -obstructant -obstructed -obstructedly -obstructer -obstructers -obstructing -obstructingly -obstruction -obstructionism -obstructionist -obstructionistic -obstructionists -obstructions -obstruction's -obstructive -obstructively -obstructiveness -obstructivism -obstructivity -obstructor -obstructors -obstructs -obstruent -obstruse -obstruxit -obstupefy -obtain -obtainability -obtainable -obtainableness -obtainably -obtainal -obtainance -obtained -obtainer -obtainers -obtaining -obtainment -obtains -obtect -obtected -obtemper -obtemperate -obtend -obtenebrate -obtenebration -obtent -obtention -obtest -obtestation -obtested -obtesting -obtests -obtrect -obtriangular -obtrude -obtruded -obtruder -obtruders -obtrudes -obtruding -obtruncate -obtruncation -obtruncator -obtrusion -obtrusionist -obtrusions -obtrusive -obtrusively -obtrusiveness -obtrusivenesses -obtund -obtunded -obtundent -obtunder -obtunding -obtundity -obtunds -obturate -obturated -obturates -obturating -obturation -obturator -obturatory -obturbinate -obtusangular -obtuse -obtuse-angled -obtuse-angular -obtusely -obtuseness -obtuser -obtusest -obtusi- -obtusifid -obtusifolious -obtusilingual -obtusilobous -obtusion -obtusipennate -obtusirostrate -obtusish -obtusity -Obuda -OBulg -obumbrant -obumbrate -obumbrated -obumbrating -obumbration -obus -obv -obvallate -obvelation -obvention -obversant -obverse -obversely -obverses -obversion -obvert -obverted -obvertend -obverting -obverts -obviable -obviate -obviated -obviates -obviating -obviation -obviations -obviative -obviator -obviators -obvious -obviously -obviousness -obviousnesses -obvolute -obvoluted -obvolution -obvolutive -obvolve -obvolvent -Obwalden -OC -Oc. -Oca -Ocala -O'Callaghan -OCAM -Ocana -ocarina -ocarinas -O'Carroll -ocas -O'Casey -OCATE -OCC -Occam -occamy -Occamism -Occamist -Occamistic -Occamite -occas -occas. -occasion -occasionable -occasional -occasionalism -occasionalist -occasionalistic -occasionality -occasionally -occasionalness -occasionary -occasionate -occasioned -occasioner -occasioning -occasionings -occasionless -occasions -occasive -Occident -Occidental -Occidentalisation -Occidentalise -Occidentalised -Occidentalising -Occidentalism -Occidentalist -occidentality -Occidentalization -Occidentalize -Occidentalized -Occidentalizing -occidentally -occidentals -occidents -occiduous -occipiputs -occipita -occipital -occipitalis -occipitally -occipito- -occipitoanterior -occipitoatlantal -occipitoatloid -occipitoaxial -occipitoaxoid -occipitobasilar -occipitobregmatic -occipitocalcarine -occipitocervical -occipitofacial -occipitofrontal -occipitofrontalis -occipitohyoid -occipitoiliac -occipitomastoid -occipitomental -occipitonasal -occipitonuchal -occipitootic -occipitoparietal -occipitoposterior -occipitoscapular -occipitosphenoid -occipitosphenoidal -occipitotemporal -occipitothalamic -occiput -occiputs -occision -occitone -Occleve -occlude -occluded -occludent -occludes -occluding -occlusal -occluse -occlusion -occlusions -occlusion's -occlusive -occlusiveness -occlusocervical -occlusocervically -occlusogingival -occlusometer -occlusor -Occoquan -occult -occultate -occultation -occulted -occulter -occulters -occulting -occultism -occultist -occultists -occultly -occultness -occults -occupable -occupance -occupancy -occupancies -occupant -occupants -occupant's -occupation -occupational -occupationalist -occupationally -occupationless -occupations -occupation's -occupative -occupy -occupiable -occupied -occupier -occupiers -occupies -occupying -occur -occurence -occurences -occurred -occurrence -occurrences -occurrence's -occurrent -occurring -occurrit -occurs -occurse -occursive -OCD -OCDM -OCE -ocean -Oceana -oceanarium -oceanaut -oceanauts -ocean-born -ocean-borne -ocean-carrying -ocean-compassed -oceaned -oceanet -ocean-flooded -oceanfront -oceanfronts -oceanful -ocean-girdled -oceangoing -ocean-going -ocean-guarded -Oceania -Oceanian -Oceanic -Oceanica -Oceanican -oceanicity -Oceanid -oceanity -oceanlike -Oceano -oceanog -oceanog. -oceanographer -oceanographers -oceanography -oceanographic -oceanographical -oceanographically -oceanographies -oceanographist -oceanology -oceanologic -oceanological -oceanologically -oceanologist -oceanologists -oceanophyte -oceanous -Oceanport -ocean-rocked -oceans -ocean's -ocean-severed -Oceanside -ocean-skirted -ocean-smelling -ocean-spanning -ocean-sundered -Oceanus -Oceanview -Oceanville -oceanways -oceanward -oceanwards -ocean-wide -oceanwise -ocellana -ocellar -ocellary -ocellate -ocellated -ocellation -ocelli -ocelli- -ocellicyst -ocellicystic -ocelliferous -ocelliform -ocelligerous -ocellus -oceloid -ocelot -ocelots -Oceola -och -ochava -ochavo -Ocheyedan -Ochelata -ocher -ocher-brown -ocher-colored -ochered -ochery -ocher-yellow -ochering -ocherish -ocherous -ocher-red -ochers -ochidore -ochymy -Ochimus -ochlesis -ochlesitic -ochletic -ochlocracy -ochlocrat -ochlocratic -ochlocratical -ochlocratically -ochlomania -ochlophobia -ochlophobist -Ochna -Ochnaceae -ochnaceous -Ochoa -ochone -Ochopee -ochophobia -Ochotona -Ochotonidae -Ochozath -Ochozias -Ochozoma -ochraceous -Ochrana -ochratoxin -ochre -ochrea -ochreae -ochreate -ochred -ochreish -ochr-el-guerche -ochreous -ochres -ochry -ochring -ochro -ochro- -ochrocarpous -ochrogaster -ochroid -ochroleucous -ochrolite -Ochroma -ochronosis -ochronosus -ochronotic -ochrous -Ochs -ocht -OCI -OCIAA -ocydrome -ocydromine -Ocydromus -Ocie -Ocilla -Ocimum -Ocypete -Ocypoda -ocypodan -Ocypode -ocypodian -Ocypodidae -ocypodoid -Ocyroe -Ocyroidae -Ocyrrhoe -ocyte -ock -Ockeghem -Ockenheim -Ocker -ockers -Ockham -Ocko -ockster -OCLC -OCLI -oclock -o'clock -Ocneria -Ocnus -OCO -Ocoee -Oconee -oconnell -O'Connell -O'Conner -Oconnor -O'Connor -Oconomowoc -Oconto -ocote -Ocotea -Ocotillo -ocotillos -ocque -OCR -ocracy -Ocracoke -ocrea -ocreaceous -ocreae -Ocreatae -ocreate -ocreated -OCS -OCST -Oct -oct- -Oct. -octa- -octachloride -octachord -octachordal -octachronous -Octacnemus -octacolic -octactinal -octactine -Octactiniae -octactinian -octad -octadecahydrate -octadecane -octadecanoic -octadecyl -octadic -octadrachm -octadrachma -octads -octaechos -octaemera -octaemeron -octaeteric -octaeterid -octaeteris -octagon -octagonal -octagonally -octagons -octahedra -octahedral -octahedrally -octahedric -octahedrical -octahedrite -octahedroid -octahedron -octahedrons -octahedrous -octahydrate -octahydrated -octakishexahedron -octal -octamerism -octamerous -octameter -octan -octanaphthene -Octandria -octandrian -octandrious -octane -octanes -octangle -octangles -octangular -octangularness -octanol -octanols -Octans -octant -octantal -octants -octapeptide -octapla -octaploid -octaploidy -octaploidic -octapody -octapodic -octarch -octarchy -octarchies -octary -octarius -octaroon -octarticulate -octasemic -octastich -octastichon -octastichous -octastyle -octastylos -octastrophic -Octateuch -octaval -octavalent -octavaria -octavarium -octavd -Octave -octaves -Octavia -Octavian -octavic -Octavie -octavina -Octavius -Octavla -octavo -octavos -Octavus -octdra -octect -octects -octenary -octene -octennial -octennially -octet -octets -octette -octettes -octic -octyl -octile -octylene -octillion -octillions -octillionth -octyls -octine -octyne -octingentenary -octo- -octoad -octoalloy -octoate -octobass -October -octobers -october's -octobrachiate -Octobrist -octocentenary -octocentennial -octochord -Octocoralla -octocorallan -Octocorallia -octocoralline -octocotyloid -octodactyl -octodactyle -octodactylous -octode -octodecillion -octodecillions -octodecillionth -octodecimal -octodecimo -octodecimos -octodentate -octodianome -Octodon -octodont -Octodontidae -Octodontinae -octoechos -octofid -octofoil -octofoiled -octogamy -octogenary -octogenarian -octogenarianism -octogenarians -octogenaries -octogild -Octogynia -octogynian -octogynious -octogynous -octoglot -octohedral -octoic -octoid -octoyl -octolateral -octolocular -octomeral -octomerous -octometer -octonal -octonare -octonary -octonarian -octonaries -octonarius -octonematous -octonion -octonocular -octoon -octopartite -octopean -octoped -octopede -octopetalous -octophyllous -octophthalmous -octopi -octopine -octoploid -octoploidy -octoploidic -octopod -Octopoda -octopodan -octopodes -octopodous -octopods -octopolar -octopus -octopuses -octoradial -octoradiate -octoradiated -octoreme -octoroon -octoroons -octose -octosepalous -octosyllabic -octosyllable -octospermous -octospore -octosporous -octostichous -octothorp -octothorpe -octothorpes -octovalent -octroi -octroy -octrois -OCTU -octuor -octuple -octupled -octuples -octuplet -octuplets -octuplex -octuply -octuplicate -octuplication -octupling -OCU -ocuby -ocul- -ocular -oculary -ocularist -ocularly -oculars -oculate -oculated -oculauditory -oculi -oculiferous -oculiform -oculigerous -Oculina -oculinid -Oculinidae -oculinoid -oculist -oculistic -oculists -oculli -oculo- -oculocephalic -oculofacial -oculofrontal -oculomotor -oculomotory -oculonasal -oculopalpebral -oculopupillary -oculospinal -oculozygomatic -oculus -ocurred -OD -ODA -Odab -ODAC -Odacidae -odacoid -odal -odalborn -odalisk -odalisks -odalisque -odaller -odalman -odalwoman -Odanah -Odawa -Odax -ODD -oddball -oddballs -odd-come-short -odd-come-shortly -ODDD -odder -oddest -odd-fangled -Oddfellow -odd-humored -oddish -oddity -oddities -oddity's -odd-jobber -odd-jobman -oddlegs -oddly -odd-looking -odd-lot -oddman -odd-mannered -odd-me-dod -oddment -oddments -oddness -oddnesses -odd-numbered -odd-pinnate -Odds -Oddsbud -odd-shaped -oddside -oddsman -odds-on -odd-sounding -odd-thinking -odd-toed -ode -odea -Odebolt -Odeen -Odey -Odel -Odele -Odelet -Odelia -Odelinda -Odell -O'Dell -Odella -Odelle -Odelsthing -Odelsting -Odem -Oden -Odense -Odenton -Odenville -odeon -odeons -Oder -Odericus -odes -ode's -Odessa -Odets -Odetta -Odette -odeum -odeums -ODI -Ody -odible -odic -odically -Odie -ODIF -odiferous -odyl -odyle -odyles -Odilia -odylic -odylism -odylist -odylization -odylize -Odille -Odilo -Odilon -odyls -Odin -Odine -Odynerus -Odinian -Odinic -Odinism -Odinist -odinite -Odinitic -odiometer -odious -odiously -odiousness -odiousnesses -ODISS -Odyssean -Odyssey -odysseys -Odysseus -odist -odists -odium -odiumproof -odiums -odling -Odlo -ODM -Odo -Odoacer -Odobenidae -Odobenus -Odocoileus -odograph -odographs -odology -Odom -odometer -odometers -odometry -odometrical -odometries -Odon -Odonata -odonate -odonates -O'Doneven -Odonnell -O'Donnell -O'Donoghue -O'Donovan -odont -odont- -odontagra -odontalgia -odontalgic -Odontaspidae -Odontaspididae -Odontaspis -odontatrophy -odontatrophia -odontexesis -odontia -odontiasis -odontic -odontist -odontitis -odonto- -odontoblast -odontoblastic -odontocele -Odontocete -Odontoceti -odontocetous -odontochirurgic -odontoclasis -odontoclast -odontodynia -odontogen -odontogenesis -odontogeny -odontogenic -Odontoglossae -odontoglossal -odontoglossate -Odontoglossum -Odontognathae -odontognathic -odontognathous -odontograph -odontography -odontographic -odontohyperesthesia -odontoid -odontoids -Odontolcae -odontolcate -odontolcous -odontolite -odontolith -odontology -odontological -odontologist -odontoloxia -odontoma -odontomous -odontonecrosis -odontoneuralgia -odontonosology -odontopathy -odontophobia -odontophoral -odontophoran -odontophore -Odontophoridae -Odontophorinae -odontophorine -odontophorous -Odontophorus -odontoplast -odontoplerosis -Odontopteris -Odontopteryx -odontorhynchous -Odontormae -Odontornithes -odontornithic -odontorrhagia -odontorthosis -odontoschism -odontoscope -Odontosyllis -odontosis -odontostomatous -odontostomous -odontotechny -odontotherapy -odontotherapia -odontotomy -Odontotormae -odontotrypy -odontotripsis -odoom -odophone -odor -odorable -odorant -odorants -odorate -odorator -odored -odorful -Odoric -odoriferant -odoriferosity -odoriferous -odoriferously -odoriferousness -odorific -odorimeter -odorimetry -odoriphor -odoriphore -odorivector -odorization -odorize -odorized -odorizer -odorizes -odorizing -odorless -odorlessly -odorlessness -odorometer -odorosity -odorous -odorously -odorousness -odorproof -odors -odor's -Odostemon -odour -odoured -odourful -odourless -odours -Odovacar -Odra -Odrick -O'Driscoll -ODS -Odsbodkins -odso -ODT -Odum -Odus -odwyer -O'Dwyer -Odz -Odzookers -Odzooks -OE -Oeagrus -Oeax -Oebalus -Oecanthus -OECD -Oech -oeci -oecist -oecodomic -oecodomical -oecoid -oecology -oecological -oecologies -oeconomic -oeconomus -oecoparasite -oecoparasitism -oecophobia -oecumenian -oecumenic -oecumenical -oecumenicalism -oecumenicity -oecus -OED -oedema -oedemas -oedemata -oedematous -oedemerid -Oedemeridae -oedicnemine -Oedicnemus -Oedipal -oedipally -Oedipean -Oedipus -oedipuses -Oedogoniaceae -oedogoniaceous -Oedogoniales -Oedogonium -OEEC -Oeflein -Oehlenschlger -Oehsen -oeil-de-boeuf -oeillade -oeillades -oeillet -oeils-de-boeuf -oekist -oelet -Oelrichs -Oelwein -OEM -oenanthaldehyde -oenanthate -Oenanthe -oenanthic -oenanthyl -oenanthylate -oenanthylic -oenanthol -oenanthole -Oeneus -oenin -Oeno -oeno- -Oenocarpus -oenochoae -oenochoe -oenocyte -oenocytic -oenolic -oenolin -oenology -oenological -oenologies -oenologist -oenomancy -oenomania -Oenomaus -oenomel -oenomels -oenometer -Oenone -oenophile -oenophiles -oenophilist -oenophobist -Oenopides -Oenopion -oenopoetic -Oenothera -Oenotheraceae -oenotheraceous -Oenotrian -OEO -Oeonus -OEP -oer -o'er -Oerlikon -oersted -oersteds -o'ertop -OES -Oesel -oesogi -oesophagal -oesophageal -oesophagean -oesophagi -oesophagism -oesophagismus -oesophagitis -oesophago- -oesophagostomiasis -Oesophagostomum -oesophagus -oestradiol -Oestrelata -oestrian -oestriasis -oestrid -Oestridae -oestrin -oestrins -oestriol -oestriols -oestrogen -oestroid -oestrone -oestrones -oestrous -oestrual -oestruate -oestruation -oestrum -oestrums -oestrus -oestruses -oeuvre -oeuvres -OEXP -OF -of- -ofay -ofays -Ofallon -O'Fallon -O'Faolain -of-door -Ofelia -Ofella -ofer -off -off- -off. -Offa -of-fact -offal -Offaly -offaling -offals -off-balance -off-base -off-bear -off-bearer -offbeat -offbeats -off-bitten -off-board -offbreak -off-break -off-Broadway -offcast -off-cast -offcasts -off-center -off-centered -off-centre -off-chance -off-color -off-colored -offcolour -offcome -off-corn -offcut -off-cutting -off-drive -offed -Offen -Offenbach -offence -offenceless -offencelessly -offences -offend -offendable -offendant -offended -offendedly -offendedness -offender -offenders -offendible -offending -offendress -offends -offense -offenseful -offenseless -offenselessly -offenselessness -offenseproof -offenses -offensible -offension -offensive -offensively -offensiveness -offensivenesses -offensives -offer -offerable -offered -offeree -offerer -offerers -offering -offerings -Offerle -Offerman -offeror -offerors -offers -Offertory -offertorial -offertories -off-fall -off-falling -off-flavor -off-flow -off-glide -off-go -offgoing -offgrade -off-guard -offhand -off-hand -offhanded -off-handed -offhandedly -offhandedness -off-hit -off-hitting -off-hour -offic -officaries -office -office-bearer -office-boy -officeholder -officeholders -officeless -officemate -officer -officerage -officered -officeress -officerhood -officerial -officering -officerism -officerless -officers -officer's -officership -offices -office-seeking -Official -officialdom -officialdoms -officialese -officialisation -officialism -officiality -officialities -officialization -officialize -officialized -officializing -officially -officials -officialty -officiant -officiants -officiary -officiate -officiated -officiates -officiating -officiation -officiator -officina -officinal -officinally -officio -officious -officiously -officiousness -officiousnesses -off-year -offing -offings -offish -offishly -offishness -offkey -off-key -offlap -offlet -offlicence -off-licence -off-license -off-lying -off-limits -offline -off-line -offload -off-load -offloaded -offloading -off-loading -offloads -offlook -off-look -off-mike -off-off-Broadway -offpay -off-peak -off-pitch -offprint -offprinted -offprinting -offprints -offpspring -off-put -off-putting -offramp -offramps -off-reckoning -offs -offsaddle -offscape -offscour -offscourer -offscouring -offscourings -offscreen -offscum -off-season -offset -offset-litho -offsets -offset's -offsetting -off-setting -off-shaving -off-shed -offshoot -offshoots -offshore -offside -offsider -off-sider -offsides -off-sloping -off-sorts -offspring -offsprings -offstage -off-stage -off-standing -off-street -offtake -off-taking -off-the-cuff -off-the-face -off-the-peg -off-the-record -off-the-wall -off-thrown -off-time -offtype -off-tone -offtrack -off-turning -offuscate -offuscation -Offutt -offward -offwards -off-wheel -off-wheeler -off-white -O'Fiaich -oficina -Ofilia -OFlem -oflete -OFM -OFNPS -Ofo -Ofori -OFr -OFris -OFS -oft -often -oftener -oftenest -oftenness -oftens -oftentime -oftentimes -ofter -oftest -of-the-moment -ofthink -oftly -oft-named -oftness -oft-repeated -ofttime -oft-time -ofttimes -oft-times -oftwhiles -OG -Ogaden -ogaire -Ogallah -Ogallala -ogam -ogamic -ogams -Ogata -Ogawa -Ogbomosho -Ogboni -Ogburn -Ogcocephalidae -Ogcocephalus -Ogdan -Ogden -Ogdensburg -ogdoad -ogdoads -ogdoas -Ogdon -ogee -O-gee -ogeed -ogees -Ogema -ogenesis -ogenetic -Ogg -ogganition -ogham -oghamic -oghamist -oghamists -oghams -Oghuz -OGI -OGICSE -Ogygia -Ogygian -Ogygus -Ogilvy -Ogilvie -ogival -ogive -ogived -ogives -Oglala -ogle -ogled -ogler -oglers -ogles -Oglesby -Oglethorpe -ogling -Ogma -ogmic -Ogmios -OGO -ogonium -Ogor -O'Gowan -OGPU -O'Grady -ography -ogre -ogreish -ogreishly -ogreism -ogreisms -Ogren -ogres -ogress -ogresses -ogrish -ogrishly -ogrism -ogrisms -OGT -ogtiern -ogum -Ogun -Ogunquit -OH -Ohara -O'Hara -Ohare -O'Hare -Ohatchee -Ohaus -ohed -ohelo -OHG -ohia -ohias -O'Higgins -ohing -Ohio -Ohioan -ohioans -Ohiopyle -ohio's -Ohiowa -Ohl -Ohley -Ohlman -Ohm -ohmage -ohmages -ohm-ammeter -ohmic -ohmically -ohmmeter -ohmmeters -ohm-mile -OHMS -oho -ohoy -ohone -OHP -ohs -oh's -ohv -oy -Oyama -Oyana -oyapock -oic -OIcel -oicks -oid -oidal -oidea -oidia -oidioid -oidiomycosis -oidiomycotic -Oidium -oidwlfe -oie -oyelet -Oyens -oyer -oyers -oyes -oyesses -oyez -oii -oik -oikology -oikomania -oikophobia -oikoplast -oiks -oil -oil-bag -oil-bearing -oilberry -oilberries -oilbird -oilbirds -oil-bright -oil-burning -oilcake -oilcamp -oilcamps -oilcan -oilcans -oil-carrying -oilcase -oilcloth -oilcloths -oilcoat -oil-colorist -oil-colour -oil-containing -oil-cooled -oilcup -oilcups -oil-dispensing -oil-distributing -oildom -oil-driven -oiled -oil-electric -oiler -oilery -oilers -oylet -Oileus -oil-fed -oilfield -oil-filled -oil-finding -oil-finished -oilfired -oil-fired -oilfish -oilfishes -oil-forming -oil-fueled -oil-gilding -oil-harden -oil-hardening -oil-heat -oil-heated -oilheating -oilhole -oilholes -oily -oily-brown -oilier -oiliest -oiligarchy -oil-yielding -oilyish -oilily -oily-looking -oiliness -oilinesses -oiling -oil-insulated -oilish -oily-smooth -oily-tongued -Oilla -oil-laden -oilless -oillessness -oillet -oillike -oil-lit -oilman -oilmen -oil-mill -oilmonger -oilmongery -Oilmont -oil-nut -oilometer -oilpaper -oilpapers -oil-plant -oil-producing -oilproof -oilproofing -oil-pumping -oil-refining -oil-regulating -oils -oil-saving -oil-seal -oil-secreting -oilseed -oil-seed -oilseeds -oilskin -oilskinned -oilskins -oil-smelling -oil-soaked -oilstock -oilstone -oilstoned -oilstones -oilstoning -oilstove -oil-temper -oil-tempered -oil-testing -oil-thickening -oiltight -oiltightness -Oilton -oil-tongued -oil-tree -Oiltrough -Oilville -oilway -oilways -oilwell -oime -Oina -oink -oinked -oinking -oinks -oino- -oinochoai -oinochoe -oinochoes -oinochoi -oinology -oinologies -oinomancy -oinomania -oinomel -oinomels -oint -ointment -ointments -Oyo -OIr -OIRA -Oireachtas -Oys -Oise -Oisin -oisivity -oyster -oysterage -oysterbird -oystercatcher -oyster-catcher -oyster-culturist -oystered -oysterer -oysterers -oysterfish -oysterfishes -oystergreen -oysterhood -oysterhouse -oysteries -oystering -oysterings -oysterish -oysterishness -oysterlike -oysterling -oysterman -oystermen -oysterous -oysterroot -oysters -oyster's -oysterseed -oyster-shaped -oystershell -Oysterville -oysterwife -oysterwoman -oysterwomen -Oistrakh -OIt -Oita -oitava -oiticica -oiticicas -OIU -OIW -Oizys -Ojai -Ojibwa -Ojibway -Ojibwas -OJT -OK -Oka -Okabena -Okahumpka -Okay -Okayama -okayed -okaying -okays -Okajima -okanagan -Okanogan -okapi -Okapia -okapis -Okarche -okas -Okaton -Okauchee -Okavango -Okawville -Okazaki -OK'd -oke -Okean -Okeana -Okechuku -okee -Okeechobee -O'Keeffe -Okeene -Okeghem -okeh -okehs -okey -okeydoke -okey-doke -okeydokey -O'Kelley -O'Kelly -Okemah -Okemos -Oken -okenite -oker -okes -oket -Oketo -Okhotsk -oki -okia -Okie -okimono -Okinagan -Okinawa -Okinawan -Okla -Okla. -Oklafalaya -Oklahannali -Oklahoma -Oklahoman -oklahomans -Oklaunion -Oklawaha -okle-dokle -Oklee -Okmulgee -Okoboji -okolehao -Okolona -okoniosis -okonite -okoume -Okovanggo -okra -okras -Okreek -okro -okroog -okrug -okruzi -okshoofd -okta -Oktaha -oktastylos -okthabah -Oktoberfest -Okuari -Okubo -Okun -Okuninushi -okupukupu -Okwu -ol -Ola -Olacaceae -olacaceous -olacad -Olaf -Olag -Olalla -olam -olamic -Olamon -Olancha -Oland -Olanta -Olar -olater -Olatha -Olathe -Olaton -Olav -Olavo -Olax -Olbers -Olcha -Olchi -Olcott -Old -old-age -old-aged -old-bachelorish -old-bachelorship -old-boyish -Oldcastle -old-clothesman -old-country -olden -Oldenburg -oldened -oldening -Older -oldermost -olders -oldest -old-established -olde-worlde -old-faced -oldfangled -old-fangled -oldfangledness -old-farrand -old-farrandlike -old-fashioned -old-fashionedly -old-fashionedness -Oldfieldia -old-fogeydom -old-fogeyish -old-fogy -old-fogydom -old-fogyish -old-fogyishness -old-fogyism -old-gathered -old-gentlemanly -old-gold -old-growing -Oldham -Oldhamia -oldhamite -oldhearted -oldy -oldie -oldies -old-young -oldish -old-ivory -old-ladyhood -oldland -old-line -old-liner -old-looking -old-maid -old-maidenish -old-maidish -old-maidishness -old-maidism -old-man's-beard -oldness -oldnesses -old-new -old-rose -Olds -Old-school -old-sighted -old-sightedness -Oldsmobile -oldsquaw -old-squaw -old-standing -oldster -oldsters -oldstyle -old-style -oldstyles -Old-Testament -old-time -old-timey -old-timer -old-timy -old-timiness -oldwench -oldwife -old-wifely -old-wifish -oldwives -old-womanish -old-womanishness -old-womanism -old-womanly -old-world -old-worldish -old-worldism -old-worldly -old-worldliness -ole -ole- -Olea -Oleaceae -oleaceous -Oleacina -Oleacinidae -oleaginous -oleaginously -oleaginousness -Olean -oleana -oleander -oleanders -oleandomycin -oleandrin -oleandrine -oleary -O'Leary -Olearia -olease -oleaster -oleasters -oleate -oleates -olecranal -olecranarthritis -olecranial -olecranian -olecranoid -olecranon -olefiant -olefin -olefine -olefines -olefinic -olefins -Oleg -Oley -oleic -oleiferous -olein -oleine -oleines -oleins -Olema -Olen -olena -olenellidian -Olenellus -olenid -Olenidae -olenidian -Olenka -Olenolin -olent -Olenta -Olenus -oleo -oleo- -oleocalcareous -oleocellosis -oleocyst -oleoduct -oleograph -oleographer -oleography -oleographic -oleoyl -oleomargaric -oleomargarin -oleomargarine -oleomargarines -oleometer -oleoptene -oleorefractometer -oleoresin -oleoresinous -oleoresins -oleos -oleosaccharum -oleose -oleosity -oleostearate -oleostearin -oleostearine -oleothorax -oleous -olepy -Oler -Oleraceae -oleraceous -olericultural -olericulturally -olericulture -olericulturist -Oleron -oles -Oleta -Oletha -Olethea -Olethreutes -olethreutid -Olethreutidae -Oletta -Olette -oleum -oleums -olfact -olfactable -olfacty -olfactible -olfaction -olfactive -olfactology -olfactometer -olfactometry -olfactometric -olfactophobia -olfactor -olfactoreceptor -olfactory -olfactories -olfactorily -Olfe -OLG -Olga -Oly -Olia -Oliana -oliban -olibanum -olibanums -olibene -olycook -olid -olig- -oligacanthous -oligaemia -oligandrous -oliganthous -oligarch -oligarchal -oligarchy -oligarchic -oligarchical -oligarchically -oligarchies -oligarchism -oligarchist -oligarchize -oligarchs -oligemia -oligidic -oligidria -oligist -oligistic -oligistical -oligo- -oligocarpous -Oligocene -Oligochaeta -oligochaete -oligochaetous -oligochete -oligochylia -oligocholia -oligochrome -oligochromemia -oligochronometer -oligocystic -oligocythemia -oligocythemic -oligoclase -oligoclasite -oligodactylia -oligodendroglia -oligodendroglioma -oligodynamic -oligodipsia -oligodontous -oligogalactia -oligohemia -oligohydramnios -oligolactia -oligomenorrhea -oligomer -oligomery -oligomeric -oligomerization -oligomerous -oligomers -oligometochia -oligometochic -oligomycin -Oligomyodae -oligomyodian -oligomyoid -Oligonephria -oligonephric -oligonephrous -oligonite -oligonucleotide -oligopepsia -oligopetalous -oligophagy -oligophagous -oligophyllous -oligophosphaturia -oligophrenia -oligophrenic -oligopyrene -oligoplasmia -oligopnea -oligopoly -oligopolist -oligopolistic -oligoprothesy -oligoprothetic -oligopsychia -oligopsony -oligopsonistic -oligorhizous -oligosaccharide -oligosepalous -oligosialia -oligosideric -oligosiderite -oligosyllabic -oligosyllable -oligosynthetic -oligosite -oligospermia -oligospermous -oligostemonous -oligotokeus -oligotokous -oligotrichia -oligotrophy -oligotrophic -oligotropic -oliguresia -oliguresis -oliguretic -oliguria -Oliy -olykoek -Olimbos -Olympe -Olimpia -Olympia -Olympiad -Olympiadic -olympiads -Olympian -Olympianism -Olympianize -Olympianly -Olympians -Olympianwise -Olympias -Olympic -Olympicly -Olympicness -Olympics -Olympie -Olympieion -Olympio -Olympionic -Olympium -Olympus -Olin -Olinde -Olinia -Oliniaceae -oliniaceous -Olynthiac -Olynthian -Olynthus -olio -olios -Oliphant -Olyphant -oliprance -OLIT -olitory -Oliva -olivaceo- -olivaceous -Olivann -olivary -olivaster -Olive -Olivean -olive-backed -olive-bordered -olive-branch -olive-brown -Oliveburg -olive-cheeked -olive-clad -olive-colored -olive-complexioned -olived -olive-drab -olive-green -olive-greenish -olive-growing -Olivehurst -Olivella -oliveness -olivenite -olive-pale -Oliver -Oliverea -Oliverian -oliverman -olivermen -Olivero -oliversmith -Olives -olive's -olivescent -olive-shaded -olive-shadowed -olivesheen -olive-sided -olive-skinned -Olivet -Olivetan -Olivette -Olivetti -olivewood -olive-wood -Olivia -Olividae -Olivie -Olivier -Oliviero -oliviferous -oliviform -olivil -olivile -olivilin -olivine -olivine-andesite -olivine-basalt -olivinefels -olivines -olivinic -olivinite -olivinitic -OLLA -Ollayos -ollamh -ollapod -olla-podrida -ollas -ollav -Ollen -ollenite -Olli -Olly -Ollie -ollock -olluck -Olm -Olmito -Olmitz -Olmstead -Olmsted -Olmstedville -Olnay -Olnee -Olney -Olneya -Olnek -Olnton -Olodort -olof -ology -ological -ologies -ologist -ologistic -ologists -olograph -olographic -ololiuqui -olomao -Olomouc -olona -Olonets -Olonetsian -Olonetsish -Olonos -Olor -Oloron -oloroso -olorosos -olp -olpae -Olpe -olpes -Olpidiaster -Olpidium -Olsburg -Olsen -Olsewski -Olshausen -Olson -Olsson -Olszyn -OLTM -Olton -oltonde -OLTP -oltunna -Olustee -Olva -Olvan -Olwen -Olwena -OLWM -OM -Om. -oma -omadhaun -Omagh -omagra -Omagua -Omaha -Omahas -O'Mahony -Omayyad -Omak -omalgia -O'Malley -Oman -omander -Omani -omao -Omar -Omari -Omarr -omarthritis -omasa -omasitis -omasum -OMB -omber -ombers -ombre -ombrellino -ombrellinos -ombres -ombrette -ombrifuge -ombro- -ombrograph -ombrographic -ombrology -ombrological -ombrometer -ombrometric -ombrophil -ombrophile -ombrophily -ombrophilic -ombrophilous -ombrophyte -ombrophobe -ombrophoby -ombrophobous -ombudsman -ombudsmanship -ombudsmen -ombudsperson -OMD -Omdurman -ome -O'Meara -omega -omegas -omegoid -omelet -omelets -omelette -omelettes -omelie -omen -Omena -omened -omening -omenology -omens -omen's -omenta -omental -omentectomy -omentitis -omentocele -omentofixation -omentopexy -omentoplasty -omentorrhaphy -omentosplenopexy -omentotomy -omentulum -omentum -omentums -omentuta -Omer -Omero -omers -ometer -omicron -omicrons -Omidyar -omikron -omikrons -omina -ominate -ominous -ominously -ominousness -ominousnesses -omissible -omission -omissions -omission's -omissive -omissively -omissus -omit -omitis -omits -omittable -omittance -omitted -omitter -omitters -omitting -omlah -Omland -OMM -Ommastrephes -Ommastrephidae -ommatea -ommateal -ommateum -ommatidia -ommatidial -ommatidium -ommatitidia -ommatophore -ommatophorous -ommetaphobia -Ommiad -Ommiades -Ommiads -omneity -omnes -omni -omni- -omniactive -omniactuality -omniana -omniarch -omniarchs -omnibearing -omnibenevolence -omnibenevolent -omnibus -omnibus-driving -omnibuses -omnibus-fashion -omnibusman -omnibus-riding -omnicausality -omnicompetence -omnicompetent -omnicorporeal -omnicredulity -omnicredulous -omnidenominational -omnidirectional -omnidistance -omnierudite -omniessence -omnifacial -omnifarious -omnifariously -omnifariousness -omniferous -omnify -omnific -omnificence -omnificent -omnifidel -omnified -omnifying -omnifocal -omniform -omniformal -omniformity -omnigenous -omnigerent -omnigraph -omnihuman -omnihumanity -omni-ignorant -omnilegent -omnilingual -omniloquent -omnilucent -omnimental -omnimeter -omnimode -omnimodous -omninescience -omninescient -omniparent -omniparient -omniparity -omniparous -omnipatient -omnipercipience -omnipercipiency -omnipercipient -omniperfect -Omnipotence -omnipotences -omnipotency -omnipotent -omnipotentiality -omnipotently -omnipregnant -omnipresence -omnipresences -omnipresent -omnipresently -omniprevalence -omniprevalent -omniproduction -omniprudence -omniprudent -omnirange -omniregency -omniregent -omnirepresentative -omnirepresentativeness -omnirevealing -Omniscience -omnisciences -omnisciency -omniscient -omnisciently -omniscope -omniscribent -omniscriptive -omnisentience -omnisentient -omnisignificance -omnisignificant -omnispective -omnist -omnisufficiency -omnisufficient -omnitemporal -omnitenent -omnitolerant -omnitonal -omnitonality -omnitonic -omnitude -omnium -omnium-gatherum -omnium-gatherums -omnivagant -omnivalence -omnivalent -omnivalous -omnivarious -omnividence -omnivident -omnivision -omnivolent -Omnivora -omnivoracious -omnivoracity -omnivorant -omnivore -omnivores -omnivorism -omnivorous -omnivorously -omnivorousness -omnivorousnesses -omodynia -omohyoid -omo-hyoid -omoideum -Omoo -omophagy -omophagia -omophagic -omophagies -omophagist -omophagous -omophoria -omophorion -omoplate -omoplatoscopy -Omor -Omora -omostegite -omosternal -omosternum -OMPF -omphacy -omphacine -omphacite -Omphale -omphalectomy -omphali -omphalic -omphalism -omphalitis -omphalo- -omphalocele -omphalode -omphalodia -omphalodium -omphalogenous -omphaloid -omphaloma -omphalomesaraic -omphalomesenteric -omphaloncus -omphalopagus -omphalophlebitis -omphalopsychic -omphalopsychite -omphalorrhagia -omphalorrhea -omphalorrhexis -omphalos -omphalosite -omphaloskepsis -omphalospinous -omphalotomy -omphalotripsy -omphalus -omrah -Omri -Omro -OMS -Omsk -Omura -Omuta -OMV -on -on- -ONA -ONAC -Onaga -on-again-off-again -onager -onagers -onaggri -Onagra -Onagraceae -onagraceous -onagri -Onaka -ONAL -Onalaska -Onamia -Onan -Onancock -onanism -onanisms -onanist -onanistic -onanists -Onarga -Onas -Onassis -Onawa -Onaway -onboard -on-board -ONC -onca -once -once-accented -once-born -once-over -oncer -once-run -onces -oncet -oncetta -Onchidiidae -Onchidium -Onchiota -Onchocerca -onchocerciasis -onchocercosis -oncia -Oncidium -oncidiums -oncin -onco- -oncogene -oncogenesis -oncogenic -oncogenicity -oncograph -oncography -oncology -oncologic -oncological -oncologies -oncologist -oncologists -oncome -oncometer -oncometry -oncometric -oncoming -on-coming -oncomings -Oncorhynchus -oncoses -oncosimeter -oncosis -oncosphere -oncost -oncostman -oncotic -oncotomy -OND -ondagram -ondagraph -ondameter -ondascope -ondatra -Onder -ondy -Ondine -onding -on-ding -on-dit -Ondo -ondogram -ondograms -ondograph -ondoyant -ondometer -ondoscope -Ondrea -Ondrej -on-drive -ondule -one -one-a-cat -one-act -one-acter -Oneal -Oneals -one-and-a-half -oneanother -one-armed -oneberry -one-berry -one-by-one -one-blade -one-bladed -one-buttoned -one-celled -one-chambered -one-class -one-classer -Oneco -one-colored -one-crop -one-cusped -one-day -one-decker -one-dimensional -one-dollar -one-eared -one-egg -one-eyed -one-eyedness -one-eighty -one-finned -one-flowered -onefold -onefoldness -one-foot -one-footed -one-fourth -Onega -onegite -Onego -one-grained -one-hand -one-handed -one-handedness -onehearted -one-hearted -onehood -one-hoofed -one-horned -one-horse -onehow -one-humped -one-hundred-fifty -one-hundred-percenter -one-hundred-percentism -Oneida -oneidas -one-ideaed -one-year -oneyer -Oneil -O'Neil -Oneill -O'Neill -one-inch -oneiric -oneiro- -oneirocrit -oneirocritic -oneirocritical -oneirocritically -oneirocriticism -oneirocritics -oneirodynia -oneirology -oneirologist -oneiromancer -oneiromancy -oneiroscopy -oneiroscopic -oneiroscopist -oneirotic -oneism -one-jointed -Onekama -one-layered -one-leaf -one-leaved -one-legged -one-leggedness -one-letter -one-line -one-lung -one-lunged -one-lunger -one-man -one-many -onement -one-minute -Onemo -one-nerved -oneness -onenesses -one-night -one-nighter -one-oclock -one-off -one-one -Oneonta -one-petaled -one-piece -one-piecer -one-pipe -one-point -one-pope -one-pound -one-pounder -one-price -one-quarter -oner -one-rail -onerary -onerate -onerative -one-reeler -onery -one-ribbed -onerier -oneriest -one-roomed -onerose -onerosity -onerosities -onerous -onerously -onerousness -ones -one's -one-seater -one-seeded -oneself -one-sepaled -one-septate -one-shot -one-sided -one-sidedly -one-sidedness -onesigned -one-spot -one-step -one-story -one-storied -one-striper -one-term -onethe -one-third -onetime -one-time -one-toed -one-to-one -one-track -one-two -One-two-three -one-up -oneupmanship -one-upmanship -one-valued -one-way -onewhere -one-windowed -one-winged -one-word -ONF -onfall -onflemed -onflow -onflowing -Onfre -Onfroi -Ong -onga-onga -ongaro -on-glaze -on-glide -on-go -ongoing -on-going -Ongun -onhanger -on-hit -ONI -ony -Onia -onycha -onychatrophia -onychauxis -onychia -onychin -onychite -onychitis -onychium -onychogryposis -onychoid -onycholysis -onychomalacia -onychomancy -onychomycosis -onychonosus -onychopathy -onychopathic -onychopathology -onychophagy -onychophagia -onychophagist -onychophyma -Onychophora -onychophoran -onychophorous -onychoptosis -onychorrhexis -onychoschizia -onychosis -onychotrophy -onicolo -Onida -onym -onymal -onymancy -onymatic -onymy -onymity -onymize -onymous -oniomania -oniomaniac -onion -onion-eyed -onionet -oniony -onionized -onionlike -onionpeel -Onions -onionskin -onionskins -oniro- -onirotic -Oniscidae -onisciform -oniscoid -Oniscoidea -oniscoidean -Oniscus -Oniskey -Onitsha -onium -Onyx -onyxes -onyxis -onyxitis -onker -onkilonite -onkos -onlay -onlaid -onlaying -onlap -Onley -onlepy -onless -only -only-begotten -onliest -on-limits -online -on-line -onliness -onlook -onlooker -onlookers -onlooking -onmarch -Onmun -Ono -Onobrychis -onocentaur -Onoclea -onocrotal -Onofredo -onofrite -Onohippidium -onolatry -onomancy -onomantia -onomasiology -onomasiological -onomastic -onomastical -onomasticon -onomastics -onomato- -onomatology -onomatologic -onomatological -onomatologically -onomatologist -onomatomancy -onomatomania -onomatop -onomatope -onomatophobia -onomatopy -onomatoplasm -onomatopoeia -onomatopoeial -onomatopoeian -onomatopoeic -onomatopoeical -onomatopoeically -onomatopoesy -onomatopoesis -onomatopoetic -onomatopoetically -onomatopoieses -onomatopoiesis -onomatous -onomomancy -Onondaga -Onondagan -Onondagas -Ononis -Onopordon -Onosmodium -onotogenic -ONR -onrush -onrushes -onrushing -ons -onset -onsets -onset's -onsetter -onsetting -onshore -onside -onsight -onslaught -onslaughts -Onslow -Onstad -onstage -on-stage -onstand -onstanding -onstead -Onsted -on-stream -onsweep -onsweeping -ont -ont- -Ont. -ontal -Ontarian -Ontaric -Ontario -ontic -ontically -Ontina -Ontine -onto -onto- -ontocycle -ontocyclic -ontogenal -ontogeneses -ontogenesis -ontogenetic -ontogenetical -ontogenetically -ontogeny -ontogenic -ontogenically -ontogenies -ontogenist -ontography -ontology -ontologic -ontological -ontologically -ontologies -ontologise -ontologised -ontologising -ontologism -ontologist -ontologistic -ontologize -Ontonagon -ontosophy -onus -onuses -onwaiting -onward -onwardly -onwardness -onwards -onza -OO -oo- -o-o -o-o-a-a -ooangium -OOB -oobit -ooblast -ooblastic -oocyesis -oocyst -Oocystaceae -oocystaceous -oocystic -Oocystis -oocysts -oocyte -oocytes -OODB -oodles -oodlins -ooecia -ooecial -ooecium -oof -oofbird -oofy -oofier -oofiest -oofless -ooftish -oogamete -oogametes -oogamy -oogamies -oogamous -oogenesis -oogenetic -oogeny -oogenies -ooglea -oogloea -oogone -oogonia -oogonial -oogoninia -oogoniophore -oogonium -oogoniums -oograph -ooh -oohed -oohing -oohs -ooid -ooidal -Ookala -ookinesis -ookinete -ookinetic -oolachan -oolachans -oolak -oolakan -oo-la-la -oolemma -oolite -oolites -oolith -ooliths -Oolitic -oolly -oollies -Oologah -oology -oologic -oological -oologically -oologies -oologist -oologists -oologize -oolong -oolongs -Ooltewah -oomancy -oomantia -oometer -oometry -oometric -oomiac -oomiack -oomiacks -oomiacs -oomiak -oomiaks -oomycete -Oomycetes -oomycetous -oompah -oompahed -oompahs -oomph -oomphs -oon -Oona -Oonagh -oons -oont -oooo -OOP -oopack -oopak -OOPART -oophyte -oophytes -oophytic -oophoralgia -oophorauxe -oophore -oophorectomy -oophorectomies -oophorectomize -oophorectomized -oophorectomizing -oophoreocele -oophorhysterectomy -oophoric -oophoridia -oophoridium -oophoridiums -oophoritis -oophorocele -oophorocystectomy -oophoroepilepsy -oophoroma -oophoromalacia -oophoromania -oophoron -oophoropexy -oophororrhaphy -oophorosalpingectomy -oophorostomy -oophorotomy -OOPL -ooplasm -ooplasmic -ooplast -oopod -oopodal -ooporphyrin -OOPS -OOPSTAD -oopuhue -oorali -ooralis -oord -oory -oorial -oorie -oos -o-os -ooscope -ooscopy -oose -OOSH -oosperm -oosperms -oosphere -oospheres -oosporange -oosporangia -oosporangium -oospore -Oosporeae -oospores -oosporic -oosporiferous -oosporous -Oost -Oostburg -oostegite -oostegitic -Oostende -oosterbeek -OOT -ootheca -oothecae -oothecal -ootid -ootids -ootype -ootocoid -Ootocoidea -ootocoidean -ootocous -oots -ootwith -oouassa -ooze -oozed -oozes -Oozy -oozier -ooziest -oozily -ooziness -oozinesses -oozing -oozoa -oozoid -oozooid -OP -op- -op. -OPA -opacate -opacify -opacification -opacified -opacifier -opacifies -opacifying -opacimeter -opacite -opacity -opacities -opacous -opacousness -opacus -opah -opahs -opai -opaion -Opal -opaled -opaleye -opalesce -opalesced -opalescence -opalescent -opalesces -opalescing -opalesque -Opalina -Opaline -opalines -opalinid -Opalinidae -opalinine -opalish -opalize -opalized -opalizing -Opalocka -Opa-Locka -opaloid -opalotype -opals -opal's -opal-tinted -opaque -opaqued -opaquely -opaqueness -opaquenesses -opaquer -opaques -opaquest -opaquing -Opata -opathy -OPC -opcode -OPCW -opdalite -Opdyke -OPDU -ope -OPEC -oped -opedeldoc -Opegrapha -opeidoscope -Opel -opelet -Opelika -Opelousas -Opelt -opelu -open -openability -openable -open-air -openairish -open-airish -open-airishness -open-airism -openairness -open-airness -open-and-shut -open-armed -open-armedly -open-back -open-backed -openband -openbeak -openbill -open-bill -open-bladed -open-breasted -open-caisson -opencast -openchain -open-chested -opencircuit -open-circuit -open-coil -open-countenanced -open-crib -open-cribbed -opencut -open-door -open-doored -open-eared -opened -open-eyed -open-eyedly -open-end -open-ended -openendedness -open-endedness -opener -openers -openest -open-face -open-faced -open-field -open-fire -open-flowered -open-front -open-fronted -open-frontedness -open-gaited -Openglopish -open-grained -openhanded -open-handed -openhandedly -open-handedly -openhandedness -openhead -open-headed -openhearted -open-hearted -openheartedly -open-heartedly -openheartedness -open-heartedness -open-hearth -open-hearthed -open-housed -open-housedness -open-housing -opening -openings -opening's -open-joint -open-jointed -open-kettle -open-kneed -open-letter -openly -open-lined -open-market -open-minded -open-mindedly -open-mindedness -openmouthed -open-mouthed -openmouthedly -open-mouthedly -openmouthedness -open-mouthedness -openness -opennesses -open-newel -open-pan -open-patterned -open-phase -open-pit -open-pitted -open-plan -open-pollinated -open-reel -open-roofed -open-rounded -opens -open-sand -open-shelf -open-shelved -open-shop -openside -open-sided -open-sidedly -open-sidedness -open-sleeved -open-spaced -open-spacedly -open-spacedness -open-spoken -open-spokenly -open-spokenness -open-tank -open-tide -open-timber -open-timbered -open-timbre -open-top -open-topped -open-view -open-visaged -open-weave -open-web -open-webbed -open-webbedness -open-well -open-windowed -open-windowedness -openwork -open-work -open-worked -openworks -OPEOS -OPer -opera -operabily -operability -operabilities -operable -operably -operae -operagoer -opera-going -operalogue -opera-mad -operameter -operance -operancy -operand -operandi -operands -operand's -operant -operantis -operantly -operants -operary -operas -opera's -operatable -operate -operated -operatee -operates -operatic -operatical -operatically -operatics -operating -operation -operational -operationalism -operationalist -operationalistic -operationally -operationism -operationist -operations -operation's -operative -operatively -operativeness -operatives -operativity -operatize -operator -operatory -operators -operator's -operatrices -operatrix -opercele -operceles -opercle -opercled -opercula -opercular -Operculata -operculate -operculated -opercule -opercules -operculi- -operculiferous -operculiform -operculigenous -operculigerous -operculum -operculums -operetta -operettas -operette -operettist -operla -operon -operons -operose -operosely -operoseness -operosity -OPers -opes -OPF -Oph -Opheim -Ophelia -Ophelie -ophelimity -Opheltes -Ophia -Ophian -ophiasis -ophic -ophicalcite -Ophicephalidae -ophicephaloid -Ophicephalus -Ophichthyidae -ophichthyoid -ophicleide -ophicleidean -ophicleidist -Ophidia -ophidian -ophidians -Ophidiidae -Ophidiobatrachia -ophidioid -ophidiomania -Ophidion -ophidiophobia -ophidious -ophidium -ophidology -ophidologist -ophio- -Ophiobatrachia -Ophiobolus -Ophioglossaceae -ophioglossaceous -Ophioglossales -Ophioglossum -ophiography -ophioid -ophiolater -ophiolatry -ophiolatrous -ophiolite -ophiolitic -ophiology -ophiologic -ophiological -ophiologist -ophiomancy -ophiomorph -Ophiomorpha -ophiomorphic -ophiomorphous -Ophion -ophionid -Ophioninae -ophionine -ophiophagous -ophiophagus -ophiophilism -ophiophilist -ophiophobe -ophiophoby -ophiophobia -ophiopluteus -Ophiosaurus -ophiostaphyle -ophiouride -Ophir -Ophis -Ophisaurus -Ophism -Ophite -ophites -Ophitic -Ophitism -Ophiuchid -Ophiuchus -Ophiucus -ophiuran -ophiurid -Ophiurida -ophiuroid -Ophiuroidea -ophiuroidean -ophresiophobia -ophryon -Ophrys -ophthalaiater -ophthalitis -ophthalm -ophthalm- -ophthalmagra -ophthalmalgia -ophthalmalgic -ophthalmatrophia -ophthalmectomy -ophthalmencephalon -ophthalmetrical -ophthalmy -ophthalmia -ophthalmiac -ophthalmiater -ophthalmiatrics -ophthalmic -ophthalmious -ophthalmist -ophthalmite -ophthalmitic -ophthalmitis -ophthalmo- -ophthalmoblennorrhea -ophthalmocarcinoma -ophthalmocele -ophthalmocopia -ophthalmodiagnosis -ophthalmodiastimeter -ophthalmodynamometer -ophthalmodynia -ophthalmography -ophthalmol -ophthalmoleucoscope -ophthalmolith -ophthalmology -ophthalmologic -ophthalmological -ophthalmologically -ophthalmologies -ophthalmologist -ophthalmologists -ophthalmomalacia -ophthalmometer -ophthalmometry -ophthalmometric -ophthalmometrical -ophthalmomycosis -ophthalmomyositis -ophthalmomyotomy -ophthalmoneuritis -ophthalmopathy -ophthalmophlebotomy -ophthalmophore -ophthalmophorous -ophthalmophthisis -ophthalmoplasty -ophthalmoplegia -ophthalmoplegic -ophthalmopod -ophthalmoptosis -ophthalmo-reaction -ophthalmorrhagia -ophthalmorrhea -ophthalmorrhexis -Ophthalmosaurus -ophthalmoscope -ophthalmoscopes -ophthalmoscopy -ophthalmoscopic -ophthalmoscopical -ophthalmoscopies -ophthalmoscopist -ophthalmostasis -ophthalmostat -ophthalmostatometer -ophthalmothermometer -ophthalmotomy -ophthalmotonometer -ophthalmotonometry -ophthalmotrope -ophthalmotropometer -opia -opiane -opianic -opianyl -opiate -opiated -opiateproof -opiates -opiatic -opiating -Opiconsivia -opifex -opifice -opificer -opiism -Opilia -Opiliaceae -opiliaceous -Opiliones -Opilionina -opilionine -Opilonea -Opimian -opinability -opinable -opinably -opinant -opination -opinative -opinatively -opinator -opine -opined -opiner -opiners -opines -oping -opiniaster -opiniastre -opiniastrety -opiniastrous -opiniate -opiniated -opiniatedly -opiniater -opiniative -opiniatively -opiniativeness -opiniatre -opiniatreness -opiniatrety -opinicus -opinicuses -opining -opinion -opinionable -opinionaire -opinional -opinionate -opinionated -opinionatedly -opinionatedness -opinionately -opinionative -opinionatively -opinionativeness -opinioned -opinionedness -opinionist -opinions -opinion's -opinion-sampler -opioid -opioids -opiomania -opiomaniac -opiophagy -opiophagism -opiparous -Opis -opisometer -opisthenar -opisthion -opistho- -opisthobranch -Opisthobranchia -opisthobranchiate -Opisthocoelia -opisthocoelian -opisthocoelous -opisthocome -Opisthocomi -Opisthocomidae -opisthocomine -opisthocomous -opisthodetic -opisthodome -opisthodomos -opisthodomoses -opisthodomus -opisthodont -opisthogastric -opisthogyrate -opisthogyrous -opisthoglyph -Opisthoglypha -opisthoglyphic -opisthoglyphous -Opisthoglossa -opisthoglossal -opisthoglossate -Opisthognathidae -opisthognathism -opisthognathous -opisthograph -opisthographal -opisthography -opisthographic -opisthographical -Opisthoparia -opisthoparian -opisthophagic -opisthoporeia -opisthorchiasis -Opisthorchis -opisthosomal -Opisthothelae -opisthotic -opisthotonic -opisthotonoid -opisthotonos -opisthotonus -opium -opium-drinking -opium-drowsed -opium-eating -opiumism -opiumisms -opiums -opium-shattered -opium-smoking -opium-taking -OPM -opobalsam -opobalsamum -opodeldoc -opodidymus -opodymus -opolis -opopanax -opoponax -Oporto -opossum -opossums -opotherapy -Opp -opp. -Oppen -Oppenheim -Oppenheimer -Oppian -oppida -oppidan -oppidans -oppidum -oppignerate -oppignorate -oppilant -oppilate -oppilated -oppilates -oppilating -oppilation -oppilative -opplete -oppletion -oppone -opponency -opponens -opponent -opponents -opponent's -Opportina -Opportuna -opportune -opportuneless -opportunely -opportuneness -opportunism -opportunisms -opportunist -opportunistic -opportunistically -opportunists -opportunity -opportunities -opportunity's -opposability -opposabilities -opposable -opposal -oppose -opposed -opposeless -opposer -opposers -opposes -opposing -opposingly -opposit -opposite -opposite-leaved -oppositely -oppositeness -oppositenesses -opposites -oppositi- -oppositiflorous -oppositifolious -opposition -oppositional -oppositionary -oppositionism -oppositionist -oppositionists -oppositionless -oppositions -oppositious -oppositipetalous -oppositipinnate -oppositipolar -oppositisepalous -oppositive -oppositively -oppositiveness -oppossum -opposure -oppress -oppressed -oppresses -oppressible -oppressing -oppression -oppressionist -oppressions -oppressive -oppressively -oppressiveness -oppressor -oppressors -oppressor's -opprobry -opprobriate -opprobriated -opprobriating -opprobrious -opprobriously -opprobriousness -opprobrium -opprobriums -oppugn -oppugnacy -oppugnance -oppugnancy -oppugnant -oppugnate -oppugnation -oppugned -oppugner -oppugners -oppugning -oppugns -OPS -opsy -opsigamy -opsimath -opsimathy -opsin -opsins -opsiometer -opsis -opsisform -opsistype -OPSM -opsonia -opsonic -opsoniferous -opsonify -opsonification -opsonified -opsonifies -opsonifying -opsonin -opsonins -opsonist -opsonium -opsonization -opsonize -opsonized -opsonizes -opsonizing -opsonogen -opsonoid -opsonology -opsonometry -opsonophilia -opsonophilic -opsonophoric -opsonotherapy -opt -optable -optableness -optably -Optacon -optant -optate -optation -optative -optatively -optatives -opted -Optez -opthalmic -opthalmology -opthalmologic -opthalmophorium -opthalmoplegy -opthalmoscopy -opthalmothermometer -optic -optical -optically -optician -opticians -opticism -opticist -opticists -opticity -opticly -optico- -opticochemical -opticociliary -opticon -opticopapillary -opticopupillary -optics -optigraph -optima -optimacy -optimal -optimality -optimally -optimate -optimates -optime -optimes -optimeter -optimise -optimised -optimises -optimising -optimism -optimisms -optimist -optimistic -optimistical -optimistically -optimisticalness -optimists -optimity -optimization -optimizations -optimization's -optimize -optimized -optimizer -optimizers -optimizes -optimizing -optimum -optimums -opting -option -optional -optionality -optionalize -optionally -optionals -optionary -optioned -optionee -optionees -optioning -optionor -options -option's -optive -opto- -optoacoustic -optoblast -optoelectronic -optogram -optography -optoisolate -optokinetic -optology -optological -optologist -optomeninx -optometer -optometry -optometric -optometrical -optometries -optometrist -optometrists -optophone -optotechnics -optotype -opts -Opulaster -opulence -opulences -opulency -opulencies -opulent -opulently -opulus -Opuntia -Opuntiaceae -Opuntiales -opuntias -opuntioid -opus -opuscle -opuscula -opuscular -opuscule -opuscules -opusculum -opuses -OPX -oquassa -oquassas -Oquawka -Oquossoc -or -or- -Ora -orabassu -Orabel -Orabelle -orach -orache -oraches -oracy -oracle -oracler -oracles -oracle's -Oracon -oracula -oracular -oracularity -oracularly -oracularness -oraculate -oraculous -oraculously -oraculousness -oraculum -orad -Oradea -Oradell -orae -orage -oragious -oraison -Orakzai -oral -orale -Oralee -oraler -Oralia -Oralie -oralism -oralisms -oralist -oralists -orality -oralities -oralization -oralize -Oralla -Oralle -orally -oralogy -oralogist -orals -Oram -Oran -Orang -Orange -orangeade -orangeades -orangeado -orangeat -orangeberry -orangeberries -orangebird -orange-blossom -Orangeburg -orange-colored -orange-crowned -orange-eared -Orangefield -orange-fleshed -orange-flower -orange-flowered -orange-headed -orange-hued -orangey -orange-yellow -orangeish -Orangeism -Orangeist -orangeleaf -orange-leaf -Orangeman -Orangemen -orangeness -oranger -orange-red -orangery -orangeries -orangeroot -orange-rufous -oranges -orange's -orange-shaped -orange-sized -orange-striped -orange-tailed -orange-tawny -orange-throated -orange-tip -orange-tipped -orange-tree -Orangevale -Orangeville -orange-winged -orangewoman -orangewood -orangy -orangier -orangiest -oranginess -orangish -orangism -orangist -orangite -orangize -orangoutan -orangoutang -orang-outang -orangoutans -orangs -orangutan -orang-utan -orangutang -orangutangs -orangutans -orans -orant -orante -orantes -Oraon -orary -oraria -orarian -orarion -orarium -oras -orate -orated -orates -orating -oration -orational -orationer -orations -oration's -orator -Oratory -oratorial -oratorially -Oratorian -Oratorianism -Oratorianize -oratoric -oratorical -oratorically -oratories -oratorio -oratorios -oratory's -oratorium -oratorize -oratorlike -orators -orator's -oratorship -oratress -oratresses -oratrices -oratrix -Oraville -Orazio -ORB -Orbadiah -Orban -orbate -orbation -orbed -orbell -orby -orbic -orbical -Orbicella -orbicle -orbicular -orbiculares -orbicularis -orbicularity -orbicularly -orbicularness -orbiculate -orbiculated -orbiculately -orbiculation -orbiculato- -orbiculatocordate -orbiculatoelliptical -Orbiculoidea -orbier -orbiest -orbific -Orbilian -Orbilius -orbing -Orbisonia -orbit -orbital -orbitale -orbitally -orbitals -orbitar -orbitary -orbite -orbited -orbitelar -Orbitelariae -orbitelarian -orbitele -orbitelous -orbiter -orbiters -orbity -orbiting -orbito- -orbitofrontal -Orbitoides -Orbitolina -orbitolite -Orbitolites -orbitomalar -orbitomaxillary -orbitonasal -orbitopalpebral -orbitosphenoid -orbitosphenoidal -orbitostat -orbitotomy -orbitozygomatic -orbits -orbitude -orbless -orblet -orblike -orbs -Orbulina -orc -Orca -Orcadian -orcanet -orcanette -Orcas -orcein -orceins -orch -orch. -orchamus -orchanet -orchard -orcharding -orchardist -orchardists -orchardman -orchardmen -orchards -orchard's -orchat -orchectomy -orcheitis -orchel -orchella -orchen -orchesis -orchesography -orchester -Orchestia -orchestian -orchestic -orchestiid -Orchestiidae -orchestra -orchestral -orchestraless -orchestrally -orchestras -orchestra's -orchestrate -orchestrated -orchestrater -orchestrates -orchestrating -orchestration -orchestrational -orchestrations -orchestrator -orchestrators -orchestre -orchestrelle -orchestric -orchestrina -orchestrion -orchialgia -orchic -orchichorea -orchid -Orchidaceae -orchidacean -orchidaceous -Orchidales -orchidalgia -orchidean -orchidectomy -orchidectomies -orchideous -orchideously -orchidist -orchiditis -orchido- -orchidocele -orchidocelioplasty -orchidology -orchidologist -orchidomania -orchidopexy -orchidoplasty -orchidoptosis -orchidorrhaphy -orchidotherapy -orchidotomy -orchidotomies -orchids -orchid's -orchiectomy -orchiectomies -orchiencephaloma -orchiepididymitis -orchil -orchilytic -orchilla -orchils -orchiocatabasis -orchiocele -orchiodynia -orchiomyeloma -orchioncus -orchioneuralgia -orchiopexy -orchioplasty -orchiorrhaphy -orchioscheocele -orchioscirrhus -orchiotomy -Orchis -orchises -orchitic -orchitis -orchitises -orchotomy -orchotomies -orcin -orcine -orcinol -orcinols -orcins -Orcinus -orcs -Orcus -Orczy -Ord -ord. -ordain -ordainable -ordained -ordainer -ordainers -ordaining -ordainment -ordains -ordalian -ordalium -ordanchite -ordeal -ordeals -ordene -order -orderable -order-book -ordered -orderedness -orderer -orderers -ordering -orderings -orderless -orderlessness -orderly -orderlies -orderliness -orderlinesses -orders -Orderville -ordinability -ordinable -ordinaire -ordinal -ordinally -ordinals -ordinance -ordinances -ordinance's -ordinand -ordinands -ordinant -ordinar -ordinary -ordinariate -ordinarier -ordinaries -ordinariest -ordinarily -ordinariness -ordinaryship -ordinarius -ordinate -ordinated -ordinately -ordinates -ordinating -ordination -ordinations -ordinative -ordinatomaculate -ordinato-punctate -ordinator -ordinee -ordines -ORDLIX -ordn -ordn. -ordnance -ordnances -ordo -ordonnance -ordonnances -ordonnant -ordos -ordosite -Ordovian -Ordovices -Ordovician -ordu -ordure -ordures -ordurous -ordurousness -Ordway -Ordzhonikidze -Ore -oread -oreads -Oreamnos -Oreana -Oreas -ore-bearing -Orebro -ore-buying -orecchion -ore-crushing -orectic -orective -ored -ore-extracting -Orefield -ore-forming -Oreg -Oreg. -oregano -oreganos -Oregon -oregoni -Oregonia -Oregonian -oregonians -ore-handling -ore-hoisting -oreide -oreides -orey-eyed -oreilet -oreiller -oreillet -oreillette -O'Reilly -orejon -Orel -Oreland -Orelee -Orelia -Orelie -Orella -Orelle -orellin -Orelu -Orem -oreman -ore-milling -ore-mining -oremus -Oren -Orenburg -orenda -orendite -Orense -Oreocarya -Oreodon -oreodont -Oreodontidae -oreodontine -oreodontoid -Oreodoxa -oreography -Oreophasinae -oreophasine -Oreophasis -Oreopithecus -Oreortyx -oreotragine -Oreotragus -Oreotrochilus -ore-roasting -ores -ore's -oreshoot -ore-smelting -Orest -Oreste -Orestean -Oresteia -Orestes -Oresund -oretic -ore-washing -oreweed -ore-weed -orewood -orexin -orexis -orf -orfe -Orfeo -Orferd -ORFEUS -orfevrerie -Orff -orfgild -Orfield -Orfinger -Orford -Orfordville -orfray -orfrays -Orfurd -org -org. -orgal -orgament -orgamy -organ -organ- -organa -organal -organbird -organ-blowing -organdy -organdie -organdies -organella -organellae -organelle -organelles -organer -organette -organ-grinder -organy -organic -organical -organically -organicalness -organicism -organicismal -organicist -organicistic -organicity -organics -organify -organific -organifier -organing -organisability -organisable -organisation -organisational -organisationally -organise -organised -organises -organising -organism -organismal -organismic -organismically -organisms -organism's -organist -organistic -organistrum -organists -organist's -organistship -organity -organizability -organizable -organization -organizational -organizationally -organizationist -organizations -organization's -organizatory -organize -organized -organizer -organizers -organizes -organizing -organless -organo- -organoantimony -organoarsenic -organobismuth -organoboron -organochlorine -organochordium -organogel -organogen -organogenesis -organogenetic -organogenetically -organogeny -organogenic -organogenist -organogold -organography -organographic -organographical -organographies -organographist -organoid -organoiron -organolead -organoleptic -organoleptically -organolithium -organology -organologic -organological -organologist -organomagnesium -organomercury -organomercurial -organometallic -organon -organonym -organonymal -organonymy -organonymic -organonyn -organonomy -organonomic -organons -organopathy -organophil -organophile -organophyly -organophilic -organophone -organophonic -organophosphate -organophosphorous -organophosphorus -organoplastic -organoscopy -organosilicon -organosiloxane -organosilver -organosodium -organosol -organotherapeutics -organotherapy -organotin -organotrophic -organotropy -organotropic -organotropically -organotropism -organozinc -organ-piano -organ-pipe -organry -organs -organ's -organule -organum -organums -organza -organzas -organzine -organzined -Orgas -orgasm -orgasmic -orgasms -orgastic -orgeat -orgeats -Orgel -Orgell -orgy -orgia -orgiac -orgiacs -orgiasm -orgiast -orgiastic -orgiastical -orgiastically -orgic -orgies -orgyia -orgy's -Orgoglio -orgone -orgones -orgue -orgueil -orguil -orguinette -orgulous -orgulously -orhamwood -Ori -ory -oria -orial -Orian -Oriana -Oriane -Orianna -orians -Orias -oribatid -Oribatidae -oribatids -Oribel -Oribella -Oribelle -oribi -oribis -orichalc -orichalceous -orichalch -orichalcum -oricycle -Orick -oriconic -orycterope -Orycteropodidae -Orycteropus -oryctics -orycto- -oryctognosy -oryctognostic -oryctognostical -oryctognostically -Oryctolagus -oryctology -oryctologic -oryctologist -Oriel -ori-ellipse -oriels -oriency -Orient -Oriental -Orientalia -Orientalis -Orientalisation -Orientalise -Orientalised -Orientalising -Orientalism -Orientalist -orientality -orientalization -Orientalize -orientalized -orientalizing -orientally -Orientalogy -orientals -orientate -orientated -orientates -orientating -orientation -orientational -orientationally -orientations -orientation's -orientative -orientator -Oriente -oriented -orienteering -orienter -orienting -orientite -orientization -orientize -oriently -orientness -orients -orifacial -orifice -orifices -orifice's -orificial -oriflamb -oriflamme -oriform -orig -orig. -origami -origamis -origan -origanized -origans -Origanum -origanums -Origen -Origenian -Origenic -Origenical -Origenism -Origenist -Origenistic -Origenize -origin -originable -original -originalist -originality -originalities -originally -originalness -originals -originant -originary -originarily -originate -originated -originates -originating -origination -originative -originatively -originator -originators -originator's -originatress -Origine -origines -originist -origins -origin's -orignal -orihyperbola -orihon -Oriya -orillion -orillon -Orin -orinasal -orinasality -orinasally -orinasals -Orinda -Oringa -Oringas -Orinoco -Oryol -Oriole -orioles -Oriolidae -Oriolus -Orion -Orionis -orious -Oriska -Oriskany -Oriskanian -orismology -orismologic -orismological -orison -orisons -orisphere -Orissa -oryssid -Oryssidae -Oryssus -oristic -Orit -Orithyia -orium -Oryx -oryxes -Oryza -Orizaba -oryzanin -oryzanine -oryzenin -oryzivorous -Oryzomys -Oryzopsis -Oryzorictes -Oryzorictinae -Orji -Orjonikidze -orkey -Orkhon -Orkney -Orkneyan -Orkneys -orl -Orla -orlage -Orlan -Orlanais -Orland -Orlando -Orlans -Orlanta -Orlantha -orle -Orlean -Orleanais -Orleanism -Orleanist -Orleanistic -Orleans -Orlena -Orlene -orles -orlet -orleways -orlewise -Orly -Orlich -Orlin -Orlina -Orlinda -Orling -orlo -Orlon -orlop -orlops -orlos -Orlosky -Orlov -ORM -Orma -Orman -Ormand -Ormandy -Ormazd -Orme -ormer -ormers -Ormiston -ormolu -ormolus -Ormond -Orms -Ormsby -Ormuz -ormuzine -Orna -ORNAME -ornament -ornamental -ornamentalism -ornamentalist -ornamentality -ornamentalize -ornamentally -ornamentary -ornamentation -ornamentations -ornamented -ornamenter -ornamenting -ornamentist -ornaments -ornary -Ornas -ornate -ornately -ornateness -ornatenesses -ornation -ornature -Orne -ornery -ornerier -orneriest -ornerily -orneriness -ornes -Orneus -Ornie -ornify -ornis -orniscopy -orniscopic -orniscopist -ornith -ornith- -ornithes -ornithic -ornithichnite -ornithine -Ornithischia -ornithischian -ornithivorous -ornitho- -ornithobiography -ornithobiographical -ornithocephalic -Ornithocephalidae -ornithocephalous -Ornithocephalus -ornithocoprolite -ornithocopros -ornithodelph -Ornithodelphia -ornithodelphian -ornithodelphic -ornithodelphous -Ornithodoros -Ornithogaea -Ornithogaean -Ornithogalum -ornithogeographic -ornithogeographical -ornithography -ornithoid -ornithol -ornithol. -Ornitholestes -ornitholite -ornitholitic -ornithology -ornithologic -ornithological -ornithologically -ornithologist -ornithologists -ornithomancy -ornithomania -ornithomantia -ornithomantic -ornithomantist -ornithomimid -Ornithomimidae -Ornithomimus -ornithomyzous -ornithomorph -ornithomorphic -ornithon -Ornithopappi -ornithophile -ornithophily -ornithophilist -ornithophilite -ornithophilous -ornithophobia -ornithopod -Ornithopoda -ornithopter -Ornithoptera -Ornithopteris -Ornithorhynchidae -ornithorhynchous -Ornithorhynchus -ornithosaur -Ornithosauria -ornithosaurian -Ornithoscelida -ornithoscelidan -ornithoscopy -ornithoscopic -ornithoscopist -ornithoses -ornithosis -ornithotic -ornithotomy -ornithotomical -ornithotomist -ornithotrophy -Ornithurae -ornithuric -ornithurous -ornithvrous -Ornytus -ORNL -ornoite -Ornstead -oro- -oroanal -Orobanchaceae -orobanchaceous -Orobanche -orobancheous -orobathymetric -Orobatoidea -orocentral -Orochon -Orocovis -orocratic -orodiagnosis -orogen -orogenesy -orogenesis -orogenetic -orogeny -orogenic -orogenies -oroggaphical -orograph -orography -orographic -orographical -orographically -oroheliograph -orohydrography -orohydrographic -orohydrographical -Orohippus -oroide -oroides -Orola -orolingual -orology -orological -orologies -orologist -OROM -orometer -orometers -orometry -orometric -Oromo -oronasal -oronasally -Orondo -Orono -Oronoco -Oronogo -oronoko -oronooko -Orontes -Orontium -Orontius -oropharyngeal -oropharynges -oropharynx -oropharynxes -Orose -Orosi -Orosius -orotherapy -Orotinan -orotund -orotundity -orotunds -O'Rourke -Orovada -Oroville -Orozco -Orpah -Orpha -orphan -orphanage -orphanages -orphancy -orphandom -orphaned -orphange -orphanhood -orphaning -orphanism -orphanize -orphanry -orphans -orphanship -orpharion -Orphean -Orpheist -orpheon -orpheonist -orpheum -Orpheus -Orphic -Orphical -Orphically -Orphicism -Orphism -Orphist -Orphize -orphrey -orphreyed -orphreys -orpiment -orpiments -orpin -orpinc -orpine -orpines -Orpington -orpins -orpit -Orr -orra -Orran -Orren -orrery -orreriec -orreries -orrhoid -orrhology -orrhotherapy -orrice -orrices -Orrick -Orrin -Orrington -orris -orrises -orrisroot -orrow -Orrstown -Orrtanna -Orrum -Orrville -ors -or's -Orsa -Orsay -orsede -orsedue -orseille -orseilline -orsel -orselle -orseller -orsellic -orsellinate -orsellinic -Orsini -Orsino -Orsk -Orsola -Orson -ORT -ortalid -Ortalidae -ortalidian -Ortalis -ortanique -Ortega -Ortegal -Orten -Ortensia -orterde -ortet -Orth -orth- -Orth. -Orthaea -Orthagoriscus -orthal -orthant -orthantimonic -Ortheris -Orthia -orthian -orthic -orthicon -orthiconoscope -orthicons -orthid -Orthidae -Orthis -orthite -orthitic -Orthman -ortho -ortho- -orthoarsenite -orthoaxis -orthobenzoquinone -orthobiosis -orthoborate -orthobrachycephalic -orthocarbonic -orthocarpous -Orthocarpus -orthocenter -orthocentre -orthocentric -orthocephaly -orthocephalic -orthocephalous -orthoceracone -Orthoceran -Orthoceras -Orthoceratidae -orthoceratite -orthoceratitic -orthoceratoid -orthochlorite -orthochromatic -orthochromatize -orthocym -orthocymene -orthoclase -orthoclase-basalt -orthoclase-gabbro -orthoclasite -orthoclastic -orthocoumaric -ortho-cousin -orthocresol -orthodiaene -orthodiagonal -orthodiagram -orthodiagraph -orthodiagraphy -orthodiagraphic -orthodiazin -orthodiazine -orthodolichocephalic -orthodomatic -orthodome -orthodontia -orthodontic -orthodontics -orthodontist -orthodontists -Orthodox -orthodoxal -orthodoxality -orthodoxally -orthodoxes -Orthodoxy -orthodoxian -orthodoxical -orthodoxically -orthodoxicalness -orthodoxies -orthodoxism -orthodoxist -orthodoxly -orthodoxness -orthodromy -orthodromic -orthodromics -orthoepy -orthoepic -orthoepical -orthoepically -orthoepies -orthoepist -orthoepistic -orthoepists -orthoformic -orthogamy -orthogamous -orthoganal -orthogenesis -orthogenetic -orthogenetically -orthogenic -orthognathy -orthognathic -orthognathism -orthognathous -orthognathus -orthogneiss -orthogonal -orthogonality -orthogonalization -orthogonalize -orthogonalized -orthogonalizing -orthogonally -orthogonial -orthograde -orthogranite -orthograph -orthographer -orthography -orthographic -orthographical -orthographically -orthographies -orthographise -orthographised -orthographising -orthographist -orthographize -orthographized -orthographizing -orthohydrogen -orthologer -orthology -orthologian -orthological -orthometopic -orthometry -orthometric -orthomolecular -orthomorphic -Orthonectida -orthonitroaniline -orthonormal -orthonormality -ortho-orsellinic -orthopaedy -orthopaedia -orthopaedic -orthopaedically -orthopaedics -orthopaedist -orthopath -orthopathy -orthopathic -orthopathically -orthopedy -orthopedia -orthopedic -orthopedical -orthopedically -orthopedics -orthopedist -orthopedists -orthophenylene -orthophyre -orthophyric -orthophony -orthophonic -orthophoria -orthophoric -orthophosphate -orthophosphoric -orthopinacoid -orthopinacoidal -orthopyramid -orthopyroxene -orthoplasy -orthoplastic -orthoplumbate -orthopnea -orthopneic -orthopnoea -orthopnoeic -orthopod -Orthopoda -orthopraxy -orthopraxia -orthopraxis -orthoprism -orthopsychiatry -orthopsychiatric -orthopsychiatrical -orthopsychiatrist -orthopter -Orthoptera -orthopteral -orthopteran -orthopterist -orthopteroid -Orthopteroidea -orthopterology -orthopterological -orthopterologist -orthopteron -orthopterous -orthoptetera -orthoptic -orthoptics -orthoquinone -orthorhombic -Orthorrhapha -orthorrhaphy -orthorrhaphous -Orthos -orthoscope -orthoscopic -orthose -orthoselection -orthosemidin -orthosemidine -orthosilicate -orthosilicic -orthosymmetry -orthosymmetric -orthosymmetrical -orthosymmetrically -orthosis -orthosite -orthosomatic -orthospermous -orthostat -orthostatai -orthostates -orthostati -orthostatic -orthostichy -orthostichies -orthostichous -orthostyle -orthosubstituted -orthotactic -orthotectic -orthotic -orthotics -orthotype -orthotypous -orthotist -orthotolidin -orthotolidine -orthotoluic -orthotoluidin -orthotoluidine -ortho-toluidine -orthotomic -orthotomous -orthotone -orthotonesis -orthotonic -orthotonus -orthotropal -orthotropy -orthotropic -orthotropically -orthotropism -orthotropous -orthovanadate -orthovanadic -orthoveratraldehyde -orthoveratric -orthoxazin -orthoxazine -orthoxylene -ortho-xylene -orthron -Orthros -Orthrus -ortiga -ortygan -Ortygian -Ortyginae -ortygine -Orting -ortive -Ortyx -Ortiz -Ortley -Ortler -Ortles -ortman -Ortol -ortolan -ortolans -Orton -Ortonville -Ortrud -Ortrude -orts -ortstaler -ortstein -Orunchun -Oruntha -Oruro -ORuss -Orv -Orva -Orvah -Orvan -Orvas -orvet -Orvie -orvietan -orvietite -Orvieto -Orvil -Orville -Orwell -Orwellian -Orwigsburg -Orwin -orzo -orzos -OS -o's -OS2 -OSA -OSAC -Osage -Osages -Osaka -Osakis -osamin -osamine -Osana -Osanna -osar -Osawatomie -osazone -OSB -Osber -Osbert -Osborn -Osborne -Osbourn -Osbourne -Osburn -OSC -Oscan -OSCAR -Oscarella -Oscarellidae -oscars -oscella -Osceola -oscheal -oscheitis -oscheo- -oscheocarcinoma -oscheocele -oscheolith -oscheoma -oscheoncus -oscheoplasty -Oschophoria -Oscilight -oscillance -oscillancy -oscillant -Oscillaria -Oscillariaceae -oscillariaceous -oscillate -oscillated -oscillates -oscillating -oscillation -oscillational -oscillations -oscillation's -oscillative -oscillatively -oscillator -oscillatory -Oscillatoria -Oscillatoriaceae -oscillatoriaceous -oscillatorian -oscillators -oscillator's -oscillogram -oscillograph -oscillography -oscillographic -oscillographically -oscillographies -oscillometer -oscillometry -oscillometric -oscillometries -oscilloscope -oscilloscopes -oscilloscope's -oscilloscopic -oscilloscopically -oscin -oscine -Oscines -oscinian -Oscinidae -oscinine -Oscinis -oscitance -oscitancy -oscitancies -oscitant -oscitantly -oscitate -oscitation -oscnode -Osco -Oscoda -Osco-Umbrian -OSCRL -oscula -osculable -osculant -oscular -oscularity -osculate -osculated -osculates -osculating -osculation -osculations -osculatory -osculatories -osculatrix -osculatrixes -oscule -oscules -osculiferous -osculum -oscurantist -oscurrantist -OSD -OSDIT -OSDS -ose -Osee -Osei -osela -osella -oselle -oses -Osetian -Osetic -OSF -OSFCW -Osgood -OSHA -oshac -O-shaped -Oshawa -oshea -O'Shea -O'Shee -Osher -Oshinski -Oshkosh -Oshogbo -Oshoto -Oshtemo -OSI -Osy -Osiandrian -oside -osier -osier-bordered -osiered -osier-fringed -osiery -osieries -osierlike -osier-like -osiers -osier-woven -Osijek -Osyka -OSINET -Osirian -Osiride -Osiridean -Osirify -Osirification -Osiris -Osirism -OSIRM -osis -Osyth -Osithe -osity -Oskaloosa -Oskar -OSlav -Osler -Oslo -Osman -Osmanie -Osmanli -Osmanlis -Osmanthus -osmate -osmateria -osmaterium -osmatic -osmatism -osmazomatic -osmazomatous -osmazome -OSME -Osmen -Osmeridae -Osmerus -osmesis -osmeteria -osmeterium -osmetic -osmiamic -osmic -osmics -osmidrosis -osmi-iridium -osmin -osmina -osmio- -osmious -osmiridium -osmite -osmium -osmiums -Osmo -osmo- -osmodysphoria -osmogene -osmograph -osmol -osmolagnia -osmolal -osmolality -osmolar -osmolarity -osmology -osmols -osmometer -osmometry -osmometric -osmometrically -Osmond -osmondite -osmophobia -osmophore -osmoregulation -osmoregulatory -Osmorhiza -osmoscope -osmose -osmosed -osmoses -osmosing -osmosis -osmotactic -osmotaxis -osmotherapy -osmotic -osmotically -osmous -Osmund -Osmunda -Osmundaceae -osmundaceous -osmundas -osmundine -osmunds -OSN -Osnabr -Osnabrock -Osnabruck -Osnaburg -osnaburgs -Osnappar -OSO -osoberry -oso-berry -osoberries -osone -osophy -osophies -osophone -Osorno -osotriazine -osotriazole -OSP -osperm -OSPF -osphere -osphyalgia -osphyalgic -osphyarthritis -osphyitis -osphyocele -osphyomelitis -osphradia -osphradial -osphradium -osphresiolagnia -osphresiology -osphresiologic -osphresiologist -osphresiometer -osphresiometry -osphresiophilia -osphresis -osphretic -Osphromenidae -ospore -Osprey -ospreys -OSPS -OSRD -Osric -Osrick -Osrock -OSS -OSSA -ossal -ossarium -ossature -OSSE -ossea -ossein -osseins -osselet -ossements -Osseo -osseo- -osseoalbuminoid -osseoaponeurotic -osseocartilaginous -osseofibrous -osseomucoid -osseous -osseously -Osset -Ossete -osseter -Ossetia -Ossetian -Ossetic -Ossetine -Ossetish -Ossy -ossia -Ossian -Ossianesque -Ossianic -Ossianism -Ossianize -ossicle -ossicles -ossicula -ossicular -ossiculate -ossiculated -ossicule -ossiculectomy -ossiculotomy -ossiculum -Ossie -Ossietzky -ossiferous -ossify -ossific -ossification -ossifications -ossificatory -ossified -ossifier -ossifiers -ossifies -ossifying -ossifluence -ossifluent -ossiform -ossifrage -ossifrangent -Ossineke -Ossining -Ossip -Ossipee -ossypite -ossivorous -ossuary -ossuaries -ossuarium -Osswald -OST -ostalgia -Ostap -Ostara -ostariophysan -Ostariophyseae -Ostariophysi -ostariophysial -ostariophysous -ostarthritis -oste- -osteal -ostealgia -osteanabrosis -osteanagenesis -ostearthritis -ostearthrotomy -ostectomy -ostectomies -osteectomy -osteectomies -osteectopy -osteectopia -Osteen -Osteichthyes -ostein -osteitic -osteitides -osteitis -ostemia -ostempyesis -Ostend -Ostende -ostensibility -ostensibilities -ostensible -ostensibly -ostension -ostensive -ostensively -ostensory -ostensoria -ostensories -ostensorium -ostensorsoria -ostent -ostentate -ostentation -ostentations -ostentatious -ostentatiously -ostentatiousness -ostentive -ostentous -osteo- -osteoaneurysm -osteoarthritic -osteoarthritis -osteoarthropathy -osteoarthrotomy -osteoblast -osteoblastic -osteoblastoma -osteoblasts -osteocachetic -osteocarcinoma -osteocartilaginous -osteocele -osteocephaloma -osteochondritis -osteochondrofibroma -osteochondroma -osteochondromatous -osteochondropathy -osteochondrophyte -osteochondrosarcoma -osteochondrous -osteocystoma -osteocyte -osteoclasia -osteoclasis -osteoclast -osteoclasty -osteoclastic -osteocolla -osteocomma -osteocranium -osteodentin -osteodentinal -osteodentine -osteoderm -osteodermal -osteodermatous -osteodermia -osteodermis -osteodermous -osteodiastasis -osteodynia -osteodystrophy -osteoencephaloma -osteoenchondroma -osteoepiphysis -osteofibroma -osteofibrous -osteogangrene -osteogen -osteogenesis -osteogenetic -osteogeny -osteogenic -osteogenist -osteogenous -osteoglossid -Osteoglossidae -osteoglossoid -Osteoglossum -osteographer -osteography -osteohalisteresis -osteoid -osteoids -Osteolepidae -Osteolepis -osteolysis -osteolite -osteolytic -osteologer -osteology -osteologic -osteological -osteologically -osteologies -osteologist -osteoma -osteomalacia -osteomalacial -osteomalacic -osteomancy -osteomanty -osteomas -osteomata -osteomatoid -osteome -osteomere -osteometry -osteometric -osteometrical -osteomyelitis -osteoncus -osteonecrosis -osteoneuralgia -osteopaedion -osteopath -osteopathy -osteopathic -osteopathically -osteopathies -osteopathist -osteopaths -osteopedion -osteopenia -osteoperiosteal -osteoperiostitis -osteopetrosis -osteophage -osteophagia -osteophyma -osteophyte -osteophytic -osteophlebitis -osteophone -osteophony -osteophore -osteoplaque -osteoplast -osteoplasty -osteoplastic -osteoplasties -osteoporosis -osteoporotic -osteorrhaphy -osteosarcoma -osteosarcomatous -osteoscleroses -osteosclerosis -osteosclerotic -osteoscope -osteoses -osteosynovitis -osteosynthesis -osteosis -osteosteatoma -osteostixis -osteostomatous -osteostomous -osteostracan -Osteostraci -osteosuture -osteothrombosis -osteotome -osteotomy -osteotomies -osteotomist -osteotribe -osteotrite -osteotrophy -osteotrophic -Oster -Osterburg -Osterhus -osteria -Osterreich -Ostertagia -Osterville -Ostia -Ostiak -Ostyak -Ostyak-samoyedic -ostial -ostiary -ostiaries -ostiarius -ostiate -Ostic -ostinato -ostinatos -ostiolar -ostiolate -ostiole -ostioles -ostitis -ostium -Ostler -ostleress -ostlerie -ostlers -Ostmannic -ostmark -ostmarks -Ostmen -ostomatid -ostomy -ostomies -ostoses -ostosis -ostosises -OSTP -Ostpreussen -ostraca -Ostracea -ostracean -ostraceous -Ostraciidae -ostracine -ostracioid -Ostracion -ostracise -ostracism -ostracisms -ostracite -ostracizable -ostracization -ostracize -ostracized -ostracizer -ostracizes -ostracizing -ostraco- -ostracod -Ostracoda -ostracodan -ostracode -ostracoderm -Ostracodermi -ostracodous -ostracods -ostracoid -Ostracoidea -ostracon -ostracophore -Ostracophori -ostracophorous -ostracum -Ostraeacea -ostraite -Ostrander -Ostrava -Ostraw -ostrca -Ostrea -ostreaceous -ostreger -ostrei- -ostreicultural -ostreiculture -ostreiculturist -Ostreidae -ostreiform -ostreodynamometer -ostreoid -ostreophage -ostreophagist -ostreophagous -Ostrya -ostrich -ostrich-egg -ostriches -ostrich-feather -ostrichlike -ostrich-plume -ostrich's -ostringer -Ostrogoth -Ostrogothian -Ostrogothic -ostsis -ostsises -Ostwald -Osugi -osullivan -O'Sullivan -Osvaldo -Oswal -Oswald -Oswaldo -Oswegan -Oswegatchie -Oswego -Oswell -Oswiecim -Oswin -ot -ot- -OTA -otacoustic -otacousticon -otacust -Otaheitan -Otaheite -otalgy -otalgia -otalgias -otalgic -otalgies -otary -Otaria -otarian -otaries -Otariidae -Otariinae -otariine -otarine -otarioid -Otaru -otate -OTB -OTBS -OTC -OTDR -ote -OTEC -otectomy -Otego -otelcosis -Otelia -Otello -Otero -Otes -OTF -Otha -othaematoma -Othake -OTHB -Othe -othelcosis -Othelia -Othella -Othello -othematoma -othematomata -othemorrhea -otheoscope -Other -other-directed -other-directedness -other-direction -otherdom -otherest -othergates -other-group -otherguess -otherguise -otherhow -otherism -otherist -otherness -others -other-self -othersome -othertime -othertimes -otherways -otherwards -otherwhence -otherwhere -otherwhereness -otherwheres -otherwhile -otherwhiles -otherwhither -otherwise -otherwiseness -otherworld -otherworldly -otherworldliness -otherworldness -othygroma -Othilia -Othilie -Othin -Othinism -Othman -othmany -Othniel -Otho -Othoniel -Othonna -Otyak -otiant -otiatry -otiatric -otiatrics -otic -oticodinia -Otidae -Otides -otidia -Otididae -otidiform -otidine -Otidiphaps -otidium -Otila -Otilia -Otina -Otionia -otiorhynchid -Otiorhynchidae -Otiorhynchinae -otiose -otiosely -otioseness -otiosity -otiosities -Otis -Otisco -Otisville -otitic -otitides -otitis -otium -otkon -OTL -Otley -OTLF -OTM -Oto -oto- -otoantritis -otoblennorrhea -otocariasis -otocephaly -otocephalic -otocerebritis -Otocyon -otocyst -otocystic -otocysts -otocleisis -otoconia -otoconial -otoconite -otoconium -otocrane -otocranial -otocranic -otocranium -otodynia -otodynic -Otoe -otoencephalitis -otogenic -otogenous -Otogyps -otography -otographical -OTOH -otohemineurasthenia -otolaryngology -otolaryngologic -otolaryngological -otolaryngologies -otolaryngologist -otolaryngologists -otolite -otolith -otolithic -Otolithidae -otoliths -Otolithus -otolitic -otology -otologic -otological -otologically -otologies -otologist -Otomaco -Otomanguean -otomassage -Otomi -Otomian -otomyces -otomycosis -Otomitlan -otomucormycosis -otonecrectomy -otoneuralgia -otoneurasthenia -otoneurology -O'Toole -otopathy -otopathic -otopathicetc -otopharyngeal -otophone -otopiesis -otopyorrhea -otopyosis -otoplasty -otoplastic -otopolypus -otorhinolaryngology -otorhinolaryngologic -otorhinolaryngologist -otorrhagia -otorrhea -otorrhoea -otosalpinx -otosclerosis -otoscope -otoscopes -otoscopy -otoscopic -otoscopies -otosis -otosphenal -otosteal -otosteon -ototoi -ototomy -ototoxic -ototoxicity -ototoxicities -Otozoum -OTR -Otranto -OTS -Otsego -Ott -ottajanite -ottar -ottars -ottava -ottavarima -ottavas -ottave -Ottavia -ottavino -Ottawa -ottawas -Otte -Otter -Otterbein -Otterburn -otterer -otterhound -otters -otter's -Ottertail -Otterville -ottetto -Otti -Ottie -Ottilie -Ottillia -Ottine -Ottinger -ottingkar -Otto -Ottoman -Ottomanean -Ottomanic -Ottomanism -Ottomanization -Ottomanize -Ottomanlike -Ottomans -Ottomite -Ottonian -ottos -Ottosen -Ottoville -ottrelife -ottrelite -ottroye -Ottsville -Ottumwa -Ottweilian -Otuquian -oturia -Otus -OTV -Otway -Otwell -otxi -OU -ouabain -ouabains -ouabaio -ouabe -Ouachita -Ouachitas -ouachitite -Ouagadougou -ouakari -ouananiche -ouanga -Ouaquaga -Oubangi -Oubangui -oubliance -oubliet -oubliette -oubliettes -ouch -ouched -ouches -ouching -oud -Oudemian -oudenarde -Oudenodon -oudenodont -Oudh -ouds -ouenite -Ouessant -Oueta -ouf -oufought -ough -ought -oughted -oughting -oughtlings -oughtlins -oughtness -oughtnt -oughtn't -oughts -ouguiya -oui -Ouida -ouyezd -Ouija -ouistiti -ouistitis -Oujda -oukia -oulap -Oulman -Oulu -ounce -ounces -oundy -ounding -ounds -ouph -ouphe -ouphes -ouphish -ouphs -our -Ouray -ourali -ourang -ourang-outang -ourangs -ourano- -ouranophobia -Ouranos -ourari -ouraris -ourebi -ourebis -ouricury -ourie -ourn -our'n -ouroub -Ourouparia -ours -oursel -ourself -oursels -ourselves -ous -Ouse -ousel -ousels -ousia -Ouspensky -oust -ousted -oustee -ouster -ouster-le-main -ousters -ousting -oustiti -ousts -out -out- -outact -outacted -outacting -outacts -outadd -outadded -outadding -outadds -outadmiral -Outagami -outage -outages -outambush -out-and-out -out-and-outer -outarde -outargue -out-argue -outargued -outargues -outarguing -outas -outasight -outask -out-ask -outasked -outasking -outasks -outate -outawe -outawed -outawing -outbabble -out-babble -outbabbled -outbabbling -Out-babylon -outback -outbacker -outbacks -outbade -outbake -outbaked -outbakes -outbaking -outbalance -outbalanced -outbalances -outbalancing -outban -outbanned -outbanning -outbanter -outbar -outbargain -outbargained -outbargaining -outbargains -outbark -outbarked -outbarking -outbarks -outbarred -outbarring -outbarter -outbat -outbatted -outbatter -outbatting -outbawl -outbawled -outbawling -outbawls -outbbled -outbbred -outbeam -outbeamed -outbeaming -outbeams -outbear -outbearing -outbeg -outbeggar -outbegged -outbegging -outbegs -outbelch -outbellow -outbend -outbending -outbent -outbetter -outby -out-by -outbid -outbidden -outbidder -outbidding -outbids -outbye -outbirth -outbitch -outblacken -outblaze -outblazed -outblazes -outblazing -outbleat -outbleated -outbleating -outbleats -outbled -outbleed -outbleeding -outbless -outblessed -outblesses -outblessing -outblew -outbloom -outbloomed -outblooming -outblooms -outblossom -outblot -outblotted -outblotting -outblow -outblowing -outblown -outbluff -outbluffed -outbluffing -outbluffs -outblunder -outblush -outblushed -outblushes -outblushing -outbluster -outboard -out-boarder -outboards -outboast -outboasted -outboasting -outboasts -outbolting -outbond -outbook -outbore -outborn -outborne -outborough -outbound -out-bound -outboundaries -outbounds -outbow -outbowed -out-bowed -outbowl -outbox -outboxed -outboxes -outboxing -outbrag -out-brag -outbragged -outbragging -outbrags -outbray -outbraid -outbranch -outbranching -outbrave -outbraved -outbraves -outbraving -outbrawl -outbrazen -outbreak -outbreaker -outbreaking -outbreaks -outbreak's -outbreath -outbreathe -outbreathed -outbreather -outbreathing -outbred -outbreed -outbreeding -outbreeds -outbribe -outbribed -outbribes -outbribing -outbridge -outbridged -outbridging -outbring -outbringing -outbrother -outbrought -outbud -outbudded -outbudding -outbuy -outbuild -outbuilding -out-building -outbuildings -outbuilds -outbuilt -outbulge -outbulged -outbulging -outbulk -outbulks -outbully -outbullied -outbullies -outbullying -outburn -out-burn -outburned -outburning -outburns -outburnt -outburst -outbursts -outburst's -outbustle -outbustled -outbustling -outbuzz -outcame -outcant -outcaper -outcapered -outcapering -outcapers -out-cargo -outcarol -outcaroled -outcaroling -outcarry -outcase -outcast -outcaste -outcasted -outcastes -outcasting -outcastness -outcasts -outcast's -outcatch -outcatches -outcatching -outcaught -outcavil -outcaviled -outcaviling -outcavilled -outcavilling -outcavils -outcept -outchamber -outcharm -outcharmed -outcharming -outcharms -outchase -outchased -outchasing -outchatter -outcheat -outcheated -outcheating -outcheats -outchid -outchidden -outchide -outchided -outchides -outchiding -outcity -outcities -outclamor -outclass -outclassed -outclasses -outclassing -out-clearer -out-clearing -outclerk -outclimb -outclimbed -outclimbing -outclimbs -outclomb -outcoach -out-college -outcome -outcomer -outcomes -outcome's -outcoming -outcompass -outcompete -outcomplete -outcompliment -outcook -outcooked -outcooking -outcooks -outcorner -outcount -outcountry -out-country -outcourt -out-craft -outcrawl -outcrawled -outcrawling -outcrawls -outcreep -outcreeping -outcrept -outcry -outcricket -outcried -outcrier -outcries -outcrying -outcrop -outcropped -outcropper -outcropping -outcroppings -outcrops -outcross -outcrossed -outcrosses -outcrossing -outcrow -outcrowd -outcrowed -outcrowing -outcrows -outcull -outcure -outcured -outcuring -outcurse -outcursed -outcurses -outcursing -outcurve -outcurved -outcurves -outcurving -outcut -outcutting -outdaciousness -outdance -outdanced -outdances -outdancing -outdare -outdared -outdares -outdaring -outdate -outdated -outdatedness -outdates -outdating -outdazzle -outdazzled -outdazzling -outdespatch -outdevil -outdeviled -outdeviling -outdid -outdispatch -outdistance -outdistanced -outdistances -outdistancing -outdistrict -outdo -outdodge -outdodged -outdodges -outdodging -outdoer -outdoers -outdoes -outdoing -outdone -outdoor -out-door -outdoorness -outdoors -outdoorsy -outdoorsman -outdoorsmanship -outdoorsmen -outdraft -outdrag -outdragon -outdrags -outdrank -outdraught -outdraw -outdrawing -outdrawn -outdraws -outdream -outdreamed -outdreaming -outdreams -outdreamt -outdress -outdressed -outdresses -outdressing -outdrew -outdrink -outdrinking -outdrinks -outdrive -outdriven -outdrives -outdriving -outdrop -outdropped -outdropping -outdrops -outdrove -outdrunk -outduel -outduels -outdure -outdwell -outdweller -outdwelling -outdwelt -outearn -outearns -outeat -outeate -outeaten -outeating -outeats -outecho -outechoed -outechoes -outechoing -outechos -outed -outedge -outedged -outedging -outeye -outeyed -outen -outequivocate -outequivocated -outequivocating -Outer -outercoat -outer-directed -outerly -outermost -outerness -outers -outerwear -outfable -outfabled -outfables -outfabling -outface -outfaced -outfaces -outfacing -outfall -outfalls -outfame -outfamed -outfaming -outfangthief -outfast -outfasted -outfasting -outfasts -outfawn -outfawned -outfawning -outfawns -outfeast -outfeasted -outfeasting -outfeasts -outfeat -outfed -outfeed -outfeeding -outfeel -outfeeling -outfeels -outfelt -outfence -outfenced -outfencing -outferret -outffed -outfiction -outfield -out-field -outfielded -outfielder -out-fielder -outfielders -outfielding -outfields -outfieldsman -outfieldsmen -outfight -outfighter -outfighting -outfights -outfigure -outfigured -outfiguring -outfind -outfinding -outfinds -outfire -outfired -outfires -outfiring -outfish -outfit -outfits -outfit's -outfitted -outfitter -outfitters -outfitting -outfittings -outflame -outflamed -outflaming -outflank -outflanked -outflanker -outflanking -outflanks -outflare -outflared -outflaring -outflash -outflatter -outfled -outflee -outfleeing -outflew -outfly -outflies -outflying -outfling -outflinging -outfloat -outflourish -outflow -outflowed -outflowing -outflown -outflows -outflue -outflung -outflunky -outflush -outflux -outfold -outfool -outfooled -outfooling -outfools -outfoot -outfooted -outfooting -outfoots -outform -outfort -outforth -outfought -outfound -outfox -outfoxed -outfoxes -outfoxing -outfreeman -outfront -outfroth -outfrown -outfrowned -outfrowning -outfrowns -outgabble -outgabbled -outgabbling -outgain -outgained -outgaining -outgains -outgallop -outgamble -outgambled -outgambling -outgame -outgamed -outgaming -outgang -outgarment -outgarth -outgas -outgassed -outgasses -outgassing -outgate -outgauge -outgave -outgaze -outgazed -outgazing -outgeneral -outgeneraled -outgeneraling -outgeneralled -outgeneralling -outgive -outgiven -outgives -outgiving -outglad -outglare -outglared -outglares -outglaring -outgleam -outglitter -outgloom -outglow -outglowed -outglowing -outglows -outgnaw -outgnawed -outgnawing -outgnawn -outgnaws -outgo -outgoer -outgoes -outgoing -outgoingness -outgoings -outgone -outgreen -outgrew -outgrin -outgrinned -outgrinning -outgrins -outgross -outground -outgroup -out-group -outgroups -outgrow -outgrowing -outgrown -outgrows -outgrowth -outgrowths -outguard -out-guard -outguess -outguessed -outguesses -outguessing -outguide -outguided -outguides -outguiding -outgun -outgunned -outgunning -outguns -outgush -outgushes -outgushing -outhammer -outhasten -outhaul -outhauler -outhauls -Outhe -outhear -outheard -outhearing -outhears -outheart -outhector -outheel -outher -Out-herod -outhymn -outhyperbolize -outhyperbolized -outhyperbolizing -outhire -outhired -outhiring -outhiss -outhit -outhits -outhitting -outhold -outhomer -outhorn -outhorror -outhouse -outhouses -outhousing -outhowl -outhowled -outhowling -outhowls -outhue -outhumor -outhumored -outhumoring -outhumors -outhunt -outhunts -outhurl -outhut -outyard -outyell -outyelled -outyelling -outyells -outyelp -outyelped -outyelping -outyelps -outyield -outyielded -outyielding -outyields -outimage -Outing -outings -outinvent -outish -outissue -outissued -outissuing -outjazz -outjest -outjet -outjetted -outjetting -outjinx -outjinxed -outjinxes -outjinxing -outjockey -outjourney -outjourneyed -outjourneying -outjuggle -outjuggled -outjuggling -outjump -outjumped -outjumping -outjumps -outjut -outjuts -outjutted -outjutting -outkeep -outkeeper -outkeeping -outkeeps -outkept -outkick -outkicked -outkicking -outkicks -outkill -outkills -outking -outkiss -outkissed -outkisses -outkissing -outkitchen -outknave -outknee -out-kneed -outlabor -outlay -outlaid -outlaying -outlain -outlays -outlay's -outlance -outlanced -outlancing -outland -outlander -outlandish -outlandishly -outlandishlike -outlandishness -outlands -outlash -outlast -outlasted -outlasting -outlasts -outlaugh -outlaughed -outlaughing -outlaughs -outlaunch -Outlaw -outlawed -outlawing -outlawry -outlawries -outlaws -outlead -outleading -outlean -outleap -outleaped -outleaping -outleaps -outleapt -outlearn -outlearned -outlearning -outlearns -outlearnt -outled -outlegend -outlength -outlengthen -outler -outlet -outlets -outlet's -outly -outlie -outlier -outliers -outlies -outligger -outlighten -outlying -outlimb -outlimn -outline -outlinear -outlined -outlineless -outliner -outlines -outlinger -outlining -outlip -outlipped -outlipping -outlive -outlived -outliver -outlivers -outlives -outliving -outlled -outlodging -Outlook -outlooker -outlooks -outlope -outlord -outlot -outlove -outloved -outloves -outloving -outlung -outluster -Out-machiavelli -outmagic -outmalaprop -outmalapropped -outmalapropping -outman -outmaneuver -outmaneuvered -outmaneuvering -outmaneuvers -outmanned -outmanning -outmanoeuvered -outmanoeuvering -outmanoeuvre -outmans -outmantle -outmarch -outmarched -outmarches -outmarching -outmarry -outmarriage -outmarried -outmarrying -outmaster -outmatch -outmatched -outmatches -outmatching -outmate -outmated -outmating -outmeasure -outmeasured -outmeasuring -outmen -outmerchant -out-migrant -out-migrate -out-migration -Out-milton -outmiracle -outmode -outmoded -outmodes -outmoding -outmost -outmount -outmouth -outmove -outmoved -outmoves -outmoving -outname -Out-nero -outness -outnight -outnoise -outnook -outnumber -outnumbered -outnumbering -outnumbers -out-of -out-of-bounds -out-of-center -out-of-course -out-of-date -out-of-dateness -out-of-door -out-of-doors -out-of-fashion -outoffice -out-office -out-of-focus -out-of-hand -out-of-humor -out-of-joint -out-of-line -out-of-office -out-of-order -out-of-place -out-of-plumb -out-of-pocket -out-of-print -out-of-reach -out-of-school -out-of-season -out-of-stater -out-of-stock -out-of-the-common -out-of-the-way -out-of-the-world -out-of-town -out-of-towner -out-of-townish -out-of-tune -out-of-tunish -out-of-turn -out-of-vogue -outoven -outpace -outpaced -outpaces -outpacing -outpage -outpay -outpayment -outpaint -outpainted -outpainting -outpaints -outparagon -outparamour -outparish -out-parish -outpart -outparts -outpass -outpassed -outpasses -outpassing -outpassion -outpath -outpatient -out-patient -outpatients -outpeal -outpeep -outpeer -outpension -out-pension -outpensioner -outpeople -outpeopled -outpeopling -outperform -outperformed -outperforming -outperforms -outpick -outpicket -outpipe -outpiped -outpiping -outpitch -outpity -outpitied -outpities -outpitying -outplace -outplay -outplayed -outplaying -outplays -outplan -outplanned -outplanning -outplans -outplease -outpleased -outpleasing -outplod -outplodded -outplodding -outplods -outplot -outplots -outplotted -outplotting -outpocketing -outpoint -outpointed -out-pointed -outpointing -outpoints -outpoise -outpoison -outpoll -outpolled -outpolling -outpolls -outpomp -outpop -outpopped -outpopping -outpopulate -outpopulated -outpopulating -outporch -outport -outporter -outportion -outports -outpost -outposts -outpost's -outpouching -outpour -outpoured -outpourer -outpouring -outpourings -outpours -outpractice -outpracticed -outpracticing -outpray -outprayed -outpraying -outprays -outpraise -outpraised -outpraising -outpreach -outpreen -outpreened -outpreening -outpreens -outpress -outpressed -outpresses -outpressing -outpry -outprice -outpriced -outprices -outpricing -outpried -outprying -outprodigy -outproduce -outproduced -outproduces -outproducing -outpromise -outpromised -outpromising -outpull -outpulled -outpulling -outpulls -outpunch -outpupil -outpurl -outpurse -outpursue -outpursued -outpursuing -outpush -outpushed -outpushes -outpushing -output -outputs -output's -outputted -outputter -outputting -outquaff -out-quarter -outquarters -outqueen -outquery -outqueried -outquerying -outquestion -outquibble -outquibbled -outquibbling -outquibled -outquibling -Out-quixote -outquote -outquoted -outquotes -outquoting -outr -outrace -outraced -outraces -outracing -outrage -outraged -outragely -outrageous -outrageously -outrageousness -outrageproof -outrager -outrages -outraging -outray -outrail -outraise -outraised -outraises -outraising -outrake -outran -outrance -outrances -outrang -outrange -outranged -outranges -outranging -outrank -outranked -outranking -outranks -outrant -outrap -outrapped -outrapping -outrate -outrated -outrates -outrating -outraught -outrave -outraved -outraves -outraving -outraze -outre -outreach -outreached -outreaches -outreaching -outread -outreading -outreads -outreason -outreasoned -outreasoning -outreasons -outreckon -outrecuidance -outredden -outrede -outregeous -outregeously -outreign -outrelief -out-relief -outremer -outreness -outrhyme -outrhymed -outrhyming -outrib -outribbed -outribbing -outrick -outridden -outride -outrider -outriders -outrides -outriding -outrig -outrigged -outrigger -outriggered -outriggerless -outriggers -outrigging -outright -outrightly -outrightness -outring -outringing -outrings -outrival -outrivaled -outrivaling -outrivalled -outrivalling -outrivals -outrive -outroad -outroar -outroared -outroaring -outroars -outrock -outrocked -outrocking -outrocks -outrode -outrogue -outrogued -outroguing -outroyal -outroll -outrolled -outrolling -outrolls -outromance -outromanced -outromancing -out-room -outroop -outrooper -outroot -outrooted -outrooting -outroots -outrove -outroved -outroving -outrow -outrowed -outrows -outrun -outrung -outrunner -outrunning -outruns -outrush -outrushes -outs -outsay -outsaid -outsaying -outsail -outsailed -outsailing -outsails -outsaint -outsally -outsallied -outsallying -outsang -outsat -outsatisfy -outsatisfied -outsatisfying -outsavor -outsavored -outsavoring -outsavors -outsaw -outscape -outscent -outscold -outscolded -outscolding -outscolds -outscoop -outscore -outscored -outscores -outscoring -outscorn -outscorned -outscorning -outscorns -outscour -outscouring -outscout -outscream -outsea -outseam -outsearch -outsee -outseeing -outseek -outseeking -outseen -outsees -outsell -outselling -outsells -outsend -outsentinel -outsentry -out-sentry -outsentries -outsert -outserts -outservant -outserve -outserved -outserves -outserving -outset -outsets -outsetting -outsettlement -out-settlement -outsettler -outshadow -outshake -outshame -outshamed -outshames -outshaming -outshape -outshaped -outshaping -outsharp -outsharpen -outsheathe -outshift -outshifts -outshine -outshined -outshiner -outshines -outshining -outshone -outshoot -outshooting -outshoots -outshot -outshoulder -outshout -outshouted -outshouting -outshouts -outshove -outshoved -outshoving -outshow -outshowed -outshower -outshown -outshriek -outshrill -outshut -outside -outsided -outsidedness -outsideness -outsider -outsiderness -outsiders -outsider's -outsides -outsift -outsigh -outsight -outsights -outsin -outsing -outsinging -outsings -outsinned -outsinning -outsins -outsit -outsits -outsitting -outsize -outsized -outsizes -outskate -outskill -outskip -outskipped -outskipping -outskirmish -outskirmisher -outskirt -outskirter -outskirts -outslander -outslang -outsleep -outsleeping -outsleeps -outslept -outslick -outslid -outslide -outsling -outslink -outslip -outsmart -outsmarted -outsmarting -outsmarts -outsmell -outsmile -outsmiled -outsmiles -outsmiling -outsmoke -outsmoked -outsmokes -outsmoking -outsnatch -outsnore -outsnored -outsnores -outsnoring -outsoar -outsoared -outsoaring -outsoars -outsold -outsole -outsoler -outsoles -outsonet -outsonnet -outsophisticate -outsophisticated -outsophisticating -outsought -out-soul -outsound -outspan -outspanned -outspanning -outspans -outsparkle -outsparkled -outsparkling -outsparspied -outsparspying -outsparspinned -outsparspinning -outsparsprued -outsparspruing -outspat -outspeak -outspeaker -outspeaking -outspeaks -outsped -outspeech -outspeed -outspell -outspelled -outspelling -outspells -outspelt -outspend -outspending -outspends -outspent -outspy -outspied -outspying -outspill -outspin -outspinned -outspinning -outspirit -outspit -outsplendor -outspoke -outspoken -outspokenly -outspokenness -outspokennesses -outsport -outspout -outsprang -outspread -outspreading -outspreads -outspring -outsprint -outsprue -outsprued -outspruing -outspue -outspurn -outspurt -outstagger -outstay -outstaid -outstayed -outstaying -outstair -outstays -outstand -outstander -outstanding -outstandingly -outstandingness -outstandings -outstands -outstank -outstare -outstared -outstares -outstaring -outstart -outstarted -outstarter -outstarting -outstartle -outstartled -outstartling -outstarts -outstate -outstated -outstater -outstates -outstating -outstation -out-station -outstations -outstatistic -outstature -outstatured -outstaturing -outsteal -outstealing -outsteam -outsteer -outsteered -outsteering -outsteers -outstep -outstepped -outstepping -outsting -outstinging -outstink -outstole -outstolen -outstood -outstorm -outstrain -outstream -outstreet -out-street -outstretch -outstretched -outstretcher -outstretches -outstretching -outstridden -outstride -outstriding -outstrike -outstrip -outstripped -outstripping -outstrips -outstrive -outstriven -outstriving -outstrode -outstroke -outstrove -outstruck -outstrut -outstrutted -outstrutting -outstudent -outstudy -outstudied -outstudies -outstudying -outstung -outstunt -outstunted -outstunting -outstunts -outsubtle -outsuck -outsucken -outsuffer -outsuitor -outsulk -outsulked -outsulking -outsulks -outsum -outsummed -outsumming -outsung -outsuperstition -outswagger -outswam -outsware -outswarm -outswear -outswearing -outswears -outsweep -outsweeping -outsweepings -outsweeten -outswell -outswift -outswim -outswimming -outswims -outswindle -outswindled -outswindling -outswing -outswinger -outswinging -outswirl -outswore -outsworn -outswum -outswung -outtake -out-take -outtaken -outtakes -outtalent -outtalk -outtalked -outtalking -outtalks -outtask -outtasked -outtasking -outtasks -outtaste -outtear -outtearing -outtease -outteased -outteasing -outtell -outtelling -outtells -outthank -outthanked -outthanking -outthanks -outthieve -outthieved -outthieving -outthink -outthinking -outthinks -outthought -outthreaten -outthrew -outthrob -outthrobbed -outthrobbing -outthrobs -outthrough -outthrow -out-throw -outthrowing -outthrown -outthrows -outthrust -out-thrust -outthruster -outthrusting -outthunder -outthwack -Out-timon -outtinkle -outtinkled -outtinkling -outtyrannize -outtyrannized -outtyrannizing -outtire -outtired -outtiring -outtoil -outtold -outtongue -outtongued -outtonguing -outtop -out-top -outtopped -outtopping -outtore -Out-tory -outtorn -outtower -outtowered -outtowering -outtowers -outtrade -outtraded -outtrades -outtrading -outtrail -outtravel -out-travel -outtraveled -outtraveling -outtrick -outtricked -outtricking -outtricks -outtrot -outtrots -outtrotted -outtrotting -outtrump -outtrumped -outtrumping -outtrumps -outttore -outttorn -outturn -outturned -outturns -outtwine -outusure -outvalue -outvalued -outvalues -outvaluing -outvanish -outvaunt -outvaunted -outvaunting -outvaunts -outvelvet -outvenom -outvictor -outvie -outvied -outvier -outvies -outvigil -outvying -outvillage -outvillain -outvociferate -outvociferated -outvociferating -outvoyage -outvoyaged -outvoyaging -outvoice -outvoiced -outvoices -outvoicing -outvote -outvoted -outvoter -out-voter -outvotes -outvoting -outway -outwait -outwaited -outwaiting -outwaits -outwake -outwale -outwalk -outwalked -outwalking -outwalks -outwall -out-wall -outwallop -outwander -outwar -outwarble -outwarbled -outwarbling -outward -outward-bound -outward-bounder -outward-facing -outwardly -outwardmost -outwardness -outwards -outwarred -outwarring -outwars -outwash -outwashes -outwaste -outwasted -outwastes -outwasting -outwatch -outwatched -outwatches -outwatching -outwater -OUTWATS -outwave -outwaved -outwaving -outwealth -outweapon -outweaponed -outwear -outweary -outwearied -outwearies -outwearying -outwearing -outwears -outweave -outweaving -outweed -outweep -outweeping -outweeps -outweigh -outweighed -outweighing -outweighs -outweight -outwell -outwent -outwept -outwhirl -outwhirled -outwhirling -outwhirls -outwick -outwiggle -outwiggled -outwiggling -outwile -outwiled -outwiles -outwiling -outwill -outwilled -outwilling -outwills -outwin -outwind -outwinded -outwinding -outwindow -outwinds -outwing -outwish -outwished -outwishes -outwishing -outwit -outwith -outwits -outwittal -outwitted -outwitter -outwitting -outwoe -outwoman -outwood -outword -outwore -outwork -outworked -outworker -out-worker -outworkers -outworking -outworks -outworld -outworn -outworth -outwove -outwoven -outwrangle -outwrangled -outwrangling -outwrench -outwrest -outwrestle -outwrestled -outwrestling -outwriggle -outwriggled -outwriggling -outwring -outwringing -outwrit -outwrite -outwrites -outwriting -outwritten -outwrote -outwrought -outwrung -outwwept -outwwove -outwwoven -outzany -ouvert -ouverte -ouvrage -ouvre -ouvrier -ouvriere -ouze -ouzel -ouzels -Ouzinkie -ouzo -ouzos -OV -ov- -Ova -Ovaherero -Oval -oval-arched -oval-berried -oval-bodied -oval-bored -ovalbumen -ovalbumin -ovalescent -oval-faced -oval-figured -oval-headed -ovaliform -ovalish -ovality -ovalities -ovalization -ovalize -oval-lanceolate -Ovalle -oval-leaved -ovally -ovalness -ovalnesses -Ovalo -ovaloid -ovals -oval's -oval-shaped -oval-truncate -oval-visaged -ovalwise -Ovambo -Ovampo -Ovando -Ovangangela -ovant -Ovapa -ovary -ovaria -ovarial -ovarian -ovariectomy -ovariectomize -ovariectomized -ovariectomizing -ovaries -ovarin -ovario- -ovarioabdominal -ovariocele -ovariocentesis -ovariocyesis -ovariodysneuria -ovariohysterectomy -ovariole -ovarioles -ovariolumbar -ovariorrhexis -ovariosalpingectomy -ovariosteresis -ovariostomy -ovariotomy -ovariotomies -ovariotomist -ovariotomize -ovariotubal -ovarious -ovary's -ovaritides -ovaritis -ovarium -ovate -ovate-acuminate -ovate-cylindraceous -ovate-cylindrical -ovateconical -ovate-cordate -ovate-cuneate -ovated -ovate-deltoid -ovate-ellipsoidal -ovate-elliptic -ovate-lanceolate -ovate-leaved -ovately -ovate-oblong -ovate-orbicular -ovate-rotundate -ovate-serrate -ovate-serrated -ovate-subulate -ovate-triangular -ovation -ovational -ovationary -ovations -ovato- -ovatoacuminate -ovatocylindraceous -ovatoconical -ovatocordate -ovatodeltoid -ovatoellipsoidal -ovatoglobose -ovatolanceolate -ovatooblong -ovatoorbicular -ovatopyriform -ovatoquadrangular -ovatorotundate -ovatoserrate -ovatotriangular -ovey -oven -oven-bake -oven-baked -ovenbird -oven-bird -ovenbirds -ovendry -oven-dry -oven-dried -ovened -ovenful -ovening -ovenly -ovenlike -ovenman -ovenmen -ovenpeel -oven-ready -ovens -oven's -oven-shaped -ovensman -ovenstone -ovenware -ovenwares -ovenwise -ovenwood -over -over- -overability -overable -overably -overabound -over-abound -overabounded -overabounding -overabounds -overabsorb -overabsorption -overabstain -overabstemious -overabstemiously -overabstemiousness -overabundance -overabundances -overabundant -overabundantly -overabuse -overabused -overabusing -overabusive -overabusively -overabusiveness -overaccelerate -overaccelerated -overaccelerating -overacceleration -overaccentuate -overaccentuated -overaccentuating -overaccentuation -overacceptance -overacceptances -overaccumulate -overaccumulated -overaccumulating -overaccumulation -overaccuracy -overaccurate -overaccurately -overachieve -overachieved -overachiever -overachievers -overachieving -overacidity -overact -overacted -overacting -overaction -overactivate -overactivated -overactivating -overactive -overactiveness -overactivity -overacts -overacute -overacutely -overacuteness -overaddiction -overadorn -overadorned -overadornment -overadvance -overadvanced -overadvancing -overadvice -overaffect -overaffected -overaffirm -overaffirmation -overaffirmative -overaffirmatively -overaffirmativeness -overafflict -overaffliction -overage -over-age -overageness -overages -overaggravate -overaggravated -overaggravating -overaggravation -overaggresive -overaggressive -overaggressively -overaggressiveness -overagitate -overagitated -overagitating -overagitation -overagonize -overalcoholize -overalcoholized -overalcoholizing -overall -over-all -overalled -overallegiance -overallegorize -overallegorized -overallegorizing -overalls -overall's -overambitioned -overambitious -overambitiously -overambitiousness -overambling -overamplify -overamplified -overamplifies -overamplifying -overanalysis -overanalytical -overanalytically -overanalyze -overanalyzed -overanalyzely -overanalyzes -overanalyzing -overangelic -overangry -overanimated -overanimatedly -overanimation -overannotate -overannotated -overannotating -overanswer -overanxiety -overanxieties -overanxious -over-anxious -overanxiously -overanxiousness -overapologetic -overappareled -overapplaud -overappraisal -overappraise -overappraised -overappraising -overappreciation -overappreciative -overappreciatively -overappreciativeness -overapprehended -overapprehension -overapprehensive -overapprehensively -overapprehensiveness -overapt -overaptly -overaptness -overarch -overarched -overarches -overarching -overargue -overargued -overarguing -overargumentative -overargumentatively -overargumentativeness -overarm -over-arm -overarousal -overarouse -overaroused -overarouses -overarousing -overartificial -overartificiality -overartificially -overassail -overassert -overassertion -overassertive -overassertively -overassertiveness -overassess -overassessment -overassume -overassumed -overassuming -overassumption -overassumptive -overassumptively -overassured -overassuredly -overassuredness -overate -overattached -overattachment -overattention -overattentive -overattentively -overattentiveness -overattenuate -overattenuated -overattenuating -overawe -overawed -overawes -overawful -overawing -overawn -overawning -overbade -overbait -overbake -overbaked -overbakes -overbaking -overbalance -overbalanced -overbalances -overbalancing -overballast -overbalm -overbanded -overbandy -overbank -overbanked -overbar -overbarish -overbark -overbarren -overbarrenness -overbase -overbaseness -overbashful -overbashfully -overbashfulness -overbattle -overbbore -overbborne -overbbred -overbear -overbearance -overbearer -overbearing -overbearingly -overbearingness -overbears -overbeat -overbeating -overbed -overbeetling -overbelief -overbend -overbepatched -overberg -overbet -overbets -overbetted -overbetting -overby -overbias -overbid -overbidden -overbidding -overbide -overbids -overbig -overbigness -overbill -overbillow -overbit -overbite -overbites -overbitten -overbitter -overbitterly -overbitterness -overblack -overblame -overblamed -overblaming -overblanch -overblaze -overbleach -overblessed -overblessedness -overblew -overblind -overblindly -overblithe -overbloom -overblouse -overblow -overblowing -overblown -overblows -overboard -overboast -overboastful -overboastfully -overboastfulness -overbody -overbodice -overboding -overboil -overbold -over-bold -overboldly -overboldness -overbook -overbooked -overbooking -overbookish -overbookishly -overbookishness -overbooks -overbooming -overboot -overbore -overborn -overborne -overborrow -overborrowed -overborrowing -overborrows -overbought -overbound -overbounteous -overbounteously -overbounteousness -overbow -overbowed -overbowl -overbrace -overbraced -overbracing -overbrag -overbragged -overbragging -overbray -overbrained -overbrake -overbraked -overbraking -overbranch -overbravado -overbrave -overbravely -overbraveness -overbravery -overbreak -overbreakage -overbreathe -overbred -overbreed -overbreeding -overbribe -overbridge -overbright -overbrightly -overbrightness -overbrilliance -overbrilliancy -overbrilliant -overbrilliantly -overbrim -overbrimmed -overbrimming -overbrimmingly -overbroad -overbroaden -overbroil -overbrood -Overbrook -overbrow -overbrown -overbrowse -overbrowsed -overbrowsing -overbrush -overbrutal -overbrutality -overbrutalities -overbrutalization -overbrutalize -overbrutalized -overbrutalizing -overbrutally -overbubbling -overbuy -overbuying -overbuild -overbuilded -overbuilding -overbuilds -overbuilt -overbuys -overbulk -overbulky -overbulkily -overbulkiness -overbumptious -overbumptiously -overbumptiousness -overburden -overburdened -overburdening -overburdeningly -overburdens -overburdensome -overburn -overburned -overburningly -overburnt -overburst -overburthen -overbusy -overbusily -overbusiness -overbusyness -overcalculate -overcalculation -overcall -overcalled -overcalling -overcalls -overcame -overcanny -overcanopy -overcap -overcapability -overcapable -overcapably -overcapacity -overcapacities -overcape -overcapitalisation -overcapitalise -overcapitalised -overcapitalising -overcapitalization -overcapitalize -over-capitalize -overcapitalized -overcapitalizes -overcapitalizing -overcaptious -overcaptiously -overcaptiousness -overcard -overcare -overcareful -overcarefully -overcarefulness -overcareless -overcarelessly -overcarelessness -overcaring -overcarking -overcarry -overcarrying -overcast -overcasting -overcasts -overcasual -overcasually -overcasualness -overcasuistical -overcatch -overcaustic -overcaustically -overcausticity -overcaution -over-caution -overcautious -over-cautious -overcautiously -overcautiousness -overcensor -overcensorious -overcensoriously -overcensoriousness -overcentralization -overcentralize -overcentralized -overcentralizing -overcerebral -overcertify -overcertification -overcertified -overcertifying -overchafe -overchafed -overchafing -overchannel -overchant -overcharge -overcharged -overchargement -overcharger -overcharges -overcharging -overcharitable -overcharitableness -overcharitably -overcharity -overchase -overchased -overchasing -overcheap -overcheaply -overcheapness -overcheck -overcherish -overcherished -overchidden -overchief -overchildish -overchildishly -overchildishness -overchill -overchlorinate -overchoke -overchrome -overchurch -overcirculate -overcircumspect -overcircumspection -overcivil -overcivility -overcivilization -overcivilize -overcivilized -overcivilizing -overcivilly -overclaim -overclamor -overclasp -overclean -overcleanly -overcleanness -overcleave -overclemency -overclement -overclever -overcleverly -overcleverness -overclimb -overclinical -overclinically -overclinicalness -overcloak -overclog -overclogged -overclogging -overcloy -overclose -overclosely -overcloseness -overclothe -overclothes -overcloud -overclouded -overclouding -overclouds -overcluster -overclutter -overcoached -overcoat -overcoated -overcoating -overcoats -overcoat's -overcoy -overcoil -overcoyly -overcoyness -overcold -overcoldly -overcollar -overcolor -overcoloration -overcoloring -overcolour -overcomable -overcome -overcomer -overcomes -overcoming -overcomingly -overcommand -overcommend -overcommendation -overcommercialization -overcommercialize -overcommercialized -overcommercializing -overcommit -overcommited -overcommiting -overcommitment -overcommits -overcommon -overcommonly -overcommonness -overcommunicative -overcompensate -overcompensated -overcompensates -overcompensating -overcompensation -overcompensations -overcompensatory -overcompensators -overcompetition -overcompetitive -overcompetitively -overcompetitiveness -overcomplacence -overcomplacency -overcomplacent -overcomplacently -overcomplete -overcomplex -overcomplexity -overcompliant -overcomplicate -overcomplicated -overcomplicates -overcomplicating -overcompound -overconcentrate -overconcentrated -overconcentrating -overconcentration -overconcern -overconcerned -overconcerning -overconcerns -overcondensation -overcondense -overcondensed -overcondensing -overconfidence -overconfidences -overconfident -over-confident -overconfidently -overconfiding -overconfute -overconquer -overconscientious -overconscientiously -overconscientiousness -overconscious -overconsciously -overconsciousness -overconservatism -overconservative -overconservatively -overconservativeness -overconsiderate -overconsiderately -overconsiderateness -overconsideration -overconstant -overconstantly -overconstantness -overconsume -overconsumed -overconsumes -overconsuming -overconsumption -overconsumptions -overcontented -overcontentedly -overcontentedness -overcontentious -overcontentiously -overcontentiousness -overcontentment -overcontract -overcontraction -overcontribute -overcontributed -overcontributing -overcontribution -overcontrite -overcontritely -overcontriteness -overcontrol -overcontroled -overcontroling -overcontrolled -overcontrolling -overcontrols -overcook -overcooked -overcooking -overcooks -overcool -overcooled -overcooling -overcoolly -overcoolness -overcools -overcopious -overcopiously -overcopiousness -overcorned -overcorrect -over-correct -overcorrected -overcorrecting -overcorrection -overcorrects -overcorrupt -overcorruption -overcorruptly -overcostly -overcostliness -overcount -over-counter -overcourteous -overcourteously -overcourteousness -overcourtesy -overcover -overcovetous -overcovetously -overcovetousness -overcow -overcram -overcramme -overcrammed -overcrammi -overcramming -overcrams -overcredit -overcredulity -overcredulous -over-credulous -overcredulously -overcredulousness -overcreed -overcreep -overcry -overcritical -overcritically -overcriticalness -overcriticism -overcriticize -overcriticized -overcriticizing -overcrop -overcropped -overcropping -overcrops -overcross -overcrossing -overcrow -overcrowd -overcrowded -overcrowdedly -overcrowdedness -overcrowding -overcrowds -overcrown -overcrust -overcull -overcultivate -overcultivated -overcultivating -overcultivation -overculture -overcultured -overcumber -overcunning -overcunningly -overcunningness -overcup -overcure -overcured -overcuriosity -overcurious -over-curious -overcuriously -overcuriousness -overcurl -overcurrency -overcurrent -overcurtain -overcustom -overcut -overcutter -overcutting -overdainty -overdaintily -overdaintiness -overdamn -overdance -overdangle -overdare -overdared -overdares -overdaring -overdaringly -overdarken -overdash -overdated -overdazed -overdazzle -overdazzled -overdazzling -overdeal -overdear -over-dear -overdearly -overdearness -overdebate -overdebated -overdebating -overdebilitate -overdebilitated -overdebilitating -overdecadence -overdecadent -overdecadently -overdeck -over-deck -overdecked -overdecking -overdecks -overdecorate -overdecorated -overdecorates -overdecorating -overdecoration -overdecorative -overdecoratively -overdecorativeness -overdedicate -overdedicated -overdedicating -overdedication -overdeeming -overdeep -overdeepen -overdeeply -overdefensive -overdefensively -overdefensiveness -overdeferential -overdeferentially -overdefiant -overdefiantly -overdefiantness -overdefined -overdeliberate -overdeliberated -overdeliberately -overdeliberateness -overdeliberating -overdeliberation -overdelicacy -overdelicate -over-delicate -overdelicately -overdelicateness -overdelicious -overdeliciously -overdeliciousness -overdelighted -overdelightedly -overdemand -overdemandiness -overdemandingly -overdemandingness -overdemocracy -overdemonstrative -overden -overdenunciation -overdepend -overdepended -overdependence -overdependent -overdepending -overdepends -overdepress -overdepressive -overdepressively -overdepressiveness -overderide -overderided -overderiding -overderisive -overderisively -overderisiveness -overdescant -overdescribe -overdescribed -overdescribing -overdescriptive -overdescriptively -overdescriptiveness -overdesire -overdesirous -overdesirously -overdesirousness -overdestructive -overdestructively -overdestructiveness -overdetailed -overdetermination -overdetermined -overdevelop -over-develop -overdeveloped -overdeveloping -overdevelopment -overdevelops -overdevoted -overdevotedly -overdevotedness -overdevotion -overdevout -overdevoutness -overdid -overdye -overdyed -overdyeing -overdyer -overdyes -overdiffuse -overdiffused -overdiffusely -overdiffuseness -overdiffusing -overdiffusingly -overdiffusingness -overdiffusion -overdigest -overdignify -overdignified -overdignifiedly -overdignifiedness -overdignifying -overdignity -overdying -overdilate -overdilated -overdilating -overdilation -overdiligence -overdiligent -overdiligently -overdiligentness -overdilute -overdiluted -overdiluting -overdilution -overdischarge -over-discharge -overdiscipline -overdisciplined -overdisciplining -overdiscount -overdiscourage -overdiscouraged -overdiscouragement -overdiscouraging -overdiscreet -overdiscreetly -overdiscreetness -overdiscriminating -overdiscriminatingly -overdiscrimination -overdiscuss -overdistance -overdistant -overdistantly -overdistantness -overdistempered -overdistend -overdistension -overdistention -overdistort -overdistortion -overdistrait -overdistraught -overdiverse -overdiversely -overdiverseness -overdiversify -overdiversification -overdiversified -overdiversifies -overdiversifying -overdiversity -overdo -overdoctrinaire -overdoctrinize -overdoer -overdoers -overdoes -overdogmatic -overdogmatical -overdogmatically -overdogmaticalness -overdogmatism -overdoing -overdome -overdomesticate -overdomesticated -overdomesticating -overdominance -overdominant -overdominate -overdominated -overdominating -overdone -overdoor -overdosage -overdose -overdosed -overdoses -overdosing -overdoubt -overdoze -overdozed -overdozing -overdraft -overdrafts -overdraft's -overdrain -overdrainage -overdramatic -overdramatically -overdramatize -overdramatized -overdramatizes -overdramatizing -overdrank -overdrape -overdrapery -overdraught -overdraw -overdrawer -overdrawing -overdrawn -overdraws -overdream -overdredge -overdredged -overdredging -overdrench -overdress -overdressed -overdresses -overdressing -overdrew -overdry -overdried -overdrifted -overdrily -overdriness -overdrink -overdrinking -overdrinks -overdrip -overdrive -overdriven -overdrives -overdriving -overdroop -overdrove -overdrowsed -overdrunk -overdub -overdubbed -overdubs -overdue -overdunged -overdure -overdust -overeager -over-eager -overeagerly -overeagerness -overearly -overearnest -over-earnest -overearnestly -overearnestness -overeasy -overeasily -overeasiness -overeat -overeate -overeaten -overeater -overeaters -overeating -overeats -overed -overedge -overedit -overeditorialize -overeditorialized -overeditorializing -overeducate -overeducated -overeducates -overeducating -overeducation -overeducative -overeducatively -overeffort -overeffusive -overeffusively -overeffusiveness -overegg -overeye -overeyebrowed -overeyed -overeying -overelaborate -overelaborated -overelaborately -overelaborateness -overelaborates -overelaborating -overelaboration -overelate -overelated -overelating -overelegance -overelegancy -overelegant -overelegantly -overelegantness -overelliptical -overelliptically -overembellish -overembellished -overembellishes -overembellishing -overembellishment -overembroider -overemotional -overemotionality -overemotionalize -overemotionalized -overemotionalizing -overemotionally -overemotionalness -overemphases -overemphasis -overemphasize -overemphasized -overemphasizes -overemphasizing -overemphatic -overemphatical -overemphatically -overemphaticalness -overemphaticness -overempired -overempirical -overempirically -overemploy -overemployment -overempty -overemptiness -overemulate -overemulated -overemulating -overemulation -overenergetic -overenter -overenthusiasm -overenthusiastic -overenthusiastically -overentreat -overentry -overenvious -overenviously -overenviousness -overequal -overequip -overest -overesteem -overestimate -over-estimate -overestimated -overestimates -overestimating -overestimation -overestimations -overexacting -overexaggerate -overexaggerated -overexaggerates -overexaggerating -overexaggeration -overexaggerations -overexcelling -overexcitability -overexcitable -overexcitably -overexcite -over-excite -overexcited -overexcitement -overexcitements -overexcites -overexciting -overexercise -overexercised -overexercises -overexercising -overexert -over-exert -overexerted -overexertedly -overexertedness -overexerting -overexertion -overexertions -overexerts -overexhaust -overexhausted -overexhausting -overexhausts -overexpand -overexpanded -overexpanding -overexpands -overexpansion -overexpansions -overexpansive -overexpansively -overexpansiveness -overexpect -overexpectant -overexpectantly -overexpectantness -overexpend -overexpenditure -overexpert -overexplain -overexplained -overexplaining -overexplains -overexplanation -overexplicit -overexploit -overexploited -overexploiting -overexploits -overexpose -over-expose -overexposed -overexposes -overexposing -overexposure -overexpress -overexpressive -overexpressively -overexpressiveness -overexquisite -overexquisitely -overextend -overextended -overextending -overextends -overextension -overextensions -overextensive -overextreme -overexuberance -overexuberant -overexuberantly -overexuberantness -overface -overfacile -overfacilely -overfacility -overfactious -overfactiously -overfactiousness -overfactitious -overfag -overfagged -overfagging -overfaint -overfaintly -overfaintness -overfaith -overfaithful -overfaithfully -overfaithfulness -overfall -overfallen -overfalling -overfamed -overfamiliar -overfamiliarity -overfamiliarly -overfamous -overfancy -overfanciful -overfancifully -overfancifulness -overfar -overfast -overfastidious -overfastidiously -overfastidiousness -overfasting -overfat -overfatigue -overfatigued -overfatigues -overfatiguing -overfatness -overfatten -overfault -overfavor -overfavorable -overfavorableness -overfavorably -overfear -overfeared -overfearful -overfearfully -overfearfulness -overfearing -overfears -overfeast -overfeatured -overfed -overfee -overfeed -over-feed -overfeeding -overfeeds -overfeel -overfell -overfellowly -overfellowlike -overfelon -overfeminine -overfemininely -overfemininity -overfeminize -overfeminized -overfeminizing -overfertile -overfertility -overfertilize -overfertilized -overfertilizes -overfertilizing -overfervent -overfervently -overferventness -overfestoon -overfew -overfierce -overfiercely -overfierceness -overfile -overfill -overfilled -overfilling -overfills -overfilm -overfilter -overfine -overfinished -overfish -overfished -overfishes -overfishing -overfit -overfix -overflap -overflat -overflatly -overflatness -overflatten -overflavor -overfleece -overfleshed -overflew -overflexion -overfly -overflies -overflight -overflights -overflying -overfling -overfloat -overflog -overflogged -overflogging -overflood -overflorid -overfloridly -overfloridness -overflour -overflourish -overflow -overflowable -overflowed -overflower -overflowing -overflowingly -overflowingness -overflown -overflows -overfluency -overfluent -overfluently -overfluentness -overflush -overflutter -overfold -overfond -overfondle -overfondled -overfondly -overfondling -overfondness -overfoolish -overfoolishly -overfoolishness -overfoot -overforce -overforced -overforcing -overforged -overformalize -overformalized -overformalizing -overformed -overforward -overforwardly -overforwardness -overfought -overfoul -overfoully -overfoulness -overfragile -overfragmented -overfrail -overfrailly -overfrailness -overfrailty -overfranchised -overfrank -overfrankly -overfrankness -overfraught -overfree -overfreedom -overfreely -overfreight -overfreighted -overfrequency -overfrequent -overfrequently -overfret -overfrieze -overfrighted -overfrighten -overfroth -overfrown -overfrozen -overfrugal -overfrugality -overfrugally -overfruited -overfruitful -overfruitfully -overfruitfulness -overfrustration -overfull -overfullness -overfunctioning -overfund -overfurnish -overfurnished -overfurnishes -overfurnishing -Overgaard -overgaiter -overgalled -overgamble -overgambled -overgambling -overgang -overgarment -overgarnish -overgarrison -overgaze -over-gear -overgeneral -overgeneralization -overgeneralize -overgeneralized -overgeneralizes -overgeneralizing -overgenerally -overgenerosity -overgenerous -overgenerously -overgenerousness -overgenial -overgeniality -overgenially -overgenialness -overgentle -overgently -overgesticulate -overgesticulated -overgesticulating -overgesticulation -overgesticulative -overgesticulatively -overgesticulativeness -overget -overgetting -overgifted -overgild -overgilded -overgilding -overgilds -overgilt -overgilted -overgird -overgirded -overgirding -overgirdle -overgirds -overgirt -overgive -overglad -overgladly -overglamorize -overglamorized -overglamorizes -overglamorizing -overglance -overglanced -overglancing -overglass -overglaze -overglazed -overglazes -overglazing -overglide -overglint -overgloom -overgloomy -overgloomily -overgloominess -overglorious -overgloss -overglut -overgo -overgoad -overgoaded -overgoading -overgoads -overgod -overgodly -overgodliness -overgoing -overgone -overgood -overgorge -overgorged -overgot -overgotten -overgovern -overgovernment -overgown -overgrace -overgracious -overgraciously -overgraciousness -overgrade -overgraded -overgrading -overgraduated -overgrain -overgrainer -overgrasping -overgrateful -overgratefully -overgratefulness -overgratify -overgratification -overgratified -overgratifying -overgratitude -overgraze -overgrazed -overgrazes -overgrazing -overgreasy -overgreasiness -overgreat -overgreatly -overgreatness -overgreed -overgreedy -over-greedy -overgreedily -overgreediness -overgrew -overgrieve -overgrieved -overgrieving -overgrievous -overgrievously -overgrievousness -overgrind -overgross -overgrossly -overgrossness -overground -overgrow -overgrowing -overgrown -overgrows -overgrowth -overguilty -overgun -overhail -overhair -overhale -overhalf -overhand -overhanded -overhandicap -overhandicapped -overhandicapping -overhanding -overhandle -overhandled -overhandling -overhands -overhang -overhanging -overhangs -overhappy -overhappily -overhappiness -overharass -overharassment -overhard -over-hard -overharden -overhardy -overhardness -overharsh -overharshly -overharshness -overharvest -overharvested -overharvesting -overharvests -overhaste -overhasten -overhasty -over-hasty -overhastily -overhastiness -overhate -overhated -overhates -overhating -overhatted -overhaughty -overhaughtily -overhaughtiness -overhaul -overhauled -overhauler -overhauling -overhauls -overhead -overheady -overheadiness -overheadman -overheads -overheap -overheaped -overheaping -overheaps -overhear -overheard -overhearer -overhearing -overhears -overhearty -overheartily -overheartiness -overheat -overheated -overheatedly -overheating -overheats -overheave -overheavy -overheavily -overheaviness -overheight -overheighten -overheinous -overheld -overhelp -overhelpful -overhelpfully -overhelpfulness -overhie -overhigh -overhighly -overhill -overhip -overhype -overhysterical -overhit -overhold -overholding -overholds -overholy -overholiness -overhollow -overhomely -overhomeliness -overhonest -overhonesty -overhonestly -overhonestness -overhonor -overhope -overhoped -overhopes -overhoping -overhorse -overhostile -overhostilely -overhostility -overhot -overhotly -overhour -overhouse -overhover -overhuge -overhugely -overhugeness -overhuman -overhumane -overhumanity -overhumanize -overhumanized -overhumanizing -overhumble -overhumbleness -overhumbly -overhung -overhunt -overhunted -overhunting -overhunts -overhurl -overhurry -overhurried -overhurriedly -overhurrying -overhusk -overidden -overidealism -overidealistic -overidealize -overidealized -overidealizes -overidealizing -overidentify -overidentified -overidentifying -overidle -overidleness -overidly -overidness -overidolatrous -overidolatrously -overidolatrousness -overyear -Overijssel -overillustrate -overillustrated -overillustrating -overillustration -overillustrative -overillustratively -overimaginative -overimaginatively -overimaginativeness -overimbibe -overimbibed -overimbibes -overimbibing -overimitate -overimitated -overimitating -overimitation -overimitative -overimitatively -overimitativeness -overimmunize -overimmunized -overimmunizing -overimport -overimportance -overimportation -overimpose -overimposed -overimposing -overimpress -overimpressed -overimpresses -overimpressibility -overimpressible -overimpressibly -overimpressing -overimpressionability -overimpressionable -overimpressionableness -overimpressionably -overinclinable -overinclination -overincline -overinclined -overinclines -overinclining -overinclusive -overincrust -overincurious -overindebted -overindividualism -overindividualistic -overindividualistically -overindividualization -overindulge -over-indulge -overindulged -overindulgence -overindulgent -overindulgently -overindulges -overindulging -overindustrialism -overindustrialization -overindustrialize -overindustrialized -overindustrializes -overindustrializing -overinflate -overinflated -overinflates -overinflating -overinflation -overinflationary -overinflative -overinfluence -overinfluenced -overinfluences -overinfluencing -overinfluential -overinform -over-inform -overing -overinhibit -overinhibited -overink -overinsist -overinsistence -overinsistency -overinsistencies -overinsistent -overinsistently -overinsolence -overinsolent -overinsolently -overinstruct -overinstruction -overinstructive -overinstructively -overinstructiveness -overinsurance -overinsure -overinsured -overinsures -overinsuring -overintellectual -overintellectualism -overintellectuality -overintellectualization -overintellectualize -overintellectualized -overintellectualizing -overintellectually -overintellectualness -overintense -overintensely -overintenseness -overintensify -overintensification -overintensified -overintensifying -overintensity -overintensities -overinterest -overinterested -overinterestedly -overinterestedness -overinterference -overinventoried -overinvest -overinvested -overinvesting -overinvestment -overinvests -overinvolve -overinvolved -overinvolves -overinvolving -overiodize -overiodized -overiodizing -overyoung -overyouthful -overirrigate -overirrigated -overirrigating -overirrigation -overissue -over-issue -overissued -overissues -overissuing -overitching -overjacket -overjade -overjaded -overjading -overjawed -overjealous -overjealously -overjealousness -overjob -overjocular -overjocularity -overjocularly -overjoy -overjoyed -overjoyful -overjoyfully -overjoyfulness -overjoying -overjoyous -overjoyously -overjoyousness -overjoys -overjudge -overjudging -overjudgment -overjudicious -overjudiciously -overjudiciousness -overjump -overjust -overjutting -overkeen -overkeenly -overkeenness -overkeep -overkick -overkill -overkilled -overkilling -overkills -overkind -overkindly -overkindness -overking -over-king -overknavery -overknee -overknow -overknowing -overlabor -overlabored -overlaboring -overlabour -over-labour -overlaboured -overlabouring -overlace -overlactate -overlactated -overlactating -overlactation -overlade -overladed -overladen -overlades -overlading -overlay -overlaid -overlayed -overlayer -overlaying -overlain -overlays -Overland -Overlander -overlands -overlaness -overlanguaged -overlap -overlapped -overlapping -overlaps -overlap's -overlard -overlarge -overlargely -overlargeness -overlascivious -overlasciviously -overlasciviousness -overlash -overlast -overlate -overlateness -overlather -overlaud -overlaudation -overlaudatory -overlaugh -overlaunch -overlave -overlavish -overlavishly -overlavishness -overlax -overlaxative -overlaxly -overlaxness -overlead -overleaf -overlean -overleap -overleaped -overleaping -overleaps -overleapt -overlearn -overlearned -overlearnedly -overlearnedness -overleather -overleave -overleaven -overleer -overleg -overlegislate -overlegislated -overlegislating -overlegislation -overleisured -overlend -overlength -overlent -overlet -overlets -overlettered -overletting -overlewd -overlewdly -overlewdness -Overly -overliberal -over-liberal -overliberality -overliberalization -overliberalize -overliberalized -overliberalizing -overliberally -overlicentious -overlicentiously -overlicentiousness -overlick -overlie -overlier -overlies -overlift -overlight -overlighted -overlightheaded -overlightly -overlightness -overlightsome -overliing -overlying -overliking -overlimit -overline -overling -overlinger -overlinked -overlip -over-lip -overlipping -overlisted -overlisten -overlit -overliterary -overliterarily -overliterariness -overlittle -overlive -overlived -overlively -overliveliness -overliver -overlives -overliving -overload -overloaded -overloading -overloads -overloan -overloath -overlock -overlocker -overlofty -overloftily -overloftiness -overlogical -overlogicality -overlogically -overlogicalness -overloyal -overloyally -overloyalty -overloyalties -overlong -over-long -overlook -overlooked -overlooker -overlooking -overlooks -overloose -overloosely -overlooseness -overlord -overlorded -overlording -overlords -overlordship -overloud -overloudly -overloudness -overloup -overlove -overloved -overlover -overloves -overloving -overlow -overlowness -overlubricate -overlubricated -overlubricating -overlubricatio -overlubrication -overluscious -overlusciously -overlusciousness -overlush -overlushly -overlushness -overlusty -overlustiness -overluxuriance -overluxuriancy -overluxuriant -overluxuriantly -overluxurious -overluxuriously -overluxuriousness -overmagnetic -overmagnetically -overmagnify -overmagnification -overmagnified -overmagnifies -overmagnifying -overmagnitude -overmajority -overmalapert -overman -overmanage -overmanaged -overmanaging -overmany -overmanned -overmanning -overmans -overmantel -overmantle -overmarch -overmark -overmarking -overmarl -overmask -overmast -overmaster -overmastered -overmasterful -overmasterfully -overmasterfulness -overmastering -overmasteringly -overmasters -overmatch -overmatched -overmatches -overmatching -overmatter -overmature -overmaturely -overmatureness -overmaturity -overmean -overmeanly -overmeanness -overmeasure -over-measure -overmeddle -overmeddled -overmeddling -overmedicate -overmedicated -overmedicates -overmedicating -overmeek -overmeekly -overmeekness -overmellow -overmellowly -overmellowness -overmelodied -overmelodious -overmelodiously -overmelodiousness -overmelt -overmelted -overmelting -overmelts -overmen -overmerciful -overmercifully -overmercifulness -overmerit -overmerry -overmerrily -overmerriment -overmerriness -overmeticulous -overmeticulousness -overmettled -overmickle -overmighty -overmild -overmilitaristic -overmilitaristically -overmilk -overmill -overmind -overmine -overminute -overminutely -overminuteness -overmystify -overmystification -overmystified -overmystifying -overmitigate -overmitigated -overmitigating -overmix -overmixed -overmixes -overmixing -overmobilize -overmobilized -overmobilizing -overmoccasin -overmodernization -overmodernize -overmodernized -overmodernizing -overmodest -over-modest -overmodesty -overmodestly -overmodify -overmodification -overmodified -overmodifies -overmodifying -overmodulation -overmoist -overmoisten -overmoisture -overmonopolize -overmonopolized -overmonopolizing -overmonopo-lizing -overmoral -overmoralistic -overmoralize -overmoralized -overmoralizing -overmoralizingly -overmorally -overmore -overmortgage -overmortgaged -overmortgaging -overmoss -overmost -overmotor -overmount -overmounts -overmourn -overmournful -overmournfully -overmournfulness -overmuch -overmuches -overmuchness -overmultiply -overmultiplication -overmultiplied -overmultiplying -overmultitude -overmuse -overname -overnarrow -overnarrowly -overnarrowness -overnationalization -overnationalize -overnationalized -overnationalizing -overnear -overnearness -overneat -overneatly -overneatness -overneglect -overneglectful -overneglectfully -overneglectfulness -overnegligence -overnegligent -overnegligently -overnegligentness -overnervous -overnervously -overnervousness -overness -overnet -overneutralization -overneutralize -overneutralized -overneutralizer -overneutralizing -overnew -overnice -over-nice -overnicely -overniceness -overnicety -overniceties -overnigh -overnight -overnighter -overnighters -overnimble -overnipping -overnoble -overnobleness -overnobly -overnoise -overnormal -overnormality -overnormalization -overnormalize -overnormalized -overnormalizing -overnormally -overnotable -overnourish -overnourishingly -overnourishment -overnoveled -overnumber -overnumerous -overnumerously -overnumerousness -overnurse -overnursed -overnursing -overobedience -overobedient -overobediently -overobese -overobesely -overobeseness -overobesity -overobject -overobjectify -overobjectification -overobjectified -overobjectifying -overoblige -overobsequious -overobsequiously -overobsequiousness -overobvious -overoffend -overoffensive -overoffensively -overoffensiveness -overofficered -overofficious -overofficiously -overofficiousness -overoptimism -overoptimist -overoptimistic -overoptimistically -overorder -overorganization -overorganize -overorganized -overorganizes -overorganizing -overornament -overornamental -overornamentality -overornamentally -overornamentation -overornamented -overoxidization -overoxidize -overoxidized -overoxidizing -overpack -overpay -overpaid -overpaying -overpayment -overpayments -overpained -overpainful -overpainfully -overpainfulness -overpaint -overpays -overpamper -overpark -overpart -overparted -overparty -overpartial -overpartiality -overpartially -overpartialness -overparticular -overparticularity -overparticularly -overparticularness -overpass -overpassed -overpasses -overpassing -overpassionate -overpassionately -overpassionateness -overpast -overpatient -overpatriotic -overpatriotically -overpatriotism -Overpeck -overpeer -overpenalization -overpenalize -overpenalized -overpenalizing -overpending -overpensive -overpensively -overpensiveness -overpeople -over-people -overpeopled -overpeopling -overpepper -overperemptory -overperemptorily -overperemptoriness -overpermissive -overpermissiveness -overpersecute -overpersecuted -overpersecuting -overpersuade -over-persuade -overpersuaded -overpersuading -overpersuasion -overpert -overpessimism -overpessimistic -overpessimistically -overpet -overphilosophize -overphilosophized -overphilosophizing -overphysic -overpick -overpictorialize -overpictorialized -overpictorializing -overpicture -overpinching -overpious -overpiousness -overpitch -overpitched -overpiteous -overpiteously -overpiteousness -overplace -overplaced -overplacement -overplay -overplayed -overplaying -overplain -overplainly -overplainness -overplays -overplan -overplant -overplausible -overplausibleness -overplausibly -overplease -over-please -overpleased -overpleasing -overplenitude -overplenteous -overplenteously -overplenteousness -overplenty -overplentiful -overplentifully -overplentifulness -overply -overplied -overplies -overplying -overplot -overplow -overplumb -overplume -overplump -overplumpness -overplus -overpluses -overpoeticize -overpoeticized -overpoeticizing -overpointed -overpoise -overpole -overpolemical -overpolemically -overpolemicalness -overpolice -overpoliced -overpolicing -overpolish -overpolitic -overpolitical -overpolitically -overpollinate -overpollinated -overpollinating -overponderous -overponderously -overponderousness -overpopular -overpopularity -overpopularly -overpopulate -over-populate -overpopulated -overpopulates -overpopulating -overpopulation -overpopulous -overpopulously -overpopulousness -overpositive -overpositively -overpositiveness -overpossess -overpossessive -overpost -overpot -overpotency -overpotent -overpotential -overpotently -overpotentness -overpour -overpower -overpowered -overpowerful -overpowerfully -overpowerfulness -overpowering -overpoweringly -overpoweringness -overpowers -overpractice -overpracticed -overpracticing -overpray -overpraise -overpraised -overpraises -overpraising -overprase -overprased -overprases -overprasing -overpratice -overpraticed -overpraticing -overpreach -overprecise -overprecisely -overpreciseness -overprecision -overpreface -overpregnant -overpreoccupation -overpreoccupy -overpreoccupied -overpreoccupying -overprescribe -overprescribed -overprescribes -overprescribing -overpress -overpressure -overpressures -overpresumption -overpresumptive -overpresumptively -overpresumptiveness -overpresumptuous -overpresumptuously -overpresumptuousness -overprice -overpriced -overprices -overpricing -overprick -overpride -overprint -over-print -overprinted -overprinting -overprints -overprivileged -overprize -overprized -overprizer -overprizing -overprocrastination -overproduce -over-produce -overproduced -overproduces -overproducing -overproduction -overproductions -overproductive -overproficiency -overproficient -overproficiently -overprofusion -overprolific -overprolifically -overprolificness -overprolix -overprolixity -overprolixly -overprolixness -overprominence -overprominent -overprominently -overprominentness -overpromise -overpromised -overpromising -overprompt -overpromptly -overpromptness -overprone -overproneness -overproness -overpronounce -overpronounced -overpronouncing -overpronunciation -overproof -over-proof -overproportion -over-proportion -overproportionate -overproportionated -overproportionately -overproportioned -overprosperity -overprosperous -overprosperously -overprosperousness -overprotect -overprotected -overprotecting -overprotection -overprotective -overprotects -overprotract -overprotraction -overproud -overproudly -overproudness -overprove -overproved -overprovender -overprovide -overprovided -overprovident -overprovidently -overprovidentness -overproviding -overproving -overprovision -overprovocation -overprovoke -overprovoked -overprovoking -overprune -overpruned -overpruning -overpsychologize -overpsychologized -overpsychologizing -overpublic -overpublicity -overpublicize -overpublicized -overpublicizes -overpublicizing -overpuff -overpuissant -overpuissantly -overpump -overpunish -overpunishment -overpurchase -overpurchased -overpurchasing -overput -overqualify -overqualification -overqualified -overqualifying -overquantity -overquarter -overquell -overquick -overquickly -overquiet -overquietly -overquietness -overrace -overrack -overrake -overraked -overraking -overran -overraness -overrange -overrank -overrankness -overrapture -overrapturize -overrash -overrashly -overrashness -overrate -overrated -overrates -overrating -overrational -overrationalization -overrationalize -overrationalized -overrationalizing -overrationally -overraught -overravish -overreach -overreached -overreacher -overreachers -overreaches -overreaching -overreachingly -overreachingness -overreact -overreacted -overreacting -overreaction -overreactions -overreactive -overreacts -overread -over-read -overreader -overready -overreadily -overreadiness -overreading -overrealism -overrealistic -overrealistically -overreckon -over-reckon -overreckoning -overrecord -overreduce -overreduced -overreducing -overreduction -overrefine -over-refine -overrefined -overrefinement -overrefines -overrefining -overreflection -overreflective -overreflectively -overreflectiveness -overregiment -overregimentation -overregister -overregistration -overregular -overregularity -overregularly -overregulate -overregulated -overregulates -overregulating -overregulation -overregulations -overrelax -overreliance -overreliances -overreliant -overreligion -overreligiosity -overreligious -overreligiously -overreligiousness -overremiss -overremissly -overremissness -overrennet -overrent -over-rent -overreplete -overrepletion -overrepresent -overrepresentation -overrepresentative -overrepresentatively -overrepresentativeness -overrepresented -overrepresenting -overrepresents -overrepress -overreprimand -overreserved -overreservedly -overreservedness -overresist -overresolute -overresolutely -overresoluteness -overrespond -overresponded -overresponding -overresponds -overrestore -overrestrain -overrestraint -overrestrict -overrestriction -overretention -overreward -overrich -overriches -overrichly -overrichness -overrid -overridden -override -overrider -overrides -overriding -over-riding -overrife -overrigged -overright -overrighteous -overrighteously -overrighteousness -overrigid -overrigidity -overrigidly -overrigidness -overrigorous -overrigorously -overrigorousness -overrim -overriot -overripe -overripely -overripen -overripeness -overrise -overrisen -overrising -overroast -overroasted -overroasting -overroasts -overrode -overroyal -overroll -overromanticize -overromanticized -overromanticizing -overroof -overrooted -overrose -overrough -overroughly -overroughness -over-round -overrude -overrudely -overrudeness -overruff -overruffed -overruffing -overruffs -overrule -over-rule -overruled -overruler -overrules -overruling -overrulingly -overrun -overrunner -overrunning -overrunningly -overruns -overrush -overrusset -overrust -overs -oversacrificial -oversacrificially -oversacrificialness -oversad -oversadly -oversadness -oversay -oversaid -oversail -oversale -oversales -oversaliva -oversalt -oversalted -oversalty -oversalting -oversalts -oversand -oversanded -oversanguine -oversanguinely -oversanguineness -oversapless -oversate -oversated -oversatiety -oversating -oversatisfy -oversaturate -oversaturated -oversaturates -oversaturating -oversaturation -oversauce -oversaucy -oversauciness -oversave -oversaved -oversaves -oversaving -oversaw -overscare -overscatter -overscented -oversceptical -oversceptically -overscepticalness -overscepticism -overscore -overscored -overscoring -overscour -overscratch -overscrawl -overscream -overscribble -overscrub -overscrubbed -overscrubbing -overscruple -overscrupled -overscrupling -overscrupulosity -overscrupulous -over-scrupulous -overscrupulously -overscrupulousness -overscurf -overscutched -oversea -overseal -overseam -overseamer -oversearch -overseas -overseason -overseasoned -overseated -oversecrete -oversecreted -oversecreting -oversecretion -oversecure -oversecured -oversecurely -oversecuring -oversecurity -oversedation -oversee -overseed -overseeded -overseeding -overseeds -overseeing -overseen -overseer -overseerism -overseers -overseership -oversees -overseethe -overseing -oversell -over-sell -overselling -oversells -oversend -oversensibility -oversensible -oversensibleness -oversensibly -oversensitive -oversensitively -oversensitiveness -oversensitivity -oversensitize -oversensitized -oversensitizing -oversententious -oversentimental -oversentimentalism -oversentimentality -oversentimentalize -oversentimentalized -oversentimentalizing -oversentimentally -overserene -overserenely -overserenity -overserious -overseriously -overseriousness -overservice -overservile -overservilely -overservileness -overservility -overset -oversets -oversetter -oversetting -oversettle -oversettled -oversettlement -oversettling -oversevere -overseverely -oversevereness -overseverity -oversew -oversewed -oversewing -oversewn -oversews -oversexed -overshade -overshaded -overshading -overshadow -overshadowed -overshadower -overshadowing -overshadowingly -overshadowment -overshadows -overshake -oversharp -oversharpness -overshave -oversheet -overshelving -overshepherd -overshine -overshined -overshining -overshirt -overshoe -over-shoe -overshoes -overshone -overshoot -overshooting -overshoots -overshort -overshorten -overshortly -overshortness -overshot -overshots -overshoulder -overshowered -overshrink -overshroud -oversick -overside -oversides -oversight -oversights -oversight's -oversigned -oversile -oversilence -oversilent -oversilently -oversilentness -oversilver -oversimple -oversimpleness -oversimply -oversimplicity -oversimplify -oversimplification -oversimplifications -oversimplified -oversimplifies -oversimplifying -oversystematic -oversystematically -oversystematicalness -oversystematize -oversystematized -oversystematizing -oversize -over-size -oversized -oversizes -oversizing -overskeptical -overskeptically -overskepticalness -overskeptticism -overskim -overskip -overskipper -overskirt -overslack -overslander -overslaugh -overslaughed -overslaughing -overslavish -overslavishly -overslavishness -oversleep -oversleeping -oversleeps -oversleeve -overslept -overslid -overslidden -overslide -oversliding -overslight -overslip -overslipped -overslipping -overslips -overslipt -overslop -overslope -overslow -overslowly -overslowness -overslur -oversmall -oversman -oversmite -oversmitten -oversmoke -oversmooth -oversmoothly -oversmoothness -oversness -oversnow -oversoak -oversoaked -oversoaking -oversoaks -oversoap -oversoar -oversocial -oversocialize -oversocialized -oversocializing -oversocially -oversock -oversoft -oversoften -oversoftly -oversoftness -oversold -oversolemn -oversolemnity -oversolemnly -oversolemnness -oversolicitous -oversolicitously -oversolicitousness -oversolidify -oversolidification -oversolidified -oversolidifying -oversoon -oversoothing -oversoothingly -oversophisticated -oversophistication -oversorrow -oversorrowed -oversorrowful -oversorrowfully -oversorrowfulness -oversot -oversoul -over-soul -oversouls -oversound -oversour -oversourly -oversourness -oversow -oversowed -oversowing -oversown -overspacious -overspaciously -overspaciousness -overspan -overspangled -overspanned -overspanning -oversparing -oversparingly -oversparingness -oversparred -overspatter -overspeak -overspeaking -overspecialization -overspecialize -overspecialized -overspecializes -overspecializing -overspeculate -overspeculated -overspeculating -overspeculation -overspeculative -overspeculatively -overspeculativeness -overspeech -overspeed -overspeedy -overspeedily -overspeediness -overspend -overspended -overspender -overspending -overspends -overspent -overspice -overspiced -overspicing -overspill -overspilled -overspilling -overspilt -overspin -overspins -oversplash -overspoke -overspoken -overspread -overspreading -overspreads -overspring -oversprinkle -oversprung -overspun -oversqueak -oversqueamish -oversqueamishly -oversqueamishness -oversshot -overstaff -overstaffed -overstaffing -overstaffs -overstay -overstayal -overstaid -overstayed -overstaying -overstain -overstays -overstale -overstalely -overstaleness -overstalled -overstand -overstanding -overstarch -overstaring -overstate -overstated -overstately -overstatement -overstatements -overstatement's -overstates -overstating -oversteadfast -oversteadfastly -oversteadfastness -oversteady -oversteadily -oversteadiness -oversteer -overstep -overstepped -overstepping -oversteps -overstiff -overstiffen -overstiffly -overstiffness -overstifle -overstimulate -overstimulated -overstimulates -overstimulating -overstimulation -overstimulative -overstimulatively -overstimulativeness -overstir -overstirred -overstirring -overstirs -overstitch -overstock -overstocked -overstocking -overstocks -overstood -overstoop -overstoping -overstore -overstored -overstory -overstoring -overstout -overstoutly -overstoutness -overstowage -overstowed -overstraight -overstraighten -overstraightly -overstraightness -overstrain -overstrained -overstraining -overstrains -overstrait -overstraiten -overstraitly -overstraitness -overstream -overstrength -overstrengthen -overstress -overstressed -overstresses -overstressing -overstretch -overstretched -overstretches -overstretching -overstrew -overstrewed -overstrewing -overstrewn -overstricken -overstrict -overstrictly -overstrictness -overstridden -overstride -overstridence -overstridency -overstrident -overstridently -overstridentness -overstriding -overstrike -overstrikes -overstriking -overstring -overstringing -overstrive -overstriven -overstriving -overstrode -overstrong -overstrongly -overstrongness -overstrove -overstruck -overstrung -overstud -overstudy -overstudied -overstudying -overstudious -overstudiously -overstudiousness -overstuff -overstuffed -oversublime -oversubscribe -over-subscribe -oversubscribed -oversubscriber -oversubscribes -oversubscribing -oversubscription -oversubtile -oversubtle -oversubtlety -oversubtleties -oversubtly -oversuds -oversufficiency -oversufficient -oversufficiently -oversum -oversup -oversuperstitious -oversuperstitiously -oversuperstitiousness -oversupped -oversupping -oversupply -over-supply -oversupplied -oversupplies -oversupplying -oversups -oversure -oversured -oversurely -oversureness -oversurety -oversurge -oversuring -oversurviving -oversusceptibility -oversusceptible -oversusceptibleness -oversusceptibly -oversuspicious -oversuspiciously -oversuspiciousness -oversway -overswarm -overswarming -overswarth -oversweated -oversweep -oversweet -oversweeten -oversweetened -oversweetening -oversweetens -oversweetly -oversweetness -overswell -overswelled -overswelling -overswift -overswim -overswimmer -overswing -overswinging -overswirling -overswollen -overt -overtakable -overtake -overtaken -overtaker -overtakers -overtakes -overtaking -overtalk -overtalkative -overtalkatively -overtalkativeness -overtalker -overtame -overtamely -overtameness -overtapped -overtare -overtariff -overtarry -overtart -overtartly -overtartness -overtask -overtasked -overtasking -overtasks -overtaught -overtax -overtaxation -overtaxed -overtaxes -overtaxing -overteach -overteaching -overtechnical -overtechnicality -overtechnically -overtedious -overtediously -overtediousness -overteem -overtell -overtelling -overtempt -overtenacious -overtenaciously -overtenaciousness -overtenacity -overtender -overtenderly -overtenderness -overtense -overtensely -overtenseness -overtension -overterrible -overtest -overtheatrical -overtheatrically -overtheatricalness -over-the-counter -overtheorization -overtheorize -overtheorized -overtheorizing -overthick -overthickly -overthickness -overthin -overthink -overthinly -overthinness -overthought -overthoughtful -overthoughtfully -overthoughtfulness -overthrew -overthrifty -overthriftily -overthriftiness -overthrong -overthrow -overthrowable -overthrowal -overthrower -overthrowers -overthrowing -overthrown -overthrows -overthrust -overthwart -overthwartarchaic -overthwartly -overthwartness -overthwartways -overthwartwise -overtide -overtight -overtighten -overtightened -overtightening -overtightens -overtightly -overtightness -overtill -overtilt -overtimbered -overtime -overtimed -overtimer -overtimes -overtimid -overtimidity -overtimidly -overtimidness -overtiming -overtimorous -overtimorously -overtimorousness -overtinsel -overtinseled -overtinseling -overtint -overtip -overtype -overtyped -overtipple -overtippled -overtippling -overtips -overtire -overtired -overtiredness -overtires -overtiring -overtitle -overtly -overtness -overtoe -overtoil -overtoiled -overtoiling -overtoils -overtoise -overtold -overtolerance -overtolerant -overtolerantly -Overton -overtone -overtones -overtone's -overtongued -overtook -overtop -overtopped -overtopping -overtopple -overtops -overtorture -overtortured -overtorturing -overtower -overtrace -overtrack -overtrade -overtraded -overtrader -overtrading -overtrailed -overtrain -over-train -overtrained -overtraining -overtrains -overtrample -overtravel -overtread -overtreading -overtreat -overtreated -overtreating -overtreatment -overtreats -overtrick -overtrim -overtrimme -overtrimmed -overtrimming -overtrims -overtrod -overtrodden -overtrouble -over-trouble -overtroubled -overtroubling -overtrue -overtruly -overtrump -overtrust -over-trust -overtrustful -overtrustfully -overtrustfulness -overtrusting -overtruthful -overtruthfully -overtruthfulness -overtumble -overture -overtured -overtures -overture's -overturing -overturn -overturnable -overturned -overturner -overturning -overturns -overtutor -overtwine -overtwist -overuberous -over-under -overunionize -overunionized -overunionizing -overunsuitable -overurbanization -overurbanize -overurbanized -overurbanizing -overurge -overurged -overurges -overurging -overuse -overused -overuses -overusing -overusual -overusually -overutilize -overutilized -overutilizes -overutilizing -overvaliant -overvaliantly -overvaliantness -overvaluable -overvaluableness -overvaluably -overvaluation -overvalue -over-value -overvalued -overvalues -overvaluing -overvary -overvariation -overvaried -overvariety -overvarying -overvault -overvehemence -overvehement -overvehemently -overvehementness -overveil -overventilate -overventilated -overventilating -overventilation -overventuresome -overventurous -overventurously -overventurousness -overview -overviews -overview's -overvigorous -overvigorously -overvigorousness -overviolent -overviolently -overviolentness -overvoltage -overvote -overvoted -overvotes -overvoting -overwade -overwages -overway -overwake -overwalk -overwander -overward -overwary -overwarily -overwariness -overwarm -overwarmed -overwarming -overwarms -overwart -overwash -overwasted -overwatch -overwatcher -overwater -overwave -overweak -overweakly -overweakness -overwealth -overwealthy -overweaponed -overwear -overweary -overwearied -overwearying -overwearing -overwears -overweather -overweave -overweb -overween -overweened -overweener -overweening -overweeningly -overweeningness -overweens -overweep -overweigh -overweighed -overweighing -overweighs -overweight -over-weight -overweightage -overweighted -overweighting -overwell -overwelt -overwend -overwent -overwet -over-wet -overwetness -overwets -overwetted -overwetting -overwheel -overwhelm -overwhelmed -overwhelmer -overwhelming -overwhelmingly -overwhelmingness -overwhelms -overwhip -overwhipped -overwhipping -overwhirl -overwhisper -overwide -overwidely -overwideness -overwild -overwildly -overwildness -overwily -overwilily -overwilling -overwillingly -overwillingness -overwin -overwind -overwinding -overwinds -overwing -overwinning -overwinter -overwintered -overwintering -overwiped -overwisdom -overwise -over-wise -overwisely -overwithered -overwoman -overwomanize -overwomanly -overwon -overwood -overwooded -overwoody -overword -overwords -overwore -overwork -overworked -overworking -overworks -overworld -overworn -overworry -overworship -overwound -overwove -overwoven -overwrap -overwrest -overwrested -overwrestle -overwrite -overwrited -overwrites -overwriting -overwritten -overwrote -overwroth -overwrought -overwwrought -overzeal -over-zeal -overzealous -overzealously -overzealousness -overzeals -ovest -Oveta -Ovett -ovewound -ovi- -Ovibos -Ovibovinae -ovibovine -ovicapsular -ovicapsule -ovicell -ovicellular -ovicidal -ovicide -ovicides -ovicyst -ovicystic -ovicular -oviculated -oviculum -Ovid -Ovida -Ovidae -Ovidian -oviducal -oviduct -oviductal -oviducts -Oviedo -oviferous -ovification -oviform -ovigenesis -ovigenetic -ovigenic -ovigenous -oviger -ovigerm -ovigerous -ovile -Ovillus -Ovinae -ovine -ovines -ovinia -ovipara -oviparal -oviparity -oviparous -oviparously -oviparousness -oviposit -oviposited -ovipositing -oviposition -ovipositional -ovipositor -oviposits -Ovis -ovisac -ovisaclike -ovisacs -oviscapt -ovism -ovispermary -ovispermiduct -ovist -ovistic -ovivorous -ovo- -ovocyte -ovoelliptic -ovoflavin -ovogenesis -ovogenetic -ovogenous -ovoglobulin -ovogonium -ovoid -ovoidal -ovoids -ovolemma -ovoli -ovolytic -ovolo -ovology -ovological -ovologist -ovolos -ovomucoid -ovonic -ovonics -ovopyriform -ovoplasm -ovoplasmic -ovorhomboid -ovorhomboidal -ovotesticular -ovotestis -ovo-testis -ovovitellin -Ovovivipara -ovoviviparism -ovoviviparity -ovoviviparous -ovo-viviparous -ovoviviparously -ovoviviparousness -Ovula -ovular -ovulary -ovularian -ovulate -ovulated -ovulates -ovulating -ovulation -ovulations -ovulatory -ovule -ovules -ovuliferous -ovuligerous -ovulist -ovulite -ovulum -ovum -OW -Owades -Owain -Owaneco -Owanka -Owasco -Owasso -Owatonna -O-wave -owd -owe -owed -Owego -owelty -Owen -Owena -Owendale -Owenia -Owenian -Owenism -Owenist -Owenite -Owenize -Owens -Owensboro -Owensburg -Owensville -Owenton -ower -owerance -owerby -owercome -owergang -owerloup -Owerri -owertaen -owerword -owes -owght -owhere -OWHN -OWI -Owicim -Owyhee -owyheeite -owing -Owings -Owings-Mills -Owingsville -owk -owl -owldom -owl-eyed -owler -owlery -owleries -owlet -owlets -owl-faced -Owlglass -owl-glass -owl-haunted -owlhead -owl-headed -owly -owling -owlish -owlishly -owlishness -owlism -owllight -owl-light -owllike -owls -owl's -owl's-crown -Owlshead -owl-sighted -Owlspiegle -owl-wide -owl-winged -own -ownable -owned -owner -ownerless -owners -ownership -ownerships -own-form -ownhood -owning -ownness -own-root -own-rooted -owns -ownself -ownwayish -Owosso -owrecome -owregane -owrehip -owrelay -owse -owsen -owser -owt -owtchah -Ox -ox- -oxa- -oxacid -oxacillin -oxadiazole -oxal- -oxalacetate -oxalacetic -oxalaemia -oxalaldehyde -oxalamid -oxalamide -oxalan -oxalate -oxalated -oxalates -oxalating -oxalato -oxaldehyde -oxalemia -oxalic -Oxalidaceae -oxalidaceous -oxalyl -oxalylurea -Oxalis -oxalises -oxalite -oxalo- -oxaloacetate -oxaloacetic -oxalodiacetic -oxalonitril -oxalonitrile -oxaluramid -oxaluramide -oxalurate -oxaluria -oxaluric -oxamate -oxamethane -oxamic -oxamid -oxamide -oxamidin -oxamidine -oxammite -oxan -oxanate -oxane -oxanic -oxanilate -oxanilic -oxanilide -oxazepam -oxazin -oxazine -oxazines -oxazole -oxbane -oxberry -oxberries -oxbird -ox-bird -oxbiter -oxblood -oxbloods -oxboy -Oxbow -ox-bow -oxbows -oxbrake -Oxbridge -oxcart -oxcarts -oxcheek -oxdiacetic -oxdiazole -oxea -oxeate -oxeye -ox-eye -ox-eyed -oxeyes -oxen -Oxenstierna -oxeote -oxer -oxes -oxetone -oxfly -ox-foot -Oxford -Oxfordian -Oxfordism -Oxfordist -Oxfords -Oxfordshire -oxgall -oxgang -oxgate -oxgoad -Ox-god -oxharrow -ox-harrow -oxhead -ox-head -ox-headed -oxheal -oxheart -oxhearts -oxherd -oxhide -oxhoft -oxhorn -ox-horn -oxhouse -oxhuvud -oxy -oxi- -oxy- -oxyacanthin -oxyacanthine -oxyacanthous -oxyacetylene -oxy-acetylene -oxyacid -oxyacids -Oxyaena -Oxyaenidae -oxyaldehyde -oxyamine -oxyanthracene -oxyanthraquinone -oxyaphia -oxyaster -oxyazo -oxybapha -oxybaphon -Oxybaphus -oxybenzaldehyde -oxybenzene -oxybenzyl -oxybenzoic -oxyberberine -oxyblepsia -oxybromide -oxybutyria -oxybutyric -oxycalcium -oxy-calcium -oxycalorimeter -oxycamphor -oxycaproic -oxycarbonate -oxycellulose -oxycephaly -oxycephalic -oxycephalism -oxycephalous -oxychlor- -oxychlorate -oxychloric -oxychlorid -oxychloride -oxychlorine -oxycholesterol -oxychromatic -oxychromatin -oxychromatinic -oxycyanide -oxycinnamic -oxycobaltammine -Oxycoccus -oxycopaivic -oxycoumarin -oxycrate -oxid -oxidability -oxidable -oxydactyl -oxidant -oxidants -oxidase -oxydase -oxidases -oxidasic -oxydasic -oxidate -oxidated -oxidates -oxidating -oxidation -oxydation -oxidational -oxidation-reduction -oxidations -oxidative -oxidatively -oxidator -oxide -Oxydendrum -Oxyderces -oxides -oxide's -oxydiact -oxidic -oxidimetry -oxidimetric -oxidise -oxidised -oxidiser -oxidisers -oxidises -oxidising -oxidizability -oxidizable -oxidization -oxidizations -oxidize -oxidized -oxidizement -oxidizer -oxidizers -oxidizes -oxidizing -oxidoreductase -oxidoreduction -oxids -oxidulated -oxyesthesia -oxyether -oxyethyl -oxyfatty -oxyfluoride -oxygas -oxygen -oxygen-acetylene -oxygenant -oxygenase -oxygenate -oxygenated -oxygenates -oxygenating -oxygenation -oxygenator -oxygenerator -oxygenic -oxygenicity -oxygenium -oxygenizable -oxygenization -oxygenize -oxygenized -oxygenizement -oxygenizer -oxygenizing -oxygenless -oxygenous -oxygens -oxygeusia -oxygnathous -oxygon -oxygonal -oxygonial -oxyhaematin -oxyhaemoglobin -oxyhalide -oxyhaloid -oxyhematin -oxyhemocyanin -oxyhemoglobin -oxyhexactine -oxyhexaster -oxyhydrate -oxyhydric -oxyhydrogen -oxyiodide -oxyketone -oxyl -Oxylabracidae -Oxylabrax -oxyluciferin -oxyluminescence -oxyluminescent -Oxylus -oxim -oxymandelic -oximate -oximation -oxime -oxymel -oximes -oximeter -oxymethylene -oximetry -oximetric -oxymomora -oxymora -oxymoron -oxymoronic -oxims -oxymuriate -oxymuriatic -oxynaphthoic -oxynaphtoquinone -oxynarcotine -oxindole -oxyneurin -oxyneurine -oxynitrate -oxyntic -oxyophitic -oxyopy -oxyopia -Oxyopidae -oxyosphresia -oxypetalous -oxyphenyl -oxyphenol -oxyphil -oxyphile -oxyphiles -oxyphilic -oxyphyllous -oxyphilous -oxyphils -oxyphyte -oxyphony -oxyphonia -oxyphosphate -oxyphthalic -oxypycnos -oxypicric -Oxypolis -oxyproline -oxypropionic -oxypurine -oxyquinaseptol -oxyquinoline -oxyquinone -oxyrhynch -oxyrhynchid -oxyrhynchous -oxyrhynchus -oxyrhine -oxyrhinous -Oxyrrhyncha -oxyrrhynchid -oxysalicylic -oxysalt -oxy-salt -oxysalts -oxysome -oxysomes -oxystearic -Oxystomata -oxystomatous -oxystome -oxysulfid -oxysulfide -oxysulphate -oxysulphid -oxysulphide -oxyterpene -oxytetracycline -oxytylotate -oxytylote -oxytocia -oxytocic -oxytocics -oxytocin -oxytocins -oxytocous -oxytoluene -oxytoluic -oxytone -oxytones -oxytonesis -oxytonic -oxytonical -oxytonize -Oxytricha -Oxytropis -oxyuriasis -oxyuricide -oxyurid -Oxyuridae -oxyurous -oxywelding -oxland -Oxley -Oxly -oxlike -oxlip -oxlips -oxman -oxmanship -Oxnard -oxo -oxo- -oxoindoline -Oxon -Oxonian -oxonic -oxonium -Oxonolatry -oxozone -oxozonide -oxozonides -oxpecker -oxpeckers -oxphony -oxreim -oxshoe -oxskin -ox-stall -oxtail -ox-tail -oxtails -oxter -oxters -oxtongue -ox-tongue -oxtongues -Oxus -oxwort -Oz -oz. -Oza -ozaena -ozaena- -Ozalid -Ozan -Ozark -ozarkite -Ozarks -Ozawkie -Ozen -ozena -Ozenfant -Ozias -Ozkum -Ozmo -ozobrome -ozocerite -ozoena -ozokerit -ozokerite -ozon- -Ozona -ozonate -ozonation -ozonator -ozone -ozoned -ozoner -ozones -ozonic -ozonid -ozonide -ozonides -ozoniferous -ozonify -ozonification -ozonise -ozonised -ozonises -ozonising -Ozonium -ozonization -ozonize -ozonized -ozonizer -ozonizers -ozonizes -ozonizing -ozonolysis -ozonometer -ozonometry -ozonoscope -ozonoscopic -ozonosphere -ozonospheric -ozonous -ozophen -ozophene -ozostomia -ozotype -ozs -Ozzy -Ozzie -P -P. -P.A. -P.B. -P.C. -P.D. -P.E. -P.E.I. -P.G. -P.I. -P.M. -P.M.G. -P.O. -P.O.D. -P.P. -p.q. -P.R. -p.r.n. -P.S. -P.T. -P.T.O. -P.W.D. -P/C -P2 -P3 -P4 -PA -Pa. -paal -paaneleinrg -Paapanen -paar -paaraphimosis -paas -Paasikivi -Paauhau -Paauilo -paauw -paawkier -PABA -pabalum -pabble -Pablo -Pablum -pabouch -Pabst -pabular -pabulary -pabulation -pabulatory -pabulous -pabulum -pabulums -PABX -PAC -paca -pacable -Pacaguara -pacay -pacaya -pacane -paca-rana -pacas -pacate -pacately -pacation -pacative -Paccanarist -Pacceka -paccha -Pacchionian -paccioli -PACE -paceboard -paced -pacemake -pacemaker -pacemakers -pacemaking -pacer -pacers -paces -pacesetter -pacesetters -pacesetting -paceway -pacha -pachadom -pachadoms -pachak -pachalic -pachalics -pachanga -pachas -Pacheco -Pachelbel -pachy- -pachyacria -pachyaemia -pachyblepharon -pachycarpous -pachycephal -pachycephaly -pachycephalia -pachycephalic -pachycephalous -pachychilia -pachychymia -pachycholia -pachycladous -pachydactyl -pachydactyly -pachydactylous -pachyderm -pachyderma -pachydermal -Pachydermata -pachydermateous -pachydermatocele -pachydermatoid -pachydermatosis -pachydermatous -pachydermatously -pachydermia -pachydermial -pachydermic -pachydermoid -pachydermous -pachyderms -pachyemia -pachyglossal -pachyglossate -pachyglossia -pachyglossous -pachyhaemia -pachyhaemic -pachyhaemous -pachyhematous -pachyhemia -pachyhymenia -pachyhymenic -Pachylophus -pachylosis -Pachyma -pachymenia -pachymenic -pachymeningitic -pachymeningitis -pachymeninx -pachymeter -pachynathous -pachynema -pachinko -pachynsis -pachyntic -pachyodont -pachyotia -pachyotous -pachyperitonitis -pachyphyllous -pachypleuritic -pachypod -pachypodous -pachypterous -pachyrhynchous -Pachyrhizus -pachysalpingitis -Pachysandra -pachysandras -pachysaurian -pachisi -pachisis -pachysomia -pachysomous -pachystichous -Pachystima -pachytene -Pachytylus -pachytrichous -pachyvaginitis -Pachmann -pachnolite -pachometer -Pachomian -Pachomius -Pachons -pachouli -pachoulis -Pachston -Pacht -Pachton -Pachuca -Pachuco -pachucos -Pachuta -Pacian -Pacien -Pacifa -pacify -pacifiable -Pacific -Pacifica -pacifical -pacifically -Pacificas -pacificate -pacificated -pacificating -pacification -pacifications -pacificator -pacificatory -Pacificia -pacificism -pacificist -pacificistic -pacificistically -pacificity -pacifico -pacificos -pacified -pacifier -pacifiers -pacifies -pacifying -pacifyingly -pacifism -pacifisms -pacifist -pacifistic -pacifistically -pacifists -pacing -Pacinian -pacinko -Pack -packability -packable -package -packaged -packager -packagers -packages -packaging -packagings -packall -Packard -pack-bearing -packboard -packbuilder -packcloth -packed -packed-up -Packer -packery -packeries -packers -packet -packet-boat -packeted -packeting -packets -packet's -packhorse -pack-horse -packhorses -packhouse -packing -packinghouse -packings -pack-laden -packless -packly -packmaker -packmaking -packman -packmanship -packmen -pack-needle -packness -packnesses -packplane -packrat -packs -packsack -packsacks -packsaddle -pack-saddle -packsaddles -packstaff -packstaves -Packston -packthread -packthreaded -packthreads -Packton -packtong -packtrain -packway -packwall -packwaller -packware -Packwaukee -packwax -packwaxes -Packwood -Paco -Pacoima -Pacolet -Pacorro -pacos -pacota -pacouryuva -pacquet -pacs -PACT -pacta -paction -pactional -pactionally -pactions -Pactolian -Pactolus -pacts -pact's -pactum -pacu -PACX -PAD -Padang -padasha -padauk -padauks -padcloth -padcluoth -Padda -padded -padder -padders -Paddy -paddybird -paddy-bird -Paddie -Paddies -Paddyism -paddymelon -padding -paddings -Paddington -Paddywack -paddywatch -Paddywhack -paddle -paddleball -paddleboard -paddleboat -paddlecock -paddled -paddlefish -paddlefishes -paddlefoot -paddlelike -paddler -paddlers -paddles -paddle-shaped -paddle-wheel -paddlewood -paddling -paddlings -paddock -paddocked -paddocking -paddockride -paddocks -paddockstone -paddockstool -paddoing -Padegs -padeye -padeyes -padelion -padella -pademelon -Paden -Paderborn -Paderewski -Paderna -padesoy -padfoot -padge -Padget -Padgett -padi -padige -Padina -padis -Padishah -padishahs -padle -padles -padlike -padlock -padlocked -padlocking -padlocks -padmasana -padmelon -padnag -padnags -padou -padouk -padouks -Padova -padpiece -Padraic -Padraig -padre -padres -padri -Padriac -padrino -padroadist -padroado -padrona -padrone -padrones -Padroni -padronism -pads -pad's -padsaw -padshah -padshahs -padstone -padtree -Padua -Paduan -Paduanism -paduasoy -paduasoys -Paducah -Padus -paean -paeanism -paeanisms -paeanize -paeanized -paeanizing -paeans -paed- -paedagogy -paedagogic -paedagogism -paedagogue -paedarchy -paedatrophy -paedatrophia -paederast -paederasty -paederastic -paederastically -paedeutics -paediatry -paediatric -paediatrician -paediatrics -paedo- -paedobaptism -paedobaptist -paedogenesis -paedogenetic -paedogenic -paedology -paedological -paedologist -paedometer -paedometrical -paedomorphic -paedomorphism -paedomorphosis -paedonymy -paedonymic -paedophilia -paedopsychologist -paedotribe -paedotrophy -paedotrophic -paedotrophist -paegel -paegle -Paelignian -paella -paellas -paenula -paenulae -paenulas -Paeon -paeony -Paeonia -Paeoniaceae -Paeonian -paeonic -paeonin -paeons -paeounlae -paepae -paesan -paesani -paesano -paesanos -paesans -Paesiello -Paestum -paetrick -Paff -PaG -paga -pagador -pagan -Paganalia -Paganalian -pagandom -pagandoms -paganic -paganical -paganically -Paganini -paganisation -paganise -paganised -paganiser -paganises -paganish -paganishly -paganising -paganism -paganisms -paganist -paganistic -paganists -paganity -paganization -paganize -paganized -paganizer -paganizes -paganizing -paganly -Pagano-christian -pagano-Christianism -Pagano-christianize -paganry -pagans -pagan's -Pagas -pagatpat -Page -pageant -pageanted -pageanteer -pageantic -pageantry -pageantries -pageants -pageant's -pageboy -page-boy -pageboys -paged -Pagedale -pagedom -pageful -pagehood -Pageland -pageless -pagelike -Pageos -pager -pagers -Pages -page's -pageship -pagesize -Paget -Pageton -paggle -pagina -paginae -paginal -paginary -paginate -paginated -paginates -paginating -pagination -pagine -paging -pagings -pagiopod -Pagiopoda -pagne -pagnes -Pagnol -pagod -pagoda -pagodalike -pagodas -pagoda-tree -pagodite -pagods -pagoscope -pagrus -Paguate -Paguma -pagurian -pagurians -pagurid -Paguridae -Paguridea -pagurids -pagurine -Pagurinea -paguroid -Paguroidea -Pagurus -pagus -pah -paha -pahachroma -Pahala -Pahang -Pahareen -Pahari -Paharia -Paharis -pahautea -pahi -Pahl -Pahlavi -pahlavis -Pahlevi -pahmi -paho -Pahoa -pahoehoe -Pahokee -pahos -Pahouin -Pahrump -Pahsien -pahutan -pay -pay- -Paia -Paya -payability -payable -payableness -payables -payably -Payagua -Payaguan -pay-all -pay-as-you-go -payback -paybacks -paybox -paiche -paycheck -paychecks -paycheck's -paycheque -paycheques -Paicines -Paiconeca -paid -paid- -payday -pay-day -paydays -paideia -paideutic -paideutics -paid-in -paidle -paidology -paidological -paidologist -paidonosology -PAYE -payed -payee -payees -payen -payeny -payer -payers -payer's -payess -Payette -Paige -paigle -Paignton -paygrade -pai-hua -payyetan -paying -paijama -Paik -paiked -paiker -paiking -paiks -Pail -pailette -pailful -pailfuls -paillard -paillasse -pailles -paillette -pailletted -paillettes -paillon -paillons -payload -payloads -pailolo -pailoo -pai-loo -pai-loos -pailou -pailow -pails -pail's -pailsful -paimaneh -Paymar -paymaster -Paymaster-General -paymaster-generalship -paymasters -paymastership -payment -payments -payment's -paymistress -Pain -pain-afflicted -pain-assuaging -pain-bearing -pain-bought -painch -pain-chastened -painches -Paincourtville -paindemaine -pain-dispelling -pain-distorted -pain-drawn -Paine -Payne -pained -Painesdale -Painesville -Paynesville -Payneville -pain-fearing -pain-free -painful -painfuller -painfullest -painfully -painfulness -pain-giving -Payni -paynim -paynimhood -paynimry -paynimrie -paynims -pain-inflicting -paining -painingly -Paynize -painkiller -pain-killer -painkillers -painkilling -pain-killing -painless -painlessly -painlessness -pain-producing -painproof -pain-racked -pains -painstaker -painstaking -painstakingly -painstakingness -pain-stricken -painsworthy -paint -paintability -paintable -paintableness -paintably -Paintbank -paint-beplastered -paintbox -paintbrush -paintbrushes -painted -paintedness -Painter -Paynter -painterish -painterly -painterlike -painterliness -painters -paintership -painter-stainer -paint-filler -paint-filling -painty -paintier -paintiest -paintiness -painting -paintingness -paintings -paintless -Paintlick -paint-mixing -Painton -paintpot -paintproof -paint-removing -paintress -paintry -paintrix -paintroot -paints -paint-splashed -paint-spotted -paint-spraying -paint-stained -Paintsville -painture -paint-washing -paint-worn -pain-worn -pain-wrought -pain-wrung -paiock -paiocke -payoff -pay-off -payoffs -payoff's -payola -payolas -payong -payor -payors -payout -payouts -paip -pair -paired -pairedness -pay-rent -pairer -pair-horse -pairial -pairing -pairings -pairle -pairmasts -pairment -pair-oar -pair-oared -payroll -pay-roller -payrolls -pair-royal -pairs -pairt -pairwise -pais -pays -paisa -paysage -paysagist -paisan -paisana -paisanas -Paysand -Paysandu -paisanite -paysanne -paisano -paisanos -paisans -paisas -paise -Paisiello -Paisley -paisleys -Payson -payt -payt. -paytamine -Payton -pay-TV -Paiute -paiwari -Paixhans -paized -paizing -pajahuello -pajama -pajamaed -pajamahs -pajamas -pajaroello -pajero -pajock -Pajonism -PAK -Pakanbaru -Pakawa -Pakawan -pakchoi -pak-choi -pak-chois -pakeha -Pakhpuluk -Pakhtun -Paki -Paki-bashing -Pakistan -Pakistani -pakistanis -Pakokku -pakpak-lauin -Pakse -paktong -PAL -Pal. -Pala -palabra -palabras -palace -palaced -palacelike -palaceous -palaces -palace's -palaceward -palacewards -palach -Palacios -palacsinta -paladin -paladins -Paladru -Palae-alpine -palaeanthropic -Palaearctic -Palaeechini -palaeechinoid -Palaeechinoidea -palaeechinoidean -palaeentomology -palaeethnology -palaeethnologic -palaeethnological -palaeethnologist -Palaeeudyptes -Palaeic -palaeichthyan -Palaeichthyes -palaeichthyic -Palaemon -palaemonid -Palaemonidae -palaemonoid -palaeo- -palaeoalchemical -Palaeo-american -palaeoanthropic -palaeoanthropography -palaeoanthropology -Palaeoanthropus -Palaeo-asiatic -palaeoatavism -palaeoatavistic -palaeobiogeography -palaeobiology -palaeobiologic -palaeobiological -palaeobiologist -palaeobotany -palaeobotanic -palaeobotanical -palaeobotanically -palaeobotanist -Palaeocarida -palaeoceanography -Palaeocene -palaeochorology -Palaeo-christian -palaeocyclic -palaeoclimatic -palaeoclimatology -palaeoclimatologic -palaeoclimatological -palaeoclimatologist -Palaeoconcha -palaeocosmic -palaeocosmology -Palaeocrinoidea -palaeocrystal -palaeocrystallic -palaeocrystalline -palaeocrystic -palaeodendrology -palaeodendrologic -palaeodendrological -palaeodendrologically -palaeodendrologist -Palaeodictyoptera -palaeodictyopteran -palaeodictyopteron -palaeodictyopterous -palaeoecology -palaeoecologic -palaeoecological -palaeoecologist -palaeoencephala -palaeoencephalon -palaeoentomology -palaeoentomologic -palaeoentomological -palaeoentomologist -palaeoeremology -palaeoethnic -palaeoethnobotany -palaeoethnology -palaeoethnologic -palaeoethnological -palaeoethnologist -palaeofauna -Palaeogaea -Palaeogaean -Palaeogene -palaeogenesis -palaeogenetic -palaeogeography -palaeogeographic -palaeogeographical -palaeogeographically -palaeoglaciology -palaeoglyph -Palaeognathae -palaeognathic -palaeognathous -palaeograph -palaeographer -palaeography -palaeographic -palaeographical -palaeographically -palaeographist -palaeoherpetology -palaeoherpetologist -palaeohydrography -palaeohistology -palaeolatry -palaeolimnology -palaeolith -palaeolithy -Palaeolithic -palaeolithical -palaeolithist -palaeolithoid -palaeology -palaeological -palaeologist -Palaeologus -palaeomagnetism -Palaeomastodon -palaeometallic -palaeometeorology -palaeometeorological -Palaeonemertea -palaeonemertean -palaeonemertine -Palaeonemertinea -Palaeonemertini -palaeoniscid -Palaeoniscidae -palaeoniscoid -Palaeoniscum -Palaeoniscus -palaeontography -palaeontographic -palaeontographical -palaeontol -palaeontol. -palaeontology -palaeontologic -palaeontological -palaeontologically -palaeontologies -palaeontologist -palaeopathology -palaeopedology -palaeophile -palaeophilist -Palaeophis -palaeophysiography -palaeophysiology -palaeophytic -palaeophytology -palaeophytological -palaeophytologist -palaeoplain -palaeopotamology -palaeopsychic -palaeopsychology -palaeopsychological -palaeoptychology -Palaeornis -Palaeornithinae -palaeornithine -palaeornithology -palaeornithological -palaeosaur -Palaeosaurus -palaeosophy -Palaeospondylus -palaeostyly -palaeostylic -Palaeostraca -palaeostracan -palaeostriatal -palaeostriatum -palaeotechnic -palaeothalamus -Palaeothentes -Palaeothentidae -palaeothere -palaeotherian -Palaeotheriidae -palaeotheriodont -palaeotherioid -Palaeotherium -palaeotheroid -palaeotype -palaeotypic -palaeotypical -palaeotypically -palaeotypography -palaeotypographic -palaeotypographical -palaeotypographist -Palaeotropical -palaeovolcanic -Palaeozoic -palaeozoology -palaeozoologic -palaeozoological -palaeozoologist -palaestra -palaestrae -palaestral -palaestras -palaestrian -palaestric -palaestrics -palaetiology -palaetiological -palaetiologist -palafitte -palagonite -palagonitic -palay -palayan -Palaic -Palaihnihan -palaiotype -palais -palaiste -palaite -palaka -palala -palama -palamae -palamate -palame -Palamedea -palamedean -Palamedeidae -Palamedes -Palamite -Palamitism -palampore -palander -palank -palanka -palankeen -palankeened -palankeener -palankeening -palankeeningly -palanquin -palanquined -palanquiner -palanquining -palanquiningly -palanquins -palapala -palapalai -Palapteryx -Palaquium -palar -palas -palatability -palatable -palatableness -palatably -palatal -palatalism -palatality -palatalization -palatalize -palatalized -palatally -palatals -palate -palated -palateful -palatefulness -palateless -palatelike -palates -palate's -palatia -palatial -palatially -palatialness -palatian -palatic -palatinal -Palatinate -palatinates -Palatine -palatines -palatineship -Palatinian -palatinite -palation -palatist -palatitis -palatium -palative -palatization -palatize -Palatka -palato- -palatoalveolar -palatodental -palatoglossal -palatoglossus -palatognathous -palatogram -palatograph -palatography -palatomaxillary -palatometer -palatonasal -palatopharyngeal -palatopharyngeus -palatoplasty -palatoplegia -palatopterygoid -palatoquadrate -palatorrhaphy -palatoschisis -Palatua -Palau -Palaung -palaver -palavered -palaverer -palavering -palaverist -palaverment -palaverous -palavers -Palawan -palazzi -palazzo -palazzos -palberry -palch -Palco -pale -pale- -palea -paleaceous -paleae -paleal -paleanthropic -Palearctic -Pale-asiatic -paleate -palebelly -pale-blooded -pale-blue -palebreast -pale-bright -palebuck -Palecek -pale-cheeked -palechinoid -pale-colored -pale-complexioned -paled -paledness -pale-dried -pale-eared -pale-eyed -paleencephala -paleencephalon -paleencephalons -paleentomology -paleethnographer -paleethnology -paleethnologic -paleethnological -paleethnologist -paleface -pale-face -pale-faced -palefaces -palegold -pale-gray -pale-green -palehearted -pale-hued -Paley -paleichthyology -paleichthyologic -paleichthyologist -pale-yellow -paleiform -pale-leaved -palely -pale-livered -pale-looking -Paleman -Palembang -Palencia -paleness -palenesses -Palenque -Palenville -paleo- -paleoalchemical -Paleo-american -Paleo-amerind -paleoandesite -paleoanthropic -paleoanthropography -paleoanthropology -paleoanthropological -paleoanthropologist -Paleoanthropus -Paleo-Asiatic -paleoatavism -paleoatavistic -paleobiogeography -paleobiology -paleobiologic -paleobiological -paleobiologist -paleobotany -paleobotanic -paleobotanical -paleobotanically -paleobotanist -paleoceanography -Paleocene -paleochorology -paleochorologist -Paleo-christian -paleocyclic -paleoclimatic -paleoclimatology -paleoclimatologic -paleoclimatological -paleoclimatologist -Paleoconcha -paleocosmic -paleocosmology -paleocrystal -paleocrystallic -paleocrystalline -paleocrystic -paleodendrology -paleodendrologic -paleodendrological -paleodendrologically -paleodendrologist -paleodentrologist -paleoecology -paleoecologic -paleoecological -paleoecologist -paleoencephalon -paleoentomologic -paleoentomological -paleoentomologist -paleoeremology -Paleo-eskimo -paleoethnic -paleoethnography -paleoethnology -paleoethnologic -paleoethnological -paleoethnologist -paleofauna -paleog -Paleogene -paleogenesis -paleogenetic -paleogeography -paleogeographic -paleogeographical -paleogeographically -paleogeologic -paleoglaciology -paleoglaciologist -paleoglyph -paleograph -paleographer -paleographers -paleography -paleographic -paleographical -paleographically -paleographist -paleoherpetology -paleoherpetologist -paleohydrography -paleohistology -paleoichthyology -paleoytterbium -paleokinetic -paleola -paleolate -paleolatry -paleolimnology -paleolith -paleolithy -Paleolithic -paleolithical -paleolithist -paleolithoid -paleology -paleological -paleologist -paleomagnetic -paleomagnetically -paleomagnetism -paleomagnetist -paleomammalogy -paleomammology -paleomammologist -paleometallic -paleometeorology -paleometeorological -paleometeorologist -paleon -paleontography -paleontographic -paleontographical -paleontol -paleontology -paleontologic -paleontological -paleontologically -paleontologies -paleontologist -paleontologists -paleopathology -paleopathologic -paleopathological -paleopathologist -paleopedology -paleophysiography -paleophysiology -paleophysiologist -paleophytic -paleophytology -paleophytological -paleophytologist -paleopicrite -paleoplain -paleopotamology -paleopotamoloy -paleopsychic -paleopsychology -paleopsychological -paleornithology -paleornithological -paleornithologist -Paleosiberian -Paleo-Siberian -paleosol -paleostyly -paleostylic -paleostriatal -paleostriatum -paleotechnic -paleothalamus -paleothermal -paleothermic -Paleotropical -paleovolcanic -Paleozoic -paleozoology -paleozoologic -paleozoological -paleozoologist -paler -pale-red -pale-reddish -pale-refined -Palermitan -Palermo -paleron -Pales -Palesman -pale-souled -pale-spirited -pale-spotted -palest -Palestine -Palestinian -palestinians -palestra -palestrae -palestral -palestras -palestrian -palestric -Palestrina -pale-striped -palet -pale-tinted -paletiology -paletot -paletots -palets -palette -palettelike -palettes -paletz -pale-visaged -palew -paleways -palewise -palfgeys -palfrey -palfreyed -palfreys -palfrenier -palfry -palgat -Palgrave -Pali -paly -paly-bendy -Palici -Palicourea -palier -paliest -palification -paliform -paligorskite -palikar -palikarism -palikars -palikinesia -Palila -palilalia -Palilia -Palilicium -palillogia -palilogetic -palilogy -palimbacchic -palimbacchius -palimony -palimpsest -palimpsestic -palimpsests -palimpset -palinal -palindrome -palindromes -palindromic -palindromical -palindromically -palindromist -paling -palingenesy -palingenesia -palingenesian -palingenesis -palingenesist -palingenetic -palingenetically -palingeny -palingenic -palingenist -palings -palinode -palinoded -palinodes -palinody -palinodial -palinodic -palinodist -palynology -palynologic -palynological -palynologically -palynologist -palynomorph -palinopic -palinurid -Palinuridae -palinuroid -Palinurus -paliphrasia -palirrhea -palis -Palisa -palisade -palisaded -Palisades -palisading -palisado -palisadoed -palisadoes -palisadoing -palisander -palisfy -palish -palisse -Palissy -palistrophia -Palitzsch -Paliurus -palkee -palki -Pall -Palla -palladammin -palladammine -Palladia -Palladian -Palladianism -palladic -palladiferous -Palladin -palladinize -palladinized -palladinizing -Palladio -palladion -palladious -Palladium -palladiumize -palladiumized -palladiumizing -palladiums -palladize -palladized -palladizing -palladodiammine -palladosammine -palladous -pallae -pallah -pallall -pallanesthesia -pallar -Pallas -pallasite -Pallaten -Pallaton -pallbearer -pallbearers -palled -pallescence -pallescent -pallesthesia -pallet -palleting -palletization -palletize -palletized -palletizer -palletizing -pallets -pallette -pallettes -pallholder -palli -pally -pallia -pallial -palliament -palliard -palliasse -Palliata -palliate -palliated -palliates -palliating -palliation -palliations -palliative -palliatively -palliator -palliatory -pallid -pallid-faced -pallid-fuliginous -pallid-gray -pallidiflorous -pallidipalpate -palliditarsate -pallidity -pallidiventrate -pallidly -pallid-looking -pallidness -pallid-ochraceous -pallid-tomentose -pallier -pallies -palliest -Palliyan -palliness -palling -Pallini -pallio- -Palliobranchiata -palliobranchiate -palliocardiac -pallioessexite -pallion -palliopedal -palliostratus -palliser -pallium -palliums -pall-like -Pallmall -pall-mall -pallograph -pallographic -pallometric -pallone -pallor -pallors -palls -Pallu -Pallua -Palluites -pallwise -Palm -Palma -Palmaceae -palmaceous -palmad -Palmae -palmanesthesia -palmar -palmary -palmarian -palmaris -Palmas -palmate -palmated -palmately -palmati- -palmatifid -palmatiform -palmatilobate -palmatilobed -palmation -palmatiparted -palmatipartite -palmatisect -palmatisected -palmature -palm-bearing -palmchrist -Palmcoast -palmcrist -palm-crowned -Palmdale -Palmdesert -palmed -Palmella -Palmellaceae -palmellaceous -palmelloid -Palmer -Palmerdale -palmery -palmeries -palmerin -palmerite -palmers -Palmerston -Palmersville -Palmerton -palmerworm -palmer-worm -palmesthesia -palmette -palmettes -palmetto -palmettoes -palmettos -palmetum -palm-fringed -palmful -Palmgren -palmy -palmi- -palmic -palmicoleus -palmicolous -palmier -palmiest -palmiferous -palmification -palmiform -palmigrade -palmilla -palmillo -palmilobate -palmilobated -palmilobed -palmin -palminervate -palminerved -palming -palmiped -Palmipedes -palmipes -Palmira -Palmyra -palmyras -Palmyrene -Palmyrenian -Palmiro -palmist -palmiste -palmister -palmistry -palmistries -palmists -palmitate -palmite -palmitic -palmitin -palmitine -palmitinic -palmitins -palmito -palmitoleic -palmitone -palmitos -palmiveined -palmivorous -palmlike -palmo -palmodic -palm-oil -Palmolive -Palmore -palmoscopy -palmospasmus -palm-reading -palms -palm-shaded -palm-shaped -palm-thatched -palm-tree -palmula -palmus -palm-veined -palmwise -palmwood -Palo -Paloalto -Palocedro -Palocz -palolo -palolos -Paloma -Palomar -palombino -palometa -Palomino -palominos -palooka -palookas -Palopinto -Palos -palosapis -palour -Palouse -palouser -Paloverde -palp -palpability -palpable -palpableness -palpably -palpacle -palpal -palpate -palpated -palpates -palpating -palpation -palpations -palpator -palpatory -palpators -palpebra -palpebrae -palpebral -palpebrate -palpebration -palpebritis -palped -palpi -palpicorn -Palpicornia -palpifer -palpiferous -palpiform -palpiger -palpigerous -palpitant -palpitate -palpitated -palpitates -palpitating -palpitatingly -palpitation -palpitations -palpless -palpocil -palpon -palps -palpulus -palpus -Pals -pal's -palsgraf -palsgrave -palsgravine -palship -palships -palsy -palsied -palsies -palsify -palsification -palsying -palsylike -palsy-quaking -palsy-shaken -palsy-shaking -palsy-sick -palsy-stricken -palsy-struck -palsy-walsy -palsywort -palstaff -palstave -palster -palt -Palta -palter -paltered -palterer -palterers -paltering -palterly -palters -paltock -paltry -paltrier -paltriest -paltrily -paltriness -Palua -Paluas -paludal -paludament -paludamenta -paludamentum -palude -paludi- -paludial -paludian -paludic -Paludicella -Paludicolae -paludicole -paludicoline -paludicolous -paludiferous -Paludina -paludinal -paludine -paludinous -paludism -paludisms -paludose -paludous -paludrin -paludrine -palule -paluli -palulus -Palumbo -Palus -palustral -palustrian -palustrine -Paluxy -PAM -pam. -pamaceous -Pama-Nyungan -pamaquin -pamaquine -pambanmanche -PAMD -Pamela -Pamelina -Pamella -pament -pameroon -pamhy -Pamir -Pamiri -Pamirian -Pamirs -Pamlico -pamment -Pammi -Pammy -Pammie -Pampa -Pampanga -Pampangan -Pampango -pampanito -pampas -pampas-grass -pampean -pampeans -Pampeluna -pamper -pampered -pamperedly -pamperedness -pamperer -pamperers -pampering -pamperize -pampero -pamperos -pampers -pamphagous -pampharmacon -Pamphylia -Pamphiliidae -Pamphilius -pamphysic -pamphysical -pamphysicism -pamphlet -pamphletage -pamphletary -pamphleteer -pamphleteers -pamphleter -pamphletful -pamphletic -pamphletical -pamphletize -pamphletized -pamphletizing -pamphlets -pamphlet's -pamphletwise -pamphrey -pampilion -pampination -pampiniform -pampinocele -pamplegia -Pamplico -Pamplin -Pamplona -pampootee -pampootie -pampre -pamprodactyl -pamprodactylism -pamprodactylous -pampsychism -pampsychist -Pampuch -pams -Pamunkey -PAN -pan- -Pan. -Pana -panabase -Panaca -panace -Panacea -panacean -panaceas -panacea's -panaceist -panache -panached -panaches -panachure -panada -panadas -panade -panaesthesia -panaesthetic -Pan-African -Pan-Africanism -Pan-Africanist -Pan-afrikander -Pan-afrikanderdom -Panaggio -Panagia -panagiarion -Panagias -Panay -Panayan -Panayano -Panayiotis -Panak -Panaka -Panama -Panamaian -Panaman -Panamanian -panamanians -Panamano -panamas -Pan-america -Pan-American -Pan-Americanism -Panamic -Panamint -Panamist -Pan-anglican -panapospory -Pan-Arab -Pan-arabia -Pan-Arabic -Pan-Arabism -panarchy -panarchic -panary -panaris -panaritium -panarteritis -panarthritis -Pan-asianism -Pan-asiatic -Pan-asiaticism -panatela -panatelas -panatella -panatellas -Panathenaea -Panathenaean -Panathenaic -panatrope -panatrophy -panatrophic -panautomorphic -panax -panbabylonian -Pan-babylonian -panbabylonism -Pan-babylonism -Panboeotian -Pan-britannic -Pan-british -panbroil -pan-broil -pan-broiled -pan-broiling -Pan-buddhism -Pan-buddhist -pancake -pancaked -pancakes -pancake's -pancaking -pancarditis -Pan-celtic -Pan-celticism -Panchaia -Panchayat -panchayet -panchama -panchart -Panchatantra -panchax -panchaxes -pancheon -Pan-china -panchion -Panchito -Pancho -panchreston -Pan-christian -panchromatic -panchromatism -panchromatization -panchromatize -panchway -pancyclopedic -panclastic -panclastite -panconciliatory -pancosmic -pancosmism -pancosmist -pancratia -pancratian -pancratiast -pancratiastic -pancratic -pancratical -pancratically -pancration -Pancratis -pancratism -pancratist -pancratium -pancreas -pancreases -pancreat- -pancreatalgia -pancreatectomy -pancreatectomize -pancreatectomized -pancreatemphraxis -pancreathelcosis -pancreatic -pancreaticoduodenal -pancreaticoduodenostomy -pancreaticogastrostomy -pancreaticosplenic -pancreatin -pancreatism -pancreatitic -pancreatitis -pancreatization -pancreatize -pancreatoduodenectomy -pancreatoenterostomy -pancreatogenic -pancreatogenous -pancreatoid -pancreatolipase -pancreatolith -pancreatomy -pancreatoncus -pancreatopathy -pancreatorrhagia -pancreatotomy -pancreatotomies -pancreectomy -pancreozymin -Pan-croat -panctia -pand -panda -pandal -pandan -Pandanaceae -pandanaceous -Pandanales -pandani -Pandanus -pandanuses -pandar -pandaram -Pandarctos -Pandareus -pandaric -Pandarus -pandas -pandation -pandava -Pandavas -Pandean -pandect -Pandectist -pandects -pandemy -pandemia -pandemian -Pandemic -pandemicity -pandemics -pandemoniac -Pandemoniacal -Pandemonian -pandemonic -pandemonism -Pandemonium -pandemoniums -Pandemos -pandenominational -pander -panderage -pandered -panderer -panderers -panderess -pandering -panderism -panderize -panderly -Panderma -pandermite -panderous -panders -pandership -pandestruction -pandy -pandiabolism -pandybat -Pandich -pandiculation -pandied -pandies -pandying -Pandion -Pandionidae -Pandit -pandita -pandits -pandle -pandlewhew -Pandolfi -pandoor -pandoors -Pandora -pandoras -pandore -Pandorea -pandores -Pandoridae -Pandorina -Pandosto -pandour -pandoura -pandours -pandowdy -pandowdies -pandrop -Pandrosos -pandura -panduras -pandurate -pandurated -pandure -panduriform -pane -panecclesiastical -paned -panegyre -panegyry -panegyric -panegyrica -panegyrical -panegyrically -panegyricize -panegyricon -panegyrics -panegyricum -panegyris -panegyrist -panegyrists -panegyrize -panegyrized -panegyrizer -panegyrizes -panegyrizing -panegoism -panegoist -paneity -panel -panela -panelation -panelboard -paneled -paneler -paneless -paneling -panelings -panelist -panelists -panelist's -Panelyte -panellation -panelled -panelling -panellist -panels -panelwise -panelwork -panentheism -panes -pane's -panesthesia -panesthetic -panetela -panetelas -panetella -panetiere -panettone -panettones -panettoni -paneulogism -Pan-europe -Pan-european -panfil -pan-fired -panfish -panfishes -panfry -pan-fry -panfried -pan-fried -panfries -pan-frying -panful -panfuls -Pang -panga -Pangaea -pangamy -pangamic -pangamous -pangamously -pangane -pangara -Pangaro -pangas -pangasi -Pangasinan -Pangburn -panged -pangen -pangene -pangenes -pangenesis -pangenetic -pangenetically -pangenic -pangens -pangerang -Pan-German -Pan-germany -Pan-germanic -Pan-Germanism -Pan-germanist -Pang-fou -pangful -pangi -panging -pangyrical -Pangium -pangless -panglessly -panglima -Pangloss -Panglossian -Panglossic -pangolin -pangolins -Pan-gothic -pangrammatist -pangs -pang's -panguingue -panguingui -Panguitch -Pangwe -panhandle -panhandled -panhandler -panhandlers -panhandles -panhandling -panharmonic -panharmonicon -panhas -panhead -panheaded -pan-headed -Panhellenic -Panhellenios -Panhellenism -Panhellenist -Panhellenium -panhematopenia -panhidrosis -panhygrous -panhyperemia -panhypopituitarism -Pan-hispanic -Pan-hispanism -panhysterectomy -panhuman -Pani -panyar -Panic -panical -panically -panic-driven -panicful -panichthyophagous -panicked -panicky -panickier -panickiest -panickiness -panicking -panicle -panicled -panicles -paniclike -panicmonger -panicmongering -paniconograph -paniconography -paniconographic -panic-pale -panic-prone -panic-proof -panics -panic's -panic-stricken -panic-strike -panic-struck -panic-stunned -Panicularia -paniculate -paniculated -paniculately -paniculitis -Panicum -panicums -panidiomorphic -panidrosis -panier -paniers -panification -panime -panimmunity -Paninean -Panini -paniolo -panion -Panionia -Panionian -Panionic -Panipat -Paniquita -Paniquitan -panisc -panisca -paniscus -panisic -panisk -Pan-islam -Pan-islamic -Pan-islamism -Pan-islamist -Pan-israelitish -panivorous -Panjabi -panjandrum -panjandrums -Panjim -pank -Pankhurst -pankin -pankration -pan-Latin -Pan-latinist -pan-leaf -panleucopenia -panleukopenia -pan-loaf -panlogical -panlogism -panlogist -panlogistic -panlogistical -panlogistically -panman -panmelodicon -panmelodion -panmerism -panmeristic -panmyelophthisis -panmixes -panmixy -panmixia -panmixias -panmixis -panmnesia -Pan-mongolian -Pan-mongolism -Pan-moslemism -panmug -Panmunjom -Panmunjon -Panna -pannade -pannag -pannage -pannam -Pannamaria -pannationalism -panne -panned -pannel -pannellation -panner -pannery -pannes -panneuritic -panneuritis -pannicle -pannicular -panniculitis -panniculus -pannier -panniered -pannierman -panniers -pannikin -pannikins -panning -Pannini -Pannon -Pannonia -Pannonian -Pannonic -pannose -pannosely -pannum -pannus -pannuscorium -Panoan -panocha -panochas -panoche -panoches -panococo -Panofsky -panoistic -Panola -panomphaean -Panomphaeus -panomphaic -panomphean -panomphic -Panopeus -panophobia -panophthalmia -panophthalmitis -panoply -panoplied -panoplies -panoplying -panoplist -Panoptes -panoptic -panoptical -panopticon -Panora -panoram -panorama -panoramas -panoramic -panoramical -panoramically -panoramist -panornithic -Panorpa -Panorpatae -panorpian -panorpid -Panorpidae -Pan-orthodox -Pan-orthodoxy -panos -panosteitis -panostitis -panotype -panotitis -panouchi -panowie -Pan-pacific -panpathy -panpharmacon -panphenomenalism -panphobia -Panpipe -pan-pipe -panpipes -panplegia -panpneumatism -panpolism -Pan-presbyterian -Pan-protestant -Pan-prussianism -panpsychic -panpsychism -panpsychist -panpsychistic -Pan-russian -PANS -pan's -Pan-satanism -pan-Saxon -Pan-scandinavian -panscientist -pansciolism -pansciolist -Pan-sclavic -Pan-sclavism -Pan-sclavist -Pan-sclavonian -pansclerosis -pansclerotic -panse -Pansey -Pan-serb -pansexism -pansexual -pansexualism -pan-sexualism -pansexualist -pansexuality -pansexualize -pan-shaped -panshard -Pansy -pansy-colored -panside -pansideman -Pansie -pansied -pansiere -pansies -pansified -pansy-growing -pansy-yellow -pansyish -Pansil -pansylike -pansinuitis -pansinusitis -pansy-purple -Pansir -Pan-syrian -pansy's -pansit -pansy-violet -Pan-Slav -Pan-Slavic -Pan-Slavism -Pan-slavist -Pan-slavistic -Pan-slavonian -Pan-slavonic -Pan-slavonism -pansmith -pansophy -pansophic -pansophical -pansophically -pansophies -pansophism -pansophist -panspermatism -panspermatist -panspermy -panspermia -panspermic -panspermism -panspermist -pansphygmograph -panstereorama -pant -pant- -Panta -panta- -pantachromatic -pantacosm -pantagamy -pantagogue -pantagraph -pantagraphic -pantagraphical -Pantagruel -Pantagruelian -Pantagruelic -Pantagruelically -Pantagrueline -pantagruelion -Pantagruelism -Pantagruelist -Pantagruelistic -Pantagruelistical -Pantagruelize -pantalan -pantaleon -pantalet -pantaletless -pantalets -pantalette -pantaletted -pantalettes -pantalgia -pantalon -Pantalone -Pantaloon -pantalooned -pantaloonery -pantaloons -pantameter -pantamorph -pantamorphia -pantamorphic -pantanemone -pantanencephalia -pantanencephalic -pantaphobia -pantarbe -pantarchy -pantas -pantascope -pantascopic -Pantastomatida -Pantastomina -pantatype -pantatrophy -pantatrophia -pantdress -pantechnic -pantechnicon -panted -Pantego -pantelegraph -pantelegraphy -panteleologism -pantelephone -pantelephonic -pantelis -Pantelleria -pantellerite -Panter -panterer -Pan-Teutonism -Panthea -Pantheas -Pantheian -pantheic -pantheism -pantheist -pantheistic -pantheistical -pantheistically -pantheists -panthelematism -panthelism -pantheology -pantheologist -Pantheon -pantheonic -pantheonization -pantheonize -pantheons -Panther -pantheress -pantherine -pantherish -pantherlike -panthers -panther's -pantherwood -pantheum -Panthia -Panthous -panty -Pantia -pantie -panties -pantihose -pantyhose -panty-hose -pantile -pantiled -pantiles -pantiling -Pantin -pantine -panting -pantingly -pantisocracy -pantisocrat -pantisocratic -pantisocratical -pantisocratist -pantywaist -pantywaists -pantle -pantler -panto -panto- -Pantocain -pantochrome -pantochromic -pantochromism -pantochronometer -Pantocrator -pantod -Pantodon -Pantodontidae -pantoffle -pantofle -pantofles -pantoganglitis -pantogelastic -pantoglossical -pantoglot -pantoglottism -pantograph -pantographer -pantography -pantographic -pantographical -pantographically -pantoiatrical -pantology -pantologic -pantological -pantologist -pantomancer -pantomania -pantometer -pantometry -pantometric -pantometrical -pantomime -pantomimed -pantomimes -pantomimic -pantomimical -pantomimically -pantomimicry -pantomiming -pantomimish -pantomimist -pantomimists -pantomimus -pantomnesia -pantomnesic -pantomorph -pantomorphia -pantomorphic -panton -pantonal -pantonality -pantoon -pantopelagian -pantophagy -pantophagic -pantophagist -pantophagous -pantophile -pantophobia -pantophobic -pantophobous -pantoplethora -pantopod -Pantopoda -pantopragmatic -pantopterous -pantos -pantoscope -pantoscopic -pantosophy -Pantostomata -pantostomate -pantostomatous -pantostome -pantotactic -pantothen -pantothenate -pantothenic -pantothere -Pantotheria -pantotherian -pantotype -pantoum -pantoums -pantry -pantries -pantryman -pantrymen -pantry's -pantrywoman -pantropic -pantropical -pantropically -pants -pantsuit -pantsuits -pantun -Pan-turanian -Pan-turanianism -Pan-turanism -panuelo -panuelos -panung -panure -Panurge -panurgy -panurgic -panus -Panza -panzer -Panzerfaust -panzers -panzoism -panzooty -panzootia -panzootic -PAO -Paola -Paoli -Paolina -Paolo -paon -Paonia -paopao -Paoshan -Paoting -Paotow -PAP -papa -papability -papable -papabot -papabote -papacy -papacies -Papadopoulos -papagay -Papagayo -papagallo -Papagena -Papageno -Papago -papaya -Papayaceae -papayaceous -papayan -papayas -Papaikou -papain -papains -papaio -papayotin -papal -papalise -papalism -papalist -papalistic -papality -papalization -papalize -papalizer -papally -papaloi -papalty -Papandreou -papane -papaphobia -papaphobist -papaprelatical -papaprelatist -paparazzi -paparazzo -paparchy -paparchical -papas -papaship -Papaver -Papaveraceae -papaveraceous -Papaverales -papaverin -papaverine -papaverous -papaw -papaws -papboat -Pape -Papeete -papegay -papey -papelera -papeleras -papelon -papelonne -Papen -paper -paperasserie -paperback -paper-backed -paperbacks -paperback's -paper-baling -paperbark -paperboard -paperboards -paperboy -paperboys -paperbound -paper-bound -paper-capped -paper-chasing -paperclip -paper-clothed -paper-coated -paper-coating -paper-collared -paper-covered -paper-cutter -papercutting -paper-cutting -paper-drilling -papered -paper-embossing -paperer -paperers -paper-faced -paper-filled -paper-folding -paper-footed -paperful -papergirl -paperhanger -paperhangers -paperhanging -paperhangings -paper-hangings -papery -paperiness -papering -paperings -papery-skinned -paperknife -paperknives -paperlike -paper-lined -papermaker -papermaking -paper-mended -papermouth -papern -paper-palisaded -paper-paneled -paper-patched -papers -paper's -paper-saving -paper-selling -papershell -paper-shell -paper-shelled -paper-shuttered -paper-slitting -paper-sparing -paper-stainer -paper-stamping -Papert -paper-testing -paper-thick -paper-thin -paper-using -paper-varnishing -paper-waxing -paperweight -paperweights -paper-white -paper-whiteness -paper-windowed -paperwork -papess -papeterie -Paphian -paphians -Paphiopedilum -Paphlagonia -Paphos -Paphus -Papiamento -Papias -papicolar -papicolist -papier -papier-mache -papier-mch -Papilio -Papilionaceae -papilionaceous -Papiliones -papilionid -Papilionidae -Papilionides -Papilioninae -papilionine -papilionoid -Papilionoidea -papilla -papillae -papillar -papillary -papillate -papillated -papillectomy -papilledema -papilliferous -papilliform -papillitis -papilloadenocystoma -papillocarcinoma -papilloedema -papilloma -papillomas -papillomata -papillomatosis -papillomatous -papillon -papillons -papilloretinitis -papillosarcoma -papillose -papillosity -papillote -papillous -papillulate -papillule -Papinachois -Papineau -papingo -Papinian -Papio -papion -papiopio -papyr -papyraceous -papyral -papyrean -papyri -papyrian -papyrin -papyrine -papyritious -papyro- -papyrocracy -papyrograph -papyrographer -papyrography -papyrographic -papyrology -papyrological -papyrologist -papyrophobia -papyroplastics -papyrotamia -papyrotint -papyrotype -papyrus -papyruses -papish -papisher -papism -Papist -papistic -papistical -papistically -papistly -papistlike -papistry -papistries -papists -papize -Papke -papless -paplike -papmeat -papolater -papolatry -papolatrous -papoose -papooseroot -papoose-root -papooses -papoosh -Papotto -papoula -papovavirus -Papp -pappain -Pappano -Pappas -Pappea -pappenheimer -pappescent -pappi -pappy -pappier -pappies -pappiest -pappiferous -pappiform -pappyri -pappoose -pappooses -pappose -pappous -pappox -pappus -papreg -paprica -papricas -paprika -paprikas -papriks -paps -Papst -Papsukai -Papua -Papuan -papuans -papula -papulae -papulan -papular -papulate -papulated -papulation -papule -papules -papuliferous -papulo- -papuloerythematous -papulopustular -papulopustule -papulose -papulosquamous -papulous -papulovesicular -Paque -paquet -Paquito -PAR -par- -par. -para -para- -para-agglutinin -paraaminobenzoic -para-aminophenol -para-analgesia -para-anesthesia -para-appendicitis -parabanate -parabanic -parabaptism -parabaptization -parabasal -parabases -parabasic -parabasis -parabema -parabemata -parabematic -parabenzoquinone -parabien -parabiosis -parabiotic -parabiotically -parablast -parablastic -parable -parabled -parablepsy -parablepsia -parablepsis -parableptic -parables -parabling -parabola -parabolanus -parabolas -parabole -parabolic -parabolical -parabolicalism -parabolically -parabolicness -paraboliform -parabolise -parabolised -parabolising -parabolist -parabolization -parabolize -parabolized -parabolizer -parabolizing -paraboloid -paraboloidal -parabomb -parabotulism -parabrake -parabranchia -parabranchial -parabranchiate -parabulia -parabulic -paracanthosis -paracarmine -paracasein -paracaseinate -Paracelsian -Paracelsianism -Paracelsic -Paracelsist -Paracelsistic -Paracelsus -paracenteses -paracentesis -paracentral -paracentric -paracentrical -paracephalus -paracerebellar -paracetaldehyde -paracetamol -parachaplain -paracholia -parachor -parachordal -parachors -parachrea -parachroia -parachroma -parachromatism -parachromatophorous -parachromatopsia -parachromatosis -parachrome -parachromoparous -parachromophoric -parachromophorous -parachronism -parachronistic -parachrose -parachute -parachuted -parachuter -parachutes -parachute's -parachutic -parachuting -parachutism -parachutist -parachutists -paracyanogen -paracyeses -paracyesis -paracymene -para-cymene -paracystic -paracystitis -paracystium -paracium -Paraclete -paracmasis -paracme -paracoele -paracoelian -paracolitis -paracolon -paracolpitis -paracolpium -paracondyloid -paracone -paraconic -paraconid -paraconscious -paracorolla -paracotoin -paracoumaric -paracresol -Paracress -paracrostic -paracusia -paracusic -paracusis -parada -parade -paraded -paradeful -paradeless -paradelike -paradenitis -paradental -paradentitis -paradentium -parader -paraderm -paraders -parades -paradiastole -paradiazine -paradichlorbenzene -paradichlorbenzol -paradichlorobenzene -paradichlorobenzol -paradiddle -paradidym -paradidymal -paradidymis -Paradies -paradigm -paradigmatic -paradigmatical -paradigmatically -paradigmatize -paradigms -paradigm's -parading -paradingly -paradiplomatic -Paradis -paradisaic -paradisaical -paradisaically -paradisal -paradisally -Paradise -Paradisea -paradisean -Paradiseidae -Paradiseinae -paradises -Paradisia -paradisiac -paradisiacal -paradisiacally -paradisial -paradisian -paradisic -paradisical -Paradiso -parado -paradoctor -parador -paradors -parados -paradoses -paradox -paradoxal -paradoxer -paradoxes -paradoxy -paradoxial -paradoxic -paradoxical -paradoxicalism -paradoxicality -paradoxically -paradoxicalness -paradoxician -Paradoxides -paradoxidian -paradoxism -paradoxist -paradoxographer -paradoxographical -paradoxology -paradox's -paradoxure -Paradoxurinae -paradoxurine -Paradoxurus -paradromic -paradrop -paradropped -paradropping -paradrops -Paraebius -paraenesis -paraenesize -paraenetic -paraenetical -paraengineer -paraesthesia -paraesthetic -paraffin -paraffin-base -paraffine -paraffined -paraffiner -paraffiny -paraffinic -paraffining -paraffinize -paraffinized -paraffinizing -paraffinoid -paraffins -paraffle -parafle -parafloccular -paraflocculus -parafoil -paraform -paraformaldehyde -paraforms -parafunction -paragammacism -paraganglion -paragaster -paragastral -paragastric -paragastrula -paragastrular -parage -paragenesia -paragenesis -paragenetic -paragenetically -paragenic -paragerontic -parageusia -parageusic -parageusis -paragglutination -paraglenal -paraglycogen -paraglider -paraglobin -paraglobulin -paraglossa -paraglossae -paraglossal -paraglossate -paraglossia -paragnath -paragnathism -paragnathous -paragnaths -paragnathus -paragneiss -paragnosia -paragoge -paragoges -paragogic -paragogical -paragogically -paragogize -paragon -Paragonah -paragoned -paragonimiasis -Paragonimus -paragoning -paragonite -paragonitic -paragonless -paragons -paragon's -Paragould -paragram -paragrammatist -paragraph -paragraphed -paragrapher -paragraphia -paragraphic -paragraphical -paragraphically -paragraphing -paragraphism -paragraphist -paragraphistical -paragraphize -paragraphs -Paraguay -Paraguayan -paraguayans -parah -paraheliotropic -paraheliotropism -parahematin -parahemoglobin -parahepatic -parahydrogen -parahypnosis -Parahippus -parahopeite -parahormone -Paraiba -Paraiyan -paraison -parakeet -parakeets -parakeratosis -parakilya -parakinesia -parakinesis -parakinetic -parakite -paralactate -paralalia -paralambdacism -paralambdacismus -paralanguage -paralaurionite -paraldehyde -parale -paralectotype -paralegal -paraleipsis -paralepsis -paralexia -paralexic -paralgesia -paralgesic -paralian -paralimnion -paralinguistic -paralinguistics -paralinin -paralipomena -Paralipomenon -Paralipomenona -paralipses -paralipsis -paralysation -paralyse -paralysed -paralyser -paralyses -paralysing -paralysis -paralytic -paralytica -paralitical -paralytical -paralytically -paralyzant -paralyzation -paralyze -paralyzed -paralyzedly -paralyzer -paralyzers -paralyzes -paralyzing -paralyzingly -parallactic -parallactical -parallactically -parallax -parallaxes -parallel -parallelable -paralleled -parallelepiped -parallelepipedal -parallelepipedic -parallelepipedon -parallelepipedonal -parallelepipedous -paralleler -parallelinervate -parallelinerved -parallelinervous -paralleling -parallelisation -parallelise -parallelised -parallelising -parallelism -parallelisms -parallelist -parallelistic -parallelith -parallelization -parallelize -parallelized -parallelizer -parallelizes -parallelizing -parallelled -parallelless -parallelly -parallelling -parallelodrome -parallelodromous -parallelogram -parallelogrammatic -parallelogrammatical -parallelogrammic -parallelogrammical -parallelograms -parallelogram's -parallelograph -parallelometer -parallelopiped -parallelopipedon -parallelotropic -parallelotropism -parallels -parallel-veined -parallelwise -parallepipedous -paralogy -paralogia -paralogic -paralogical -paralogician -paralogism -paralogist -paralogistic -paralogize -paralogized -paralogizing -paraluminite -param -paramagnet -paramagnetic -paramagnetically -paramagnetism -paramandelic -Paramaribo -paramarine -paramastigate -paramastitis -paramastoid -Paramatman -paramatta -paramecia -Paramecidae -Paramecium -parameciums -paramedian -paramedic -paramedical -paramedics -paramelaconite -paramenia -parament -paramenta -paraments -paramere -parameric -parameron -paramese -paramesial -parameter -parameterizable -parameterization -parameterizations -parameterization's -parameterize -parameterized -parameterizes -parameterizing -parameterless -parameters -parameter's -parametral -parametric -parametrical -parametrically -parametritic -parametritis -parametrium -parametrization -parametrize -parametrized -parametrizing -paramid -paramide -paramyelin -paramilitary -paramylum -paramimia -paramine -paramyoclonus -paramiographer -paramyosin -paramyosinogen -paramyotone -paramyotonia -paramita -paramitome -paramyxovirus -paramnesia -paramo -Paramoecium -paramorph -paramorphia -paramorphic -paramorphine -paramorphism -paramorphosis -paramorphous -paramos -Paramount -paramountcy -paramountly -paramountness -paramountship -paramour -paramours -Paramus -paramuthetic -Paran -Parana -Paranagua -paranasal -paranatellon -parandrus -paranema -paranematic -paranephric -paranephritic -paranephritis -paranephros -paranepionic -paranete -parang -parangi -parangs -paranymph -paranymphal -paranitraniline -para-nitrophenol -paranitrosophenol -paranja -paranoea -paranoeac -paranoeas -paranoia -paranoiac -paranoiacs -paranoias -paranoic -paranoid -paranoidal -paranoidism -paranoids -paranomia -paranormal -paranormality -paranormally -paranosic -paranotions -paranthelion -paranthracene -Paranthropus -paranuclear -paranucleate -paranuclei -paranucleic -paranuclein -paranucleinic -paranucleus -parao -paraoperation -Parapaguridae -paraparesis -paraparetic -parapathy -parapathia -parapdia -parapegm -parapegma -parapegmata -paraperiodic -parapet -parapetalous -parapeted -parapetless -parapets -parapet's -paraph -paraphasia -paraphasic -paraphed -paraphemia -paraphenetidine -para-phenetidine -paraphenylene -paraphenylenediamine -parapherna -paraphernal -paraphernalia -paraphernalian -paraphia -paraphilia -paraphiliac -paraphyllia -paraphyllium -paraphimosis -paraphing -paraphysate -paraphysical -paraphysiferous -paraphysis -paraphonia -paraphoniac -paraphonic -paraphototropism -paraphragm -paraphrasable -paraphrase -paraphrased -paraphraser -paraphrasers -paraphrases -paraphrasia -paraphrasian -paraphrasing -paraphrasis -paraphrasist -paraphrast -paraphraster -paraphrastic -paraphrastical -paraphrastically -paraphrenia -paraphrenic -paraphrenitis -paraphronesis -paraphrosyne -paraphs -paraplasis -paraplasm -paraplasmic -paraplastic -paraplastin -paraplectic -paraplegy -paraplegia -paraplegias -paraplegic -paraplegics -parapleuritis -parapleurum -parapod -parapodia -parapodial -parapodium -parapophysial -parapophysis -parapphyllia -parapraxia -parapraxis -paraproctitis -paraproctium -paraprofessional -paraprofessionals -paraprostatitis -paraprotein -parapsychical -parapsychism -parapsychology -parapsychological -parapsychologies -parapsychologist -parapsychologists -parapsychosis -Parapsida -parapsidal -parapsidan -parapsis -paraptera -parapteral -parapteron -parapterum -paraquadrate -Paraquat -paraquats -paraquet -paraquets -paraquinone -Pararctalia -Pararctalian -pararectal -pararek -parareka -para-rescue -pararhotacism -pararosaniline -pararosolic -pararthria -paras -parasaboteur -parasalpingitis -parasang -parasangs -parascene -parascenia -parascenium -parasceve -paraschematic -parasecretion -paraselenae -paraselene -paraselenic -parasemidin -parasemidine -parasexual -parasexuality -Parashah -Parashioth -Parashoth -parasigmatism -parasigmatismus -parasympathetic -parasympathomimetic -parasynapsis -parasynaptic -parasynaptist -parasyndesis -parasynesis -parasynetic -parasynovitis -parasynthesis -parasynthetic -parasyntheton -parasyphilis -parasyphilitic -parasyphilosis -parasystole -Parasita -parasital -parasitary -parasite -parasitelike -parasitemia -parasites -parasite's -parasithol -parasitic -Parasitica -parasitical -parasitically -parasiticalness -parasiticidal -parasiticide -parasiticidic -parasitics -parasiticus -Parasitidae -parasitism -parasitisms -parasitization -parasitize -parasitized -parasitizes -parasitizing -parasitogenic -parasitoid -parasitoidism -parasitoids -parasitology -parasitologic -parasitological -parasitologies -parasitologist -parasitophobia -parasitosis -parasitotrope -parasitotropy -parasitotropic -parasitotropism -paraskenion -para-ski -parasnia -parasol -parasoled -parasolette -parasols -parasol-shaped -paraspecific -parasphenoid -parasphenoidal -paraspy -paraspotter -parastades -parastas -parastatic -parastemon -parastemonal -parasternal -parasternum -parastichy -parastichies -parastyle -parasubphonate -parasubstituted -Parasuchia -parasuchian -paratactic -paratactical -paratactically -paratartaric -parataxic -parataxis -parate -paraterminal -Paratheria -paratherian -parathesis -parathetic -parathymic -parathion -parathyrin -parathyroid -parathyroidal -parathyroidectomy -parathyroidectomies -parathyroidectomize -parathyroidectomized -parathyroidectomizing -parathyroids -parathyroprival -parathyroprivia -parathyroprivic -parathormone -Para-thor-mone -paratype -paratyphlitis -paratyphoid -paratypic -paratypical -paratypically -paratitla -paratitles -paratitlon -paratoloid -paratoluic -paratoluidine -para-toluidine -paratomial -paratomium -paratonic -paratonically -paratonnerre -paratory -paratorium -paratracheal -paratragedia -paratragoedia -paratransversan -paratrichosis -paratrimma -paratriptic -paratroop -paratrooper -paratroopers -paratroops -paratrophy -paratrophic -paratuberculin -paratuberculosis -paratuberculous -paratungstate -paratungstic -paraunter -parava -paravaginitis -paravail -paravane -paravanes -paravant -paravauxite -paravent -paravertebral -paravesical -paravidya -parawing -paraxial -paraxially -paraxylene -paraxon -paraxonic -Parazoa -parazoan -parazonium -parbake -Parbate -Parber -parbleu -parboil -parboiled -parboiling -parboils -parbreak -parbuckle -parbuckled -parbuckling -PARC -Parca -Parcae -Parcel -parcel-blind -parcel-carrying -parcel-deaf -parcel-divine -parcel-drunk -parceled -parcel-gilder -parcel-gilding -parcel-gilt -Parcel-greek -parcel-guilty -parceling -parcellary -parcellate -Parcel-latin -parcellation -parcel-learned -parcelled -parcelling -parcellization -parcellize -parcel-mad -parcelment -parcel-packing -parcel-plate -parcel-popish -parcels -parcel-stupid -parcel-terrestrial -parcel-tying -parcelwise -parcenary -parcener -parceners -parcenership -parch -parchable -parched -parchedly -parchedness -Parcheesi -parchemin -parcher -parches -parchesi -parchy -parching -parchingly -parchisi -parchment -parchment-colored -parchment-covered -parchmenter -parchment-faced -parchmenty -parchmentize -parchmentized -parchmentizing -parchmentlike -parchment-maker -parchments -parchment-skinned -parchment-spread -parcidenta -parcidentate -parciloquy -parclose -Parcoal -parcook -pard -pardah -pardahs -pardal -pardale -pardalote -Pardanthus -pardao -pardaos -parde -parded -pardee -Pardeesville -Pardeeville -pardesi -Pardew -pardhan -pardi -pardy -pardie -pardieu -pardine -Pardner -pardners -pardnomastic -Pardo -Pardoes -pardon -pardonable -pardonableness -pardonably -pardoned -pardonee -pardoner -pardoners -pardoning -pardonless -pardonmonger -pardons -pards -Pardubice -Pare -parecy -parecious -pareciously -pareciousness -parecism -parecisms -pared -paregal -paregmenon -paregoric -paregorical -paregorics -Pareiasauri -Pareiasauria -pareiasaurian -Pareiasaurus -pareil -Pareioplitae -pareira -pareiras -pareja -parel -parelectronomy -parelectronomic -parella -parelle -parellic -paren -parencephalic -parencephalon -parenchym -parenchyma -parenchymal -parenchymatic -parenchymatitis -parenchymatous -parenchymatously -parenchyme -parenchymous -parenesis -parenesize -parenetic -parenetical -parennece -parennir -parens -Parent -parentage -parentages -parental -Parentalia -parentalism -parentality -parentally -parentate -parentation -parentdom -parented -parentela -parentele -parentelic -parenteral -parenterally -parentheses -parenthesis -parenthesize -parenthesized -parenthesizes -parenthesizing -parenthetic -parenthetical -parentheticality -parenthetically -parentheticalness -parenthood -parenthoods -parenticide -parenting -parent-in-law -parentis -parentless -parentlike -parents -parent's -parentship -Pareoean -parepididymal -parepididymis -parepigastric -parer -parerethesis -parerga -parergal -parergy -parergic -parergon -parers -pares -pareses -Paresh -paresis -paresthesia -paresthesis -paresthetic -parethmoid -paretic -paretically -paretics -Pareto -paretta -Parette -pareu -pareunia -pareus -pareve -parfait -parfaits -parfey -parfield -parfilage -Parfitt -parfleche -parflesh -parfleshes -parfocal -parfocality -parfocalize -parfum -parfumerie -parfumeur -parfumoir -pargana -pargasite -parge -pargeboard -parged -parges -parget -pargeted -pargeter -pargeting -pargets -pargetted -pargetting -pargyline -parging -pargings -pargo -pargos -Parhe -parhelia -parheliacal -parhelic -parhelion -parhelnm -parhypate -parhomology -parhomologous -pari -pari- -pariah -pariahdom -pariahism -pariahs -pariahship -parial -Parian -parians -Pariasauria -Pariasaurus -Paryavi -parica -Paricut -Paricutin -Paridae -paridigitate -paridrosis -paries -pariet -parietal -Parietales -parietals -parietary -Parietaria -parietes -parieto- -parietofrontal -parietojugal -parietomastoid -parieto-occipital -parietoquadrate -parietosphenoid -parietosphenoidal -parietosplanchnic -parietosquamosal -parietotemporal -parietovaginal -parietovisceral -parify -parigenin -pariglin -Parik -Parilia -Parilicium -parilla -parillin -parimutuel -pari-mutuel -parimutuels -Parinarium -parine -paring -parings -paryphodrome -paripinnate -Paris -parises -Parish -Parishad -parished -parishen -parishes -parishional -parishionally -parishionate -parishioner -parishioners -parishionership -parish-pump -parish-rigged -parish's -Parishville -parishwide -parisia -Parisian -Parisianism -Parisianization -Parisianize -Parisianly -parisians -parisienne -Parisii -parisyllabic -parisyllabical -parisis -parisite -parisology -parison -parisonic -paristhmic -paristhmion -Pariti -parity -parities -Paritium -paritor -parivincular -Parjanya -Park -parka -parkas -Parkdale -Parke -parked -parkee -Parker -Parkerford -parkers -Parkersburg -Parkesburg -Parkhall -parky -Parkin -parking -parkings -Parkinson -Parkinsonia -parkinsonian -Parkinsonism -parkish -parkland -parklands -parkleaves -parklike -Parkman -Parks -Parksley -Parkston -Parksville -Parkton -Parkville -parkway -parkways -parkward -Parl -Parl. -parlay -parlayed -parlayer -parlayers -parlaying -parlays -parlamento -parlance -parlances -parlando -parlante -parlatory -Parlatoria -parle -parled -Parley -parleyed -parleyer -parleyers -parleying -parleys -parleyvoo -parlement -parles -parlesie -parli -parly -parlia -Parliament -parliamental -parliamentary -Parliamentarian -parliamentarianism -parliamentarians -parliamentarily -parliamentariness -parliamentarism -parliamentarization -parliamentarize -parliamenteer -parliamenteering -parliamenter -parliaments -parliament's -Parlier -Parlin -parling -parlish -parlor -parlorish -parlormaid -parlors -parlor's -parlour -parlourish -parlours -parlous -parlously -parlousness -Parma -parmacety -parmack -parmak -Parmele -Parmelee -Parmelia -Parmeliaceae -parmeliaceous -parmelioid -Parmenidean -Parmenides -Parmentier -Parmentiera -Parmesan -Parmese -parmigiana -Parmigianino -Parmigiano -Parnahiba -Parnahyba -Parnaiba -Parnas -Parnassia -Parnassiaceae -parnassiaceous -Parnassian -Parnassianism -Parnassiinae -Parnassism -Parnassus -parnel -Parnell -Parnellism -Parnellite -Parnopius -parnorpine -paroarion -paroarium -paroccipital -paroch -parochial -parochialic -parochialis -parochialise -parochialised -parochialising -parochialism -parochialisms -parochialist -parochiality -parochialization -parochialize -parochially -parochialness -parochian -parochin -parochine -parochiner -parode -parodi -parody -parodiable -parodial -parodic -parodical -parodied -parodies -parodying -parodinia -parodyproof -parodist -parodistic -parodistically -parodists -parodize -parodoi -parodontia -parodontitia -parodontitis -parodontium -parodos -parodus -paroecy -paroecious -paroeciously -paroeciousness -paroecism -paroemia -paroemiac -paroemiographer -paroemiography -paroemiology -paroemiologist -paroicous -parol -parolable -parole -paroled -parolee -parolees -paroler -parolers -paroles -parolfactory -paroli -paroling -parolist -parols -paromoeon -paromologetic -paromology -paromologia -paromphalocele -paromphalocelic -Paron -paronychia -paronychial -paronychium -paronym -paronymy -paronymic -paronymization -paronymize -paronymous -paronyms -paronomasia -paronomasial -paronomasian -paronomasiastic -paronomastic -paronomastical -paronomastically -paroophoric -paroophoritis -paroophoron -paropsis -paroptesis -paroptic -paroquet -paroquets -parorchid -parorchis -parorexia -Paros -Parosela -parosmia -parosmic -parosteal -parosteitis -parosteosis -parostosis -parostotic -parostotis -Parotia -parotic -parotid -parotidean -parotidectomy -parotiditis -parotids -parotis -parotitic -parotitis -parotoid -parotoids -parous -Parousia -parousiamania -parovarian -parovariotomy -parovarium -Parowan -paroxazine -paroxysm -paroxysmal -paroxysmalist -paroxysmally -paroxysmic -paroxysmist -paroxysms -paroxytone -paroxytonic -paroxytonize -parpal -parpen -parpend -parquet -parquetage -parqueted -parqueting -parquetry -parquetries -parquets -Parr -Parra -parrah -parrakeet -parrakeets -parral -parrall -parrals -parramatta -parred -parrel -parrels -parrhesia -parrhesiastic -Parry -parriable -parricidal -parricidally -parricide -parricided -parricides -parricidial -parricidism -Parridae -parridge -parridges -Parrie -parried -parrier -parries -parrying -parring -Parrington -Parris -Parrisch -Parrish -parritch -parritches -Parryville -Parrnell -parrock -parroket -parrokets -parroque -parroquet -parrot -parrotbeak -parrot-beak -parrot-beaked -parrotbill -parrot-billed -parrot-coal -parroted -parroter -parroters -parrot-fashion -parrotfish -parrot-fish -parrotfishes -parrot-gray -parrothood -parroty -parroting -parrotism -parrotize -parrot-learned -parrotlet -parrotlike -parrot-mouthed -parrot-nosed -parrot-red -parrotry -parrots -parrot's-bill -parrot's-feather -Parrott -parrot-toed -Parrottsville -parrotwise -parrs -pars -parsable -Parsaye -parse -parsec -parsecs -parsed -Parsee -Parseeism -parser -parsers -parses -parsettensite -parseval -Parshall -Parshuram -Parsi -Parsic -Parsifal -Parsiism -parsimony -parsimonies -parsimonious -parsimoniously -parsimoniousness -parsing -parsings -Parsippany -Parsism -parsley -parsley-flavored -parsley-leaved -parsleylike -parsleys -parsleywort -parsnip -parsnips -parson -parsonage -parsonages -parsonarchy -parson-bird -parsondom -parsoned -parsonese -parsoness -parsonet -parsonhood -parsony -parsonic -parsonical -parsonically -parsoning -parsonish -parsonity -parsonize -parsonly -parsonlike -parsonolatry -parsonology -parsonry -Parsons -parson's -Parsonsburg -parsonship -Parsonsia -parsonsite -Parsva -part -part. -partable -partage -partakable -partake -partaken -partaker -partakers -partakes -partaking -Partan -partanfull -partanhanded -partans -part-created -part-done -parte -part-earned -parted -partedness -parten -parter -parterre -parterred -parterres -parters -partes -part-finished -part-heard -Parthen -Parthena -Parthenia -partheniad -Partheniae -parthenian -parthenic -Parthenium -Parthenius -parthenocarpelly -parthenocarpy -parthenocarpic -parthenocarpical -parthenocarpically -parthenocarpous -Parthenocissus -parthenogeneses -parthenogenesis -parthenogenetic -parthenogenetically -parthenogeny -parthenogenic -parthenogenitive -parthenogenous -parthenogone -parthenogonidium -Parthenolatry -parthenology -Parthenon -Parthenopaeus -parthenoparous -Parthenope -Parthenopean -parthenophobia -Parthenos -parthenosperm -parthenospore -Parthia -Parthian -Parthinia -par-three -parti -party -parti- -partial -partialed -partialise -partialised -partialising -partialism -partialist -partialistic -partiality -partialities -partialize -partially -partialness -partials -partiary -partibility -partible -particate -particeps -Particia -participability -participable -participance -participancy -participant -participantly -participants -participant's -participate -participated -participates -participating -participatingly -participation -participations -participative -participatively -participator -participatory -participators -participatress -participial -participiality -participialization -participialize -participially -participle -participles -particle -particlecelerator -particled -particles -particle's -parti-color -parti-colored -party-colored -parti-coloured -particular -particularisation -particularise -particularised -particulariser -particularising -particularism -particularist -particularistic -particularistically -particularity -particularities -particularization -particularize -particularized -particularizer -particularizes -particularizing -particularly -particularness -particulars -particulate -particule -parti-decorated -partie -partied -partier -partyer -partiers -partyers -parties -partigen -party-giving -partying -partyism -partyist -partykin -partile -partyless -partim -party-making -party-man -partimembered -partimen -partimento -partymonger -parti-mortgage -parti-named -parting -partings -partinium -party-political -partis -party's -partisan -partisanism -partisanize -partisanry -partisans -partisan's -partisanship -partisanships -partyship -party-spirited -parti-striped -partita -partitas -partite -partition -partitional -partitionary -partitioned -partitioner -partitioning -partitionist -partitionment -partitions -partitive -partitively -partitura -partiversal -partivity -party-wall -party-walled -partizan -partizans -partizanship -party-zealous -partley -partless -Partlet -partlets -partly -Partlow -partner -partnered -partnering -partnerless -partners -partnership -partnerships -parto -part-off -parton -partons -partook -part-opened -part-owner -Partridge -partridgeberry -partridge-berry -partridgeberries -partridgelike -partridges -partridge's -partridgewood -partridge-wood -partridging -parts -partschinite -part-score -part-song -part-time -part-timer -parture -parturiate -parturience -parturiency -parturient -parturifacient -parturition -parturitions -parturitive -partway -part-writing -Parukutu -parulis -parumbilical -parura -paruras -parure -parures -paruria -Parus -parvanimity -Parvati -parve -parvenu -parvenudom -parvenue -parvenuism -parvenus -parvi- -parvicellular -parviflorous -parvifoliate -parvifolious -parvipotent -parvirostrate -parvis -parviscient -parvise -parvises -parvitude -parvolin -parvoline -parvolins -parvule -parvuli -parvulus -Parzival -PAS -Pasadena -Pasadis -Pasahow -Pasay -pasan -pasang -Pasargadae -Pascagoula -Pascal -Pascale -pascals -Pascasia -Pasch -Pascha -paschal -paschalist -paschals -Paschaltide -Paschasia -pasch-egg -paschflower -paschite -Pascia -Pascin -Pasco -Pascoag -Pascoe -pascoite -Pascola -pascuage -Pascual -pascuous -Pas-de-Calais -pase -pasear -pasela -paseng -paseo -paseos -pases -pasewa -pasgarde -pash -pasha -pashadom -pashadoms -pashalic -pashalics -pashalik -pashaliks -pashas -pashaship -pashed -pashes -pashim -pashing -pashka -pashm -pashmina -Pasho -Pashto -pasi -Pasia -Pasigraphy -pasigraphic -pasigraphical -pasilaly -pasillo -Pasionaria -Pasiphae -pasis -Pasitelean -Pasithea -pask -Paske -Paskenta -Paski -pasmo -Paso -Pasol -Pasolini -Paspalum -Pasquale -Pasqualina -pasqueflower -pasque-flower -pasquil -pasquilant -pasquiler -pasquilic -pasquillant -pasquiller -pasquillic -pasquils -Pasquin -pasquinade -pasquinaded -pasquinader -pasquinades -pasquinading -Pasquinian -Pasquino -Pass -pass- -pass. -passable -passableness -passably -passacaglia -passacaglio -passade -passades -passado -passadoes -passados -Passadumkeag -passage -passageable -passage-boat -passaged -passage-free -passage-making -passager -passages -passage's -passageway -passageways -passage-work -passaggi -passaggio -Passagian -passaging -passagio -passay -Passaic -passalid -Passalidae -Passalus -Passamaquoddy -passament -passamezzo -passangrahan -passant -passaree -passata -passback -passband -passbands -pass-by -pass-bye -passbook -pass-book -passbooks -Passe -passed -passed-master -passee -passegarde -passel -passels -passemeasure -passement -passemented -passementerie -passementing -passemezzo -passen -passenger -passenger-mile -passenger-pigeon -passengers -passenger's -passe-partout -passe-partouts -passepied -Passer -passerby -passer-by -Passeres -passeriform -Passeriformes -Passerina -passerine -passerines -passers -passersby -passers-by -passes -passe-temps -passewa -passgang -pass-guard -Passy -passibility -passible -passibleness -Passiflora -Passifloraceae -passifloraceous -Passiflorales -passim -passymeasure -passy-measures -passimeter -passing -passingly -passingness -passing-note -passings -Passion -passional -passionary -passionaries -passionate -passionateless -passionately -passionateness -passionative -passionato -passion-blazing -passion-breathing -passion-colored -passion-distracted -passion-driven -passioned -passion-feeding -passion-filled -passionflower -passion-flower -passion-fraught -passion-frenzied -passionfruit -passionful -passionfully -passionfulness -passion-guided -Passionist -passion-kindled -passion-kindling -passion-led -passionless -passionlessly -passionlessness -passionlike -passionometer -passionproof -passion-proud -passion-ridden -passions -passion-shaken -passion-smitten -passion-stirred -passion-stung -passion-swayed -passion-thrilled -passion-thrilling -Passiontide -passion-torn -passion-tossed -passion-wasted -passion-winged -passionwise -passion-worn -passionwort -passir -passival -passivate -passivation -passive -passively -passive-minded -passiveness -passives -passivism -passivist -passivity -passivities -passkey -pass-key -passkeys -passless -passman -pass-man -passo -passometer -passout -pass-out -Passover -passoverish -passovers -passpenny -passport -passportless -passports -passport's -passsaging -passu -passulate -passulation -Passumpsic -passus -passuses -passway -passwoman -password -passwords -password's -passworts -Past -pasta -pastas -past-due -paste -pasteboard -pasteboardy -pasteboards -pasted -pastedness -pastedown -paste-egg -pastel -pastelist -pastelists -Pastelki -pastellist -pastellists -pastels -pastel-tinted -paster -pasterer -pastern -Pasternak -pasterned -pasterns -pasters -pastes -pasteup -paste-up -pasteups -Pasteur -Pasteurella -pasteurellae -pasteurellas -Pasteurelleae -pasteurellosis -Pasteurian -pasteurisation -pasteurise -pasteurised -pasteurising -pasteurism -pasteurization -pasteurizations -pasteurize -pasteurized -pasteurizer -pasteurizers -pasteurizes -pasteurizing -pasty -pasticcci -pasticci -pasticcio -pasticcios -pastiche -pastiches -pasticheur -pasticheurs -pasticheuse -pasticheuses -pastie -pastier -pasties -pastiest -pasty-faced -pasty-footed -pastil -pastile -pastiled -pastiling -pastille -pastilled -pastilles -pastilling -pastils -pastime -pastimer -pastimes -pastime's -pastina -Pastinaca -pastinas -pastiness -pasting -pastis -pastises -pastler -past-master -pastness -pastnesses -Pasto -pastophor -pastophorion -pastophorium -pastophorus -pastor -pastora -pastorage -pastoral -pastorale -pastoraled -pastorales -pastorali -pastoraling -pastoralisation -pastoralism -pastoralist -pastorality -pastoralization -pastoralize -pastoralized -pastoralizing -pastorally -pastoralness -pastorals -pastorate -pastorates -pastored -pastorela -pastor-elect -pastoress -pastorhood -pastoring -pastorised -pastorising -pastorita -pastorium -pastoriums -pastorize -pastorless -pastorly -pastorlike -pastorling -pastors -pastor's -pastorship -pastose -pastosity -pastour -pastourelle -pastrami -pastramis -pastry -pastrycook -pastries -pastryman -pastromi -pastromis -pasts -past's -pasturability -pasturable -pasturage -pastural -Pasture -pastured -pastureland -pastureless -pasturer -pasturers -pastures -pasture's -pasturewise -pasturing -pasul -PAT -pat. -pata -pataca -pat-a-cake -patacao -patacas -patache -pataco -patacoon -patagia -patagial -patagiate -patagium -Patagon -Patagones -Patagonia -Patagonian -pataka -patamar -patamars -patana -patand -patao -patapat -pataque -Pataria -Patarin -Patarine -Patarinism -patart -patas -patashte -Pataskala -patata -Patavian -patavinity -patball -patballer -patch -patchable -patchboard -patch-box -patchcock -patched -patcher -patchery -patcheries -patchers -patches -patchhead -patchy -patchier -patchiest -patchily -patchiness -patching -patchleaf -patchless -Patchogue -patchouli -patchouly -patchstand -patchwise -patchword -patchwork -patchworky -patchworks -patd -Pate -pated -patee -patefaction -patefy -patel -patella -patellae -patellar -patellaroid -patellas -patellate -Patellidae -patellidan -patelliform -patelline -patellofemoral -patelloid -patellula -patellulae -patellulate -Paten -patency -patencies -patener -patens -patent -patentability -patentable -patentably -patente -patented -patentee -patentees -patenter -patenters -patenting -patently -patentness -patentor -patentors -patents -Pater -patera -paterae -patercove -paterero -paterfamiliar -paterfamiliarly -paterfamilias -paterfamiliases -pateria -pateriform -paterissa -paternal -paternalism -paternalist -paternalistic -paternalistically -paternality -paternalize -paternally -paternalness -paternity -paternities -Paternoster -paternosterer -paternosters -Pateros -paters -Paterson -pates -patesi -patesiate -patetico -patgia -path -path- -Pathan -pathbreaker -Pathe -pathed -pathema -pathematic -pathematically -pathematology -pathenogenicity -pathetic -pathetical -pathetically -patheticalness -patheticate -patheticly -patheticness -pathetism -pathetist -pathetize -pathfarer -pathfind -pathfinder -pathfinders -pathfinding -pathy -pathic -pathicism -pathless -pathlessness -pathlet -pathment -pathname -pathnames -patho- -pathoanatomy -pathoanatomical -pathobiology -pathobiological -pathobiologist -pathochemistry -pathocure -pathodontia -pathoformic -pathogen -pathogene -pathogeneses -pathogenesy -pathogenesis -pathogenetic -pathogeny -pathogenic -pathogenically -pathogenicity -pathogenous -pathogens -pathogerm -pathogermic -pathognomy -pathognomic -pathognomical -pathognomonic -pathognomonical -pathognomonically -pathognostic -pathography -pathographic -pathographical -pathol -pathol. -patholysis -patholytic -pathology -pathologic -pathological -pathologically -pathologicoanatomic -pathologicoanatomical -pathologicoclinical -pathologicohistological -pathologicopsychological -pathologies -pathologist -pathologists -pathomania -pathometabolism -pathometer -pathomimesis -pathomimicry -pathomorphology -pathomorphologic -pathomorphological -pathoneurosis -pathonomy -pathonomia -pathophysiology -pathophysiologic -pathophysiological -pathophobia -pathophoresis -pathophoric -pathophorous -pathoplastic -pathoplastically -pathopoeia -pathopoiesis -pathopoietic -pathopsychology -pathopsychosis -pathoradiography -pathos -pathoses -pathosis -pathosocial -Pathrusim -paths -Pathsounder -pathway -pathwayed -pathways -pathway's -paty -patia -Patiala -patible -patibulary -patibulate -patibulated -Patience -patience-dock -patiences -patiency -patient -patienter -patientest -patientless -patiently -patientness -patients -Patillas -Patin -patina -patinae -patinaed -patinas -patinate -patinated -patination -patine -patined -patines -patining -patinize -patinized -patinous -patins -patio -patios -patise -patisserie -patisseries -patissier -patly -Patman -Patmian -Patmo -Patmore -Patmos -Patna -patness -patnesses -patnidar -Patnode -pato -patois -Patoka -patola -Paton -patonce -pat-pat -patr- -Patrai -Patras -Patrecia -patresfamilias -patri- -patria -patriae -patrial -patriarch -patriarchal -patriarchalism -patriarchally -patriarchate -patriarchates -patriarchdom -patriarched -patriarchess -patriarchy -patriarchic -patriarchical -patriarchically -patriarchies -patriarchism -patriarchist -patriarchs -patriarchship -Patric -Patrica -Patrice -patrices -Patrich -Patricia -Patrician -patricianhood -patricianism -patricianly -patricians -patrician's -patricianship -patriciate -patricidal -patricide -patricides -Patricio -Patrick -Patricksburg -patriclan -patriclinous -patrico -patridge -patrilateral -patrilineage -patrilineal -patrilineally -patrilinear -patrilinearly -patriliny -patrilinies -patrilocal -patrilocality -patrimony -patrimonial -patrimonially -patrimonies -patrimonium -patrin -Patriofelis -patriolatry -patriot -patrioteer -patriotess -patriotic -patriotical -patriotically -patriotics -patriotism -patriotisms -patriotly -patriots -patriot's -patriotship -Patripassian -Patripassianism -Patripassianist -Patripassianly -patripotestal -patrisib -patrist -patristic -patristical -patristically -patristicalness -patristicism -patristics -patrix -patrixes -patrizate -patrization -Patrizia -Patrizio -Patrizius -patrocinate -patrocinium -patrocliny -patroclinic -patroclinous -Patroclus -patrogenesis -patroiophobia -patrol -patrole -patrolled -patroller -patrollers -patrolling -patrollotism -patrolman -patrolmen -patrology -patrologic -patrological -patrologies -patrologist -patrols -patrol's -patrolwoman -patrolwomen -patron -patronage -patronages -patronal -patronate -patrondom -patroness -patronesses -patronessship -patronym -patronymy -patronymic -patronymically -patronymics -patronisable -patronise -patronised -patroniser -patronising -patronisingly -patronite -patronizable -patronization -patronize -patronized -patronizer -patronizers -patronizes -patronizing -patronizingly -patronless -patronly -patronne -patronomatology -patrons -patron's -patronship -patroon -patroonry -patroons -patroonship -patroullart -patruity -pats -Patsy -patsies -Patsis -Patt -patta -pattable -pattamar -pattamars -Pattani -pattara -patte -patted -pattee -Patten -pattened -pattener -pattens -patter -pattered -patterer -patterers -pattering -patterings -patterist -Patterman -pattern -patternable -pattern-bomb -patterned -patterner -patterny -patterning -patternize -patternless -patternlike -patternmaker -patternmaking -patterns -patternwise -patters -Patterson -Pattersonville -Patti -Patty -patty-cake -pattidari -Pattie -patties -Pattin -patting -pattinsonize -pattypan -pattypans -patty's -patty-shell -Pattison -pattle -Patton -Pattonsburg -Pattonville -pattoo -pattu -patu -patuca -patulent -patulin -patulous -patulously -patulousness -Patuxent -patwari -Patwin -patzer -patzers -PAU -paua -paucal -pauci- -pauciarticulate -pauciarticulated -paucidentate -paucify -pauciflorous -paucifoliate -paucifolious -paucijugate -paucilocular -pauciloquent -pauciloquently -pauciloquy -paucinervate -paucipinnate -pauciplicate -pauciradiate -pauciradiated -paucispiral -paucispirated -paucity -paucities -paucitypause -Paucker -Paugh -paughty -Pauiie -pauky -paukpan -Paul -Paula -paular -Paulden -Paulding -pauldron -pauldrons -Paule -Pauletta -Paulette -Pauli -Pauly -Pauliad -Paulian -Paulianist -Pauliccian -paulician -Paulicianism -Paulie -paulin -Paulina -Pauline -Pauling -Paulinia -Paulinian -Paulinism -Paulinist -Paulinistic -Paulinistically -Paulinity -Paulinize -paulins -Paulinus -Paulism -Paulist -Paulista -Paulita -Paulite -Paull -Paullina -Paulo -paulopast -paulopost -paulo-post-future -paulospore -Paulownia -Paul-Pry -Paulsboro -Paulsen -Paulson -Paulus -Paumari -Paumgartner -paunch -paunche -paunched -paunches -paunchful -paunchy -paunchier -paunchiest -paunchily -paunchiness -paup -Paupack -pauper -pauperage -pauperate -pauper-born -pauper-bred -pauper-breeding -pauperdom -paupered -pauperess -pauper-fed -pauper-feeding -paupering -pauperis -pauperisation -pauperise -pauperised -pauperiser -pauperising -pauperism -pauperisms -pauperitic -pauperization -pauperize -pauperized -pauperizer -pauperizes -pauperizing -pauper-making -paupers -Paur -pauraque -Paurometabola -paurometaboly -paurometabolic -paurometabolism -paurometabolous -pauropod -Pauropoda -pauropodous -pausably -pausai -pausal -pausalion -Pausanias -pausation -pause -paused -pauseful -pausefully -pauseless -pauselessly -pausement -pauser -pausers -pauses -pausing -pausingly -paussid -Paussidae -paut -Pauwles -pauxi -pav -pavade -pavage -pavan -pavane -pavanes -pavanne -pavans -pave -paved -paveed -Pavel -pavement -pavemental -pavements -pavement's -paven -Paver -pavers -paves -Pavese -pavestone -Pavetta -pavy -Pavia -pavid -pavidity -Pavier -Pavyer -pavies -pavilion -pavilioned -pavilioning -pavilions -pavilion's -Pavillion -pavillon -pavin -paving -pavings -pavins -Pavior -paviors -Paviotso -Paviotsos -Paviour -paviours -pavis -pavisade -pavisado -pavise -paviser -pavisers -pavises -pavisor -pavisse -Pavkovic -Pavla -Pavlish -Pavlodar -Pavlov -Pavlova -pavlovian -Pavo -pavois -pavonated -pavonazzetto -pavonazzo -Pavoncella -pavone -Pavonia -pavonian -pavonine -Pavonis -pavonize -paw -pawaw -Pawcatuck -pawdite -pawed -pawed-over -pawer -pawers -Pawhuska -pawing -pawk -pawkery -pawky -pawkier -pawkiest -pawkily -pawkiness -pawkrie -pawl -Pawlet -Pawling -pawls -pawmark -pawn -pawnable -pawnage -pawnages -pawnbroker -pawnbrokerage -pawnbrokeress -pawnbrokery -pawnbrokering -pawnbrokers -pawnbroking -pawned -Pawnee -Pawneerock -pawnees -pawner -pawners -pawnie -pawning -pawnor -pawnors -pawns -pawn's -pawnshop -pawnshops -Pawpaw -paw-paw -paw-pawness -pawpaws -paws -Pawsner -Pawtucket -PAX -paxes -Paxico -paxilla -paxillae -paxillar -paxillary -paxillate -paxilli -paxilliferous -paxilliform -Paxillosa -paxillose -paxillus -Paxinos -paxiuba -Paxon -Paxton -Paxtonville -paxwax -paxwaxes -Paz -Paza -pazaree -pazazz -pazazzes -Pazend -Pazia -Pazice -Pazit -PB -PBC -PBD -PBM -PBS -PBT -PBX -pbxes -PC -pc. -PCA -PCAT -PCB -PCC -PCDA -PCDOS -P-Celtic -PCF -PCH -PCI -PCIE -PCL -PCM -PCN -PCNFS -PCO -PCPC -PCS -PCSA -pct -pct. -PCTE -PCTS -PCTV -PD -pd. -PDAD -PDE -PDES -PDF -PDI -PDL -PDN -PDP -PDQ -PDS -PDSA -PDSP -PDT -PDU -PE -pea -peaberry -peabird -Peabody -peabrain -pea-brained -peabush -Peace -peace-abiding -peaceable -peaceableness -peaceably -peace-blessed -peacebreaker -peacebreaking -peace-breathing -peace-bringing -peaced -peace-enamored -peaceful -peacefuller -peacefullest -peacefully -peacefulness -peace-giving -peace-inspiring -peacekeeper -peacekeepers -peacekeeping -peacekeepings -peaceless -peacelessness -peacelike -peace-loving -peace-lulled -peacemake -peacemaker -peacemakers -peacemaking -peaceman -peacemonger -peacemongering -peacenik -peace-offering -peace-preaching -peace-procuring -peace-restoring -peaces -peacetime -peacetimes -peace-trained -peach -Peacham -peachberry -peachbloom -peachblossom -peach-blossom -peachblow -peach-blow -Peachbottom -peach-colored -peached -peachen -peacher -peachery -peachers -peaches -peachy -peachick -pea-chick -peachier -peachiest -peachify -peachy-keen -peachiness -peaching -Peachland -peach-leaved -peachlet -peachlike -peach's -Peachtree -peachwood -peachwort -peacing -peacoat -pea-coat -peacoats -Peacock -peacock-blue -peacocked -peacockery -peacock-feathered -peacock-fish -peacock-flower -peacock-herl -peacock-hued -peacocky -peacockier -peacockiest -peacocking -peacockish -peacockishly -peacockishness -peacockism -peacockly -peacocklike -peacocks -peacock's -peacock-spotted -peacock-voiced -peacockwise -peacod -pea-combed -Peadar -pea-flower -pea-flowered -peafowl -peafowls -peag -peage -peages -peagoose -peags -peahen -peahens -peai -peaiism -pea-jacket -peak -Peake -peaked -peakedly -peakedness -peaker -peakgoose -peaky -peakier -peakiest -peaky-faced -peakyish -peakily -peakiness -peaking -peakish -peakishly -peakishness -peakless -peaklike -peaks -peakward -peal -Peale -pealed -pealer -pealike -pealing -peals -peamouth -peamouths -pean -Peano -peans -peanut -peanuts -peanut's -Peapack -pea-picking -peapod -pear -Pearblossom -Pearce -pearceite -pearch -Pearcy -Peary -Pearisburg -Pearl -Pearla -Pearland -pearlash -pearl-ash -pearlashes -pearl-barley -pearl-bearing -pearlberry -pearl-besprinkled -pearlbird -pearl-bordered -pearlbush -pearl-bush -pearl-coated -pearl-colored -pearl-crowned -Pearle -pear-leaved -pearled -pearleye -pearleyed -pearl-eyed -pearleyes -pearl-encrusted -pearler -pearlers -pearlescence -pearlescent -pearlet -pearlfish -pearl-fishery -pearlfishes -pearlfruit -pearl-gemmed -pearl-gray -pearl-handled -pearl-headed -pearl-hued -pearly -pearlier -pearliest -pearl-yielding -pearlike -pearlin -Pearline -pearliness -pearling -pearlings -Pearlington -pearlish -pearlite -pearlites -pearlitic -pearly-white -pearlized -pearl-like -pearl-lined -pearl-lipped -Pearlman -pearloyster -pearl-oyster -pearl-pale -pearl-pure -pearl-round -pearls -pearl's -pearl-set -pearl-shell -pearlsides -pearlspar -Pearlstein -pearlstone -pearl-studded -pearl-teethed -pearl-toothed -pearlweed -pearl-white -pearlwort -pearl-wreathed -pearmain -pearmains -Pearman -pearmonger -Pears -Pearsall -Pearse -pear-shaped -Pearson -peart -pearten -pearter -peartest -peartly -peartness -pearwood -peas -pea's -peasant -peasant-born -peasantess -peasanthood -peasantism -peasantize -peasantly -peasantlike -peasantry -peasantries -peasants -peasant's -peasantship -peascod -peascods -Pease -peasecod -peasecods -peaselike -peasen -peases -peaseweep -pea-shoot -peashooter -peasy -pea-sized -peason -pea-soup -peasouper -pea-souper -pea-soupy -peastake -peastaking -Peaster -peastick -peasticking -peastone -peat -peatery -peathouse -peaty -peatier -peatiest -peatman -peatmen -pea-tree -Peatroy -peat-roofed -peats -peatship -peat-smoked -peatstack -peatweed -peatwood -peauder -peavey -peaveys -peavy -peavie -peavies -peavine -Peba -Peban -pebble -pebble-covered -pebbled -pebble-dashed -pebblehearted -pebble-paved -pebble-paven -pebbles -pebble's -pebble-shaped -pebblestone -pebble-stone -pebble-strewn -pebbleware -pebbly -pebblier -pebbliest -pebbling -pebrine -pebrinous -Pebrook -Pebworth -pecan -pecans -Pecatonica -PECC -peccability -peccable -peccadillo -peccadilloes -peccadillos -peccancy -peccancies -peccant -peccantly -peccantness -peccary -peccaries -peccation -peccatiphobia -peccatophobia -peccavi -peccavis -pech -pechay -pechan -pechans -peched -Pechenga -pechili -peching -pechys -Pechora -pechs -pecht -pecify -pecite -Peck -peckage -pecked -pecker -peckers -peckerwood -pecket -peckful -Peckham -peckhamite -pecky -peckier -peckiest -peckiness -pecking -Peckinpah -peckish -peckishly -peckishness -peckle -peckled -peckly -pecks -Pecksniff -Pecksniffery -Pecksniffian -Pecksniffianism -Pecksniffism -Peckville -Peconic -Pecopteris -pecopteroid -Pecora -Pecorino -Pecos -Pecs -pectase -pectases -pectate -pectates -pecten -pectens -pectic -pectin -Pectinacea -pectinacean -pectinaceous -pectinal -pectinase -pectinate -pectinated -pectinately -pectinatella -pectination -pectinatodenticulate -pectinatofimbricate -pectinatopinnate -pectineal -pectines -pectinesterase -pectineus -pectini- -pectinibranch -Pectinibranchia -pectinibranchian -Pectinibranchiata -pectinibranchiate -pectinic -pectinid -Pectinidae -pectiniferous -pectiniform -pectinirostrate -pectinite -pectinogen -pectinoid -pectinose -pectinous -pectins -pectizable -pectization -pectize -pectized -pectizes -pectizing -pectocellulose -pectolite -pectora -pectoral -pectorales -pectoralgia -pectoralis -pectoralist -pectorally -pectorals -pectoriloque -pectoriloquy -pectoriloquial -pectoriloquism -pectoriloquous -pectoris -pectosase -pectose -pectosic -pectosinase -pectous -pectron -pectunculate -Pectunculus -pectus -peculatation -peculatations -peculate -peculated -peculates -peculating -peculation -peculations -peculator -peculators -peculia -peculiar -peculiarise -peculiarised -peculiarising -peculiarism -peculiarity -peculiarities -peculiarity's -peculiarization -peculiarize -peculiarized -peculiarizing -peculiarly -peculiarness -peculiars -peculiarsome -peculium -pecunia -pecunial -pecuniary -pecuniarily -pecuniosity -pecunious -ped -ped- -ped. -peda -pedage -pedagese -pedagog -pedagogal -pedagogery -pedagogy -pedagogyaled -pedagogic -pedagogical -pedagogically -pedagogics -pedagogies -pedagogying -pedagogish -pedagogism -pedagogist -pedagogs -pedagogue -pedagoguery -pedagogues -pedagoguish -pedagoguism -Pedaiah -Pedaias -pedal -pedaled -pedaler -pedalfer -pedalferic -pedalfers -Pedaliaceae -pedaliaceous -pedalian -pedalier -pedaliers -pedaling -Pedalion -pedalism -pedalist -pedaliter -pedality -Pedalium -pedalled -pedaller -pedalling -pedalo -pedal-pushers -pedals -pedanalysis -pedant -pedante -pedantesque -pedantess -pedanthood -pedantic -pedantical -pedantically -pedanticalness -pedanticism -pedanticly -pedanticness -pedantics -pedantism -pedantize -pedantocracy -pedantocrat -pedantocratic -pedantry -pedantries -pedants -pedary -pedarian -Pedasus -Pedata -pedate -pedated -pedately -pedati- -pedatifid -pedatiform -pedatilobate -pedatilobed -pedatinerved -pedatipartite -pedatisect -pedatisected -pedatrophy -pedatrophia -PedD -Peddada -pedder -peddlar -peddle -peddled -peddler -peddleress -peddlery -peddleries -peddlerism -peddlers -peddler's -peddles -peddling -peddlingly -pede -pedee -pedelion -Peder -pederast -pederasty -pederastic -pederastically -pederasties -pederasts -pederero -Pedersen -Pederson -pedes -pedeses -pedesis -pedestal -pedestaled -pedestaling -pedestalled -pedestalling -pedestals -pedestrial -pedestrially -pedestrian -pedestrianate -pedestrianise -pedestrianised -pedestrianising -pedestrianism -pedestrianize -pedestrianized -pedestrianizing -pedestrians -pedestrian's -pedestrious -pedetentous -Pedetes -pedetic -Pedetidae -Pedetinae -Pedi -pedi- -pediad -pediadontia -pediadontic -pediadontist -pedial -pedialgia -Pediastrum -pediatry -pediatric -pediatrician -pediatricians -pediatrics -pediatrist -pedicab -pedicabs -pedicel -pediceled -pedicellar -pedicellaria -pedicellate -pedicellated -pedicellation -pedicelled -pedicelliform -Pedicellina -pedicellus -pedicels -pedicle -pedicled -pedicles -pedicular -Pedicularia -Pedicularis -pediculate -pediculated -Pediculati -pediculation -pedicule -Pediculi -pediculicidal -pediculicide -pediculid -Pediculidae -Pediculina -pediculine -pediculofrontal -pediculoid -pediculoparietal -pediculophobia -pediculosis -pediculous -Pediculus -pedicure -pedicured -pedicures -pedicuring -pedicurism -pedicurist -pedicurists -pediferous -pediform -pedigerous -pedigraic -pedigree -pedigreed -pedigreeless -pedigrees -pediluvium -Pedimana -pedimane -pedimanous -pediment -pedimental -pedimented -pediments -pedimentum -pediococci -pediococcocci -pediococcus -Pedioecetes -pedion -pedionomite -Pedionomus -pedipalp -pedipalpal -pedipalpate -Pedipalpi -Pedipalpida -pedipalpous -pedipalps -pedipalpus -pedipulate -pedipulation -pedipulator -PEDir -pediwak -pedlar -pedlary -pedlaries -pedlars -pedler -pedlery -pedleries -pedlers -pedo- -pedobaptism -pedobaptist -pedocal -pedocalcic -pedocalic -pedocals -pedodontia -pedodontic -pedodontist -pedodontology -pedogenesis -pedogenetic -pedogenic -pedograph -pedology -pedologic -pedological -pedologies -pedologist -pedologistical -pedologistically -pedomancy -pedomania -pedometer -pedometers -pedometric -pedometrical -pedometrically -pedometrician -pedometrist -pedomorphic -pedomorphism -pedomotive -pedomotor -pedophile -pedophilia -pedophiliac -pedophilic -pedophobia -pedosphere -pedospheric -pedotribe -pedotrophy -pedotrophic -pedotrophist -pedrail -pedregal -Pedrell -pedrero -Pedrick -Pedricktown -Pedro -pedros -Pedrotti -Pedroza -peds -pedule -pedum -peduncle -peduncled -peduncles -peduncular -Pedunculata -pedunculate -pedunculated -pedunculation -pedunculi -pedunculus -pee -peebeen -peebeens -Peebles -Peeblesshire -peed -Peedee -peeing -peek -peekaboo -peekaboos -peek-bo -peeke -peeked -peeking -peeks -Peekskill -Peel -peelable -peelcrow -Peele -peeled -peeledness -peeler -peelers -peelhouse -peelie-wally -peeling -peelings -Peelism -Peelite -Peell -peelman -peels -peen -Peene -peened -peenge -peening -peens -peen-to -peeoy -peep -peep-bo -peeped -pee-pee -peepeye -peeper -peepers -peephole -peep-hole -peepholes -peepy -peeping -peeps -peepshow -peep-show -peepshows -peepul -peepuls -Peer -peerage -peerages -Peerce -peerdom -peered -peeress -peeresses -peerhood -Peery -peerie -peeries -peering -peeringly -Peerless -peerlessly -peerlessness -peerly -peerling -Peers -peership -peert -pees -peesash -peeseweep -peesoreh -peesweep -peesweeps -peetweet -peetweets -Peetz -peeve -peeved -peevedly -peevedness -Peever -peevers -peeves -peeving -peevish -peevishly -peevishness -peevishnesses -peewee -peeweep -peewees -peewit -peewits -Peg -Pega -pegador -peg-a-lantern -pegall -pegamoid -peganite -Peganum -Pegasean -Pegasian -Pegasid -Pegasidae -pegasoid -Pegasus -pegboard -pegboards -pegbox -pegboxes -Pegeen -Pegg -pegged -pegger -Peggi -Peggy -Peggie -peggymast -pegging -Peggir -peggle -Peggs -pegh -peglegged -pegless -peglet -peglike -Pegma -pegman -pegmatite -pegmatitic -pegmatization -pegmatize -pegmatoid -pegmatophyre -pegmen -pegology -pegomancy -pegoxyl -Pegram -pegroots -pegs -peg's -peg-top -pegtops -Pegu -Peguan -pegwood -Peh -Pehlevi -peho -pehs -Pehuenche -PEI -Peiching -Pei-ching -Peyerian -peignoir -peignoirs -peiktha -pein -peine -peined -peining -peins -peyote -peyotes -peyotyl -peyotyls -peyotism -peyotl -peyotls -Peiping -Peipus -Peiraeus -Peiraievs -peirameter -peirastic -peirastically -Peirce -Peirsen -peisage -peisant -Peisch -peise -peised -Peisenor -peiser -peises -peising -Peisistratus -Peyter -Peitho -Peyton -Peytona -Peytonsburg -peytral -peytrals -peitrel -peytrel -peytrels -peixere -peixerey -peize -Pejepscot -pejerrey -pejorate -pejoration -pejorationist -pejorative -pejoratively -pejoratives -pejorism -pejorist -pejority -Pejsach -pekan -pekans -peke -pekes -Pekin -Pekinese -Peking -Pekingese -pekins -pekoe -pekoes -Pel -pelade -peladic -pelado -peladore -Pelag -Pelaga -Pelage -pelages -Pelagi -Pelagia -pelagial -Pelagian -Pelagianism -Pelagianize -Pelagianized -Pelagianizer -Pelagianizing -Pelagias -pelagic -Pelagius -Pelagon -Pelagothuria -pelagra -Pelahatchie -pelamyd -pelanos -Pelargi -pelargic -Pelargikon -pelargomorph -Pelargomorphae -pelargomorphic -pelargonate -pelargonic -pelargonidin -pelargonin -pelargonium -Pelasgi -Pelasgian -Pelasgic -Pelasgikon -Pelasgoi -Pelasgus -Pele -pelean -pelecan -Pelecani -Pelecanidae -Pelecaniformes -Pelecanoides -Pelecanoidinae -Pelecanus -Pelecyopoda -pelecypod -Pelecypoda -pelecypodous -pelecoid -Pelee -Pelegon -pelelith -peleliu -peleng -pelerin -pelerine -pelerines -peles -peletre -Peleus -Pelew -pelf -pelfs -Pelham -Pelias -pelican -pelicanry -pelicans -pelick -pelycogram -pelycography -pelycology -pelicometer -pelycometer -pelycometry -pelycosaur -Pelycosauria -pelycosaurian -Pelides -Pelidnota -pelikai -pelike -peliom -pelioma -Pelion -peliosis -pelisse -pelisses -pelite -pelites -pelitic -Pelkie -Pell -Pella -Pellaea -pellage -pellagra -pellagragenic -pellagras -pellagric -pellagrin -pellagroid -pellagrose -pellagrous -Pellan -pellar -pellard -pellas -pellate -pellation -Pelleas -Pellegrini -pellekar -peller -Pelles -Pellet -pelletal -pelleted -pellety -Pelletier -pelletierine -pelleting -pelletization -pelletize -pelletized -pelletizer -pelletizes -pelletizing -pelletlike -pellets -Pellian -pellicle -pellicles -pellicula -pellicular -pellicularia -pelliculate -pellicule -Pelligrini -Pellikka -pellile -pellitory -pellitories -pellmell -pell-mell -pellmells -pellock -pellotin -pellotine -Pellston -pellucent -pellucid -pellucidity -pellucidly -pellucidness -Pellville -Pelmanism -Pelmanist -Pelmanize -Pelmas -pelmata -pelmatic -pelmatogram -Pelmatozoa -pelmatozoan -pelmatozoic -pelmet -pelmets -pelo- -Pelobates -pelobatid -Pelobatidae -pelobatoid -Pelodytes -pelodytid -Pelodytidae -pelodytoid -peloid -Pelomedusa -pelomedusid -Pelomedusidae -pelomedusoid -Pelomyxa -pelon -Pelopaeus -Pelopea -Pelopi -Pelopia -Pelopid -Pelopidae -Peloponnese -Peloponnesian -Peloponnesos -Peloponnesus -Pelops -peloria -pelorian -pelorias -peloriate -peloric -pelorism -pelorization -pelorize -pelorized -pelorizing -pelorus -peloruses -pelota -Pelotas -pelotherapy -peloton -Pelpel -Pelson -Pelsor -pelt -pelta -peltae -Peltandra -peltast -peltasts -peltate -peltated -peltately -peltatifid -peltation -peltatodigitate -pelted -pelter -peltered -pelterer -pelters -pelti- -Peltier -peltiferous -peltifolious -peltiform -Peltigera -Peltigeraceae -peltigerine -peltigerous -peltinervate -peltinerved -pelting -peltingly -peltish -peltless -peltmonger -Peltogaster -peltry -peltries -pelts -Peltz -pelu -peludo -pelure -Pelusios -pelveoperitonitis -pelves -Pelvetia -pelvi- -pelvic -pelvics -pelviform -pelvigraph -pelvigraphy -pelvimeter -pelvimetry -pelvimetric -pelviolithotomy -pelvioperitonitis -pelvioplasty -pelvioradiography -pelvioscopy -pelviotomy -pelviperitonitis -pelvirectal -pelvis -pelvisacral -pelvises -pelvisternal -pelvisternum -Pelzer -PEM -Pemaquid -Pemba -Pember -Pemberton -Pemberville -Pembina -pembinas -Pembine -Pembroke -Pembrokeshire -Pembrook -pemican -pemicans -pemmican -pemmicanization -pemmicanize -pemmicans -pemoline -pemolines -pemphigoid -pemphigous -pemphigus -pemphix -pemphixes -PEN -pen- -Pen. -Pena -penacute -Penaea -Penaeaceae -penaeaceous -penal -penalisable -penalisation -penalise -penalised -penalises -penalising -penalist -penality -penalities -penalizable -penalization -penalize -penalized -penalizes -penalizing -penally -Penalosa -penalty -penalties -penalty's -penance -penanced -penanceless -penancer -penances -penancy -penancing -pen-and-ink -Penang -penang-lawyer -penangs -penannular -Penargyl -penaria -Penasco -Penates -penbard -pen-bearing -pen-cancel -pencatite -Pence -pencey -pencel -penceless -pencels -penchant -penchants -penche -Penchi -penchute -pencil -pencil-case -penciled -penciler -pencilers -pencil-formed -penciliform -penciling -pencilled -penciller -pencillike -pencilling -pencil-mark -pencilry -pencils -pencil-shaped -pencilwood -penclerk -pen-clerk -pencraft -pend -penda -pendaflex -pendant -pendanted -pendanting -pendantlike -pendants -pendant-shaped -pendant-winding -pendative -pendecagon -pended -pendeloque -pendency -pendencies -pendens -pendent -pendente -pendentive -pendently -pendents -Pender -Penderecki -Pendergast -Pendergrass -pendicle -pendicler -pending -pendle -Pendleton -pendn -pendom -Pendragon -pendragonish -pendragonship -pen-driver -Pendroy -pends -pendulant -pendular -pendulate -pendulating -pendulation -pendule -penduline -pendulosity -pendulous -pendulously -pendulousness -pendulum -pendulumlike -pendulums -pendulum's -pene- -penecontemporaneous -penectomy -peneid -Peneios -Penelopa -Penelope -Penelopean -Penelophon -Penelopinae -penelopine -peneplain -peneplains -peneplanation -peneplane -penes -peneseismic -penest -penetrability -penetrable -penetrableness -penetrably -penetral -penetralia -penetralian -penetrameter -penetrance -penetrancy -penetrant -penetrate -penetrated -penetrates -penetrating -penetratingly -penetratingness -penetration -penetrations -penetrative -penetratively -penetrativeness -penetrativity -penetrator -penetrators -penetrator's -penetrology -penetrolqgy -penetrometer -Peneus -pen-feather -pen-feathered -Penfield -penfieldite -pen-fish -penfold -penful -peng -Pengelly -Penghu -P'eng-hu -penghulu -Penghutao -Pengilly -pengo -pengos -Pengpu -penguin -penguinery -penguins -penguin's -pengun -Penh -Penhall -penhead -penholder -Penhook -penial -peniaphobia -penible -penicil -penicilium -penicillate -penicillated -penicillately -penicillation -penicillia -penicilliform -penicillin -penicillinic -penicillins -Penicillium -penicils -penide -penile -penillion -Peninsula -peninsular -peninsularism -peninsularity -peninsulas -peninsula's -peninsulate -penintime -peninvariant -penis -penises -penistone -Penitas -penitence -penitencer -penitences -penitency -penitent -Penitente -Penitentes -penitential -penitentially -penitentials -penitentiary -penitentiaries -penitentiaryship -penitently -penitents -penitis -penk -penkeeper -Penki -penknife -penknives -Penland -penlight -penlights -penlike -penlite -penlites -penlop -penmaker -penmaking -Penman -penmanship -penmanships -penmaster -penmen -Penn -Penn. -Penna -pennaceous -Pennacook -pennae -pennage -Pennales -penname -pennames -pennant -pennants -pennant-winged -Pennaria -Pennariidae -Pennatae -pennate -pennated -pennati- -pennatifid -pennatilobate -pennatipartite -pennatisect -pennatisected -Pennatula -Pennatulacea -pennatulacean -pennatulaceous -pennatularian -pennatulid -Pennatulidae -pennatuloid -Pennebaker -penned -penneech -penneeck -Penney -Pennell -Pennellville -penner -penners -penner-up -pennet -Penni -Penny -penni- -pennia -penny-a-line -penny-a-liner -Pennyan -pennybird -pennycress -penny-cress -penny-dreadful -Pennie -pennyearth -pennied -pennies -penny-farthing -penniferous -pennyflower -penniform -penny-gaff -pennigerous -penny-grass -pennyhole -pennyland -pennyleaf -penniless -pennilessly -pennilessness -pennill -pennine -penninervate -penninerved -Pennines -penning -Pennington -penninite -penny-pinch -penny-pincher -penny-pinching -penny-plain -pennipotent -pennyroyal -pennyroyals -pennyrot -pennis -penny's -Pennisetum -pennysiller -pennystone -penny-stone -penniveined -pennyweight -pennyweights -pennywhistle -penny-whistle -pennywinkle -pennywise -penny-wise -pennywort -pennyworth -pennyworths -Pennlaird -Pennock -pennon -pennoncel -pennoncelle -pennoned -pennons -pennopluma -pennoplume -pennorth -Pennsauken -Pennsboro -Pennsburg -Pennsylvania -Pennsylvanian -pennsylvanians -pennsylvanicus -Pennsville -pennuckle -Pennville -Penobscot -Penobscots -penoche -penoches -penochi -Penoyer -Penokee -penology -penologic -penological -penologies -penologist -penologists -penoncel -penoncels -penorcon -penoun -penpoint -penpoints -penpusher -pen-pusher -penrack -Penryn -Penrith -Penrod -Penrose -penroseite -pens -Pensacola -penscript -pense -pensee -Pensees -penseful -pensefulness -penseroso -pen-shaped -penship -pensy -pensil -pensile -pensileness -pensility -pensils -pension -pensionable -pensionably -pensionary -pensionaries -pensionat -pensione -pensioned -pensioner -pensioners -pensionership -pensiones -pensioning -pensionless -pensionnaire -pensionnat -pensionry -pensions -pensive -pensived -pensively -pensiveness -penstemon -penster -pensters -penstick -penstock -penstocks -pensum -Pent -penta -penta- -penta-acetate -pentabasic -pentabromide -pentacapsular -pentacarbon -pentacarbonyl -pentacarpellary -pentace -pentacetate -pentachenium -pentachloride -pentachlorophenol -pentachord -pentachromic -pentacyanic -pentacyclic -pentacid -pentacle -pentacles -pentacoccous -pentacontane -pentacosane -Pentacrinidae -pentacrinite -pentacrinoid -Pentacrinus -pentacron -pentacrostic -pentactinal -pentactine -pentacular -pentad -pentadactyl -Pentadactyla -pentadactylate -pentadactyle -pentadactylism -pentadactyloid -pentadecagon -pentadecahydrate -pentadecahydrated -pentadecane -pentadecatoic -pentadecyl -pentadecylic -pentadecoic -pentadelphous -pentadic -pentadicity -pentadiene -pentadodecahedron -pentadrachm -pentadrachma -pentads -pentaerythrite -pentaerythritol -pentafid -pentafluoride -pentagamist -pentagyn -Pentagynia -pentagynian -pentagynous -pentaglossal -pentaglot -pentaglottical -Pentagon -pentagonal -pentagonally -Pentagonese -pentagonohedron -pentagonoid -pentagonon -pentagons -pentagon's -pentagram -pentagrammatic -pentagrams -pentagrid -pentahalide -pentahedra -pentahedral -pentahedrical -pentahedroid -pentahedron -pentahedrous -pentahexahedral -pentahexahedron -pentahydrate -pentahydrated -pentahydric -pentahydroxy -pentail -pen-tailed -pentaiodide -pentalobate -pentalogy -pentalogies -pentalogue -pentalpha -Pentamera -pentameral -pentameran -pentamery -pentamerid -Pentameridae -pentamerism -pentameroid -pentamerous -Pentamerus -pentameter -pentameters -pentamethylene -pentamethylenediamine -pentametrist -pentametrize -pentander -Pentandria -pentandrian -pentandrous -pentane -pentanedione -pentanes -pentangle -pentangular -pentanitrate -pentanoic -pentanol -pentanolide -pentanone -pentapeptide -pentapetalous -Pentaphylacaceae -pentaphylacaceous -Pentaphylax -pentaphyllous -pentaploid -pentaploidy -pentaploidic -pentapody -pentapodic -pentapodies -pentapolis -pentapolitan -pentaprism -pentapterous -pentaptych -pentaptote -pentaquin -pentaquine -pentarch -pentarchy -pentarchical -pentarchies -pentarchs -pentasepalous -pentasilicate -pentasyllabic -pentasyllabism -pentasyllable -pentaspermous -pentaspheric -pentaspherical -pentastich -pentastichy -pentastichous -pentastyle -pentastylos -pentastom -pentastome -Pentastomida -pentastomoid -pentastomous -Pentastomum -pentasulphide -Pentateuch -Pentateuchal -pentathionate -pentathionic -pentathlete -pentathlon -pentathlons -pentathlos -pentatomic -pentatomid -Pentatomidae -Pentatomoidea -pentatone -pentatonic -pentatriacontane -pentatron -pentavalence -pentavalency -pentavalent -pentazocine -penteconta- -penteconter -pentecontoglossal -Pentecost -Pentecostal -pentecostalism -pentecostalist -pentecostals -Pentecostaria -pentecostarion -pentecoster -pentecostys -Pentelic -Pentelican -Pentelicus -Pentelikon -pentene -pentenes -penteteric -Pentha -Penthea -Pentheam -Pentheas -penthemimer -penthemimeral -penthemimeris -Penthesilea -Penthesileia -Penthestes -Pentheus -penthiophen -penthiophene -Penthoraceae -Penthorum -penthouse -penthoused -penthouselike -penthouses -penthousing -penthrit -penthrite -pentice -penticle -pentyl -pentylene -pentylenetetrazol -pentylic -pentylidene -pentyls -pentimenti -pentimento -pentine -pentyne -pentiodide -pentit -pentite -pentitol -Pentland -pentlandite -pentobarbital -pentobarbitone -pentode -pentodes -pentoic -pentol -pentolite -pentomic -pentosan -pentosane -pentosans -pentose -pentoses -pentosid -pentoside -pentosuria -Pentothal -pentoxide -pentremital -pentremite -Pentremites -Pentremitidae -Pentress -pentrit -pentrite -pent-roof -pentrough -Pentstemon -pentstock -penttail -pent-up -Pentwater -Pentzia -penuche -penuches -penuchi -penuchis -penuchle -penuchles -penuckle -penuckles -Penuelas -penult -penultim -penultima -penultimate -penultimately -penultimatum -penults -penumbra -penumbrae -penumbral -penumbras -penumbrous -penup -penury -penuries -penurious -penuriously -penuriousness -Penutian -Penwell -penwiper -penwoman -penwomanship -penwomen -penworker -penwright -pen-written -Penza -Penzance -peon -peonage -peonages -peones -Peony -peonies -peony-flowered -Peonir -peonism -peonisms -peonize -peons -people -people-blinding -people-born -peopled -people-devouring -peopledom -peoplehood -peopleize -people-king -peopleless -people-loving -peoplement -people-pestered -people-pleasing -peopler -peoplers -Peoples -people's -peoplet -peopling -peoplish -Peoria -Peorian -Peosta -peotomy -Peotone -PEP -PEPE -Pepeekeo -Peper -peperek -peperine -peperino -Peperomia -peperoni -peperonis -pepful -Pephredo -Pepi -Pepillo -Pepin -pepinella -pepino -pepinos -Pepys -Pepysian -Pepita -Pepito -pepla -pepless -peplos -peplosed -peploses -peplum -peplumed -peplums -peplus -pepluses -pepo -peponid -peponida -peponidas -peponium -peponiums -pepos -Peppard -pepped -Peppel -Pepper -pepper-and-salt -pepperbox -pepper-box -pepper-castor -peppercorn -peppercorny -peppercornish -peppercorns -peppered -Pepperell -pepperer -pepperers -peppergrass -peppery -pepperidge -pepperily -pepperiness -peppering -pepperish -pepperishly -peppermint -pepperminty -peppermints -pepperoni -pepper-pot -pepperproof -pepperroot -peppers -peppershrike -peppertree -pepper-tree -pepperweed -pepperwood -pepperwort -Peppi -Peppy -Peppie -peppier -peppiest -peppily -peppin -peppiness -pepping -peps -Pepsi -PepsiCo -pepsin -pepsinate -pepsinated -pepsinating -pepsine -pepsines -pepsinhydrochloric -pepsiniferous -pepsinogen -pepsinogenic -pepsinogenous -pepsins -pepsis -peptic -peptical -pepticity -peptics -peptid -peptidase -peptide -peptides -peptidic -peptidically -peptidoglycan -peptidolytic -peptids -peptizable -peptization -peptize -peptized -peptizer -peptizers -peptizes -peptizing -Pepto-Bismol -peptogaster -peptogen -peptogeny -peptogenic -peptogenous -peptohydrochloric -peptolysis -peptolytic -peptonaemia -peptonate -peptone -peptonelike -peptonemia -peptones -peptonic -peptonisation -peptonise -peptonised -peptoniser -peptonising -peptonization -peptonize -peptonized -peptonizer -peptonizing -peptonoid -peptonuria -peptotoxin -peptotoxine -Pepusch -Pequabuck -Pequannock -Pequea -Pequot -Per -per- -per. -Pera -Peracarida -peracephalus -peracetate -peracetic -peracid -peracidite -peracidity -peracids -peract -peracute -peradventure -Peraea -peragrate -peragration -perai -Perak -Perakim -Peralta -peramble -perambulant -perambulate -perambulated -perambulates -perambulating -perambulation -perambulations -perambulator -perambulatory -perambulators -Perameles -Peramelidae -perameline -perameloid -Peramium -Peratae -Perates -perau -perbend -perborate -perborax -perbromide -Perbunan -Perca -percale -percales -percaline -percarbide -percarbonate -percarbonic -percase -Perce -perceant -perceivability -perceivable -perceivableness -perceivably -perceivance -perceivancy -perceive -perceived -perceivedly -perceivedness -perceiver -perceivers -perceives -perceiving -perceivingness -percent -percentable -percentably -percentage -percentaged -percentages -percental -percenter -percentile -percentiles -percents -percentual -percentum -percept -perceptibility -perceptible -perceptibleness -perceptibly -perception -perceptional -perceptionalism -perceptionism -perceptions -perceptive -perceptively -perceptiveness -perceptivity -percepts -perceptual -perceptually -perceptum -Percesoces -percesocine -Perceval -perch -percha -perchable -perchance -Perche -perched -percher -Percheron -perchers -perches -perching -perchlor- -perchlorate -perchlorethane -perchlorethylene -perchloric -perchloride -perchlorinate -perchlorinated -perchlorinating -perchlorination -perchloroethane -perchloroethylene -perchloromethane -perchromate -perchromic -Perchta -Percy -percid -Percidae -perciform -Perciformes -percylite -percipi -percipience -percipiency -percipient -Percival -Percivale -perclose -percnosome -percoct -percoid -Percoidea -percoidean -percoids -percolable -percolate -percolated -percolates -percolating -percolation -percolative -percolator -percolators -percomorph -Percomorphi -percomorphous -percompound -percontation -percontatorial -percribrate -percribration -percrystallization -perculsion -perculsive -percur -percurration -percurrent -percursory -percuss -percussed -percusses -percussing -percussion -percussional -percussioner -percussionist -percussionists -percussionize -percussion-proof -percussions -percussive -percussively -percussiveness -percussor -percutaneous -percutaneously -percutient -perdendo -perdendosi -perdy -Perdicinae -perdicine -Perdido -perdie -perdifoil -perdifume -perdiligence -perdiligent -perdit -Perdita -perdition -perditionable -Perdix -perdricide -perdrigon -perdrix -Perdu -perdue -perduellion -perdues -perdurability -perdurable -perdurableness -perdurably -perdurance -perdurant -perdure -perdured -perdures -perduring -perduringly -perdus -pere -perea -Perean -peregrin -peregrina -peregrinate -peregrinated -peregrination -peregrinations -peregrinative -peregrinator -peregrinatory -Peregrine -peregrinism -peregrinity -peregrinoid -peregrins -peregrinus -pereia -pereion -pereiopod -Pereira -pereirine -perejonet -Perelman -perempt -peremption -peremptory -peremptorily -peremptoriness -perendinant -perendinate -perendination -perendure -perennate -perennation -perennial -perenniality -perennialize -perennially -perennialness -perennial-rooted -perennials -perennibranch -Perennibranchiata -perennibranchiate -perennity -pereon -pereopod -perequitate -pererrate -pererration -peres -Pereskia -Peretz -pereundem -Perez -perezone -perf -perfay -PERFECT -perfecta -perfectability -perfectas -perfectation -perfected -perfectedly -perfecter -perfecters -perfectest -perfecti -perfectibilian -perfectibilism -perfectibilist -perfectibilitarian -perfectibility -perfectibilities -perfectible -perfecting -perfection -perfectionate -perfectionation -perfectionator -perfectioner -perfectionism -perfectionist -perfectionistic -perfectionists -perfectionist's -perfectionize -perfectionizement -perfectionizer -perfectionment -perfections -perfectism -perfectist -perfective -perfectively -perfectiveness -perfectivise -perfectivised -perfectivising -perfectivity -perfectivize -perfectly -perfectness -perfectnesses -perfecto -perfector -perfectos -perfects -perfectuation -Perfectus -perfervent -perfervid -perfervidity -perfervidly -perfervidness -perfervor -perfervour -Perfeti -perficient -perfidy -perfidies -perfidious -perfidiously -perfidiousness -perfilograph -perfin -perfins -perfix -perflable -perflate -perflation -perfluent -perfoliate -perfoliation -perforable -perforant -Perforata -perforate -perforated -perforates -perforating -perforation -perforationproof -perforations -perforative -perforator -perforatory -perforatorium -perforators -perforce -perforcedly -perform -performability -performable -performance -performances -performance's -performant -performative -performatory -performed -performer -performers -performing -performs -perfricate -perfrication -perfumatory -perfume -perfumed -perfumeless -perfumer -perfumeress -perfumery -perfumeries -perfumers -perfumes -perfumy -perfuming -perfunctionary -perfunctory -perfunctorily -perfunctoriness -perfunctorious -perfunctoriously -perfunctorize -perfuncturate -perfusate -perfuse -perfused -perfuses -perfusing -perfusion -perfusive -Pergamene -pergameneous -Pergamenian -pergamentaceous -Pergamic -pergamyn -Pergamon -Pergamos -Pergamum -Pergamus -pergelisol -pergola -pergolas -Pergolesi -Pergrim -pergunnah -perh -perhalide -perhalogen -Perham -perhaps -perhapses -perhazard -perhydroanthracene -perhydrogenate -perhydrogenation -perhydrogenize -perhydrogenized -perhydrogenizing -perhydrol -perhorresce -Peri -peri- -Peria -periacinal -periacinous -periactus -periadenitis -Perialla -periamygdalitis -perianal -Periander -periangiocholitis -periangioma -periangitis -perianth -perianthial -perianthium -perianths -periaortic -periaortitis -periapical -Periapis -periappendicitis -periappendicular -periapt -periapts -Periarctic -periareum -periarterial -periarteritis -periarthric -periarthritis -periarticular -periaster -periastra -periastral -periastron -periastrum -periatrial -periauger -periauricular -periaxial -periaxillary -periaxonal -periblast -periblastic -periblastula -periblem -periblems -Periboea -periboli -periboloi -peribolos -peribolus -peribranchial -peribronchial -peribronchiolar -peribronchiolitis -peribronchitis -peribulbar -peribursal -pericaecal -pericaecitis -pericanalicular -pericapsular -pericardia -pericardiac -pericardiacophrenic -pericardial -pericardian -pericardicentesis -pericardiectomy -pericardiocentesis -pericardiolysis -pericardiomediastinitis -pericardiophrenic -pericardiopleural -pericardiorrhaphy -pericardiosymphysis -pericardiotomy -pericarditic -pericarditis -pericardium -pericardotomy -pericarp -pericarpial -pericarpic -pericarpium -pericarpoidal -pericarps -Perice -pericecal -pericecitis -pericellular -pericemental -pericementitis -pericementoclasia -pericementum -pericenter -pericentral -pericentre -pericentric -pericephalic -pericerebral -perichaete -perichaetia -perichaetial -perichaetium -perichaetous -perichdria -perichete -perichylous -pericholangitis -pericholecystitis -perichondral -perichondria -perichondrial -perichondritis -perichondrium -perichord -perichordal -perichoresis -perichorioidal -perichoroidal -perichtia -pericycle -pericyclic -pericycloid -pericyclone -pericyclonic -pericynthion -pericystic -pericystitis -pericystium -pericytial -pericladium -periclase -periclasia -periclasite -periclaustral -Periclean -Pericles -Periclymenus -periclinal -periclinally -pericline -periclinium -periclitate -periclitation -pericolitis -pericolpitis -periconchal -periconchitis -pericopae -pericopal -pericope -pericopes -pericopic -pericorneal -pericowperitis -pericoxitis -pericrania -pericranial -pericranitis -pericranium -pericristate -Pericu -periculant -periculous -periculum -peridendritic -peridental -peridentium -peridentoclasia -periderm -peridermal -peridermic -peridermis -Peridermium -periderms -peridesm -peridesmic -peridesmitis -peridesmium -peridia -peridial -peridiastole -peridiastolic -perididymis -perididymitis -peridiiform -peridila -Peridineae -Peridiniaceae -peridiniaceous -peridinial -Peridiniales -peridinian -peridinid -Peridinidae -Peridinieae -Peridiniidae -Peridinium -peridiola -peridiole -peridiolum -peridium -Peridot -peridotic -peridotite -peridotitic -peridots -peridrome -peridromoi -peridromos -periductal -periegesis -periegetic -perielesis -periencephalitis -perienteric -perienteritis -perienteron -periependymal -Perieres -periergy -periesophageal -periesophagitis -perifistular -perifoliary -perifollicular -perifolliculitis -perigangliitis -periganglionic -perigastric -perigastritis -perigastrula -perigastrular -perigastrulation -perigeal -perigean -perigee -perigees -perigemmal -perigenesis -perigenital -perigeum -perigyny -perigynial -perigynies -perigynium -perigynous -periglacial -periglandular -periglial -perigloea -periglottic -periglottis -perignathic -perigon -perigonadial -perigonal -perigone -perigonia -perigonial -perigonium -perigonnia -perigons -Perigord -Perigordian -perigraph -perigraphic -Perigune -perihelia -perihelial -perihelian -perihelion -perihelium -periheloin -perihepatic -perihepatitis -perihermenial -perihernial -perihysteric -peri-insular -perijejunitis -perijove -perikarya -perikaryal -perikaryon -Perikeiromene -Perikiromene -perikronion -peril -perilabyrinth -perilabyrinthitis -perilaryngeal -perilaryngitis -Perilaus -periled -perilenticular -periligamentous -perilymph -perilymphangial -perilymphangitis -perilymphatic -periling -Perilla -peril-laden -perillas -perilled -perilless -perilling -perilobar -perilous -perilously -perilousness -perils -peril's -perilsome -perilune -perilunes -perimartium -perimastitis -Perimedes -perimedullary -Perimele -perimeningitis -perimeter -perimeterless -perimeters -perimetral -perimetry -perimetric -perimetrical -perimetrically -perimetritic -perimetritis -perimetrium -perimyelitis -perimysia -perimysial -perimysium -perimorph -perimorphic -perimorphism -perimorphous -perinaeum -perinatal -perinde -perine -perinea -perineal -perineo- -perineocele -perineoplasty -perineoplastic -perineorrhaphy -perineoscrotal -perineosynthesis -perineostomy -perineotomy -perineovaginal -perineovulvar -perinephral -perinephria -perinephrial -perinephric -perinephritic -perinephritis -perinephrium -perineptunium -perineum -perineural -perineuria -perineurial -perineurical -perineuritis -perineurium -perinium -perinuclear -periocular -period -periodate -periodic -periodical -periodicalism -periodicalist -periodicalize -periodically -periodicalness -periodicals -periodicity -periodid -periodide -periodids -periodization -periodize -periodogram -periodograph -periodology -periodontal -periodontally -periodontia -periodontic -periodontics -periodontist -periodontitis -periodontium -periodontoclasia -periodontology -periodontologist -periodontoses -periodontosis -periodontum -periodoscope -periods -period's -Perioeci -perioecians -perioecic -perioecid -perioecus -perioesophageal -perioikoi -periomphalic -perionychia -perionychium -perionyx -perionyxis -perioophoritis -periophthalmic -periophthalmitis -Periopis -periople -perioplic -perioptic -perioptometry -perioque -perioral -periorbit -periorbita -periorbital -periorchitis -periost -periost- -periostea -periosteal -periosteally -periosteitis -periosteoalveolar -periosteo-edema -periosteoma -periosteomedullitis -periosteomyelitis -periosteophyte -periosteorrhaphy -periosteotome -periosteotomy -periosteous -periosteum -periostitic -periostitis -periostoma -periostosis -periostotomy -periostraca -periostracal -periostracum -periotic -periovular -peripachymeningitis -peripancreatic -peripancreatitis -peripapillary -peripatetian -Peripatetic -peripatetical -peripatetically -peripateticate -Peripateticism -peripatetics -Peripatidae -Peripatidea -peripatize -peripatoid -Peripatopsidae -Peripatopsis -Peripatus -peripenial -peripericarditis -peripetalous -peripetasma -peripeteia -peripety -peripetia -peripeties -periphacitis -peripharyngeal -Periphas -periphasis -peripherad -peripheral -peripherally -peripherallies -peripherals -periphery -peripherial -peripheric -peripherical -peripherically -peripheries -periphery's -peripherocentral -peripheroceptor -peripheromittor -peripheroneural -peripherophose -Periphetes -periphyllum -periphyse -periphysis -periphytic -periphyton -periphlebitic -periphlebitis -periphractic -periphrase -periphrased -periphrases -periphrasing -periphrasis -periphrastic -periphrastical -periphrastically -periphraxy -peripylephlebitis -peripyloric -Periplaneta -periplasm -periplast -periplastic -periplegmatic -peripleural -peripleuritis -Periploca -periplus -peripneumony -peripneumonia -peripneumonic -peripneustic -peripolar -peripolygonal -periportal -periproct -periproctal -periproctic -periproctitis -periproctous -periprostatic -periprostatitis -peripter -peripteral -periptery -peripteries -peripteroi -peripteros -peripterous -peripters -perique -periques -perirectal -perirectitis -perirenal -perirhinal -periryrle -perirraniai -peris -perisalpingitis -perisarc -perisarcal -perisarcous -perisarcs -perisaturnium -periscian -periscians -periscii -perisclerotic -periscopal -periscope -periscopes -periscopic -periscopical -periscopism -periselene -perish -perishability -perishabilty -perishable -perishableness -perishables -perishable's -perishably -perished -perisher -perishers -perishes -perishing -perishingly -perishless -perishment -perisigmoiditis -perisynovial -perisinuitis -perisinuous -perisinusitis -perisystole -perisystolic -perisoma -perisomal -perisomatic -perisome -perisomial -perisperm -perispermal -perispermatitis -perispermic -perisphere -perispheric -perispherical -perisphinctean -Perisphinctes -Perisphinctidae -perisphinctoid -perisplanchnic -perisplanchnitis -perisplenetic -perisplenic -perisplenitis -perispome -perispomena -perispomenon -perispondylic -perispondylitis -perispore -Perisporiaceae -perisporiaceous -Perisporiales -perissad -perissodactyl -Perissodactyla -perissodactylate -perissodactyle -perissodactylic -perissodactylism -perissodactylous -perissology -perissologic -perissological -perissosyllabic -peristalith -peristalses -peristalsis -peristaltic -peristaltically -peristaphyline -peristaphylitis -peristele -peristerite -peristeromorph -Peristeromorphae -peristeromorphic -peristeromorphous -peristeronic -peristerophily -peristeropod -peristeropodan -peristeropode -Peristeropodes -peristeropodous -peristethium -peristylar -peristyle -peristyles -peristylium -peristylos -peristylum -peristole -peristoma -peristomal -peristomatic -peristome -peristomial -peristomium -peristrephic -peristrephical -peristrumitis -peristrumous -perit -peritcia -perite -peritectic -peritendineum -peritenon -perithece -perithecia -perithecial -perithecium -perithelia -perithelial -perithelioma -perithelium -perithyreoiditis -perithyroiditis -perithoracic -perityphlic -perityphlitic -perityphlitis -peritlia -peritomy -peritomize -peritomous -periton- -peritonaea -peritonaeal -peritonaeum -peritonea -peritoneal -peritonealgia -peritonealize -peritonealized -peritonealizing -peritoneally -peritoneocentesis -peritoneoclysis -peritoneomuscular -peritoneopathy -peritoneopericardial -peritoneopexy -peritoneoplasty -peritoneoscope -peritoneoscopy -peritoneotomy -peritoneum -peritoneums -peritonism -peritonital -peritonitic -peritonitis -peritonsillar -peritonsillitis -peritracheal -peritrack -Peritrate -peritrema -peritrematous -peritreme -peritrich -Peritricha -peritrichan -peritrichate -peritrichic -peritrichous -peritrichously -peritroch -peritrochal -peritrochanteric -peritrochium -peritrochoid -peritropal -peritrophic -peritropous -peritura -periumbilical -periungual -periuranium -periureteric -periureteritis -periurethral -periurethritis -periuterine -periuvular -perivaginal -perivaginitis -perivascular -perivasculitis -perivenous -perivertebral -perivesical -perivisceral -perivisceritis -perivitellin -perivitelline -periwig -periwigged -periwigpated -periwigs -periwinkle -periwinkled -periwinkler -periwinkles -perizonium -perjink -perjinkety -perjinkities -perjinkly -perjure -perjured -perjuredly -perjuredness -perjurement -perjurer -perjurers -perjures -perjuress -perjury -perjuries -perjurymonger -perjurymongering -perjuring -perjurious -perjuriously -perjuriousness -perjury-proof -perjurous -perk -Perkasie -perked -perky -perkier -perkiest -perkily -Perkin -perkiness -perking -perkingly -perkinism -Perkins -Perkinston -Perkinsville -Perkiomenville -perkish -perknite -Perkoff -Perks -PERL -Perla -perlaceous -Perlaria -perlative -Perle -perleche -perlection -Perley -perlid -Perlidae -Perlie -perligenous -perling -perlingual -perlingually -Perlis -perlite -perlites -perlitic -Perlman -perlocution -perlocutionary -Perloff -perloir -perlucidus -perlustrate -perlustration -perlustrator -Perm -permafrost -Permalloy -permanence -permanences -permanency -permanencies -permanent -permanently -permanentness -permanents -permanganate -permanganic -permansion -permansive -permatron -permeability -permeable -permeableness -permeably -permeameter -permeance -permeant -permease -permeases -permeate -permeated -permeates -permeating -permeation -permeations -permeative -permeator -permed -Permiak -Permian -permillage -perming -perminvar -permirific -permiss -permissable -permissibility -permissible -permissibleness -permissibly -permissiblity -permission -permissioned -permissions -permissive -permissively -permissiveness -permissivenesses -permissory -permistion -permit -permits -permit's -permittable -permittance -permitted -permittedly -permittee -permitter -permitting -permittivity -permittivities -permix -permixable -permixed -permixtion -permixtive -permixture -Permocarboniferous -permonosulphuric -permoralize -perms -permutability -permutable -permutableness -permutably -permutate -permutated -permutating -permutation -permutational -permutationist -permutationists -permutations -permutation's -permutator -permutatory -permutatorial -permute -permuted -permuter -permutes -permuting -pern -Pernambuco -pernancy -Pernas -pernasal -pernavigate -pernea -pernel -Pernell -pernephria -Pernettia -Perni -pernychia -pernicion -pernicious -perniciously -perniciousness -Pernick -pernickety -pernicketiness -pernicketty -pernickity -pernyi -Pernik -pernine -pernio -Pernis -pernitrate -pernitric -pernoctate -pernoctation -Pernod -pernor -Pero -peroba -perobrachius -perocephalus -perochirus -perodactylus -Perodipus -perofskite -Perognathinae -Perognathus -peroliary -Peromedusae -Peromela -peromelous -peromelus -Peromyscus -Peron -peronate -perone -peroneal -peronei -peroneocalcaneal -peroneotarsal -peroneotibial -peroneus -peronial -Peronism -Peronismo -Peronist -Peronista -Peronistas -peronium -peronnei -Peronospora -Peronosporaceae -peronosporaceous -Peronosporales -peropod -Peropoda -peropodous -peropus -peroral -perorally -perorate -perorated -perorates -perorating -peroration -perorational -perorations -perorative -perorator -peroratory -peroratorical -peroratorically -peroses -perosis -perosmate -perosmic -perosomus -Perot -perotic -Perotin -Perotinus -Perovo -perovskite -peroxy -peroxy- -peroxyacid -peroxyborate -peroxid -peroxidase -peroxidate -peroxidation -peroxide -peroxide-blond -peroxided -peroxides -peroxidic -peroxiding -peroxidize -peroxidized -peroxidizement -peroxidizing -peroxids -peroxyl -peroxisomal -peroxisome -perozonid -perozonide -perp -perpend -perpended -perpendicle -perpendicular -perpendicularity -perpendicularities -perpendicularly -perpendicularness -perpendiculars -perpending -perpends -perpense -perpension -perpensity -perpent -perpents -perpera -perperfect -perpession -perpet -perpetrable -perpetrate -perpetrated -perpetrates -perpetrating -perpetration -perpetrations -perpetrator -perpetrators -perpetrator's -perpetratress -perpetratrix -Perpetua -perpetuable -perpetual -perpetualism -perpetualist -perpetuality -perpetually -perpetualness -perpetuana -perpetuance -perpetuant -perpetuate -perpetuated -perpetuates -perpetuating -perpetuation -perpetuations -perpetuator -perpetuators -perpetuity -perpetuities -perpetuum -perphenazine -Perpignan -perplantar -perplex -perplexable -perplexed -perplexedly -perplexedness -perplexer -perplexes -perplexing -perplexingly -perplexity -perplexities -perplexment -perplication -perquadrat -perqueer -perqueerly -perqueir -perquest -perquisite -perquisites -perquisition -perquisitor -Perr -perradial -perradially -perradiate -perradius -Perrault -Perreault -perreia -Perren -Perret -Perretta -Perri -Perry -perridiculous -Perrie -perrier -perries -Perryhall -Perryman -Perrin -Perrine -Perrineville -Perrinist -Perrins -Perrinton -Perryopolis -Perris -Perrysburg -Perrysville -Perryton -Perryville -Perron -perrons -Perronville -perroquet -perruche -perrukery -perruque -perruquier -perruquiers -perruthenate -perruthenic -Pers -Persae -persalt -persalts -Persas -perscent -perscribe -perscrutate -perscrutation -perscrutator -Perse -Persea -persecute -persecuted -persecutee -persecutes -persecuting -persecutingly -persecution -persecutional -persecutions -persecutive -persecutiveness -persecutor -persecutory -persecutors -persecutor's -persecutress -persecutrix -Perseid -perseite -perseity -perseitol -persentiscency -Persephassa -Persephone -Persepolis -Persepolitan -perses -Perseus -perseverance -perseverances -perseverant -perseverate -perseveration -perseverative -persevere -persevered -perseveres -persevering -perseveringly -Pershing -Persia -Persian -Persianist -Persianization -Persianize -persians -Persic -persicary -Persicaria -Persichetti -Persicize -persico -persicot -persienne -persiennes -persiflage -persiflate -persifleur -persilicic -persillade -persymmetric -persymmetrical -persimmon -persimmons -persio -Persis -Persism -persist -persistance -persisted -persistence -persistences -persistency -persistencies -persistent -persistently -persister -persisters -persisting -persistingly -persistive -persistively -persistiveness -persists -Persius -persnickety -persnicketiness -persolve -person -persona -personable -personableness -personably -Personae -personage -personages -personage's -personal -personalia -personalis -personalisation -personalism -personalist -personalistic -personality -personalities -personality's -personalization -personalize -personalized -personalizes -personalizing -personally -personalness -personals -personalty -personalties -personam -personarum -personas -personate -personated -personately -personating -personation -personative -personator -personed -personeity -personhood -personify -personifiable -personifiant -personification -personifications -personificative -personificator -personified -personifier -personifies -personifying -personization -personize -personnel -Persons -person's -personship -person-to-person -persorption -perspection -perspectival -perspective -perspectived -perspectiveless -perspectively -perspectives -perspective's -Perspectivism -perspectivist -perspectivity -perspectograph -perspectometer -Perspex -perspicable -perspicacious -perspicaciously -perspicaciousness -perspicacity -perspicacities -perspicil -perspicous -perspicuity -perspicuous -perspicuously -perspicuousness -perspirability -perspirable -perspirant -perspirate -perspiration -perspirations -perspirative -perspiratory -perspire -perspired -perspires -perspiry -perspiring -perspiringly -Persse -Persson -perstand -perstringe -perstringement -persuadability -persuadable -persuadableness -persuadably -persuade -persuaded -persuadedly -persuadedness -persuader -persuaders -persuades -persuading -persuadingly -persuasibility -persuasible -persuasibleness -persuasibly -persuasion -persuasion-proof -persuasions -persuasion's -persuasive -persuasively -persuasiveness -persuasivenesses -persuasory -persue -persulfate -persulphate -persulphide -persulphocyanate -persulphocyanic -persulphuric -PERT -pert. -pertain -pertained -pertaining -pertainment -pertains -perten -pertenencia -perter -pertest -Perth -perthiocyanate -perthiocyanic -perthiotophyre -perthite -perthitic -perthitically -perthophyte -perthosite -Perthshire -perty -pertinaceous -pertinacious -pertinaciously -pertinaciousness -pertinacity -pertinacities -pertinate -pertinence -pertinences -pertinency -pertinencies -pertinent -pertinentia -pertinently -pertinentness -pertish -pertly -pertness -pertnesses -perturb -perturbability -perturbable -perturbance -perturbancy -perturbant -perturbate -perturbation -perturbational -perturbations -perturbation's -perturbatious -perturbative -perturbator -perturbatory -perturbatress -perturbatrix -perturbed -perturbedly -perturbedness -perturber -perturbing -perturbingly -perturbment -perturbs -Pertusaria -Pertusariaceae -pertuse -pertused -pertusion -pertussal -pertussis -Peru -Perugia -Perugian -Peruginesque -Perugino -peruke -peruked -perukeless -peruker -perukery -perukes -perukier -perukiership -perula -Perularia -perulate -perule -Perun -perusable -perusal -perusals -peruse -perused -peruser -perusers -peruses -perusing -Perusse -Perutz -Peruvian -Peruvianize -peruvians -Peruzzi -perv -pervade -pervaded -pervadence -pervader -pervaders -pervades -pervading -pervadingly -pervadingness -pervagate -pervagation -pervalvar -pervasion -pervasive -pervasively -pervasiveness -pervenche -perverse -perversely -perverseness -perversenesses -perverse-notioned -perversion -perversions -perversite -perversity -perversities -perversive -pervert -perverted -pervertedly -pervertedness -perverter -pervertibility -pervertible -pervertibly -perverting -pervertive -perverts -pervestigate -perviability -perviable -pervial -pervicacious -pervicaciously -pervicaciousness -pervicacity -pervigilium -pervious -perviously -perviousness -Pervouralsk -pervulgate -pervulgation -perwick -perwitsky -Perzan -pes -pesa -Pesach -pesade -pesades -pesage -Pesah -pesante -Pesaro -Pescadero -Pescadores -Pescara -pescod -Pesek -peseta -pesetas -pesewa -pesewas -Peshastin -Peshawar -Peshito -Peshitta -peshkar -peshkash -Peshtigo -peshwa -peshwaship -pesky -peskier -peskiest -peskily -peskiness -Peskoff -peso -pesos -Pesotum -pess -Pessa -pessary -pessaries -pessimal -pessimism -pessimisms -pessimist -pessimistic -pessimistically -pessimists -pessimize -pessimum -pessomancy -pessoner -pessular -pessulus -Pest -Pestalozzi -Pestalozzian -Pestalozzianism -Pestana -Peste -pester -pestered -pesterer -pesterers -pestering -pesteringly -pesterment -pesterous -pesters -pestersome -pestful -pesthole -pestholes -pesthouse -pest-house -pesticidal -pesticide -pesticides -pestiduct -pestiferous -pestiferously -pestiferousness -pestify -pestifugous -pestilence -pestilence-proof -pestilences -pestilenceweed -pestilencewort -pestilent -pestilential -pestilentially -pestilentialness -pestilently -pestis -pestle -pestled -pestles -pestle-shaped -pestling -pesto -pestology -pestological -pestologist -pestos -pestproof -pest-ridden -pests -Pet -Pet. -PETA -peta- -Petaca -Petain -petal -petalage -petaled -petaly -Petalia -petaliferous -petaliform -Petaliidae -petaline -petaling -petalism -petalite -petalled -petalless -petallike -petalling -petalocerous -petalody -petalodic -petalodies -petalodont -petalodontid -Petalodontidae -petalodontoid -Petalodus -petaloid -petaloidal -petaloideous -petalomania -petalon -Petalostemon -petalostichous -petalous -petals -petal's -Petaluma -petalwise -Petar -petara -petard -petardeer -petardier -petarding -petards -petary -Petasites -petasma -petasos -petasoses -petasus -petasuses -petate -petaurine -petaurist -Petaurista -Petauristidae -Petauroides -Petaurus -petchary -petcock -pet-cock -petcocks -PetE -peteca -petechia -petechiae -petechial -petechiate -petegreu -Petey -peteman -petemen -Peter -peter-boat -Peterboro -Peterborough -Peterec -petered -peterero -petering -Peterkin -Peterlee -Peterloo -Peterman -petermen -peternet -peter-penny -Peters -Petersburg -Petersen -Petersham -Peterson -Peterstown -Peterus -peterwort -Petes -Petfi -petful -pether -pethidine -Peti -Petie -Petigny -petiolar -petiolary -Petiolata -petiolate -petiolated -petiole -petioled -petioles -petioli -Petioliventres -petiolular -petiolulate -petiolule -petiolus -Petit -petit-bourgeois -Petite -petiteness -petites -petitgrain -petitio -petition -petitionable -petitional -petitionary -petitionarily -petitioned -petitionee -petitioner -petitioners -petitioning -petitionist -petitionproof -petition-proof -petitions -petit-juryman -petit-juror -petit-maftre -petit-maitre -petit-maltre -petit-mattre -Petit-Moule -petit-negre -petit-noir -petitor -petitory -petits -Petiveria -Petiveriaceae -petkin -petkins -petling -PETN -petnap -petnapping -petnappings -petnaps -peto -Petofi -petos -Petoskey -Petr -petr- -Petra -Petracca -petralogy -Petrarch -Petrarchal -Petrarchan -Petrarchesque -Petrarchian -Petrarchianism -Petrarchism -Petrarchist -Petrarchistic -Petrarchistical -Petrarchize -petrary -Petras -petre -Petrea -petrean -Petrey -petreity -Petrel -petrels -petrescence -petrescency -petrescent -petri -Petrick -Petricola -Petricolidae -petricolous -Petrie -petrifaction -petrifactions -petrifactive -petrify -petrifiable -petrific -petrificant -petrificate -petrification -petrified -petrifier -petrifies -petrifying -Petrillo -Petrina -Petrine -Petrinism -Petrinist -Petrinize -petrissage -petro -petro- -Petrobium -Petrobrusian -petrochemical -petrochemicals -petrochemistry -petrodollar -petrodollars -petrog -petrog. -Petrogale -petrogenesis -petrogenetic -petrogeny -petrogenic -petroglyph -petroglyphy -petroglyphic -Petrograd -petrogram -petrograph -petrographer -petrographers -petrography -petrographic -petrographical -petrographically -petrohyoid -petrol -petrol. -petrolage -petrolatum -petrolean -petrolene -petroleous -petroleum -petroleums -petroleur -petroleuse -Petrolia -petrolic -petroliferous -petrolific -petrolin -Petrolina -petrolist -petrolithic -petrolization -petrolize -petrolized -petrolizing -petrolled -petrolling -petrology -petrologic -petrological -petrologically -petrologist -petrologists -petrols -petromastoid -Petromilli -Petromyzon -Petromyzonidae -petromyzont -Petromyzontes -Petromyzontidae -petromyzontoid -petronel -Petronella -petronellier -petronels -Petronia -Petronilla -Petronille -Petronius -petro-occipital -Petropavlovsk -petropharyngeal -petrophilous -Petros -petrosa -petrosal -Petroselinum -Petrosian -petrosilex -petrosiliceous -petrosilicious -petrosphenoid -petrosphenoidal -petrosphere -petrosquamosal -petrosquamous -petrostearin -petrostearine -petrosum -petrotympanic -Petrouchka -petrous -Petrovsk -petroxolin -Petrozavodsk -Petrpolis -pets -petsai -petsais -Petsamo -Petta -pettable -pettah -petted -pettedly -pettedness -petter -petters -petter's -petti -Petty -pettiagua -petty-bag -Pettibone -pettichaps -petticoat -petticoated -petticoatery -petticoaterie -petticoaty -petticoating -petticoatism -petticoatless -petticoats -petticoat's -pettier -pettiest -Pettifer -pettifog -pettyfog -pettifogged -pettifogger -pettifoggery -pettifoggers -pettifogging -pettifogs -pettifogulize -pettifogulizer -Pettiford -pettygod -Pettigrew -pettily -petty-minded -petty-mindedly -petty-mindedness -pettiness -pettinesses -petting -pettingly -pettings -pettish -pettishly -pettishness -pettiskirt -Pettisville -Pettit -pettitoes -pettle -pettled -pettles -pettling -petto -Pettus -Petua -Petula -Petulah -petulance -petulances -petulancy -petulancies -petulant -petulantly -Petulia -petum -petune -Petunia -petunias -petunse -petuntse -petuntses -petuntze -petuntzes -Petuu -petwood -petzite -peucedanin -Peucedanum -Peucetii -peucyl -peucites -Peugeot -Peugia -peuhl -Peul -peulvan -Peumus -Peursem -Peutingerian -Pevely -Pevsner -Pevzner -pew -pewage -Pewamo -Pewaukee -pewdom -pewee -pewees -pewfellow -pewful -pewholder -pewy -pewing -pewit -pewits -pewless -pewmate -pews -pew's -pewter -pewterer -pewterers -pewtery -pewters -pewterwort -PEX -PEXSI -pezantic -Peziza -Pezizaceae -pezizaceous -pezizaeform -Pezizales -peziziform -pezizoid -pezograph -Pezophaps -PF -pf. -Pfaff -Pfaffian -Pfafftown -Pfalz -Pfannkuchen -PFB -pfc -pfd -Pfeffer -Pfeffernsse -pfeffernuss -Pfeifer -Pfeifferella -pfennig -pfennige -pfennigs -pfft -pfg -Pfister -Pfitzner -Pfizer -pflag -Pflugerville -Pforzheim -Pfosi -PFPU -pfui -pfund -pfunde -pfx -PG -Pg. -PGA -pgntt -pgnttrp -PH -PHA -Phaca -Phacelia -phacelite -phacella -phacellite -phacellus -Phacidiaceae -Phacidiales -phacitis -phacoanaphylaxis -phacocele -phacochere -phacocherine -phacochoere -phacochoerid -phacochoerine -phacochoeroid -Phacochoerus -phacocyst -phacocystectomy -phacocystitis -phacoglaucoma -phacoid -phacoidal -phacoidoscope -phacolysis -phacolite -phacolith -phacomalacia -phacometer -phacopid -Phacopidae -Phacops -phacosclerosis -phacoscope -phacotherapy -Phaea -Phaeacia -Phaeacian -Phaeax -Phaedo -Phaedra -Phaedrus -phaeism -phaelite -phaenanthery -phaenantherous -Phaenna -phaenogam -Phaenogamia -phaenogamian -phaenogamic -phaenogamous -phaenogenesis -phaenogenetic -phaenology -phaenological -phaenomenal -phaenomenism -phaenomenon -phaenozygous -phaeochrous -Phaeodaria -phaeodarian -phaeomelanin -Phaeophyceae -phaeophycean -phaeophyceous -phaeophyl -phaeophyll -Phaeophyta -phaeophytin -phaeophore -phaeoplast -Phaeosporales -phaeospore -Phaeosporeae -phaeosporous -Phaestus -Phaet -Phaethon -Phaethonic -Phaethontes -Phaethontic -Phaethontidae -Phaethusa -phaeton -phaetons -phage -phageda -Phagedaena -phagedaenic -phagedaenical -phagedaenous -phagedena -phagedenic -phagedenical -phagedenous -phages -phagy -phagia -Phagineae -phago- -phagocytable -phagocytal -phagocyte -phagocyter -phagocytic -phagocytism -phagocytize -phagocytized -phagocytizing -phagocytoblast -phagocytolysis -phagocytolytic -phagocytose -phagocytosed -phagocytosing -phagocytosis -phagocytotic -phagodynamometer -phagolysis -phagolytic -phagomania -phagophobia -phagosome -phagous -Phaidra -Phaye -Phaih -Phail -phainolion -Phainopepla -Phaistos -Phajus -phako- -Phalacrocoracidae -phalacrocoracine -Phalacrocorax -phalacrosis -Phalaecean -Phalaecian -Phalaenae -Phalaenidae -phalaenopsid -Phalaenopsis -Phalan -phalangal -Phalange -phalangeal -phalangean -phalanger -Phalangeridae -Phalangerinae -phalangerine -phalanges -phalangette -phalangian -phalangic -phalangid -Phalangida -phalangidan -Phalangidea -phalangidean -Phalangides -phalangiform -Phalangigrada -phalangigrade -phalangigrady -phalangiid -Phalangiidae -phalangist -Phalangista -Phalangistidae -phalangistine -phalangite -phalangitic -phalangitis -Phalangium -phalangology -phalangologist -phalanstery -phalansterial -phalansterian -phalansterianism -phalansteric -phalansteries -phalansterism -phalansterist -phalanx -phalanxed -phalanxes -phalarica -Phalaris -Phalarism -phalarope -phalaropes -Phalaropodidae -phalera -phalerae -phalerate -phalerated -Phaleucian -Phallaceae -phallaceous -Phallales -phallalgia -phallaneurysm -phallephoric -phalli -phallic -phallical -phallically -phallicism -phallicist -phallics -phallin -phallis -phallism -phallisms -phallist -phallists -phallitis -phallocrypsis -phallodynia -phalloid -phalloncus -phalloplasty -phallorrhagia -phallus -phalluses -Phanar -Phanariot -Phanariote -phanatron -phane -phaneric -phanerite -phanero- -Phanerocarpae -Phanerocarpous -Phanerocephala -phanerocephalous -phanerocodonic -phanerocryst -phanerocrystalline -phanerogam -phanerogamy -Phanerogamia -phanerogamian -phanerogamic -phanerogamous -phanerogenetic -phanerogenic -Phaneroglossa -phaneroglossal -phaneroglossate -phaneromania -phaneromere -phaneromerous -phanerophyte -phaneroscope -phanerosis -Phanerozoic -phanerozonate -Phanerozonia -phany -phanic -phano -phanos -phanotron -phansigar -phantascope -phantasy -phantasia -Phantasiast -Phantasiastic -phantasied -phantasies -phantasying -phantasist -phantasize -phantasm -phantasma -phantasmag -phantasmagory -phantasmagoria -phantasmagorial -phantasmagorially -phantasmagorian -phantasmagorianly -phantasmagorias -phantasmagoric -phantasmagorical -phantasmagorically -phantasmagories -phantasmagorist -phantasmal -phantasmalian -phantasmality -phantasmally -phantasmascope -phantasmata -Phantasmatic -phantasmatical -phantasmatically -phantasmatography -phantasmic -phantasmical -phantasmically -Phantasmist -phantasmogenesis -phantasmogenetic -phantasmograph -phantasmology -phantasmological -phantasms -phantast -phantastic -phantastical -phantasts -Phantasus -phantic -phantom -phantomatic -phantom-fair -phantomy -phantomic -phantomical -phantomically -Phantomist -phantomize -phantomizer -phantomland -phantomlike -phantomnation -phantomry -phantoms -phantom's -phantomship -phantom-white -phantoplex -phantoscope -Phar -Pharaoh -pharaohs -Pharaonic -Pharaonical -PharB -Pharbitis -PharD -Phare -Phareodus -Phares -Pharian -pharyng- -pharyngal -pharyngalgia -pharyngalgic -pharyngeal -pharyngealization -pharyngealized -pharyngectomy -pharyngectomies -pharyngemphraxis -pharynges -pharyngic -pharyngismus -pharyngitic -pharyngitis -pharyngo- -pharyngoamygdalitis -pharyngobranch -pharyngobranchial -pharyngobranchiate -Pharyngobranchii -pharyngocele -pharyngoceratosis -pharyngodynia -pharyngoepiglottic -pharyngoepiglottidean -pharyngoesophageal -pharyngoglossal -pharyngoglossus -pharyngognath -Pharyngognathi -pharyngognathous -pharyngography -pharyngographic -pharyngokeratosis -pharyngolaryngeal -pharyngolaryngitis -pharyngolith -pharyngology -pharyngological -pharyngomaxillary -pharyngomycosis -pharyngonasal -pharyngo-oesophageal -pharyngo-oral -pharyngopalatine -pharyngopalatinus -pharyngoparalysis -pharyngopathy -pharyngoplasty -pharyngoplegy -pharyngoplegia -pharyngoplegic -pharyngopleural -Pharyngopneusta -pharyngopneustal -pharyngorhinitis -pharyngorhinoscopy -pharyngoscleroma -pharyngoscope -pharyngoscopy -pharyngospasm -pharyngotherapy -pharyngotyphoid -pharyngotome -pharyngotomy -pharyngotonsillitis -pharyngoxerosis -pharynogotome -pharynx -pharynxes -Pharisaean -Pharisaic -pharisaical -Pharisaically -Pharisaicalness -Pharisaism -Pharisaist -Pharisean -Pharisee -Phariseeism -pharisees -Pharm -pharmacal -pharmaceutic -pharmaceutical -pharmaceutically -pharmaceuticals -pharmaceutics -pharmaceutist -pharmacy -pharmacic -pharmacies -pharmacist -pharmacists -pharmacite -pharmaco- -pharmacochemistry -pharmacodiagnosis -pharmacodynamic -pharmacodynamical -pharmacodynamically -pharmacodynamics -pharmacoendocrinology -pharmacogenetic -pharmacogenetics -pharmacognosy -pharmacognosia -pharmacognosis -pharmacognosist -pharmacognostic -pharmacognostical -pharmacognostically -pharmacognostics -pharmacography -pharmacokinetic -pharmacokinetics -pharmacol -pharmacolite -pharmacology -pharmacologia -pharmacologic -pharmacological -pharmacologically -pharmacologies -pharmacologist -pharmacologists -pharmacomania -pharmacomaniac -pharmacomaniacal -pharmacometer -pharmacon -pharmaco-oryctology -pharmacopedia -pharmacopedic -pharmacopedics -pharmacopeia -pharmacopeial -pharmacopeian -pharmacopeias -pharmacophobia -pharmacopoeia -pharmacopoeial -pharmacopoeian -pharmacopoeias -pharmacopoeic -pharmacopoeist -pharmacopolist -pharmacoposia -pharmacopsychology -pharmacopsychosis -pharmacosiderite -pharmacotherapy -pharmakoi -pharmakos -PharmD -pharmic -PharmM -pharmuthi -pharo -Pharoah -pharology -Pharomacrus -Pharos -pharoses -Pharr -Pharsalia -Pharsalian -Pharsalus -Phascaceae -phascaceous -Phascogale -Phascolarctinae -Phascolarctos -phascolome -Phascolomyidae -Phascolomys -Phascolonus -Phascum -phase -phaseal -phase-contrast -phased -phaseless -phaselin -phasemeter -phasemy -Phaseolaceae -phaseolin -phaseolous -phaseolunatin -Phaseolus -phaseometer -phaseout -phaseouts -phaser -phasers -Phases -phaseun -phase-wound -phasia -Phasianella -Phasianellidae -phasianic -phasianid -Phasianidae -Phasianinae -phasianine -phasianoid -Phasianus -phasic -phasing -Phasiron -phasis -phasitron -phasm -phasma -phasmajector -phasmatid -Phasmatida -Phasmatidae -Phasmatodea -phasmatoid -Phasmatoidea -phasmatrope -phasmid -Phasmida -Phasmidae -phasmids -phasmoid -phasmophobia -phasogeneous -phasor -phasotropy -phat -Phathon -phatic -phatically -PHC -PhD -pheal -phearse -pheasant -pheasant-eyed -pheasant-plumed -pheasantry -pheasants -pheasant's -pheasant's-eye -pheasant's-eyes -pheasant-shell -pheasant-tailed -pheasantwood -Pheb -Pheba -Phebe -Phecda -Phedra -Phedre -pheeal -Phegeus -Phegopteris -Pheidippides -Pheidole -Phelan -Phelgen -Phelgon -Phelia -Phelips -phellandrene -phellem -phellems -phello- -Phellodendron -phelloderm -phellodermal -phellogen -phellogenetic -phellogenic -phellonic -phelloplastic -phelloplastics -phellum -phelonia -phelonion -phelonionia -phelonions -Phelps -Phemerol -Phemia -phemic -Phemie -Phemius -phen- -phenacaine -phenacetin -phenacetine -phenaceturic -phenacyl -phenacite -Phenacodontidae -Phenacodus -phenakism -phenakistoscope -phenakite -Phenalgin -phenanthraquinone -phenanthrene -phenanthrenequinone -phenanthridine -phenanthridone -phenanthrol -phenanthroline -phenarsine -phenate -phenates -phenazin -phenazine -phenazins -phenazone -Phene -phenegol -phenelzine -phenene -phenethicillin -phenethyl -phenetic -pheneticist -phenetics -phenetidin -phenetidine -phenetol -phenetole -phenetols -phenformin -phengite -phengitical -Pheni -Pheny -phenic -Phenica -phenicate -Phenice -Phenicia -phenicine -phenicious -phenicopter -phenyl -phenylacetaldehyde -phenylacetamide -phenylacetic -phenylaceticaldehyde -phenylalanine -phenylamide -phenylamine -phenylate -phenylated -phenylation -phenylbenzene -phenylboric -phenylbutazone -phenylcarbamic -phenylcarbimide -phenylcarbinol -phenyldiethanolamine -phenylene -phenylenediamine -phenylephrine -phenylethylene -phenylethylmalonylure -phenylethylmalonylurea -phenylglycine -phenylglycolic -phenylglyoxylic -phenylhydrazine -phenylhydrazone -phenylic -phenylketonuria -phenylketonuric -phenylmethane -phenyls -phenylthiocarbamide -phenylthiourea -phenin -phenine -Phenix -phenixes -phenmetrazine -phenmiazine -pheno- -phenobarbital -phenobarbitol -phenobarbitone -phenocain -phenocoll -phenocopy -phenocopies -phenocryst -phenocrystalline -phenocrystic -phenogenesis -phenogenetic -phenol -phenolate -phenolated -phenolia -phenolic -phenolics -phenoliolia -phenolion -phenolions -phenolization -phenolize -phenology -phenologic -phenological -phenologically -phenologist -phenoloid -phenolphthalein -phenol-phthalein -phenols -phenolsulphonate -phenolsulphonephthalein -phenolsulphonic -phenom -phenomena -phenomenal -phenomenalism -phenomenalist -phenomenalistic -phenomenalistically -phenomenalists -phenomenality -phenomenalization -phenomenalize -phenomenalized -phenomenalizing -phenomenally -phenomenalness -phenomenic -phenomenical -phenomenism -phenomenist -phenomenistic -phenomenize -phenomenized -phenomenology -phenomenologic -phenomenological -phenomenologically -phenomenologies -phenomenologist -phenomenon -phenomenona -phenomenons -phenoms -phenoplast -phenoplastic -phenoquinone -phenosafranine -phenosal -phenose -phenosol -phenospermy -phenospermic -phenothiazine -phenotype -phenotypes -phenotypic -phenotypical -phenotypically -phenoxazine -phenoxy -phenoxybenzamine -phenoxid -phenoxide -phenozygous -phentolamine -pheochromocytoma -pheon -pheophyl -pheophyll -pheophytin -Pherae -Phereclus -Pherecratean -Pherecratian -Pherecratic -Pherephatta -pheretrer -Pherkad -pheromonal -pheromone -pheromones -Pherophatta -Phersephatta -Phersephoneia -phew -Phi -Phia -phial -phialae -phialai -phiale -phialed -phialful -phialide -phialine -phialing -phialled -phiallike -phialling -phialophore -phialospore -phials -phycic -Phyciodes -phycite -Phycitidae -phycitol -phyco- -phycochrom -phycochromaceae -phycochromaceous -phycochrome -Phycochromophyceae -phycochromophyceous -phycocyanin -phycocyanogen -phycocolloid -Phycodromidae -phycoerythrin -phycography -phycology -phycological -phycologist -Phycomyces -phycomycete -Phycomycetes -phycomycetous -phycophaein -phycoxanthin -phycoxanthine -Phidiac -Phidian -Phidias -Phidippides -phies -Phyfe -Phigalian -phygogalactic -PHIGS -phil -Phyl -phil- -phyl- -Phil. -Phila -phyla -philabeg -philabegs -phylacobiosis -phylacobiotic -phylactery -phylacteric -phylacterical -phylacteried -phylacteries -phylacterize -phylactic -phylactocarp -phylactocarpal -Phylactolaema -Phylactolaemata -phylactolaematous -Phylactolema -Phylactolemata -philadelphy -Philadelphia -Philadelphian -Philadelphianism -philadelphians -philadelphite -Philadelphus -Philae -phylae -Phil-african -philalethist -philamot -Philan -Philana -Philander -philandered -philanderer -philanderers -philandering -philanders -philanthid -Philanthidae -philanthrope -philanthropy -philanthropian -philanthropic -philanthropical -philanthropically -philanthropies -philanthropine -philanthropinism -philanthropinist -Philanthropinum -philanthropise -philanthropised -philanthropising -philanthropism -philanthropist -philanthropistic -philanthropists -philanthropize -philanthropized -philanthropizing -Philanthus -philantomba -phylar -Phil-arabian -Phil-arabic -phylarch -philarchaist -phylarchy -phylarchic -phylarchical -philaristocracy -phylartery -philately -philatelic -philatelical -philatelically -philatelies -philatelism -philatelist -philatelistic -philatelists -Philathea -philathletic -philauty -phylaxis -phylaxises -Philbert -Philby -Philbin -Philbo -Philbrook -Philcox -phile -phyle -Philem -Philem. -philematology -Philemol -Philemon -Philender -phylephebic -Philepitta -Philepittidae -phyleses -Philesia -phylesis -phylesises -Philetaerus -phyletic -phyletically -phyletism -Phyleus -Philharmonic -philharmonics -philhellene -philhellenic -philhellenism -philhellenist -philhymnic -philhippic -philia -philiater -philibeg -philibegs -Philibert -philic -phylic -Philydraceae -philydraceous -Philina -Philine -Philip -Philipa -Philipines -Philipp -Philippa -Philippan -Philippe -Philippeville -Philippi -Philippian -Philippians -Philippic -philippicize -Philippics -philippina -Philippine -Philippines -Philippism -Philippist -Philippistic -Philippizate -philippize -philippizer -Philippopolis -Philipps -philippus -Philips -Philipsburg -Philipson -Philyra -Philis -Phylis -Phylys -Phyliss -philister -Philistia -Philistian -Philistine -Philistinely -philistines -Philistinian -Philistinic -Philistinish -Philistinism -Philistinize -Philius -phill -phyll -phyll- -Phyllachora -Phyllactinia -Phillada -phyllade -phyllamania -phyllamorph -Phillane -Phyllanthus -phyllary -phyllaries -Phyllaurea -Philly -Phillida -Phyllida -Phillie -phylliform -phillilew -philliloo -phyllin -phylline -Phillip -Phillipe -phillipeener -Phillipp -Phillippe -phillippi -Phillips -Phillipsburg -phillipsine -phillipsite -Phillipsville -Phillyrea -phillyrin -Phillis -Phyllis -Phyllys -phyllite -phyllites -phyllitic -Phyllitis -Phyllium -phyllo -phyllo- -phyllobranchia -phyllobranchial -phyllobranchiate -Phyllocactus -phyllocarid -Phyllocarida -phyllocaridan -Phylloceras -phyllocerate -Phylloceratidae -phyllocyanic -phyllocyanin -phyllocyst -phyllocystic -phylloclad -phylloclade -phyllocladia -phyllocladioid -phyllocladium -phyllocladous -phyllode -phyllodes -phyllody -phyllodia -phyllodial -phyllodination -phyllodineous -phyllodiniation -phyllodinous -phyllodium -Phyllodoce -phylloerythrin -phyllogenetic -phyllogenous -phylloid -phylloidal -phylloideous -phylloids -phyllomancy -phyllomania -phyllome -phyllomes -phyllomic -phyllomorph -phyllomorphy -phyllomorphic -phyllomorphosis -Phyllophaga -phyllophagan -phyllophagous -phyllophyllin -phyllophyte -phyllophore -phyllophorous -phyllopyrrole -phyllopod -Phyllopoda -phyllopodan -phyllopode -phyllopodiform -phyllopodium -phyllopodous -phylloporphyrin -Phyllopteryx -phylloptosis -phylloquinone -phyllorhine -phyllorhinine -phyllos -phylloscopine -Phylloscopus -phyllosilicate -phyllosiphonic -phyllosoma -Phyllosomata -phyllosome -Phyllospondyli -phyllospondylous -Phyllostachys -Phyllosticta -Phyllostoma -Phyllostomatidae -Phyllostomatinae -phyllostomatoid -phyllostomatous -phyllostome -Phyllostomidae -Phyllostominae -phyllostomine -phyllostomous -Phyllostomus -phyllotactic -phyllotactical -phyllotaxy -phyllotaxic -phyllotaxis -phyllous -phylloxanthin -Phylloxera -phylloxerae -phylloxeran -phylloxeras -phylloxeric -Phylloxeridae -phyllozooid -phillumenist -Philmont -Philo -Phylo -philo- -phylo- -Philo-athenian -philobiblian -philobiblic -philobiblical -philobiblist -philobotanic -philobotanist -philobrutish -philocaly -philocalic -philocalist -philocathartic -philocatholic -philocyny -philocynic -philocynical -philocynicism -philocomal -Philoctetes -philocubist -philodemic -philodendra -Philodendron -philodendrons -philodespot -philodestructiveness -Philodina -Philodinidae -philodox -philodoxer -philodoxical -philodramatic -philodramatist -Philoetius -philofelist -philofelon -Philo-french -Philo-Gallic -Philo-gallicism -philogarlic -philogastric -philogeant -phylogenesis -phylogenetic -phylogenetical -phylogenetically -phylogeny -phylogenic -phylogenist -philogenitive -philogenitiveness -Philo-german -Philo-germanism -phylogerontic -phylogerontism -philogynaecic -philogyny -philogynist -philogynous -philograph -phylography -philographic -Philo-greek -Philohela -philohellenian -Philo-hindu -Philo-yankee -Philo-yankeeist -Philo-jew -philokleptic -philol -philol. -Philo-laconian -Philolaus -philoleucosis -philologaster -philologastry -philologer -philology -phylology -philologian -philologic -philological -philologically -philologist -philologistic -philologists -philologize -philologue -Philomachus -Philomath -philomathematic -philomathematical -philomathy -philomathic -philomathical -philome -Philomel -Philomela -philomelanist -philomelian -philomels -Philomena -philomystic -philomythia -philomythic -Philomont -philomuse -philomusical -phylon -philonatural -phyloneanic -philoneism -phylonepionic -Philonian -Philonic -Philonis -Philonism -Philonist -philonium -philonoist -Philonome -Phylonome -Philoo -philopagan -philopater -philopatrian -Philo-peloponnesian -philopena -philophilosophos -philopig -philoplutonic -philopoet -philopogon -Philo-pole -philopolemic -philopolemical -Philo-polish -philopornist -philoprogeneity -philoprogenitive -philoprogenitiveness -philopterid -Philopteridae -philopublican -philoradical -philorchidaceous -philornithic -philorthodox -Philo-russian -philos -philos. -Philo-slav -Philo-slavism -philosoph -philosophaster -philosophastering -philosophastry -philosophe -philosophedom -philosopheme -philosopher -philosopheress -philosophers -philosopher's -philosophership -philosophes -philosophess -philosophy -philosophic -philosophical -philosophically -philosophicalness -philosophicide -philosophico- -philosophicohistorical -philosophicojuristic -philosophicolegal -philosophicopsychological -philosophicoreligious -philosophicotheological -philosophies -philosophilous -philosophy's -philosophisation -philosophise -philosophised -philosophiser -philosophising -philosophism -philosophist -philosophister -philosophistic -philosophistical -philosophization -philosophize -philosophized -philosophizer -philosophizers -philosophizes -philosophizing -philosophling -philosophobia -philosophocracy -philosophuncule -philosophunculist -philotadpole -philotechnic -philotechnical -philotechnist -Philo-teuton -Philo-teutonism -philothaumaturgic -philotheism -philotheist -philotheistic -philotheosophical -philotherian -philotherianism -Philotria -Philo-turk -Philo-turkish -Philo-turkism -philous -Philoxenian -philoxygenous -Philo-zionist -philozoic -philozoist -philozoonist -Philpot -Philps -philter -philtered -philterer -philtering -philterproof -philters -philtra -philtre -philtred -philtres -philtring -philtrum -phylum -phylumla -phyma -phymas -phymata -phymatic -phymatid -Phymatidae -Phymatodes -phymatoid -phymatorhysin -phymatosis -phi-meson -phimosed -phimoses -Phymosia -phimosis -phimotic -Phina -Phineas -Phineus -Phio -Phiomia -Phiona -Phionna -Phip -phi-phenomena -phi-phenomenon -phippe -Phippen -Phipps -Phippsburg -Phira -phyre -phiroze -phis -phys -phys. -Physa -physagogue -Physalia -physalian -Physaliidae -Physalis -physalite -Physalospora -Physapoda -Physaria -Physcia -Physciaceae -physcioid -Physcomitrium -physed -physeds -physes -Physeter -Physeteridae -Physeterinae -physeterine -physeteroid -Physeteroidea -physharmonica -physi- -physianthropy -physiatric -physiatrical -physiatrics -physiatrist -physic -physical -physicalism -physicalist -physicalistic -physicalistically -physicality -physicalities -physically -physicalness -physicals -physician -physicianary -physiciancy -physicianed -physicianer -physicianess -physicianing -physicianless -physicianly -physicians -physician's -physicianship -physicism -physicist -physicists -physicist's -physicked -physicker -physicky -physicking -physicks -physic-nut -physico- -physicoastronomical -physicobiological -physicochemic -physicochemical -physicochemically -physicochemist -physicochemistry -physicogeographical -physicologic -physicological -physicomathematical -physicomathematics -physicomechanical -physicomedical -physicomental -physicomorph -physicomorphic -physicomorphism -physicooptics -physicophilosophy -physicophilosophical -physicophysiological -physicopsychical -physicosocial -physicotheology -physico-theology -physicotheological -physicotheologist -physicotherapeutic -physicotherapeutics -physicotherapy -physics -physid -Physidae -physiform -Physik -physio- -physiochemical -physiochemically -physiochemistry -physiocracy -physiocrat -physiocratic -physiocratism -physiocratist -physiogenesis -physiogenetic -physiogeny -physiogenic -physiognomy -physiognomic -physiognomical -physiognomically -physiognomics -physiognomies -physiognomist -physiognomize -physiognomonic -physiognomonical -physiognomonically -physiogony -physiographer -physiography -physiographic -physiographical -physiographically -physiol -physiolater -physiolatry -physiolatrous -physiologer -physiology -physiologian -physiologic -physiological -physiologically -physiologicoanatomic -physiologies -physiologist -physiologists -physiologize -physiologue -physiologus -physiopathology -physiopathologic -physiopathological -physiopathologically -physiophilist -physiophilosopher -physiophilosophy -physiophilosophical -physiopsychic -physiopsychical -physiopsychology -physiopsychological -physiosociological -physiosophy -physiosophic -physiotherapeutic -physiotherapeutical -physiotherapeutics -physiotherapy -physiotherapies -physiotherapist -physiotherapists -physiotype -physiotypy -physique -physiqued -physiques -physis -physitheism -physitheist -physitheistic -physitism -physiurgy -physiurgic -physnomy -physo- -physocarpous -Physocarpus -physocele -physoclist -Physoclisti -physoclistic -physoclistous -Physoderma -physogastry -physogastric -physogastrism -physometra -Physonectae -physonectous -physophora -Physophorae -physophoran -physophore -physophorous -physopod -Physopoda -physopodan -Physostegia -Physostigma -physostigmine -physostomatous -physostome -Physostomi -physostomous -PHYSREV -phit -phyt- -phytalbumose -Phytalus -phytane -phytanes -phytase -phytate -phyte -Phytelephas -Phyteus -Phithom -phytic -phytiferous -phytiform -phytyl -phytin -phytins -phytivorous -phyto- -phytoalexin -phytobacteriology -phytobezoar -phytobiology -phytobiological -phytobiologist -phytochemical -phytochemically -phytochemist -phytochemistry -phytochlore -phytochlorin -phytochrome -phytocidal -phytocide -phytoclimatology -phytoclimatologic -phytoclimatological -phytocoenoses -phytocoenosis -phytodynamics -phytoecology -phytoecological -phytoecologist -Phytoflagellata -phytoflagellate -phytogamy -phytogenesis -phytogenetic -phytogenetical -phytogenetically -phytogeny -phytogenic -phytogenous -phytogeographer -phytogeography -phytogeographic -phytogeographical -phytogeographically -phytoglobulin -phytognomy -phytograph -phytographer -phytography -phytographic -phytographical -phytographist -phytohaemagglutinin -phytohemagglutinin -phytohormone -phytoid -phytokinin -phytol -Phytolacca -Phytolaccaceae -phytolaccaceous -phytolatry -phytolatrous -phytolite -phytolith -phytolithology -phytolithological -phytolithologist -phytology -phytologic -phytological -phytologically -phytologist -phytols -phytoma -Phytomastigina -Phytomastigoda -phytome -phytomer -phytomera -phytometer -phytometry -phytometric -phytomonad -Phytomonadida -Phytomonadina -Phytomonas -phytomorphic -phytomorphology -phytomorphosis -phyton -phytonadione -phitones -phytonic -phytonomy -phytonomist -phytons -phytooecology -phytopaleontology -phytopaleontologic -phytopaleontological -phytopaleontologist -phytoparasite -phytopathogen -phytopathogenic -phytopathology -phytopathologic -phytopathological -phytopathologist -Phytophaga -phytophagan -phytophage -phytophagy -phytophagic -Phytophagineae -phytophagous -phytopharmacology -phytopharmacologic -phytophenology -phytophenological -phytophil -phytophylogenetic -phytophylogeny -phytophylogenic -phytophilous -phytophysiology -phytophysiological -Phytophthora -phytoplankton -phytoplanktonic -phytoplasm -phytopsyche -phytoptid -Phytoptidae -phytoptose -phytoptosis -Phytoptus -phytorhodin -phytosaur -Phytosauria -phytosaurian -phytoserology -phytoserologic -phytoserological -phytoserologically -phytosynthesis -phytosis -phytosociology -phytosociologic -phytosociological -phytosociologically -phytosociologist -phytosterin -phytosterol -phytostrote -phytosuccivorous -phytotaxonomy -phytotechny -phytoteratology -phytoteratologic -phytoteratological -phytoteratologist -Phytotoma -phytotomy -Phytotomidae -phytotomist -phytotopography -phytotopographical -phytotoxic -phytotoxicity -phytotoxin -phytotron -phytovitellin -Phytozoa -phytozoan -Phytozoaria -phytozoon -Phitsanulok -Phyxius -Phiz -phizes -phizog -PhL -phleb- -phlebalgia -phlebangioma -phlebarteriectasia -phlebarteriodialysis -phlebectasy -phlebectasia -phlebectasis -phlebectomy -phlebectopy -phlebectopia -phlebemphraxis -phlebenteric -phlebenterism -phlebitic -phlebitis -phlebo- -Phlebodium -phlebogram -phlebograph -phlebography -phlebographic -phlebographical -phleboid -phleboidal -phlebolite -phlebolith -phlebolithiasis -phlebolithic -phlebolitic -phlebology -phlebological -phlebometritis -phlebopexy -phleboplasty -phleborrhage -phleborrhagia -phleborrhaphy -phleborrhexis -phlebosclerosis -phlebosclerotic -phlebostasia -phlebostasis -phlebostenosis -phlebostrepsis -phlebothrombosis -phlebotome -phlebotomy -phlebotomic -phlebotomical -phlebotomically -phlebotomies -phlebotomisation -phlebotomise -phlebotomised -phlebotomising -phlebotomist -phlebotomization -phlebotomize -Phlebotomus -Phlegethon -Phlegethontal -Phlegethontic -Phlegyas -phlegm -phlegma -phlegmagogue -phlegmasia -phlegmatic -phlegmatical -phlegmatically -phlegmaticalness -phlegmaticly -phlegmaticness -phlegmatism -phlegmatist -phlegmatized -phlegmatous -phlegmy -phlegmier -phlegmiest -phlegmless -phlegmon -phlegmonic -phlegmonoid -phlegmonous -phlegms -Phleum -Phlias -phlyctaena -phlyctaenae -phlyctaenula -phlyctena -phlyctenae -phlyctenoid -phlyctenula -phlyctenule -phlyzacious -phlyzacium -phlobaphene -phlobatannin -phloem -phloems -phloeophagous -phloeoterma -phloeum -phlogisma -phlogistian -phlogistic -phlogistical -phlogisticate -phlogistication -phlogiston -phlogistonism -phlogistonist -phlogogenetic -phlogogenic -phlogogenous -phlogopite -phlogosed -phlogosin -phlogosis -phlogotic -Phlomis -phloretic -phloretin -phlorhizin -phloridzin -phlorina -phlorizin -phloro- -phloroglucic -phloroglucin -phloroglucinol -phlorol -phlorone -phlorrhizin -phlox -phloxes -phloxin -PhM -pho -phobe -Phobetor -phoby -phobia -phobiac -phobias -phobic -phobics -phobies -phobism -phobist -phobophobia -Phobos -Phobus -phoca -phocacean -phocaceous -Phocaea -Phocaean -Phocaena -Phocaenina -phocaenine -phocal -Phocean -phocenate -phocenic -phocenin -Phocian -phocid -Phocidae -phociform -Phocylides -Phocinae -phocine -Phocion -Phocis -phocodont -Phocodontia -phocodontic -Phocoena -phocoid -phocomeli -phocomelia -phocomelous -phocomelus -phoebads -Phoebe -Phoebean -phoebes -Phoebus -Phoenicaceae -phoenicaceous -Phoenicales -phoenicean -Phoenicia -Phoenician -Phoenicianism -phoenicians -Phoenicid -Phoenicis -phoenicite -Phoenicize -phoenicochroite -phoenicopter -Phoenicopteridae -Phoenicopteriformes -phoenicopteroid -Phoenicopteroideae -phoenicopterous -Phoenicopterus -Phoeniculidae -Phoeniculus -phoenicurous -phoenigm -Phoenix -phoenixes -phoenixity -Phoenixlike -Phoenixville -phoh -phokomelia -pholad -Pholadacea -pholadian -pholadid -Pholadidae -Pholadinea -pholadoid -Pholas -pholcid -Pholcidae -pholcoid -Pholcus -pholido -pholidolite -pholidosis -Pholidota -pholidote -Pholiota -Phoma -Phomopsis -Phomvihane -phon -phon- -phon. -phonal -phonasthenia -phonate -phonated -phonates -phonating -phonation -phonatory -phonautogram -phonautograph -phonautographic -phonautographically -phone -phoned -phoney -phoneidoscope -phoneidoscopic -phoneyed -phoneier -phoneiest -phone-in -phoneys -Phonelescope -phonematic -phonematics -phoneme -phonemes -phoneme's -phonemic -phonemically -phonemicist -phonemicize -phonemicized -phonemicizing -phonemics -phonendoscope -phoner -phones -phonesis -phonestheme -phonesthemic -phonet -phonetic -phonetical -phonetically -phonetician -phoneticians -phoneticism -phoneticist -phoneticization -phoneticize -phoneticogrammatical -phoneticohieroglyphic -phonetics -phonetism -phonetist -phonetization -phonetize -Phonevision -phonghi -phony -phoniatry -phoniatric -phoniatrics -phonic -phonically -phonics -phonied -phonier -phonies -phoniest -phonying -phonikon -phonily -phoniness -phoning -phonism -phono -phono- -phonocamptic -phonocardiogram -phonocardiograph -phonocardiography -phonocardiographic -phonocinematograph -phonodeik -phonodynamograph -phonoglyph -phonogram -phonogramic -phonogramically -phonogrammatic -phonogrammatical -phonogrammic -phonogrammically -phonograph -phonographally -phonographer -phonography -phonographic -phonographical -phonographically -phonographist -phonographs -phonol -phonol. -phonolite -phonolitic -phonologer -phonology -phonologic -phonological -phonologically -phonologist -phonologists -phonomania -phonometer -phonometry -phonometric -phonomimic -phonomotor -phonon -phonons -phonopathy -phonophile -phonophobia -phonophone -phonophore -phonophoric -phonophorous -phonophote -phonophotography -phonophotoscope -phonophotoscopic -phonoplex -phonopore -phonoreception -phonoreceptor -phonorecord -phonos -phonoscope -phonotactics -phonotelemeter -phonotype -phonotyper -phonotypy -phonotypic -phonotypical -phonotypically -phonotypist -phons -Phonsa -phoo -phooey -phooka -phoo-phoo -Phora -Phoradendron -phoranthium -phorate -phorates -phorbin -Phorcys -phore -phoresy -phoresis -phoria -phorid -Phoridae -phorminx -Phormium -phorology -phorometer -phorometry -phorometric -phorone -Phoroneus -phoronic -phoronid -Phoronida -Phoronidea -Phoronis -phoronomy -phoronomia -phoronomic -phoronomically -phoronomics -Phororhacidae -Phororhacos -phoroscope -phorous -phorozooid -phorrhea -phos -phos- -phose -phosgene -phosgenes -phosgenic -phosgenite -phosis -phosph- -phosphagen -phospham -phosphamic -phosphamide -phosphamidic -phosphamidon -phosphammonium -phosphatase -phosphate -phosphated -phosphatemia -phosphates -phosphate's -phosphatese -phosphatic -phosphatide -phosphatidic -phosphatidyl -phosphatidylcholine -phosphation -phosphatisation -phosphatise -phosphatised -phosphatising -phosphatization -phosphatize -phosphatized -phosphatizing -phosphaturia -phosphaturic -phosphene -phosphenyl -phosphid -phosphide -phosphids -phosphyl -phosphin -phosphinate -phosphine -phosphinic -phosphins -phosphite -phospho -phospho- -phosphoaminolipide -phosphocarnic -phosphocreatine -phosphodiesterase -phosphoenolpyruvate -phosphoferrite -phosphofructokinase -phosphoglyceraldehyde -phosphoglycerate -phosphoglyceric -phosphoglycoprotein -phosphoglucomutase -phosphokinase -phospholipase -phospholipid -phospholipide -phospholipin -phosphomolybdate -phosphomolybdic -phosphomonoesterase -phosphonate -phosphonic -phosphonium -phosphonuclease -phosphophyllite -phosphophori -phosphoprotein -Phosphor -phosphorate -phosphorated -phosphorating -phosphore -phosphoreal -phosphorent -phosphoreous -phosphoresce -phosphoresced -phosphorescence -phosphorescences -phosphorescent -phosphorescently -phosphorescing -phosphoreted -phosphoretted -phosphorhidrosis -phosphori -phosphoric -phosphorical -phosphoriferous -phosphoryl -phosphorylase -phosphorylate -phosphorylated -phosphorylating -phosphorylation -phosphorylative -phosphorisation -phosphorise -phosphorised -phosphorising -phosphorism -phosphorite -phosphoritic -phosphorize -phosphorizing -phosphoro- -phosphorogen -phosphorogene -phosphorogenic -phosphorograph -phosphorography -phosphorographic -phosphorolysis -phosphorolytic -phosphoroscope -phosphorous -phosphors -phosphoruria -Phosphorus -phosphosilicate -phosphotartaric -phosphotungstate -phosphotungstic -phosphowolframic -phosphuranylite -phosphuret -phosphuria -phoss -phossy -phot -phot- -phot. -photaesthesia -photaesthesis -photaesthetic -photal -photalgia -photechy -photelectrograph -photeolic -photerythrous -photesthesis -photic -photically -photics -Photima -Photina -Photinia -Photinian -Photinianism -photism -photistic -Photius -photo -photo- -photoactinic -photoactivate -photoactivation -photoactive -photoactivity -photoaesthetic -photoalbum -photoalgraphy -photoanamorphosis -photoaquatint -photoautotrophic -photoautotrophically -Photobacterium -photobathic -photobiography -photobiology -photobiologic -photobiological -photobiologist -photobiotic -photobromide -photocampsis -photocatalysis -photocatalyst -photocatalytic -photocatalyzer -photocathode -PHOTOCD -photocell -photocells -photocellulose -photoceptor -photoceramic -photoceramics -photoceramist -photochemic -photochemical -photochemically -photochemigraphy -photochemist -photochemistry -photochloride -photochlorination -photochromascope -photochromatic -photochrome -photochromy -photochromic -photochromism -photochromography -photochromolithograph -photochromoscope -photochromotype -photochromotypy -photochronograph -photochronography -photochronographic -photochronographical -photochronographically -photocinesis -photocoagulation -photocollograph -photocollography -photocollographic -photocollotype -photocombustion -photocompose -photocomposed -photocomposer -photocomposes -photocomposing -photocomposition -photoconduction -photoconductive -photoconductivity -photoconductor -photocopy -photocopied -photocopier -photocopiers -photocopies -photocopying -photocrayon -photocurrent -photodecomposition -photodensitometer -photodermatic -photodermatism -photodetector -photodynamic -photodynamical -photodynamically -photodynamics -photodiode -photodiodes -photodisintegrate -photodisintegration -photodysphoria -photodissociate -photodissociation -photodissociative -photodrama -photodramatic -photodramatics -photodramatist -photodramaturgy -photodramaturgic -photodrome -photodromy -photoduplicate -photoduplication -photoed -photoelastic -photoelasticity -photoelectric -photo-electric -photoelectrical -photoelectrically -photoelectricity -photoelectron -photoelectronic -photoelectronics -photoelectrotype -photoemission -photoemissive -photoeng -photoengrave -photoengraved -photoengraver -photoengravers -photoengraves -photoengraving -photo-engraving -photoengravings -photoepinasty -photoepinastic -photoepinastically -photoesthesis -photoesthetic -photoetch -photoetched -photoetcher -photoetching -photofilm -photofinish -photo-finish -photofinisher -photofinishing -photofission -Photofit -photoflash -photoflight -photoflood -photofloodlamp -photofluorogram -photofluorograph -photofluorography -photofluorographic -photog -photogalvanograph -photogalvanography -photo-galvanography -photogalvanographic -photogastroscope -photogelatin -photogen -photogene -photogenetic -photogeny -photogenic -photogenically -photogenous -photogeology -photogeologic -photogeological -photogyric -photoglyph -photoglyphy -photoglyphic -photoglyphography -photoglyptic -photoglyptography -photogram -photogrammeter -photogrammetry -photogrammetric -photogrammetrical -photogrammetrist -photograph -photographable -photographally -photographed -photographee -photographer -photographeress -photographers -photographess -photography -photographic -photographical -photographically -photographies -photographing -photographist -photographize -photographometer -photographs -photograt -photogravure -photogravurist -photogs -photohalide -photoheliograph -photoheliography -photoheliographic -photoheliometer -photohyponasty -photohyponastic -photohyponastically -photoimpression -photoinactivation -photoinduced -photoinduction -photoinductive -photoing -photoinhibition -photointaglio -photoionization -photoisomeric -photoisomerization -photoist -photojournalism -photojournalist -photojournalistic -photojournalists -photokinesis -photokinetic -photolysis -photolyte -photolith -photolitho -photolithograph -photolithographer -photolithography -photolithographic -photolithographically -photolithoprint -photolytic -photolytically -photolyzable -photolyze -photology -photologic -photological -photologist -photoluminescence -photoluminescent -photoluminescently -photoluminescents -photom -photom. -photoma -photomacrograph -photomacrography -photomagnetic -photomagnetism -photomap -photomappe -photomapped -photomapper -photomappi -photomapping -photomaps -photomechanical -photomechanically -photometeor -photometer -photometers -photometry -photometric -photometrical -photometrically -photometrician -photometrist -photometrograph -photomezzotype -photomicrogram -photomicrograph -photomicrographer -photomicrography -photomicrographic -photomicrographical -photomicrographically -photomicrographs -photomicroscope -photomicroscopy -photomicroscopic -photomontage -photomorphogenesis -photomorphogenic -photomorphosis -photo-mount -photomultiplier -photomural -photomurals -Photon -photonasty -photonastic -photonegative -photonephograph -photonephoscope -photoneutron -photonic -photonosus -photons -photonuclear -photo-offset -photooxidation -photooxidative -photopathy -photopathic -photoperceptive -photoperimeter -photoperiod -photoperiodic -photoperiodically -photoperiodism -photophane -photophygous -photophile -photophily -photophilic -photophilous -photophysical -photophysicist -photophobe -photophobia -photophobic -photophobous -photophone -photophony -photophonic -photophore -photophoresis -photophosphorescent -photophosphorylation -photopia -photopias -photopic -photopile -photopitometer -photoplay -photoplayer -photoplays -photoplaywright -photopography -photopolarigraph -photopolymer -photopolymerization -photopositive -photoprint -photoprinter -photoprinting -photoprocess -photoproduct -photoproduction -photoproton -photoptometer -photoradio -Photoradiogram -photoreactivating -photoreactivation -photoreception -photoreceptive -photoreceptor -photoreconnaissance -photo-reconnaissance -photorecorder -photorecording -photoreduction -photoregression -photorelief -photoresist -photoresistance -photorespiration -photo-retouch -photos -photo's -photosalt -photosantonic -photoscope -photoscopy -photoscopic -photosculptural -photosculpture -photosensitive -photosensitiveness -photosensitivity -photosensitization -photosensitize -photosensitized -photosensitizer -photosensitizes -photosensitizing -photosensory -photoset -photo-set -photosets -photosetter -photosetting -photo-setting -photosyntax -photosynthate -photosyntheses -photosynthesis -photosynthesises -photosynthesize -photosynthesized -photosynthesizes -photosynthesizing -photosynthetic -photosynthetically -photosynthometer -photospectroheliograph -photospectroscope -photospectroscopy -photospectroscopic -photospectroscopical -photosphere -photospheres -photospheric -photospherically -photostability -photostable -Photostat -photostated -photostater -photostatic -photostatically -photostating -photostationary -photostats -photostatted -photostatter -photostatting -photostereograph -photosurveying -phototachometer -phototachometry -phototachometric -phototachometrical -phototactic -phototactically -phototactism -phototaxy -phototaxis -phototechnic -phototelegraph -phototelegraphy -phototelegraphic -phototelegraphically -phototelephone -phototelephony -phototelescope -phototelescopic -phototheodolite -phototherapeutic -phototherapeutics -phototherapy -phototherapic -phototherapies -phototherapist -photothermic -phototimer -phototype -phototypesetter -phototypesetters -phototypesetting -phototypy -phototypic -phototypically -phototypist -phototypography -phototypographic -phototonic -phototonus -phototopography -phototopographic -phototopographical -phototransceiver -phototransistor -phototrichromatic -phototrope -phototroph -phototrophy -phototrophic -phototropy -phototropic -phototropically -phototropism -phototube -photovisual -photovitrotype -photovoltaic -photoxylography -photozinco -photozincograph -photozincography -photozincographic -photozincotype -photozincotypy -photphotonegative -Photronic -phots -photuria -phousdar -Phox -phpht -phr -phr. -Phractamphibia -phragma -Phragmidium -Phragmites -Phragmocyttares -phragmocyttarous -phragmocone -phragmoconic -phragmoid -phragmoplast -phragmosis -phrampel -phrarisaical -phrasable -phrasal -phrasally -phrase -phraseable -phrased -phrasey -phraseless -phrasem -phrasemake -phrasemaker -phrasemaking -phraseman -phrasemonger -phrasemongery -phrasemongering -phraseogram -phraseograph -phraseography -phraseographic -phraseology -phraseologic -phraseological -phraseologically -phraseologies -phraseologist -phraser -phrases -phrasy -phrasify -phrasiness -phrasing -phrasings -phrator -phratral -phratry -phratria -phratriac -phratrial -phratric -phratries -phreatic -phreatophyte -phreatophytic -phren -phren- -phren. -phrenesia -phrenesiac -phrenesis -phrenetic -phrenetical -phrenetically -phreneticness -phrenia -phrenic -phrenicectomy -phrenicocolic -phrenicocostal -phrenicogastric -phrenicoglottic -phrenicohepatic -phrenicolienal -phrenicopericardiac -phrenicosplenic -phrenicotomy -phrenics -phrenitic -phrenitis -phreno- -phrenocardia -phrenocardiac -phrenocolic -phrenocostal -phrenodynia -phrenogastric -phrenoglottic -phrenogrady -phrenograih -phrenogram -phrenograph -phrenography -phrenohepatic -phrenol -phrenologer -phrenology -phrenologic -phrenological -phrenologically -phrenologies -phrenologist -phrenologists -phrenologize -phrenomagnetism -phrenomesmerism -phrenopathy -phrenopathia -phrenopathic -phrenopericardiac -phrenoplegy -phrenoplegia -phrenosin -phrenosinic -phrenospasm -phrenosplenic -phrenotropic -phrenoward -phrensy -phrensied -phrensies -phrensying -Phryganea -phryganeid -Phryganeidae -phryganeoid -Phrygia -Phrygian -Phrygianize -phrygium -Phryma -Phrymaceae -phrymaceous -Phryne -phrynid -Phrynidae -phrynin -phrynoid -Phrynosoma -Phrixus -phronemophobia -phronesis -Phronima -Phronimidae -phrontistery -phrontisterion -phrontisterium -PHS -pht -phtalic -phthalacene -phthalan -phthalanilic -phthalate -phthalazin -phthalazine -phthalein -phthaleine -phthaleinometer -phthalic -phthalid -phthalide -phthalyl -phthalylsulfathiazole -phthalimide -phthalin -phthalins -phthalocyanine -phthanite -Phthartolatrae -Phthia -phthinoid -phthiocol -phthiriasis -Phthirius -phthirophagous -phthises -phthisic -phthisical -phthisicky -phthisics -phthisiogenesis -phthisiogenetic -phthisiogenic -phthisiology -phthisiologist -phthisiophobia -phthisiotherapeutic -phthisiotherapy -phthisipneumony -phthisipneumonia -phthisis -phthongal -phthongometer -phthor -phthoric -phu -phugoid -Phuket -phulkari -phulwa -phulwara -phut -phuts -PI -PY -py- -PIA -pya -pia-arachnitis -pia-arachnoid -piaba -piacaba -Piacenza -piacevole -piache -piacle -piacula -piacular -piacularity -piacularly -piacularness -piaculum -pyaemia -pyaemias -pyaemic -Piaf -piaffe -piaffed -piaffer -piaffers -piaffes -piaffing -Piaget -pial -pyal -piala -pialyn -pyalla -pia-matral -pian -Piane -Pyanepsia -pianet -pianeta -pianette -piangendo -pianic -pianino -pianism -pianisms -pianissimo -pianissimos -pianist -pianiste -pianistic -pianistically -pianistiec -pianists -pianka -Piankashaw -piannet -piano -pianoforte -pianofortes -pianofortist -pianograph -Pianokoto -Pianola -pianolist -pianologue -piano-organ -pianos -piano's -pianosa -piano-violin -pians -piarhaemic -piarhemia -piarhemic -Piarist -Piaroa -Piaroan -Piaropus -Piarroan -pyarthrosis -pias -pyas -Piasa -piasaba -piasabas -piasava -piasavas -piassaba -piassabas -piassava -piassavas -Piast -piaster -piasters -piastre -piastres -Piatigorsk -Pyatigorsk -Piatigorsky -piation -Pyatt -piatti -Piaui -Piave -piazadora -piazin -piazine -piazza -piazzaed -piazzaless -piazzalike -piazzas -piazza's -piazze -piazzetta -Piazzi -piazzian -pibal -pibals -pibcorn -pibgorn -piblockto -piblokto -pibloktos -pibroch -pibroches -pibrochs -PIC -Pica -Picabia -Picacho -picachos -picador -picadores -picadors -picadura -Picae -Picayune -picayunes -picayunish -picayunishly -picayunishness -pical -picamar -picaninny -picaninnies -PICAO -picara -picaras -Picard -Picardi -Picardy -picarel -picaresque -picary -Picariae -picarian -Picarii -picaro -picaroon -picarooned -picarooning -picaroons -picaros -picas -Picasso -piccadill -Piccadilly -piccage -piccalilli -piccalillis -piccanin -piccaninny -piccaninnies -piccante -Piccard -piccata -Piccini -picciotto -Picco -piccolo -piccoloist -Piccolomini -piccolos -pice -Picea -picein -Picene -Picenian -piceoferruginous -piceotestaceous -piceous -piceworth -Pich -pyche -pichey -Picher -pichi -pichiciago -pichiciagos -pichiciego -pichuric -pichurim -Pici -Picidae -piciform -Piciformes -Picinae -picine -Picinni -pick -pick- -pickaback -pick-a-back -pickable -pickableness -pickadil -pickadils -pickage -pickaninny -pickaninnies -Pickar -Pickard -pickaroon -pickaway -pickax -pickaxe -pickaxed -pickaxes -pickaxing -pickback -pick-bearing -picked -pickedevant -picke-devant -picked-hatch -pickedly -pickedness -pickee -pickeer -pickeered -pickeering -pickeers -pickel -Pickelhaube -Pickens -Picker -pickerel -pickerels -pickerelweed -pickerel-weed -pickery -Pickering -pickeringite -Pickerington -pickers -picker-up -picket -picketboat -picketed -picketeer -picketer -picketers -picketing -pickets -Pickett -Pickford -pickfork -picky -pickier -pickiest -pickietar -pickin -picking -pickings -pickle -pickle-cured -pickled -pickle-herring -picklelike -pickleman -pickler -pickles -pickleweed -pickleworm -pickling -picklock -picklocks -Pickman -pickmaw -pickmen -pick-me-up -Pickney -picknick -picknicker -pick-nosed -pickoff -pick-off -pickoffs -pickout -pickover -pickpenny -pickpocket -pickpocketism -pickpocketry -pickpockets -pickpole -pickproof -pickpurse -Pickrell -picks -pickshaft -picksman -picksmith -picksome -picksomeness -Pickstown -pickthank -pickthankly -pickthankness -pickthatch -Pickton -picktooth -pickup -pick-up -pickups -pickup's -pick-up-sticks -pickwick -Pickwickian -Pickwickianism -Pickwickianly -pickwicks -pickwork -picloram -piclorams -Pycnanthemum -pycnia -pycnial -picnic -pycnic -picnicked -picnicker -picnickery -picnickers -picnicky -Picnickian -picnicking -picnickish -picnics -picnic's -pycnid -pycnidia -pycnidial -pycnidiophore -pycnidiospore -pycnidium -pycninidia -pycniospore -pycnite -pycnium -pycno- -Pycnocoma -pycnoconidium -pycnodont -Pycnodonti -Pycnodontidae -pycnodontoid -Pycnodus -pycnogonid -Pycnogonida -pycnogonidium -pycnogonoid -picnometer -pycnometer -pycnometochia -pycnometochic -pycnomorphic -pycnomorphous -Pycnonotidae -Pycnonotinae -pycnonotine -Pycnonotus -pycnoses -pycnosis -pycnospore -pycnosporic -pycnostyle -pycnotic -pico -pico- -picocurie -picofarad -picogram -picograms -picoid -picojoule -picolin -picoline -picolines -picolinic -picolins -picometer -picomole -picong -picory -Picorivera -picornavirus -picosecond -picoseconds -picot -picotah -picote -picoted -picotee -picotees -picoting -picotite -picots -picottah -picowatt -picquet -picqueter -picquets -picr- -picra -picramic -Picramnia -picrasmin -picrate -picrated -picrates -picry -picric -picryl -Picris -picrite -picrites -picritic -picro- -picrocarmine -Picrodendraceae -Picrodendron -picroerythrin -picrol -picrolite -picromerite -picropodophyllin -picrorhiza -picrorhizin -picrotin -picrotoxic -picrotoxin -picrotoxinin -PICS -Pict -pictarnie -Pictavi -Pictet -Pictish -Pictland -pictogram -pictograph -pictography -pictographic -pictographically -pictographs -Pictones -Pictor -pictoradiogram -Pictores -pictorial -pictorialisation -pictorialise -pictorialised -pictorialising -pictorialism -pictorialist -pictorialization -pictorialize -pictorially -pictorialness -pictorials -pictoric -pictorical -pictorically -pictun -picturability -picturable -picturableness -picturably -pictural -picture -picture-borrowing -picture-broidered -picture-buying -picturecraft -pictured -picture-dealing -picturedom -picturedrome -pictureful -picturegoer -picture-hanging -picture-hung -pictureless -picturely -picturelike -picturemaker -picturemaking -picture-painting -picture-pasted -Picturephone -picturephones -picturer -picturers -pictures -picture-seeking -picturesque -picturesquely -picturesqueness -picturesquenesses -picturesquish -picture-taking -picture-writing -pictury -picturing -picturization -picturize -picturized -picturizing -picucule -picuda -picudilla -picudo -picul -picule -piculet -piculs -piculule -Picumninae -Picumnus -Picunche -Picuris -Picus -PID -pidan -piddle -piddled -piddler -piddlers -piddles -piddly -piddling -piddlingly -piddock -piddocks -Piderit -Pidgeon -pidgin -pidginization -pidginize -pidgins -pidgized -pidgizing -pidjajap -Pydna -pie -pye -pie-baking -piebald -piebaldism -piebaldly -piebaldness -piebalds -piece -pieceable -pieced -piece-dye -piece-dyed -pieceless -piecemaker -piecemeal -piecemealwise -piecen -piecener -piecer -piecers -pieces -piecette -piecewise -piecework -pieceworker -pieceworkers -piecing -piecings -piecrust -piecrusts -pied -pied- -pied-a-terre -pied-billed -pied-coated -pied-colored -pied-de-biche -pied-faced -piedfort -piedforts -piedly -Piedmont -piedmontal -Piedmontese -piedmontite -piedmonts -piedness -pye-dog -pied-piping -Piedra -piedroit -pied-winged -pie-eater -pie-eyed -pie-faced -Piefer -piefort -pieforts -Piegan -Piegari -pie-gow -piehouse -pieing -pyelectasis -pieless -pielet -pyelic -pielike -pyelitic -pyelitis -pyelitises -pyelocystitis -pyelogram -pyelograph -pyelography -pyelographic -pyelolithotomy -pyelometry -pyelonephritic -pyelonephritis -pyelonephrosis -pyeloplasty -pyeloscopy -pyelotomy -pyeloureterogram -pielum -Pielus -piemag -pieman -piemarker -pyemesis -pyemia -pyemias -pyemic -Piemonte -pien -pienaar -pienanny -piend -pyengadu -pientao -piepan -pieplant -pieplants -piepoudre -piepowder -pieprint -Pier -pierage -piercarlo -Pierce -pierceable -pierced -Piercefield -piercel -pierceless -piercent -piercer -piercers -pierces -Pierceton -Pierceville -Piercy -piercing -piercingly -piercingness -pierdrop -Pierette -pierhead -pier-head -Pieria -Pierian -pierid -Pieridae -Pierides -Pieridinae -pieridine -Pierinae -pierine -Pieris -pierless -pierlike -Piermont -Piero -pierogi -Pierpont -Pierre -pierre-perdu -Pierrepont -Pierrette -Pierro -Pierron -Pierrot -pierrotic -pierrots -Piers -Pierson -piert -Pierz -pies -pyes -pieshop -piest -pie-stuffed -Piet -Pieta -Pietas -piete -Pieter -Pietermaritzburg -piety -pietic -pieties -Pietism -pietisms -Pietist -pietistic -pietistical -pietistically -pietisticalness -pietists -Pietje -pieton -pietose -pietoso -Pietown -Pietra -Pietrek -Pietro -piewife -piewipe -piewoman -piezo -piezo- -piezochemical -piezochemistry -piezochemistries -piezocrystallization -piezoelectric -piezoelectrically -piezoelectricity -piezometer -piezometry -piezometric -piezometrical -PIF -pifero -piff -Piffard -piffero -piffle -piffled -piffler -piffles -piffling -piff-paff -pifine -pig -pygal -pygalgia -Pigalle -pygarg -pygargus -pig-back -pig-backed -pig-bed -pigbelly -pig-bellied -pigboat -pigboats -pig-breeding -pig-bribed -pig-chested -pigdan -pig-dealing -pigdom -pig-driving -pig-eating -pig-eyed -Pigeon -pigeonable -pigeonberry -pigeon-berry -pigeonberries -pigeon-breast -pigeon-breasted -pigeon-breastedness -pigeoneer -pigeoner -pigeonfoot -pigeongram -pigeon-hawk -pigeonhearted -pigeon-hearted -pigeonheartedness -pigeonhole -pigeon-hole -pigeonholed -pigeonholer -pigeonholes -pigeonholing -pigeon-house -pigeonite -pigeon-livered -pigeonman -pigeonneau -pigeon-pea -pigeon-plum -pigeonpox -pigeonry -pigeons -pigeon's -pigeon's-neck -pigeontail -pigeon-tailed -pigeon-toe -pigeon-toed -pigeonweed -pigeonwing -pigeonwood -pigeon-wood -pigface -pig-faced -pig-farming -pig-fat -pigfish -pigfishes -pigflower -pigfoot -pig-footed -pigful -pigg -pigged -piggery -piggeries -Piggy -piggyback -piggybacked -piggybacking -piggybacks -piggie -piggier -piggies -piggiest -piggin -pigging -piggins -piggish -piggishly -piggishness -piggy-wiggy -piggle -Piggott -pig-haired -pig-haunted -pighead -pigheaded -pig-headed -pigheadedly -pigheadedness -pigherd -pight -pightel -pightle -pigyard -pygidia -pygidial -pygidid -Pygididae -Pygidium -pygigidia -pig-iron -pig-jaw -pig-jawed -pig-jump -pig-jumper -pig-keeping -pigless -piglet -piglets -pigly -piglike -pigling -piglinghood -pygmaean -pigmaker -pigmaking -Pygmalion -pygmalionism -pigman -pygmean -pigmeat -pigment -pigmental -pigmentally -pigmentary -pigmentation -pigmentations -pigmented -pigmenting -pigmentize -pigmentolysis -pigmentophage -pigmentose -pigments -pig-metal -pigmew -Pigmy -Pygmy -pygmydom -Pigmies -Pygmies -pygmyhood -pygmyish -pygmyism -pygmyisms -pygmy-minded -pygmy's -pygmyship -pygmyweed -pygmoid -pignet -pignoli -pignolia -pignolis -pignon -pignora -pignorate -pignorated -pignoration -pignoratitious -pignorative -pignus -pignut -pig-nut -pignuts -pygo- -Pygobranchia -Pygobranchiata -pygobranchiate -pygofer -pygopagus -pygopod -Pygopodes -Pygopodidae -pygopodine -pygopodous -Pygopus -pygostyle -pygostyled -pygostylous -pigout -pigouts -pigpen -pigpens -pig-proof -pigritia -pigritude -pigroot -pigroots -Pigs -pig's -pigsconce -pigskin -pigskins -pigsney -pigsneys -pigsnies -pigsty -pigstick -pigsticked -pigsticker -pigsticking -pigsticks -pigsties -pigswill -pigtail -pigtailed -pig-tailed -pigtails -pig-tight -pigwash -pigweabbits -pigweed -pigweeds -pigwidgeon -pigwidgin -pigwigeon -Pigwiggen -Pyhrric -pyic -pyin -piing -pyins -piitis -pyjama -pyjamaed -pyjamas -pi-jaw -pik -pika -pikake -pikakes -pikas -Pike -pyke -pikeblenny -pikeblennies -piked -pike-eyed -pike-gray -pikey -pikel -pikelet -pikelike -pikeman -pikemen -pikemonger -pikeperch -pikeperches -piker -pikers -pikes -pike-snouted -pikestaff -pikestaves -Pikesville -piketail -Piketon -Pikeville -piki -piky -piking -pikle -pyknatom -pyknic -pyknics -pyknoses -pyknosis -pyknotic -pil -pil- -pyla -Pylades -Pylaemenes -Pylaeus -pilaf -pilaff -pilaffs -pilafs -pilage -pylagore -pilandite -pylangial -pylangium -pilapil -Pilar -pylar -pilary -Pylas -pilaster -pilastered -pilastering -pilasters -pilastrade -pilastraded -pilastric -Pilate -Pilatian -Pilatus -pilau -pilaued -pilaus -pilaw -pilaws -pilch -pilchard -pilchards -pilcher -pilcherd -Pilcomayo -pilcorn -pilcrow -pile -Pyle -Pilea -pileata -pileate -pileated -pile-built -piled -pile-driven -pile-driver -pile-driving -pilei -pileiform -pileless -pileolated -pileoli -pileolus -pileorhiza -pileorhize -pileous -pylephlebitic -pylephlebitis -piler -pilers -piles -Pylesville -pylethrombophlebitis -pylethrombosis -pileum -pileup -pileups -pileus -pileweed -pilework -pileworm -pilewort -pileworts -pile-woven -pilfer -pilferage -pilfered -pilferer -pilferers -pilfery -pilfering -pilferingly -pilferment -pilfers -pilfre -pilgarlic -pilgarlicky -Pilger -pilgrim -pilgrimage -pilgrimaged -pilgrimager -pilgrimages -pilgrimage's -pilgrimaging -pilgrimatic -pilgrimatical -pilgrimdom -pilgrimer -pilgrimess -pilgrimism -pilgrimize -pilgrimlike -pilgrims -pilgrim's -pilgrimwise -pili -pily -pylic -pilidium -pilies -pilifer -piliferous -piliform -piligan -piliganin -piliganine -piligerous -pilikai -pilikia -pililloo -pilimiction -pilin -piline -piling -pilings -pilipilula -pilis -pilitico -pilkins -pill -pillage -pillageable -pillaged -pillagee -Pillager -pillagers -pillages -pillaging -pillar -pillar-and-breast -pillar-box -pillared -pillaret -pillary -pillaring -pillarist -pillarize -pillarlet -pillarlike -pillars -pillar-shaped -pillarwise -pillas -pill-boasting -pillbox -pill-box -pillboxes -pill-dispensing -Pylle -pilled -pilledness -piller -pillery -pillet -pilleus -pill-gilding -pillhead -pillicock -pilling -pillion -pillions -pilliver -pilliwinks -pillmaker -pillmaking -pillmonger -Pilloff -pillory -pilloried -pillories -pillorying -pillorization -pillorize -Pillow -pillowbeer -pillowber -pillowbere -pillowcase -pillow-case -pillowcases -pillowed -pillowy -pillowing -pillowless -pillowlike -pillowmade -pillows -pillow's -pillow-shaped -pillowslip -pillowslips -pillowwork -pill-rolling -pills -pill's -Pillsbury -pill-shaped -pill-taking -pillular -pillule -pillworm -pillwort -pilm -pilmy -pilo- -Pilobolus -pilocarpidine -pilocarpin -pilocarpine -Pilocarpus -Pilocereus -pilocystic -piloerection -pilomotor -pilon -pylon -piloncillo -pilonidal -pylons -pyloralgia -pylorectomy -pylorectomies -pilori -pylori -pyloric -pyloristenosis -pyloritis -pyloro- -pylorocleisis -pylorodilator -pylorogastrectomy -pyloroplasty -pyloroptosis -pyloroschesis -pyloroscirrhus -pyloroscopy -pylorospasm -pylorostenosis -pylorostomy -pylorous -pylorouses -pylorus -pyloruses -Pilos -Pylos -pilose -pilosebaceous -pilosin -pilosine -pilosis -pilosism -pilosity -pilosities -pilot -pilotage -pilotages -pilotaxitic -pilot-bird -pilot-boat -piloted -pilotee -pilotfish -pilot-fish -pilotfishes -pilothouse -pilothouses -piloti -piloting -pilotings -pilotism -pilotless -pilotman -pilotry -pilots -pilotship -Pilottown -pilotweed -pilous -Pilpai -Pilpay -pilpul -pilpulist -pilpulistic -Pilsen -Pilsener -pilseners -Pilsner -pilsners -Pilsudski -piltock -pilula -pilular -Pilularia -pilule -pilules -pilulist -pilulous -pilum -Pilumnus -pilus -pilusli -pilwillet -pim -Pym -Pima -Piman -pimaric -Pimas -pimbina -Pimbley -pimelate -Pimelea -pimelic -pimelite -pimelitis -piment -Pimenta -pimentel -Pimento -pimenton -pimentos -pi-meson -pimgenet -pimienta -pimiento -pimientos -pimlico -pimola -pimp -pimped -pimpery -pimperlimpimp -pimpernel -pimpernels -Pimpinella -pimping -pimpish -Pimpla -pimple -pimpleback -pimpled -pimpleproof -pimples -pimply -pimplier -pimpliest -Pimplinae -pimpliness -pimpling -pimplo -pimploe -pimplous -pimps -pimpship -PIMS -PIN -pina -pinabete -Pinaceae -pinaceous -pinaces -pinachrome -Pinacyanol -pinacle -Pinacoceras -Pinacoceratidae -pinacocytal -pinacocyte -pinacoid -pinacoidal -pinacol -pinacolate -pinacolic -pinacolin -pinacoline -pinacone -pinacone-pinacolin -pinacoteca -pinacotheca -pinaculum -Pinafore -pinafores -pinayusa -pinakiolite -pinakoid -pinakoidal -pinakotheke -Pinal -Pinaleno -Pinales -pinang -pinangs -pinard -pinards -pinas -pinaster -pinasters -pinata -pinatas -pinatype -pinaverdol -pinax -pinball -pinballs -pinbefore -pinbone -pinbones -pinbrain -pin-brained -pinbush -pin-buttocked -Pincas -pincase -pincement -pince-nez -pincer -pincerlike -pincers -pincer-shaped -pincers-shaped -pincerweed -pincette -pinch -pinch- -pinchable -Pinchas -pinchback -pinchbeck -pinchbelly -pinchbottle -pinchbug -pinchbugs -pinchcock -pinchcommons -pinchcrust -pinche -pincheck -pinchecks -pinched -pinched-in -pinchedly -pinchedness -pinchem -pincher -pinchers -pinches -pinch-faced -pinchfist -pinchfisted -pinchgut -pinch-hit -pinchhitter -pinchhitters -pinch-hitting -pinching -pinchingly -Pynchon -Pinchot -pinchpenny -pinch-run -pinch-spotted -Pincian -Pincince -Pinckard -Pinckney -Pinckneya -Pinckneyville -pincoffin -Pinconning -pincpinc -pinc-pinc -Pinctada -pin-curl -Pincus -pincushion -pincushion-flower -pincushiony -pincushions -pind -pinda -pindal -Pindall -Pindar -Pindari -Pindaric -pindarical -Pindarically -pindarics -Pindarism -Pindarist -Pindarize -Pindarus -pinder -pinders -pindy -pindjajap -pindling -Pindus -PINE -Pyne -pineal -pinealectomy -pinealism -pinealoma -pineapple -pine-apple -pineapples -pineapple's -Pinebank -pine-barren -pine-bearing -Pinebluffs -pine-bordered -Pinebrook -pine-built -Pinebush -pine-capped -pine-clad -Pinecliffe -pinecone -pinecones -pine-covered -Pinecrest -pine-crested -pine-crowned -pined -Pineda -Pinedale -pine-dotted -pinedrops -pine-encircled -pine-fringed -Pinehall -Pinehurst -piney -pin-eyed -Pineywoods -Pineknot -Pinel -Pineland -pinelike -Pinelli -pinene -pinenes -Pineola -piner -pinery -pineries -Pinero -Pines -pinesap -pinesaps -pine-sequestered -pine-shaded -pine-shipping -pineta -Pinetops -Pinetown -pine-tree -Pinetta -Pinette -pinetum -Pineview -Pineville -pineweed -Pinewood -pine-wood -pinewoods -pinfall -pinfeather -pin-feather -pinfeathered -pinfeatherer -pinfeathery -pinfeathers -pinfire -pin-fire -pinfish -pinfishes -pinfold -pinfolded -pinfolding -pinfolds -PING -pinge -pinged -pinger -pingers -pinging -pingle -pingler -pingo -pingos -Ping-Pong -pingrass -pingrasses -Pingre -Pingree -pings -pingster -pingue -pinguecula -pinguedinous -pinguefaction -pinguefy -pinguescence -pinguescent -Pinguicula -Pinguiculaceae -pinguiculaceous -pinguid -pinguidity -pinguiferous -pinguin -pinguinitescent -pinguite -pinguitude -pinguitudinous -pinhead -pin-head -pinheaded -pinheadedness -pinheads -pinhold -pinhole -pin-hole -pinholes -pinhook -Pini -piny -pinic -pinicoline -pinicolous -pinier -piniest -piniferous -piniform -pinyin -pinyins -pinyl -pining -piningly -pinings -pinion -pinyon -pinioned -pinioning -pinionless -pinionlike -pinions -pinyons -pinipicrin -pinitannic -pinite -pinites -pinitol -pinitols -pinivorous -pinjane -pinjra -pink -pinkany -pinkberry -pink-blossomed -pink-bound -pink-breasted -pink-checked -pink-cheeked -pink-coated -pink-colored -pink-eared -pinked -pinkeen -pinkey -pinkeye -pink-eye -pink-eyed -pinkeyes -pinkeys -pinken -pinkened -pinkeny -pinkens -pinker -pinkers -Pinkerton -Pinkertonism -pinkest -pink-faced -pinkfish -pinkfishes -pink-fleshed -pink-flowered -pink-foot -pink-footed -Pinkham -pink-hi -pinky -Pinkiang -pinkie -pinkies -pinkify -pinkified -pinkifying -pinkily -pinkiness -pinking -pinkings -pinkish -pinkishness -pink-leaved -pinkly -pink-lipped -pinkness -pinknesses -pinko -pinkoes -pinkos -pink-ribbed -pinkroot -pinkroots -pinks -pink-shaded -pink-shelled -pink-skinned -pinksome -Pinkster -pink-sterned -pink-striped -pink-tinted -pink-veined -pink-violet -pinkweed -pink-white -pinkwood -pinkwort -pinless -pinlock -pinmaker -pinmaking -pinman -pin-money -Pinna -pinnace -pinnaces -pinnacle -pinnacled -pinnacles -pinnacle's -pinnaclet -pinnacling -pinnae -pinnage -pinnaglobin -pinnal -pinnas -pinnate -pinnated -pinnatedly -pinnate-leaved -pinnately -pinnate-ribbed -pinnate-veined -pinnati- -pinnatifid -pinnatifidly -pinnatifid-lobed -pinnatilobate -pinnatilobed -pinnation -pinnatipartite -pinnatiped -pinnatisect -pinnatisected -pinnatodentate -pinnatopectinate -pinnatulate -pinned -pinnel -pinner -pinners -pinnet -pinny -pinni- -Pinnidae -pinnies -pinniferous -pinniform -pinnigerous -Pinnigrada -pinnigrade -pinninervate -pinninerved -pinning -pinningly -pinnings -pinniped -Pinnipedia -pinnipedian -pinnipeds -pinnisect -pinnisected -pinnitarsal -pinnitentaculate -pinniwinkis -pinnywinkle -pinnywinkles -pinnock -pinnoite -pinnotere -pinnothere -Pinnotheres -pinnotherian -Pinnotheridae -pinnula -pinnulae -pinnular -pinnulate -pinnulated -pinnule -pinnules -pinnulet -pino -pinocchio -Pinochet -pinochle -pinochles -pinocytosis -pinocytotic -pinocytotically -pinocle -pinocles -Pinola -Pinole -pinoles -pinoleum -pinolia -pinolin -Pinon -pinones -pinonic -pinons -Pinopolis -Pinot -pynot -pinots -pinoutpinpatch -pinpillow -pinpoint -pinpointed -pinpointing -pinpoints -pinprick -pin-prick -pinpricked -pinpricking -pinpricks -pinproof -pinrail -pinrowed -pins -pin's -pinscher -pinschers -pinsetter -pinsetters -Pinsk -Pinsky -Pinson -pinsons -pin-spotted -pinspotter -pinspotters -pinstripe -pinstriped -pin-striped -pinstripes -pint -Pinta -pintada -pintadas -pintadera -pintado -pintadoes -pintadoite -pintados -pintail -pin-tailed -pintails -pintano -pintanos -pintas -pinte -Pinter -Pinteresque -pintid -pintle -pintles -Pinto -pin-toed -pintoes -pintos -pint-pot -pints -pint's -pintsize -pint-size -pint-sized -pintura -Pinturicchio -pinuela -pinulus -pynung -pinup -pin-up -pinups -Pinus -pinwale -pinwales -pinweed -pinweeds -pinwheel -pin-wheel -pinwheels -pinwing -pin-wing -pinwork -pinworks -pinworm -pinworms -pinx -pinxit -Pinxter -Pinz -Pinzler -Pinzon -PIO -pyo- -pyobacillosis -pyocele -Pioche -pyocyanase -pyocyanin -pyocyst -pyocyte -pyoctanin -pyoctanine -pyoderma -pyodermas -pyodermatitis -pyodermatosis -pyodermia -pyodermic -pyogenesis -pyogenetic -pyogenic -pyogenin -pyogenous -pyohemothorax -pyoid -pyolabyrinthitis -piolet -piolets -pyolymph -pyometra -pyometritis -pion -pioned -Pioneer -pioneerdom -pioneered -pioneering -pioneers -pioneership -Pioneertown -pyonephritis -pyonephrosis -pyonephrotic -pionery -Pyongyang -pionic -pionnotes -pions -pyopericarditis -pyopericardium -pyoperitoneum -pyoperitonitis -pyophagia -pyophylactic -pyophthalmia -pyophthalmitis -pyoplania -pyopneumocholecystitis -pyopneumocyst -pyopneumopericardium -pyopneumoperitoneum -pyopneumoperitonitis -pyopneumothorax -pyopoiesis -pyopoietic -pyoptysis -pyorrhea -pyorrheal -pyorrheas -pyorrheic -pyorrhoea -pyorrhoeal -pyorrhoeic -pyosalpingitis -pyosalpinx -pioscope -pyosepticemia -pyosepticemic -pyoses -pyosis -piosity -piosities -pyospermia -Pyote -pioted -pyotherapy -pyothorax -piotine -pyotoxinemia -Piotr -Pyotr -piotty -pioupiou -pyoureter -pioury -pious -piously -piousness -pyovesiculosis -pyoxanthose -Pioxe -Piozzi -PIP -pipa -pipage -pipages -pipal -pipals -pipe -pipeage -pipeages -pipe-bending -pipe-boring -pipe-caulking -pipeclay -pipe-clay -pipe-clayey -pipe-clayish -pipe-cleaning -pipecolin -pipecoline -pipecolinic -pipe-cutting -piped -pipe-drawn -pipedream -pipe-dream -pipe-dreaming -pipe-drilling -pipefish -pipe-fish -pipefishes -pipefitter -pipefitting -pipeful -pipefuls -pipey -pipelayer -pipe-layer -pipelaying -pipeless -pipelike -pipeline -pipe-line -pipelined -pipelines -pipelining -pipeman -pipemouth -pipe-necked -pipe-playing -pipe-puffed -Piper -Piperaceae -piperaceous -Piperales -piperate -piperazin -piperazine -pipery -piperic -piperide -piperideine -piperidge -piperidid -piperidide -piperidin -piperidine -piperylene -piperine -piperines -piperitious -piperitone -piperly -piperno -piperocaine -piperoid -pipe-roll -piperonal -piperonyl -pipers -Pipersville -pipes -pipe-shaped -pipe-smoker -pipestapple -Pipestem -pipestems -Pipestone -pipe-stone -pipet -pipe-tapping -pipe-thawing -pipe-threading -pipets -pipette -pipetted -pipettes -pipetting -pipewalker -pipewood -pipework -pipewort -pipi -pipy -pipid -Pipidae -pipier -pipiest -pipikaula -Pipil -Pipile -Pipilo -pipiness -piping -pipingly -pipingness -pipings -pipiri -pipistrel -pipistrelle -Pipistrellus -pipit -pipits -pipkin -pipkinet -pipkins -pipless -Pippa -Pippapasses -Pippas -pipped -pippen -pipper -pipperidge -Pippy -pippier -pippiest -pippin -pippiner -pippinface -pippin-faced -pipping -pippin-hearted -pippins -pip-pip -pipple -Pippo -Pipra -Pipridae -Piprinae -piprine -piproid -pips -pipsissewa -pipsqueak -pip-squeak -pipsqueaks -Piptadenia -Piptomeris -piptonychia -pipunculid -Pipunculidae -piqu -Piqua -piquable -piquance -piquancy -piquancies -piquant -piquantly -piquantness -pique -piqued -piquero -piques -piquet -piquets -piquette -piqueur -piquia -piquiere -piquing -piqure -pir -pyr -pyr- -pyracanth -Pyracantha -Pyraceae -pyracene -piracy -piracies -Pyraechmes -Piraeus -pyragravure -piragua -piraguas -piraya -pirayas -pyral -Pyrales -Pirali -pyralid -Pyralidae -pyralidan -pyralidid -Pyralididae -pyralidiform -Pyralidoidea -pyralids -pyralis -pyraloid -Pyrameis -pyramid -pyramidaire -pyramidal -pyramidale -pyramidalis -Pyramidalism -Pyramidalist -pyramidally -pyramidate -pyramided -Pyramidella -pyramidellid -Pyramidellidae -pyramider -pyramides -pyramidia -pyramidic -pyramidical -pyramidically -pyramidicalness -pyramiding -pyramidion -Pyramidist -pyramidize -pyramidlike -pyramidoattenuate -pyramidoid -pyramidoidal -pyramidologist -Pyramidon -pyramidoprismatic -pyramids -pyramid's -pyramid-shaped -pyramidwise -pyramimidia -pyramoid -pyramoidal -pyramus -pyran -pirana -piranas -pirandellian -Pirandello -Piranesi -Piranga -piranha -piranhas -pyranyl -pyranoid -pyranometer -pyranose -pyranoses -pyranoside -pyrans -pyrargyrite -pirarucu -pirarucus -pirate -pirated -piratelike -piratery -pirates -pirate's -piratess -piraty -piratic -piratical -piratically -pirating -piratism -piratize -piratry -Pyrausta -Pyraustinae -pyrazin -pyrazine -pyrazole -pyrazolyl -pyrazoline -pyrazolone -Pirbhai -Pire -pyre -pyrectic -pyrena -Pyrenaeus -Pirene -Pyrene -Pyrenean -Pyrenees -pyrenematous -pyrenes -Pyreneus -pyrenic -pyrenin -pyrenocarp -pyrenocarpic -pyrenocarpous -Pyrenochaeta -pyrenodean -pyrenodeine -pyrenodeous -pyrenoid -pyrenoids -pyrenolichen -Pyrenomycetales -pyrenomycete -Pyrenomycetes -Pyrenomycetineae -pyrenomycetous -Pyrenopeziza -pyres -pyrethrin -pyrethrine -pyrethroid -Pyrethrum -pyretic -pyreticosis -pyreto- -pyretogenesis -pyretogenetic -pyretogenic -pyretogenous -pyretography -pyretolysis -pyretology -pyretologist -pyretotherapy -pyrewinkes -Pyrex -pyrexia -pyrexial -pyrexias -pyrexic -pyrexical -pyrgeometer -pyrgocephaly -pyrgocephalic -pyrgoidal -pyrgologist -pyrgom -pyrheliometer -pyrheliometry -pyrheliometric -pyrheliophor -Pyribenzamine -pyribole -pyric -Piricularia -pyridazine -pyridic -pyridyl -pyridine -pyridines -pyridinium -pyridinize -Pyridium -pyridone -pyridoxal -pyridoxamine -pyridoxin -pyridoxine -piriform -pyriform -piriformes -piriformis -pyriformis -pirijiri -pyrylium -pyrimethamine -pyrimidyl -pyrimidin -pyrimidine -Pyriphlegethon -piripiri -piririgua -pyritaceous -pyrite -Pyrites -Pirithous -pyritic -pyritical -pyritiferous -pyritization -pyritize -pyrito- -pyritohedral -pyritohedron -pyritoid -pyritology -pyritous -pirl -pirlie -pirn -pirned -pirner -pirny -pirnie -Pirnot -Pyrnrientales -pirns -Piro -pyro -pyro- -pyroacetic -pyroacid -pyro-acid -pyroantimonate -pyroantimonic -pyroarsenate -pyroarsenic -pyroarsenious -pyroarsenite -pyroballogy -pyrobelonite -pyrobi -pyrobitumen -pyrobituminous -pyroborate -pyroboric -pyrocatechin -pyrocatechinol -pyrocatechol -pyrocatechuic -pyrocellulose -pyrochemical -pyrochemically -pyrochlore -pyrochromate -pyrochromic -pyrocinchonic -Pyrocystis -pyrocitric -pyroclastic -pyrocoll -pyrocollodion -pyrocomenic -pyrocondensation -pyroconductivity -pyrocotton -pyrocrystalline -Pyrodine -pyroelectric -pyroelectricity -pirog -pyrogallate -pyrogallic -pyrogallol -pirogen -pyrogen -pyrogenation -pyrogenesia -pyrogenesis -pyrogenetic -pyrogenetically -pyrogenic -pyrogenicity -pyrogenous -pyrogens -pyrogentic -piroghi -pirogi -pirogies -pyroglazer -pyroglutamic -pyrognomic -pyrognostic -pyrognostics -pyrograph -pyrographer -pyrography -pyrographic -pyrographies -pyrogravure -pyroguaiacin -pirogue -pirogues -pyroheliometer -pyroid -pirojki -pirol -Pyrola -Pyrolaceae -pyrolaceous -pyrolas -pyrolater -pyrolatry -pyroligneous -pyrolignic -pyrolignite -pyrolignous -pyroline -pyrolysate -pyrolyse -pyrolysis -pyrolite -pyrolytic -pyrolytically -pyrolyzable -pyrolyzate -pyrolyze -pyrolyzed -pyrolyzer -pyrolyzes -pyrolyzing -pyrollogical -pyrology -pyrological -pyrologies -pyrologist -pyrolusite -pyromachy -pyromagnetic -pyromancer -pyromancy -pyromania -pyromaniac -pyromaniacal -pyromaniacs -pyromanias -pyromantic -pyromeconic -pyromellitic -pyrometallurgy -pyrometallurgical -pyrometamorphic -pyrometamorphism -pyrometer -pyrometers -pyrometry -pyrometric -pyrometrical -pyrometrically -Pyromorphidae -pyromorphism -pyromorphite -pyromorphous -pyromotor -pyromucate -pyromucic -pyromucyl -pyronaphtha -pyrone -Pyronema -pyrones -Pironi -Pyronia -pyronine -pyronines -pyroninophilic -pyronyxis -pyronomics -piroot -pyrope -pyropen -pyropes -pyrophanite -pyrophanous -pyrophile -pyrophilia -pyrophyllite -pyrophilous -pyrophysalite -pyrophobia -pyrophone -pyrophoric -pyrophorous -pyrophorus -pyrophosphate -pyrophosphatic -pyrophosphoric -pyrophosphorous -pyrophotograph -pyrophotography -pyrophotometer -piroplasm -Piroplasma -piroplasmata -piroplasmic -piroplasmosis -piroplasms -pyropuncture -pyropus -piroque -piroques -pyroracemate -pyroracemic -pyroscope -pyroscopy -piroshki -pyrosis -pyrosises -pyrosmalite -Pyrosoma -Pyrosomatidae -pyrosome -Pyrosomidae -pyrosomoid -pyrosphere -pyrostat -pyrostats -pyrostereotype -pyrostilpnite -pyrosulfate -pyrosulfuric -pyrosulphate -pyrosulphite -pyrosulphuric -pyrosulphuryl -pirot -pyrotantalate -pyrotartaric -pyrotartrate -pyrotechny -pyrotechnian -pyrotechnic -pyrotechnical -pyrotechnically -pyrotechnician -pyrotechnics -pyrotechnist -pyroterebic -pyrotheology -Pyrotheria -Pyrotherium -pyrotic -pyrotoxin -pyrotritaric -pyrotritartric -pirouette -pirouetted -pirouetter -pirouettes -pirouetting -pirouettist -pyrouric -Pirous -pyrovanadate -pyrovanadic -pyroxanthin -pyroxene -pyroxenes -pyroxenic -pyroxenite -pyroxenitic -pyroxenoid -pyroxyle -pyroxylene -pyroxylic -pyroxylin -pyroxyline -pyroxmangite -pyroxonium -pirozhki -pirozhok -Pirozzo -pirquetted -pirquetter -pirr -pirraura -pirrauru -Pyrrha -Pyrrhic -pyrrhichian -pyrrhichius -pyrrhicist -pyrrhics -Pyrrho -Pyrrhocoridae -Pyrrhonean -Pyrrhonian -Pyrrhonic -Pyrrhonism -Pyrrhonist -Pyrrhonistic -Pyrrhonize -pyrrhotine -pyrrhotism -pyrrhotist -pyrrhotite -pyrrhous -Pyrrhuloxia -Pyrrhus -Pirri -pirrie -pyrryl -pyrrylene -pirrmaw -pyrrodiazole -pyrroyl -pyrrol -pyrrole -pyrroles -pyrrolic -pyrrolidyl -pyrrolidine -pyrrolidone -pyrrolylene -pyrroline -pyrrols -pyrrophyllin -pyrroporphyrin -pyrrotriazole -pirssonite -Pirtleville -Piru -Pyrula -Pyrularia -pyruline -pyruloid -Pyrus -pyruvaldehyde -pyruvate -pyruvates -pyruvic -pyruvil -pyruvyl -pyruwl -Pirzada -pis -Pisa -Pisaca -Pisacha -pisachee -pisachi -pisay -Pisan -Pisander -Pisanello -pisang -pisanite -Pisano -Pisarik -Pisauridae -piscary -piscaries -Piscataqua -Piscataway -Piscatelli -piscation -piscatology -piscator -piscatory -piscatorial -piscatorialist -piscatorially -piscatorian -piscatorious -piscators -Pisces -pisci- -piscian -piscicapture -piscicapturist -piscicide -piscicolous -piscicultural -pisciculturally -pisciculture -pisciculturist -Piscid -Piscidia -piscifauna -pisciferous -pisciform -piscina -piscinae -piscinal -piscinas -piscine -piscinity -piscioid -Piscis -piscivorous -pisco -piscos -pise -Piseco -Pisek -Piselli -Pisgah -Pish -pishaug -pished -pishes -pishing -pishoge -pishoges -pishogue -pishpash -pish-pash -Pishpek -pishposh -Pishquow -pishu -Pisidia -Pisidian -Pisidium -pisiform -pisiforms -pisistance -Pisistratean -Pisistratidae -Pisistratus -pisk -pisky -piskun -pismire -pismires -pismirism -pismo -piso -pisolite -pisolites -pisolitic -Pisonia -pisote -piss -pissabed -pissant -pissants -Pissarro -pissasphalt -pissed -pissed-off -pisser -pissers -pisses -pissy-eyed -pissing -pissodes -pissoir -pissoirs -pist -pistache -pistaches -pistachio -pistachios -Pistacia -pistacite -pistareen -piste -pisteology -pistes -Pistia -pistic -pistick -pistil -pistillaceous -pistillar -pistillary -pistillate -pistillid -pistillidium -pistilliferous -pistilliform -pistilligerous -pistilline -pistillode -pistillody -pistilloid -pistilogy -pistils -pistil's -pistiology -pistle -pistler -Pistoia -Pistoiese -pistol -pistolade -pistole -pistoled -pistoleer -pistoles -pistolet -pistoleter -pistoletier -pistolgram -pistolgraph -pistolier -pistoling -pistolled -pistollike -pistolling -pistology -pistolography -pistolproof -pistols -pistol's -pistol-shaped -pistol-whip -pistol-whipping -pistolwise -Piston -pistonhead -pistonlike -pistons -piston's -pistrices -pistrix -Pisum -Pyszka -PIT -pita -pitahaya -Pitahauerat -Pitahauirata -pitaya -pitayita -Pitaka -Pitana -pitanga -pitangua -pitapat -pit-a-pat -pitapatation -pitapats -pitapatted -pitapatting -pitarah -Pitarys -pitas -pitastile -Pitatus -pitau -pitawas -pitbird -pit-black -pit-blackness -Pitcairnia -pitch -pitchable -pitch-and-putt -pitch-and-run -pitch-and-toss -pitch-black -pitch-blackened -pitch-blackness -pitchblende -pitch-blende -pitchblendes -pitch-brand -pitch-brown -pitch-colored -pitch-dark -pitch-darkness -pitch-diameter -pitched -Pitcher -pitchered -pitcherful -pitcherfuls -pitchery -pitcherlike -pitcherman -pitcher-plant -pitchers -pitcher-shaped -pitches -pitch-faced -pitch-farthing -pitchfield -Pitchford -pitchfork -pitchforks -pitchhole -pitchi -pitchy -pitchier -pitchiest -pitchily -pitchiness -pitching -pitchlike -pitch-lined -pitchman -pitch-marked -pitchmen -Pitchometer -pitch-ore -pitchout -pitchouts -pitchpike -pitch-pine -pitch-pipe -pitchpole -pitchpoll -pitchpot -pitch-stained -pitchstone -pitchwork -pit-coal -pit-eyed -piteira -piteous -piteously -piteousness -pitfall -pitfalls -pitfall's -pitfold -pith -Pythagoras -Pythagorean -Pythagoreanism -Pythagoreanize -Pythagoreanly -pythagoreans -Pythagoric -Pythagorical -Pythagorically -Pythagorism -Pythagorist -Pythagorize -Pythagorizer -pithanology -pithead -pit-headed -pitheads -Pytheas -pithecan -pithecanthrope -pithecanthropi -pithecanthropic -pithecanthropid -Pithecanthropidae -pithecanthropine -pithecanthropoid -Pithecanthropus -Pithecia -pithecian -Pitheciinae -pitheciine -pithecism -pithecoid -Pithecolobium -pithecology -pithecological -pithecometric -pithecomorphic -pithecomorphism -pithecus -pithed -pithes -pithful -pithy -Pythia -Pythiaceae -Pythiacystis -Pythiad -Pythiambic -Pythian -Pythias -Pythic -pithier -pithiest -pithily -pithiness -pithing -Pythios -Pythium -Pythius -pithless -pithlessly -Pytho -Pithoegia -pythogenesis -pythogenetic -pythogenic -pythogenous -pithoi -Pithoigia -pithole -pit-hole -Pithom -Python -pythoness -pythonic -pythonical -pythonid -Pythonidae -pythoniform -Pythoninae -pythonine -pythonism -Pythonissa -pythonist -pythonize -pythonoid -pythonomorph -Pythonomorpha -pythonomorphic -pythonomorphous -pythons -pithos -piths -pithsome -pithwork -PITI -pity -pitiability -pitiable -pitiableness -pitiably -pity-bound -pitied -pitiedly -pitiedness -pitier -pitiers -pities -pitiful -pitifuller -pitifullest -pitifully -pitifulness -pitying -pityingly -pitikins -pitiless -pitilessly -pitilessness -Pitylus -pity-moved -pityocampa -pityocampe -Pityocamptes -pityproof -pityriasic -pityriasis -Pityrogramma -pityroid -pitirri -Pitys -Pitiscus -pity-worthy -Pitkin -pitless -Pytlik -pitlike -pitmaker -pitmaking -Pitman -pitmans -pitmark -pit-marked -pitmen -pitmenpitmirk -pitmirk -Pitney -Pitocin -pitometer -pitomie -piton -pitons -pitpan -pit-pat -pit-patter -pitpit -pitprop -pitressin -Pitri -Pitris -pit-rotted -pits -pit's -pitsaw -pitsaws -Pitsburg -pitside -pit-specked -Pitt -Pitta -pittacal -Pittacus -pittance -pittancer -pittances -pittard -pitted -Pittel -pitter -pitter-patter -Pittheus -pitticite -Pittidae -pittine -pitting -pittings -Pittism -Pittite -Pittman -pittoid -Pittosporaceae -pittosporaceous -pittospore -Pittosporum -Pitts -Pittsboro -Pittsburg -Pittsburgh -Pittsburgher -Pittsfield -Pittsford -Pittston -Pittstown -Pittsview -Pittsville -pituicyte -pituita -pituital -pituitary -pituitaries -pituite -pituitous -pituitousness -Pituitrin -pituri -pitwood -pitwork -pit-working -pitwright -Pitzer -piu -piupiu -Piura -piuri -pyuria -pyurias -piuricapsular -Pius -Piute -Piutes -pivalic -pivot -pivotable -pivotal -pivotally -pivoted -pivoter -pivoting -pivotman -pivotmen -pivots -Pivski -pyvuril -Piwowar -piwut -pix -pyx -PIXEL -pixels -pixes -pyxes -pixy -Pyxidanthera -pyxidate -pyxides -pyxidia -Pyxidis -pyxidium -pixie -pyxie -pixieish -pixies -pyxies -pixyish -pixilated -pixilation -pixy-led -pixiness -pixinesses -pixys -Pyxis -pix-jury -pyx-jury -Pixley -pizaine -Pizarro -pizazz -pizazzes -pizazzy -pize -Pizor -pizz -pizz. -pizza -pizzas -pizzazz -pizzazzes -pizzeria -pizzerias -pizzicato -pizzle -pizzles -pj's -PK -pk. -pkg -pkg. -pkgs -pks -pkt -pkt. -PKU -pkwy -PL -pl. -PL/1 -PL1 -PLA -placability -placabilty -placable -placableness -placably -Placaean -placage -placard -placarded -placardeer -placarder -placarders -placarding -placards -placard's -placate -placated -placater -placaters -placates -placating -placation -placative -placatively -placatory -placcate -place -placeable -Placean -place-begging -placebo -placeboes -placebos -place-brick -placed -Placedo -Placeeda -placeful -place-grabbing -placeholder -place-holder -place-holding -place-hunter -place-hunting -placekick -place-kick -placekicker -place-kicker -placeless -placelessly -place-loving -placemaker -placemaking -placeman -placemanship -placemen -placement -placements -placement's -place-money -placemonger -placemongering -place-name -place-names -place-naming -placent -placenta -placentae -placental -Placentalia -placentalian -placentary -placentas -placentate -placentation -Placentia -placentiferous -placentiform -placentigerous -placentitis -placentography -placentoid -placentoma -placentomata -place-proud -placer -placers -Placerville -places -place-seeking -placet -placets -placewoman -Placia -placid -Placida -placidamente -placid-featured -Placidia -Placidyl -placidity -placidly -placid-mannered -placidness -Placido -placing -placing-out -placit -Placitas -placitum -plack -plackart -placket -plackets -plackless -placks -placo- -placochromatic -placode -placoderm -placodermal -placodermatous -Placodermi -placodermoid -placodont -Placodontia -Placodus -placoganoid -placoganoidean -Placoganoidei -placoid -placoidal -placoidean -Placoidei -Placoides -placoids -Placophora -placophoran -placoplast -placque -placula -placuntitis -placuntoma -Placus -pladaroma -pladarosis -Plafker -plafond -plafonds -plaga -plagae -plagal -plagate -plage -plages -Plagianthus -plagiaplite -plagiary -plagiarical -plagiaries -plagiarise -plagiarised -plagiariser -plagiarising -plagiarism -plagiarisms -plagiarist -plagiaristic -plagiaristically -plagiarists -plagiarization -plagiarize -plagiarized -plagiarizer -plagiarizers -plagiarizes -plagiarizing -plagihedral -plagio- -plagiocephaly -plagiocephalic -plagiocephalism -plagiocephalous -Plagiochila -plagioclase -plagioclase-basalt -plagioclase-granite -plagioclase-porphyry -plagioclase-porphyrite -plagioclase-rhyolite -plagioclasite -plagioclastic -plagioclimax -plagioclinal -plagiodont -plagiograph -plagioliparite -plagionite -plagiopatagium -plagiophyre -Plagiostomata -plagiostomatous -plagiostome -Plagiostomi -plagiostomous -plagiotropic -plagiotropically -plagiotropism -plagiotropous -plagium -plagose -plagosity -plague -plague-beleagured -plagued -plague-free -plagueful -plague-haunted -plaguey -plague-infected -plague-infested -plagueless -plagueproof -plaguer -plague-ridden -plaguers -plagues -plague-smitten -plaguesome -plaguesomeness -plague-spot -plague-spotted -plague-stricken -plaguy -plaguily -plaguing -plagula -play -playa -playability -playable -playact -play-act -playacted -playacting -playactings -playactor -playacts -playas -playback -playbacks -playbill -play-bill -playbills -play-by-play -playboy -playboyism -playboys -playbook -play-book -playbooks -playbox -playbroker -plaice -plaices -playclothes -playcraft -playcraftsman -plaid -playday -play-day -playdays -playdate -plaided -plaidy -plaidie -plaiding -plaidman -plaidoyer -playdown -play-down -playdowns -plaids -plaid's -played -Player -playerdom -playeress -players -player's -Playfair -playfellow -playfellows -playfellowship -playfere -playfield -playfolk -playful -playfully -playfulness -playfulnesses -playgirl -playgirls -playgoer -playgoers -playgoing -playground -playgrounds -playground's -playhouse -playhouses -playing -playingly -play-judging -playland -playlands -playless -playlet -playlets -playlike -playlist -play-loving -playmaker -playmaking -playman -playmare -playmate -playmates -playmate's -playmonger -playmongering -plain -plainback -plainbacks -plain-bodied -plain-bred -plainchant -plain-clothed -plainclothes -plainclothesman -plainclothesmen -plain-darn -plain-dressing -plained -plain-edged -plainer -plainest -plain-faced -plain-featured -Plainfield -plainful -plain-garbed -plain-headed -plainhearted -plain-hearted -plainy -plaining -plainish -plain-laid -plainly -plain-looking -plain-mannered -plainness -plainnesses -plain-pranked -Plains -Plainsboro -plainscraft -plainsfolk -plainsman -plainsmen -plainsoled -plain-soled -plainsong -plain-speaking -plainspoken -plain-spoken -plain-spokenly -plainspokenness -plain-spokenness -plainstanes -plainstones -plainswoman -plainswomen -plaint -plaintail -plaintext -plaintexts -plaintful -plaintiff -plaintiffs -plaintiff's -plaintiffship -plaintile -plaintive -plaintively -plaintiveness -plaintless -plaints -Plainview -Plainville -plainward -Plainwell -plain-work -playock -playoff -play-off -playoffs -playpen -playpens -play-pretty -play-producing -playreader -play-reading -playroom -playrooms -plays -plaisance -plaisanterie -playschool -playscript -playsome -playsomely -playsomeness -playstead -Plaisted -plaister -plaistered -plaistering -plaisters -Plaistow -playstow -playsuit -playsuits -plait -playte -plaited -plaiter -plaiters -plaything -playthings -plaything's -playtime -playtimes -plaiting -plaitings -plaitless -plaits -plait's -plaitwork -playward -playwear -playwears -playwoman -playwomen -playwork -playwright -playwrightess -playwrighting -playwrightry -playwrights -playwright's -playwriter -playwriting -plak -plakat -PLAN -plan- -Plana -planable -Planada -planaea -planar -Planaria -planarian -planarias -Planarida -planaridan -planariform -planarioid -planarity -planaru -planate -planation -planceer -plancer -planch -planche -plancheite -plancher -planches -planchet -planchets -planchette -planching -planchment -plancier -Planck -Planckian -Planctae -planctus -plandok -plane -planed -plane-faced -planeload -planeness -plane-parallel -plane-polarized -planer -Planera -planers -planes -plane's -planeshear -plane-shear -plane-sheer -planet -planeta -planetable -plane-table -planetabler -plane-tabler -planetal -planetary -planetaria -planetarian -planetaries -planetarily -planetarium -planetariums -planeted -planetesimal -planetesimals -planetfall -planetic -planeticose -planeting -planetist -planetkin -planetless -planetlike -planetogeny -planetography -planetoid -planetoidal -planetoids -planetology -planetologic -planetological -planetologist -planetologists -plane-tree -planets -planet's -planet-stricken -planet-struck -planettaria -planetule -planform -planforms -planful -planfully -planfulness -plang -plangency -plangent -plangently -plangents -plangi -plangor -plangorous -P-language -plani- -planicaudate -planicipital -planidorsate -planifolious -planiform -planigram -planigraph -planigraphy -planilla -planimeter -planimetry -planimetric -planimetrical -planineter -planing -planipennate -Planipennia -planipennine -planipetalous -planiphyllous -planirostal -planirostral -planirostrate -planiscope -planiscopic -planish -planished -planisher -planishes -planishing -planispheral -planisphere -planispheric -planispherical -planispiral -planity -Plank -plankage -plankbuilt -planked -planker -planky -planking -plankings -Plankinton -plankless -planklike -planks -plank-shear -planksheer -plank-sheer -plankter -plankters -planktology -planktologist -plankton -planktonic -planktons -planktont -plankways -plankwise -planless -planlessly -planlessness -planned -planner -planners -planner's -planning -plannings -Plano -plano- -planoblast -planoblastic -planocylindric -Planococcus -planoconcave -plano-concave -planoconical -planoconvex -plano-convex -planoferrite -planogamete -planograph -planography -planographic -planographically -planographist -planohorizontal -planolindrical -planometer -planometry -planomiller -planont -planoorbicular -Planorbidae -planorbiform -planorbine -Planorbis -planorboid -planorotund -Planosarcina -planosol -planosols -planosome -planospiral -planospore -planosubulate -plans -plan's -plansheer -plant -planta -plantable -plantad -Plantae -plantage -Plantagenet -Plantaginaceae -plantaginaceous -Plantaginales -plantagineous -Plantago -plantain -plantain-eater -plantain-leaved -plantains -plantal -plant-animal -plantano -plantar -plantaris -plantarium -Plantation -plantationlike -plantations -plantation's -plantator -plant-cutter -plantdom -Plante -plant-eater -plant-eating -planted -planter -planterdom -planterly -planters -plantership -Plantersville -Plantigrada -plantigrade -plantigrady -Plantin -planting -plantings -plantivorous -plantless -plantlet -plantlike -plantling -plantocracy -plants -plantsman -Plantsville -plantula -plantulae -plantular -plantule -planula -planulae -planulan -planular -planulate -planuliform -planuloid -Planuloidea -planum -planury -planuria -planxty -plap -plappert -plaque -plaques -plaquette -plash -plashed -plasher -plashers -plashes -plashet -plashy -plashier -plashiest -plashing -plashingly -plashment -plasia -plasm -plasm- -plasma -plasmacyte -plasmacytoma -plasmagel -plasmagene -plasmagenic -plasmalemma -plasmalogen -plasmaphaeresis -plasmaphereses -plasmapheresis -plasmaphoresisis -plasmas -plasmase -plasmasol -plasmatic -plasmatical -plasmation -plasmatoparous -plasmatorrhexis -plasmic -plasmid -plasmids -plasmin -plasminogen -plasmins -plasmo- -Plasmochin -plasmocyte -plasmocytoma -plasmode -plasmodesm -plasmodesma -plasmodesmal -plasmodesmata -plasmodesmic -plasmodesmus -plasmodia -plasmodial -plasmodiate -plasmodic -plasmodiocarp -plasmodiocarpous -Plasmodiophora -Plasmodiophoraceae -Plasmodiophorales -plasmodium -plasmogamy -plasmogen -plasmogeny -plasmoid -plasmoids -plasmolyse -plasmolysis -plasmolytic -plasmolytically -plasmolyzability -plasmolyzable -plasmolyze -plasmology -plasmoma -plasmomata -Plasmon -plasmons -Plasmopara -plasmophagy -plasmophagous -plasmoptysis -plasmoquin -plasmoquine -plasmosoma -plasmosomata -plasmosome -plasmotomy -plasms -plasome -plass -Plassey -plasson -plast -plastein -plaster -plasterbill -plasterboard -plastered -plasterer -plasterers -plastery -plasteriness -plastering -plasterlike -plasters -plasterwise -plasterwork -plasty -plastic -plastically -plasticimeter -Plasticine -plasticisation -plasticise -plasticised -plasticising -plasticism -plasticity -plasticities -plasticization -plasticize -plasticized -plasticizer -plasticizes -plasticizing -plasticly -plastics -plastid -plastidial -plastidium -plastidome -Plastidozoa -plastids -plastidular -plastidule -plastify -plastin -plastinoid -plastique -plastiqueur -plastiqueurs -plastisol -plastochondria -plastochron -plastochrone -plastodynamia -plastodynamic -plastogamy -plastogamic -plastogene -plastomer -plastomere -plastometer -plastometry -plastometric -plastosome -plastotype -plastral -plastron -plastrons -plastrum -plastrums -plat -plat. -Plata -Plataea -Plataean -Platalea -Plataleidae -plataleiform -Plataleinae -plataleine -platan -Platanaceae -platanaceous -platane -platanes -platanist -Platanista -Platanistidae -platanna -platano -platans -Platanus -Platas -platband -platch -Plate -platea -plateasm -Plateau -plateaued -plateauing -plateaulith -plateaus -plateau's -plateaux -plate-bending -plate-carrier -plate-collecting -plate-cutting -plated -plate-dog -plate-drilling -plateful -platefuls -plate-glass -plate-glazed -plateholder -plateiasmus -plat-eye -plate-incased -platelayer -plate-layer -plateless -platelet -platelets -platelet's -platelike -platemaker -platemaking -plateman -platemark -plate-mark -platemen -plate-mounting -platen -platens -platen's -plate-punching -plater -platerer -plateresque -platery -plate-roll -plate-rolling -platers -plates -plate-scarfing -platesful -plate-shaped -plate-shearing -plate-tossing -plateway -platework -plateworker -plat-footed -platform -platformally -platformed -platformer -platformy -platformish -platformism -platformist -platformistic -platformless -platforms -platform's -Plath -plathelminth -platy -platy- -platybasic -platybrachycephalic -platybrachycephalous -platybregmatic -platic -Platycarya -platycarpous -Platycarpus -platycelian -platycelous -platycephaly -platycephalic -Platycephalidae -platycephalism -platycephaloid -platycephalous -Platycephalus -Platycercinae -platycercine -Platycercus -Platycerium -platycheiria -platycyrtean -platicly -platycnemia -platycnemic -Platycodon -platycoelian -platycoelous -platycoria -platycrania -platycranial -Platyctenea -platydactyl -platydactyle -platydactylous -platydolichocephalic -platydolichocephalous -platie -platier -platies -platiest -platyfish -platyglossal -platyglossate -platyglossia -Platyhelmia -platyhelminth -Platyhelminthes -platyhelminthic -platyhieric -platykurtic -platykurtosis -platilla -platylobate -platymery -platymeria -platymeric -platymesaticephalic -platymesocephalic -platymeter -platymyoid -platin- -Platina -platinamin -platinamine -platinammin -platinammine -platinas -platinate -platinated -platinating -Platine -plating -platings -platinic -platinichloric -platinichloride -platiniferous -platiniridium -platinisation -platinise -platinised -platinising -Platinite -platynite -platinization -platinize -platinized -platinizing -platino- -platinochloric -platinochloride -platinocyanic -platinocyanide -platinode -platinoid -platinoso- -platynotal -platinotype -platinotron -platinous -platinum -platinum-blond -platinums -platinumsmith -platyodont -platyope -platyopia -platyopic -platypellic -platypetalous -platyphyllous -platypi -platypygous -platypod -Platypoda -platypodia -platypodous -Platyptera -platypus -platypuses -Platyrhina -platyrhynchous -Platyrhini -platyrrhin -Platyrrhina -platyrrhine -Platyrrhini -platyrrhiny -platyrrhinian -platyrrhinic -platyrrhinism -platys -platysma -platysmamyoides -platysmas -platysmata -platysomid -Platysomidae -Platysomus -platystaphyline -Platystemon -platystencephaly -platystencephalia -platystencephalic -platystencephalism -platysternal -Platysternidae -Platystomidae -platystomous -platytrope -platytropy -platitude -platitudes -platitudinal -platitudinarian -platitudinarianism -platitudinisation -platitudinise -platitudinised -platitudiniser -platitudinising -platitudinism -platitudinist -platitudinization -platitudinize -platitudinized -platitudinizer -platitudinizing -platitudinous -platitudinously -platitudinousness -platly -Plato -Platoda -platode -Platodes -platoid -Platon -Platonesque -Platonian -Platonic -Platonical -Platonically -Platonicalness -Platonician -Platonicism -Platonisation -Platonise -Platonised -Platoniser -Platonising -Platonism -Platonist -Platonistic -Platonization -Platonize -Platonizer -platoon -platooned -platooning -platoons -platopic -platosamine -platosammine -Plato-wise -plats -Platt -Plattdeutsch -Platte -platted -Plattekill -platteland -platten -Plattensee -Plattenville -Platter -platterface -platter-faced -platterful -platters -platter's -Platteville -platty -platting -plattnerite -Platto -Plattsburg -Plattsburgh -Plattsmouth -platurous -Platus -Plaucheville -plaud -plaudation -plaudit -plaudite -plauditor -plauditory -plaudits -Plauen -plauenite -plausibility -plausibilities -plausible -plausibleness -plausibly -plausive -plaustral -Plautine -Plautus -plaza -plazas -plazolite -plbroch -PLC -PLCC -PLD -plea -pleach -pleached -pleacher -pleaches -pleaching -plead -pleadable -pleadableness -pleaded -pleader -pleaders -pleading -pleadingly -pleadingness -pleadings -pleads -pleaproof -Pleas -plea's -pleasable -pleasableness -pleasance -Pleasant -pleasantable -Pleasantdale -pleasant-eyed -pleasanter -pleasantest -pleasant-faced -pleasant-featured -pleasantish -pleasantly -pleasant-looking -pleasant-mannered -pleasant-minded -pleasant-natured -pleasantness -pleasantnesses -Pleasanton -pleasantry -pleasantries -Pleasants -pleasantsome -pleasant-sounding -pleasant-spirited -pleasant-spoken -pleasant-tasted -pleasant-tasting -pleasant-tongued -Pleasantville -pleasant-voiced -pleasant-witted -pleasaunce -please -pleased -pleasedly -pleasedness -pleaseman -pleasemen -pleaser -pleasers -pleases -pleaship -pleasing -pleasingly -pleasingness -pleasurability -pleasurable -pleasurableness -pleasurably -pleasure -pleasure-bent -pleasure-bound -pleasured -pleasureful -pleasurefulness -pleasure-giving -pleasure-greedy -pleasurehood -pleasureless -pleasurelessly -pleasure-loving -pleasureman -pleasurement -pleasuremonger -pleasure-pain -pleasureproof -pleasurer -pleasures -pleasure-seeker -pleasure-seeking -pleasure-shunning -pleasure-tempted -pleasure-tired -Pleasureville -pleasure-wasted -pleasure-weary -pleasuring -pleasurist -pleasurous -pleat -pleated -pleater -pleaters -pleating -pleatless -pleats -pleb -plebby -plebe -plebeian -plebeiance -plebeianisation -plebeianise -plebeianised -plebeianising -plebeianism -plebeianization -plebeianize -plebeianized -plebeianizing -plebeianly -plebeianness -plebeians -plebeity -plebes -plebescite -plebian -plebianism -plebicolar -plebicolist -plebicolous -plebify -plebificate -plebification -plebiscitary -plebiscitarian -plebiscitarism -plebiscite -plebiscites -plebiscite's -plebiscitic -plebiscitum -plebs -pleck -Plecoptera -plecopteran -plecopterid -plecopterous -Plecotinae -plecotine -Plecotus -plectognath -Plectognathi -plectognathic -plectognathous -plectopter -plectopteran -plectopterous -plectospondyl -Plectospondyli -plectospondylous -plectra -plectre -plectridial -plectridium -plectron -plectrons -plectrontra -plectrum -plectrums -plectrumtra -pled -pledable -pledge -pledgeable -pledge-bound -pledged -pledgee -pledgees -pledge-free -pledgeholder -pledgeless -pledgeor -pledgeors -Pledger -pledgers -pledges -pledgeshop -pledget -pledgets -pledging -pledgor -pledgors -Plegadis -plegaphonia -plegia -plegometer -Pleiad -Pleiades -pleiads -plein-air -pleinairism -pleinairist -plein-airist -pleio- -pleiobar -Pleiocene -pleiochromia -pleiochromic -pleiomastia -pleiomazia -pleiomery -pleiomerous -pleion -Pleione -pleionian -pleiophylly -pleiophyllous -pleiotaxy -pleiotaxis -pleiotropy -pleiotropic -pleiotropically -pleiotropism -pleis -Pleistocene -Pleistocenic -pleistoseist -plemyrameter -plemochoe -plena -plenary -plenarily -plenariness -plenarium -plenarty -plench -plenches -pleny -plenicorn -pleniloquence -plenilunal -plenilunar -plenilunary -plenilune -plenipo -plenipotence -plenipotency -plenipotent -plenipotential -plenipotentiality -Plenipotentiary -plenipotentiaries -plenipotentiarily -plenipotentiaryship -plenipotentiarize -plenish -plenished -plenishes -plenishing -plenishment -plenism -plenisms -plenist -plenists -plenity -plenitide -plenitude -plenitudes -plenitudinous -plenshing -plenteous -plenteously -plenteousness -Plenty -plenties -plentify -plentiful -plentifully -plentifulness -plentitude -Plentywood -plenum -plenums -pleo- -pleochroic -pleochroism -pleochroitic -pleochromatic -pleochromatism -pleochroous -pleocrystalline -pleodont -pleomastia -pleomastic -pleomazia -pleometrosis -pleometrotic -pleomorph -pleomorphy -pleomorphic -pleomorphism -pleomorphist -pleomorphous -pleon -pleonal -pleonasm -pleonasms -pleonast -pleonaste -pleonastic -pleonastical -pleonastically -pleonectic -pleonexia -pleonic -pleophagous -pleophyletic -pleopod -pleopodite -pleopods -Pleospora -Pleosporaceae -plerergate -plerocercoid -pleroma -pleromatic -plerome -pleromorph -plerophory -plerophoric -plerosis -plerotic -Plerre -plesance -Plesianthropus -plesio- -plesiobiosis -plesiobiotic -plesiomorphic -plesiomorphism -plesiomorphous -plesiosaur -Plesiosauri -Plesiosauria -plesiosaurian -plesiosauroid -Plesiosaurus -plesiotype -plessigraph -plessimeter -plessimetry -plessimetric -Plessis -plessor -plessors -plethysmogram -plethysmograph -plethysmography -plethysmographic -plethysmographically -Plethodon -plethodontid -Plethodontidae -plethora -plethoras -plethoretic -plethoretical -plethory -plethoric -plethorical -plethorically -plethorous -plethron -plethrum -pleur- -pleura -Pleuracanthea -Pleuracanthidae -Pleuracanthini -pleuracanthoid -Pleuracanthus -pleurae -pleural -pleuralgia -pleuralgic -pleurapophysial -pleurapophysis -pleuras -pleurectomy -pleurenchyma -pleurenchymatous -pleuric -pleuriseptate -pleurisy -pleurisies -pleurite -pleuritic -pleuritical -pleuritically -pleuritis -pleuro- -Pleurobrachia -Pleurobrachiidae -pleurobranch -pleurobranchia -pleurobranchial -pleurobranchiate -pleurobronchitis -Pleurocapsa -Pleurocapsaceae -pleurocapsaceous -pleurocarp -Pleurocarpi -pleurocarpous -pleurocele -pleurocentesis -pleurocentral -pleurocentrum -Pleurocera -pleurocerebral -Pleuroceridae -pleuroceroid -Pleurococcaceae -pleurococcaceous -Pleurococcus -Pleurodelidae -pleurodynia -pleurodynic -Pleurodira -pleurodiran -pleurodire -pleurodirous -pleurodiscous -pleurodont -pleurogenic -pleurogenous -pleurohepatitis -pleuroid -pleurolysis -pleurolith -pleuron -pleuronect -Pleuronectes -pleuronectid -Pleuronectidae -pleuronectoid -Pleuronema -pleuropedal -pleuropericardial -pleuropericarditis -pleuroperitonaeal -pleuroperitoneal -pleuroperitoneum -pleuro-peritoneum -pleuropneumonia -pleuro-pneumonia -pleuropneumonic -pleuropodium -pleuropterygian -Pleuropterygii -pleuropulmonary -pleurorrhea -Pleurosaurus -Pleurosigma -pleurospasm -pleurosteal -Pleurosteon -pleurostict -Pleurosticti -Pleurostigma -pleurothotonic -pleurothotonos -pleurothotonus -pleurotyphoid -Pleurotoma -Pleurotomaria -Pleurotomariidae -pleurotomarioid -pleurotomy -pleurotomid -Pleurotomidae -pleurotomies -pleurotomine -pleurotomoid -pleurotonic -pleurotonus -Pleurotremata -pleurotribal -pleurotribe -pleurotropous -Pleurotus -pleurovisceral -pleurum -pleuston -pleustonic -pleustons -Pleven -plevin -Plevna -plew -plewch -plewgh -plews -plex -plexal -plexicose -plexiform -Plexiglas -Plexiglass -pleximeter -pleximetry -pleximetric -Plexippus -plexodont -plexometer -plexor -plexors -plexure -plexus -plexuses -plf -pli -ply -pliability -pliable -pliableness -pliably -Pliam -pliancy -pliancies -pliant -pliant-bodied -pliantly -pliant-necked -pliantness -plyboard -plica -plicable -plicae -plical -plicate -plicated -plicately -plicateness -plicater -plicatile -plicating -plication -plicative -plicato- -plicatocontorted -plicatocristate -plicatolacunose -plicatolobate -plicatopapillose -plicator -plicatoundulate -plicatulate -plicature -plicidentine -pliciferous -pliciform -plie -plied -plier -plyer -pliers -plyers -plies -plygain -plight -plighted -plighter -plighters -plighting -plights -plying -plyingly -plim -plimmed -plimming -Plymouth -Plymouthism -Plymouthist -Plymouthite -plymouths -Plympton -plimsol -plimsole -plimsoles -Plimsoll -plimsolls -plimsols -Pliner -Pliny -Plinian -Plinyism -Plinius -plink -plinked -plinker -plinkers -plinking -plinks -Plynlymmon -plinth -plinther -plinthiform -plinthless -plinthlike -plinths -plio- -Pliocene -Pliofilm -Pliohippus -Plion -Pliopithecus -pliosaur -pliosaurian -Pliosauridae -Pliosaurus -pliothermic -Pliotron -plyscore -Pliske -plisky -pliskie -pliskies -pliss -plisse -plisses -Plisthenes -plitch -plywood -plywoods -PLL -PLM -PLO -ploat -ploce -Ploceidae -ploceiform -Ploceinae -Ploceus -Ploch -plock -plod -plodded -plodder -plodderly -plodders -plodding -ploddingly -ploddingness -plodge -plods -Ploesti -Ploeti -ploy -ploid -ploidy -ploidies -ployed -ploying -Ploima -ploimate -ployment -ploys -ploy's -plomb -plonk -plonked -plonking -plonko -plonks -plook -plop -plopped -plopping -plops -ploration -ploratory -Plos -plosion -plosions -plosive -plosives -Ploss -Plossl -plot -plotch -plotcock -plote -plotful -Plotinian -Plotinic -Plotinical -Plotinism -Plotinist -Plotinize -Plotinus -Plotkin -plotless -plotlessness -plotlib -plotosid -plotproof -plots -plot's -plott -plottage -plottages -plotted -plotter -plottery -plotters -plotter's -plotty -plottier -plotties -plottiest -plotting -plottingly -plotton -plotx -plotz -plotzed -plotzes -plotzing -Plough -ploughboy -plough-boy -ploughed -plougher -ploughers -ploughfish -ploughfoot -ploughgang -ploughgate -ploughhead -plough-head -ploughing -ploughjogger -ploughland -plough-land -ploughline -ploughman -ploughmanship -ploughmell -ploughmen -plough-monday -ploughpoint -ploughs -ploughshare -ploughshoe -ploughstaff -plough-staff -ploughstilt -ploughtail -plough-tail -ploughwise -ploughwright -plouk -plouked -plouky -plounce -plousiocracy -plout -Plouteneion -plouter -Plovdiv -plover -plover-billed -plovery -ploverlike -plover-page -plovers -plow -plowable -plowback -plowbacks -plowboy -plowboys -plowbote -plow-bred -plow-cloven -plowed -plower -plowers -plowfish -plowfoot -plowgang -plowgate -plowgraith -plowhead -plowheads -plowing -plowjogger -plowland -plowlands -plowlight -plowline -plowmaker -plowmaking -plowman -plowmanship -plowmell -plowmen -plowpoint -Plowrightia -plows -plow-shaped -plowshare -plowshares -plowshoe -plowstaff -plowstilt -plowtail -plowter -plow-torn -plowwise -plowwoman -plowwright -PLP -Plpuszta -PLR -PLS -PLSS -PLT -pltano -plu -Pluchea -pluck -pluckage -pluck-buffet -plucked -pluckedness -Pluckemin -plucker -Pluckerian -pluckers -plucky -pluckier -pluckiest -pluckily -pluckiness -plucking -pluckless -plucklessly -plucklessness -plucks -plud -pluff -pluffer -pluffy -plug -plugboard -plugdrawer -pluggable -plugged -plugger -pluggers -pluggy -plugging -pluggingly -plug-hatted -plughole -pluglees -plugless -pluglike -plugman -plugmen -plugola -plugolas -plugs -plug's -plugtray -plugtree -plugugly -plug-ugly -pluguglies -plum -pluma -plumaceous -plumach -plumade -plumage -plumaged -plumagery -plumages -plumasite -plumassier -plumate -Plumatella -plumatellid -Plumatellidae -plumatelloid -plumb -plumb- -plumbable -plumbage -plumbagin -Plumbaginaceae -plumbaginaceous -plumbagine -plumbaginous -plumbago -plumbagos -plumbate -plumb-bob -plumbean -plumbed -plumbeous -plumber -plumber-block -plumbery -plumberies -plumbers -plumbership -plumbet -plumbic -plumbicon -plumbiferous -plumbing -plumbings -plumbism -plumbisms -plumbisolvent -plumbite -plumbless -plumblessness -plumb-line -plum-blue -plumbness -Plumbo -plumbo- -plumbog -plumbojarosite -plumboniobate -plumbosolvency -plumbosolvent -plumbous -plum-brown -plumb-rule -plumbs -plumb's -plumbum -plumbums -plum-cake -plum-colored -plumcot -plumdamas -plumdamis -plum-duff -Plume -plume-crowned -plumed -plume-decked -plume-dressed -plume-embroidered -plume-fronted -plume-gay -plumeless -plumelet -plumelets -plumelike -plume-like -plumemaker -plumemaking -plumeopicean -plumeous -plume-plucked -plume-plucking -plumer -plumery -Plumerville -plumes -plume-soft -plume-stripped -plumet -plumete -plumetis -plumette -plum-green -plumy -plumicorn -plumier -Plumiera -plumieride -plumiest -plumify -plumification -plumiform -plumiformly -plumigerous -pluminess -pluming -plumiped -plumipede -plumipeds -plumist -plumless -plumlet -plumlike -Plummer -plummer-block -plummet -plummeted -plummeting -plummetless -plummets -plummy -plummier -plummiest -plumming -plumose -plumosely -plumoseness -plumosite -plumosity -plumous -plump -plumped -plumpen -plumpened -plumpening -plumpens -plumper -plumpers -plumpest -plumpy -plum-pie -plumping -plumpish -plumply -plumpness -plumpnesses -plum-porridge -plumps -plum-purple -plumrock -plums -plum's -plum-shaped -plum-sized -Plumsteadville -plum-tinted -Plumtree -plum-tree -plumula -plumulaceous -plumular -Plumularia -plumularian -Plumulariidae -plumulate -plumule -plumules -plumuliform -plumulose -Plumville -plunder -plunderable -plunderage -plunderbund -plundered -plunderer -plunderers -plunderess -plundering -plunderingly -plunderless -plunderous -plunderproof -plunders -plunge -plunged -plungeon -plunger -plungers -plunges -plungy -plunging -plungingly -plungingness -plunk -plunked -plunker -plunkers -Plunkett -plunking -plunks -plunther -plup -plupatriotic -pluperfect -pluperfectly -pluperfectness -pluperfects -plupf -plur -plur. -plural -pluralisation -pluralise -pluralised -pluraliser -pluralising -pluralism -pluralist -pluralistic -pluralistically -plurality -pluralities -pluralization -pluralizations -pluralize -pluralized -pluralizer -pluralizes -pluralizing -plurally -pluralness -plurals -plurative -plurel -plurennial -pluri- -pluriaxial -pluribus -pluricarinate -pluricarpellary -pluricellular -pluricentral -pluricipital -pluricuspid -pluricuspidate -pluridentate -pluries -plurifacial -plurifetation -plurify -plurification -pluriflagellate -pluriflorous -plurifoliate -plurifoliolate -pluriglandular -pluriguttulate -plurilateral -plurilingual -plurilingualism -plurilingualist -pluriliteral -plurilocular -plurimammate -plurinominal -plurinucleate -pluripara -pluriparity -pluriparous -pluripartite -pluripetalous -pluripotence -pluripotent -pluripresence -pluriseptate -pluriserial -pluriseriate -pluriseriated -plurisetose -plurisy -plurisyllabic -plurisyllable -plurispiral -plurisporous -plurivalent -plurivalve -plurivory -plurivorous -plus -Plusch -pluses -plus-foured -plus-fours -plush -plushed -plusher -plushes -plushest -plushette -plushy -plushier -plushiest -plushily -plushiness -plushly -plushlike -plushness -Plusia -Plusiinae -plusquam -plusquamperfect -plussage -plussages -plusses -Plutarch -plutarchy -Plutarchian -Plutarchic -Plutarchical -Plutarchically -pluteal -plutean -plutei -pluteiform -Plutella -pluteus -pluteuses -pluteutei -Pluto -plutocracy -plutocracies -plutocrat -plutocratic -plutocratical -plutocratically -plutocrats -plutolatry -plutology -plutological -plutologist -plutomania -pluton -Plutonian -Plutonic -Plutonion -plutonism -plutonist -plutonite -Plutonium -plutoniums -plutonometamorphism -plutonomy -plutonomic -plutonomist -plutons -plutter -Plutus -Pluvi -pluvial -pluvialiform -pluvialine -Pluvialis -pluvially -pluvials -pluvian -pluvine -pluviograph -pluviography -pluviographic -pluviographical -pluviometer -pluviometry -pluviometric -pluviometrical -pluviometrically -pluvioscope -pluvioscopic -Pluviose -pluviosity -pluvious -Pluvius -Plze -Plzen -PM -pm. -PMA -PMAC -PMC -PMDF -PMEG -PMG -PMIRR -pmk -PMO -PMOS -PMRC -pmsg -PMT -PMU -PMX -PN -pn- -PNA -PNB -pnce -PNdB -pnea -pneo- -pneodynamics -pneograph -pneomanometer -pneometer -pneometry -pneophore -pneoscope -pneudraulic -pneum -pneum- -pneuma -pneumarthrosis -pneumas -pneumat- -pneumathaemia -pneumatic -pneumatical -pneumatically -pneumaticity -pneumaticness -pneumatico- -pneumatico-hydraulic -pneumatics -pneumatic-tired -pneumatism -pneumatist -pneumatize -pneumatized -pneumato- -pneumatocardia -pneumatoce -pneumatocele -pneumatochemical -pneumatochemistry -pneumatocyst -pneumatocystic -pneumatode -pneumatogenic -pneumatogenous -pneumatogram -pneumatograph -pneumatographer -pneumatography -pneumatographic -pneumato-hydato-genetic -pneumatolysis -pneumatolitic -pneumatolytic -pneumatology -pneumatologic -pneumatological -pneumatologist -Pneumatomachy -Pneumatomachian -Pneumatomachist -pneumatometer -pneumatometry -pneumatomorphic -pneumatonomy -pneumatophany -pneumatophanic -pneumatophilosophy -pneumatophobia -pneumatophony -pneumatophonic -pneumatophore -pneumatophoric -pneumatophorous -pneumatorrhachis -pneumatoscope -pneumatosic -pneumatosis -pneumatostatics -pneumatotactic -pneumatotherapeutics -pneumatotherapy -Pneumatria -pneumaturia -pneume -pneumectomy -pneumectomies -pneumo- -pneumobacillus -Pneumobranchia -Pneumobranchiata -pneumocele -pneumocentesis -pneumochirurgia -pneumococcal -pneumococcemia -pneumococci -pneumococcic -pneumococcocci -pneumococcous -pneumococcus -pneumoconiosis -pneumoderma -pneumodynamic -pneumodynamics -pneumoencephalitis -pneumoencephalogram -pneumoenteritis -pneumogastric -pneumogram -pneumograph -pneumography -pneumographic -pneumohemothorax -pneumohydropericardium -pneumohydrothorax -pneumolysis -pneumolith -pneumolithiasis -pneumology -pneumological -pneumomalacia -pneumomassage -Pneumometer -pneumomycosis -pneumonalgia -pneumonectasia -pneumonectomy -pneumonectomies -pneumonedema -pneumony -pneumonia -pneumonic -pneumonitic -pneumonitis -pneumono- -pneumonocace -pneumonocarcinoma -pneumonocele -pneumonocentesis -pneumonocirrhosis -pneumonoconiosis -pneumonodynia -pneumonoenteritis -pneumonoerysipelas -pneumonography -pneumonographic -pneumonokoniosis -pneumonolysis -pneumonolith -pneumonolithiasis -pneumonomelanosis -pneumonometer -pneumonomycosis -pneumonoparesis -pneumonopathy -pneumonopexy -pneumonophorous -pneumonophthisis -pneumonopleuritis -pneumonorrhagia -pneumonorrhaphy -pneumonosis -pneumonotherapy -pneumonotomy -pneumonoultramicroscopicsilicovolcanoconiosis -pneumopericardium -pneumoperitoneum -pneumoperitonitis -pneumopexy -pneumopyothorax -pneumopleuritis -pneumorrachis -pneumorrhachis -pneumorrhagia -pneumotactic -pneumotherapeutics -pneumotherapy -pneumothorax -pneumotyphoid -pneumotyphus -pneumotomy -pneumotoxin -pneumotropic -pneumotropism -pneumoventriculography -pnigerophobia -pnigophobia -pnyx -Pnompenh -Pnom-penh -PNP -PNPN -pnxt -PO -POA -Poaceae -poaceous -poach -poachable -poachard -poachards -poached -poacher -poachers -poaches -poachy -poachier -poachiest -poachiness -poaching -Poales -poalike -POB -pobby -pobbies -pobedy -Poblacht -poblacion -POBox -pobs -POC -Poca -Pocahontas -pocan -Pocasset -Pocatello -pochade -pochades -pochay -pochaise -pochard -pochards -poche -pochette -pochettino -pochismo -pochoir -pochote -pocill -pocilliform -pock -pock-arred -pocked -pocket -pocketable -pocketableness -pocketbook -pocket-book -pocketbooks -pocketbook's -pocketcase -pocketed -pocket-eyed -pocketer -pocketers -pocketful -pocketfuls -pocket-handkerchief -pockety -pocketing -pocketknife -pocket-knife -pocketknives -pocketless -pocketlike -pocket-money -pockets -pocketsful -pocket-size -pocket-sized -pock-frecken -pock-fretten -pockhouse -pocky -pockier -pockiest -pockily -pockiness -pocking -pockmanky -pockmanteau -pockmantie -pockmark -pockmarked -pock-marked -pockmarking -pockmarks -pock-pit -pocks -pockweed -pockwood -poco -pococurante -poco-curante -pococuranteism -pococurantic -pococurantish -pococurantism -pococurantist -Pocola -Pocono -Pocopson -pocosen -pocosin -pocosins -pocoson -pocul -poculary -poculation -poculent -poculiform -pocus -pod -PO'd -poda -podagra -podagral -podagras -podagry -podagric -podagrical -podagrous -podal -podalgia -podalic -Podaliriidae -Podalirius -podanger -Podarces -Podarge -Podargidae -Podarginae -podargine -podargue -Podargus -podarthral -podarthritis -podarthrum -podatus -Podaxonia -podaxonial -podded -podder -poddy -poddia -poddidge -poddy-dodger -poddies -poddige -podding -poddish -poddle -poddock -podelcoma -podeon -Podes -podesta -podestas -podesterate -podetia -podetiiform -podetium -podex -podge -podger -podgy -podgier -podgiest -podgily -podginess -Podgorica -Podgoritsa -Podgorny -podia -podial -podiatry -podiatric -podiatries -podiatrist -podiatrists -podical -Podiceps -podices -Podicipedidae -podilegous -podite -podites -poditic -poditti -podium -podiums -podley -podler -podlike -podo- -podobranch -podobranchia -podobranchial -podobranchiate -podocarp -Podocarpaceae -Podocarpineae -podocarpous -Podocarpus -podocephalous -pododerm -pododynia -podogyn -podogyne -podogynium -Podolian -podolite -podology -Podolsk -podomancy -podomere -podomeres -podometer -podometry -Podophyllaceae -podophyllic -podophyllin -podophyllotoxin -podophyllous -Podophyllum -Podophrya -Podophryidae -Podophthalma -Podophthalmata -podophthalmate -podophthalmatous -Podophthalmia -podophthalmian -podophthalmic -podophthalmite -podophthalmitic -podophthalmous -podos -podoscaph -podoscapher -podoscopy -Podosomata -podosomatous -podosperm -Podosphaera -Podostemaceae -podostemaceous -podostemad -Podostemon -Podostemonaceae -podostemonaceous -Podostomata -podostomatous -podotheca -podothecal -podous -Podozamites -pods -pod's -pod-shaped -Podsnap -Podsnappery -podsol -podsolic -podsolization -podsolize -podsolized -podsolizing -podsols -podtia -Podunk -Podura -poduran -podurid -Poduridae -Podvin -podware -podzol -podzolic -podzolization -podzolize -podzolized -podzolizing -podzols -POE -Poeas -poebird -poe-bird -poechore -poechores -poechoric -Poecile -Poeciliidae -poecilite -poecilitic -poecilo- -Poecilocyttares -poecilocyttarous -poecilogony -poecilogonous -poecilomere -poecilonym -poecilonymy -poecilonymic -poecilopod -Poecilopoda -poecilopodous -poem -poematic -poemet -poemlet -poems -poem's -poenitentiae -poenology -Poephaga -poephagous -Poephagus -poesy -poesie -poesies -poesiless -poesis -Poestenkill -poet -poet. -poet-artist -poetaster -poetastery -poetastering -poetasterism -poetasters -poetastress -poetastry -poetastric -poetastrical -poetcraft -poetdom -poet-dramatist -poetesque -poetess -poetesses -poet-farmer -poet-historian -poethood -poet-humorist -poetic -poetical -poeticality -poetically -poeticalness -poeticise -poeticised -poeticising -poeticism -poeticize -poeticized -poeticizing -poeticness -poetico- -poetico-antiquarian -poetico-architectural -poetico-grotesque -poetico-mystical -poetico-mythological -poetico-philosophic -poetics -poeticule -poetiised -poetiising -poet-in-residence -poetise -poetised -poetiser -poetisers -poetises -poetising -poetito -poetization -poetize -poetized -poetizer -poetizers -poetizes -poetizing -poet-king -poet-laureateship -poetless -poetly -poetlike -poetling -poet-musician -poet-novelist -poetomachia -poet-painter -poet-patriot -poet-pilgrim -poet-playwright -poet-plowman -poet-preacher -poet-priest -poet-princess -poetress -poetry -poetries -poetryless -poetry-proof -poetry's -poets -poet's -poet-saint -poet-satirist -poet-seer -poetship -poet-thinker -poet-warrior -poetwise -POF -po-faced -poffle -Pofo -pogamoggan -Pogany -pogey -pogeys -pogge -poggy -poggies -pogy -pogies -POGO -Pogonatum -Pogonia -pogonias -pogoniasis -pogoniate -pogonion -pogonip -pogonips -pogoniris -pogonite -pogonology -pogonological -pogonologist -pogonophobia -pogonophoran -pogonotomy -pogonotrophy -pogo-stick -pogrom -pogromed -pogroming -pogromist -pogromize -pogroms -Pogue -POH -poha -Pohai -Pohang -pohickory -Pohjola -pohna -pohutukawa -poi -poy -Poiana -Poyang -poybird -Poictesme -Poyen -poiesis -poietic -poignado -poignance -poignancy -poignancies -poignant -poignantly -poignard -poignet -poikile -poikilie -poikilitic -poikilo- -poikiloblast -poikiloblastic -poikilocyte -poikilocythemia -poikilocytosis -poikilotherm -poikilothermal -poikilothermy -poikilothermic -poikilothermism -poil -poilu -poilus -poimenic -poimenics -poinado -poinard -Poincar -Poincare -Poinciana -poincianas -poind -poindable -poinded -poinder -poinding -poinds -Poine -poinephobia -Poynette -Poynor -Poinsettia -poinsettias -Point -pointable -pointage -pointal -pointblank -point-blank -point-device -point-duty -pointe -pointed -pointedly -pointedness -pointel -poyntell -Poyntelle -Pointe-Noire -pointer -Pointers -pointes -Pointe-tre -point-event -pointful -pointfully -pointfulness -pointy -pointier -pointiest -poyntill -pointillage -pointille -Pointillism -pointillist -pointilliste -pointillistic -pointillists -pointing -Poynting -pointingly -point-lace -point-laced -pointless -pointlessly -pointlessness -pointlet -pointleted -pointmaker -pointmaking -pointman -pointmen -pointment -point-on -point-particle -pointrel -points -point-set -pointsman -pointsmen -pointswoman -point-to-point -pointure -pointways -pointwise -poyou -poyous -poire -Poirer -pois -poisable -poise -poised -poiser -poisers -poises -poiseuille -poising -Poysippi -poison -poisonable -poisonberry -poisonbush -poisoned -poisoner -poisoners -poisonful -poisonfully -poisoning -poisonings -poison-laden -poisonless -poisonlessness -poisonmaker -poisonous -poisonously -poisonousness -poison-pen -poisonproof -poisons -poison-sprinkled -poison-tainted -poison-tipped -poison-toothed -poisonweed -poisonwood -poissarde -Poyssick -Poisson -poister -poisure -Poitiers -Poitou -Poitou-Charentes -poitrail -poitrel -poitrels -poitrinaire -poivrade -POK -pokable -Pokan -Pokanoket -poke -pokeberry -pokeberries -poke-bonnet -poke-bonneted -poke-brimmed -poke-cheeked -poked -poke-easy -pokeful -pokey -pokeys -pokelogan -pokeloken -pokeout -poke-pudding -poker -pokerface -poker-faced -pokerish -pokerishly -pokerishness -pokerlike -pokeroot -pokeroots -pokers -poker-work -pokes -pokeweed -pokeweeds -poky -pokie -pokier -pokies -pokiest -pokily -pokiness -pokinesses -poking -pokingly -Pokom -Pokomam -Pokomo -pokomoo -Pokonchi -Pokorny -pokunt -POL -Pol. -Pola -Polab -Polabian -Polabish -Polacca -polacca-rigged -Polack -polacre -Polad -Polak -Poland -Polander -Polanisia -Polanski -polar -polaran -polarans -Polard -polary -polari- -polaric -Polarid -polarigraphic -polarily -polarimeter -polarimetry -polarimetric -polarimetries -Polaris -polarisability -polarisable -polarisation -polariscope -polariscoped -polariscopy -polariscopic -polariscopically -polariscoping -polariscopist -polarise -polarised -polariser -polarises -polarising -polaristic -polaristrobometer -polarity -polarities -polarity's -polariton -polarizability -polarizable -polarization -polarizations -polarize -polarized -polarizer -polarizes -polarizing -polarly -polarogram -Polarograph -polarography -polarographic -polarographically -Polaroid -polaroids -polaron -polarons -polars -polarward -Polash -polatouche -polaxis -poldavy -poldavis -polder -polderboy -polderland -polderman -polders -poldoody -poldron -pole -polearm -pole-armed -poleax -poleaxe -pole-axe -poleaxed -poleaxer -poleaxes -poleaxing -poleburn -polecat -polecats -poled -pole-dried -polehead -poley -poleyn -poleyne -poleyns -poleis -pole-jump -polejumper -poleless -poleman -polemarch -pole-masted -polemic -polemical -polemically -polemician -polemicist -polemicists -polemicize -polemics -polemist -polemists -polemize -polemized -polemizes -polemizing -Polemoniaceae -polemoniaceous -Polemoniales -Polemonium -polemoscope -polenta -polentas -Poler -polers -poles -polesaw -polesetter -pole-shaped -Polesian -polesman -pole-stack -polestar -polestars -pole-trap -pole-vault -pole-vaulter -poleward -polewards -polewig -poly -poly- -polyacanthus -polyacid -polyacoustic -polyacoustics -polyacrylamide -polyacrylonitrile -polyact -polyactinal -polyactine -Polyactinia -poliad -polyad -polyadelph -Polyadelphia -polyadelphian -polyadelphous -polyadenia -polyadenitis -polyadenoma -polyadenous -poliadic -polyadic -polyaemia -polyaemic -polyaffectioned -polyalcohol -polyalphabetic -polyamide -polyamylose -polyamine -Polian -polyandry -Polyandria -polyandrian -polyandrianism -polyandric -polyandries -polyandrious -polyandrism -polyandrist -polyandrium -polyandrous -Polyangium -polyangular -polianite -polyantha -Polianthes -polyanthi -polyanthy -polyanthous -polyanthus -polyanthuses -polyarch -polyarchal -polyarchy -polyarchic -polyarchical -polyarchies -polyarchist -Poliard -polyarteritis -polyarthric -polyarthritic -polyarthritis -polyarthrous -polyarticular -Polias -Poliatas -polyatomic -polyatomicity -polyautography -polyautographic -polyaxial -polyaxon -polyaxone -polyaxonic -polybasic -polybasicity -polybasite -Polybius -polyblast -Polyborinae -polyborine -Polyborus -Polybotes -polybranch -Polybranchia -polybranchian -Polybranchiata -polybranchiate -polybrid -polybrids -polybromid -polybromide -polybuny -polybunous -Polybus -polybutene -polybutylene -polybuttoned -polycarbonate -polycarboxylic -Polycarp -polycarpellary -polycarpy -polycarpic -Polycarpon -polycarpous -Polycaste -police -policed -policedom -policeless -polycellular -policeman -policemanish -policemanism -policemanlike -policemanship -policemen -polycentral -polycentric -polycentrism -polycentrist -polycephaly -polycephalic -polycephalous -polices -police's -police-up -policewoman -policewomen -Polychaeta -polychaetal -polychaetan -polychaete -polychaetous -polychasia -polychasial -polychasium -Polichinelle -polychloride -polychoerany -polychord -polychotomy -polychotomous -polychrest -polychresty -polychrestic -polychrestical -polychroic -polychroism -polychroite -polychromasia -polychromate -polychromatic -polychromatism -polychromatist -polychromatize -polychromatophil -polychromatophile -polychromatophilia -polychromatophilic -polychrome -polychromy -polychromia -polychromic -polychromism -polychromist -polychromize -polychromous -polychronicon -polychronious -polychsia -policy -policial -polycyanide -polycycly -polycyclic -policies -polycyesis -policyholder -policy-holder -policyholders -polyciliate -policymaker -policymaking -policing -policy's -polycystic -polycistronic -polycythaemia -polycythaemic -polycythemia -polycythemic -polycitral -Polycyttaria -policize -policizer -polyclad -polyclady -Polycladida -polycladine -polycladose -polycladous -Polycleitus -Polycletan -Polycletus -policlinic -polyclinic -polyclinics -Polyclitus -polyclona -polycoccous -Polycodium -polycondensation -polyconic -polycormic -polycot -polycotyl -polycotyledon -polycotyledonary -polycotyledony -polycotyledonous -polycotyly -polycotylous -polycots -polycracy -polycrase -Polycrates -polycratic -polycrystal -polycrystalline -polycrotic -polycrotism -polyctenid -Polyctenidae -polycttarian -polyculture -polydactyl -polydactyle -polydactyly -polydactylies -polydactylism -polydactylous -Polydactylus -polydaemoniac -polydaemonism -polydaemonist -polydaemonistic -polydemic -polydemonism -polydemonist -polydenominational -polydental -polydermy -polydermous -Polydeuces -polydigital -polydimensional -polydymite -polydynamic -polydipsia -polydipsic -polydisperse -polydispersity -polydomous -polydontia -Polydora -Polydorus -polyedral -polyeidic -polyeidism -polyelectrolyte -polyembryonate -polyembryony -polyembryonic -polyemia -polyemic -poliencephalitis -poliencephalomyelitis -polyene -polyenes -polyenic -polyenzymatic -polyergic -Polyergus -polies -polyester -polyesterification -polyesters -polyesthesia -polyesthetic -polyestrous -polyethylene -polyethnic -Polieus -polyfenestral -Polyfibre -polyflorous -polyfoil -polyfold -Polygala -Polygalaceae -polygalaceous -polygalas -polygalic -polygalin -polygam -polygamy -Polygamia -polygamian -polygamic -polygamical -polygamically -polygamies -polygamist -polygamistic -polygamists -polygamize -polygamodioecious -polygamous -polygamously -polyganglionic -poligar -polygar -polygarchy -poligarship -polygastric -polygene -polygenes -polygenesic -polygenesis -polygenesist -polygenetic -polygenetically -polygeny -polygenic -polygenism -polygenist -polygenistic -polygenous -polygenouss -polygyn -polygynaiky -polygyny -Polygynia -polygynian -polygynic -polygynies -polygynious -polygynist -polygynoecial -polygynous -polygyral -polygyria -polyglandular -polyglycerol -polyglobulia -polyglobulism -polyglossary -polyglot -polyglotism -polyglotry -polyglots -polyglottal -polyglottally -polyglotted -polyglotter -polyglottery -polyglottic -polyglottically -polyglotting -polyglottism -polyglottist -polyglottonic -polyglottous -polyglotwise -Polygnotus -polygon -Polygonaceae -polygonaceous -polygonal -Polygonales -polygonally -Polygonatum -Polygonella -polygoneutic -polygoneutism -polygony -Polygonia -polygonic -polygonically -polygonies -polygonoid -polygonometry -polygonous -polygons -Polygonum -Polygordius -polygram -polygrammatic -polygraph -polygrapher -polygraphy -polygraphic -poligraphical -polygraphically -polygraphist -polygraphs -polygroove -polygrooved -polyhaemia -polyhaemic -polyhalide -polyhalite -polyhalogen -polyharmony -polyharmonic -polyhedra -polyhedral -polyhedrals -polyhedric -polyhedrical -polyhedroid -polyhedron -polyhedrons -polyhedrosis -polyhedrous -polyhemia -polyhemic -polyhybrid -polyhydric -polyhidrosis -polyhydroxy -Polyhymnia -polyhistor -polyhistory -polyhistorian -polyhistoric -polyideic -polyideism -polyidrosis -Polyidus -polyimide -polyiodide -polyisobutene -polyisoprene -polyisotopic -Polik -polykaryocyte -Polykarp -polylaminated -polylemma -polylepidous -polylinguist -polylith -polylithic -polilla -polylobular -polylogy -polyloquent -polymagnet -polymania -polymasty -polymastia -polymastic -Polymastiga -polymastigate -Polymastigida -Polymastigina -polymastigote -polymastigous -polymastism -Polymastodon -polymastodont -Polymastus -polymath -polymathy -polymathic -polymathist -polymaths -polymazia -Polymela -Polymele -polymely -polymelia -polymelian -Polymelus -polymer -polymerase -polymere -polymery -polymeria -polymeric -polymerically -polymeride -polymerise -polymerism -polymerization -polymerize -polymerized -polymerizes -polymerizing -polymerous -polymers -polymer's -polymetallism -polymetameric -polymeter -polymethylene -polymetochia -polymetochic -polimetrum -Polymyaria -polymyarian -Polymyarii -polymicrian -polymicrobial -polymicrobic -polymicroscope -polymignite -Polymyodi -polymyodian -polymyodous -polymyoid -polymyositis -polymythy -polymythic -Polymixia -polymixiid -Polymixiidae -polymyxin -Polymnestor -polymny -Polymnia -polymnite -polymolecular -polymolybdate -polymorph -Polymorpha -polymorphean -polymorphy -polymorphic -polymorphically -polymorphism -polymorphisms -polymorphistic -polymorpho- -polymorphonuclear -polymorphonucleate -polymorphosis -polymorphous -polymorphously -polymorphous-perverse -poly-mountain -polynaphthene -polynee -Polyneices -polynemid -Polynemidae -polynemoid -Polynemus -Polynesia -Polynesian -polynesians -polynesic -polyneural -polyneuric -polyneuritic -polyneuritis -polyneuropathy -poling -polynia -polynya -polynyas -Polinices -Polynices -polynodal -Polynoe -polynoid -Polynoidae -polynome -polynomial -polynomialism -polynomialist -polynomials -polynomial's -polynomic -Polinski -polynucleal -polynuclear -polynucleate -polynucleated -polynucleolar -polynucleosis -polynucleotidase -polynucleotide -polio -Polyodon -polyodont -polyodontal -polyodontia -Polyodontidae -polyodontoid -polyoecy -polyoecious -polyoeciously -polyoeciousness -polyoecism -polioencephalitis -polioencephalomyelitis -polyoicous -polyol -polyoma -polyomas -poliomyelitic -poliomyelitis -poliomyelitises -poliomyelopathy -polyommatous -polioneuromere -polyonychia -polyonym -polyonymal -polyonymy -polyonymic -polyonymist -polyonymous -polyonomy -polyonomous -polionotus -polyophthalmic -polyopia -polyopic -polyopsy -polyopsia -polyorama -poliorcetic -poliorcetics -polyorchidism -polyorchism -polyorganic -polios -polyose -poliosis -Polyot -poliovirus -polyoxide -polyoxymethylene -polyp -polypage -polypaged -polypapilloma -polyparasitic -polyparasitism -polyparesis -polypary -polyparia -polyparian -polyparies -polyparium -polyparous -polypean -polyped -Polypedates -Polypemon -polypeptide -polypeptidic -polypetal -Polypetalae -polypetaly -polypetalous -Polyphaga -polyphage -polyphagy -polyphagia -polyphagian -polyphagic -polyphagist -polyphagous -polyphalangism -polypharmacal -polypharmacy -polypharmacist -polypharmacon -polypharmic -polyphasal -polyphase -polyphaser -polyphasic -Polypheme -polyphemian -polyphemic -polyphemous -Polyphemus -polyphenol -polyphenolic -Polyphides -polyphylesis -polyphylety -polyphyletic -polyphyletically -polyphyleticism -polyphyly -polyphylly -polyphylline -polyphyllous -polyphylogeny -polyphyodont -polyphloesboean -polyphloisboioism -polyphloisboism -polyphobia -polyphobic -polyphone -polyphoned -polyphony -polyphonia -polyphonic -polyphonical -polyphonically -polyphonies -polyphonism -polyphonist -polyphonium -polyphonous -polyphonously -polyphore -polyphosphoric -polyphotal -polyphote -Polypi -polypian -polypide -polypides -polypidom -polypier -polypifer -Polypifera -polypiferous -polypigerous -polypinnate -polypite -Polyplacophora -polyplacophoran -polyplacophore -polyplacophorous -polyplastic -Polyplectron -polyplegia -polyplegic -polyploid -polyploidy -polyploidic -polypnea -polypneas -polypneic -polypnoea -polypnoeic -polypod -Polypoda -polypody -polypodia -Polypodiaceae -polypodiaceous -polypodies -Polypodium -polypodous -polypods -polypoid -polypoidal -Polypomorpha -polypomorphic -Polyporaceae -polyporaceous -polypore -polypores -polyporite -polyporoid -polyporous -Polyporthis -Polyporus -polypose -polyposis -polypotome -polypous -polypragmacy -polypragmaty -polypragmatic -polypragmatical -polypragmatically -polypragmatism -polypragmatist -polypragmist -polypragmon -polypragmonic -polypragmonist -polyprene -polyprism -polyprismatic -polypropylene -polyprothetic -polyprotic -polyprotodont -Polyprotodontia -polyps -polypseudonymous -polypsychic -polypsychical -polypsychism -polypterid -Polypteridae -polypteroid -Polypterus -polyptych -polyptote -polyptoton -polypus -polypuses -polyrhythm -polyrhythmic -polyrhythmical -polyrhythmically -polyrhizal -polyrhizous -polyribonucleotide -polyribosomal -polyribosome -polis -polys -polysaccharide -polysaccharose -Polysaccum -polysalicylide -polysaprobic -polysarcia -polysarcous -polyschematic -polyschematist -poli-sci -polyscope -polyscopic -polysemant -polysemantic -polysemeia -polysemy -polysemia -polysemies -polysemous -polysemousness -polysensuous -polysensuousness -polysepalous -polyseptate -polyserositis -Polish -polishable -Polish-american -polished -polishedly -polishedness -polisher -polishers -polishes -polishing -polishings -Polish-jew -Polish-made -polishment -Polish-speaking -polysided -polysidedness -polysilicate -polysilicic -polysyllabic -polysyllabical -polysyllabically -polysyllabicism -polysyllabicity -polysyllabism -polysyllable -polysyllables -polysyllogism -polysyllogistic -polysymmetry -polysymmetrical -polysymmetrically -polysynaptic -polysynaptically -polysyndetic -polysyndetically -polysyndeton -polysynthesis -polysynthesism -polysynthetic -polysynthetical -polysynthetically -polysyntheticism -polysynthetism -polysynthetize -Polysiphonia -polysiphonic -polysiphonous -polisman -polysomaty -polysomatic -polysomatous -polysome -polysomes -polysomy -polysomia -polysomic -polysomitic -polysomous -polysorbate -polyspast -polyspaston -polyspermal -polyspermatous -polyspermy -polyspermia -polyspermic -polyspermous -polyspondyly -polyspondylic -polyspondylous -Polyspora -polysporangium -polyspore -polyspored -polysporic -polysporous -polissoir -polista -polystachyous -polystaurion -polystele -polystelic -polystellic -polystemonous -Polistes -polystichoid -polystichous -Polystichum -Polystictus -polystylar -polystyle -polystylous -polystyrene -Polystomata -Polystomatidae -polystomatous -polystome -Polystomea -Polystomella -Polystomidae -polystomium -polysulfide -polysulfonate -polysulphid -polysulphide -polysulphonate -polysulphuration -polysulphurization -polysuspensoid -polit -polit. -politarch -politarchic -Politbureau -Politburo -polite -polytechnic -polytechnical -polytechnics -polytechnist -politeful -politei -politeia -politely -polytene -politeness -politenesses -polyteny -polytenies -politer -polyterpene -politesse -politest -polytetrafluoroethylene -Polythalamia -polythalamian -polythalamic -polythalamous -polythecial -polytheism -polytheisms -polytheist -polytheistic -polytheistical -polytheistically -polytheists -polytheize -polythely -polythelia -polythelism -polythene -polythionic -Politi -polity -Politian -politic -political -politicalism -politicalization -politicalize -politicalized -politicalizing -politically -political-minded -politicaster -politician -politician-proof -politicians -politician's -politicious -politicise -politicised -politicising -politicist -politicization -politicize -politicized -politicizer -politicizes -politicizing -politick -politicked -politicker -politicking -politicks -politicly -politicness -politico -politico- -politico-arithmetical -politico-commercial -politico-diplomatic -politico-ecclesiastical -politico-economical -politicoes -politico-ethical -politico-geographical -politico-judicial -politicomania -politico-military -politico-moral -politico-orthodox -politico-peripatetic -politicophobia -politico-religious -politicos -politico-sacerdotal -politico-scientific -politico-social -politico-theological -politics -politied -polities -polytype -polytyped -polytypes -polytypy -polytypic -polytypical -polytyping -polytypism -Politique -politist -polytitanic -politize -Polito -polytocous -polytoky -polytokous -polytomy -polytomies -polytomous -polytonal -polytonalism -polytonality -polytonally -polytone -polytony -polytonic -polytope -polytopic -polytopical -Polytrichaceae -polytrichaceous -polytrichia -polytrichous -Polytrichum -polytrochal -polytrochous -polytrope -polytrophic -polytropic -polytungstate -polytungstic -politure -politzerization -politzerize -Poliuchus -polyunsaturate -polyunsaturated -polyuresis -polyurethan -polyurethane -polyuria -polyurias -polyuric -polyvalence -polyvalency -polyvalent -polyve -Polivy -polyvinyl -polyvinyl-formaldehyde -polyvinylidene -polyvinylpyrrolidone -polyvirulent -polyvoltine -polywater -Polyxena -Polyxenus -Polyxo -Polyzoa -polyzoal -polyzoan -polyzoans -polyzoary -polyzoaria -polyzoarial -polyzoarium -polyzoic -polyzoism -polyzonal -polyzooid -polyzoon -polje -Polk -polka -polkadot -polka-dot -polka-dotted -polkaed -polkaing -polkas -polki -Polky -Polkton -Polkville -Poll -pollable -Pollack -pollacks -polladz -pollage -Pollaiolo -Pollaiuolo -Pollajuolo -Pollak -pollakiuria -pollam -pollan -pollarchy -Pollard -pollarded -pollarding -pollards -pollbook -pollcadot -poll-deed -polled -pollee -pollees -Pollen -pollenate -pollenation -pollen-covered -pollen-dusted -pollened -polleniferous -pollenigerous -pollening -pollenite -pollenivorous -pollenizer -pollenless -pollenlike -pollenosis -pollenproof -pollens -pollen-sprinkled -pollent -poller -pollera -polleras -Pollerd -pollers -pollet -polleten -pollette -pollex -Polly -Pollyanna -Pollyannaish -Pollyannaism -Pollyannish -pollical -pollicar -pollicate -pollices -pollicitation -Pollie -pollyfish -pollyfishes -polly-fox -pollin- -pollinar -pollinarium -pollinate -pollinated -pollinates -pollinating -pollination -pollinations -pollinator -pollinators -pollinctor -pollincture -polling -pollinia -pollinic -pollinical -polliniferous -pollinigerous -pollinium -pollinivorous -pollinization -pollinize -pollinized -pollinizer -pollinizing -pollinodial -pollinodium -pollinoid -pollinose -pollinosis -polly-parrot -pollist -pollists -Pollitt -polliwig -polliwog -pollywog -polliwogs -pollywogs -Polloch -Pollock -pollocks -Pollocksville -polloi -Pollok -poll-parrot -poll-parroty -polls -pollster -pollsters -pollucite -pollutant -pollutants -pollute -polluted -pollutedly -pollutedness -polluter -polluters -pollutes -polluting -pollutingly -pollution -pollutions -pollutive -Pollux -Polo -polocyte -poloconic -poloi -poloidal -poloist -poloists -polonaise -polonaises -Polonese -polony -Polonia -Polonial -Polonian -polonick -Polonism -polonium -poloniums -Polonius -Polonization -Polonize -Polonized -Polonizing -Polonnaruwa -polopony -polos -pols -Polska -Polson -polster -polt -Poltava -poltergeist -poltergeistism -poltergeists -poltfoot -polt-foot -poltfooted -poltina -poltinik -poltinnik -poltophagy -poltophagic -poltophagist -Poltoratsk -poltroon -poltroonery -poltroonish -poltroonishly -poltroonishness -poltroonism -poltroons -poluphloisboic -poluphloisboiotatotic -poluphloisboiotic -Polvadera -polverine -polzenite -POM -pomace -Pomaceae -pomacentrid -Pomacentridae -pomacentroid -Pomacentrus -pomaceous -pomaces -pomada -pomade -pomaded -Pomaderris -pomades -pomading -Pomak -pomander -pomanders -pomane -pomard -pomary -Pomaria -pomarine -pomarium -pomate -pomato -pomatoes -pomatomid -Pomatomidae -Pomatomus -pomatorhine -pomatum -pomatums -Pombal -pombe -pombo -Pomcroy -pome -pome-citron -pomegranate -pomegranates -pomey -pomeys -pomel -pomely -pome-like -pomelo -pomelos -Pomerania -Pomeranian -pomeranians -Pomerene -pomeria -pomeridian -pomerium -Pomeroy -Pomeroyton -Pomerol -pomes -pomeshchik -pomewater -Pomfrey -pomfrest -Pomfret -pomfret-cake -pomfrets -pomiculture -pomiculturist -pomiferous -pomiform -pomivorous -pommado -pommage -Pommard -pomme -pommee -pommey -Pommel -pommeled -pommeler -pommeling -pommelion -pomme-lion -pommelled -pommeller -pommelling -pommelo -pommels -pommer -pommery -Pommern -pommet -pommetty -pommy -pommie -pommies -Pomo -pomoerium -pomolo -pomology -pomological -pomologically -pomologies -pomologist -Pomona -pomonal -pomonic -Pomorze -Pomos -pomp -pompa -Pompadour -pompadours -pompal -pompano -pompanos -pompatic -Pompea -Pompei -Pompey -Pompeia -Pompeian -Pompeii -Pompeiian -pompelmoose -pompelmous -pomperkin -pompholygous -pompholix -pompholyx -pomphus -Pompidou -pompier -pompilid -Pompilidae -pompiloid -Pompilus -pompion -pompist -pompless -pompoleon -pompom -pom-pom -pom-pom-pullaway -pompoms -pompon -pompons -pompoon -pomposity -pomposities -pomposo -pompous -pompously -pompousness -pomps -pompster -Pomptine -poms -pomster -pon -Ponape -Ponca -Poncas -Ponce -ponceau -ponced -poncelet -ponces -Ponchartrain -Ponchatoula -poncho -ponchoed -ponchos -poncing -Poncirus -Pond -pondage -pond-apple -pondbush -ponded -ponder -ponderability -ponderable -ponderableness -Ponderay -ponderal -ponderance -ponderancy -ponderant -ponderary -ponderate -ponderation -ponderative -pondered -ponderer -ponderers -pondering -ponderingly -ponderling -ponderment -ponderomotive -Ponderosa -ponderosae -ponderosapine -ponderosity -ponderous -ponderously -ponderousness -ponders -pondfish -pondfishes -pondful -pondgrass -pondy -Pondicherry -ponding -pondlet -pondlike -pondman -Pondo -pondok -pondokkie -Pondoland -Pondomisi -ponds -pondside -pond-skater -pondus -pondville -pondweed -pondweeds -pondwort -pone -poney -Ponemah -ponent -Ponera -Poneramoeba -ponerid -Poneridae -Ponerinae -ponerine -poneroid -ponerology -pones -Poneto -pong -ponga -ponged -pongee -pongees -pongid -Pongidae -pongids -ponging -Pongo -pongs -ponhaws -pony -poniard -poniarded -poniarding -poniards -ponica -ponycart -ponied -ponier -ponies -ponying -pony's -ponytail -ponytails -ponja -ponograph -ponos -pons -Ponselle -Ponsford -pont -Pontac -Pontacq -pontage -pontal -Pontanus -Pontchartrain -Pontederia -Pontederiaceae -pontederiaceous -pontee -Pontefract -pontes -Pontevedra -Pontiac -pontiacs -Pontian -pontianac -Pontianak -Pontianus -Pontias -Pontic -ponticello -ponticellos -ponticular -ponticulus -pontifex -pontiff -pontiffs -pontify -pontific -pontifical -pontificalia -pontificalibus -pontificality -pontifically -pontificals -pontificate -pontificated -pontificates -pontificating -pontification -pontificator -pontifice -pontifices -pontificial -pontificially -pontificious -pontil -pontile -pontils -pontin -Pontine -Pontypool -Pontypridd -pontist -Pontius -pontlevis -pont-levis -ponto -Pontocaine -Pontocaspian -pontocerebellar -Ponton -Pontone -pontoneer -pontonier -pontons -pontoon -pontooneer -pontooner -pontooning -pontoons -Pontoppidan -Pontormo -Pontos -Pontotoc -Pontus -pontvolant -ponzite -Ponzo -pooa -pooch -pooched -pooches -pooching -Poock -pood -pooder -poodle -poodledom -poodleish -poodler -poodles -poodleship -poods -poof -poofy -poofs -pooftah -pooftahs -poofter -poofters -poogye -Pooh -Pooh-Bah -poohed -poohing -pooh-pooh -pooh-pooher -poohpoohist -poohs -Pooi -poojah -pook -pooka -pookaun -pookawn -pookhaun -pookoo -Pool -Poole -pooled -Pooley -Pooler -Poolesville -poolhall -poolhalls -pooli -pooly -pooling -poolroom -poolrooms -poolroot -pools -poolside -Poolville -poolwort -poon -Poona -poonac -poonah -poonce -poonga -poonga-oil -poongee -poonghee -poonghie -poons -Poop -pooped -poophyte -poophytic -pooping -Poopo -poops -poopsie -poor -poor-blooded -poor-box -poor-charactered -poor-clad -poor-do -Poore -poorer -poorest -poor-feeding -poor-folksy -poorga -poorhouse -poorhouses -poori -pooris -poorish -poor-law -poorly -poorlyish -poorliness -poorling -poormaster -poor-minded -poorness -poornesses -poor-rate -poor-sighted -poor-spirited -poor-spiritedly -poor-spiritedness -poort -poortith -poortiths -poorweed -poorwill -poor-will -poot -poother -pooty -poove -pooves -POP -pop- -popadam -Popayan -popal -popcorn -pop-corn -popcorns -popdock -Pope -Popean -popedom -popedoms -popeholy -pope-holy -popehood -popeye -popeyed -popeyes -popeism -Popejoy -Popele -popeler -popeless -popely -popelike -popeline -popeling -Popelka -popery -poperies -popes -popeship -popess -popglove -popgun -pop-gun -popgunner -popgunnery -popguns -Popian -popie -popify -popinac -popinjay -popinjays -Popish -popishly -popishness -popjoy -poplar -poplar-covered -poplar-crowned -poplared -poplar-flanked -Poplarism -poplar-leaved -poplar-lined -poplar-planted -poplars -Poplarville -popleman -poplesie -poplet -Poplilia -poplin -poplinette -poplins -poplitaeal -popliteal -poplitei -popliteus -poplitic -poplolly -Popocatepetl -Popocatpetl -Popocracy -Popocrat -popode -popodium -pop-off -Popolari -popolis -Popoloco -popomastic -Popov -popover -popovers -Popovets -poppa -poppability -poppable -poppadom -Poppas -poppean -popped -poppel -Popper -poppers -poppet -poppethead -poppet-head -poppets -Poppy -poppy-bordered -poppycock -poppycockish -poppy-colored -poppy-crimson -poppy-crowned -poppied -poppies -poppyfish -poppyfishes -poppy-flowered -poppy-haunted -poppyhead -poppy-head -poppylike -poppin -popping -popping-crease -poppy-pink -poppy-red -poppy's -poppy-seed -poppy-sprinkled -poppywort -popple -poppled -popples -popply -poppling -Poppo -POPS -pop's -popshop -pop-shop -popsy -Popsicle -popsie -popsies -populace -populaces -populacy -popular -populares -popularisation -popularise -popularised -populariser -popularising -popularism -Popularist -popularity -popularities -popularization -popularizations -popularize -popularized -popularizer -popularizes -popularizing -popularly -popularness -popular-priced -populate -populated -populates -populating -population -populational -populationist -populationistic -populationless -populations -populaton -populator -populeon -populi -populicide -populin -Populism -populisms -Populist -Populistic -populists -populous -populously -populousness -populousnesses -populum -Populus -pop-up -popweed -Poquonock -Poquoson -POR -porail -poral -Porbandar -porbeagle -porc -porcate -porcated -porcelain -porcelainization -porcelainize -porcelainized -porcelainizing -porcelainlike -porcelainous -porcelains -porcelaneous -porcelanic -porcelanite -porcelanous -Porcellana -porcellaneous -porcellanian -porcellanic -porcellanid -Porcellanidae -porcellanite -porcellanize -porcellanous -porch -Porche -porched -porches -porching -porchless -porchlike -porch's -Porcia -porcine -porcini -porcino -Porcula -porcupine -porcupines -porcupine's -porcupinish -pore -pored -Poree -porelike -Porella -porencephaly -porencephalia -porencephalic -porencephalitis -porencephalon -porencephalous -porencephalus -porer -pores -poret -Porett -porge -porger -porgy -porgies -porgo -Pori -pory -Poria -poricidal -Porifera -poriferal -Poriferan -poriferous -poriform -porimania -porina -poriness -poring -poringly -poriomanic -porion -porions -Porirua -porism -porismatic -porismatical -porismatically -porisms -poristic -poristical -porite -Porites -Poritidae -poritoid -pork -pork-barreling -porkburger -porkchop -porkeater -porker -porkery -porkers -porket -porkfish -porkfishes -porky -porkier -porkies -porkiest -porkin -porkiness -porkish -porkless -porkling -porkman -porkolt -Porkopolis -porkpen -porkpie -porkpies -porks -porkwood -porkwoods -porn -pornerastic -porny -porno -pornocracy -pornocrat -pornograph -pornographer -pornography -pornographic -pornographically -pornographies -pornographist -pornographomania -pornological -pornos -porns -Porocephalus -porodine -porodite -porogam -porogamy -porogamic -porogamous -porokaiwhiria -porokeratosis -Porokoto -poroma -poromas -poromata -poromeric -porometer -porophyllous -poroplastic -poroporo -pororoca -poros -poroscope -poroscopy -poroscopic -porose -poroseness -porosimeter -porosis -porosity -porosities -porotic -porotype -porous -porously -porousness -porpentine -porphine -porphyr- -Porphyra -Porphyraceae -porphyraceous -porphyratin -Porphyrean -Porphyry -porphyria -Porphyrian -Porphyrianist -porphyries -porphyrin -porphyrine -porphyrinuria -Porphyrio -Porphyrion -porphyrisation -porphyrite -porphyritic -porphyrization -porphyrize -porphyrized -porphyrizing -porphyroblast -porphyroblastic -porphyrogene -porphyrogenite -porphyrogenitic -porphyrogenitism -porphyrogeniture -porphyrogenitus -porphyroid -porphyrophore -porphyropsin -porphyrous -Porpita -porpitoid -porpoise -porpoiselike -porpoises -porpoising -porporate -porr -porraceous -porrect -porrection -porrectus -porret -porry -porridge -porridgelike -porridges -porridgy -porriginous -porrigo -Porrima -porringer -porringers -porriwiggle -Porsena -Porsenna -Porson -Port -Port. -Porta -portability -portable -portableness -portables -portably -Portadown -Portage -portaged -portages -Portageville -portaging -portague -portahepatis -portail -portal -portaled -portalled -portalless -portals -portal's -portal-to-portal -portamenti -portamento -portamentos -portance -portances -portapak -portas -portass -portate -portatile -portative -portato -portator -Port-au-Prince -port-caustic -portcrayon -port-crayon -portcullis -portcullised -portcullises -portcullising -Porte -porte- -porteacid -porte-cochere -ported -porteligature -porte-monnaie -porte-monnaies -portend -portendance -portended -portending -portendment -portends -Porteno -portension -portent -portention -portentious -portentive -portentosity -portentous -portentously -portentousness -portents -porteous -Porter -porterage -Porteranthus -porteress -porterhouse -porter-house -porterhouses -porterly -porterlike -porters -portership -Porterville -Portervillios -portesse -portfire -portfolio -portfolios -Port-Gentil -portglaive -portglave -portgrave -portgreve -Porthetria -Portheus -porthole -port-hole -portholes -porthook -porthors -porthouse -Porty -Portia -portico -porticoed -porticoes -porticos -porticus -Portie -portiere -portiered -portieres -portify -portifory -Portinari -porting -Portingale -portio -portiomollis -portion -portionable -portional -portionally -portioned -portioner -portioners -portiones -portioning -portionist -portionize -portionless -portions -portion's -portitor -Portland -Portlandian -Portlaoise -portlast -portless -portlet -portly -portlier -portliest -portligature -portlight -portlily -portliness -portman -portmanmote -portmanteau -portmanteaus -portmanteaux -portmantle -portmantologism -portment -portmoot -portmote -port-mouthed -Porto -Portobello -Port-of-Spain -portoise -portolan -portolani -portolano -portolanos -Portor -portpayne -portray -portrayable -portrayal -portrayals -portrayed -portrayer -portraying -portrayist -portrayment -portrays -portrait -portraitist -portraitists -portraitlike -portraits -portrait's -portraiture -portraitures -portreeve -portreeveship -portress -portresses -port-royal -Port-royalist -ports -portsale -port-sale -Port-Salut -portside -portsider -portsman -Portsmouth -portsoken -portuary -portugais -Portugal -Portugalism -Portugee -portugese -Portuguese -Portulaca -Portulacaceae -portulacaceous -Portulacaria -portulacas -portulan -Portumnus -Portuna -Portunalia -portunian -portunid -Portunidae -Portunus -porture -port-vent -portway -Portwin -Portwine -port-wine -port-winy -porule -porulose -porulous -Porum -porus -Porush -porwigle -Porzana -POS -pos. -posable -posada -Posadas -posadaship -posaune -posca -poschay -pose -posed -Posehn -posey -Poseidon -Poseidonian -Poseyville -posement -Posen -poser -posers -poses -poseur -poseurs -poseuse -posh -posher -poshest -poshly -poshness -posho -POSI -posy -POSYBL -Posidonius -posied -posies -posing -posingly -posit -posited -positif -positing -position -positional -positioned -positioner -positioning -positionless -positions -positival -positive -positively -positiveness -positivenesses -positiver -positives -positivest -positivism -positivist -positivistic -positivistically -positivity -positivize -positor -positrino -positron -positronium -positrons -posits -positum -positure -POSIX -Poskin -Posnanian -Posner -posnet -posole -posolo -posology -posologic -posological -posologies -posologist -posostemad -pospolite -poss -poss. -posse -posseman -possemen -posses -possess -possessable -possessed -possessedly -possessedness -possesses -possessible -possessing -possessingly -possessingness -possessio -possession -possessional -possessionalism -possessionalist -possessionary -possessionate -possessioned -possessioner -possessiones -possessionist -possessionless -possessionlessness -possessions -possession's -possessival -possessive -possessively -possessiveness -possessivenesses -possessives -possessor -possessoress -possessory -possessorial -possessoriness -possessors -possessor's -possessorship -posset -possets -possy -possibile -possibilism -possibilist -possibilitate -possibility -possibilities -possibility's -possible -possibleness -possibler -possibles -possiblest -possibly -possie -possies -Possing -possisdendi -possodie -possum -possumhaw -possums -possum's -possumwood -Post -post- -postabdomen -postabdominal -postable -postabortal -postacetabular -postact -Post-adamic -postadjunct -postadolescence -postadolescences -postadolescent -Post-advent -postage -postages -postal -Post-alexandrine -postallantoic -postally -postals -postalveolar -postament -postamniotic -postanal -postanesthetic -postantennal -postaortic -postapoplectic -postapostolic -Post-apostolic -postapostolical -Post-apostolical -postappendicular -Post-aristotelian -postarytenoid -postarmistice -Post-armistice -postarterial -postarthritic -postarticular -postaspirate -postaspirated -postasthmatic -postatrial -postattack -post-audit -postauditory -Post-augustan -Post-augustinian -postauricular -postaxiad -postaxial -postaxially -postaxillary -Post-azilian -Post-aztec -Post-babylonian -postbaccalaureate -postbag -post-bag -postbags -postbaptismal -postbase -Post-basket-maker -postbellum -post-bellum -postbiblical -Post-biblical -post-boat -postboy -post-boy -postboys -postbook -postbox -postboxes -postbrachial -postbrachium -postbranchial -postbreakfast -postbreeding -postbronchial -postbuccal -postbulbar -postburn -postbursal -postcaecal -post-Caesarean -postcalcaneal -postcalcarine -Post-cambrian -postcanonical -post-captain -Post-carboniferous -postcard -postcardiac -postcardinal -postcards -postcarnate -Post-carolingian -postcarotid -postcart -Post-cartesian -postcartilaginous -postcatarrhal -postcaudal -postcava -postcavae -postcaval -postcecal -postcenal -postcentral -postcentrum -postcephalic -postcerebellar -postcerebral -postcesarean -post-Cesarean -post-chaise -post-Chaucerian -Post-christian -Post-christmas -postcibal -post-cyclic -postclassic -postclassical -post-classical -postclassicism -postclavicle -postclavicula -postclavicular -postclimax -postclitellian -postclival -postcode -postcoenal -postcoital -postcollege -postcolon -postcolonial -Post-columbian -postcolumellar -postcomitial -postcommissural -postcommissure -postcommunicant -Postcommunion -Post-Communion -postconceptive -postconcretism -postconcretist -postcondylar -postcondition -postconfinement -Post-confucian -postconnubial -postconquest -Post-conquest -postconsonantal -Post-constantinian -postcontact -postcontract -postconvalescent -postconvalescents -postconvulsive -Post-copernican -postcordial -postcornu -postcosmic -postcostal -postcoup -postcoxal -Post-cretacean -postcretaceous -Post-cretaceous -postcribrate -postcritical -postcruciate -postcrural -Post-crusade -postcubital -Post-darwinian -postdate -post-date -postdated -postdates -postdating -Post-davidic -postdental -postdepressive -postdetermined -postdevelopmental -Post-devonian -postdiagnostic -postdiaphragmatic -postdiastolic -postdicrotic -postdigestive -postdigital -postdiluvial -post-diluvial -postdiluvian -post-diluvian -Post-diocletian -postdiphtherial -postdiphtheric -postdiphtheritic -postdisapproved -postdiscoidal -postdysenteric -Post-disruption -postdisseizin -postdisseizor -postdive -postdoctoral -postdoctorate -postdrug -postdural -postea -Post-easter -posted -posteen -posteens -postel -postelection -postelemental -postelementary -Post-elizabethan -Postelle -postembryonal -postembryonic -postemergence -postemporal -postencephalitic -postencephalon -postenteral -postentry -postentries -Post-eocene -postepileptic -poster -posterette -posteriad -posterial -posterio-occlusion -posterior -posteriori -posterioric -posteriorically -posterioristic -posterioristically -posteriority -posteriorly -posteriormost -posteriors -posteriorums -posterish -posterishness -posterist -posterity -posterities -posterization -posterize -postern -posterns -postero- -posteroclusion -posterodorsad -posterodorsal -posterodorsally -posteroexternal -posteroinferior -posterointernal -posterolateral -posteromedial -posteromedian -posteromesial -posteroparietal -posterosuperior -posterotemporal -posteroterminal -posteroventral -posters -posteruptive -postesophageal -posteternity -postethmoid -postexercise -postexilian -postexilic -postexist -postexistence -postexistency -postexistent -postexpressionism -postexpressionist -postface -postfaces -postfact -postfactor -post-factum -postfebrile -postfemoral -postfertilization -postfertilizations -postfetal -post-fine -postfix -postfixal -postfixation -postfixed -postfixes -postfixial -postfixing -postflection -postflexion -postflight -postfoetal -postform -postformed -postforming -postforms -postfoveal -post-free -postfrontal -postfurca -postfurcal -Post-galilean -postgame -postganglionic -postgangrenal -postgastric -postgeminum -postgenial -postgenital -postgeniture -postglacial -post-glacial -postglenoid -postglenoidal -postgonorrheic -Post-gothic -postgracile -postgraduate -post-graduate -postgraduates -postgraduation -postgrippal -posthabit -postharvest -posthaste -post-haste -postheat -posthemiplegic -posthemorrhagic -posthepatic -posthetomy -posthetomist -posthexaplar -posthexaplaric -posthyoid -posthypnotic -posthypnotically -posthypophyseal -posthypophysis -posthippocampal -posthysterical -posthitis -Post-hittite -posthoc -postholder -posthole -postholes -Post-homeric -post-horn -post-horse -posthospital -posthouse -post-house -posthuma -posthume -posthumeral -posthumous -posthumously -posthumousness -posthumus -Post-huronian -postyard -Post-ibsen -postic -postical -postically -postiche -postiches -posticous -posticteric -posticum -posticus -postie -postil -postiler -postilion -postilioned -postilions -postillate -postillation -postillator -postiller -postillion -postillioned -postils -postimperial -postimpressionism -Post-Impressionism -postimpressionist -post-Impressionist -postimpressionistic -post-impressionistic -postin -postinaugural -postincarnation -Post-incarnation -postindustrial -postinfective -postinfluenzal -posting -postingly -postings -postinjection -postinoculation -postins -postintestinal -postique -postiques -postirradiation -postischial -postjacent -Post-johnsonian -postjugular -Post-jurassic -Post-justinian -Post-jutland -post-juvenal -Post-kansan -Post-kantian -postlabial -postlabially -postlachrymal -Post-lafayette -postlapsarian -postlaryngal -postlaryngeal -postlarval -postlegal -postlegitimation -Post-leibnitzian -post-Leibnizian -Post-lent -postlenticular -postless -postlicentiate -postlike -postliminary -postlimini -postliminy -postliminiary -postliminious -postliminium -postliminous -post-Linnean -postliterate -postloitic -postloral -postlude -postludes -postludium -postluetic -postmalarial -postmamillary -postmammary -postmammillary -Postman -postmandibular -postmaniacal -postmarital -postmark -postmarked -postmarking -postmarks -postmarriage -Post-marxian -postmaster -postmaster-generalship -postmasterlike -postmasters -postmaster's -postmastership -postmastoid -postmaturity -postmaxillary -postmaximal -postmeatal -postmedia -postmediaeval -postmedial -postmedian -postmediastinal -postmediastinum -postmedieval -Post-medieval -postmedullary -postmeiotic -postmen -Post-mendelian -postmeningeal -postmenopausal -postmenstrual -postmental -postmeridian -postmeridional -postmesenteric -Post-mesozoic -Post-mycenean -postmycotic -postmillenarian -postmillenarianism -postmillennial -postmillennialism -postmillennialist -postmillennian -postmineral -Post-miocene -Post-mishnaic -Post-mishnic -post-Mishnical -postmistress -postmistresses -postmistress-ship -postmyxedematous -postmyxedemic -postmortal -postmortem -post-mortem -postmortems -postmortuary -Post-mosaic -postmultiply -postmultiplied -postmultiplying -postmundane -postmuscular -postmutative -Post-napoleonic -postnarial -postnaris -postnasal -postnatal -postnatally -postnate -postnati -postnatus -postnecrotic -postnephritic -postneural -postneuralgic -postneuritic -postneurotic -Post-newtonian -Post-nicene -postnodal -postnodular -postnominal -postnota -postnotum -postnotums -postnotumta -postnuptial -postnuptially -post-obit -postobituary -post-obituary -postocular -postoffice -post-officer -postoffices -postoffice's -Post-oligocene -postolivary -postomental -Poston -postoperative -postoperatively -postoptic -postoral -postorbital -postorder -post-ordinar -postordination -Post-ordovician -postorgastic -postosseous -postotic -postpagan -postpaid -postpalatal -postpalatine -Post-paleolithic -Post-paleozoic -postpalpebral -postpaludal -postparalytic -postparietal -postparotid -postparotitic -postparoxysmal -postpartal -postpartum -post-partum -postparturient -postparturition -postpatellar -postpathologic -postpathological -Post-pauline -postpectoral -postpeduncular -Post-pentecostal -postperforated -postpericardial -Post-permian -Post-petrine -postpharyngal -postpharyngeal -Post-phidian -postphlogistic -postphragma -postphrenic -postphthisic -postphthistic -postpycnotic -postpyloric -postpyramidal -postpyretic -Post-pythagorean -postpituitary -postplace -Post-platonic -postplegic -Post-pleistocene -Post-pliocene -postpneumonic -postponable -postpone -postponed -postponement -postponements -postponence -postponer -postpones -postponing -postpontile -postpose -postposit -postposited -postposition -postpositional -postpositionally -postpositive -postpositively -postprandial -postprandially -postpredicament -postprocess -postprocessing -postprocessor -postproduction -postprophesy -postprophetic -Post-prophetic -postprophetical -postprostate -postpubertal -postpuberty -postpubescent -postpubic -postpubis -postpuerperal -postpulmonary -postpupillary -postrace -postrachitic -postradiation -postramus -Post-raphaelite -postrecession -postrectal -postredemption -postreduction -Post-reformation -postremogeniture -post-remogeniture -postremote -Post-renaissance -postrenal -postreproductive -Post-restoration -postresurrection -postresurrectional -postretinal -postretirement -postrevolutionary -post-Revolutionary -postrheumatic -postrhinal -postrider -postriot -post-road -Post-roman -Post-romantic -postrorse -postrostral -postrubeolar -posts -postsaccular -postsacral -postscalenus -postscapula -postscapular -postscapularis -postscarlatinal -postscarlatinoid -postscenium -postscholastic -Post-scholastic -postschool -postscorbutic -postscribe -postscript -postscripts -postscript's -postscriptum -postscutella -postscutellar -postscutellum -postscuttella -postseason -postseasonal -postsecondary -Post-shakespearean -post-Shakespearian -postsigmoid -postsigmoidal -postsign -postsigner -post-signer -Post-silurian -postsymphysial -postsynaptic -postsynaptically -postsync -postsynsacral -postsyphilitic -Post-syrian -postsystolic -Post-socratic -Post-solomonic -postspasmodic -postsphenoid -postsphenoidal -postsphygmic -postspinous -postsplenial -postsplenic -poststernal -poststertorous -postsuppurative -postsurgical -posttabetic -post-Talmudic -Post-talmudical -posttarsal -postteen -posttemporal -posttension -post-tension -Post-tertiary -posttest -posttests -posttetanic -postthalamic -Post-theodosian -postthyroidal -postthoracic -posttibial -posttympanic -posttyphoid -posttonic -post-town -posttoxic -posttracheal -post-Transcendental -posttrapezoid -posttraumatic -posttreaty -posttreatment -posttrial -Post-triassic -Post-tridentine -posttubercular -posttussive -postulance -postulancy -postulant -postulants -postulantship -postulata -postulate -postulated -postulates -postulating -postulation -postulational -postulations -postulator -postulatory -postulatum -postulnar -postumbilical -postumbonal -postural -posture -postured -posture-maker -posturer -posturers -postures -posture's -postureteral -postureteric -posturing -posturise -posturised -posturising -posturist -posturize -posturized -posturizing -postuterine -postvaccinal -postvaccination -postvaricellar -postvarioloid -Post-vedic -postvelar -postvenereal -postvenous -postventral -postverbal -Postverta -postvertebral -postvesical -Post-victorian -postvide -Postville -postvocalic -postvocalically -Post-volstead -Postvorta -postwar -postward -postwise -postwoman -postwomen -postxiphoid -postxyphoid -postzygapophyseal -postzygapophysial -postzygapophysis -pot -pot. -potability -potable -potableness -potables -potage -potager -potagere -potagery -potagerie -potages -potail -potamian -potamic -Potamobiidae -Potamochoerus -Potamogale -Potamogalidae -Potamogeton -Potamogetonaceae -potamogetonaceous -potamology -potamological -potamologist -potamometer -Potamonidae -potamophilous -potamophobia -potamoplankton -potance -Potash -potashery -potashes -potass -potassa -potassamide -potassic -potassiferous -potassio- -potassium -potassiums -potate -potation -potations -potative -potato -potatoes -potator -potatory -potato-sick -pot-au-feu -Potawatami -Potawatomi -Potawatomis -potbank -potbelly -pot-belly -potbellied -pot-bellied -potbellies -potboy -pot-boy -potboydom -potboil -potboiled -potboiler -pot-boiler -potboilers -potboiling -potboils -potboys -pot-bound -potch -potcher -potcherman -potchermen -pot-clay -pot-color -potcrook -potdar -pote -pot-earth -Poteau -potecary -Potecasi -poteen -poteens -Poteet -poteye -Potemkin -potence -potences -potency -potencies -potent -potentacy -potentate -potentates -potentate's -potent-counterpotent -potentee -potenty -potential -potentiality -potentialities -potentialization -potentialize -potentially -potentialness -potentials -potentiate -potentiated -potentiates -potentiating -potentiation -potentiator -potentibility -potenties -Potentilla -potentiometer -potentiometers -potentiometer's -potentiometric -potentize -potently -potentness -poter -Poterium -potestal -potestas -potestate -potestative -potful -potfuls -potgirl -potgun -pot-gun -potgut -pot-gutted -Poth -pothanger -pothead -potheads -pothecary -pothecaries -potheen -potheens -pother -potherb -pot-herb -potherbs -pothered -pothery -pothering -potherment -pothers -potholder -potholders -pothole -pot-hole -potholed -potholer -potholes -potholing -pothook -pot-hook -pothookery -pothooks -Pothos -pothouse -pot-house -pothousey -pothouses -pothunt -pothunted -pothunter -pot-hunter -pothunting -poti -poticary -potycary -potiche -potiches -potichomania -potichomanist -Potidaea -potifer -Potiguara -Potyomkin -potion -potions -Potiphar -potlach -potlache -potlaches -potlatch -potlatched -potlatches -potlatching -pot-lead -potleg -potlicker -potlid -pot-lid -potlike -potlikker -potline -potlines -potling -pot-liquor -potluck -pot-luck -potlucks -potmaker -potmaking -potman -potmen -pot-metal -Potomac -potomania -potomato -potometer -potong -potoo -potoos -potophobia -Potoroinae -potoroo -potoroos -Potorous -Potos -Potosi -potpie -pot-pie -potpies -potpourri -pot-pourri -potpourris -potrack -Potrero -pot-rustler -POTS -pot's -Potsdam -pot-shaped -potshard -potshards -potshaw -potsherd -potsherds -potshoot -potshooter -potshot -pot-shot -potshots -potshotting -potsy -pot-sick -potsie -potsies -potstick -potstone -potstones -pott -pottage -pottages -pottagy -pottah -pottaro -potted -potteen -potteens -Potter -pottered -potterer -potterers -potteress -pottery -Potteries -pottering -potteringly -pottern -potters -potter's -Pottersville -Potterville -potti -potty -Pottiaceae -potty-chair -pottier -potties -pottiest -potting -pottinger -pottle -pottle-bellied -pottle-bodied -pottle-crowned -pottled -pottle-deep -pottles -potto -pottos -Potts -Pottsboro -Pottstown -Pottsville -pottur -potus -POTV -pot-valiance -pot-valiancy -pot-valiant -pot-valiantly -pot-valiantry -pot-valliance -pot-valor -pot-valorous -pot-wabbler -potwaller -potwalling -potwalloper -pot-walloper -pot-walloping -potware -potwhisky -Potwin -pot-wobbler -potwork -potwort -pouce -poucey -poucer -pouch -pouched -Poucher -pouches -pouchful -pouchy -pouchier -pouchiest -pouching -pouchless -pouchlike -pouch's -pouch-shaped -poucy -poudret -poudrette -poudreuse -poudreuses -poudrin -pouf -poufed -pouff -pouffe -pouffed -pouffes -pouffs -poufs -Poughkeepsie -Poughquag -Pouilly -Pouilly-Fuisse -Pouilly-Fume -Poul -poulaine -Poulan -poulard -poularde -poulardes -poulardize -poulards -pouldron -poule -Poulenc -poulet -poulette -Pouligny-St -poulp -poulpe -Poulsbo -poult -poult-de-soie -Poulter -poulterer -poulteress -poulters -poultice -poulticed -poultices -poulticewise -poulticing -Poultney -poultry -poultrydom -poultries -poultryist -poultryless -poultrylike -poultryman -poultrymen -poultryproof -poults -pounamu -pounce -pounced -Pouncey -pouncer -pouncers -pounces -pouncet -pouncet-box -pouncy -pouncing -pouncingly -Pound -poundage -poundages -poundal -poundals -poundbreach -poundcake -pound-cake -pounded -pounder -pounders -pound-folly -pound-foolish -pound-foolishness -pound-foot -pound-force -pounding -poundkeeper -poundless -poundlike -poundman -poundmaster -poundmeal -pounds -poundstone -pound-trap -pound-weight -poundworth -pour -pourability -pourable -pourboire -pourboires -poured -pourer -pourer-off -pourer-out -pourers -pourie -pouring -pouringly -Pournaras -pourparley -pourparler -pourparlers -pourparty -pourpiece -pourpoint -pourpointer -pourprise -pourquoi -pourris -pours -pourvete -pouser -pousy -pousse -pousse-caf -pousse-cafe -poussette -poussetted -poussetting -poussie -poussies -Poussin -Poussinisme -poustie -pout -pouted -pouter -pouters -poutful -pouty -poutier -poutiest -pouting -poutingly -pouts -POV -poverish -poverishment -poverty -poverties -poverty-proof -poverty-stricken -povertyweed -Povindah -POW -Poway -powan -powcat -Powder -powderable -powder-black -powder-blue -powder-charged -powder-down -powdered -powderer -powderers -powder-flask -powder-gray -Powderhorn -powder-horn -powdery -powderies -powderiness -powdering -powderization -powderize -powderizer -powder-laden -Powderly -powderlike -powderman -powder-marked -powder-monkey -powder-posted -powderpuff -powder-puff -powders -powder-scorched -powder-tinged -powdike -powdry -Powe -Powel -Powell -powellite -Powellsville -Powellton -Powellville -POWER -powerable -powerably -powerboat -powerboats -power-dive -power-dived -power-diving -power-dove -power-driven -powered -power-elated -powerful -powerfully -powerfulness -powerhouse -powerhouses -power-hunger -power-hungry -powering -powerless -powerlessly -powerlessness -power-loom -powermonger -power-operate -power-operated -power-packed -powerplants -power-political -power-riveting -Powers -power-saw -power-sawed -power-sawing -power-sawn -power-seeking -powerset -powersets -powerset's -Powersite -powerstat -Powersville -Powhatan -Powhattan -powhead -Powys -powitch -powldoody -Pownal -Pownall -powny -pownie -pows -powsoddy -powsowdy -powter -powters -powwow -powwowed -powwower -powwowing -powwowism -powwows -pox -poxed -poxes -poxy -poxing -pox-marked -poxvirus -poxviruses -poz -Pozna -Poznan -Pozsony -Pozzy -pozzolan -pozzolana -pozzolanic -pozzolans -pozzuolana -pozzuolanic -Pozzuoli -PP -pp. -PPA -PPB -PPBS -PPC -PPCS -PPD -ppd. -PPE -pph -PPI -ppl -P-plane -PPLO -PPM -PPN -PPP -ppr -PPS -PPT -pptn -PQ -PR -Pr. -PRA -praam -praams -prabble -prabhu -pracharak -practic -practicability -practicabilities -practicable -practicableness -practicably -practical -practicalism -practicalist -practicality -practicalities -practicalization -practicalize -practicalized -practicalizer -practically -practical-minded -practical-mindedness -practicalness -practicant -practice -practiced -practicedness -practicer -practices -practice-teach -practician -practicianism -practicing -practico -practicum -practisant -practise -practised -practiser -practises -practising -practitional -practitioner -practitionery -practitioners -practitioner's -practive -prad -Pradeep -Prader -Pradesh -pradhana -Prady -Prado -prae- -praeabdomen -praeacetabular -praeanal -praecava -praecipe -praecipes -praecipitatio -praecipuum -praecoces -praecocial -praecognitum -praecoracoid -praecordia -praecordial -praecordium -praecornu -praecox -praecuneus -praedial -praedialist -praediality -praedium -praeesophageal -praefect -praefectorial -praefects -praefectus -praefervid -praefloration -praefoliation -praehallux -praelabrum -praelect -praelected -praelecting -praelection -praelectionis -praelector -praelectorship -praelectress -praelects -praeludium -praemaxilla -praemolar -praemunientes -praemunire -praenarial -Praeneste -Praenestine -Praenestinian -praeneural -praenomen -praenomens -praenomina -praenominal -praeoperculum -praepositor -praepositure -praepositus -praeposter -praepostor -praepostorial -praepubis -praepuce -praescutum -praesens -praesenti -Praesepe -praesertim -praeses -Praesian -praesidia -praesidium -praesystolic -praesphenoid -praesternal -praesternum -praestomium -praetaxation -praetexta -praetextae -praetor -praetorial -Praetorian -praetorianism -praetorium -Praetorius -praetors -praetorship -praezygapophysis -Prag -Prager -pragmarize -pragmat -pragmatic -pragmatica -pragmatical -pragmaticality -pragmatically -pragmaticalness -pragmaticism -pragmaticist -pragmatics -pragmatism -pragmatisms -pragmatist -pragmatistic -pragmatists -pragmatize -pragmatizer -Prague -Praha -praham -prahm -prahu -prahus -pray -praya -prayable -prayed -prayer -prayer-answering -prayer-book -prayer-clenched -prayerful -prayerfully -prayerfulness -prayer-granting -prayer-hearing -prayerless -prayerlessly -prayerlessness -prayer-lisping -prayer-loving -prayermaker -prayermaking -prayer-repeating -prayers -prayer's -prayerwise -prayful -praying -prayingly -prayingwise -Prairial -prairie -prairiecraft -prairied -prairiedom -prairielike -prairies -prairieweed -prairillon -prays -praisable -praisableness -praisably -praise -praise-begging -praised -praise-deserving -praise-fed -praiseful -praisefully -praisefulness -praise-giving -praiseless -praiseproof -praiser -praisers -praises -praise-spoiled -praise-winning -praiseworthy -praiseworthily -praiseworthiness -praising -praisingly -praiss -praisworthily -praisworthiness -Prajadhipok -Prajapati -prajna -Prakash -Prakrit -prakriti -Prakritic -Prakritize -praline -pralines -pralltriller -pram -Pramnian -prams -prana -pranava -prance -pranced -pranceful -prancer -prancers -prances -prancy -prancing -prancingly -prancome -prand -prandial -prandially -prang -pranged -pranging -prangs -pranidhana -prank -pranked -pranker -prankful -prankfulness -pranky -prankier -prankiest -pranking -prankingly -prankish -prankishly -prankishness -prankle -pranks -prank's -pranksome -pranksomeness -prankster -pranksters -prankt -prao -praos -Prasad -prase -praseocobaltic -praseodidymium -praseodymia -praseodymium -praseolite -prases -prasine -prasinous -praskeen -praso- -prasoid -prasophagy -prasophagous -prastha -prat -pratal -pratap -pratapwant -Pratdesaba -prate -prated -prateful -pratey -pratement -pratensian -Prater -praters -prates -pratfall -pratfalls -Prather -Pratyeka -pratiyasamutpada -pratiloma -Pratincola -pratincole -pratincoline -pratincolous -prating -pratingly -pratique -pratiques -Prato -prats -Pratt -Pratte -prattfall -pratty -prattle -prattled -prattlement -prattler -prattlers -prattles -prattly -prattling -prattlingly -Pratts -Prattsburg -Prattshollow -Prattsville -Prattville -prau -praus -Pravda -pravilege -pravin -Pravit -pravity -pravous -prawn -prawned -prawner -prawners -prawny -prawning -prawns -Praxean -Praxeanist -praxeology -praxeological -praxes -praxinoscope -praxiology -praxis -praxises -Praxitelean -Praxiteles -Praxithea -PRB -PRC -PRCA -PRE -pre- -preabdomen -preabsorb -preabsorbent -preabstract -preabundance -preabundant -preabundantly -preaccept -preacceptance -preacceptances -preaccepted -preaccepting -preaccepts -preaccess -preaccessible -preaccidental -preaccidentally -preaccommodate -preaccommodated -preaccommodating -preaccommodatingly -preaccommodation -preaccomplish -preaccomplishment -preaccord -preaccordance -preaccount -preaccounting -preaccredit -preaccumulate -preaccumulated -preaccumulating -preaccumulation -preaccusation -preaccuse -preaccused -preaccusing -preaccustom -preaccustomed -preaccustoming -preaccustoms -preace -preacetabular -preach -preachable -pre-Achaean -preached -Preacher -preacherdom -preacheress -preacherize -preacherless -preacherling -preachers -preachership -preaches -preachy -preachier -preachiest -preachieved -preachify -preachification -preachified -preachifying -preachily -preachiness -preaching -preaching-house -preachingly -preachings -preachman -preachment -preachments -preacid -preacidity -preacidly -preacidness -preacknowledge -preacknowledged -preacknowledgement -preacknowledging -preacknowledgment -preacness -preacquaint -preacquaintance -preacquire -preacquired -preacquiring -preacquisition -preacquisitive -preacquisitively -preacquisitiveness -preacquit -preacquittal -preacquitted -preacquitting -preact -preacted -preacting -preaction -preactive -preactively -preactiveness -preactivity -preacts -preacute -preacutely -preacuteness -preadamic -preadamite -pre-adamite -preadamitic -preadamitical -preadamitism -preadapt -preadaptable -preadaptation -preadapted -preadapting -preadaptive -preadapts -preaddition -preadditional -preaddress -preadequacy -preadequate -preadequately -preadequateness -preadhere -preadhered -preadherence -preadherent -preadherently -preadhering -preadjectival -preadjectivally -preadjective -preadjourn -preadjournment -preadjunct -preadjust -preadjustable -preadjusted -preadjusting -preadjustment -preadjustments -preadjusts -preadministration -preadministrative -preadministrator -preadmire -preadmired -preadmirer -preadmiring -preadmission -preadmit -preadmits -preadmitted -preadmitting -preadmonish -preadmonition -preadolescence -preadolescences -preadolescent -preadolescents -preadopt -preadopted -preadopting -preadoption -preadopts -preadoration -preadore -preadorn -preadornment -preadult -preadulthood -preadults -preadvance -preadvancement -preadventure -preadvertency -preadvertent -preadvertise -preadvertised -preadvertisement -preadvertiser -preadvertising -preadvice -preadvisable -preadvise -preadvised -preadviser -preadvising -preadvisory -preadvocacy -preadvocate -preadvocated -preadvocating -preaestival -preaffect -preaffection -preaffidavit -preaffiliate -preaffiliated -preaffiliating -preaffiliation -preaffirm -preaffirmation -preaffirmative -preaffirmed -preaffirming -preaffirms -preafflict -preaffliction -preafternoon -preage -preaged -preaggravate -preaggravated -preaggravating -preaggravation -preaggression -preaggressive -preaggressively -preaggressiveness -preaging -preagitate -preagitated -preagitating -preagitation -preagonal -preagony -preagree -preagreed -preagreeing -preagreement -preagricultural -preagriculture -prealarm -prealcohol -prealcoholic -pre-Alfredian -prealgebra -prealgebraic -prealkalic -preallable -preallably -preallegation -preallege -prealleged -prealleging -preally -prealliance -preallied -preallies -preallying -preallocate -preallocated -preallocates -preallocating -preallot -preallotment -preallots -preallotted -preallotting -preallow -preallowable -preallowably -preallowance -preallude -prealluded -prealluding -preallusion -prealphabet -prealphabetical -prealphabetically -prealtar -prealter -prealteration -prealveolar -preamalgamation -preambassadorial -preambition -preambitious -preambitiously -preamble -preambled -preambles -preambling -preambular -preambulary -preambulate -preambulation -preambulatory -pre-American -pre-Ammonite -pre-Ammonitish -preamp -pre-amp -preamplifier -preamplifiers -preamps -preanal -preanaphoral -preanesthetic -preanesthetics -preanimism -preannex -preannounce -preannounced -preannouncement -preannouncements -preannouncer -preannounces -preannouncing -preantepenult -preantepenultimate -preanterior -preanticipate -preanticipated -preanticipating -preantiquity -preantiseptic -preaortic -preappearance -preappearances -preapperception -preapply -preapplication -preapplications -preapplied -preapplying -preappoint -preappointed -preappointing -preappointment -preappoints -preapprehend -preapprehension -preapprise -preapprised -preapprising -preapprize -preapprized -preapprizing -preapprobation -preapproval -preapprove -preapproved -preapproving -preaptitude -pre-Aryan -prearm -prearmed -prearming -pre-Armistice -prearms -prearraignment -prearrange -prearranged -prearrangement -prearrangements -prearranges -prearranging -prearrest -prearrestment -pre-Arthurian -prearticulate -preartistic -preascertain -preascertained -preascertaining -preascertainment -preascertains -preascetic -preascitic -preaseptic -preassemble -preassembled -preassembles -preassembly -preassembling -preassert -preassign -preassigned -preassigning -preassigns -pre-Assyrian -preassume -preassumed -preassuming -preassumption -preassurance -preassure -preassured -preassuring -preataxic -preatomic -preattachment -preattune -preattuned -preattuning -preaudience -preaudit -pre-audit -preauditory -pre-Augustan -pre-Augustine -preauricular -preauthorize -preauthorized -preauthorizes -preauthorizing -preaver -preaverred -preaverring -preavers -preavowal -preaxiad -preaxial -pre-axial -preaxially -pre-Babylonian -prebachelor -prebacillary -pre-Baconian -prebade -prebake -prebalance -prebalanced -prebalancing -preballot -preballoted -preballoting -prebankruptcy -prebaptismal -prebaptize -prebarbaric -prebarbarically -prebarbarous -prebarbarously -prebarbarousness -prebargain -prebasal -prebasilar -prebattle -prebble -prebeleve -prebelief -prebelieve -prebelieved -prebeliever -prebelieving -prebellum -prebeloved -prebend -prebendal -prebendary -prebendaries -prebendaryship -prebendate -prebends -prebenediction -prebeneficiary -prebeneficiaries -prebenefit -prebenefited -prebenefiting -prebeset -prebesetting -prebestow -prebestowal -prebetray -prebetrayal -prebetrothal -prebiblical -prebid -prebidding -prebill -prebilled -prebilling -prebills -prebind -prebinding -prebinds -prebiologic -prebiological -prebiotic -pre-Byzantine -Preble -prebless -preblessed -preblesses -preblessing -preblockade -preblockaded -preblockading -preblooming -Prebo -preboast -preboding -preboyhood -preboil -preboiled -preboiling -preboils -preboom -preborn -preborrowing -prebound -prebrachial -prebrachium -prebranchial -prebreakfast -prebreathe -prebreathed -prebreathing -prebridal -pre-British -prebroadcasting -prebromidic -prebronchial -prebronze -prebrute -prebuccal -pre-Buddhist -prebudget -prebudgetary -prebullying -preburlesque -preburn -prec -precalculable -precalculate -precalculated -precalculates -precalculating -precalculation -precalculations -precalculus -precalculuses -Precambrian -Pre-Cambrian -pre-Cambridge -precampaign -pre-Canaanite -pre-Canaanitic -precancel -precanceled -precanceling -precancellation -precancellations -precancelled -precancelling -precancels -precancerous -precandidacy -precandidature -precanning -precanonical -precant -precantation -precanvass -precapillary -precapitalist -precapitalistic -precaptivity -precapture -precaptured -precapturing -pre-Carboniferous -precarcinomatous -precardiac -precary -precaria -precarious -precariously -precariousness -precariousnesses -precarium -precarnival -pre-Carolingian -precartilage -precartilaginous -precast -precasting -precasts -pre-Catholic -precation -precative -precatively -precatory -precaudal -precausation -precaution -precautional -precautionary -precautioning -precautions -precaution's -precautious -precautiously -precautiousness -precava -precavae -precaval -precchose -precchosen -precedable -precedaneous -precede -preceded -precedence -precedences -precedence's -precedency -precedencies -precedent -precedentable -precedentary -precedented -precedential -precedentless -precedently -precedents -preceder -precedes -preceding -precednce -preceeding -precel -precelebrant -precelebrate -precelebrated -precelebrating -precelebration -precelebrations -pre-Celtic -precensor -precensure -precensured -precensuring -precensus -precent -precented -precentennial -pre-Centennial -precenting -precentless -precentor -precentory -precentorial -precentors -precentorship -precentral -precentress -precentrix -precentrum -precents -precept -preception -preceptist -preceptive -preceptively -preceptor -preceptoral -preceptorate -preceptory -preceptorial -preceptorially -preceptories -preceptors -preceptorship -preceptress -preceptresses -precepts -precept's -preceptual -preceptually -preceramic -precerebellar -precerebral -precerebroid -preceremony -preceremonial -preceremonies -precertify -precertification -precertified -precertifying -preces -precess -precessed -precesses -precessing -precession -precessional -precessions -prechallenge -prechallenged -prechallenging -prechampioned -prechampionship -precharge -precharged -precharging -prechart -precharted -pre-Chaucerian -precheck -prechecked -prechecking -prechecks -Pre-Chellean -prechemical -precherish -prechildhood -prechill -prechilled -prechilling -prechills -pre-Chinese -prechloric -prechloroform -prechoice -prechoose -prechoosing -prechordal -prechoroid -prechose -prechosen -pre-Christian -pre-Christianic -pre-Christmas -preciation -precyclone -precyclonic -precide -precieuse -precieux -precinct -precinction -precinctive -precincts -precinct's -precynical -Preciosa -preciosity -preciosities -precious -preciouses -preciously -preciousness -precipe -precipes -precipice -precipiced -precipices -precipitability -precipitable -precipitance -precipitancy -precipitancies -precipitant -precipitantly -precipitantness -precipitate -precipitated -precipitatedly -precipitately -precipitateness -precipitatenesses -precipitates -precipitating -precipitation -precipitations -precipitative -precipitator -precipitatousness -precipitin -precipitinogen -precipitinogenic -precipitous -precipitously -precipitousness -Precipitron -precirculate -precirculated -precirculating -precirculation -precis -precise -precised -precisely -preciseness -precisenesses -preciser -precises -precisest -precisian -precisianism -precisianist -precisianistic -precisians -precising -precision -precisional -precisioner -precisionism -precisionist -precisionistic -precisionize -precisions -precisive -preciso -precyst -precystic -precitation -precite -precited -preciting -precivilization -preclaim -preclaimant -preclaimer -preclare -preclassic -preclassical -preclassically -preclassify -preclassification -preclassified -preclassifying -preclean -precleaned -precleaner -precleaning -precleans -preclear -preclearance -preclearances -preclerical -preclimax -preclinical -preclival -precloacal -preclose -preclosed -preclosing -preclosure -preclothe -preclothed -preclothing -precludable -preclude -precluded -precludes -precluding -preclusion -preclusive -preclusively -precoagulation -precoccygeal -precoce -precocial -precocious -precociously -precociousness -precocity -precocities -precode -precoded -precodes -precogitate -precogitated -precogitating -precogitation -precognition -precognitions -precognitive -precognizable -precognizant -precognize -precognized -precognizing -precognosce -precoil -precoiler -precoincidence -precoincident -precoincidently -precollapsable -precollapse -precollapsed -precollapsibility -precollapsible -precollapsing -precollect -precollectable -precollection -precollector -precollege -precollegiate -precollude -precolluded -precolluding -precollusion -precollusive -precolonial -precolor -precolorable -precoloration -precoloring -precolour -precolourable -precolouration -pre-Columbian -precombat -precombatant -precombated -precombating -precombination -precombine -precombined -precombining -precombustion -precommand -precommend -precomment -precommercial -precommissural -precommissure -precommit -precommitted -precommitting -precommune -precommuned -precommunicate -precommunicated -precommunicating -precommunication -precommuning -precommunion -precompare -precompared -precomparing -precomparison -precompass -precompel -precompelled -precompelling -precompensate -precompensated -precompensating -precompensation -precompilation -precompile -precompiled -precompiler -precompiling -precompleteness -precompletion -precompliance -precompliant -precomplicate -precomplicated -precomplicating -precomplication -precompose -precomposition -precompound -precompounding -precompoundly -precomprehend -precomprehension -precomprehensive -precomprehensively -precomprehensiveness -precompress -precompression -precompulsion -precompute -precomputed -precomputes -precomputing -precomradeship -preconceal -preconcealed -preconcealing -preconcealment -preconceals -preconcede -preconceded -preconceding -preconceivable -preconceive -preconceived -preconceives -preconceiving -preconcentrate -preconcentrated -preconcentratedly -preconcentrating -preconcentration -preconcept -preconception -preconceptional -preconceptions -preconception's -preconceptual -preconcern -preconcernment -preconcert -preconcerted -preconcertedly -preconcertedness -preconcertion -preconcertive -preconcession -preconcessions -preconcessive -preconclude -preconcluded -preconcluding -preconclusion -preconcur -preconcurred -preconcurrence -preconcurrent -preconcurrently -preconcurring -precondemn -precondemnation -precondemned -precondemning -precondemns -precondensation -precondense -precondensed -precondensing -precondylar -precondyloid -precondition -preconditioned -preconditioning -preconditions -preconduct -preconduction -preconductor -preconfer -preconference -preconferred -preconferring -preconfess -preconfession -preconfide -preconfided -preconfiding -preconfiguration -preconfigure -preconfigured -preconfiguring -preconfine -preconfined -preconfinedly -preconfinement -preconfinemnt -preconfining -preconfirm -preconfirmation -preconflict -preconform -preconformity -preconfound -preconfuse -preconfused -preconfusedly -preconfusing -preconfusion -precongenial -precongested -precongestion -precongestive -precongratulate -precongratulated -precongratulating -precongratulation -pre-Congregationalist -pre-Congress -precongressional -precony -preconise -preconizance -preconization -preconize -preconized -preconizer -preconizing -preconjecture -preconjectured -preconjecturing -preconnection -preconnective -preconnubial -preconquer -preconquest -pre-Conquest -preconquestal -pre-conquestal -preconquestual -preconscious -preconsciously -preconsciousness -preconseccrated -preconseccrating -preconsecrate -preconsecrated -preconsecrating -preconsecration -preconsent -preconsider -preconsideration -preconsiderations -preconsidered -preconsign -preconsoidate -preconsolation -preconsole -preconsolidate -preconsolidated -preconsolidating -preconsolidation -preconsonantal -preconspiracy -preconspiracies -preconspirator -preconspire -preconspired -preconspiring -preconstituent -preconstitute -preconstituted -preconstituting -preconstruct -preconstructed -preconstructing -preconstruction -preconstructs -preconsult -preconsultation -preconsultations -preconsultor -preconsume -preconsumed -preconsumer -preconsuming -preconsumption -precontact -precontain -precontained -precontemn -precontemplate -precontemplated -precontemplating -precontemplation -precontemporaneity -precontemporaneous -precontemporaneously -precontemporary -precontend -precontent -precontention -precontently -precontentment -precontest -precontinental -precontract -pre-contract -precontractive -precontractual -precontribute -precontributed -precontributing -precontribution -precontributive -precontrivance -precontrive -precontrived -precontrives -precontriving -precontrol -precontrolled -precontrolling -precontroversy -precontroversial -precontroversies -preconvey -preconveyal -preconveyance -preconvention -preconversation -preconversational -preconversion -preconvert -preconvict -preconviction -preconvince -preconvinced -preconvincing -precook -precooked -precooker -precooking -precooks -precool -precooled -precooler -precooling -precools -pre-Copernican -pre-Copernicanism -precopy -precopied -precopying -precopulatory -precoracoid -precordia -precordial -precordiality -precordially -precordium -precorneal -precornu -precoronation -precorrect -precorrection -precorrectly -precorrectness -precorrespond -precorrespondence -precorrespondent -precorridor -precorrupt -precorruption -precorruptive -precorruptly -precorruptness -precoruptness -precosmic -precosmical -precosmically -precostal -precounsel -precounseled -precounseling -precounsellor -precoup -precourse -precover -precovering -precox -precranial -precranially -precrash -precreate -precreation -precreative -precredit -precreditor -precreed -precrystalline -precritical -precriticism -precriticize -precriticized -precriticizing -precrucial -precrural -pre-Crusade -precule -precultivate -precultivated -precultivating -precultivation -precultural -preculturally -preculture -precuneal -precuneate -precuneus -precure -precured -precures -precuring -precurrent -precurrer -precurricula -precurricular -precurriculum -precurriculums -precursal -precurse -precursive -precursor -precursory -precursors -precursor's -precurtain -precut -precuts -pred -pred. -predable -predacean -predaceous -predaceousness -predacious -predaciousness -predacity -preday -predaylight -predaytime -predamage -predamaged -predamaging -predamn -predamnation -pre-Dantean -predark -predarkness -pre-Darwinian -pre-Darwinianism -predata -predate -predated -predates -predating -predation -predations -predatism -predative -predator -predatory -predatorial -predatorily -predatoriness -predators -predawn -predawns -predazzite -predealer -predealing -predeath -predeathly -predebate -predebater -predebit -predebtor -predecay -predecease -predeceased -predeceaser -predeceases -predeceasing -predeceive -predeceived -predeceiver -predeceiving -predeception -predecess -predecession -predecessor -predecessors -predecessor's -predecessorship -predecide -predecided -predeciding -predecision -predecisive -predecisively -predeclaration -predeclare -predeclared -predeclaring -predeclination -predecline -predeclined -predeclining -predecree -predecreed -predecreeing -predecrement -prededicate -prededicated -prededicating -prededication -prededuct -prededuction -predefault -predefeat -predefect -predefective -predefence -predefend -predefense -predefy -predefiance -predeficiency -predeficient -predeficiently -predefied -predefying -predefine -predefined -predefines -predefining -predefinite -predefinition -predefinitions -predefinition's -predefray -predefrayal -predegeneracy -predegenerate -predegree -predeication -predelay -predelegate -predelegated -predelegating -predelegation -predeliberate -predeliberated -predeliberately -predeliberating -predeliberation -predelineate -predelineated -predelineating -predelineation -predelinquency -predelinquent -predelinquently -predeliver -predelivery -predeliveries -predella -predelle -predelude -predeluded -predeluding -predelusion -predemand -predemocracy -predemocratic -predemonstrate -predemonstrated -predemonstrating -predemonstration -predemonstrative -predeny -predenial -predenied -predenying -predental -predentary -Predentata -predentate -predepart -predepartmental -predeparture -predependable -predependence -predependent -predeplete -predepleted -predepleting -predepletion -predeposit -predepository -predepreciate -predepreciated -predepreciating -predepreciation -predepression -predeprivation -predeprive -predeprived -predepriving -prederivation -prederive -prederived -prederiving -predescend -predescent -predescribe -predescribed -predescribing -predescription -predesert -predeserter -predesertion -predeserve -predeserved -predeserving -predesign -predesignate -predesignated -predesignates -predesignating -predesignation -predesignations -predesignatory -predesirous -predesirously -predesolate -predesolation -predespair -predesperate -predespicable -predespise -predespond -predespondency -predespondent -predestinable -predestinarian -predestinarianism -predestinate -predestinated -predestinately -predestinates -predestinating -predestination -predestinational -predestinationism -predestinationist -predestinative -predestinator -predestine -predestined -predestines -predestiny -predestining -predestitute -predestitution -predestroy -predestruction -predetach -predetachment -predetail -predetain -predetainer -predetect -predetection -predetention -predeterminability -predeterminable -predeterminant -predeterminate -predeterminately -predetermination -predeterminations -predeterminative -predetermine -predetermined -predeterminer -predetermines -predetermining -predeterminism -predeterministic -predetest -predetestation -predetrimental -predevelop -predevelopment -predevise -predevised -predevising -predevote -predevotion -predevour -predy -prediabetes -prediabetic -prediagnoses -prediagnosis -prediagnostic -predial -predialist -prediality -prediastolic -prediatory -predicability -predicable -predicableness -predicably -predicament -predicamental -predicamentally -predicaments -predicant -predicate -predicated -predicates -predicating -predication -predicational -predications -predicative -predicatively -predicator -predicatory -pre-Dickensian -predicrotic -predict -predictability -predictable -predictably -predictate -predictated -predictating -predictation -predicted -predicting -prediction -predictional -predictions -prediction's -predictive -predictively -predictiveness -predictor -predictory -predictors -predicts -prediet -predietary -predifferent -predifficulty -predigest -predigested -predigesting -predigestion -predigests -predigital -predikant -predilect -predilected -predilection -predilections -prediligent -prediligently -prediluvial -prediluvian -prediminish -prediminishment -prediminution -predynamite -predynastic -predine -predined -predining -predinner -prediphtheritic -prediploma -prediplomacy -prediplomatic -predirect -predirection -predirector -predisability -predisable -predisadvantage -predisadvantageous -predisadvantageously -predisagree -predisagreeable -predisagreed -predisagreeing -predisagreement -predisappointment -predisaster -predisastrous -predisastrously -prediscern -prediscernment -predischarge -predischarged -predischarging -prediscipline -predisciplined -predisciplining -predisclose -predisclosed -predisclosing -predisclosure -prediscontent -prediscontented -prediscontentment -prediscontinuance -prediscontinuation -prediscontinue -prediscount -prediscountable -prediscourage -prediscouraged -prediscouragement -prediscouraging -prediscourse -prediscover -prediscoverer -prediscovery -prediscoveries -prediscreet -prediscretion -prediscretionary -prediscriminate -prediscriminated -prediscriminating -prediscrimination -prediscriminator -prediscuss -prediscussion -predisgrace -predisguise -predisguised -predisguising -predisgust -predislike -predisliked -predisliking -predismiss -predismissal -predismissory -predisorder -predisordered -predisorderly -predispatch -predispatcher -predisperse -predispersed -predispersing -predispersion -predisplace -predisplaced -predisplacement -predisplacing -predisplay -predisponency -predisponent -predisposable -predisposal -predispose -predisposed -predisposedly -predisposedness -predisposes -predisposing -predisposition -predispositional -predispositions -predisputant -predisputation -predispute -predisputed -predisputing -predisregard -predisrupt -predisruption -predissatisfaction -predissolution -predissolve -predissolved -predissolving -predissuade -predissuaded -predissuading -predistinct -predistinction -predistinguish -predistortion -pre-distortion -predistress -predistribute -predistributed -predistributing -predistribution -predistributor -predistrict -predistrust -predistrustful -predisturb -predisturbance -predive -prediversion -predivert -predivide -predivided -predividend -predivider -predividing -predivinable -predivinity -predivision -predivorce -predivorcement -prednisolone -prednisone -prednisones -predoctoral -predoctorate -predocumentary -predomestic -predomestically -predominance -predominances -predominancy -predominant -predominantly -predominate -predominated -predominately -predominates -predominating -predominatingly -predomination -predominator -predonate -predonated -predonating -predonation -predonor -predoom -pre-Dorian -pre-Doric -predormition -predorsal -predoubt -predoubter -predoubtful -predoubtfully -predraft -predrainage -predramatic -pre-Dravidian -pre-Dravidic -predraw -predrawer -predrawing -predrawn -predread -predreadnought -predrew -predry -predried -predrying -predrill -predriller -predrive -predriven -predriver -predriving -predrove -preduplicate -preduplicated -preduplicating -preduplication -predusk -predusks -pre-Dutch -predwell -pree -preearthly -pre-earthly -preearthquake -pre-earthquake -pre-Easter -pre-eclampsia -pre-eclamptic -preeconomic -pre-economic -preeconomical -pre-economical -preeconomically -preed -preedit -pre-edit -preedition -pre-edition -preeditor -pre-editor -preeditorial -pre-editorial -preeditorially -pre-editorially -preedits -preeducate -pre-educate -preeducated -preeducating -preeducation -pre-education -preeducational -pre-educational -preeducationally -pre-educationally -preeffect -pre-effect -preeffective -pre-effective -preeffectively -pre-effectively -preeffectual -pre-effectual -preeffectually -pre-efficiency -pre-efficient -pre-efficiently -preeffort -pre-effort -preeing -preelect -pre-elect -preelected -preelecting -preelection -pre-election -preelective -pre-elective -preelectric -pre-electric -preelectrical -pre-electrical -preelectrically -pre-electrically -preelectronic -preelects -preelemental -pre-elemental -preelementary -pre-elementary -preeligibility -pre-eligibility -preeligible -pre-eligible -preeligibleness -preeligibly -preeliminate -pre-eliminate -preeliminated -preeliminating -preelimination -pre-elimination -preeliminator -pre-eliminator -pre-Elizabethan -preemancipation -pre-emancipation -preembarrass -pre-embarrass -preembarrassment -pre-embarrassment -preembody -pre-embody -preembodied -preembodying -preembodiment -pre-embodiment -preemergence -preemergency -pre-emergency -preemergencies -preemergent -preemie -preemies -preeminence -pre-eminence -preeminences -pre-eminency -preeminent -pre-eminent -preeminently -pre-eminently -pre-eminentness -preemotion -pre-emotion -preemotional -pre-emotional -preemotionally -preemperor -pre-emperor -preemphasis -pre-Empire -preemploy -pre-employ -preemployee -pre-employee -preemployer -pre-employer -preemployment -pre-employment -preempt -pre-empt -preempted -pre-emptible -preempting -preemption -pre-emption -pre-emptioner -preemptions -preemptive -pre-emptive -preemptively -pre-emptively -preemptor -pre-emptor -preemptory -pre-emptory -preempts -preen -preenable -pre-enable -preenabled -preenabling -preenact -pre-enact -preenacted -preenacting -preenaction -pre-enaction -preenacts -preenclose -pre-enclose -preenclosed -preenclosing -preenclosure -pre-enclosure -preencounter -pre-encounter -preencourage -pre-encourage -preencouragement -pre-encouragement -preendeavor -pre-endeavor -preendorse -pre-endorse -preendorsed -preendorsement -pre-endorsement -preendorser -pre-endorser -preendorsing -preened -preener -pre-energetic -pre-energy -preeners -preenforce -pre-enforce -preenforced -preenforcement -pre-enforcement -preenforcing -preengage -pre-engage -preengaged -preengagement -pre-engagement -preengages -preengaging -preengineering -pre-engineering -pre-English -preening -preenjoy -pre-enjoy -preenjoyable -pre-enjoyable -preenjoyment -pre-enjoyment -preenlarge -pre-enlarge -preenlarged -preenlargement -pre-enlargement -preenlarging -preenlighten -pre-enlighten -preenlightener -pre-enlightener -pre-enlightening -preenlightenment -pre-enlightenment -preenlist -pre-enlist -preenlistment -pre-enlistment -preenlistments -preenroll -pre-enroll -preenrollment -pre-enrollment -preens -preentail -pre-entail -preentailment -pre-entailment -preenter -pre-enter -preentertain -pre-entertain -preentertainer -pre-entertainer -preentertainment -pre-entertainment -preenthusiasm -pre-enthusiasm -pre-enthusiastic -preentitle -pre-entitle -preentitled -preentitling -preentrance -pre-entrance -preentry -pre-entry -preenumerate -pre-enumerate -preenumerated -preenumerating -preenumeration -pre-enumeration -preenvelop -pre-envelop -preenvelopment -pre-envelopment -preenvironmental -pre-environmental -pre-epic -preepidemic -pre-epidemic -preepochal -pre-epochal -preequalization -pre-equalization -preequip -pre-equip -preequipment -pre-equipment -preequipped -preequipping -preequity -pre-equity -preerect -pre-erect -preerection -pre-erection -preerupt -pre-erupt -preeruption -pre-eruption -preeruptive -pre-eruptive -preeruptively -prees -preescape -pre-escape -preescaped -preescaping -pre-escort -preesophageal -pre-esophageal -preessay -pre-essay -preessential -pre-essential -preessentially -preestablish -pre-establish -preestablished -pre-established -pre-establisher -preestablishes -preestablishing -pre-establishment -preesteem -pre-esteem -preestimate -pre-estimate -preestimated -preestimates -preestimating -preestimation -pre-estimation -preestival -pre-estival -pre-eter -preeternal -pre-eternal -preeternity -preevade -pre-evade -preevaded -preevading -preevaporate -pre-evaporate -preevaporated -preevaporating -preevaporation -pre-evaporation -preevaporator -pre-evaporator -preevasion -pre-evasion -preevidence -pre-evidence -preevident -pre-evident -preevidently -pre-evidently -pre-evite -preevolutional -pre-evolutional -preevolutionary -pre-evolutionary -preevolutionist -pre-evolutionist -preexact -pre-exact -preexaction -pre-exaction -preexamination -pre-examination -preexaminations -preexamine -pre-examine -preexamined -preexaminer -pre-examiner -preexamines -preexamining -pre-excel -pre-excellence -pre-excellency -pre-excellent -preexcept -pre-except -preexception -pre-exception -preexceptional -pre-exceptional -preexceptionally -pre-exceptionally -preexchange -pre-exchange -preexchanged -preexchanging -preexcitation -pre-excitation -preexcite -pre-excite -preexcited -pre-excitement -preexciting -preexclude -pre-exclude -preexcluded -preexcluding -preexclusion -pre-exclusion -preexclusive -pre-exclusive -preexclusively -pre-exclusively -preexcursion -pre-excursion -preexcuse -pre-excuse -preexcused -preexcusing -preexecute -pre-execute -preexecuted -preexecuting -preexecution -pre-execution -preexecutor -pre-executor -preexempt -pre-exempt -preexemption -pre-exemption -preexhaust -pre-exhaust -preexhaustion -pre-exhaustion -preexhibit -pre-exhibit -preexhibition -pre-exhibition -preexhibitor -pre-exhibitor -pre-exile -preexilian -pre-exilian -preexilic -pre-exilic -preexist -pre-exist -preexisted -preexistence -pre-existence -preexistences -preexistent -pre-existent -pre-existentiary -pre-existentism -preexisting -preexists -preexpand -pre-expand -preexpansion -pre-expansion -preexpect -pre-expect -preexpectant -pre-expectant -preexpectation -pre-expectation -preexpedition -pre-expedition -preexpeditionary -pre-expeditionary -preexpend -pre-expend -preexpenditure -pre-expenditure -preexpense -pre-expense -preexperience -pre-experience -preexperienced -preexperiencing -preexperiment -pre-experiment -preexperimental -pre-experimental -preexpiration -pre-expiration -preexplain -pre-explain -preexplanation -pre-explanation -preexplanatory -pre-explanatory -preexplode -pre-explode -preexploded -preexploding -preexplosion -pre-explosion -preexpose -pre-expose -preexposed -preexposes -preexposing -preexposition -pre-exposition -preexposure -pre-exposure -preexposures -preexpound -pre-expound -preexpounder -pre-expounder -preexpress -pre-express -preexpression -pre-expression -preexpressive -pre-expressive -preextend -pre-extend -preextensive -pre-extensive -preextensively -pre-extensively -preextent -pre-extent -preextinction -pre-extinction -preextinguish -pre-extinguish -preextinguishment -pre-extinguishment -preextract -pre-extract -preextraction -pre-extraction -preeze -pref -pref. -prefab -prefabbed -prefabbing -prefabricate -prefabricated -prefabricates -prefabricating -prefabrication -prefabrications -prefabricator -prefabs -pre-fabulous -Preface -prefaceable -prefaced -prefacer -prefacers -prefaces -prefacial -prefacing -prefacist -prefactor -prefactory -prefade -prefaded -prefades -prefamiliar -prefamiliarity -prefamiliarly -prefamous -prefamously -prefashion -prefashioned -prefatial -prefator -prefatory -prefatorial -prefatorially -prefatorily -prefavor -prefavorable -prefavorably -prefavorite -prefearful -prefearfully -prefeast -prefect -prefectly -prefectoral -prefectorial -prefectorially -prefectorian -prefects -prefectship -prefectual -prefectural -prefecture -prefectures -prefecundation -prefecundatory -prefederal -prefelic -prefer -preferability -preferable -preferableness -preferably -prefered -preferee -preference -preferences -preference's -preferent -preferential -preferentialism -preferentialist -preferentially -preferment -prefermentation -preferments -preferral -preferred -preferredly -preferredness -preferrer -preferrers -preferring -preferrous -prefers -prefertile -prefertility -prefertilization -prefertilize -prefertilized -prefertilizing -prefervid -prefestival -prefet -prefeudal -prefeudalic -prefeudalism -preffroze -preffrozen -prefiction -prefictional -prefight -prefigurate -prefiguration -prefigurative -prefiguratively -prefigurativeness -prefigure -prefigured -prefigurement -prefigurer -prefigures -prefiguring -prefile -prefiled -prefiles -prefill -prefiller -prefills -prefilter -prefilters -prefinal -prefinance -prefinanced -prefinancial -prefinancing -prefine -prefinish -prefire -prefired -prefires -prefix -prefixable -prefixal -prefixally -prefixation -prefixed -prefixedly -prefixes -prefixing -prefixion -prefixions -prefixture -preflagellate -preflagellated -preflame -preflatter -preflattery -preflavor -preflavoring -preflection -preflexion -preflight -preflood -prefloration -preflowering -prefocus -prefocused -prefocuses -prefocusing -prefocussed -prefocusses -prefocussing -prefoliation -prefool -preforbidden -preforceps -preforgave -preforgive -preforgiven -preforgiveness -preforgiving -preforgotten -preform -preformant -preformation -preformationary -preformationism -preformationist -preformative -preformed -preforming -preformism -preformist -preformistic -preforms -preformulate -preformulated -preformulating -preformulation -prefortunate -prefortunately -prefortune -prefoundation -prefounder -prefract -prefragrance -prefragrant -prefrank -prefranked -prefranking -prefrankness -prefranks -prefraternal -prefraternally -prefraud -prefree-trade -pre-free-trade -prefreeze -prefreezes -prefreezing -pre-French -prefreshman -prefreshmen -prefriendly -prefriendship -prefright -prefrighten -prefrontal -prefroze -prefrozen -prefulfill -prefulfillment -prefulgence -prefulgency -prefulgent -prefunction -prefunctional -prefuneral -prefungoidal -prefurlough -prefurnish -pregain -pregainer -pregalvanize -pregalvanized -pregalvanizing -pregame -preganglionic -pregastrular -pregather -pregathering -pregeminum -pregenerate -pregenerated -pregenerating -pregeneration -pregenerosity -pregenerous -pregenerously -pregenial -pregeniculatum -pregeniculum -pregenital -pregeological -pre-Georgian -pre-German -pre-Germanic -preggers -preghiera -pregirlhood -Pregl -preglacial -pre-glacial -pregladden -pregladness -preglenoid -preglenoidal -preglobulin -pregnability -pregnable -pregnance -pregnancy -pregnancies -pregnant -pregnantly -pregnantness -pregnenolone -pregolden -pregolfing -pre-Gothic -pregracile -pregracious -pregrade -pregraded -pregrading -pregraduation -pregranite -pregranitic -pregratify -pregratification -pregratified -pregratifying -pre-Greek -pregreet -pregreeting -pregrievance -pregrowth -preguarantee -preguaranteed -preguaranteeing -preguarantor -preguard -preguess -preguidance -preguide -preguided -preguiding -preguilt -preguilty -preguiltiness -pregust -pregustant -pregustation -pregustator -pregustic -Pregwood -prehallux -prehalter -prehalteres -pre-Han -prehandicap -prehandicapped -prehandicapping -prehandle -prehandled -prehandling -prehaps -preharden -prehardened -prehardener -prehardening -prehardens -preharmony -preharmonious -preharmoniously -preharmoniousness -preharsh -preharshness -preharvest -prehatred -prehaunt -prehaunted -prehaustorium -prehazard -prehazardous -preheal -prehearing -preheat -preheated -preheater -preheating -preheats -pre-Hebrew -pre-Hellenic -prehemiplegic -prehend -prehended -prehensibility -prehensible -prehensile -prehensility -prehension -prehensive -prehensiveness -prehensor -prehensory -prehensorial -prehepatic -prehepaticus -preheroic -prehesitancy -prehesitate -prehesitated -prehesitating -prehesitation -prehexameral -prehydration -pre-Hieronymian -pre-Hinduized -prehypophysis -pre-Hispanic -prehistory -prehistorian -prehistoric -prehistorical -prehistorically -prehistorics -prehistories -prehnite -prehnitic -preholder -preholding -preholiday -pre-Homeric -prehominid -prehorizon -prehorror -prehostile -prehostility -prehuman -prehumans -prehumiliate -prehumiliation -prehumor -prehunger -prey -preidea -preidentify -preidentification -preidentified -preidentifying -preyed -preyer -preyers -preyful -preignition -pre-ignition -preying -preyingly -preilium -preilluminate -preillumination -preillustrate -preillustrated -preillustrating -preillustration -preimage -preimaginary -preimagination -preimagine -preimagined -preimagining -preimbibe -preimbibed -preimbibing -preimbue -preimbued -preimbuing -preimitate -preimitated -preimitating -preimitation -preimitative -preimmigration -preimmunization -preimmunizations -preimmunize -preimmunized -preimmunizes -preimmunizing -preimpair -preimpairment -preimpart -preimperial -preimport -preimportance -preimportant -preimportantly -preimportation -preimposal -preimpose -preimposed -preimposing -preimposition -preimpress -preimpression -preimpressionism -preimpressionist -preimpressive -preimprove -preimproved -preimprovement -preimproving -preinaugural -preinaugurate -preinaugurated -preinaugurating -pre-Inca -pre-Incan -pre-Incarial -preincarnate -preincentive -preincination -preinclination -preincline -preinclined -preinclining -preinclude -preincluded -preincluding -preinclusion -preincorporate -preincorporated -preincorporating -preincorporation -preincrease -preincreased -preincreasing -preindebted -preindebtedly -preindebtedness -preindemnify -preindemnification -preindemnified -preindemnifying -preindemnity -preindependence -preindependent -preindependently -preindesignate -pre-Indian -preindicant -preindicate -preindicated -preindicating -preindication -preindicative -preindispose -preindisposed -preindisposing -preindisposition -preinduce -preinduced -preinducement -preinducing -preinduction -preinductive -preindulge -preindulged -preindulgence -preindulgent -preindulging -preindustry -preindustrial -preinfect -preinfection -preinfer -preinference -preinferred -preinferring -preinflection -preinflectional -preinflict -preinfliction -preinfluence -preinform -preinformation -preinhabit -preinhabitant -preinhabitation -preinhere -preinhered -preinhering -preinherit -preinheritance -preinitial -preinitialize -preinitialized -preinitializes -preinitializing -preinitiate -preinitiated -preinitiating -preinitiation -preinjure -preinjury -preinjurious -preinoculate -preinoculated -preinoculates -preinoculating -preinoculation -preinquisition -preinscribe -preinscribed -preinscribing -preinscription -preinsert -preinserted -preinserting -preinsertion -preinserts -preinsinuate -preinsinuated -preinsinuating -preinsinuatingly -preinsinuation -preinsinuative -preinspect -preinspection -preinspector -preinspire -preinspired -preinspiring -preinstall -preinstallation -preinstill -preinstillation -preinstruct -preinstructed -preinstructing -preinstruction -preinstructional -preinstructive -preinstructs -preinsula -preinsular -preinsulate -preinsulated -preinsulating -preinsulation -preinsult -preinsurance -preinsure -preinsured -preinsuring -preintellectual -preintellectually -preintelligence -preintelligent -preintelligently -preintend -preintention -preintercede -preinterceded -preinterceding -preintercession -preinterchange -preintercourse -preinterest -preinterfere -preinterference -preinterpret -preinterpretation -preinterpretative -preinterrupt -preinterview -preintimate -preintimated -preintimately -preintimating -preintimation -preintone -preinvasive -preinvent -preinvention -preinventive -preinventory -preinventories -preinvest -preinvestigate -preinvestigated -preinvestigating -preinvestigation -preinvestigator -preinvestment -preinvitation -preinvite -preinvited -preinviting -preinvocation -preinvolve -preinvolved -preinvolvement -preinvolving -preiotization -preiotize -preyouthful -pre-Irish -preirrigation -preirrigational -preys -Preiser -pre-Islam -pre-Islamic -pre-Islamite -pre-Islamitic -pre-Israelite -pre-Israelitish -preissuance -preissue -preissued -preissuing -prejacent -pre-Jewish -pre-Johannine -pre-Johnsonian -prejournalistic -prejudge -prejudged -prejudgement -prejudger -prejudges -prejudging -prejudgment -prejudgments -prejudicate -prejudication -prejudicative -prejudicator -prejudice -prejudiced -prejudicedly -prejudiceless -prejudice-proof -prejudices -prejudiciable -prejudicial -pre-judicial -prejudicially -prejudicialness -pre-judiciary -prejudicing -prejudicious -prejudiciously -prejunior -prejurisdiction -prejustify -prejustification -prejustified -prejustifying -pre-Justinian -prejuvenile -Prekantian -pre-Kantian -prekindergarten -prekindergartens -prekindle -prekindled -prekindling -preknew -preknit -preknow -preknowing -preknowledge -preknown -pre-Koranic -prela -prelabel -prelabial -prelabor -prelabrum -prelachrymal -prelacy -prelacies -prelacrimal -prelacteal -prelanguage -prelapsarian -prelaryngoscopic -prelate -prelatehood -prelateity -prelates -prelateship -prelatess -prelaty -prelatial -prelatic -prelatical -prelatically -prelaticalness -pre-Latin -prelation -prelatish -prelatism -prelatist -prelatize -prelatry -prelature -prelaunch -prelaunching -pre-Laurentian -prelaw -prelawful -prelawfully -prelawfulness -prelease -preleased -preleasing -prelect -prelected -prelecting -prelection -prelector -prelectorship -prelectress -prelects -prelecture -prelectured -prelecturing -prelegacy -prelegal -prelegate -prelegatee -prelegend -prelegendary -prelegislative -prelexical -preliability -preliable -prelibation -preliberal -preliberality -preliberally -preliberate -preliberated -preliberating -preliberation -prelicense -prelicensed -prelicensing -prelife -prelim -prelim. -preliminary -preliminaries -preliminarily -prelimit -prelimitate -prelimitated -prelimitating -prelimitation -prelimited -prelimiting -prelimits -prelims -prelingual -prelingually -prelinguistic -pre-Linnaean -pre-Linnean -prelinpinpin -preliquidate -preliquidated -preliquidating -preliquidation -preliteral -preliterally -preliteralness -preliterary -preliterate -preliterature -prelithic -prelitigation -prelives -preloaded -preloan -prelocalization -prelocate -prelocated -prelocating -prelogic -prelogical -preloral -preloreal -preloss -pre-Luciferian -prelude -preluded -preluder -preluders -preludes -prelude's -preludial -Preludin -preluding -preludio -preludious -preludiously -preludium -preludize -prelumbar -prelunch -prelusion -prelusive -prelusively -prelusory -prelusorily -pre-Lutheran -preluxurious -preluxuriously -preluxuriousness -Prem -prem. -premachine -premade -premadness -premaintain -premaintenance -premake -premaker -premaking -pre-Malay -pre-Malayan -pre-Malaysian -premalignant -preman -pre-man -premandibular -premanhood -premaniacal -premanifest -premanifestation -premankind -premanufacture -premanufactured -premanufacturer -premanufacturing -premarital -premarketing -premarry -premarriage -premarried -premarrying -pre-Marxian -premastery -prematch -premate -premated -prematerial -prematernity -premating -prematrimonial -prematrimonially -prematuration -premature -prematurely -prematureness -prematurity -prematurities -premaxilla -premaxillae -premaxillary -premeal -premeasure -premeasured -premeasurement -premeasuring -premechanical -premed -premedia -premedial -premedian -premedic -premedical -premedicate -premedicated -premedicating -premedication -premedics -premedieval -premedievalism -premeditate -premeditated -premeditatedly -premeditatedness -premeditates -premeditating -premeditatingly -premeditation -premeditations -premeditative -premeditator -premeditators -premeds -premeet -premegalithic -premeiotic -prememoda -prememoranda -prememorandum -prememorandums -premen -premenace -premenaced -premenacing -pre-Mendelian -premenopausal -premenstrual -premenstrually -premention -Premer -premeridian -premerit -pre-Messianic -premetallic -premethodical -pre-Methodist -premia -premial -premiant -premiate -premiated -premiating -pre-Mycenaean -premycotic -premidnight -premidsummer -premie -premyelocyte -premier -premieral -premiere -premiered -premieres -premieress -premiering -premierjus -premiers -premier's -premiership -premierships -premies -premilitary -premillenarian -premillenarianism -premillenial -premillennial -premillennialise -premillennialised -premillennialising -premillennialism -premillennialist -premillennialize -premillennialized -premillennializing -premillennially -premillennian -Preminger -preminister -preministry -preministries -premio -premious -PREMIS -premisal -premise -premised -premises -premise's -premising -premisory -premisrepresent -premisrepresentation -premiss -premissable -premisses -premit -premythical -premium -premiums -premium's -premix -premixed -premixer -premixes -premixing -premixture -premodel -premodeled -premodeling -premodern -premodify -premodification -premodified -premodifies -premodifying -pre-Mohammedian -premoisten -premoistened -premoistening -premoistens -premolar -premolars -premold -premolder -premolding -premolds -premolt -premonarchal -premonarchial -premonarchical -premonetary -premonetory -Premongolian -pre-Mongolian -premonish -premonishment -premonition -premonitions -premonitive -premonitor -premonitory -premonitorily -premonopoly -premonopolies -premonopolize -premonopolized -premonopolizing -Premonstrant -Premonstratensian -premonstratensis -premonstration -Premont -premonumental -premoral -premorality -premorally -premorbid -premorbidly -premorbidness -premorning -premorse -premortal -premortally -premortify -premortification -premortified -premortifying -premortuary -premorula -premosaic -pre-Mosaic -pre-Moslem -premotion -premourn -premove -premovement -premover -premuddle -premuddled -premuddling -premultiply -premultiplication -premultiplier -premultiplying -premundane -premune -premunicipal -premunire -premunition -premunitory -premusical -premusically -pre-Muslim -premuster -premutative -premutiny -premutinied -premutinies -premutinying -Pren -prename -prenames -Prenanthes -pre-Napoleonic -prenarcotic -prenares -prenarial -prenaris -prenasal -prenatal -prenatalist -prenatally -prenational -prenative -prenatural -prenaval -prender -Prendergast -prendre -prenebular -prenecessitate -prenecessitated -prenecessitating -preneglect -preneglectful -prenegligence -prenegligent -prenegotiate -prenegotiated -prenegotiating -prenegotiation -preneolithic -prenephritic -preneural -preneuralgic -pre-Newtonian -prenight -pre-Noachian -prenoble -prenodal -prenomen -prenomens -prenomina -prenominal -prenominate -prenominated -prenominating -prenomination -prenominical -prenoon -pre-Norman -pre-Norse -prenotation -prenote -prenoted -prenotice -prenotify -prenotification -prenotifications -prenotified -prenotifies -prenotifying -prenoting -prenotion -Prent -Prenter -Prentice -'prentice -prenticed -prentices -prenticeship -prenticing -Prentiss -prenumber -prenumbering -prenuncial -prenunciate -prenuptial -prenursery -prenurseries -prenzie -preobedience -preobedient -preobediently -preobject -preobjection -preobjective -preobligate -preobligated -preobligating -preobligation -preoblige -preobliged -preobliging -preoblongata -preobservance -preobservation -preobservational -preobserve -preobserved -preobserving -preobstruct -preobstruction -preobtain -preobtainable -preobtrude -preobtruded -preobtruding -preobtrusion -preobtrusive -preobviate -preobviated -preobviating -preobvious -preobviously -preobviousness -preoccasioned -preoccipital -preocclusion -preoccultation -preoccupancy -preoccupant -preoccupate -preoccupation -preoccupations -preoccupative -preoccupy -preoccupied -preoccupiedly -preoccupiedness -preoccupier -preoccupies -preoccupying -preoccur -preoccurred -preoccurrence -preoccurring -preoceanic -preocular -preodorous -preoesophageal -preoffend -preoffense -preoffensive -preoffensively -preoffensiveness -preoffer -preoffering -preofficial -preofficially -preominate -preomission -preomit -preomitted -preomitting -preopen -preopening -preoperate -preoperated -preoperating -preoperation -preoperational -preoperative -preoperatively -preoperator -preopercle -preopercular -preoperculum -pre-operculum -preopinion -preopinionated -preoppose -preopposed -preopposing -preopposition -preoppress -preoppression -preoppressor -preoptic -preoptimistic -preoption -pre-option -preoral -preorally -preorbital -pre-orbital -preordain -pre-ordain -preordained -preordaining -preordainment -preordains -preorder -preordered -preordering -preordinance -pre-ordinate -preordination -preorganic -preorganically -preorganization -preorganize -preorganized -preorganizing -preoriginal -preoriginally -preornamental -pre-Osmanli -preotic -preoutfit -preoutfitted -preoutfitting -preoutline -preoutlined -preoutlining -preoverthrew -preoverthrow -preoverthrowing -preoverthrown -preoviposition -preovulatory -prep -prep. -prepack -prepackage -prepackaged -prepackages -prepackaging -prepacked -prepacking -prepacks -prepaging -prepay -prepayable -prepaid -prepaying -prepayment -prepayments -prepainful -prepays -prepalaeolithic -pre-Palaeozoic -prepalatal -prepalatine -prepaleolithic -pre-Paleozoic -prepanic -preparable -preparateur -preparation -preparationist -preparations -preparation's -preparative -preparatively -preparatives -preparative's -preparator -preparatory -preparatorily -prepardon -prepare -prepared -preparedly -preparedness -preparednesses -preparement -preparental -preparer -preparers -prepares -preparietal -preparing -preparingly -preparliamentary -preparoccipital -preparoxysmal -prepartake -prepartaken -prepartaking -preparticipation -prepartisan -prepartition -prepartnership -prepartook -prepaste -prepatellar -prepatent -prepatrician -pre-Patrician -prepatriotic -pre-Pauline -prepave -prepaved -prepavement -prepaving -prepd -prepectoral -prepeduncle -prepend -prepended -prepending -prepenetrate -prepenetrated -prepenetrating -prepenetration -prepenial -prepense -prepensed -prepensely -prepeople -preperceive -preperception -preperceptive -preperfect -preperitoneal -pre-Permian -pre-Persian -prepersuade -prepersuaded -prepersuading -prepersuasion -prepersuasive -preperusal -preperuse -preperused -preperusing -prepetition -pre-Petrine -prepg -pre-Pharaonic -pre-Phidian -prephragma -prephthisical -prepigmental -prepill -prepyloric -prepineal -prepink -prepious -prepiously -prepyramidal -prepituitary -preplace -preplaced -preplacement -preplacental -preplaces -preplacing -preplan -preplanned -preplanning -preplans -preplant -preplanting -prepledge -prepledged -prepledging -preplot -preplotted -preplotting -prepn -PREPNET -prepoetic -prepoetical -prepoison -prepolice -prepolish -pre-Polish -prepolitic -prepolitical -prepolitically -prepollence -prepollency -prepollent -prepollex -prepollices -preponder -preponderance -preponderances -preponderancy -preponderant -preponderantly -preponderate -preponderated -preponderately -preponderates -preponderating -preponderatingly -preponderation -preponderous -preponderously -prepontile -prepontine -preportray -preportrayal -prepose -preposed -preposing -preposition -prepositional -prepositionally -prepositions -preposition's -prepositive -prepositively -prepositor -prepositorial -prepositure -prepossess -prepossessed -prepossesses -prepossessing -prepossessingly -prepossessingness -prepossession -prepossessionary -prepossessions -prepossessor -preposter -preposterous -preposterously -preposterousness -prepostor -prepostorship -prepotence -prepotency -prepotent -prepotential -prepotently -prepped -preppy -preppie -preppier -preppies -preppily -prepping -prepractical -prepractice -prepracticed -prepracticing -prepractise -prepractised -prepractising -preprandial -prepreference -pre-preference -prepreg -prepregs -prepreparation -preprice -prepriced -prepricing -preprimary -preprimer -preprimitive -preprint -preprinted -preprinting -preprints -preprocess -preprocessed -preprocesses -preprocessing -preprocessor -preprocessors -preproduction -preprofess -preprofessional -preprogram -preprogrammed -preprohibition -prepromise -prepromised -prepromising -prepromote -prepromoted -prepromoting -prepromotion -prepronounce -prepronounced -prepronouncement -prepronouncing -preprophetic -preprostatic -preprove -preproved -preprovide -preprovided -preproviding -preprovision -preprovocation -preprovoke -preprovoked -preprovoking -preprudent -preprudently -preps -prepsychology -prepsychological -prepsychotic -prepuberal -prepuberally -prepubertal -prepubertally -prepuberty -prepubescence -prepubescent -prepubic -prepubis -prepublication -prepublish -prepuce -prepuces -prepueblo -pre-Pueblo -pre-Puebloan -prepunch -prepunched -prepunches -prepunching -prepunctual -prepunish -prepunishment -prepupa -prepupal -prepurchase -prepurchased -prepurchaser -prepurchases -prepurchasing -prepurpose -prepurposed -prepurposing -prepurposive -preputial -preputium -prequalify -prequalification -prequalified -prequalifying -prequarantine -prequarantined -prequarantining -prequel -prequestion -prequotation -prequote -prequoted -prequoting -prerace -preracing -preradio -prerailroad -prerailroadite -prerailway -preramus -pre-Raphael -pre-Raphaelism -Pre-Raphaelite -pre-Raphaelitic -pre-Raphaelitish -Pre-Raphaelitism -prerational -preready -prereadiness -prerealization -prerealize -prerealized -prerealizing -prerebellion -prereceipt -prereceive -prereceived -prereceiver -prereceiving -prerecital -prerecite -prerecited -prereciting -prereckon -prereckoning -prerecognition -prerecognize -prerecognized -prerecognizing -prerecommend -prerecommendation -prereconcile -prereconciled -prereconcilement -prereconciliation -prereconciling -pre-Reconstruction -prerecord -prerecorded -prerecording -prerecords -prerectal -preredeem -preredemption -prereduction -prerefer -prereference -prereferred -prereferring -prerefine -prerefined -prerefinement -prerefining -prereform -prereformation -pre-Reformation -prereformatory -prerefusal -prerefuse -prerefused -prerefusing -preregal -preregister -preregistered -preregistering -preregisters -preregistration -preregistrations -preregnant -preregulate -preregulated -preregulating -preregulation -prerehearsal -prereject -prerejection -prerejoice -prerejoiced -prerejoicing -prerelate -prerelated -prerelating -prerelation -prerelationship -prerelease -prereligious -prereluctance -prereluctation -preremit -preremittance -preremitted -preremitting -preremorse -preremote -preremoval -preremove -preremoved -preremoving -preremunerate -preremunerated -preremunerating -preremuneration -pre-Renaissance -prerenal -prerent -prerental -prereport -prerepresent -prerepresentation -prereproductive -prereption -prerepublican -prerequest -prerequire -prerequired -prerequirement -prerequiring -prerequisite -prerequisites -prerequisite's -prerequisition -preresemblance -preresemble -preresembled -preresembling -preresolution -preresolve -preresolved -preresolving -preresort -prerespectability -prerespectable -prerespiration -prerespire -preresponsibility -preresponsible -prerestoration -pre-Restoration -prerestrain -prerestraint -prerestrict -prerestriction -preretirement -prereturn -prereveal -prerevelation -prerevenge -prerevenged -prerevenging -prereversal -prereverse -prereversed -prereversing -prereview -prerevise -prerevised -prerevising -prerevision -prerevival -pre-Revolution -prerevolutionary -prerheumatic -prerich -prerighteous -prerighteously -prerighteousness -prerinse -preriot -prerock -prerogatival -prerogative -prerogatived -prerogatively -prerogatives -prerogative's -prerogativity -preroyal -preroyally -preroyalty -prerolandic -pre-Roman -preromantic -preromanticism -preroute -prerouted -preroutine -prerouting -prerupt -preruption -Pres -Pres. -presa -presacral -presacrifice -presacrificed -presacrificial -presacrificing -presage -presaged -presageful -presagefully -presagefulness -presagement -presager -presagers -presages -presagient -presaging -presagingly -presay -presaid -presaying -presale -presalvation -presanctify -presanctification -presanctified -presanctifying -presanguine -presanitary -pre-Sargonic -presartorial -presatisfaction -presatisfactory -presatisfy -presatisfied -presatisfying -presavage -presavagery -presaw -pre-Saxon -Presb -Presb. -Presber -presby- -presbyacousia -presbyacusia -presbycousis -presbycusis -presbyope -presbyophrenia -presbyophrenic -presbyopy -presbyopia -presbyopic -Presbyt -presbyte -presbyter -presbyteral -presbyterate -presbyterated -presbytere -presbyteress -presbytery -presbyteria -presbyterial -presbyterially -Presbyterian -Presbyterianism -Presbyterianize -Presbyterianly -presbyterians -presbyteries -presbyterium -presbyters -presbytership -presbytia -presbytic -Presbytinae -Presbytis -presbytism -prescan -prescapula -prescapular -prescapularis -prescholastic -preschool -preschooler -preschoolers -prescience -presciences -prescient -prescientific -presciently -prescind -prescinded -prescindent -prescinding -prescinds -prescission -prescore -prescored -prescores -prescoring -Prescott -prescout -prescribable -prescribe -prescribed -prescriber -prescribes -prescribing -prescript -prescriptibility -prescriptible -prescription -prescriptionist -prescriptions -prescription's -prescriptive -prescriptively -prescriptiveness -prescriptivism -prescriptivist -prescriptorial -prescripts -prescrive -prescutal -prescutum -prese -preseal -presearch -preseason -preseasonal -presecular -presecure -presecured -presecuring -presedentary -presee -preseeing -preseen -preselect -preselected -preselecting -preselection -preselector -preselects -presell -preselling -presells -presemilunar -preseminal -preseminary -pre-Semitic -presence -presence-chamber -presenced -presenceless -presences -presence's -presenile -presenility -presensation -presension -present -presentability -presentable -presentableness -presentably -present-age -presental -presentation -presentational -presentationalism -presentationes -presentationism -presentationist -presentations -presentation's -presentative -presentatively -present-day -presented -presentee -presentence -presentenced -presentencing -presenter -presenters -presential -presentiality -presentially -presentialness -presentiate -presentient -presentiment -presentimental -presentiments -presenting -presentist -presentive -presentively -presentiveness -presently -presentment -presentments -present-minded -presentness -presentor -presents -present-time -preseparate -preseparated -preseparating -preseparation -preseparator -preseptal -preser -preservability -preservable -preserval -preservation -preservationist -preservations -preservative -preservatives -preservatize -preservatory -preserve -preserved -preserver -preserveress -preservers -preserves -preserving -preses -presession -preset -presets -presettable -presetting -presettle -presettled -presettlement -presettling -presexual -preshadow -pre-Shakepeare -pre-Shakespeare -pre-Shakespearean -pre-Shakespearian -preshape -preshaped -preshapes -preshaping -preshare -preshared -presharing -presharpen -preshelter -preship -preshipment -preshipped -preshipping -Presho -preshortage -preshorten -preshow -preshowed -preshowing -preshown -preshows -preshrink -preshrinkage -preshrinked -preshrinking -preshrinks -preshrunk -pre-shrunk -preside -presided -presidence -presidency -presidencia -presidencies -president -presidente -president-elect -presidentes -presidentess -presidential -presidentially -presidentiary -presidents -president's -presidentship -presider -presiders -presides -presidy -presidia -presidial -presidially -presidiary -presiding -Presidio -presidios -presidium -presidiums -presift -presifted -presifting -presifts -presign -presignal -presignaled -presignify -presignificance -presignificancy -presignificant -presignification -presignificative -presignificator -presignified -presignifying -pre-Silurian -presylvian -presimian -presympathy -presympathize -presympathized -presympathizing -presymphysial -presymphony -presymphonic -presymptom -presymptomatic -presynapsis -presynaptic -presynaptically -presynsacral -pre-Syriac -pre-Syrian -presystematic -presystematically -presystole -presystolic -preslavery -presleep -Presley -preslice -presmooth -presoak -presoaked -presoaking -presoaks -presocial -presocialism -presocialist -pre-Socratic -presolar -presold -presolicit -presolicitation -pre-Solomonic -pre-Solonian -presolution -presolvated -presolve -presolved -presolving -presong -presophomore -presort -presorts -presound -pre-Spanish -prespecialist -prespecialize -prespecialized -prespecializing -prespecify -prespecific -prespecifically -prespecification -prespecified -prespecifying -prespective -prespeculate -prespeculated -prespeculating -prespeculation -presphenoid -presphenoidal -presphygmic -prespinal -prespinous -prespiracular -presplendor -presplenomegalic -presplit -prespoil -prespontaneity -prespontaneous -prespontaneously -prespread -prespreading -presprinkle -presprinkled -presprinkling -prespur -prespurred -prespurring -Press -pressable -pressage -press-agent -press-agentry -press-bed -pressboard -Pressburg -pressdom -pressed -Pressey -pressel -presser -pressers -presses -pressfat -press-forge -pressful -pressgang -press-gang -press-yard -pressible -pressie -pressing -pressingly -pressingness -pressings -pression -pressiroster -pressirostral -pressive -pressly -press-made -Pressman -pressmanship -pressmark -press-mark -pressmaster -pressmen -press-money -press-noticed -pressor -pressoreceptor -pressors -pressosensitive -presspack -press-point -press-ridden -pressroom -press-room -pressrooms -pressrun -pressruns -press-up -pressurage -pressural -pressure -pressure-cook -pressured -pressure-fixing -pressureless -pressureproof -pressure-reciprocating -pressure-reducing -pressure-regulating -pressure-relieving -pressures -pressure-testing -pressuring -pressurization -pressurizations -pressurize -pressurized -pressurizer -pressurizers -pressurizes -pressurizing -press-warrant -presswoman -presswomen -presswork -press-work -pressworker -prest -prestabilism -prestability -prestable -prestamp -prestamped -prestamping -prestamps -prestandard -prestandardization -prestandardize -prestandardized -prestandardizing -prestant -prestate -prestated -prestating -prestation -prestatistical -presteam -presteel -prester -presterilize -presterilized -presterilizes -presterilizing -presternal -presternum -pre-sternum -presters -prestezza -prestidigital -prestidigitate -prestidigitation -prestidigitations -prestidigitator -prestidigitatory -prestidigitatorial -prestidigitators -Prestige -prestigeful -prestiges -prestigiate -prestigiation -prestigiator -prestigious -prestigiously -prestigiousness -prestimulate -prestimulated -prestimulating -prestimulation -prestimuli -prestimulus -prestissimo -prestly -prest-money -presto -prestock -prestomial -prestomium -Preston -Prestonpans -Prestonsburg -prestorage -prestore -prestored -prestoring -prestos -prestraighten -prestrain -prestrengthen -prestress -prestressed -prestretch -prestricken -prestrike -prestruggle -prestruggled -prestruggling -prests -prestubborn -prestudy -prestudied -prestudying -prestudious -prestudiously -prestudiousness -Prestwich -Prestwick -presubdue -presubdued -presubduing -presubiculum -presubject -presubjection -presubmission -presubmit -presubmitted -presubmitting -presubordinate -presubordinated -presubordinating -presubordination -presubscribe -presubscribed -presubscriber -presubscribing -presubscription -presubsist -presubsistence -presubsistent -presubstantial -presubstitute -presubstituted -presubstituting -presubstitution -presuccess -presuccessful -presuccessfully -presuffer -presuffering -presufficiency -presufficient -presufficiently -presuffrage -presuggest -presuggestion -presuggestive -presuitability -presuitable -presuitably -presul -presumable -presumableness -presumably -presume -presumed -presumedly -presumer -pre-Sumerian -presumers -presumes -presuming -presumingly -presumption -presumptions -presumption's -presumptious -presumptiously -presumptive -presumptively -presumptiveness -presumptuous -presumptuously -presumptuousness -presuperficial -presuperficiality -presuperficially -presuperfluity -presuperfluous -presuperfluously -presuperintendence -presuperintendency -presupervise -presupervised -presupervising -presupervision -presupervisor -presupplemental -presupplementary -presupply -presupplicate -presupplicated -presupplicating -presupplication -presupplied -presupplying -presupport -presupposal -presuppose -presupposed -presupposes -presupposing -presupposition -presuppositionless -presuppositions -presuppress -presuppression -presuppurative -presupremacy -presupreme -presurgery -presurgical -presurmise -presurmised -presurmising -presurprisal -presurprise -presurrender -presurround -presurvey -presusceptibility -presusceptible -presuspect -presuspend -presuspension -presuspicion -presuspicious -presuspiciously -presuspiciousness -presustain -presutural -preswallow -presweeten -presweetened -presweetening -presweetens -pret -pret. -preta -pretabulate -pretabulated -pretabulating -pretabulation -pretan -pretangible -pretangibly -pretannage -pretanned -pretanning -pretape -pretaped -pretapes -pretardy -pretardily -pretardiness -pretariff -pretarsi -pretarsus -pretarsusi -pretaste -pretasted -pretaster -pretastes -pretasting -pretaught -pretax -pretaxation -preteach -preteaching -pretechnical -pretechnically -preteen -preteens -pre-teens -pretelegraph -pretelegraphic -pretelephone -pretelephonic -pretelevision -pretell -pretelling -pretemperate -pretemperately -pretemporal -pretempt -pretemptation -pretence -pretenced -pretenceful -pretenceless -pretences -pretend -pretendant -pretended -pretendedly -pretender -Pretenderism -pretenders -pretendership -pretending -pretendingly -pretendingness -pretends -pretense -pretensed -pretenseful -pretenseless -pretenses -pretension -pretensional -pretensionless -pretensions -pretensive -pretensively -pretensiveness -pretentative -pretention -pretentious -pretentiously -pretentiousness -pretentiousnesses -preter -preter- -pretercanine -preterchristian -preterconventional -preterdetermined -preterdeterminedly -preterdiplomatic -preterdiplomatically -preterequine -preteressential -pretergress -pretergression -preterhuman -preterience -preterient -preterimperfect -preterintentional -preterist -preterit -preterite -preteriteness -preterite-present -preterition -preteritive -preteritness -preterito-present -preterito-presential -preterit-present -preterits -preterlabent -preterlegal -preterlethal -preterminal -pretermission -pretermit -pretermitted -pretermitter -pretermitting -preternative -preternatural -preternaturalism -preternaturalist -preternaturality -preternaturally -preternaturalness -preternormal -preternotorious -preternuptial -preterperfect -preterpluperfect -preterpolitical -preterrational -preterregular -preterrestrial -preterritorial -preterroyal -preterscriptural -preterseasonable -pretersensual -pre-Tertiary -pretervection -pretest -pretested -pretestify -pretestified -pretestifying -pretestimony -pretestimonies -pretesting -pretests -pretext -pretexta -pretextae -pretexted -pretexting -pretexts -pretext's -pretextuous -pre-Thanksgiving -pretheological -prethyroid -prethoracic -prethoughtful -prethoughtfully -prethoughtfulness -prethreaten -prethrill -prethrust -pretibial -pretil -pretimely -pretimeliness -pretympanic -pretincture -pretype -pretyped -pretypes -pretyphoid -pretypify -pretypified -pretypifying -pretypographical -pretyranny -pretyrannical -pretire -pretired -pretiring -pretium -pretoken -pretold -pretone -pretonic -pretor -Pretoria -pretorial -pretorian -pretorium -Pretorius -pretors -pretorship -pretorsional -pretorture -pretortured -pretorturing -pretournament -pretrace -pretraced -pretracheal -pretracing -pretraditional -pretrain -pretraining -pretransact -pretransaction -pretranscribe -pretranscribed -pretranscribing -pretranscription -pretranslate -pretranslated -pretranslating -pretranslation -pretransmission -pretransmit -pretransmitted -pretransmitting -pretransport -pretransportation -pretravel -pretreat -pretreated -pretreaty -pretreating -pretreatment -pretreats -pretrematic -pretry -pretrial -pretribal -Pretrice -pre-Tridentine -pretried -pretrying -pretrim -pretrims -pretrochal -pretty -pretty-behaved -pretty-by-night -prettied -prettier -pretties -prettiest -prettyface -pretty-face -pretty-faced -prettify -prettification -prettified -prettifier -prettifiers -prettifies -prettifying -pretty-footed -pretty-humored -prettying -prettyish -prettyism -prettikin -prettily -pretty-looking -pretty-mannered -prettiness -prettinesses -pretty-pretty -pretty-spoken -pretty-toned -pretty-witted -pretubercular -pretuberculous -pre-Tudor -pretzel -pretzels -preultimate -preultimately -preumbonal -preunderstand -preunderstanding -preunderstood -preundertake -preundertaken -preundertaking -preundertook -preunion -preunions -preunite -preunited -preunites -preuniting -Preuss -Preussen -preutilizable -preutilization -preutilize -preutilized -preutilizing -preux -prev -prevacate -prevacated -prevacating -prevacation -prevaccinate -prevaccinated -prevaccinating -prevaccination -prevail -prevailance -prevailed -prevailer -prevailers -prevailing -prevailingly -prevailingness -prevailment -prevails -prevalence -prevalences -prevalency -prevalencies -prevalent -prevalently -prevalentness -prevalescence -prevalescent -prevalid -prevalidity -prevalidly -prevaluation -prevalue -prevalued -prevaluing -prevariation -prevaricate -prevaricated -prevaricates -prevaricating -prevarication -prevarications -prevaricative -prevaricator -prevaricatory -prevaricators -prevascular -preve -prevegetation -prevelar -prevenance -prevenances -prevenancy -prevenant -prevene -prevened -prevenience -prevenient -preveniently -prevening -prevent -preventability -preventable -preventably -preventative -preventatives -prevented -preventer -preventible -preventing -preventingly -prevention -preventionism -preventionist -prevention-proof -preventions -preventive -preventively -preventiveness -preventives -preventoria -preventorium -preventoriums -preventral -prevents -preventtoria -preventure -preventured -preventuring -preverb -preverbal -preverify -preverification -preverified -preverifying -prevernal -preversed -preversing -preversion -prevertebral -prevesical -preveto -prevetoed -prevetoes -prevetoing -pre-Victorian -previctorious -previde -previdence -Previdi -preview -previewed -previewing -previews -previgilance -previgilant -previgilantly -Previn -previolate -previolated -previolating -previolation -previous -previously -previousness -pre-Virgilian -previse -prevised -previses -previsibility -previsible -previsibly -prevising -prevision -previsional -previsionary -previsioned -previsioning -previsit -previsitor -previsive -previsor -previsors -previze -prevocal -prevocalic -prevocalically -prevocally -prevocational -prevogue -prevoyance -prevoyant -prevoid -prevoidance -prevolitional -pre-Volstead -prevolunteer -prevomer -Prevost -Prevot -prevotal -prevote -prevoted -prevoting -prevue -prevued -prevues -prevuing -Prew -prewar -prewarm -prewarmed -prewarming -prewarms -prewarn -prewarned -prewarning -prewarns -prewarrant -prewash -prewashed -prewashes -prewashing -preweigh -prewelcome -prewelcomed -prewelcoming -prewelwired -prewelwiring -Prewett -prewhip -prewhipped -prewhipping -prewilling -prewillingly -prewillingness -prewire -prewired -prewireless -prewiring -prewitness -Prewitt -prewonder -prewonderment -prework -preworldly -preworldliness -preworship -preworthy -preworthily -preworthiness -prewound -prewrap -prewrapped -prewrapping -prewraps -prex -prexes -prexy -prexies -prez -prezes -prezygapophysial -prezygapophysis -prezygomatic -prezonal -prezone -prf -PRG -PRI -Pry -pria -priacanthid -Priacanthidae -priacanthine -Priacanthus -Priam -Priapean -priapi -Priapic -priapism -priapismic -priapisms -priapitis -Priapulacea -priapulid -Priapulida -Priapulidae -priapuloid -Priapuloidea -Priapulus -Priapus -priapuses -Priapusian -pribble -pribble-prabble -Price -Pryce -priceable -priceably -price-cut -price-cutter -price-cutting -priced -Pricedale -price-deciding -price-enhancing -pricefixing -price-fixing -pricey -priceite -priceless -pricelessly -pricelessness -price-lowering -pricemaker -pricer -price-raising -price-reducing -pricers -price-ruling -prices -price-stabilizing -prich -Prichard -pricy -pricier -priciest -Pricilla -pricing -prick -prickado -prickant -prick-ear -prick-eared -pricked -pricker -prickers -pricket -prickets -prickfoot -pricky -prickier -prickiest -pricking -prickingly -pricking-up -prickish -prickle -prickleback -prickle-back -prickled -pricklefish -prickles -prickless -prickly -pricklyback -pricklier -prickliest -prickly-finned -prickly-fruited -prickly-lobed -prickly-margined -prickliness -prickling -pricklingly -prickly-seeded -prickly-toothed -pricklouse -prickmadam -prick-madam -prickmedainty -prick-post -prickproof -pricks -prickseam -prick-seam -prickshot -prick-song -prickspur -pricktimber -prick-timber -prickwood -Priddy -Pride -pride-blind -pride-blinded -pride-bloated -prided -pride-fed -prideful -pridefully -pridefulness -pride-inflamed -pride-inspiring -prideless -pridelessly -prideling -pride-of-India -pride-ridden -prides -pride-sick -pride-swollen -prideweed -pridy -pridian -priding -pridingly -prie -Priebe -pried -priedieu -prie-dieu -priedieus -priedieux -prier -pryer -priers -pryers -pries -Priest -priestal -priest-astronomer -priest-baiting -priestcap -priest-catching -priestcraft -priest-dynast -priest-doctor -priestdom -priested -priest-educated -priesteen -priestery -priestess -priestesses -priestfish -priestfishes -priest-guarded -priest-harboring -priest-hating -priest-hermit -priest-hole -priesthood -priesthoods -priestianity -priesting -priestish -priestism -priest-king -priest-knight -priest-led -Priestley -priestless -priestlet -priestly -priestlier -priestliest -priestlike -priestliness -priestlinesses -priestling -priest-monk -priest-noble -priest-philosopher -priest-poet -priest-prince -priest-prompted -priest-ridden -priest-riddenness -priest-ruler -priests -priestship -priestshire -priest-statesman -priest-surgeon -priest-wrought -prig -prigdom -prigged -prigger -priggery -priggeries -priggess -prigging -priggish -priggishly -priggishness -priggism -priggisms -prighood -prigman -prigs -prigster -prying -pryingly -pryingness -pryler -Prylis -prill -prilled -prilling -prillion -prills -prim -prim. -Prima -primacy -primacies -primacord -primaeval -primage -primages -primal -Primalia -primality -primally -primaquine -primar -primary -primarian -primaried -primaries -primarily -primariness -primary's -primas -primatal -primate -Primates -primateship -primatial -primatic -primatical -primatology -primatological -primatologist -Primavera -primaveral -Primaveras -Primaveria -prim-behaving -prime -primed -primegilt -primely -prime-ministerial -prime-ministership -prime-ministry -primeness -primer -primero -primerole -primeros -primers -primes -primeur -primeval -primevalism -primevally -primevarous -primeverin -primeverose -primevity -primevous -primevrin -Primghar -primi -primy -Primianist -primices -primigene -primigenial -primigenian -primigenious -primigenous -primigravida -primine -primines -priming -primings -primipara -primiparae -primiparas -primiparity -primiparous -primipilar -primity -primitiae -primitial -primitias -primitive -primitively -primitiveness -primitivenesses -primitives -primitivism -primitivist -primitivistic -primitivity -primitivities -primly -prim-lipped -prim-looking -prim-mannered -primmed -primmer -primmest -primming -prim-mouthed -primness -primnesses -prim-notioned -Primo -primogenetrix -primogenial -primogenital -primogenitary -primogenitive -primogenitor -primogenitors -primogeniture -primogenitureship -primogenous -primomo -primoprime -primoprimitive -primordality -primordia -primordial -primordialism -primordiality -primordially -primordiate -primordium -primos -primosity -primost -primp -primped -primping -primprint -primps -Primrosa -Primrose -primrose-colored -primrosed -primrose-decked -primrose-dotted -primrose-haunted -primrose-yellow -primrose-leaved -primroses -primrose-scented -primrose-spangled -primrose-starred -primrose-sweet -primrosetide -primrosetime -primrose-tinted -primrosy -prims -prim-seeming -primsie -Primula -Primulaceae -primulaceous -Primulales -primulas -primulaverin -primulaveroside -primulic -primuline -Primulinus -Primus -primuses -primwort -prin -Prince -prince-abbot -princeage -prince-angel -prince-bishop -princecraft -princedom -princedoms -prince-duke -prince-elector -prince-general -princehood -Princeite -prince-killing -princekin -princeless -princelet -princely -princelier -princeliest -princelike -princeliness -princeling -princelings -prince-poet -prince-president -prince-priest -prince-primate -prince-protected -prince-proud -princeps -prince-ridden -princes -prince's-feather -princeship -prince's-pine -Princess -princessdom -princesse -princesses -princessly -princesslike -princess's -princess-ship -prince-teacher -Princeton -prince-trodden -Princeville -Princewick -princewood -prince-wood -princicipia -princify -princified -principal -principality -principalities -principality's -principally -principalness -principals -principalship -principate -Principe -Principes -principi -Principia -principial -principiant -principiate -principiation -principium -Principle -principled -principles -principly -principling -principulus -princock -princocks -princod -princox -princoxes -prine -Prineville -Pringle -prink -prinked -prinker -prinkers -prinky -prinking -prinkle -prinks -Prynne -prinos -Prinsburg -print -printability -printable -printableness -printably -printanier -printed -Printer -printerdom -printery -printeries -printerlike -printers -printing -printing-house -printing-in -printing-out -printing-press -printings -printless -printline -printmake -printmaker -printmaking -printout -print-out -printouts -prints -printscript -printshop -printworks -Prinz -prio -Priodon -priodont -Priodontes -prion -prionid -Prionidae -Prioninae -prionine -Prionodesmacea -prionodesmacean -prionodesmaceous -prionodesmatic -Prionodon -prionodont -Prionopinae -prionopine -Prionops -Prionus -Prior -Pryor -prioracy -prioral -priorate -priorates -Priorato -prioress -prioresses -priori -priory -priories -prioristic -prioristically -priorite -priority -priorities -priority's -prioritize -prioritized -prioritizes -prioritizing -priorly -priors -priorship -Pripet -Pripyat -pryproof -Pris -prys -prisable -prisage -prisal -Prisca -priscan -Priscella -Priscian -Priscianist -Priscilla -Priscillian -Priscillianism -Priscillianist -prise -Pryse -prised -prisere -priseres -prises -prisiadka -Prisilla -prising -PRISM -prismal -prismatic -prismatical -prismatically -prismatization -prismatize -prismatoid -prismatoidal -prismed -prismy -prismoid -prismoidal -prismoids -prisms -prism's -prisometer -prison -prisonable -prison-bound -prisonbreak -prison-bred -prison-bursting -prison-caused -prisondom -prisoned -prisoner -prisoners -prisoner's -prison-escaping -prison-free -prisonful -prisonhouse -prison-house -prisoning -prisonlike -prison-made -prison-making -prisonment -prisonous -prisons -prison-taught -priss -prissed -prisses -Prissy -Prissie -prissier -prissies -prissiest -prissily -prissiness -prissinesses -prissing -pristane -pristanes -pristav -pristaw -pristine -pristinely -pristineness -Pristipomatidae -Pristipomidae -Pristis -Pristodus -prytaneum -prytany -Prytanis -prytanize -pritch -Pritchard -Pritchardia -pritchel -Pritchett -prithee -prythee -Prithivi -prittle -prittle-prattle -prius -priv -priv. -privacy -privacies -privacity -privado -privant -privata -Privatdocent -Privatdozent -private -private-enterprise -privateer -privateered -privateering -privateers -privateersman -privately -privateness -privater -privates -privatest -privation -privation-proof -privations -privatism -privatistic -privative -privatively -privativeness -privatization -privatize -privatized -privatizing -privatum -privet -privets -privy -privy-councilship -privier -privies -priviest -priviledge -privilege -privileged -privileger -privileges -privileging -privily -priviness -privy's -privity -privities -Prix -prizable -prize -prizeable -prized -prizefight -prize-fight -prizefighter -prize-fighter -prizefighters -prizefighting -prizefightings -prizefights -prize-giving -prizeholder -prizeman -prizemen -prize-playing -prizer -prizery -prize-ring -prizers -prizes -prizetaker -prize-taking -prizewinner -prizewinners -prizewinning -prize-winning -prizeworthy -prizing -prlate -PRMD -prn -PRO -pro- -proa -Pro-abyssinian -proabolition -proabolitionist -proabortion -proabsolutism -proabsolutist -proabstinence -proacademic -proaccelerin -proacceptance -proach -proacquisition -proacquittal -proacting -proaction -proactive -proactor -proaddition -proadjournment -proadministration -proadmission -proadoption -proadvertising -proadvertizing -proaeresis -proaesthetic -Pro-african -proaggressionist -proagitation -proagon -proagones -proagrarian -proagreement -proagricultural -proagule -proairesis -proairplane -proal -Pro-alabaman -Pro-alaskan -Pro-albanian -Pro-albertan -proalcoholism -Pro-algerian -proalien -Pro-ally -proalliance -Pro-allied -proallotment -Pro-alpine -Pro-alsatian -proalteration -pro-am -proamateur -proambient -proamendment -Pro-american -Pro-americanism -proamnion -proamniotic -proamusement -proanaphora -proanaphoral -proanarchy -proanarchic -proanarchism -Pro-anatolian -proangiosperm -proangiospermic -proangiospermous -Pro-anglican -proanimistic -Pro-annamese -proannexation -proannexationist -proantarctic -proanthropos -proapostolic -proappointment -proapportionment -proappreciation -proappropriation -proapproval -proaquatic -Pro-arab -Pro-arabian -Pro-arabic -proarbitration -proarbitrationist -proarchery -proarctic -Pro-argentina -Pro-argentinian -Pro-arian -proaristocracy -proaristocratic -Pro-aristotelian -Pro-armenian -proarmy -Pro-arminian -proart -pro-art -Proarthri -proas -Pro-asian -Pro-asiatic -proassessment -proassociation -Pro-athanasian -proatheism -proatheist -proatheistic -Pro-athenian -proathletic -Pro-atlantic -proatlas -proattack -proattendance -proauction -proaudience -proaulion -Pro-australian -Pro-austrian -proauthor -proauthority -proautomation -proautomobile -proavian -proaviation -Proavis -proaward -Pro-azorian -prob -prob. -probabiliorism -probabiliorist -probabilism -probabilist -probabilistic -probabilistically -probability -probabilities -probabilize -probabl -probable -probableness -probably -probachelor -Pro-baconian -Pro-bahamian -probal -Pro-balkan -proballoon -proband -probandi -probands -probang -probangs -probanishment -probankruptcy -probant -Pro-baptist -probargaining -probaseball -probasketball -probata -probate -probated -probates -probathing -probatical -probating -probation -probational -probationally -probationary -probationer -probationerhood -probationers -probationership -probationism -probationist -probations -probationship -probative -probatively -probator -probatory -probattle -probattleship -probatum -Pro-bavarian -probe -probeable -Probe-bibel -probed -probeer -Pro-belgian -probenecid -probe-pointed -Prober -Pro-berlin -Pro-berlinian -Pro-bermudian -probers -Proberta -probes -pro-Bessarabian -probetting -Pro-biblic -Pro-biblical -probing -probings -probiology -Pro-byronic -probirth-control -probit -probity -probities -probits -probituminous -Pro-byzantine -problem -problematic -problematical -problematically -problematicness -problematist -problematize -problemdom -problemist -problemistic -problemize -problems -problem's -problemwise -problockade -Pro-boer -Pro-boerism -Pro-bohemian -proboycott -Pro-bolivian -Pro-bolshevik -Pro-bolshevism -Pro-bolshevist -Pro-bonapartean -Pro-bonapartist -probonding -probonus -proborrowing -proboscidal -proboscidate -Proboscidea -proboscidean -proboscideous -proboscides -proboscidial -proboscidian -proboscidiferous -proboscidiform -probosciform -probosciformed -Probosciger -proboscis -proboscises -proboscislike -Pro-bosnian -Pro-bostonian -probouleutic -proboulevard -probowling -proboxing -Pro-brahman -Pro-brazilian -Pro-bryan -probrick -probridge -Pro-british -Pro-britisher -Pro-britishism -Pro-briton -probroadcasting -Pro-buddhist -Pro-buddhistic -probudget -probudgeting -pro-budgeting -probuying -probuilding -Pro-bulgarian -Pro-burman -pro-bus -probusiness -proc -proc. -procaccia -procaccio -procacious -procaciously -procacity -Pro-caesar -Pro-caesarian -procaine -procaines -Pro-caledonian -Pro-californian -Pro-calvinism -Pro-calvinist -Pro-calvinistic -Pro-calvinistically -procambial -procambium -pro-Cambodia -pro-Cameroun -Pro-canadian -procanal -procancellation -Pro-cantabrigian -Pro-cantonese -procapital -procapitalism -procapitalist -procapitalists -procarbazine -Pro-caribbean -procaryote -procaryotic -Pro-carlylean -procarnival -Pro-carolinian -procarp -procarpium -procarps -procarrier -Pro-castilian -procatalectic -procatalepsis -Pro-catalonian -procatarctic -procatarxis -procathedral -pro-cathedral -Pro-cathedralist -procathedrals -Pro-catholic -Pro-catholicism -Pro-caucasian -Procavia -Procaviidae -procbal -procedendo -procedes -procedural -procedurally -procedurals -procedure -procedured -procedures -procedure's -proceduring -proceed -proceeded -proceeder -proceeders -proceeding -proceedings -proceeds -pro-Ceylon -proceleusmatic -Procellaria -procellarian -procellarid -Procellariidae -Procellariiformes -procellariine -Procellarum -procellas -procello -procellose -procellous -Pro-celtic -procensorship -procensure -procentralization -procephalic -procercoid -procere -procereal -procerebral -procerebrum -proceremonial -proceremonialism -proceremonialist -proceres -procerite -procerity -proceritic -procerus -process -processability -processable -processal -processed -processer -processes -processibility -processible -processing -procession -processional -processionalist -processionally -processionals -processionary -processioner -processioning -processionist -processionize -processions -processionwise -processive -processor -processors -processor's -process's -process-server -processual -processus -proces-verbal -proces-verbaux -prochain -procharity -prochein -prochemical -Pro-chicagoan -Pro-chilean -Pro-chinese -prochlorite -prochondral -prochooi -prochoos -Prochora -Prochoras -prochordal -prochorion -prochorionic -prochromosome -prochronic -prochronism -prochronistic -prochronize -prochurch -prochurchian -procidence -procident -procidentia -Pro-cymric -procinct -Procyon -Procyonidae -procyoniform -Procyoniformia -Procyoninae -procyonine -Procious -Pro-cyprian -pro-Cyprus -procity -pro-city -procivic -procivilian -procivism -proclaim -proclaimable -proclaimant -proclaimed -proclaimer -proclaimers -proclaiming -proclaimingly -proclaims -proclamation -proclamations -proclamation's -proclamator -proclamatory -proclassic -proclassical -proclei -proclergy -proclerical -proclericalism -proclimax -procline -proclisis -proclitic -proclive -proclivity -proclivities -proclivity's -proclivitous -proclivous -proclivousness -Proclus -Procne -procnemial -Procoelia -procoelian -procoelous -procoercion -procoercive -procollectivism -procollectivist -procollectivistic -procollegiate -Pro-colombian -procolonial -Pro-colonial -procombat -procombination -procomedy -procommemoration -procomment -procommercial -procommission -procommittee -procommunal -procommunism -procommunist -procommunists -procommunity -procommutation -procompensation -procompetition -procomprise -procompromise -procompulsion -proconcentration -proconcession -proconciliation -procondemnation -Pro-confederate -proconfederationist -proconference -proconfession -proconfessionist -proconfiscation -proconformity -Pro-confucian -pro-Congolese -Pro-congressional -Proconnesian -proconquest -proconscription -proconscriptive -proconservation -proconservationist -proconsolidation -proconstitutional -proconstitutionalism -proconsul -proconsular -proconsulary -proconsularly -proconsulate -proconsulates -proconsuls -proconsulship -proconsulships -proconsultation -Pro-continental -procontinuation -proconvention -proconventional -proconviction -pro-co-operation -Procopius -Procora -procoracoid -procoracoidal -procorporation -Pro-corsican -procosmetic -procosmopolitan -procotols -procotton -procourt -procrastinate -procrastinated -procrastinates -procrastinating -procrastinatingly -procrastination -procrastinations -procrastinative -procrastinatively -procrastinativeness -procrastinator -procrastinatory -procrastinators -procreant -procreate -procreated -procreates -procreating -procreation -procreations -procreative -procreativeness -procreativity -procreator -procreatory -procreators -procreatress -procreatrix -procremation -Pro-cretan -procrypsis -procryptic -procryptically -Procris -procritic -procritique -Pro-croatian -Procrustean -Procrusteanism -Procrusteanize -Procrustes -proctal -proctalgy -proctalgia -proctatresy -proctatresia -proctectasia -proctectomy -Procter -procteurynter -proctitis -Procto -procto- -proctocele -proctocystoplasty -proctocystotomy -proctoclysis -proctocolitis -proctocolonoscopy -proctodaea -proctodaeal -proctodaedaea -proctodaeum -proctodaeums -proctodea -proctodeal -proctodeudea -proctodeum -proctodeums -proctodynia -proctoelytroplastic -proctology -proctologic -proctological -proctologies -proctologist -proctologists -proctoparalysis -proctoplasty -proctoplastic -proctoplegia -proctopolypus -proctoptoma -proctoptosis -Proctor -proctorage -proctoral -proctored -proctorial -proctorially -proctorical -proctoring -proctorization -proctorize -proctorling -proctorrhagia -proctorrhaphy -proctorrhea -proctors -proctorship -Proctorsville -Proctorville -proctoscope -proctoscopes -proctoscopy -proctoscopic -proctoscopically -proctoscopies -proctosigmoidectomy -proctosigmoiditis -proctospasm -proctostenosis -proctostomy -proctotome -proctotomy -proctotresia -proctotrypid -Proctotrypidae -proctotrypoid -Proctotrypoidea -proctovalvotomy -Pro-cuban -proculcate -proculcation -Proculian -procumbent -procurability -procurable -procurableness -procuracy -procuracies -procural -procurals -procurance -procurate -procuration -procurative -procurator -procuratorate -procurator-fiscal -procurator-general -procuratory -procuratorial -procurators -procuratorship -procuratrix -procure -procured -procurement -procurements -procurement's -procurer -procurers -procures -procuress -procuresses -procureur -procuring -procurrent -procursive -procurvation -procurved -proczarist -Pro-czech -pro-Czechoslovakian -prod -prod. -Pro-dalmation -Pro-danish -pro-Darwin -Pro-darwinian -Pro-darwinism -prodatary -prodd -prodded -prodder -prodders -prodding -proddle -prodecoration -prodefault -prodefiance -prodelay -prodelision -prodemocracy -prodemocrat -prodemocratic -Prodenia -pro-Denmark -prodenominational -prodentine -prodeportation -prodespotic -prodespotism -prodialogue -prodigal -prodigalish -prodigalism -prodigality -prodigalities -prodigalize -prodigally -prodigals -prodigy -prodigies -prodigiosity -prodigious -prodigiously -prodigiousness -prodigus -prodisarmament -prodisplay -prodissoconch -prodissolution -prodistribution -prodition -proditor -proditorious -proditoriously -prodivision -prodivorce -Pro-dominican -Pro-dominion -prodomoi -prodomos -prodproof -prodramatic -Pro-dreyfusard -prodroma -prodromal -prodromata -prodromatic -prodromatically -prodrome -prodromes -Prodromia -prodromic -prodromous -prodromus -prods -producal -produce -produceable -produceableness -produced -producement -producent -producer -producers -producership -produces -producibility -producible -producibleness -producing -product -producted -productibility -productible -productid -Productidae -productile -production -productional -productionist -productions -production's -productive -productively -productiveness -productivenesses -productivity -productivities -productoid -productor -productory -productress -products -product's -Productus -Pro-dutch -pro-East -pro-Eastern -proecclesiastical -proeconomy -pro-Ecuador -Pro-ecuadorean -proeducation -proeducational -Pro-egyptian -proegumenal -proelectric -proelectrical -proelectrification -proelectrocution -proelimination -pro-Elizabethan -proem -proembryo -proembryonic -Pro-emersonian -Pro-emersonianism -proemial -proemium -proempire -proempiricism -proempiricist -proemployee -proemployer -proemployment -proemptosis -proems -proenforcement -Pro-english -proenlargement -Pro-entente -proenzym -proenzyme -proepimeron -Pro-episcopal -proepiscopist -proepisternum -proequality -Pro-eskimo -Pro-esperantist -Pro-esperanto -Pro-estonian -proestrus -proethical -Pro-ethiopian -proethnic -proethnically -proetid -Proetidae -proette -proettes -Proetus -Pro-euclidean -Pro-eurasian -Pro-european -Pro-evangelical -proevolution -proevolutionary -proevolutionist -proexamination -proexecutive -proexemption -proexercise -proexperiment -proexperimentation -proexpert -proexporting -proexposure -proextension -proextravagance -Prof -proface -profaculty -profanable -profanableness -profanably -profanation -profanations -profanatory -profanchise -profane -profaned -profanely -profanement -profaneness -profanenesses -profaner -profaners -profanes -profaning -profanism -profanity -profanities -profanity-proof -profanize -Profant -profarmer -profascism -Pro-fascism -profascist -Pro-fascist -Pro-fascisti -profascists -profection -profectional -profectitious -profederation -profeminism -profeminist -profeminists -profer -proferment -profert -profess -professable -professed -professedly -professes -professing -profession -professional -professionalisation -professionalise -professionalised -professionalising -professionalism -professionalist -professionalists -professionality -professionalization -professionalize -professionalized -professionalizes -professionalizing -professionally -professionals -professionist -professionize -professionless -professions -profession's -professive -professively -professor -professorate -professordom -professoress -professorhood -professory -professorial -professorialism -professorially -professoriat -professoriate -professorlike -professorling -professors -professor's -professorship -professorships -proffer -proffered -profferer -profferers -proffering -proffers -Proffitt -profichi -proficience -proficiency -proficiencies -proficient -proficiently -proficientness -profiction -proficuous -proficuously -profile -profiled -profiler -profilers -profiles -profiling -profilist -profilograph -Profilometer -Pro-finnish -profit -profitability -profitable -profitableness -profitably -profit-and-loss -profit-building -profited -profiteer -profiteered -profiteering -profiteers -profiteer's -profiter -profiterole -profiters -profit-yielding -profiting -profitless -profitlessly -profitlessness -profit-making -profitmonger -profitmongering -profit-producing -profitproof -profits -profit-seeking -profitsharing -profit-sharing -profit-taking -profitted -profitter -profitters -profitter's -proflated -proflavine -Pro-flemish -profligacy -profligacies -profligate -profligated -profligately -profligateness -profligates -profligation -proflogger -Pro-florentine -Pro-floridian -profluence -profluent -profluvious -profluvium -profonde -proforeign -pro-form -proforma -profound -profounder -profoundest -profoundly -profoundness -profounds -Pro-france -profraternity -profre -Pro-french -pro-Freud -Pro-freudian -Pro-friesian -Pro-friesic -PROFS -profugate -profulgent -profunda -profundae -profundity -profundities -profuse -profusely -profuseness -profuser -profusion -profusions -profusive -profusively -profusiveness -Prog -Prog. -Pro-gaelic -progambling -progamete -progamic -proganosaur -Proganosauria -progenerate -progeneration -progenerative -progeny -progenies -progenital -progenity -progenitive -progenitiveness -progenitor -progenitorial -progenitors -progenitorship -progenitress -progenitrix -progeniture -Pro-genoan -Pro-gentile -progeotropic -progeotropism -progeria -Pro-german -Pro-germanism -progermination -progestational -progesterone -progestin -progestogen -progged -progger -proggers -progging -pro-Ghana -Progymnasium -progymnosperm -progymnospermic -progymnospermous -progypsy -proglottic -proglottid -proglottidean -proglottides -proglottis -prognathi -prognathy -prognathic -prognathism -prognathous -progne -prognose -prognosed -prognoses -prognosing -prognosis -prognostic -prognosticable -prognostical -prognostically -prognosticate -prognosticated -prognosticates -prognosticating -prognostication -prognostications -prognosticative -prognosticator -prognosticatory -prognosticators -prognostics -progoneate -progospel -Pro-gothic -progovernment -pro-government -prograde -program -programable -programatic -programed -programer -programers -programing -programist -programistic -programma -programmability -programmabilities -programmable -programmar -programmata -programmatic -programmatically -programmatist -programme -programmed -programmer -programmers -programmer's -programmes -programming -programmist -programmng -programs -program's -progravid -Pro-grecian -progrede -progrediency -progredient -pro-Greek -Progreso -progress -progressed -progresser -progresses -progressing -progression -progressional -progressionally -progressionary -progressionism -progressionist -progressions -progression's -progressism -progressist -Progressive -progressively -progressiveness -progressives -progressivism -progressivist -progressivistic -progressivity -progressor -progs -proguardian -Pro-guatemalan -Pro-guianan -Pro-guianese -Pro-guinean -Pro-haitian -Pro-hanoverian -Pro-hapsburg -prohaste -Pro-hawaiian -proheim -Pro-hellenic -prohibit -prohibita -prohibited -prohibiter -prohibiting -Prohibition -prohibitionary -prohibitionism -prohibitionist -prohibitionists -prohibition-proof -prohibitions -prohibition's -prohibitive -prohibitively -prohibitiveness -prohibitor -prohibitory -prohibitorily -prohibits -prohibitum -prohydrotropic -prohydrotropism -Pro-hindu -Pro-hitler -Pro-hitlerism -Pro-hitlerite -Pro-hohenstaufen -Pro-hohenzollern -proholiday -Pro-honduran -prohostility -prohuman -prohumanistic -Pro-hungarian -Pro-yankee -Pro-icelandic -proidealistic -proimmigration -pro-immigrationist -proimmunity -proinclusion -proincrease -proindemnity -Pro-indian -pro-Indonesian -proindustry -proindustrial -proindustrialisation -proindustrialization -pro-infinitive -proinjunction -proinnovationist -proinquiry -proinsurance -prointegration -prointervention -proinvestment -Pro-iranian -pro-Iraq -pro-Iraqi -Pro-irish -Pro-irishism -proirrigation -pro-Israel -pro-Israeli -Pro-italian -pro-Yugoslav -pro-Yugoslavian -projacient -Pro-jacobean -Pro-japanese -Pro-japanism -Pro-javan -Pro-javanese -project -projectable -projected -projectedly -projectile -projectiles -projecting -projectingly -projection -projectional -projectionist -projectionists -projections -projection's -projective -projectively -projectivity -projector -projectors -projector's -projectress -projectrix -projects -projecture -Pro-jeffersonian -projet -projets -Pro-jewish -projicience -projicient -projiciently -pro-Jordan -projournalistic -Pro-judaic -Pro-judaism -projudicial -Pro-kansan -prokaryote -proke -prokeimenon -proker -prokindergarten -proklausis -Prokofieff -Prokofiev -Prokopyevsk -Pro-korean -pro-Koweit -pro-Kuwait -prolabium -prolabor -prolacrosse -prolactin -Pro-lamarckian -prolamin -prolamine -prolamins -prolan -prolans -pro-Laotian -prolapse -prolapsed -prolapses -prolapsing -prolapsion -prolapsus -prolarva -prolarval -prolate -prolately -prolateness -pro-Latin -Pro-latinism -prolation -prolative -prolatively -Pro-latvian -Prole -proleague -Pro-league -proleaguer -Pro-leaguer -pro-Lebanese -prolectite -proleg -prolegate -prolegislative -prolegomena -prolegomenal -prolegomenary -prolegomenist -prolegomenon -prolegomenona -prolegomenous -prolegs -proleniency -prolepses -prolepsis -proleptic -proleptical -proleptically -proleptics -proles -proletaire -proletairism -proletary -proletarian -proletarianise -proletarianised -proletarianising -proletarianism -proletarianization -proletarianize -proletarianly -proletarianness -proletarians -proletariat -proletariate -proletariatism -proletaries -proletarise -proletarised -proletarising -proletarization -proletarize -proletarized -proletarizing -proletcult -proletkult -Pro-lettish -proleucocyte -proleukocyte -prolia -Pro-liberian -pro-Lybian -prolicense -prolicidal -prolicide -proliferant -proliferate -proliferated -proliferates -proliferating -proliferation -proliferations -proliferative -proliferous -proliferously -prolify -prolific -prolificacy -prolifical -prolifically -prolificalness -prolificate -prolificated -prolificating -prolification -prolificy -prolificity -prolificly -prolificness -proligerous -prolyl -prolin -proline -prolines -proliquor -proliterary -Pro-lithuanian -proliturgical -proliturgist -prolix -prolixious -prolixity -prolixly -prolixness -proller -prolocution -prolocutor -prolocutorship -prolocutress -prolocutrix -PROLOG -prologed -prologi -prologing -prologise -prologised -prologising -prologist -prologize -prologized -prologizer -prologizing -prologlike -prologos -prologs -prologue -prologued -prologuelike -prologuer -prologues -prologuing -prologuise -prologuised -prologuiser -prologuising -prologuist -prologuize -prologuized -prologuizer -prologuizing -prologulogi -prologus -prolong -prolongable -prolongableness -prolongably -prolongate -prolongated -prolongating -prolongation -prolongations -prolonge -prolonged -prolonger -prolonges -prolonging -prolongment -prolongs -prolotherapy -prolusion -prolusionize -prolusory -Pro-lutheran -PROM -prom. -Pro-macedonian -promachinery -Promachorma -promachos -Promachus -pro-Madagascan -Pro-magyar -promagisterial -promagistracy -promagistrate -promajority -pro-Malayan -pro-Malaysian -Pro-maltese -Pro-malthusian -promammal -Promammalia -promammalian -pro-man -Pro-manchukuoan -Pro-manchurian -promarriage -Pro-masonic -promatrimonial -promatrimonialist -PROMATS -promaximum -promazine -Prome -Pro-mediterranean -promemorial -promenade -promenaded -promenader -promenaderess -promenaders -promenades -promenade's -promenading -promercantile -promercy -promerger -promeristem -promerit -promeritor -promerops -Promessi -prometacenter -promethazine -Promethea -Promethean -Prometheus -promethium -Pro-methodist -Pro-mexican -promic -promycelia -promycelial -promycelium -promilitary -promilitarism -promilitarist -Promin -promine -prominence -prominences -prominency -prominent -prominently -promines -prominimum -proministry -prominority -promisable -promiscuity -promiscuities -promiscuous -promiscuously -promiscuousness -promiscuousnesses -promise -promise-bound -promise-breach -promise-breaking -promise-crammed -promised -promisee -promisees -promise-fed -promiseful -promise-fulfilling -promise-keeping -promise-led -promiseless -promise-making -promisemonger -promise-performing -promiseproof -promiser -promisers -promises -promising -promisingly -promisingness -promisor -promisors -promiss -promissionary -promissive -promissor -promissory -promissorily -promissvry -promit -promythic -promitosis -promittor -promnesia -promo -promoderation -promoderationist -promodern -pro-modern -promodernist -promodernistic -Pro-mohammedan -pro-Monaco -promonarchy -promonarchic -promonarchical -promonarchicalness -promonarchist -promonarchists -Pro-mongolian -promonopoly -promonopolist -promonopolistic -promontory -promontoried -promontories -promoral -Pro-mormon -Pro-moroccan -promorph -promorphology -promorphological -promorphologically -promorphologist -promos -Pro-moslem -promotability -promotable -promote -promoted -promotement -promoter -promoters -promotes -promoting -promotion -promotional -promotions -promotive -promotiveness -promotor -promotorial -promotress -promotrix -promovable -promoval -promove -promovent -prompt -promptbook -promptbooks -prompted -prompter -prompters -promptest -prompting -promptings -promptitude -promptive -promptly -promptness -Prompton -promptorium -promptress -prompts -promptuary -prompture -proms -promulgate -promulgated -promulgates -promulgating -promulgation -promulgations -promulgator -promulgatory -promulgators -promulge -promulged -promulger -promulges -promulging -promuscidate -promuscis -pro-Muslem -pro-Muslim -pron -pron. -pronaoi -pronaos -pronate -pronated -pronates -pronating -pronation -pronational -pronationalism -pronationalist -pronationalistic -pronative -pronatoflexor -pronator -pronatores -pronators -Pronaus -pronaval -pronavy -prone -Pro-neapolitan -pronegotiation -pronegro -pro-Negro -pronegroism -pronely -proneness -pronenesses -pronephric -pronephridiostome -pronephron -pronephros -Pro-netherlandian -proneur -prong -prongbuck -pronged -pronger -pronghorn -prong-horned -pronghorns -prongy -pronging -pronglike -prongs -pronic -Pro-nicaraguan -pro-Nigerian -pronymph -pronymphal -pronity -Pronoea -pronograde -pronomial -pronominal -pronominalize -pronominally -pronomination -prononce -Pro-nordic -Pro-norman -pro-North -pro-Northern -Pro-norwegian -pronota -pronotal -pronotum -pronoun -pronounal -pronounce -pronounceable -pronounceableness -pronounced -pronouncedly -pronouncedness -pronouncement -pronouncements -pronouncement's -pronounceness -pronouncer -pronounces -pronouncing -pronouns -pronoun's -pronpl -Pronty -pronto -Prontosil -Pronuba -pronubial -pronuclear -pronuclei -pronucleus -pronumber -pronunciability -pronunciable -pronuncial -pronunciamento -pronunciamentos -pronunciation -pronunciational -pronunciations -pronunciation's -pronunciative -pronunciator -pronunciatory -proo -pro-observance -pro-oceanic -proode -pro-ode -prooemiac -prooemion -prooemium -pro-oestrys -pro-oestrous -pro-oestrum -pro-oestrus -proof -proof-correct -proofed -proofer -proofers -proofful -proofy -proofing -proofless -prooflessly -prooflike -proofness -proof-proof -proofread -proofreaded -proofreader -proofreaders -proofreading -proofreads -proofroom -proofs -proof's -proof-spirit -pro-opera -pro-operation -pro-opic -pro-opium -Pro-oriental -pro-orthodox -pro-orthodoxy -pro-orthodoxical -pro-ostracal -pro-ostracum -pro-otic -prop -prop- -prop. -propacifism -propacifist -propadiene -propaedeutic -propaedeutical -propaedeutics -propagability -propagable -propagableness -propagand -Propaganda -propaganda-proof -propagandas -propagandic -propagandise -propagandised -propagandising -propagandism -propagandist -propagandistic -propagandistically -propagandists -propagandize -propagandized -propagandizes -propagandizing -propagate -propagated -propagates -propagating -propagation -propagational -propagations -propagative -propagator -propagatory -propagators -propagatress -propagines -propago -propagula -propagule -propagulla -propagulum -propayment -PROPAL -propale -propalinal -pro-Panama -Pro-panamanian -propane -propanedicarboxylic -propanedioic -propanediol -propanes -propanol -propanone -propapist -pro-Paraguay -Pro-paraguayan -proparasceve -proparent -propargyl -propargylic -Proparia -proparian -proparliamental -proparoxytone -proparoxytonic -proparticipation -propassion -propatagial -propatagian -propatagium -propatriotic -propatriotism -propatronage -propel -propellable -propellant -propellants -propelled -propellent -propellents -propeller -propellers -propeller's -propelling -propellor -propelment -propels -propend -propended -propendent -propending -propends -propene -propenes -propenyl -propenylic -propenoic -propenol -propenols -propense -propensely -propenseness -propension -propensity -propensities -propensitude -proper -properdin -properer -properest -properispome -properispomenon -properitoneal -properly -properness -propers -Pro-persian -property -propertied -properties -propertyless -property-owning -propertyship -Propertius -Pro-peruvian -propessimism -propessimist -prophage -prophages -prophase -prophases -prophasic -prophasis -prophecy -prophecies -prophecymonger -prophecy's -prophesy -prophesiable -prophesied -prophesier -prophesiers -prophesies -prophesying -Prophet -prophet-bard -prophetess -prophetesses -prophet-flower -prophethood -prophetic -prophetical -propheticality -prophetically -propheticalness -propheticism -propheticly -prophetico-historical -Prophetico-messianic -prophetism -prophetize -prophet-king -prophetless -prophetlike -prophet-painter -prophet-poet -prophet-preacher -prophetry -Prophets -prophet's -prophetship -prophet-statesman -Prophetstown -prophylactic -prophylactical -prophylactically -prophylactics -prophylactodontia -prophylactodontist -prophylaxes -prophylaxy -prophylaxis -Pro-philippine -prophyll -prophyllum -prophilosophical -prophloem -prophoric -prophototropic -prophototropism -propygidium -propyl -propyla -propylacetic -propylaea -propylaeum -propylalaea -propylamine -propylation -propylene -propylhexedrine -propylic -propylidene -propylite -propylitic -propylitization -propylon -propyls -propination -propine -propyne -propined -propines -propining -propinoic -propynoic -propinquant -propinque -propinquitatis -propinquity -propinquities -propinquous -propio -propio- -propiolaldehyde -propiolate -propiolic -propionaldehyde -propionate -propione -propionibacteria -Propionibacterieae -Propionibacterium -propionic -propionyl -propionitril -propionitrile -Propithecus -propitiable -propitial -propitiate -propitiated -propitiates -propitiating -propitiatingly -propitiation -propitiations -propitiative -propitiator -propitiatory -propitiatorily -propitious -propitiously -propitiousness -propjet -propjets -proplasm -proplasma -proplastic -proplastid -propless -propleural -propleuron -proplex -proplexus -Propliopithecus -propman -propmen -propmistress -propmistresses -propodeal -propodeon -propodeum -propodial -propodiale -propodite -propoditic -propodium -propoganda -Pro-polynesian -propolis -propolises -Pro-polish -propolitical -propolitics -propolization -propolize -propoma -propomata -propone -proponed -proponement -proponent -proponents -proponent's -proponer -propones -proponing -propons -Propontic -Propontis -propooling -propopery -proport -proportion -proportionability -proportionable -proportionableness -proportionably -proportional -proportionalism -proportionality -proportionally -proportionate -proportionated -proportionately -proportionateness -proportionating -proportioned -proportioner -proportioning -proportionless -proportionment -proportions -Pro-portuguese -propos -proposable -proposal -proposals -proposal's -proposant -propose -proposed -proposedly -proposer -proposers -proposes -proposing -propositi -propositio -proposition -propositional -propositionally -propositioned -propositioning -propositionize -propositions -propositus -propositusti -proposterously -propound -propounded -propounder -propounders -propounding -propoundment -propounds -propoxy -propoxyphene -proppage -propped -propper -propping -propr -propr. -propraetor -propraetorial -propraetorian -propranolol -proprecedent -pro-pre-existentiary -Pro-presbyterian -propretor -propretorial -propretorian -propria -propriation -propriatory -proprietage -proprietary -proprietarian -proprietariat -proprietaries -proprietarily -proprietatis -propriety -proprieties -proprietor -proprietory -proprietorial -proprietorially -proprietors -proprietor's -proprietorship -proprietorships -proprietous -proprietress -proprietresses -proprietrix -proprioception -proprioceptive -proprioceptor -propriospinal -proprium -proprivilege -proproctor -pro-proctor -proprofit -Pro-protestant -proprovincial -proprovost -Pro-prussian -props -propter -propterygial -propterygium -proptosed -proptoses -proptosis -propublication -propublicity -propugn -propugnacled -propugnaculum -propugnation -propugnator -propugner -propulsation -propulsatory -propulse -propulsion -propulsions -propulsion's -propulsity -propulsive -propulsor -propulsory -propunishment -propupa -propupal -propurchase -Propus -prop-wash -propwood -proquaestor -Pro-quaker -proracing -prorailroad -prorata -pro-rata -proratable -prorate -pro-rate -prorated -prorater -prorates -prorating -proration -prore -proreader -prorealism -prorealist -prorealistic -proreality -prorean -prorebate -prorebel -prorecall -proreciprocation -prorecognition -proreconciliation -prorector -pro-rector -prorectorate -proredemption -proreduction -proreferendum -proreform -proreformist -prorefugee -proregent -prorelease -Pro-renaissance -Proreptilia -proreptilian -proreption -prorepublican -proresearch -proreservationist -proresignation -prorestoration -prorestriction -prorevision -prorevisionist -prorevolution -prorevolutionary -prorevolutionist -prorex -pro-rex -prorhinal -Prorhipidoglossomorpha -proritual -proritualistic -prorogate -prorogation -prorogations -prorogator -prorogue -prorogued -proroguer -prorogues -proroguing -proroyal -proroyalty -Pro-roman -proromance -proromantic -proromanticism -prorrhesis -Prorsa -prorsad -prorsal -Pro-rumanian -prorump -proruption -Pro-russian -Pros -pros- -pro's -pros. -prosabbath -prosabbatical -prosacral -prosaic -prosaical -prosaically -prosaicalness -prosaicism -prosaicness -prosaism -prosaisms -prosaist -prosaists -prosal -Pro-salvadoran -Pro-samoan -prosapy -prosar -Pro-sardinian -Prosarthri -prosateur -Pro-scandinavian -proscapula -proscapular -proscenia -proscenium -prosceniums -proscholastic -proscholasticism -proscholium -proschool -proscience -proscientific -proscind -proscynemata -prosciutto -Prosclystius -proscolecine -proscolex -proscolices -proscribable -proscribe -proscribed -proscriber -proscribes -proscribing -proscript -proscription -proscriptional -proscriptionist -proscriptions -proscriptive -proscriptively -proscriptiveness -Pro-scriptural -pro-Scripture -proscutellar -proscutellum -prose -prosecrecy -prosecretin -prosect -prosected -prosecting -prosection -prosector -prosectorial -prosectorium -prosectorship -prosects -prosecutable -prosecute -prosecuted -prosecutes -prosecuting -prosecution -prosecution-proof -prosecutions -prosecutive -prosecutor -prosecutory -prosecutorial -prosecutors -prosecutrices -prosecutrix -prosecutrixes -prosed -proseity -Prosek -proselenic -prosely -proselike -proselyte -proselyted -proselyter -proselytes -proselytical -proselyting -proselytingly -proselytisation -proselytise -proselytised -proselytiser -proselytising -proselytism -proselytist -proselytistic -proselytization -proselytize -proselytized -proselytizer -proselytizers -proselytizes -proselytizing -proseman -proseminar -proseminary -proseminate -prosemination -Pro-semite -Pro-semitism -prosencephalic -prosencephalon -prosenchyma -prosenchymas -prosenchymata -prosenchymatous -proseneschal -prosequendum -prosequi -prosequitur -proser -Pro-serb -Pro-serbian -Proserpina -Proserpinaca -Proserpine -prosers -proses -prosethmoid -proseucha -proseuche -Pro-shakespearian -prosy -Pro-siamese -Pro-sicilian -prosier -prosiest -prosify -prosification -prosifier -prosily -prosiliency -prosilient -prosiliently -prosyllogism -prosilverite -Prosimiae -prosimian -prosyndicalism -prosyndicalist -prosiness -prosing -prosingly -prosiphon -prosiphonal -prosiphonate -Pro-syrian -prosish -prosist -prosit -pro-skin -proskomide -proslambanomenos -Pro-slav -proslave -proslaver -proslavery -proslaveryism -Pro-slavic -Pro-slavonic -proslyted -proslyting -prosneusis -proso -prosobranch -Prosobranchia -Prosobranchiata -prosobranchiate -prosocele -prosocoele -prosodal -prosode -prosodemic -prosodetic -prosody -prosodiac -prosodiacal -prosodiacally -prosodial -prosodially -prosodian -prosodic -prosodical -prosodically -prosodics -prosodies -prosodion -prosodist -prosodus -prosogaster -prosogyrate -prosogyrous -prosoma -prosomal -pro-Somalia -prosomas -prosomatic -prosonomasia -prosopalgia -prosopalgic -prosopantritis -prosopectasia -prosophist -prosopic -prosopically -prosopyl -prosopyle -Prosopis -prosopite -Prosopium -prosoplasia -prosopography -prosopographical -prosopolepsy -prosopon -prosoponeuralgia -prosopoplegia -prosopoplegic -prosopopoeia -prosopopoeial -prosoposchisis -prosopospasm -prosopotocia -prosorus -prosos -pro-South -Pro-southern -Pro-soviet -pro-Spain -Pro-spanish -Pro-spartan -prospect -prospected -prospecting -prospection -prospections -prospection's -prospective -prospective-glass -prospectively -prospectiveness -prospectives -prospectless -prospector -prospectors -prospector's -prospects -prospectus -prospectuses -prospectusless -prospeculation -Prosper -prosperation -prospered -prosperer -prospering -Prosperity -prosperities -prosperity-proof -Prospero -prosperous -prosperously -prosperousness -prospers -Prosperus -prosphysis -prosphora -prosphoron -prospice -prospicience -prosporangium -prosport -pross -Prosser -prosses -prossy -prossie -prossies -prosstoa -prost -prostades -prostaglandin -prostas -prostasis -prostatauxe -prostate -pro-state -prostatectomy -prostatectomies -prostatelcosis -prostates -prostatic -prostaticovesical -prostatism -prostatitic -prostatitis -prostatocystitis -prostatocystotomy -prostatodynia -prostatolith -prostatomegaly -prostatometer -prostatomyomectomy -prostatorrhea -prostatorrhoea -prostatotomy -prostatovesical -prostatovesiculectomy -prostatovesiculitis -prostemmate -prostemmatic -prostern -prosterna -prosternal -prosternate -prosternum -prosternums -prostheca -prosthenic -prostheses -prosthesis -prosthetic -prosthetically -prosthetics -prosthetist -prosthion -prosthionic -prosthodontia -prosthodontic -prosthodontics -prosthodontist -prostie -prosties -Prostigmin -prostyle -prostyles -prostylos -prostitute -prostituted -prostitutely -prostitutes -prostituting -prostitution -prostitutions -prostitutor -prostoa -prostomia -prostomial -prostomiate -prostomium -prostomiumia -prostoon -prostrate -prostrated -prostrates -prostrating -prostration -prostrations -prostrative -prostrator -prostrike -pro-strike -prosubmission -prosubscription -prosubstantive -prosubstitution -Pro-sudanese -prosuffrage -Pro-sumatran -prosupervision -prosupport -prosurgical -prosurrender -pro-Sweden -Pro-swedish -Pro-swiss -pro-Switzerland -Prot -prot- -Prot. -protactic -protactinium -protagon -protagonism -protagonist -protagonists -Protagoras -Protagorean -Protagoreanism -protalbumose -protamin -protamine -protamins -protandry -protandric -protandrism -protandrous -protandrously -protanomal -protanomaly -protanomalous -protanope -protanopia -protanopic -protargentum -protargin -Protargol -protariff -protarsal -protarsus -protases -protasis -Pro-tasmanian -protaspis -protatic -protatically -protax -protaxation -protaxial -protaxis -prote -prote- -Protea -Proteaceae -proteaceous -protead -protean -proteanly -proteans -proteanwise -proteas -protease -proteases -protechnical -protect -protectable -protectant -protected -protectee -protectible -protecting -protectingly -protectinglyrmal -protectingness -Protection -protectional -protectionate -protectionism -protectionist -protectionists -protectionize -protections -protection's -protectionship -protective -protectively -protectiveness -Protectograph -Protector -protectoral -protectorate -protectorates -protectory -protectorial -protectorian -protectories -protectorless -protectors -protector's -protectorship -protectress -protectresses -protectrix -protects -protege -protegee -protegees -proteges -protege's -protegulum -protei -proteic -proteid -Proteida -Proteidae -proteide -proteidean -proteides -proteidogenous -proteids -proteiform -protein -proteinaceous -proteinase -proteinate -protein-free -proteinic -proteinochromogen -proteinous -proteinphobia -proteins -protein's -proteinuria -proteinuric -PROTEL -Proteles -Protelidae -Protelytroptera -protelytropteran -protelytropteron -protelytropterous -Protem -protemperance -protempirical -protemporaneous -protend -protended -protending -protends -protense -protension -protensity -protensive -protensively -proteoclastic -proteogenous -proteolipide -proteolysis -proteolytic -proteopectic -proteopexy -proteopexic -proteopexis -proteosaurid -Proteosauridae -Proteosaurus -proteose -proteoses -Proteosoma -proteosomal -proteosome -proteosuria -protephemeroid -Protephemeroidea -proterandry -proterandric -proterandrous -proterandrously -proterandrousness -proteranthy -proteranthous -protero- -proterobase -proterogyny -proterogynous -proteroglyph -Proteroglypha -proteroglyphic -proteroglyphous -proterothesis -proterotype -Proterozoic -proterve -protervity -Protesilaus -protest -protestable -protestancy -Protestant -Protestantish -Protestantishly -Protestantism -Protestantize -Protestantly -Protestantlike -protestants -protestation -protestations -protestator -protestatory -protested -protester -protesters -protesting -protestingly -protestive -protestor -protestors -protestor's -protests -protetrarch -Proteus -Pro-teuton -Pro-teutonic -Pro-teutonism -protevangel -protevangelion -protevangelium -protext -prothalamia -prothalamion -prothalamium -prothalamiumia -prothalli -prothallia -prothallial -prothallic -prothalline -prothallium -prothalloid -prothallus -protheatrical -protheca -protheses -prothesis -prothetely -prothetelic -prothetic -prothetical -prothetically -prothyl -prothysteron -prothmia -Prothoenor -prothonotary -prothonotarial -prothonotariat -prothonotaries -prothonotaryship -prothoraces -prothoracic -prothorax -prothoraxes -prothrift -prothrombin -prothrombogen -protid -protide -protyl -protyle -protyles -Protylopus -protyls -protiodide -protype -Pro-tyrolese -protist -Protista -protistan -protistic -protistology -protistological -protistologist -protiston -protists -Protium -protiums -Protivin -proto -proto- -protoactinium -protoalbumose -protoamphibian -protoanthropic -protoapostate -Proto-apostolic -Proto-arabic -protoarchitect -Proto-aryan -Proto-armenian -Protoascales -Protoascomycetes -Proto-attic -Proto-australian -Proto-australoid -Proto-babylonian -protobacco -Protobasidii -Protobasidiomycetes -protobasidiomycetous -protobasidium -Proto-berber -protobishop -protoblast -protoblastic -protoblattoid -Protoblattoidea -Protobranchia -Protobranchiata -protobranchiate -protocalcium -protocanonical -Protocaris -protocaseose -protocatechualdehyde -protocatechuic -Proto-caucasic -Proto-celtic -Protoceras -Protoceratidae -Protoceratops -protocercal -protocerebral -protocerebrum -Proto-chaldaic -protochemist -protochemistry -protochloride -protochlorophyll -Protochorda -Protochordata -protochordate -protochromium -protochronicler -protocitizen -protoclastic -protocneme -Protococcaceae -protococcaceous -protococcal -Protococcales -protococcoid -Protococcus -protocol -protocolar -protocolary -protocoled -Protocoleoptera -protocoleopteran -protocoleopteron -protocoleopterous -protocoling -protocolist -protocolization -protocolize -protocolled -protocolling -protocols -protocol's -protoconch -protoconchal -protocone -protoconid -protoconule -protoconulid -protocopper -Proto-corinthian -protocorm -protodeacon -protoderm -protodermal -protodevil -protodynastic -Protodonata -protodonatan -protodonate -protodont -Protodonta -Proto-doric -protodramatic -Proto-egyptian -Proto-elamite -protoelastose -protoepiphyte -Proto-etruscan -Proto-european -protoforaminifer -protoforester -protogalaxy -protogaster -protogelatose -protogenal -Protogenea -protogenes -protogenesis -protogenetic -Protogenia -protogenic -protogenist -Protogeometric -Proto-geometric -Proto-Germanic -protogine -protogyny -protogynous -protoglobulose -protogod -protogonous -protogospel -Proto-gothonic -protograph -Proto-greek -Proto-hattic -Proto-hellenic -protohematoblast -Protohemiptera -protohemipteran -protohemipteron -protohemipterous -protoheresiarch -Protohydra -protohydrogen -Protohymenoptera -protohymenopteran -protohymenopteron -protohymenopterous -Protohippus -protohistory -protohistorian -protohistoric -Proto-hittite -protohomo -protohuman -Proto-indic -Proto-Indo-European -Proto-ionic -protoypes -protoiron -Proto-Italic -Proto-khattish -protolanguage -protoleration -protoleucocyte -protoleukocyte -protolithic -protoliturgic -protolog -protologist -protoloph -protoma -protomagister -protomagnate -protomagnesium -protomala -Proto-malay -Proto-malayan -protomalal -protomalar -protomammal -protomammalian -protomanganese -Proto-mark -protomartyr -Protomastigida -Proto-matthew -protome -Proto-mede -protomeristem -protomerite -protomeritic -protometal -protometallic -protometals -protometaphrast -Proto-mycenean -Protomycetales -Protominobacter -protomyosinose -Protomonadina -Proto-mongol -protomonostelic -protomorph -protomorphic -Proton -protonate -protonated -protonation -protone -protonegroid -protonema -protonemal -protonemata -protonematal -protonematoid -protoneme -Protonemertini -protonephridial -protonephridium -protonephros -protoneuron -protoneurone -protoneutron -protonic -protonickel -protonym -protonymph -protonymphal -protonitrate -Proto-Norse -protonotary -protonotater -protonotion -protonotions -protons -proton's -proton-synchrotron -protopapas -protopappas -protoparent -protopathy -protopathia -protopathic -protopatriarchal -protopatrician -protopattern -protopectin -protopectinase -protopepsia -Protoperlaria -protoperlarian -protophyll -protophilosophic -Protophyta -protophyte -protophytic -protophloem -Proto-phoenician -protopin -protopine -protopyramid -protoplanet -protoplasm -protoplasma -protoplasmal -protoplasmatic -protoplasmic -protoplasms -protoplast -protoplastic -protopod -protopodial -protopodite -protopoditic -protopods -protopoetic -Proto-polynesian -protopope -protoporphyrin -protopragmatic -protopresbyter -protopresbytery -protoprism -protoproteose -protoprotestant -protopteran -Protopteridae -protopteridophyte -protopterous -Protopterus -protore -protorebel -protoreligious -Proto-renaissance -protoreptilian -Protorohippus -protorosaur -Protorosauria -protorosaurian -Protorosauridae -protorosauroid -Protorosaurus -Protorthoptera -protorthopteran -protorthopteron -protorthopterous -protosalt -protosaurian -protoscientific -Protoselachii -Protosemitic -Proto-semitic -protosilicate -protosilicon -protosinner -protosyntonose -Protosiphon -Protosiphonaceae -protosiphonaceous -protosocial -protosolution -Proto-solutrean -protospasm -Protosphargis -Protospondyli -protospore -protostar -Protostega -Protostegidae -protostele -protostelic -protostome -protostrontium -protosulphate -protosulphide -prototaxites -Proto-teutonic -prototheca -protothecal -prototheme -protothere -Prototheria -prototherian -prototypal -prototype -prototyped -prototypes -prototypic -prototypical -prototypically -prototyping -prototypographer -prototyrant -prototitanium -Prototracheata -prototraitor -prototroch -prototrochal -prototroph -prototrophy -prototrophic -protovanadium -protoveratrine -protovertebra -protovertebral -protovestiary -protovillain -protovum -protoxid -protoxide -protoxidize -protoxidized -protoxids -protoxylem -Protozoa -protozoacidal -protozoacide -protozoal -protozoan -protozoans -protozoea -protozoean -protozoiasis -protozoic -protozoology -protozoological -protozoologist -protozoon -protozoonal -protozzoa -Protracheata -protracheate -protract -protracted -protractedly -protractedness -protracter -protractible -protractile -protractility -protracting -protraction -protractive -protractor -protractors -protracts -protrade -protradition -protraditional -protragedy -protragical -protragie -protransfer -protranslation -protransubstantiation -protravel -protreasurer -protreaty -Protremata -protreptic -protreptical -protriaene -Pro-tripolitan -protropical -protrudable -protrude -protruded -protrudent -protrudes -protruding -protrusible -protrusile -protrusility -protrusion -protrusions -protrusion's -protrusive -protrusively -protrusiveness -protthalli -protuberance -protuberances -protuberancy -protuberancies -protuberant -protuberantial -protuberantly -protuberantness -protuberate -protuberated -protuberating -protuberosity -protuberous -Pro-tunisian -Protura -proturan -Pro-turk -pro-Turkey -Pro-turkish -protutor -protutory -Proud -proud-blind -proud-blooded -proud-crested -prouder -proudest -proud-exulting -Proudfoot -proudful -proud-glancing -proudhearted -proud-hearted -Proudhon -proudish -proudishly -proudly -proudling -proud-looking -Proudlove -Proudman -proud-minded -proud-mindedness -proudness -proud-paced -proud-pillared -proud-prancing -proud-quivered -proud-spirited -proud-stomached -Pro-ukrainian -Pro-ulsterite -Proulx -prouniformity -prounion -prounionism -prounionist -Pro-unitarian -prouniversity -Pro-uruguayan -Proust -Proustian -proustite -Prout -Prouty -Prov -Prov. -provability -provable -provableness -provably -provaccination -provaccine -provaccinist -provand -provant -provascular -Provature -prove -provect -provection -proved -proveditor -proveditore -provedly -provedor -provedore -proven -Provenal -provenance -provenances -Provencal -Provencale -Provencalize -Provence -Provencial -provend -provender -provenders -provene -Pro-venetian -Pro-venezuelan -provenience -provenient -provenly -provent -proventricular -proventricule -proventriculi -proventriculus -prover -proverb -proverbed -proverbial -proverbialism -proverbialist -proverbialize -proverbially -proverbic -proverbing -proverbiology -proverbiologist -proverbize -proverblike -Proverbs -proverb's -provers -proves -proviant -provicar -provicariate -provice-chancellor -pro-vice-chancellor -providable -providance -provide -provided -Providence -providences -provident -providential -providentialism -providentially -providently -providentness -provider -providers -provides -providing -providore -providoring -pro-Vietnamese -province -provinces -province's -Provincetown -provincial -provincialate -provincialism -provincialisms -provincialist -provinciality -provincialities -provincialization -provincialize -provincially -provincialship -provinciate -provinculum -provine -proving -provingly -proviral -Pro-virginian -provirus -proviruses -provision -Provisional -provisionality -provisionally -provisionalness -provisionary -provisioned -provisioner -provisioneress -provisioning -provisionless -provisionment -provisions -provisive -proviso -provisoes -provisor -provisory -provisorily -provisorship -provisos -provitamin -provivisection -provivisectionist -Provo -provocant -provocateur -provocateurs -provocation -provocational -provocations -provocative -provocatively -provocativeness -provocator -provocatory -provokable -provoke -provoked -provokee -provoker -provokers -provokes -provoking -provokingly -provokingness -provola -Provolone -provolunteering -provoquant -provost -provostal -provostess -provost-marshal -provostorial -provostry -provosts -provostship -prow -prowar -prowarden -prowaterpower -prowed -Prowel -Pro-welsh -prower -prowersite -prowess -prowessed -prowesses -prowessful -prowest -pro-West -Pro-western -pro-Westerner -prowfish -prowfishes -Pro-whig -prowl -prowled -prowler -prowlers -prowling -prowlingly -prowls -prows -prow's -prox -prox. -proxemic -proxemics -proxenet -proxenete -proxenetism -proxeny -proxenos -proxenus -proxy -proxically -proxied -proxies -proxying -Proxima -proximad -proximal -proximally -proximate -proximately -proximateness -proximation -proxime -proximity -proximities -proximo -proximobuccal -proximolabial -proximolingual -proxyship -proxysm -prozygapophysis -prozymite -Pro-zionism -Pro-zionist -prozone -prozoning -prp -PRS -prs. -PRTC -Pru -Pruchno -Prud -prude -prudely -prudelike -Pruden -Prudence -prudences -prudent -prudential -prudentialism -prudentialist -prudentiality -prudentially -prudentialness -Prudentius -prudently -Prudenville -prudery -pruderies -prudes -Prudhoe -prudhomme -Prud'hon -Prudi -Prudy -Prudie -prudish -prudishly -prudishness -prudist -prudity -Prue -Pruett -pruh -pruigo -pruinate -pruinescence -pruinose -pruinous -Pruitt -prulaurasin -prunability -prunable -prunableness -prunably -Prunaceae -prunase -prunasin -prune -pruned -prunell -Prunella -prunellas -prunelle -prunelles -Prunellidae -prunello -prunellos -pruner -pruners -prunes -prunetin -prunetol -pruniferous -pruniform -pruning -prunitrin -prunt -prunted -Prunus -prurience -pruriency -prurient -pruriently -pruriginous -prurigo -prurigos -pruriousness -pruritic -pruritus -prurituses -Prus -Prus. -prusiano -Pruss -Prussia -Prussian -prussianisation -prussianise -prussianised -prussianiser -prussianising -Prussianism -Prussianization -Prussianize -prussianized -Prussianizer -prussianizing -prussians -prussiate -prussic -Prussify -Prussification -prussin -prussine -Prut -pruta -prutah -prutenic -Pruter -Pruth -prutot -prutoth -Prvert -Przemy -Przywara -PS -p's -Ps. -PSA -psalis -psalloid -psalm -psalmbook -psalmed -psalmy -psalmic -psalming -psalmist -psalmister -psalmistry -psalmists -psalmless -psalmody -psalmodial -psalmodic -psalmodical -psalmodies -psalmodist -psalmodize -psalmograph -psalmographer -psalmography -Psalms -psalm's -psaloid -Psalter -psalterer -psaltery -psalteria -psalterial -psalterian -psalteries -psalterion -psalterist -psalterium -psalters -psaltes -psalteteria -psaltress -psaltry -psaltries -Psamathe -psammead -psammite -psammites -psammitic -psammo- -psammocarcinoma -psammocharid -Psammocharidae -psammogenous -psammolithic -psammology -psammologist -psammoma -psammon -psammons -psammophile -psammophilous -Psammophis -psammophyte -psammophytic -psammosarcoma -psammosere -psammotherapy -psammous -PSAP -psarolite -Psaronius -PSAT -PSC -pschent -pschents -PSDC -PSDN -PSDS -PSE -psec -Psedera -Pselaphidae -Pselaphus -psellism -psellismus -psend -psephism -psephisma -psephite -psephites -psephitic -psephology -psephological -psephologist -psephomancy -Psephurus -Psetta -pseud -pseud- -pseud. -pseudaconin -pseudaconine -pseudaconitine -pseudacusis -pseudalveolar -pseudambulacral -pseudambulacrum -pseudamoeboid -pseudamphora -pseudamphorae -pseudandry -pseudangina -pseudankylosis -pseudaphia -pseudaposematic -pseudapospory -pseudaposporous -pseudapostle -pseudarachnidan -pseudarthrosis -pseudataxic -pseudatoll -pseudaxine -pseudaxis -Pseudechis -pseudelephant -pseudelytron -pseudelminth -pseudembryo -pseudembryonic -pseudencephalic -pseudencephalus -pseudepigraph -Pseudepigrapha -pseudepigraphal -pseudepigraphy -pseudepigraphic -pseudepigraphical -pseudepigraphous -pseudepiploic -pseudepiploon -pseudepiscopacy -pseudepiscopy -pseudepisematic -pseudesthesia -pseudhaemal -pseudhalteres -pseudhemal -pseudimaginal -pseudimago -pseudisodomic -pseudisodomum -pseudo -pseudo- -pseudoacaccia -pseudoacacia -pseudoacademic -pseudoacademical -pseudoacademically -pseudoaccidental -pseudoaccidentally -pseudoacid -pseudoaconitine -pseudoacquaintance -pseudoacromegaly -pseudoadiabatic -pseudoaesthetic -pseudoaesthetically -pseudoaffectionate -pseudoaffectionately -Pseudo-african -pseudoaggressive -pseudoaggressively -pseudoalkaloid -pseudoallegoristic -pseudoallele -pseudoallelic -pseudoallelism -pseudoalum -pseudoalveolar -pseudoamateurish -pseudoamateurishly -pseudoamateurism -pseudoamatory -pseudoamatorial -pseudoambidextrous -pseudoambidextrously -pseudoameboid -pseudo-American -pseudoanachronistic -pseudoanachronistical -pseudoanaphylactic -pseudoanaphylaxis -pseudoanarchistic -pseudoanatomic -pseudoanatomical -pseudoanatomically -pseudoancestral -pseudoancestrally -pseudoanemia -pseudoanemic -pseudoangelic -pseudoangelical -pseudoangelically -pseudoangina -Pseudo-angle -pseudoangular -pseudoangularly -pseudoankylosis -pseudoanthorine -pseudoanthropoid -pseudoanthropology -pseudoanthropological -pseudoantique -pseudoapologetic -pseudoapologetically -pseudoapoplectic -pseudoapoplectical -pseudoapoplectically -pseudoapoplexy -pseudoappendicitis -pseudoapplicative -pseudoapprehensive -pseudoapprehensively -pseudoaquatic -pseudoarchaic -pseudoarchaically -pseudoarchaism -pseudoarchaist -Pseudo-areopagite -pseudo-Argentinean -Pseudo-argentinian -Pseudo-aryan -pseudoaristocratic -pseudoaristocratical -pseudoaristocratically -pseudo-Aristotelian -pseudoarthrosis -pseudoarticulate -pseudoarticulately -pseudoarticulation -pseudoartistic -pseudoartistically -pseudoascetic -pseudoascetical -pseudoascetically -pseudoasymmetry -pseudoasymmetric -pseudoasymmetrical -pseudoasymmetrically -pseudoassertive -pseudoassertively -pseudo-Assyrian -pseudoassociational -pseudoastringent -pseudoataxia -Pseudo-australian -Pseudo-austrian -Pseudo-babylonian -pseudobacterium -pseudobankrupt -pseudobaptismal -Pseudo-baptist -pseudobasidium -pseudobchia -Pseudo-belgian -pseudobenefactory -pseudobenevolent -pseudobenevolently -pseudobenthonic -pseudobenthos -pseudobia -pseudobinary -pseudobiographic -pseudobiographical -pseudobiographically -pseudobiological -pseudobiologically -pseudoblepsia -pseudoblepsis -Pseudo-bohemian -pseudo-Bolivian -pseudobrachia -pseudobrachial -pseudobrachium -Pseudo-brahman -pseudobranch -pseudobranchia -pseudobranchial -pseudobranchiate -Pseudobranchus -Pseudo-brazilian -pseudobrookite -pseudobrotherly -Pseudo-buddhist -pseudobulb -pseudobulbar -pseudobulbil -pseudobulbous -Pseudo-bulgarian -pseudobutylene -Pseudo-callisthenes -Pseudo-canadian -pseudocandid -pseudocandidly -pseudocapitulum -pseudocaptive -pseudocarbamide -pseudocarcinoid -pseudocarp -pseudo-carp -pseudocarpous -pseudo-Carthaginian -pseudocartilaginous -pseudo-Catholic -pseudocatholically -pseudocele -pseudocelian -pseudocelic -pseudocellus -pseudocelom -pseudocentric -pseudocentrous -pseudocentrum -Pseudoceratites -pseudoceratitic -pseudocercaria -pseudocercariae -pseudocercerci -pseudocerci -pseudocercus -pseudoceryl -pseudocharitable -pseudocharitably -pseudochemical -Pseudo-chilean -pseudochylous -pseudochina -Pseudo-chinese -pseudochrysalis -pseudochrysolite -pseudo-christ -pseudo-Christian -pseudochromesthesia -pseudochromia -pseudochromosome -pseudochronism -pseudochronologist -Pseudo-ciceronian -pseudocyclosis -pseudocyesis -pseudocyphella -pseudocirrhosis -pseudocyst -pseudoclassic -pseudoclassical -pseudoclassicality -pseudoclassicism -Pseudo-clementine -pseudoclerical -pseudoclerically -Pseudococcinae -Pseudococcus -pseudococtate -pseudo-code -pseudocoel -pseudocoele -pseudocoelom -pseudocoelomate -pseudocoelome -pseudocollegiate -pseudocolumella -pseudocolumellar -pseudocommissural -pseudocommissure -pseudocommisural -pseudocompetitive -pseudocompetitively -pseudoconcha -pseudoconclude -pseudocone -pseudoconfessional -pseudoconglomerate -pseudoconglomeration -pseudoconhydrine -pseudoconjugation -pseudoconservative -pseudoconservatively -pseudocorneous -pseudocortex -pseudocosta -pseudocotyledon -pseudocotyledonal -pseudocotyledonary -pseudocourteous -pseudocourteously -pseudocrystalline -pseudocritical -pseudocritically -pseudocroup -pseudocubic -pseudocubical -pseudocubically -pseudocultivated -pseudocultural -pseudoculturally -pseudocumene -pseudocumenyl -pseudocumidine -pseudocumyl -Pseudo-dantesque -pseudodeltidium -pseudodementia -pseudodemocratic -pseudo-Democratic -pseudodemocratically -pseudoderm -pseudodermic -pseudodevice -pseudodiagnosis -pseudodiastolic -Pseudo-dionysius -pseudodiphtheria -pseudodiphtherial -pseudodiphtheric -pseudodiphtheritic -pseudodipteral -pseudodipterally -pseudodipteros -pseudodysentery -pseudodivine -pseudodont -pseudodox -pseudodoxal -pseudodoxy -pseudodramatic -pseudodramatically -Pseudo-dutch -pseudoeconomical -pseudoeconomically -pseudoedema -pseudoedemata -pseudoeditorial -pseudoeditorially -pseudoeducational -pseudoeducationally -pseudo-Egyptian -pseudoelectoral -pseudoelephant -Pseudo-elizabethan -pseudoembryo -pseudoembryonic -pseudoemotional -pseudoemotionally -pseudoencephalitic -Pseudo-english -pseudoenthusiastic -pseudoenthusiastically -pseudoephedrine -pseudoepiscopal -pseudo-Episcopalian -pseudoequalitarian -pseudoerysipelas -pseudoerysipelatous -pseudoerythrin -pseudoerotic -pseudoerotically -pseudoeroticism -pseudoethical -pseudoethically -pseudoetymological -pseudoetymologically -pseudoeugenics -Pseudo-european -pseudoevangelic -pseudoevangelical -pseudoevangelically -pseudoexperimental -pseudoexperimentally -pseudofaithful -pseudofaithfully -pseudofamous -pseudofamously -pseudofarcy -pseudofatherly -pseudofeminine -pseudofever -pseudofeverish -pseudofeverishly -pseudofilaria -pseudofilarian -pseudofiles -pseudofinal -pseudofinally -pseudofluctuation -pseudofluorescence -pseudofoliaceous -pseudoform -pseudofossil -Pseudo-french -pseudogalena -pseudoganglion -pseudogaseous -pseudogaster -pseudogastrula -pseudogenera -pseudogeneral -pseudogeneric -pseudogenerical -pseudogenerically -pseudogenerous -pseudogenteel -pseudogentlemanly -pseudogenus -pseudogenuses -pseudogeometry -Pseudo-georgian -Pseudo-german -pseudogermanic -pseudo-Germanic -pseudogeusia -pseudogeustia -pseudogyne -pseudogyny -pseudogynous -pseudogyrate -pseudoglanders -pseudoglioma -pseudoglobulin -pseudoglottis -Pseudo-gothic -pseudograph -pseudographeme -pseudographer -pseudography -pseudographia -pseudographize -pseudograsserie -Pseudo-grecian -Pseudo-greek -Pseudogryphus -pseudohallucination -pseudohallucinatory -pseudohalogen -pseudohemal -pseudohemophilia -pseudohermaphrodism -pseudohermaphrodite -pseudohermaphroditic -pseudohermaphroditism -pseudoheroic -pseudoheroical -pseudoheroically -pseudohexagonal -pseudohexagonally -pseudohydrophobia -pseudo-hieroglyphic -Pseudo-hindu -pseudohyoscyamine -pseudohypertrophy -pseudohypertrophic -pseudohistoric -pseudohistorical -pseudohistorically -Pseudo-hittite -pseudoholoptic -Pseudo-homeric -pseudohuman -pseudohumanistic -Pseudo-hungarian -pseudoidentical -pseudoimpartial -pseudoimpartially -Pseudo-incan -pseudoindependent -pseudoindependently -Pseudo-indian -pseudoinfluenza -pseudoinsane -pseudoinsoluble -pseudoinspirational -pseudoinspiring -pseudoinstruction -pseudoinstructions -pseudointellectual -pseudointellectually -pseudointellectuals -pseudointernational -pseudointernationalistic -pseudo-intransitive -pseudoinvalid -pseudoinvalidly -pseudoyohimbine -pseudo-ionone -Pseudo-iranian -Pseudo-irish -pseudoisatin -Pseudo-isidore -Pseudo-isidorian -pseudoism -pseudoisomer -pseudoisomeric -pseudoisomerism -pseudoisometric -pseudo-isometric -pseudoisotropy -Pseudo-italian -Pseudo-japanese -pseudojervine -Pseudo-junker -pseudolabia -pseudolabial -pseudolabium -pseudolalia -Pseudolamellibranchia -Pseudolamellibranchiata -pseudolamellibranchiate -pseudolaminated -Pseudolarix -pseudolateral -pseudolatry -pseudolegal -pseudolegality -pseudolegendary -pseudolegislative -pseudoleucite -pseudoleucocyte -pseudoleukemia -pseudoleukemic -pseudoliberal -pseudoliberally -pseudolichen -pseudolinguistic -pseudolinguistically -pseudoliterary -pseudolobar -pseudology -pseudological -pseudologically -pseudologist -pseudologue -pseudolunula -pseudolunulae -pseudolunule -Pseudo-mayan -pseudomalachite -pseudomalaria -pseudomancy -pseudomania -pseudomaniac -pseudomantic -pseudomantist -pseudomasculine -pseudomedical -pseudomedically -pseudomedieval -pseudomedievally -pseudomelanosis -pseudomembrane -pseudomembranous -pseudomemory -pseudomeningitis -pseudomenstruation -pseudomer -pseudomery -pseudomeric -pseudomerism -Pseudo-messiah -Pseudo-messianic -pseudometallic -pseudometameric -pseudometamerism -Pseudo-methodist -pseudometric -Pseudo-mexican -pseudomica -pseudomycelial -pseudomycelium -pseudomilitary -pseudomilitarily -pseudomilitarist -pseudomilitaristic -Pseudo-miltonic -pseudoministerial -pseudoministry -pseudomiraculous -pseudomiraculously -pseudomythical -pseudomythically -pseudomitotic -pseudomnesia -pseudomodern -pseudomodest -pseudomodestly -Pseudo-mohammedan -pseudo-Mohammedanism -pseudomonades -Pseudomonas -pseudomonastic -pseudomonastical -pseudomonastically -Pseudo-mongolian -pseudomonocyclic -pseudomonoclinic -pseudomonocotyledonous -pseudomonotropy -pseudomoral -pseudomoralistic -pseudomorph -pseudomorphia -pseudomorphic -pseudomorphine -pseudomorphism -pseudomorphose -pseudomorphosis -pseudomorphous -pseudomorula -pseudomorular -Pseudo-moslem -pseudomucin -pseudomucoid -pseudomultilocular -pseudomultiseptate -pseudo-Muslem -pseudo-Muslim -pseudomutuality -pseudonarcotic -pseudonational -pseudonationally -pseudonavicella -pseudonavicellar -pseudonavicula -pseudonavicular -pseudoneuropter -Pseudoneuroptera -pseudoneuropteran -pseudoneuropterous -pseudonychium -pseudonym -pseudonymal -pseudonymic -pseudonymity -pseudonymous -pseudonymously -pseudonymousness -pseudonyms -pseudonymuncle -pseudonymuncule -pseudonitrol -pseudonitrole -pseudonitrosite -pseudonoble -Pseudo-norwegian -pseudonuclein -pseudonucleolus -pseudoobscura -pseudooccidental -pseudo-occidental -pseudoofficial -pseudoofficially -pseudoorganic -pseudoorganically -pseudooriental -Pseudo-oriental -pseudoorientally -pseudoorthorhombic -pseudo-orthorhombic -pseudo-osteomalacia -pseudooval -pseudoovally -pseudopagan -Pseudo-panamanian -pseudopapal -pseudo-papal -pseudopapaverine -pseudoparalyses -pseudoparalysis -pseudoparalytic -pseudoparallel -pseudoparallelism -pseudoparaplegia -pseudoparasitic -pseudoparasitism -pseudoparenchyma -pseudoparenchymatous -pseudoparenchyme -pseudoparesis -pseudoparthenogenesis -pseudopatriotic -pseudopatriotically -pseudopediform -pseudopelletierine -pseudopercular -pseudoperculate -pseudoperculum -pseudoperianth -pseudoperidium -pseudoperiodic -pseudoperipteral -pseudoperipteros -pseudopermanent -pseudoperoxide -Pseudo-persian -pseudoperspective -Pseudopeziza -pseudophallic -pseudophellandrene -pseudophenanthrene -pseudophenanthroline -pseudophenocryst -pseudophilanthropic -pseudophilanthropical -pseudophilanthropically -pseudophilosophical -Pseudophoenix -pseudophone -Pseudo-pindaric -pseudopionnotes -pseudopious -pseudopiously -pseudopyriform -pseudoplasm -pseudoplasma -pseudoplasmodium -pseudopneumonia -pseudopod -pseudopodal -pseudopode -pseudopodia -pseudopodial -pseudopodian -pseudopodic -pseudopodiospore -pseudopodium -pseudopoetic -pseudopoetical -Pseudo-polish -pseudopolitic -pseudopolitical -pseudopopular -pseudopore -pseudoporphyritic -pseudopregnancy -pseudopregnant -Pseudo-presbyterian -pseudopriestly -pseudoprimitive -pseudoprimitivism -pseudoprincely -pseudoproboscis -pseudoprofessional -pseudoprofessorial -pseudoprophetic -pseudoprophetical -pseudoprosperous -pseudoprosperously -pseudoprostyle -pseudopsia -pseudopsychological -pseudoptics -pseudoptosis -pseudopupa -pseudopupal -pseudopurpurin -pseudoquinol -pseudorabies -pseudoracemic -pseudoracemism -pseudoramose -pseudoramulus -pseudorandom -pseudorealistic -pseudoreduction -pseudoreformatory -pseudoreformed -pseudoregal -pseudoregally -pseudoreligious -pseudoreligiously -pseudoreminiscence -pseudorepublican -Pseudo-republican -pseudoresident -pseudoresidential -pseudorganic -pseudorheumatic -pseudorhombohedral -pseudoroyal -pseudoroyally -Pseudo-roman -pseudoromantic -pseudoromantically -pseudorunic -Pseudo-russian -pseudos -pseudosacred -pseudosacrilegious -pseudosacrilegiously -pseudosalt -pseudosatirical -pseudosatirically -pseudoscalar -pseudoscarlatina -Pseudoscarus -pseudoscholarly -pseudoscholastic -pseudoscholastically -pseudoscience -pseudoscientific -pseudoscientifically -pseudoscientist -Pseudoscines -pseudoscinine -pseudosclerosis -pseudoscope -pseudoscopy -pseudoscopic -pseudoscopically -pseudoscorpion -Pseudoscorpiones -Pseudoscorpionida -pseudoscutum -pseudosemantic -pseudosemantically -pseudosematic -Pseudo-semitic -pseudosensational -pseudoseptate -Pseudo-serbian -pseudoservile -pseudoservilely -pseudosessile -Pseudo-shakespearean -pseudo-Shakespearian -pseudosyllogism -pseudosymmetry -pseudosymmetric -pseudosymmetrical -pseudosymptomatic -pseudosyphilis -pseudosyphilitic -pseudosiphonal -pseudosiphonic -pseudosiphuncal -pseudoskeletal -pseudoskeleton -pseudoskink -pseudosmia -pseudosocial -pseudosocialistic -pseudosocially -Pseudo-socratic -pseudosolution -pseudosoph -pseudosopher -pseudosophy -pseudosophical -pseudosophist -Pseudo-spanish -pseudospectral -pseudosperm -pseudospermic -pseudospermium -pseudospermous -pseudosphere -pseudospherical -pseudospiracle -pseudospiritual -pseudospiritually -pseudosporangium -pseudospore -pseudosquamate -pseudostalactite -pseudostalactitic -pseudostalactitical -pseudostalagmite -pseudostalagmitic -pseudostalagmitical -pseudostereoscope -pseudostereoscopic -pseudostereoscopism -pseudostigma -pseudostigmatic -pseudostoma -pseudostomatous -pseudostomous -pseudostratum -pseudostudious -pseudostudiously -pseudosubtle -pseudosubtly -Pseudosuchia -pseudosuchian -pseudosuicidal -pseudosweating -Pseudo-swedish -pseudotabes -pseudotachylite -pseudotetanus -pseudotetragonal -Pseudotetramera -pseudotetrameral -pseudotetramerous -pseudotyphoid -pseudotrachea -pseudotracheal -pseudotribal -pseudotribally -pseudotributary -Pseudotrimera -pseudotrimeral -pseudotrimerous -pseudotripteral -pseudotropine -Pseudotsuga -pseudotubercular -pseudotuberculosis -pseudotuberculous -pseudoturbinal -Pseudo-turk -Pseudo-turkish -pseudo-uniseptate -pseudo-urate -pseudo-urea -pseudo-uric -pseudoval -pseudovary -pseudovarian -pseudovaries -pseudovelar -pseudovelum -pseudoventricle -Pseudo-vergilian -pseudoviaduct -Pseudo-victorian -pseudoviperine -pseudoviperous -pseudoviperously -pseudo-Virgilian -pseudoviscosity -pseudoviscous -pseudovolcanic -pseudovolcano -pseudovum -pseudowhorl -pseudoxanthine -pseudozealot -pseudozealous -pseudozealously -pseudozoea -pseudozoogloeal -pseudozoological -pseuds -PSF -PSG -psha -P-shaped -Pshav -pshaw -pshawed -pshawing -pshaws -PSI -psia -psych -psych- -psychagogy -psychagogic -psychagogos -psychagogue -psychal -psychalgia -psychanalysis -psychanalysist -psychanalytic -psychanalytically -psychasthenia -psychasthenic -psychataxia -Psyche -Psychean -psyched -psychedelia -psychedelic -psychedelically -psychedelics -psycheometry -psyches -psyche's -psychesthesia -psychesthetic -psychiasis -psychiater -Psychiatry -psychiatria -psychiatric -psychiatrical -psychiatrically -psychiatries -psychiatrist -psychiatrists -psychiatrist's -psychiatrize -psychic -psychical -psychically -Psychichthys -psychicism -psychicist -psychics -psychid -Psychidae -psyching -psychism -psychist -psycho -psycho- -psychoacoustic -psychoacoustics -psychoactive -psychoanal -psychoanal. -psychoanalyse -psychoanalyses -psychoanalysis -psychoanalyst -psychoanalysts -psychoanalytic -psychoanalytical -psychoanalytically -psychoanalyze -psychoanalyzed -psychoanalyzer -psychoanalyzes -psychoanalyzing -psycho-asthenics -psychoautomatic -psychobiochemistry -psychobiology -psychobiologic -psychobiological -psychobiologist -psychobiotic -psychocatharsis -psychochemical -psychochemist -psychochemistry -psychoclinic -psychoclinical -psychoclinicist -Psychoda -psychodelic -psychodiagnosis -psychodiagnostic -psychodiagnostics -Psychodidae -psychodynamic -psychodynamics -psychodispositional -psychodrama -psychodramas -psychodramatic -psychoeducational -psychoepilepsy -psychoethical -psychofugal -psychogalvanic -psychogalvanometer -psychogenesis -psychogenetic -psychogenetical -psychogenetically -psychogenetics -psychogeny -psychogenic -psychogenically -psychogeriatrics -psychognosy -psychognosis -psychognostic -psychogony -psychogonic -psychogonical -psychogram -psychograph -psychographer -psychography -psychographic -psychographically -psychographist -psychohistory -psychoid -psychokyme -psychokineses -psychokinesia -psychokinesis -psychokinetic -Psychol -psychol. -psycholepsy -psycholeptic -psycholinguistic -psycholinguistics -psychologer -psychology -psychologian -psychologic -psychological -psychologically -psychologics -psychologies -psychologised -psychologising -psychologism -psychologist -psychologistic -psychologists -psychologist's -psychologize -psychologized -psychologizing -psychologue -psychomachy -psychomancy -psychomantic -psychometer -psychometry -psychometric -psychometrical -psychometrically -psychometrician -psychometrics -psychometries -psychometrist -psychometrize -psychomonism -psychomoral -psychomorphic -psychomorphism -psychomotility -psychomotor -psychon -psychoneural -psychoneurological -psychoneuroses -psychoneurosis -psychoneurotic -psychony -psychonomy -psychonomic -psychonomics -psychoorganic -psychopanychite -psychopannychy -psychopannychian -psychopannychism -psychopannychist -psychopannychistic -psychopath -psychopathy -psychopathia -psychopathic -psychopathically -psychopathies -psychopathist -psychopathology -psychopathologic -psychopathological -psychopathologically -psychopathologist -psychopaths -psychopetal -psychopharmacology -psychopharmacologic -psychopharmacological -psychophysic -psycho-physic -psychophysical -psycho-physical -psychophysically -psychophysicist -psychophysics -psychophysiology -psychophysiologic -psychophysiological -psychophysiologically -psychophysiologist -psychophobia -psychophonasthenia -psychoplasm -psychopomp -psychopompos -Psychopompus -psychoprophylactic -psychoprophylaxis -psychoquackeries -psychorealism -psychorealist -psychorealistic -psychoreflex -psychorhythm -psychorhythmia -psychorhythmic -psychorhythmical -psychorhythmically -psychorrhagy -psychorrhagic -psychos -psychosarcous -psychosensory -psychosensorial -psychoses -psychosexual -psychosexuality -psychosexually -psychosyntheses -psychosynthesis -psychosynthetic -psychosis -psychosocial -psychosocially -psychosociology -psychosomatic -psychosomatics -psychosome -psychosophy -psychostasy -psychostatic -psychostatical -psychostatically -psychostatics -psychosurgeon -psychosurgery -psychotaxis -psychotechnical -psychotechnician -psychotechnics -psychotechnology -psychotechnological -psychotechnologist -psychotheism -psychotheist -psychotherapeutic -psycho-therapeutic -psychotherapeutical -psychotherapeutically -psychotherapeutics -psychotherapeutist -psychotherapy -psychotherapies -psychotherapist -psychotherapists -psychotic -psychotically -psychotics -psychotogen -psychotogenic -psychotomimetic -psychotoxic -Psychotria -psychotrine -psychotropic -psychovital -Psychozoic -psychro- -psychroesthesia -psychrograph -psychrometer -psychrometry -psychrometric -psychrometrical -psychrophile -psychrophilic -psychrophyte -psychrophobia -psychrophore -psychrotherapies -psychs -psychurgy -psycter -psid -Psidium -psig -psykter -psykters -psilanthropy -psilanthropic -psilanthropism -psilanthropist -psilatro -Psylla -psyllas -psyllid -Psyllidae -psyllids -psyllium -psilo- -psiloceran -Psiloceras -psiloceratan -psiloceratid -Psiloceratidae -psilocybin -psilocin -psiloi -psilology -psilomelane -psilomelanic -Psilophytales -psilophyte -Psilophyton -Psiloriti -psiloses -psilosis -psilosopher -psilosophy -Psilotaceae -psilotaceous -psilothrum -psilotic -Psilotum -psis -Psithyrus -psithurism -psittaceous -psittaceously -Psittaci -Psittacidae -Psittaciformes -Psittacinae -psittacine -psittacinite -psittacism -psittacistic -Psittacomorphae -psittacomorphic -psittacosis -psittacotic -Psittacus -PSIU -psywar -psywars -psize -PSK -Pskov -PSL -PSM -PSN -PSO -psoadic -psoae -psoai -psoas -psoatic -psocid -Psocidae -psocids -psocine -psoitis -psomophagy -psomophagic -psomophagist -psora -Psoralea -psoraleas -psoralen -psoriases -psoriasic -psoriasiform -psoriasis -psoriasises -psoriatic -psoriatiform -psoric -psoroid -Psorophora -psorophthalmia -psorophthalmic -Psoroptes -psoroptic -psorosis -psorosperm -psorospermial -psorospermiasis -psorospermic -psorospermiform -psorospermosis -psorous -psovie -PSP -PSR -PSS -pssimistical -psst -PST -P-state -PSTN -PSU -psuedo -PSV -PSW -PSWM -PT -pt. -PTA -Ptah -Ptain -ptarmic -Ptarmica -ptarmical -ptarmigan -ptarmigans -Ptas -PTAT -PT-boat -PTD -PTE -Ptelea -Ptenoglossa -ptenoglossate -Pteranodon -pteranodont -Pteranodontidae -pteraspid -Pteraspidae -Pteraspis -ptereal -Pterelaus -pterergate -Pterian -pteric -Pterichthyodes -Pterichthys -pterid- -pterideous -pteridium -pterido- -pteridography -pteridoid -pteridology -pteridological -pteridologist -pteridophilism -pteridophilist -pteridophilistic -Pteridophyta -pteridophyte -pteridophytes -pteridophytic -pteridophytous -pteridosperm -Pteridospermae -Pteridospermaphyta -pteridospermaphytic -pteridospermous -pterygia -pterygial -pterygiophore -pterygium -pterygiums -pterygo- -pterygobranchiate -pterygode -pterygodum -Pterygogenea -pterygoid -pterygoidal -pterygoidean -pterygomalar -pterygomandibular -pterygomaxillary -pterygopalatal -pterygopalatine -pterygopharyngeal -pterygopharyngean -pterygophore -pterygopodium -pterygoquadrate -pterygosphenoid -pterygospinous -pterygostaphyline -Pterygota -pterygote -pterygotous -pterygotrabecular -Pterygotus -pteryla -pterylae -pterylography -pterylographic -pterylographical -pterylology -pterylological -pterylosis -pterin -pterins -pterion -pteryrygia -Pteris -pterna -ptero- -Pterobranchia -pterobranchiate -Pterocarya -pterocarpous -Pterocarpus -Pterocaulon -Pterocera -Pteroceras -Pterocles -Pterocletes -Pteroclidae -Pteroclomorphae -pteroclomorphic -pterodactyl -Pterodactyli -pterodactylian -pterodactylic -pterodactylid -Pterodactylidae -pterodactyloid -pterodactylous -pterodactyls -Pterodactylus -pterographer -pterography -pterographic -pterographical -pteroid -pteroylglutamic -pteroylmonogl -pteroma -pteromalid -Pteromalidae -pteromata -Pteromys -pteron -pteronophobia -pteropaedes -pteropaedic -pteropegal -pteropegous -pteropegum -pterophorid -Pterophoridae -Pterophorus -Pterophryne -pteropid -Pteropidae -pteropine -pteropod -Pteropoda -pteropodal -pteropodan -pteropodial -Pteropodidae -pteropodium -pteropodous -pteropods -Pteropsida -Pteropus -pterosaur -Pterosauri -Pterosauria -pterosaurian -pterospermous -Pterospora -Pterostemon -Pterostemonaceae -pterostigma -pterostigmal -pterostigmatic -pterostigmatical -pterotheca -pterothorax -pterotic -pterous -PTFE -ptg -ptg. -PTI -pty -ptyalagogic -ptyalagogue -ptyalectases -ptyalectasis -ptyalin -ptyalins -ptyalism -ptyalisms -ptyalize -ptyalized -ptyalizing -ptyalocele -ptyalogenic -ptyalolith -ptyalolithiasis -ptyalorrhea -Ptychoparia -ptychoparid -ptychopariid -ptychopterygial -ptychopterygium -Ptychosperma -Ptilichthyidae -Ptiliidae -Ptilimnium -ptilinal -ptilinum -ptilo- -Ptilocercus -Ptilonorhynchidae -Ptilonorhynchinae -ptilopaedes -ptilopaedic -ptilosis -Ptilota -ptinid -Ptinidae -ptinoid -Ptinus -p-type -ptisan -ptisans -ptysmagogue -ptyxis -PTN -PTO -ptochocracy -ptochogony -ptochology -Ptolemaean -Ptolemaeus -Ptolemaian -Ptolemaic -Ptolemaical -Ptolemaism -Ptolemaist -Ptolemean -Ptolemy -Ptolemies -ptomain -ptomaine -ptomaines -ptomainic -ptomains -ptomatropine -P-tongue -ptoses -ptosis -ptotic -Ptous -PTP -pts -pts. -PTSD -PTT -ptts -PTV -PTW -PU -pua -puan -pub -pub. -pubal -pubble -pub-crawl -puberal -pubertal -puberty -pubertic -puberties -puberulent -puberulous -pubes -pubescence -pubescency -pubescent -pubian -pubic -pubigerous -Pubilis -pubiotomy -pubis -publ -publ. -Publea -Publia -Publias -Public -publica -publicae -publically -Publican -publicanism -publicans -publicate -publication -publicational -publications -publication's -publice -publichearted -publicheartedness -publici -publicism -publicist -publicists -publicity -publicities -publicity-proof -publicization -publicize -publicized -publicizer -publicizes -publicizing -publicly -public-minded -public-mindedness -publicness -publics -public-school -public-spirited -public-spiritedly -public-spiritedness -publicum -publicute -public-utility -public-voiced -Publilian -publish -publishable -published -publisher -publisheress -publishers -publishership -publishes -publishing -publishment -Publius -Publus -pubo- -pubococcygeal -pubofemoral -puboiliac -puboischiac -puboischial -puboischiatic -puboprostatic -puborectalis -pubotibial -pubourethral -pubovesical -pubs -pub's -PUC -puca -Puccini -Puccinia -Pucciniaceae -pucciniaceous -puccinoid -puccoon -puccoons -puce -pucelage -pucellage -pucellas -pucelle -puceron -puces -Puchanahua -puchera -pucherite -puchero -Pucida -Puck -pucka -puckball -puck-carrier -pucker -puckerbush -puckered -puckerel -puckerer -puckerers -puckery -puckerier -puckeriest -puckering -puckermouth -puckers -Puckett -puckfist -puckfoist -puckish -puckishly -puckishness -puckle -pucklike -puckling -puckneedle -puckrel -pucks -pucksey -puckster -PUD -pudda -puddee -puddening -pudder -puddy -pudding -puddingberry -pudding-faced -puddinghead -puddingheaded -puddinghouse -puddingy -puddinglike -pudding-pie -puddings -pudding's -pudding-shaped -puddingstone -puddingwife -puddingwives -puddle -puddleball -puddlebar -puddled -puddlelike -puddler -puddlers -puddles -puddly -puddlier -puddliest -puddling -puddlings -puddock -pudency -pudencies -pudenda -pudendal -Pudendas -pudendous -pudendum -Pudens -pudent -pudge -pudgy -pudgier -pudgiest -pudgily -pudginess -pudiano -pudibund -pudibundity -pudic -pudical -pudicity -pudicitia -Pudovkin -puds -Pudsey -pudsy -Pudu -Puduns -Puebla -pueblito -Pueblo -Puebloan -puebloization -puebloize -pueblos -Puelche -Puelchean -Pueraria -puerer -puericulture -puerile -puerilely -puerileness -puerilism -puerility -puerilities -puerman -puerpera -puerperae -puerperal -puerperalism -puerperant -puerpery -puerperia -puerperium -puerperous -Puerto -Puertoreal -Puett -Pufahl -Pufendorf -Puff -puff-adder -puffback -puffball -puff-ball -puffballs -puffbird -puff-bird -puffed -puffer -puffery -pufferies -puffers -puff-fish -puffy -puffier -puffiest -puffily -puffin -puffiness -puffinet -puffing -puffingly -puffins -Puffinus -puff-leg -pufflet -puff-paste -puff-puff -puffs -pufftn -puffwig -pug -pugaree -pugarees -pugdog -pugenello -puget -pug-faced -puggaree -puggarees -pugged -pugger -puggi -puggy -puggier -puggiest -pugginess -pugging -puggish -puggle -puggree -puggrees -puggry -puggries -Pugh -pugil -pugilant -pugilism -pugilisms -pugilist -pugilistic -pugilistical -pugilistically -pugilists -Pugin -Puglia -puglianite -pugman -pugmark -pugmarks -pugmill -pugmiller -pugnacious -pugnaciously -pugnaciousness -pugnacity -pug-nosed -pug-pile -pugree -pugrees -pugs -puy -Puya -Puyallup -Pu-yi -Puiia -Puinavi -Puinavian -Puinavis -puir -puirness -puirtith -Puiseux -puisne -puisnes -puisny -puissance -puissant -puissantly -puissantness -puist -puistie -puja -pujah -pujahs -pujari -pujas -Pujunan -puka -pukatea -pukateine -puke -puked -pukeka -pukeko -puker -pukes -puke-stocking -pukeweed -Pukhtun -puky -puking -pukish -pukishness -pukka -Puklich -pukras -puku -Pukwana -Pul -Pula -pulahan -pulahanes -pulahanism -Pulaya -Pulayan -pulajan -pulas -pulasan -Pulaski -pulaskite -Pulcheria -Pulchi -Pulchia -pulchrify -pulchritude -pulchritudes -pulchritudinous -Pulcifer -Pulcinella -pule -puled -pulegol -pulegone -puleyn -puler -pulers -pules -Pulesati -Pulex -pulgada -pulghere -puli -puly -Pulian -pulicarious -pulicat -pulicate -pulicene -pulicid -Pulicidae -pulicidal -pulicide -pulicides -pulicine -pulicoid -pulicose -pulicosity -pulicous -pulijan -pulik -puling -pulingly -pulings -puliol -pulis -pulish -Pulitzer -Pulj -pulk -pulka -pull -pull- -pullable -pullaile -pullalue -pullback -pull-back -pullbacks -pullboat -pulldevil -pulldoo -pulldown -pull-down -pulldrive -pull-drive -pulled -pulley -pulleyless -pulleys -pulley's -pulley-shaped -pullen -puller -pullery -pulleries -puller-in -puller-out -pullers -pullet -pullets -pulli -pullicat -pullicate -pully-haul -pully-hauly -pull-in -Pulling -pulling-out -pullings -pullisee -Pullman -Pullmanize -Pullmans -pullock -pull-off -pull-on -pullorum -pullout -pull-out -pullouts -pullover -pull-over -pullovers -pulls -pullshovel -pull-through -pullulant -pullulate -pullulated -pullulating -pullulation -pullulative -pullup -pull-up -pullups -pullus -pulment -pulmo- -pulmobranchia -pulmobranchial -pulmobranchiate -pulmocardiac -pulmocutaneous -pulmogastric -pulmometer -pulmometry -pulmonal -pulmonar -pulmonary -Pulmonaria -pulmonarian -Pulmonata -pulmonate -pulmonated -pulmonectomy -pulmonectomies -pulmoni- -pulmonic -pulmonical -pulmonifer -Pulmonifera -pulmoniferous -pulmonitis -pulmono- -Pulmotor -pulmotors -pulmotracheal -pulmotracheary -Pulmotrachearia -pulmotracheate -pulp -pulpaceous -pulpal -pulpalgia -pulpally -pulpamenta -pulpar -pulpatone -pulpatoon -pulpboard -pulpectomy -pulped -pulpefaction -pulper -pulperia -pulpers -pulpy -pulpier -pulpiest -pulpify -pulpification -pulpified -pulpifier -pulpifying -pulpily -pulpiness -pulping -pulpit -pulpital -pulpitarian -pulpiteer -pulpiter -pulpitful -pulpitic -pulpitical -pulpitically -pulpitis -pulpitish -pulpitism -pulpitize -pulpitless -pulpitly -pulpitolatry -pulpitry -pulpits -pulpit's -pulpitum -pulpless -pulplike -pulpotomy -pulpous -pulpousness -pulps -pulpstone -pulpwood -pulpwoods -pulque -pulques -puls -pulsant -pulsar -pulsars -pulsatance -pulsate -pulsated -pulsates -pulsatile -pulsatility -Pulsatilla -pulsating -pulsation -pulsational -pulsations -pulsative -pulsatively -pulsator -pulsatory -pulsators -pulse -pulsebeat -pulsed -pulsejet -pulse-jet -pulsejets -pulseless -pulselessly -pulselessness -pulselike -pulsellum -pulser -pulsers -pulses -pulsidge -Pulsifer -pulsific -pulsimeter -pulsing -pulsion -pulsions -pulsive -pulsojet -pulsojets -pulsometer -pulsus -pultaceous -Pulteney -Pultneyville -pulton -pultost -pultun -pulture -pulu -pulv -pulverable -pulverableness -pulveraceous -pulverant -pulverate -pulverated -pulverating -pulveration -pulvereous -pulverescent -pulverin -pulverine -pulverisable -pulverisation -pulverise -pulverised -pulveriser -pulverising -pulverizable -pulverizate -pulverization -pulverizator -pulverize -pulverized -pulverizer -pulverizes -pulverizing -pulverous -pulverulence -pulverulent -pulverulently -pulvic -pulvil -pulvilio -pulvillar -pulvilli -pulvilliform -pulvillus -pulvinar -Pulvinaria -pulvinarian -pulvinate -pulvinated -pulvinately -pulvination -pulvini -pulvinic -pulviniform -pulvinni -pulvino -pulvinule -pulvinulus -pulvinus -pulviplume -pulwar -puma -pumas -Pume -pumelo -pumelos -pumex -pumicate -pumicated -pumicating -pumice -pumiced -pumiceous -pumicer -pumicers -pumices -pumice-stone -pumiciform -pumicing -pumicite -pumicites -pumicose -pummel -pummeled -pummeling -pummelled -pummelling -pummels -pummice -Pump -pumpable -pump-action -pumpage -pumped -pumpellyite -pumper -pumpernickel -pumpernickels -pumpers -pumpet -pumphandle -pump-handle -pump-handler -pumping -pumpkin -pumpkin-colored -pumpkin-headed -pumpkinify -pumpkinification -pumpkinish -pumpkinity -pumpkins -pumpkin's -pumpkinseed -pumpkin-seed -pumpknot -pumple -pumpless -pumplike -pumpman -pumpmen -pump-priming -pump-room -pumps -Pumpsie -pumpsman -pumpwell -pump-well -pumpwright -pun -puna -punaise -Punak -Punakha -punalua -punaluan -punamu -Punan -Punans -punas -punatoo -punce -Punch -punchable -punchayet -punchball -punch-ball -punchboard -punchbowl -punch-bowl -punch-drunk -punched -Puncheon -puncheons -puncher -punchers -punches -punch-hole -punchy -punchier -punchiest -punchily -Punchinello -Punchinelloes -Punchinellos -punchiness -punching -punchless -punchlike -punch-marked -punchproof -punch-up -punct -punctal -punctate -punctated -punctatim -punctation -punctator -puncticular -puncticulate -puncticulose -punctiform -punctiliar -punctilio -punctiliomonger -punctilios -punctiliosity -punctilious -punctiliously -punctiliousness -punction -punctist -punctographic -punctual -punctualist -punctuality -punctualities -punctually -punctualness -punctuate -punctuated -punctuates -punctuating -punctuation -punctuational -punctuationist -punctuative -punctuator -punctuist -punctulate -punctulated -punctulation -punctule -punctulum -punctum -puncturation -puncture -punctured -punctureless -punctureproof -puncturer -punctures -puncture's -puncturing -punctus -pundigrion -pundit -pundita -punditic -punditically -punditry -punditries -pundits -pundonor -pundum -Pune -puneca -punese -pung -punga -pungapung -pungar -pungey -pungence -pungency -pungencies -pungent -pungently -punger -pungi -pungy -pungie -pungies -pungyi -pungle -pungled -pungles -pungling -Pungoteague -pungs -puny -Punic -Punica -Punicaceae -punicaceous -puniceous -punicial -punicin -punicine -punier -puniest -punyish -punyism -punily -puniness -puninesses -punish -punishability -punishable -punishableness -punishably -punished -punisher -punishers -punishes -punishing -punyship -punishment -punishmentproof -punishment-proof -punishments -punishment's -punition -punitional -punitionally -punitions -punitive -punitively -punitiveness -punitory -punitur -Punjab -Punjabi -punjum -punk -punka -punkah -punkahs -punkas -Punke -punkey -punkeys -punker -punkest -punketto -punky -punkie -punkier -punkies -punkiest -punkin -punkiness -punkins -punkish -punkling -punks -punkt -punkwood -punless -punlet -punnable -punnage -punned -punner -punners -punnet -punnets -punny -punnic -punnical -punnier -punniest -punnigram -punning -punningly -punnology -Puno -punproof -puns -pun's -punster -punsters -punstress -Punt -Punta -puntabout -puntal -Puntan -Puntarenas -punted -puntel -puntello -punter -punters -punti -punty -punties -puntil -puntilla -puntillas -puntillero -punting -puntist -Puntlatsh -punto -puntos -puntout -punts -puntsman -Punxsutawney -PUP -pupa -pupae -pupahood -pupal -puparia -puparial -puparium -pupas -pupa-shaped -pupate -pupated -pupates -pupating -pupation -pupations -pupelo -pupfish -pupfishes -Pupidae -pupiferous -pupiform -pupigenous -pupigerous -pupil -pupilability -pupilage -pupilages -pupilar -pupilary -pupilarity -pupilate -pupildom -pupiled -pupilize -pupillage -pupillar -pupillary -pupillarity -pupillate -pupilled -pupilless -Pupillidae -pupillize -pupillometer -pupillometry -pupillometries -pupillonian -pupilloscope -pupilloscopy -pupilloscoptic -pupilmonger -pupils -pupil's -pupil-teacherdom -pupil-teachership -Pupin -Pupipara -pupiparous -Pupivora -pupivore -pupivorous -puplike -pupoid -Puposky -pupped -puppet -puppetdom -puppeteer -puppeteers -puppethead -puppethood -puppetish -puppetism -puppetize -puppetly -puppetlike -puppetman -puppetmaster -puppet-play -puppetry -puppetries -puppets -puppet's -puppet-show -puppet-valve -puppy -puppy-dog -puppydom -puppydoms -puppied -puppies -puppyfeet -puppify -puppyfish -puppyfoot -puppyhood -puppying -puppyish -puppyism -puppily -puppylike -pupping -Puppis -puppy's -puppysnatch -pups -pup's -pupulo -Pupuluca -pupunha -Puquina -Puquinan -Pur -pur- -Purana -puranas -Puranic -puraque -Purasati -purau -Purbach -Purbeck -Purbeckian -purblind -purblindly -purblindness -Purcell -Purcellville -Purchas -purchasability -purchasable -purchase -purchaseable -purchased -purchase-money -purchaser -purchasery -purchasers -purchases -purchasing -purda -purdah -purdahs -purdas -Purdy -Purdin -Purdys -Purdon -Purdue -Purdum -pure -pureayn -pureblood -pure-blooded -pure-bosomed -purebred -purebreds -pured -puredee -pure-dye -puree -pureed -pure-eyed -pureeing -purees -purehearted -pure-heartedness -purey -purely -pure-minded -pureness -purenesses -purer -purest -purfle -purfled -purfler -purfles -purfly -purfling -purflings -purga -purgament -purgation -purgations -purgative -purgatively -purgatives -purgatory -purgatorial -purgatorian -purgatories -Purgatorio -purge -purgeable -purged -purger -purgery -purgers -purges -purging -purgings -Purgitsville -Puri -Puryear -purify -purificant -purification -purifications -purificative -purificator -purificatory -purified -purifier -purifiers -purifies -purifying -puriform -Purim -purin -Purina -purine -purines -Purington -purins -puriri -puris -purism -purisms -purist -puristic -puristical -puristically -purists -Puritan -puritandom -Puritaness -puritanic -puritanical -puritanically -puritanicalness -Puritanism -Puritanize -Puritanizer -Puritanly -puritanlike -puritano -puritans -Purity -purities -Purkinje -Purkinjean -purl -Purlear -purled -purler -purlhouse -purlicue -purlicues -purlieu -purlieuman -purlieu-man -purlieumen -purlieus -purlin -purline -purlines -Purling -purlins -purlman -purloin -purloined -purloiner -purloiners -purloining -purloins -purls -Purmela -puro- -purohepatitis -purohit -purolymph -puromycin -puromucous -purpart -purparty -purpense -purpie -purple -purple-awned -purple-backed -purple-beaming -purple-berried -purple-black -purple-blue -purple-brown -purple-clad -purple-coated -purple-colored -purple-crimson -purpled -purple-dawning -purple-dyeing -purple-eyed -purple-faced -purple-flowered -purple-fringed -purple-glowing -purple-green -purple-headed -purpleheart -purple-hued -purple-yellow -purple-leaved -purplely -purplelip -purpleness -purple-nosed -purpler -purple-red -purple-robed -purple-rose -purples -purplescent -purple-skirted -purple-spiked -purple-spotted -purplest -purple-staining -purple-stemmed -purple-streaked -purple-streaming -purple-tailed -purple-tipped -purple-top -purple-topped -purple-veined -purple-vested -purplewood -purplewort -purply -purpliness -purpling -purplish -purplishness -purport -purported -purportedly -purporter -purporters -purportes -purporting -purportively -purportless -purports -purpose -purpose-built -purposed -purposedly -purposeful -purposefully -purposefulness -purposeless -purposelessly -purposelessness -purposely -purposelike -purposer -purposes -purposing -purposive -purposively -purposiveness -purposivism -purposivist -purposivistic -purpresture -purprise -purprision -Purpura -purpuraceous -purpuras -purpurate -purpure -purpureal -purpurean -purpureo- -purpureous -purpures -purpurescent -purpuric -purpuriferous -purpuriform -purpurigenous -purpurin -purpurine -purpurins -purpuriparous -purpurite -purpurize -purpurogallin -purpurogenous -purpuroid -purpuroxanthin -purr -purrah -purre -purred -purree -purreic -purrel -purrer -purry -purring -purringly -purrone -purrs -purs -Purse -purse-bearer -pursed -purse-eyed -purseful -purseless -purselike -purse-lined -purse-lipped -purse-mad -purse-pinched -purse-pride -purse-proud -purser -pursers -pursership -purses -purse-shaped -purse-snatching -purse-string -purse-swollen -purset -Pursglove -Purshia -pursy -pursier -pursiest -pursily -pursiness -pursing -pursive -purslane -purslanes -pursley -purslet -pursuable -pursual -pursuance -pursuances -pursuant -pursuantly -pursue -pursued -pursuer -pursuers -pursues -pursuing -pursuit -pursuitmeter -pursuits -pursuit's -pursuivant -purtenance -purty -Puru -Puruha -purulence -purulences -purulency -purulencies -purulent -purulently -puruloid -Purupuru -Purus -purusha -purushartha -purvey -purveyable -purveyal -purveyance -purveyancer -purveyances -purveyed -purveying -purveyor -purveyoress -purveyors -purveys -purview -purviews -Purvis -purvoe -purwannah -pus -Pusan -Puschkinia -Pusey -Puseyism -Puseyistic -Puseyistical -Puseyite -puses -pusgut -push -push- -Pushan -pushball -pushballs -push-bike -pushbutton -push-button -pushcard -pushcart -pushcarts -pushchair -pushdown -push-down -pushdowns -pushed -pusher -pushers -pushes -pushful -pushfully -pushfulness -pushy -pushier -pushiest -pushily -pushiness -pushing -pushingly -pushingness -Pushkin -pushmina -pushmobile -push-off -pushout -pushover -pushovers -pushpin -push-pin -pushpins -push-pull -pushrod -pushrods -push-start -Pushto -Pushtu -pushum -pushup -push-up -pushups -pushwainling -pusill -pusillanimity -pusillanimous -pusillanimously -pusillanimousness -pusley -pusleys -puslike -Puss -pusscat -puss-cat -pusses -Pussy -pussycat -pussycats -pussier -pussies -pussiest -pussyfoot -pussy-foot -pussyfooted -pussyfooter -pussyfooting -pussyfootism -pussyfoots -pussiness -pussytoe -pussle-gutted -pussley -pussleys -pussly -pusslies -pusslike -puss-moth -pustulant -pustular -pustulate -pustulated -pustulating -pustulation -pustulatous -pustule -pustuled -pustulelike -pustules -pustuliform -pustulose -pustulous -puszta -Pusztadr -put -putage -putain -putamen -putamina -putaminous -Putana -put-and-take -putanism -putation -putationary -putative -putatively -putback -putchen -putcher -putchuk -putdown -put-down -putdowns -puteal -putelee -puteli -puther -puthery -putid -putidly -putidness -puting -putlock -putlog -putlogs -Putnam -Putnamville -Putney -Putnem -Puto -putoff -put-off -putoffs -putois -puton -put-on -putons -Putorius -putout -put-out -putouts -put-put -put-putter -putredinal -Putredinis -putredinous -putrefacient -putrefactible -putrefaction -putrefactions -putrefactive -putrefactiveness -putrefy -putrefiable -putrefied -putrefier -putrefies -putrefying -putresce -putrescence -putrescency -putrescent -putrescibility -putrescible -putrescine -putricide -putrid -putridity -putridly -putridness -putrifacted -putriform -putrilage -putrilaginous -putrilaginously -puts -Putsch -Putscher -putsches -putschism -putschist -putt -puttan -putted -puttee -puttees -putter -puttered -putterer -putterers -putter-forth -Puttergill -putter-in -puttering -putteringly -putter-off -putter-on -putter-out -putters -putter-through -putter-up -putti -putty -puttyblower -putty-colored -puttie -puttied -puttier -puttiers -putties -putty-faced -puttyhead -puttyhearted -puttying -putty-jointed -puttylike -putty-looking -putting -putting-off -putting-stone -putty-powdered -puttyroot -putty-stopped -puttywork -putto -puttock -puttoo -putt-putt -putts -Putumayo -put-up -put-upon -puture -putz -putzed -putzes -putzing -Puunene -puxy -Puxico -puzzle -puzzleation -puzzle-brain -puzzle-cap -puzzled -puzzledly -puzzledness -puzzledom -puzzlehead -puzzleheaded -puzzle-headed -puzzleheadedly -puzzleheadedness -puzzleman -puzzlement -puzzlements -puzzle-monkey -puzzlepate -puzzlepated -puzzlepatedness -puzzler -puzzlers -puzzles -puzzle-wit -puzzling -puzzlingly -puzzlingness -puzzlings -puzzolan -puzzolana -PV -PVA -PVC -PVN -PVO -PVP -PVT -Pvt. -PW -PWA -PWB -pwca -PWD -PWG -pwr -pwt -pwt. -PX -Q -Q. -Q.C. -q.e. -Q.E.D. -Q.E.F. -Q.F. -q.t. -q.v. -QA -qabbala -qabbalah -Qadarite -Qaddafi -Qaddish -qadi -Qadianis -Qadiriya -qaf -qaid -qaids -qaimaqam -Qairwan -QAM -qanat -qanats -qantar -QARANC -QAS -qasida -qasidas -qat -Qatar -qats -QB -q-boat -QBP -QC -Q-celt -Q-Celtic -QD -QDA -QDCS -QE -QED -QEF -QEI -qere -qeri -Qeshm -QET -QF -Q-factor -Q-fever -Q-group -qh -Qy -Qiana -qibla -QIC -QID -qiyas -qindar -qindarka -qindars -qintar -qintars -QIS -Qishm -qiviut -qiviuts -QKt -QKtP -ql -ql. -Q-language -Qld -QLI -QM -QMC -QMF -QMG -QMP -QMS -QN -QNP -QNS -Qoheleth -Qom -qoph -qophs -QP -Qq -Qq. -QQV -QR -qr. -QRA -QRP -qrs -QRSS -QS -q's -Q-shaped -Q-ship -QSY -QSL -QSO -QSS -QST -qt -qt. -qtam -QTC -qtd -QTY -qto -qto. -qtr -qts -qu -qu. -qua -quaalude -quaaludes -quab -quabird -qua-bird -quachil -quack -quacked -Quackenbush -quackery -quackeries -quackhood -quacky -quackier -quackiest -quacking -quackish -quackishly -quackishness -quackism -quackisms -quackle -quack-quack -quacks -quacksalver -quackster -quad -quad. -quadded -quadding -quaddle -Quader -Quadi -quadle -quadmeter -quadplex -quadplexes -quadra -quadrable -quadrae -quadragenarian -quadragenarious -Quadragesima -Quadragesimal -quadragintesimal -quadral -quadrangle -quadrangled -quadrangles -quadrangular -quadrangularly -quadrangularness -quadrangulate -quadranguled -quadrans -quadrant -quadrantal -quadrantes -Quadrantid -quadrantile -quadrantly -quadrantlike -quadrants -quadrant's -quadraphonic -quadraphonics -quadrat -quadrate -quadrated -quadrateness -quadrates -quadratic -quadratical -quadratically -quadratics -Quadratifera -quadratiferous -quadrating -quadrato- -quadratojugal -quadratomandibular -quadrator -quadratosquamosal -quadratrix -quadrats -quadratum -quadrature -quadratures -quadrature's -quadratus -quadrauricular -quadrel -quadrella -quadrennia -quadrennial -quadrennially -quadrennials -quadrennium -quadrenniums -quadri- -quadriad -quadrialate -quadriannulate -quadriarticulate -quadriarticulated -quadribasic -quadricapsular -quadricapsulate -quadricarinate -quadricellular -quadricentennial -quadricentennials -quadriceps -quadricepses -quadrichord -quadricycle -quadricycler -quadricyclist -quadriciliate -quadricinium -quadricipital -quadricone -quadricorn -quadricornous -quadricostate -quadricotyledonous -quadricovariant -quadricrescentic -quadricrescentoid -quadrics -quadricuspid -quadricuspidal -quadricuspidate -quadridentate -quadridentated -quadriderivative -quadridigitate -quadriennial -quadriennium -quadrienniumutile -quadrifarious -quadrifariously -quadrifid -quadrifilar -quadrifocal -quadrifoil -quadrifoliate -quadrifoliolate -quadrifolious -quadrifolium -quadriform -quadrifrons -quadrifrontal -quadrifurcate -quadrifurcated -quadrifurcation -quadriga -quadrigabled -quadrigae -quadrigamist -quadrigate -quadrigati -quadrigatus -quadrigeminal -quadrigeminate -quadrigeminous -quadrigeminum -quadrigenarious -quadriglandular -quadrihybrid -quadri-invariant -quadrijugal -quadrijugate -quadrijugous -quadrilaminar -quadrilaminate -quadrilateral -quadrilaterally -quadrilateralness -quadrilaterals -quadrilingual -quadriliteral -quadrille -quadrilled -quadrilles -quadrilling -quadrillion -quadrillions -quadrillionth -quadrillionths -quadrilobate -quadrilobed -quadrilocular -quadriloculate -quadrilogy -quadrilogue -quadrimembral -quadrimetallic -quadrimolecular -quadrimum -quadrin -quadrine -quadrinodal -quadrinomial -quadrinomical -quadrinominal -quadrinucleate -quadrioxalate -quadriparous -quadripartite -quadripartitely -quadripartition -quadripennate -quadriphyllous -quadriphonic -quadriphosphate -quadripinnate -quadriplanar -quadriplegia -quadriplegic -quadriplicate -quadriplicated -quadripolar -quadripole -quadriportico -quadriporticus -quadripulmonary -quadric -quadriradiate -quadrireme -quadrisect -quadrisected -quadrisection -quadriseptate -quadriserial -quadrisetose -quadrisyllabic -quadrisyllabical -quadrisyllable -quadrisyllabous -quadrispiral -quadristearate -quadrisulcate -quadrisulcated -quadrisulphide -quadriternate -quadriti -quadritubercular -quadrituberculate -quadriurate -quadrivalence -quadrivalency -quadrivalent -quadrivalently -quadrivalve -quadrivalvular -quadrivia -quadrivial -quadrivious -quadrivium -quadrivoltine -quadroon -quadroons -quadrophonics -quadru- -quadrual -Quadrula -quadrum -Quadrumana -quadrumanal -quadrumane -quadrumanous -quadrumvir -quadrumvirate -quadruped -quadrupedal -quadrupedan -quadrupedant -quadrupedantic -quadrupedantical -quadrupedate -quadrupedation -quadrupedism -quadrupedous -quadrupeds -quadruplane -quadruplate -quadruplator -quadruple -quadrupled -quadruple-expansion -quadrupleness -quadruples -quadruplet -quadruplets -quadruplex -quadruply -quadruplicate -quadruplicated -quadruplicates -quadruplicating -quadruplication -quadruplications -quadruplicature -quadruplicity -quadrupling -quadrupole -quads -quae -quaedam -Quaequae -quaere -quaeres -quaesita -quaesitum -quaestio -quaestiones -quaestor -quaestorial -quaestorian -quaestors -quaestorship -quaestuary -quaff -quaffed -quaffer -quaffers -quaffing -quaffingly -quaffs -quag -quagga -quaggas -quaggy -quaggier -quaggiest -quagginess -quaggle -quagmire -quagmired -quagmires -quagmire's -quagmiry -quagmirier -quagmiriest -quags -quahaug -quahaugs -quahog -quahogs -quai -quay -quayage -quayages -quaich -quaiches -quaichs -quayed -quaife -quayful -quaigh -quaighs -quaying -Quail -quailberry -quail-brush -quailed -quailery -quaileries -quailhead -quaily -quaylike -quailing -quaillike -quails -quail's -quayman -quaint -quaintance -quaint-costumed -quaint-eyed -quainter -quaintest -quaint-felt -quaintise -quaintish -quaintly -quaint-looking -quaintness -quaintnesses -quaint-notioned -quaint-shaped -quaint-spoken -quaint-stomached -quaint-witty -quaint-worded -quais -quays -quayside -quaysider -quaysides -Quaitso -Quakake -quake -quaked -quakeful -quakeproof -Quaker -quakerbird -Quaker-colored -Quakerdom -Quakeress -Quaker-gray -Quakery -Quakeric -Quakerish -Quakerishly -Quakerishness -Quakerism -Quakerization -Quakerize -Quaker-ladies -Quakerlet -Quakerly -Quakerlike -quakers -Quakership -Quakerstreet -Quakertown -quakes -quaketail -quaky -quakier -quakiest -quakily -quakiness -quaking -quaking-grass -quakingly -qual -quale -qualia -qualify -qualifiable -qualification -qualifications -qualificative -qualificator -qualificatory -qualified -qualifiedly -qualifiedness -qualifier -qualifiers -qualifies -qualifying -qualifyingly -qualimeter -qualitative -qualitatively -quality -qualitied -qualities -qualityless -quality's -qualityship -qually -qualm -qualmy -qualmier -qualmiest -qualmyish -qualminess -qualmish -qualmishly -qualmishness -qualmproof -qualms -qualm-sick -qualtagh -quam -quamash -quamashes -Quamasia -Quamoclit -quan -Quanah -quandang -quandangs -quandary -quandaries -quandary's -quandy -quando -quandong -quandongs -QUANGO -quangos -quannet -Quant -quanta -quantal -QUANTAS -quanted -quanti -quantic -quantical -Quantico -quantics -quanties -quantify -quantifiability -quantifiable -quantifiably -quantification -quantifications -quantified -quantifier -quantifiers -quantifies -quantifying -quantile -quantiles -quantimeter -quanting -quantitate -quantitation -quantitative -quantitatively -quantitativeness -quantity -quantitied -quantities -quantity's -quantitive -quantitively -quantitiveness -quantivalence -quantivalency -quantivalent -quantizable -quantization -quantize -quantized -quantizer -quantizes -quantizing -quantometer -quantong -quantongs -Quantrill -quants -quantulum -quantum -quantummechanical -quantum-mechanical -Quantz -Quapaw -quaquaversal -quaquaversally -Quar -quaranty -quarantinable -quarantine -quarantined -quarantiner -quarantines -quarantine's -quarantining -quardeel -quare -quarenden -quarender -quarentene -quaresma -quarion -quark -quarks -quarl -quarle -quarles -quarmen -quarred -quarrel -quarreled -quarreler -quarrelers -quarrelet -quarreling -quarrelingly -quarrelled -quarreller -quarrellers -quarrelling -quarrellingly -quarrellous -quarrelous -quarrelously -quarrelproof -quarrels -quarrelsome -quarrelsomely -quarrelsomeness -quarry -quarriable -quarryable -quarrian -quarried -quarrier -quarriers -quarries -quarry-faced -quarrying -quarryman -quarrymen -quarrion -quarry-rid -quarry's -quarrystone -Quarryville -quarrome -quarsome -quart -quart. -Quarta -quartan -Quartana -quartane -quartano -quartans -Quartas -quartation -quartaut -quarte -quartenylic -quarter -quarterage -quarterback -quarterbacked -quarterbacking -quarterbacks -quarter-bound -quarter-breed -quarter-cast -quarter-cleft -quarter-cut -quarter-day -quarterdeck -quarter-deck -quarter-decker -quarterdeckish -quarterdecks -quarter-dollar -quartered -quarterer -quarter-faced -quarterfinal -quarter-final -quarterfinalist -quarter-finalist -quarterfoil -quarter-foot -quarter-gallery -quarter-hollow -quarter-hoop -quarter-hour -quarter-yard -quarter-year -quarter-yearly -quarter-inch -quartering -quarterings -quarterization -quarterland -quarter-left -quarterly -quarterlies -quarterlight -quarterman -quartermaster -quartermasterlike -quartermasters -quartermastership -quartermen -quarter-mile -quarter-miler -quarter-minute -quarter-month -quarter-moon -quartern -quarternight -quarternion -quarterns -quarteron -quarterpace -quarter-phase -quarter-pierced -quarter-pint -quarter-pound -quarter-right -quarter-run -quarters -quartersaw -quartersawed -quartersawing -quartersawn -quarter-second -quarter-sessions -quarter-sheet -quarter-size -quarterspace -quarterstaff -quarterstaves -quarterstetch -quarter-vine -quarter-wave -quarter-witted -quartes -Quartet -quartets -quartet's -quartette -quartetto -quartful -quartic -quartics -quartile -quartiles -quartin -quartine -quartinho -quartiparous -Quartis -quarto -quarto-centenary -Quartodeciman -quartodecimanism -quartole -quartos -quart-pot -quarts -Quartus -quartz -quartz-basalt -quartz-diorite -quartzes -quartz-free -quartzy -quartzic -quartziferous -quartzite -quartzitic -quartzless -quartz-monzonite -quartzoid -quartzose -quartzous -quartz-syenite -Quartzsite -quasar -quasars -quash -quashed -Quashee -quashey -quasher -quashers -quashes -Quashi -quashy -quashing -quasi -quasi- -quasi-absolute -quasi-absolutely -quasi-academic -quasi-academically -quasi-acceptance -quasi-accepted -quasi-accidental -quasi-accidentally -quasi-acquainted -quasi-active -quasi-actively -quasi-adequate -quasi-adequately -quasi-adjusted -quasi-admire -quasi-admired -quasi-admiring -quasi-adopt -quasi-adopted -quasi-adult -quasi-advantageous -quasi-advantageously -quasi-affectionate -quasi-affectionately -quasi-affirmative -quasi-affirmatively -quasi-alternating -quasi-alternatingly -quasi-alternative -quasi-alternatively -quasi-amateurish -quasi-amateurishly -quasi-American -quasi-Americanized -quasi-amiable -quasi-amiably -quasi-amusing -quasi-amusingly -quasi-ancient -quasi-anciently -quasi-angelic -quasi-angelically -quasi-antique -quasi-anxious -quasi-anxiously -quasi-apologetic -quasi-apologetically -quasi-appealing -quasi-appealingly -quasi-appointed -quasi-appropriate -quasi-appropriately -quasi-artistic -quasi-artistically -quasi-aside -quasi-asleep -quasi-athletic -quasi-athletically -quasi-attempt -quasi-audible -quasi-audibly -quasi-authentic -quasi-authentically -quasi-authorized -quasi-automatic -quasi-automatically -quasi-awful -quasi-awfully -quasi-bad -quasi-bankrupt -quasi-basic -quasi-basically -quasi-beneficial -quasi-beneficially -quasi-benevolent -quasi-benevolently -quasi-biographical -quasi-biographically -quasi-blind -quasi-blindly -quasi-brave -quasi-bravely -quasi-brilliant -quasi-brilliantly -quasi-bronze -quasi-brotherly -quasi-calm -quasi-calmly -quasi-candid -quasi-candidly -quasi-capable -quasi-capably -quasi-careful -quasi-carefully -quasi-characteristic -quasi-characteristically -quasi-charitable -quasi-charitably -quasi-cheerful -quasi-cheerfully -quasi-cynical -quasi-cynically -quasi-civil -quasi-civilly -quasi-classic -quasi-classically -quasi-clerical -quasi-clerically -quasi-collegiate -quasi-colloquial -quasi-colloquially -quasi-comfortable -quasi-comfortably -quasi-comic -quasi-comical -quasi-comically -quasi-commanding -quasi-commandingly -quasi-commercial -quasi-commercialized -quasi-commercially -quasi-common -quasi-commonly -quasi-compact -quasi-compactly -quasi-competitive -quasi-competitively -quasi-complete -quasi-completely -quasi-complex -quasi-complexly -quasi-compliant -quasi-compliantly -quasi-complimentary -quasi-compound -quasi-comprehensive -quasi-comprehensively -quasi-compromising -quasi-compromisingly -quasi-compulsive -quasi-compulsively -quasi-compulsory -quasi-compulsorily -quasi-confident -quasi-confidential -quasi-confidentially -quasi-confidently -quasi-confining -quasi-conforming -quasi-congenial -quasi-congenially -quasi-congratulatory -quasi-connective -quasi-connectively -quasi-conscientious -quasi-conscientiously -quasi-conscious -quasi-consciously -quasi-consequential -quasi-consequentially -quasi-conservative -quasi-conservatively -quasi-considerate -quasi-considerately -quasi-consistent -quasi-consistently -quasi-consolidated -quasi-constant -quasi-constantly -quasi-constitutional -quasi-constitutionally -quasi-constructed -quasi-constructive -quasi-constructively -quasi-consuming -quasi-content -quasi-contented -quasi-contentedly -quasi-continual -quasi-continually -quasicontinuous -quasi-continuous -quasi-continuously -quasi-contolled -quasi-contract -quasi-contrary -quasi-contrarily -quasi-contrasted -quasi-controlling -quasi-conveyed -quasi-convenient -quasi-conveniently -quasi-conventional -quasi-conventionally -quasi-converted -quasi-convinced -quasi-cordial -quasi-cordially -quasi-correct -quasi-correctly -quasi-courteous -quasi-courteously -quasi-crafty -quasi-craftily -quasi-criminal -quasi-criminally -quasi-critical -quasi-critically -quasi-cultivated -quasi-cunning -quasi-cunningly -quasi-damaged -quasi-dangerous -quasi-dangerously -quasi-daring -quasi-daringly -quasi-deaf -quasi-deafening -quasi-deafly -quasi-decorated -quasi-defeated -quasi-defiant -quasi-defiantly -quasi-definite -quasi-definitely -quasi-deify -quasi-dejected -quasi-dejectedly -quasi-deliberate -quasi-deliberately -quasi-delicate -quasi-delicately -quasi-delighted -quasi-delightedly -quasi-demanding -quasi-demandingly -quasi-democratic -quasi-democratically -quasi-dependence -quasi-dependent -quasi-dependently -quasi-depressed -quasi-desolate -quasi-desolately -quasi-desperate -quasi-desperately -quasi-despondent -quasi-despondently -quasi-determine -quasi-devoted -quasi-devotedly -quasi-difficult -quasi-difficultly -quasi-dignified -quasi-dignifying -quasi-dying -quasi-diplomatic -quasi-diplomatically -quasi-disadvantageous -quasi-disadvantageously -quasi-disastrous -quasi-disastrously -quasi-discreet -quasi-discreetly -quasi-discriminating -quasi-discriminatingly -quasi-disgraced -quasi-disgusted -quasi-disgustedly -quasi-distant -quasi-distantly -quasi-distressed -quasi-diverse -quasi-diversely -quasi-diversified -quasi-divided -quasi-dividedly -quasi-double -quasi-doubly -quasi-doubtful -quasi-doubtfully -quasi-dramatic -quasi-dramatically -quasi-dreadful -quasi-dreadfully -quasi-dumb -quasi-dumbly -quasi-duplicate -quasi-dutiful -quasi-dutifully -quasi-eager -quasi-eagerly -quasi-economic -quasi-economical -quasi-economically -quasi-educated -quasi-educational -quasi-educationally -quasi-effective -quasi-effectively -quasi-efficient -quasi-efficiently -quasi-elaborate -quasi-elaborately -quasi-elementary -quasi-eligible -quasi-eligibly -quasi-eloquent -quasi-eloquently -quasi-eminent -quasi-eminently -quasi-emotional -quasi-emotionally -quasi-empty -quasi-endless -quasi-endlessly -quasi-energetic -quasi-energetically -quasi-enforced -quasi-engaging -quasi-engagingly -quasi-English -quasi-entertaining -quasi-enthused -quasi-enthusiastic -quasi-enthusiastically -quasi-envious -quasi-enviously -quasi-episcopal -quasi-episcopally -quasi-equal -quasi-equally -quasi-equitable -quasi-equitably -quasi-equivalent -quasi-equivalently -quasi-erotic -quasi-erotically -quasi-essential -quasi-essentially -quasi-established -quasi-eternal -quasi-eternally -quasi-ethical -quasi-everlasting -quasi-everlastingly -quasi-evil -quasi-evilly -quasi-exact -quasi-exactly -quasi-exceptional -quasi-exceptionally -quasi-excessive -quasi-excessively -quasi-exempt -quasi-exiled -quasi-existent -quasi-expectant -quasi-expectantly -quasi-expedient -quasi-expediently -quasi-expensive -quasi-expensively -quasi-experienced -quasi-experimental -quasi-experimentally -quasi-explicit -quasi-explicitly -quasi-exposed -quasi-expressed -quasi-external -quasi-externally -quasi-exterritorial -quasi-extraterritorial -quasi-extraterritorially -quasi-extreme -quasi-fabricated -quasi-fair -quasi-fairly -quasi-faithful -quasi-faithfully -quasi-false -quasi-falsely -quasi-familiar -quasi-familiarly -quasi-famous -quasi-famously -quasi-fascinated -quasi-fascinating -quasi-fascinatingly -quasi-fashionable -quasi-fashionably -quasi-fatal -quasi-fatalistic -quasi-fatalistically -quasi-fatally -quasi-favorable -quasi-favorably -quasi-favourable -quasi-favourably -quasi-federal -quasi-federally -quasi-feudal -quasi-feudally -quasi-fictitious -quasi-fictitiously -quasi-final -quasi-financial -quasi-financially -quasi-fireproof -quasi-fiscal -quasi-fiscally -quasi-fit -quasi-foolish -quasi-foolishly -quasi-forced -quasi-foreign -quasi-forgetful -quasi-forgetfully -quasi-forgotten -quasi-formal -quasi-formally -quasi-formidable -quasi-formidably -quasi-fortunate -quasi-fortunately -quasi-frank -quasi-frankly -quasi-fraternal -quasi-fraternally -quasi-free -quasi-freely -quasi-French -quasi-fulfilling -quasi-full -quasi-fully -quasi-gay -quasi-gallant -quasi-gallantly -quasi-gaseous -quasi-generous -quasi-generously -quasi-genteel -quasi-genteelly -quasi-gentlemanly -quasi-genuine -quasi-genuinely -quasi-German -quasi-glad -quasi-gladly -quasi-glorious -quasi-gloriously -quasi-good -quasi-gracious -quasi-graciously -quasi-grateful -quasi-gratefully -quasi-grave -quasi-gravely -quasi-great -quasi-greatly -quasi-Grecian -quasi-Greek -quasi-guaranteed -quasi-guilty -quasi-guiltily -quasi-habitual -quasi-habitually -quasi-happy -quasi-harmful -quasi-harmfully -quasi-healthful -quasi-healthfully -quasi-hearty -quasi-heartily -quasi-helpful -quasi-helpfully -quasi-hereditary -quasi-heroic -quasi-heroically -quasi-historic -quasi-historical -quasi-historically -quasi-honest -quasi-honestly -quasi-honorable -quasi-honorably -quasi-human -quasi-humanistic -quasi-humanly -quasi-humble -quasi-humbly -quasi-humorous -quasi-humorously -quasi-ideal -quasi-idealistic -quasi-idealistically -quasi-ideally -quasi-identical -quasi-identically -quasi-ignorant -quasi-ignorantly -quasi-immediate -quasi-immediately -quasi-immortal -quasi-immortally -quasi-impartial -quasi-impartially -quasi-important -quasi-importantly -quasi-improved -quasi-inclined -quasi-inclusive -quasi-inclusively -quasi-increased -quasi-independent -quasi-independently -quasi-indifferent -quasi-indifferently -quasi-induced -quasi-indulged -quasi-industrial -quasi-industrially -quasi-inevitable -quasi-inevitably -quasi-inferior -quasi-inferred -quasi-infinite -quasi-infinitely -quasi-influential -quasi-influentially -quasi-informal -quasi-informally -quasi-informed -quasi-inherited -quasi-initiated -quasi-injured -quasi-injurious -quasi-injuriously -quasi-innocent -quasi-innocently -quasi-innumerable -quasi-innumerably -quasi-insistent -quasi-insistently -quasi-inspected -quasi-inspirational -quasi-installed -quasi-instructed -quasi-insulted -quasi-intellectual -quasi-intellectually -quasi-intelligent -quasi-intelligently -quasi-intended -quasi-interested -quasi-interestedly -quasi-internal -quasi-internalized -quasi-internally -quasi-international -quasi-internationalistic -quasi-internationally -quasi-interviewed -quasi-intimate -quasi-intimated -quasi-intimately -quasi-intolerable -quasi-intolerably -quasi-intolerant -quasi-intolerantly -quasi-introduced -quasi-intuitive -quasi-intuitively -quasi-invaded -quasi-investigated -quasi-invisible -quasi-invisibly -quasi-invited -quasi-young -quasi-irregular -quasi-irregularly -Quasi-jacobean -quasi-Japanese -Quasi-jewish -quasi-jocose -quasi-jocosely -quasi-jocund -quasi-jocundly -quasi-jointly -quasijudicial -quasi-judicial -quasi-kind -quasi-kindly -quasi-knowledgeable -quasi-knowledgeably -quasi-laborious -quasi-laboriously -quasi-lamented -quasi-Latin -quasi-lawful -quasi-lawfully -quasi-legal -quasi-legally -quasi-legendary -quasi-legislated -quasi-legislative -quasi-legislatively -quasi-legitimate -quasi-legitimately -quasi-liberal -quasi-liberally -quasi-literary -quasi-living -quasi-logical -quasi-logically -quasi-loyal -quasi-loyally -quasi-luxurious -quasi-luxuriously -quasi-mad -quasi-madly -quasi-magic -quasi-magical -quasi-magically -quasi-malicious -quasi-maliciously -quasi-managed -quasi-managerial -quasi-managerially -quasi-marble -quasi-material -quasi-materially -quasi-maternal -quasi-maternally -quasi-mechanical -quasi-mechanically -quasi-medical -quasi-medically -quasi-medieval -quasi-mental -quasi-mentally -quasi-mercantile -quasi-metaphysical -quasi-metaphysically -quasi-methodical -quasi-methodically -quasi-mighty -quasi-military -quasi-militaristic -quasi-militaristically -quasi-ministerial -quasi-miraculous -quasi-miraculously -quasi-miserable -quasi-miserably -quasi-mysterious -quasi-mysteriously -quasi-mythical -quasi-mythically -quasi-modern -quasi-modest -quasi-modestly -Quasimodo -quasi-moral -quasi-moralistic -quasi-moralistically -quasi-morally -quasi-mourning -quasi-municipal -quasi-municipally -quasi-musical -quasi-musically -quasi-mutual -quasi-mutually -quasi-nameless -quasi-national -quasi-nationalistic -quasi-nationally -quasi-native -quasi-natural -quasi-naturally -quasi-nebulous -quasi-nebulously -quasi-necessary -quasi-negative -quasi-negatively -quasi-neglected -quasi-negligent -quasi-negligible -quasi-negligibly -quasi-neutral -quasi-neutrally -quasi-new -quasi-newly -quasi-normal -quasi-normally -quasi-notarial -quasi-nuptial -quasi-obedient -quasi-obediently -quasi-objective -quasi-objectively -quasi-obligated -quasi-observed -quasi-offensive -quasi-offensively -quasi-official -quasi-officially -quasi-opposed -quasiorder -quasi-ordinary -quasi-organic -quasi-organically -quasi-oriental -quasi-orientally -quasi-original -quasi-originally -quasiparticle -quasi-partisan -quasi-passive -quasi-passively -quasi-pathetic -quasi-pathetically -quasi-patient -quasi-patiently -quasi-patriarchal -quasi-patriotic -quasi-patriotically -quasi-patronizing -quasi-patronizingly -quasi-peaceful -quasi-peacefully -quasi-perfect -quasi-perfectly -quasiperiodic -quasi-periodic -quasi-periodically -quasi-permanent -quasi-permanently -quasi-perpetual -quasi-perpetually -quasi-personable -quasi-personably -quasi-personal -quasi-personally -quasi-perusable -quasi-philosophical -quasi-philosophically -quasi-physical -quasi-physically -quasi-pious -quasi-piously -quasi-plausible -quasi-pleasurable -quasi-pleasurably -quasi-pledge -quasi-pledged -quasi-pledging -quasi-plentiful -quasi-plentifully -quasi-poetic -quasi-poetical -quasi-poetically -quasi-politic -quasi-political -quasi-politically -quasi-poor -quasi-poorly -quasi-popular -quasi-popularly -quasi-positive -quasi-positively -quasi-powerful -quasi-powerfully -quasi-practical -quasi-practically -quasi-precedent -quasi-preferential -quasi-preferentially -quasi-prejudiced -quasi-prepositional -quasi-prepositionally -quasi-prevented -quasi-private -quasi-privately -quasi-privileged -quasi-probable -quasi-probably -quasi-problematic -quasi-productive -quasi-productively -quasi-progressive -quasi-progressively -quasi-promised -quasi-prompt -quasi-promptly -quasi-proof -quasi-prophetic -quasi-prophetical -quasi-prophetically -quasi-prosecuted -quasi-prosperous -quasi-prosperously -quasi-protected -quasi-proud -quasi-proudly -quasi-provincial -quasi-provincially -quasi-provocative -quasi-provocatively -quasi-public -quasi-publicly -quasi-punished -quasi-pupillary -quasi-purchased -quasi-qualified -quasi-radical -quasi-radically -quasi-rational -quasi-rationally -quasi-realistic -quasi-realistically -quasi-reasonable -quasi-reasonably -quasi-rebellious -quasi-rebelliously -quasi-recent -quasi-recently -quasi-recognized -quasi-reconciled -quasi-reduced -quasi-refined -quasi-reformed -quasi-refused -quasi-registered -quasi-regular -quasi-regularly -quasi-regulated -quasi-rejected -quasi-reliable -quasi-reliably -quasi-relieved -quasi-religious -quasi-religiously -quasi-remarkable -quasi-remarkably -quasi-renewed -quasi-repaired -quasi-replaced -quasi-reported -quasi-represented -quasi-republican -quasi-required -quasi-rescued -quasi-residential -quasi-residentially -quasi-resisted -quasi-respectable -quasi-respectably -quasi-respected -quasi-respectful -quasi-respectfully -quasi-responsible -quasi-responsibly -quasi-responsive -quasi-responsively -quasi-restored -quasi-retired -quasi-revolutionized -quasi-rewarding -quasi-ridiculous -quasi-ridiculously -quasi-righteous -quasi-righteously -quasi-royal -quasi-royally -quasi-romantic -quasi-romantically -quasi-rural -quasi-rurally -quasi-sad -quasi-sadly -quasi-safe -quasi-safely -quasi-sagacious -quasi-sagaciously -quasi-saintly -quasi-sanctioned -quasi-sanguine -quasi-sanguinely -quasi-sarcastic -quasi-sarcastically -quasi-satirical -quasi-satirically -quasi-satisfied -quasi-savage -quasi-savagely -quasi-scholarly -quasi-scholastic -quasi-scholastically -quasi-scientific -quasi-scientifically -quasi-secret -quasi-secretive -quasi-secretively -quasi-secretly -quasi-secure -quasi-securely -quasi-sentimental -quasi-sentimentally -quasi-serious -quasi-seriously -quasi-settled -quasi-similar -quasi-similarly -quasi-sympathetic -quasi-sympathetically -quasi-sincere -quasi-sincerely -quasi-single -quasi-singly -quasi-systematic -quasi-systematically -quasi-systematized -quasi-skillful -quasi-skillfully -quasi-slanderous -quasi-slanderously -quasi-sober -quasi-soberly -quasi-socialistic -quasi-socialistically -quasi-sovereign -quasi-Spanish -quasi-spatial -quasi-spatially -quasi-spherical -quasi-spherically -quasi-spirited -quasi-spiritedly -quasi-spiritual -quasi-spiritually -quasi-standardized -quasistationary -quasi-stationary -quasi-stylish -quasi-stylishly -quasi-strenuous -quasi-strenuously -quasi-studious -quasi-studiously -quasi-subjective -quasi-subjectively -quasi-submissive -quasi-submissively -quasi-successful -quasi-successfully -quasi-sufficient -quasi-sufficiently -quasi-superficial -quasi-superficially -quasi-superior -quasi-supervised -quasi-supported -quasi-suppressed -quasi-tangent -quasi-tangible -quasi-tangibly -quasi-technical -quasi-technically -quasi-temporal -quasi-temporally -quasi-territorial -quasi-territorially -quasi-testamentary -quasi-theatrical -quasi-theatrically -quasi-thorough -quasi-thoroughly -quasi-typical -quasi-typically -quasi-tyrannical -quasi-tyrannically -quasi-tolerant -quasi-tolerantly -quasi-total -quasi-totally -quasi-traditional -quasi-traditionally -quasi-tragic -quasi-tragically -quasi-tribal -quasi-tribally -quasi-truthful -quasi-truthfully -quasi-ultimate -quasi-unanimous -quasi-unanimously -quasi-unconscious -quasi-unconsciously -quasi-unified -quasi-universal -quasi-universally -quasi-uplift -quasi-utilized -quasi-valid -quasi-validly -quasi-valued -quasi-venerable -quasi-venerably -quasi-victorious -quasi-victoriously -quasi-violated -quasi-violent -quasi-violently -quasi-virtuous -quasi-virtuously -quasi-vital -quasi-vitally -quasi-vocational -quasi-vocationally -quasi-warfare -quasi-warranted -quasi-wealthy -quasi-whispered -quasi-wicked -quasi-wickedly -quasi-willing -quasi-willingly -quasi-wrong -quasi-zealous -quasi-zealously -quasky -quaskies -Quasqueton -quasquicentennial -quass -quassation -quassative -quasses -Quassia -quassias -quassiin -quassin -quassins -quat -quata -quatch -quate -quatenus -quatercentenary -quater-centenary -quaterion -quatern -quaternal -Quaternary -quaternarian -quaternaries -quaternarius -quaternate -quaternion -quaternionic -quaternionist -quaternitarian -quaternity -quaternities -quateron -quaters -quatertenses -Quathlamba -quatorzain -quatorze -quatorzes -quatrayle -quatrain -quatrains -quatral -quatre -quatreble -quatrefeuille -quatrefoil -quatrefoiled -quatrefoils -quatrefoliated -quatres -quatrible -quatrin -quatrino -quatrocentism -quatrocentist -quatrocento -Quatsino -quatty -quattie -quattrini -quattrino -quattrocento -quattuordecillion -quattuordecillionth -quatuor -quatuorvirate -quauk -quave -quaver -quavered -quaverer -quaverers -quavery -quaverymavery -quavering -quaveringly -quaverous -quavers -quaviver -quaw -quawk -qubba -Qubecois -Que -Que. -queach -queachy -queachier -queachiest -queak -queal -quean -quean-cat -queanish -queanlike -queans -quease -queasy -queasier -queasiest -queasily -queasiness -queasinesses -queasom -queazen -queazy -queazier -queaziest -Quebec -Quebecer -Quebeck -Quebecker -Quebecois -quebrachamine -quebrachine -quebrachite -quebrachitol -quebracho -quebrada -quebradilla -Quebradillas -quebrith -Quechee -Quechua -Quechuan -Quechuas -quedful -quedly -quedness -quedship -queechy -Queen -Queena -Queenanne -Queen-Anne -queencake -queencraft -queencup -queendom -queened -queenfish -queenfishes -queenhood -Queenie -queening -queenite -queenless -queenlet -queenly -queenlier -queenliest -queenlike -queenliness -queen-mother -queen-of-the-meadow -queen-of-the-prairie -queen-post -queenright -queenroot -Queens -queen's -queensberry -queensberries -Queen's-flower -queenship -Queensland -Queenstown -queensware -queens-ware -queenweed -queenwood -queer -queer-bashing -queered -queer-eyed -queerer -queerest -queer-faced -queer-headed -queery -queering -queerish -queerishness -queerity -queer-legged -queerly -queer-looking -queer-made -queerness -queernesses -queer-notioned -queers -queer-shaped -queersome -queer-spirited -queer-tempered -queest -queesting -queet -queeve -queez-madam -quegh -quei -quey -queing -queintise -queys -QUEL -quelch -Quelea -Quelimane -quelite -quell -quellable -quelled -queller -quellers -quelling -quellio -quells -quellung -quelme -Quelpart -quelquechose -quelt -quem -Quemado -queme -quemeful -quemefully -quemely -Quemoy -Quenby -quench -quenchable -quenchableness -quenched -quencher -quenchers -quenches -quenching -quenchless -quenchlessly -quenchlessness -quenda -Queneau -quenelle -quenelles -Quenemo -quenite -Quenna -Quennie -quenselite -Quent -Quentin -quentise -Quenton -quercetagetin -quercetic -quercetin -quercetum -Quercia -quercic -Querciflorae -quercimeritrin -quercin -quercine -quercinic -quercitannic -quercitannin -quercite -quercitin -quercitol -quercitrin -quercitron -quercivorous -Quercus -Querecho -querela -querelae -querele -querencia -Querendi -Querendy -querent -Queres -Queretaro -Queri -query -Querida -Queridas -querido -queridos -queried -querier -queriers -queries -querying -queryingly -queryist -queriman -querimans -querimony -querimonies -querimonious -querimoniously -querimoniousness -querist -querists -querken -querl -quern -quernal -Quernales -querns -quernstone -querre -quersprung -Quertaro -querulant -querulation -querulent -querulential -querulist -querulity -querulosity -querulous -querulously -querulousness -querulousnesses -ques -ques. -quesal -quesited -quesitive -Quesnay -Quesnel -quest -Questa -quested -quester -questers -questeur -questful -questhouse -questing -questingly -question -questionability -questionable -questionableness -questionably -questionary -questionaries -question-begging -questioned -questionee -questioner -questioners -questioning -questioningly -questionings -questionist -questionle -questionless -questionlessly -questionlessness -question-mark -questionnaire -questionnaires -questionnaire's -questionniare -questionniares -questionous -questions -questionwise -questman -questmen -questmonger -Queston -questor -questorial -questors -questorship -questrist -quests -quet -quetch -quetenite -quethe -quetsch -Quetta -quetzal -Quetzalcoatl -quetzales -quetzals -queue -queued -queueing -queuer -queuers -queues -queuing -quezal -quezales -quezals -Quezaltenango -Quezon -qui -quia -Quiangan -quiapo -quiaquia -quia-quia -quib -quibble -quibbled -quibbleproof -quibbler -quibblers -quibbles -quibbling -quibblingly -Quibdo -Quiberon -quiblet -quibus -quica -Quiche -quiches -Quichua -Quick -quick-acting -quickbeam -quickborn -quick-burning -quick-change -quick-coming -quick-compounded -quick-conceiving -quick-decaying -quick-designing -quick-devouring -quick-drawn -quick-eared -quicked -Quickel -quicken -quickenance -quickenbeam -quickened -quickener -quickening -quickens -quicker -quickest -quick-fading -quick-falling -quick-fire -quick-firer -quick-firing -quick-flowing -quickfoot -quick-freeze -quick-freezer -quick-freezing -quick-froze -quick-frozen -quick-glancing -quick-gone -quick-growing -quick-guiding -quick-gushing -quick-handed -quickhatch -quickhearted -quickie -quickies -quicking -quick-laboring -quickly -quicklime -quick-lunch -Quickman -quick-minded -quick-moving -quickness -quicknesses -quick-nosed -quick-paced -quick-piercing -quick-questioning -quick-raised -quick-returning -quick-rolling -quick-running -quicks -quicksand -quicksandy -quicksands -quick-saver -Quicksburg -quick-scented -quick-scenting -quick-selling -quickset -quicksets -quick-setting -quick-shifting -quick-shutting -quickside -quick-sighted -quick-sightedness -quicksilver -quicksilvery -quicksilvering -quicksilverish -quicksilverishness -quicksilvers -quick-speaking -quick-spirited -quick-spouting -quickstep -quick-stepping -quicksteps -quick-talking -quick-tempered -quick-thinking -quickthorn -quick-thoughted -quick-thriving -quick-voiced -quickwater -quick-winged -quick-witted -quick-wittedly -quickwittedness -quick-wittedness -quickwork -quick-wrought -quid -Quidae -quidam -quiddany -quiddative -Quidde -quidder -Quiddist -quiddit -quidditative -quidditatively -quiddity -quiddities -quiddle -quiddled -quiddler -quiddling -quidnunc -quidnuncs -quids -quienal -quiesce -quiesced -quiescence -quiescences -quiescency -quiescent -quiescently -quiescing -quiet -quieta -quietable -quietage -quiet-colored -quiet-dispositioned -quieted -quiet-eyed -quieten -quietened -quietener -quietening -quietens -quieter -quieters -quietest -quiet-going -quieti -quieting -quietism -quietisms -quietist -quietistic -quietists -quietive -quietly -quietlike -quiet-living -quiet-looking -quiet-mannered -quiet-minded -quiet-moving -quietness -quietnesses -quiet-patterned -quiets -quiet-seeming -quietsome -quiet-spoken -quiet-tempered -quietude -quietudes -quietus -quietuses -quiff -quiffing -quiffs -Quigley -qui-hi -qui-hy -Quiina -Quiinaceae -quiinaceous -quila -quilate -Quilcene -quileces -quiles -quileses -Quileute -quilez -quilisma -quilkin -Quill -Quillagua -quillai -quillaia -quillaias -quillaic -quillais -Quillaja -quillajas -quillajic -Quillan -quillback -quillbacks -quilled -quiller -quillet -quilleted -quillets -quillfish -quillfishes -quilly -quilling -quillity -quill-less -quill-like -Quillon -quills -quilltail -quill-tailed -quillwork -quillwort -Quilmes -quilt -quilted -quilter -quilters -quilting -quiltings -quilts -quim -Quimbaya -Quimby -Quimper -Quin -quin- -quina -quinacrine -Quinaielt -quinaldic -quinaldyl -quinaldin -quinaldine -quinaldinic -quinaldinium -quinamicin -quinamicine -quinamidin -quinamidine -quinamin -quinamine -quinanarii -quinanisole -quinaquina -quinary -quinarian -quinaries -quinarii -quinarius -quinas -quinate -quinatoxin -quinatoxine -Quinault -quinazolyl -quinazolin -quinazoline -Quinby -Quince -Quincey -quincentenary -quincentennial -quinces -quincewort -quinch -Quincy -quincies -quincubital -quincubitalism -quincuncial -quincuncially -quincunx -quincunxes -quincunxial -quindecad -quindecagon -quindecangle -quindecaplet -quindecasyllabic -quindecemvir -quindecemvirate -quindecemviri -quindecennial -quindecylic -quindecillion -quindecillionth -quindecim -quindecima -quindecimvir -quindene -Quinebaug -quinela -quinelas -quinella -quinellas -quinet -quinetum -quingentenary -quinhydrone -quinia -quinible -quinic -quinicin -quinicine -quinidia -quinidin -quinidine -quiniela -quinielas -quinyie -quinyl -quinin -quinina -quininas -quinine -quinines -quininiazation -quininic -quininism -quininize -quinins -quiniretin -quinisext -quinisextine -quinism -quinite -quinitol -quinizarin -quinize -quink -Quinlan -Quinn -quinnat -quinnats -Quinnesec -quinnet -Quinnimont -Quinnipiac -quino- -quinoa -quinoas -quinocarbonium -quinoform -quinogen -quinoid -quinoidal -quinoidation -quinoidin -quinoidine -quinoids -quinoyl -quinol -quinolas -quinolyl -quinolin -quinoline -quinolinic -quinolinyl -quinolinium -quinolins -quinology -quinologist -quinols -quinometry -quinon -quinone -quinonediimine -quinones -quinonic -quinonyl -quinonimin -quinonimine -quinonization -quinonize -quinonoid -quinopyrin -quinotannic -quinotoxine -quinova -quinovatannic -quinovate -quinovic -quinovin -quinovose -quinoxalyl -quinoxalin -quinoxaline -quinquagenary -quinquagenarian -quinquagenaries -Quinquagesima -Quinquagesimal -quinquangle -quinquarticular -Quinquatria -Quinquatrus -Quinque -quinque- -quinque-angle -quinque-angled -quinque-angular -quinque-annulate -quinque-articulate -quinquecapsular -quinquecentenary -quinquecostate -quinquedentate -quinquedentated -quinquefarious -quinquefid -quinquefoil -quinquefoliate -quinquefoliated -quinquefoliolate -quinquegrade -quinquejugous -quinquelateral -quinqueliteral -quinquelobate -quinquelobated -quinquelobed -quinquelocular -quinqueloculine -quinquenary -quinquenerval -quinquenerved -quinquennalia -quinquennia -quinquenniad -quinquennial -quinquennialist -quinquennially -quinquennium -quinquenniums -quinquepartite -quinquepartition -quinquepedal -quinquepedalian -quinquepetaloid -quinquepunctal -quinquepunctate -quinqueradial -quinqueradiate -quinquereme -quinquertium -quinquesect -quinquesection -quinqueseptate -quinqueserial -quinqueseriate -quinquesyllabic -quinquesyllable -quinquetubercular -quinquetuberculate -quinquevalence -quinquevalency -quinquevalent -quinquevalve -quinquevalvous -quinquevalvular -quinqueverbal -quinqueverbial -quinquevir -quinquevirate -quinquevirs -quinquiliteral -quinquina -quinquino -quinquivalent -quins -quinse -quinsy -quinsyberry -quinsyberries -quinsied -quinsies -quinsywort -Quint -quint- -Quinta -quintad -quintadena -quintadene -quintain -quintains -quintal -quintals -quintan -Quintana -quintans -quintant -quintar -quintary -quintars -quintaten -quintato -quinte -quintefoil -quintelement -quintennial -Quinter -quinternion -Quintero -quinteron -quinteroon -quintes -quintescence -Quintessa -quintessence -quintessences -quintessential -quintessentiality -quintessentially -quintessentiate -quintet -quintets -quintette -quintetto -quintfoil -quinti- -quintic -quintics -Quintie -quintile -quintiles -Quintilian -Quintilis -Quintilla -Quintillian -quintillion -quintillions -quintillionth -quintillionths -Quintin -Quintina -quintins -quintiped -Quintius -quinto -quintocubital -quintocubitalism -quintole -Quinton -quintons -quintroon -quints -quintuple -quintupled -quintuple-nerved -quintuple-ribbed -quintuples -quintuplet -quintuplets -quintuplicate -quintuplicated -quintuplicates -quintuplicating -quintuplication -quintuplinerved -quintupling -quintupliribbed -Quintus -quinua -quinuclidine -Quinwood -quinzaine -quinze -quinzieme -quip -quipful -quipo -quippe -quipped -quipper -quippy -quipping -quippish -quippishness -quippu -quippus -quips -quipsome -quipsomeness -quipster -quipsters -quipu -quipus -quira -quircal -quire -quired -quires -quirewise -Quirinal -Quirinalia -quirinca -quiring -Quirinus -Quirita -quiritary -quiritarian -Quirite -Quirites -Quirk -quirked -quirky -quirkier -quirkiest -quirkily -quirkiness -quirking -quirkish -quirks -quirksey -quirksome -quirl -quirquincho -quirt -quirted -quirting -quirts -quis -quisby -quiscos -quisle -quisler -Quisling -quislingism -quislingistic -quislings -Quisqualis -quisqueite -quisquilian -quisquiliary -quisquilious -quisquous -quist -quistiti -quistron -quisutsch -quit -Quita -quitantie -Quitaque -quitch -quitches -quitclaim -quitclaimed -quitclaiming -quitclaims -quite -quitely -Quitemoca -Quiteno -Quiteri -Quiteria -Quiteris -quiteve -quiting -Quitman -Quito -quitrent -quit-rent -quitrents -quits -Quitt -quittable -quittal -quittance -quittances -quitted -quitter -quitterbone -quitters -quitter's -quitting -quittor -quittors -Quitu -quiver -quivered -quiverer -quiverers -quiverful -quivery -quivering -quiveringly -quiverish -quiverleaf -quivers -Quivira -Quixote -quixotes -quixotic -quixotical -quixotically -quixotism -quixotize -quixotry -quixotries -quiz -quizmaster -quizmasters -quizzability -quizzable -quizzacious -quizzatorial -quizzed -quizzee -quizzer -quizzery -quizzers -quizzes -quizzy -quizzical -quizzicality -quizzically -quizzicalness -quizzify -quizzification -quizziness -quizzing -quizzing-glass -quizzingly -quizzish -quizzism -quizzity -Qulin -Qulllon -Qum -Qumran -Qung -quo -quo' -quoad -quobosque-weed -quod -quodded -quoddies -quodding -quoddity -quodlibet -quodlibetal -quodlibetary -quodlibetarian -quodlibetic -quodlibetical -quodlibetically -quodlibetz -quodling -quods -Quogue -quohog -quohogs -quoilers -quoin -quoined -quoining -quoins -quoit -quoited -quoiter -quoiting -quoitlike -quoits -quokka -quokkas -quominus -quomodo -quomodos -quondam -quondamly -quondamship -quoniam -quonking -quonset -quop -quor -Quoratean -quorum -quorums -quos -quot -quot. -quota -quotability -quotable -quotableness -quotably -quotas -quota's -quotation -quotational -quotationally -quotationist -quotations -quotation's -quotative -quote -quoted -quotee -quoteless -quotennial -quoter -quoters -quotes -quoteworthy -quoth -quotha -quotid -quotidian -quotidianly -quotidianness -quotient -quotients -quoties -quotiety -quotieties -quoting -quotingly -quotity -quotlibet -quott -quotum -Quran -Qur'an -qursh -qurshes -Qurti -qurush -qurushes -Qutb -QV -QWERTY -QWL -R -R&D -R. -R.A. -R.A.A.F. -R.A.M. -R.C. -R.C.A.F. -R.C.M.P. -R.C.P. -R.C.S. -R.E. -r.h. -R.I. -R.I.B.A. -R.I.P. -R.M.A. -R.M.S. -R.N. -r.p.s. -R.Q. -R.R. -R.S.V.P. -R/D -RA -Raab -raad -raadzaal -RAAF -Raama -Raamses -raanan -Raasch -raash -Rab -Rabaal -Rabah -rabal -raband -rabanna -Rabassa -Rabat -rabatine -rabato -rabatos -rabats -rabatte -rabatted -rabattement -rabatting -Rabaul -rabban -rabbanim -rabbanist -rabbanite -rabbet -rabbeted -rabbeting -rabbets -rabbet-shaped -Rabbi -rabbies -rabbin -rabbinate -rabbinates -rabbindom -Rabbinic -Rabbinica -rabbinical -rabbinically -rabbinism -Rabbinist -rabbinistic -rabbinistical -Rabbinite -rabbinitic -rabbinize -rabbins -rabbinship -rabbis -rabbish -rabbiship -rabbit -rabbit-backed -rabbitberry -rabbitberries -rabbit-chasing -rabbit-ear -rabbit-eared -rabbited -rabbiteye -rabbiter -rabbiters -rabbit-faced -rabbitfish -rabbitfishes -rabbit-foot -rabbithearted -rabbity -rabbiting -rabbitlike -rabbit-meat -rabbitmouth -rabbit-mouthed -rabbitoh -rabbitproof -rabbitry -rabbitries -rabbitroot -rabbits -rabbit's -rabbit's-foot -rabbit-shouldered -rabbitskin -rabbitweed -rabbitwise -rabbitwood -rabble -rabble-charming -rabble-chosen -rabble-courting -rabble-curbing -rabbled -rabblelike -rabblement -rabbleproof -rabbler -rabble-rouse -rabble-roused -rabble-rouser -rabble-rousing -rabblers -rabbles -rabblesome -rabbling -rabboni -rabbonim -rabbonis -rabdomancy -Rabelais -Rabelaisian -Rabelaisianism -Rabelaism -rabfak -Rabi -Rabia -Rabiah -rabiator -rabic -rabid -rabidity -rabidities -rabidly -rabidness -rabies -rabietic -rabific -rabiform -rabigenic -Rabin -rabinet -Rabinowitz -rabious -rabirubia -rabitic -Rabjohn -Rabkin -rablin -rabot -rabulistic -rabulous -Rabush -RAC -racahout -racallable -racche -raccoon -raccoonberry -raccoons -raccoon's -raccroc -RACE -raceabout -race-begotten -racebrood -racecard -racecourse -race-course -racecourses -raced -racegoer -racegoing -racehorse -race-horse -racehorses -Raceland -racelike -raceline -race-maintaining -racemase -racemate -racemates -racemation -raceme -racemed -racemes -racemic -racemiferous -racemiform -racemism -racemisms -racemization -racemize -racemized -racemizes -racemizing -racemo- -racemocarbonate -racemocarbonic -racemoid -racemomethylate -racemose -racemosely -racemous -racemously -racemule -racemulose -race-murder -RACEP -raceplate -racer -race-riding -racers -racerunner -race-running -races -racetrack -race-track -racetracker -racetracks -racette -raceway -raceways -race-wide -race-winning -rach -Rachaba -Rachael -rache -Rachel -Rachele -Rachelle -raches -rachet -rachets -rachi- -rachial -rachialgia -rachialgic -rachianalgesia -Rachianectes -rachianesthesia -rachicentesis -Rachycentridae -Rachycentron -rachides -rachidial -rachidian -rachiform -Rachiglossa -rachiglossate -rachigraph -rachilla -rachillae -rachiocentesis -rachiocyphosis -rachiococainize -rachiodynia -rachiodont -rachiometer -rachiomyelitis -rachioparalysis -rachioplegia -rachioscoliosis -rachiotome -rachiotomy -rachipagus -rachis -rachischisis -rachises -rachitic -rachitides -rachitis -rachitism -rachitogenic -rachitome -rachitomy -rachitomous -Rachmaninoff -Rachmanism -racy -racial -racialism -racialist -racialistic -racialists -raciality -racialization -racialize -racially -racier -raciest -racily -racinage -Racine -raciness -racinesses -racing -racinglike -racings -racion -racism -racisms -racist -racists -rack -rackabones -rackan -rack-and-pinion -rackapee -rackateer -rackateering -rackboard -rackbone -racked -racker -Rackerby -rackers -racket -racketed -racketeer -racketeering -racketeerings -racketeers -racketer -rackety -racketier -racketiest -racketiness -racketing -racketlike -racketproof -racketry -rackets -racket's -rackett -rackettail -racket-tail -rackful -rackfuls -Rackham -racking -rackingly -rackle -rackless -Racklin -rackman -rackmaster -racknumber -rackproof -rack-rent -rackrentable -rack-renter -racks -rack-stick -rackway -rackwork -rackworks -raclette -raclettes -racloir -racoyian -racomo-oxalic -racon -racons -raconteur -raconteurs -raconteuses -racoon -racoons -Racovian -racquet -racquetball -racquets -RAD -rad. -RADA -Radack -RADAR -radarman -radarmen -radars -radar's -radarscope -radarscopes -Radborne -Radbourne -Radbun -Radburn -Radcliff -Radcliffe -Raddatz -radded -Raddi -Raddy -Raddie -radding -raddle -raddled -raddleman -raddlemen -raddles -raddling -raddlings -radeau -radeaux -radectomy -radectomieseph -radek -Radetzky -radeur -radevore -Radferd -Radford -Radha -Radhakrishnan -radiability -radiable -radiably -radiac -radial -radiale -radialia -radialis -radiality -radialization -radialize -radially -radial-ply -radials -radian -radiance -radiances -radiancy -radiancies -radians -radiant -radiantly -radiantness -radiants -radiary -Radiata -radiate -radiated -radiately -radiateness -radiates -radiate-veined -radiatics -radiatiform -radiating -radiation -radiational -radiationless -radiations -radiative -radiato- -radiatopatent -radiatoporose -radiatoporous -radiator -radiatory -radiators -radiator's -radiatostriate -radiatosulcate -radiato-undulate -radiature -radiatus -radical -radicalism -radicalisms -radicality -radicalization -radicalize -radicalized -radicalizes -radicalizing -radically -radicalness -radicals -radicand -radicands -radicant -radicate -radicated -radicates -radicating -radication -radicel -radicels -radices -radici- -radicicola -radicicolous -radiciferous -radiciflorous -radiciform -radicivorous -radicle -radicles -radicolous -radicose -Radicula -radicular -radicule -radiculectomy -radiculitis -radiculose -radidii -Radie -radiectomy -radient -radiescent -radiesthesia -radiferous -Radiguet -radii -RADIO -radio- -radioacoustics -radioactinium -radioactivate -radioactivated -radioactivating -radioactive -radio-active -radioactively -radioactivity -radioactivities -radioamplifier -radioanaphylaxis -radioastronomy -radioautograph -radioautography -radioautographic -radiobicipital -radiobiology -radiobiologic -radiobiological -radiobiologically -radiobiologist -radiobroadcast -radiobroadcasted -radiobroadcaster -radiobroadcasters -radiobroadcasting -radiobserver -radiocalcium -radiocarbon -radiocarpal -radiocast -radiocaster -radiocasting -radiochemical -radiochemically -radiochemist -radiochemistry -radiocinematograph -radiocommunication -radioconductor -radiocopper -radiodating -radiode -radiodermatitis -radiodetector -radiodiagnoses -radiodiagnosis -radiodigital -radiodynamic -radiodynamics -radiodontia -radiodontic -radiodontics -radiodontist -radioecology -radioecological -radioecologist -radioed -radioelement -radiofrequency -radio-frequency -radiogenic -radiogoniometer -radiogoniometry -radiogoniometric -radiogram -radiograms -radiograph -radiographer -radiography -radiographic -radiographical -radiographically -radiographies -radiographs -radiohumeral -radioing -radioiodine -radio-iodine -radioiron -radioisotope -radioisotopes -radioisotopic -radioisotopically -radiolabel -Radiolaria -radiolarian -radiolead -radiolysis -radiolite -Radiolites -radiolitic -radiolytic -Radiolitidae -radiolocation -radiolocator -radiolocators -radiology -radiologic -radiological -radiologically -radiologies -radiologist -radiologists -radiolucence -radiolucency -radiolucencies -radiolucent -radioluminescence -radioluminescent -radioman -radiomedial -radiomen -radiometallography -radiometeorograph -radiometer -radiometers -radiometry -radiometric -radiometrically -radiometries -radiomicrometer -radiomicrophone -radiomimetic -radiomobile -radiomovies -radiomuscular -radion -radionecrosis -radioneuritis -radionic -radionics -radionuclide -radionuclides -radiopacity -radiopalmar -radiopaque -radioparent -radiopathology -radiopelvimetry -radiophare -radiopharmaceutical -radiophysics -radiophone -radiophones -radiophony -radiophonic -radio-phonograph -radiophosphorus -radiophoto -radiophotogram -radiophotograph -radiophotography -radiopotassium -radiopraxis -radioprotection -radioprotective -radiorays -radios -radioscope -radioscopy -radioscopic -radioscopical -radiosensibility -radiosensitive -radiosensitivity -radiosensitivities -radiosymmetrical -radiosodium -radiosonde -radiosondes -radiosonic -radiostereoscopy -radiosterilization -radiosterilize -radiosterilized -radiostrontium -radiosurgery -radiosurgeries -radiosurgical -radiotechnology -radiotelegram -radiotelegraph -radiotelegrapher -radiotelegraphy -radiotelegraphic -radiotelegraphically -radiotelegraphs -radiotelemetry -radiotelemetric -radiotelemetries -radiotelephone -radiotelephoned -radiotelephones -radiotelephony -radiotelephonic -radiotelephoning -radioteletype -radioteria -radiothallium -radiotherapeutic -radiotherapeutics -radiotherapeutist -radiotherapy -radiotherapies -radiotherapist -radiotherapists -radiothermy -radiothorium -radiotoxemia -radiotoxic -radiotracer -radiotransparency -radiotransparent -radiotrician -Radiotron -radiotropic -radiotropism -radio-ulna -radio-ulnar -radious -radiov -radiovision -radish -radishes -radishlike -radish's -Radisson -radium -radiumization -radiumize -radiumlike -radiumproof -radium-proof -radiums -radiumtherapy -radius -radiuses -radix -radixes -Radke -radknight -Radley -radly -Radloff -RADM -Radman -Radmen -Radmilla -Radnor -Radnorshire -Radom -radome -radomes -radon -radons -rads -radsimir -Radu -radula -radulae -radular -radulas -radulate -raduliferous -raduliform -radzimir -Rae -Raeann -Raeburn -RAEC -Raeford -Raenell -Raetic -RAF -Rafa -Rafael -Rafaela -Rafaelia -Rafaelita -Rafaelle -Rafaellle -Rafaello -Rafaelof -rafale -Rafat -Rafe -Rafer -Raff -Raffaelesque -Raffaello -Raffarty -raffe -raffee -raffery -Rafferty -raffia -raffias -Raffin -raffinase -raffinate -raffing -raffinose -raffish -raffishly -raffishness -raffishnesses -raffle -raffled -raffler -rafflers -Raffles -Rafflesia -Rafflesiaceae -rafflesiaceous -raffling -raffman -Raffo -raffs -Rafi -rafik -Rafiq -rafraichissoir -raft -raftage -rafted -Rafter -raftered -rafters -rafty -raftiness -rafting -raftlike -raftman -rafts -raftsman -raftsmen -RAFVR -rag -raga -ragabash -ragabrash -ragamuffin -ragamuffinism -ragamuffinly -ragamuffins -Ragan -ragas -ragazze -ragbag -rag-bag -ragbags -rag-bailing -rag-beating -rag-boiling -ragbolt -rag-bolt -rag-burn -rag-chew -rag-cutting -rage -rage-crazed -raged -ragee -ragees -rage-filled -rageful -ragefully -rage-infuriate -rageless -Ragen -rageous -rageously -rageousness -rageproof -rager -ragery -rages -ragesome -rage-subduing -rage-swelling -rage-transported -rag-fair -ragfish -ragfishes -Ragg -ragged -raggeder -raggedest -raggedy -raggedly -raggedness -raggednesses -raggee -raggees -ragger -raggery -raggety -raggy -raggies -raggil -raggily -ragging -raggle -raggled -raggles -raggle-taggle -raghouse -raghu -ragi -raging -ragingly -ragis -Raglan -Ragland -raglanite -raglans -Ragley -raglet -raglin -rag-made -ragman -ragmen -Ragnar -ragnarok -Rago -ragondin -ragout -ragouted -ragouting -ragouts -Ragouzis -ragpicker -rags -rag's -Ragsdale -ragseller -ragshag -ragsorter -ragstone -ragtag -rag-tag -ragtags -rag-threshing -ragtime -rag-time -ragtimey -ragtimer -ragtimes -ragtop -ragtops -Ragucci -ragule -raguly -Ragusa -ragusye -ragweed -ragweeds -rag-wheel -ragwork -ragworm -ragwort -ragworts -rah -Rahab -Rahal -Rahanwin -rahdar -rahdaree -rahdari -Rahel -Rahm -Rahman -Rahmann -Rahmatour -Rahr -rah-rah -Rahu -rahul -Rahway -Rai -Ray -Raia -raya -Raiae -rayage -rayah -rayahs -rayan -raias -rayas -rayat -Raybin -Raybourne -Raybrook -Rayburn -Raychel -Raycher -RAID -raided -raider -raiders -raiding -raidproof -raids -Raye -rayed -raif -Raiford -Rayford -ray-fringed -rayful -ray-gilt -ray-girt -raygrass -ray-grass -raygrasses -raiyat -Raiidae -raiiform -ray-illumined -raying -rail -Raila -railage -Rayland -rail-bearing -rail-bending -railbird -railbirds -rail-bonding -rail-borne -railbus -railcar -railcars -rail-cutting -Rayle -railed -Rayleigh -railer -railers -rayless -raylessly -raylessness -raylet -railhead -railheads -raylike -railing -railingly -railings -ray-lit -rail-laying -raillery -railleries -railless -railleur -railly -raillike -railman -railmen -rail-ocean -rail-ridden -railriding -railroad -railroadana -railroaded -railroader -railroaders -railroadiana -railroading -railroadings -railroadish -railroads -railroadship -rails -rail-sawing -railside -rail-splitter -rail-splitting -railway -railway-borne -railwaydom -railwayed -railwayless -railwayman -railways -railway's -Raimannia -raiment -raimented -raimentless -raiments -Raimes -Raymond -Raimondi -Raimondo -Raymonds -Raymondville -Raymore -Raimund -Raymund -Raimundo -rain -Raina -Rayna -Rainah -Raynah -Raynard -Raynata -rain-awakened -rainband -rainbands -rain-bearing -rain-beat -rain-beaten -rainbird -rain-bird -rainbirds -rain-bitten -rain-bleared -rain-blue -rainbound -rainbow -rainbow-arched -rainbow-clad -rainbow-colored -rainbow-edged -rainbow-girded -rainbow-hued -rainbowy -rainbow-large -rainbowlike -rainbow-painted -Rainbows -rainbow-sided -rainbow-skirted -rainbow-tinted -rainbowweed -rainbow-winged -rain-bright -rainburst -raincheck -raincoat -raincoats -raincoat's -rain-damped -rain-drenched -rain-driven -raindrop -rain-dropping -raindrops -raindrop's -Raine -Rayne -rained -Raynell -Rainelle -Raynelle -Rainer -Rayner -Raines -Raynesford -rainfall -rainfalls -rainforest -rainfowl -rain-fowl -rain-fraught -rainful -Rainger -rain-god -rain-gutted -Raynham -rainy -Rainie -Rainier -rainiest -rainily -raininess -raining -rainless -rainlessness -rainlight -rainmaker -rainmakers -rainmaking -rainmakings -Raynold -Raynor -rainout -rainouts -rainproof -rainproofer -Rains -rain-scented -rain-soaked -rain-sodden -rain-soft -rainspout -rainsquall -rainstorm -rainstorms -rain-streaked -Rainsville -rain-swept -rain-threatening -raintight -rainwash -rain-washed -rainwashes -Rainwater -rain-water -rainwaters -rainwear -rainwears -rainworm -raioid -rayon -rayonnance -rayonnant -rayonne -rayonny -rayons -Rais -rays -ray's -raisable -Raysal -raise -raiseable -raised -raiseman -raiser -raisers -raises -Rayshell -raisin -raisin-colored -raisine -raising -raising-piece -raisings -raisiny -raisins -raison -raisonne -raisons -ray-strewn -Raytheon -Rayville -Raywick -Raywood -Raj -Raja -Rajab -Rajah -rajahs -rajarshi -rajas -rajaship -rajasic -Rajasthan -Rajasthani -rajbansi -rajeev -Rajendra -rajes -rajesh -Rajewski -Raji -Rajidae -Rajiv -Rajkot -raj-kumari -rajoguna -rajpoot -Rajput -Rajputana -rakan -Rakata -rake -rakeage -raked -rakee -rakees -rakeful -rakehell -rake-hell -rakehelly -rakehellish -rakehells -Rakel -rakely -rakeoff -rake-off -rakeoffs -raker -rakery -rakers -rakes -rakeshame -rakesteel -rakestele -rake-teeth -rakh -rakhal -raki -Rakia -rakija -rakily -raking -raking-down -rakingly -raking-over -rakis -rakish -rakishly -rakishness -rakishnesses -rakit -rakshasa -raku -Ralaigh -rale -Ralegh -Raleigh -rales -Ralf -Ralfston -Ralina -ralish -rall -rall. -Ralleigh -rallentando -rallery -Ralli -rally -ralliance -ralli-car -rallycross -Rallidae -rallye -rallied -rallier -ralliers -rallies -rallyes -ralliform -rallying -rallyings -rallyist -rallyists -rallymaster -Rallinae -ralline -Ralls -Rallus -Ralph -ralphed -ralphing -ralphs -rals -Ralston -ralstonite -RAM -Rama -Ramachandra -ramack -Ramada -Ramadan -ramadoss -Ramadoux -Ramage -Ramah -Ramayana -Ramaism -Ramaite -Ramakrishna -ramal -Raman -ramanan -Ramanandi -ramanas -Ramanujan -ramarama -ramark -ramass -ramate -Ramazan -Rambam -rambarre -rambeh -Ramberg -ramberge -Rambert -rambla -ramble -rambled -rambler -ramblers -rambles -ramble-scramble -rambling -ramblingly -ramblingness -ramblings -Rambo -rambong -rambooze -Rambort -Rambouillet -Rambow -rambunctious -rambunctiously -rambunctiousness -rambure -Ramburt -rambutan -rambutans -RAMC -ram-cat -ramdohrite -Rame -rameal -Ramean -Rameau -ramed -Ramee -ramees -Ramey -ramekin -ramekins -ramellose -rament -ramenta -ramentaceous -ramental -ramentiferous -ramentum -rameous -ramequin -ramequins -Ramer -Rameses -Rameseum -ramesh -Ramesse -Ramesses -Ramessid -Ramesside -ramet -ramets -ramex -ramfeezled -ramforce -ramgunshoch -ramhead -ram-headed -ramhood -rami -Ramiah -ramicorn -ramie -ramies -ramiferous -ramify -ramificate -ramification -ramifications -ramification's -ramified -ramifies -ramifying -ramiflorous -ramiform -ramigerous -ramilie -ramilies -Ramillie -Ramillied -Ramillies -Ramin -ramiparous -ramiro -ramisection -ramisectomy -Ramism -Ramist -Ramistical -ram-jam -ramjet -ramjets -ramlike -ramline -ram-line -rammack -rammage -Ramman -rammass -rammed -rammel -rammelsbergite -rammer -rammerman -rammermen -rammers -rammi -rammy -rammier -rammiest -ramming -rammish -rammishly -rammishness -Rammohun -ramneek -Ramnenses -Ramnes -Ramo -Ramon -Ramona -Ramonda -ramoneur -ramoon -Ramoosii -Ramos -ramose -ramosely -ramosity -ramosities -ramosopalmate -ramosopinnate -ramososubdivided -ramous -RAMP -rampacious -rampaciously -rampage -rampaged -rampageous -rampageously -rampageousness -rampager -rampagers -rampages -rampaging -rampagious -rampallion -rampancy -rampancies -rampant -rampantly -rampantness -rampart -ramparted -ramparting -ramparts -ramped -ramper -Ramphastidae -Ramphastides -Ramphastos -rampick -rampier -rampike -rampikes -ramping -rampingly -rampion -rampions -rampire -rampish -rampler -ramplor -rampole -rampoled -rampoles -rampoling -ramps -ramp's -rampsman -Rampur -ramrace -ramrod -ram-rod -ramroddy -ramrodlike -ramrods -ramrod-stiff -rams -ram's -Ramsay -ramscallion -ramsch -Ramsdell -Ramsden -Ramsey -Ramses -Ramseur -Ramsgate -ramshackle -ramshackled -ramshackleness -ramshackly -ramshorn -ram's-horn -ramshorns -ramson -ramsons -ramstam -ramstead -Ramstein -ramta -ramtil -ramtils -ramular -ramule -ramuliferous -ramulose -ramulous -ramulus -Ramunni -ramus -ramuscule -Ramusi -ramverse -Ramwat -RAN -Rana -ranal -Ranales -ranaria -ranarian -ranarium -Ranatra -Ranburne -Rancagua -Rance -rancel -Rancell -rancellor -rancelman -rancelmen -rancer -rances -rancescent -ranch -ranche -ranched -rancher -rancheria -rancherie -ranchero -rancheros -ranchers -ranches -Ranchester -Ranchi -ranching -ranchland -ranchlands -ranchless -ranchlike -ranchman -ranchmen -rancho -Ranchod -ranchos -ranchwoman -rancid -rancidify -rancidification -rancidified -rancidifying -rancidity -rancidities -rancidly -rancidness -rancidnesses -rancio -Rancocas -rancor -rancored -rancorous -rancorously -rancorousness -rancorproof -rancors -rancour -rancours -RAND -Randa -Randal -Randalia -Randall -Randallite -Randallstown -randan -randannite -randans -Randee -Randel -Randell -randem -Randene -rander -Randers -Randi -Randy -Randia -Randie -randier -randies -randiest -randiness -randing -randir -Randite -Randle -Randleman -Randlett -randn -Randolf -Randolph -random -randomish -randomization -randomizations -randomize -randomized -randomizer -randomizes -randomizing -random-jointed -randomly -randomness -randomnesses -randoms -randomwise -randon -randori -rands -Randsburg -rane -Ranee -ranees -Raney -Ranella -Ranere -ranforce -rang -rangale -rangatira -rangdoodles -Range -range-bred -ranged -rangefinder -rangeheads -rangey -Rangel -rangeland -rangelands -Rangeley -rangeless -Rangely -rangeman -rangemen -Ranger -rangers -rangership -ranges -rangework -rangy -rangier -rangiest -Rangifer -rangiferine -ranginess -ranginesses -ranging -rangle -rangler -Rangoon -rangpur -Rani -Rania -Ranice -ranid -Ranidae -ranids -Ranie -Ranier -raniferous -raniform -Ranina -Raninae -ranine -raninian -Ranique -ranis -Ranit -Ranita -Ranite -Ranitta -ranivorous -ranjit -Ranjiv -Rank -rank-and-filer -rank-brained -ranked -ranker -rankers -ranker's -rankest -ranket -rankett -rank-feeding -rank-growing -rank-grown -Rankin -Rankine -ranking -rankings -ranking's -rankish -rankle -rankled -rankles -rankless -rankly -rankling -ranklingly -rank-minded -rankness -ranknesses -rank-out -ranks -rank-scented -rank-scenting -ranksman -rank-smelling -ranksmen -rank-springing -rank-swelling -rank-tasting -rank-winged -rankwise -ranli -Rann -Ranna -rannel -ranny -rannigal -ranomer -ranomers -ranpike -ranpikes -Ranquel -ransack -ransacked -ransacker -ransackers -ransacking -ransackle -ransacks -ransel -Ransell -ranselman -ranselmen -ranses -ranseur -Ransom -ransomable -Ransome -ransomed -ransomer -ransomers -ransomfree -ransoming -ransomless -ransoms -Ransomville -Ranson -ranstead -rant -rantan -ran-tan -rantankerous -ranted -rantepole -ranter -Ranterism -ranters -ranty -ranting -rantingly -rantipole -rantism -rantize -rantock -rantoon -Rantoul -rantree -rants -rantum-scantum -ranula -ranular -ranulas -Ranunculaceae -ranunculaceous -Ranunculales -ranunculi -Ranunculus -ranunculuses -Ranzania -ranz-des-vaches -Ranzini -RAO -raob -RAOC -Raouf -Raoul -Raoulia -Rap -Rapaces -rapaceus -rapacious -rapaciously -rapaciousness -rapaciousnesses -rapacity -rapacities -Rapacki -rapakivi -Rapallo -Rapanea -Rapateaceae -rapateaceous -Rape -raped -rapeful -rapeye -rapely -Rapelje -rapeoil -raper -rapers -rapes -rapeseed -rapeseeds -rap-full -raphae -Raphael -Raphaela -Raphaelesque -Raphaelic -Raphaelism -Raphaelite -Raphaelitism -Raphaelle -raphany -raphania -Raphanus -raphe -raphes -Raphia -raphias -raphide -raphides -raphidiferous -raphidiid -Raphidiidae -Raphidodea -Raphidoidea -Raphine -Raphiolepis -raphis -raphus -rapic -rapid -rapidamente -Rapidan -rapid-changing -rapide -rapider -rapidest -rapid-fire -rapid-firer -rapid-firing -rapid-flying -rapid-flowing -rapid-footed -rapidity -rapidities -rapidly -rapid-mannered -rapidness -rapido -rapid-passing -rapid-running -rapids -rapid-speaking -rapid-transit -rapier -rapiered -rapier-like -rapier-proof -rapiers -rapilli -rapillo -rapine -rapiner -rapines -raping -rapinic -rapist -rapists -raploch -raport -Rapp -rappage -rapparee -rapparees -rappe -rapped -rappee -rappees -rappel -rappeling -rappelled -rappelling -rappels -rappen -rapper -rapper-dandies -rappers -rapping -rappini -Rappist -Rappite -rapport -rapporteur -rapports -rapprochement -rapprochements -raps -rap's -rapscallion -rapscallionism -rapscallionly -rapscallionry -rapscallions -rapt -raptatory -raptatorial -rapter -raptest -raptly -raptness -raptnesses -raptor -Raptores -raptorial -raptorious -raptors -raptril -rapture -rapture-bound -rapture-breathing -rapture-bursting -raptured -rapture-giving -raptureless -rapture-moving -rapture-ravished -rapture-rising -raptures -rapture's -rapture-smitten -rapture-speaking -rapture-touched -rapture-trembling -rapture-wrought -raptury -rapturing -rapturist -rapturize -rapturous -rapturously -rapturousness -raptus -Raquel -Raquela -raquet -raquette -RAR -rara -RARDE -Rarden -RARE -rarebit -rarebits -rare-bred -rared -raree-show -rarefaction -rarefactional -rarefactions -rarefactive -rare-featured -rare-felt -rarefy -rarefiable -rarefication -rarefied -rarefier -rarefiers -rarefies -rarefying -rare-gifted -Rareyfy -rarely -rareness -rarenesses -rare-painted -rare-qualitied -rarer -rareripe -rare-ripe -rareripes -rares -rare-seen -rare-shaped -rarest -rarety -rareties -rarety's -rariconstant -rariety -rarify -rarified -rarifies -rarifying -raring -rariora -rarish -Raritan -rarity -rarities -Rarotonga -Rarotongan -RARP -RAS -rasa -Rasalas -Rasalhague -rasamala -rasant -rasbora -rasboras -RASC -rascacio -Rascal -rascaldom -rascaless -rascalion -rascalism -rascality -rascalities -rascalize -rascally -rascallike -rascallion -rascalry -rascals -rascalship -rascasse -rasceta -rascette -rase -rased -Raseda -rasen -Rasenna -raser -rasers -rases -Raseta -rasgado -rash -rash-brain -rash-brained -rashbuss -rash-conceived -rash-embraced -rasher -rashers -rashes -rashest -rashful -rash-headed -rash-hearted -Rashi -Rashid -Rashida -Rashidi -Rashidov -rashing -rash-levied -rashly -rashlike -rash-minded -rashness -rashnesses -Rashomon -rash-pledged -rash-running -rash-spoken -Rasht -rash-thoughted -Rashti -Rasia -rasing -rasion -Rask -Raskin -Raskind -Raskolnik -Raskolniki -Raskolniks -Rasla -Rasmussen -rasoir -rason -rasophore -Rasores -rasorial -rasour -rasp -raspatory -raspatorium -raspberry -raspberriade -raspberries -raspberry-jam -raspberrylike -rasped -rasper -raspers -raspy -raspier -raspiest -raspiness -rasping -raspingly -raspingness -raspings -raspis -raspish -raspite -rasps -Rasputin -rassasy -rasse -Rasselas -rassle -rassled -rassles -rassling -Rastaban -Rastafarian -rastafarianism -raster -rasters -rasty -rastik -rastle -rastled -rastling -Rastus -Rasure -rasures -rat -rata -ratability -ratable -ratableness -ratably -ratafee -ratafees -ratafia -ratafias -ratal -ratals -ratan -ratanhia -ratany -ratanies -ratans -rataplan -rataplanned -rataplanning -rataplans -ratatat -rat-a-tat -ratatats -ratatat-tat -ratatouille -ratbag -ratbaggery -ratbite -ratcatcher -rat-catcher -ratcatching -ratch -ratchel -ratchelly -ratcher -ratches -ratchet -ratchety -ratchetlike -ratchets -ratchet-toothed -ratching -ratchment -Ratcliff -Ratcliffe -rat-colored -rat-deserted -rate -rateability -rateable -rateableness -rateably -rate-aided -rate-cutting -rated -rateen -rate-fixing -rat-eyed -ratel -rateless -ratels -ratement -ratemeter -ratepayer -ratepaying -rater -rate-raising -ratero -raters -rates -rate-setting -rat-faced -ratfink -ratfinks -ratfish -ratfishes -RATFOR -rat-gnawn -rath -Ratha -Rathaus -Rathauser -Rathbone -Rathdrum -rathe -rathed -rathely -Rathenau -ratheness -Rather -ratherest -ratheripe -rathe-ripe -ratherish -ratherly -rathest -ratheter -rathite -rathnakumar -rathole -ratholes -rathripe -rathskeller -rathskellers -Ratib -raticidal -raticide -raticides -raticocinator -ratify -ratifia -ratification -ratificationist -ratifications -ratified -ratifier -ratifiers -ratifies -ratifying -ratihabition -ratine -ratines -rat-infested -rating -ratings -rat-inhabited -ratio -ratiocinant -ratiocinate -ratiocinated -ratiocinates -ratiocinating -ratiocination -ratiocinations -ratiocinative -ratiocinator -ratiocinatory -ratiocinators -ratiometer -ration -rationable -rationably -rational -rationale -rationales -rationale's -rationalisation -rationalise -rationalised -rationaliser -rationalising -rationalism -rationalist -rationalistic -rationalistical -rationalistically -rationalisticism -rationalists -rationality -rationalities -rationalizable -rationalization -rationalizations -rationalize -rationalized -rationalizer -rationalizers -rationalizes -rationalizing -rationally -rationalness -rationals -rationate -rationed -rationing -rationless -rationment -rations -ratios -ratio's -Ratisbon -Ratitae -ratite -ratites -ratitous -ratiuncle -rat-kangaroo -rat-kangaroos -rat-killing -Ratlam -ratlike -ratlin -rat-lin -ratline -ratliner -ratlines -ratlins -RATO -Raton -ratoon -ratooned -ratooner -ratooners -ratooning -ratoons -ratos -ratproof -rat-ridden -rat-riddled -rats -rat's -ratsbane -ratsbanes -Ratskeller -rat-skin -rat's-tail -rat-stripper -rattage -rattail -rat-tail -rat-tailed -rattails -Rattan -rattans -rattaree -rat-tat -rat-tat-tat -rat-tattle -rattattoo -ratted -ratteen -ratteens -rattel -ratten -rattened -rattener -ratteners -rattening -rattens -ratter -rattery -ratters -ratti -ratty -rattier -rattiest -Rattigan -rat-tight -rattinet -ratting -rattingly -rattish -rattle -rattlebag -rattlebones -rattlebox -rattlebrain -rattlebrained -rattlebrains -rattlebush -rattle-bush -rattled -rattlehead -rattle-head -rattleheaded -rattlejack -rattlemouse -rattlenut -rattlepate -rattle-pate -rattlepated -rattlepod -rattleproof -rattler -rattleran -rattleroot -rattlers -rattlertree -rattles -rattleskull -rattleskulled -rattlesnake -rattlesnake-bite -rattlesnakes -rattlesnake's -rattlesome -rattletybang -rattlety-bang -rattle-top -rattletrap -rattletraps -rattleweed -rattlewort -rattly -rattling -rattlingly -rattlingness -rattlings -ratton -rattoner -rattons -rattoon -rattooned -rattooning -rattoons -Rattray -rattrap -rat-trap -rattraps -Rattus -ratwa -ratwood -Rauch -raucid -raucidity -raucity -raucities -raucorous -raucous -raucously -raucousness -raucousnesses -raught -raughty -raugrave -rauk -raukle -Raul -rauli -Raumur -raun -raunchy -raunchier -raunchiest -raunchily -raunchiness -raunge -raunpick -raupo -rauque -Rauraci -Raurich -Raurici -rauriki -Rausch -Rauschenburg -Rauschenbusch -Rauscher -Rauwolfia -ravage -ravaged -ravagement -ravager -ravagers -ravages -ravaging -Ravana -RAVC -rave -Raveaux -raved -ravehook -raveinelike -Ravel -raveled -raveler -ravelers -ravelin -raveling -ravelings -ravelins -ravelled -raveller -ravellers -ravelly -ravelling -ravellings -ravelment -ravelproof -ravels -Raven -Ravena -Ravenala -raven-black -Ravencliff -raven-colored -Ravendale -Ravenden -ravendom -ravenduck -ravened -Ravenel -Ravenelia -ravener -raveners -raven-feathered -raven-haired -ravenhood -ravening -raveningly -ravenings -ravenish -ravenlike -ravenling -Ravenna -ravenous -ravenously -ravenousness -ravenousnesses -raven-plumed -ravenry -Ravens -Ravensara -Ravensdale -ravenstone -Ravenswood -raven-toned -raven-torn -raven-tressed -ravenwise -Ravenwood -raver -ravery -ravers -raves -rave-up -Ravi -Ravia -Ravid -ravigote -ravigotes -ravin -ravinate -ravindran -ravindranath -ravine -ravined -raviney -ravinement -ravines -ravine's -raving -ravingly -ravings -Ravinia -ravining -ravins -ravioli -raviolis -ravish -ravished -ravishedly -ravisher -ravishers -ravishes -ravishing -ravishingly -ravishingness -ravishment -ravishments -ravison -ravissant -Raviv -Ravo -Ravonelle -raw -Rawalpindi -rawbone -raw-bone -rawboned -raw-boned -rawbones -raw-colored -Rawdan -Rawden -raw-devouring -Rawdin -Rawdon -raw-edged -rawer -rawest -raw-faced -raw-handed -rawhead -raw-head -raw-headed -rawhide -rawhided -rawhider -rawhides -rawhiding -rawin -rawing -rawins -rawinsonde -rawish -rawishness -rawky -Rawl -Rawley -rawly -Rawlings -Rawlins -Rawlinson -raw-looking -Rawlplug -raw-mouthed -rawness -rawnesses -rawnie -raw-nosed -raw-ribbed -raws -Rawson -Rawsthorne -raw-striped -raw-wool -rax -raxed -raxes -raxing -raze -razed -razee -razeed -razeeing -razees -razeing -razer -razers -razes -Razid -razing -razoo -razor -razorable -razorback -razor-back -razor-backed -razorbill -razor-bill -razor-billed -razor-bladed -razor-bowed -razor-cut -razored -razoredge -razor-edge -razor-edged -razorfish -razor-fish -razorfishes -razor-grinder -razoring -razor-keen -razor-leaved -razorless -razormaker -razormaking -razorman -razors -razor's -razor-shaped -razor-sharp -razor-sharpening -razor-shell -razorstrop -razor-tongued -razor-weaponed -razor-witted -Razoumofskya -razour -razz -razzberry -razzberries -razzed -razzer -razzes -razzia -razzing -razzle -razzle-dazzle -razzly -razzmatazz -RB -RB- -RBC -RBE -RBHC -RBI -RBOC -RBOR -rbound -RBT -RBTL -RC -RCA -RCAF -RCAS -RCB -RCC -RCCh -rcd -rcd. -RCF -RCH -rchauff -rchitect -RCI -RCL -rclame -RCLDN -RCM -RCMAC -RCMP -RCN -RCO -r-colour -RCP -rcpt -rcpt. -RCS -RCSC -RCT -RCU -RCVR -RCVS -RD -Rd. -RDA -RdAc -RDBMS -RDC -RDES -Rdesheimer -RDF -Rdhos -RDL -RDM -RDP -RDS -RDT -RDTE -RDX -RE -re- -'re -Re. -REA -reaal -reabandon -reabandoned -reabandoning -reabandons -reabbreviate -reabbreviated -reabbreviates -reabbreviating -reable -reabolish -reabolition -reabridge -reabridged -reabridging -reabsence -reabsent -reabsolve -reabsorb -reabsorbed -reabsorbing -reabsorbs -reabsorption -reabstract -reabstracted -reabstracting -reabstracts -reabuse -reaccede -reacceded -reaccedes -reacceding -reaccelerate -reaccelerated -reaccelerates -reaccelerating -reaccent -reaccented -reaccenting -reaccents -reaccentuate -reaccentuated -reaccentuating -reaccept -reacceptance -reaccepted -reaccepting -reaccepts -reaccess -reaccession -reacclaim -reacclimate -reacclimated -reacclimates -reacclimating -reacclimatization -reacclimatize -reacclimatized -reacclimatizes -reacclimatizing -reaccommodate -reaccommodated -reaccommodates -reaccommodating -reaccomodated -reaccompany -reaccompanied -reaccompanies -reaccompanying -reaccomplish -reaccomplishment -reaccord -reaccost -reaccount -reaccredit -reaccredited -reaccrediting -reaccredits -reaccrue -reaccumulate -reaccumulated -reaccumulates -reaccumulating -reaccumulation -reaccusation -reaccuse -reaccused -reaccuses -reaccusing -reaccustom -reaccustomed -reaccustoming -reaccustoms -Reace -reacetylation -reach -reachability -reachable -reachableness -reachably -reached -reacher -reacher-in -reachers -reaches -reachy -reachieve -reachieved -reachievement -reachieves -reachieving -reaching -reachless -reach-me-down -reach-me-downs -reacidify -reacidification -reacidified -reacidifying -reacknowledge -reacknowledged -reacknowledging -reacknowledgment -reacquaint -reacquaintance -reacquainted -reacquainting -reacquaints -reacquire -reacquired -reacquires -reacquiring -reacquisition -reacquisitions -react -re-act -reactance -reactant -reactants -reacted -reacting -reaction -reactional -reactionally -reactionary -reactionaries -reactionaryism -reactionariness -reactionary's -reactionarism -reactionarist -reactionism -reactionist -reaction-proof -reactions -reaction's -reactivate -reactivated -reactivates -reactivating -reactivation -reactivations -reactivator -reactive -reactively -reactiveness -reactivity -reactivities -reactology -reactological -reactor -reactors -reactor's -reacts -reactualization -reactualize -reactuate -reacuaintance -Read -readability -readabilities -readable -readableness -readably -readapt -readaptability -readaptable -readaptation -readapted -readaptiness -readapting -readaptive -readaptiveness -readapts -readd -readded -readdict -readdicted -readdicting -readdicts -readding -readdition -readdress -readdressed -readdresses -readdressing -readds -Reade -readept -Reader -readerdom -reader-off -readers -readership -readerships -Readfield -readhere -readhesion -Ready -ready-armed -ready-beaten -ready-bent -ready-braced -ready-built -ready-coined -ready-cooked -ready-cut -ready-dressed -readied -readier -readies -readiest -ready-formed -ready-for-wear -ready-furnished -ready-grown -ready-handed -readying -readily -readymade -ready-made -ready-mades -ready-mix -ready-mixed -ready-mounted -readiness -readinesses -Reading -readingdom -readings -Readington -ready-penned -ready-prepared -ready-reference -ready-sanded -ready-sensitized -ready-shapen -ready-starched -ready-typed -ready-tongued -ready-to-wear -Readyville -ready-winged -ready-witted -ready-wittedly -ready-wittedness -ready-worded -ready-written -readjourn -readjourned -readjourning -readjournment -readjournments -readjourns -readjudicate -readjudicated -readjudicating -readjudication -readjust -readjustable -readjusted -readjuster -readjusting -readjustment -readjustments -readjusts -readl -Readlyn -readmeasurement -readminister -readmiration -readmire -readmission -readmissions -readmit -readmits -readmittance -readmitted -readmitting -readopt -readopted -readopting -readoption -readopts -readorn -readorned -readorning -readornment -readorns -readout -readouts -readout's -reads -Readsboro -Readstown -Readus -readvance -readvancement -readvent -readventure -readvertency -readvertise -readvertised -readvertisement -readvertising -readvertize -readvertized -readvertizing -readvise -readvised -readvising -readvocate -readvocated -readvocating -readvocation -reaeration -reaffect -reaffection -reaffiliate -reaffiliated -reaffiliating -reaffiliation -reaffirm -reaffirmance -reaffirmation -reaffirmations -reaffirmed -reaffirmer -reaffirming -reaffirms -reaffix -reaffixed -reaffixes -reaffixing -reafflict -reafford -reafforest -reafforestation -reaffront -reaffusion -Reagan -reaganomics -Reagen -reagency -reagent -reagents -reaggravate -reaggravation -reaggregate -reaggregated -reaggregating -reaggregation -reaggressive -reagin -reaginic -reaginically -reagins -reagitate -reagitated -reagitating -reagitation -reagree -reagreement -Reahard -reak -reaks -real -realarm -realer -reales -realest -realestate -realgar -realgars -Realgymnasium -real-hearted -realia -realienate -realienated -realienating -realienation -realign -realigned -realigning -realignment -realignments -realigns -realisable -realisation -realise -realised -realiser -realisers -realises -realising -realism -realisms -realist -realistic -realistically -realisticize -realisticness -realists -realist's -reality -realities -Realitos -realive -realizability -realizable -realizableness -realizably -realization -realizations -realization's -realize -realized -realizer -realizers -realizes -realizing -realizingly -reallegation -reallege -realleged -realleging -reallegorize -really -re-ally -realliance -really-truly -reallocate -reallocated -reallocates -reallocating -reallocation -reallocations -reallot -reallotment -reallots -reallotted -reallotting -reallow -reallowance -reallude -reallusion -realm -realm-bounding -realm-conquering -realm-destroying -realm-governing -real-minded -realmless -realmlet -realm-peopling -realms -realm's -realm-subduing -realm-sucking -realm-unpeopling -realness -realnesses -Realpolitik -reals -Realschule -real-sighted -realter -realterable -realterableness -realterably -realteration -realtered -realtering -realters -realty -realties -real-time -Realtor -realtors -ream -reamage -reamalgamate -reamalgamated -reamalgamating -reamalgamation -reamass -reamassment -reambitious -reamed -reamend -reamendment -reamer -reamerer -Re-americanization -Re-americanize -reamers -Reames -Reamy -reaminess -reaming -reaming-out -Reamonn -reamputation -reams -Reamstown -reamuse -reanalyses -reanalysis -reanalyzable -reanalyze -reanalyzed -reanalyzely -reanalyzes -reanalyzing -reanchor -reanesthetize -reanesthetized -reanesthetizes -reanesthetizing -reanimalize -reanimate -reanimated -reanimates -reanimating -reanimation -reanimations -reanneal -reannex -reannexation -reannexed -reannexes -reannexing -reannoy -reannoyance -reannotate -reannotated -reannotating -reannotation -reannounce -reannounced -reannouncement -reannouncing -reanoint -reanointed -reanointing -reanointment -reanoints -reanswer -reantagonize -reantagonized -reantagonizing -reanvil -reanxiety -reap -reapable -reapdole -reaped -Reaper -reapers -reaphook -reaphooks -reaping -reapology -reapologies -reapologize -reapologized -reapologizing -reapparel -reapparition -reappeal -reappear -reappearance -reappearances -reappeared -reappearing -reappears -reappease -reapplaud -reapplause -reapply -reappliance -reapplicant -reapplication -reapplied -reapplier -reapplies -reapplying -reappoint -reappointed -reappointing -reappointment -reappointments -reappoints -reapportion -reapportioned -reapportioning -reapportionment -reapportionments -reapportions -reapposition -reappraisal -reappraisals -reappraise -reappraised -reappraisement -reappraiser -reappraises -reappraising -reappreciate -reappreciation -reapprehend -reapprehension -reapproach -reapproachable -reapprobation -reappropriate -reappropriated -reappropriating -reappropriation -reapproval -reapprove -reapproved -reapproves -reapproving -reaps -rear -rear- -rear-admiral -rearanged -rearanging -rear-arch -rearbitrate -rearbitrated -rearbitrating -rearbitration -rear-cut -Reardan -rear-directed -reardoss -rear-driven -rear-driving -reared -rear-end -rearer -rearers -rearguard -rear-guard -reargue -reargued -reargues -rearguing -reargument -rearhorse -rear-horse -rearii -rearing -rearisal -rearise -rearisen -rearising -rearly -rearling -rearm -rearmament -rearmed -rearmice -rearming -rearmost -rearmouse -rearms -rearose -rearousal -rearouse -rearoused -rearouses -rearousing -rearray -rearrange -rearrangeable -rearranged -rearrangement -rearrangements -rearrangement's -rearranger -rearranges -rearranging -rearrest -rearrested -rearresting -rearrests -rearrival -rearrive -rears -rear-steering -rearticulate -rearticulated -rearticulating -rearticulation -rear-vassal -rear-vault -rearward -rearwardly -rearwardness -rearwards -reascend -reascendancy -reascendant -reascended -reascendency -reascendent -reascending -reascends -reascension -reascensional -reascent -reascents -reascertain -reascertainment -reasearch -reashlar -reasy -reasiness -reask -Reasnor -reason -reasonability -reasonable -reasonableness -reasonablenesses -reasonably -reasonal -reasoned -reasonedly -reasoner -reasoners -reasoning -reasoningly -reasonings -reasonless -reasonlessly -reasonlessness -reasonlessured -reasonlessuring -reasonproof -reasons -reaspire -reassay -reassail -reassailed -reassailing -reassails -reassault -reassemblage -reassemble -reassembled -reassembles -reassembly -reassemblies -reassembling -reassent -reassert -reasserted -reasserting -reassertion -reassertor -reasserts -reassess -reassessed -reassesses -reassessing -reassessment -reassessments -reassessment's -reasseverate -reassign -reassignation -reassigned -reassigning -reassignment -reassignments -reassignment's -reassigns -reassimilate -reassimilated -reassimilates -reassimilating -reassimilation -reassist -reassistance -reassociate -reassociated -reassociates -reassociating -reassociation -reassort -reassorted -reassorting -reassortment -reassortments -reassorts -reassume -reassumed -reassumes -reassuming -reassumption -reassumptions -reassurance -reassurances -reassure -reassured -reassuredly -reassurement -reassurer -reassures -reassuring -reassuringly -reast -reasty -reastiness -reastonish -reastonishment -reastray -reata -reatas -reattach -reattachable -reattached -reattaches -reattaching -reattachment -reattachments -reattack -reattacked -reattacking -reattacks -reattain -reattained -reattaining -reattainment -reattains -reattempt -reattempted -reattempting -reattempts -reattend -reattendance -reattention -reattentive -reattest -reattire -reattired -reattiring -reattract -reattraction -reattribute -reattribution -reatus -reaudit -reaudition -Reaum -Reaumur -reaute -reauthenticate -reauthenticated -reauthenticating -reauthentication -reauthorization -reauthorize -reauthorized -reauthorizing -reavail -reavailable -reavails -Reave -reaved -reaver -reavery -reavers -reaves -reaving -reavoid -reavoidance -reavouch -reavow -reavowal -reavowed -reavowing -reavows -reawait -reawake -reawaked -reawaken -reawakened -reawakening -reawakenings -reawakenment -reawakens -reawakes -reawaking -reaward -reaware -reawoke -reawoken -Reb -Reba -rebab -reback -rebag -Rebah -rebait -rebaited -rebaiting -rebaits -Rebak -rebake -rebaked -rebaking -rebalance -rebalanced -rebalances -rebalancing -rebale -rebaled -rebaling -reballast -reballot -reballoted -reballoting -reban -rebandage -rebandaged -rebandaging -Rebane -rebanish -rebanishment -rebank -rebankrupt -rebankruptcy -rebaptism -rebaptismal -rebaptization -rebaptize -rebaptized -rebaptizer -rebaptizes -rebaptizing -rebar -rebarbarization -rebarbarize -rebarbative -rebarbatively -rebarbativeness -rebargain -rebase -rebasis -rebatable -rebate -rebateable -rebated -rebatement -rebater -rebaters -rebates -rebate's -rebathe -rebathed -rebathing -rebating -rebato -rebatos -rebawl -Rebba -rebbe -Rebbecca -rebbes -rebbred -Rebe -rebeamer -rebear -rebeat -rebeautify -rebec -Rebeca -Rebecca -Rebeccaism -Rebeccaites -rebeck -Rebecka -rebecks -rebecome -rebecs -rebed -rebeg -rebeget -rebeggar -rebegin -rebeginner -rebeginning -rebeguile -rebehold -rebeholding -Rebeka -Rebekah -Rebekkah -Rebel -rebeldom -rebeldoms -rebelief -rebelieve -rebelled -rebeller -rebelly -rebellike -rebelling -rebellion -rebellions -rebellion's -rebellious -rebelliously -rebelliousness -rebelliousnesses -rebellow -rebelong -rebelove -rebelproof -rebels -rebel's -rebemire -rebend -rebending -rebenediction -rebenefit -rebent -Rebersburg -rebeset -rebesiege -rebestow -rebestowal -rebetake -rebetray -rebewail -Rebhun -rebia -rebias -rebid -rebiddable -rebidden -rebidding -rebids -rebill -rebilled -rebillet -rebilling -rebills -rebind -rebinding -rebinds -rebirth -rebirths -rebite -reblade -reblame -reblast -rebleach -reblend -reblended -reblends -rebless -reblister -Reblochon -reblock -rebloom -rebloomed -reblooming -reblooms -reblossom -reblot -reblow -reblown -reblue -rebluff -reblunder -reboant -reboantic -reboard -reboarded -reboarding -reboards -reboast -reboation -rebob -rebody -rebodied -rebodies -reboil -reboiled -reboiler -reboiling -reboils -reboise -reboisement -reboke -rebold -rebolera -rebolt -rebone -rebook -re-book -rebooked -rebooks -reboot -rebooted -rebooting -reboots -rebop -rebops -rebore -rebored -rebores -reboring -reborn -reborrow -rebosa -reboso -rebosos -rebote -rebottle -rebought -Reboulia -rebounce -rebound -reboundable -reboundant -rebounded -rebounder -rebounding -reboundingness -rebounds -rebourbonize -rebox -rebozo -rebozos -rebrace -rebraced -rebracing -rebraid -rebranch -rebranched -rebranches -rebranching -rebrand -rebrandish -rebreathe -rebred -rebreed -rebreeding -rebrew -rebribe -rebrick -rebridge -rebrighten -rebring -rebringer -rebroach -rebroadcast -rebroadcasted -rebroadcasting -rebroadcasts -rebroaden -rebroadened -rebroadening -rebroadens -rebronze -rebrown -rebrush -rebrutalize -rebs -rebubble -Rebuck -rebuckle -rebuckled -rebuckling -rebud -rebudget -rebudgeted -rebudgeting -rebuff -re-buff -rebuffable -rebuffably -rebuffed -rebuffet -rebuffing -rebuffproof -rebuffs -rebuy -rebuying -rebuild -rebuilded -rebuilder -rebuilding -rebuilds -rebuilt -rebuys -rebukable -rebuke -rebukeable -rebuked -rebukeful -rebukefully -rebukefulness -rebukeproof -rebuker -rebukers -rebukes -rebuking -rebukingly -rebulk -rebunch -rebundle -rebunker -rebuoy -rebuoyage -reburden -reburgeon -rebury -reburial -reburials -reburied -reburies -reburying -reburn -reburnish -reburse -reburst -rebus -rebused -rebuses -rebush -rebusy -rebusing -rebut -rebute -rebutment -rebuts -rebuttable -rebuttably -rebuttal -rebuttals -rebutted -rebutter -rebutters -rebutting -rebutton -rebuttoned -rebuttoning -rebuttons -REC -recable -recabled -recabling -recadency -recado -recage -recaged -recaging -recalcination -recalcine -recalcitrance -recalcitrances -recalcitrancy -recalcitrancies -recalcitrant -recalcitrate -recalcitrated -recalcitrating -recalcitration -recalculate -recalculated -recalculates -recalculating -recalculation -recalculations -recalesce -recalesced -recalescence -recalescent -recalescing -recalibrate -recalibrated -recalibrates -recalibrating -recalibration -recalk -recall -recallability -recallable -recalled -recaller -recallers -recalling -recallist -recallment -recalls -recamera -Recamier -recampaign -recanalization -recancel -recanceled -recanceling -recancellation -recandescence -recandidacy -recane -recaned -recanes -recaning -recant -recantation -recantations -recanted -recanter -recanters -recanting -recantingly -recants -recanvas -recap -recapacitate -recapitalization -recapitalize -recapitalized -recapitalizes -recapitalizing -recapitulate -recapitulated -recapitulates -recapitulating -recapitulation -recapitulationist -recapitulations -recapitulative -recapitulator -recapitulatory -recappable -recapped -recapper -recapping -recaps -recaption -recaptivate -recaptivation -recaptor -recapture -recaptured -recapturer -recaptures -recapturing -recarbon -recarbonate -recarbonation -recarbonization -recarbonize -recarbonizer -recarburization -recarburize -recarburizer -recarnify -recarpet -recarry -recarriage -recarried -recarrier -recarries -recarrying -recart -recarve -recarved -recarving -recase -recash -recasket -recast -recaster -recasting -recasts -recatalog -recatalogue -recatalogued -recataloguing -recatch -recategorize -recategorized -recategorizing -recaulescence -recausticize -recaution -recce -recche -recchose -recchosen -reccy -recco -recd -rec'd -recede -re-cede -receded -recedence -recedent -receder -recedes -receding -receipt -receiptable -receipted -receipter -receipting -receiptless -receiptment -receiptor -receipts -receipt's -receivability -receivable -receivableness -receivables -receivablness -receival -receive -received -receivedness -receiver -receiver-general -receivers -receivership -receiverships -receives -receiving -recelebrate -recelebrated -recelebrates -recelebrating -recelebration -recement -recementation -recency -recencies -recense -recenserecit -recension -recensionist -recensor -recensure -recensus -Recent -recenter -recentest -recently -recentness -recentnesses -recentralization -recentralize -recentralized -recentralizing -recentre -recept -receptacle -receptacles -receptacle's -receptacula -receptacular -receptaculite -Receptaculites -receptaculitid -Receptaculitidae -receptaculitoid -receptaculum -receptant -receptary -receptibility -receptible -reception -receptionism -receptionist -receptionists -receptionreck -receptions -reception's -receptitious -receptive -receptively -receptiveness -receptivenesses -receptivity -receptivities -receptor -receptoral -receptorial -receptors -recepts -receptual -receptually -recercele -recercelee -recertify -recertificate -recertification -recertifications -recertified -recertifies -recertifying -recess -recessed -recesser -recesses -recessing -recession -recessional -recessionals -recessionary -recessions -recessive -recessively -recessiveness -recesslike -recessor -Rech -Recha -Rechaba -Rechabite -Rechabitism -rechafe -rechain -rechal -rechallenge -rechallenged -rechallenging -rechamber -rechange -rechanged -rechanges -rechanging -rechannel -rechanneled -rechanneling -rechannelling -rechannels -rechant -rechaos -rechar -recharge -rechargeable -recharged -recharger -recharges -recharging -rechart -recharted -recharter -rechartered -rechartering -recharters -recharting -recharts -rechase -rechaser -rechasten -rechate -rechauffe -rechauffes -rechaw -recheat -recheats -recheck -rechecked -rechecking -rechecks -recheer -recherch -recherche -rechew -rechewed -rechews -rechip -rechisel -rechoose -rechooses -rechoosing -rechose -rechosen -rechristen -rechristened -rechristening -rechristenings -rechristens -Re-christianize -rechuck -rechurn -recyclability -recyclable -recycle -recycled -recycler -recycles -recycling -recide -recidivate -recidivated -recidivating -recidivation -recidive -recidivism -recidivist -recidivistic -recidivists -recidivity -recidivous -Recife -recip -recipe -recipes -recipe's -recipiangle -recipiatur -recipience -recipiency -recipiend -recipiendary -recipiendum -recipient -recipients -recipient's -recipiomotor -reciprocable -reciprocal -reciprocality -reciprocalize -reciprocally -reciprocalness -reciprocals -reciprocant -reciprocantive -reciprocate -reciprocated -reciprocates -reciprocating -reciprocation -reciprocations -reciprocatist -reciprocative -reciprocator -reciprocatory -reciprocitarian -reciprocity -reciprocities -reciproque -recircle -recircled -recircles -recircling -recirculate -recirculated -recirculates -recirculating -recirculation -recirculations -recision -recisions -recission -recissory -Recit -recitable -recital -recitalist -recitalists -recitals -recital's -recitando -recitatif -recitation -recitationalism -recitationist -recitations -recitation's -recitative -recitatively -recitatives -recitativi -recitativical -recitativo -recitativos -recite -recited -recitement -reciter -reciters -recites -reciting -recivilization -recivilize -reck -recked -Reckford -recking -reckla -reckless -recklessly -recklessness -recklessnesses -reckling -Recklinghausen -reckon -reckonable -reckoned -reckoner -reckoners -reckoning -reckonings -reckons -recks -reclad -reclaim -re-claim -reclaimable -reclaimableness -reclaimably -reclaimant -reclaimed -reclaimer -reclaimers -reclaiming -reclaimless -reclaimment -reclaims -reclama -reclamation -reclamations -reclamatory -reclame -reclames -reclang -reclasp -reclasped -reclasping -reclasps -reclass -reclassify -reclassification -reclassifications -reclassified -reclassifies -reclassifying -reclean -recleaned -recleaner -recleaning -recleans -recleanse -recleansed -recleansing -reclear -reclearance -reclimb -reclimbed -reclimbing -reclinable -reclinant -reclinate -reclinated -reclination -recline -reclined -recliner -recliners -reclines -reclining -reclivate -reclosable -reclose -recloseable -reclothe -reclothed -reclothes -reclothing -reclude -recluse -reclusely -recluseness -reclusery -recluses -reclusion -reclusive -reclusiveness -reclusory -recoach -recoagulate -recoagulated -recoagulating -recoagulation -recoal -recoaled -recoaling -recoals -recoast -recoat -recock -recocked -recocking -recocks -recoct -recoction -recode -recoded -recodes -recodify -recodification -recodified -recodifies -recodifying -recoding -recogitate -recogitation -recognisable -recognise -recognised -recogniser -recognising -recognita -recognition -re-cognition -re-cognitional -recognitions -recognition's -recognitive -recognitor -recognitory -recognizability -recognizable -recognizably -recognizance -recognizances -recognizant -recognize -recognized -recognizedly -recognizee -recognizer -recognizers -recognizes -recognizing -recognizingly -recognizor -recognosce -recohabitation -recoil -re-coil -recoiled -recoiler -recoilers -recoiling -recoilingly -recoilless -recoilment -re-coilre-collect -recoils -recoin -recoinage -recoined -recoiner -recoining -recoins -recoke -recollapse -recollate -recollation -Recollect -re-collect -recollectable -recollected -recollectedly -recollectedness -recollectible -recollecting -recollection -re-collection -recollections -recollection's -recollective -recollectively -recollectiveness -recollects -Recollet -recolonisation -recolonise -recolonised -recolonising -recolonization -recolonize -recolonized -recolonizes -recolonizing -recolor -recoloration -recolored -recoloring -recolors -recolour -recolouration -recomb -recombed -recombinant -recombination -recombinational -recombinations -recombine -recombined -recombines -recombing -recombining -recombs -recomember -recomfort -recommand -recommence -recommenced -recommencement -recommencer -recommences -recommencing -recommend -re-commend -recommendability -recommendable -recommendableness -recommendably -recommendation -recommendations -recommendation's -recommendative -recommendatory -recommended -recommendee -recommender -recommenders -recommending -recommends -recommission -recommissioned -recommissioning -recommissions -recommit -recommiting -recommitment -recommits -recommittal -recommitted -recommitting -recommunicate -recommunion -recompact -recompare -recompared -recomparing -recomparison -recompass -recompel -recompence -recompensable -recompensate -recompensated -recompensating -recompensation -recompensatory -recompense -recompensed -recompenser -recompenses -recompensing -recompensive -recompete -recompetition -recompetitor -recompilation -recompilations -recompile -recompiled -recompilement -recompiles -recompiling -recomplain -recomplaint -recomplete -recompletion -recomply -recompliance -recomplicate -recomplication -recompose -recomposed -recomposer -recomposes -recomposing -recomposition -recompound -recompounded -recompounding -recompounds -recomprehend -recomprehension -recompress -recompression -recomputation -recompute -recomputed -recomputes -recomputing -RECON -reconceal -reconcealment -reconcede -reconceive -reconceived -reconceives -reconceiving -reconcentrado -reconcentrate -reconcentrated -reconcentrates -reconcentrating -reconcentration -reconception -reconcert -reconcession -reconcilability -reconcilable -reconcilableness -reconcilably -reconcile -reconciled -reconcilee -reconcileless -reconcilement -reconcilements -reconciler -reconcilers -reconciles -reconciliability -reconciliable -reconciliate -reconciliated -reconciliating -reconciliation -reconciliations -reconciliatiory -reconciliative -reconciliator -reconciliatory -reconciling -reconcilingly -reconclude -reconclusion -reconcoct -reconcrete -reconcur -recond -recondemn -recondemnation -recondensation -recondense -recondensed -recondenses -recondensing -recondite -reconditely -reconditeness -recondition -reconditioned -reconditioning -reconditions -reconditory -recondole -reconduct -reconduction -reconfer -reconferred -reconferring -reconfess -reconfide -reconfigurability -reconfigurable -reconfiguration -reconfigurations -reconfiguration's -reconfigure -reconfigured -reconfigurer -reconfigures -reconfiguring -reconfine -reconfined -reconfinement -reconfining -reconfirm -reconfirmation -reconfirmations -reconfirmed -reconfirming -reconfirms -reconfiscate -reconfiscated -reconfiscating -reconfiscation -reconform -reconfound -reconfront -reconfrontation -reconfuse -reconfused -reconfusing -reconfusion -recongeal -recongelation -recongest -recongestion -recongratulate -recongratulation -reconjoin -reconjunction -reconnaissance -reconnaissances -reconnect -reconnected -reconnecting -reconnection -reconnects -reconnoissance -reconnoiter -reconnoitered -reconnoiterer -reconnoitering -reconnoiteringly -reconnoiters -reconnoitre -reconnoitred -reconnoitrer -reconnoitring -reconnoitringly -reconquer -reconquered -reconquering -reconqueror -reconquers -reconquest -reconquests -recons -reconsecrate -reconsecrated -reconsecrates -reconsecrating -reconsecration -reconsecrations -reconsent -reconsider -reconsideration -reconsiderations -reconsidered -reconsidering -reconsiders -reconsign -reconsigned -reconsigning -reconsignment -reconsigns -reconsole -reconsoled -reconsolidate -reconsolidated -reconsolidates -reconsolidating -reconsolidation -reconsolidations -reconsoling -reconstituent -reconstitute -reconstituted -reconstitutes -reconstituting -reconstitution -reconstruct -reconstructed -reconstructible -reconstructing -Reconstruction -reconstructional -reconstructionary -Reconstructionism -Reconstructionist -reconstructions -reconstructive -reconstructively -reconstructiveness -reconstructor -reconstructs -reconstrue -reconsult -reconsultation -recontact -recontaminate -recontaminated -recontaminates -recontaminating -recontamination -recontemplate -recontemplated -recontemplating -recontemplation -recontend -reconter -recontest -recontested -recontesting -recontests -recontinuance -recontinue -recontract -recontracted -recontracting -recontraction -recontracts -recontrast -recontribute -recontribution -recontrivance -recontrive -recontrol -recontrolling -reconvalesce -reconvalescence -reconvalescent -reconvey -reconveyance -reconveyed -reconveying -reconveys -reconvene -reconvened -reconvenes -reconvening -reconvenire -reconvention -reconventional -reconverge -reconverged -reconvergence -reconverging -reconverse -reconversion -reconversions -reconvert -reconverted -reconvertible -reconverting -reconverts -reconvict -reconvicted -reconvicting -reconviction -reconvicts -reconvince -reconvoke -recook -recooked -recooking -recooks -recool -recooper -re-co-operate -re-co-operation -recopy -recopied -recopies -recopying -recopilation -recopyright -recopper -Recor -record -re-cord -recordable -recordance -recordant -recordation -recordative -recordatively -recordatory -record-bearing -record-beating -record-breaking -record-changer -Recorde -recorded -recordedly -recorder -recorders -recordership -recording -recordings -recordist -recordists -recordless -record-making -record-player -Records -record-seeking -record-setting -recordsize -recork -recorked -recorks -recoronation -recorporify -recorporification -recorrect -recorrection -recorrupt -recorruption -recost -recostume -recostumed -recostuming -recounsel -recounseled -recounseling -recount -re-count -recountable -recountal -recounted -recountenance -recounter -recounting -recountless -recountment -recounts -recoup -recoupable -recoupe -recouped -recouper -recouping -recouple -recoupled -recouples -recoupling -recoupment -recoups -recour -recours -recourse -recourses -recover -re-cover -recoverability -recoverable -recoverableness -recoverance -recovered -recoveree -recoverer -recovery -recoveries -recovering -recoveringly -recovery's -recoverless -recoveror -recovers -recpt -recrayed -recramp -recrank -recrate -recrated -recrates -recrating -recreance -recreancy -recreant -recreantly -recreantness -recreants -recrease -recreatable -recreate -re-create -recreated -re-created -recreates -recreating -re-creating -recreation -re-creation -recreational -recreationally -recreationist -recreations -recreative -re-creative -recreatively -recreativeness -recreator -re-creator -recreatory -recredential -recredit -recrement -recremental -recrementitial -recrementitious -recrescence -recrew -recriminate -recriminated -recriminates -recriminating -recrimination -recriminations -recriminative -recriminator -recriminatory -recrystallise -recrystallised -recrystallising -recrystallization -recrystallize -recrystallized -recrystallizes -recrystallizing -recriticize -recriticized -recriticizing -recroon -recrop -recross -recrossed -recrosses -recrossing -recrowd -recrown -recrowned -recrowning -recrowns -recrucify -recrudency -recrudesce -recrudesced -recrudescence -recrudescency -recrudescent -recrudesces -recrudescing -recruit -recruitable -recruitage -recruital -recruited -recruitee -recruiter -recruiters -recruithood -recruity -recruiting -recruitment -recruitments -recruitors -recruits -recruit's -recrush -recrusher -recs -Rect -rect- -rect. -recta -rectal -rectalgia -rectally -rectangle -rectangled -rectangles -rectangle's -rectangular -rectangularity -rectangularly -rectangularness -rectangulate -rectangulometer -rectectomy -rectectomies -recti -recti- -rectify -rectifiability -rectifiable -rectification -rectifications -rectificative -rectificator -rectificatory -rectified -rectifier -rectifiers -rectifies -rectifying -rectigrade -Rectigraph -rectilineal -rectilineally -rectilinear -rectilinearism -rectilinearity -rectilinearly -rectilinearness -rectilineation -rectinerved -rection -rectipetality -rectirostral -rectischiac -rectiserial -rectitic -rectitis -rectitude -rectitudes -rectitudinous -recto -recto- -rectoabdominal -rectocele -rectocystotomy -rectoclysis -rectococcygeal -rectococcygeus -rectocolitic -rectocolonic -rectogenital -rectopexy -rectophobia -rectoplasty -Rector -rectoral -rectorate -rectorates -rectoress -rectory -rectorial -rectories -rectorrhaphy -rectors -rector's -rectorship -Rectortown -rectos -rectoscope -rectoscopy -rectosigmoid -rectostenosis -rectostomy -rectotome -rectotomy -recto-urethral -recto-uterine -rectovaginal -rectovesical -rectress -rectrices -rectricial -rectrix -rectum -rectums -rectum's -rectus -recubant -recubate -recubation -recueil -recueillement -reculade -recule -recultivate -recultivated -recultivating -recultivation -recumb -recumbence -recumbency -recumbencies -recumbent -recumbently -recuperability -recuperance -recuperate -recuperated -recuperates -recuperating -recuperation -recuperations -recuperative -recuperativeness -recuperator -recuperatory -recuperet -recur -recure -recureful -recureless -recurl -recurred -recurrence -recurrences -recurrence's -recurrency -recurrent -recurrently -recurrer -recurring -recurringly -recurs -recursant -recurse -recursed -recurses -recursing -recursion -recursions -recursion's -recursive -recursively -recursiveness -recurtain -recurvant -recurvaria -recurvate -recurvated -recurvation -recurvature -recurve -recurved -recurves -recurving -Recurvirostra -recurvirostral -Recurvirostridae -recurvity -recurvo- -recurvopatent -recurvoternate -recurvous -recusal -recusance -recusancy -recusant -recusants -recusation -recusative -recusator -recuse -recused -recuses -recusf -recushion -recusing -recussion -recut -recuts -recutting -red -redact -redacted -redacteur -redacting -redaction -redactional -redactor -redactorial -redactors -redacts -red-alder -redamage -redamaged -redamaging -redamation -redame -redamnation -Redan -redans -redare -redared -redargue -redargued -redargues -redarguing -redargution -redargutive -redargutory -redaring -redarken -red-armed -redarn -Redart -Redash -redate -redated -redates -redating -redaub -redawn -redback -red-backed -redbay -redbays -redbait -red-bait -redbaited -redbaiting -red-baiting -redbaits -red-banded -Redbank -Redbanks -red-bar -red-barked -red-beaded -red-beaked -red-beamed -redbeard -red-bearded -redbelly -red-bellied -red-belted -redberry -red-berried -Redby -redbill -red-billed -redbird -redbirds -red-black -red-blind -red-blooded -red-bloodedness -red-bodied -red-boled -redbone -redbones -red-bonnet -red-bound -red-branched -red-branching -redbreast -red-breasted -redbreasts -redbrick -red-brick -redbricks -Redbridge -red-brown -redbrush -redbuck -redbud -redbuds -redbug -redbugs -red-burning -red-buttoned -redcap -redcaps -red-carpet -red-cheeked -red-chested -red-ciled -red-ciling -red-cilled -red-cilling -red-clad -red-clay -Redcliff -red-cloaked -red-clocked -redcoat -red-coat -red-coated -redcoats -red-cockaded -redcoll -red-collared -red-colored -red-combed -red-complexioned -Redcrest -red-crested -red-crowned -redcurrant -red-curtained -Redd -red-dabbled -redded -Reddell -redden -reddenda -reddendo -reddendum -reddened -reddening -reddens -redder -redders -reddest -Reddy -Reddick -red-dyed -Reddin -Redding -reddingite -reddish -reddish-amber -reddish-bay -reddish-bellied -reddish-black -reddish-blue -reddish-brown -reddish-colored -reddish-gray -reddish-green -reddish-haired -reddish-headed -reddish-yellow -reddishly -reddish-looking -reddishness -reddish-orange -reddish-purple -reddish-white -Redditch -reddition -redditive -reddle -reddled -reddleman -reddlemen -reddles -reddling -reddock -red-dog -red-dogged -red-dogger -red-dogging -redds -reddsman -redd-up -rede -redeal -redealing -redealt -redear -red-eared -redears -redebate -redebit -redecay -redeceive -redeceived -redeceiving -redecide -redecided -redeciding -redecimate -redecision -redeck -redeclaration -redeclare -redeclared -redeclares -redeclaring -redecline -redeclined -redeclining -redecorate -redecorated -redecorates -redecorating -redecoration -redecorator -redecrease -redecussate -reded -red-edged -rededicate -rededicated -rededicates -rededicating -rededication -rededications -rededicatory -rededuct -rededuction -redeed -redeem -redeemability -redeemable -redeemableness -redeemably -redeemed -redeemedness -Redeemer -redeemeress -redeemers -redeemership -redeeming -redeemless -redeems -redefault -redefeat -redefeated -redefeating -redefeats -redefecate -redefect -redefer -redefy -redefiance -redefied -redefies -redefying -redefine -redefined -redefines -redefining -redefinition -redefinitions -redefinition's -redeflect -Redeye -red-eye -red-eyed -redeyes -redeify -redelay -redelegate -redelegated -redelegating -redelegation -redeless -redelete -redeleted -redeleting -redely -redeliberate -redeliberated -redeliberating -redeliberation -redeliver -redeliverance -redelivered -redeliverer -redelivery -redeliveries -redelivering -redelivers -redemand -redemandable -redemanded -redemanding -redemands -redemise -redemised -redemising -redemolish -redemonstrate -redemonstrated -redemonstrates -redemonstrating -redemonstration -redemptible -Redemptine -redemption -redemptional -redemptioner -Redemptionist -redemptionless -redemptions -redemptive -redemptively -redemptor -redemptory -redemptorial -Redemptorist -redemptress -redemptrice -redeny -redenial -redenied -redenies -redenigrate -redenying -redepend -redeploy -redeployed -redeploying -redeployment -redeploys -redeposit -redeposited -redepositing -redeposition -redeposits -redepreciate -redepreciated -redepreciating -redepreciation -redeprive -rederivation -re-derive -redes -redescend -redescent -redescribe -redescribed -redescribes -redescribing -redescription -redesert -re-desert -redesertion -redeserve -redesign -redesignate -redesignated -redesignates -redesignating -redesignation -redesigned -redesigning -redesigns -redesire -redesirous -redesman -redespise -redetect -redetention -redetermination -redetermine -redetermined -redetermines -redeterminible -redetermining -redevable -redevelop -redeveloped -redeveloper -redevelopers -redeveloping -redevelopment -redevelopments -redevelops -redevise -redevote -redevotion -red-faced -red-facedly -red-facedness -red-feathered -Redfield -red-figure -red-figured -redfin -redfinch -red-finned -redfins -redfish -redfishes -red-flag -red-flagger -red-flaggery -red-flanked -red-flecked -red-fleshed -red-flowered -red-flowering -redfoot -red-footed -Redford -Redfox -red-fronted -red-fruited -red-gemmed -red-gilled -red-girdled -red-gleaming -red-gold -red-gowned -Redgrave -red-haired -red-hand -red-handed -red-handedly -redhandedness -red-handedness -red-hard -red-harden -red-hardness -red-hat -red-hatted -redhead -red-head -redheaded -red-headed -redheadedly -redheadedness -redhead-grass -redheads -redheart -redhearted -red-heeled -redhibition -redhibitory -red-hipped -red-hissing -red-hooded -Redhook -redhoop -red-horned -redhorse -redhorses -red-hot -red-hued -red-humped -redia -rediae -redial -redias -redictate -redictated -redictating -redictation -redid -redye -redyed -redyeing -red-yellow -redient -redyes -redifferentiate -redifferentiated -redifferentiating -redifferentiation -rediffuse -rediffused -rediffusing -Rediffusion -Redig -redigest -redigested -redigesting -redigestion -redigests -redigitalize -redying -redilate -redilated -redilating -redimension -redimensioned -redimensioning -redimensions -rediminish -reding -redingote -red-ink -redintegrate -redintegrated -redintegrating -redintegration -redintegrative -redintegrator -redip -redipped -redipper -redipping -redips -redipt -redirect -redirected -redirecting -redirection -redirections -redirects -redisable -redisappear -redisburse -redisbursed -redisbursement -redisbursing -redischarge -redischarged -redischarging -rediscipline -redisciplined -redisciplining -rediscount -rediscountable -rediscounted -rediscounting -rediscounts -rediscourage -rediscover -rediscovered -rediscoverer -rediscovery -rediscoveries -rediscovering -rediscovers -rediscuss -rediscussion -redisembark -redisinfect -redismiss -redismissal -redispatch -redispel -redispersal -redisperse -redispersed -redispersing -redisplay -redisplayed -redisplaying -redisplays -redispose -redisposed -redisposing -redisposition -redispute -redisputed -redisputing -redissect -redissection -redisseise -redisseisin -redisseisor -redisseize -redisseizin -redisseizor -redissoluble -redissolubleness -redissolubly -redissolution -redissolvable -redissolve -redissolved -redissolves -redissolving -redistend -redistill -redistillable -redistillableness -redistillabness -redistillation -redistilled -redistiller -redistilling -redistills -redistinguish -redistrain -redistrainer -redistribute -redistributed -redistributer -redistributes -redistributing -redistribution -redistributionist -redistributions -redistributive -redistributor -redistributory -redistrict -redistricted -redistricting -redistricts -redisturb -redition -redive -rediversion -redivert -redivertible -redivide -redivided -redivides -redividing -redivision -redivive -redivivous -redivivus -redivorce -redivorced -redivorcement -redivorcing -redivulge -redivulgence -redjacket -red-jerseyed -Redkey -red-kneed -redknees -red-knobbed -Redlands -red-lead -red-leader -red-leaf -red-leather -red-leaved -Redleg -red-legged -redlegs -red-legs -red-letter -red-lettered -redly -red-lidded -red-light -redline -redlined -red-lined -redlines -redlining -Redlion -red-lipped -red-listed -red-lit -red-litten -red-looking -red-making -Redman -Redmer -red-minded -Redmon -Redmond -redmouth -red-mouthed -Redmund -red-naped -redneck -red-neck -red-necked -rednecks -redness -rednesses -red-nosed -redo -re-do -redock -redocked -redocket -redocketed -redocketing -redocking -redocks -redocument -redodid -redodoing -redodone -redoes -redoing -redolence -redolences -redolency -redolent -redolently -redominate -redominated -redominating -Redon -redondilla -Redondo -redone -redonned -redons -redoom -red-orange -redos -redouble -redoubled -redoublement -redoubler -redoubles -redoubling -redoubt -redoubtable -redoubtableness -redoubtably -redoubted -redoubting -redoubts -redound -redounded -redounding -redounds -redout -red-out -redoute -redouts -redowa -redowas -Redowl -redox -redoxes -red-painted -red-pencil -red-plowed -red-plumed -redpoll -red-polled -redpolls -red-purple -redraft -redrafted -redrafting -redrafts -redrag -redrape -redraw -redrawer -redrawers -redrawing -redrawn -redraws -redream -redreams -redreamt -redredge -redress -re-dress -redressable -redressal -redressed -redresser -redresses -redressible -redressing -redressive -redressless -redressment -redressor -redrew -redry -red-ribbed -redried -redries -redrying -redrill -redrilled -redrilling -redrills -red-rimmed -red-ripening -redrive -redriven -redrives -redriving -red-roan -Redrock -Redroe -red-roofed -redroop -redroot -red-rooted -redroots -red-rose -redrove -redrug -redrugged -redrugging -red-rumped -red-rusted -reds -red-scaled -red-scarlet -redsear -red-shafted -redshank -red-shank -redshanks -redshift -redshire -redshirt -redshirted -red-shirted -redshirting -redshirts -red-short -red-shortness -red-shouldered -red-sided -red-silk -redskin -red-skinned -redskins -red-snooded -red-specked -red-speckled -red-spotted -red-stalked -Redstar -redstart -redstarts -Redstone -redstreak -red-streak -red-streaked -red-streaming -red-swelling -redtab -redtail -red-tailed -red-tape -red-taped -red-tapedom -red-tapey -red-tapeism -red-taper -red-tapery -red-tapish -redtapism -red-tapism -red-tapist -red-tempered -red-thighed -redthroat -red-throat -red-throated -red-tiled -red-tinted -red-tipped -red-tongued -redtop -red-top -red-topped -redtops -red-trousered -red-tufted -red-twigged -redub -redubbed -redubber -redubs -reduccion -reduce -reduceable -reduceableness -reduced -reducement -reducent -reducer -reducers -reduces -reducibility -reducibilities -reducible -reducibleness -reducibly -reducing -reduct -reductant -reductase -reductibility -reductio -reduction -reductional -reduction-improbation -reductionism -reductionist -reductionistic -reductions -reduction's -reductive -reductively -reductivism -reductor -reductorial -redue -redug -reduit -Redunca -redundance -redundances -redundancy -redundancies -redundant -redundantly -red-up -red-upholstered -redupl -redupl. -reduplicate -reduplicated -reduplicating -reduplication -reduplicative -reduplicatively -reduplicatory -reduplicature -redust -reduviid -Reduviidae -reduviids -reduvioid -Reduvius -redux -reduzate -Redvale -red-veined -red-vented -Redvers -red-vested -red-violet -Redway -red-walled -redward -redware -redwares -red-wat -Redwater -red-water -red-wattled -red-waved -redweed -red-white -Redwine -Redwing -red-winged -redwings -redwithe -redwood -red-wooded -redwoods -red-written -redwud -Ree -reearn -re-earn -reearned -reearning -reearns -Reeba -reebok -re-ebullient -Reece -reechy -reechier -reecho -re-echo -reechoed -reechoes -reechoing -Reed -Reeda -reed-back -reedbird -reedbirds -reed-blade -reed-bordered -reedbuck -reedbucks -reedbush -reed-clad -reed-compacted -reed-crowned -Reede -reeded -reeden -Reeder -Reeders -reed-grown -Reedy -reediemadeasy -reedier -reediest -reedify -re-edify -re-edificate -re-edification -reedified -re-edifier -reedifies -reedifying -reedily -reediness -reeding -reedings -reedish -reedit -re-edit -reedited -reediting -reedition -reedits -Reedley -reedless -reedlike -reedling -reedlings -reed-mace -reedmaker -reedmaking -reedman -reedmen -reedplot -reed-rond -reed-roofed -reed-rustling -Reeds -reed's -Reedsburg -reed-shaped -Reedsport -Reedsville -reed-thatched -reeducate -re-educate -reeducated -reeducates -reeducating -reeducation -re-education -reeducative -re-educative -Reedville -reed-warbler -reedwork -Reef -reefable -reefed -reefer -reefers -re-effeminate -reeffish -reeffishes -reefy -reefier -reefiest -reefing -reef-knoll -reef-knot -reefs -re-egg -Reeher -re-ejaculate -reeject -re-eject -reejected -reejecting -re-ejection -re-ejectment -reejects -reek -reeked -reeker -reekers -reeky -reekier -reekiest -reeking -reekingly -reeks -Reel -reelable -re-elaborate -re-elaboration -reelect -re-elect -reelected -reelecting -reelection -re-election -reelections -reelects -reeled -reeledid -reeledoing -reeledone -reeler -reelers -reelevate -re-elevate -reelevated -reelevating -reelevation -re-elevation -reel-fed -reel-fitted -reel-footed -reeligibility -re-eligibility -reeligible -re-eligible -reeligibleness -reeligibly -re-eliminate -re-elimination -reeling -reelingly -reelrall -reels -Reelsville -reel-to-reel -reem -reemanate -re-emanate -reemanated -reemanating -reembarcation -reembark -re-embark -reembarkation -re-embarkation -reembarked -reembarking -reembarks -re-embarrass -re-embarrassment -re-embattle -re-embed -reembellish -re-embellish -reembody -re-embody -reembodied -reembodies -reembodying -reembodiment -re-embodiment -re-embosom -reembrace -re-embrace -reembraced -re-embracement -reembracing -reembroider -re-embroil -reemerge -re-emerge -reemerged -reemergence -re-emergence -reemergences -reemergent -re-emergent -reemerges -reemerging -reemersion -re-emersion -re-emigrant -reemigrate -re-emigrate -reemigrated -reemigrating -reemigration -re-emigration -reeming -reemish -reemission -re-emission -reemit -re-emit -reemits -reemitted -reemitting -reemphases -reemphasis -re-emphasis -reemphasize -re-emphasize -reemphasized -reemphasizes -reemphasizing -reemploy -re-employ -reemployed -reemploying -reemployment -re-employment -reemploys -re-empower -re-empty -re-emulsify -reen -Reena -reenable -re-enable -reenabled -reenact -re-enact -reenacted -reenacting -reenaction -re-enaction -reenactment -re-enactment -reenactments -reenacts -re-enamel -re-enamor -re-enamour -re-enchain -reenclose -re-enclose -reenclosed -reencloses -reenclosing -re-enclosure -reencounter -re-encounter -reencountered -reencountering -reencounters -reencourage -re-encourage -reencouraged -reencouragement -re-encouragement -reencouraging -re-endear -re-endearment -re-ender -reendorse -re-endorse -reendorsed -reendorsement -re-endorsement -reendorsing -reendow -re-endow -reendowed -reendowing -reendowment -re-endowment -reendows -reenergize -re-energize -reenergized -reenergizes -reenergizing -re-enfeoff -re-enfeoffment -reenforce -re-enforce -reenforced -reenforcement -re-enforcement -re-enforcer -reenforces -reenforcing -re-enfranchise -re-enfranchisement -reengage -re-engage -reengaged -reengagement -re-engagement -reengages -reengaging -reenge -re-engender -re-engenderer -re-engine -Re-english -re-engraft -reengrave -re-engrave -reengraved -reengraving -re-engraving -reengross -re-engross -re-enhearten -reenjoy -re-enjoy -reenjoyed -reenjoying -reenjoyment -re-enjoyment -reenjoin -re-enjoin -reenjoys -re-enkindle -reenlarge -re-enlarge -reenlarged -reenlargement -re-enlargement -reenlarges -reenlarging -reenlighted -reenlighten -re-enlighten -reenlightened -reenlightening -reenlightenment -re-enlightenment -reenlightens -reenlist -re-enlist -reenlisted -re-enlister -reenlisting -reenlistment -re-enlistment -reenlistments -reenlistness -reenlistnesses -reenlists -re-enliven -re-ennoble -reenroll -re-enroll -re-enrollment -re-enshrine -reenslave -re-enslave -reenslaved -reenslavement -re-enslavement -reenslaves -reenslaving -re-ensphere -reenter -re-enter -reenterable -reentered -reentering -re-entering -reenters -re-entertain -re-entertainment -re-enthral -re-enthrone -re-enthronement -re-enthronize -re-entice -re-entitle -re-entoil -re-entomb -re-entrain -reentrance -re-entrance -reentranced -reentrances -reentrancy -re-entrancy -reentrancing -reentrant -re-entrant -re-entrenchment -reentry -re-entry -reentries -reenumerate -re-enumerate -reenumerated -reenumerating -reenumeration -re-enumeration -reenunciate -re-enunciate -reenunciated -reenunciating -reenunciation -re-enunciation -reeper -re-epitomize -re-equilibrate -re-equilibration -reequip -re-equip -re-equipment -reequipped -reequipping -reequips -reequipt -reerect -re-erect -reerected -reerecting -reerection -re-erection -reerects -reerupt -reeruption -Rees -re-escape -re-escort -Reese -Reeseville -reeshie -reeshle -reesk -reesle -re-espousal -re-espouse -re-essay -reest -reestablish -re-establish -reestablished -re-establisher -reestablishes -reestablishing -reestablishment -re-establishment -reestablishments -reested -re-esteem -reester -reesty -reestimate -re-estimate -reestimated -reestimates -reestimating -reestimation -re-estimation -reesting -reestle -reests -Reesville -reet -Reeta -reetam -re-etch -re-etcher -reetle -Reeva -reevacuate -re-evacuate -reevacuated -reevacuating -reevacuation -re-evacuation -re-evade -reevaluate -re-evaluate -reevaluated -reevaluates -reevaluating -reevaluation -re-evaluation -reevaluations -re-evaporate -re-evaporation -reevasion -re-evasion -Reeve -reeved -reeveland -Reeves -reeveship -Reevesville -reevidence -reevidenced -reevidencing -reeving -reevoke -re-evoke -reevoked -reevokes -reevoking -re-evolution -re-exalt -re-examinable -reexamination -re-examination -reexaminations -reexamine -re-examine -reexamined -re-examiner -reexamines -reexamining -reexcavate -re-excavate -reexcavated -reexcavating -reexcavation -re-excavation -re-excel -reexchange -re-exchange -reexchanged -reexchanges -reexchanging -re-excitation -re-excite -re-exclude -re-exclusion -reexecute -re-execute -reexecuted -reexecuting -reexecution -re-execution -re-exempt -re-exemption -reexercise -re-exercise -reexercised -reexercising -re-exert -re-exertion -re-exhale -re-exhaust -reexhibit -re-exhibit -reexhibited -reexhibiting -reexhibition -re-exhibition -reexhibits -re-exhilarate -re-exhilaration -re-exist -re-existence -re-existent -reexpand -re-expand -reexpansion -re-expansion -re-expect -re-expectation -re-expedite -re-expedition -reexpel -re-expel -reexpelled -reexpelling -reexpels -reexperience -re-experience -reexperienced -reexperiences -reexperiencing -reexperiment -re-experiment -reexplain -re-explain -reexplanation -re-explanation -reexplicate -reexplicated -reexplicating -reexplication -reexploration -reexplore -reexplored -reexploring -reexport -re-export -reexportation -re-exportation -reexported -reexporter -re-exporter -reexporting -reexports -reexpose -re-expose -reexposed -reexposing -reexposition -reexposure -re-exposure -re-expound -reexpress -re-express -reexpressed -reexpresses -reexpressing -reexpression -re-expression -re-expulsion -re-extend -re-extension -re-extent -re-extract -re-extraction -ref -ref. -refabricate -refabrication -reface -refaced -refaces -refacilitate -refacing -refaction -refait -refall -refallen -refalling -refallow -refalls -refamiliarization -refamiliarize -refamiliarized -refamiliarizing -refan -refascinate -refascination -refashion -refashioned -refashioner -refashioning -refashionment -refashions -refasten -refastened -refastening -refastens -refathered -refavor -refect -refected -refecting -refection -refectionary -refectioner -refective -refectorary -refectorarian -refectorer -refectory -refectorial -refectorian -refectories -refects -refed -refederalization -refederalize -refederalized -refederalizing -refederate -refederated -refederating -refederation -refeed -refeeding -refeeds -refeel -refeeling -refeels -refeign -refel -refell -refelled -refelling -refels -refelt -refence -refenced -refences -refer -referable -referda -refered -referee -refereed -refereeing -referees -refereeship -reference -referenced -referencer -references -referencing -referenda -referendal -referendary -referendaries -referendaryship -referendum -referendums -referent -referential -referentiality -referentially -referently -referents -referent's -referment -referrable -referral -referrals -referral's -referred -referrer -referrers -referrible -referribleness -referring -refers -refertilizable -refertilization -refertilize -refertilized -refertilizing -refetch -refete -reffed -reffelt -reffing -reffo -reffos -reffroze -reffrozen -refight -refighting -refights -refigure -refigured -refigures -refiguring -refile -refiled -refiles -refiling -refill -refillable -refilled -refilling -refills -refilm -refilmed -refilming -refilms -refilter -refiltered -refiltering -refilters -refinable -refinage -refinance -refinanced -refinances -refinancing -refind -refinding -refinds -refine -refined -refinedly -refinedness -refinement -refinements -refinement's -refiner -refinery -refineries -refiners -refines -refinger -refining -refiningly -refinish -refinished -refinisher -refinishes -refinishing -refire -refired -refires -refiring -refit -refitment -refits -refitted -refitting -refix -refixation -refixed -refixes -refixing -refixture -refl -refl. -reflag -reflagellate -reflair -reflame -reflash -reflate -reflated -reflates -reflating -reflation -reflationary -reflationism -reflect -reflectance -reflected -reflectedly -reflectedness -reflectent -reflecter -reflectibility -reflectible -reflecting -reflectingly -reflection -reflectional -reflectioning -reflectionist -reflectionless -reflections -reflection's -reflective -reflectively -reflectiveness -reflectivity -reflectometer -reflectometry -reflector -reflectorize -reflectorized -reflectorizing -reflectors -reflector's -reflectoscope -reflects -refledge -reflee -reflet -reflets -reflew -Reflex -reflexed -reflexes -reflexibility -reflexible -reflexing -reflexion -reflexional -reflexism -reflexiue -reflexive -reflexively -reflexiveness -reflexivenesses -reflexives -reflexivity -reflexly -reflexness -reflexogenous -reflexology -reflexological -reflexologically -reflexologies -reflexologist -reflex's -refly -reflies -reflying -refling -refloat -refloatation -refloated -refloating -refloats -reflog -reflood -reflooded -reflooding -refloods -refloor -reflorescence -reflorescent -reflourish -reflourishment -reflow -reflowed -reflower -reflowered -reflowering -reflowers -reflowing -reflown -reflows -refluctuation -refluence -refluency -refluent -refluous -reflush -reflux -refluxed -refluxes -refluxing -refocillate -refocillation -refocus -refocused -refocuses -refocusing -refocussed -refocusses -refocussing -refold -refolded -refolding -refolds -refoment -refont -refool -refoot -reforbid -reforce -reford -reforecast -reforest -reforestation -reforestational -reforested -reforesting -reforestization -reforestize -reforestment -reforests -reforfeit -reforfeiture -reforge -reforgeable -reforged -reforger -reforges -reforget -reforging -reforgive -Reform -re-form -reformability -reformable -reformableness -reformado -reformanda -reformandum -reformat -reformate -reformated -Reformati -reformating -Reformation -re-formation -reformational -reformationary -Reformationism -Reformationist -reformation-proof -reformations -reformative -re-formative -reformatively -reformativeness -reformatness -reformatory -reformatories -reformats -reformatted -reformatting -Reformed -reformedly -reformer -re-former -reformeress -reformers -reforming -reformingly -reformism -reformist -reformistic -reformproof -reforms -reformulate -reformulated -reformulates -reformulating -reformulation -reformulations -reforsake -refortify -refortification -refortified -refortifies -refortifying -reforward -refought -refound -refoundation -refounded -refounder -refounding -refounds -refr -refract -refractable -refractary -refracted -refractedly -refractedness -refractile -refractility -refracting -refraction -refractional -refractionate -refractionist -refractions -refractive -refractively -refractiveness -refractivity -refractivities -refractometer -refractometry -refractometric -refractor -refractory -refractories -refractorily -refractoriness -refractors -refracts -refracturable -refracture -refractured -refractures -refracturing -refragability -refragable -refragableness -refragate -refragment -refrain -refrained -refrainer -refraining -refrainment -refrainments -refrains -reframe -reframed -reframes -reframing -refrangent -refrangibility -refrangibilities -refrangible -refrangibleness -refreeze -refreezes -refreezing -refreid -refreit -refrenation -refrenzy -refresco -refresh -refreshant -refreshed -refreshen -refreshener -refresher -refreshers -refreshes -refreshful -refreshfully -refreshing -refreshingly -refreshingness -refreshment -refreshments -refreshment's -refry -refricate -refried -refries -refrig -refrigerant -refrigerants -refrigerate -refrigerated -refrigerates -refrigerating -refrigeration -refrigerations -refrigerative -refrigerator -refrigeratory -refrigerators -refrigerator's -refrigerium -refrighten -refrying -refringe -refringence -refringency -refringent -refroid -refront -refronted -refronting -refronts -refroze -refrozen -refrustrate -refrustrated -refrustrating -refs -reft -Refton -refuel -refueled -refueling -refuelled -refuelling -refuels -refuge -refuged -refugee -refugeeism -refugees -refugee's -refugeeship -refuges -refugia -refuging -Refugio -refugium -refulge -refulgence -refulgency -refulgent -refulgently -refulgentness -refunction -refund -re-fund -refundability -refundable -refunded -refunder -refunders -refunding -refundment -refunds -refurbish -refurbished -refurbisher -refurbishes -refurbishing -refurbishment -refurl -refurnish -refurnished -refurnishes -refurnishing -refurnishment -refusable -refusal -refusals -refuse -refused -refusenik -refuser -refusers -refuses -refusing -refusingly -refusion -refusive -refusnik -refutability -refutable -refutably -refutal -refutals -refutation -refutations -refutative -refutatory -refute -refuted -refuter -refuters -refutes -refuting -Reg -Reg. -Regain -regainable -regained -regainer -regainers -regaining -regainment -regains -regal -regalado -regald -regale -Regalecidae -Regalecus -regaled -regalement -regalements -regaler -regalers -regales -regalia -regalian -regaling -regalio -regalism -regalist -regality -regalities -regalize -regally -regallop -regalness -regalo -regalty -regalvanization -regalvanize -regalvanized -regalvanizing -regamble -regambled -regambling -Regan -regard -regardable -regardance -regardancy -regardant -regarded -regarder -regardful -regardfully -regardfulness -regarding -regardless -regardlessly -regardlessness -regards -regarment -regarnish -regarrison -regather -regathered -regathering -regathers -regatta -regattas -regauge -regauged -regauges -regauging -regave -Regazzi -regd -regear -regeared -regearing -regears -regel -regelate -regelated -regelates -regelating -regelation -regelled -regelling -Regen -Regence -Regency -regencies -regenerable -regeneracy -regenerance -regenerant -regenerate -regenerated -regenerately -regenerateness -regenerates -regenerating -regeneration -regenerations -regenerative -regeneratively -regenerator -regeneratory -regenerators -regeneratress -regeneratrix -regenesis -re-genesis -Regensburg -regent -regental -regentess -regents -regent's -regentship -Reger -Re-germanization -Re-germanize -regerminate -regerminated -regerminates -regerminating -regermination -regerminative -regerminatively -reges -regest -reget -Regga -reggae -reggaes -Reggi -Reggy -Reggiano -Reggie -Reggis -regia -regian -regicidal -regicide -regicides -regicidism -regidor -regie -regie-book -regift -regifuge -regild -regilded -regilding -regilds -regill -regilt -regime -regimen -regimenal -regimens -regiment -regimental -regimentaled -regimentalled -regimentally -regimentals -regimentary -regimentation -regimentations -regimented -regimenting -regiments -regimes -regime's -regiminal -Regin -Regina -reginae -reginal -Reginald -reginas -Reginauld -Regine -regioide -Regiomontanus -region -regional -regionalism -regionalist -regionalistic -regionalization -regionalize -regionalized -regionalizing -regionally -regionals -regionary -regioned -regions -region's -regird -REGIS -regisseur -regisseurs -Register -registerable -registered -registerer -registering -registers -registership -registrability -registrable -registral -registrant -registrants -registrar -registrar-general -registrary -registrars -registrarship -registrate -registrated -registrating -registration -registrational -registrationist -registrations -registration's -registrator -registrer -registry -registries -regitive -regius -regive -regiven -regives -regiving -regladden -reglair -reglaze -reglazed -reglazes -reglazing -regle -reglement -reglementary -reglementation -reglementist -reglet -reglets -reglorify -reglorification -reglorified -reglorifying -regloss -reglossed -reglosses -reglossing -reglove -reglow -reglowed -reglowing -reglows -reglue -reglued -reglues -regluing -regma -regmacarp -regmata -regna -regnal -regnancy -regnancies -regnant -regnerable -regnum -Rego -regolith -regoliths -regorge -regorged -regorges -regorging -regosol -regosols -regovern -regovernment -regr -regrab -regrabbed -regrabbing -regracy -regradate -regradated -regradating -regradation -regrade -regraded -regrades -regrading -regraduate -regraduation -regraft -regrafted -regrafting -regrafts -regrant -regranted -regranting -regrants -regraph -regrasp -regrass -regrate -regrated -regrater -regrates -regratify -regratification -regrating -regratingly -regrator -regratress -regravel -regrease -regreased -regreasing -regrede -regreen -regreens -regreet -regreeted -regreeting -regreets -regress -regressed -regresses -regressing -regression -regressionist -regressions -regression's -regressive -regressively -regressiveness -regressivity -regressor -regressors -regret -regretable -regretableness -regretably -regretful -regretfully -regretfulness -regretless -regretlessness -regrets -regrettable -regrettableness -regrettably -regretted -regretter -regretters -regretting -regrettingly -regrew -regrind -regrinder -regrinding -regrinds -regrip -regripped -regroom -regrooms -regroove -regrooved -regrooves -regrooving -reground -regroup -regrouped -regrouping -regroupment -regroups -regrow -regrowing -regrown -regrows -regrowth -regrowths -regs -Regt -Regt. -reguarantee -reguaranteed -reguaranteeing -reguaranty -reguaranties -reguard -reguardant -reguide -reguided -reguiding -regula -regulable -regular -regular-bred -regular-built -Regulares -regular-featured -regular-growing -Regularia -regularise -regularity -regularities -regularization -regularize -regularized -regularizer -regularizes -regularizing -regularly -regularness -regulars -regular-shaped -regular-sized -regulatable -regulate -regulated -regulates -regulating -regulation -regulationist -regulation-proof -regulations -regulative -regulatively -regulator -regulatory -regulators -regulator's -regulatorship -regulatress -regulatris -reguli -reguline -regulize -Regulus -reguluses -regur -regurge -regurgitant -regurgitate -regurgitated -regurgitates -regurgitating -regurgitation -regurgitations -regurgitative -regush -reh -rehab -rehabbed -rehabber -rehabilitant -rehabilitate -rehabilitated -rehabilitates -rehabilitating -rehabilitation -rehabilitationist -rehabilitations -rehabilitative -rehabilitator -rehabilitee -rehabs -rehair -rehayte -rehale -rehallow -rehammer -rehammered -rehammering -rehammers -rehandicap -rehandle -rehandled -rehandler -rehandles -rehandling -rehang -rehanged -rehanging -rehangs -rehappen -reharden -rehardened -rehardening -rehardens -reharm -reharmonization -reharmonize -reharmonized -reharmonizing -reharness -reharrow -reharvest -rehash -rehashed -rehashes -rehashing -rehaul -rehazard -rehboc -rehead -reheal -reheap -rehear -reheard -rehearheard -rehearhearing -rehearing -rehearings -rehears -rehearsable -rehearsal -rehearsals -rehearsal's -rehearse -rehearsed -rehearser -rehearsers -rehearses -rehearsing -rehearten -reheat -reheated -reheater -reheaters -reheating -reheats -Reheboth -rehedge -reheel -reheeled -reheeling -reheels -reheighten -Re-hellenization -Re-hellenize -rehem -rehemmed -rehemming -rehems -rehete -rehybridize -rehid -rehidden -rehide -rehydratable -rehydrate -rehydrating -rehydration -rehinge -rehinged -rehinges -rehinging -rehypnotize -rehypnotized -rehypnotizing -rehypothecate -rehypothecated -rehypothecating -rehypothecation -rehypothecator -rehire -rehired -rehires -rehiring -Rehm -Rehnberg -Rehobeth -Rehoboam -Rehoboth -Rehobothan -rehoe -rehoist -rehollow -rehone -rehoned -rehoning -rehonor -rehonour -rehood -rehook -rehoop -rehospitalization -rehospitalizations -rehospitalize -rehospitalized -rehospitalizes -rehospitalizing -rehouse -rehoused -rehouses -rehousing -Rehrersburg -rehumanization -rehumanize -rehumanized -rehumanizing -rehumble -rehumiliate -rehumiliated -rehumiliating -rehumiliation -rehung -rei -Rey -reice -re-ice -reiced -Reich -Reiche -Reichel -Reichenbach -Reichenberg -Reichert -Reichsbank -Reichsfuhrer -reichsgulden -Reichsland -Reichslander -Reichsmark -reichsmarks -reichspfennig -Reichsrat -Reichsrath -Reichstag -reichstaler -Reichstein -reichsthaler -reicing -Reid -Reidar -Reydell -reidentify -reidentification -reidentified -reidentifies -reidentifying -Reider -Reydon -Reidsville -Reidville -reif -Reifel -reify -reification -reified -reifier -reifiers -reifies -reifying -reifs -Reigate -reign -reigned -reigner -reigning -reignite -reignited -reignites -reigniting -reignition -reignore -reigns -reyield -Reik -Reykjavik -Reiko -Reilly -reillume -reilluminate -reilluminated -reilluminating -reillumination -reillumine -reillustrate -reillustrated -reillustrating -reillustration -reim -reimage -reimaged -reimages -reimagination -reimagine -reimaging -Reimarus -reimbark -reimbarkation -reimbibe -reimbody -reimbursable -reimburse -reimburseable -reimbursed -reimbursement -reimbursements -reimbursement's -reimburser -reimburses -reimbursing -reimbush -reimbushment -Reimer -reimkennar -reim-kennar -reimmerge -reimmerse -reimmersion -reimmigrant -reimmigration -Reymont -reimpact -reimpark -reimpart -reimpatriate -reimpatriation -reimpel -reimplant -reimplantation -reimplanted -reimplanting -reimplants -reimplement -reimplemented -reimply -reimplied -reimplying -reimport -reimportation -reimported -reimporting -reimports -reimportune -reimpose -reimposed -reimposes -reimposing -reimposition -reimposure -reimpregnate -reimpregnated -reimpregnating -reimpress -reimpression -reimprint -reimprison -reimprisoned -reimprisoning -reimprisonment -reimprisons -reimprove -reimprovement -reimpulse -Reims -Reimthursen -Rein -Reina -Reyna -reinability -Reinald -Reinaldo -Reinaldos -Reynard -reynards -Reynaud -reinaugurate -reinaugurated -reinaugurating -reinauguration -Reinbeck -reincapable -reincarnadine -reincarnate -reincarnated -reincarnates -reincarnating -reincarnation -reincarnationism -reincarnationist -reincarnationists -reincarnations -reincense -reincentive -reincidence -reincidency -reincite -reincited -reincites -reinciting -reinclination -reincline -reinclined -reinclining -reinclude -reincluded -reincluding -reinclusion -reincorporate -reincorporated -reincorporates -reincorporating -reincorporation -reincrease -reincreased -reincreasing -reincrudate -reincrudation -reinculcate -reincur -reincurred -reincurring -reincurs -reindebted -reindebtedness -reindeer -reindeers -reindependence -reindex -reindexed -reindexes -reindexing -reindicate -reindicated -reindicating -reindication -reindict -reindictment -reindifferent -reindoctrinate -reindoctrinated -reindoctrinating -reindoctrination -reindorse -reindorsed -reindorsement -reindorsing -reinduce -reinduced -reinducement -reinduces -reinducing -reinduct -reinducted -reinducting -reinduction -reinducts -reindue -reindulge -reindulged -reindulgence -reindulging -reindustrialization -reindustrialize -reindustrialized -reindustrializing -Reine -Reinecke -reined -Reiner -Reiners -Reinert -Reinertson -reinette -reinfect -reinfected -reinfecting -reinfection -reinfections -reinfectious -reinfects -reinfer -reinferred -reinferring -reinfest -reinfestation -reinfiltrate -reinfiltrated -reinfiltrating -reinfiltration -reinflame -reinflamed -reinflames -reinflaming -reinflatable -reinflate -reinflated -reinflating -reinflation -reinflict -reinfliction -reinfluence -reinfluenced -reinfluencing -reinforce -reinforceable -reinforced -reinforcement -reinforcements -reinforcement's -reinforcer -reinforcers -reinforces -reinforcing -reinform -reinformed -reinforming -reinforms -reinfund -reinfuse -reinfused -reinfuses -reinfusing -reinfusion -reingraft -reingratiate -reingress -reinhabit -reinhabitation -Reinhard -Reinhardt -Reinhart -reinherit -Reinhold -Reinholds -reining -reinitialize -reinitialized -reinitializes -reinitializing -reinitiate -reinitiation -reinject -reinjection -reinjections -reinjure -reinjured -reinjures -reinjury -reinjuries -reinjuring -reink -re-ink -Reinke -reinked -reinking -reinks -reinless -Reyno -reinoculate -reinoculated -reinoculates -reinoculating -reinoculation -reinoculations -Reinold -Reynold -Reynolds -Reynoldsburg -Reynoldsville -Reynosa -reinquire -reinquired -reinquiry -reinquiries -reinquiring -reins -reinsane -reinsanity -reinscribe -reinscribed -reinscribes -reinscribing -reinsert -reinserted -reinserting -reinsertion -reinsertions -reinserts -reinsist -reinsman -reinsmen -reinspect -reinspected -reinspecting -reinspection -reinspector -reinspects -reinsphere -reinspiration -reinspire -reinspired -reinspiring -reinspirit -reinstall -reinstallation -reinstallations -reinstalled -reinstalling -reinstallment -reinstallments -reinstalls -reinstalment -reinstate -reinstated -reinstatement -reinstatements -reinstates -reinstating -reinstation -reinstator -reinstauration -reinstil -reinstill -reinstitute -reinstituted -reinstitutes -reinstituting -reinstitution -reinstruct -reinstructed -reinstructing -reinstruction -reinstructs -reinsulate -reinsulated -reinsulating -reinsult -reinsurance -reinsure -reinsured -reinsurer -reinsures -reinsuring -reintegrate -reintegrated -reintegrates -reintegrating -reintegration -reintegrations -reintegrative -reintend -reinter -reintercede -reintercession -reinterchange -reinterest -reinterfere -reinterference -reinterment -reinterpret -reinterpretation -reinterpretations -reinterpreted -reinterpreting -reinterprets -reinterred -reinterring -reinterrogate -reinterrogated -reinterrogates -reinterrogating -reinterrogation -reinterrogations -reinterrupt -reinterruption -reinters -reintervene -reintervened -reintervening -reintervention -reinterview -reinthrone -reintimate -reintimation -reintitule -rei-ntrant -reintrench -reintrenched -reintrenches -reintrenching -reintrenchment -reintroduce -reintroduced -reintroduces -reintroducing -reintroduction -reintrude -reintrusion -reintuition -reintuitive -reinvade -reinvaded -reinvading -reinvasion -reinvent -reinvented -reinventing -reinvention -reinventor -reinvents -reinversion -reinvert -reinvest -reinvested -reinvestigate -reinvestigated -reinvestigates -reinvestigating -reinvestigation -reinvestigations -reinvesting -reinvestiture -reinvestment -reinvests -reinvigorate -reinvigorated -reinvigorates -reinvigorating -reinvigoration -reinvigorator -reinvitation -reinvite -reinvited -reinvites -reinviting -reinvoice -reinvoke -reinvoked -reinvokes -reinvoking -reinvolve -reinvolved -reinvolvement -reinvolves -reinvolving -Reinwald -Reinwardtia -reyoke -reyoked -reyoking -reyouth -reirrigate -reirrigated -reirrigating -reirrigation -Reis -Reisch -Reiser -Reisfield -Reisinger -Reisman -reisner -reisolate -reisolated -reisolating -reisolation -reyson -Reiss -reissuable -reissuably -reissue -reissued -reissuement -reissuer -reissuers -reissues -reissuing -reist -reister -Reisterstown -reit -reitbok -reitboks -reitbuck -reitemize -reitemized -reitemizing -Reiter -reiterable -reiterance -reiterant -reiterate -reiterated -reiteratedly -reiteratedness -reiterates -reiterating -reiteration -reiterations -reiterative -reiteratively -reiterativeness -reiterator -Reith -Reitman -reive -reived -reiver -reivers -reives -reiving -rejacket -rejail -Rejang -reject -rejectable -rejectableness -rejectage -rejectamenta -rejectaneous -rejected -rejectee -rejectees -rejecter -rejecters -rejecting -rejectingly -rejection -rejections -rejection's -rejective -rejectment -rejector -rejectors -rejector's -rejects -rejeopardize -rejeopardized -rejeopardizing -rejerk -rejig -rejigger -rejiggered -rejiggering -rejiggers -rejoice -rejoiced -rejoiceful -rejoicement -rejoicer -rejoicers -rejoices -rejoicing -rejoicingly -rejoicings -rejoin -rejoinder -rejoinders -rejoindure -rejoined -rejoining -rejoins -rejolt -rejoneador -rejoneo -rejounce -rejourn -rejourney -rejudge -rejudged -rejudgement -rejudges -rejudging -rejudgment -rejuggle -rejumble -rejunction -rejustify -rejustification -rejustified -rejustifying -rejuvenant -rejuvenate -rejuvenated -rejuvenates -rejuvenating -rejuvenation -rejuvenations -rejuvenative -rejuvenator -rejuvenesce -rejuvenescence -rejuvenescent -rejuvenise -rejuvenised -rejuvenising -rejuvenize -rejuvenized -rejuvenizing -rekey -rekeyed -rekeying -rekeys -rekhti -Reki -rekick -rekill -rekindle -rekindled -rekindlement -rekindler -rekindles -rekindling -reking -rekinole -rekiss -Reklaw -reknead -reknit -reknits -reknitted -reknitting -reknock -reknot -reknotted -reknotting -reknow -rel -rel. -relabel -relabeled -relabeling -relabelled -relabelling -relabels -relace -relaced -relaces -relache -relacing -relacquer -relade -reladen -reladle -reladled -reladling -Relay -re-lay -relaid -re-laid -relayed -relayer -relaying -re-laying -relayman -relais -relays -relament -relamp -relance -relanced -relancing -reland -relandscape -relandscaped -relandscapes -relandscaping -relap -relapper -relapsable -relapse -relapsed -relapseproof -relapser -relapsers -relapses -relapsing -relast -relaster -relata -relatability -relatable -relatch -relate -related -relatedly -relatedness -relater -relaters -relates -relating -relatinization -relation -relational -relationality -relationally -relationals -relationary -relatione -relationism -relationist -relationless -relations -relationship -relationships -relationship's -relatival -relative -relative-in-law -relatively -relativeness -relativenesses -relatives -relatives-in-law -relativism -relativist -relativistic -relativistically -relativity -relativization -relativize -relator -relators -relatrix -relatum -relaunch -relaunched -relaunches -relaunching -relaunder -relaundered -relaundering -relaunders -relax -relaxable -relaxant -relaxants -relaxation -relaxations -relaxation's -relaxative -relaxatory -relaxed -relaxedly -relaxedness -relaxer -relaxers -relaxes -relaxin -relaxing -relaxins -relbun -Reld -relead -releap -relearn -relearned -relearning -relearns -relearnt -releasability -releasable -releasably -release -re-lease -released -re-leased -releasee -releasement -releaser -releasers -releases -releasibility -releasible -releasing -re-leasing -releasor -releather -relection -relegable -relegate -relegated -relegates -relegating -relegation -relegations -releivo -releivos -relend -relending -relends -relent -relented -relenting -relentingly -relentless -relentlessly -relentlessness -relentlessnesses -relentment -relents -reles -relessa -relessee -relessor -relet -relets -reletter -relettered -relettering -reletters -reletting -relevance -relevances -relevancy -relevancies -relevant -relevantly -relevate -relevation -relevator -releve -relevel -releveled -releveling -relevent -relever -releves -relevy -relevied -relevying -rely -reliability -reliabilities -reliable -reliableness -reliablenesses -reliably -Reliance -reliances -reliant -reliantly -reliberate -reliberated -reliberating -relic -relicary -relic-covered -relicense -relicensed -relicenses -relicensing -relick -reliclike -relicmonger -relics -relic's -relict -relictae -relicted -relicti -reliction -relicts -relic-vending -relide -relied -relief -relief-carving -reliefer -reliefless -reliefs -relier -reliers -relies -relievable -relieve -relieved -relievedly -relievement -reliever -relievers -relieves -relieving -relievingly -relievo -relievos -relift -relig -religate -religation -relight -relightable -relighted -relighten -relightener -relighter -relighting -relights -religieuse -religieuses -religieux -religio -religio- -religio-educational -religio-magical -religio-military -religion -religionary -religionate -religioner -religionism -religionist -religionistic -religionists -religionize -religionless -religions -religion's -religio-philosophical -religio-political -religio-scientific -religiose -religiosity -religioso -religious -religiously -religious-minded -religious-mindedness -religiousness -reliiant -relying -relime -relimit -relimitation -reline -relined -reliner -relines -relining -relink -relinked -relinks -relinquent -relinquish -relinquished -relinquisher -relinquishers -relinquishes -relinquishing -relinquishment -relinquishments -reliquaire -reliquary -reliquaries -relique -reliquefy -reliquefied -reliquefying -reliques -reliquiae -reliquian -reliquidate -reliquidated -reliquidates -reliquidating -reliquidation -reliquism -relish -relishable -relished -relisher -relishes -relishy -relishing -relishingly -relishsome -relist -relisted -relisten -relisting -relists -relit -relitigate -relitigated -relitigating -relitigation -relivable -relive -relived -reliver -relives -reliving -Rella -Relly -Rellia -Rellyan -Rellyanism -Rellyanite -reload -reloaded -reloader -reloaders -reloading -reloads -reloan -reloaned -reloaning -reloans -relocable -relocatability -relocatable -relocate -relocated -relocatee -relocates -relocating -relocation -relocations -relocator -relock -relocked -relocks -relodge -relong -relook -relose -relosing -relost -relot -relove -relower -relubricate -relubricated -relubricating -reluce -relucent -reluct -reluctance -reluctancy -reluctant -reluctantly -reluctate -reluctation -relucted -relucting -reluctivity -relucts -relume -relumed -relumes -relumine -relumined -relumines -reluming -relumining -REM -Rema -remade -remagnetization -remagnetize -remagnetized -remagnetizing -remagnify -remagnification -remagnified -remagnifying -remail -remailed -remailing -remails -remaim -remain -remainder -remaindered -remaindering -remainderman -remaindermen -remainders -remainder's -remaindership -remaindment -remained -remainer -remaining -remains -remaintain -remaintenance -remake -remaker -remakes -remaking -reman -remanage -remanagement -remanation -remancipate -remancipation -remand -remanded -remanding -remandment -remands -remanence -remanency -remanent -remanet -remanie -remanifest -remanifestation -remanipulate -remanipulation -remanned -remanning -remans -remantle -remanufacture -remanufactured -remanufacturer -remanufactures -remanufacturing -remanure -remap -remapped -remapping -remaps -remarch -remargin -remark -re-mark -remarkability -remarkable -remarkableness -remarkablenesses -remarkably -remarked -remarkedly -remarker -remarkers -remarket -remarking -remarks -Remarque -remarques -remarry -remarriage -remarriages -remarried -remarries -remarrying -remarshal -remarshaled -remarshaling -remarshalling -remask -remass -remast -remaster -remastery -remasteries -remasticate -remasticated -remasticating -remastication -rematch -rematched -rematches -rematching -remate -remated -rematerialization -rematerialize -rematerialized -rematerializing -remates -remating -rematriculate -rematriculated -rematriculating -Rembert -remblai -remble -remblere -Rembrandt -Rembrandtesque -Rembrandtish -Rembrandtism -Remde -REME -remeant -remeasure -remeasured -remeasurement -remeasurements -remeasures -remeasuring -remede -remedy -remediability -remediable -remediableness -remediably -remedial -remedially -remediate -remediated -remediating -remediation -remedied -remedies -remedying -remediless -remedilessly -remedilessness -remedy-proof -remeditate -remeditation -remedium -remeet -remeeting -remeets -remelt -remelted -remelting -remelts -remember -rememberability -rememberable -rememberably -remembered -rememberer -rememberers -remembering -rememberingly -remembers -remembrance -Remembrancer -remembrancership -remembrances -remembrance's -rememorate -rememoration -rememorative -rememorize -rememorized -rememorizing -remen -remenace -remenant -remend -remended -remending -remends -remene -remention -Remer -remercy -remerge -remerged -remerges -remerging -remet -remetal -remex -Remi -Remy -remica -remicate -remication -remicle -remiform -remigate -remigation -remiges -remigial -remigrant -remigrate -remigrated -remigrates -remigrating -remigration -remigrations -Remijia -remilitarization -remilitarize -remilitarized -remilitarizes -remilitarizing -remill -remillable -remimic -remind -remindal -reminded -reminder -reminders -remindful -reminding -remindingly -reminds -remineralization -remineralize -remingle -remingled -remingling -Remington -reminisce -reminisced -reminiscence -reminiscenceful -reminiscencer -reminiscences -reminiscence's -reminiscency -reminiscent -reminiscential -reminiscentially -reminiscently -reminiscer -reminisces -reminiscing -reminiscitory -remint -reminted -reminting -remints -remiped -remirror -remise -remised -remises -remising -remisrepresent -remisrepresentation -remiss -remissful -remissibility -remissible -remissibleness -remissibly -remission -remissions -remissive -remissively -remissiveness -remissly -remissness -remissnesses -remissory -remisunderstand -remit -remital -remitment -remits -remittable -remittal -remittals -remittance -remittancer -remittances -remitted -remittee -remittence -remittency -remittent -remittently -remitter -remitters -remitting -remittitur -remittor -remittors -remix -remixed -remixes -remixing -remixt -remixture -Remlap -Remmer -remnant -remnantal -remnants -remnant's -remobilization -remobilize -remobilized -remobilizes -remobilizing -Remoboth -REMOBS -remock -remodel -remodeled -remodeler -remodelers -remodeling -remodelled -remodeller -remodelling -remodelment -remodels -remodify -remodification -remodified -remodifies -remodifying -remodulate -remodulated -remodulating -remoisten -remoistened -remoistening -remoistens -remolade -remolades -remold -remolded -remolding -remolds -remollient -remollify -remollified -remollifying -remonetisation -remonetise -remonetised -remonetising -remonetization -remonetize -remonetized -remonetizes -remonetizing -Remonstrance -remonstrances -Remonstrant -remonstrantly -remonstrate -remonstrated -remonstrates -remonstrating -remonstratingly -remonstration -remonstrations -remonstrative -remonstratively -remonstrator -remonstratory -remonstrators -remontado -remontant -remontoir -remontoire -remop -remora -remoras -remorate -remord -remore -remorid -remorse -remorseful -remorsefully -remorsefulness -remorseless -remorselessly -remorselessness -remorseproof -remorses -remortgage -remortgaged -remortgages -remortgaging -remote -remote-control -remote-controlled -remoted -remotely -remoteness -remotenesses -remoter -remotes -remotest -remotion -remotions -remotivate -remotivated -remotivates -remotivating -remotive -Remoudou -remoulade -remould -remount -remounted -remounting -remounts -removability -removable -removableness -removably -removal -removalist -removals -removal's -remove -removed -removedly -removedness -removeless -removement -remover -removers -removes -removing -Rempe -rems -Remscheid -Remsen -Remsenburg -remuable -remuda -remudas -remue -remultiply -remultiplication -remultiplied -remultiplying -remunerability -remunerable -remunerably -remunerate -remunerated -remunerates -remunerating -remuneration -remunerations -remunerative -remuneratively -remunerativeness -remunerativenesses -remunerator -remuneratory -remunerators -remurmur -Remus -remuster -remutation -REN -Rena -renable -renably -Renado -Renae -renay -renail -renailed -renails -Renaissance -renaissances -Renaissancist -Renaissant -renal -Renalara -Renaldo -rename -renamed -renames -renaming -Renan -Renard -Renardine -Renascence -renascences -renascency -renascent -renascible -renascibleness -Renata -Renate -renationalize -renationalized -renationalizing -Renato -renaturation -renature -renatured -renatures -renaturing -Renaud -Renault -renavigate -renavigated -renavigating -renavigation -Renckens -rencontre -rencontres -rencounter -rencountered -rencountering -rencounters -renculus -rend -rended -rendement -render -renderable -rendered -renderer -renderers -rendering -renderings -renders -renderset -rendezvous -rendezvoused -rendezvouses -rendezvousing -rendibility -rendible -rending -rendition -renditions -rendition's -rendlewood -rendoun -rendrock -rends -rendu -rendzina -rendzinas -Rene -reneague -Renealmia -renecessitate -Renee -reneg -renegade -renegaded -renegades -renegading -renegadism -renegado -renegadoes -renegados -renegate -renegated -renegating -renegation -renege -reneged -reneger -renegers -reneges -reneging -reneglect -renegotiable -renegotiate -renegotiated -renegotiates -renegotiating -renegotiation -renegotiations -renegotiator -renegue -Renell -Renelle -renerve -renes -renest -renested -renests -renet -Reneta -renette -reneutralize -reneutralized -reneutralizing -renew -renewability -renewable -renewably -renewal -renewals -renewed -renewedly -renewedness -renewer -renewers -renewing -renewment -renews -Renferd -renforce -Renfred -Renfrew -Renfrewshire -renga -rengue -renguera -Reni -reni- -renicardiac -Renick -renickel -reniculus -renidify -renidification -Renie -reniform -renig -renigged -renigging -renigs -Renilla -Renillidae -renin -renins -renipericardial -reniportal -renipuncture -renish -renishly -Renita -renitence -renitency -renitent -Reniti -renk -renky -renminbi -renn -Rennane -rennase -rennases -renne -Renner -Rennes -rennet -renneting -rennets -Renny -Rennie -rennin -renninogen -rennins -renniogen -Rennold -Reno -renocutaneous -renogastric -renogram -renograms -renography -renographic -renointestinal -Renoir -renomee -renominate -renominated -renominates -renominating -renomination -renominations -renomme -renommee -renone -renopericardial -renopulmonary -renormalization -renormalize -renormalized -renormalizing -renotarize -renotarized -renotarizing -renotation -renotice -renoticed -renoticing -renotify -renotification -renotified -renotifies -renotifying -renounce -renounceable -renounced -renouncement -renouncements -renouncer -renouncers -renounces -renouncing -renourish -renourishment -renovare -renovate -renovated -renovater -renovates -renovating -renovatingly -renovation -renovations -renovative -renovator -renovatory -renovators -renove -renovel -renovize -Renovo -renown -renowned -renownedly -renownedness -renowner -renownful -renowning -renownless -renowns -Rensselaer -rensselaerite -Rensselaerville -rent -rentability -rentable -rentage -rental -rentaler -rentaller -rentals -rental's -rent-charge -rent-collecting -rente -rented -rentee -renter -renters -rentes -rent-free -rentier -rentiers -Rentiesville -renting -rentless -Rento -Renton -rent-paying -rent-producing -rentrayeuse -rent-raising -rentrant -rent-reducing -rentree -rent-roll -rents -Rentsch -Rentschler -rent-seck -rent-service -Rentz -renu -renule -renullify -renullification -renullified -renullifying -renumber -renumbered -renumbering -renumbers -renumerate -renumerated -renumerating -renumeration -renunciable -renunciance -renunciant -renunciate -renunciation -renunciations -renunciative -renunciator -renunciatory -renunculus -renverse -renversement -Renville -renvoi -renvoy -renvois -Renwick -Renzo -REO -reobject -reobjected -reobjecting -reobjectivization -reobjectivize -reobjects -reobligate -reobligated -reobligating -reobligation -reoblige -reobliged -reobliging -reobscure -reobservation -reobserve -reobserved -reobserving -reobtain -reobtainable -reobtained -reobtaining -reobtainment -reobtains -reoccasion -reoccupation -reoccupations -reoccupy -reoccupied -reoccupies -reoccupying -reoccur -reoccurred -reoccurrence -reoccurrences -reoccurring -reoccurs -reoffend -reoffense -reoffer -reoffered -reoffering -reoffers -reoffset -reoil -reoiled -reoiling -reoils -reometer -reomission -reomit -reopen -reopened -reopener -reopening -reopenings -reopens -reoperate -reoperated -reoperates -reoperating -reoperation -reophore -reoppose -reopposed -reopposes -reopposing -reopposition -reoppress -reoppression -reorchestrate -reorchestrated -reorchestrates -reorchestrating -reorchestration -reordain -reordained -reordaining -reordains -reorder -reordered -reordering -reorders -reordinate -reordination -reorganise -reorganised -reorganiser -reorganising -reorganization -reorganizational -reorganizationist -reorganizations -reorganization's -reorganize -reorganized -reorganizer -reorganizers -reorganizes -reorganizing -reorient -reorientate -reorientated -reorientating -reorientation -reorientations -reoriented -reorienting -reorients -reornament -reoutfit -reoutfitted -reoutfitting -reoutline -reoutlined -reoutlining -reoutput -reoutrage -reovercharge -reoverflow -reovertake -reoverwork -reovirus -reoviruses -reown -reoxidation -reoxidise -reoxidised -reoxidising -reoxidize -reoxidized -reoxidizing -reoxygenate -reoxygenize -Rep -Rep. -repace -repacify -repacification -repacified -repacifies -repacifying -repack -repackage -repackaged -repackager -repackages -repackaging -repacked -repacker -repacking -repacks -repad -repadded -repadding -repaganization -repaganize -repaganizer -repage -repaginate -repaginated -repaginates -repaginating -repagination -repay -repayable -repayal -repaid -repayed -repaying -repayment -repayments -repaint -repainted -repainting -repaints -repair -repairability -repairable -repairableness -repaired -repairer -repairers -repairing -repairman -repairmen -repairs -repays -repale -repand -repandly -repandodentate -repandodenticulate -repandolobate -repandous -repandousness -repanel -repaneled -repaneling -repanels -repaper -repapered -repapering -repapers -reparability -reparable -reparably -reparagraph -reparate -reparation -reparations -reparation's -reparative -reparatory -reparel -repark -reparked -reparks -repart -repartable -repartake -repartee -reparteeist -repartees -reparticipate -reparticipation -repartition -repartitionable -repas -repass -repassable -repassage -repassant -repassed -repasser -repasses -repassing -repast -repaste -repasted -repasting -repasts -repast's -repasture -repatch -repatency -repatent -repatriable -repatriate -repatriated -repatriates -repatriating -repatriation -repatriations -repatrol -repatrolled -repatrolling -repatronize -repatronized -repatronizing -repattern -repave -repaved -repavement -repaves -repaving -repawn -Repeal -repealability -repealable -repealableness -repealed -repealer -repealers -repealing -repealist -repealless -repeals -repeat -repeatability -repeatable -repeatal -repeated -repeatedly -repeater -repeaters -repeating -repeats -repechage -repeddle -repeddled -repeddling -repeg -repegged -repegs -repel -repellance -repellant -repellantly -repelled -repellence -repellency -repellent -repellently -repellents -repeller -repellers -repelling -repellingly -repellingness -repels -repen -repenalize -repenalized -repenalizing -repenetrate -repenned -repenning -repension -repent -repentable -repentance -repentances -repentant -repentantly -repented -repenter -repenters -repenting -repentingly -repents -repeople -repeopled -repeoples -repeopling -reperceive -reperceived -reperceiving -repercept -reperception -repercolation -repercuss -repercussion -repercussions -repercussion's -repercussive -repercussively -repercussiveness -repercussor -repercutient -reperforator -reperform -reperformance -reperfume -reperible -reperk -reperked -reperking -reperks -repermission -repermit -reperplex -repersonalization -repersonalize -repersuade -repersuasion -repertoire -repertoires -repertory -repertorial -repertories -repertorily -repertorium -reperusal -reperuse -reperused -reperusing -repetatively -repetend -repetends -repetitae -repetiteur -repetiteurs -repetition -repetitional -repetitionary -repetitions -repetition's -repetitious -repetitiously -repetitiousness -repetitiousnesses -repetitive -repetitively -repetitiveness -repetitivenesses -repetitory -repetoire -repetticoat -repew -Rephael -rephase -rephonate -rephosphorization -rephosphorize -rephotograph -rephotographed -rephotographing -rephotographs -rephrase -rephrased -rephrases -rephrasing -repic -repick -repicture -repiece -repile -repin -repine -repined -repineful -repinement -repiner -repiners -repines -repining -repiningly -repinned -repinning -repins -repipe -repique -repiqued -repiquing -repitch -repkie -repl -replace -replaceability -replaceable -replaced -replacement -replacements -replacement's -replacer -replacers -replaces -replacing -replay -replayed -replaying -replays -replait -replan -replane -replaned -replaning -replanned -replanning -replans -replant -replantable -replantation -replanted -replanter -replanting -replants -replaster -replate -replated -replates -replating -replead -repleader -repleading -repleads -repleat -repled -repledge -repledged -repledger -repledges -repledging -replenish -replenished -replenisher -replenishers -replenishes -replenishing -replenishingly -replenishment -replenishments -replete -repletely -repleteness -repletenesses -repletion -repletions -repletive -repletively -repletory -repleve -replevy -repleviable -replevied -replevies -replevying -replevin -replevined -replevining -replevins -replevisable -replevisor -reply -replial -repliant -replica -replicable -replicant -replicas -replicate -replicated -replicates -replicatile -replicating -replication -replications -replicative -replicatively -replicatory -replicon -replied -replier -repliers -replies -replight -replying -replyingly -replique -replod -replot -replotment -replots -replotted -replotter -replotting -replough -replow -replowed -replowing -replum -replumb -replumbs -replume -replumed -repluming -replunder -replunge -replunged -replunges -replunging -repo -repocket -repoint -repolarization -repolarize -repolarized -repolarizing -repolymerization -repolymerize -repolish -repolished -repolishes -repolishing -repoll -repolled -repolls -repollute -repolon -reponder -repondez -repone -repope -repopularization -repopularize -repopularized -repopularizing -repopulate -repopulated -repopulates -repopulating -repopulation -report -reportable -reportage -reportages -reported -reportedly -reporter -reporteress -reporterism -reporters -reportership -reporting -reportingly -reportion -reportorial -reportorially -reports -repos -reposal -reposals -repose -re-pose -reposed -re-posed -reposedly -reposedness -reposeful -reposefully -reposefulness -reposer -reposers -reposes -reposing -re-posing -reposit -repositary -reposited -repositing -reposition -repositioned -repositioning -repositions -repositor -repository -repositories -repository's -reposits -reposoir -repossess -repossessed -repossesses -repossessing -repossession -repossessions -repossessor -repost -repostpone -repostponed -repostponing -repostulate -repostulated -repostulating -repostulation -reposure -repot -repots -repotted -repound -repour -repoured -repouring -repours -repouss -repoussage -repousse -repousses -repowder -repower -repowered -repowering -repowers -repp -repped -Repplier -repps -repr -repractice -repracticed -repracticing -repray -repraise -repraised -repraising -repreach -reprecipitate -reprecipitation -repredict -reprefer -reprehend -reprehendable -reprehendatory -reprehended -reprehender -reprehending -reprehends -reprehensibility -reprehensible -reprehensibleness -reprehensibly -reprehension -reprehensions -reprehensive -reprehensively -reprehensory -repremise -repremised -repremising -repreparation -reprepare -reprepared -repreparing -represcribe -represcribed -represcribing -represent -re-present -representability -representable -representably -representamen -representant -representation -re-presentation -representational -representationalism -representationalist -representationalistic -representationally -representationary -representationes -representationism -representationist -representations -representation's -representative -representative-elect -representatively -representativeness -representativenesses -representatives -representativeship -representativity -represented -representee -representer -representing -representment -re-presentment -representor -represents -represide -repress -re-press -repressed -repressedly -represser -represses -repressibility -repressibilities -repressible -repressibly -repressing -repression -repressionary -repressionist -repressions -repression's -repressive -repressively -repressiveness -repressment -repressor -repressory -repressure -repressurize -repressurized -repressurizes -repressurizing -repry -reprice -repriced -reprices -repricing -reprievable -reprieval -reprieve -reprieved -repriever -reprievers -reprieves -reprieving -reprimand -reprimanded -reprimander -reprimanding -reprimandingly -reprimands -reprime -reprimed -reprimer -repriming -reprint -reprinted -reprinter -reprinting -reprintings -reprints -reprisal -reprisalist -reprisals -reprisal's -reprise -reprised -reprises -reprising -repristinate -repristination -reprivatization -reprivatize -reprivilege -repro -reproach -reproachability -reproachable -reproachableness -reproachably -reproached -reproacher -reproaches -reproachful -reproachfully -reproachfulness -reproachfulnesses -reproaching -reproachingly -reproachless -reproachlessness -reprobacy -reprobance -reprobate -reprobated -reprobateness -reprobater -reprobates -reprobating -reprobation -reprobationary -reprobationer -reprobations -reprobative -reprobatively -reprobator -reprobatory -reprobe -reprobed -reprobes -reprobing -reproceed -reprocess -reprocessed -reprocesses -reprocessing -reproclaim -reproclamation -reprocurable -reprocure -reproduce -reproduceable -reproduced -reproducer -reproducers -reproduces -reproducibility -reproducibilities -reproducible -reproducibly -reproducing -reproduction -reproductionist -reproductions -reproduction's -reproductive -reproductively -reproductiveness -reproductivity -reproductory -reprofane -reprofess -reproffer -reprogram -reprogramed -reprograming -reprogrammed -reprogramming -reprograms -reprography -reprohibit -reproject -repromise -repromised -repromising -repromulgate -repromulgated -repromulgating -repromulgation -repronounce -repronunciation -reproof -re-proof -reproofless -reproofs -repropagate -repropitiate -repropitiation -reproportion -reproposal -repropose -reproposed -reproposes -reproposing -repros -reprosecute -reprosecuted -reprosecuting -reprosecution -reprosper -reprotect -reprotection -reprotest -reprovability -reprovable -reprovableness -reprovably -reproval -reprovals -reprove -re-prove -reproved -re-proved -re-proven -reprover -reprovers -reproves -reprovide -reproving -re-proving -reprovingly -reprovision -reprovocation -reprovoke -reprune -repruned -repruning -reps -rept -rept. -reptant -reptation -reptatory -reptatorial -reptile -reptiledom -reptilelike -reptiles -reptile's -reptilferous -Reptilia -reptilian -reptilians -reptiliary -reptiliform -reptilious -reptiliousness -reptilism -reptility -reptilivorous -reptiloid -Repton -Repub -republic -republica -republical -Republican -republicanisation -republicanise -republicanised -republicaniser -republicanising -Republicanism -republicanisms -republicanization -republicanize -republicanizer -republicans -republican's -republication -republics -republic's -republish -republishable -republished -republisher -republishes -republishing -republishment -repudative -repuddle -repudiable -repudiate -repudiated -repudiates -repudiating -repudiation -repudiationist -repudiations -repudiative -repudiator -repudiatory -repudiators -repuff -repugn -repugnable -repugnance -repugnances -repugnancy -repugnant -repugnantly -repugnantness -repugnate -repugnatorial -repugned -repugner -repugning -repugns -repullulate -repullulation -repullulative -repullulescent -repulpit -repulse -repulsed -repulseless -repulseproof -repulser -repulsers -repulses -repulsing -repulsion -repulsions -repulsive -repulsively -repulsiveness -repulsivenesses -repulsor -repulsory -repulverize -repump -repumped -repumps -repunch -repunctuate -repunctuated -repunctuating -repunctuation -repunish -repunishable -repunishment -repurchase -repurchased -repurchaser -repurchases -repurchasing -repure -repurge -repurify -repurification -repurified -repurifies -repurifying -Re-puritanize -repurple -repurpose -repurposed -repurposing -repursue -repursued -repursues -repursuing -repursuit -reputability -reputable -reputabley -reputableness -reputably -reputation -reputationless -reputations -reputation's -reputative -reputatively -repute -reputed -reputedly -reputeless -reputes -reputing -req -req. -reqd -REQSPEC -requalify -requalification -requalified -requalifying -requarantine -requeen -requench -request -requested -requester -requesters -requesting -requestion -requestor -requestors -requests -requeued -requicken -Requiem -requiems -Requienia -requiescat -requiescence -requin -requins -requirable -require -required -requirement -requirements -requirement's -requirer -requirers -requires -requiring -requisite -requisitely -requisiteness -requisites -requisition -requisitionary -requisitioned -requisitioner -requisitioners -requisitioning -requisitionist -requisitions -requisitor -requisitory -requisitorial -requit -requitable -requital -requitals -requitative -requite -requited -requiteful -requiteless -requitement -requiter -requiters -requites -requiting -requiz -requotation -requote -requoted -requoting -rerack -reracked -reracker -reracks -reradiate -reradiated -reradiates -reradiating -reradiation -rerail -rerailer -reraise -reraised -reraises -rerake -reran -rerank -rerate -rerated -rerating -rere- -re-reaction -reread -rereader -rereading -rereads -re-rebel -rerebrace -rere-brace -re-receive -re-reception -re-recital -re-recite -re-reckon -re-recognition -re-recognize -re-recollect -re-recollection -re-recommend -re-recommendation -re-reconcile -re-reconciliation -rerecord -re-record -rerecorded -rerecording -rerecords -re-recover -re-rectify -re-rectification -rere-dorter -reredos -reredoses -re-reduce -re-reduction -reree -rereel -rereeve -re-refer -rerefief -re-refine -re-reflect -re-reflection -re-reform -re-reformation -re-refusal -re-refuse -re-regenerate -re-regeneration -reregister -reregistered -reregistering -reregisters -reregistration -reregulate -reregulated -reregulating -reregulation -re-rehearsal -re-rehearse -rereign -re-reiterate -re-reiteration -re-reject -re-rejection -re-rejoinder -re-relate -re-relation -rerelease -re-release -re-rely -re-relish -re-remember -reremice -reremind -re-remind -re-remit -reremmice -reremouse -re-removal -re-remove -re-rendition -rerent -rerental -re-repair -rerepeat -re-repeat -re-repent -re-replevin -re-reply -re-report -re-represent -re-representation -re-reproach -re-request -re-require -re-requirement -re-rescue -re-resent -re-resentment -re-reservation -re-reserve -re-reside -re-residence -re-resign -re-resignation -re-resolution -re-resolve -re-respond -re-response -re-restitution -re-restoration -re-restore -re-restrain -re-restraint -re-restrict -re-restriction -reresupper -rere-supper -re-retire -re-retirement -re-return -re-reveal -re-revealation -re-revenge -re-reversal -re-reverse -rereview -re-revise -re-revision -rereward -rerewards -rerig -rering -rerise -rerisen -rerises -rerising -rerival -rerivet -rerob -rerobe -reroyalize -reroll -rerolled -reroller -rerollers -rerolling -rerolls -Re-romanize -reroof -reroofed -reroofs -reroot -rerope -rerose -reroute -rerouted -reroutes -rerouting -rerow -rerub -rerummage -rerun -rerunning -reruns -res -Resa -Resaca -resack -resacrifice -resaddle -resaddled -resaddles -resaddling -resay -resaid -resaying -resail -resailed -resailing -resails -resays -resalable -resale -resaleable -resales -resalgar -resalt -resalutation -resalute -resaluted -resalutes -resaluting -resalvage -resample -resampled -resamples -resampling -resanctify -resanction -resarcelee -resat -resatisfaction -resatisfy -resave -resaw -resawed -resawer -resawyer -resawing -resawn -resaws -resazurin -rescale -rescaled -rescales -rescaling -rescan -rescattering -reschedule -rescheduled -reschedules -rescheduling -reschool -rescind -rescindable -rescinded -rescinder -rescinders -rescinding -rescindment -rescinds -rescissible -rescission -rescissions -rescissory -rescore -rescored -rescores -rescoring -rescounter -rescous -rescramble -rescratch -rescreen -rescreened -rescreening -rescreens -rescribe -rescript -rescription -rescriptive -rescriptively -rescripts -rescrub -rescrubbed -rescrubbing -rescrutiny -rescrutinies -rescrutinize -rescrutinized -rescrutinizing -rescuable -rescue -rescued -rescueless -rescuer -rescuers -rescues -rescuing -resculpt -rescusser -Rese -reseal -resealable -resealed -resealing -reseals -reseam -research -re-search -researchable -researched -researcher -researchers -researches -researchful -researching -researchist -reseason -reseat -reseated -reseating -reseats -reseau -reseaus -reseaux -resecate -resecrete -resecretion -resect -resectability -resectabilities -resectable -resected -resecting -resection -resectional -resections -resectoscope -resects -resecure -resecured -resecuring -Reseda -Resedaceae -resedaceous -resedas -Resee -reseed -reseeded -reseeding -reseeds -reseeing -reseek -reseeking -reseeks -reseen -resees -resegment -resegmentation -resegregate -resegregated -resegregates -resegregating -resegregation -reseise -reseiser -reseize -reseized -reseizer -reseizes -reseizing -reseizure -reselect -reselected -reselecting -reselection -reselects -reself -resell -reseller -resellers -reselling -resells -resemblable -resemblance -resemblances -resemblance's -resemblant -resemble -resembled -resembler -resembles -resembling -resemblingly -reseminate -resend -resending -resends -resene -resensation -resensitization -resensitize -resensitized -resensitizing -resent -resentationally -resented -resentence -resentenced -resentences -resentencing -resenter -resentful -resentfully -resentfullness -resentfulness -resentience -resentiment -resenting -resentingly -resentive -resentless -resentment -resentments -resents -reseparate -reseparated -reseparating -reseparation -resepulcher -resequencing -resequent -resequester -resequestration -reserate -reserene -reserpine -reserpinized -reservable -reserval -reservation -reservationist -reservations -reservation's -reservative -reservatory -reserve -re-serve -reserved -reservedly -reservedness -reservee -reserveful -reserveless -reserver -reservery -reservers -reserves -reservice -reserviced -reservicing -reserving -reservist -reservists -reservoir -reservoired -reservoirs -reservoir's -reservor -reset -Reseta -resets -resettable -resetter -resetters -resetting -resettings -resettle -resettled -resettlement -resettlements -resettles -resettling -resever -resew -resewed -resewing -resewn -resews -resex -resgat -resh -reshake -reshaken -reshaking -reshape -reshaped -reshaper -reshapers -reshapes -reshaping -reshare -reshared -resharing -resharpen -resharpened -resharpening -resharpens -reshave -reshaved -reshaven -reshaves -reshaving -reshear -reshearer -resheathe -reshelve -reshes -reshew -reshift -reshine -reshined -reshines -reshingle -reshingled -reshingling -reshining -reship -reshipment -reshipments -reshipped -reshipper -reshipping -reships -reshod -reshoe -reshoeing -reshoes -reshone -reshook -reshoot -reshooting -reshoots -reshorten -reshot -reshoulder -reshovel -reshow -reshowed -reshower -reshowing -reshown -reshows -reshrine -Resht -reshuffle -reshuffled -reshuffles -reshuffling -reshun -reshunt -reshut -reshutting -reshuttle -resiance -resiancy -resiant -resiccate -resicken -resid -reside -resided -residence -residencer -residences -residence's -residency -residencia -residencies -resident -residental -residenter -residential -residentiality -residentially -residentiary -residentiaryship -residents -resident's -residentship -resider -residers -resides -residing -residiuum -resids -residua -residual -residually -residuals -residuary -residuation -residue -residuent -residues -residue's -residuous -residuua -residuum -residuums -resift -resifted -resifting -resifts -resigh -resight -resights -resign -re-sign -resignal -resignaled -resignaling -resignatary -resignation -resignationism -resignations -resignation's -resigned -resignedly -resigned-looking -resignedness -resignee -resigner -resigners -resignful -resigning -resignment -resigns -resile -resiled -resilement -resiles -resilia -resilial -resiliate -resilience -resiliences -resiliency -resiliencies -resilient -resiliently -resilifer -resiling -resiliometer -resilition -resilium -resyllabification -resilver -resilvered -resilvering -resilvers -resymbolization -resymbolize -resymbolized -resymbolizing -resimmer -resin -resina -resinaceous -resinate -resinated -resinates -resinating -resinbush -resynchronization -resynchronize -resynchronized -resynchronizing -resined -resiner -resinfiable -resing -resiny -resinic -resiniferous -resinify -resinification -resinified -resinifies -resinifying -resinifluous -resiniform -resining -resinize -resink -resinlike -resino- -resinoelectric -resinoextractive -resinogenous -resinoid -resinoids -resinol -resinolic -resinophore -resinosis -resinous -resinously -resinousness -resinovitreous -resins -resin's -resyntheses -resynthesis -resynthesize -resynthesized -resynthesizes -resynthesizing -resynthetize -resynthetized -resynthetizing -resipiscence -resipiscent -resist -resistability -resistable -resistableness -resistably -Resistance -resistances -resistant -resistante -resistantes -resistantly -resistants -resistate -resisted -resystematize -resystematized -resystematizing -resistence -Resistencia -resistent -resister -resisters -resistful -resistibility -resistible -resistibleness -resistibly -resisting -resistingly -resistive -resistively -resistiveness -resistivity -resistless -resistlessly -resistlessness -resistor -resistors -resistor's -resists -resit -resite -resited -resites -resiting -resitting -resituate -resituated -resituates -resituating -resize -resized -resizer -resizes -resizing -resketch -reskew -reskin -reslay -reslander -reslash -reslate -reslated -reslates -reslide -reslot -resmell -resmelt -resmelted -resmelting -resmelts -resmile -resmooth -resmoothed -resmoothing -resmooths -Resnais -resnap -resnatch -resnatron -resnub -resoak -resoaked -resoaks -resoap -resod -resodded -resods -resoften -resoil -resojet -resojets -resojourn -resold -resolder -resoldered -resoldering -resolders -resole -resoled -resolemnize -resoles -resolicit -resolicitation -resolidify -resolidification -resolidified -resolidifies -resolidifying -resoling -resolubility -resoluble -re-soluble -resolubleness -resolute -resolutely -resoluteness -resolutenesses -resoluter -resolutes -resolutest -resolution -re-solution -resolutioner -resolutionist -resolutions -resolutive -resolutory -resolvability -resolvable -resolvableness -resolvancy -resolve -resolved -resolvedly -resolvedness -resolvend -resolvent -resolver -resolvers -resolves -resolvible -resolving -resonance -resonances -resonancy -resonancies -resonant -resonantly -resonants -resonate -resonated -resonates -resonating -resonation -resonations -resonator -resonatory -resonators -resoothe -Resor -resorb -resorbed -resorbence -resorbent -resorbing -resorbs -resorcylic -resorcin -resorcinal -resorcine -resorcinism -resorcinol -resorcinolphthalein -resorcins -resorcinum -resorption -resorptive -resort -re-sort -resorted -resorter -re-sorter -resorters -resorting -resorts -resorufin -resought -resound -re-sound -resounded -resounder -resounding -resoundingly -resounds -resource -resourceful -resourcefully -resourcefulness -resourcefulnesses -resourceless -resourcelessness -resources -resource's -resoutive -resow -resowed -resowing -resown -resows -resp -resp. -respace -respaced -respaces -respacing -respade -respaded -respades -respading -respan -respangle -resparkle -respasse -respeak -respeaks -respecify -respecification -respecifications -respecified -respecifying -respect -respectability -respectabilities -respectabilize -respectable -respectableness -respectably -respectant -respected -respecter -respecters -respectful -respectfully -respectfulness -respectfulnesses -respecting -respection -respective -respectively -respectiveness -respectless -respectlessly -respectlessness -respects -respectum -respectuous -respectworthy -respell -respelled -respelling -respells -respelt -respersive -respice -respiced -respicing -Respighi -respin -respirability -respirable -respirableness -respirating -respiration -respirational -respirations -respirative -respirato- -respirator -respiratored -respiratory -respiratories -respiratorium -respirators -respire -respired -respires -respiring -respirit -respirometer -respirometry -respirometric -respite -respited -respiteless -respites -respiting -resplend -resplendence -resplendences -resplendency -resplendent -resplendently -resplendish -resplice -respliced -resplicing -resplit -resplits -respoke -respoken -respond -responde -respondeat -responded -respondence -respondences -respondency -respondencies -respondendum -respondent -respondentia -respondents -respondent's -responder -responders -responding -responds -Responsa -responsable -responsal -responsary -response -responseless -responser -responses -responsibility -responsibilities -responsible -responsibleness -responsiblenesses -responsibles -responsibly -responsiblity -responsiblities -responsion -responsions -responsive -responsively -responsiveness -responsivenesses -responsivity -responsor -responsory -responsorial -responsories -responsum -responsusa -respot -respots -respray -resprays -resprang -respread -respreading -respreads -respring -respringing -resprings -resprinkle -resprinkled -resprinkling -resprout -resprung -respue -resquander -resquare -resqueak -Ress -ressaidar -ressala -ressalah -ressaldar -ressaut -ressentiment -resshot -Ressler -ressort -rest -restab -restabbed -restabbing -restabilization -restabilize -restabilized -restabilizing -restable -restabled -restabling -restack -restacked -restacking -restacks -restaff -restaffed -restaffing -restaffs -restage -restaged -restages -restaging -restagnate -restain -restainable -restake -restamp -restamped -restamping -restamps -restandardization -restandardize -Restany -restant -restart -restartable -restarted -restarting -restarts -restate -restated -restatement -restatements -restates -restating -restation -restaur -restaurant -restauranteur -restauranteurs -restaurants -restaurant's -restaurate -restaurateur -restaurateurs -restauration -restbalk -rest-balk -rest-cure -rest-cured -Reste -resteal -rested -resteel -resteep -restem -restep -rester -resterilization -resterilize -resterilized -resterilizing -resters -restes -restful -restfuller -restfullest -restfully -restfulness -rest-giving -restharrow -rest-harrow -rest-home -resthouse -resty -Restiaceae -restiaceous -restiad -restibrachium -restiff -restiffen -restiffener -restiffness -restifle -restiform -restigmatize -restyle -restyled -restyles -restyling -restimulate -restimulated -restimulates -restimulating -restimulation -restiness -resting -restinging -restingly -Restio -Restionaceae -restionaceous -restipulate -restipulated -restipulating -restipulation -restipulatory -restir -restirred -restirring -restis -restitch -restitue -restitute -restituted -restituting -restitution -restitutional -restitutionism -Restitutionist -restitutions -restitutive -restitutor -restitutory -restive -restively -restiveness -restivenesses -Restivo -restless -restlessly -restlessness -restlessnesses -restock -restocked -restocking -restocks -Reston -restopper -restorability -restorable -restorableness -restoral -restorals -Restoration -restorationer -restorationism -restorationist -restorations -restoration's -restorative -restoratively -restorativeness -restoratives -restorator -restoratory -rest-ordained -restore -re-store -restored -restorer -restorers -restores -restoring -restoringmoment -restow -restowal -restproof -restr -restraighten -restraightened -restraightening -restraightens -restrain -re-strain -restrainability -restrainable -restrained -restrainedly -restrainedness -restrainer -restrainers -restraining -restrainingly -restrains -restraint -restraintful -restraints -restraint's -restrap -restrapped -restrapping -restratification -restream -rest-refreshed -restrengthen -restrengthened -restrengthening -restrengthens -restress -restretch -restricken -restrict -restricted -restrictedly -restrictedness -restricting -restriction -restrictionary -restrictionism -restrictionist -restrictions -restriction's -restrictive -restrictively -restrictiveness -restricts -restrike -restrikes -restriking -restring -restringe -restringency -restringent -restringer -restringing -restrings -restrip -restrive -restriven -restrives -restriving -restroke -restroom -restrove -restruck -restructure -restructured -restructures -restructuring -restrung -rests -rest-seeking -rest-taking -restudy -restudied -restudies -restudying -restuff -restuffed -restuffing -restuffs -restung -restward -restwards -resubject -resubjection -resubjugate -resublimate -resublimated -resublimating -resublimation -resublime -resubmerge -resubmerged -resubmerging -resubmission -resubmissions -resubmit -resubmits -resubmitted -resubmitting -resubordinate -resubscribe -resubscribed -resubscriber -resubscribes -resubscribing -resubscription -resubstantiate -resubstantiated -resubstantiating -resubstantiation -resubstitute -resubstitution -resucceed -resuck -resudation -resue -resuffer -resufferance -resuggest -resuggestion -resuing -resuit -resulfurize -resulfurized -resulfurizing -resulphurize -resulphurized -resulphurizing -result -resultance -resultancy -resultant -resultantly -resultants -resultative -resulted -resultful -resultfully -resultfulness -resulting -resultingly -resultive -resultless -resultlessly -resultlessness -results -resumability -resumable -resume -resumed -resumeing -resumer -resumers -resumes -resuming -resummon -resummonable -resummoned -resummoning -resummons -resumption -resumptions -resumption's -resumptive -resumptively -resun -resup -resuperheat -resupervise -resupinate -resupinated -resupination -resupine -resupply -resupplied -resupplies -resupplying -resupport -resuppose -resupposition -resuppress -resuppression -resurface -resurfaced -resurfaces -resurfacing -resurgam -resurge -resurged -resurgence -resurgences -resurgency -resurgent -resurges -resurging -resurprise -resurrect -resurrected -resurrectible -resurrecting -Resurrection -resurrectional -resurrectionary -resurrectioner -resurrectioning -resurrectionism -resurrectionist -resurrectionize -resurrections -resurrection's -resurrective -resurrector -resurrectors -resurrects -resurrender -resurround -resurvey -resurveyed -resurveying -resurveys -resuscitable -resuscitant -resuscitate -resuscitated -resuscitates -resuscitating -resuscitation -resuscitations -resuscitative -resuscitator -resuscitators -resuspect -resuspend -resuspension -reswage -reswallow -resward -reswarm -reswear -reswearing -resweat -resweep -resweeping -resweeten -reswell -reswept -reswill -reswim -reswore -Reszke -ret -Reta -retable -retables -retablo -retabulate -retabulated -retabulating -retack -retacked -retackle -retacks -retag -retagged -retags -retail -retailable -retailed -retailer -retailers -retailing -retailment -retailor -retailored -retailoring -retailors -retails -retain -retainability -retainable -retainableness -retainal -retainder -retained -retainer -retainers -retainership -retaining -retainment -retains -retake -retaken -retaker -retakers -retakes -retaking -retal -retaliate -retaliated -retaliates -retaliating -retaliation -retaliationist -retaliations -retaliative -retaliator -retaliatory -retaliators -retalk -retally -retallies -retama -retame -retan -retanned -retanner -retanning -retape -retaped -retapes -retaping -retar -retard -retardance -retardant -retardants -retardate -retardates -retardation -retardations -retardative -retardatory -retarded -retardee -retardence -retardent -retarder -retarders -retarding -retardingly -retardive -retardment -retards -retardure -retare -retarget -retariff -retarred -retarring -retaste -retasted -retastes -retasting -retation -retattle -retaught -retax -retaxation -retaxed -retaxes -retaxing -retch -retched -retches -retching -retchless -retd -retd. -rete -reteach -reteaches -reteaching -reteam -reteamed -reteams -retear -retearing -retears -retecious -retelegraph -retelephone -retelevise -retell -retelling -retells -retem -retemper -retempt -retemptation -retems -retenant -retender -retene -retenes -retent -retention -retentionist -retentions -retentive -retentively -retentiveness -retentivity -retentivities -retentor -retenue -Retepora -retepore -Reteporidae -retest -retested -retestify -retestified -retestifying -retestimony -retestimonies -retesting -retests -retexture -Retha -rethank -rethatch -rethaw -rethe -retheness -rether -rethicken -rethink -rethinker -rethinking -rethinks -rethought -rethrash -rethread -rethreaded -rethreading -rethreads -rethreaten -rethresh -rethresher -rethrill -rethrive -rethrone -rethrow -rethrust -rethunder -retia -retial -retiary -Retiariae -retiarian -retiarii -retiarius -reticella -reticello -reticence -reticences -reticency -reticencies -reticent -reticently -reticket -reticle -reticles -reticle's -reticula -reticular -reticulary -Reticularia -reticularian -reticularly -reticulate -reticulated -reticulately -reticulates -reticulating -reticulation -reticulato- -reticulatocoalescent -reticulatogranulate -reticulatoramose -reticulatovenose -reticule -reticuled -reticules -reticuli -reticulin -reticulitis -reticulo- -reticulocyte -reticulocytic -reticulocytosis -reticuloendothelial -reticuloramose -Reticulosa -reticulose -reticulovenose -Reticulum -retie -retied -retier -reties -retiform -retighten -retightened -retightening -retightens -retying -retile -retiled -retiling -retill -retimber -retimbering -retime -retimed -retimes -retiming -retin -retin- -retina -retinacula -retinacular -retinaculate -retinaculum -retinae -retinal -retinalite -retinals -retinas -retina's -retinasphalt -retinasphaltum -retincture -retine -retinene -retinenes -retinerved -retines -retinge -retinged -retingeing -retinian -retinic -retinispora -retinite -retinites -retinitis -retinize -retinker -retinned -retinning -retino- -retinoblastoma -retinochorioid -retinochorioidal -retinochorioiditis -retinoid -retinol -retinols -retinopapilitis -retinopathy -retinophoral -retinophore -retinoscope -retinoscopy -retinoscopic -retinoscopically -retinoscopies -retinoscopist -Retinospora -retint -retinted -retinting -retints -retinue -retinued -retinues -retinula -retinulae -retinular -retinulas -retinule -retip -retype -retyped -retypes -retyping -retiracy -retiracied -retirade -retiral -retirant -retirants -retire -retired -retiredly -retiredness -retiree -retirees -retirement -retirements -retirement's -retirer -retirers -retires -retiring -retiringly -retiringness -retistene -retitle -retitled -retitles -retitling -retled -retling -RETMA -retoast -retold -retolerate -retoleration -retomb -retonation -retook -retool -retooled -retooling -retools -retooth -retoother -retore -retorn -retorsion -retort -retortable -retorted -retorter -retorters -retorting -retortion -retortive -retorts -retorture -retoss -retotal -retotaled -retotaling -retouch -retouchable -retouched -retoucher -retouchers -retouches -retouching -retouchment -retour -retourable -retrace -re-trace -retraceable -retraced -re-traced -retracement -retraces -retracing -re-tracing -retrack -retracked -retracking -retracks -retract -retractability -retractable -retractation -retracted -retractibility -retractible -retractile -retractility -retracting -retraction -retractions -retractive -retractively -retractiveness -retractor -retractors -retracts -retrad -retrade -retraded -retrading -retradition -retrahent -retraict -retrain -retrainable -retrained -retrainee -retraining -retrains -retrait -retral -retrally -retramp -retrample -retranquilize -retranscribe -retranscribed -retranscribing -retranscription -retransfer -retransference -retransferred -retransferring -retransfers -retransfigure -retransform -retransformation -retransfuse -retransit -retranslate -retranslated -retranslates -retranslating -retranslation -retranslations -retransmission -retransmissions -retransmission's -retransmissive -retransmit -retransmited -retransmiting -retransmits -retransmitted -retransmitting -retransmute -retransplant -retransplantation -retransplanted -retransplanting -retransplants -retransport -retransportation -retravel -retraverse -retraversed -retraversing -retraxit -retread -re-tread -retreaded -re-treader -retreading -retreads -retreat -re-treat -retreatal -retreatant -retreated -retreater -retreatful -retreating -retreatingness -retreatism -retreatist -retreative -retreatment -re-treatment -retreats -retree -retrench -re-trench -retrenchable -retrenched -retrencher -retrenches -retrenching -retrenchment -retrenchments -retry -re-try -retrial -retrials -retribute -retributed -retributing -retribution -retributions -retributive -retributively -retributor -retributory -retricked -retried -retrier -retriers -retries -retrievability -retrievabilities -retrievable -retrievableness -retrievably -retrieval -retrievals -retrieval's -retrieve -retrieved -retrieveless -retrievement -retriever -retrieverish -retrievers -retrieves -retrieving -retrying -retrim -retrimmed -retrimmer -retrimming -retrims -retrip -retro -retro- -retroact -retroacted -retroacting -retroaction -retroactionary -retroactive -retroactively -retroactivity -retroacts -retroalveolar -retroauricular -retrobronchial -retrobuccal -retrobulbar -retrocaecal -retrocardiac -retrocecal -retrocede -retroceded -retrocedence -retrocedent -retroceding -retrocervical -retrocession -retrocessional -retrocessionist -retrocessive -retrochoir -retroclavicular -retroclusion -retrocognition -retrocognitive -retrocolic -retroconsciousness -retrocopulant -retrocopulation -retrocostal -retrocouple -retrocoupler -retrocurved -retrod -retrodate -retrodden -retrodeviation -retrodirective -retrodisplacement -retroduction -retrodural -retroesophageal -retrofire -retrofired -retrofires -retrofiring -retrofit -retrofits -retrofitted -retrofitting -retroflected -retroflection -retroflex -retroflexed -retroflexion -retroflux -retroform -retrofract -retrofracted -retrofrontal -retrogastric -retrogenerative -retrogradation -retrogradatory -retrograde -retrograded -retrogradely -retrogrades -retrogradient -retrograding -retrogradingly -retrogradism -retrogradist -retrogress -retrogressed -retrogresses -retrogressing -retrogression -retrogressionist -retrogressions -retrogressive -retrogressively -retrogressiveness -retrohepatic -retroinfection -retroinsular -retroiridian -retroject -retrojection -retrojugular -retrolabyrinthine -retrolaryngeal -retrolental -retrolingual -retrolocation -retromammary -retromammillary -retromandibular -retromastoid -retromaxillary -retromigration -retromingent -retromingently -retromorphosed -retromorphosis -retronasal -retro-ocular -retro-omental -retro-operative -retro-oral -retropack -retroperitoneal -retroperitoneally -retropharyngeal -retropharyngitis -retroplacental -retroplexed -retroposed -retroposition -retropresbyteral -retropubic -retropulmonary -retropulsion -retropulsive -retroreception -retrorectal -retroreflection -retroreflective -retroreflector -retrorenal -retrorocket -retro-rocket -retrorockets -retrorse -retrorsely -retros -retroserrate -retroserrulate -retrospect -retrospection -retrospections -retrospective -retrospectively -retrospectiveness -retrospectives -retrospectivity -retrosplenic -retrostalsis -retrostaltic -retrosternal -retrosusception -retrot -retrotarsal -retrotemporal -retrothyroid -retrotympanic -retrotracheal -retrotransfer -retrotransference -retro-umbilical -retrouss -retroussage -retrousse -retro-uterine -retrovaccinate -retrovaccination -retrovaccine -retroverse -retroversion -retrovert -retroverted -retrovision -retroxiphoid -retrude -retruded -retruding -retrue -retruse -retrusible -retrusion -retrusive -retrust -rets -retsina -retsinas -Retsof -Rett -retted -retter -rettery -retteries -Rettig -retting -Rettke -rettore -rettory -rettorn -retube -retuck -retumble -retumescence -retund -retunded -retunding -retune -retuned -retunes -retuning -returban -returf -returfer -return -re-turn -returnability -returnable -return-cocked -return-day -returned -returnee -returnees -returner -returners -returning -returnless -returnlessly -returns -retuse -retwine -retwined -retwining -retwist -retwisted -retwisting -retwists -retzian -Reub -Reube -Reuben -Reubenites -Reuchlin -Reuchlinian -Reuchlinism -Reuel -Reuilly -reundercut -reundergo -reundertake -reundulate -reundulation -reune -reunfold -reunify -reunification -reunifications -reunified -reunifies -reunifying -Reunion -reunionism -reunionist -reunionistic -reunions -reunion's -reunitable -reunite -reunited -reunitedly -reuniter -reuniters -reunites -reuniting -reunition -reunitive -reunpack -re-up -reuphold -reupholster -reupholstered -reupholsterer -reupholstery -reupholsteries -reupholstering -reupholsters -reuplift -reurge -Reus -reusability -reusable -reusableness -reusabness -reuse -re-use -reuseable -reuseableness -reuseabness -reused -reuses -reusing -Reuter -Reuters -Reuther -reutilise -reutilised -reutilising -reutilization -reutilizations -reutilize -reutilized -reutilizes -reutilizing -Reutlingen -reutter -reutterance -reuttered -reuttering -reutters -Reuven -Rev -Rev. -Reva -revacate -revacated -revacating -revaccinate -revaccinated -revaccinates -revaccinating -revaccination -revaccinations -revay -Reval -revalenta -revalescence -revalescent -revalidate -revalidated -revalidating -revalidation -revalorization -revalorize -revaluate -revaluated -revaluates -revaluating -revaluation -revaluations -revalue -revalued -revalues -revaluing -revamp -revamped -revamper -revampers -revamping -revampment -revamps -revanche -revanches -revanchism -revanchist -revaporization -revaporize -revaporized -revaporizing -revary -revarnish -revarnished -revarnishes -revarnishing -Revd -reve -reveal -revealability -revealable -revealableness -revealed -revealedly -revealer -revealers -revealing -revealingly -revealingness -revealment -reveals -revegetate -revegetated -revegetating -revegetation -revehent -reveil -reveille -reveilles -revel -revelability -revelant -Revelation -revelational -revelationer -revelationist -revelationize -Revelations -revelation's -revelative -revelator -revelatory -reveled -reveler -revelers -reveling -Revell -revelled -revellent -reveller -revellers -revelly -revelling -revellings -revelment -Revelo -revelous -revelry -revelries -revelrous -revelrout -revel-rout -revels -revenant -revenants -revend -revender -revendicate -revendicated -revendicating -revendication -reveneer -revenge -revengeable -revenged -revengeful -revengefully -revengefulness -revengeless -revengement -revenger -revengers -revenges -revenging -revengingly -revent -reventilate -reventilated -reventilating -reventilation -reventure -revenual -revenue -revenued -revenuer -revenuers -revenues -rever -reverable -reverb -reverbatory -reverbed -reverberant -reverberantly -reverberate -reverberated -reverberates -reverberating -reverberation -reverberations -reverberative -reverberator -reverberatory -reverberatories -reverberators -reverbrate -reverbs -reverdi -reverdure -Revere -revered -reveree -Reverence -reverenced -reverencer -reverencers -reverences -reverencing -Reverend -reverendly -reverends -reverend's -reverendship -reverent -reverential -reverentiality -reverentially -reverentialness -reverently -reverentness -reverer -reverers -reveres -revery -reverie -reveries -reverify -reverification -reverifications -reverified -reverifies -reverifying -revering -reverist -revers -reversability -reversable -reversal -reversals -reversal's -reverse -reverse-charge -reversed -reversedly -reverseful -reverseless -reversely -reversement -reverser -reversers -reverses -reverseways -reversewise -reversi -reversibility -reversible -reversibleness -reversibly -reversify -reversification -reversifier -reversing -reversingly -reversion -reversionable -reversional -reversionally -reversionary -reversioner -reversionist -reversions -reversis -reversist -reversive -reverso -reversos -revert -revertal -reverted -revertendi -reverter -reverters -revertibility -revertible -reverting -revertive -revertively -reverts -revest -revested -revestiary -revesting -revestry -revests -revet -revete -revetement -revetment -revetments -reveto -revetoed -revetoing -revets -revetted -revetting -reveverberatory -revibrant -revibrate -revibrated -revibrating -revibration -revibrational -revictory -revictorious -revictual -revictualed -revictualing -revictualled -revictualling -revictualment -revictuals -revie -Reviel -Reviere -review -reviewability -reviewable -reviewage -reviewal -reviewals -reviewed -reviewer -revieweress -reviewers -reviewing -reviewish -reviewless -reviews -revification -revigor -revigorate -revigoration -revigour -revile -reviled -revilement -revilements -reviler -revilers -reviles -reviling -revilingly -Revillo -revince -revindicate -revindicated -revindicates -revindicating -revindication -reviolate -reviolated -reviolating -reviolation -revirado -revirescence -revirescent -Revisable -revisableness -revisal -revisals -revise -revised -revisee -reviser -revisers -revisership -revises -revisible -revising -revision -revisional -revisionary -revisionism -revisionist -revisionists -revisions -revision's -revisit -revisitable -revisitant -revisitation -revisited -revisiting -revisits -revisor -revisory -revisors -revisualization -revisualize -revisualized -revisualizing -revitalisation -revitalise -revitalised -revitalising -revitalization -revitalize -revitalized -revitalizer -revitalizes -revitalizing -revivability -revivable -revivably -revival -revivalism -revivalist -revivalistic -revivalists -revivalize -revivals -revival's -revivatory -revive -revived -revivement -reviver -revivers -revives -revivescence -revivescency -reviviction -revivify -revivification -revivified -revivifier -revivifies -revivifying -reviving -revivingly -reviviscence -reviviscency -reviviscent -reviviscible -revivor -Revkah -Revloc -revocability -revocabilty -revocable -revocableness -revocably -revocandi -revocate -revocation -revocations -revocative -revocatory -revoyage -revoyaged -revoyaging -revoice -revoiced -revoices -revoicing -revoir -revokable -revoke -revoked -revokement -revoker -revokers -revokes -revoking -revokingly -revolant -revolatilize -Revolite -revolt -revolted -revolter -revolters -revolting -revoltingly -revoltress -revolts -revolubility -revoluble -revolubly -revolunteer -revolute -revoluted -revolution -revolutional -revolutionally -Revolutionary -revolutionaries -revolutionarily -revolutionariness -revolutionary's -revolutioneering -revolutioner -revolutionise -revolutionised -revolutioniser -revolutionising -revolutionism -revolutionist -revolutionists -revolutionize -revolutionized -revolutionizement -revolutionizer -revolutionizers -revolutionizes -revolutionizing -revolutions -revolution's -revolvable -revolvably -revolve -revolved -revolvement -revolvency -revolver -revolvers -revolves -revolving -revolvingly -revomit -revote -revoted -revotes -revoting -revs -revue -revues -revuette -revuist -revuists -revulsant -revulse -revulsed -revulsion -revulsionary -revulsions -revulsive -revulsively -revved -revving -Rew -rewade -rewager -rewaybill -rewayle -rewake -rewaked -rewaken -rewakened -rewakening -rewakens -rewakes -rewaking -rewall -rewallow -rewan -reward -rewardable -rewardableness -rewardably -rewarded -rewardedly -rewarder -rewarders -rewardful -rewardfulness -rewarding -rewardingly -rewardingness -rewardless -rewardproof -rewards -rewarehouse -rewa-rewa -rewarm -rewarmed -rewarming -rewarms -rewarn -rewarrant -rewash -rewashed -rewashes -rewashing -rewater -rewave -rewax -rewaxed -rewaxes -rewaxing -reweaken -rewear -rewearing -reweave -reweaved -reweaves -reweaving -rewed -rewedded -rewedding -reweds -Rewey -reweigh -reweighed -reweigher -reweighing -reweighs -reweight -rewelcome -reweld -rewelded -rewelding -rewelds -rewend -rewet -rewets -rewetted -rewhelp -rewhirl -rewhisper -rewhiten -rewiden -rewidened -rewidening -rewidens -rewin -rewind -rewinded -rewinder -rewinders -rewinding -rewinds -rewing -rewinning -rewins -rewirable -rewire -rewired -rewires -rewiring -rewish -rewithdraw -rewithdrawal -rewoke -rewoken -rewon -rewood -reword -reworded -rewording -rewords -rewore -rework -reworked -reworking -reworks -rewound -rewove -rewoven -rewrap -rewrapped -rewrapping -rewraps -rewrapt -rewrite -rewriter -rewriters -rewrites -rewriting -rewritten -rewrote -rewrought -rewwore -rewwove -REX -Rexana -Rexane -Rexanna -Rexanne -Rexburg -rexen -Rexenite -Rexer -rexes -Rexferd -Rexford -Rexfourd -Rexine -Rexist -Rexmond -Rexmont -Rexroth -Rexville -REXX -rezbanyite -rez-de-chaussee -Reziwood -rezone -rezoned -rezones -rezoning -Rezzani -RF -RFA -rfb -RFC -RFD -RFE -RFI -rfound -RFP -RFQ -rfree -RFS -RFT -rfz -rg -RGB -RGBI -Rgen -rgisseur -rglement -RGP -RGS -Rgt -RGU -RH -RHA -rhabarb -rhabarbarate -rhabarbaric -rhabarbarum -rhabdite -rhabditiform -Rhabditis -rhabdium -rhabdo- -Rhabdocarpum -Rhabdocoela -rhabdocoelan -rhabdocoele -Rhabdocoelida -rhabdocoelidan -rhabdocoelous -rhabdoid -rhabdoidal -rhabdolith -rhabdology -rhabdom -rhabdomal -rhabdomancer -rhabdomancy -rhabdomantic -rhabdomantist -rhabdome -rhabdomere -rhabdomes -rhabdomyoma -rhabdomyosarcoma -rhabdomysarcoma -Rhabdomonas -rhabdoms -rhabdophane -rhabdophanite -rhabdophobia -Rhabdophora -rhabdophoran -Rhabdopleura -rhabdopod -rhabdos -rhabdosome -rhabdosophy -rhabdosphere -rhabdus -rhachi -rhachides -rhachis -rhachises -Rhacianectes -Rhacomitrium -Rhacophorus -Rhadamanthine -Rhadamanthys -Rhadamanthus -rhaebosis -Rhaetia -Rhaetian -Rhaetic -rhaetizite -Rhaeto-romance -Rhaeto-Romanic -Rhaeto-romansh -rhagades -rhagadiform -rhagiocrin -rhagionid -Rhagionidae -rhagite -Rhagodia -rhagon -rhagonate -rhagonoid -rhagose -Rhame -rhamn -Rhamnaceae -rhamnaceous -rhamnal -Rhamnales -Rhamnes -rhamnetin -rhamninase -rhamninose -rhamnite -rhamnitol -rhamnohexite -rhamnohexitol -rhamnohexose -rhamnonic -rhamnose -rhamnoses -rhamnoside -Rhamnus -rhamnuses -rhamphoid -Rhamphorhynchus -Rhamphosuchus -rhamphotheca -rhaphae -rhaphe -rhaphes -Rhapidophyllum -Rhapis -rhapontic -rhaponticin -rhapontin -rhapsode -rhapsodes -rhapsody -rhapsodic -rhapsodical -rhapsodically -rhapsodie -rhapsodies -rhapsodism -rhapsodist -rhapsodistic -rhapsodists -rhapsodize -rhapsodized -rhapsodizes -rhapsodizing -rhapsodomancy -Rhaptopetalaceae -rhason -rhasophore -rhatany -rhatania -rhatanies -rhatikon -rhb -RHC -rhd -rhe -Rhea -rheadine -Rheae -rheas -Rheba -rhebok -rheboks -rhebosis -rheda -rhedae -rhedas -Rhee -rheeboc -rheebok -Rheems -rheen -rhegmatype -rhegmatypy -Rhegnopteri -rheic -Rheidae -Rheydt -Rheiformes -Rheims -Rhein -rheinberry -rhein-berry -Rheingau -Rheingold -Rheinhessen -rheinic -Rheinland -Rheinlander -Rheinland-Pfalz -Rheita -rhema -rhematic -rhematology -rheme -Rhemish -Rhemist -Rhene -rhenea -rhenic -Rhenish -rhenium -rheniums -rheo -rheo- -rheo. -rheobase -rheobases -rheocrat -rheology -rheologic -rheological -rheologically -rheologies -rheologist -rheologists -rheometer -rheometers -rheometry -rheometric -rheopexy -rheophil -rheophile -rheophilic -rheophore -rheophoric -rheoplankton -rheoscope -rheoscopic -rheostat -rheostatic -rheostatics -rheostats -rheotactic -rheotan -rheotaxis -rheotome -rheotron -rheotrope -rheotropic -rheotropism -rhesian -rhesis -Rhesus -rhesuses -rhet -rhet. -Rheta -Rhetian -Rhetic -rhetor -rhetoric -rhetorical -rhetorically -rhetoricalness -rhetoricals -rhetorician -rhetoricians -rhetorics -rhetorize -rhetors -Rhett -Rhetta -Rheum -rheumarthritis -rheumatalgia -rheumatic -rheumatical -rheumatically -rheumaticky -rheumatics -rheumatism -rheumatismal -rheumatismoid -rheumatism-root -rheumatisms -rheumative -rheumatiz -rheumatize -rheumato- -rheumatogenic -rheumatoid -rheumatoidal -rheumatoidally -rheumatology -rheumatologist -rheumed -rheumy -rheumic -rheumier -rheumiest -rheumily -rheuminess -rheums -rhexes -Rhexia -rhexis -RHG -rhyacolite -Rhiamon -Rhiana -Rhianna -Rhiannon -Rhianon -Rhibhus -rhibia -Rhigmus -rhigolene -rhigosis -rhigotic -rhila -rhyme -rhyme-beginning -rhyme-composing -rhymed -rhyme-fettered -rhyme-forming -rhyme-free -rhyme-inspiring -rhymeless -rhymelet -rhymemaker -rhymemaking -rhymeproof -rhymer -rhymery -rhymers -rhymes -rhymester -rhymesters -rhyme-tagged -rhymewise -rhymy -rhymic -rhyming -rhymist -rhin- -Rhina -rhinal -rhinalgia -Rhinanthaceae -Rhinanthus -rhinaria -rhinarium -Rhynchobdellae -Rhynchobdellida -Rhynchocephala -Rhynchocephali -Rhynchocephalia -rhynchocephalian -rhynchocephalic -rhynchocephalous -Rhynchocoela -rhynchocoelan -rhynchocoele -rhynchocoelic -rhynchocoelous -rhynchodont -rhyncholite -Rhynchonella -Rhynchonellacea -Rhynchonellidae -rhynchonelloid -Rhynchophora -rhynchophoran -rhynchophore -rhynchophorous -Rhynchopinae -Rhynchops -Rhynchosia -Rhynchospora -Rhynchota -rhynchotal -rhynchote -rhynchotous -rhynconellid -rhincospasm -Rhyncostomi -Rhynd -rhine -Rhyne -Rhinebeck -Rhinecliff -Rhinegold -rhinegrave -Rhinehart -Rhineland -Rhinelander -Rhineland-Palatinate -rhinencephala -rhinencephalic -rhinencephalon -rhinencephalons -rhinencephalous -rhinenchysis -Rhineodon -Rhineodontidae -Rhyner -Rhines -rhinestone -rhinestones -Rhineura -rhineurynter -Rhynia -Rhyniaceae -Rhinidae -rhinion -rhinitides -rhinitis -rhino -rhino- -Rhinobatidae -Rhinobatus -rhinobyon -rhinocaul -rhinocele -rhinocelian -rhinoceri -rhinocerial -rhinocerian -rhinocerical -rhinocerine -rhinoceroid -rhinoceros -rhinoceroses -rhinoceroslike -rhinoceros-shaped -rhinocerotic -Rhinocerotidae -rhinocerotiform -rhinocerotine -rhinocerotoid -Rhynocheti -rhinochiloplasty -rhinocoele -rhinocoelian -Rhinoderma -rhinodynia -rhinogenous -rhinolalia -rhinolaryngology -rhinolaryngoscope -rhinolite -rhinolith -rhinolithic -rhinology -rhinologic -rhinological -rhinologist -rhinolophid -Rhinolophidae -rhinolophine -rhinopharyngeal -rhinopharyngitis -rhinopharynx -Rhinophidae -rhinophyma -Rhinophis -rhinophonia -rhinophore -rhinoplasty -rhinoplastic -rhinopolypus -Rhinoptera -Rhinopteridae -rhinorrhagia -rhinorrhea -rhinorrheal -rhinorrhoea -rhinos -rhinoscleroma -rhinoscope -rhinoscopy -rhinoscopic -rhinosporidiosis -Rhinosporidium -rhinotheca -rhinothecal -rhinovirus -Rhynsburger -Rhinthonic -Rhinthonica -rhyobasalt -rhyodacite -rhyolite -rhyolite-porphyry -rhyolites -rhyolitic -rhyotaxitic -rhyparographer -rhyparography -rhyparographic -rhyparographist -rhipidate -rhipidion -Rhipidistia -rhipidistian -rhipidium -Rhipidoglossa -rhipidoglossal -rhipidoglossate -Rhipidoptera -rhipidopterous -rhipiphorid -Rhipiphoridae -Rhipiptera -rhipipteran -rhipipterous -rhypography -Rhipsalis -rhyptic -rhyptical -Rhiptoglossa -Rhys -rhysimeter -Rhyssa -rhyta -rhythm -rhythmal -rhythm-and-blues -rhythmed -rhythmic -rhythmical -rhythmicality -rhythmically -rhythmicity -rhythmicities -rhythmicize -rhythmics -rhythmist -rhythmizable -rhythmization -rhythmize -rhythmless -rhythmometer -rhythmopoeia -rhythmproof -rhythms -rhythm's -rhythmus -Rhytidodon -rhytidome -rhytidosis -Rhytina -Rhytisma -rhyton -rhytta -rhiz- -rhiza -rhizanth -rhizanthous -rhizautoicous -Rhizina -Rhizinaceae -rhizine -rhizinous -rhizo- -rhizobia -Rhizobium -rhizocarp -Rhizocarpeae -rhizocarpean -rhizocarpian -rhizocarpic -rhizocarpous -rhizocaul -rhizocaulus -Rhizocephala -rhizocephalan -rhizocephalid -rhizocephalous -rhizocorm -Rhizoctonia -rhizoctoniose -rhizodermis -Rhizodus -Rhizoflagellata -rhizoflagellate -rhizogen -rhizogenesis -rhizogenetic -rhizogenic -rhizogenous -rhizoid -rhizoidal -rhizoids -rhizoma -rhizomata -rhizomatic -rhizomatous -rhizome -rhizomelic -rhizomes -rhizomic -rhizomorph -rhizomorphic -rhizomorphoid -rhizomorphous -rhizoneure -rhizophagous -rhizophilous -rhizophyte -Rhizophora -Rhizophoraceae -rhizophoraceous -rhizophore -rhizophorous -rhizopi -rhizoplane -rhizoplast -rhizopod -Rhizopoda -rhizopodal -rhizopodan -rhizopodist -rhizopodous -rhizopods -Rhizopogon -Rhizopus -rhizopuses -rhizosphere -Rhizostomae -Rhizostomata -rhizostomatous -rhizostome -rhizostomous -Rhizota -rhizotaxy -rhizotaxis -rhizote -rhizotic -rhizotomi -rhizotomy -rhizotomies -Rhne -Rh-negative -rho -Rhoades -Rhoadesville -Rhoads -rhod- -Rhoda -rhodaline -rhodamin -Rhodamine -rhodamins -rhodanate -Rhodanian -rhodanic -rhodanine -rhodanthe -Rhode -Rhodelia -Rhodell -rhodeoretin -rhodeose -Rhodes -Rhodesdale -Rhodesia -Rhodesian -rhodesians -Rhodesoid -rhodeswood -Rhodhiss -Rhody -Rhodia -Rhodian -rhodic -Rhodie -Rhodymenia -Rhodymeniaceae -rhodymeniaceous -Rhodymeniales -rhodinal -rhoding -rhodinol -rhodite -rhodium -rhodiums -rhodizite -rhodizonic -rhodo- -Rhodobacteriaceae -Rhodobacterioideae -rhodochrosite -Rhodocystis -rhodocyte -Rhodococcus -rhododaphne -rhododendron -rhododendrons -rhodolite -Rhodomelaceae -rhodomelaceous -rhodomontade -rhodonite -Rhodope -rhodophane -Rhodophyceae -rhodophyceous -rhodophyll -Rhodophyllidaceae -Rhodophyta -Rhodopis -rhodoplast -rhodopsin -Rhodora -Rhodoraceae -rhodoras -rhodorhiza -Rhodos -rhodosperm -Rhodospermeae -rhodospermin -rhodospermous -Rhodospirillum -Rhodothece -Rhodotypos -Rhodus -rhoea -Rhoeadales -Rhoecus -Rhoeo -Rhoetus -rhomb -rhomb- -rhombencephala -rhombencephalon -rhombencephalons -rhombenla -rhombenporphyr -rhombi -rhombic -rhombical -rhombiform -rhomb-leaved -rhombo- -rhomboclase -rhomboganoid -Rhomboganoidei -rhombogene -rhombogenic -rhombogenous -rhombohedra -rhombohedral -rhombohedrally -rhombohedric -rhombohedron -rhombohedrons -rhomboid -rhomboidal -rhomboidally -rhomboidei -rhomboides -rhomboideus -rhomboidly -rhomboid-ovate -rhomboids -rhomboquadratic -rhomborectangular -rhombos -rhombovate -Rhombozoa -rhombs -rhombus -rhombuses -Rhona -rhoncal -rhonchal -rhonchi -rhonchial -rhonchus -Rhonda -Rhondda -rhopalic -rhopalism -rhopalium -Rhopalocera -rhopaloceral -rhopalocerous -Rhopalura -rhos -rhotacism -rhotacismus -rhotacist -rhotacistic -rhotacize -rhotic -Rh-positive -RHS -Rh-type -Rhu -rhubarb -rhubarby -rhubarbs -rhumb -rhumba -rhumbaed -rhumbaing -rhumbas -rhumbatron -rhumbs -Rhus -rhuses -RHV -RI -ry -Ria -rya -RIACS -rial -ryal -rials -rialty -Rialto -rialtos -Ryan -Riana -Riancho -riancy -Riane -ryania -Ryann -Rianna -Riannon -Rianon -riant -riantly -RIAS -ryas -riata -riatas -Ryazan -rib -RIBA -Ribal -ribald -ribaldish -ribaldly -ribaldness -ribaldry -ribaldries -ribaldrous -ribalds -riband -Ribandism -Ribandist -ribandlike -ribandmaker -ribandry -ribands -riband-shaped -riband-wreathed -ribat -rybat -ribaudequin -Ribaudo -ribaudred -ribazuba -ribband -ribbandry -ribbands -rib-bearing -ribbed -Ribbentrop -ribber -ribbers -ribbet -ribby -ribbidge -ribbier -ribbiest -ribbing -ribbings -Ribble -ribble-rabble -ribbon -ribbonback -ribbon-bedizened -ribbon-bordering -ribbon-bound -ribboned -ribboner -ribbonfish -ribbon-fish -ribbonfishes -ribbon-grass -ribbony -ribboning -Ribbonism -ribbonlike -ribbonmaker -Ribbonman -ribbon-marked -ribbonry -ribbons -ribbon's -ribbon-shaped -ribbonweed -ribbonwood -rib-breaking -ribe -Ribeirto -Ribera -Ribero -Ribes -rib-faced -ribgrass -rib-grass -ribgrasses -rib-grated -Ribhus -ribibe -Ribicoff -ribier -ribiers -Rybinsk -ribless -riblet -riblets -riblike -rib-mauled -rib-nosed -riboflavin -riboflavins -ribonic -ribonuclease -ribonucleic -ribonucleoprotein -ribonucleoside -ribonucleotide -ribose -riboses -riboso -ribosomal -ribosome -ribosomes -ribosos -riboza -ribozo -ribozos -rib-pointed -rib-poking -ribroast -rib-roast -ribroaster -ribroasting -ribs -rib's -ribskin -ribspare -rib-sticking -Ribston -rib-striped -rib-supported -rib-welted -ribwork -ribwort -ribworts -ribzuba -RIC -Rica -Ricard -Ricarda -Ricardama -Ricardian -Ricardianism -Ricardo -ricasso -Ricca -Rycca -Riccardo -Ricci -Riccia -Ricciaceae -ricciaceous -Ricciales -Riccio -Riccioli -Riccius -Rice -ricebird -rice-bird -ricebirds -Riceboro -ricecar -ricecars -rice-cleaning -rice-clipping -riced -rice-eating -rice-grading -ricegrass -rice-grinding -rice-growing -rice-hulling -ricey -riceland -rice-paper -rice-planting -rice-polishing -rice-pounding -ricer -ricercar -ricercare -ricercari -ricercars -ricercata -ricers -rices -Ricetown -Riceville -rice-water -Rich -rich-appareled -Richara -Richard -Rychard -Richarda -Richardia -Richardo -Richards -Richardson -Richardsonia -Richardsville -Richardton -Richart -rich-attired -rich-bedight -rich-bound -rich-built -Richburg -rich-burning -rich-clad -rich-colored -rich-conceited -rich-distilled -richdom -riche -Richebourg -Richey -Richeyville -Richel -Richela -Richelieu -Richella -Richelle -richellite -rich-embroidered -richen -richened -richening -richens -Richer -Richers -riches -richesse -richest -Richet -richeted -richeting -richetted -richetting -Richfield -rich-figured -rich-flavored -rich-fleeced -rich-fleshed -Richford -rich-glittering -rich-haired -Richy -Richia -Richie -Richier -rich-jeweled -Richlad -rich-laden -Richland -Richlands -richly -richling -rich-looking -Richma -Richmal -Richman -rich-minded -Richmond -Richmonddale -Richmondena -Richmond-upon-Thames -Richmondville -Richmound -richness -richnesses -rich-ored -rich-robed -rich-set -rich-soiled -richt -rich-tasting -Richter -richterite -Richthofen -Richton -rich-toned -Richvale -Richview -Richville -rich-voiced -richweed -rich-weed -richweeds -Richwood -Richwoods -rich-wrought -Rici -ricin -ricine -ricinelaidic -ricinelaidinic -ricing -ricinic -ricinine -ricininic -ricinium -ricinoleate -ricinoleic -ricinolein -ricinolic -ricins -Ricinulei -Ricinus -ricinuses -Rick -Rickard -rickardite -Rickart -rick-barton -rick-burton -ricked -Rickey -rickeys -Ricker -Rickert -ricket -rickety -ricketier -ricketiest -ricketily -ricketiness -ricketish -rickets -Ricketts -Rickettsia -rickettsiae -rickettsial -Rickettsiales -rickettsialpox -rickettsias -Ricki -Ricky -rickyard -rick-yard -Rickie -ricking -rickle -Rickman -rickmatic -Rickover -rickrack -rickracks -Rickreall -ricks -ricksha -rickshas -rickshaw -rickshaws -rickshaw's -rickstaddle -rickstand -rickstick -Rickwood -Rico -ricochet -ricocheted -ricocheting -ricochets -ricochetted -ricochetting -ricolettaite -Ricoriki -ricotta -ricottas -ricrac -ricracs -RICS -rictal -rictus -rictuses -RID -Rida -ridability -ridable -ridableness -ridably -Rydal -Rydberg -riddam -riddance -riddances -ridded -riddel -ridden -ridder -Rydder -ridders -ridding -Riddle -riddled -riddlemeree -riddler -riddlers -riddles -Riddlesburg -Riddleton -riddling -riddlingly -riddlings -ride -Ryde -rideable -rideau -riden -rident -Rider -Ryder -ridered -rideress -riderless -riders -ridership -riderships -Riderwood -Ryderwood -rides -ridge -ridgeband -ridgeboard -ridgebone -ridge-bone -Ridgecrest -ridged -Ridgedale -Ridgefield -ridgel -Ridgeland -Ridgeley -ridgelet -Ridgely -ridgelike -ridgeling -ridgels -ridgepiece -ridgeplate -ridgepole -ridgepoled -ridgepoles -ridger -ridgerope -ridges -ridge's -ridge-seeded -ridge-tile -ridgetree -Ridgeview -Ridgeville -Ridgeway -ridgewise -Ridgewood -ridgy -ridgier -ridgiest -ridgil -ridgils -ridging -ridgingly -Ridglea -Ridglee -Ridgley -ridgling -ridglings -Ridgway -ridibund -ridicule -ridiculed -ridicule-proof -ridiculer -ridicules -ridiculing -ridiculize -ridiculosity -ridiculous -ridiculously -ridiculousness -ridiculousnesses -ridiest -riding -riding-coat -Ridinger -riding-habit -riding-hood -ridingman -ridingmen -ridings -Ridley -ridleys -Ridott -ridotto -ridottos -rids -Rie -Rye -riebeckite -Riebling -rye-bread -rye-brome -Riedel -Riefenstahl -Riegel -Riegelsville -Riegelwood -Rieger -ryegrass -rye-grass -ryegrasses -Riehl -Rieka -Riel -Ryeland -Riella -riels -riem -Riemann -Riemannean -Riemannian -riempie -ryen -Rienzi -Rienzo -ryepeck -rier -Ries -ryes -Riesel -Riesling -Riesman -Riess -Riessersee -Rieth -Rieti -Rietveld -riever -rievers -RIF -rifacimenti -rifacimento -rifampicin -rifampin -rifart -rife -rifely -rifeness -rifenesses -rifer -rifest -RIFF -riffed -Riffi -Riffian -riffing -Riffle -riffled -riffler -rifflers -riffles -riffling -riffraff -riff-raff -riffraffs -Riffs -Rifi -Rifian -Rifkin -rifle -riflebird -rifle-bird -rifled -rifledom -rifleite -rifleman -riflemanship -riflemen -rifleproof -rifler -rifle-range -riflery -rifleries -riflers -rifles -riflescope -rifleshot -rifle-shot -rifling -riflings -rifs -rift -rifted -rifter -rifty -rifting -rifty-tufty -riftless -Rifton -rifts -rift-sawed -rift-sawing -rift-sawn -rig -Riga -rigadig -rigadon -rigadoon -rigadoons -rigamajig -rigamarole -rigation -rigatoni -rigatonis -rigaudon -rigaudons -rigbane -Rigby -Rigdon -Rigel -Rigelian -rigescence -rigescent -riggal -riggald -Riggall -rigged -rigger -riggers -rigging -riggings -Riggins -riggish -riggite -riggot -Riggs -right -rightable -rightabout -right-about -rightabout-face -right-about-face -right-aiming -right-angle -right-angled -right-angledness -right-angular -right-angularity -right-away -right-bank -right-believed -right-believing -right-born -right-bout -right-brained -right-bred -right-center -right-central -right-down -right-drawn -right-eared -righted -right-eyed -right-eyedness -righten -righteous -righteously -righteousness -righteousnesses -righter -righters -rightest -right-footed -right-footer -rightforth -right-forward -right-framed -rightful -rightfully -rightfulness -rightfulnesses -righthand -right-hand -right-handed -right-handedly -right-handedness -right-hander -right-handwise -rightheaded -righthearted -right-ho -righty -righties -righting -rightish -rightism -rightisms -rightist -rightists -right-lay -right-laid -rightle -rightless -rightlessness -rightly -right-lined -right-made -right-meaning -right-minded -right-mindedly -right-mindedness -rightmost -rightness -rightnesses -righto -right-of-way -right-oh -right-onward -right-principled -right-running -rights -right-shaped -right-shapen -rightship -right-side -right-sided -right-sidedly -right-sidedness -rights-of-way -right-thinking -right-turn -right-up -right-walking -rightward -rightwardly -rightwards -right-wheel -right-wing -right-winger -right-wingish -right-wingism -Rigi -rigid -rigid-body -rigid-frame -rigidify -rigidification -rigidified -rigidifies -rigidifying -rigidist -rigidity -rigidities -rigidly -rigid-nerved -rigidness -rigid-seeming -rigidulous -riginal -riglet -rigling -rigmaree -rigmarole -rigmarolery -rigmaroles -rigmarolic -rigmarolish -rigmarolishly -rignum -rigodon -rigol -rigole -rigolet -rigolette -Rigoletto -rigor -rigorism -rigorisms -rigorist -rigoristic -rigorists -rigorous -rigorously -rigorousness -rigors -rigour -rigourism -rigourist -rigouristic -rigours -rig-out -rigs -rig's -rigsby -Rigsdag -rigsdaler -Rigsmaal -Rigsmal -rigueur -rig-up -Rigveda -Rig-Veda -Rigvedic -Rig-vedic -rigwiddy -rigwiddie -rigwoodie -Riha -Rihana -RIIA -Riyadh -riyal -riyals -Riis -Rijeka -rijksdaalder -rijksdaaler -Rijksmuseum -Rijn -Rijswijk -Rik -Rika -Rikari -ryke -ryked -Riker -rykes -Riki -ryking -rikisha -rikishas -rikk -Rikki -riksdaalder -Riksdag -riksha -rikshas -rikshaw -rikshaws -Riksm' -Riksmaal -Riksmal -Ryland -rilawa -Rilda -rile -Ryle -riled -Riley -Ryley -Rileyville -riles -rilievi -rilievo -riling -Rilke -rill -rille -rilled -rilles -rillet -rillets -rillett -rillette -rillettes -rilly -rilling -Rillings -Rillis -Rillito -rill-like -rillock -rillow -rills -rillstone -Rillton -RILM -RIM -Rima -rimal -Rymandra -Rimas -rimate -rimation -rimbase -Rimbaud -rim-bearing -rim-bending -rimble-ramble -rim-bound -rim-cut -rim-deep -rime -ryme -rime-covered -rimed -rime-damp -rime-frost -rime-frosted -rime-laden -rimeless -rimer -rimery -rimers -Rimersburg -rimes -rimester -rimesters -rimfire -rim-fire -rimfires -rimy -rimier -rimiest -rimiform -riminess -riming -Rimini -rimland -rimlands -rimless -Rimma -rimmaker -rimmaking -rimmed -rimmer -rimmers -rimming -Rimola -rimose -rimosely -rimosity -rimosities -rimous -Rimouski -rimpi -rimple -rimpled -rimples -rimpling -rimption -rimptions -rimrock -rimrocks -rims -rim's -Rimsky-Korsakoff -Rimsky-Korsakov -rimstone -rimu -rimula -rimulose -rin -Rina -Rinaldo -Rinard -rinceau -rinceaux -rinch -Rynchospora -rynchosporous -Rincon -Rind -rynd -Rinde -rinded -rinderpest -Rindge -rindy -rindle -rindless -rinds -rind's -rynds -rine -Rinee -Rinehart -Rineyville -Riner -rinforzando -Ring -ringable -ring-adorned -ring-a-lievio -ring-a-rosy -ring-around -Ringatu -ring-banded -ringbark -ring-bark -ringbarked -ringbarker -ringbarking -ringbarks -ringbill -ring-billed -ringbird -ringbolt -ringbolts -ringbone -ring-bone -ringboned -ringbones -ring-bored -ring-bound -ringcraft -ring-dyke -ringdove -ring-dove -ringdoves -Ringe -ringed -ringeye -ring-eyed -ringent -ringer -ringers -ring-fence -ring-finger -ring-formed -ringgit -ringgiver -ringgiving -ringgoer -Ringgold -ringhals -ringhalses -ring-handled -ringhead -ringy -ring-in -ringiness -ringing -ringingly -ringingness -ringings -ringite -Ringle -ringlead -ringleader -ringleaderless -ringleaders -ringleadership -ring-legged -Ringler -ringless -ringlet -ringleted -ringlety -ringlets -ringlike -Ringling -ringmaker -ringmaking -ringman -ring-man -ringmaster -ringmasters -ringneck -ring-neck -ring-necked -ringnecks -Ringo -Ringoes -ring-off -ring-oil -Ringold -ring-porous -ring-ridden -rings -ringsail -ring-shaped -ring-shout -ringside -ringsider -ringsides -ring-small -Ringsmuth -Ringsted -ringster -ringstick -ringstraked -ring-straked -ring-streaked -ringtail -ringtailed -ring-tailed -ringtails -ringtaw -ringtaws -ringtime -ringtoss -ringtosses -Ringtown -ring-up -ringwalk -ringwall -ringwise -Ringwood -ringworm -ringworms -rink -rinka -rinker -rinkite -rinks -Rinna -rinncefada -rinneite -rinner -rinning -rins -rinsable -rinse -rinsed -rinser -rinsers -rinses -rinsible -rinsing -rinsings -rynt -rinthereout -rintherout -Rintoul -Rio -Riobard -riobitsu -Riocard -Rioja -riojas -ryokan -ryokans -Rion -Ryon -Rior -Riordan -Riorsson -riot -ryot -rioted -rioter -rioters -rioting -riotingly -riotise -riotist -riotistic -riotocracy -riotous -riotously -riotousness -riotproof -riotry -riots -ryots -ryotwar -ryotwari -ryotwary -RIP -ripa -ripal -riparial -riparian -Riparii -riparious -Riparius -ripcord -ripcords -RIPE -rype -ripe-aged -ripe-bending -ripe-cheeked -rypeck -ripe-colored -riped -ripe-eared -ripe-faced -ripe-grown -ripely -ripelike -ripe-looking -ripen -ripened -ripener -ripeners -ripeness -ripenesses -ripening -ripeningly -ripens -ripe-picked -riper -ripe-red -ripes -ripest -ripe-tongued -ripe-witted -ripgut -ripicolous -ripidolite -ripieni -ripienist -ripieno -ripienos -ripier -riping -Ripley -Ripleigh -Riplex -ripoff -rip-off -ripoffs -Ripon -rypophobia -ripost -riposte -riposted -ripostes -riposting -riposts -Ripp -rippable -ripped -Rippey -ripper -ripperman -rippermen -rippers -rippet -rippier -ripping -rippingly -rippingness -rippit -ripple -rippled -ripple-grass -rippleless -Ripplemead -rippler -ripplers -ripples -ripplet -ripplets -ripply -ripplier -rippliest -rippling -ripplingly -Rippon -riprap -rip-rap -riprapped -riprapping -ripraps -rip-roaring -rip-roarious -RIPS -ripsack -ripsaw -rip-saw -ripsaws -ripsnorter -ripsnorting -ripstone -ripstop -ripstops -riptide -riptides -Ripuarian -ripup -Riquewihr -Ririe -riroriro -Risa -risala -risaldar -risberm -RISC -Risco -risdaler -Rise -risen -riser -risers -riserva -rises -rishi -rishis -rishtadar -risibility -risibilities -risible -risibleness -risibles -risibly -rising -risings -risk -risked -risker -riskers -riskful -riskfulness -risky -riskier -riskiest -riskily -riskiness -riskinesses -risking -riskish -riskless -risklessness -riskproof -risks -Risley -Rysler -RISLU -Rison -Risorgimento -risorgimentos -risorial -risorius -risorse -risotto -risottos -risp -risper -rispetto -risposta -risqu -risque -risquee -Riss -Rissa -rissel -Risser -Rissian -rissle -Rissoa -rissoid -Rissoidae -rissole -rissoles -rissom -Rist -Risteau -ristori -risus -risuses -Ryswick -RIT -rit. -RITA -ritalynne -ritard -ritardando -ritardandos -ritards -Ritch -ritchey -Ritchie -rite -riteless -ritelessness -ritely -ritenuto -Ryter -rites -rite's -rithe -Riti -rytidosis -Rytina -ritling -ritmaster -Ritner -ritornel -ritornelle -ritornelli -ritornello -ritornellos -ritratto -Ritschlian -Ritschlianism -ritsu -Ritter -ritters -rittingerite -Rittman -rittmaster -rittock -ritual -rituale -ritualise -ritualism -ritualisms -ritualist -ritualistic -ritualistically -ritualists -rituality -ritualities -ritualization -ritualize -ritualized -ritualizing -ritualless -ritually -rituals -ritus -Ritwan -Ritz -ritzes -ritzy -ritzier -ritziest -ritzily -ritziness -Ritzville -Ryukyu -Ryun -Ryunosuke -Ryurik -riv -riv. -Riva -rivage -rivages -rival -rivalable -rivaled -Rivalee -rivaless -rivaling -rivalism -rivality -rivalize -rivalled -rivalless -rivalling -rivalry -rivalries -rivalry's -rivalrous -rivalrousness -rivals -rivalship -Rivard -rive -rived -rivederci -rivel -riveled -riveling -rivell -rivelled -riven -River -Rivera -riverain -Riverbank -riverbanks -riverbed -riverbeds -river-blanched -riverboat -riverboats -river-borne -river-bottom -riverbush -river-caught -Riverdale -riverdamp -river-drift -rivered -Riveredge -riveret -river-fish -river-formed -riverfront -river-given -river-god -river-goddess -Riverhead -riverhood -river-horse -rivery -riverine -riverines -riverish -riverless -riverlet -riverly -riverlike -riverling -riverman -rivermen -Rivers -river's -riverscape -Riverside -riversider -riversides -river-sundered -Riverton -Rivervale -Riverview -riverway -riverward -riverwards -riverwash -river-water -river-watered -riverweed -riverwise -river-worn -Rives -Rivesville -rivet -riveted -riveter -riveters -rivethead -riveting -rivetless -rivetlike -rivets -rivetted -rivetting -Rivi -Rivy -Riviera -rivieras -riviere -rivieres -Rivina -riving -rivingly -Rivinian -Rivkah -rivo -rivose -Rivularia -Rivulariaceae -rivulariaceous -rivulation -rivulet -rivulets -rivulet's -rivulose -rivulus -rix -rixatrix -rixdaler -rix-dollar -Rixeyville -Rixford -rixy -Riza -Rizal -rizar -Rizas -riziform -Rizika -rizzar -rizzer -Rizzi -Rizzio -rizzle -Rizzo -rizzom -rizzomed -rizzonite -RJ -Rjchard -RJE -rKET -rk-up -RL -RLC -RLCM -RLD -RLDS -rle -r-less -RLG -rly -RLIN -RLL -RLOGIN -RLT -RM -rm. -RMA -RMAS -RMATS -RMC -RMF -RMI -RMM -rmoulade -RMR -RMS -RN -RNA -RNAS -rnd -RNGC -RNLI -RNOC -RNR -RNVR -RNWMP -RNZAF -RNZN -RO -ROA -Roach -roachback -roach-back -roach-backed -roach-bellied -roach-bent -Roachdale -roached -roaches -roaching -road -roadability -roadable -roadbed -roadbeds -road-bike -roadblock -roadblocks -roadbook -roadcraft -roaded -roadeo -roadeos -roader -roaders -road-faring -roadfellow -road-grading -roadhead -road-hoggish -road-hoggism -roadholding -roadhouse -roadhouses -roadie -roadies -roading -roadite -roadless -roadlessness -roadlike -road-maker -roadman -roadmaster -road-oiling -road-ready -roadroller -roadrunner -roadrunners -roads -road's -roadshow -roadside -roadsider -roadsides -roadsman -roadstead -roadsteads -roadster -roadsters -roadster's -roadstone -road-test -road-testing -roadtrack -road-train -roadway -roadways -roadway's -road-weary -roadweed -roadwise -road-wise -roadwork -roadworks -roadworthy -roadworthiness -roak -Roald -roam -roamage -roamed -roamer -roamers -roaming -roamingly -roams -roan -Roana -Roane -Roann -Roanna -Roanne -Roanoke -roans -roan-tree -roar -roared -roarer -roarers -roaring -roaringly -roarings -Roark -Roarke -roars -roast -roastable -roasted -roaster -roasters -roasting -roastingly -roasts -Roath -ROB -Robaina -robalito -robalo -robalos -roband -robands -Robards -Robb -robbed -Robbe-Grillet -robber -robbery -robberies -robbery's -robberproof -robbers -robber's -Robbert -Robbi -Robby -Robbia -Robbie -Robbin -Robbyn -robbing -Robbins -Robbinsdale -Robbinston -Robbinsville -Robbiole -robe -robed -robe-de-chambre -robeless -Robeline -Robena -Robenhausian -Robenia -rober -roberd -Roberdsman -Robers -Roberson -Robersonville -Robert -Roberta -Robertlee -Roberto -Roberts -Robertsburg -Robertsdale -Robertson -Robertsville -Roberval -robes -robes-de-chambre -Robeson -Robesonia -Robespierre -Robet -robhah -Robi -Roby -Robigalia -Robigo -Robigus -Robillard -Robin -Robyn -Robina -Robinet -Robinett -Robinetta -Robinette -robing -Robinia -robinin -robinoside -Robins -robin's -Robinson -Robinsonville -Robison -roble -robles -Roboam -robomb -roborant -roborants -roborate -roboration -roborative -roborean -roboreous -robot -robot-control -robotesque -robotian -robotic -robotics -robotism -robotisms -robotistic -robotization -robotize -robotized -robotizes -robotizing -robotlike -robotry -robotries -robots -robot's -robs -Robson -Robstown -robur -roburite -Robus -robust -robuster -robustest -robustful -robustfully -robustfulness -robustic -robusticity -robustious -robustiously -robustiousness -robustity -robustly -robustness -robustnesses -robustuous -ROC -Roca -rocaille -Rocamadur -rocambole -Rocca -Roccella -Roccellaceae -roccellic -roccellin -roccelline -Rocco -Roch -Rochdale -Roche -Rochea -rochelime -Rochell -Rochella -Rochelle -Rochemont -Rocheport -Rocher -Rochert -Rochester -rochet -rocheted -rochets -Rochette -Rochford -roching -Rochkind -Rochus -Rociada -rociest -Rocinante -Rock -rockaby -rockabye -rockabies -rockabyes -rockabilly -rockable -rockably -Rockafellow -rockallite -rock-and-roll -rockat -Rockaway -rockaways -rock-based -rock-basin -rock-battering -rock-bed -rock-begirdled -rockbell -rockberry -rock-bestudded -rock-bethreatened -rockbird -rock-boring -rockborn -rock-bottom -rockbound -rock-bound -rock-breaking -rockbrush -rock-built -rockcist -rock-cistus -rock-clad -rock-cleft -rock-climb -rock-climber -rock-climbing -rock-concealed -rock-covered -rockcraft -rock-crested -rock-crushing -rock-cut -Rockdale -rock-drilling -rock-dusted -rock-dwelling -rocked -rock-eel -Rockefeller -Rockey -Rockel -rockelay -rock-embosomed -rock-encircled -rock-encumbered -rock-enthroned -Rocker -rockered -rockery -rockeries -rockers -rockerthon -rocket -rocket-borne -rocketed -rocketeer -rocketer -rocketers -rockety -rocketing -rocketlike -rocketor -rocket-propelled -rocketry -rocketries -rockets -rocketsonde -rock-faced -Rockfall -rock-fallen -rockfalls -rock-fast -Rockfield -rock-fill -rock-firm -rock-firmed -rockfish -rock-fish -rockfishes -rockfoil -Rockford -rock-forming -rock-free -rock-frequenting -rock-girded -rock-girt -rockhair -Rockhall -Rockham -Rockhampton -rock-hard -rockhearted -rock-hewn -Rockholds -Rockhouse -Rocky -Rockie -rockier -Rockies -rockiest -rockiness -rocking -Rockingham -rockingly -rock-inhabiting -rockish -rocklay -Rockland -Rockledge -rockless -rocklet -rocklike -Rocklin -rockling -rocklings -rock-loving -rockman -Rockmart -rock-melting -Rockne -rock-'n'-roll -rockoon -rockoons -rock-piercing -rock-pigeon -rock-piled -rock-plant -Rockport -rock-pulverizing -rock-razing -rock-reared -rockribbed -rock-ribbed -rock-roofed -rock-rooted -rockrose -rock-rose -rockroses -rock-rushing -rocks -rock-salt -rock-scarped -rockshaft -rock-shaft -rock-sheltered -rockskipper -rockslide -rockstaff -rock-steady -rock-strewn -rock-studded -rock-throned -rock-thwarted -Rockton -rock-torn -rocktree -Rockvale -Rockview -Rockville -Rockwall -rockward -rockwards -rockweed -rock-weed -rockweeds -Rockwell -rock-wombed -Rockwood -rockwork -rock-work -rock-worked -rockworks -rococo -rococos -rocolo -Rocouyenne -Rocray -Rocroi -rocs -rocta -Rod -Roda -Rodanthe -rod-bending -rod-boring -rod-caught -Rodd -rodded -rodden -rodder -rodders -Roddy -Roddie -roddikin -roddin -rodding -rod-drawing -rode -Rodenhouse -rodent -Rodentia -rodential -rodentially -rodentian -rodenticidal -rodenticide -rodentproof -rodents -rodeo -rodeos -Roderfield -Roderic -Roderica -Roderich -Roderick -Roderigo -Rodessa -Rodez -Rodge -Rodger -Rodgers -rodham -rod-healing -Rodi -Rodie -Rodin -Rodina -Rodinal -Rodinesque -roding -rodingite -rodknight -Rodl -rodless -rodlet -rodlike -rodmaker -Rodman -Rodmann -rodmen -Rodmun -Rodmur -Rodney -Rodolfo -Rodolph -Rodolphe -Rodolphus -rodomont -rodomontade -rodomontaded -rodomontading -rodomontadist -rodomontador -rod-pointing -rod-polishing -Rodrich -Rodrick -Rodrigo -Rodriguez -Rodrique -rods -rod's -rod-shaped -rodsman -rodsmen -rodster -Roduco -rodwood -Rodzinski -ROE -Roebling -roeblingite -roebuck -roebucks -roed -Roede -roe-deer -Roee -Roehm -roey -roelike -roemer -roemers -roeneng -Roentgen -roentgenism -roentgenization -roentgenize -roentgeno- -roentgenogram -roentgenograms -roentgenograph -roentgenography -roentgenographic -roentgenographically -roentgenology -roentgenologic -roentgenological -roentgenologically -roentgenologies -roentgenologist -roentgenologists -roentgenometer -roentgenometry -roentgenometries -roentgenopaque -roentgenoscope -roentgenoscopy -roentgenoscopic -roentgenoscopies -roentgenotherapy -roentgens -roentgentherapy -Roer -Roerich -roes -Roeselare -Roeser -roestone -Roethke -ROFF -ROG -rogan -rogation -rogations -Rogationtide -rogative -rogatory -Roger -rogerian -Rogerio -Rogero -Rogers -rogersite -Rogerson -Rogersville -Roget -Roggen -roggle -Rogier -rognon -rognons -Rogovy -Rogozen -rogue -rogued -roguedom -rogueing -rogueling -roguery -rogueries -rogues -rogue's -rogueship -roguy -roguing -roguish -roguishly -roguishness -roguishnesses -ROH -rohan -Rohilla -Rohn -rohob -Rohrersville -rohun -rohuna -ROI -Roy -Royal -royal-born -royal-chartered -royale -royalet -royal-hearted -royalisation -royalise -royalised -royalising -royalism -royalisms -royalist -royalistic -royalists -royalist's -royalization -royalize -royalized -royalizing -Royall -royally -royalmast -royalme -royal-rich -royals -royal-souled -royal-spirited -royalty -royalties -royalty's -Royalton -royal-towered -Roybn -Roice -Royce -Roid -Royd -Roydd -Royden -Roye -Royena -Royersford -royet -royetness -royetous -royetously -Royette -ROYGBIV -roil -roiled -roiledness -roily -roilier -roiliest -roiling -roils -roin -roinish -roynous -Royo -royou -Rois -Roist -roister -royster -roister-doister -roister-doisterly -roistered -roystered -roisterer -roisterers -roistering -roystering -roisteringly -roisterly -roisterous -roisterously -roisters -roysters -Royston -Roystonea -roit -royt -roitelet -rojak -Rojas -ROK -roka -Rokach -Rokadur -roke -rokeage -rokee -rokey -rokelay -roker -roky -Rola -Rolaids -rolamite -rolamites -Rolan -Roland -Rolanda -Rolandic -Rolando -Rolandson -Roldan -role -Roley -roleo -roleplayed -role-player -roleplaying -role-playing -roles -role's -Rolesville -Rolette -Rolf -Rolfe -Rolfston -roly-poly -roly-poliness -roll -Rolla -rollable -roll-about -Rolland -rollaway -rollback -rollbacks -rollbar -roll-call -roll-collar -roll-cumulus -rolled -rolley -rolleyway -rolleywayman -rollejee -roller -roller-backer -roller-carrying -rollerer -roller-grinding -roller-made -rollermaker -rollermaking -rollerman -roller-milled -roller-milling -rollers -roller-skate -roller-skated -rollerskater -rollerskating -roller-skating -roller-top -Rollet -rolliche -rollichie -rollick -rollicked -rollicker -rollicky -rollicking -rollickingly -rollickingness -rollicks -rollicksome -rollicksomeness -Rollie -Rollin -rolling -rollingly -rolling-mill -rolling-pin -rolling-press -rollings -Rollingstone -Rollinia -Rollins -Rollinsford -Rollinsville -rollix -roll-leaf -rollman -rollmop -rollmops -rollneck -Rollo -rollock -roll-on/roll-off -Rollot -rollout -roll-out -rollouts -rollover -roll-over -rollovers -rolls -rolltop -roll-top -rollway -rollways -Rolo -roloway -rolpens -Rolph -ROM -Rom. -Roma -Romadur -Romaean -Romagna -Romagnese -Romagnol -Romagnole -Romaic -romaika -Romain -Romaine -romaines -Romains -Romayor -Romaji -romal -Romalda -Roman -romana -Romanal -Romanas -Romance -romancealist -romancean -romanced -romance-empurpled -romanceful -romance-hallowed -romance-inspiring -romanceish -romanceishness -romanceless -romancelet -romancelike -romance-making -romancemonger -romanceproof -romancer -romanceress -romancers -romances -romance-writing -romancy -romancical -romancing -romancist -Romandom -Romane -Romanes -Romanese -Romanesque -roman-fleuve -Romanhood -Romany -Romania -Romanian -Romanic -Romanies -Romaniform -Romanisation -Romanise -Romanised -Romanish -Romanising -Romanism -Romanist -Romanistic -Romanists -Romanite -Romanity -romanium -Romanization -Romanize -romanized -Romanizer -romanizes -romanizing -Romanly -Roman-nosed -Romano -romano- -Romano-byzantine -Romano-british -Romano-briton -Romano-canonical -Romano-celtic -Romano-ecclesiastical -Romano-egyptian -Romano-etruscan -Romanoff -Romano-gallic -Romano-german -Romano-germanic -Romano-gothic -Romano-greek -Romano-hispanic -Romano-iberian -Romano-lombardic -Romano-punic -romanos -Romanov -Romans -Romansch -Romansh -romantic -romantical -romanticalism -romanticality -romantically -romanticalness -romanticise -romanticism -romanticist -romanticistic -romanticists -romanticity -romanticization -romanticize -romanticized -romanticizes -romanticizing -romanticly -romanticness -romantico-heroic -romantico-robustious -romantics -romantic's -romantism -romantist -Romanus -romanza -romaunt -romaunts -Rombauer -Romberg -Rombert -romble -rombos -rombowline -Rome -Romeyn -romeine -romeite -Romelda -Romeldale -Romelle -Romeo -Romeon -romeos -rome-penny -romerillo -romero -romeros -Romescot -rome-scot -Romeshot -Romeu -Romeward -Romewards -Romy -Romic -Romie -romyko -Romilda -Romilly -Romina -Romine -Romipetal -Romish -Romishly -Romishness -Romito -rommack -Rommany -Rommanies -Rommel -Romney -Romneya -Romo -Romola -Romona -Romonda -romp -romped -rompee -romper -rompers -rompy -romping -rompingly -rompish -rompishly -rompishness -romps -rompu -roms -Romulian -Romulo -Romulus -Ron -RONA -RONABIT -Ronal -Ronald -Ronalda -Ronan -roncador -Roncaglian -Roncesvalles -roncet -Roncevaux -Ronceverte -roncho -Ronco -roncos -rond -Ronda -rondache -rondacher -rondawel -ronde -rondeau -rondeaux -rondel -rondelet -Rondeletia -rondelets -rondelier -rondelle -rondelles -rondellier -rondels -Rondi -rondino -rondle -Rondnia -rondo -rondoletto -Rondon -Rondonia -rondos -rondure -rondures -Rone -Ronel -Ronen -Roneo -Rong -Ronga -rongeur -ronggeng -Rong-pa -Ronica -ronier -ronin -ronion -ronyon -ronions -ronyons -Ronkonkoma -Ronks -Ronn -Ronna -Ronne -ronnel -ronnels -Ronnholm -Ronni -Ronny -Ronnica -Ronnie -ronquil -Ronsard -Ronsardian -Ronsardism -Ronsardist -Ronsardize -Ronsdorfer -Ronsdorfian -Rontgen -rontgenism -rontgenize -rontgenized -rontgenizing -rontgenography -rontgenographic -rontgenographically -rontgenology -rontgenologic -rontgenological -rontgenologist -rontgenoscope -rontgenoscopy -rontgenoscopic -rontgens -roo -Roobbie -rood -rood-day -roodebok -Roodepoort-Maraisburg -roodle -roodles -roods -roodstone -rooed -roof -roofage -roof-blockaded -roof-building -roof-climbing -roof-deck -roof-draining -roof-dwelling -roofed -roofed-in -roofed-over -roofer -roofers -roof-gardening -roof-haunting -roofy -roofing -roofings -roofless -rooflet -rooflike -roofline -rooflines -roofman -roofmen -roofpole -roof-reaching -roofs -roof-shaped -rooftop -rooftops -rooftree -roof-tree -rooftrees -roofward -roofwise -rooibok -rooyebok -rooinek -rooing -rook -rook-coated -Rooke -rooked -Rooker -rookery -rookeried -rookeries -rooketty-coo -rooky -rookie -rookier -rookies -rookiest -rooking -rookish -rooklet -rooklike -rooks -rookus -rool -room -roomage -room-and-pillar -roomed -roomer -roomers -roomette -roomettes -roomful -roomfuls -roomy -roomie -roomier -roomies -roomiest -roomily -roominess -rooming -roomkeeper -roomless -roomlet -roommate -room-mate -roommates -room-ridden -rooms -roomsful -roomsome -roomstead -room-temperature -roomth -roomthy -roomthily -roomthiness -roomward -roon -Rooney -roop -Roopville -roorbach -roorback -roorbacks -Roos -roosa -Roose -roosed -rooser -roosers -rooses -Roosevelt -Rooseveltian -roosing -Roost -roosted -rooster -roosterfish -roosterhood -roosterless -roosters -roostership -roosty -roosting -roosts -Root -rootage -rootages -root-bound -root-bruising -root-built -rootcap -root-devouring -root-digging -root-eating -rooted -rootedly -rootedness -rooter -rootery -rooters -rootfast -rootfastness -root-feeding -root-hardy -roothold -rootholds -rooti -rooty -rootier -rootiest -rootiness -rooting -root-inwoven -rootle -rootless -rootlessness -rootlet -rootlets -rootlike -rootling -root-mean-square -root-neck -root-parasitic -root-parasitism -root-prune -root-pruned -Roots -root's -rootstalk -rootstock -root-stock -rootstocks -Rootstown -root-torn -rootwalt -rootward -rootwise -rootworm -roove -rooved -rooving -ROP -ropable -ropand -ropani -rope -ropeable -ropeband -rope-band -ropebark -rope-bound -rope-closing -roped -ropedance -ropedancer -rope-dancer -ropedancing -rope-driven -rope-driving -rope-end -rope-fastened -rope-girt -ropey -rope-yarn -ropelayer -ropelaying -rope-laying -ropelike -ropemaker -ropemaking -ropeman -ropemen -rope-muscled -rope-pulling -Roper -rope-reeved -ropery -roperies -roperipe -ropers -ropes -rope-shod -rope-sight -ropesmith -rope-spinning -rope-stock -rope-stropped -Ropesville -ropetrick -ropeway -ropeways -ropewalk -ropewalker -ropewalks -ropework -rope-work -ropy -ropier -ropiest -ropily -ropiness -ropinesses -roping -ropish -ropishness -roploch -ropp -Roque -Roquefort -roquelaure -roquelaures -roquellorz -roquer -roques -roquet -roqueted -roqueting -roquets -roquette -roquille -roquist -Rora -Roraima -roral -roratorio -Rori -Rory -roric -rory-cum-tory -rorid -Roridula -Roridulaceae -Rorie -roriferous -rorifluent -Roripa -Rorippa -Roris -rory-tory -roritorious -Rorke -rorqual -rorquals -Rorry -Rorrys -rorschach -rort -rorty -rorulent -Ros -Rosa -Rosabel -Rosabella -Rosabelle -rosace -Rosaceae -rosacean -rosaceous -rosaker -rosal -Rosalba -Rosalee -Rosaleen -Rosales -rosalger -Rosalia -Rosalie -Rosalyn -Rosalind -Rosalynd -Rosalinda -Rosalinde -Rosaline -Rosamond -Rosamund -Rosan -Rosana -Rosane -rosanilin -rosaniline -Rosanky -Rosanna -Rosanne -Rosary -rosaria -rosarian -rosarians -rosaries -rosariia -Rosario -rosarium -rosariums -rosaruby -ROSAT -rosated -Rosati -rosbif -Rosburg -Roschach -roscherite -Roscian -roscid -Roscius -Rosco -Roscoe -roscoelite -roscoes -Roscommon -ROSE -roseal -Roseann -Roseanna -Roseanne -rose-apple -rose-a-ruby -roseate -roseately -Roseau -rose-back -rosebay -rose-bay -rosebays -rose-bellied -Rosebery -Roseberry -rose-blue -Roseboom -Roseboro -rose-breasted -rose-bright -Rosebud -rosebuds -rosebud's -Roseburg -rosebush -rose-bush -rosebushes -rose-campion -Rosecan -rose-carved -rose-chafer -rose-cheeked -rose-clad -rose-color -rose-colored -rose-colorist -rose-colour -rose-coloured -rose-combed -rose-covered -Rosecrans -rose-crowned -rose-cut -rosed -Rosedale -rose-diamond -rose-diffusing -rosedrop -rose-drop -rose-eared -rose-engine -rose-ensanguined -rose-faced -rose-fingered -rosefish -rosefishes -rose-flowered -rose-fresh -rose-gathering -rose-growing -rosehead -rose-headed -rose-hedged -rosehill -rosehiller -rosehip -rose-hued -roseine -Rosel -Roseland -Roselane -Roselani -Roselawn -Roselba -rose-leaf -rose-leaved -roseless -roselet -Roselia -roselike -Roselin -Roselyn -Roseline -rose-lipped -rose-lit -roselite -Rosella -rosellate -Roselle -Rosellen -roselles -Rosellinia -rose-loving -rosemaling -Rosemare -Rosemari -Rosemary -Rosemaria -Rosemarie -rosemaries -Rosemead -Rosemonde -Rosemont -Rosen -Rosena -rose-nail -Rosenbaum -Rosenberg -Rosenberger -Rosenbergia -Rosenblast -Rosenblatt -Rosenblum -rosenbuschite -Rosendale -Rosene -Rosenfeld -Rosenhayn -Rosenkrantz -Rosenkranz -Rosenquist -Rosenstein -Rosenthal -Rosenwald -Rosenzweig -roseo- -roseola -roseolar -roseolas -roseoliform -roseolous -roseous -rose-petty -rose-pink -rose-podded -roser -rose-red -rosery -roseries -rose-ringed -roseroot -rose-root -roseroots -roses -rose's -rose-scented -roseslug -rose-slug -rose-sweet -roset -rosetan -rosetangle -rosety -rosetime -rose-tinged -rose-tinted -rose-tree -rosets -Rosetta -rosetta-wood -Rosette -rosetted -rosettes -rosetty -rosetum -Roseville -roseways -Rosewall -rose-warm -rosewater -rose-water -rose-window -rosewise -Rosewood -rosewoods -rosewort -rose-wreathed -Roshan -Rosharon -Roshelle -roshi -Rosholt -Rosy -rosy-armed -rosy-blushing -rosy-bosomed -rosy-cheeked -Rosiclare -rosy-colored -rosy-crimson -Rosicrucian -Rosicrucianism -rosy-dancing -Rosie -rosy-eared -rosied -rosier -rosieresite -rosiest -rosy-faced -rosy-fingered -rosy-hued -rosily -rosy-lipped -rosilla -rosillo -rosin -Rosina -Rosinante -rosinate -rosinduline -Rosine -rosined -rosiness -rosinesses -rosing -rosiny -rosining -rosinol -rosinols -rosinous -rosins -Rosinski -rosinweed -rosinwood -Rosio -rosy-purple -rosy-red -Rosita -rosy-tinted -rosy-tipped -rosy-toed -rosy-warm -Roskes -Roskilde -rosland -Roslyn -roslindale -Rosman -Rosmarin -rosmarine -Rosmarinus -Rosminian -Rosminianism -Rosmunda -Rosner -Rosol -rosoli -rosolic -rosolio -rosolios -rosolite -rosorial -ROSPA -Ross -Rossbach -Rossburg -Rosse -Rossellini -Rossen -Rosser -Rossetti -Rossford -Rossi -Rossy -Rossie -Rossiya -Rossing -Rossini -rossite -Rossiter -Rosslyn -Rossmore -Rossner -Rosston -Rossuck -Rossville -Rost -Rostand -rostel -rostella -rostellar -Rostellaria -rostellarian -rostellate -rostelliform -rostellum -roster -rosters -Rostock -Rostov -Rostov-on-Don -Rostovtzeff -rostra -rostral -rostrally -rostrate -rostrated -rostriferous -rostriform -rostroantennary -rostrobranchial -rostrocarinate -rostrocaudal -rostroid -rostrolateral -Rostropovich -rostrular -rostrulate -rostrulum -rostrum -rostrums -rosttra -rosular -rosulate -Roswald -Roswell -Roszak -ROT -Rota -rotacism -Rotal -Rotala -Rotalia -rotalian -rotaliform -rotaliiform -rotaman -rotamen -Rotameter -Rotan -Rotanev -rotang -Rotary -Rotarian -Rotarianism -rotarianize -rotary-cut -rotaries -rotas -rotascope -rotatable -rotatably -rotate -rotated -rotates -rotating -rotation -rotational -rotationally -rotations -rotative -rotatively -rotativism -rotatodentate -rotatoplane -rotator -rotatores -rotatory -Rotatoria -rotatorian -rotators -rotavist -Rotberg -ROTC -rotch -rotche -rotches -rote -rotella -Rotenburg -rotenone -rotenones -Roter -rotes -rotge -rotgut -rot-gut -rotguts -Roth -Rothberg -Rothbury -Rothenberg -Rother -Rotherham -Rothermere -rothermuck -Rothesay -Rothko -Rothmuller -Rothsay -Rothschild -Rothstein -Rothville -Rothwell -Roti -rotifer -Rotifera -rotiferal -rotiferan -rotiferous -rotifers -rotiform -rotisserie -rotisseries -ROTL -rotls -Rotman -roto -rotocraft -rotodyne -rotograph -rotogravure -rotogravures -rotometer -rotonda -rotonde -rotor -rotorcraft -rotors -Rotorua -rotos -rototill -rototilled -Rototiller -rototilling -rototills -Rotow -rotproof -ROTS -Rotse -rot-steep -rotta -rottan -rotte -rotted -rotten -rotten-dry -rotten-egg -rottener -rottenest -rotten-hearted -rotten-heartedly -rotten-heartedness -rottenish -rottenly -rotten-minded -rottenness -rottennesses -rotten-planked -rotten-red -rotten-rich -rotten-ripe -rottenstone -rotten-stone -rotten-throated -rotten-timbered -rotter -Rotterdam -rotters -rottes -rotting -rottle -rottlera -rottlerin -rottock -rottolo -Rottweiler -rotula -rotulad -rotular -rotulet -rotulian -rotuliform -rotulus -rotund -rotunda -rotundas -rotundate -rotundi- -rotundify -rotundifoliate -rotundifolious -rotundiform -rotundity -rotundities -rotundly -rotundness -rotundo -rotundo- -rotundo-ovate -rotundotetragonal -roture -roturier -roturiers -Rouault -roub -Roubaix -rouble -roubles -roubouh -rouche -rouches -roucou -roud -roudas -roue -rouelle -Rouen -Rouennais -rouens -rouerie -roues -rouge -rougeau -rougeberry -rouged -rougelike -Rougemont -rougemontite -rougeot -rouges -rough -roughage -roughages -rough-and-ready -rough-and-readiness -rough-and-tumble -rough-backed -rough-barked -rough-bearded -rough-bedded -rough-billed -rough-blustering -rough-board -rough-bordered -roughcast -rough-cast -roughcaster -roughcasting -rough-cheeked -rough-clad -rough-clanking -rough-coat -rough-coated -rough-cut -roughdraft -roughdraw -rough-draw -roughdress -roughdry -rough-dry -roughdried -rough-dried -roughdries -roughdrying -rough-drying -roughed -rough-edge -rough-edged -roughen -roughened -roughener -roughening -roughens -rough-enter -rougher -rougher-down -rougher-out -roughers -rougher-up -roughest -roughet -rough-face -rough-faced -rough-feathered -rough-finned -rough-foliaged -roughfooted -rough-footed -rough-form -rough-fruited -rough-furrowed -rough-grained -rough-grind -rough-grinder -rough-grown -rough-hackle -rough-hackled -rough-haired -rough-handed -rough-handedness -rough-headed -roughhearted -roughheartedness -roughhew -rough-hew -roughhewed -rough-hewed -roughhewer -roughhewing -rough-hewing -roughhewn -rough-hewn -roughhews -rough-hob -rough-hobbed -roughhouse -roughhoused -roughhouser -roughhouses -roughhousy -roughhousing -rough-hull -roughy -roughie -roughing -roughing-in -roughings -roughish -roughishly -roughishness -rough-jacketed -rough-keeled -rough-leaved -roughleg -rough-legged -roughlegs -rough-level -roughly -rough-lipped -rough-living -rough-looking -rough-mannered -roughneck -rough-necked -roughnecks -roughness -roughnesses -roughometer -rough-paved -rough-plain -rough-plane -rough-plastered -rough-plow -rough-plumed -rough-podded -rough-point -rough-ream -rough-reddened -roughride -roughrider -rough-rider -rough-ridged -rough-roll -roughroot -roughs -rough-sawn -rough-scaled -roughscuff -rough-seeded -roughsetter -rough-shape -roughshod -rough-sketch -rough-skinned -roughslant -roughsome -rough-spirited -rough-spoken -rough-square -rough-stalked -rough-stemmed -rough-stone -roughstring -rough-stringed -roughstuff -rough-surfaced -rough-swelling -rought -roughtail -roughtailed -rough-tailed -rough-tanned -rough-tasted -rough-textured -rough-thicketed -rough-toned -rough-tongued -rough-toothed -rough-tree -rough-turn -rough-turned -rough-voiced -rough-walled -rough-weather -rough-winged -roughwork -rough-write -roughwrought -rougy -rouging -Rougon -rouille -rouilles -rouky -roulade -roulades -rouleau -rouleaus -rouleaux -Roulers -roulette -rouletted -roulettes -rouletting -Rouman -Roumania -Roumanian -Roumelia -Roumeliote -Roumell -roun -rounce -rounceval -rouncy -rouncival -round -roundabout -round-about-face -roundaboutly -roundaboutness -round-arch -round-arched -round-arm -round-armed -round-backed -round-barreled -round-bellied -round-beset -round-billed -round-blazing -round-bodied -round-boned -round-bottomed -round-bowed -round-bowled -round-built -round-celled -round-cornered -round-crested -round-dancer -round-eared -rounded -round-edge -round-edged -roundedly -roundedness -round-eyed -roundel -roundelay -roundelays -roundeleer -roundels -round-end -rounder -rounders -roundest -round-faced -round-fenced -roundfish -round-footed -round-fruited -round-furrowed -round-hand -round-handed -Roundhead -roundheaded -round-headed -roundheadedness -round-heart -roundheel -round-hoofed -round-horned -roundhouse -round-house -roundhouses -roundy -rounding -rounding-out -roundish -roundish-deltoid -roundish-faced -roundish-featured -roundish-leaved -roundishness -roundish-obovate -roundish-oval -roundish-ovate -roundish-shaped -roundle -round-leafed -round-leaved -roundlet -roundlets -roundly -round-limbed -roundline -round-lipped -round-lobed -round-made -roundmouthed -round-mouthed -roundness -roundnesses -roundnose -roundnosed -round-nosed -Roundo -roundoff -round-podded -round-pointed -round-ribbed -roundridge -Roundrock -round-rolling -round-rooted -rounds -roundseam -round-seeded -round-shapen -round-shouldered -round-shouldred -round-sided -round-skirted -roundsman -round-spun -round-stalked -roundtable -round-table -roundtail -round-tailed -round-the-clock -round-toed -roundtop -round-topped -roundtree -round-trip -round-tripper -round-trussed -round-turning -roundup -round-up -roundups -roundure -round-visaged -round-winged -roundwise -round-wombed -roundwood -roundworm -round-worm -roundworms -rounge -rounspik -rountree -roup -rouped -rouper -roupet -roupy -roupie -roupier -roupiest -roupily -rouping -roupingwife -roupit -roups -Rourke -ROUS -rousant -rouse -rouseabout -roused -rousedness -rousement -rouser -rousers -rouses -rousette -Rouseville -rousing -rousingly -Rousseau -Rousseauan -Rousseauism -Rousseauist -Rousseauistic -Rousseauite -rousseaus -Roussel -Roussellian -roussette -Roussillon -roust -roustabout -roustabouts -rousted -rouster -rousters -rousting -rousts -rout -route -routed -routeman -routemarch -routemen -router -routers -routes -routeway -routeways -Routh -routhercock -routhy -routhie -routhiness -rouths -routier -routinary -routine -routineer -routinely -routineness -routines -routing -routings -routinish -routinism -routinist -routinization -routinize -routinized -routinizes -routinizing -routivarite -routous -routously -routs -rouvillite -Rouvin -Roux -Rouzerville -Rovaniemi -rove -rove-beetle -roved -Rovelli -roven -rove-over -Rover -rovers -roves -rovescio -rovet -rovetto -roving -rovingly -rovingness -rovings -Rovit -Rovner -ROW -rowable -Rowan -rowanberry -rowanberries -rowans -rowan-tree -row-barge -rowboat -row-boat -rowboats -row-de-dow -rowdy -rowdydow -rowdydowdy -rowdy-dowdy -rowdier -rowdies -rowdiest -rowdyish -rowdyishly -rowdyishness -rowdyism -rowdyisms -rowdily -rowdiness -rowdinesses -rowdyproof -row-dow-dow -Rowe -rowed -rowel -roweled -rowelhead -roweling -Rowell -rowelled -rowelling -rowels -Rowen -Rowena -rowens -rower -rowers -Rowesville -rowet -rowy -rowiness -rowing -rowings -Rowland -rowlandite -Rowlandson -Rowley -Rowleian -Rowleyan -Rowlesburg -rowlet -Rowlett -Rowletts -rowlock -rowlocks -Rowney -row-off -rowport -row-port -rows -rowt -rowte -rowted -rowth -rowths -rowty -rowting -Rox -Roxana -Roxane -Roxanna -Roxanne -Roxboro -Roxburgh -roxburghe -Roxburghiaceae -Roxburghshire -Roxbury -Roxi -Roxy -Roxie -Roxine -Roxobel -Roxolani -Roxton -Roz -Rozalie -Rozalin -Rozamond -Rozanna -Rozanne -Roze -Rozek -Rozel -Rozele -Rozella -Rozelle -rozener -Rozet -Rozi -Rozina -rozum -rozzer -rozzers -RP -RPC -RPG -RPI -RPM -RPN -RPO -RPQ -RPS -rpt -rpt. -RPV -RQ -RQS -RQSM -RR -RRB -RRC -rrhagia -rrhea -rrhine -rrhiza -rrhoea -Rriocard -RRIP -r-RNA -RRO -RS -r's -Rs. -RS232 -RSA -RSB -RSC -RSCS -RSE -RSFSR -RSGB -RSH -R-shaped -RSJ -RSL -RSLE -RSLM -RSM -RSN -RSPB -RSPCA -RSR -RSS -RSTS -RSTSE -RSU -rsum -RSV -RSVP -RSWC -RT -rt. -RTA -RTAC -RTC -rte -RTF -RTFM -RTG -rti -RTL -RTLS -RTM -RTMP -RTR -RTS -RTSE -RTSL -RTT -RTTY -RTU -rtw -RU -Rua -ruach -ruana -ruanas -Ruanda -Ruanda-Urundi -rub -rubaboo -rubaboos -rubace -rubaces -rub-a-dub -rubaiyat -rubasse -rubasses -rubato -rubatos -rubbaboo -rubbaboos -rubbed -rubbee -rubber -rubber-coated -rubber-collecting -rubber-cored -rubber-covered -rubber-cutting -rubber-down -rubbered -rubberer -rubber-faced -rubber-growing -rubber-headed -rubbery -rubber-yielding -rubberiness -rubberise -rubberised -rubberising -rubberize -rubberized -rubberizes -rubberizing -rubberless -rubberlike -rubber-lined -rubber-mixing -rubberneck -rubbernecked -rubbernecker -rubbernecking -rubbernecks -rubbernose -rubber-off -rubber-producing -rubber-proofed -rubber-reclaiming -rubbers -rubber's -rubber-set -rubber-slitting -rubber-soled -rubber-spreading -rubber-stamp -rubberstone -rubber-testing -rubber-tired -rubber-varnishing -rubberwise -rubby -Rubbico -rubbing -rubbings -rubbingstone -rubbing-stone -rubbio -rubbish -rubbishes -rubbishy -rubbishing -rubbishingly -rubbishly -rubbishry -rubbisy -rubble -rubbled -rubbler -rubbles -rubblestone -rubblework -rubble-work -rubbly -rubblier -rubbliest -rubbling -Rubbra -rubdown -rubdowns -rub-dub -Rube -rubedinous -rubedity -rubefacience -rubefacient -rubefaction -rubefy -Rubel -rubelet -rubella -rubellas -rubelle -rubellite -rubellosis -Ruben -Rubenesque -Rubenism -Rubenisme -Rubenist -Rubeniste -Rubens -Rubensian -Rubenstein -rubeola -rubeolar -rubeolas -rubeoloid -ruberythric -ruberythrinic -Ruberta -rubes -rubescence -rubescent -Rubetta -Rubi -Ruby -Rubia -Rubiaceae -rubiaceous -rubiacin -Rubiales -rubian -rubianic -rubiate -rubiator -ruby-berried -rubible -ruby-budded -rubican -rubicelle -ruby-circled -Rubicola -ruby-colored -Rubicon -rubiconed -ruby-crested -ruby-crowned -rubicund -rubicundity -rubidic -rubidine -rubidium -rubidiums -Rubie -Rubye -rubied -ruby-eyed -rubier -rubies -rubiest -ruby-faced -rubify -rubific -rubification -rubificative -rubiginose -rubiginous -rubigo -rubigos -ruby-headed -ruby-hued -rubying -rubijervine -rubylike -ruby-lipped -ruby-lustered -Rubin -Rubina -rubine -ruby-necked -rubineous -Rubinstein -Rubio -rubious -ruby-red -ruby's -ruby-set -ruby-studded -rubytail -rubythroat -ruby-throated -ruby-tinctured -ruby-tinted -ruby-toned -ruby-visaged -rubywise -ruble -rubles -ruble's -rublis -ruboff -ruboffs -rubor -rubout -rubouts -rubrail -rubric -rubrica -rubrical -rubricality -rubrically -rubricate -rubricated -rubricating -rubrication -rubricator -rubrician -rubricism -rubricist -rubricity -rubricize -rubricose -rubrics -rubrify -rubrific -rubrification -rubrisher -rubrospinal -rubs -rubstone -Rubtsovsk -Rubus -RUC -rucervine -Rucervus -Ruchbah -ruche -ruched -ruches -ruching -ruchings -ruck -rucked -Rucker -Ruckersville -rucky -rucking -ruckle -ruckled -ruckles -ruckling -Ruckman -rucks -rucksack -rucksacks -rucksey -ruckus -ruckuses -ructation -ruction -ructions -ructious -rud -rudaceous -rudas -Rudbeckia -Rudd -rudder -rudderfish -rudder-fish -rudderfishes -rudderhead -rudderhole -rudderless -rudderlike -rudderpost -rudders -rudder's -rudderstock -ruddervator -Ruddy -ruddy-bright -ruddy-brown -ruddy-cheeked -ruddy-colored -ruddy-complexioned -Ruddie -ruddied -ruddier -ruddiest -ruddy-faced -ruddy-gold -ruddy-haired -ruddy-headed -ruddyish -ruddy-leaved -ruddily -ruddiness -ruddinesses -ruddy-purple -ruddish -ruddy-spotted -ruddle -ruddled -ruddleman -ruddlemen -ruddles -ruddling -ruddock -ruddocks -rudds -Rude -rude-carved -rude-ensculptured -rude-fanged -rude-fashioned -rude-featured -rude-growing -rude-hewn -rudely -rude-looking -Rudelson -rude-made -rude-mannered -rudeness -rudenesses -rudented -rudenture -Ruder -rudera -ruderal -ruderals -ruderate -rudesby -rudesbies -Rudesheimer -rude-spoken -rude-spokenrude-spun -rude-spun -rudest -rude-thoughted -rude-tongued -rude-washed -rudge -Rudy -Rudyard -Rudich -Rudie -Rudiger -rudiment -rudimental -rudimentary -rudimentarily -rudimentariness -rudimentation -rudiments -rudiment's -Rudin -rudinsky -rudish -Rudista -Rudistae -rudistan -rudistid -rudity -rudloff -Rudman -Rudmasday -Rudolf -Rudolfo -Rudolph -Rudolphe -rudolphine -Rudolphus -rudous -Rudra -Rudulph -Rudwik -Rue -rued -rueful -ruefully -ruefulness -ruefulnesses -Ruel -ruely -ruelike -Ruella -Ruelle -Ruellia -Ruelu -ruen -ruer -ruers -rues -ruesome -ruesomeness -Rueter -ruewort -Rufe -Rufena -rufescence -rufescent -Ruff -ruffable -ruff-coat -ruffe -ruffed -ruffer -ruffes -Ruffi -ruffian -ruffianage -ruffiandom -ruffianhood -ruffianish -ruffianism -ruffianize -ruffianly -ruffianlike -ruffian-like -ruffiano -ruffians -Ruffin -Ruffina -ruffing -ruffy-tuffy -ruffle -ruffle- -ruffled -ruffle-headed -ruffleless -rufflement -ruffler -rufflers -ruffles -ruffly -rufflier -rufflike -ruffliness -ruffling -ruffmans -ruff-necked -Ruffo -Rufford -ruffs -Ruffsdale -ruff-tree -rufi- -ruficarpous -ruficaudate -ruficoccin -ruficornate -rufigallic -rufiyaa -Rufina -Rufino -Rufisque -rufo- -rufoferruginous -rufofulvous -rufofuscous -rufopiceous -Ruford -rufosity -rufotestaceous -rufous -rufous-backed -rufous-banded -rufous-bellied -rufous-billed -rufous-breasted -rufous-brown -rufous-buff -rufous-chinned -rufous-colored -rufous-crowned -rufous-edged -rufous-haired -rufous-headed -rufous-hooded -rufous-yellow -rufous-naped -rufous-necked -rufous-rumped -rufous-spotted -rufous-tailed -rufous-tinged -rufous-toed -rufous-vented -rufous-winged -rufter -rufter-hood -rufty-tufty -rufulous -Rufus -rug -ruga -rugae -rugal -rugate -Rugbeian -Rugby -rugbies -rug-cutter -rug-cutting -Rugen -Rugg -rugged -ruggeder -ruggedest -ruggedization -ruggedize -ruggedly -ruggedness -ruggednesses -Rugger -ruggers -ruggy -Ruggiero -rugging -ruggle -ruggown -rug-gowned -rugheaded -rugine -ruglike -rugmaker -rugmaking -rugola -rugolas -Rugosa -rugose -rugose-leaved -rugosely -rugose-punctate -rugosity -rugosities -rugous -rugs -rug's -rugulose -Ruhl -Ruhnke -Ruhr -Ruy -Ruidoso -Ruyle -ruin -ruinable -ruinate -ruinated -ruinates -ruinating -ruination -ruinations -ruination's -ruinatious -ruinator -ruin-breathing -ruin-crowned -ruined -ruiner -ruiners -ruing -ruin-heaped -ruin-hurled -ruiniform -ruining -ruinlike -ruin-loving -ruinous -ruinously -ruinousness -ruinproof -ruins -Ruisdael -Ruysdael -Ruyter -Ruiz -Rukbat -rukh -rulable -Rulander -rule -ruled -ruledom -ruled-out -rule-joint -ruleless -rulemonger -ruler -rulers -rulership -ruler-straight -Rules -Ruleville -ruly -ruling -rulingly -rulings -rull -ruller -rullion -rullock -Rulo -RUM -rumage -rumaged -rumaging -rumaki -rumakis -rumal -Ruman -Rumania -Rumanian -rumanians -rumanite -rumb -rumba -rumbaed -rumbaing -rumbarge -rumbas -rumbelow -rumble -rumble-bumble -rumbled -rumblegarie -rumblegumption -rumblement -rumbler -rumblers -rumbles -rumble-tumble -rumbly -rumbling -rumblingly -rumblings -rumbo -rumbooze -rumbowline -rumbowling -rum-bred -rumbullion -rumbumptious -rumbustical -rumbustion -rumbustious -rumbustiousness -rumchunder -rum-crazed -rum-drinking -rumdum -rum-dum -rume -Rumely -Rumelia -Rumelian -rumen -rumenitis -rumenocentesis -rumenotomy -rumens -Rumery -Rumex -rum-fired -rum-flavored -Rumford -rumfustian -rumgumption -rumgumptious -rum-hole -Rumi -rumicin -Rumilly -Rumina -ruminal -ruminant -Ruminantia -ruminantly -ruminants -ruminate -ruminated -ruminates -ruminating -ruminatingly -rumination -ruminations -ruminative -ruminatively -ruminator -ruminators -rumkin -rumless -rumly -rummage -rummaged -rummager -rummagers -rummages -rummagy -rummaging -rummer -rummery -rummers -rummes -rummest -rummy -rummier -rummies -rummiest -rummily -rum-mill -rumminess -rummish -rummle -Rumney -rumness -rum-nosed -Rumor -rumored -rumorer -rumoring -rumormonger -rumorous -rumorproof -rumors -rumour -rumoured -rumourer -rumouring -rumourmonger -rumours -rump -rumpad -rumpadder -rumpade -Rumpelstiltskin -Rumper -Rumpf -rump-fed -rumpy -rumple -rumpled -rumples -rumpless -rumply -rumplier -rumpliest -rumpling -rumpot -rum-producing -rumps -rumpscuttle -rumpuncheon -rumpus -rumpuses -rumrunner -rumrunners -rumrunning -rums -Rumsey -rum-selling -rumshop -rum-smelling -Rumson -rumswizzle -rumtytoo -run -Runa -runabout -run-about -runabouts -runagado -runagate -runagates -runaround -run-around -runarounds -Runa-simi -runaway -runaways -runback -runbacks -runby -runboard -runch -runchweed -runcinate -Runck -Runcorn -rundale -Rundbogenstil -rundel -Rundgren -Rundi -rundle -rundles -rundlet -rundlets -rundown -run-down -rundowns -Rundstedt -rune -rune-bearing -runecraft -runed -runefolk -rune-inscribed -runeless -runelike -runer -runes -runesmith -runestaff -rune-staff -rune-stave -rune-stone -runeword -runfish -rung -Runge -runghead -rungless -rungs -rung's -runholder -runic -runically -runiform -run-in -Runion -Runyon -runite -runkeeper -Runkel -Runkle -runkled -runkles -runkly -runkling -runless -runlet -runlets -runman -runnable -runnel -Runnells -runnels -Runnemede -runner -runners -runner's -runners-up -runner-up -runnet -runneth -runny -runnier -runniest -Runnymede -running -running-birch -runningly -runnings -runnion -runo- -runoff -runoffs -run-of-mill -run-of-mine -run-of-paper -run-of-the-mill -run-of-the-mine -runology -runologist -run-on -runout -run-out -runouts -runover -run-over -runovers -runproof -runrig -runround -runrounds -runs -runsy -Runstadler -runt -runted -runtee -run-through -runty -runtier -runtiest -runtime -runtiness -runtish -runtishly -runtishness -runts -run-up -runway -runways -rupa -rupee -rupees -rupellary -Rupert -Ruperta -Ruperto -rupestral -rupestrian -rupestrine -Ruphina -rupia -rupiah -rupiahs -rupial -Rupicapra -Rupicaprinae -rupicaprine -Rupicola -Rupicolinae -rupicoline -rupicolous -rupie -rupitic -Ruppertsberger -Ruppia -Ruprecht -ruptile -ruption -ruptive -ruptuary -rupturable -rupture -ruptured -ruptures -rupturewort -rupturing -rural -Ruralhall -ruralisation -ruralise -ruralised -ruralises -ruralising -ruralism -ruralisms -ruralist -ruralists -ruralite -ruralites -rurality -ruralities -ruralization -ruralize -ruralized -ruralizes -ruralizing -rurally -ruralness -rurban -ruridecanal -rurigenous -Rurik -Ruritania -Ruritanian -ruru -Rus -Rus. -Rusa -Ruscher -Ruscio -Ruscus -Ruse -Rusel -Rusell -Rusert -ruses -Rush -rush-bearer -rush-bearing -rush-bordered -rush-bottomed -rushbush -rush-candle -rushed -rushee -rushees -rushen -rusher -rushers -rushes -rush-floored -Rushford -rush-fringed -rush-girt -rush-grown -rush-hour -rushy -rushier -rushiest -rushiness -Rushing -rushingly -rushingness -rushings -Rushland -rush-leaved -rushlight -rushlighted -rushlike -rush-like -rushlit -rush-margined -Rushmore -rush-ring -rush-seated -Rushsylvania -rush-stemmed -rush-strewn -Rushville -rushwork -rush-wove -rush-woven -Rusin -rusine -rusines -Rusk -rusky -Ruskin -Ruskinian -rusks -rusma -Ruso -rusot -ruspone -Russ -Russ. -russe -Russel -russelet -Russelia -Russelyn -Russell -Russellite -Russellton -Russellville -Russene -Russes -russet -russet-backed -russet-bearded -russet-brown -russet-coated -russet-colored -russet-golden -russet-green -russety -russeting -russetish -russetlike -russet-pated -russet-robed -russet-roofed -russets -russetting -Russi -Russia -Russian -Russianisation -Russianise -Russianised -Russianising -Russianism -Russianist -Russianization -Russianize -Russianized -Russianizing -Russian-owned -russians -russian's -Russiaville -Russify -Russification -Russificator -russified -Russifier -russifies -russifying -Russine -Russism -Russky -Russniak -Russo -Russo- -Russo-byzantine -Russo-caucasian -Russo-chinese -Russo-german -Russo-greek -Russo-japanese -Russolatry -Russolatrous -Russom -Russomania -Russomaniac -Russomaniacal -Russon -Russo-persian -Russophile -Russophilism -Russophilist -Russophobe -Russophobia -Russophobiac -Russophobism -Russophobist -Russo-polish -Russo-serbian -Russo-swedish -Russo-turkish -russud -Russula -Rust -rustable -Rustburg -rust-cankered -rust-colored -rust-complexioned -rust-eaten -rusted -rustful -Rusty -rustyback -rusty-branched -rusty-brown -rustic -rustical -rustically -rusticalness -rusticanum -rusticate -rusticated -rusticates -rusticating -rustication -rusticator -rusticators -Rustice -rusticial -rusticism -rusticity -rusticities -rusticize -rusticly -rusticness -rusticoat -rusty-coated -rusty-collared -rusty-colored -rusty-crowned -rustics -rusticum -Rusticus -rusticwork -rusty-dusty -Rustie -rust-yellow -rustier -rustiest -rusty-fusty -rustyish -rusty-leaved -rustily -rusty-looking -Rustin -rustiness -rusting -rusty-red -rusty-rested -rusty-spotted -rusty-throated -rustle -rustled -rustler -rustlers -rustles -rustless -rustly -rustling -rustlingly -rustlingness -Ruston -rust-preventing -rustproof -rust-proofed -rustre -rustred -rust-red -rust-removing -rust-resisting -rusts -rust-stained -rust-worn -ruswut -rut -Ruta -rutabaga -rutabagas -Rutaceae -rutaceous -rutaecarpine -Rutan -rutate -rutch -rutelian -Rutelinae -Rutger -Rutgers -Ruth -Ruthann -Ruthanne -Ruthe -ruthenate -Ruthene -Ruthenia -Ruthenian -ruthenic -ruthenious -ruthenium -ruthenous -ruther -Rutherford -rutherfordine -rutherfordite -rutherfordium -Rutherfordton -Rutherfurd -Rutheron -ruthful -ruthfully -ruthfulness -Ruthi -Ruthy -Ruthie -Ruthlee -ruthless -ruthlessly -ruthlessness -ruthlessnesses -ruths -Ruthton -Ruthven -Ruthville -rutic -rutidosis -rutyl -rutilant -rutilate -rutilated -rutilation -rutile -rutylene -rutiles -rutilous -rutin -rutinose -rutins -Rutiodon -Rutland -Rutlandshire -Rutledge -ruts -rut's -rutted -ruttee -Rutter -Ruttger -rutty -ruttier -ruttiest -ruttily -ruttiness -rutting -ruttish -ruttishly -ruttishness -ruttle -Rutuli -ruvid -Ruvolo -Ruwenzori -rux -Ruzich -RV -RVSVP -rvulsant -RW -RWA -Rwanda -RWC -rwd -RWE -Rwy -Rwy. -RWM -rwound -RX -s -'s --s' -S. -s.a. -S.D. -s.g. -S.J. -S.J.D. -s.l. -S.M. -s.o. -S.P. -S.R.O. -S.T.D. -S.W.A. -S.W.G. -S/D -SA -SAA -SAAB -Saad -Saadi -Saan -saanen -Saar -Saarbren -Saarbrucken -Saare -Saaremaa -Saarinen -Saarland -Sab -Sab. -Saba -Sabadell -sabadilla -sabadin -sabadine -sabadinine -Sabaean -Sabaeanism -Sabaeism -Sabael -Sabah -sabaigrass -sabayon -sabayons -Sabaism -Sabaist -sabakha -Sabal -Sabalaceae -sabalo -sabalos -sabalote -Saban -sabana -Sabanahoyos -Sabanaseca -sabanut -Sabaoth -Sabathikos -Sabatier -Sabatini -sabaton -sabatons -Sabattus -Sabazian -Sabazianism -Sabazios -Sabba -Sabbat -Sabbatary -Sabbatarian -Sabbatarianism -Sabbatean -Sabbath -Sabbathaian -Sabbathaic -Sabbathaist -Sabbathbreaker -Sabbath-breaker -Sabbathbreaking -sabbath-day -Sabbathism -Sabbathize -Sabbathkeeper -Sabbathkeeping -Sabbathless -Sabbathly -Sabbathlike -sabbaths -Sabbatia -Sabbatian -Sabbatic -Sabbatical -Sabbatically -Sabbaticalness -sabbaticals -sabbatine -sabbatism -Sabbatist -Sabbatization -Sabbatize -sabbaton -sabbats -sabbed -sabbeka -sabby -sabbing -sabbitha -SABC -sab-cat -sabdariffa -sabe -Sabean -Sabec -sabeca -sabed -sabeing -Sabella -sabellan -Sabellaria -sabellarian -Sabelle -Sabelli -Sabellian -Sabellianism -Sabellianize -sabellid -Sabellidae -sabelloid -Saber -saberbill -sabered -Saberhagen -sabering -Saberio -saberleg -saber-legged -saberlike -saberproof -saber-rattling -sabers -saber's -saber-shaped -sabertooth -saber-toothed -saberwing -sabes -Sabetha -Sabia -Sabiaceae -sabiaceous -Sabian -Sabianism -sabicu -Sabik -Sabillasville -Sabin -Sabina -Sabinal -Sabine -sabines -sabing -Sabinian -Sabino -sabins -Sabinsville -Sabir -sabirs -Sable -sable-bordered -sable-cinctured -sable-cloaked -sable-colored -sablefish -sablefishes -sable-hooded -sable-lettered -sableness -sable-robed -sables -sable's -sable-spotted -sable-stoled -sable-suited -sable-vested -sable-visaged -sably -SABME -sabora -saboraim -sabot -sabotage -sabotaged -sabotages -sabotaging -saboted -saboteur -saboteurs -sabotier -sabotine -sabots -Sabra -sabras -SABRE -sabrebill -sabred -sabres -sabretache -sabretooth -sabreur -Sabrina -sabring -Sabromin -sabs -Sabsay -Sabu -Sabuja -Sabula -sabuline -sabulite -sabulose -sabulosity -sabulous -sabulum -Saburo -saburra -saburral -saburrate -saburration -sabutan -sabzi -SAC -Sacae -sacahuiste -sacalait -sac-a-lait -sacaline -sacate -Sacaton -sacatons -sacatra -sacbrood -sacbut -sacbuts -saccade -saccades -saccadge -saccadic -saccage -Saccammina -saccarify -saccarimeter -saccate -saccated -Saccha -sacchar- -saccharamide -saccharase -saccharate -saccharated -saccharephidrosis -saccharic -saccharide -sacchariferous -saccharify -saccharification -saccharified -saccharifier -saccharifying -saccharilla -saccharimeter -saccharimetry -saccharimetric -saccharimetrical -saccharin -saccharinate -saccharinated -saccharine -saccharineish -saccharinely -saccharinic -saccharinity -saccharins -saccharization -saccharize -saccharized -saccharizing -saccharo- -saccharobacillus -saccharobiose -saccharobutyric -saccharoceptive -saccharoceptor -saccharochemotropic -saccharocolloid -saccharofarinaceous -saccharogalactorrhea -saccharogenic -saccharohumic -saccharoid -saccharoidal -saccharolactonic -saccharolytic -saccharometabolic -saccharometabolism -saccharometer -saccharometry -saccharometric -saccharometrical -Saccharomyces -Saccharomycetaceae -saccharomycetaceous -Saccharomycetales -saccharomycete -Saccharomycetes -saccharomycetic -saccharomycosis -saccharomucilaginous -saccharon -saccharonate -saccharone -saccharonic -saccharophylly -saccharorrhea -saccharoscope -saccharose -saccharostarchy -saccharosuria -saccharotriose -saccharous -saccharulmic -saccharulmin -Saccharum -saccharuria -sacchulmin -Sacci -Saccidananda -sacciferous -sacciform -saccli -Sacco -Saccobranchiata -saccobranchiate -Saccobranchus -saccoderm -Saccolabium -saccomyian -saccomyid -Saccomyidae -Saccomyina -saccomyine -saccomyoid -Saccomyoidea -saccomyoidean -Saccomys -saccoon -Saccopharyngidae -Saccopharynx -Saccorhiza -saccos -saccular -sacculate -sacculated -sacculation -saccule -saccules -sacculi -Sacculina -sacculoutricular -sacculus -saccus -sacela -sacella -sacellum -sacerdocy -sacerdos -sacerdotage -sacerdotal -sacerdotalism -sacerdotalist -sacerdotalize -sacerdotally -sacerdotical -sacerdotism -sacerdotium -SACEUR -Sacha -sachamaker -sachcloth -sachem -sachemdom -sachemic -sachems -sachemship -sachet -sacheted -sachets -Sacheverell -Sachi -Sachiko -Sachs -Sachsen -Sachsse -Sacian -SACK -sackage -sackamaker -sackbag -sack-bearer -sackbut -sackbuts -sackbutt -sackcloth -sackclothed -sackcloths -sack-coated -sackdoudle -sacked -Sackey -Sacken -sacker -sackers -sacket -sack-formed -sackful -sackfuls -sacking -sackings -sackless -sacklike -sackmaker -sackmaking -Sackman -Sacks -sack-sailed -Sacksen -sacksful -sack-shaped -sacktime -Sackville -sack-winged -saclike -Saco -sacope -sacque -sacques -sacr- -sacra -sacrad -sacral -sacralgia -sacralization -sacralize -sacrals -sacrament -sacramental -sacramentalis -sacramentalism -sacramentalist -sacramentality -sacramentally -sacramentalness -Sacramentary -Sacramentarian -sacramentarianism -sacramentarist -sacramenter -sacramentism -sacramentize -Sacramento -sacraments -sacramentum -sacrary -sacraria -sacrarial -sacrarium -sacrate -sacrcraria -sacre -sacrectomy -sacred -sacredly -sacredness -sacry -sacrify -sacrificable -sacrifical -sacrificant -Sacrificati -sacrification -sacrificator -sacrificatory -sacrificature -sacrifice -sacrificeable -sacrificed -sacrificer -sacrificers -sacrifices -sacrificial -sacrificially -sacrificing -sacrificingly -sacrilege -sacrileger -sacrileges -sacrilegious -sacrilegiously -sacrilegiousness -sacrilegist -sacrilumbal -sacrilumbalis -sacring -sacring-bell -sacrings -Sacripant -sacrist -sacristan -sacristans -sacristy -sacristies -sacristry -sacrists -sacro -sacro- -Sacrobosco -sacrocaudal -sacrococcygeal -sacrococcygean -sacrococcygeus -sacrococcyx -sacrocostal -sacrocotyloid -sacrocotyloidean -sacrocoxalgia -sacrocoxitis -sacrodynia -sacrodorsal -sacrofemoral -sacroiliac -sacroiliacs -sacroinguinal -sacroischiac -sacroischiadic -sacroischiatic -sacrolumbal -sacrolumbalis -sacrolumbar -sacropectineal -sacroperineal -sacropictorial -sacroposterior -sacropubic -sacrorectal -sacrosanct -sacrosanctity -sacrosanctness -sacrosciatic -sacrosecular -sacrospinal -sacrospinalis -sacrospinous -sacrotomy -sacrotuberous -sacro-uterine -sacrovertebral -sacrum -sacrums -Sacs -Sacttler -Sacul -sac-wrist -Sad -Sada -Sadachbia -Sadalmelik -Sadalsuud -sadaqat -Sadat -sad-a-vised -sad-colored -SADD -sadden -saddened -saddening -saddeningly -saddens -sadder -saddest -saddhu -saddhus -saddik -saddirham -saddish -saddle -saddleback -saddlebacked -saddle-backed -saddlebag -saddle-bag -saddlebags -saddlebill -saddle-billed -saddlebow -saddle-bow -saddlebows -saddlecloth -saddle-cloth -saddlecloths -saddled -saddle-fast -saddle-galled -saddle-girt -saddle-graft -saddleleaf -saddleless -saddlelike -saddlemaker -saddlenose -saddle-nosed -Saddler -saddlery -saddleries -saddlers -saddles -saddle-shaped -saddlesick -saddlesore -saddle-sore -saddlesoreness -saddle-spotted -saddlestead -saddle-stitch -saddletree -saddle-tree -saddletrees -saddle-wired -saddlewise -saddling -Sadducaic -Sadducean -Sadducee -Sadduceeism -Sadduceeist -sadducees -Sadducism -Sadducize -Sade -sad-eyed -Sadella -sades -sad-faced -sadh -sadhaka -sadhana -sadhe -sadhearted -sadheartedness -sadhes -sadhika -sadhu -sadhus -Sadi -sadic -Sadick -Sadie -Sadye -Sadieville -Sadira -Sadirah -Sadiras -sadiron -sad-iron -sadirons -sadis -sadism -sadisms -sadist -sadistic -sadistically -sadists -sadist's -Sadite -sadleir -Sadler -sadly -sad-looking -sad-natured -sadness -sadnesses -sado -Sadoc -Sadoff -sadomasochism -sadomasochist -sadomasochistic -sadomasochists -Sadonia -Sadorus -Sadowa -Sadowski -sad-paced -Sadr -Sadsburyville -sad-seeming -sad-tuned -sad-voiced -sadware -SAE -saebeins -saecula -saecular -saeculum -Saeed -Saeger -Saegertown -Saehrimnir -Saeima -saernaite -saeta -saeter -saeume -Safar -safari -safaried -safariing -safaris -Safavi -Safavid -Safavis -Safawid -safe -safe-bestowed -safeblower -safe-blower -safeblowing -safe-borne -safebreaker -safe-breaker -safebreaking -safe-conduct -safecracker -safe-cracker -safecracking -safe-deposit -safegaurds -safeguard -safeguarded -safeguarder -safeguarding -safeguards -safe-hidden -safehold -safe-hold -safekeeper -safekeeping -safe-keeping -safekeepings -safely -safelight -safemaker -safemaking -safe-marching -safe-moored -safen -safener -safeness -safenesses -safer -safes -safe-sequestered -safest -safety -safety-deposit -safetied -safeties -safetying -safetyman -safe-time -safety-pin -safety-valve -safeway -Saffarian -Saffarid -Saffell -Saffian -Saffier -saffior -safflor -safflorite -safflow -safflower -safflowers -Safford -Saffren -saffron -saffron-colored -saffroned -saffron-hued -saffrony -saffron-yellow -saffrons -saffrontree -saffronwood -Safi -Safier -Safine -Safini -Safir -Safire -Safko -SAfr -safranyik -safranin -safranine -safranins -safranophil -safranophile -safrol -safrole -safroles -safrols -saft -saftly -SAG -SAGA -sagaciate -sagacious -sagaciously -sagaciousness -sagacity -sagacities -Sagai -sagaie -sagaman -sagamen -sagamite -Sagamore -sagamores -sagan -saganash -saganashes -sagapen -sagapenum -Sagaponack -sagas -sagathy -sagbut -sagbuts -Sage -sagebrush -sagebrusher -sagebrushes -sagebush -sage-colored -sage-covered -sageer -sageleaf -sage-leaf -sage-leaved -sagely -sagene -sageness -sagenesses -sagenite -sagenitic -Sager -Sageretia -Sagerman -sagerose -sages -sageship -sagesse -sagest -sagewood -saggar -saggard -saggards -saggared -saggaring -saggars -sagged -sagger -saggered -saggering -saggers -saggy -saggier -saggiest -sagginess -sagging -saggon -Saghalien -saghavart -sagy -sagier -sagiest -Sagina -saginate -sagination -Saginaw -saging -sagital -Sagitarii -sagitarius -Sagitta -Sagittae -sagittal -sagittally -Sagittary -Sagittaria -sagittaries -Sagittarii -Sagittariid -Sagittarius -sagittate -Sagittid -sagittiferous -sagittiform -sagittocyst -sagittoid -Sagle -sagless -sago -sagoin -Sagola -sagolike -sagos -sagoweer -Sagra -sags -Saguache -saguaro -saguaros -Saguenay -Saguerus -saguing -sagum -Sagunto -Saguntum -saguran -saguranes -sagvandite -sagwire -sah -Sahadeva -Sahaptin -Sahara -Saharan -Saharanpur -Saharian -Saharic -sahh -Sahib -Sahibah -sahibs -Sahidic -sahiwal -sahiwals -sahlite -sahme -Saho -sahoukar -sahras -Sahuarita -sahuaro -sahuaros -sahukar -SAI -Say -say' -saya -sayability -sayable -sayableness -Sayal -Sayao -saibling -Saybrook -SAIC -saice -Sayce -saices -said -Saida -Saidee -Saidel -Saideman -Saidi -saids -SAYE -Saied -Sayed -sayee -Sayer -Sayers -sayest -Sayette -Saiff -saify -saiga -saigas -saignant -Saigon -saiid -sayid -sayids -saiyid -sayyid -saiyids -sayyids -saying -sayings -sail -sailable -sailage -sail-bearing -sailboard -sailboat -sailboater -sailboating -sailboats -sail-borne -sail-broad -sail-carrying -sailcloth -sail-dotted -sailed -sailer -sailers -Sayles -Sailesh -sail-filling -sailfin -sailfish -sailfishes -sailflying -saily -sailyard -sailye -sailing -sailingly -sailings -sailless -sailmaker -sailmaking -sailor -Saylor -sailor-fashion -sailorfish -sailor-fisherman -sailoring -sailorizing -sailorless -sailorly -sailorlike -sailor-looking -sailorman -sailor-mind -sailor-poet -sailorproof -sailors -Saylorsburg -sailor's-choice -sailor-soul -sailor-train -sailour -sail-over -sailplane -sailplaned -sailplaner -sailplaning -sail-propelled -sails -sailship -sailsman -sail-stretched -sail-winged -saim -saimy -saimin -saimins -saimiri -Saimon -sain -saynay -saindoux -sained -Sayner -saynete -Sainfoin -sainfoins -saining -say-nothing -sains -Saint -Saint-Agathon -Saint-Brieuc -Saint-Cloud -Saint-Denis -saintdom -saintdoms -sainte -Sainte-Beuve -sainted -Saint-emilion -saint-errant -saint-errantry -saintess -Saint-estephe -Saint-Etienne -Saint-Exupery -Saint-Florentin -Saint-Gaudens -sainthood -sainthoods -sainting -saintish -saintism -saint-john's-wort -Saint-julien -Saint-Just -Saint-L -Saint-Laurent -saintless -saintly -saintlier -saintliest -saintlike -saintlikeness -saintlily -saintliness -saintlinesses -saintling -Saint-Louis -Saint-Marcellin -Saint-Maur-des-Foss -Saint-Maure -Saint-Mihiel -Saint-milion -Saint-Nazaire -Saint-Nectaire -saintology -saintologist -Saint-Ouen -Saintpaulia -Saint-Pierre -Saint-Quentin -saints -Saint-Sa -Saintsbury -saintship -Saint-Simon -Saint-Simonian -Saint-Simonianism -Saint-Simonism -Saint-simonist -sayonara -sayonaras -Saionji -saip -Saipan -Saiph -Sair -Saire -Sayre -Sayres -Sayreville -sairy -sairly -sairve -Sais -says -Saishu -Saishuto -say-so -sayst -Saite -saith -saithe -Saitic -Saitis -Saito -Saiva -Sayville -Saivism -saj -sajou -sajous -Sajovich -Sak -Saka -Sakai -Sakais -Sakalava -SAKDC -sake -sakeber -sakeen -Sakel -Sakelarides -Sakell -Sakellaridis -saker -sakeret -sakers -sakes -Sakha -Sakhalin -Sakharov -Sakhuja -Saki -Sakyamuni -sakieh -sakiyeh -sakis -Sakkara -sakkoi -sakkos -Sakmar -Sakovich -Saks -Sakta -Saktas -Sakti -Saktism -sakulya -Sakuntala -Sal -sala -Salaam -salaamed -salaaming -salaamlike -salaams -salability -salabilities -salable -salableness -salably -salaceta -Salacia -salacious -salaciously -salaciousness -salacity -salacities -salacot -salad -salada -saladang -saladangs -salade -saladero -Saladin -salading -Salado -salads -salad's -salago -salagrama -Salahi -salay -Salaidh -salal -salals -Salamanca -salamandarin -salamander -salamanderlike -salamanders -Salamandra -salamandrian -Salamandridae -salamandriform -salamandrin -Salamandrina -salamandrine -salamandroid -salamat -salambao -Salambria -Salame -salami -Salaminian -Salamis -sal-ammoniac -salamo -Salamone -salampore -salamstone -salangane -Salangi -Salangia -salangid -Salangidae -Salar -salary -salariat -salariats -salaried -salariego -salaries -salarying -salaryless -Salas -salat -Salazar -Salba -salband -Salbu -salchow -Salchunas -Saldee -saldid -Salduba -Sale -saleability -saleable -saleably -salebrous -saleeite -Saleem -salegoer -saleyard -salele -Salem -Salema -Salemburg -Saleme -salempore -Salena -Salene -salenixon -sale-over -salep -saleps -saleratus -Salerno -saleroom -salerooms -sales -sale's -salesclerk -salesclerks -salesgirl -salesgirls -Salesian -Salesin -salesite -saleslady -salesladies -salesman -salesmanship -salesmen -salespeople -salesperson -salespersons -salesroom -salesrooms -Salesville -saleswoman -saleswomen -salet -saleware -salework -salfern -Salford -Salfordville -SALI -sali- -Salian -saliant -Saliaric -Salic -Salicaceae -salicaceous -Salicales -Salicariaceae -salicetum -salicyl -salicylal -salicylaldehyde -salicylamide -salicylanilide -salicylase -salicylate -salicylic -salicylide -salicylidene -salicylyl -salicylism -salicylize -salicylous -salicyluric -salicin -salicine -salicines -salicins -salicional -salicorn -Salicornia -Salida -salience -saliences -saliency -saliencies -salient -Salientia -salientian -saliently -salientness -salients -Salyer -Salieri -Salyersville -saliferous -salify -salifiable -salification -salified -salifies -salifying -saligenin -saligenol -saligot -saligram -Salim -salimeter -salimetry -Salina -Salinan -Salinas -salination -saline -Salinella -salinelle -salineness -Salineno -salines -Salineville -Salinger -saliniferous -salinification -saliniform -salinity -salinities -salinization -salinize -salinized -salinizes -salinizing -salino- -salinometer -salinometry -salinosulphureous -salinoterreous -Salique -saliretin -Salisbarry -Salisbury -Salisburia -Salish -Salishan -Salita -salite -salited -Salitpa -Salyut -Saliva -salival -Salivan -salivant -salivary -salivas -salivate -salivated -salivates -salivating -salivation -salivations -salivator -salivatory -salivous -Salix -Salk -Salkum -Sall -Salle -Sallee -salleeman -sallee-man -salleemen -Salley -sallender -sallenders -sallet -sallets -Salli -Sally -Sallyann -Sallyanne -Sallybloom -Sallie -Sallye -sallied -sallier -salliers -sallies -sallying -sallyman -sallymen -sallyport -Sallis -Sallisaw -sallywood -salloo -sallow -sallow-cheeked -sallow-colored -sallow-complexioned -sallowed -sallower -sallowest -sallow-faced -sallowy -sallowing -sallowish -sallowly -sallow-looking -sallowness -sallows -sallow-visaged -Sallust -Salm -salma -Salmacis -Salmagundi -salmagundis -Salman -Salmanazar -salmary -salmi -salmiac -salmin -salmine -salmis -Salmo -Salmon -salmonberry -salmonberries -salmon-breeding -salmon-colored -Salmonella -salmonellae -salmonellas -salmonellosis -salmonet -salmon-haunted -salmonid -Salmonidae -salmonids -salmoniform -salmonlike -salmonoid -Salmonoidea -Salmonoidei -salmon-pink -salmon-rearing -salmon-red -salmons -salmonsite -salmon-tinted -salmon-trout -salmwood -salnatron -Salol -salols -Saloma -Salome -salometer -salometry -Salomi -Salomie -Salomo -Salomon -Salomone -Salomonia -Salomonian -Salomonic -salon -Salonica -Salonika -Saloniki -salons -salon's -saloon -saloonist -saloonkeep -saloonkeeper -saloons -saloon's -saloop -saloops -Salop -salopette -Salopian -Salot -salp -Salpa -salpacean -salpae -salpas -salpian -salpians -salpicon -salpid -Salpidae -salpids -salpiform -salpiglosis -Salpiglossis -salping- -salpingectomy -salpingemphraxis -salpinges -salpingian -salpingion -salpingitic -salpingitis -salpingo- -salpingocatheterism -salpingocele -salpingocyesis -salpingomalleus -salpingonasal -salpingo-oophorectomy -salpingo-oophoritis -salpingo-ovariotomy -salpingo-ovaritis -salpingopalatal -salpingopalatine -salpingoperitonitis -salpingopexy -salpingopharyngeal -salpingopharyngeus -salpingopterygoid -salpingorrhaphy -salpingoscope -salpingostaphyline -salpingostenochoria -salpingostomatomy -salpingostomy -salpingostomies -salpingotomy -salpingotomies -salpingo-ureterostomy -Salpinx -salpoid -sal-prunella -salps -sals -salsa -salsas -Salsbury -salse -salsify -salsifies -salsifis -salsilla -salsillas -salsoda -Salsola -Salsolaceae -salsolaceous -salsuginose -salsuginous -SALT -Salta -saltando -salt-and-pepper -saltant -saltarella -saltarelli -saltarello -saltarellos -saltary -saltate -saltation -saltativeness -saltato -Saltator -saltatory -Saltatoria -saltatorial -saltatorian -saltatoric -saltatorily -saltatorious -saltatras -saltbox -salt-box -saltboxes -saltbrush -saltbush -saltbushes -saltcat -salt-cat -saltcatch -saltcellar -salt-cellar -saltcellars -saltchuck -saltchucker -salt-cured -salteaux -salted -salt-edged -saltee -Salten -Salter -salteretto -saltery -saltern -salterns -Salterpath -Salters -saltest -saltfat -saltfish -saltfoot -salt-glazed -saltgrass -salt-green -Saltgum -salt-hard -salthouse -salty -salticid -saltie -saltier -saltierra -saltiers -saltierwise -salties -saltiest -Saltigradae -saltigrade -saltily -Saltillo -saltimbanco -saltimbank -saltimbankery -saltimbanque -salt-incrusted -saltine -saltines -saltiness -saltinesses -salting -saltings -saltire -saltires -saltireways -saltirewise -saltish -saltishly -saltishness -salt-laden -saltless -saltlessness -saltly -Saltlick -saltlike -salt-loving -saltmaker -saltmaking -saltman -saltmouth -saltness -saltnesses -Salto -saltometer -saltorel -saltpan -salt-pan -saltpans -saltpeter -saltpetre -saltpetrous -saltpond -salt-rising -salts -Saltsburg -saltshaker -Saltsman -salt-spilling -saltspoon -saltspoonful -saltsprinkler -saltus -saltuses -Saltville -saltwater -salt-watery -saltwaters -saltweed -salt-white -saltwife -saltwork -saltworker -saltworks -saltwort -saltworts -Saltzman -salubrify -salubrious -salubriously -salubriousness -salubrity -salubrities -salud -Saluda -salue -salugi -Saluki -Salukis -salung -Salus -salutary -salutarily -salutariness -salutation -salutational -salutationless -salutations -salutation's -salutatious -salutatory -salutatoria -salutatorian -salutatories -salutatorily -salutatorium -salute -saluted -saluter -saluters -salutes -salutiferous -salutiferously -saluting -salutoria -Salva -salvability -salvable -salvableness -salvably -Salvador -Salvadora -Salvadoraceae -salvadoraceous -Salvadoran -Salvadore -Salvadorian -salvagable -salvage -salvageability -salvageable -salvaged -salvagee -salvagees -salvageproof -salvager -salvagers -salvages -salvaging -Salvay -Salvarsan -salvatella -salvation -salvational -salvationism -Salvationist -salvations -Salvator -Salvatore -salvatory -salve -salved -salveline -Salvelinus -salver -salverform -salvers -salver-shaped -salves -salvy -Salvia -salvianin -salvias -Salvidor -salvific -salvifical -salvifically -salvifics -salving -Salvini -Salvinia -Salviniaceae -salviniaceous -Salviniales -salviol -Salvisa -Salvo -salvoed -salvoes -salvoing -salvor -salvors -salvos -Salvucci -Salween -Salwey -salwin -Salzburg -salzfelle -Salzgitter -Salzhauer -SAM -Sam. -SAMA -Samadera -samadh -samadhi -Samain -samaj -Samal -Samala -Samale -Samalla -Saman -Samandura -Samani -Samanid -Samantha -Samanthia -Samar -Samara -Samarang -samaras -Samaria -samariform -Samaritan -Samaritaness -Samaritanism -samaritans -samarium -samariums -Samarkand -samaroid -Samarra -samarskite -Samas -Samau -Sama-Veda -samba -sambaed -sambaing -Sambal -sambaqui -sambaquis -sambar -Sambara -sambars -sambas -Sambathe -sambel -sambhar -sambhars -sambhogakaya -sambhur -sambhurs -Sambo -sambos -sambouk -sambouse -Sambre -sambuca -Sambucaceae -sambucas -Sambucus -sambuk -sambuke -sambukes -sambul -sambunigrin -sambur -Samburg -samburs -Samburu -same -samech -samechs -same-colored -same-featured -samek -samekh -samekhs -sameks -samel -samely -sameliness -Samella -same-minded -samen -sameness -samenesses -SAmer -same-seeming -same-sized -samesome -same-sounding -samfoo -Samford -Samgarnebo -samgha -samh -Samhain -samh'in -Samhita -Sami -Samy -Samia -Samian -Samydaceae -samiel -samiels -samir -Samira -samiresite -samiri -samisen -samisens -Samish -samite -samites -samiti -samizdat -samkara -Samkhya -Saml -samlet -samlets -Sammael -Sammartini -sammel -Sammer -Sammy -Sammie -sammier -Sammies -Sammons -Samnani -Samnite -Samnium -Samnorwood -Samoa -Samoan -samoans -Samogitian -samogon -samogonka -samohu -Samoyed -Samoyedic -Samolus -samory -SAMOS -samosa -samosas -Samosatenian -Samoset -samothere -Samotherium -Samothrace -Samothracian -Samothrake -samovar -samovars -Samp -sampaguita -sampaloc -sampan -sampans -SAMPEX -samphire -samphires -sampi -sample -sampled -sampleman -samplemen -sampler -samplery -samplers -samples -sampling -samplings -Sampo -samps -Sampsaean -Sampson -Sams -Samsam -samsara -samsaras -samshoo -samshu -samshus -Samsien -samskara -sam-sodden -Samson -Samsoness -Samsonian -Samsonic -Samsonistic -samsonite -Samsun -SAMTO -Samucan -Samucu -Samuel -Samuela -Samuele -Samuella -Samuelson -samuin -Samul -samurai -samurais -samvat -San -Sana -San'a -Sanaa -sanability -sanable -sanableness -sanai -Sanalda -sanand -sanataria -sanatarium -sanatariums -sanation -sanative -sanativeness -sanatory -sanatoria -sanatoriria -sanatoririums -sanatorium -sanatoriums -Sanballat -sanbenito -sanbenitos -Sanbo -Sanborn -Sanborne -Sanburn -Sancerre -Sancha -sanche -Sanchez -Sancho -Sancy -sancyite -sancord -sanct -sancta -sanctae -sanctanimity -sancties -sanctify -sanctifiable -sanctifiableness -sanctifiably -sanctificate -sanctification -sanctifications -sanctified -sanctifiedly -sanctifier -sanctifiers -sanctifies -sanctifying -sanctifyingly -sanctilogy -sanctiloquent -sanctimony -sanctimonial -sanctimonious -sanctimoniously -sanctimoniousness -sanction -sanctionable -sanctionableness -sanctionary -sanctionative -sanctioned -sanctioner -sanctioners -sanctioning -sanctionist -sanctionless -sanctionment -sanctions -sanctity -sanctities -sanctitude -Sanctology -sanctologist -sanctorian -sanctorium -sanctuary -sanctuaried -sanctuaries -sanctuary's -sanctuarize -sanctum -sanctums -Sanctus -Sancus -Sand -sandak -Sandakan -sandal -sandaled -sandaliform -sandaling -sandalled -sandalling -sandals -sandal's -sandalwood -sandalwoods -sandalwort -sandan -sandarac -sandaracin -sandaracs -sandastra -sandastros -Sandawe -sandbag -sand-bag -sandbagged -sandbagger -sandbaggers -sandbagging -sandbags -sandbank -sandbanks -sandbar -sandbars -Sandberg -sandbin -sandblast -sandblasted -sandblaster -sandblasters -sandblasting -sandblasts -sand-blight -sandblind -sand-blind -sandblindness -sand-blindness -sand-blown -sandboard -sandboy -sand-bottomed -sandbox -sand-box -sandboxes -sandbug -sand-built -sandbur -Sandburg -sand-buried -sand-burned -sandburr -sandburrs -sandburs -sand-cast -sand-cloth -sandclub -sand-colored -sandculture -sanddab -sanddabs -Sande -sanded -Sandeep -Sandell -Sandemanian -Sandemanianism -Sandemanism -Sander -sanderling -Sanders -Sanderson -Sandersville -sanderswood -sand-etched -sand-faced -sand-finished -sandfish -sandfishes -sandfly -sandflies -sand-floated -sandflower -sandglass -sand-glass -sandgoby -sand-groper -sandgrouse -sandheat -sand-hemmed -sandhi -sandhya -sandhill -sand-hill -sand-hiller -sandhis -sandhog -sandhogs -Sandhurst -Sandi -Sandy -Sandia -sandy-bearded -sandy-bottomed -sandy-colored -Sandie -Sandye -sandier -sandies -sandiest -sandiferous -sandy-flaxen -sandy-haired -sandyish -sandiness -sanding -sandip -sandy-pated -sandy-red -sandy-rufous -sandiver -sandix -sandyx -sandkey -sandlapper -Sandler -sandless -sandlike -sand-lime -sandling -sandlings -sandlot -sand-lot -sandlots -sandlotter -sandlotters -sandman -sandmen -sandmite -sandnatter -sandnecker -Sandon -Sandor -sandpaper -sand-paper -sandpapered -sandpaperer -sandpapery -sandpapering -sandpapers -sandpeep -sandpeeps -sandpile -sandpiles -sandpiper -sandpipers -sandpit -sandpits -Sandpoint -sandproof -Sandra -Sandrakottos -sand-red -Sandry -Sandringham -Sandro -sandrock -Sandrocottus -sandroller -Sandron -Sands -sandshoe -sandsoap -sandsoaps -sandspit -sandspout -sandspur -sandstay -sandstone -sandstones -sandstorm -sandstorms -sand-strewn -Sandstrom -sand-struck -sandunga -Sandusky -sandust -sand-warped -sandweed -sandweld -Sandwich -sandwiched -sandwiches -sandwiching -sandwood -sandworm -sandworms -sandwort -sandworts -sane -saned -sanely -sane-minded -sanemindedness -saneness -sanenesses -saner -sanes -sanest -Sanetch -Sanferd -Sanfo -Sanford -Sanforize -Sanforized -Sanforizing -Sanfourd -Sanfred -Sang -sanga -sangah -san-gaku -Sangallensis -Sangallo -Sangamon -sangar -sangaree -sangarees -sangars -sangas -sanga-sanga -sang-de-boeuf -sang-dragon -sangei -Sanger -sangerbund -sangerfest -sangers -sangfroid -sang-froid -sanggau -Sanggil -Sangh -Sangha -sangho -sanghs -sangil -Sangiovese -Sangir -Sangirese -sanglant -sangley -sanglier -Sango -Sangraal -sangrail -Sangreal -sangreeroot -sangrel -sangria -sangrias -sangsue -sangu -sanguicolous -sanguifacient -sanguiferous -sanguify -sanguification -sanguifier -sanguifluous -sanguimotor -sanguimotory -sanguinaceous -sanguinary -Sanguinaria -sanguinarily -sanguinariness -sanguine -sanguine-complexioned -sanguineless -sanguinely -sanguineness -sanguineobilious -sanguineophlegmatic -sanguineous -sanguineousness -sanguineovascular -sanguines -sanguinicolous -sanguiniferous -sanguinification -sanguinis -sanguinism -sanguinity -sanguinivorous -sanguinocholeric -sanguinolency -sanguinolent -sanguinometer -sanguinopoietic -sanguinopurulent -sanguinous -sanguinuity -Sanguisorba -Sanguisorbaceae -sanguisuge -sanguisugent -sanguisugous -sanguivorous -Sanhedrim -Sanhedrin -Sanhedrist -Sanhita -Sanyakoan -sanyasi -sanicle -sanicles -Sanicula -sanidine -sanidinic -sanidinite -sanies -sanify -sanification -saning -sanious -sanipractic -sanit -sanitary -sanitaria -sanitarian -sanitarians -sanitaries -sanitariia -sanitariiums -sanitarily -sanitariness -sanitarist -sanitarium -sanitariums -sanitate -sanitated -sanitates -sanitating -sanitation -sanitationist -sanitation-proof -sanitations -sanity -sanities -sanitisation -sanitise -sanitised -sanitises -sanitising -sanitist -sanitization -sanitize -sanitized -sanitizer -sanitizes -sanitizing -sanitoria -sanitorium -Sanyu -Sanjay -sanjak -sanjakate -sanjakbeg -sanjaks -sanjakship -sanjeev -sanjib -Sanjiv -sank -sanka -Sankara -Sankaran -Sankey -sankha -Sankhya -Sanmicheli -sannaite -sannhemp -sannyasi -sannyasin -sannyasis -Sannoisian -sannop -sannops -sannup -sannups -sanopurulent -sanoserous -Sanpoil -Sans -Sans. -Sansar -sansara -sansars -Sansbury -Sanscrit -Sanscritic -sansculot -sansculotte -sans-culotte -sans-culotterie -sansculottic -sans-culottic -sansculottid -sans-culottid -sans-culottide -sans-culottides -sansculottish -sans-culottish -sansculottism -sans-culottism -sans-culottist -sans-culottize -sansei -sanseis -Sansen -sanserif -sanserifs -Sansevieria -sanshach -sansi -Sansk -Sanskrit -Sanskritic -Sanskritist -Sanskritization -Sanskritize -Sansom -Sanson -Sansone -Sansovino -sans-serif -sant -Santa -Santayana -Santal -Santalaceae -santalaceous -Santalales -Santali -santalic -santalin -santalol -Santalum -santalwood -Santana -Santander -santapee -Santar -Santarem -Santaria -Santbech -Santee -santene -Santeria -santy -Santiago -santification -santii -santimi -santims -Santini -santir -santirs -Santo -santol -Santolina -santols -santon -santonate -santonic -santonica -santonin -santonine -santoninic -santonins -santorinite -Santoro -Santos -Santos-Dumont -santour -santours -santur -santurs -sanukite -Sanusi -Sanusis -Sanvitalia -sanzen -SAO -Saon -Saone -Saorstat -Saoshyant -SAP -sapa -sapajou -sapajous -sapan -sapanwood -sapbush -sapek -sapele -Saperda -Sapers -sapful -sap-green -Sapharensian -saphead -sapheaded -sapheadedness -sapheads -saphena -saphenae -saphenal -saphenous -saphie -Saphra -sapiao -sapid -sapidity -sapidities -sapidless -sapidness -sapience -sapiences -sapiency -sapiencies -sapiens -sapient -sapiential -sapientially -sapientize -sapiently -Sapienza -sapin -sapinda -Sapindaceae -sapindaceous -Sapindales -sapindaship -Sapindus -Sapir -sapit -Sapium -sapiutan -saple -sapless -saplessness -sapling -saplinghood -saplings -sapling's -sapo -sapodilla -sapodillo -sapogenin -saponaceous -saponaceousness -saponacity -saponary -Saponaria -saponarin -saponated -Saponi -saponiferous -saponify -saponifiable -saponification -saponified -saponifier -saponifies -saponifying -saponin -saponine -saponines -saponins -saponite -saponites -saponul -saponule -sapophoric -sapor -saporific -saporifical -saporosity -saporous -sapors -Sapota -Sapotaceae -sapotaceous -sapotas -sapote -sapotes -sapotilha -sapotilla -sapotoxin -sapour -sapours -Sapowith -sappanwood -sappare -sapped -sapper -sappers -Sapphera -Sapphic -sapphics -Sapphira -Sapphire -sapphireberry -sapphire-blue -sapphire-colored -sapphired -sapphire-hued -sapphires -sapphire-visaged -sapphirewing -sapphiric -sapphirine -Sapphism -sapphisms -Sapphist -sapphists -Sappho -sappy -sappier -sappiest -sappily -sappiness -sapping -sapples -Sapporo -sapr- -sapraemia -sapremia -sapremias -sapremic -saprin -saprine -sapro- -saprobe -saprobes -saprobic -saprobically -saprobiont -saprocoll -saprodil -saprodontia -saprogen -saprogenic -saprogenicity -saprogenous -Saprolegnia -Saprolegniaceae -saprolegniaceous -Saprolegniales -saprolegnious -saprolite -saprolitic -sapromic -sapropel -sapropelic -sapropelite -sapropels -saprophagan -saprophagous -saprophile -saprophilous -saprophyte -saprophytes -saprophytic -saprophytically -saprophytism -saproplankton -saprostomous -saprozoic -saprozoon -saps -sap's -sapsago -sapsagos -sapsap -sapskull -sapsuck -sapsucker -sapsuckers -sapta-matri -sapucaia -sapucainha -Sapulpa -sapwood -sap-wood -sapwoods -sapwort -saqib -Saqqara -saquaro -SAR -SARA -saraad -Saraann -Sara-Ann -sarabacan -Sarabaite -saraband -sarabande -sarabands -Saracen -Saracenian -Saracenic -Saracenical -Saracenism -Saracenlike -saracens -Sarad -Sarada -saraf -sarafan -Saragat -Saragosa -Saragossa -Sarah -Sarahann -Sarahsville -Saraiya -Sarajane -Sarajevo -Sarakolet -Sarakolle -Saraland -Saramaccaner -Saran -Saranac -sarangi -sarangousty -sarans -Saransk -sarape -sarapes -Sarasota -Sarasvati -Saratoga -Saratogan -Saratov -Saravan -Sarawak -Sarawakese -sarawakite -Sarawan -Sarazen -sarbacane -sarbican -sarc- -sarcasm -sarcasmproof -sarcasms -sarcasm's -sarcast -sarcastic -sarcastical -sarcastically -sarcasticalness -sarcasticness -sarcel -sarcelle -sarcelled -sarcelly -sarcenet -sarcenets -Sarchet -sarcilis -Sarcina -sarcinae -sarcinas -sarcine -sarcitis -sarcle -sarcler -sarco- -sarcoadenoma -sarcoadenomas -sarcoadenomata -Sarcobatus -sarcoblast -sarcocarcinoma -sarcocarcinomas -sarcocarcinomata -sarcocarp -sarcocele -sarcocyst -Sarcocystidea -sarcocystidean -sarcocystidian -Sarcocystis -sarcocystoid -sarcocyte -Sarcococca -sarcocol -Sarcocolla -sarcocollin -sarcode -sarcoderm -sarcoderma -Sarcodes -sarcodic -sarcodictyum -Sarcodina -sarcodous -sarcoenchondroma -sarcoenchondromas -sarcoenchondromata -sarcogenic -sarcogenous -Sarcogyps -sarcoglia -sarcoid -sarcoidosis -sarcoids -sarcolactic -sarcolemma -sarcolemmal -sarcolemmas -sarcolemmata -sarcolemmic -sarcolemmous -sarcoline -sarcolysis -sarcolite -sarcolyte -sarcolytic -sarcology -sarcologic -sarcological -sarcologist -sarcoma -sarcomas -sarcomata -sarcomatoid -sarcomatosis -sarcomatous -sarcomere -sarcomeric -Sarcophaga -sarcophagal -sarcophagi -sarcophagy -sarcophagic -sarcophagid -Sarcophagidae -sarcophagine -sarcophagize -sarcophagous -sarcophagus -sarcophaguses -sarcophile -sarcophilous -Sarcophilus -sarcoplasm -sarcoplasma -sarcoplasmatic -sarcoplasmic -sarcoplast -sarcoplastic -sarcopoietic -Sarcopsylla -Sarcopsyllidae -Sarcoptes -sarcoptic -sarcoptid -Sarcoptidae -Sarcorhamphus -sarcosepsis -sarcosepta -sarcoseptum -sarcosin -sarcosine -sarcosis -sarcosoma -sarcosomal -sarcosome -sarcosperm -sarcosporid -Sarcosporida -Sarcosporidia -sarcosporidial -sarcosporidian -sarcosporidiosis -sarcostyle -sarcostosis -sarcotheca -sarcotherapeutics -sarcotherapy -sarcotic -sarcous -Sarcoxie -Sarcura -Sard -sardachate -sardana -Sardanapalian -Sardanapallos -Sardanapalos -Sardanapalus -sardanas -sardar -sardars -Sardegna -sardel -Sardella -sardelle -Sardes -Sardian -sardine -sardines -sardinewise -Sardinia -Sardinian -sardinians -Sardis -sardius -sardiuses -Sardo -Sardoin -sardonian -sardonic -sardonical -sardonically -sardonicism -sardonyx -sardonyxes -Sardou -sards -sare -Saree -sarees -Sarelon -Sarena -Sarene -Sarepta -Saretta -Sarette -SAREX -sargasso -sargassos -Sargassum -sargassumfish -sargassumfishes -Sarge -Sargeant -Sargent -Sargents -Sargentville -sarges -sargo -Sargodha -Sargonic -Sargonid -Sargonide -sargos -sargus -Sari -Sarid -sarif -Sarigue -Sarilda -sarin -Sarina -sarinda -Sarine -sarins -sarip -saris -Sarita -Sark -sarkar -Sarkaria -sarkful -sarky -sarkical -sarkier -sarkiest -sarkine -sarking -sarkinite -Sarkis -sarkit -sarkless -sarks -sarlac -sarlak -Sarles -sarlyk -Sarmatia -Sarmatian -Sarmatic -sarmatier -sarment -sarmenta -sarmentaceous -sarmentiferous -sarmentose -sarmentous -sarments -sarmentum -sarna -Sarnath -Sarnen -Sarnia -Sarnoff -sarod -sarode -sarodes -sarodist -sarodists -sarods -Saroyan -saron -Sarona -sarong -sarongs -saronic -saronide -Saronville -Saros -saroses -Sarothamnus -Sarothra -sarothrum -Sarouk -sarpanch -Sarpedon -sarpler -sarpo -sarra -Sarracenia -Sarraceniaceae -sarraceniaceous -sarracenial -Sarraceniales -sarraf -sarrasin -Sarraute -sarrazin -Sarre -sarrow -sarrusophone -sarrusophonist -sarsa -sarsaparilla -sarsaparillas -sarsaparillin -Sarsar -sarsars -Sarsechim -sarsen -sarsenet -sarsenets -sarsens -Sarsi -sarsnet -Sarson -sarsparilla -Sart -sartage -sartain -Sartell -Sarthe -Sartin -Sartish -Sarto -Sarton -sartor -sartoriad -sartorial -sartorially -sartorian -sartorii -sartorite -sartorius -sartors -Sartre -Sartrian -Sartrianism -SARTS -saru-gaku -Saruk -Sarum -sarus -Sarvarthasiddha -Sarver -Sarvodaya -sarwan -Sarzan -SAS -sasa -Sasabe -Sasak -Sasakwa -Sasame-yuki -sasan -sasani -sasanqua -sasarara -Sascha -SASE -Sasebo -Saseno -sash -Sasha -sashay -sashayed -sashaying -sashays -sashed -Sashenka -sashery -sasheries -sashes -sashimi -sashimis -sashing -sashless -sashoon -sash-window -SASI -sasin -sasine -sasins -Sask -Sask. -Saskatchewan -Saskatoon -Sasnett -Saspamco -Sass -sassaby -sassabies -sassafac -sassafrack -sassafras -sassafrases -sassagum -Sassak -Sassamansville -Sassan -sassandra -Sassanian -Sassanid -Sassanidae -Sassanide -Sassanids -Sassari -sasse -sassed -Sassella -Sassenach -Sassenage -Sasser -Sasserides -sasses -Sassetta -sassy -sassybark -sassier -sassies -sassiest -sassily -sassiness -sassing -sassywood -sassolin -sassoline -sassolite -Sassoon -sasswood -sasswoods -Sastean -sastra -sastruga -sastrugi -SAT -Sat. -sata -satable -satai -satay -satays -Satan -Satanael -Satanas -satang -satangs -satanic -satanical -satanically -satanicalness -Satanism -satanisms -Satanist -Satanistic -satanists -Satanity -satanize -Satanology -Satanophany -Satanophanic -Satanophil -Satanophobia -Satanship -Satanta -satara -sataras -Satartia -SATB -satchel -satcheled -satchelful -satchels -satchel's -Sat-chit-ananda -Satcitananda -Sat-cit-ananda -satd -sate -sated -satedness -sateen -sateens -sateenwood -Sateia -sateless -satelles -satellitarian -satellite -satellited -satellites -satellite's -satellitesimal -satellitian -satellitic -satellitious -satellitium -satellitoid -satellitory -satelloid -satem -sates -Sathrum -sati -satiability -satiable -satiableness -satiably -Satyagraha -satyagrahi -satyaloka -satyashodak -satiate -satiated -satiates -satiating -satiation -Satie -Satieno -satient -satiety -satieties -satin -satinay -satin-backed -satinbush -satine -satined -satinet -satinets -satinette -satin-faced -satinfin -satin-finished -satinflower -satin-flower -sating -satiny -satininess -satining -satinite -satinity -satinize -satinleaf -satin-leaved -satinleaves -satin-lidded -satinlike -satin-lined -satinpod -satinpods -satins -satin-shining -satin-smooth -satin-striped -satinwood -satinwoods -satin-worked -sation -satyr -satire -satireproof -satires -satire's -satyresque -satyress -satyriases -satyriasis -satiric -satyric -satirical -satyrical -satirically -satiricalness -satyrid -Satyridae -satyrids -Satyrinae -satyrine -satyrion -satirisable -satirisation -satirise -satirised -satiriser -satirises -satirising -satirism -satyrism -satirist -satirists -satirizable -satirize -satirized -satirizer -satirizers -satirizes -satirizing -satyrlike -satyromaniac -satyrs -satis -satisdation -satisdiction -satisfaciendum -satisfaction -satisfactional -satisfactionist -satisfactionless -satisfactions -satisfaction's -satisfactive -satisfactory -satisfactorily -satisfactoriness -satisfactorious -satisfy -satisfiability -satisfiable -satisfice -satisfied -satisfiedly -satisfiedness -satisfier -satisfiers -satisfies -satisfying -satisfyingly -satisfyingness -satispassion -sativa -sativae -sative -satlijk -Sato -satori -satorii -satoris -Satrae -satrap -satrapal -satrapate -satrapess -satrapy -satrapic -satrapical -satrapies -satraps -satron -Satsop -Satsuma -satsumas -sattar -Satterfield -Satterlee -satterthwaite -sattie -sattle -Sattley -sattva -sattvic -Satu-Mare -satura -saturability -saturable -saturant -saturants -saturate -saturated -saturatedness -saturater -saturates -saturating -saturation -saturations -saturator -Saturday -Saturdays -saturday's -Satureia -satury -saturity -saturization -Saturn -Saturnal -Saturnale -saturnali -Saturnalia -Saturnalian -saturnalianly -Saturnalias -Saturnia -Saturnian -saturnic -Saturnicentric -saturniid -Saturniidae -Saturnine -saturninely -saturnineness -saturninity -saturnism -saturnist -saturnity -saturnize -Saturnus -Sau -sauba -sauce -sauce-alone -sauceboat -sauce-boat -saucebox -sauceboxes -sauce-crayon -sauced -saucedish -sauceless -sauceline -saucemaker -saucemaking -sauceman -saucemen -saucepan -saucepans -saucepan's -sauceplate -saucepot -saucer -saucer-eyed -saucerful -saucery -saucerize -saucerized -saucerleaf -saucerless -saucerlike -saucerman -saucers -saucer-shaped -sauces -sauch -sauchs -Saucy -Saucier -sauciest -saucily -sauciness -saucing -saucisse -saucisson -Saud -Sauder -Saudi -saudis -Saudra -Sauer -Sauerbraten -sauerkraut -sauerkrauts -Sauers -sauf -Saugatuck -sauger -saugers -Saugerties -saugh -saughen -saughy -saughs -saught -Saugus -Sauk -Sauks -Saukville -Saul -sauld -saulge -saulie -Sauls -Saulsbury -Sault -saulter -Saulteur -saults -Saum -saumya -saumon -saumont -Saumur -sauna -saunas -Sauncho -sauncy -sauncier -saunciest -Saunder -Saunders -Saunderson -Saunderstown -saunderswood -Saundra -Saunemin -saunt -saunter -sauntered -saunterer -saunterers -sauntering -saunteringly -saunters -sauqui -Sauquoit -saur -Saura -Sauraseni -Saurashtra -Saurauia -Saurauiaceae -saurel -saurels -saury -Sauria -saurian -saurians -sauriasis -sauries -sauriosis -Saurischia -saurischian -saurless -sauro- -Sauroctonos -saurodont -Saurodontidae -Saurognathae -saurognathism -saurognathous -sauroid -Sauromatian -saurophagous -sauropod -Sauropoda -sauropodous -sauropods -sauropsid -Sauropsida -sauropsidan -sauropsidian -Sauropterygia -sauropterygian -Saurornithes -saurornithic -Saururaceae -saururaceous -Saururae -saururan -saururous -Saururus -Sausa -sausage -sausage-fingered -sausagelike -sausages -sausage's -sausage-shaped -Sausalito -sausinger -Saussure -Saussurea -saussurite -saussuritic -saussuritization -saussuritize -saut -saute -sauted -Sautee -sauteed -sauteing -sauter -sautereau -sauterelle -sauterne -Sauternes -sautes -sauteur -sauty -sautoir -sautoire -sautoires -sautoirs -sautree -Sauttoirs -Sauvagesia -sauve -sauvegarde -sauve-qui-peut -Sauveur -sav -Sava -savable -savableness -savacu -Savadove -Savage -savaged -savagedom -savage-featured -savage-fierce -savage-hearted -savagely -savage-looking -savageness -savagenesses -savager -savagery -savageries -savagerous -savagers -savages -savage-spoken -savagess -savagest -savage-wild -savaging -savagism -savagisms -savagize -Savaii -Saval -savanilla -Savanna -Savannah -savannahs -savannas -savant -savants -Savara -savarin -savarins -savate -savates -savation -Savdeep -Save -saveable -saveableness -save-all -saved -savey -savelha -Savell -saveloy -saveloys -savement -saver -Savery -savers -Saverton -saves -Savick -Savil -savile -Savill -Saville -savin -Savina -savine -savines -saving -savingly -savingness -savings -savin-leaved -savins -savintry -Savior -savioress -saviorhood -saviors -savior's -saviorship -Saviour -saviouress -saviourhood -saviours -saviourship -Savitar -Savitri -Savitt -Savoy -Savoyard -Savoyards -Savoie -savoyed -savoying -savoir-faire -savoir-vivre -savoys -savola -Savona -Savonarola -Savonarolist -Savonburg -Savonnerie -savor -savored -savorer -savorers -Savory -savorier -savories -savoriest -savory-leaved -savorily -savoriness -savoring -savoringly -savorless -savorlessness -savorly -savorous -savors -savorsome -savour -savoured -savourer -savourers -savoury -savourier -savouries -savouriest -savourily -savouriness -savouring -savouringly -savourless -savourous -savours -savssat -savvy -savvied -savvier -savvies -savviest -savvying -SAW -sawah -Sawaiori -sawali -Sawan -sawarra -sawback -sawbelly -sawbill -saw-billed -sawbills -sawbones -sawboneses -sawbuck -sawbucks -sawbwa -sawder -sawdust -sawdusty -sawdustish -sawdustlike -sawdusts -sawed -saw-edged -sawed-off -sawer -sawers -sawfish -sawfishes -sawfly -saw-fly -sawflies -sawflom -saw-handled -sawhorse -sawhorses -Sawyer -Sawyere -sawyers -Sawyerville -sawing -sawings -Sawyor -sawish -saw-leaved -sawlike -sawlog -sawlogs -sawlshot -sawmaker -sawmaking -sawman -sawmill -sawmiller -sawmilling -sawmills -sawmill's -sawmon -sawmont -sawn -sawneb -Sawney -sawneys -sawny -sawnie -sawn-off -saw-pierce -sawpit -saw-pit -saws -sawsetter -saw-shaped -sawsharper -sawsmith -sawt -sawteeth -Sawtelle -sawtimber -sawtooth -saw-toothed -sawway -saw-whet -sawworker -sawwort -saw-wort -Sax -Sax. -Saxapahaw -saxatile -saxaul -saxboard -saxcornet -Saxe -Saxe-Altenburg -Saxe-Coburg-Gotha -Saxe-Meiningen -Saxen -Saxena -saxes -Saxeville -Saxe-Weimar-Eisenach -saxhorn -sax-horn -saxhorns -Saxicava -saxicavous -Saxicola -saxicole -Saxicolidae -Saxicolinae -saxicoline -saxicolous -Saxifraga -Saxifragaceae -saxifragaceous -saxifragant -saxifrage -saxifragous -saxifrax -saxigenous -Saxis -Saxish -saxitoxin -Saxon -Saxonburg -Saxondom -Saxony -Saxonian -Saxonic -Saxonical -Saxonically -saxonies -Saxonish -Saxonism -Saxonist -Saxonite -Saxonization -Saxonize -Saxonly -saxons -saxophone -saxophones -saxophonic -saxophonist -saxophonists -saxotromba -saxpence -saxten -saxtie -Saxton -saxtuba -saxtubas -sazen -Sazerac -SB -sb. -SBA -Sbaikian -SBC -SBE -SBIC -sbirro -SBLI -sblood -'sblood -SBMS -sbodikins -'sbodikins -Sbrinz -SBS -SBU -SBUS -SbW -SBWR -SC -sc. -SCA -scab -scabbado -scabbard -scabbarded -scabbarding -scabbardless -scabbards -scabbard's -scabbed -scabbedness -scabbery -scabby -scabbier -scabbiest -scabby-head -scabbily -scabbiness -scabbing -scabble -scabbled -scabbler -scabbles -scabbling -scabellum -scaberulous -scabetic -scabia -scabicidal -scabicide -scabid -scabies -scabietic -scabine -scabinus -scabiophobia -Scabiosa -scabiosas -scabiosity -scabious -scabiouses -scabish -scabland -scablike -scabrate -scabrescent -scabrid -scabridity -scabridulous -scabrin -scabrities -scabriusculose -scabriusculous -scabrock -scabrosely -scabrous -scabrously -scabrousness -scabs -scabwort -scacchic -scacchite -SCAD -SCADA -SCADC -scaddle -scads -Scaean -scaena -scaff -scaffer -scaffery -scaffy -scaffie -scaffle -scaffold -scaffoldage -scaffolded -scaffolder -scaffolding -scaffoldings -scaffolds -scaff-raff -scag -scaglia -scagliola -scagliolist -scags -scaife -Scala -scalable -scalableness -scalably -scalade -scalades -scalado -scalados -scalae -scalage -scalages -scalar -scalare -scalares -scalary -Scalaria -scalarian -scalariform -scalariformly -Scalariidae -scalars -scalar's -scalarwise -scalation -scalawag -scalawaggery -scalawaggy -scalawags -scald -scaldberry -scalded -scalder -scaldfish -scald-fish -scaldy -scaldic -scalding -scaldini -scaldino -scaldra -scalds -scaldweed -scale -scaleback -scalebark -scale-bearing -scaleboard -scale-board -scale-bright -scaled -scaled-down -scale-down -scaledrake -scalefish -scaleful -scaleless -scalelet -scalelike -scaleman -scalemen -scalena -scalene -scaleni -scalenohedra -scalenohedral -scalenohedron -scalenohedrons -scalenon -scalenous -scalenum -scalenus -scalepan -scalepans -scaleproof -scaler -scalers -Scales -scalesman -scalesmen -scalesmith -scalet -scaletail -scale-tailed -scaleup -scale-up -scaleups -scalewing -scalewise -scalework -scalewort -Scalf -scalfe -scaly -scaly-bark -scaly-barked -scalier -scaliest -scaly-finned -Scaliger -scaliness -scaling -scaling-ladder -scalings -scaly-stemmed -scalytail -scaly-winged -scall -scallage -scallawag -scallawaggery -scallawaggy -scalled -scallion -scallions -scallywag -scallola -scallom -scallop -scalloped -scalloped-edged -scalloper -scallopers -scalloping -scallopini -scallops -scallop-shell -scallopwise -scalls -scalma -scalodo -scalogram -scaloni -scaloppine -Scalops -Scalopus -scalp -scalped -scalpeen -scalpel -scalpellar -scalpellic -scalpellum -scalpellus -scalpels -scalper -scalpers -scalping -scalping-knife -scalpless -scalplock -scalpra -scalpriform -scalprum -scalps -scalp's -scalpture -scalt -scalx -scalz -scam -Scamander -Scamandrius -scamble -scambled -scambler -scambling -SCAME -scamell -scamillus -scamler -scamles -scammed -scammel -scamming -Scammon -scammony -scammoniate -scammonies -scammonin -scammonyroot -SCAMP -scampavia -scamped -scamper -scampered -scamperer -scampering -scampers -scamphood -scampi -scampies -scamping -scampingly -scampish -scampishly -scampishness -scamps -scampsman -scams -SCAN -scance -Scand -scandal -scandal-bearer -scandal-bearing -scandaled -scandaling -scandalisation -scandalise -scandalised -scandaliser -scandalising -scandalization -scandalize -scandalized -scandalizer -scandalizers -scandalizes -scandalizing -scandalled -scandalling -scandalmonger -scandalmongery -scandalmongering -scandal-mongering -scandalmonging -scandalous -scandalously -scandalousness -scandalproof -scandals -scandal's -Scandaroon -scandent -Scanderbeg -Scandia -Scandian -scandias -scandic -scandicus -Scandinavia -Scandinavian -Scandinavianism -scandinavians -scandium -scandiums -Scandix -Scandura -Scania -Scanian -Scanic -scanmag -scannable -scanned -scanner -scanners -scanner's -scanning -scanningly -scannings -scans -scansion -scansionist -scansions -Scansores -scansory -scansorial -scansorious -scanstor -scant -scanted -scanter -scantest -scanty -scantier -scanties -scantiest -scantily -scantiness -scanting -scantity -scantle -scantlet -scantly -scantling -scantlinged -scantlings -scantness -scants -scap -scape -scape-bearing -scaped -scapegallows -scapegoat -scapegoater -scapegoating -scapegoatism -scapegoats -scapegrace -scapegraces -scapel -scapeless -scapement -scapes -scapethrift -scapewheel -scapha -Scaphander -Scaphandridae -scaphe -scaphion -Scaphiopodidae -Scaphiopus -scaphism -scaphite -Scaphites -Scaphitidae -scaphitoid -scapho- -scaphocephaly -scaphocephalic -scaphocephalism -scaphocephalous -scaphocephalus -scaphocerite -scaphoceritic -scaphognathite -scaphognathitic -scaphoid -scaphoids -scapholunar -scaphopod -Scaphopoda -scaphopodous -scapiform -scapigerous -scaping -scapoid -scapolite -scapolite-gabbro -scapolitization -scapose -scapple -scappler -Scappoose -scapula -scapulae -scapulalgia -scapular -scapulare -scapulary -scapularies -scapulars -scapular-shaped -scapulas -scapulated -scapulectomy -scapulet -scapulette -scapulimancy -scapulo- -scapuloaxillary -scapulobrachial -scapuloclavicular -scapulocoracoid -scapulodynia -scapulohumeral -scapulopexy -scapuloradial -scapulospinal -scapulothoracic -scapuloulnar -scapulovertebral -scapus -scar -scarab -scarabaean -scarabaei -scarabaeid -Scarabaeidae -scarabaeidoid -scarabaeiform -Scarabaeinae -scarabaeoid -scarabaeus -scarabaeuses -scarabee -scaraboid -scarabs -Scaramouch -Scaramouche -scar-bearer -scar-bearing -Scarborough -Scarbro -scarb-tree -scarce -scarce-closed -scarce-cold -scarce-covered -scarce-discerned -scarce-found -scarce-heard -scarcely -scarcelins -scarcement -scarce-met -scarce-moving -scarcen -scarceness -scarce-parted -scarcer -scarce-seen -scarcest -scarce-told -scarce-warned -scarcy -scarcity -scarcities -scar-clad -scards -scare -scarebabe -scare-bear -scare-beggar -scare-bird -scarebug -Scare-christian -scarecrow -scarecrowy -scarecrowish -scarecrows -scared -scare-devil -scaredy-cat -scare-fire -scare-fish -scare-fly -scareful -scare-hawk -scarehead -scare-hog -scarey -scaremonger -scaremongering -scare-mouse -scare-peddler -scareproof -scarer -scare-robin -scarers -scares -scare-sheep -scare-sinner -scare-sleep -scaresome -scare-thief -scare-vermin -scarf -Scarface -scar-faced -scarfe -scarfed -scarfer -scarfy -scarfing -scarfless -scarflike -scarfpin -scarfpins -scarfs -scarfskin -scarf-skin -scarfwise -scary -scarid -Scaridae -scarier -scariest -scarify -scarification -scarificator -scarified -scarifier -scarifies -scarifying -scarily -scariness -scaring -scaringly -scariole -scariose -scarious -Scarito -scarlatina -scarlatinal -scarlatiniform -scarlatinoid -scarlatinous -Scarlatti -scarless -Scarlet -scarlet-ariled -scarlet-barred -scarletberry -scarlet-berried -scarlet-blossomed -scarlet-breasted -scarlet-circled -scarlet-clad -scarlet-coated -scarlet-colored -scarlet-crested -scarlet-day -scarlet-faced -scarlet-flowered -scarlet-fruited -scarlet-gowned -scarlet-haired -scarlety -scarletina -scarlet-lined -scarlet-lipped -scarlet-red -scarlet-robed -scarlets -scarletseed -Scarlett -scarlet-tipped -scarlet-vermillion -scarman -scarn -scaroid -scarola -scarp -scarpa -scarpe -scarped -scarper -scarpered -scarpering -scarpers -scarpetti -scarph -scarphed -scarphing -scarphs -scarpines -scarping -scarplet -scarpment -scarproof -scarps -scarred -scarrer -scarry -scarrier -scarriest -scarring -Scarron -Scarrow -scars -scar's -Scarsdale -scar-seamed -scart -scarted -scarth -scarting -scarts -Scarus -scarved -scarves -Scarville -scase -scasely -SCAT -scat- -scatback -scatbacks -scatch -scathe -scathed -scatheful -scatheless -scathelessly -scathes -scathful -scathy -scathing -scathingly -Scaticook -scatland -scato- -scatology -scatologia -scatologic -scatological -scatologies -scatologist -scatologize -scatoma -scatomancy -scatomas -scatomata -scatophagy -scatophagid -Scatophagidae -scatophagies -scatophagoid -scatophagous -scatoscopy -scats -scatt -scatted -scatter -scatterable -scatteration -scatteraway -scatterbrain -scatter-brain -scatterbrained -scatter-brained -scatterbrains -scattered -scatteredly -scatteredness -scatterer -scatterers -scattergood -scattergram -scattergrams -scattergraph -scattergun -scatter-gun -scattery -scattering -scatteringly -scatterings -scatterling -scatterment -scattermouch -scatterplot -scatterplots -scatters -scattershot -scattersite -scatty -scattier -scattiest -scatting -scatts -scatula -scaturient -scaul -scaum -scaup -scaup-duck -scauper -scaupers -scaups -scaur -scaurie -scaurs -scaut -scavage -scavager -scavagery -scavel -scavenage -scavenge -scavenged -scavenger -scavengery -scavengerism -scavengers -scavengership -scavenges -scavenging -scaw -scawd -scawl -scawtite -scazon -scazontic -SCB -ScBC -ScBE -SCC -SCCA -scclera -SCCS -ScD -SCE -sceat -SCED -scegger -scelalgia -scelerat -scelerate -scelidosaur -scelidosaurian -scelidosauroid -Scelidosaurus -Scelidotherium -Sceliphron -sceloncus -Sceloporus -scelotyrbe -scelp -scena -scenary -scenario -scenarioist -scenarioization -scenarioize -scenarios -scenario's -scenarist -scenarists -scenarization -scenarize -scenarizing -scenas -scend -scended -scendentality -scending -scends -scene -scenecraft -Scenedesmus -sceneful -sceneman -scenery -sceneries -scenes -scene's -sceneshifter -scene-stealer -scenewright -scenic -scenical -scenically -scenist -scenite -scenograph -scenographer -scenography -scenographic -scenographical -scenographically -Scenopinidae -scension -scent -scented -scenter -scentful -scenting -scentless -scentlessness -scentproof -scents -scentwood -scepsis -scepter -scepterdom -sceptered -sceptering -scepterless -scepters -scepter's -sceptibly -Sceptic -sceptical -sceptically -scepticism -scepticize -scepticized -scepticizing -sceptics -sceptral -sceptre -sceptred -sceptredom -sceptreless -sceptres -sceptry -sceptring -sceptropherous -sceptrosophy -scerne -sceuophylacium -sceuophylax -sceuophorion -Scever -Scevo -Scevor -Scevour -scewing -SCF -scfh -scfm -Sch -sch. -Schaab -Schaaff -schaapsteker -Schabzieger -Schach -Schacht -Schacker -schadchan -Schadenfreude -Schaefer -Schaeffer -Schaefferia -Schaefferstown -Schaerbeek -Schafer -Schaffel -Schaffer -Schaffhausen -Schaghticoke -schairerite -Schaller -Schalles -schalmei -schalmey -schalstein -schanse -Schantz -schanz -schapbachite -Schaper -Schapira -schappe -schapped -schappes -schapping -schapska -Scharaga -Scharf -Scharff -Schargel -Schary -Scharlachberger -Scharnhorst -Scharwenka -schatchen -Schatz -Schaumberger -Schaumburg -Schaumburg-Lippe -schav -schavs -Schberg -Schear -Scheat -Schechinger -Schechter -Scheck -Schecter -Schedar -schediasm -schediastic -Schedius -schedulable -schedular -schedulate -schedule -scheduled -scheduler -schedulers -schedules -scheduling -schedulize -Scheel -Scheele -scheelin -scheelite -Scheer -Scheers -scheffel -schefferite -Scheherazade -Scheider -Scheidt -Schein -Scheiner -Scheld -Scheldt -Scheler -Schell -Schellens -Scheller -schelly -Schelling -Schellingian -Schellingianism -Schellingism -Schellsburg -schelm -scheltopusik -schema -schemas -schema's -schemata -schemati -schematic -schematical -schematically -schematics -schematisation -schematise -schematised -schematiser -schematising -schematism -schematist -schematization -schematize -schematized -schematizer -schematogram -schematograph -schematologetically -schematomancy -schematonics -scheme -schemed -schemeful -schemeless -schemer -schemery -schemers -schemes -scheme's -schemy -scheming -schemingly -schemist -schemozzle -Schenck -schene -Schenectady -Schenevus -Schenley -schepel -schepen -Schererville -Scherle -scherm -Scherman -Schertz -scherzando -scherzi -scherzo -scherzos -scherzoso -schesis -Scheuchzeria -Scheuchzeriaceae -scheuchzeriaceous -Scheveningen -Schiaparelli -schiavona -schiavone -schiavones -schiavoni -Schick -Schickard -Schiedam -Schiff -schiffli -Schiffman -Schifra -Schild -Schilit -Schiller -schillerfels -schillerization -schillerize -schillerized -schillerizing -schillers -Schilling -schillings -schillu -Schilt -schimmel -schynbald -schindylesis -schindyletic -Schindler -Schinica -Schinus -Schipa -schipperke -Schippers -Schiro -Schisandra -Schisandraceae -schism -schisma -schismatic -schismatical -schismatically -schismaticalness -schismatics -schismatism -schismatist -schismatize -schismatized -schismatizing -schismic -schismless -schisms -schist -schistaceous -schistic -schistocelia -schistocephalus -Schistocerca -schistocyte -schistocytosis -schistocoelia -schistocormia -schistocormus -schistoglossia -schistoid -schistomelia -schistomelus -schistoprosopia -schistoprosopus -schistorrhachis -schistoscope -schistose -schistosis -schistosity -Schistosoma -schistosomal -schistosome -schistosomia -schistosomiasis -schistosomus -schistosternia -schistothorax -schistous -schists -schistus -schiz -schiz- -Schizaea -Schizaeaceae -schizaeaceous -Schizanthus -schizaxon -schizy -schizier -schizo -schizo- -schizocarp -schizocarpic -schizocarpous -schizochroal -schizocyte -schizocytosis -schizocoele -schizocoelic -schizocoelous -schizodinic -schizogamy -schizogenesis -schizogenetic -schizogenetically -schizogenic -schizogenous -schizogenously -schizognath -Schizognathae -schizognathism -schizognathous -schizogony -schizogonic -schizogonous -Schizogregarinae -schizogregarine -Schizogregarinida -schizoid -schizoidism -schizoids -Schizolaenaceae -schizolaenaceous -schizolysigenous -schizolite -schizomanic -Schizomeria -schizomycete -Schizomycetes -schizomycetic -schizomycetous -schizomycosis -Schizonemertea -schizonemertean -schizonemertine -Schizoneura -Schizonotus -schizont -schizonts -schizopelmous -Schizopetalon -schizophasia -Schizophyceae -schizophyceous -Schizophyllum -Schizophyta -schizophyte -schizophytic -Schizophragma -schizophrene -schizophrenia -schizophreniac -schizophrenias -schizophrenic -schizophrenically -schizophrenics -schizopod -Schizopoda -schizopodal -schizopodous -schizorhinal -schizos -schizospore -schizostele -schizostely -schizostelic -schizothecal -schizothyme -schizothymia -schizothymic -schizothoracic -schizotrichia -Schizotrypanum -schiztic -schizzy -schizzo -Schlater -Schlauraffenland -Schlegel -Schley -Schleichera -Schleiden -Schleiermacher -schlemiel -schlemiels -schlemihl -Schlenger -schlenter -schlep -schlepp -schlepped -schlepper -schlepping -schlepps -schleps -Schlesien -Schlesinger -Schlessel -Schlessinger -Schleswig -Schleswig-Holstein -Schlicher -Schlick -Schlieffen -Schliemann -schliere -schlieren -schlieric -schlimazel -schlimazl -Schlitz -schlock -schlocky -schlocks -schloop -Schloss -Schlosser -Schlummerlied -schlump -schlumps -Schluter -Schmalkaldic -schmaltz -schmaltzes -schmaltzy -schmaltzier -schmaltziest -schmalz -schmalzes -schmalzy -schmalzier -schmalziest -schmatte -schmear -schmears -schmeer -schmeered -schmeering -schmeers -schmeiss -Schmeling -Schmeltzer -schmelz -schmelze -schmelzes -Schmerz -Schmidt -Schmidt-Rottluff -Schmierkse -Schmitt -Schmitz -schmo -schmoe -schmoes -schmoos -schmoose -schmoosed -schmooses -schmoosing -schmooze -schmoozed -schmoozes -schmoozing -schmos -schmuck -schmucks -SchMusB -Schnabel -Schnabelkanne -Schnapp -schnapper -schnapps -schnaps -schnauzer -schnauzers -schnebelite -schnecke -schnecken -Schnecksville -Schneider -Schneiderian -Schneiderman -Schnell -schnitz -schnitzel -Schnitzler -schnook -schnooks -schnorchel -schnorkel -schnorkle -Schnorr -schnorrer -schnoz -schnozz -schnozzle -schnozzola -Schnur -Schnurr -scho -Schober -schochat -schoche -schochet -schoenanth -Schoenberg -Schoenburg -Schoenfelder -Schoening -Schoenius -schoenobatic -schoenobatist -Schoenocaulon -Schoenus -Schofield -Schoharie -schokker -schola -scholae -scholaptitude -scholar -scholarch -scholardom -scholarian -scholarism -scholarity -scholarless -scholarly -scholarlike -scholarliness -scholars -scholarship -scholarships -scholarship's -scholasm -Scholastic -scholastical -scholastically -scholasticate -Scholasticism -scholasticly -scholastics -scholasticus -Scholem -scholia -scholiast -scholiastic -scholion -scholium -scholiumlia -scholiums -Scholz -Schomberger -Schomburgkia -Schonbein -Schonberg -schone -Schonfeld -schonfelsite -Schonfield -Schongauer -Schonthal -Schoodic -Schoof -School -schoolable -schoolage -school-age -schoolbag -schoolboy -schoolboydom -schoolboyhood -schoolboyish -schoolboyishly -schoolboyishness -schoolboyism -schoolboys -schoolboy's -schoolbook -schoolbookish -schoolbooks -school-bred -schoolbutter -schoolchild -schoolchildren -Schoolcraft -schooldays -schooldame -schooldom -schooled -schooler -schoolery -schoolers -schoolfellow -schoolfellows -schoolfellowship -schoolful -schoolgirl -schoolgirlhood -schoolgirly -schoolgirlish -schoolgirlishly -schoolgirlishness -schoolgirlism -schoolgirls -schoolgoing -schoolhouse -school-house -schoolhouses -schoolhouse's -schoolyard -schoolyards -schoolie -schooling -schoolingly -schoolish -schoolkeeper -schoolkeeping -school-leaving -schoolless -schoollike -schoolma -schoolmaam -schoolma'am -schoolmaamish -school-made -school-magisterial -schoolmaid -Schoolman -schoolmarm -schoolmarms -schoolmaster -schoolmasterhood -schoolmastery -schoolmastering -schoolmasterish -schoolmasterishly -schoolmasterishness -schoolmasterism -schoolmasterly -schoolmasterlike -schoolmasters -schoolmaster's -schoolmastership -schoolmate -schoolmates -schoolmen -schoolmiss -schoolmistress -schoolmistresses -schoolmistressy -schoolroom -schoolrooms -schoolroom's -Schools -school-taught -schoolteacher -schoolteachery -schoolteacherish -schoolteacherly -schoolteachers -schoolteaching -schooltide -schooltime -school-trained -schoolward -schoolwards -schoolwork -schoon -schooner -schooner-rigged -schooners -schooper -Schopenhauer -Schopenhauereanism -Schopenhauerian -Schopenhauerism -schoppen -schorenbergite -schorl -schorlaceous -schorl-granite -schorly -schorlomite -schorlous -schorl-rock -schorls -Schott -schottische -schottish -Schottky -Schou -schout -Schouten -schouw -Schow -schradan -Schrader -Schram -Schramke -schrank -schraubthaler -Schrdinger -Schrebera -Schreck -schrecklich -Schrecklichkeit -Schreib -Schreibe -Schreiber -schreibersite -Schreibman -schreiner -schreinerize -schreinerized -schreinerizing -schryari -Schrick -schriesheimite -Schriever -schrik -schriks -schrod -Schroder -Schrodinger -schrods -Schroeder -Schroedinger -Schroer -Schroth -schrother -Schrund -schtick -schticks -schtik -schtiks -schtoff -Schubert -Schug -Schuh -schuhe -Schuyler -Schuylerville -Schuylkill -schuit -schuyt -schuits -Schul -Schulberg -Schule -Schulein -Schulenburg -Schuler -Schulman -schuln -schultenite -Schulter -Schultz -schultze -Schulz -Schulze -Schumacher -Schuman -Schumann -Schumer -Schumpeter -schungite -Schurman -Schurz -Schuschnigg -schuss -schussboomer -schussboomers -schussed -schusser -schusses -schussing -Schuster -schute -Schutz -Schutzstaffel -schwa -Schwab -schwabacher -Schwaben -Schwalbea -Schwann -schwanpan -schwarmerei -Schwartz -Schwarz -Schwarzian -Schwarzkopf -Schwarzwald -schwas -Schweiker -Schweinfurt -Schweitzer -Schweiz -schweizer -schweizerkase -Schwejda -Schwendenerian -Schwenk -Schwenkfelder -Schwenkfeldian -Schwerin -Schwertner -Schwing -Schwinn -Schwitters -Schwitzer -Schwyz -SCI -sci. -Sciadopitys -Sciaena -sciaenid -Sciaenidae -sciaenids -sciaeniform -Sciaeniformes -sciaenoid -sciage -sciagraph -sciagraphed -sciagraphy -sciagraphic -sciagraphing -scialytic -sciamachy -sciamachies -sciametry -Scian -sciapod -sciapodous -Sciara -sciarid -Sciaridae -Sciarinae -sciascope -sciascopy -sciath -sciatheric -sciatherical -sciatherically -sciatic -sciatica -sciatical -sciatically -sciaticas -sciaticky -sciatics -scybala -scybalous -scybalum -Scibert -scibile -scye -scyelite -science -scienced -sciences -science's -scient -scienter -scientia -sciential -scientiarum -scientician -Scientific -scientifical -scientifically -scientificalness -scientificogeographical -scientificohistorical -scientificophilosophical -scientificopoetic -scientificoreligious -scientificoromantic -scientintically -scientism -Scientist -scientistic -scientistically -scientists -scientist's -scientize -scientolism -Scientology -scientologist -SCIFI -sci-fi -scil -Scylaceus -Scyld -scilicet -Scilla -Scylla -Scyllaea -Scyllaeidae -scillain -scyllarian -Scyllaridae -scyllaroid -Scyllarus -scillas -Scyllidae -Scylliidae -scyllioid -Scylliorhinidae -scylliorhinoid -Scylliorhinus -scillipicrin -Scillitan -scyllite -scillitin -scillitine -scyllitol -scillitoxin -Scyllium -Scillonian -scimetar -scimetars -scimitar -scimitared -scimitarpod -scimitars -scimitar-shaped -scimiter -scimitered -scimiterpod -scimiters -scincid -Scincidae -scincidoid -scinciform -scincoid -scincoidian -scincoids -Scincomorpha -Scincus -scind -sciniph -scintigraphy -scintigraphic -scintil -scintilla -scintillant -scintillantly -scintillas -scintillate -scintillated -scintillates -scintillating -scintillatingly -scintillation -scintillations -scintillator -scintillators -scintillescent -scintillize -scintillometer -scintilloscope -scintillose -scintillous -scintillously -scintle -scintled -scintler -scintling -Scio -sciograph -sciography -sciographic -sciolism -sciolisms -sciolist -sciolistic -sciolists -sciolous -sciolto -sciomachy -sciomachiology -sciomancy -sciomantic -scion -scions -sciophilous -sciophyte -sciophobia -scioptic -sciopticon -scioptics -scioptric -sciosophy -sciosophies -sciosophist -Sciot -Sciota -scioterical -scioterique -sciotheism -sciotheric -sciotherical -sciotherically -Scioto -scious -scypha -scyphae -scyphate -scyphi -scyphi- -scyphiferous -scyphiform -scyphiphorous -scyphistoma -scyphistomae -scyphistomas -scyphistomoid -scyphistomous -scypho- -scyphoi -scyphomancy -Scyphomedusae -scyphomedusan -scyphomedusoid -scyphophore -Scyphophori -scyphophorous -scyphopolyp -scyphose -scyphostoma -Scyphozoa -scyphozoan -scyphula -scyphulus -scyphus -Scipio -scypphi -scirenga -scirocco -sciroccos -Scirophoria -Scirophorion -Scyros -Scirpus -scirrhi -scirrhogastria -scirrhoid -scirrhoma -scirrhosis -scirrhosity -scirrhous -scirrhus -scirrhuses -scirrosity -scirtopod -Scirtopoda -scirtopodous -sciscitation -scissel -scissible -scissil -scissile -scission -scissions -scissiparity -scissor -scissorbill -scissorbird -scissored -scissorer -scissor-fashion -scissor-grinder -scissoria -scissoring -scissorium -scissor-legs -scissorlike -scissorlikeness -scissors -scissorsbird -scissors-fashion -scissors-grinder -scissorsmith -scissors-shaped -scissors-smith -scissorstail -scissortail -scissor-tailed -scissor-winged -scissorwise -scissura -scissure -Scissurella -scissurellid -Scissurellidae -scissures -scyt -scytale -Scitaminales -Scitamineae -Scyth -scythe -scythe-armed -scythe-bearing -scythed -scythe-leaved -scytheless -scythelike -scytheman -scythes -scythe's -scythe-shaped -scythesmith -scythestone -scythework -Scythia -Scythian -Scythic -scything -Scythize -Scytho-aryan -Scytho-dravidian -Scytho-greek -Scytho-median -scytitis -scytoblastema -scytodepsic -Scytonema -Scytonemataceae -scytonemataceous -scytonematoid -scytonematous -Scytopetalaceae -scytopetalaceous -Scytopetalum -Scituate -sciurid -Sciuridae -sciurids -sciurine -sciurines -sciuroid -sciuroids -sciuromorph -Sciuromorpha -sciuromorphic -Sciuropterus -Sciurus -scivvy -scivvies -sclaff -sclaffed -sclaffer -sclaffers -sclaffert -sclaffing -sclaffs -Sclar -sclat -sclatch -sclate -Sclater -Sclav -Sclavonian -sclaw -sclent -scler -scler- -sclera -sclerae -scleral -scleranth -Scleranthaceae -Scleranthus -scleras -scleratogenous -sclere -sclerectasia -sclerectomy -sclerectomies -scleredema -sclereid -sclereids -sclerema -sclerencephalia -sclerenchyma -sclerenchymatous -sclerenchyme -sclererythrin -scleretinite -Scleria -scleriasis -sclerify -sclerification -sclerite -sclerites -scleritic -scleritis -sclerized -sclero- -sclerobase -sclerobasic -scleroblast -scleroblastema -scleroblastemic -scleroblastic -sclerocauly -sclerochorioiditis -sclerochoroiditis -scleroconjunctival -scleroconjunctivitis -sclerocornea -sclerocorneal -sclerodactyly -sclerodactylia -sclerodema -scleroderm -Scleroderma -Sclerodermaceae -Sclerodermata -Sclerodermatales -sclerodermatitis -sclerodermatous -Sclerodermi -sclerodermia -sclerodermic -sclerodermite -sclerodermitic -sclerodermitis -sclerodermous -sclerogen -Sclerogeni -sclerogenic -sclerogenoid -sclerogenous -scleroid -scleroiritis -sclerokeratitis -sclerokeratoiritis -scleroma -scleromas -scleromata -scleromeninx -scleromere -sclerometer -sclerometric -scleronychia -scleronyxis -sclero-oophoritis -sclero-optic -Scleropages -Scleroparei -sclerophyll -sclerophylly -sclerophyllous -sclerophthalmia -scleroprotein -sclerosal -sclerosarcoma -Scleroscope -sclerose -sclerosed -scleroseptum -scleroses -sclerosing -sclerosis -sclerosises -scleroskeletal -scleroskeleton -Sclerospora -sclerostenosis -Sclerostoma -sclerostomiasis -sclerotal -sclerote -sclerotia -sclerotial -sclerotic -sclerotica -sclerotical -scleroticectomy -scleroticochorioiditis -scleroticochoroiditis -scleroticonyxis -scleroticotomy -sclerotin -Sclerotinia -sclerotinial -sclerotiniose -sclerotioid -sclerotitic -sclerotitis -sclerotium -sclerotization -sclerotized -sclerotoid -sclerotome -sclerotomy -sclerotomic -sclerotomies -sclerous -scleroxanthin -sclerozone -scliff -sclim -sclimb -SCM -SCMS -SCO -scoad -scob -scobby -Scobey -scobicular -scobiform -scobs -scodgy -scoff -scoffed -scoffer -scoffery -scoffers -scoffing -scoffingly -scoffingstock -scofflaw -scofflaws -scoffs -Scofield -scog -scoggan -scogger -scoggin -scogginism -scogginist -scogie -scoinson -scoke -scolb -scold -scoldable -scolded -scoldenore -scolder -scolders -scolding -scoldingly -scoldings -scolds -scoleces -scoleciasis -scolecid -Scolecida -scoleciform -scolecite -scolecoid -scolecology -scolecophagous -scolecospore -scoley -scoleryng -Scoles -scolex -Scolia -scolices -scoliid -Scoliidae -Scolymus -scoliograptic -scoliokyposis -scolioma -scoliomas -scoliometer -scolion -scoliorachitic -scoliosis -scoliotic -scoliotone -scolite -scolytid -Scolytidae -scolytids -scolytoid -Scolytus -scollop -scolloped -scolloper -scolloping -scollops -scoloc -scolog -scolopaceous -Scolopacidae -scolopacine -Scolopax -Scolopendra -Scolopendrella -Scolopendrellidae -scolopendrelloid -scolopendrid -Scolopendridae -scolopendriform -scolopendrine -Scolopendrium -scolopendroid -scolopes -scolophore -scolopophore -scolops -Scomber -scomberoid -Scombresocidae -Scombresox -scombrid -Scombridae -scombriform -Scombriformes -scombrine -scombroid -Scombroidea -scombroidean -scombrone -scomfit -scomm -sconce -sconced -sconcer -sconces -sconcheon -sconcible -sconcing -Scone -scones -Scooba -scooch -scoon -scoop -scooped -scooper -scoopers -scoopful -scoopfulfuls -scoopfuls -scooping -scoopingly -scoop-net -SCOOPS -scoopsful -scoot -scooted -scooter -scooters -scooting -scoots -scop -scopa -scoparin -scoparium -scoparius -Scopas -scopate -scope -scoped -scopeless -scopelid -Scopelidae -scopeliform -scopelism -scopeloid -Scopelus -Scopes -scopet -scophony -scopy -scopic -Scopidae -scopiferous -scopiform -scopiformly -scopine -scoping -scopious -scopiped -scopol- -scopola -scopolamin -scopolamine -scopoleine -scopoletin -scopoline -scopone -scopophilia -scopophiliac -scopophilic -Scopp -scopperil -scops -scoptical -scoptically -scoptophilia -scoptophiliac -scoptophilic -scoptophobia -scopula -scopulae -Scopularia -scopularian -scopulas -scopulate -scopuliferous -scopuliform -scopuliped -Scopulipedes -scopulite -scopulous -scopulousness -Scopus -scorbuch -scorbute -scorbutic -scorbutical -scorbutically -scorbutize -scorbutus -scorce -scorch -scorched -scorcher -scorchers -scorches -scorching -scorchingly -scorchingness -scorchproof -scorchs -scordato -scordatura -scordaturas -scordature -scordium -score -scoreboard -scoreboards -scorebook -scorecard -scored -scorekeeper -scorekeeping -scoreless -scorepad -scorepads -scorer -scorers -scores -Scoresby -scoresheet -scoria -scoriac -scoriaceous -scoriae -scorify -scorification -scorified -scorifier -scorifies -scorifying -scoriform -scoring -scorings -scorious -scorkle -scorn -scorned -scorner -scorners -scornful -scornfully -scornfulness -scorny -Scornik -scorning -scorningly -scornproof -scorns -scorodite -Scorpaena -scorpaenid -Scorpaenidae -scorpaenoid -scorpene -scorper -Scorpidae -Scorpididae -Scorpii -Scorpiid -Scorpio -scorpioid -scorpioidal -Scorpioidea -Scorpion -Scorpiones -scorpionfish -scorpionfishes -scorpionfly -scorpionflies -scorpionic -scorpionid -Scorpionida -Scorpionidea -Scorpionis -scorpions -scorpion's -scorpionweed -scorpionwort -scorpios -Scorpiurus -Scorpius -scorse -scorser -scortation -scortatory -scorza -Scorzonera -SCOT -Scot. -scotal -scotale -Scotch -scotched -scotcher -Scotchery -scotches -Scotch-gaelic -scotch-hopper -Scotchy -Scotchify -Scotchification -Scotchiness -scotching -Scotch-Irish -Scotchman -scotchmen -Scotch-misty -Scotchness -scotch-tape -scotch-taped -scotch-taping -Scotchwoman -scote -Scoter -scoterythrous -scoters -scot-free -Scotia -scotias -Scotic -scotino -Scotism -Scotist -Scotistic -Scotistical -Scotize -Scotland -Scotlandwards -Scotney -scoto- -Scoto-allic -Scoto-britannic -Scoto-celtic -scotodinia -Scoto-english -Scoto-Gaelic -scotogram -scotograph -scotography -scotographic -Scoto-irish -scotoma -scotomas -scotomata -scotomatic -scotomatical -scotomatous -scotomy -scotomia -scotomic -Scoto-norman -Scoto-norwegian -scotophilia -scotophiliac -scotophobia -scotopia -scotopias -scotopic -Scoto-saxon -Scoto-scandinavian -scotoscope -scotosis -SCOTS -Scotsman -Scotsmen -Scotswoman -Scott -Scott-connected -Scottdale -Scotti -Scotty -scottice -Scotticism -Scotticize -Scottie -Scotties -Scottify -Scottification -Scottish -Scottisher -Scottish-irish -Scottishly -Scottishman -Scottishness -Scottown -Scotts -Scottsbluff -Scottsboro -Scottsburg -Scottsdale -Scottsmoor -Scottsville -Scottville -Scotus -scouch -scouk -scoundrel -scoundreldom -scoundrelish -scoundrelism -scoundrelly -scoundrels -scoundrel's -scoundrelship -scoup -scour -scourage -scoured -scourer -scourers -scouress -scourfish -scourfishes -scourge -scourged -scourger -scourgers -scourges -scourging -scourgingly -scoury -scouriness -scouring -scourings -scours -scourway -scourweed -scourwort -Scouse -scouses -Scout -scoutcraft -scoutdom -scouted -scouter -scouters -scouth -scouther -scouthered -scouthering -scouthers -scouthood -scouths -Scouting -scoutingly -scoutings -scoutish -scoutmaster -scoutmasters -scouts -scoutwatch -scove -scovel -scovy -Scoville -scovillite -scow -scowbank -scowbanker -scowder -scowdered -scowdering -scowders -scowed -scowing -scowl -scowled -scowler -scowlers -scowlful -scowling -scowlingly -scowlproof -scowls -scowman -scowmen -scows -scowther -SCP -SCPC -SCPD -SCR -scr- -scr. -scrab -Scrabble -scrabbled -scrabbler -scrabblers -scrabbles -scrabbly -scrabbling -scrabe -scraber -scrae -scraffle -scrag -scragged -scraggedly -scraggedness -scragger -scraggy -scraggier -scraggiest -scraggily -scragginess -scragging -scraggle -scraggled -scraggly -scragglier -scraggliest -scraggliness -scraggling -scrags -scray -scraich -scraiched -scraiching -scraichs -scraye -scraigh -scraighed -scraighing -scraighs -scraily -SCRAM -scramasax -scramasaxe -scramb -scramble -scramblebrained -scrambled -scramblement -scrambler -scramblers -scrambles -scrambly -scrambling -scramblingly -scram-handed -scramjet -scrammed -scramming -scrampum -scrams -scran -scranch -scrank -scranky -scrannel -scrannels -scranny -scrannier -scranniest -scranning -Scranton -scrap -scrapable -scrapbook -scrap-book -scrapbooks -scrape -scrapeage -scraped -scrape-finished -scrape-gut -scrapepenny -scraper -scraperboard -scrapers -scrapes -scrape-shoe -scrape-trencher -scrapheap -scrap-heap -scrapy -scrapie -scrapies -scrapiness -scraping -scrapingly -scrapings -scrapler -scraplet -scrapling -scrapman -scrapmonger -scrappage -scrapped -scrapper -scrappers -scrappet -scrappy -scrappier -scrappiest -scrappily -scrappiness -scrapping -scrappingly -scrapple -scrappler -scrapples -scraps -scrap's -scrapworks -scrat -Scratch -scratchable -scratchably -scratchback -scratchboard -scratchbrush -scratch-brush -scratchcard -scratchcarding -scratchcat -scratch-coated -scratched -scratcher -scratchers -scratches -scratchy -scratchier -scratchiest -scratchification -scratchily -scratchiness -scratching -scratchingly -scratchless -scratchlike -scratchman -scratchpad -scratch-pad -scratchpads -scratchpad's -scratch-penny -scratchproof -scratchweed -scratchwork -scrath -scratter -scrattle -scrattling -scrauch -scrauchle -scraunch -scraw -scrawk -scrawl -scrawled -scrawler -scrawlers -scrawly -scrawlier -scrawliest -scrawliness -scrawling -scrawls -scrawm -scrawny -scrawnier -scrawniest -scrawnily -scrawniness -scraze -screak -screaked -screaky -screaking -screaks -scream -screamed -screamer -screamers -screamy -screaminess -screaming -screamingly -screaming-meemies -screamproof -screams -screar -scree -screech -screechbird -screeched -screecher -screeches -screechy -screechier -screechiest -screechily -screechiness -screeching -screechingly -screech-owl -screed -screeded -screeding -screeds -screek -screel -screeman -screen -screenable -screenage -screencraft -screendom -screened -screener -screeners -screen-faced -screenful -screeny -screening -screenings -screenland -screenless -screenlike -screenman -screeno -screenplay -screenplays -Screens -screensman -screen-test -screen-wiper -screenwise -screenwork -screenwriter -screes -screet -screeve -screeved -screever -screeving -screich -screigh -screve -Screven -screver -screw -screwable -screwage -screw-back -screwball -screwballs -screwbarrel -screwbean -screw-bound -screw-capped -screw-chasing -screw-clamped -screw-cutting -screw-down -screwdrive -screw-driven -screwdriver -screwdrivers -screwed -screwed-up -screw-eyed -screwer -screwers -screwfly -screw-geared -screwhead -screwy -screwier -screwiest -screwiness -screwing -screwish -screwless -screw-lifted -screwlike -screwman -screwmatics -screwpile -screw-piled -screw-pin -screw-pine -screw-pitch -screwplate -screwpod -screw-propelled -screwpropeller -screws -screw-shaped -screwship -screw-slotting -screwsman -screwstem -screwstock -screw-stoppered -screw-threaded -screw-topped -screw-torn -screw-turned -screw-turning -screwup -screw-up -screwups -screwwise -screwworm -scrfchar -scry -Scriabin -scribable -scribacious -scribaciousness -scribal -scribals -scribanne -scribatious -scribatiousness -scribbet -scribblage -scribblative -scribblatory -scribble -scribbleable -scribbled -scribbledom -scribbleism -scribblemania -scribblemaniacal -scribblement -scribbleomania -scribbler -scribblers -scribbles -scribble-scrabble -scribbly -scribbling -scribblingly -Scribe -scribed -scriber -scribers -scribes -scribeship -scribing -scribism -Scribner -Scribners -scribophilous -scride -scried -scryer -scries -scrieve -scrieved -scriever -scrieves -scrieving -scriggle -scriggler -scriggly -scrying -scrike -scrim -scrime -scrimer -scrimy -scrimmage -scrimmaged -scrimmager -scrimmages -scrimmaging -scrimp -scrimped -scrimper -scrimpy -scrimpier -scrimpiest -scrimpily -scrimpiness -scrimping -scrimpingly -scrimpit -scrimply -scrimpness -scrimps -scrimption -scrims -scrimshander -scrimshandy -scrimshank -scrimshanker -scrimshaw -scrimshaws -scrimshon -scrimshorn -scrin -scrinch -scrine -scringe -scrinia -scriniary -scrinium -scrip -scripee -scripless -scrippage -Scripps -scrips -scrip-scrap -scripsit -Script -Script. -scripted -scripter -scripting -scription -scriptitious -scriptitiously -scriptitory -scriptive -scripto -scriptor -scriptory -scriptoria -scriptorial -scriptorium -scriptoriums -scripts -script's -scriptum -scriptural -Scripturalism -Scripturalist -Scripturality -scripturalize -scripturally -scripturalness -Scripturarian -Scripture -Scriptured -Scriptureless -scriptures -scripturiency -scripturient -Scripturism -Scripturist -scriptwriter -script-writer -scriptwriting -scripula -scripulum -scripuralistic -scrit -scritch -scritch-owl -scritch-scratch -scritch-scratching -scrite -scrithe -scritoire -scrivaille -scrivan -scrivano -scrive -scrived -scrivello -scrivelloes -scrivellos -Scriven -scrivener -scrivenery -scriveners -scrivenership -scrivening -scrivenly -Scrivenor -Scrivens -scriver -scrives -scriving -Scrivings -scrob -scrobble -scrobe -scrobicula -scrobicular -scrobiculate -scrobiculated -scrobicule -scrobiculus -scrobis -scrod -scroddled -scrodgill -scrods -scroff -scrofula -scrofularoot -scrofulas -scrofulaweed -scrofulide -scrofulism -scrofulitic -scrofuloderm -scrofuloderma -scrofulorachitic -scrofulosis -scrofulotuberculous -scrofulous -scrofulously -scrofulousness -scrog -Scrogan -scrogged -scroggy -scroggie -scroggier -scroggiest -Scroggins -scrogie -scrogs -scroyle -scroinoch -scroinogh -scrolar -scroll -scroll-cut -scrolled -scrollery -scrollhead -scrolly -scrolling -scroll-like -scrolls -scroll-shaped -scrollwise -scrollwork -scronach -scroo -scrooch -Scrooge -scrooges -scroop -scrooped -scrooping -scroops -scrootch -Scrope -Scrophularia -Scrophulariaceae -scrophulariaceous -scrota -scrotal -scrotectomy -scrotiform -scrotitis -scrotocele -scrotofemoral -scrotta -scrotum -scrotums -scrouge -scrouged -scrouger -scrouges -scrouging -scrounge -scrounged -scrounger -scroungers -scrounges -scroungy -scroungier -scroungiest -scrounging -scrout -scrow -scrub -scrubbable -scrubbed -scrubber -scrubbery -scrubbers -scrubby -scrubbier -scrubbiest -scrubbily -scrubbiness -scrubbing -scrubbing-brush -scrubbird -scrub-bird -scrubbly -scrubboard -scrubgrass -scrubland -scrublike -scrubs -scrub-up -scrubwoman -scrubwomen -scrubwood -scruf -scruff -scruffy -scruffier -scruffiest -scruffily -scruffiness -scruffle -scruffman -scruffs -scruft -scrum -scrummage -scrummaged -scrummager -scrummaging -scrummed -scrump -scrumpy -scrumple -scrumption -scrumptious -scrumptiously -scrumptiousness -scrums -scrunch -scrunched -scrunches -scrunchy -scrunching -scrunchs -scrunge -scrunger -scrunt -scrunty -scruple -scrupled -scrupleless -scrupler -scruples -scruplesome -scruplesomeness -scrupling -scrupula -scrupular -scrupuli -scrupulist -scrupulosity -scrupulosities -scrupulous -scrupulously -scrupulousness -scrupulum -scrupulus -scrush -scrutability -scrutable -scrutate -scrutation -scrutator -scrutatory -scrutinant -scrutinate -scrutineer -scrutiny -scrutinies -scrutiny-proof -scrutinisation -scrutinise -scrutinised -scrutinising -scrutinization -scrutinize -scrutinized -scrutinizer -scrutinizers -scrutinizes -scrutinizing -scrutinizingly -scrutinous -scrutinously -scruto -scrutoire -scruze -SCS -SCSA -SCSI -SCT -sctd -SCTS -SCU -SCUBA -scubas -SCUD -scuddaler -scuddawn -scudded -scudder -Scuddy -scuddick -scudding -scuddle -Scudery -scudi -scudler -scudo -scuds -scuff -scuffed -scuffer -scuffy -scuffing -scuffle -scuffled -scuffler -scufflers -scuffles -scuffly -scuffling -scufflingly -scuffs -scuft -scufter -scug -scuggery -sculch -sculduddery -sculdudderies -sculduggery -sculk -sculked -sculker -sculkers -sculking -sculks -scull -scullduggery -sculled -Sculley -sculler -scullery -sculleries -scullers -scullful -Scully -Scullin -sculling -scullion -scullionish -scullionize -scullions -scullionship -scullog -scullogue -sculls -sculp -sculp. -sculped -sculper -sculpin -sculping -sculpins -sculps -sculpsit -sculpt -sculpted -sculptile -sculpting -sculptitory -sculptograph -sculptography -Sculptor -Sculptorid -Sculptoris -sculptors -sculptor's -sculptress -sculptresses -sculpts -sculptural -sculpturally -sculpturation -sculpture -sculptured -sculpturer -sculptures -sculpturesque -sculpturesquely -sculpturesqueness -sculpturing -sculsh -scult -scum -scumber -scumble -scumbled -scumbles -scumbling -scumboard -scumfish -scumless -scumlike -scummed -scummer -scummers -scummy -scummier -scummiest -scumminess -scumming -scumproof -scums -scun -scuncheon -scunder -scunge -scungy -scungili -scungilli -scunner -scunnered -scunnering -scunners -Scunthorpe -scup -scupful -scuppaug -scuppaugs -scupper -scuppered -scuppering -scuppernong -scuppers -scuppet -scuppit -scuppler -scups -scur -scurdy -scurf -scurfer -scurfy -scurfier -scurfiest -scurfily -scurfiness -scurflike -scurfs -scurling -Scurlock -scurry -scurried -scurrier -scurries -scurrying -scurril -scurrile -scurrilist -scurrility -scurrilities -scurrilize -scurrilous -scurrilously -scurrilousness -S-curve -scurvy -scurvied -scurvier -scurvies -scurviest -scurvily -scurviness -scurvish -scurvyweed -scusation -scuse -scusin -scut -scuta -scutage -scutages -scutal -Scutari -scutate -scutated -scutatiform -scutation -scutch -scutched -scutcheon -scutcheoned -scutcheonless -scutcheonlike -scutcheons -scutcheonwise -scutcher -scutchers -scutches -scutching -scutchs -scute -scutel -scutella -scutellae -scutellar -Scutellaria -scutellarin -scutellate -scutellated -scutellation -scutellerid -Scutelleridae -scutelliform -scutelligerous -scutelliplantar -scutelliplantation -scutellum -scutes -Scuti -scutibranch -Scutibranchia -scutibranchian -scutibranchiate -scutifer -scutiferous -scutiform -scutiger -Scutigera -scutigeral -Scutigeridae -scutigerous -scutiped -scuts -Scutt -scutta -scutter -scuttered -scuttering -scutters -scutty -scuttle -scuttlebutt -scuttled -scuttleful -scuttleman -scuttler -scuttles -scuttling -scuttock -scutula -scutular -scutulate -scutulated -scutulum -Scutum -scuz -scuzzy -scuzzier -SCX -SD -sd. -SDA -SDB -SDCD -SDD -sdeath -'sdeath -sdeign -SDF -SDH -SDI -SDIO -SDIS -SDL -SDLC -SDM -SDN -SDO -SDOC -SDP -SDR -SDRC -SDRs -sdrucciola -SDS -SDSC -SDU -sdump -SDV -SE -se- -sea -seabag -seabags -seabank -sea-bank -sea-bathed -seabeach -seabeaches -sea-bean -seabeard -sea-beast -sea-beat -sea-beaten -Seabeck -seabed -seabeds -Seabee -Seabees -seaberry -seabird -sea-bird -seabirds -Seabiscuit -seaboard -seaboards -sea-boat -seaboot -seaboots -seaborderer -Seaborg -sea-born -seaborne -sea-borne -seabound -sea-bounded -sea-bounding -sea-bred -sea-breeze -sea-broke -Seabrook -Seabrooke -sea-built -Seabury -sea-calf -seacannie -sea-captain -sea-card -seacatch -sea-circled -Seacliff -sea-cliff -sea-coal -seacoast -sea-coast -seacoasts -seacoast's -seacock -sea-cock -seacocks -sea-compelling -seaconny -sea-convulsing -sea-cow -seacraft -seacrafty -seacrafts -seacross -seacunny -sea-cut -Seaddon -sea-deep -Seaden -sea-deserted -sea-devil -sea-divided -seadog -sea-dog -seadogs -Seadon -sea-dragon -Seadrift -sea-driven -seadrome -seadromes -sea-eagle -sea-ear -sea-elephant -sea-encircled -seafardinger -seafare -seafarer -seafarers -seafaring -sea-faring -seafarings -sea-fern -sea-fight -seafighter -sea-fighter -sea-fish -seaflood -seafloor -seafloors -seaflower -sea-flower -seafoam -sea-foam -seafolk -seafood -sea-food -seafoods -Seaford -sea-form -Seaforth -Seaforthia -Seafowl -sea-fowl -seafowls -sea-framing -seafront -sea-front -seafronts -sea-gait -sea-gate -Seaghan -Seagirt -sea-girt -sea-god -sea-goddess -seagoer -seagoing -sea-going -Seagoville -sea-gray -Seagram -sea-grape -sea-grass -Seagrave -Seagraves -sea-green -seagull -sea-gull -seagulls -seah -sea-heath -sea-hedgehog -sea-hen -sea-holly -sea-holm -seahorse -sea-horse -seahound -Seahurst -sea-island -seak -sea-kale -seakeeping -sea-kindly -seakindliness -sea-kindliness -sea-king -seal -sealable -sea-lane -sealant -sealants -sea-lawyer -seal-brown -sealch -Seale -sealed -sealed-beam -sea-legs -sealer -sealery -sealeries -sealers -sealess -sealet -sealette -sealevel -sea-level -sealflower -Sealy -Sealyham -sealike -sealine -sea-line -sealing -sealing-wax -sea-lion -sealkie -sealless -seallike -sea-lost -sea-louse -sea-loving -seal-point -seals -sealskin -sealskins -Sealston -sealwort -seam -sea-maid -sea-maiden -Seaman -seamancraft -seamanite -seamanly -seamanlike -seamanlikeness -seamanliness -seamanship -seamanships -seamark -sea-mark -seamarks -Seamas -seambiter -seamed -seamen -seamer -seamers -seamew -Seami -seamy -seamier -seamiest -seaminess -seaming -seamy-sided -seamless -seamlessly -seamlessness -seamlet -seamlike -sea-monk -sea-monster -seamost -seamount -seamounts -sea-mouse -seamrend -seam-rent -seam-ripped -seam-ript -seamrog -seams -seamster -seamsters -seamstress -seamstresses -Seamus -Sean -Seana -seance -seances -sea-nymph -Seanor -sea-otter -sea-otter's-cabbage -SEAP -sea-packed -sea-parrot -sea-pie -seapiece -sea-piece -seapieces -sea-pike -sea-pink -seaplane -sea-plane -seaplanes -sea-poacher -seapoose -seaport -seaports -seaport's -seapost -sea-potent -sea-purse -seaquake -sea-quake -seaquakes -sear -sea-racing -sea-raven -Searby -searce -searcer -search -searchable -searchableness -searchant -searched -searcher -searcheress -searcherlike -searchers -searchership -searches -searchful -searching -searchingly -searchingness -searchings -searchless -searchlight -searchlights -searchment -Searcy -searcloth -seared -searedness -searer -searest -seary -searing -searingly -Searle -Searles -searlesite -searness -searobin -sea-robin -sea-room -sea-rounded -sea-rover -searoving -sea-roving -Sears -Searsboro -Searsmont -Searsport -sea-run -sea-running -SEAS -sea-sailing -sea-salt -Seasan -sea-sand -sea-saw -seascape -sea-scape -seascapes -seascapist -sea-scented -sea-scourged -seascout -seascouting -seascouts -sea-serpent -sea-service -seashell -sea-shell -seashells -seashine -seashore -sea-shore -seashores -seashore's -sea-shouldering -seasick -sea-sick -seasickness -seasicknesses -Seaside -sea-side -seasider -seasides -sea-slug -seasnail -sea-snail -sea-snake -sea-snipe -Season -seasonable -seasonableness -seasonably -seasonal -seasonality -seasonally -seasonalness -seasoned -seasonedly -seasoner -seasoners -seasoning -seasoninglike -seasonings -seasonless -seasons -sea-spider -seastar -sea-star -seastrand -seastroke -sea-surrounded -sea-swallow -sea-swallowed -seat -seatang -seatbelt -seated -seater -seaters -seathe -seating -seatings -seatless -seatmate -seatmates -seat-mile -SEATO -Seaton -Seatonville -sea-torn -sea-tossed -sea-tost -seatrain -seatrains -sea-traveling -seatron -sea-trout -seats -seatsman -seatstone -Seattle -seatwork -seatworks -sea-urchin -seave -Seavey -Seaver -seavy -Seaview -Seavir -seaway -sea-way -seaways -seawall -sea-wall -sea-walled -seawalls -seawan -sea-wandering -seawans -seawant -seawants -seaward -seawardly -seawards -seaware -sea-ware -seawares -sea-washed -seawater -sea-water -seawaters -sea-weary -seaweed -seaweedy -seaweeds -sea-wide -seawife -sea-wildered -sea-wolf -seawoman -seaworn -seaworthy -seaworthiness -sea-wrack -sea-wrecked -seax -Seba -sebacate -sebaceous -sebaceousness -sebacic -sebago -sebait -se-baptism -se-baptist -sebasic -Sebastian -sebastianite -Sebastiano -Sebastichthys -Sebastien -sebastine -Sebastodes -Sebastopol -sebat -sebate -Sebbie -Sebec -Sebeka -sebesten -Sebewaing -sebi- -sebiferous -sebific -sebilla -sebiparous -sebkha -Seboeis -Seboyeta -Seboim -sebolith -seborrhagia -seborrhea -seborrheal -seborrheic -seborrhoea -seborrhoeic -seborrhoic -Sebree -Sebright -Sebring -SEbS -sebum -sebums -sebundy -SEC -sec. -secability -secable -Secale -secalin -secaline -secalose -SECAM -Secamone -secancy -secant -secantly -secants -secateur -secateurs -Secaucus -Secchi -secchio -secco -seccos -seccotine -secede -seceded -Seceder -seceders -secedes -seceding -secern -secerned -secernent -secerning -secernment -secerns -secesh -secesher -secess -Secessia -Secession -Secessional -secessionalist -Secessiondom -secessioner -secessionism -secessionist -secessionists -secessions -sech -Sechium -Sechuana -secy -seck -Seckel -seclude -secluded -secludedly -secludedness -secludes -secluding -secluse -seclusion -seclusionist -seclusions -seclusive -seclusively -seclusiveness -SECNAV -secno -Seco -secobarbital -secodont -secohm -secohmmeter -Seconal -second -secondar -secondary -secondaries -secondarily -secondariness -second-best -second-class -second-cut -second-degree -second-drawer -seconde -seconded -seconder -seconders -secondes -second-feet -second-first -second-floor -second-foot -second-growth -second-guess -second-guesser -secondhand -second-hand -secondhanded -secondhandedly -secondhandedness -second-handedness -secondi -second-in-command -secondine -secondines -seconding -secondly -secondment -secondness -secondo -second-rate -second-rateness -secondrater -second-rater -seconds -secondsighted -second-sighted -secondsightedness -second-sightedness -second-story -second-touch -Secor -secos -secours -secpar -secpars -secque -secration -secre -secrecy -secrecies -Secrest -secret -Secreta -secretage -secretagogue -secretaire -secretar -secretary -secretarial -secretarian -Secretariat -secretariate -secretariats -secretaries -secretaries-general -secretary-general -secretary's -secretaryship -secretaryships -secretary-treasurer -secrete -secreted -secreter -secretes -secretest -secret-false -secretin -secreting -secretins -secretion -secretional -secretionary -secretions -secretitious -secretive -secretively -secretivelies -secretiveness -secretly -secretmonger -secretness -secreto -secreto-inhibitory -secretomotor -secretor -secretory -secretors -secrets -secret-service -secretum -Secs -sect -sect. -Sectary -sectarial -sectarian -sectarianise -sectarianised -sectarianising -sectarianism -sectarianize -sectarianized -sectarianizing -sectarianly -sectarians -sectaries -sectarism -sectarist -sectator -sectile -sectility -section -sectional -sectionalisation -sectionalise -sectionalised -sectionalising -sectionalism -sectionalist -sectionality -sectionalization -sectionalize -sectionalized -sectionalizing -sectionally -sectionary -sectioned -sectioning -sectionist -sectionize -sectionized -sectionizing -sections -sectioplanography -sectism -sectist -sectiuncle -sective -sector -sectoral -sectored -sectorial -sectoring -sectors -sector's -sectroid -sects -sect's -sectuary -sectwise -secular -secularisation -secularise -secularised -seculariser -secularising -secularism -secularist -secularistic -secularists -secularity -secularities -secularization -secularize -secularized -secularizer -secularizers -secularizes -secularizing -secularly -secularness -seculars -seculum -secund -Secunda -Secundas -secundate -secundation -Secunderabad -secundiflorous -secundigravida -secundine -secundines -secundipara -secundiparity -secundiparous -secundly -secundogeniture -secundoprimary -secundum -secundus -securable -securableness -securance -secure -secured -secureful -securely -securement -secureness -securer -securers -secures -securest -securi- -securicornate -securifer -Securifera -securiferous -securiform -Securigera -securigerous -securing -securings -securitan -security -securities -secus -secutor -SED -Seda -Sedaceae -Sedalia -Sedan -Sedang -sedanier -sedans -sedarim -sedat -sedate -sedated -sedately -sedateness -sedater -sedates -sedatest -sedating -sedation -sedations -sedative -sedatives -Sedberry -Sedda -Seddon -Sedecias -sedent -sedentary -Sedentaria -sedentarily -sedentariness -sedentation -Seder -seders -sederunt -sederunts -sed-festival -sedge -sedged -sedgelike -Sedgemoor -sedges -Sedgewake -Sedgewick -Sedgewickville -Sedgewinn -sedgy -sedgier -sedgiest -sedging -Sedgwick -sedigitate -sedigitated -sedile -sedilia -sedilium -sediment -sedimental -sedimentary -sedimentaries -sedimentarily -sedimentate -sedimentation -sedimentations -sedimented -sedimenting -sedimentology -sedimentologic -sedimentological -sedimentologically -sedimentologist -sedimentous -sediments -sediment's -sedimetric -sedimetrical -sedition -seditionary -seditionist -seditionists -sedition-proof -seditions -seditious -seditiously -seditiousness -sedjadeh -Sedley -Sedlik -Sedona -sedovic -Sedrah -Sedrahs -Sedroth -seduce -seduceability -seduceable -seduced -seducee -seducement -seducer -seducers -seduces -seducible -seducing -seducingly -seducive -seduct -seduction -seductionist -seduction-proof -seductions -seductive -seductively -seductiveness -seductress -seductresses -sedulity -sedulities -sedulous -sedulously -sedulousness -Sedum -sedums -See -seeable -seeableness -seeably -Seebeck -see-bright -seecatch -seecatchie -seecawk -seech -seechelt -Seed -seedage -seedball -seedbed -seedbeds -seedbird -seedbox -seedcake -seed-cake -seedcakes -seedcase -seedcases -seed-corn -seedeater -seeded -Seeder -seeders -seedful -seedgall -seedy -seedier -seediest -seedily -seediness -seeding -seedings -seedkin -seed-lac -seedleaf -seedless -seedlessness -seedlet -seedlike -seedling -seedlings -seedling's -seedlip -seed-lip -Seedman -seedmen -seedness -seed-pearl -seedpod -seedpods -seeds -seedsman -seedsmen -seed-snipe -seedstalk -seedster -seedtime -seed-time -seedtimes -see-er -seege -Seeger -see-ho -seeing -seeingly -seeingness -seeings -seek -seeker -Seekerism -seekers -seeking -Seekonk -seeks -seek-sorrow -Seel -Seeland -seeled -Seeley -seelful -Seely -seelily -seeliness -seeling -Seelyville -seels -Seem -Seema -seemable -seemably -seemed -seemer -seemers -seeming -seemingly -seemingness -seemings -seemless -seemly -seemlier -seemliest -seemlihead -seemlily -seemliness -seems -Seen -Seena -seenie -seenil -seenu -seep -seepage -seepages -seeped -seepy -seepier -seepiest -seeping -seepproof -seeps -seepweed -seer -seerband -seercraft -seeress -seeresses -seerfish -seer-fish -seerhand -seerhood -seerlike -seerpaw -seers -seership -seersucker -seersuckers -sees -seesaw -seesawed -seesawiness -seesawing -seesaws -seesee -Seessel -seethe -seethed -seether -seethes -seething -seethingly -see-through -Seeto -seetulputty -seewee -Sefekhet -Seferiades -Seferis -Seffner -Seften -Sefton -Seftton -seg -Segal -Segalman -segar -segathy -segetal -seggar -seggard -seggars -segged -seggy -seggio -seggiola -seggrom -seghol -segholate -Seginus -segment -segmental -segmentalize -segmentally -segmentary -segmentate -segmentation -segmentations -segmentation's -segmented -segmenter -segmenting -segmentize -segments -Segner -Segni -segno -segnos -sego -segol -segolate -segos -segou -Segovia -Segre -segreant -segregable -segregant -segregate -segregated -segregatedly -segregatedness -segregateness -segregates -segregating -segregation -segregational -segregationist -segregationists -segregations -segregative -segregator -segs -segue -segued -segueing -seguendo -segues -seguidilla -seguidillas -Seguin -seguing -Segundo -Segura -sehyo -SEI -sey -Seiber -Seibert -seybertite -Seibold -seicento -seicentos -seiche -Seychelles -seiches -Seid -Seidel -seidels -Seiden -Seidler -Seidlitz -Seidule -Seif -seifs -seige -Seigel -Seigler -seigneur -seigneurage -seigneuress -seigneury -seigneurial -seigneurs -seignior -seigniorage -seignioral -seignioralty -seigniory -seigniorial -seigniories -seigniority -seigniors -seigniorship -seignorage -seignoral -seignory -seignorial -seignories -seignorize -Seyhan -Seiyuhonto -Seiyukai -seilenoi -seilenos -Seyler -Seiling -seimas -Seymeria -Seymour -Seine -seined -Seine-et-Marne -Seine-et-Oise -Seine-Maritime -seiner -seiners -seines -Seine-Saint-Denis -seining -seiren -seir-fish -seirospore -seirosporic -seis -Seys -seisable -seise -seised -seiser -seisers -seises -Seishin -seisin -seising -seis-ing -seisings -seisins -seism -seismal -seismatical -seismetic -seismic -seismical -seismically -seismicity -seismism -seismisms -seismo- -seismochronograph -seismogram -seismograms -seismograph -seismographer -seismographers -seismography -seismographic -seismographical -seismographs -seismol -seismology -seismologic -seismological -seismologically -seismologist -seismologists -seismologue -seismometer -seismometers -seismometry -seismometric -seismometrical -seismometrograph -seismomicrophone -seismoscope -seismoscopic -seismotectonic -seismotherapy -seismotic -seisms -seisor -seisors -Seyssel -Seistan -seisure -seisures -seit -Seiter -seity -Seitz -Seiurus -seizable -seize -seized -seizer -seizers -seizes -seizin -seizing -seizings -seizins -seizor -seizors -seizure -seizures -seizure's -sejant -sejant-erect -Sejanus -sejeant -sejeant-erect -sejero -Sejm -sejoin -sejoined -sejour -sejugate -sejugous -sejunct -sejunction -sejunctive -sejunctively -sejunctly -Seka -Sekane -Sekani -sekar -Seker -sekere -Sekhmet -Sekhwan -Sekyere -Sekiu -Seko -Sekofski -Sekondi -sekos -Sekt -SEL -Sela -selachian -Selachii -selachoid -Selachoidei -Selachostome -Selachostomi -selachostomous -seladang -seladangs -Selaginaceae -Selaginella -Selaginellaceae -selaginellaceous -selagite -Selago -Selah -selahs -selamin -selamlik -selamliks -selander -Selangor -selaphobia -Selassie -selbergite -Selby -Selbyville -Selbornian -selcouth -seld -Selda -Seldan -Selden -seldom -seldomcy -seldomer -seldomly -seldomness -Seldon -seldor -seldseen -Seldun -sele -select -selectable -selectance -selected -selectedly -selectee -selectees -selecting -selection -selectional -selectionism -selectionist -selectionists -selections -selection's -selective -selective-head -selectively -selectiveness -selectivity -selectivitysenescence -selectly -selectman -selectmen -selectness -selector -selectors -selector's -Selectric -selects -selectus -Selemas -Selemnus -selen- -Selena -selenate -selenates -Selene -Selenga -selenian -seleniate -selenic -Selenicereus -selenide -Selenidera -selenides -seleniferous -selenigenous -selenio- -selenion -selenious -Selenipedium -selenite -selenites -selenitic -selenitical -selenitiferous -selenitish -selenium -seleniums -seleniuret -seleno- -selenobismuthite -selenocentric -selenodesy -selenodont -Selenodonta -selenodonty -selenograph -selenographer -selenographers -selenography -selenographic -selenographical -selenographically -selenographist -selenolatry -selenolog -selenology -selenological -selenologist -selenomancy -selenomorphology -selenoscope -selenosis -selenotropy -selenotropic -selenotropism -selenous -selensilver -selensulphur -Seler -Selestina -Seleta -seletar -selety -Seleucia -Seleucian -Seleucid -Seleucidae -Seleucidan -Seleucidean -Seleucidian -Seleucidic -self -self- -self-abandon -self-abandoned -self-abandoning -self-abandoningly -self-abandonment -self-abased -self-abasement -self-abasing -self-abdication -self-abhorrence -self-abhorring -self-ability -self-abnegating -self-abnegation -self-abnegatory -self-abominating -self-abomination -self-absorbed -self-absorption -self-abuse -self-abuser -self-accorded -self-accusation -self-accusative -self-accusatory -self-accused -self-accuser -self-accusing -self-acknowledged -self-acquaintance -self-acquainter -self-acquired -self-acquisition -self-acquitted -self-acted -self-acting -self-action -self-active -self-activity -self-actor -self-actualization -self-actualizing -self-actuating -self-adapting -self-adaptive -self-addiction -self-addressed -self-adhesion -self-adhesive -selfadjoint -self-adjoint -self-adjustable -self-adjusting -self-adjustment -self-administer -self-administered -self-administering -self-admiration -self-admired -self-admirer -self-admiring -self-admission -self-adorer -self-adorned -self-adorning -self-adornment -self-adulation -self-advanced -self-advancement -self-advancer -self-advancing -self-advantage -self-advantageous -self-advertise -self-advertisement -self-advertiser -self-advertising -self-affair -self-affected -self-affecting -self-affectionate -self-affirmation -self-afflicting -self-affliction -self-afflictive -self-affrighted -self-agency -self-aggrandized -self-aggrandizement -self-aggrandizing -self-aid -self-aim -self-alighing -self-aligning -self-alignment -self-alinement -self-alining -self-amendment -self-amplifier -self-amputation -self-amusement -self-analysis -self-analytical -self-analyzed -self-anatomy -self-angry -self-annealing -self-annihilated -self-annihilation -self-annulling -self-answering -self-antithesis -self-apparent -self-applauding -self-applause -self-applausive -self-application -self-applied -self-applying -self-appointed -self-appointment -self-appreciating -self-appreciation -self-approbation -self-approval -self-approved -self-approver -self-approving -self-arched -self-arching -self-arising -self-asserting -self-assertingly -self-assertion -self-assertive -self-assertively -self-assertiveness -self-assertory -self-assigned -self-assumed -self-assuming -self-assumption -self-assurance -self-assured -self-assuredness -self-attachment -self-attracting -self-attraction -self-attractive -self-attribution -self-auscultation -self-authority -self-authorized -self-authorizing -self-aware -self-awareness -self-bailing -self-balanced -self-banished -self-banishment -self-baptizer -self-basting -self-beauty -self-beautiful -self-bedizenment -self-befooled -self-begetter -self-begotten -self-beguiled -self-being -self-belief -self-benefit -self-benefiting -self-besot -self-betrayal -self-betrayed -self-betraying -self-betrothed -self-bias -self-binder -self-binding -self-black -self-blame -self-blamed -self-blessed -self-blind -self-blinded -self-blinding -self-blood -self-boarding -self-boasted -self-boasting -self-boiled -self-bored -self-born -self-buried -self-burning -self-called -self-canceled -self-cancelled -self-canting -self-capacity -self-captivity -self-care -self-castigating -self-castigation -self-catalysis -self-catalyst -self-catering -self-causation -self-caused -self-center -self-centered -self-centeredly -self-centeredness -self-centering -self-centerment -self-centralization -self-centration -self-centred -self-centredly -self-centredness -self-chain -self-changed -self-changing -self-charging -self-charity -self-chastise -self-chastised -self-chastisement -self-chastising -self-cheatery -self-checking -self-chosen -self-christened -selfcide -self-clamp -self-cleaning -self-clearance -self-closed -self-closing -self-cocker -self-cocking -self-cognition -self-cognizably -self-cognizance -self-coherence -self-coiling -self-collected -self-collectedness -self-collection -self-color -self-colored -self-colour -self-coloured -self-combating -self-combustion -self-command -self-commande -self-commendation -self-comment -self-commissioned -self-commitment -self-committal -self-committing -self-commune -self-communed -self-communication -self-communicative -self-communing -self-communion -self-comparison -self-compassion -self-compatible -self-compensation -self-competition -self-complacence -self-complacency -self-complacent -self-complacential -self-complacently -self-complaisance -self-completion -self-composed -self-composedly -self-composedness -self-comprehending -self-comprised -self-conceit -self-conceited -self-conceitedly -self-conceitedness -self-conceived -self-concentered -self-concentrated -self-concentration -self-concept -self-concern -self-concerned -self-concerning -self-concernment -self-condemnable -self-condemnant -self-condemnation -self-condemnatory -self-condemned -self-condemnedly -self-condemning -self-condemningly -self-conditioned -self-conditioning -self-conduct -self-confessed -self-confession -self-confidence -self-confident -self-confidently -self-confiding -self-confinement -self-confining -self-conflict -self-conflicting -self-conformance -self-confounding -self-confuted -self-congratulating -self-congratulation -self-congratulatory -self-conjugate -self-conjugately -self-conjugation -self-conquest -self-conscious -self-consciously -self-consciousness -self-consecration -self-consequence -self-consequent -self-conservation -self-conservative -self-conserving -self-consideration -self-considerative -self-considering -self-consistency -self-consistent -self-consistently -self-consoling -self-consolingly -self-constituted -self-constituting -self-consultation -self-consumed -self-consuming -self-consumption -self-contained -self-containedly -self-containedness -self-containing -self-containment -self-contaminating -self-contamination -self-contemner -self-contemplation -self-contempt -self-content -self-contented -self-contentedly -self-contentedness -self-contentment -self-contracting -self-contraction -self-contradicter -self-contradicting -self-contradiction -self-contradictory -self-control -self-controlled -self-controller -self-controlling -self-convened -self-converse -self-convicted -self-convicting -self-conviction -self-cooking -self-cooled -self-correcting -self-correction -self-corrective -self-correspondent -self-corresponding -self-corrupted -self-counsel -self-coupler -self-covered -self-cozening -self-created -self-creating -self-creation -self-creative -self-credit -self-credulity -self-cremation -self-critical -self-critically -self-criticism -self-cruel -self-cruelty -self-cultivation -self-culture -self-culturist -self-cure -self-cutting -self-damnation -self-danger -self-deaf -self-debasement -self-debasing -self-debate -self-deceit -self-deceitful -self-deceitfulness -self-deceived -self-deceiver -self-deceiving -self-deception -self-deceptious -self-deceptive -self-declared -self-declaredly -self-dedicated -self-dedication -self-defeated -self-defeating -self-defence -self-defencive -self-defended -self-defense -self-defensive -self-defensory -self-defining -self-definition -self-deflated -self-deflation -self-degradation -self-deifying -self-dejection -self-delation -self-delight -self-delighting -self-deliverer -self-delivery -self-deluded -self-deluder -self-deluding -self-delusion -self-demagnetizing -self-denial -self-denied -self-deniedly -self-denier -self-denying -self-denyingly -self-dependence -self-dependency -self-dependent -self-dependently -self-depending -self-depraved -self-deprecating -self-deprecatingly -self-deprecation -self-depreciating -self-depreciation -self-depreciative -self-deprivation -self-deprived -self-depriving -self-derived -self-desertion -self-deserving -self-design -self-designer -self-desirable -self-desire -self-despair -self-destadv -self-destroyed -self-destroyer -self-destroying -self-destruction -self-destructive -self-destructively -self-detaching -self-determination -self-determined -self-determining -self-determinism -self-detraction -self-developing -self-development -self-devised -self-devoted -self-devotedly -self-devotedness -self-devotement -self-devoting -self-devotion -self-devotional -self-devouring -self-dialog -self-dialogue -self-differentiating -self-differentiation -self-diffidence -self-diffident -self-diffusion -self-diffusive -self-diffusively -self-diffusiveness -self-digestion -self-dilated -self-dilation -self-diminishment -self-direct -self-directed -self-directing -self-direction -self-directive -self-director -self-diremption -self-disapprobation -self-disapproval -self-discernment -self-discharging -self-discipline -self-disciplined -self-disclosed -self-disclosing -self-disclosure -self-discoloration -self-discontented -self-discovered -self-discovery -self-discrepant -self-discrepantly -self-discrimination -self-disdain -self-disengaging -self-disgrace -self-disgraced -self-disgracing -self-disgust -self-dislike -self-disliked -self-disparagement -self-disparaging -self-dispatch -self-display -self-displeased -self-displicency -self-disposal -self-dispraise -self-disquieting -self-dissatisfaction -self-dissatisfied -self-dissecting -self-dissection -self-disservice -self-disserving -self-dissociation -self-dissolution -self-dissolved -self-distinguishing -self-distributing -self-distrust -self-distrustful -self-distrusting -self-disunity -self-divided -self-division -self-doctrine -selfdom -self-dominance -self-domination -self-dominion -selfdoms -self-donation -self-doomed -self-dosage -self-doubt -self-doubting -self-dramatization -self-dramatizing -self-drawing -self-drinking -self-drive -self-driven -self-dropping -self-drown -self-dual -self-dualistic -self-dubbed -self-dumping -self-duplicating -self-duplication -self-ease -self-easing -self-eating -selfed -self-educated -self-education -self-effacement -selfeffacing -self-effacing -self-effacingly -self-effacingness -self-effacive -self-effort -self-elaborated -self-elaboration -self-elation -self-elect -self-elected -self-election -self-elective -self-emitted -self-emolument -self-employed -self-employer -self-employment -self-emptying -self-emptiness -self-enamored -self-enamoured -self-enclosed -self-endeared -self-endearing -self-endearment -self-energy -self-energizing -self-enforcing -self-engrossed -self-engrossment -self-enjoyment -self-enriching -self-enrichment -self-entertaining -self-entertainment -self-entity -self-erected -self-escape -self-essence -self-essentiated -self-esteem -self-esteeming -self-esteemingly -self-estimate -self-estimation -self-estrangement -self-eternity -self-evacuation -self-evaluation -self-evidence -self-evidencing -self-evidencingly -self-evident -self-evidential -self-evidentism -self-evidently -self-evidentness -self-evolution -self-evolved -self-evolving -self-exaggerated -self-exaggeration -self-exaltation -self-exaltative -self-exalted -self-exalting -self-examinant -self-examination -self-examiner -self-examining -self-example -self-excellency -self-excitation -self-excite -self-excited -self-exciter -self-exciting -self-exclusion -self-exculpation -self-excuse -self-excused -self-excusing -self-executing -self-exertion -self-exhibited -self-exhibition -self-exile -self-exiled -self-exist -self-existence -self-existent -self-existing -self-expanded -self-expanding -self-expansion -self-expatriation -self-experience -self-experienced -self-explained -self-explaining -self-explanation -self-explanatory -self-explication -self-exploited -self-exploiting -self-exposed -self-exposing -self-exposure -self-expression -self-expressive -self-expressiveness -self-extermination -self-extolled -self-exultation -self-exulting -self-faced -self-fame -self-farming -self-fearing -self-fed -self-feed -self-feeder -self-feeding -self-feeling -self-felicitation -self-felony -self-fermentation -self-fertile -self-fertility -self-fertilization -self-fertilize -self-fertilized -self-fertilizer -self-figure -self-figured -self-filler -self-filling -self-fitting -self-flagellating -self-flagellation -self-flattered -self-flatterer -self-flattery -self-flattering -self-flowing -self-fluxing -self-focused -self-focusing -self-focussed -self-focussing -self-folding -self-fondest -self-fondness -self-forbidden -self-forgetful -self-forgetfully -self-forgetfulness -self-forgetting -self-forgettingly -self-formation -self-formed -self-forsaken -self-fountain -self-friction -self-frighted -self-fruitful -self-fruition -selfful -self-fulfilling -self-fulfillment -self-fulfilment -selffulness -self-furnished -self-furring -self-gaging -self-gain -self-gathered -self-gauging -self-generated -self-generating -self-generation -self-generative -self-given -self-giving -self-glazed -self-glazing -self-glory -self-glorification -self-glorified -self-glorifying -self-glorying -self-glorious -self-good -self-gotten -self-govern -self-governed -self-governing -self-government -self-gracious -self-gratification -self-gratulating -self-gratulatingly -self-gratulation -self-gratulatory -self-guard -self-guarded -self-guidance -self-guilty -self-guiltiness -self-guiltless -self-gullery -self-hammered -self-hang -self-hardened -self-hardening -self-harming -self-hate -self-hating -self-hatred -selfheal -self-heal -self-healing -selfheals -self-heating -self-help -self-helpful -self-helpfulness -self-helping -self-helpless -self-heterodyne -self-hid -self-hidden -self-hypnosis -self-hypnotic -self-hypnotism -selfhypnotization -self-hypnotization -self-hypnotized -self-hitting -self-holiness -self-homicide -self-honored -self-honoured -selfhood -self-hood -selfhoods -self-hope -self-humbling -self-humiliating -self-humiliation -self-idea -self-identical -self-identification -self-identity -self-idolater -self-idolatry -self-idolized -self-idolizing -self-ignite -self-ignited -self-igniting -self-ignition -self-ignorance -self-ignorant -self-ill -self-illumined -self-illustrative -self-image -self-imitation -self-immolating -self-immolation -self-immunity -self-immurement -self-immuring -self-impairable -self-impairing -self-impartation -self-imparting -self-impedance -self-importance -self-important -self-importantly -self-imposed -self-imposture -self-impotent -self-impregnated -self-impregnating -self-impregnation -self-impregnator -self-improvable -self-improvement -self-improver -self-improving -self-impulsion -self-inclosed -self-inclusive -self-inconsistency -self-inconsistent -self-incriminating -self-incrimination -self-incurred -self-indignation -self-induced -self-inductance -self-induction -self-inductive -self-indulged -self-indulgence -self-indulgent -self-indulgently -self-indulger -self-indulging -self-infatuated -self-infatuation -self-infection -self-inflation -self-inflicted -self-infliction -selfing -self-initiated -self-initiative -self-injury -self-injuries -self-injurious -self-inker -self-inking -self-inoculated -self-inoculation -self-insignificance -self-inspected -self-inspection -self-instructed -self-instructing -self-instruction -self-instructional -self-instructor -self-insufficiency -self-insurance -self-insured -self-insurer -self-integrating -self-integration -self-intelligible -self-intensified -self-intensifying -self-intent -self-interest -self-interested -self-interestedness -self-interpretative -self-interpreted -self-interpreting -self-interpretive -self-interrogation -self-interrupting -self-intersecting -self-intoxication -self-introduction -self-intruder -self-invented -self-invention -self-invited -self-involution -self-involved -self-ionization -self-irony -self-ironies -self-irrecoverable -self-irrecoverableness -self-irreformable -selfish -selfishly -selfishness -selfishnesses -selfism -self-issued -self-issuing -selfist -self-jealous -self-jealousy -self-jealousing -self-judged -self-judgement -self-judging -self-judgment -self-justification -self-justified -self-justifier -self-justifying -self-killed -self-killer -self-killing -self-kindled -self-kindness -self-knowing -self-knowledge -self-known -self-lacerating -self-laceration -self-lashing -self-laudation -self-laudatory -self-lauding -self-learn -self-left -selfless -selflessly -selflessness -selflessnesses -self-leveler -self-leveling -self-leveller -self-levelling -self-levied -self-levitation -selfly -self-life -self-light -self-lighting -selflike -self-liking -self-limitation -self-limited -self-limiting -self-liquidating -self-lived -self-loader -self-loading -self-loathing -self-locating -self-locking -self-lost -self-love -self-lover -self-loving -self-lubricated -self-lubricating -self-lubrication -self-luminescence -self-luminescent -self-luminosity -self-luminous -self-maceration -self-mad -self-made -self-mailer -self-mailing -self-maimed -self-maintained -self-maintaining -self-maintenance -self-making -self-manifest -self-manifestation -self-mapped -self-martyrdom -self-mastered -self-mastery -self-mastering -self-mate -self-matured -self-measurement -self-mediating -self-merit -self-minded -self-mistrust -self-misused -self-mortification -self-mortified -self-motion -self-motive -self-moved -selfmovement -self-movement -self-mover -self-moving -self-multiplied -self-multiplying -self-murder -self-murdered -self-murderer -self-mutilation -self-named -self-naughting -self-neglect -self-neglectful -self-neglectfulness -self-neglecting -selfness -selfnesses -self-nourished -self-nourishing -self-nourishment -self-objectification -self-oblivion -self-oblivious -self-observation -self-observed -self-obsessed -self-obsession -self-occupation -self-occupied -self-offence -self-offense -self-offered -self-offering -self-oiling -self-opened -self-opener -self-opening -self-operating -self-operative -self-operator -self-opiniated -self-opiniatedly -self-opiniative -self-opiniativeness -self-opinion -self-opinionated -self-opinionatedly -self-opinionatedness -self-opinionative -self-opinionatively -self-opinionativeness -self-opinioned -self-opinionedness -self-opposed -self-opposition -self-oppression -self-oppressive -self-oppressor -self-ordained -self-ordainer -self-organization -self-originated -self-originating -self-origination -self-ostentation -self-outlaw -self-outlawed -self-ownership -self-oxidation -self-paid -self-paying -self-painter -self-pampered -self-pampering -self-panegyric -self-parasitism -self-parricide -self-partiality -self-peace -self-penetrability -self-penetration -self-perceiving -self-perception -self-perceptive -self-perfect -self-perfectibility -self-perfecting -self-perfectionment -self-performed -self-permission -self-perpetuated -self-perpetuating -self-perpetuation -self-perplexed -self-persuasion -self-physicking -self-pictured -self-pious -self-piquer -self-pity -self-pitiful -self-pitifulness -self-pitying -self-pityingly -self-player -self-playing -self-planted -self-pleached -self-pleased -self-pleaser -self-pleasing -self-pointed -self-poise -self-poised -self-poisedness -self-poisoner -self-policy -self-policing -self-politician -self-pollinate -self-pollinated -self-pollination -self-polluter -self-pollution -self-portrait -self-portraitist -self-posed -self-posited -self-positing -self-possessed -self-possessedly -self-possessing -self-possession -self-posting -self-postponement -self-potence -self-powered -self-praise -self-praising -self-precipitation -self-preference -self-preoccupation -self-preparation -self-prepared -self-prescribed -self-presentation -self-presented -self-preservation -self-preservative -selfpreservatory -self-preserving -self-preservingly -self-pretended -self-pride -self-primed -self-primer -self-priming -self-prizing -self-proclaimant -self-proclaimed -self-proclaiming -self-procured -self-procurement -self-procuring -self-proditoriously -self-produced -self-production -self-professed -self-profit -self-projection -self-pronouncing -self-propagated -self-propagating -self-propagation -self-propelled -self-propellent -self-propeller -selfpropelling -self-propelling -self-propulsion -self-protecting -self-protection -self-protective -self-proving -self-provision -self-pruning -self-puffery -self-punished -self-punisher -self-punishing -self-punishment -self-punitive -self-purification -self-purifying -self-purity -self-question -self-questioned -self-questioning -self-quotation -self-raised -self-raising -self-rake -self-rating -self-reacting -self-reading -self-realization -self-realizationism -self-realizationist -self-realizing -self-reciprocal -self-reckoning -self-recollection -self-recollective -self-reconstruction -self-recording -self-recrimination -self-rectifying -self-reduction -self-reduplication -self-reference -self-refinement -self-refining -self-reflection -self-reflective -self-reflexive -self-reform -self-reformation -self-refuted -self-refuting -self-regard -self-regardant -self-regarding -self-regardless -self-regardlessly -self-regardlessness -self-registering -self-registration -self-regulate -self-regulated -self-regulating -self-regulation -self-regulative -self-regulatory -self-relation -self-reliance -self-reliant -self-reliantly -self-relying -self-relish -self-renounced -self-renouncement -self-renouncing -self-renunciation -self-renunciatory -self-repeating -self-repellency -self-repellent -self-repelling -self-repetition -self-repose -self-representation -self-repressed -self-repressing -self-repression -self-reproach -self-reproached -self-reproachful -self-reproachfulness -self-reproaching -self-reproachingly -self-reproachingness -self-reproducing -self-reproduction -self-reproof -self-reproval -self-reproved -self-reproving -self-reprovingly -self-repugnance -self-repugnancy -self-repugnant -self-repulsive -self-reputation -self-rescuer -self-resentment -self-resigned -self-resourceful -self-resourcefulness -self-respect -self-respectful -self-respectfulness -self-respecting -self-respectingly -self-resplendent -self-responsibility -self-restoring -selfrestrained -self-restrained -self-restraining -self-restraint -self-restricted -self-restriction -self-retired -self-revealed -self-revealing -self-revealment -self-revelation -self-revelative -self-revelatory -self-reverence -self-reverent -self-reward -self-rewarded -self-rewarding -Selfridge -self-right -self-righteous -self-righteously -self-righteousness -self-righter -self-righting -self-rigorous -self-rising -self-rolled -self-roofed -self-ruin -self-ruined -self-rule -self-ruling -selfs -self-sacrifice -self-sacrificer -self-sacrificial -self-sacrificing -self-sacrificingly -self-sacrificingness -self-safety -selfsaid -selfsame -self-same -selfsameness -self-sanctification -self-satirist -self-satisfaction -self-satisfied -self-satisfiedly -self-satisfying -self-satisfyingly -self-scanned -self-schooled -self-schooling -self-science -self-scorn -self-scourging -self-scrutiny -self-scrutinized -self-scrutinizing -self-sealer -self-sealing -self-searching -self-secure -self-security -self-sedimentation -self-sedimented -self-seeded -self-seeker -self-seeking -selfseekingness -self-seekingness -self-selection -self-sent -self-sequestered -self-serve -self-server -self-service -self-serving -self-set -self-severe -self-shadowed -self-shadowing -self-shelter -self-sheltered -self-shine -self-shining -self-shooter -self-shot -self-significance -self-similar -self-sinking -self-slayer -self-slain -self-slaughter -self-slaughtered -self-society -self-sold -self-solicitude -self-soothed -self-soothing -self-sophistication -self-sought -self-sounding -self-sovereignty -self-sow -self-sowed -self-sown -self-spaced -self-spacing -self-speech -self-spitted -self-sprung -self-stability -self-stabilized -self-stabilizing -self-starter -self-starting -self-starved -self-steered -self-sterile -self-sterility -self-styled -self-stimulated -self-stimulating -self-stimulation -self-stowing -self-strength -self-stripper -self-strong -self-stuck -self-study -self-subdual -self-subdued -self-subjection -self-subjugating -self-subjugation -self-subordained -self-subordinating -self-subordination -self-subsidation -self-subsistence -self-subsistency -self-subsistent -self-subsisting -self-substantial -self-subversive -self-sufficed -self-sufficience -selfsufficiency -self-sufficiency -self-sufficient -self-sufficiently -self-sufficientness -self-sufficing -self-sufficingly -self-sufficingness -self-suggested -self-suggester -self-suggestion -self-suggestive -self-suppletive -self-support -self-supported -self-supportedness -self-supporting -self-supportingly -self-supportless -self-suppressing -self-suppression -self-suppressive -self-sure -self-surrender -self-surrendering -self-survey -self-surveyed -self-surviving -self-survivor -self-suspended -self-suspicion -self-suspicious -self-sustained -self-sustaining -selfsustainingly -self-sustainingly -self-sustainment -self-sustenance -self-sustentation -self-sway -self-tapping -self-taught -self-taxation -self-taxed -self-teacher -self-teaching -self-tempted -self-tenderness -self-terminating -self-terminative -self-testing -self-thinking -self-thinning -self-thought -self-threading -self-tightening -self-timer -self-tipping -self-tire -self-tired -self-tiring -self-tolerant -self-tolerantly -self-toning -self-torment -self-tormented -self-tormenter -self-tormenting -self-tormentingly -self-tormentor -self-torture -self-tortured -self-torturing -self-trained -self-training -self-transformation -self-transformed -self-treated -self-treatment -self-trial -self-triturating -self-troubled -self-troubling -self-trust -self-trusting -self-tuition -self-uncertain -self-unconscious -self-understand -self-understanding -self-understood -self-undoing -self-unfruitful -self-uniform -self-union -self-unity -self-unloader -self-unloading -self-unscabbarded -self-unveiling -self-unworthiness -self-upbraiding -self-usurp -self-validating -self-valuation -self-valued -self-valuing -self-variance -self-variation -self-varying -self-vaunted -self-vaunting -self-vendition -self-ventilated -self-vexation -self-view -self-vindicated -self-vindicating -self-vindication -self-violence -self-violent -self-vivacious -self-vivisector -self-vulcanizing -self-want -selfward -self-wardness -selfwards -self-warranting -self-watchfulness -self-weary -self-weariness -self-weight -self-weighted -self-whipper -self-whipping -self-whole -self-widowered -self-will -self-willed -self-willedly -self-willedness -self-winding -self-wine -self-wisdom -self-wise -self-witness -self-witnessed -self-working -self-worn -self-worship -self-worshiper -self-worshiping -self-worshipper -self-worshipping -self-worth -self-worthiness -self-wounded -self-wounding -self-writing -self-written -self-wrong -self-wrongly -self-wrought -Selhorst -Selia -Selichoth -selictar -Selie -Selig -Seligman -Seligmann -seligmannite -Selihoth -Selim -Selima -Selimah -Selina -Selinda -Seline -seling -Selinsgrove -Selinski -Selinuntine -selion -Seljuk -Seljukian -Selkirk -Selkirkshire -Sell -Sella -sellable -sellably -sellaite -sellar -sellary -Sellars -sellate -Selle -sellenders -seller -Sellers -Sellersburg -Sellersville -selles -Selli -selly -sellie -selliform -selling -selling-plater -Sellma -Sello -sell-off -Sellotape -sellout -sellouts -Sells -Selma -Selmer -Selmner -Selmore -s'elp -Selry -sels -selsyn -selsyns -selsoviet -selt -Selter -Seltzer -seltzers -seltzogene -Selung -SELV -selva -selvage -selvaged -selvagee -selvages -selvas -selvedge -selvedged -selvedges -selves -Selway -Selwin -Selwyn -Selz -Selznick -selzogene -SEM -Sem. -Semaeostomae -Semaeostomata -semainier -semainiers -semaise -Semaleus -Semang -Semangs -semanteme -semantic -semantical -semantically -semantician -semanticist -semanticists -semanticist's -semantics -semantology -semantological -semantron -semaphore -semaphored -semaphores -semaphore's -semaphoric -semaphorical -semaphorically -semaphoring -semaphorist -Semarang -semarum -semasiology -semasiological -semasiologically -semasiologist -semateme -sematic -sematography -sematographic -sematology -sematrope -semball -semblable -semblably -semblance -semblances -semblant -semblative -semble -semblence -sembling -Sembrich -seme -Semecarpus -semee -semeed -semei- -semeia -semeiography -semeiology -semeiologic -semeiological -semeiologist -semeion -semeiotic -semeiotical -semeiotics -semel -Semela -Semele -semelfactive -semelincident -semelparity -semelparous -sememe -sememes -sememic -semen -semence -semencinae -semencontra -Semenov -semens -sement -sementera -Semeostoma -Semeru -semes -semese -semester -semesters -semester's -semestral -semestrial -semi -semi- -semiabsorbent -semiabstract -semi-abstract -semiabstracted -semiabstraction -semi-abstraction -semiacademic -semiacademical -semiacademically -semiaccomplishment -semiacetic -semiacid -semiacidic -semiacidified -semiacidulated -semiacquaintance -semiacrobatic -semiactive -semiactively -semiactiveness -semiadherent -semiadhesive -semiadhesively -semiadhesiveness -semiadjectively -semiadnate -semiaerial -semiaffectionate -semiagricultural -Semiahmoo -semiair-cooled -semialbinism -semialcoholic -semialien -semiallegiance -semiallegoric -semiallegorical -semiallegorically -semialpine -semialuminous -semiamplexicaul -semiamplitude -semian -semianaesthetic -semianalytic -semianalytical -semianalytically -semianarchism -semianarchist -semianarchistic -semianatomic -semianatomical -semianatomically -semianatropal -semianatropous -semiandrogenous -semianesthetic -semiangle -semiangular -semianimal -semianimate -semianimated -semianna -semiannealed -semiannual -semi-annual -semiannually -semiannular -semianthracite -semianthropologic -semianthropological -semianthropologically -semiantiministerial -semiantique -semiape -semiaperiodic -semiaperture -Semi-apollinarism -semiappressed -semiaquatic -semiarboreal -semiarborescent -semiarc -semiarch -semiarchitectural -semiarchitecturally -Semi-arian -Semi-arianism -semiarid -semiaridity -semi-aridity -semi-armor-piercing -semiarticulate -semiarticulately -semiasphaltic -semiatheist -semiattached -Semi-augustinian -semi-Augustinianism -semiautomated -semiautomatic -semiautomatically -semiautomatics -semiautonomous -semiaxis -semibacchanalian -semibachelor -semibay -semibald -semibaldly -semibaldness -semibalked -semiball -semiballoon -semiband -Semi-Bantu -semibarbarian -semibarbarianism -semibarbaric -semibarbarism -semibarbarous -semibaronial -semibarren -semibase -semibasement -semibastion -semibeam -semibejan -Semi-belgian -semibelted -Semi-bessemer -semibifid -semibiographic -semibiographical -semibiographically -semibiologic -semibiological -semibiologically -semibituminous -semiblasphemous -semiblasphemously -semiblasphemousness -semibleached -semiblind -semiblunt -semibody -Semi-bohemian -semiboiled -semibold -Semi-bolsheviki -semibolshevist -semibolshevized -semibouffant -semibourgeois -semibreve -semibull -semibureaucratic -semibureaucratically -semiburrowing -semic -semicabalistic -semicabalistical -semicabalistically -semicadence -semicalcareous -semicalcined -semicallipygian -semicanal -semicanalis -semicannibalic -semicantilever -semicapitalistic -semicapitalistically -semicarbazide -semicarbazone -semicarbonate -semicarbonize -semicardinal -semicaricatural -semicartilaginous -semicarved -semicastrate -semicastration -semicatalyst -semicatalytic -semicathartic -semicatholicism -semicaudate -semicelestial -semicell -semicellulose -semicellulous -semicentenary -semicentenarian -semicentenaries -semicentennial -semicentury -semicha -semichannel -semichaotic -semichaotically -semichemical -semichemically -semicheviot -semichevron -semichiffon -semichivalrous -semichoric -semichorus -semi-chorus -Semi-christian -Semi-christianized -semichrome -semicyclic -semicycloid -semicylinder -semicylindric -semicylindrical -semicynical -semicynically -semicircle -semi-circle -semicircled -semicircles -semicircular -semicircularity -semicircularly -semicircularness -semicircumference -semicircumferentor -semicircumvolution -semicirque -semicitizen -semicivilization -semicivilized -semiclassic -semiclassical -semiclassically -semiclause -semicleric -semiclerical -semiclerically -semiclimber -semiclimbing -semiclinical -semiclinically -semiclose -semiclosed -semiclosure -semicoagulated -semicoke -semicollapsible -semicollar -semicollegiate -semicolloid -semicolloidal -semicolloquial -semicolloquially -semicolon -semicolony -semicolonial -semicolonialism -semicolonially -semicolons -semicolon's -semicolumn -semicolumnar -semicoma -semicomas -semicomatose -semicombined -semicombust -semicomic -semicomical -semicomically -semicommercial -semicommercially -semicommunicative -semicompact -semicompacted -semicomplete -semicomplicated -semiconceal -semiconcealed -semiconcrete -semiconditioned -semiconducting -semiconduction -semiconductor -semiconductors -semiconductor's -semicone -semiconfident -semiconfinement -semiconfluent -semiconformist -semiconformity -semiconic -semiconical -semiconically -semiconnate -semiconnection -semiconoidal -semiconscious -semiconsciously -semiconsciousness -semiconservative -semiconservatively -semiconsonant -semiconsonantal -semiconspicuous -semicontinent -semicontinuous -semicontinuously -semicontinuum -semicontraction -semicontradiction -semiconventional -semiconventionality -semiconventionally -semiconvergence -semiconvergent -semiconversion -semiconvert -semico-operative -semicope -semicordate -semicordated -semicoriaceous -semicorneous -semicoronate -semicoronated -semicoronet -semicostal -semicostiferous -semicotyle -semicotton -semicounterarch -semicountry -semicrepe -semicrescentic -semicretin -semicretinism -semicriminal -semicrystallinc -semicrystalline -semicroma -semicrome -semicrustaceous -semicubical -semi-cubical -semicubit -semicultivated -semicultured -semicup -semicupe -semicupium -semicupola -semicured -semicurl -semicursive -semicurvilinear -semidaily -semidangerous -semidangerously -semidangerousness -semidark -semidarkness -Semi-darwinian -semidead -semideaf -semideafness -semidecadent -semidecadently -semidecay -semidecayed -semidecussation -semidefensive -semidefensively -semidefensiveness -semidefined -semidefinite -semidefinitely -semidefiniteness -semideify -semideific -semideification -semideistical -semideity -semidelight -semidelirious -semidelirium -semideltaic -semidemented -semi-demi- -semidenatured -semidependence -semidependent -semidependently -semideponent -semidesert -semideserts -semidestruction -semidestructive -semidetached -semi-detached -semidetachment -semideterministic -semideveloped -semidiagrammatic -semidiameter -semidiapason -semidiapente -semidiaphaneity -semidiaphanous -semidiaphanously -semidiaphanousness -semidiatessaron -semidictatorial -semidictatorially -semidictatorialness -semi-diesel -semidifference -semidigested -semidigitigrade -semidigression -semidilapidation -semidine -semidiness -semidirect -semidirectness -semidisabled -semidisk -semiditone -semidiurnal -semi-diurnal -semidivided -semidivine -semidivision -semidivisive -semidivisively -semidivisiveness -semidocumentary -semidodecagon -semidole -semidome -semidomed -semidomes -semidomestic -semidomestically -semidomesticated -semidomestication -semidomical -semidominant -semidormant -semidouble -semi-double -semidrachm -semidramatic -semidramatical -semidramatically -semidress -semidressy -semidry -semidried -semidrying -semiductile -semidull -semiduplex -semidurables -semiduration -Semi-dutch -semiearly -semieducated -semieffigy -semiegg -semiegret -semielastic -semielastically -semielevated -semielision -semiellipse -semiellipsis -semiellipsoidal -semielliptic -semielliptical -semiemotional -semiemotionally -Semi-empire -semiempirical -semiempirically -semienclosed -semienclosure -semiengaged -semiepic -semiepical -semiepically -semiequitant -semierect -semierectly -semierectness -semieremitical -semiessay -Semi-euclidean -semievergreen -semiexclusive -semiexclusively -semiexclusiveness -semiexecutive -semiexhibitionist -semiexpanded -semiexpansible -semiexperimental -semiexperimentally -semiexplanation -semiexposed -semiexpositive -semiexpository -semiexposure -semiexpressionistic -semiexternal -semiexternalized -semiexternally -semiextinct -semiextinction -semifable -semifabulous -semifailure -semifamine -semifascia -semifasciated -semifashion -semifast -semifatalistic -semiferal -semiferous -semifeudal -semifeudalism -semify -semifib -semifiction -semifictional -semifictionalized -semifictionally -semifigurative -semifiguratively -semifigurativeness -semifigure -semifinal -semifinalist -semifinalists -semifinals -semifine -semifinish -semifinished -semifiscal -semifistular -semifit -semifitted -semifitting -semifixed -semiflashproof -semiflex -semiflexed -semiflexible -semiflexion -semiflexure -semiflint -semifloating -semifloret -semifloscular -semifloscule -semiflosculose -semiflosculous -semifluctuant -semifluctuating -semifluid -semifluidic -semifluidity -semifoaming -semiforbidding -semiforeign -semiform -semi-form -semiformal -semiformed -semifossil -semifossilized -semifrantic -semifrater -Semi-frenchified -semifriable -semifrontier -semifuddle -semifunctional -semifunctionalism -semifunctionally -semifurnished -semifused -semifusion -semifuturistic -semigala -semigelatinous -semigentleman -semigenuflection -semigeometric -semigeometrical -semigeometrically -semigirder -semiglaze -semiglazed -semiglobe -semiglobose -semiglobular -semiglobularly -semiglorious -semigloss -semiglutin -Semi-gnostic -semigod -Semi-gothic -semigovernmental -semigovernmentally -semigrainy -semigranitic -semigranulate -semigraphic -semigraphics -semigravel -semigroove -semigroup -semih -semihand -semihaness -semihard -semiharden -semihardened -semihardy -semihardness -semihastate -semihepatization -semiherbaceous -semiheretic -semiheretical -semiheterocercal -semihexagon -semihexagonal -semihyaline -semihiant -semihiatus -semihibernation -semihydrate -semihydrobenzoinic -semihigh -semihyperbola -semihyperbolic -semihyperbolical -semihysterical -semihysterically -semihistoric -semihistorical -semihistorically -semihobo -semihoboes -semihobos -semiholiday -semihonor -semihoral -semihorny -semihostile -semihostilely -semihostility -semihot -semihuman -semihumanism -semihumanistic -semihumanitarian -semihumanized -semihumbug -semihumorous -semihumorously -semi-idiocy -semi-idiotic -semi-idleness -semiyearly -semiyearlies -semi-ignorance -semi-illiteracy -semi-illiterate -semi-illiterately -semi-illiterateness -semi-illuminated -semi-imbricated -semi-immersed -semi-impressionistic -semi-incandescent -semi-independence -semi-independent -semi-independently -semi-indirect -semi-indirectly -semi-indirectness -semi-inductive -semi-indurate -semi-indurated -semi-industrial -semi-industrialized -semi-industrially -semi-inertness -semi-infidel -semi-infinite -semi-inhibited -semi-inhibition -semi-insoluble -semi-instinctive -semi-instinctively -semi-instinctiveness -semi-insular -semi-intellectual -semi-intellectualized -semi-intellectually -semi-intelligent -semi-intelligently -semi-intercostal -semi-internal -semi-internalized -semi-internally -semi-interosseous -semiintoxicated -semi-intoxication -semi-intrados -semi-invalid -semi-inverse -semi-ironic -semi-ironical -semi-ironically -semi-isolated -semijealousy -Semi-jesuit -semijocular -semijocularly -semijubilee -Semi-judaizer -semijudicial -semijudicially -semijuridic -semijuridical -semijuridically -semikah -semilanceolate -semilate -semilatent -semilatus -semileafless -semi-learning -semilegal -semilegendary -semilegislative -semilegislatively -semilens -semilenticular -semilethal -semiliberal -semiliberalism -semiliberally -semilichen -semiligneous -semilimber -semilined -semiliquid -semiliquidity -semilyric -semilyrical -semilyrically -semiliterate -Semillon -semilocular -semilog -semilogarithmic -semilogical -semiloyalty -semilong -semilooper -semiloose -semilor -semilucent -semiluminous -semiluminously -semiluminousness -semilunar -semilunare -semilunary -semilunate -semilunated -semilunation -semilune -semi-lune -semilustrous -semiluxation -semiluxury -semimachine -semimade -semimadman -semimagical -semimagically -semimagnetic -semimagnetical -semimagnetically -semimajor -semimalicious -semimaliciously -semimaliciousness -semimalignant -semimalignantly -semimanagerial -semimanagerially -Semi-manichaeanism -semimanneristic -semimanufacture -semimanufactured -semimanufactures -semimarine -semimarking -semimat -semi-mat -semimaterialistic -semimathematical -semimathematically -semimatt -semimatte -semi-matte -semimature -semimaturely -semimatureness -semimaturity -semimechanical -semimechanistic -semimedicinal -semimember -semimembranosus -semimembranous -semimenstrual -semimercerized -semimessianic -semimetal -semi-metal -semimetallic -semimetamorphosis -semimetaphoric -semimetaphorical -semimetaphorically -semimicro -semimicroanalysis -semimicrochemical -semimild -semimildness -semimilitary -semimill -semimineral -semimineralized -semiminess -semiminim -semiministerial -semiminor -semimystic -semimystical -semimystically -semimysticalness -semimythic -semimythical -semimythically -semimobile -semimoderate -semimoderately -semimoist -semimolecule -semimonarchic -semimonarchical -semimonarchically -semimonastic -semimonitor -semimonopoly -semimonopolistic -semimonster -semimonthly -semimonthlies -semimoralistic -semimoron -semimountainous -semimountainously -semimucous -semimute -semina -seminaked -seminal -seminality -seminally -seminaphthalidine -seminaphthylamine -seminar -seminarcosis -seminarcotic -seminary -seminarial -seminarian -seminarianism -seminarians -seminaries -seminary's -seminarist -seminaristic -seminarize -seminarrative -seminars -seminar's -seminasal -seminasality -seminasally -seminase -seminatant -seminate -seminated -seminating -semination -seminationalism -seminationalistic -seminationalization -seminationalized -seminative -seminebulous -seminecessary -seminegro -seminervous -seminervously -seminervousness -seminess -semineurotic -semineurotically -semineutral -semineutrality -seminiferal -seminiferous -seminific -seminifical -seminification -seminist -seminium -seminivorous -seminocturnal -semi-nocturnal -Seminole -Seminoles -seminoma -seminomad -seminomadic -seminomadically -seminomadism -seminomas -seminomata -seminonconformist -seminonflammable -seminonsensical -seminormal -seminormality -seminormally -seminormalness -Semi-norman -seminose -seminovel -seminovelty -seminude -seminudity -seminule -seminuliferous -seminuria -seminvariant -seminvariantive -semiobjective -semiobjectively -semiobjectiveness -semioblivion -semioblivious -semiobliviously -semiobliviousness -semiobscurity -semioccasional -semioccasionally -semiocclusive -semioctagonal -semiofficial -semiofficially -semiography -semiology -semiological -semiologist -Semionotidae -Semionotus -semiopacity -semiopacous -semiopal -semi-opal -semiopalescent -semiopaque -semiopen -semiopened -semiopenly -semiopenness -semioptimistic -semioptimistically -semioratorical -semioratorically -semiorb -semiorbicular -semiorbicularis -semiorbiculate -semiordinate -semiorganic -semiorganically -semiorganized -semioriental -semiorientally -semiorthodox -semiorthodoxly -semioscillation -semioses -semiosis -semiosseous -semiostracism -semiotic -semiotical -semiotician -semiotics -semioval -semiovally -semiovalness -semiovaloid -semiovate -semioviparous -semiovoid -semiovoidal -semioxidated -semioxidized -semioxygenated -semioxygenized -semipacifist -semipacifistic -semipagan -semipaganish -Semipalatinsk -semipalmate -semipalmated -semipalmation -semipanic -semipapal -semipapist -semiparabola -semiparalysis -semiparalytic -semiparalyzed -semiparallel -semiparameter -semiparasite -semiparasitic -semiparasitism -semiparochial -semipassive -semipassively -semipassiveness -semipaste -semipasty -semipastoral -semipastorally -semipathologic -semipathological -semipathologically -semipatriot -Semi-patriot -semipatriotic -semipatriotically -semipatterned -semipause -semipeace -semipeaceful -semipeacefully -semipectinate -semipectinated -semipectoral -semiped -semi-ped -semipedal -semipedantic -semipedantical -semipedantically -Semi-pelagian -Semi-pelagianism -semipellucid -semipellucidity -semipendent -semipendulous -semipendulously -semipendulousness -semipenniform -semiperceptive -semiperfect -semiperimeter -semiperimetry -semiperiphery -semipermanent -semipermanently -semipermeability -semipermeable -semiperoid -semiperspicuous -semipertinent -semiperviness -semipervious -semiperviousness -semipetaloid -semipetrified -semiphase -semiphenomenal -semiphenomenally -semiphilologist -semiphilosophic -semiphilosophical -semiphilosophically -semiphlogisticated -semiphonotypy -semiphosphorescence -semiphosphorescent -semiphrenetic -semipictorial -semipictorially -semipinacolic -semipinacolin -semipinnate -semipious -semipiously -semipiousness -semipyramidal -semipyramidical -semipyritic -semipiscine -Semi-pythagorean -semiplantigrade -semiplastic -semiplumaceous -semiplume -semipneumatic -semipneumatical -semipneumatically -semipoisonous -semipoisonously -semipolar -semipolitical -semipolitician -semipoor -semipopish -semipopular -semipopularity -semipopularized -semipopularly -semiporcelain -semiporous -semiporphyritic -semiportable -semipostal -semipractical -semiprecious -semipreservation -semipreserved -semiprimigenous -semiprimitive -semiprivacy -semiprivate -semipro -semiproductive -semiproductively -semiproductiveness -semiproductivity -semiprofane -semiprofanely -semiprofaneness -semiprofanity -semiprofessional -semiprofessionalized -semiprofessionally -semiprofessionals -semiprogressive -semiprogressively -semiprogressiveness -semipronation -semiprone -semipronely -semiproneness -semipronominal -semiproof -semipropagandist -semipros -semiproselyte -semiprosthetic -semiprostrate -semiprotected -semiprotective -semiprotectively -semiprotectorate -semiproven -semiprovincial -semiprovincially -semipsychologic -semipsychological -semipsychologically -semipsychotic -semipublic -semipunitive -semipunitory -semipupa -semipurposive -semipurposively -semipurposiveness -semipurulent -semiputrid -semiquadrangle -semiquadrantly -semiquadrate -semiquantitative -semiquantitatively -semiquartile -semiquaver -semiquietism -semiquietist -semiquinquefid -semiquintile -semiquote -semiradial -semiradiate -semiradical -semiradically -semiradicalness -Semiramis -Semiramize -semirapacious -semirare -semirarely -semirareness -semirationalized -semirattlesnake -semiraw -semirawly -semirawness -semireactionary -semirealistic -semirealistically -semirebel -semirebellion -semirebellious -semirebelliously -semirebelliousness -semirecondite -semirecumbent -semirefined -semireflex -semireflexive -semireflexively -semireflexiveness -semiregular -semirelief -semireligious -semireniform -semirepublic -semirepublican -semiresiny -semiresinous -semiresolute -semiresolutely -semiresoluteness -semirespectability -semirespectable -semireticulate -semiretired -semiretirement -semiretractile -semireverberatory -semirevolute -semirevolution -semirevolutionary -semirevolutionist -semirhythm -semirhythmic -semirhythmical -semirhythmically -semiriddle -semirigid -semirigorous -semirigorously -semirigorousness -semiring -semiroyal -semiroll -Semi-romanism -Semi-romanized -semiromantic -semiromantically -semirotary -semirotating -semirotative -semirotatory -semirotund -semirotunda -semiround -semiruin -semirural -semiruralism -semirurally -Semi-russian -semirustic -semis -semisacerdotal -semisacred -Semi-sadducee -Semi-sadduceeism -Semi-sadducism -semisagittate -semisaint -semisaline -semisaltire -semisaprophyte -semisaprophytic -semisarcodic -semisatiric -semisatirical -semisatirically -semisaturation -semisavage -semisavagedom -semisavagery -Semi-saxon -semiscenic -semischolastic -semischolastically -semiscientific -semiseafaring -semisecondary -semisecrecy -semisecret -semisecretly -semisection -semisedentary -semisegment -semisensuous -semisentient -semisentimental -semisentimentalized -semisentimentally -semiseparatist -semiseptate -semiserf -semiserious -semiseriously -semiseriousness -semiservile -semises -semisevere -semiseverely -semiseverity -semisextile -semishade -semishady -semishaft -semisheer -semishirker -semishrub -semishrubby -semisightseeing -semisilica -semisimious -semisymmetric -semisimple -semisingle -semisynthetic -semisirque -semisixth -semiskilled -Semi-slav -semislave -semismelting -semismile -semisocial -semisocialism -semisocialist -semisocialistic -semisocialistically -semisociative -semisocinian -semisoft -semisolemn -semisolemnity -semisolemnly -semisolemnness -semisolid -semisolute -semisomnambulistic -semisomnolence -semisomnolent -semisomnolently -semisomnous -semisopor -semisoun -Semi-southern -semisovereignty -semispan -semispeculation -semispeculative -semispeculatively -semispeculativeness -semisphere -semispheric -semispherical -semispheroidal -semispinalis -semispiral -semispiritous -semispontaneity -semispontaneous -semispontaneously -semispontaneousness -semisport -semisporting -semisquare -semistagnation -semistaminate -semistarvation -semistarved -semistate -semisteel -semistiff -semistiffly -semistiffness -semistill -semistimulating -semistock -semistory -semistratified -semistriate -semistriated -semistuporous -semisubterranean -semisuburban -semisuccess -semisuccessful -semisuccessfully -semisucculent -semisupernatural -semisupernaturally -semisupernaturalness -semisupinated -semisupination -semisupine -semisuspension -semisweet -semita -semitact -semitae -semitailored -semital -semitandem -semitangent -Semi-tatar -semitaur -Semite -semitechnical -semiteetotal -semitelic -semitendinosus -semitendinous -semiterete -semiterrestrial -semitertian -semites -semitesseral -semitessular -semitextural -semitexturally -semitheatric -semitheatrical -semitheatricalism -semitheatrically -semitheological -semitheologically -semithoroughfare -Semitic -Semi-tychonic -Semiticism -Semiticize -Semitico-hamitic -Semitics -semitime -Semitism -Semitist -semitists -Semitization -Semitize -Semito-hamite -Semito-Hamitic -semitonal -semitonally -semitone -semitones -semitonic -semitonically -semitontine -Semi-tory -semitorpid -semitour -semitraditional -semitraditionally -semitraditonal -semitrailer -semitrailers -semitrained -semitransept -semitranslucent -semitransparency -semitransparent -semitransparently -semitransparentness -semitransverse -semitreasonable -semitrimmed -semitropic -semitropical -semitropically -semitropics -semitruth -semitruthful -semitruthfully -semitruthfulness -semituberous -semitubular -semiuncial -semi-uncial -semiundressed -semiuniversalist -semiupright -semiurban -semiurn -semivalvate -semivault -semivector -semivegetable -semivertebral -semiverticillate -semivibration -semivirtue -semiviscid -semivisibility -semivisible -semivital -semivitreous -semivitrification -semivitrified -semivocal -semivocalic -semivolatile -semivolcanic -semivolcanically -semivoluntary -semivowel -semivowels -semivulcanized -semiwaking -semiwarfare -semiweekly -semiweeklies -semiwild -semiwildly -semiwildness -semiwoody -semiworks -Semi-zionism -semmel -Semmes -semmet -semmit -Semnae -Semnones -Semnopithecinae -semnopithecine -Semnopithecus -semois -semola -semolella -semolina -semolinas -semology -semological -Semora -Semostomae -semostomeous -semostomous -semoted -semoule -Sempach -semper -semper- -semperannual -sempergreen -semperidem -semperidentical -semperjuvenescent -sempervirent -sempervirid -Sempervivum -sempitern -sempiternal -sempiternally -sempiternity -sempiternize -sempiternous -semple -semples -semplice -semplices -sempre -sempres -sempster -sempstress -sempstry -sempstrywork -semsem -semsen -semuncia -semuncial -SEN -Sena -Senaah -senachie -senage -senaite -senal -Senalda -senam -senary -senarian -senarii -senarius -senarmontite -Senate -senate-house -senates -senate's -Senath -Senatobia -senator -senator-elect -senatory -senatorial -senatorially -senatorian -senators -senator's -senatorship -senatress -senatrices -senatrix -senatus -sence -Senci -sencio -sencion -send -sendable -Sendai -sendal -sendals -sended -sendee -Sender -senders -sending -sendle -sendoff -send-off -sendoffs -send-out -sends -sendup -sendups -sene -Seneca -Senecal -Senecan -senecas -Senecaville -Senecio -senecioid -senecionine -senecios -senectitude -senectude -senectuous -Senefelder -senega -Senegal -Senegalese -Senegambia -Senegambian -senegas -senegin -Seney -senesce -senescence -senescency -senescent -seneschal -seneschally -seneschalship -seneschalsy -seneschalty -senex -Senghor -sengi -sengreen -Senhauser -senhor -senhora -senhoras -senhores -senhorita -senhoritas -senhors -senicide -Senijextee -senile -senilely -seniles -senilis -senilism -senility -senilities -senilize -Senior -seniory -seniority -seniorities -seniors -senior's -seniorship -senit -seniti -senium -Senlac -Senn -Senna -Sennacherib -sennachie -Sennar -sennas -sennegrass -sennet -sennets -Sennett -sennight -se'nnight -sennights -sennit -sennite -sennits -senocular -Senoia -Senones -Senonian -senopia -senopias -senor -Senora -senoras -senores -senorita -senoritas -senors -senoufo -senryu -sensa -sensable -sensal -sensate -sensated -sensately -sensates -sensating -sensation -sensational -sensationalise -sensationalised -sensationalising -sensationalism -sensationalist -sensationalistic -sensationalists -sensationalize -sensationalized -sensationalizing -sensationally -sensationary -sensationish -sensationism -sensationist -sensationistic -sensationless -sensation-proof -sensations -sensation's -sensatory -sensatorial -sense -sense-bereaving -sense-bound -sense-confounding -sense-confusing -sensed -sense-data -sense-datum -sense-distracted -senseful -senseless -senselessly -senselessness -sense-ravishing -senses -sensibilia -sensibilisin -sensibility -sensibilities -sensibilitiy -sensibilitist -sensibilitous -sensibilium -sensibilization -sensibilize -sensible -sensibleness -sensibler -sensibles -sensiblest -sensibly -sensical -sensifacient -sensiferous -sensify -sensific -sensificatory -sensifics -sensigenous -sensile -sensilia -sensilla -sensillae -sensillum -sensillumla -sensimotor -sensyne -sensing -Sension -sensism -sensist -sensistic -sensitisation -sensitiser -sensitive -sensitively -sensitiveness -sensitivenesses -sensitives -sensitivist -sensitivity -sensitivities -sensitization -sensitize -sensitized -sensitizer -sensitizes -sensitizing -sensitometer -sensitometers -sensitometry -sensitometric -sensitometrically -sensitory -sensive -sensize -Senskell -senso -sensomobile -sensomobility -sensomotor -sensoparalysis -sensor -sensory -sensori- -sensoria -sensorial -sensorially -sensories -sensoriglandular -sensorimotor -sensorimuscular -sensorineural -sensorium -sensoriums -sensorivascular -sensorivasomotor -sensorivolitional -sensors -sensor's -sensu -sensual -sensualisation -sensualise -sensualism -sensualist -sensualistic -sensualists -sensuality -sensualities -sensualization -sensualize -sensualized -sensualizing -sensually -sensualness -sensuism -sensuist -sensum -sensuosity -sensuous -sensuously -sensuousness -sensuousnesses -sensus -sent -Sen-tamil -sentence -sentenced -sentencer -sentences -sentencing -sententia -sentential -sententially -sententiary -sententiarian -sententiarist -sententiosity -sententious -sententiously -sententiousness -senti -sentience -sentiency -sentiendum -sentient -sentiently -sentients -sentiment -sentimental -sentimentalisation -sentimentaliser -sentimentalism -sentimentalisms -sentimentalist -sentimentalists -sentimentality -sentimentalities -sentimentalization -sentimentalize -sentimentalized -sentimentalizer -sentimentalizes -sentimentalizing -sentimentally -sentimenter -sentimentless -sentimento -sentiment-proof -sentiments -sentiment's -sentimo -sentimos -sentine -Sentinel -sentineled -sentineling -sentinelled -sentinellike -sentinelling -sentinels -sentinel's -sentinelship -sentinelwise -sentisection -sentition -sentry -sentry-box -sentried -sentries -sentry-fashion -sentry-go -sentrying -sentry's -sents -senufo -Senusi -Senusian -Senusis -Senusism -Senussi -Senussian -Senussism -senvy -senza -Senzer -seor -seora -seorita -Seoul -Seow -Sep -sepad -sepal -sepaled -sepaline -sepalled -sepalody -sepaloid -sepalous -sepals -separability -separable -separableness -separably -separata -separate -separated -separatedly -separately -separateness -separates -separatical -separating -separation -separationism -separationist -separations -separatism -Separatist -separatistic -separatists -separative -separatively -separativeness -separator -separatory -separators -separator's -separatress -separatrices -separatrici -separatrix -separatum -separte -sepawn -sepd -sepg -Sepharad -Sephardi -Sephardic -Sephardim -Sepharvites -sephen -Sephira -sephirah -sephiric -sephiroth -sephirothic -Sephora -sepia -sepiacean -sepiaceous -sepia-colored -sepiae -sepia-eyed -sepialike -sepian -sepiary -sepiarian -sepias -sepia-tinted -sepic -sepicolous -Sepiidae -sepiment -sepioid -Sepioidea -Sepiola -Sepiolidae -sepiolite -sepion -sepiost -sepiostaire -sepium -sepn -Sepoy -sepoys -sepone -sepose -seppa -Seppala -seppuku -seppukus -seps -sepses -sepsid -Sepsidae -sepsin -sepsine -sepsis -Sept -Sept. -septa -septaemia -septal -septan -septane -septangle -septangled -septangular -septangularness -septaria -septarian -septariate -septarium -septate -septated -septation -septatoarticulate -septaugintal -septavalent -septave -septcentenary -septectomy -septectomies -septem- -September -Septemberer -Septemberism -Septemberist -Septembral -Septembrian -Septembrist -Septembrize -Septembrizer -septemdecenary -septemdecillion -septemfid -septemfluous -septemfoliate -septemfoliolate -septemia -septempartite -septemplicate -septemvious -septemvir -septemviral -septemvirate -septemviri -septemvirs -septenar -septenary -septenarian -septenaries -septenarii -septenarius -septenate -septendecennial -septendecillion -septendecillions -septendecillionth -septendecimal -septennary -septennate -septenniad -septennial -septennialist -septenniality -septennially -septennium -septenous -septentrial -Septentrio -Septentrion -septentrional -septentrionality -septentrionally -septentrionate -septentrionic -septerium -septet -septets -septette -septettes -septfoil -Septi -septi- -Septibranchia -Septibranchiata -septic -septicaemia -septicaemic -septical -septically -septicemia -septicemic -septicidal -septicidally -septicide -septicity -septicization -septicolored -septicopyemia -septicopyemic -septics -septier -septifarious -septiferous -septifluous -septifolious -septiform -septifragal -septifragally -septilateral -septile -septillion -septillions -septillionth -Septima -septimal -septimana -septimanae -septimanal -septimanarian -septime -septimes -septimetritis -septimole -septinsular -septipartite -septisyllabic -septisyllable -septivalent -septleva -Septmoncel -septo- -Septobasidium -septocylindrical -Septocylindrium -septocosta -septodiarrhea -septogerm -Septogloeum -septoic -septole -septolet -septomarginal -septomaxillary -septonasal -Septoria -septotomy -septs -septship -septuagenary -septuagenarian -septuagenarianism -septuagenarians -septuagenaries -Septuagesima -septuagesimal -Septuagint -Septuagintal -septula -septulate -septulum -septum -septums -septuncial -septuor -septuple -septupled -septuples -septuplet -septuplets -septuplicate -septuplication -septupling -sepuchral -sepulcher -sepulchered -sepulchering -sepulchers -sepulcher's -sepulchral -sepulchralize -sepulchrally -sepulchre -sepulchred -sepulchres -sepulchring -sepulchrous -sepult -sepultural -sepulture -Sepulveda -seq -seqed -seqence -seqfchk -seqq -seqq. -seqrch -sequa -sequaces -sequacious -sequaciously -sequaciousness -sequacity -Sequan -Sequani -Sequanian -Sequatchie -sequel -sequela -sequelae -sequelant -sequels -sequel's -sequence -sequenced -sequencer -sequencers -sequences -sequency -sequencies -sequencing -sequencings -sequent -sequential -sequentiality -sequentialize -sequentialized -sequentializes -sequentializing -sequentially -sequentialness -sequently -sequents -sequest -sequester -sequestered -sequestering -sequesterment -sequesters -sequestra -sequestrable -sequestral -sequestrant -sequestrate -sequestrated -sequestrates -sequestrating -sequestration -sequestrations -sequestrator -sequestratrices -sequestratrix -sequestrectomy -sequestrotomy -sequestrum -sequestrums -Sequim -sequin -sequined -sequinned -sequins -sequitur -sequiturs -Sequoia -Sequoya -Sequoyah -sequoias -seqwl -SER -Sera -serab -Serabend -serac -seracs -Serafin -Serafina -Serafine -seragli -seraglio -seraglios -serahuli -serai -seraya -serail -serails -seraing -serais -Serajevo -seral -seralbumen -seralbumin -seralbuminous -Seram -Serang -serape -Serapea -serapes -Serapeum -Serapeums -seraph -seraphic -seraphical -seraphically -seraphicalness -seraphicism -seraphicness -Seraphim -seraphims -seraphin -Seraphina -Seraphine -seraphism -seraphlike -seraphs -seraphtide -Serapias -Serapic -Serapis -Serapist -serasker -seraskerate -seraskier -seraskierat -serau -seraw -Serb -Serb-croat-slovene -Serbdom -Serbia -Serbian -serbians -Serbize -serbo- -Serbo-bulgarian -Serbo-croat -Serbo-Croatian -Serbonian -Serbophile -Serbophobe -SERC -sercial -sercom -Sercq -serdab -serdabs -serdar -Sere -Serean -sered -Seree -sereh -serein -sereins -Seremban -serement -Serena -serenade -serenaded -serenader -serenaders -serenades -serenading -serenata -serenatas -serenate -Serendib -serendibite -Serendip -serendipity -serendipitous -serendipitously -serendite -Serene -serened -serenely -sereneness -serener -serenes -serenest -serenify -serenissime -serenissimi -serenissimo -Serenitatis -Serenity -serenities -serenize -sereno -Serenoa -Serer -Seres -serest -Sereth -sereward -serf -serfage -serfages -serfdom -serfdoms -serfhood -serfhoods -serfish -serfishly -serfishness -serfism -serflike -serfs -serf's -serfship -Serg -Serge -sergeancy -sergeancies -Sergeant -sergeant-at-arms -sergeant-at-law -sergeantcy -sergeantcies -sergeantess -sergeantfish -sergeantfishes -sergeanty -sergeant-major -sergeant-majorship -sergeantry -sergeants -sergeant's -sergeantship -sergeantships -Sergeantsville -sergedesoy -sergedusoy -Sergei -sergelim -Sergent -serger -serges -Sergestus -sergette -Sergias -serging -sergings -Sergio -Sergipe -sergiu -Sergius -serglobulin -Sergo -Sergt -Sergu -Seri -serial -serialisation -serialise -serialised -serialising -serialism -serialist -serialists -seriality -serializability -serializable -serialization -serializations -serialization's -serialize -serialized -serializes -serializing -serially -serials -Serian -seriary -seriate -seriated -seriately -seriates -seriatim -seriating -seriation -seriaunt -Seric -Serica -Sericana -sericate -sericated -sericea -sericeotomentose -sericeous -sericicultural -sericiculture -sericiculturist -sericin -sericins -sericipary -sericite -sericitic -sericitization -Sericocarpus -sericon -serictery -sericteria -sericteries -sericterium -serictteria -sericultural -sericulture -sericulturist -seriema -seriemas -series -serieswound -series-wound -serif -serifed -seriffed -serific -Seriform -serifs -serigraph -serigrapher -serigraphers -serigraphy -serigraphic -serigraphs -Serilda -serimeter -serimpi -serin -serine -serines -serinette -sering -seringa -seringal -Seringapatam -seringas -seringhi -serins -Serinus -serio -serio- -seriocomedy -seriocomic -serio-comic -seriocomical -seriocomically -seriogrotesque -Seriola -Seriolidae -serioline -serioludicrous -seriopantomimic -serioridiculous -seriosity -seriosities -serioso -serious -seriously -serious-minded -serious-mindedly -serious-mindedness -seriousness -seriousnesses -seriplane -seripositor -Serjania -serjeancy -serjeant -serjeant-at-law -serjeanty -serjeantry -serjeants -Serkin -Serle -Serles -Serlio -serment -sermo -sermocination -sermocinatrix -sermon -sermonary -sermoneer -sermoner -sermonesque -sermonet -sermonette -sermonettino -sermonic -sermonical -sermonically -sermonics -sermoning -sermonise -sermonised -sermoniser -sermonish -sermonising -sermonism -sermonist -sermonize -sermonized -sermonizer -sermonizes -sermonizing -sermonless -sermonoid -sermonolatry -sermonology -sermonproof -sermons -sermon's -sermonwise -sermuncle -sernamby -sero -sero- -seroalbumin -seroalbuminuria -seroanaphylaxis -serobiological -serocyst -serocystic -serocolitis -serodermatosis -serodermitis -serodiagnosis -serodiagnostic -seroenteritis -seroenzyme -serofibrinous -serofibrous -serofluid -serogelatinous -serohemorrhagic -serohepatitis -seroimmunity -Seroka -serolactescent -serolemma -serolin -serolipase -serology -serologic -serological -serologically -serologies -serologist -seromaniac -seromembranous -seromucous -seromuscular -seron -seronegative -seronegativity -seroon -seroot -seroperitoneum -serophysiology -serophthisis -seroplastic -seropneumothorax -seropositive -seroprevention -seroprognosis -seroprophylaxis -seroprotease -seropuriform -seropurulent -seropus -seroreaction -seroresistant -serosa -serosae -serosal -serosanguineous -serosanguinolent -serosas -seroscopy -serose -serosynovial -serosynovitis -serosity -serosities -serositis -serotherapeutic -serotherapeutics -serotherapy -serotherapist -serotina -serotinal -serotine -serotines -serotinous -serotype -serotypes -serotonergic -serotonin -serotoxin -serous -serousness -Serov -serovaccine -serow -serows -serozem -serozyme -Serpari -Serpasil -serpedinous -Serpens -Serpent -serpentary -serpentaria -Serpentarian -Serpentarii -serpentarium -Serpentarius -serpentcleide -serpenteau -Serpentes -serpentess -serpent-god -serpent-goddess -Serpentian -serpenticidal -serpenticide -Serpentid -serpentiferous -serpentiform -serpentile -serpentin -serpentina -serpentine -serpentinely -Serpentinian -serpentinic -serpentiningly -serpentinization -serpentinize -serpentinized -serpentinizing -serpentinoid -serpentinous -Serpentis -serpentivorous -serpentize -serpently -serpentlike -serpentoid -serpentry -serpents -serpent's -serpent-shaped -serpent-stone -serpentwood -serpette -serphid -Serphidae -serphoid -Serphoidea -serpierite -serpigines -serpiginous -serpiginously -serpigo -serpigoes -serpivolant -serpolet -Serpukhov -Serpula -Serpulae -serpulan -serpulid -Serpulidae -serpulidan -serpuline -serpulite -serpulitic -serpuloid -Serra -serradella -serrae -serrage -serrai -serran -serrana -serranid -Serranidae -serranids -Serrano -serranoid -serranos -Serranus -Serrasalmo -serrate -serrate-ciliate -serrated -serrate-dentate -serrates -Serratia -serratic -serratiform -serratile -serrating -serration -serratirostral -serrato- -serratocrenate -serratodentate -serratodenticulate -serratoglandulous -serratospinose -serrature -serratus -serrefile -serrefine -Serrell -serre-papier -serry -serri- -serricorn -Serricornia -Serridentines -Serridentinus -serried -serriedly -serriedness -serries -Serrifera -serriferous -serriform -serrying -serring -serriped -serrirostrate -serrula -serrulate -serrulated -serrulateed -serrulation -serrurerie -sers -Sert -serta -serting -sertion -sertive -Sertorius -Sertularia -sertularian -Sertulariidae -sertularioid -sertularoid -sertule -sertulum -sertum -serule -serum -serumal -serumdiagnosis -serums -serum's -serut -serv -servable -servage -Servais -serval -servaline -servals -servant -servantcy -servantdom -servantess -servantless -servantlike -servantry -servants -servant's -servantship -servation -serve -served -servente -serventism -serve-out -Server -servery -servers -serves -servet -Servetian -Servetianism -Servetnick -servette -Servetus -Servia -serviable -Servian -Service -serviceability -serviceable -serviceableness -serviceably -serviceberry -serviceberries -serviced -serviceless -servicelessness -serviceman -servicemen -servicer -servicers -services -servicewoman -servicewomen -servicing -Servidor -servient -serviential -serviette -serviettes -servile -servilely -servileness -servilism -servility -servilities -servilize -serving -servingman -servings -servist -Servite -serviteur -servitial -servitium -servitor -servitorial -servitors -servitorship -servitress -servitrix -servitude -servitudes -serviture -Servius -servo -servo- -servocontrol -servo-control -servo-controlled -Servo-croat -Servo-croatian -servoed -servoing -servolab -servomechanical -servomechanically -servomechanics -servomechanism -servomechanisms -servomotor -servo-motor -servomotors -servo-pilot -servos -servotab -servulate -servus -serwamby -SES -sesame -sesames -sesamin -sesamine -sesamoid -sesamoidal -sesamoiditis -sesamoids -sesamol -Sesamum -Sesban -Sesbania -sescuncia -sescuple -Seseli -Seshat -Sesia -Sesiidae -seskin -sesma -Sesostris -Sesotho -sesperal -sesqui -sesqui- -sesquialter -sesquialtera -sesquialteral -sesquialteran -sesquialterous -sesquibasic -sesquicarbonate -sesquicentenary -sesquicentennial -sesquicentennially -sesquicentennials -sesquichloride -sesquiduple -sesquiduplicate -sesquih -sesquihydrate -sesquihydrated -sesquinona -sesquinonal -sesquioctava -sesquioctaval -sesquioxide -sesquipedal -sesquipedalian -sesquipedalianism -sesquipedalism -sesquipedality -sesquiplane -sesquiplicate -sesquiquadrate -sesquiquarta -sesquiquartal -sesquiquartile -sesquiquinta -sesquiquintal -sesquiquintile -sesquisalt -sesquiseptimal -sesquisextal -sesquisilicate -sesquisquare -sesquisulphate -sesquisulphide -sesquisulphuret -sesquiterpene -sesquitertia -sesquitertial -sesquitertian -sesquitertianal -SESRA -sess -sessa -sessed -Sesser -Sesshu -sessile -sessile-eyed -sessile-flowered -sessile-fruited -sessile-leaved -sessility -Sessiliventres -session -sessional -sessionally -sessionary -Sessions -session's -Sessler -sesspool -sesspools -Sessrymnir -SEST -sesterce -sesterces -sestertia -sestertium -sestertius -sestet -sestets -sestetto -sesti -sestia -sestiad -Sestian -sestina -sestinas -sestine -sestines -sestole -sestolet -seston -Sestos -sestuor -Sesuto -Sesuvium -SET -set- -Seta -setaceous -setaceously -setae -setal -Setaria -setarid -setarious -set-aside -setation -setback -set-back -setbacks -Setbal -setbolt -setdown -set-down -setenant -set-fair -setfast -Seth -set-hands -sethead -Sethi -Sethian -Sethic -Sethite -Sethrida -SETI -seti- -Setibo -setier -Setifera -setiferous -setiform -setiger -setigerous -set-in -setioerr -setiparous -setirostral -setline -setlines -setling -setness -setnet -Seto -setoff -set-off -setoffs -Seton -setons -Setophaga -Setophaginae -setophagine -setose -setous -setout -set-out -setouts -setover -setpfx -sets -set's -setscrew -setscrews -setsman -set-stitched -sett -settable -settaine -settecento -settee -settees -setter -Settera -setter-forth -settergrass -setter-in -setter-on -setter-out -setters -setter's -setter-to -setter-up -setterwort -settima -settimo -setting -setting-free -setting-out -settings -setting-to -setting-up -Settle -settleability -settleable -settle-bench -settle-brain -settled -settledly -settledness -settle-down -settlement -settlements -settlement's -settler -settlerdom -settlers -settles -settling -settlings -settlor -settlors -set-to -settos -setts -settsman -Setubal -setuid -setula -setulae -setule -setuliform -setulose -setulous -setup -set-up -set-upness -setups -setwall -setwise -setwork -setworks -seudah -seugh -Seumas -Seurat -Seuss -Sev -Sevan -Sevastopol -Seve -seven -seven-banded -sevenbark -seven-branched -seven-caped -seven-channeled -seven-chorded -seven-cornered -seven-day -seven-eyed -seven-eyes -seven-eleven -Sevener -seven-figure -sevenfold -sevenfolded -sevenfoldness -seven-foot -seven-footer -seven-formed -seven-gated -seven-gilled -seven-hand -seven-headed -seven-hilled -seven-hilly -seven-holes -seven-horned -seven-year -seven-inch -seven-league -seven-leaved -seven-line -seven-masted -Sevenmile -seven-mouthed -seven-nerved -sevennight -seven-ounce -seven-part -sevenpence -sevenpenny -seven-piled -seven-ply -seven-point -seven-poled -seven-pronged -seven-quired -sevens -sevenscore -seven-sealed -seven-shilling -seven-shooter -seven-sided -seven-syllabled -seven-sisters -seven-spot -seven-spotted -seventeen -seventeenfold -seventeen-hundreds -seventeen-year -seventeens -seventeenth -seventeenthly -seventeenths -seventh -seventh-day -seven-thirty -seven-thirties -seventhly -seven-thorned -sevenths -Seventy -seventy-day -seventy-dollar -seventy-eight -seventy-eighth -seventies -seventieth -seventieths -seventy-fifth -seventy-first -seventy-five -seventyfold -seventy-foot -seventy-footer -seventy-four -seventy-fourth -seventy-horse -seventy-year -seventy-mile -seven-tined -seventy-nine -seventy-ninth -seventy-odd -seventy-one -seventy-second -seventy-seven -seventy-seventh -seventy-six -seventy-sixth -seventy-third -seventy-three -seventy-ton -seventy-two -seven-toned -seven-twined -seven-twisted -seven-up -sever -severability -severable -several -several-celled -several-flowered -severalfold -several-fold -severality -severalization -severalize -severalized -severalizing -severally -several-lobed -several-nerved -severalness -several-ribbed -severals -severalth -severalty -severalties -Severance -severances -severate -severation -severe -severed -severedly -severely -Severen -severeness -severer -severers -severest -Severy -Severian -severies -Severin -severing -severingly -Severini -Severinus -severish -severity -severities -severity's -severization -severize -Severn -Severo -severs -Seversky -Severson -Severus -seviche -seviches -sevier -Sevierville -Sevigne -Sevik -sevillanas -Seville -Sevillian -sevres -sevum -sew -sewable -sewage -sewages -sewan -Sewanee -sewans -sewar -Seward -Sewaren -sewars -sewed -Sewel -Sewell -sewellel -Sewellyn -sewen -sewer -sewerage -sewerages -sewered -sewery -sewering -sewerless -sewerlike -sewerman -sewers -Sewickley -sewin -sewing -sewings -sewless -sewn -Sewole -Sewoll -sewround -sews -sewster -SEX -sex- -sexadecimal -sexagenary -sexagenarian -sexagenarianism -sexagenarians -sexagenaries -sexagene -Sexagesima -sexagesimal -sexagesimally -sexagesimals -sexagesimo-quarto -sexagonal -sexangle -sexangled -sexangular -sexangularly -sexannulate -sexarticulate -sexavalent -sexcentenary -sexcentenaries -sexcuspidate -sexdecillion -sexdecillions -sexdigital -sexdigitate -sexdigitated -sexdigitism -sexed -sexed-up -sexenary -sexennial -sexennially -sexennium -sexern -sexes -sexfarious -sexfid -sexfoil -sexhood -sexy -sexi- -sexier -sexiest -sexifid -sexily -sexillion -sexiness -sexinesses -sexing -sex-intergrade -sexiped -sexipolar -sexisyllabic -sexisyllable -sexism -sexisms -sexist -sexists -sexitubercular -sexivalence -sexivalency -sexivalent -sexless -sexlessly -sexlessness -sexly -sexlike -sex-limited -sex-linkage -sex-linked -sexlocular -sexology -sexologic -sexological -sexologies -sexologist -sexpartite -sexploitation -sexpot -sexpots -sexradiate -sex-starved -sext -sextactic -sextain -sextains -sextan -Sextans -Sextant -sextantal -Sextantis -sextants -sextar -sextary -sextarii -sextarius -sextennial -sextern -sextet -sextets -sextette -sextettes -sextic -sextile -sextiles -Sextilis -sextillion -sextillions -sextillionth -sextipara -sextipartite -sextipartition -sextiply -sextipolar -sexto -sextodecimo -sexto-decimo -sextodecimos -sextole -sextolet -Sexton -sextoness -sextons -sextonship -Sextonville -sextos -sextry -sexts -sextubercular -sextuberculate -sextula -sextulary -sextumvirate -sextuor -sextuple -sextupled -sextuples -sextuplet -sextuplets -sextuplex -sextuply -sextuplicate -sextuplicated -sextuplicating -sextupling -sextur -Sextus -sexual -sexuale -sexualisation -sexualism -sexualist -sexuality -sexualities -sexualization -sexualize -sexualized -sexualizing -sexually -sexuous -sexupara -sexuparous -Sezen -Sezession -SF -Sfax -Sfc -SFD -SFDM -sferics -sfm -SFMC -SFO -sfogato -sfoot -'sfoot -Sforza -sforzando -sforzandos -sforzato -sforzatos -sfree -SFRPG -sfumato -sfumatos -sfz -SG -sgabelli -sgabello -sgabellos -Sgad -sgd -sgd. -SGI -SGML -SGMP -SGP -sgraffiato -sgraffiti -sgraffito -Sgt -sh -SHA -shaatnez -shab -Shaba -Shaban -sha'ban -shabandar -shabash -Shabbas -Shabbat -Shabbath -shabbed -shabby -shabbier -shabbiest -shabbify -shabby-genteel -shabby-gentility -shabbyish -shabbily -shabbiness -shabbinesses -Shabbir -shabble -Shabbona -shabbos -shabeque -shabrack -shabracque -shab-rag -shabroon -shabunder -Shabuoth -Shacharith -shachle -shachly -shack -shackanite -shackatory -shackbolt -shacked -shacker -shacky -shacking -shackings -shackland -shackle -shacklebone -shackled -shackledom -Shacklefords -shackler -shacklers -shackles -Shackleton -shacklewise -shackly -shackling -shacko -shackoes -shackos -shacks -shad -Shadai -shadbelly -shad-belly -shad-bellied -shadberry -shadberries -shadbird -shadblow -shad-blow -shadblows -shadbush -shadbushes -shadchan -shadchanim -shadchans -shadchen -Shaddock -shaddocks -shade -shade-bearing -shaded -shade-enduring -shadeful -shade-giving -shade-grown -shadeless -shadelessness -shade-loving -shader -shaders -shades -shade-seeking -shadetail -shadfly -shadflies -shadflower -shady -Shadydale -shadier -shadiest -shadily -shadine -shadiness -shading -shadings -Shadyside -shadkan -shado -shadoof -shadoofs -Shadow -shadowable -shadowbox -shadow-box -shadowboxed -shadowboxes -shadowboxing -shadowed -shadower -shadowers -shadowfoot -shadowgram -shadowgraph -shadowgraphy -shadowgraphic -shadowgraphist -shadowy -shadowier -shadowiest -shadowily -shadowiness -shadowing -shadowishly -shadowist -shadowland -shadowless -shadowlessness -shadowly -shadowlike -shadows -Shadrach -shadrachs -shads -shaduf -shadufs -Shadwell -Shae -SHAEF -Shaefer -Shaeffer -Shaer -Shafer -Shaff -Shaffer -Shaffert -shaffle -shafii -Shafiite -shaft -shafted -Shafter -Shaftesbury -shaftfoot -shafty -shafting -shaftings -shaftless -shaftlike -shaftman -shaftment -shaft-rubber -shafts -shaft's -Shaftsburg -Shaftsbury -shaftsman -shaft-straightener -shaftway -shag -shaganappi -shaganappy -shagbag -shagbark -shagbarks -shagbush -shagged -shaggedness -shaggy -shaggy-barked -shaggy-bearded -shaggy-bodied -shaggy-coated -shaggier -shaggiest -shaggy-fleeced -shaggy-footed -shaggy-haired -shaggy-leaved -shaggily -shaggymane -shaggy-mane -shaggy-maned -shagginess -shagging -shag-haired -Shagia -shaglet -shaglike -shagpate -shagrag -shag-rag -shagreen -shagreened -shagreens -shagroon -shags -shagtail -Shah -Shahada -Shahansha -Shahaptian -Shahaptians -shaharit -Shaharith -shahdom -shahdoms -shahee -shaheen -shahi -shahid -shahidi -shahin -Shahjahanpur -shahs -shahzada -shahzadah -shahzadi -shai -Shay -Shaia -Shaya -shayed -Shaigia -Shaikh -shaykh -shaikhi -Shaikiyeh -Shayla -Shaylah -Shaylyn -Shaylynn -Shayn -Shaina -Shayna -Shaine -Shayne -shaird -shairds -shairn -shairns -Shays -Shaysite -Shaitan -shaitans -Shaiva -Shaivism -Shak -Shaka -shakable -shakably -shake -shakeable -shake-bag -shakebly -shake-cabin -shakedown -shake-down -shakedowns -shakefork -shake-hands -shaken -shakenly -shakeout -shake-out -shakeouts -shakeproof -Shaker -shakerag -shake-rag -Shakerdom -Shakeress -Shakerism -Shakerlike -Shakers -shakes -shakescene -Shakespeare -Shakespearean -Shakespeareana -Shakespeareanism -Shakespeareanly -shakespeareans -Shakespearian -Shakespearianism -Shakespearize -Shakespearolater -Shakespearolatry -shakeup -shake-up -shakeups -shakha -Shakhty -shaky -Shakyamuni -shakier -shakiest -shakil -shakily -shakiness -shakinesses -shaking -shakingly -shakings -shako -shakoes -Shakopee -shakos -Shaks -shaksheer -Shakspere -shaksperean -Shaksperian -Shaksperianism -Shakta -Shakti -shaktis -Shaktism -shaku -shakudo -shakuhachi -Shakuntala -Shala -Shalako -shalder -shale -shaled -shalee -shaley -shalelike -shaleman -shales -shaly -shalier -shaliest -Shalimar -shall -shallal -shally -shallon -shalloon -shalloons -shallop -shallopy -shallops -shallot -shallots -Shallotte -shallow -Shallowater -shallow-bottomed -shallowbrain -shallowbrained -shallow-brained -shallow-draft -shallowed -shallower -shallowest -shallow-footed -shallow-forded -shallow-headed -shallowhearted -shallow-hulled -shallowy -shallowing -shallowish -shallowist -shallowly -shallow-minded -shallow-mindedness -shallowness -shallowpate -shallowpated -shallow-pated -shallow-read -shallow-rooted -shallow-rooting -shallows -shallow-sea -shallow-searching -shallow-sighted -shallow-soiled -shallow-thoughted -shallow-toothed -shallow-waisted -shallow-water -shallow-witted -shallow-wittedness -shallu -Shalna -Shalne -Shalom -shaloms -shalt -shalwar -Sham -Shama -shamable -shamableness -shamably -shamal -shamalo -shaman -shamaness -shamanic -shamanism -shamanist -shamanistic -shamanize -shamans -shamas -Shamash -shamateur -shamateurism -shamba -Shambala -Shambaugh -shamble -shambled -shambles -shambling -shamblingly -shambrier -Shambu -shame -shameable -shame-burnt -shame-crushed -shamed -shame-eaten -shameface -shamefaced -shamefacedly -shamefacedness -shamefast -shamefastly -shamefastness -shameful -shamefully -shamefulness -shameless -shamelessly -shamelessness -shameproof -shamer -shames -shame-shrunk -shamesick -shame-stricken -shame-swollen -shameworthy -shamiana -shamianah -shamim -shaming -shamir -Shamma -Shammai -Shammar -shammas -shammash -shammashi -shammashim -shammasim -shammed -shammer -shammers -shammes -shammy -shammick -shammied -shammies -shammying -shamming -shammish -shammock -shammocky -shammocking -shammos -shammosim -Shamo -shamoy -shamoyed -shamoying -shamois -shamoys -Shamokin -shamos -shamosim -shampoo -shampooed -shampooer -shampooers -shampooing -shampoos -Shamrao -Shamrock -shamrock-pea -shamrocks -shamroot -shams -sham's -shamsheer -shamshir -Shamus -shamuses -Shan -Shana -shanachas -shanachie -shanachus -Shanahan -Shanan -Shanda -Shandaken -Shandean -Shandee -Shandeigh -Shandy -Shandie -shandies -shandygaff -Shandyism -shandite -Shandon -Shandra -shandry -shandrydan -Shane -Shaner -Shang -Shangaan -Shangalla -shangan -Shanghai -shanghaied -shanghaier -shanghaiing -shanghais -shangy -Shango -Shangri-la -Shang-ti -Shani -Shanie -Shaniko -Shank -Shankar -Shankara -Shankaracharya -shanked -shanker -shanking -shankings -shank-painter -shankpiece -Shanks -shanksman -Shanksville -Shanley -Shanleigh -Shanly -Shanna -Shannah -Shannan -Shanney -Shannen -shanny -shannies -Shannock -Shannon -Shannontown -Shanon -shansa -Shansi -shant -shan't -Shanta -Shantee -shantey -shanteys -Shantha -shanti -shanty -shanty-boater -shantied -shanties -shantih -shantihs -shantying -shantylike -shantyman -shantymen -shantis -shanty's -shantytown -Shantow -Shantung -shantungs -shap -shapable -SHAPE -shapeable -shaped -shapeful -shape-knife -shapeless -shapelessly -shapelessness -shapely -shapelier -shapeliest -shapeliness -shapen -Shaper -shapers -shapes -shapeshifter -shape-shifting -shapesmith -shapeup -shape-up -shapeups -shapy -shapier -shapiest -shaping -shapingly -Shapiro -shapka -Shapley -Shapleigh -shapometer -shapoo -shaps -Shaptan -shaptin -SHAR -Shara -sharable -sharada -Sharaf -Sharai -Sharaku -sharan -Sharas -shard -Shardana -shard-born -shard-borne -sharded -shardy -sharding -shards -share -shareability -shareable -sharebone -sharebroker -sharecrop -sharecroped -sharecroping -sharecropped -sharecropper -sharecroppers -sharecropper's -sharecropping -sharecrops -shared -shareef -sharefarmer -shareholder -shareholders -shareholder's -shareholdership -shareman -share-out -shareown -shareowner -sharepenny -sharer -sharers -shares -shareship -sharesman -sharesmen -Sharet -sharewort -Sharezer -shargar -Shargel -sharger -shargoss -Shari -Sharia -shariat -sharif -sharifian -sharifs -Sharyl -Sharyn -sharing -Sharira -Sharity -shark -sharked -sharker -sharkers -sharkful -sharki -sharky -sharking -sharkish -sharkishly -sharkishness -sharklet -sharklike -shark-liver -sharks -shark's -sharkship -sharkskin -sharkskins -sharksucker -Sharl -Sharla -Sharleen -Sharlene -Sharline -Sharma -Sharman -sharn -sharnbud -sharnbug -sharny -sharns -Sharon -Sharona -Sharonville -Sharos -Sharp -sharp-angled -sharp-ankled -sharp-back -sharp-backed -sharp-beaked -sharp-bellied -sharpbill -sharp-billed -sharp-biting -sharp-bottomed -sharp-breasted -sharp-clawed -sharp-cornered -sharp-cut -sharp-cutting -Sharpe -sharp-eared -sharped -sharp-edged -sharp-eye -sharp-eyed -sharp-eyes -sharp-elbowed -sharpen -sharpened -sharpener -sharpeners -sharpening -sharpens -sharper -sharpers -Sharpes -sharpest -sharp-faced -sharp-fanged -sharp-featured -sharp-flavored -sharp-freeze -sharp-freezer -sharp-freezing -sharp-froze -sharp-frozen -sharp-fruited -sharp-gritted -sharp-ground -sharp-headed -sharp-heeled -sharp-horned -sharpy -sharpie -sharpies -sharping -sharpish -sharpite -sharp-keeled -sharp-leaved -Sharples -sharply -sharpling -sharp-looking -sharp-minded -sharp-nebbed -sharpness -sharpnesses -sharp-nosed -sharp-nosedly -sharp-nosedness -sharp-odored -sharp-petaled -sharp-piercing -sharp-piled -sharp-pointed -sharp-quilled -sharp-ridged -Sharps -sharpsaw -Sharpsburg -sharp-set -sharp-setness -sharpshin -sharp-shinned -sharpshod -sharpshoot -sharpshooter -sharpshooters -sharpshooting -sharpshootings -sharp-sighted -sharp-sightedly -sharp-sightedness -sharp-smelling -sharp-smitten -sharp-snouted -sharp-staked -sharp-staring -sharpster -Sharpsville -sharptail -sharp-tailed -sharp-tasted -sharp-tasting -sharp-tempered -sharp-toed -sharp-tongued -sharp-toothed -sharp-topped -Sharptown -sharp-visaged -sharpware -sharp-whetted -sharp-winged -sharp-witted -sharp-wittedly -sharp-wittedness -Sharra -sharrag -Sharras -sharry -Sharrie -Sharron -Shartlesville -shashlick -shashlik -shashliks -shaslick -shaslik -shasliks -Shasta -shastaite -Shastan -shaster -shastra -shastracara -shastraik -shastras -shastri -shastrik -shat -shatan -shathmont -Shatt-al-Arab -shatter -shatterable -shatterbrain -shatterbrained -shattered -shatterer -shatterheaded -shattery -shattering -shatteringly -shatterment -shatterpated -shatterproof -shatters -shatterwit -Shattuc -Shattuck -shattuckite -Shattuckville -Shatzer -shauchle -Shauck -shaugh -Shaughn -Shaughnessy -shaughs -shaul -Shaula -shauled -shauling -shauls -Shaum -Shaun -Shauna -shaup -shauri -shauwe -shavable -shave -shaveable -shaved -shavee -shavegrass -shaveling -shaven -Shaver -shavery -shavers -shaves -Shavese -shavester -shavetail -shaveweed -Shavian -Shaviana -Shavianism -shavians -shavie -shavies -shaving -shavings -Shavuot -Shavuoth -Shaw -shawabti -Shawanee -Shawanese -Shawano -Shawboro -shawed -shawfowl -shawy -shawing -shawl -shawled -shawling -shawlless -shawllike -shawls -shawl's -shawlwise -shawm -shawms -Shawmut -Shawn -Shawna -Shawnee -shawnees -Shawneetown -shawneewood -shawny -shaws -Shawsville -Shawville -Shawwal -shazam -Shazar -SHCD -Shcheglovsk -Shcherbakov -she -Shea -she-actor -sheading -she-adventurer -sheaf -sheafage -sheafed -Sheaff -sheafy -sheafing -sheaflike -sheafripe -sheafs -Sheakleyville -sheal -shealing -shealings -sheals -shean -shea-nut -she-ape -she-apostle -Shear -shearbill -sheard -sheared -Shearer -shearers -sheargrass -shear-grass -shearhog -shearing -shearlegs -shear-legs -shearless -shearling -shearman -shearmouse -shears -shearsman -'sheart -sheartail -shearwater -shearwaters -sheas -she-ass -sheat -sheatfish -sheatfishes -sheath -sheathbill -sheathe -sheathed -sheather -sheathery -sheathers -sheathes -sheath-fish -sheathy -sheathier -sheathiest -sheathing -sheathless -sheathlike -sheaths -sheath-winged -sheave -sheaved -sheaveless -sheaveman -sheaves -sheaving -Sheba -she-baker -she-balsam -shebang -shebangs -shebar -Shebat -shebean -shebeans -she-bear -she-beech -shebeen -shebeener -shebeening -shebeens -Sheboygan -she-captain -she-chattel -Shechem -Shechemites -Shechina -Shechinah -shechita -shechitah -she-costermonger -she-cousin -shed -she'd -shedable -Shedd -sheddable -shedded -shedder -shedders -shedding -she-demon -sheder -she-devil -shedhand -shedim -Shedir -shedlike -shedman -she-dragon -Sheds -shedu -shedwise -shee -Sheeb -Sheedy -sheefish -sheefishes -Sheehan -sheel -Sheela -Sheelagh -Sheelah -Sheeler -sheely -sheeling -Sheen -Sheena -Sheene -sheened -sheeney -sheeneys -sheenful -sheeny -sheenie -sheenier -sheenies -sheeniest -sheening -sheenless -sheenly -sheens -sheep -sheepback -sheepbacks -sheepbell -sheepberry -sheepberries -sheepbine -sheepbiter -sheep-biter -sheepbiting -sheepcot -sheepcote -sheepcrook -sheepdip -sheep-dip -sheepdog -sheepdogs -sheepfaced -sheepfacedly -sheepfacedness -sheepfold -sheepfolds -sheepfoot -sheepfoots -sheepgate -sheep-grazing -sheephead -sheepheaded -sheepheads -sheephearted -sheepherder -sheepherding -sheephook -sheephouse -sheep-hued -sheepy -sheepify -sheepified -sheepifying -sheepish -sheepishly -sheepishness -sheepkeeper -sheepkeeping -sheepkill -sheep-kneed -sheepless -sheeplet -sheep-lice -sheeplike -sheepling -sheepman -sheepmaster -sheepmen -sheepmint -sheepmonger -sheepnose -sheepnut -sheeppen -sheep-root -sheep's-bit -sheepshank -Sheepshanks -sheepshead -sheepsheadism -sheepsheads -sheepshear -sheepshearer -sheep-shearer -sheepshearing -sheep-shearing -sheepshed -sheep-sick -sheepskin -sheepskins -sheep-spirited -sheepsplit -sheepsteal -sheepstealer -sheepstealing -sheep-tick -sheepwalk -sheepwalker -sheepweed -sheep-white -sheep-witted -sheer -Sheeran -sheer-built -sheered -Sheeree -sheerer -sheerest -sheer-hulk -sheering -sheerlegs -sheerly -Sheerness -sheer-off -sheers -sheet -sheetage -sheet-anchor -sheet-block -sheeted -sheeter -sheeters -sheetfed -sheet-fed -sheetflood -sheetful -sheety -sheeting -sheetings -sheetless -sheetlet -sheetlike -sheetling -Sheetrock -Sheets -sheetways -sheetwash -sheetwise -sheetwork -sheetwriting -sheeve -sheeves -Sheff -Sheffy -Sheffie -Sheffield -she-fish -she-foal -she-fool -she-fox -she-friend -shegets -shegetz -she-gypsy -she-goat -she-god -She-greek -Shehab -shehita -shehitah -Sheya -Sheyenne -sheik -sheikdom -sheikdoms -sheikh -sheikhdom -sheikhdoms -sheikhly -sheikhlike -sheikhs -sheikly -sheiklike -sheiks -Sheila -Sheilah -Sheila-Kathryn -sheilas -sheyle -sheiling -she-ironbark -Sheitan -sheitans -sheitel -sheitlen -shekel -shekels -Shekinah -she-kind -she-king -Shel -Shela -Shelagh -Shelah -Shelba -Shelbi -Shelby -Shelbiana -Shelbina -Shelbyville -Shelburn -Shelburne -sheld -Sheldahl -sheldapple -sheld-duck -Shelden -shelder -sheldfowl -Sheldon -Sheldonville -sheldrake -sheldrakes -shelduck -shelducks -Sheley -Shelepin -shelf -shelfback -shelffellow -shelfful -shelffuls -shelfy -shelflike -shelflist -shelfmate -shelfpiece -shelfroom -shelf-room -shelfworn -Shelia -Shelyak -Sheline -she-lion -Shell -she'll -shellac -shellack -shellacked -shellacker -shellackers -shellacking -shellackings -shellacks -shellacs -shellak -Shellans -shellapple -shellback -shellbark -shellblow -shellblowing -shellbound -shellburst -shell-carving -shellcracker -shelleater -shelled -Shelley -Shelleyan -Shelleyana -shelleyesque -sheller -shellers -shellfire -shellfish -shell-fish -shellfishery -shellfisheries -shellfishes -shellflower -shellful -shellhead -Shelli -Shelly -Shellian -shellycoat -Shellie -shellier -shelliest -shelliness -shelling -shell-leaf -shell-less -shell-like -Shellman -shellmen -shellmonger -shellpad -shellpot -shellproof -shells -Shellsburg -shellshake -shell-shaped -shell-shock -shellshocked -shell-shocked -shellum -shellwork -shellworker -shell-worker -Shelman -Shelocta -s'help -Shelta -sheltas -shelter -shelterage -shelterbelt -sheltered -shelterer -sheltery -sheltering -shelteringly -shelterless -shelterlessness -shelters -shelterwood -shelty -sheltie -shelties -Shelton -sheltron -shelve -shelved -shelver -shelvers -shelves -shelvy -shelvier -shelviest -shelving -shelvingly -shelvingness -shelvings -Shem -Shema -shemaal -Shemaka -she-malady -Shembe -sheminith -Shemite -Shemitic -Shemitish -she-monster -shemozzle -Shemu -Shen -Shena -Shenan -Shenandoah -shenanigan -shenanigans -shend -shendful -shending -shends -she-negro -Sheng -Shenyang -Shenshai -Shensi -Shenstone -shent -she-oak -sheogue -Sheol -sheolic -sheols -Shep -she-page -she-panther -Shepard -Shepardsville -she-peace -Shepherd -shepherdage -shepherddom -shepherded -shepherdess -shepherdesses -shepherdhood -shepherdy -Shepherdia -shepherding -shepherdish -shepherdism -shepherdize -shepherdless -shepherdly -shepherdlike -shepherdling -shepherdry -shepherds -shepherd's -shepherd's-purse -shepherd's-scabious -shepherds-staff -Shepherdstown -Shepherdsville -she-pig -she-pine -Shepley -Sheply -she-poet -she-poetry -Shepp -Sheppard -sheppeck -sheppey -Shepperd -shepperding -sheppherded -sheppick -Sheppton -she-preacher -she-priest -shepstare -shepster -Sher -Sherani -Sherar -Sherard -Sherardia -sherardize -sherardized -sherardizer -sherardizing -Sheratan -Sheraton -sherbacha -sherbert -sherberts -sherbet -sherbetlee -sherbets -sherbetzide -Sherborn -Sherborne -Sherbrooke -Sherburn -Sherburne -sherd -sherds -Shere -Sheree -shereef -shereefs -she-relative -Sherer -Shererd -Sherfield -Sheri -sheria -sheriat -Sheridan -Sherie -Sherye -sherif -sherifa -sherifate -sheriff -sheriffalty -sheriffcy -sheriffcies -sheriffdom -sheriffess -sheriffhood -sheriff-pink -sheriffry -sheriffs -sheriff's -sheriffship -sheriffwick -sherifi -sherify -sherifian -sherifs -Sheriyat -Sheryl -Sheryle -Sherilyn -Sherill -sheristadar -Sherj -Sherl -Sherley -Sherline -Sherlock -Sherlocke -sherlocks -Sherm -Sherman -Shermy -Shermie -Sherod -sheroot -sheroots -Sherourd -Sherpa -sherpas -Sherr -Sherramoor -Sherrard -Sherrer -Sherri -Sherry -Sherrie -sherries -Sherrill -Sherrymoor -Sherrington -Sherris -sherrises -sherryvallies -Sherrod -Sherrodsville -Shertok -Sherurd -sherwani -Sherwin -Sherwynd -Sherwood -shes -she's -she-saint -she-salmon -she-school -she-scoundrel -Shesha -she-society -she-sparrow -she-sun -sheth -she-thief -Shetland -Shetlander -Shetlandic -shetlands -she-tongue -Shetrit -sheuch -sheuchs -sheugh -sheughs -sheva -Shevat -shevel -sheveled -sheveret -she-villain -Shevlin -Shevlo -shevri -shew -shewa -shewbread -Shewchuk -shewed -shewel -shewer -shewers -she-whale -shewing -she-witch -Shewmaker -shewn -she-wolf -she-woman -shews -SHF -shfsep -shh -shi -shy -Shia -Shiah -shiai -shyam -Shyamal -shiatsu -shiatsus -shiatzu -shiatzus -Shiau -shibah -shibahs -shibar -shibbeen -shibboleth -shibbolethic -shibboleths -shibuichi -shibuichi-doshi -shice -shicer -shick -shicker -shickered -shickers -Shickley -shicksa -shicksas -shick-shack -Shickshinny -shide -shydepoke -Shidler -shied -Shieh -Shiekh -shiel -shield -shieldable -shield-back -shield-bearer -shield-bearing -shieldboard -shield-breaking -shielddrake -shielded -shielder -shielders -shieldfern -shield-fern -shieldflower -shield-headed -shielding -shieldings -shield-leaved -shieldless -shieldlessly -shieldlessness -shieldlike -shieldling -shieldmay -shield-maiden -shieldmaker -Shields -shield-shaped -shieldtail -shieling -shielings -shiels -Shien -shier -shyer -shiers -shyers -shies -shiest -shyest -Shiff -shiffle-shuffle -Shifra -Shifrah -shift -shiftability -shiftable -shiftage -shifted -shifter -shifters -shiftful -shiftfulness -shifty -shifty-eyed -shiftier -shiftiest -shiftily -shiftiness -shifting -shiftingly -shiftingness -shiftless -shiftlessly -shiftlessness -shiftlessnesses -shiftman -shifts -Shig -Shigella -shigellae -shigellas -shiggaion -shigionoth -shigram -Shih -Shihchiachuang -shih-tzu -Shii -shying -shyish -Shiism -Shiite -Shiitic -Shik -shikar -shikara -shikaree -shikarees -shikargah -shikari -shikaris -shikarred -shikarring -shikars -shikasta -Shikibu -shikii -shikimi -shikimic -shikimol -shikimole -shikimotoxin -shikken -shikker -shikkers -shiko -Shikoku -shikra -shiksa -shiksas -shikse -shikses -shilf -shilfa -Shilh -Shilha -shily -shyly -shilingi -shill -shilla -shillaber -shillala -shillalah -shillalas -shilled -Shillelagh -shillelaghs -shillelah -Shiller -shillet -shillety -shillhouse -shilly -shillibeer -shilling -shillingless -shillings -shillingsworth -Shillington -shillyshally -shilly-shally -shilly-shallied -shillyshallyer -shilly-shallyer -shilly-shallies -shilly-shallying -shilly-shallyingly -Shillong -shilloo -shills -Shilluh -Shilluk -Shylock -shylocked -shylocking -Shylockism -shylocks -Shiloh -shilpit -shilpits -shim -shimal -Shimazaki -Shimberg -Shimei -Shimkus -shimmed -shimmey -shimmer -shimmered -shimmery -shimmering -shimmeringly -shimmers -shimmy -shimmied -shimmies -shimmying -shimming -Shimonoseki -shimose -shimper -shims -shim-sham -Shin -Shina -shinaniging -Shinar -shinarump -Shinberg -shinbone -shin-bone -shinbones -shindy -shindies -shindig -shindigs -shindys -shindle -shine -shined -shineless -Shiner -shiners -shiner-up -shines -shyness -shynesses -Shing -Shingishu -shingle -shingle-back -shingled -shingler -shinglers -shingles -shingle's -Shingleton -Shingletown -shinglewise -shinglewood -shingly -shingling -shingon -Shingon-shu -shinguard -Shinhopple -shiny -shiny-backed -Shinichiro -shinier -shiniest -shinily -shininess -shining -shiningly -shiningness -shinkin -shinleaf -shinleafs -shinleaves -Shinnecock -shinned -shinney -shinneys -shinner -shinnery -shinneries -shinny -shinnied -shinnies -shinnying -shinning -Shinnston -shinplaster -shins -Shin-shu -shinsplints -shintai -shin-tangle -shinty -shintyan -shintiyan -Shinto -Shintoism -Shintoist -Shintoistic -shintoists -Shintoize -Shinwari -shinwood -shinza -Shiocton -ship -shipboard -shipboards -shipboy -shipborne -shipbound -shipbreaking -shipbroken -shipbuild -shipbuilder -shipbuilders -shipbuilding -ship-chandler -shipcraft -shipentine -shipferd -shipfitter -shipful -shipfuls -shiphire -shipholder -ship-holder -shipyard -shipyards -shipkeeper -shiplap -shiplaps -Shipley -shipless -shiplessly -shiplet -shipload -ship-load -shiploads -Shipman -shipmanship -shipmast -shipmaster -shipmate -shipmates -shipmatish -shipmen -shipment -shipments -shipment's -ship-minded -ship-mindedly -ship-mindedness -ship-money -ship-of-war -shypoo -shipowner -shipowning -Shipp -shippable -shippage -shipped -Shippee -shippen -shippens -Shippensburg -Shippenville -shipper -shippers -shipper's -shippy -shipping -shipping-dry -shippings -shipplane -shippo -shippon -shippons -shippound -shiprade -ship-rigged -ships -ship's -shipshape -ship-shape -ship-shaped -shipshapely -Shipshewana -shipside -shipsides -shipsmith -shipt -ship-to-shore -shipway -shipways -shipward -shipwards -shipwork -shipworm -shipworms -shipwreck -shipwrecked -shipwrecky -shipwrecking -shipwrecks -shipwright -shipwrightery -shipwrightry -shipwrights -Shir -Shira -Shirah -shirakashi -shiralee -shirallee -Shiraz -Shirberg -Shire -shirehouse -shireman -shiremen -shire-moot -shires -shirewick -Shiri -Shirk -shirked -shirker -shirkers -shirky -shirking -shirks -Shirl -Shirland -Shirlands -shirlcock -Shirlee -Shirleen -Shirley -Shirleysburg -Shirlene -Shirlie -Shirline -Shiro -Shiroma -shirpit -shirr -shirra -shirred -shirrel -shirring -shirrings -shirrs -shirt -shirtband -shirtdress -shirt-dress -shirtfront -shirty -shirtier -shirtiest -shirtiness -shirting -shirtings -shirtless -shirtlessness -shirtlike -shirtmake -shirtmaker -shirtmaking -shirtman -shirtmen -shirts -shirtsleeve -shirt-sleeve -shirt-sleeved -shirttail -shirt-tail -shirtwaist -shirtwaister -Shirvan -shish -shisham -shishya -Shishko -shisn -shist -shyster -shysters -shists -shit -shita -shitepoke -shithead -shit-headed -shitheel -shither -shits -shittah -shittahs -shitted -shitten -shitty -shittier -shittiest -Shittim -shittims -shittimwood -shittiness -shitting -shittle -shiv -Shiva -shivah -shivahs -Shivaism -Shivaist -Shivaistic -Shivaite -shivaree -shivareed -shivareeing -shivarees -shivas -shive -shivey -Shively -shiver -shivered -shivereens -shiverer -shiverers -shivery -Shiverick -shivering -shiveringly -shiverproof -Shivers -shiversome -shiverweed -shives -shivy -shivoo -shivoos -shivs -shivvy -shivzoku -shizoku -Shizuoka -Shkod -Shkoder -Shkodra -shkotzim -Shkupetar -shlemiehl -shlemiel -shlemiels -shlemozzle -shlep -shlepp -shlepped -shlepps -shleps -shlimazel -shlimazl -shlock -shlocks -Shlomo -Shlu -Shluh -shlump -shlumped -shlumpy -shlumps -SHM -shmaltz -shmaltzy -shmaltzier -shmaltziest -shmear -shmears -shmo -shmoes -shmooze -shmoozed -shmoozes -shmuck -shmucks -Shmuel -shnaps -shnook -shnooks -sho -Shoa -shoad -shoader -shoal -shoalbrain -shoaled -shoaler -shoalest -shoaly -shoalier -shoaliest -shoaliness -shoaling -shoalness -Shoals -shoal's -shoalwise -shoat -shoats -Shobonier -shochet -shochetim -shochets -shock -shockability -shockable -shock-bucker -shock-dog -shocked -shockedness -shocker -shockers -shockhead -shock-head -shockheaded -shockheadedness -shocking -shockingly -shockingness -Shockley -shocklike -shockproof -shocks -shockstall -shockwave -shod -shodden -shoddy -shoddydom -shoddied -shoddier -shoddies -shoddiest -shoddying -shoddyism -shoddyite -shoddily -shoddylike -shoddiness -shoddinesses -shoddyward -shoddywards -shode -shoder -shoe -shoebill -shoebills -shoebinder -shoebindery -shoebinding -shoebird -shoeblack -shoeboy -shoebrush -shoe-cleaning -shoecraft -shoed -shoeflower -shoehorn -shoe-horn -shoehorned -shoehorning -shoehorns -shoeing -shoeing-horn -shoeingsmith -shoelace -shoelaces -shoe-leather -shoeless -shoemake -shoe-make -Shoemaker -shoemakers -Shoemakersville -shoemaking -shoeman -shoemold -shoepac -shoepack -shoepacks -shoepacs -shoer -shoers -shoes -shoescraper -shoeshine -shoeshop -shoesmith -shoe-spoon -shoestring -shoestrings -shoetree -shoetrees -shoewoman -shofar -shofars -shoffroth -shofroth -shoful -shog -shogaol -shogged -shoggie -shogging -shoggy-shoo -shoggle -shoggly -shogi -shogs -shogun -shogunal -shogunate -shoguns -shohet -shohji -shohjis -Shohola -shoya -Shoifet -shoyu -shoyus -shoji -shojis -Shojo -Shokan -shola -Sholapur -shole -Sholeen -Sholem -Sholes -Sholley -Sholokhov -Sholom -sholoms -Shona -shonde -shone -shoneen -shoneens -Shongaloo -shonkinite -shoo -shood -shooed -shoofa -shoofly -shooflies -shoogle -shooi -shoo-in -shooing -shook -shooks -shook-up -shool -shooldarry -shooled -shooler -shooling -shools -shoon -shoop -shoopiltie -shoor -shoos -shoot -shootable -shootboard -shootee -shoot-'em-up -shooter -shooters -shoother -shooting -shootings -shootist -shootman -shoot-off -shootout -shoot-out -shootouts -shoots -shoot-the-chutes -shop -shopboard -shop-board -shopboy -shopboys -shopbook -shopbreaker -shopbreaking -shope -shopfolk -shopful -shopfuls -shopgirl -shopgirlish -shopgirls -shophar -shophars -shophroth -shopkeep -shopkeeper -shopkeeperess -shopkeepery -shopkeeperish -shopkeeperism -shopkeepers -shopkeeper's -shopkeeping -shopland -shoplet -shoplift -shoplifted -shoplifter -shoplifters -shoplifting -shoplifts -shoplike -shop-made -shopmaid -shopman -shopmark -shopmate -shopmen -shopocracy -shopocrat -shoppe -shopped -shopper -shoppers -shopper's -shoppes -shoppy -shoppier -shoppiest -shopping -shoppings -shoppini -shoppish -shoppishness -shops -shop's -shopsoiled -shop-soiled -shopster -shoptalk -shoptalks -Shopville -shopwalker -shopwear -shopwife -shopwindow -shop-window -shopwoman -shopwomen -shopwork -shopworker -shopworn -shoq -Shor -shoran -shorans -Shore -Shorea -shoreberry -shorebird -shorebirds -shorebush -shored -shoreface -shorefish -shorefront -shoregoing -shore-going -Shoreham -shoreyer -shoreland -shoreless -shoreline -shorelines -shoreman -shorer -shores -shore's -shoreside -shoresman -Shoreview -shoreward -shorewards -shoreweed -Shorewood -shoring -shorings -shorl -shorling -shorls -shorn -Shornick -Short -shortage -shortages -shortage's -short-arm -short-armed -short-awned -short-barred -short-barreled -short-beaked -short-bearded -short-billed -short-bitten -short-bladed -short-bobbed -short-bodied -short-branched -shortbread -short-bread -short-breasted -short-breathed -short-breathing -shortcake -short-cake -shortcakes -short-celled -shortchange -short-change -shortchanged -short-changed -shortchanger -short-changer -shortchanges -shortchanging -short-changing -short-chinned -short-cycle -short-cycled -short-circuit -short-circuiter -short-clawed -short-cloaked -shortclothes -shortcoat -shortcomer -shortcoming -shortcomings -shortcoming's -short-commons -short-coupled -short-crested -short-cropped -short-crowned -shortcut -short-cut -shortcuts -shortcut's -short-day -short-dated -short-distance -short-docked -short-drawn -short-eared -shorted -short-eyed -shorten -shortened -shortener -shorteners -shortening -shortenings -shortens -Shorter -Shorterville -shortest -short-extend -short-faced -shortfall -shortfalls -short-fed -short-fingered -short-finned -short-footed -short-fruited -short-grained -short-growing -short-hair -short-haired -shorthand -shorthanded -short-handed -shorthandedness -shorthander -short-handled -shorthands -shorthandwriter -short-haul -shorthead -shortheaded -short-headed -short-headedness -short-heeled -shortheels -Shorthorn -short-horned -shorthorns -shorty -Shortia -shortias -shortie -shorties -shorting -shortish -shortite -short-jointed -short-keeled -short-laid -short-landed -short-lasting -short-leaf -short-leaved -short-legged -shortly -shortliffe -short-limbed -short-lined -short-list -short-lived -short-livedness -short-living -short-long -short-lunged -short-made -short-manned -short-measured -short-mouthed -short-nailed -short-napped -short-necked -shortness -shortnesses -short-nighted -short-nosed -short-order -short-pitch -short-podded -short-pointed -short-quartered -short-range -short-run -short-running -shorts -shortschat -short-set -short-shafted -short-shanked -short-shelled -short-shipped -short-short -short-shouldered -short-shucks -shortsighted -short-sighted -shortsightedly -shortsightedness -short-sightedness -short-skirted -short-sleeved -short-sloped -short-snouted -shortsome -short-span -short-spined -short-spired -short-spoken -short-spurred -shortstaff -short-staffed -short-stalked -short-staple -short-statured -short-stemmed -short-stepped -short-styled -shortstop -short-stop -shortstops -short-story -short-suiter -Shortsville -short-sword -shorttail -short-tailed -short-tempered -short-term -short-termed -short-time -short-toed -short-tongued -short-toothed -short-trunked -short-trussed -short-twisted -short-waisted -shortwave -shortwaves -short-weight -short-weighter -short-winded -short-windedly -short-windedness -short-winged -short-witted -short-wool -short-wooled -short-wristed -Shortzy -Shoshana -Shoshanna -Shoshone -Shoshonean -Shoshonean-nahuatlan -Shoshones -Shoshoni -Shoshonis -shoshonite -Shostakovich -shot -shot-blasting -shotbush -shot-clog -shotcrete -shote -shotes -shot-free -shotgun -shot-gun -shotgunned -shotgunning -shotguns -shotgun's -shotless -shotlike -shot-log -shotmaker -shotman -shot-peen -shotproof -shot-put -shot-putter -shot-putting -shots -shot's -shotshell -shot-silk -shotsman -shotstar -shot-stified -shott -shotted -shotten -shotter -shotty -shotting -Shotton -shotts -Shotweld -Shotwell -shou -shough -should -should-be -shoulder -shoulder-blade -shoulder-bone -shoulder-clap -shoulder-clapper -shouldered -shoulderer -shoulderette -shoulder-high -shoulder-hitter -shouldering -shoulder-knot -shoulder-piece -shoulders -shoulder-shotten -shoulder-strap -shouldest -shouldn -shouldna -shouldnt -shouldn't -shouldst -shoulerd -shoupeltin -shouse -shout -shouted -shouter -shouters -shouther -shouting -shoutingly -shouts -shoval -shove -shoved -shovegroat -shove-groat -shove-halfpenny -shove-hapenny -shove-ha'penny -shovel -shovelard -shovel-beaked -shovelbill -shovel-bladed -shovelboard -shovel-board -shoveled -shoveler -shovelers -shovelfish -shovel-footed -shovelful -shovelfuls -shovel-handed -shovel-hatted -shovelhead -shovel-headed -shoveling -shovelled -shoveller -shovelling -shovelmaker -shovelman -shovel-mouthed -shovelnose -shovel-nose -shovel-nosed -shovels -shovelsful -shovel-shaped -shovelweed -shover -shovers -shoves -shoving -show -Showa -showable -showance -showbird -showboard -showboat -showboater -showboating -showboats -showbread -show-bread -showcase -showcased -showcases -showcasing -showd -showdom -showdown -showdowns -showed -Showell -shower -shower-bath -showered -showerer -showerful -showerhead -showery -showerier -showeriest -showeriness -showering -showerless -showerlike -showerproof -Showers -showfolk -showful -showgirl -showgirls -showy -showyard -showier -showiest -showy-flowered -showy-leaved -showily -showiness -showinesses -showing -showing-off -showings -showish -showjumping -Showker -showless -Showlow -showman -showmanism -showmanly -showmanry -showmanship -show-me -showmen -shown -showoff -show-off -show-offy -show-offish -showoffishness -showoffs -showpiece -showpieces -showplace -showplaces -showroom -showrooms -shows -showshop -showstopper -show-through -showup -showworthy -show-worthy -shp -shpt -shpt. -shr -shr. -shrab -shradd -shraddha -shradh -shraf -shrag -shram -shrame -shrammed -shrank -shrap -shrape -shrapnel -shrave -shravey -shreadhead -shreading -shred -shredcock -shredded -shredder -shredders -shreddy -shredding -shredless -shredlike -shred-pie -shreds -shred's -Shree -shreeve -Shreeves -shrend -Shreve -Shreveport -shrew -shrewd -shrewd-brained -shrewder -shrewdest -shrewd-headed -shrewdy -shrewdie -shrewdish -shrewdly -shrewd-looking -shrewdness -shrewdnesses -shrewdom -shrewd-pated -shrewd-tongued -shrewd-witted -shrewed -shrewing -shrewish -shrewishly -shrewishness -shrewly -shrewlike -shrewmmice -shrewmouse -shrews -shrew's -Shrewsbury -shrewstruck -shri -shride -shriek -shrieked -shrieker -shriekery -shriekers -shrieky -shriekier -shriekiest -shriekily -shriekiness -shrieking -shriekingly -shriek-owl -shriekproof -shrieks -Shrier -shrieval -shrievalty -shrievalties -shrieve -shrieved -shrieves -shrieving -shrift -shrift-father -shriftless -shriftlessness -shrifts -shrike -shrikes -shrill -shrilled -shrill-edged -shriller -shrillest -shrill-gorged -shrilly -shrilling -shrillish -shrillness -shrills -shrill-toned -shrill-tongued -shrill-voiced -shrimp -shrimped -shrimper -shrimpers -shrimpfish -shrimpi -shrimpy -shrimpier -shrimpiest -shrimpiness -shrimping -shrimpish -shrimpishness -shrimplike -shrimps -shrimpton -shrinal -Shrine -shrined -shrineless -shrinelet -shrinelike -Shriner -shrines -shrine's -shrining -shrink -shrinkable -shrinkage -shrinkageproof -shrinkages -shrinker -shrinkerg -shrinkers -shrinkhead -shrinky -shrinking -shrinkingly -shrinkingness -shrinkproof -shrinks -shrink-wrap -shrip -shris -shrite -shrive -shrived -shrivel -shriveled -shriveling -shrivelled -shrivelling -shrivels -shriven -Shriver -shrivers -shrives -shriving -shroff -shroffed -shroffing -shroffs -shrog -shrogs -Shropshire -shroud -shrouded -shroudy -shrouding -shroud-laid -shroudless -shroudlike -shrouds -Shrove -shroved -shrover -Shrovetide -shrove-tide -shrovy -shroving -SHRPG -shrrinkng -shrub -shrubbed -shrubbery -shrubberies -shrubby -shrubbier -shrubbiest -shrubbiness -shrubbish -shrubland -shrubless -shrublet -shrublike -shrubs -shrub's -shrubwood -shruff -shrug -shrugged -shrugging -shruggingly -shrugs -shrunk -shrunken -shrups -shruti -sh-sh -sht -shtchee -shtetel -shtetels -shtetl -shtetlach -shtetls -shtg -shtg. -shtick -shticks -shtik -shtiks -Shtokavski -shtreimel -Shu -shuba -Shubert -shubunkin -Shubuta -shuck -shuck-bottom -shucked -shucker -shuckers -shucking -shuckings -shuckins -shuckpen -shucks -shudder -shuddered -shudderful -shuddery -shudderiness -shuddering -shudderingly -shudders -shuddersome -shudna -Shue -shuff -shuffle -shuffleboard -shuffle-board -shuffleboards -shufflecap -shuffled -shuffler -shufflers -shuffles -shufflewing -shuffling -shufflingly -shufty -Shufu -shug -Shugart -shuggy -Shuha -Shuhali -Shukria -Shukulumbwe -shul -Shulamite -Shulamith -Shulem -Shuler -Shulerville -Shulins -Shull -Shullsburg -Shulman -shuln -Shulock -shuls -Shult -Shultz -shulwar -shulwaurs -Shum -Shuma -shumac -shumal -Shuman -Shumway -shun -'shun -Shunammite -shune -Shunk -shunless -shunnable -shunned -shunner -shunners -shunning -shunpike -shun-pike -shunpiked -shunpiker -shunpikers -shunpikes -shunpiking -shuns -shunt -shunted -shunter -shunters -shunting -shunts -shuntwinding -shunt-wound -Shuping -Shuqualak -shure -shurf -shurgee -Shurlock -Shurlocke -Shurwood -shush -Shushan -shushed -shusher -shushes -shushing -Shuswap -shut -shut-away -shutdown -shutdowns -shutdown's -Shute -shuted -shuteye -shut-eye -shuteyes -shutes -Shutesbury -shut-in -shuting -shut-mouthed -shutness -shutoff -shut-off -shutoffs -shutoku -shutout -shut-out -shutouts -shuts -shuttance -shutten -shutter -shutterbug -shutterbugs -shuttered -shuttering -shutterless -shutters -shutterwise -shutting -shutting-in -shuttle -shuttlecock -shuttlecocked -shuttlecock-flower -shuttlecocking -shuttlecocks -shuttle-core -shuttled -shuttleheaded -shuttlelike -shuttler -shuttles -shuttlewise -shuttle-witted -shuttle-wound -shuttling -shut-up -Shutz -shuvra -Shuzo -shwa -Shwalb -shwanpan -shwanpans -shwebo -SI -sy -Sia -siacalle -siafu -syagush -siak -sial -sialaden -sialadenitis -sialadenoncus -sialagogic -sialagogue -sialagoguic -sialemesis -Sialia -sialic -sialid -Sialidae -sialidan -sialids -Sialis -Sialkot -sialoangitis -sialogenous -sialogogic -sialogogue -sialoid -sialolith -sialolithiasis -sialology -sialorrhea -sialoschesis -sialosemeiology -sialosyrinx -sialosis -sialostenosis -sialozemia -sials -SIAM -siamang -siamangs -Siamese -siameses -siamoise -Sian -Siana -Siang -Siangtan -Sianna -Sias -siauliai -Sib -Sybaris -sybarism -sybarist -Sybarital -Sybaritan -Sybarite -sybarites -Sybaritic -Sybaritical -Sybaritically -Sybaritish -sybaritism -sibb -Sibbaldus -sibbed -sibbendy -sibbens -sibber -Sibby -Sibbie -sibbing -sibboleth -sibbs -Sibeal -Sibel -Sibelius -Sibell -Sibella -Sibelle -Siber -Siberia -Siberian -Siberian-americanoid -siberians -Siberic -siberite -Siberson -Sybertsville -Sibie -Sibyl -Sybil -Sybyl -Sybila -sibilance -sibilancy -sibilant -sibilantly -sibilants -sibilate -sibilated -sibilates -sibilating -sibilatingly -sibilation -sibilator -sibilatory -sibylesque -sibylic -sibylism -Sibilla -Sibylla -Sybilla -sibyllae -Sibylle -Sybille -sibyllic -sibylline -sibyllism -sibyllist -sibilous -Sibyls -sibilus -Sibiric -Sibiu -Sible -Syble -Siblee -Sibley -Sybley -sibling -siblings -sibling's -sibness -sybo -syboes -sybotic -sybotism -sybow -sibrede -sibs -sibship -sibships -sibucao -SIC -SYC -Sicambri -Sicambrian -sycamine -sycamines -Sycamore -sycamores -Sicana -Sicani -Sicanian -Sicard -sicarian -sicarii -sicarious -sicarius -sicc -sicca -siccan -siccaneous -siccant -siccar -siccate -siccated -siccating -siccation -siccative -sicced -siccimeter -siccing -siccity -sice -syce -sycee -sycees -Sicel -Siceliot -sicer -Sices -syces -sich -Sychaeus -sychee -sychnocarpous -sicht -Sichuan -Sicily -Sicilia -Sicilian -siciliana -Sicilianism -siciliano -sicilianos -sicilians -sicilica -sicilicum -sicilienne -Sicilo-norman -sicinnian -Sicyon -Sicyonian -Sicyonic -Sicyos -sycite -sick -Syck -sick-abed -sickbay -sickbays -sickbed -sick-bed -sickbeds -sick-brained -sicked -sickee -sickees -sicken -sickened -sickener -sickeners -sickening -sickeningly -sickens -sicker -sickerly -sickerness -Sickert -sickest -sicket -sick-fallen -sick-feathered -sickhearted -sickie -sickies -sick-in -sicking -sickish -sickishly -sickishness -sickle -sicklebill -sickle-billed -sickle-cell -sickled -sickle-grass -sickle-hammed -sickle-hocked -sickle-leaved -sicklelike -sickle-like -sickleman -sicklemen -sicklemia -sicklemic -sicklepod -sickler -sicklerite -Sicklerville -sickles -sickle-shaped -sickless -sickle-tailed -sickleweed -sicklewise -sicklewort -sickly -sickly-born -sickly-colored -sicklied -sicklier -sicklies -sickliest -sicklying -sicklily -sickly-looking -sickliness -sickling -sickly-seeming -sick-list -sickly-sweet -sickly-sweetness -sickness -sicknesses -sicknessproof -sickness's -sick-nurse -sick-nursish -sicko -sickos -sickout -sick-out -sickouts -sick-pale -sickroom -sickrooms -sicks -sick-thoughted -Siclari -sicle -siclike -sycoceric -sycock -sycoma -sycomancy -sycomore -sycomores -Sycon -Syconaria -syconarian -syconate -Sycones -syconia -syconid -Syconidae -syconium -syconoid -syconus -sycophancy -sycophancies -sycophant -sycophantic -sycophantical -sycophantically -sycophantish -sycophantishly -sycophantism -sycophantize -sycophantly -sycophantry -sycophants -sycoses -sycosiform -sycosis -sics -sicsac -sicula -Sicular -Siculi -Siculian -Siculo-arabian -Siculo-moresque -Siculo-norman -Siculo-phoenician -Siculo-punic -SID -Syd -Sida -Sidalcea -sidder -Siddha -Siddhanta -Siddhartha -Siddhi -syddir -Siddon -Siddons -siddow -Siddra -siddur -siddurim -siddurs -side -sideage -sidearm -sidearms -sideband -sidebands -sidebar -side-bar -sidebars -side-bended -side-by-side -side-by-sideness -sideboard -sideboards -sideboard's -sidebone -side-bone -sidebones -sidebox -side-box -sideburn -sideburned -sideburns -sideburn's -sidecar -sidecarist -sidecars -side-cast -sidechair -sidechairs -sidecheck -side-cut -sidecutters -sided -sidedness -side-door -sidedress -side-dress -side-dressed -side-dressing -side-end -sideflash -side-flowing -side-glance -side-graft -side-handed -side-hanging -sidehead -sidehill -sidehills -sidehold -sidekick -side-kick -sidekicker -sidekicks -Sydel -sidelang -sideless -side-lever -sidelight -side-light -sidelights -sidelight's -side-lying -sideline -side-line -sidelined -sideliner -side-liner -sidelines -sideling -sidelings -sidelingwise -sidelining -sidelins -Sidell -Sydelle -sidelock -sidelong -side-look -side-looker -sideman -sidemen -side-necked -sideness -sidenote -side-on -sidepiece -sidepieces -side-post -sider -sider- -sideral -siderate -siderated -sideration -sidereal -siderealize -sidereally -siderean -siderin -siderism -siderite -siderites -sideritic -Sideritis -sidero- -siderocyte -siderognost -siderographer -siderography -siderographic -siderographical -siderographist -siderolite -siderology -sideroma -sideromagnetic -sideromancy -sideromelane -sideronatrite -sideronym -siderophilin -siderophobia -sideroscope -siderose -siderosilicosis -siderosis -siderostat -siderostatic -siderotechny -siderotic -siderous -Sideroxylon -sidership -siderurgy -siderurgical -sides -sidesaddle -side-saddle -sidesaddles -side-seen -sideshake -sideshow -side-show -sideshows -side-skip -sideslip -side-slip -sideslipped -sideslipping -sideslips -sidesman -sidesmen -sidespin -sidespins -sidesplitter -sidesplitting -side-splitting -sidesplittingly -sidest -sidestep -side-step -sidestepped -side-stepped -sidestepper -side-stepper -sidesteppers -sidestepping -side-stepping -sidesteps -sidestick -side-stick -side-stitched -sidestroke -sidestrokes -sidesway -sideswipe -sideswiped -sideswiper -sideswipers -sideswipes -sideswiping -side-table -side-taking -sidetrack -side-track -sidetracked -sidetracking -sidetracks -side-view -sideway -sideways -sidewalk -side-walk -sidewalks -sidewalk's -sidewall -side-wall -sidewalls -sideward -sidewards -sidewash -sidewheel -side-wheel -sidewheeler -side-wheeler -side-whiskered -side-whiskers -side-wind -side-winded -Sidewinder -side-winder -sidewinders -sidewipe -sidewiper -sidewise -Sidgwick -sidhe -Sidhu -sidi -sidy -sidia -Sidi-bel-Abb -siding -sidings -sidion -Sidky -sidle -sidled -sidler -sidlers -sidles -sidling -sidlingly -sidlins -Sidman -Sidnaw -Sidnee -Sidney -Sydney -Sydneian -Sydneyite -Sydneysider -Sidoma -Sidon -Sidoney -Sidonia -Sidonian -Sidonie -Sidonius -Sidonnie -Sidoon -Sidra -Sidrach -Sidrah -Sidrahs -Sidran -Sidras -Sidroth -sidth -Sidur -Sidwel -Sidwell -Sidwohl -sie -sye -Sieber -siecle -siecles -syed -Sieg -Siegbahn -siege -siegeable -siegecraft -sieged -Siegel -siegenite -sieger -sieges -siege's -siegework -Siegfried -sieging -Siegler -Sieglinda -Sieglingia -Siegmund -siegurd -Siey -Sielen -Siemens -Siemreap -Siena -Syene -Sienese -sienite -syenite -syenite-porphyry -sienites -syenites -sienitic -syenitic -Sienkiewicz -sienna -siennas -syenodiorite -syenogabbro -Sien-pi -Sieper -Siepi -sier -Sieracki -siering -sierozem -sierozems -Sierra -sierran -sierras -Sierraville -Siesser -siest -siesta -siestaland -siestas -Sieur -sieurs -Sieva -sieve -sieved -sieveful -sievelike -sievelikeness -siever -Sievers -Sieversia -Sievert -sieves -sieve's -sievy -sieving -sievings -Sif -sifac -sifaka -sifakas -Sifatite -sife -siffilate -siffle -sifflement -sifflet -siffleur -siffleurs -siffleuse -siffleuses -sifflot -Siffre -Sifnos -sift -siftage -sifted -sifter -sifters -sifting -siftings -syftn -sifts -SIG -Sig. -siganid -Siganidae -siganids -Siganus -sigatoka -Sigaultian -SIGCAT -Sigel -sigfile -sigfiles -Sigfrid -Sigfried -Siggeir -sigger -sigh -sigh-born -sighed -sighed-for -sigher -sighers -sighful -sighfully -sighing -sighingly -sighingness -sighless -sighlike -sighs -sight -sightable -sighted -sightedness -sighten -sightening -sighter -sighters -sight-feed -sightful -sightfulness -sighthole -sight-hole -sighty -sighting -sightings -sightless -sightlessly -sightlessness -sightly -sightlier -sightliest -sightlily -sightliness -sightproof -sight-read -sight-reader -sight-reading -sights -sightsaw -sightscreen -sightsee -sight-see -sightseeing -sight-seeing -sightseen -sightseer -sight-seer -sightseers -sightsees -sight-shot -sightsman -sightworthy -sightworthiness -sigil -sigilative -sigilistic -sigill -sigillary -Sigillaria -Sigillariaceae -sigillariaceous -sigillarian -sigillarid -sigillarioid -sigillarist -sigillaroid -sigillate -sigillated -sigillation -sigillative -sigillistic -sigillographer -sigillography -sigillographical -sigillum -sigils -Sigyn -Sigismond -Sigismondo -Sigismund -Sigismundo -sigla -siglarian -Sigler -sigloi -siglos -siglum -Sigma -sigma-ring -sigmas -sigmaspire -sigmate -sigmatic -sigmation -sigmatism -sigmodont -Sigmodontes -sigmoid -sigmoidal -sigmoidally -sigmoidectomy -sigmoiditis -sigmoidopexy -sigmoidoproctostomy -sigmoidorectostomy -sigmoidoscope -sigmoidoscopy -sigmoidostomy -sigmoids -Sigmund -sign -signa -signable -Signac -signacle -signage -signages -signal -signaled -signalee -signaler -signalers -signalese -signaletic -signaletics -signaling -signalise -signalised -signalising -signalism -signalist -signality -signalities -signalization -signalize -signalized -signalizes -signalizing -signalled -signaller -signally -signalling -signalman -signalmen -signalment -signals -signance -signary -signatary -signate -signation -signator -signatory -signatories -signatural -signature -signatured -signatureless -signatures -signature's -signaturing -signaturist -signboard -sign-board -signboards -Signe -signed -signee -signees -signer -signers -signet -signeted -signeting -signet-ring -signets -signetur -signetwise -signeur -signeury -signficance -signficances -signficant -signficantly -Signy -signifer -signify -signifiable -signifiant -signific -significal -significance -significances -significancy -significancies -significand -significant -significantly -significantness -significants -significate -signification -significations -significatist -significative -significatively -significativeness -significator -significatory -significatrix -significatum -significature -significavit -significian -significs -signifie -signified -signifier -signifies -signifying -signing -signior -signiori -signiory -signiories -signiors -signiorship -signist -signitor -signless -signlike -signman -sign-manual -signoff -sign-off -signoi -signon -signons -Signor -Signora -signoras -signore -Signorelli -signori -signory -signoria -signorial -signories -signorina -signorinas -signorine -signorini -signorino -signorinos -signorize -signors -signorship -signpost -sign-post -signposted -signposting -signposts -signs -signum -signwriter -Sigourney -Sigrid -sigrim -Sigsbee -Sigsmond -Sigurd -Sigvard -Sihanouk -Sihasapa -Sihon -Sihonn -Sihun -Sihunn -sijill -Sik -Sika -Sikandarabad -Sikang -sikar -sikara -Sikata -sikatch -sike -syke -siker -sikerly -sykerly -sikerness -Sikes -Sykes -Sikeston -Sykeston -Sykesville -siket -Sikh -sikhara -Sikhism -sikhra -sikhs -sikimi -Siking -Sikinnis -Sikkim -Sikkimese -Sikko -Sikorski -Sikorsky -sikra -Siksika -Syktyvkar -Sil -Syl -Sylacauga -silage -silages -silaginoid -silane -silanes -silanga -Silas -Sylas -Silastic -Silber -silbergroschen -Silberman -silcrete -sild -Silda -Silden -silds -Sile -Sileas -silen -Silenaceae -silenaceous -Silenales -silence -silenced -silencer -silencers -silences -silency -silencing -Silene -sylene -sileni -silenic -silent -silenter -silentest -silential -silentiary -silentio -silentious -silentish -silentium -silently -silentness -silents -Silenus -Siler -Silerton -Silesia -Silesian -silesias -Siletz -Syleus -Silex -silexes -silexite -silgreen -silhouette -silhouetted -silhouettes -silhouetting -silhouettist -silhouettograph -syli -Silybum -silic- -silica -silicam -silicane -silicas -silicate -silicates -silication -silicatization -Silicea -silicean -siliceo- -siliceocalcareous -siliceofelspathic -siliceofluoric -siliceous -silici- -silicic -silicicalcareous -silicicolous -silicide -silicides -silicidize -siliciferous -silicify -silicification -silicified -silicifies -silicifying -silicifluoric -silicifluoride -silicyl -siliciophite -silicious -Silicispongiae -silicium -siliciums -siliciuret -siliciuretted -silicize -silicle -silicles -silico -silico- -silicoacetic -silicoalkaline -silicoaluminate -silicoarsenide -silicocalcareous -silicochloroform -silicocyanide -silicoethane -silicoferruginous -Silicoflagellata -Silicoflagellatae -silicoflagellate -Silicoflagellidae -silicofluoric -silicofluoride -silicohydrocarbon -Silicoidea -silicomagnesian -silicomanganese -silicomethane -silicon -silicone -silicones -siliconize -silicononane -silicons -silicopropane -silicoses -silicosis -Silicospongiae -silicotalcose -silicothermic -silicotic -silicotitanate -silicotungstate -silicotungstic -silicula -silicular -silicule -siliculose -siliculous -sylid -silyl -Silin -syling -Silipan -siliqua -siliquaceous -siliquae -Siliquaria -Siliquariidae -silique -siliques -siliquiferous -siliquiform -siliquose -siliquous -sylis -sylistically -silk -silkalene -silkaline -silk-bark -silk-cotton -silked -silken -silken-coated -silken-fastened -silken-leafed -silken-sailed -silken-sandaled -silken-shining -silken-soft -silken-threaded -silken-winged -silker -silk-family -silkflower -silk-gownsman -silkgrower -silk-hatted -silky -silky-barked -silky-black -silkie -silkier -silkiest -silky-haired -silky-leaved -silkily -silky-looking -silkine -silkiness -silking -silky-smooth -silky-soft -silky-textured -silky-voiced -silklike -silkman -silkmen -silkness -silkolene -silkoline -silk-robed -silks -silkscreen -silk-screen -silkscreened -silkscreening -silkscreens -silk-skirted -silksman -silk-soft -silk-stocking -silk-stockinged -silkstone -silktail -silk-tail -silkweed -silkweeds -silk-winder -silkwoman -silkwood -silkwork -silkworker -silkworks -silkworm -silkworms -Sill -syll -syllab -syllabary -syllabaria -syllabaries -syllabarium -syllabatim -syllabation -syllabe -syllabi -syllabic -syllabical -syllabically -syllabicate -syllabicated -syllabicating -syllabication -syllabicity -syllabicness -syllabics -syllabify -syllabification -syllabifications -syllabified -syllabifies -syllabifying -syllabise -syllabised -syllabising -syllabism -syllabize -syllabized -syllabizing -syllable -syllabled -syllables -syllable's -syllabling -syllabogram -syllabography -sillabub -syllabub -sillabubs -syllabubs -Syllabus -syllabuses -silladar -Sillaginidae -Sillago -sillandar -Sillanpaa -sillar -sillcock -syllepses -syllepsis -sylleptic -sylleptical -sylleptically -siller -Sillery -sillers -silly -sillibib -sillibibs -sillibouk -sillibub -sillibubs -syllid -Syllidae -syllidian -sillier -sillies -silliest -silly-faced -silly-facedly -sillyhood -sillyhow -sillyish -sillyism -sillikin -sillily -sillimanite -silliness -sillinesses -Syllis -silly-shally -sillyton -sill-like -sillock -sylloge -syllogisation -syllogiser -syllogism -syllogisms -syllogism's -syllogist -syllogistic -syllogistical -syllogistically -syllogistics -syllogization -syllogize -syllogized -syllogizer -syllogizing -sillograph -sillographer -sillographist -sillometer -sillon -sills -sill's -Sillsby -Silma -Sylmar -Sylni -silo -Siloa -Siloam -siloed -siloing -siloist -Silone -silos -Siloum -Sylow -siloxane -siloxanes -sylph -Silpha -sylphy -sylphic -silphid -sylphid -Silphidae -sylphidine -sylphids -sylphine -sylphish -silphium -sylphize -sylphlike -Sylphon -sylphs -Silsbee -Silsby -Silsbye -silt -siltage -siltation -silted -silty -siltier -siltiest -silting -siltlike -silts -siltstone -silundum -silure -Silures -Siluria -Silurian -Siluric -silurid -Siluridae -Siluridan -silurids -siluro- -Siluro-cambrian -siluroid -Siluroidei -siluroids -Silurus -Silva -Sylva -silvae -sylvae -sylvage -Silvain -Silvan -Sylvan -Silvana -Sylvana -Sylvaner -sylvanesque -Silvani -Sylvani -Sylvania -sylvanite -silvanity -sylvanity -sylvanitic -sylvanize -sylvanly -Silvano -silvanry -sylvanry -silvans -sylvans -Silvanus -Sylvanus -silvas -sylvas -sylvate -sylvatic -sylvatical -silvendy -Silver -Silverado -silverback -silver-backed -silver-bar -silver-barked -silver-barred -silver-bearded -silver-bearing -silverbeater -silver-bell -silverbelly -silverberry -silverberries -silverbiddy -silverbill -silver-black -silverboom -silver-bordered -silver-bright -silverbush -silver-buskined -silver-chased -silver-chiming -silver-clasped -silver-clear -Silvercliff -silver-coated -silver-colored -silver-coloured -silver-copper -silver-corded -silver-cupped -Silverdale -silvered -silver-eddied -silvereye -silver-eye -silver-eyed -silver-eyes -silver-embroidered -silverer -silverers -silver-feathered -silverfin -silverfish -silverfishes -silver-fleeced -silver-flowing -silver-footed -silver-fork -silver-fronted -silver-glittering -silver-golden -silver-gray -silver-grained -silver-grey -silver-hafted -silver-haired -silver-handled -silverhead -silver-headed -silvery -silverier -silveriest -silverily -silveriness -silvering -silverise -silverised -silverish -silverising -silverite -Silverius -silverize -silverized -silverizer -silverizing -silver-laced -silver-lead -silverleaf -silver-leafed -silver-leaved -silverleaves -silverless -silverly -silverlike -silver-lined -silverling -silver-mail -Silverman -silver-melting -silver-mounted -silvern -silverness -Silverpeak -silver-penciled -silver-plate -silver-plated -silver-plating -Silverplume -silverpoint -silver-producing -silver-rag -silver-rimmed -silverrod -Silvers -silver-shafted -silver-shedding -silver-shining -silverside -silversides -silverskin -silversmith -silversmithing -silversmiths -silver-smitten -silver-sounded -silver-sounding -silver-spangled -silver-spoon -silver-spoonism -silverspot -silver-spotted -Silverstar -Silverstein -silver-streaming -Silverstreet -silver-striped -silver-studded -silver-sweet -silver-swelling -silvertail -silver-thread -silver-thrilling -silvertip -silver-tipped -Silverton -silver-toned -silver-tongue -silver-tongued -silvertop -silver-true -Silverts -silver-tuned -silver-using -silvervine -silver-voiced -silverware -silverwares -silver-washed -silverweed -silverwing -silver-winged -silver-wiry -Silverwood -silverwork -silver-work -silverworker -Silvester -Sylvester -sylvestral -sylvestrene -Sylvestrian -Sylvestrine -Silvestro -silvex -silvexes -silvi- -Silvia -Sylvia -Sylvian -sylvic -silvical -Sylvicolidae -sylvicoline -silvicolous -silvics -silvicultural -silviculturally -silviculture -sylviculture -silviculturist -Silvie -Sylvie -sylviid -Sylviidae -Sylviinae -sylviine -sylvin -sylvine -sylvines -sylvinite -sylvins -Silvio -Silvis -sylvite -sylvites -Silvius -sylvius -Silvni -Sim -sym -sym- -sym. -Sima -Simaba -Symaethis -simagre -Simah -simal -Syman -simar -simara -Simarouba -Simaroubaceae -simaroubaceous -simarre -simars -simaruba -simarubaceous -simarubas -simas -simazine -simazines -simba -simball -symbasic -symbasical -symbasically -symbasis -simbil -symbiogenesis -symbiogenetic -symbiogenetically -symbion -symbionic -symbions -symbiont -symbiontic -symbionticism -symbionts -symbioses -symbiosis -symbiot -symbiote -symbiotes -symbiotic -symbiotical -symbiotically -symbiotics -symbiotism -symbiotrophic -symbiots -Simbirsk -symblepharon -simblin -simbling -simblot -Simblum -symbol -symbolaeography -symbolater -symbolatry -symbolatrous -symboled -symbolic -symbolical -symbolically -symbolicalness -symbolicly -symbolics -symboling -symbolisation -symbolise -symbolised -symbolising -symbolism -symbolisms -symbolist -symbolistic -symbolistical -symbolistically -symbolization -symbolizations -symbolize -symbolized -symbolizer -symbolizes -symbolizing -symbolled -symbolling -symbolofideism -symbology -symbological -symbologist -symbolography -symbololatry -symbolology -symbolry -symbols -symbol's -symbolum -symbouleutic -symbranch -Symbranchia -symbranchiate -symbranchoid -symbranchous -simcon -SIMD -Simdars -sime -Simeon -Simeonism -Simeonite -Symer -Simferopol -Simia -simiad -simial -simian -simianity -simians -simiesque -simiid -Simiidae -Simiinae -similar -similary -similarily -similarity -similarities -similarize -similarly -similate -similative -simile -similes -similimum -similiter -simility -similitive -similitude -similitudes -similitudinize -similize -similor -Symington -simioid -Simionato -simious -simiousness -simitar -simitars -simity -simkin -Simla -simlin -simling -simlins -SIMM -symmachy -Symmachus -symmedian -Simmel -symmelia -symmelian -symmelus -simmer -simmered -simmering -simmeringly -simmers -Simmesport -symmetalism -symmetallism -symmetral -symmetry -symmetrian -symmetric -symmetrical -symmetricality -symmetrically -symmetricalness -symmetries -symmetry's -symmetrisation -symmetrise -symmetrised -symmetrising -symmetrist -symmetrization -symmetrize -symmetrized -symmetrizing -symmetroid -symmetrophobia -Simmie -symmist -simmon -Simmonds -Simmons -symmory -symmorphic -symmorphism -Simms -simnel -simnels -simnelwise -Simois -Simoisius -simoleon -simoleons -Simon -Symon -Simona -Symonds -Simone -Simonetta -Simonette -simony -simoniac -simoniacal -simoniacally -simoniacs -simonial -Simonian -Simonianism -Simonides -simonies -simonious -simonism -Simonist -simonists -simonize -simonized -simonizes -simonizing -Simonne -Simonov -simon-pure -Simons -Symons -Simonsen -Simonson -Simonton -simool -simoom -simooms -simoon -simoons -Simosaurus -simous -simp -simpai -sympalmograph -sympathectomy -sympathectomize -sympathetectomy -sympathetectomies -sympathetic -sympathetical -sympathetically -sympatheticism -sympatheticity -sympatheticness -sympatheticotonia -sympatheticotonic -sympathetoblast -sympathy -sympathic -sympathicoblast -sympathicotonia -sympathicotonic -sympathicotripsy -sympathies -sympathin -sympathique -sympathy's -sympathise -sympathised -sympathiser -sympathising -sympathisingly -sympathism -sympathist -sympathize -sympathized -sympathizer -sympathizers -sympathizes -sympathizing -sympathizingly -sympathoblast -sympatholysis -sympatholytic -sympathomimetic -simpatico -sympatry -sympatric -sympatrically -sympatries -Simpelius -simper -simpered -simperer -simperers -simpering -simperingly -simpers -Sympetalae -sympetaly -sympetalous -Symphalangus -symphenomena -symphenomenal -symphyantherous -symphycarpous -Symphyla -symphylan -symphile -symphily -symphilic -symphilism -symphyllous -symphilous -symphylous -symphynote -symphyo- -symphyogenesis -symphyogenetic -symphyostemonous -symphyseal -symphyseotomy -symphyses -symphysy -symphysial -symphysian -symphysic -symphysio- -symphysion -symphysiotomy -symphysis -symphysodactylia -symphysotomy -symphystic -Symphyta -symphytic -symphytically -symphytism -symphytize -Symphytum -symphogenous -symphonetic -symphonette -symphony -symphonia -symphonic -symphonically -symphonies -symphonion -symphonious -symphoniously -symphony's -symphonisation -symphonise -symphonised -symphonising -symphonist -symphonization -symphonize -symphonized -symphonizing -symphonous -Symphoricarpos -symphoricarpous -symphrase -symphronistic -sympiesometer -Simpkins -SYMPL -symplasm -symplast -simple -simple-armed -simplectic -symplectic -simpled -simple-faced -Symplegades -simple-headed -simplehearted -simple-hearted -simpleheartedly -simpleheartedness -simple-leaved -simple-life -simple-lifer -simple-mannered -simpleminded -simple-minded -simplemindedly -simple-mindedly -simplemindedness -simple-mindedness -simpleness -simplenesses -simpler -simple-rooted -simples -simple-seeming -symplesite -simple-speaking -simplesse -simplest -simple-stemmed -simpleton -simple-toned -simpletonian -simpletonianism -simpletonic -simpletonish -simpletonism -simpletons -simple-tuned -simple-witted -simple-wittedness -simplex -simplexed -simplexes -simplexity -simply -simplices -simplicia -simplicial -simplicially -simplicident -Simplicidentata -simplicidentate -simplicist -simplicitarian -simpliciter -simplicity -simplicities -simplicity's -Simplicius -simplicize -simply-connected -simplify -simplification -simplifications -simplificative -simplificator -simplified -simplifiedly -simplifier -simplifiers -simplifies -simplifying -simpling -simplism -simplisms -simplist -simplistic -simplistically -Symplocaceae -symplocaceous -Symplocarpus -symploce -symplocium -Symplocos -Simplon -simplum -sympode -sympodia -sympodial -sympodially -sympodium -sympolity -symposia -symposiac -symposiacal -symposial -symposiarch -symposiast -symposiastic -symposion -symposisia -symposisiums -symposium -symposiums -sympossia -simps -Simpson -Simpsonville -simptico -symptom -symptomatic -symptomatical -symptomatically -symptomaticness -symptomatics -symptomatize -symptomatography -symptomatology -symptomatologic -symptomatological -symptomatologically -symptomatologies -symptomical -symptomize -symptomless -symptomology -symptoms -symptom's -symptosis -simpula -simpulum -simpulumla -sympus -Sims -Simsar -Simsboro -Simsbury -simsim -Simson -Symsonia -symtab -symtomology -simul -simula -simulacra -simulacral -simulacrcra -simulacre -simulacrize -simulacrum -simulacrums -simulance -simulant -simulants -simular -simulars -simulate -simulated -simulates -simulating -simulation -simulations -simulative -simulatively -simulator -simulatory -simulators -simulator's -simulcast -simulcasting -simulcasts -simule -simuler -simuliid -Simuliidae -simulioid -Simulium -simulize -simultaneity -simultaneous -simultaneously -simultaneousness -simultaneousnesses -simulty -simurg -simurgh -Sin -SYN -syn- -Sina -sin-absolved -sin-absolving -synacme -synacmy -synacmic -synactic -synadelphite -Sinae -Sinaean -synaeresis -synaesthesia -synaesthesis -synaesthetic -sin-afflicting -synagog -synagogal -synagogian -synagogical -synagogism -synagogist -synagogs -synagogue -synagogues -Sinai -Sinaic -sinaite -Sinaitic -sinal -sinalbin -synalepha -synalephe -synalgia -synalgic -synallactic -synallagmatic -synallaxine -Sinaloa -synaloepha -synaloephe -sinamay -sinamin -sinamine -Sinan -synanastomosis -synange -synangia -synangial -synangic -synangium -Synanon -synanons -synanthema -synantherology -synantherological -synantherologist -synantherous -synanthesis -synanthetic -synanthy -synanthic -synanthous -Sinanthropus -synanthrose -sinapate -synaphe -synaphea -synapheia -sinapic -sinapin -sinapine -sinapinic -Sinapis -sinapisine -sinapism -sinapisms -sinapize -sinapoline -synaposematic -synapse -synapsed -synapses -synapse's -synapsid -Synapsida -synapsidan -synapsing -synapsis -synaptai -synaptase -synapte -synaptene -Synaptera -synapterous -synaptic -synaptical -synaptically -synaptychus -synapticula -synapticulae -synapticular -synapticulate -synapticulum -synaptid -Synaptosauria -synaptosomal -synaptosome -synarchy -synarchical -sinarchism -synarchism -sinarchist -synarmogoid -Synarmogoidea -sinarquism -synarquism -Sinarquist -Sinarquista -Sinarquistas -synarses -synartesis -synartete -synartetic -synarthrodia -synarthrodial -synarthrodially -synarthroses -synarthrosis -Sinas -Synascidiae -synascidian -synastry -Sinatra -sinawa -synaxar -synaxary -synaxaria -synaxaries -synaxarion -synaxarist -synaxarium -synaxaxaria -synaxes -synaxis -Sinbad -sin-black -sin-born -sin-bred -sin-burdened -sin-burthened -sync -sincaline -sincamas -Syncarida -syncaryon -syncarp -syncarpy -syncarpia -syncarpies -syncarpium -syncarpous -syncarps -syncategorem -syncategorematic -syncategorematical -syncategorematically -syncategoreme -since -synced -syncellus -syncephalic -syncephalus -sincere -syncerebral -syncerebrum -sincerely -sincereness -sincerer -sincerest -sincerity -sincerities -sync-generator -synch -sin-chastising -synched -synching -synchysis -synchitic -Synchytriaceae -Synchytrium -synchondoses -synchondrosial -synchondrosially -synchondrosis -synchondrotomy -synchoresis -synchro -synchro- -synchrocyclotron -synchro-cyclotron -synchroflash -synchromesh -synchromism -synchromist -synchronal -synchrone -synchroneity -synchrony -synchronic -synchronical -synchronically -synchronies -synchronisation -synchronise -synchronised -synchroniser -synchronising -synchronism -synchronistic -synchronistical -synchronistically -synchronizable -synchronization -synchronizations -synchronize -synchronized -synchronizer -synchronizers -synchronizes -synchronizing -synchronograph -synchronology -synchronological -synchronoscope -synchronous -synchronously -synchronousness -synchros -synchroscope -synchrotron -synchs -syncing -sincipita -sincipital -sinciput -sinciputs -syncytia -syncytial -syncytioma -syncytiomas -syncytiomata -syncytium -syncladous -Sinclair -Sinclairville -Sinclare -synclastic -synclinal -synclinally -syncline -synclines -synclinical -synclinore -synclinorial -synclinorian -synclinorium -synclitic -syncliticism -synclitism -sin-clouded -syncoelom -Syncom -syncoms -sin-concealing -sin-condemned -sin-consuming -syncopal -syncopare -syncopate -syncopated -syncopates -syncopating -syncopation -syncopations -syncopative -syncopator -syncope -syncopes -syncopic -syncopism -syncopist -syncopize -syncotyledonous -syncracy -syncraniate -syncranterian -syncranteric -syncrasy -syncretic -syncretical -syncreticism -syncretion -syncretism -syncretist -syncretistic -syncretistical -syncretize -syncretized -syncretizing -Syncrypta -syncryptic -syncrisis -syncro-mesh -sin-crushed -syncs -Sind -synd -synd. -syndactyl -syndactyle -syndactyli -syndactyly -syndactylia -syndactylic -syndactylism -syndactylous -syndactylus -syndectomy -Sindee -sinder -synderesis -syndeses -syndesis -syndesises -syndesmectopia -syndesmies -syndesmitis -syndesmo- -syndesmography -syndesmology -syndesmoma -Syndesmon -syndesmoplasty -syndesmorrhaphy -syndesmoses -syndesmosis -syndesmotic -syndesmotomy -syndet -syndetic -syndetical -syndetically -syndeton -syndets -Sindhi -syndyasmian -syndic -syndical -syndicalism -syndicalist -syndicalistic -syndicalize -syndicat -syndicate -syndicated -syndicateer -syndicates -syndicating -syndication -syndications -syndicator -syndics -syndicship -Syndyoceras -syndiotactic -sindle -sindoc -syndoc -sindon -sindry -syndrome -syndromes -syndrome's -syndromic -sin-drowned -SINE -syne -sinebada -synecdoche -synecdochic -synecdochical -synecdochically -synecdochism -synechdochism -synechia -synechiae -synechiology -synechiological -synechist -synechistic -synechology -synechological -synechotomy -synechthran -synechthry -synecious -synecology -synecologic -synecological -synecologically -synecphonesis -synectic -synectically -synecticity -synectics -sinecural -sinecure -sinecured -sinecures -sinecureship -sinecuring -sinecurism -sinecurist -Synedra -synedral -Synedria -synedrial -synedrian -Synedrion -Synedrium -synedrous -Sinegold -syneidesis -synema -synemata -synemmenon -synenergistic -synenergistical -synenergistically -synentognath -Synentognathi -synentognathous -synephrine -sine-qua-nonical -sine-qua-noniness -syneresis -synergastic -synergetic -synergy -synergia -synergias -synergic -synergical -synergically -synergid -synergidae -synergidal -synergids -synergies -synergism -synergisms -synergist -synergistic -synergistical -synergistically -synergists -synergize -synerize -sines -Sinesian -synesis -synesises -synesthesia -synesthetic -synethnic -synetic -sinew -sine-wave -sinew-backed -sinewed -sinew-grown -sinewy -sinewiness -sinewing -sinewless -sinewous -sinews -sinew's -sinew-shrunk -synezisis -Sinfiotli -Sinfjotli -sinfonia -sinfonie -sinfonietta -synfuel -synfuels -sinful -sinfully -sinfulness -sing -sing. -singability -singable -singableness -singally -syngamy -syngamic -syngamies -syngamous -Singan -Singapore -singarip -syngas -syngases -Singband -singe -Synge -singed -singey -singeing -singeingly -syngeneic -Syngenesia -syngenesian -syngenesious -syngenesis -syngenetic -syngenic -syngenism -syngenite -Singer -singeress -singerie -singers -singes -singfest -Singfo -Singh -Singhal -Singhalese -singillatim -sing-in -singing -singingfish -singingfishes -singingly -singkamas -single -single-acting -single-action -single-bank -single-banked -singlebar -single-barrel -single-barreled -single-barrelled -single-beat -single-bitted -single-blind -single-blossomed -single-bodied -single-branch -single-breasted -single-caped -single-cell -single-celled -single-chamber -single-cylinder -single-colored -single-combed -single-crested -single-crop -single-cross -single-cut -single-cutting -singled -single-deck -single-decker -single-disk -single-dotted -singled-out -single-driver -single-edged -single-eyed -single-end -single-ended -single-entry -single-file -single-filed -single-finned -single-fire -single-flowered -single-foot -single-footer -single-framed -single-fringed -single-gear -single-grown -singlehanded -single-handed -singlehandedly -single-handedly -singlehandedness -single-handedness -single-hander -single-headed -singlehearted -single-hearted -singleheartedly -single-heartedly -singleheartedness -single-heartedness -singlehood -single-hoofed -single-hooked -single-horned -single-horsed -single-hung -single-jet -single-layer -single-layered -single-leaded -single-leaf -single-leaved -single-letter -single-lever -single-light -single-line -single-living -single-loader -single-masted -single-measure -single-member -single-minded -singlemindedly -single-mindedly -single-mindedness -single-motored -single-mouthed -single-name -single-nerved -singleness -singlenesses -single-pass -single-pen -single-phase -single-phaser -single-piece -single-pitched -single-plated -single-ply -single-pointed -single-pole -singleprecision -single-prop -single-punch -singler -single-rail -single-reed -single-reefed -single-rivet -single-riveted -single-row -singles -single-screw -single-seated -single-seater -single-seed -single-seeded -single-shear -single-sheaved -single-shooting -single-shot -single-soled -single-space -single-speech -single-stage -singlestep -single-step -single-stepped -singlestick -single-stick -singlesticker -single-stitch -single-strand -single-strength -single-stroke -single-surfaced -single-swing -singlet -single-tap -single-tax -single-thoughted -single-threaded -single-throw -Singleton -single-tongue -single-tonguing -singletons -singleton's -single-track -singletree -single-tree -singletrees -single-trip -single-trunked -singlets -single-twist -single-twisted -single-valued -single-walled -single-wheel -single-wheeled -single-whip -single-wicket -single-wire -single-wired -singly -singling -singlings -Syngman -Syngnatha -Syngnathi -syngnathid -Syngnathidae -syngnathoid -syngnathous -Syngnathus -Singpho -syngraph -sings -Singsing -sing-sing -singsong -sing-song -singsongy -singsongs -Singspiel -singstress -sin-guilty -singular -singularism -singularist -singularity -singularities -singularity's -singularization -singularize -singularized -singularizing -singularly -singularness -singulars -singult -singultation -singultous -singultus -singultuses -sinh -Sinhailien -Sinhalese -sinhalite -sinhasan -sinhs -Sinian -Sinic -sinical -Sinicism -Sinicization -Sinicize -Sinicized -sinicizes -Sinicizing -Sinico -Sinico-japanese -Sinify -Sinification -Sinified -Sinifying -sinigrin -sinigrinase -sinigrosid -sinigroside -Siniju -sin-indulging -Sining -Sinis -Sinisian -Sinism -sinister -sinister-handed -sinisterly -sinisterness -sinisterwise -sinistra -sinistrad -sinistral -sinistrality -sinistrally -sinistration -sinistrin -sinistro- -sinistrocerebral -sinistrocular -sinistrocularity -sinistrodextral -sinistrogyrate -sinistrogyration -sinistrogyric -sinistromanual -sinistrorsal -sinistrorsally -sinistrorse -sinistrorsely -sinistrous -sinistrously -sinistruous -Sinite -Sinitic -synizesis -sinjer -Sink -sinkable -sinkage -sinkages -synkaryon -synkaryonic -synkatathesis -sinkboat -sinkbox -sinked -sinker -sinkerless -sinkers -sinkfield -sinkhead -sinkhole -sink-hole -sinkholes -sinky -Sinkiang -synkinesia -synkinesis -synkinetic -sinking -sinking-fund -sinkingly -Sinkiuse -sinkless -sinklike -sinkroom -sinks -sinkstone -sink-stone -sin-laden -sinless -sinlessly -sinlessness -sinlike -sin-loving -sin-mortifying -Synn -sinnable -sinnableness -Sinnamahoning -Sinnard -sinned -synnema -synnemata -sinnen -sinner -sinneress -sinners -sinner's -sinnership -sinnet -synneurosis -synneusis -sinning -Sinningia -sinningly -sinningness -sinnowed -Sino- -Sino-american -sinoatrial -sinoauricular -Sino-belgian -synocha -synochal -synochoid -synochous -synochus -synocreate -synod -synodal -synodalian -synodalist -synodally -synodian -synodic -synodical -synodically -synodicon -synodist -synodite -synodontid -Synodontidae -synodontoid -synods -synodsman -synodsmen -Synodus -synoecete -synoecy -synoeciosis -synoecious -synoeciously -synoeciousness -synoecism -synoecize -synoekete -synoeky -synoetic -sin-offering -Sino-german -Sinogram -synoicous -synoicousness -sinoidal -Sino-japanese -Sinolog -Sinologer -Sinology -Sinological -sinologies -Sinologist -Sinologue -sinomenine -Sino-mongol -synomosy -Sinon -synonym -synonymatic -synonyme -synonymes -synonymy -synonymic -synonymical -synonymicon -synonymics -synonymies -synonymise -synonymised -synonymising -synonymist -synonymity -synonymize -synonymized -synonymizing -synonymous -synonymously -synonymousness -synonyms -synonym's -Sinonism -synonomous -synonomously -synop -synop. -sinoper -Sinophile -Sinophilism -Sinophobia -synophthalmia -synophthalmus -sinopia -sinopias -Sinopic -sinopie -sinopis -sinopite -sinople -synopses -synopsy -synopsic -synopsis -synopsise -synopsised -synopsising -synopsize -synopsized -synopsizing -synoptic -synoptical -synoptically -Synoptist -Synoptistic -synorchidism -synorchism -sinorespiratory -synorthographic -Sino-russian -Sino-soviet -synosteology -synosteoses -synosteosis -synostose -synostoses -synostosis -synostotic -synostotical -synostotically -Sino-Tibetan -synousiacs -synovectomy -synovia -synovial -synovially -synovias -synoviparous -synovitic -synovitis -synpelmous -sinproof -sin-proud -sin-revenging -synrhabdosome -SINS -sin's -synsacral -synsacrum -synsepalous -sin-sick -sin-sickness -Sinsiga -Sinsinawa -sinsyne -sinsion -sin-soiling -sin-sowed -synspermous -synsporous -sinsring -syntactially -syntactic -syntactical -syntactically -syntactician -syntactics -syntagm -syntagma -syntality -syntalities -syntan -syntasis -syntax -syntaxes -syntaxis -syntaxist -syntechnic -syntectic -syntectical -syntelome -syntenosis -sinter -sinterability -sintered -synteresis -sintering -sinters -syntexis -synth -syntheme -synthermal -syntheses -synthesis -synthesise -synthesism -synthesist -synthesization -synthesize -synthesized -synthesizer -synthesizers -synthesizes -synthesizing -synthetase -synthete -synthetic -synthetical -synthetically -syntheticism -syntheticness -synthetics -synthetisation -synthetise -synthetised -synthetiser -synthetising -Synthetism -synthetist -synthetization -synthetize -synthetizer -synthol -sin-thralled -synthroni -synthronoi -synthronos -synthronus -synths -syntype -syntypic -syntypicism -Sinto -sintoc -Sintoism -Sintoist -syntomy -syntomia -Sinton -syntone -syntony -syntonic -syntonical -syntonically -syntonies -syntonin -syntonisation -syntonise -syntonised -syntonising -syntonization -syntonize -syntonized -syntonizer -syntonizing -syntonolydian -syntonous -syntripsis -syntrope -syntrophic -syntrophoblast -syntrophoblastic -syntropy -syntropic -syntropical -Sintsink -Sintu -sinuate -sinuated -sinuatedentate -sinuate-leaved -sinuately -sinuates -sinuating -sinuation -sinuato- -sinuatocontorted -sinuatodentate -sinuatodentated -sinuatopinnatifid -sinuatoserrated -sinuatoundulate -sinuatrial -sinuauricular -Sinuiju -sinuitis -sinuose -sinuosely -sinuosity -sinuosities -sinuoso- -sinuous -sinuousity -sinuousities -sinuously -sinuousness -Sinupallia -sinupallial -Sinupallialia -Sinupalliata -sinupalliate -Synura -synurae -Sinus -sinusal -sinuses -synusia -synusiast -sinusitis -sinuslike -sinusoid -sinusoidal -sinusoidally -sinusoids -sinuventricular -sinward -sin-washing -sin-wounded -sinzer -Siobhan -syodicon -siol -Sion -sioning -Sionite -Syosset -Siouan -Sioux -Siouxie -SIP -sipage -sipapu -SIPC -sipe -siped -siper -sipers -sipes -Sipesville -syph -siphac -sypher -syphered -syphering -syphers -syphil- -syphilid -syphilide -syphilidography -syphilidologist -syphiliphobia -syphilis -syphilisation -syphilise -syphilises -syphilitic -syphilitically -syphilitics -syphilization -syphilize -syphilized -syphilizing -syphilo- -syphiloderm -syphilodermatous -syphilogenesis -syphilogeny -syphilographer -syphilography -syphiloid -syphilology -syphilologist -syphiloma -syphilomatous -syphilophobe -syphilophobia -syphilophobic -syphilopsychosis -syphilosis -syphilous -Siphnos -siphoid -siphon -syphon -siphonaceous -siphonage -siphonal -Siphonales -Siphonaptera -siphonapterous -Siphonaria -siphonariid -Siphonariidae -Siphonata -siphonate -siphonated -Siphoneae -siphoned -syphoned -siphoneous -siphonet -siphonia -siphonial -Siphoniata -siphonic -Siphonifera -siphoniferous -siphoniform -siphoning -syphoning -siphonium -siphonless -siphonlike -siphono- -Siphonobranchiata -siphonobranchiate -Siphonocladales -Siphonocladiales -siphonogam -Siphonogama -siphonogamy -siphonogamic -siphonogamous -siphonoglyph -siphonoglyphe -siphonognathid -Siphonognathidae -siphonognathous -Siphonognathus -Siphonophora -siphonophoran -siphonophore -siphonophorous -siphonoplax -siphonopore -siphonorhinal -siphonorhine -siphonosome -siphonostele -siphonostely -siphonostelic -Siphonostoma -Siphonostomata -siphonostomatous -siphonostome -siphonostomous -siphonozooid -siphons -syphons -siphonula -siphorhinal -siphorhinian -siphosome -siphuncle -siphuncled -siphuncular -Siphunculata -siphunculate -siphunculated -siphunculus -Sipibo -sipid -sipidity -sipylite -siping -Siple -sipling -SIPP -Sippar -sipped -sipper -sippers -sippet -sippets -sippy -sipping -sippingly -sippio -Sipple -SIPS -Sipsey -Sipunculacea -sipunculacean -sipunculid -Sipunculida -sipunculoid -Sipunculoidea -Sipunculus -Siqueiros -SIR -SYR -Syr. -Sirach -Siracusa -Syracusan -Syracuse -Siraj-ud-daula -sircar -sirdar -sirdars -sirdarship -sire -syre -sired -Siredon -siree -sirees -sire-found -sireless -Siren -syren -Sirena -sirene -sireny -Sirenia -sirenian -sirenians -sirenic -sirenical -sirenically -Sirenidae -sirening -sirenize -sirenlike -sirenoid -Sirenoidea -Sirenoidei -sirenomelus -sirens -syrens -Sirenum -sires -sireship -siress -Siret -syrette -sirex -sirgang -Syria -Syriac -Syriacism -Syriacist -Sirian -Siryan -Syrian -Sirianian -Syrianic -Syrianism -Syrianize -syrians -Syriarch -siriasis -Syriasm -siricid -Siricidae -Siricius -Siricoidea -Syryenian -sirih -Sirimavo -siring -syringa -syringadenous -syringas -syringe -syringeal -syringed -syringeful -syringes -syringin -syringing -syringitis -syringium -syringo- -syringocele -syringocoele -syringomyelia -syringomyelic -syringotome -syringotomy -Syrinx -syrinxes -Syriologist -siriometer -Sirione -siris -Sirius -sirkar -sirkeer -sirki -sirky -Sirkin -sirloin -sirloiny -sirloins -Syrma -syrmaea -sirmark -Sirmian -Syrmian -Sirmons -Sirmuellera -Syrnium -Syro- -Syro-arabian -Syro-babylonian -siroc -sirocco -siroccoish -siroccoishly -siroccos -Syro-chaldaic -Syro-chaldean -Syro-chaldee -Syro-egyptian -Syro-galilean -Syro-hebraic -Syro-hexaplar -Syro-hittite -Sirois -Syro-macedonian -Syro-mesopotamian -S-iron -sirop -Syro-persian -Syrophoenician -Syro-roman -siros -Sirotek -sirpea -syrphian -syrphians -syrphid -Syrphidae -syrphids -syrphus -sirple -sirpoon -sirra -sirrah -sirrahs -sirras -sirree -sirrees -sir-reverence -syrringed -syrringing -sirs -Sirsalis -sirship -syrt -Sirte -SIRTF -syrtic -Syrtis -siruaballi -siruelas -sirup -syrup -siruped -syruped -siruper -syruper -sirupy -syrupy -syrupiness -syruplike -sirups -syrups -syrus -sirvent -sirvente -sirventes -sis -Sisak -SISAL -sisalana -sisals -Sisco -SISCOM -siscowet -sise -sisel -Sisely -Sisera -siserara -siserary -siserskite -sises -SYSGEN -sish -sisham -sisi -Sisile -Sisymbrium -sysin -Sisinnius -Sisyphean -Sisyphian -Sisyphides -Sisyphism -Sisyphist -Sisyphus -Sisyrinchium -sisith -siskin -Siskind -siskins -Sisley -sislowet -Sismondi -sismotherapy -sysout -siss -syssarcosic -syssarcosis -syssarcotic -Sissel -syssel -sysselman -Sisseton -Sissy -syssiderite -Sissie -sissier -sissies -sissiest -sissify -sissification -sissified -sissyish -sissyism -sissiness -sissing -sissy-pants -syssita -syssitia -syssition -Sisson -sissone -sissonne -sissonnes -sissoo -Sissu -sist -Syst -syst. -systaltic -Sistani -systasis -systatic -system -systematy -systematic -systematical -systematicality -systematically -systematicalness -systematician -systematicness -systematics -systematisation -systematise -systematised -systematiser -systematising -systematism -systematist -systematization -systematize -systematized -systematizer -systematizes -systematizing -systematology -systemed -systemic -systemically -systemics -systemisable -systemisation -systemise -systemised -systemiser -systemising -systemist -systemizable -systemization -systemize -systemized -systemizer -systemizes -systemizing -systemless -systemoid -systemproof -Systems -system's -systemwide -systemwise -sisten -sistence -sistency -sistent -Sister -sistered -sister-german -sisterhood -sisterhoods -sisterin -sistering -sister-in-law -sisterize -sisterless -sisterly -sisterlike -sisterliness -sistern -Sisters -sistership -Sistersville -sister-wife -systyle -systilius -systylous -Sistine -sisting -sistle -Sisto -systolated -systole -systoles -systolic -sistomensin -sistra -sistren -sistroid -sistrum -sistrums -Sistrurus -SIT -SITA -sitao -sitar -sitarist -sitarists -sitars -Sitarski -sitatunga -sitatungas -sitch -sitcom -sitcoms -sit-down -sit-downer -site -sited -sitella -sites -sitfast -sit-fast -sith -sithcund -sithe -sithement -sithen -sithence -sithens -sithes -Sithole -siti -sitient -sit-in -siting -sitio -sitio- -sitiology -sitiomania -sitiophobia -Sitka -Sitkan -Sitnik -sito- -sitology -sitologies -sitomania -Sitophilus -sitophobia -sitophobic -sitosterin -sitosterol -sitotoxism -Sitra -sitrep -sitringee -sits -Sitsang -Sitta -sittee -sitten -Sitter -sitter-by -sitter-in -sitter-out -sitters -sitter's -Sittidae -Sittinae -sittine -sitting -sittings -sittringy -situ -situal -situate -situated -situates -situating -situation -situational -situationally -situations -situla -situlae -situp -sit-up -sit-upon -situps -situs -situses -situtunga -Sitwell -sitz -sitzbath -sitzkrieg -sitzmark -sitzmarks -Siubhan -syud -Sium -siums -syun -Siusan -Siusi -Siuslaw -Siva -Sivaism -Sivaist -Sivaistic -Sivaite -Sivan -Sivapithecus -Sivas -siva-siva -sivathere -Sivatheriidae -Sivatheriinae -sivatherioid -Sivatherium -siver -sivers -Syverson -Sivia -Sivie -sivvens -Siwan -Siward -Siwash -siwashed -siwashing -siwens -Six -six-acre -sixain -six-angled -six-arched -six-banded -six-bar -six-barred -six-barreled -six-by-six -six-bottle -six-canted -six-cent -six-chambered -six-cylinder -six-cylindered -six-colored -six-cornered -six-coupled -six-course -six-cut -six-day -six-dollar -six-eared -six-edged -six-eyed -six-eight -six-ell -sixer -Sixes -six-faced -six-figured -six-fingered -six-flowered -sixfoil -six-foiled -sixfold -sixfolds -six-foot -six-footed -six-footer -six-gallon -six-gated -six-gilled -six-grain -six-gram -sixgun -six-gun -sixhaend -six-headed -sixhynde -six-hoofed -six-horse -six-hour -six-yard -six-year -six-year-old -six-inch -sixing -sixish -six-jointed -six-leaved -six-legged -six-letter -six-lettered -six-lined -six-lobed -six-masted -six-master -Sixmile -six-mile -six-minute -sixmo -sixmos -six-mouth -six-oared -six-oclock -six-o-six -six-ounce -six-pack -sixpence -sixpences -sixpenny -sixpennyworth -six-petaled -six-phase -six-ply -six-plumed -six-pointed -six-pot -six-pound -six-pounder -six-rayed -six-ranked -six-ribbed -six-room -six-roomed -six-rowed -sixscore -six-second -six-shafted -six-shared -six-shilling -six-shooter -six-sided -six-syllable -sixsome -six-spined -six-spot -six-spotted -six-story -six-storied -six-stringed -six-striped -sixte -sixteen -sixteener -sixteenfold -sixteen-foot -sixteenmo -sixteenmos -sixteenpenny -sixteen-pounder -sixteens -sixteenth -sixteenthly -sixteenths -sixtes -sixth -sixthet -sixth-floor -sixth-form -sixth-grade -sixthly -sixth-rate -six-three-three -sixths -sixty -sixty-eight -sixty-eighth -sixties -sixtieth -sixtieths -sixty-fifth -sixty-first -sixty-five -sixtyfold -sixty-four -sixty-fourmo -sixty-fourmos -sixty-fourth -six-time -Sixtine -sixty-nine -sixty-ninth -sixty-one -sixtypenny -sixty-second -sixty-seven -sixty-seventh -sixty-six -sixty-sixth -sixty-third -sixty-three -sixty-two -six-ton -Sixtowns -Sixtus -six-week -six-wheel -six-wheeled -six-wheeler -six-winged -sizable -sizableness -sizably -sizal -sizar -sizars -sizarship -size -sizeable -sizeableness -sizeably -sized -sizeine -sizeman -sizer -sizers -sizes -sizy -sizier -siziest -siziests -syzygal -syzygetic -syzygetically -syzygy -sizygia -syzygia -syzygial -syzygies -sizygium -syzygium -siziness -sizinesses -sizing -sizings -Syzran -sizz -sizzard -sizzing -sizzle -sizzled -sizzler -sizzlers -sizzles -sizzling -sizzlingly -SJ -sjaak -Sjaelland -sjambok -sjamboks -SJC -SJD -Sjenicki -Sjland -Sjoberg -sjomil -sjomila -sjouke -sk -ska -skaalpund -skaamoog -skaddle -skaff -skaffie -skag -Skagen -Skagerrak -skags -Skagway -skail -skayles -skaillie -skainsmate -skair -skaitbird -skaithy -skal -skalawag -skald -skaldic -skalds -skaldship -skalpund -Skamokawa -skance -Skanda -skandhas -Skandia -Skaneateles -Skanee -Skantze -Skardol -skart -skas -skasely -Skat -skate -skateable -skateboard -skateboarded -skateboarder -skateboarders -skateboarding -skateboards -skated -skatemobile -skatepark -skater -skaters -skates -skatikas -skatiku -skating -skatings -skatist -skatol -skatole -skatoles -skatology -skatols -skatoma -skatoscopy -skatosine -skatoxyl -skats -Skaw -skean -skeane -skeanes -skeanockle -skeans -Skeat -sked -skedaddle -skedaddled -skedaddler -skedaddling -skedge -skedgewith -skedlock -skee -skeeball -Skee-Ball -skeech -skeed -skeeg -skeeing -skeel -skeely -skeeling -skeen -skeenyie -skeens -skeer -skeered -skeery -Skees -skeesicks -skeet -skeeter -skeeters -skeets -skeezicks -skeezix -skef -skeg -skegger -skegs -skey -skeich -Skeie -skeif -skeigh -skeighish -skeily -skein -skeined -skeiner -skeining -skeins -skeipp -skeyting -skel -skelder -skelderdrake -skeldock -skeldraik -skeldrake -skelet -skeletal -skeletally -skeletin -skeleto- -skeletogeny -skeletogenous -skeletomuscular -skeleton -skeletony -skeletonian -skeletonic -skeletonise -skeletonised -skeletonising -skeletonization -skeletonize -skeletonized -skeletonizer -skeletonizing -skeletonless -skeletonlike -skeletons -skeleton's -skeletonweed -skelf -skelgoose -skelic -Skell -skellat -skeller -Skelly -Skellytown -skelloch -skellum -skellums -skelm -Skelmersdale -skelms -skelp -skelped -skelper -skelpie-limmer -skelpin -skelping -skelpit -skelps -skelter -skeltered -skeltering -skelters -Skelton -Skeltonian -Skeltonic -Skeltonical -Skeltonics -skelvy -skemmel -skemp -sken -skenai -Skene -skenes -skeo -skeough -skep -skepful -skepfuls -skeppe -skeppist -skeppund -skeps -skepsis -skepsises -skeptic -skeptical -skeptically -skepticalness -skepticism -skepticisms -skepticize -skepticized -skepticizing -skeptics -skeptic's -skeptophylaxia -skeptophylaxis -sker -skere -Skerl -skerret -skerry -skerrick -skerries -skers -sket -sketch -sketchability -sketchable -sketchbook -sketch-book -sketched -sketchee -sketcher -sketchers -sketches -sketchy -sketchier -sketchiest -sketchily -sketchiness -sketching -sketchingly -sketchist -sketchlike -sketchpad -skete -sketiotai -skeuomorph -skeuomorphic -skevish -skew -skewback -skew-back -skewbacked -skewbacks -skewbald -skewbalds -skewed -skewer -skewered -skewerer -skewering -skewers -skewer-up -skewerwood -skew-gee -skewy -skewing -skewings -skew-jawed -skewl -skewly -skewness -skewnesses -skews -skew-symmetric -skewwhiff -skewwise -skhian -ski -Sky -skia- -skiable -skiagram -skiagrams -skiagraph -skiagraphed -skiagrapher -skiagraphy -skiagraphic -skiagraphical -skiagraphically -skiagraphing -skiamachy -skiameter -skiametry -skiapod -skiapodous -skiascope -skiascopy -sky-aspiring -Skiatook -skiatron -Skiba -skybal -skybald -skibbet -skibby -sky-blasted -sky-blue -skibob -skibobber -skibobbing -skibobs -Skybolt -sky-born -skyborne -sky-bred -skibslast -skycap -sky-capped -skycaps -sky-cast -skice -sky-clad -sky-clear -sky-cleaving -sky-climbing -skycoach -sky-color -sky-colored -skycraft -skid -skidded -skidder -skidders -skiddy -skiddycock -skiddier -skiddiest -skidding -skiddingly -skiddoo -skiddooed -skiddooing -skiddoos -Skidi -sky-dyed -skydive -sky-dive -skydived -skydiver -skydivers -skydives -skydiving -sky-diving -skidlid -Skidmore -sky-dome -skidoo -skidooed -skidooing -skidoos -skydove -skidpan -skidproof -skids -skidway -skidways -Skye -skiech -skied -skyed -skiegh -skiey -skyey -sky-elephant -Skien -sky-engendered -skieppe -skiepper -Skier -skiers -skies -Skiest -skieur -sky-facer -sky-falling -skiff -skiffle -skiffled -skiffles -skiffless -skiffling -skiffs -skift -skyfte -skyful -sky-gazer -sky-god -sky-high -skyhook -skyhooks -skyhoot -skiing -skying -skiings -skiis -skyish -skyjack -skyjacked -skyjacker -skyjackers -skyjacking -skyjacks -skijore -skijorer -skijorers -skijoring -ski-jumping -Skikda -sky-kissing -Skykomish -skil -Skyla -Skylab -Skyland -Skylar -skylark -skylarked -skylarker -skylarkers -skylarking -skylarks -skilder -skildfel -Skyler -skyless -skilfish -skilful -skilfully -skilfulness -skylight -skylights -skylight's -skylike -skyline -sky-line -skylined -skylines -skylining -skylit -Skilken -Skill -skillagalee -skilled -skillenton -Skillern -skilless -skillessness -skillet -skilletfish -skilletfishes -skillets -skillful -skillfully -skillfulness -skillfulnesses -skilly -skilligalee -skilling -skillings -skillion -skill-less -skill-lessness -Skillman -skillo -skills -skylook -skylounge -skilpot -skilty -skilts -skim -skyman -skimback -skimble-scamble -skimble-skamble -skim-coulter -skime -sky-measuring -skymen -skimmed -skimmelton -skimmer -skimmers -skimmerton -Skimmia -skim-milk -skimming -skimming-dish -skimmingly -skimmings -skimmington -skimmity -Skimo -Skimobile -Skimos -skimp -skimped -skimper-scamper -skimpy -skimpier -skimpiest -skimpily -skimpiness -skimping -skimpingly -skimps -skims -skim's -skin -skinball -skinbound -skin-breaking -skin-built -skinch -skin-clad -skin-clipping -skin-deep -skin-devouring -skindive -skin-dive -skin-dived -skindiver -skin-diver -skindiving -skin-diving -skin-dove -skinflick -skinflint -skinflinty -skinflintily -skinflintiness -skinflints -skinful -skinfuls -skinhead -skinheads -skink -skinked -skinker -skinkers -skinking -skinkle -skinks -skinless -skinlike -skinned -Skinner -skinnery -skinneries -skinners -skinner's -skinny -skinny-dip -skinny-dipped -skinny-dipper -skinny-dipping -skinny-dipt -skinnier -skinniest -skinny-necked -skinniness -skinning -skin-peeled -skin-piercing -skin-plastering -skin-pop -skin-popping -skins -skin's -skin-shifter -skin-spread -skint -skin-testing -skintight -skin-tight -skintle -skintled -skintling -skinworm -skiogram -skiograph -skiophyte -skioring -skiorings -Skip -skip-bomb -skip-bombing -skipbrain -skipdent -Skipetar -skyphoi -skyphos -skypipe -skipjack -skipjackly -skipjacks -skipkennel -skip-kennel -skiplane -ski-plane -skiplanes -sky-planted -skyplast -skipman -skyport -Skipp -skippable -Skippack -skipped -skippel -Skipper -skipperage -skippered -skippery -skippering -Skippers -skipper's -skippership -Skipperville -skippet -skippets -Skippy -Skippie -skipping -skippingly -skipping-rope -skipple -skippund -skips -skiptail -Skipton -skipway -Skipwith -skyre -sky-reaching -sky-rending -sky-resembling -skyrgaliard -skyriding -skyrin -skirl -skirlcock -skirled -skirling -skirls -skirmish -skirmished -skirmisher -skirmishers -skirmishes -skirmishing -skirmishingly -Skirnir -skyrocket -sky-rocket -skyrocketed -skyrockety -skyrocketing -skyrockets -Skirophoria -Skyros -skirp -skirr -skirred -skirreh -skirret -skirrets -skirring -skirrs -skirt -skirtboard -skirt-dancer -skirted -skirter -skirters -skirty -skirting -skirting-board -skirtingly -skirtings -skirtless -skirtlike -skirts -sky-ruling -skirwhit -skirwort -skis -skys -sky's -skysail -sky-sail -skysail-yarder -skysails -sky-scaling -skyscape -skyscrape -skyscraper -sky-scraper -skyscrapers -skyscraper's -skyscraping -skyshine -sky-sign -skystone -skysweeper -skit -skite -skyte -skited -skiter -skites -skither -sky-throned -sky-tinctured -skiting -skitishly -sky-touching -skits -Skitswish -Skittaget -Skittagetan -skitter -skittered -skittery -skitterier -skitteriest -skittering -skitters -skitty -skittyboot -skittish -skittishly -skittishness -skittle -skittled -skittler -skittles -skittle-shaped -skittling -skyugle -skiv -skive -skived -skiver -skivers -skiverwood -skives -skivy -skivie -skivies -skiving -skivvy -skivvied -Skivvies -skyway -skyways -skywalk -skywalks -skyward -skywards -skywave -skiwear -skiwears -skiwy -skiwies -sky-worn -skywrite -skywriter -skywriters -skywrites -skywriting -skywritten -skywrote -Skkvabekk -Sklar -sklate -sklater -sklent -sklented -sklenting -sklents -skleropelite -sklinter -skoal -skoaled -skoaling -skoals -Skodaic -skogbolite -Skoinolon -skokiaan -Skokie -Skokomish -skol -skolly -Skolnik -skomerite -skoo -skookum -skookum-house -skoot -Skopets -Skopje -Skoplje -skoptsy -skout -skouth -Skowhegan -skraeling -skraelling -skraigh -skreegh -skreeghed -skreeghing -skreeghs -skreel -skreigh -skreighed -skreighing -skreighs -Skricki -skryer -skrike -Skrymir -skrimshander -Skros -skrupul -Skt -SKU -skua -skuas -Skuld -skulduggery -skulk -skulked -skulker -skulkers -skulking -skulkingly -skulks -skull -skullbanker -skull-built -skullcap -skull-cap -skullcaps -skull-covered -skull-crowned -skull-dividing -skullduggery -skullduggeries -skulled -skullery -skullfish -skullful -skull-hunting -skully -skull-less -skull-like -skull-lined -skulls -skull's -skulp -skun -skunk -skunkbill -skunkbush -skunkdom -skunk-drunk -skunked -skunkery -skunkhead -skunk-headed -skunky -skunking -skunkish -skunklet -skunks -skunk's -skunktop -skunkweed -Skupshtina -Skurnik -skurry -skuse -Skutari -Skutchan -skutterudite -Skvorak -SL -SLA -slab -slabbed -slabber -slabbered -slabberer -slabbery -slabbering -slabbers -slabby -slabbiness -slabbing -Slaby -slablike -slabline -slabman -slabness -slabs -slab-sided -slab-sidedly -slab-sidedness -slabstone -slabwood -Slack -slackage -slack-bake -slack-baked -slacked -slacken -slackened -slackener -slackening -slackens -slacker -slackerism -slackers -slackest -slack-filled -slackie -slacking -slackingly -slack-jawed -slack-laid -slackly -slackminded -slackmindedness -slackness -slacknesses -slack-off -slack-rope -slacks -slack-salted -slack-spined -slack-twisted -slack-up -slack-water -slackwitted -slackwittedness -slad -sladang -SLADE -Sladen -slae -slag -slaggability -slaggable -slagged -slagger -slaggy -slaggier -slaggiest -slagging -slag-hearth -Slagle -slag-lead -slagless -slaglessness -slagman -slags -slay -slayable -Slayden -slayed -slayer -slayers -slaying -slain -slainte -slays -slaister -slaistery -slait -Slayton -slakable -slake -slakeable -slaked -slakeless -slaker -slakers -slakes -slaky -slakier -slakiest -slakin -slaking -SLALOM -slalomed -slaloming -slaloms -SLAM -slambang -slam-bang -slammakin -slammed -slammer -slammerkin -slammers -slamming -slammock -slammocky -slammocking -slamp -slampamp -slampant -slams -SLAN -slander -slandered -slanderer -slanderers -slanderful -slanderfully -slandering -slanderingly -slanderous -slanderously -slanderousness -slanderproof -slanders -slane -Slanesville -slang -slanged -slangy -slangier -slangiest -slangily -slanginess -slanging -slangish -slangishly -slangism -slangkop -slangous -slangrell -slangs -slangster -slanguage -slangular -slangwhang -slang-whang -slang-whanger -slank -slant -slanted -slant-eye -slant-eyed -slanter -slanty -slantindicular -slantindicularly -slanting -slantingly -slantingways -slantly -slants -slant-top -slantways -slantwise -slap -slap-bang -slapdab -slap-dab -slapdash -slap-dash -slapdashery -slapdasheries -slapdashes -slape -slaphappy -slaphappier -slaphappiest -slapjack -slapjacks -SLAPP -slapped -slapper -slappers -slappy -slapping -slaps -slapshot -slap-sided -slap-slap -slapstick -slapsticky -slapsticks -slap-up -SLAR -slare -slart -slarth -slartibartfast -slash -slashed -slasher -slashers -slashes -slash-grain -slashy -slashing -slashingly -slashings -slash-saw -slash-sawed -slash-sawing -slash-sawn -Slask -slat -slat-back -slatch -slatches -slate -slate-beveling -slate-brown -slate-color -slate-colored -slate-colour -slate-cutting -slated -Slatedale -slate-formed -slateful -slatey -slateyard -slatelike -slatemaker -slatemaking -slate-pencil -Slater -slaters -Slatersville -slates -slate-spired -slate-strewn -slate-trimming -slate-violet -slateworks -slath -slather -slathered -slathering -slathers -slaty -slatier -slatiest -slatify -slatified -slatifying -slatiness -slating -slatings -Slatington -slatish -Slaton -slats -slat's -slatted -slatter -slattered -slattery -slattering -slattern -slatternish -slatternly -slatternliness -slatternness -slatterns -slatting -Slaughter -slaughter-breathing -slaughter-dealing -slaughterdom -slaughtered -slaughterer -slaughterers -slaughterhouse -slaughter-house -slaughterhouses -slaughtery -slaughteryard -slaughtering -slaughteringly -slaughterman -slaughterous -slaughterously -Slaughters -slaughter-threatening -slaum -slaunchways -Slav -Slavdom -Slave -slaveborn -slave-carrying -slave-collecting -slave-cultured -slaved -slave-deserted -slave-drive -slave-driver -slave-enlarging -slave-got -slave-grown -slaveholder -slaveholding -Slavey -slaveys -slave-labor -slaveland -slaveless -slavelet -slavelike -slaveling -slave-making -slave-merchant -slavemonger -Slavenska -slaveowner -slaveownership -slave-owning -slavepen -slave-peopled -slaver -slavered -slaverer -slaverers -slavery -slaveries -slavering -slaveringly -slavers -slaves -slave-trade -Slavi -Slavian -Slavic -Slavicism -slavicist -Slavicize -Slavify -Slavification -slavikite -Slavin -slaving -Slavish -slavishly -slavishness -Slavism -Slavist -Slavistic -Slavization -Slavize -Slavkov -slavo- -slavocracy -slavocracies -slavocrat -slavocratic -Slavo-germanic -Slavo-hungarian -Slavo-lettic -Slavo-lithuanian -Slavonia -Slavonian -Slavonianize -Slavonic -Slavonically -Slavonicize -Slavonish -Slavonism -Slavonization -Slavonize -Slavophil -Slavophile -Slavophilism -Slavophobe -Slavophobia -Slavophobist -Slavo-phoenician -Slavo-teuton -Slavo-teutonic -slavs -slaw -slawbank -slaws -SLBM -SLC -sld -sld. -SLDC -Sldney -SLE -sleathy -sleave -sleaved -sleaves -sleave-silk -sleaving -sleaze -sleazes -sleazy -sleazier -sleaziest -sleazily -sleaziness -sleazo -Sleb -sleck -SLED -sledded -sledder -sledders -sledding -sleddings -sledful -sledge -sledged -sledgehammer -sledge-hammer -sledgehammered -sledgehammering -sledgehammers -sledgeless -sledgemeter -sledger -sledges -sledge's -sledging -sledlike -sled-log -sleds -sled's -slee -sleech -sleechy -sleek -sleek-browed -sleeked -sleeken -sleekened -sleekening -sleekens -sleeker -sleeker-up -sleekest -sleek-faced -sleek-haired -sleek-headed -sleeky -sleekier -sleekiest -sleeking -sleekit -sleek-leaf -sleekly -sleek-looking -sleekness -sleeks -sleek-skinned -Sleep -sleep-at-noon -sleep-bedeafened -sleep-bringer -sleep-bringing -sleep-causing -sleepcoat -sleep-compelling -sleep-created -sleep-desiring -sleep-dewed -sleep-dispelling -sleep-disturbing -sleep-drowned -sleep-drunk -sleep-enthralled -sleeper -sleepered -Sleepers -sleep-fatted -sleep-fearing -sleep-filled -sleepful -sleepfulness -sleep-heavy -sleepy -sleepy-acting -Sleepyeye -sleepy-eyed -sleepy-eyes -sleepier -sleepiest -sleepify -sleepyhead -sleepy-headed -sleepy-headedness -sleepyheads -sleepily -sleepy-looking -sleep-in -sleep-inducer -sleep-inducing -sleepiness -sleeping -sleepingly -sleepings -sleep-inviting -sleepish -sleepy-souled -sleepy-sounding -sleepy-voiced -sleepland -sleepless -sleeplessly -sleeplessness -sleeplike -sleep-loving -sleepmarken -sleep-procuring -sleep-producer -sleep-producing -sleepproof -sleep-provoker -sleep-provoking -sleep-resisting -sleepry -sleeps -sleep-soothing -sleep-stuff -sleep-swollen -sleep-tempting -sleepwaker -sleepwaking -sleepwalk -sleepwalked -sleepwalker -sleep-walker -sleepwalkers -sleepwalking -sleepwalks -sleepward -sleepwear -sleepwort -sleer -sleet -sleeted -sleety -sleetier -sleetiest -sleetiness -sleeting -sleetproof -sleets -sleeve -sleeveband -sleeveboard -sleeved -sleeve-defended -sleeveen -sleevefish -sleeveful -sleeve-hidden -sleeveless -sleevelessness -sleevelet -sleevelike -sleever -sleeves -sleeve's -sleeving -sleezy -sley -sleided -sleyed -sleyer -sleigh -sleighed -sleigher -sleighers -sleighing -sleighs -sleight -sleightful -sleighty -sleightness -sleight-of-hand -sleights -sleying -Sleipnir -sleys -Slemmer -Slemp -slendang -slender -slender-ankled -slender-armed -slender-beaked -slender-billed -slender-bladed -slender-bodied -slender-branched -slenderer -slenderest -slender-fingered -slender-finned -slender-flanked -slender-flowered -slender-footed -slender-hipped -slenderish -slenderization -slenderize -slenderized -slenderizes -slenderizing -slender-jawed -slender-jointed -slender-leaved -slender-legged -slenderly -slender-limbed -slender-looking -slender-muzzled -slenderness -slender-nosed -slender-podded -slender-shafted -slender-shouldered -slender-spiked -slender-stalked -slender-stemmed -slender-striped -slender-tailed -slender-toed -slender-trunked -slender-waisted -slender-witted -slent -slepez -slept -Slesvig -Sleswick -slete -Sletten -sleuth -sleuthdog -sleuthed -sleuthful -sleuthhound -sleuth-hound -sleuthing -sleuthlike -sleuths -slew -slewed -slew-eyed -slewer -slewing -slewingslews -slews -slewth -Slezsko -Sly -slibbersauce -slibber-sauce -slyboots -sly-boots -SLIC -slice -sliceable -sliced -slicer -slicers -slices -slich -slicht -slicing -slicingly -slick -slick-ear -slicked -slicken -slickens -slickenside -slickensided -slicker -slickered -slickery -slickers -slickest -slick-faced -slick-haired -slicking -slickly -slick-looking -slickness -slickpaper -slicks -slick-spoken -slickstone -slick-talking -slick-tongued -Slickville -slid -'slid -slidable -slidableness -slidably -slidage -slidden -slidder -sliddery -slidderness -sliddry -slide -slide- -slideable -slideableness -slideably -slide-action -slided -slide-easy -slidefilm -slidegroat -slide-groat -slidehead -slideknot -Slidell -slideman -slideproof -slider -slide-rest -slide-rock -sliders -slide-rule -slides -slide-valve -slideway -slideways -slide-wire -sliding -sliding-gear -slidingly -slidingness -sliding-scale -slidometer -sly-eyed -slier -slyer -sliest -slyest -'slife -Slifka -slifter -sliggeen -slight -'slight -slight-billed -slight-bottomed -slight-built -slighted -slighten -slighter -slightest -slight-esteemed -slighty -slightier -slightiest -slightily -slightiness -slight-informed -slighting -slightingly -slightish -slightly -slight-limbed -slight-looking -slight-made -slight-natured -slightness -slights -slight-seeming -slight-shaded -slight-timbered -Sligo -sly-goose -sly-grog -slyish -slik -Slyke -slily -slyly -sly-looking -SLIM -slim-ankled -slim-built -slime -slime-begotten -slime-browned -slime-coated -slimed -slime-filled -slimeman -slimemen -slimepit -slimer -slimes -slime-secreting -slime-washed -slimy -slimy-backed -slimier -slimiest -slimily -sliminess -sliming -slimish -slimishness -slim-jim -slim-leaved -slimly -slim-limbed -slimline -slimmed -slimmer -slimmest -slimming -slimmish -slimness -slimnesses -slimpsy -slimpsier -slimpsiest -slims -slim-shanked -slimsy -slimsier -slimsiest -slim-spired -slim-trunked -slim-waisted -sline -slyness -slynesses -sling -sling- -slingback -slingball -slinge -Slinger -slingers -slinging -slingman -slings -slingshot -slingshots -slingsman -slingsmen -slingstone -slink -slinked -slinker -slinky -slinkier -slinkiest -slinkily -slinkiness -slinking -slinkingly -Slinkman -slinks -slinkskin -slinkweed -slinte -SLIP -slip- -slip-along -slipback -slipband -slipboard -slipbody -slipbodies -slipcase -slipcases -slipcoach -slipcoat -Slipcote -slipcover -slipcovers -slipe -slype -sliped -slipes -slypes -slipform -slipformed -slipforming -slipforms -slipgibbet -sliphalter -sliphorn -sliphouse -sliping -slipknot -slip-knot -slipknots -slipless -slipman -slipnoose -slip-on -slipout -slipouts -slipover -slipovers -slippage -slippages -slipped -slipper -slippered -slipperflower -slipper-foxed -slippery -slipperyback -slippery-bellied -slippery-breeched -slipperier -slipperiest -slipperily -slippery-looking -slipperiness -slipperinesses -slipperyroot -slippery-shod -slippery-sleek -slippery-tongued -slipperlike -slipper-root -slippers -slipper's -slipper-shaped -slipperweed -slipperwort -slippy -slippier -slippiest -slippiness -slipping -slippingly -slipproof -sliprail -slip-rail -slip-ring -slips -slip's -slipsheet -slip-sheet -slip-shelled -slipshod -slipshoddy -slipshoddiness -slipshodness -slipshoe -slip-shoe -slipskin -slip-skin -slipslap -slipslop -slip-slop -slipsloppish -slipsloppism -slipslops -slipsole -slipsoles -slipstep -slipstick -slip-stitch -slipstone -slipstream -slipstring -slip-string -slipt -slip-top -sliptopped -slipup -slip-up -slipups -slipway -slip-way -slipways -slipware -slipwares -slirt -slish -slit -slitch -slit-drum -slite -slit-eared -slit-eyed -slit-footed -slither -slithered -slithery -slithering -slitheroo -slithers -slithy -sliting -slitless -slitlike -slit-nosed -sly-tongued -slits -slit's -slit-shaped -slitshell -slitted -slitter -slitters -slitty -slitting -slitwing -slitwise -slitwork -slive -sliver -slivered -sliverer -sliverers -slivery -slivering -sliverlike -sliverproof -slivers -sliving -slivovic -slivovics -slivovitz -Sliwa -sliwer -Sloan -Sloane -Sloanea -Sloansville -sloat -Sloatman -Sloatsburg -slob -slobber -slobberchops -slobber-chops -slobbered -slobberer -slobbery -slobbering -slobbers -slobby -slobbiness -slobbish -slobs -slock -slocken -slocker -slockingstone -slockster -Slocomb -Slocum -slod -slodder -slodge -slodger -sloe -sloeberry -sloeberries -sloe-black -sloe-blue -sloebush -sloe-colored -sloe-eyed -sloes -sloetree -slog -slogan -sloganeer -sloganize -slogans -slogan's -slogged -slogger -sloggers -slogging -sloggingly -slogs -slogwood -sloid -sloyd -sloids -sloyds -slojd -slojds -sloka -sloke -sloked -sloken -sloking -slommack -slommacky -slommock -slon -slone -slonk -sloo -sloom -sloomy -sloop -sloopman -sloopmen -sloop-rigged -sloops -sloosh -sloot -slop -slop-built -slopdash -slope -slope- -slope-browed -sloped -slope-eared -slope-edged -slope-faced -slope-lettered -slopely -slopeness -sloper -slope-roofed -slopers -slopes -slope-sided -slope-toothed -slopeways -slope-walled -slopewise -slopy -sloping -slopingly -slopingness -slopmaker -slopmaking -slop-molded -slop-over -sloppage -slopped -sloppery -slopperies -sloppy -sloppier -sloppiest -sloppily -sloppiness -slopping -slops -slopseller -slop-seller -slopselling -slopshop -slop-shop -slopstone -slopwork -slop-work -slopworker -slopworks -slorp -Slosberg -slosh -sloshed -slosher -sloshes -sloshy -sloshier -sloshiest -sloshily -sloshiness -sloshing -slot -slotback -slotbacks -slot-boring -slot-drill -slot-drilling -slote -sloted -sloth -slot-headed -slothful -slothfully -slothfulness -slothfuls -slothound -sloths -slotman -Slotnick -slots -slot's -slot-spike -slotted -slotten -slotter -slottery -slotting -slotwise -sloubbie -slouch -slouched -sloucher -slouchers -slouches -slouchy -slouchier -slouchiest -slouchily -slouchiness -slouching -slouchingly -Slough -sloughed -Sloughhouse -sloughy -sloughier -sloughiest -sloughiness -sloughing -sloughs -slounge -slounger -slour -sloush -Slovak -Slovakia -Slovakian -Slovakish -slovaks -Slovan -sloven -Slovene -Slovenia -Slovenian -Slovenish -slovenly -slovenlier -slovenliest -slovenlike -slovenliness -slovenry -slovens -Slovensko -slovenwood -Slovintzi -slow -slowback -slow-back -slowbelly -slow-belly -slowbellied -slowbellies -slow-blooded -slow-breathed -slow-breathing -slow-breeding -slow-burning -slow-circling -slowcoach -slow-coach -slow-combustion -slow-conceited -slow-contact -slow-crawling -slow-creeping -slow-developed -slowdown -slowdowns -slow-drawing -slow-drawn -slow-driving -slow-ebbing -slowed -slow-eyed -slow-endeavoring -slower -slowest -slow-extinguished -slow-fingered -slow-foot -slow-footed -slowful -slow-gaited -slowgoing -slow-going -slow-growing -slowheaded -slowhearted -slowheartedness -slowhound -slowing -slowish -slow-legged -slowly -slow-march -slow-mettled -slow-motion -slowmouthed -slow-moving -slowness -slownesses -slow-paced -slowpoke -slowpokes -slow-poky -slowrie -slow-run -slow-running -slows -slow-sailing -slow-speaking -slow-speeched -slow-spirited -slow-spoken -slow-stepped -slow-sudden -slow-sure -slow-thinking -slow-time -slow-tongued -slow-tuned -slowup -slow-up -slow-winged -slowwitted -slow-witted -slowwittedly -slow-wittedness -slowworm -slow-worm -slowworms -SLP -SLR -SLS -slt -slub -slubbed -slubber -slubberdegullion -slubbered -slubberer -slubbery -slubbering -slubberingly -slubberly -slubbers -slubby -slubbing -slubbings -slubs -slud -sludder -sluddery -sludge -sludged -sludger -sludges -sludgy -sludgier -sludgiest -sludginess -sludging -slue -slued -slue-footed -sluer -slues -SLUFAE -sluff -sluffed -sluffing -sluffs -slug -slugabed -slug-abed -slug-a-bed -slugabeds -slugfest -slugfests -sluggard -sluggardy -sluggarding -sluggardize -sluggardly -sluggardliness -sluggardness -sluggardry -sluggards -slugged -slugger -sluggers -sluggy -slugging -sluggingly -sluggish -sluggishly -sluggishness -sluggishnesses -slughorn -slug-horn -sluglike -slugs -slugwood -slug-worm -sluice -sluiced -sluicegate -sluicelike -sluicer -sluices -sluiceway -sluicy -sluicing -sluig -sluing -sluit -Sluiter -slum -slumber -slumber-bound -slumber-bringing -slumber-closing -slumbered -slumberer -slumberers -slumberful -slumbery -slumbering -slumberingly -slumberland -slumberless -slumber-loving -slumberous -slumberously -slumberousness -slumberproof -slumbers -slumber-seeking -slumbersome -slumber-wrapt -slumbrous -slumdom -slum-dwellers -slumgullion -slumgum -slumgums -slumism -slumisms -slumland -slumlike -slumlord -slumlords -slummage -slummed -slummer -slummers -slummy -slummier -slummiest -slumminess -slumming -slummock -slummocky -Slump -slumped -slumpy -slumping -slumpproof -slumproof -slumps -slumpwork -slums -slum's -slumward -slumwise -slung -slungbody -slungbodies -slunge -slungshot -slunk -slunken -slup -slur -slurb -slurban -slurbow -slurbs -slurp -slurped -slurping -slurps -slurred -slurry -slurried -slurries -slurrying -slurring -slurringly -slurs -slur's -slurvian -slush -slush-cast -slushed -slusher -slushes -slushy -slushier -slushiest -slushily -slushiness -slushing -slushpit -slut -slutch -slutchy -sluther -sluthood -sluts -slutted -slutter -sluttered -sluttery -sluttering -slutty -sluttikin -slutting -sluttish -sluttishly -sluttishness -SM -SMA -sma-boukit -smachrie -smack -smack-dab -smacked -smackee -smacker -smackeroo -smackeroos -smackers -smackful -smacking -smackingly -Smackover -smacks -smacksman -smacksmen -smaik -Smail -Smalcaldian -Smalcaldic -Small -small-acred -smallage -smallages -small-ankled -small-arm -small-armed -small-arms -small-beer -small-billed -small-boat -small-bodied -smallboy -small-boyhood -small-boyish -small-boned -small-bore -small-brained -small-caliber -small-celled -small-clawed -smallclothes -small-clothes -smallcoal -small-college -small-colleger -small-cornered -small-crowned -small-diameter -small-drink -small-eared -Smalley -small-eyed -smallen -Small-endian -Smallens -smaller -smallest -small-faced -small-feed -small-finned -small-flowered -small-footed -small-framed -small-fry -small-fruited -small-grain -small-grained -small-habited -small-handed -small-headed -smallhearted -small-hipped -smallholder -smallholding -small-horned -smally -smalling -smallish -smallishness -small-jointed -small-leaved -small-letter -small-lettered -small-limbed -small-looking -small-lunged -Smallman -small-minded -small-mindedly -small-mindedness -smallmouth -smallmouthed -small-nailed -small-natured -smallness -smallnesses -small-paneled -small-paper -small-part -small-pattern -small-petaled -small-pored -smallpox -smallpoxes -smallpox-proof -small-preferred -small-reasoned -smalls -small-scale -small-scaled -small-shelled -small-size -small-sized -small-souled -small-spaced -small-spotted -smallsword -small-sword -small-tailed -small-talk -small-threaded -small-timbered -smalltime -small-time -small-timer -small-type -small-tired -small-toned -small-tooth -small-toothed -small-topped -small-town -small-towner -small-trunked -small-visaged -small-visioned -smallware -small-ware -small-wheeled -small-windowed -Smallwood -smalm -smalmed -smalming -smalt -smalt-blue -smalter -smalti -smaltine -smaltines -smaltite -smaltites -smalto -smaltos -smaltost -smalts -smaltz -smaragd -smaragde -smaragdes -smaragdine -smaragdite -smaragds -smaragdus -smarm -smarmy -smarmier -smarmiest -smarms -Smarr -Smart -smart-aleck -smart-alecky -smart-aleckiness -smartass -smart-ass -smart-built -smart-cocked -smart-dressing -smarted -smarten -smartened -smartening -smartens -smarter -smartest -smarty -smartie -smarties -smarting -smartingly -smarty-pants -smartish -smartism -smartless -smartly -smart-looking -smart-money -smartness -smartnesses -smarts -smart-spoken -smart-stinging -Smartt -smart-talking -smart-tongued -Smartville -smartweed -smart-witted -SMAS -SMASF -smash -smashable -smashage -smash-and-grab -smashboard -smashed -smasher -smashery -smashers -smashes -smashing -smashingly -smashment -smashup -smash-up -smashups -SMASPU -smatch -smatchet -smatter -smattered -smatterer -smattery -smattering -smatteringly -smatterings -smatters -smaze -smazes -SMB -SMC -SMD -SMDF -SMDI -SMDR -SMDS -SME -smear -smearcase -smear-dab -smeared -smearer -smearers -smeary -smearier -smeariest -smeariness -smearing -smearless -smears -smear-sheet -smeath -Smeaton -smectic -Smectymnuan -Smectymnuus -smectis -smectite -smeddum -smeddums -Smedley -smee -smeech -smeek -smeeked -smeeky -smeeking -smeeks -smeer -smeeth -smegma -smegmas -smegmatic -smell -smellable -smellage -smelled -smeller -smeller-out -smellers -smell-feast -smellful -smellfungi -smellfungus -smelly -smellie -smellier -smelliest -smelliness -smelling -smelling-stick -smell-less -smell-lessness -smellproof -smells -smell-smock -smellsome -smelt -smelt- -smelted -smelter -smeltery -smelteries -smelterman -smelters -Smelterville -smelting -smeltman -smelts -smerk -smerked -smerking -smerks -smervy -Smetana -smeth -smethe -Smethport -Smethwick -smeuse -smeuth -smew -smews -SMEX -SMG -SMI -smich -smicker -smicket -smickly -Smicksburg -smick-smack -smick-smock -smiddy -smiddie -smiddy-leaves -smiddum -smidge -smidgen -smidgens -smidgeon -smidgeons -smidgin -smidgins -Smyer -smiercase -smifligate -smifligation -smift -Smiga -smiggins -Smilacaceae -smilacaceous -Smilaceae -smilaceous -smilacin -Smilacina -Smilax -smilaxes -smile -smileable -smileage -smile-covering -smiled -smiled-out -smile-frowning -smileful -smilefulness -Smiley -smileless -smilelessly -smilelessness -smilemaker -smilemaking -smileproof -smiler -smilers -smiles -smilet -smile-tuned -smile-wreathed -smily -smiling -smilingly -smilingness -Smilodon -SMILS -Smintheus -Sminthian -sminthurid -Sminthuridae -Sminthurus -smirch -smirched -smircher -smirches -smirchy -smirching -smirchless -smiris -smirk -smirked -smirker -smirkers -smirky -smirkier -smirkiest -smirking -smirkingly -smirkish -smirkle -smirkly -smirks -Smyrna -Smyrnaite -Smyrnean -Smyrniot -Smyrniote -smirtle -SMIT -smitable -Smitane -smitch -smite -smiter -smiters -smites -Smith -smyth -smitham -Smithboro -Smithburg -smithcraft -Smithdale -Smythe -smither -smithereen -smithereens -smithery -smitheries -Smithers -Smithfield -smithy -Smithian -Smithianism -smithydander -smithied -smithier -smithies -smithying -smithing -smithite -Smithland -Smiths -Smithsburg -Smithshire -Smithson -Smithsonian -smithsonite -Smithton -Smithtown -smithum -Smithville -Smithwick -smithwork -smiting -smytrie -Smitt -smitten -smitter -Smitty -smitting -smittle -smittleish -smittlish -sml -SMM -SMO -Smoaks -SMOC -Smock -smocked -smocker -smockface -smock-faced -smock-frock -smock-frocked -smocking -smockings -smockless -smocklike -smocks -smog -smoggy -smoggier -smoggiest -smogless -smogs -SMOH -smokable -smokables -Smoke -smokeable -smoke-ball -smoke-begotten -smoke-black -smoke-bleared -smoke-blinded -smoke-blue -smoke-bound -smokebox -smoke-brown -smoke-burning -smokebush -smokechaser -smoke-colored -smoke-condensing -smoke-consuming -smoke-consumptive -smoke-cure -smoke-curing -smoked -smoke-dyed -smoke-dry -smoke-dried -smoke-drying -smoke-eater -smoke-eating -smoke-enrolled -smoke-exhaling -smokefarthings -smoke-filled -smoke-gray -smoke-grimed -smokeho -smokehole -smoke-hole -smokehouse -smokehouses -smokey -smoke-yellow -smokejack -smoke-jack -smokejumper -smoke-laden -smokeless -smokelessly -smokelessness -smokelike -smoke-oh -smoke-paint -smoke-pennoned -smokepot -smokepots -smoke-preventing -smoke-preventive -smokeproof -smoker -smokery -smokers -smokes -smokescreen -smoke-selling -smokeshaft -smoke-smothered -smoke-sodden -smokestack -smoke-stack -smokestacks -smoke-stained -smokestone -smoketight -smoke-torn -Smoketown -smoke-vomiting -smokewood -smoke-wreathed -smoky -smoky-bearded -smoky-blue -smoky-colored -smokier -smokies -smokiest -smoky-flavored -smokily -smoky-looking -smokiness -smoking -smoking-concert -smoking-room -smokings -smokyseeming -smokish -smoky-smelling -smoky-tinted -smoky-waving -smoko -smokos -Smolan -smolder -smoldered -smoldering -smolderingness -smolders -Smolensk -Smollett -smolt -smolts -smooch -smooched -smooches -smoochy -smooching -smoochs -smoodge -smoodged -smoodger -smoodging -smooge -smook -smoorich -Smoos -Smoot -smooth -smoothable -smooth-ankled -smoothback -smooth-barked -smooth-bedded -smooth-bellied -smooth-billed -smooth-bodied -smoothboots -smoothbore -smoothbored -smooth-browed -smooth-cast -smooth-cheeked -smooth-chinned -smooth-clouded -smoothcoat -smooth-coated -smooth-coil -smooth-combed -smooth-core -smooth-crested -smooth-cut -smooth-dittied -smoothed -smooth-edged -smoothen -smoothened -smoothening -smoothens -smoother -smoother-over -smoothers -smoothes -smoothest -smooth-face -smooth-faced -smooth-famed -smooth-fibered -smooth-finned -smooth-flowing -smooth-foreheaded -smooth-fronted -smooth-fruited -smooth-gliding -smooth-going -smooth-grained -smooth-haired -smooth-handed -smooth-headed -smooth-hewn -smoothhound -smoothy -smoothie -smoothies -smoothify -smoothification -smoothing -smoothingly -smoothish -smooth-leaved -smooth-legged -smoothly -smooth-limbed -smooth-looking -smoothmouthed -smooth-necked -smoothness -smoothnesses -smooth-nosed -smooth-paced -smoothpate -smooth-plastered -smooth-podded -smooth-polished -smooth-riding -smooth-rimmed -smooth-rinded -smooth-rubbed -smooth-running -smooths -smooth-sculptured -smooth-shaven -smooth-sided -smooth-skinned -smooth-sliding -smooth-soothing -smooth-sounding -smooth-speaking -smooth-spoken -smooth-stalked -smooth-stemmed -smooth-surfaced -smooth-tailed -smooth-taper -smooth-tempered -smooth-textured -smooth-tined -smooth-tired -smoothtongue -smooth-tongued -smooth-voiced -smooth-walled -smooth-winding -smooth-winged -smooth-working -smooth-woven -smooth-writing -smooth-wrought -SMOP -smopple -smore -smorebro -smorgasbord -smorgasbords -smorzando -smorzato -smote -smother -smotherable -smotheration -smothered -smotherer -smothery -smotheriness -smothering -smotheringly -smother-kiln -smothers -smotter -smouch -smoucher -smoulder -smouldered -smouldering -smoulders -smous -smouse -smouser -smout -SMP -SMPTE -SMR -smrgs -Smriti -smrrebrd -SMS -SMSA -SMT -SMTP -Smucker -smudder -smudge -smudged -smudgedly -smudgeless -smudgeproof -smudger -smudges -smudgy -smudgier -smudgiest -smudgily -smudginess -smudging -smug -smug-faced -smugger -smuggery -smuggest -smuggish -smuggishly -smuggishness -smuggle -smuggleable -smuggled -smuggler -smugglery -smugglers -smuggles -smuggling -smugism -smugly -smug-looking -smugness -smugnesses -smug-skinned -smuisty -Smukler -smur -smurks -smurr -smurry -smurtle -smuse -smush -smut -smutch -smutched -smutches -smutchy -smutchier -smutchiest -smutchin -smutching -smutchless -smut-free -smutless -smutproof -Smuts -smutted -smutter -smutty -smuttier -smuttiest -smutty-faced -smutty-yellow -smuttily -smuttiness -smutting -smutty-nosed -SN -SNA -snab -snabby -snabbie -snabble -snack -snacked -snackette -snacky -snacking -snackle -snackman -snacks -SNADS -snaff -snaffle -snafflebit -snaffle-bridled -snaffled -snaffle-mouthed -snaffle-reined -snaffles -snaffling -SNAFU -snafued -snafuing -snafus -snag -snagbush -snagged -snagger -snaggy -snaggier -snaggiest -snagging -snaggle -snaggled -snaggleteeth -snaggletooth -snaggletoothed -snaggle-toothed -snaglike -snagline -snagrel -snags -snail -snaileater -snailed -snailery -snailfish -snailfishes -snailflower -snail-horned -snaily -snailing -snailish -snailishly -snaillike -snail-like -snail-likeness -snail-paced -snails -snail's -'snails -snail-seed -snail-shell -snail-slow -snaith -snake -snakebark -snakeberry -snakebird -snakebite -snake-bitten -snakeblenny -snakeblennies -snake-bodied -snaked -snake-devouring -snake-drawn -snake-eater -snake-eating -snake-eyed -snake-encircled -snake-engirdled -snakefish -snakefishes -snakefly -snakeflies -snakeflower -snake-goddess -snake-grass -snake-haired -snakehead -snake-headed -snake-hipped -snakeholing -snakey -snake-killing -snakeleaf -snakeless -snakelet -snakelike -snake-like -snakeling -snake-milk -snakemouth -snakemouths -snakeneck -snake-necked -snakeology -snakephobia -snakepiece -snakepipe -snake-plantain -snakeproof -snaker -snakery -snakeroot -snakes -snake-set -snake-shaped -snake's-head -snakeship -snakeskin -snake-skin -snakestone -snake-tressed -snake-wanded -snakeweed -snake-weed -snake-wigged -snake-winged -snakewise -snakewood -snake-wood -snakeworm -snakewort -snaky -snaky-eyed -snakier -snakiest -Snaky-footed -snaky-haired -snaky-handed -snaky-headed -snakily -snakiness -snaking -snaky-paced -snakish -snaky-sparkling -snaky-tailed -snaky-wreathed -SNAP -snap- -snap-apple -snapback -snapbacks -snapbag -snapberry -snap-brim -snap-brimmed -snapdragon -snapdragons -snape -snaper -snap-finger -snaphaan -snaphance -snaphead -snapholder -snap-hook -snapy -snapjack -snapless -snapline -snap-on -snapout -Snapp -snappable -snappage -snappe -snapped -snapper -snapperback -snapper-back -snappers -snapper's -snapper-up -snappy -snappier -snappiest -snappily -snappiness -snapping -snappingly -snappish -snappishly -snappishness -snapps -snap-rivet -snap-roll -snaps -snapsack -snapshare -snapshoot -snapshooter -snapshot -snap-shot -snapshots -snapshot's -snapshotted -snapshotter -snapshotting -snap-top -snapweed -snapweeds -snapwood -snapwort -snare -snared -snareless -snarer -snarers -snares -snary -snaring -snaringly -Snark -snarks -snarl -snarled -snarleyyow -snarleyow -snarler -snarlers -snarly -snarlier -snarliest -snarling -snarlingly -snarlish -snarls -snarl-up -snash -Snashall -snashes -snast -snaste -snasty -snatch -snatch- -snatchable -snatched -snatcher -snatchers -snatches -snatchy -snatchier -snatchiest -snatchily -snatching -snatchingly -snatchproof -snath -snathe -snathes -snaths -snattock -snavel -snavvle -snaw -snaw-broo -snawed -snawing -snawle -snaws -snazzy -snazzier -snazziest -snazziness -SNCC -SNCF -snead -Sneads -sneak -sneak- -sneakbox -sneak-cup -sneaked -sneaker -sneakered -sneakers -sneaky -sneakier -sneakiest -sneakily -sneakiness -sneaking -sneakingly -sneakingness -sneakish -sneakishly -sneakishness -sneaks -sneaksby -sneaksman -sneak-up -sneap -sneaped -sneaping -sneaps -sneath -sneathe -sneb -sneck -sneckdraw -sneck-drawer -sneckdrawing -sneckdrawn -snecked -snecker -snecket -snecking -snecks -sned -snedded -snedding -sneds -snee -Sneed -Sneedville -sneer -sneered -sneerer -sneerers -sneerful -sneerfulness -sneery -sneering -sneeringly -sneerless -sneers -sneesh -sneeshes -sneeshing -sneest -sneesty -sneeze -sneezed -sneezeless -sneezeproof -sneezer -sneezers -sneezes -sneezeweed -sneezewood -sneezewort -sneezy -sneezier -sneeziest -sneezing -Snefru -Snell -snelled -sneller -snellest -snelly -Snelling -Snellius -snells -Snellville -Snemovna -snerp -SNET -snew -SNF -Sngerfest -sny -snyaptic -snib -snibbed -snibbing -snibble -snibbled -snibbler -snibel -snibs -snicher -snick -snick-and-snee -snick-a-snee -snickdraw -snickdrawing -snicked -snickey -snicker -snickered -snickerer -snickery -snickering -snickeringly -snickers -snickersnee -snicket -snicking -snickle -snicks -snick-snarl -sniddle -snide -snidely -snideness -Snider -Snyder -snidery -Snydersburg -snidest -snye -snyed -snies -snyes -sniff -sniffable -sniffed -sniffer -sniffers -sniffy -sniffier -sniffiest -sniffily -sniffiness -sniffing -sniffingly -sniffish -sniffishly -sniffishness -sniffle -sniffled -sniffler -snifflers -sniffles -sniffly -sniffling -sniffs -snift -snifted -snifter -snifters -snifty -snifting -snig -snigged -snigger -sniggered -sniggerer -sniggering -sniggeringly -sniggers -snigging -sniggle -sniggled -sniggler -snigglers -sniggles -sniggling -sniggoringly -snight -snigs -snying -snip -snipe -snipebill -snipe-bill -sniped -snipefish -snipefishes -snipelike -snipe-nosed -sniper -snipers -sniperscope -sniper-scope -snipes -snipesbill -snipe'sbill -snipy -sniping -snipish -snipjack -snipnose -snipocracy -snipped -snipper -snipperado -snippers -snippersnapper -snipper-snapper -snipperty -snippet -snippety -snippetier -snippetiest -snippetiness -snippets -snippy -snippier -snippiest -snippily -snippiness -snipping -snippish -snips -snip-snap -snip-snappy -snipsnapsnorum -snip-snap-snorum -sniptious -snirl -snirt -snirtle -snit -snitch -snitched -snitcher -snitchers -snitches -snitchy -snitchier -snitchiest -snitching -snite -snithe -snithy -snits -snittle -snitz -snivey -snivel -sniveled -sniveler -snivelers -snively -sniveling -snivelled -sniveller -snivelly -snivelling -snivels -snivy -SNM -SNMP -snob -snobber -snobbery -snobberies -snobbers -snobbess -snobby -snobbier -snobbiest -snobbily -snobbiness -snobbing -snobbish -snobbishly -snobbishness -snobbishnesses -snobbism -snobbisms -snobdom -snobism -snobling -snobocracy -snobocrat -snobographer -snobography -SNOBOL -snobologist -snobonomer -snobs -snobscat -snocat -Sno-Cat -snocher -snock -snocker -snod -Snoddy -Snodgrass -snodly -snoek -snoeking -snog -snoga -snogged -snogging -snogs -Snohomish -snoke -snollygoster -Snonowas -snood -snooded -snooding -snoods -Snook -snooked -snooker -snookered -snookers -snooking -snooks -snookums -snool -snooled -snooling -snools -snoop -snooped -snooper -snoopers -snooperscope -snoopy -snoopier -snoopiest -snoopily -snooping -snoops -snoose -snoot -snooted -snootful -snootfuls -snooty -snootier -snootiest -snootily -snootiness -snooting -snoots -snoove -snooze -snoozed -snoozer -snoozers -snoozes -snoozy -snoozier -snooziest -snooziness -snoozing -snoozle -snoozled -snoozles -snoozling -snop -Snoqualmie -Snoquamish -snore -snored -snoreless -snorer -snorers -snores -snoring -snoringly -snork -snorkel -snorkeled -snorkeler -snorkeling -snorkels -snorker -snort -snorted -snorter -snorters -snorty -snorting -snortingly -snortle -snorts -snot -snot-rag -snots -snotter -snottery -snotty -snottie -snottier -snottiest -snottily -snottiness -snotty-nosed -snouch -snout -snouted -snouter -snoutfair -snouty -snoutier -snoutiest -snouting -snoutish -snoutless -snoutlike -snouts -snout's -Snover -Snow -Snowball -snowballed -snowballing -snowballs -snowbank -snowbanks -snow-barricaded -snow-bearded -snow-beaten -snow-beater -snowbell -snowbells -snowbelt -Snowber -snowberg -snowberry -snowberries -snow-besprinkled -snowbird -snowbirds -snow-blanketed -snow-blind -snow-blinded -snowblink -snowblower -snow-blown -snowbound -snowbreak -snowbridge -snow-bright -snow-brilliant -snowbroth -snow-broth -snowbrush -snowbush -snowbushes -snowcap -snowcapped -snow-capped -snowcaps -snow-casting -snow-choked -snow-clad -snow-clearing -snow-climbing -snow-cold -snow-colored -snow-covered -snowcraft -snowcreep -snow-crested -snow-crystal -snow-crowned -snow-deep -Snowdon -Snowdonia -Snowdonian -snowdrift -snow-drifted -snowdrifts -snow-driven -snowdrop -snow-dropping -snowdrops -snow-drowned -snowed -snowed-in -snow-encircled -snow-fair -snowfall -snowfalls -snow-feathered -snow-fed -snowfield -snowflake -snowflakes -snowflight -snowflower -snowfowl -snow-haired -snowhammer -snowhouse -snow-hung -snowy -snowy-banded -snowy-bosomed -snowy-capped -snowy-countenanced -snowie -snowier -snowiest -snowy-fleeced -snowy-flowered -snowy-headed -snowily -snowiness -snowing -snow-in-summer -snowish -snowy-vested -snowy-winged -snowk -snowl -snow-laden -snowland -snowlands -snowless -snowlike -snow-limbed -snow-line -snow-lined -snow-loaded -snowmaker -snowmaking -Snowman -snow-man -snowmanship -snow-mantled -Snowmass -snowmast -snowmelt -snow-melting -snowmelts -snowmen -snowmobile -snowmobiler -snowmobilers -snowmobiles -snowmobiling -snowmold -snow-molded -snow-nodding -snow-on-the-mountain -snowpack -snowpacks -snowplough -snow-plough -snowplow -snowplowed -snowplowing -snowplows -snowproof -snow-pure -snow-resembled -snow-rigged -snow-robed -snow-rubbing -snows -snowscape -snow-scarred -snowshade -snowshed -snowsheds -snowshine -snowshoe -snowshoed -snowshoeing -snowshoer -snowshoes -snowshoe's -snowshoing -snowslide -snowslip -snow-slip -snow-soft -snow-sprinkled -snow-still -snowstorm -snowstorms -snowsuit -snowsuits -snow-swathe -snow-sweeping -snowthrower -snow-thrower -snow-tipped -snow-topped -Snowville -snow-white -snow-whitened -snow-whiteness -snow-winged -snowworm -snow-wrought -snozzle -SNP -SNPA -SNR -SNTSC -SNU -snub -snub- -snubbable -snubbed -snubbee -snubber -snubbers -snubby -snubbier -snubbiest -snubbiness -snubbing -snubbingly -snubbish -snubbishly -snubbishness -snubness -snubnesses -snubnose -snub-nosed -snubproof -snubs -snuck -snudge -snudgery -snuff -snuffbox -snuff-box -snuffboxer -snuffboxes -snuff-clad -snuffcolored -snuff-colored -snuffed -snuffer -snuffers -snuff-headed -snuffy -snuffier -snuffiest -snuffily -snuffiness -snuffing -snuffingly -snuffish -snuffkin -snuffle -snuffled -snuffler -snufflers -snuffles -snuffless -snuffly -snufflier -snuffliest -snuffliness -snuffling -snufflingly -snuffman -snuffs -snuff-stained -snuff-taking -snuff-using -snug -snugged -snugger -snuggery -snuggerie -snuggeries -snuggest -snuggies -snugging -snuggish -snuggle -snuggled -snuggles -snuggly -snuggling -snugify -snugly -snugness -snugnesses -snugs -snum -snup -snupper -snur -snurl -snurly -snurp -snurt -snuzzle -SO -So. -SOAC -soak -soakage -soakages -soakaway -soaked -soaken -soaker -soakers -soaky -soaking -soakingly -soaking-up -soakman -soaks -soally -soallies -soam -so-and-so -so-and-sos -Soane -SOAP -soapbark -soapbarks -soapberry -soapberries -soap-boiler -soapbox -soapboxer -soapboxes -soap-bubble -soapbubbly -soapbush -soaped -soaper -soapery -soaperies -soapers -soap-fast -soapfish -soapfishes -soapi -soapy -soapier -soapiest -soapily -soapiness -soaping -soaplees -soapless -soaplike -soapmaker -soap-maker -soapmaking -soapmonger -soapolallie -soaprock -soaproot -soaps -soapstone -soapstoner -soapstones -soapsud -soapsuddy -soapsuds -soapsudsy -soapweed -soapwood -soapworks -soapwort -soapworts -SOAR -soarability -soarable -soared -soarer -soarers -Soares -soary -soaring -soaringly -soarings -soars -soave -soavemente -soaves -SOB -sobbed -sobber -sobbers -sobby -sobbing -sobbingly -sobeit -Sobel -sober -sober-blooded -sober-clad -sober-disposed -sobered -sober-eyed -soberer -soberest -sober-headed -sober-headedness -sobering -soberingly -soberize -soberized -soberizes -soberizing -soberly -soberlike -sober-minded -sober-mindedly -sober-mindedness -soberness -Sobers -sober-sad -sobersault -sobersided -sobersidedly -sobersidedness -sobersides -sober-spirited -sober-suited -sober-tinted -soberwise -sobful -Soble -sobole -soboles -soboliferous -Sobor -sobproof -Sobralia -sobralite -Sobranje -sobrevest -sobriety -sobrieties -sobriquet -sobriquetical -sobriquets -sobs -SOC -socage -socager -socagers -socages -so-called -so-caused -soccage -soccages -soccer -soccerist -soccerite -soccers -soce -Socha -Soche -Socher -Sochi -Sochor -socht -sociability -sociabilities -sociable -sociableness -sociables -sociably -social -social-climbing -Sociales -socialisation -socialise -socialised -socialising -socialism -socialist -socialistic -socialistically -socialists -socialist's -socialite -socialites -sociality -socialities -socializable -socialization -socializations -socialize -socialized -socializer -socializers -socializes -socializing -socially -social-minded -social-mindedly -social-mindedness -socialness -socials -social-service -sociate -sociation -sociative -socies -societal -societally -societary -societarian -societarianism -societas -Societe -societeit -society -societies -societyese -societified -societyish -societyless -society's -societism -societist -societology -societologist -socii -Socinian -Socinianism -Socinianistic -Socinianize -Socinus -socio- -sociobiology -sociobiological -sociocentric -sociocentricity -sociocentrism -sociocracy -sociocrat -sociocratic -sociocultural -socioculturally -sociodrama -sociodramatic -socioeconomic -socio-economic -socioeconomically -socioeducational -sociogenesis -sociogenetic -sociogeny -sociogenic -sociogram -sociography -sociol -sociol. -sociolatry -sociolegal -sociolinguistic -sociolinguistics -sociologese -sociology -sociologian -sociologic -sociological -sociologically -sociologies -sociologism -sociologist -sociologistic -sociologistically -sociologists -sociologize -sociologized -sociologizer -sociologizing -sociomedical -sociometry -sociometric -socionomy -socionomic -socionomics -socio-official -sociopath -sociopathy -sociopathic -sociopathies -sociopaths -sociophagous -sociopolitical -sociopsychological -socioreligious -socioromantic -sociosexual -sociosexuality -sociosexualities -sociostatic -sociotechnical -socius -sock -sockdolager -sockdologer -socked -sockeye -sockeyes -socker -sockeroo -sockeroos -socket -socketed -socketful -socketing -socketless -sockets -socket's -sockhead -socky -socking -sockless -socklessness -sockmaker -sockmaking -sockman -sockmen -socko -socks -socle -socles -socman -socmanry -socmen -soco -so-conditioned -so-considered -socorrito -Socorro -Socotra -Socotran -Socotri -Socotrine -Socratean -Socrates -Socratic -Socratical -Socratically -Socraticism -Socratism -Socratist -Socratize -Socred -sod -soda -sodaclase -soda-granite -sodaic -sodaless -soda-lime -sodalist -sodalists -sodalite -sodalites -sodalite-syenite -sodalithite -sodality -sodalities -sodamid -sodamide -sodamides -soda-potash -sodas -sodawater -sod-bound -sod-build -sodbuster -sod-cutting -sodded -sodden -soddened -sodden-faced -sodden-headed -soddening -soddenly -sodden-minded -soddenness -soddens -sodden-witted -Soddy -soddier -soddies -soddiest -sodding -soddite -so-designated -sod-forming -sody -sodic -sodio -sodio- -sodioaluminic -sodioaurous -sodiocitrate -sodiohydric -sodioplatinic -sodiosalicylate -sodiotartrate -sodium -sodiums -sodium-vapor -sodless -sodoku -Sodom -sodomy -sodomic -sodomies -Sodomist -Sodomite -sodomites -sodomitess -sodomitic -sodomitical -sodomitically -Sodomitish -sodomize -sodoms -sod-roofed -sods -sod's -Sodus -sodwork -soe -Soekarno -soekoe -Soelch -Soemba -Soembawa -Soerabaja -soever -SOF -sofa -sofa-bed -sofane -sofar -sofa-ridden -sofars -sofas -sofa's -Sofer -soffarid -soffione -soffioni -soffit -soffits -soffritto -SOFIA -Sofie -Sofiya -sofkee -Sofko -sofoklis -so-formed -so-forth -Sofronia -soft -softa -soft-armed -softas -softback -soft-backed -softbacks -softball -softballs -soft-bedded -soft-bellied -soft-bill -soft-billed -soft-blowing -softboard -soft-board -soft-bodied -soft-boil -soft-boiled -soft-bone -soft-bosomed -softbound -softbrained -soft-breathed -soft-bright -soft-brushing -soft-centred -soft-circling -softcoal -soft-coal -soft-coated -soft-colored -soft-conched -soft-conscienced -soft-cored -soft-couched -soft-cover -soft-dressed -soft-ebbing -soft-eyed -soft-embodied -soften -softened -softener -softeners -softening -softening-up -softens -softer -softest -soft-extended -soft-feathered -soft-feeling -soft-fingered -soft-finished -soft-finned -soft-flecked -soft-fleshed -soft-flowing -soft-focus -soft-foliaged -soft-footed -soft-footedly -soft-glazed -soft-going -soft-ground -soft-haired -soft-handed -softhead -soft-head -softheaded -soft-headed -softheadedly -softheadedness -soft-headedness -softheads -softhearted -soft-hearted -softheartedly -soft-heartedly -softheartedness -soft-heartedness -softhorn -soft-hued -softy -softie -softies -soft-yielding -softish -soft-laid -soft-leaved -softly -softling -soft-lucent -soft-mannered -soft-mettled -soft-minded -soft-murmuring -soft-natured -softner -softness -softnesses -soft-nosed -soft-paced -soft-pale -soft-palmed -soft-paste -soft-pated -soft-pedal -soft-pedaled -soft-pedaling -soft-pedalled -soft-pedalling -soft-rayed -soft-roasted -softs -soft-sawder -soft-sawderer -soft-sealed -soft-shell -soft-shelled -soft-shining -softship -soft-shoe -soft-shouldered -soft-sighing -soft-silken -soft-skinned -soft-sleeping -soft-sliding -soft-slow -soft-smiling -softsoap -soft-soap -soft-soaper -soft-soaping -soft-solder -soft-soothing -soft-sounding -soft-speaking -soft-spirited -soft-spleened -soft-spoken -soft-spread -soft-spun -soft-steel -soft-swelling -softtack -soft-tailed -soft-tanned -soft-tempered -soft-throbbing -soft-timbered -soft-tinted -soft-toned -soft-tongued -soft-treading -soft-voiced -soft-wafted -soft-warbling -software -softwares -software's -soft-water -soft-whispering -soft-winged -soft-witted -softwood -soft-wooded -softwoods -sog -Soga -SOGAT -Sogdian -Sogdiana -Sogdianese -Sogdianian -Sogdoite -soger -soget -soggarth -sogged -soggendalite -soggy -soggier -soggiest -soggily -sogginess -sogginesses -sogging -SOH -SOHIO -SOHO -so-ho -soy -soya -soyas -soyate -soybean -soybeans -soi-disant -Soiesette -soign -soigne -soignee -Soyinka -soil -soilage -soilages -soil-bank -soilborne -soil-bound -soiled -soyled -soiledness -soil-freesoilage -soily -soilier -soiliest -soiling -soilless -soilproof -soils -soilure -soilures -soymilk -soymilks -Soinski -so-instructed -Soyot -soir -soiree -soirees -soys -Soissons -Soyuz -soyuzes -soixante-neuf -soixante-quinze -soixantine -Soja -sojas -sojourn -sojourned -sojourney -sojourner -sojourners -sojourning -sojournment -sojourns -sok -soka -soke -sokeman -sokemanemot -sokemanry -sokemanries -sokemen -soken -sokes -Sokil -soko -Sokoki -sokol -sokols -Sokoto -Sokotra -Sokotri -Sokul -Sokulk -SOL -Sol. -Sola -solace -solaced -solaceful -solacement -solaceproof -solacer -solacers -solaces -solach -solacing -solacious -solaciously -solaciousness -solay -solan -Solana -Solanaceae -solanaceous -solanal -Solanales -soland -solander -solanders -solandra -solands -solanein -solaneine -solaneous -Solange -solania -solanicine -solanidin -solanidine -solanin -solanine -solanines -Solanine-s -solanins -Solano -solanoid -solanos -solans -Solanum -solanums -solar -solary -solari- -solaria -solariego -solariia -solarimeter -solarise -solarised -solarises -solarising -solarism -solarisms -solarist -solaristic -solaristically -solaristics -Solarium -solariums -solarization -solarize -solarized -solarizes -solarizing -solarometer -solate -solated -solates -solatia -solating -solation -solations -solatium -solattia -solazzi -Solberg -sold -soldado -soldadoes -soldados -Soldan -soldanel -Soldanella -soldanelle -soldanrie -soldans -soldat -soldatesque -solder -solderability -soldered -solderer -solderers -soldering -solderless -solders -soldi -soldier -soldierbird -soldierbush -soldier-crab -soldierdom -soldiered -soldieress -soldierfare -soldier-fashion -soldierfish -soldierfishes -soldierhearted -soldierhood -soldiery -soldieries -soldiering -soldierize -soldierly -soldierlike -soldierliness -soldier-mad -soldierproof -soldiers -soldiership -soldierwise -soldierwood -soldo -sole -Solea -soleas -sole-beating -sole-begotten -sole-beloved -sole-bound -Solebury -sole-channeling -solecise -solecised -solecises -solecising -solecism -solecisms -solecist -solecistic -solecistical -solecistically -solecists -solecize -solecized -solecizer -solecizes -solecizing -sole-commissioned -sole-cutting -soled -Soledad -sole-deep -sole-finishing -sole-happy -solei -Soleidae -soleiform -soleil -solein -soleyn -soleyne -sole-justifying -sole-leather -soleless -solely -sole-lying -sole-living -solemn -solemn-breathing -solemn-browed -solemn-cadenced -solemncholy -solemn-eyed -solemner -solemness -solemnest -solemn-garbed -solemnify -solemnified -solemnifying -solemnise -solemnity -solemnities -solemnitude -solemnization -solemnize -solemnized -solemnizer -solemnizes -solemnizing -solemnly -solemn-looking -solemn-mannered -solemn-measured -solemnness -solemnnesses -solemn-proud -solemn-seeming -solemn-shaded -solemn-sounding -solemn-thoughted -solemn-toned -solemn-visaged -Solen -solenacean -solenaceous -soleness -solenesses -solenette -solenial -Solenidae -solenite -solenitis -solenium -Solenne -solennemente -soleno- -solenocyte -solenoconch -Solenoconcha -Solenodon -solenodont -Solenodontidae -solenogaster -Solenogastres -solenoglyph -Solenoglypha -solenoglyphic -solenoid -solenoidal -solenoidally -solenoids -Solenopsis -solenostele -solenostelic -solenostomid -Solenostomidae -solenostomoid -solenostomous -Solenostomus -Solent -solentine -solepiece -soleplate -soleprint -soler -Solera -soleret -solerets -solert -sole-ruling -soles -sole-saving -sole-seated -sole-shaped -sole-stitching -sole-sufficient -sole-thoughted -Soleure -soleus -sole-walking -solfa -sol-fa -sol-faed -sol-faer -sol-faing -sol-faist -solfatara -solfataric -solfege -solfeges -solfeggi -solfeggiare -solfeggio -solfeggios -Solferino -solfge -solgel -Solgohachia -soli -soliative -solicit -solicitant -solicitation -solicitationism -solicitations -solicited -solicitee -soliciter -soliciting -solicitor -solicitors -solicitorship -solicitous -solicitously -solicitousness -solicitress -solicitrix -solicits -solicitude -solicitudes -solicitudinous -solid -Solidago -solidagos -solidare -solidary -solidaric -solidarily -solidarism -solidarist -solidaristic -solidarity -solidarities -solidarize -solidarized -solidarizing -solidate -solidated -solidating -solid-billed -solid-bronze -solid-browed -solid-color -solid-colored -solid-drawn -solideo -soli-deo -solider -solidest -solid-fronted -solid-full -solid-gold -solid-headed -solid-hoofed -solid-horned -solidi -solidify -solidifiability -solidifiable -solidifiableness -solidification -solidifications -solidified -solidifier -solidifies -solidifying -solidiform -solidillu -solid-injection -solid-ink -solidish -solidism -solidist -solidistic -solidity -solidities -solid-ivory -solidly -solid-looking -solidness -solidnesses -solido -solidomind -solid-ported -solids -solid-seeming -solid-set -solid-silver -solid-state -solid-tired -solidudi -solidum -Solidungula -solidungular -solidungulate -solidus -solifidian -solifidianism -solifluction -solifluctional -soliform -Solifugae -solifuge -solifugean -solifugid -solifugous -Solihull -so-like -soliloquacious -soliloquy -soliloquies -soliloquys -soliloquise -soliloquised -soliloquiser -soliloquising -soliloquisingly -soliloquist -soliloquium -soliloquize -soliloquized -soliloquizer -soliloquizes -soliloquizing -soliloquizingly -solilunar -Solim -Solyma -Solymaean -Soliman -Solyman -Solimena -Solymi -Solimoes -soling -Solingen -Solio -solion -solions -soliped -solipedal -solipedous -solipsism -solipsismal -solipsist -solipsistic -solipsists -soliquid -soliquids -Solis -solist -soliste -Solita -solitaire -solitaires -solitary -solitarian -solitaries -solitarily -solitariness -soliterraneous -solitidal -soliton -solitons -Solitta -solitude -solitudes -solitude's -solitudinarian -solitudinize -solitudinized -solitudinizing -solitudinous -solivagant -solivagous -Soll -sollar -sollaria -Sollars -Solley -soller -solleret -sollerets -Solly -Sollya -sollicker -sollicking -Sollie -Sollows -sol-lunar -solmizate -solmization -soln -Solnit -Solo -solod -solodi -solodization -solodize -soloecophanes -soloed -soloing -soloist -soloistic -soloists -Soloma -Soloman -Solomon -solomon-gundy -Solomonian -Solomonic -Solomonical -Solomonitic -Solomons -Solon -solonchak -solonets -solonetses -solonetz -solonetzes -solonetzic -solonetzicity -Solonian -Solonic -solonist -solons -solos -solo's -soloth -Solothurn -solotink -solotnik -solpuga -solpugid -Solpugida -Solpugidea -Solpugides -Solr -Solresol -sols -Solsberry -solstice -solstices -solsticion -solstitia -solstitial -solstitially -solstitium -Solsville -Solti -solubility -solubilities -solubilization -solubilize -solubilized -solubilizing -soluble -solubleness -solubles -solubly -Soluk -solum -solums -solunar -solus -solute -solutes -solutio -solution -solutional -solutioner -solutionis -solutionist -solution-proof -solutions -solution's -solutive -solutize -solutizer -solutory -Solutrean -solutus -solv -solvaated -solvability -solvable -solvabled -solvableness -solvabling -Solvay -Solvang -solvate -solvated -solvates -solvating -solvation -solve -solved -solvement -solvency -solvencies -solvend -solvent -solventless -solvently -solventproof -solvents -solvent's -solver -solvers -solves -solving -solvolysis -solvolytic -solvolyze -solvolyzed -solvolyzing -solvsbergite -solvus -Solway -Solzhenitsyn -Som -Soma -somacule -Somal -Somali -Somalia -Somalian -Somaliland -somalo -somaplasm -somas -Somaschian -somasthenia -somat- -somata -somatasthenia -somaten -somatenes -Somateria -somatic -somatical -somatically -somaticosplanchnic -somaticovisceral -somatics -somatism -somatist -somatization -somato- -somatochrome -somatocyst -somatocystic -somatoderm -somatogenetic -somatogenic -somatognosis -somatognostic -somatology -somatologic -somatological -somatologically -somatologist -somatome -somatomic -somatophyte -somatophytic -somatoplasm -somatoplastic -somatopleural -somatopleure -somatopleuric -somatopsychic -somatosensory -somatosplanchnic -somatotype -somatotyper -somatotypy -somatotypic -somatotypically -somatotypology -somatotonia -somatotonic -somatotrophin -somatotropic -somatotropically -somatotropin -somatotropism -somatous -somatrophin -somber -somber-clad -somber-colored -somberish -somberly -somber-looking -somber-minded -somberness -somber-seeming -somber-toned -Somborski -sombre -sombreish -sombreite -sombrely -sombreness -sombrerite -sombrero -sombreroed -sombreros -sombrous -sombrously -sombrousness -somdel -somdiel -some -somebody -somebodies -somebodyll -somebody'll -someday -somedays -somedeal -somegate -somehow -someone -someonell -someone'll -someones -someone's -somepart -someplace -Somerdale -Somers -somersault -somersaulted -somersaulting -somersaults -Somerset -somerseted -Somersetian -somerseting -somersets -Somersetshire -somersetted -somersetting -Somersville -Somersworth -Somerton -Somerville -somervillite -somesthesia -somesthesis -somesthesises -somesthetic -somet -something -somethingness -sometime -sometimes -somever -someway -someways -somewhat -somewhatly -somewhatness -somewhats -somewhen -somewhence -somewhere -somewheres -somewhy -somewhile -somewhiles -somewhither -somewise -somic -Somis -somital -somite -somites -somitic -somler -Somlo -SOMM -somma -sommaite -Somme -sommelier -sommeliers -Sommer -Sommerfeld -Sommering -Sommers -sommite -somn- -somnambul- -somnambulance -somnambulancy -somnambulant -somnambular -somnambulary -somnambulate -somnambulated -somnambulating -somnambulation -somnambulator -somnambule -somnambulency -somnambulic -somnambulically -somnambulism -somnambulist -somnambulistic -somnambulistically -somnambulists -somnambulize -somnambulous -somne -somner -Somni -somni- -somnial -somniate -somniative -somniculous -somnifacient -somniferous -somniferously -somnify -somnific -somnifuge -somnifugous -somniloquacious -somniloquence -somniloquent -somniloquy -somniloquies -somniloquism -somniloquist -somniloquize -somniloquous -Somniorum -Somniosus -somnipathy -somnipathist -somnivolency -somnivolent -somnolence -somnolences -somnolency -somnolencies -somnolent -somnolently -somnolescence -somnolescent -somnolism -somnolize -somnopathy -somnorific -Somnus -Somonauk -Somoza -sompay -sompne -sompner -sompnour -Son -sonable -sonagram -so-named -sonance -sonances -sonancy -sonant -sonantal -sonantic -sonantina -sonantized -sonants -SONAR -sonarman -sonarmen -sonars -sonata -sonata-allegro -sonatas -sonatina -sonatinas -sonatine -sonation -Sonchus -soncy -sond -sondage -sondation -sonde -sondeli -sonder -Sonderbund -sonderclass -Sondergotter -sonders -sondes -Sondheim -Sondheimer -Sondylomorum -Sondra -SONDS -sone -soneri -sones -Soneson -SONET -Song -song-and-dance -songbag -songbird -song-bird -songbirds -songbook -song-book -songbooks -songcraft -songer -songfest -songfests -song-fraught -songful -songfully -songfulness -Songhai -songy -Songish -Songka -songkok -songland -songle -songless -songlessly -songlessness -songlet -songlike -songman -Songo -Songoi -song-play -songs -song's -song-school -song-singing -songsmith -song-smith -songster -songsters -songstress -songstresses -song-timed -song-tuned -songworthy -song-worthy -songwright -songwriter -songwriters -songwriting -sonhood -sonhoods -Soni -Sony -Sonia -Sonya -sonic -sonica -sonically -sonicate -sonicated -sonicates -sonicating -sonication -sonicator -sonics -Sonyea -soniferous -sonification -soning -son-in-law -son-in-lawship -soniou -Sonja -sonk -sonless -sonly -sonlike -sonlikeness -Sonneratia -Sonneratiaceae -sonneratiaceous -sonnet -sonnetary -sonneted -sonneteer -sonneteeress -sonnetic -sonneting -sonnetisation -sonnetise -sonnetised -sonnetish -sonnetising -sonnetist -sonnetization -sonnetize -sonnetized -sonnetizing -sonnetlike -sonnetry -sonnets -sonnet's -sonnetted -sonnetting -sonnetwise -Sonni -Sonny -Sonnie -sonnies -sonnikins -Sonnnie -sonnobuoy -sonobuoy -sonogram -sonography -Sonoita -Sonoma -sonometer -Sonora -Sonoran -sonorant -sonorants -sonores -sonorescence -sonorescent -sonoric -sonoriferous -sonoriferously -sonorific -sonority -sonorities -sonorize -sonorophone -sonorosity -sonorous -sonorously -sonorousness -sonovox -sonovoxes -Sonrai -sons -son's -sonship -sonships -sonsy -sonsie -sonsier -sonsiest -sons-in-law -Sonstrom -Sontag -sontenna -Sontich -Soo -soochong -soochongs -Soochow -soodle -soodled -soodly -soodling -sooey -soogan -soogee -soogeed -soogeeing -soogee-moogee -soogeing -soohong -soojee -sook -Sooke -sooky -sookie -sooks -sool -sooloos -soom -soon -soon-believing -soon-choked -soon-clad -soon-consoled -soon-contented -soon-descending -soon-done -soon-drying -soon-ended -Sooner -sooners -soonest -soon-fading -Soong -soony -soonish -soon-known -soonly -soon-mended -soon-monied -soon-parted -soon-quenched -soon-repeated -soon-repenting -soon-rotting -soon-said -soon-sated -soon-speeding -soon-tired -soon-wearied -sooper -Soorah -soorawn -soord -sooreyn -soorkee -soorki -soorky -soorma -soosoo -Soot -soot-bespeckled -soot-black -soot-bleared -soot-colored -soot-dark -sooted -sooter -sooterkin -soot-fall -soot-grimed -sooth -soothe -soothed -soother -sootherer -soothers -soothes -soothest -soothfast -soothfastly -soothfastness -soothful -soothing -soothingly -soothingness -soothless -soothly -sooths -soothsay -soothsaid -soothsayer -soothsayers -soothsayership -soothsaying -soothsayings -soothsays -soothsaw -sooty -sootied -sootier -sootiest -sooty-faced -sootying -sootily -sootylike -sooty-mouthed -sootiness -sooting -sooty-planed -sootish -sootless -sootlike -sootproof -soots -soot-smutched -soot-sowing -SOP -Sopchoppy -sope -Soper -Soperton -Soph -Sophar -Sophey -sopheme -sophene -Sopher -Sopheric -Sopherim -Sophi -sophy -Sophia -Sophian -sophic -sophical -sophically -Sophie -Sophies -sophiology -sophiologic -Sophism -sophisms -Sophist -sophister -sophistic -sophistical -sophistically -sophisticalness -sophisticant -sophisticate -sophisticated -sophisticatedly -sophisticates -sophisticating -sophistication -sophistications -sophisticative -sophisticator -sophisticism -Sophistress -Sophistry -sophistries -sophists -Sophoclean -Sophocles -sophomore -sophomores -sophomore's -sophomoric -sophomorical -sophomorically -Sophora -sophoria -Sophronia -sophronize -sophronized -sophronizing -sophrosyne -sophs -sophta -sopite -sopited -sopites -sopiting -sopition -sopor -soporate -soporiferous -soporiferously -soporiferousness -soporific -soporifical -soporifically -soporifics -soporifousness -soporose -soporous -sopors -sopped -sopper -soppy -soppier -soppiest -soppiness -sopping -soprani -sopranino -sopranist -soprano -sopranos -sops -sops-in-wine -Soquel -SOR -sora -Sorabian -Soracco -sorage -Soraya -soral -soralium -sorance -soras -Sorata -Sorb -sorbability -sorbable -Sorbais -sorb-apple -Sorbaria -sorbate -sorbates -sorbed -sorbefacient -sorbent -sorbents -sorbet -sorbets -Sorbian -sorbic -sorbile -sorbin -sorbing -sorbinose -Sorbish -sorbitan -sorbite -sorbitic -sorbitize -sorbitol -sorbitols -sorbol -Sorbonic -Sorbonical -Sorbonist -Sorbonne -sorbose -sorboses -sorbosid -sorboside -sorbs -Sorbus -Sorce -sorcer -sorcerer -sorcerers -sorcerer's -sorceress -sorceresses -sorcery -sorceries -sorcering -sorcerize -sorcerous -sorcerously -Sorcha -sorchin -Sorci -Sorcim -sord -sorda -sordamente -Sordaria -Sordariaceae -sordavalite -sordawalite -sordellina -Sordello -sordes -sordid -sordidity -sordidly -sordidness -sordidnesses -sordine -sordines -sordini -sordino -sordo -sordor -sordors -sords -sore -sore-backed -sore-beset -soreddia -soredi- -soredia -soredial -sorediate -sorediferous -sorediform -soredioid -soredium -sore-dreaded -soree -sore-eyed -sorefalcon -sorefoot -sore-footed -so-regarded -sorehawk -sorehead -sore-head -soreheaded -soreheadedly -soreheadedness -soreheads -sorehearted -sorehon -Sorel -sorely -sorels -sorema -Soren -soreness -sorenesses -Sorensen -Sorenson -Sorento -sore-pressed -sore-pressedsore-taxed -sorer -sores -sorest -sore-taxed -sore-toed -sore-tried -sore-vexed -sore-wearied -sore-won -sore-worn -Sorex -sorghe -sorgho -sorghos -Sorghum -sorghums -sorgo -sorgos -sori -sory -soricid -Soricidae -soricident -Soricinae -soricine -soricoid -Soricoidea -soriferous -Sorilda -soring -sorings -sorite -sorites -soritic -soritical -Sorkin -sorn -sornare -sornari -sorned -sorner -sorners -sorning -sorns -soroban -Sorocaba -soroche -soroches -Sorokin -Soroptimist -sororal -sororate -sororates -sororial -sororially -sororicidal -sororicide -sorority -sororities -sororize -sorose -soroses -sorosil -sorosilicate -sorosis -sorosises -sorosphere -Sorosporella -Sorosporium -sorption -sorptions -sorptive -sorra -sorrance -sorrel -sorrels -sorren -Sorrentine -Sorrento -sorry -sorrier -sorriest -sorry-flowered -sorryhearted -sorryish -sorrily -sorry-looking -sorriness -sorroa -sorrow -sorrow-beaten -sorrow-blinded -sorrow-bound -sorrow-breathing -sorrow-breeding -sorrow-bringing -sorrow-burdened -sorrow-ceasing -sorrow-closed -sorrow-clouded -sorrow-daunted -sorrowed -sorrower -sorrowers -sorrowful -sorrowfully -sorrowfulness -sorrow-furrowed -sorrow-healing -sorrowy -sorrowing -sorrowingly -sorrow-laden -sorrowless -sorrowlessly -sorrowlessness -sorrow-melted -sorrow-parted -sorrowproof -sorrow-ripening -Sorrows -sorrow's -sorrow-seasoned -sorrow-seeing -sorrow-sharing -sorrow-shot -sorrow-shrunken -sorrow-sick -sorrow-sighing -sorrow-sobbing -sorrow-streaming -sorrow-stricken -sorrow-struck -sorrow-tired -sorrow-torn -sorrow-wasted -sorrow-worn -sorrow-wounded -sorrow-wreathen -sort -sortable -sortably -sortal -sortance -sortation -sorted -sorter -sorter-out -sorters -sortes -sorty -sortiary -sortie -sortied -sortieing -sorties -sortilege -sortileger -sortilegi -sortilegy -sortilegic -sortilegious -sortilegus -sortiment -sorting -sortita -sortition -sortly -sortlige -sortment -sorts -sortwith -sorus -sorva -SOS -Sosanna -so-seeming -sosh -soshed -Sosia -sosie -Sosigenes -Sosna -Sosnowiec -Soso -so-so -sosoish -so-soish -sospiro -Sospita -sosquil -soss -sossiego -sossle -sostenendo -sostenente -sostenuti -sostenuto -sostenutos -Sosthena -Sosthenna -Sosthina -so-styled -sostinente -sostinento -sot -Sotadean -Sotadic -Soter -Soteres -soterial -soteriology -soteriologic -soteriological -so-termed -soth -Sothena -Sothiac -Sothiacal -Sothic -Sothis -Sotho -soths -sotie -Sotik -Sotiris -so-titled -sotnia -sotnik -sotol -sotols -Sotos -sots -sottage -sotted -sottedness -sotter -sottery -sottie -sotting -sottise -sottish -sottishly -sottishness -sotweed -sot-weed -Sou -souagga -souamosa -souamula -souari -souari-nut -souaris -Soubise -soubises -soubresaut -soubresauts -soubrette -soubrettes -soubrettish -soubriquet -soucar -soucars -souchet -souchy -souchie -Souchong -souchongs -soud -soudagur -Soudan -Soudanese -soudans -Souder -Soudersburg -Souderton -soudge -soudgy -soueak -sou'easter -soueef -soueege -souffl -souffle -souffled -souffleed -souffleing -souffles -souffleur -Soufflot -soufousse -Soufri -Soufriere -sougan -sough -soughed -sougher -soughfully -soughing -soughless -soughs -sought -sought-after -Souhegan -souk -souks -Soul -soulack -soul-adorning -soul-amazing -soulbell -soul-benumbed -soul-blind -soul-blinded -soul-blindness -soul-boiling -soul-born -soul-burdened -soulcake -soul-charming -soul-choking -soul-cloying -soul-conceived -soul-confirming -soul-confounding -soul-converting -soul-corrupting -soul-damning -soul-deep -soul-delighting -soul-destroying -soul-devouring -souldie -soul-diseased -soul-dissolving -soul-driver -Soule -souled -soul-enchanting -soul-ennobling -soul-enthralling -Souletin -soul-fatting -soul-fearing -soul-felt -soul-forsaken -soul-fostered -soul-frighting -soulful -soulfully -soulfulness -soul-galled -soul-gnawing -soul-harrowing -soulheal -soulhealth -soul-humbling -souly -soulical -Soulier -soul-illumined -soul-imitating -soul-infused -soulish -soul-killing -soul-kiss -soulless -soullessly -soullessness -soullike -soul-loving -Soulmass -soul-mass -soul-moving -soul-murdering -soul-numbing -soul-pained -soulpence -soulpenny -soul-piercing -soul-pleasing -soul-racking -soul-raising -soul-ravishing -soul-rending -soul-reviving -souls -soul's -soul-sapping -soul-satisfying -soulsaving -soul-saving -Soulsbyville -soul-scot -soul-searching -soul-shaking -soul-shot -soul-sick -soul-sickening -soul-sickness -soul-sinking -soul-slaying -soul-stirring -soul-subduing -soul-sunk -soul-sure -soul-sweet -Soult -soul-tainting -soulter -soul-thralling -soul-tiring -soul-tormenting -soultre -soul-vexed -soulward -soul-wise -soul-wounded -soul-wounding -soulx -soulz -soum -Soumaintrin -soumak -soumansite -soumarque -SOUND -soundable -sound-absorbing -soundage -soundboard -sound-board -soundboards -soundbox -soundboxes -sound-conducting -sounded -sounder -sounders -soundest -sound-exulting -soundful -sound-group -soundheaded -soundheadedness -soundhearted -soundheartednes -soundheartedness -sound-hole -sounding -sounding-board -sounding-lead -soundingly -sounding-line -soundingness -soundings -sounding's -sound-judging -soundless -soundlessly -soundlessness -soundly -sound-making -sound-minded -sound-mindedness -soundness -soundnesses -sound-on-film -soundpost -sound-post -sound-producing -soundproof -soundproofed -soundproofing -soundproofs -sounds -soundscape -sound-sensed -sound-set -sound-sleeping -sound-stated -sound-stilling -soundstripe -sound-sweet -sound-thinking -soundtrack -soundtracks -sound-winded -sound-witted -soup -soup-and-fish -soupbone -soupcon -soupcons -souped -souper -soupfin -Souphanourong -soupy -soupier -soupiere -soupieres -soupiest -souping -souple -soupled -soupless -souplike -soupling -soupmeat -soupon -soups -soup's -soupspoon -soup-strainer -Sour -sourball -sourballs -sourbelly -sourbellies -sourberry -sourberries -sour-blooded -sourbread -sour-breathed -sourbush -sourcake -source -sourceful -sourcefulness -sourceless -sources -source's -sour-complexioned -sourcrout -sourd -sourdeline -sourdine -sourdines -sourdock -sourdook -sourdough -sour-dough -sourdoughs -sourdre -soured -souredness -sour-eyed -souren -sourer -sourest -sour-faced -sour-featured -sour-headed -sourhearted -soury -souring -Souris -sourish -sourishly -sourishness -sourjack -sourly -sourling -sour-looked -sour-looking -sour-natured -sourness -sournesses -sourock -sourpuss -sourpussed -sourpusses -sours -sour-sap -sour-smelling -soursop -sour-sop -soursops -sour-sweet -sour-tasted -sour-tasting -sour-tempered -sour-tongued -sourtop -sourveld -sour-visaged -sourweed -sourwood -sourwoods -sous -sous- -Sousa -sousaphone -sousaphonist -souse -soused -souser -souses -sousewife -soushy -sousing -sous-lieutenant -souslik -sou-sou -sou-southerly -sous-prefect -Soustelle -soutache -soutaches -soutage -soutane -soutanes -soutar -souteneur -soutenu -souter -souterly -souterrain -souters -South -south- -Southampton -Southard -south'ard -south-blowing -south-borne -southbound -Southbridge -Southcottian -Southdown -Southeast -south-east -southeaster -southeasterly -south-easterly -southeastern -south-eastern -southeasterner -southeasternmost -southeasters -southeasts -southeastward -south-eastward -southeastwardly -southeastwards -southed -Southey -Southend-on-Sea -souther -southerland -southerly -southerlies -southerliness -southermost -Southern -Southerner -southerners -southernest -southernism -southernize -southernly -southernliness -southernmost -southernness -southerns -southernward -southernwards -southernwood -southers -south-facing -Southfield -south-following -Southgate -southing -southings -Southington -southland -southlander -southly -Southmont -southmost -southness -southpaw -southpaws -Southport -south-preceding -Southron -Southronie -southrons -souths -south-seaman -south-seeking -south-side -south-southeast -south-south-east -south-southeasterly -south-southeastward -south-southerly -south-southwest -south-south-west -south-southwesterly -south-southwestward -south-southwestwardly -Southumbrian -southward -southwardly -southwards -Southwark -Southwest -south-west -southwester -south-wester -southwesterly -south-westerly -southwesterlies -southwestern -south-western -Southwesterner -southwesterners -southwesternmost -southwesters -southwests -southwestward -south-westward -southwestwardly -south-westwardly -southwestwards -southwood -Southworth -soutien-gorge -Soutine -Soutor -soutter -souush -souushy -Souvaine -souvenir -souvenirs -souverain -souvlaki -sou'-west -souwester -sou'wester -Souza -sov -sovenance -sovenez -sovereign -sovereigness -sovereignize -sovereignly -sovereignness -sovereigns -sovereign's -sovereignship -sovereignty -sovereignties -soverty -Sovetsk -Soviet -sovietdom -sovietic -Sovietisation -Sovietise -Sovietised -Sovietising -Sovietism -sovietist -sovietistic -Sovietization -sovietize -sovietized -sovietizes -sovietizing -Soviets -soviet's -sovite -sovkhos -sovkhose -sovkhoz -sovkhozes -sovkhozy -sovprene -sovran -sovranly -sovrans -sovranty -sovranties -SOW -sowable -sowan -sowans -sowar -sowarree -sowarry -sowars -sowback -sow-back -sowbacked -sowbane -sowbelly -sowbellies -sowbread -sow-bread -sowbreads -sow-bug -sowcar -sowcars -sowder -sowdones -sowed -sowel -Sowell -sowens -Sower -sowers -Soweto -sowf -sowfoot -sow-gelder -sowing -sowins -so-wise -sowish -sowl -sowle -sowlike -sowlth -sow-metal -sown -sow-pig -sows -sowse -sowt -sowte -sow-thistle -sow-tit -sox -Soxhlet -sozin -sozine -sozines -sozins -sozly -sozolic -sozzle -sozzled -sozzly -SP -Sp. -SPA -spaad -Spaak -Spaatz -space -spaceband -space-bar -spaceborne -spacecraft -spacecrafts -space-cramped -spaced -spaced-out -space-embosomed -space-filling -spaceflight -spaceflights -spaceful -spacey -space-lattice -spaceless -spaceman -spacemanship -spacemen -space-occupying -space-penetrating -space-pervading -space-piercing -space-polar -spaceport -spacer -spacers -spaces -spacesaving -space-saving -spaceship -spaceships -spaceship's -space-spread -spacesuit -spacesuits -space-thick -spacetime -space-time -space-traveling -spacewalk -spacewalked -spacewalker -spacewalkers -spacewalking -spacewalks -spaceward -spacewoman -spacewomen -space-world -spacy -spacial -spaciality -spacially -spacier -spaciest -spaciness -spacing -spacings -spaciosity -spaciotemporal -spacious -spaciously -spaciousness -spaciousnesses -spacistor -spack -Spackle -spackled -spackles -spackling -spad -Spada -spadaite -spadassin -spaddle -spade -spade-beard -spade-bearded -spadebone -spade-cut -spaded -spade-deep -spade-dug -spadefish -spadefoot -spade-footed -spade-fronted -spadeful -spadefuls -spadelike -spademan -spademen -spader -spaders -spades -spade-shaped -spadesman -spade-trenched -spadewise -spadework -spadger -spadiard -spadiceous -spadices -spadici- -spadicifloral -spadiciflorous -spadiciform -spadicose -spadilla -spadille -spadilles -spadillo -spading -spadish -spadix -spadixes -spado -spadone -spadones -spadonic -spadonism -spadrone -spadroon -spae -spaebook -spaecraft -spaed -spaedom -spaeing -spaeings -spaeman -spae-man -spaer -Spaerobee -spaes -spaetzle -spaewife -spaewoman -spaework -spaewright -SPAG -spagetti -spaghetti -spaghettini -spaghettis -spagyric -spagyrical -spagyrically -spagyrics -spagyrist -Spagnuoli -spagnuolo -spahee -spahees -spahi -spahis -spay -spayad -spayard -spaid -spayed -spaying -spaik -spail -spails -Spain -spair -spairge -spays -spait -spaits -spak -spake -spaked -spalacid -Spalacidae -spalacine -Spalato -Spalax -spald -spalder -Spalding -spale -spales -spall -Spalla -spallable -Spallanzani -spallation -spalled -spaller -spallers -spalling -spalls -spalpeen -spalpeens -spalt -Spam -SPAN -span- -spanaemia -spanaemic -Spanaway -Spancake -spancel -spanceled -spanceling -spancelled -spancelling -spancels -span-counter -Spandau -spandex -spandy -spandle -spandrel -spandrels -spandril -spandrils -spane -spaned -spanemy -spanemia -spanemic -span-farthing -spang -spanged -spanghew -spanging -spangle -spangle-baby -spangled -Spangler -spangles -spanglet -spangly -spanglier -spangliest -spangling -spang-new -spangolite -span-hapenny -Spaniard -Spaniardization -Spaniardize -Spaniardo -spaniards -spaniel -spaniellike -spaniels -spanielship -spaning -Spaniol -Spaniolate -Spanioli -Spaniolize -spanipelagic -Spanish -Spanish-American -Spanish-arab -Spanish-arabic -Spanish-barreled -Spanish-born -Spanish-bred -Spanish-brown -Spanish-built -Spanishburg -Spanish-flesh -Spanish-indian -Spanishize -Spanishly -Spanish-looking -Spanish-ocher -Spanish-phoenician -Spanish-portuguese -Spanish-red -Spanish-speaking -Spanish-style -Spanish-top -Spanjian -spank -spanked -spanker -spankers -spanky -spankily -spanking -spankingly -spanking-new -spankings -spankled -spanks -spanless -span-long -spann -spanned -spannel -spanner -spannerman -spannermen -spanners -spanner's -spanner-tight -span-new -spanning -spanopnea -spanopnoea -Spanos -spanpiece -span-roof -spans -span's -spanspek -spantoon -spanule -spanworm -spanworms -SPAR -sparable -sparables -sparada -sparadrap -sparage -sparagrass -sparagus -Sparassis -sparassodont -Sparassodonta -Sparaxis -SPARC -sparch -spar-decked -spar-decker -spare -spareable -spare-bodied -spare-built -spared -spare-fed -spareful -spare-handed -spare-handedly -spareless -sparely -spare-looking -spareness -sparer -sparerib -spare-rib -spareribs -sparers -spares -spare-set -sparesome -sparest -spare-time -Sparganiaceae -Sparganium -sparganosis -sparganum -sparge -sparged -spargefication -sparger -spargers -sparges -sparging -spargosis -Sparhawk -spary -sparid -Sparidae -sparids -sparily -sparing -sparingly -sparingness -Spark -sparkback -Sparke -sparked -sparked-back -sparker -sparkers -Sparky -Sparkie -sparkier -sparkiest -sparkily -Sparkill -sparkiness -sparking -sparkingly -sparkish -sparkishly -sparkishness -sparkle -sparkleberry -sparkle-blazing -sparkled -sparkle-drifting -sparkle-eyed -sparkler -sparklers -sparkles -sparkless -sparklessly -sparklet -sparkly -sparklike -sparkliness -sparkling -sparklingly -sparklingness -Sparkman -spark-over -sparkplug -spark-plug -sparkplugged -sparkplugging -sparkproof -Sparks -Sparland -sparlike -sparling -sparlings -sparm -Sparmannia -Sparnacian -sparoid -sparoids -sparpiece -sparple -sparpled -sparpling -Sparr -sparred -sparrer -sparry -sparrier -sparriest -sparrygrass -sparring -sparringly -Sparrow -sparrowbill -sparrow-bill -sparrow-billed -sparrow-blasting -Sparrowbush -sparrowcide -sparrow-colored -sparrowdom -sparrow-footed -sparrowgrass -sparrowhawk -sparrow-hawk -sparrowy -sparrowish -sparrowless -sparrowlike -sparrows -sparrow's -sparrowtail -sparrow-tail -sparrow-tailed -sparrowtongue -sparrow-witted -sparrowwort -SPARS -sparse -sparsedly -sparse-flowered -sparsely -sparseness -sparser -sparsest -sparsile -sparsim -sparsioplast -sparsity -sparsities -spart -Sparta -Spartacan -Spartacide -Spartacism -Spartacist -Spartacus -Spartan -Spartanburg -Spartanhood -Spartanic -Spartanically -Spartanism -Spartanize -Spartanly -Spartanlike -spartans -Spartansburg -spartein -sparteine -sparterie -sparth -Sparti -Spartiate -Spartina -Spartium -spartle -spartled -spartling -Sparus -sparver -spas -spasm -spasmatic -spasmatical -spasmatomancy -spasmed -spasmic -spasmodic -spasmodical -spasmodically -spasmodicalness -spasmodism -spasmodist -spasmolysant -spasmolysis -spasmolytic -spasmolytically -spasmophile -spasmophilia -spasmophilic -spasmotin -spasmotoxin -spasmotoxine -spasmous -spasms -spasmus -spass -Spassky -spastic -spastically -spasticity -spasticities -spastics -spat -spatalamancy -Spatangida -Spatangina -spatangoid -Spatangoida -Spatangoidea -spatangoidean -Spatangus -spatchcock -spatch-cock -spate -spated -spates -spate's -spath -spatha -spathaceous -spathae -spathal -spathe -spathed -spatheful -spathes -spathic -Spathyema -Spathiflorae -spathiform -spathilae -spathilla -spathillae -spathose -spathous -spathulate -spatial -spatialism -spatialist -spatiality -spatialization -spatialize -spatially -spatiate -spatiation -spatilomancy -spating -spatio -spatiography -spatiotemporal -spatiotemporally -spatium -spatling -spatlum -Spatola -spats -spattania -spatted -spattee -spatter -spatterdash -spatterdashed -spatterdasher -spatterdashes -spatterdock -spattered -spattering -spatteringly -spatterproof -spatters -spatterware -spatterwork -spatting -spattle -spattled -spattlehoe -spattling -Spatula -spatulamancy -spatular -spatulas -spatulate -spatulate-leaved -spatulation -spatule -spatuliform -spatulose -spatulous -Spatz -spatzle -spaught -spauld -spaulder -Spaulding -spauldrochy -spave -spaver -spavie -spavied -spavies -spaviet -spavin -Spavinaw -spavindy -spavine -spavined -spavins -spavit -spa-water -spawl -spawler -spawling -spawn -spawneater -spawned -spawner -spawners -spawny -spawning -spawns -spaz -spazes -SPC -SPCA -SPCC -SPCK -SPCS -SPD -SPDL -SPDM -SPE -speak -speakable -speakableness -speakably -speakablies -speakeasy -speak-easy -speakeasies -Speaker -speakeress -speakerphone -speakers -speakership -speakhouse -speakie -speakies -speaking -speakingly -speakingness -speakings -speaking-to -speaking-trumpet -speaking-tube -speakless -speaklessly -Speaks -speal -spealbone -spean -speaned -speaning -speans -Spear -spear-bearing -spear-bill -spear-billed -spear-bound -spear-brandishing -spear-breaking -spear-carrier -spearcast -speared -speareye -spearer -spearers -spear-fallen -spear-famed -Spearfish -spearfishes -spearflower -spear-grass -spearhead -spear-head -spearheaded -spear-headed -spearheading -spearheads -spear-high -speary -Spearing -spearlike -Spearman -spearmanship -spearmen -spearmint -spearmints -spear-nosed -spear-pierced -spear-pointed -spearproof -Spears -spear-shaking -spear-shaped -spear-skilled -spearsman -spearsmen -spear-splintering -Spearsville -spear-swept -spear-thrower -spear-throwing -Spearville -spear-wielding -spearwood -spearwort -speave -SPEC -spec. -specced -specchie -speccing -spece -Specht -special -special-delivery -specialer -specialest -specialisation -specialise -specialised -specialising -specialism -specialist -specialistic -specialists -specialist's -speciality -specialities -specialization -specializations -specialization's -specialize -specialized -specializer -specializes -specializing -specially -specialness -special-process -specials -specialty -specialties -specialty's -speciate -speciated -speciates -speciating -speciation -speciational -specie -species -speciesism -speciestaler -specif -specify -specifiable -specific -specifical -specificality -specifically -specificalness -specificate -specificated -specificating -specification -specifications -specificative -specificatively -specific-gravity -specificity -specificities -specificize -specificized -specificizing -specificly -specificness -specifics -specified -specifier -specifiers -specifies -specifying -specifist -specillum -specimen -specimenize -specimenized -specimens -specimen's -specio- -speciology -speciosity -speciosities -specious -speciously -speciousness -speck -specked -speckedness -speckfall -specky -speckier -speckiest -speckiness -specking -speckle -speckle-backed -specklebelly -speckle-bellied -speckle-billed -specklebreast -speckle-breasted -speckle-coated -speckled -speckledbill -speckledy -speckledness -speckle-faced -specklehead -speckle-marked -speckles -speckle-skinned -speckless -specklessly -specklessness -speckle-starred -speckly -speckliness -speckling -speckproof -specks -speck's -specksioneer -specs -specsartine -spect -spectacle -spectacled -spectacleless -spectaclelike -spectaclemaker -spectaclemaking -spectacles -spectacular -spectacularism -spectacularity -spectacularly -spectaculars -spectant -spectate -spectated -spectates -spectating -Spectator -spectatordom -spectatory -spectatorial -spectators -spectator's -spectatorship -spectatress -spectatrix -specter -spectered -specter-fighting -specter-haunted -specterlike -specter-looking -specter-mongering -specter-pallid -specters -specter's -specter-staring -specter-thin -specter-wan -specting -Spector -spectra -spectral -spectralism -spectrality -spectrally -spectralness -spectre -spectred -spectres -spectry -spectro- -spectrobolograph -spectrobolographic -spectrobolometer -spectrobolometric -spectrochemical -spectrochemistry -spectrocolorimetry -spectrocomparator -spectroelectric -spectrofluorimeter -spectrofluorometer -spectrofluorometry -spectrofluorometric -spectrogram -spectrograms -spectrogram's -spectrograph -spectrographer -spectrography -spectrographic -spectrographically -spectrographies -spectrographs -spectroheliogram -spectroheliograph -spectroheliography -spectroheliographic -spectrohelioscope -spectrohelioscopic -spectrology -spectrological -spectrologically -spectrometer -spectrometers -spectrometry -spectrometric -spectrometries -spectromicroscope -spectromicroscopical -spectrophoby -spectrophobia -spectrophone -spectrophonic -spectrophotoelectric -spectrophotograph -spectrophotography -spectrophotometer -spectrophotometry -spectrophotometric -spectrophotometrical -spectrophotometrically -spectropyrheliometer -spectropyrometer -spectropolarimeter -spectropolariscope -spectroradiometer -spectroradiometry -spectroradiometric -spectroscope -spectroscopes -spectroscopy -spectroscopic -spectroscopical -spectroscopically -spectroscopies -spectroscopist -spectroscopists -spectrotelescope -spectrous -spectrum -spectrums -specttra -specula -specular -Specularia -specularity -specularly -speculate -speculated -speculates -speculating -speculation -speculations -speculatist -speculative -speculatively -speculativeness -speculativism -Speculator -speculatory -speculators -speculator's -speculatrices -speculatrix -speculist -speculum -speculums -specus -SpEd -Spee -speece -speech -speech-bereaving -speech-bereft -speech-bound -speechcraft -speecher -speeches -speech-famed -speech-flooded -speechful -speechfulness -speechify -speechification -speechified -speechifier -speechifying -speeching -speechless -speechlessly -speechlessness -speechlore -speechmaker -speech-maker -speechmaking -speechment -speech-reading -speech-reporting -speech's -speech-shunning -speechway -speech-writing -speed -speedaway -speedball -speedboat -speedboater -speedboating -speedboatman -speedboats -speeded -speeder -speeders -speedful -speedfully -speedfulness -speedgun -speedy -speedier -speediest -speedily -speediness -speeding -speedingly -speedingness -speeding-place -speedings -speedless -speedly -speedlight -speedo -speedometer -speedometers -speedos -speeds -speedster -speedup -speed-up -speedups -speedup's -Speedway -speedways -speedwalk -speedwell -speedwells -Speedwriting -speel -speeled -speeling -speelken -speelless -speels -speen -Speer -speered -speering -speerings -speerity -speers -Spey -Speicher -Speyer -speyeria -Speight -speil -speiled -speiling -speils -speir -speired -speiring -speirs -speise -speises -speiskobalt -speiss -speisscobalt -speisses -spekboom -spek-boom -spekt -spelaean -spelaeology -Spelaites -spelbinding -spelbound -spelder -spelding -speldring -speldron -spelean -speleology -speleological -speleologist -speleologists -spelk -spell -spellable -spell-banned -spellbind -spell-bind -spellbinder -spellbinders -spellbinding -spellbinds -spellbound -spell-bound -spellcasting -spell-casting -spell-caught -spellcraft -spelldown -spelldowns -spelled -speller -spellers -spell-free -spellful -spellican -spelling -spellingdown -spellingly -spellings -spell-invoking -spellken -spell-like -Spellman -spellmonger -spellproof -spell-raised -spell-riveted -spells -spell-set -spell-sprung -spell-stopped -spell-struck -spell-weaving -spellword -spellwork -spelman -spelt -Spelter -spelterman -speltermen -spelters -speltoid -spelts -speltz -speltzes -speluncar -speluncean -spelunk -spelunked -spelunker -spelunkers -spelunking -spelunks -Spenard -Spenborough -Spence -Spencean -Spencer -Spencerian -Spencerianism -Spencerism -spencerite -Spencerport -spencers -Spencertown -Spencerville -spences -spency -spencie -spend -spendable -spend-all -Spender -spenders -spendful -spend-good -spendible -spending -spending-money -spendings -spendless -spends -spendthrift -spendthrifty -spendthriftiness -spendthriftness -spendthrifts -Spener -Spenerism -Spengler -spenglerian -Spense -Spenser -Spenserian -spenses -spent -spent-gnat -Speonk -speos -Speotyto -sperable -sperage -speramtozoon -Speranza -sperate -spere -spergillum -Spergula -Spergularia -sperity -sperket -Sperling -sperm -sperm- -sperma -spermaceti -spermacetilike -spermaduct -spermagonia -spermagonium -spermalist -spermania -Spermaphyta -spermaphyte -spermaphytic -spermary -spermaries -spermarium -spermashion -spermat- -spermata -spermatangium -spermatheca -spermathecae -spermathecal -spermatia -spermatial -spermatic -spermatically -spermatid -spermatiferous -spermatin -spermatiogenous -spermation -spermatiophore -spermatism -spermatist -spermatitis -spermatium -spermatize -spermato- -spermatoblast -spermatoblastic -spermatocele -spermatocidal -spermatocide -spermatocyst -spermatocystic -spermatocystitis -spermatocytal -spermatocyte -spermatogemma -spermatogene -spermatogenesis -spermatogenetic -spermatogeny -spermatogenic -spermatogenous -spermatogonia -spermatogonial -spermatogonium -spermatoid -spermatolysis -spermatolytic -Spermatophyta -spermatophyte -spermatophytic -spermatophobia -spermatophoral -spermatophore -spermatophorous -spermatoplasm -spermatoplasmic -spermatoplast -spermatorrhea -spermatorrhoea -spermatospore -spermatotheca -spermatova -spermatovum -spermatoxin -spermatozoa -spermatozoal -spermatozoan -spermatozoic -spermatozoid -spermatozoio -spermatozoon -spermatozzoa -spermaturia -spermy -spermi- -spermic -spermicidal -spermicide -spermidin -spermidine -spermiducal -spermiduct -spermigerous -spermin -spermine -spermines -spermiogenesis -spermism -spermist -spermo- -spermoblast -spermoblastic -spermocarp -spermocenter -spermoderm -spermoduct -spermogenesis -spermogenous -spermogone -spermogonia -spermogoniferous -spermogonium -spermogonnia -spermogonous -spermolysis -spermolytic -spermologer -spermology -spermological -spermologist -spermophile -spermophiline -Spermophilus -Spermophyta -spermophyte -spermophytic -spermophobia -spermophore -spermophorium -spermosphere -spermotheca -spermotoxin -spermous -spermoviduct -sperms -spermule -speron -speronara -speronaras -speronares -speronaro -speronaroes -speronaros -sperone -Speroni -sperple -Sperry -sperrylite -Sperryville -sperse -spessartine -spessartite -spet -spetch -spetches -spete -spetrophoby -spettle -speuchan -Spevek -spew -spewed -spewer -spewers -spewy -spewier -spewiest -spewiness -spewing -spews -spex -sphacel -Sphacelaria -Sphacelariaceae -sphacelariaceous -Sphacelariales -sphacelate -sphacelated -sphacelating -sphacelation -sphacelia -sphacelial -sphacelism -sphaceloderma -Sphaceloma -sphacelotoxin -sphacelous -sphacelus -Sphaeralcea -sphaeraphides -Sphaerella -sphaerenchyma -Sphaeriaceae -sphaeriaceous -Sphaeriales -sphaeridia -sphaeridial -sphaeridium -Sphaeriidae -Sphaerioidaceae -sphaeripium -sphaeristeria -sphaeristerium -sphaerite -Sphaerium -sphaero- -sphaeroblast -Sphaerobolaceae -Sphaerobolus -Sphaerocarpaceae -Sphaerocarpales -Sphaerocarpus -sphaerocobaltite -Sphaerococcaceae -sphaerococcaceous -Sphaerococcus -sphaerolite -sphaerolitic -Sphaeroma -Sphaeromidae -Sphaerophoraceae -Sphaerophorus -Sphaeropsidaceae -sphae-ropsidaceous -Sphaeropsidales -Sphaeropsis -sphaerosiderite -sphaerosome -sphaerospore -Sphaerostilbe -Sphaerotheca -Sphaerotilus -sphagia -sphagion -Sphagnaceae -sphagnaceous -Sphagnales -sphagnicolous -sphagnology -sphagnologist -sphagnous -Sphagnum -sphagnums -Sphakiot -sphalerite -sphalm -sphalma -Sphargis -sphecid -Sphecidae -Sphecina -sphecius -sphecoid -Sphecoidea -spheges -sphegid -Sphegidae -Sphegoidea -sphendone -sphene -sphenes -sphenethmoid -sphenethmoidal -sphenic -sphenion -spheniscan -Sphenisci -Spheniscidae -Sphenisciformes -spheniscine -spheniscomorph -Spheniscomorphae -spheniscomorphic -Spheniscus -spheno- -sphenobasilar -sphenobasilic -sphenocephaly -sphenocephalia -sphenocephalic -sphenocephalous -Sphenodon -sphenodont -Sphenodontia -Sphenodontidae -sphenoethmoid -sphenoethmoidal -sphenofrontal -sphenogram -sphenographer -sphenography -sphenographic -sphenographist -sphenoid -sphenoidal -sphenoiditis -sphenoids -sphenolith -sphenomalar -sphenomandibular -sphenomaxillary -spheno-occipital -sphenopalatine -sphenoparietal -sphenopetrosal -Sphenophyllaceae -sphenophyllaceous -Sphenophyllales -Sphenophyllum -Sphenophorus -sphenopsid -Sphenopteris -sphenosquamosal -sphenotemporal -sphenotic -sphenotribe -sphenotripsy -sphenoturbinal -sphenovomerine -sphenozygomatic -spherable -spheradian -spheral -spherality -spheraster -spheration -sphere -sphere-born -sphered -sphere-descended -sphere-filled -sphere-found -sphere-headed -sphereless -spherelike -spheres -sphere's -sphere-shaped -sphere-tuned -sphery -spheric -spherical -sphericality -spherically -sphericalness -sphericist -sphericity -sphericities -sphericle -spherico- -sphericocylindrical -sphericotetrahedral -sphericotriangular -spherics -spherier -spheriest -spherify -spheriform -sphering -sphero- -spheroconic -spherocrystal -spherograph -spheroid -spheroidal -spheroidally -spheroidic -spheroidical -spheroidically -spheroidicity -spheroidism -spheroidity -spheroidize -spheroids -spherome -spheromere -spherometer -spheroplast -spheroquartic -spherosome -spherula -spherular -spherulate -spherule -spherules -spherulite -spherulitic -spherulitize -spheterize -Sphex -sphexide -sphygmia -sphygmic -sphygmo- -sphygmochronograph -sphygmodic -sphygmogram -sphygmograph -sphygmography -sphygmographic -sphygmographies -sphygmoid -sphygmology -sphygmomanometer -sphygmomanometers -sphygmomanometry -sphygmomanometric -sphygmomanometrically -sphygmometer -sphygmometric -sphygmophone -sphygmophonic -sphygmoscope -sphygmus -sphygmuses -sphincter -sphincteral -sphincteralgia -sphincterate -sphincterectomy -sphincterial -sphincteric -sphincterismus -sphincteroscope -sphincteroscopy -sphincterotomy -sphincters -sphindid -Sphindidae -Sphindus -sphingal -sphinges -sphingid -Sphingidae -sphingids -sphingiform -sphingine -sphingoid -sphingometer -sphingomyelin -sphingosin -sphingosine -Sphingurinae -Sphingurus -Sphinx -sphinxes -sphinxian -sphinxianness -sphinxine -sphinxlike -Sphyraena -sphyraenid -Sphyraenidae -sphyraenoid -Sphyrapicus -Sphyrna -Sphyrnidae -Sphoeroides -sphragide -sphragistic -sphragistics -SPI -spy -spy- -spial -spyboat -spic -Spica -spicae -spical -spicant -Spicaria -spicas -spy-catcher -spicate -spicated -spiccato -spiccatos -spice -spiceable -spice-bearing -spiceberry -spiceberries -spice-box -spice-breathing -spice-burnt -spicebush -spicecake -spice-cake -spiced -spice-fraught -spiceful -spicehouse -spicey -spice-laden -Spiceland -spiceless -spicelike -Spicer -spicery -spiceries -spicers -spices -spice-warmed -Spicewood -spice-wood -spicy -spici- -spicier -spiciest -spiciferous -spiciform -spicigerous -spicilege -spicily -spiciness -spicing -spick -spick-and-span -spick-and-spandy -spick-and-spanness -Spickard -spicket -spickle -spicknel -spicks -spick-span-new -spicose -spicosity -spicous -spicousness -spics -spicula -spiculae -spicular -spiculate -spiculated -spiculation -spicule -spicules -spiculi- -spiculiferous -spiculiform -spiculigenous -spiculigerous -spiculofiber -spiculose -spiculous -spiculum -spiculumamoris -spider -spider-catcher -spider-crab -spidered -spider-fingered -spiderflower -spiderhunter -spidery -spiderier -spideriest -spiderish -spider-leg -spider-legged -spider-leggy -spiderless -spiderlet -spiderly -spiderlike -spider-like -spider-limbed -spider-line -spiderling -spiderman -spidermonkey -spiders -spider's -spider-shanked -spider-spun -spiderweb -spider-web -spiderwebbed -spider-webby -spiderwebbing -spiderwork -spiderwort -spidger -spydom -spied -Spiegel -spiegeleisen -Spiegelman -spiegels -Spiegleman -spiel -spieled -Spieler -spielers -spieling -Spielman -spiels -spier -spyer -spiered -spiering -Spiers -spies -spif -spyfault -spiff -spiffed -spiffy -spiffier -spiffiest -spiffily -spiffiness -spiffing -spifflicate -spifflicated -spifflication -spiffs -spiflicate -spiflicated -spiflication -spig -Spigelia -Spigeliaceae -Spigelian -spiggoty -spyglass -spy-glass -spyglasses -spignel -spignet -spignut -spigot -spigots -spyhole -spying -spyism -spik -Spike -spikebill -spike-billed -spiked -spikedace -spikedaces -spikedness -spikefish -spikefishes -spikehole -spikehorn -spike-horned -spike-kill -spike-leaved -spikelet -spikelets -spikelike -spike-nail -spikenard -spike-pitch -spike-pitcher -spiker -spikers -spike-rush -spikes -spiketail -spike-tailed -spike-tooth -spiketop -spikeweed -spikewise -spiky -spikier -spikiest -spikily -spikiness -spiking -spiks -Spilanthes -spile -spiled -spilehole -spiler -spiles -spileworm -spilikin -spilikins -spiling -spilings -spilite -spilitic -spill -spill- -spillable -spillage -spillages -Spillar -spillbox -spilled -spiller -spillers -spillet -spilly -spillikin -spillikins -spilling -spillover -spill-over -spillpipe -spillproof -spills -Spillville -spillway -spillways -Spilogale -spiloma -spilomas -spilosite -spilt -spilth -spilths -spilus -SPIM -spin -spina -spinacene -spinaceous -spinach -spinach-colored -spinaches -spinachlike -spinach-rhubarb -Spinacia -spinae -spinage -spinages -spinal -spinales -spinalis -spinally -spinals -spinate -spincaster -Spindale -Spindell -spinder -spindlage -spindle -spindleage -spindle-cell -spindle-celled -spindled -spindle-formed -spindleful -spindlehead -spindle-legged -spindlelegs -spindlelike -spindle-pointed -spindler -spindle-rooted -spindlers -spindles -spindleshank -spindle-shanked -spindleshanks -spindle-shaped -spindle-shinned -spindle-side -spindletail -spindle-tree -spindlewise -spindlewood -spindleworm -spindly -spindlier -spindliest -spindliness -spindling -spin-dry -spin-dried -spin-drier -spin-dryer -spindrift -spin-drying -spine -spine-ache -spine-bashing -spinebill -spinebone -spine-breaking -spine-broken -spine-chiller -spine-chilling -spine-clad -spine-covered -spined -spinefinned -spine-finned -spine-headed -spinel -spineless -spinelessly -spinelessness -spinelet -spinelike -spinelle -spinelles -spinel-red -spinels -spine-pointed -spine-protected -spine-rayed -spines -spinescence -spinescent -spinet -spinetail -spine-tail -spine-tailed -spine-tipped -spinets -Spingarn -spingel -spin-house -spiny -spini- -spiny-backed -spinibulbar -spinicarpous -spinicerebellar -spiny-coated -spiny-crested -spinidentate -spinier -spiniest -spiniferous -Spinifex -spinifexes -spiny-finned -spiny-footed -spiniform -spiny-fruited -spinifugal -spinigerous -spinigrade -spiny-haired -spiny-leaved -spiny-legged -spiny-margined -spininess -spinipetal -spiny-pointed -spiny-rayed -spiny-ribbed -spiny-skinned -spiny-tailed -spiny-tipped -spinitis -spiny-toothed -spinituberculate -spink -spinless -spinnability -spinnable -spinnaker -spinnakers -spinney -spinneys -spinnel -spinner -spinneret -spinnerette -spinnery -spinneries -spinners -spinner's -Spinnerstown -spinnerular -spinnerule -spinny -spinnies -spinning -spinning-house -spinning-jenny -spinningly -spinning-out -spinnings -spinning-wheel -spino- -spinobulbar -spinocarpous -spinocerebellar -spinodal -spinode -spinoff -spin-off -spinoffs -spinogalvanization -spinoglenoid -spinoid -spinomuscular -spinoneural -spino-olivary -spinoperipheral -spinor -spinors -spinose -spinosely -spinoseness -spinosympathetic -spinosity -spinosodentate -spinosodenticulate -spinosotubercular -spinosotuberculate -spinotectal -spinothalamic -spinotuberculous -spinous -spinous-branched -spinous-finned -spinous-foliaged -spinous-leaved -spinousness -spinous-pointed -spinous-serrate -spinous-tailed -spinous-tipped -spinous-toothed -spinout -spinouts -Spinoza -Spinozism -Spinozist -Spinozistic -spinproof -spins -spinster -spinsterdom -spinsterhood -spinsterial -spinsterish -spinsterishly -spinsterism -spinsterly -spinsterlike -spinsterous -spinsters -spinstership -spinstress -spinstry -spintext -spin-text -spinthariscope -spinthariscopic -spintherism -spinto -spintos -spintry -spinturnix -spinula -spinulae -spinulate -spinulated -spinulation -spinule -spinules -spinulescent -spinuli- -spinuliferous -spinuliform -Spinulosa -spinulose -spinulosely -spinulosociliate -spinulosodentate -spinulosodenticulate -spinulosogranulate -spinulososerrate -spinulous -spinwriter -spionid -Spionidae -Spioniformia -spyproof -spira -spirable -spiracle -spiracles -spiracula -spiracular -spiraculate -spiraculiferous -spiraculiform -spiraculum -spirae -Spiraea -Spiraeaceae -spiraeas -spiral -spiral-bound -spiral-coated -spirale -spiraled -spiral-geared -spiral-grooved -spiral-horned -spiraliform -spiraling -spiralism -spirality -spiralization -spiralize -spiralled -spirally -spiralling -spiral-nebula -spiraloid -spiral-pointed -spirals -spiral-spring -spiraltail -spiral-vane -spiralwise -spiran -spirane -spirant -spirantal -Spiranthes -spiranthy -spiranthic -spirantic -spirantism -spirantization -spirantize -spirantized -spirantizing -spirants -spiraster -spirate -spirated -spiration -spire -spirea -spireas -spire-bearer -spired -spiregrass -spireless -spirelet -spirem -spireme -spiremes -spirems -spirepole -Spires -spire's -spire-shaped -spire-steeple -spireward -spirewise -spiry -spiricle -spirier -spiriest -Spirifer -Spirifera -Spiriferacea -spiriferid -Spiriferidae -spiriferoid -spiriferous -spiriform -spirignath -spirignathous -spirilla -Spirillaceae -spirillaceous -spirillar -spirillolysis -spirillosis -spirillotropic -spirillotropism -spirillum -spiring -Spirit -spirital -spiritally -spirit-awing -spirit-boiling -spirit-born -spirit-bowed -spirit-bribing -spirit-broken -spirit-cheering -spirit-chilling -spirit-crushed -spirit-crushing -spiritdom -spirit-drinking -spirited -spiritedly -spiritedness -spiriter -spirit-fallen -spirit-freezing -spirit-froze -spiritful -spiritfully -spiritfulness -spirit-guided -spirit-haunted -spirit-healing -spirithood -spirity -spiriting -spirit-inspiring -spiritism -spiritist -spiritistic -spiritize -spiritlamp -spiritland -spiritleaf -spiritless -spiritlessly -spiritlessness -spiritlevel -spirit-lifting -spiritlike -spirit-marring -spiritmonger -spirit-numb -spiritoso -spiritous -spirit-piercing -spirit-possessed -spirit-prompted -spirit-pure -spirit-quelling -spirit-rapper -spirit-rapping -spirit-refreshing -spiritrompe -spirit-rousing -spirits -spirit-sinking -spirit-small -spiritsome -spirit-soothing -spirit-speaking -spirit-stirring -spirit-stricken -spirit-thrilling -spirit-torn -spirit-troubling -spiritual -spiritualisation -spiritualise -spiritualiser -spiritualism -spiritualisms -spiritualist -spiritualistic -spiritualistically -spiritualists -spirituality -spiritualities -spiritualization -spiritualize -spiritualized -spiritualizer -spiritualizes -spiritualizing -spiritually -spiritual-minded -spiritual-mindedly -spiritual-mindedness -spiritualness -spirituals -spiritualship -spiritualty -spiritualties -spirituel -spirituelle -spirituosity -spirituous -spirituously -spirituousness -spiritus -spirit-walking -spirit-wearing -spiritweed -spirit-wise -Spiritwood -spirivalve -spirket -spirketing -spirketting -spirlie -spirling -Spiro -spiro- -Spirobranchia -Spirobranchiata -spirobranchiate -Spirochaeta -Spirochaetaceae -spirochaetae -spirochaetal -Spirochaetales -Spirochaete -spirochaetosis -spirochaetotic -spirochetal -spirochete -spirochetemia -spirochetes -spirochetic -spirocheticidal -spirocheticide -spirochetosis -spirochetotic -Spirodela -Spirogyra -spirogram -spirograph -spirography -spirographic -spirographidin -spirographin -Spirographis -spiroid -spiroidal -spiroilic -spirol -spirole -spiroloculine -spirometer -spirometry -spirometric -spirometrical -Spironema -spironolactone -spiropentane -Spirophyton -Spirorbis -Spiros -spyros -spiroscope -Spirosoma -spirous -spirt -spirted -spirting -spirtle -spirts -Spirula -spirulae -spirulas -spirulate -spise -spyship -spiss -spissated -spissatus -spissy -spissitude -spissus -Spisula -spit -Spitak -spital -spitals -spit-and-polish -spitball -spit-ball -spitballer -spitballs -SPITBOL -spitbox -spitchcock -spitchcocked -spitchcocking -spite -spited -spiteful -spitefuller -spitefullest -spitefully -spitefulness -spiteless -spiteproof -spites -spitfire -spitfires -spitfrog -spitful -spithamai -spithame -Spithead -spiting -spitish -spitkid -spitkit -spitous -spytower -spitpoison -spits -Spitsbergen -spitscocked -spitstick -spitsticker -spitted -Spitteler -spitten -spitter -spitters -spitting -spittle -spittlebug -spittlefork -spittleman -spittlemen -spittles -spittlestaff -spittoon -spittoons -Spitz -Spitzbergen -spitzenberg -Spitzenburg -Spitzer -spitzes -spitzflute -spitzkop -spiv -Spivey -spivery -spivs -spivvy -spivving -Spizella -spizzerinctum -SPL -Splachnaceae -splachnaceous -splachnoid -Splachnum -splacknuck -splad -splay -splayed -splay-edged -splayer -splayfeet -splayfoot -splayfooted -splay-footed -splaying -splay-kneed -splay-legged -splaymouth -splaymouthed -splay-mouthed -splaymouths -splairge -splays -splay-toed -splake -splakes -splanchnapophysial -splanchnapophysis -splanchnectopia -splanchnemphraxis -splanchnesthesia -splanchnesthetic -splanchnic -splanchnicectomy -splanchnicectomies -splanchno- -splanchnoblast -splanchnocoele -splanchnoderm -splanchnodiastasis -splanchnodynia -splanchnographer -splanchnography -splanchnographical -splanchnolith -splanchnology -splanchnologic -splanchnological -splanchnologist -splanchnomegaly -splanchnomegalia -splanchnopathy -splanchnopleural -splanchnopleure -splanchnopleuric -splanchnoptosia -splanchnoptosis -splanchnosclerosis -splanchnoscopy -splanchnoskeletal -splanchnoskeleton -splanchnosomatic -splanchnotomy -splanchnotomical -splanchnotribe -splash -splash- -splashback -splashboard -splashdown -splash-down -splashdowns -splashed -splasher -splashers -splashes -splashy -splashier -splashiest -splashily -splashiness -splashing -splashingly -splash-lubricate -splashproof -splashs -splash-tight -splashwing -splat -splat-back -splatch -splatcher -splatchy -splather -splathering -splats -splatted -splatter -splatterdash -splatterdock -splattered -splatterer -splatterfaced -splatter-faced -splattering -splatters -splatterwork -spleen -spleen-born -spleen-devoured -spleened -spleenful -spleenfully -spleeny -spleenier -spleeniest -spleening -spleenish -spleenishly -spleenishness -spleenless -spleen-pained -spleen-piercing -spleens -spleen-shaped -spleen-sick -spleen-struck -spleen-swollen -spleenwort -spleet -spleetnew -splen- -splenadenoma -splenalgy -splenalgia -splenalgic -splenative -splenatrophy -splenatrophia -splenauxe -splenculi -splenculus -splendaceous -splendacious -splendaciously -splendaciousness -splendatious -splendent -splendently -splender -splendescent -splendid -splendider -splendidest -splendidious -splendidly -splendidness -splendiferous -splendiferously -splendiferousness -splendor -Splendora -splendorous -splendorously -splendorousness -splendorproof -splendors -splendour -splendourproof -splendrous -splendrously -splendrousness -splenectama -splenectasis -splenectomy -splenectomies -splenectomist -splenectomize -splenectomized -splenectomizing -splenectopy -splenectopia -splenelcosis -splenemia -splenemphraxis -spleneolus -splenepatitis -splenetic -splenetical -splenetically -splenetive -splenia -splenial -splenic -splenical -splenicterus -splenification -spleniform -splenii -spleninii -spleniti -splenitis -splenitises -splenitive -splenium -splenius -splenization -spleno- -splenoblast -splenocele -splenoceratosis -splenocyte -splenocleisis -splenocolic -splenodiagnosis -splenodynia -splenography -splenohemia -splenoid -splenolaparotomy -splenolymph -splenolymphatic -splenolysin -splenolysis -splenology -splenoma -splenomalacia -splenomedullary -splenomegaly -splenomegalia -splenomegalic -splenomyelogenous -splenoncus -splenonephric -splenopancreatic -splenoparectama -splenoparectasis -splenopathy -splenopexy -splenopexia -splenopexis -splenophrenic -splenopneumonia -splenoptosia -splenoptosis -splenorrhagia -splenorrhaphy -splenotyphoid -splenotomy -splenotoxin -splent -splents -splenulus -splenunculus -splet -spleuchan -spleughan -splice -spliceable -spliced -splicer -splicers -splices -splicing -splicings -spliff -spliffs -splinder -spline -splined -splines -spline's -splineway -splining -splint -splintage -splintbone -splint-bottom -splint-bottomed -splinted -splinter -splinter-bar -splinterd -splintered -splintery -splintering -splinterize -splinterless -splinternew -splinterproof -splinter-proof -splinters -splinty -splinting -splints -splintwood -splish-splash -Split -split- -splitbeak -split-bottom -splite -split-eared -split-edge -split-face -splitfinger -splitfruit -split-level -split-lift -splitmouth -split-mouth -splitnew -split-nosed -splitnut -split-oak -split-off -split-phase -splits -split's -splitsaw -splittable -splittail -splitted -splitten -splitter -splitterman -splitters -splitter's -split-timber -splitting -splittings -split-tongued -split-up -splitworm -splodge -splodged -splodges -splodgy -sploit -splore -splores -splosh -sploshed -sploshes -sploshy -sploshing -splotch -splotched -splotches -splotchy -splotchier -splotchiest -splotchily -splotchiness -splotching -splother -splunge -splunt -splurge -splurged -splurger -splurges -splurgy -splurgier -splurgiest -splurgily -splurging -splurt -spluther -splutter -spluttered -splutterer -spluttery -spluttering -splutters -SPNI -spninx -spninxes -spoach -Spock -Spode -spodes -spodiosite -spodium -spodo- -spodogenic -spodogenous -spodomancy -spodomantic -spodumene -spoffy -spoffish -spoffle -Spofford -spogel -Spohr -spoil -spoil- -spoilable -spoilage -spoilages -spoilate -spoilated -spoilation -spoilbank -spoiled -spoiler -spoilers -spoilfive -spoilful -spoiling -spoilless -spoilment -spoil-mold -spoil-paper -spoils -spoilsman -spoilsmen -spoilsmonger -spoilsport -spoilsports -spoilt -Spokan -Spokane -spoke -spoked -spoke-dog -spokeless -spoken -spokes -spokeshave -spokesman -spokesmanship -spokesmen -spokesperson -spokester -spokeswoman -spokeswomanship -spokeswomen -spokewise -spoky -spoking -spole -spolia -spoliary -spoliaria -spoliarium -spoliate -spoliated -spoliates -spoliating -spoliation -spoliative -spoliator -spoliatory -spoliators -spolium -spondaic -spondaical -spondaics -spondaize -spondean -spondee -spondees -spondiac -Spondiaceae -Spondias -spondil -spondyl -spondylalgia -spondylarthritis -spondylarthrocace -spondyle -spondylexarthrosis -spondylic -spondylid -Spondylidae -spondylioid -spondylitic -spondylitis -spondylium -spondylizema -spondylocace -Spondylocladium -spondylodiagnosis -spondylodidymia -spondylodymus -spondyloid -spondylolisthesis -spondylolisthetic -spondylopathy -spondylopyosis -spondyloschisis -spondylosyndesis -spondylosis -spondylotherapeutics -spondylotherapy -spondylotherapist -spondylotomy -spondylous -Spondylus -spondulicks -spondulics -spondulix -spong -sponge -sponge-bearing -spongecake -sponge-cake -sponge-colored -sponged -sponge-diving -sponge-fishing -spongefly -spongeflies -sponge-footed -spongeful -sponge-leaved -spongeless -spongelet -spongelike -spongeous -sponge-painted -spongeproof -sponger -spongers -sponges -sponge-shaped -spongeware -spongewood -spongy -spongi- -Spongiae -spongian -spongicolous -spongiculture -Spongida -spongier -spongiest -spongiferous -spongy-flowered -spongy-footed -spongiform -Spongiidae -spongily -Spongilla -spongillafly -spongillaflies -spongillid -Spongillidae -spongilline -spongy-looking -spongin -sponginblast -sponginblastic -sponginess -sponging -sponging-house -spongingly -spongins -spongio- -spongioblast -spongioblastic -spongioblastoma -spongiocyte -spongiole -spongiolin -spongiopilin -spongiopiline -spongioplasm -spongioplasmic -spongiose -spongiosity -spongious -spongiousness -Spongiozoa -spongiozoon -spongy-rooted -spongy-wet -spongy-wooded -spongo- -spongoblast -spongoblastic -spongocoel -spongoid -spongology -spongophore -Spongospora -spon-image -sponsal -sponsalia -sponsibility -sponsible -sponsing -sponsion -sponsional -sponsions -sponson -sponsons -sponsor -sponsored -sponsorial -sponsoring -sponsors -sponsorship -sponsorships -sponspeck -spontaneity -spontaneities -spontaneous -spontaneously -spontaneousness -Spontini -sponton -spontoon -spontoons -spoof -spoofed -spoofer -spoofery -spooferies -spoofers -spoofy -spoofing -spoofish -spoofs -spook -spookdom -spooked -spookery -spookeries -spooky -spookier -spookies -spookiest -spookily -spookiness -spooking -spookish -spookism -spookist -spookology -spookological -spookologist -spooks -spool -spooled -spooler -spoolers -spoolful -spooling -spoollike -spools -spool-shaped -spoolwood -spoom -spoon -spoonback -spoon-back -spoonbait -spoon-beaked -spoonbill -spoon-billed -spoonbills -spoon-bowed -spoonbread -spoondrift -spooned -spooney -spooneyism -spooneyly -spooneyness -spooneys -Spooner -spoonerism -spoonerisms -spoon-fashion -spoon-fashioned -spoon-fed -spoon-feed -spoon-feeding -spoonflower -spoon-formed -spoonful -spoonfuls -spoonholder -spoonhutch -spoony -spoonier -spoonies -spooniest -spoonyism -spoonily -spooniness -spooning -spoonism -spoonless -spoonlike -spoonmaker -spoonmaking -spoon-meat -spoons -spoonsful -spoon-shaped -spoonways -spoonwise -spoonwood -spoonwort -Spoor -spoored -spoorer -spooring -spoorn -spoors -spoot -spor -spor- -sporabola -sporaceous -Sporades -sporadial -sporadic -sporadical -sporadically -sporadicalness -sporadicity -sporadicness -sporadin -sporadism -sporadosiderite -sporal -sporange -sporangia -sporangial -sporangidium -sporangiferous -sporangiform -sporangigia -sporangioid -sporangiola -sporangiole -sporangiolum -sporangiophore -sporangiospore -sporangite -Sporangites -sporangium -sporation -spore -spored -sporeformer -sporeforming -sporeling -Sporer -spores -spore's -spory -sporicidal -sporicide -sporid -sporidesm -sporidia -sporidial -sporidiferous -sporidiiferous -sporidiole -sporidiolum -sporidium -sporiferous -sporification -sporing -sporiparity -sporiparous -sporo- -sporoblast -Sporobolus -sporocarp -sporocarpia -sporocarpium -Sporochnaceae -Sporochnus -sporocyst -sporocystic -sporocystid -sporocyte -sporoderm -sporodochia -sporodochium -sporoduct -sporogen -sporogenesis -sporogeny -sporogenic -sporogenous -sporogone -sporogony -sporogonia -sporogonial -sporogonic -sporogonium -sporogonous -sporoid -sporologist -sporomycosis -sporonia -sporont -sporophydium -sporophyl -sporophyll -sporophyllary -sporophyllum -sporophyte -sporophytic -sporophore -sporophoric -sporophorous -sporoplasm -sporopollenin -sporosac -sporostegium -sporostrote -sporotrichosis -sporotrichotic -Sporotrichum -sporous -Sporozoa -sporozoal -sporozoan -sporozoic -sporozoid -sporozoite -sporozooid -sporozoon -sporran -sporrans -sport -sportability -sportable -sport-affording -sportance -sported -sporter -sporters -sportfisherman -sportfishing -sportful -sportfully -sportfulness -sport-giving -sport-hindering -sporty -sportier -sportiest -sportily -sportiness -sporting -sportingly -sporting-wise -sportive -sportively -sportiveness -sportless -sportly -sportling -sport-loving -sport-making -sports -sportscast -sportscaster -sportscasters -sportscasts -sportsman -sportsmanly -sportsmanlike -sportsmanlikeness -sportsmanliness -sportsmanship -sportsmanships -sportsmen -sportsome -sport-starved -sportswear -sportswoman -sportswomanly -sportswomanship -sportswomen -sportswrite -sportswriter -sportswriters -sportswriting -sportula -sportulae -sporular -sporulate -sporulated -sporulating -sporulation -sporulative -sporule -sporules -sporuliferous -sporuloid -sposh -sposhy -Sposi -SPOT -spot-barred -spot-billed -spot-check -spot-drill -spot-eared -spot-face -spot-grind -spot-leaved -spotless -spotlessly -spotlessness -spotlight -spotlighted -spotlighter -spotlighting -spotlights -spotlike -spot-lipped -spotlit -spot-mill -spot-on -spotrump -spots -spot's -Spotsylvania -spotsman -spotsmen -spot-soiled -Spotswood -spottable -spottail -spotted -spotted-beaked -spotted-bellied -spotted-billed -spotted-breasted -spotted-eared -spotted-finned -spotted-leaved -spottedly -spotted-necked -spottedness -spotted-tailed -spotted-winged -spotteldy -spotter -spotters -spotter's -spotty -spottier -spottiest -spottily -spottiness -spotting -spottle -Spottsville -Spottswood -spot-weld -spotwelder -spot-winged -spoucher -spousage -spousal -spousally -spousals -spouse -spouse-breach -spoused -spousehood -spouseless -spouses -spouse's -spousy -spousing -spout -spouted -spouter -spouters -spout-hole -spouty -spoutiness -spouting -spoutless -spoutlike -spoutman -spouts -spp -spp. -SPQR -SPR -sprachgefuhl -sprachle -sprack -sprackish -sprackle -Spracklen -sprackly -sprackness -sprad -spraddle -spraddled -spraddle-legged -spraddles -spraddling -sprag -Sprage -Spragens -spragged -spragger -spragging -spraggly -Spraggs -spragman -sprags -Sprague -Spragueville -spray -sprayboard -spray-casting -spraich -spray-decked -sprayed -sprayey -sprayer -sprayers -sprayful -sprayfully -spraying -sprayless -spraylike -sprain -sprained -spraing -spraining -sprains -spraint -spraints -sprayproof -sprays -spray-shaped -spraith -spray-topped -spray-washed -spray-wet -Sprakers -sprang -sprangle -sprangled -sprangle-top -sprangly -sprangling -sprangs -sprank -sprat -sprat-barley -sprats -Spratt -spratted -spratter -spratty -spratting -sprattle -sprattled -sprattles -sprattling -sprauchle -sprauchled -sprauchling -sprawl -sprawled -sprawler -sprawlers -sprawly -sprawlier -sprawliest -sprawling -sprawlingly -sprawls -spread -spreadability -spreadable -spreadation -spreadboard -spreadeagle -spread-eagle -spread-eagled -spread-eagleism -spread-eagleist -spread-eagling -spreaded -spreader -spreaders -spreadhead -spready -spreading -spreadingly -spreadingness -spreadings -spread-out -spreadover -spread-over -spreads -spread-set -spreadsheet -spreadsheets -spreagh -spreaghery -spreath -spreathed -Sprechgesang -Sprechstimme -spreckle -Spree -spreed -spreeing -sprees -spree's -spreeuw -Sprekelia -spreng -sprenge -sprenging -sprent -spret -spretty -sprew -sprewl -sprezzatura -spry -spridhogue -spried -sprier -spryer -spriest -spryest -sprig -sprig-bit -Sprigg -sprigged -sprigger -spriggers -spriggy -spriggier -spriggiest -sprigging -spright -sprighted -sprightful -sprightfully -sprightfulness -sprighty -sprightly -sprightlier -sprightliest -sprightlily -sprightliness -sprightlinesses -sprights -spriglet -sprigs -sprigtail -sprig-tailed -spryly -sprindge -spryness -sprynesses -Spring -spring- -springal -springald -springals -spring-beam -spring-blooming -spring-blossoming -springboard -spring-board -springboards -Springbok -springboks -spring-born -Springboro -Springbrook -springbuck -spring-budding -spring-clean -spring-cleaner -spring-cleaning -Springdale -spring-driven -springe -springed -springeing -Springer -springerle -springers -Springerton -Springerville -springes -Springfield -springfinger -springfish -springfishes -spring-flood -spring-flowering -spring-framed -springful -spring-gathered -spring-grown -springgun -springhaas -spring-habited -springhalt -springhead -spring-head -spring-headed -spring-heeled -Springhill -Springhope -Springhouse -Springy -springier -springiest -springily -springiness -springing -springingly -spring-jointed -springle -springled -springless -springlet -springly -Springlick -springlike -springling -spring-loaded -springlock -spring-lock -spring-made -springmaker -springmaking -spring-peering -spring-planted -spring-plow -Springport -spring-raised -Springs -spring-seated -spring-set -spring-snecked -spring-sowed -spring-sown -spring-spawning -spring-stricken -springtail -spring-tail -spring-taught -spring-tempered -springtide -spring-tide -spring-tight -springtime -spring-touched -Springtown -springtrap -spring-trip -Springvale -Springville -Springwater -spring-well -springwood -spring-wood -springworm -springwort -springwurzel -sprink -sprinkle -sprinkled -sprinkleproof -sprinkler -sprinklered -sprinklers -sprinkles -sprinkling -sprinklingly -sprinklings -sprint -sprinted -sprinter -sprinters -sprinting -sprints -sprit -sprite -spritehood -spriteless -spritely -spritelike -spriteliness -sprites -spritish -sprits -spritsail -sprittail -spritted -spritty -sprittie -spritting -spritz -spritzed -spritzer -spritzes -sproat -sprocket -sprockets -sprod -sprogue -sproil -sprong -sprose -sprot -sproty -Sprott -sprottle -Sproul -sprout -sproutage -sprouted -sprouter -sproutful -sprouting -sproutland -sproutling -sprouts -sprowsy -Spruance -spruce -spruced -sprucely -spruceness -sprucer -sprucery -spruces -sprucest -sprucy -sprucier -spruciest -sprucify -sprucification -sprucing -sprue -spruer -sprues -sprug -sprugs -spruik -spruiker -spruit -Sprung -sprunk -sprunny -sprunt -spruntly -sprusado -sprush -SPS -spt -SPU -SPUCDL -SPUD -spud-bashing -spudboy -spudded -spudder -spudders -spuddy -spudding -spuddle -spuds -spue -spued -spues -spuffle -spug -spuggy -spuilyie -spuilzie -spuing -spuke -spule-bane -spulyie -spulyiement -spulzie -Spumans -spumante -spume -spumed -spumes -spumescence -spumescent -spumy -spumier -spumiest -spumiferous -spumification -spumiform -spuming -spumoid -spumone -spumones -spumoni -spumonis -spumose -spumous -spun -spunch -spung -spunge -spunyarn -spunk -spunked -spunky -spunkie -spunkier -spunkies -spunkiest -spunkily -spunkiness -spunking -spunkless -spunklessly -spunklessness -spunks -spunny -spunnies -spun-out -spunware -SPUR -spur-bearing -spur-clad -spurdie -spurdog -spur-driven -spur-finned -spurflower -spurgall -spur-gall -spurgalled -spur-galled -spurgalling -spurgalls -spurge -spur-geared -Spurgeon -Spurger -spurges -spurgewort -spurge-wort -spur-gilled -spur-heeled -spuria -spuriae -spuries -spuriosity -spurious -spuriously -spuriousness -Spurius -spur-jingling -spurl -spur-leather -spurless -spurlet -spurlike -spurling -Spurlock -Spurlockville -spurluous -spurmaker -spurmoney -spurn -spurned -spurner -spurners -spurning -spurnpoint -spurns -spurnwater -spur-off-the-moment -spur-of-the-moment -spurproof -spurred -spurrey -spurreies -spurreys -spurrer -spurrers -spurry -spurrial -spurrier -spurriers -spurries -spurring -spurrings -spurrite -spur-royal -spur-rowel -spurs -spur's -spur-shaped -spurt -spur-tailed -spurted -spurter -spurting -spurtive -spurtively -spurtle -spurtleblade -spurtles -spur-toed -spurts -spurway -spurwing -spur-wing -spurwinged -spur-winged -spurwort -sput -sputa -sputative -spute -Sputnik -sputniks -sputta -sputter -sputtered -sputterer -sputterers -sputtery -sputtering -sputteringly -sputters -sputum -sputumary -sputumose -sputumous -Sq -Sq. -SQA -SQC -sqd -SQE -SQL -SQLDS -sqq -sqq. -sqrt -squab -squabash -squabasher -squabbed -squabber -squabby -squabbier -squabbiest -squabbing -squabbish -squabble -squabbled -squabbler -squabblers -squabbles -squabbly -squabbling -squabblingly -squab-pie -squabs -squacco -squaccos -squad -squadded -squadder -squaddy -squadding -squader -squadrate -squadrism -squadrol -squadron -squadrone -squadroned -squadroning -squadrons -squadron's -squads -squad's -squads-left -squads-right -squail -squailer -squails -squalene -squalenes -Squali -squalid -Squalida -Squalidae -squalider -squalidest -squalidity -squalidly -squalidness -squaliform -squall -squalled -squaller -squallery -squallers -squally -squallier -squalliest -squalling -squallish -squalls -squall's -squalm -Squalodon -squalodont -Squalodontidae -squaloid -Squaloidei -squalor -squalors -Squalus -squam -squam- -squama -squamaceous -squamae -Squamariaceae -Squamata -squamate -squamated -squamatine -squamation -squamatogranulous -squamatotuberculate -squame -squamella -squamellae -squamellate -squamelliferous -squamelliform -squameous -squamy -squamiferous -squamify -squamiform -squamigerous -squamipennate -Squamipennes -squamipinnate -Squamipinnes -squamish -squamo- -squamocellular -squamoepithelial -squamoid -squamomastoid -squamo-occipital -squamoparietal -squamopetrosal -squamosa -squamosal -squamose -squamosely -squamoseness -squamosis -squamosity -squamoso- -squamosodentated -squamosoimbricated -squamosomaxillary -squamosoparietal -squamosoradiate -squamosotemporal -squamosozygomatic -squamosphenoid -squamosphenoidal -squamotemporal -squamous -squamously -squamousness -squamozygomatic -Squamscot -squamula -squamulae -squamulate -squamulation -squamule -squamuliform -squamulose -squander -squandered -squanderer -squanderers -squandering -squanderingly -squandermania -squandermaniac -squanders -squanter-squash -squantum -squarable -square -squareage -square-barred -square-based -square-bashing -square-bladed -square-bodied -square-bottomed -square-browed -square-built -square-butted -squarecap -square-cheeked -square-chinned -square-countered -square-cut -squared -square-dancer -square-dealing -squaredly -square-draw -square-drill -square-eared -square-edged -square-elbowed -squareface -square-faced -square-figured -squareflipper -square-fronted -squarehead -square-headed -square-hewn -square-jawed -square-John -square-jointed -square-leg -squarely -squarelike -square-lipped -square-looking -square-made -squareman -square-marked -squaremen -square-meshed -squaremouth -square-mouthed -square-necked -squareness -square-nosed -squarer -square-rigged -square-rigger -squarers -square-rumped -squares -square-set -square-shafted -square-shaped -square-shooting -square-shouldered -square-skirted -squarest -square-stalked -square-stem -square-stemmed -square-sterned -squaretail -square-tailed -square-thread -square-threaded -square-tipped -squaretoed -square-toed -square-toedness -square-toes -square-topped -square-towered -squarewise -squary -squarier -squaring -squarish -squarishly -squarishness -squark -squarrose -squarrosely -squarroso- -squarroso-dentate -squarroso-laciniate -squarroso-pinnatipartite -squarroso-pinnatisect -squarrous -squarrulose -squarson -squarsonry -squash -squash- -squashberry -squashed -squasher -squashers -squashes -squashy -squashier -squashiest -squashily -squashiness -squashing -squashs -squassation -squat -Squatarola -squatarole -squat-bodied -squat-built -squaterole -squat-hatted -Squatina -squatinid -Squatinidae -squatinoid -Squatinoidei -squatly -squatment -squatmore -squatness -squats -squattage -squatted -squatter -squatterarchy -squatterdom -squattered -squattering -squatterism -squatterproof -squatters -squattest -squatty -squattier -squattiest -squattily -squattiness -squatting -squattingly -squattish -squattle -squattocracy -squattocratic -squatwise -squaw -squawberry -squawberries -squawbush -squawdom -squaw-drops -squawfish -squawfishes -squawflower -squawk -squawked -squawker -squawkers -squawky -squawkie -squawkier -squawkiest -squawking -squawkingly -squawks -squawl -squawler -Squawmish -squawroot -squaws -Squawtits -squawweed -Squaxon -squdge -squdgy -squeak -squeaked -squeaker -squeakery -squeakers -squeaky -squeakier -squeakiest -squeakyish -squeakily -squeakiness -squeaking -squeakingly -squeaklet -squeakproof -squeaks -squeal -squeald -squealed -squealer -squealers -squealing -squeals -squeam -squeamy -squeamish -squeamishly -squeamishness -squeamous -squeasy -Squedunk -squeege -squeegee -squeegeed -squeegeeing -squeegees -squeegeing -squeel -squeezability -squeezable -squeezableness -squeezably -squeeze -squeeze-box -squeezed -squeezeman -squeezer -squeezers -squeezes -squeeze-up -squeezy -squeezing -squeezingly -squeg -squegged -squegging -squegs -squelch -squelched -squelcher -squelchers -squelches -squelchy -squelchier -squelchiest -squelchily -squelchiness -squelching -squelchingly -squelchingness -squelette -squench -squencher -squet -squeteague -squetee -squib -Squibb -squibbed -squibber -squibbery -squibbing -squibbish -squibcrack -squiblet -squibling -squibs -squibster -SQUID -squidded -squidder -squidding -squiddle -squidge -squidgereen -squidgy -squidgier -squidgiest -squid-jigger -squid-jigging -squids -Squier -squiffed -squiffer -squiffy -squiffier -squiffiest -squiggle -squiggled -squiggles -squiggly -squigglier -squiggliest -squiggling -squilgee -squilgeed -squilgeeing -squilgeer -squilgees -squilgeing -Squill -Squilla -squillae -squillagee -squillageed -squillageeing -squillageing -squillas -squillery -squillgee -squillgeed -squillgeeing -squillgeing -squillian -squillid -Squillidae -squillitic -squill-like -squilloid -Squilloidea -squills -squimmidge -squin -squinacy -squinance -squinancy -squinant -squinch -squinched -squinch-eyed -squinches -squinching -squinny -squinnied -squinnier -squinnies -squinniest -squinnying -squinsy -squint -squinted -squint-eye -squint-eyed -squint-eyedness -squinter -squinters -squintest -squinty -squintier -squintiest -squinting -squintingly -squintingness -squintly -squintness -squints -squirage -squiralty -squirarch -squirarchal -squirarchy -squirarchical -squirarchies -Squire -squirearch -squirearchal -squirearchy -squirearchical -squirearchies -squired -squiredom -squireen -squireens -squirehood -squireless -squirelet -squirely -squirelike -squireling -squireocracy -Squires -squire's -squireship -squiress -squiret -squirewise -squiring -squirish -squirism -squirk -squirl -squirm -squirmed -squirmer -squirmers -squirmy -squirmier -squirmiest -squirminess -squirming -squirmingly -squirms -squirr -squirrel -squirrel-colored -squirreled -squirrel-eyed -squirrelfish -squirrelfishes -squirrel-headed -squirrely -squirrelian -squirreline -squirreling -squirrelish -squirrelled -squirrelly -squirrellike -squirrel-limbed -squirrelling -squirrel-minded -squirrelproof -squirrels -squirrel's-ear -squirrelsstagnate -squirreltail -squirrel-tail -squirrel-trimmed -squirt -squirted -squirter -squirters -squirt-fire -squirty -squirtiness -squirting -squirtingly -squirtish -squirts -squish -squished -squishes -squishy -squishier -squishiest -squishiness -squishing -squish-squash -squiss -squit -squitch -squitchy -squitter -squiz -squoosh -squooshed -squooshes -squooshy -squooshing -squoze -squshy -squshier -squshiest -squush -squushed -squushes -squushy -squushing -SR -Sr. -SRA -Sra. -srac -sraddha -sraddhas -sradha -sradhas -SRAM -sramana -sravaka -SRB -Srbija -SRBM -SRC -SRCN -SRD -SRI -sridhar -sridharan -srikanth -Srinagar -Srini -srinivas -Srinivasa -srinivasan -sriram -sris -srivatsan -SRM -SRN -SRO -SRP -SRS -Srta -Srta. -SRTS -sruti -SS -s's -ss. -SS-10 -SS-11 -SS-9 -SSA -SSAP -SSAS -SSB -SSBAM -SSC -SScD -SSCP -S-scroll -SSD -SSDU -SSE -ssed -SSEL -SSF -SSFF -SSG -S-shaped -SSI -ssing -SSM -SSME -SSN -SSO -ssort -SSP -SSPC -SSPF -SSPRU -SSPS -SSR -SSRMS -SSS -SST -S-state -SSTO -sstor -SSTTSS -SSTV -ssu -SSW -st -St. -Sta -staab -Staal -Staatsburg -Staatsozialismus -staatsraad -Staatsrat -stab -stabbed -stabber -stabbers -stabbing -stabbingly -stabbingness -stabilate -stabile -stabiles -stabilify -stabiliment -stabilimeter -stabilisation -stabilise -stabilised -stabiliser -stabilising -stabilist -stabilitate -stability -stabilities -stability's -stabilivolt -stabilization -stabilizator -stabilize -stabilized -stabilizer -stabilizers -stabilizes -stabilizing -stable -stableboy -stable-born -stabled -stableful -stablekeeper -stablelike -stableman -stablemate -stablemeal -stablemen -stableness -stabler -stablers -stables -stablest -stablestand -stable-stand -stableward -stablewards -stably -stabling -stablings -stablish -stablished -stablishes -stablishing -stablishment -staboy -stabproof -Stabreim -Stabroek -stabs -stabulate -stabulation -stabwort -stacc -stacc. -staccado -staccati -staccato -staccatos -Stace -Stacee -Stacey -stacher -stachering -stachydrin -stachydrine -stachyose -Stachys -Stachytarpheta -Stachyuraceae -stachyuraceous -Stachyurus -Staci -Stacy -Stacia -Stacie -Stacyville -stack -stackable -stackage -stacked -stackencloud -stacker -stackering -stackers -stacket -stackfreed -stackful -stackgarth -stack-garth -Stackhousia -Stackhousiaceae -stackhousiaceous -stackyard -stacking -stackless -stackman -stackmen -stacks -stack's -stackstand -stackup -stackups -stacte -stactes -stactometer -stad -stadda -staddle -staddles -staddlestone -staddling -stade -stader -stades -stadholder -stadholderate -stadholdership -stadhouse -stadia -stadial -stadias -stadic -stadie -stadimeter -stadiometer -stadion -stadium -stadiums -stadle -Stadt -stadthaus -stadtholder -stadtholderate -stadtholdership -stadthouse -Stafani -stafette -staff -Staffa -staffage -Staffan -Staffard -staffed -staffelite -staffer -staffers -staffete -staff-herd -staffier -staffing -staffish -staffless -staffman -staffmen -Stafford -Staffordshire -Staffordsville -Staffordville -Staffs -staffstriker -Staford -Stag -stag-beetle -stagbush -STAGE -stageability -stageable -stageableness -stageably -stage-blanks -stage-bleed -stagecoach -stage-coach -stagecoaches -stagecoaching -stagecraft -staged -stagedom -stagefright -stage-frighten -stageful -stagehand -stagehands -stagehouse -stagey -stag-eyed -stageland -stagelike -stageman -stage-manage -stage-managed -stage-manager -stage-managing -stagemen -stager -stagery -stagers -stages -stagese -stage-set -stagestruck -stage-struck -stag-evil -stagewise -stageworthy -stagewright -stagflation -Stagg -staggard -staggards -staggart -staggarth -staggarts -stagged -stagger -staggerbush -staggered -staggerer -staggerers -staggery -staggering -staggeringly -staggers -staggerweed -staggerwort -staggy -staggie -staggier -staggies -staggiest -stagging -stag-hafted -stag-handled -staghead -stag-headed -stag-headedness -staghorn -stag-horn -stag-horned -staghound -staghunt -staghunter -staghunting -stagy -stagiary -stagier -stagiest -stagily -staginess -staging -stagings -stagion -Stagira -Stagirite -Stagyrite -Stagiritic -staglike -stagmometer -stagnance -stagnancy -stagnant -stagnant-blooded -stagnantly -stagnant-minded -stagnantness -stagnant-souled -stagnate -stagnated -stagnates -stagnating -stagnation -stagnations -stagnatory -stagnature -stagne -stag-necked -stagnicolous -stagnize -stagnum -Stagonospora -stags -stag's -stagskin -stag-sure -stagworm -Stahl -Stahlhelm -Stahlhelmer -Stahlhelmist -Stahlian -Stahlianism -Stahlism -Stahlstown -stay -staia -stayable -stay-at-home -stay-a-while -stay-bearer -staybolt -stay-bolt -staid -staider -staidest -staidly -staidness -stayed -stayer -stayers -staig -staight-bred -staigs -stay-in -staying -stail -staylace -stayless -staylessness -stay-log -staymaker -staymaking -stain -stainability -stainabilities -stainable -stainableness -stainably -stained -stainer -stainers -Staines -stainful -stainierite -staynil -staining -stainless -stainlessly -stainlessness -stainproof -stains -staio -stayover -staypak -stair -stairbeak -stairbuilder -stairbuilding -staircase -staircases -staircase's -staired -stair-foot -stairhead -stair-head -stairy -stairless -stairlike -stairs -stair's -stairstep -stair-step -stair-stepper -stairway -stairways -stairway's -stairwell -stairwells -stairwise -stairwork -stays -staysail -staysails -stayship -stay-ship -stay-tape -staith -staithe -staithes -staithman -staithmen -Stayton -staiver -stake -stake-boat -staked -stakehead -stakeholder -stakemaster -stakeout -stakeouts -staker -stakerope -stakes -Stakhanov -Stakhanovism -Stakhanovite -staking -stalace -stalactic -stalactical -stalactiform -stalactital -stalactite -stalactited -stalactites -stalactitic -stalactitical -stalactitically -stalactitied -stalactitiform -stalactitious -stalag -stalagma -stalagmite -stalagmites -stalagmitic -stalagmitical -stalagmitically -stalagmometer -stalagmometry -stalagmometric -stalags -Stalder -stale -staled -stale-drunk -stale-grown -Staley -stalely -stalemate -stalemated -stalemates -stalemating -stale-mouthed -staleness -staler -stales -stalest -stale-worn -Stalin -Stalinabad -staling -Stalingrad -Stalinism -Stalinist -stalinists -Stalinite -Stalino -Stalinogrod -Stalinsk -Stalk -stalkable -stalked -stalk-eyed -Stalker -stalkers -stalky -stalkier -stalkiest -stalkily -stalkiness -stalking -stalking-horse -stalkingly -stalkless -stalklet -stalklike -stalko -stalkoes -stalks -stall -stallage -stalland -stallar -stallary -stallboard -stallboat -stalled -stallenger -staller -stallership -stall-fed -stall-feed -stall-feeding -stalling -stallinger -stallingken -stallings -stallion -stallionize -stallions -stallkeeper -stall-like -stallman -stall-master -stallmen -stallment -stallon -stalls -Stallworth -stalwart -stalwartism -stalwartize -stalwartly -stalwartness -stalwarts -stalworth -stalworthly -stalworthness -stam -Stamata -stamba -Stambaugh -stambha -Stamboul -stambouline -Stambul -stamen -stamened -stamens -stamen's -Stamford -stamin -stamin- -stamina -staminal -staminas -staminate -stamindia -stamineal -stamineous -staminiferous -staminigerous -staminode -staminody -staminodia -staminodium -Stammbaum -stammel -stammelcolor -stammels -stammer -stammered -stammerer -stammerers -stammering -stammeringly -stammeringness -stammers -stammerwort -stammrel -stamnoi -stamnos -stamp -stampable -stampage -stamped -stampedable -stampede -stampeded -stampeder -stampedes -stampeding -stampedingly -stampedo -stampee -stamper -stampery -stampers -stamphead -Stampian -stamping -stample -stampless -stamp-licking -stampman -stampmen -Stamps -stampsman -stampsmen -stampweed -Stan -Stanaford -Stanardsville -Stanberry -stance -stances -stanch -stanchable -stanched -stanchel -stancheled -stancher -stanchers -stanches -stanchest -Stanchfield -stanching -stanchion -stanchioned -stanchioning -stanchions -stanchless -stanchlessly -stanchly -stanchness -stand -standage -standard -standardbearer -standard-bearer -standardbearers -standard-bearership -standardbred -standard-bred -standard-gage -standard-gaged -standard-gauge -standard-gauged -standardise -standardised -standardizable -standardization -standardizations -standardize -standardized -standardizer -standardizes -standardizing -standardly -standardness -standards -standard-sized -standard-wing -standardwise -standaway -standback -standby -stand-by -standbybys -standbys -stand-bys -stand-down -stand-easy -standee -standees -standel -standelwelks -standelwort -Stander -stander-by -standergrass -standers -standerwort -standeth -standfast -Standford -standi -Standice -stand-in -Standing -standing-place -standings -Standish -standishes -Standley -standoff -stand-off -standoffish -stand-offish -standoffishly -stand-offishly -standoffishness -stand-offishness -standoffs -standout -standouts -standpat -standpatism -standpatter -stand-patter -standpattism -standpipe -stand-pipe -standpipes -standpoint -standpoints -standpoint's -standpost -stands -standstill -stand-to -standup -stand-up -Standush -stane -stanechat -staned -stanek -stanes -Stanfield -Stanfill -Stanford -Stanfordville -stang -stanged -Stangeria -stanging -stangs -Stanhope -Stanhopea -stanhopes -staniel -stanine -stanines -staning -Stanislao -Stanislas -Stanislaus -Stanislavski -Stanislavsky -Stanislaw -Stanislawow -stanitsa -stanitza -stanjen -stank -stankie -stanks -Stanlee -Stanley -Stanleigh -Stanleytown -Stanleyville -Stanly -stann- -stannane -stannary -Stannaries -stannate -stannator -stannel -stanner -stannery -stanners -Stannfield -stannic -stannid -stannide -stanniferous -stannyl -stannite -stannites -stanno -stanno- -stannoso- -stannotype -stannous -stannoxyl -stannum -stannums -Stannwood -Stanovoi -Stans -stantibus -Stanton -Stantonsburg -Stantonville -Stanville -Stanway -Stanwin -Stanwinn -Stanwood -stanza -stanzaed -stanzaic -stanzaical -stanzaically -stanzas -stanza's -stanze -Stanzel -stanzo -stap -stapedectomy -stapedectomized -stapedes -stapedez -stapedial -stapediform -stapediovestibular -stapedius -Stapelia -stapelias -stapes -staph -staphyle -Staphylea -Staphyleaceae -staphyleaceous -staphylectomy -staphyledema -staphylematoma -staphylic -staphyline -staphylinic -staphylinid -Staphylinidae -staphylinideous -Staphylinoidea -Staphylinus -staphylion -staphylitis -staphylo- -staphyloangina -staphylococcal -staphylococcemia -staphylococcemic -staphylococci -staphylococcic -staphylococcocci -Staphylococcus -staphylodermatitis -staphylodialysis -staphyloedema -staphylohemia -staphylolysin -staphyloma -staphylomatic -staphylomatous -staphylomycosis -staphyloncus -staphyloplasty -staphyloplastic -staphyloptosia -staphyloptosis -staphyloraphic -staphylorrhaphy -staphylorrhaphic -staphylorrhaphies -staphyloschisis -staphylosis -staphylotome -staphylotomy -staphylotomies -staphylotoxin -staphisagria -staphs -staple -stapled -staple-fashion -staple-headed -Staplehurst -stapler -staplers -Staples -staple-shaped -Stapleton -staplewise -staplf -stapling -stapple -Star -star-apple -star-aspiring -star-bearing -star-bedecked -star-bedizened -star-bespotted -star-bestudded -star-blasting -starblind -starbloom -starboard -starboards -starbolins -star-born -starbowlines -starbright -star-bright -star-broidered -Starbuck -starch -star-chamber -starchboard -starch-digesting -starched -starchedly -starchedness -starcher -starches -starchflower -starchy -starchier -starchiest -starchily -starchiness -starching -starchless -starchly -starchlike -starchmaker -starchmaking -starchman -starchmen -starchness -starch-producing -starch-reduced -starchroot -starch-sized -starchworks -starchwort -star-climbing -star-connected -starcraft -star-crossed -star-decked -star-directed -star-distant -star-dogged -stardom -stardoms -stardust -star-dust -stardusts -stare -stare-about -stared -staree -star-eyed -star-embroidered -starer -starers -stares -starets -star-fashion -star-fed -starfish -starfishes -starflower -star-flower -star-flowered -Starford -starfruit -starful -stargaze -star-gaze -stargazed -stargazer -star-gazer -stargazers -stargazes -stargazing -star-gazing -Stargell -star-grass -stary -starik -staring -staringly -Starinsky -star-inwrought -star-ypointing -Stark -stark-awake -stark-becalmed -stark-blind -stark-calm -stark-dead -stark-drunk -stark-dumb -Starke -Starkey -starken -starker -starkers -starkest -stark-false -starky -starkle -starkly -stark-mad -stark-naked -stark-naught -starkness -stark-new -stark-raving -Starks -Starksboro -stark-spoiled -stark-staring -stark-stiff -Starkville -Starkweather -stark-wild -stark-wood -Starla -star-leaved -star-led -Starlene -starless -starlessly -starlessness -starlet -starlets -starlight -starlighted -starlights -starlike -star-like -Starlin -Starling -starlings -starlit -starlite -starlitten -starmonger -star-mouthed -starn -starnel -starny -starnie -starnose -star-nosed -starnoses -Starobin -star-of-Bethlehem -star-of-Jerusalem -Staroobriadtsi -starost -starosta -starosti -starosty -star-paved -star-peopled -star-pointed -star-proof -starquake -Starr -starred -starry -star-ribbed -starry-bright -starry-eyed -starrier -starriest -starrify -starry-flowered -starry-golden -starry-headed -starrily -starry-nebulous -starriness -starring -starringly -Starrucca -STARS -star's -star-scattered -starshake -star-shaped -starshine -starship -starshoot -starshot -star-shot -star-skilled -stars-of-Bethlehem -stars-of-Jerusalem -star-spangled -star-staring -starstone -star-stone -starstroke -starstruck -star-studded -star-surveying -star-sweet -start -star-taught -started -starter -starter-off -starters -Startex -startful -startfulness -star-thistle -starthroat -star-throated -starty -starting -starting-hole -startingly -startingno -startish -startle -startled -startler -startlers -startles -startly -startling -startlingly -startlingness -startlish -startlishness -start-naked -start-off -startor -starts -startsy -startup -start-up -startups -startup's -starvation -starvations -starve -starveacre -starved -starvedly -starved-looking -starveling -starvelings -starven -starver -starvers -starves -starvy -starving -starw -starward -star-watching -star-wearing -starwise -star-wise -starworm -starwort -starworts -stases -stash -stashed -stashes -stashie -stashing -stasidia -stasidion -stasima -stasimetric -stasimon -stasimorphy -stasiphobia -stasis -stasisidia -Stasny -stasophobia -Stassen -stassfurtite -stat -stat. -statable -statal -statampere -statant -statary -statcoulomb -State -stateable -state-aided -state-caused -state-changing -statecraft -stated -statedly -state-educated -state-enforced -state-fed -stateful -statefully -statefulness -statehood -statehoods -Statehouse -state-house -statehouses -stateless -statelessness -statelet -stately -stately-beauteous -statelich -statelier -stateliest -stately-grave -statelily -stateliness -statelinesses -stately-paced -stately-sailing -stately-storied -stately-written -state-making -state-mending -statement -statements -statement's -statemonger -state-monger -Staten -Statenville -state-of-the-art -state-owned -state-paid -state-pensioned -state-prying -state-provided -state-provisioned -statequake -stater -statera -state-ridden -stateroom -state-room -staterooms -staters -state-ruling -States -state's -statesboy -Statesboro -States-General -stateship -stateside -statesider -statesman -statesmanese -statesmanly -statesmanlike -statesmanship -statesmanships -statesmen -statesmonger -state-socialist -states-people -Statesville -stateswoman -stateswomen -state-taxed -stateway -statewide -state-wide -state-wielding -statfarad -Statham -stathenry -stathenries -stathenrys -stathmoi -stathmos -static -statical -statically -Statice -statices -staticky -staticproof -statics -stating -station -stational -stationary -stationaries -stationarily -stationariness -stationarity -stationed -stationer -stationery -stationeries -stationers -station-house -stationing -stationman -stationmaster -stations -station-to-station -Statis -statiscope -statism -statisms -statist -statistic -statistical -statistically -statistician -statisticians -statistician's -statisticize -statistics -statistology -statists -Statius -stative -statives -statize -Statler -stato- -statoblast -statocyst -statocracy -statohm -statolatry -statolith -statolithic -statometer -stator -statoreceptor -statorhab -stators -statoscope -statospore -stats -statua -statuary -statuaries -statuarism -statuarist -statue -statue-blind -statue-bordered -statuecraft -statued -statueless -statuelike -statues -statue's -statuesque -statuesquely -statuesqueness -statuette -statuettes -statue-turning -statuing -stature -statured -statures -status -statuses -status-seeking -statutable -statutableness -statutably -statutary -statute -statute-barred -statute-book -statuted -statutes -statute's -statuting -statutory -statutorily -statutoriness -statutum -statvolt -staucher -Stauder -Staudinger -Stauffer -stauk -staumer -staumeral -staumrel -staumrels -staun -staunch -staunchable -staunched -stauncher -staunches -staunchest -staunching -staunchly -staunchness -Staunton -staup -stauracin -stauraxonia -stauraxonial -staurion -stauro- -staurolatry -staurolatries -staurolite -staurolitic -staurology -Stauromedusae -stauromedusan -stauropegia -stauropegial -stauropegion -stauropgia -stauroscope -stauroscopic -stauroscopically -staurotide -stauter -Stav -stavable -Stavanger -stave -staveable -staved -staveless -staver -stavers -staverwort -staves -stavesacre -stavewise -stavewood -staving -stavrite -Stavro -Stavropol -Stavros -Staw -stawn -stawsome -staxis -STB -Stbark -stbd -STC -stchi -Stclair -STD -std. -stddmp -St-Denis -STDM -Ste -Ste. -steaakhouse -Stead -steadable -steaded -steadfast -steadfastly -steadfastness -steadfastnesses -Steady -steadied -steady-eyed -steadier -steadiers -steadies -steadiest -steady-footed -steady-going -steady-handed -steady-handedness -steady-headed -steady-hearted -steadying -steadyingly -steadyish -steadily -steady-looking -steadiment -steady-minded -steady-nerved -steadiness -steadinesses -steading -steadings -steady-stream -steadite -steadman -steads -steak -steakhouse -steakhouses -steaks -steak's -steal -stealability -stealable -stealage -stealages -stealed -stealer -stealers -stealy -stealing -stealingly -stealings -steals -stealth -stealthful -stealthfully -stealthy -stealthier -stealthiest -stealthily -stealthiness -stealthless -stealthlike -stealths -stealthwise -steam -steamboat -steamboating -steamboatman -steamboatmen -steamboats -steamboat's -steam-boiler -Steamburg -steamcar -steam-chest -steam-clean -steam-cleaned -steam-cooked -steam-cut -steam-distill -steam-dredge -steam-dried -steam-driven -steam-eating -steamed -steam-engine -steamer -steamer-borne -steamered -steamerful -steamering -steamerless -steamerload -steamers -steam-filled -steamfitter -steamfitting -steam-going -steam-heat -steam-heated -steamy -steamie -steamier -steamiest -steamily -steaminess -steaming -steam-lance -steam-lanced -steam-lancing -steam-laundered -steamless -steamlike -steampipe -steam-pocket -steam-processed -steamproof -steam-propelled -steam-ridden -steamroll -steam-roll -steamroller -steam-roller -steamrollered -steamrollering -steamrollers -steams -steamship -steamships -steamship's -steam-shovel -steamtight -steamtightness -steam-type -steam-treated -steam-turbine -steam-wrought -stean -steaning -steapsin -steapsins -stearate -stearates -stearic -steariform -stearyl -stearin -stearine -stearines -stearins -Stearn -Stearne -Stearns -stearo- -stearolactone -stearone -stearoptene -stearrhea -stearrhoea -steat- -steatin -steatite -steatites -steatitic -steato- -steatocele -steatogenous -steatolysis -steatolytic -steatoma -steatomas -steatomata -steatomatous -steatopathic -steatopyga -steatopygy -steatopygia -steatopygic -steatopygous -Steatornis -Steatornithes -Steatornithidae -steatorrhea -steatorrhoea -steatoses -steatosis -stebbins -stech -stechados -Stecher -Stechhelm -stechling -Steck -steckling -steddle -Steddman -stedfast -stedfastly -stedfastness -stedhorses -Stedman -Stedmann -Stedt -steeadying -steed -steedless -steedlike -Steedman -steeds -steek -steeked -steeking -steekkan -steekkannen -steeks -Steel -steel-black -steel-blue -Steelboy -steel-bound -steelbow -steel-bow -steel-bright -steel-cage -steel-capped -steel-cased -steel-clad -steel-clenched -steel-cold -steel-colored -steel-covered -steel-cut -steel-digesting -Steele -steeled -steel-edged -steelen -steeler -steelers -Steeleville -steel-faced -steel-framed -steel-gray -steel-grained -steel-graven -steel-green -steel-hard -steel-hardened -steelhead -steel-head -steel-headed -steelheads -steelhearted -steel-hilted -steely -steelyard -steelyards -steelie -steelier -steelies -steeliest -steelify -steelification -steelified -steelifying -steeliness -steeling -steelless -steellike -steel-lined -steelmake -steelmaker -steelmaking -steelman -steelmen -steel-nerved -steel-pen -steel-plated -steel-pointed -steelproof -steel-rimmed -steel-riveted -steels -steel-shafted -steel-sharp -steel-shod -steel-strong -steel-studded -steel-tempered -steel-tipped -steel-tired -steel-topped -steel-trap -Steelville -steelware -steelwork -steelworker -steelworking -steelworks -steem -Steen -steenboc -steenbock -steenbok -steenboks -steenbras -steenbrass -Steenie -steening -steenkirk -Steens -steenstrupine -steenth -Steep -steep-ascending -steep-backed -steep-bending -steep-descending -steepdown -steep-down -steeped -steepen -steepened -steepening -steepens -steeper -steepers -steepest -steep-faced -steep-gabled -steepgrass -steep-hanging -steepy -steep-yawning -steepiness -steeping -steepish -steeple -steeplebush -steeplechase -steeplechaser -steeplechases -steeplechasing -steeple-crown -steeple-crowned -steepled -steeple-head -steeple-high -steeple-house -steeplejack -steeple-jacking -steeplejacks -steepleless -steeplelike -steeple-loving -steeple-roofed -steeples -steeple's -steeple-shadowed -steeple-shaped -steeple-studded -steepletop -steeple-topped -steeply -steepness -steepnesses -steep-pitched -steep-pointed -steep-rising -steep-roofed -steeps -steep-scarped -steep-sided -steep-streeted -steep-to -steep-up -steep-walled -steepweed -steepwort -steer -steerability -steerable -steerage -steerages -steerageway -Steere -steered -steerer -steerers -steery -steering -steeringly -steerless -steerling -steerman -steermanship -steers -steersman -steersmate -steersmen -steerswoman -steeve -steeved -steevely -steever -steeves -steeving -steevings -Stefa -Stefan -Stefana -Stefanac -Stefania -Stefanie -Stefano -Stefansson -Steff -Steffan -Steffane -Steffen -Steffens -Steffenville -Steffi -Steffy -Steffie -Steffin -steg -steganogram -steganography -steganographical -steganographist -Steganophthalmata -steganophthalmate -steganophthalmatous -Steganophthalmia -steganopod -steganopodan -Steganopodes -steganopodous -Steger -stegh -Stegman -stegnosis -stegnotic -stego- -stegocarpous -Stegocephalia -stegocephalian -stegocephalous -Stegodon -stegodons -stegodont -stegodontine -Stegomyia -Stegomus -stegosaur -stegosauri -Stegosauria -stegosaurian -stegosauroid -stegosaurs -Stegosaurus -Stehekin -stey -Steichen -steid -Steier -Steiermark -steigh -Stein -Steinamanger -Steinauer -Steinbeck -Steinberg -Steinberger -steinbock -steinbok -steinboks -steinbuck -Steiner -Steinerian -steinful -Steinhatchee -Steinheil -steyning -Steinitz -Steinke -steinkirk -Steinman -Steinmetz -steins -Steinway -Steinwein -Steyr -Steironema -stekan -stela -stelae -stelai -stelar -Stelazine -stele -stelene -steles -stelic -stell -Stella -stellar -stellarator -stellary -Stellaria -stellas -stellate -stellate-crystal -stellated -stellately -stellate-pubescent -stellation -stellature -Stelle -stelled -stellenbosch -stellerid -stelleridean -stellerine -stelliferous -stellify -stellification -stellified -stellifies -stellifying -stelliform -stelling -stellio -stellion -stellionate -stelliscript -Stellite -stellular -stellularly -stellulate -Stelmach -stelography -Stelu -stem -stema -stem-bearing -stembok -stem-bud -stem-clasping -stemform -stemhead -St-Emilion -stemless -stemlet -stemlike -stemma -stemmas -stemmata -stemmatiform -stemmatous -stemmed -stemmer -stemmery -stemmeries -stemmers -stemmy -stemmier -stemmiest -stemming -Stemona -Stemonaceae -stemonaceous -stempel -Stempien -stemple -stempost -Stempson -stems -stem's -stem-sick -stemson -stemsons -stemwards -stemware -stemwares -stem-wind -stem-winder -stem-winding -Sten -sten- -stenar -stench -stenchel -stenches -stenchful -stenchy -stenchier -stenchiest -stenching -stenchion -stench's -stencil -stenciled -stenciler -stenciling -stencilize -stencilled -stenciller -stencilling -stencilmaker -stencilmaking -stencils -stencil's -stend -Stendal -Stendhal -Stendhalian -steng -stengah -stengahs -Stenger -stenia -stenion -steno -steno- -stenobathic -stenobenthic -stenobragmatic -stenobregma -stenocardia -stenocardiac -Stenocarpus -stenocephaly -stenocephalia -stenocephalic -stenocephalous -stenochoria -stenochoric -stenochrome -stenochromy -stenocoriasis -stenocranial -stenocrotaphia -Stenofiber -stenog -stenogastry -stenogastric -Stenoglossa -stenograph -stenographed -stenographer -stenographers -stenographer's -stenography -stenographic -stenographical -stenographically -stenographing -stenographist -stenohaline -stenoky -stenometer -stenopaeic -stenopaic -stenopeic -Stenopelmatidae -stenopetalous -stenophagous -stenophile -stenophyllous -Stenophragma -stenorhyncous -stenos -stenosed -stenosepalous -stenoses -stenosis -stenosphere -stenostomatous -stenostomia -Stenotaphrum -stenotelegraphy -stenotherm -stenothermal -stenothermy -stenothermophilic -stenothorax -stenotic -Stenotype -stenotypy -stenotypic -stenotypist -stenotopic -stenotropic -Stent -stenter -stenterer -stenting -stentmaster -stenton -Stentor -stentoraphonic -stentorian -stentorianly -stentorine -stentorious -stentoriously -stentoriousness -stentoronic -stentorophonic -stentorphone -stentors -stentrel -step -step- -step-and-repeat -stepaunt -step-back -stepbairn -step-by-step -stepbrother -stepbrotherhood -stepbrothers -stepchild -stepchildren -step-cline -step-cone -step-cut -stepdame -stepdames -stepdance -stepdancer -stepdancing -stepdaughter -stepdaughters -stepdown -step-down -stepdowns -stepfather -stepfatherhood -stepfatherly -stepfathers -stepgrandchild -stepgrandfather -stepgrandmother -stepgrandson -Stepha -Stephan -Stephana -stephane -Stephani -Stephany -Stephania -stephanial -Stephanian -stephanic -Stephanie -stephanion -stephanite -Stephannie -Stephanoceros -Stephanokontae -stephanome -stephanos -Stephanotis -Stephanurus -Stephanus -stephe -stephead -Stephen -Stephenie -Stephens -Stephensburg -Stephenson -Stephentown -Stephenville -Stephi -Stephie -Stephine -step-in -step-ins -stepladder -step-ladder -stepladders -stepless -steplike -step-log -stepminnie -stepmother -stepmotherhood -stepmotherless -stepmotherly -stepmotherliness -stepmothers -stepmother's -stepney -stepnephew -stepniece -step-off -step-on -stepony -stepparent -step-parent -stepparents -Steppe -stepped -stepped-up -steppeland -Steppenwolf -stepper -steppers -Steppes -stepping -stepping-off -stepping-out -steppingstone -stepping-stone -steppingstones -stepping-stones -steprelation -steprelationship -steps -step's -stepsire -stepsister -stepsisters -stepson -stepsons -stepstone -stepstool -stept -Stepteria -Steptoe -stepuncle -stepup -step-up -stepups -stepway -stepwise -ster -ster. -steracle -sterad -steradian -stercobilin -stercolin -stercophagic -stercophagous -stercoraceous -stercoraemia -stercoral -Stercoranism -Stercoranist -stercorary -stercoraries -Stercorariidae -Stercorariinae -stercorarious -Stercorarius -stercorate -stercoration -stercorean -stercoremia -stercoreous -Stercorianism -stercoricolous -stercorin -Stercorist -stercorite -stercorol -stercorous -stercovorous -Sterculia -Sterculiaceae -sterculiaceous -sterculiad -stere -stere- -stereagnosis -stereid -Sterelmintha -sterelminthic -sterelminthous -sterelminthus -stereo -stereo- -stereobate -stereobatic -stereoblastula -stereocamera -stereocampimeter -stereochemic -stereochemical -stereochemically -stereochemistry -stereochromatic -stereochromatically -stereochrome -stereochromy -stereochromic -stereochromically -stereocomparagraph -stereocomparator -stereoed -stereoelectric -stereofluoroscopy -stereofluoroscopic -stereogastrula -stereognosis -stereognostic -stereogoniometer -stereogram -stereograph -stereographer -stereography -stereographic -stereographical -stereographically -stereoing -stereoisomer -stereoisomeric -stereoisomerical -stereoisomeride -stereoisomerism -stereology -stereological -stereologically -stereom -stereomatrix -stereome -stereomer -stereomeric -stereomerical -stereomerism -stereometer -stereometry -stereometric -stereometrical -stereometrically -stereomicrometer -stereomicroscope -stereomicroscopy -stereomicroscopic -stereomicroscopically -stereomonoscope -stereoneural -stereopair -stereophantascope -stereophysics -stereophone -stereophony -stereophonic -stereophonically -stereophotogrammetry -stereophotograph -stereophotography -stereophotographic -stereophotomicrograph -stereophotomicrography -stereopicture -stereoplanigraph -stereoplanula -stereoplasm -stereoplasma -stereoplasmic -stereopsis -stereopter -stereoptican -stereoptician -stereopticon -stereoradiograph -stereoradiography -stereoregular -stereoregularity -Stereornithes -stereornithic -stereoroentgenogram -stereoroentgenography -stereos -stereo's -stereoscope -stereoscopes -stereoscopy -stereoscopic -stereoscopical -stereoscopically -stereoscopies -stereoscopism -stereoscopist -stereospecific -stereospecifically -stereospecificity -Stereospondyli -stereospondylous -stereostatic -stereostatics -stereotactic -stereotactically -stereotape -stereotapes -stereotaxy -stereotaxic -stereotaxically -stereotaxis -stereotelemeter -stereotelescope -stereotypable -stereotype -stereotyped -stereotyper -stereotypery -stereotypers -stereotypes -stereotypy -stereotypic -stereotypical -stereotypically -stereotypies -stereotyping -stereotypist -stereotypographer -stereotypography -stereotomy -stereotomic -stereotomical -stereotomist -stereotropic -stereotropism -stereovision -steres -Stereum -sterhydraulic -steri -steric -sterical -sterically -sterics -sterid -steride -sterigma -sterigmas -sterigmata -sterigmatic -sterilant -sterile -sterilely -sterileness -sterilisability -sterilisable -sterilise -sterilised -steriliser -sterilising -sterility -sterilities -sterilizability -sterilizable -sterilization -sterilizations -sterilization's -sterilize -sterilized -sterilizer -sterilizers -sterilizes -sterilizing -sterin -sterk -sterlet -sterlets -Sterling -sterlingly -sterlingness -sterlings -Sterlington -Sterlitamak -Stern -Sterna -sternad -sternage -sternal -sternalis -stern-bearer -Sternberg -sternbergia -sternbergite -stern-board -stern-born -stern-browed -sterncastle -stern-chase -stern-chaser -Sterne -sterneber -sternebra -sternebrae -sternebral -sterned -stern-eyed -Sterner -sternest -stern-faced -stern-fast -stern-featured -sternforemost -sternful -sternfully -stern-gated -Sternick -Sterninae -stern-issuing -sternite -sternites -sternitic -sternknee -sternly -Sternlight -stern-lipped -stern-looking -sternman -sternmen -stern-minded -sternmost -stern-mouthed -sternna -sternness -sternnesses -Sterno -sterno- -sternoclavicular -sternocleidomastoid -sternocleidomastoideus -sternoclidomastoid -sternocoracoid -sternocostal -sternofacial -sternofacialis -sternoglossal -sternohyoid -sternohyoidean -sternohumeral -sternomancy -sternomastoid -sternomaxillary -sternonuchal -sternopericardiac -sternopericardial -sternoscapular -sternothere -Sternotherus -sternothyroid -sternotracheal -sternotribe -sternovertebral -sternoxiphoid -sternpost -stern-post -sterns -stern-set -stern-sheet -sternson -sternsons -stern-sounding -stern-spoken -sternum -sternums -sternutaries -sternutate -sternutation -sternutative -sternutator -sternutatory -stern-visaged -sternway -sternways -sternward -sternwards -sternwheel -stern-wheel -sternwheeler -stern-wheeler -sternworks -stero -steroid -steroidal -steroidogenesis -steroidogenic -steroids -sterol -sterols -Sterope -Steropes -Sterrett -sterrinck -sterro-metal -stert -stertor -stertorious -stertoriously -stertoriousness -stertorous -stertorously -stertorousness -stertors -sterve -Stesha -Stesichorean -stet -stetch -stethal -stetharteritis -stethy -stetho- -stethogoniometer -stethograph -stethographic -stethokyrtograph -stethometer -stethometry -stethometric -stethoparalysis -stethophone -stethophonometer -stethoscope -stethoscoped -stethoscopes -stethoscopy -stethoscopic -stethoscopical -stethoscopically -stethoscopies -stethoscopist -stethospasm -Stets -Stetson -stetsons -Stetsonville -stetted -Stettin -stetting -Stettinius -Steuben -Steubenville -stevan -Stevana -Steve -stevedorage -stevedore -stevedored -stevedores -stevedoring -stevel -Steven -Stevena -Stevenage -Stevengraph -Stevens -Stevensburg -Stevenson -Stevensonian -Stevensoniana -Stevensville -Stevy -Stevia -Stevie -Stevin -Stevinson -Stevinus -Stew -stewable -Steward -stewarded -stewardess -stewardesses -stewarding -stewardly -stewardry -stewards -steward's -stewardship -stewardships -Stewardson -Stewart -stewarty -Stewartia -stewartry -Stewartstown -Stewartsville -Stewartville -stewbum -stewbums -stewed -stewhouse -stewy -stewing -stewish -stewpan -stewpans -stewpond -stewpot -stews -stg -stg. -stge -stge. -Sth -Sthelena -sthene -Stheneboea -Sthenelus -sthenia -Sthenias -sthenic -Sthenius -Stheno -sthenochire -STI -sty -stiacciato -styan -styany -stib -stib- -stibble -stibbler -stibblerig -stibethyl -stibial -stibialism -stibiate -stibiated -stibic -stibiconite -stibine -stibines -stibio- -stibious -stibium -stibiums -stibnite -stibnites -stibonium -stibophen -Stiborius -styca -sticcado -styceric -stycerin -stycerinol -Stich -stichado -sticharia -sticharion -stichcharia -stichel -sticheron -stichic -stichically -stichid -stichidia -stichidium -stichocrome -stichoi -stichomancy -stichometry -stichometric -stichometrical -stichometrically -stichomythy -stichomythia -stychomythia -stichomythic -stichos -stichous -stichs -Stichter -stichwort -stick -stickability -stickable -stickadore -stickadove -stickage -stick-at-it -stick-at-itive -stick-at-it-ive -stick-at-itiveness -stick-at-nothing -stick-back -stickball -stickboat -stick-button -stick-candy -stick-dice -stick-ear -sticked -stickel -sticken -sticker -stickery -sticker-in -sticker-on -stickers -sticker-up -sticket -stickfast -stickful -stickfuls -stickhandler -sticky -stickybeak -sticky-eyed -stickier -stickiest -sticky-fingered -stickily -stickiness -sticking -stick-in-the-mud -stickit -stickjaw -stick-jaw -sticklac -stick-lac -stickle -stickleaf -stickleback -stickled -stick-leg -stick-legged -stickler -sticklers -stickles -stickless -stickly -sticklike -stickling -stickman -stickmen -Stickney -stickout -stick-out -stickouts -stickpin -stickpins -stick-ride -sticks -stickseed -sticksmanship -sticktail -sticktight -stick-to-itive -stick-to-itively -stick-to-itiveness -stick-to-it-iveness -stickum -stickums -stickup -stick-up -stickups -stickwater -stickweed -stickwork -Sticta -Stictaceae -Stictidaceae -stictiform -stiction -Stictis -stid -stiddy -Stidham -stye -stied -styed -Stiegel -Stiegler -Stieglitz -Stier -sties -styes -stife -stiff -stiff-arm -stiff-armed -stiff-backed -stiff-bearded -stiff-bent -stiff-billed -stiff-bodied -stiff-bolting -stiff-boned -stiff-bosomed -stiff-branched -stiff-built -stiff-clay -stiff-collared -stiff-docked -stiff-dressed -stiff-eared -stiffed -stiffen -stiffened -stiffener -stiffeners -stiffening -stiffens -stiffer -stiffest -stiff-grown -stiff-haired -stiffhearted -stiff-horned -stiffing -stiff-ironed -stiffish -stiff-jointed -stiff-jointedness -stiff-kneed -stiff-land -stiff-leathered -stiff-leaved -stiffleg -stiff-legged -stiffler -stiffly -stifflike -stiff-limbed -stiff-lipped -stiff-minded -stiff-mud -stiffneck -stiff-neck -stiff-necked -stiffneckedly -stiff-neckedly -stiffneckedness -stiff-neckedness -stiffness -stiffnesses -stiff-plate -stiff-pointed -stiff-rimmed -stiffrump -stiff-rumped -stiff-rusting -stiffs -stiff-shanked -stiff-skirted -stiff-starched -stiff-stretched -stiff-swathed -stifftail -stiff-tailed -stiff-uddered -stiff-veined -stiff-winged -stiff-witted -stifle -stifled -stifledly -stifle-out -stifler -stiflers -stifles -stifling -stiflingly -styful -styfziekte -Stig -Stygial -Stygian -stygiophobia -Stigler -stigma -stigmai -stigmal -Stigmaria -stigmariae -stigmarian -stigmarioid -stigmas -stigmasterol -stigmat -stigmata -stigmatal -stigmatic -stigmatical -stigmatically -stigmaticalness -stigmatiferous -stigmatiform -stigmatypy -stigmatise -stigmatiser -stigmatism -stigmatist -stigmatization -stigmatize -stigmatized -stigmatizer -stigmatizes -stigmatizing -stigmatoid -stigmatose -stigme -stigmeology -stigmes -stigmonose -stigonomancy -stying -Stijl -Stikine -styl- -Stila -stylar -Stylaster -Stylasteridae -stylate -stilb -Stilbaceae -Stilbella -stilbene -stilbenes -stilbestrol -stilbite -stilbites -stilboestrol -Stilbum -styldia -stile -style -stylebook -stylebooks -style-conscious -style-consciousness -styled -styledom -styleless -stylelessness -stylelike -stileman -stilemen -styler -stylers -Stiles -stile's -Styles -Stilesville -stilet -stylet -stylets -stilette -stiletted -stiletto -stilettoed -stilettoes -stilettoing -stilettolike -stiletto-proof -stilettos -stiletto-shaped -stylewort -styli -stilyaga -stilyagi -Stilicho -Stylidiaceae -stylidiaceous -Stylidium -styliferous -styliform -styline -styling -stylings -stylion -stylisation -stylise -stylised -styliser -stylisers -stylises -stylish -stylishly -stylishness -stylishnesses -stylising -stylist -stylistic -stylistical -stylistically -stylistics -stylists -stylite -stylites -stylitic -stylitism -stylization -stylize -stylized -stylizer -stylizers -stylizes -stylizing -Still -Stilla -still-admired -stillage -Stillas -stillatitious -stillatory -stillbirth -still-birth -stillbirths -stillborn -still-born -still-burn -still-closed -still-continued -still-continuing -still-diminishing -stilled -stiller -stillery -stillest -still-existing -still-fish -still-fisher -still-fishing -still-florid -still-flowing -still-fresh -still-gazing -stillhouse -still-hunt -still-hunter -still-hunting -stilly -stylli -stillicide -stillicidium -stillier -stilliest -stilliform -still-improving -still-increasing -stilling -Stillingia -stillion -still-young -stillish -still-life -still-living -Stillman -Stillmann -stillmen -Stillmore -stillness -stillnesses -still-new -still-pagan -still-pining -still-recurring -still-refuted -still-renewed -still-repaired -still-rocking -stillroom -still-room -stills -still-sick -still-slaughtered -stillstand -still-stand -still-unmarried -still-vexed -still-watching -Stillwater -Stillwell -STILO -stylo -stylo- -styloauricularis -stylobata -stylobate -Stylochus -styloglossal -styloglossus -stylogonidium -stylograph -stylography -stylographic -stylographical -stylographically -stylohyal -stylohyoid -stylohyoidean -stylohyoideus -styloid -stylolite -stylolitic -stylomandibular -stylomastoid -stylomaxillary -stylometer -stylomyloid -Stylommatophora -stylommatophorous -Stylonichia -Stylonychia -Stylonurus -stylopharyngeal -stylopharyngeus -Stilophora -Stilophoraceae -stylopid -Stylopidae -stylopization -stylopize -stylopized -stylopod -stylopodia -stylopodium -Stylops -Stylosanthes -stylospore -stylosporous -stylostegium -stylostemon -stylostixis -stylotypite -stylous -stilpnomelane -stilpnosiderite -stilt -stiltbird -stilted -stiltedly -stiltedness -stilter -stilty -stiltier -stiltiest -stiltify -stiltified -stiltifying -stiltiness -stilting -stiltish -stilt-legged -stiltlike -Stilton -stilts -Stilu -stylus -styluses -Stilwell -stim -stime -stimes -stimy -stymy -stymie -stimied -stymied -stymieing -stimies -stymies -stimying -stymying -stimpart -stimpert -Stymphalian -Stymphalid -Stymphalides -Stymphalus -Stimson -stimulability -stimulable -stimulance -stimulancy -stimulant -stimulants -stimulant's -stimulate -stimulated -stimulater -stimulates -stimulating -stimulatingly -stimulation -stimulations -stimulative -stimulatives -stimulator -stimulatory -stimulatress -stimulatrix -stimuli -stimulogenous -stimulose -stimulus -stimulus-response -Stine -Stinesville -sting -stingaree -stingareeing -stingbull -stinge -stinger -stingers -stingfish -stingfishes -stingy -stingier -stingiest -stingily -stinginess -stinginesses -stinging -stingingly -stingingness -stingless -stingo -stingos -stingproof -stingray -stingrays -stings -stingtail -stink -stinkard -stinkardly -stinkards -stinkaroo -stinkball -stinkberry -stinkberries -stinkbird -stinkbug -stinkbugs -stinkbush -stinkdamp -stinker -stinkeroo -stinkeroos -stinkers -stinkhorn -stink-horn -Stinky -stinkibus -stinkier -stinkiest -stinkyfoot -stinking -stinkingly -stinkingness -stinko -stinkpot -stink-pot -stinkpots -stinks -stinkstone -stinkweed -stinkwood -stinkwort -Stinnes -Stinnett -Stinson -stint -stinted -stintedly -stintedness -stinter -stinters -stinty -stinting -stintingly -stintless -stints -stion -stionic -stioning -Stipa -stipate -stipe -stiped -stipel -stipellate -stipels -stipend -stipendary -stipendia -stipendial -stipendiary -stipendiarian -stipendiaries -stipendiate -stipendium -stipendiums -stipendless -stipends -stipend's -stipes -Styphelia -styphnate -styphnic -stipiform -stipitate -stipites -stipitiform -stipiture -Stipiturus -stipo -stipos -stippen -stipple -stippled -stippledness -stippler -stipplers -stipples -stipply -stippling -stypsis -stypsises -styptic -styptical -stypticalness -stypticin -stypticity -stypticness -styptics -stipula -stipulable -stipulaceous -stipulae -stipulant -stipular -stipulary -stipulate -stipulated -stipulates -stipulating -stipulatio -stipulation -stipulations -stipulator -stipulatory -stipulators -stipule -stipuled -stipules -stipuliferous -stipuliform -Stir -Styr -stirabout -Styracaceae -styracaceous -styracin -Styrax -styraxes -stire -styrene -styrenes -stir-fry -Stiria -Styria -Styrian -styryl -styrylic -Stiritis -stirk -stirks -stirless -stirlessly -stirlessness -Stirling -Stirlingshire -Styrofoam -styrogallol -styrol -styrolene -styrone -stirp -stirpes -stirpicultural -stirpiculture -stirpiculturist -stirps -stirra -stirrable -stirrage -Stirrat -stirred -stirrer -stirrers -stirrer's -stirring -stirringly -stirrings -stirring-up -stirrup -stirrupless -stirruplike -stirrups -stirrup-vase -stirrupwise -stirs -stir-up -STIS -stitch -stitchbird -stitchdown -stitched -stitcher -stitchery -stitchers -stitches -stitching -stitchlike -stitchwhile -stitchwork -stitchwort -stite -Stites -stith -stithe -stythe -stithy -stithied -stithies -stithying -stithly -Stittville -stituted -Stitzer -stive -stiver -stivers -stivy -styward -Styx -Styxian -Stizolobium -stk -STL -stlg -STM -STN -stoa -stoach -stoae -stoai -stoas -Stoat -stoater -stoating -stoats -stob -stobball -stobbed -stobbing -stobs -stocah -stoccado -stoccados -stoccata -stoccatas -stochastic -stochastical -stochastically -Stochmal -Stock -stockade -stockaded -stockades -stockade's -stockading -stockado -stockage -stockannet -stockateer -stock-blind -stockbow -stockbreeder -stockbreeding -Stockbridge -stockbroker -stock-broker -stockbrokerage -stockbrokers -stockbroking -stockcar -stock-car -stockcars -Stockdale -stock-dove -stock-dumb -stocked -stocker -stockers -Stockertown -Stockett -stockfather -stockfish -stock-fish -stockfishes -stock-gillyflower -Stockhausen -stockholder -stockholders -stockholder's -stockholding -stockholdings -Stockholm -stockhorn -stockhouse -stocky -stockyard -stockyards -stockier -stockiest -stockily -stockiness -stockinet -stockinets -stockinette -stocking -stockinged -stockinger -stocking-foot -stocking-frame -stockinging -stockingless -stockings -stock-in-trade -stockish -stockishly -stockishness -stockist -stockists -stock-job -stockjobber -stock-jobber -stockjobbery -stockjobbing -stock-jobbing -stockjudging -stockkeeper -stockkeeping -Stockland -stockless -stocklike -stockmaker -stockmaking -stockman -stockmen -Stockmon -stockowner -stockpile -stockpiled -stockpiler -stockpiles -stockpiling -Stockport -stockpot -stockpots -stockproof -stockrider -stockriding -stockroom -stockrooms -stock-route -stocks -stock-still -stockstone -stocktaker -stocktaking -stock-taking -Stockton -Stockton-on-Tees -Stockville -Stockwell -Stockwood -stockwork -stock-work -stockwright -stod -Stoddard -Stoddart -Stodder -stodge -stodged -stodger -stodgery -stodges -stodgy -stodgier -stodgiest -stodgily -stodginess -stodging -stodtone -Stoeber -stoech- -stoechas -stoechiology -stoechiometry -stoechiometrically -Stoecker -stoep -stof -stoff -Stoffel -Stofler -stog -stoga -stogey -stogeies -stogeys -stogy -stogie -stogies -STOH -Stoy -Stoic -stoical -stoically -stoicalness -stoicharion -stoicheiology -stoicheiometry -stoicheiometrically -stoichiology -stoichiological -stoichiometry -stoichiometric -stoichiometrical -stoichiometrically -Stoicism -stoicisms -stoics -Stoystown -stoit -stoiter -Stokavci -Stokavian -Stokavski -stoke -stoked -stokehold -stokehole -stoke-hole -Stokely -Stoke-on-Trent -stoker -stokerless -stokers -Stokes -Stokesdale -Stokesia -stokesias -stokesite -Stoke-upon-Trent -stoking -Stokowski -stokroos -stokvis -STOL -stola -stolae -stolas -stold -stole -stoled -stolelike -stolen -stolenly -stolenness -stolenwise -stoles -stole's -stole-shaped -stolewise -stolid -stolider -stolidest -stolidity -stolidities -stolidly -stolidness -stolist -stolkjaerre -Stoll -stollen -stollens -Stoller -Stollings -stolon -stolonate -stolonic -stoloniferous -stoloniferously -stolonization -stolonlike -stolons -stolport -Stolzer -stolzite -stom- -stoma -stomacace -stomach -stomachable -stomachache -stomach-ache -stomachaches -stomachachy -stomach-achy -stomachal -stomached -stomacher -stomachers -stomaches -stomach-filling -stomach-formed -stomachful -stomachfully -stomachfulness -stomach-hating -stomach-healing -stomachy -stomachic -stomachical -stomachically -stomachicness -stomaching -stomachless -stomachlessness -stomachous -stomach-qualmed -stomachs -stomach-shaped -stomach-sick -stomach-soothing -stomach-tight -stomach-turning -stomach-twitched -stomach-weary -stomach-whetted -stomach-worn -stomack -stomal -stomapod -Stomapoda -stomapodiform -stomapodous -stomas -stomat- -stomata -stomatal -stomatalgia -stomate -stomates -stomatic -stomatiferous -stomatitic -stomatitis -stomatitus -stomato- -stomatocace -Stomatoda -stomatodaeal -stomatodaeum -stomatode -stomatodeum -stomatodynia -stomatogastric -stomatograph -stomatography -stomatolalia -stomatology -stomatologic -stomatological -stomatologist -stomatomalacia -stomatomenia -stomatomy -stomatomycosis -stomatonecrosis -stomatopathy -Stomatophora -stomatophorous -stomatoplasty -stomatoplastic -stomatopod -Stomatopoda -stomatopodous -stomatorrhagia -stomatoscope -stomatoscopy -stomatose -stomatosepsis -stomatotyphus -stomatotomy -stomatotomies -stomatous -stome -stomenorrhagia -stomy -stomion -stomium -stomodaea -stomodaeal -stomodaeudaea -stomodaeum -stomodaeums -stomode -stomodea -stomodeal -stomodeum -stomodeumdea -stomodeums -Stomoisia -stomous -stomoxys -stomp -stomped -stomper -stompers -stomping -stompingly -stomps -stonable -stonage -stond -Stone -stoneable -stone-arched -stone-asleep -stone-axe -stonebass -stonebird -stonebiter -stone-bladed -stone-blind -stoneblindness -stone-blindness -stoneboat -Stoneboro -stonebow -stone-bow -stonebrash -stonebreak -stone-broke -stonebrood -stone-brown -stone-bruised -stone-buff -stone-built -stonecast -stonecat -stonechat -stone-cleaving -stone-coated -stone-cold -stone-colored -stone-covered -stonecraft -stonecrop -stonecutter -stone-cutter -stonecutting -stone-cutting -stoned -stonedamp -stone-darting -stone-dead -stone-deaf -stone-deafness -stoned-horse -stone-dumb -stone-dust -stone-eared -stone-eating -stone-edged -stone-eyed -stone-faced -stonefish -stonefishes -stonefly -stoneflies -stone-floored -Stonefort -stone-fruit -Stonega -stonegale -stonegall -stoneground -stone-ground -Stoneham -stonehand -stone-hand -stone-hard -stonehatch -stonehead -stone-headed -stonehearted -Stonehenge -stone-horse -stoney -stoneyard -stoneite -stonelayer -stonelaying -stoneless -stonelessness -stonelike -stone-lily -stone-lined -stone-living -Stoneman -stonemason -stonemasonry -stonemasons -stonemen -stone-milled -stonemint -stone-moving -stonen -stone-parsley -stone-paved -stonepecker -stone-pillared -stone-pine -stoneput -stoner -stone-ribbed -stoneroller -stone-rolling -stone-roofed -stoneroot -stoner-out -stoners -Stones -stoneseed -stonesfield -stoneshot -stone-silent -stonesmatch -stonesmich -stone-smickle -stonesmitch -stonesmith -stone-still -stone-throwing -stone-using -stone-vaulted -Stoneville -stonewall -stone-wall -stonewalled -stone-walled -stonewaller -stonewally -stonewalling -stone-walling -stonewalls -stoneware -stoneweed -stonewise -stonewood -stonework -stoneworker -stoneworks -stonewort -stong -stony -stony-blind -Stonybottom -stony-broke -Stonybrook -stonied -stony-eyed -stonier -stoniest -stony-faced -stonify -stonifiable -Stonyford -stonyhearted -stony-hearted -stonyheartedly -stony-heartedly -stonyheartedness -stony-heartedness -stony-jointed -stonily -stoniness -stoning -Stonington -stony-pitiless -stonish -stonished -stonishes -stonishing -stonishment -stony-toed -stony-winged -stonk -stonker -stonkered -Stonwin -stood -stooded -stooden -stoof -stooge -stooged -stooges -stooging -stook -stooked -stooker -stookers -stookie -stooking -stooks -stool -stoolball -stool-ball -stooled -stoolie -stoolies -stooling -stoollike -stools -stoon -stoond -stoop -stoopball -stooped -stooper -stoopers -stoopgallant -stoop-gallant -stooping -stoopingly -Stoops -stoop-shouldered -stoorey -stoory -stoot -stooter -stooth -stoothing -stop -stopa -stopback -stopband -stopbank -stopblock -stopboard -stopcock -stopcocks -stopdice -stope -stoped -stopen -stoper -stopers -Stopes -stopgap -stop-gap -stopgaps -stop-go -stophound -stoping -stopless -stoplessness -stoplight -stoplights -stop-loss -stop-off -stop-open -stopover -stopovers -stoppability -stoppable -stoppableness -stoppably -stoppage -stoppages -Stoppard -stopped -stoppel -stopper -stoppered -stoppering -stopperless -stoppers -stopper's -stoppeur -stopping -stoppit -stopple -stoppled -stopples -stoppling -stops -stopship -stopt -stopway -stopwatch -stop-watch -stopwatches -stopwater -stopwork -stor -storability -storable -storables -storage -storages -storage's -storay -storax -storaxes -Storden -store -store-bought -store-boughten -stored -storeen -storefront -storefronts -storehouse -storehouseman -storehouses -storehouse's -Storey -storeyed -storeys -storekeep -storekeeper -storekeepers -storekeeping -storeman -storemaster -storemen -Storer -storeroom -store-room -storerooms -stores -storeship -store-ship -storesman -storewide -Storfer -storge -Story -storial -storiate -storiated -storiation -storyboard -storybook -storybooks -storied -storier -stories -storiette -storify -storified -storifying -storying -storyless -storyline -storylines -storymaker -storymonger -storing -storiology -storiological -storiologist -storyteller -story-teller -storytellers -storytelling -storytellings -Storyville -storywise -storywork -storywriter -story-writing -story-wrought -stork -stork-billed -storken -stork-fashion -storkish -storklike -storkling -storks -stork's -storksbill -stork's-bill -storkwise -Storm -stormable -storm-armed -storm-beat -storm-beaten -stormbelt -Stormberg -stormbird -storm-boding -stormbound -storm-breathing -stormcock -storm-cock -storm-drenched -stormed -storm-encompassed -stormer -storm-felled -stormful -stormfully -stormfulness -storm-god -Stormi -Stormy -Stormie -stormier -stormiest -stormily -storminess -storming -stormingly -stormish -storm-laden -stormless -stormlessly -stormlessness -stormlike -storm-lit -storm-portending -storm-presaging -stormproof -storm-rent -storms -storm-stayed -storm-swept -stormtide -stormtight -storm-tight -storm-tossed -storm-trooper -Stormville -stormward -storm-washed -stormwind -stormwise -storm-wise -storm-worn -storm-wracked -stornelli -stornello -Stornoway -Storrie -Storrs -Storthing -Storting -Stortz -Storz -stosh -Stoss -stosston -stot -stoter -stoting -stotinka -stotinki -stotious -stott -stotter -stotterel -Stottville -Stouffer -Stoughton -stoun -stound -stounded -stounding -stoundmeal -stounds -stoup -stoupful -stoups -stour -Stourbridge -stoure -stoures -stoury -stourie -stouring -stourly -stourliness -stourness -stours -stoush -Stout -stout-armed -stout-billed -stout-bodied -stouten -stoutened -stoutening -stoutens -stouter -stoutest -stout-girthed -stouth -stouthearted -stout-hearted -stoutheartedly -stout-heartedly -stoutheartedness -stout-heartedness -stouthrief -stouty -stoutish -Stoutland -stout-legged -stoutly -stout-limbed -stout-looking -stout-minded -stoutness -stoutnesses -stout-ribbed -stouts -stout-sided -stout-soled -stout-stalked -stout-stomached -Stoutsville -stout-winged -stoutwood -stout-worded -stovaine -Stovall -stove -stovebrush -stoved -stove-dried -stoveful -stove-heated -stovehouse -stoveless -stovemaker -stovemaking -stoveman -stovemen -stoven -stovepipe -stove-pipe -stovepipes -Stover -stovers -stoves -stove's -stove-warmed -stovewood -stovies -stoving -Stow -stowable -stowage -stowages -stowaway -stowaways -stowball -stow-blade -stowboard -stow-boating -stowbord -stowbordman -stowbordmen -stowce -stowdown -Stowe -stowed -Stowell -stower -stowing -stowlins -stownet -stownlins -stowp -stowps -stows -stowse -stowth -stowwood -STP -str -str. -stra -Strabane -strabism -strabismal -strabismally -strabismic -strabismical -strabismies -strabismometer -strabismometry -strabismus -Strabo -strabometer -strabometry -strabotome -strabotomy -strabotomies -Stracchino -Strachey -strack -strackling -stract -Strad -stradametrical -straddle -straddleback -straddlebug -straddled -straddle-face -straddle-fashion -straddle-legged -straddler -straddlers -straddles -straddleways -straddlewise -straddling -straddlingly -Strade -Stradella -Strader -stradico -stradine -stradiot -Stradivari -Stradivarius -stradl -stradld -stradlings -strae -strafe -strafed -strafer -strafers -strafes -Strafford -Straffordian -strafing -strag -Strage -straggle -straggle-brained -straggled -straggler -stragglers -straggles -straggly -stragglier -straggliest -straggling -stragglingly -stragular -stragulum -stray -strayaway -strayed -strayer -strayers -straight -straightabout -straight-arm -straightaway -straight-backed -straight-barred -straight-barreled -straight-billed -straight-bitted -straight-body -straight-bodied -straightbred -straight-cut -straight-drawn -straighted -straightedge -straight-edge -straightedged -straight-edged -straightedges -straightedging -straighten -straightened -straightener -straighteners -straightening -straightens -straighter -straightest -straight-faced -straight-falling -straight-fibered -straight-flung -straight-flute -straight-fluted -straightforward -straightforwarder -straightforwardest -straightforwardly -straightforwardness -straightforwards -straightfoward -straight-from-the-shoulder -straight-front -straight-going -straight-grained -straight-growing -straight-grown -straight-haired -straight-hairedness -straighthead -straight-hemmed -straight-horned -straighting -straightish -straightjacket -straight-jointed -straightlaced -straight-laced -straight-lacedly -straight-leaved -straight-legged -straightly -straight-limbed -straight-line -straight-lined -straight-line-frequency -straight-made -straight-minded -straight-necked -straightness -straight-nosed -straight-out -straight-pull -straight-ribbed -straights -straight-shaped -straight-shooting -straight-side -straight-sided -straight-sliding -straight-spoken -straight-stemmed -straight-stocked -straighttail -straight-tailed -straight-thinking -straight-trunked -straight-tusked -straightup -straight-up -straight-up-and-down -straight-veined -straightway -straightways -straightwards -straight-winged -straightwise -straying -straik -straike -strail -stray-line -strayling -Strain -strainable -strainableness -strainably -strained -strainedly -strainedness -strainer -strainerman -strainermen -strainers -straining -strainingly -strainless -strainlessly -strainometer -strainproof -strains -strainslip -straint -strays -Strait -strait-besieged -strait-bodied -strait-braced -strait-breasted -strait-breeched -strait-chested -strait-clothed -strait-coated -strait-embraced -straiten -straitened -straitening -straitens -straiter -straitest -straitjacket -strait-jacket -strait-knotted -strait-lace -straitlaced -strait-laced -straitlacedly -strait-lacedly -straitlacedness -strait-lacedness -strait-lacer -straitlacing -strait-lacing -straitly -strait-necked -straitness -straits -strait-sleeved -straitsman -straitsmen -strait-tied -strait-toothed -strait-waistcoat -strait-waisted -straitwork -straka -strake -straked -strakes -straky -stralet -Stralka -Stralsund -stram -stramash -stramashes -stramazon -stramineous -stramineously -strammel -strammer -stramony -stramonies -stramonium -stramp -Strand -strandage -Strandburg -stranded -strandedness -Strander -stranders -stranding -strandless -strandline -strandlooper -Strandloper -Strandquist -strands -strandward -Strang -strange -strange-achieved -strange-clad -strange-colored -strange-composed -strange-disposed -strange-fashioned -strange-favored -strange-garbed -strangely -strangeling -strange-looking -strange-met -strangeness -strangenesses -strange-plumaged -Stranger -strangerdom -strangered -strangerhood -strangering -strangerlike -strangers -strangership -strangerwise -strange-sounding -strangest -strange-tongued -strange-voiced -strange-wayed -strangle -strangleable -strangled -stranglehold -stranglement -strangler -stranglers -strangles -strangletare -strangleweed -strangling -stranglingly -stranglings -strangulable -strangulate -strangulated -strangulates -strangulating -strangulation -strangulations -strangulation's -strangulative -strangulatory -strangullion -strangury -strangurious -strany -stranner -Stranraer -strap -StRaphael -straphang -straphanger -straphanging -straphead -strap-hinge -strap-laid -strap-leaved -strapless -straplike -strapness -strapnesses -strap-oil -strapontin -strappable -strappado -strappadoes -strappan -strapped -strapper -strappers -strapping -strapple -straps -strap's -strap-shaped -strapwork -strapwort -Strasberg -Strasbourg -Strasburg -strass -Strassburg -strasses -strata -stratagem -stratagematic -stratagematical -stratagematically -stratagematist -stratagemical -stratagemically -stratagems -stratagem's -stratal -stratameter -stratas -strate -stratege -strategetic -strategetical -strategetics -strategi -strategy -strategian -strategic -strategical -strategically -strategics -strategies -strategy's -strategist -strategists -strategize -strategoi -strategos -strategus -Stratford -Stratfordian -Stratford-on-Avon -Stratford-upon-Avon -strath -Stratham -Strathclyde -Strathcona -Strathmere -Strathmore -straths -strathspey -strathspeys -strati -strati- -stratic -straticulate -straticulation -stratify -stratification -stratifications -stratified -stratifies -stratifying -stratiform -stratiformis -stratig -stratigrapher -stratigraphy -stratigraphic -stratigraphical -stratigraphically -stratigraphist -Stratiomyiidae -stratiote -Stratiotes -stratlin -strato- -stratochamber -strato-cirrus -stratocracy -stratocracies -stratocrat -stratocratic -stratocumuli -stratocumulus -Strato-cumulus -stratofreighter -stratography -stratographic -stratographical -stratographically -stratojet -stratonic -Stratonical -stratopause -stratopedarch -stratoplane -stratose -stratosphere -stratospheres -stratospheric -stratospherical -stratotrainer -stratous -stratovision -Strattanville -Stratton -stratum -stratums -stratus -Straub -straucht -strauchten -Straughn -straught -Straus -Strauss -Strausstown -stravagant -stravage -stravaged -stravages -stravaging -stravague -stravaig -stravaiged -stravaiger -stravaiging -stravaigs -strave -Stravinsky -straw -straw-barreled -strawberry -strawberry-blond -strawberries -strawberrylike -strawberry-raspberry -strawberry's -strawbill -strawboard -straw-boss -strawbreadth -straw-breadth -straw-built -straw-capped -straw-colored -straw-crowned -straw-cutting -straw-dried -strawed -straw-emboweled -strawen -strawer -strawflower -strawfork -strawhat -straw-hatted -strawy -strawyard -strawier -strawiest -strawing -strawish -straw-laid -strawless -strawlike -strawman -strawmote -Strawn -straw-necked -straw-plaiter -straw-plaiting -straw-roofed -straws -straw's -straw-shoe -strawsmall -strawsmear -straw-splitting -strawstack -strawstacker -straw-stuffed -straw-thatched -strawwalker -strawwork -strawworm -stre -streahte -streak -streaked -streaked-back -streakedly -streakedness -streaker -streakers -streaky -streakier -streakiest -streakily -streakiness -streaking -streaklike -streaks -streakwise -stream -streambed -stream-bordering -stream-drive -streamed -stream-embroidered -streamer -streamers -streamful -streamhead -streamy -streamier -streamiest -stream-illumed -streaminess -streaming -streamingly -streamless -streamlet -streamlets -streamlike -streamline -stream-line -streamlined -streamliner -streamliners -streamlines -streamling -streamlining -stream-of-consciousness -streams -streamside -streamway -streamward -Streamwood -streamwort -Streator -streck -streckly -stree -streek -streeked -streeker -streekers -streeking -streeks -streel -streeler -streen -streep -Street -streetage -street-bred -streetcar -streetcars -streetcar's -street-cleaning -street-door -Streeter -streeters -streetfighter -streetful -streetless -streetlet -streetlight -streetlike -Streetman -Streeto -street-pacing -street-raking -streets -Streetsboro -streetscape -streetside -street-sold -street-sprinkling -street-sweeping -streetway -streetwalker -street-walker -streetwalkers -streetwalking -streetward -streetwise -Strega -strey -streyne -Streisand -streit -streite -streke -Strelitz -Strelitzi -Strelitzia -Streltzi -stremma -stremmas -stremmatograph -streng -strengite -strength -strength-bringing -strength-conferring -strength-decaying -strengthed -strengthen -strengthened -strengthener -strengtheners -strengthening -strengtheningly -strengthens -strengthful -strengthfulness -strength-giving -strengthy -strengthily -strength-increasing -strength-inspiring -strengthless -strengthlessly -strengthlessness -strength-restoring -strengths -strength-sustaining -strength-testing -strent -Strenta -strenth -strenuity -strenuosity -strenuous -strenuously -strenuousness -Strep -strepen -strepent -strepera -streperous -Strephon -strephonade -Strephonn -strephosymbolia -strepitant -strepitantly -strepitation -strepitoso -strepitous -strepor -Strepphon -streps -Strepsiceros -strepsinema -Strepsiptera -strepsipteral -strepsipteran -strepsipteron -strepsipterous -strepsis -strepsitene -streptaster -strepto- -streptobacilli -streptobacillus -Streptocarpus -streptococcal -streptococci -streptococcic -streptococcocci -Streptococcus -streptodornase -streptokinase -streptolysin -Streptomyces -streptomycete -streptomycetes -streptomycin -Streptoneura -streptoneural -streptoneurous -streptosepticemia -streptothricial -streptothricin -streptothricosis -Streptothrix -streptotrichal -streptotrichosis -Stresemann -stress -stressed -stresser -stresses -stressful -stressfully -stressfulness -stressing -stressless -stresslessness -stressor -stressors -stress-strain -stress-verse -stret -Stretch -stretchability -stretchable -stretchberry -stretched -stretched-out -stretcher -stretcher-bearer -stretcherman -stretchers -stretches -stretchy -stretchier -stretchiest -stretchiness -stretching -stretching-out -stretchneck -stretch-out -stretchpants -stretchproof -Stretford -stretman -stretmen -stretta -strettas -strette -stretti -stretto -strettos -streusel -streuselkuchen -streusels -strew -strewage -strewed -strewer -strewers -strewing -strewment -strewn -strews -strewth -'strewth -stria -striae -strial -Striaria -Striariaceae -striatal -striate -striated -striates -striating -striation -striations -striato- -striatum -striature -strich -strych -striche -strychnia -strychnic -strychnin -strychnina -strychnine -strychnines -strychninic -strychninism -strychninization -strychninize -strychnize -strychnol -Strychnos -strick -stricken -strickenly -strickenness -stricker -Stricklan -Strickland -strickle -strickled -Strickler -strickles -strickless -strickling -Strickman -stricks -strict -stricter -strictest -striction -strictish -strictly -strictness -strictnesses -strictum -stricture -strictured -strictures -strid -stridden -striddle -stride -strideleg -stride-legged -stridelegs -stridence -stridency -strident -stridently -strident-voiced -strider -striders -strides -strideways -stridhan -stridhana -stridhanum -striding -stridingly -stridling -stridlins -stridor -stridors -stridulant -stridulate -stridulated -stridulating -stridulation -stridulator -stridulatory -stridulent -stridulous -stridulously -stridulousness -strife -strife-breeding -strifeful -strife-healing -strifeless -strifemaker -strifemaking -strifemonger -strifeproof -strifes -strife-stirring -striffen -strift -strig -Striga -strigae -strigal -strigate -Striges -striggle -stright -Strigidae -strigiform -Strigiformes -strigil -strigilate -strigilation -strigilator -strigiles -strigilis -strigillose -strigilous -strigils -Striginae -strigine -strigose -strigous -strigovite -Strigula -Strigulaceae -strigulose -strike -strike-a-light -strikeboard -strikeboat -strikebound -strikebreak -strikebreaker -strikebreakers -strikebreaking -striked -strikeless -striken -strikeout -strike-out -strikeouts -strikeover -striker -Stryker -striker-out -strikers -Strykersville -striker-up -strikes -striking -strikingly -strikingness -Strimon -Strymon -strind -Strindberg -Strine -string -string-binding -stringboard -string-colored -stringcourse -stringed -stringency -stringencies -stringendo -stringendos -stringene -stringent -stringently -stringentness -Stringer -stringers -stringful -stringhalt -stringhalted -stringhaltedness -stringhalty -stringholder -stringy -stringybark -stringy-bark -stringier -stringiest -stringily -stringiness -stringing -stringless -stringlike -stringmaker -stringmaking -stringman -stringmen -stringpiece -strings -string's -stringsman -stringsmen -string-soled -string-tailed -string-toned -Stringtown -stringways -stringwood -strinking-out -strinkle -striola -striolae -striolate -striolated -striolet -strip -strip-crop -strip-cropping -stripe -strype -striped -striped-leaved -stripeless -striper -stripers -stripes -stripfilm -stripy -stripier -stripiest -striping -stripings -striplet -striplight -stripling -striplings -strippable -strippage -stripped -stripper -stripper-harvester -strippers -stripper's -stripping -strippit -strippler -strips -strip's -stript -striptease -stripteased -stripteaser -strip-teaser -stripteasers -stripteases -stripteasing -stripteuse -strit -strive -strived -striven -striver -strivers -strives -strivy -striving -strivingly -strivings -Strix -stroam -strobe -strobed -strobes -strobic -strobil -strobila -strobilaceous -strobilae -strobilar -strobilate -strobilation -strobile -strobiles -strobili -strobiliferous -strobiliform -strobiline -strobilization -strobiloid -Strobilomyces -Strobilophyta -strobils -strobilus -stroboradiograph -stroboscope -stroboscopes -stroboscopy -stroboscopic -stroboscopical -stroboscopically -strobotron -strockle -stroddle -strode -Stroessner -Stroganoff -Stroh -Strohbehn -Strohben -Stroheim -Strohl -stroy -stroyed -stroyer -stroyers -stroygood -stroying -stroil -stroys -stroke -stroked -stroker -stroker-in -strokers -strokes -strokesman -stroky -stroking -strokings -strold -stroll -strolld -strolled -stroller -strollers -strolling -strolls -Strom -stroma -stromal -stromata -stromatal -stromateid -Stromateidae -stromateoid -stromatic -stromatiform -stromatolite -stromatolitic -stromatology -Stromatopora -Stromatoporidae -stromatoporoid -Stromatoporoidea -stromatous -stromb -Stromberg -Strombidae -strombiform -strombite -stromboid -Stromboli -strombolian -strombuliferous -strombuliform -Strombus -strome -stromed -stromeyerite -stroming -stromming -Stromsburg -stromuhr -strond -strone -Strong -strong-ankled -strong-arm -strong-armed -strongarmer -strong-armer -strongback -strong-backed -strongbark -strong-bodied -strong-boned -strongbox -strong-box -strongboxes -strongbrained -strong-breathed -strong-decked -strong-elbowed -stronger -strongest -strong-featured -strong-fibered -strong-fisted -strong-flavored -strongfully -stronghand -stronghanded -strong-handed -stronghead -strongheaded -strong-headed -strongheadedly -strongheadedness -strongheadness -stronghearted -stronghold -strongholds -Stronghurst -strongyl -strongylate -strongyle -strongyliasis -strongylid -Strongylidae -strongylidosis -strongyloid -Strongyloides -strongyloidosis -strongylon -Strongyloplasmata -Strongylosis -strongyls -Strongylus -strongish -strong-jawed -strong-jointed -strongly -stronglike -strong-limbed -strong-looking -strong-lunged -strongman -strong-man -strongmen -strong-minded -strong-mindedly -strong-mindedness -strong-nerved -strongness -strongpoint -strong-pointed -strong-quartered -strong-ribbed -strongroom -strongrooms -strong-scented -strong-seated -strong-set -strong-sided -strong-smelling -strong-stapled -strong-stomached -Strongsville -strong-tasted -strong-tasting -strong-tempered -strong-tested -strong-trunked -strong-voiced -strong-weak -strong-willed -strong-winged -strong-wristed -Stronski -strontia -strontian -strontianiferous -strontianite -strontias -strontic -strontion -strontitic -strontium -strontiums -strook -strooken -stroot -strop -strophaic -strophanhin -strophanthin -Strophanthus -Stropharia -strophe -strophes -strophic -strophical -strophically -strophiolate -strophiolated -strophiole -Strophius -strophoid -Strophomena -Strophomenacea -strophomenid -Strophomenidae -strophomenoid -strophosis -strophotaxis -strophulus -stropped -stropper -stroppy -stropping -stroppings -strops -strosser -stroth -Strother -Stroud -strouding -strouds -Stroudsburg -strounge -Stroup -strout -strouthiocamel -strouthiocamelian -strouthocamelian -strove -strow -strowd -strowed -strowing -strown -strows -Strozza -Strozzi -STRPG -strub -strubbly -strucion -struck -strucken -struct -structed -struction -structional -structive -structural -structuralism -structuralist -structuralization -structuralize -structurally -structural-steel -structuration -structure -structured -structureless -structurelessness -structurely -structurer -structures -structuring -structurist -strude -strudel -strudels -strue -struggle -struggled -struggler -strugglers -struggles -struggling -strugglingly -struis -struissle -Struldbrug -Struldbruggian -Struldbruggism -strum -Struma -strumae -strumas -strumatic -strumaticness -strumectomy -Strumella -strumiferous -strumiform -strumiprivic -strumiprivous -strumitis -strummed -strummer -strummers -strumming -strumose -strumous -strumousness -strumpet -strumpetlike -strumpetry -strumpets -strums -strumstrum -strumulose -strung -Strunk -strunt -strunted -strunting -strunts -struse -strut -struth -Struthers -struthian -struthiform -struthiiform -struthiin -struthin -Struthio -struthioid -Struthiomimus -Struthiones -Struthionidae -struthioniform -Struthioniformes -struthionine -Struthiopteris -struthious -struthonine -struts -strutted -strutter -strutters -strutting -struttingly -struv -Struve -struvite -Struwwelpeter -STS -STSCI -STSI -St-simonian -St-simonianism -St-simonist -STTNG -STTOS -Stu -Stuart -Stuartia -stub -stubachite -stubb -stub-bearded -stubbed -stubbedness -stubber -stubby -stubbier -stubbiest -stubby-fingered -stubbily -stubbiness -stubbing -stubble -stubbleberry -stubbled -stubble-fed -stubble-loving -stubbles -stubbleward -stubbly -stubblier -stubbliest -stubbliness -stubbling -stubboy -stubborn -stubborn-chaste -stubborner -stubbornest -stubborn-hard -stubbornhearted -stubbornly -stubborn-minded -stubbornness -stubbornnesses -stubborn-shafted -stubborn-stout -Stubbs -stubchen -stube -stub-end -stuber -stubiest -stuboy -stubornly -stub-pointed -stubrunner -stubs -stub's -Stubstad -stub-thatched -stub-toed -stubwort -stucco -stucco-adorned -stuccoed -stuccoer -stuccoers -stuccoes -stucco-fronted -stuccoyer -stuccoing -stucco-molded -stuccos -stucco-walled -stuccowork -stuccoworker -stuck -Stuckey -stucken -Stucker -stucking -stuckling -stuck-up -stuck-upness -stuck-upper -stuck-uppy -stuck-uppish -stuck-uppishness -stucturelessness -stud -studbook -studbooks -Studdard -studded -studder -studdery -studdy -studdie -studdies -studding -studdings -studdingsail -studding-sail -studdle -stude -Studebaker -student -studenthood -studentless -studentlike -studentry -students -student's -studentship -studerite -studfish -studfishes -studflower -studhorse -stud-horse -studhorses -study -studia -studiable -study-bearing -study-bred -studied -studiedly -studiedness -studier -studiers -studies -study-given -studying -study-loving -studio -studios -studio's -studious -studiously -studiousness -study-racked -studys -study's -Studite -Studium -study-worn -Studley -stud-mare -Studner -Studnia -stud-pink -studs -stud's -stud-sail -studwork -studworks -stue -stuff -stuffage -stuffata -stuff-chest -stuffed -stuffed-over -stuffender -stuffer -stuffers -stuffgownsman -stuff-gownsman -stuffy -stuffier -stuffiest -stuffily -stuffiness -stuffing -stuffings -stuffless -stuff-over -stuffs -stug -stuggy -stuiver -stuivers -Stuyvesant -Stuka -Stulin -stull -stuller -stulls -stulm -stulty -stultify -stultification -stultifications -stultified -stultifier -stultifies -stultifying -stultiloquence -stultiloquently -stultiloquy -stultiloquious -stultioquy -stultloquent -Stultz -stum -stumble -stumblebum -stumblebunny -stumbled -stumbler -stumblers -stumbles -stumbly -stumbling -stumbling-block -stumblingly -stumer -stummed -stummel -stummer -stummy -stumming -stumor -stumour -stump -stumpage -stumpages -stumped -stumper -stumpers -stump-fingered -stump-footed -stumpy -stumpier -stumpiest -stumpily -stumpiness -stumping -stumpish -stump-jump -stumpknocker -stump-legged -stumpless -stumplike -stumpling -stumpnose -stump-nosed -stump-rooted -stumps -stumpsucker -stump-tail -stump-tailed -Stumptown -stumpwise -stums -stun -Stundism -Stundist -stung -stunk -stunkard -stunned -stunner -stunners -stunning -stunningly -stunpoll -stuns -stunsail -stunsails -stuns'l -stunsle -stunt -stunted -stuntedly -stuntedness -stunter -stunty -stuntiness -stunting -stuntingly -stuntist -stuntman -stuntmen -stuntness -stunts -stunt's -stupa -stupas -stupe -stuped -stupefacient -stupefaction -stupefactions -stupefactive -stupefactiveness -stupefy -stupefied -stupefiedness -stupefier -stupefies -stupefying -stupend -stupendious -stupendly -stupendous -stupendously -stupendousness -stupent -stupeous -stupes -stupex -stuphe -stupid -stupid-acting -stupider -stupidest -stupidhead -stupidheaded -stupid-headed -stupid-honest -stupidish -stupidity -stupidities -stupidly -stupid-looking -stupidness -stupids -stupid-sure -stuping -stupor -stuporific -stuporose -stuporous -stupors -stupose -stupp -Stuppy -stuprate -stuprated -stuprating -stupration -stuprum -stupulose -sturble -Sturbridge -sturdy -sturdy-chested -sturdied -sturdier -sturdies -sturdiest -sturdyhearted -sturdy-legged -sturdily -sturdy-limbed -sturdiness -sturdinesses -Sturdivant -sturgeon -sturgeons -Sturges -Sturgis -sturin -sturine -Sturiones -sturionian -sturionine -sturk -Sturkie -Sturm -Sturmabteilung -Sturmer -Sturmian -Sturnella -Sturnidae -sturniform -Sturninae -sturnine -sturnoid -Sturnus -sturoch -Sturrock -sturshum -Sturt -sturtan -sturte -Sturtevant -sturty -sturtin -sturtion -sturtite -sturts -stuss -stut -Stutman -Stutsman -stutter -stuttered -stutterer -stutterers -stuttering -stutteringly -stutters -Stuttgart -Stutzman -STV -SU -suability -suable -suably -suade -Suaeda -suaharo -Suakin -Sualocin -Suamico -Suanitian -Suanne -suant -suantly -Suarez -suasibility -suasible -suasion -suasionist -suasions -suasive -suasively -suasiveness -suasory -suasoria -suavastika -suave -suavely -suave-looking -suave-mannered -suaveness -suaveolent -suaver -suave-spoken -suavest -suavify -suaviloquence -suaviloquent -suavity -suavities -sub -sub- -suba -subabbot -subabbots -subabdominal -subability -subabilities -subabsolute -subabsolutely -subabsoluteness -subacademic -subacademical -subacademically -subaccount -subacetabular -subacetate -subacid -subacidity -subacidly -subacidness -subacidulous -subacrid -subacridity -subacridly -subacridness -subacrodrome -subacrodromous -subacromial -subact -subaction -subacuminate -subacumination -subacute -subacutely -subadar -subadars -subadditive -subadditively -subadjacent -subadjacently -subadjutor -subadministrate -subadministrated -subadministrating -subadministration -subadministrative -subadministratively -subadministrator -Sub-adriatic -subadult -subadultness -subadults -subaduncate -subadvocate -subaerate -subaerated -subaerating -subaeration -subaerial -subaerially -subaetheric -subaffluence -subaffluent -subaffluently -subage -subagency -subagencies -subagent -sub-agent -subagents -subaggregate -subaggregately -subaggregation -subaggregative -subah -subahdar -subahdary -subahdars -subahs -subahship -subaid -Subak -Subakhmimic -subalar -subalary -subalate -subalated -subalbid -subalgebra -subalgebraic -subalgebraical -subalgebraically -subalgebraist -subalimentation -subalkaline -suballiance -suballiances -suballocate -suballocated -suballocating -subalmoner -subalpine -subaltern -subalternant -subalternate -subalternately -subalternating -subalternation -subalternity -subalterns -subamare -subanal -subanconeal -subandean -sub-Andean -subangled -subangular -subangularity -subangularities -subangularly -subangularness -subangulate -subangulated -subangulately -subangulation -subanniversary -subantarctic -subantichrist -subantique -subantiquely -subantiqueness -subantiquity -subantiquities -Subanun -Sub-apenine -subapical -subapically -subaponeurotic -subapostolic -subapparent -subapparently -subapparentness -subappearance -subappressed -subapprobatiness -subapprobation -subapprobative -subapprobativeness -subapprobatory -subapterous -subaqua -subaqual -subaquatic -subaquean -subaqueous -subarachnoid -subarachnoidal -subarachnoidean -subarboraceous -subarboreal -subarboreous -subarborescence -subarborescent -subarch -sub-arch -subarchesporial -subarchitect -subarctic -subarcuate -subarcuated -subarcuation -subarea -subareal -subareas -subareolar -subareolet -Subarian -subarid -subarytenoid -subarytenoidal -subarmale -subarmor -subarousal -subarouse -subarration -subarrhation -subartesian -subarticle -subarticulate -subarticulately -subarticulateness -subarticulation -subarticulative -subas -subascending -subashi -subassemblage -subassembler -subassembly -sub-assembly -subassemblies -subassociation -subassociational -subassociations -subassociative -subassociatively -subastragalar -subastragaloid -subastral -subastringent -Sub-atlantic -subatmospheric -subatom -subatomic -subatoms -subattenuate -subattenuated -subattenuation -subattorney -subattorneys -subattorneyship -subaud -subaudibility -subaudible -subaudibleness -subaudibly -subaudition -subauditionist -subauditor -subauditur -subaural -subaurally -subauricular -subauriculate -subautomatic -subautomatically -subaverage -subaveragely -subaxial -subaxially -subaxile -subaxillar -subaxillary -subbailie -subbailiff -subbailiwick -subballast -subband -subbank -subbasal -subbasaltic -subbase -sub-base -subbasement -subbasements -subbases -subbasin -subbass -subbassa -subbasses -subbeadle -subbeau -subbed -subbias -subbifid -subbing -subbings -subbituminous -subblock -subbookkeeper -subboreal -subbourdon -subbrachial -subbrachian -subbrachiate -subbrachycephaly -subbrachycephalic -subbrachyskelic -subbranch -subbranched -subbranches -subbranchial -subbreed -subbreeds -subbrigade -subbrigadier -subbroker -subbromid -subbromide -subbronchial -subbronchially -subbureau -subbureaus -subbureaux -subcabinet -subcabinets -subcaecal -subcalcareous -subcalcarine -subcaliber -subcalibre -subcallosal -subcampanulate -subcancellate -subcancellous -subcandid -subcandidly -subcandidness -subcantor -subcapsular -subcaptain -subcaptaincy -subcaptainship -subcaption -subcarbide -subcarbonaceous -subcarbonate -Subcarboniferous -Sub-carboniferous -subcarbureted -subcarburetted -subcardinal -subcardinally -subcarinate -subcarinated -Sub-carpathian -subcartilaginous -subcase -subcash -subcashier -subcasing -subcasino -subcasinos -subcast -subcaste -subcategory -subcategories -subcaudal -subcaudate -subcaulescent -subcause -subcauses -subcavate -subcavity -subcavities -subcelestial -subcell -subcellar -subcellars -subcells -subcellular -subcenter -subcentral -subcentrally -subcentre -subception -subcerebellar -subcerebral -subch -subchairman -subchairmen -subchamberer -subchancel -subchannel -subchannels -subchanter -subchapter -subchapters -subchaser -subchela -subchelae -subchelate -subcheliform -subchief -subchiefs -subchloride -subchondral -subchordal -subchorioid -subchorioidal -subchorionic -subchoroid -subchoroidal -Sub-christian -subchronic -subchronical -subchronically -subcyaneous -subcyanid -subcyanide -subcycle -subcycles -subcylindric -subcylindrical -subcinctoria -subcinctorium -subcincttoria -subcineritious -subcingulum -subcircuit -subcircular -subcircularity -subcircularly -subcision -subcity -subcities -subcivilization -subcivilizations -subcivilized -subclaim -Subclamatores -subclan -subclans -subclass -subclassed -subclasses -subclassify -subclassification -subclassifications -subclassified -subclassifies -subclassifying -subclassing -subclass's -subclausal -subclause -subclauses -subclavate -subclavia -subclavian -subclavicular -subclavii -subclavioaxillary -subclaviojugular -subclavius -subclei -subclerk -subclerks -subclerkship -subclimactic -subclimate -subclimatic -subclimax -subclinical -subclinically -subclique -subclone -subclover -subcoastal -subcoat -subcode -subcodes -subcollateral -subcollector -subcollectorship -subcollege -subcollegial -subcollegiate -subcolumnar -subcommand -subcommander -subcommanders -subcommandership -subcommands -subcommendation -subcommendatory -subcommended -subcommissary -subcommissarial -subcommissaries -subcommissaryship -subcommission -subcommissioner -subcommissioners -subcommissionership -subcommissions -subcommit -subcommittee -subcommittees -subcommunity -subcommunities -subcompact -subcompacts -subcompany -subcompensate -subcompensated -subcompensating -subcompensation -subcompensational -subcompensative -subcompensatory -subcomplete -subcompletely -subcompleteness -subcompletion -subcomponent -subcomponents -subcomponent's -subcompressed -subcomputation -subcomputations -subcomputation's -subconcave -subconcavely -subconcaveness -subconcavity -subconcavities -subconcealed -subconcept -subconcepts -subconcession -subconcessionaire -subconcessionary -subconcessionaries -subconcessioner -subconchoidal -subconference -subconferential -subconformability -subconformable -subconformableness -subconformably -subconic -subconical -subconically -subconjunctival -subconjunctive -subconjunctively -subconnate -subconnation -subconnect -subconnectedly -subconnivent -subconscience -subconscious -subconsciouses -subconsciously -subconsciousness -subconsciousnesses -subconservator -subconsideration -subconstable -sub-constable -subconstellation -subconsul -subconsular -subconsulship -subcontained -subcontest -subcontiguous -subcontinent -subcontinental -subcontinents -subcontinual -subcontinued -subcontinuous -subcontract -subcontracted -subcontracting -subcontractor -subcontractors -subcontracts -subcontraoctave -subcontrary -subcontraries -subcontrariety -subcontrarily -subcontrol -subcontrolled -subcontrolling -subconvex -subconvolute -subconvolutely -subcool -subcooled -subcooling -subcools -subcoracoid -subcordate -subcordately -subcordiform -subcoriaceous -subcorymbose -subcorymbosely -subcorneous -subcornual -subcorporation -subcortex -subcortical -subcortically -subcortices -subcosta -subcostae -subcostal -subcostalis -subcouncil -subcouncils -subcover -subcranial -subcranially -subcreative -subcreatively -subcreativeness -subcreek -subcrenate -subcrenated -subcrenately -subcrepitant -subcrepitation -subcrescentic -subcrest -subcriminal -subcriminally -subcript -subcrystalline -subcritical -subcrossing -subcruciform -subcrureal -subcrureus -subcrust -subcrustaceous -subcrustal -subcubic -subcubical -subcuboid -subcuboidal -subcultrate -subcultrated -subcultural -subculturally -subculture -subcultured -subcultures -subculture's -subculturing -subcuneus -subcurate -subcurator -subcuratorial -subcurators -subcuratorship -subcurrent -subcutaneous -subcutaneously -subcutaneousness -subcutes -subcuticular -subcutis -subcutises -subdatary -subdataries -subdate -subdated -subdating -subdeacon -subdeaconate -subdeaconess -subdeaconry -subdeacons -subdeaconship -subdealer -subdean -subdeanery -subdeans -subdeb -subdebs -subdebutante -subdebutantes -subdecanal -subdecimal -subdecuple -subdeducible -subdefinition -subdefinitions -subdelegate -subdelegated -subdelegating -subdelegation -subdeliliria -subdeliria -subdelirium -subdeliriums -subdeltaic -subdeltoid -subdeltoidal -subdemonstrate -subdemonstrated -subdemonstrating -subdemonstration -subdendroid -subdendroidal -subdenomination -subdentate -subdentated -subdentation -subdented -subdenticulate -subdenticulated -subdepartment -subdepartmental -subdepartments -subdeposit -subdepository -subdepositories -subdepot -subdepots -subdepressed -subdeputy -subdeputies -subderivative -subdermal -subdermic -subdeterminant -subdevil -subdiaconal -subdiaconate -subdiaconus -subdial -subdialect -subdialectal -subdialectally -subdialects -subdiapason -subdiapasonic -subdiapente -subdiaphragmatic -subdiaphragmatically -subdichotomy -subdichotomies -subdichotomize -subdichotomous -subdichotomously -subdie -subdilated -subdirector -subdirectory -subdirectories -subdirectors -subdirectorship -subdiscipline -subdisciplines -subdiscoid -subdiscoidal -subdisjunctive -subdistich -subdistichous -subdistichously -subdistinction -subdistinctions -subdistinctive -subdistinctively -subdistinctiveness -subdistinguish -subdistinguished -subdistrict -sub-district -subdistricts -subdit -subdititious -subdititiously -subdivecious -subdiversify -subdividable -subdivide -subdivided -subdivider -subdivides -subdividing -subdividingly -subdivine -subdivinely -subdivineness -subdivisible -subdivision -subdivisional -subdivisions -subdivision's -subdivisive -subdoctor -subdolent -subdolichocephaly -subdolichocephalic -subdolichocephalism -subdolichocephalous -subdolous -subdolously -subdolousness -subdomains -subdominance -subdominant -subdorsal -subdorsally -subdouble -subdrain -subdrainage -subdrill -subdruid -subduable -subduableness -subduably -subdual -subduals -subduce -subduced -subduces -subducing -subduct -subducted -subducting -subduction -subducts -subdue -subdued -subduedly -subduedness -subduement -subduer -subduers -subdues -subduing -subduingly -subduple -subduplicate -subdural -subdurally -subdure -subdwarf -subecho -subechoes -subectodermal -subectodermic -subedit -sub-edit -subedited -subediting -subeditor -sub-editor -subeditorial -subeditors -subeditorship -subedits -subeffective -subeffectively -subeffectiveness -subelaphine -subelection -subelectron -subelement -subelemental -subelementally -subelementary -subelliptic -subelliptical -subelongate -subelongated -subemarginate -subemarginated -subemployed -subemployment -subencephalon -subencephaltic -subendymal -subendocardial -subendorse -subendorsed -subendorsement -subendorsing -subendothelial -subenfeoff -subengineer -subentire -subentitle -subentitled -subentitling -subentry -subentries -subepidermal -subepiglottal -subepiglottic -subepithelial -subepoch -subepochs -subequal -subequality -subequalities -subequally -subequatorial -subequilateral -subequivalve -suber -suberane -suberate -suberect -suberectly -suberectness -subereous -suberic -suberiferous -suberification -suberiform -suberin -suberine -suberinization -suberinize -suberins -suberise -suberised -suberises -suberising -suberite -Suberites -Suberitidae -suberization -suberize -suberized -suberizes -suberizing -subero- -suberone -suberose -suberous -subers -subescheator -subesophageal -subessential -subessentially -subessentialness -subestuarine -subet -subeth -subetheric -subevergreen -subexaminer -subexcitation -subexcite -subexecutor -subexpression -subexpressions -subexpression's -subextensibility -subextensible -subextensibleness -subextensibness -subexternal -subexternally -subface -subfacies -subfactor -subfactory -subfactorial -subfactories -subfalcate -subfalcial -subfalciform -subfamily -subfamilies -subfascial -subfastigiate -subfastigiated -subfebrile -subferryman -subferrymen -subfestive -subfestively -subfestiveness -subfeu -subfeudation -subfeudatory -subfibrous -subfief -subfield -subfields -subfield's -subfigure -subfigures -subfile -subfiles -subfile's -subfissure -subfix -subfixes -subflavor -subflavour -subflexuose -subflexuous -subflexuously -subfloor -subflooring -subfloors -subflora -subfluid -subflush -subfluvial -subfocal -subfoliar -subfoliate -subfoliation -subforeman -subforemanship -subforemen -subform -subformation -subformative -subformatively -subformativeness -subfossil -subfossorial -subfoundation -subfraction -subfractional -subfractionally -subfractionary -subfractions -subframe -subfreezing -subfreshman -subfreshmen -subfrontal -subfrontally -subfulgent -subfulgently -subfumigation -subfumose -subfunction -subfunctional -subfunctionally -subfunctions -subfusc -subfuscous -subfusiform -subfusk -subg -subgalea -subgallate -subganger -subganoid -subgape -subgaped -subgaping -subgelatinization -subgelatinoid -subgelatinous -subgelatinously -subgelatinousness -subgenera -subgeneric -subgenerical -subgenerically -subgeniculate -subgeniculation -subgenital -subgenre -subgens -subgentes -subgenual -subgenus -subgenuses -subgeometric -subgeometrical -subgeometrically -subgerminal -subgerminally -subget -subgiant -subgyre -subgyri -subgyrus -subgit -subglabrous -subglacial -subglacially -subglenoid -subgloboid -subglobose -subglobosely -subglobosity -subglobous -subglobular -subglobularity -subglobularly -subglobulose -subglossal -subglossitis -subglottal -subglottally -subglottic -subglumaceous -subgoal -subgoals -subgoal's -subgod -subgoverness -subgovernor -subgovernorship -subgrade -subgrades -subgranular -subgranularity -subgranularly -subgraph -subgraphs -subgrin -subgroup -subgroups -subgroup's -subgular -subgum -subgums -subgwely -subhalid -subhalide -subhall -subharmonic -subhastation -subhatchery -subhatcheries -subhead -sub-head -subheading -subheadings -subheadquarters -subheads -subheadwaiter -subhealth -subhedral -subhemispheric -subhemispherical -subhemispherically -subhepatic -subherd -subhero -subheroes -subhexagonal -subhyalin -subhyaline -subhyaloid -Sub-himalayan -subhymenial -subhymenium -subhyoid -subhyoidean -subhypotheses -subhypothesis -subhirsuness -subhirsute -subhirsuteness -subhysteria -subhooked -subhorizontal -subhorizontally -subhorizontalness -subhornblendic -subhouse -subhuman -sub-human -subhumanly -subhumans -subhumeral -subhumid -Subiaco -Subic -subicle -subicteric -subicterical -subicular -subiculum -subidar -subidea -subideal -subideas -Subiya -subilia -subililia -subilium -subimaginal -subimago -subimbricate -subimbricated -subimbricately -subimbricative -subimposed -subimpressed -subincandescent -subincident -subincise -subincision -subincomplete -subindex -subindexes -subindicate -subindicated -subindicating -subindication -subindicative -subindices -subindividual -subinduce -subindustry -subindustries -subinfection -subinfer -subinferior -subinferred -subinferring -subinfeud -subinfeudate -subinfeudated -subinfeudating -subinfeudation -subinfeudatory -subinfeudatories -subinflammation -subinflammatory -subinfluent -subinform -subingression -subinguinal -subinitial -subinoculate -subinoculation -subinsert -subinsertion -subinspector -subinspectorship -subintegumental -subintegumentary -subintellection -subintelligential -subintelligitur -subintent -subintention -subintentional -subintentionally -subintercessor -subinternal -subinternally -subinterval -subintervals -subinterval's -subintestinal -subintimal -subintrant -subintroduce -subintroduced -subintroducing -subintroduction -subintroductive -subintroductory -subinvolute -subinvoluted -subinvolution -subiodide -Subir -subirrigate -subirrigated -subirrigating -subirrigation -subitane -subitaneous -subitany -subitem -subitems -subito -subitous -subj -subj. -subjacency -subjacent -subjacently -subjack -subject -subjectability -subjectable -subjectdom -subjected -subjectedly -subjectedness -subjecthood -subjectibility -subjectible -subjectify -subjectification -subjectified -subjectifying -subjectile -subjecting -subjection -subjectional -subjections -subjectist -subjective -subjectively -subjectiveness -subjectivism -subjectivist -subjectivistic -subjectivistically -subjectivity -subjectivities -subjectivization -subjectivize -subjectivo- -subjectivoidealistic -subjectivo-objective -subjectless -subjectlike -subject-matter -subjectness -subject-object -subject-objectivity -subject-raising -subjects -subjectship -subjee -subjicible -subjoin -subjoinder -subjoined -subjoining -subjoins -subjoint -subjudge -subjudgeship -subjudicial -subjudicially -subjudiciary -subjudiciaries -subjugable -subjugal -subjugate -sub-jugate -subjugated -subjugates -subjugating -subjugation -subjugations -subjugator -subjugators -subjugular -subjunct -subjunction -subjunctive -subjunctively -subjunctives -subjunior -subking -subkingdom -subkingdoms -sublabial -sublabially -sublaciniate -sublacunose -sublacustrine -sublayer -sublayers -sublanate -sublanceolate -sublanguage -sublanguages -sublapsar -sublapsary -sublapsarian -sublapsarianism -sublaryngal -sublaryngeal -sublaryngeally -sublate -sublated -sublateral -sublates -sublating -sublation -sublative -sublattices -sublavius -subleader -sublease -sub-lease -subleased -subleases -subleasing -sublecturer -sublegislation -sublegislature -sublenticular -sublenticulate -sublessee -sublessor -sublet -sub-let -sublethal -sublethally -sublets -Sublett -sublettable -Sublette -subletter -subletting -sublevaminous -sublevate -sublevation -sublevel -sub-level -sublevels -sublibrarian -sublibrarianship -sublicense -sublicensed -sublicensee -sublicenses -sublicensing -sublid -sublieutenancy -sublieutenant -sub-lieutenant -subligation -sublighted -sublimable -sublimableness -sublimant -sublimate -sublimated -sublimates -sublimating -sublimation -sublimational -sublimationist -sublimations -sublimator -sublimatory -Sublime -sublimed -sublimely -sublimeness -sublimer -sublimers -sublimes -sublimest -sublimification -subliminal -subliminally -subliming -sublimish -sublimitation -Sublimity -sublimities -sublimize -subline -sublinear -sublineation -sublines -sublingua -sublinguae -sublingual -sublinguate -sublist -sublists -sublist's -subliterary -subliterate -subliterature -sublittoral -sublobular -sublong -subloral -subloreal -sublot -sublots -sublumbar -sublunar -sublunary -sublunate -sublunated -sublustrous -sublustrously -sublustrousness -subluxate -subluxation -submachine -sub-machine-gun -submaid -submain -submakroskelic -submammary -subman -sub-man -submanager -submanagership -submandibular -submania -submaniacal -submaniacally -submanic -submanor -submarginal -submarginally -submarginate -submargined -submarine -submarined -submariner -submariners -submarines -submarining -submarinism -submarinist -submarshal -submaster -submatrices -submatrix -submatrixes -submaxilla -submaxillae -submaxillary -submaxillas -submaximal -submeaning -submedial -submedially -submedian -submediant -submediation -submediocre -submeeting -submember -submembers -submembranaceous -submembranous -submen -submeningeal -submenta -submental -submentum -submerge -submerged -submergement -submergence -submergences -submerges -submergibility -submergible -submerging -submerse -submersed -submerses -submersibility -submersible -submersibles -submersing -submersion -submersions -submetallic -submetaphoric -submetaphorical -submetaphorically -submeter -submetering -Sub-mycenaean -submicrogram -submicron -submicroscopic -submicroscopical -submicroscopically -submiliary -submind -subminiature -subminiaturization -subminiaturize -subminiaturized -subminiaturizes -subminiaturizing -subminimal -subminister -subministrant -submiss -submissible -submission -submissionist -submissions -submission's -submissit -submissive -submissively -submissiveness -submissly -submissness -submit -Submytilacea -submitochondrial -submits -submittal -submittance -submitted -submitter -submitting -submittingly -submode -submodes -submodule -submodules -submodule's -submolecular -submolecule -submonition -submontagne -submontane -submontanely -submontaneous -submorphous -submortgage -submotive -submountain -submucosa -submucosae -submucosal -submucosally -submucous -submucronate -submucronated -submultiple -submultiplexed -submundane -submuriate -submuscular -submuscularly -subnacreous -subnanosecond -subnarcotic -subnasal -subnascent -subnatural -subnaturally -subnaturalness -subnect -subnervian -subness -subnet -subnets -subnetwork -subnetworks -subnetwork's -subneural -subnex -subniche -subnitrate -subnitrated -subniveal -subnivean -subnodal -subnode -subnodes -subnodulose -subnodulous -subnormal -subnormality -subnormally -Sub-northern -subnotation -subnotational -subnote -subnotochordal -subnubilar -subnuclei -subnucleus -subnucleuses -subnude -subnumber -subnutritious -subnutritiously -subnutritiousness -subnuvolar -suboblique -subobliquely -subobliqueness -subobscure -subobscurely -subobscureness -subobsolete -subobsoletely -subobsoleteness -subobtuse -subobtusely -subobtuseness -suboccipital -subocean -suboceanic -suboctave -suboctile -suboctuple -subocular -subocularly -suboesophageal -suboffice -subofficer -sub-officer -subofficers -suboffices -subofficial -subofficially -subolive -subopaque -subopaquely -subopaqueness -subopercle -subopercular -suboperculum -subopposite -suboppositely -suboppositeness -suboptic -suboptical -suboptically -suboptima -suboptimal -suboptimally -suboptimization -suboptimum -suboptimuma -suboptimums -suboral -suborbicular -suborbicularity -suborbicularly -suborbiculate -suborbiculated -suborbital -suborbitar -suborbitary -subordain -suborder -suborders -subordinacy -subordinal -subordinary -subordinaries -subordinate -subordinated -subordinately -subordinateness -subordinates -subordinating -subordinatingly -subordination -subordinationism -subordinationist -subordinations -subordinative -subordinator -suborganic -suborganically -suborn -subornation -subornations -subornative -suborned -suborner -suborners -suborning -suborns -Suboscines -Subotica -suboval -subovarian -subovate -subovated -suboverseer -subovoid -suboxid -suboxidation -suboxide -suboxides -subpackage -subpagoda -subpallial -subpalmate -subpalmated -subpanation -subpanel -subpar -subparagraph -subparagraphs -subparalytic -subparallel -subparameter -subparameters -subparietal -subparliament -Sub-parliament -subpart -subparty -subparties -subpartition -subpartitioned -subpartitionment -subpartnership -subparts -subpass -subpassage -subpastor -subpastorship -subpatellar -subpatron -subpatronal -subpatroness -subpattern -subpavement -subpectinate -subpectinated -subpectination -subpectoral -subpeduncle -subpeduncled -subpeduncular -subpedunculate -subpedunculated -subpellucid -subpellucidity -subpellucidly -subpellucidness -subpeltate -subpeltated -subpeltately -subpena -subpenaed -subpenaing -subpenas -subpentagonal -subpentangular -subpericardiac -subpericardial -subpericranial -subperiod -subperiosteal -subperiosteally -subperitoneal -subperitoneally -subpermanent -subpermanently -subperpendicular -subpetiolar -subpetiolate -subpetiolated -subpetrosal -subpharyngal -subpharyngeal -subpharyngeally -subphase -subphases -subphyla -subphylar -subphylla -subphylum -subphosphate -subphratry -subphratries -subphrenic -subpial -subpilose -subpilosity -subpimp -subpyramidal -subpyramidic -subpyramidical -Sub-pyrenean -subpyriform -subpiston -subplacenta -subplacentae -subplacental -subplacentas -subplant -subplantigrade -subplat -subplate -subpleural -subplexal -subplinth -subplot -subplots -subplow -subpodophyllous -subpoena -subpoenaed -subpoenaing -subpoenal -subpoenas -subpolar -subpolygonal -subpolygonally -sub-Pontine -subpool -subpools -subpopular -subpopulation -subpopulations -subporphyritic -subport -subpost -subpostmaster -subpostmastership -subpostscript -subpotency -subpotencies -subpotent -subpreceptor -subpreceptoral -subpreceptorate -subpreceptorial -subpredicate -subpredication -subpredicative -subprefect -sub-prefect -subprefectorial -subprefecture -subprehensile -subprehensility -subpreputial -subpress -subprimary -subprincipal -subprincipals -subprior -subprioress -subpriorship -subproblem -subproblems -subproblem's -subprocess -subprocesses -subproctor -subproctorial -subproctorship -subproduct -subprofessional -subprofessionally -subprofessor -subprofessorate -subprofessoriate -subprofessorship -subprofitable -subprofitableness -subprofitably -subprogram -subprograms -subprogram's -subproject -subprojects -subproof -subproofs -subproof's -subproportional -subproportionally -subprostatic -subprotector -subprotectorship -subprovince -subprovinces -subprovincial -subpubescent -subpubic -subpulmonary -subpulverizer -subpunch -subpunctuation -subpurchaser -subpurlin -subputation -subquadrangular -subquadrate -subquality -subqualities -subquarter -subquarterly -subquestion -subqueues -subquinquefid -subquintuple -subra -subrace -subraces -subradial -subradiance -subradiancy -subradiate -subradiative -subradical -subradicalness -subradicness -subradius -subradular -subrail -subrailway -subrameal -subramose -subramous -subrange -subranges -subrange's -subrational -subreader -subreason -subrebellion -subrectal -subrectangular -subrector -subrectory -subrectories -subreference -subregent -subregion -subregional -subregions -subregular -subregularity -subreguli -subregulus -subrelation -subreligion -subreniform -subrent -subrents -subrepand -subrepent -subreport -subreptary -subreption -subreptitious -subreptitiously -subreptive -subreputable -subreputably -subresin -subresults -subretinal -subretractile -subrhombic -subrhombical -subrhomboid -subrhomboidal -subrictal -subrident -subridently -subrigid -subrigidity -subrigidly -subrigidness -subring -subrings -subrision -subrisive -subrisory -Subroc -subrogate -subrogated -subrogating -subrogation -subrogee -subrogor -subroot -sub-rosa -subrostral -subrotund -subrotundity -subrotundly -subrotundness -subround -subroutine -subroutines -subroutine's -subroutining -subrule -subruler -subrules -subs -subsacral -subsale -subsales -subsaline -subsalinity -subsalt -subsample -subsampled -subsampling -subsartorial -subsatellite -subsatiric -subsatirical -subsatirically -subsatiricalness -subsaturated -subsaturation -subscale -subscapular -subscapulary -subscapularis -subschedule -subschedules -subschema -subschemas -subschema's -subscheme -subschool -subscience -subscleral -subsclerotic -subscribable -subscribe -subscribed -subscriber -subscribers -subscribership -subscribes -subscribing -subscript -subscripted -subscripting -subscription -subscriptionist -subscriptions -subscription's -subscriptive -subscriptively -subscripts -subscripture -subscrive -subscriver -subsea -subsecive -subsecretary -subsecretarial -subsecretaries -subsecretaryship -subsect -subsection -subsections -subsection's -subsects -subsecurity -subsecurities -subsecute -subsecutive -subsegment -subsegments -subsegment's -subsella -subsellia -subsellium -subsemifusa -subsemitone -subsensation -subsense -subsensible -subsensual -subsensually -subsensuous -subsensuously -subsensuousness -subsept -subseptate -subseptuple -subsequence -subsequences -subsequence's -subsequency -subsequent -subsequential -subsequentially -subsequently -subsequentness -subsere -subseres -subseries -subserosa -subserous -subserrate -subserrated -subserve -subserved -subserves -subserviate -subservience -subserviency -subservient -subserviently -subservientness -subserving -subsesqui -subsessile -subset -subsets -subset's -subsetting -subsewer -subsextuple -subshaft -subshafts -subshell -subsheriff -subshire -subshrub -subshrubby -subshrubs -subsibilance -subsibilancy -subsibilant -subsibilantly -subsicive -subside -subsided -subsidence -subsidency -subsident -subsider -subsiders -subsides -subsidy -subsidiary -subsidiarie -subsidiaries -subsidiarily -subsidiariness -subsidiary's -subsidies -subsiding -subsidy's -subsidise -subsidist -subsidium -subsidizable -subsidization -subsidizations -subsidize -subsidized -subsidizer -subsidizes -subsidizing -subsign -subsilicate -subsilicic -subsill -subsimian -subsimilation -subsimious -subsimple -subsyndicate -subsyndication -subsynod -subsynodal -subsynodic -subsynodical -subsynodically -subsynovial -subsinuous -subsist -subsisted -subsystem -subsystems -subsystem's -subsistence -subsistences -subsistency -subsistent -subsistential -subsister -subsisting -subsistingly -subsists -subsite -subsites -subsizar -subsizarship -subslot -subslots -subsmile -subsneer -subsocial -subsocially -subsoil -subsoiled -subsoiler -subsoiling -subsoils -subsolar -subsolid -subsonic -subsonically -subsonics -subsort -subsorter -subsovereign -subspace -subspaces -subspace's -subspatulate -subspecialist -subspecialization -subspecialize -subspecialized -subspecializing -subspecialty -subspecialties -subspecies -subspecific -subspecifically -subsphenoid -subsphenoidal -subsphere -subspheric -subspherical -subspherically -subspinose -subspinous -subspiral -subspirally -subsplenial -subspontaneous -subspontaneously -subspontaneousness -subsquadron -subssellia -subst -substage -substages -substalagmite -substalagmitic -substance -substanced -substanceless -substances -substance's -substanch -substandard -substandardization -substandardize -substandardized -substandardizing -substanially -substant -substantia -substantiability -substantiable -substantiae -substantial -substantialia -substantialism -substantialist -substantiality -substantialization -substantialize -substantialized -substantializing -substantially -substantiallying -substantialness -substantiatable -substantiate -substantiated -substantiates -substantiating -substantiation -substantiations -substantiative -substantiator -substantify -substantious -substantival -substantivally -substantive -substantively -substantiveness -substantives -substantivity -substantivize -substantivized -substantivizing -substantize -substate -substation -substations -substernal -substylar -substile -substyle -substituent -substitutability -substitutabilities -substitutable -substitute -substituted -substituter -substitutes -substituting -substitutingly -substitution -substitutional -substitutionally -substitutionary -substitutions -substitutive -substitutively -substock -substore -substoreroom -substory -substories -substract -substraction -substrat -substrata -substratal -substrate -substrates -substrate's -substrati -substrative -substrator -substratose -substratosphere -substratospheric -substratum -substratums -substream -substriate -substriated -substring -substrings -substrstrata -substruct -substruction -substructional -substructural -substructure -substructured -substructures -substructure's -subsulci -subsulcus -subsulfate -subsulfid -subsulfide -subsulphate -subsulphid -subsulphide -subsult -subsultive -subsultory -subsultorily -subsultorious -subsultus -subsumable -subsume -subsumed -subsumes -subsuming -subsumption -subsumptive -subsuperficial -subsuperficially -subsuperficialness -subsurety -subsureties -subsurface -subsurfaces -subtack -subtacksman -subtacksmen -subtangent -subtarget -subtarsal -subtartarean -subtask -subtasking -subtasks -subtask's -subtaxa -subtaxer -subtaxon -subtectacle -subtectal -subteen -subteener -subteens -subtegminal -subtegulaneous -subtegumental -subtegumentary -subtemperate -subtemporal -subtenancy -subtenancies -subtenant -subtenants -subtend -subtended -subtending -subtends -subtense -subtentacular -subtenure -subtepid -subtepidity -subtepidly -subtepidness -subter- -subteraqueous -subterbrutish -subtercelestial -subterconscious -subtercutaneous -subterete -subterethereal -subterfluent -subterfluous -subterfuge -subterfuges -subterhuman -subterjacent -subtermarine -subterminal -subterminally -subternatural -subterpose -subterposition -subterrain -subterrane -subterraneal -subterranean -subterraneanize -subterraneanized -subterraneanizing -subterraneanly -subterraneity -subterraneous -subterraneously -subterraneousness -subterrany -subterranity -subterraqueous -subterrene -subterrestrial -subterritory -subterritorial -subterritories -subtersensual -subtersensuous -subtersuperlative -subtersurface -subtertian -subtest -subtests -subtetanic -subtetanical -subtext -subtexts -subthalamic -subthalamus -subtheme -subthoracal -subthoracic -subthreshold -subthrill -subtile -subtilely -subtileness -subtiler -subtilest -subtiliate -subtiliation -subtilin -subtilis -subtilisation -subtilise -subtilised -subtiliser -subtilising -subtilism -subtilist -subtility -subtilities -subtilization -subtilize -subtilized -subtilizer -subtilizing -subtill -subtillage -subtilly -subtilty -subtilties -subtympanitic -subtype -subtypes -subtypical -subtitle -sub-title -subtitled -subtitles -subtitling -subtitular -subtle -subtle-brained -subtle-cadenced -subtle-fingered -subtle-headed -subtlely -subtle-looking -subtle-meshed -subtle-minded -subtleness -subtle-nosed -subtle-paced -subtler -subtle-scented -subtle-shadowed -subtle-souled -subtlest -subtle-thoughted -subtlety -subtleties -subtle-tongued -subtle-witted -subtly -subtlist -subtone -subtones -subtonic -subtonics -subtopia -subtopic -subtopics -subtorrid -subtotal -subtotaled -subtotaling -subtotalled -subtotally -subtotalling -subtotals -subtotem -subtotemic -subtower -subtract -subtracted -subtracter -subtracting -subtraction -subtractions -subtractive -subtractor -subtractors -subtractor's -subtracts -subtrahend -subtrahends -subtrahend's -subtray -subtranslucence -subtranslucency -subtranslucent -subtransparent -subtransparently -subtransparentness -subtransversal -subtransversally -subtransverse -subtransversely -subtrapezoid -subtrapezoidal -subtread -subtreasurer -sub-treasurer -subtreasurership -subtreasury -sub-treasury -subtreasuries -subtree -subtrees -subtree's -subtrench -subtrend -subtriangular -subtriangularity -subtriangulate -subtribal -subtribe -subtribes -subtribual -subtrifid -subtrigonal -subtrihedral -subtriplicate -subtriplicated -subtriplication -subtriquetrous -subtrist -subtrochanteric -subtrochlear -subtrochleariform -subtropic -subtropical -subtropics -subtrousers -subtrude -subtruncate -subtruncated -subtruncation -subtrunk -subtuberant -subtubiform -subtunic -subtunics -subtunnel -subturbary -subturriculate -subturriculated -subtutor -subtutorship -subtwined -subucula -subulate -subulated -subulicorn -Subulicornia -subuliform -subultimate -subumbellar -subumbellate -subumbellated -subumbelliferous -subumbilical -subumbonal -subumbonate -subumbral -subumbrella -subumbrellar -subuncinal -subuncinate -subuncinated -subunequal -subunequally -subunequalness -subungual -subunguial -Subungulata -subungulate -subunit -subunits -subunit's -subuniversal -subuniverse -suburb -suburban -suburbandom -suburbanhood -suburbanisation -suburbanise -suburbanised -suburbanising -suburbanism -suburbanite -suburbanites -suburbanity -suburbanities -suburbanization -suburbanize -suburbanized -suburbanizing -suburbanly -suburbans -suburbed -suburbia -suburbian -suburbias -suburbican -suburbicary -suburbicarian -suburbs -suburb's -suburethral -subursine -subutopian -subvaginal -subvaluation -subvarietal -subvariety -subvarieties -subvassal -subvassalage -subvein -subvendee -subvene -subvened -subvenes -subvening -subvenize -subvention -subventionary -subventioned -subventionize -subventions -subventitious -subventive -subventral -subventrally -subventricose -subventricous -subventricular -subvermiform -subversal -subverse -subversed -subversion -subversionary -subversions -subversive -subversively -subversiveness -subversives -subversivism -subvert -subvertebral -subvertebrate -subverted -subverter -subverters -subvertible -subvertical -subvertically -subverticalness -subverticilate -subverticilated -subverticillate -subverting -subverts -subvesicular -subvestment -subvicar -subvicars -subvicarship -subvii -subvillain -subviral -subvirate -subvirile -subvisible -subvitalisation -subvitalised -subvitalization -subvitalized -subvitreous -subvitreously -subvitreousness -subvocal -subvocally -subvola -subway -subwayed -subways -subway's -subwar -sub-war -subwarden -subwardenship -subwater -subwealthy -subweight -subwink -subworker -subworkman -subworkmen -subzero -sub-zero -subzygomatic -subzonal -subzonary -subzone -subzones -Sucaryl -succade -succah -succahs -Succasunna -succedanea -succedaneous -succedaneum -succedaneums -succedent -succeed -succeedable -succeeded -succeeder -succeeders -succeeding -succeedingly -succeeds -succent -succentor -succenturiate -succenturiation -succes -succesful -succesive -success -successes -successful -successfully -successfulness -succession -successional -successionally -successionist -successionless -successions -succession's -successive -successively -successiveness -successivity -successless -successlessly -successlessness -successor -successoral -successory -successors -successor's -successorship -succi -succiferous -succin -succin- -succinamate -succinamic -succinamide -succinanil -succinate -succinct -succincter -succinctest -succinctly -succinctness -succinctnesses -succinctory -succinctoria -succinctorium -succincture -succinea -succinic -succiniferous -succinyl -succinylcholine -succinyls -succinylsulfathiazole -succinylsulphathiazole -succinimid -succinimide -succinite -succino- -succinol -succinoresinol -succinosulphuric -succinous -succintorium -succinum -Succisa -succise -succivorous -succor -succorable -succored -succorer -succorers -succorful -succory -succories -succoring -succorless -succorrhea -succorrhoea -succors -succose -succotash -succotashes -Succoth -succour -succourable -succoured -succourer -succourful -succouring -succourless -succours -succous -succub -succuba -succubae -succube -succubi -succubine -succubous -Succubus -succubuses -succudry -succula -succulence -succulences -succulency -succulencies -succulent -succulently -succulentness -succulents -succulous -succumb -succumbed -succumbence -succumbency -succumbent -succumber -succumbers -succumbing -succumbs -succursal -succursale -succus -succuss -succussation -succussatory -succussed -succusses -succussing -succussion -succussive -such -such-and-such -Suches -suchlike -such-like -suchness -suchnesses -Suchos -Su-chou -Suchta -suchwise -suci -Sucy -sucivilized -suck -suck- -suckable -suckabob -suckage -suckauhock -suck-bottle -sucked -suck-egg -sucken -suckener -suckeny -sucker -suckered -suckerel -suckerfish -suckerfishes -suckering -suckerlike -suckers -sucket -suckfish -suckfishes -suckhole -suck-in -sucking -sucking-fish -sucking-pig -sucking-pump -suckle -sucklebush -suckled -suckler -sucklers -suckles -suckless -Suckling -sucklings -Suckow -sucks -suckstone -suclat -sucramin -sucramine -sucrase -sucrases -sucrate -Sucre -sucres -sucrier -sucriers -sucro- -sucroacid -sucrose -sucroses -suction -suctional -suctions -Suctoria -suctorial -suctorian -suctorious -sucupira -sucuri -sucury -sucuriu -sucuruju -sud -sudadero -Sudafed -sudamen -sudamina -sudaminal -Sudan -Sudanese -Sudani -Sudanian -Sudanic -sudary -sudaria -sudaries -sudarium -sudate -sudation -sudations -sudatory -sudatoria -sudatories -sudatorium -Sudbury -Sudburian -sudburite -sudd -sudden -sudden-beaming -suddenly -suddenness -suddennesses -suddens -sudden-starting -suddenty -sudden-whelming -Sudder -Sudderth -suddy -suddle -sudds -sude -Sudermann -sudes -Sudeten -Sudetenland -Sudetes -Sudhir -Sudic -sudiform -Sudith -Sudlersville -Sudnor -sudor -sudoral -sudoresis -sudoric -sudoriferous -sudoriferousness -sudorific -sudoriparous -sudorous -sudors -Sudra -suds -sudsed -sudser -sudsers -sudses -sudsy -sudsier -sudsiest -sudsing -sudsless -sudsman -sudsmen -Sue -Suecism -Sueco-gothic -sued -suede -sueded -suedes -suedine -sueding -suegee -suey -Suellen -Suelo -suent -suer -Suerre -suers -suerte -sues -Suessiones -suet -suety -Suetonius -suets -Sueve -Suevi -Suevian -Suevic -Suez -suf -Sufeism -Suff -suffari -suffaris -suffect -suffection -suffer -sufferable -sufferableness -sufferably -sufferance -sufferant -suffered -sufferer -sufferers -suffering -sufferingly -sufferings -Suffern -suffers -suffete -suffetes -suffice -sufficeable -sufficed -sufficer -sufficers -suffices -sufficience -sufficiency -sufficiencies -sufficient -sufficiently -sufficientness -sufficing -sufficingly -sufficingness -suffiction -Suffield -suffisance -suffisant -suffix -suffixal -suffixation -suffixations -suffixed -suffixer -suffixes -suffixing -suffixion -suffixment -sufflaminate -sufflamination -sufflate -sufflated -sufflates -sufflating -sufflation -sufflue -suffocate -suffocated -suffocates -suffocating -suffocatingly -suffocation -suffocations -suffocative -Suffolk -Suffr -Suffr. -suffragan -suffraganal -suffraganate -suffragancy -suffraganeous -suffragans -suffragant -suffragate -suffragatory -suffrage -suffrages -suffragette -suffragettes -suffragettism -suffragial -suffragism -suffragist -suffragistic -suffragistically -suffragists -suffragitis -suffrago -suffrain -suffront -suffrutescent -suffrutex -suffrutices -suffruticose -suffruticous -suffruticulose -suffumigate -suffumigated -suffumigating -suffumigation -suffusable -suffuse -suffused -suffusedly -suffuses -suffusing -suffusion -suffusions -suffusive -Sufi -Sufiism -Sufiistic -Sufis -Sufism -Sufistic -Sufu -SUG -sugamo -sugan -sugann -Sugar -sugar-baker -sugarberry -sugarberries -sugarbird -sugar-bird -sugar-boiling -sugarbush -sugar-bush -sugar-candy -sugarcane -sugar-cane -sugarcanes -sugar-chopped -sugar-chopper -sugarcoat -sugar-coat -sugarcoated -sugar-coated -sugarcoating -sugar-coating -sugarcoats -sugar-colored -sugar-cured -sugar-destroying -sugared -sugarelly -sugarer -sugar-growing -sugarhouse -sugarhouses -sugary -sugarier -sugaries -sugariest -sugar-yielding -sugariness -sugaring -sugarings -sugar-laden -Sugarland -sugarless -sugarlike -sugar-lipped -sugar-loaded -Sugarloaf -sugar-loaf -sugar-loafed -sugar-loving -sugar-making -sugar-maple -sugar-mouthed -sugarplate -sugarplum -sugar-plum -sugarplums -sugar-producing -sugars -sugarsop -sugar-sop -sugarsweet -sugar-sweet -sugar-teat -sugar-tit -sugar-topped -Sugartown -Sugartree -sugar-water -sugarworks -sugat -Sugden -sugent -sugescent -sugg -suggan -suggest -suggesta -suggestable -suggested -suggestedness -suggester -suggestibility -suggestible -suggestibleness -suggestibly -suggesting -suggestingly -suggestion -suggestionability -suggestionable -suggestionism -suggestionist -suggestionize -suggestions -suggestion's -suggestive -suggestively -suggestiveness -suggestivenesses -suggestivity -suggestment -suggestor -suggestress -suggests -suggestum -suggil -suggillate -suggillation -sugh -sughed -sughing -sughs -sugi -sugih -Sugihara -sugillate -sugis -sugsloot -suguaro -Suh -Suhail -Suharto -suhuaro -Sui -suicidal -suicidalism -suicidally -suicidalwise -suicide -suicided -suicides -suicide's -suicidical -suiciding -suicidism -suicidist -suicidology -suicism -SUID -Suidae -suidian -suiform -Suiy -suikerbosch -suiline -suilline -Suilmann -suimate -Suina -suine -suing -suingly -suint -suints -suyog -Suiogoth -Suiogothic -Suiones -Suisei -suisimilar -Suisse -suist -suit -suitability -suitabilities -suitable -suitableness -suitably -suitcase -suitcases -suitcase's -suit-dress -suite -suited -suitedness -suiter -suiters -suites -suithold -suity -suiting -suitings -suitly -suitlike -suitor -suitoress -suitors -suitor's -suitorship -suitress -suits -suit's -suivante -suivez -sujee-mujee -suji -suji-muji -Suk -Sukarnapura -Sukarno -Sukey -Sukhum -Sukhumi -Suki -sukiyaki -sukiyakis -Sukin -sukkah -sukkahs -sukkenye -sukkot -Sukkoth -Suku -Sula -Sulaba -Sulafat -Sulaib -Sulamith -Sulawesi -sulbasutra -sulcal -sulcalization -sulcalize -sulcar -sulcate -sulcated -sulcation -sulcato- -sulcatoareolate -sulcatocostate -sulcatorimose -sulci -sulciform -sulcomarginal -sulcular -sulculate -sulculus -sulcus -suld -suldan -suldans -sulea -Suleiman -sulf- -sulfa -sulfacid -sulfadiazine -sulfadimethoxine -sulfaguanidine -sulfamate -sulfamerazin -sulfamerazine -sulfamethazine -sulfamethylthiazole -sulfamic -sulfamidate -sulfamide -sulfamidic -sulfamyl -sulfamine -sulfaminic -sulfanilamide -sulfanilic -sulfanilylguanidine -sulfantimonide -sulfapyrazine -sulfapyridine -sulfaquinoxaline -sulfarsenide -sulfarsenite -sulfarseniuret -sulfarsphenamine -sulfas -Sulfasuxidine -sulfatase -sulfate -sulfated -sulfates -Sulfathalidine -sulfathiazole -sulfatic -sulfating -sulfation -sulfatization -sulfatize -sulfatized -sulfatizing -sulfato -sulfazide -sulfhydrate -sulfhydric -sulfhydryl -sulfid -sulfide -sulfides -sulfids -sulfinate -sulfindigotate -sulfindigotic -sulfindylic -sulfine -sulfinic -sulfinide -sulfinyl -sulfinyls -sulfion -sulfionide -sulfisoxazole -sulfite -sulfites -sulfitic -sulfito -sulfo -sulfoacid -sulfoamide -sulfobenzide -sulfobenzoate -sulfobenzoic -sulfobismuthite -sulfoborite -sulfocarbamide -sulfocarbimide -sulfocarbolate -sulfocarbolic -sulfochloride -sulfocyan -sulfocyanide -sulfofication -sulfogermanate -sulfohalite -sulfohydrate -sulfoindigotate -sulfoleic -sulfolysis -sulfomethylic -sulfon- -Sulfonal -sulfonals -sulfonamic -sulfonamide -sulfonate -sulfonated -sulfonating -sulfonation -sulfonator -sulfone -sulfonephthalein -sulfones -sulfonethylmethane -sulfonic -sulfonyl -sulfonyls -sulfonylurea -sulfonium -sulfonmethane -sulfophthalein -sulfopurpurate -sulfopurpuric -sulforicinate -sulforicinic -sulforicinoleate -sulforicinoleic -sulfoselenide -sulfosilicide -sulfostannide -sulfotelluride -sulfourea -sulfovinate -sulfovinic -sulfowolframic -sulfoxide -sulfoxylate -sulfoxylic -sulfoxism -sulfur -sulfurage -sulfuran -sulfurate -sulfuration -sulfurator -sulfur-bottom -sulfur-colored -sulfurea -sulfured -sulfureous -sulfureously -sulfureousness -sulfuret -sulfureted -sulfureting -sulfurets -sulfuretted -sulfuretting -sulfur-flower -sulfury -sulfuric -sulfur-yellow -sulfuryl -sulfuryls -sulfuring -sulfurization -sulfurize -sulfurized -sulfurizing -sulfurosyl -sulfurous -sulfurously -sulfurousness -sulfurs -Sulidae -Sulides -suling -Suliote -sulk -sulka -sulked -sulker -sulkers -sulky -sulkier -sulkies -sulkiest -sulkily -sulkylike -sulkiness -sulkinesses -sulking -sulky-shaped -sulks -sull -Sulla -sullage -sullages -Sullan -sullen -sullen-browed -sullen-eyed -sullener -sullenest -sullenhearted -sullenly -sullen-looking -sullen-natured -sullenness -sullennesses -sullens -sullen-seeming -sullen-sour -sullen-visaged -sullen-wise -Sully -sulliable -sulliage -sullied -sulliedness -sullies -Sulligent -sullying -Sully-Prudhomme -Sullivan -sullow -sulph- -sulpha -sulphacid -sulphadiazine -sulphaguanidine -sulphaldehyde -sulphamate -sulphamerazine -sulphamic -sulphamid -sulphamidate -sulphamide -sulphamidic -sulphamyl -sulphamin -sulphamine -sulphaminic -sulphamino -sulphammonium -sulphanilamide -sulphanilate -sulphanilic -sulphantimonate -sulphantimonial -sulphantimonic -sulphantimonide -sulphantimonious -sulphantimonite -sulphapyrazine -sulphapyridine -sulpharsenate -sulpharseniate -sulpharsenic -sulpharsenid -sulpharsenide -sulpharsenious -sulpharsenite -sulpharseniuret -sulpharsphenamine -sulphas -sulphatase -sulphate -sulphated -sulphates -sulphathiazole -sulphatic -sulphating -sulphation -sulphatization -sulphatize -sulphatized -sulphatizing -sulphato -sulphato- -sulphatoacetic -sulphatocarbonic -sulphazid -sulphazide -sulphazotize -sulphbismuthite -sulphethylate -sulphethylic -sulphhemoglobin -sulphichthyolate -sulphid -sulphidation -sulphide -sulphides -sulphidic -sulphidize -sulphydrate -sulphydric -sulphydryl -sulphids -sulphimide -sulphin -sulphinate -sulphindigotate -sulphindigotic -sulphine -sulphinic -sulphinide -sulphinyl -sulphion -sulphisoxazole -sulphitation -sulphite -sulphites -sulphitic -sulphito -sulphmethemoglobin -sulpho -sulpho- -sulphoacetic -sulpho-acid -sulphoamid -sulphoamide -sulphoantimonate -sulphoantimonic -sulphoantimonious -sulphoantimonite -sulphoarsenic -sulphoarsenious -sulphoarsenite -sulphoazotize -sulphobenzid -sulphobenzide -sulphobenzoate -sulphobenzoic -sulphobismuthite -sulphoborite -sulphobutyric -sulphocarbamic -sulphocarbamide -sulphocarbanilide -sulphocarbimide -sulphocarbolate -sulphocarbolic -sulphocarbonate -sulphocarbonic -sulphochloride -sulphochromic -sulphocyan -sulphocyanate -sulphocyanic -sulphocyanide -sulphocyanogen -sulphocinnamic -sulphodichloramine -sulphofy -sulphofication -sulphogallic -sulphogel -sulphogermanate -sulphogermanic -sulphohalite -sulphohaloid -sulphohydrate -sulphoichthyolate -sulphoichthyolic -sulphoindigotate -sulphoindigotic -sulpholeate -sulpholeic -sulpholipin -sulpholysis -sulphonal -sulphonalism -sulphonamic -sulphonamid -sulphonamide -sulphonamido -sulphonamine -sulphonaphthoic -sulphonate -sulphonated -sulphonating -sulphonation -sulphonator -sulphoncyanine -sulphone -sulphonephthalein -sulphones -sulphonethylmethane -sulphonic -sulphonyl -sulphonium -sulphonmethane -sulphonphthalein -sulphoparaldehyde -sulphophenyl -sulphophosphate -sulphophosphite -sulphophosphoric -sulphophosphorous -sulphophthalein -sulphophthalic -sulphopropionic -sulphoproteid -sulphopupuric -sulphopurpurate -sulphopurpuric -sulphoricinate -sulphoricinic -sulphoricinoleate -sulphoricinoleic -sulphosalicylic -sulpho-salt -sulphoselenide -sulphoselenium -sulphosilicide -sulphosol -sulphostannate -sulphostannic -sulphostannide -sulphostannite -sulphostannous -sulphosuccinic -sulphosulphurous -sulphotannic -sulphotelluride -sulphoterephthalic -sulphothionyl -sulphotoluic -sulphotungstate -sulphotungstic -sulphouinic -sulphourea -sulphovanadate -sulphovinate -sulphovinic -sulphowolframic -sulphoxid -sulphoxide -sulphoxylate -sulphoxylic -sulphoxyphosphate -sulphoxism -sulphozincate -Sulphur -sulphurage -sulphuran -sulphurate -sulphurated -sulphurating -sulphuration -sulphurator -sulphur-bearing -sulphur-bellied -sulphur-bottom -sulphur-breasted -sulphur-colored -sulphur-containing -sulphur-crested -sulphurea -sulphurean -sulphured -sulphureity -sulphureo- -sulphureo-aerial -sulphureonitrous -sulphureosaline -sulphureosuffused -sulphureous -sulphureously -sulphureousness -sulphureovirescent -sulphuret -sulphureted -sulphureting -sulphuretted -sulphuretting -sulphur-flower -sulphur-hued -sulphury -sulphuric -sulphuriferous -sulphuryl -sulphur-impregnated -sulphuring -sulphurious -sulphurity -sulphurization -sulphurize -sulphurized -sulphurizing -sulphurless -sulphurlike -sulphurosyl -sulphurou -sulphurous -sulphurously -sulphurousness -sulphurproof -sulphurs -sulphur-scented -sulphur-smoking -sulphur-tinted -sulphur-tipped -sulphurweed -sulphurwort -Sulpician -Sulpicius -sultam -sultan -Sultana -Sultanabad -sultanas -sultanaship -sultanate -sultanated -sultanates -sultanating -sultane -sultanesque -sultaness -sultany -sultanian -sultanic -sultanin -sultanism -sultanist -sultanize -sultanlike -sultanry -sultans -sultan's -sultanship -sultone -sultry -sultrier -sultriest -sultrily -sultriness -Sulu -Suluan -sulung -Sulus -sulvanite -sulvasutra -SUM -Sumac -sumach -sumachs -sumacs -sumage -Sumak -Sumas -Sumass -Sumatra -Sumatran -sumatrans -Sumba -sumbal -Sumbawa -sumbul -sumbulic -Sumdum -sumen -Sumer -Sumerco -Sumerduck -Sumeria -Sumerian -Sumerlin -Sumero-akkadian -Sumerology -Sumerologist -sumi -Sumy -Sumiton -sumitro -sumless -sumlessness -summa -summability -summable -summae -summage -summand -summands -summand's -Summanus -summar -summary -summaries -summarily -summariness -summary's -summarisable -summarisation -summarise -summarised -summariser -summarising -summarist -summarizable -summarization -summarizations -summarization's -summarize -summarized -summarizer -summarizes -summarizing -summas -summat -summate -summated -summates -summating -summation -summational -summations -summation's -summative -summatory -summed -Summer -summerbird -summer-bird -summer-blanched -summer-breathing -summer-brewed -summer-bright -summercastle -summer-cloud -Summerdale -summer-dried -summered -summerer -summer-fallow -summer-fed -summer-felled -Summerfield -summer-flowering -summergame -summer-grazed -summerhead -summerhouse -summer-house -summerhouses -summery -summerier -summeriest -summeriness -summering -summerings -summerish -summerite -summerize -summerlay -Summerland -summer-leaping -Summerlee -summerless -summerly -summerlike -summer-like -summerliness -summerling -summer-lived -summer-loving -summer-made -summerproof -summer-ripening -summerroom -Summers -summer's -summersault -summer-seeming -summerset -Summershade -summer-shrunk -Summerside -summer-staying -summer-stir -summer-stricken -Summersville -summer-sweet -summer-swelling -summer-threshed -summertide -summer-tide -summer-tilled -summertime -summer-time -Summerton -Summertown -summertree -summer-up -Summerville -summerward -summerweight -summer-weight -summerwood -summing -summings -summing-up -summist -Summit -summital -summity -summitless -summitry -summitries -summits -Summitville -summon -summonable -summoned -summoner -summoners -summoning -summoningly -Summons -summonsed -summonses -summonsing -summons-proof -summula -summulae -summulist -summut -Sumneytown -Sumner -Sumo -sumoist -sumos -sump -sumpage -sumper -sumph -sumphy -sumphish -sumphishly -sumphishness -sumpit -sumpitan -sumple -sumpman -sumps -sumpsimus -sumpt -Sumpter -sumpters -sumption -sumptious -sumptuary -sumptuosity -sumptuous -sumptuously -sumptuousness -sumpture -sumpweed -sumpweeds -Sumrall -sums -sum's -Sumter -Sumterville -sum-total -sum-up -SUN -sun-affronting -Sunay -Sunapee -sun-arrayed -sun-awakened -sunback -sunbake -sunbaked -sun-baked -sunbath -sunbathe -sun-bathe -sunbathed -sun-bathed -sunbather -sunbathers -sunbathes -sunbathing -sunbaths -sunbeam -sunbeamed -sunbeamy -sunbeams -sunbeam's -sun-beat -sun-beaten -sun-begotten -Sunbelt -sunbelts -sunberry -sunberries -sunbird -sunbirds -sun-blackened -sun-blanched -sunblind -sun-blind -sunblink -sun-blistered -sun-blown -sunbonnet -sunbonneted -sunbonnets -sun-born -sunbow -sunbows -sunbreak -sunbreaker -sun-bred -Sunbright -sun-bright -sun-bringing -sun-broad -sun-bronzed -sun-brown -sun-browned -Sunburg -Sunbury -Sunbury-on-Thames -sunburn -sunburned -sunburnedness -sunburning -sunburnproof -sunburns -sunburnt -sunburntness -Sunburst -sunbursts -suncherchor -suncke -sun-clear -sun-confronting -Suncook -sun-courting -sun-cracked -sun-crowned -suncup -sun-cure -sun-cured -Sunda -sundae -sundaes -Sunday -Sundayfied -Sunday-go-to-meeting -Sunday-go-to-meetings -Sundayish -Sundayism -Sundaylike -Sundayness -Sundayproof -Sundays -sunday's -sunday-school -Sunday-schoolish -Sundance -Sundanese -Sundanesian -sundang -sundar -sundaresan -sundari -sun-dazzling -Sundberg -sundek -sun-delighting -sunder -sunderable -sunderance -sundered -sunderer -sunderers -sundering -Sunderland -sunderly -sunderment -sunders -sunderwise -sun-descended -sundew -sundews -SUNDIAG -sundial -sun-dial -sundials -sundik -Sundin -sundog -sundogs -sundown -sundowner -sundowning -sundowns -sundra -sun-drawn -sundress -sundri -sundry -sun-dry -sundry-colored -sun-dried -sundries -sundriesman -sundrily -sundryman -sundrymen -sundriness -sundry-patterned -sundry-shaped -sundrops -Sundstrom -Sundsvall -sune -sun-eclipsing -Suneya -sun-eyed -SUNET -sun-excluding -sun-expelling -sun-exposed -sun-faced -sunfall -sunfast -sun-feathered -Sunfield -sun-filled -sunfish -sun-fish -sunfisher -sunfishery -sunfishes -sun-flagged -sun-flaring -sun-flooded -sunflower -sunflowers -sunfoil -sun-fringed -Sung -sungar -Sungari -sun-gazed -sun-gazing -sungha -Sung-hua -sun-gilt -Sungkiang -sunglade -sunglass -sunglasses -sunglo -sunglow -sunglows -sun-god -sun-graced -sun-graze -sun-grazer -sungrebe -sun-grebe -sun-grown -sunhat -sun-heated -SUNY -Sunyata -sunyie -Sunil -sun-illumined -sunk -sunken -sunket -sunkets -sunkie -sun-kissed -sunkland -sunlamp -sunlamps -Sunland -sunlands -sunless -sunlessly -sunlessness -sunlet -sunlight -sunlighted -sunlights -sunlike -sunlit -sun-loved -sun-loving -sun-made -Sunman -sun-marked -sun-melted -sunn -Sunna -sunnas -sunned -Sunni -Sunny -Sunniah -sunnyasee -sunnyasse -sunny-clear -sunny-colored -sunnier -sunniest -sunny-faced -sunny-haired -sunnyhearted -sunnyheartedness -sunnily -sunny-looking -sunny-natured -sunniness -sunning -sunny-red -Sunnyside -Sunnism -Sunnysouth -sunny-spirited -sunny-sweet -Sunnite -Sunnyvale -sunny-warm -sunns -sunnud -sun-nursed -Sunol -sun-outshining -sun-pain -sun-painted -sun-paled -sun-praising -sun-printed -sun-projected -sunproof -sunquake -Sunray -sun-ray -sun-red -sun-resembling -sunrise -sunrises -sunrising -sunroof -sunroofs -sunroom -sunrooms -sunrose -suns -sun's -sunscald -sunscalds -sunscorch -sun-scorched -sun-scorching -sunscreen -sunscreening -sunseeker -sunset -sunset-blue -sunset-flushed -sunset-lighted -sunset-purpled -sunset-red -sunset-ripened -sunsets -sunsetty -sunsetting -sunshade -sunshades -sun-shading -Sunshine -sunshineless -sunshines -sunshine-showery -sunshiny -sunshining -sun-shot -sun-shunning -sunsmit -sunsmitten -sun-sodden -sun-specs -sunspot -sun-spot -sunspots -sunspotted -sunspottedness -sunspottery -sunspotty -sunsquall -sunstay -sun-staining -sunstar -sunstead -sun-steeped -sunstone -sunstones -sunstricken -sunstroke -sunstrokes -sunstruck -sun-struck -sunsuit -sunsuits -sun-swart -sun-swept -sunt -suntan -suntanned -sun-tanned -suntanning -suntans -sun-tight -suntrap -sunup -sun-up -sunups -SUNVIEW -sunway -sunways -sunward -sunwards -sun-warm -sun-warmed -sunweed -sunwise -sun-withered -Suomi -Suomic -suovetaurilia -Sup -supa -Supai -supari -Supat -supawn -supe -supellectile -supellex -Supen -super -super- -superabduction -superabhor -superability -superable -superableness -superably -superabnormal -superabnormally -superabominable -superabominableness -superabominably -superabomination -superabound -superabstract -superabstractly -superabstractness -superabsurd -superabsurdity -superabsurdly -superabsurdness -superabundance -superabundances -superabundancy -superabundant -superabundantly -superaccession -superaccessory -superaccommodating -superaccomplished -superaccrue -superaccrued -superaccruing -superaccumulate -superaccumulated -superaccumulating -superaccumulation -superaccurate -superaccurately -superaccurateness -superacetate -superachievement -superacid -super-acid -superacidity -superacidulated -superacknowledgment -superacquisition -superacromial -superactivate -superactivated -superactivating -superactive -superactively -superactiveness -superactivity -superactivities -superacute -superacutely -superacuteness -superadaptable -superadaptableness -superadaptably -superadd -superadded -superadding -superaddition -superadditional -superadds -superadequate -superadequately -superadequateness -superadjacent -superadjacently -superadministration -superadmirable -superadmirableness -superadmirably -superadmiration -superadorn -superadornment -superaerial -superaerially -superaerodynamics -superaesthetical -superaesthetically -superaffiliation -superaffiuence -superaffluence -superaffluent -superaffluently -superaffusion -superagency -superagencies -superaggravation -superagitation -superagrarian -superalbal -superalbuminosis -superalimentation -superalkaline -superalkalinity -superalloy -superallowance -superaltar -superaltern -superambition -superambitious -superambitiously -superambitiousness -superambulacral -superanal -superangelic -superangelical -superangelically -superanimal -superanimality -superannate -superannated -superannuate -superannuated -superannuating -superannuation -superannuitant -superannuity -superannuities -superapology -superapologies -superappreciation -superaqual -superaqueous -superarbiter -superarbitrary -superarctic -superarduous -superarduously -superarduousness -superarrogance -superarrogant -superarrogantly -superarseniate -superartificial -superartificiality -superartificially -superaspiration -superassertion -superassociate -superassume -superassumed -superassuming -superassumption -superastonish -superastonishment -superate -superathlete -superathletes -superattachment -superattainable -superattainableness -superattainably -superattendant -superattraction -superattractive -superattractively -superattractiveness -superauditor -superaural -superaverage -superaverageness -superaveraness -superavit -superaward -superaxillary -superazotation -superb -superbad -superbazaar -superbazooka -superbelief -superbelievable -superbelievableness -superbelievably -superbeloved -superbenefit -superbenevolence -superbenevolent -superbenevolently -superbenign -superbenignly -superber -superbest -superbia -superbias -superbious -superbity -superblessed -superblessedness -superbly -superblock -superblunder -superbness -superbold -superboldly -superboldness -superbomb -superbombs -superborrow -superbrain -superbrave -superbravely -superbraveness -superbrute -superbuild -superbungalow -superbusy -superbusily -supercabinet -supercalender -supercallosal -supercandid -supercandidly -supercandidness -supercanine -supercanonical -supercanonization -supercanopy -supercanopies -supercapability -supercapabilities -supercapable -supercapableness -supercapably -supercapital -supercaption -supercar -supercarbonate -supercarbonization -supercarbonize -supercarbureted -supercargo -supercargoes -supercargos -supercargoship -supercarpal -supercarrier -supercatastrophe -supercatastrophic -supercatholic -supercatholically -supercausal -supercaution -supercavitation -supercede -superceded -supercedes -superceding -supercelestial -supercelestially -supercensure -supercentral -supercentrifuge -supercerebellar -supercerebral -supercerebrally -superceremonious -superceremoniously -superceremoniousness -supercharge -supercharged -supercharger -superchargers -supercharges -supercharging -superchemical -superchemically -superchery -supercherie -superchivalrous -superchivalrously -superchivalrousness -Super-christian -supercicilia -supercycle -supercilia -superciliary -superciliosity -supercilious -superciliously -superciliousness -supercilium -supercynical -supercynically -supercynicalness -supercity -supercivil -supercivilization -supercivilized -supercivilly -superclaim -superclass -superclassified -superclean -supercloth -supercluster -supercoincidence -supercoincident -supercoincidently -supercold -supercolossal -supercolossally -supercolumnar -supercolumniation -supercombination -supercombing -supercommendation -supercommentary -supercommentaries -supercommentator -supercommercial -supercommercially -supercommercialness -supercompetition -supercomplete -supercomplex -supercomplexity -supercomplexities -supercomprehension -supercompression -supercomputer -supercomputers -supercomputer's -superconception -superconduct -superconducting -superconduction -superconductive -superconductivity -superconductor -superconductors -superconfidence -superconfident -superconfidently -superconfirmation -superconformable -superconformableness -superconformably -superconformist -superconformity -superconfused -superconfusion -supercongested -supercongestion -superconscious -superconsciousness -superconsecrated -superconsequence -superconsequency -superconservative -superconservatively -superconservativeness -superconstitutional -superconstitutionally -supercontest -supercontribution -supercontrol -superconvenient -supercool -supercooled -super-cooling -supercop -supercordial -supercordially -supercordialness -supercorporation -supercow -supercredit -supercrescence -supercrescent -supercretaceous -supercrime -supercriminal -supercriminally -supercritic -supercritical -supercritically -supercriticalness -supercrowned -supercrust -supercube -supercultivated -superculture -supercurious -supercuriously -supercuriousness -superdainty -superdanger -superdebt -superdeclamatory -super-decompound -superdecorated -superdecoration -superdeficit -superdeity -superdeities -superdejection -superdelegate -superdelicate -superdelicately -superdelicateness -superdemand -superdemocratic -superdemocratically -superdemonic -superdemonstration -superdense -superdensity -superdeposit -superdesirous -superdesirously -superdevelopment -superdevilish -superdevilishly -superdevilishness -superdevotion -superdiabolical -superdiabolically -superdiabolicalness -superdicrotic -superdifficult -superdifficultly -superdying -superdiplomacy -superdirection -superdiscount -superdistention -superdistribution -superdividend -superdivine -superdivision -superdoctor -superdominant -superdomineering -superdonation -superdose -superdramatist -superdreadnought -superdubious -superdubiously -superdubiousness -superduper -super-duper -superduplication -superdural -superearthly -supereconomy -supereconomies -supered -superedify -superedification -supereducated -supereducation -supereffective -supereffectively -supereffectiveness -superefficiency -superefficiencies -superefficient -supereffluence -supereffluent -supereffluently -superego -superegos -superego's -superelaborate -superelaborately -superelaborateness -superelastic -superelastically -superelated -superelegance -superelegancy -superelegancies -superelegant -superelegantly -superelementary -superelevate -superelevated -superelevation -supereligibility -supereligible -supereligibleness -supereligibly -supereloquence -supereloquent -supereloquently -supereminence -supereminency -supereminent -supereminently -superemphasis -superemphasize -superemphasized -superemphasizing -superempirical -superencipher -superencipherment -superendorse -superendorsed -superendorsement -superendorsing -superendow -superenergetic -superenergetically -superenforcement -superengrave -superengraved -superengraving -superenrollment -superenthusiasm -superenthusiasms -superenthusiastic -superepic -superepoch -superequivalent -supererogant -supererogantly -supererogate -supererogated -supererogating -supererogation -supererogative -supererogator -supererogatory -supererogatorily -superespecial -superessential -superessentially -superessive -superestablish -superestablishment -supereternity -superether -superethical -superethically -superethicalness -superethmoidal -superette -superevangelical -superevangelically -superevidence -superevident -superevidently -superexacting -superexalt -superexaltation -superexaminer -superexceed -superexceeding -superexcellence -superexcellency -superexcellent -superexcellently -superexceptional -superexceptionally -superexcitation -superexcited -superexcitement -superexcrescence -superexcrescent -superexcrescently -superexert -superexertion -superexiguity -superexist -superexistent -superexpand -superexpansion -superexpectation -superexpenditure -superexplicit -superexplicitly -superexport -superexpression -superexpressive -superexpressively -superexpressiveness -superexquisite -superexquisitely -superexquisiteness -superextend -superextension -superextol -superextoll -superextreme -superextremely -superextremeness -superextremity -superextremities -superfamily -superfamilies -superfan -superfancy -superfantastic -superfantastically -superfarm -superfast -superfat -superfecta -superfecundation -superfecundity -superfee -superfemale -superfeminine -superfemininity -superfervent -superfervently -superfetate -superfetated -superfetation -superfete -superfeudation -superfibrination -superfice -superficial -superficialism -superficialist -superficiality -superficialities -superficialize -superficially -superficialness -superficiary -superficiaries -superficie -superficies -superfidel -superfinance -superfinanced -superfinancing -superfine -superfineness -superfinical -superfinish -superfinite -superfinitely -superfiniteness -superfissure -superfit -superfitted -superfitting -superfix -superfixes -superfleet -superflexion -superfluent -superfluid -superfluidity -superfluitance -superfluity -superfluities -superfluity's -superfluous -superfluously -superfluousness -superflux -superfoliaceous -superfoliation -superfolly -superfollies -superformal -superformally -superformalness -superformation -superformidable -superformidableness -superformidably -Superfort -Superfortress -superfortunate -superfortunately -superfriendly -superfrontal -superfructified -superfulfill -superfulfillment -superfunction -superfunctional -superfuse -superfused -superfusibility -superfusible -superfusing -superfusion -supergaiety -supergalactic -supergalaxy -supergalaxies -supergallant -supergallantly -supergallantness -supergene -supergeneric -supergenerically -supergenerosity -supergenerous -supergenerously -supergenual -supergiant -supergyre -superglacial -superglorious -supergloriously -supergloriousness -superglottal -superglottally -superglottic -supergoddess -supergood -supergoodness -supergovern -supergovernment -supergovernments -supergraduate -supergrant -supergratify -supergratification -supergratified -supergratifying -supergravitate -supergravitated -supergravitating -supergravitation -supergroup -supergroups -superguarantee -superguaranteed -superguaranteeing -supergun -superhandsome -superhard -superhearty -superheartily -superheartiness -superheat -superheated -superheatedness -superheater -superheating -superheavy -superhelix -superheresy -superheresies -superhero -superheroes -superheroic -superheroically -superheroine -superheroines -superheros -superhet -superheterodyne -superhigh -superhighway -superhighways -superhypocrite -superhirudine -superhistoric -superhistorical -superhistorically -superhit -superhive -superhuman -superhumanity -superhumanize -superhumanized -superhumanizing -superhumanly -superhumanness -superhumans -superhumeral -Superi -superyacht -superial -superideal -superideally -superidealness -superignorant -superignorantly -superillustrate -superillustrated -superillustrating -superillustration -superimpend -superimpending -superimpersonal -superimpersonally -superimply -superimplied -superimplying -superimportant -superimportantly -superimposable -superimpose -superimposed -superimposes -superimposing -superimposition -superimpositions -superimposure -superimpregnated -superimpregnation -superimprobable -superimprobableness -superimprobably -superimproved -superincentive -superinclination -superinclusive -superinclusively -superinclusiveness -superincomprehensible -superincomprehensibleness -superincomprehensibly -superincrease -superincreased -superincreasing -superincumbence -superincumbency -superincumbent -superincumbently -superindependence -superindependent -superindependently -superindiction -superindictment -superindifference -superindifferent -superindifferently -superindignant -superindignantly -superindividual -superindividualism -superindividualist -superindividually -superinduce -superinduced -superinducement -superinducing -superinduct -superinduction -superindue -superindulgence -superindulgent -superindulgently -superindustry -superindustries -superindustrious -superindustriously -superindustriousness -superinenarrable -superinfection -superinfer -superinference -superinferred -superinferring -superinfeudation -superinfinite -superinfinitely -superinfiniteness -superinfirmity -superinfirmities -superinfluence -superinfluenced -superinfluencing -superinformal -superinformality -superinformalities -superinformally -superinfuse -superinfused -superinfusing -superinfusion -supering -superingenious -superingeniously -superingeniousness -superingenuity -superingenuities -superinitiative -superinjection -superinjustice -superinnocence -superinnocent -superinnocently -superinquisitive -superinquisitively -superinquisitiveness -superinsaniated -superinscribe -superinscribed -superinscribing -superinscription -superinsist -superinsistence -superinsistent -superinsistently -superinsscribed -superinsscribing -superinstitute -superinstitution -superintellectual -superintellectually -superintellectuals -superintelligence -superintelligences -superintelligent -superintend -superintendant -superintended -superintendence -superintendences -superintendency -superintendencies -superintendent -superintendential -superintendents -superintendent's -superintendentship -superintender -superintending -superintends -superintense -superintensely -superintenseness -superintensity -superintolerable -superintolerableness -superintolerably -superinundation -superinvolution -Superior -superioress -superior-general -superiority -superiorities -superiorly -superiorness -superiors -superior's -superiors-general -superiorship -superirritability -superius -superjacent -superjet -superjets -superjoined -superjudicial -superjudicially -superjunction -superjurisdiction -superjustification -superknowledge -superl -superl. -superlabial -superlaborious -superlaboriously -superlaboriousness -superlactation -superlay -superlain -superlapsarian -superlaryngeal -superlaryngeally -superlation -superlative -superlatively -superlativeness -superlatives -superlenient -superleniently -superlie -superlied -superlies -superlying -superlikelihood -superline -superliner -superload -superlocal -superlocally -superlogical -superlogicality -superlogicalities -superlogically -superloyal -superloyally -superlucky -superlunar -superlunary -superlunatical -superluxurious -superluxuriously -superluxuriousness -supermagnificent -supermagnificently -supermalate -supermale -Superman -supermanhood -supermanifest -supermanism -supermanly -supermanliness -supermannish -supermarginal -supermarginally -supermarine -supermarket -supermarkets -supermarket's -supermarvelous -supermarvelously -supermarvelousness -supermasculine -supermasculinity -supermaterial -supermathematical -supermathematically -supermaxilla -supermaxillary -supermechanical -supermechanically -supermedial -supermedially -supermedicine -supermediocre -supermen -supermental -supermentality -supermentally -supermetropolitan -supermilitary -supermini -superminis -supermishap -supermystery -supermysteries -supermixture -supermodern -supermodest -supermodestly -supermoisten -supermolecular -supermolecule -supermolten -supermom -supermoral -supermorally -supermorose -supermorosely -supermoroseness -supermotility -supermundane -supermunicipal -supermuscan -supernacular -supernaculum -supernal -supernalize -supernally -supernatant -supernatation -supernation -supernational -supernationalism -supernationalisms -supernationalist -supernationally -supernatural -supernaturaldom -supernaturalise -supernaturalised -supernaturalising -supernaturalism -supernaturalist -supernaturalistic -supernaturality -supernaturalize -supernaturalized -supernaturalizing -supernaturally -supernaturalness -supernature -supernecessity -supernecessities -supernegligence -supernegligent -supernegligently -supernormal -supernormality -supernormally -supernormalness -supernotable -supernotableness -supernotably -supernova -supernovae -supernovas -supernuity -supernumeral -supernumerary -supernumeraries -supernumerariness -supernumeraryship -supernumerous -supernumerously -supernumerousness -supernutrition -supero- -superoanterior -superobedience -superobedient -superobediently -superobese -superobject -superobjection -superobjectionable -superobjectionably -superobligation -superobstinate -superobstinately -superobstinateness -superoccipital -superoctave -superocular -superocularly -superodorsal -superoexternal -superoffensive -superoffensively -superoffensiveness -superofficious -superofficiously -superofficiousness -superofrontal -superointernal -superolateral -superomedial -supero-occipital -superoposterior -superopposition -superoptimal -superoptimist -superoratorical -superoratorically -superorbital -superordain -superorder -superordinal -superordinary -superordinate -superordinated -superordinating -superordination -superorganic -superorganism -superorganization -superorganize -superornament -superornamental -superornamentally -superosculate -superoutput -superovulation -superoxalate -superoxide -superoxygenate -superoxygenated -superoxygenating -superoxygenation -superparamount -superparasite -superparasitic -superparasitism -superparliamentary -superparticular -superpartient -superpassage -superpatience -superpatient -superpatiently -superpatriot -superpatriotic -superpatriotically -superpatriotism -superpatriotisms -superpatriots -superperfect -superperfection -superperfectly -superperson -superpersonal -superpersonalism -superpersonally -superpetrosal -superpetrous -superphysical -superphysicalness -superphysicposed -superphysicposing -superphlogisticate -superphlogistication -superphosphate -superpiety -superpigmentation -superpious -superpiously -superpiousness -superplane -superplanes -superplant -superplausible -superplausibleness -superplausibly -superplease -superplus -superpolymer -superpolite -superpolitely -superpoliteness -superpolitic -superponderance -superponderancy -superponderant -superpopulated -superpopulatedly -superpopulatedness -superpopulation -superport -superports -superposable -superpose -superposed -superposes -superposing -superposition -superpositions -superpositive -superpositively -superpositiveness -superpossition -superpower -superpowered -superpowerful -superpowers -superpraise -superpraised -superpraising -superprecarious -superprecariously -superprecariousness -superprecise -superprecisely -superpreciseness -superprelatical -superpreparation -superprepared -superpressure -superprinting -superpro -superprobability -superproduce -superproduced -superproducing -superproduction -superproportion -superprosperous -superpublicity -super-pumper -superpure -superpurgation -superpurity -superquadrupetal -superqualify -superqualified -superqualifying -superquote -superquoted -superquoting -superrace -superradical -superradically -superradicalness -superrational -superrationally -superreaction -superrealism -superrealist -superrefine -superrefined -superrefinement -superrefining -superreflection -superreform -superreformation -superrefraction -superregal -superregally -superregeneration -superregenerative -superregistration -superregulation -superreliance -superremuneration -superrenal -superrequirement -superrespectability -superrespectable -superrespectableness -superrespectably -superresponsibility -superresponsible -superresponsibleness -superresponsibly -superrestriction -superreward -superrheumatized -superrich -superrighteous -superrighteously -superrighteousness -superroyal -super-royal -superromantic -superromantically -supers -supersacerdotal -supersacerdotally -supersacral -supersacred -supersacrifice -supersafe -supersafely -supersafeness -supersafety -supersagacious -supersagaciously -supersagaciousness -supersaint -supersaintly -supersalesman -supersalesmanship -supersalesmen -supersaliency -supersalient -supersalt -supersanction -supersanguine -supersanguinity -supersanity -supersarcasm -supersarcastic -supersarcastically -supersatisfaction -supersatisfy -supersatisfied -supersatisfying -supersaturate -supersaturated -supersaturates -supersaturating -supersaturation -superscandal -superscandalous -superscandalously -superscholarly -superscientific -superscientifically -superscout -superscouts -superscribe -superscribed -superscribes -superscribing -superscript -superscripted -superscripting -superscription -superscriptions -superscripts -superscrive -superseaman -superseamen -supersecrecy -supersecrecies -supersecret -supersecretion -supersecretive -supersecretively -supersecretiveness -supersecular -supersecularly -supersecure -supersecurely -supersecureness -supersedable -supersede -supersedeas -superseded -supersedence -superseder -supersedere -supersedes -superseding -supersedure -superselect -superselection -superseminate -supersemination -superseminator -superseniority -supersensible -supersensibleness -supersensibly -supersensitisation -supersensitise -supersensitised -supersensitiser -supersensitising -supersensitive -supersensitiveness -supersensitivity -supersensitization -supersensitize -supersensitized -supersensitizing -supersensory -supersensual -supersensualism -supersensualist -supersensualistic -supersensuality -supersensually -supersensuous -supersensuously -supersensuousness -supersentimental -supersentimentally -superseptal -superseptuaginarian -superseraphic -superseraphical -superseraphically -superserious -superseriously -superseriousness -superservice -superserviceable -superserviceableness -superserviceably -supersesquitertial -supersession -supersessive -superset -supersets -superset's -supersevere -superseverely -supersevereness -superseverity -supersex -supersexes -supersexual -supership -supershipment -superships -supersignificant -supersignificantly -supersilent -supersilently -supersympathetic -supersympathy -supersympathies -supersimplicity -supersimplify -supersimplified -supersimplifying -supersincerity -supersyndicate -supersingular -supersystem -supersystems -supersistent -supersize -supersized -superslick -supersmart -supersmartly -supersmartness -supersmooth -super-smooth -supersocial -supersoft -supersoil -supersolar -supersolemn -supersolemness -supersolemnity -supersolemnly -supersolemnness -supersolicit -supersolicitation -supersolid -supersonant -supersonic -supersonically -supersonics -supersovereign -supersovereignty -superspecial -superspecialist -superspecialists -superspecialize -superspecialized -superspecializing -superspecies -superspecification -supersphenoid -supersphenoidal -superspy -superspinous -superspiritual -superspirituality -superspiritually -supersquamosal -superstage -superstamp -superstandard -superstar -superstars -superstate -superstates -superstatesman -superstatesmen -superstylish -superstylishly -superstylishness -superstimulate -superstimulated -superstimulating -superstimulation -superstition -superstitionist -superstitionless -superstition-proof -superstitions -superstition's -superstitious -superstitiously -superstitiousness -superstoical -superstoically -superstrain -superstrata -superstratum -superstratums -superstrength -superstrengths -superstrenuous -superstrenuously -superstrenuousness -superstrict -superstrictly -superstrictness -superstrong -superstruct -superstructed -superstructing -superstruction -superstructive -superstructor -superstructory -superstructral -superstructural -superstructure -superstructures -superstuff -supersublimated -supersuborder -supersubsist -supersubstantial -supersubstantiality -supersubstantially -supersubstantiate -supersubtilized -supersubtle -supersubtlety -supersuccessful -supersufficiency -supersufficient -supersufficiently -supersulcus -supersulfate -supersulfureted -supersulfurize -supersulfurized -supersulfurizing -supersulphate -supersulphuret -supersulphureted -supersulphurize -supersulphurized -supersulphurizing -supersuperabundance -supersuperabundant -supersuperabundantly -supersuperb -supersuperior -supersupremacy -supersupreme -supersurprise -supersuspicion -supersuspicious -supersuspiciously -supersuspiciousness -supersweet -supersweetly -supersweetness -supertanker -super-tanker -supertankers -supertare -supertartrate -supertax -supertaxation -supertaxes -supertemporal -supertempt -supertemptation -supertension -superterranean -superterraneous -superterrene -superterrestial -superterrestrial -superthankful -superthankfully -superthankfulness -superthick -superthin -superthyroidism -superthorough -superthoroughly -superthoroughness -supertight -supertoleration -supertonic -supertotal -supertough -supertower -supertragedy -supertragedies -supertragic -supertragical -supertragically -supertrain -supertramp -supertranscendent -supertranscendently -supertranscendentness -supertreason -supertrivial -supertuchun -supertunic -supertutelary -superugly -superultrafrostified -superunfit -superunit -superunity -superuniversal -superuniversally -superuniversalness -superuniverse -superurgency -superurgent -superurgently -superuser -supervalue -supervalued -supervaluing -supervast -supervastly -supervastness -supervene -supervened -supervenes -supervenience -supervenient -supervening -supervenosity -supervention -supervestment -supervexation -supervictory -supervictories -supervictorious -supervictoriously -supervictoriousness -supervigilance -supervigilant -supervigilantly -supervigorous -supervigorously -supervigorousness -supervirulent -supervirulently -supervisal -supervisance -supervise -supervised -supervisee -supervises -supervising -supervision -supervisionary -supervisions -supervisive -supervisor -supervisory -supervisorial -supervisors -supervisor's -supervisorship -supervisual -supervisually -supervisure -supervital -supervitality -supervitally -supervitalness -supervive -supervolition -supervoluminous -supervoluminously -supervolute -superwager -superweak -superwealthy -superweapon -superweapons -superweening -superwise -superwoman -superwomen -superworldly -superworldliness -superwrought -superzealous -superzealously -superzealousness -supes -supinate -supinated -supinates -supinating -supination -supinator -supine -supinely -supineness -supines -supinity -Suplee -suplex -suporvisory -supp -supp. -suppable -suppage -Suppe -supped -suppedanea -suppedaneous -suppedaneum -suppedit -suppeditate -suppeditation -supper -suppering -supperless -suppers -supper's -suppertime -supperward -supperwards -supping -suppl -supplace -supplant -supplantation -supplanted -supplanter -supplanters -supplanting -supplantment -supplants -Supple -suppled -supplejack -supple-jack -supple-kneed -supplely -supple-limbed -supplement -supplemental -supplementally -supplementals -supplementary -supplementaries -supplementarily -supplementation -supplemented -supplementer -supplementing -supplements -supple-minded -supple-mouth -suppleness -suppler -supples -supple-sinewed -supple-sliding -supplest -suppletion -suppletive -suppletively -suppletory -suppletories -suppletorily -supple-visaged -supple-working -supple-wristed -supply -suppliable -supplial -suppliance -suppliancy -suppliancies -suppliant -suppliantly -suppliantness -suppliants -supplicancy -supplicant -supplicantly -supplicants -supplicat -supplicate -supplicated -supplicates -supplicating -supplicatingly -supplication -supplicationer -supplications -supplicative -supplicator -supplicatory -supplicavit -supplice -supplied -supplier -suppliers -supplies -supplying -suppling -suppnea -suppone -support -supportability -supportable -supportableness -supportably -supportance -supportasse -supportation -supported -supporter -supporters -supportful -supporting -supportingly -supportive -supportively -supportless -supportlessly -supportress -supports -suppos -supposable -supposableness -supposably -supposal -supposals -suppose -supposed -supposedly -supposer -supposers -supposes -supposing -supposital -supposition -suppositional -suppositionally -suppositionary -suppositionless -suppositions -supposition's -suppositious -supposititious -supposititiously -supposititiousness -suppositive -suppositively -suppositor -suppository -suppositories -suppositum -suppost -suppresion -suppresive -suppress -suppressal -suppressant -suppressants -suppressed -suppressedly -suppressen -suppresser -suppresses -suppressibility -suppressible -suppressing -suppression -suppressionist -suppressions -suppressive -suppressively -suppressiveness -suppressor -suppressors -supprime -supprise -suppurant -suppurate -suppurated -suppurates -suppurating -suppuration -suppurations -suppurative -suppuratory -supputation -suppute -supr -supra -supra- -supra-abdominal -supra-acromial -supra-aerial -supra-anal -supra-angular -supra-arytenoid -supra-auditory -supra-auricular -supra-axillary -suprabasidorsal -suprabranchial -suprabuccal -supracaecal -supracargo -supracaudal -supracensorious -supracentenarian -suprachorioid -suprachorioidal -suprachorioidea -suprachoroid -suprachoroidal -suprachoroidea -Supra-christian -supraciliary -supraclavicle -supraclavicular -supraclusion -supracommissure -supracondylar -supracondyloid -supraconduction -supraconductor -supraconscious -supraconsciousness -supracoralline -supracostal -supracoxal -supracranial -supracretaceous -supradecompound -supradental -supradorsal -supradural -supra-esophagal -supra-esophageal -supra-ethmoid -suprafeminine -suprafine -suprafoliaceous -suprafoliar -supraglacial -supraglenoid -supraglottal -supraglottic -supragovernmental -suprahepatic -suprahyoid -suprahistorical -suprahuman -suprahumanity -suprailiac -suprailium -supraintellectual -suprainterdorsal -supra-intestinal -suprajural -supralabial -supralapsarian -supralapsarianism -supralateral -supralegal -supraliminal -supraliminally -supralineal -supralinear -supralittoral -supralocal -supralocally -supraloral -supralunar -supralunary -supramammary -supramarginal -supramarine -supramastoid -supramaxilla -supramaxillary -supramaximal -suprameatal -supramechanical -supramedial -supramental -supramolecular -supramoral -supramortal -supramundane -supranasal -supranational -supranationalism -supranationalist -supranationality -supranatural -supranaturalism -supranaturalist -supranaturalistic -supranature -supranervian -supraneural -supranormal -supranuclear -supraoccipital -supraocclusion -supraocular -supraoesophagal -supraoesophageal -supraoptimal -supraoptional -supraoral -supraorbital -supraorbitar -supraordinary -supraordinate -supraordination -supraorganism -suprapapillary -suprapedal -suprapharyngeal -suprapygal -supraposition -supraprotest -suprapubian -suprapubic -supraquantivalence -supraquantivalent -suprarational -suprarationalism -suprarationality -suprarenal -suprarenalectomy -suprarenalectomize -suprarenalin -suprarenin -suprarenine -suprarimal -suprasaturate -suprascapula -suprascapular -suprascapulary -suprascript -suprasegmental -suprasensible -suprasensitive -suprasensual -suprasensuous -supraseptal -suprasolar -suprasoriferous -suprasphanoidal -supraspinal -supraspinate -supraspinatus -supraspinous -suprasquamosal -suprastandard -suprastapedial -suprastate -suprasternal -suprastigmal -suprasubtle -supratemporal -supraterraneous -supraterrestrial -suprathoracic -supratympanic -supratonsillar -supratrochlear -supratropical -supravaginal -supraventricular -supraversion -supravise -supravital -supravitally -supraworld -supremacy -supremacies -supremacist -supremacists -Suprematism -suprematist -supreme -supremely -supremeness -supremer -supremest -supremity -supremities -supremo -supremos -supremum -suprerogative -supressed -suprising -sups -Supt -Supt. -suption -supulchre -supvr -suq -Suquamish -Suqutra -Sur -sur- -Sura -Surabaya -suraddition -surah -surahee -surahi -surahs -Surakarta -sural -suralimentation -suramin -suranal -surance -SURANET -surangular -suras -Surat -surbase -surbased -surbasement -surbases -surbate -surbater -Surbeck -surbed -surbedded -surbedding -surcease -surceased -surceases -surceasing -surcharge -surcharged -surcharger -surchargers -surcharges -surcharging -surcingle -surcingled -surcingles -surcingling -surcle -surcloy -surcoat -surcoats -surcrue -surculi -surculigerous -surculose -surculous -surculus -surd -surdation -surdeline -surdent -surdimutism -surdity -surdomute -surdo-mute -surds -sure -sure-aimed -surebutted -sured -sure-enough -surefire -sure-fire -surefooted -sure-footed -surefootedly -sure-footedly -surefootedness -sure-footedness -sure-founded -sure-grounded -surely -surement -sureness -surenesses -sure-nosed -sure-presaging -surer -sure-refuged -sures -suresby -sure-seeing -sure-set -sure-settled -suresh -sure-slow -surest -sure-steeled -surety -sureties -suretyship -surette -surexcitation -SURF -surfable -surface -surface-active -surface-bent -surface-coated -surfaced -surface-damaged -surface-deposited -surfacedly -surface-dressed -surface-dry -surface-dwelling -surface-feeding -surface-hold -surfaceless -surfacely -surfaceman -surfacemen -surfaceness -surface-printing -surfacer -surfacers -surfaces -surface-scratched -surface-scratching -surface-to-air -surface-to-surface -surface-to-underwater -surfacy -surfacing -surfactant -surf-battered -surf-beaten -surfbird -surfbirds -surfboard -surfboarder -surfboarding -surfboards -surfboat -surfboatman -surfboats -surf-bound -surfcaster -surfcasting -surfed -surfeit -surfeited -surfeitedness -surfeiter -surfeit-gorged -surfeiting -surfeits -surfeit-slain -surfeit-swelled -surfeit-swollen -surfeit-taking -surfer -surfers -surffish -surffishes -surfy -surficial -surfie -surfier -surfiest -surfing -surfings -surfle -surflike -surfman -surfmanship -surfmen -surfperch -surfperches -surfrappe -surfrider -surfriding -surf-riding -surfs -surf-showered -surf-sunk -surf-swept -surf-tormented -surfuse -surfusion -surf-vexed -surf-washed -surf-wasted -surf-white -surf-worn -surg -surg. -surge -surged -surgeful -surgeless -surgency -surgent -surgeon -surgeoncy -surgeoncies -surgeoness -surgeonfish -surgeonfishes -surgeonless -surgeons -surgeon's -surgeonship -surgeproof -surger -surgery -surgeries -surgerize -surgers -surges -surgy -surgical -surgically -surgicotherapy -surgier -surgiest -surginess -surging -Surgoinsville -surhai -Surya -Suriana -Surianaceae -Suribachi -suricat -Suricata -suricate -suricates -suriga -Surinam -Suriname -surinamine -Suring -surique -surjection -surjective -surly -surlier -surliest -surlily -surliness -surma -surmark -surmaster -surmenage -surmisable -surmisal -surmisant -surmise -surmised -surmisedly -surmiser -surmisers -surmises -surmising -surmit -surmount -surmountability -surmountable -surmountableness -surmountal -surmounted -surmounter -surmounting -surmounts -surmullet -surmullets -surnai -surnay -surname -surnamed -surnamer -surnamers -surnames -surname's -surnaming -surnap -surnape -surnominal -surnoun -Surovy -surpass -surpassable -surpassed -surpasser -surpasses -surpassing -surpassingly -surpassingness -surpeopled -surphul -surplice -surpliced -surplices -surplicewise -surplician -surplus -surplusage -surpluses -surplusing -surplus's -surpoose -surpreciation -surprint -surprinted -surprinting -surprints -surprisable -surprisal -surprise -surprised -surprisedly -surprisement -surpriseproof -surpriser -surprisers -surprises -surprising -surprisingly -surprisingness -surprizal -surprize -surprized -surprizes -surprizing -surquedry -surquidy -surquidry -surra -surrah -surras -surreal -Surrealism -Surrealist -Surrealistic -Surrealistically -surrealists -surrebound -surrebut -surrebuttal -surrebutter -surrebutting -surrection -Surrey -surrein -surreys -surrejoin -surrejoinder -surrejoinders -surrenal -Surrency -surrender -surrendered -surrenderee -surrenderer -surrendering -surrenderor -surrenders -surrendry -surrept -surreption -surreptitious -surreptitiously -surreptitiousness -surreverence -surreverently -Surry -surrogacy -surrogacies -surrogate -surrogated -surrogates -surrogate's -surrogateship -surrogating -surrogation -surroyal -sur-royal -surroyals -surrosion -surround -surrounded -surroundedly -surrounder -surrounding -surroundings -surrounds -sursaturation -sursise -sursize -sursolid -surstyle -sursumduction -sursumvergence -sursumversion -Surt -surtax -surtaxed -surtaxes -surtaxing -surtout -surtouts -Surtr -Surtsey -surturbrand -surucucu -surv -surv. -Survance -survey -surveyable -surveyage -surveyal -surveyance -surveyed -surveying -surveil -surveiled -surveiling -surveillance -surveillances -surveillant -surveils -Surveyor -surveyors -surveyor's -surveyorship -surveys -surview -survigrous -survise -survivability -survivable -survival -survivalism -survivalist -survivals -survivance -survivancy -survivant -survive -survived -surviver -survivers -survives -surviving -survivor -survivoress -survivors -survivor's -survivorship -survivorships -surwan -Sus -Susa -Susah -Susan -Susana -Susanchite -susanee -Susanetta -Susank -Susann -Susanna -Susannah -Susanne -susannite -Susanoo -Susanowo -susans -Susanville -suscept -susceptance -susceptibility -susceptibilities -susceptible -susceptibleness -susceptibly -susception -susceptive -susceptiveness -susceptivity -susceptor -suscipient -suscitate -suscitation -suscite -Susette -sushi -sushis -Susi -Susy -Susian -Susiana -Susianian -Susie -Susy-Q -suslik -susliks -Suslov -susotoxin -SUSP -suspect -suspectable -suspected -suspectedly -suspectedness -suspecter -suspectful -suspectfulness -suspectible -suspecting -suspection -suspectless -suspector -suspects -suspend -suspended -suspender -suspenderless -suspenders -suspender's -suspendibility -suspendible -suspending -suspends -suspensation -suspense -suspenseful -suspensefulness -suspensely -suspenses -suspensibility -suspensible -suspension -suspensions -suspensive -suspensively -suspensiveness -suspensoid -suspensor -suspensory -suspensoria -suspensorial -suspensories -suspensorium -suspercollate -suspicable -suspicion -suspicionable -suspicional -suspicioned -suspicionful -suspicioning -suspicionless -suspicion-proof -suspicions -suspicion's -suspicious -suspiciously -suspiciousness -suspiral -suspiration -suspiratious -suspirative -suspire -suspired -suspires -suspiring -suspirious -Susquehanna -suss -sussed -susses -Sussex -sussexite -Sussexman -Sussi -sussy -sussing -Sussman -Sussna -susso -sussultatory -sussultorial -sustain -sustainable -sustained -sustainedly -sustainer -sustaining -sustainingly -sustainment -sustains -sustanedly -sustenance -sustenanceless -sustenances -sustenant -sustentacula -sustentacular -sustentaculum -sustentate -sustentation -sustentational -sustentative -sustentator -sustention -sustentive -sustentor -sustinent -Susu -Susuhunan -Susuidae -Susumu -susurr -susurrant -susurrate -susurrated -susurrating -susurration -susurrations -susurringly -susurrous -susurrus -susurruses -Sutaio -Sutcliffe -Suter -suterbery -suterberry -suterberries -Sutersville -Suth -suther -Sutherlan -Sutherland -Sutherlandia -Sutherlin -sutile -Sutlej -sutler -sutlerage -sutleress -sutlery -sutlers -sutlership -Suto -sutor -sutoria -sutorial -sutorian -sutorious -Sutphin -sutra -sutras -sutta -Suttapitaka -suttas -suttee -sutteeism -suttees -sutten -Sutter -suttin -suttle -Suttner -Sutton -Sutton-in-Ashfield -Sutu -sutural -suturally -suturation -suture -sutured -sutures -suturing -Suu -suum -Suva -Suvorov -suwandi -Suwanee -Suwannee -suwarro -suwe -suz -Suzan -Suzann -Suzanna -Suzanne -suzerain -suzeraine -suzerains -suzerainship -suzerainty -suzerainties -Suzetta -Suzette -suzettes -Suzi -Suzy -Suzie -Suzuki -Suzzy -SV -svabite -Svalbard -svamin -Svan -Svanetian -Svanish -svante -Svantovit -svarabhakti -svarabhaktic -svaraj -svarajes -svarajs -Svarloka -svastika -SVC -svce -Svea -Sveciaost -Svedberg -svedbergs -svelt -svelte -sveltely -svelteness -svelter -sveltest -Sven -Svend -Svengali -Svensen -Sverdlovsk -Sverige -Sverre -Svetambara -Svetlana -svgs -sviatonosite -SVID -Svign -Svizzera -Svoboda -SVP -SVR -SVR4 -Svres -SVS -SVVS -SW -Sw. -SWA -Swab -swabbed -swabber -swabberly -swabbers -swabby -swabbie -swabbies -swabbing -swabble -Swabia -Swabian -swabs -swack -swacked -swacken -swacking -swad -swadder -swaddy -swaddish -swaddle -swaddlebill -swaddled -swaddler -swaddles -swaddling -swaddling-band -swaddling-clothes -swaddling-clouts -Swadeshi -Swadeshism -swag -swagbelly -swagbellied -swag-bellied -swagbellies -swage -swaged -swager -swagers -Swagerty -swages -swage-set -swagged -swagger -swagger- -swaggered -swaggerer -swaggerers -swaggering -swaggeringly -swaggers -swaggi -swaggy -swaggie -swagging -swaggir -swaging -swaglike -swagman -swagmen -swags -swagsman -swagsmen -Swahilese -Swahili -Swahilian -Swahilis -Swahilize -sway -sway- -swayable -swayableness -swayback -sway-back -swaybacked -sway-backed -swaybacks -Swayder -swayed -swayer -swayers -swayful -swaying -swayingly -swail -swayless -swails -swaimous -Swain -Swaine -Swayne -swainish -swainishness -swainmote -swains -swain's -Swainsboro -swainship -Swainson -Swainsona -swaird -sways -Swayzee -SWAK -swale -Swaledale -swaler -swales -swaling -swalingly -swallet -swallo -swallow -swallowable -swallowed -swallower -swallow-fork -swallow-hole -swallowing -swallowlike -swallowling -swallowpipe -swallows -swallowtail -swallow-tail -swallowtailed -swallow-tailed -swallowtails -swallow-wing -swallowwort -swam -swami -Swamy -swamies -swamis -Swammerdam -swamp -swampable -swampberry -swampberries -swamp-dwelling -swamped -swamper -swampers -swamp-growing -swamphen -swampy -swampier -swampiest -swampine -swampiness -swamping -swampish -swampishness -swampland -swampless -swamp-loving -swamp-oak -swamps -Swampscott -swampside -swampweed -swampwood -SWAN -swan-bosomed -swan-clad -swandown -swan-drawn -Swane -swan-eating -Swanee -swan-fashion -swanflower -swang -swangy -swanherd -swanherds -Swanhilda -Swanhildas -swanhood -swan-hopper -swan-hopping -swanimote -swank -swanked -swankey -swanker -swankest -swanky -swankie -swankier -swankiest -swankily -swankiness -swanking -swankness -swankpot -swanks -swanlike -swan-like -swanmark -swan-mark -swanmarker -swanmarking -swanmote -Swann -Swannanoa -swanneck -swan-neck -swannecked -swanned -swanner -swannery -swanneries -swannet -swanny -swanning -swannish -swanpan -swan-pan -swanpans -swan-plumed -swan-poor -swan-proud -swans -swan's -Swansboro -swansdown -swan's-down -Swansea -swanskin -swanskins -Swanson -swan-sweet -Swantevit -Swanton -swan-tuned -swan-upper -swan-upping -Swanville -swanweed -swan-white -Swanwick -swan-winged -swanwort -swap -swape -swapped -swapper -swappers -swapping -Swaps -swaraj -swarajes -swarajism -swarajist -swarbie -sward -sward-cut -sward-cutter -swarded -swardy -swarding -swards -sware -swarf -swarfer -swarfs -swarga -swarm -swarmed -swarmer -swarmers -swarmy -swarming -swarmingness -swarms -swarry -Swart -swartback -swarth -swarthy -swarthier -swarthiest -swarthily -swarthiness -Swarthmore -swarthness -Swarthout -swarths -swarty -swartish -swartly -swartness -swartrutter -swartrutting -Swarts -Swartswood -Swartz -Swartzbois -Swartzia -swartzite -swarve -SWAS -swash -swashbuckle -swashbuckler -swashbucklerdom -swashbucklery -swashbucklering -swashbucklers -swashbuckling -swashbucklings -swashed -swasher -swashers -swashes -swashy -swashing -swashingly -swashway -swashwork -swastica -swasticas -swastika -swastikaed -swastikas -Swat -swatch -Swatchel -swatcher -swatches -swatchway -swath -swathable -swathband -swathe -swatheable -swathed -swather -swathers -swathes -swathy -swathing -swaths -Swati -Swatis -Swatow -swats -swatted -swatter -swatters -swatting -swattle -swaver -Swazi -Swaziland -SWB -SWbS -SWbW -sweal -sweamish -swear -swearer -swearer-in -swearers -swearing -swearingly -swears -swearword -swear-word -sweat -sweatband -sweatbox -sweatboxes -sweated -sweater -sweaters -sweatful -sweath -sweathouse -sweat-house -sweaty -sweatier -sweatiest -sweatily -sweatiness -sweating -sweating-sickness -sweatless -sweatproof -sweats -sweatshirt -sweatshop -sweatshops -Sweatt -sweatweed -Swec -Swed -Swede -Swedeborg -Sweden -Swedenborg -Swedenborgian -Swedenborgianism -Swedenborgism -swedes -Swedesboro -Swedesburg -swedge -swedger -Swedish -Swedish-owned -swedru -Swee -Sweeden -Sweelinck -Sweeney -Sweeny -sweenies -sweens -sweep -sweepable -sweepage -sweepback -sweepboard -sweep-chimney -sweepdom -sweeper -sweeperess -sweepers -sweepforward -sweepy -sweepier -sweepiest -sweeping -sweepingly -sweepingness -sweepings -sweep-oar -sweeps -sweep-second -sweepstake -sweepstakes -sweepup -sweepwasher -sweepwashings -sweer -sweered -sweert -sweese -sweeswee -swee-swee -swee-sweet -Sweet -sweet-almond -sweet-and-sour -sweet-beamed -sweetbells -sweetberry -sweet-bitter -sweet-bleeding -sweet-blooded -sweetbread -sweetbreads -sweet-breath -sweet-breathed -sweet-breathing -Sweetbriar -sweetbrier -sweet-brier -sweetbriery -sweetbriers -sweet-bright -sweet-charming -sweet-chaste -sweetclover -sweet-complaining -sweet-conditioned -sweet-curd -sweet-dispositioned -sweet-eyed -sweeten -sweetened -sweetener -sweeteners -sweetening -sweetenings -sweetens -sweeter -sweetest -sweet-faced -sweet-featured -sweet-field -sweetfish -sweet-flavored -sweet-flowered -sweet-flowering -sweet-flowing -sweetful -sweet-gale -Sweetgrass -sweetheart -sweetheartdom -sweethearted -sweetheartedness -sweethearting -sweethearts -sweetheart's -sweetheartship -sweety -sweetie -sweeties -sweetiewife -sweeting -sweetings -sweetish -sweetishly -sweetishness -sweetkins -Sweetland -sweetleaf -sweet-leafed -sweetless -sweetly -sweetlike -sweetling -sweet-lipped -sweet-looking -sweetmaker -sweetman -sweetmeal -sweetmeat -sweetmeats -sweet-minded -sweetmouthed -sweet-murmuring -sweet-natured -sweetness -sweetnesses -sweet-numbered -sweet-pickle -sweet-piercing -sweet-recording -sweet-roasted -sweetroot -sweets -sweet-sacred -sweet-sad -sweet-savored -sweet-scented -sweet-seasoned -Sweetser -sweet-set -sweet-shaped -sweetshop -sweet-singing -sweet-smelled -sweet-smelling -sweet-smiling -sweetsome -sweetsop -sweet-sop -sweetsops -sweet-souled -sweet-sounded -sweet-sounding -sweet-sour -sweet-spoken -sweet-spun -sweet-suggesting -sweet-sweet -sweet-talk -sweet-talking -sweet-tasted -sweet-tasting -sweet-tempered -sweet-temperedly -sweet-temperedness -sweet-throat -sweet-throated -sweet-toned -sweet-tongued -sweet-toothed -sweet-touched -sweet-tulk -sweet-tuned -sweet-voiced -sweet-warbling -Sweetwater -sweetweed -sweet-whispered -sweet-william -sweetwood -sweetwort -sweet-wort -swego -Sweyn -swelchie -Swelinck -swell -swell- -swellage -swell-butted -swelldom -swelldoodle -swelled -swelled-gelatin -swelled-headed -swelled-headedness -sweller -swellest -swellfish -swellfishes -swell-front -swellhead -swellheaded -swell-headed -swellheadedness -swell-headedness -swellheads -swelly -swelling -swellings -swellish -swellishness -swellmobsman -swell-mobsman -swellness -swells -swelltoad -swelp -swelt -swelter -sweltered -swelterer -sweltering -swelteringly -swelters -swelth -swelty -sweltry -sweltrier -sweltriest -Swen -Swengel -Swenson -swep -Swepsonville -swept -sweptback -swept-back -swept-forward -sweptwing -swerd -Swertia -swervable -swerve -swerved -swerveless -swerver -swervers -swerves -swervily -swerving -Swetiana -Swetlana -sweven -swevens -SWF -SWG -swy -swick -swidden -swiddens -swidge -Swiercz -Swietenia -SWIFT -swift-advancing -swift-brought -swift-burning -swift-changing -swift-concerted -swift-declining -swift-effected -swiften -swifter -swifters -swiftest -swift-fated -swift-finned -swift-flying -swift-flowing -swiftfoot -swift-foot -swift-footed -swift-frightful -swift-glancing -swift-gliding -swift-handed -swift-heeled -swift-hoofed -swifty -swiftian -swiftie -swift-judging -swift-lamented -swiftlet -swiftly -swiftlier -swiftliest -swiftlike -swift-marching -swiftness -swiftnesses -Swifton -Swiftown -swift-paced -swift-posting -swift-recurring -swift-revenging -swift-running -swift-rushing -swifts -swift-seeing -swift-sliding -swift-slow -swift-spoken -swift-starting -swift-stealing -swift-streamed -swift-swimming -swift-tongued -Swiftwater -swift-winged -swig -Swigart -swigged -swigger -swiggers -swigging -swiggle -swigs -Swihart -swile -swilkie -swill -swillbelly -swillbowl -swill-bowl -swilled -swiller -swillers -swilling -swillpot -swills -swilltub -swill-tub -swim -swimbel -swim-bladder -swimy -swimmable -swimmer -swimmeret -swimmerette -swimmers -swimmer's -swimmy -swimmier -swimmiest -swimmily -swimminess -swimming -swimmingly -swimmingness -swimmings -swimmist -swims -swimsuit -swimsuits -swimwear -Swinburne -Swinburnesque -Swinburnian -swindle -swindleable -swindled -swindledom -swindler -swindlery -swindlers -swindlership -swindles -swindling -swindlingly -Swindon -swine -swine-backed -swinebread -swine-bread -swine-chopped -swinecote -swine-cote -swine-eating -swine-faced -swinehead -swine-headed -swineherd -swineherdship -swinehood -swinehull -swiney -swinely -swinelike -swine-mouthed -swinepipe -swine-pipe -swinepox -swine-pox -swinepoxes -swinery -swine-snouted -swine-stead -swinesty -swine-sty -swinestone -swine-stone -swing -swing- -swingable -swingably -swingaround -swingback -swingby -swingbys -swingboat -swingdevil -swingdingle -swinge -swinged -swingeing -swingeingly -swingel -swingeour -swinger -swingers -swinges -swingy -swingier -swingiest -swinging -swingingly -Swingism -swing-jointed -swingknife -swingle -swingle- -swinglebar -swingled -swingles -swingletail -swingletree -swingling -swingman -swingmen -swingometer -swings -swingstock -swing-swang -swingtree -swing-tree -swing-wing -swinish -swinishly -swinishness -Swink -swinked -swinker -swinking -swinks -swinney -swinneys -Swinnerton -Swinton -swipe -swiped -swiper -swipes -swipy -swiping -swiple -swiples -swipper -swipple -swipples -swird -swire -swirl -swirled -swirly -swirlier -swirliest -swirling -swirlingly -swirls -swirrer -swirring -Swirsky -swish -swish- -swished -Swisher -swishers -swishes -swishy -swishier -swishiest -swishing -swishingly -swish-swash -Swiss -Swisser -swisses -Swissess -swissing -switch -switchable -Switchback -switchbacker -switchbacks -switchblade -switchblades -switchboard -switchboards -switchboard's -switched -switchel -switcher -switcheroo -switchers -switches -switchgear -switchgirl -switch-hit -switch-hitter -switch-hitting -switch-horn -switchy -switchyard -switching -switchings -switchkeeper -switchlike -switchman -switchmen -switchover -switch-over -switchtail -swith -Swithbart -Swithbert -swithe -swythe -swithen -swither -swithered -swithering -swithers -Swithin -swithly -Swithun -Switz -Switz. -Switzer -Switzeress -Switzerland -swive -swived -swivel -swiveled -swiveleye -swiveleyed -swivel-eyed -swivel-hooked -swiveling -swivelled -swivellike -swivelling -swivel-lock -swivels -swiveltail -swiver -swives -swivet -swivets -swivetty -swiving -swiwet -swiz -swizz -swizzle -swizzled -swizzler -swizzlers -swizzles -swizzling -swleaves -SWM -SWO -swob -swobbed -swobber -swobbers -swobbing -swobs -Swoyersville -swollen -swollen-cheeked -swollen-eyed -swollen-faced -swollen-glowing -swollen-headed -swollen-jawed -swollenly -swollenness -swollen-tongued -swoln -swom -swonk -swonken -Swoon -swooned -swooner -swooners -swoony -swooning -swooningly -swooning-ripe -swoons -swoop -Swoope -swooped -swooper -swoopers -swooping -swoops -swoopstake -swoose -swooses -swoosh -swooshed -swooshes -swooshing -swop -Swope -swopped -swopping -swops -Swor -sword -sword-armed -swordbearer -sword-bearer -sword-bearership -swordbill -sword-billed -swordcraft -sworded -sworder -swordfish -swordfishery -swordfisherman -swordfishes -swordfishing -sword-girded -sword-girt -swordgrass -sword-grass -swordick -swording -swordknot -sword-leaved -swordless -swordlet -swordlike -swordmaker -swordmaking -swordman -swordmanship -swordmen -swordplay -sword-play -swordplayer -swordproof -Swords -sword's -sword-shaped -swordslipper -swordsman -swordsmanship -swordsmen -swordsmith -swordster -swordstick -swordswoman -swordtail -sword-tailed -swordweed -swore -sworn -swosh -swot -swots -swotted -swotter -swotters -swotting -swough -swoun -swound -swounded -swounding -swounds -swouned -swouning -swouns -swow -SWS -Swtz -swum -swung -swungen -swure -SX -SXS -Szabadka -szaibelyite -Szczecin -Szechwan -Szeged -Szekely -Szekler -Szeklian -Szekszrd -Szell -Szewinska -Szigeti -Szilard -Szymanowski -szlachta -Szold -Szombathely -Szomorodni -szopelka -T -t' -'t -t. -t.b. -t.g. -T.H.I. -T/D -T1 -T1FE -T1OS -T3 -TA -taa -Taal -Taalbond -Taam -taar -taata -TAB -tab. -tabac -tabacco -tabacin -tabacism -tabacosis -tabacum -tabagie -tabagism -taband -tabanid -Tabanidae -tabanids -tabaniform -tabanuco -Tabanus -tabard -tabarded -tabardillo -tabards -tabaret -tabarets -Tabasco -tabasheer -tabashir -Tabatha -tabatiere -tabaxir -Tabb -tabbarea -Tabbatha -tabbed -Tabber -Tabbi -Tabby -Tabbie -tabbied -tabbies -tabbying -tabbinet -tabbing -tabbis -tabbises -Tabbitha -Tabebuia -tabefaction -tabefy -tabel -tabella -Tabellaria -Tabellariaceae -tabellion -Taber -taberdar -tabered -Taberg -tabering -taberna -tabernacle -tabernacled -tabernacler -tabernacles -tabernacle's -tabernacling -tabernacular -tabernae -Tabernaemontana -tabernariae -Tabernash -tabers -tabes -tabescence -tabescent -tabet -tabetic -tabetics -tabetiform -tabetless -tabi -Tabib -tabic -tabid -tabidly -tabidness -tabific -tabifical -Tabina -tabinet -Tabiona -Tabira -tabis -Tabitha -tabitude -tabla -tablas -tablature -table -tableau -tableaus -tableau's -tableaux -table-board -table-book -tablecloth -table-cloth -tableclothy -tablecloths -tableclothwise -table-cut -table-cutter -table-cutting -tabled -table-faced -tablefellow -tablefellowship -table-formed -tableful -tablefuls -table-hop -tablehopped -table-hopped -table-hopper -tablehopping -table-hopping -tableity -tableland -table-land -tablelands -tableless -tablelike -tablemaid -tablemaker -tablemaking -tableman -tablemate -tablement -tablemount -tabler -table-rapping -tables -tablesful -table-shaped -tablespoon -table-spoon -tablespoonful -tablespoonfuls -tablespoonful's -tablespoons -tablespoon's -tablespoonsful -table-stone -tablet -table-tail -table-talk -tabletary -tableted -tableting -tabletop -table-topped -tabletops -tablets -tablet's -tabletted -tabletting -table-turning -tableware -tablewares -tablewise -tablier -tablina -tabling -tablinum -tablita -Tabloid -tabloids -tabog -taboo -tabooed -tabooing -tabooism -tabooist -tabooley -taboos -taboo's -taboot -taboparalysis -taboparesis -taboparetic -tabophobia -Tabor -tabored -taborer -taborers -taboret -taborets -taborin -taborine -taborines -taboring -taborins -Taborite -tabors -tabouli -taboulis -tabour -taboured -tabourer -tabourers -tabouret -tabourets -tabourin -tabourine -tabouring -tabours -tabret -Tabriz -tabs -Tabshey -tabstop -tabstops -tabu -tabued -tabuing -tabula -tabulable -tabulae -tabular -tabulare -tabulary -tabularia -tabularisation -tabularise -tabularised -tabularising -tabularium -tabularization -tabularize -tabularized -tabularizing -tabularly -Tabulata -tabulate -tabulated -tabulates -tabulating -tabulation -tabulations -tabulator -tabulatory -tabulators -tabulator's -tabule -tabuli -tabuliform -tabulis -tabus -tabut -TAC -tacahout -tacamahac -tacamahaca -tacamahack -tacan -Tacana -Tacanan -Tacca -Taccaceae -taccaceous -taccada -TACCS -Tace -taces -tacet -tach -Tachardia -Tachardiinae -tache -tacheless -tacheo- -tacheography -tacheometer -tacheometry -tacheometric -taches -tacheture -tachhydrite -tachi -tachy- -tachyauxesis -tachyauxetic -tachibana -tachycardia -tachycardiac -tachygen -tachygenesis -tachygenetic -tachygenic -tachyglossal -tachyglossate -Tachyglossidae -Tachyglossus -tachygraph -tachygrapher -tachygraphy -tachygraphic -tachygraphical -tachygraphically -tachygraphist -tachygraphometer -tachygraphometry -tachyhydrite -tachyiatry -tachylalia -tachylite -tachylyte -tachylytic -tachymeter -tachymetry -tachymetric -Tachina -Tachinaria -tachinarian -tachinid -Tachinidae -tachinids -tachiol -tachyon -tachyons -tachyphagia -tachyphasia -tachyphemia -tachyphylactic -tachyphylaxia -tachyphylaxis -tachyphrasia -tachyphrenia -tachypnea -tachypneic -tachypnoea -tachypnoeic -tachyscope -tachyseism -tachysystole -tachism -tachisme -tachisms -tachist -tachiste -tachysterol -tachistes -tachistoscope -tachistoscopic -tachistoscopically -tachists -tachytely -tachytelic -tachythanatous -tachytype -tachytomy -tacho- -tachogram -tachograph -tachometer -tachometers -tachometer's -tachometry -tachometric -tachophobia -tachoscope -tachs -Tacy -Tacye -tacit -Tacita -Tacitean -tacitly -tacitness -tacitnesses -taciturn -taciturnist -taciturnity -taciturnities -taciturnly -Tacitus -tack -tackboard -tacked -tackey -tacker -tackers -tacket -tacketed -tackety -tackets -tacky -tackier -tackies -tackiest -tackify -tackified -tackifier -tackifies -tackifying -tackily -tackiness -tacking -tackingly -tackle -tackled -tackleless -tackleman -tackler -tacklers -tackles -tackle's -tackless -Tacklind -tackling -tacklings -tackproof -tacks -tacksman -tacksmen -Tacloban -taclocus -tacmahack -Tacna -Tacna-Arica -tacnode -tacnodeRare -tacnodes -taco -Tacoma -Tacoman -Taconian -Taconic -Taconite -taconites -tacos -tacpoint -Tacquet -tacso -Tacsonia -tact -tactable -tactful -tactfully -tactfulness -tactic -tactical -tactically -tactician -tacticians -tactics -tactile -tactilely -tactilist -tactility -tactilities -tactilogical -tactinvariant -taction -tactions -tactite -tactive -tactless -tactlessly -tactlessness -tactoid -tactometer -tactor -tactosol -tacts -tactual -tactualist -tactuality -tactually -tactus -tacuacine -Tacubaya -Taculli -Tad -Tada -Tadashi -tadbhava -Tadd -Taddeo -Taddeusz -Tade -Tadeas -Tadema -Tadeo -Tades -Tadeus -Tadich -Tadio -Tadjik -Tadmor -Tadousac -tadpole -tadpoledom -tadpolehood -tadpolelike -tadpoles -tadpole-shaped -tadpolism -tads -Tadzhik -Tadzhiki -Tadzhikistan -TAE -Taegu -Taejon -tae-kwan-do -tael -taels -taen -ta'en -taenia -taeniacidal -taeniacide -Taeniada -taeniae -taeniafuge -taenial -taenian -taenias -taeniasis -Taeniata -taeniate -taenicide -Taenidia -taenidial -taenidium -taeniform -taenifuge -taenii- -taeniiform -taeninidia -taenio- -Taeniobranchia -taeniobranchiate -Taeniodonta -Taeniodontia -Taeniodontidae -Taenioglossa -taenioglossate -taenioid -taeniola -taeniosome -Taeniosomi -taeniosomous -taenite -taennin -Taetsia -taffarel -taffarels -Taffel -tafferel -tafferels -taffeta -taffetas -taffety -taffetized -Taffy -taffia -taffias -taffies -taffylike -taffymaker -taffymaking -taffywise -taffle -taffrail -taffrails -tafia -tafias -Tafilalet -Tafilelt -tafinagh -Taft -Tafton -Taftsville -Taftville -tafwiz -TAG -Tagabilis -tag-addressing -tag-affixing -Tagakaolo -Tagal -Tagala -Tagalize -Tagalo -Tagalog -Tagalogs -tagalong -tagalongs -Taganrog -tagasaste -Tagassu -Tagassuidae -tagatose -Tagaur -Tagbanua -tagboard -tagboards -tag-dating -tagel -Tager -Tagetes -tagetol -tagetone -Taggard -Taggart -tagged -tagger -taggers -taggy -tagging -taggle -taghairm -Taghlik -tagilite -Tagish -taglet -taglia -Tagliacotian -Tagliacozzian -tagliarini -tagliatelle -taglike -taglioni -taglock -tag-marking -tagmeme -tagmemes -tagmemic -tagmemics -tagnicati -Tagore -tagrag -tag-rag -tagraggery -tagrags -tags -tag's -tagsore -tagster -tag-stringing -tagtail -tagua -taguan -Tagula -Tagus -tagwerk -taha -tahali -Tahami -tahanun -tahar -taharah -taheen -tahgook -tahil -tahin -tahina -tahini -tahinis -Tahiti -Tahitian -tahitians -tahkhana -Tahlequah -Tahltan -Tahmosh -Tahoe -Tahoka -Taholah -tahona -tahr -tahrs -tahseeldar -tahsil -tahsildar -tahsils -tahsin -tahua -Tahuya -Tai -Tay -taiaha -Tayassu -tayassuid -Tayassuidae -Taiban -taich -Tai-chinese -Taichu -Taichung -Taiden -tayer -Taif -taig -taiga -taigas -Taygeta -Taygete -taiglach -taigle -taiglesome -taihoa -Taihoku -Taiyal -Tayib -Tayyebeb -tayir -Taiyuan -taikhana -taikih -Taikyu -taikun -tail -tailage -tailback -tailbacks -tailband -tailboard -tail-board -tailbone -tailbones -tail-chasing -tailcoat -tailcoated -tailcoats -tail-cropped -tail-decorated -tail-docked -tailed -tail-end -tailender -tailer -Tayler -tailers -tailet -tailfan -tailfans -tailfirst -tailflower -tailforemost -tailgate -tailgated -tailgater -tailgates -tailgating -tailge -tail-glide -tailgunner -tailhead -tail-heavy -taily -tailye -tailing -tailings -tail-joined -taillamp -taille -taille-douce -tailles -tailless -taillessly -taillessness -tailleur -taillie -taillight -taillights -taillike -tailloir -Tailor -Taylor -tailorage -tailorbird -tailor-bird -tailor-built -tailorcraft -tailor-cut -tailordom -tailored -tailoress -tailorhood -tailory -tailoring -tailorism -Taylorism -Taylorite -tailorization -tailorize -Taylorize -tailor-legged -tailorless -tailorly -tailorlike -tailor-made -tailor-mades -tailor-make -tailor-making -tailorman -tailors -Taylors -tailorship -tailor's-tack -Taylorstown -tailor-suited -Taylorsville -Taylorville -tailorwise -tailpiece -tail-piece -tailpin -tailpipe -tailpipes -tailplane -tailrace -tail-race -tailraces -tail-rhymed -tail-rope -tails -tailshaft -tailsheet -tailskid -tailskids -tailsman -tailspin -tailspins -tailstock -tail-switching -Tailte -tail-tied -tail-wagging -tailward -tailwards -tailwater -tailwind -tailwinds -tailwise -tailzee -tailzie -tailzied -Taima -taimen -Taimi -taimyrite -tain -Tainan -Taine -Taino -tainos -tains -taint -taintable -tainte -tainted -taintedness -taint-free -tainting -taintless -taintlessly -taintlessness -taintment -Taintor -taintproof -taints -tainture -taintworm -taint-worm -Tainui -taipan -taipans -Taipei -Taipi -Taiping -tai-ping -taipo -Taira -tayra -tairge -tairger -tairn -Tayrona -taysaam -taisch -taise -taish -Taisho -taysmm -taissle -taistrel -taistril -Tait -Taite -taiver -taivers -taivert -Taiwan -Taiwanese -Taiwanhemp -Ta'izz -taj -tajes -Tajik -Tajiki -Tajo -Tak -Taka -takable -takahe -takahes -takayuki -Takakura -takamaka -Takamatsu -Takao -takar -Takara -Takashi -take -take- -takeable -take-all -takeaway -take-charge -taked -takedown -take-down -takedownable -takedowns -takeful -take-home -take-in -takeing -Takelma -taken -Takeo -takeoff -take-off -takeoffs -takeout -take-out -takeouts -takeover -take-over -takeovers -taker -taker-down -taker-in -taker-off -takers -takes -Takeshi -taketh -takeuchi -takeup -take-up -takeups -Takhaar -Takhtadjy -taky -Takilman -takin -taking -taking-in -takingly -takingness -takings -takins -takyr -Takitumu -takkanah -Takken -Takoradi -takosis -takrouri -takt -Taku -TAL -Tala -talabon -Talaemenes -talahib -Talaing -talayot -talayoti -talaje -talak -Talala -talalgia -Talamanca -Talamancan -Talanian -Talanta -talanton -talao -talapoin -talapoins -talar -Talara -talari -talaria -talaric -talars -talas -Talassio -Talbert -Talbot -talbotype -talbotypist -Talbott -Talbotton -talc -Talca -Talcahuano -talced -talcer -talc-grinding -Talcher -talcing -talck -talcked -talcky -talcking -talclike -Talco -talcochlorite -talcoid -talcomicaceous -talcose -Talcott -talcous -talcs -talcum -talcums -tald -tale -talebearer -talebearers -talebearing -talebook -talecarrier -talecarrying -taled -taleful -talegalla -Talegallinae -Talegallus -taleysim -talemaster -talemonger -talemongering -talent -talented -talenter -talenting -talentless -talents -talepyet -taler -talers -tales -tale's -talesman -talesmen -taleteller -tale-teller -taletelling -tale-telling -talewise -Tali -Talia -Talya -Taliacotian -taliage -Talyah -taliation -Talich -Talie -Talien -taliera -Taliesin -taligrade -Talihina -Talinum -talio -talion -talionic -talionis -talions -talipat -taliped -talipedic -talipeds -talipes -talipomanus -talipot -talipots -talis -Talys -talisay -Talisheek -Talishi -Talyshin -talisman -talismanic -talismanical -talismanically -talismanist -talismanni -talismans -talite -Talitha -talitol -talk -talkability -talkable -talkathon -talkative -talkatively -talkativeness -talk-back -talked -talked-about -talked-of -talkee -talkee-talkee -talker -talkers -talkfest -talkful -talky -talkie -talkier -talkies -talkiest -talkiness -talking -talkings -talking-to -talking-tos -talky-talk -talky-talky -talks -talkworthy -tall -Talladega -tallage -tallageability -tallageable -tallaged -tallages -tallaging -Tallahassee -tallaisim -tal-laisim -tallaism -tallapoi -Tallapoosa -Tallassee -tallate -tall-bodied -tallboy -tallboys -Tallbot -Tallbott -tall-built -Tallchief -tall-chimneyed -tall-columned -tall-corn -Tallega -tallegalane -Talley -Talleyrand-Prigord -tall-elmed -taller -tallero -talles -tallest -tallet -Tallevast -tall-growing -talli -Tally -Tallia -talliable -talliage -talliar -talliate -talliated -talliating -talliatum -Tallie -tallied -tallier -talliers -tallies -tallyho -tally-ho -tallyho'd -tallyhoed -tallyhoing -tallyhos -tallying -tallyman -tallymanship -tallymen -Tallinn -Tallis -Tallys -tallish -tallyshop -tallit -tallith -tallithes -tallithim -tallitim -tallitoth -tallywag -tallywalka -tallywoman -tallywomen -tall-looking -Tallmadge -Tallman -Tallmansville -tall-masted -tall-master -tall-necked -tallness -tallnesses -talloel -tallol -tallols -tallote -Tallou -tallow -tallowberry -tallowberries -tallow-chandlering -tallow-colored -tallow-cut -tallowed -tallower -tallow-face -tallow-faced -tallow-hued -tallowy -tallowiness -tallowing -tallowish -tallow-lighted -tallowlike -tallowmaker -tallowmaking -tallowman -tallow-pale -tallowroot -tallows -tallow-top -tallow-topped -tallowweed -tallow-white -tallowwood -tall-pillared -tall-sceptered -tall-sitting -tall-spired -tall-stalked -tall-stemmed -tall-trunked -tall-tussocked -Tallu -Tallula -Tallulah -tall-wheeled -tallwood -talma -Talmage -talmas -Talmo -talmouse -Talmud -Talmudic -Talmudical -Talmudism -Talmudist -Talmudistic -Talmudistical -talmudists -Talmudization -Talmudize -talocalcaneal -talocalcanean -talocrural -talofibular -Taloga -talon -talonavicular -taloned -talonic -talonid -talons -talon-tipped -talooka -talookas -Talos -taloscaphoid -talose -talotibial -Talpa -talpacoti -talpatate -talpetate -talpicide -talpid -Talpidae -talpify -talpiform -talpine -talpoid -talshide -taltarum -talter -talthib -Talthybius -Taltushtuntude -Taluche -Taluhet -taluk -taluka -talukas -talukdar -talukdari -taluks -talus -taluses -taluto -talwar -talweg -talwood -TAM -Tama -tamability -tamable -tamableness -tamably -Tamaceae -Tamachek -tamacoare -Tamah -Tamayo -tamal -Tamale -tamales -tamals -Tamanac -Tamanaca -Tamanaco -Tamanaha -tamandu -tamandua -tamanduas -tamanduy -tamandus -tamanoas -tamanoir -tamanowus -tamanu -Tamaqua -Tamar -Tamara -tamarack -tamaracks -Tamarah -tamaraite -tamarao -tamaraos -tamarau -tamaraus -tamari -Tamaricaceae -tamaricaceous -tamarin -tamarind -tamarinds -Tamarindus -tamarins -tamaris -tamarisk -tamarisks -Tamarix -Tamaroa -Tamarra -Tamaru -Tamas -tamasha -tamashas -Tamashek -tamasic -Tamasine -Tamassee -Tamatave -Tamaulipas -Tamaulipec -Tamaulipecan -tambac -tambacs -tambak -tambaks -tambala -tambalas -tambaroora -tamber -Tamberg -tambo -tamboo -Tambookie -tambor -Tambora -Tambouki -tambour -tamboura -tambouras -tamboured -tambourer -tambouret -tambourgi -tambourin -tambourinade -tambourine -tambourines -tambouring -tambourins -tambourist -tambours -Tambov -tambreet -Tambuki -tambur -tambura -tamburan -tamburas -tamburello -tamburitza -Tamburlaine -tamburone -tamburs -Tame -tameability -tameable -tameableness -tamed -tame-grief -tame-grown -tamehearted -tameheartedness -tamein -tameins -tameless -tamelessly -tamelessness -tamely -tame-lived -tame-looking -tame-minded -tame-natured -tamenes -tameness -tamenesses -Tamer -Tamera -Tamerlane -Tamerlanism -tamers -tames -Tamesada -tame-spirited -tamest -tame-witted -Tami -Tamias -tamidine -Tamiko -Tamil -Tamilian -Tamilic -Tamils -Tamiment -tamine -taming -taminy -Tamis -tamise -tamises -tamlung -Tamma -Tammany -Tammanial -Tammanyism -Tammanyite -Tammanyize -Tammanize -tammar -Tammara -Tammerfors -Tammi -Tammy -Tammie -tammies -Tammlie -tammock -Tamms -Tammuz -Tamoyo -Tamonea -tam-o'shanter -tam-o'-shanter -tam-o-shanter -tam-o-shantered -tamp -Tampa -tampala -tampalas -Tampan -tampang -tampans -tamped -tamper -Tampere -tampered -tamperer -tamperers -tampering -tamperproof -tampers -Tampico -tampin -tamping -tampion -tampioned -tampions -tampoe -tampoy -tampon -tamponade -tamponage -tamponed -tamponing -tamponment -tampons -tampoon -tamps -tampur -Tamqrah -Tamra -Tams -Tamsky -tam-tam -Tamul -Tamulian -Tamulic -tamure -Tamus -Tamworth -Tamzine -Tan -Tana -tanacetyl -tanacetin -tanacetone -Tanacetum -Tanach -tanadar -tanager -tanagers -Tanagra -Tanagraean -Tanagridae -tanagrine -tanagroid -Tanah -Tanaidacea -tanaist -tanak -Tanaka -Tanala -tanan -Tanana -Tananarive -Tanaquil -Tanaron -tanbark -tanbarks -Tanberg -tanbur -tan-burning -tancel -Tanchelmian -tanchoir -tan-colored -Tancred -tandan -tandava -tandem -tandem-compound -tandemer -tandemist -tandemize -tandem-punch -tandems -tandemwise -Tandi -Tandy -Tandie -Tandjungpriok -tandle -tandoor -Tandoori -tandour -tandsticka -tandstickor -Tane -tanega -Taney -Taneytown -Taneyville -tanekaha -tan-faced -Tang -T'ang -Tanga -Tangaloa -tangalung -Tanganyika -Tanganyikan -tangan-tangan -Tangaridae -Tangaroa -Tangaroan -tanged -tangeite -tangelo -tangelos -tangence -tangences -tangency -tangencies -tangent -tangental -tangentally -tangent-cut -tangential -tangentiality -tangentially -tangently -tangents -tangent's -tangent-saw -tangent-sawed -tangent-sawing -tangent-sawn -tanger -Tangerine -tangerine-colored -tangerines -tangfish -tangfishes -tangham -tanghan -tanghin -Tanghinia -tanghinin -tangi -tangy -tangibile -tangibility -tangibilities -tangible -tangibleness -tangibles -tangibly -tangie -Tangier -tangiest -tangile -tangilin -tanginess -tanging -Tangipahoa -tangka -tanglad -tangle -tangleberry -tangleberries -Tangled -tanglefish -tanglefishes -tanglefoot -tangle-haired -tanglehead -tangle-headed -tangle-legs -tanglement -tangleproof -tangler -tangleroot -tanglers -tangles -tanglesome -tangless -tangle-tail -tangle-tailed -Tanglewood -tanglewrack -tangly -tanglier -tangliest -tangling -tanglingly -tango -tangoed -tangoing -tangoreceptor -tangos -tangram -tangrams -tangs -Tangshan -tangue -Tanguy -tanguile -tanguin -tangum -tangun -Tangut -tanh -tanha -Tanhya -tanhouse -Tani -Tania -Tanya -tanyard -tanyards -tanica -tanier -taniko -taniness -Tanyoan -Tanis -tanist -tanistic -Tanystomata -tanystomatous -tanystome -tanistry -tanistries -tanists -tanistship -Tanitansy -Tanite -Tanitic -tanjib -tanjong -Tanjore -Tanjungpandan -Tanjungpriok -tank -tanka -tankage -tankages -tankah -tankard -tankard-bearing -tankards -tankas -tanked -tanker -tankerabogus -tankers -tankert -tankette -tankful -tankfuls -tankie -tanking -tankka -tankle -tankless -tanklike -tankmaker -tankmaking -tankman -tankodrome -Tankoos -tankroom -tanks -tankship -tankships -tank-town -tankwise -tanling -tan-mouthed -Tann -tanna -tannable -tannadar -tannage -tannages -tannaic -tannaim -tannaitic -tannalbin -tannase -tannate -tannates -tanned -Tanney -Tannen -Tannenbaum -Tannenberg -Tannenwald -Tanner -tannery -tanneries -tanners -tanner's -Tannersville -tannest -tannhauser -Tannhser -Tanny -tannic -tannid -tannide -Tannie -tanniferous -tannigen -tannyl -tannin -tannined -tanning -tannings -tanninlike -tannins -tannish -tanno- -tannocaffeic -tannogallate -tannogallic -tannogelatin -tannogen -tannoid -tannometer -Tano -tanoa -Tanoan -tanproof -tanquam -Tanquelinian -tanquen -tanrec -tanrecs -tans -tan-sailed -Tansey -tansel -Tansy -tansies -tan-skinned -TANSTAAFL -tan-strewn -tanstuff -Tanta -tantadlin -tantafflin -tantalate -Tantalean -Tantalian -Tantalic -tantaliferous -tantalifluoride -tantalisation -tantalise -tantalised -tantaliser -tantalising -tantalisingly -tantalite -tantalization -tantalize -tantalized -tantalizer -tantalizers -tantalizes -tantalizing -tantalizingly -tantalizingness -tantalofluoride -tantalous -tantalum -tantalums -Tantalus -Tantaluses -tantamount -tan-tan -tantara -tantarabobus -tantarara -tantaras -tantawy -tanti -tantieme -tan-tinted -tantivy -tantivies -tantle -tanto -Tantony -Tantra -tantras -tantric -tantrik -Tantrika -Tantrism -Tantrist -tan-trodden -tantrum -tantrums -tantrum's -tantum -tanwood -tanworks -Tanzania -tanzanian -tanzanians -tanzanite -tanzeb -tanzy -tanzib -Tanzine -TAO -taoiya -taoyin -Taoism -Taoist -Taoistic -taoists -Taonurus -Taopi -Taos -taotai -tao-tieh -TAP -Tapa -Tapachula -Tapachulteca -tapacolo -tapaculo -tapaculos -Tapacura -tapadera -tapaderas -tapadero -tapaderos -tapayaxin -Tapaj -Tapajo -Tapajos -tapalo -tapalos -tapamaker -tapamaking -tapas -tapasvi -tap-dance -tap-danced -tap-dancer -tap-dancing -Tape -Tapeats -tape-bound -tapecopy -taped -tapedrives -tapeinocephaly -tapeinocephalic -tapeinocephalism -tapeless -tapelike -tapeline -tapelines -tapemaker -tapemaking -tapeman -tapemarks -tapemen -tapemove -tapen -tape-printing -taper -taperbearer -taper-bored -tape-record -tapered -tapered-in -taperer -taperers -taper-fashion -taper-grown -taper-headed -tapery -tapering -taperingly -taperly -taper-lighted -taper-limbed -tapermaker -tapermaking -taper-molded -taperness -taper-pointed -tapers -taperstick -taperwise -Tapes -tapesium -tape-slashing -tapester -tapestry -tapestry-covered -tapestried -tapestries -tapestrying -tapestrylike -tapestring -tapestry's -tapestry-worked -tapestry-woven -tapet -tapeta -tapetal -tapete -tapeti -tape-tied -tape-tying -tapetis -tapetless -Tapetron -tapetta -tapetum -tapework -tapeworm -tapeworms -taphephobia -Taphiae -taphole -tap-hole -tapholes -taphouse -tap-house -taphouses -Taphria -Taphrina -Taphrinaceae -tapia -tapidero -Tapijulapane -tapinceophalism -taping -tapings -tapinocephaly -tapinocephalic -Tapinoma -tapinophoby -tapinophobia -tapinosis -tapioca -tapioca-plant -tapiocas -tapiolite -tapir -Tapiridae -tapiridian -tapirine -Tapiro -tapiroid -tapirs -Tapirus -tapis -tapiser -tapises -tapism -tapisser -tapissery -tapisserie -tapissier -tapist -tapit -taplash -tap-lash -Tapley -Tapleyism -taplet -Taplin -tapling -tapmost -tapnet -tapoa -Tapoco -tap-off -Taposa -tapotement -tapoun -tappa -tappable -tappableness -Tappahannock -tappall -Tappan -tappaul -tapped -Tappen -tapper -tapperer -tapper-out -tappers -tapper's -Tappertitian -tappet -tappets -tap-pickle -tappietoorie -tapping -tappings -tappish -tappit -tappit-hen -tappoon -Taprobane -taproom -tap-room -taprooms -taproot -tap-root -taprooted -taproots -taproot's -taps -tap's -tapsalteerie -tapsal-teerie -tapsie-teerie -tapsman -tapster -tapsterly -tapsterlike -tapsters -tapstress -tap-tap -tap-tap-tap -tapu -Tapuya -Tapuyan -Tapuyo -tapul -tapwort -taqlid -taqua -TAR -Tara -Tarabar -tarabooka -Taracahitian -taradiddle -taraf -tarafdar -tarage -Tarah -Tarahumar -Tarahumara -Tarahumare -Tarahumari -Tarai -tarairi -tarakihi -Taraktogenos -tarama -taramas -taramasalata -taramellite -Taramembe -Taran -Taranchi -tarand -Tarandean -tar-and-feathering -Tarandian -Taranis -tarantara -tarantarize -tarantas -tarantases -tarantass -tarantella -tarantelle -tarantism -tarantist -Taranto -tarantula -tarantulae -tarantular -tarantulary -tarantulas -tarantulated -tarantulid -Tarantulidae -tarantulism -tarantulite -tarantulous -tarapatch -taraph -tarapin -Tarapon -Tarapoto -Tarasc -Tarascan -Tarasco -tarassis -tarata -taratah -taratantara -taratantarize -tarau -Tarawa -Tarawa-Makin -taraxacerin -taraxacin -Taraxacum -Tarazed -Tarazi -tarbadillo -tarbagan -tar-barrel -tar-bedaubed -Tarbell -Tarbes -tarbet -tar-bind -tar-black -tarble -tarboard -tarbogan -tarboggin -tarboy -tar-boiling -tarboosh -tarbooshed -tarbooshes -Tarboro -tarbox -tar-brand -tarbrush -tar-brush -tar-burning -tarbush -tarbushes -tarbuttite -tarcel -tarchon -tar-clotted -tar-coal -tardamente -tardando -tardant -Tarde -Tardenoisian -tardy -tardier -tardies -tardiest -Tardieu -tardy-gaited -Tardigrada -tardigrade -tardigradous -tardily -tardiloquent -tardiloquy -tardiloquous -tardy-moving -tardiness -tardyon -tardyons -tar-dipped -tardy-rising -tardity -tarditude -tardive -tardle -tardo -Tare -tarea -tared -tarefa -tarefitch -Tareyn -tarentala -tarente -Tarentine -tarentism -tarentola -Tarentum -tarepatch -tareq -tares -tarfa -tarflower -targe -targed -targeman -targer -targes -target -targeted -targeteer -targetier -targeting -targetless -targetlike -targetman -targets -target-shy -targetshooter -Targett -target-tower -target-tug -Targhee -targing -Targitaus -Targum -Targumic -Targumical -Targumist -Targumistic -Targumize -Targums -tar-heating -Tarheel -Tarheeler -tarhood -tari -Tariana -taryard -Taryba -tarie -tariff -tariffable -tariff-born -tariff-bound -tariffed -tariff-fed -tariffication -tariffing -tariffism -tariffist -tariffite -tariffize -tariffless -tariff-protected -tariff-raised -tariff-raising -tariff-reform -tariff-regulating -tariff-ridden -tariffs -tariff's -tariff-tinkering -Tariffville -tariff-wise -Tarija -Tarim -tarin -Taryn -Taryne -taring -tariqa -tariqat -Tariri -tariric -taririnic -tarish -Tarkalani -Tarkani -Tarkany -tarkashi -tarkeean -tarkhan -Tarkington -Tarkio -Tarlac -tar-laid -tarlatan -tarlataned -tarlatans -tarleather -tarletan -tarletans -tarlies -tarlike -Tarlton -tarltonize -Tarmac -tarmacadam -tarmacs -tarman -tarmi -tarmined -tarmosined -Tarn -tarnal -tarnally -tarnation -tarn-brown -Tarne -Tarn-et-Garonne -Tarnhelm -tarnish -tarnishable -tarnished -tarnisher -tarnishes -tarnishing -tarnishment -tarnishproof -Tarnkappe -tarnlike -Tarnopol -Tarnow -tarns -tarnside -Taro -taroc -tarocco -tarocs -tarogato -tarogatos -tarok -taroks -taropatch -taros -tarot -tarots -tarp -tar-paint -tarpan -tarpans -tarpaper -tarpapered -tarpapers -tarpaulian -tarpaulin -tarpaulin-covered -tarpaulin-lined -tarpaulinmaker -tarpaulins -tar-paved -Tarpeia -Tarpeian -Tarpley -tarpon -tarpons -tarpot -tarps -tarpum -Tarquin -Tarquinish -Tarr -Tarra -tarraba -tarrack -tarradiddle -tarradiddler -tarragon -Tarragona -tarragons -Tarrah -Tarrance -Tarrant -tarras -Tarrasa -tarrass -Tarrateen -Tarratine -tarre -tarred -Tarrel -tar-removing -tarrer -tarres -tarri -tarry -tarriance -tarry-breeks -tarrie -tarried -tarrier -tarriers -tarries -tarriest -tarrify -tarry-fingered -tarryiest -tarrying -tarryingly -tarryingness -tarry-jacket -Tarry-john -tarrily -Tarryn -tarriness -tarring -tarrish -Tarrytown -tarrock -tar-roofed -tarrow -Tarrs -Tarrsus -tars -tarsadenitis -tarsal -tarsale -tarsalgia -tarsalia -tarsals -tar-scented -tarse -tar-sealed -tarsectomy -tarsectopia -Tarshish -tarsi -tarsia -tarsias -tarsier -tarsiers -Tarsiidae -tarsioid -Tarsipedidae -Tarsipedinae -Tarsipes -tarsitis -Tarsius -Tarski -tarso- -tar-soaked -tarsochiloplasty -tarsoclasis -tarsomalacia -tarsome -tarsometatarsal -tarso-metatarsal -tarsometatarsi -tarsometatarsus -tarso-metatarsus -tarsonemid -Tarsonemidae -Tarsonemus -tarso-orbital -tarsophalangeal -tarsophyma -tarsoplasia -tarsoplasty -tarsoptosis -tarsorrhaphy -tarsotarsal -tarsotibal -tarsotomy -tar-spray -Tarsus -Tarsuss -tart -Tartaglia -tartago -Tartan -tartana -tartanas -tartane -tartan-purry -tartans -Tartar -tartarated -tartare -Tartarean -Tartareous -tartaret -Tartary -Tartarian -Tartaric -Tartarin -tartarine -tartarish -Tartarism -Tartarization -Tartarize -Tartarized -tartarizing -tartarly -Tartarlike -Tartar-nosed -Tartarology -tartarous -tartarproof -tartars -tartarum -Tartarus -tarte -tarted -tartemorion -tarten -tarter -tartest -tarty -tartine -tarting -Tartini -tartish -tartishly -tartishness -tartle -tartlet -tartlets -tartly -tartness -tartnesses -Tarton -tartralic -tartramate -tartramic -tartramid -tartramide -tartrate -tartrated -tartrates -tartratoferric -tartrazin -tartrazine -tartrazinic -tartrelic -tartryl -tartrylic -tartro -tartro- -tartronate -tartronic -tartronyl -tartronylurea -tartrous -tarts -Tarttan -Tartu -Tartufe -tartufery -Tartufes -Tartuffe -Tartuffery -Tartuffes -Tartuffian -Tartuffish -tartuffishly -Tartuffism -tartufian -tartufish -tartufishly -tartufism -tartwoman -tartwomen -Taruma -Tarumari -Taruntius -tarve -Tarvia -tar-water -tarweed -tarweeds -tarwhine -tarwood -tarworks -Tarzan -Tarzana -Tarzanish -tarzans -TAS -tasajillo -tasajillos -tasajo -tasbih -TASC -tascal -tasco -taseometer -tash -Tasha -tasheriff -tashie -Tashkend -Tashkent -Tashlich -Tashlik -Tashmit -Tashnagist -Tashnakist -tashreef -tashrif -Tashusai -TASI -Tasia -Tasian -Tasiana -tasimeter -tasimetry -tasimetric -task -taskage -tasked -Tasker -tasking -taskit -taskless -tasklike -taskmaster -taskmasters -taskmastership -taskmistress -tasks -tasksetter -tasksetting -taskwork -task-work -taskworks -Tasley -taslet -Tasm -Tasman -Tasmania -Tasmanian -tasmanite -TASS -tassago -tassah -tassal -tassard -tasse -tassel -tasseled -tasseler -tasselet -tasselfish -tassel-hung -tassely -tasseling -tasselled -tasseller -tasselly -tasselling -tassellus -tasselmaker -tasselmaking -tassels -tassel's -tasser -tasses -tasset -tassets -Tassie -tassies -Tasso -tassoo -tastable -tastableness -tastably -taste -tasteable -tasteableness -tasteably -tastebuds -tasted -tasteful -tastefully -tastefulness -tastekin -tasteless -tastelessly -tastelessness -tastemaker -taste-maker -tasten -taster -tasters -tastes -tasty -tastier -tastiest -tastily -tastiness -tasting -tastingly -tastings -tasu -Taswell -TAT -ta-ta -tatami -Tatamy -tatamis -Tatar -Tatary -Tatarian -Tataric -Tatarization -Tatarize -tatars -tataupa -tatbeb -tatchy -Tate -tater -taters -Tates -Tateville -tath -Tathagata -Tathata -Tati -Tatia -Tatian -Tatiana -Tatianas -Tatiania -Tatianist -Tatianna -tatie -tatinek -Tatius -tatler -Tatman -tatmjolk -tatoo -tatoos -tatou -tatouay -tatouays -tatpurusha -tats -Tatsanottine -tatsman -tatta -Tattan -tat-tat -tat-tat-tat -tatted -tatter -tatterdemalion -tatterdemalionism -tatterdemalionry -tatterdemalions -tattered -tatteredly -tatteredness -tattery -tattering -tatterly -tatters -tattersall -tattersalls -tatterwag -tatterwallop -tatther -tatty -tattie -tattied -tattier -tatties -tattiest -tattily -tattiness -tatting -tattings -tatty-peelin -tattle -tattled -tattlement -tattler -tattlery -tattlers -tattles -tattletale -tattletales -tattling -tattlingly -tattoo -tattooage -tattooed -tattooer -tattooers -tattooing -tattooist -tattooists -tattooment -tattoos -tattva -Tatu -tatuasu -tatukira -Tatum -Tatums -Tatusia -Tatusiidae -TAU -Taub -Taube -Tauchnitz -taught -taula -taulch -Tauli -taulia -taum -tau-meson -taun -Taungthu -taunt -taunted -taunter -taunters -taunting -tauntingly -tauntingness -taunt-masted -Taunton -tauntress -taunt-rigged -taunts -taupe -taupe-rose -taupes -Taupo -taupou -taur -Tauranga -taurean -Tauri -Taurian -Tauric -tauricide -tauricornous -Taurid -Tauridian -tauriferous -tauriform -tauryl -taurylic -taurin -taurine -taurines -Taurini -taurite -tauro- -tauroboly -taurobolia -taurobolium -taurocephalous -taurocholate -taurocholic -taurocol -taurocolla -Tauroctonus -taurodont -tauroesque -taurokathapsia -taurolatry -tauromachy -tauromachia -tauromachian -tauromachic -tauromaquia -tauromorphic -tauromorphous -taurophile -taurophobe -taurophobia -Tauropolos -Taurotragus -Taurus -tauruses -taus -tau-saghyz -Taussig -taut -taut- -tautaug -tautaugs -tauted -tautegory -tautegorical -tauten -tautened -tautening -tautens -tauter -tautest -tauting -tautirite -tautit -tautly -tautness -tautnesses -tauto- -tautochrone -tautochronism -tautochronous -tautog -tautogs -tautoisomerism -Tautology -tautologic -tautological -tautologically -tautologicalness -tautologies -tautology's -tautologise -tautologised -tautologising -tautologism -tautologist -tautologize -tautologized -tautologizer -tautologizing -tautologous -tautologously -tautomer -tautomeral -tautomery -tautomeric -tautomerism -tautomerizable -tautomerization -tautomerize -tautomerized -tautomerizing -tautomers -tautometer -tautometric -tautometrical -tautomorphous -tautonym -tautonymy -tautonymic -tautonymies -tautonymous -tautonyms -tautoousian -tautoousious -tautophony -tautophonic -tautophonical -tautopody -tautopodic -tau-topped -tautosyllabic -tautotype -tautourea -tautousian -tautousious -tautozonal -tautozonality -tauts -Tav -Tavares -Tavast -Tavastian -Tave -Taveda -Tavey -Tavel -tavell -taver -tavern -taverna -tavernas -Taverner -taverners -tavern-gotten -tavern-hunting -Tavernier -tavernize -tavernless -tavernly -tavernlike -tavernous -tavernry -taverns -tavern's -tavern-tainted -tavernwards -tavers -tavert -tavestock -Tavghi -Tavgi -Tavi -Tavy -Tavia -Tavie -Tavis -Tavish -tavistockite -tavoy -tavola -tavolatite -TAVR -tavs -taw -tawa -tawdered -tawdry -tawdrier -tawdries -tawdriest -tawdrily -tawdriness -tawed -tawer -tawery -tawers -Tawgi -tawhai -tawhid -tawie -tawyer -tawing -tawite -tawkee -tawkin -tawn -Tawney -tawneier -tawneiest -tawneys -tawny -Tawnya -tawny-brown -tawny-coated -tawny-colored -tawnie -tawnier -tawnies -tawniest -tawny-faced -tawny-gold -tawny-gray -tawny-green -tawny-haired -tawny-yellow -tawnily -tawny-moor -tawniness -tawny-olive -tawny-skinned -tawny-tanned -tawny-visaged -tawny-whiskered -tawnle -tawpi -tawpy -tawpie -tawpies -taws -tawse -tawsed -tawses -Tawsha -tawsy -tawsing -Taw-Sug -tawtie -tax -tax- -taxa -taxability -taxable -taxableness -taxables -taxably -Taxaceae -taxaceous -taxameter -taxaspidean -taxation -taxational -taxations -taxative -taxatively -taxator -tax-born -tax-bought -tax-burdened -tax-cart -tax-deductible -tax-dodging -taxeater -taxeating -taxed -taxeme -taxemes -taxemic -taxeopod -Taxeopoda -taxeopody -taxeopodous -taxer -taxers -taxes -tax-exempt -tax-free -taxgatherer -tax-gatherer -taxgathering -taxi -taxy -taxiable -taxiarch -taxiauto -taxi-bordered -taxibus -taxicab -taxi-cab -taxicabs -taxicab's -taxicorn -Taxidea -taxidermal -taxidermy -taxidermic -taxidermies -taxidermist -taxidermists -taxidermize -taxidriver -taxied -taxies -taxiing -taxying -Taxila -taximan -taximen -taximeter -taximetered -taxin -taxine -taxing -taxingly -taxinomy -taxinomic -taxinomist -taxiplane -taxir -taxis -taxistand -taxite -taxites -taxitic -taxiway -taxiways -tax-laden -taxless -taxlessly -taxlessness -tax-levying -taxman -taxmen -Taxodiaceae -Taxodium -taxodont -taxology -taxometer -taxon -taxonomer -taxonomy -taxonomic -taxonomical -taxonomically -taxonomies -taxonomist -taxonomists -taxons -taxor -taxpaid -taxpayer -taxpayers -taxpayer's -taxpaying -tax-ridden -tax-supported -Taxus -taxwax -taxwise -ta-zaung -tazeea -Tazewell -tazia -tazza -tazzas -tazze -TB -TBA -T-bar -TBD -T-bevel -Tbi -Tbilisi -Tbisisi -TBO -t-bone -TBS -tbs. -tbsp -tbssaraglot -TC -TCA -TCAP -TCAS -Tcawi -TCB -TCBM -TCC -TCCC -TCG -tch -Tchad -tchai -Tchaikovsky -Tchao -tchapan -tcharik -tchast -tche -tcheckup -tcheirek -Tcheka -Tchekhov -Tcherepnin -Tcherkess -tchervonets -tchervonetz -tchervontzi -Tchetchentsish -Tchetnitsi -tchetvert -Tchi -tchick -tchincou -tchr -tchu -Tchula -Tchwi -tck -TCM -T-connected -TCP -TCPIP -TCR -TCS -TCSEC -TCT -TD -TDAS -TDC -TDCC -TDD -TDE -TDI -TDY -TDL -TDM -TDMA -TDO -TDR -TDRS -TDRSS -TE -tea -Teaberry -teaberries -tea-blending -teaboard -teaboards -teaboy -teabowl -teabowls -teabox -teaboxes -teacake -teacakes -teacart -teacarts -Teach -teachability -teachable -teachableness -teachably -teache -teached -Teachey -teacher -teacherage -teacherdom -teacheress -teacherhood -teachery -teacherish -teacherless -teacherly -teacherlike -teachers -teacher's -teachership -teaches -tea-chest -teachy -teach-in -teaching -teachingly -teachings -teach-ins -teachless -teachment -tea-clipper -tea-colored -tea-covered -teacup -tea-cup -teacupful -teacupfuls -teacups -teacupsful -tead -teadish -Teador -teaey -teaer -Teagan -Teagarden -tea-garden -tea-gardened -teagardeny -Teage -teagle -tea-growing -Teague -Teagueland -Teaguelander -Teahan -teahouse -teahouses -teaing -tea-inspired -Teays -teaish -teaism -Teak -teak-brown -teak-built -teak-complexioned -teakettle -teakettles -teak-lined -teak-producing -teaks -teakwood -teakwoods -teal -tea-leaf -tealeafy -tea-leaved -tea-leaves -tealery -tealess -tealike -teallite -tea-loving -teals -team -teamaker -tea-maker -teamakers -teamaking -teaman -teamed -teameo -teamer -teaming -tea-mixing -teamland -teamless -teamman -teammate -team-mate -teammates -teams -teamsman -teamster -teamsters -teamwise -teamwork -teamworks -tean -teanal -Teaneck -tea-of-heaven -teap -tea-packing -tea-party -tea-plant -tea-planter -teapoy -teapoys -teapot -tea-pot -teapotful -teapots -teapottykin -tea-producing -tear -tear- -tearable -tearableness -tearably -tear-acknowledged -tear-affected -tearage -tear-angry -tear-arresting -tear-attested -tearaway -tear-baptized -tear-bedabbled -tear-bedewed -tear-besprinkled -tear-blinded -tear-bottle -tear-bright -tearcat -tear-commixed -tear-compelling -tear-composed -tear-creating -tear-damped -tear-derived -tear-dewed -tear-dimmed -tear-distained -tear-distilling -teardown -teardowns -teardrop -tear-dropped -teardrops -tear-drowned -tear-eased -teared -tear-embarrassed -tearer -tearers -tear-expressed -tear-falling -tear-filled -tear-forced -tear-fraught -tear-freshened -tearful -tearfully -tearfulness -teargas -tear-gas -teargases -teargassed -tear-gassed -teargasses -teargassing -tear-gassing -tear-glistening -teary -tearier -teariest -tearily -tear-imaged -teariness -tearing -tearingly -tearjerker -tear-jerker -tearjerkers -tear-jerking -tear-kissed -tear-lamenting -Tearle -tearless -tearlessly -tearlessness -tearlet -tearlike -tear-lined -tear-marked -tear-melted -tear-mirrored -tear-misty -tear-mocking -tear-moist -tear-mourned -tear-off -tearoom -tearooms -tea-rose -tear-out -tear-owned -tear-paying -tear-pale -tear-pardoning -tear-persuaded -tear-phrased -tear-pictured -tearpit -tear-pitying -tear-plagued -tear-pouring -tear-practiced -tear-procured -tearproof -tear-protested -tear-provoking -tear-purchased -tear-quick -tear-raining -tear-reconciled -tear-regretted -tear-resented -tear-revealed -tear-reviving -tears -tear-salt -tear-scorning -tear-sealed -tear-shaped -tear-shedding -tear-shot -tearstain -tearstained -tear-stained -tear-stubbed -tear-swollen -teart -tear-thirsty -tearthroat -tearthumb -tear-washed -tear-wet -tear-wiping -tear-worn -tear-wrung -teas -teasable -teasableness -teasably -tea-scented -Teasdale -tease -teaseable -teaseableness -teaseably -teased -teasehole -teasel -teaseled -teaseler -teaselers -teaseling -teaselled -teaseller -teasellike -teaselling -teasels -teaselwort -teasement -teaser -teasers -teases -teashop -teashops -teasy -teasiness -teasing -teasingly -teasle -teasler -tea-sodden -teaspoon -tea-spoon -teaspoonful -teaspoonfuls -teaspoonful's -teaspoons -teaspoon's -teaspoonsful -tea-swilling -teat -tea-table -tea-tabular -teataster -tea-taster -teated -teatfish -teathe -teather -tea-things -teaty -teatime -teatimes -teatlike -teatling -teatman -tea-tray -tea-tree -teats -teave -teaware -teawares -teaze -teazel -teazeled -teazeling -teazelled -teazelling -teazels -teazer -teazle -teazled -teazles -teazling -TEB -tebbad -tebbet -Tebbetts -tebeldi -Tebet -Tebeth -Tebu -TEC -Teca -tecali -tecassir -Tecate -Tech -tech. -teched -techy -techie -techier -techies -techiest -techily -techiness -techne -technetium -technetronic -Techny -technic -technica -technical -technicalism -technicalist -technicality -technicalities -technicality's -technicalization -technicalize -technically -technicalness -technician -technicians -technician's -technicism -technicist -technico- -technicology -technicological -Technicolor -technicolored -technicon -technics -Technion -techniphone -technique -techniquer -techniques -technique's -technism -technist -techno- -technocausis -technochemical -technochemistry -technocracy -technocracies -technocrat -technocratic -technocrats -technographer -technography -technographic -technographical -technographically -technol -technolithic -technology -technologic -technological -technologically -technologies -technologist -technologists -technologist's -technologize -technologue -technonomy -technonomic -technopsychology -technostructure -techous -teck -Tecla -Tecmessa -tecno- -tecnoctonia -tecnology -TECO -Tecoma -tecomin -tecon -Tecopa -Tecpanec -tecta -tectal -tectibranch -Tectibranchia -tectibranchian -Tectibranchiata -tectibranchiate -tectiform -tectite -tectites -tectocephaly -tectocephalic -tectology -tectological -Tecton -Tectona -tectonic -tectonically -tectonics -tectonism -tectorial -tectorium -Tectosages -tectosphere -tectospinal -Tectospondyli -tectospondylic -tectospondylous -tectrices -tectricial -tectrix -tectum -tecture -Tecu -tecum -tecuma -Tecumseh -Tecumtha -Tecuna -Ted -Teda -Tedd -Tedda -tedded -Tedder -tedders -Teddi -Teddy -teddy-bear -Teddie -teddies -tedding -Teddman -tedesca -tedescan -tedesche -tedeschi -tedesco -tedge -Tedi -Tedie -tediosity -tedious -tediously -tediousness -tediousnesses -tediousome -tedisome -tedium -tedium-proof -tediums -Tedman -Tedmann -Tedmund -Tedra -Tedric -teds -tee -tee-bulb -teecall -Teece -teed -teedle -tee-hee -tee-hole -teeing -teel -teels -teem -teemed -teemer -teemers -teemful -teemfulness -teeming -teemingly -teemingness -teemless -teems -teen -Teena -teenage -teen-age -teenaged -teen-aged -teenager -teen-ager -teenagers -tee-name -teener -teeners -teenet -teenful -teenfully -teenfuls -teeny -teenybop -teenybopper -teenyboppers -teenie -teenier -teeniest -teenie-weenie -teenish -teeny-weeny -teens -teensy -teensier -teensiest -teensie-weensie -teensy-weensy -teenty -teentsy -teentsier -teentsiest -teentsy-weentsy -teepee -teepees -teer -Teerell -teerer -Tees -tee-shirt -Teesside -teest -Teeswater -teet -teetaller -teetan -teetee -Teeter -teeterboard -teetered -teeterer -teetery -teetery-bender -teetering -teetering-board -teeteringly -teeters -teetertail -teeter-totter -teeter-tottering -teeth -teethache -teethbrush -teeth-chattering -teethe -teethed -teeth-edging -teether -teethers -teethes -teethful -teeth-gnashing -teeth-grinding -teethy -teethier -teethiest -teethily -teething -teethings -teethless -teethlike -teethridge -teety -teeting -teetotal -teetotaled -teetotaler -teetotalers -teetotaling -teetotalism -teetotalist -teetotalled -teetotaller -teetotally -teetotalling -teetotals -teetotum -teetotumism -teetotumize -teetotums -teetotumwise -teetsook -teevee -Teevens -teewhaap -tef -Teferi -teff -teffs -Tefft -tefillin -TEFLON -teg -Tega -Tegan -Tegea -Tegean -Tegeates -Tegeticula -tegg -Tegyrius -tegmen -tegment -tegmenta -tegmental -tegmentum -tegmina -tegminal -Tegmine -tegs -tegua -teguas -Tegucigalpa -teguexin -teguguria -Teguima -tegula -tegulae -tegular -tegularly -tegulated -tegumen -tegument -tegumenta -tegumental -tegumentary -teguments -tegumentum -tegumina -teguria -tegurium -Teh -Tehachapi -Tehama -tehee -te-hee -te-heed -te-heing -Teheran -Tehillim -TEHO -Tehran -tehseel -tehseeldar -tehsil -tehsildar -Tehuacana -Tehuantepec -Tehuantepecan -Tehuantepecer -Tehueco -Tehuelche -Tehuelchean -Tehuelches -Tehuelet -Teian -teicher -teichopsia -Teide -Teyde -teiglach -teiglech -teihte -teiid -Teiidae -teiids -teil -Teillo -Teilo -teind -teindable -teinder -teinds -teinland -teinoscope -teioid -Teiresias -TEirtza -teise -tejano -Tejo -Tejon -teju -Tekakwitha -Tekamah -tekedye -tekya -tekiah -Tekintsi -Tekke -tekken -Tekkintzi -Tekla -teknonymy -teknonymous -teknonymously -Tekoa -Tekonsha -tektite -tektites -tektitic -tektos -tektosi -tektosil -tektosilicate -Tektronix -TEL -tel- -tela -telacoustic -telae -telaesthesia -telaesthetic -telakucha -Telamon -telamones -Telanaipura -telang -telangiectases -telangiectasy -telangiectasia -telangiectasis -telangiectatic -telangiosis -Telanthera -Telanthropus -telar -telary -telarian -telarly -telautogram -TelAutograph -TelAutography -telautographic -telautographist -telautomatic -telautomatically -telautomatics -Telchines -Telchinic -Teldyne -tele -tele- -tele-action -teleanemograph -teleangiectasia -telebarograph -telebarometer -teleblem -Teleboides -telecamera -telecast -telecasted -telecaster -telecasters -telecasting -telecasts -telechemic -telechirograph -telecinematography -telecode -telecomm -telecommunicate -telecommunication -telecommunicational -telecommunications -telecomputer -telecomputing -telecon -teleconference -telecourse -telecryptograph -telectrograph -telectroscope -teledendrion -teledendrite -teledendron -Teledyne -teledu -teledus -telefacsimile -telefilm -telefilms -Telefunken -teleg -teleg. -telega -telegas -telegenic -telegenically -Telegn -telegnosis -telegnostic -telegony -telegonic -telegonies -telegonous -Telegonus -telegraf -telegram -telegrammatic -telegramme -telegrammed -telegrammic -telegramming -telegrams -telegram's -telegraph -telegraphed -telegraphee -telegrapheme -telegrapher -telegraphers -telegraphese -telegraphy -telegraphic -telegraphical -telegraphically -telegraphics -telegraphing -telegraphist -telegraphists -telegraphone -telegraphonograph -telegraphophone -telegraphoscope -telegraphs -Telegu -telehydrobarometer -Telei -Teleia -teleianthous -tele-iconograph -Tel-Eye -teleiosis -telekinematography -telekineses -telekinesis -telekinetic -telekinetically -telelectric -telelectrograph -telelectroscope -telelens -Telemachus -teleman -Telemann -telemanometer -Telemark -telemarks -Telembi -telemechanic -telemechanics -telemechanism -telemen -telemetacarpal -telemeteorograph -telemeteorography -telemeteorographic -telemeter -telemetered -telemetering -telemeters -telemetry -telemetric -telemetrical -telemetrically -telemetries -telemetrist -telemetrograph -telemetrography -telemetrographic -telemotor -Telemus -telencephal -telencephala -telencephalic -telencephalla -telencephalon -telencephalons -telenergy -telenergic -teleneurite -teleneuron -Telenget -telengiscope -Telenomus -teleo- -teleobjective -Teleocephali -teleocephalous -Teleoceras -Teleodesmacea -teleodesmacean -teleodesmaceous -teleodont -teleology -teleologic -teleological -teleologically -teleologies -teleologism -teleologist -teleometer -teleophyte -teleophobia -teleophore -teleoptile -teleorganic -teleoroentgenogram -teleoroentgenography -teleosaur -teleosaurian -Teleosauridae -Teleosaurus -teleost -teleostean -Teleostei -teleosteous -teleostomate -teleostome -Teleostomi -teleostomian -teleostomous -teleosts -teleotemporal -teleotrocha -teleozoic -teleozoon -telepath -telepathy -telepathic -telepathically -telepathies -telepathist -telepathize -teleph -Telephassa -telepheme -telephone -telephoned -telephoner -telephoners -telephones -telephony -telephonic -telephonical -telephonically -telephonics -telephoning -telephonist -telephonists -telephonograph -telephonographic -telephonophobia -telephote -telephoty -Telephoto -telephotograph -telephotographed -telephotography -telephotographic -telephotographing -telephotographs -telephotometer -Telephus -telepicture -teleplay -teleplays -teleplasm -teleplasmic -teleplastic -Teleplotter -teleport -teleportation -teleported -teleporting -teleports -telepost -teleprinter -teleprinters -teleprocessing -teleprompter -teleradiography -teleradiophone -Teleran -telerans -Telereader -telergy -telergic -telergical -telergically -teles -telescope -telescoped -telescopes -telescopy -telescopic -telescopical -telescopically -telescopiform -Telescopii -telescoping -telescopist -Telescopium -telescreen -telescribe -telescript -telescriptor -teleseism -teleseismic -teleseismology -teleseme -teleses -telesia -telesis -telesiurgic -telesm -telesmatic -telesmatical -telesmeter -telesomatic -telespectroscope -Telesphorus -telestereograph -telestereography -telestereoscope -telesteria -telesterion -telesthesia -telesthetic -telestial -telestic -telestich -teletactile -teletactor -teletape -teletex -teletext -teletherapy -telethermogram -telethermograph -telethermometer -telethermometry -telethermoscope -telethon -telethons -Teletype -teletyped -teletyper -teletypes -teletype's -Teletypesetter -teletypesetting -teletypewrite -teletypewriter -teletypewriters -teletypewriting -Teletyping -teletypist -teletypists -teletopometer -teletranscription -teletube -Teleut -teleuto -teleutoform -teleutosori -teleutosorus -teleutosorusori -teleutospore -teleutosporic -teleutosporiferous -teleview -televiewed -televiewer -televiewing -televiews -televise -televised -televises -televising -television -televisional -televisionally -televisionary -televisions -television-viewer -televisor -televisors -televisor's -televisual -televocal -televox -telewriter -TELEX -telexed -telexes -telexing -Telfairia -telfairic -Telfer -telferage -telfered -telfering -Telferner -telfers -Telford -telfordize -telfordized -telfordizing -telfords -Telfore -telharmony -telharmonic -telharmonium -teli -telia -telial -telic -telical -telically -teliferous -telyn -Telinga -teliosorus -teliospore -teliosporic -teliosporiferous -teliostage -telium -Tell -Tella -tellable -tellach -tellee -tellen -Teller -teller-out -tellers -tellership -Tellez -Tellford -telly -tellies -tellieses -telligraph -Tellima -tellin -Tellina -Tellinacea -tellinacean -tellinaceous -telling -tellingly -Tellinidae -tellinoid -tellys -Tello -Telloh -tells -tellsome -tellt -telltale -tell-tale -telltalely -telltales -telltruth -tell-truth -tellur- -tellural -tellurate -telluret -tellureted -tellurethyl -telluretted -tellurhydric -tellurian -telluric -Telluride -telluriferous -tellurion -tellurism -tellurist -tellurite -tellurium -tellurize -tellurized -tellurizing -tellurometer -telluronium -tellurous -Tellus -telmatology -telmatological -telo- -teloblast -teloblastic -telocentric -telodendria -telodendrion -telodendron -telodynamic -Telogia -teloi -telokinesis -telolecithal -telolemma -telolemmata -telome -telomere -telomerization -telomes -telomic -telomitic -telonism -Teloogoo -Telopea -telophase -telophasic -telophragma -telopsis -teloptic -telos -telosynapsis -telosynaptic -telosynaptist -telotaxis -teloteropathy -teloteropathic -teloteropathically -telotype -Telotremata -telotrematous -telotroch -telotrocha -telotrochal -telotrochous -telotrophic -telpath -telpher -telpherage -telphered -telpheric -telphering -telpherman -telphermen -telphers -telpherway -Telphusa -tels -TELSAM -telson -telsonic -telsons -Telstar -telt -Telugu -Telugus -Telukbetung -telurgy -Tem -TEMA -temacha -temadau -temalacatl -Teman -Temanite -tembe -tembeitera -tembeta -tembetara -temblor -temblores -temblors -Tembu -Temecula -temene -temenos -Temenus -temerarious -temerariously -temerariousness -temerate -temerity -temerities -temeritous -temerous -temerously -temerousness -temescal -Temesv -Temesvar -temiak -temin -Temiskaming -Temne -Temnospondyli -temnospondylous -Temp -temp. -Tempa -Tempe -Tempean -tempeh -tempehs -Tempel -temper -tempera -temperability -temperable -temperably -temperality -temperament -temperamental -temperamentalist -temperamentally -temperamentalness -temperamented -temperaments -temperance -temperances -Temperanceville -temperas -temperate -temperately -temperateness -temperative -temperature -temperatures -temperature's -tempered -temperedly -temperedness -temperer -temperers -tempery -tempering -temperish -temperless -tempers -tempersome -temper-spoiling -temper-trying -temper-wearing -TEMPEST -Tempestates -tempest-bearing -tempest-beaten -tempest-blown -tempest-born -tempest-clear -tempest-driven -tempested -tempest-flung -tempest-gripped -tempest-harrowed -tempesty -tempestical -tempesting -tempestive -tempestively -tempestivity -tempest-loving -tempest-proof -tempest-rent -tempest-rocked -tempests -tempest-scattered -tempest-scoffing -tempest-shattered -tempest-sundered -tempest-swept -tempest-threatened -tempest-torn -tempest-tossed -tempest-tost -tempest-troubled -tempestuous -tempestuously -tempestuousness -tempest-walking -tempest-winged -tempest-worn -tempete -tempi -Tempyo -Templa -Templar -templardom -templary -templarism -templarlike -templarlikeness -templars -Templas -template -templater -templates -template's -Temple -temple-bar -temple-crowned -templed -templeful -temple-guarded -temple-haunting -templeless -templelike -Templer -temple-robbing -temples -temple's -temple-sacred -templet -Templeton -Templetonia -temple-treated -templets -Templeville -templeward -Templia -templize -templon -templum -TEMPO -tempora -temporal -temporale -temporalis -temporalism -temporalist -temporality -temporalities -temporalize -temporally -temporalness -temporals -temporalty -temporalties -temporaneous -temporaneously -temporaneousness -temporary -temporaries -temporarily -temporariness -temporator -tempore -temporisation -temporise -temporised -temporiser -temporising -temporisingly -temporist -temporization -temporize -temporized -temporizer -temporizers -temporizes -temporizing -temporizingly -temporo- -temporoalar -temporoauricular -temporocentral -temporocerebellar -temporofacial -temporofrontal -temporohyoid -temporomalar -temporomandibular -temporomastoid -temporomaxillary -temporooccipital -temporoparietal -temporopontine -temporosphenoid -temporosphenoidal -temporozygomatic -tempos -tempre -temprely -temps -tempt -temptability -temptable -temptableness -temptation -temptational -temptationless -temptation-proof -temptations -temptation's -temptatious -temptatory -tempted -Tempter -tempters -tempting -temptingly -temptingness -temptress -temptresses -tempts -temptsome -tempura -tempuras -tempus -temse -temsebread -temseloaf -temser -Temuco -temulence -temulency -temulent -temulentive -temulently -Ten -ten- -ten. -Tena -tenability -tenabilities -tenable -tenableness -tenably -tenace -tenaces -Tenach -tenacy -tenacious -tenaciously -tenaciousness -tenacity -tenacities -tenacle -ten-acre -ten-acred -tenacula -tenaculum -tenaculums -Tenafly -Tenaha -tenai -tenail -tenaille -tenailles -tenaillon -tenails -tenaim -Tenaktak -tenalgia -tenancy -tenancies -tenant -tenantable -tenantableness -tenanted -tenanter -tenant-in-chief -tenanting -tenantism -tenantless -tenantlike -tenantry -tenantries -tenant-right -tenants -tenant's -tenantship -ten-a-penny -ten-armed -ten-barreled -ten-bore -ten-cell -ten-cent -Tench -tenches -tenchweed -ten-cylindered -ten-coupled -ten-course -Tencteri -tend -tendable -ten-day -tendance -tendances -tendant -tended -tendejon -tendence -tendences -tendency -tendencies -tendencious -tendenciously -tendenciousness -tendent -tendential -tendentially -tendentious -tendentiously -tendentiousness -tender -tenderability -tenderable -tenderably -tender-bearded -tender-bladed -tender-bodied -tender-boweled -tender-colored -tender-conscienced -tender-dying -tender-eared -tendered -tenderee -tender-eyed -tenderer -tenderers -tenderest -tender-faced -tenderfeet -tenderfoot -tender-footed -tender-footedness -tenderfootish -tenderfoots -tender-foreheaded -tenderful -tenderfully -tender-handed -tenderheart -tenderhearted -tender-hearted -tenderheartedly -tender-heartedly -tenderheartedness -tender-hefted -tender-hoofed -tender-hued -tendering -tenderisation -tenderise -tenderised -tenderiser -tenderish -tenderising -tenderization -tenderize -tenderized -tenderizer -tenderizers -tenderizes -tenderizing -tenderly -tenderling -tenderloin -tenderloins -tender-looking -tender-minded -tender-mouthed -tender-natured -tenderness -tendernesses -tender-nosed -tenderometer -tender-personed -tender-rooted -tenders -tender-shelled -tender-sided -tender-skinned -tendersome -tender-souled -tender-taken -tender-tempered -tender-witted -tendicle -tendido -tendinal -tendineal -tending -tendingly -tendinitis -tendinous -tendinousness -tendment -tendo -Tendoy -ten-dollar -tendomucin -tendomucoid -tendon -tendonitis -tendonous -tendons -tendoor -tendoplasty -tendosynovitis -tendotome -tendotomy -tendour -tendovaginal -tendovaginitis -tendrac -tendre -tendrel -tendresse -tendry -tendril -tendril-climbing -tendriled -tendriliferous -tendrillar -tendrilled -tendrilly -tendrilous -tendrils -tendron -tends -tenebra -Tenebrae -tenebres -tenebricose -tene-bricose -tenebrific -tenebrificate -Tenebrio -tenebrion -tenebrionid -Tenebrionidae -tenebrious -tenebriously -tenebriousness -tenebrism -Tenebrist -tenebrity -tenebrose -tenebrosi -tenebrosity -tenebrous -tenebrously -tenebrousness -tenectomy -Tenedos -ten-eighty -tenement -tenemental -tenementary -tenemented -tenementer -tenementization -tenementize -tenements -tenement's -tenementum -Tenenbaum -tenenda -tenendas -tenendum -tenent -teneral -teneramente -Tenerife -Teneriffe -tenerity -Tenes -tenesmic -tenesmus -tenesmuses -tenet -tenets -tenez -ten-fingered -tenfold -tenfoldness -tenfolds -ten-footed -ten-forties -teng -ten-gauge -Tengdin -tengere -tengerite -Tenggerese -Tengler -ten-grain -tengu -ten-guinea -ten-headed -ten-horned -ten-horsepower -ten-hour -tenia -teniacidal -teniacide -teniae -teniafuge -tenias -teniasis -teniasises -tenible -ten-year -teniente -Teniers -ten-inch -Tenino -tenio -ten-jointed -ten-keyed -ten-knotter -tenla -ten-league -tenline -tenmantale -Tenmile -ten-mile -ten-minute -ten-month -Tenn -Tenn. -Tennant -tennantite -tenne -Tenneco -Tenney -Tennent -Tenner -tenners -Tennes -Tennessean -tennesseans -Tennessee -Tennesseean -tennesseeans -Tennga -Tenniel -Tennies -Tennille -tennis -tennis-ball -tennis-court -tennisdom -tennises -tennisy -Tennyson -Tennysonian -Tennysonianism -tennis-play -tennist -tennists -tenno -tennu -Teno -teno- -ten-oared -Tenochtitl -Tenochtitlan -tenodesis -tenodynia -tenography -tenology -tenomyoplasty -tenomyotomy -tenon -tenonectomy -tenoned -tenoner -tenoners -Tenonian -tenoning -tenonitis -tenonostosis -tenons -tenontagra -tenontitis -tenonto- -tenontodynia -tenontography -tenontolemmitis -tenontology -tenontomyoplasty -tenontomyotomy -tenontophyma -tenontoplasty -tenontothecitis -tenontotomy -tenophyte -tenophony -tenoplasty -tenoplastic -tenor -tenore -tenorino -tenorist -tenorister -tenorite -tenorites -tenorless -tenoroon -tenorrhaphy -tenorrhaphies -tenors -tenor's -tenosynovitis -tenositis -tenostosis -tenosuture -tenotome -tenotomy -tenotomies -tenotomist -tenotomize -tenour -tenours -tenovaginitis -ten-parted -ten-peaked -tenpence -tenpences -tenpenny -ten-percenter -tenpin -tenpins -ten-pins -ten-ply -ten-point -ten-pound -tenpounder -ten-pounder -ten-rayed -tenrec -Tenrecidae -tenrecs -ten-ribbed -ten-roomed -tens -tensas -tensaw -tense -ten-second -Tensed -tense-drawn -tense-eyed -tense-fibered -tensegrity -tenseless -tenselessly -tenselessness -tensely -tenseness -tenser -tenses -tensest -ten-shilling -tensibility -tensible -tensibleness -tensibly -tensify -tensile -tensilely -tensileness -tensility -ten-syllable -ten-syllabled -tensimeter -tensing -tensiometer -tensiometry -tensiometric -tension -tensional -tensioned -tensioner -tensioning -tensionless -tensions -tensity -tensities -tensive -tenso -tensome -tensometer -tenson -tensor -tensorial -tensors -tensorship -ten-spined -tenspot -ten-spot -Tenstrike -ten-strike -ten-striker -ten-stringed -tensure -tent -tentability -tentable -tentacle -tentacled -tentaclelike -tentacles -tentacula -tentacular -Tentaculata -tentaculate -tentaculated -tentaculi- -Tentaculifera -tentaculite -Tentaculites -Tentaculitidae -tentaculocyst -tentaculoid -tentaculum -tentage -tentages -ten-talented -tentamen -tentation -tentative -tentatively -tentativeness -tent-clad -tent-dotted -tent-dwelling -tented -tenter -tenterbelly -tentered -tenterer -tenterhook -tenter-hook -tenterhooks -tentering -tenters -tent-fashion -tent-fly -tentful -tenth -tenthly -tenthmeter -tenthmetre -ten-thousandaire -tenth-rate -tenthredinid -Tenthredinidae -tenthredinoid -Tenthredinoidea -Tenthredo -tenths -tenty -tenticle -tentie -tentier -tentiest -tentiform -tentigo -tentily -tentilla -tentillum -tenting -tention -tentless -tentlet -tentlike -tentmaker -tentmaking -tentmate -ten-ton -ten-tongued -ten-toothed -tentor -tentory -tentoria -tentorial -tentorium -tentortoria -tent-peg -tents -tent-shaped -tent-sheltered -tent-stitch -tenture -tentwards -ten-twenty-thirty -tentwise -tentwork -tentwort -tenuate -tenue -tenues -tenui- -tenuicostate -tenuifasciate -tenuiflorous -tenuifolious -tenuious -tenuiroster -tenuirostral -tenuirostrate -Tenuirostres -tenuis -tenuistriate -tenuit -tenuity -tenuities -tenuous -tenuously -tenuousness -tenuousnesses -tenure -tenured -tenures -tenury -tenurial -tenurially -tenuti -tenuto -tenutos -ten-wheeled -Tenzing -tenzon -tenzone -teocalli -teocallis -Teodoor -Teodor -Teodora -Teodorico -Teodoro -teonanacatl -teo-nong -teopan -teopans -teosinte -teosintes -Teotihuacan -tepa -tepache -tepal -tepals -Tepanec -tepary -teparies -tepas -tepe -Tepecano -tepee -tepees -tepefaction -tepefy -tepefied -tepefies -tepefying -Tepehua -Tepehuane -tepetate -Tephillah -tephillim -tephillin -tephra -tephramancy -tephras -tephrite -tephrites -tephritic -tephroite -tephromalacia -tephromancy -tephromyelitic -Tephrosia -tephrosis -Tepic -tepid -tepidaria -tepidarium -tepidity -tepidities -tepidly -tepidness -Teplica -Teplitz -tepoy -tepoys -tepomporize -teponaztli -tepor -TEPP -Tepper -tequila -tequilas -tequilla -Tequistlateca -Tequistlatecan -TER -ter- -ter. -Tera -tera- -teraglin -Terah -terahertz -terahertzes -Terai -terais -terakihi -teramorphous -teraohm -teraohms -terap -teraph -teraphim -teras -terass -terat- -terata -teratic -teratical -teratism -teratisms -teratoblastoma -teratogen -teratogenesis -teratogenetic -teratogeny -teratogenic -teratogenicity -teratogenous -teratoid -teratology -teratologic -teratological -teratologies -teratologist -teratoma -teratomas -teratomata -teratomatous -teratophobia -teratoscopy -teratosis -Terbecki -terbia -terbias -terbic -terbium -terbiums -Terborch -Terburg -terce -Terceira -tercel -tercelet -tercelets -tercel-gentle -tercels -tercentenary -tercentenarian -tercentenaries -tercentenarize -tercentennial -tercentennials -tercer -terceron -terceroon -terces -tercet -tercets -Terchie -terchloride -tercia -tercine -tercio -terdiurnal -terebate -terebella -terebellid -Terebellidae -terebelloid -terebellum -terebene -terebenes -terebenic -terebenthene -terebic -terebilic -terebinic -terebinth -Terebinthaceae -terebinthial -terebinthian -terebinthic -terebinthina -terebinthinate -terebinthine -terebinthinous -Terebinthus -terebra -terebrae -terebral -terebrant -Terebrantia -terebras -terebrate -terebration -Terebratula -terebratular -terebratulid -Terebratulidae -terebratuliform -terebratuline -terebratulite -terebratuloid -Terebridae -teredines -Teredinidae -teredo -teredos -terefah -terek -Terena -Terence -Terencio -Terentia -Terentian -terephah -terephthalate -terephthalic -terephthallic -ter-equivalent -Tererro -teres -Teresa -Terese -Tereshkova -Teresian -Teresina -Teresita -Teressa -terete -tereti- -teretial -tereticaudate -teretifolious -teretipronator -teretiscapular -teretiscapularis -teretish -teretism -tereu -Tereus -terfez -Terfezia -Terfeziaceae -terga -tergal -tergant -tergeminal -tergeminate -tergeminous -tergiferous -tergite -tergites -tergitic -tergiversant -tergiversate -tergiversated -tergiversating -tergiversation -tergiversator -tergiversatory -tergiverse -tergo- -tergolateral -tergum -Terhune -Teri -Teria -Teriann -teriyaki -teriyakis -Teryl -Terylene -Teryn -Terina -Terle -Terlingua -terlinguaite -Terlton -TERM -term. -terma -termagancy -Termagant -termagantish -termagantism -termagantly -termagants -termage -termal -terman -termatic -termed -termen -termer -termers -Termes -termillenary -termin -terminability -terminable -terminableness -terminably -terminal -Terminalia -Terminaliaceae -terminalis -terminalization -terminalized -terminally -terminals -terminal's -terminant -terminate -terminated -terminates -terminating -termination -terminational -terminations -terminative -terminatively -terminator -terminatory -terminators -terminator's -termine -terminer -terming -termini -terminine -terminism -terminist -terministic -terminize -termino -terminology -terminological -terminologically -terminologies -terminologist -terminologists -Terminus -terminuses -termital -termitary -termitaria -termitarium -termite -termite-proof -termites -termitic -termitid -Termitidae -termitophagous -termitophile -termitophilous -termless -termlessly -termlessness -termly -Termo -termolecular -termon -termor -termors -terms -termtime -term-time -termtimes -termwise -tern -terna -ternal -Ternan -ternar -ternary -ternariant -ternaries -ternarious -Ternate -ternately -ternate-pinnate -ternatipinnate -ternatisect -ternatopinnate -terne -terned -terneplate -terner -ternery -ternes -Terni -terning -ternion -ternions -ternize -ternlet -Ternopol -tern-plate -terns -Ternstroemia -Ternstroemiaceae -terotechnology -teroxide -terp -terpadiene -terpane -terpen -terpene -terpeneless -terpenes -terpenic -terpenoid -terphenyl -terpilene -terpin -terpine -terpinene -terpineol -terpinol -terpinolene -terpinols -terpodion -terpolymer -Terpsichore -terpsichoreal -terpsichoreally -Terpsichorean -Terpstra -Terr -terr. -Terra -Terraalta -Terraba -terrace -terrace-banked -terraced -terrace-fashion -Terraceia -terraceless -terrace-mantling -terraceous -terracer -terraces -terrace-steepled -terracette -terracewards -terracewise -terracework -terraciform -terracing -terra-cotta -terraculture -terrae -terraefilial -terraefilian -terrage -terrain -terrains -terrain's -Terral -terramara -terramare -Terramycin -terran -Terrance -terrane -terranean -terraneous -terranes -Terrapene -terrapin -terrapins -terraquean -terraquedus -terraqueous -terraqueousness -terrar -terraria -terrariia -terrariiums -terrarium -terrariums -terras -terrases -terrasse -terrazzo -terrazzos -Terre -terre-a-terreishly -Terrebonne -terreen -terreens -terreity -Terrel -Terrell -terrella -terrellas -terremotive -Terrena -Terrence -Terrene -terrenely -terreneness -terrenes -terreno -terreous -terreplein -terrestrial -terrestrialism -terrestriality -terrestrialize -terrestrially -terrestrialness -terrestrials -terrestricity -terrestrify -terrestrious -terret -terreted -terre-tenant -Terreton -terrets -terre-verte -Terri -Terry -terribilita -terribility -terrible -terribleness -terribles -terribly -terricole -terricoline -terricolist -terricolous -Terrie -Terrye -Terrier -terrierlike -terriers -terrier's -terries -terrify -terrific -terrifical -terrifically -terrification -terrificly -terrificness -terrified -terrifiedly -terrifier -terrifiers -terrifies -terrifying -terrifyingly -terrigene -terrigenous -terriginous -Terrijo -Terril -Terryl -Terrilyn -Terrill -Terryn -terrine -terrines -Terris -Terriss -territ -Territelae -territelarian -territorality -Territory -Territorial -territorialisation -territorialise -territorialised -territorialising -territorialism -territorialist -territoriality -territorialization -territorialize -territorialized -territorializing -territorially -Territorian -territoried -territories -territory's -territs -Territus -Terryville -terron -terror -terror-bearing -terror-breathing -terror-breeding -terror-bringing -terror-crazed -terror-driven -terror-fleet -terror-fraught -terrorful -terror-giving -terror-haunted -terrorific -terror-inspiring -terrorisation -terrorise -terrorised -terroriser -terrorising -terrorism -terrorisms -terrorist -terroristic -terroristical -terrorists -terrorist's -terrorization -terrorize -terrorized -terrorizer -terrorizes -terrorizing -terrorless -terror-lessening -terror-mingled -terror-preaching -terrorproof -terror-ridden -terror-riven -terrors -terror's -terror-shaken -terror-smitten -terrorsome -terror-stirring -terror-stricken -terror-striking -terror-struck -terror-threatened -terror-troubled -terror-wakened -terror-warned -terror-weakened -ter-sacred -Tersanctus -ter-sanctus -terse -tersely -terseness -tersenesses -terser -tersest -Tersina -tersion -tersy-versy -tersulfid -tersulfide -tersulphate -tersulphid -tersulphide -tersulphuret -tertenant -Terti -Tertia -tertial -tertials -tertian -tertiana -tertians -tertianship -Tertiary -tertiarian -tertiaries -Tertias -tertiate -tertii -tertio -tertium -Tertius -terton -Tertry -tertrinal -tertulia -Tertullian -Tertullianism -Tertullianist -teruah -Teruel -teruyuki -teruncius -terutero -teru-tero -teruteru -tervalence -tervalency -tervalent -tervariant -tervee -Terza -Terzas -terzet -terzetto -terzettos -terzina -terzio -terzo -TES -tesack -tesarovitch -tescaria -teschenite -teschermacherite -Tescott -teskere -teskeria -Tesla -teslas -Tesler -Tess -Tessa -tessara -tessara- -tessarace -tessaraconter -tessaradecad -tessaraglot -tessaraphthong -tessarescaedecahedron -tessel -tesselate -tesselated -tesselating -tesselation -tessella -tessellae -tessellar -tessellate -tessellated -tessellates -tessellating -tessellation -tessellations -tessellite -tessera -tesseract -tesseradecade -tesserae -tesseraic -tesseral -Tesserants -tesserarian -tesserate -tesserated -tesseratomy -tesseratomic -Tessi -Tessy -Tessie -Tessin -tessitura -tessituras -tessiture -Tessler -tessular -Test -testa -testability -testable -Testacea -testacean -testaceo- -testaceography -testaceology -testaceous -testaceousness -testacy -testacies -testae -Testament -testamenta -testamental -testamentally -testamentalness -testamentary -testamentarily -testamentate -testamentation -testaments -testament's -testamentum -testamur -testandi -testao -testar -testata -testate -testates -testation -testator -testatory -testators -testatorship -testatrices -testatrix -testatrixes -testatum -test-ban -testbed -test-bed -testcross -teste -tested -testee -testees -tester -testers -testes -testy -testibrachial -testibrachium -testicardinate -testicardine -Testicardines -testicle -testicles -testicle's -testicond -testicular -testiculate -testiculated -testier -testiere -testiest -testify -testificate -testification -testificator -testificatory -testified -testifier -testifiers -testifies -testifying -testily -testimony -testimonia -testimonial -testimonialising -testimonialist -testimonialization -testimonialize -testimonialized -testimonializer -testimonializing -testimonials -testimonies -testimony's -testimonium -testiness -testing -testingly -testings -testis -testitis -testmatch -teston -testone -testons -testoon -testoons -testor -testosterone -testpatient -testril -tests -test-tube -test-tubeful -testudinal -Testudinaria -testudinarian -testudinarious -Testudinata -testudinate -testudinated -testudineal -testudineous -testudines -Testudinidae -testudinous -testudo -testudos -testule -Tesuque -tesvino -tet -tetanal -tetany -tetania -tetanic -tetanical -tetanically -tetanics -tetanies -tetaniform -tetanigenous -tetanilla -tetanine -tetanisation -tetanise -tetanised -tetanises -tetanising -tetanism -tetanization -tetanize -tetanized -tetanizes -tetanizing -tetano- -tetanoid -tetanolysin -tetanomotor -tetanospasmin -tetanotoxin -tetanus -tetanuses -tetarcone -tetarconid -tetard -tetartemorion -tetarto- -tetartocone -tetartoconid -tetartohedral -tetartohedrally -tetartohedrism -tetartohedron -tetartoid -tetartosymmetry -tetch -tetched -tetchy -tetchier -tetchiest -tetchily -tetchiness -tete -Teteak -tete-a-tete -tete-beche -tetel -teterrimous -teth -tethelin -tether -tetherball -tether-devil -tethered -tethery -tethering -tethers -tethydan -Tethys -teths -Teton -Tetonia -tetotum -tetotums -tetra -tetra- -tetraamylose -tetrabasic -tetrabasicity -Tetrabelodon -tetrabelodont -tetrabiblos -tetraborate -tetraboric -tetrabrach -tetrabranch -Tetrabranchia -tetrabranchiate -tetrabromid -tetrabromide -tetrabromo -tetrabromoethane -tetrabromofluorescein -tetracadactylity -tetracaine -tetracarboxylate -tetracarboxylic -tetracarpellary -tetracene -tetraceratous -tetracerous -Tetracerus -tetrachical -tetrachlorid -tetrachloride -tetrachlorides -tetrachloro -tetrachloroethane -tetrachloroethylene -tetrachloromethane -tetrachord -tetrachordal -tetrachordon -tetrachoric -tetrachotomous -tetrachromatic -tetrachromic -tetrachronous -tetracyclic -tetracycline -tetracid -tetracids -Tetracyn -tetracocci -tetracoccous -tetracoccus -tetracolic -tetracolon -tetracoral -Tetracoralla -tetracoralline -tetracosane -tetract -tetractinal -tetractine -tetractinellid -Tetractinellida -tetractinellidan -tetractinelline -tetractinose -tetractys -tetrad -tetradactyl -tetradactyle -tetradactyly -tetradactylous -tetradarchy -tetradecane -tetradecanoic -tetradecapod -Tetradecapoda -tetradecapodan -tetradecapodous -tetradecyl -Tetradesmus -tetradiapason -tetradic -tetradymite -Tetradynamia -tetradynamian -tetradynamious -tetradynamous -Tetradite -tetradrachm -tetradrachma -tetradrachmal -tetradrachmon -tetrads -tetraedron -tetraedrum -tetraethyl -tetraethyllead -tetraethylsilane -tetrafluoride -tetrafluoroethylene -tetrafluouride -tetrafolious -tetragamy -tetragenous -tetragyn -Tetragynia -tetragynian -tetragynous -tetraglot -tetraglottic -tetragon -tetragonal -tetragonally -tetragonalness -Tetragonia -Tetragoniaceae -tetragonidium -tetragonous -tetragons -tetragonus -tetragram -tetragrammatic -Tetragrammaton -tetragrammatonic -tetragrid -tetrahedra -tetrahedral -tetrahedrally -tetrahedric -tetrahedrite -tetrahedroid -tetrahedron -tetrahedrons -tetrahexahedral -tetrahexahedron -tetrahydrate -tetrahydrated -tetrahydric -tetrahydrid -tetrahydride -tetrahydro -tetrahydrocannabinol -tetrahydrofuran -tetrahydropyrrole -tetrahydroxy -tetrahymena -tetra-icosane -tetraiodid -tetraiodide -tetraiodo -tetraiodophenolphthalein -tetraiodopyrrole -tetrakaidecahedron -tetraketone -tetrakis -tetrakisazo -tetrakishexahedron -tetrakis-hexahedron -tetralemma -Tetralin -tetralite -tetralogy -tetralogic -tetralogies -tetralogue -tetralophodont -tetramastia -tetramastigote -tetramer -Tetramera -tetrameral -tetrameralian -tetrameric -tetramerism -tetramerous -tetramers -tetrameter -tetrameters -tetramethyl -tetramethylammonium -tetramethyldiarsine -tetramethylene -tetramethylium -tetramethyllead -tetramethylsilane -tetramin -tetramine -tetrammine -tetramorph -tetramorphic -tetramorphism -tetramorphous -tetrander -Tetrandria -tetrandrian -tetrandrous -tetrane -Tetranychus -tetranitrate -tetranitro -tetranitroaniline -tetranitromethane -tetrant -tetranuclear -Tetrao -Tetraodon -tetraodont -Tetraodontidae -tetraonid -Tetraonidae -Tetraoninae -tetraonine -Tetrapanax -tetrapartite -tetrapetalous -tetraphalangeate -tetrapharmacal -tetrapharmacon -tetraphenol -tetraphyllous -tetraphony -tetraphosphate -tetrapyla -tetrapylon -tetrapyramid -tetrapyrenous -tetrapyrrole -tetrapla -tetraplegia -tetrapleuron -tetraploid -tetraploidy -tetraploidic -tetraplous -Tetrapneumona -Tetrapneumones -tetrapneumonian -tetrapneumonous -tetrapod -Tetrapoda -tetrapody -tetrapodic -tetrapodies -tetrapodous -tetrapods -tetrapolar -tetrapolis -tetrapolitan -tetrapous -tetraprostyle -tetrapteran -tetrapteron -tetrapterous -tetraptych -tetraptote -Tetrapturus -tetraquetrous -tetrarch -tetrarchate -tetrarchy -tetrarchic -tetrarchical -tetrarchies -tetrarchs -tetras -tetrasaccharide -tetrasalicylide -tetraselenodont -tetraseme -tetrasemic -tetrasepalous -tetrasyllabic -tetrasyllabical -tetrasyllable -tetrasymmetry -tetraskele -tetraskelion -tetrasome -tetrasomy -tetrasomic -tetraspermal -tetraspermatous -tetraspermous -tetraspgia -tetraspheric -tetrasporange -tetrasporangia -tetrasporangiate -tetrasporangium -tetraspore -tetrasporic -tetrasporiferous -tetrasporous -tetraster -tetrastich -tetrastichal -tetrastichic -Tetrastichidae -tetrastichous -Tetrastichus -tetrastyle -tetrastylic -tetrastylos -tetrastylous -tetrastoon -tetrasubstituted -tetrasubstitution -tetrasulfid -tetrasulfide -tetrasulphid -tetrasulphide -tetrathecal -tetratheism -tetratheist -tetratheite -tetrathionates -tetrathionic -tetratomic -tetratone -tetravalence -tetravalency -tetravalent -tetraxial -tetraxile -tetraxon -Tetraxonia -tetraxonian -tetraxonid -Tetraxonida -tetrazane -tetrazene -tetrazyl -tetrazin -tetrazine -tetrazo -tetrazole -tetrazolyl -tetrazolium -tetrazone -tetrazotization -tetrazotize -Tetrazzini -tetrdra -tetremimeral -tetrevangelium -tetric -tetrical -tetricalness -tetricity -tetricous -tetrifol -tetrigid -Tetrigidae -tetryl -tetrylene -tetryls -tetriodide -Tetrix -tetrobol -tetrobolon -tetrode -tetrodes -Tetrodon -tetrodont -Tetrodontidae -tetrodotoxin -tetrol -tetrole -tetrolic -tetronic -tetronymal -tetrose -tetrous -tetroxalate -tetroxid -tetroxide -tetroxids -tetrsyllabical -tets -tetter -tetter-berry -tettered -tettery -tettering -tetterish -tetterous -tetters -tetterworm -tetterwort -tetty -Tettigidae -tettigoniid -Tettigoniidae -tettish -tettix -Tetu -Tetuan -Tetum -Tetzel -Teucer -teuch -teuchit -Teucri -Teucrian -teucrin -Teucrium -Teufel -Teufert -teufit -teugh -teughly -teughness -teuk -Teut -Teut. -Teuthis -Teuthras -teuto- -Teuto-british -Teuto-celt -Teuto-celtic -Teutolatry -Teutomania -Teutomaniac -Teuton -Teutondom -Teutonesque -Teutonia -Teutonic -Teutonically -Teutonicism -Teutonisation -Teutonise -Teutonised -Teutonising -Teutonism -Teutonist -Teutonity -Teutonization -Teutonize -Teutonized -Teutonizing -Teutonomania -Teutono-persic -Teutonophobe -Teutonophobia -teutons -Teutophil -Teutophile -Teutophilism -Teutophobe -Teutophobia -Teutophobism -Teutopolis -Tevere -Tevet -Tevis -teviss -tew -Tewa -tewart -tewed -tewel -Tewell -tewer -Tewfik -tewhit -tewing -tewit -Tewkesbury -Tewksbury -tewly -Tews -tewsome -tewtaw -tewter -Tex -Tex. -Texaco -Texan -texans -Texarkana -Texas -texases -Texcocan -texguino -Texhoma -Texico -Texline -Texola -Texon -text -textarian -textbook -text-book -textbookish -textbookless -textbooks -textbook's -text-hand -textiferous -textile -textiles -textile's -textilist -textless -textlet -text-letter -textman -textorial -textrine -Textron -texts -text's -textual -textualism -textualist -textuality -textually -textuary -textuaries -textuarist -textuist -textural -texturally -texture -textured -textureless -textures -texturing -textus -text-writer -tez -Tezcatlipoca -Tezcatzoncatl -Tezcucan -Tezel -tezkere -tezkirah -TFC -TFLAP -TFP -tfr -TFS -TFT -TFTP -TFX -TG -TGC -TGN -T-group -tgt -TGV -TGWU -th -th- -Th.B. -Th.D. -tha -Thabana-Ntlenyana -Thabantshonyana -Thach -Thacher -thack -thacked -Thacker -Thackeray -Thackerayan -Thackerayana -Thackerayesque -Thackerville -thacking -thackless -thackoor -thacks -Thad -Thaddaus -Thaddeus -Thaddus -Thadentsonyane -Thadeus -thae -Thagard -Thai -Thay -Thayer -Thailand -Thailander -Thain -Thaine -Thayne -thairm -thairms -Thais -thak -Thakur -thakurate -thala -thalamencephala -thalamencephalic -thalamencephalon -thalamencephalons -thalami -thalamia -thalamic -thalamically -Thalamiflorae -thalamifloral -thalamiflorous -thalamite -thalamium -thalamiumia -thalamo- -thalamocele -thalamocoele -thalamocortical -thalamocrural -thalamolenticular -thalamomammillary -thalamo-olivary -thalamopeduncular -Thalamophora -thalamotegmental -thalamotomy -thalamotomies -thalamus -Thalarctos -thalass- -Thalassa -thalassal -Thalassarctos -thalassemia -thalassian -thalassiarch -thalassic -thalassical -thalassinian -thalassinid -Thalassinidea -thalassinidian -thalassinoid -thalassiophyte -thalassiophytous -thalasso -Thalassochelys -thalassocracy -thalassocrat -thalassographer -thalassography -thalassographic -thalassographical -thalassometer -thalassophilous -thalassophobia -thalassotherapy -thalatta -thalattology -thale-cress -thalenite -thaler -thalerophagous -thalers -Thales -Thalesia -Thalesian -Thalessa -Thalia -Thaliacea -thaliacean -Thalian -Thaliard -Thalictrum -thalidomide -thall- -thalli -thallic -thalliferous -thalliform -thallin -thalline -thallious -thallium -thalliums -Thallo -thallochlore -thallodal -thallodic -thallogen -thallogenic -thallogenous -thallogens -thalloid -thalloidal -thallome -Thallophyta -thallophyte -thallophytes -thallophytic -thallose -thallous -thallus -thalluses -thalposis -thalpotic -thalthan -thalweg -Tham -thamakau -Thamar -thameng -Thames -Thamesis -thamin -Thamyras -Thamyris -Thammuz -Thamnidium -thamnium -thamnophile -Thamnophilinae -thamnophiline -Thamnophilus -Thamnophis -Thamora -Thamos -Thamudean -Thamudene -Thamudic -thamuria -Thamus -than -thana -thanadar -thanage -thanages -thanah -thanan -Thanasi -thanatism -thanatist -thanato- -thanatobiologic -thanatognomonic -thanatographer -thanatography -thanatoid -thanatology -thanatological -thanatologies -thanatologist -thanatomantic -thanatometer -thanatophidia -thanatophidian -thanatophobe -thanatophoby -thanatophobia -thanatophobiac -thanatopsis -Thanatos -thanatoses -thanatosis -Thanatotic -thanatousia -Thane -thanedom -thanehood -thaneland -thanes -thaneship -thaness -Thanet -Thanh -Thanjavur -thank -thanked -thankee -thanker -thankers -thankful -thankfuller -thankfullest -thankfully -thankfulness -thankfulnesses -thanking -thankyou -thank-you -thank-you-maam -thank-you-ma'am -thankless -thanklessly -thanklessness -thank-offering -thanks -thanksgiver -thanksgiving -thanksgivings -thankworthy -thankworthily -thankworthiness -thannadar -Thanom -Thanos -Thant -Thapa -thapes -Thapsia -Thapsus -Thar -Thare -tharen -tharf -tharfcake -Thargelia -Thargelion -tharginyah -tharm -tharms -Tharp -Tharsis -Thasian -Thaspium -that -thataway -that-away -that-a-way -Thatch -thatch-browed -thatched -Thatcher -thatchers -thatches -thatch-headed -thatchy -thatching -thatchless -thatch-roofed -thatchwood -thatchwork -thatd -that'd -thatll -that'll -thatn -thatness -thats -that's -thaught -Thaumantian -Thaumantias -Thaumas -thaumasite -thaumato- -thaumatogeny -thaumatography -thaumatolatry -thaumatology -thaumatologies -thaumatrope -thaumatropical -thaumaturge -thaumaturgi -thaumaturgy -thaumaturgia -thaumaturgic -thaumaturgical -thaumaturgics -thaumaturgism -thaumaturgist -thaumaturgus -thaumoscopic -thave -thaw -thawable -thaw-drop -thawed -thawer -thawers -thawy -thawier -thawiest -thawing -thawless -thawn -thaws -Thawville -Thaxter -Thaxton -ThB -THC -ThD -The -the- -Thea -Theaceae -theaceous -T-headed -Theadora -Theaetetus -theah -Theall -theandric -theanthropy -theanthropic -theanthropical -theanthropism -theanthropist -theanthropology -theanthropophagy -theanthropos -theanthroposophy -thearchy -thearchic -thearchies -Thearica -theasum -theat -theater -theatercraft -theater-craft -theatergoer -theatergoers -theatergoing -theater-in-the-round -theaterless -theaterlike -theaters -theater's -theaterward -theaterwards -theaterwise -Theatine -theatral -theatre -Theatre-Francais -theatregoer -theatregoing -theatre-in-the-round -theatres -theatry -theatric -theatricable -theatrical -theatricalisation -theatricalise -theatricalised -theatricalising -theatricalism -theatricality -theatricalization -theatricalize -theatricalized -theatricalizing -theatrically -theatricalness -theatricals -theatrician -theatricism -theatricize -theatrics -theatrize -theatro- -theatrocracy -theatrograph -theatromania -theatromaniac -theatron -theatrophile -theatrophobia -theatrophone -theatrophonic -theatropolis -theatroscope -theatticalism -theave -theb -Thebaic -Thebaid -thebain -thebaine -thebaines -Thebais -thebaism -Theban -Thebault -Thebe -theberge -Thebes -Thebesian -Thebit -theca -thecae -thecal -Thecamoebae -thecaphore -thecasporal -thecaspore -thecaspored -thecasporous -Thecata -thecate -thecia -thecial -thecitis -thecium -Thecla -theclan -theco- -thecodont -thecoglossate -thecoid -Thecoidea -Thecophora -Thecosomata -thecosomatous -thed -Theda -Thedford -Thedric -Thedrick -thee -theedom -theek -theeked -theeker -theeking -theelin -theelins -theelol -theelols -Theemim -theer -theet -theetsee -theezan -theft -theft-boot -theftbote -theftdom -theftless -theftproof -thefts -theft's -theftuous -theftuously -thegether -thegidder -thegither -thegn -thegn-born -thegndom -thegnhood -thegnland -thegnly -thegnlike -thegn-right -thegns -thegnship -thegnworthy -they -Theia -theyaou -theyd -they'd -theiform -Theiler -Theileria -theyll -they'll -Theilman -thein -theine -theines -theinism -theins -their -theyre -they're -theirn -theirs -theirselves -theirsens -Theis -theism -theisms -Theiss -theist -theistic -theistical -theistically -theists -theyve -they've -Thekla -thelalgia -Thelemite -Thelephora -Thelephoraceae -thelyblast -thelyblastic -Theligonaceae -theligonaceous -Theligonum -thelion -thelyotoky -thelyotokous -Thelyphonidae -Thelyphonus -thelyplasty -thelitis -thelitises -thelytocia -thelytoky -thelytokous -thelytonic -thelium -Thelma -Thelodontidae -Thelodus -theloncus -Thelonious -thelorrhagia -Thelphusa -thelphusian -Thelphusidae -them -Thema -themata -thematic -thematical -thematically -thematist -theme -themed -themeless -themelet -themer -themes -theme's -theming -Themis -Themiste -Themistian -Themisto -Themistocles -themsel -themselves -then -thenabouts -thenad -thenadays -then-a-days -thenage -thenages -thenal -thenar -thenardite -thenars -thence -thenceafter -thenceforth -thenceforward -thenceforwards -thencefoward -thencefrom -thence-from -thenceward -then-clause -Thendara -Thenna -thenne -thenness -thens -Theo -theo- -theoanthropomorphic -theoanthropomorphism -theoastrological -Theobald -Theobold -Theobroma -theobromic -theobromin -theobromine -theocentric -theocentricism -theocentricity -theocentrism -theochristic -Theoclymenus -theocollectivism -theocollectivist -theocracy -theocracies -theocrasy -theocrasia -theocrasical -theocrasies -theocrat -theocratic -theocratical -theocratically -theocratist -theocrats -Theocritan -Theocritean -Theocritus -theodemocracy -theody -theodicaea -theodicean -theodicy -theodicies -theodidact -theodolite -theodolitic -Theodor -Theodora -Theodorakis -Theodore -Theodoric -Theodosia -Theodosian -theodosianus -Theodotian -theodrama -theogamy -theogeological -theognostic -theogonal -theogony -theogonic -theogonical -theogonies -theogonism -theogonist -theohuman -theokrasia -theoktony -theoktonic -theol -theol. -Theola -theolatry -theolatrous -theolepsy -theoleptic -theolog -theologal -theologaster -theologastric -theologate -theologeion -theologer -theologi -theology -theologian -theologians -theologic -theological -theologically -theologician -theologico- -theologicoastronomical -theologicoethical -theologicohistorical -theologicometaphysical -theologicomilitary -theologicomoral -theologiconatural -theologicopolitical -theologics -theologies -theologisation -theologise -theologised -theologiser -theologising -theologism -theologist -theologium -theologization -theologize -theologized -theologizer -theologizing -theologo- -theologoumena -theologoumenon -theologs -theologue -theologus -theomachy -theomachia -theomachies -theomachist -theomagy -theomagic -theomagical -theomagics -theomammomist -theomancy -theomania -theomaniac -theomantic -theomastix -theomicrist -theomisanthropist -theomythologer -theomythology -theomorphic -theomorphism -theomorphize -Theona -Theone -Theonoe -theonomy -theonomies -theonomous -theonomously -theopantism -Theopaschist -Theopaschitally -Theopaschite -Theopaschitic -Theopaschitism -theopathetic -theopathy -theopathic -theopathies -theophagy -theophagic -theophagite -theophagous -Theophane -theophany -Theophania -theophanic -theophanies -theophanism -theophanous -Theophila -theophilanthrope -theophilanthropy -theophilanthropic -theophilanthropism -theophilanthropist -theophile -theophilist -theophyllin -theophylline -theophilosophic -Theophilus -theophysical -theophobia -theophoric -theophorous -Theophrastaceae -theophrastaceous -Theophrastan -Theophrastean -Theophrastian -Theophrastus -theopneust -theopneusted -theopneusty -theopneustia -theopneustic -theopolity -theopolitician -theopolitics -theopsychism -theor -theorbist -theorbo -theorbos -Theorell -theorem -theorematic -theorematical -theorematically -theorematist -theoremic -theorems -theorem's -theoretic -theoretical -theoreticalism -theoretically -theoreticalness -theoretician -theoreticians -theoreticopractical -theoretics -theory -theoria -theoriai -theory-blind -theory-blinded -theory-building -theoric -theorica -theorical -theorically -theorician -theoricon -theorics -theories -theoryless -theory-making -theorymonger -theory's -theorisation -theorise -theorised -theoriser -theorises -theorising -theorism -theory-spinning -theorist -theorists -theorist's -theorization -theorizations -theorization's -theorize -theorized -theorizer -theorizers -theorizes -theorizies -theorizing -theorum -Theos -theosoph -theosopheme -theosopher -Theosophy -theosophic -theosophical -theosophically -theosophies -theosophism -Theosophist -theosophistic -theosophistical -theosophists -theosophize -theotechny -theotechnic -theotechnist -theoteleology -theoteleological -theotherapy -theotherapist -Theotocopoulos -Theotocos -Theotokos -theow -theowdom -theowman -theowmen -Theoxenius -ther -Thera -Theraean -theralite -Theran -therap -therapeuses -therapeusis -Therapeutae -Therapeutic -therapeutical -therapeutically -therapeutics -therapeutism -therapeutist -Theraphosa -theraphose -theraphosid -Theraphosidae -theraphosoid -therapy -therapia -therapies -therapy's -therapist -therapists -therapist's -Therapne -therapsid -Therapsida -theraputant -Theravada -Theravadin -therblig -there -thereabout -thereabouts -thereabove -thereacross -thereafter -thereafterward -thereagainst -thereamong -thereamongst -thereanent -thereanents -therearound -thereas -thereat -thereaway -thereaways -therebefore -thereben -therebeside -therebesides -therebetween -thereby -therebiforn -thereckly -thered -there'd -therefor -therefore -therefrom -therehence -therein -thereinafter -thereinbefore -thereinto -therell -there'll -theremin -theremins -therence -thereness -thereof -thereoid -thereology -thereologist -thereon -thereonto -thereout -thereover -thereright -theres -there's -Theresa -Therese -Theresina -Theresita -Theressa -therethrough -theretil -theretill -thereto -theretofore -theretoward -thereunder -thereuntil -thereunto -thereup -thereupon -Thereva -therevid -Therevidae -therewhile -therewhiles -therewhilst -therewith -therewithal -therewithin -Therezina -Theria -theriac -theriaca -theriacal -theriacas -theriacs -therial -therian -therianthropic -therianthropism -theriatrics -thericlean -theridiid -Theridiidae -Theridion -Therimachus -Therine -therio- -theriodic -theriodont -Theriodonta -Theriodontia -theriolater -theriolatry -theriomancy -theriomaniac -theriomimicry -theriomorph -theriomorphic -theriomorphism -theriomorphosis -theriomorphous -Theriot -theriotheism -theriotheist -theriotrophical -theriozoic -Theritas -therium -therm -therm- -Therma -thermacogenesis -thermae -thermaesthesia -thermaic -thermal -thermalgesia -thermality -thermalization -thermalize -thermalized -thermalizes -thermalizing -thermally -thermals -thermanalgesia -thermanesthesia -thermantic -thermantidote -thermatology -thermatologic -thermatologist -therme -thermel -thermels -thermes -thermesthesia -thermesthesiometer -thermetograph -thermetrograph -thermy -thermic -thermical -thermically -Thermidor -Thermidorean -Thermidorian -thermion -thermionic -thermionically -thermionics -thermions -thermistor -thermistors -Thermit -thermite -thermites -thermits -thermo -thermo- -thermoammeter -thermoanalgesia -thermoanesthesia -thermobarograph -thermobarometer -thermobattery -thermocautery -thermocauteries -thermochemic -thermochemical -thermochemically -thermochemist -thermochemistry -thermochroic -thermochromism -thermochrosy -thermoclinal -thermocline -thermocoagulation -thermocouple -thermocurrent -thermodiffusion -thermodynam -thermodynamic -thermodynamical -thermodynamically -thermodynamician -thermodynamicist -thermodynamics -thermodynamist -thermoduric -thermoelastic -thermoelectric -thermoelectrical -thermoelectrically -thermoelectricity -thermoelectrometer -thermoelectromotive -thermoelectron -thermoelectronic -thermoelement -thermoesthesia -thermoexcitory -Thermofax -thermoform -thermoformable -thermogalvanometer -thermogen -thermogenerator -thermogenesis -thermogenetic -thermogeny -thermogenic -thermogenous -thermogeography -thermogeographical -thermogram -thermograph -thermographer -thermography -thermographic -thermographically -thermohaline -thermohyperesthesia -thermo-inhibitory -thermojunction -thermokinematics -thermolabile -thermolability -thermolysis -thermolytic -thermolyze -thermolyzed -thermolyzing -thermology -thermological -thermoluminescence -thermoluminescent -thermomagnetic -thermomagnetically -thermomagnetism -thermometamorphic -thermometamorphism -thermometer -thermometerize -thermometers -thermometer's -thermometry -thermometric -thermometrical -thermometrically -thermometrograph -thermomigrate -thermomotive -thermomotor -thermomultiplier -thermonasty -thermonastic -thermonatrite -thermoneurosis -thermoneutrality -thermonous -thermonuclear -thermopair -thermopalpation -thermopenetration -thermoperiod -thermoperiodic -thermoperiodicity -thermoperiodism -thermophil -thermophile -thermophilic -thermophilous -thermophobia -thermophobous -thermophone -thermophore -thermophosphor -thermophosphorescence -thermophosphorescent -Thermopylae -thermopile -thermoplastic -thermoplasticity -thermoplastics -thermoplegia -thermopleion -thermopolymerization -thermopolypnea -thermopolypneic -Thermopolis -thermopower -Thermopsis -thermoradiotherapy -thermoreceptor -thermoreduction -thermoregulation -thermoregulator -thermoregulatory -thermoremanence -thermoremanent -thermoresistance -thermoresistant -Thermos -thermoscope -thermoscopic -thermoscopical -thermoscopically -thermosensitive -thermoses -thermoset -thermosetting -thermosynthesis -thermosiphon -thermosystaltic -thermosystaltism -thermosphere -thermospheres -thermospheric -thermostability -thermostable -thermostat -thermostated -thermostatic -thermostatically -thermostatics -thermostating -thermostats -thermostat's -thermostatted -thermostatting -thermostimulation -thermoswitch -thermotactic -thermotank -thermotaxic -thermotaxis -thermotelephone -thermotelephonic -thermotensile -thermotension -thermotherapeutics -thermotherapy -thermotic -thermotical -thermotically -thermotics -thermotype -thermotypy -thermotypic -thermotropy -thermotropic -thermotropism -thermo-unstable -thermovoltaic -therms -Thero -thero- -Therock -therodont -theroid -therolater -therolatry -therology -therologic -therological -therologist -Theromora -Theromores -theromorph -Theromorpha -theromorphia -theromorphic -theromorphism -theromorphology -theromorphological -theromorphous -Theron -therophyte -theropod -Theropoda -theropodan -theropodous -theropods -Therron -Thersander -Thersilochus -thersitean -Thersites -thersitical -thesaur -thesaural -thesauri -thesaury -thesauris -thesaurismosis -thesaurus -thesaurusauri -thesauruses -Thesda -these -Thesean -theses -Theseum -Theseus -thesial -thesicle -thesis -Thesium -Thesmia -Thesmophoria -Thesmophorian -Thesmophoric -Thesmophorus -thesmothetae -thesmothete -thesmothetes -thesocyte -Thespesia -Thespesius -Thespiae -Thespian -thespians -Thespis -Thespius -Thesproti -Thesprotia -Thesprotians -Thesprotis -Thess -Thess. -Thessa -Thessaly -Thessalian -Thessalonian -Thessalonians -Thessalonica -Thessalonike -Thessalonki -Thessalus -thester -Thestius -Thestor -thestreen -Theta -thetas -thetch -thete -Thetes -Thetford -thetic -thetical -thetically -thetics -thetin -thetine -Thetis -Thetisa -Thetos -Theurer -theurgy -theurgic -theurgical -theurgically -theurgies -theurgist -Theurich -Thevenot -Thevetia -thevetin -thew -thewed -thewy -thewier -thewiest -thewiness -thewless -thewlike -thewness -thews -THI -thy -thi- -Thia -thiabendazole -thiacetic -thiadiazole -thialdin -thialdine -thiamid -thiamide -thiamin -thiaminase -thiamine -thiamines -thiamins -thianthrene -thiasi -thiasine -thiasite -thiasoi -thiasos -thiasote -thiasus -thiasusi -Thyatira -Thiatsi -Thiazi -thiazide -thiazides -thiazin -thiazine -thiazines -thiazins -thiazol -thiazole -thiazoles -thiazoline -thiazols -Thibaud -Thibault -Thibaut -thibet -Thibetan -thible -Thibodaux -thick -thick-ankled -thick-barked -thick-barred -thick-beating -thick-bedded -thick-billed -thick-blooded -thick-blown -thick-bodied -thick-bossed -thick-bottomed -thickbrained -thick-brained -thick-breathed -thick-cheeked -thick-clouded -thick-coated -thick-coming -thick-cut -thick-decked -thick-descending -thick-drawn -thicke -thick-eared -thicken -thickened -thickener -thickeners -thickening -thickens -thicker -thickest -thicket -thicketed -thicketful -thickety -thickets -thicket's -thick-fingered -thick-flaming -thick-flanked -thick-flashing -thick-fleeced -thick-fleshed -thick-flowing -thick-foliaged -thick-footed -thick-girthed -thick-growing -thick-grown -thick-haired -thickhead -thick-head -thickheaded -thick-headed -thickheadedly -thickheadedness -thick-headedness -thick-hided -thick-hidedness -thicky -thickish -thick-jawed -thick-jeweled -thick-knee -thick-kneed -thick-knobbed -thick-laid -thickleaf -thick-leaved -thickleaves -thick-legged -thickly -thick-lined -thick-lipped -thicklips -thick-looking -thick-maned -thickneck -thick-necked -thickness -thicknesses -thicknessing -thick-packed -thick-pated -thick-peopled -thick-piled -thick-pleached -thick-plied -thick-ribbed -thick-rinded -thick-rooted -thick-rusting -thicks -thickset -thick-set -thicksets -thick-shadowed -thick-shafted -thick-shelled -thick-sided -thick-sighted -thickskin -thick-skinned -thickskull -thickskulled -thick-skulled -thick-soled -thick-sown -thick-spaced -thick-spread -thick-spreading -thick-sprung -thick-stalked -thick-starred -thick-stemmed -thick-streaming -thick-swarming -thick-tailed -thick-thronged -thick-toed -thick-tongued -thick-toothed -thick-topped -thick-voiced -thick-walled -thick-warbled -thickwind -thick-winded -thickwit -thick-witted -thick-wittedly -thick-wittedness -thick-wooded -thick-woven -thick-wristed -thick-wrought -Thida -THIEF -thiefcraft -thiefdom -thiefland -thiefly -thiefmaker -thiefmaking -thiefproof -thief-resisting -thieftaker -thief-taker -thiefwise -Thyeiads -Thielavia -Thielaviopsis -Thielen -Thiells -thienyl -thienone -Thiensville -Thier -Thierry -Thiers -Thyestean -Thyestes -thievable -thieve -thieved -thieveless -thiever -thievery -thieveries -thieves -thieving -thievingly -thievish -thievishly -thievishness -thig -thigged -thigger -thigging -thigh -thighbone -thighbones -thighed -thighs -thight -thightness -thigmo- -thigmonegative -thigmopositive -thigmotactic -thigmotactically -thigmotaxis -thigmotropic -thigmotropically -thigmotropism -Thyiad -Thyiades -thyine -thylacine -Thylacynus -thylacitis -Thylacoleo -thylakoid -Thilanottine -Thilda -Thilde -thilk -Thill -thiller -thill-horse -thilly -thills -thym- -thymacetin -Thymallidae -Thymallus -thymate -thimber -thimble -thimbleberry -thimbleberries -thimble-crowned -thimbled -thimble-eye -thimble-eyed -thimbleflower -thimbleful -thimblefuls -thimblelike -thimblemaker -thimblemaking -thimbleman -thimble-pie -thimblerig -thimblerigged -thimblerigger -thimbleriggery -thimblerigging -thimbles -thimble's -thimble-shaped -thimble-sized -thimbleweed -thimblewit -Thymbraeus -Thimbu -thyme -thyme-capped -thymectomy -thymectomize -thyme-fed -thyme-flavored -thymegol -thyme-grown -thymey -Thymelaea -Thymelaeaceae -thymelaeaceous -Thymelaeales -thymelcosis -thymele -thyme-leaved -thymelic -thymelical -thymelici -thymene -thimerosal -thymes -thyme-scented -thymetic -thymi -thymy -thymia -thymiama -thymic -thymicolymphatic -thymidine -thymier -thymiest -thymyl -thymylic -thymin -thymine -thymines -thymiosis -thymitis -thymo- -thymocyte -Thymoetes -thymogenic -thymol -thymolate -thymolize -thymolphthalein -thymols -thymolsulphonephthalein -thymoma -thymomata -thymonucleic -thymopathy -thymoprivic -thymoprivous -thymopsyche -thymoquinone -thymosin -thymotactic -thymotic -thymotinic -thyms -Thymus -thymuses -Thin -thin-ankled -thin-armed -thin-barked -thin-bedded -thin-belly -thin-bellied -thin-bladed -thin-blooded -thin-blown -thin-bodied -thin-bottomed -thinbrained -thin-brained -thin-cheeked -thinclad -thin-clad -thinclads -thin-coated -thin-cut -thin-descending -thindown -thindowns -thine -thin-eared -thin-faced -thin-featured -thin-film -thin-flanked -thin-fleshed -thin-flowing -thin-frozen -thin-fruited -thing -thingal -thingamabob -thingamajig -thinghood -thingy -thinginess -thing-in-itself -thingish -thing-it-self -thingless -thinglet -thingly -thinglike -thinglikeness -thingliness -thingman -thingness -thin-grown -things -things-in-themselves -thingstead -thingum -thingumabob -thingumadad -thingumadoodle -thingumajig -thingumajigger -thingumaree -thingumbob -thingummy -thingut -thing-word -thin-haired -thin-headed -thin-hipped -Thinia -think -thinkability -thinkable -thinkableness -thinkably -thinker -thinkers -thinkful -thinking -thinkingly -thinkingness -thinkingpart -thinkings -thinkling -thinks -think-so -think-tank -thin-laid -thin-leaved -thin-legged -thinly -thin-lined -thin-lipped -thin-lippedly -thin-lippedness -Thynne -thin-necked -thinned -thinned-out -thinner -thinners -thinness -thinnesses -thinnest -thynnid -Thynnidae -thinning -thinnish -Thinocoridae -Thinocorus -thin-officered -thinolite -thin-peopled -thin-pervading -thin-rinded -thins -thin-set -thin-shelled -thin-shot -thin-skinned -thin-skinnedness -thin-soled -thin-sown -thin-spread -thin-spun -thin-stalked -thin-stemmed -thin-veiled -thin-voiced -thin-walled -thin-worn -thin-woven -thin-wristed -thin-wrought -thio -thio- -thioacet -thioacetal -thioacetic -thioalcohol -thioaldehyde -thioamid -thioamide -thioantimonate -thioantimoniate -thioantimonious -thioantimonite -thioarsenate -thioarseniate -thioarsenic -thioarsenious -thioarsenite -thiobaccilli -thiobacilli -Thiobacillus -Thiobacteria -Thiobacteriales -thiobismuthite -thiocarbamic -thiocarbamide -thiocarbamyl -thiocarbanilide -thiocarbimide -thiocarbonate -thiocarbonic -thiocarbonyl -thiochloride -thiochrome -thiocyanate -thiocyanation -thiocyanic -thiocyanide -thiocyano -thiocyanogen -thiocresol -Thiodamas -thiodiazole -thiodiphenylamine -thioester -thio-ether -thiofuran -thiofurane -thiofurfuran -thiofurfurane -thiogycolic -thioguanine -thiohydrate -thiohydrolysis -thiohydrolyze -thioindigo -thioketone -Thiokol -thiol -thiol- -thiolacetic -thiolactic -thiolic -thiolics -thiols -thion- -thionamic -thionaphthene -thionate -thionates -thionation -Thyone -thioneine -thionic -thionyl -thionylamine -thionyls -thionin -thionine -thionines -thionins -thionitrite -thionium -thionobenzoic -thionthiolic -thionurate -thiopental -thiopentone -thiophen -thiophene -thiophenic -thiophenol -thiophens -thiophosgene -thiophosphate -thiophosphite -thiophosphoric -thiophosphoryl -thiophthene -thiopyran -thioresorcinol -thioridazine -thiosinamine -Thiospira -thiostannate -thiostannic -thiostannite -thiostannous -thiosulfate -thiosulfates -thiosulfuric -thiosulphate -thiosulphonic -thiosulphuric -thiotepa -thiotepas -Thiothrix -thiotolene -thiotungstate -thiotungstic -thiouracil -thiourea -thioureas -thiourethan -thiourethane -thioxene -thiozone -thiozonid -thiozonide -thir -thyr- -Thira -Thyraden -thiram -thirams -Thyratron -third -thyrd- -thirdborough -third-class -third-degree -third-degreed -third-degreing -thirdendeal -third-estate -third-force -thirdhand -third-hand -thirdings -thirdly -thirdling -thirdness -third-order -third-rail -third-rate -third-rateness -third-rater -thirds -thirdsman -thirdstream -third-string -third-world -thyreoadenitis -thyreoantitoxin -thyreoarytenoid -thyreoarytenoideus -thyreocervical -thyreocolloid -Thyreocoridae -thyreoepiglottic -thyreogenic -thyreogenous -thyreoglobulin -thyreoglossal -thyreohyal -thyreohyoid -thyreoid -thyreoidal -thyreoideal -thyreoidean -thyreoidectomy -thyreoiditis -thyreoitis -thyreolingual -thyreoprotein -thyreosis -thyreotomy -thyreotoxicosis -thyreotropic -thyridia -thyridial -Thyrididae -thyridium -Thirion -Thyris -thyrisiferous -thyristor -thirl -thirlage -thirlages -thirled -thirling -Thirlmere -thirls -thyro- -thyroadenitis -thyroantitoxin -thyroarytenoid -thyroarytenoideus -thyrocalcitonin -thyrocardiac -thyrocarditis -thyrocele -thyrocervical -thyrocolloid -thyrocricoid -thyroepiglottic -thyroepiglottidean -thyrogenic -thyrogenous -thyroglobulin -thyroglossal -thyrohyal -thyrohyoid -thyrohyoidean -thyroid -thyroidal -thyroidea -thyroideal -thyroidean -thyroidectomy -thyroidectomies -thyroidectomize -thyroidectomized -thyroidism -thyroiditis -thyroidization -thyroidless -thyroidotomy -thyroidotomies -thyroids -thyroiodin -thyrold -thyrolingual -thyronin -thyronine -thyroparathyroidectomy -thyroparathyroidectomize -thyroprival -thyroprivia -thyroprivic -thyroprivous -thyroprotein -thyroria -thyrorion -thyrorroria -thyrosis -Thyrostraca -thyrostracan -thyrotherapy -thyrotome -thyrotomy -thyrotoxic -thyrotoxicity -thyrotoxicosis -thyrotrophic -thyrotrophin -thyrotropic -thyrotropin -thyroxin -thyroxine -thyroxinic -thyroxins -thyrse -thyrses -thyrsi -thyrsiflorous -thyrsiform -thyrsoid -thyrsoidal -thirst -thirst-abating -thirst-allaying -thirst-creating -thirsted -thirster -thirsters -thirstful -thirsty -thirstier -thirstiest -thirstily -thirst-inducing -thirstiness -thirsting -thirstingly -thirstland -thirstle -thirstless -thirstlessness -thirst-maddened -thirstproof -thirst-quenching -thirst-raising -thirsts -thirst-scorched -thirst-tormented -thyrsus -thyrsusi -thirt -thirteen -thirteen-day -thirteener -thirteenfold -thirteen-inch -thirteen-lined -thirteen-ringed -thirteens -thirteen-square -thirteen-stone -thirteen-story -thirteenth -thirteenthly -thirteenths -thirty -thirty-acre -thirty-day -thirty-eight -thirty-eighth -thirties -thirtieth -thirtieths -thirty-fifth -thirty-first -thirty-five -thirtyfold -thirty-foot -thirty-four -thirty-fourth -thirty-gunner -thirty-hour -thirty-yard -thirty-year -thirty-inch -thirtyish -thirty-knot -thirty-mile -thirty-nine -thirty-ninth -thirty-one -thirtypenny -thirty-pound -thirty-second -thirty-seven -thirty-seventh -thirty-six -thirty-sixth -thirty-third -thirty-thirty -thirty-three -thirty-ton -thirty-two -thirtytwomo -thirty-twomo -thirty-twomos -thirty-word -Thirza -Thirzi -Thirzia -this -Thysanocarpus -thysanopter -Thysanoptera -thysanopteran -thysanopteron -thysanopterous -Thysanoura -thysanouran -thysanourous -Thysanura -thysanuran -thysanurian -thysanuriform -thysanurous -this-a-way -Thisbe -Thisbee -thysel -thyself -thysen -thishow -thislike -thisll -this'll -thisn -thisness -Thissa -thissen -Thyssen -Thistle -thistlebird -thistled -thistledown -thistle-down -thistle-finch -thistlelike -thistleproof -thistlery -thistles -thistlewarp -thistly -thistlish -this-way-ward -thiswise -this-worldian -this-worldly -this-worldliness -this-worldness -thither -thitherto -thitherward -thitherwards -thitka -thitsi -thitsiol -thiuram -thivel -thixle -thixolabile -thixophobia -thixotropy -thixotropic -Thjatsi -Thjazi -Thlaspi -Thlingchadinne -Thlinget -thlipsis -ThM -Tho -tho' -Thoas -thob -thocht -Thock -Thoer -thof -thoft -thoftfellow -thoght -Thok -thoke -thokish -Thokk -tholance -thole -tholed -tholeiite -tholeiitic -tholeite -tholemod -tholepin -tholepins -tholes -tholi -tholing -tholli -tholoi -tholos -tholus -Thom -Thoma -Thomaean -Thomajan -thoman -Thomas -Thomasa -Thomasboro -Thomasin -Thomasina -Thomasine -thomasing -Thomasite -Thomaston -Thomastown -Thomasville -Thomey -thomisid -Thomisidae -Thomism -Thomist -Thomistic -Thomistical -Thomite -Thomomys -Thompson -Thompsons -Thompsontown -Thompsonville -Thomsen -thomsenolite -Thomson -Thomsonian -Thomsonianism -thomsonite -thon -Thonburi -thonder -Thondracians -Thondraki -Thondrakians -thone -thong -Thonga -thonged -thongy -thongman -thongs -Thonotosassa -thoo -thooid -thoom -Thoon -THOR -Thora -thoracal -thoracalgia -thoracaorta -thoracectomy -thoracectomies -thoracentesis -thoraces -thoraci- -thoracic -Thoracica -thoracical -thoracically -thoracicoabdominal -thoracicoacromial -thoracicohumeral -thoracicolumbar -thoraciform -thoracispinal -thoraco- -thoracoabdominal -thoracoacromial -thoracobronchotomy -thoracoceloschisis -thoracocentesis -thoracocyllosis -thoracocyrtosis -thoracodelphus -thoracodidymus -thoracodynia -thoracodorsal -thoracogastroschisis -thoracograph -thoracohumeral -thoracolysis -thoracolumbar -thoracomelus -thoracometer -thoracometry -thoracomyodynia -thoracopagus -thoracoplasty -thoracoplasties -thoracoschisis -thoracoscope -thoracoscopy -Thoracostei -thoracostenosis -thoracostomy -thoracostomies -Thoracostraca -thoracostracan -thoracostracous -thoracotomy -thoracotomies -Thor-Agena -thoral -thorascope -thorax -thoraxes -Thorazine -Thorbert -Thorburn -Thor-Delta -Thordia -Thordis -thore -Thoreau -Thoreauvian -Thorez -Thorfinn -thoria -thorianite -thorias -thoriate -thoric -thoriferous -Thorin -thorina -thorite -thorites -thorium -thoriums -Thorlay -Thorley -Thorlie -Thorma -Thorman -Thormora -Thorn -thorn-apple -thornback -thorn-bearing -thornbill -thorn-bound -Thornburg -thornbush -thorn-bush -Thorncombe -thorn-covered -thorn-crowned -Thorndale -Thorndike -Thorndyke -Thorne -thorned -thornen -thorn-encompassed -Thorner -Thornfield -thornhead -thorn-headed -thorn-hedge -thorn-hedged -Thorny -thorny-backed -Thornie -thorny-edged -thornier -thorniest -thorny-handed -thornily -thorniness -thorning -thorny-pointed -thorny-pricking -thorny-thin -thorny-twining -thornless -thornlessness -thornlet -thornlike -thorn-marked -thorn-pricked -thornproof -thorn-resisting -thorns -thorn's -thorn-set -thornstone -thorn-strewn -thorntail -Thornton -Thorntown -thorn-tree -Thornville -Thornwood -thorn-wounded -thorn-wreathed -thoro -thoro- -thorocopagous -thorogummite -thoron -thorons -Thorough -thorough- -thoroughbass -thorough-bind -thorough-bore -thoroughbrace -Thoroughbred -thoroughbredness -thoroughbreds -thorough-cleanse -thorough-dress -thorough-dry -thorougher -thoroughest -thoroughfare -thoroughfarer -thoroughfares -thoroughfare's -thoroughfaresome -thorough-felt -thoroughfoot -thoroughfooted -thoroughfooting -thorough-fought -thoroughgoing -thoroughgoingly -thoroughgoingness -thoroughgrowth -thorough-humble -thoroughly -thorough-light -thorough-lighted -thorough-line -thorough-made -thoroughness -thoroughnesses -thoroughpaced -thorough-paced -thoroughpin -thorough-pin -thorough-ripe -thorough-shot -thoroughsped -thorough-stain -thoroughstem -thoroughstitch -thorough-stitch -thoroughstitched -thoroughway -thoroughwax -thoroughwort -Thorp -Thorpe -thorpes -thorps -Thorr -Thorrlow -Thorsby -Thorshavn -Thorstein -Thorsten -thort -thorter -thortveitite -Thorvald -Thorvaldsen -Thorwald -Thorwaldsen -Thos -those -Thoth -thou -thoued -though -thought -thought-abhorring -thought-bewildered -thought-burdened -thought-challenging -thought-concealing -thought-conjuring -thought-depressed -thoughted -thoughten -thought-exceeding -thought-executing -thought-fed -thought-fixed -thoughtfree -thought-free -thoughtfreeness -thoughtful -thoughtfully -thoughtfulness -thoughtfulnesses -thought-giving -thought-hating -thought-haunted -thought-heavy -thought-heeding -thought-hounded -thought-humbled -thoughty -thought-imaged -thought-inspiring -thought-instructed -thought-involving -thought-jaded -thoughtkin -thought-kindled -thought-laden -thoughtless -thoughtlessly -thoughtlessness -thoughtlessnesses -thoughtlet -thought-lighted -thought-mad -thought-mastered -thought-meriting -thought-moving -thoughtness -thought-numb -thought-out -thought-outraging -thought-pained -thought-peopled -thought-poisoned -thought-pressed -thought-provoking -thought-read -thought-reading -thought-reviving -thought-ridden -thoughts -thought's -thought-saving -thought-set -thought-shaming -thoughtsick -thought-sounding -thought-stirring -thought-straining -thought-swift -thought-tight -thought-tinted -thought-tracing -thought-unsounded -thoughtway -thought-winged -thought-working -thought-worn -thought-worthy -thouing -thous -thousand -thousand-acre -thousand-dollar -thousand-eyed -thousandfold -thousandfoldly -thousand-footed -thousand-guinea -thousand-handed -thousand-headed -thousand-hued -thousand-year -thousand-jacket -thousand-leaf -thousand-legged -thousand-legger -thousand-legs -thousand-mile -thousand-pound -thousand-round -thousands -thousand-sided -thousand-souled -thousandth -thousandths -thousand-voiced -thousandweight -thouse -thou-shalt-not -thow -thowel -thowless -thowt -Thrace -Thraces -Thracian -thrack -Thraco-Illyrian -Thraco-Phrygian -thraep -thrail -thrain -thraldom -thraldoms -Thrale -thrall -thrallborn -thralldom -thralled -thralling -thrall-less -thrall-like -thrall-likethrallborn -thralls -thram -thrammle -thrang -thrangity -thranite -thranitic -thrap -thrapple -thrash -thrashed -thrashel -Thrasher -thrasherman -thrashers -thrashes -thrashing -thrashing-floor -thrashing-machine -thrashing-mill -Thrasybulus -thraso -thrasonic -thrasonical -thrasonically -thrast -thratch -Thraupidae -thrave -thraver -thraves -thraw -thrawart -thrawartlike -thrawartness -thrawcrook -thrawed -thrawing -thrawn -thrawneen -thrawnly -thrawnness -thraws -Thrax -thread -threadbare -threadbareness -threadbarity -thread-cutting -threaded -threaden -threader -threaders -threader-up -threadfin -threadfish -threadfishes -threadflower -threadfoot -thready -threadier -threadiest -threadiness -threading -threadle -thread-leaved -thread-legged -threadless -threadlet -thread-lettered -threadlike -threadmaker -threadmaking -thread-marked -thread-measuring -thread-mercerizing -thread-milling -thread-needle -thread-paper -threads -thread-shaped -thread-the-needle -threadway -thread-waisted -threadweed -thread-winding -threadworm -thread-worn -threap -threaped -threapen -threaper -threapers -threaping -threaps -threat -threated -threaten -threatenable -threatened -threatener -threateners -threatening -threateningly -threateningness -threatens -threatful -threatfully -threatfulness -threating -threatless -threatproof -threats -threave -THREE -three-a-cat -three-accent -three-acre -three-act -three-aged -three-aisled -three-and-a-halfpenny -three-angled -three-arched -three-arm -three-armed -three-awned -three-bagger -three-ball -three-ballmatch -three-banded -three-bar -three-basehit -three-bearded -three-bid -three-by-four -three-blade -three-bladed -three-bodied -three-bolted -three-bottle -three-bottom -three-bout -three-branch -three-branched -three-bushel -three-capsuled -three-card -three-celled -three-charge -three-chinned -three-cylinder -three-circle -three-circuit -three-class -three-clause -three-cleft -three-coat -three-cocked -three-color -three-colored -three-colour -three-component -three-coned -three-corded -three-corner -three-cornered -three-corneredness -three-course -three-crank -three-crowned -three-cup -three-D -three-day -three-dayed -three-deck -three-decked -three-decker -three-deep -three-dimensional -threedimensionality -three-dimensionalness -three-dip -three-dropped -three-eared -three-echo -three-edged -three-effect -three-eyed -three-electrode -three-faced -three-farthing -three-farthings -three-fathom -three-fibered -three-field -three-figure -three-fingered -three-floored -three-flowered -threefold -three-fold -threefolded -threefoldedness -threefoldly -threefoldness -three-foot -three-footed -three-forked -three-formed -three-fourths -three-fruited -three-gaited -three-grained -three-groined -three-groove -three-grooved -three-guinea -three-halfpence -three-halfpenny -three-halfpennyworth -three-hand -three-handed -three-headed -three-high -three-hinged -three-hooped -three-horned -three-horse -three-hour -three-year -three-year-old -three-years -three-inch -three-index -three-in-hand -three-in-one -three-iron -three-jointed -three-layered -three-leaf -three-leafed -three-leaved -three-legged -three-letter -three-lettered -three-life -three-light -three-line -three-lined -threeling -three-lipped -three-lobed -three-man -three-mast -three-masted -three-master -three-mile -three-minute -three-month -three-monthly -three-mouthed -three-move -three-mover -three-name -three-necked -three-nerved -threeness -three-ounce -three-out -three-ovuled -threep -three-pair -three-part -three-parted -three-pass -three-peaked -threeped -threepence -threepences -threepenny -threepennyworth -three-petaled -three-phase -three-phased -three-phaser -three-piece -three-pile -three-piled -three-piler -threeping -three-pint -three-plait -three-ply -three-point -three-pointed -three-pointing -three-position -three-poster -three-pound -three-pounder -three-pronged -threeps -three-quality -three-quart -three-quarter -three-quarter-bred -three-rail -three-ranked -three-reel -three-ribbed -three-ridge -three-ring -three-ringed -three-roll -three-room -three-roomed -three-row -three-rowed -threes -three's -three-sail -three-salt -three-scene -threescore -three-second -three-seeded -three-shanked -three-shaped -three-shilling -three-sided -three-sidedness -three-syllable -three-syllabled -three-sixty -three-soled -threesome -threesomes -three-space -three-span -three-speed -three-spined -three-spored -three-spot -three-spread -three-square -three-star -three-step -three-sticker -three-styled -three-story -three-storied -three-strand -three-stranded -three-stringed -three-striped -three-striper -three-suited -three-tailed -three-thorned -three-thread -three-throw -three-tie -three-tier -three-tiered -three-time -three-tined -three-toed -three-toes -three-ton -three-tongued -three-toothed -three-torque -three-tripod -three-up -three-valued -three-valved -three-volume -three-way -three-wayed -three-week -three-weekly -three-wheeled -three-wheeler -three-winged -three-wire -three-wive -three-woods -three-wormed -threip -Threlkeld -thremmatology -threne -threnetic -threnetical -threnode -threnodes -threnody -threnodial -threnodian -threnodic -threnodical -threnodies -threnodist -threnos -threonin -threonine -threose -threpe -threpsology -threptic -thresh -threshal -threshed -threshel -thresher -thresherman -threshers -threshes -threshing -threshingtime -threshold -thresholds -threshold's -Threskiornithidae -Threskiornithinae -threstle -threw -thribble -thrice -thrice-accented -thrice-blessed -thrice-boiled -thricecock -thrice-crowned -thrice-famed -thrice-great -thrice-happy -thrice-honorable -thrice-noble -thrice-sold -thrice-told -thrice-venerable -thrice-worthy -thridace -thridacium -Thrift -thriftbox -thrifty -thriftier -thriftiest -thriftily -thriftiness -thriftless -thriftlessly -thriftlessness -thriftlike -thrifts -thriftshop -thrill -thrillant -thrill-crazed -thrilled -thriller -thriller-diller -thrillers -thrill-exciting -thrillful -thrillfully -thrilly -thrillier -thrilliest -thrilling -thrillingly -thrillingness -thrill-less -thrillproof -thrill-pursuing -thrills -thrill-sated -thrill-seeking -thrillsome -thrimble -Thrymheim -thrimp -thrimsa -thrymsa -Thrinax -thring -thringing -thrinter -thrioboly -Thryonomys -thrip -thripel -thripid -Thripidae -thrippence -thripple -thrips -thrist -thrive -thrived -thriveless -thriven -thriver -thrivers -thrives -thriving -thrivingly -thrivingness -thro -thro' -throat -throatal -throatband -throatboll -throat-clearing -throat-clutching -throat-cracking -throated -throatful -throat-full -throaty -throatier -throatiest -throatily -throatiness -throating -throatlash -throatlatch -throat-latch -throatless -throatlet -throatlike -throatroot -throats -throat-slitting -throatstrap -throat-swollen -throatwort -throb -throbbed -throbber -throbbers -throbbing -throbbingly -throbless -throbs -throck -Throckmorton -throdden -throddy -throe -throed -throeing -throes -thromb- -thrombase -thrombectomy -thrombectomies -thrombi -thrombin -thrombins -thrombo- -thromboangiitis -thromboarteritis -thrombocyst -thrombocyte -thrombocytes -thrombocytic -thrombocytopenia -thrombocytopenic -thrombocytosis -thromboclasis -thromboclastic -thromboembolic -thromboembolism -thrombogen -thrombogenic -thromboid -thrombokinase -thrombolymphangitis -Thrombolysin -thrombolysis -thrombolytic -thrombopenia -thrombophlebitis -thromboplastic -thromboplastically -thromboplastin -thrombose -thrombosed -thromboses -thrombosing -thrombosis -thrombostasis -thrombotic -thrombus -thronal -throne -throne-born -throne-capable -throned -thronedom -throneless -thronelet -thronelike -thrones -throne's -throne-shattering -throneward -throne-worthy -throng -thronged -thronger -throngful -thronging -throngingly -throngs -throng's -throning -thronize -thronoi -thronos -Throop -thrope -thropple -throroughly -throstle -throstle-cock -throstlelike -throstles -throttle -throttleable -Throttlebottom -throttled -throttlehold -throttler -throttlers -throttles -throttling -throttlingly -throu -throuch -throucht -through -through- -through-and-through -throughbear -through-blow -throughbred -through-carve -through-cast -throughcome -through-composed -through-drainage -through-drive -through-formed -through-galled -throughgang -throughganging -throughgoing -throughgrow -throughither -through-ither -through-joint -through-key -throughknow -through-lance -throughly -through-mortise -through-nail -throughother -through-other -throughout -through-passage -through-pierce -throughput -through-rod -through-shoot -through-splint -through-stone -through-swim -through-thrill -through-toll -through-tube -throughway -throughways -throve -throw -throw- -throwaway -throwaways -throwback -throw-back -throwbacks -throw-crook -throwdown -thrower -throwers -throw-forward -throw-in -throwing -throwing-in -throwing-stick -thrown -throwoff -throw-off -throw-on -throwout -throw-over -throws -throwst -throwster -throw-stick -throwwort -Thrsieux -thru -thrum -thrumble -thrum-eyed -thrummed -thrummer -thrummers -thrummy -thrummier -thrummiest -thrumming -thrums -thrumwort -thruout -thruppence -thruput -thruputs -thrush -thrushel -thrusher -thrushes -thrushy -thrushlike -thrust -thrusted -thruster -thrusters -thrustful -thrustfulness -thrusting -thrustings -thrustle -thrustor -thrustors -thrustpush -thrusts -thrutch -thrutchings -Thruthheim -Thruthvang -thruv -Thruway -thruways -thsant -Thsos -thuan -Thuban -Thucydidean -Thucydides -thud -thudded -thudding -thuddingly -thuds -thug -thugdom -thugged -thuggee -thuggeeism -thuggees -thuggery -thuggeries -thuggess -thugging -thuggish -thuggism -thugs -thug's -thuya -thuyas -Thuidium -Thuyopsis -Thuja -thujas -thujene -thujyl -thujin -thujone -Thujopsis -Thule -thulia -thulias -thulir -thulite -thulium -thuliums -thulr -thuluth -thumb -thumb-and-finger -thumbbird -thumbed -Thumbelina -thumber -thumb-fingered -thumbhole -thumby -thumbikin -thumbikins -thumb-index -thumbing -thumbkin -thumbkins -thumb-kissing -thumble -thumbless -thumblike -thumbling -thumb-made -thumbmark -thumb-mark -thumb-marked -thumbnail -thumb-nail -thumbnails -thumbnut -thumbnuts -thumbpiece -thumbprint -thumb-ring -thumbrope -thumb-rope -thumbs -thumbscrew -thumb-screw -thumbscrews -thumbs-down -thumb-shaped -thumbstall -thumb-stall -thumbstring -thumb-sucker -thumb-sucking -thumbs-up -thumbtack -thumbtacked -thumbtacking -thumbtacks -thumb-worn -thumlungur -Thummim -thummin -thump -thump-cushion -thumped -thumper -thumpers -thumping -thumpingly -thumps -Thun -Thunar -Thunbergia -thunbergilene -thund -thunder -thunder-armed -thunderation -thunder-baffled -thunderball -thunderbearer -thunder-bearer -thunderbearing -thunderbird -thunderblast -thunder-blast -thunderbolt -thunderbolts -thunderbolt's -thunderbox -thunder-breathing -thunderburst -thunder-charged -thunderclap -thunder-clap -thunderclaps -thundercloud -thunder-cloud -thunderclouds -thundercrack -thunder-darting -thunder-delighting -thunder-dirt -thundered -thunderer -thunderers -thunder-fearless -thunderfish -thunderfishes -thunderflower -thunder-footed -thunder-forging -thunder-fraught -thunder-free -thunderful -thunder-girt -thunder-god -thunder-guiding -thunder-gust -thunderhead -thunderheaded -thunderheads -thunder-hid -thundery -thundering -thunderingly -thunder-laden -thunderless -thunderlight -thunderlike -thunder-maned -thunderous -thunderously -thunderousness -thunderpeal -thunderplump -thunderproof -thunderpump -thunder-rejoicing -thunder-riven -thunder-ruling -thunders -thunder-scarred -thunder-scathed -thunder-shod -thundershower -thundershowers -thunder-slain -thundersmite -thundersmiting -thunder-smitten -thundersmote -thunder-splintered -thunder-split -thunder-splitten -thundersquall -thunderstick -thunderstone -thunder-stone -thunderstorm -thunder-storm -thunderstorms -thunderstorm's -thunderstricken -thunderstrike -thunderstroke -thunderstruck -thunder-teeming -thunder-throwing -thunder-thwarted -thunder-tipped -thunder-tongued -thunder-voiced -thunder-wielding -thunderwood -thunderworm -thunderwort -thundrous -thundrously -Thunell -thung -thunge -thunk -thunked -thunking -thunks -Thunnidae -Thunnus -Thunor -thuoc -Thur -Thurber -Thurberia -Thurgau -thurgi -Thurgood -Thury -thurible -thuribles -thuribuler -thuribulum -thurifer -thuriferous -thurifers -thurify -thurificate -thurificati -thurification -Thuringer -Thuringia -Thuringian -thuringite -Thurio -thurl -thurle -Thurlough -Thurlow -thurls -thurm -Thurman -Thurmann -Thurmond -Thurmont -thurmus -Thurnau -Thurnia -Thurniaceae -thurrock -Thurs -Thurs. -Thursby -Thursday -Thursdays -thursday's -thurse -thurst -Thurstan -Thurston -thurt -thus -thusgate -Thushi -thusly -thusness -thuswise -thutter -thwack -thwacked -thwacker -thwackers -thwacking -thwackingly -thwacks -thwackstave -thwait -thwaite -thwart -thwarted -thwartedly -thwarteous -thwarter -thwarters -thwarting -thwartingly -thwartly -thwartman -thwart-marks -thwartmen -thwartness -thwartover -thwarts -thwartsaw -thwartship -thwart-ship -thwartships -thwartways -thwartwise -Thwing -thwite -thwittle -thworl -THX -TI -ty -TIA -Tiahuanacan -Tiahuanaco -Tiam -Tiamat -Tiana -Tiananmen -tiang -tiangue -Tyan-Shan -tiao -tiar -tiara -tiaraed -tiaralike -tiaras -tiarella -Tyaskin -Tiatinagua -tyauve -tib -Tybald -Tybalt -Tibbett -Tibbetts -tibby -Tibbie -tibbit -Tibbitts -Tibbs -Tibbu -tib-cat -tibey -Tiber -Tiberian -Tiberias -Tiberine -Tiberinus -Tiberius -tibert -Tibesti -Tibet -Tibetan -tibetans -Tibeto-Burman -Tibeto-Burmese -Tibeto-chinese -Tibeto-himalayan -Tybi -tibia -tibiad -tibiae -tibial -tibiale -tibialia -tibialis -tibias -tibicen -tibicinist -Tybie -tibio- -tibiocalcanean -tibiofemoral -tibiofibula -tibiofibular -tibiometatarsal -tibionavicular -tibiopopliteal -tibioscaphoid -tibiotarsal -tibiotarsi -tibiotarsus -tibiotarsusi -Tibold -Tibouchina -tibourbou -Tibullus -Tibur -Tiburcio -Tyburn -Tyburnian -Tiburon -Tiburtine -TIC -Tica -tical -ticals -ticca -ticchen -Tice -ticement -ticer -Tyche -tichel -tychism -tychistic -tychite -Tychius -Tichnor -Tycho -Tichodroma -tichodrome -Tichon -Tychon -Tychonian -Tychonic -Tichonn -Tychonn -tychoparthenogenesis -tychopotamic -tichorhine -tichorrhine -Ticino -tick -tick-a-tick -tickbean -tickbird -tick-bird -tickeater -ticked -tickey -ticken -ticker -tickers -ticket -ticket-canceling -ticket-counting -ticket-dating -ticketed -ticketer -tickety-boo -ticketing -ticketless -ticket-making -ticketmonger -ticket-of-leave -ticket-of-leaver -ticket-porter -ticket-printing -ticket-registering -tickets -ticket's -ticket-selling -ticket-vending -Tickfaw -ticky -tickicide -tickie -ticking -tickings -tickle -tickleback -ticklebrain -tickled -tickle-footed -tickle-headed -tickle-heeled -ticklely -ticklenburg -ticklenburgs -tickleness -tickleproof -tickler -ticklers -tickles -ticklesome -tickless -tickle-toby -tickle-tongued -tickleweed -tickly -tickly-benders -tickliness -tickling -ticklingly -ticklish -ticklishly -ticklishness -ticklishnesses -tickney -Ticknor -tickproof -ticks -tickseed -tickseeded -tickseeds -ticktack -tick-tack -ticktacked -ticktacker -ticktacking -ticktacks -ticktacktoe -tick-tack-toe -ticktacktoo -tick-tack-too -ticktick -tick-tick -ticktock -ticktocked -ticktocking -ticktocks -tickweed -Ticon -Ticonderoga -tycoon -tycoonate -tycoons -tic-polonga -tics -tictac -tictacked -tictacking -tictacs -tictactoe -tic-tac-toe -tictic -tictoc -tictocked -tictocking -tictocs -ticul -Ticuna -Ticunan -TID -tidal -tidally -tidbit -tidbits -tydden -tidder -tiddy -tyddyn -tiddle -tiddledywinks -tiddley -tiddleywink -tiddler -tiddly -tiddling -tiddlywink -tiddlywinker -tiddlywinking -tiddlywinks -tide -tide-beaten -tide-beset -tide-bound -tide-caught -tidecoach -tide-covered -tided -tide-driven -tide-flooded -tide-forsaken -tide-free -tideful -tide-gauge -tide-generating -tidehead -tideland -tidelands -tideless -tidelessness -tidely -tidelike -tideling -tide-locked -tidemaker -tidemaking -tidemark -tide-mark -tide-marked -tidemarks -tide-mill -tide-predicting -tide-producing -tiderace -tide-ribbed -tiderip -tide-rip -tiderips -tiderode -tide-rode -tides -tidesman -tidesurveyor -Tideswell -tide-swept -tide-taking -tide-tossed -tide-trapped -Tydeus -tideway -tideways -tidewaiter -tide-waiter -tidewaitership -tideward -tide-washed -tidewater -tide-water -tidewaters -tide-worn -tidi -tidy -tidiable -Tydides -tydie -tidied -tidier -tidiers -tidies -tidiest -tidife -tidying -tidyism -tidy-kept -tidily -tidy-looking -tidy-minded -tidiness -tidinesses -tiding -tidingless -tidings -tidiose -Tidioute -tidytips -tidy-up -tidley -tidling -tidology -tidological -Tidwell -tie -Tye -tie- -tie-and-dye -tieback -tiebacks -tieboy -Tiebold -Tiebout -tiebreaker -Tieck -tieclasp -tieclasps -tied -Tiedeman -tie-dyeing -tiedog -tie-down -tyee -tyees -tiefenthal -tie-in -tieing -tieless -tiemaker -tiemaking -tiemannite -Tiemroth -Tien -Tiena -tienda -tiens -tienta -tiento -Tientsin -tie-on -tie-out -tiepin -tiepins -tie-plater -Tiepolo -tier -tierce -tierced -tiercel -tiercels -tierceron -tierces -tiered -Tierell -tierer -Tiergarten -tiering -tierlike -Tiernan -Tierney -tierras -tiers -tiers-argent -tiersman -Tiersten -Tiertza -Tierza -ties -tyes -Tiesiding -tietick -tie-tie -Tieton -tie-up -tievine -tiewig -tie-wig -tiewigged -Tifanie -TIFF -Tiffa -Tiffani -Tiffany -Tiffanie -tiffanies -tiffanyite -Tiffanle -tiffed -Tiffi -Tiffy -Tiffie -Tiffin -tiffined -tiffing -tiffining -tiffins -tiffish -tiffle -tiffs -tifinagh -Tiflis -tift -tifter -Tifton -tig -tyg -Tiga -tige -tigella -tigellate -tigelle -tigellum -tigellus -tiger -tigerbird -tiger-cat -tigereye -tigereyes -tigerfish -tigerfishes -tigerflower -tigerfoot -tiger-footed -tigerhearted -tigerhood -tigery -tigerish -tigerishly -tigerishness -tigerism -tigerkin -tigerly -tigerlike -tigerling -tiger-looking -tiger-marked -tiger-minded -tiger-mouth -tigernut -tiger-passioned -tigerproof -tigers -tiger's -tiger's-eye -tiger-spotted -tiger-striped -Tigerton -Tigerville -tigerwood -tigger -Tigges -tight -tight-ankled -tight-belted -tight-bodied -tight-booted -tight-bound -tight-clap -tight-clenched -tight-closed -tight-draped -tight-drawn -tighten -tightened -tightener -tighteners -tightening -tightenings -tightens -tighter -tightest -tightfisted -tight-fisted -tightfistedly -tightfistedness -tightfitting -tight-fitting -tight-gartered -tight-hosed -tightish -tightknit -tight-knit -tight-laced -tightly -tightlier -tightliest -tight-limbed -tightlipped -tight-lipped -tight-looking -tight-made -tight-mouthed -tight-necked -tightness -tightnesses -tight-packed -tight-pressed -tight-reining -tight-rooted -tightrope -tightroped -tightropes -tightroping -tights -tight-set -tight-shut -tight-skinned -tight-skirted -tight-sleeved -tight-stretched -tight-tie -tight-valved -tightwad -tightwads -tight-waisted -tightwire -tight-wound -tight-woven -tight-wristed -tiglaldehyde -tiglic -tiglinic -tiglon -tiglons -Tignall -tignon -tignum -tigon -tigons -Tigr -Tigrai -Tigre -Tigrean -tigress -tigresses -tigresslike -Tigrett -Tigridia -Tigrina -tigrine -Tigrinya -Tigris -tigrish -tigroid -tigrolysis -tigrolytic -tigrone -tigtag -Tigua -Tigurine -Tihwa -Tyigh -Tyika -tying -Tijeras -Tijuana -tike -tyke -tyken -tikes -tykes -tykhana -Tiki -tyking -tikis -tikitiki -tikka -tikker -tikkun -tiklin -tikolosh -tikoloshe -tikoor -tikor -tikur -til -'til -Tila -tilaite -tilak -tilaka -tilaks -tilapia -tilapias -tylari -tylarus -tilasite -tylaster -Tilburg -Tilbury -tilburies -Tilda -tilde -Tilden -tildes -Tildi -Tildy -Tildie -tile -tyleberry -tile-clad -tile-covered -tiled -tilefish -tile-fish -tilefishes -tileyard -tilelike -tilemaker -tilemaking -Tylenchus -tile-pin -Tiler -Tyler -tile-red -tilery -tileries -Tylerism -Tylerite -Tylerize -tile-roofed -tileroot -tilers -Tylersburg -Tylersport -Tylersville -Tylerton -Tylertown -tiles -tileseed -tilesherd -tilestone -tilette -tileways -tilework -tileworks -tilewright -Tilford -Tilghman -Tilia -Tiliaceae -tiliaceous -tilicetum -tilyer -tilikum -Tiline -tiling -tilings -tylion -Till -Tilla -tillable -Tillaea -Tillaeastrum -tillage -tillages -Tillamook -Tillandsia -Tillar -Tillatoba -tilled -Tilleda -tilley -Tiller -tillered -Tillery -tillering -tillerless -tillerman -tillermen -tillers -tillet -Tilletia -Tilletiaceae -tilletiaceous -Tillford -Tillfourd -Tilli -Tilly -Tillich -tillicum -Tillie -tilly-fally -tilling -Tillinger -Tillio -Tillion -tillite -tillites -tilly-vally -Tillman -Tillo -tillodont -Tillodontia -Tillodontidae -tillot -Tillotson -tillotter -tills -Tillson -tilmus -Tilney -tylo- -tylocin -Tiloine -tyloma -tylopod -Tylopoda -tylopodous -Tylosaurus -tylose -tyloses -tylosin -tylosins -tylosis -tylosoid -tylosteresis -tylostylar -tylostyle -tylostylote -tylostylus -Tylostoma -Tylostomaceae -Tylosurus -tylotate -tylote -tylotic -tylotoxea -tylotoxeate -tylotus -tilpah -tils -Tilsit -Tilsiter -tilt -tiltable -tiltboard -tilt-boat -tilted -tilter -tilters -tilth -tilt-hammer -tilthead -tilths -tilty -tiltyard -tilt-yard -tiltyards -tilting -tiltlike -tiltmaker -tiltmaking -tiltmeter -Tilton -Tiltonsville -tilts -tiltup -tilt-up -tilture -tylus -Tim -Tima -timable -Timaeus -Timalia -Timaliidae -Timaliinae -timaliine -timaline -Timandra -Timani -timar -timarau -timaraus -timariot -timarri -Timaru -timaua -timawa -timazite -timbal -tymbal -timbale -timbales -tymbalon -timbals -tymbals -timbang -timbe -timber -timber-boring -timber-built -timber-carrying -timber-ceilinged -timber-covered -timber-cutting -timber-devouring -timberdoodle -timber-eating -timbered -timberer -timber-floating -timber-framed -timberhead -timber-headed -timber-hitch -timbery -timberyard -timber-yard -timbering -timberjack -timber-laden -timberland -timberlands -timberless -timberlike -timberline -timber-line -timber-lined -timberlines -timberling -timberman -timbermen -timbermonger -timbern -timber-producing -timber-propped -timbers -timber-skeletoned -timbersome -timber-strewn -timber-toed -timber-tree -timbertuned -Timberville -timberwood -timber-wood -timberwork -timber-work -timberwright -timbestere -Timbira -Timblin -Timbo -timbral -timbre -timbrel -timbreled -timbreler -timbrelled -timbreller -timbrels -timbres -timbrology -timbrologist -timbromania -timbromaniac -timbromanist -timbrophily -timbrophilic -timbrophilism -timbrophilist -Timbuktu -Time -timeable -time-authorized -time-ball -time-bargain -time-barred -time-battered -time-beguiling -time-bent -time-bettering -time-bewasted -timebinding -time-binding -time-blackened -time-blanched -time-born -time-bound -time-breaking -time-canceled -timecard -timecards -time-changed -time-cleft -time-consuming -timed -time-deluding -time-discolored -time-eaten -time-economizing -time-enduring -time-expired -time-exposure -timeful -timefully -timefulness -time-fused -time-gnawn -time-halting -time-hastening -time-honored -time-honoured -timekeep -timekeeper -time-keeper -timekeepers -timekeepership -timekeeping -time-killing -time-lag -time-lapse -time-lasting -timeless -timelessly -timelessness -timelessnesses -timely -Timelia -timelier -timeliest -Timeliidae -timeliine -timelily -time-limit -timeliness -timelinesses -timeling -time-marked -time-measuring -time-mellowed -timenoguy -time-noting -timeous -timeously -timeout -time-out -timeouts -timepiece -timepieces -timepleaser -time-pressed -timeproof -timer -timerau -time-rent -timerity -timers -time-rusty -times -Tymes -timesaver -time-saver -timesavers -timesaving -time-saving -timescale -time-scarred -time-served -timeserver -time-server -timeservers -timeserving -time-serving -timeservingness -timeshare -timeshares -timesharing -time-sharing -time-shrouded -time-space -time-spirit -timestamp -timestamps -timet -timetable -time-table -timetables -timetable's -timetaker -timetaking -time-taught -time-temperature -time-tested -time-tried -timetrp -timeward -time-wasted -time-wasting -time-wearied -Timewell -time-white -time-withered -timework -timeworker -timeworks -timeworn -time-worn -Timex -Timi -Timias -timid -timider -timidest -timidity -timidities -timidly -timidness -timidous -timing -timings -timish -Timisoara -timist -Timken -timmer -Timmi -Timmy -Timmie -Timmons -Timmonsville -Timms -Timnath -Timne -timo -Timocharis -timocracy -timocracies -timocratic -timocratical -Timofei -Timoleon -Timon -Tymon -timoneer -Timonian -Timonism -Timonist -Timonistic -Timonium -Timonize -Timor -Timorese -timoroso -timorous -timorously -timorousness -timorousnesses -timorousnous -timorsome -Timoshenko -Timote -Timotean -Timoteo -Timothea -Timothean -Timothee -Timotheus -Timothy -Tymothy -timothies -Timour -tymp -tympan -timpana -tympana -tympanal -tympanam -tympanectomy -timpani -tympani -tympany -tympanic -tympanichord -tympanichordal -tympanicity -tympanies -tympaniform -tympaning -tympanism -timpanist -tympanist -timpanists -tympanites -tympanitic -tympanitis -tympanize -timpano -tympano -tympano- -tympanocervical -Tympano-eustachian -tympanohyal -tympanomalleal -tympanomandibular -tympanomastoid -tympanomaxillary -tympanon -tympanoperiotic -tympanosis -tympanosquamosal -tympanostapedial -tympanotemporal -tympanotomy -tympans -Tympanuchus -timpanum -tympanum -timpanums -tympanums -Timpson -Timucua -Timucuan -Timuquan -Timuquanan -Timur -tim-whiskey -timwhisky -tin -TINA -tinage -tinaja -Tinamidae -tinamine -tinamou -tinamous -tinampipi -Tynan -Tinaret -tin-bearing -tinbergen -tin-bottomed -tin-bound -tin-bounder -tinc -tincal -tincals -tin-capped -tinchel -tinchill -tinclad -tin-colored -tin-covered -tinct -tinct. -tincted -tincting -tinction -tinctorial -tinctorially -tinctorious -tincts -tinctumutation -tincture -tinctured -tinctures -tincturing -tind -tynd -Tindal -Tindale -Tyndale -Tindall -Tyndall -Tyndallization -Tyndallize -tyndallmeter -tindalo -Tyndareos -Tyndareus -Tyndaridae -tinder -tinderbox -tinderboxes -tinder-cloaked -tinder-dry -tindered -tindery -tinderish -tinderlike -tinderous -tinders -Tine -Tyne -tinea -tineal -tinean -tin-eared -tineas -tined -tyned -tin-edged -tinegrass -tineid -Tineidae -tineids -Tineina -tineine -tineman -tinemen -Tynemouth -tineoid -Tineoidea -tineola -Tyner -tinerer -tines -tynes -Tyneside -tinetare -tinety -tineweed -tin-filled -tinfoil -tin-foil -tin-foiler -tinfoils -tinful -tinfuls -Ting -ting-a-ling -tinge -tinged -Tingey -tingeing -tingent -tinger -tinges -Tinggian -tingi -tingibility -tingible -tingid -Tingidae -tinging -Tingis -tingitid -Tingitidae -tinglass -tin-glass -tin-glazed -tingle -tingled -Tingley -tingler -tinglers -tingles -tingletangle -tingly -tinglier -tingliest -tingling -tinglingly -tinglish -tings -Tyngsboro -tingtang -tinguaite -tinguaitic -tinguy -Tinguian -tin-handled -tinhorn -tinhorns -tinhouse -Tini -Tiny -Tinia -Tinya -tinier -tiniest -tinily -tininess -tininesses -tining -tyning -tink -tink-a-tink -tinker -tinkerbird -tinkerdom -tinkered -tinkerer -tinkerers -tinkering -tinkerly -tinkerlike -tinkers -tinkershere -tinkershire -tinkershue -tinkerwise -tin-kettle -tin-kettler -tinkle -tinkled -tinkler -tinklerman -tinklers -tinkles -tinkle-tankle -tinkle-tankling -tinkly -tinklier -tinkliest -tinkling -tinklingly -tinklings -tinlet -tinlike -tin-lined -tin-mailed -tinman -tinmen -Tinne -tinned -tinnen -tinner -tinnery -tinners -tinnet -Tinni -tinny -Tinnie -tinnient -tinnier -tinniest -tinnified -tinnily -tinniness -tinning -tinnitus -tinnituses -tinnock -Tino -Tinoceras -tinoceratid -tin-opener -tinosa -tin-pan -tinplate -tin-plate -tin-plated -tinplates -tin-plating -tinpot -tin-pot -tin-pottery -tin-potty -tin-pottiness -tin-roofed -tins -tin's -tinsel -tinsel-bright -tinsel-clad -tinsel-covered -tinseled -tinsel-embroidered -tinseling -tinselled -tinselly -tinsellike -tinselling -tinselmaker -tinselmaking -tinsel-paned -tinselry -tinsels -tinsel-slippered -tinselweaver -tinselwork -tinsy -Tinsley -tinsman -tinsmen -tinsmith -tinsmithy -tinsmithing -tinsmiths -tinstone -tin-stone -tinstones -tinstuff -tint -tinta -tin-tabled -tintack -tin-tack -tintage -Tintah -tintamar -tintamarre -tintarron -tinted -tinter -tinternell -tinters -tinty -tintie -tintiness -tinting -tintingly -tintings -tintinnabula -tintinnabulant -tintinnabular -tintinnabulary -tintinnabulate -tintinnabulation -tintinnabulations -tintinnabulatory -tintinnabulism -tintinnabulist -tintinnabulous -tintinnabulum -tintype -tin-type -tintyper -tintypes -tintist -tintless -tintlessness -tintometer -tintometry -tintometric -Tintoretto -tints -tinwald -Tynwald -tinware -tinwares -tin-whistle -tin-white -tinwoman -tinwork -tinworker -tinworking -tinworks -tinzenite -Tioga -tion -Tiona -Tionesta -Tionontates -Tionontati -Tiossem -Tiou -tious -TIP -typ -tip- -typ. -typable -typal -tip-and-run -typarchical -tipburn -tipcart -tipcarts -tipcat -tip-cat -tipcats -tip-crowning -tip-curled -tipe -type -typeable -tip-eared -typebar -typebars -type-blackened -typecase -typecases -typecast -type-cast -type-caster -typecasting -type-casting -typecasts -type-cutting -typed -type-distributing -type-dressing -Typees -typeface -typefaces -typeform -typefounder -typefounders -typefounding -typefoundry -typehead -type-high -typeholder -typey -typeless -typeout -typer -types -type's -typescript -typescripts -typeset -typeseting -typesets -typesetter -typesetters -typesetting -typesof -typewrite -typewrited -Typewriter -typewriters -typewriter's -typewrites -typewriting -typewritten -typewrote -tip-finger -tipful -Typha -Typhaceae -typhaceous -typhaemia -Tiphane -Tiphani -Tiphany -Tiphanie -tiphead -typhemia -Tiphia -typhia -typhic -Tiphiidae -typhinia -typhization -typhlatony -typhlatonia -typhlectasis -typhlectomy -typhlenteritis -typhlitic -typhlitis -typhlo- -typhloalbuminuria -typhlocele -typhloempyema -typhloenteritis -typhlohepatitis -typhlolexia -typhlolithiasis -typhlology -typhlologies -typhlomegaly -Typhlomolge -typhlon -typhlopexy -typhlopexia -typhlophile -typhlopid -Typhlopidae -Typhlops -typhloptosis -typhlosis -typhlosolar -typhlosole -typhlostenosis -typhlostomy -typhlotomy -typhlo-ureterostomy -typho- -typhoaemia -typhobacillosis -Typhoean -typhoemia -Typhoeus -typhogenic -typhoid -typhoidal -typhoidin -typhoidlike -typhoids -typholysin -typhomalaria -typhomalarial -typhomania -Typhon -typhonia -Typhonian -Typhonic -typhons -typhoon -typhoonish -typhoons -typhopneumonia -typhose -typhosepsis -typhosis -typhotoxine -typhous -Typhula -typhus -typhuses -tipi -typy -typic -typica -typical -typicality -typically -typicalness -typicalnesses -typicon -typicum -typier -typiest -typify -typification -typified -typifier -typifiers -typifies -typifying -typika -typikon -typikons -tip-in -typing -tipis -typist -typists -typist's -tipit -tipiti -tiple -Tiplersville -tipless -tiplet -tipman -tipmen -tipmost -typo -typo- -typobar -typocosmy -tipoff -tip-off -tipoffs -typograph -typographer -typographers -typography -typographia -typographic -typographical -typographically -typographies -typographist -typolithography -typolithographic -typology -typologic -typological -typologically -typologies -typologist -typomania -typometry -tip-on -tiponi -typonym -typonymal -typonymic -typonymous -typophile -typorama -typos -typoscript -typotelegraph -typotelegraphy -typothere -Typotheria -Typotheriidae -typothetae -typp -tippable -tippa-malku -Tippecanoe -tipped -tippee -tipper -Tipperary -tipper-off -tippers -tipper's -tippet -Tippets -tippet-scuffle -Tippett -tippy -tippier -tippiest -tipping -tippytoe -tipple -tippled -tippleman -tippler -tipplers -tipples -tipply -tippling -tippling-house -Tippo -tipproof -typps -tipree -Tips -tip's -tipsy -tipsy-cake -tipsier -tipsiest -tipsify -tipsification -tipsifier -tipsily -tipsiness -tipsy-topsy -tipstaff -tipstaffs -tipstaves -tipster -tipsters -tipstock -tipstocks -tiptail -tip-tap -tipteerer -tiptilt -tip-tilted -tiptoe -tiptoed -tiptoeing -tiptoeingly -tiptoes -tiptoing -typtology -typtological -typtologist -Tipton -Tiptonville -tiptop -tip-top -tiptopness -tiptopper -tiptoppish -tiptoppishness -tiptops -tiptopsome -Tipula -Tipularia -tipulid -Tipulidae -tipuloid -Tipuloidea -tipup -tip-up -Tipura -typw -typw. -tiqueur -Tyr -Tyra -tirade -tirades -tirage -tirailleur -tiralee -tyramin -tyramine -tyramines -Tiran -Tirana -tyranness -Tyranni -tyranny -tyrannial -tyrannic -tyrannical -tyrannically -tyrannicalness -tyrannicidal -tyrannicide -tyrannicly -Tyrannidae -Tyrannides -tyrannies -Tyranninae -tyrannine -tyrannis -tyrannise -tyrannised -tyranniser -tyrannising -tyrannisingly -tyrannism -tyrannize -tyrannized -tyrannizer -tyrannizers -tyrannizes -tyrannizing -tyrannizingly -tyrannoid -tyrannophobia -tyrannosaur -tyrannosaurs -Tyrannosaurus -tyrannosauruses -tyrannous -tyrannously -tyrannousness -Tyrannus -tyrant -tyrant-bought -tyrantcraft -tyrant-hating -tyrantlike -tyrant-quelling -tyrant-ridden -tyrants -tyrant's -tyrant-scourging -tyrantship -tyrasole -tirasse -tiraz -tire -Tyre -tire-bending -tire-changing -tired -tyred -tired-armed -tired-eyed -tireder -tiredest -tired-faced -tired-headed -tiredly -tired-looking -tiredness -tiredom -tired-winged -Tyree -tire-filling -tire-heating -tirehouse -tire-inflating -tireless -tirelessly -tirelessness -tireling -tiremaid -tiremaker -tiremaking -tireman -tiremen -tirement -tyremesis -tire-mile -tirer -tireroom -tires -tyres -Tiresias -tiresmith -tiresol -tiresome -tiresomely -tiresomeness -tiresomenesses -tiresomeweed -tirewoman -tire-woman -tirewomen -Tirhutia -Tyrian -tyriasis -tiriba -tiring -tyring -tiring-house -tiring-irons -tiringly -tiring-room -TIRKS -tirl -tirled -tirlie-wirlie -tirling -tirly-toy -tirls -tirma -Tir-na-n'Og -Tiro -Tyro -tyrocidin -tyrocidine -tirocinia -tirocinium -tyroglyphid -Tyroglyphidae -Tyroglyphus -tyroid -Tirol -Tyrol -Tirolean -Tyrolean -Tirolese -Tyrolese -Tyrolienne -Tyroliennes -tyrolite -tyrology -tyroma -tyromancy -tyromas -tyromata -tyromatous -Tyrone -Tironian -tyronic -tyronism -Tyronza -TIROS -tyros -tyrosyl -tyrosinase -tyrosine -tyrosines -tyrosinuria -tyrothricin -tyrotoxicon -tyrotoxine -Tirpitz -tirr -Tyrr -tirracke -tirralirra -tirra-lirra -Tirrell -Tyrrell -tirret -Tyrrhene -Tyrrheni -Tyrrhenian -Tyrrhenum -Tyrrheus -Tyrrhus -Tirribi -tirrit -tirrivee -tirrivees -tirrivie -tirrlie -tirrwirr -Tyrsenoi -tirshatha -Tyrtaean -Tyrtaeus -Tirthankara -Tiruchirapalli -Tirunelveli -Tirurai -Tyrus -tirve -tirwit -Tirza -Tirzah -tis -'tis -Tisa -tisane -tisanes -tisar -Tisbe -Tisbee -Tischendorf -Tisdale -Tiselius -Tish -Tisha -tishah-b'ab -Tishiya -Tishomingo -Tishri -tisic -Tisiphone -Tiskilwa -Tisman -Tyson -tysonite -Tisserand -Tissot -tissu -tissual -tissue -tissue-building -tissue-changing -tissued -tissue-destroying -tissue-forming -tissuey -tissueless -tissuelike -tissue-paper -tissue-producing -tissues -tissue's -tissue-secreting -tissuing -tissular -tisswood -tyste -tystie -tisty-tosty -tiswin -Tisza -Tit -tyt -Tit. -Tita -Titan -titan- -titanate -titanates -titanaugite -Titanesque -Titaness -titanesses -Titania -Titanian -titanias -Titanic -Titanical -Titanically -Titanichthyidae -Titanichthys -titaniferous -titanifluoride -titanyl -Titanism -titanisms -titanite -titanites -titanitic -titanium -titaniums -Titanlike -titano -titano- -titanocyanide -titanocolumbate -titanofluoride -Titanolater -Titanolatry -Titanomachy -Titanomachia -titanomagnetite -titanoniobate -titanosaur -Titanosaurus -titanosilicate -titanothere -Titanotheridae -Titanotherium -titanous -titans -titar -titbit -tit-bit -titbits -titbitty -tite -titer -titeration -titers -titfer -titfers -titfish -tithable -tithal -tithe -tythe -tithebook -tithe-collecting -tithed -tythed -tithe-free -titheless -tithemonger -tithepayer -tithe-paying -tither -titheright -tithers -tithes -tythes -tithymal -Tithymalopsis -Tithymalus -tithing -tything -tithingman -tithing-man -tithingmen -tithingpenny -tithings -tithonia -tithonias -tithonic -tithonicity -tithonographic -tithonometer -Tithonus -titi -Tyty -Titian -Titianesque -Titian-haired -Titianic -Titian-red -titians -Titicaca -titien -Tities -titilate -titillability -titillant -titillate -titillated -titillater -titillates -titillating -titillatingly -titillation -titillations -titillative -titillator -titillatory -Tityre-tu -titis -Tityus -titivate -titivated -titivates -titivating -titivation -titivator -titivil -titiviller -titlark -titlarks -title -title-bearing -titleboard -titled -title-deed -titledom -titleholder -title-holding -title-hunting -titleless -title-mad -titlene -title-page -titleproof -titler -titles -title-seeking -titleship -title-winning -titlike -titling -titlist -titlists -titmal -titmall -titman -Titmarsh -Titmarshian -titmen -titmice -titmmice -titmouse -Tito -Tyto -Titograd -Titoism -Titoist -titoki -Tytonidae -Titonka -Titos -titrable -titrant -titrants -titratable -titrate -titrated -titrates -titrating -titration -titrator -titrators -titre -titres -titrimetry -titrimetric -titrimetrically -tits -tit-tat-toe -titter -titteration -tittered -titterel -titterer -titterers -tittery -tittering -titteringly -titters -titter-totter -titty -tittie -titties -tittymouse -tittivate -tittivated -tittivating -tittivation -tittivator -tittle -tittlebat -tittler -tittles -tittle-tattle -tittle-tattled -tittle-tattler -tittle-tattling -tittlin -tittup -tittuped -tittupy -tittuping -tittupped -tittuppy -tittupping -tittups -titubancy -titubant -titubantly -titubate -titubation -titulado -titular -titulary -titularies -titularity -titularly -titulars -titulation -titule -tituli -titulus -tit-up -Titurel -Titus -Titusville -Tiu -tyum -Tyumen -Tiv -tiver -Tiverton -tivy -Tivoli -Tiw -Tiwaz -tiza -Tizes -tizeur -Tyzine -tizwin -tiz-woz -tizzy -tizzies -Tjaden -Tjader -tjaele -tjandi -tjanting -tjenkal -tji -Tjirebon -Tjon -tjosite -T-junction -tjurunga -tk -TKO -tkt -TL -TLA -tlaco -Tlakluit -Tlapallan -Tlascalan -Tlaxcala -TLB -TLC -Tlemcen -Tlemsen -Tlepolemus -Tletski -TLI -Tlingit -Tlingits -Tlinkit -Tlinkits -TLM -TLN -tlo -TLP -tlr -TLTP -TLV -TM -TMA -TMAC -T-man -TMDF -tmema -tmemata -T-men -tmeses -Tmesipteris -tmesis -tmh -TMIS -TMMS -TMO -TMP -TMR -TMRC -TMRS -TMS -TMSC -TMV -TN -TNB -TNC -TNDS -Tng -TNN -TNOP -TNPC -tnpk -TNT -T-number -TO -to- -toa -Toaalta -Toabaja -toad -toadback -toad-bellied -toad-blind -toadeat -toad-eat -toadeater -toad-eater -toadeating -toader -toadery -toadess -toadfish -toad-fish -toadfishes -toadflax -toad-flax -toadflaxes -toadflower -toad-frog -toad-green -toad-hating -toadhead -toad-housing -toady -toadied -toadier -toadies -toadying -toadyish -toadyism -toadyisms -toad-in-the-hole -toadish -toadyship -toadishness -toad-legged -toadless -toadlet -toadlike -toadlikeness -toadling -toadpipe -toadpipes -toadroot -toads -toad's -toad-shaped -toadship -toad's-mouth -toad-spotted -toadstone -toadstool -toadstoollike -toadstools -toad-swollen -toadwise -Toag -to-and-fro -to-and-fros -to-and-ko -Toano -toarcian -to-arrive -toast -toastable -toast-brown -toasted -toastee -toaster -toasters -toasty -toastier -toastiest -toastiness -toasting -toastmaster -toastmastery -toastmasters -toastmistress -toastmistresses -toasts -toat -toatoa -Tob -Tob. -Toba -tobacco -tobacco-abusing -tobacco-box -tobacco-breathed -tobaccoes -tobaccofied -tobacco-growing -tobaccoy -tobaccoism -tobaccoite -tobaccoless -tobaccolike -tobaccoman -tobaccomen -tobacconalian -tobacconing -tobacconist -tobacconistical -tobacconists -tobacconize -tobaccophil -tobacco-pipe -tobacco-plant -tobaccoroot -tobaccos -tobacco-sick -tobaccosim -tobacco-smoking -tobacco-stained -tobacco-stemming -Tobaccoville -tobaccoweed -tobaccowood -Toback -Tobago -Tobe -to-be -Tobey -Tobi -Toby -Tobiah -Tobias -Tobie -Tobye -Tobies -Tobyhanna -Toby-jug -Tobikhar -tobyman -tobymen -Tobin -tobine -Tobinsport -tobira -tobys -Tobit -toboggan -tobogganed -tobogganeer -tobogganer -tobogganing -tobogganist -tobogganists -toboggans -Tobol -Tobolsk -to-break -Tobruk -to-burst -TOC -tocalote -Tocantins -toccata -toccatas -toccate -toccatina -Tocci -Toccoa -Toccopola -toch -Tocharese -Tocharian -Tocharic -Tocharish -tocher -tochered -tochering -tocherless -tochers -tock -toco -toco- -Tocobaga -tocodynamometer -tocogenetic -tocogony -tocokinin -tocology -tocological -tocologies -tocologist -tocome -tocometer -tocopherol -tocophobia -tocororo -Tocsin -tocsins -toc-toc -tocusso -TOD -TO'd -Toda -today -to-day -todayish -todayll -today'll -todays -Todd -todder -Toddy -toddick -Toddie -toddies -toddyize -toddyman -toddymen -toddite -toddle -toddled -toddlekins -toddler -toddlers -toddles -toddling -Toddville -tode -Todea -todelike -Todhunter -tody -Todidae -todies -todlowrie -to-do -to-dos -to-draw -to-drive -TODS -Todt -Todus -toe -toea -toeboard -toecap -toecapped -toecaps -toed -toe-dance -toe-danced -toe-dancing -toe-drop -TOEFL -toehold -toeholds -toey -toe-in -toeing -toeless -toelike -toellite -toe-mark -toenail -toenailed -toenailing -toenails -toepiece -toepieces -toeplate -toeplates -toe-punch -toerless -toernebohmite -toes -toe's -toeshoe -toeshoes -toetoe -to-fall -toff -toffee -toffee-apple -toffeeman -toffee-nosed -toffees -Toffey -toffy -Toffic -toffies -toffyman -toffymen -toffing -toffish -toffs -Tofieldia -tofile -tofore -toforn -Toft -Tofte -tofter -toftman -toftmen -tofts -toftstead -tofu -tofus -tog -toga -togae -togaed -togalike -togas -togata -togate -togated -togawise -toged -togeman -together -togetherhood -togetheriness -togetherness -togethernesses -togethers -togged -toggel -togger -toggery -toggeries -togging -toggle -toggled -toggle-jointed -toggler -togglers -toggles -toggling -togless -Togliatti -Togo -Togoland -Togolander -Togolese -togs -togt -togt-rider -togt-riding -togue -togues -Toh -Tohatchi -toher -toheroa -toho -Tohome -tohubohu -tohu-bohu -tohunga -toi -TOY -Toyah -Toyahvale -Toyama -Toiboid -toydom -Toye -to-year -toyed -toyer -toyers -toyful -toyfulness -toyhouse -toying -toyingly -toyish -toyishly -toyishness -toil -toyland -toil-assuaging -toil-beaten -toil-bent -toile -toiled -toiler -toilers -toiles -toyless -toilet -toileted -toileting -toiletry -toiletries -toilets -toilet's -toilette -toiletted -toilettes -toiletware -toil-exhausted -toilful -toilfully -toil-hardened -toylike -toilinet -toilinette -toiling -toilingly -toilless -toillessness -toil-marred -toil-oppressed -toy-loving -toils -toilsome -toilsomely -toilsomeness -toil-stained -toil-stricken -toil-tried -toil-weary -toil-won -toilworn -toil-worn -toymaker -toymaking -toyman -toymen -Toynbee -Toinette -toyo -Toyohiko -toyon -toyons -toyos -Toyota -toyotas -Toyotomi -toys -toise -toisech -toised -toyshop -toy-shop -toyshops -toising -toy-sized -toysome -toison -toist -toit -toited -toity -toiting -toitish -toitoi -toytown -toits -toivel -Toivola -toywoman -toywort -Tojo -Tokay -tokays -tokamak -tokamaks -toke -toked -Tokeland -Tokelau -token -tokened -tokening -tokenism -tokenisms -tokenize -tokenless -token-money -tokens -token's -tokenworth -toker -tokers -tokes -Tokharian -toking -Tokio -Tokyo -Tokyoite -tokyoites -Toklas -toko -tokodynamometer -tokology -tokologies -tokoloshe -tokomak -tokomaks -tokonoma -tokonomas -tokopat -toktokje -tok-tokkie -Tokugawa -Tol -tol- -tola -tolamine -tolan -Toland -tolane -tolanes -tolans -Tolar -tolas -Tolbert -tolbooth -tolbooths -tolbutamide -told -tolderia -tol-de-rol -toldo -tole -toled -Toledan -Toledo -Toledoan -toledos -Toler -tolerability -tolerable -tolerableness -tolerably -tolerablish -tolerance -tolerances -tolerancy -tolerant -tolerantism -tolerantly -tolerate -tolerated -tolerates -tolerating -toleration -tolerationism -tolerationist -tolerations -tolerative -tolerator -tolerators -tolerism -toles -Toletan -toleware -tolfraedic -tolguacha -Tolyatti -tolidin -tolidine -tolidines -tolidins -tolyl -tolylene -tolylenediamine -tolyls -Tolima -toling -tolipane -Tolypeutes -tolypeutine -tolite -Tolkan -Toll -tollable -tollage -tollages -Tolland -tollbar -tollbars -tollbook -toll-book -tollbooth -tollbooths -toll-dish -tolled -tollefsen -Tolley -tollent -Toller -tollery -tollers -Tollesboro -Tolleson -toll-free -tollgate -tollgates -tollgatherer -toll-gatherer -tollhall -tollhouse -toll-house -tollhouses -tolly -tollies -tolliker -tolling -Tolliver -tollkeeper -Tollman -Tollmann -tollmaster -tollmen -tol-lol -tol-lol-de-rol -tol-lol-ish -tollon -tollpenny -tolls -tolltaker -tollway -tollways -Tolmach -Tolman -Tolmann -tolmen -Tolna -Tolono -Tolowa -tolpatch -tolpatchery -tolsey -tolsel -tolsester -Tolstoy -Tolstoyan -Tolstoyism -Tolstoyist -tolt -Toltec -Toltecan -Toltecs -tolter -Tolu -tolu- -tolualdehyde -toluate -toluates -Toluca -toluene -toluenes -toluic -toluid -toluide -toluides -toluidide -toluidin -toluidine -toluidino -toluidins -toluido -toluids -Toluifera -toluyl -toluylene -toluylenediamine -toluylic -toluyls -Tolumnius -tolunitrile -toluol -toluole -toluoles -toluols -toluquinaldine -tolus -tolusafranine -tolutation -tolzey -Tom -Toma -Tomah -Tomahawk -tomahawked -tomahawker -tomahawking -tomahawks -tomahawk's -Tomales -tomalley -tomalleys -toman -tomand -Tom-and-jerry -Tom-and-jerryism -tomans -Tomas -Tomasina -Tomasine -Tomaso -Tomasz -tomatillo -tomatilloes -tomatillos -tomato -tomato-colored -tomatoey -tomatoes -tomato-growing -tomato-leaf -tomato-washing -tom-ax -tomb -tombac -tomback -tombacks -tombacs -tombak -tombaks -tombal -Tombalbaye -Tomball -Tombaugh -tomb-bat -tomb-black -tomb-breaker -tomb-dwelling -tombe -Tombean -tombed -tombic -Tombigbee -tombing -tombless -tomblet -tomblike -tomb-making -tomboy -tomboyful -tomboyish -tomboyishly -tomboyishness -tomboyism -tomboys -tombola -tombolas -tombolo -tombolos -Tombouctou -tomb-paved -tomb-robbing -tombs -tomb's -tombstone -tombstones -tomb-strewn -tomcat -tomcats -tomcatted -tomcatting -Tomchay -tomcod -tom-cod -tomcods -Tom-come-tickle-me -tome -tomeful -tomelet -toment -tomenta -tomentose -tomentous -tomentulose -tomentum -tomes -tomfool -tom-fool -tomfoolery -tomfooleries -tomfoolish -tomfoolishness -tomfools -Tomi -tomy -tomia -tomial -tomin -tomines -tomish -Tomistoma -tomium -tomiumia -tomjohn -tomjon -Tomkiel -Tomkin -Tomkins -Tomlin -Tomlinson -Tommaso -Tomme -tommed -Tommer -Tommi -Tommy -tommy-axe -tommybag -tommycod -Tommie -Tommye -tommies -tommy-gun -Tomming -tommyrot -tommyrots -tomnoddy -tom-noddy -tomnorry -tomnoup -tomogram -tomograms -tomograph -tomography -tomographic -tomographies -Tomoyuki -tomolo -tomomania -Tomonaga -Tomopteridae -Tomopteris -tomorn -to-morn -tomorrow -to-morrow -tomorrower -tomorrowing -tomorrowness -tomorrows -tomosis -Tompion -tompions -tompiper -Tompkins -Tompkinsville -tompon -tomrig -TOMS -Tomsbrook -Tomsk -tomtate -tomtit -tom-tit -Tomtitmouse -tomtits -tom-toe -tom-tom -tom-trot -ton -tonada -tonal -tonalamatl -Tonalea -tonalist -tonalite -tonality -tonalities -tonalitive -tonally -tonalmatl -to-name -tonant -Tonasket -tonation -Tonawanda -Tonbridge -tondi -tondino -tondo -tondos -tone -tonearm -tonearms -toned -tone-deaf -tonedeafness -tone-full -Toney -tonelada -toneladas -toneless -tonelessly -tonelessness -toneme -tonemes -tonemic -tone-producing -toneproof -toner -toners -tones -tone-setter -tonetic -tonetically -tonetician -tonetics -tonette -tonettes -tone-up -ton-foot -ton-force -tong -Tonga -Tongan -Tonganoxie -Tongas -tonged -tonger -tongers -tonging -tongkang -Tongking -tongman -tongmen -Tongrian -tongs -tongsman -tongsmen -Tongue -tongue-back -tongue-baited -tongue-bang -tonguebird -tongue-bitten -tongue-blade -tongue-bound -tonguecraft -tongued -tonguedoughty -tongue-dumb -tonguefence -tonguefencer -tonguefish -tonguefishes -tongueflower -tongue-flowered -tongue-free -tongue-front -tongueful -tonguefuls -tongue-garbled -tongue-gilt -tongue-graft -tongue-haltered -tongue-hammer -tonguey -tongue-jangling -tongue-kill -tongue-lash -tongue-lashing -tongue-leaved -tongueless -tonguelessness -tonguelet -tonguelike -tongue-lolling -tongueman -tonguemanship -tonguemen -tongue-murdering -tongue-pad -tongueplay -tongue-point -tongueproof -tongue-puissant -tonguer -tongues -tongue-shaped -tongueshot -tonguesman -tonguesore -tonguester -tongue-tack -tongue-taming -tongue-taw -tongue-tie -tongue-tied -tongue-tier -tonguetip -tongue-valiant -tongue-wagging -tongue-walk -tongue-wanton -tonguy -tonguiness -tonguing -tonguings -Toni -Tony -tonia -Tonya -tonic -Tonica -tonical -tonically -tonicity -tonicities -tonicize -tonicked -tonicking -tonicobalsamic -tonicoclonic -tonicostimulant -tonics -tonic's -Tonie -Tonye -tonier -Tonies -toniest -tonify -tonight -to-night -tonights -tonyhoop -Tonikan -Tonina -toning -tonish -tonishly -tonishness -tonite -tonitrocirrus -tonitrophobia -tonitrual -tonitruant -tonitruone -tonitruous -Tonjes -tonjon -tonk -tonka -Tonkawa -Tonkawan -ton-kilometer -Tonkin -Tonkinese -Tonking -Tonl -tonlet -tonlets -ton-mile -ton-mileage -tonn -Tonna -tonnage -tonnages -tonne -tonneau -tonneaued -tonneaus -tonneaux -tonnelle -tonner -tonners -tonnes -Tonneson -Tonnie -Tonnies -tonnish -tonnishly -tonnishness -tonnland -tono- -tonoclonic -tonogram -tonograph -tonology -tonological -tonometer -tonometry -tonometric -Tonopah -tonophant -tonoplast -tonoscope -tonotactic -tonotaxis -tonous -Tonry -tons -ton's -tonsbergite -tonsil -tonsilar -tonsile -tonsilectomy -tonsilitic -tonsilitis -tonsill- -tonsillar -tonsillary -tonsillectome -tonsillectomy -tonsillectomic -tonsillectomies -tonsillectomize -tonsillith -tonsillitic -tonsillitis -tonsillitises -tonsillolith -tonsillotome -tonsillotomy -tonsillotomies -tonsilomycosis -tonsils -tonsor -tonsorial -tonsurate -tonsure -tonsured -tonsures -tonsuring -tontine -tontiner -tontines -Tontitown -Tonto -Tontobasin -Tontogany -ton-up -tonus -tonuses -too -too-aged -too-anxious -tooart -too-big -too-bigness -too-bold -too-celebrated -too-coy -too-confident -too-dainty -too-devoted -toodle -toodleloodle -toodle-oo -too-early -too-earnest -Tooele -too-familiar -too-fervent -too-forced -Toogood -too-good -too-hectic -too-young -TOOIS -took -Tooke -tooken -tool -toolach -too-large -too-late -too-lateness -too-laudatory -toolbox -toolboxes -toolbuilder -toolbuilding -tool-cleaning -tool-cutting -tool-dresser -tool-dressing -Toole -tooled -Tooley -tooler -toolers -toolhead -toolheads -toolholder -toolholding -toolhouse -tooling -toolings -Toolis -toolkit -toolless -toolmake -toolmaker -tool-maker -toolmakers -toolmaking -toolman -toolmark -toolmarking -toolmen -too-long -toolplate -toolroom -toolrooms -tools -toolsetter -tool-sharpening -toolshed -toolsheds -toolsi -toolsy -toolslide -toolsmith -toolstock -toolstone -tool-using -toom -Toomay -Toombs -Toomin -toomly -Toomsboro -Toomsuba -too-much -too-muchness -toon -Toona -Toone -too-near -toons -toonwood -too-old -toop -too-patient -too-piercing -too-proud -Toor -toorie -too-ripe -toorock -tooroo -toosh -too-short -toosie -too-soon -too-soonness -toot -tooted -tooter -tooters -tooth -toothache -toothaches -toothachy -toothaching -toothbill -tooth-billed -tooth-bred -toothbrush -tooth-brush -toothbrushes -toothbrushy -toothbrushing -toothbrush's -tooth-chattering -toothchiseled -toothcomb -toothcup -toothdrawer -tooth-drawer -toothdrawing -toothed -toothed-billed -toother -tooth-extracting -toothflower -toothful -toothy -toothier -toothiest -toothily -toothill -toothing -toothy-peg -tooth-leaved -toothless -toothlessly -toothlessness -toothlet -toothleted -toothlike -tooth-marked -toothpaste -toothpastes -toothpick -toothpicks -toothpick's -toothplate -toothpowder -toothproof -tooth-pulling -tooth-rounding -tooths -tooth-set -tooth-setting -tooth-shaped -toothshell -tooth-shell -toothsome -toothsomely -toothsomeness -toothstick -tooth-tempting -toothwash -tooth-winged -toothwork -toothwort -too-timely -tooting -tootinghole -tootle -tootled -tootler -tootlers -tootles -tootling -tootlish -tootmoot -too-too -too-trusting -toots -tootses -tootsy -Tootsie -tootsies -tootsy-wootsy -tootsy-wootsies -too-willing -too-wise -Toowoomba -toozle -toozoo -TOP -top- -topaesthesia -topalgia -Topanga -toparch -toparchy -toparchia -toparchiae -toparchical -toparchies -top-armor -topas -topass -topato -Topatopa -topau -Topawa -topaz -topaz-colored -Topaze -topazes -topazfels -topaz-green -topazy -topaz-yellow -topazine -topazite -topazolite -topaz-tailed -topaz-throated -topaz-tinted -top-boot -topcap -top-cap -topcast -topcastle -top-castle -topchrome -topcoat -top-coated -topcoating -topcoats -topcross -top-cross -topcrosses -top-cutter -top-dog -top-drain -top-drawer -topdress -top-dress -topdressing -top-dressing -tope -topechee -topectomy -topectomies -toped -topee -topees -topeewallah -Topeka -Topelius -topeng -topepo -toper -toperdom -topers -toper's-plant -topes -topesthesia -topfilled -topflight -top-flight -topflighter -topful -topfull -top-full -topgallant -top-graft -toph -tophaceous -tophaike -tophamper -top-hamper -top-hampered -top-hand -top-hat -top-hatted -tophe -top-heavy -top-heavily -top-heaviness -tophes -Tophet -Topheth -tophetic -tophetical -tophetize -tophi -tophyperidrosis -top-hole -tophous -tophphi -tophs -tophus -topi -topia -topiary -topiaria -topiarian -topiaries -topiarist -topiarius -topic -topical -topicality -topicalities -topically -TOPICS -topic's -Topinabee -topinambou -toping -Topinish -topis -topiwala -Top-kapu -topkick -topkicks -topknot -topknots -topknotted -TOPLAS -topless -toplessness -top-level -Topliffe -toplighted -toplike -topline -topliner -top-lit -toplofty -toploftical -toploftier -toploftiest -toploftily -toploftiness -topmaker -topmaking -topman -topmast -topmasts -topmaul -topmen -topminnow -topminnows -topmost -topmostly -topnet -topnotch -top-notch -topnotcher -topo -topo- -topoalgia -topocentric -topochemical -topochemistry -Topock -topodeme -topog -topog. -topognosia -topognosis -topograph -topographer -topographers -topography -topographic -topographical -topographically -topographico-mythical -topographics -topographies -topographist -topographize -topographometric -topoi -topolatry -topology -topologic -topological -topologically -topologies -topologist -topologize -toponarcosis -Toponas -toponeural -toponeurosis -toponym -toponymal -toponymy -toponymic -toponymical -toponymics -toponymies -toponymist -toponymous -toponyms -topophobia -topophone -topopolitan -topos -topotactic -topotaxis -topotype -topotypes -topotypic -topotypical -top-over-tail -topped -Toppenish -Topper -toppers -toppy -toppiece -top-piece -Topping -toppingly -toppingness -topping-off -toppings -topple -toppled -toppler -topples -topply -toppling -toprail -top-rank -top-ranking -toprope -TOPS -topsail -topsailite -topsails -topsail-tye -top-sawyer -top-secret -top-set -top-sew -Topsfield -Topsham -top-shaped -top-shell -Topsy -topside -topsider -topsiders -topsides -Topsy-fashion -topsyturn -topsy-turn -topsy-turnness -topsy-turvy -topsy-turvical -topsy-turvydom -topsy-turvies -topsy-turvify -topsy-turvification -topsy-turvifier -topsy-turvyhood -topsy-turvyism -topsy-turvyist -topsy-turvyize -topsy-turvily -topsyturviness -topsy-turviness -topsl -topsman -topsmelt -topsmelts -topsmen -topsoil -topsoiled -topsoiling -topsoils -topspin -topspins -topssmelt -topstitch -topstone -top-stone -topstones -topswarm -toptail -top-timber -Topton -topwise -topwork -top-work -topworked -topworking -topworks -toque -Toquerville -toques -toquet -toquets -toquilla -Tor -Tora -Torah -torahs -Toraja -toral -toran -torana -toras -Torbay -torbanite -torbanitic -Torbart -torbernite -Torbert -torc -torcel -torch -torchbearer -torch-bearer -torchbearers -torchbearing -torched -torcher -torchere -torcheres -torches -torchet -torch-fish -torchy -torchier -torchiers -torchiest -torching -torchless -torchlight -torch-light -torchlighted -torchlights -torchlike -torchlit -torchman -torchon -torchons -torch's -torchweed -torchwood -torch-wood -torchwort -torcs -torcular -torculus -Tordesillas -tordion -tordrillite -Tore -toreador -toreadors -tored -Torey -Torelli -to-rend -Torenia -torero -toreros -TORES -toret -toreumatography -toreumatology -toreutic -toreutics -torfaceous -torfel -torfle -torgoch -Torgot -Torhert -Tori -Tory -toric -Torydom -Torie -Tories -Toryess -Toriest -Toryfy -Toryfication -Torified -to-rights -Tory-hating -toryhillite -torii -Tory-irish -Toryish -Toryism -Toryistic -Toryize -Tory-leaning -Torilis -Torin -Torinese -Toriness -Torino -Tory-radical -Tory-ridden -tory-rory -Toryship -Tory-voiced -toryweed -torma -tormae -tormen -torment -tormenta -tormentable -tormentation -tormentative -tormented -tormentedly -tormenter -tormenters -tormentful -tormentil -tormentilla -tormenting -tormentingly -tormentingness -tormentive -tormentor -tormentors -tormentous -tormentress -tormentry -torments -tormentum -tormina -torminal -torminous -tormodont -Tormoria -torn -tornachile -tornada -tornade -tornadic -tornado -tornado-breeding -tornadoes -tornadoesque -tornado-haunted -tornadolike -tornadoproof -tornados -tornado-swept -tornal -tornaria -tornariae -tornarian -tornarias -torn-down -torney -tornese -tornesi -tornilla -Tornillo -tornillos -Tornit -tornote -tornus -toro -toroid -toroidal -toroidally -toroids -torolillo -Toromona -toronja -Toronto -Torontonian -tororokombu -tororo-konbu -tororo-kubu -toros -Torosaurus -torose -Torosian -torosity -torosities -torot -toroth -torotoro -torous -Torp -torpedineer -Torpedinidae -torpedinous -torpedo -torpedo-boat -torpedoed -torpedoer -torpedoes -torpedoing -torpedoist -torpedolike -torpedoman -torpedomen -torpedoplane -torpedoproof -torpedos -torpedo-shaped -torpent -torpescence -torpescent -torpex -torpid -torpidity -torpidities -torpidly -torpidness -torpids -torpify -torpified -torpifying -torpitude -torpor -torporific -torporize -torpors -Torquay -torquate -torquated -Torquato -torque -torqued -Torquemada -torquer -torquers -torques -torqueses -torquing -Torr -Torray -Torrance -Torras -Torre -torrefacation -torrefaction -torrefy -torrefication -torrefied -torrefies -torrefying -Torrey -Torreya -Torrell -Torrence -Torrens -torrent -torrent-bitten -torrent-borne -torrent-braving -torrent-flooded -torrentful -torrentfulness -torrential -torrentiality -torrentially -torrentine -torrentless -torrentlike -torrent-mad -torrents -torrent's -torrent-swept -torrentuous -torrentwise -Torreon -Torres -torret -Torry -Torricelli -Torricellian -torrid -torrider -torridest -torridity -torridly -torridness -Torridonian -Torrie -torrify -torrified -torrifies -torrifying -Torrin -Torrington -Torrlow -torrone -Torrubia -Torruella -tors -torsade -torsades -torsalo -torse -torsel -torses -torsi -torsibility -torsigraph -torsile -torsimeter -torsiogram -torsiograph -torsiometer -torsion -torsional -torsionally -torsioning -torsionless -torsions -torsive -torsk -torsks -torso -torsoclusion -torsoes -torsometer -torsoocclusion -torsos -torsten -tort -torta -tortays -Torte -torteau -torteaus -torteaux -Tortelier -tortellini -torten -tortes -tortfeasor -tort-feasor -tortfeasors -torticollar -torticollis -torticone -tortie -tortil -tortile -tortility -tortilla -tortillas -tortille -tortillions -tortillon -tortious -tortiously -tortis -tortive -Torto -tortoise -tortoise-core -tortoise-footed -tortoise-headed -tortoiselike -tortoise-paced -tortoise-rimmed -tortoise-roofed -tortoises -tortoise's -tortoise-shaped -tortoiseshell -tortoise-shell -Tortola -tortoni -Tortonian -tortonis -tortor -Tortosa -tortrices -tortricid -Tortricidae -Tortricina -tortricine -tortricoid -Tortricoidea -Tortrix -tortrixes -torts -tortue -Tortuga -tortula -Tortulaceae -tortulaceous -tortulous -tortuose -tortuosity -tortuosities -tortuous -tortuously -tortuousness -torturable -torturableness -torture -tortured -torturedly -tortureproof -torturer -torturers -tortures -torturesome -torturesomeness -torturing -torturingly -torturous -torturously -torturousness -Toru -torula -torulaceous -torulae -torulaform -torulas -toruli -toruliform -torulin -toruloid -torulose -torulosis -torulous -torulus -Torun -torus -toruses -torus's -torve -torvid -torvity -torvous -TOS -tosaphist -tosaphoth -Tosca -Toscana -Toscanini -toscanite -Toscano -Tosch -Tosephta -Tosephtas -tosh -toshakhana -tosher -toshery -toshes -toshy -Toshiba -Toshiko -toshly -toshnail -tosh-up -tosy -to-side -tosily -Tosk -Toskish -toss -tossed -tosser -tossers -tosses -tossy -tossicated -tossily -tossing -tossing-in -tossingly -tossment -tosspot -tosspots -tossup -toss-up -tossups -tossut -tost -tostada -tostadas -tostado -tostados -tostamente -tostao -tosticate -tosticated -tosticating -tostication -Toston -tot -totable -total -totaled -totaling -totalisator -totalise -totalised -totalises -totalising -totalism -totalisms -totalist -totalistic -totalitarian -totalitarianism -totalitarianisms -totalitarianize -totalitarianized -totalitarianizing -totalitarians -totality -totalities -totality's -totalitizer -totalization -totalizator -totalizators -totalize -totalized -totalizer -totalizes -totalizing -totalled -totaller -totallers -totally -totalling -totalness -totals -totanine -Totanus -totaquin -totaquina -totaquine -totara -totchka -tote -to-tear -toted -toteload -totem -totemy -totemic -totemically -totemism -totemisms -totemist -totemistic -totemists -totemite -totemites -totemization -totems -toter -totery -toters -totes -Toth -tother -t'other -toty -toti- -totient -totyman -toting -Totipalmatae -totipalmate -totipalmation -totipotence -totipotency -totipotencies -totipotent -totipotential -totipotentiality -totitive -Totleben -toto -toto- -totoaba -Totonac -Totonacan -Totonaco -totora -Totoro -Totowa -totquot -tots -totted -totten -Tottenham -totter -tottered -totterer -totterers -tottergrass -tottery -totteriness -tottering -totteringly -totterish -totters -totty -Tottie -tottyhead -totty-headed -totting -tottle -tottlish -tottum -totuava -totum -Totz -tou -touareg -touart -Touber -toucan -toucanet -Toucanid -toucans -touch -touch- -touchability -touchable -touchableness -touch-and-go -touchback -touchbacks -touchbell -touchbox -touch-box -touchdown -touchdowns -touche -touched -touchedness -toucher -touchers -touches -Touchet -touchhole -touch-hole -touchy -touchier -touchiest -touchily -touchiness -touching -touchingly -touchingness -touch-in-goal -touchless -touchline -touch-line -touchmark -touch-me-not -touch-me-not-ish -touchous -touchpan -touch-paper -touchpiece -touch-piece -touch-powder -touchstone -touchstones -touch-tackle -touch-type -touchup -touch-up -touchups -touchwood -toufic -toug -Tougaloo -Touggourt -tough -tough-backed -toughed -toughen -toughened -toughener -tougheners -toughening -toughens -tougher -toughest -tough-fibered -tough-fisted -tough-handed -toughhead -toughhearted -toughy -toughie -toughies -toughing -toughish -Toughkenamon -toughly -tough-lived -tough-looking -tough-metaled -tough-minded -tough-mindedly -tough-mindedness -tough-muscled -toughness -toughnesses -toughra -toughs -tough-shelled -tough-sinewed -tough-skinned -tought -tough-thonged -Toul -tould -Toulon -Toulouse -Toulouse-Lautrec -toumnah -Tounatea -Tound -toup -toupee -toupeed -toupees -toupet -Tour -touraco -touracos -Touraine -Tourane -tourbe -tourbillion -tourbillon -Tourcoing -Toure -toured -tourelle -tourelles -tourer -tourers -touret -tourette -touring -tourings -tourism -tourisms -tourist -tourist-crammed -touristdom -tourist-haunted -touristy -touristic -touristical -touristically -tourist-infested -tourist-laden -touristproof -touristry -tourist-ridden -tourists -tourist's -touristship -tourist-trodden -tourize -tourmalin -tourmaline -tourmalinic -tourmaliniferous -tourmalinization -tourmalinize -tourmalite -tourmente -tourn -Tournai -Tournay -tournament -tournamental -tournaments -tournament's -tournant -tournasin -tourne -tournedos -tournee -Tournefortia -Tournefortian -tourney -tourneyed -tourneyer -tourneying -tourneys -tournel -tournette -Tourneur -tourniquet -tourniquets -tournois -tournure -Tours -tourt -tourte -tousche -touse -toused -tousel -touser -touses -tousy -tousing -tousle -tousled -tousles -tous-les-mois -tously -tousling -toust -toustie -tout -touted -touter -touters -touting -Toutle -touts -touzle -touzled -touzles -touzling -tov -Tova -tovah -tovar -Tovaria -Tovariaceae -tovariaceous -tovarich -tovariches -tovarisch -tovarish -tovarishes -Tove -Tovey -tovet -TOW -towability -towable -Towaco -towage -towages -towai -towan -Towanda -Towaoc -toward -towardly -towardliness -towardness -towards -towaway -towaways -towbar -Towbin -towboat -towboats -towcock -tow-colored -tow-coloured -towd -towdie -towed -towel -toweled -towelette -toweling -towelings -towelled -towelling -towelry -towels -Tower -tower-bearing -tower-capped -tower-crested -tower-crowned -tower-dwelling -towered -tower-encircled -tower-flanked -tower-high -towery -towerier -toweriest -towering -toweringly -toweringness -towerless -towerlet -towerlike -towerman -towermen -tower-mill -towerproof -tower-razing -Towers -tower-shaped -tower-studded -tower-supported -tower-tearing -towerwise -towerwork -towerwort -tow-feeder -towght -tow-haired -towhead -towheaded -tow-headed -towheads -towhee -towhees -towy -towie -towies -Towill -towing -towkay -Towland -towlike -towline -tow-line -towlines -tow-made -towmast -towmond -towmonds -towmont -towmonts -Town -town-absorbing -town-born -town-bound -town-bred -town-clerk -town-cress -town-dotted -town-dwelling -Towne -towned -townee -townees -Towney -town-end -Towner -Townes -townet -tow-net -tow-netter -tow-netting -townfaring -town-flanked -townfolk -townfolks -town-frequenting -townful -towngate -town-girdled -town-goer -town-going -townhome -townhood -townhouse -town-house -townhouses -Towny -Townie -townies -townify -townified -townifying -town-imprisoned -towniness -townish -townishly -townishness -townist -town-keeping -town-killed -townland -Townley -townless -townlet -townlets -townly -townlike -townling -town-living -town-looking -town-loving -town-made -town-major -townman -town-meeting -townmen -town-pent -town-planning -towns -town's -townsboy -townscape -Townsend -townsendi -Townsendia -Townsendite -townsfellow -townsfolk -Townshend -township -townships -township's -town-sick -townside -townsite -townsman -townsmen -townspeople -Townsville -townswoman -townswomen -town-talk -town-tied -town-trained -Townville -townward -townwards -townwear -town-weary -townwears -towpath -tow-path -towpaths -tow-pung -Towrey -Towroy -towrope -tow-rope -towropes -tow-row -tows -towser -towsy -Towson -tow-spinning -towzie -tox -tox- -tox. -toxa -toxaemia -toxaemias -toxaemic -toxalbumic -toxalbumin -toxalbumose -toxamin -toxanaemia -toxanemia -toxaphene -toxcatl -Toxey -toxemia -toxemias -toxemic -Toxeus -toxic -toxic- -toxicaemia -toxical -toxically -toxicant -toxicants -toxicarol -toxicate -toxication -toxicemia -toxicity -toxicities -toxico- -toxicodendrol -Toxicodendron -toxicoderma -toxicodermatitis -toxicodermatosis -toxicodermia -toxicodermitis -toxicogenic -toxicognath -toxicohaemia -toxicohemia -toxicoid -toxicol -toxicology -toxicologic -toxicological -toxicologically -toxicologist -toxicologists -toxicomania -toxicon -toxicopathy -toxicopathic -toxicophagy -toxicophagous -toxicophidia -toxicophobia -toxicoses -toxicosis -toxicotraumatic -toxicum -toxidermic -toxidermitis -toxifer -Toxifera -toxiferous -toxify -toxified -toxifying -toxigenic -toxigenicity -toxigenicities -toxihaemia -toxihemia -toxiinfection -toxiinfectious -Toxylon -toxin -toxinaemia -toxin-anatoxin -toxin-antitoxin -toxine -toxinemia -toxines -toxinfection -toxinfectious -toxinosis -toxins -toxiphagi -toxiphagus -toxiphobia -toxiphobiac -toxiphoric -toxitabellae -toxity -toxo- -Toxodon -toxodont -Toxodontia -toxogenesis -Toxoglossa -toxoglossate -toxoid -toxoids -toxolysis -toxology -toxon -toxone -toxonosis -toxophil -toxophile -toxophily -toxophilism -toxophilite -toxophilitic -toxophilitism -toxophilous -toxophobia -toxophoric -toxophorous -toxoplasma -toxoplasmic -toxoplasmosis -toxosis -toxosozin -Toxostoma -toxotae -Toxotes -Toxotidae -toze -tozee -tozer -TP -TP0 -TP4 -TPC -tpd -TPE -tph -TPI -tpk -tpke -TPM -TPMP -TPN -TPO -Tpr -TPS -TPT -TQC -TR -tr. -tra -trabacoli -trabacolo -trabacolos -trabal -trabant -trabascolo -trabea -trabeae -trabeatae -trabeate -trabeated -trabeation -trabecula -trabeculae -trabecular -trabecularism -trabeculas -trabeculate -trabeculated -trabeculation -trabecule -trabes -trabu -trabuch -trabucho -trabuco -trabucos -Trabue -Trabzon -TRAC -Tracay -tracasserie -tracasseries -Tracaulon -Trace -traceability -traceable -traceableness -traceably -traceback -trace-bearer -traced -Tracee -trace-galled -trace-high -Tracey -traceless -tracelessly -tracer -tracery -traceried -traceries -tracers -traces -trache- -trachea -tracheae -tracheaectasy -tracheal -trachealgia -trachealis -trachean -tracheary -Trachearia -trachearian -tracheas -Tracheata -tracheate -tracheated -tracheation -trachecheae -trachecheas -tracheid -tracheidal -tracheide -tracheids -tracheitis -trachelagra -trachelate -trachelectomy -trachelectomopexia -trachelia -trachelismus -trachelitis -trachelium -trachelo- -tracheloacromialis -trachelobregmatic -trachelocyllosis -tracheloclavicular -trachelodynia -trachelology -trachelomastoid -trachelo-occipital -trachelopexia -tracheloplasty -trachelorrhaphy -tracheloscapular -Trachelospermum -trachelotomy -trachenchyma -tracheo- -tracheobronchial -tracheobronchitis -tracheocele -tracheochromatic -tracheoesophageal -tracheofissure -tracheolar -tracheolaryngeal -tracheolaryngotomy -tracheole -tracheolingual -tracheopathy -tracheopathia -tracheopharyngeal -tracheophyte -Tracheophonae -tracheophone -tracheophonesis -tracheophony -tracheophonine -tracheopyosis -tracheoplasty -tracheorrhagia -tracheoschisis -tracheoscopy -tracheoscopic -tracheoscopist -tracheostenosis -tracheostomy -tracheostomies -tracheotome -tracheotomy -tracheotomies -tracheotomist -tracheotomize -tracheotomized -tracheotomizing -tracherous -tracherously -trachy- -trachyandesite -trachybasalt -trachycarpous -Trachycarpus -trachychromatic -trachydolerite -trachyglossate -trachile -Trachylinae -trachyline -Trachymedusae -trachymedusan -Trachiniae -Trachinidae -trachinoid -Trachinus -trachyphonia -trachyphonous -Trachypteridae -trachypteroid -Trachypterus -trachyspermous -trachyte -trachytes -trachytic -trachitis -trachytoid -trachle -trachled -trachles -trachling -Trachodon -trachodont -trachodontid -Trachodontidae -Trachoma -trachomas -trachomatous -Trachomedusae -trachomedusan -Traci -Tracy -Tracie -tracing -tracingly -tracings -Tracyton -track -track- -trackable -trackage -trackages -track-and-field -trackbarrow -track-clearing -tracked -tracker -trackers -trackhound -tracking -trackings -trackingscout -tracklayer -tracklaying -track-laying -trackless -tracklessly -tracklessness -trackman -trackmanship -trackmaster -trackmen -track-mile -trackpot -tracks -trackscout -trackshifter -tracksick -trackside -tracksuit -trackway -trackwalker -track-walking -trackwork -traclia -Tract -tractability -tractabilities -tractable -tractableness -tractably -Tractarian -Tractarianism -tractarianize -tractate -tractates -tractation -tractator -tractatule -tractellate -tractellum -tractiferous -tractile -tractility -traction -tractional -tractioneering -traction-engine -tractions -tractism -Tractite -tractitian -tractive -tractlet -tractor -tractoration -tractory -tractorism -tractorist -tractorization -tractorize -tractors -tractor's -tractor-trailer -tractrices -tractrix -tracts -tract's -tractus -trad -tradable -tradal -trade -tradeable -trade-bound -tradecraft -traded -trade-destroying -trade-facilitating -trade-fallen -tradeful -trade-gild -trade-in -trade-laden -trade-last -tradeless -trade-made -trademark -trade-mark -trademarked -trade-marker -trademarking -trademarks -trademark's -trademaster -tradename -tradeoff -trade-off -tradeoffs -trader -traders -tradership -trades -Tradescantia -trade-seeking -tradesfolk -tradesman -tradesmanlike -tradesmanship -tradesmanwise -tradesmen -tradespeople -tradesperson -trades-union -trades-unionism -trades-unionist -tradeswoman -tradeswomen -trade-union -trade-unionism -trade-unionist -tradevman -trade-wind -trady -tradiment -trading -tradite -tradition -traditional -traditionalism -traditionalist -traditionalistic -traditionalists -traditionality -traditionalize -traditionalized -traditionally -traditionary -traditionaries -traditionarily -traditionate -traditionately -tradition-bound -traditioner -tradition-fed -tradition-following -traditionism -traditionist -traditionitis -traditionize -traditionless -tradition-making -traditionmonger -tradition-nourished -tradition-ridden -traditions -tradition's -traditious -traditive -traditor -traditores -traditorship -traduce -traduced -traducement -traducements -traducent -traducer -traducers -traduces -traducian -traducianism -traducianist -traducianistic -traducible -traducing -traducingly -traduct -traduction -traductionist -traductive -Traer -Trafalgar -traffic -trafficability -trafficable -trafficableness -trafficator -traffic-bearing -traffic-choked -traffic-congested -traffic-furrowed -traffick -trafficked -trafficker -traffickers -trafficker's -trafficking -trafficks -traffic-laden -trafficless -traffic-mile -traffic-regulating -traffics -traffic's -traffic-thronged -trafficway -trafflicker -trafflike -Trafford -trag -tragacanth -tragacantha -tragacanthin -tragal -Tragasol -tragedy -tragedial -tragedian -tragedianess -tragedians -tragedical -tragedienne -tragediennes -tragedies -tragedietta -tragedious -tragedy-proof -tragedy's -tragedist -tragedization -tragedize -tragelaph -tragelaphine -Tragelaphus -Trager -tragi -tragi- -tragia -tragic -tragical -tragicality -tragically -tragicalness -tragicaster -tragic-comedy -tragicize -tragicly -tragicness -tragicofarcical -tragicoheroicomic -tragicolored -tragicomedy -tragi-comedy -tragicomedian -tragicomedies -tragicomic -tragi-comic -tragicomical -tragicomicality -tragicomically -tragicomipastoral -tragicoromantic -tragicose -tragics -tragion -tragions -tragoedia -tragopan -tragopans -Tragopogon -tragule -Tragulidae -Tragulina -traguline -traguloid -Traguloidea -Tragulus -tragus -trah -traheen -Trahern -Traherne -trahison -Trahurn -Tray -trayful -trayfuls -traik -traiked -traiky -traiking -traiks -trail -trailbaston -trailblaze -trailblazer -trailblazers -trailblazing -trailboard -trailbreaker -trailed -trail-eye -trailer -trailerable -trailered -trailery -trailering -trailerist -trailerite -trailerload -trailers -trailership -trailhead -traily -traylike -trailiness -trailing -trailingly -trailing-point -trailings -trailless -trailmaker -trailmaking -trailman -trail-marked -trails -trailside -trailsman -trailsmen -trailway -trail-weary -trail-wise -traymobile -train -trainability -trainable -trainableness -trainage -trainagraph -trainant -trainante -trainband -trainbearer -trainboy -trainbolt -train-dispatching -trayne -traineau -trained -trainee -trainees -trainee's -traineeship -trainel -Trainer -trainer-bomber -trainer-fighter -trainers -trainful -trainfuls -train-giddy -trainy -training -trainings -trainless -train-lighting -trainline -trainload -trainloads -trainman -trainmaster -trainmen -train-mile -Trainor -trainpipe -trains -trainshed -trainsick -trainsickness -trainster -traintime -trainway -trainways -traipse -traipsed -traipses -traipsing -trays -tray's -tray-shaped -traist -trait -trait-complex -traiteur -traiteurs -traitless -traitor -traitoress -traitorhood -traitory -traitorism -traitorize -traitorly -traitorlike -traitorling -traitorous -traitorously -traitorousness -traitors -traitor's -traitorship -traitorwise -traitress -traitresses -traits -trait's -Trajan -traject -trajected -trajectile -trajecting -trajection -trajectitious -trajectory -trajectories -trajectory's -trajects -trajet -Trakas -tra-la -tra-la-la -tralatician -tralaticiary -tralatition -tralatitious -tralatitiously -Tralee -tralineate -tralira -Tralles -Trallian -tralucency -tralucent -tram -trama -tramal -tram-borne -tramcar -tram-car -tramcars -trame -tramel -trameled -trameling -tramell -tramelled -tramelling -tramells -tramels -Trametes -tramful -tramyard -Traminer -tramless -tramline -tram-line -tramlines -tramman -trammed -Trammel -trammeled -trammeler -trammelhead -trammeling -trammelingly -trammelled -trammeller -trammelling -trammellingly -trammel-net -trammels -trammer -trammie -tramming -trammon -tramontana -tramontanas -tramontane -tramp -trampage -Trampas -trampcock -trampdom -tramped -tramper -trampers -trampess -tramphood -tramping -trampish -trampishly -trampism -trample -trampled -trampler -tramplers -tramples -tramplike -trampling -trampolin -trampoline -trampoliner -trampoliners -trampolines -trampolining -trampolinist -trampolinists -trampoose -tramposo -trampot -tramps -tramroad -tram-road -tramroads -trams -tramsmith -tram-traveling -tramway -tramwayman -tramwaymen -tramways -Tran -trance -tranced -trancedly -tranceful -trancelike -trances -trance's -tranchant -tranchante -tranche -tranchefer -tranches -tranchet -tranchoir -trancing -trancoidal -traneau -traneen -tranfd -trangam -trangams -trank -tranka -tranker -tranky -tranks -trankum -tranmissibility -trannie -tranq -tranqs -Tranquada -tranquil -tranquil-acting -tranquiler -tranquilest -Tranquility -tranquilities -tranquilization -tranquil-ization -tranquilize -tranquilized -tranquilizer -tranquilizers -tranquilizes -tranquilizing -tranquilizingly -tranquiller -tranquillest -tranquilly -tranquillise -tranquilliser -Tranquillity -tranquillities -tranquillization -tranquillize -tranquillized -tranquillizer -tranquillizers -tranquillizes -tranquillizing -tranquillo -tranquil-looking -tranquil-minded -tranquilness -trans -trans- -trans. -transaccidentation -Trans-acherontic -transact -transacted -transacting -transactinide -transaction -transactional -transactionally -transactioneer -transactions -transaction's -transactor -transacts -Trans-adriatic -Trans-african -Trans-algerian -Trans-alleghenian -transalpine -transalpinely -transalpiner -Trans-altaian -Trans-american -transaminase -transamination -Trans-andean -Trans-andine -transanimate -transanimation -transannular -Trans-antarctic -Trans-apennine -transapical -transappalachian -transaquatic -Trans-arabian -transarctic -Trans-asiatic -transatlantic -transatlantically -transatlantican -transatlanticism -transaudient -Trans-australian -Trans-austrian -transaxle -transbay -transbaikal -transbaikalian -Trans-balkan -Trans-baltic -transboard -transborder -trans-border -transcalency -transcalent -transcalescency -transcalescent -Trans-canadian -Trans-carpathian -Trans-caspian -Transcaucasia -Transcaucasian -transceive -transceiver -transceivers -transcend -transcendant -transcended -transcendence -transcendency -transcendent -transcendental -transcendentalisation -transcendentalism -transcendentalist -transcendentalistic -transcendentalists -transcendentality -transcendentalization -transcendentalize -transcendentalized -transcendentalizing -transcendentalizm -transcendentally -transcendentals -transcendently -transcendentness -transcendible -transcending -transcendingly -transcendingness -transcends -transcension -transchange -transchanged -transchanger -transchanging -transchannel -transcience -transcolor -transcoloration -transcolour -transcolouration -transcondylar -transcondyloid -transconductance -Trans-congo -transconscious -transcontinental -trans-continental -transcontinentally -Trans-cordilleran -transcorporate -transcorporeal -transcortical -transcreate -transcribable -transcribble -transcribbler -transcribe -transcribed -transcriber -transcribers -transcribes -transcribing -transcript -transcriptase -transcription -transcriptional -transcriptionally -transcriptions -transcription's -transcriptitious -transcriptive -transcriptively -transcripts -transcript's -transcriptural -transcrystalline -transcultural -transculturally -transculturation -transcur -transcurrent -transcurrently -transcursion -transcursive -transcursively -transcurvation -transcutaneous -Trans-danubian -transdermic -transdesert -transdialect -transdiaphragmatic -transdiurnal -transduce -transduced -transducer -transducers -transducing -transduction -transductional -transe -transect -transected -transecting -transection -transects -Trans-egyptian -transelement -transelemental -transelementary -transelementate -transelementated -transelementating -transelementation -transempirical -transenna -transennae -transept -transeptal -transeptally -transepts -transequatorial -transequatorially -transessentiate -transessentiated -transessentiating -trans-etherian -transeunt -Trans-euphratean -Trans-euphrates -Trans-euphratic -Trans-eurasian -transexperiental -transexperiential -transf -transf. -transfashion -transfd -transfeature -transfeatured -transfeaturing -transfer -transferability -transferable -transferableness -transferably -transferal -transferals -transferal's -transferase -transferee -transference -transferences -transferent -transferential -transferer -transferography -transferor -transferotype -transferrable -transferral -transferrals -transferred -transferrer -transferrers -transferrer's -transferribility -transferring -transferrins -transferror -transferrotype -transfers -transfer's -transfigurate -Transfiguration -transfigurations -transfigurative -transfigure -transfigured -transfigurement -transfigures -transfiguring -transfiltration -transfinite -transfission -transfix -transfixation -transfixed -transfixes -transfixing -transfixion -transfixt -transfixture -transfluent -transfluvial -transflux -transforation -transform -transformability -transformable -transformance -transformation -transformational -transformationalist -transformationist -transformations -transformation's -transformative -transformator -transformed -transformer -transformers -transforming -transformingly -transformism -transformist -transformistic -transforms -transfretation -transfrontal -transfrontier -trans-frontier -transfuge -transfugitive -transfusable -transfuse -transfused -transfuser -transfusers -transfuses -transfusible -transfusing -transfusion -transfusional -transfusionist -transfusions -transfusive -transfusively -Trans-gangetic -transgeneration -transgenerations -Trans-germanic -Trans-grampian -transgredient -transgress -transgressed -transgresses -transgressible -transgressing -transgressingly -transgression -transgressional -transgressions -transgression's -transgressive -transgressively -transgressor -transgressors -transhape -Trans-himalayan -tranship -transhipment -transhipped -transhipping -tranships -Trans-hispanic -transhuman -transhumanate -transhumanation -transhumance -transhumanize -transhumant -Trans-iberian -transience -transiency -transiencies -transient -transiently -transientness -transients -transigence -transigent -transiliac -transilience -transiliency -transilient -transilluminate -transilluminated -transilluminating -transillumination -transilluminator -Transylvania -Transylvanian -transimpression -transincorporation -trans-Indian -transindividual -Trans-indus -transinsular -trans-Iranian -Trans-iraq -transire -transischiac -transisthmian -transistor -transistorization -transistorize -transistorized -transistorizes -transistorizing -transistors -transistor's -Transit -transitable -Transite -transited -transiter -transiting -transition -Transitional -transitionally -transitionalness -transitionary -transitioned -transitionist -transitions -transitival -transitive -transitively -transitiveness -transitivism -transitivity -transitivities -transitman -transitmen -transitory -transitorily -transitoriness -transitron -transits -transitu -transitus -TransJordan -Trans-Jordan -Transjordanian -Trans-jovian -Transkei -Trans-kei -transl -transl. -translade -translay -translatability -translatable -translatableness -translate -translated -translater -translates -translating -translation -translational -translationally -translations -translative -translator -translatorese -translatory -translatorial -translators -translator's -translatorship -translatress -translatrix -transleithan -transletter -trans-Liberian -Trans-libyan -translight -translinguate -transliterate -transliterated -transliterates -transliterating -transliteration -transliterations -transliterator -translocalization -translocate -translocated -translocating -translocation -translocations -translocatory -transluce -translucence -translucences -translucency -translucencies -translucent -translucently -translucid -translucidity -translucidus -translunar -translunary -transmade -transmake -transmaking -Trans-manchurian -transmarginal -transmarginally -transmarine -Trans-martian -transmaterial -transmateriation -transmedial -transmedian -trans-Mediterranean -transmembrane -transmen -transmental -transmentally -transmentation -transmeridional -transmeridionally -Trans-mersey -transmethylation -transmew -transmigrant -transmigrate -transmigrated -transmigrates -transmigrating -transmigration -transmigrationism -transmigrationist -transmigrations -transmigrative -transmigratively -transmigrator -transmigratory -transmigrators -transmissibility -transmissible -transmission -transmissional -transmissionist -transmissions -transmission's -Trans-mississippi -trans-Mississippian -transmissive -transmissively -transmissiveness -transmissivity -transmissometer -transmissory -transmit -transmit-receiver -transmits -transmittability -transmittable -transmittal -transmittals -transmittance -transmittances -transmittancy -transmittant -transmitted -transmitter -transmitters -transmitter's -transmittible -transmitting -transmogrify -transmogrification -transmogrifications -transmogrified -transmogrifier -transmogrifies -transmogrifying -transmold -Trans-mongolian -transmontane -transmorphism -transmould -transmountain -transmue -transmundane -transmural -transmuscle -transmutability -transmutable -transmutableness -transmutably -transmutate -transmutation -transmutational -transmutationist -transmutations -transmutative -transmutatory -transmute -trans'mute -transmuted -transmuter -transmutes -transmuting -transmutive -transmutual -transmutually -transnatation -transnational -transnationally -transnatural -transnaturation -transnature -Trans-neptunian -Trans-niger -transnihilation -transnormal -transnormally -transocean -transoceanic -trans-oceanic -transocular -transom -transomed -transoms -transom-sterned -transonic -transorbital -transovarian -transp -transp. -transpacific -trans-pacific -transpadane -transpalatine -transpalmar -trans-Panamanian -transpanamic -Trans-paraguayan -trans-Paraguayian -transparence -transparency -transparencies -transparency's -transparent -transparentize -transparently -transparentness -transparietal -transparish -transpass -transpassional -transpatronized -transpatronizing -transpeciate -transpeciation -transpeer -transpenetrable -transpenetration -transpeninsular -transpenisular -transpeptidation -transperitoneal -transperitoneally -Trans-persian -transpersonal -transpersonally -transphenomenal -transphysical -transphysically -transpicuity -transpicuous -transpicuously -transpicuousness -transpierce -transpierced -transpiercing -transpyloric -transpirability -transpirable -transpiration -transpirations -transpirative -transpiratory -transpire -transpired -Trans-pyrenean -transpires -transpiring -transpirometer -transplace -transplacement -transplacental -transplacentally -transplanetary -transplant -transplantability -transplantable -transplantar -transplantation -transplantations -transplanted -transplantee -transplanter -transplanters -transplanting -transplants -transplendency -transplendent -transplendently -transpleural -transpleurally -transpolar -transpond -transponder -transponders -transpondor -transponibility -transponible -transpontine -transport -transportability -transportable -transportableness -transportables -transportal -transportance -transportation -transportational -transportationist -transportative -transported -transportedly -transportedness -transportee -transporter -transporters -transporting -transportingly -transportive -transportment -transports -transposability -transposable -transposableness -transposal -transpose -transposed -transposer -transposes -transposing -transposition -transpositional -transpositions -transpositive -transpositively -transpositor -transpository -transpour -transprint -transprocess -transprose -transproser -transpulmonary -transput -transradiable -transrational -transrationally -transreal -transrectification -transrhenane -Trans-rhenish -transrhodanian -transriverina -transriverine -Trans-sahara -Trans-saharan -Trans-saturnian -transscriber -transsegmental -transsegmentally -transsensual -transsensually -transseptal -transsepulchral -Trans-severn -transsexual -transsexualism -transsexuality -transsexuals -transshape -trans-shape -transshaped -transshaping -transshift -trans-shift -transship -transshiped -transshiping -transshipment -transshipments -transshipped -transshipping -transships -Trans-siberian -transsocietal -transsolid -transsonic -trans-sonic -transstellar -Trans-stygian -transsubjective -trans-subjective -transtemporal -Transteverine -transthalamic -transthoracic -transthoracically -trans-Tiber -trans-Tiberian -Trans-tiberine -transtracheal -transubstantial -transubstantially -transubstantiate -transubstantiated -transubstantiating -transubstantiation -transubstantiationalist -transubstantiationite -transubstantiative -transubstantiatively -transubstantiatory -transudate -transudation -transudative -transudatory -transude -transuded -transudes -transuding -transume -transumed -transuming -transumpt -transumption -transumptive -Trans-ural -trans-Uralian -transuranian -Trans-uranian -transuranic -transuranium -transurethral -transuterine -Transvaal -Transvaaler -Transvaalian -transvaluate -transvaluation -transvalue -transvalued -transvaluing -transvasate -transvasation -transvase -transvectant -transvection -transvenom -transverbate -transverbation -transverberate -transverberation -transversal -transversale -transversalis -transversality -transversally -transversan -transversary -transverse -transversely -transverseness -transverser -transverses -transversion -transversive -transversocubital -transversomedial -transversospinal -transversovertical -transversum -transversus -transvert -transverter -transvest -transvestism -transvestite -transvestites -transvestitism -transvolation -Trans-volga -transwritten -Trans-zambezian -Trant -tranter -trantlum -tranvia -Tranzschelia -trap -Trapa -Trapaceae -trapaceous -trapan -Trapani -trapanned -trapanner -trapanning -trapans -trapball -trap-ball -trapballs -trap-cut -trapdoor -trap-door -trapdoors -trapes -trapesed -trapeses -trapesing -trapezate -trapeze -trapezes -trapezia -trapezial -trapezian -trapeziform -trapezing -trapeziometacarpal -trapezist -trapezium -trapeziums -trapezius -trapeziuses -trapezohedra -trapezohedral -trapezohedron -trapezohedrons -trapezoid -trapezoidal -trapezoidiform -trapezoids -trapezoid's -trapezophora -trapezophoron -trapezophozophora -trapfall -traphole -trapiche -trapiferous -trapish -traplight -traplike -trapmaker -trapmaking -trapnest -trapnested -trap-nester -trapnesting -trapnests -trappability -trappabilities -trappable -Trappe -trappean -trapped -trapper -trapperlike -trappers -trapper's -trappy -trappier -trappiest -trappiness -trapping -trappingly -trappings -Trappism -Trappist -Trappistes -Trappistine -trappoid -trappose -trappous -traprock -traprocks -traps -trap's -trapshoot -trapshooter -trapshooting -trapstick -trapt -trapunto -trapuntos -Trasentine -trasformism -trash -trashed -trashery -trashes -trashy -trashier -trashiest -trashify -trashily -trashiness -trashing -traship -trashless -trashman -trashmen -trashrack -trashtrie -trasy -Trasimene -Trasimeno -Trasimenus -Trask -Traskwood -trass -trasses -Trastevere -Trasteverine -tratler -Tratner -trattle -trattoria -trauchle -trauchled -trauchles -trauchling -traulism -trauma -traumas -traumasthenia -traumata -traumatic -traumatically -traumaticin -traumaticine -traumatism -traumatization -traumatize -traumatized -traumatizes -traumatizing -traumato- -traumatology -traumatologies -traumatonesis -traumatopyra -traumatopnea -traumatosis -traumatotactic -traumatotaxis -traumatropic -traumatropism -Trauner -Traunik -Trautman -Trautvetteria -trav -travado -travail -travailed -travailer -travailing -travailous -travails -travale -travally -Travancore -travated -Travax -trave -travel -travelability -travelable -travel-bent -travel-broken -travel-changed -travel-disordered -traveldom -traveled -travel-enjoying -traveler -traveleress -travelerlike -travelers -traveler's-joy -traveler's-tree -travel-famous -travel-formed -travel-gifted -travel-infected -traveling -travelings -travel-jaded -travellability -travellable -travelled -traveller -travellers -travelling -travel-loving -travel-mad -travel-met -travelog -travelogs -travelogue -traveloguer -travelogues -travel-opposing -travel-parted -travel-planning -travels -travel-sated -travel-sick -travel-soiled -travel-spent -travel-stained -travel-tainted -travel-tattered -traveltime -travel-tired -travel-toiled -travel-weary -travel-worn -Traver -Travers -traversable -traversal -traversals -traversal's -traversary -traverse -traversed -traversely -traverser -traverses -traverse-table -traversewise -traversework -traversing -traversion -travertin -travertine -traves -travest -travesty -travestied -travestier -travesties -travestying -travestiment -travesty's -Travis -traviss -Travnicki -travoy -travois -travoise -travoises -Travus -Traweek -trawl -trawlability -trawlable -trawlboat -trawled -trawley -trawleys -trawler -trawlerman -trawlermen -trawlers -trawling -trawlnet -trawl-net -trawls -trazia -treacher -treachery -treacheries -treachery's -treacherous -treacherously -treacherousness -treachousness -Treacy -treacle -treacleberry -treacleberries -treaclelike -treacles -treaclewort -treacly -treacliness -tread -treadboard -treaded -treader -treaders -treading -treadle -treadled -treadler -treadlers -treadles -treadless -treadling -treadmill -treadmills -treadplate -treads -tread-softly -Treadway -Treadwell -treadwheel -tread-wheel -treague -treas -treason -treasonable -treasonableness -treasonably -treason-breeding -treason-canting -treasonful -treason-hatching -treason-haunted -treasonish -treasonist -treasonless -treasonmonger -treasonous -treasonously -treasonproof -treasons -treason-sowing -treasr -treasurable -treasure -treasure-baited -treasure-bearing -treasured -treasure-filled -treasure-house -treasure-houses -treasure-laden -treasureless -Treasurer -treasurers -treasurership -treasures -treasure-seeking -treasuress -treasure-trove -Treasury -treasuries -treasuring -treasury's -treasuryship -treasurous -TREAT -treatability -treatabilities -treatable -treatableness -treatably -treated -treatee -treater -treaters -treaty -treaty-bound -treaty-breaking -treaties -treaty-favoring -treatyist -treatyite -treatyless -treating -treaty's -treatise -treaty-sealed -treaty-secured -treatiser -treatises -treatise's -treatment -treatments -treatment's -treator -treats -Trebbia -Trebellian -Trebizond -treble -trebled -treble-dated -treble-geared -trebleness -trebles -treble-sinewed -treblet -trebletree -trebly -trebling -Treblinka -Trebloc -trebuchet -trebucket -trecentist -trecento -trecentos -trechmannite -treckpot -treckschuyt -Treculia -treddle -treddled -treddles -treddling -tredecaphobia -tredecile -tredecillion -tredecillions -tredecillionth -tredefowel -tredille -tredrille -Tree -tree-banding -treebeard -treebine -tree-bordered -tree-boring -Treece -tree-clad -tree-climbing -tree-covered -tree-creeper -tree-crowned -treed -tree-dotted -tree-dwelling -tree-embowered -tree-feeding -tree-fern -treefish -treefishes -tree-fringed -treeful -tree-garnished -tree-girt -tree-god -tree-goddess -tree-goose -tree-great -treehair -tree-haunting -tree-hewing -treehood -treehopper -treey -treeify -treeiness -treeing -tree-inhabiting -treelawn -treeless -treelessness -treelet -treelike -treelikeness -treelined -tree-lined -treeling -tree-living -tree-locked -tree-loving -treemaker -treemaking -treeman -tree-marked -tree-moss -treen -treenail -treenails -treens -treenware -tree-planted -tree-pruning -tree-ripe -tree-run -tree-runner -trees -tree's -tree-sawing -treescape -tree-shaded -tree-shaped -treeship -tree-skirted -tree-sparrow -treespeeler -tree-spraying -tree-surgeon -treetise -tree-toad -treetop -tree-top -treetops -treetop's -treeward -treewards -tref -trefa -trefah -trefgordd -trefle -treflee -Trefler -trefoil -trefoiled -trefoillike -trefoils -trefoil-shaped -trefoilwise -Trefor -tregadyne -tregerg -treget -tregetour -Trego -tregohm -trehala -trehalas -trehalase -trehalose -Treharne -Trey -trey-ace -Treiber -Treichlers -treillage -treille -Treynor -treys -treitour -treitre -Treitschke -trek -trekboer -trekked -trekker -trekkers -trekking -trekometer -trekpath -treks -trek's -trekschuit -Trela -Trelew -Trella -Trellas -trellis -trellis-bordered -trellis-covered -trellised -trellises -trellis-framed -trellising -trellislike -trellis-shaded -trellis-sheltered -trelliswork -trellis-work -trellis-woven -Treloar -Trelu -Trema -Tremain -Tremaine -Tremayne -Tremandra -Tremandraceae -tremandraceous -Tremann -Trematoda -trematode -Trematodea -Trematodes -trematoid -Trematosaurus -tremble -trembled -tremblement -trembler -tremblers -trembles -Trembly -tremblier -trembliest -trembling -tremblingly -tremblingness -tremblor -tremeline -Tremella -Tremellaceae -tremellaceous -Tremellales -tremelliform -tremelline -tremellineous -tremelloid -tremellose -tremendous -tremendously -tremendousness -tremenousness -tremens -Trementina -tremetol -tremex -tremie -Tremml -tremogram -tremolando -tremolant -tremolist -tremolite -tremolitic -tremolo -tremolos -tremoloso -Tremont -Tremonton -tremophobia -tremor -tremorless -tremorlessly -tremors -tremor's -Trempealeau -tremplin -tremulando -tremulant -tremulate -tremulation -tremulent -tremulous -tremulously -tremulousness -trenail -trenails -Trenary -trench -trenchancy -trenchant -trenchantly -trenchantness -Trenchard -trenchboard -trenchcoats -trenched -trencher -trencher-cap -trencher-fed -trenchering -trencherless -trencherlike -trenchermaker -trenchermaking -trencherman -trencher-man -trenchermen -trenchers -trencherside -trencherwise -trencherwoman -trenches -trenchful -trenching -trenchlet -trenchlike -trenchmaster -trenchmore -trench-plough -trenchward -trenchwise -trenchwork -trend -trended -trendel -trendy -trendier -trendies -trendiest -trendily -trendiness -trending -trendle -trends -trend-setter -Trengganu -Trenna -Trent -trental -trente-et-quarante -Trentepohlia -Trentepohliaceae -trentepohliaceous -Trentine -Trento -Trenton -Trentonian -trepak -trepan -trepanation -trepang -trepangs -trepanize -trepanned -trepanner -trepanning -trepanningly -trepans -trephination -trephine -trephined -trephiner -trephines -trephining -trephocyte -trephone -trepid -trepidancy -trepidant -trepidate -trepidation -trepidations -trepidatory -trepidity -trepidly -trepidness -Treponema -treponemal -treponemas -treponemata -treponematosis -treponematous -treponeme -treponemiasis -treponemiatic -treponemicidal -treponemicide -Trepostomata -trepostomatous -treppe -Treron -Treronidae -Treroninae -tres -Tresa -tresaiel -tresance -Trescha -tresche -Tresckow -Trescott -tresillo -tresis -trespass -trespassage -trespassed -trespasser -trespassers -trespasses -trespassing -trespassory -Trespiedras -Trespinos -tress -Tressa -tress-braiding -tressed -tressel -tressels -tress-encircled -tresses -tressful -tressy -Tressia -tressier -tressiest -tressilate -tressilation -tressless -tresslet -tress-lifting -tresslike -tresson -tressour -tressours -tress-plaiting -tress's -tress-shorn -tress-topped -tressure -tressured -tressures -trest -tres-tine -trestle -trestles -trestletree -trestle-tree -trestlewise -trestlework -trestling -tret -tretis -trets -Treulich -Trev -Treva -Trevah -trevally -Trevar -Trevelyan -Trever -Treves -trevet -Trevethick -trevets -Trevett -trevette -Trevino -trevis -Treviso -Trevithick -Trevor -Trevorr -Trevorton -Trew -trewage -trewel -trews -trewsman -trewsmen -Trexlertown -Trezevant -trez-tine -trf -TRH -Tri -try -tri- -try- -triable -triableness -triac -triace -triacetamide -triacetate -triacetyloleandomycin -triacetonamine -triachenium -triacid -triacids -triacontad -triacontaeterid -triacontane -triaconter -triacs -triact -triactinal -triactine -Triad -Triadelphia -triadelphous -Triadenum -triadic -triadical -triadically -triadics -triadism -triadisms -triadist -triads -triaene -triaenose -triage -triages -triagonal -triakid -triakis- -triakisicosahedral -triakisicosahedron -triakisoctahedral -triakisoctahedrid -triakisoctahedron -triakistetrahedral -triakistetrahedron -trial -trial-and-error -trialate -trialism -trialist -triality -trialogue -trials -trial's -triamcinolone -triamid -triamide -triamylose -triamin -triamine -triamino -triammonium -triamorph -triamorphous -Trianda -triander -Triandria -triandrian -triandrous -Triangle -triangled -triangle-leaved -triangler -triangles -triangle's -triangle-shaped -triangleways -trianglewise -trianglework -Triangula -triangular -triangularis -triangularity -triangularly -triangular-shaped -triangulate -triangulated -triangulately -triangulates -triangulating -triangulation -triangulations -triangulato-ovate -triangulator -Triangulid -trianguloid -triangulopyramidal -triangulotriangular -Triangulum -triannual -triannulate -Trianon -Trianta -triantaphyllos -triantelope -trianthous -triapsal -triapsidal -triarch -triarchate -triarchy -triarchies -triarctic -triarcuated -triareal -triary -triarian -triarii -triaryl -Triarthrus -triarticulate -Trias -Triassic -triaster -triatic -Triatoma -triatomic -triatomically -triatomicity -triaxal -triaxial -triaxiality -triaxon -triaxonian -triazane -triazin -triazine -triazines -triazins -triazo -triazoic -triazole -triazoles -triazolic -TRIB -tribade -tribades -tribady -tribadic -tribadism -tribadistic -tribal -tribalism -tribalist -tribally -tribarred -tribase -tribasic -tribasicity -tribasilar -Tribbett -tribble -tribe -tribeless -tribelet -tribelike -tribes -tribe's -tribesfolk -tribeship -tribesman -tribesmanship -tribesmen -tribespeople -tribeswoman -tribeswomen -triblastic -triblet -tribo- -triboelectric -triboelectricity -tribofluorescence -tribofluorescent -Tribolium -tribology -tribological -tribologist -triboluminescence -triboluminescent -tribometer -Tribonema -Tribonemaceae -tribophysics -tribophosphorescence -tribophosphorescent -tribophosphoroscope -triborough -tribrac -tribrach -tribrachial -tribrachic -tribrachs -tribracteate -tribracteolate -tribrom- -tribromacetic -tribromid -tribromide -tribromoacetaldehyde -tribromoethanol -tribromophenol -tribromphenate -tribromphenol -tribual -tribually -tribular -tribulate -tribulation -tribulations -tribuloid -Tribulus -tribuna -tribunal -tribunals -tribunal's -tribunary -tribunate -tribune -tribunes -tribune's -tribuneship -tribunicial -tribunician -tribunitial -tribunitian -tribunitiary -tribunitive -tributable -tributary -tributaries -tributarily -tributariness -tribute -tributed -tributer -tributes -tribute's -tributing -tributyrin -tributist -tributorian -trica -tricae -tricalcic -tricalcium -tricapsular -tricar -tricarballylic -tricarbimide -tricarbon -tricarboxylic -tricarinate -tricarinated -tricarpellary -tricarpellate -tricarpous -tricaudal -tricaudate -trice -triced -tricellular -tricenary -tricenaries -tricenarious -tricenarium -tricennial -tricentenary -tricentenarian -tricentennial -tricentennials -tricentral -tricephal -tricephalic -tricephalous -tricephalus -triceps -tricepses -Triceratops -triceratopses -triceria -tricerion -tricerium -trices -trich- -trichatrophia -trichauxis -Trichechidae -trichechine -trichechodont -Trichechus -trichevron -trichi -trichy -trichia -trichiasis -Trichilia -Trichina -trichinae -trichinal -trichinas -Trichinella -trichiniasis -trichiniferous -trichinisation -trichinise -trichinised -trichinising -trichinization -trichinize -trichinized -trichinizing -trichinoid -trichinophobia -trichinopoli -Trichinopoly -trichinoscope -trichinoscopy -trichinosed -trichinoses -trichinosis -trichinotic -trichinous -trichion -trichions -trichite -trichites -trichitic -trichitis -trichiurid -Trichiuridae -trichiuroid -Trichiurus -trichlor- -trichlorethylene -trichlorethylenes -trichlorfon -trichlorid -trichloride -trichlormethane -trichloro -trichloroacetaldehyde -trichloroacetic -trichloroethane -trichloroethylene -trichloromethane -trichloromethanes -trichloromethyl -trichloronitromethane -tricho- -trichobacteria -trichobezoar -trichoblast -trichobranchia -trichobranchiate -trichocarpous -trichocephaliasis -Trichocephalus -trichocyst -trichocystic -trichoclasia -trichoclasis -trichode -Trichoderma -Trichodesmium -Trichodontidae -trichoepithelioma -trichogen -trichogenous -trichogyne -trichogynial -trichogynic -trichoglossia -Trichoglossidae -Trichoglossinae -trichoglossine -Trichogramma -Trichogrammatidae -trichoid -Tricholaena -trichology -trichological -trichologist -Tricholoma -trichoma -Trichomanes -trichomaphyte -trichomatose -trichomatosis -trichomatous -trichome -trichomes -trichomic -trichomycosis -trichomonacidal -trichomonacide -trichomonad -trichomonadal -Trichomonadidae -trichomonal -Trichomonas -trichomoniasis -Trichonympha -trichonosis -trichonosus -trichonotid -trichopathy -trichopathic -trichopathophobia -trichophyllous -trichophyte -trichophytia -trichophytic -Trichophyton -trichophytosis -trichophobia -trichophore -trichophoric -Trichoplax -trichopore -trichopter -Trichoptera -trichopteran -trichopterygid -Trichopterygidae -trichopteron -trichopterous -trichord -trichorrhea -trichorrhexic -trichorrhexis -Trichosanthes -trichoschisis -trichoschistic -trichoschistism -trichosis -trichosporange -trichosporangial -trichosporangium -Trichosporum -trichostasis -Trichostema -trichostrongyle -trichostrongylid -Trichostrongylus -trichothallic -trichotillomania -trichotomy -trichotomic -trichotomies -trichotomism -trichotomist -trichotomize -trichotomous -trichotomously -trichous -trichroic -trichroism -trichromat -trichromate -trichromatic -trichromatism -trichromatist -trichromatopsia -trichrome -trichromic -trichronous -trichuriases -trichuriasis -Trichuris -Trici -Tricia -tricyanide -tricycle -tricycled -tricyclene -tricycler -tricycles -tricyclic -tricycling -tricyclist -tricing -tricinium -tricipital -tricircular -Tricyrtis -tri-city -trick -Tryck -tricked -tricker -trickery -trickeries -trickers -trickful -tricky -trickie -trickier -trickiest -trickily -trickiness -tricking -trickingly -trickish -trickishly -trickishness -trickle -trickled -trickles -trickless -tricklet -trickly -tricklier -trickliest -tricklike -trickling -tricklingly -trickment -trick-or-treat -trick-or-treater -trick-o-the-loop -trickproof -tricks -tricksy -tricksical -tricksier -tricksiest -tricksily -tricksiness -tricksome -trickster -trickstering -tricksters -trickstress -tricktrack -triclad -Tricladida -triclads -triclclinia -triclinate -triclinia -triclinial -tricliniarch -tricliniary -triclinic -triclinium -triclinohedric -tricoccose -tricoccous -tricolette -tricolic -tricolon -tricolor -tricolored -tricolors -tricolour -tricolumnar -tricompound -tricon -triconch -Triconodon -triconodont -Triconodonta -triconodonty -triconodontid -triconodontoid -triconsonantal -triconsonantalism -tricophorous -tricoryphean -tricorn -tricorne -tricornered -tricornes -tricorns -tricornute -tricorporal -tricorporate -tricosane -tricosanone -tricosyl -tricosylic -tricostate -tricot -tricotee -tricotyledonous -tricotine -tricots -tricouni -tricresol -tricrotic -tricrotism -tricrotous -tricrural -trictrac -tric-trac -trictracs -tricurvate -tricuspal -tricuspid -tricuspidal -tricuspidate -tricuspidated -tricussate -trid -Tridacna -Tridacnidae -tridactyl -tridactylous -tridaily -triddler -tridecane -tridecene -tridecyl -tridecilateral -tridecylene -tridecylic -tridecoic -Tridell -trident -tridental -tridentate -tridentated -tridentiferous -Tridentine -Tridentinian -tridentlike -tridents -trident-shaped -Tridentum -tridepside -tridermic -tridiagonal -tridiametral -tridiapason -tridigitate -tridii -tridimensional -tridimensionality -tridimensionally -tridimensioned -tridymite -tridymite-trachyte -tridynamous -tridiurnal -tridominium -tridra -tridrachm -triduam -triduan -triduo -triduum -triduums -triecious -trieciously -tried -tried-and-trueness -triedly -triedness -trieennia -trielaidin -triene -trienes -triennia -triennial -trienniality -triennially -triennials -triennias -triennium -trienniums -triens -Trient -triental -Trientalis -trientes -triequal -Trier -trierarch -trierarchal -trierarchy -trierarchic -trierarchies -tryer-out -triers -trierucin -tries -Trieste -tri-ester -trieteric -trieterics -triethanolamine -triethyl -triethylamine -triethylstibine -trifa -trifacial -trifanious -trifarious -trifasciated -trifecta -triferous -trifid -trifilar -trifistulary -triflagellate -trifle -trifled -trifledom -trifler -triflers -trifles -triflet -trifly -trifling -triflingly -triflingness -triflings -trifloral -triflorate -triflorous -trifluoperazine -trifluoride -trifluorochloromethane -trifluouride -trifluralin -trifocal -trifocals -trifoil -trifold -trifoly -trifoliate -trifoliated -trifoliolate -trifoliosis -Trifolium -triforia -triforial -triforium -triform -triformed -triformin -triformity -triformous -trifornia -trifoveolate -trifuran -trifurcal -trifurcate -trifurcated -trifurcating -trifurcation -trig -trig. -triga -trigae -trigamy -trigamist -trigamous -trigatron -trigeminal -trigemini -trigeminous -trigeminus -trigeneric -Trigere -trigesimal -trigesimo-secundo -trigged -trigger -triggered -triggerfish -triggerfishes -trigger-happy -triggering -triggerless -triggerman -trigger-men -triggers -triggest -trigging -trigyn -Trigynia -trigynian -trigynous -trigintal -trigintennial -Trigla -triglandular -trigly -triglyceride -triglycerides -triglyceryl -triglid -Triglidae -triglyph -triglyphal -triglyphed -triglyphic -triglyphical -triglyphs -triglochid -Triglochin -triglot -trigness -trignesses -trigo -trigon -Trygon -Trigona -trigonal -trigonally -trigone -Trigonella -trigonellin -trigonelline -trigoneutic -trigoneutism -Trigonia -Trigoniaceae -trigoniacean -trigoniaceous -trigonic -trigonid -Trygonidae -Trigoniidae -trigonite -trigonitis -trigono- -trigonocephaly -trigonocephalic -trigonocephalous -Trigonocephalus -trigonocerous -trigonododecahedron -trigonodont -trigonoid -trigonometer -trigonometry -trigonometria -trigonometric -trigonometrical -trigonometrically -trigonometrician -trigonometries -trigonon -trigonotype -trigonous -trigons -trigonum -trigos -trigram -trigrammatic -trigrammatism -trigrammic -trigrams -trigraph -trigraphic -trigraphs -trigs -triguttulate -Trygve -trihalid -trihalide -trihedra -trihedral -trihedron -trihedrons -trihemeral -trihemimer -trihemimeral -trihemimeris -trihemiobol -trihemiobolion -trihemitetartemorion -trihybrid -trihydrate -trihydrated -trihydric -trihydride -trihydrol -trihydroxy -trihypostatic -trihoral -trihourly -tryhouse -trying -tryingly -tryingness -tri-iodide -triiodomethane -triiodothyronine -trijet -trijets -trijugate -trijugous -trijunction -trikaya -trike -triker -trikeria -trikerion -trikes -triketo -triketone -trikir -Trikora -trilabe -trilabiate -Trilafon -trilamellar -trilamellated -trilaminar -trilaminate -trilarcenous -trilateral -trilaterality -trilaterally -trilateralness -trilateration -trilaurin -Trilbee -Trilbi -Trilby -Trilbie -trilbies -Triley -trilemma -trilinear -trilineate -trilineated -trilingual -trilingualism -trilingually -trilinguar -trilinolate -trilinoleate -trilinolenate -trilinolenin -Trilisa -trilit -trilite -triliteral -triliteralism -triliterality -triliterally -triliteralness -trilith -trilithic -trilithon -trilium -Trill -Trilla -trillachan -trillado -trillando -Trillbee -Trillby -trilled -Trilley -triller -trillers -trillet -trilleto -trilletto -trilli -Trilly -Trilliaceae -trilliaceous -trillibub -trilliin -trillil -trilling -trillion -trillionaire -trillionize -trillions -trillionth -trillionths -Trillium -trilliums -trillo -trilloes -trills -trilobal -trilobate -trilobated -trilobation -trilobe -trilobed -Trilobita -trilobite -trilobitic -trilocular -triloculate -trilogy -trilogic -trilogical -trilogies -trilogist -Trilophodon -trilophodont -triluminar -triluminous -trim -tryma -trimacer -trimacular -trimaculate -trimaculated -trim-ankled -trimaran -trimarans -trimargarate -trimargarin -trimastigate -trymata -trim-bearded -Trimble -trim-bodiced -trim-bodied -trim-cut -trim-dressed -trimellic -trimellitic -trimembral -trimensual -trimer -Trimera -trimercuric -Trimeresurus -trimeric -trimeride -trimerite -trimerization -trimerous -trimers -trimesic -trimesyl -trimesinic -trimesitic -trimesitinic -trimester -trimesters -trimestral -trimestrial -trimetalism -trimetallic -trimetallism -trimeter -trimeters -trimethadione -trimethyl -trimethylacetic -trimethylamine -trimethylbenzene -trimethylene -trimethylglycine -trimethylmethane -trimethylstibine -trimethoxy -trimetric -trimetrical -trimetrogon -trim-hedged -tri-mide -trimyristate -trimyristin -trim-kept -trimly -trim-looking -trimmed -Trimmer -trimmers -trimmest -trimming -trimmingly -trimmings -trimness -trimnesses -trimodal -trimodality -trimolecular -Trimont -trimonthly -trimoric -trimorph -trimorphic -trimorphism -trimorphous -trimorphs -trimotor -trimotored -trimotors -trims -tryms -trimscript -trimscripts -trimstone -trim-suited -trim-swept -trimtram -trimucronatus -trim-up -Trimurti -trimuscular -trim-waisted -Trin -Trina -Trinacria -Trinacrian -trinal -trinality -trinalize -trinary -trination -trinational -Trinatte -Trinchera -Trincomalee -Trincomali -trindle -trindled -trindles -trindling -trine -trined -Trinee -trinely -trinervate -trinerve -trinerved -trines -Trinetta -Trinette -trineural -Tringa -tringine -tringle -tringoid -Trini -Triny -Trinia -Trinidad -Trinidadian -trinidado -Trinil -trining -Trinitarian -Trinitarianism -trinitarians -Trinity -trinities -trinityhood -trinitytide -trinitrate -trinitration -trinitrid -trinitride -trinitrin -trinitro -trinitro- -trinitroaniline -trinitrobenzene -trinitrocarbolic -trinitrocellulose -trinitrocresol -trinitroglycerin -trinitromethane -trinitrophenylmethylnitramine -trinitrophenol -trinitroresorcin -trinitrotoluene -trinitrotoluol -trinitroxylene -trinitroxylol -trink -trinkerman -trinkermen -trinket -trinketed -trinketer -trinkety -trinketing -trinketry -trinketries -trinkets -trinket's -Trinkgeld -trinkle -trinklement -trinklet -trinkum -trinkums -trinkum-trankum -Trinl -Trinobantes -trinoctial -trinoctile -trinocular -trinodal -trinode -trinodine -trinol -trinomen -trinomial -trinomialism -trinomialist -trinomiality -trinomially -trinopticon -Trinorantum -Trinovant -Trinovantes -trintle -trinucleate -trinucleotide -Trinucleus -trinunity -Trinway -Trio -triobol -triobolon -trioctile -triocular -triode -triode-heptode -triodes -triodia -triodion -Triodon -Triodontes -Triodontidae -triodontoid -Triodontoidea -Triodontoidei -Triodontophorus -Trioecia -trioecious -trioeciously -trioecism -trioecs -trioicous -triol -triolcous -triole -trioleate -triolefin -triolefine -trioleic -triolein -triolet -triolets -triology -triols -Trion -Tryon -try-on -Trional -triones -trionfi -trionfo -trionychid -Trionychidae -trionychoid -Trionychoideachid -trionychoidean -trionym -trionymal -Trionyx -trioperculate -Triopidae -Triops -trior -triorchis -triorchism -triorthogonal -trios -triose -trioses -Triosteum -tryout -tryouts -triovulate -trioxazine -trioxid -trioxide -trioxides -trioxids -trioxymethylene -triozonid -triozonide -Trip -tryp -trypa -tripack -tri-pack -tripacks -trypaflavine -tripal -tripaleolate -tripalmitate -tripalmitin -trypan -trypaneid -Trypaneidae -trypanocidal -trypanocide -trypanolysin -trypanolysis -trypanolytic -trypanophobia -Trypanosoma -trypanosomacidal -trypanosomacide -trypanosomal -trypanosomatic -Trypanosomatidae -trypanosomatosis -trypanosomatous -trypanosome -trypanosomiasis -trypanosomic -tripara -Tryparsamide -tripart -triparted -tripartedly -tripartible -tripartient -tripartite -tripartitely -tripartition -tripaschal -tripe -tripedal -tripe-de-roche -tripe-eating -tripel -tripelennamine -tripelike -tripeman -tripemonger -tripennate -tripenny -tripeptide -tripery -triperies -tripersonal -tri-personal -tripersonalism -tripersonalist -tripersonality -tripersonally -tripes -tripe-selling -tripeshop -tripestone -Trypeta -tripetaloid -tripetalous -trypetid -Trypetidae -tripewife -tripewoman -trip-free -triphammer -trip-hammer -triphane -triphase -triphaser -Triphasia -triphasic -Tryphena -triphenyl -triphenylamine -triphenylated -triphenylcarbinol -triphenylmethane -triphenylmethyl -triphenylphosphine -triphibian -triphibious -triphyletic -triphyline -triphylite -triphyllous -Triphysite -triphony -Triphora -Tryphosa -triphosphate -triphthong -triphthongal -tripy -trypiate -Tripylaea -tripylaean -Tripylarian -tripylean -tripinnate -tripinnated -tripinnately -tripinnatifid -tripinnatisect -tripyrenous -Tripitaka -tripl -tripla -triplane -triplanes -Triplaris -triplasian -triplasic -triple -triple-acting -triple-action -triple-aisled -triple-apsidal -triple-arched -triple-awned -tripleback -triple-barbed -triple-barred -triple-bearded -triple-bodied -triple-bolted -triple-branched -triple-check -triple-chorded -triple-cylinder -triple-colored -triple-crested -triple-crowned -tripled -triple-deck -triple-decked -triple-decker -triple-dyed -triple-edged -triple-entry -triple-expansion -triplefold -triple-formed -triple-gemmed -triplegia -triple-hatted -triple-headed -triple-header -triple-hearth -triple-ingrain -triple-line -triple-lived -triple-lock -triple-nerved -tripleness -triple-piled -triple-pole -tripler -triple-rayed -triple-ribbed -triple-rivet -triple-roofed -triples -triple-space -triple-stranded -triplet -tripletail -triple-tailed -triple-terraced -triple-thread -triple-throated -triple-throw -triple-tiered -triple-tongue -triple-tongued -triple-tonguing -triple-toothed -triple-towered -tripletree -triplets -triplet's -Triplett -triple-turned -triple-turreted -triple-veined -triple-wick -triplewise -Triplex -triplexes -triplexity -triply -tri-ply -triplicate -triplicated -triplicately -triplicate-pinnate -triplicates -triplicate-ternate -triplicating -triplication -triplications -triplicative -triplicature -Triplice -Triplicist -triplicity -triplicities -triplicostate -tripliform -triplinerved -tripling -triplite -triplites -triplo- -triploblastic -triplocaulescent -triplocaulous -Triplochitonaceae -triploid -triploidy -triploidic -triploidite -triploids -triplopy -triplopia -triplum -triplumbic -tripmadam -trip-madam -tripod -tripodal -trypodendron -tripody -tripodial -tripodian -tripodic -tripodical -tripodies -tripods -trypograph -trypographic -tripointed -tripolar -Tripoli -Tripoline -tripolis -Tripolitan -Tripolitania -tripolite -tripos -triposes -tripot -try-pot -tripotage -tripotassium -tripoter -Tripp -trippant -tripped -tripper -trippers -trippet -trippets -tripping -trippingly -trippingness -trippings -trippist -tripple -trippler -trips -trip's -Tripsacum -tripsill -trypsin -trypsinize -trypsinogen -trypsins -tripsis -tripsome -tripsomely -tript -tryptamine -triptane -triptanes -tryptase -tripterous -tryptic -triptyca -triptycas -triptych -triptychs -triptyque -trip-toe -tryptogen -Triptolemos -Triptolemus -tryptone -tryptonize -tryptophan -tryptophane -triptote -tripudia -tripudial -tripudiant -tripudiary -tripudiate -tripudiation -tripudist -tripudium -tripunctal -tripunctate -Tripura -tripwire -triquadrantal -triquet -triquetra -triquetral -triquetric -triquetrous -triquetrously -triquetrum -triquinate -triquinoyl -triradial -triradially -triradiate -triradiated -triradiately -triradiation -triradii -triradius -triradiuses -Triratna -trirectangular -triregnum -trireme -triremes -trirhombohedral -trirhomboidal -triricinolein -Tris -Trisa -trisaccharide -trisaccharose -trisacramentarian -Trisagion -trysail -trysails -trisalt -trisazo -triscele -trisceles -trisceptral -trisect -trisected -trisecting -trisection -trisections -trisector -trisectrix -trisects -triseme -trisemes -trisemic -trisensory -trisepalous -triseptate -triserial -triserially -triseriate -triseriatim -trisetose -Trisetum -Trish -Trisha -trishaw -trishna -trisylabic -trisilane -trisilicane -trisilicate -trisilicic -trisyllabic -trisyllabical -trisyllabically -trisyllabism -trisyllabity -trisyllable -trisinuate -trisinuated -triskaidekaphobe -triskaidekaphobes -triskaidekaphobia -triskele -triskeles -triskelia -triskelion -trismegist -trismegistic -Trismegistus -trismic -trismus -trismuses -trisoctahedral -trisoctahedron -trisodium -trisome -trisomes -trisomy -trisomic -trisomics -trisomies -trisonant -Trisotropis -trispast -trispaston -trispermous -trispinose -trisplanchnic -trisporic -trisporous -trisquare -trist -tryst -Trista -tristachyous -Tristam -Tristan -Tristania -Tristas -tristate -Tri-state -triste -tryste -tristearate -tristearin -trysted -tristeness -tryster -trysters -trystes -tristesse -tristetrahedron -tristeza -tristezas -tristful -tristfully -tristfulness -tristich -Tristichaceae -tristichic -tristichous -tristichs -tristigmatic -tristigmatose -tristyly -tristiloquy -tristylous -tristimulus -trysting -Tristis -tristisonous -tristive -Tristram -Tristrem -trysts -trisubstituted -trisubstitution -trisul -trisula -trisulc -trisulcate -trisulcated -trisulfate -trisulfid -trisulfide -trisulfone -trisulfoxid -trisulfoxide -trisulphate -trisulphid -trisulphide -trisulphone -trisulphonic -trisulphoxid -trisulphoxide -trit -tryt -tritactic -tritagonist -tritangent -tritangential -tritanope -tritanopia -tritanopic -tritanopsia -tritanoptic -tritaph -trite -Triteleia -tritely -tritemorion -tritencephalon -triteness -triter -triternate -triternately -triterpene -triterpenoid -tritest -tritetartemorion -tritheism -tritheist -tritheistic -tritheistical -tritheite -tritheocracy -trithing -trithings -trithioaldehyde -trithiocarbonate -trithiocarbonic -trithionate -trithionates -trithionic -Trithrinax -tritiate -tritiated -tritical -triticale -triticality -tritically -triticalness -triticeous -triticeum -triticin -triticism -triticoid -Triticum -triticums -trityl -Tritylodon -tritish -tritium -tritiums -trito- -tritocerebral -tritocerebrum -tritocone -tritoconid -Tritogeneia -tritolo -Tritoma -tritomas -tritomite -Triton -tritonal -tritonality -tritone -tritones -Tritoness -Tritonia -Tritonic -Tritonidae -tritonymph -tritonymphal -Tritonis -tritonoid -tritonous -tritons -tritopatores -trytophan -tritopine -tritor -tritoral -tritorium -tritoxide -tritozooid -tritriacontane -trittichan -trit-trot -tritubercular -Trituberculata -trituberculy -trituberculism -tri-tunnel -triturable -tritural -triturate -triturated -triturates -triturating -trituration -triturator -triturators -triturature -triture -triturium -Triturus -triumf -Triumfetta -Triumph -triumphal -triumphance -triumphancy -triumphant -triumphantly -triumphator -triumphed -triumpher -triumphing -triumphs -triumphwise -triumvir -triumviral -triumvirate -triumvirates -triumviri -triumviry -triumvirs -triumvirship -triunal -Triune -triunes -triungulin -triunification -triunion -Triunitarian -Triunity -triunities -triunsaturated -triurid -Triuridaceae -Triuridales -Triuris -trivalence -trivalency -trivalent -trivalerin -trivalve -trivalves -trivalvular -Trivandrum -trivant -trivantly -trivariant -trivat -triverbal -triverbial -trivet -trivets -trivette -trivetwise -trivia -trivial -trivialisation -trivialise -trivialised -trivialising -trivialism -trivialist -triviality -trivialities -trivialization -trivialize -trivializing -trivially -trivialness -trivirga -trivirgate -trivium -Trivoli -trivoltine -trivvet -triweekly -triweeklies -triweekliess -triwet -tryworks -trix -Trixi -Trixy -Trixie -trizoic -trizomal -trizonal -trizone -Trizonia -TRMTR -tRNA -Tro -Troad -troak -troaked -troaking -troaks -Troas -troat -trobador -troca -trocaical -trocar -trocars -trocar-shaped -troch -trocha -Trochaic -trochaicality -trochaically -trochaics -trochal -trochalopod -Trochalopoda -trochalopodous -trochanter -trochanteral -trochanteric -trochanterion -trochantin -trochantine -trochantinian -trochar -trochars -trochart -trochate -troche -trocheameter -troched -trochee -trocheeize -trochees -trochelminth -Trochelminthes -troches -trocheus -trochi -trochid -Trochidae -trochiferous -trochiform -trochil -Trochila -Trochili -trochilic -trochilics -trochilidae -trochilidine -trochilidist -trochiline -trochilopodous -trochilos -trochils -trochiluli -Trochilus -troching -trochiscation -trochisci -trochiscus -trochisk -trochite -trochitic -Trochius -trochlea -trochleae -trochlear -trochleary -trochleariform -trochlearis -trochleas -trochleate -trochleiform -trocho- -trochocephaly -trochocephalia -trochocephalic -trochocephalus -Trochodendraceae -trochodendraceous -Trochodendron -trochoid -trochoidal -trochoidally -trochoides -trochoids -trochometer -trochophore -Trochosphaera -Trochosphaerida -trochosphere -trochospherical -Trochozoa -trochozoic -trochozoon -Trochus -trock -trocked -trockery -Trocki -trocking -trocks -troco -troctolite -trod -trodden -trode -TRODI -troegerite -Troezenian -TROFF -troffer -troffers -troft -trog -trogerite -trogger -troggin -troggs -troglodytal -troglodyte -Troglodytes -troglodytic -troglodytical -Troglodytidae -Troglodytinae -troglodytish -troglodytism -trogon -Trogones -Trogonidae -Trogoniformes -trogonoid -trogons -trogs -trogue -Troy -Troiades -Troic -Troyes -troika -troikas -troilism -troilite -troilites -Troilus -troiluses -Troynovant -Troyon -trois -troys -Trois-Rivieres -Troytown -Trojan -Trojan-horse -trojans -troke -troked -troker -trokes -troking -troland -trolands -trolatitious -troll -trolldom -troll-drum -trolled -trolley -trolleybus -trolleyed -trolleyer -trolleyful -trolleying -trolleyman -trolleymen -trolleys -trolley's -trolleite -troller -trollers -trollflower -trolly -trollied -trollies -trollying -trollyman -trollymen -trollimog -trolling -trollings -Trollius -troll-madam -trollman -trollmen -trollol -trollop -Trollope -Trollopean -Trollopeanism -trollopy -Trollopian -trolloping -trollopish -trollops -trolls -troll's -tromba -trombash -trombe -trombiculid -trombidiasis -Trombidiidae -trombidiosis -Trombidium -trombone -trombones -trombony -trombonist -trombonists -Trometer -trommel -trommels -tromometer -tromometry -tromometric -tromometrical -Tromp -trompe -tromped -trompes -trompil -trompillo -tromping -tromple -tromps -Tromso -tron -Trona -tronador -tronage -tronas -tronc -Trondheim -Trondhjem -trondhjemite -trone -troner -trones -tronk -Tronna -troodont -trooly -troolie -troop -trooped -trooper -trooperess -troopers -troopfowl -troopial -troopials -trooping -troop-lined -troops -troopship -troopships -troop-thronged -troopwise -trooshlach -troostite -troostite-martensite -troostitic -troosto-martensite -troot -trooz -trop -trop- -tropacocaine -Tropaean -tropaeola -tropaeolaceae -tropaeolaceous -tropaeoli -tropaeolin -Tropaeolum -tropaeolums -tropaia -tropaion -tropal -tropary -troparia -troparion -tropate -trope -tropeic -tropein -tropeine -Tropeolin -troper -tropes -tropesis -troph- -trophaea -trophaeum -trophal -trophallactic -trophallaxis -trophectoderm -trophedema -trophema -trophesy -trophesial -trophi -trophy -trophic -trophical -trophically -trophicity -trophied -trophies -trophying -trophyless -Trophis -trophy's -trophism -trophywort -tropho- -trophobiont -trophobiosis -trophobiotic -trophoblast -trophoblastic -trophochromatin -trophocyte -trophoderm -trophodynamic -trophodynamics -trophodisc -trophogenesis -trophogeny -trophogenic -trophology -trophon -trophonema -trophoneurosis -trophoneurotic -Trophonian -trophonucleus -trophopathy -trophophyte -trophophore -trophophorous -trophoplasm -trophoplasmatic -trophoplasmic -trophoplast -trophosomal -trophosome -trophosperm -trophosphere -trophospongia -trophospongial -trophospongium -trophospore -trophotaxis -trophotherapy -trophothylax -trophotropic -trophotropism -trophozoite -trophozooid -tropy -tropia -tropic -tropical -Tropicalia -Tropicalian -tropicalih -tropicalisation -tropicalise -tropicalised -tropicalising -tropicality -tropicalization -tropicalize -tropicalized -tropicalizing -tropically -tropicbird -tropicopolitan -tropics -tropic's -tropidine -Tropidoleptus -tropyl -tropin -tropine -tropines -tropins -tropism -tropismatic -tropisms -tropist -tropistic -tropo- -tropocaine -tropocollagen -tropoyl -tropology -tropologic -tropological -tropologically -tropologies -tropologize -tropologized -tropologizing -tropometer -tropomyosin -troponin -tropopause -tropophil -tropophilous -tropophyte -tropophytic -troposphere -tropospheric -tropostereoscope -tropotaxis -tropous -troppaia -troppo -troptometer -Tros -Trosky -Trosper -Trossachs -trostera -Trot -trotcozy -Troth -troth-contracted -trothed -trothful -trothing -troth-keeping -trothless -trothlessness -trothlike -trothplight -troth-plight -troths -troth-telling -trotyl -trotyls -trotlet -trotline -trotlines -trotol -trots -Trotsky -Trotskyism -Trotskyist -Trotskyite -Trotta -trotted -Trotter -Trotters -trotteur -trotty -trottie -trotting -trottles -trottoir -trottoired -Trotwood -troubador -troubadour -troubadourish -troubadourism -troubadourist -troubadours -Troubetzkoy -trouble -trouble-bringing -troubled -troubledly -troubledness -trouble-free -trouble-giving -trouble-haunted -trouble-house -troublemaker -troublemakers -troublemaker's -troublemaking -troublement -trouble-mirth -troubleproof -troubler -troublers -troubles -trouble-saving -troubleshoot -troubleshooted -troubleshooter -trouble-shooter -troubleshooters -troubleshooting -troubleshoots -troubleshot -troublesome -troublesomely -troublesomeness -troublesshot -trouble-tossed -trouble-worn -troubly -troubling -troublingly -troublous -troublously -troublousness -trou-de-coup -trou-de-loup -troue -trough -troughed -troughful -troughy -troughing -troughlike -troughs -trough-shaped -troughster -troughway -troughwise -trounce -trounced -trouncer -trouncers -trounces -trouncing -Troup -troupand -troupe -trouped -trouper -troupers -troupes -troupial -troupials -trouping -Troupsburg -trouse -trouser -trouserdom -trousered -trouserettes -trouserian -trousering -trouserless -trouser-press -trousers -trouss -trousse -trousseau -trousseaus -trousseaux -Trout -troutbird -trout-colored -Troutdale -trouter -trout-famous -troutflower -troutful -trout-haunted -trouty -troutier -troutiest -troutiness -troutless -troutlet -troutlike -troutling -Troutman -trout-perch -trouts -Troutville -trouv -trouvaille -trouvailles -Trouvelot -trouvere -trouveres -trouveur -trouveurs -Trouville -trouvre -trovatore -trove -troveless -trover -trovers -troves -Trovillion -Trow -trowable -trowane -Trowbridge -trowed -trowel -trowelbeak -troweled -troweler -trowelers -trowelful -troweling -trowelled -troweller -trowelling -trowelman -trowels -trowel's -trowel-shaped -trowie -trowing -trowlesworthite -trowman -trows -trowsers -trowth -trowths -Troxell -Troxelville -trp -trpset -TRR -trs -TRSA -Trst -Trstram -trt -tr-ties -truancy -truancies -truandise -truant -truantcy -truanted -truanting -truantism -truantly -truantlike -truantness -truantry -truantries -truants -truant's -truantship -trub -Trubetskoi -Trubetzkoy -Trubow -trubu -Truc -truce -trucebreaker -trucebreaking -truced -truce-hating -truceless -trucemaker -trucemaking -truces -truce-seeking -trucha -truchman -trucial -trucidation -trucing -truck -truckage -truckages -truckdriver -trucked -Truckee -trucker -truckers -truckful -truckie -trucking -truckings -truckle -truckle-bed -truckled -truckler -trucklers -Truckles -trucklike -truckline -truckling -trucklingly -truckload -truckloads -truckman -truckmaster -truckmen -trucks -truckster -truckway -truculence -truculency -truculencies -truculent -truculental -truculently -truculentness -Truda -truddo -Trude -Trudeau -Trudey -trudellite -trudge -trudged -trudgen -trudgens -trudgeon -trudgeons -trudger -trudgers -trudges -trudging -Trudi -Trudy -Trudie -Trudnak -true-aimed -true-based -true-begotten -true-believing -Trueblood -true-blooded -trueblue -true-blue -trueblues -trueborn -true-born -true-breasted -truebred -true-bred -trued -true-dealing -true-derived -true-devoted -true-disposing -true-divining -true-eyed -true-false -true-felt -true-grained -truehearted -true-hearted -trueheartedly -trueheartedness -true-heartedness -true-heroic -trueing -true-life -truelike -Truelove -true-love -trueloves -true-made -Trueman -true-mannered -true-meaning -true-meant -trueness -truenesses -true-noble -true-paced -truepenny -truer -true-ringing -true-run -trues -Truesdale -true-seeming -true-souled -true-speaking -true-spelling -true-spirited -true-spoken -truest -true-stamped -true-strung -true-sublime -true-sweet -true-thought -true-to-lifeness -true-toned -true-tongued -truewood -Trufant -truff -truffe -truffes -truffle -truffled -trufflelike -truffler -truffles -trufflesque -trug -trugmallion -trugs -truing -truish -truism -truismatic -truisms -truism's -truistic -truistical -truistically -Truitt -Trujillo -Truk -Trula -truly -trull -Trullan -truller -trulli -trullisatio -trullisatios -trullization -trullo -trulls -Trumaine -Truman -Trumann -Trumansburg -trumbash -Trumbauersville -Trumbull -trumeau -trumeaux -trummel -trump -trumped -trumped-up -trumper -trumpery -trumperies -trumperiness -trumpet -trumpet-blowing -trumpetbush -trumpeted -trumpeter -trumpeters -trumpetfish -trumpetfishes -trumpet-hung -trumpety -trumpeting -trumpetleaf -trumpet-leaf -trumpet-leaves -trumpetless -trumpetlike -trumpet-loud -trumpetry -trumpets -trumpet-shaped -trumpet-toned -trumpet-tongued -trumpet-tree -trumpet-voiced -trumpetweed -trumpetwood -trumph -trumpie -trumping -trumpless -trumplike -trump-poor -trumps -trumscheit -trun -truncage -truncal -truncate -truncated -truncately -Truncatella -Truncatellidae -truncates -truncating -truncation -truncations -truncation's -truncator -truncatorotund -truncatosinuate -truncature -trunch -trunched -truncheon -truncheoned -truncheoner -truncheoning -truncheons -truncher -trunchman -truncus -trundle -trundle-bed -trundled -trundlehead -trundler -trundlers -trundles -trundleshot -trundletail -trundle-tail -trundling -trunk -trunkback -trunk-breeches -trunked -trunkfish -trunk-fish -trunkfishes -trunkful -trunkfuls -trunk-hose -trunking -trunkless -trunkmaker -trunk-maker -trunknose -trunks -trunk's -trunkway -trunkwork -trunnel -trunnels -trunnion -trunnioned -trunnionless -trunnions -truong -Truro -Truscott -trush -trusion -TRUSIX -truss -truss-bound -trussed -trussell -trusser -trussery -trussers -trusses -truss-galled -truss-hoop -trussing -trussings -trussmaker -trussmaking -Trussville -trusswork -Trust -trustability -trustable -trustableness -trustably -trust-bolstering -trust-breaking -trustbuster -trustbusting -trust-controlled -trust-controlling -trusted -trustee -trusteed -trusteeing -trusteeism -trustees -trustee's -trusteeship -trusteeships -trusteing -trusten -truster -trusters -trustful -trustfully -trustfulness -trusty -trustier -trusties -trustiest -trustify -trustification -trustified -trustifying -trustihood -trustily -trustiness -trusting -trustingly -trust-ingly -trustingness -trustle -trustless -trustlessly -trustlessness -trustman -trustmen -trustmonger -trustor -trustors -trust-regulating -trust-ridden -trusts -trust-winning -trustwoman -trustwomen -trustworthy -trustworthier -trustworthiest -trustworthily -trustworthiness -trustworthinesses -Truth -truthable -truth-armed -truth-bearing -truth-cloaking -truth-cowed -truth-declaring -truth-denying -truth-desiring -truth-destroying -truth-dictated -truth-filled -truthful -truthfully -truthfulness -truthfulnesses -truth-function -truth-functional -truth-functionally -truth-guarding -truthy -truthify -truthiness -truth-instructed -truth-led -truthless -truthlessly -truthlessness -truthlike -truthlikeness -truth-loving -truth-mocking -truth-passing -truth-perplexing -truth-revealing -truths -truth-seeking -truth-shod -truthsman -truth-speaking -truthteller -truthtelling -truth-telling -truth-tried -truth-value -truth-writ -trutinate -trutination -trutine -Trutko -Trutta -truttaceous -truvat -truxillic -truxillin -truxilline -Truxton -TRW -TS -t's -tsade -tsades -tsadi -tsadik -tsadis -Tsai -tsamba -Tsan -Tsana -tsantsa -TSAP -tsar -tsardom -tsardoms -tsarevitch -tsarevna -tsarevnas -tsarina -tsarinas -tsarism -tsarisms -tsarist -tsaristic -tsarists -Tsaritsyn -tsaritza -tsaritzas -tsars -tsarship -tsatlee -Tsattine -Tschaikovsky -tscharik -tscheffkinite -Tscherkess -tschernosem -TSCPF -TSD -TSDU -TSE -TSEL -Tselinograd -Tseng -tsere -tsessebe -tsetse -tsetses -TSF -TSgt -TSH -Tshi -Tshiluba -T-shirt -Tshombe -TSI -tsia -Tsiltaden -tsimmes -Tsimshian -Tsimshians -tsine -Tsinghai -Tsingyuan -tsingtauite -Tsinkiang -Tsiolkovsky -tsiology -Tsiranana -Tsitsihar -tsitsith -tsk -tsked -tsking -tsks -tsktsk -tsktsked -tsktsking -tsktsks -TSM -TSO -Tsoneca -Tsonecan -Tsonga -tsooris -tsores -tsoris -tsorriss -TSORT -tsotsi -TSP -TSPS -T-square -TSR -TSS -TSST -TST -TSTO -T-stop -TSTS -tsuba -tsubo -Tsuda -Tsuga -Tsugouharu -Tsui -Tsukahara -tsukupin -Tsuma -tsumebite -tsun -tsunami -tsunamic -tsunamis -tsungtu -tsures -tsuris -tsurugi -Tsushima -Tsutsutsi -Tswana -Tswanas -TT -TTC -TTD -TTFN -TTY -TTYC -TTL -TTMA -TTP -TTS -TTTN -TTU -TU -Tu. -tua -Tualati -Tualatin -Tuamotu -Tuamotuan -tuan -tuant -Tuareg -tuarn -tuart -tuatara -tuataras -tuatera -tuateras -tuath -tub -Tuba -Tubac -tubae -tubage -tubaist -tubaists -tubal -Tubalcain -Tubal-cain -tubaphone -tubar -tubaron -tubas -tubate -tubatoxin -Tubatulabal -Tubb -tubba -tubbable -tubbal -tubbeck -tubbed -tubber -tubbers -tubby -tubbie -tubbier -tubbiest -tubbiness -tubbing -tubbish -tubbist -tubboe -tub-brained -tub-coopering -tube -tube-bearing -tubectomy -tubectomies -tube-curing -tubed -tube-drawing -tube-drilling -tube-eye -tube-eyed -tube-eyes -tube-fed -tube-filling -tubeflower -tubeform -tubeful -tubehead -tubehearted -tubeless -tubelet -tubelike -tubemaker -tubemaking -tubeman -tubemen -tubenose -tube-nosed -tuber -Tuberaceae -tuberaceous -Tuberales -tuberation -tubercle -tubercled -tuberclelike -tubercles -tubercul- -tubercula -tubercular -Tubercularia -Tuberculariaceae -tuberculariaceous -tubercularisation -tubercularise -tubercularised -tubercularising -tubercularization -tubercularize -tubercularized -tubercularizing -tubercularly -tubercularness -tuberculate -tuberculated -tuberculatedly -tuberculately -tuberculation -tuberculatogibbous -tuberculatonodose -tuberculatoradiate -tuberculatospinous -tubercule -tuberculed -tuberculid -tuberculide -tuberculiferous -tuberculiform -tuberculin -tuberculination -tuberculine -tuberculinic -tuberculinisation -tuberculinise -tuberculinised -tuberculinising -tuberculinization -tuberculinize -tuberculinized -tuberculinizing -tuberculisation -tuberculise -tuberculised -tuberculising -tuberculization -tuberculize -tuberculo- -tuberculocele -tuberculocidin -tuberculoderma -tuberculoid -tuberculoma -tuberculomania -tuberculomas -tuberculomata -tuberculophobia -tuberculoprotein -tuberculose -tuberculosectorial -tuberculosed -tuberculoses -tuberculosis -tuberculotherapy -tuberculotherapist -tuberculotoxin -tuberculotrophic -tuberculous -tuberculously -tuberculousness -tuberculum -tuberiferous -tuberiform -tuberin -tuberization -tuberize -tuberless -tuberoid -tube-rolling -tuberose -tuberoses -tuberosity -tuberosities -tuberous -tuberously -tuberousness -tuberous-rooted -tubers -tuberuculate -tubes -tube-scraping -tube-shaped -tubesmith -tubesnout -tube-straightening -tube-weaving -tubework -tubeworks -tub-fast -tubfish -tubfishes -tubful -tubfuls -tubhunter -tubi- -tubicen -tubicinate -tubicination -Tubicola -Tubicolae -tubicolar -tubicolous -tubicorn -tubicornous -tubifacient -tubifer -tubiferous -Tubifex -tubifexes -tubificid -Tubificidae -Tubiflorales -tubiflorous -tubiform -tubig -tubik -tubilingual -Tubinares -tubinarial -tubinarine -tubing -Tubingen -tubings -tubiparous -Tubipora -tubipore -tubiporid -Tubiporidae -tubiporoid -tubiporous -tubist -tubists -tub-keeping -tublet -tublike -tubmaker -tubmaking -Tubman -tubmen -tubo- -tuboabdominal -tubocurarine -tuboid -tubolabellate -tuboligamentous -tuboovarial -tuboovarian -tuboperitoneal -tuborrhea -tubotympanal -tubo-uterine -tubovaginal -tub-preach -tub-preacher -tubs -tub's -tub-shaped -tub-size -tub-sized -tubster -tub-t -tubtail -tub-thump -tub-thumper -tubular -tubular-flowered -Tubularia -Tubulariae -tubularian -Tubularida -tubularidan -Tubulariidae -tubularity -tubularly -tubulate -tubulated -tubulates -tubulating -tubulation -tubulator -tubulature -tubule -tubules -tubulet -tubuli -tubuli- -tubulibranch -tubulibranchian -Tubulibranchiata -tubulibranchiate -Tubulidentata -tubulidentate -Tubulifera -tubuliferan -tubuliferous -tubulifloral -tubuliflorous -tubuliform -tubulin -tubulins -Tubulipora -tubulipore -tubuliporid -Tubuliporidae -tubuliporoid -tubulization -tubulodermoid -tubuloracemose -tubulosaccular -tubulose -tubulostriato -tubulous -tubulously -tubulousness -tubulure -tubulures -tubulus -tubuphone -tubwoman -TUC -Tucana -Tucanae -tucandera -Tucano -tuchis -tuchit -Tuchman -tuchun -tuchunate -tu-chung -tuchunism -tuchunize -tuchuns -Tuck -Tuckahoe -tuckahoes -Tuckasegee -tucked -Tucker -tucker-bag -tucker-box -tuckered -tucker-in -tuckering -Tuckerman -tuckermanity -tuckers -Tuckerton -tucket -tuckets -Tucky -Tuckie -tuck-in -tucking -tuckner -tuck-net -tuck-out -tuck-point -tuck-pointed -tuck-pointer -tucks -tuckshop -tuck-shop -tucktoo -tucotuco -tuco-tuco -tuco-tucos -Tucson -Tucum -tucuma -Tucuman -Tucumcari -Tucuna -tucutucu -Tuddor -tude -tudel -Tudela -Tudesque -Tudor -Tudoresque -tue -tuebor -tuedian -tueiron -Tues -Tuesday -Tuesdays -tuesday's -tufa -tufaceous -tufalike -tufan -tufas -tuff -tuffaceous -tuffet -tuffets -tuffing -tuffoon -tuffs -tufoli -tuft -tuftaffeta -tufted -tufted-eared -tufted-necked -tufter -tufters -tufthunter -tuft-hunter -tufthunting -tufty -tuftier -tuftiest -tuftily -tufting -tuftlet -Tufts -tuft's -tug -tugboat -tugboatman -tugboatmen -tugboats -Tugela -tugged -tugger -tuggery -tuggers -tugging -tuggingly -tughra -tughrik -tughriks -tugless -tuglike -Tugman -tug-of-war -tug-of-warring -tugrik -tugriks -tugs -tugui -tuguria -tugurium -tui -tuy -tuyer -tuyere -tuyeres -tuyers -tuik -Tuileries -tuilyie -tuille -tuilles -tuillette -tuilzie -Tuinal -Tuinenga -tuinga -tuis -tuism -tuition -tuitional -tuitionary -tuitionless -tuitions -tuitive -Tuyuneiri -Tujunga -tuke -tukra -Tukuler -Tukulor -tukutuku -Tula -tuladi -tuladis -Tulalip -Tulane -tularaemia -tularaemic -Tulare -tularemia -tularemic -Tularosa -tulasi -Tulbaghia -tulcan -tulchan -tulchin -tule -Tulear -tules -Tuleta -Tulia -tuliac -tulip -Tulipa -tulipant -tulip-eared -tulip-fancying -tulipflower -tulip-grass -tulip-growing -tulipi -tulipy -tulipiferous -tulipist -tuliplike -tulipomania -tulipomaniac -tulips -tulip's -tulip-shaped -tulip-tree -tulipwood -tulip-wood -tulisan -tulisanes -Tulkepaia -Tull -Tullahassee -Tullahoma -Tulle -Tulley -tulles -Tully -Tullia -Tullian -tullibee -tullibees -Tullio -Tullius -Tullos -Tullus -Tullusus -tulnic -Tulostoma -Tulsa -tulsi -Tulu -Tulua -tulwar -tulwaur -tum -Tumacacori -Tumaco -tumain -tumasha -tumatakuru -tumatukuru -tumbak -tumbaki -tumbek -tumbeki -Tumbes -tumbester -tumble -tumble- -tumblebug -tumbled -tumbledown -tumble-down -tumbledung -tumblehome -tumbler -tumblerful -tumblerlike -tumblers -tumbler-shaped -tumblerwise -tumbles -tumbleweed -tumbleweeds -tumbly -tumblification -tumbling -tumbling- -tumblingly -tumblings -Tumboa -tumbrel -tumbrels -tumbril -tumbrils -tume -tumefacient -tumefaction -tumefactive -tumefy -tumefied -tumefies -tumefying -Tumer -tumeric -tumescence -tumescent -tumfie -tumid -tumidily -tumidity -tumidities -tumidly -tumidness -Tumion -tumli -tummals -tummed -tummel -tummeler -tummels -tummer -tummy -tummies -tumming -tummler -tummlers -tummock -tummuler -tumor -tumoral -tumored -tumorigenic -tumorigenicity -tumorlike -tumorous -tumors -tumour -tumoured -tumours -tump -tumphy -tumpline -tump-line -tumplines -tumps -Tums -tum-ti-tum -tumtum -tum-tum -tumular -tumulary -tumulate -tumulation -tumuli -tumulose -tumulosity -tumulous -tumult -tumulter -tumults -tumult's -tumultuary -tumultuaries -tumultuarily -tumultuariness -tumultuate -tumultuation -tumultuoso -tumultuous -tumultuously -tumultuousness -tumultus -tumulus -tumuluses -Tumupasa -Tumwater -tun -tuna -tunability -tunable -tunableness -tunably -tunaburger -tunal -Tunas -tunbelly -tunbellied -tun-bellied -tunca -tund -tundagslatta -tundation -tunder -tundish -tun-dish -tundishes -tundra -tundras -tundun -tune -tuneable -tuneableness -tuneably -Tuneberg -Tunebo -tuned -tuneful -tunefully -tunefulness -tuneless -tunelessly -tunelessness -tunemaker -tunemaking -tuner -tuner-inner -tuners -tunes -tune-skilled -tunesmith -tunesome -tunester -tuneup -tune-up -tuneups -tunful -Tung -Tunga -tungah -Tungan -tungate -Tung-hu -tungo -tung-oil -tungos -tungs -tungst- -tungstate -tungsten -tungstenic -tungsteniferous -tungstenite -tungstens -tungstic -tungstite -tungstosilicate -tungstosilicic -tungstous -Tungting -Tungus -Tunguses -Tungusian -Tungusic -Tunguska -tunhoof -tuny -tunic -Tunica -tunicae -Tunican -tunicary -Tunicata -tunicate -tunicated -tunicates -tunicin -tunicked -tunicle -tunicles -tunicless -tunics -tunic's -tuniness -tuning -tunings -TUNIS -tunish -Tunisia -Tunisian -tunisians -tunist -tunk -tunka -Tunker -tunket -Tunkhannock -tunland -tunlike -tunmoot -tunna -tunnage -tunnages -tunned -Tunney -tunnel -tunnel-boring -tunneled -tunneler -tunnelers -tunneling -tunnelist -tunnelite -Tunnell -tunnelled -tunneller -tunnellers -tunnelly -tunnellike -tunnelling -tunnellite -tunnelmaker -tunnelmaking -tunnelman -tunnelmen -tunnels -tunnel-shaped -Tunnelton -tunnelway -tunner -tunnery -tunneries -tunny -tunnies -tunning -Tunnit -tunnland -tunnor -tuno -tuns -tunu -Tuolumne -Tuonela -tup -Tupaia -tupaiid -Tupaiidae -tupakihi -Tupamaro -tupanship -tupara -tupek -Tupelo -tupelos -tup-headed -Tupi -Tupian -Tupi-Guarani -Tupi-Guaranian -tupik -tupiks -Tupinamba -Tupinaqui -Tupis -tuple -Tupler -tuples -tuple's -Tupman -tupmen -Tupolev -tupped -tuppence -tuppences -Tuppeny -tuppenny -tuppenny-hapenny -Tupperian -Tupperish -Tupperism -Tupperize -tupping -tups -tupuna -Tupungato -tuque -tuques -tuquoque -TUR -Tura -turacin -turaco -turacos -turacou -turacous -turacoverdin -Turacus -turakoo -Turandot -Turanian -Turanianism -Turanism -turanite -turanose -turb -turban -turban-crested -turban-crowned -turbaned -turbanesque -turbanette -turbanless -turbanlike -turbanned -turbans -turban's -turban-shaped -turbanto -turbantop -turbanwise -turbary -turbaries -turbeh -Turbellaria -turbellarian -turbellariform -turbescency -turbeth -turbeths -Turbeville -turbid -turbidimeter -turbidimetry -turbidimetric -turbidimetrically -turbidite -turbidity -turbidities -turbidly -turbidness -turbidnesses -turbinaceous -turbinage -turbinal -turbinals -turbinate -turbinated -turbination -turbinatocylindrical -turbinatoconcave -turbinatoglobose -turbinatostipitate -turbine -turbinectomy -turbined -turbine-driven -turbine-engined -turbinelike -Turbinella -Turbinellidae -turbinelloid -turbine-propelled -turbiner -turbines -Turbinidae -turbiniform -turbinite -turbinoid -turbinotome -turbinotomy -turbit -turbith -turbiths -turbits -turbitteen -turble -Turbo -turbo- -turboalternator -turboblower -turbocar -turbocars -turbocharge -turbocharger -turbocompressor -turbodynamo -turboelectric -turbo-electric -turboexciter -turbofan -turbofans -turbogenerator -turbojet -turbojets -turbomachine -turbomotor -turboprop -turbo-prop -turboprop-jet -turboprops -turbopump -turboram-jet -turbos -turboshaft -turbosupercharge -turbosupercharged -turbosupercharger -turbot -turbotlike -turbots -Turbotville -turboventilator -turbulator -turbulence -turbulences -turbulency -turbulent -turbulently -turbulentness -Turcian -Turcic -Turcification -Turcism -Turcize -Turco -turco- -turcois -Turcoman -Turcomans -Turcophile -Turcophilism -turcopole -turcopolier -Turcos -turd -Turdetan -Turdidae -turdiform -Turdinae -turdine -turdoid -turds -Turdus -tureen -tureenful -tureens -Turenne -turf -turfage -turf-boring -turf-bound -turf-built -turf-clad -turf-covered -turf-cutting -turf-digging -turfdom -turfed -turfen -turf-forming -turf-grown -turfy -turfier -turfiest -turfiness -turfing -turfite -turf-laid -turfless -turflike -turfman -turfmen -turf-roofed -turfs -turfski -turfskiing -turfskis -turf-spread -turf-walled -turfwise -turgency -turgencies -Turgenev -Turgeniev -turgent -turgently -turgesce -turgesced -turgescence -turgescency -turgescent -turgescently -turgescible -turgescing -turgy -turgid -turgidity -turgidities -turgidly -turgidness -turgite -turgites -turgoid -turgor -turgors -Turgot -Turi -turicata -Turin -Turina -Turing -Turino -turio -turion -turioniferous -Turishcheva -turista -turistas -turjaite -turjite -Turk -Turk. -Turkana -Turkdom -turkeer -Turkey -turkeyback -turkeyberry -turkeybush -Turkey-carpeted -turkey-cock -Turkeydom -turkey-feather -turkeyfish -turkeyfishes -turkeyfoot -turkey-foot -turkey-hen -Turkeyism -turkeylike -turkeys -turkey's -turkey-trot -turkey-trotted -turkey-trotting -turkey-worked -turken -Turkery -Turkess -Turkestan -Turki -Turkic -Turkicize -Turkify -Turkification -turkis -Turkish -Turkish-blue -Turkishly -Turkishness -Turkism -Turkistan -Turkize -turkle -Turklike -Turkman -Turkmen -Turkmenian -Turkmenistan -Turko-albanian -Turko-byzantine -Turko-bulgar -Turko-bulgarian -Turko-cretan -Turko-egyptian -Turko-german -Turko-greek -Turko-imamic -Turko-iranian -turkois -turkoises -Turko-italian -Turkology -Turkologist -Turkoman -Turkomania -Turkomanic -Turkomanize -Turkomans -Turkomen -Turko-mongol -Turko-persian -Turkophil -Turkophile -Turkophilia -Turkophilism -Turkophobe -Turkophobia -Turkophobist -Turko-popish -Turko-Tartar -Turko-tatar -Turko-tataric -Turko-teutonic -Turko-ugrian -Turko-venetian -turks -Turk's-head -Turku -Turley -Turlock -turlough -Turlupin -turm -turma -turmaline -Turmel -turment -turmeric -turmerics -turmerol -turmet -turmit -turmoil -turmoiled -turmoiler -turmoiling -turmoils -turmoil's -turmut -turn -turn- -turnable -turnabout -turnabouts -turnagain -turnaround -turnarounds -turnaway -turnback -turnbout -turnbroach -turnbuckle -turn-buckle -turnbuckles -Turnbull -turncap -turncoat -turncoatism -turncoats -turncock -turn-crowned -turndown -turn-down -turndowns -turndun -Turne -turned -turned-back -turned-down -turned-in -turned-off -turned-on -turned-out -turned-over -turned-up -Turney -turnel -Turner -Turnera -Turneraceae -turneraceous -Turneresque -turnery -Turnerian -turneries -Turnerism -turnerite -turner-off -Turners -Turnersburg -Turnersville -Turnerville -turn-furrow -turngate -turnhall -turn-hall -Turnhalle -turnhalls -Turnheim -Turnices -Turnicidae -turnicine -Turnicomorphae -turnicomorphic -turn-in -turning -turningness -turnings -turnip -turnip-bearing -turnip-eating -turnip-fed -turnip-growing -turnip-headed -turnipy -turnip-yielding -turnip-leaved -turniplike -turnip-pate -turnip-pointed -turnip-rooted -turnips -turnip's -turnip-shaped -turnip-sick -turnip-stemmed -turnip-tailed -turnipweed -turnipwise -turnipwood -Turnix -turnkey -turn-key -turnkeys -turnmeter -turnoff -turnoffs -turnor -turnout -turn-out -turnouts -turnover -turn-over -turnovers -turn-penny -turnpike -turnpiker -turnpikes -turnpin -turnplate -turnplough -turnplow -turnpoke -turn-round -turnrow -turns -turnscrew -turn-server -turn-serving -turnsheet -turn-sick -turn-sickness -turnskin -turnsole -turnsoles -turnspit -turnspits -turnstile -turnstiles -turnstone -turntable -turn-table -turntables -turntail -turntale -turn-to -turn-tree -turn-under -turnup -turn-up -turnups -Turnus -turnverein -turnway -turnwrest -turnwrist -Turoff -Turon -Turonian -turophile -turp -turpantineweed -turpentine -turpentined -turpentines -turpentineweed -turpentiny -turpentinic -turpentining -turpentinous -turpeth -turpethin -turpeths -turpid -turpidly -turpify -Turpin -turpinite -turpis -turpitude -turpitudes -turps -turquet -turquois -turquoise -turquoiseberry -turquoise-blue -turquoise-colored -turquoise-encrusted -turquoise-hued -turquoiselike -turquoises -turquoise-studded -turquoise-tinted -turr -turrel -Turrell -turret -turreted -turrethead -turreting -turretless -turretlike -turrets -turret's -turret-shaped -turret-topped -turret-turning -turrical -turricle -turricula -turriculae -turricular -turriculate -turriculated -turriferous -turriform -turrigerous -Turrilepas -turrilite -Turrilites -turriliticone -Turrilitidae -turrion -turrited -Turritella -turritellid -Turritellidae -turritelloid -Turro -turrum -turse -Tursenoi -Tursha -tursio -Tursiops -Turtan -Turtle -turtleback -turtle-back -turtle-billing -turtlebloom -turtled -turtledom -turtledove -turtle-dove -turtledoved -turtledoves -turtledoving -turtle-footed -turtle-haunted -turtlehead -turtleize -turtlelike -turtle-mouthed -turtleneck -turtle-neck -turtlenecks -turtlepeg -turtler -turtlers -turtles -turtle's -turtlestone -turtlet -Turtletown -turtle-winged -turtling -turtlings -Turton -turtosa -turtur -tururi -turus -Turveydrop -Turveydropdom -Turveydropian -turves -turvy -turwar -Tusayan -Tuscaloosa -Tuscan -Tuscan-colored -Tuscany -Tuscanism -Tuscanize -Tuscanlike -Tuscarawas -Tuscarora -Tuscaroras -tusche -tusches -Tuscola -Tusculan -Tusculum -Tuscumbia -Tush -tushed -Tushepaw -tusher -tushery -tushes -tushy -tushie -tushies -tushing -tushs -tusk -Tuskahoma -tuskar -tusked -Tuskegee -tusker -tuskers -tusky -tuskier -tuskiest -tusking -tuskish -tuskless -tusklike -tusks -tuskwise -tussah -tussahs -tussal -tussar -tussars -Tussaud -tusseh -tussehs -tusser -tussers -Tussy -tussicular -Tussilago -tussis -tussises -tussive -tussle -tussled -tussler -tussles -tussling -tussock -tussocked -tussocker -tussock-grass -tussocky -tussocks -tussor -tussore -tussores -tussors -tussuck -tussucks -tussur -tussurs -Tustin -Tut -tutament -tutania -Tutankhamen -Tutankhamon -Tutankhamun -tutball -tute -tutee -tutees -tutela -tutelae -tutelage -tutelages -tutelar -tutelary -tutelaries -tutelars -tutele -Tutelo -tutenag -tutenague -Tutenkhamon -tuth -tutin -tutiorism -tutiorist -tutler -tutly -tutman -tutmen -tut-mouthed -tutoyed -tutoiement -tutoyer -tutoyered -tutoyering -tutoyers -tutor -tutorage -tutorages -tutored -tutorer -tutoress -tutoresses -tutorhood -tutory -tutorial -tutorially -tutorials -tutorial's -tutoriate -tutoring -tutorism -tutorization -tutorize -Tutorkey -tutorless -tutorly -tutors -tutorship -tutor-sick -tutress -tutrice -tutrix -tuts -tutsan -tutster -Tutt -tutted -tutti -tutty -tutties -tutti-frutti -tuttiman -tuttyman -tutting -tuttis -Tuttle -Tutto -tut-tut -tut-tutted -tut-tutting -tutu -Tutuila -Tutuilan -tutulus -tutus -Tututni -Tutwiler -tutwork -tutworker -tutworkman -tuum -Tuvalu -tu-whit -tu-whoo -tuwi -tux -Tuxedo -tuxedoed -tuxedoes -tuxedos -tuxes -Tuxtla -tuza -Tuzla -tuzzle -TV -TVA -TV-Eye -Tver -TVTWM -TV-viewer -TW -tw- -TWA -Twaddell -twaddy -twaddle -twaddled -twaddledom -twaddleize -twaddlement -twaddlemonger -twaddler -twaddlers -twaddles -twaddlesome -twaddly -twaddlier -twaddliest -twaddling -twaddlingly -twae -twaes -twaesome -twae-three -twafauld -twagger -tway -twayblade -Twain -twains -twait -twaite -twal -twale -twalpenny -twalpennyworth -twalt -Twana -twang -twanged -twanger -twangers -twangy -twangier -twangiest -twanginess -twanging -twangle -twangled -twangler -twanglers -twangles -twangling -twangs -twank -twankay -twanker -twanky -twankies -twanking -twankingly -twankle -twant -twarly -twas -'twas -twasome -twasomes -twat -twatchel -twats -twatterlight -twattle -twattle-basket -twattled -twattler -twattles -twattling -twazzy -tweag -tweak -tweaked -tweaker -tweaky -tweakier -tweakiest -tweaking -tweaks -Twedy -twee -Tweed -tweed-clad -tweed-covered -Tweeddale -tweeded -tweedy -tweedier -tweediest -tweediness -tweedle -tweedle- -tweedled -tweedledee -tweedledum -tweedles -tweedling -tweeds -Tweedsmuir -tweed-suited -tweeg -tweel -tween -'tween -tween-brain -tween-deck -'tween-decks -tweeny -tweenies -tweenlight -tween-watch -tweese -tweesh -tweesht -tweest -tweet -tweeted -tweeter -tweeters -tweeter-woofer -tweeting -tweets -tweet-tweet -tweeze -tweezed -tweezer -tweezer-case -tweezered -tweezering -tweezers -tweezes -tweezing -tweyfold -tweil -twelfhynde -twelfhyndeman -twelfth -twelfth-cake -Twelfth-day -twelfthly -Twelfth-night -twelfths -twelfth-second -Twelfthtide -Twelfth-tide -Twelve -twelve-acre -twelve-armed -twelve-banded -twelve-bore -twelve-button -twelve-candle -twelve-carat -twelve-cut -twelve-day -twelve-dram -twelve-feet -twelvefold -twelve-foot -twelve-footed -twelve-fruited -twelve-gated -twelve-gauge -twelve-gemmed -twelve-handed -twelvehynde -twelvehyndeman -twelve-hole -twelve-horsepower -twelve-hour -twelve-year -twelve-year-old -twelve-inch -twelve-labor -twelve-legged -twelve-line -twelve-mile -twelve-minute -twelvemo -twelvemonth -twelve-monthly -twelvemonths -twelvemos -twelve-oared -twelve-o'clock -twelve-ounce -twelve-part -twelvepence -twelvepenny -twelve-pint -twelve-point -twelve-pound -twelve-pounder -Twelver -twelve-rayed -twelves -twelvescore -twelve-seated -twelve-shilling -twelve-sided -twelve-spoke -twelve-spotted -twelve-starred -twelve-stone -twelve-stranded -twelve-thread -twelve-tone -twelve-towered -twelve-verse -twelve-wired -twelve-word -twenty -twenty-acre -twenty-carat -twenty-centimeter -twenty-cubit -twenty-day -twenty-dollar -twenty-eight -twenty-eighth -twenties -twentieth -twentieth-century -twentiethly -twentieths -twenty-fifth -twenty-first -twenty-five -twentyfold -twenty-foot -twenty-four -twenty-four-hour -twentyfourmo -twenty-fourmo -twenty-fourmos -twenty-fourth -twenty-gauge -twenty-grain -twenty-gun -twenty-hour -twenty-yard -twenty-year -twenty-inch -twenty-knot -twenty-line -twenty-man -twenty-mark -twenty-mesh -twenty-meter -twenty-mile -twenty-minute -twentymo -twenty-nigger -twenty-nine -twenty-ninth -twenty-one -Twenty-ounce -twenty-payment -twentypenny -twenty-penny -twenty-plume -twenty-pound -twenty-round -twenty-second -twenty-seven -twenty-seventh -twenty-shilling -twenty-six -twenty-sixth -twenty-third -twenty-thread -twenty-three -twenty-ton -twenty-twenty -twenty-two -twenty-wood -twenty-word -twere -'twere -twerp -twerps -TWG -Twi -twi- -twi-banked -twibil -twibill -twibilled -twibills -twibils -twyblade -twice -twice-abandoned -twice-abolished -twice-absent -twice-accented -twice-accepted -twice-accomplished -twice-accorded -twice-accused -twice-achieved -twice-acknowledged -twice-acquired -twice-acted -twice-adapted -twice-adjourned -twice-adjusted -twice-admitted -twice-adopted -twice-affirmed -twice-agreed -twice-alarmed -twice-alleged -twice-allied -twice-altered -twice-amended -twice-angered -twice-announced -twice-answered -twice-anticipated -twice-appealed -twice-appointed -twice-appropriated -twice-approved -twice-arbitrated -twice-arranged -twice-assaulted -twice-asserted -twice-assessed -twice-assigned -twice-associated -twice-assured -twice-attained -twice-attempted -twice-attested -twice-audited -twice-authorized -twice-avoided -twice-baked -twice-balanced -twice-bankrupt -twice-baptized -twice-barred -twice-bearing -twice-beaten -twice-begged -twice-begun -twice-beheld -twice-beloved -twice-bent -twice-bereaved -twice-bereft -twice-bested -twice-bestowed -twice-betrayed -twice-bid -twice-bit -twice-blamed -twice-blessed -twice-blooming -twice-blowing -twice-boiled -twice-born -twice-borrowed -twice-bought -twice-branded -twice-broken -twice-brought -twice-buried -twice-called -twice-canceled -twice-canvassed -twice-captured -twice-carried -twice-caught -twice-censured -twice-challenged -twice-changed -twice-charged -twice-cheated -twice-chosen -twice-cited -twice-claimed -twice-collected -twice-commenced -twice-commended -twice-committed -twice-competing -twice-completed -twice-compromised -twice-concealed -twice-conceded -twice-condemned -twice-conferred -twice-confessed -twice-confirmed -twice-conquered -twice-consenting -twice-considered -twice-consulted -twice-contested -twice-continued -twice-converted -twice-convicted -twice-copyrighted -twice-corrected -twice-counted -twice-cowed -twice-created -twice-crowned -twice-cured -twice-damaged -twice-dared -twice-darned -twice-dead -twice-dealt -twice-debated -twice-deceived -twice-declined -twice-decorated -twice-decreed -twice-deducted -twice-defaulting -twice-defeated -twice-deferred -twice-defied -twice-delayed -twice-delivered -twice-demanded -twice-denied -twice-depleted -twice-deserted -twice-deserved -twice-destroyed -twice-detained -twice-dyed -twice-diminished -twice-dipped -twice-directed -twice-disabled -twice-disappointed -twice-discarded -twice-discharged -twice-discontinued -twice-discounted -twice-discovered -twice-disgraced -twice-dismissed -twice-dispatched -twice-divided -twice-divorced -twice-doubled -twice-doubted -twice-drafted -twice-drugged -twice-earned -twice-effected -twice-elected -twice-enacted -twice-encountered -twice-endorsed -twice-engaged -twice-enlarged -twice-ennobled -twice-essayed -twice-evaded -twice-examined -twice-excelled -twice-excused -twice-exempted -twice-exiled -twice-exposed -twice-expressed -twice-extended -twice-fallen -twice-false -twice-favored -twice-felt -twice-filmed -twice-fined -twice-folded -twice-fooled -twice-forgiven -twice-forgotten -twice-forsaken -twice-fought -twice-foul -twice-fulfilled -twice-gained -twice-garbed -twice-given -twice-granted -twice-grieved -twice-guilty -twice-handicapped -twice-hazarded -twice-healed -twice-heard -twice-helped -twice-hidden -twice-hinted -twice-hit -twice-honored -twice-humbled -twice-hurt -twice-identified -twice-ignored -twice-yielded -twice-imposed -twice-improved -twice-incensed -twice-increased -twice-indulged -twice-infected -twice-injured -twice-insulted -twice-insured -twice-invented -twice-invited -twice-issued -twice-jailed -twice-judged -twice-kidnaped -twice-knighted -twice-laid -twice-lamented -twice-leagued -twice-learned -twice-left -twice-lengthened -twice-levied -twice-liable -twice-listed -twice-loaned -twice-lost -twice-mad -twice-maintained -twice-marketed -twice-married -twice-mastered -twice-mated -twice-measured -twice-menaced -twice-mended -twice-mentioned -twice-merited -twice-met -twice-missed -twice-mistaken -twice-modified -twice-mortal -twice-mourned -twice-named -twice-necessitated -twice-needed -twice-negligent -twice-negotiated -twice-nominated -twice-noted -twice-notified -twice-numbered -twice-objected -twice-obligated -twice-occasioned -twice-occupied -twice-offended -twice-offered -twice-offset -twice-omitted -twice-opened -twice-opposed -twice-ordered -twice-originated -twice-orphaned -twice-overdue -twice-overtaken -twice-overthrown -twice-owned -twice-paid -twice-painted -twice-pardoned -twice-parted -twice-partitioned -twice-patched -twice-pensioned -twice-permitted -twice-persuaded -twice-perused -twice-petitioned -twice-pinnate -twice-placed -twice-planned -twice-pleased -twice-pledged -twice-poisoned -twice-pondered -twice-posed -twice-postponed -twice-praised -twice-predicted -twice-preferred -twice-prepaid -twice-prepared -twice-prescribed -twice-presented -twice-preserved -twice-pretended -twice-prevailing -twice-prevented -twice-printed -twice-procured -twice-professed -twice-prohibited -twice-promised -twice-promoted -twice-proposed -twice-prosecuted -twice-protected -twice-proven -twice-provided -twice-provoked -twice-published -twice-punished -twice-pursued -twice-qualified -twice-questioned -twice-quoted -twicer -twice-raided -twice-read -twice-realized -twice-rebuilt -twice-recognized -twice-reconciled -twice-reconsidered -twice-recovered -twice-redeemed -twice-re-elected -twice-refined -twice-reformed -twice-refused -twice-regained -twice-regretted -twice-rehearsed -twice-reimbursed -twice-reinstated -twice-rejected -twice-released -twice-relieved -twice-remedied -twice-remembered -twice-remitted -twice-removed -twice-rendered -twice-rented -twice-repaired -twice-repeated -twice-replaced -twice-reported -twice-reprinted -twice-requested -twice-required -twice-reread -twice-resented -twice-resisted -twice-restored -twice-restrained -twice-resumed -twice-revenged -twice-reversed -twice-revised -twice-revived -twice-revolted -twice-rewritten -twice-rich -twice-right -twice-risen -twice-roasted -twice-robbed -twice-roused -twice-ruined -twice-sacked -twice-sacrificed -twice-said -twice-salvaged -twice-sampled -twice-sanctioned -twice-saved -twice-scared -twice-scattered -twice-scolded -twice-scorned -twice-sealed -twice-searched -twice-secreted -twice-secured -twice-seen -twice-seized -twice-selected -twice-sensed -twice-sent -twice-sentenced -twice-separated -twice-served -twice-set -twice-settled -twice-severed -twice-shamed -twice-shared -twice-shelled -twice-shelved -twice-shielded -twice-shot -twice-shown -twice-sick -twice-silenced -twice-sketched -twice-soiled -twice-sold -twice-soled -twice-solicited -twice-solved -twice-sought -twice-sounded -twice-spared -twice-specified -twice-spent -twice-sprung -twice-stabbed -twice-staged -twice-stated -twice-stolen -twice-stopped -twice-straightened -twice-stress -twice-stretched -twice-stricken -twice-struck -twice-subdued -twice-subjected -twice-subscribed -twice-substituted -twice-sued -twice-suffered -twice-sufficient -twice-suggested -twice-summoned -twice-suppressed -twice-surprised -twice-surrendered -twice-suspected -twice-suspended -twice-sustained -twice-sworn -twicet -twice-tabled -twice-taken -twice-tamed -twice-taped -twice-tardy -twice-taught -twice-tempted -twice-tendered -twice-terminated -twice-tested -twice-thanked -twice-thought -twice-threatened -twice-thrown -twice-tied -twice-told -twice-torn -twice-touched -twice-trained -twice-transferred -twice-translated -twice-transported -twice-treated -twice-tricked -twice-tried -twice-trusted -twice-turned -twice-undertaken -twice-undone -twice-united -twice-unpaid -twice-upset -twice-used -twice-uttered -twice-vacant -twice-vamped -twice-varnished -twice-ventured -twice-verified -twice-vetoed -twice-victimized -twice-violated -twice-visited -twice-voted -twice-waged -twice-waived -twice-wanted -twice-warned -twice-wasted -twice-weaned -twice-welcomed -twice-whipped -twice-widowed -twice-wished -twice-withdrawn -twice-witnessed -twice-won -twice-worn -twice-wounded -twichild -twi-circle -twick -Twickenham -twi-colored -twiddle -twiddled -twiddler -twiddlers -twiddles -twiddle-twaddle -twiddly -twiddling -twie -twier -twyer -twiers -twyers -twifallow -twifoil -twifold -twifoldly -twi-form -twi-formed -twig -twig-formed -twigful -twigged -twiggen -twigger -twiggy -twiggier -twiggiest -twigginess -twigging -twig-green -twigless -twiglet -twiglike -twig-lined -twigs -twig's -twigsome -twig-strewn -twig-suspended -twigwithy -twig-wrought -twyhynde -Twila -Twyla -twilight -twilight-enfolded -twilight-hidden -twilight-hushed -twilighty -twilightless -twilightlike -twilight-loving -twilights -twilight's -twilight-seeming -twilight-tinctured -twilit -twill -'twill -twilled -twiller -twilly -twilling -twillings -twills -twill-woven -twilt -TWIMC -twi-minded -twin -twinable -twin-balled -twin-bearing -twin-begot -twinberry -twinberries -twin-blossomed -twinborn -twin-born -Twinbrooks -twin-brother -twin-cylinder -twindle -twine -twineable -twine-binding -twine-bound -twinebush -twine-colored -twined -twineless -twinelike -twinemaker -twinemaking -twin-engine -twin-engined -twin-engines -twiner -twiners -twines -twine-spinning -twine-toned -twine-twisting -twin-existent -twin-float -twinflower -twinfold -twin-forked -twinge -twinged -twingeing -twinges -twinging -twingle -twingle-twangle -twin-gun -twin-headed -twinhood -twin-hued -twiny -twinier -twiniest -twinight -twi-night -twinighter -twi-nighter -twinighters -Twining -twiningly -twinism -twinjet -twin-jet -twinjets -twink -twinkle -twinkled -twinkledum -twinkleproof -twinkler -twinklers -twinkles -twinkless -twinkly -twinkling -twinklingly -twinleaf -twin-leaf -twin-leaved -twin-leaves -twin-lens -twinly -twin-light -twinlike -twinling -twin-motor -twin-motored -twin-named -twinned -twinner -twinness -twinning -twinnings -Twinoaks -twin-peaked -twin-power -twin-prop -twin-roller -Twins -twin's -Twinsburg -twin-screw -twinset -twin-set -twinsets -twinship -twinships -twin-sister -twin-six -twinsomeness -twin-spiked -twin-spired -twin-spot -twin-striped -twint -twinter -twin-towered -twin-towned -twin-tractor -twin-wheeled -twin-wire -twire -twirk -twirl -twirled -twirler -twirlers -twirly -twirlier -twirliest -twirligig -twirling -twirls -twirp -twirps -twiscar -twisel -Twisp -twist -twistability -twistable -twisted -twisted-horn -twistedly -twisted-stalk -twistened -twister -twisterer -twisters -twisthand -twisty -twistical -twistier -twistification -twistily -twistiness -twisting -twistingly -twistings -twistiways -twistiwise -twisty-wisty -twistle -twistless -twists -twit -twitch -twitched -twitchel -twitcheling -twitcher -twitchers -twitches -twitchet -twitchety -twitchfire -twitchy -twitchier -twitchiest -twitchily -twitchiness -twitching -twitchingly -twite -twitlark -twits -Twitt -twitted -twitten -twitter -twitteration -twitterboned -twittered -twitterer -twittery -twittering -twitteringly -twitterly -twitters -twitter-twatter -twitty -twitting -twittingly -twittle -twittle-twattle -twit-twat -twyver -twixt -'twixt -twixtbrain -twizzened -twizzle -twizzle-twig -TWM -two -two-a-cat -two-along -two-angle -two-arched -two-armed -two-aspect -two-barred -two-barreled -two-base -two-beat -two-bedded -two-bid -two-by-four -two-bill -two-bit -two-blade -two-bladed -two-block -two-blocks -two-bodied -two-bodies -two-bond -two-bottle -two-branched -two-bristled -two-bushel -two-capsuled -two-celled -two-cent -two-centered -two-chamber -two-chambered -two-charge -two-cycle -two-cylinder -two-circle -two-circuit -two-cleft -two-coat -two-color -two-colored -two-component -two-day -two-deck -twodecker -two-decker -two-dimensional -two-dimensionality -two-dimensionally -two-dimensioned -two-dollar -two-eared -two-edged -two-eye -two-eyed -two-eyes -two-em -two-ended -twoes -two-face -two-faced -two-facedly -two-facedness -two-factor -two-family -two-feeder -twofer -twofers -two-figure -two-fingered -two-fisted -two-floor -two-flowered -two-fluid -twofold -two-fold -twofoldly -twofoldness -twofolds -two-foot -two-footed -two-for-a-cent -two-for-a-penny -two-forked -two-formed -two-four -two-gallon -two-grained -two-groove -two-grooved -two-guinea -two-gun -two-hand -two-handed -two-handedly -twohandedness -two-handedness -two-handled -two-headed -two-high -two-hinged -two-horned -two-horse -two-horsepower -two-hour -two-humped -two-year -two-year-old -two-inch -Two-kettle -two-leaf -two-leaved -twolegged -two-legged -two-level -two-life -two-light -two-line -two-lined -twoling -two-lipped -two-lobed -two-lunged -two-man -two-mast -two-masted -two-master -Twombly -two-membered -two-mile -two-minded -two-minute -two-monthly -two-name -two-named -two-necked -two-needle -two-nerved -twoness -two-oar -two-oared -two-ounce -two-pair -two-part -two-parted -two-party -two-pass -two-peaked -twopence -twopences -twopenny -twopenny-halfpenny -two-petaled -two-phase -two-phaser -two-piece -two-pile -two-piled -two-pipe -two-place -two-platoon -two-ply -two-plowed -two-point -two-pointic -two-pole -two-position -two-pound -two-principle -two-pronged -two-quart -two-rayed -two-rail -two-ranked -two-rate -two-revolution -two-roomed -two-row -two-rowed -twos -two's -twoscore -two-seated -two-seater -two-seeded -two-shafted -two-shanked -two-shaped -two-sheave -two-shilling -two-shillingly -two-shillingness -two-shot -two-sided -two-sidedness -two-syllable -twosome -twosomes -two-soused -two-speed -two-spined -two-spored -two-spot -two-spotted -two-stall -two-stalled -two-star -two-step -two-stepped -two-stepping -two-sticker -two-story -two-storied -two-stream -two-stringed -two-striped -two-striper -two-stroke -two-stroke-cycle -two-suit -two-suiter -two-teeth -two-thirder -two-thirds -two-three -two-throw -two-time -two-timed -two-timer -two-timing -two-tined -two-toed -two-tone -two-toned -two-tongued -two-toothed -two-topped -two-track -two-tusked -two-twisted -'twould -two-unit -two-up -two-valved -two-volume -two-way -two-wheel -two-wheeled -two-wheeler -two-wicked -two-winged -two-woods -two-word -twp -TWS -TWT -Twum -TWX -TX -TXID -txt -Tzaam -tzaddik -tzaddikim -Tzapotec -tzar -tzardom -tzardoms -tzarevich -tzarevitch -tzarevna -tzarevnas -tzarina -tzarinas -tzarism -tzarisms -tzarist -tzaristic -tzarists -tzaritza -tzaritzas -tzars -tzedakah -Tzekung -Tzendal -Tzental -tzetse -tzetze -tzetzes -Tzigane -tziganes -Tzigany -Tziganies -tzimmes -tzitzis -tzitzit -tzitzith -tzolkin -Tzong -tzontle -Tzotzil -Tzu-chou -Tzu-po -tzuris -Tzutuhil -U -U. -U.A.R. -U.C. -U.K. -U.S. -U.S.A. -U.S.S. -U.V. -U/S -UA -UAB -UAE -uayeb -uakari -ualis -UAM -uang -UAPDU -UAR -Uaraycu -Uarekena -UARS -UART -Uaupe -UAW -UB -UBA -Ubald -Uball -Ubana -Ubangi -Ubangi-Shari -Ubbenite -Ubbonite -UBC -Ube -uberant -Ubermensch -uberous -uberously -uberousness -uberrima -uberty -uberties -ubi -ubication -ubiety -ubieties -Ubii -Ubiquarian -ubique -ubiquious -Ubiquist -ubiquit -ubiquitary -Ubiquitarian -Ubiquitarianism -ubiquitaries -ubiquitariness -ubiquity -ubiquities -Ubiquitism -Ubiquitist -ubiquitity -ubiquitities -ubiquitous -ubiquitously -ubiquitousness -Ubly -UBM -U-boat -U-boot -ubound -ubussu -UC -Uca -Ucayale -Ucayali -Ucal -Ucalegon -UCAR -UCB -UCC -UCCA -Uccello -UCD -Uchean -Uchee -Uchida -Uchish -UCI -uckers -uckia -UCL -UCLA -Ucon -UCR -UCSB -UCSC -UCSD -UCSF -U-cut -ucuuba -Ud -UDA -Udaipur -udal -Udale -udaler -Udall -udaller -udalman -udasi -UDB -UDC -udder -uddered -udderful -udderless -udderlike -udders -Udela -Udele -Udell -Udella -Udelle -UDI -Udic -Udine -Udish -UDMH -udo -udographic -Udolphoish -udom -udometer -udometers -udometry -udometric -udometries -udomograph -udos -UDP -UDR -Uds -UDT -UEC -Uehling -UEL -Uela -Uele -Uella -Ueueteotl -Ufa -UFC -ufer -Uffizi -UFO -ufology -ufologies -ufologist -ufos -UFS -UG -ugali -Uganda -Ugandan -ugandans -Ugarit -Ugaritian -Ugaritic -Ugarono -UGC -ugglesome -ugh -ughs -ughten -ugli -ugly -ugly-clouded -ugly-conditioned -ugly-eyed -uglier -uglies -ugliest -ugly-faced -uglify -uglification -uglified -uglifier -uglifiers -uglifies -uglifying -ugly-headed -uglily -ugly-looking -ugliness -uglinesses -ugly-omened -uglis -uglisome -ugly-tempered -ugly-visaged -Ugo -Ugrian -ugrianize -Ugric -Ugro-altaic -Ugro-aryan -Ugro-finn -Ugro-Finnic -Ugro-finnish -Ugroid -Ugro-slavonic -Ugro-tatarian -ugsome -ugsomely -ugsomeness -ugt -UH -Uhde -UHF -uh-huh -uhlan -Uhland -uhlans -uhllo -Uhrichsville -Uhro-rusinian -uhs -uhtensang -uhtsong -uhuru -UI -UIC -UID -Uyekawa -Uighur -Uigur -Uigurian -Uiguric -UIL -uily -UIMS -uinal -Uinta -uintahite -uintaite -uintaites -uintathere -Uintatheriidae -Uintatherium -uintjie -UIP -Uird -Uirina -Uis -UIT -Uitlander -Uitotan -UITP -uitspan -Uitzilopochtli -UIUC -uji -Ujiji -Ujjain -Ujpest -UK -ukase -ukases -Uke -ukelele -ukeleles -ukes -Ukiah -ukiyoe -ukiyo-e -ukiyoye -Ukr -Ukr. -Ukraina -Ukraine -Ukrainer -Ukrainian -ukrainians -ukranian -UKST -ukulele -ukuleles -UL -Ula -Ulah -ulama -ulamas -Ulan -ULANA -Ulane -Ulani -ulans -Ulan-Ude -ular -ulatrophy -ulatrophia -ulaula -Ulberto -Ulbricht -ulcer -ulcerable -ulcerate -ulcerated -ulcerates -ulcerating -ulceration -ulcerations -ulcerative -ulcered -ulcery -ulcering -ulceromembranous -ulcerous -ulcerously -ulcerousness -ulcers -ulcer's -ulcus -ulcuscle -ulcuscule -Ulda -ule -Uledi -Uleki -ulema -ulemas -ulemorrhagia -Ulen -ulent -ulerythema -uletic -Ulex -ulexine -ulexite -ulexites -Ulfila -Ulfilas -Ulyanovsk -Ulick -ulicon -Ulidia -Ulidian -uliginose -uliginous -Ulises -Ulyssean -Ulysses -Ulita -ulitis -Ull -Ulla -ullage -ullaged -ullages -ullagone -Ulland -Uller -Ullin -ulling -Ullyot -Ullman -ullmannite -Ullr -Ullswater -ulluco -ullucu -Ullund -Ullur -Ulm -Ulmaceae -ulmaceous -Ulman -Ulmaria -ulmate -Ulmer -ulmic -ulmin -ulminic -ulmo -ulmous -Ulmus -ulna -ulnad -ulnae -ulnage -ulnar -ulnare -ulnaria -ulnas -ulnocarpal -ulnocondylar -ulnometacarpal -ulnoradial -uloborid -Uloboridae -Uloborus -ulocarcinoma -uloid -Ulonata -uloncus -Ulophocinae -ulorrhagy -ulorrhagia -ulorrhea -ulose -Ulothrix -Ulotrichaceae -ulotrichaceous -Ulotrichales -ulotrichan -Ulotriches -Ulotrichi -ulotrichy -ulotrichous -ulous -ulpan -ulpanim -Ulphi -Ulphia -Ulphiah -Ulpian -Ulric -Ulrica -Ulrich -ulrichite -Ulrick -Ulrika -Ulrikaumeko -Ulrike -Ulster -ulstered -ulsterette -Ulsterian -ulstering -Ulsterite -Ulsterman -ulsters -ult -ulta -Ultan -Ultann -ulterior -ulteriorly -Ultima -ultimacy -ultimacies -ultimas -ultimata -ultimate -ultimated -ultimately -ultimateness -ultimates -ultimating -ultimation -ultimatum -ultimatums -ultime -ultimity -ultimo -ultimobranchial -ultimogenitary -ultimogeniture -ultimum -ultion -ulto -Ultonian -Ultor -ultra -ultra- -ultra-abolitionism -ultra-abstract -ultra-academic -ultra-affected -ultra-aggressive -ultra-ambitious -ultra-angelic -Ultra-anglican -ultra-apologetic -ultra-arbitrary -ultra-argumentative -ultra-atomic -ultra-auspicious -ultrabasic -ultrabasite -ultrabelieving -ultrabenevolent -Ultra-byronic -Ultra-byronism -ultrabrachycephaly -ultrabrachycephalic -ultrabrilliant -Ultra-calvinist -ultracentenarian -ultracentenarianism -ultracentralizer -ultracentrifugal -ultracentrifugally -ultracentrifugation -ultracentrifuge -ultracentrifuged -ultracentrifuging -ultraceremonious -Ultra-christian -ultrachurchism -ultracivil -ultracomplex -ultraconcomitant -ultracondenser -ultraconfident -ultraconscientious -ultraconservatism -ultraconservative -ultraconservatives -ultracordial -ultracosmopolitan -ultracredulous -ultracrepidarian -ultracrepidarianism -ultracrepidate -ultracritical -ultradandyism -ultradeclamatory -ultrademocratic -ultradespotic -ultradignified -ultradiscipline -ultradolichocephaly -ultradolichocephalic -ultradolichocranial -ultradry -ultraeducationist -ultraeligible -ultraelliptic -ultraemphasis -ultraenergetic -ultraenforcement -Ultra-english -ultraenthusiasm -ultraenthusiastic -ultraepiscopal -ultraevangelical -ultraexcessive -ultraexclusive -ultraexpeditious -ultrafantastic -ultrafashionable -ultrafast -ultrafastidious -ultrafederalist -ultrafeudal -ultrafiche -ultrafiches -ultrafidian -ultrafidianism -ultrafilter -ultrafilterability -ultrafilterable -ultrafiltrate -ultrafiltration -ultraformal -Ultra-french -ultrafrivolous -ultragallant -Ultra-gallican -Ultra-gangetic -ultragaseous -ultragenteel -Ultra-german -ultragood -ultragrave -ultrahazardous -ultraheroic -ultrahigh -ultrahigh-frequency -ultrahonorable -ultrahot -ultrahuman -ultraimperialism -ultraimperialist -ultraimpersonal -ultrainclusive -ultraindifferent -ultraindulgent -ultraingenious -ultrainsistent -ultraintimate -ultrainvolved -ultrayoung -ultraism -ultraisms -ultraist -ultraistic -ultraists -Ultra-julian -ultralaborious -ultralegality -ultralenient -ultraliberal -ultraliberalism -ultralogical -ultraloyal -ultralow -Ultra-lutheran -Ultra-lutheranism -ultraluxurious -ultramarine -Ultra-martian -ultramasculine -ultramasculinity -ultramaternal -ultramaximal -ultramelancholy -ultrametamorphism -ultramicro -ultramicrobe -ultramicrochemical -ultramicrochemist -ultramicrochemistry -ultramicrometer -ultramicron -ultramicroscope -ultramicroscopy -ultramicroscopic -ultramicroscopical -ultramicroscopically -ultramicrotome -ultraminiature -ultraminute -ultramoderate -ultramodern -ultramodernism -ultramodernist -ultramodernistic -ultramodest -ultramontane -ultramontanism -ultramontanist -ultramorose -ultramulish -ultramundane -ultranational -ultranationalism -ultranationalist -ultranationalistic -ultranationalistically -ultranatural -ultranegligent -Ultra-neptunian -ultranet -ultranice -ultranonsensical -ultraobscure -ultraobstinate -ultraofficious -ultraoptimistic -ultraorganized -ultraornate -ultraorthodox -ultraorthodoxy -ultraoutrageous -ultrapapist -ultraparallel -Ultra-pauline -Ultra-pecksniffian -ultraperfect -ultrapersuasive -ultraphotomicrograph -ultrapious -ultraplanetary -ultraplausible -Ultra-pluralism -Ultra-pluralist -ultrapopish -Ultra-presbyterian -ultra-Protestantism -ultraproud -ultraprudent -ultrapure -Ultra-puritan -Ultra-puritanical -ultraradical -ultraradicalism -ultrarapid -ultrareactionary -ultrared -ultrareds -ultrarefined -ultrarefinement -ultrareligious -ultraremuneration -ultrarepublican -ultrarevolutionary -ultrarevolutionist -ultraritualism -ultraroyalism -ultraroyalist -Ultra-romanist -ultraromantic -ultras -ultrasanguine -ultrascholastic -ultrasecret -ultraselect -ultraservile -ultrasevere -ultrashort -ultrashrewd -ultrasimian -ultrasystematic -ultra-slow -ultrasmart -ultrasolemn -ultrasonic -ultrasonically -ultrasonics -ultrasonogram -ultrasonography -ultrasound -ultraspartan -ultraspecialization -ultraspiritualism -ultrasplendid -ultrastandardization -ultrastellar -ultrasterile -ultrastylish -ultrastrenuous -ultrastrict -ultrastructural -ultrastructure -ultrasubtle -Ultrasuede -ultratechnical -ultratense -ultraterrene -ultraterrestrial -Ultra-tory -Ultra-toryism -ultratotal -ultratrivial -ultratropical -ultraugly -ultra-ultra -ultrauncommon -ultraurgent -ultravicious -ultraviolent -ultraviolet -ultravirtuous -ultravirus -ultraviruses -ultravisible -ultrawealthy -Ultra-whig -ultrawise -ultrazealous -ultrazealousness -ultrazodiacal -ultroneous -ultroneously -ultroneousness -Ultun -Ulu -Ulua -uluhi -Ulu-juz -ululant -ululate -ululated -ululates -ululating -ululation -ululations -ululative -ululatory -ululu -Ulund -ulus -Ulva -Ulvaceae -ulvaceous -Ulvales -Ulvan -ulvas -um -um- -Uma -Umayyad -umangite -umangites -Umatilla -Umaua -Umbarger -umbecast -umbeclad -umbel -umbelap -umbeled -umbella -Umbellales -umbellar -umbellate -umbellated -umbellately -umbelled -umbellet -umbellets -umbellic -umbellifer -Umbelliferae -umbelliferone -umbelliferous -umbelliflorous -umbelliform -umbelloid -Umbellula -Umbellularia -umbellulate -umbellule -Umbellulidae -umbelluliferous -umbels -umbelwort -umber -umber-black -umber-brown -umber-colored -umbered -umberima -umbering -umber-rufous -umbers -umberty -Umberto -umbeset -umbethink -umbibilici -umbilectomy -umbilic -umbilical -umbilically -umbilicar -Umbilicaria -umbilicate -umbilicated -umbilication -umbilici -umbiliciform -umbilicus -umbilicuses -umbiliform -umbilroot -umble -umbles -umbo -umbolateral -umbonal -umbonate -umbonated -umbonation -umbone -umbones -umbonial -umbonic -umbonulate -umbonule -umbos -Umbra -umbracious -umbraciousness -umbracle -umbraculate -umbraculiferous -umbraculiform -umbraculum -umbrae -umbrage -umbrageous -umbrageously -umbrageousness -umbrages -umbraid -umbral -umbrally -umbrana -umbras -umbrate -umbrated -umbratic -umbratical -umbratile -umbre -umbrel -umbrella -umbrellaed -umbrellaing -umbrellaless -umbrellalike -umbrellas -umbrella's -umbrella-shaped -umbrella-topped -umbrellawise -umbrellawort -umbrere -umbret -umbrette -umbrettes -Umbria -Umbrian -Umbriel -umbriferous -umbriferously -umbriferousness -umbril -umbrina -umbrine -umbro- -Umbro-etruscan -Umbro-florentine -Umbro-latin -Umbro-oscan -Umbro-roman -Umbro-sabellian -Umbro-samnite -umbrose -Umbro-sienese -umbrosity -umbrous -Umbundu -umbu-rana -Ume -Umea -Umeh -Umeko -umest -umfaan -umgang -um-hum -umiac -umiack -umiacks -umiacs -umiak -umiaks -umiaq -umiaqs -umimpeded -umiri -umist -um-yum -umland -umlaut -umlauted -umlauting -umlauts -umload -umm -u-mm -Ummersen -ummps -Umont -umouhile -ump -umped -umph -umpy -umping -umpirage -umpirages -umpire -umpired -umpirer -umpires -umpire's -umpireship -umpiress -umpiring -umpirism -umppired -umppiring -Umpqua -umps -umpsteen -umpteen -umpteens -umpteenth -umptekite -umpty -umptieth -umquhile -umset -umstroke -UMT -Umtali -umteen -umteenth -umu -UMW -UN -un- -'un -Una -unabandoned -unabandoning -unabased -unabasedly -unabashable -unabashed -unabashedly -unabasing -unabatable -unabated -unabatedly -unabating -unabatingly -unabbreviated -unabdicated -unabdicating -unabdicative -unabducted -unabetted -unabettedness -unabetting -unabhorred -unabhorrently -unabiding -unabidingly -unabidingness -unability -unabject -unabjective -unabjectly -unabjectness -unabjuratory -unabjured -unablative -unable -unableness -unably -unabnegated -unabnegating -unabolishable -unabolished -unaborted -unabortive -unabortively -unabortiveness -unabraded -unabrased -unabrasive -unabrasively -unabridgable -unabridged -unabrogable -unabrogated -unabrogative -unabrupt -unabruptly -unabscessed -unabsent -unabsentmindedness -unabsolute -unabsolvable -unabsolved -unabsolvedness -unabsorb -unabsorbable -unabsorbed -unabsorbent -unabsorbing -unabsorbingly -unabsorptiness -unabsorptive -unabsorptiveness -unabstemious -unabstemiously -unabstemiousness -unabstentious -unabstract -unabstracted -unabstractedly -unabstractedness -unabstractive -unabstractively -unabsurd -unabundance -unabundant -unabundantly -unabusable -unabused -unabusive -unabusively -unabusiveness -unabutting -unacademic -unacademical -unacademically -unacceding -unaccelerated -unaccelerative -unaccent -unaccented -unaccentuated -unaccept -unacceptability -unacceptable -unacceptableness -unacceptably -unacceptance -unacceptant -unaccepted -unaccepting -unaccessibility -unaccessible -unaccessibleness -unaccessibly -unaccessional -unaccessory -unaccidental -unaccidentally -unaccidented -unacclaimate -unacclaimed -unacclimated -unacclimation -unacclimatised -unacclimatization -unacclimatized -unacclivitous -unacclivitously -unaccommodable -unaccommodated -unaccommodatedness -unaccommodating -unaccommodatingly -unaccommodatingness -unaccompanable -unaccompanied -unaccompanying -unaccomplishable -unaccomplished -unaccomplishedness -unaccord -unaccordable -unaccordance -unaccordant -unaccorded -unaccording -unaccordingly -unaccostable -unaccosted -unaccountability -unaccountable -unaccountableness -unaccountably -unaccounted -unaccounted-for -unaccoutered -unaccoutred -unaccreditated -unaccredited -unaccrued -unaccumulable -unaccumulate -unaccumulated -unaccumulation -unaccumulative -unaccumulatively -unaccumulativeness -unaccuracy -unaccurate -unaccurately -unaccurateness -unaccursed -unaccusable -unaccusably -unaccuse -unaccused -unaccusing -unaccusingly -unaccustom -unaccustomed -unaccustomedly -unaccustomedness -unacerbic -unacerbically -unacetic -unachievability -unachievable -unachieved -unaching -unachingly -unacidic -unacidulated -unacknowledged -unacknowledgedness -unacknowledging -unacknowledgment -unacoustic -unacoustical -unacoustically -unacquaint -unacquaintable -unacquaintance -unacquainted -unacquaintedly -unacquaintedness -unacquiescent -unacquiescently -unacquirability -unacquirable -unacquirableness -unacquirably -unacquired -unacquisitive -unacquisitively -unacquisitiveness -unacquit -unacquittable -unacquitted -unacquittedness -unacrimonious -unacrimoniously -unacrimoniousness -unact -unactability -unactable -unacted -unacting -unactinic -unaction -unactionable -unactivated -unactive -unactively -unactiveness -unactivity -unactorlike -unactual -unactuality -unactually -unactuated -unacuminous -unacute -unacutely -unadamant -unadapt -unadaptability -unadaptable -unadaptableness -unadaptably -unadaptabness -unadapted -unadaptedly -unadaptedness -unadaptive -unadaptively -unadaptiveness -unadd -unaddable -unadded -unaddible -unaddicted -unaddictedness -unadditional -unadditioned -unaddled -unaddress -unaddressed -unadduceable -unadduced -unadducible -unadept -unadeptly -unadeptness -unadequate -unadequately -unadequateness -unadherence -unadherent -unadherently -unadhering -unadhesive -unadhesively -unadhesiveness -Unadilla -unadjacent -unadjacently -unadjectived -unadjoined -unadjoining -unadjourned -unadjournment -unadjudged -unadjudicated -unadjunctive -unadjunctively -unadjust -unadjustable -unadjustably -unadjusted -unadjustment -unadministered -unadministrable -unadministrative -unadministratively -unadmirable -unadmirableness -unadmirably -unadmire -unadmired -unadmiring -unadmiringly -unadmissible -unadmissibleness -unadmissibly -unadmission -unadmissive -unadmittable -unadmittableness -unadmittably -unadmitted -unadmittedly -unadmitting -unadmonished -unadmonitory -unadopt -unadoptable -unadoptably -unadopted -unadoption -unadoptional -unadoptive -unadoptively -unadorable -unadorableness -unadorably -unadoration -unadored -unadoring -unadoringly -unadorn -unadornable -unadorned -unadornedly -unadornedness -unadornment -unadroit -unadroitly -unadroitness -unadulating -unadulatory -unadult -unadulterate -unadulterated -unadulteratedly -unadulteratedness -unadulterately -unadulteration -unadulterous -unadulterously -unadvanced -unadvancedly -unadvancedness -unadvancement -unadvancing -unadvantaged -unadvantageous -unadvantageously -unadvantageousness -unadventured -unadventuring -unadventurous -unadventurously -unadventurousness -unadverse -unadversely -unadverseness -unadvertency -unadvertised -unadvertisement -unadvertising -unadvisability -unadvisable -unadvisableness -unadvisably -unadvised -unadvisedly -unadvisedness -unadvocated -unaerated -unaesthetic -unaesthetical -unaesthetically -unaestheticism -unaestheticness -unafeard -unafeared -unaffability -unaffable -unaffableness -unaffably -unaffectation -unaffected -unaffectedly -unaffectedness -unaffecting -unaffectionate -unaffectionately -unaffectionateness -unaffectioned -unaffianced -unaffied -unaffiliated -unaffiliation -unaffirmation -unaffirmed -unaffixed -unafflicted -unafflictedly -unafflictedness -unafflicting -unaffliction -unaffordable -unafforded -unaffranchised -unaffrighted -unaffrightedly -unaffronted -unafire -unafloat -unaflow -unafraid -unafraidness -Un-african -unaged -unageing -unagglomerative -unaggravated -unaggravating -unaggregated -unaggression -unaggressive -unaggressively -unaggressiveness -unaghast -unagile -unagilely -unagility -unaging -unagitated -unagitatedly -unagitatedness -unagitation -unagonize -unagrarian -unagreeable -unagreeableness -unagreeably -unagreed -unagreeing -unagreement -unagricultural -unagriculturally -unai -unaidable -unaided -unaidedly -unaiding -unailing -unaimed -unaiming -unairable -unaired -unairily -unais -unaisled -Unakhotana -unakin -unakite -unakites -unal -Unalachtigo -unalacritous -unalarm -unalarmed -unalarming -unalarmingly -Unalaska -unalcoholised -unalcoholized -unaldermanly -unalert -unalerted -unalertly -unalertness -unalgebraical -unalienability -unalienable -unalienableness -unalienably -unalienated -unalienating -unalignable -unaligned -unalike -unalimentary -unalimentative -unalist -unalive -unallayable -unallayably -unallayed -unalleged -unallegedly -unallegorical -unallegorically -unallegorized -unallergic -unalleviably -unalleviated -unalleviatedly -unalleviating -unalleviatingly -unalleviation -unalleviative -unalliable -unallied -unalliedly -unalliedness -unalliterated -unalliterative -unallocated -unalloyed -unallotment -unallotted -unallow -unallowable -unallowably -unallowed -unallowedly -unallowing -unallurable -unallured -unalluring -unalluringly -unallusive -unallusively -unallusiveness -unalmsed -unalone -unaloud -unalphabeted -unalphabetic -unalphabetical -unalphabetised -unalphabetized -unalterability -unalterable -unalterableness -unalterably -unalteration -unalterative -unaltered -unaltering -unalternated -unalternating -unaltruistic -unaltruistically -unamalgamable -unamalgamated -unamalgamating -unamalgamative -unamassed -unamative -unamatively -unamazed -unamazedly -unamazedness -unamazement -unambidextrousness -unambient -unambiently -unambiguity -unambiguous -unambiguously -unambiguousness -unambition -unambitious -unambitiously -unambitiousness -unambrosial -unambulant -unambush -unameliorable -unameliorated -unameliorative -unamenability -unamenable -unamenableness -unamenably -unamend -unamendable -unamended -unamendedly -unamending -unamendment -unamerceable -unamerced -Un-american -Un-americanism -Un-americanization -Un-americanize -Unami -unamiability -unamiable -unamiableness -unamiably -unamicability -unamicable -unamicableness -unamicably -unamiss -unammoniated -unamo -unamorous -unamorously -unamorousness -unamortization -unamortized -unample -unamply -unamplifiable -unamplified -unamputated -unamputative -Unamuno -unamusable -unamusably -unamused -unamusement -unamusing -unamusingly -unamusingness -unamusive -unanachronistic -unanachronistical -unanachronistically -unanachronous -unanachronously -Un-anacreontic -unanaemic -unanalagous -unanalagously -unanalagousness -unanalytic -unanalytical -unanalytically -unanalyzable -unanalyzably -unanalyzed -unanalyzing -unanalogical -unanalogically -unanalogized -unanalogous -unanalogously -unanalogousness -unanarchic -unanarchistic -unanatomisable -unanatomised -unanatomizable -unanatomized -unancestored -unancestried -unanchylosed -unanchor -unanchored -unanchoring -unanchors -unancient -unanecdotal -unanecdotally -unaneled -unanemic -unangelic -unangelical -unangelicalness -unangered -Un-anglican -Un-anglicized -unangry -unangrily -unanguished -unangular -unangularly -unangularness -unanimalized -unanimate -unanimated -unanimatedly -unanimatedness -unanimately -unanimating -unanimatingly -unanime -unanimism -unanimist -unanimistic -unanimistically -unanimiter -unanimity -unanimities -unanimous -unanimously -unanimousness -unannealed -unannex -unannexable -unannexed -unannexedly -unannexedness -unannihilable -unannihilated -unannihilative -unannihilatory -unannoyed -unannoying -unannoyingly -unannotated -unannounced -unannullable -unannulled -unannunciable -unannunciative -unanointed -unanswerability -unanswerable -unanswerableness -unanswerably -unanswered -unanswering -unantagonisable -unantagonised -unantagonising -unantagonistic -unantagonizable -unantagonized -unantagonizing -unanthologized -unanticipated -unanticipatedly -unanticipating -unanticipatingly -unanticipation -unanticipative -unantiquated -unantiquatedness -unantique -unantiquity -unantlered -unanxiety -unanxious -unanxiously -unanxiousness -unapart -unaphasic -unapocryphal -unapologetic -unapologetically -unapologizing -unapostatized -unapostolic -unapostolical -unapostolically -unapostrophized -unappalled -unappalling -unappallingly -unapparel -unappareled -unapparelled -unapparent -unapparently -unapparentness -unappealable -unappealableness -unappealably -unappealed -unappealing -unappealingly -unappealingness -unappeasable -unappeasableness -unappeasably -unappeased -unappeasedly -unappeasedness -unappeasing -unappeasingly -unappendaged -unappended -unapperceived -unapperceptive -unappertaining -unappetising -unappetisingly -unappetizing -unappetizingly -unapplaudable -unapplauded -unapplauding -unapplausive -unappliable -unappliableness -unappliably -unapplianced -unapplicability -unapplicable -unapplicableness -unapplicably -unapplicative -unapplied -unapplying -unappliqued -unappoint -unappointable -unappointableness -unappointed -unapportioned -unapposable -unapposite -unappositely -unappositeness -unappraised -unappreciable -unappreciableness -unappreciably -unappreciated -unappreciating -unappreciation -unappreciative -unappreciatively -unappreciativeness -unapprehendable -unapprehendableness -unapprehendably -unapprehended -unapprehending -unapprehendingness -unapprehensible -unapprehensibleness -unapprehension -unapprehensive -unapprehensively -unapprehensiveness -unapprenticed -unapprised -unapprisedly -unapprisedness -unapprized -unapproachability -unapproachable -unapproachableness -unapproachably -unapproached -unapproaching -unapprobation -unappropriable -unappropriate -unappropriated -unappropriately -unappropriateness -unappropriation -unapprovable -unapprovableness -unapprovably -unapproved -unapproving -unapprovingly -unapproximate -unapproximately -unaproned -unapropos -unapt -unaptitude -unaptly -unaptness -unarbitrary -unarbitrarily -unarbitrariness -unarbitrated -unarbitrative -unarbored -unarboured -unarch -unarchdeacon -unarched -unarching -unarchitected -unarchitectural -unarchitecturally -unarchly -unarduous -unarduously -unarduousness -unare -unarguable -unarguableness -unarguably -unargued -unarguing -unargumentative -unargumentatively -unargumentativeness -unary -unarisen -unarising -unaristocratic -unaristocratically -unarithmetical -unarithmetically -unark -unarm -unarmed -unarmedly -unarmedness -unarming -unarmored -unarmorial -unarmoured -unarms -unaromatic -unaromatically -unaromatized -unarousable -unaroused -unarousing -unarray -unarrayed -unarraignable -unarraignableness -unarraigned -unarranged -unarrestable -unarrested -unarresting -unarrestive -unarrival -unarrived -unarriving -unarrogance -unarrogant -unarrogantly -unarrogated -unarrogating -unarted -unartful -unartfully -unartfulness -unarticled -unarticulate -unarticulated -unarticulately -unarticulative -unarticulatory -unartificial -unartificiality -unartificially -unartificialness -unartistic -unartistical -unartistically -unartistlike -unascendable -unascendableness -unascendant -unascended -unascendent -unascertainable -unascertainableness -unascertainably -unascertained -unascetic -unascetically -unascribed -unashamed -unashamedly -unashamedness -Un-asiatic -unasinous -unaskable -unasked -unasked-for -unasking -unaskingly -unasleep -unaspersed -unaspersive -unasphalted -unaspirated -unaspiring -unaspiringly -unaspiringness -unassayed -unassaying -unassailability -unassailable -unassailableness -unassailably -unassailed -unassailing -unassassinated -unassaultable -unassaulted -unassembled -unassented -unassenting -unassentive -unasserted -unassertive -unassertively -unassertiveness -unassessable -unassessableness -unassessed -unassibilated -unassiduous -unassiduously -unassiduousness -unassignable -unassignably -unassigned -unassimilable -unassimilated -unassimilating -unassimilative -unassistant -unassisted -unassisting -unassociable -unassociably -unassociated -unassociative -unassociatively -unassociativeness -unassoiled -unassorted -unassuageable -unassuaged -unassuaging -unassuasive -unassuetude -unassumable -unassumed -unassumedly -unassuming -unassumingly -unassumingness -unassured -unassuredly -unassuredness -unassuring -unasterisk -unasthmatic -unastonish -unastonished -unastonishment -unastounded -unastray -Un-athenian -unathirst -unathletic -unathletically -unatmospheric -unatonable -unatoned -unatoning -unatrophied -unattach -unattachable -unattached -unattackable -unattackableness -unattackably -unattacked -unattainability -unattainable -unattainableness -unattainably -unattained -unattaining -unattainment -unattaint -unattainted -unattaintedly -unattempered -unattemptable -unattempted -unattempting -unattendance -unattendant -unattended -unattentive -unattentively -unattentiveness -unattenuated -unattenuatedly -unattestable -unattested -unattestedness -Un-attic -unattire -unattired -unattractable -unattractableness -unattracted -unattracting -unattractive -unattractively -unattractiveness -unattributable -unattributably -unattributed -unattributive -unattributively -unattributiveness -unattuned -unau -unauctioned -unaudacious -unaudaciously -unaudaciousness -unaudible -unaudibleness -unaudibly -unaudienced -unaudited -unauditioned -Un-augean -unaugmentable -unaugmentative -unaugmented -unaus -unauspicious -unauspiciously -unauspiciousness -unaustere -unausterely -unaustereness -Un-australian -un-Austrian -unauthentic -unauthentical -unauthentically -unauthenticalness -unauthenticated -unauthenticity -unauthorised -unauthorish -unauthoritative -unauthoritatively -unauthoritativeness -unauthoritied -unauthoritiveness -unauthorizable -unauthorization -unauthorize -unauthorized -unauthorizedly -unauthorizedness -unautistic -unautographed -unautomatic -unautomatically -unautoritied -unautumnal -unavailability -unavailable -unavailableness -unavailably -unavailed -unavailful -unavailing -unavailingly -unavailingness -unavengeable -unavenged -unavenging -unavengingly -unavenued -unaverage -unaveraged -unaverred -unaverse -unaverted -unavertible -unavertibleness -unavertibly -unavian -unavid -unavidly -unavidness -unavoidability -unavoidable -unavoidableness -unavoidably -unavoidal -unavoided -unavoiding -unavouchable -unavouchableness -unavouchably -unavouched -unavowable -unavowableness -unavowably -unavowed -unavowedly -unaway -unawakable -unawakableness -unawake -unawaked -unawakened -unawakenedness -unawakening -unawaking -unawardable -unawardableness -unawardably -unawarded -unaware -unawared -unawaredly -unawarely -unawareness -unawares -unawed -unawful -unawfully -unawfulness -unawkward -unawkwardly -unawkwardness -unawned -unaxed -unaxiomatic -unaxiomatically -unaxised -unaxled -unazotized -unb -Un-babylonian -unbackboarded -unbacked -unbackward -unbacterial -unbadged -unbadgered -unbadgering -unbaffled -unbaffling -unbafflingly -unbag -unbagged -unbay -unbailable -unbailableness -unbailed -unbain -unbait -unbaited -unbaized -unbaked -unbalance -unbalanceable -unbalanceably -unbalanced -unbalancement -unbalancing -unbalconied -unbale -unbaled -unbaling -unbalked -unbalking -unbalkingly -unballast -unballasted -unballasting -unballoted -unbandage -unbandaged -unbandaging -unbanded -unbane -unbangled -unbanished -unbank -unbankable -unbankableness -unbankably -unbanked -unbankrupt -unbanned -unbannered -unbantering -unbanteringly -unbaptised -unbaptize -unbaptized -unbar -unbarb -unbarbarise -unbarbarised -unbarbarising -unbarbarize -unbarbarized -unbarbarizing -unbarbarous -unbarbarously -unbarbarousness -unbarbed -unbarbered -unbarded -unbare -unbargained -unbark -unbarking -unbaronet -unbarrable -unbarred -unbarrel -unbarreled -unbarrelled -unbarren -unbarrenly -unbarrenness -unbarricade -unbarricaded -unbarricading -unbarricadoed -unbarring -unbars -unbartered -unbartering -unbase -unbased -unbasedness -unbashful -unbashfully -unbashfulness -unbasket -unbasketlike -unbastardised -unbastardized -unbaste -unbasted -unbastilled -unbastinadoed -unbated -unbathed -unbating -unbatted -unbatten -unbatterable -unbattered -unbattling -unbe -unbeached -unbeaconed -unbeaded -unbeamed -unbeaming -unbear -unbearable -unbearableness -unbearably -unbeard -unbearded -unbeared -unbearing -unbears -unbeast -unbeatable -unbeatableness -unbeatably -unbeaten -unbeaued -unbeauteous -unbeauteously -unbeauteousness -unbeautify -unbeautified -unbeautiful -unbeautifully -unbeautifulness -unbeavered -unbeckoned -unbeclogged -unbeclouded -unbecome -unbecoming -unbecomingly -unbecomingness -unbed -unbedabbled -unbedaggled -unbedashed -unbedaubed -unbedded -unbedecked -unbedewed -unbedimmed -unbedinned -unbedizened -unbedraggled -unbefit -unbefitting -unbefittingly -unbefittingness -unbefool -unbefriend -unbefriended -unbefringed -unbeget -unbeggar -unbeggarly -unbegged -unbegilt -unbeginning -unbeginningly -unbeginningness -unbegirded -unbegirt -unbegot -unbegotten -unbegottenly -unbegottenness -unbegreased -unbegrimed -unbegrudged -unbeguile -unbeguiled -unbeguileful -unbeguiling -unbegun -unbehaving -unbeheaded -unbeheld -unbeholdable -unbeholden -unbeholdenness -unbeholding -unbehoveful -unbehoving -unbeing -unbejuggled -unbeknown -unbeknownst -unbelied -unbelief -unbeliefful -unbelieffulness -unbeliefs -unbelievability -unbelievable -unbelievableness -unbelievably -unbelieve -unbelieved -unbeliever -unbelievers -unbelieving -unbelievingly -unbelievingness -unbell -unbellicose -unbelligerent -unbelligerently -unbelonging -unbeloved -unbelt -unbelted -unbelting -unbelts -unbemoaned -unbemourned -unbench -unbend -unbendable -unbendableness -unbendably -unbended -unbender -unbending -unbendingly -unbendingness -unbends -unbendsome -unbeneficed -unbeneficent -unbeneficently -unbeneficial -unbeneficially -unbeneficialness -unbenefitable -unbenefited -unbenefiting -unbenetted -unbenevolence -unbenevolent -unbenevolently -unbenevolentness -unbenight -unbenighted -unbenign -unbenignant -unbenignantly -unbenignity -unbenignly -unbenignness -unbent -unbenumb -unbenumbed -unbequeathable -unbequeathed -unbereaved -unbereaven -unbereft -unberouged -unberth -unberufen -unbeseeching -unbeseechingly -unbeseem -unbeseeming -unbeseemingly -unbeseemingness -unbeseemly -unbeset -unbesieged -unbesmeared -unbesmirched -unbesmutted -unbesot -unbesotted -unbesought -unbespeak -unbespoke -unbespoken -unbesprinkled -unbestarred -unbestowed -unbet -unbeteared -unbethink -unbethought -unbetide -unbetoken -unbetray -unbetrayed -unbetraying -unbetrothed -unbetterable -unbettered -unbeveled -unbevelled -unbewailed -unbewailing -unbeware -unbewilder -unbewildered -unbewilderedly -unbewildering -unbewilderingly -unbewilled -unbewitch -unbewitched -unbewitching -unbewitchingly -unbewrayed -unbewritten -unbias -unbiasable -unbiased -unbiasedly -unbiasedness -unbiasing -unbiassable -unbiassed -unbiassedly -unbiassing -unbiblical -Un-biblical -Un-biblically -unbibulous -unbibulously -unbibulousness -unbickered -unbickering -unbid -unbidable -unbiddable -unbidden -unbigamous -unbigamously -unbigged -unbigoted -unbigotedness -unbilious -unbiliously -unbiliousness -unbillable -unbilled -unbillet -unbilleted -unbind -unbindable -unbinding -unbinds -unbinned -unbiographical -unbiographically -unbiological -unbiologically -unbirdly -unbirdlike -unbirdlimed -unbirthday -unbishop -unbishoped -unbishoply -unbit -unbiting -unbitt -unbitted -unbitten -unbitter -unbitting -unblacked -unblackened -unblade -unbladed -unblading -unblamability -unblamable -unblamableness -unblamably -unblamed -unblameworthy -unblameworthiness -unblaming -unblanched -unblanketed -unblasphemed -unblasted -unblazoned -unbleached -unbleaching -unbled -unbleeding -unblemishable -unblemished -unblemishedness -unblemishing -unblenched -unblenching -unblenchingly -unblendable -unblended -unblent -unbless -unblessed -unblessedness -unblest -unblighted -unblightedly -unblightedness -unblind -unblinded -unblindfold -unblindfolded -unblinding -unblinking -unblinkingly -unbliss -unblissful -unblissfully -unblissfulness -unblistered -unblithe -unblithely -unblock -unblockaded -unblocked -unblocking -unblocks -unblooded -unbloody -unbloodied -unbloodily -unbloodiness -unbloom -unbloomed -unblooming -unblossomed -unblossoming -unblotted -unblottedness -unbloused -unblown -unblued -unbluestockingish -unbluffable -unbluffed -unbluffing -unblunder -unblundered -unblundering -unblunted -unblurred -unblush -unblushing -unblushingly -unblushingness -unblusterous -unblusterously -unboarded -unboasted -unboastful -unboastfully -unboastfulness -unboasting -unboat -unbobbed -unbody -unbodied -unbodily -unbodylike -unbodiliness -unboding -unbodkined -unbog -unboggy -unbohemianize -unboy -unboyish -unboyishly -unboyishness -unboiled -unboylike -unboisterous -unboisterously -unboisterousness -unbokel -unbold -unbolden -unboldly -unboldness -unbolled -unbolster -unbolstered -unbolt -unbolted -unbolting -unbolts -unbombarded -unbombast -unbombastic -unbombastically -unbombed -unbondable -unbondableness -unbonded -unbone -unboned -unbonnet -unbonneted -unbonneting -unbonnets -unbonny -unbooked -unbookish -unbookishly -unbookishness -unbooklearned -unboot -unbooted -unboraxed -unborder -unbordered -unbored -unboring -unborn -unborne -unborough -unborrowed -unborrowing -unbosom -unbosomed -unbosomer -unbosoming -unbosoms -unbossed -Un-bostonian -unbotanical -unbothered -unbothering -unbottle -unbottled -unbottling -unbottom -unbottomed -unbought -unbouncy -unbound -unboundable -unboundableness -unboundably -unbounded -unboundedly -unboundedness -unboundless -unbounteous -unbounteously -unbounteousness -unbountiful -unbountifully -unbountifulness -unbow -unbowable -unbowdlerized -unbowed -unbowel -unboweled -unbowelled -unbowered -unbowing -unbowingness -unbowled -unbowsome -unbox -unboxed -unboxes -unboxing -unbrace -unbraced -unbracedness -unbracelet -unbraceleted -unbraces -unbracing -unbracketed -unbragged -unbragging -Un-brahminic -un-Brahminical -unbraid -unbraided -unbraiding -unbraids -unbrailed -unbrained -unbrake -unbraked -unbrakes -unbran -unbranched -unbranching -unbrand -unbranded -unbrandied -unbrave -unbraved -unbravely -unbraveness -unbrawling -unbrawny -unbraze -unbrazen -unbrazenly -unbrazenness -Un-brazilian -unbreachable -unbreachableness -unbreachably -unbreached -unbreaded -unbreakability -unbreakable -unbreakableness -unbreakably -unbreakfasted -unbreaking -unbreast -unbreath -unbreathable -unbreathableness -unbreatheable -unbreathed -unbreathing -unbred -unbreech -unbreeched -unbreeches -unbreeching -unbreezy -unbrent -unbrewed -unbribable -unbribableness -unbribably -unbribed -unbribing -unbrick -unbricked -unbridegroomlike -unbridgeable -unbridged -unbridle -unbridled -unbridledly -unbridledness -unbridles -unbridling -unbrief -unbriefed -unbriefly -unbriefness -unbright -unbrightened -unbrightly -unbrightness -unbrilliant -unbrilliantly -unbrilliantness -unbrimming -unbrined -unbristled -Un-british -unbrittle -unbrittleness -unbrittness -unbroached -unbroad -unbroadcast -unbroadcasted -unbroadened -unbrocaded -unbroid -unbroidered -unbroiled -unbroke -unbroken -unbrokenly -unbrokenness -unbronzed -unbrooch -unbrooded -unbrooding -unbrookable -unbrookably -unbrothered -unbrotherly -unbrotherlike -unbrotherliness -unbrought -unbrown -unbrowned -unbrowsing -unbruised -unbrushable -unbrushed -unbrutalise -unbrutalised -unbrutalising -unbrutalize -unbrutalized -unbrutalizing -unbrute -unbrutelike -unbrutify -unbrutise -unbrutised -unbrutising -unbrutize -unbrutized -unbrutizing -unbuckle -unbuckled -unbuckles -unbuckling -unbuckramed -unbud -unbudded -Un-buddhist -unbudding -unbudgeability -unbudgeable -unbudgeableness -unbudgeably -unbudged -unbudgeted -unbudging -unbudgingly -unbuffed -unbuffered -unbuffeted -unbuyable -unbuyableness -unbuying -unbuild -unbuilded -unbuilding -unbuilds -unbuilt -unbulky -unbulled -unbulletined -unbullied -unbullying -unbumped -unbumptious -unbumptiously -unbumptiousness -unbunched -unbundle -unbundled -unbundles -unbundling -unbung -unbungling -unbuoyant -unbuoyantly -unbuoyed -unburden -unburdened -unburdening -unburdenment -unburdens -unburdensome -unburdensomeness -unbureaucratic -unbureaucratically -unburgessed -unburglarized -unbury -unburiable -unburial -unburied -unburlesqued -unburly -unburn -unburnable -unburnableness -unburned -unburning -unburnished -unburnt -unburrow -unburrowed -unburst -unburstable -unburstableness -unburthen -unbush -unbusy -unbusied -unbusily -unbusiness -unbusinesslike -unbusk -unbuskin -unbuskined -unbusted -unbustling -unbutchered -unbutcherlike -unbuttered -unbutton -unbuttoned -unbuttoning -unbuttonment -unbuttons -unbuttressed -unbuxom -unbuxomly -unbuxomness -unc -unca -uncabined -uncabled -uncacophonous -uncadenced -uncage -uncaged -uncages -uncaging -uncajoling -uncake -uncaked -uncakes -uncaking -uncalamitous -uncalamitously -uncalcareous -uncalcified -uncalcined -uncalculable -uncalculableness -uncalculably -uncalculated -uncalculatedly -uncalculatedness -uncalculating -uncalculatingly -uncalculative -uncalendared -uncalendered -uncalibrated -uncalk -uncalked -uncall -uncalled -uncalled-for -uncallous -uncallously -uncallousness -uncallow -uncallower -uncallused -uncalm -uncalmative -uncalmed -uncalmly -uncalmness -uncalorific -uncalumniated -uncalumniative -uncalumnious -uncalumniously -uncambered -uncamerated -uncamouflaged -uncamp -uncampaigning -uncamped -uncamphorated -uncanalized -uncancelable -uncanceled -uncancellable -uncancelled -uncancerous -uncandid -uncandidly -uncandidness -uncandied -uncandled -uncandor -uncandour -uncaned -uncankered -uncanned -uncanny -uncannier -uncanniest -uncannily -uncanniness -uncanonic -uncanonical -uncanonically -uncanonicalness -uncanonicity -uncanonisation -uncanonise -uncanonised -uncanonising -uncanonization -uncanonize -uncanonized -uncanonizing -uncanopied -uncantoned -uncantonized -uncanvassably -uncanvassed -uncap -uncapable -uncapableness -uncapably -uncapacious -uncapaciously -uncapaciousness -uncapacitate -uncaparisoned -uncaped -uncapering -uncapitalised -uncapitalistic -uncapitalized -uncapitulated -uncapitulating -uncapped -uncapper -uncapping -uncapricious -uncapriciously -uncapriciousness -uncaps -uncapsizable -uncapsized -uncapsuled -uncaptained -uncaptioned -uncaptious -uncaptiously -uncaptiousness -uncaptivate -uncaptivated -uncaptivating -uncaptivative -uncaptived -uncapturable -uncaptured -uncaramelised -uncaramelized -uncarbonated -uncarboned -uncarbonized -uncarbureted -uncarburetted -uncarded -uncardinal -uncardinally -uncared-for -uncareful -uncarefully -uncarefulness -uncaressed -uncaressing -uncaressingly -uncargoed -Uncaria -uncaricatured -uncaring -uncarnate -uncarnivorous -uncarnivorously -uncarnivorousness -uncaroled -uncarolled -uncarousing -uncarpentered -uncarpeted -uncarriageable -uncarried -uncart -uncarted -uncartooned -uncarved -uncascaded -uncascading -uncase -uncased -uncasemated -uncases -uncashed -uncasing -uncask -uncasked -uncasketed -uncasque -uncassock -uncast -uncaste -uncastigated -uncastigative -uncastle -uncastled -uncastrated -uncasual -uncasually -uncasualness -Uncasville -uncataloged -uncatalogued -uncatastrophic -uncatastrophically -uncatchable -uncatchy -uncate -uncatechised -uncatechisedness -uncatechized -uncatechizedness -uncategorical -uncategorically -uncategoricalness -uncategorised -uncategorized -uncatenated -uncatered -uncatering -uncathartic -uncathedraled -uncatholcity -uncatholic -uncatholical -uncatholicalness -uncatholicise -uncatholicised -uncatholicising -uncatholicity -uncatholicize -uncatholicized -uncatholicizing -uncatholicly -uncaucusable -uncaught -uncausable -uncausal -uncausative -uncausatively -uncausativeness -uncause -uncaused -uncaustic -uncaustically -uncautelous -uncauterized -uncautioned -uncautious -uncautiously -uncautiousness -uncavalier -uncavalierly -uncave -uncavernous -uncavernously -uncaviling -uncavilling -uncavitied -unceasable -unceased -unceasing -unceasingly -unceasingness -unceded -unceiled -unceilinged -uncelebrated -uncelebrating -uncelestial -uncelestialized -uncelibate -uncellar -uncement -uncemented -uncementing -uncensorable -uncensored -uncensorious -uncensoriously -uncensoriousness -uncensurability -uncensurable -uncensurableness -uncensured -uncensuring -uncenter -uncentered -uncentral -uncentralised -uncentrality -uncentralized -uncentrally -uncentre -uncentred -uncentric -uncentrical -uncentripetal -uncentury -uncephalic -uncerated -uncerebric -uncereclothed -unceremented -unceremonial -unceremonially -unceremonious -unceremoniously -unceremoniousness -unceriferous -uncertain -uncertainly -uncertainness -uncertainty -uncertainties -uncertifiable -uncertifiablely -uncertifiableness -uncertificated -uncertified -uncertifying -uncertitude -uncessant -uncessantly -uncessantness -unchafed -unchaffed -unchaffing -unchagrined -unchain -unchainable -unchained -unchaining -unchains -unchair -unchaired -unchalked -unchalky -unchallengable -unchallengeable -unchallengeableness -unchallengeably -unchallenged -unchallenging -unchambered -unchamfered -unchampioned -unchance -unchanceable -unchanced -unchancellor -unchancy -unchange -unchangeability -unchangeable -unchangeableness -unchangeably -unchanged -unchangedness -unchangeful -unchangefully -unchangefulness -unchanging -unchangingly -unchangingness -unchanneled -unchannelized -unchannelled -unchanted -unchaotic -unchaotically -unchaperoned -unchaplain -unchapleted -unchapped -unchapter -unchaptered -uncharacter -uncharactered -uncharacterised -uncharacteristic -uncharacteristically -uncharacterized -uncharge -unchargeable -uncharged -uncharges -uncharging -unchary -uncharily -unchariness -unchariot -uncharitable -uncharitableness -uncharitably -uncharity -uncharm -uncharmable -uncharmed -uncharming -uncharnel -uncharred -uncharted -unchartered -unchased -unchaste -unchastely -unchastened -unchasteness -unchastisable -unchastised -unchastising -unchastity -unchastities -unchatteled -unchattering -unchauffeured -unchauvinistic -unchawed -uncheapened -uncheaply -uncheat -uncheated -uncheating -uncheck -uncheckable -unchecked -uncheckered -uncheckmated -uncheerable -uncheered -uncheerful -uncheerfully -uncheerfulness -uncheery -uncheerily -uncheeriness -uncheering -unchemical -unchemically -uncherished -uncherishing -unchested -unchevroned -unchewable -unchewableness -unchewed -unchic -unchicly -unchid -unchidden -unchided -unchiding -unchidingly -unchild -unchildish -unchildishly -unchildishness -unchildlike -unchilled -unchiming -Un-chinese -unchinked -unchippable -unchipped -unchipping -unchiseled -unchiselled -unchivalry -unchivalric -unchivalrous -unchivalrously -unchivalrousness -unchloridized -unchlorinated -unchoicely -unchokable -unchoke -unchoked -unchokes -unchoking -uncholeric -unchoosable -unchopped -unchoral -unchorded -unchosen -unchrisom -unchrist -unchristen -unchristened -unchristian -un-Christianise -un-Christianised -un-Christianising -unchristianity -unchristianize -un-Christianize -unchristianized -un-Christianized -un-Christianizing -unchristianly -un-Christianly -unchristianlike -un-Christianlike -unchristianliness -unchristianness -Un-christly -Un-christlike -Un-christlikeness -Un-christliness -Un-christmaslike -unchromatic -unchromed -unchronic -unchronically -unchronicled -unchronological -unchronologically -unchurch -unchurched -unchurches -unchurching -unchurchly -unchurchlike -unchurlish -unchurlishly -unchurlishness -unchurn -unchurned -unci -uncia -unciae -uncial -uncialize -uncially -uncials -unciatim -uncicatrized -unciferous -unciform -unciforms -unciliated -uncinal -Uncinaria -uncinariasis -uncinariatic -Uncinata -uncinate -uncinated -uncinatum -uncinch -uncinct -uncinctured -uncini -uncynical -uncynically -Uncinula -uncinus -UNCIO -uncipher -uncypress -uncircled -uncircuitous -uncircuitously -uncircuitousness -uncircular -uncircularised -uncircularized -uncircularly -uncirculated -uncirculating -uncirculative -uncircumcised -uncircumcisedness -uncircumcision -uncircumlocutory -uncircumscribable -uncircumscribed -uncircumscribedness -uncircumscript -uncircumscriptible -uncircumscription -uncircumspect -uncircumspection -uncircumspective -uncircumspectly -uncircumspectness -uncircumstanced -uncircumstantial -uncircumstantialy -uncircumstantially -uncircumvented -uncirostrate -uncitable -uncite -unciteable -uncited -uncity -uncitied -uncitizen -uncitizenly -uncitizenlike -uncivic -uncivil -uncivilisable -uncivilish -uncivility -uncivilizable -uncivilization -uncivilize -uncivilized -uncivilizedly -uncivilizedness -uncivilizing -uncivilly -uncivilness -unclad -unclay -unclayed -unclaimed -unclaiming -unclamorous -unclamorously -unclamorousness -unclamp -unclamped -unclamping -unclamps -unclandestinely -unclannish -unclannishly -unclannishness -unclarified -unclarifying -unclarity -unclashing -unclasp -unclasped -unclasping -unclasps -unclassable -unclassableness -unclassably -unclassed -unclassible -unclassical -unclassically -unclassify -unclassifiable -unclassifiableness -unclassifiably -unclassification -unclassified -unclassifying -unclawed -UNCLE -unclead -unclean -uncleanable -uncleaned -uncleaner -uncleanest -uncleanly -uncleanlily -uncleanliness -uncleanness -uncleannesses -uncleansable -uncleanse -uncleansed -uncleansedness -unclear -unclearable -uncleared -unclearer -unclearest -unclearing -unclearly -unclearness -uncleavable -uncleave -uncledom -uncleft -unclehood -unclement -unclemently -unclementness -unclench -unclenched -unclenches -unclenching -unclergy -unclergyable -unclerical -unclericalize -unclerically -unclericalness -unclerkly -unclerklike -uncles -uncle's -uncleship -unclever -uncleverly -uncleverness -unclew -unclick -uncliented -unclify -unclimactic -unclimaxed -unclimb -unclimbable -unclimbableness -unclimbably -unclimbed -unclimbing -unclinch -unclinched -unclinches -unclinching -uncling -unclinging -unclinical -unclip -unclipped -unclipper -unclipping -unclips -uncloak -uncloakable -uncloaked -uncloaking -uncloaks -unclog -unclogged -unclogging -unclogs -uncloyable -uncloyed -uncloying -uncloister -uncloistered -uncloistral -unclosable -unclose -unclosed -uncloses -uncloseted -unclosing -unclot -unclothe -unclothed -unclothedly -unclothedness -unclothes -unclothing -unclotted -unclotting -uncloud -unclouded -uncloudedly -uncloudedness -uncloudy -unclouding -unclouds -unclout -uncloven -unclub -unclubable -unclubbable -unclubby -unclustered -unclustering -unclutch -unclutchable -unclutched -unclutter -uncluttered -uncluttering -unco -uncoach -uncoachable -uncoachableness -uncoached -uncoacted -uncoagulable -uncoagulated -uncoagulating -uncoagulative -uncoalescent -uncoarse -uncoarsely -uncoarseness -uncoat -uncoated -uncoatedness -uncoaxable -uncoaxal -uncoaxed -uncoaxial -uncoaxing -uncobbled -uncock -uncocked -uncocking -uncockneyfy -uncocks -uncocted -uncodded -uncoddled -uncoded -uncodified -uncoerced -uncoffer -uncoffin -uncoffined -uncoffining -uncoffins -uncoffle -uncoft -uncogent -uncogently -uncogged -uncogitable -uncognisable -uncognizable -uncognizant -uncognized -uncognoscibility -uncognoscible -uncoguidism -uncoherent -uncoherently -uncoherentness -uncohesive -uncohesively -uncohesiveness -uncoy -uncoif -uncoifed -uncoiffed -uncoil -uncoiled -uncoyly -uncoiling -uncoils -uncoin -uncoincided -uncoincident -uncoincidental -uncoincidentally -uncoincidently -uncoinciding -uncoined -uncoyness -uncoked -uncoking -uncoly -uncolike -uncollaborative -uncollaboratively -uncollapsable -uncollapsed -uncollapsible -uncollar -uncollared -uncollaring -uncollated -uncollatedness -uncollectable -uncollected -uncollectedly -uncollectedness -uncollectible -uncollectibleness -uncollectibles -uncollectibly -uncollective -uncollectively -uncolleged -uncollegian -uncollegiate -uncolloquial -uncolloquially -uncollusive -uncolonellike -uncolonial -uncolonise -uncolonised -uncolonising -uncolonize -uncolonized -uncolonizing -uncolorable -uncolorably -uncolored -uncoloredly -uncoloredness -uncolourable -uncolourably -uncoloured -uncolouredly -uncolouredness -uncolt -uncombable -uncombatable -uncombatant -uncombated -uncombative -uncombed -uncombinable -uncombinableness -uncombinably -uncombinational -uncombinative -uncombine -uncombined -uncombining -uncombiningness -uncombustible -uncombustive -uncome -uncome-at-able -un-come-at-able -un-come-at-ableness -un-come-at-ably -uncomely -uncomelier -uncomeliest -uncomelily -uncomeliness -uncomfy -uncomfort -uncomfortable -uncomfortableness -uncomfortably -uncomforted -uncomforting -uncomic -uncomical -uncomically -uncommanded -uncommandedness -uncommanderlike -uncommemorated -uncommemorative -uncommemoratively -uncommenced -uncommendable -uncommendableness -uncommendably -uncommendatory -uncommended -uncommensurability -uncommensurable -uncommensurableness -uncommensurate -uncommensurately -uncommented -uncommenting -uncommerciable -uncommercial -uncommercially -uncommercialness -uncommingled -uncomminuted -uncommiserated -uncommiserating -uncommiserative -uncommiseratively -uncommissioned -uncommitted -uncommitting -uncommixed -uncommodious -uncommodiously -uncommodiousness -uncommon -uncommonable -uncommoner -uncommones -uncommonest -uncommonly -uncommonness -uncommonplace -uncommunicable -uncommunicableness -uncommunicably -uncommunicated -uncommunicating -uncommunicative -uncommunicatively -uncommunicativeness -uncommutable -uncommutative -uncommutatively -uncommutativeness -uncommuted -uncompact -uncompacted -Uncompahgre -uncompahgrite -uncompaniable -uncompanied -uncompanionability -uncompanionable -uncompanioned -uncomparable -uncomparableness -uncomparably -uncompared -uncompartmentalize -uncompartmentalized -uncompartmentalizes -uncompass -uncompassability -uncompassable -uncompassed -uncompassion -uncompassionate -uncompassionated -uncompassionately -uncompassionateness -uncompassionating -uncompassioned -uncompatible -uncompatibly -uncompellable -uncompelled -uncompelling -uncompendious -uncompensable -uncompensated -uncompensating -uncompensative -uncompensatory -uncompetent -uncompetently -uncompetitive -uncompetitively -uncompetitiveness -uncompiled -uncomplacent -uncomplacently -uncomplained -uncomplaining -uncomplainingly -uncomplainingness -uncomplaint -uncomplaisance -uncomplaisant -uncomplaisantly -uncomplemental -uncomplementally -uncomplementary -uncomplemented -uncompletable -uncomplete -uncompleted -uncompletely -uncompleteness -uncomplex -uncomplexity -uncomplexly -uncomplexness -uncompliability -uncompliable -uncompliableness -uncompliably -uncompliance -uncompliant -uncompliantly -uncomplicated -uncomplicatedness -uncomplication -uncomplying -uncomplimentary -uncomplimented -uncomplimenting -uncomportable -uncomposable -uncomposeable -uncomposed -uncompound -uncompoundable -uncompounded -uncompoundedly -uncompoundedness -uncompounding -uncomprehend -uncomprehended -uncomprehending -uncomprehendingly -uncomprehendingness -uncomprehened -uncomprehensible -uncomprehensibleness -uncomprehensibly -uncomprehension -uncomprehensive -uncomprehensively -uncomprehensiveness -uncompressed -uncompressible -uncomprised -uncomprising -uncomprisingly -uncompromisable -uncompromised -uncompromising -uncompromisingly -uncompromisingness -uncompt -uncompulsive -uncompulsively -uncompulsory -uncomputable -uncomputableness -uncomputably -uncomputed -uncomraded -unconcatenated -unconcatenating -unconcealable -unconcealableness -unconcealably -unconcealed -unconcealedly -unconcealing -unconcealingly -unconcealment -unconceded -unconceding -unconceited -unconceitedly -unconceivable -unconceivableness -unconceivably -unconceived -unconceiving -unconcentrated -unconcentratedly -unconcentrative -unconcentric -unconcentrically -unconceptual -unconceptualized -unconceptually -unconcern -unconcerned -unconcernedly -unconcernedlies -unconcernedness -unconcerning -unconcernment -unconcertable -unconcerted -unconcertedly -unconcertedness -unconcessible -unconciliable -unconciliated -unconciliatedness -unconciliating -unconciliative -unconciliatory -unconcludable -unconcluded -unconcludent -unconcluding -unconcludingness -unconclusive -unconclusively -unconclusiveness -unconcocted -unconcordant -unconcordantly -unconcrete -unconcreted -unconcretely -unconcreteness -unconcurred -unconcurrent -unconcurrently -unconcurring -uncondemnable -uncondemned -uncondemning -uncondemningly -uncondensable -uncondensableness -uncondensably -uncondensational -uncondensed -uncondensing -uncondescending -uncondescendingly -uncondescension -uncondited -uncondition -unconditional -unconditionality -unconditionally -unconditionalness -unconditionate -unconditionated -unconditionately -unconditioned -unconditionedly -unconditionedness -uncondolatory -uncondoled -uncondoling -uncondoned -uncondoning -unconducing -unconducive -unconducively -unconduciveness -unconducted -unconductible -unconductive -unconductiveness -unconfected -unconfederated -unconferred -unconfess -unconfessed -unconfessing -unconfided -unconfidence -unconfident -unconfidential -unconfidentialness -unconfidently -unconfiding -unconfinable -unconfine -unconfined -unconfinedly -unconfinedness -unconfinement -unconfining -unconfirm -unconfirmability -unconfirmable -unconfirmative -unconfirmatory -unconfirmed -unconfirming -unconfiscable -unconfiscated -unconfiscatory -unconflicting -unconflictingly -unconflictingness -unconflictive -unconform -unconformability -unconformable -unconformableness -unconformably -unconformed -unconformedly -unconforming -unconformism -unconformist -unconformity -unconformities -unconfound -unconfounded -unconfoundedly -unconfounding -unconfoundingly -unconfrontable -unconfronted -unconfusable -unconfusably -unconfused -unconfusedly -unconfusing -unconfutability -unconfutable -unconfutative -unconfuted -unconfuting -uncongeal -uncongealable -uncongealed -uncongenial -uncongeniality -uncongenially -uncongested -uncongestive -unconglobated -unconglomerated -unconglutinated -unconglutinative -uncongratulate -uncongratulated -uncongratulating -uncongratulatory -uncongregated -uncongregational -uncongregative -uncongressional -uncongruous -uncongruously -uncongruousness -unconical -unconjecturable -unconjectural -unconjectured -unconjoined -unconjugal -unconjugated -unconjunctive -unconjured -unconnected -unconnectedly -unconnectedness -unconned -unconnived -unconniving -unconnotative -unconquerable -unconquerableness -unconquerably -unconquered -unconquest -unconscienced -unconscient -unconscientious -unconscientiously -unconscientiousness -unconscionability -unconscionable -unconscionableness -unconscionably -unconscious -unconsciously -unconsciousness -unconsciousnesses -unconsecrate -unconsecrated -unconsecratedly -unconsecratedness -unconsecration -unconsecrative -unconsecutive -unconsecutively -unconsent -unconsentaneous -unconsentaneously -unconsentaneousness -unconsented -unconsentient -unconsenting -unconsequential -unconsequentially -unconsequentialness -unconservable -unconservative -unconservatively -unconservativeness -unconserved -unconserving -unconsiderable -unconsiderablely -unconsiderate -unconsiderately -unconsiderateness -unconsidered -unconsideredly -unconsideredness -unconsidering -unconsideringly -unconsignable -unconsigned -unconsistent -unconsociable -unconsociated -unconsolability -unconsolable -unconsolably -unconsolatory -unconsoled -unconsolidated -unconsolidating -unconsolidation -unconsoling -unconsolingly -unconsonancy -unconsonant -unconsonantly -unconsonous -unconspicuous -unconspicuously -unconspicuousness -unconspired -unconspiring -unconspiringly -unconspiringness -unconstancy -unconstant -unconstantly -unconstantness -unconstellated -unconsternated -unconstipated -unconstituted -unconstitutional -unconstitutionalism -unconstitutionality -unconstitutionally -unconstrainable -unconstrained -unconstrainedly -unconstrainedness -unconstraining -unconstraint -unconstricted -unconstrictive -unconstruable -unconstructed -unconstructive -unconstructively -unconstructural -unconstrued -unconsular -unconsult -unconsultable -unconsultative -unconsultatory -unconsulted -unconsulting -unconsumable -unconsumed -unconsuming -unconsummate -unconsummated -unconsummately -unconsummative -unconsumptive -unconsumptively -uncontacted -uncontagious -uncontagiously -uncontainable -uncontainableness -uncontainably -uncontained -uncontaminable -uncontaminate -uncontaminated -uncontaminative -uncontemned -uncontemnedly -uncontemning -uncontemningly -uncontemplable -uncontemplated -uncontemplative -uncontemplatively -uncontemplativeness -uncontemporaneous -uncontemporaneously -uncontemporaneousness -uncontemporary -uncontemptibility -uncontemptible -uncontemptibleness -uncontemptibly -uncontemptuous -uncontemptuously -uncontemptuousness -uncontended -uncontending -uncontent -uncontentable -uncontented -uncontentedly -uncontentedness -uncontenting -uncontentingness -uncontentious -uncontentiously -uncontentiousness -uncontestability -uncontestable -uncontestablely -uncontestableness -uncontestably -uncontestant -uncontested -uncontestedly -uncontestedness -uncontiguous -uncontiguously -uncontiguousness -uncontinence -uncontinent -uncontinental -uncontinented -uncontinently -uncontingent -uncontingently -uncontinual -uncontinually -uncontinued -uncontinuous -uncontinuously -uncontorted -uncontortedly -uncontortioned -uncontortive -uncontoured -uncontract -uncontracted -uncontractedness -uncontractile -uncontradictable -uncontradictablely -uncontradictableness -uncontradictably -uncontradicted -uncontradictedly -uncontradictious -uncontradictive -uncontradictory -uncontrastable -uncontrastably -uncontrasted -uncontrasting -uncontrastive -uncontrastively -uncontributed -uncontributing -uncontributive -uncontributively -uncontributiveness -uncontributory -uncontrite -uncontriteness -uncontrived -uncontriving -uncontrol -uncontrollability -uncontrollable -uncontrollableness -uncontrollably -uncontrolled -uncontrolledly -uncontrolledness -uncontrolling -uncontroversial -uncontroversially -uncontrovertable -uncontrovertableness -uncontrovertably -uncontroverted -uncontrovertedly -uncontrovertible -uncontrovertibleness -uncontrovertibly -uncontumacious -uncontumaciously -uncontumaciousness -unconveyable -unconveyed -unconvenable -unconvened -unconvenial -unconvenience -unconvenient -unconveniently -unconvening -unconventional -unconventionalism -unconventionality -unconventionalities -unconventionalize -unconventionalized -unconventionalizes -unconventionally -unconventioned -unconverged -unconvergent -unconverging -unconversable -unconversableness -unconversably -unconversance -unconversant -unconversational -unconversing -unconversion -unconvert -unconverted -unconvertedly -unconvertedness -unconvertibility -unconvertible -unconvertibleness -unconvertibly -unconvicted -unconvicting -unconvictive -unconvince -unconvinced -unconvincedly -unconvincedness -unconvincibility -unconvincible -unconvincing -unconvincingly -unconvincingness -unconvoyed -unconvolute -unconvoluted -unconvolutely -unconvulsed -unconvulsive -unconvulsively -unconvulsiveness -uncookable -uncooked -uncool -uncooled -uncoop -uncooped -uncooperating -un-co-operating -uncooperative -un-co-operative -uncooperatively -uncooperativeness -uncoopered -uncooping -uncoordinate -un-co-ordinate -uncoordinated -un-co-ordinated -uncoordinately -uncoordinateness -uncope -uncopiable -uncopyable -uncopied -uncopious -uncopyrighted -uncoquettish -uncoquettishly -uncoquettishness -uncord -uncorded -uncordial -uncordiality -uncordially -uncordialness -uncording -uncore -uncored -uncoring -uncork -uncorked -uncorker -uncorking -uncorks -uncorned -uncorner -uncornered -uncoronated -uncoroneted -uncorporal -uncorpulent -uncorpulently -uncorrect -uncorrectable -uncorrectablely -uncorrected -uncorrectible -uncorrective -uncorrectly -uncorrectness -uncorrelated -uncorrelatedly -uncorrelative -uncorrelatively -uncorrelativeness -uncorrelativity -uncorrespondency -uncorrespondent -uncorresponding -uncorrespondingly -uncorridored -uncorrigible -uncorrigibleness -uncorrigibly -uncorroborant -uncorroborated -uncorroborative -uncorroboratively -uncorroboratory -uncorroded -uncorrugated -uncorrupt -uncorrupted -uncorruptedly -uncorruptedness -uncorruptibility -uncorruptible -uncorruptibleness -uncorruptibly -uncorrupting -uncorruption -uncorruptive -uncorruptly -uncorruptness -uncorseted -uncorven -uncos -uncosseted -uncost -uncostly -uncostliness -uncostumed -uncottoned -uncouch -uncouched -uncouching -uncounselable -uncounseled -uncounsellable -uncounselled -uncountable -uncountableness -uncountably -uncounted -uncountenanced -uncounteracted -uncounterbalanced -uncounterfeit -uncounterfeited -uncountermandable -uncountermanded -uncountervailed -uncountess -uncountrified -uncouple -uncoupled -uncoupler -uncouples -uncoupling -uncourageous -uncourageously -uncourageousness -uncoursed -uncourted -uncourteous -uncourteously -uncourteousness -uncourtesy -uncourtesies -uncourtierlike -uncourting -uncourtly -uncourtlike -uncourtliness -uncous -uncousinly -uncouth -uncouthie -uncouthly -uncouthness -uncouthsome -uncovenable -uncovenant -uncovenanted -uncover -uncoverable -uncovered -uncoveredly -uncovering -uncovers -uncoveted -uncoveting -uncovetingly -uncovetous -uncovetously -uncovetousness -uncow -uncowed -uncowl -uncracked -uncradled -uncrafty -uncraftily -uncraftiness -uncraggy -uncram -uncramp -uncramped -uncrampedness -uncranked -uncrannied -uncrate -uncrated -uncrates -uncrating -uncravatted -uncraven -uncraving -uncravingly -uncrazed -uncrazy -uncream -uncreased -uncreatability -uncreatable -uncreatableness -uncreate -uncreated -uncreatedness -uncreates -uncreating -uncreation -uncreative -uncreatively -uncreativeness -uncreativity -uncreaturely -uncredentialed -uncredentialled -uncredibility -uncredible -uncredibly -uncredit -uncreditable -uncreditableness -uncreditably -uncredited -uncrediting -uncredulous -uncredulously -uncredulousness -uncreeping -uncreosoted -uncrest -uncrested -uncrevassed -uncrib -uncribbed -uncribbing -uncried -uncrying -uncrime -uncriminal -uncriminally -uncringing -uncrinkle -uncrinkled -uncrinkling -uncrippled -uncrisp -uncrystaled -uncrystalled -uncrystalline -uncrystallisable -uncrystallizability -uncrystallizable -uncrystallized -uncritical -uncritically -uncriticalness -uncriticisable -uncriticisably -uncriticised -uncriticising -uncriticisingly -uncriticism -uncriticizable -uncriticizably -uncriticized -uncriticizing -uncriticizingly -uncrochety -uncrook -uncrooked -uncrookedly -uncrooking -uncropped -uncropt -uncross -uncrossable -uncrossableness -uncrossed -uncrosses -uncrossexaminable -uncrossexamined -uncross-examined -uncrossing -uncrossly -uncrowded -uncrown -uncrowned -uncrowning -uncrowns -uncrucified -uncrudded -uncrude -uncrudely -uncrudeness -uncrudity -uncruel -uncruelly -uncruelness -uncrumbled -uncrumple -uncrumpled -uncrumpling -uncrushable -uncrushed -uncrusted -uncs -unct -UNCTAD -unction -unctional -unctioneer -unctionless -unctions -unctious -unctiousness -unctorian -unctorium -unctuarium -unctuose -unctuosity -unctuous -unctuously -unctuousness -uncubbed -uncubic -uncubical -uncubically -uncubicalness -uncuckold -uncuckolded -uncudgeled -uncudgelled -uncuffed -uncular -unculled -uncullibility -uncullible -unculpable -unculted -uncultivability -uncultivable -uncultivatable -uncultivate -uncultivated -uncultivatedness -uncultivation -unculturable -unculture -uncultured -unculturedness -uncumber -uncumbered -uncumbrous -uncumbrously -uncumbrousness -uncumulative -uncunning -uncunningly -uncunningness -uncupped -uncurable -uncurableness -uncurably -uncurb -uncurbable -uncurbed -uncurbedly -uncurbing -uncurbs -uncurd -uncurdled -uncurdling -uncured -uncurious -uncuriously -uncurl -uncurled -uncurling -uncurls -uncurrent -uncurrently -uncurrentness -uncurricularized -uncurried -uncurse -uncursed -uncursing -uncurst -uncurtailable -uncurtailably -uncurtailed -uncurtain -uncurtained -uncurved -uncurving -uncus -uncushioned -uncusped -uncustomable -uncustomary -uncustomarily -uncustomariness -uncustomed -uncut -uncute -uncuth -uncuticulate -uncuttable -undabbled -undaggled -undaily -undainty -undaintily -undaintiness -undallying -undam -undamageable -undamaged -undamaging -undamasked -undammed -undamming -undamn -undamnified -undampable -undamped -undampened -undanceable -undancing -undandiacal -undandled -undangered -undangerous -undangerously -undangerousness -undapper -undappled -undared -undaring -undaringly -undark -undarken -undarkened -undarned -undashed -undatable -undate -undateable -undated -undatedness -undaub -undaubed -undaughter -undaughterly -undaughterliness -undauntable -undaunted -undauntedly -undauntedness -undaunting -undawned -undawning -undazed -undazing -undazzle -undazzled -undazzling -unde -undead -undeadened -undeadly -undeadlocked -undeaf -undealable -undealt -undean -undear -undebarred -undebased -undebatable -undebatably -undebated -undebating -undebauched -undebauchedness -undebilitated -undebilitating -undebilitative -undebited -undec- -undecadent -undecadently -undecagon -undecayable -undecayableness -undecayed -undecayedness -undecaying -undecanaphthene -undecane -undecatoic -undeceased -undeceitful -undeceitfully -undeceitfulness -undeceivability -undeceivable -undeceivableness -undeceivably -undeceive -undeceived -undeceiver -undeceives -undeceiving -undecency -undecennary -undecennial -undecent -undecently -undeception -undeceptious -undeceptitious -undeceptive -undeceptively -undeceptiveness -undecidable -undecide -undecided -undecidedly -undecidedness -undeciding -undecyl -undecylene -undecylenic -undecylic -undecillion -undecillionth -undecimal -undeciman -undecimole -undecipher -undecipherability -undecipherable -undecipherably -undeciphered -undecision -undecisive -undecisively -undecisiveness -undeck -undecked -undeclaimed -undeclaiming -undeclamatory -undeclarable -undeclarative -undeclare -undeclared -undeclinable -undeclinableness -undeclinably -undeclined -undeclining -undecocted -undecoic -undecoyed -undecolic -undecomposable -undecomposed -undecompounded -undecorated -undecorative -undecorous -undecorously -undecorousness -undecorticated -undecreased -undecreasing -undecreasingly -undecree -undecreed -undecrepit -undecretive -undecretory -undecried -undedicate -undedicated -undeduced -undeducible -undeducted -undeductible -undeductive -undeductively -undee -undeeded -undeemed -undeemous -undeemously -undeep -undeepened -undeeply -undefaceable -undefaced -undefalcated -undefamatory -undefamed -undefaming -undefatigable -undefaulted -undefaulting -undefeasible -undefeat -undefeatable -undefeatableness -undefeatably -undefeated -undefeatedly -undefeatedness -undefecated -undefectible -undefective -undefectively -undefectiveness -undefendable -undefendableness -undefendably -undefendant -undefended -undefending -undefense -undefensed -undefensible -undefensibleness -undefensibly -undefensive -undefensively -undefensiveness -undeferential -undeferentially -undeferrable -undeferrably -undeferred -undefiable -undefiably -undefiant -undefiantly -undeficient -undeficiently -undefied -undefilable -undefiled -undefiledly -undefiledness -undefinability -undefinable -undefinableness -undefinably -undefine -undefined -undefinedly -undefinedness -undefinite -undefinitely -undefiniteness -undefinitive -undefinitively -undefinitiveness -undeflectability -undeflectable -undeflected -undeflective -undeflowered -undeformable -undeformed -undeformedness -undefrayed -undefrauded -undeft -undeftly -undeftness -undegeneracy -undegenerate -undegenerated -undegenerateness -undegenerating -undegenerative -undegraded -undegrading -undeify -undeification -undeified -undeifying -undeistical -undejected -undejectedly -undejectedness -undelayable -undelayed -undelayedly -undelaying -undelayingly -undelated -undelectability -undelectable -undelectably -undelegated -undeleted -undeleterious -undeleteriously -undeleteriousness -undeliberate -undeliberated -undeliberately -undeliberateness -undeliberating -undeliberatingly -undeliberative -undeliberatively -undeliberativeness -undelible -undelicious -undeliciously -undelight -undelighted -undelightedly -undelightful -undelightfully -undelightfulness -undelighting -undelightsome -undelylene -undelimited -undelineable -undelineated -undelineative -undelinquent -undelinquently -undelirious -undeliriously -undeliverable -undeliverableness -undelivered -undelivery -undeludable -undelude -undeluded -undeludedly -undeluding -undeluged -undelusive -undelusively -undelusiveness -undelusory -undelve -undelved -undemagnetizable -undemanded -undemanding -undemandingness -undemised -undemocratic -undemocratically -undemocratisation -undemocratise -undemocratised -undemocratising -undemocratization -undemocratize -undemocratized -undemocratizing -undemolishable -undemolished -undemonstrable -undemonstrableness -undemonstrably -undemonstratable -undemonstrated -undemonstrational -undemonstrative -undemonstratively -undemonstrativeness -undemoralized -undemure -undemurely -undemureness -undemurring -unden -undeniability -undeniable -undeniableness -undeniably -undenied -undeniedly -undenizened -undenominated -undenominational -undenominationalism -undenominationalist -undenominationalize -undenominationally -undenotable -undenotative -undenotatively -undenoted -undenounced -undented -undenuded -undenunciated -undenunciatory -undepartableness -undepartably -undeparted -undeparting -undependability -undependable -undependableness -undependably -undependent -undepending -undephlegmated -undepicted -undepleted -undeplored -undeported -undeposable -undeposed -undeposited -undepraved -undepravedness -undeprecated -undeprecating -undeprecatingly -undeprecative -undeprecatively -undepreciable -undepreciated -undepreciative -undepreciatory -undepressed -undepressible -undepressing -undepressive -undepressively -undepressiveness -undeprivable -undeprived -undepurated -undeputed -undeputized -under -under- -underabyss -underaccident -underaccommodated -underachieve -underachieved -underachievement -underachiever -underachievers -underachieves -underachieving -underact -underacted -underacting -underaction -under-action -underactivity -underactor -underacts -underadjustment -underadmiral -underadventurer -underage -underagency -underagent -underages -underagitation -underaid -underaim -underair -underalderman -underaldermen -underanged -underappreciated -underarch -underargue -underarm -underarming -underarms -underassessed -underassessment -underate -underaverage -underback -underbailiff -underbake -underbaked -underbaking -underbalance -underbalanced -underbalancing -underballast -underbank -underbarber -underbarring -underbasal -underbeadle -underbeak -underbeam -underbear -underbearer -underbearing -underbeat -underbeaten -underbed -underbedding -underbeing -underbelly -underbellies -underbeveling -underbevelling -underbid -underbidder -underbidders -underbidding -underbids -underbill -underbillow -underbind -underbishop -underbishopric -underbit -underbite -underbitted -underbitten -underboard -underboated -underbody -under-body -underbodice -underbodies -underboy -underboil -underboom -underborn -underborne -underbottom -underbough -underbought -underbound -underbowed -underbowser -underbox -underbrace -underbraced -underbracing -underbranch -underbreath -under-breath -underbreathing -underbred -underbreeding -underbrew -underbridge -underbridged -underbridging -underbrigadier -underbright -underbrim -underbrush -underbrushes -underbubble -underbud -underbudde -underbudded -underbudding -underbudgeted -underbuds -underbuy -underbuying -underbuild -underbuilder -underbuilding -underbuilt -underbuys -underbuoy -underbury -underburn -underburned -underburnt -underbursar -underbush -underbutler -undercanopy -undercanvass -undercap -undercapitaled -undercapitalization -undercapitalize -undercapitalized -undercapitalizing -undercaptain -undercarder -undercarry -undercarriage -under-carriage -undercarriages -undercarried -undercarrying -undercart -undercarter -undercarve -undercarved -undercarving -undercase -undercasing -undercast -undercause -underceiling -undercellar -undercellarer -underchamber -underchamberlain -underchancellor -underchanter -underchap -under-chap -undercharge -undercharged -undercharges -undercharging -underchief -underchime -underchin -underchord -underchurched -undercircle -undercircled -undercircling -undercitizen -undercitizenry -undercitizenries -underclad -undercladding -underclay -underclass -underclassman -underclassmen -underclearer -underclerk -underclerks -underclerkship -undercliff -underclift -undercloak -undercloth -underclothe -underclothed -underclothes -underclothing -underclothings -underclub -underclutch -undercoachman -undercoachmen -undercoat -undercoated -undercoater -undercoating -undercoatings -undercoats -undercollector -undercolor -undercolored -undercoloring -undercommander -undercomment -undercompounded -underconcerned -undercondition -underconsciousness -underconstable -underconstumble -underconsume -underconsumed -underconsuming -underconsumption -undercook -undercooked -undercooking -undercooks -undercool -undercooled -undercooper -undercorrect -undercountenance -undercourse -undercoursed -undercoursing -undercourtier -undercover -undercovering -undercovert -under-covert -undercraft -undercrawl -undercreep -undercrest -undercry -undercrier -undercrypt -undercroft -undercrop -undercrossing -undercrust -undercumstand -undercup -undercurl -undercurrent -undercurrents -undercurve -undercurved -undercurving -undercut -undercuts -undercutter -undercutting -underdauber -underdeacon -underdead -underdealer -underdealing -underdebauchee -underdeck -under-deck -underdegreed -underdepth -underdevelop -underdevelope -underdeveloped -underdevelopement -underdeveloping -underdevelopment -underdevil -underdialogue -underdid -underdig -underdigging -underdip -under-dip -underdish -underdistinction -underdistributor -underditch -underdive -underdo -underdoctor -underdoer -underdoes -underdog -underdogs -underdoing -underdone -underdose -underdosed -underdosing -underdot -underdotted -underdotting -underdown -underdraft -underdrag -underdrain -underdrainage -underdrainer -underdraught -underdraw -underdrawers -underdrawing -underdrawn -underdress -underdressed -underdresses -underdressing -underdrew -underdry -underdried -underdrift -underdrying -underdrive -underdriven -underdrudgery -underdrumming -underdug -underdunged -underearth -under-earth -undereat -undereate -undereaten -undereating -undereats -underedge -undereducated -undereducation -undereye -undereyed -undereying -underemphasis -underemphasize -underemphasized -underemphasizes -underemphasizing -underemployed -underemployment -underengraver -underenter -underer -underescheator -underestimate -under-estimate -underestimated -underestimates -underestimating -underestimation -underestimations -underexcited -underexercise -underexercised -underexercising -underexpose -underexposed -underexposes -underexposing -underexposure -underexposures -underface -underfaced -underfacing -underfaction -underfactor -underfaculty -underfalconer -underfall -underfarmer -underfeathering -underfeature -underfed -underfeed -underfeeder -underfeeding -underfeeds -underfeel -underfeeling -underfeet -underfellow -underfelt -underffed -underfiend -underfill -underfilling -underfinance -underfinanced -underfinances -underfinancing -underfind -underfire -underfired -underfitting -underflame -underflannel -underfleece -underflood -underfloor -underflooring -underflow -underflowed -underflowing -underflows -underfo -underfold -underfolded -underfong -underfoot -underfootage -underfootman -underfootmen -underforebody -underform -underfortify -underfortified -underfortifying -underframe -under-frame -underframework -underframing -underfreight -underfrequency -underfrequencies -underfringe -underfrock -underfur -underfurnish -underfurnished -underfurnisher -underfurrow -underfurs -undergabble -undergage -undergamekeeper -undergaoler -undergarb -undergardener -undergarment -under-garment -undergarments -undergarnish -undergauge -undergear -undergeneral -undergentleman -undergentlemen -undergird -undergirded -undergirder -undergirding -undergirdle -undergirds -undergirt -undergirth -underglaze -under-glaze -undergloom -underglow -undergnaw -undergo -undergod -undergods -undergoer -undergoes -undergoing -undergone -undergore -undergos -undergoverness -undergovernment -undergovernor -undergown -undergrad -undergrade -undergrads -undergraduate -undergraduatedom -undergraduateness -undergraduates -undergraduate's -undergraduateship -undergraduatish -undergraduette -undergraining -undergrass -undergreen -undergrieve -undergroan -undergrope -underground -undergrounder -undergroundling -undergroundness -undergrounds -undergrove -undergrow -undergrowl -undergrown -undergrowth -undergrowths -undergrub -underguard -underguardian -undergunner -underhabit -underhammer -underhand -underhanded -underhandedly -underhandedness -underhandednesses -underhang -underhanging -underhangman -underhangmen -underhatch -underhead -underheat -underheaven -underhelp -underhew -underhid -underhill -underhint -underhistory -underhive -underhold -underhole -underhonest -underhorse -underhorsed -underhorseman -underhorsemen -underhorsing -underhoused -underhousemaid -underhum -underhung -underided -underyield -underinstrument -underinsurance -underinsured -underyoke -underisible -underisive -underisively -underisiveness -underisory -underissue -underivable -underivative -underivatively -underived -underivedly -underivedness -underjacket -underjailer -underjanitor -underjaw -under-jaw -underjawed -underjaws -underjobbing -underjoin -underjoint -underjudge -underjudged -underjudging -underjungle -underkeel -underkeep -underkeeper -underkind -underking -under-king -underkingdom -underlaborer -underlabourer -underlay -underlaid -underlayer -underlayers -underlaying -underlayment -underlain -underlays -underland -underlanguaged -underlap -underlapped -underlapper -underlapping -underlaps -underlash -underlaundress -underlawyer -underleaf -underlease -underleased -underleasing -underleather -underlegate -underlessee -underlet -underlets -underletter -underletting -underlevel -underlever -underli -underly -underlid -underlie -underlye -underlielay -underlier -underlies -underlieutenant -underlife -underlift -underlight -underlying -underlyingly -underliking -underlimbed -underlimit -underline -underlineation -underlined -underlineman -underlinemen -underlinement -underlinen -underliner -underlines -underling -underlings -underling's -underlining -underlinings -underlip -underlips -underlit -underlive -underload -underloaded -underlock -underlodging -underloft -underlook -underlooker -underlout -underlunged -undermade -undermaid -undermaker -underman -undermanager -undermanned -undermanning -undermark -undermarshal -undermarshalman -undermarshalmen -undermasted -undermaster -undermatch -undermatched -undermate -undermath -undermeal -undermeaning -undermeasure -undermeasured -undermeasuring -undermediator -undermelody -undermelodies -undermentioned -under-mentioned -undermiller -undermimic -underminable -undermine -undermined -underminer -undermines -undermining -underminingly -underminister -underministry -undermirth -undermist -undermoated -undermoney -undermoral -undermost -undermotion -undermount -undermountain -undermusic -undermuslin -undern -undernam -undername -undernamed -undernatural -underneath -underness -underniceness -undernim -undernome -undernomen -undernote -undernoted -undernourish -undernourished -undernourishment -undernourishments -undernsong -underntide -underntime -undernumen -undernurse -undernutrition -underoccupied -underofficer -underofficered -underofficial -underofficials -underogating -underogative -underogatively -underogatory -underopinion -underorb -underorganisation -underorganization -underorseman -underoverlooker -underoxidise -underoxidised -underoxidising -underoxidize -underoxidized -underoxidizing -underpacking -underpay -underpaid -underpaying -underpayment -underpain -underpainting -underpays -underpan -underpants -underpart -underparticipation -underpartner -underparts -underpass -underpasses -underpassion -underpeep -underpeer -underpen -underpeopled -underpetticoat -under-petticoat -underpetticoated -underpick -underpicked -underpier -underpilaster -underpile -underpin -underpinned -underpinner -underpinning -underpinnings -underpins -underpitch -underpitched -underplay -underplayed -underplaying -underplain -underplays -underplan -underplant -underplanted -underplanting -underplate -underply -underplot -underplotter -underpoint -underpole -underpopulate -underpopulated -underpopulating -underpopulation -underporch -underporter -underpose -underpossessor -underpot -underpower -underpowered -underpraise -underpraised -underprefect -underprentice -underprepared -underpresence -underpresser -underpressure -underpry -underprice -underpriced -underprices -underpricing -underpriest -underprincipal -underprint -underprior -underprivileged -underprize -underprized -underprizing -underproduce -underproduced -underproducer -underproduces -underproducing -underproduction -underproductive -underproficient -underprompt -underprompter -underproof -underprop -underproportion -underproportioned -underproposition -underpropped -underpropper -underpropping -underprospect -underpuke -underpull -underpuller -underput -underqualified -underqueen -underquote -underquoted -underquoting -underran -underranger -underrate -underrated -underratement -underrates -underrating -underreach -underread -underreader -underrealise -underrealised -underrealising -underrealize -underrealized -underrealizing -underrealm -underream -underreamer -underreceiver -underreckon -underreckoning -underrecompense -underrecompensed -underrecompensing -underregion -underregistration -underrent -underrented -underrenting -underreport -underrepresent -underrepresentation -underrepresented -underrespected -underriddle -underriding -underrigged -underring -underripe -underripened -underriver -underroarer -underroast -underrobe -underrogue -underroll -underroller -underroof -underroom -underroot -underrooted -under-round -underrower -underrule -underruled -underruler -underruling -underrun -under-runner -underrunning -underruns -Unders -undersacristan -undersay -undersail -undersailed -undersally -undersap -undersatisfaction -undersaturate -undersaturated -undersaturation -undersavior -undersaw -undersawyer -underscale -underscheme -underschool -underscoop -underscore -underscored -underscores -underscoring -underscribe -underscriber -underscript -underscrub -underscrupulous -underscrupulously -undersea -underseal -underseam -underseaman -undersearch -underseas -underseated -undersecretary -under-secretary -undersecretariat -undersecretaries -undersecretaryship -undersect -undersee -underseeded -underseedman -underseeing -underseen -undersell -underseller -underselling -undersells -undersense -undersequence -underservant -underserve -underservice -underset -undersets -undersetter -undersetting -undersettle -undersettler -undersettling -undersexed -undersexton -undershapen -undersharp -undersheathing -undershepherd -undersheriff -undersheriffry -undersheriffship -undersheriffwick -undershield -undershine -undershining -undershire -undershirt -undershirts -undershoe -undershone -undershoot -undershooting -undershore -undershored -undershoring -undershorten -undershorts -undershot -undershrievalty -undershrieve -undershrievery -undershrub -undershrubby -undershrubbiness -undershrubs -undershunter -undershut -underside -undersides -undersight -undersighted -undersign -undersignalman -undersignalmen -undersigned -undersigner -undersill -undersinging -undersitter -undersize -undersized -under-sized -undersky -underskin -underskirt -under-skirt -underskirts -undersleep -undersleeping -undersleeve -underslept -underslip -underslope -undersluice -underslung -undersneer -undersociety -undersoil -undersold -undersole -undersomething -undersong -undersorcerer -undersort -undersoul -undersound -undersovereign -undersow -underspan -underspar -undersparred -underspecies -underspecify -underspecified -underspecifying -underspend -underspending -underspends -underspent -undersphere -underspin -underspinner -undersplice -underspliced -undersplicing -underspore -underspread -underspreading -underspring -undersprout -underspurleather -undersquare -undersshot -understaff -understaffed -understage -understay -understain -understairs -understamp -understand -understandability -understandable -understandableness -understandably -understanded -understander -understanding -understandingly -understandingness -understandings -understands -understate -understated -understatement -understatements -understates -understating -understeer -understem -understep -understeward -under-steward -understewardship -understimuli -understimulus -understock -understocking -understood -understory -understrain -understrap -understrapped -understrapper -understrapping -understrata -understratum -understratums -understream -understrength -understress -understrew -understrewed -understricken -understride -understriding -understrife -understrike -understriking -understring -understroke -understruck -understruction -understructure -understructures -understrung -understudy -understudied -understudies -understudying -understuff -understuffing -undersuck -undersuggestion -undersuit -undersupply -undersupplied -undersupplies -undersupplying -undersupport -undersurface -under-surface -underswain -underswamp -undersward -underswearer -undersweat -undersweep -undersweeping -underswell -underswept -undertakable -undertake -undertakement -undertaken -undertaker -undertakery -undertakerish -undertakerly -undertakerlike -undertakers -undertakes -undertaking -undertakingly -undertakings -undertalk -undertapster -undertaught -undertax -undertaxed -undertaxes -undertaxing -underteach -underteacher -underteaching -underteamed -underteller -undertenancy -undertenant -undertenter -undertenure -underterrestrial -undertest -underthane -underthaw -under-the-counter -under-the-table -underthief -underthing -underthings -underthink -underthirst -underthought -underthroating -underthrob -underthrust -undertide -undertided -undertie -undertied -undertying -undertime -under-time -undertimed -undertint -undertype -undertyrant -undertitle -undertone -undertoned -undertones -undertook -undertow -undertows -undertrade -undertraded -undertrader -undertrading -undertrain -undertrained -undertread -undertreasurer -under-treasurer -undertreat -undertribe -undertrick -undertrodden -undertruck -undertrump -undertruss -undertub -undertune -undertuned -undertunic -undertuning -underturf -underturn -underturnkey -undertutor -undertwig -underused -underusher -underutilization -underutilize -undervaluation -undervalue -undervalued -undervaluement -undervaluer -undervalues -undervaluing -undervaluingly -undervaluinglike -undervalve -undervassal -undervaulted -undervaulting -undervegetation -underventilate -underventilated -underventilating -underventilation -underverse -undervest -undervicar -underviewer -undervillain -undervinedresser -undervitalized -undervocabularied -undervoice -undervoltage -underwage -underway -underwaist -underwaistcoat -underwaists -underwalk -underward -underwarden -underwarmth -underwarp -underwash -underwatch -underwatcher -underwater -underwaters -underwave -underwaving -underweapon -underwear -underwears -underweft -underweigh -underweight -underweighted -underwent -underwheel -underwhistle -underwind -underwinding -underwinds -underwing -underwit -underwitch -underwitted -Underwood -underwooded -underwool -underwork -underworked -underworker -underworking -underworkman -underworkmen -underworld -underworlds -underwound -underwrap -underwrapped -underwrapping -underwrit -underwrite -underwriter -underwriters -underwrites -underwriting -underwritten -underwrote -underwrought -underzeal -underzealot -underzealous -underzealously -underzealousness -undescendable -undescended -undescendent -undescendible -undescending -undescribable -undescribableness -undescribably -undescribed -undescried -undescrying -undescript -undescriptive -undescriptively -undescriptiveness -undesecrated -undesert -undeserted -undeserting -undeserve -undeserved -undeservedly -undeservedness -undeserver -undeserving -undeservingly -undeservingness -undesiccated -undesign -undesignated -undesignative -undesigned -undesignedly -undesignedness -undesigning -undesigningly -undesigningness -undesirability -undesirable -undesirableness -undesirably -undesire -undesired -undesiredly -undesiring -undesirous -undesirously -undesirousness -undesisting -undespaired -undespairing -undespairingly -undespatched -undespised -undespising -undespoiled -undespondent -undespondently -undesponding -undespondingly -undespotic -undespotically -undestined -undestitute -undestroyable -undestroyed -undestructible -undestructibleness -undestructibly -undestructive -undestructively -undestructiveness -undetachable -undetached -undetachment -undetailed -undetainable -undetained -undetectable -undetectably -undetected -undetectible -undeteriorated -undeteriorating -undeteriorative -undeterminable -undeterminableness -undeterminably -undeterminate -undetermination -undetermined -undeterminedly -undeterminedness -undetermining -undeterrability -undeterrable -undeterrably -undeterred -undeterring -undetestability -undetestable -undetestableness -undetestably -undetested -undetesting -undethronable -undethroned -undetonated -undetracting -undetractingly -undetractive -undetractively -undetractory -undetrimental -undetrimentally -undevastated -undevastating -undevastatingly -undevelopable -undeveloped -undeveloping -undevelopment -undevelopmental -undevelopmentally -undeviable -undeviated -undeviating -undeviatingly -undeviation -undevil -undevilish -undevious -undeviously -undeviousness -undevisable -undevised -undevoted -undevotion -undevotional -undevoured -undevout -undevoutly -undevoutness -undewed -undewy -undewily -undewiness -undexterous -undexterously -undexterousness -undextrous -undextrously -undextrousness -undflow -undy -undiabetic -undyable -undiademed -undiagnosable -undiagnosed -undiagramed -undiagrammatic -undiagrammatical -undiagrammatically -undiagrammed -undialed -undialyzed -undialled -undiametric -undiametrical -undiametrically -undiamonded -undiapered -undiaphanous -undiaphanously -undiaphanousness -undiatonic -undiatonically -undichotomous -undichotomously -undictated -undictatorial -undictatorially -undid -undidactic -undye -undyeable -undyed -undies -undieted -undifferenced -undifferent -undifferentiable -undifferentiably -undifferential -undifferentiated -undifferentiating -undifferentiation -undifferently -undiffering -undifficult -undifficultly -undiffident -undiffidently -undiffracted -undiffractive -undiffractively -undiffractiveness -undiffused -undiffusible -undiffusive -undiffusively -undiffusiveness -undig -undigenous -undigest -undigestable -undigested -undigestible -undigesting -undigestion -undigged -undight -undighted -undigitated -undigne -undignify -undignified -undignifiedly -undignifiedness -undigressive -undigressively -undigressiveness -undying -undyingly -undyingness -undiked -undilapidated -undilatable -undilated -undilating -undilative -undilatory -undilatorily -undiligent -undiligently -undilute -undiluted -undiluting -undilution -undiluvial -undiluvian -undim -undimensioned -undimerous -undimidiate -undimidiated -undiminishable -undiminishableness -undiminishably -undiminished -undiminishing -undiminutive -undimly -undimmed -undimpled -undynamic -undynamically -undynamited -Undine -undined -undines -undinted -undiocesed -undiphthongize -undiplomaed -undiplomatic -undiplomatically -undipped -undirect -undirected -undirectional -undirectly -undirectness -undirk -Undis -undisabled -undisadvantageous -undisagreeable -undisappearing -undisappointable -undisappointed -undisappointing -undisarmed -undisastrous -undisastrously -undisbanded -undisbarred -undisburdened -undisbursed -undiscardable -undiscarded -undiscernable -undiscernably -undiscerned -undiscernedly -undiscernible -undiscernibleness -undiscernibly -undiscerning -undiscerningly -undiscerningness -undischargeable -undischarged -undiscipled -undisciplinable -undiscipline -undisciplined -undisciplinedness -undisclaimed -undisclosable -undisclose -undisclosed -undisclosing -undiscolored -undiscoloured -undiscomfitable -undiscomfited -undiscomposed -undisconcerted -undisconnected -undisconnectedly -undiscontinued -undiscordant -undiscordantly -undiscording -undiscountable -undiscounted -undiscourageable -undiscouraged -undiscouraging -undiscouragingly -undiscoursed -undiscoverability -undiscoverable -undiscoverableness -undiscoverably -undiscovered -undiscreditable -undiscredited -undiscreet -undiscreetly -undiscreetness -undiscretion -undiscriminated -undiscriminating -undiscriminatingly -undiscriminatingness -undiscriminative -undiscriminativeness -undiscriminatory -undiscursive -undiscussable -undiscussed -undisdained -undisdaining -undiseased -undisestablished -undisfigured -undisfranchised -undisfulfilled -undisgorged -undisgraced -undisguisable -undisguise -undisguised -undisguisedly -undisguisedness -undisguising -undisgusted -undisheartened -undished -undisheveled -undishonored -undisillusioned -undisinfected -undisinheritable -undisinherited -undisintegrated -undisinterested -undisjoined -undisjointed -undisliked -undislocated -undislodgeable -undislodged -undismay -undismayable -undismayed -undismayedly -undismantled -undismembered -undismissed -undismounted -undisobedient -undisobeyed -undisobliging -undisordered -undisorderly -undisorganized -undisowned -undisowning -undisparaged -undisparity -undispassionate -undispassionately -undispassionateness -undispatchable -undispatched -undispatching -undispellable -undispelled -undispensable -undispensed -undispensing -undispersed -undispersing -undisplaceable -undisplaced -undisplay -undisplayable -undisplayed -undisplaying -undisplanted -undispleased -undispose -undisposed -undisposedness -undisprivacied -undisprovable -undisproved -undisproving -undisputable -undisputableness -undisputably -undisputatious -undisputatiously -undisputatiousness -undisputed -undisputedly -undisputedness -undisputing -undisqualifiable -undisqualified -undisquieted -undisreputable -undisrobed -undisrupted -undissected -undissembled -undissembledness -undissembling -undissemblingly -undisseminated -undissenting -undissevered -undissimulated -undissimulating -undissipated -undissociated -undissoluble -undissolute -undissoluteness -undissolvable -undissolved -undissolving -undissonant -undissonantly -undissuadable -undissuadably -undissuade -undistanced -undistant -undistantly -undistasted -undistasteful -undistempered -undistend -undistended -undistilled -undistinct -undistinctive -undistinctly -undistinctness -undistinguish -undistinguishable -undistinguishableness -undistinguishably -undistinguished -undistinguishedness -undistinguishing -undistinguishingly -undistorted -undistortedly -undistorting -undistracted -undistractedly -undistractedness -undistracting -undistractingly -undistrained -undistraught -undistress -undistressed -undistributed -undistrusted -undistrustful -undistrustfully -undistrustfulness -undisturbable -undisturbance -undisturbed -undisturbedly -undisturbedness -undisturbing -undisturbingly -unditched -undithyrambic -undittoed -undiuretic -undiurnal -undiurnally -undivable -undivergent -undivergently -undiverging -undiverse -undiversely -undiverseness -undiversified -undiverted -undivertible -undivertibly -undiverting -undivertive -undivested -undivestedly -undividable -undividableness -undividably -undivided -undividedly -undividedness -undividing -undividual -undivinable -undivined -undivinely -undivinelike -undivining -undivisible -undivisive -undivisively -undivisiveness -undivorceable -undivorced -undivorcedness -undivorcing -undivulgable -undivulgeable -undivulged -undivulging -undizened -undizzied -undo -undoable -undocible -undocile -undock -undocked -undocketed -undocking -undocks -undoctor -undoctored -undoctrinal -undoctrinally -undoctrined -undocumentary -undocumented -undocumentedness -undodged -undoer -undoers -undoes -undoffed -undog -undogmatic -undogmatical -undogmatically -undoing -undoingness -undoings -undolled -undolorous -undolorously -undolorousness -undomed -undomestic -undomesticable -undomestically -undomesticate -undomesticated -undomestication -undomicilable -undomiciled -undominated -undominative -undomineering -undominical -Un-dominican -undominoed -undon -undonated -undonating -undone -undoneness -undonkey -undonnish -undoomed -undoped -Un-doric -undormant -undose -undosed -undoting -undotted -undouble -undoubled -undoubles -undoubling -undoubtable -undoubtableness -undoubtably -undoubted -undoubtedly -undoubtedness -undoubtful -undoubtfully -undoubtfulness -undoubting -undoubtingly -undoubtingness -undouched -undoughty -undovelike -undoweled -undowelled -undowered -undowned -undowny -undrab -undraftable -undrafted -undrag -undragoned -undragooned -undrainable -undrained -undramatic -undramatical -undramatically -undramatisable -undramatizable -undramatized -undrape -undraped -undraperied -undrapes -undraping -undraw -undrawable -undrawing -undrawn -undraws -undreaded -undreadful -undreadfully -undreading -undreamed -undreamed-of -undreamy -undreaming -undreamlike -undreamt -undredged -undreggy -undrenched -undress -undressed -undresses -undressing -undrest -undrew -Undry -undryable -undried -undrifting -undrying -undrillable -undrilled -undrinkable -undrinkableness -undrinkably -undrinking -undripping -undrivable -undrivableness -undriven -UNDRO -undronelike -undrooping -undropped -undropsical -undrossy -undrossily -undrossiness -undrowned -undrubbed -undrugged -undrunk -undrunken -undrunkenness -Undset -undualistic -undualistically -undualize -undub -undubbed -undubious -undubiously -undubiousness -undubitable -undubitably -undubitative -undubitatively -unducal -unduchess -unductile -undue -unduelling -undueness -undug -unduke -undulance -undulancy -undulant -undular -undularly -undulatance -undulate -undulated -undulately -undulates -undulating -undulatingly -undulation -undulationist -undulations -undulative -undulator -undulatory -undulatus -unduly -undull -undulled -undullness -unduloid -undulose -undulous -undumbfounded -undumped -unduncelike -undunged -undupability -undupable -unduped -unduplicability -unduplicable -unduplicated -unduplicative -unduplicity -undurability -undurable -undurableness -undurably -undure -undust -undusted -undusty -unduteous -unduteously -unduteousness -unduty -undutiable -undutiful -undutifully -undutifulness -undwarfed -undwellable -undwelt -undwindling -Une -uneager -uneagerly -uneagerness -uneagled -uneared -unearly -unearned -unearnest -unearnestly -unearnestness -unearth -unearthed -unearthing -unearthly -unearthliness -unearths -unease -uneaseful -uneasefulness -uneases -uneasy -uneasier -uneasiest -uneasily -uneasiness -uneasinesses -uneastern -uneatable -uneatableness -uneated -uneaten -uneath -uneaths -uneating -uneaved -unebbed -unebbing -unebriate -unebullient -uneccentric -uneccentrically -unecclesiastic -unecclesiastical -unecclesiastically -unechoed -unechoic -unechoing -uneclectic -uneclectically -uneclipsed -uneclipsing -unecliptic -unecliptical -unecliptically -uneconomic -uneconomical -uneconomically -uneconomicalness -uneconomizing -unecstatic -unecstatically -unedacious -unedaciously -uneddied -uneddying -unedge -unedged -unedging -unedible -unedibleness -unedibly -unedificial -unedified -unedifying -uneditable -unedited -uneducable -uneducableness -uneducably -uneducate -uneducated -uneducatedly -uneducatedness -uneducative -uneduced -Uneeda -UNEF -uneffable -uneffaceable -uneffaceably -uneffaced -uneffected -uneffectible -uneffective -uneffectively -uneffectiveness -uneffectless -uneffectual -uneffectually -uneffectualness -uneffectuated -uneffeminate -uneffeminated -uneffeminately -uneffeness -uneffervescent -uneffervescently -uneffete -uneffeteness -unefficacious -unefficaciously -unefficient -uneffigiated -uneffulgent -uneffulgently -uneffused -uneffusing -uneffusive -uneffusively -uneffusiveness -unegal -unegally -unegalness -Un-egyptian -unegoist -unegoistical -unegoistically -unegotistical -unegotistically -unegregious -unegregiously -unegregiousness -uneye -uneyeable -uneyed -unejaculated -unejected -unejective -unelaborate -unelaborated -unelaborately -unelaborateness -unelapsed -unelastic -unelastically -unelasticity -unelated -unelating -unelbowed -unelderly -unelect -unelectable -unelected -unelective -unelectric -unelectrical -unelectrically -unelectrify -unelectrified -unelectrifying -unelectrized -unelectronic -uneleemosynary -unelegant -unelegantly -unelegantness -unelemental -unelementally -unelementary -unelevated -unelicitable -unelicited -unelided -unelidible -uneligibility -uneligible -uneligibly -uneliminated -Un-elizabethan -unelliptical -unelongated -uneloped -uneloping -uneloquent -uneloquently -unelucidated -unelucidating -unelucidative -uneludable -uneluded -unelusive -unelusively -unelusiveness -unelusory -unemaciated -unemanative -unemancipable -unemancipated -unemancipative -unemasculated -unemasculative -unemasculatory -unembayed -unembalmed -unembanked -unembarassed -unembarrassed -unembarrassedly -unembarrassedness -unembarrassing -unembarrassment -unembased -unembattled -unembellished -unembellishedness -unembellishment -unembezzled -unembittered -unemblazoned -unembodied -unembodiment -unembossed -unemboweled -unembowelled -unembowered -unembraceable -unembraced -unembryonal -unembryonic -unembroidered -unembroiled -unemendable -unemended -unemerged -unemergent -unemerging -unemigrant -unemigrating -uneminent -uneminently -unemissive -unemitted -unemitting -unemolumentary -unemolumented -unemotional -unemotionalism -unemotionally -unemotionalness -unemotioned -unemotive -unemotively -unemotiveness -unempaneled -unempanelled -unemphasized -unemphasizing -unemphatic -unemphatical -unemphatically -unempirical -unempirically -unemploy -unemployability -unemployable -unemployableness -unemployably -unemployed -unemployment -unemployments -unempoisoned -unempowered -unempt -unempty -unemptiable -unemptied -unemulative -unemulous -unemulsified -unenabled -unenacted -unenameled -unenamelled -unenamored -unenamoured -unencamped -unenchafed -unenchant -unenchanted -unenciphered -unencircled -unencysted -unenclosed -unencompassed -unencored -unencounterable -unencountered -unencouraged -unencouraging -unencrypted -unencroached -unencroaching -unencumber -unencumbered -unencumberedly -unencumberedness -unencumbering -unendable -unendamaged -unendangered -unendeared -unendeavored -unended -unendemic -unending -unendingly -unendingness -unendly -unendorsable -unendorsed -unendowed -unendowing -unendued -unendurability -unendurable -unendurableness -unendurably -unendured -unenduring -unenduringly -unenergetic -unenergetically -unenergized -unenervated -unenfeebled -unenfiladed -unenforceability -unenforceable -unenforced -unenforcedly -unenforcedness -unenforcibility -unenfranchised -unengaged -unengaging -unengagingness -unengendered -unengineered -unenglish -Un-english -unenglished -Un-englished -Un-englishmanlike -unengraved -unengraven -unengrossed -unengrossing -unenhanced -unenigmatic -unenigmatical -unenigmatically -unenjoyable -unenjoyableness -unenjoyably -unenjoyed -unenjoying -unenjoyingly -unenjoined -unenkindled -unenlarged -unenlarging -unenlightened -unenlightening -unenlightenment -unenlisted -unenlivened -unenlivening -unennobled -unennobling -unenounced -unenquired -unenquiring -unenraged -unenraptured -unenrichable -unenrichableness -unenriched -unenriching -unenrobed -unenrolled -unenshrined -unenslave -unenslaved -unensnared -unensouled -unensured -unentailed -unentangle -unentangleable -unentangled -unentanglement -unentangler -unentangling -unenterable -unentered -unentering -unenterprise -unenterprised -unenterprising -unenterprisingly -unenterprisingness -unentertainable -unentertained -unentertaining -unentertainingly -unentertainingness -unenthralled -unenthralling -unenthroned -unenthused -unenthusiasm -unenthusiastic -unenthusiastically -unenticeable -unenticed -unenticing -unentire -unentitled -unentitledness -unentitlement -unentombed -unentomological -unentrance -unentranced -unentrapped -unentreatable -unentreated -unentreating -unentrenched -unentwined -unenumerable -unenumerated -unenumerative -unenunciable -unenunciated -unenunciative -unenveloped -unenvenomed -unenviability -unenviable -unenviably -unenvied -unenviedly -unenvying -unenvyingly -unenvious -unenviously -unenvironed -unenwoven -unepauleted -unepauletted -unephemeral -unephemerally -unepic -unepicurean -unepigrammatic -unepigrammatically -unepilogued -unepiscopal -unepiscopally -unepistolary -unepitaphed -unepithelial -unepitomised -unepitomized -unepochal -unequability -unequable -unequableness -unequably -unequal -unequalable -unequaled -unequalise -unequalised -unequalising -unequality -unequalize -unequalized -unequalizing -unequalled -unequal-lengthed -unequally -unequal-limbed -unequal-lobed -unequalness -unequals -unequal-sided -unequal-tempered -unequal-valved -unequated -unequatorial -unequestrian -unequiangular -unequiaxed -unequilateral -unequilaterally -unequilibrated -unequine -unequipped -unequitable -unequitableness -unequitably -unequivalent -unequivalently -unequivalve -unequivalved -unequivocably -unequivocal -unequivocally -unequivocalness -unequivocating -uneradicable -uneradicated -uneradicative -unerasable -unerased -unerasing -unerect -unerected -unermined -unerodable -uneroded -unerodent -uneroding -unerosive -unerotic -unerrable -unerrableness -unerrably -unerrancy -unerrant -unerrantly -unerratic -unerring -unerringly -unerringness -unerroneous -unerroneously -unerroneousness -unerudite -unerupted -uneruptive -unescaladed -unescalloped -unescapable -unescapableness -unescapably -unescaped -unescheatable -unescheated -uneschewable -uneschewably -uneschewed -UNESCO -unescorted -unescutcheoned -unesoteric -unespied -unespousable -unespoused -unessayed -unessence -unessential -unessentially -unessentialness -unestablish -unestablishable -unestablished -unestablishment -unesteemed -unesthetic -unestimable -unestimableness -unestimably -unestimated -unestopped -unestranged -unetched -uneternal -uneternized -unethereal -unethereally -unetherealness -unethic -unethical -unethically -unethicalness -unethylated -unethnologic -unethnological -unethnologically -unetymologic -unetymological -unetymologically -unetymologizable -Un-etruscan -un-Eucharistic -uneucharistical -un-Eucharistical -un-Eucharistically -uneugenic -uneugenical -uneugenically -uneulogised -uneulogized -uneuphemistic -uneuphemistical -uneuphemistically -uneuphonic -uneuphonious -uneuphoniously -uneuphoniousness -Un-european -unevacuated -unevadable -unevaded -unevadible -unevading -unevaluated -unevanescent -unevanescently -unevangelic -unevangelical -unevangelically -unevangelised -unevangelized -unevaporate -unevaporated -unevaporative -unevasive -unevasively -unevasiveness -uneven -uneven-aged -uneven-carriaged -unevener -unevenest -uneven-handed -unevenly -unevenness -unevennesses -uneven-numbered -uneven-priced -uneven-roofed -uneventful -uneventfully -uneventfulness -uneversible -uneverted -unevicted -unevidenced -unevident -unevidential -unevil -unevilly -unevinced -unevincible -unevirated -uneviscerated -unevitable -unevitably -unevocable -unevocative -unevokable -unevoked -unevolutional -unevolutionary -unevolved -unexacerbated -unexacerbating -unexact -unexacted -unexactedly -unexacting -unexactingly -unexactingness -unexactly -unexactness -unexaggerable -unexaggerated -unexaggerating -unexaggerative -unexaggeratory -unexalted -unexalting -unexaminable -unexamined -unexamining -unexampled -unexampledness -unexasperated -unexasperating -unexcavated -unexceedable -unexceeded -unexcelled -unexcellent -unexcellently -unexcelling -unexceptable -unexcepted -unexcepting -unexceptionability -unexceptionable -unexceptionableness -unexceptionably -unexceptional -unexceptionality -unexceptionally -unexceptionalness -unexceptive -unexcerpted -unexcessive -unexcessively -unexcessiveness -unexchangeable -unexchangeableness -unexchangeabness -unexchanged -unexcised -unexcitability -unexcitable -unexcitablely -unexcitableness -unexcited -unexciting -unexclaiming -unexcludable -unexcluded -unexcluding -unexclusive -unexclusively -unexclusiveness -unexcogitable -unexcogitated -unexcogitative -unexcommunicated -unexcoriated -unexcorticated -unexcrescent -unexcrescently -unexcreted -unexcruciating -unexculpable -unexculpably -unexculpated -unexcursive -unexcursively -unexcusable -unexcusableness -unexcusably -unexcused -unexcusedly -unexcusedness -unexcusing -unexecrated -unexecutable -unexecuted -unexecuting -unexecutorial -unexemplary -unexemplifiable -unexemplified -unexempt -unexemptable -unexempted -unexemptible -unexempting -unexercisable -unexercise -unexercised -unexerted -unexhalable -unexhaled -unexhausted -unexhaustedly -unexhaustedness -unexhaustible -unexhaustibleness -unexhaustibly -unexhaustion -unexhaustive -unexhaustively -unexhaustiveness -unexhibitable -unexhibitableness -unexhibited -unexhilarated -unexhilarating -unexhilarative -unexhortative -unexhorted -unexhumed -unexigent -unexigently -unexigible -unexilable -unexiled -unexistence -unexistent -unexistential -unexistentially -unexisting -unexonerable -unexonerated -unexonerative -unexorable -unexorableness -unexorbitant -unexorbitantly -unexorcisable -unexorcisably -unexorcised -unexotic -unexotically -unexpandable -unexpanded -unexpanding -unexpansible -unexpansive -unexpansively -unexpansiveness -unexpect -unexpectability -unexpectable -unexpectably -unexpectant -unexpectantly -unexpected -unexpectedly -unexpectedness -unexpecteds -unexpecting -unexpectingly -unexpectorated -unexpedient -unexpediently -unexpeditable -unexpeditated -unexpedited -unexpeditious -unexpeditiously -unexpeditiousness -unexpellable -unexpelled -unexpendable -unexpended -unexpensive -unexpensively -unexpensiveness -unexperience -unexperienced -unexperiencedness -unexperient -unexperiential -unexperientially -unexperimental -unexperimentally -unexperimented -unexpert -unexpertly -unexpertness -unexpiable -unexpiated -unexpired -unexpiring -unexplainable -unexplainableness -unexplainably -unexplained -unexplainedly -unexplainedness -unexplaining -unexplanatory -unexplicable -unexplicableness -unexplicably -unexplicated -unexplicative -unexplicit -unexplicitly -unexplicitness -unexplodable -unexploded -unexploitable -unexploitation -unexploitative -unexploited -unexplorable -unexplorative -unexploratory -unexplored -unexplosive -unexplosively -unexplosiveness -unexponible -unexportable -unexported -unexporting -unexposable -unexposed -unexpostulating -unexpoundable -unexpounded -unexpress -unexpressable -unexpressableness -unexpressably -unexpressed -unexpressedly -unexpressible -unexpressibleness -unexpressibly -unexpressive -unexpressively -unexpressiveness -unexpressly -unexpropriable -unexpropriated -unexpugnable -unexpunged -unexpurgated -unexpurgatedly -unexpurgatedness -unextendable -unextended -unextendedly -unextendedness -unextendibility -unextendible -unextensibility -unextensible -unextenuable -unextenuated -unextenuating -unexterminable -unexterminated -unexternal -unexternality -unexterritoriality -unextinct -unextinctness -unextinguishable -unextinguishableness -unextinguishably -unextinguished -unextirpable -unextirpated -unextolled -unextortable -unextorted -unextractable -unextracted -unextradited -unextraneous -unextraneously -unextraordinary -unextravagance -unextravagant -unextravagantly -unextravagating -unextravasated -unextreme -unextremeness -unextricable -unextricated -unextrinsic -unextruded -unexuberant -unexuberantly -unexudative -unexuded -unexultant -unexultantly -unfabled -unfabling -unfabricated -unfabulous -unfabulously -unfacaded -unface -unfaceable -unfaced -unfaceted -unfacetious -unfacetiously -unfacetiousness -unfacile -unfacilely -unfacilitated -unfact -unfactional -unfactious -unfactiously -unfactitious -unfactorable -unfactored -unfactual -unfactually -unfactualness -unfadable -unfaded -unfading -unfadingly -unfadingness -unfagged -unfagoted -unfailable -unfailableness -unfailably -unfailed -unfailing -unfailingly -unfailingness -unfain -unfaint -unfainting -unfaintly -unfair -unfairer -unfairest -unfairylike -unfairly -unfairminded -unfairness -unfairnesses -unfaith -unfaithful -unfaithfully -unfaithfulness -unfaithfulnesses -unfaiths -unfaithworthy -unfaithworthiness -unfakable -unfaked -unfalcated -unfallacious -unfallaciously -unfallaciousness -unfallen -unfallenness -unfallible -unfallibleness -unfallibly -unfalling -unfallowed -unfalse -unfalseness -unfalsifiable -unfalsified -unfalsifiedness -unfalsity -unfaltering -unfalteringly -unfamed -unfamiliar -unfamiliarised -unfamiliarity -unfamiliarities -unfamiliarized -unfamiliarly -unfamous -unfanatical -unfanatically -unfancy -unfanciable -unfancied -unfanciful -unfancifulness -unfanciness -unfanged -unfanned -unfantastic -unfantastical -unfantastically -unfar -unfarced -unfarcical -unfardle -unfarewelled -unfarmable -unfarmed -unfarming -unfarrowed -unfarsighted -unfasciate -unfasciated -unfascinate -unfascinated -unfascinating -unfashion -unfashionable -unfashionableness -unfashionably -unfashioned -unfast -unfasten -unfastenable -unfastened -unfastener -unfastening -unfastens -unfastidious -unfastidiously -unfastidiousness -unfasting -unfatalistic -unfatalistically -unfated -unfather -unfathered -unfatherly -unfatherlike -unfatherliness -unfathomability -unfathomable -unfathomableness -unfathomably -unfathomed -unfatigable -unfatigue -unfatigueable -unfatigued -unfatiguing -unfattable -unfatted -unfatten -unfatty -unfatuitous -unfatuitously -unfauceted -unfaultable -unfaultfinding -unfaulty -unfavorable -unfavorableness -unfavorably -unfavored -unfavoring -unfavorite -unfavourable -unfavourableness -unfavourably -unfavoured -unfavouring -unfavourite -unfawning -unfazed -unfazedness -unfealty -unfeared -unfearful -unfearfully -unfearfulness -unfeary -unfearing -unfearingly -unfearingness -unfeasable -unfeasableness -unfeasably -unfeasibility -unfeasible -unfeasibleness -unfeasibly -unfeasted -unfeastly -unfeather -unfeathered -unfeaty -unfeatured -unfebrile -unfecund -unfecundated -unfed -unfederal -unfederated -unfederative -unfederatively -unfeeble -unfeebleness -unfeebly -unfeed -unfeedable -unfeeding -unfeeing -unfeel -unfeelable -unfeeling -unfeelingly -unfeelingness -unfeignable -unfeignableness -unfeignably -unfeigned -unfeignedly -unfeignedness -unfeigning -unfeigningly -unfeigningness -unfele -unfelicitated -unfelicitating -unfelicitous -unfelicitously -unfelicitousness -unfeline -unfellable -unfelled -unfellied -unfellow -unfellowed -unfellowly -unfellowlike -unfellowshiped -unfelon -unfelony -unfelonious -unfeloniously -unfelt -unfelted -unfemale -unfeminine -unfemininely -unfeminineness -unfemininity -unfeminise -unfeminised -unfeminising -unfeminist -unfeminize -unfeminized -unfeminizing -unfence -unfenced -unfences -unfencing -unfended -unfendered -unfenestral -unfenestrated -Un-fenian -unfeoffed -unfermentable -unfermentableness -unfermentably -unfermentative -unfermented -unfermenting -unfernlike -unferocious -unferociously -unferreted -unferreting -unferried -unfertile -unfertileness -unfertilisable -unfertilised -unfertilising -unfertility -unfertilizable -unfertilized -unfertilizing -unfervent -unfervently -unfervid -unfervidly -unfester -unfestered -unfestering -unfestival -unfestive -unfestively -unfestooned -unfetchable -unfetched -unfetching -unfeted -unfetter -unfettered -unfettering -unfetters -unfettled -unfeudal -unfeudalise -unfeudalised -unfeudalising -unfeudalize -unfeudalized -unfeudalizing -unfeudally -unfeued -unfevered -unfeverish -unfew -unffroze -unfibbed -unfibbing -unfiber -unfibered -unfibred -unfibrous -unfibrously -unfickle -unfictitious -unfictitiously -unfictitiousness -unfidelity -unfidgeting -unfiducial -unfielded -unfiend -unfiendlike -unfierce -unfiercely -unfiery -unfight -unfightable -unfighting -unfigurable -unfigurative -unfigured -unfilamentous -unfilched -unfile -unfiled -unfilial -unfilially -unfilialness -unfiling -unfill -unfillable -unfilled -unfilleted -unfilling -unfilm -unfilmed -unfilterable -unfiltered -unfiltering -unfiltrated -unfimbriated -unfinable -unfinalized -unfinanced -unfinancial -unfindable -unfine -unfineable -unfined -unfinessed -unfingered -unfingured -unfinical -unfinicalness -unfinish -unfinishable -unfinished -unfinishedly -unfinishedness -unfinite -Un-finnish -unfired -unfireproof -unfiring -unfirm -unfirmamented -unfirmly -unfirmness -un-first-class -unfiscal -unfiscally -unfishable -unfished -unfishing -unfishlike -unfissile -unfistulous -unfit -unfitly -unfitness -unfitnesses -unfits -unfittable -unfitted -unfittedness -unfitten -unfitty -unfitting -unfittingly -unfittingness -unfix -unfixable -unfixated -unfixative -unfixed -unfixedness -unfixes -unfixing -unfixity -unfixt -unflag -unflagged -unflagging -unflaggingly -unflaggingness -unflagitious -unflagrant -unflagrantly -unflayed -unflaked -unflaky -unflaking -unflamboyant -unflamboyantly -unflame -unflaming -unflanged -unflank -unflanked -unflappability -unflappable -unflappably -unflapping -unflared -unflaring -unflashy -unflashing -unflat -unflated -unflatted -unflattened -unflatterable -unflattered -unflattering -unflatteringly -unflaunted -unflaunting -unflauntingly -unflavored -unflavorous -unflavoured -unflavourous -unflawed -unflead -unflecked -unfledge -unfledged -unfledgedness -unfleece -unfleeced -unfleeing -unfleeting -Un-flemish -unflesh -unfleshed -unfleshy -unfleshly -unfleshliness -unfletched -unflexed -unflexibility -unflexible -unflexibleness -unflexibly -unflickering -unflickeringly -unflighty -unflying -unflinching -unflinchingly -unflinchingness -unflintify -unflippant -unflippantly -unflirtatious -unflirtatiously -unflirtatiousness -unflitched -unfloatable -unfloating -unflock -unfloggable -unflogged -unflooded -unfloor -unfloored -Un-florentine -unflorid -unflossy -unflounced -unfloundering -unfloured -unflourished -unflourishing -unflouted -unflower -unflowered -unflowery -unflowering -unflowing -unflown -unfluctuant -unfluctuating -unfluent -unfluently -unfluffed -unfluffy -unfluid -unfluked -unflunked -unfluorescent -unfluorinated -unflurried -unflush -unflushed -unflustered -unfluted -unflutterable -unfluttered -unfluttering -unfluvial -unfluxile -unfoaled -unfoamed -unfoaming -unfocused -unfocusing -unfocussed -unfocussing -unfogged -unfoggy -unfogging -unfoilable -unfoiled -unfoisted -unfold -unfoldable -unfolded -unfolden -unfolder -unfolders -unfolding -unfoldment -unfolds -unfoldure -unfoliaged -unfoliated -unfollowable -unfollowed -unfollowing -unfomented -unfond -unfondled -unfondly -unfondness -unfoodful -unfool -unfoolable -unfooled -unfooling -unfoolish -unfoolishly -unfoolishness -unfooted -unfootsore -unfoppish -unforaged -unforbade -unforbearance -unforbearing -unforbid -unforbidded -unforbidden -unforbiddenly -unforbiddenness -unforbidding -unforceable -unforced -unforcedly -unforcedness -unforceful -unforcefully -unforcible -unforcibleness -unforcibly -unforcing -unfordable -unfordableness -unforded -unforeboded -unforeboding -unforecast -unforecasted -unforegone -unforeign -unforeknowable -unforeknown -unforensic -unforensically -unforeordained -unforesee -unforeseeable -unforeseeableness -unforeseeably -unforeseeing -unforeseeingly -unforeseen -unforeseenly -unforeseenness -unforeshortened -unforest -unforestallable -unforestalled -unforested -unforetellable -unforethought -unforethoughtful -unforetold -unforewarned -unforewarnedness -unforfeit -unforfeitable -unforfeited -unforfeiting -unforgeability -unforgeable -unforged -unforget -unforgetful -unforgetfully -unforgetfulness -unforgettability -unforgettable -unforgettableness -unforgettably -unforgetting -unforgettingly -unforgivable -unforgivableness -unforgivably -unforgiven -unforgiveness -unforgiver -unforgiving -unforgivingly -unforgivingness -unforgoable -unforgone -unforgot -unforgotten -unfork -unforked -unforkedness -unforlorn -unform -unformal -unformalised -unformalistic -unformality -unformalized -unformally -unformalness -unformative -unformatted -unformed -unformidable -unformidableness -unformidably -unformulable -unformularizable -unformularize -unformulated -unformulistic -unforsaken -unforsaking -unforseen -unforsook -unforsworn -unforthright -unfortify -unfortifiable -unfortified -unfortuitous -unfortuitously -unfortuitousness -unfortunate -unfortunately -unfortunateness -unfortunates -unfortune -unforward -unforwarded -unforwardly -unfossiliferous -unfossilised -unfossilized -unfostered -unfostering -unfought -unfoughten -unfoul -unfoulable -unfouled -unfouling -unfoully -unfound -unfounded -unfoundedly -unfoundedness -unfoundered -unfoundering -unfountained -unfowllike -unfoxed -unfoxy -unfractious -unfractiously -unfractiousness -unfractured -unfragile -unfragmented -unfragrance -unfragrant -unfragrantly -unfrayed -unfrail -unframable -unframableness -unframably -unframe -unframeable -unframed -unfranchised -Un-franciscan -unfrangible -unfrank -unfrankable -unfranked -unfrankly -unfrankness -unfraternal -unfraternally -unfraternised -unfraternized -unfraternizing -unfraudulent -unfraudulently -unfraught -unfrazzled -unfreakish -unfreakishly -unfreakishness -unfreckled -unfree -unfreed -unfreedom -unfreehold -unfreeing -unfreeingly -unfreely -unfreeman -unfreeness -unfrees -un-free-trade -unfreezable -unfreeze -unfreezes -unfreezing -unfreight -unfreighted -unfreighting -Un-french -un-frenchify -unfrenchified -unfrenzied -unfrequency -unfrequent -unfrequentable -unfrequentative -unfrequented -unfrequentedness -unfrequently -unfrequentness -unfret -unfretful -unfretfully -unfretted -unfretty -unfretting -unfriable -unfriableness -unfriarlike -unfricative -unfrictional -unfrictionally -unfrictioned -unfried -unfriend -unfriended -unfriendedness -unfriending -unfriendly -unfriendlier -unfriendliest -unfriendlike -unfriendlily -unfriendliness -unfriendship -unfrighted -unfrightenable -unfrightened -unfrightenedness -unfrightening -unfrightful -unfrigid -unfrigidity -unfrigidly -unfrigidness -unfrill -unfrilled -unfrilly -unfringe -unfringed -unfringing -unfrisky -unfrisking -unfrittered -unfrivolous -unfrivolously -unfrivolousness -unfrizz -unfrizzy -unfrizzled -unfrizzly -unfrock -unfrocked -unfrocking -unfrocks -unfroglike -unfrolicsome -unfronted -unfrost -unfrosted -unfrosty -unfrothed -unfrothing -unfrounced -unfroward -unfrowardly -unfrowning -unfroze -unfrozen -unfructed -unfructify -unfructified -unfructuous -unfructuously -unfrugal -unfrugality -unfrugally -unfrugalness -unfruitful -unfruitfully -unfruitfulness -unfruity -unfrustrable -unfrustrably -unfrustratable -unfrustrated -unfrutuosity -unfuddled -unfudged -unfueled -unfuelled -unfugal -unfugally -unfugitive -unfugitively -unfulfil -unfulfill -unfulfillable -unfulfilled -unfulfilling -unfulfillment -unfulfilment -unfulgent -unfulgently -unfull -unfulled -unfully -unfulminant -unfulminated -unfulminating -unfulsome -unfumbled -unfumbling -unfumed -unfumigated -unfuming -unfunctional -unfunctionally -unfunctioning -unfundable -unfundamental -unfundamentally -unfunded -unfunereal -unfunereally -unfungible -unfunny -unfunnily -unfunniness -unfur -unfurbelowed -unfurbished -unfurcate -unfurious -unfurl -unfurlable -unfurled -unfurling -unfurls -unfurnish -unfurnished -unfurnishedness -unfurnitured -unfurred -unfurrow -unfurrowable -unfurrowed -unfurthersome -unfused -unfusibility -unfusible -unfusibleness -unfusibly -unfusibness -unfussed -unfussy -unfussily -unfussiness -unfussing -unfutile -unfuturistic -ung -ungabled -ungag -ungaged -ungagged -ungagging -ungain -ungainable -ungained -ungainful -ungainfully -ungainfulness -ungaining -ungainly -ungainlier -ungainliest -ungainlike -ungainliness -ungainlinesses -ungainness -ungainsayable -ungainsayably -ungainsaid -ungainsaying -ungainsome -ungainsomely -ungaite -ungaited -ungallant -ungallantly -ungallantness -ungalled -ungalleried -ungalling -ungalloping -ungalvanized -ungambled -ungambling -ungamboled -ungamboling -ungambolled -ungambolling -ungamelike -ungamy -unganged -ungangrened -ungangrenous -ungaping -ungaraged -ungarbed -ungarbled -ungardened -ungargled -ungarland -ungarlanded -ungarment -ungarmented -ungarnered -ungarnish -ungarnished -ungaro -ungarrisoned -ungarrulous -ungarrulously -ungarrulousness -ungarter -ungartered -ungashed -ungassed -ungastric -ungated -ungathered -ungaudy -ungaudily -ungaudiness -ungauged -ungauntlet -ungauntleted -Ungava -ungazetted -ungazing -ungear -ungeared -ungelatinizable -ungelatinized -ungelatinous -ungelatinously -ungelatinousness -ungelded -ungelt -ungeminated -ungendered -ungenerable -ungeneral -ungeneraled -ungeneralised -ungeneralising -ungeneralized -ungeneralizing -ungenerate -ungenerated -ungenerating -ungenerative -ungeneric -ungenerical -ungenerically -ungenerosity -ungenerous -ungenerously -ungenerousness -ungenial -ungeniality -ungenially -ungenialness -ungenitive -ungenitured -ungenius -ungenteel -ungenteely -ungenteelly -ungenteelness -ungentile -ungentility -ungentilize -ungentle -ungentled -ungentleman -ungentlemanize -ungentlemanly -ungentlemanlike -ungentlemanlikeness -ungentlemanliness -ungentleness -ungentlewomanlike -ungently -ungenuine -ungenuinely -ungenuineness -ungeodetic -ungeodetical -ungeodetically -ungeographic -ungeographical -ungeographically -ungeological -ungeologically -ungeometric -ungeometrical -ungeometrically -ungeometricalness -Un-georgian -Unger -Un-german -ungermane -Un-germanic -Un-germanize -ungerminant -ungerminated -ungerminating -ungerminative -ungermlike -ungerontic -ungesticular -ungesticulating -ungesticulative -ungesticulatory -ungesting -ungestural -ungesturing -unget -ungetable -ungetatable -unget-at-able -un-get-at-able -un-get-at-ableness -ungettable -ungeuntary -ungeuntarium -unghostly -unghostlike -ungiant -ungibbet -ungiddy -ungift -ungifted -ungiftedness -ungild -ungilded -ungill -ungilled -ungilt -ungymnastic -ungingled -unginned -ungypsylike -ungyrating -ungird -ungirded -ungirding -ungirdle -ungirdled -ungirdling -ungirds -ungirlish -ungirlishly -ungirlishness -ungirt -ungirth -ungirthed -ungivable -ungive -ungyve -ungiveable -ungyved -ungiven -ungiving -ungivingness -ungka -unglacial -unglacially -unglaciated -unglad -ungladden -ungladdened -ungladly -ungladness -ungladsome -unglamorous -unglamorously -unglamorousness -unglamourous -unglamourously -unglandular -unglaring -unglassed -unglassy -unglaze -unglazed -ungleaming -ungleaned -unglee -ungleeful -ungleefully -Ungley -unglib -unglibly -ungliding -unglimpsed -unglistening -unglittery -unglittering -ungloating -unglobe -unglobular -unglobularly -ungloom -ungloomed -ungloomy -ungloomily -unglory -unglorify -unglorified -unglorifying -unglorious -ungloriously -ungloriousness -unglosed -ungloss -unglossaried -unglossed -unglossy -unglossily -unglossiness -unglove -ungloved -ungloves -ungloving -unglowering -ungloweringly -unglowing -unglozed -unglue -unglued -unglues -ungluing -unglutinate -unglutinosity -unglutinous -unglutinously -unglutinousness -unglutted -ungluttonous -ungnarled -ungnarred -ungnaw -ungnawed -ungnawn -ungnostic -ungoaded -ungoatlike -ungod -ungoddess -ungodly -ungodlier -ungodliest -ungodlike -ungodlily -ungodliness -ungodlinesses -ungodmothered -ungoggled -ungoitered -ungold -ungolden -ungone -ungood -ungoodly -ungoodliness -ungoodness -ungored -ungorge -ungorged -ungorgeous -ungospel -ungospelized -ungospelled -ungospellike -ungossipy -ungossiping -ungot -ungothic -ungotten -ungouged -ungouty -ungovernability -ungovernable -ungovernableness -ungovernably -ungoverned -ungovernedness -ungoverning -ungovernmental -ungovernmentally -ungown -ungowned -ungrabbing -ungrace -ungraced -ungraceful -ungracefully -ungracefulness -ungracious -ungraciously -ungraciousness -ungradated -ungradating -ungraded -ungradual -ungradually -ungraduated -ungraduating -ungraft -ungrafted -ungrayed -ungrain -ungrainable -ungrained -ungrammar -ungrammared -ungrammatic -ungrammatical -ungrammaticality -ungrammatically -ungrammaticalness -ungrammaticism -ungrand -Un-grandisonian -ungrantable -ungranted -ungranular -ungranulated -ungraphable -ungraphic -ungraphical -ungraphically -ungraphitized -ungrapple -ungrappled -ungrappler -ungrappling -ungrasp -ungraspable -ungrasped -ungrasping -ungrassed -ungrassy -ungrated -ungrateful -ungratefully -ungratefulness -ungratefulnesses -ungratifiable -ungratification -ungratified -ungratifying -ungratifyingly -ungrating -ungratitude -ungratuitous -ungratuitously -ungratuitousness -ungrave -ungraved -ungraveled -ungravely -ungravelled -ungravelly -ungraven -ungravitating -ungravitational -ungravitative -ungrazed -ungreased -ungreasy -ungreat -ungreatly -ungreatness -Un-grecian -ungreeable -ungreedy -Un-greek -ungreen -ungreenable -ungreened -ungreeted -ungregarious -ungregariously -ungregariousness -Un-gregorian -ungreyed -ungrid -ungrieve -ungrieved -ungrieving -ungrilled -ungrimed -ungrindable -ungrinned -ungrip -ungripe -ungripped -ungripping -ungritty -ungrizzled -ungroaning -ungroined -ungroomed -ungrooved -ungropeable -ungross -ungrotesque -unground -ungroundable -ungroundably -ungrounded -ungroundedly -ungroundedness -ungroupable -ungrouped -ungroveling -ungrovelling -ungrow -ungrowing -ungrowling -ungrown -ungrubbed -ungrudged -ungrudging -ungrudgingly -ungrudgingness -ungruesome -ungruff -ungrumbling -ungrumblingly -ungrumpy -ungt -ungual -unguals -unguaranteed -unguard -unguardable -unguarded -unguardedly -unguardedness -unguarding -unguards -ungueal -unguent -unguenta -unguentary -unguentaria -unguentarian -unguentarium -unguentiferous -unguento -unguentous -unguents -unguentum -unguerdoned -ungues -unguessable -unguessableness -unguessed -unguessing -unguical -unguicorn -unguicular -Unguiculata -unguiculate -unguiculated -unguicule -unguidable -unguidableness -unguidably -unguided -unguidedly -unguyed -unguiferous -unguiform -unguiled -unguileful -unguilefully -unguilefulness -unguillotined -unguilty -unguiltily -unguiltiness -unguiltless -unguinal -unguinous -unguirostral -unguis -ungula -ungulae -ungular -Ungulata -ungulate -ungulated -ungulates -unguled -unguligrade -ungulite -ungull -ungullibility -ungullible -ungulous -ungulp -ungum -ungummed -ungushing -ungustatory -ungutted -unguttural -ungutturally -ungutturalness -unguzzled -unhabile -unhabit -unhabitability -unhabitable -unhabitableness -unhabitably -unhabited -unhabitual -unhabitually -unhabituate -unhabituated -unhabituatedness -unhacked -unhackled -unhackneyed -unhackneyedness -unhad -unhaft -unhafted -unhaggled -unhaggling -unhayed -unhailable -unhailed -unhair -unhaired -unhairer -unhairy -unhairily -unhairiness -unhairing -unhairs -unhale -unhallooed -unhallow -unhallowed -unhallowedness -unhallowing -unhallows -unhallucinated -unhallucinating -unhallucinatory -unhaloed -unhalsed -unhalted -unhalter -unhaltered -unhaltering -unhalting -unhaltingly -unhalved -Un-hamitic -unhammered -unhamper -unhampered -unhampering -unhand -unhandcuff -unhandcuffed -unhanded -unhandy -unhandicapped -unhandier -unhandiest -unhandily -unhandiness -unhanding -unhandled -unhands -unhandseled -unhandselled -unhandsome -unhandsomely -unhandsomeness -unhang -unhanged -unhanging -unhangs -unhanked -unhap -unhappen -unhappi -unhappy -unhappy-eyed -unhappier -unhappiest -unhappy-faced -unhappy-happy -unhappily -unhappy-looking -unhappiness -unhappinesses -unhappy-seeming -unhappy-witted -unharangued -unharassed -unharbor -unharbored -unharbour -unharboured -unhard -unharden -unhardenable -unhardened -unhardy -unhardihood -unhardily -unhardiness -unhardness -unharked -unharmable -unharmed -unharmful -unharmfully -unharming -unharmony -unharmonic -unharmonical -unharmonically -unharmonious -unharmoniously -unharmoniousness -unharmonise -unharmonised -unharmonising -unharmonize -unharmonized -unharmonizing -unharness -unharnessed -unharnesses -unharnessing -unharped -unharping -unharried -unharrowed -unharsh -unharshly -unharshness -unharvested -unhashed -unhasp -unhasped -unhaste -unhasted -unhastened -unhasty -unhastily -unhastiness -unhasting -unhat -unhatchability -unhatchable -unhatched -unhatcheled -unhate -unhated -unhateful -unhating -unhatingly -unhats -unhatted -unhatting -unhauled -unhaunt -unhaunted -unhave -unhawked -unhazarded -unhazarding -unhazardous -unhazardously -unhazardousness -unhazed -unhazy -unhazily -unhaziness -UNHCR -unhead -unheaded -unheader -unheady -unheal -unhealable -unhealableness -unhealably -unhealed -unhealing -unhealth -unhealthful -unhealthfully -unhealthfulness -unhealthy -unhealthier -unhealthiest -unhealthily -unhealthiness -unhealthsome -unhealthsomeness -unheaped -unhearable -unheard -unheard-of -unhearing -unhearse -unhearsed -unheart -unhearten -unhearty -unheartily -unheartsome -unheatable -unheated -unheathen -unheaved -unheaven -unheavenly -unheavy -unheavily -unheaviness -Un-hebraic -Un-hebrew -unhectic -unhectically -unhectored -unhedge -unhedged -unhedging -unhedonistic -unhedonistically -unheed -unheeded -unheededly -unheedful -unheedfully -unheedfulness -unheedy -unheeding -unheedingly -unheeled -unheelpieced -unhefted -unheightened -unheired -unheld -unhele -unheler -Un-hellenic -unhelm -unhelmed -unhelmet -unhelmeted -unhelming -unhelms -unhelp -unhelpable -unhelpableness -unhelped -unhelpful -unhelpfully -unhelpfulness -unhelping -unhelved -unhemmed -unhende -unhent -unheppen -unheralded -unheraldic -unherbaceous -unherd -unherded -unhereditary -unheretical -unheritable -unhermetic -unhermitic -unhermitical -unhermitically -unhero -unheroic -unheroical -unheroically -unheroicalness -unheroicness -unheroism -unheroize -unherolike -unhesitant -unhesitantly -unhesitating -unhesitatingly -unhesitatingness -unhesitative -unhesitatively -unheuristic -unheuristically -unhewable -unhewed -unhewn -unhex -Un-hibernically -unhid -unhidable -unhidableness -unhidably -unhidated -unhidden -unhide -unhideable -unhideably -unhidebound -unhideboundness -unhideous -unhideously -unhideousness -unhydrated -unhydraulic -unhydrolized -unhydrolyzed -unhieratic -unhieratical -unhieratically -unhygenic -unhigh -unhygienic -unhygienically -unhygrometric -unhilarious -unhilariously -unhilariousness -unhilly -unhymeneal -unhymned -unhinderable -unhinderably -unhindered -unhindering -unhinderingly -Un-hindu -unhinge -unhinged -unhingement -unhinges -unhinging -unhinted -unhip -unhyphenable -unhyphenated -unhyphened -unhypnotic -unhypnotically -unhypnotisable -unhypnotise -unhypnotised -unhypnotising -unhypnotizable -unhypnotize -unhypnotized -unhypnotizing -unhypocritical -unhypocritically -unhypothecated -unhypothetical -unhypothetically -unhipped -unhired -unhissed -unhysterical -unhysterically -unhistory -unhistoric -unhistorical -unhistorically -unhistoried -unhistrionic -unhit -unhitch -unhitched -unhitches -unhitching -unhittable -unhive -unhoard -unhoarded -unhoarding -unhoary -unhoaxability -unhoaxable -unhoaxed -unhobble -unhobbling -unhocked -unhoed -unhogged -unhoist -unhoisted -unhold -unholy -unholiday -unholier -unholiest -unholily -unholiness -unholinesses -unhollow -unhollowed -unholpen -unhome -unhomely -unhomelike -unhomelikeness -unhomeliness -Un-homeric -unhomicidal -unhomiletic -unhomiletical -unhomiletically -unhomish -unhomogeneity -unhomogeneous -unhomogeneously -unhomogeneousness -unhomogenized -unhomologic -unhomological -unhomologically -unhomologized -unhomologous -unhoned -unhoneyed -unhonest -unhonesty -unhonestly -unhonied -unhonorable -unhonorably -unhonored -unhonourable -unhonourably -unhonoured -unhood -unhooded -unhooding -unhoods -unhoodwink -unhoodwinked -unhoofed -unhook -unhooked -unhooking -unhooks -unhoop -unhoopable -unhooped -unhooper -unhooted -unhope -unhoped -unhoped-for -unhopedly -unhopedness -unhopeful -unhopefully -unhopefulness -unhoping -unhopingly -unhopped -unhoppled -Un-horatian -unhorizoned -unhorizontal -unhorizontally -unhorned -unhorny -unhoroscopic -unhorrified -unhorse -unhorsed -unhorses -unhorsing -unhortative -unhortatively -unhose -unhosed -unhospitable -unhospitableness -unhospitably -unhospital -unhospitalized -unhostile -unhostilely -unhostileness -unhostility -unhot -unhounded -unhoundlike -unhouse -unhoused -unhouseled -unhouselike -unhouses -unhousewifely -unhousing -unhubristic -unhuddle -unhuddled -unhuddling -unhued -unhugged -unhull -unhulled -unhuman -unhumane -unhumanely -unhumaneness -unhumanise -unhumanised -unhumanising -unhumanistic -unhumanitarian -unhumanize -unhumanized -unhumanizing -unhumanly -unhumanness -unhumble -unhumbled -unhumbledness -unhumbleness -unhumbly -unhumbugged -unhumid -unhumidified -unhumidifying -unhumiliated -unhumiliating -unhumiliatingly -unhumored -unhumorous -unhumorously -unhumorousness -unhumoured -unhumourous -unhumourously -unhung -unh-unh -un-hunh -unhuntable -unhunted -unhurdled -unhurled -unhurried -unhurriedly -unhurriedness -unhurrying -unhurryingly -unhurt -unhurted -unhurtful -unhurtfully -unhurtfulness -unhurting -unhusbanded -unhusbandly -unhushable -unhushed -unhushing -unhusk -unhuskable -unhusked -unhusking -unhusks -unhustled -unhustling -unhutched -unhuzzaed -Uni -uni- -unyachtsmanlike -unialgal -uniambic -uniambically -uniangulate -Un-yankee -uniarticular -uniarticulate -Uniat -Uniate -Uniatism -uniauriculate -uniauriculated -uniaxal -uniaxally -uniaxial -uniaxially -unibasal -Un-iberian -unibivalent -unible -unibracteate -unibracteolate -unibranchiate -unicalcarate -unicameral -unicameralism -unicameralist -unicamerally -unicamerate -unicapsular -unicarinate -unicarinated -unice -uniced -UNICEF -Un-icelandic -unicell -unicellate -unicelled -unicellular -unicellularity -unicentral -unichord -unicycle -unicycles -unicyclist -uniciliate -unicing -unicism -unicist -unicity -uniclinal -Unicoi -unicolor -unicolorate -unicolored -unicolorous -unicolour -uniconoclastic -uniconoclastically -uniconstant -unicorn -unicorneal -unicornic -unicornlike -unicornous -unicorns -unicorn's -unicornuted -unicostate -unicotyledonous -UNICS -unicum -unicursal -unicursality -unicursally -unicuspid -unicuspidate -unidactyl -unidactyle -unidactylous -unidea'd -unideaed -unideal -unidealised -unidealism -unidealist -unidealistic -unidealistically -unidealized -unideated -unideating -unideational -unidentate -unidentated -unidentical -unidentically -unidenticulate -unidentifiable -unidentifiableness -unidentifiably -unidentified -unidentifiedly -unidentifying -unideographic -unideographical -unideographically -unidextral -unidextrality -unidigitate -unidyllic -unidimensional -unidiomatic -unidiomatically -unidirect -unidirected -unidirection -unidirectional -unidirectionality -unidirectionally -unidle -unidleness -unidly -unidling -UNIDO -unidolatrous -unidolised -unidolized -unie -unyeaned -unyearned -unyearning -uniembryonate -uniequivalent -uniface -unifaced -unifaces -unifacial -unifactoral -unifactorial -unifarious -unify -unifiable -unific -unification -unificationist -unifications -unificator -unified -unifiedly -unifiedness -unifier -unifiers -unifies -unifying -unifilar -uniflagellate -unifloral -uniflorate -uniflorous -uniflow -uniflowered -unifocal -unifoliar -unifoliate -unifoliolate -Unifolium -uniform -uniformal -uniformalization -uniformalize -uniformally -uniformation -uniformed -uniformer -uniformest -uniforming -uniformisation -uniformise -uniformised -uniformising -uniformist -uniformitarian -uniformitarianism -uniformity -uniformities -uniformization -uniformize -uniformized -uniformizing -uniformless -uniformly -uniformness -uniform-proof -uniforms -unigenesis -unigenetic -unigenist -unigenistic -unigenital -unigeniture -unigenous -uniglandular -uniglobular -unignitable -unignited -unignitible -unigniting -unignominious -unignominiously -unignominiousness -unignorant -unignorantly -unignored -unignoring -unigravida -uniguttulate -unyielded -unyielding -unyieldingly -unyieldingness -unijugate -unijugous -unilabiate -unilabiated -unilamellar -unilamellate -unilaminar -unilaminate -unilateral -unilateralism -unilateralist -unilaterality -unilateralization -unilateralize -unilaterally -unilinear -unilingual -unilingualism -uniliteral -unilluded -unilludedly -unillumed -unilluminant -unilluminated -unilluminating -unillumination -unilluminative -unillumined -unillusioned -unillusive -unillusory -unillustrated -unillustrative -unillustrious -unillustriously -unillustriousness -unilobal -unilobar -unilobate -unilobe -unilobed -unilobular -unilocular -unilocularity -uniloculate -unimacular -unimaged -unimaginability -unimaginable -unimaginableness -unimaginably -unimaginary -unimaginative -unimaginatively -unimaginativeness -unimagine -unimagined -unimanual -unimbanked -unimbellished -unimbezzled -unimbibed -unimbibing -unimbittered -unimbodied -unimboldened -unimbordered -unimbosomed -unimbowed -unimbowered -unimbroiled -unimbrowned -unimbrued -unimbued -unimedial -unimitable -unimitableness -unimitably -unimitated -unimitating -unimitative -unimmaculate -unimmaculately -unimmaculateness -unimmanent -unimmanently -unimmediate -unimmediately -unimmediateness -unimmerged -unimmergible -unimmersed -unimmigrating -unimminent -unimmolated -unimmortal -unimmortalize -unimmortalized -unimmovable -unimmunised -unimmunized -unimmured -unimodal -unimodality -unimodular -unimolecular -unimolecularity -unimpacted -unimpair -unimpairable -unimpaired -unimpartable -unimparted -unimpartial -unimpartially -unimpartible -unimpassionate -unimpassionately -unimpassioned -unimpassionedly -unimpassionedness -unimpatient -unimpatiently -unimpawned -unimpeachability -unimpeachable -unimpeachableness -unimpeachably -unimpeached -unimpearled -unimped -unimpeded -unimpededly -unimpedible -unimpeding -unimpedingly -unimpedness -unimpelled -unimpenetrable -unimperative -unimperatively -unimperial -unimperialistic -unimperially -unimperious -unimperiously -unimpertinent -unimpertinently -unimpinging -unimplanted -unimplemented -unimplicable -unimplicate -unimplicated -unimplicit -unimplicitly -unimplied -unimplorable -unimplored -unimpoisoned -unimportance -unimportant -unimportantly -unimportantness -unimported -unimporting -unimportunate -unimportunately -unimportunateness -unimportuned -unimposed -unimposedly -unimposing -unimpostrous -unimpounded -unimpoverished -unimpowered -unimprecated -unimpregnable -unimpregnate -unimpregnated -unimpressed -unimpressibility -unimpressible -unimpressibleness -unimpressibly -unimpressionability -unimpressionable -unimpressionableness -unimpressive -unimpressively -unimpressiveness -unimprinted -unimprison -unimprisonable -unimprisoned -unimpropriated -unimprovable -unimprovableness -unimprovably -unimproved -unimprovedly -unimprovedness -unimprovement -unimproving -unimprovised -unimpugnable -unimpugned -unimpulsive -unimpulsively -unimpurpled -unimputable -unimputed -unimucronate -unimultiplex -unimuscular -uninaugurated -unincantoned -unincarcerated -unincarnate -unincarnated -unincensed -uninceptive -uninceptively -unincestuous -unincestuously -uninchoative -unincidental -unincidentally -unincinerated -unincised -unincisive -unincisively -unincisiveness -unincited -uninclinable -uninclined -uninclining -uninclosed -uninclosedness -unincludable -unincluded -unincludible -uninclusive -uninclusiveness -uninconvenienced -unincorporate -unincorporated -unincorporatedly -unincorporatedness -unincreasable -unincreased -unincreasing -unincriminated -unincriminating -unincubated -uninculcated -unincumbered -unindebted -unindebtedly -unindebtedness -unindemnified -unindentable -unindented -unindentured -unindexed -Un-indian -Un-indianlike -unindicable -unindicated -unindicative -unindicatively -unindictable -unindictableness -unindicted -unindifference -unindifferency -unindifferent -unindifferently -unindigenous -unindigenously -unindigent -unindignant -unindividual -unindividualize -unindividualized -unindividuated -unindoctrinated -unindorsed -uninduced -uninducible -uninducted -uninductive -unindulged -unindulgent -unindulgently -unindulging -unindurate -unindurated -unindurative -unindustrial -unindustrialized -unindustrious -unindustriously -unindwellable -uninebriate -uninebriated -uninebriatedness -uninebriating -uninebrious -uninert -uninertly -uninervate -uninerved -uninfallibility -uninfallible -uninfatuated -uninfectable -uninfected -uninfectious -uninfectiously -uninfectiousness -uninfective -uninfeft -uninferable -uninferably -uninferential -uninferentially -uninferrable -uninferrably -uninferred -uninferrible -uninferribly -uninfested -uninfiltrated -uninfinite -uninfinitely -uninfiniteness -uninfixed -uninflamed -uninflammability -uninflammable -uninflated -uninflected -uninflectedness -uninflective -uninflicted -uninfluenceability -uninfluenceable -uninfluenced -uninfluencing -uninfluencive -uninfluential -uninfluentiality -uninfluentially -uninfolded -uninformative -uninformatively -uninformed -uninforming -uninfracted -uninfringeable -uninfringed -uninfringible -uninfuriated -uninfused -uninfusing -uninfusive -uningenious -uningeniously -uningeniousness -uningenuity -uningenuous -uningenuously -uningenuousness -uningested -uningestive -uningrafted -uningrained -uningratiating -uninhabitability -uninhabitable -uninhabitableness -uninhabitably -uninhabited -uninhabitedness -uninhaled -uninherent -uninherently -uninheritability -uninheritable -uninherited -uninhibited -uninhibitedly -uninhibitedness -uninhibiting -uninhibitive -uninhumed -uninimical -uninimically -uniniquitous -uniniquitously -uniniquitousness -uninitialed -uninitialized -uninitialled -uninitiate -uninitiated -uninitiatedness -uninitiation -uninitiative -uninjectable -uninjected -uninjurable -uninjured -uninjuredness -uninjuring -uninjurious -uninjuriously -uninjuriousness -uninked -uninlaid -uninn -uninnate -uninnately -uninnateness -uninnocence -uninnocent -uninnocently -uninnocuous -uninnocuously -uninnocuousness -uninnovating -uninnovative -uninoculable -uninoculated -uninoculative -uninodal -uninominal -uninquired -uninquiring -uninquisitive -uninquisitively -uninquisitiveness -uninquisitorial -uninquisitorially -uninsane -uninsatiable -uninscribed -uninserted -uninshrined -uninsidious -uninsidiously -uninsidiousness -uninsightful -uninsinuated -uninsinuating -uninsinuative -uninsistent -uninsistently -uninsolated -uninsolating -uninsolvent -uninspected -uninspirable -uninspired -uninspiring -uninspiringly -uninspirited -uninspissated -uninstalled -uninstanced -uninstated -uninstigated -uninstigative -uninstilled -uninstinctive -uninstinctively -uninstinctiveness -uninstituted -uninstitutional -uninstitutionally -uninstitutive -uninstitutively -uninstructed -uninstructedly -uninstructedness -uninstructible -uninstructing -uninstructive -uninstructively -uninstructiveness -uninstrumental -uninstrumentally -uninsular -uninsulate -uninsulated -uninsulating -uninsultable -uninsulted -uninsulting -uninsurability -uninsurable -uninsured -unintegrable -unintegral -unintegrally -unintegrated -unintegrative -unintellective -unintellectual -unintellectualism -unintellectuality -unintellectually -unintelligence -unintelligent -unintelligently -unintelligentsia -unintelligibility -unintelligible -unintelligibleness -unintelligibly -unintended -unintendedly -unintensified -unintensive -unintensively -unintent -unintentional -unintentionality -unintentionally -unintentionalness -unintentiveness -unintently -unintentness -unintercalated -unintercepted -unintercepting -uninterchangeable -uninterdicted -uninterested -uninterestedly -uninterestedness -uninteresting -uninterestingly -uninterestingness -uninterferedwith -uninterjected -uninterlaced -uninterlarded -uninterleave -uninterleaved -uninterlined -uninterlinked -uninterlocked -unintermarrying -unintermediate -unintermediately -unintermediateness -unintermingled -unintermission -unintermissive -unintermitted -unintermittedly -unintermittedness -unintermittent -unintermittently -unintermitting -unintermittingly -unintermittingness -unintermixed -uninternalized -uninternational -uninterpleaded -uninterpolated -uninterpolative -uninterposed -uninterposing -uninterpretability -uninterpretable -uninterpretative -uninterpreted -uninterpretive -uninterpretively -uninterred -uninterrogable -uninterrogated -uninterrogative -uninterrogatively -uninterrogatory -uninterruptable -uninterrupted -uninterruptedly -uninterruptedness -uninterruptible -uninterruptibleness -uninterrupting -uninterruption -uninterruptive -unintersected -unintersecting -uninterspersed -unintervening -uninterviewed -unintervolved -uninterwoven -uninthralled -uninthroned -unintialized -unintimate -unintimated -unintimately -unintimidated -unintimidating -unintitled -unintombed -unintoned -unintoxicated -unintoxicatedness -unintoxicating -unintrenchable -unintrenched -unintrepid -unintrepidly -unintrepidness -unintricate -unintricately -unintricateness -unintrigued -unintriguing -unintrlined -unintroduced -unintroducible -unintroductive -unintroductory -unintroitive -unintromitted -unintromittive -unintrospective -unintrospectively -unintroversive -unintroverted -unintruded -unintruding -unintrudingly -unintrusive -unintrusively -unintrusted -unintuitable -unintuitional -unintuitive -unintuitively -unintwined -uninuclear -uninucleate -uninucleated -uninundated -uninured -uninurned -uninvadable -uninvaded -uninvaginated -uninvalidated -uninvasive -uninvective -uninveighing -uninveigled -uninvented -uninventful -uninventibleness -uninventive -uninventively -uninventiveness -uninverted -uninvertible -uninvestable -uninvested -uninvestigable -uninvestigated -uninvestigating -uninvestigative -uninvestigatory -uninvidious -uninvidiously -uninvigorated -uninvigorating -uninvigorative -uninvigoratively -uninvincible -uninvincibleness -uninvincibly -uninvite -uninvited -uninvitedly -uninviting -uninvitingly -uninvitingness -uninvocative -uninvoiced -uninvokable -uninvoked -uninvoluted -uninvolved -uninvolvement -uninweaved -uninwoven -uninwrapped -uninwreathed -Unio -unio- -uniocular -unioid -unyoke -unyoked -unyokes -unyoking -Uniola -unyolden -Union -Uniondale -unioned -Unionhall -unionic -Un-ionic -unionid -Unionidae -unioniform -unionisation -unionise -unionised -unionises -unionising -Unionism -unionisms -Unionist -unionistic -unionists -unionization -unionizations -unionize -unionized -unionizer -unionizers -unionizes -unionizing -union-made -unionoid -Unionport -unions -union's -Uniontown -Unionville -Uniopolis -unyoung -unyouthful -unyouthfully -unyouthfulness -unioval -uniovular -uniovulate -unipara -uniparental -uniparentally -uniparient -uniparous -unipart -unipartite -uniped -unipeltate -uniperiodic -unipersonal -unipersonalist -unipersonality -unipetalous -uniphase -uniphaser -uniphonous -uniplanar -uniplex -uniplicate -unipod -unipods -unipolar -unipolarity -uniporous -unipotence -unipotent -unipotential -uniprocessor -uniprocessorunix -unipulse -uniquantic -unique -uniquely -uniqueness -uniquer -uniques -uniquest -uniquity -uniradial -uniradiate -uniradiated -uniradical -uniramose -uniramous -Un-iranian -unirascibility -unirascible -unireme -unirenic -unirhyme -uniridescent -uniridescently -Un-irish -Un-irishly -Uniroyal -unironed -unironical -unironically -unirradiated -unirradiative -unirrigable -unirrigated -unirritable -unirritableness -unirritably -unirritant -unirritated -unirritatedly -unirritating -unirritative -unirrupted -unirruptive -unisepalous -uniseptate -uniserial -uniserially -uniseriate -uniseriately -uniserrate -uniserrulate -unisex -unisexed -unisexes -unisexual -unisexuality -unisexually -unisilicate -unism -unisoil -unisolable -unisolate -unisolated -unisolating -unisolationist -unisolative -unisomeric -unisometrical -unisomorphic -unison -unisonal -unisonally -unisonance -unisonant -unisonous -unisons -unisotropic -unisotropous -unisparker -unispiculate -unispinose -unispiral -unissuable -unissuant -unissued -unist -UNISTAR -unistylist -unisulcate -Unit -Unit. -unitable -unitage -unitages -unital -Un-italian -Un-italianate -unitalicized -unitard -unitards -unitary -Unitarian -Unitarianism -Unitarianize -unitarians -unitarily -unitariness -unitarism -unitarist -unite -uniteability -uniteable -uniteably -United -unitedly -unitedness -United-statesian -United-states-man -unitemized -unitentacular -uniter -uniterated -uniterative -uniters -unites -Unity -unities -Unityhouse -unitinerant -uniting -unitingly -unition -unity's -unitism -unitistic -unitive -unitively -unitiveness -Unityville -unitization -unitize -unitized -unitizer -unitizes -unitizing -unitooth -unitrivalent -unitrope -unitrust -units -unit's -unit-set -unituberculate -unitude -uniunguiculate -uniungulate -uni-univalent -unius -Univ -Univ. -UNIVAC -univalence -univalency -univalent -univalvate -univalve -univalved -univalves -univalve's -univalvular -univariant -univariate -univerbal -universal -universalia -Universalian -universalis -universalisation -universalise -universalised -universaliser -universalising -Universalism -Universalist -Universalistic -universalisties -universalists -universality -universalization -universalize -universalized -universalizer -universalizes -universalizing -universally -universalness -universals -universanimous -universe -universeful -universes -universe's -universitary -universitarian -universitarianism -universitas -universitatis -universite -University -university-bred -university-conferred -universities -university-going -universityless -universitylike -university's -universityship -university-sponsored -university-taught -university-trained -universitize -universology -universological -universologist -univied -univocability -univocacy -univocal -univocality -univocalized -univocally -univocals -univocity -univoltine -univorous -uniwear -UNIX -unjacketed -Un-jacobean -unjaded -unjagged -unjailed -unjam -unjammed -unjamming -Un-japanese -unjapanned -unjarred -unjarring -unjaundiced -unjaunty -unjealous -unjealoused -unjealously -unjeered -unjeering -Un-jeffersonian -unjelled -unjellied -unjeopardised -unjeopardized -unjesting -unjestingly -unjesuited -un-Jesuitic -unjesuitical -un-Jesuitical -unjesuitically -un-Jesuitically -unjewel -unjeweled -unjewelled -Unjewish -unjilted -unjocose -unjocosely -unjocoseness -unjocund -unjogged -unjogging -Un-johnsonian -unjoyed -unjoyful -unjoyfully -unjoyfulness -unjoin -unjoinable -unjoined -unjoint -unjointed -unjointedness -unjointing -unjoints -unjointured -unjoyous -unjoyously -unjoyousness -unjoking -unjokingly -unjolly -unjolted -unjostled -unjournalistic -unjournalized -unjovial -unjovially -unjubilant -unjubilantly -Un-judaize -unjudgable -unjudge -unjudgeable -unjudged -unjudgelike -unjudging -unjudicable -unjudicative -unjudiciable -unjudicial -unjudicially -unjudicious -unjudiciously -unjudiciousness -unjuggled -unjuiced -unjuicy -unjuicily -unjumbled -unjumpable -unjuridic -unjuridical -unjuridically -unjust -unjustice -unjusticiable -unjustify -unjustifiability -unjustifiable -unjustifiableness -unjustifiably -unjustification -unjustified -unjustifiedly -unjustifiedness -unjustled -unjustly -unjustness -unjuvenile -unjuvenilely -unjuvenileness -unkaiserlike -unkamed -Un-kantian -unked -unkeeled -unkey -unkeyed -Unkelos -unkembed -unkempt -unkemptly -unkemptness -unken -unkend -unkenned -unkennedness -unkennel -unkenneled -unkenneling -unkennelled -unkennelling -unkennels -unkenning -unkensome -unkent -unkept -unkerchiefed -unket -unkicked -unkid -unkidnaped -unkidnapped -unkill -unkillability -unkillable -unkilled -unkilling -unkilned -unkin -unkind -unkinder -unkindest -unkindhearted -unkindled -unkindledness -unkindly -unkindlier -unkindliest -unkindlily -unkindliness -unkindling -unkindness -unkindnesses -unkindred -unkindredly -unking -unkingdom -unkinged -unkinger -unkingly -unkinglike -unkink -unkinked -unkinks -unkinlike -unkirk -unkiss -unkissed -unkist -unknave -unkneaded -unkneeling -unknelled -unknew -unknight -unknighted -unknightly -unknightlike -unknightliness -unknit -unknits -unknittable -unknitted -unknitting -unknocked -unknocking -unknot -unknots -unknotted -unknotty -unknotting -unknow -unknowability -Unknowable -unknowableness -unknowably -unknowen -unknowing -unknowingly -unknowingness -unknowledgeable -unknown -unknownly -unknownness -unknowns -unknownst -unkodaked -Un-korean -unkosher -unkoshered -unl -unlabeled -unlabelled -unlabialise -unlabialised -unlabialising -unlabialize -unlabialized -unlabializing -unlabiate -unlaborable -unlabored -unlaboring -unlaborious -unlaboriously -unlaboriousness -unlaboured -unlabouring -unlace -unlaced -Un-lacedaemonian -unlacerated -unlacerating -unlaces -unlacing -unlackeyed -unlaconic -unlacquered -unlade -unladed -unladen -unlades -unladyfied -unladylike -unlading -unladled -unlagging -unlay -unlayable -unlaid -unlaying -unlays -unlame -unlamed -unlamentable -unlamented -unlaminated -unlampooned -unlanced -unland -unlanded -unlandmarked -unlanguaged -unlanguid -unlanguidly -unlanguidness -unlanguishing -unlanterned -unlap -unlapped -unlapsed -unlapsing -unlarcenous -unlarcenously -unlarded -unlarge -unlash -unlashed -unlasher -unlashes -unlashing -unlassoed -unlasting -unlatch -unlatched -unlatches -unlatching -unlath -unlathed -unlathered -Un-latin -un-Latinised -unlatinized -un-Latinized -unlatticed -unlaudable -unlaudableness -unlaudably -unlaudative -unlaudatory -unlauded -unlaugh -unlaughing -unlaunched -unlaundered -unlaureled -unlaurelled -unlaved -unlaving -unlavish -unlavished -unlaw -unlawed -unlawful -unlawfully -unlawfulness -unlawyered -unlawyerlike -unlawlearned -unlawly -unlawlike -unlax -unleached -unlead -unleaded -unleaderly -unleading -unleads -unleaf -unleafed -unleaflike -unleagued -unleaguer -unleakable -unleaky -unleal -unlean -unleared -unlearn -unlearnability -unlearnable -unlearnableness -unlearned -unlearnedly -unlearnedness -unlearning -unlearns -unlearnt -unleasable -unleased -unleash -unleashed -unleashes -unleashing -unleathered -unleave -unleaved -unleavenable -unleavened -unlecherous -unlecherously -unlecherousness -unlectured -unled -unledged -unleft -unlegacied -unlegal -unlegalised -unlegalized -unlegally -unlegalness -unlegate -unlegible -unlegislated -unlegislative -unlegislatively -unleisured -unleisuredness -unleisurely -unlengthened -unlenient -unleniently -unlensed -unlent -unless -unlessened -unlessoned -unlet -unlethal -unlethally -unlethargic -unlethargical -unlethargically -unlettable -unletted -unlettered -unletteredly -unletteredness -unlettering -unletterlike -unlevel -unleveled -unleveling -unlevelled -unlevelly -unlevelling -unlevelness -unlevels -unleviable -unlevied -unlevigated -unlexicographical -unlexicographically -unliability -unliable -unlibeled -unlibelled -unlibellous -unlibellously -unlibelous -unlibelously -unliberal -unliberalised -unliberalized -unliberally -unliberated -unlibidinous -unlibidinously -unlycanthropize -unlicensed -unlicentiated -unlicentious -unlicentiously -unlicentiousness -unlichened -unlickable -unlicked -unlid -unlidded -unlie -unlifelike -unliftable -unlifted -unlifting -unligable -unligatured -unlight -unlighted -unlightedly -unlightedness -unlightened -unlignified -unlying -unlikable -unlikableness -unlikably -unlike -unlikeable -unlikeableness -unlikeably -unliked -unlikely -unlikelier -unlikeliest -unlikelihood -unlikeliness -unliken -unlikened -unlikeness -unlikenesses -unliking -unlimb -unlimber -unlimbered -unlimbering -unlimberness -unlimbers -unlime -unlimed -unlimitable -unlimitableness -unlimitably -unlimited -unlimitedly -unlimitedness -unlimitless -unlimned -unlimp -unline -unlineal -unlined -unlingering -unlink -unlinked -unlinking -unlinks -unlionised -unlionized -unlionlike -unliquefiable -unliquefied -unliquescent -unliquid -unliquidatable -unliquidated -unliquidating -unliquidation -unliquored -unlyric -unlyrical -unlyrically -unlyricalness -unlisping -unlist -unlisted -unlistened -unlistening -unlisty -unlit -unliteral -unliteralised -unliteralized -unliterally -unliteralness -unliterary -unliterate -unlithographic -unlitigated -unlitigating -unlitigious -unlitigiously -unlitigiousness -unlitten -unlittered -unliturgical -unliturgize -unlivability -unlivable -unlivableness -unlivably -unlive -unliveable -unliveableness -unliveably -unlived -unlively -unliveliness -unliver -unlivery -unliveried -unliveries -unlives -unliving -unlizardlike -unload -unloaded -unloaden -unloader -unloaders -unloading -unloads -unloafing -unloanably -unloaned -unloaning -unloath -unloathed -unloathful -unloathly -unloathness -unloathsome -unlobbied -unlobbying -unlobed -unlocal -unlocalisable -unlocalise -unlocalised -unlocalising -unlocalizable -unlocalize -unlocalized -unlocalizing -unlocally -unlocated -unlocative -unlock -unlockable -unlocked -unlocker -unlocking -unlocks -unlocomotive -unlodge -unlodged -unlofty -unlogged -unlogic -unlogical -unlogically -unlogicalness -unlogistic -unlogistical -unloyal -unloyally -unloyalty -unlonely -unlonged-for -unlook -unlooked -unlooked-for -unloop -unlooped -unloosable -unloosably -unloose -unloosed -unloosen -unloosened -unloosening -unloosens -unlooses -unloosing -unlooted -unlopped -unloquacious -unloquaciously -unloquaciousness -unlord -unlorded -unlordly -unlosable -unlosableness -unlost -unlotted -unloudly -unlouken -unlounging -unlousy -unlovable -unlovableness -unlovably -unlove -unloveable -unloveableness -unloveably -unloved -unlovely -unlovelier -unloveliest -unlovelily -unloveliness -unloverly -unloverlike -unlovesome -unloving -unlovingly -unlovingness -unlowered -unlowly -unltraconservative -unlubricant -unlubricated -unlubricating -unlubricative -unlubricious -unlucent -unlucid -unlucidly -unlucidness -unluck -unluckful -unlucky -unluckier -unluckiest -unluckily -unluckiness -unluckly -unlucrative -unludicrous -unludicrously -unludicrousness -unluffed -unlugged -unlugubrious -unlugubriously -unlugubriousness -unlumbering -unluminescent -unluminiferous -unluminous -unluminously -unluminousness -unlumped -unlumpy -unlunar -unlunate -unlunated -unlured -unlurking -unlush -unlust -unlustered -unlustful -unlustfully -unlusty -unlustie -unlustier -unlustiest -unlustily -unlustiness -unlusting -unlustred -unlustrous -unlustrously -unlute -unluted -Un-lutheran -unluxated -unluxuriant -unluxuriantly -unluxuriating -unluxurious -unluxuriously -UNMA -unmacadamized -unmacerated -Un-machiavellian -unmachinable -unmachinated -unmachinating -unmachineable -unmachined -unmacho -unmackly -unmad -unmadded -unmaddened -unmade -unmade-up -Un-magyar -unmagic -unmagical -unmagically -unmagisterial -unmagistrate -unmagistratelike -unmagnanimous -unmagnanimously -unmagnanimousness -unmagnetic -unmagnetical -unmagnetised -unmagnetized -unmagnify -unmagnified -unmagnifying -unmaid -unmaiden -unmaidenly -unmaidenlike -unmaidenliness -unmail -unmailable -unmailableness -unmailed -unmaimable -unmaimed -unmaintainable -unmaintained -unmajestic -unmajestically -unmakable -unmake -unmaker -unmakers -unmakes -unmaking -Un-malay -unmalarial -unmaledictive -unmaledictory -unmalevolent -unmalevolently -unmalicious -unmaliciously -unmalignant -unmalignantly -unmaligned -unmalleability -unmalleable -unmalleableness -unmalled -unmaltable -unmalted -Un-maltese -unmammalian -unmammonized -unman -unmanacle -unmanacled -unmanacling -unmanageability -unmanageable -unmanageableness -unmanageably -unmanaged -unmancipated -unmandated -unmandatory -unmanducated -unmaned -unmaneged -unmaneuverable -unmaneuvered -unmanful -unmanfully -unmanfulness -unmangled -unmanhood -unmaniable -unmaniac -unmaniacal -unmaniacally -Un-manichaeanize -unmanicured -unmanifest -unmanifestative -unmanifested -unmanipulable -unmanipulatable -unmanipulated -unmanipulative -unmanipulatory -unmanly -unmanlier -unmanliest -unmanlike -unmanlily -unmanliness -unmanned -unmanner -unmannered -unmanneredly -unmannerly -unmannerliness -unmanning -unmannish -unmannishly -unmannishness -unmanoeuvred -unmanored -unmans -unmantle -unmantled -unmanual -unmanually -unmanufacturable -unmanufactured -unmanumissible -unmanumitted -unmanurable -unmanured -unmappable -unmapped -unmarbelize -unmarbelized -unmarbelizing -unmarbled -unmarbleize -unmarbleized -unmarbleizing -unmarch -unmarching -unmarginal -unmarginally -unmarginated -unmarine -unmaritime -unmarkable -unmarked -unmarketable -unmarketed -unmarking -unmarled -unmarred -unmarry -unmarriable -unmarriageability -unmarriageable -unmarried -unmarrying -unmarring -unmarshaled -unmarshalled -unmartial -unmartyr -unmartyred -unmarveling -unmarvellous -unmarvellously -unmarvellousness -unmarvelous -unmarvelously -unmarvelousness -unmasculine -unmasculinely -unmashed -unmask -unmasked -unmasker -unmaskers -unmasking -unmasks -unmasquerade -unmassacred -unmassed -unmast -unmaster -unmasterable -unmastered -unmasterful -unmasterfully -unmasticable -unmasticated -unmasticatory -unmatchable -unmatchableness -unmatchably -unmatched -unmatchedness -unmatching -unmate -unmated -unmaterial -unmaterialised -unmaterialistic -unmaterialistically -unmaterialized -unmaterially -unmateriate -unmaternal -unmaternally -unmathematical -unmathematically -unmating -unmatriculated -unmatrimonial -unmatrimonially -unmatronlike -unmatted -unmaturative -unmature -unmatured -unmaturely -unmatureness -unmaturing -unmaturity -unmaudlin -unmaudlinly -unmauled -unmaze -unmeandering -unmeanderingly -unmeaning -unmeaningful -unmeaningfully -unmeaningfulness -unmeaningly -unmeaningness -unmeant -unmeasurability -unmeasurable -unmeasurableness -unmeasurably -unmeasured -unmeasuredly -unmeasuredness -unmeasurely -unmeated -unmechanic -unmechanical -unmechanically -unmechanised -unmechanistic -unmechanize -unmechanized -unmedaled -unmedalled -unmeddle -unmeddled -unmeddlesome -unmeddling -unmeddlingly -unmeddlingness -unmediaeval -unmediated -unmediating -unmediative -unmediatized -unmedicable -unmedical -unmedically -unmedicated -unmedicative -unmedicinable -unmedicinal -unmedicinally -unmedieval -unmeditated -unmeditating -unmeditative -unmeditatively -Un-mediterranean -unmediumistic -unmedullated -unmeedful -unmeedy -unmeek -unmeekly -unmeekness -unmeet -unmeetable -unmeetly -unmeetness -unmelancholy -unmelancholic -unmelancholically -unmeliorated -unmellifluent -unmellifluently -unmellifluous -unmellifluously -unmellow -unmellowed -unmelodic -unmelodically -unmelodious -unmelodiously -unmelodiousness -unmelodised -unmelodized -unmelodramatic -unmelodramatically -unmelt -unmeltable -unmeltableness -unmeltably -unmelted -unmeltedness -unmelting -unmember -unmemoired -unmemorable -unmemorably -unmemorialised -unmemorialized -unmemoried -unmemorized -unmenaced -unmenacing -unmendable -unmendableness -unmendably -unmendacious -unmendaciously -unmended -unmenial -unmenially -unmenseful -unmenstruating -unmensurable -unmental -unmentally -unmentholated -unmentionability -unmentionable -unmentionableness -unmentionables -unmentionably -unmentioned -unmercantile -unmercenary -unmercenarily -unmercenariness -unmercerized -unmerchandised -unmerchantable -unmerchantly -unmerchantlike -unmerciable -unmerciably -unmercied -unmerciful -unmercifully -unmercifulness -unmerciless -unmercurial -unmercurially -unmercurialness -unmeretricious -unmeretriciously -unmeretriciousness -unmerge -unmerged -unmerging -unmeridional -unmeridionally -unmeringued -unmeritability -unmeritable -unmerited -unmeritedly -unmeritedness -unmeriting -unmeritorious -unmeritoriously -unmeritoriousness -unmerry -unmerrily -unmesh -unmeshed -unmeshes -unmesmeric -unmesmerically -unmesmerised -unmesmerize -unmesmerized -unmet -unmetaled -unmetalised -unmetalized -unmetalled -unmetallic -unmetallically -unmetallurgic -unmetallurgical -unmetallurgically -unmetamorphic -unmetamorphosed -unmetaphysic -unmetaphysical -unmetaphysically -unmetaphorical -unmete -unmeted -unmeteorologic -unmeteorological -unmeteorologically -unmetered -unmeth -unmethylated -unmethodic -unmethodical -unmethodically -unmethodicalness -unmethodised -unmethodising -Un-methodize -unmethodized -unmethodizing -unmeticulous -unmeticulously -unmeticulousness -unmetred -unmetric -unmetrical -unmetrically -unmetricalness -unmetrified -unmetropolitan -unmettle -unmew -unmewed -unmewing -unmews -Un-mexican -unmiasmal -unmiasmatic -unmiasmatical -unmiasmic -unmicaceous -unmicrobial -unmicrobic -unmicroscopic -unmicroscopically -unmidwifed -unmyelinated -unmight -unmighty -unmigrant -unmigrating -unmigrative -unmigratory -unmild -unmildewed -unmildness -unmilitant -unmilitantly -unmilitary -unmilitarily -unmilitariness -unmilitarised -unmilitaristic -unmilitaristically -unmilitarized -unmilked -unmilled -unmillinered -unmilted -Un-miltonic -unmimeographed -unmimetic -unmimetically -unmimicked -unminable -unminced -unmincing -unmind -unminded -unmindful -unmindfully -unmindfulness -unminding -unmined -unmineralised -unmineralized -unmingle -unmingleable -unmingled -unmingles -unmingling -unminimised -unminimising -unminimized -unminimizing -unminished -unminister -unministered -unministerial -unministerially -unministrant -unministrative -unminted -unminuted -unmyopic -unmiracled -unmiraculous -unmiraculously -unmired -unmiry -unmirrored -unmirthful -unmirthfully -unmirthfulness -unmisanthropic -unmisanthropical -unmisanthropically -unmiscarrying -unmischievous -unmischievously -unmiscible -unmisconceivable -unmiserly -unmisgiving -unmisgivingly -unmisguided -unmisguidedly -unmisinterpretable -unmisled -unmissable -unmissed -unmissionary -unmissionized -unmist -unmistakable -unmistakableness -unmistakably -unmistakedly -unmistaken -unmistaking -unmistakingly -unmystery -unmysterious -unmysteriously -unmysteriousness -unmystic -unmystical -unmystically -unmysticalness -unmysticise -unmysticised -unmysticising -unmysticize -unmysticized -unmysticizing -unmystified -unmistressed -unmistrusted -unmistrustful -unmistrustfully -unmistrusting -unmisunderstandable -unmisunderstanding -unmisunderstood -unmiter -unmitered -unmitering -unmiters -unmythical -unmythically -unmythological -unmythologically -unmitigability -unmitigable -unmitigated -unmitigatedly -unmitigatedness -unmitigative -unmitre -unmitred -unmitres -unmitring -unmittened -unmix -unmixable -unmixableness -unmixed -unmixedly -unmixedness -unmixt -unmoaned -unmoaning -unmoated -unmobbed -unmobile -unmobilised -unmobilized -unmoble -unmocked -unmocking -unmockingly -unmodel -unmodeled -unmodelled -unmoderate -unmoderated -unmoderately -unmoderateness -unmoderating -unmodern -unmodernised -unmodernity -unmodernize -unmodernized -unmodest -unmodestly -unmodestness -unmodifiability -unmodifiable -unmodifiableness -unmodifiably -unmodificative -unmodified -unmodifiedness -unmodish -unmodishly -unmodulated -unmodulative -Un-mohammedan -unmoiled -unmoist -unmoisten -unmold -unmoldable -unmoldableness -unmolded -unmoldered -unmoldering -unmoldy -unmolding -unmolds -unmolest -unmolested -unmolestedly -unmolesting -unmolified -unmollifiable -unmollifiably -unmollified -unmollifying -unmolten -unmomentary -unmomentous -unmomentously -unmomentousness -unmonarch -unmonarchic -unmonarchical -unmonarchically -unmonastic -unmonastically -unmoneyed -unmonetary -Un-mongolian -unmonistic -unmonitored -unmonkish -unmonkly -unmonogrammed -unmonopolised -unmonopolising -unmonopolize -unmonopolized -unmonopolizing -unmonotonous -unmonotonously -unmonumental -unmonumented -unmoody -unmoor -unmoored -unmooring -Un-moorish -unmoors -unmooted -unmopped -unmoral -unmoralising -unmoralist -unmoralistic -unmorality -unmoralize -unmoralized -unmoralizing -unmorally -unmoralness -unmorbid -unmorbidly -unmorbidness -unmordant -unmordanted -unmordantly -unmoribund -unmoribundly -Un-mormon -unmorose -unmorosely -unmoroseness -unmorphological -unmorphologically -unmorrised -unmortal -unmortalize -unmortared -unmortgage -unmortgageable -unmortgaged -unmortgaging -unmortified -unmortifiedly -unmortifiedness -unmortise -unmortised -unmortising -Un-mosaic -Un-moslem -Un-moslemlike -unmossed -unmossy -unmoth-eaten -unmothered -unmotherly -unmotile -unmotionable -unmotioned -unmotioning -unmotivated -unmotivatedly -unmotivatedness -unmotivating -unmotived -unmotored -unmotorised -unmotorized -unmottled -unmould -unmouldable -unmouldered -unmouldering -unmouldy -unmounded -unmount -unmountable -unmountainous -unmounted -unmounting -unmourned -unmournful -unmournfully -unmourning -unmouthable -unmouthed -unmouthpieced -unmovability -unmovable -unmovableness -unmovablety -unmovably -unmoveable -unmoved -unmovedly -unmoving -unmovingly -unmovingness -unmowed -unmown -unmucilaged -unmudded -unmuddy -unmuddied -unmuddle -unmuddled -unmuffle -unmuffled -unmuffles -unmuffling -unmulcted -unmulish -unmulled -unmullioned -unmultiply -unmultipliable -unmultiplicable -unmultiplicative -unmultiplied -unmultipliedly -unmultiplying -unmumbled -unmumbling -unmummied -unmummify -unmummified -unmummifying -unmunched -unmundane -unmundanely -unmundified -unmunicipalised -unmunicipalized -unmunificent -unmunificently -unmunitioned -unmurmured -unmurmuring -unmurmuringly -unmurmurous -unmurmurously -unmuscled -unmuscular -unmuscularly -unmusical -unmusicality -unmusically -unmusicalness -unmusicianly -unmusing -unmusked -unmussed -unmusted -unmusterable -unmustered -unmutable -unmutant -unmutated -unmutation -unmutational -unmutative -unmuted -unmutilated -unmutilative -unmutinous -unmutinously -unmutinousness -unmuttered -unmuttering -unmutteringly -unmutual -unmutualised -unmutualized -unmutually -unmuzzle -unmuzzled -unmuzzles -unmuzzling -unn -unnabbed -unnacreous -unnagged -unnagging -unnaggingly -unnail -unnailed -unnailing -unnails -unnaive -unnaively -unnaked -unnamability -unnamable -unnamableness -unnamably -unname -unnameability -unnameable -unnameableness -unnameably -unnamed -unnapkined -unnapped -unnapt -unnarcissistic -unnarcotic -unnarratable -unnarrated -unnarrative -unnarrow -unnarrowed -unnarrowly -unnarrow-minded -unnarrow-mindedly -unnarrow-mindedness -unnasal -unnasally -unnascent -unnation -unnational -unnationalised -unnationalistic -unnationalistically -unnationalized -unnationally -unnative -unnatural -unnaturalise -unnaturalised -unnaturalising -unnaturalism -unnaturalist -unnaturalistic -unnaturality -unnaturalizable -unnaturalize -unnaturalized -unnaturalizing -unnaturally -unnaturalness -unnaturalnesses -unnature -unnauseated -unnauseating -unnautical -unnavigability -unnavigable -unnavigableness -unnavigably -unnavigated -unnealed -unneaped -Un-neapolitan -unnear -unnearable -unneared -unnearly -unnearness -unneat -unneath -unneatly -unneatness -unnebulous -unneccessary -unnecessary -unnecessaries -unnecessarily -unnecessariness -unnecessitated -unnecessitating -unnecessity -unnecessitous -unnecessitously -unnecessitousness -unnectareous -unnectarial -unneeded -unneedful -unneedfully -unneedfulness -unneedy -unnefarious -unnefariously -unnefariousness -unnegated -unneglected -unneglectful -unneglectfully -unnegligent -unnegotiable -unnegotiableness -unnegotiably -unnegotiated -unnegro -un-Negro -unneighbored -unneighborly -unneighborlike -unneighborliness -unneighbourly -unneighbourliness -unnephritic -unnerve -unnerved -unnerves -unnerving -unnervingly -unnervous -unnervously -unnervousness -unness -unnest -unnestle -unnestled -unnet -unneth -unnethe -unnethes -unnethis -unnetted -unnettled -unneural -unneuralgic -unneurotic -unneurotically -unneutered -unneutral -unneutralise -unneutralised -unneutralising -unneutrality -unneutralize -unneutralized -unneutralizing -unneutrally -unnew -unnewly -unnewness -unnewsed -Unni -unnibbed -unnibbied -unnibbled -unnice -unnicely -unniceness -unniched -unnicked -unnickeled -unnickelled -unnicknamed -unniggard -unniggardly -unnigh -unnihilistic -unnimbed -unnimble -unnimbleness -unnimbly -unnymphal -unnymphean -unnymphlike -unnipped -unnitrogenised -unnitrogenized -unnitrogenous -unnobilitated -unnobility -unnoble -unnobleness -unnobly -unnocturnal -unnocturnally -unnodding -unnoddingly -unnoised -unnoisy -unnoisily -unnojectionable -unnomadic -unnomadically -unnominal -unnominalistic -unnominally -unnominated -unnominative -unnonsensical -unnooked -unnoosed -unnormal -unnormalised -unnormalising -unnormalized -unnormalizing -unnormally -unnormalness -Un-norman -unnormative -unnorthern -Un-norwegian -unnose -unnosed -unnotable -unnotational -unnotched -unnoted -unnoteworthy -unnoteworthiness -unnoticeable -unnoticeableness -unnoticeably -unnoticed -unnoticing -unnotify -unnotified -unnoting -unnotional -unnotionally -unnotioned -unnourishable -unnourished -unnourishing -unnovel -unnovercal -unnucleated -unnullified -unnumbed -un-numbed -unnumber -unnumberable -unnumberableness -unnumberably -unnumbered -unnumberedness -unnumerable -unnumerated -unnumerical -unnumerous -unnumerously -unnumerousness -unnurtured -unnutritious -unnutritiously -unnutritive -unnuzzled -UNO -unoared -unobdurate -unobdurately -unobdurateness -unobedience -unobedient -unobediently -unobeyed -unobeying -unobese -unobesely -unobeseness -unobfuscated -unobjected -unobjectified -unobjectionability -unobjectionable -unobjectionableness -unobjectionably -unobjectional -unobjective -unobjectively -unobjectivized -unobligated -unobligating -unobligative -unobligatory -unobliged -unobliging -unobligingly -unobligingness -unobliterable -unobliterated -unoblivious -unobliviously -unobliviousness -unobnoxious -unobnoxiously -unobnoxiousness -unobscene -unobscenely -unobsceneness -unobscure -unobscured -unobscurely -unobscureness -unobsequious -unobsequiously -unobsequiousness -unobservable -unobservance -unobservant -unobservantly -unobservantness -unobserved -unobservedly -unobserving -unobservingly -unobsessed -unobsolete -unobstinate -unobstinately -unobstruct -unobstructed -unobstructedly -unobstructedness -unobstructive -unobstruent -unobstruently -unobtainability -unobtainable -unobtainableness -unobtainably -unobtained -unobtruded -unobtruding -unobtrusive -unobtrusively -unobtrusiveness -unobtunded -unobumbrated -unobverted -unobviable -unobviated -unobvious -unobviously -unobviousness -unoccasional -unoccasionally -unoccasioned -unoccidental -unoccidentally -unoccluded -unoccupancy -unoccupation -unoccupiable -unoccupied -unoccupiedly -unoccupiedness -unoccurring -unoceanic -unocular -unode -unodious -unodiously -unodiousness -unodored -unodoriferous -unodoriferously -unodoriferousness -unodorous -unodorously -unodorousness -unoecumenic -unoecumenical -unoffendable -unoffended -unoffendedly -unoffender -unoffending -unoffendingly -unoffensive -unoffensively -unoffensiveness -unoffered -unofficed -unofficered -unofficerlike -unofficial -unofficialdom -unofficially -unofficialness -unofficiated -unofficiating -unofficinal -unofficious -unofficiously -unofficiousness -unoffset -unoften -unogled -unoil -unoiled -unoily -unoiling -unold -Un-olympian -unomened -unominous -unominously -unominousness -unomitted -unomnipotent -unomnipotently -unomniscient -unomnisciently -Unona -unonerous -unonerously -unonerousness -unontological -unopaque -unoped -unopen -unopenable -unopened -unopening -unopenly -unopenness -unoperably -unoperatable -unoperated -unoperatic -unoperatically -unoperating -unoperative -unoperculate -unoperculated -unopiated -unopiatic -unopined -unopinionated -unopinionatedness -unopinioned -unoppignorated -unopportune -unopportunely -unopportuneness -unopportunistic -unopposable -unopposed -unopposedly -unopposedness -unopposing -unopposite -unoppositional -unoppressed -unoppressive -unoppressively -unoppressiveness -unopprobrious -unopprobriously -unopprobriousness -unoppugned -unopressible -unopted -unoptimistic -unoptimistical -unoptimistically -unoptimized -unoptional -unoptionally -unopulence -unopulent -unopulently -unoral -unorally -unorational -unoratorial -unoratorical -unoratorically -unorbed -unorbital -unorbitally -unorchestrated -unordain -unordainable -unordained -unorder -unorderable -unordered -unorderly -unordinal -unordinary -unordinarily -unordinariness -unordinate -unordinately -unordinateness -unordnanced -unorganed -unorganic -unorganical -unorganically -unorganicalness -unorganisable -unorganised -unorganizable -unorganized -unorganizedly -unorganizedness -unoriental -unorientally -unorientalness -unoriented -unoriginal -unoriginality -unoriginally -unoriginalness -unoriginate -unoriginated -unoriginatedness -unoriginately -unoriginateness -unorigination -unoriginative -unoriginatively -unoriginativeness -unorn -unornamental -unornamentally -unornamentalness -unornamentation -unornamented -unornate -unornately -unornateness -unornithological -unornly -unorphaned -unorthodox -unorthodoxy -unorthodoxically -unorthodoxly -unorthodoxness -unorthographical -unorthographically -unoscillating -unosculated -unosmotic -unossified -unossifying -unostensible -unostensibly -unostensive -unostensively -unostentation -unostentatious -unostentatiously -unostentatiousness -unousted -unoutgrown -unoutlawed -unoutraged -unoutspeakable -unoutspoken -unoutworn -unoverclouded -unovercomable -unovercome -unoverdone -unoverdrawn -unoverflowing -unoverhauled -unoverleaped -unoverlooked -unoverpaid -unoverpowered -unoverruled -unovert -unovertaken -unoverthrown -unovervalued -unoverwhelmed -Un-ovidian -unowed -unowing -unown -unowned -unoxidable -unoxidated -unoxidative -unoxidisable -unoxidised -unoxidizable -unoxidized -unoxygenated -unoxygenized -unp -unpacable -unpaced -unpacifiable -unpacific -unpacified -unpacifiedly -unpacifiedness -unpacifist -unpacifistic -unpack -unpackaged -unpacked -unpacker -unpackers -unpacking -unpacks -unpadded -unpadlocked -unpagan -unpaganize -unpaganized -unpaganizing -unpaged -unpaginal -unpaginated -unpay -unpayable -unpayableness -unpayably -unpaid -unpaid-for -unpaid-letter -unpaying -unpayment -unpained -unpainful -unpainfully -unpaining -unpainstaking -unpaint -unpaintability -unpaintable -unpaintableness -unpaintably -unpainted -unpaintedly -unpaintedness -unpaired -unpaised -unpalatability -unpalatable -unpalatableness -unpalatably -unpalatal -unpalatalized -unpalatally -unpalatial -unpale -unpaled -unpalisaded -unpalisadoed -unpalled -unpalliable -unpalliated -unpalliative -unpalpable -unpalpablely -unpalped -unpalpitating -unpalsied -unpaltry -unpampered -unpanegyrised -unpanegyrized -unpanel -unpaneled -unpanelled -unpanged -unpanicky -un-panic-stricken -unpannel -unpanniered -unpanoplied -unpantheistic -unpantheistical -unpantheistically -unpanting -unpapal -unpapaverous -unpaper -unpapered -unparaded -unparadise -unparadox -unparadoxal -unparadoxical -unparadoxically -unparagoned -unparagonized -unparagraphed -unparalysed -unparalyzed -unparallel -unparallelable -unparalleled -unparalleledly -unparalleledness -unparallelled -unparallelness -unparametrized -unparaphrased -unparasitic -unparasitical -unparasitically -unparcel -unparceled -unparceling -unparcelled -unparcelling -unparch -unparched -unparching -unpardon -unpardonability -unpardonable -unpardonableness -unpardonably -unpardoned -unpardonedness -unpardoning -unpared -unparegal -unparental -unparentally -unparented -unparenthesised -unparenthesized -unparenthetic -unparenthetical -unparenthetically -unparfit -unpargeted -Un-parisian -Un-parisianized -unpark -unparked -unparking -unparliamentary -unparliamented -unparochial -unparochialism -unparochially -unparodied -unparolable -unparoled -unparrel -unparriable -unparried -unparrying -unparroted -unparsed -unparser -unparsimonious -unparsimoniously -unparsonic -unparsonical -unpartable -unpartableness -unpartably -unpartaken -unpartaking -unparted -unparty -unpartial -unpartiality -unpartially -unpartialness -unpartible -unparticipant -unparticipated -unparticipating -unparticipative -unparticular -unparticularised -unparticularising -unparticularized -unparticularizing -unparticularness -unpartisan -unpartitioned -unpartitive -unpartizan -unpartnered -unpartook -unpass -unpassable -unpassableness -unpassably -unpassed -unpassing -unpassionate -unpassionately -unpassionateness -unpassioned -unpassive -unpassively -unpaste -unpasted -unpasteurised -unpasteurized -unpasting -unpastor -unpastoral -unpastorally -unpastured -unpatched -unpatent -unpatentable -unpatented -unpaternal -unpaternally -unpathed -unpathetic -unpathetically -unpathological -unpathologically -unpathwayed -unpatience -unpatient -unpatiently -unpatientness -unpatinated -unpatriarchal -unpatriarchally -unpatrician -unpatriotic -unpatriotically -unpatriotism -unpatristic -unpatristical -unpatristically -unpatrolled -unpatronisable -unpatronizable -unpatronized -unpatronizing -unpatronizingly -unpatted -unpatterned -unpatternized -unpaunch -unpaunched -unpauperized -unpausing -unpausingly -unpave -unpaved -unpavilioned -unpaving -unpawed -unpawn -unpawned -unpeace -unpeaceable -unpeaceableness -unpeaceably -unpeaceful -unpeacefully -unpeacefulness -unpeaked -unpealed -unpearled -unpebbled -unpeccable -unpecked -unpeculating -unpeculiar -unpeculiarly -unpecuniarily -unpedagogic -unpedagogical -unpedagogically -unpedantic -unpedantical -unpeddled -unpedestal -unpedestaled -unpedestaling -unpedigreed -unpeel -unpeelable -unpeelableness -unpeeled -unpeeling -unpeerable -unpeered -unpeevish -unpeevishly -unpeevishness -unpeg -unpegged -unpegging -unpegs -unpejorative -unpejoratively -unpelagic -Un-peloponnesian -unpelted -unpen -unpenal -unpenalised -unpenalized -unpenally -unpenanced -unpenciled -unpencilled -unpendant -unpendent -unpending -unpendulous -unpendulously -unpendulousness -unpenetrable -unpenetrably -unpenetrant -unpenetrated -unpenetrating -unpenetratingly -unpenetrative -unpenetratively -unpenitent -unpenitential -unpenitentially -unpenitently -unpenitentness -unpenned -unpennied -unpenning -unpennoned -unpens -unpensionable -unpensionableness -unpensioned -unpensioning -unpent -unpenurious -unpenuriously -unpenuriousness -unpeople -unpeopled -unpeoples -unpeopling -unpeppered -unpeppery -unperceivability -unperceivable -unperceivably -unperceived -unperceivedly -unperceiving -unperceptible -unperceptibleness -unperceptibly -unperceptional -unperceptive -unperceptively -unperceptiveness -unperceptual -unperceptually -unperch -unperched -unpercipient -unpercolated -unpercussed -unpercussive -unperdurable -unperdurably -unperemptory -unperemptorily -unperemptoriness -unperfect -unperfected -unperfectedly -unperfectedness -unperfectible -unperfection -unperfective -unperfectively -unperfectiveness -unperfectly -unperfectness -unperfidious -unperfidiously -unperfidiousness -unperflated -unperforable -unperforate -unperforated -unperforating -unperforative -unperformability -unperformable -unperformance -unperformed -unperforming -unperfumed -unperilous -unperilously -unperiodic -unperiodical -unperiodically -unperipheral -unperipherally -unperiphrased -unperiphrastic -unperiphrastically -unperishable -unperishableness -unperishably -unperished -unperishing -unperjured -unperjuring -unpermanency -unpermanent -unpermanently -unpermeable -unpermeant -unpermeated -unpermeating -unpermeative -unpermissible -unpermissibly -unpermissive -unpermit -unpermits -unpermitted -unpermitting -unpermixed -unpernicious -unperniciously -unperpendicular -unperpendicularly -unperpetrated -unperpetuable -unperpetuated -unperpetuating -unperplex -unperplexed -unperplexing -unpersecuted -unpersecuting -unpersecutive -unperseverance -unpersevering -unperseveringly -unperseveringness -Un-persian -unpersisting -unperson -unpersonable -unpersonableness -unpersonal -unpersonalised -unpersonalising -unpersonality -unpersonalized -unpersonalizing -unpersonally -unpersonify -unpersonified -unpersonifying -unpersons -unperspicuous -unperspicuously -unperspicuousness -unperspirable -unperspired -unperspiring -unpersuadability -unpersuadable -unpersuadableness -unpersuadably -unpersuade -unpersuaded -unpersuadedness -unpersuasibility -unpersuasible -unpersuasibleness -unpersuasion -unpersuasive -unpersuasively -unpersuasiveness -unpertaining -unpertinent -unpertinently -unperturbable -unperturbably -unperturbed -unperturbedly -unperturbedness -unperturbing -unperuked -unperusable -unperused -unpervaded -unpervading -unpervasive -unpervasively -unpervasiveness -unperverse -unperversely -unperversive -unpervert -unperverted -unpervertedly -unpervious -unperviously -unperviousness -unpessimistic -unpessimistically -unpestered -unpesterous -unpestilent -unpestilential -unpestilently -unpetal -unpetaled -unpetalled -unpetitioned -Un-petrarchan -unpetrify -unpetrified -unpetrifying -unpetted -unpetticoated -unpetulant -unpetulantly -unpharasaic -unpharasaical -unphased -unphenomenal -unphenomenally -Un-philadelphian -unphilanthropic -unphilanthropically -unphilologic -unphilological -unphilosophy -unphilosophic -unphilosophical -unphilosophically -unphilosophicalness -unphilosophize -unphilosophized -unphysical -unphysically -unphysicianlike -unphysicked -unphysiological -unphysiologically -unphlegmatic -unphlegmatical -unphlegmatically -unphonetic -unphoneticness -unphonnetical -unphonnetically -unphonographed -unphosphatised -unphosphatized -unphotographable -unphotographed -unphotographic -unphrasable -unphrasableness -unphrased -unphrenological -unpicaresque -unpick -unpickable -unpicked -unpicketed -unpicking -unpickled -unpicks -unpictorial -unpictorialise -unpictorialised -unpictorialising -unpictorialize -unpictorialized -unpictorializing -unpictorially -unpicturability -unpicturable -unpictured -unpicturesque -unpicturesquely -unpicturesqueness -unpiece -unpieced -unpierceable -unpierced -unpiercing -unpiety -unpigmented -unpile -unpiled -unpiles -unpilfered -unpilgrimlike -unpiling -unpillaged -unpillared -unpilled -unpilloried -unpillowed -unpiloted -unpimpled -unpin -unpinched -Un-pindaric -Un-pindarical -Un-pindarically -unpining -unpinion -unpinioned -unpinked -unpinned -unpinning -unpins -unpioneering -unpious -unpiously -unpiped -unpiqued -unpirated -unpiratical -unpiratically -unpitched -unpited -unpiteous -unpiteously -unpiteousness -Un-pythagorean -unpity -unpitiable -unpitiably -unpitied -unpitiedly -unpitiedness -unpitiful -unpitifully -unpitifulness -unpitying -unpityingly -unpityingness -unpitted -unplacable -unplacably -unplacated -unplacatory -unplace -unplaced -unplacement -unplacid -unplacidly -unplacidness -unplagiarised -unplagiarized -unplagued -unplayable -unplaid -unplayed -unplayful -unplayfully -unplaying -unplain -unplained -unplainly -unplainness -unplait -unplaited -unplaiting -unplaits -unplan -unplaned -unplanished -unplank -unplanked -unplanned -unplannedly -unplannedness -unplanning -unplant -unplantable -unplanted -unplantlike -unplashed -unplaster -unplastered -unplastic -unplat -unplated -unplatitudinous -unplatitudinously -unplatitudinousness -Un-platonic -Un-platonically -unplatted -unplausible -unplausibleness -unplausibly -unplausive -unpleached -unpleadable -unpleaded -unpleading -unpleasable -unpleasant -unpleasantish -unpleasantly -unpleasantness -unpleasantnesses -unpleasantry -unpleasantries -unpleased -unpleasing -unpleasingly -unpleasingness -unpleasive -unpleasurable -unpleasurably -unpleasure -unpleat -unpleated -unplebeian -unpledged -unplenished -unplenteous -unplenteously -unplentiful -unplentifully -unplentifulness -unpliability -unpliable -unpliableness -unpliably -unpliancy -unpliant -unpliantly -unpliantness -unplied -unplight -unplighted -unplodding -unplotted -unplotting -unplough -unploughed -unplow -unplowed -unplucked -unplug -unplugged -unplugging -unplugs -unplumb -unplumbed -unplume -unplumed -unplummeted -unplump -unplundered -unplunderous -unplunderously -unplunge -unplunged -unpluralised -unpluralistic -unpluralized -unplutocratic -unplutocratical -unplutocratically -unpneumatic -unpneumatically -unpoached -unpocket -unpocketed -unpodded -unpoetic -unpoetical -unpoetically -unpoeticalness -unpoeticised -unpoeticized -unpoetize -unpoetized -unpoignant -unpoignantly -unpoignard -unpointed -unpointing -unpoise -unpoised -unpoison -unpoisonable -unpoisoned -unpoisonous -unpoisonously -unpolarised -unpolarizable -unpolarized -unpoled -unpolemic -unpolemical -unpolemically -unpoliced -unpolicied -unpolymerised -unpolymerized -unpolish -Un-polish -unpolishable -unpolished -unpolishedness -unpolite -unpolitely -unpoliteness -unpolitic -unpolitical -unpolitically -unpoliticly -unpollarded -unpolled -unpollened -unpollutable -unpolluted -unpollutedly -unpolluting -unpompous -unpompously -unpompousness -unponderable -unpondered -unponderous -unponderously -unponderousness -unpontifical -unpontifically -unpooled -unpope -unpopular -unpopularised -unpopularity -unpopularities -unpopularize -unpopularized -unpopularly -unpopularness -unpopulate -unpopulated -unpopulous -unpopulously -unpopulousness -unporcelainized -unporness -unpornographic -unporous -unporousness -unportable -unportended -unportentous -unportentously -unportentousness -unporticoed -unportionable -unportioned -unportly -unportmanteaued -unportrayable -unportrayed -unportraited -Un-portuguese -unportunate -unportuous -unposed -unposing -unpositive -unpositively -unpositiveness -unpositivistic -unpossess -unpossessable -unpossessed -unpossessedness -unpossessing -unpossessive -unpossessively -unpossessiveness -unpossibility -unpossible -unpossibleness -unpossibly -unposted -unpostered -unposthumous -unpostmarked -unpostponable -unpostponed -unpostulated -unpot -unpotable -unpotent -unpotently -unpotted -unpotting -unpouched -unpoulticed -unpounced -unpounded -unpourable -unpoured -unpouting -unpoutingly -unpowdered -unpower -unpowerful -unpowerfulness -unpracticability -unpracticable -unpracticableness -unpracticably -unpractical -unpracticality -unpractically -unpracticalness -unpractice -unpracticed -unpracticedness -unpractised -unpragmatic -unpragmatical -unpragmatically -unpray -unprayable -unprayed -unprayerful -unprayerfully -unprayerfulness -unpraying -unpraisable -unpraise -unpraised -unpraiseful -unpraiseworthy -unpraising -unpranked -unprating -unpreach -unpreached -unpreaching -unprecarious -unprecariously -unprecariousness -unprecautioned -unpreceded -unprecedented -unprecedentedly -unprecedentedness -unprecedential -unprecedently -unpreceptive -unpreceptively -unprecious -unpreciously -unpreciousness -unprecipiced -unprecipitant -unprecipitantly -unprecipitate -unprecipitated -unprecipitately -unprecipitateness -unprecipitative -unprecipitatively -unprecipitous -unprecipitously -unprecipitousness -unprecise -unprecisely -unpreciseness -unprecisive -unprecludable -unprecluded -unprecludible -unpreclusive -unpreclusively -unprecocious -unprecociously -unprecociousness -unpredaceous -unpredaceously -unpredaceousness -unpredacious -unpredaciously -unpredaciousness -unpredatory -unpredestinated -unpredestined -unpredetermined -unpredicable -unpredicableness -unpredicably -unpredicated -unpredicative -unpredicatively -unpredict -unpredictability -unpredictabilness -unpredictable -unpredictableness -unpredictably -unpredicted -unpredictedness -unpredicting -unpredictive -unpredictively -unpredisposed -unpredisposing -unpreempted -un-preempted -unpreened -unprefaced -unpreferable -unpreferableness -unpreferably -unpreferred -unprefigured -unprefined -unprefixal -unprefixally -unprefixed -unpregnable -unpregnant -unprehensive -unpreying -unprejudged -unprejudicated -unprejudice -unprejudiced -unprejudicedly -unprejudicedness -unprejudiciable -unprejudicial -unprejudicially -unprejudicialness -unprelatic -unprelatical -unpreluded -unpremature -unprematurely -unprematureness -unpremeditate -unpremeditated -unpremeditatedly -unpremeditatedness -unpremeditately -unpremeditation -unpremonished -unpremonstrated -unprenominated -unprenticed -unpreoccupied -unpreordained -unpreparation -unprepare -unprepared -unpreparedly -unpreparedness -unpreparing -unpreponderated -unpreponderating -unprepossessed -unprepossessedly -unprepossessing -unprepossessingly -unprepossessingness -unpreposterous -unpreposterously -unpreposterousness -unpresaged -unpresageful -unpresaging -unpresbyterated -Un-presbyterian -unprescient -unpresciently -unprescinded -unprescribed -unpresentability -unpresentable -unpresentableness -unpresentably -unpresentative -unpresented -unpreservable -unpreserved -unpresidential -unpresidentially -unpresiding -unpressed -unpresses -unpressured -unprest -unpresumable -unpresumably -unpresumed -unpresuming -unpresumingness -unpresumptive -unpresumptively -unpresumptuous -unpresumptuously -unpresumptuousness -unpresupposed -unpretended -unpretending -unpretendingly -unpretendingness -unpretentious -unpretentiously -unpretentiousness -unpretermitted -unpreternatural -unpreternaturally -unpretty -unprettified -unprettily -unprettiness -unprevailing -unprevalence -unprevalent -unprevalently -unprevaricating -unpreventability -unpreventable -unpreventableness -unpreventably -unpreventative -unprevented -unpreventible -unpreventive -unpreventively -unpreventiveness -unpreviewed -unpriceably -unpriced -unpricked -unprickled -unprickly -unprideful -unpridefully -unpriest -unpriestly -unpriestlike -unpriggish -unprying -unprim -unprime -unprimed -unprimitive -unprimitively -unprimitiveness -unprimitivistic -unprimly -unprimmed -unprimness -unprince -unprincely -unprincelike -unprinceliness -unprincess -unprincipal -unprinciple -unprincipled -unprincipledly -unprincipledness -unprint -unprintable -unprintableness -unprintably -unprinted -unpriority -unprismatic -unprismatical -unprismatically -unprison -unprisonable -unprisoned -unprivate -unprivately -unprivateness -unprivileged -unprizable -unprized -unprobable -unprobably -unprobated -unprobational -unprobationary -unprobative -unprobed -unprobity -unproblematic -unproblematical -unproblematically -unprocessed -unprocessional -unproclaimed -unprocrastinated -unprocreant -unprocreate -unprocreated -unproctored -unprocurable -unprocurableness -unprocure -unprocured -unprodded -unproded -unprodigious -unprodigiously -unprodigiousness -unproduceable -unproduceableness -unproduceably -unproduced -unproducedness -unproducible -unproducibleness -unproducibly -unproductive -unproductively -unproductiveness -unproductivity -unprofanable -unprofane -unprofaned -unprofanely -unprofaneness -unprofessed -unprofessing -unprofessional -unprofessionalism -unprofessionally -unprofessionalness -unprofessorial -unprofessorially -unproffered -unproficiency -unproficient -unproficiently -unprofit -unprofitability -unprofitable -unprofitableness -unprofitably -unprofited -unprofiteering -unprofiting -unprofound -unprofoundly -unprofoundness -unprofundity -unprofuse -unprofusely -unprofuseness -unprognosticated -unprognosticative -unprogrammatic -unprogressed -unprogressive -unprogressively -unprogressiveness -unprohibited -unprohibitedness -unprohibitive -unprohibitively -unprojected -unprojecting -unprojective -unproliferous -unprolific -unprolifically -unprolificness -unprolifiness -unprolix -unprologued -unprolongable -unprolonged -unpromiscuous -unpromiscuously -unpromiscuousness -unpromise -unpromised -unpromising -unpromisingly -unpromisingness -unpromotable -unpromoted -unpromotional -unpromotive -unprompt -unprompted -unpromptly -unpromptness -unpromulgated -unpronounce -unpronounceable -unpronounced -unpronouncing -unproofread -unprop -unpropagable -unpropagandistic -unpropagated -unpropagative -unpropelled -unpropellent -unpropense -unproper -unproperly -unproperness -unpropertied -unprophesiable -unprophesied -unprophetic -unprophetical -unprophetically -unprophetlike -unpropice -unpropitiable -unpropitiated -unpropitiatedness -unpropitiating -unpropitiative -unpropitiatory -unpropitious -unpropitiously -unpropitiousness -unproportion -unproportionable -unproportionableness -unproportionably -unproportional -unproportionality -unproportionally -unproportionate -unproportionately -unproportionateness -unproportioned -unproportionedly -unproportionedness -unproposable -unproposed -unproposing -unpropounded -unpropped -unpropriety -unprorogued -unprosaic -unprosaical -unprosaically -unprosaicness -unproscribable -unproscribed -unproscriptive -unproscriptively -unprosecutable -unprosecuted -unprosecuting -unproselyte -unproselyted -unprosodic -unprospected -unprospective -unprosperably -unprospered -unprospering -unprosperity -unprosperous -unprosperously -unprosperousness -unprostitute -unprostituted -unprostrated -unprotect -unprotectable -unprotected -unprotectedly -unprotectedness -unprotecting -unprotection -unprotective -unprotectively -unprotestant -Un-protestant -unprotestantize -Un-protestantlike -unprotested -unprotesting -unprotestingly -unprotracted -unprotractive -unprotruded -unprotrudent -unprotruding -unprotrusible -unprotrusive -unprotrusively -unprotuberant -unprotuberantly -unproud -unproudly -unprovability -unprovable -unprovableness -unprovably -unproved -unprovedness -unproven -unproverbial -unproverbially -unprovidable -unprovide -unprovided -unprovidedly -unprovidedness -unprovidenced -unprovident -unprovidential -unprovidentially -unprovidently -unproviding -unprovincial -unprovincialism -unprovincially -unproving -unprovised -unprovisedly -unprovision -unprovisional -unprovisioned -unprovocative -unprovocatively -unprovocativeness -unprovokable -unprovoke -unprovoked -unprovokedly -unprovokedness -unprovoking -unprovokingly -unprowling -unproximity -unprudence -unprudent -unprudential -unprudentially -unprudently -unprunable -unpruned -Un-prussian -Un-prussianized -unpsychic -unpsychically -unpsychological -unpsychologically -unpsychopathic -unpsychotic -unpublic -unpublicity -unpublicized -unpublicly -unpublishable -unpublishableness -unpublishably -unpublished -unpucker -unpuckered -unpuckering -unpuckers -unpuddled -unpuff -unpuffed -unpuffing -unpugilistic -unpugnacious -unpugnaciously -unpugnaciousness -unpulled -unpulleyed -unpulped -unpulsating -unpulsative -unpulverable -unpulverised -unpulverize -unpulverized -unpulvinate -unpulvinated -unpumicated -unpummeled -unpummelled -unpumpable -unpumped -unpunched -unpunctate -unpunctated -unpunctilious -unpunctiliously -unpunctiliousness -unpunctual -unpunctuality -unpunctually -unpunctualness -unpunctuated -unpunctuating -unpunctured -unpunishable -unpunishably -unpunished -unpunishedly -unpunishedness -unpunishing -unpunishingly -unpunitive -unpurchasable -unpurchased -unpure -unpured -unpurely -unpureness -unpurgative -unpurgatively -unpurgeable -unpurged -unpurifiable -unpurified -unpurifying -unpuristic -unpuritan -unpuritanic -unpuritanical -unpuritanically -unpurled -unpurloined -unpurpled -unpurported -unpurposed -unpurposely -unpurposelike -unpurposing -unpurposive -unpurse -unpursed -unpursuable -unpursuant -unpursued -unpursuing -unpurveyed -unpushed -unput -unputative -unputatively -unputrefiable -unputrefied -unputrid -unputridity -unputridly -unputridness -unputtied -unpuzzle -unpuzzled -unpuzzles -unpuzzling -unquadded -unquaffed -unquayed -unquailed -unquailing -unquailingly -unquakerly -unquakerlike -unquaking -unqualify -unqualifiable -unqualification -unqualified -unqualifiedly -unqualifiedness -unqualifying -unqualifyingly -unquality -unqualitied -unquantifiable -unquantified -unquantitative -unquarantined -unquarreled -unquarreling -unquarrelled -unquarrelling -unquarrelsome -unquarried -unquartered -unquashed -unquavering -unqueen -unqueened -unqueening -unqueenly -unqueenlike -unquellable -unquelled -unqueme -unquemely -unquenchable -unquenchableness -unquenchably -unquenched -unqueried -unquert -unquerulous -unquerulously -unquerulousness -unquested -unquestionability -unquestionable -unquestionableness -unquestionably -unquestionate -unquestioned -unquestionedly -unquestionedness -unquestioning -unquestioningly -unquestioningness -unquibbled -unquibbling -unquick -unquickened -unquickly -unquickness -unquicksilvered -unquiescence -unquiescent -unquiescently -unquiet -unquietable -unquieted -unquieter -unquietest -unquieting -unquietly -unquietness -unquietous -unquiets -unquietude -unquilleted -unquilted -unquit -unquittable -unquitted -unquivered -unquivering -unquixotic -unquixotical -unquixotically -unquizzable -unquizzed -unquizzical -unquizzically -unquod -unquotable -unquote -unquoted -unquotes -unquoting -unrabbeted -unrabbinic -unrabbinical -unraced -unrack -unracked -unracking -unradiant -unradiated -unradiative -unradical -unradicalize -unradically -unradioactive -unraffled -unraftered -unray -unraided -unrayed -unrailed -unrailroaded -unrailwayed -unrainy -unraisable -unraiseable -unraised -unrake -unraked -unraking -unrallied -unrallying -unram -unrambling -unramified -unrammed -unramped -unranched -unrancid -unrancored -unrancorous -unrancoured -unrancourous -unrandom -unranging -unrank -unranked -unrankled -unransacked -unransomable -unransomed -unranting -unrapacious -unrapaciously -unrapaciousness -unraped -unraptured -unrapturous -unrapturously -unrapturousness -unrare -unrarefied -unrash -unrashly -unrashness -unrasped -unraspy -unrasping -unratable -unrated -unratified -unrationable -unrational -unrationalised -unrationalising -unrationalized -unrationalizing -unrationally -unrationed -unrattled -unravaged -unravel -unravelable -unraveled -unraveler -unraveling -unravellable -unravelled -unraveller -unravelling -unravelment -unravels -unraving -unravished -unravishing -unrazed -unrazored -unreachable -unreachableness -unreachably -unreached -unreactionary -unreactive -unread -unreadability -unreadable -unreadableness -unreadably -unready -unreadier -unreadiest -unreadily -unreadiness -unreal -unrealise -unrealised -unrealising -unrealism -unrealist -unrealistic -unrealistically -unreality -unrealities -unrealizability -unrealizable -unrealize -unrealized -unrealizing -unreally -unrealmed -unrealness -unreaped -unreared -unreason -unreasonability -unreasonable -unreasonableness -unreasonably -unreasoned -unreasoning -unreasoningly -unreasoningness -unreasons -unreassuring -unreassuringly -unreave -unreaving -unrebated -unrebel -unrebellious -unrebelliously -unrebelliousness -unrebuffable -unrebuffably -unrebuffed -unrebuilt -unrebukable -unrebukably -unrebukeable -unrebuked -unrebuttable -unrebuttableness -unrebutted -unrecalcitrant -unrecallable -unrecallably -unrecalled -unrecalling -unrecantable -unrecanted -unrecanting -unrecaptured -unreceding -unreceipted -unreceivable -unreceived -unreceiving -unrecent -unreceptant -unreceptive -unreceptively -unreceptiveness -unreceptivity -unrecessive -unrecessively -unrecipient -unreciprocal -unreciprocally -unreciprocated -unreciprocating -unrecitative -unrecited -unrecked -unrecking -unreckingness -unreckless -unreckon -unreckonable -unreckoned -unreclaimable -unreclaimably -unreclaimed -unreclaimedness -unreclaiming -unreclined -unreclining -unrecluse -unreclusive -unrecoded -unrecognisable -unrecognisably -unrecognition -unrecognitory -unrecognizable -unrecognizableness -unrecognizably -unrecognized -unrecognizing -unrecognizingly -unrecoined -unrecollectable -unrecollected -unrecollective -unrecommendable -unrecommended -unrecompensable -unrecompensed -unreconcilable -unreconcilableness -unreconcilably -unreconciled -unreconciling -unrecondite -unreconnoitered -unreconnoitred -unreconsidered -unreconstructed -unreconstructible -unrecordable -unrecorded -unrecordedness -unrecording -unrecountable -unrecounted -unrecoverable -unrecoverableness -unrecoverably -unrecovered -unrecreant -unrecreated -unrecreating -unrecreational -unrecriminative -unrecruitable -unrecruited -unrectangular -unrectangularly -unrectifiable -unrectifiably -unrectified -unrecumbent -unrecumbently -unrecuperated -unrecuperatiness -unrecuperative -unrecuperativeness -unrecuperatory -unrecuring -unrecurrent -unrecurrently -unrecurring -unrecusant -unred -unredacted -unredeemable -unredeemableness -unredeemably -unredeemed -unredeemedly -unredeemedness -unredeeming -unredemptive -unredressable -unredressed -unreduceable -unreduced -unreducible -unreducibleness -unreducibly -unreduct -unreefed -unreel -unreelable -unreeled -unreeler -unreelers -unreeling -unreels -un-reembodied -unreeve -unreeved -unreeves -unreeving -unreferenced -unreferred -unrefilled -unrefine -unrefined -unrefinedly -unrefinedness -unrefinement -unrefining -unrefitted -unreflected -unreflecting -unreflectingly -unreflectingness -unreflective -unreflectively -unreformable -unreformative -unreformed -unreformedness -unreforming -unrefracted -unrefracting -unrefractive -unrefractively -unrefractiveness -unrefractory -unrefrainable -unrefrained -unrefraining -unrefrangible -unrefreshed -unrefreshful -unrefreshing -unrefreshingly -unrefrigerated -unrefulgent -unrefulgently -unrefundable -unrefunded -unrefunding -unrefusable -unrefusably -unrefused -unrefusing -unrefusingly -unrefutability -unrefutable -unrefutably -unrefuted -unrefuting -unregainable -unregained -unregal -unregaled -unregality -unregally -unregard -unregardable -unregardant -unregarded -unregardedly -unregardful -unregenerable -unregeneracy -unregenerate -unregenerated -unregenerately -unregenerateness -unregenerating -unregeneration -unregenerative -unregimental -unregimentally -unregimented -unregistered -unregistrable -unregressive -unregressively -unregressiveness -unregretful -unregretfully -unregretfulness -unregrettable -unregrettably -unregretted -unregretting -unregulable -unregular -unregularised -unregularized -unregulated -unregulative -unregulatory -unregurgitated -unrehabilitated -unrehearsable -unrehearsed -unrehearsing -unreigning -unreimbodied -unrein -unreined -unreinforced -unreinstated -unreiterable -unreiterated -unreiterating -unreiterative -unrejectable -unrejected -unrejective -unrejoiced -unrejoicing -unrejuvenated -unrejuvenating -unrelayed -unrelapsing -unrelatable -unrelated -unrelatedness -unrelating -unrelational -unrelative -unrelatively -unrelativistic -unrelaxable -unrelaxed -unrelaxing -unrelaxingly -unreleasable -unreleased -unreleasible -unreleasing -unrelegable -unrelegated -unrelentable -unrelentance -unrelented -unrelenting -unrelentingly -unrelentingness -unrelentless -unrelentor -unrelevant -unrelevantly -unreliability -unreliable -unreliableness -unreliably -unreliance -unreliant -unrelievability -unrelievable -unrelievableness -unrelieved -unrelievedly -unrelievedness -unrelieving -unreligion -unreligioned -unreligious -unreligiously -unreligiousness -unrelinquishable -unrelinquishably -unrelinquished -unrelinquishing -unrelishable -unrelished -unrelishing -unreluctance -unreluctant -unreluctantly -unremaining -unremanded -unremarkable -unremarkableness -unremarked -unremarking -unremarried -unremediable -unremedied -unremember -unrememberable -unremembered -unremembering -unremembrance -unreminded -unreminiscent -unreminiscently -unremissible -unremissive -unremittable -unremitted -unremittedly -unremittence -unremittency -unremittent -unremittently -unremitting -unremittingly -unremittingness -unremonstrant -unremonstrated -unremonstrating -unremonstrative -unremorseful -unremorsefully -unremorsefulness -unremote -unremotely -unremoteness -unremounted -unremovable -unremovableness -unremovably -unremoved -unremunerated -unremunerating -unremunerative -unremuneratively -unremunerativeness -unrenderable -unrendered -unrenewable -unrenewed -unrenounceable -unrenounced -unrenouncing -unrenovated -unrenovative -unrenowned -unrenownedly -unrenownedness -unrent -unrentable -unrented -unrenunciable -unrenunciative -unrenunciatory -unreorganised -unreorganized -unrepayable -unrepaid -unrepair -unrepairable -unrepaired -unrepairs -unrepartable -unreparted -unrepealability -unrepealable -unrepealableness -unrepealably -unrepealed -unrepeatable -unrepeated -unrepellable -unrepelled -unrepellent -unrepellently -unrepent -unrepentable -unrepentance -unrepentant -unrepentantly -unrepentantness -unrepented -unrepenting -unrepentingly -unrepentingness -unrepetitious -unrepetitiously -unrepetitiousness -unrepetitive -unrepetitively -unrepined -unrepining -unrepiningly -unrepiqued -unreplaceable -unreplaced -unrepleness -unreplenished -unreplete -unrepleteness -unrepleviable -unreplevinable -unreplevined -unreplevisable -unrepliable -unrepliably -unreplied -unreplying -unreportable -unreported -unreportedly -unreportedness -unreportorial -unrepose -unreposed -unreposeful -unreposefully -unreposefulness -unreposing -unrepossessed -unreprehended -unreprehensible -unreprehensibleness -unreprehensibly -unrepreseed -unrepresentable -unrepresentation -unrepresentational -unrepresentative -unrepresentatively -unrepresentativeness -unrepresented -unrepresentedness -unrepressed -unrepressible -unrepression -unrepressive -unrepressively -unrepressiveness -unreprievable -unreprievably -unreprieved -unreprimanded -unreprimanding -unreprinted -unreproachable -unreproachableness -unreproachably -unreproached -unreproachful -unreproachfully -unreproachfulness -unreproaching -unreproachingly -unreprobated -unreprobative -unreprobatively -unreproduced -unreproducible -unreproductive -unreproductively -unreproductiveness -unreprovable -unreprovableness -unreprovably -unreproved -unreprovedly -unreprovedness -unreproving -unrepublican -unrepudiable -unrepudiated -unrepudiative -unrepugnable -unrepugnant -unrepugnantly -unrepulsable -unrepulsed -unrepulsing -unrepulsive -unrepulsively -unrepulsiveness -unreputable -unreputed -unrequalified -unrequest -unrequested -unrequickened -unrequired -unrequisite -unrequisitely -unrequisiteness -unrequisitioned -unrequitable -unrequital -unrequited -unrequitedly -unrequitedness -unrequitement -unrequiter -unrequiting -unrescinded -unrescissable -unrescissory -unrescuable -unrescued -unresearched -unresemblance -unresemblant -unresembling -unresented -unresentful -unresentfully -unresentfulness -unresenting -unreserve -unreserved -unreservedly -unreservedness -unresident -unresidential -unresidual -unresifted -unresigned -unresignedly -unresilient -unresiliently -unresinous -unresistable -unresistably -unresistance -unresistant -unresistantly -unresisted -unresistedly -unresistedness -unresistible -unresistibleness -unresistibly -unresisting -unresistingly -unresistingness -unresistive -unresolute -unresolutely -unresoluteness -unresolvable -unresolve -unresolved -unresolvedly -unresolvedness -unresolving -unresonant -unresonantly -unresonating -unresounded -unresounding -unresourceful -unresourcefully -unresourcefulness -unrespect -unrespectability -unrespectable -unrespectably -unrespected -unrespectful -unrespectfully -unrespectfulness -unrespective -unrespectively -unrespectiveness -unrespirable -unrespired -unrespited -unresplendent -unresplendently -unresponding -unresponsal -unresponsible -unresponsibleness -unresponsibly -unresponsive -unresponsively -unresponsiveness -unrest -unrestable -unrested -unrestful -unrestfully -unrestfulness -unresty -unresting -unrestingly -unrestingness -unrestitutive -unrestorable -unrestorableness -unrestorative -unrestored -unrestrainable -unrestrainably -unrestrained -unrestrainedly -unrestrainedness -unrestraint -unrestrictable -unrestricted -unrestrictedly -unrestrictedness -unrestriction -unrestrictive -unrestrictively -unrests -unresultive -unresumed -unresumptive -unresurrected -unresuscitable -unresuscitated -unresuscitating -unresuscitative -unretainable -unretained -unretaining -unretaliated -unretaliating -unretaliative -unretaliatory -unretardable -unretarded -unretentive -unretentively -unretentiveness -unreticence -unreticent -unreticently -unretinued -unretired -unretiring -unretorted -unretouched -unretractable -unretracted -unretractive -unretreated -unretreating -unretrenchable -unretrenched -unretributive -unretributory -unretrievable -unretrieved -unretrievingly -unretroactive -unretroactively -unretrograded -unretrograding -unretrogressive -unretrogressively -unretted -unreturnable -unreturnableness -unreturnably -unreturned -unreturning -unreturningly -unrevealable -unrevealed -unrevealedness -unrevealing -unrevealingly -unrevelational -unrevelationize -unreveling -unrevelling -unrevenged -unrevengeful -unrevengefully -unrevengefulness -unrevenging -unrevengingly -unrevenue -unrevenued -unreverberant -unreverberated -unreverberating -unreverberative -unrevered -unreverence -unreverenced -unreverend -unreverendly -unreverent -unreverential -unreverentially -unreverently -unreverentness -unreversable -unreversed -unreversible -unreversibleness -unreversibly -unreverted -unrevertible -unreverting -unrevested -unrevetted -unreviewable -unreviewed -unreviled -unreviling -unrevised -unrevivable -unrevived -unrevocable -unrevocableness -unrevocably -unrevokable -unrevoked -unrevolted -unrevolting -unrevolutionary -unrevolutionized -unrevolved -unrevolving -unrewardable -unrewarded -unrewardedly -unrewarding -unrewardingly -unreworded -unrhapsodic -unrhapsodical -unrhapsodically -unrhetorical -unrhetorically -unrhetoricalness -unrheumatic -unrhyme -unrhymed -unrhyming -unrhythmic -unrhythmical -unrhythmically -unribbed -unribboned -unrich -unriched -unricht -unricked -unrid -unridable -unridableness -unridably -unridden -unriddle -unriddleable -unriddled -unriddler -unriddles -unriddling -unride -unridely -unridered -unridged -unridiculed -unridiculous -unridiculously -unridiculousness -unrife -unriffled -unrifled -unrifted -unrig -unrigged -unrigging -unright -unrightable -unrighted -unrighteous -unrighteously -unrighteousness -unrightful -unrightfully -unrightfulness -unrightly -unrightwise -unrigid -unrigidly -unrigidness -unrigorous -unrigorously -unrigorousness -unrigs -unrimed -unrimpled -unrind -unring -unringable -unringed -unringing -unrinsed -unrioted -unrioting -unriotous -unriotously -unriotousness -unrip -unripe -unriped -unripely -unripened -unripeness -unripening -unriper -unripest -unrippable -unripped -unripping -unrippled -unrippling -unripplingly -unrips -unrisen -unrisible -unrising -unriskable -unrisked -unrisky -unritual -unritualistic -unritually -unrivalable -unrivaled -unrivaledly -unrivaledness -unrivaling -unrivalled -unrivalledly -unrivalling -unrivalrous -unrived -unriven -unrivet -unriveted -unriveting -unroaded -unroadworthy -unroaming -unroast -unroasted -unrobbed -unrobe -unrobed -unrobes -unrobing -unrobust -unrobustly -unrobustness -unrocked -unrocky -unrococo -unrodded -unroyal -unroyalist -unroyalized -unroyally -unroyalness -unroiled -unroll -unrollable -unrolled -unroller -unrolling -unrollment -unrolls -Un-roman -Un-romanize -Un-romanized -unromantic -unromantical -unromantically -unromanticalness -unromanticised -unromanticism -unromanticized -unroof -unroofed -unroofing -unroofs -unroomy -unroost -unroosted -unroosting -unroot -unrooted -unrooting -unroots -unrope -unroped -unrosed -unrosined -unrostrated -unrotary -unrotated -unrotating -unrotational -unrotative -unrotatory -unroted -unrotted -unrotten -unrotund -unrouged -unrough -unroughened -unround -unrounded -unrounding -unrounds -unrousable -unroused -unrousing -unrout -unroutable -unrouted -unroutine -unroutinely -unrove -unroved -unroven -unroving -unrow -unrowdy -unrowed -unroweled -unrowelled -UNRRA -unrrove -unrubbed -unrubbish -unrubified -unrubrical -unrubrically -unrubricated -unruddered -unruddled -unrude -unrudely -unrued -unrueful -unruefully -unruefulness -unrufe -unruffable -unruffed -unruffle -unruffled -unruffledness -unruffling -unrugged -unruinable -unruinated -unruined -unruinous -unruinously -unruinousness -unrulable -unrulableness -unrule -unruled -unruledly -unruledness -unruleful -unruly -unrulier -unruliest -unrulily -unruliment -unruliness -unrulinesses -unruminant -unruminated -unruminating -unruminatingly -unruminative -unrummaged -unrumored -unrumoured -unrumple -unrumpled -unrun -unrung -unrupturable -unruptured -unrural -unrurally -unrushed -unrushing -Unrussian -unrust -unrusted -unrustic -unrustically -unrusticated -unrustling -unruth -UNRWA -uns -unsabbatical -unsabered -unsabled -unsabotaged -unsabred -unsaccharic -unsaccharine -unsacerdotal -unsacerdotally -unsack -unsacked -unsacrament -unsacramental -unsacramentally -unsacramentarian -unsacred -unsacredly -unsacredness -unsacrificeable -unsacrificeably -unsacrificed -unsacrificial -unsacrificially -unsacrificing -unsacrilegious -unsacrilegiously -unsacrilegiousness -unsad -unsadden -unsaddened -unsaddle -unsaddled -unsaddles -unsaddling -unsadistic -unsadistically -unsadly -unsadness -unsafe -unsafeguarded -unsafely -unsafeness -unsafer -unsafest -unsafety -unsafetied -unsafeties -unsagacious -unsagaciously -unsagaciousness -unsage -unsagely -unsageness -unsagging -unsay -unsayability -unsayable -unsaid -unsaying -unsailable -unsailed -unsailorlike -unsaint -unsainted -unsaintly -unsaintlike -unsaintliness -unsays -unsaked -unsalability -unsalable -unsalableness -unsalably -unsalacious -unsalaciously -unsalaciousness -unsalaried -unsaleable -unsaleably -unsalesmanlike -unsalient -unsaliently -unsaline -unsalivated -unsalivating -unsallying -unsallow -unsallowness -unsalmonlike -unsalness -unsalt -unsaltable -unsaltatory -unsaltatorial -unsalted -unsalty -unsalubrious -unsalubriously -unsalubriousness -unsalutary -unsalutariness -unsalutatory -unsaluted -unsaluting -unsalvability -unsalvable -unsalvableness -unsalvably -unsalvageability -unsalvageable -unsalvageably -unsalvaged -unsalved -unsame -unsameness -unsampled -unsanctify -unsanctification -unsanctified -unsanctifiedly -unsanctifiedness -unsanctifying -unsanctimonious -unsanctimoniously -unsanctimoniousness -unsanction -unsanctionable -unsanctioned -unsanctioning -unsanctity -unsanctitude -unsanctuaried -unsandaled -unsandalled -unsanded -unsane -unsaneness -unsanguinary -unsanguinarily -unsanguinariness -unsanguine -unsanguinely -unsanguineness -unsanguineous -unsanguineously -unsanitary -unsanitariness -unsanitated -unsanitation -unsanity -unsanitized -unsapient -unsapiential -unsapientially -unsapiently -unsaponifiable -unsaponified -unsapped -unsappy -Un-saracenic -unsarcastic -unsarcastical -unsarcastically -unsardonic -unsardonically -unsartorial -unsartorially -unsash -unsashed -unsatable -unsatanic -unsatanical -unsatanically -unsatcheled -unsated -unsatedly -unsatedness -unsatiability -unsatiable -unsatiableness -unsatiably -unsatiate -unsatiated -unsatiating -unsatin -unsating -unsatire -unsatiric -unsatirical -unsatirically -unsatiricalness -unsatirisable -unsatirised -unsatirizable -unsatirize -unsatirized -unsatyrlike -unsatisfaction -unsatisfactory -unsatisfactorily -unsatisfactoriness -unsatisfy -unsatisfiability -unsatisfiable -unsatisfiableness -unsatisfiably -unsatisfied -unsatisfiedly -unsatisfiedness -unsatisfying -unsatisfyingly -unsatisfyingness -unsaturable -unsaturate -unsaturated -unsaturatedly -unsaturatedness -unsaturates -unsaturation -unsauced -unsaught -unsaurian -unsavable -unsavage -unsavagely -unsavageness -unsaveable -unsaved -unsaving -unsavingly -unsavor -unsavored -unsavoredly -unsavoredness -unsavory -unsavorily -unsavoriness -unsavorly -unsavoured -unsavoury -unsavourily -unsavouriness -unsawed -unsawn -Un-saxon -unscabbard -unscabbarded -unscabbed -unscabrous -unscabrously -unscabrousness -unscaffolded -unscalable -unscalableness -unscalably -unscalded -unscalding -unscale -unscaled -unscaledness -unscaly -unscaling -unscalloped -unscamped -unscandalised -unscandalize -unscandalized -unscandalous -unscandalously -unscannable -unscanned -unscanted -unscanty -unscapable -unscarb -unscarce -unscarcely -unscarceness -unscared -unscarfed -unscarified -unscarred -unscarved -unscathed -unscathedly -unscathedness -unscattered -unscavenged -unscavengered -unscenic -unscenically -unscent -unscented -unscepter -unsceptered -unsceptical -unsceptically -unsceptre -unsceptred -unscheduled -unschematic -unschematically -unschematised -unschematized -unschemed -unscheming -unschismatic -unschismatical -unschizoid -unschizophrenic -unscholar -unscholarly -unscholarlike -unscholarliness -unscholastic -unscholastically -unschool -unschooled -unschooledly -unschooledness -unscience -unscienced -unscientific -unscientifical -unscientifically -unscientificness -unscintillant -unscintillating -unscioned -unscissored -unscoffed -unscoffing -unscolded -unscolding -unsconced -unscooped -unscorched -unscorching -unscored -unscorified -unscoring -unscorned -unscornful -unscornfully -unscornfulness -unscotch -Un-scotch -unscotched -unscottify -Un-scottish -unscoured -unscourged -unscourging -unscouring -unscowling -unscowlingly -unscramble -unscrambled -unscrambler -unscrambles -unscrambling -unscraped -unscraping -unscratchable -unscratched -unscratching -unscratchingly -unscrawled -unscrawling -unscreen -unscreenable -unscreenably -unscreened -unscrew -unscrewable -unscrewed -unscrewing -unscrews -unscribal -unscribbled -unscribed -unscrimped -unscripted -unscriptural -Un-scripturality -unscripturally -unscripturalness -unscrubbed -unscrupled -unscrupulosity -unscrupulous -unscrupulously -unscrupulousness -unscrupulousnesses -unscrutable -unscrutinised -unscrutinising -unscrutinisingly -unscrutinized -unscrutinizing -unscrutinizingly -unsculptural -unsculptured -unscummed -unscutcheoned -unseafaring -unseal -unsealable -unsealed -unsealer -unsealing -unseals -unseam -unseamanlike -unseamanship -unseamed -unseaming -unseams -unsearchable -unsearchableness -unsearchably -unsearched -unsearcherlike -unsearching -unsearchingly -unseared -unseason -unseasonable -unseasonableness -unseasonably -unseasoned -unseat -unseated -unseating -unseats -unseaworthy -unseaworthiness -unseceded -unseceding -unsecluded -unsecludedly -unsecluding -unseclusive -unseclusively -unseclusiveness -unseconded -unsecrecy -unsecret -unsecretarial -unsecretarylike -unsecreted -unsecreting -unsecretive -unsecretively -unsecretiveness -unsecretly -unsecretness -unsectarian -unsectarianism -unsectarianize -unsectarianized -unsectarianizing -unsectional -unsectionalised -unsectionalized -unsectionally -unsectioned -unsecular -unsecularised -unsecularize -unsecularized -unsecularly -unsecurable -unsecurableness -unsecure -unsecured -unsecuredly -unsecuredness -unsecurely -unsecureness -unsecurity -unsedate -unsedately -unsedateness -unsedative -unsedentary -unsedimental -unsedimentally -unseditious -unseditiously -unseditiousness -unseduce -unseduceability -unseduceable -unseduced -unseducible -unseducibleness -unseducibly -unseductive -unseductively -unseductiveness -unsedulous -unsedulously -unsedulousness -unsee -unseeable -unseeableness -unseeded -unseeding -unseeing -unseeingly -unseeingness -unseeking -unseel -unseely -unseeliness -unseeming -unseemingly -unseemly -unseemlier -unseemliest -unseemlily -unseemliness -unseen -unseethed -unseething -unsegmental -unsegmentally -unsegmentary -unsegmented -unsegregable -unsegregated -unsegregatedness -unsegregating -unsegregational -unsegregative -unseignioral -unseignorial -unseismal -unseismic -unseizable -unseize -unseized -unseldom -unselect -unselected -unselecting -unselective -unselectiveness -unself -unself-assertive -unselfassured -unself-centered -unself-centred -unself-changing -unselfconfident -unself-confident -unselfconscious -unself-conscious -unselfconsciously -unself-consciously -unselfconsciousness -unself-consciousness -unself-denying -unself-determined -unself-evident -unself-indulgent -unselfish -unselfishly -unselfishness -unselfishnesses -unself-knowing -unselflike -unselfness -unself-opinionated -unself-possessed -unself-reflecting -unselfreliant -unself-righteous -unself-righteously -unself-righteousness -unself-sacrificial -unself-sacrificially -unself-sacrificing -unself-sufficiency -unself-sufficient -unself-sufficiently -unself-supported -unself-valuing -unself-willed -unself-willedness -unsely -unseliness -unsell -unselling -unselth -unseminared -Un-semitic -unsenatorial -unsenescent -unsenile -unsensate -unsensational -unsensationally -unsense -unsensed -unsensibility -unsensible -unsensibleness -unsensibly -unsensing -unsensitise -unsensitised -unsensitising -unsensitive -unsensitively -unsensitiveness -unsensitize -unsensitized -unsensitizing -unsensory -unsensual -unsensualised -unsensualistic -unsensualize -unsensualized -unsensually -unsensuous -unsensuously -unsensuousness -unsent -unsentenced -unsententious -unsententiously -unsententiousness -unsent-for -unsentient -unsentiently -unsentimental -unsentimentalised -unsentimentalist -unsentimentality -unsentimentalize -unsentimentalized -unsentimentally -unsentineled -unsentinelled -unseparable -unseparableness -unseparably -unseparate -unseparated -unseparately -unseparateness -unseparating -unseparative -unseptate -unseptated -unsepulcher -unsepulchered -unsepulchral -unsepulchrally -unsepulchre -unsepulchred -unsepulchring -unsepultured -unsequenced -unsequent -unsequential -unsequentially -unsequestered -unseraphic -unseraphical -unseraphically -Un-serbian -unsere -unserenaded -unserene -unserenely -unsereneness -unserflike -unserialised -unserialized -unserious -unseriously -unseriousness -unserrate -unserrated -unserried -unservable -unserved -unservice -unserviceability -unserviceable -unserviceableness -unserviceably -unserviced -unservicelike -unservile -unservilely -unserving -unsesquipedalian -unset -unsets -unsetting -unsettle -unsettleable -unsettled -unsettledness -unsettlement -unsettles -unsettling -unsettlingly -unseven -unseverable -unseverableness -unsevere -unsevered -unseveredly -unseveredness -unseverely -unsevereness -unsew -unsewed -unsewered -unsewing -unsewn -unsews -unsex -unsexed -unsexes -unsexy -unsexing -unsexlike -unsexual -unsexually -unshabby -unshabbily -unshackle -unshackled -unshackles -unshackling -unshade -unshaded -unshady -unshadily -unshadiness -unshading -unshadow -unshadowable -unshadowed -unshafted -unshakable -unshakableness -unshakably -unshakeable -unshakeably -unshaked -unshaken -unshakenly -unshakenness -Un-shakespearean -unshaky -unshakiness -unshaking -unshakingness -unshale -unshaled -unshamable -unshamableness -unshamably -unshameable -unshameableness -unshameably -unshamed -unshamefaced -unshamefacedness -unshameful -unshamefully -unshamefulness -unshammed -unshanked -unshapable -unshape -unshapeable -unshaped -unshapedness -unshapely -unshapeliness -unshapen -unshapenly -unshapenness -unshaping -unsharable -unshareable -unshared -unsharedness -unsharing -unsharp -unsharped -unsharpen -unsharpened -unsharpening -unsharping -unsharply -unsharpness -unshatterable -unshattered -unshavable -unshave -unshaveable -unshaved -unshavedly -unshavedness -unshaven -unshavenly -unshavenness -unshawl -unsheaf -unsheared -unsheathe -unsheathed -unsheathes -unsheathing -unshed -unshedding -unsheer -unsheerness -unsheet -unsheeted -unsheeting -unshell -unshelled -unshelling -unshells -unshelterable -unsheltered -unsheltering -unshelve -unshelved -unshent -unshepherded -unshepherding -unsheriff -unshewed -unshy -unshieldable -unshielded -unshielding -unshift -unshiftable -unshifted -unshifty -unshiftiness -unshifting -unshifts -unshyly -unshimmering -unshimmeringly -unshined -unshyness -unshingled -unshiny -unshining -unship -unshiplike -unshipment -unshippable -unshipped -unshipping -unships -unshipshape -unshipwrecked -unshirked -unshirking -unshirred -unshirted -unshivered -unshivering -unshness -unshockability -unshockable -unshocked -unshocking -unshod -unshodden -unshoe -unshoed -unshoeing -unshook -unshop -unshore -unshored -unshorn -unshort -unshorten -unshortened -unshot -unshotted -unshoulder -unshout -unshouted -unshouting -unshoved -unshoveled -unshovelled -unshowable -unshowed -unshowered -unshowering -unshowy -unshowily -unshowiness -unshowmanlike -unshown -unshredded -unshrew -unshrewd -unshrewdly -unshrewdness -unshrewish -unshrill -unshrine -unshrined -unshrinement -unshrink -unshrinkability -unshrinkable -unshrinking -unshrinkingly -unshrinkingness -unshrived -unshriveled -unshrivelled -unshriven -unshroud -unshrouded -unshrubbed -unshrugging -unshrunk -unshrunken -unshuddering -unshuffle -unshuffled -unshunnable -unshunned -unshunning -unshunted -unshut -unshutter -unshuttered -Un-siberian -unsibilant -unsiccated -unsiccative -Un-sicilian -unsick -unsickened -unsicker -unsickered -unsickerly -unsickerness -unsickled -unsickly -unsided -unsidereal -unsiding -unsidling -unsiege -unsieged -unsieved -unsifted -unsighed-for -unsighing -unsight -unsightable -unsighted -unsightedly -unsighting -unsightless -unsightly -unsightlier -unsightliest -unsightliness -unsights -unsigmatic -unsignable -unsignaled -unsignalised -unsignalized -unsignalled -unsignatured -unsigned -unsigneted -unsignifiable -unsignificancy -unsignificant -unsignificantly -unsignificative -unsignified -unsignifying -unsilenceable -unsilenceably -unsilenced -unsilent -unsilentious -unsilently -unsilhouetted -unsilicated -unsilicified -unsyllabic -unsyllabicated -unsyllabified -unsyllabled -unsilly -unsyllogistic -unsyllogistical -unsyllogistically -unsilvered -unsymbolic -unsymbolical -unsymbolically -unsymbolicalness -unsymbolised -unsymbolized -unsimilar -unsimilarity -unsimilarly -unsimmered -unsimmering -unsymmetry -unsymmetric -unsymmetrical -unsymmetrically -unsymmetricalness -unsymmetrized -unsympathetic -unsympathetically -unsympatheticness -unsympathy -unsympathised -unsympathising -unsympathisingly -unsympathizability -unsympathizable -unsympathized -unsympathizing -unsympathizingly -unsimpering -unsymphonious -unsymphoniously -unsimple -unsimpleness -unsimply -unsimplicity -unsimplify -unsimplified -unsimplifying -unsymptomatic -unsymptomatical -unsymptomatically -unsimular -unsimulated -unsimulating -unsimulative -unsimultaneous -unsimultaneously -unsimultaneousness -unsin -unsincere -unsincerely -unsincereness -unsincerity -unsynchronised -unsynchronized -unsynchronous -unsynchronously -unsynchronousness -unsyncopated -unsyndicated -unsinew -unsinewed -unsinewy -unsinewing -unsinful -unsinfully -unsinfulness -unsing -unsingability -unsingable -unsingableness -unsinged -unsingle -unsingled -unsingleness -unsingular -unsingularly -unsingularness -unsinister -unsinisterly -unsinisterness -unsinkability -unsinkable -unsinking -unsinnable -unsinning -unsinningness -unsynonymous -unsynonymously -unsyntactic -unsyntactical -unsyntactically -unsynthesised -unsynthesized -unsynthetic -unsynthetically -unsyntheticness -unsinuate -unsinuated -unsinuately -unsinuous -unsinuously -unsinuousness -unsiphon -unsipped -unsyringed -unsystematic -unsystematical -unsystematically -unsystematicness -unsystematised -unsystematising -unsystematized -unsystematizedly -unsystematizing -unsystemizable -unsister -unsistered -unsisterly -unsisterliness -unsisting -unsitting -unsittingly -unsituated -unsizable -unsizableness -unsizeable -unsizeableness -unsized -unskaithd -unskaithed -unskeptical -unskeptically -unskepticalness -unsketchable -unsketched -unskewed -unskewered -unskilful -unskilfully -unskilfulness -unskill -unskilled -unskilledly -unskilledness -unskillful -unskillfully -unskillfulness -unskimmed -unskin -unskinned -unskirmished -unskirted -unslack -unslacked -unslackened -unslackening -unslacking -unslagged -unslayable -unslain -unslakable -unslakeable -unslaked -unslammed -unslandered -unslanderous -unslanderously -unslanderousness -unslanted -unslanting -unslapped -unslashed -unslate -unslated -unslating -unslatted -unslaughtered -unslave -Un-slavic -unsleaved -unsleek -unsleepably -unsleepy -unsleeping -unsleepingly -unsleeve -unsleeved -unslender -unslept -unsly -unsliced -unslicked -unsliding -unslighted -unslyly -unslim -unslimly -unslimmed -unslimness -unslyness -unsling -unslinging -unslings -unslinking -unslip -unslipped -unslippered -unslippery -unslipping -unslit -unslockened -unslogh -unsloped -unsloping -unslopped -unslot -unslothful -unslothfully -unslothfulness -unslotted -unslouched -unslouchy -unslouching -unsloughed -unsloughing -unslow -unslowed -unslowly -unslowness -unsluggish -unsluggishly -unsluggishness -unsluice -unsluiced -unslumbery -unslumbering -unslumberous -unslumbrous -unslumped -unslumping -unslung -unslurred -unsmacked -unsmart -unsmarting -unsmartly -unsmartness -unsmashed -unsmeared -unsmelled -unsmelling -unsmelted -unsmiled -unsmiling -unsmilingly -unsmilingness -unsmirched -unsmirking -unsmirkingly -unsmitten -unsmocked -unsmokable -unsmokeable -unsmoked -unsmoky -unsmokified -unsmokily -unsmokiness -unsmoking -unsmoldering -unsmooth -unsmoothed -unsmoothened -unsmoothly -unsmoothness -unsmote -unsmotherable -unsmothered -unsmothering -unsmouldering -unsmoulderingly -unsmudged -unsmug -unsmuggled -unsmugly -unsmugness -unsmutched -unsmutted -unsmutty -unsnaffled -unsnagged -unsnaggled -unsnaky -unsnap -unsnapped -unsnapping -unsnaps -unsnare -unsnared -unsnarl -unsnarled -unsnarling -unsnarls -unsnatch -unsnatched -unsneaky -unsneaking -unsneck -unsneering -unsneeringly -unsnib -unsnipped -unsnobbish -unsnobbishly -unsnobbishness -unsnoring -unsnouted -unsnow -unsnubbable -unsnubbed -unsnuffed -unsnug -unsnugly -unsnugness -unsoaked -unsoaped -unsoarable -unsoaring -unsober -unsobered -unsobering -unsoberly -unsoberness -unsobriety -unsociability -unsociable -unsociableness -unsociably -unsocial -unsocialised -unsocialising -unsocialism -unsocialistic -unsociality -unsocializable -unsocialized -unsocializing -unsocially -unsocialness -unsociological -unsociologically -unsocket -unsocketed -Un-socratic -unsodden -unsoft -unsoftened -unsoftening -unsoftly -unsoftness -unsoggy -unsoil -unsoiled -unsoiledness -unsoiling -unsolaced -unsolacing -unsolar -unsold -unsolder -unsoldered -unsoldering -unsolders -unsoldier -unsoldiered -unsoldiery -unsoldierly -unsoldierlike -unsole -unsoled -unsolemn -unsolemness -unsolemnified -unsolemnised -unsolemnize -unsolemnized -unsolemnly -unsolemnness -unsolicitated -unsolicited -unsolicitedly -unsolicitous -unsolicitously -unsolicitousness -unsolicitude -unsolid -unsolidarity -unsolidifiable -unsolidified -unsolidity -unsolidly -unsolidness -unsoling -unsolitary -unsolubility -unsoluble -unsolubleness -unsolubly -unsolvable -unsolvableness -unsolvably -unsolve -unsolved -unsomatic -unsomber -unsomberly -unsomberness -unsombre -unsombrely -unsombreness -unsome -unsomnolent -unsomnolently -unson -unsonable -unsonant -unsonantal -unsoncy -unsonlike -unsonneted -unsonorous -unsonorously -unsonorousness -unsonsy -unsonsie -unsoot -unsoothable -unsoothed -unsoothfast -unsoothing -unsoothingly -unsooty -unsophistic -unsophistical -unsophistically -unsophisticate -unsophisticated -unsophisticatedly -unsophisticatedness -unsophistication -unsophomoric -unsophomorical -unsophomorically -unsoporiferous -unsoporiferously -unsoporiferousness -unsoporific -unsordid -unsordidly -unsordidness -unsore -unsorely -unsoreness -unsorry -unsorriness -unsorrowed -unsorrowful -unsorrowing -unsort -unsortable -unsorted -unsorting -unsotted -unsought -unsoul -unsoulful -unsoulfully -unsoulfulness -unsoulish -unsound -unsoundable -unsoundableness -unsounded -unsounder -unsoundest -unsounding -unsoundly -unsoundness -unsoundnesses -unsour -unsoured -unsourly -unsourness -unsoused -Un-southern -unsovereign -unsowed -unsown -unspaced -unspacious -unspaciously -unspaciousness -unspaded -unspayed -unspan -unspangled -Un-spaniardized -Un-spanish -unspanked -unspanned -unspanning -unspar -unsparable -unspared -unsparing -unsparingly -unsparingness -unsparked -unsparkling -unsparred -unsparse -unsparsely -unsparseness -Un-spartan -unspasmed -unspasmodic -unspasmodical -unspasmodically -unspatial -unspatiality -unspatially -unspattered -unspawned -unspeak -unspeakability -unspeakable -unspeakableness -unspeakably -unspeaking -unspeaks -unspeared -unspecialised -unspecialising -unspecialized -unspecializing -unspecifiable -unspecific -unspecifically -unspecified -unspecifiedly -unspecifying -unspecious -unspeciously -unspeciousness -unspecked -unspeckled -unspectacled -unspectacular -unspectacularly -unspecterlike -unspectrelike -unspeculating -unspeculative -unspeculatively -unspeculatory -unsped -unspeed -unspeedful -unspeedy -unspeedily -unspeediness -unspeered -unspell -unspellable -unspelled -unspeller -unspelling -unspelt -unspendable -unspending -Un-spenserian -unspent -unspewed -unsphere -unsphered -unspheres -unspherical -unsphering -unspiable -unspiced -unspicy -unspicily -unspiciness -unspied -unspying -unspike -unspillable -unspilled -unspilt -unspin -unspinnable -unspinning -unspinsterlike -unspinsterlikeness -unspiral -unspiraled -unspiralled -unspirally -unspired -unspiring -unspirit -unspirited -unspiritedly -unspiriting -unspiritual -unspiritualised -unspiritualising -unspirituality -unspiritualize -unspiritualized -unspiritualizing -unspiritually -unspiritualness -unspirituous -unspissated -unspit -unspited -unspiteful -unspitefully -unspitted -unsplayed -unsplashed -unsplattered -unspleened -unspleenish -unspleenishly -unsplendid -unsplendidly -unsplendidness -unsplendorous -unsplendorously -unsplendourous -unsplendourously -unsplenetic -unsplenetically -unspliced -unsplinted -unsplintered -unsplit -unsplittable -unspoil -unspoilable -unspoilableness -unspoilably -unspoiled -unspoiledness -unspoilt -unspoke -unspoken -unspokenly -unsponged -unspongy -unsponsored -unspontaneous -unspontaneously -unspontaneousness -unspookish -unsported -unsportful -unsporting -unsportive -unsportively -unsportiveness -unsportsmanly -unsportsmanlike -unsportsmanlikeness -unsportsmanliness -unspot -unspotlighted -unspottable -unspotted -unspottedly -unspottedness -unspotten -unspoused -unspouselike -unspouted -unsprayable -unsprayed -unsprained -unspread -unspreadable -unspreading -unsprightly -unsprightliness -unspring -unspringing -unspringlike -unsprinkled -unsprinklered -unsprouted -unsproutful -unsprouting -unspruced -unsprung -unspun -unspurious -unspuriously -unspuriousness -unspurned -unspurred -unsputtering -unsquabbling -unsquandered -unsquarable -unsquare -unsquared -unsquashable -unsquashed -unsqueamish -unsqueamishly -unsqueamishness -unsqueezable -unsqueezed -unsquelched -unsquinting -unsquire -unsquired -unsquirelike -unsquirming -unsquirted -unstabbed -unstabilised -unstabilising -unstability -unstabilized -unstabilizing -unstable -unstabled -unstableness -unstabler -unstablest -unstably -unstablished -unstack -unstacked -unstacker -unstacking -unstacks -unstaffed -unstaged -unstaggered -unstaggering -unstagy -unstagily -unstaginess -unstagnant -unstagnantly -unstagnating -unstayable -unstaid -unstaidly -unstaidness -unstayed -unstayedness -unstaying -unstain -unstainable -unstainableness -unstained -unstainedly -unstainedness -unstaled -unstalemated -unstalked -unstalled -unstammering -unstammeringly -unstamped -unstampeded -unstanch -unstanchable -unstanched -unstandard -unstandardisable -unstandardised -unstandardizable -unstandardized -unstanding -unstanzaic -unstapled -unstar -unstarch -unstarched -unstarlike -unstarred -unstarted -unstarting -unstartled -unstartling -unstarved -unstatable -unstate -unstateable -unstated -unstately -unstates -unstatesmanlike -unstatic -unstatical -unstatically -unstating -unstation -unstationary -unstationed -unstatistic -unstatistical -unstatistically -unstatued -unstatuesque -unstatuesquely -unstatuesqueness -unstatutable -unstatutably -unstatutory -unstaunch -unstaunchable -unstaunched -unstavable -unstaveable -unstaved -unsteadfast -unsteadfastly -unsteadfastness -unsteady -unsteadied -unsteadier -unsteadies -unsteadiest -unsteadying -unsteadily -unsteadiness -unsteadinesses -unstealthy -unstealthily -unstealthiness -unsteamed -unsteaming -unsteck -unstecked -unsteek -unsteel -unsteeled -unsteeling -unsteels -unsteep -unsteeped -unsteepled -unsteered -unstemmable -unstemmed -unstentorian -unstentoriously -unstep -unstepped -unstepping -unsteps -unstercorated -unstereotyped -unsterile -unsterilized -unstern -unsternly -unsternness -unstethoscoped -unstewardlike -unstewed -unsty -unstick -unsticked -unsticky -unsticking -unstickingness -unsticks -unstiff -unstiffen -unstiffened -unstiffly -unstiffness -unstifled -unstifling -unstigmatic -unstigmatised -unstigmatized -unstyled -unstylish -unstylishly -unstylishness -unstylized -unstill -unstilled -unstillness -unstilted -unstimulable -unstimulated -unstimulating -unstimulatingly -unstimulative -unsting -unstinged -unstinging -unstingingly -unstinted -unstintedly -unstinting -unstintingly -unstippled -unstipulated -unstirrable -unstirred -unstirring -unstitch -unstitched -unstitching -unstock -unstocked -unstocking -unstockinged -unstoic -unstoical -unstoically -unstoicize -unstoked -unstoken -unstolen -unstonable -unstone -unstoneable -unstoned -unstony -unstonily -unstoniness -unstooped -unstooping -unstop -unstoppable -unstoppably -unstopped -unstopper -unstoppered -unstopping -unstopple -unstops -unstorable -unstore -unstored -unstoried -unstormable -unstormed -unstormy -unstormily -unstorminess -unstout -unstoutly -unstoutness -unstoved -unstow -unstowed -unstraddled -unstrafed -unstraight -unstraightened -unstraightforward -unstraightforwardness -unstraightness -unstraying -unstrain -unstrained -unstraitened -unstrand -unstranded -unstrange -unstrangely -unstrangeness -unstrangered -unstrangled -unstrangulable -unstrap -unstrapped -unstrapping -unstraps -unstrategic -unstrategical -unstrategically -unstratified -unstreaked -unstreamed -unstreaming -unstreamlined -unstreng -unstrength -unstrengthen -unstrengthened -unstrengthening -unstrenuous -unstrenuously -unstrenuousness -unstrepitous -unstress -unstressed -unstressedly -unstressedness -unstresses -unstretch -unstretchable -unstretched -unstrewed -unstrewn -unstriated -unstricken -unstrict -unstrictly -unstrictness -unstrictured -unstride -unstrident -unstridently -unstridulating -unstridulous -unstrike -unstriking -unstring -unstringed -unstringent -unstringently -unstringing -unstrings -unstrip -unstriped -unstripped -unstriving -unstroked -unstrong -unstruck -unstructural -unstructurally -unstructured -unstruggling -unstrung -unstubbed -unstubbled -unstubborn -unstubbornly -unstubbornness -unstuccoed -unstuck -unstudded -unstudied -unstudiedness -unstudious -unstudiously -unstudiousness -unstuff -unstuffed -unstuffy -unstuffily -unstuffiness -unstuffing -unstultified -unstultifying -unstumbling -unstung -unstunned -unstunted -unstupefied -unstupid -unstupidly -unstupidness -unsturdy -unsturdily -unsturdiness -unstuttered -unstuttering -unsubdivided -unsubduable -unsubduableness -unsubduably -unsubducted -unsubdued -unsubduedly -unsubduedness -unsubject -unsubjectable -unsubjected -unsubjectedness -unsubjection -unsubjective -unsubjectively -unsubjectlike -unsubjugate -unsubjugated -unsublimable -unsublimated -unsublimed -unsubmerged -unsubmergible -unsubmerging -unsubmersible -unsubmission -unsubmissive -unsubmissively -unsubmissiveness -unsubmitted -unsubmitting -unsubordinate -unsubordinated -unsubordinative -unsuborned -unsubpoenaed -unsubrogated -unsubscribed -unsubscribing -unsubscripted -unsubservient -unsubserviently -unsubsided -unsubsidiary -unsubsiding -unsubsidized -unsubstanced -unsubstantial -unsubstantiality -unsubstantialization -unsubstantialize -unsubstantially -unsubstantialness -unsubstantiatable -unsubstantiate -unsubstantiated -unsubstantiation -unsubstantive -unsubstituted -unsubstitutive -unsubtle -unsubtleness -unsubtlety -unsubtly -unsubtracted -unsubtractive -unsuburban -unsuburbed -unsubventioned -unsubventionized -unsubversive -unsubversively -unsubversiveness -unsubvertable -unsubverted -unsubvertive -unsucceedable -unsucceeded -unsucceeding -unsuccess -unsuccessful -unsuccessfully -unsuccessfulness -unsuccessive -unsuccessively -unsuccessiveness -unsuccinct -unsuccinctly -unsuccorable -unsuccored -unsucculent -unsucculently -unsuccumbing -unsucked -unsuckled -unsued -unsufferable -unsufferableness -unsufferably -unsuffered -unsuffering -unsufficed -unsufficience -unsufficiency -unsufficient -unsufficiently -unsufficing -unsufficingness -unsuffixed -unsufflated -unsuffocate -unsuffocated -unsuffocative -unsuffused -unsuffusive -unsugared -unsugary -unsuggested -unsuggestedness -unsuggestibility -unsuggestible -unsuggesting -unsuggestive -unsuggestively -unsuggestiveness -unsuicidal -unsuicidally -unsuit -unsuitability -unsuitable -unsuitableness -unsuitably -unsuited -unsuitedness -unsuiting -unsulfonated -unsulfureness -unsulfureous -unsulfureousness -unsulfurized -unsulky -unsulkily -unsulkiness -unsullen -unsullenly -unsulliable -unsullied -unsulliedly -unsulliedness -unsulphonated -unsulphureness -unsulphureous -unsulphureousness -unsulphurized -unsultry -unsummable -unsummarisable -unsummarised -unsummarizable -unsummarized -unsummed -unsummered -unsummerly -unsummerlike -unsummonable -unsummoned -unsumptuary -unsumptuous -unsumptuously -unsumptuousness -unsun -unsunburned -unsunburnt -Un-sundaylike -unsundered -unsung -unsunk -unsunken -unsunned -unsunny -unsuperable -unsuperannuated -unsupercilious -unsuperciliously -unsuperciliousness -unsuperficial -unsuperficially -unsuperfluous -unsuperfluously -unsuperfluousness -unsuperior -unsuperiorly -unsuperlative -unsuperlatively -unsuperlativeness -unsupernatural -unsupernaturalize -unsupernaturalized -unsupernaturally -unsupernaturalness -unsuperscribed -unsuperseded -unsuperseding -unsuperstitious -unsuperstitiously -unsuperstitiousness -unsupervised -unsupervisedly -unsupervisory -unsupine -unsupped -unsupplantable -unsupplanted -unsupple -unsuppled -unsupplemental -unsupplementary -unsupplemented -unsuppleness -unsupply -unsuppliable -unsuppliant -unsupplicated -unsupplicating -unsupplicatingly -unsupplied -unsupportable -unsupportableness -unsupportably -unsupported -unsupportedly -unsupportedness -unsupporting -unsupposable -unsupposed -unsuppositional -unsuppositive -unsuppressed -unsuppressible -unsuppressibly -unsuppression -unsuppressive -unsuppurated -unsuppurative -unsupreme -unsurcharge -unsurcharged -unsure -unsurely -unsureness -unsurety -unsurfaced -unsurfeited -unsurfeiting -unsurgical -unsurgically -unsurging -unsurly -unsurlily -unsurliness -unsurmised -unsurmising -unsurmountable -unsurmountableness -unsurmountably -unsurmounted -unsurnamed -unsurpassable -unsurpassableness -unsurpassably -unsurpassed -unsurpassedly -unsurpassedness -unsurplice -unsurpliced -unsurprise -unsurprised -unsurprisedness -unsurprising -unsurprisingly -unsurrealistic -unsurrealistically -unsurrendered -unsurrendering -unsurrounded -unsurveyable -unsurveyed -unsurvived -unsurviving -unsusceptibility -unsusceptible -unsusceptibleness -unsusceptibly -unsusceptive -unsuspect -unsuspectable -unsuspectably -unsuspected -unsuspectedly -unsuspectedness -unsuspectful -unsuspectfully -unsuspectfulness -unsuspectible -unsuspecting -unsuspectingly -unsuspectingness -unsuspective -unsuspended -unsuspendible -unsuspicion -unsuspicious -unsuspiciously -unsuspiciousness -unsustainability -unsustainable -unsustainably -unsustained -unsustaining -unsutured -unswabbed -unswaddle -unswaddled -unswaddling -unswaggering -unswaggeringly -unswayable -unswayableness -unswayed -unswayedness -unswaying -unswallowable -unswallowed -unswampy -unswanlike -unswapped -unswarming -unswathable -unswathe -unswatheable -unswathed -unswathes -unswathing -unswear -unswearing -unswears -unsweat -unsweated -unsweating -Un-swedish -unsweepable -unsweet -unsweeten -unsweetened -unsweetenedness -unsweetly -unsweetness -unswell -unswelled -unswelling -unsweltered -unsweltering -unswept -unswervable -unswerved -unswerving -unswervingly -unswervingness -unswilled -unswing -unswingled -Un-swiss -unswitched -unswivel -unswiveled -unswiveling -unswollen -unswooning -unswore -unsworn -unswung -unta -untabernacled -untabled -untabulable -untabulated -untaciturn -untaciturnity -untaciturnly -untack -untacked -untacking -untackle -untackled -untackling -untacks -untactful -untactfully -untactfulness -untactical -untactically -untactile -untactual -untactually -untagged -untailed -untailored -untailorly -untailorlike -untaint -untaintable -untainted -untaintedly -untaintedness -untainting -untakable -untakableness -untakeable -untakeableness -untaken -untaking -untalented -untalkative -untalkativeness -untalked -untalked-of -untalking -untall -untallied -untallowed -untaloned -untamable -untamableness -untamably -untame -untameable -untamed -untamedly -untamedness -untamely -untameness -untampered -untangental -untangentally -untangential -untangentially -untangibility -untangible -untangibleness -untangibly -untangle -untangled -untangles -untangling -untanned -untantalised -untantalising -untantalized -untantalizing -untap -untaped -untapered -untapering -untapestried -untappable -untapped -untappice -untar -untarnishable -untarnished -untarnishedness -untarnishing -untarred -untarried -untarrying -untartarized -untasked -untasseled -untasselled -untastable -untaste -untasteable -untasted -untasteful -untastefully -untastefulness -untasty -untastily -untasting -untattered -untattooed -untaught -untaughtness -untaunted -untaunting -untauntingly -untaut -untautly -untautness -untautological -untautologically -untawdry -untawed -untax -untaxable -untaxed -untaxied -untaxing -unteach -unteachability -unteachable -unteachableness -unteachably -unteacherlike -unteaches -unteaching -unteam -unteamed -unteaming -untearable -unteased -unteaseled -unteaselled -unteasled -untechnical -untechnicalize -untechnically -untedded -untedious -untediously -unteem -unteeming -unteethed -untelegraphed -untelevised -untelic -untell -untellable -untellably -untelling -untemper -untemperable -untemperamental -untemperamentally -untemperance -untemperate -untemperately -untemperateness -untempered -untempering -untempested -untempestuous -untempestuously -untempestuousness -untempled -untemporal -untemporally -untemporary -untemporizing -untemptability -untemptable -untemptably -untempted -untemptible -untemptibly -untempting -untemptingly -untemptingness -untenability -untenable -untenableness -untenably -untenacious -untenaciously -untenaciousness -untenacity -untenant -untenantable -untenantableness -untenanted -untended -untender -untendered -untenderized -untenderly -untenderness -untenebrous -untenible -untenibleness -untenibly -untense -untensely -untenseness -untensibility -untensible -untensibly -untensile -untensing -untent -untentacled -untentaculate -untented -untentered -untenty -untenuous -untenuously -untenuousness -untermed -Untermeyer -unterminable -unterminableness -unterminably -unterminated -unterminating -unterminational -unterminative -unterraced -unterred -unterrestrial -unterrible -unterribly -unterrifiable -unterrific -unterrifically -unterrified -unterrifying -unterrorized -unterse -Unterseeboot -untersely -unterseness -Unterwalden -untessellated -untestable -untestamental -untestamentary -untestate -untested -untestifying -untether -untethered -untethering -untethers -Un-teutonic -untewed -untextual -untextually -untextural -unthank -unthanked -unthankful -unthankfully -unthankfulness -unthanking -unthatch -unthatched -unthaw -unthawed -unthawing -untheatric -untheatrical -untheatrically -untheistic -untheistical -untheistically -unthematic -unthematically -unthende -untheologic -untheological -untheologically -untheologize -untheoretic -untheoretical -untheoretically -untheorizable -untherapeutic -untherapeutical -untherapeutically -Un-thespian -unthewed -unthick -unthicken -unthickened -unthickly -unthickness -unthievish -unthievishly -unthievishness -unthink -unthinkability -unthinkable -unthinkableness -unthinkables -unthinkably -unthinker -unthinking -unthinkingly -unthinkingness -unthinks -unthinned -unthinning -unthirsty -unthirsting -unthistle -untholeable -untholeably -unthorn -unthorny -unthorough -unthoroughly -unthoroughness -unthoughful -unthought -unthoughted -unthoughtedly -unthoughtful -unthoughtfully -unthoughtfulness -unthoughtlike -unthought-of -un-thought-of -unthought-on -unthought-out -unthrall -unthralled -unthrashed -unthread -unthreadable -unthreaded -unthreading -unthreads -unthreatened -unthreatening -unthreateningly -unthreshed -unthrid -unthridden -unthrift -unthrifty -unthriftier -unthriftiest -unthriftihood -unthriftily -unthriftiness -unthriftlike -unthrilled -unthrilling -unthrive -unthriven -unthriving -unthrivingly -unthrivingness -unthroaty -unthroatily -unthrob -unthrobbing -unthrone -unthroned -unthrones -unthronged -unthroning -unthrottled -unthrowable -unthrown -unthrushlike -unthrust -unthumbed -unthumped -unthundered -unthundering -unthwacked -unthwartable -unthwarted -unthwarting -untiaraed -unticketed -untickled -untidal -untidy -untidied -untidier -untidies -untidiest -untidying -untidily -untidiness -untie -untied -untieing -untiered -unties -untight -untighten -untightened -untightening -untightness -untiing -untying -until -untile -untiled -untill -untillable -untilled -untilling -untilt -untilted -untilting -untimbered -untime -untimed -untimedness -untimeless -untimely -untimelier -untimeliest -untimeliness -untimeous -untimeously -untimesome -untimid -untimidly -untimidness -untimorous -untimorously -untimorousness -untimous -untin -untinct -untinctured -untindered -untine -untinged -untinkered -untinned -untinseled -untinselled -untinted -untyped -untypical -untypically -untippable -untipped -untippled -untipsy -untipt -untirability -untirable -untyrannic -untyrannical -untyrannically -untyrannised -untyrannized -untyrantlike -untire -untired -untiredly -untiring -untiringly -untissued -untithability -untithable -untithed -untitillated -untitillating -untitled -untittering -untitular -untitularly -unto -untoadying -untoasted -untogaed -untoggle -untoggler -untoiled -untoileted -untoiling -untold -untolerable -untolerableness -untolerably -untolerated -untolerating -untolerative -untolled -untomb -untombed -untonality -untone -untoned -untongue -untongued -untongue-tied -untonsured -untooled -untooth -untoothed -untoothsome -untoothsomeness -untop -untopographical -untopographically -untoppable -untopped -untopping -untoppled -untormented -untormenting -untormentingly -untorn -untorpedoed -untorpid -untorpidly -untorporific -untorrid -untorridity -untorridly -untorridness -untortious -untortiously -untortuous -untortuously -untortuousness -untorture -untortured -untossed -untotaled -untotalled -untotted -untottering -untouch -untouchability -untouchable -untouchableness -untouchables -untouchable's -untouchably -untouched -untouchedness -untouching -untough -untoughly -untoughness -untoured -untouristed -untoward -untowardly -untowardliness -untowardness -untowered -untown -untownlike -untoxic -untoxically -untrace -untraceable -untraceableness -untraceably -untraced -untraceried -untracked -untractability -untractable -untractableness -untractably -untractarian -untracted -untractible -untractibleness -untradable -untradeable -untraded -untradesmanlike -untrading -untraditional -untraduced -untraffickable -untrafficked -untragic -untragical -untragically -untragicalness -untrailed -untrailerable -untrailered -untrailing -untrain -untrainable -untrained -untrainedly -untrainedness -untraitored -untraitorous -untraitorously -untraitorousness -untrammed -untrammeled -untrammeledness -untrammelled -untramped -untrampled -untrance -untranquil -untranquilize -untranquilized -untranquilizing -untranquilly -untranquillise -untranquillised -untranquillising -untranquillize -untranquillized -untranquilness -untransacted -untranscended -untranscendent -untranscendental -untranscendentally -untranscribable -untranscribed -untransferable -untransferred -untransferring -untransfigured -untransfixed -untransformable -untransformative -untransformed -untransforming -untransfused -untransfusible -untransgressed -untransient -untransiently -untransientness -untransitable -untransitional -untransitionally -untransitive -untransitively -untransitiveness -untransitory -untransitorily -untransitoriness -untranslatability -untranslatable -untranslatableness -untranslatably -untranslated -untransmigrated -untransmissible -untransmissive -untransmitted -untransmutability -untransmutable -untransmutableness -untransmutably -untransmuted -untransparent -untransparently -untransparentness -untranspassable -untranspired -untranspiring -untransplanted -untransportable -untransported -untransposed -untransubstantiated -untrappable -untrapped -untrashed -untraumatic -untravelable -untraveled -untraveling -untravellable -untravelled -untravelling -untraversable -untraversed -untravestied -untreacherous -untreacherously -untreacherousness -untread -untreadable -untreading -untreads -untreasonable -untreasurable -untreasure -untreasured -untreatable -untreatableness -untreatably -untreated -untreed -untrekked -untrellised -untrembling -untremblingly -untremendous -untremendously -untremendousness -untremolant -untremulant -untremulent -untremulous -untremulously -untremulousness -untrenched -untrend -untrendy -untrepanned -untrespassed -untrespassing -untress -untressed -untriable -untriableness -untriabness -untribal -untribally -untributary -untributarily -untriced -untrickable -untricked -untried -untrifling -untriflingly -untrig -untriggered -untrigonometric -untrigonometrical -untrigonometrically -untrying -untrill -untrim -untrimmable -untrimmed -untrimmedness -untrimming -untrims -untrinitarian -untripe -untrippable -untripped -untripping -untrist -untrite -untritely -untriteness -untriturated -untriumphable -untriumphant -untriumphantly -untriumphed -untrivial -untrivially -untrochaic -untrod -untrodden -untroddenness -untrolled -untrophied -untropic -untropical -untropically -untroth -untrotted -untroublable -untrouble -untroubled -untroubledly -untroubledness -untroublesome -untroublesomeness -untrounced -untrowable -untrowed -untruant -untruced -untruck -untruckled -untruckling -untrue -untrueness -untruer -untruest -untruism -untruly -untrumped -untrumpeted -untrumping -untrundled -untrunked -untruss -untrussed -untrusser -untrusses -untrussing -untrust -untrustable -untrustably -untrusted -untrustful -untrustfully -untrusty -untrustiness -untrusting -untrustness -untrustworthy -untrustworthily -untrustworthiness -untruth -untruther -untruthful -untruthfully -untruthfulness -untruths -unttrod -untubbed -untubercular -untuberculous -untuck -untucked -untuckered -untucking -untucks -Un-tudor -untufted -untugged -untumbled -untumefied -untumid -untumidity -untumidly -untumidness -untumultuous -untumultuously -untumultuousness -untunable -untunableness -untunably -untune -untuneable -untuneableness -untuneably -untuned -untuneful -untunefully -untunefulness -untunes -untuning -untunneled -untunnelled -untupped -unturbaned -unturbid -unturbidly -unturbulent -unturbulently -unturf -unturfed -unturgid -unturgidly -Un-turkish -unturn -unturnable -unturned -unturning -unturpentined -unturreted -Un-tuscan -untusked -untutelar -untutelary -untutored -untutoredly -untutoredness -untwilled -untwinable -untwind -untwine -untwineable -untwined -untwines -untwining -untwinkled -untwinkling -untwinned -untwirl -untwirled -untwirling -untwist -untwistable -untwisted -untwister -untwisting -untwists -untwitched -untwitching -untwitten -untz -unubiquitous -unubiquitously -unubiquitousness -unugly -unulcerated -unulcerative -unulcerous -unulcerously -unulcerousness -unultra -unum -unumpired -ununanimity -ununanimous -ununanimously -ununderstandability -ununderstandable -ununderstandably -ununderstanding -ununderstood -unundertaken -unundulatory -Unungun -ununifiable -ununified -ununiform -ununiformed -ununiformity -ununiformly -ununiformness -ununionized -ununique -ununiquely -ununiqueness -ununitable -ununitableness -ununitably -ununited -ununiting -ununiversity -ununiversitylike -unupbraided -unup-braided -unupbraiding -unupbraidingly -unupdated -unupholstered -unupright -unuprightly -unuprightness -unupset -unupsettable -unurban -unurbane -unurbanely -unurbanized -unured -unurged -unurgent -unurgently -unurging -unurn -unurned -unusability -unusable -unusableness -unusably -unusage -unuse -unuseable -unuseableness -unuseably -unused -unusedness -unuseful -unusefully -unusefulness -unushered -unusual -unusuality -unusually -unusualness -unusurious -unusuriously -unusuriousness -unusurped -unusurping -unutilitarian -unutilizable -unutilized -unutterability -unutterable -unutterableness -unutterably -unuttered -unuxorial -unuxorious -unuxoriously -unuxoriousness -unvacant -unvacantly -unvacated -unvaccinated -unvacillating -unvacuous -unvacuously -unvacuousness -unvagrant -unvagrantly -unvagrantness -unvague -unvaguely -unvagueness -unvailable -unvain -unvainly -unvainness -unvaleted -unvaletudinary -unvaliant -unvaliantly -unvaliantness -unvalid -unvalidated -unvalidating -unvalidity -unvalidly -unvalidness -unvalorous -unvalorously -unvalorousness -unvaluable -unvaluableness -unvaluably -unvalue -unvalued -unvamped -unvanishing -unvanquishable -unvanquished -unvanquishing -unvantaged -unvaporized -unvaporosity -unvaporous -unvaporously -unvaporousness -unvariable -unvariableness -unvariably -unvariant -unvariation -unvaried -unvariedly -unvariegated -unvarying -unvaryingly -unvaryingness -unvarnished -unvarnishedly -unvarnishedness -unvascular -unvascularly -unvasculous -unvassal -unvatted -unvaulted -unvaulting -unvaunted -unvaunting -unvauntingly -Un-vedic -unveering -unveeringly -unvehement -unvehemently -unveil -unveiled -unveiledly -unveiledness -unveiler -unveiling -unveilment -unveils -unveined -unvelvety -unvenal -unvendable -unvendableness -unvended -unvendible -unvendibleness -unveneered -unvenerability -unvenerable -unvenerableness -unvenerably -unvenerated -unvenerative -unvenereal -Un-venetian -unvenged -unvengeful -unveniable -unvenial -unveniality -unvenially -unvenialness -unvenom -unvenomed -unvenomous -unvenomously -unvenomousness -unventable -unvented -unventilated -unventured -unventuresome -unventurous -unventurously -unventurousness -unvenued -unveracious -unveraciously -unveraciousness -unveracity -unverbal -unverbalized -unverbally -unverbose -unverbosely -unverboseness -unverdant -unverdantly -unverdured -unverdurness -unverdurous -unverdurousness -Un-vergilian -unveridic -unveridical -unveridically -unverifiability -unverifiable -unverifiableness -unverifiably -unverificative -unverified -unverifiedness -unveritable -unveritableness -unveritably -unverity -unvermiculated -unverminous -unverminously -unverminousness -unvernicular -unversatile -unversatilely -unversatileness -unversatility -unversed -unversedly -unversedness -unversified -unvertebrate -unvertical -unvertically -unvertiginous -unvertiginously -unvertiginousness -unvesiculated -unvessel -unvesseled -unvest -unvested -unvetoed -unvexatious -unvexatiously -unvexatiousness -unvexed -unvext -unviable -unvibrant -unvibrantly -unvibrated -unvibrating -unvibrational -unvicar -unvicarious -unvicariously -unvicariousness -unvicious -unviciously -unviciousness -unvictimized -Un-victorian -unvictorious -unvictualed -unvictualled -Un-viennese -unviewable -unviewed -unvigilant -unvigilantly -unvigorous -unvigorously -unvigorousness -unvying -unvilified -unvillaged -unvillainous -unvillainously -unvincible -unvindicable -unvindicated -unvindictive -unvindictively -unvindictiveness -unvinous -unvintaged -unviolable -unviolableness -unviolably -unviolate -unviolated -unviolative -unviolenced -unviolent -unviolently -unviolined -Un-virgilian -unvirgin -unvirginal -Un-virginian -unvirginlike -unvirile -unvirility -unvirtue -unvirtuous -unvirtuously -unvirtuousness -unvirulent -unvirulently -unvisceral -unvisible -unvisibleness -unvisibly -unvision -unvisionary -unvisioned -unvisitable -unvisited -unvisiting -unvisor -unvisored -unvistaed -unvisual -unvisualised -unvisualized -unvisually -unvital -unvitalized -unvitalizing -unvitally -unvitalness -unvitiable -unvitiated -unvitiatedly -unvitiatedness -unvitiating -unvitreosity -unvitreous -unvitreously -unvitreousness -unvitrescent -unvitrescibility -unvitrescible -unvitrifiable -unvitrified -unvitriolized -unvituperated -unvituperative -unvituperatively -unvituperativeness -unvivacious -unvivaciously -unvivaciousness -unvivid -unvividly -unvividness -unvivified -unvizard -unvizarded -unvizored -unvocable -unvocal -unvocalised -unvocalized -unvociferous -unvociferously -unvociferousness -unvoyageable -unvoyaging -unvoice -unvoiced -unvoiceful -unvoices -unvoicing -unvoid -unvoidable -unvoided -unvoidness -unvolatile -unvolatilised -unvolatilize -unvolatilized -unvolcanic -unvolcanically -unvolitional -unvolitioned -unvolitive -Un-voltairian -unvoluble -unvolubleness -unvolubly -unvolumed -unvoluminous -unvoluminously -unvoluminousness -unvoluntary -unvoluntarily -unvoluntariness -unvolunteering -unvoluptuous -unvoluptuously -unvoluptuousness -unvomited -unvoracious -unvoraciously -unvoraciousness -unvote -unvoted -unvoting -unvouched -unvouchedly -unvouchedness -unvouchsafed -unvowed -unvoweled -unvowelled -unvulcanised -unvulcanized -unvulgar -unvulgarise -unvulgarised -unvulgarising -unvulgarize -unvulgarized -unvulgarizing -unvulgarly -unvulgarness -unvulnerable -unvulturine -unvulturous -unwadable -unwadded -unwaddling -unwadeable -unwaded -unwading -unwafted -unwaged -unwagered -unwaggable -unwaggably -unwagged -Un-wagnerian -unwayed -unwailed -unwailing -unwainscoted -unwainscotted -unwaited -unwaiting -unwaivable -unwaived -unwayward -unwaked -unwakeful -unwakefully -unwakefulness -unwakened -unwakening -unwaking -unwalkable -unwalked -unwalking -unwall -unwalled -unwallet -unwallowed -unwan -unwandered -unwandering -unwanderingly -unwaned -unwaning -unwanted -unwanton -unwarbled -unwarded -unware -unwarely -unwareness -unwares -unwary -unwarier -unwariest -unwarily -unwariness -unwarlike -unwarlikeness -unwarm -unwarmable -unwarmed -unwarming -unwarn -unwarned -unwarnedly -unwarnedness -unwarning -unwarnished -unwarp -unwarpable -unwarped -unwarping -unwarrayed -unwarranness -unwarrant -unwarrantability -unwarrantable -unwarrantableness -unwarrantably -unwarrantabness -unwarranted -unwarrantedly -unwarrantedness -unwarred -unwarren -unwas -unwashable -unwashed -unwashedness -unwasheds -unwashen -Un-washingtonian -unwassailing -unwastable -unwasted -unwasteful -unwastefully -unwastefulness -unwasting -unwastingly -unwatchable -unwatched -unwatchful -unwatchfully -unwatchfulness -unwatching -unwater -unwatered -unwatery -unwaterlike -unwatermarked -unwattled -unwaved -unwaverable -unwavered -unwavering -unwaveringly -unwaving -unwax -unwaxed -unweaken -unweakened -unweakening -unweal -unwealsomeness -unwealthy -unweaned -unweapon -unweaponed -unwearable -unwearably -unweary -unweariability -unweariable -unweariableness -unweariably -unwearied -unweariedly -unweariedness -unwearying -unwearyingly -unwearily -unweariness -unwearing -unwearisome -unwearisomeness -unweathered -unweatherly -unweatherwise -unweave -unweaves -unweaving -unweb -unwebbed -unwebbing -unwed -unwedded -unweddedly -unweddedness -unwedge -unwedgeable -unwedged -unwedging -unweeded -unweel -unweelness -unweened -unweeping -unweeting -unweetingly -unweft -unweighability -unweighable -unweighableness -unweighed -unweighing -unweight -unweighted -unweighty -unweighting -unweights -unwelcome -unwelcomed -unwelcomely -unwelcomeness -unwelcoming -unweld -unweldable -unwelde -unwelded -unwell -unwell-intentioned -unwellness -Un-welsh -unwelted -unwelth -unwemmed -unwept -unwestern -unwesternized -unwet -unwettable -unwetted -unwheedled -unwheel -unwheeled -unwhelmed -unwhelped -unwhetted -unwhig -unwhiglike -unwhimpering -unwhimperingly -unwhimsical -unwhimsically -unwhimsicalness -unwhining -unwhiningly -unwhip -unwhipped -unwhipt -unwhirled -unwhisked -unwhiskered -unwhisperable -unwhispered -unwhispering -unwhistled -unwhite -unwhited -unwhitened -unwhitewashed -unwhole -unwholesome -unwholesomely -unwholesomeness -unwicked -unwickedly -unwickedness -unwidened -unwidowed -unwield -unwieldable -unwieldy -unwieldier -unwieldiest -unwieldily -unwieldiness -unwieldly -unwieldsome -unwifed -unwifely -unwifelike -unwig -unwigged -unwigging -unwild -unwildly -unwildness -unwilful -unwilfully -unwilfulness -unwily -unwilier -unwilily -unwiliness -unwill -unwillable -unwille -unwilled -unwilledness -unwillful -unwillfully -unwillfulness -unwilling -unwillingly -unwillingness -unwillingnesses -unwilted -unwilting -unwimple -unwincing -unwincingly -unwind -unwindable -unwinded -unwinder -unwinders -unwindy -unwinding -unwindingly -unwindowed -unwinds -unwingable -unwinged -unwink -unwinking -unwinkingly -unwinly -unwinnable -unwinning -unwinnowed -unwinsome -unwinter -unwintry -unwiped -unwirable -unwire -unwired -unwisdom -unwisdoms -unwise -unwisely -unwiseness -unwiser -unwisest -unwish -unwished -unwished-for -unwishes -unwishful -unwishfully -unwishfulness -unwishing -unwist -unwistful -unwistfully -unwistfulness -unwit -unwitch -unwitched -unwithdrawable -unwithdrawing -unwithdrawn -unwitherable -unwithered -unwithering -unwithheld -unwithholden -unwithholding -unwithstanding -unwithstood -unwitless -unwitnessed -unwits -unwitted -unwitty -unwittily -unwitting -unwittingly -unwittingness -unwive -unwived -unwoeful -unwoefully -unwoefulness -unwoful -unwoman -unwomanish -unwomanize -unwomanized -unwomanly -unwomanlike -unwomanliness -unwomb -unwon -unwonder -unwonderful -unwonderfully -unwondering -unwont -unwonted -unwontedly -unwontedness -unwooded -unwooed -unwoof -unwooly -unwordable -unwordably -unworded -unwordy -unwordily -Un-wordsworthian -unwork -unworkability -unworkable -unworkableness -unworkably -unworked -unworkedness -unworker -unworking -unworkmanly -unworkmanlike -unworld -unworldly -unworldliness -unworm-eaten -unwormed -unwormy -unworminess -unworn -unworried -unworriedly -unworriedness -unworship -unworshiped -unworshipful -unworshiping -unworshipped -unworshipping -unworth -unworthy -unworthier -unworthies -unworthiest -unworthily -unworthiness -unworthinesses -unwotting -unwound -unwoundable -unwoundableness -unwounded -unwove -unwoven -unwrangling -unwrap -unwrapped -unwrapper -unwrappered -unwrapping -unwraps -unwrathful -unwrathfully -unwrathfulness -unwreaked -unwreaken -unwreathe -unwreathed -unwreathing -unwrecked -unwrench -unwrenched -unwrest -unwrested -unwrestedly -unwresting -unwrestled -unwretched -unwry -unwriggled -unwrinkle -unwrinkleable -unwrinkled -unwrinkles -unwrinkling -unwrit -unwritable -unwrite -unwriteable -unwriting -unwritten -unwroken -unwronged -unwrongful -unwrongfully -unwrongfulness -unwrote -unwrought -unwrung -unwwove -unwwoven -unze -unzealous -unzealously -unzealousness -unzen -unzephyrlike -unzip -unzipped -unzipping -unzips -unzone -unzoned -unzoning -uous -UP -up- -up-a-daisy -upaya -upaisle -upaithric -Upali -upalley -upalong -upanaya -upanayana -up-anchor -up-and -up-and-coming -up-and-comingness -up-and-doing -up-and-down -up-and-downy -up-and-downish -up-and-downishness -up-and-downness -up-and-over -up-and-under -up-and-up -Upanishad -upanishadic -upapurana -uparch -uparching -uparise -uparm -uparna -upas -upases -upattic -upavenue -upbay -upband -upbank -upbar -upbbore -upbborne -upbear -upbearer -upbearers -upbearing -upbears -upbeat -upbeats -upbelch -upbelt -upbend -upby -upbid -upbye -upbind -upbinding -upbinds -upblacken -upblast -upblaze -upblow -upboil -upboiled -upboiling -upboils -upbolster -upbolt -upboost -upbore -upborne -upbotch -upboulevard -upbound -upbow -up-bow -upbows -upbrace -upbray -upbraid -upbraided -upbraider -upbraiders -upbraiding -upbraidingly -upbraids -upbrast -upbreak -upbreathe -upbred -upbreed -upbreeze -upbrighten -upbrim -upbring -upbringing -upbringings -upbristle -upbroken -upbrook -upbrought -upbrow -upbubble -upbuy -upbuild -upbuilder -upbuilding -upbuilds -upbuilt -upbulging -upbuoy -upbuoyance -upbuoying -upburn -upburst -UPC -upcall -upcanal -upcanyon -upcard -upcarry -upcast -upcasted -upcasting -upcasts -upcatch -upcaught -upchamber -upchannel -upchariot -upchaunce -upcheer -upchimney -upchoke -upchuck -up-chuck -upchucked -upchucking -upchucks -upcity -upclimb -upclimbed -upclimber -upclimbing -upclimbs -upclose -upcloser -upcoast -upcock -upcoil -upcoiled -upcoiling -upcoils -upcolumn -upcome -upcoming -upconjure -upcountry -Up-country -upcourse -upcover -upcrane -upcrawl -upcreek -upcreep -upcry -upcrop -upcropping -upcrowd -upcurl -upcurled -upcurling -upcurls -upcurrent -upcurve -upcurved -upcurves -upcurving -upcushion -upcut -upcutting -updart -updarted -updarting -updarts -updatable -update -updated -updater -updaters -updates -updating -updeck -updelve -Updike -updive -updived -updives -updiving -updo -updome -updos -updove -updraft -updrafts -updrag -updraught -updraw -updress -updry -updried -updries -updrying -updrink -UPDS -upeat -upeygan -upend -up-end -upended -upending -upends -uperize -upfeed -upfield -upfill -upfingered -upflame -upflare -upflash -upflee -upfly -upflicker -upfling -upflinging -upflings -upfloat -upflood -upflow -upflowed -upflower -upflowing -upflows -upflung -upfold -upfolded -upfolding -upfolds -upfollow -upframe -upfront -upfurl -upgale -upgang -upgape -upgather -upgathered -upgathering -upgathers -upgaze -upgazed -upgazes -upgazing -upget -upgird -upgirded -upgirding -upgirds -upgirt -upgive -upglean -upglide -upgo -upgoing -upgorge -upgrade -up-grade -upgraded -upgrader -upgrades -upgrading -upgrave -upgrew -upgrow -upgrowing -upgrown -upgrows -upgrowth -upgrowths -upgully -upgush -uphale -Upham -uphand -uphang -upharbor -upharrow -upharsin -uphasp -upheal -upheap -upheaped -upheaping -upheaps -uphearted -upheaval -upheavalist -upheavals -upheave -upheaved -upheaven -upheaver -upheavers -upheaves -upheaving -upheld -uphelya -uphelm -Uphemia -upher -uphhove -uphill -uphills -uphillward -uphoard -uphoarded -uphoarding -uphoards -uphoist -uphold -upholden -upholder -upholders -upholding -upholds -upholster -upholstered -upholsterer -upholsterers -upholsteress -upholstery -upholsterydom -upholsteries -upholstering -upholsterous -upholsters -upholstress -uphove -uphroe -uphroes -uphung -uphurl -UPI -upyard -Upington -upyoke -Upis -upisland -upjerk -upjet -upkeep -upkeeps -upkindle -upknell -upknit -upla -upladder -uplay -uplaid -uplake -Upland -uplander -uplanders -uplandish -uplands -uplane -uplead -uplean -upleap -upleaped -upleaping -upleaps -upleapt -upleg -uplick -uplift -upliftable -uplifted -upliftedly -upliftedness -uplifter -uplifters -uplifting -upliftingly -upliftingness -upliftitis -upliftment -uplifts -uplight -uplighted -uplighting -uplights -uplying -uplimb -uplimber -upline -uplink -uplinked -uplinking -uplinks -uplit -upload -uploadable -uploaded -uploading -uploads -uplock -uplong -uplook -uplooker -uploom -uploop -upmaking -upmanship -upmarket -up-market -upmast -upmix -upmost -upmount -upmountain -upmove -upness -upo -Upolu -upon -up-over -up-page -uppard -up-patient -uppbad -upped -uppent -upper -uppercase -upper-case -upper-cased -upper-casing -upperch -upper-circle -upper-class -upperclassman -upperclassmen -Upperco -upper-cruster -uppercut -uppercuts -uppercutted -uppercutting -upperer -upperest -upper-form -upper-grade -upperhandism -uppermore -uppermost -upperpart -uppers -upper-school -upperstocks -uppertendom -Upperville -upperworks -uppile -uppiled -uppiles -uppiling -upping -uppings -uppish -uppishly -uppishness -uppity -uppityness -upplough -upplow -uppluck -uppoint -uppoise -uppop -uppour -uppowoc -upprick -upprop -uppropped -uppropping -upprops -Uppsala -uppuff -uppull -uppush -up-put -up-putting -upquiver -upraisal -upraise -upraised -upraiser -upraisers -upraises -upraising -upraught -upreach -upreached -upreaches -upreaching -uprear -upreared -uprearing -uprears -uprein -uprend -uprender -uprest -uprestore -uprid -upridge -upright -uprighted -uprighteous -uprighteously -uprighteousness -upright-growing -upright-grown -upright-hearted -upright-heartedness -uprighting -uprightish -uprightly -uprightman -upright-minded -uprightness -uprightnesses -uprights -upright-standing -upright-walking -uprip -uprisal -uprise -uprisement -uprisen -upriser -uprisers -uprises -uprising -uprisings -uprising's -uprist -uprive -upriver -uprivers -uproad -uproar -uproarer -uproariness -uproarious -uproariously -uproariousness -uproars -uproom -uproot -uprootal -uprootals -uprooted -uprootedness -uprooter -uprooters -uprooting -uproots -uprose -uprouse -uproused -uprouses -uprousing -uproute -uprun -uprush -uprushed -uprushes -uprushing -UPS -upsadaisy -upsaddle -Upsala -upscale -upscrew -upscuddle -upseal -upsedoun -up-see-daisy -upseek -upsey -upseize -upsend -upsending -upsends -upsent -upset -upsetment -upsets -upsettable -upsettal -upsetted -upsetter -upsetters -upsetting -upsettingly -upshaft -Upshaw -upshear -upsheath -upshift -upshifted -upshifting -upshifts -upshoot -upshooting -upshoots -upshore -upshot -upshots -upshot's -upshoulder -upshove -upshut -upsy -upsidaisy -upsy-daisy -upside -upsidedown -upside-down -upside-downism -upside-downness -upside-downwards -upsides -upsy-freesy -upsighted -upsiloid -upsilon -upsilonism -upsilons -upsit -upsitten -upsitting -upsy-turvy -up-sky -upskip -upslant -upslip -upslope -upsloping -upsmite -upsnatch -upsoak -upsoar -upsoared -upsoaring -upsoars -upsolve -Upson -upspeak -upspear -upspeed -upspew -upspin -upspire -upsplash -upspout -upsprang -upspread -upspring -upspringing -upsprings -upsprinkle -upsprout -upsprung -upspurt -upsring -upstaff -upstage -upstaged -upstages -upstaging -upstay -upstair -upstairs -upstamp -upstand -upstander -upstanding -upstandingly -upstandingness -upstands -upstare -upstared -upstares -upstaring -upstart -upstarted -upstarting -upstartism -upstartle -upstartness -upstarts -upstate -Up-state -upstater -Up-stater -upstaters -upstates -upstaunch -upsteal -upsteam -upstem -upstep -upstepped -upstepping -upsteps -upstick -upstir -upstirred -upstirring -upstirs -upstood -upstraight -upstream -up-stream -upstreamward -upstreet -upstretch -upstretched -upstrike -upstrive -upstroke -up-stroke -upstrokes -upstruggle -upsuck -upsun -upsup -upsurge -upsurged -upsurgence -upsurges -upsurging -upsway -upswallow -upswarm -upsweep -upsweeping -upsweeps -upswell -upswelled -upswelling -upswells -upswept -upswing -upswinging -upswings -upswollen -upswung -uptable -uptake -uptaker -uptakes -uptear -uptearing -uptears -uptemper -uptend -upthrew -upthrow -upthrowing -upthrown -upthrows -upthrust -upthrusted -upthrusting -upthrusts -upthunder -uptick -upticks -uptide -uptie -uptight -uptightness -uptill -uptilt -uptilted -uptilting -uptilts -uptime -uptimes -up-to-date -up-to-dately -up-to-dateness -up-to-datish -up-to-datishness -Upton -uptore -uptorn -uptoss -uptossed -uptosses -uptossing -up-to-the-minute -uptower -uptown -uptowner -uptowners -uptowns -uptrace -uptrack -uptrail -uptrain -uptree -uptrend -up-trending -uptrends -uptrill -uptrunk -uptruss -upttore -upttorn -uptube -uptuck -upturn -upturned -upturning -upturns -uptwined -uptwist -UPU -Upupa -Upupidae -upupoid -upvalley -upvomit -UPWA -upwaft -upwafted -upwafting -upwafts -upway -upways -upwall -upward -upward-borne -upward-bound -upward-gazing -upwardly -upward-looking -upwardness -upward-pointed -upward-rushing -upwards -upward-shooting -upward-stirring -upward-striving -upward-turning -upwarp -upwax -upwell -upwelled -upwelling -upwells -upwent -upwheel -upwhelm -upwhir -upwhirl -upwind -up-wind -upwinds -upwith -upwork -upwound -upwrap -upwreathe -upwrench -upwring -upwrought -UR -ur- -ura -urachal -urachovesical -urachus -uracil -uracils -uraei -uraemia -uraemias -uraemic -uraeus -uraeuses -Uragoga -Ural -Ural-altaian -Ural-Altaic -urali -Uralian -Uralic -uraline -uralite -uralite-gabbro -uralites -uralitic -uralitization -uralitize -uralitized -uralitizing -uralium -uralo- -Uralo-altaian -Uralo-altaic -Uralo-caspian -Uralo-finnic -uramido -uramil -uramilic -uramino -Uran -uran- -Urana -uranalyses -uranalysis -uranate -Urania -Uranian -uranias -uranic -Uranicentric -uranide -uranides -uranidin -uranidine -Uranie -uraniferous -uraniid -Uraniidae -uranyl -uranylic -uranyls -uranin -uranine -uraninite -uranion -uraniscochasma -uraniscoplasty -uraniscoraphy -uraniscorrhaphy -uraniscus -uranism -uranisms -uranist -uranite -uranites -uranitic -uranium -uraniums -urano- -uranocircite -uranographer -uranography -uranographic -uranographical -uranographist -uranolatry -uranolite -uranology -uranological -uranologies -uranologist -uranometry -uranometria -uranometrical -uranometrist -uranophane -uranophobia -uranophotography -uranoplasty -uranoplastic -uranoplegia -uranorrhaphy -uranorrhaphia -uranoschisis -uranoschism -uranoscope -uranoscopy -uranoscopia -uranoscopic -Uranoscopidae -Uranoscopus -uranoso- -uranospathite -uranosphaerite -uranospinite -uranostaphyloplasty -uranostaphylorrhaphy -uranotantalite -uranothallite -uranothorite -uranotil -uranous -Uranus -urao -urare -urares -urari -uraris -Urartaean -Urartian -Urartic -urase -urases -Urata -urataemia -urate -uratemia -urates -uratic -uratoma -uratosis -uraturia -Uravan -urazin -urazine -urazole -urb -Urba -urbacity -Urbai -Urbain -urbainite -Urban -Urbana -urbane -urbanely -urbaneness -urbaner -urbanest -Urbani -urbanisation -urbanise -urbanised -urbanises -urbanising -urbanism -urbanisms -Urbanist -urbanistic -urbanistically -urbanists -urbanite -urbanites -urbanity -urbanities -urbanization -urbanize -urbanized -urbanizes -urbanizing -Urbanna -Urbannai -Urbannal -Urbano -urbanolatry -urbanology -urbanologist -urbanologists -Urbanus -urbarial -Urbas -urbia -urbian -urbias -urbic -Urbicolae -urbicolous -urbiculture -urbify -urbification -urbinate -urbs -URC -urceiform -urceolar -urceolate -urceole -urceoli -Urceolina -urceolus -urceus -urchin -urchiness -urchinly -urchinlike -urchins -urchin's -Urd -Urdar -urde -urdee -urdy -urds -Urdu -Urdummheit -Urdur -ure -urea -urea-formaldehyde -ureal -ureameter -ureametry -ureas -urease -ureases -urechitin -urechitoxin -uredema -uredia -uredial -uredidia -uredidinia -Uredinales -uredine -Uredineae -uredineal -uredineous -uredines -uredinia -uredinial -Urediniopsis -urediniospore -urediniosporic -uredinium -uredinoid -uredinology -uredinologist -uredinous -urediospore -uredium -Uredo -uredo-fruit -uredos -uredosorus -uredospore -uredosporic -uredosporiferous -uredosporous -uredostage -Urey -ureic -ureid -ureide -ureides -ureido -ureylene -uremia -uremias -uremic -Urena -urent -ureo- -ureometer -ureometry -ureosecretory -ureotelic -ureotelism -ure-ox -UREP -uresis -uret -uretal -ureter -ureteral -ureteralgia -uretercystoscope -ureterectasia -ureterectasis -ureterectomy -ureterectomies -ureteric -ureteritis -uretero- -ureterocele -ureterocervical -ureterocystanastomosis -ureterocystoscope -ureterocystostomy -ureterocolostomy -ureterodialysis -ureteroenteric -ureteroenterostomy -ureterogenital -ureterogram -ureterograph -ureterography -ureterointestinal -ureterolysis -ureterolith -ureterolithiasis -ureterolithic -ureterolithotomy -ureterolithotomies -ureteronephrectomy -ureterophlegma -ureteropyelitis -ureteropyelogram -ureteropyelography -ureteropyelonephritis -ureteropyelostomy -ureteropyosis -ureteroplasty -ureteroproctostomy -ureteroradiography -ureterorectostomy -ureterorrhagia -ureterorrhaphy -ureterosalpingostomy -ureterosigmoidostomy -ureterostegnosis -ureterostenoma -ureterostenosis -ureterostoma -ureterostomy -ureterostomies -ureterotomy -uretero-ureterostomy -ureterouteral -uretero-uterine -ureterovaginal -ureterovesical -ureters -urethan -urethane -urethanes -urethans -urethylan -urethylane -urethr- -urethra -urethrae -urethragraph -urethral -urethralgia -urethrameter -urethras -urethrascope -urethratome -urethratresia -urethrectomy -urethrectomies -urethremphraxis -urethreurynter -urethrism -urethritic -urethritis -urethro- -urethroblennorrhea -urethrobulbar -urethrocele -urethrocystitis -urethrogenital -urethrogram -urethrograph -urethrometer -urethropenile -urethroperineal -urethrophyma -urethroplasty -urethroplastic -urethroprostatic -urethrorectal -urethrorrhagia -urethrorrhaphy -urethrorrhea -urethrorrhoea -urethroscope -urethroscopy -urethroscopic -urethroscopical -urethrosexual -urethrospasm -urethrostaxis -urethrostenosis -urethrostomy -urethrotome -urethrotomy -urethrotomic -urethrovaginal -urethrovesical -uretic -urf -Urfa -urfirnis -Urga -urge -urged -urgeful -Urgel -urgence -urgency -urgencies -urgent -urgently -urgentness -urger -urgers -urges -urgy -Urginea -urging -urgingly -urgings -Urgonian -urheen -Uri -Ury -uria -Uriah -Urial -urials -Urian -Urias -uric -uric-acid -uricacidemia -uricaciduria -uricaemia -uricaemic -uricemia -uricemic -Urich -uricolysis -uricolytic -uriconian -uricosuric -uricotelic -uricotelism -uridine -uridines -uridrosis -Uriel -Urien -urient -Uriia -Uriiah -Uriisa -urim -urin- -Urina -urinaemia -urinaemic -urinal -urinalyses -urinalysis -urinalist -urinals -urinant -urinary -urinaries -urinarium -urinate -urinated -urinates -urinating -urination -urinations -urinative -urinator -urine -urinemia -urinemias -urinemic -urines -uriniferous -uriniparous -urino- -urinocryoscopy -urinogenital -urinogenitary -urinogenous -urinology -urinologist -urinomancy -urinometer -urinometry -urinometric -urinoscopy -urinoscopic -urinoscopies -urinoscopist -urinose -urinosexual -urinous -urinousness -Urion -Uris -Urissa -Urita -urite -urlar -urled -urling -urluch -urman -Urmia -Urmston -urn -urna -urnae -urnal -Ur-Nammu -urn-buried -urn-cornered -urn-enclosing -urnfield -urnflower -urnful -urnfuls -urning -urningism -urnism -urnlike -urnmaker -urns -urn's -urn-shaped -urn-topped -Uro -uro- -uroacidimeter -uroazotometer -urobenzoic -urobilin -urobilinemia -urobilinogen -urobilinogenuria -urobilinuria -urocanic -urocele -Urocerata -urocerid -Uroceridae -urochloralic -urochord -Urochorda -urochordal -urochordate -urochords -urochrome -urochromogen -urochs -urocyanogen -Urocyon -urocyst -urocystic -Urocystis -urocystitis -Urocoptidae -Urocoptis -urodaeum -Urodela -urodelan -urodele -urodeles -urodelous -urodialysis -urodynia -uroedema -uroerythrin -urofuscohematin -urogaster -urogastric -urogenic -urogenital -urogenitary -urogenous -uroglaucin -Uroglena -urogomphi -urogomphus -urogram -urography -urogravimeter -urohaematin -urohematin -urohyal -urokinase -urol -urolagnia -urolagnias -uroleucic -uroleucinic -urolith -urolithiasis -urolithic -urolithology -uroliths -urolytic -urology -urologic -urological -urologies -urologist -urologists -urolutein -uromancy -uromantia -uromantist -Uromastix -uromelanin -uromelus -uromere -uromeric -urometer -Uromyces -Uromycladium -uronephrosis -uronic -uronology -uroo -uroodal -uropatagium -Uropeltidae -urophaein -urophanic -urophanous -urophein -urophi -Urophlyctis -urophobia -urophthisis -Uropygi -uropygia -uropygial -uropygium -uropyloric -uroplania -uropod -uropodal -uropodous -uropods -uropoetic -uropoiesis -uropoietic -uroporphyrin -uropsile -Uropsilus -uroptysis -urorosein -urorrhagia -urorrhea -urorubin -urosaccharometry -urosacral -uroschesis -uroscopy -uroscopic -uroscopies -uroscopist -urosepsis -uroseptic -urosis -urosomatic -urosome -urosomite -urosomitic -urostea -urostealith -urostegal -urostege -urostegite -urosteon -urosternite -urosthene -urosthenic -urostylar -urostyle -urostyles -urotoxy -urotoxia -urotoxic -urotoxicity -urotoxies -urotoxin -urous -uroxanate -uroxanic -uroxanthin -uroxin -urpriser -Urquhart -urradhus -urrhodin -urrhodinic -urs -Ursa -ursae -Ursal -Ursala -Ursas -Ursel -Ursi -ursicidal -ursicide -Ursid -Ursidae -ursiform -ursigram -Ursina -ursine -ursoid -Ursola -ursolic -Urson -ursone -Ursprache -ursuk -Ursula -Ursulette -Ursulina -Ursuline -Ursus -Urta-juz -Urtext -urtexts -Urtica -Urticaceae -urticaceous -urtical -Urticales -urticant -urticants -urticaria -urticarial -urticarious -Urticastrum -urticate -urticated -urticates -urticating -urtication -urticose -urtite -Uru -Uru. -Uruapan -urubu -urucu -urucum -urucu-rana -urucuri -urucury -Uruguay -Uruguayan -Uruguaiana -uruguayans -uruisg -Uruk -Urukuena -Urumchi -Urumtsi -urunday -Urundi -urus -uruses -urushi -urushic -urushiye -urushinic -urushiol -urushiols -urutu -urva -US -u's -USA -USAAF -usability -usable -usableness -usably -USAC -USAF -USAFA -usage -usager -usages -USAN -usance -usances -Usanis -usant -USAR -usara -usaron -usation -usaunce -usaunces -USB -Usbeg -Usbegs -Usbek -Usbeks -USC -USC&GS -USCA -USCG -USD -USDA -USE -useability -useable -useably -USECC -used -usedly -usedness -usednt -used-up -usee -useful -usefully -usefullish -usefulness -usehold -useless -uselessly -uselessness -uselessnesses -use-money -usenet -usent -user -users -user's -USES -USFL -USG -USGA -USGS -ush -USHA -ushabti -ushabtis -ushabtiu -Ushak -Ushant -U-shaped -Ushas -Usheen -Usher -usherance -usherdom -ushered -usherer -usheress -usherette -usherettes -Usherian -usher-in -ushering -usherism -usherless -ushers -ushership -USHGA -Ushijima -USIA -usine -using -using-ground -usings -Usipetes -USIS -USITA -usitate -usitative -Usk -Uskara -Uskdar -Uskok -Uskub -Uskudar -USL -USLTA -USM -USMA -USMC -USMP -USN -USNA -Usnach -USNAS -Usnea -Usneaceae -usneaceous -usneas -usneoid -usnic -usnin -usninic -USO -USOC -USP -Uspanteca -uspeaking -USPHS -USPO -uspoke -uspoken -USPS -USPTO -usquabae -usquabaes -usque -usquebae -usquebaes -usquebaugh -usques -USR -USRC -USS -USSB -USSCt -usself -ussels -usselven -Ussher -ussingite -USSR -USSS -Ussuri -ust -Ustarana -Ustashi -Ustbem -USTC -uster -Ustilaginaceae -ustilaginaceous -Ustilaginales -ustilagineous -Ustilaginoidea -Ustilago -Ustinov -ustion -U-stirrup -Ustyurt -Ust-Kamenogorsk -ustorious -ustulate -ustulation -Ustulina -usu -usual -usualism -usually -usualness -usuals -usuary -usucapient -usucapion -usucapionary -usucapt -usucaptable -usucaptible -usucaption -usucaptor -usufruct -usufructs -usufructuary -usufructuaries -usufruit -Usumbura -Usun -usure -usurer -usurerlike -usurers -usuress -usury -usuries -usurious -usuriously -usuriousness -usurp -usurpation -usurpations -usurpative -usurpatively -usurpatory -usurpature -usurped -usurpedly -usurper -usurpers -usurpership -usurping -usurpingly -usurpment -usurpor -usurpress -usurps -usurption -USV -USW -usward -uswards -UT -Uta -Utah -Utahan -utahans -utahite -utai -Utamaro -Utas -UTC -utch -utchy -UTE -utees -utend -utensil -utensile -utensils -utensil's -uteralgia -uterectomy -uteri -uterine -uteritis -utero -utero- -uteroabdominal -uterocele -uterocervical -uterocystotomy -uterofixation -uterogestation -uterogram -uterography -uterointestinal -uterolith -uterology -uteromania -uteromaniac -uteromaniacal -uterometer -uteroovarian -uteroparietal -uteropelvic -uteroperitoneal -uteropexy -uteropexia -uteroplacental -uteroplasty -uterosacral -uterosclerosis -uteroscope -uterotomy -uterotonic -uterotubal -uterovaginal -uteroventral -uterovesical -uterus -uteruses -Utes -utfangenethef -utfangethef -utfangthef -utfangthief -Utgard -Utgard-Loki -Utham -Uther -Uthrop -uti -utible -Utica -Uticas -utick -util -utile -utilidor -utilidors -utilise -utilised -utiliser -utilisers -utilises -utilising -utilitarian -utilitarianism -utilitarianist -utilitarianize -utilitarianly -utilitarians -utility -utilities -utility's -utilizability -utilizable -utilization -utilizations -utilization's -utilize -utilized -utilizer -utilizers -utilizes -utilizing -Utimer -utinam -utlagary -Utley -utlilized -utmost -utmostness -utmosts -Utnapishtim -Uto-Aztecan -Utopia -Utopian -utopianism -utopianist -Utopianize -Utopianizer -utopians -utopian's -utopias -utopiast -utopism -utopisms -utopist -utopistic -utopists -utopographer -UTP -UTQGS -UTR -Utraquism -Utraquist -utraquistic -Utrecht -utricle -utricles -utricul -utricular -Utricularia -Utriculariaceae -utriculate -utriculi -utriculiferous -utriculiform -utriculitis -utriculoid -utriculoplasty -utriculoplastic -utriculosaccular -utriculose -utriculus -utriform -Utrillo -utrubi -utrum -uts -utsuk -Utsunomiya -Utta -Uttasta -Utter -utterability -utterable -utterableness -utterance -utterances -utterance's -utterancy -uttered -utterer -utterers -utterest -uttering -utterless -utterly -uttermost -utterness -utters -Uttica -Uttu -Utu -Utuado -utum -U-turn -uturuncu -UTWA -UU -UUCICO -UUCP -uucpnet -UUG -Uuge -UUM -Uund -UUT -UV -uva -uval -uvala -Uvalda -Uvalde -uvalha -uvanite -uvarovite -uvate -Uva-ursi -uvea -uveal -uveas -Uvedale -uveitic -uveitis -uveitises -Uvella -uveous -uvic -uvid -uviol -uvitic -uvitinic -uvito -uvitonic -uvre -uvres -uvrou -UVS -uvula -uvulae -uvular -Uvularia -uvularly -uvulars -uvulas -uvulatomy -uvulatomies -uvulectomy -uvulectomies -uvulitis -uvulitises -uvuloptosis -uvulotome -uvulotomy -uvulotomies -uvver -UW -Uwchland -UWCSA -UWS -Uwton -ux -Uxbridge -Uxmal -uxorial -uxoriality -uxorially -uxoricidal -uxoricide -uxorilocal -uxorious -uxoriously -uxoriousness -uxoris -uzan -uzara -uzarin -uzaron -Uzbak -Uzbeg -Uzbegs -Uzbek -Uzbekistan -Uzia -Uzial -Uziel -Uzzi -Uzzia -Uzziah -Uzzial -Uzziel -V -V. -V.A. -V.C. -v.d. -v.g. -V.I. -V.P. -V.R. -v.s. -v.v. -V.W. -V/STOL -V-1 -V-2 -V6 -V8 -VA -Va. -vaad -vaadim -vaagmaer -vaagmar -vaagmer -Vaal -vaalite -Vaalpens -Vaas -Vaasa -Vaasta -VAB -VABIS -VAC -vacabond -vacance -vacancy -vacancies -vacancy's -vacandi -vacant -vacant-brained -vacante -vacant-eyed -vacant-headed -vacanthearted -vacantheartedness -vacantia -vacantly -vacant-looking -vacant-minded -vacant-mindedness -vacantness -vacantry -vacant-seeming -vacatable -vacate -vacated -vacates -vacating -vacation -vacational -vacationed -vacationer -vacationers -vacationing -vacationist -vacationists -vacationland -vacationless -vacations -vacatur -Vacaville -vaccary -Vaccaria -vaccenic -vaccicide -vaccigenous -vaccina -vaccinable -vaccinal -vaccinas -vaccinate -vaccinated -vaccinates -vaccinating -vaccination -vaccinationist -vaccinations -vaccinator -vaccinatory -vaccinators -vaccine -vaccinee -vaccinella -vaccines -vaccinia -Vacciniaceae -vacciniaceous -vaccinial -vaccinias -vaccinifer -vacciniform -vacciniola -vaccinist -Vaccinium -vaccinization -vaccinogenic -vaccinogenous -vaccinoid -vaccinophobia -vaccino-syphilis -vaccinotherapy -vache -Vachel -Vachell -Vachellia -Vacherie -Vacherin -vachette -Vachil -Vachill -vacillancy -vacillant -vacillate -vacillated -vacillates -vacillating -vacillatingly -vacillation -vacillations -vacillator -vacillatory -vacillators -Vacla -Vaclav -Vaclava -vacoa -vacona -vacoua -vacouf -vacs -vacua -vacual -vacuate -vacuation -vacuefy -vacuist -vacuit -vacuity -vacuities -Vacuna -vacuo -vacuolar -vacuolary -vacuolate -vacuolated -vacuolation -vacuole -vacuoles -vacuolization -vacuome -vacuometer -vacuous -vacuously -vacuousness -vacuousnesses -vacuua -vacuum -vacuuma -vacuum-clean -vacuumed -vacuuming -vacuumize -vacuum-packed -vacuums -Vacuva -VAD -Vada -vade -vadelect -vade-mecum -Vaden -Vader -vady -Vadim -vadimony -vadimonium -Vadis -Vadito -vadium -Vadnee -Vadodara -vadose -VADS -Vadso -Vaduz -Vaenfila -va-et-vien -VAFB -Vafio -vafrous -vag -vag- -vagabond -vagabondage -vagabondager -vagabonded -vagabondia -vagabonding -vagabondish -vagabondism -vagabondismus -vagabondize -vagabondized -vagabondizer -vagabondizing -vagabondry -vagabonds -vagabond's -vagal -vagally -vagancy -vagant -vaganti -vagary -vagarian -vagaries -vagarious -vagariously -vagary's -vagarish -vagarisome -vagarist -vagaristic -vagarity -vagas -vagation -vagbondia -vage -vagi -vagient -vagiform -vagile -vagility -vagilities -vagina -vaginae -vaginal -vaginalectomy -vaginalectomies -vaginaless -vaginalitis -vaginally -vaginant -vaginas -vagina's -vaginate -vaginated -vaginectomy -vaginectomies -vaginervose -Vaginicola -vaginicoline -vaginicolous -vaginiferous -vaginipennate -vaginismus -vaginitis -vagino- -vaginoabdominal -vaginocele -vaginodynia -vaginofixation -vaginolabial -vaginometer -vaginomycosis -vaginoperineal -vaginoperitoneal -vaginopexy -vaginoplasty -vaginoscope -vaginoscopy -vaginotome -vaginotomy -vaginotomies -vaginovesical -vaginovulvar -vaginula -vaginulate -vaginule -vagitus -Vagnera -vagoaccessorius -vagodepressor -vagoglossopharyngeal -vagogram -vagolysis -vagosympathetic -vagotomy -vagotomies -vagotomize -vagotony -vagotonia -vagotonic -vagotropic -vagotropism -vagous -vagrance -vagrancy -vagrancies -vagrant -vagrantism -vagrantize -vagrantly -vagrantlike -vagrantness -vagrants -vagrate -vagrom -vague -vague-eyed -vague-ideaed -vaguely -vague-looking -vague-menacing -vague-minded -vagueness -vaguenesses -vague-phrased -vaguer -vague-shining -vaguest -vague-worded -vaguio -vaguios -vaguish -vaguity -vagulous -vagus -vahana -Vahe -vahine -vahines -vahini -Vai -Vaiden -Vaidic -Vaientina -Vail -vailable -vailed -vailing -vails -vain -vainer -vainest -vainful -vainglory -vainglorious -vaingloriously -vaingloriousness -vainly -vainness -vainnesses -Vaios -vair -vairagi -vaire -vairee -vairy -vairs -Vaish -Vaisheshika -Vaishnava -Vaishnavism -Vaisya -Vayu -vaivode -Vaja -vajra -vajrasana -vakass -vakeel -vakeels -vakia -vakil -vakils -vakkaliga -Val -val. -Vala -Valadon -Valais -valance -valanced -valances -valanche -valancing -Valaree -Valaria -Valaskjalf -Valatie -valbellite -Valborg -Valda -Valdas -Valdemar -Val-de-Marne -Valdepeas -Valders -Valdes -Valdese -Valdez -Valdis -Valdivia -Val-d'Oise -Valdosta -Vale -valebant -Valeda -valediction -valedictions -valedictory -valedictorian -valedictorians -valedictories -valedictorily -Valenay -Valenba -Valence -valences -valence's -valency -Valencia -Valencian -valencianite -valencias -Valenciennes -valencies -Valene -Valenka -Valens -valent -Valenta -Valente -Valentia -valentiam -Valentide -Valentijn -Valentin -Valentina -Valentine -Valentines -valentine's -Valentinian -Valentinianism -valentinite -Valentino -Valentinus -Valenza -Valer -Valera -valeral -valeraldehyde -valeramid -valeramide -valerate -valerates -Valery -Valeria -Valerian -Valeriana -Valerianaceae -valerianaceous -Valerianales -valerianate -Valerianella -valerianic -Valerianoides -valerians -valeric -Valerie -Valerye -valeryl -valerylene -valerin -Valerio -Valerlan -Valerle -valero- -valerolactone -valerone -vales -vale's -valet -Valeta -valetage -valetaille -valet-de-chambre -valet-de-place -valetdom -valeted -valethood -valeting -valetism -valetry -valets -valet's -Valetta -valetude -valetudinaire -valetudinary -valetudinarian -valetudinarianism -valetudinarians -valetudinaries -valetudinariness -valetudinarist -valetudinarium -valeur -valew -valeward -valewe -valgoid -valgus -valguses -valhall -Valhalla -Vali -valiance -valiances -valiancy -valiancies -Valiant -valiantly -valiantness -valiants -valid -Valida -validatable -validate -validated -validates -validating -validation -validations -validatory -validification -validity -validities -validly -validness -validnesses -validous -Valier -Valyermo -valyl -valylene -Valina -valinch -valine -valines -valise -valiseful -valises -valiship -Valium -Valkyr -Valkyria -Valkyrian -Valkyrie -valkyries -valkyrs -vall -Valladolid -vallancy -vallar -vallary -vallate -vallated -vallation -Valle -Valleau -Vallecito -Vallecitos -vallecula -valleculae -vallecular -valleculate -Valley -valleyful -valleyite -valleylet -valleylike -valleys -valley's -valleyward -valleywise -Vallejo -Vallenar -Vallery -Valletta -vallevarite -Valli -Vally -Valliant -vallicula -valliculae -vallicular -vallidom -Vallie -vallies -vallis -Valliscaulian -Vallisneria -Vallisneriaceae -vallisneriaceous -Vallo -Vallombrosa -Vallombrosan -Vallonia -Vallota -vallum -vallums -Valma -Valmeyer -Valmy -Valmid -Valmiki -Valois -Valona -Valonia -Valoniaceae -valoniaceous -Valoniah -valonias -valor -Valora -valorem -Valorie -valorisation -valorise -valorised -valorises -valorising -valorization -valorizations -valorize -valorized -valorizes -valorizing -valorous -valorously -valorousness -valors -valour -valours -valouwe -Valparaiso -Valpolicella -Valry -Valrico -Valsa -Valsaceae -Valsalvan -valse -valses -valsoid -Valtellina -Valtin -valuable -valuableness -valuables -valuably -valuate -valuated -valuates -valuating -valuation -valuational -valuationally -valuations -valuation's -valuative -valuator -valuators -value -valued -valueless -valuelessness -valuer -valuers -values -valuing -valure -valuta -valutas -valva -valvae -valval -valvar -Valvata -valvate -Valvatidae -valve -valved -valve-grinding -valveless -valvelet -valvelets -valvelike -valveman -valvemen -valves -valve's -valve-shaped -valviferous -valviform -valving -valvotomy -valvula -valvulae -valvular -valvulate -valvule -valvules -valvulitis -valvulotome -valvulotomy -Vaman -vambrace -vambraced -vambraces -vambrash -vamfont -vammazsa -vamoose -vamoosed -vamooses -vamoosing -vamos -vamose -vamosed -vamoses -vamosing -vamp -vamped -vampey -vamper -vampers -vamphorn -vamping -vampire -vampyre -Vampyrella -Vampyrellidae -vampireproof -vampires -vampiric -vampirish -vampirism -vampirize -Vampyrum -vampish -vamplate -vampproof -vamps -vamure -VAN -vanadate -vanadates -vanadiate -vanadic -vanadiferous -vanadyl -vanadinite -vanadious -vanadium -vanadiums -vanadosilicate -vanadous -Vanaheim -Vanalstyne -vanaprastha -vanaspati -VanAtta -vanbrace -Vanbrugh -Vance -Vanceboro -Vanceburg -vancomycin -vancourier -van-courier -Vancourt -Vancouver -Vancouveria -Vanda -Vandal -Vandalia -Vandalic -vandalish -vandalism -vandalisms -vandalistic -vandalization -vandalize -vandalized -vandalizes -vandalizing -vandalroot -vandals -vandas -vandelas -Vandemere -Vandemonian -Vandemonianism -Vanden -Vandenberg -Vander -Vanderbilt -Vandergrift -Vanderhoek -Vanderpoel -Vanderpool -Vandervelde -Vandervoort -Vandiemenian -Vandyke -vandyked -Vandyke-edged -vandykes -Vandyne -Vandiver -Vanduser -Vane -vaned -vaneless -vanelike -Vanellus -vanes -vane's -Vanessa -vanessian -Vanetha -Vanetten -vanfoss -van-foss -vang -Vange -vangee -vangeli -vanglo -vangloe -vangs -Vanguard -Vanguardist -vanguards -Vangueria -Vanhomrigh -VanHook -Vanhorn -Vanhornesville -Vani -Vania -Vanya -Vanier -vanilla -vanillal -vanillaldehyde -vanillas -vanillate -vanille -vanillery -vanillic -vanillyl -vanillin -vanilline -vanillinic -vanillins -vanillism -vanilloes -vanilloyl -vanillon -Vanir -vanish -vanished -vanisher -vanishers -vanishes -vanishing -vanishingly -vanishment -Vanist -vanitarianism -vanity -vanitied -vanities -Vanity-fairian -vanity-proof -vanitory -vanitous -vanjarrah -van-john -vanlay -vanload -vanman -vanmen -vanmost -Vanna -Vannai -Vanndale -vanned -vanner -vannerman -vannermen -vanners -Vannes -vannet -Vannevar -Vanni -Vanny -Vannic -Vannie -vanning -Vannuys -vannus -Vano -Vanorin -vanpool -vanpools -vanquish -vanquishable -vanquished -vanquisher -vanquishers -vanquishes -vanquishing -vanquishment -VANS -van's -Vansant -vansire -Vansittart -vant- -vantage -vantage-ground -vantageless -vantages -Vantassell -vantbrace -vantbrass -vanterie -vantguard -Vanthe -Vanuatu -Vanvleck -vanward -Vanwert -Vanwyck -Vanzant -Vanzetti -VAP -vapid -vapidism -vapidity -vapidities -vapidly -vapidness -vapidnesses -vapocauterization -vapography -vapographic -vapor -vaporability -vaporable -vaporary -vaporarium -vaporate -vapor-belted -vapor-braided -vapor-burdened -vapor-clouded -vapored -vaporer -vaporers -vaporescence -vaporescent -vaporetti -vaporetto -vaporettos -vapor-filled -vapor-headed -vapory -vaporiferous -vaporiferousness -vaporific -vaporiform -vaporimeter -vaporiness -vaporing -vaporingly -vaporings -vaporise -vaporised -vaporises -vaporish -vaporishness -vaporising -vaporium -vaporizability -vaporizable -vaporization -vaporizations -vaporize -vaporized -vaporizer -vaporizers -vaporizes -vaporizing -vaporless -vaporlike -vaporograph -vaporographic -vaporose -vaporoseness -vaporosity -vaporous -vaporously -vaporousness -vapor-producing -Vapors -vapor-sandaled -vaportight -Vaporum -vaporware -vapotherapy -vapour -vapourable -vapour-bath -vapoured -vapourer -vapourers -vapourescent -vapoury -vapourific -vapourimeter -vapouring -vapouringly -vapourisable -vapourise -vapourised -vapouriser -vapourish -vapourishness -vapourising -vapourizable -vapourization -vapourize -vapourized -vapourizer -vapourizing -vapourose -vapourous -vapourously -vapours -vappa -vapulary -vapulate -vapulation -vapulatory -vaquero -vaqueros -VAR -var. -vara -varactor -Varah -varahan -varan -Varanasi -Varanger -Varangi -Varangian -varanian -varanid -Varanidae -Varanoid -Varanus -varas -varda -Vardaman -vardapet -Vardar -Varden -Vardhamana -vardy -vardingale -Vardon -vare -varec -varech -Vareck -vareheaded -varella -Varese -vareuse -Vargas -Varginha -vargueno -Varhol -vari -Vary -vari- -varia -variability -variabilities -variable -variableness -variablenesses -variables -variable's -variably -variac -variadic -Variag -variagles -Varian -variance -variances -variance's -variancy -variant -variantly -variants -variate -variated -variates -variating -variation -variational -variationally -variationist -variations -variation's -variatious -variative -variatively -variator -varical -varicated -varication -varicella -varicellar -varicellate -varicellation -varicelliform -varicelloid -varicellous -varices -variciform -Varick -varico- -varicoblepharon -varicocele -varicoid -varicolored -varicolorous -varicoloured -vari-coloured -varicose -varicosed -varicoseness -varicosis -varicosity -varicosities -varicotomy -varicotomies -varicula -Varidase -varidical -varied -variedly -variedness -variegate -variegated -variegated-leaved -variegates -variegating -variegation -variegations -variegator -Varien -varier -variers -varies -varietal -varietally -varietals -varietas -variety -varieties -Varietyese -variety's -varietism -varietist -varietur -varify -varificatory -variform -variformed -variformity -variformly -varigradation -varying -varyingly -varyings -Varina -varindor -varing -Varini -vario -vario- -variocoupler -variocuopler -variola -variolar -Variolaria -variolas -variolate -variolated -variolating -variolation -variole -varioles -variolic -varioliform -variolite -variolitic -variolitization -variolization -varioloid -variolosser -variolous -variolovaccine -variolovaccinia -variometer -Varion -variorum -variorums -varios -variotinted -various -various-blossomed -various-colored -various-formed -various-leaved -variously -variousness -Varipapa -Varysburg -variscite -varisized -varisse -varistor -varistors -Varitype -varityped -VariTyper -varityping -varitypist -varix -varkas -Varl -varlet -varletaille -varletess -varletry -varletries -varlets -varletto -varmannie -varment -varments -varmint -varmints -Varna -varnas -varnashrama -Varney -Varnell -varnish -varnish-drying -varnished -varnisher -varnishes -varnishy -varnishing -varnishlike -varnish-making -varnishment -varnish's -varnish-treated -varnish-treating -varnpliktige -varnsingite -Varnville -Varolian -varoom -varoomed -varooms -Varrian -Varro -Varronia -Varronian -vars -varsal -varsha -varsiter -varsity -varsities -Varsovian -varsoviana -varsovienne -vartabed -Varuna -Varuni -varus -varuses -varve -varve-count -varved -varvel -varves -Vas -vas- -Vasa -vasal -vasalled -Vasari -VASCAR -vascla -vascon -Vascons -vascula -vascular -vascularity -vascularities -vascularization -vascularize -vascularized -vascularizing -vascularly -vasculated -vasculature -vasculiferous -vasculiform -vasculitis -vasculogenesis -vasculolymphatic -vasculomotor -vasculose -vasculous -vasculum -vasculums -vase -vasectomy -vasectomies -vasectomise -vasectomised -vasectomising -vasectomize -vasectomized -vasectomizing -vaseful -vaselet -vaselike -Vaseline -vasemaker -vasemaking -vases -vase's -vase-shaped -vase-vine -vasewise -vasework -vashegyite -Vashon -Vashtee -Vashti -Vashtia -VASI -Vasya -vasicentric -vasicine -vasifactive -vasiferous -vasiform -Vasileior -Vasilek -Vasili -Vasily -Vasiliki -Vasilis -Vasiliu -Vasyuta -vaso- -vasoactive -vasoactivity -vasoconstricting -vasoconstriction -vasoconstrictive -vasoconstrictor -vasoconstrictors -vasocorona -vasodentinal -vasodentine -vasodepressor -vasodilatation -vasodilatin -vasodilating -vasodilation -vasodilator -vasoepididymostomy -vasofactive -vasoformative -vasoganglion -vasohypertonic -vasohypotonic -vasoinhibitor -vasoinhibitory -vasoligation -vasoligature -vasomotion -vasomotor -vaso-motor -vasomotory -vasomotorial -vasomotoric -vasoneurosis -vasoparesis -vasopressin -vasopressor -vasopuncture -vasoreflex -vasorrhaphy -Vasos -vasosection -vasospasm -vasospastic -vasostimulant -vasostomy -vasotocin -vasotomy -vasotonic -vasotribe -vasotripsy -vasotrophic -vasovagal -vasovesiculectomy -Vasquez -vasquine -Vass -vassal -vassalage -vassalages -Vassalboro -vassaldom -vassaled -vassaless -vassalic -vassaling -vassalism -vassality -vassalize -vassalized -vassalizing -vassalless -vassalling -vassalry -vassals -vassalship -Vassar -Vassaux -Vassell -Vassili -Vassily -vassos -VAST -Vasta -Vastah -vastate -vastation -vast-dimensioned -vaster -Vasteras -vastest -Vastha -Vasthi -Vasti -vasty -vastidity -vastier -vastiest -vastily -vastiness -vastity -vastities -vastitude -vastly -vastness -vastnesses -vast-rolling -vasts -vast-skirted -vastus -vasu -Vasudeva -Vasundhara -VAT -Vat. -vat-dyed -va-t'-en -Vateria -Vaterland -vates -vatful -vatfuls -vatic -vatical -vatically -Vatican -vaticanal -vaticanic -vaticanical -Vaticanism -Vaticanist -Vaticanization -Vaticanize -Vaticanus -vaticide -vaticides -vaticinal -vaticinant -vaticinate -vaticinated -vaticinating -vaticination -vaticinator -vaticinatory -vaticinatress -vaticinatrix -vaticine -vatmaker -vatmaking -vatman -vat-net -vats -vat's -vatted -Vatteluttu -Vatter -vatting -vatu -vatus -vau -Vauban -Vaucheria -Vaucheriaceae -vaucheriaceous -Vaucluse -Vaud -vaudeville -vaudevilles -vaudevillian -vaudevillians -vaudevillist -vaudy -vaudios -Vaudism -Vaudois -vaudoux -Vaughan -Vaughn -Vaughnsville -vaugnerite -vauguelinite -Vaules -vault -vaultage -vaulted -vaultedly -vaulter -vaulters -vaulty -vaultier -vaultiest -vaulting -vaultings -vaultlike -vaults -vaumure -vaunce -vaunt -vaunt- -vauntage -vaunt-courier -vaunted -vaunter -vauntery -vaunters -vauntful -vaunty -vauntie -vauntiness -vaunting -vauntingly -vauntlay -vauntmure -vaunts -vauquelinite -vaurien -vaus -Vauxhall -Vauxhallian -vauxite -VAV -vavasor -vavasory -vavasories -vavasors -vavasour -vavasours -vavassor -vavassors -vavs -vaw -vaward -vawards -vawntie -vaws -VAX -VAXBI -Vazimba -VB -vb. -V-blouse -V-bottom -VC -VCCI -VCM -VCO -VCR -VCS -VCU -VD -V-Day -VDC -VDE -VDFM -VDI -VDM -VDT -VDU -VE -'ve -Veadar -veadore -Veal -vealed -vealer -vealers -vealy -vealier -vealiest -vealiness -vealing -veallike -veals -vealskin -Veator -Veats -veau -Veblen -Veblenian -Veblenism -Veblenite -vectigal -vection -vectis -vectitation -vectograph -vectographic -vector -vectorcardiogram -vectorcardiography -vectorcardiographic -vectored -vectorial -vectorially -vectoring -vectorization -vectorizing -vectors -vector's -vecture -Veda -Vedaic -Vedaism -Vedalia -vedalias -vedana -Vedanga -Vedanta -Vedantic -Vedantism -Vedantist -Vedas -Vedda -Veddah -Vedder -Veddoid -vedet -Vedetta -Vedette -vedettes -Vedi -Vedic -vedika -Vediovis -Vedis -Vedism -Vedist -vedro -Veduis -Vee -Veedersburg -Veedis -VEEGA -veejay -veejays -veen -veena -veenas -veep -veepee -veepees -veeps -veer -veerable -veered -veery -veeries -veering -veeringly -veers -vees -vefry -veg -Vega -Vegabaja -vegan -veganism -veganisms -vegans -vegas -vegasite -vegeculture -vegetability -vegetable -vegetable-eating -vegetable-feeding -vegetable-growing -vegetablelike -vegetables -vegetable's -vegetablewise -vegetably -vegetablize -vegetal -vegetalcule -vegetality -vegetant -vegetarian -vegetarianism -vegetarianisms -vegetarians -vegetarian's -vegetate -vegetated -vegetates -vegetating -vegetation -vegetational -vegetationally -vegetationless -vegetation-proof -vegetations -vegetative -vegetatively -vegetativeness -vegete -vegeteness -vegeterianism -vegetism -vegetist -vegetists -vegetive -vegetivorous -vegeto- -vegetoalkali -vegetoalkaline -vegetoalkaloid -vegetoanimal -vegetobituminous -vegetocarbonaceous -vegetomineral -vegetous -veggie -veggies -vegie -vegies -Veguita -vehemence -vehemences -vehemency -vehement -vehemently -vehicle -vehicles -vehicle's -vehicula -vehicular -vehiculary -vehicularly -vehiculate -vehiculation -vehiculatory -vehiculum -vehme -Vehmgericht -Vehmgerichte -Vehmic -vei -Vey -V-eight -veigle -Veii -veil -veiled -veiledly -veiledness -veiler -veilers -veil-hid -veily -veiling -veilings -veilless -veilleuse -veillike -Veillonella -veilmaker -veilmaking -veils -Veiltail -veil-wearing -vein -veinage -veinal -veinbanding -vein-bearing -veined -veiner -veinery -veiners -vein-healing -veiny -veinier -veiniest -veininess -veining -veinings -veinless -veinlet -veinlets -veinlike -vein-mining -veinous -veins -veinstone -vein-streaked -veinstuff -veinule -veinules -veinulet -veinulets -veinwise -veinwork -Veiovis -Veit -Vejoces -Vejovis -Vejoz -vel -vel. -Vela -Vela-Hotel -velal -velamen -velamentous -velamentum -velamina -velar -Velarde -velardenite -velary -velaria -velaric -velarium -velarization -velarize -velarized -velarizes -velarizing -velar-pharyngeal -velars -Velasco -Velasquez -velate -velated -velating -velation -velatura -Velchanos -Velcro -veld -veld- -Velda -veldcraft -veld-kost -veldman -velds -veldschoen -veldschoenen -veldschoens -veldskoen -veldt -veldts -veldtschoen -veldtsman -Veleda -Velella -velellidous -veleta -velyarde -velic -velicate -Velick -veliferous -veliform -veliger -veligerous -veligers -Velika -velitation -velites -Veljkov -vell -Vella -vellala -velleda -velleity -velleities -Velleman -vellicate -vellicated -vellicating -vellication -vellicative -vellinch -vellincher -vellon -Vellore -vellosin -vellosine -Vellozia -Velloziaceae -velloziaceous -vellum -vellum-bound -vellum-covered -vellumy -vellum-leaved -vellum-papered -vellums -vellum-written -vellute -Velma -velo -veloce -velociman -velocimeter -velocious -velociously -velocipedal -velocipede -velocipedean -velocipeded -velocipedes -velocipedic -velocipeding -velocity -velocities -velocity's -velocitous -velodrome -velometer -Velon -Velorum -velour -velours -velout -veloute -veloutes -veloutine -Velpen -Velquez -Velsen -velte -veltfare -velt-marshal -velum -velumen -velumina -velunge -velure -velured -velures -veluring -Velutina -velutinous -Velva -Velveeta -velveret -velverets -Velvet -velvet-banded -velvet-bearded -velvet-black -velvetbreast -velvet-caped -velvet-clad -velveted -velveteen -velveteened -velveteens -velvety -velvetiness -velveting -velvetleaf -velvet-leaved -velvetlike -velvetmaker -velvetmaking -velvet-pile -velvetry -velvets -velvetseed -velvet-suited -velvetweed -velvetwork -Velzquez -Ven -ven- -Ven. -Vena -Venable -venacularism -venada -venae -venal -venality -venalities -venalization -venalize -venally -venalness -Venango -Venantes -venanzite -venatic -venatical -venatically -venation -venational -venations -Venator -venatory -venatorial -venatorious -vencola -Vend -Venda -vendable -vendace -vendaces -vendage -vendaval -Vendean -vended -Vendee -vendees -Vendelinus -vender -venders -vendetta -vendettas -vendettist -vendeuse -vendibility -vendibilities -vendible -vendibleness -vendibles -vendibly -vendicate -Vendidad -vending -vendis -venditate -venditation -vendition -venditor -Venditti -Vendmiaire -vendor -vendors -vendor's -vends -vendue -vendues -Veneaux -venectomy -Vened -Venedy -Venedocia -Venedotian -veneer -veneered -veneerer -veneerers -veneering -veneers -venefic -venefical -venefice -veneficious -veneficness -veneficous -venemous -venenate -venenated -venenately -venenates -venenating -venenation -venene -veneniferous -venenific -venenosalivary -venenose -venenosi -venenosity -venenosus -venenosusi -venenous -venenousness -venepuncture -Vener -venerability -venerable -venerable-looking -venerableness -venerably -Veneracea -veneracean -veneraceous -veneral -Veneralia -venerance -venerant -venerate -venerated -venerates -venerating -veneration -venerational -venerations -venerative -veneratively -venerativeness -venerator -venere -venereal -venerealness -venerean -venereology -venereological -venereologist -venereophobia -venereous -venerer -Veneres -venery -venerial -venerian -Veneridae -veneries -veneriform -veneris -venero -venerology -veneros -venerous -venesect -venesection -venesector -venesia -Veneta -Venetes -Veneti -Venetia -Venetian -Venetianed -venetians -Venetic -Venetis -Veneto -veneur -Venez -Venezia -Venezia-Euganea -venezolano -Venezuela -Venezuelan -venezuelans -venge -vengeable -vengeance -vengeance-crying -vengeancely -vengeance-prompting -vengeances -vengeance-sated -vengeance-scathed -vengeance-seeking -vengeance-taking -vengeant -venged -vengeful -vengefully -vengefulness -vengeously -venger -venges -V-engine -venging -veny -veni- -veniable -venial -veniality -venialities -venially -venialness -veniam -Venice -venie -venin -venine -venines -venins -veniplex -venipuncture -venire -venireman -veniremen -venires -venise -venisection -venison -venisonivorous -venisonlike -venisons -venisuture -Venita -Venite -Venizelist -Venizelos -venkata -venkisen -venlin -Venlo -Venloo -Venn -vennel -venner -Veno -venoatrial -venoauricular -venogram -venography -Venola -Venolia -venom -venom-breathing -venom-breeding -venom-cold -venomed -venomer -venomers -venom-fanged -venom-hating -venomy -venoming -venomization -venomize -venomless -venomly -venom-mouthed -venomness -venomosalivary -venomous -venomous-hearted -venomously -venomous-looking -venomous-minded -venomousness -venomproof -venoms -venomsome -venom-spotted -venom-sputtering -venom-venting -venosal -venosclerosis -venose -venosinal -venosity -venosities -venostasis -venous -venously -venousness -Vent -venta -ventage -ventages -ventail -ventails -ventana -vented -venter -Venterea -venters -Ventersdorp -venthole -vent-hole -ventiduct -ventifact -ventil -ventilable -ventilagin -ventilate -ventilated -ventilates -ventilating -ventilation -ventilations -ventilative -ventilator -ventilatory -ventilators -ventin -venting -ventless -Vento -ventoy -ventometer -Ventose -ventoseness -ventosity -vent-peg -ventpiece -ventr- -ventrad -ventral -ventrally -ventralmost -ventrals -ventralward -Ventre -Ventress -ventri- -ventric -ventricle -ventricles -ventricle's -ventricolumna -ventricolumnar -ventricornu -ventricornual -ventricose -ventricoseness -ventricosity -ventricous -ventricular -ventricularis -ventriculi -ventriculite -Ventriculites -ventriculitic -Ventriculitidae -ventriculogram -ventriculography -ventriculopuncture -ventriculoscopy -ventriculose -ventriculous -ventriculus -ventricumbent -ventriduct -ventrifixation -ventrilateral -ventrilocution -ventriloqual -ventriloqually -ventriloque -ventriloquy -ventriloquial -ventriloquially -ventriloquys -ventriloquise -ventriloquised -ventriloquising -ventriloquism -ventriloquisms -ventriloquist -ventriloquistic -ventriloquists -ventriloquize -ventriloquizing -ventriloquous -ventriloquously -ventrimesal -ventrimeson -ventrine -ventripyramid -ventripotence -ventripotency -ventripotent -ventripotential -Ventris -ventro- -ventroaxial -ventroaxillary -ventrocaudal -ventrocystorrhaphy -ventrodorsad -ventrodorsal -ventrodorsally -ventrofixation -ventrohysteropexy -ventroinguinal -ventrolateral -ventrolaterally -ventromedial -ventromedially -ventromedian -ventromesal -ventromesial -ventromyel -ventroposterior -ventroptosia -ventroptosis -ventroscopy -ventrose -ventrosity -ventrosuspension -ventrotomy -ventrotomies -vents -Ventura -venture -ventured -venturer -venturers -ventures -venturesome -venturesomely -venturesomeness -venturesomenesses -venturi -Venturia -venturine -venturing -venturings -venturis -venturous -venturously -venturousness -Venu -venue -venues -venula -venulae -venular -venule -venules -venulose -venulous -Venus -Venusberg -Venuses -venushair -Venusian -venusians -Venus's-flytrap -Venus's-girdle -Venus's-hair -venust -venusty -Venustiano -Venuti -Venutian -venville -Veps -Vepse -Vepsish -Ver -Vera -veracious -veraciously -veraciousness -veracity -veracities -Veracruz -Verada -Veradale -Veradi -Veradia -Veradis -veray -Veralyn -verament -veranda -verandaed -verandah -verandahed -verandahs -verandas -veranda's -verascope -veratr- -veratral -veratralbin -veratralbine -veratraldehyde -veratrate -veratria -veratrias -veratric -veratridin -veratridine -veratryl -veratrylidene -veratrin -veratrina -veratrine -veratrinize -veratrinized -veratrinizing -veratrins -veratrize -veratrized -veratrizing -veratroidine -veratroyl -veratrol -veratrole -Veratrum -veratrums -verb -verbal -verbalisation -verbalise -verbalised -verbaliser -verbalising -verbalism -verbalist -verbalistic -verbality -verbalities -verbalization -verbalizations -verbalize -verbalized -verbalizer -verbalizes -verbalizing -verbally -verbals -Verbank -verbarian -verbarium -verbasco -verbascose -Verbascum -verbate -verbatim -Verbena -Verbenaceae -verbenaceous -verbenalike -verbenalin -Verbenarius -verbenas -verbenate -verbenated -verbenating -verbene -Verbenia -verbenol -verbenone -verberate -verberation -verberative -Verbesina -verbesserte -verby -verbiage -verbiages -verbicide -verbiculture -verbid -verbids -verbify -verbification -verbified -verbifies -verbifying -verbigerate -verbigerated -verbigerating -verbigeration -verbigerative -verbile -verbiles -verbless -verbolatry -verbomania -verbomaniac -verbomotor -verbose -verbosely -verboseness -verbosity -verbosities -verboten -verbous -verbs -verb's -verbum -Vercelli -verchok -Vercingetorix -verd -Verda -verdancy -verdancies -verdant -verd-antique -verdantly -verdantness -Verde -verdea -Verdel -verdelho -Verden -verderer -verderers -verderership -verderor -verderors -verdet -verdetto -Verdha -Verdi -Verdicchio -verdict -verdicts -Verdie -Verdigre -verdigris -verdigrised -verdigrisy -verdin -verdins -verdite -verditer -verditers -verdoy -Verdon -verdour -verdugo -verdugoship -Verdun -Verdunville -verdure -verdured -verdureless -verdurer -verdures -verdurous -verdurousness -Vere -verecund -verecundity -verecundness -veredict -veredicto -veredictum -Vereeniging -verey -Verein -Vereine -Vereins -verek -Verel -Verena -verenda -Verene -Vereshchagin -veretilliform -Veretillum -vergaloo -Vergas -Verge -vergeboard -verge-board -verged -Vergeltungswaffe -vergence -vergences -vergency -Vergennes -vergent -vergentness -Verger -vergeress -vergery -vergerism -vergerless -vergers -vergership -verges -vergi -vergiform -Vergil -Vergilian -Vergilianism -verging -verglas -verglases -Vergne -vergobret -vergoyne -Vergos -vergunning -veri -very -Veribest -veridic -veridical -veridicality -veridicalities -veridically -veridicalness -veridicous -veridity -Veriee -verier -veriest -verify -verifiability -verifiable -verifiableness -verifiably -verificate -verification -verifications -verificative -verificatory -verified -verifier -verifiers -verifies -verifying -very-high-frequency -Verile -verily -veriment -Verina -Verine -veriscope -verisimilar -verisimilarly -verisimility -verisimilitude -verisimilitudinous -verism -verismo -verismos -verisms -verist -veristic -verists -veritability -veritable -veritableness -veritably -veritas -veritates -verite -verites -Verity -verities -veritism -veritist -veritistic -verjuice -verjuiced -verjuices -Verkhne-Udinsk -verkrampte -Verla -Verlag -Verlaine -Verlee -Verlia -Verlie -verligte -Vermeer -vermeil -vermeil-cheeked -vermeil-dyed -vermeil-rimmed -vermeils -vermeil-tinctured -vermeil-tinted -vermeil-veined -vermenging -vermeology -vermeologist -Vermes -vermetid -Vermetidae -vermetio -Vermetus -vermi- -vermian -vermicelli -vermicellis -vermiceous -vermicidal -vermicide -vermicious -vermicle -vermicular -Vermicularia -vermicularly -vermiculate -vermiculated -vermiculating -vermiculation -vermicule -vermiculite -vermiculites -vermiculose -vermiculosity -vermiculous -vermiform -Vermiformia -vermiformis -vermiformity -vermiformous -vermifugal -vermifuge -vermifuges -vermifugous -vermigerous -vermigrade -vermil -vermily -Vermilingues -Vermilinguia -vermilinguial -vermilion -vermilion-colored -vermilion-dyed -vermilionette -vermilionize -vermilion-red -vermilion-spotted -vermilion-tawny -vermilion-veined -Vermillion -vermin -verminal -verminate -verminated -verminating -vermination -vermin-covered -vermin-destroying -vermin-eaten -verminer -vermin-footed -vermin-haunted -verminy -verminicidal -verminicide -verminiferous -vermin-infested -verminly -verminlike -verminosis -verminous -verminously -verminousness -verminproof -vermin-ridden -vermin-spoiled -vermin-tenanted -vermiparous -vermiparousness -vermiphobia -vermis -vermivorous -vermivorousness -vermix -Vermont -Vermonter -vermonters -Vermontese -Vermontville -vermorel -vermoulu -vermoulue -vermouth -vermouths -vermuth -vermuths -Vern -Verna -Vernaccia -vernacle -vernacles -vernacular -vernacularisation -vernacularise -vernacularised -vernacularising -vernacularism -vernacularist -vernacularity -vernacularization -vernacularize -vernacularized -vernacularizing -vernacularly -vernacularness -vernaculars -vernaculate -vernaculous -vernage -Vernal -vernal-bearded -vernal-blooming -vernal-flowering -vernalisation -vernalise -vernalised -vernalising -vernality -vernalization -vernalize -vernalized -vernalizes -vernalizing -vernally -vernal-seeming -vernal-tinctured -vernant -vernation -Verndale -Verne -Verney -Vernell -Vernen -Verner -Vernet -Verneuil -verneuk -verneuker -verneukery -Verny -Vernice -vernicle -vernicles -vernicose -Vernier -verniers -vernile -vernility -vernin -vernine -vernissage -Vernita -vernition -vernix -vernixes -Vernoleninsk -Vernon -Vernonia -vernoniaceous -Vernonieae -vernonin -Vernor -Vernunft -Veron -Verona -Veronal -veronalism -Veronese -Veronica -veronicas -Veronicella -Veronicellidae -Veronika -Veronike -Veronique -Verpa -Verplanck -verquere -verray -Verras -Verrazano -verre -verrel -verrell -verry -verriculate -verriculated -verricule -verriere -Verrocchio -verruca -verrucae -verrucano -Verrucaria -Verrucariaceae -verrucariaceous -verrucarioid -verrucated -verruci- -verruciferous -verruciform -verrucose -verrucoseness -verrucosis -verrucosity -verrucosities -verrucous -verruculose -verruga -verrugas -vers -versa -versability -versable -versableness -Versailles -versal -versant -versants -versate -versatec -versatile -versatilely -versatileness -versatility -versatilities -versation -versative -verse -verse-colored -verse-commemorated -versecraft -versed -verseless -verselet -versemaker -versemaking -verseman -versemanship -versemen -versemonger -versemongery -versemongering -verse-prose -verser -versers -verses -versesmith -verset -versets -versette -verseward -versewright -verse-writing -Vershen -Vershire -versicle -versicler -versicles -versicolor -versicolorate -versicolored -versicolorous -versicolour -versicoloured -versicular -versicule -versiculi -versiculus -Versie -versiera -versify -versifiable -versifiaster -versification -versifications -versificator -versificatory -versificatrix -versified -versifier -versifiers -versifies -versifying -versiform -versiloquy -versin -versine -versines -versing -version -versional -versioner -versionist -versionize -versions -versipel -vers-librist -verso -versor -versos -verst -versta -Verstand -verste -verstes -versts -versual -versus -versute -vert -vertebra -vertebrae -vertebral -vertebraless -vertebrally -Vertebraria -vertebrarium -vertebrarterial -vertebras -Vertebrata -vertebrate -vertebrated -vertebrates -vertebrate's -vertebration -vertebre -vertebrectomy -vertebriform -vertebro- -vertebroarterial -vertebrobasilar -vertebrochondral -vertebrocostal -vertebrodymus -vertebrofemoral -vertebroiliac -vertebromammary -vertebrosacral -vertebrosternal -vertep -vertex -vertexes -Verthandi -verty -vertibility -vertible -vertibleness -vertical -verticaled -vertical-grained -verticaling -verticalism -verticality -verticalled -vertically -verticalling -verticalness -verticalnesses -verticals -vertices -verticil -verticillary -verticillaster -verticillastrate -verticillate -verticillated -verticillately -verticillation -verticilli -verticilliaceous -verticilliose -Verticillium -verticillus -verticils -verticity -verticomental -verticordious -vertiginate -vertigines -vertiginous -vertiginously -vertiginousness -vertigo -vertigoes -vertigos -vertilinear -vertimeter -Vertrees -verts -vertu -vertugal -Vertumnus -vertus -Verulamian -Verulamium -veruled -verumontanum -verus -veruta -verutum -vervain -vervainlike -vervains -verve -vervecean -vervecine -vervel -verveled -vervelle -vervelled -vervenia -verver -verves -vervet -vervets -vervine -Verwanderung -Verwoerd -verzini -verzino -Vesalian -Vesalius -vesania -vesanic -vesbite -Vescuso -vese -vesica -vesicae -vesical -vesicant -vesicants -vesicate -vesicated -vesicates -vesicating -vesication -vesicatory -vesicatories -vesicle -vesicles -vesico- -vesicoabdominal -vesicocavernous -vesicocele -vesicocervical -vesicoclysis -vesicofixation -vesicointestinal -vesicoprostatic -vesicopubic -vesicorectal -vesicosigmoid -vesicospinal -vesicotomy -vesico-umbilical -vesico-urachal -vesico-ureteral -vesico-urethral -vesico-uterine -vesicovaginal -vesicula -vesiculae -vesicular -vesiculary -Vesicularia -vesicularity -vesicularly -vesiculase -Vesiculata -Vesiculatae -vesiculate -vesiculated -vesiculating -vesiculation -vesicule -vesiculectomy -vesiculiferous -vesiculiform -vesiculigerous -vesiculitis -vesiculobronchial -vesiculocavernous -vesiculopustular -vesiculose -vesiculotympanic -vesiculotympanitic -vesiculotomy -vesiculotubular -vesiculous -vesiculus -vesicupapular -vesigia -veskit -vesp -Vespa -vespacide -vespal -Vespasian -Vesper -vesperal -vesperals -vespery -vesperian -vespering -vespers -vespertide -vespertilian -Vespertilio -Vespertiliones -vespertilionid -Vespertilionidae -Vespertilioninae -vespertilionine -vespertinal -vespertine -vespetro -vespiary -vespiaries -vespid -Vespidae -vespids -vespiform -Vespina -vespine -vespoid -Vespoidea -Vespucci -vessel -vesseled -vesselful -vesselled -vessels -vessel's -vesses -vessets -vessicnon -vessignon -vest -Vesta -Vestaburg -vestal -Vestalia -vestally -vestals -vestalship -Vestas -vested -vestee -vestees -vester -Vesty -vestiary -vestiarian -vestiaries -vestiarium -vestible -vestibula -vestibular -vestibulary -vestibulate -vestibule -vestibuled -vestibules -vestibuling -vestibulospinal -vestibulo-urethral -vestibulum -Vestie -vestigal -vestige -vestiges -vestige's -vestigia -vestigial -vestigially -Vestigian -vestigiary -vestigium -vestiment -vestimental -vestimentary -vesting -vestings -Vestini -Vestinian -vestiture -vestless -vestlet -vestlike -vestment -vestmental -vestmentary -vestmented -vestments -vest-pocket -vestral -vestralization -vestry -vestrical -vestrydom -vestries -vestrify -vestrification -vestryhood -vestryish -vestryism -vestryize -vestryman -vestrymanly -vestrymanship -vestrymen -vests -vestuary -vestural -vesture -vestured -vesturer -vestures -vesturing -Vesuvian -vesuvianite -vesuvians -vesuviate -vesuvin -Vesuvio -vesuvite -Vesuvius -veszelyite -vet -vet. -Veta -vetanda -vetch -vetches -vetchy -vetchier -vetchiest -vetch-leaved -vetchlike -vetchling -veter -veteran -veterancy -veteraness -veteranize -veterans -veteran's -veterinary -veterinarian -veterinarianism -veterinarians -veterinarian's -veterinaries -vetitive -vetivene -vetivenol -vetiver -Vetiveria -vetivers -vetivert -vetkousie -veto -vetoed -vetoer -vetoers -vetoes -vetoing -vetoism -vetoist -vetoistic -vetoistical -vets -vetted -Vetter -vetting -vettura -vetture -vetturino -vetus -vetust -vetusty -VEU -veuglaire -veuve -Vevay -Vevina -Vevine -VEX -vexable -vexation -vexations -vexatious -vexatiously -vexatiousness -vexatory -vexed -vexedly -vexedness -vexer -vexers -vexes -vexful -vexil -vexilla -vexillar -vexillary -vexillaries -vexillarious -vexillate -vexillation -vexillology -vexillologic -vexillological -vexillologist -vexillum -vexils -vexing -vexingly -vexingness -vext -Vezza -VF -VFEA -VFY -VFO -V-formed -VFR -VFS -VFW -VG -VGA -VGF -VGI -V-girl -V-grooved -Vharat -VHD -VHDL -VHF -VHS -VHSIC -VI -Via -viability -viabilities -viable -viableness -viably -viaduct -viaducts -Viafore -viage -viaggiatory -viagram -viagraph -viajaca -Vial -vialed -vialful -vialing -vialled -vialling -vialmaker -vialmaking -vialogue -vials -vial's -via-medialism -viameter -Vian -viand -viande -vianden -viander -viandry -viands -Viareggio -vias -vyase -viasma -viatic -viatica -viatical -viaticals -viaticum -viaticums -Vyatka -viatometer -viator -viatores -viatorial -viatorially -viators -vibe -vibes -vibetoite -vibex -vibgyor -Vibhu -vibices -vibioid -vibist -vibists -vibix -Viborg -Vyborg -vibracula -vibracular -vibracularium -vibraculoid -vibraculum -vibraharp -vibraharpist -vibraharps -vibrance -vibrances -vibrancy -vibrancies -vibrant -vibrantly -vibrants -vibraphone -vibraphones -vibraphonist -vibrate -vibrated -vibrates -vibratile -vibratility -vibrating -vibratingly -vibration -vibrational -vibrationless -vibration-proof -vibrations -vibratiuncle -vibratiunculation -vibrative -vibrato -vibrator -vibratory -vibrators -vibratos -Vibrio -vibrioid -vibrion -vibrionic -vibrions -vibrios -vibriosis -vibrissa -vibrissae -vibrissal -vibro- -vibrograph -vibromassage -vibrometer -vibromotive -vibronic -vibrophone -vibroscope -vibroscopic -vibrotherapeutics -viburnic -viburnin -Viburnum -viburnums -VIC -Vic. -vica -vicaire -vicar -Vicara -vicarage -vicarages -vicarate -vicarates -vicarchoral -vicar-choralship -vicaress -vicargeneral -vicar-general -vicar-generalship -vicary -vicarial -vicarian -vicarianism -vicariate -vicariates -vicariateship -vicarii -vicariism -vicarious -vicariously -vicariousness -vicariousnesses -vicarius -vicarly -vicars -vicars-general -vicarship -Vicco -Viccora -Vice -vice- -vice-abbot -vice-admiral -vice-admirality -vice-admiralship -vice-admiralty -vice-agent -Vice-apollo -vice-apostle -vice-apostolical -vice-architect -vice-begotten -vice-bishop -vice-bitten -vice-burgomaster -vice-butler -vice-caliph -vice-cancellarian -vice-chair -vice-chairman -vice-chairmen -vice-chamberlain -vice-chancellor -vice-chancellorship -Vice-christ -vice-collector -vicecomes -vicecomital -vicecomites -vice-commodore -vice-constable -vice-consul -vice-consular -vice-consulate -vice-consulship -vice-corrupted -vice-county -vice-created -viced -vice-dean -vice-deity -vice-detesting -vice-dictator -vice-director -vice-emperor -vice-freed -vice-general -vicegeral -vicegerency -vicegerencies -vicegerent -vicegerents -vicegerentship -Vice-god -Vice-godhead -vice-government -vice-governor -vice-governorship -vice-guilty -vice-haunted -vice-headmaster -vice-imperial -vice-king -vice-kingdom -vice-laden -vice-legate -vice-legateship -viceless -vice-librarian -vice-lieutenant -vicelike -vice-loathing -vice-marred -vice-marshal -vice-master -vice-ministerial -vicenary -vice-nature -Vic-en-Bigorre -vicennial -Vicente -Vicenza -vice-palatine -vice-papacy -vice-patron -vice-patronage -vice-polluted -vice-pope -vice-porter -vice-postulator -vice-prefect -vice-premier -vice-pres -vice-presidency -vice-president -vice-presidential -vice-presidentship -vice-priest -vice-principal -vice-principalship -vice-prior -vice-prone -vice-protector -vice-provost -vice-provostship -vice-punishing -vice-queen -vice-rebuking -vice-rector -vice-rectorship -viceregal -vice-regal -vice-regalize -viceregally -viceregency -vice-regency -viceregent -vice-regent -viceregents -vice-reign -vicereine -vice-residency -vice-resident -viceroy -viceroyal -viceroyalty -viceroydom -viceroies -viceroys -viceroyship -vices -vice's -vice-secretary -vice-sheriff -vice-sick -vicesimal -vice-squandered -vice-stadtholder -vice-steward -vice-sultan -vice-taming -vice-tenace -vice-throne -vicety -vice-treasurer -vice-treasurership -vice-trustee -vice-upbraiding -vice-verger -viceversally -vice-viceroy -vice-warden -vice-wardenry -vice-wardenship -vice-worn -Vichy -vichies -Vichyite -vichyssoise -Vici -Vicia -vicianin -vicianose -vicilin -vicinage -vicinages -vicinal -vicine -vicing -vicinity -vicinities -viciosity -vicious -viciously -viciousness -viciousnesses -vicissitous -vicissitude -vicissitudes -vicissitude's -vicissitudinary -vicissitudinous -vicissitudinousness -Vick -Vickey -Vickery -Vickers -Vickers-Maxim -Vicki -Vicky -Vickie -Vicksburg -Vico -vicoite -vicomte -vicomtes -vicomtesse -vicomtesses -Viconian -vicontiel -vicontiels -Vycor -Vict -victal -victim -victimhood -victimisation -victimise -victimised -victimiser -victimising -victimizable -victimization -victimizations -victimize -victimized -victimizer -victimizers -victimizes -victimizing -victimless -victims -victim's -victless -Victoir -Victoire -Victor -victordom -victoress -victorfish -victorfishes -Victory -Victoria -Victorian -Victoriana -Victorianism -Victorianize -Victorianly -Victoriano -victorians -victorias -victoriate -victoriatus -Victorie -Victorien -victories -victoryless -Victorine -victorious -victoriously -victoriousness -victory's -victorium -Victormanuel -victors -victor's -Victorville -victress -victresses -victrices -victrix -Victrola -victual -victualage -victualed -victualer -victualers -victualing -victualled -victualler -victuallers -victuallership -victualless -victualling -victualry -victuals -victus -vicua -vicualling -vicuda -vicugna -vicugnas -vicuna -vicunas -vicus -Vida -Vidal -Vidalia -vidame -Vidar -Vidda -Viddah -Viddhal -viddui -vidduy -vide -videlicet -videnda -videndum -video -videocassette -videocassettes -videocast -videocasting -VideoComp -videodisc -videodiscs -videodisk -video-gazer -videogenic -videophone -videos -videotape -videotaped -videotapes -videotape's -videotaping -videotex -videotext -videruff -vidette -videttes -videtur -Videvdat -vidhyanath -vidya -Vidian -vidicon -vidicons -vidimus -vidkid -vidkids -vidonia -Vidor -Vidovic -Vidovik -vidry -Vidua -viduage -vidual -vidually -viduate -viduated -viduation -Viduinae -viduine -viduity -viduities -viduous -vie -vied -Viehmann -vielle -Vienna -Vienne -Viennese -Viens -Vientiane -Vieques -vier -Viereck -vierkleur -vierling -Vyernyi -Vierno -viers -viertel -viertelein -Vierwaldsttersee -vies -Viet -Vieta -Vietcong -Vietminh -Vietnam -Vietnamese -Vietnamization -Vieva -view -viewable -viewably -viewdata -viewed -viewer -viewers -viewfinder -viewfinders -view-halloo -viewy -viewier -viewiest -viewiness -viewing -viewings -viewless -viewlessly -viewlessness -viewly -viewpoint -view-point -viewpoints -viewpoint's -viewport -views -viewsome -viewster -Viewtown -viewworthy -vifda -VIFRED -Vig -viga -vigas -Vigen -vigentennial -vigesimal -vigesimation -vigesimo -vigesimoquarto -vigesimo-quarto -vigesimo-quartos -vigesimos -viggle -vigia -vigias -vigil -vigilance -vigilances -vigilancy -vigilant -vigilante -vigilantes -vigilante's -vigilantism -vigilantist -vigilantly -vigilantness -vigilate -vigilation -Vigilius -vigils -vigintiangular -vigintillion -vigintillionth -Viglione -vigneron -vignerons -vignette -vignetted -vignetter -vignettes -vignette's -vignetting -vignettist -vignettists -Vigny -vignin -Vignola -Vigo -vigogne -vigone -vigonia -Vigor -vigorish -vigorishes -vigorist -vigorless -vigoroso -vigorous -vigorously -vigorousness -vigorousnesses -vigors -vigour -vigours -Vigrid -vigs -Viguerie -vihara -vihuela -vii -Viyella -viii -vying -vyingly -Viipuri -vijay -Vijayawada -vijao -Viki -Vyky -Viking -vikingism -vikinglike -vikings -vikingship -Vikki -Vikky -vil -vil. -vila -vilayet -vilayets -Vilas -Vilberg -vild -vildly -vildness -VILE -vile-born -vile-bred -vile-concluded -vile-fashioned -vilehearted -vileyns -Vilela -vilely -vile-looking -vile-natured -vileness -vilenesses -vile-proportioned -viler -vile-smelling -vile-spirited -vile-spoken -vilest -vile-tasting -Vilfredo -vilhelm -Vilhelmina -Vilhjalmur -Vili -viliaco -vilicate -vilify -vilification -vilifications -vilified -vilifier -vilifiers -vilifies -vilifying -vilifyingly -vilipend -vilipended -vilipender -vilipending -vilipendious -vilipenditory -vilipends -vility -vilities -vill -Villa -Villach -villache -Villada -villadom -villadoms -villa-dotted -villa-dwelling -villae -villaette -village -village-born -village-dwelling -villageful -villagehood -villagey -villageless -villagelet -villagelike -village-lit -villageous -villager -villageress -villagery -villagers -villages -villaget -villageward -villagy -villagism -villa-haunted -Villahermosa -villayet -villain -villainage -villaindom -villainess -villainesses -villainy -villainies -villainy-proof -villainist -villainize -villainous -villainously -villainous-looking -villainousness -villainproof -villains -villain's -villakin -Villalba -villaless -villalike -Villa-Lobos -Villamaria -Villamont -villan -villanage -villancico -villanella -villanelle -villanette -villanous -villanously -Villanova -Villanovan -Villanueva -villar -Villard -Villarica -Villars -villarsite -Villas -villa's -villate -villatic -Villavicencio -ville -villegiatura -villegiature -villein -villeinage -villeiness -villeinhold -villeins -villeity -villenage -Villeneuve -Villeurbanne -villi -villianess -villianesses -villianous -villianously -villianousness -villianousnesses -villiaumite -villicus -Villiers -villiferous -villiform -villiplacental -Villiplacentalia -Villisca -villitis -villoid -Villon -villose -villosity -villosities -villota -villote -villous -villously -vills -villus -Vilma -Vilnius -Vilonia -vim -vimana -vimen -vimful -Vimy -vimina -Viminal -vimineous -vimpa -vims -Vin -vin- -Vina -vinaceous -vinaconic -vinage -vinagron -Vinaya -vinaigre -vinaigrette -vinaigretted -vinaigrettes -vinaigrier -vinaigrous -vinal -Vinalia -vinals -vinas -vinasse -vinasses -vinata -vinblastine -Vinca -vincas -Vince -Vincelette -Vincennes -Vincent -Vincenta -Vincenty -Vincentia -Vincentian -Vincentown -Vincents -Vincenz -Vincenzo -Vincetoxicum -vincetoxin -vinchuca -Vinci -vincibility -vincible -vincibleness -vincibly -vincristine -vincristines -vincula -vincular -vinculate -vinculation -vinculo -vinculula -vinculum -vinculums -vindaloo -Vindelici -vindemial -vindemiate -vindemiation -vindemiatory -Vindemiatrix -vindesine -vindex -vindhyan -vindicability -vindicable -vindicableness -vindicably -vindicate -vindicated -vindicates -vindicating -vindication -vindications -vindicative -vindicatively -vindicativeness -vindicator -vindicatory -vindicatorily -vindicators -vindicatorship -vindicatress -vindices -vindict -vindicta -vindictive -vindictively -vindictiveness -vindictivenesses -vindictivolence -vindresser -VINE -vinea -vineae -vineal -vineatic -vine-bearing -vine-bordered -Vineburg -vine-clad -vine-covered -vine-crowned -vined -vine-decked -vinedresser -vine-dresser -vine-encircled -vine-fed -vinegar -vinegarer -vinegarette -vinegar-faced -vinegar-flavored -vinegar-generating -vinegar-hearted -vinegary -vinegariness -vinegarish -vinegarishness -vinegarist -vine-garlanded -vinegarlike -vinegarroon -vinegars -vinegar-tart -vinegarweed -vinegerone -vinegrower -vine-growing -vine-hung -vineyard -Vineyarder -vineyarding -vineyardist -vineyards -vineyard's -vineity -vine-laced -Vineland -vine-leafed -vine-leaved -vineless -vinelet -vinelike -vine-mantled -Vinemont -vine-planted -vine-producing -viner -Vyner -vinery -vineries -vine-robed -VINES -vine's -vine-shadowed -vine-sheltered -vinestalk -vinet -Vinethene -vinetta -vinew -vinewise -vine-wreathed -vingerhoed -Vingolf -vingt -vingt-et-un -vingtieme -vingtun -vinhatico -Viny -vini- -Vinia -vinic -vinicultural -viniculture -viniculturist -Vinie -vinier -viniest -vinifera -viniferas -viniferous -vinify -vinification -vinificator -vinified -vinifies -vinyl -vinylacetylene -vinylate -vinylated -vinylating -vinylation -vinylbenzene -vinylene -vinylethylene -vinylic -vinylidene -Vinylite -vinyls -Vining -Vinyon -Vinita -vinitor -vin-jaune -Vinland -Vinn -Vinna -Vinni -Vinny -Vinnie -Vinnitsa -vino -vino- -vinoacetous -Vinoba -vinod -vinolence -vinolent -vinology -vinologist -vinometer -vinomethylic -vinos -vinose -vinosity -vinosities -vinosulphureous -vinous -vinously -vinousness -vinquish -Vins -Vinson -vint -vinta -vintage -vintaged -vintager -vintagers -vintages -vintaging -vintem -vintener -vinter -vintlite -vintner -vintneress -vintnery -vintners -vintnership -Vinton -Vintondale -vintress -vintry -vinum -viol -Viola -violability -violable -violableness -violably -Violaceae -violacean -violaceous -violaceously -violal -Violales -violan -violand -violanin -Violante -violaquercitrin -violas -violate -violated -violater -violaters -violates -violating -violation -violational -violations -violative -violator -violatory -violators -violator's -violature -Viole -violence -violences -violency -violent -violently -violentness -violer -violescent -Violet -Violeta -violet-black -violet-blind -violet-blindness -violet-bloom -violet-blue -violet-brown -violet-colored -violet-coloured -violet-crimson -violet-crowned -violet-dyed -violet-ear -violet-eared -violet-embroidered -violet-flowered -violet-garlanded -violet-gray -violet-green -violet-headed -violet-horned -violet-hued -violety -violet-inwoven -violetish -violetlike -violet-purple -violet-rayed -violet-red -violet-ringed -violets -violet's -violet-scented -violet-shrouded -violet-stoled -violet-striped -violet-sweet -Violetta -violet-tailed -Violette -violet-throated -violetwise -violin -violina -violine -violined -violinette -violining -violinist -violinistic -violinistically -violinists -violinist's -violinless -violinlike -violinmaker -violinmaking -violino -violins -violin's -violin-shaped -violist -violists -Violle -Viollet-le-Duc -violmaker -violmaking -violon -violoncellist -violoncellists -violoncello -violoncellos -violone -violones -violotta -violous -viols -violuric -viomycin -viomycins -viosterol -VIP -V-I-P -Viper -Vipera -viperan -viper-bit -viper-curled -viperess -viperfish -viperfishes -viper-haunted -viper-headed -vipery -viperian -viperid -Viperidae -viperiform -Viperina -Viperinae -viperine -viperish -viperishly -viperlike -viperling -viper-mouthed -viper-nourished -viperoid -Viperoidea -viperous -viperously -viperousness -vipers -viper's -vipolitic -vipresident -vips -Vipul -viqueen -Viquelia -VIR -Vira -Viradis -viragin -viraginian -viraginity -viraginous -virago -viragoes -viragoish -viragolike -viragos -viragoship -viral -Virales -virally -virason -Virbius -Virchow -Virden -vire -virelai -virelay -virelais -virelays -virement -viremia -viremias -viremic -Viren -Virendra -Vyrene -virent -vireo -vireonine -vireos -vires -virescence -virescent -Virg -virga -virgal -virgas -virgate -virgated -virgater -virgates -virgation -Virge -Virgel -virger -Virgy -Virgie -Virgil -Virgilia -Virgilian -Virgilina -Virgilio -Virgilism -Virgin -Virgina -Virginal -Virginale -virginalist -virginality -virginally -virginals -virgin-born -virgin-eyed -virgineous -virginhead -Virginia -Virginian -virginians -Virginid -Virginie -Virginis -virginity -virginities -virginitis -virginityship -virginium -virginly -virginlike -virgin-minded -virgins -virgin's -virgin's-bower -virginship -virgin-vested -Virginville -Virgo -virgos -virgouleuse -virgula -virgular -Virgularia -virgularian -Virgulariidae -virgulate -virgule -virgules -virgultum -virial -viricidal -viricide -viricides -virid -viridaria -viridarium -viridene -viridescence -viridescent -Viridi -viridian -viridians -viridigenous -viridin -viridine -Viridis -Viridissa -viridite -viridity -viridities -virify -virific -virile -virilely -virileness -virilescence -virilescent -virilia -virilify -viriliously -virilism -virilisms -virilist -virility -virilities -virilization -virilize -virilizing -virilocal -virilocally -virion -virions -viripotent -viritoot -viritrate -virl -virled -virls -Virnelli -vyrnwy -viroid -viroids -virole -viroled -virology -virologic -virological -virologically -virologies -virologist -virologists -viron -Viroqua -virose -viroses -virosis -virous -Virtanen -virtu -virtual -virtualism -virtualist -virtuality -virtualize -virtually -virtue -virtue-armed -virtue-binding -virtued -virtuefy -virtueless -virtuelessness -virtue-loving -virtueproof -virtues -virtue's -virtue-tempting -virtue-wise -virtuless -virtuosa -virtuosas -virtuose -virtuosi -virtuosic -virtuosity -virtuosities -virtuoso -virtuosos -virtuoso's -virtuosoship -virtuous -virtuously -virtuouslike -virtuousness -Virtus -virtuti -virtutis -virucidal -virucide -virucides -viruela -virulence -virulences -virulency -virulencies -virulent -virulented -virulently -virulentness -viruliferous -virus -viruscidal -viruscide -virusemic -viruses -viruslike -virus's -virustatic -vis -visa -visaed -visage -visaged -visages -visagraph -Visaya -Visayan -Visayans -visaing -Visakhapatnam -Visalia -visammin -vis-a-ns -visard -visards -visarga -visas -vis-a-vis -vis-a-visness -Visby -Visc -viscacha -viscachas -Viscardi -viscera -visceral -visceralgia -viscerally -visceralness -viscerate -viscerated -viscerating -visceration -visceripericardial -viscero- -viscerogenic -visceroinhibitory -visceromotor -visceroparietal -visceroperitioneal -visceropleural -visceroptosis -visceroptotic -viscerosensory -visceroskeletal -viscerosomatic -viscerotomy -viscerotonia -viscerotonic -viscerotrophic -viscerotropic -viscerous -viscid -viscidity -viscidities -viscidize -viscidly -viscidness -viscidulous -viscin -viscoelastic -viscoelasticity -viscoid -viscoidal -viscolize -viscometer -viscometry -viscometric -viscometrical -viscometrically -viscontal -Visconti -viscontial -viscoscope -viscose -viscoses -viscosimeter -viscosimetry -viscosimetric -viscosity -viscosities -Viscount -viscountcy -viscountcies -viscountess -viscountesses -viscounty -viscounts -viscount's -viscountship -viscous -viscously -viscousness -Visct -viscum -viscus -vise -Vyse -vised -viseed -viseing -viselike -viseman -visement -visenomy -vises -Viseu -Vish -vishal -Vishinsky -Vyshinsky -Vishnavite -Vishniac -Vishnu -Vishnuism -Vishnuite -Vishnuvite -visibility -visibilities -visibilize -visible -visibleness -visibly -visie -visier -Visigoth -Visigothic -visile -Visine -vising -vision -visional -visionally -visionary -visionaries -visionarily -visionariness -vision-directed -visioned -visioner -vision-filled -vision-haunted -visionic -visioning -visionist -visionize -visionless -visionlike -visionmonger -visionproof -visions -vision's -vision-seeing -vision-struck -visit -visita -visitable -visitador -Visitandine -visitant -visitants -visitate -Visitation -visitational -visitations -visitation's -visitative -visitator -visitatorial -visite -visited -visitee -visiter -visiters -visiting -visitment -visitor -visitoress -visitor-general -visitorial -visitors -visitor's -visitorship -visitress -visitrix -visits -visive -visne -visney -visnomy -vison -visor -visored -visory -visoring -visorless -visorlike -visors -visor's -Visotoner -viss -VISTA -vistaed -vistal -vistaless -vistamente -vistas -vista's -vistlik -visto -Vistula -Vistulian -visual -visualisable -visualisation -visualiser -visualist -visuality -visualities -visualizable -visualization -visualizations -visualize -visualized -visualizer -visualizers -visualizes -visualizing -visually -visuals -visuoauditory -visuokinesthetic -visuometer -visuopsychic -visuosensory -VITA -Vitaceae -vitaceous -vitae -Vitaglass -vitagraph -vital -Vitale -Vitalian -vitalic -Vitalis -vitalisation -vitalise -vitalised -vitaliser -vitalises -vitalising -vitalism -vitalisms -vitalist -vitalistic -vitalistically -vitalists -vitality -vitalities -vitalization -vitalize -vitalized -vitalizer -vitalizers -vitalizes -vitalizing -vitalizingly -vitally -Vitallium -vitalness -vitals -vitamer -vitameric -vitamers -vitamin -vitamine -vitamines -vitamin-free -vitaminic -vitaminization -vitaminize -vitaminized -vitaminizing -vitaminology -vitaminologist -vitamins -vitapath -vitapathy -Vitaphone -vitascope -vitascopic -vitasti -vitativeness -Vite -Vitebsk -Vitek -vitellary -vitellarian -vitellarium -vitellicle -vitelliferous -vitelligenous -vitelligerous -vitellin -vitelline -vitellins -vitello- -vitellogene -vitellogenesis -vitellogenous -vitello-intestinal -vitellose -vitellus -vitelluses -viterbite -vitesse -vitesses -vithayasai -Vitharr -Vithi -Viti -viti- -Vitia -vitiable -vitial -vitiate -vitiated -vitiates -vitiating -vitiation -vitiations -vitiator -vitiators -viticeta -viticetum -viticetums -viticulose -viticultural -viticulture -viticulturer -viticulturist -viticulturists -vitiferous -vitilago -vitiliginous -vitiligo -vitiligoid -vitiligoidea -vitiligos -vitilitigate -vitiosity -vitiosities -Vitis -vitita -vitium -Vitkun -Vito -vitochemic -vitochemical -Vitoria -vitra -vitrage -vitrail -vitrailed -vitrailist -vitraillist -vitrain -vitrains -vitraux -vitreal -vitrean -vitrella -vitremyte -vitreodentinal -vitreodentine -vitreoelectric -vitreosity -vitreous -vitreously -vitreouslike -vitreousness -vitrescence -vitrescency -vitrescent -vitrescibility -vitrescible -vitreum -Vitry -Vitria -vitrial -vitric -vitrics -vitrifaction -vitrifacture -vitrify -vitrifiability -vitrifiable -vitrificate -vitrification -vitrifications -vitrified -vitrifies -vitrifying -vitriform -Vitrina -vitrine -vitrines -vitrinoid -vitriol -vitriolate -vitriolated -vitriolating -vitriolation -vitrioled -vitriolic -vitriolically -vitrioline -vitrioling -vitriolizable -vitriolization -vitriolize -vitriolized -vitriolizer -vitriolizing -vitriolled -vitriolling -vitriols -vitrite -vitro -vitro- -vitrobasalt -vitro-clarain -vitro-di-trina -vitrophyre -vitrophyric -vitrotype -vitrous -vitrum -Vitruvian -Vitruvianism -Vitruvius -vitta -vittae -vittate -vittle -vittled -vittles -vittling -Vittore -Vittoria -Vittorio -vitular -vitulary -vituline -vituper -vituperable -vituperance -vituperate -vituperated -vituperates -vituperating -vituperation -vituperations -vituperatiou -vituperative -vituperatively -vituperator -vituperatory -vitupery -vituperious -vituperous -Vitus -VIU -viuva -Viv -Viva -vivace -vivaces -vivacious -vivaciously -vivaciousness -vivaciousnesses -vivacissimo -vivacity -vivacities -Vivaldi -vivamente -vivandi -vivandier -vivandiere -vivandieres -vivandire -vivant -vivants -vivary -vivaria -vivaries -vivariia -vivariiums -vivarium -vivariums -vivarvaria -vivas -vivat -viva-voce -vivax -vivda -vive -Viveca -vivek -Vivekananda -vively -vivency -vivendi -viver -viverra -viverrid -Viverridae -viverrids -viverriform -Viverrinae -viverrine -vivers -vives -viveur -Vivi -vivi- -Vivia -Vivian -Vivyan -Vyvyan -Viviana -Viviane -vivianite -Vivianna -Vivianne -Vivyanne -Vivica -vivicremation -vivid -vivider -vividest -vividialysis -vividiffusion -vividissection -vividity -vividly -vividness -vividnesses -Vivie -Vivien -Viviene -Vivienne -vivify -vivific -vivifical -vivificant -vivificate -vivificated -vivificating -vivification -vivificative -vivificator -vivified -vivifier -vivifiers -vivifies -vivifying -Viviyan -vivipara -vivipary -viviparism -viviparity -viviparities -viviparous -viviparously -viviparousness -viviperfuse -vivisect -vivisected -vivisectible -vivisecting -vivisection -vivisectional -vivisectionally -vivisectionist -vivisectionists -vivisections -vivisective -vivisector -vivisectorium -vivisects -vivisepulture -Vivl -Vivle -vivo -vivos -vivre -vivres -vixen -vixenish -vixenishly -vixenishness -vixenly -vixenlike -vixens -viz -viz. -Vizagapatam -vizament -vizard -vizarded -vizard-faced -vizard-hid -vizarding -vizardless -vizardlike -vizard-mask -vizardmonger -vizards -vizard-wearing -vizcacha -vizcachas -Vizcaya -Vize -vizier -vizierate -viziercraft -vizierial -viziers -viziership -vizir -vizirate -vizirates -vizircraft -vizirial -vizirs -vizirship -viznomy -vizor -vizored -vizoring -vizorless -vizors -Vizsla -vizslas -Vizza -vizzy -Vizzone -VJ -VL -VLA -Vlaardingen -Vlach -Vlad -Vlada -Vladamar -Vladamir -Vladi -Vladikavkaz -Vladimar -Vladimir -vladislav -Vladivostok -Vlaminck -VLBA -VLBI -vlei -VLF -Vliets -Vlissingen -VLIW -Vlor -Vlos -VLSI -VLT -Vltava -Vlund -VM -V-mail -VMC -VMCF -VMCMS -VMD -VME -vmintegral -VMM -VMOS -VMR -VMRS -VMS -vmsize -VMSP -VMTP -VN -V-necked -Vnern -VNF -VNY -VNL -VNLF -VO -vo. -VOA -voar -vobis -voc -voc. -Voca -vocab -vocability -vocable -vocables -vocably -vocabular -vocabulary -vocabularian -vocabularied -vocabularies -vocabulation -vocabulist -vocal -vocalic -vocalically -vocalics -vocalion -vocalisation -vocalisations -vocalise -vocalised -vocalises -vocalising -vocalism -vocalisms -vocalist -vocalistic -vocalists -vocality -vocalities -vocalizable -vocalization -vocalizations -vocalize -vocalized -vocalizer -vocalizers -vocalizes -vocalizing -vocaller -vocally -vocalness -vocals -vocat -vocate -vocation -vocational -vocationalism -vocationalist -vocationalization -vocationalize -vocationally -vocations -vocation's -vocative -vocatively -vocatives -Voccola -voce -voces -Vochysiaceae -vochysiaceous -vocicultural -vociferance -vociferanced -vociferancing -vociferant -vociferate -vociferated -vociferates -vociferating -vociferation -vociferations -vociferative -vociferator -vociferize -vociferosity -vociferous -vociferously -vociferousness -vocification -vocimotor -vocoder -vocoders -vocoid -vocular -vocule -Vod -VODAS -voder -vodka -vodkas -vodoun -vodouns -vodum -vodums -vodun -Voe -voes -voet -voeten -voetganger -Voetian -voetsak -voetsek -voetstoots -vog -Vogel -Vogele -Vogeley -Vogelweide -vogesite -vogie -voglite -vogt -vogue -voguey -vogues -voguish -voguishness -Vogul -voyage -voyageable -voyaged -voyager -voyagers -voyages -voyageur -voyageurs -voyaging -voyagings -voyance -voice -voiceband -voiced -voicedness -voiceful -voicefulness -voice-leading -voiceless -voicelessly -voicelessness -voicelet -voicelike -voice-over -voiceprint -voiceprints -voicer -voicers -voices -voicing -void -voidable -voidableness -voidance -voidances -voided -voidee -voider -voiders -voiding -voidless -voidly -voidness -voidnesses -voids -voyeur -voyeurism -voyeuristic -voyeuristically -voyeurs -voyeuse -voyeuses -voila -voile -voiles -voilier -Voiotia -VOIR -VOIS -voisinage -Voyt -voiture -voitures -voiturette -voiturier -voiturin -voivod -voivode -voivodeship -Vojvodina -vol -Vola -volable -volacious -volador -volage -volaille -Volans -Volant -volante -Volantis -volantly -volapie -Volapk -Volapuk -Volapuker -Volapukism -Volapukist -volar -volary -volata -volatic -volatile -volatilely -volatileness -volatiles -volatilisable -volatilisation -volatilise -volatilised -volatiliser -volatilising -volatility -volatilities -volatilizable -volatilization -volatilize -volatilized -volatilizer -volatilizes -volatilizing -volation -volational -volatize -vol-au-vent -Volborg -volborthite -Volcae -volcan -Volcanalia -volcanian -volcanic -volcanically -volcanicity -volcanics -volcanism -volcanist -volcanite -volcanity -volcanizate -volcanization -volcanize -volcanized -volcanizing -volcano -volcanoes -volcanoism -volcanology -volcanologic -volcanological -volcanologist -volcanologists -volcanologize -volcanos -volcano's -Volcanus -Volding -vole -voled -volemite -volemitol -volency -volens -volent -volente -volenti -volently -volery -voleries -voles -volet -Voleta -Voletta -Volga -Volga-baltaic -Volgograd -volhynite -volyer -Volin -voling -volipresence -volipresent -volitant -volitate -volitation -volitational -volitiency -volitient -volition -volitional -volitionalist -volitionality -volitionally -volitionary -volitionate -volitionless -volitions -volitive -volitorial -Volk -Volkan -Volkerwanderung -Volksdeutsche -Volksdeutscher -Volkslied -volkslieder -volksraad -Volksschule -Volkswagen -volkswagens -volley -volleyball -volleyballs -volleyball's -volleyed -volleyer -volleyers -volleying -volleyingly -volleys -vollenge -Volnay -Volnak -Volney -Volny -Vologda -Volos -volost -volosts -Volotta -volow -volpane -Volpe -volplane -volplaned -volplanes -volplaning -volplanist -Volpone -vols -vols. -Volscan -Volsci -Volscian -volsella -volsellum -Volstead -Volsteadism -Volsung -Volsungasaga -volt -Volta -volta- -voltaelectric -voltaelectricity -voltaelectrometer -voltaelectrometric -voltage -voltages -voltagraphy -Voltaic -Voltaire -Voltairean -Voltairian -Voltairianize -Voltairish -Voltairism -voltaism -voltaisms -voltaite -voltameter -voltametric -voltammeter -volt-ammeter -volt-ampere -voltaplast -voltatype -volt-coulomb -volte -volteador -volteadores -volte-face -Volterra -voltes -volti -voltigeur -voltinism -voltivity -voltize -Voltmer -voltmeter -voltmeter-milliammeter -voltmeters -volto -volt-ohm-milliammeter -volts -volt-second -Volturno -Volturnus -Voltz -voltzine -voltzite -volubilate -volubility -volubilities -voluble -volubleness -voluble-tongued -volubly -volucrine -volume -volumed -volumen -volumenometer -volumenometry -volume-produce -volume-produced -volumes -volume's -volumescope -volumeter -volumetry -volumetric -volumetrical -volumetrically -volumette -volumina -voluminal -voluming -voluminosity -voluminous -voluminously -voluminousness -volumist -volumometer -volumometry -volumometrical -Volund -voluntary -voluntariate -voluntaries -voluntaryism -voluntaryist -voluntarily -voluntariness -voluntarious -voluntarism -voluntarist -voluntaristic -voluntarity -voluntative -volunteer -volunteered -volunteering -volunteerism -volunteerly -volunteers -volunteership -volunty -Voluntown -voluper -volupt -voluptary -Voluptas -volupte -volupty -voluptuary -voluptuarian -voluptuaries -voluptuate -voluptuosity -voluptuous -voluptuously -voluptuousness -voluptuousnesses -Voluspa -voluta -volutae -volutate -volutation -volute -voluted -volutes -Volutidae -volutiform -volutin -volutins -volution -volutions -volutoid -volva -volvas -volvate -volvell -volvelle -volvent -Volvet -Volvo -Volvocaceae -volvocaceous -volvox -volvoxes -volvuli -volvullus -volvulus -volvuluses -VOM -vombatid -vomer -vomerine -vomerobasilar -vomeronasal -vomeropalatine -vomers -vomica -vomicae -vomicin -vomicine -vomit -vomitable -vomited -vomiter -vomiters -vomity -vomiting -vomitingly -vomition -vomitive -vomitiveness -vomitives -vomito -vomitory -vomitoria -vomitories -vomitorium -vomitos -vomitous -vomits -vomiture -vomiturition -vomitus -vomituses -vomitwort -vomtoria -Von -Vona -vondsira -Vonni -Vonny -Vonnie -Vonore -Vonormy -vonsenite -voodoo -voodooed -voodooing -voodooism -voodooisms -voodooist -voodooistic -voodoos -Vookles -Voorheesville -Voorhis -voorhuis -voorlooper -Voortrekker -VOQ -VOR -voracious -voraciously -voraciousness -voraciousnesses -voracity -voracities -vorage -voraginous -vorago -vorant -Vorarlberg -voraz -Vorfeld -vorhand -Vories -Vorlage -vorlages -vorlooper -vorondreo -Voronezh -Voronoff -Voroshilov -Voroshilovgrad -Voroshilovsk -vorous -vorpal -Vorspeise -Vorspiel -Vorstellung -Vorster -VORT -vortex -vortexes -vortical -vortically -vorticel -Vorticella -vorticellae -vorticellas -vorticellid -Vorticellidae -vorticellum -vortices -vorticial -vorticiform -vorticism -vorticist -vorticity -vorticities -vorticose -vorticosely -vorticular -vorticularly -vortiginous -Vortumnus -Vosges -Vosgian -Voskhod -Voss -Vossburg -Vostok -vota -votable -votal -votally -votaress -votaresses -votary -votaries -votarist -votarists -votation -Votaw -Vote -voteable -vote-bringing -vote-buying -vote-casting -vote-catching -voted -voteen -voteless -voter -voters -votes -Votyak -voting -Votish -votist -votive -votively -votiveness -votograph -votometer -votress -votresses -vouch -vouchable -vouched -vouchee -vouchees -voucher -voucherable -vouchered -voucheress -vouchering -vouchers -vouches -vouching -vouchment -vouchor -vouchsafe -vouchsafed -vouchsafement -vouchsafer -vouchsafes -vouchsafing -vouge -Vougeot -Vought -voulge -Vouli -voussoir -voussoirs -voussoir-shaped -voust -vouster -vousty -vouvary -Vouvray -vouvrays -vow -vow-bound -vow-breaking -vowed -Vowel -vowely -vowelisation -vowelish -vowelism -vowelist -vowelization -vowelize -vowelized -vowelizes -vowelizing -vowelled -vowelless -vowellessness -vowelly -vowellike -vowels -vowel's -vower -vowers -vowess -Vowinckel -vowing -vow-keeping -vowless -vowmaker -vowmaking -vow-pledged -vows -vowson -vox -VP -V-particle -VPF -VPISU -VPN -VR -Vrablik -vraic -vraicker -vraicking -vraisemblance -vrbaite -VRC -Vredenburgh -Vreeland -VRI -vriddhi -Vries -vril -vrille -vrilled -vrilling -Vrita -VRM -vrocht -vroom -vroomed -vrooming -vrooms -vrother -vrouw -vrouws -vrow -vrows -VRS -VS -v's -vs. -VSAM -VSAT -VSB -VSE -V-shaped -V-sign -VSO -VSOP -VSP -VSR -VSS -VSSP -Vsterbottensost -Vstgtaost -VSX -VT -Vt. -VTAM -Vtarj -VTC -Vte -Vtehsta -Vtern -Vtesse -VTI -VTO -VTOC -VTOL -VTP -VTR -VTS -VTVM -VU -vucom -vucoms -Vudimir -vug -vugg -vuggy -vuggier -vuggiest -vuggs -vugh -vughs -vugs -Vuillard -VUIT -Vul -Vul. -Vulcan -Vulcanalia -Vulcanalial -Vulcanalian -Vulcanian -Vulcanic -vulcanicity -vulcanisable -vulcanisation -vulcanise -vulcanised -vulcaniser -vulcanising -vulcanism -vulcanist -vulcanite -vulcanizable -vulcanizate -vulcanization -vulcanizations -vulcanize -vulcanized -vulcanizer -vulcanizers -vulcanizes -vulcanizing -vulcano -vulcanology -vulcanological -vulcanologist -Vulg -Vulg. -vulgar -vulgare -vulgarer -vulgarest -vulgarian -vulgarians -vulgarisation -vulgarise -vulgarised -vulgariser -vulgarish -vulgarising -vulgarism -vulgarisms -vulgarist -vulgarity -vulgarities -vulgarization -vulgarizations -vulgarize -vulgarized -vulgarizer -vulgarizers -vulgarizes -vulgarizing -vulgarly -vulgarlike -vulgarness -vulgars -vulgarwise -Vulgate -vulgates -vulgo -vulgus -vulguses -Vullo -vuln -vulned -vulnerability -vulnerabilities -vulnerable -vulnerableness -vulnerably -vulneral -vulnerary -vulneraries -vulnerate -vulneration -vulnerative -vulnerose -vulnific -vulnifical -vulnose -vulpanser -vulpecide -Vulpecula -Vulpeculae -vulpecular -Vulpeculid -Vulpes -vulpic -vulpicidal -vulpicide -vulpicidism -Vulpinae -vulpine -vulpinic -vulpinism -vulpinite -vulsella -vulsellum -vulsinite -Vultur -vulture -vulture-beaked -vulture-gnawn -vulture-hocked -vulturelike -vulture-rent -vultures -vulture's -vulture-torn -vulture-tortured -vulture-winged -vulturewise -Vulturidae -Vulturinae -vulturine -vulturish -vulturism -vulturn -vulturous -vulva -vulvae -vulval -vulvar -vulvas -vulvate -vulviform -vulvitis -vulvitises -vulvo- -vulvocrural -vulvouterine -vulvovaginal -vulvovaginitis -vum -VUP -VV -vv. -vvll -VVSS -VW -V-weapon -VWS -VXI -W -W. -W.A. -w.b. -W.C. -W.C.T.U. -W.D. -w.f. -W.I. -w.l. -W.O. -w/ -W/B -w/o -WA -wa' -WAAAF -WAAC -Waacs -Waadt -WAAF -Waafs -waag -Waal -Waals -waapa -waar -Waasi -wab -wabayo -Waban -Wabash -Wabasha -Wabasso -Wabbaseka -wabber -wabby -wabble -wabbled -wabbler -wabblers -wabbles -wabbly -wabblier -wabbliest -wabbliness -wabbling -wabblingly -wabe -Wabena -Wabeno -waberan-leaf -wabert-leaf -Wabi -wabron -wabs -wabster -Wabuma -Wabunga -WAC -wacadash -wacago -wacapou -Waccabuc -WAC-Corporal -Wace -Wachaga -Wachapreague -Wachenheimer -wachna -Wachtel -Wachter -Wachuset -Wacissa -Wack -wacke -wacken -wacker -wackes -wacky -wackier -wackiest -wackily -wackiness -wacko -wackos -wacks -Waco -Waconia -Wacs -wad -wadable -Wadai -wadcutter -wadded -Waddell -waddent -Waddenzee -wadder -wadders -Waddy -waddie -waddied -waddies -waddying -wadding -waddings -Waddington -waddywood -Waddle -waddled -waddler -waddlers -waddles -waddlesome -waddly -waddling -waddlingly -Wade -wadeable -waded -Wadell -Wadena -wader -waders -wades -Wadesboro -Wadestown -Wadesville -Wadesworth -wadge -Wadhams -wadi -wady -wadies -wading -wadingly -wadis -Wadley -Wadleigh -wadlike -Wadlinger -wadmaal -wadmaals -wadmaker -wadmaking -wadmal -wadmals -wadmeal -wadmel -wadmels -wadmol -wadmoll -wadmolls -wadmols -wadna -WADS -wadset -wadsets -wadsetted -wadsetter -wadsetting -Wadsworth -wae -Waechter -waefu -waeful -waeg -Waelder -waeness -waenesses -waer -Waers -waes -waesome -waesuck -waesucks -WAF -Wafd -Wafdist -wafer -wafered -waferer -wafery -wafering -waferish -waferlike -wafermaker -wafermaking -wafers -wafer's -wafer-sealed -wafer-thin -wafer-torn -waferwoman -waferwork -waff -waffed -Waffen-SS -waffie -waffies -waffing -waffle -waffled -waffles -waffle's -waffly -wafflike -waffling -waffness -waffs -waflib -WAFS -waft -waftage -waftages -wafted -wafter -wafters -wafty -wafting -wafts -wafture -waftures -WAG -Waganda -wagang -waganging -Wagarville -wagati -wagaun -wagbeard -wage -waged -wagedom -wageless -wagelessness -wageling -wagenboom -Wagener -wage-plug -Wager -wagered -wagerer -wagerers -wagering -wagers -wages -wagesman -wages-man -waget -wagework -wageworker -wageworking -wagga -waggable -waggably -wagged -waggel -wagger -waggery -waggeries -waggers -waggy -waggie -wagging -waggish -waggishly -waggishness -waggle -waggled -waggles -waggly -waggling -wagglingly -waggon -waggonable -waggonage -waggoned -Waggoner -waggoners -waggonette -waggon-headed -waggoning -waggonload -waggonry -waggons -waggonsmith -waggonway -waggonwayman -waggonwright -Waggumbura -wagh -waging -waglike -wagling -Wagner -Wagneresque -Wagnerian -Wagneriana -Wagnerianism -wagnerians -Wagnerism -Wagnerist -Wagnerite -Wagnerize -Wagogo -Wagoma -Wagon -wagonable -wagonage -wagonages -wagoned -wagoneer -Wagoner -wagoners -wagoness -wagonette -wagonettes -wagonful -wagon-headed -wagoning -wagonless -wagon-lit -wagonload -wagonmaker -wagonmaking -wagonman -wagonry -wagon-roofed -wagons -wagon-shaped -wagonsmith -wag-on-the-wall -Wagontown -wagon-vaulted -wagonway -wagonwayman -wagonwork -wagonwright -Wagram -wags -Wagshul -wagsome -Wagstaff -Wagtail -wagtails -wag-tongue -Waguha -wagwag -wagwants -Wagweno -wagwit -wah -Wahabi -Wahabiism -Wahabism -Wahabit -Wahabitism -wahahe -wahconda -wahcondas -Wahehe -Wahhabi -Wahhabiism -Wahhabism -Wahiawa -Wahima -wahine -wahines -Wahkiacus -Wahkon -Wahkuna -Wahl -Wahlenbergia -Wahlstrom -wahlund -Wahoo -wahoos -wahpekute -Wahpeton -wahwah -way -wayaka -Waialua -Wayan -Waianae -wayang -Wayao -waiata -wayback -way-beguiling -wayberry -waybill -way-bill -waybills -waybird -Waibling -waybook -waybread -waybung -way-clearing -Waycross -Waicuri -Waicurian -way-down -waif -wayfare -wayfarer -wayfarers -wayfaring -wayfaringly -wayfarings -wayfaring-tree -waifed -wayfellow -waifing -waifs -waygang -waygate -way-god -waygoer -waygoing -waygoings -waygone -waygoose -Waiguli -way-haunting -wayhouse -Waiyeung -Waiilatpuan -waying -waik -Waikato -Waikiki -waikly -waikness -wail -waylay -waylaid -waylaidlessness -waylayer -waylayers -waylaying -waylays -Wailaki -Waylan -Wayland -wayleave -wailed -Waylen -wailer -wailers -wayless -wailful -wailfully -waily -Waylin -wailing -wailingly -wailment -Waylon -Wailoo -wails -wailsome -Wailuku -waymaker -wayman -Waimanalo -waymark -Waymart -waymate -Waimea -waymen -wayment -Wain -wainable -wainage -Waynant -wainbote -Waine -Wayne -wainer -Waynesboro -Waynesburg -Waynesfield -Waynesville -Waynetown -wainful -wainman -wainmen -Waynoka -wainrope -wains -wainscot -wainscoted -wainscot-faced -wainscoting -wainscot-joined -wainscot-paneled -wainscots -Wainscott -wainscotted -wainscotting -Wainwright -wainwrights -way-off -Wayolle -way-out -Waipahu -waipiro -waypost -wair -wairch -waird -waired -wairepo -wairing -wairs -wairsh -WAIS -ways -way's -waise -wayside -waysider -waysides -waysliding -Waismann -waist -waistband -waistbands -waistcloth -waistcloths -waistcoat -waistcoated -waistcoateer -waistcoathole -waistcoating -waistcoatless -waistcoats -waistcoat's -waist-deep -waisted -waister -waisters -waist-high -waisting -waistings -waistless -waistline -waistlines -waist-pressing -waists -waist's -waist-slip -Wait -wait-a-bit -wait-awhile -Waite -waited -Waiter -waiterage -waiterdom -waiterhood -waitering -waiterlike -waiter-on -waiters -waitership -Waiteville -waitewoman -waythorn -waiting -waitingly -waitings -waitlist -waitress -waitresses -waitressless -waitress's -waits -Waitsburg -Waitsfield -waitsmen -way-up -waivatua -waive -waived -waiver -waiverable -waivery -waivers -waives -waiving -waivod -Waiwai -wayward -waywarden -waywardly -waywardness -way-weary -way-wise -waywiser -way-wiser -waiwode -waywode -waywodeship -wayworn -way-worn -waywort -Wayzata -wayzgoose -wajang -Wajda -Waka -Wakayama -Wakamba -wakan -wakanda -wakandas -wakari -Wakarusa -wakas -Wakashan -Wake -waked -wakeel -Wakeen -Wakeeney -Wakefield -wakeful -wakefully -wakefulness -wakefulnesses -wakeless -Wakeman -wakemen -waken -Wakenda -wakened -wakener -wakeners -wakening -wakenings -wakens -waker -wakerife -wakerifeness -Wakerly -wakerobin -wake-robin -wakers -wakes -waketime -wakeup -wake-up -wakf -Wakhi -Waki -waky -wakif -wakiki -wakikis -waking -wakingly -Wakita -wakiup -wakizashi -wakken -wakon -Wakonda -Wakore -Wakpala -Waksman -Wakulla -Wakwafi -WAL -Wal. -Walach -Walachia -Walachian -walahee -Walapai -Walbrzych -Walburg -Walburga -Walcheren -Walchia -Walcoff -Walcott -Walczak -Wald -Waldack -Waldemar -Walden -Waldenburg -Waldenses -Waldensian -Waldensianism -waldflute -waldglas -waldgrave -waldgravine -Waldheim -Waldheimia -waldhorn -Waldman -waldmeister -Waldner -Waldo -Waldoboro -Waldon -Waldorf -Waldos -Waldport -Waldron -Waldstein -Waldsteinia -Waldwick -wale -waled -Waley -walepiece -Waler -walers -Wales -Waleska -walewort -Walford -Walgreen -Walhall -Walhalla -Walhonding -wali -Waly -walycoat -walies -Waligore -waling -walk -walkable -walkabout -walk-around -walkaway -walkaways -walk-down -Walke -walked -walkene -Walker -walkerite -walker-on -walkers -Walkersville -Walkerton -Walkertown -Walkerville -walkie -walkie-lookie -walkie-talkie -walk-in -walking -walking-out -walkings -walkingstick -walking-stick -walking-sticked -Walkyrie -walkyries -walkist -walky-talky -walky-talkies -Walkling -walkmill -walkmiller -walk-on -walkout -walkouts -walkover -walk-over -walkovers -walkrife -walks -walkside -walksman -walksmen -walk-through -walkup -walk-up -walkups -walkway -walkways -Wall -walla -wallaba -Wallaby -wallabies -wallaby-proof -Wallace -Wallaceton -Wallach -Wallache -Wallachia -Wallachian -Wallack -wallago -wallah -wallahs -Walland -wallaroo -wallaroos -Wallas -Wallasey -Wallawalla -Wallback -wallbird -wallboard -wall-bound -Wallburg -wall-cheeked -wall-climbing -wall-defended -wall-drilling -walled -walled-in -walled-up -Walley -walleye -walleyed -wall-eyed -walleyes -wall-encircled -Wallensis -Wallenstein -Waller -Wallerian -wallet -walletful -wallets -wallet's -wall-fed -wall-fight -wallflower -wallflowers -Wallford -wallful -wall-girt -wall-hanging -wallhick -Walli -Wally -wallydrag -wallydraigle -Wallie -wallies -Walling -Wallinga -Wallingford -walling-in -Wallington -wall-inhabiting -Wallis -wallise -Wallisville -Walliw -Wallkill -wall-knot -wallless -wall-less -wall-like -wall-loving -wallman -walloch -Wallon -Wallonian -Walloon -wallop -walloped -walloper -wallopers -walloping -wallops -wallow -Wallowa -wallowed -wallower -wallowers -wallowing -wallowish -wallowishly -wallowishness -wallows -wallpaper -wallpapered -wallpapering -wallpapers -wallpiece -wall-piece -wall-piercing -wall-plat -Wallraff -Walls -Wallsburg -wall-scaling -Wallsend -wall-shaking -wall-sided -wall-to-wall -Wallula -wallwise -wallwork -wallwort -walnut -walnut-brown -walnut-finished -walnut-framed -walnut-inlaid -walnut-paneled -walnuts -walnut's -Walnutshade -walnut-shell -walnut-stained -walnut-trimmed -Walpapi -Walpole -Walpolean -Walpurga -Walpurgis -Walpurgisnacht -walpurgite -Walras -Walrath -walrus -walruses -walrus's -Walsall -Walsenburg -Walsh -Walshville -Walsingham -walspere -Walston -Walstonburg -Walt -Walter -Walterboro -Walterene -Walters -Waltersburg -Walterville -walth -Walthall -Waltham -Walthamstow -Walther -Walthourville -walty -Waltner -Walton -Waltonian -Waltonville -waltron -waltrot -waltz -waltzed -waltzer -waltzers -waltzes -waltzing -waltzlike -Walworth -WAM -wamara -wambais -wamble -wamble-cropped -wambled -wambles -wambly -wamblier -wambliest -wambliness -wambling -wamblingly -Wambuba -Wambugu -Wambutti -wame -wamefou -wamefous -wamefu -wameful -wamefull -wamefuls -Wamego -wamel -wames -wamfle -wammikin -wammus -wammuses -wamp -Wampanoag -Wampanoags -wampee -wamper-jawed -wampish -wampished -wampishes -wampishing -wample -Wampler -Wampsville -Wampum -wampumpeag -wampums -wampus -wampuses -Wams -Wamsley -Wamsutter -wamus -wamuses -WAN -wan- -Wana -Wanakena -Wanamaker -Wanamingo -Wanapum -Wanaque -Wanatah -Wanblee -Wanchan -wanchancy -wan-cheeked -Wanchese -Wanchuan -wan-colored -wand -Wanda -wand-bearing -wander -wanderable -wandered -Wanderer -wanderers -wandery -wanderyear -wander-year -wandering -Wandering-jew -wanderingly -wanderingness -wanderings -Wanderjahr -Wanderjahre -wanderlust -wanderluster -wanderlustful -wanderlusts -wanderoo -wanderoos -wanders -wandflower -Wandy -Wandie -Wandis -wandle -wandlike -Wando -wandoo -Wandorobo -wandought -wandreth -wands -wand-shaped -wandsman -Wandsworth -wand-waving -Wane -Waneatta -waned -waney -waneless -wanely -waner -wanes -Waneta -Wanette -Wanfried -Wang -wanga -wangala -wangan -wangans -Wanganui -Wangara -wangateur -Wangchuk -wanger -wanghee -wangle -wangled -wangler -wanglers -wangles -wangling -Wangoni -wangrace -wangtooth -wangun -wanguns -wanhap -wanhappy -wanhope -wanhorn -Wanhsien -wany -Wanyakyusa -Wanyamwezi -waniand -Wanyasa -Wanids -Wanyen -wanier -waniest -wanigan -wanigans -waning -wanion -wanions -Wanyoro -wank -wankapin -wankel -wanker -wanky -Wankie -wankle -wankly -wankliness -wanlas -wanle -wanly -wanmol -Wann -wanna -Wannaska -wanned -Wanne-Eickel -wanner -wanness -wannesses -wannest -wanny -wannigan -wannigans -wanning -wannish -Wanonah -wanrest -wanrestful -wanrufe -wanruly -wans -wanshape -wansith -wansome -wansonsy -want -wantage -wantages -Wantagh -wanted -wanted-right-hand -wanter -wanters -wantful -wanthill -wanthrift -wanthriven -wanty -wanting -wantingly -wantingness -wantless -wantlessness -wanton -wanton-cruel -wantoned -wanton-eyed -wantoner -wantoners -wantoning -wantonize -wantonly -wantonlike -wanton-mad -wantonness -wantonnesses -wantons -wanton-sick -wanton-tongued -wanton-winged -wantroke -wantrust -wants -wantwit -want-wit -wanweird -wanwit -wanwordy -wan-worn -wanworth -wanze -WAP -wapacut -Wapakoneta -Wa-palaung -Wapanucka -wapata -Wapato -wapatoo -wapatoos -Wapella -Wapello -wapentake -wapinschaw -Wapisiana -wapiti -wapitis -Wapogoro -Wapokomo -wapp -Wappapello -Wappato -wapped -wappened -wappenschaw -wappenschawing -wappenshaw -wappenshawing -wapper -wapper-eyed -wapperjaw -wapperjawed -wapper-jawed -Wappes -wappet -wapping -Wappinger -Wappo -waps -Wapwallopen -War -warabi -waragi -Warangal -warantee -war-appareled -waratah -warb -Warba -Warbeck -warbird -warbite -war-blasted -warble -warbled -warblelike -warbler -warblerlike -warblers -warbles -warblet -warbly -warbling -warblingly -warbonnet -war-breathing -war-breeding -war-broken -WARC -warch -Warchaw -warcraft -warcrafts -ward -Warda -wardable -wardage -warday -wardapet -wardatour -wardcors -Warde -warded -Wardell -Warden -wardency -war-denouncing -wardenry -wardenries -wardens -wardenship -Wardensville -Warder -warderer -warders -wardership -wardholding -wardian -Wardieu -war-dight -warding -war-disabled -wardite -Wardlaw -Wardle -wardless -wardlike -wardmaid -wardman -wardmen -wardmote -wardour-street -war-dreading -wardress -wardresses -wardrobe -wardrober -wardrobes -wardrobe's -wardroom -wardrooms -wards -Wardsboro -wardship -wardships -wardsmaid -wardsman -wardswoman -Wardtown -Wardville -ward-walk -wardwite -wardwoman -wardwomen -wardword -Ware -wared -wareful -Waregga -Wareham -warehou -warehouse -warehouseage -warehoused -warehouseful -warehouseman -warehousemen -warehouser -warehousers -warehouses -warehousing -Wareing -wareless -warely -waremaker -waremaking -wareman -Warenne -warentment -warer -wareroom -warerooms -wares -Waresboro -wareship -Wareshoals -Waretown -warf -war-fain -war-famed -warfare -warfared -warfarer -warfares -warfarin -warfaring -warfarins -Warfeld -Warfield -Warfold -Warford -Warfordsburg -Warfore -Warfourd -warful -Warga -Wargentin -war-god -war-goddess -wargus -war-hawk -warhead -warheads -Warhol -warhorse -war-horse -warhorses -wary -wariance -wariangle -waried -wary-eyed -warier -wariest -wary-footed -Warila -warily -wary-looking -wariment -warine -wariness -warinesses -Waring -waringin -warish -warison -warisons -warytree -wark -warkamoowee -warked -warking -warkloom -warklume -warks -warl -Warley -warless -warlessly -warlessness -warly -warlike -warlikely -warlikeness -warling -warlock -warlockry -warlocks -warlord -warlordism -warlords -warlow -warluck -warm -warmable -warmaker -warmakers -warmaking -warman -warm-backed -warmblooded -warm-blooded -warm-breathed -warm-clad -warm-colored -warm-complexioned -warm-contested -warmed -warmedly -warmed-over -warmed-up -warmen -warmer -warmers -warmest -warmful -warm-glowing -warm-headed -warmhearted -warm-hearted -warmheartedly -warmheartedness -warmhouse -warming -warming-pan -warming-up -Warminster -warmish -warm-kept -warmly -warm-lying -warmmess -warmness -warmnesses -warmonger -warmongering -warmongers -warmouth -warmouths -warm-reeking -Warms -warm-sheltered -warm-tempered -warmth -warmthless -warmthlessness -warmths -warm-tinted -warmup -warm-up -warmups -warmus -warm-working -warm-wrapped -warn -warnage -Warne -warned -warnel -Warner -Warners -Warnerville -warning -warningly -warningproof -warnings -warnish -warnison -warniss -Warnock -warnoth -warns -warnt -Warori -Warp -warpable -warpage -warpages -warpath -warpaths -warped -warper -warpers -warping -warping-frame -warp-knit -warp-knitted -warplane -warplanes -warple -warplike -warpower -warpowers -warp-proof -warproof -warps -warpwise -warracoori -warragal -warragals -warray -Warram -warrambool -warran -warrand -warrandice -warrant -warrantability -warrantable -warrantableness -warrantably -warranted -warrantedly -warrantedness -warrantee -warranteed -warrantees -warranter -warranty -warranties -warranting -warranty's -warrantise -warrantize -warrantless -warranto -warrantor -warrantors -warrants -warratau -Warrau -warred -warree -Warren -Warrendale -warrener -warreners -warrenlike -Warrenne -Warrens -Warrensburg -Warrensville -Warrenton -Warrenville -warrer -Warri -Warrick -warrigal -warrigals -Warrin -warryn -Warring -Warrington -warrior -warrioress -warriorhood -warriorism -warriorlike -warriors -warrior's -warriorship -warriorwise -warrish -warrok -warrty -wars -war's -Warsaw -warsaws -warse -warsel -warship -warships -warship's -warsle -warsled -warsler -warslers -warsles -warsling -warst -warstle -warstled -warstler -warstlers -warstles -warstling -wart -Warta -Wartburg -warted -wartern -wartflower -warth -Warthe -Warthen -Warthman -warthog -warthogs -warty -wartyback -wartier -wartiest -wartime -war-time -wartimes -wartiness -wartless -wartlet -wartlike -Warton -Wartow -wartproof -Wartrace -warts -wart's -wartweed -wartwort -Warua -Warundi -warve -warwards -war-weary -war-whoop -Warwick -warwickite -Warwickshire -warwolf -war-wolf -warwork -warworker -warworks -warworn -was -wasabi -wasabis -Wasagara -Wasandawi -Wasango -Wasat -Wasatch -Wasco -Wascott -wase -Waseca -Wasegua -wasel -Wash -Wash. -washability -washable -washableness -Washaki -wash-and-wear -washaway -washbasin -washbasins -washbasket -wash-bear -washboard -washboards -washbowl -washbowls -washbrew -Washburn -washcloth -washcloths -wash-colored -washday -washdays -washdish -washdown -washed -washed-out -washed-up -washen -washer -washery -washeries -washeryman -washerymen -washerless -washerman -washermen -washers -washerwife -washerwoman -washerwomen -washes -washhand -wash-hand -washhouse -wash-house -washy -washier -washiest -washin -wash-in -washiness -washing -washings -Washington -Washingtonboro -Washingtonese -Washingtonia -Washingtonian -Washingtoniana -washingtonians -Washingtonville -washing-up -Washita -Washitas -Washko -washland -washleather -wash-leather -washmaid -washman -washmen -wash-mouth -Washo -Washoan -washoff -Washougal -washout -wash-out -washouts -washpot -wash-pot -washproof -washrag -washrags -washroad -washroom -washrooms -washshed -washstand -washstands -Washta -washtail -washtray -washtrough -washtub -washtubs -Washtucna -washup -wash-up -washups -washway -washwoman -washwomen -washwork -Wasir -Waskish -Waskom -wasn -wasnt -wasn't -Wasoga -Wasola -WASP -wasp-barbed -waspen -wasphood -waspy -waspier -waspiest -waspily -waspiness -waspish -waspishly -waspishness -wasplike -waspling -wasp-minded -waspnesting -Wasps -wasp's -wasp-stung -wasp-waisted -wasp-waistedness -Wassaic -wassail -wassailed -wassailer -wassailers -wassailing -wassailous -wassailry -wassails -Wasserman -Wassermann -wassie -Wassily -Wassyngton -Wasson -Wast -Wasta -wastabl -wastable -wastage -wastages -waste -wastebasket -wastebaskets -wastebin -wasteboard -waste-cleaning -wasted -waste-dwelling -wasteful -wastefully -wastefulness -wastefulnesses -wasteyard -wastel -wasteland -wastelands -wastelbread -wasteless -wastely -wastelot -wastelots -wasteman -wastemen -wastement -wasteness -wastepaper -waste-paper -wastepile -wasteproof -waster -wasterful -wasterfully -wasterfulness -wastery -wasterie -wasteries -wastern -wasters -wastes -wastethrift -waste-thrift -wasteway -wasteways -wastewater -wasteweir -wasteword -wasty -wastier -wastiest -wastine -wasting -wastingly -wastingness -wastland -wastme -wastrel -wastrels -wastry -wastrie -wastries -wastrife -wasts -Wasukuma -Waswahili -Wat -Wataga -Watala -Watanabe -watap -watape -watapeh -watapes -wataps -Watauga -watch -watchable -Watch-and-warder -watchband -watchbands -watchbill -watchboat -watchcase -watchcry -watchcries -watchdog -watchdogged -watchdogging -watchdogs -watched -watcheye -watcheyes -watcher -watchers -watches -watchet -watchet-colored -watchfire -watchfree -watchful -watchfully -watchfulness -watchfulnesses -watchglass -watch-glass -watchglassful -watchhouse -watching -watchingly -watchings -watchkeeper -watchless -watchlessness -watchmake -watchmaker -watchmakers -watchmaking -watch-making -watchman -watchmanly -watchmanship -watchmate -watchmen -watchment -watchout -watchouts -watchstrap -watchtower -watchtowers -Watchung -watchwise -watchwoman -watchwomen -watchword -watchwords -watchword's -watchwork -watchworks -water -waterage -waterages -water-bag -waterbailage -water-bailage -water-bailiff -waterbank -water-bath -waterbear -water-bearer -water-bearing -water-beaten -waterbed -water-bed -waterbeds -waterbelly -Waterberg -water-bind -waterblink -waterbloom -waterboard -waterbok -waterborne -water-borne -Waterboro -waterbosh -waterbottle -waterbound -water-bound -waterbrain -water-brain -water-break -water-breathing -water-broken -waterbroo -waterbrose -waterbuck -water-buck -waterbucks -Waterbury -waterbush -water-butt -water-can -water-carriage -water-carrier -watercart -water-cart -watercaster -water-caster -waterchat -watercycle -water-clock -water-closet -watercolor -water-color -water-colored -watercoloring -watercolorist -water-colorist -watercolors -watercolour -water-colour -watercolourist -water-commanding -water-consolidated -water-cool -water-cooled -watercourse -watercourses -watercraft -watercress -water-cress -watercresses -water-cressy -watercup -water-cure -waterdoe -waterdog -water-dog -waterdogs -water-drinker -water-drinking -waterdrop -water-drop -water-dwelling -watered -watered-down -Wateree -water-engine -Waterer -waterers -waterfall -waterfalls -waterfall's -water-fast -waterfinder -water-finished -waterflood -water-flood -Waterflow -water-flowing -Waterford -waterfowl -waterfowler -waterfowls -waterfree -water-free -waterfront -water-front -water-fronter -waterfronts -water-furrow -water-gall -water-galled -water-gas -Watergate -water-gate -water-gild -water-girt -waterglass -water-glass -water-gray -water-growing -water-gruel -water-gruellish -water-hammer -waterhead -waterheap -water-hen -water-hole -waterhorse -water-horse -Waterhouse -watery -water-ice -watery-colored -waterie -watery-eyed -waterier -wateriest -watery-headed -waterily -water-inch -wateriness -watering -wateringly -wateringman -watering-place -watering-pot -waterings -waterish -waterishly -waterishness -water-jacket -water-jacketing -water-jelly -water-jet -water-laid -Waterlander -Waterlandian -water-lane -waterleaf -waterleafs -waterleave -waterleaves -waterless -waterlessly -waterlessness -water-level -waterlike -waterlily -water-lily -waterlilies -waterlilly -waterline -water-line -water-lined -water-living -waterlocked -waterlog -waterlogged -water-logged -waterloggedness -waterlogger -waterlogging -waterlogs -Waterloo -waterloos -water-loving -watermain -Waterman -watermanship -watermark -water-mark -watermarked -watermarking -watermarks -watermaster -water-meadow -water-measure -watermelon -water-melon -watermelons -watermen -water-mill -water-mint -watermonger -water-nymph -water-packed -waterphone -water-pipe -waterpit -waterplane -Waterport -waterpot -water-pot -waterpower -waterpowers -waterproof -waterproofed -waterproofer -waterproofing -waterproofings -waterproofness -waterproofs -water-pumping -water-purpie -waterquake -water-quenched -water-rat -water-repellant -water-repellent -water-resistant -water-ret -water-rolled -water-rot -waterrug -Waters -waterscape -water-seal -water-sealed -water-season -watershake -watershed -watersheds -watershoot -water-shot -watershut -water-sick -waterside -watersider -water-ski -water-skied -waterskier -waterskiing -water-skiing -waterskin -Watersmeet -water-smoke -water-soak -watersoaked -water-soaked -water-soluble -water-souchy -waterspout -water-spout -waterspouts -water-spring -water-standing -waterstead -waterstoup -water-stream -water-struck -water-supply -water-sweet -water-table -watertight -watertightal -watertightness -Watertown -water-vascular -Waterview -Waterville -Watervliet -water-wagtail -waterway -water-way -waterways -waterway's -waterwall -waterward -waterwards -water-washed -water-wave -water-waved -water-waving -waterweed -water-weed -waterwheel -water-wheel -water-white -waterwise -water-witch -waterwoman -waterwood -waterwork -waterworker -waterworks -waterworm -waterworn -waterwort -waterworthy -watfiv -WATFOR -Watford -wath -Watha -Wathen -Wathena -wather -wathstead -Watkin -Watkins -Watkinsville -Watonga -Watrous -WATS -Watseka -Watson -Watsonia -Watsontown -Watsonville -Watson-Watt -WATSUP -Watt -wattage -wattages -wattape -wattapes -Watteau -Wattenberg -Wattenscheid -watter -Watters -Watterson -wattest -watthour -watt-hour -watthours -wattis -wattle -wattlebird -wattleboy -wattled -wattles -wattless -wattlework -wattling -wattman -wattmen -wattmeter -Watton -Watts -Wattsburg -wattsecond -watt-second -Wattsville -Watusi -Watusis -waubeen -wauble -Waubun -wauch -wauchle -waucht -wauchted -wauchting -wauchts -Wauchula -Waucoma -Wauconda -wauf -waufie -Waugh -waughy -waught -waughted -waughting -waughts -wauk -Waukau -wauked -Waukee -Waukegan -wauken -Waukesha -wauking -waukit -Waukomis -Waukon -waukrife -wauks -waul -wauled -wauling -wauls -waumle -Wauna -Waunakee -wauner -Wauneta -wauns -waup -Waupaca -Waupun -waur -Waura -Wauregan -Waurika -Wausa -Wausau -Wausaukee -Wauseon -Wauters -Wautoma -wauve -Wauwatosa -Wauzeka -wavable -wavably -WAVE -waveband -wavebands -wave-cut -waved -wave-encircled -waveform -wave-form -waveforms -waveform's -wavefront -wavefronts -wavefront's -wave-green -waveguide -waveguides -wave-haired -wave-hollowed -wavey -waveys -Waveland -wave-lashed -wave-laved -wavelength -wavelengths -waveless -wavelessly -wavelessness -wavelet -wavelets -wavelike -wave-like -wave-line -Wavell -wavellite -wave-making -wavemark -wavement -wavemeter -wave-moist -wavenumber -waveoff -waveoffs -waveproof -waver -waverable -wavered -waverer -waverers -wavery -wavering -waveringly -waveringness -Waverley -Waverly -waverous -wavers -WAVES -waveshape -waveson -waveward -wavewise -wavy -waviata -wavicle -wavy-coated -wavy-edged -wavier -wavies -waviest -wavy-grained -wavy-haired -wavy-leaved -wavily -waviness -wavinesses -waving -wavingly -Wavira -wavy-toothed -waw -wawa -wawah -Wawaka -Wawarsing -wawaskeesh -Wawina -wawl -wawled -wawling -wawls -Wawro -waws -waw-waw -wax -Waxahachie -waxand -wax-bearing -waxberry -waxberries -waxbill -wax-billed -waxbills -waxbird -waxbush -waxchandler -wax-chandler -waxchandlery -wax-coated -wax-colored -waxcomb -wax-composed -wax-covered -waxed -waxen -wax-ended -waxer -wax-erected -waxers -waxes -wax-extracting -wax-featured -wax-finished -waxflower -wax-forming -Waxhaw -wax-headed -waxhearted -waxy -wax-yellow -waxier -waxiest -waxily -waxiness -waxinesses -waxing -waxingly -waxings -wax-jointed -Waxler -wax-lighted -waxlike -waxmaker -waxmaking -Waxman -waxplant -waxplants -wax-polished -wax-producing -wax-red -wax-rubbed -wax-secreting -wax-shot -wax-stitched -wax-tipped -wax-topped -waxweed -waxweeds -wax-white -waxwing -waxwings -waxwork -waxworker -waxworking -waxworks -waxworm -waxworms -Wazir -Wazirabad -wazirate -Waziristan -wazirship -WB -WBC -WbN -WBS -Wburg -WC -WCC -WCL -WCPC -WCS -WCTU -WD -wd. -WDC -WDM -WDT -we -Wea -weak -weak-ankled -weak-armed -weak-backed -weak-bodied -weakbrained -weak-built -weak-chested -weak-chined -weak-chinned -weak-eyed -weaken -weakened -weakener -weakeners -weakening -weakens -weaker -weakest -weak-fibered -weakfish -weakfishes -weakhanded -weak-headed -weak-headedly -weak-headedness -weakhearted -weakheartedly -weakheartedness -weak-hinged -weaky -weakish -weakishly -weakishness -weak-jawed -weak-kneed -weak-kneedly -weak-kneedness -weak-legged -weakly -weaklier -weakliest -weak-limbed -weakliness -weakling -weaklings -weak-lunged -weak-minded -weak-mindedly -weak-mindedness -weakmouthed -weak-nerved -weakness -weaknesses -weakness's -weak-pated -Weaks -weakside -weak-spirited -weak-spiritedly -weak-spiritedness -weak-stemmed -weak-stomached -weak-toned -weak-voiced -weak-willed -weak-winged -weal -Weald -Wealden -wealdish -wealds -wealdsman -wealdsmen -wealful -we-all -weals -wealsman -wealsome -wealth -wealth-encumbered -wealth-fraught -wealthful -wealthfully -wealth-getting -Wealthy -wealthier -wealthiest -wealth-yielding -wealthily -wealthiness -wealthless -wealthmaker -wealthmaking -wealthmonger -wealths -weam -wean -weanable -weaned -weanedness -weanel -weaner -weaners -weanie -weanyer -weaning -weanly -weanling -weanlings -Weanoc -weans -Weapemeoc -weapon -weaponed -weaponeer -weaponing -weaponless -weaponmaker -weaponmaking -weaponproof -weaponry -weaponries -weapons -weapon's -weaponshaw -weaponshow -weaponshowing -weaponsmith -weaponsmithy -weapschawing -Wear -wearability -wearable -wearables -Weare -weared -wearer -wearers -weary -weariable -weariableness -wearied -weariedly -weariedness -wearier -wearies -weariest -weary-foot -weary-footed -weariful -wearifully -wearifulness -wearying -wearyingly -weary-laden -weariless -wearilessly -wearily -weary-looking -weariness -wearinesses -Wearing -wearingly -wearish -wearishly -wearishness -wearisome -wearisomely -wearisomeness -weary-winged -weary-worn -wear-out -wearproof -wears -weasand -weasands -weasel -weaseled -weasel-faced -weaselfish -weaseling -weaselly -weasellike -weasels -weasel's -weaselship -weaselskin -weaselsnout -weaselwise -weasel-worded -weaser -Weasner -weason -weasons -weather -weatherability -weather-battered -weatherbeaten -weather-beaten -Weatherby -weather-bitt -weather-bitten -weatherboard -weatherboarding -weatherbound -weather-bound -weatherbreak -weather-breeding -weathercast -weathercock -weathercocky -weathercockish -weathercockism -weathercocks -weathercock's -weather-driven -weather-eaten -weathered -weather-eye -weatherer -weather-fagged -weather-fast -weather-fend -weatherfish -weatherfishes -Weatherford -weather-free -weatherglass -weather-glass -weatherglasses -weathergleam -weather-guard -weather-hardened -weatherhead -weatherheaded -weather-headed -weathery -weathering -weatherize -Weatherley -Weatherly -weatherliness -weathermaker -weathermaking -weatherman -weathermen -weathermost -weatherology -weatherologist -weatherproof -weatherproofed -weatherproofing -weatherproofness -weatherproofs -Weathers -weather-scarred -weathersick -weather-slated -weather-stayed -weatherstrip -weather-strip -weatherstripped -weather-stripped -weatherstrippers -weatherstripping -weather-stripping -weatherstrips -weather-tanned -weathertight -weathertightness -weatherward -weather-wasted -weatherwise -weather-wise -weatherworn -weatings -Weatogue -Weaubleau -weavable -weave -weaveable -weaved -weavement -Weaver -weaverbird -weaveress -weavers -weaver's -Weaverville -weaves -weaving -weazand -weazands -weazen -weazened -weazen-faced -weazeny -Web -Webb -web-beam -webbed -Webber -Webberville -webby -webbier -webbiest -webbing -webbings -Webbville -webeye -webelos -Weber -Weberian -webers -webfed -web-fed -webfeet -web-fingered -webfoot -web-foot -webfooted -web-footed -web-footedness -webfooter -web-glazed -Webley-Scott -webless -weblike -webmaker -webmaking -web-perfecting -webs -web's -Webster -Websterian -websterite -websters -Websterville -web-toed -webwheel -web-winged -webwork -web-worked -webworm -webworms -webworn -wecche -wecht -wechts -WECo -Wed -we'd -wedana -wedbed -wedbedrip -wedded -weddedly -weddedness -weddeed -wedder -Wedderburn -wedders -wedding -weddinger -weddings -wedding's -wede -Wedekind -wedel -wedeled -wedeling -wedeln -wedelns -wedels -wedfee -wedge -wedgeable -wedge-bearing -wedgebill -wedge-billed -wedged -wedged-tailed -Wedgefield -wedge-form -wedge-formed -wedgelike -wedger -wedges -wedge-shaped -wedge-tailed -wedgewise -wedgy -Wedgie -wedgier -Wedgies -wedgiest -wedging -Wedgwood -wedlock -wedlocks -Wednesday -Wednesdays -wednesday's -Wedowee -Wedron -weds -wedset -Wedurn -wee -weeble -Weed -Weeda -weedable -weedage -weed-choked -weed-cutting -weeded -weed-entwined -weeder -weedery -weeders -weed-fringed -weedful -weed-grown -weed-hidden -weedhook -weed-hook -weed-hung -weedy -weedy-bearded -weedicide -weedier -weediest -weedy-haired -weedily -weedy-looking -weediness -weeding -weedingtime -weedish -weedkiller -weed-killer -weed-killing -weedless -weedlike -weedling -weedow -weedproof -weed-ridden -weeds -weed-spoiled -Weedsport -Weedville -week -weekday -weekdays -weekend -week-end -weekended -weekender -weekending -weekends -weekend's -Weekley -weekly -weeklies -weekling -weeklong -week-long -weeknight -weeknights -week-old -Weeks -Weeksbury -weekwam -week-work -weel -weelfard -weelfaured -Weelkes -weem -weemen -Weems -ween -weendigo -weened -weeness -weeny -weeny-bopper -weenie -weenier -weenies -weeniest -weening -weenong -weens -weensy -weensier -weensiest -weent -weenty -weep -weepable -weeped -weeper -weepered -weepers -weepful -weepy -weepie -weepier -weepies -weepiest -weepiness -weeping -weepingly -weeping-ripe -weepings -Weepingwater -weeply -weeps -weer -weerish -wees -Weesatche -weese-allan -weesh -weeshee -weeshy -weest -weet -weetbird -weeted -weety -weeting -weetless -weets -weet-weet -weever -weevers -weevil -weeviled -weevily -weevilled -weevilly -weevillike -weevilproof -weevils -weewaw -weewee -wee-wee -weeweed -weeweeing -weewees -weewow -weeze -weezle -wef -weft -weftage -wefted -wefty -weft-knit -weft-knitted -wefts -weftwise -weftwize -Wega -wegenerian -wegotism -we-group -wehee -Wehner -Wehr -Wehrle -wehrlite -Wehrmacht -Wei -Wey -Weyanoke -Weyauwega -Weibel -weibyeite -Weichsel -weichselwood -Weidar -Weide -Weyden -Weider -Weidman -Weidner -Weyerhaeuser -Weyerhauser -Weyermann -Weierstrass -Weierstrassian -Weig -Weygand -Weigel -Weigela -weigelas -weigelia -weigelias -weigelite -weigh -weighable -weighage -weighbar -weighbauk -weighbeam -weighbridge -weigh-bridge -weighbridgeman -weighed -weigher -weighers -weighership -weighhouse -weighin -weigh-in -weighing -weighing-in -weighing-out -weighings -weighlock -weighman -weighmaster -weighmen -weighment -weigh-out -weighs -weigh-scale -weighshaft -Weight -weight-bearing -weight-carrying -weightchaser -weighted -weightedly -weightedness -weighter -weighters -weighty -weightier -weightiest -weightily -weightiness -weighting -weightings -weightless -weightlessly -weightlessness -weightlessnesses -weightlifter -weightlifting -weight-lifting -weight-measuring -Weightometer -weight-raising -weight-resisting -weights -weight-watch -weight-watching -weightwith -Weigle -Weihai -Weihaiwei -Weihs -Weikert -Weil -Weyl -weilang -Weiler -Weylin -Weill -Weiman -Weimar -Weimaraner -Weymouth -Wein -Weinberg -Weinberger -weinbergerite -Weinek -Weiner -weiners -Weinert -Weingarten -Weingartner -Weinhardt -Weinman -Weinmannia -Weinreb -Weinrich -weinschenkite -Weinshienk -Weinstein -Weinstock -Weintrob -Weippe -Weir -weirangle -weird -weirder -weirdest -weird-fixed -weirdful -weirdy -weirdie -weirdies -weirdish -weirdless -weirdlessness -weirdly -weirdlike -weirdliness -weird-looking -weirdness -weirdnesses -weirdo -weirdoes -weirdos -Weirds -weird-set -weirdsome -weirdward -weirdwoman -weirdwomen -Weirick -weiring -weirless -weirs -Weirsdale -Weirton -Weirwood -weys -weisbachite -Weisbart -Weisberg -Weisbrodt -Weisburgh -weiselbergite -weisenheimer -Weiser -Weisler -weism -Weisman -Weismann -Weismannian -Weismannism -Weiss -Weissberg -Weissert -Weisshorn -weissite -Weissman -Weissmann -Weissnichtwo -Weitman -Weitspekan -Weitzman -Weywadt -Weixel -Weizmann -wejack -weka -wekas -wekau -wekeen -weki -Weksler -Welaka -Weland -Welby -Welbie -Welch -welched -Welcher -welchers -Welches -welching -Welchman -Welchsel -Welcy -Welcome -Welcomed -welcomeless -welcomely -welcomeness -welcomer -welcomers -welcomes -Welcoming -welcomingly -Weld -Welda -weldability -weldable -welded -welder -welders -welding -weldless -weldment -weldments -Weldon -Weldona -weldor -weldors -welds -Weldwood -Weleetka -Welf -welfare -welfares -welfaring -welfarism -welfarist -welfaristic -Welfic -Welford -weli -welk -Welker -welkin -welkin-high -welkinlike -welkins -Welkom -WELL -we'll -well-able -well-abolished -well-abounding -well-absorbed -well-abused -well-accented -well-accentuated -well-accepted -well-accommodated -well-accompanied -well-accomplished -well-accorded -well-according -well-accoutered -well-accredited -well-accumulated -well-accustomed -well-achieved -well-acknowledged -wellacquainted -well-acquainted -well-acquired -well-acted -welladay -welladays -well-adapted -well-addicted -well-addressed -well-adjusted -well-administered -well-admitted -well-adopted -well-adorned -well-advanced -well-adventured -well-advertised -well-advertized -welladvised -well-advised -well-advocated -wellaffected -well-affected -well-affectedness -well-affectioned -well-affirmed -well-afforded -well-aged -well-agreed -well-agreeing -well-aimed -well-aired -well-alleged -well-allied -well-allotted -well-allowed -well-alphabetized -well-altered -well-amended -well-amused -well-analysed -well-analyzed -well-ancestored -well-anchored -well-anear -well-ankled -well-annealed -well-annotated -well-announced -well-anointed -well-answered -well-anticipated -well-appareled -well-apparelled -well-appearing -well-applauded -well-applied -well-appointed -well-appointedly -well-appointedness -well-appreciated -well-approached -well-appropriated -well-approved -well-arbitrated -well-arched -well-argued -well-armed -well-armored -well-armoured -well-aroused -well-arrayed -well-arranged -well-articulated -well-ascertained -well-assembled -well-asserted -well-assessed -well-assigned -well-assimilated -well-assisted -well-associated -well-assorted -well-assumed -well-assured -wellat -well-attached -well-attained -well-attempered -well-attempted -well-attended -well-attending -well-attested -well-attired -well-attributed -well-audited -well-authenticated -well-authorized -well-averaged -well-avoided -wellaway -wellaways -well-awakened -well-awarded -well-aware -well-backed -well-baked -well-balanced -well-baled -well-bandaged -well-bang -well-banked -well-barbered -well-bargained -well-based -well-bathed -well-batted -well-bearing -well-beaten -well-becoming -well-bedded -well-befitting -well-begotten -well-begun -well-behated -well-behaved -wellbeing -well-being -well-beknown -well-believed -well-believing -well-beloved -well-beneficed -well-bent -well-beseemingly -well-bespoken -well-bested -well-bestowed -well-blacked -well-blended -well-blent -well-blessed -well-blooded -well-blown -well-bodied -well-boding -well-boiled -well-bonded -well-boned -well-booted -well-bored -well-boring -Wellborn -Well-born -well-borne -well-bottled -well-bottomed -well-bought -well-bound -well-bowled -well-boxed -well-braced -well-braided -well-branched -well-branded -well-brawned -well-breasted -well-breathed -wellbred -well-bred -well-bredness -well-brewed -well-bricked -well-bridged -well-broken -well-brooked -well-brought-up -well-browed -well-browned -well-brushed -well-built -well-buried -well-burned -well-burnished -well-burnt -well-bushed -well-busied -well-buttoned -well-caked -well-calculated -well-calculating -well-calked -well-called -well-calved -well-camouflaged -well-caned -well-canned -well-canvassed -well-cared-for -well-carpeted -well-carved -well-cased -well-cast -well-caught -well-cautioned -well-celebrated -well-cemented -well-censured -well-centered -well-centred -well-certified -well-chained -well-changed -well-chaperoned -well-characterized -well-charged -well-charted -well-chauffeured -well-checked -well-cheered -well-cherished -well-chested -well-chewed -well-chilled -well-choosing -well-chopped -wellchosen -well-chosen -well-churned -well-circularized -well-circulated -well-circumstanced -well-civilized -well-clad -well-classed -well-classified -well-cleansed -well-cleared -well-climaxed -well-cloaked -well-cloistered -well-closed -well-closing -well-clothed -well-coached -well-coated -well-coined -well-collected -well-colonized -well-colored -well-coloured -well-combed -well-combined -well-commanded -well-commenced -well-commended -well-committed -well-communicated -well-compacted -well-compared -well-compassed -well-compensated -well-compiled -well-completed -well-complexioned -well-composed -well-comprehended -well-concealed -well-conceded -well-conceived -well-concentrated -well-concerted -well-concluded -well-concocted -well-concorded -well-condensed -well-conditioned -well-conducted -well-conferred -well-confessed -well-confided -well-confirmed -wellconnected -well-connected -well-conned -well-consenting -well-conserved -well-considered -well-consoled -well-consorted -well-constituted -well-constricted -well-constructed -well-construed -well-contained -wellcontent -well-content -well-contented -well-contested -well-continued -well-contracted -well-contrasted -well-contrived -well-controlled -well-conveyed -well-convinced -well-cooked -well-cooled -well-coordinated -well-copied -well-corked -well-corrected -well-corseted -well-costumed -well-couched -well-counseled -well-counselled -well-counted -well-counterfeited -well-coupled -well-courted -well-covered -well-cowed -well-crammed -well-crated -well-credited -well-cress -well-crested -well-criticized -well-crocheted -well-cropped -well-crossed -well-crushed -well-cultivated -well-cultured -wellcurb -well-curbed -wellcurbs -well-cured -well-curled -well-curried -well-curved -well-cushioned -well-cut -well-cutting -well-damped -well-danced -well-darkened -well-darned -well-dealing -well-dealt -well-debated -well-deceived -well-decided -well-deck -welldecked -well-decked -well-declaimed -well-decorated -well-decreed -well-deeded -well-deemed -well-defended -well-deferred -well-defined -well-delayed -well-deliberated -well-delineated -well-delivered -well-demeaned -well-demonstrated -well-denied -well-depicted -well-derived -well-descended -well-described -well-deserved -well-deservedly -well-deserver -well-deserving -well-deservingness -well-designated -well-designed -well-designing -well-desired -well-destroyed -well-developed -well-devised -well-diagnosed -well-diffused -well-digested -well-dying -well-directed -well-disbursed -well-disciplined -well-discounted -well-discussed -well-disguised -well-dish -well-dispersed -well-displayed -well-disposed -well-disposedly -well-disposedness -well-dispositioned -well-disputed -well-dissected -well-dissembled -well-dissipated -well-distanced -well-distinguished -well-distributed -well-diversified -well-divided -well-divined -well-documented -welldoer -well-doer -welldoers -welldoing -well-doing -well-domesticated -well-dominated -welldone -well-done -well-dosed -well-drafted -well-drain -well-drained -well-dramatized -well-drawn -well-dressed -well-dried -well-drilled -well-driven -well-drugged -well-dunged -well-dusted -well-eared -well-earned -well-earthed -well-eased -well-economized -welled -well-edited -well-educated -well-effected -well-elaborated -well-elevated -well-eliminated -well-embodied -well-emphasized -well-employed -well-enacted -well-enchanting -well-encountered -well-encouraged -well-ended -well-endorsed -well-endowed -well-enforced -well-engineered -well-engraved -well-enlightened -well-entered -well-entertained -well-entitled -well-enumerated -well-enveloped -well-equipped -Weller -well-erected -welleresque -Wellerism -Welles -well-escorted -Wellesley -well-essayed -well-established -well-esteemed -well-estimated -Wellesz -well-evidence -well-evidenced -well-examined -well-executed -well-exemplified -well-exercised -well-exerted -well-exhibited -well-expended -well-experienced -well-explained -well-explicated -well-exploded -well-exposed -well-expressed -well-fabricated -well-faced -well-faded -well-famed -well-fancied -well-farmed -well-fashioned -well-fastened -well-fatted -well-favored -well-favoredly -well-favoredness -well-favoured -well-favouredness -well-feasted -well-feathered -well-featured -well-fed -well-feed -well-feigned -well-felt -well-fenced -well-fended -well-fermented -well-fielded -well-filed -well-filled -well-filmed -well-filtered -well-financed -well-fined -well-finished -well-fitted -well-fitting -well-fixed -well-flanked -well-flattered -well-flavored -well-flavoured -well-fledged -well-fleeced -well-fleshed -well-flooded -well-floored -well-floured -well-flowered -well-flowering -well-focused -well-focussed -well-folded -well-followed -well-fooled -Wellford -well-foreseen -well-forested -well-forewarned -well-forewarning -well-forged -well-forgotten -well-formed -well-formulated -well-fortified -well-fought -wellfound -well-found -wellfounded -well-founded -well-foundedly -well-foundedness -well-framed -well-fraught -well-freckled -well-freighted -well-frequented -well-fried -well-friended -well-frightened -well-fruited -well-fueled -well-fuelled -well-functioning -well-furnished -well-furnishedness -well-furred -well-gained -well-gaited -well-gardened -well-garmented -well-garnished -well-gathered -well-geared -well-generaled -well-gifted -well-girt -well-glossed -well-gloved -well-glued -well-going -well-gotten -well-governed -well-gowned -well-graced -well-graded -well-grained -well-grassed -well-gratified -well-graveled -well-gravelled -well-graven -well-greased -well-greaved -well-greeted -well-groomed -well-groomedness -well-grounded -well-grouped -well-grown -well-guaranteed -well-guarded -well-guessed -well-guided -well-guiding -well-guyed -well-hained -well-haired -well-hallowed -well-hammered -well-handicapped -well-handled -well-hardened -well-harnessed -well-hatched -well-havened -well-hazarded -wellhead -well-head -well-headed -wellheads -well-healed -well-heard -well-hearted -well-heated -well-hedged -well-heeled -well-helped -well-hemmed -well-hewn -well-hidden -well-hinged -well-hit -well-hoarded -wellhole -well-hole -well-holed -wellholes -well-hoofed -well-hooped -well-horned -well-horsed -wellhouse -well-housed -wellhouses -well-hued -well-humbled -well-humbugged -well-humored -well-humoured -well-hung -well-husbanded -welly -wellyard -well-iced -well-identified -wellie -wellies -well-ignored -well-illustrated -well-imagined -well-imitated -well-immersed -well-implied -well-imposed -well-impressed -well-improved -well-improvised -well-inaugurated -well-inclined -well-included -well-incurred -well-indexed -well-indicated -well-inferred -well-informed -Welling -Wellingborough -Wellington -Wellingtonia -wellingtonian -Wellingtons -well-inhabited -well-initiated -well-inscribed -well-inspected -well-installed -well-instanced -well-instituted -well-instructed -well-insulated -well-insured -well-integrated -well-intended -well-intentioned -well-interested -well-interpreted -well-interviewed -well-introduced -well-invented -well-invested -well-investigated -well-yoked -well-ironed -well-irrigated -wellish -well-itemized -well-joined -well-jointed -well-judged -well-judging -well-judgingly -well-justified -well-kempt -well-kenned -well-kent -well-kept -well-kindled -well-knit -well-knitted -well-knotted -well-knowing -well-knowledged -wellknown -well-known -well-labeled -well-labored -well-laboring -well-laboured -well-laced -well-laden -well-laid -well-languaged -well-larded -well-launched -well-laundered -well-leaded -well-learned -well-leased -well-leaved -well-led -well-left -well-lent -well-less -well-lettered -well-leveled -well-levelled -well-levied -well-lighted -well-like -well-liked -well-liking -well-limbed -well-limited -well-limned -well-lined -well-linked -well-lit -well-liveried -well-living -well-loaded -well-located -well-locked -well-lodged -well-lofted -well-looked -well-looking -well-lost -well-loved -well-lunged -well-made -well-maintained -wellmaker -wellmaking -Wellman -well-managed -well-manned -well-mannered -well-manufactured -well-manured -well-mapped -well-marked -well-marketed -well-married -well-marshalled -well-masked -well-mastered -well-matched -well-mated -well-matured -well-meaner -well-meaning -well-meaningly -well-meaningness -well-meant -well-measured -well-membered -wellmen -well-mended -well-merited -well-met -well-metalled -well-methodized -well-mettled -well-milked -well-mingled -well-minted -well-mixed -well-modeled -well-modified -well-modulated -well-moduled -well-moneyed -well-moralized -wellmost -well-motivated -well-motived -well-moulded -well-mounted -well-mouthed -well-named -well-narrated -well-natured -well-naturedness -well-navigated -wellnear -well-near -well-necked -well-needed -well-negotiated -well-neighbored -wellness -wellnesses -well-nicknamed -wellnigh -well-nigh -well-nosed -well-noted -well-nourished -well-nursed -well-nurtured -well-oared -well-obeyed -well-observed -well-occupied -well-off -well-officered -well-oiled -well-omened -well-omitted -well-operated -well-opinioned -well-ordered -well-organised -well-organized -well-oriented -well-ornamented -well-ossified -well-outlined -well-overseen -well-packed -well-paid -well-paying -well-painted -well-paired -well-paneled -well-paragraphed -well-parceled -well-parked -well-past -well-patched -well-patrolled -well-patronised -well-patronized -well-paved -well-penned -well-pensioned -well-peopled -well-perceived -well-perfected -well-performed -well-persuaded -well-philosophized -well-photographed -well-picked -well-pictured -well-piloted -Wellpinit -well-pitched -well-placed -well-played -well-planned -well-planted -well-plead -well-pleased -well-pleasedly -well-pleasedness -well-pleasing -well-pleasingness -well-plenished -well-plotted -well-plowed -well-plucked -well-plumaged -well-plumed -wellpoint -well-pointed -well-policed -well-policied -well-polished -well-polled -well-pondered -well-posed -well-positioned -well-possessed -well-posted -well-postponed -well-practiced -well-predicted -well-prepared -well-preserved -well-pressed -well-pretended -well-priced -well-primed -well-principled -well-printed -well-prized -well-professed -well-prolonged -well-pronounced -well-prophesied -well-proportioned -well-prosecuted -well-protected -well-proved -well-proven -well-provendered -well-provided -well-published -well-punished -well-pursed -well-pushed -well-put -well-puzzled -well-qualified -well-qualitied -well-quartered -wellqueme -well-quizzed -well-raised -well-ranged -well-rated -wellread -well-read -well-readied -well-reared -well-reasoned -well-received -well-recited -well-reckoned -well-recognised -well-recognized -well-recommended -well-recorded -well-recovered -well-refereed -well-referred -well-refined -well-reflected -well-reformed -well-refreshed -well-refreshing -well-regarded -well-regulated -well-rehearsed -well-relished -well-relishing -well-remarked -well-remembered -well-rendered -well-rented -well-repaid -well-repaired -well-replaced -well-replenished -well-reported -well-represented -well-reprinted -well-reputed -well-requited -well-resolved -well-resounding -well-respected -well-rested -well-restored -well-revenged -well-reviewed -well-revised -well-rewarded -well-rhymed -well-ribbed -well-ridden -well-rigged -wellring -well-ringed -well-ripened -well-risen -well-risked -well-roasted -well-rode -well-rolled -well-roofed -well-rooted -well-roped -well-rotted -well-rounded -well-routed -well-rowed -well-rubbed -well-ruled -well-ruling -well-run -well-running -Wells -well-sacrificed -well-saffroned -well-saying -well-sailing -well-salted -well-sanctioned -well-sanded -well-satisfied -well-saved -well-savoring -Wellsboro -Wellsburg -well-scared -well-scattered -well-scented -well-scheduled -well-schemed -well-schooled -well-scolded -well-scorched -well-scored -well-screened -well-scrubbed -well-sealed -well-searched -well-seasoned -well-seated -well-secluded -well-secured -well-seeded -well-seeing -well-seeming -wellseen -well-seen -well-selected -well-selling -well-sensed -well-separated -well-served -wellset -well-set -well-settled -well-set-up -well-sewn -well-shaded -well-shading -well-shafted -well-shaken -well-shaped -well-shapen -well-sharpened -well-shaved -well-shaven -well-sheltered -well-shod -well-shot -well-showered -well-shown -Wellsian -wellside -well-sifted -well-sighted -well-simulated -well-sinewed -well-sinking -well-systematised -well-systematized -wellsite -wellsites -well-situated -well-sized -well-sketched -well-skilled -well-skinned -well-smelling -well-smoked -well-soaked -well-sold -well-soled -well-solved -well-sorted -well-sounding -well-spaced -well-speaking -well-sped -well-spent -well-spiced -well-splitting -wellspoken -well-spoken -well-sprayed -well-spread -wellspring -well-spring -wellsprings -well-spun -well-spurred -well-squared -well-stabilized -well-stacked -well-staffed -well-staged -well-stained -well-stamped -well-starred -well-stated -well-stationed -wellstead -well-steered -well-styled -well-stirred -well-stitched -well-stocked -Wellston -well-stopped -well-stored -well-straightened -well-strained -wellstrand -well-strapped -well-stressed -well-stretched -well-striven -well-stroked -well-strung -well-studied -well-stuffed -well-subscribed -well-succeeding -well-sufficing -well-sugared -well-suggested -well-suited -well-summarised -well-summarized -well-sunburned -well-sung -well-superintended -well-supervised -well-supplemented -well-supplied -well-supported -well-suppressed -well-sustained -Wellsville -well-swelled -well-swollen -well-tailored -well-taken -well-tamed -well-tanned -well-tasted -well-taught -well-taxed -well-tempered -well-tenanted -well-tended -well-terraced -well-tested -well-thewed -well-thought -well-thought-of -well-thought-out -well-thrashed -well-thriven -well-thrown -well-thumbed -well-tied -well-tilled -well-timbered -well-timed -well-tinted -well-typed -well-toasted -well-to-do -well-told -Wellton -well-toned -well-tongued -well-toothed -well-tossed -well-traced -well-traded -well-trained -well-translated -well-trapped -well-traveled -well-travelled -well-treated -well-tricked -well-tried -well-trimmed -well-trod -well-trodden -well-trunked -well-trussed -well-trusted -well-tuned -well-turned -well-turned-out -well-tutored -well-twisted -well-umpired -well-understood -well-uniformed -well-united -well-upholstered -well-urged -well-used -well-utilized -well-valeted -well-varied -well-varnished -well-veiled -well-ventilated -well-ventured -well-verified -well-versed -well-visualised -well-visualized -well-voiced -well-vouched -well-walled -well-wared -well-warmed -well-warned -well-warranted -well-washed -well-watched -well-watered -well-weaponed -well-wearing -well-weaved -well-weaving -well-wedded -well-weighed -well-weighing -well-whipped -well-wigged -well-willed -well-willer -well-willing -well-winded -well-windowed -well-winged -well-winnowed -well-wired -well-wish -well-wisher -well-wishing -well-witnessed -well-witted -well-won -well-wooded -well-wooing -well-wooled -well-worded -well-worked -well-worked-out -well-worn -well-woven -well-wreathed -well-written -well-wrought -Wels -welsbach -Welsh -Welsh-begotten -Welsh-born -welshed -Welsh-english -welsher -Welshery -welshers -welshes -Welsh-fashion -Welshy -welshing -Welshism -Welshland -Welshlike -Welsh-looking -Welsh-made -Welshman -Welshmen -Welshness -Welshry -Welsh-rooted -Welsh-speaking -Welshwoman -Welshwomen -Welsh-wrought -welsium -welsom -welt -Weltanschauung -weltanschauungen -Weltansicht -welted -welter -weltered -weltering -welters -welterweight -welterweights -Welty -welting -weltings -Welton -Weltpolitik -welts -Weltschmerz -Welwitschia -wem -Wembley -Wemyss -wemless -wemmy -wemodness -wen -Wenatchee -Wenceslaus -wench -wenched -wenchel -wencher -wenchers -wenches -wenching -wenchless -wenchlike -wenchman -wenchmen -Wenchow -Wenchowese -wench's -Wend -Wenda -Wendalyn -Wendall -Wende -wended -Wendel -Wendelin -Wendelina -Wendeline -Wendell -Wenden -Wendi -Wendy -Wendic -Wendie -Wendye -wendigo -wendigos -Wendin -wending -Wendish -Wendolyn -Wendover -wends -Wendt -wene -weneth -Wenger -Wengert -W-engine -Wenham -wen-li -wenliche -Wenlock -Wenlockian -Wenn -wennebergite -Wennerholn -wenny -wennier -wenniest -wennish -Wenoa -Wenona -Wenonah -Wenrohronon -wens -Wensleydale -went -wentle -wentletrap -Wentworth -Wentzville -Wenz -Wenzel -Weogufka -Weott -wepman -wepmankin -wept -wer -Wera -Werbel -Werby -Werchowinci -were -were- -we're -were-animal -were-animals -wereass -were-ass -werebear -wereboar -werecalf -werecat -werecrocodile -werefolk -werefox -weregild -weregilds -werehare -werehyena -werejaguar -wereleopard -werelion -weren -werent -weren't -weretiger -werewall -werewolf -werewolfish -werewolfism -werewolves -werf -Werfel -wergeld -wergelds -wergelt -wergelts -wergil -wergild -wergilds -weri -wering -wermethe -wernard -Werner -Wernerian -Wernerism -wernerite -Wernersville -Wernher -Wernick -Wernsman -weroole -werowance -Werra -wersh -Wershba -werslete -werste -wert -Wertheimer -Werther -Wertherian -Wertherism -Wertz -wervel -werwolf -werwolves -Wes -Wesa -Wesco -Wescott -wese -Weser -Wesermde -we-ship -Weskan -Wesker -weskit -weskits -Wesla -Weslaco -Wesle -Weslee -Wesley -Wesleyan -Wesleyanism -wesleyans -Wesleyism -Wesleyville -wessand -wessands -wessel -wesselton -Wessex -Wessexman -Wessington -Wessling -Wesson -West -westabout -West-about -westaway -Westberg -Westby -west-by -Westborough -westbound -Westbrook -Westbrooke -west-central -Westchester -weste -West-ender -west-endy -West-endish -West-endism -Wester -westered -Westerfield -westering -Westerly -Westerlies -westerliness -westerling -Westermarck -westermost -Western -Westerner -westerners -westernisation -westernise -westernised -westernising -westernism -westernization -westernize -westernized -westernizes -westernizing -westernly -westernmost -Westernport -westerns -westers -Westerville -westerwards -west-faced -west-facing -Westfahl -Westfalen -westfalite -Westfall -Westfield -west-going -westham -Westhead -westy -westing -Westinghouse -westings -westlan -Westland -Westlander -westlandways -westlaw -Westley -Westleigh -westlin -westling -westlings -westlins -Westlund -Westm -westme -Westmeath -westmeless -Westminster -Westmont -Westmoreland -Westmorland -westmost -Westney -westness -west-northwest -west-north-west -west-northwesterly -west-northwestward -westnorthwestwardly -Weston -Weston-super-Mare -Westphal -Westphalia -Westphalian -Westport -Westpreussen -Westralian -Westralianism -wests -west-southwest -west-south-west -west-southwesterly -west-southwestward -west-southwestwardly -west-turning -Westville -Westwall -westward -westwardly -westward-looking -westwardmost -westwards -Westwego -west-winded -west-windy -Westwood -westwork -Westworth -wet -weta -wet-air -wetback -wetbacks -wetbird -wet-blanket -wet-blanketing -wet-bulb -wet-cell -wetched -wet-cheeked -wetchet -wet-clean -wet-eyed -wet-footed -wether -wetherhog -wethers -Wethersfield -wetherteg -wetland -wetlands -wetly -wet-lipped -wet-my-lip -Wetmore -wetness -wetnesses -wet-nurse -wet-nursed -wet-nursing -wet-pipe -wet-plate -wetproof -wets -wet-salt -wet-season -wet-shod -wetsuit -wettability -wettable -wetted -wetter -Wetterhorn -wetter-off -wetters -wettest -wetting -wettings -wettish -wettishness -Wetumka -Wetumpka -wet-worked -Wetzel -Wetzell -WEU -we-uns -weve -we've -Wever -Wevertown -wevet -Wewahitchka -Wewela -Wewenoc -Wewoka -Wexford -Wexler -Wezen -Wezn -WF -WFPC -WFPCII -WFTU -WG -WGS -WH -wha -whabby -whack -whacked -whacker -whackers -whacky -whackier -whackiest -whacking -whacko -whackos -whacks -whaddie -whafabout -Whalan -Whale -whaleback -whale-backed -whalebacker -whalebird -whaleboat -whaleboats -whalebone -whaleboned -whalebones -whale-built -whaled -whaledom -whale-gig -whalehead -whale-headed -whale-hunting -Whaleysville -whalelike -whaleman -whalemen -whale-mouthed -Whalen -whaler -whalery -whaleries -whaleroad -whalers -Whales -whaleship -whalesucker -whale-tailed -whaly -whaling -whalings -whalish -Whall -whally -whallock -Whallon -Whallonsburg -whalm -whalp -wham -whamble -whame -whammed -whammy -whammies -whamming -whammle -whammo -whamo -whamp -whampee -whample -whams -whan -whand -Whang -whangable -whangam -Whangarei -whangdoodle -whanged -whangee -whangees -whangers -whanghee -whanging -whangs -whank -whap -whapped -whapper -whappers -whappet -whapping -whaps -whapuka -whapukee -whapuku -whar -whare -whareer -whare-kura -whare-puni -whare-wananga -wharf -wharfage -wharfages -wharfe -wharfed -wharfhead -wharfholder -wharfie -wharfing -wharfinger -wharfingers -wharfland -wharfless -wharfman -wharfmaster -wharfmen -wharfrae -wharfs -wharfside -wharl -Wharncliffe -wharp -wharry -wharrow -whart -Wharton -whartonian -wharve -wharves -whase -whasle -what -whata -whatabouts -whatchy -whatd -what'd -what-d'ye-call-'em -what-d'ye-call-it -what-d'you-call-it -what-do-you-call-it -whate'er -what-eer -Whately -whatever -what-for -what-you-call-it -what-you-may-call-'em -what-you-may--call-it -what-is-it -whatkin -Whatley -whatlike -what-like -what'll -whatman -whatna -whatness -whatnot -whatnots -whatre -what're -whatreck -whats -what's -whats-her-name -what's-her-name -what's-his-face -whats-his-name -what's-his-name -whatsis -whats-it -whats-its-name -what's-its-name -whatso -whatsoeer -whatsoe'er -whatsoever -whatsomever -whatten -what've -whatzit -whau -whauk -whaup -whaups -whaur -whauve -WHBL -wheaf-head -wheal -whealed -whealy -whealing -wheals -whealworm -wheam -wheat -wheatbird -wheat-blossoming -wheat-colored -Wheatcroft -wheatear -wheateared -wheatears -wheaten -wheatens -wheat-fed -Wheatfield -wheatflakes -wheatgrass -wheatgrower -wheat-growing -wheat-hid -wheaty -wheaties -Wheatland -Wheatley -wheatless -wheatlike -wheatmeal -Wheaton -wheat-producing -wheat-raising -wheat-rich -wheats -wheatstalk -Wheatstone -wheat-straw -wheatworm -whedder -whee -wheedle -wheedled -wheedler -wheedlers -wheedles -wheedlesome -wheedling -wheedlingly -wheel -wheelabrate -wheelabrated -wheelabrating -Wheelabrator -wheelage -wheel-backed -wheelband -wheelbarrow -wheelbarrower -wheel-barrower -wheelbarrowful -wheelbarrows -wheelbase -wheelbases -wheelbird -wheelbox -wheel-broad -wheelchair -wheelchairs -wheel-cut -wheel-cutting -wheeldom -wheeled -Wheeler -wheeler-dealer -wheelery -wheelerite -wheelers -Wheelersburg -wheel-footed -wheel-going -wheelhorse -wheelhouse -wheelhouses -wheely -wheelie -wheelies -Wheeling -wheelingly -wheelings -wheelless -wheellike -wheel-made -wheelmaker -wheelmaking -wheelman -wheel-marked -wheelmen -wheel-mounted -Wheelock -wheelrace -wheel-resembling -wheelroad -wheels -wheel-shaped -wheelsman -wheel-smashed -wheelsmen -wheelsmith -wheelspin -wheel-spun -wheel-supported -wheelswarf -wheel-track -wheel-turned -wheel-turning -wheelway -wheelwise -wheelwork -wheelworks -wheel-worn -Wheelwright -wheelwrighting -wheelwrights -wheem -wheen -wheencat -wheenge -wheens -wheep -wheeped -wheeping -wheeple -wheepled -wheeples -wheepling -wheeps -wheer -wheerikins -whees -wheesht -wheetle -wheeze -wheezed -wheezer -wheezers -wheezes -wheezy -wheezier -wheeziest -wheezily -wheeziness -wheezing -wheezingly -wheezle -wheft -whey -wheybeard -whey-bearded -wheybird -whey-blooded -whey-brained -whey-colored -wheyey -wheyeyness -wheyface -whey-face -wheyfaced -whey-faced -wheyfaces -wheyish -wheyishness -wheyisness -wheylike -whein -wheyness -wheys -wheyworm -wheywormed -whekau -wheki -Whelan -whelk -whelked -whelker -whelky -whelkier -whelkiest -whelklike -whelks -whelk-shaped -Wheller -whelm -whelmed -whelming -whelms -whelp -whelped -whelphood -whelping -whelpish -whelpless -whelpling -whelps -whelve -whemmel -whemmle -when -whenabouts -whenas -whence -whenceeer -whenceforth -whenceforward -whencesoeer -whencesoever -whencever -when'd -wheneer -whene'er -whenever -when-issued -when'll -whenness -when're -whens -when's -whenso -whensoe'er -whensoever -whensomever -where -whereabout -whereabouts -whereafter -whereanent -whereas -whereases -whereat -whereaway -whereby -whered -where'd -whereer -where'er -wherefor -wherefore -wherefores -whereforth -wherefrom -wherehence -wherein -whereinsoever -whereinto -whereis -where'll -whereness -whereof -whereon -whereout -whereover -wherere -where're -wheres -where's -whereso -wheresoeer -wheresoe'er -wheresoever -wheresomever -wherethrough -wheretill -whereto -wheretoever -wheretosoever -whereunder -whereuntil -whereunto -whereup -whereupon -where've -wherever -wherewith -wherewithal -wherret -wherry -wherried -wherries -wherrying -wherryman -wherrit -wherve -wherves -whesten -whet -whether -whetile -whetrock -whets -Whetstone -whetstones -whetstone-shaped -whetted -whetter -whetters -whetting -whettle-bone -whew -Whewell -whewellite -whewer -whewl -whews -whewt -whf -whf. -why -Whyalla -whiba -which -whichever -whichsoever -whichway -whichways -Whick -whicken -whicker -whickered -whickering -whickers -whid -whidah -whydah -whidahs -whydahs -whidded -whidder -whidding -whids -whyever -whiff -whiffable -whiffed -Whiffen -whiffenpoof -whiffer -whiffers -whiffet -whiffets -whiffy -whiffing -whiffle -whiffled -whiffler -whifflery -whiffleries -whifflers -whiffles -whiffletree -whiffletrees -whiffling -whifflingly -whiffs -whyfor -whift -Whig -Whiggamore -Whiggarchy -whigged -Whiggery -Whiggess -Whiggify -Whiggification -whigging -Whiggish -Whiggishly -Whiggishness -Whiggism -Whigham -Whiglet -Whigling -whigmaleery -whigmaleerie -whigmaleeries -whigmeleerie -whigs -whigship -whikerby -while -whileas -whiled -whileen -whiley -whilend -whilere -whiles -whilie -whiling -whilk -Whilkut -whill -why'll -whillaballoo -whillaloo -whilly -whillikers -whillikins -whillilew -whillywha -whilock -whilom -whils -whilst -whilter -whim -whimberry -whimble -whimbrel -whimbrels -whimling -whimmed -whimmy -whimmier -whimmiest -whimming -whimper -whimpered -whimperer -whimpering -whimperingly -whimpers -whim-proof -whims -whim's -whimsey -whimseys -whimsy -whimsic -whimsical -whimsicality -whimsicalities -whimsically -whimsicalness -whimsied -whimsies -whimsy's -whimstone -whimwham -whim-wham -whimwhams -whim-whams -whin -whinberry -whinberries -whinchacker -whinchat -whinchats -whincheck -whincow -whindle -whine -whined -Whiney -whiner -whiners -whines -whyness -whinestone -whing -whing-ding -whinge -whinged -whinger -whinges -whiny -whinyard -whinier -whiniest -whininess -whining -whiningly -whinnel -whinner -whinny -whinnied -whinnier -whinnies -whinniest -whinnying -whinnock -why-not -whins -whinstone -whin-wrack -whyo -whip -whip- -whip-bearing -whipbelly -whipbird -whipcat -whipcord -whipcordy -whipcords -whip-corrected -whipcrack -whipcracker -whip-cracker -whip-cracking -whipcraft -whip-ended -whipgraft -whip-grafting -whip-hand -Whipholt -whipjack -whip-jack -whipking -whiplash -whip-lash -whiplashes -whiplike -whipmaker -whipmaking -whipman -whipmanship -whip-marked -whipmaster -whipoorwill -whippa -whippable -Whippany -whipparee -whipped -whipper -whipperginny -whipper-in -whippers -whipper's -whippers-in -whippersnapper -whipper-snapper -whippersnappers -whippertail -whippet -whippeter -whippets -whippy -whippier -whippiest -whippiness -whipping -whipping-boy -whippingly -whippings -whipping's -whipping-snapping -whipping-up -Whipple -whippletree -Whippleville -whippoorwill -whip-poor-will -whippoorwills -whippost -whippowill -whipray -whiprays -whip-round -whips -whip's -whipsaw -whip-saw -whipsawed -whipsawyer -whipsawing -whipsawn -whipsaws -whip-shaped -whipship -whipsy-derry -whipsocket -whipstaff -whipstaffs -whipstalk -whipstall -whipstaves -whipster -whipstick -whip-stick -whipstitch -whip-stitch -whipstitching -whipstock -whipt -whiptail -whip-tailed -whiptails -whip-tom-kelly -whip-tongue -whiptree -whip-up -whip-wielding -whipwise -whipworm -whipworms -whir -why're -whirken -whirl -whirl- -whirlabout -Whirlaway -whirlbat -whirlblast -whirl-blast -whirlbone -whirlbrain -whirled -whirley -whirler -whirlers -whirlgig -whirly -whirly- -whirlybird -whirlybirds -whirlicane -whirlicote -whirlier -whirlies -whirliest -whirligig -whirligigs -whirlygigum -whirlimagig -whirling -whirlingly -whirlmagee -whirlpit -whirlpool -whirlpools -whirlpool's -whirlpuff -whirls -whirl-shaped -whirlwig -whirlwind -whirlwindy -whirlwindish -whirlwinds -whirr -whirred -whirrey -whirret -whirry -whirrick -whirried -whirries -whirrying -whirring -whirroo -whirrs -whirs -whirtle -whys -why's -whish -whished -whishes -whishing -whisht -whishted -whishting -whishts -whisk -whiskbroom -whisked -whiskey -whiskeys -Whiskeytown -whisker -whiskerage -whiskerando -whiskerandoed -whiskerandos -whiskered -whiskerer -whiskerette -whiskery -whiskerless -whiskerlike -whiskers -whisket -whiskful -whisky -whisky-drinking -whiskied -whiskies -whiskified -whiskyfied -whisky-frisky -whisky-jack -whiskylike -whiskin -whisking -whiskingly -whisky-sodden -whisks -whisk-tailed -whisp -whisper -whisperable -whisperation -whispered -whisperer -whisperhood -whispery -whispering -whisperingly -whisperingness -whisperings -whisperless -whisperous -whisperously -whisperproof -whispers -whisper-soft -whiss -whissle -Whisson -whist -whisted -whister -whisterpoop -whisting -whistle -whistleable -whistlebelly -whistle-blower -whistled -whistlefish -whistlefishes -whistlelike -whistle-pig -Whistler -Whistlerian -whistlerism -whistlers -whistles -whistle-stop -whistle-stopper -whistle-stopping -whistlewing -whistlewood -whistly -whistlike -whistling -whistlingly -whistness -Whistonian -whists -Whit -Whitaker -Whitakers -Whitaturalist -Whitby -whitblow -Whitcher -Whitcomb -White -Whyte -whiteacre -white-acre -white-alder -white-ankled -white-ant -white-anted -white-armed -white-ash -whiteback -white-backed -whitebait -whitebaits -whitebark -white-barked -white-barred -white-beaked -whitebeam -whitebeard -white-bearded -whitebelly -white-bellied -whitebelt -whiteberry -white-berried -whitebill -white-billed -Whitebird -whiteblaze -white-blood -white-blooded -whiteblow -white-blue -white-bodied -Whiteboy -Whiteboyism -Whiteboys -white-bone -white-boned -Whitebook -white-bordered -white-bosomed -whitebottle -white-breasted -white-brick -white-browed -white-brown -white-burning -whitecap -white-capped -whitecapper -whitecapping -whitecaps -white-cell -Whitechapel -white-cheeked -white-chinned -white-churned -white-clad -Whiteclay -white-clothed -whitecoat -white-coated -white-collar -white-colored -whitecomb -whitecorn -white-cotton -white-crested -white-cross -white-crossed -white-crowned -whitecup -whited -whitedamp -white-domed -white-dotted -white-dough -white-ear -white-eared -white-eye -white-eyed -white-eyelid -white-eyes -whiteface -white-faced -white-favored -white-feathered -white-featherism -whitefeet -white-felled -Whitefield -Whitefieldian -Whitefieldism -Whitefieldite -Whitefish -whitefisher -whitefishery -whitefishes -white-flanneled -white-flecked -white-fleshed -whitefly -whiteflies -white-flower -white-flowered -white-flowing -Whitefoot -white-foot -white-footed -whitefootism -Whiteford -white-frilled -white-fringed -white-frocked -white-fronted -white-fruited -white-girdled -white-glittering -white-gloved -white-gray -white-green -white-ground -white-haired -white-hairy -Whitehall -whitehanded -white-handed -white-hard -whitehass -white-hatted -whitehawse -Whitehead -white-headed -whiteheads -whiteheart -white-heart -whitehearted -Whiteheath -white-hoofed -white-hooved -white-horned -Whitehorse -white-horsed -white-hot -Whitehouse -Whitehurst -whitey -whiteys -white-jacketed -white-laced -Whiteland -Whitelaw -white-leaf -white-leaved -white-legged -Whiteley -whitely -white-lie -whitelike -whiteline -white-lined -white-linen -white-lipped -white-list -white-listed -white-livered -white-liveredly -white-liveredness -white-loaf -white-looking -white-maned -white-mantled -white-marked -white-mooned -white-mottled -white-mouthed -white-mustard -whiten -white-necked -whitened -whitener -whiteners -whiteness -whitenesses -whitening -whitenose -white-nosed -whitens -whiteout -whiteouts -Whiteowl -white-painted -white-paneled -white-petaled -white-pickle -white-pine -white-piped -white-plumed -Whitepost -whitepot -whiter -white-rag -white-rayed -white-railed -white-red -white-ribbed -white-ribboned -white-ribboner -white-rinded -white-robed -white-roofed -whiteroot -white-ruffed -whiterump -white-rumped -white-russet -whites -white-salted -whitesark -white-satin -Whitesboro -Whitesburg -whiteseam -white-set -white-sewing -white-shafted -whiteshank -white-sheeted -white-shouldered -Whiteside -white-sided -white-skin -white-skinned -whiteslave -white-slaver -white-slaving -white-sleeved -whitesmith -whitespace -white-spored -white-spotted -whitest -white-stemmed -white-stoled -Whitestone -Whitestown -whitestraits -white-strawed -Whitesville -whitetail -white-tail -white-tailed -whitetails -white-thighed -Whitethorn -whitethroat -white-throated -white-tinned -whitetip -white-tipped -white-tomentose -white-tongued -white-tooth -white-toothed -whitetop -white-topped -white-tufted -white-tusked -white-uniformed -white-veiled -whitevein -white-veined -whiteveins -white-vented -Whiteville -white-way -white-waistcoated -whitewall -white-walled -whitewalls -white-wanded -whitewards -whiteware -whitewash -whitewashed -whitewasher -whitewashes -whitewashing -Whitewater -white-water -white-waving -whiteweed -white-whiskered -white-wig -white-wigged -whitewing -white-winged -Whitewood -white-woolly -whiteworm -whitewort -Whitewright -white-wristed -white-zoned -Whitfield -whitfinch -Whitford -Whitharral -whither -whitherso -whithersoever -whitherto -whitherward -whitherwards -whity -whity-brown -whitier -whities -whitiest -whity-gray -whity-green -whity-yellow -whitin -Whiting -Whitingham -whitings -Whitinsville -whitish -whitish-blue -whitish-brown -whitish-cream -whitish-flowered -whitish-green -whitish-yellow -whitish-lavender -whitishness -whitish-red -whitish-tailed -Whitlam -Whitlash -whitleather -Whitleyism -Whitleyville -whitling -Whitlock -whitlow -whitlows -whitlowwort -Whitman -Whitmanese -Whitmanesque -Whitmanism -Whitmanize -Whitmer -Whitmire -Whitmonday -Whitmore -Whitney -whitneyite -Whitneyville -Whitnell -whitrack -whitracks -whitret -whits -Whitsett -Whitson -whitster -Whitsun -Whitsunday -Whitsuntide -Whitt -Whittaker -whittaw -whittawer -Whittemore -Whitten -whittener -whitter -whitterick -whitters -Whittier -Whittington -whitty-tree -Whittle -whittled -whittler -whittlers -whittles -whittling -whittlings -whittret -whittrets -whittrick -Whit-Tuesday -Whitver -Whitweek -Whit-week -Whitwell -Whitworth -whiz -whizbang -whiz-bang -whi-Zbang -whizbangs -whizgig -whizz -whizzbang -whizz-bang -whizzed -whizzer -whizzerman -whizzers -whizzes -whizziness -whizzing -whizzingly -whizzle -wh-movement -WHO -whoa -whoas -whod -who'd -who-does-what -whodunit -whodunits -whodunnit -whoever -whoever's -WHOI -whole -whole-and-half -whole-backed -whole-bodied -whole-bound -whole-cloth -whole-colored -whole-eared -whole-eyed -whole-feathered -wholefood -whole-footed -whole-headed -wholehearted -whole-hearted -wholeheartedly -wholeheartedness -whole-hog -whole-hogger -whole-hoofed -whole-leaved -whole-length -wholely -wholemeal -whole-minded -whole-mouthed -wholeness -wholenesses -whole-or-none -wholes -whole-sail -wholesale -wholesaled -wholesalely -wholesaleness -wholesaler -wholesalers -wholesales -wholesaling -whole-seas -whole-skinned -wholesome -wholesomely -wholesomeness -wholesomenesses -wholesomer -wholesomest -whole-souled -whole-souledly -whole-souledness -whole-spirited -whole-step -whole-timer -wholetone -wholewheat -whole-wheat -wholewise -whole-witted -wholism -wholisms -wholistic -wholl -who'll -wholly -whom -whomble -whomever -whomp -whomped -whomping -whomps -whomso -whomsoever -Whon -whone -whoo -whoof -whoofed -whoofing -whoofs -whoop -whoop-de-do -whoop-de-doo -whoop-de-dos -whoope -whooped -whoopee -whoopees -whooper -whoopers -whooping -whooping-cough -whoopingly -whoopla -whooplas -whooplike -whoops -whoop-up -whooses -whoosh -whooshed -whooshes -whooshing -whoosy -whoosies -whoosis -whoosises -whoot -whop -whopped -whopper -whoppers -whopping -whops -whorage -whore -who're -whored -whoredom -whoredoms -whorehouse -whorehouses -whoreishly -whoreishness -whorelike -whoremaster -whoremastery -whoremasterly -whoremonger -whoremongering -whoremonging -whores -whore's -whoreship -whoreson -whoresons -whory -whoring -whorish -whorishly -whorishness -whorl -whorle -whorled -whorlflower -whorly -whorlywort -whorls -whorl's -whorry -whort -whortle -whortleberry -whortleberries -whortles -Whorton -whorts -who's -whose -whosen -whosesoever -whosever -whosis -whosises -whoso -whosoever -whosome -whosomever -whosumdever -who've -who-whoop -whr -whs -WHSE -whsle -whsle. -whud -whuff -whuffle -whulk -whulter -whummle -whump -whumped -whumping -whumps -whun -whunstane -whup -whush -whuskie -whussle -whute -whuther -whutter -whuttering -whuz -WI -WY -Wyaconda -Wiak -Wyalusing -Wyandot -Wyandots -Wyandotte -Wyandottes -Wyanet -Wyano -Wyarno -Wyat -Wyatan -Wiatt -Wyatt -Wibaux -wibble -wibble-wabble -wibble-wobble -Wiborg -Wiburg -wicca -wice -wich -wych -wych-elm -Wycherley -Wichern -wiches -wyches -wych-hazel -Wichita -Wichman -wicht -wichtisite -wichtje -wick -Wyck -wickape -wickapes -Wickatunk -wickawee -wicked -wicked-acting -wicked-eyed -wickeder -wickedest -wickedish -wickedly -wickedlike -wicked-looking -wicked-minded -wickedness -wickednesses -wicked-speaking -wicked-tongued -wicken -Wickenburg -wicker -wickerby -wickers -wickerware -wickerwork -wickerworked -wickerworker -wickerworks -wicker-woven -Wickes -wicket -wicketkeep -wicketkeeper -wicketkeeping -wickets -Wickett -wicketwork -Wickham -wicky -wicking -wickings -wickiup -wickyup -wickiups -wickyups -wickless -Wickliffe -Wicklow -Wickman -Wickner -Wyckoff -Wicks -wickthing -wickup -Wiclif -Wycliffe -Wycliffian -Wycliffism -Wycliffist -Wycliffite -wyclifian -Wyclifism -Wyclifite -Wyco -Wycoff -Wycombe -Wicomico -Wiconisco -wicopy -wicopies -wid -widbin -widdendream -widder -widders -widdershins -widdy -widdie -widdies -widdifow -widdle -widdled -widdles -widdling -widdrim -wide -wyde -wide-abounding -wide-accepted -wide-angle -wide-arched -wide-armed -wideawake -wide-awake -wide-a-wake -wide-awakeness -wideband -wide-banked -wide-bottomed -wide-branched -wide-branching -wide-breasted -wide-brimmed -wide-cast -wide-chapped -wide-circling -wide-climbing -wide-consuming -wide-crested -wide-distant -wide-doored -wide-eared -wide-echoing -wide-eyed -wide-elbowed -wide-expanded -wide-expanding -wide-extended -wide-extending -wide-faced -wide-flung -wide-framed -widegab -widegap -wide-gaping -wide-gated -wide-girdled -wide-handed -widehearted -wide-hipped -wide-honored -wide-yawning -wide-imperial -wide-jointed -wide-kneed -wide-lamented -wide-leafed -wide-leaved -widely -wide-lipped -Wideman -wide-met -wide-minded -wide-mindedness -widemouthed -wide-mouthed -widen -wide-necked -widened -Widener -wideners -wideness -widenesses -widening -wide-nosed -widens -wide-open -wide-opened -wide-openly -wide-openness -wide-palmed -wide-patched -wide-permitted -wide-petaled -wide-pledged -wider -Widera -wide-ranging -wide-reaching -wide-realmed -wide-resounding -wide-ribbed -wide-rimmed -wide-rolling -wide-roving -wide-row -widershins -wides -wide-said -wide-sanctioned -wide-screen -wide-seen -wide-set -wide-shaped -wide-shown -wide-skirted -wide-sleeved -wide-sold -wide-soled -wide-sought -wide-spaced -wide-spanned -widespread -wide-spread -wide-spreaded -widespreadedly -widespreading -wide-spreading -widespreadly -widespreadness -widest -wide-straddling -wide-streeted -wide-stretched -wide-stretching -wide-throated -wide-toed -wide-toothed -wide-tracked -wide-veined -wide-wayed -wide-wasting -wide-watered -widewhere -wide-where -wide-winding -wide-winged -widework -widgeon -widgeons -Widgery -widget -widgets -widgie -widish -Widnes -Widnoon -widorror -widow -widow-bench -widow-bird -widowed -widower -widowered -widowerhood -widowery -widowers -widowership -widowhood -widowhoods -widowy -widowing -widowish -widowly -widowlike -widow-maker -widowman -widowmen -widows -widow's-cross -widow-wail -width -widthless -widths -widthway -widthways -widthwise -widu -Widukind -Wie -Wye -Wiebmer -Wieche -wied -wiedersehen -Wiedmann -Wiegenlied -Wieland -wielare -wield -wieldable -wieldableness -wielded -wielder -wielders -wieldy -wieldier -wieldiest -wieldiness -wielding -wields -Wien -Wiencke -Wiener -wieners -wienerwurst -wienie -wienies -Wier -wierangle -wierd -Wieren -Wiersma -wyes -Wiesbaden -Wiese -wiesenboden -Wyeth -Wyethia -Wyeville -wife -wife-awed -wife-beating -wife-bound -wifecarl -wifed -wifedom -wifedoms -wifehood -wifehoods -wife-hunting -wifeism -wifekin -wifeless -wifelessness -wifelet -wifely -wifelier -wifeliest -wifelike -wifeliness -wifeling -wifelkin -wife-ridden -wifes -wife's -wifeship -wifething -wife-to-be -wifeward -wife-worn -wifie -wifiekie -wifing -wifish -wifock -Wig -Wigan -wigans -wigdom -wigeling -wigeon -wigeons -wigful -wigged -wiggen -wigger -wiggery -wiggeries -wiggy -wiggier -wiggiest -Wiggin -wigging -wiggings -Wiggins -wiggish -wiggishness -wiggism -wiggle -wiggled -wiggler -wigglers -wiggles -Wigglesworth -wiggle-tail -wiggle-waggle -wiggle-woggle -wiggly -wigglier -wiggliest -wiggling -wiggly-waggly -wigher -Wight -wightly -Wightman -wightness -wights -wigless -wiglet -wiglets -wiglike -wigmake -wigmaker -wigmakers -wigmaking -Wigner -wigs -wig's -wigtail -Wigtown -Wigtownshire -wigwag -wig-wag -wigwagged -wigwagger -wigwagging -wigwags -wigwam -wigwams -Wihnyk -Wiyat -wiikite -WIYN -Wiyot -wyke -Wykeham -Wykehamical -Wykehamist -Wikeno -Wikieup -wiking -wikiup -wikiups -wikiwiki -Wykoff -Wikstroemia -Wil -Wilbar -Wilber -Wilberforce -Wilbert -Wilbraham -Wilbur -Wilburite -Wilburn -Wilburt -Wilburton -wilco -Wilcoe -Wilcox -wilcoxon -wilcweme -wild -Wyld -Wilda -wild-acting -wild-aimed -wild-and-woolly -wild-ass -wild-billowing -wild-blooded -wild-booming -wildbore -wild-born -wild-brained -wild-bred -wildcard -wildcat -wildcats -wildcat's -wildcatted -wildcatter -wildcatting -wild-chosen -Wilde -Wylde -wildebeest -wildebeeste -wildebeests -wilded -Wildee -wild-eyed -Wilden -Wilder -wildered -wilderedly -wildering -wilderment -Wildermuth -wildern -Wilderness -wildernesses -wilders -Wildersville -wildest -wildfire -wild-fire -wildfires -wild-flying -wildflower -wildflowers -wild-fought -wildfowl -wild-fowl -wildfowler -wild-fowler -wildfowling -wild-fowling -wildfowls -wild-goose -wildgrave -wild-grown -wild-haired -wild-headed -wild-headedness -Wildhorse -Wildie -wilding -wildings -wildish -wildishly -wildishness -wildland -wildly -wildlife -wildlike -wildling -wildlings -wild-looking -wild-made -wildness -wildnesses -wild-notioned -wild-oat -Wildomar -Wildon -Wildorado -wild-phrased -Wildrose -wilds -wildsome -wild-spirited -wild-staring -Wildsville -wildtype -wild-warbling -wild-warring -wild-williams -wildwind -wild-winged -wild-witted -Wildwood -wildwoods -wild-woven -wile -wyle -wiled -wyled -Wileen -wileful -Wiley -Wileyville -Wilek -wileless -Wilen -Wylen -wileproof -Wyler -Wiles -wyles -Wilfred -Wilfreda -Wilfrid -wilful -wilfully -wilfulness -wilga -wilgers -Wilhelm -Wilhelmina -Wilhelmine -Wilhelmshaven -Wilhelmstrasse -Wilhide -Wilhlem -wily -Wyly -wilycoat -Wilie -Wylie -wyliecoat -wilier -wiliest -wilily -wiliness -wilinesses -wiling -wyling -Wilinski -wiliwili -wilk -Wilkey -wilkeite -Wilkens -Wilkes -Wilkesbarre -Wilkesboro -Wilkeson -Wilkesville -Wilkie -wilkin -Wilkins -Wilkinson -Wilkinsonville -Wilkison -Wilkommenn -Will -Willa -Willabel -Willabella -Willabelle -willable -Willacoochee -Willaert -Willamette -Willamina -Willard -Willards -willawa -willble -will-call -will-commanding -Willcox -Willdon -willed -willedness -Willey -willeyer -Willem -willemite -Willemstad -Willendorf -Willene -willer -Willernie -willers -willes -Willesden -Willet -willets -Willett -Willetta -Willette -will-fraught -willful -willfully -willfulness -Willi -Willy -William -williamite -Williams -Williamsburg -Williamsen -Williamsfield -williamsite -Williamson -Williamsonia -Williamsoniaceae -Williamsport -Williamston -Williamstown -Williamsville -willyard -willyart -williche -Willie -Willie-boy -willied -willier -willyer -willies -Wylliesburg -williewaucht -willie-waucht -willie-waught -Williford -willying -Willimantic -willy-mufty -Willin -Willing -Willingboro -willinger -willingest -willinghearted -willinghood -willingly -willingness -willy-nilly -Willis -Willisburg -Williston -Willisville -Willyt -Willits -willy-waa -willy-wagtail -williwau -williwaus -williwaw -willywaw -willy-waw -williwaws -willywaws -willy-wicket -willy-willy -willy-willies -Willkie -will-less -will-lessly -will-lessness -willmaker -willmaking -Willman -Willmar -Willmert -Willms -Willner -willness -Willock -will-o'-the-wisp -will-o-the-wisp -willo'-the-wispy -willo'-the-wispish -Willoughby -Willow -willowbiter -willow-bordered -willow-colored -willow-cone -willowed -willower -willowers -willow-fringed -willow-grown -willowherb -willow-herb -willowy -Willowick -willowier -willowiest -willowiness -willowing -willowish -willow-leaved -willowlike -Willows -willow's -Willowshade -willow-shaded -willow-skirted -Willowstreet -willow-tufted -willow-veiled -willowware -willowweed -willow-wielder -Willowwood -willow-wood -willowworm -willowwort -willow-wort -willpower -willpowers -Wills -Willsboro -Willseyville -Willshire -will-strong -Willtrude -Willugbaeya -Willumsen -will-willet -will-with-the-wisp -will-worship -will-worshiper -Wilma -Wylma -Wilmar -Wilmer -Wilmerding -Wilmette -Wilmington -Wilmingtonian -Wilmont -Wilmore -Wilmot -Wilmott -wilning -Wilno -Wilona -Wilonah -Wilone -Wilow -wilrone -wilroun -Wilsall -Wilscam -Wilsey -Wilseyville -Wilser -Wilshire -Wilsie -wilsome -wilsomely -wilsomeness -Wilson -Wilsonburg -Wilsondale -Wilsonian -Wilsonianism -Wilsonism -Wilsons -Wilsonville -Wilt -wilted -wilter -Wilterdink -wilting -Wilton -wiltproof -Wilts -Wiltsey -Wiltshire -Wiltz -wim -Wyman -Wimauma -Wimberley -wimberry -wimble -wimbled -Wimbledon -wimblelike -wimbles -wimbling -wimbrel -wime -Wymer -wimick -wimlunge -Wymore -wymote -wimp -Wimpy -wimpish -wimple -wimpled -wimpleless -wimplelike -wimpler -wimples -wimpling -wimps -Wimsatt -Win -Wyn -Wina -Winamac -Wynantskill -winare -winberry -winbrow -Winburne -wince -winced -wincey -winceyette -winceys -Wincer -wincers -winces -winch -winched -Winchell -Winchendon -wincher -winchers -winches -Winchester -winching -winchman -winchmen -wincing -wincingly -Winckelmann -wincopipe -Wyncote -Wind -wynd -windable -windage -windages -windas -Windaus -windbag -wind-bag -windbagged -windbaggery -windbags -wind-balanced -wind-balancing -windball -wind-beaten -wind-bell -wind-bells -Windber -windberry -windbibber -windblast -wind-blazing -windblown -wind-blown -windboat -windbore -wind-borne -windbound -wind-bound -windbracing -windbreak -Windbreaker -windbreaks -windbroach -wind-broken -wind-built -windburn -windburned -windburning -windburns -windburnt -windcatcher -wind-changing -wind-chapped -windcheater -windchest -windchill -wind-clipped -windclothes -windcuffer -wind-cutter -wind-delayed -wind-dispersed -winddog -wind-dried -wind-driven -winded -windedly -windedness -wind-egg -windel -Windelband -wind-equator -Winder -Windermere -windermost -winder-on -winders -Windesheimer -wind-exposed -windfall -windfallen -windfalls -wind-fanned -windfanner -wind-fast -wind-fertilization -wind-fertilized -windfirm -windfish -windfishes -windflaw -windflaws -windflower -wind-flower -windflowers -wind-flowing -wind-footed -wind-force -windgall -wind-gall -windgalled -windgalls -wind-god -wind-grass -wind-guage -wind-gun -Windham -Wyndham -Windhoek -windhole -windhover -wind-hungry -Windy -windy-aisled -windy-blowing -windy-clear -windier -windiest -windy-footed -windigo -windigos -windy-headed -windily -windill -windy-looking -windy-mouthed -windiness -winding -windingly -windingness -windings -winding-sheet -wind-instrument -wind-instrumental -wind-instrumentalist -Windyville -windy-voiced -windy-worded -windjam -windjammer -windjammers -windjamming -wind-laid -wind-lashed -windlass -windlassed -windlasser -windlasses -windlassing -windle -windled -windles -windless -windlessly -windlessness -windlestrae -windlestraw -windlike -windlin -windling -windlings -wind-making -Wyndmere -windmill -windmilled -windmilly -windmilling -windmill-like -windmills -windmill's -wind-nodding -wind-obeying -windock -Windom -windore -wind-outspeeding -window -window-breaking -window-broken -window-cleaning -window-dress -window-dresser -window-dressing -windowed -window-efficiency -windowful -windowy -windowing -windowless -windowlessness -windowlet -windowlight -windowlike -windowmaker -windowmaking -windowman -window-opening -windowpane -windowpanes -windowpeeper -window-rattling -windows -window's -windowshade -window-shop -windowshopped -window-shopper -windowshopping -window-shopping -windowshut -windowsill -window-smashing -window-ventilating -windowward -windowwards -windowwise -wind-parted -windpipe -windpipes -windplayer -wind-pollinated -wind-pollination -windproof -wind-propelled -wind-puff -wind-puffed -wind-raising -wind-rent -windring -windroad -windrode -wind-rode -windroot -windrow -windrowed -windrower -windrowing -windrows -winds -wynds -windsail -windsailor -wind-scattered -windscoop -windscreen -wind-screen -windshake -wind-shake -wind-shaken -windshield -windshields -wind-shift -windship -windshock -windslab -windsock -windsocks -Windsor -windsorite -windstorm -windstorms -windstream -wind-struck -wind-stuffed -windsucker -wind-sucking -windsurf -windswept -wind-swept -wind-swift -wind-swung -wind-taut -Windthorst -windtight -wind-toned -windup -wind-up -windups -windway -windways -windwayward -windwaywardly -wind-wandering -windward -windwardly -windwardmost -windwardness -windwards -wind-waved -wind-waving -wind-whipped -wind-wing -wind-winged -wind-worn -windz -Windzer -wine -Wyne -wineball -Winebaum -wineberry -wineberries -winebibber -winebibbery -winebibbing -Winebrennerian -wine-bright -wine-colored -wineconner -wine-cooler -wine-crowned -wine-cup -wined -wine-dark -wine-drabbed -winedraf -wine-drinking -wine-driven -wine-drunken -wineglass -wineglasses -wineglassful -wineglassfuls -winegrower -winegrowing -wine-hardy -wine-heated -winehouse -wine-house -winey -wineyard -wineier -wineiest -wine-yielding -wine-inspired -wine-laden -wineless -winelike -winemay -winemake -winemaker -winemaking -winemaster -wine-merry -winepot -winepress -wine-press -winepresser -wine-producing -Winer -Wyner -wine-red -winery -wineries -winers -wines -Winesap -Winesburg -wine-selling -wine-shaken -wineshop -wineshops -wineskin -wineskins -wine-soaked -winesop -winesops -wine-stained -wine-stuffed -wine-swilling -winetaster -winetasting -wine-tinged -winetree -winevat -wine-wise -Winfall -Winfield -Winfred -winfree -Winfrid -winful -Wing -wingable -wingate -wingback -wingbacks -wingbeat -wing-borne -wingbow -wingbows -wing-broken -wing-case -wing-clipped -wingcut -Wingdale -wingding -wing-ding -wingdings -winged -winged-footed -winged-heeled -winged-leaved -wingedly -wingedness -Winger -wingers -wingfish -wingfishes -wing-footed -winghanded -wing-hoofed -wingy -wingier -wingiest -Wingina -winging -wingle -wing-leafed -wing-leaved -wingless -winglessness -winglet -winglets -winglike -wing-limed -wing-loose -wing-maimed -wingman -wingmanship -wing-margined -wingmen -Wingo -wingover -wingovers -wingpiece -wingpost -wings -wingseed -wing-shaped -wing-slot -wingspan -wingspans -wingspread -wingspreads -wingstem -wing-swift -wingtip -wing-tip -wing-tipped -wingtips -wing-weary -wing-wearily -wing-weariness -wing-wide -Wini -winy -winier -winiest -Winifield -Winifred -Winifrede -Winigan -Winikka -wining -winish -wink -winked -winkel -Winkelman -Winkelried -winker -winkered -wynkernel -winkers -winking -winkingly -winkle -winkled -winklehawk -winklehole -winkle-pickers -winkles -winklet -winkling -winklot -winks -winless -winlestrae -winly -Winlock -Winn -Wynn -Winna -winnable -Winnabow -Winnah -winnard -Wynnburg -Winne -Wynne -Winnebago -Winnebagos -Winneconne -Winnecowet -winned -winnel -winnelstrae -Winnemucca -Winnepesaukee -Winner -winners -winner's -Winnetka -Winnetoon -Winnett -Wynnewood -Winnfield -Winni -Winny -Wynny -Winnick -Winnie -Wynnie -Winnifred -winning -winningly -winningness -winnings -winninish -Winnipeg -Winnipegger -Winnipegosis -Winnipesaukee -Winnisquam -winnle -winnock -winnocks -winnonish -winnow -winnow-corb -winnowed -winnower -winnowers -winnowing -winnowingly -winnows -wynns -Winnsboro -wino -winoes -Winograd -Winola -Winona -Wynona -Winonah -Winooski -winos -Wynot -Winou -winrace -wynris -winrow -WINS -wyns -Winser -Winshell -Winside -Winslow -Winsome -winsomely -winsomeness -winsomenesses -winsomer -winsomest -Winson -Winsor -Winsted -winster -Winston -Winstonn -Winston-Salem -Winstonville -wint -Winter -Winteraceae -winterage -Winteranaceae -winter-beaten -winterberry -winter-blasted -winterbloom -winter-blooming -winter-boding -Winterbottom -winterbound -winter-bound -winterbourne -winter-chilled -winter-clad -wintercreeper -winter-damaged -winterdykes -wintered -winterer -winterers -winter-fattened -winterfed -winter-fed -winterfeed -winterfeeding -winter-felled -winterffed -winter-flowering -winter-gladdening -winter-gray -wintergreen -wintergreens -winter-ground -winter-grown -winter-habited -winterhain -winter-hardened -winter-hardy -winter-house -wintery -winterier -winteriest -wintering -winterish -winterishly -winterishness -winterization -winterize -winterized -winterizes -winterizing -winterkill -winter-kill -winterkilled -winterkilling -winterkills -winterless -winterly -winterlike -winterliness -winterling -winter-long -winter-love -winter-loving -winter-made -winter-old -Winterport -winterproof -winter-proof -winter-proud -winter-pruned -winter-quarter -winter-reared -winter-rig -winter-ripening -Winters -winter-seeming -Winterset -winter-shaken -wintersome -winter-sown -winter-standing -winter-starved -Wintersville -winter-swollen -winter-thin -Winterthur -wintertide -wintertime -wintertimes -winter-verging -Winterville -winter-visaged -winterward -winterwards -winter-wasted -winterweed -winterweight -winter-withered -winter-worn -Winther -Winthorpe -Winthrop -wintle -wintled -wintles -wintling -Winton -wintry -wintrier -wintriest -wintrify -wintrily -wintriness -wintrish -wintrous -Wintun -Winwaloe -winze -winzeman -winzemen -winzes -Winzler -Wyo -Wyo. -Wyocena -Wyola -Wyoming -Wyomingite -Wyomissing -Wyon -Wiota -WIP -wipe -wype -wiped -wipe-off -wipeout -wipeouts -wiper -wipers -wipes -wiping -WIPO -wippen -wips -wipstock -wir -Wira -wirable -wirble -wird -Wyrd -wire -wirebar -wire-bending -wirebird -wire-blocking -wire-borne -wire-bound -wire-brushing -wire-caged -wire-cloth -wire-coiling -wire-crimping -wire-cut -wirecutters -wired -wiredancer -wiredancing -wiredraw -wire-draw -wiredrawer -wire-drawer -wiredrawing -wiredrawn -wire-drawn -wiredraws -wiredrew -wire-edged -wire-feed -wire-feeding -wire-flattening -wire-galvanizing -wire-gauge -wiregrass -wire-grass -wire-guarded -wirehair -wirehaired -wire-haired -wirehairs -wire-hung -wire-insulating -wireless -wirelessed -wirelesses -wirelessing -wirelessly -wirelessness -wirelike -wiremaker -wiremaking -wireman -wire-measuring -wiremen -wire-mended -wiremonger -wire-netted -Wirephoto -Wirephotoed -Wirephotoing -Wirephotos -wire-pointing -wirepull -wire-pull -wirepuller -wire-puller -wirepullers -wirepulling -wire-pulling -wirer -wire-record -wire-rolling -wirers -wires -wire-safed -wire-sewed -wire-sewn -wire-shafted -wiresmith -wiresonde -wirespun -wire-spun -wirestitched -wire-stitched -wire-straightening -wire-stranding -wire-stretching -wire-stringed -wire-strung -wiretail -wire-tailed -wiretap -wiretapped -wiretapper -wiretappers -wiretapping -wiretaps -wiretap's -wire-testing -wire-tightening -wire-tinning -wire-toothed -wireway -wireways -wirewalker -wireweed -wire-wheeled -wire-winding -wirework -wireworker -wire-worker -wireworking -wireworks -wireworm -wireworms -wire-wound -wire-wove -wire-woven -wiry -wiry-brown -wiry-coated -wirier -wiriest -wiry-haired -wiry-leaved -wirily -wiry-looking -wiriness -wirinesses -wiring -wirings -wiry-stemmed -wiry-voiced -wirl -wirling -wyrock -Wiros -wirr -wirra -wirrah -Wirral -wirrasthru -Wirth -Wirtz -WIS -Wis. -Wisacky -Wisby -Wisc -Wiscasset -Wisconsin -Wisconsinite -wisconsinites -Wisd -Wisd. -wisdom -wisdom-bred -wisdomful -wisdom-given -wisdom-giving -wisdom-led -wisdomless -wisdom-loving -wisdomproof -wisdoms -wisdom-seasoned -wisdom-seeking -wisdomship -wisdom-teaching -wisdom-working -wise -wiseacre -wiseacred -wiseacredness -wiseacredom -wiseacreish -wiseacreishness -wiseacreism -wiseacres -wiseass -wise-ass -wise-bold -wisecrack -wisecracked -wisecracker -wisecrackery -wisecrackers -wisecracking -wisecracks -wised -wise-framed -wiseguy -wise-hardy -wisehead -wise-headed -wise-heart -wisehearted -wiseheartedly -wiseheimer -wise-judging -wisely -wiselier -wiseliest -wiselike -wiseling -wise-lipped -Wiseman -wisen -wiseness -wisenesses -wisenheimer -wisent -wisents -wiser -wise-reflecting -wises -wise-said -wise-spoken -wisest -wise-valiant -wiseweed -wisewoman -wisewomen -wise-worded -wish -wisha -wishable -wishbone -wishbones -wish-bringer -wished -wished-for -wishedly -Wishek -wisher -wishers -wishes -wishful -wish-fulfilling -wish-fulfillment -wishfully -wishfulness -wish-giver -wishy -wishing -wishingly -wishy-washy -wishy-washily -wishy-washiness -wishless -wishly -wishmay -wish-maiden -wishness -Wishoskan -Wishram -wisht -wishtonwish -wish-wash -wish-washy -Wisigothic -wising -WYSIWYG -WYSIWIS -wisket -Wiskind -wisking -wiskinky -wiskinkie -Wisla -Wismar -wismuth -Wisner -Wisnicki -wyson -Wysox -wisp -wisped -wispy -wispier -wispiest -wispily -wispiness -wisping -wispish -wisplike -wisps -wisp's -wiss -wyss -wisse -wissed -wissel -wisses -wisshe -wissing -wissle -Wissler -wist -Wystand -Wistaria -wistarias -wiste -wisted -wistened -Wister -Wisteria -wisterias -wistful -wistful-eyed -wistfully -wistfulness -wistfulnesses -wysty -wisting -wistit -wistiti -wistless -wistlessness -wistly -wistonwish -Wistrup -wists -wisure -WIT -wit-abused -witan -wit-assailing -wit-beaten -Witbooi -witch -witchbells -witchbroom -witch-charmed -witchcraft -witchcrafts -witch-doctor -witched -witchedly -witch-elm -witchen -Witcher -witchercully -witchery -witcheries -witchering -wit-cherishing -witches -witches'-besom -witches'-broom -witchet -witchetty -witch-finder -witch-finding -witchgrass -witch-held -witchhood -witch-hunt -witch-hunter -witch-hunting -witchy -witchier -witchiest -witching -witchingly -witchings -witchleaf -witchlike -witchman -witchmonger -witch-ridden -witch-stricken -witch-struck -witchuck -witchweed -witchwife -witchwoman -witch-woman -witchwood -witchwork -wit-crack -wit-cracker -witcraft -wit-drawn -wite -wyte -wited -wyted -witeless -witen -witenagemot -witenagemote -witepenny -witereden -wites -wytes -witess -wit-foundered -wit-fraught -witful -wit-gracing -with -with- -Witha -withal -witham -withamite -Withams -Withania -withbeg -withcall -withdaw -withdraught -withdraw -withdrawable -withdrawal -withdrawals -withdrawal's -withdrawer -withdrawing -withdrawingness -withdrawment -withdrawn -with-drawn -withdrawnness -withdraws -withdrew -withe -withed -Withee -withen -Wither -witherband -Witherbee -witherblench -withercraft -witherdeed -withered -witheredly -witheredness -witherer -witherers -withergloom -withery -withering -witheringly -witherite -witherly -witherling -withernam -Withers -withershins -Witherspoon -withertip -witherwards -witherweight -wither-wrung -withes -Wytheville -withewood -withgang -withgate -withheld -withhele -withhie -withhold -withholdable -withholdal -withholden -withholder -withholders -withholding -withholdings -withholdment -withholds -withy -withy-bound -withier -withies -withiest -within -within-bound -within-door -withindoors -withinforth -withing -within-named -withins -withinside -withinsides -withinward -withinwards -withypot -with-it -withywind -withy-woody -withnay -withness -withnim -witholden -without -withoutdoors -withouten -withoutforth -withouts -withoutside -withoutwards -withsay -withsayer -withsave -withsaw -withset -withslip -withspar -withstay -withstand -withstander -withstanding -withstandingness -withstands -withstood -withstrain -withtake -withtee -withturn -withvine -withwind -wit-infusing -witing -wyting -witjar -Witkin -witless -witlessly -witlessness -witlessnesses -witlet -witling -witlings -witloof -witloofs -witlosen -wit-loving -wit-masked -Witmer -witmonger -witney -witneyer -witneys -witness -witnessable -witness-box -witnessdom -witnessed -witnesser -witnessers -witnesses -witnesseth -witnessing -wit-offended -Wytopitlock -wit-oppressing -Witoto -wit-pointed -WITS -wit's -witsafe -wit-salted -witship -wit-snapper -wit-starved -wit-stung -Witt -wittal -wittall -wittawer -Witte -witteboom -witted -wittedness -Wittekind -Witten -Wittenberg -Wittenburg -Wittensville -Witter -wittering -witterly -witterness -Wittgenstein -Wittgensteinian -Witty -witty-brained -witticaster -wittichenite -witticism -witticisms -witticize -witty-conceited -Wittie -wittier -wittiest -witty-feigned -wittified -wittily -wittiness -wittinesses -witting -wittingite -wittingly -wittings -witty-pated -witty-pretty -witty-worded -Wittman -Wittmann -wittol -wittolly -wittols -wittome -Witumki -witwall -witwanton -Witwatersrand -witword -witworm -wit-worn -witzchoura -wive -wyve -wived -wiver -wyver -wivern -wyvern -wiverns -wyverns -wivers -wives -Wivestad -Wivina -Wivinah -wiving -Wivinia -wiwi -wi-wi -Wixom -Wixted -wiz -wizard -wizardess -wizardism -wizardly -wizardlike -wizardry -wizardries -wizards -wizard's -wizardship -wizard-woven -wizen -wizened -wizenedness -wizen-faced -wizen-hearted -wizening -wizens -wizes -wizier -wizzen -wizzens -wjc -wk -wk. -wkly -wkly. -WKS -WL -Wladyslaw -wlatful -wlatsome -wlecche -wlench -wlity -WLM -wloka -wlonkhede -WM -WMC -wmk -wmk. -WMO -WMSCR -WNN -WNP -WNW -WO -woa -woad -woaded -woader -woady -woad-leaved -woadman -woad-painted -woads -woadwax -woadwaxen -woadwaxes -woak -woald -woalds -woan -wob -wobbegong -wobble -wobbled -wobbler -wobblers -wobbles -Wobbly -wobblier -Wobblies -wobbliest -wobbliness -wobbling -wobblingly -wobegone -wobegoneness -wobegonish -wobster -Woburn -wocas -wocheinite -Wochua -wod -Wodan -woddie -wode -wodeleie -Woden -Wodenism -wodge -wodges -wodgy -woe -woe-begetting -woebegone -woe-begone -woebegoneness -woebegonish -woe-beseen -woe-bested -woe-betrothed -woe-boding -woe-dejected -woe-delighted -woe-denouncing -woe-destined -woe-embroidered -woe-enwrapped -woe-exhausted -woefare -woe-foreboding -woe-fraught -woeful -woefuller -woefullest -woefully -woefulness -woeful-wan -woe-grim -Woehick -woehlerite -woe-humbled -woe-illumed -woe-infirmed -woe-laden -woe-maddened -woeness -woenesses -woe-revolving -Woermer -woes -woe-scorning -woesome -woe-sprung -woe-stricken -woe-struck -woe-surcharged -woe-threatened -woe-tied -woevine -woe-weary -woe-wearied -woe-wedded -woe-whelmed -woeworn -woe-wrinkled -Woffington -woffler -woft -woful -wofully -wofulness -wog -woggle -woghness -wogiet -wogs -wogul -Wogulian -wohlac -Wohlen -wohlerite -Wohlert -woy -Woyaway -woibe -woidre -woilie -Wojak -Wojcik -wok -wokas -woke -woken -Woking -wokowi -woks -Wolbach -Wolbrom -Wolcott -Wolcottville -wold -woldes -woldy -woldlike -Wolds -woldsman -woleai -Wolenik -Wolf -wolfachite -wolfbane -wolf-begotten -wolfberry -wolfberries -wolf-boy -wolf-child -wolf-children -Wolfcoal -wolf-colored -wolf-dog -wolfdom -Wolfe -Wolfeboro -wolfed -wolf-eel -wolf-eyed -wolfen -wolfer -wolfers -Wolff -Wolffia -Wolffian -Wolffianism -wolffish -wolffishes -Wolfforth -Wolfgang -wolf-gray -Wolfgram -wolf-haunted -wolf-headed -wolfhood -wolfhound -wolf-hound -wolfhounds -wolf-hunting -Wolfy -Wolfian -Wolfie -wolfing -wolfish -wolfishly -wolfishness -Wolfit -wolfkin -wolfless -wolflike -wolfling -wolfman -Wolf-man -wolfmen -wolf-moved -Wolford -Wolfort -Wolfpen -Wolfram -wolframate -wolframic -wolframine -wolframinium -wolframite -wolframium -wolframs -wolfs -wolfsbane -wolf's-bane -wolfsbanes -wolfsbergite -Wolfsburg -wolf-scaring -wolf-shaped -wolf's-head -wolfskin -wolf-slaying -wolf'smilk -Wolfson -wolf-suckled -Wolftown -wolfward -wolfwards -Wolgast -Wolk -Woll -Wollaston -wollastonite -wolly -Wollis -wollock -wollomai -Wollongong -wollop -Wolof -Wolpert -Wolsey -Wolseley -Wolsky -wolter -wolve -wolveboon -wolver -wolverene -Wolverhampton -Wolverine -wolverines -wolvers -Wolverton -wolves -wolvish -Womack -woman -woman-bearing -womanbody -womanbodies -woman-born -woman-bred -woman-built -woman-child -woman-churching -woman-conquered -woman-daunted -woman-degrading -woman-despising -womandom -woman-easy -womaned -woman-faced -woman-fair -woman-fashion -woman-flogging -womanfolk -womanfully -woman-governed -woman-grown -woman-hater -woman-hating -womanhead -woman-headed -womanhearted -womanhood -womanhoods -womanhouse -womaning -womanise -womanised -womanises -womanish -womanishly -womanishness -womanising -womanism -womanist -womanity -womanization -womanize -womanized -womanizer -womanizers -womanizes -womanizing -womankind -womankinds -womanless -womanly -womanlier -womanliest -womanlihood -womanlike -womanlikeness -womanliness -womanlinesses -woman-loving -woman-mad -woman-made -woman-man -womanmuckle -woman-murdering -womanness -womanpost -womanpower -womanproof -woman-proud -woman-ridden -womans -woman's -woman-servant -woman-shy -womanship -woman-suffrage -woman-suffragist -woman-tended -woman-vested -womanways -woman-wary -womanwise -womb -wombat -wombats -wombed -womb-enclosed -womby -wombier -wombiest -womble -womb-lodged -wombs -womb's -wombside -wombstone -Womelsdorf -women -womenfolk -womenfolks -womenkind -women's -womenswear -womera -womerah -womeras -wommala -wommera -wommerah -wommerala -wommeras -womp -womplit -womps -Won -Wonacott -Wonalancet -Wonder -wonder-beaming -wonder-bearing -wonderberry -wonderberries -wonderbright -wonder-charmed -wondercraft -wonderdeed -wonder-dumb -wondered -wonderer -wonderers -wonder-exciting -wonder-fed -wonderful -wonderfuller -wonderfully -wonderfulness -wonderfulnesses -wonder-hiding -wondering -wonderingly -wonderland -wonderlandish -wonderlands -wonderless -wonderlessness -wonder-loving -wonderment -wonderments -wonder-mocking -wondermonger -wondermongering -wonder-promising -wonder-raising -wonders -wonder-seeking -wonder-sharing -wonder-smit -wondersmith -wonder-smitten -wondersome -wonder-stirring -wonder-stricken -wonder-striking -wonderstrong -wonderstruck -wonder-struck -wonder-teeming -wonder-waiting -wonderwell -wonderwoman -wonderwork -wonder-work -wonder-worker -wonder-working -wonderworthy -wonder-wounded -wonder-writing -wondie -wondrous -wondrously -wondrousness -wondrousnesses -wone -wonegan -Wonewoc -Wong -wonga -wongah -Wongara -wonga-wonga -wongen -wongshy -wongsky -woning -wonk -wonky -wonkier -wonkiest -wonks -wonna -wonned -wonner -wonners -Wonnie -wonning -wonnot -wons -Wonsan -wont -won't -wont-believer -wonted -wontedly -wontedness -wonting -wont-learn -wontless -wonton -wontons -wonts -wont-wait -wont-work -Woo -wooable -Wood -Woodacre -woodagate -Woodall -Woodard -woodbark -Woodberry -woodbin -woodbind -woodbinds -Woodbine -woodbine-clad -woodbine-covered -woodbined -woodbines -woodbine-wrought -woodbins -woodblock -wood-block -woodblocks -woodborer -wood-boring -wood-born -woodbound -Woodbourne -woodbox -woodboxes -wood-bred -Woodbridge -wood-built -Woodbury -woodburytype -Woodburn -woodburning -woodbush -woodcarver -wood-carver -woodcarvers -woodcarving -woodcarvings -wood-cased -woodchat -woodchats -woodchopper -woodchoppers -woodchopping -woodchuck -woodchucks -woodchuck's -woodcoc -Woodcock -woodcockize -woodcocks -woodcock's -woodcracker -woodcraf -woodcraft -woodcrafter -woodcrafty -woodcraftiness -woodcrafts -woodcraftsman -woodcreeper -wood-crowned -woodcut -woodcuts -woodcutter -wood-cutter -woodcutters -woodcutting -Wooddale -wood-dried -wood-dwelling -wood-eating -wooded -wood-embosomed -wood-embossing -Wooden -wooden-barred -wooden-bottom -wood-encumbered -woodendite -woodener -woodenest -wooden-faced -wooden-featured -woodenhead -woodenheaded -wooden-headed -woodenheadedness -wooden-headedness -wooden-hooped -wooden-hulled -woodeny -wooden-legged -woodenly -wooden-lined -woodenness -woodennesses -wooden-pinned -wooden-posted -wooden-seated -wooden-shoed -wooden-sided -wooden-soled -wooden-tined -wooden-walled -woodenware -woodenweary -wooden-wheeled -wood-faced -woodfall -wood-fibered -Woodfield -woodfish -Woodford -wood-fringed -woodgeld -wood-girt -woodgrain -woodgraining -woodgrouse -woodgrub -woodhack -woodhacker -Woodhead -woodhen -wood-hen -woodhens -woodhewer -wood-hewing -woodhole -wood-hooped -woodhorse -Woodhouse -woodhouses -Woodhull -woodhung -Woody -woodyard -Woodie -woodier -woodies -woodiest -woodine -woodiness -woodinesses -wooding -Woodinville -woodish -woody-stemmed -woodjobber -wood-keyed -woodkern -wood-kern -woodknacker -Woodlake -woodland -woodlander -woodlands -woodlark -woodlarks -Woodlawn -Woodleaf -Woodley -woodless -woodlessness -woodlet -woodly -woodlike -Woodlyn -woodlind -wood-lined -woodlocked -woodlore -woodlores -woodlot -woodlots -woodlouse -wood-louse -woodmaid -Woodman -woodmancraft -woodmanship -wood-mat -woodmen -Woodmere -woodmonger -woodmote -wood-nep -woodness -wood-nymph -woodnote -wood-note -woodnotes -woodoo -wood-paneled -wood-paved -woodpeck -woodpecker -woodpeckers -woodpecker's -woodpenny -wood-pigeon -woodpile -woodpiles -wood-planing -woodprint -wood-queest -wood-quest -woodranger -woodreed -woodreeve -woodrick -woodrime -Woodring -wood-rip -woodris -woodrock -woodroof -wood-roofed -Woodrow -woodrowel -Woodruff -woodruffs -woodrush -Woods -Woodsboro -woodscrew -Woodscross -wood-sear -Woodser -woodsere -Woodsfield -wood-sheathed -woodshed -woodshedde -woodshedded -woodsheddi -woodshedding -woodsheds -woodship -woodshock -Woodshole -woodshop -woodsy -Woodsia -woodsias -woodside -woodsier -woodsiest -woodsilver -woodskin -wood-skirted -woodsman -woodsmen -Woodson -woodsorrel -wood-sour -wood-spirit -woodspite -Woodstock -wood-stock -Woodston -woodstone -Woodstown -Woodsum -Woodsville -wood-swallow -woodturner -woodturning -wood-turning -Woodville -woodwale -woodwall -wood-walled -Woodward -Woodwardia -woodwardship -woodware -woodwax -woodwaxen -woodwaxes -woodwind -woodwinds -woodwise -woodwork -woodworker -woodworking -woodworks -woodworm -woodworms -Woodworth -woodwose -woodwright -wooed -wooer -wooer-bab -wooers -woof -woofed -woofell -woofer -woofers -woofy -woofing -woofs -woohoo -wooing -wooingly -wool -wool-backed -wool-bearing -wool-bundling -wool-burring -wool-cleaning -wool-clipper -wool-coming -Woolcott -woold -woolded -woolder -wool-dyed -woolding -Wooldridge -wool-drying -wool-eating -wooled -woolen -woolen-clad -woolenet -woolenette -woolen-frocked -woolenization -woolenize -woolens -woolen-stockinged -wooler -woolers -woolert -Woolf -woolfell -woolfells -wool-flock -Woolford -wool-fringed -woolgather -wool-gather -woolgatherer -woolgathering -wool-gathering -woolgatherings -woolgrower -woolgrowing -wool-growing -woolhat -woolhats -woolhead -wool-hetchel -wooly -woolie -woolier -woolies -wooliest -wooly-headed -wooliness -wool-laden -woolled -Woolley -woollen -woollen-draper -woollenize -woollens -woolly -woollybutt -woolly-butted -woolly-coated -woollier -woollies -woolliest -woolly-haired -woolly-haried -woollyhead -woolly-head -woolly-headed -woolly-headedness -woollyish -woollike -woolly-leaved -woolly-looking -woolly-minded -woolly-mindedness -wool-lined -woolliness -woolly-pated -woolly-podded -woolly-tailed -woolly-white -woolly-witted -Woollum -woolman -woolmen -wool-oerburdened -woolpack -wool-pack -wool-packing -woolpacks -wool-pated -wool-picking -woolpress -wool-producing -wool-rearing -Woolrich -wools -woolsack -woolsacks -woolsaw -woolsey -woolshearer -woolshearing -woolshears -woolshed -woolsheds -woolskin -woolskins -Woolson -woolsorter -woolsorting -woolsower -wool-staple -woolstapling -wool-stapling -Woolstock -woolulose -Woolwa -woolward -woolwasher -woolweed -woolwheel -wool-white -Woolwich -woolwinder -Woolwine -wool-witted -wool-woofed -woolwork -wool-work -woolworker -woolworking -Woolworth -woom -woomer -Woomera -woomerah -woomerang -woomeras -woomp -woomping -woon -woons -Woonsocket -woops -woopsed -woopses -woopsing -woorali -wooralis -woorari -wooraris -woordbook -woos -woosh -wooshed -wooshes -wooshing -Wooster -Woosung -Wootan -Woothen -Wooton -Wootten -wootz -woozy -woozier -wooziest -woozily -wooziness -woozinesses -woozle -wop -woppish -WOPR -wops -wopsy -worble -Worcester -Worcestershire -Word -wordable -wordably -wordage -wordages -word-beat -word-blind -wordbook -word-book -wordbooks -word-bound -wordbreak -word-breaking -wordbuilding -word-catcher -word-catching -word-charged -word-clad -word-coiner -word-compelling -word-conjuring -wordcraft -wordcraftsman -word-deaf -word-dearthing -word-driven -worded -Worden -worder -word-formation -word-for-word -word-group -wordhoard -word-hoard -wordy -wordier -wordiers -wordiest -wordily -wordiness -wordinesses -wording -wordings -wordish -wordishly -wordishness -word-jobber -word-juggling -word-keeping -wordle -wordlength -wordless -wordlessly -wordlessness -wordlier -wordlike -wordlore -word-lore -wordlorist -wordmaker -wordmaking -wordman -wordmanship -wordmen -wordmonger -wordmongery -wordmongering -wordness -word-of -word-of-mouth -word-paint -word-painting -wordperfect -word-perfect -word-pity -wordplay -wordplays -wordprocessors -words -word's -word-seller -word-selling -word-slinger -word-slinging -wordsman -wordsmanship -wordsmen -wordsmith -wordspinner -wordspite -word-splitting -wordstar -wordster -word-stock -Wordsworth -Wordsworthian -Wordsworthianism -word-wounded -wore -Work -workability -workable -workableness -workablenesses -workably -workaday -workaholic -workaholics -workaholism -work-and-tumble -work-and-turn -work-and-twist -work-and-whirl -workaway -workbag -workbags -workbank -workbasket -workbaskets -workbench -workbenches -workbench's -workboat -workboats -workbook -workbooks -workbook's -workbox -workboxes -workbrittle -workday -work-day -workdays -worked -worked-up -worker -worker-correspondent -worker-guard -worker-priest -workers -workfare -workfellow -workfile -workfolk -workfolks -workforce -workful -workgirl -workhand -work-harden -work-hardened -workhorse -workhorses -workhorse's -work-hour -workhouse -workhoused -workhouses -worky -workyard -working -working-class -working-day -workingly -workingman -working-man -workingmen -working-out -workings -workingwoman -workingwomen -workingwonan -workless -worklessness -workload -workloads -workloom -workman -workmanly -workmanlike -workmanlikeness -workmanliness -workmanship -workmanships -workmaster -work-master -workmate -workmen -workmistress -workout -workouts -workpan -workpeople -workpiece -workplace -work-producing -workroom -workrooms -works -work-seeking -worksheet -worksheets -workshy -work-shy -work-shyness -workship -workshop -workshops -workshop's -worksome -Worksop -workspace -work-stained -workstand -workstation -workstations -work-stopper -work-study -worktable -worktables -worktime -workup -work-up -workups -workways -work-wan -work-weary -workweek -workweeks -workwise -workwoman -workwomanly -workwomanlike -workwomen -work-worn -Worl -Worland -world -world-abhorring -world-abiding -world-abstracted -world-accepted -world-acknowledged -world-adored -world-adorning -world-advancing -world-advertised -world-affecting -world-agitating -world-alarming -world-altering -world-amazing -world-amusing -world-animating -world-anticipated -world-applauded -world-appreciated -world-apprehended -world-approved -world-argued -world-arousing -world-arresting -world-assuring -world-astonishing -worldaught -world-authorized -world-awed -world-barred -worldbeater -world-beater -worldbeaters -world-beating -world-beheld -world-beloved -world-beset -world-borne -world-bound -world-braving -world-broken -world-bruised -world-building -world-burdened -world-busied -world-canvassed -world-captivating -world-celebrated -world-censored -world-censured -world-challenging -world-changing -world-charming -world-cheering -world-choking -world-chosen -world-circling -world-circulated -world-civilizing -world-classifying -world-cleansing -world-comforting -world-commanding -world-commended -world-compassing -world-compelling -world-condemned -world-confounding -world-connecting -world-conquering -world-conscious -world-consciousness -world-constituted -world-consuming -world-contemning -world-contracting -world-contrasting -world-controlling -world-converting -world-copied -world-corrupted -world-corrupting -world-covering -world-creating -world-credited -world-crippling -world-crowding -world-crushed -world-deaf -world-debated -world-deceiving -world-deep -world-defying -world-delighting -world-delivering -world-demanded -world-denying -world-depleting -world-depressing -world-describing -world-deserting -world-desired -world-desolation -world-despising -world-destroying -world-detached -world-detesting -world-devouring -world-diminishing -world-directing -world-disappointing -world-discovering -world-discussed -world-disgracing -world-dissolving -world-distributed -world-disturbing -world-divided -world-dividing -world-dominating -world-dreaded -world-dwelling -world-echoed -worlded -world-educating -world-embracing -world-eminent -world-encircling -world-ending -world-enlarging -world-enlightening -world-entangled -world-enveloping -world-envied -world-esteemed -world-excelling -world-exciting -world-famed -world-familiar -world-famous -world-favored -world-fearing -world-felt -world-forgetting -world-forgotten -world-forming -world-forsaken -world-forsaking -world-fretted -worldful -world-girdling -world-gladdening -world-governing -world-grasping -world-great -world-grieving -world-hailed -world-hardened -world-hating -world-heating -world-helping -world-honored -world-horrifying -world-humiliating -worldy -world-imagining -world-improving -world-infected -world-informing -world-involving -worldish -world-jaded -world-jeweled -world-joining -world-kindling -world-knowing -world-known -world-lamented -world-lasting -world-leading -worldless -worldlet -world-leveling -worldly -worldlier -worldliest -world-lighting -worldlike -worldlily -worldly-minded -worldly-mindedly -worldly-mindedness -world-line -worldliness -worldlinesses -worldling -worldlings -world-linking -worldly-wise -world-long -world-loving -world-mad -world-made -worldmaker -worldmaking -worldman -world-marked -world-mastering -world-melting -world-menacing -world-missed -world-mocking -world-mourned -world-moving -world-naming -world-needed -world-neglected -world-nigh -world-noised -world-noted -world-obligating -world-observed -world-occupying -world-offending -world-old -world-opposing -world-oppressing -world-ordering -world-organizing -world-outraging -world-overcoming -world-overthrowing -world-owned -world-paralyzing -world-pardoned -world-patriotic -world-peopling -world-perfecting -world-pestering -world-picked -world-pitied -world-plaguing -world-pleasing -world-poisoned -world-pondered -world-populating -world-portioning -world-possessing -world-power -world-practiced -world-preserving -world-prevalent -world-prized -world-producing -world-prohibited -worldproof -world-protected -worldquake -world-raising -world-rare -world-read -world-recognized -world-redeeming -world-reflected -world-regulating -world-rejected -world-rejoicing -world-relieving -world-remembered -world-renewing -world-renowned -world-resented -world-respected -world-restoring -world-revealing -world-reviving -world-revolving -world-ridden -world-round -world-rousing -world-roving -world-ruling -worlds -world's -world-sacred -world-sacrificing -world-sanctioned -world-sated -world-saving -world-scarce -world-scattered -world-schooled -world-scorning -world-seasoned -world-self -world-serving -world-settling -world-shaking -world-sharing -worlds-high -world-shocking -world-sick -world-simplifying -world-sized -world-slandered -world-sobered -world-soiled -world-spoiled -world-spread -world-staying -world-stained -world-startling -world-stirring -world-strange -world-studded -world-subduing -world-sufficing -world-supplying -world-supporting -world-surrounding -world-surveying -world-sustaining -world-swallowing -world-taking -world-taming -world-taught -world-tempted -world-tested -world-thrilling -world-tired -world-tolerated -world-tossing -world-traveler -world-troubling -world-turning -world-uniting -world-used -world-valid -world-valued -world-venerated -world-view -worldway -world-waited -world-wandering -world-wanted -worldward -worldwards -world-wasting -world-watched -world-weary -world-wearied -world-wearily -world-weariness -world-welcome -world-wept -worldwide -world-wide -world-widely -worldwideness -world-wideness -world-winning -world-wise -world-without-end -world-witnessed -world-worn -world-wrecking -Worley -Worlock -WORM -worm-breeding -worm-cankered -wormcast -worm-consumed -worm-destroying -worm-driven -worm-eat -worm-eaten -worm-eatenness -worm-eater -worm-eating -wormed -wormer -wormers -wormfish -wormfishes -wormgear -worm-geared -worm-gnawed -worm-gnawn -wormhole -wormholed -wormholes -wormhood -wormy -Wormian -wormier -wormiest -wormil -wormils -worminess -worming -wormish -worm-killing -wormless -wormlike -wormling -worm-nest -worm-pierced -wormproof -worm-resembling -worm-reserved -worm-riddled -worm-ripe -wormroot -wormroots -Worms -wormseed -wormseeds -worm-shaped -wormship -worm-spun -worm-tongued -wormweed -worm-wheel -wormwood -wormwoods -worm-worn -worm-wrought -worn -worn-down -wornil -wornness -wornnesses -wornout -worn-out -worn-outness -Woronoco -worral -worrel -Worrell -worry -worriable -worry-carl -worricow -worriecow -worried -worriedly -worriedness -worrier -worriers -worries -worrying -worryingly -worriless -worriment -worriments -worryproof -worrisome -worrisomely -worrisomeness -worrit -worrited -worriter -worriting -worrits -worrywart -worrywarts -worrywort -worse -worse-affected -worse-applied -worse-bodied -worse-born -worse-bred -worse-calculated -worse-conditioned -worse-disposed -worse-dispositioned -worse-executed -worse-faring -worse-governed -worse-handled -worse-informed -worse-lighted -worse-mannered -worse-mated -worsement -worsen -worse-named -worse-natured -worsened -worseness -worsening -worsens -worse-opinionated -worse-ordered -worse-paid -worse-performed -worse-printed -worser -worse-rated -worserment -worse-ruled -worses -worse-satisfied -worse-served -worse-spent -worse-succeeding -worset -worse-taught -worse-tempered -worse-thoughted -worse-timed -worse-typed -worse-treated -worsets -worse-utilized -worse-wanted -worse-wrought -Worsham -Worship -worshipability -worshipable -worshiped -worshiper -worshipers -worshipful -worshipfully -worshipfulness -worshiping -worshipingly -worshipless -worship-paying -worshipped -worshipper -worshippers -worshipping -worshippingly -worships -worshipworth -worshipworthy -worsle -Worsley -worssett -worst -worst-affected -worst-bred -worst-cast -worst-damaged -worst-deserving -worst-disposed -worsted -worsteds -worst-fashioned -worst-formed -worst-governed -worst-informed -worsting -worst-managed -worst-manned -worst-paid -worst-printed -worst-ruled -worsts -worst-served -worst-taught -worst-timed -worst-treated -worst-used -worst-wanted -worsum -wort -Worth -Wortham -worthed -worthful -worthfulness -worthy -worthier -worthies -worthiest -worthily -worthiness -worthinesses -Worthing -Worthington -worthless -worthlessly -worthlessness -worthlessnesses -worths -worthship -Worthville -worthward -worthwhile -worth-while -worthwhileness -worth-whileness -wortle -Worton -worts -wortworm -wos -wosbird -wosith -wosome -wost -wostteth -wot -Wotan -wote -wotlink -wots -wotted -wottest -wotteth -wotting -Wotton -woubit -wouch -wouf -wough -wouhleche -Wouk -would -would-be -wouldest -would-have-been -woulding -wouldn -wouldnt -wouldn't -wouldst -woulfe -wound -woundability -woundable -woundableness -wound-dressing -wounded -woundedly -wounder -wound-fevered -wound-free -woundy -woundily -wound-inflicting -wounding -woundingly -woundless -woundly -wound-marked -wound-plowed -wound-producing -wounds -wound-scarred -wound-secreted -wound-up -wound-worn -woundwort -woundworth -wourali -wourari -wournil -woustour -wou-wou -wove -woven -wovens -woven-wire -Wovoka -WOW -wowed -wowening -wowing -wows -wowser -wowserdom -wowsery -wowserian -wowserish -wowserism -wowsers -wowt -wow-wow -wowwows -Woxall -WP -WPA -WPB -WPC -wpm -WPS -WR -wr- -WRA -WRAAC -WRAAF -wrabbe -wrabill -WRAC -wrack -wracked -wracker -wrackful -wracking -wracks -Wracs -WRAF -Wrafs -wrager -wraggle -Wray -wrayful -wrainbolt -wrainstaff -wrainstave -wraist -wraith -wraithe -wraithy -wraithlike -wraiths -wraitly -wraker -wramp -Wran -Wrand -wrang -Wrangel -Wrangell -wrangle -wrangled -wrangler -wranglers -wranglership -wrangles -wranglesome -wrangling -wranglingly -wrangs -wranny -wrannock -WRANS -wrap -wrap- -wraparound -wrap-around -wraparounds -wraple -wrappage -wrapped -wrapper -wrapperer -wrappering -wrappers -wrapper's -wrapping -wrapping-gown -wrappings -wraprascal -wrap-rascal -wrapround -wrap-round -wraps -wrap's -wrapt -wrapup -wrap-up -wrasse -wrasses -wrassle -wrassled -wrassles -wrast -wrastle -wrastled -wrastler -wrastles -wrastling -wratack -Wrath -wrath-allaying -wrath-bewildered -wrath-consumed -wrathed -wrath-faced -wrathful -wrathful-eyed -wrathfully -wrathfulness -wrathy -wrathier -wrathiest -wrathily -wrathiness -wrathing -wrath-kindled -wrath-kindling -wrathless -wrathlike -wrath-provoking -wraths -wrath-swollen -wrath-wreaking -wraw -wrawl -wrawler -wraxle -wraxled -wraxling -wreak -wreaked -wreaker -wreakers -wreakful -wreaking -wreakless -wreaks -wreat -wreath -wreathage -wreath-crowned -wreath-drifted -wreathe -wreathed -wreathen -wreather -wreathes -wreath-festooned -wreathy -wreathing -wreathingly -wreathless -wreathlet -wreathlike -wreathmaker -wreathmaking -wreathpiece -wreaths -wreathwise -wreathwork -wreathwort -wreath-wrought -wreck -wreckage -wreckages -wreck-bestrewn -wreck-causing -wreck-devoted -wrecked -wrecker -wreckers -wreckfish -wreckfishes -wreck-free -wreckful -wrecky -wrecking -wreckings -wreck-raising -wrecks -wreck-strewn -wreck-threatening -Wrekin -Wren -Wrench -wrenched -wrencher -wrenches -wrenching -wrenchingly -wrenlet -wrenlike -Wrennie -Wrens -wren's -Wrenshall -wrentail -Wrentham -wren-thrush -wren-tit -WRESAT -wrest -wrestable -wrested -wrester -wresters -wresting -wrestingly -wrestle -wrestled -wrestler -wrestlerlike -wrestlers -wrestles -wrestling -wrestlings -wrests -wretch -wretched -wretcheder -wretchedest -wretched-fated -wretchedly -wretched-looking -wretchedness -wretchednesses -wretched-witched -wretches -wretchless -wretchlessly -wretchlessness -wretchock -Wrexham -wry -wry-armed -wrybill -wry-billed -wrible -wry-blown -wricht -Wrycht -wrick -wricked -wricking -wricks -wride -wried -wry-eyed -wrier -wryer -wries -wriest -wryest -wry-faced -wry-formed -wrig -wriggle -wriggled -wriggler -wrigglers -wriggles -wrigglesome -wrigglework -wriggly -wrigglier -wriggliest -wriggling -wrigglingly -Wright -wrightine -wrightry -Wrights -Wrightsboro -Wrightson -Wrightstown -Wrightsville -Wrightwood -Wrigley -wry-guided -wrihte -wrying -wry-legged -wryly -wry-looked -wrymouth -wry-mouthed -wrymouths -wrimple -wryneck -wrynecked -wry-necked -wry-neckedness -wrynecks -wryness -wrynesses -wring -wringbolt -wringed -wringer -wringers -wringing -wringing-wet -wringle -wringman -wrings -wringstaff -wringstaves -wrinkle -wrinkleable -wrinkle-coated -wrinkled -wrinkled-browed -wrinkled-cheeked -wrinkledy -wrinkled-leaved -wrinkledness -wrinkled-old -wrinkled-shelled -wrinkled-visaged -wrinkle-faced -wrinkle-fronted -wrinkleful -wrinkle-furrowed -wrinkleless -wrinkle-making -wrinkleproof -wrinkles -wrinkle-scaled -wrinklet -wrinkly -wrinklier -wrinkliest -wrinkling -wry-nosed -wry-set -wrist -wristband -wristbands -wristbone -wristdrop -wrist-drop -wristed -wrister -wristfall -wristy -wristier -wristiest -wristikin -wristlet -wristlets -wristlock -wrists -wrist's -wristwatch -wristwatches -wristwatch's -wristwork -writ -writability -writable -wrytail -wry-tailed -writation -writative -write -writeable -write-down -writee -write-in -writeoff -write-off -writeoffs -writer -writeress -writer-in-residence -writerly -writerling -writers -writer's -writership -writes -writeup -write-up -writeups -writh -writhe -writhed -writhedly -writhedness -writhen -writheneck -writher -writhers -writhes -writhy -writhing -writhingly -writhled -writing -writinger -Writings -writing-table -writmaker -writmaking -wry-toothed -writproof -writs -writ's -written -writter -wrive -wrixle -wrizzled -WRNS -wrnt -wro -wrocht -wroke -wroken -wrong -wrong-directed -wrongdo -wrongdoer -wrong-doer -wrongdoers -wrongdoing -wrongdoings -wronged -wrong-ended -wrong-endedness -wronger -wrongers -wrongest -wrong-feigned -wrongfile -wrong-foot -wrongful -wrongfuly -wrongfully -wrongfulness -wrongfulnesses -wrong-gotten -wrong-grounded -wronghead -wrongheaded -wrong-headed -wrongheadedly -wrong-headedly -wrongheadedness -wrong-headedness -wrongheadednesses -wronghearted -wrongheartedly -wrongheartedness -wronging -wrongish -wrong-jawed -wrongless -wronglessly -wrongly -wrong-minded -wrong-mindedly -wrong-mindedness -wrongness -wrong-ordered -wrongous -wrongously -wrongousness -wrong-principled -wrongrel -wrongs -wrong-screwed -wrong-thinking -wrong-timed -wrong'un -wrong-voting -wrong-way -wrongwise -Wronskian -wroot -wrossle -wrote -wroth -wrothe -wrothful -wrothfully -wrothy -wrothily -wrothiness -wrothly -wrothsome -Wrottesley -wrought -wrought-iron -wrought-up -wrox -WRT -wrung -wrungness -WRVS -WS -w's -Wsan -WSD -W-shaped -WSI -WSJ -WSMR -WSN -WSP -WSW -wt -Wtemberg -WTF -WTR -WU -Wuchang -Wuchereria -wud -wuddie -wudge -wudu -wuff -wugg -wuggishness -Wuhan -Wuhsien -Wuhu -wulder -Wulf -Wulfe -wulfenite -Wulfila -wulk -wull -wullawins -wullcat -Wullie -wulliwa -Wu-lu-mu-ch'i -wumble -wumman -wummel -Wun -Wunder -wunderbar -Wunderkind -Wunderkinder -Wunderkinds -Wundt -Wundtian -wungee -wung-out -wunna -wunner -wunsome -wuntee -wup -WUPPE -Wuppertal -wur -wurley -wurleys -wurly -wurlies -Wurm -wurmal -Wurmian -wurraluh -wurrung -wurrup -wurrus -wurset -Wurst -Wurster -wursts -Wurtsboro -Wurttemberg -Wurtz -wurtzilite -wurtzite -wurtzitic -Wurzburg -Wurzburger -wurzel -wurzels -wus -wush -Wusih -wusp -wuss -wusser -wust -wu-su -wut -wuther -wuthering -Wutsin -wu-wei -wuzu -wuzzer -wuzzy -wuzzle -wuzzled -wuzzling -WV -WVa -WVS -WW -WW2 -WWFO -WWI -WWII -WWMCCS -WWOPS -X -X25 -XA -xalostockite -Xanadu -xanth- -Xantha -xanthaline -xanthamic -xanthamid -xanthamide -xanthan -xanthane -xanthans -xanthate -xanthates -xanthation -xanthd- -Xanthe -xanthein -xantheins -xanthelasma -xanthelasmic -xanthelasmoidea -xanthene -xanthenes -Xanthian -xanthic -xanthid -xanthide -Xanthidium -xanthydrol -xanthyl -xanthin -xanthindaba -xanthine -xanthines -xanthins -Xanthinthique -xanthinuria -xanthione -Xanthippe -xanthism -Xanthisma -xanthite -Xanthium -xanthiuria -xantho- -xanthocarpous -Xanthocephalus -Xanthoceras -Xanthochroi -xanthochroia -Xanthochroic -xanthochroid -xanthochroism -xanthochromia -xanthochromic -xanthochroous -xanthocyanopy -xanthocyanopia -xanthocyanopsy -xanthocyanopsia -xanthocobaltic -xanthocone -xanthoconite -xanthocreatinine -xanthoderm -xanthoderma -xanthodermatous -xanthodont -xanthodontous -xanthogen -xanthogenamic -xanthogenamide -xanthogenate -xanthogenic -xantholeucophore -xanthoma -xanthomas -xanthomata -xanthomatosis -xanthomatous -Xanthomelanoi -xanthomelanous -xanthometer -xanthomyeloma -Xanthomonas -xanthone -xanthones -xanthophane -Xanthophyceae -xanthophyl -xanthophyll -xanthophyllic -xanthophyllite -xanthophyllous -xanthophore -xanthophose -Xanthopia -xanthopicrin -xanthopicrite -xanthoproteic -xanthoprotein -xanthoproteinic -xanthopsia -xanthopsydracia -xanthopsin -xanthopterin -xanthopurpurin -xanthorhamnin -Xanthorrhiza -Xanthorrhoea -xanthosiderite -xanthosis -Xanthosoma -xanthospermous -xanthotic -Xanthoura -xanthous -Xanthoxalis -xanthoxenite -xanthoxylin -xanthrochroid -xanthuria -Xanthus -Xantippe -xarque -xat -Xaverian -Xavier -Xaviera -Xavler -x-axis -XB -XBT -xc -XCF -X-chromosome -xcl -xctl -XD -x-disease -xdiv -XDMCP -XDR -Xe -xebec -xebecs -xed -x-ed -Xema -xeme -xen- -Xena -xenacanthine -Xenacanthini -xenagogy -xenagogue -Xenarchi -Xenarthra -xenarthral -xenarthrous -xenelasy -xenelasia -Xenia -xenial -xenian -xenias -xenic -xenically -Xenicidae -Xenicus -xenyl -xenylamine -xenium -Xeno -xeno- -xenobiology -xenobiologies -xenobiosis -xenoblast -xenochia -xenocyst -Xenoclea -Xenocratean -Xenocrates -Xenocratic -xenocryst -xenocrystic -xenoderm -xenodiagnosis -xenodiagnostic -xenodocheion -xenodochy -xenodochia -xenodochium -xenogamy -xenogamies -xenogamous -xenogeneic -xenogenesis -xenogenetic -xenogeny -xenogenic -xenogenies -xenogenous -xenoglossia -xenograft -xenolite -xenolith -xenolithic -xenoliths -xenomania -xenomaniac -Xenomi -Xenomorpha -xenomorphic -xenomorphically -xenomorphosis -xenon -xenons -xenoparasite -xenoparasitism -xenopeltid -Xenopeltidae -Xenophanean -Xenophanes -xenophya -xenophile -xenophilism -xenophilous -xenophobe -xenophobes -xenophoby -xenophobia -xenophobian -xenophobic -xenophobism -Xenophon -Xenophonic -Xenophontean -Xenophontian -Xenophontic -Xenophontine -Xenophora -xenophoran -Xenophoridae -xenophthalmia -xenoplastic -xenopodid -Xenopodidae -xenopodoid -Xenopsylla -xenopteran -Xenopteri -xenopterygian -Xenopterygii -Xenopus -Xenorhynchus -Xenos -xenosaurid -Xenosauridae -xenosauroid -Xenosaurus -xenotime -xenotropic -Xenurus -xer- -xerafin -xeransis -Xeranthemum -xerantic -xeraphin -xerarch -xerasia -Xeres -xeric -xerically -xeriff -xero- -xerocline -xeroderma -xerodermatic -xerodermatous -xerodermia -xerodermic -xerogel -xerographer -xerography -xerographic -xerographically -xeroma -xeromata -xeromenia -xeromyron -xeromyrum -xeromorph -xeromorphy -xeromorphic -xeromorphous -xeronate -xeronic -xerophagy -xerophagia -xerophagies -xerophil -xerophile -xerophily -Xerophyllum -xerophilous -xerophyte -xerophytic -xerophytically -xerophytism -xerophobous -xerophthalmy -xerophthalmia -xerophthalmic -xerophthalmos -xeroprinting -xerosere -xeroseres -xeroses -xerosis -xerostoma -xerostomia -xerotes -xerotherm -xerothermic -xerotic -xerotocia -xerotripsis -Xerox -xeroxed -xeroxes -xeroxing -Xerus -xeruses -Xerxes -Xever -XFE -XFER -x-height -x-high -Xhosa -xi -Xian -Xicak -Xicaque -XID -XIE -xii -xiii -xyl- -xyla -xylan -xylans -xylanthrax -Xylaria -Xylariaceae -xylate -Xyleborus -xylem -xylems -xylene -xylenes -xylenyl -xylenol -xyletic -Xylia -xylic -xylidic -xylidin -xylidine -xylidines -xylidins -xylyl -xylylene -xylylic -xylyls -Xylina -xylindein -xylinid -xylite -xylitol -xylitols -xylitone -xylo -xylo- -xylobalsamum -xylocarp -xylocarpous -xylocarps -Xylocopa -xylocopid -Xylocopidae -xylogen -xyloglyphy -xylograph -xylographer -xylography -xylographic -xylographical -xylographically -xyloid -xyloidin -xyloidine -xyloyl -xylol -xylology -xylols -xyloma -xylomancy -xylomas -xylomata -xylometer -Xylon -xylonic -Xylonite -xylonitrile -Xylophaga -xylophagan -xylophage -xylophagid -Xylophagidae -xylophagous -Xylophagus -xylophilous -xylophone -xylophones -xylophonic -xylophonist -xylophonists -Xylopia -xylopyrographer -xylopyrography -xyloplastic -xylopolist -xyloquinone -xylorcin -xylorcinol -xylose -xyloses -xylosid -xyloside -Xylosma -xylostroma -xylostromata -xylostromatoid -xylotile -xylotypography -xylotypographic -xylotomy -xylotomic -xylotomical -xylotomies -xylotomist -xylotomous -Xylotrya -XIM -Ximena -Ximenes -Xymenes -Ximenez -Ximenia -Xina -Xinca -Xincan -Xing -x'ing -x-ing -Xingu -Xinhua -xint -XINU -xi-particle -Xipe -Xipe-totec -xiphi- -Xiphias -Xiphydria -xiphydriid -Xiphydriidae -xiphihumeralis -xiphiid -Xiphiidae -xiphiiform -xiphioid -xiphiplastra -xiphiplastral -xiphiplastron -xiphisterna -xiphisternal -xiphisternum -xiphistna -Xiphisura -xiphisuran -Xiphiura -Xiphius -xiphocostal -xiphodynia -Xiphodon -Xiphodontidae -xiphoid -xyphoid -xiphoidal -xiphoidian -xiphoids -xiphopagic -xiphopagous -xiphopagus -xiphophyllous -xiphosterna -xiphosternum -Xiphosura -xiphosuran -xiphosure -Xiphosuridae -xiphosurous -Xiphosurus -xiphuous -Xiphura -Xiraxara -Xyrichthys -xyrid -Xyridaceae -xyridaceous -Xyridales -Xyris -xis -xyst -xyster -xysters -xysti -xystoi -xystos -xysts -xystum -xystus -xiv -xix -xyz -XL -x-line -Xmas -xmases -XMI -XMM -XMS -XMTR -XN -Xn. -XNS -Xnty -Xnty. -XO -xoana -xoanon -xoanona -Xograph -xonotlite -Xopher -XOR -Xosa -x-out -XP -XPG -XPG2 -XPORT -XQ -xr -x-radiation -xray -X-ray -X-ray-proof -xref -XRM -xs -x's -XSECT -X-shaped -x-stretcher -XT -Xt. -XTAL -XTC -Xty -Xtian -xu -XUI -x-unit -xurel -Xuthus -XUV -xvi -XVIEW -xvii -xviii -xw -X-wave -XWSDS -xx -xxi -xxii -xxiii -xxiv -xxv -xxx -Z -z. -ZA -Zaandam -Zabaean -zabaglione -zabaione -zabaiones -Zabaism -zabajone -zabajones -Zaberma -zabeta -Zabian -Zabism -zaboglione -zabra -Zabrina -Zabrine -Zabrze -zabti -zabtie -Zabulon -zaburro -zac -Zacarias -Zacata -zacate -Zacatec -Zacatecas -Zacateco -zacaton -zacatons -Zaccaria -Zacek -Zach -Zachar -Zachary -Zacharia -Zachariah -Zacharias -Zacharie -Zachery -Zacherie -Zachow -zachun -Zacynthus -Zack -Zackary -Zackariah -Zacks -zad -Zadack -Zadar -zaddick -zaddickim -zaddik -zaddikim -Zadkiel -Zadkine -Zadoc -Zadok -Zadokite -zadruga -zaffar -zaffars -zaffer -zaffers -zaffir -zaffirs -zaffre -zaffree -zaffres -zafree -zaftig -zag -zagaie -Zagazig -zagged -zagging -Zaglossus -Zagreb -Zagreus -zags -zaguan -Zagut -Zahara -Zahavi -Zahedan -Zahidan -Zahl -zayat -zaibatsu -Zaid -zayin -zayins -zaikai -zaikais -Zailer -zain -Zaire -Zairean -zaires -zairian -zairians -Zaitha -Zak -zakah -Zakaria -Zakarias -zakat -Zakynthos -zakkeu -Zaklohpakap -zakuska -zakuski -zalambdodont -Zalambdodonta -zalamboodont -Zalea -Zales -Zaleski -Zaller -Zalma -Zalman -Zalophus -Zalucki -Zama -zaman -zamang -zamarra -zamarras -zamarro -zamarros -Zambac -Zambal -Zambezi -Zambezian -Zambia -Zambian -zambians -zambo -Zamboanga -zambomba -zamboorak -zambra -Zamenhof -Zamenis -Zamia -Zamiaceae -zamias -Zamicrus -zamindar -zamindari -zamindary -zamindars -zaminder -Zamir -Zamora -zamorin -zamorine -zamouse -Zampardi -Zampino -zampogna -Zan -zanana -zananas -Zanclidae -Zanclodon -Zanclodontidae -Zande -zander -zanders -zandmole -Zandra -Zandt -Zane -zanella -Zanesfield -Zaneski -Zanesville -Zaneta -zany -Zaniah -zanier -zanies -zaniest -zanyish -zanyism -zanily -zaniness -zaninesses -zanyship -zanjero -zanjon -zanjona -Zannichellia -Zannichelliaceae -Zannini -Zanoni -Zanonia -zant -Zante -Zantedeschia -zantewood -Zanthorrhiza -Zanthoxylaceae -Zanthoxylum -Zantiot -zantiote -Zantos -ZANU -Zanuck -zanza -Zanzalian -zanzas -Zanze -Zanzibar -Zanzibari -zap -Zapara -Zaparan -Zaparo -Zaparoan -zapas -Zapata -zapateado -zapateados -zapateo -zapateos -zapatero -zaphara -Zaphetic -zaphrentid -Zaphrentidae -Zaphrentis -zaphrentoid -Zapodidae -Zapodinae -Zaporogian -Zaporogue -Zaporozhe -Zaporozhye -zapota -zapote -Zapotec -Zapotecan -Zapoteco -Zappa -zapped -zapper -zappers -zappy -zappier -zappiest -zapping -zaps -zaptiah -zaptiahs -zaptieh -zaptiehs -Zaptoeca -ZAPU -zapupe -Zapus -Zaqaziq -zaqqum -Zaque -zar -Zara -zarabanda -Zaragoza -Zarah -Zaramo -Zarathustra -Zarathustrian -Zarathustrianism -Zarathustric -Zarathustrism -zaratite -zaratites -Zardushti -Zare -zareba -zarebas -Zared -zareeba -zareebas -Zarema -Zaremski -zarf -zarfs -Zarga -Zarger -Zaria -zariba -zaribas -Zarla -zarnec -zarnich -zarp -Zarpanit -zarzuela -zarzuelas -Zashin -Zaslow -zastruga -zastrugi -Zasuwa -zat -zati -zattare -Zaurak -Zauschneria -Zavala -Zavalla -Zavijava -Zavras -Zawde -zax -zaxes -z-axes -z-axis -zazen -za-zen -zazens -ZB -Z-bar -ZBB -ZBR -ZD -Zea -zeal -Zealand -Zealander -zealanders -zeal-blind -zeal-consuming -zealed -zealful -zeal-inflamed -zeal-inspiring -zealless -zeallessness -Zealot -zealotic -zealotical -zealotism -zealotist -zealotry -zealotries -zealots -zealous -zealousy -zealously -zealousness -zealousnesses -zeal-pretending -zealproof -zeal-quenching -zeals -zeal-scoffing -zeal-transported -zeal-worthy -Zearing -zeatin -zeatins -zeaxanthin -Zeb -Zeba -Zebada -Zebadiah -Zebapda -Zebe -zebec -zebeck -zebecks -zebecs -Zebedee -Zeboim -zebra -zebra-back -zebrafish -zebrafishes -zebraic -zebralike -zebra-plant -zebras -zebra's -zebrass -zebrasses -zebra-tailed -zebrawood -Zebrina -zebrine -zebrinny -zebrinnies -zebroid -zebrula -zebrule -zebu -zebub -Zebulen -Zebulon -Zebulun -Zebulunite -zeburro -zebus -zecchin -zecchini -zecchino -zecchinos -zecchins -Zech -Zech. -Zechariah -zechin -zechins -Zechstein -Zeculon -Zed -Zedekiah -zedoary -zedoaries -zeds -zee -Zeeba -Zeebrugge -zeed -zeekoe -Zeeland -Zeelander -Zeeman -Zeena -zees -Zeffirelli -Zeguha -Zehe -zehner -Zeidae -Zeidman -Zeiger -Zeigler -zeilanite -Zeiler -zein -zeins -zeism -Zeiss -Zeist -Zeitgeist -zeitgeists -Zeitler -zek -Zeke -zeks -Zel -Zela -Zelanian -zelant -zelator -zelatrice -zelatrix -Zelazny -Zelda -Zelde -Zelienople -Zelig -Zelikow -Zelkova -zelkovas -Zell -Zella -Zellamae -Zelle -Zellerbach -Zellner -Zellwood -Zelma -Zelmira -zelophobia -Zelos -zelotic -zelotypia -zelotypie -Zelten -Zeltinger -zeme -zemeism -zemi -zemiism -zemimdari -zemindar -zemindari -zemindary -zemindars -zemmi -zemni -zemstroist -Zemstrom -zemstva -zemstvo -zemstvos -Zen -Zena -Zenaga -Zenaida -zenaidas -Zenaidinae -Zenaidura -zenana -zenanas -Zenas -Zend -Zenda -Zendah -Zend-Avesta -Zend-avestaic -Zendic -zendician -zendik -zendikite -zendo -zendos -Zenelophon -Zenger -Zenia -Zenic -zenick -Zenist -zenith -zenithal -zenith-pole -zeniths -zenithward -zenithwards -Zennas -Zennie -Zeno -Zenobia -zenocentric -zenography -zenographic -zenographical -Zenonian -Zenonic -zentner -zenu -zenzuic -Zeoidei -zeolite -zeolites -zeolitic -zeolitization -zeolitize -zeolitized -zeolitizing -Zeona -zeoscope -Zep -Zeph -Zeph. -Zephan -Zephaniah -zepharovichite -Zephyr -zephiran -zephyranth -Zephyranthes -zephyrean -zephyr-fanned -zephyr-haunted -Zephyrhills -zephyry -zephyrian -Zephyrinus -zephyr-kissed -zephyrless -zephyrlike -zephyrous -zephyrs -Zephyrus -Zeppelin -zeppelins -zequin -zer -Zeralda -zerda -zereba -Zerelda -Zerk -Zerla -ZerlaZerlina -Zerlina -Zerline -Zerma -zermahbub -Zermatt -Zernike -zero -zeroaxial -zero-dimensional -zero-divisor -zeroed -zeroes -zeroeth -zeroing -zeroize -zero-lift -zero-rated -zeros -zeroth -Zero-zero -Zerubbabel -zerumbet -Zervan -Zervanism -Zervanite -zest -zested -zestful -zestfully -zestfulness -zestfulnesses -zesty -zestier -zestiest -zestiness -zesting -zestless -zests -ZETA -zetacism -Zetana -zetas -Zetes -zetetic -Zethar -Zethus -Zetland -Zetta -Zeuctocoelomata -zeuctocoelomatic -zeuctocoelomic -zeugite -Zeuglodon -zeuglodont -Zeuglodonta -Zeuglodontia -Zeuglodontidae -zeuglodontoid -zeugma -zeugmas -zeugmatic -zeugmatically -Zeugobranchia -Zeugobranchiata -zeunerite -Zeus -Zeuxian -Zeuxis -zeuxite -Zeuzera -zeuzerian -Zeuzeridae -ZG -ZGS -Zhang -Zhdanov -Zhitomir -Zhivkov -Zhmud -zho -Zhukov -ZI -Zia -Ziagos -ziamet -ziara -ziarat -zibeline -zibelines -zibelline -zibet -zibeth -zibethone -zibeths -zibetone -zibets -zibetum -Zicarelli -ziczac -zydeco -zydecos -Zidkijah -ziega -zieger -Ziegfeld -Ziegler -Zieglerville -Zielsdorf -zietrisikite -ZIF -ziff -ziffs -zig -zyg- -zyga -zygadenin -zygadenine -Zygadenus -zygadite -Zygaena -zygaenid -Zygaenidae -zygal -zigamorph -zigan -ziganka -zygantra -zygantrum -zygapophyseal -zygapophyses -zygapophysial -zygapophysis -zygenid -Zigeuner -zigged -zigger -zigging -ziggurat -ziggurats -zygion -zygite -Zigmund -Zygnema -Zygnemaceae -zygnemaceous -Zygnemales -Zygnemataceae -zygnemataceous -Zygnematales -zygo- -zygobranch -Zygobranchia -Zygobranchiata -zygobranchiate -Zygocactus -zygodactyl -Zygodactylae -zygodactyle -Zygodactyli -zygodactylic -zygodactylism -zygodactylous -zygodont -zygogenesis -zygogenetic -zygoid -zygolabialis -zygoma -zygomas -zygomata -zygomatic -zygomaticoauricular -zygomaticoauricularis -zygomaticofacial -zygomaticofrontal -zygomaticomaxillary -zygomaticoorbital -zygomaticosphenoid -zygomaticotemporal -zygomaticum -zygomaticus -zygomaxillare -zygomaxillary -zygomycete -Zygomycetes -zygomycetous -zygomorphy -zygomorphic -zygomorphism -zygomorphous -zygon -zygoneure -Zygophyceae -zygophyceous -Zygophyllaceae -zygophyllaceous -Zygophyllum -zygophyte -zygophore -zygophoric -zygopleural -Zygoptera -Zygopteraceae -zygopteran -zygopterid -Zygopterides -Zygopteris -zygopteron -zygopterous -Zygosaccharomyces -zygose -zygoses -zygosis -zygosity -zygosities -zygosperm -zygosphenal -zygosphene -zygosphere -zygosporange -zygosporangium -zygospore -zygosporic -zygosporophore -zygostyle -zygotactic -zygotaxis -zygote -zygotene -zygotenes -zygotes -zygotic -zygotically -zygotoblast -zygotoid -zygotomere -zygous -zygozoospore -Zigrang -zigs -Ziguard -Ziguinchor -zigzag -zigzag-fashion -zigzagged -zigzaggedly -zigzaggedness -zigzagger -zigzaggery -zigzaggy -zigzagging -zigzag-lined -zigzags -zigzag-shaped -zigzagways -zigzagwise -zihar -zikkurat -zikkurats -zikurat -zikurats -zila -Zilber -zilch -zilches -zilchviticetum -Zildjian -zill -Zilla -Zillah -zillahs -zillion -zillions -zillionth -zillionths -zills -Zilpah -Zilvia -Zim -zym- -Zima -zimarra -zymase -zymases -zimb -Zimbabwe -Zimbalist -zimbalon -zimbaloon -zimbi -zyme -zimentwater -zymes -zymic -zymin -zymite -zimme -Zimmer -Zimmerman -Zimmermann -Zimmerwaldian -Zimmerwaldist -zimmi -zimmy -zimmis -zymo- -zimocca -zymochemistry -zymogen -zymogene -zymogenes -zymogenesis -zymogenic -zymogenous -zymogens -zymogram -zymograms -zymoid -zymolyis -zymolysis -zymolytic -zymology -zymologic -zymological -zymologies -zymologist -zymome -zymometer -zymomin -zymophyte -zymophore -zymophoric -zymophosphate -zymoplastic -zymosan -zymosans -zymoscope -zymoses -zymosimeter -zymosis -zymosterol -zymosthenic -zymotechny -zymotechnic -zymotechnical -zymotechnics -zymotic -zymotically -zymotize -zymotoxic -zymurgy -zymurgies -Zina -Zinah -zinc -Zincalo -zincate -zincates -zinc-coated -zinced -zincenite -zinc-etched -zincy -zincic -zincid -zincide -zinciferous -zincify -zincification -zincified -zincifies -zincifying -zincing -zincite -zincites -zincize -Zinck -zincke -zincked -zinckenite -zincky -zincking -zinc-lined -zinco -zinco- -zincode -zincograph -zincographer -zincography -zincographic -zincographical -zincoid -zincolysis -zinco-polar -zincotype -zincous -zinc-roofed -zincs -zinc-sampler -zincum -zincuret -zindabad -Zinder -zindiq -Zindman -zineb -zinebs -Zinfandel -zing -Zingale -zingana -zingani -zingano -zingara -zingare -zingaresca -zingari -zingaro -zinged -zingel -zinger -zingerone -zingers -Zingg -zingy -Zingiber -Zingiberaceae -zingiberaceous -zingiberene -zingiberol -zingiberone -zingier -zingiest -zinging -zings -zinyamunga -zinjanthropi -Zinjanthropus -Zink -zinke -zinked -zinkenite -zinky -zinkiferous -zinkify -zinkified -zinkifies -zinkifying -Zinn -Zinnes -Zinnia -zinnias -zinnwaldite -Zino -zinober -Zinoviev -Zinovievsk -Zins -zinsang -Zinsser -Zinzar -Zinzendorf -Zinziberaceae -zinziberaceous -Zion -Zionism -Zionist -Zionistic -zionists -Zionite -Zionless -Zionsville -Zionville -Zionward -ZIP -Zipa -Zipah -Zipangu -ziphian -Ziphiidae -Ziphiinae -ziphioid -Ziphius -zipless -Zipnick -zipped -zippeite -Zippel -Zipper -zippered -zippering -zippers -zippy -zippier -zippiest -zipping -zippingly -Zippora -Zipporah -zipppier -zipppiest -Zips -zira -zirai -Zirak -ziram -zirams -Zirbanit -zircalloy -zircaloy -zircite -zircofluoride -zircon -zirconate -Zirconia -zirconian -zirconias -zirconic -zirconiferous -zirconifluoride -zirconyl -zirconium -zirconiums -zirconofluoride -zirconoid -zircons -zircon-syenite -Zyrenian -Zirian -Zyrian -Zyryan -Zirianian -zirkelite -zirkite -Zirkle -Zischke -Zysk -Ziska -zit -Zita -Zitah -Zitella -zythem -zither -zitherist -zitherists -zithern -zitherns -zithers -Zythia -zythum -ziti -zitis -zits -zitter -zittern -Zitvaa -zitzit -zitzith -Ziusudra -Ziv -Ziwiye -Ziwot -zizany -Zizania -zizel -Zizia -Zizyphus -zizit -zizith -Zyzomys -zizz -zyzzyva -zyzzyvas -zizzle -zizzled -zizzles -zizzling -Zyzzogeton -ZK -Zkinthos -Zl -Zlatoust -zlote -zloty -zlotych -zloties -zlotys -ZMRI -Zmudz -Zn -Znaniecki -zo -zo- -zoa -zoacum -zoaea -Zoan -Zoanthacea -zoanthacean -Zoantharia -zoantharian -zoanthid -Zoanthidae -Zoanthidea -zoanthodeme -zoanthodemic -zoanthoid -zoanthropy -Zoanthus -Zoar -Zoara -Zoarah -Zoarces -zoarcidae -zoaria -zoarial -Zoarite -zoarium -Zoba -Zobe -Zobias -Zobkiw -zobo -zobtenite -zocalo -zocco -zoccolo -zod -zodiac -zodiacal -zodiacs -zodiophilous -Zoe -zoea -zoeae -zoeaform -zoeal -zoeas -zoeform -zoehemera -zoehemerae -Zoeller -Zoellick -Zoes -zoetic -zoetrope -zoetropic -Zoffany -zoftig -zogan -zogo -Zoha -Zohak -Zohar -Zohara -Zoharist -Zoharite -Zoi -zoiatria -zoiatrics -zoic -zoid -zoidiophilous -zoidogamous -Zoie -Zoila -Zoilean -Zoilism -Zoilist -Zoilla -Zoilus -Zoysia -zoysias -zoisite -zoisites -zoisitization -zoism -zoist -zoistic -zokor -Zola -Zolaesque -Zolaism -Zolaist -Zolaistic -Zolaize -Zoldi -zoll -zolle -Zoller -Zollernia -Zolly -Zollie -Zollner -zollpfund -Zollverein -Zolnay -Zolner -zolotink -zolotnik -Zoltai -Zomba -zombi -zombie -zombielike -zombies -zombiism -zombiisms -zombis -zomotherapeutic -zomotherapy -Zona -zonaesthesia -zonal -zonality -zonally -zonar -zonary -Zonaria -zonate -zonated -zonation -zonations -Zond -Zonda -Zondra -zone -zone-confounding -zoned -zoneless -zonelet -zonelike -zone-marked -zoner -zoners -zones -zonesthesia -zone-tailed -zonetime -zonetimes -Zongora -Zonian -zonic -zoniferous -zoning -zonite -Zonites -zonitid -Zonitidae -Zonitoides -zonk -zonked -zonking -zonks -zonnar -Zonnya -zono- -zonochlorite -zonociliate -zonoid -zonolimnetic -zonoplacental -Zonoplacentalia -zonoskeleton -Zonotrichia -Zonta -Zontian -zonula -zonulae -zonular -zonulas -zonule -zonules -zonulet -zonure -zonurid -Zonuridae -zonuroid -Zonurus -zoo -zoo- -zoobenthoic -zoobenthos -zooblast -zoocarp -zoocecidium -zoochem -zoochemy -zoochemical -zoochemistry -Zoochlorella -zoochore -zoochores -zoocyst -zoocystic -zoocytial -zoocytium -zoocoenocyte -zoocultural -zooculture -zoocurrent -zoodendria -zoodendrium -zoodynamic -zoodynamics -zooecia -zooecial -zooecium -zoo-ecology -zoo-ecologist -zooerastia -zooerythrin -zooflagellate -zoofulvin -zoogamete -zoogamy -zoogamous -zoogene -zoogenesis -zoogeny -zoogenic -zoogenous -zoogeog -zoogeographer -zoogeography -zoogeographic -zoogeographical -zoogeographically -zoogeographies -zoogeology -zoogeological -zoogeologist -zooglea -zoogleae -zoogleal -zoogleas -zoogler -zoogloea -zoogloeae -zoogloeal -zoogloeas -zoogloeic -zoogony -zoogonic -zoogonidium -zoogonous -zoograft -zoografting -zoographer -zoography -zoographic -zoographical -zoographically -zoographist -zoogrpahy -zooid -zooidal -zooidiophilous -zooids -zookers -zooks -zool -zool. -zoolater -zoolaters -zoolatry -zoolatria -zoolatries -zoolatrous -zoolite -zoolith -zoolithic -zoolitic -zoologer -zoology -zoologic -zoological -zoologically -zoologicoarchaeologist -zoologicobotanical -zoologies -zoologist -zoologists -zoologize -zoologized -zoologizing -zoom -zoomagnetic -zoomagnetism -zoomancy -zoomania -zoomanias -zoomantic -zoomantist -Zoomastigina -Zoomastigoda -zoomechanical -zoomechanics -zoomed -zoomelanin -zoometry -zoometric -zoometrical -zoometries -zoomimetic -zoomimic -zooming -zoomorph -zoomorphy -zoomorphic -zoomorphism -zoomorphize -zoomorphs -zooms -zoon -zoona -zoonal -zoonerythrin -zoonic -zoonist -zoonite -zoonitic -zoonomy -zoonomia -zoonomic -zoonomical -zoonomist -zoonoses -zoonosis -zoonosology -zoonosologist -zoonotic -zoons -zoonule -zoopaleontology -zoopantheon -zooparasite -zooparasitic -zoopathy -zoopathology -zoopathological -zoopathologies -zoopathologist -zooperal -zoopery -zooperist -Zoophaga -zoophagan -Zoophagineae -zoophagous -zoophagus -zoopharmacy -zoopharmacological -zoophile -zoophiles -zoophily -zoophilia -zoophiliac -zoophilic -zoophilies -zoophilism -zoophilist -zoophilite -zoophilitic -zoophilous -zoophysical -zoophysicist -zoophysics -zoophysiology -zoophism -Zoophyta -zoophytal -zoophyte -zoophytes -zoophytic -zoophytical -zoophytish -zoophytography -zoophytoid -zoophytology -zoophytological -zoophytologist -zoophobe -zoophobes -zoophobia -zoophobous -zoophori -zoophoric -zoophorous -zoophorus -zooplankton -zooplanktonic -zooplasty -zooplastic -zoopraxiscope -zoopsia -zoopsychology -zoopsychological -zoopsychologist -zoos -zoo's -zooscopy -zooscopic -zoosis -zoosmosis -zoosperm -zoospermatic -zoospermia -zoospermium -zoosperms -zoospgia -zoosphere -zoosporange -zoosporangia -zoosporangial -zoosporangiophore -zoosporangium -zoospore -zoospores -zoosporic -zoosporiferous -zoosporocyst -zoosporous -zoosterol -zootaxy -zootaxonomist -zootechny -zootechnic -zootechnical -zootechnician -zootechnics -zooter -zoothecia -zoothecial -zoothecium -zootheism -zootheist -zootheistic -zootherapy -zoothome -zooty -zootic -zootype -zootypic -Zootoca -zootomy -zootomic -zootomical -zootomically -zootomies -zootomist -zoototemism -zootoxin -zootrophy -zootrophic -zoot-suiter -zooxanthella -zooxanthellae -zooxanthin -zoozoo -Zophar -zophophori -zophori -zophorus -zopilote -Zoque -Zoquean -Zora -Zorah -Zorana -Zoraptera -zorgite -zori -zoril -zorilla -zorillas -zorille -zorilles -Zorillinae -zorillo -zorillos -zorils -Zorina -Zorine -zoris -Zorn -Zoroaster -zoroastra -Zoroastrian -Zoroastrianism -zoroastrians -Zoroastrism -Zorobabel -Zorotypus -zorrillo -zorro -Zortman -zortzico -Zosema -Zoser -Zosi -Zosima -Zosimus -Zosma -zoster -Zostera -Zosteraceae -Zosteria -zosteriform -Zosteropinae -Zosterops -zosters -Zouave -zouaves -Zoubek -Zoug -zounds -zowie -ZPG -ZPRSN -Zr -Zrich -Zrike -zs -z's -Zsa -Zsazsa -Z-shaped -Zsigmondy -Zsolway -ZST -ZT -Ztopek -Zubeneschamali -Zubird -Zubkoff -zubr -Zuccari -zuccarino -Zuccaro -Zucchero -zucchetti -zucchetto -zucchettos -zucchini -zucchinis -zucco -zuchetto -Zucker -Zuckerman -zudda -zuffolo -zufolo -Zug -zugtierlast -zugtierlaster -zugzwang -Zui -Zuian -Zuidholland -zuisin -Zulch -Zuleika -Zulema -Zulhijjah -Zulinde -Zulkadah -Zu'lkadah -Zullinger -Zullo -Zuloaga -Zulu -Zuludom -Zuluize -Zulu-kaffir -Zululand -Zulus -zumatic -zumbooruk -Zumbrota -Zumstein -Zumwalt -Zungaria -Zuni -Zunian -zunyite -zunis -zupanate -Zupus -Zurbar -Zurbaran -Zurek -Zurheide -Zurich -Zurkow -zurlite -Zurn -Zurvan -Zusman -Zutugil -zuurveldt -zuza -Zuzana -Zu-zu -zwanziger -Zwart -ZWEI -Zweig -Zwick -Zwickau -Zwicky -Zwieback -zwiebacks -Zwiebel -zwieselite -Zwingle -Zwingli -Zwinglian -Zwinglianism -Zwinglianist -zwitter -zwitterion -zwitterionic -Zwolle -Zworykin -ZZ -zZt -ZZZ diff --git a/venv/lib/python3.6/site-packages/passwordstrength/dir.py b/venv/lib/python3.6/site-packages/passwordstrength/dir.py deleted file mode 100644 index 062e39e..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/dir.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -Defines ROOT as project_name/project_name/. Useful when installing using pip/setup.py. -""" - -import os -import inspect - -ROOT = os.path.abspath(os.path.dirname(inspect.getframeinfo(inspect.currentframe()).filename)) - - -def database_path(database): - return os.path.join(ROOT, 'database', database) diff --git a/venv/lib/python3.6/site-packages/passwordstrength/entropy.py b/venv/lib/python3.6/site-packages/passwordstrength/entropy.py deleted file mode 100644 index cbb2912..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/entropy.py +++ /dev/null @@ -1,97 +0,0 @@ -import string -import yaml -import math - -from passwordstrength.dir import database_path - - -class Entropy: - def __init__(self): - with open(database_path('google-10000-english.txt')) as f: - self.common_words = f.read().strip().split('\n') - with open(database_path('words.txt')) as f: - self.dictionary_words = set(f.read().strip().split('\n')) - set(self.common_words) - with open(database_path('leetspeak.yaml')) as f: - self.leet = yaml.safe_load(f)['min'] - - def entropy_brute_force(self, password): - entropy = 1 - for i, char in enumerate(password): - if char in string.punctuation + string.digits: - entropy *= len(string.printable) - elif self._consecutive(password, i): - entropy *= len(string.ascii_lowercase) - else: - entropy *= len(string.ascii_letters) - - return entropy - - @staticmethod - def _consecutive(password, index): - if len(password) < index+3: - return False - - if all([char.islower() for char in password[index:index+3]]): - return True - elif all([char.isupper() for char in password[index:index+3]]): - return True - else: - return False - - def entropy_dictionary_attack(self, password): - entropy = 1 - if password.lower() in self.common_words: - entropy *= self.common_words.index(password) - elif password.lower() in self.common_words: - entropy *= 2*len(self.common_words) - elif password.lower() in self.dictionary_words: - entropy *= len(self.dictionary_words) - else: - return math.inf - - return self.word_difficulty(password)*entropy - - def word_difficulty(self, word): - if word.islower(): - return 1 - elif word[0].isupper(): - return 2 - elif word.isupper(): - return 3 - elif word.isalpha(): - return pow(2, len(word)) - else: - difficulty = 1 - for char in word: - difficulty *= 2 + len(self.leet.get(char, [])) - return difficulty - - def entropy_diceware(self, password): - entropy = 1 - start_word = 0 - for i, char in enumerate(password): - if start_word >= len(password): - break - if password[start_word:i+1] in self.common_words: - word = password[start_word:i+1] - entropy *= self.word_difficulty(word)*self.common_words.index(word) - start_word = i+1 - elif password[start_word:i+1] in self.dictionary_words: - word = password[start_word:i + 1] - entropy *= self.word_difficulty(word)*len(self.dictionary_words) - start_word = i+1 - if start_word < len(password): - entropy *= self.entropy_brute_force(password[start_word:]) - - return entropy - - def entropy(self, password): - return self.entropy_worst_case(password) - - def log_entropy(self, password): - return math.log2(self.entropy(password)) - - def entropy_worst_case(self, password): - return min(self.entropy_brute_force(password), - self.entropy_dictionary_attack(password), - self.entropy_diceware(password)) diff --git a/venv/lib/python3.6/site-packages/passwordstrength/passwordmeter.py b/venv/lib/python3.6/site-packages/passwordstrength/passwordmeter.py deleted file mode 100644 index 88420ad..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/passwordmeter.py +++ /dev/null @@ -1,274 +0,0 @@ -# based on http://www.passwordmeter.com -import string -# import math - -class PasswordStrength: - def __init__(self, password): - self.password = password - self.total_score = 0 - self.seqSymbols = r'!"#$%&\'()*,.:;<=><>== 80: - return "Very Strong" - else: - raise ValueError('Value error') - - class Additions: - def __init__(self, password): - self.password = password - - def nLengthBonus(self): - return len(self.password) * 4 - - def nAlphaUCBonus(self): - password = self.password - nUC = PasswordStrength._count(password, string.ascii_uppercase) - if nUC in range(1, len(password)): - return (len(password)-nUC) * 2 - else: - return 0 - - def nAlphaLCBonus(self): - password = self.password - nLC = PasswordStrength._count(password, string.ascii_uppercase) - if nLC in range(1, len(password)): - return (len(password) - nLC) * 2 - else: - return 0 - - def nNumberBonus(self): - nNumber = PasswordStrength._count(self.password, string.digits) - return nNumber * 4 - - def nSymbolBonus(self): - nSymbol = PasswordStrength._count(self.password, string.punctuation) - return nSymbol * 6 - - def nMidCharBonus(self): - password = self.password - nMidChar = 0 - for i, char in enumerate(password): - if i != 0 and i != len(password)-1: - if char in string.digits + string.punctuation: - nMidChar += 1 - return nMidChar * 2 - - class Deductions: - def __init__(self, password, seqSymbols): - self.password = password - self.seqSymbols = seqSymbols - - def nAlphasOnlyBonus(self): - def alphasOnly(): - for char in self.password: - if char in string.digits: - return False - return True - - if alphasOnly(): - return len(self.password) - else: - return 0 - - def nNumbersOnlyBonus(self): - def numbersOnly(): - for char in self.password: - if char in string.ascii_letters: - return False - return True - - if numbersOnly(): - return len(self.password) - else: - return 0 - - def nRepCharBonus(self): - nRepInc = 0 - temp_char = '' - for char in sorted(self.password): - if temp_char: - if char == temp_char: - nRepInc += 1 - temp_char = char - return nRepInc - - def nConsecAlphaUCBonus(self): - nConsecAlphaUC = PasswordStrength._count_conseq(self.password, string.ascii_uppercase) - return nConsecAlphaUC * 2 - - def nConsecAlphaLCBonus(self): - nConsecAlphaLC = PasswordStrength._count_conseq(self.password, string.ascii_lowercase) - return nConsecAlphaLC * 2 - - def nConsecNumberBonus(self): - nConsecNumber = PasswordStrength._count_conseq(self.password, string.digits) - return nConsecNumber * 2 - - def nSeqAlphaBonus(self): - nSeqAlpha = PasswordStrength._count_seq(self.password.lower(), string.ascii_lowercase) - return nSeqAlpha * 3 - - def nSeqNumberBonus(self): - nSeqNumber = PasswordStrength._count_seq(self.password, string.digits + '0') - return nSeqNumber * 3 - - def nSeqSymbolBonus(self): - password = self.password - nSeqSymbol = PasswordStrength._count_seq(password, self.seqSymbols) - return nSeqSymbol * 3 - - @staticmethod - def _count(password, rule_string): - n = 0 - for char in password: - if char in rule_string: - n += 1 - return n - - @staticmethod - def _count_conseq(password, rule_string): - temp_char = '' - n = 0 - for char in password: - if char in rule_string: - if temp_char: - if temp_char in rule_string: - n += 1 - temp_char = char - return n - - @staticmethod - def _count_seq(password, rule_string): - n = 0 - for i in range(len(rule_string) - 3): - sFwd = chr(ord(rule_string[0]) + i) \ - + chr(ord(rule_string[0]) + i + 1) \ - + chr(ord(rule_string[0]) + i + 2) - sRev = sFwd[::-1] - if sFwd in password or sRev in password: - n += 1 - return n - - -if __name__ == '__main__': - # print(PasswordStrength('password').strength()) - # print(PasswordStrength('password').rule_scores()) - pass diff --git a/venv/lib/python3.6/site-packages/passwordstrength/util.py b/venv/lib/python3.6/site-packages/passwordstrength/util.py deleted file mode 100644 index 57b3c04..0000000 --- a/venv/lib/python3.6/site-packages/passwordstrength/util.py +++ /dev/null @@ -1,25 +0,0 @@ -from __future__ import print_function - - -def get_strong_password(password_checker, passing_score=70): - loop = True - password = input('Enter your password:') - while True: - try: - checker = password_checker(password) - print(checker.rating()) - if checker.strength() > passing_score: - print('Your password passed the minimum score.') - while True: - yesno = input('Do you want to enter a new password? [y/n]') - if yesno == 'y': - break - elif yesno == 'n': - loop = False - break - if not loop: - break - print('Your password passed the minimum score.') - password = input('Please enter a new password.') - except KeyboardInterrupt: - break diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/PKG-INFO b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/PKG-INFO deleted file mode 100644 index c91d709..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/PKG-INFO +++ /dev/null @@ -1,69 +0,0 @@ -Metadata-Version: 2.1 -Name: pip -Version: 10.0.1 -Summary: The PyPA recommended tool for installing Python packages. -Home-page: https://pip.pypa.io/ -Author: The pip developers -Author-email: python-virtualenv@groups.google.com -License: MIT -Description: pip - === - - The `PyPA recommended`_ tool for installing Python packages. - - .. image:: https://img.shields.io/pypi/v/pip.svg - :target: https://pypi.org/project/pip/ - - .. image:: https://img.shields.io/travis/pypa/pip/master.svg - :target: http://travis-ci.org/pypa/pip - - .. image:: https://img.shields.io/appveyor/ci/pypa/pip.svg - :target: https://ci.appveyor.com/project/pypa/pip/history - - .. image:: https://readthedocs.org/projects/pip/badge/?version=latest - :target: https://pip.pypa.io/en/latest - - * `Installation`_ - * `Documentation`_ - * `Changelog`_ - * `GitHub Page`_ - * `Issue Tracking`_ - * `User mailing list`_ - * `Dev mailing list`_ - * User IRC: #pypa on Freenode. - * Dev IRC: #pypa-dev on Freenode. - - Code of Conduct - --------------- - - Everyone interacting in the pip project's codebases, issue trackers, chat - rooms and mailing lists is expected to follow the `PyPA Code of Conduct`_. - - .. _PyPA recommended: https://packaging.python.org/en/latest/current/ - .. _Installation: https://pip.pypa.io/en/stable/installing.html - .. _Documentation: https://pip.pypa.io/en/stable/ - .. _Changelog: https://pip.pypa.io/en/stable/news.html - .. _GitHub Page: https://github.com/pypa/pip - .. _Issue Tracking: https://github.com/pypa/pip/issues - .. _User mailing list: http://groups.google.com/group/python-virtualenv - .. _Dev mailing list: http://groups.google.com/group/pypa-dev - .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ - -Keywords: easy_install distutils setuptools egg virtualenv -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Topic :: Software Development :: Build Tools -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.* -Provides-Extra: testing diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/SOURCES.txt b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/SOURCES.txt deleted file mode 100644 index 5a15329..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/SOURCES.txt +++ /dev/null @@ -1,347 +0,0 @@ -AUTHORS.txt -LICENSE.txt -MANIFEST.in -NEWS.rst -README.rst -pyproject.toml -setup.cfg -setup.py -docs/Makefile -docs/__init__.py -docs/conf.py -docs/configuration.rst -docs/cookbook.rst -docs/development.rst -docs/docutils.conf -docs/index.rst -docs/installing.rst -docs/logic.rst -docs/make.bat -docs/news.rst -docs/pipext.py -docs/quickstart.rst -docs/usage.rst -docs/user_guide.rst -docs/man/pip.rst -docs/man/commands/check.rst -docs/man/commands/config.rst -docs/man/commands/download.rst -docs/man/commands/freeze.rst -docs/man/commands/hash.rst -docs/man/commands/help.rst -docs/man/commands/install.rst -docs/man/commands/list.rst -docs/man/commands/search.rst -docs/man/commands/show.rst -docs/man/commands/uninstall.rst -docs/man/commands/wheel.rst -docs/reference/index.rst -docs/reference/pip.rst -docs/reference/pip_check.rst -docs/reference/pip_config.rst -docs/reference/pip_download.rst -docs/reference/pip_freeze.rst -docs/reference/pip_hash.rst -docs/reference/pip_install.rst -docs/reference/pip_list.rst -docs/reference/pip_search.rst -docs/reference/pip_show.rst -docs/reference/pip_uninstall.rst -docs/reference/pip_wheel.rst -src/pip/__init__.py -src/pip/__main__.py -src/pip.egg-info/PKG-INFO -src/pip.egg-info/SOURCES.txt -src/pip.egg-info/dependency_links.txt -src/pip.egg-info/entry_points.txt -src/pip.egg-info/not-zip-safe -src/pip.egg-info/requires.txt -src/pip.egg-info/top_level.txt -src/pip/_internal/__init__.py -src/pip/_internal/basecommand.py -src/pip/_internal/baseparser.py -src/pip/_internal/build_env.py -src/pip/_internal/cache.py -src/pip/_internal/cmdoptions.py -src/pip/_internal/compat.py -src/pip/_internal/configuration.py -src/pip/_internal/download.py -src/pip/_internal/exceptions.py -src/pip/_internal/index.py -src/pip/_internal/locations.py -src/pip/_internal/pep425tags.py -src/pip/_internal/resolve.py -src/pip/_internal/status_codes.py -src/pip/_internal/wheel.py -src/pip/_internal/commands/__init__.py -src/pip/_internal/commands/check.py -src/pip/_internal/commands/completion.py -src/pip/_internal/commands/configuration.py -src/pip/_internal/commands/download.py -src/pip/_internal/commands/freeze.py -src/pip/_internal/commands/hash.py -src/pip/_internal/commands/help.py -src/pip/_internal/commands/install.py -src/pip/_internal/commands/list.py -src/pip/_internal/commands/search.py -src/pip/_internal/commands/show.py -src/pip/_internal/commands/uninstall.py -src/pip/_internal/commands/wheel.py -src/pip/_internal/models/__init__.py -src/pip/_internal/models/index.py -src/pip/_internal/operations/__init__.py -src/pip/_internal/operations/check.py -src/pip/_internal/operations/freeze.py -src/pip/_internal/operations/prepare.py -src/pip/_internal/req/__init__.py -src/pip/_internal/req/req_file.py -src/pip/_internal/req/req_install.py -src/pip/_internal/req/req_set.py -src/pip/_internal/req/req_uninstall.py -src/pip/_internal/utils/__init__.py -src/pip/_internal/utils/appdirs.py -src/pip/_internal/utils/deprecation.py -src/pip/_internal/utils/encoding.py -src/pip/_internal/utils/filesystem.py -src/pip/_internal/utils/glibc.py -src/pip/_internal/utils/hashes.py -src/pip/_internal/utils/logging.py -src/pip/_internal/utils/misc.py -src/pip/_internal/utils/outdated.py -src/pip/_internal/utils/packaging.py -src/pip/_internal/utils/setuptools_build.py -src/pip/_internal/utils/temp_dir.py -src/pip/_internal/utils/typing.py -src/pip/_internal/utils/ui.py -src/pip/_internal/vcs/__init__.py -src/pip/_internal/vcs/bazaar.py -src/pip/_internal/vcs/git.py -src/pip/_internal/vcs/mercurial.py -src/pip/_internal/vcs/subversion.py -src/pip/_vendor/README.rst -src/pip/_vendor/__init__.py -src/pip/_vendor/appdirs.py -src/pip/_vendor/distro.py -src/pip/_vendor/ipaddress.py -src/pip/_vendor/pyparsing.py -src/pip/_vendor/retrying.py -src/pip/_vendor/six.py -src/pip/_vendor/vendor.txt -src/pip/_vendor/cachecontrol/__init__.py -src/pip/_vendor/cachecontrol/_cmd.py -src/pip/_vendor/cachecontrol/adapter.py -src/pip/_vendor/cachecontrol/cache.py -src/pip/_vendor/cachecontrol/compat.py -src/pip/_vendor/cachecontrol/controller.py -src/pip/_vendor/cachecontrol/filewrapper.py -src/pip/_vendor/cachecontrol/heuristics.py -src/pip/_vendor/cachecontrol/serialize.py -src/pip/_vendor/cachecontrol/wrapper.py -src/pip/_vendor/cachecontrol/caches/__init__.py -src/pip/_vendor/cachecontrol/caches/file_cache.py -src/pip/_vendor/cachecontrol/caches/redis_cache.py -src/pip/_vendor/certifi/__init__.py -src/pip/_vendor/certifi/__main__.py -src/pip/_vendor/certifi/cacert.pem -src/pip/_vendor/certifi/core.py -src/pip/_vendor/chardet/__init__.py -src/pip/_vendor/chardet/big5freq.py -src/pip/_vendor/chardet/big5prober.py -src/pip/_vendor/chardet/chardistribution.py -src/pip/_vendor/chardet/charsetgroupprober.py -src/pip/_vendor/chardet/charsetprober.py -src/pip/_vendor/chardet/codingstatemachine.py -src/pip/_vendor/chardet/compat.py -src/pip/_vendor/chardet/cp949prober.py -src/pip/_vendor/chardet/enums.py -src/pip/_vendor/chardet/escprober.py -src/pip/_vendor/chardet/escsm.py -src/pip/_vendor/chardet/eucjpprober.py -src/pip/_vendor/chardet/euckrfreq.py -src/pip/_vendor/chardet/euckrprober.py -src/pip/_vendor/chardet/euctwfreq.py -src/pip/_vendor/chardet/euctwprober.py -src/pip/_vendor/chardet/gb2312freq.py -src/pip/_vendor/chardet/gb2312prober.py -src/pip/_vendor/chardet/hebrewprober.py -src/pip/_vendor/chardet/jisfreq.py -src/pip/_vendor/chardet/jpcntx.py -src/pip/_vendor/chardet/langbulgarianmodel.py -src/pip/_vendor/chardet/langcyrillicmodel.py -src/pip/_vendor/chardet/langgreekmodel.py -src/pip/_vendor/chardet/langhebrewmodel.py -src/pip/_vendor/chardet/langhungarianmodel.py -src/pip/_vendor/chardet/langthaimodel.py -src/pip/_vendor/chardet/langturkishmodel.py -src/pip/_vendor/chardet/latin1prober.py -src/pip/_vendor/chardet/mbcharsetprober.py -src/pip/_vendor/chardet/mbcsgroupprober.py -src/pip/_vendor/chardet/mbcssm.py -src/pip/_vendor/chardet/sbcharsetprober.py -src/pip/_vendor/chardet/sbcsgroupprober.py -src/pip/_vendor/chardet/sjisprober.py -src/pip/_vendor/chardet/universaldetector.py -src/pip/_vendor/chardet/utf8prober.py -src/pip/_vendor/chardet/version.py -src/pip/_vendor/chardet/cli/__init__.py -src/pip/_vendor/chardet/cli/chardetect.py -src/pip/_vendor/colorama/__init__.py -src/pip/_vendor/colorama/ansi.py -src/pip/_vendor/colorama/ansitowin32.py -src/pip/_vendor/colorama/initialise.py -src/pip/_vendor/colorama/win32.py -src/pip/_vendor/colorama/winterm.py -src/pip/_vendor/distlib/__init__.py -src/pip/_vendor/distlib/compat.py -src/pip/_vendor/distlib/database.py -src/pip/_vendor/distlib/index.py -src/pip/_vendor/distlib/locators.py -src/pip/_vendor/distlib/manifest.py -src/pip/_vendor/distlib/markers.py -src/pip/_vendor/distlib/metadata.py -src/pip/_vendor/distlib/resources.py -src/pip/_vendor/distlib/scripts.py -src/pip/_vendor/distlib/t32.exe -src/pip/_vendor/distlib/t64.exe -src/pip/_vendor/distlib/util.py -src/pip/_vendor/distlib/version.py -src/pip/_vendor/distlib/w32.exe -src/pip/_vendor/distlib/w64.exe -src/pip/_vendor/distlib/wheel.py -src/pip/_vendor/distlib/_backport/__init__.py -src/pip/_vendor/distlib/_backport/misc.py -src/pip/_vendor/distlib/_backport/shutil.py -src/pip/_vendor/distlib/_backport/sysconfig.cfg -src/pip/_vendor/distlib/_backport/sysconfig.py -src/pip/_vendor/distlib/_backport/tarfile.py -src/pip/_vendor/html5lib/__init__.py -src/pip/_vendor/html5lib/_ihatexml.py -src/pip/_vendor/html5lib/_inputstream.py -src/pip/_vendor/html5lib/_tokenizer.py -src/pip/_vendor/html5lib/_utils.py -src/pip/_vendor/html5lib/constants.py -src/pip/_vendor/html5lib/html5parser.py -src/pip/_vendor/html5lib/serializer.py -src/pip/_vendor/html5lib/_trie/__init__.py -src/pip/_vendor/html5lib/_trie/_base.py -src/pip/_vendor/html5lib/_trie/datrie.py -src/pip/_vendor/html5lib/_trie/py.py -src/pip/_vendor/html5lib/filters/__init__.py -src/pip/_vendor/html5lib/filters/alphabeticalattributes.py -src/pip/_vendor/html5lib/filters/base.py -src/pip/_vendor/html5lib/filters/inject_meta_charset.py -src/pip/_vendor/html5lib/filters/lint.py -src/pip/_vendor/html5lib/filters/optionaltags.py -src/pip/_vendor/html5lib/filters/sanitizer.py -src/pip/_vendor/html5lib/filters/whitespace.py -src/pip/_vendor/html5lib/treeadapters/__init__.py -src/pip/_vendor/html5lib/treeadapters/genshi.py -src/pip/_vendor/html5lib/treeadapters/sax.py -src/pip/_vendor/html5lib/treebuilders/__init__.py -src/pip/_vendor/html5lib/treebuilders/base.py -src/pip/_vendor/html5lib/treebuilders/dom.py -src/pip/_vendor/html5lib/treebuilders/etree.py -src/pip/_vendor/html5lib/treebuilders/etree_lxml.py -src/pip/_vendor/html5lib/treewalkers/__init__.py -src/pip/_vendor/html5lib/treewalkers/base.py -src/pip/_vendor/html5lib/treewalkers/dom.py -src/pip/_vendor/html5lib/treewalkers/etree.py -src/pip/_vendor/html5lib/treewalkers/etree_lxml.py -src/pip/_vendor/html5lib/treewalkers/genshi.py -src/pip/_vendor/idna/__init__.py -src/pip/_vendor/idna/codec.py -src/pip/_vendor/idna/compat.py -src/pip/_vendor/idna/core.py -src/pip/_vendor/idna/idnadata.py -src/pip/_vendor/idna/intranges.py -src/pip/_vendor/idna/package_data.py -src/pip/_vendor/idna/uts46data.py -src/pip/_vendor/lockfile/__init__.py -src/pip/_vendor/lockfile/linklockfile.py -src/pip/_vendor/lockfile/mkdirlockfile.py -src/pip/_vendor/lockfile/pidlockfile.py -src/pip/_vendor/lockfile/sqlitelockfile.py -src/pip/_vendor/lockfile/symlinklockfile.py -src/pip/_vendor/msgpack/__init__.py -src/pip/_vendor/msgpack/_version.py -src/pip/_vendor/msgpack/exceptions.py -src/pip/_vendor/msgpack/fallback.py -src/pip/_vendor/packaging/__about__.py -src/pip/_vendor/packaging/__init__.py -src/pip/_vendor/packaging/_compat.py -src/pip/_vendor/packaging/_structures.py -src/pip/_vendor/packaging/markers.py -src/pip/_vendor/packaging/requirements.py -src/pip/_vendor/packaging/specifiers.py -src/pip/_vendor/packaging/utils.py -src/pip/_vendor/packaging/version.py -src/pip/_vendor/pkg_resources/__init__.py -src/pip/_vendor/pkg_resources/py31compat.py -src/pip/_vendor/progress/__init__.py -src/pip/_vendor/progress/bar.py -src/pip/_vendor/progress/counter.py -src/pip/_vendor/progress/helpers.py -src/pip/_vendor/progress/spinner.py -src/pip/_vendor/pytoml/__init__.py -src/pip/_vendor/pytoml/core.py -src/pip/_vendor/pytoml/parser.py -src/pip/_vendor/pytoml/writer.py -src/pip/_vendor/requests/__init__.py -src/pip/_vendor/requests/__version__.py -src/pip/_vendor/requests/_internal_utils.py -src/pip/_vendor/requests/adapters.py -src/pip/_vendor/requests/api.py -src/pip/_vendor/requests/auth.py -src/pip/_vendor/requests/certs.py -src/pip/_vendor/requests/compat.py -src/pip/_vendor/requests/cookies.py -src/pip/_vendor/requests/exceptions.py -src/pip/_vendor/requests/help.py -src/pip/_vendor/requests/hooks.py -src/pip/_vendor/requests/models.py -src/pip/_vendor/requests/packages.py -src/pip/_vendor/requests/sessions.py -src/pip/_vendor/requests/status_codes.py -src/pip/_vendor/requests/structures.py -src/pip/_vendor/requests/utils.py -src/pip/_vendor/urllib3/__init__.py -src/pip/_vendor/urllib3/_collections.py -src/pip/_vendor/urllib3/connection.py -src/pip/_vendor/urllib3/connectionpool.py -src/pip/_vendor/urllib3/exceptions.py -src/pip/_vendor/urllib3/fields.py -src/pip/_vendor/urllib3/filepost.py -src/pip/_vendor/urllib3/poolmanager.py -src/pip/_vendor/urllib3/request.py -src/pip/_vendor/urllib3/response.py -src/pip/_vendor/urllib3/contrib/__init__.py -src/pip/_vendor/urllib3/contrib/appengine.py -src/pip/_vendor/urllib3/contrib/ntlmpool.py -src/pip/_vendor/urllib3/contrib/pyopenssl.py -src/pip/_vendor/urllib3/contrib/securetransport.py -src/pip/_vendor/urllib3/contrib/socks.py -src/pip/_vendor/urllib3/contrib/_securetransport/__init__.py -src/pip/_vendor/urllib3/contrib/_securetransport/bindings.py -src/pip/_vendor/urllib3/contrib/_securetransport/low_level.py -src/pip/_vendor/urllib3/packages/__init__.py -src/pip/_vendor/urllib3/packages/ordered_dict.py -src/pip/_vendor/urllib3/packages/six.py -src/pip/_vendor/urllib3/packages/backports/__init__.py -src/pip/_vendor/urllib3/packages/backports/makefile.py -src/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py -src/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py -src/pip/_vendor/urllib3/util/__init__.py -src/pip/_vendor/urllib3/util/connection.py -src/pip/_vendor/urllib3/util/request.py -src/pip/_vendor/urllib3/util/response.py -src/pip/_vendor/urllib3/util/retry.py -src/pip/_vendor/urllib3/util/selectors.py -src/pip/_vendor/urllib3/util/ssl_.py -src/pip/_vendor/urllib3/util/timeout.py -src/pip/_vendor/urllib3/util/url.py -src/pip/_vendor/urllib3/util/wait.py -src/pip/_vendor/webencodings/__init__.py -src/pip/_vendor/webencodings/labels.py -src/pip/_vendor/webencodings/mklabels.py -src/pip/_vendor/webencodings/tests.py -src/pip/_vendor/webencodings/x_user_defined.py \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/dependency_links.txt b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/entry_points.txt b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/entry_points.txt deleted file mode 100644 index 6b7f48a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/entry_points.txt +++ /dev/null @@ -1,5 +0,0 @@ -[console_scripts] -pip = pip._internal:main -pip3 = pip._internal:main -pip3.6 = pip._internal:main - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/not-zip-safe b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/requires.txt b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/requires.txt deleted file mode 100644 index fdea1b5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/requires.txt +++ /dev/null @@ -1,8 +0,0 @@ - -[testing] -pytest -mock -pretend -scripttest>=1.3 -virtualenv>=1.10 -freezegun diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/top_level.txt b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/top_level.txt deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__init__.py deleted file mode 100644 index ab64964..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = "10.0.1" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__main__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__main__.py deleted file mode 100644 index 4609582..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/__main__.py +++ /dev/null @@ -1,19 +0,0 @@ -from __future__ import absolute_import - -import os -import sys - -# If we are running from a wheel, add the wheel to sys.path -# This allows the usage python pip-*.whl/pip install pip-*.whl -if __package__ == '': - # __file__ is pip-*.whl/pip/__main__.py - # first dirname call strips of '/__main__.py', second strips off '/pip' - # Resulting path is the name of the wheel itself - # Add that to sys.path so we can import pip - path = os.path.dirname(os.path.dirname(__file__)) - sys.path.insert(0, path) - -from pip._internal import main as _main # noqa - -if __name__ == '__main__': - sys.exit(_main()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/__init__.py deleted file mode 100644 index 865d9ec..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/__init__.py +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env python -from __future__ import absolute_import - -import locale -import logging -import os -import optparse -import warnings - -import sys - -# 2016-06-17 barry@debian.org: urllib3 1.14 added optional support for socks, -# but if invoked (i.e. imported), it will issue a warning to stderr if socks -# isn't available. requests unconditionally imports urllib3's socks contrib -# module, triggering this warning. The warning breaks DEP-8 tests (because of -# the stderr output) and is just plain annoying in normal usage. I don't want -# to add socks as yet another dependency for pip, nor do I want to allow-stder -# in the DEP-8 tests, so just suppress the warning. pdb tells me this has to -# be done before the import of pip.vcs. -from pip._vendor.urllib3.exceptions import DependencyWarning -warnings.filterwarnings("ignore", category=DependencyWarning) # noqa - -# We want to inject the use of SecureTransport as early as possible so that any -# references or sessions or what have you are ensured to have it, however we -# only want to do this in the case that we're running on macOS and the linked -# OpenSSL is too old to handle TLSv1.2 -try: - import ssl -except ImportError: - pass -else: - # Checks for OpenSSL 1.0.1 on MacOS - if sys.platform == "darwin" and ssl.OPENSSL_VERSION_NUMBER < 0x1000100f: - try: - from pip._vendor.urllib3.contrib import securetransport - except (ImportError, OSError): - pass - else: - securetransport.inject_into_urllib3() - -from pip import __version__ -from pip._internal import cmdoptions -from pip._internal.exceptions import CommandError, PipError -from pip._internal.utils.misc import get_installed_distributions, get_prog -from pip._internal.utils import deprecation -from pip._internal.vcs import git, mercurial, subversion, bazaar # noqa -from pip._internal.baseparser import ( - ConfigOptionParser, UpdatingDefaultsHelpFormatter, -) -from pip._internal.commands import get_summaries, get_similar_commands -from pip._internal.commands import commands_dict -from pip._vendor.urllib3.exceptions import InsecureRequestWarning - -logger = logging.getLogger(__name__) - -# Hide the InsecureRequestWarning from urllib3 -warnings.filterwarnings("ignore", category=InsecureRequestWarning) - - -def autocomplete(): - """Command and option completion for the main option parser (and options) - and its subcommands (and options). - - Enable by sourcing one of the completion shell scripts (bash, zsh or fish). - """ - # Don't complete if user hasn't sourced bash_completion file. - if 'PIP_AUTO_COMPLETE' not in os.environ: - return - cwords = os.environ['COMP_WORDS'].split()[1:] - cword = int(os.environ['COMP_CWORD']) - try: - current = cwords[cword - 1] - except IndexError: - current = '' - - subcommands = [cmd for cmd, summary in get_summaries()] - options = [] - # subcommand - try: - subcommand_name = [w for w in cwords if w in subcommands][0] - except IndexError: - subcommand_name = None - - parser = create_main_parser() - # subcommand options - if subcommand_name: - # special case: 'help' subcommand has no options - if subcommand_name == 'help': - sys.exit(1) - # special case: list locally installed dists for show and uninstall - should_list_installed = ( - subcommand_name in ['show', 'uninstall'] and - not current.startswith('-') - ) - if should_list_installed: - installed = [] - lc = current.lower() - for dist in get_installed_distributions(local_only=True): - if dist.key.startswith(lc) and dist.key not in cwords[1:]: - installed.append(dist.key) - # if there are no dists installed, fall back to option completion - if installed: - for dist in installed: - print(dist) - sys.exit(1) - - subcommand = commands_dict[subcommand_name]() - - for opt in subcommand.parser.option_list_all: - if opt.help != optparse.SUPPRESS_HELP: - for opt_str in opt._long_opts + opt._short_opts: - options.append((opt_str, opt.nargs)) - - # filter out previously specified options from available options - prev_opts = [x.split('=')[0] for x in cwords[1:cword - 1]] - options = [(x, v) for (x, v) in options if x not in prev_opts] - # filter options by current input - options = [(k, v) for k, v in options if k.startswith(current)] - for option in options: - opt_label = option[0] - # append '=' to options which require args - if option[1] and option[0][:2] == "--": - opt_label += '=' - print(opt_label) - else: - # show main parser options only when necessary - if current.startswith('-') or current.startswith('--'): - opts = [i.option_list for i in parser.option_groups] - opts.append(parser.option_list) - opts = (o for it in opts for o in it) - - for opt in opts: - if opt.help != optparse.SUPPRESS_HELP: - subcommands += opt._long_opts + opt._short_opts - - print(' '.join([x for x in subcommands if x.startswith(current)])) - sys.exit(1) - - -def create_main_parser(): - parser_kw = { - 'usage': '\n%prog [options]', - 'add_help_option': False, - 'formatter': UpdatingDefaultsHelpFormatter(), - 'name': 'global', - 'prog': get_prog(), - } - - parser = ConfigOptionParser(**parser_kw) - parser.disable_interspersed_args() - - pip_pkg_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - parser.version = 'pip %s from %s (python %s)' % ( - __version__, pip_pkg_dir, sys.version[:3], - ) - - # add the general options - gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser) - parser.add_option_group(gen_opts) - - parser.main = True # so the help formatter knows - - # create command listing for description - command_summaries = get_summaries() - description = [''] + ['%-27s %s' % (i, j) for i, j in command_summaries] - parser.description = '\n'.join(description) - - return parser - - -def parseopts(args): - parser = create_main_parser() - - # Note: parser calls disable_interspersed_args(), so the result of this - # call is to split the initial args into the general options before the - # subcommand and everything else. - # For example: - # args: ['--timeout=5', 'install', '--user', 'INITools'] - # general_options: ['--timeout==5'] - # args_else: ['install', '--user', 'INITools'] - general_options, args_else = parser.parse_args(args) - - # --version - if general_options.version: - sys.stdout.write(parser.version) - sys.stdout.write(os.linesep) - sys.exit() - - # pip || pip help -> print_help() - if not args_else or (args_else[0] == 'help' and len(args_else) == 1): - parser.print_help() - sys.exit() - - # the subcommand name - cmd_name = args_else[0] - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = ['unknown command "%s"' % cmd_name] - if guess: - msg.append('maybe you meant "%s"' % guess) - - raise CommandError(' - '.join(msg)) - - # all the args without the subcommand - cmd_args = args[:] - cmd_args.remove(cmd_name) - - return cmd_name, cmd_args - - -def check_isolated(args): - isolated = False - - if "--isolated" in args: - isolated = True - - return isolated - - -def main(args=None): - if args is None: - args = sys.argv[1:] - - # Configure our deprecation warnings to be sent through loggers - deprecation.install_warning_logger() - - autocomplete() - - try: - cmd_name, cmd_args = parseopts(args) - except PipError as exc: - sys.stderr.write("ERROR: %s" % exc) - sys.stderr.write(os.linesep) - sys.exit(1) - - # Needed for locale.getpreferredencoding(False) to work - # in pip._internal.utils.encoding.auto_decode - try: - locale.setlocale(locale.LC_ALL, '') - except locale.Error as e: - # setlocale can apparently crash if locale are uninitialized - logger.debug("Ignoring error %s when setting locale", e) - command = commands_dict[cmd_name](isolated=check_isolated(cmd_args)) - return command.main(cmd_args) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/basecommand.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/basecommand.py deleted file mode 100644 index 2503f36..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/basecommand.py +++ /dev/null @@ -1,373 +0,0 @@ -"""Base Command class, and related routines""" -from __future__ import absolute_import - -import logging -import logging.config -import optparse -import os -import sys -import warnings - -from pip._internal import cmdoptions -from pip._internal.baseparser import ( - ConfigOptionParser, UpdatingDefaultsHelpFormatter, -) -from pip._internal.compat import WINDOWS -from pip._internal.download import PipSession -from pip._internal.exceptions import ( - BadCommand, CommandError, InstallationError, PreviousBuildDirError, - UninstallationError, -) -from pip._internal.index import PackageFinder -from pip._internal.locations import running_under_virtualenv -from pip._internal.req.req_file import parse_requirements -from pip._internal.req.req_install import InstallRequirement -from pip._internal.status_codes import ( - ERROR, PREVIOUS_BUILD_DIR_ERROR, SUCCESS, UNKNOWN_ERROR, - VIRTUALENV_NOT_FOUND, -) -from pip._internal.utils import deprecation -from pip._internal.utils.logging import IndentingFormatter -from pip._internal.utils.misc import get_prog, normalize_path -from pip._internal.utils.outdated import pip_version_check -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from typing import Optional - -__all__ = ['Command'] - -logger = logging.getLogger(__name__) - - -class Command(object): - name = None # type: Optional[str] - usage = None # type: Optional[str] - hidden = False # type: bool - ignore_require_venv = False # type: bool - log_streams = ("ext://sys.stdout", "ext://sys.stderr") - - def __init__(self, isolated=False): - parser_kw = { - 'usage': self.usage, - 'prog': '%s %s' % (get_prog(), self.name), - 'formatter': UpdatingDefaultsHelpFormatter(), - 'add_help_option': False, - 'name': self.name, - 'description': self.__doc__, - 'isolated': isolated, - } - - self.parser = ConfigOptionParser(**parser_kw) - - # Commands should add options to this option group - optgroup_name = '%s Options' % self.name.capitalize() - self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name) - - # Add the general options - gen_opts = cmdoptions.make_option_group( - cmdoptions.general_group, - self.parser, - ) - self.parser.add_option_group(gen_opts) - - def _build_session(self, options, retries=None, timeout=None): - session = PipSession( - cache=( - normalize_path(os.path.join(options.cache_dir, "http")) - if options.cache_dir else None - ), - retries=retries if retries is not None else options.retries, - insecure_hosts=options.trusted_hosts, - ) - - # Handle custom ca-bundles from the user - if options.cert: - session.verify = options.cert - - # Handle SSL client certificate - if options.client_cert: - session.cert = options.client_cert - - # Handle timeouts - if options.timeout or timeout: - session.timeout = ( - timeout if timeout is not None else options.timeout - ) - - # Handle configured proxies - if options.proxy: - session.proxies = { - "http": options.proxy, - "https": options.proxy, - } - - # Determine if we can prompt the user for authentication or not - session.auth.prompting = not options.no_input - - return session - - def parse_args(self, args): - # factored out for testability - return self.parser.parse_args(args) - - def main(self, args): - options, args = self.parse_args(args) - - # Set verbosity so that it can be used elsewhere. - self.verbosity = options.verbose - options.quiet - - if self.verbosity >= 1: - level = "DEBUG" - elif self.verbosity == -1: - level = "WARNING" - elif self.verbosity == -2: - level = "ERROR" - elif self.verbosity <= -3: - level = "CRITICAL" - else: - level = "INFO" - - # The root logger should match the "console" level *unless* we - # specified "--log" to send debug logs to a file. - root_level = level - if options.log: - root_level = "DEBUG" - - logger_class = "pip._internal.utils.logging.ColorizedStreamHandler" - handler_class = "pip._internal.utils.logging.BetterRotatingFileHandler" - - logging.config.dictConfig({ - "version": 1, - "disable_existing_loggers": False, - "filters": { - "exclude_warnings": { - "()": "pip._internal.utils.logging.MaxLevelFilter", - "level": logging.WARNING, - }, - }, - "formatters": { - "indent": { - "()": IndentingFormatter, - "format": "%(message)s", - }, - }, - "handlers": { - "console": { - "level": level, - "class": logger_class, - "no_color": options.no_color, - "stream": self.log_streams[0], - "filters": ["exclude_warnings"], - "formatter": "indent", - }, - "console_errors": { - "level": "WARNING", - "class": logger_class, - "no_color": options.no_color, - "stream": self.log_streams[1], - "formatter": "indent", - }, - "user_log": { - "level": "DEBUG", - "class": handler_class, - "filename": options.log or "/dev/null", - "delay": True, - "formatter": "indent", - }, - }, - "root": { - "level": root_level, - "handlers": list(filter(None, [ - "console", - "console_errors", - "user_log" if options.log else None, - ])), - }, - # Disable any logging besides WARNING unless we have DEBUG level - # logging enabled. These use both pip._vendor and the bare names - # for the case where someone unbundles our libraries. - "loggers": { - name: { - "level": ( - "WARNING" if level in ["INFO", "ERROR"] else "DEBUG" - ) - } for name in [ - "pip._vendor", "distlib", "requests", "urllib3" - ] - }, - }) - - if sys.version_info[:2] == (3, 3): - warnings.warn( - "Python 3.3 supported has been deprecated and support for it " - "will be dropped in the future. Please upgrade your Python.", - deprecation.RemovedInPip11Warning, - ) - - # TODO: try to get these passing down from the command? - # without resorting to os.environ to hold these. - - if options.no_input: - os.environ['PIP_NO_INPUT'] = '1' - - if options.exists_action: - os.environ['PIP_EXISTS_ACTION'] = ' '.join(options.exists_action) - - if options.require_venv and not self.ignore_require_venv: - # If a venv is required check if it can really be found - if not running_under_virtualenv(): - logger.critical( - 'Could not find an activated virtualenv (required).' - ) - sys.exit(VIRTUALENV_NOT_FOUND) - - original_root_handlers = set(logging.root.handlers) - - try: - status = self.run(options, args) - # FIXME: all commands should return an exit status - # and when it is done, isinstance is not needed anymore - if isinstance(status, int): - return status - except PreviousBuildDirError as exc: - logger.critical(str(exc)) - logger.debug('Exception information:', exc_info=True) - - return PREVIOUS_BUILD_DIR_ERROR - except (InstallationError, UninstallationError, BadCommand) as exc: - logger.critical(str(exc)) - logger.debug('Exception information:', exc_info=True) - - return ERROR - except CommandError as exc: - logger.critical('ERROR: %s', exc) - logger.debug('Exception information:', exc_info=True) - - return ERROR - except KeyboardInterrupt: - logger.critical('Operation cancelled by user') - logger.debug('Exception information:', exc_info=True) - - return ERROR - except: - logger.critical('Exception:', exc_info=True) - - return UNKNOWN_ERROR - finally: - # Check if we're using the latest version of pip available - if (not options.disable_pip_version_check and not - getattr(options, "no_index", False)): - with self._build_session( - options, - retries=0, - timeout=min(5, options.timeout)) as session: - pip_version_check(session, options) - # Avoid leaking loggers - for handler in set(logging.root.handlers) - original_root_handlers: - # this method benefit from the Logger class internal lock - logging.root.removeHandler(handler) - - return SUCCESS - - -class RequirementCommand(Command): - - @staticmethod - def populate_requirement_set(requirement_set, args, options, finder, - session, name, wheel_cache): - """ - Marshal cmd line args into a requirement set. - """ - # NOTE: As a side-effect, options.require_hashes and - # requirement_set.require_hashes may be updated - - for filename in options.constraints: - for req_to_add in parse_requirements( - filename, - constraint=True, finder=finder, options=options, - session=session, wheel_cache=wheel_cache): - req_to_add.is_direct = True - requirement_set.add_requirement(req_to_add) - - for req in args: - req_to_add = InstallRequirement.from_line( - req, None, isolated=options.isolated_mode, - wheel_cache=wheel_cache - ) - req_to_add.is_direct = True - requirement_set.add_requirement(req_to_add) - - for req in options.editables: - req_to_add = InstallRequirement.from_editable( - req, - isolated=options.isolated_mode, - wheel_cache=wheel_cache - ) - req_to_add.is_direct = True - requirement_set.add_requirement(req_to_add) - - for filename in options.requirements: - for req_to_add in parse_requirements( - filename, - finder=finder, options=options, session=session, - wheel_cache=wheel_cache): - req_to_add.is_direct = True - requirement_set.add_requirement(req_to_add) - # If --require-hashes was a line in a requirements file, tell - # RequirementSet about it: - requirement_set.require_hashes = options.require_hashes - - if not (args or options.editables or options.requirements): - opts = {'name': name} - if options.find_links: - raise CommandError( - 'You must give at least one requirement to %(name)s ' - '(maybe you meant "pip %(name)s %(links)s"?)' % - dict(opts, links=' '.join(options.find_links))) - else: - raise CommandError( - 'You must give at least one requirement to %(name)s ' - '(see "pip help %(name)s")' % opts) - - # On Windows, any operation modifying pip should be run as: - # python -m pip ... - # See https://github.com/pypa/pip/issues/1299 for more discussion - should_show_use_python_msg = ( - WINDOWS and - requirement_set.has_requirement("pip") and - os.path.basename(sys.argv[0]).startswith("pip") - ) - if should_show_use_python_msg: - new_command = [ - sys.executable, "-m", "pip" - ] + sys.argv[1:] - raise CommandError( - 'To modify pip, please run the following command:\n{}' - .format(" ".join(new_command)) - ) - - def _build_package_finder(self, options, session, - platform=None, python_versions=None, - abi=None, implementation=None): - """ - Create a package finder appropriate to this requirement command. - """ - index_urls = [options.index_url] + options.extra_index_urls - if options.no_index: - logger.debug('Ignoring indexes: %s', ','.join(index_urls)) - index_urls = [] - - return PackageFinder( - find_links=options.find_links, - format_control=options.format_control, - index_urls=index_urls, - trusted_hosts=options.trusted_hosts, - allow_all_prereleases=options.pre, - process_dependency_links=options.process_dependency_links, - session=session, - platform=platform, - versions=python_versions, - abi=abi, - implementation=implementation, - ) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/baseparser.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/baseparser.py deleted file mode 100644 index 9a8d129..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/baseparser.py +++ /dev/null @@ -1,240 +0,0 @@ -"""Base option parser setup""" -from __future__ import absolute_import - -import logging -import optparse -import sys -import textwrap -from distutils.util import strtobool - -from pip._vendor.six import string_types - -from pip._internal.compat import get_terminal_size -from pip._internal.configuration import Configuration, ConfigurationError - -logger = logging.getLogger(__name__) - - -class PrettyHelpFormatter(optparse.IndentedHelpFormatter): - """A prettier/less verbose help formatter for optparse.""" - - def __init__(self, *args, **kwargs): - # help position must be aligned with __init__.parseopts.description - kwargs['max_help_position'] = 30 - kwargs['indent_increment'] = 1 - kwargs['width'] = get_terminal_size()[0] - 2 - optparse.IndentedHelpFormatter.__init__(self, *args, **kwargs) - - def format_option_strings(self, option): - return self._format_option_strings(option, ' <%s>', ', ') - - def _format_option_strings(self, option, mvarfmt=' <%s>', optsep=', '): - """ - Return a comma-separated list of option strings and metavars. - - :param option: tuple of (short opt, long opt), e.g: ('-f', '--format') - :param mvarfmt: metavar format string - evaluated as mvarfmt % metavar - :param optsep: separator - """ - opts = [] - - if option._short_opts: - opts.append(option._short_opts[0]) - if option._long_opts: - opts.append(option._long_opts[0]) - if len(opts) > 1: - opts.insert(1, optsep) - - if option.takes_value(): - metavar = option.metavar or option.dest.lower() - opts.append(mvarfmt % metavar.lower()) - - return ''.join(opts) - - def format_heading(self, heading): - if heading == 'Options': - return '' - return heading + ':\n' - - def format_usage(self, usage): - """ - Ensure there is only one newline between usage and the first heading - if there is no description. - """ - msg = '\nUsage: %s\n' % self.indent_lines(textwrap.dedent(usage), " ") - return msg - - def format_description(self, description): - # leave full control over description to us - if description: - if hasattr(self.parser, 'main'): - label = 'Commands' - else: - label = 'Description' - # some doc strings have initial newlines, some don't - description = description.lstrip('\n') - # some doc strings have final newlines and spaces, some don't - description = description.rstrip() - # dedent, then reindent - description = self.indent_lines(textwrap.dedent(description), " ") - description = '%s:\n%s\n' % (label, description) - return description - else: - return '' - - def format_epilog(self, epilog): - # leave full control over epilog to us - if epilog: - return epilog - else: - return '' - - def indent_lines(self, text, indent): - new_lines = [indent + line for line in text.split('\n')] - return "\n".join(new_lines) - - -class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter): - """Custom help formatter for use in ConfigOptionParser. - - This is updates the defaults before expanding them, allowing - them to show up correctly in the help listing. - """ - - def expand_default(self, option): - if self.parser is not None: - self.parser._update_defaults(self.parser.defaults) - return optparse.IndentedHelpFormatter.expand_default(self, option) - - -class CustomOptionParser(optparse.OptionParser): - - def insert_option_group(self, idx, *args, **kwargs): - """Insert an OptionGroup at a given position.""" - group = self.add_option_group(*args, **kwargs) - - self.option_groups.pop() - self.option_groups.insert(idx, group) - - return group - - @property - def option_list_all(self): - """Get a list of all options, including those in option groups.""" - res = self.option_list[:] - for i in self.option_groups: - res.extend(i.option_list) - - return res - - -class ConfigOptionParser(CustomOptionParser): - """Custom option parser which updates its defaults by checking the - configuration files and environmental variables""" - - def __init__(self, *args, **kwargs): - self.name = kwargs.pop('name') - - isolated = kwargs.pop("isolated", False) - self.config = Configuration(isolated) - - assert self.name - optparse.OptionParser.__init__(self, *args, **kwargs) - - def check_default(self, option, key, val): - try: - return option.check_value(key, val) - except optparse.OptionValueError as exc: - print("An error occurred during configuration: %s" % exc) - sys.exit(3) - - def _get_ordered_configuration_items(self): - # Configuration gives keys in an unordered manner. Order them. - override_order = ["global", self.name, ":env:"] - - # Pool the options into different groups - section_items = {name: [] for name in override_order} - for section_key, val in self.config.items(): - # ignore empty values - if not val: - logger.debug( - "Ignoring configuration key '%s' as it's value is empty.", - section_key - ) - continue - - section, key = section_key.split(".", 1) - if section in override_order: - section_items[section].append((key, val)) - - # Yield each group in their override order - for section in override_order: - for key, val in section_items[section]: - yield key, val - - def _update_defaults(self, defaults): - """Updates the given defaults with values from the config files and - the environ. Does a little special handling for certain types of - options (lists).""" - - # Accumulate complex default state. - self.values = optparse.Values(self.defaults) - late_eval = set() - # Then set the options with those values - for key, val in self._get_ordered_configuration_items(): - # '--' because configuration supports only long names - option = self.get_option('--' + key) - - # Ignore options not present in this parser. E.g. non-globals put - # in [global] by users that want them to apply to all applicable - # commands. - if option is None: - continue - - if option.action in ('store_true', 'store_false', 'count'): - val = strtobool(val) - elif option.action == 'append': - val = val.split() - val = [self.check_default(option, key, v) for v in val] - elif option.action == 'callback': - late_eval.add(option.dest) - opt_str = option.get_opt_string() - val = option.convert_value(opt_str, val) - # From take_action - args = option.callback_args or () - kwargs = option.callback_kwargs or {} - option.callback(option, opt_str, val, self, *args, **kwargs) - else: - val = self.check_default(option, key, val) - - defaults[option.dest] = val - - for key in late_eval: - defaults[key] = getattr(self.values, key) - self.values = None - return defaults - - def get_default_values(self): - """Overriding to make updating the defaults after instantiation of - the option parser possible, _update_defaults() does the dirty work.""" - if not self.process_default_values: - # Old, pre-Optik 1.5 behaviour. - return optparse.Values(self.defaults) - - # Load the configuration, or error out in case of an error - try: - self.config.load() - except ConfigurationError as err: - self.exit(2, err.args[0]) - - defaults = self._update_defaults(self.defaults.copy()) # ours - for option in self._get_all_options(): - default = defaults.get(option.dest) - if isinstance(default, string_types): - opt_str = option.get_opt_string() - defaults[option.dest] = option.check_value(opt_str, default) - return optparse.Values(defaults) - - def error(self, msg): - self.print_usage(sys.stderr) - self.exit(2, "%s\n" % msg) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/build_env.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/build_env.py deleted file mode 100644 index 791d734..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/build_env.py +++ /dev/null @@ -1,92 +0,0 @@ -"""Build Environment used for isolation during sdist building -""" - -import os -from distutils.sysconfig import get_python_lib -from sysconfig import get_paths - -from pip._internal.utils.temp_dir import TempDirectory - - -class BuildEnvironment(object): - """Creates and manages an isolated environment to install build deps - """ - - def __init__(self, no_clean): - self._temp_dir = TempDirectory(kind="build-env") - self._no_clean = no_clean - - @property - def path(self): - return self._temp_dir.path - - def __enter__(self): - self._temp_dir.create() - - self.save_path = os.environ.get('PATH', None) - self.save_pythonpath = os.environ.get('PYTHONPATH', None) - self.save_nousersite = os.environ.get('PYTHONNOUSERSITE', None) - - install_scheme = 'nt' if (os.name == 'nt') else 'posix_prefix' - install_dirs = get_paths(install_scheme, vars={ - 'base': self.path, - 'platbase': self.path, - }) - - scripts = install_dirs['scripts'] - if self.save_path: - os.environ['PATH'] = scripts + os.pathsep + self.save_path - else: - os.environ['PATH'] = scripts + os.pathsep + os.defpath - - # Note: prefer distutils' sysconfig to get the - # library paths so PyPy is correctly supported. - purelib = get_python_lib(plat_specific=0, prefix=self.path) - platlib = get_python_lib(plat_specific=1, prefix=self.path) - if purelib == platlib: - lib_dirs = purelib - else: - lib_dirs = purelib + os.pathsep + platlib - if self.save_pythonpath: - os.environ['PYTHONPATH'] = lib_dirs + os.pathsep + \ - self.save_pythonpath - else: - os.environ['PYTHONPATH'] = lib_dirs - - os.environ['PYTHONNOUSERSITE'] = '1' - - return self.path - - def __exit__(self, exc_type, exc_val, exc_tb): - if not self._no_clean: - self._temp_dir.cleanup() - - def restore_var(varname, old_value): - if old_value is None: - os.environ.pop(varname, None) - else: - os.environ[varname] = old_value - - restore_var('PATH', self.save_path) - restore_var('PYTHONPATH', self.save_pythonpath) - restore_var('PYTHONNOUSERSITE', self.save_nousersite) - - def cleanup(self): - self._temp_dir.cleanup() - - -class NoOpBuildEnvironment(BuildEnvironment): - """A no-op drop-in replacement for BuildEnvironment - """ - - def __init__(self, no_clean): - pass - - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_val, exc_tb): - pass - - def cleanup(self): - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cache.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cache.py deleted file mode 100644 index 1aa17aa..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cache.py +++ /dev/null @@ -1,202 +0,0 @@ -"""Cache Management -""" - -import errno -import hashlib -import logging -import os - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal import index -from pip._internal.compat import expanduser -from pip._internal.download import path_to_url -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.wheel import InvalidWheelFilename, Wheel - -logger = logging.getLogger(__name__) - - -class Cache(object): - """An abstract class - provides cache directories for data from links - - - :param cache_dir: The root of the cache. - :param format_control: A pip.index.FormatControl object to limit - binaries being read from the cache. - :param allowed_formats: which formats of files the cache should store. - ('binary' and 'source' are the only allowed values) - """ - - def __init__(self, cache_dir, format_control, allowed_formats): - super(Cache, self).__init__() - self.cache_dir = expanduser(cache_dir) if cache_dir else None - self.format_control = format_control - self.allowed_formats = allowed_formats - - _valid_formats = {"source", "binary"} - assert self.allowed_formats.union(_valid_formats) == _valid_formats - - def _get_cache_path_parts(self, link): - """Get parts of part that must be os.path.joined with cache_dir - """ - - # We want to generate an url to use as our cache key, we don't want to - # just re-use the URL because it might have other items in the fragment - # and we don't care about those. - key_parts = [link.url_without_fragment] - if link.hash_name is not None and link.hash is not None: - key_parts.append("=".join([link.hash_name, link.hash])) - key_url = "#".join(key_parts) - - # Encode our key url with sha224, we'll use this because it has similar - # security properties to sha256, but with a shorter total output (and - # thus less secure). However the differences don't make a lot of - # difference for our use case here. - hashed = hashlib.sha224(key_url.encode()).hexdigest() - - # We want to nest the directories some to prevent having a ton of top - # level directories where we might run out of sub directories on some - # FS. - parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]] - - return parts - - def _get_candidates(self, link, package_name): - can_not_cache = ( - not self.cache_dir or - not package_name or - not link - ) - if can_not_cache: - return [] - - canonical_name = canonicalize_name(package_name) - formats = index.fmt_ctl_formats( - self.format_control, canonical_name - ) - if not self.allowed_formats.intersection(formats): - return [] - - root = self.get_path_for_link(link) - try: - return os.listdir(root) - except OSError as err: - if err.errno in {errno.ENOENT, errno.ENOTDIR}: - return [] - raise - - def get_path_for_link(self, link): - """Return a directory to store cached items in for link. - """ - raise NotImplementedError() - - def get(self, link, package_name): - """Returns a link to a cached item if it exists, otherwise returns the - passed link. - """ - raise NotImplementedError() - - def _link_for_candidate(self, link, candidate): - root = self.get_path_for_link(link) - path = os.path.join(root, candidate) - - return index.Link(path_to_url(path)) - - def cleanup(self): - pass - - -class SimpleWheelCache(Cache): - """A cache of wheels for future installs. - """ - - def __init__(self, cache_dir, format_control): - super(SimpleWheelCache, self).__init__( - cache_dir, format_control, {"binary"} - ) - - def get_path_for_link(self, link): - """Return a directory to store cached wheels for link - - Because there are M wheels for any one sdist, we provide a directory - to cache them in, and then consult that directory when looking up - cache hits. - - We only insert things into the cache if they have plausible version - numbers, so that we don't contaminate the cache with things that were - not unique. E.g. ./package might have dozens of installs done for it - and build a version of 0.0...and if we built and cached a wheel, we'd - end up using the same wheel even if the source has been edited. - - :param link: The link of the sdist for which this will cache wheels. - """ - parts = self._get_cache_path_parts(link) - - # Store wheels within the root cache_dir - return os.path.join(self.cache_dir, "wheels", *parts) - - def get(self, link, package_name): - candidates = [] - - for wheel_name in self._get_candidates(link, package_name): - try: - wheel = Wheel(wheel_name) - except InvalidWheelFilename: - continue - if not wheel.supported(): - # Built for a different python/arch/etc - continue - candidates.append((wheel.support_index_min(), wheel_name)) - - if not candidates: - return link - - return self._link_for_candidate(link, min(candidates)[1]) - - -class EphemWheelCache(SimpleWheelCache): - """A SimpleWheelCache that creates it's own temporary cache directory - """ - - def __init__(self, format_control): - self._temp_dir = TempDirectory(kind="ephem-wheel-cache") - self._temp_dir.create() - - super(EphemWheelCache, self).__init__( - self._temp_dir.path, format_control - ) - - def cleanup(self): - self._temp_dir.cleanup() - - -class WheelCache(Cache): - """Wraps EphemWheelCache and SimpleWheelCache into a single Cache - - This Cache allows for gracefully degradation, using the ephem wheel cache - when a certain link is not found in the simple wheel cache first. - """ - - def __init__(self, cache_dir, format_control): - super(WheelCache, self).__init__( - cache_dir, format_control, {'binary'} - ) - self._wheel_cache = SimpleWheelCache(cache_dir, format_control) - self._ephem_cache = EphemWheelCache(format_control) - - def get_path_for_link(self, link): - return self._wheel_cache.get_path_for_link(link) - - def get_ephem_path_for_link(self, link): - return self._ephem_cache.get_path_for_link(link) - - def get(self, link, package_name): - retval = self._wheel_cache.get(link, package_name) - if retval is link: - retval = self._ephem_cache.get(link, package_name) - return retval - - def cleanup(self): - self._wheel_cache.cleanup() - self._ephem_cache.cleanup() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cmdoptions.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cmdoptions.py deleted file mode 100644 index 6319995..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/cmdoptions.py +++ /dev/null @@ -1,609 +0,0 @@ -""" -shared options and groups - -The principle here is to define options once, but *not* instantiate them -globally. One reason being that options with action='append' can carry state -between parses. pip parses general options twice internally, and shouldn't -pass on state. To be consistent, all options will follow this design. - -""" -from __future__ import absolute_import - -import warnings -from functools import partial -from optparse import SUPPRESS_HELP, Option, OptionGroup - -from pip._internal.index import ( - FormatControl, fmt_ctl_handle_mutual_exclude, fmt_ctl_no_binary, -) -from pip._internal.locations import USER_CACHE_DIR, src_prefix -from pip._internal.models import PyPI -from pip._internal.utils.hashes import STRONG_HASHES -from pip._internal.utils.typing import MYPY_CHECK_RUNNING -from pip._internal.utils.ui import BAR_TYPES - -if MYPY_CHECK_RUNNING: - from typing import Any - - -def make_option_group(group, parser): - """ - Return an OptionGroup object - group -- assumed to be dict with 'name' and 'options' keys - parser -- an optparse Parser - """ - option_group = OptionGroup(parser, group['name']) - for option in group['options']: - option_group.add_option(option()) - return option_group - - -def check_install_build_global(options, check_options=None): - """Disable wheels if per-setup.py call options are set. - - :param options: The OptionParser options to update. - :param check_options: The options to check, if not supplied defaults to - options. - """ - if check_options is None: - check_options = options - - def getname(n): - return getattr(check_options, n, None) - names = ["build_options", "global_options", "install_options"] - if any(map(getname, names)): - control = options.format_control - fmt_ctl_no_binary(control) - warnings.warn( - 'Disabling all use of wheels due to the use of --build-options ' - '/ --global-options / --install-options.', stacklevel=2, - ) - - -########### -# options # -########### - -help_ = partial( - Option, - '-h', '--help', - dest='help', - action='help', - help='Show help.', -) # type: Any - -isolated_mode = partial( - Option, - "--isolated", - dest="isolated_mode", - action="store_true", - default=False, - help=( - "Run pip in an isolated mode, ignoring environment variables and user " - "configuration." - ), -) - -require_virtualenv = partial( - Option, - # Run only if inside a virtualenv, bail if not. - '--require-virtualenv', '--require-venv', - dest='require_venv', - action='store_true', - default=False, - help=SUPPRESS_HELP -) # type: Any - -verbose = partial( - Option, - '-v', '--verbose', - dest='verbose', - action='count', - default=0, - help='Give more output. Option is additive, and can be used up to 3 times.' -) - -no_color = partial( - Option, - '--no-color', - dest='no_color', - action='store_true', - default=False, - help="Suppress colored output", -) - -version = partial( - Option, - '-V', '--version', - dest='version', - action='store_true', - help='Show version and exit.', -) # type: Any - -quiet = partial( - Option, - '-q', '--quiet', - dest='quiet', - action='count', - default=0, - help=( - 'Give less output. Option is additive, and can be used up to 3' - ' times (corresponding to WARNING, ERROR, and CRITICAL logging' - ' levels).' - ), -) # type: Any - -progress_bar = partial( - Option, - '--progress-bar', - dest='progress_bar', - type='choice', - choices=list(BAR_TYPES.keys()), - default='on', - help=( - 'Specify type of progress to be displayed [' + - '|'.join(BAR_TYPES.keys()) + '] (default: %default)' - ), -) # type: Any - -log = partial( - Option, - "--log", "--log-file", "--local-log", - dest="log", - metavar="path", - help="Path to a verbose appending log." -) # type: Any - -no_input = partial( - Option, - # Don't ask for input - '--no-input', - dest='no_input', - action='store_true', - default=False, - help=SUPPRESS_HELP -) # type: Any - -proxy = partial( - Option, - '--proxy', - dest='proxy', - type='str', - default='', - help="Specify a proxy in the form [user:passwd@]proxy.server:port." -) # type: Any - -retries = partial( - Option, - '--retries', - dest='retries', - type='int', - default=5, - help="Maximum number of retries each connection should attempt " - "(default %default times).", -) # type: Any - -timeout = partial( - Option, - '--timeout', '--default-timeout', - metavar='sec', - dest='timeout', - type='float', - default=15, - help='Set the socket timeout (default %default seconds).', -) # type: Any - -skip_requirements_regex = partial( - Option, - # A regex to be used to skip requirements - '--skip-requirements-regex', - dest='skip_requirements_regex', - type='str', - default='', - help=SUPPRESS_HELP, -) # type: Any - - -def exists_action(): - return Option( - # Option when path already exist - '--exists-action', - dest='exists_action', - type='choice', - choices=['s', 'i', 'w', 'b', 'a'], - default=[], - action='append', - metavar='action', - help="Default action when a path already exists: " - "(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort).", - ) - - -cert = partial( - Option, - '--cert', - dest='cert', - type='str', - metavar='path', - help="Path to alternate CA bundle.", -) # type: Any - -client_cert = partial( - Option, - '--client-cert', - dest='client_cert', - type='str', - default=None, - metavar='path', - help="Path to SSL client certificate, a single file containing the " - "private key and the certificate in PEM format.", -) # type: Any - -index_url = partial( - Option, - '-i', '--index-url', '--pypi-url', - dest='index_url', - metavar='URL', - default=PyPI.simple_url, - help="Base URL of Python Package Index (default %default). " - "This should point to a repository compliant with PEP 503 " - "(the simple repository API) or a local directory laid out " - "in the same format.", -) # type: Any - - -def extra_index_url(): - return Option( - '--extra-index-url', - dest='extra_index_urls', - metavar='URL', - action='append', - default=[], - help="Extra URLs of package indexes to use in addition to " - "--index-url. Should follow the same rules as " - "--index-url.", - ) - - -no_index = partial( - Option, - '--no-index', - dest='no_index', - action='store_true', - default=False, - help='Ignore package index (only looking at --find-links URLs instead).', -) # type: Any - - -def find_links(): - return Option( - '-f', '--find-links', - dest='find_links', - action='append', - default=[], - metavar='url', - help="If a url or path to an html file, then parse for links to " - "archives. If a local path or file:// url that's a directory, " - "then look for archives in the directory listing.", - ) - - -def trusted_host(): - return Option( - "--trusted-host", - dest="trusted_hosts", - action="append", - metavar="HOSTNAME", - default=[], - help="Mark this host as trusted, even though it does not have valid " - "or any HTTPS.", - ) - - -# Remove after 1.5 -process_dependency_links = partial( - Option, - "--process-dependency-links", - dest="process_dependency_links", - action="store_true", - default=False, - help="Enable the processing of dependency links.", -) # type: Any - - -def constraints(): - return Option( - '-c', '--constraint', - dest='constraints', - action='append', - default=[], - metavar='file', - help='Constrain versions using the given constraints file. ' - 'This option can be used multiple times.' - ) - - -def requirements(): - return Option( - '-r', '--requirement', - dest='requirements', - action='append', - default=[], - metavar='file', - help='Install from the given requirements file. ' - 'This option can be used multiple times.' - ) - - -def editable(): - return Option( - '-e', '--editable', - dest='editables', - action='append', - default=[], - metavar='path/url', - help=('Install a project in editable mode (i.e. setuptools ' - '"develop mode") from a local project path or a VCS url.'), - ) - - -src = partial( - Option, - '--src', '--source', '--source-dir', '--source-directory', - dest='src_dir', - metavar='dir', - default=src_prefix, - help='Directory to check out editable projects into. ' - 'The default in a virtualenv is "/src". ' - 'The default for global installs is "/src".' -) # type: Any - - -def _get_format_control(values, option): - """Get a format_control object.""" - return getattr(values, option.dest) - - -def _handle_no_binary(option, opt_str, value, parser): - existing = getattr(parser.values, option.dest) - fmt_ctl_handle_mutual_exclude( - value, existing.no_binary, existing.only_binary, - ) - - -def _handle_only_binary(option, opt_str, value, parser): - existing = getattr(parser.values, option.dest) - fmt_ctl_handle_mutual_exclude( - value, existing.only_binary, existing.no_binary, - ) - - -def no_binary(): - return Option( - "--no-binary", dest="format_control", action="callback", - callback=_handle_no_binary, type="str", - default=FormatControl(set(), set()), - help="Do not use binary packages. Can be supplied multiple times, and " - "each time adds to the existing value. Accepts either :all: to " - "disable all binary packages, :none: to empty the set, or one or " - "more package names with commas between them. Note that some " - "packages are tricky to compile and may fail to install when " - "this option is used on them.", - ) - - -def only_binary(): - return Option( - "--only-binary", dest="format_control", action="callback", - callback=_handle_only_binary, type="str", - default=FormatControl(set(), set()), - help="Do not use source packages. Can be supplied multiple times, and " - "each time adds to the existing value. Accepts either :all: to " - "disable all source packages, :none: to empty the set, or one or " - "more package names with commas between them. Packages without " - "binary distributions will fail to install when this option is " - "used on them.", - ) - - -cache_dir = partial( - Option, - "--cache-dir", - dest="cache_dir", - default=USER_CACHE_DIR, - metavar="dir", - help="Store the cache data in

." -) - -no_cache = partial( - Option, - "--no-cache-dir", - dest="cache_dir", - action="store_false", - help="Disable the cache.", -) - -no_deps = partial( - Option, - '--no-deps', '--no-dependencies', - dest='ignore_dependencies', - action='store_true', - default=False, - help="Don't install package dependencies.", -) # type: Any - -build_dir = partial( - Option, - '-b', '--build', '--build-dir', '--build-directory', - dest='build_dir', - metavar='dir', - help='Directory to unpack packages into and build in. Note that ' - 'an initial build still takes place in a temporary directory. ' - 'The location of temporary directories can be controlled by setting ' - 'the TMPDIR environment variable (TEMP on Windows) appropriately. ' - 'When passed, build directories are not cleaned in case of failures.' -) # type: Any - -ignore_requires_python = partial( - Option, - '--ignore-requires-python', - dest='ignore_requires_python', - action='store_true', - help='Ignore the Requires-Python information.' -) # type: Any - -no_build_isolation = partial( - Option, - '--no-build-isolation', - dest='build_isolation', - action='store_false', - default=True, - help='Disable isolation when building a modern source distribution. ' - 'Build dependencies specified by PEP 518 must be already installed ' - 'if this option is used.' -) # type: Any - -install_options = partial( - Option, - '--install-option', - dest='install_options', - action='append', - metavar='options', - help="Extra arguments to be supplied to the setup.py install " - "command (use like --install-option=\"--install-scripts=/usr/local/" - "bin\"). Use multiple --install-option options to pass multiple " - "options to setup.py install. If you are using an option with a " - "directory path, be sure to use absolute path.", -) # type: Any - -global_options = partial( - Option, - '--global-option', - dest='global_options', - action='append', - metavar='options', - help="Extra global options to be supplied to the setup.py " - "call before the install command.", -) # type: Any - -no_clean = partial( - Option, - '--no-clean', - action='store_true', - default=False, - help="Don't clean up build directories)." -) # type: Any - -pre = partial( - Option, - '--pre', - action='store_true', - default=False, - help="Include pre-release and development versions. By default, " - "pip only finds stable versions.", -) # type: Any - -disable_pip_version_check = partial( - Option, - "--disable-pip-version-check", - dest="disable_pip_version_check", - action="store_true", - default=False, - help="Don't periodically check PyPI to determine whether a new version " - "of pip is available for download. Implied with --no-index.", -) # type: Any - - -# Deprecated, Remove later -always_unzip = partial( - Option, - '-Z', '--always-unzip', - dest='always_unzip', - action='store_true', - help=SUPPRESS_HELP, -) # type: Any - - -def _merge_hash(option, opt_str, value, parser): - """Given a value spelled "algo:digest", append the digest to a list - pointed to in a dict by the algo name.""" - if not parser.values.hashes: - parser.values.hashes = {} - try: - algo, digest = value.split(':', 1) - except ValueError: - parser.error('Arguments to %s must be a hash name ' - 'followed by a value, like --hash=sha256:abcde...' % - opt_str) - if algo not in STRONG_HASHES: - parser.error('Allowed hash algorithms for %s are %s.' % - (opt_str, ', '.join(STRONG_HASHES))) - parser.values.hashes.setdefault(algo, []).append(digest) - - -hash = partial( - Option, - '--hash', - # Hash values eventually end up in InstallRequirement.hashes due to - # __dict__ copying in process_line(). - dest='hashes', - action='callback', - callback=_merge_hash, - type='string', - help="Verify that the package's archive matches this " - 'hash before installing. Example: --hash=sha256:abcdef...', -) # type: Any - - -require_hashes = partial( - Option, - '--require-hashes', - dest='require_hashes', - action='store_true', - default=False, - help='Require a hash to check each requirement against, for ' - 'repeatable installs. This option is implied when any package in a ' - 'requirements file has a --hash option.', -) # type: Any - - -########## -# groups # -########## - -general_group = { - 'name': 'General Options', - 'options': [ - help_, - isolated_mode, - require_virtualenv, - verbose, - version, - quiet, - log, - no_input, - proxy, - retries, - timeout, - skip_requirements_regex, - exists_action, - trusted_host, - cert, - client_cert, - cache_dir, - no_cache, - disable_pip_version_check, - no_color, - ] -} - -index_group = { - 'name': 'Package Index Options', - 'options': [ - index_url, - extra_index_url, - no_index, - find_links, - process_dependency_links, - ] -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/__init__.py deleted file mode 100644 index d79c48e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/__init__.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Package containing all pip commands -""" -from __future__ import absolute_import - -from pip._internal.commands.completion import CompletionCommand -from pip._internal.commands.configuration import ConfigurationCommand -from pip._internal.commands.download import DownloadCommand -from pip._internal.commands.freeze import FreezeCommand -from pip._internal.commands.hash import HashCommand -from pip._internal.commands.help import HelpCommand -from pip._internal.commands.list import ListCommand -from pip._internal.commands.check import CheckCommand -from pip._internal.commands.search import SearchCommand -from pip._internal.commands.show import ShowCommand -from pip._internal.commands.install import InstallCommand -from pip._internal.commands.uninstall import UninstallCommand -from pip._internal.commands.wheel import WheelCommand - -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from typing import List, Type - from pip._internal.basecommand import Command - -commands_order = [ - InstallCommand, - DownloadCommand, - UninstallCommand, - FreezeCommand, - ListCommand, - ShowCommand, - CheckCommand, - ConfigurationCommand, - SearchCommand, - WheelCommand, - HashCommand, - CompletionCommand, - HelpCommand, -] # type: List[Type[Command]] - -commands_dict = {c.name: c for c in commands_order} - - -def get_summaries(ordered=True): - """Yields sorted (command name, command summary) tuples.""" - - if ordered: - cmditems = _sort_commands(commands_dict, commands_order) - else: - cmditems = commands_dict.items() - - for name, command_class in cmditems: - yield (name, command_class.summary) - - -def get_similar_commands(name): - """Command name auto-correct.""" - from difflib import get_close_matches - - name = name.lower() - - close_commands = get_close_matches(name, commands_dict.keys()) - - if close_commands: - return close_commands[0] - else: - return False - - -def _sort_commands(cmddict, order): - def keyfn(key): - try: - return order.index(key[1]) - except ValueError: - # unordered items should come last - return 0xff - - return sorted(cmddict.items(), key=keyfn) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/check.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/check.py deleted file mode 100644 index 88db510..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/check.py +++ /dev/null @@ -1,42 +0,0 @@ -import logging - -from pip._internal.basecommand import Command -from pip._internal.operations.check import ( - check_package_set, create_package_set_from_installed, -) -from pip._internal.utils.misc import get_installed_distributions - -logger = logging.getLogger(__name__) - - -class CheckCommand(Command): - """Verify installed packages have compatible dependencies.""" - name = 'check' - usage = """ - %prog [options]""" - summary = 'Verify installed packages have compatible dependencies.' - - def run(self, options, args): - package_set = create_package_set_from_installed() - missing, conflicting = check_package_set(package_set) - - for project_name in missing: - version = package_set[project_name].version - for dependency in missing[project_name]: - logger.info( - "%s %s requires %s, which is not installed.", - project_name, version, dependency[0], - ) - - for project_name in conflicting: - version = package_set[project_name].version - for dep_name, dep_version, req in conflicting[project_name]: - logger.info( - "%s %s has requirement %s, but you have %s %s.", - project_name, version, req, dep_name, dep_version, - ) - - if missing or conflicting: - return 1 - else: - logger.info("No broken requirements found.") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/completion.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/completion.py deleted file mode 100644 index c4b3873..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/completion.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import absolute_import - -import sys -import textwrap - -from pip._internal.basecommand import Command -from pip._internal.utils.misc import get_prog - -BASE_COMPLETION = """ -# pip %(shell)s completion start%(script)s# pip %(shell)s completion end -""" - -COMPLETION_SCRIPTS = { - 'bash': """ - _pip_completion() - { - COMPREPLY=( $( COMP_WORDS="${COMP_WORDS[*]}" \\ - COMP_CWORD=$COMP_CWORD \\ - PIP_AUTO_COMPLETE=1 $1 ) ) - } - complete -o default -F _pip_completion %(prog)s - """, - 'zsh': """ - function _pip_completion { - local words cword - read -Ac words - read -cn cword - reply=( $( COMP_WORDS="$words[*]" \\ - COMP_CWORD=$(( cword-1 )) \\ - PIP_AUTO_COMPLETE=1 $words[1] ) ) - } - compctl -K _pip_completion %(prog)s - """, - 'fish': """ - function __fish_complete_pip - set -lx COMP_WORDS (commandline -o) "" - set -lx COMP_CWORD ( \\ - math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\ - ) - set -lx PIP_AUTO_COMPLETE 1 - string split \\ -- (eval $COMP_WORDS[1]) - end - complete -fa "(__fish_complete_pip)" -c %(prog)s - """, -} - - -class CompletionCommand(Command): - """A helper command to be used for command completion.""" - name = 'completion' - summary = 'A helper command used for command completion.' - ignore_require_venv = True - - def __init__(self, *args, **kw): - super(CompletionCommand, self).__init__(*args, **kw) - - cmd_opts = self.cmd_opts - - cmd_opts.add_option( - '--bash', '-b', - action='store_const', - const='bash', - dest='shell', - help='Emit completion code for bash') - cmd_opts.add_option( - '--zsh', '-z', - action='store_const', - const='zsh', - dest='shell', - help='Emit completion code for zsh') - cmd_opts.add_option( - '--fish', '-f', - action='store_const', - const='fish', - dest='shell', - help='Emit completion code for fish') - - self.parser.insert_option_group(0, cmd_opts) - - def run(self, options, args): - """Prints the completion code of the given shell""" - shells = COMPLETION_SCRIPTS.keys() - shell_options = ['--' + shell for shell in sorted(shells)] - if options.shell in shells: - script = textwrap.dedent( - COMPLETION_SCRIPTS.get(options.shell, '') % { - 'prog': get_prog(), - } - ) - print(BASE_COMPLETION % {'script': script, 'shell': options.shell}) - else: - sys.stderr.write( - 'ERROR: You must pass %s\n' % ' or '.join(shell_options) - ) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/configuration.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/configuration.py deleted file mode 100644 index 57448cb..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/configuration.py +++ /dev/null @@ -1,227 +0,0 @@ -import logging -import os -import subprocess - -from pip._internal.basecommand import Command -from pip._internal.configuration import Configuration, kinds -from pip._internal.exceptions import PipError -from pip._internal.locations import venv_config_file -from pip._internal.status_codes import ERROR, SUCCESS -from pip._internal.utils.misc import get_prog - -logger = logging.getLogger(__name__) - - -class ConfigurationCommand(Command): - """Manage local and global configuration. - - Subcommands: - - list: List the active configuration (or from the file specified) - edit: Edit the configuration file in an editor - get: Get the value associated with name - set: Set the name=value - unset: Unset the value associated with name - - If none of --user, --global and --venv are passed, a virtual - environment configuration file is used if one is active and the file - exists. Otherwise, all modifications happen on the to the user file by - default. - """ - - name = 'config' - usage = """ - %prog [] list - %prog [] [--editor ] edit - - %prog [] get name - %prog [] set name value - %prog [] unset name - """ - - summary = "Manage local and global configuration." - - def __init__(self, *args, **kwargs): - super(ConfigurationCommand, self).__init__(*args, **kwargs) - - self.configuration = None - - self.cmd_opts.add_option( - '--editor', - dest='editor', - action='store', - default=None, - help=( - 'Editor to use to edit the file. Uses VISUAL or EDITOR ' - 'environment variables if not provided.' - ) - ) - - self.cmd_opts.add_option( - '--global', - dest='global_file', - action='store_true', - default=False, - help='Use the system-wide configuration file only' - ) - - self.cmd_opts.add_option( - '--user', - dest='user_file', - action='store_true', - default=False, - help='Use the user configuration file only' - ) - - self.cmd_opts.add_option( - '--venv', - dest='venv_file', - action='store_true', - default=False, - help='Use the virtualenv configuration file only' - ) - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options, args): - handlers = { - "list": self.list_values, - "edit": self.open_in_editor, - "get": self.get_name, - "set": self.set_name_value, - "unset": self.unset_name - } - - # Determine action - if not args or args[0] not in handlers: - logger.error("Need an action ({}) to perform.".format( - ", ".join(sorted(handlers))) - ) - return ERROR - - action = args[0] - - # Determine which configuration files are to be loaded - # Depends on whether the command is modifying. - try: - load_only = self._determine_file( - options, need_value=(action in ["get", "set", "unset", "edit"]) - ) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - # Load a new configuration - self.configuration = Configuration( - isolated=options.isolated_mode, load_only=load_only - ) - self.configuration.load() - - # Error handling happens here, not in the action-handlers. - try: - handlers[action](options, args[1:]) - except PipError as e: - logger.error(e.args[0]) - return ERROR - - return SUCCESS - - def _determine_file(self, options, need_value): - file_options = { - kinds.USER: options.user_file, - kinds.GLOBAL: options.global_file, - kinds.VENV: options.venv_file - } - - if sum(file_options.values()) == 0: - if not need_value: - return None - # Default to user, unless there's a virtualenv file. - elif os.path.exists(venv_config_file): - return kinds.VENV - else: - return kinds.USER - elif sum(file_options.values()) == 1: - # There's probably a better expression for this. - return [key for key in file_options if file_options[key]][0] - - raise PipError( - "Need exactly one file to operate upon " - "(--user, --venv, --global) to perform." - ) - - def list_values(self, options, args): - self._get_n_args(args, "list", n=0) - - for key, value in sorted(self.configuration.items()): - logger.info("%s=%r", key, value) - - def get_name(self, options, args): - key = self._get_n_args(args, "get [name]", n=1) - value = self.configuration.get_value(key) - - logger.info("%s", value) - - def set_name_value(self, options, args): - key, value = self._get_n_args(args, "set [name] [value]", n=2) - self.configuration.set_value(key, value) - - self._save_configuration() - - def unset_name(self, options, args): - key = self._get_n_args(args, "unset [name]", n=1) - self.configuration.unset_value(key) - - self._save_configuration() - - def open_in_editor(self, options, args): - editor = self._determine_editor(options) - - fname = self.configuration.get_file_to_edit() - if fname is None: - raise PipError("Could not determine appropriate file.") - - try: - subprocess.check_call([editor, fname]) - except subprocess.CalledProcessError as e: - raise PipError( - "Editor Subprocess exited with exit code {}" - .format(e.returncode) - ) - - def _get_n_args(self, args, example, n): - """Helper to make sure the command got the right number of arguments - """ - if len(args) != n: - msg = ( - 'Got unexpected number of arguments, expected {}. ' - '(example: "{} config {}")' - ).format(n, get_prog(), example) - raise PipError(msg) - - if n == 1: - return args[0] - else: - return args - - def _save_configuration(self): - # We successfully ran a modifying command. Need to save the - # configuration. - try: - self.configuration.save() - except Exception: - logger.error( - "Unable to save configuration. Please report this as a bug.", - exc_info=1 - ) - raise PipError("Internal Error.") - - def _determine_editor(self, options): - if options.editor is not None: - return options.editor - elif "VISUAL" in os.environ: - return os.environ["VISUAL"] - elif "EDITOR" in os.environ: - return os.environ["EDITOR"] - else: - raise PipError("Could not determine editor to use.") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/download.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/download.py deleted file mode 100644 index 5713d07..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/download.py +++ /dev/null @@ -1,233 +0,0 @@ -from __future__ import absolute_import - -import logging -import os - -from pip._internal import cmdoptions -from pip._internal.basecommand import RequirementCommand -from pip._internal.exceptions import CommandError -from pip._internal.index import FormatControl -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req import RequirementSet -from pip._internal.resolve import Resolver -from pip._internal.utils.filesystem import check_path_owner -from pip._internal.utils.misc import ensure_dir, normalize_path -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -class DownloadCommand(RequirementCommand): - """ - Download packages from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports downloading from "requirements files", which provide - an easy way to specify a whole environment to be downloaded. - """ - name = 'download' - - usage = """ - %prog [options] [package-index-options] ... - %prog [options] -r [package-index-options] ... - %prog [options] ... - %prog [options] ... - %prog [options] ...""" - - summary = 'Download packages.' - - def __init__(self, *args, **kw): - super(DownloadCommand, self).__init__(*args, **kw) - - cmd_opts = self.cmd_opts - - cmd_opts.add_option(cmdoptions.constraints()) - cmd_opts.add_option(cmdoptions.requirements()) - cmd_opts.add_option(cmdoptions.build_dir()) - cmd_opts.add_option(cmdoptions.no_deps()) - cmd_opts.add_option(cmdoptions.global_options()) - cmd_opts.add_option(cmdoptions.no_binary()) - cmd_opts.add_option(cmdoptions.only_binary()) - cmd_opts.add_option(cmdoptions.src()) - cmd_opts.add_option(cmdoptions.pre()) - cmd_opts.add_option(cmdoptions.no_clean()) - cmd_opts.add_option(cmdoptions.require_hashes()) - cmd_opts.add_option(cmdoptions.progress_bar()) - cmd_opts.add_option(cmdoptions.no_build_isolation()) - - cmd_opts.add_option( - '-d', '--dest', '--destination-dir', '--destination-directory', - dest='download_dir', - metavar='dir', - default=os.curdir, - help=("Download packages into ."), - ) - - cmd_opts.add_option( - '--platform', - dest='platform', - metavar='platform', - default=None, - help=("Only download wheels compatible with . " - "Defaults to the platform of the running system."), - ) - - cmd_opts.add_option( - '--python-version', - dest='python_version', - metavar='python_version', - default=None, - help=("Only download wheels compatible with Python " - "interpreter version . If not specified, then the " - "current system interpreter minor version is used. A major " - "version (e.g. '2') can be specified to match all " - "minor revs of that major version. A minor version " - "(e.g. '34') can also be specified."), - ) - - cmd_opts.add_option( - '--implementation', - dest='implementation', - metavar='implementation', - default=None, - help=("Only download wheels compatible with Python " - "implementation , e.g. 'pp', 'jy', 'cp', " - " or 'ip'. If not specified, then the current " - "interpreter implementation is used. Use 'py' to force " - "implementation-agnostic wheels."), - ) - - cmd_opts.add_option( - '--abi', - dest='abi', - metavar='abi', - default=None, - help=("Only download wheels compatible with Python " - "abi , e.g. 'pypy_41'. If not specified, then the " - "current interpreter abi tag is used. Generally " - "you will need to specify --implementation, " - "--platform, and --python-version when using " - "this option."), - ) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, cmd_opts) - - def run(self, options, args): - options.ignore_installed = True - # editable doesn't really make sense for `pip download`, but the bowels - # of the RequirementSet code require that property. - options.editables = [] - - if options.python_version: - python_versions = [options.python_version] - else: - python_versions = None - - dist_restriction_set = any([ - options.python_version, - options.platform, - options.abi, - options.implementation, - ]) - binary_only = FormatControl(set(), {':all:'}) - no_sdist_dependencies = ( - options.format_control != binary_only and - not options.ignore_dependencies - ) - if dist_restriction_set and no_sdist_dependencies: - raise CommandError( - "When restricting platform and interpreter constraints using " - "--python-version, --platform, --abi, or --implementation, " - "either --no-deps must be set, or --only-binary=:all: must be " - "set and --no-binary must not be set (or must be set to " - ":none:)." - ) - - options.src_dir = os.path.abspath(options.src_dir) - options.download_dir = normalize_path(options.download_dir) - - ensure_dir(options.download_dir) - - with self._build_session(options) as session: - finder = self._build_package_finder( - options=options, - session=session, - platform=options.platform, - python_versions=python_versions, - abi=options.abi, - implementation=options.implementation, - ) - build_delete = (not (options.no_clean or options.build_dir)) - if options.cache_dir and not check_path_owner(options.cache_dir): - logger.warning( - "The directory '%s' or its parent directory is not owned " - "by the current user and caching wheels has been " - "disabled. check the permissions and owner of that " - "directory. If executing pip with sudo, you may want " - "sudo's -H flag.", - options.cache_dir, - ) - options.cache_dir = None - - with TempDirectory( - options.build_dir, delete=build_delete, kind="download" - ) as directory: - - requirement_set = RequirementSet( - require_hashes=options.require_hashes, - ) - self.populate_requirement_set( - requirement_set, - args, - options, - finder, - session, - self.name, - None - ) - - preparer = RequirementPreparer( - build_dir=directory.path, - src_dir=options.src_dir, - download_dir=options.download_dir, - wheel_download_dir=None, - progress_bar=options.progress_bar, - build_isolation=options.build_isolation, - ) - - resolver = Resolver( - preparer=preparer, - finder=finder, - session=session, - wheel_cache=None, - use_user_site=False, - upgrade_strategy="to-satisfy-only", - force_reinstall=False, - ignore_dependencies=options.ignore_dependencies, - ignore_requires_python=False, - ignore_installed=True, - isolated=options.isolated_mode, - ) - resolver.resolve(requirement_set) - - downloaded = ' '.join([ - req.name for req in requirement_set.successfully_downloaded - ]) - if downloaded: - logger.info('Successfully downloaded %s', downloaded) - - # Clean up - if not options.no_clean: - requirement_set.cleanup_files() - - return requirement_set diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/freeze.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/freeze.py deleted file mode 100644 index 0d3d4ae..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/freeze.py +++ /dev/null @@ -1,96 +0,0 @@ -from __future__ import absolute_import - -import sys - -from pip._internal import index -from pip._internal.basecommand import Command -from pip._internal.cache import WheelCache -from pip._internal.compat import stdlib_pkgs -from pip._internal.operations.freeze import freeze - -DEV_PKGS = {'pip', 'setuptools', 'distribute', 'wheel'} - - -class FreezeCommand(Command): - """ - Output installed packages in requirements format. - - packages are listed in a case-insensitive sorted order. - """ - name = 'freeze' - usage = """ - %prog [options]""" - summary = 'Output installed packages in requirements format.' - log_streams = ("ext://sys.stderr", "ext://sys.stderr") - - def __init__(self, *args, **kw): - super(FreezeCommand, self).__init__(*args, **kw) - - self.cmd_opts.add_option( - '-r', '--requirement', - dest='requirements', - action='append', - default=[], - metavar='file', - help="Use the order in the given requirements file and its " - "comments when generating output. This option can be " - "used multiple times.") - self.cmd_opts.add_option( - '-f', '--find-links', - dest='find_links', - action='append', - default=[], - metavar='URL', - help='URL for finding packages, which will be added to the ' - 'output.') - self.cmd_opts.add_option( - '-l', '--local', - dest='local', - action='store_true', - default=False, - help='If in a virtualenv that has global access, do not output ' - 'globally-installed packages.') - self.cmd_opts.add_option( - '--user', - dest='user', - action='store_true', - default=False, - help='Only output packages installed in user-site.') - self.cmd_opts.add_option( - '--all', - dest='freeze_all', - action='store_true', - help='Do not skip these packages in the output:' - ' %s' % ', '.join(DEV_PKGS)) - self.cmd_opts.add_option( - '--exclude-editable', - dest='exclude_editable', - action='store_true', - help='Exclude editable package from output.') - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options, args): - format_control = index.FormatControl(set(), set()) - wheel_cache = WheelCache(options.cache_dir, format_control) - skip = set(stdlib_pkgs) - if not options.freeze_all: - skip.update(DEV_PKGS) - - freeze_kwargs = dict( - requirement=options.requirements, - find_links=options.find_links, - local_only=options.local, - user_only=options.user, - skip_regex=options.skip_requirements_regex, - isolated=options.isolated_mode, - wheel_cache=wheel_cache, - skip=skip, - exclude_editable=options.exclude_editable, - ) - - try: - for line in freeze(**freeze_kwargs): - sys.stdout.write(line + '\n') - finally: - wheel_cache.cleanup() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/hash.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/hash.py deleted file mode 100644 index 95353b0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/hash.py +++ /dev/null @@ -1,57 +0,0 @@ -from __future__ import absolute_import - -import hashlib -import logging -import sys - -from pip._internal.basecommand import Command -from pip._internal.status_codes import ERROR -from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES -from pip._internal.utils.misc import read_chunks - -logger = logging.getLogger(__name__) - - -class HashCommand(Command): - """ - Compute a hash of a local package archive. - - These can be used with --hash in a requirements file to do repeatable - installs. - - """ - name = 'hash' - usage = '%prog [options] ...' - summary = 'Compute hashes of package archives.' - ignore_require_venv = True - - def __init__(self, *args, **kw): - super(HashCommand, self).__init__(*args, **kw) - self.cmd_opts.add_option( - '-a', '--algorithm', - dest='algorithm', - choices=STRONG_HASHES, - action='store', - default=FAVORITE_HASH, - help='The hash algorithm to use: one of %s' % - ', '.join(STRONG_HASHES)) - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options, args): - if not args: - self.parser.print_usage(sys.stderr) - return ERROR - - algorithm = options.algorithm - for path in args: - logger.info('%s:\n--hash=%s:%s', - path, algorithm, _hash_of_file(path, algorithm)) - - -def _hash_of_file(path, algorithm): - """Return the hash digest of a file.""" - with open(path, 'rb') as archive: - hash = hashlib.new(algorithm) - for chunk in read_chunks(archive): - hash.update(chunk) - return hash.hexdigest() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/help.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/help.py deleted file mode 100644 index 06ca2c1..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/help.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import absolute_import - -from pip._internal.basecommand import SUCCESS, Command -from pip._internal.exceptions import CommandError - - -class HelpCommand(Command): - """Show help for commands""" - name = 'help' - usage = """ - %prog """ - summary = 'Show help for commands.' - ignore_require_venv = True - - def run(self, options, args): - from pip._internal.commands import commands_dict, get_similar_commands - - try: - # 'pip help' with no args is handled by pip.__init__.parseopt() - cmd_name = args[0] # the command we need help for - except IndexError: - return SUCCESS - - if cmd_name not in commands_dict: - guess = get_similar_commands(cmd_name) - - msg = ['unknown command "%s"' % cmd_name] - if guess: - msg.append('maybe you meant "%s"' % guess) - - raise CommandError(' - '.join(msg)) - - command = commands_dict[cmd_name]() - command.parser.print_help() - - return SUCCESS diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/install.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/install.py deleted file mode 100644 index 9138683..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/install.py +++ /dev/null @@ -1,502 +0,0 @@ -from __future__ import absolute_import - -import errno -import logging -import operator -import os -import shutil -from optparse import SUPPRESS_HELP - -from pip._internal import cmdoptions -from pip._internal.basecommand import RequirementCommand -from pip._internal.cache import WheelCache -from pip._internal.exceptions import ( - CommandError, InstallationError, PreviousBuildDirError, -) -from pip._internal.locations import distutils_scheme, virtualenv_no_global -from pip._internal.operations.check import check_install_conflicts -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req import RequirementSet, install_given_reqs -from pip._internal.resolve import Resolver -from pip._internal.status_codes import ERROR -from pip._internal.utils.filesystem import check_path_owner -from pip._internal.utils.misc import ensure_dir, get_installed_version -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.wheel import WheelBuilder - -try: - import wheel -except ImportError: - wheel = None - - -logger = logging.getLogger(__name__) - - -class InstallCommand(RequirementCommand): - """ - Install packages from: - - - PyPI (and other indexes) using requirement specifiers. - - VCS project urls. - - Local project directories. - - Local or remote source archives. - - pip also supports installing from "requirements files", which provide - an easy way to specify a whole environment to be installed. - """ - name = 'install' - - usage = """ - %prog [options] [package-index-options] ... - %prog [options] -r [package-index-options] ... - %prog [options] [-e] ... - %prog [options] [-e] ... - %prog [options] ...""" - - summary = 'Install packages.' - - def __init__(self, *args, **kw): - super(InstallCommand, self).__init__(*args, **kw) - - cmd_opts = self.cmd_opts - - cmd_opts.add_option(cmdoptions.requirements()) - cmd_opts.add_option(cmdoptions.constraints()) - cmd_opts.add_option(cmdoptions.no_deps()) - cmd_opts.add_option(cmdoptions.pre()) - - cmd_opts.add_option(cmdoptions.editable()) - cmd_opts.add_option( - '-t', '--target', - dest='target_dir', - metavar='dir', - default=None, - help='Install packages into . ' - 'By default this will not replace existing files/folders in ' - '. Use --upgrade to replace existing packages in ' - 'with new versions.' - ) - cmd_opts.add_option( - '--user', - dest='use_user_site', - action='store_true', - help="Install to the Python user install directory for your " - "platform. Typically ~/.local/, or %APPDATA%\\Python on " - "Windows. (See the Python documentation for site.USER_BASE " - "for full details.)") - cmd_opts.add_option( - '--no-user', - dest='use_user_site', - action='store_false', - help=SUPPRESS_HELP) - cmd_opts.add_option( - '--root', - dest='root_path', - metavar='dir', - default=None, - help="Install everything relative to this alternate root " - "directory.") - cmd_opts.add_option( - '--prefix', - dest='prefix_path', - metavar='dir', - default=None, - help="Installation prefix where lib, bin and other top-level " - "folders are placed") - - cmd_opts.add_option(cmdoptions.build_dir()) - - cmd_opts.add_option(cmdoptions.src()) - - cmd_opts.add_option( - '-U', '--upgrade', - dest='upgrade', - action='store_true', - help='Upgrade all specified packages to the newest available ' - 'version. The handling of dependencies depends on the ' - 'upgrade-strategy used.' - ) - - cmd_opts.add_option( - '--upgrade-strategy', - dest='upgrade_strategy', - default='only-if-needed', - choices=['only-if-needed', 'eager'], - help='Determines how dependency upgrading should be handled ' - '[default: %default]. ' - '"eager" - dependencies are upgraded regardless of ' - 'whether the currently installed version satisfies the ' - 'requirements of the upgraded package(s). ' - '"only-if-needed" - are upgraded only when they do not ' - 'satisfy the requirements of the upgraded package(s).' - ) - - cmd_opts.add_option( - '--force-reinstall', - dest='force_reinstall', - action='store_true', - help='Reinstall all packages even if they are already ' - 'up-to-date.') - - cmd_opts.add_option( - '-I', '--ignore-installed', - dest='ignore_installed', - action='store_true', - help='Ignore the installed packages (reinstalling instead).') - - cmd_opts.add_option(cmdoptions.ignore_requires_python()) - cmd_opts.add_option(cmdoptions.no_build_isolation()) - - cmd_opts.add_option(cmdoptions.install_options()) - cmd_opts.add_option(cmdoptions.global_options()) - - cmd_opts.add_option( - "--compile", - action="store_true", - dest="compile", - default=True, - help="Compile Python source files to bytecode", - ) - - cmd_opts.add_option( - "--no-compile", - action="store_false", - dest="compile", - help="Do not compile Python source files to bytecode", - ) - - cmd_opts.add_option( - "--no-warn-script-location", - action="store_false", - dest="warn_script_location", - default=True, - help="Do not warn when installing scripts outside PATH", - ) - cmd_opts.add_option( - "--no-warn-conflicts", - action="store_false", - dest="warn_about_conflicts", - default=True, - help="Do not warn about broken dependencies", - ) - - cmd_opts.add_option(cmdoptions.no_binary()) - cmd_opts.add_option(cmdoptions.only_binary()) - cmd_opts.add_option(cmdoptions.no_clean()) - cmd_opts.add_option(cmdoptions.require_hashes()) - cmd_opts.add_option(cmdoptions.progress_bar()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, cmd_opts) - - def run(self, options, args): - cmdoptions.check_install_build_global(options) - - upgrade_strategy = "to-satisfy-only" - if options.upgrade: - upgrade_strategy = options.upgrade_strategy - - if options.build_dir: - options.build_dir = os.path.abspath(options.build_dir) - - options.src_dir = os.path.abspath(options.src_dir) - install_options = options.install_options or [] - if options.use_user_site: - if options.prefix_path: - raise CommandError( - "Can not combine '--user' and '--prefix' as they imply " - "different installation locations" - ) - if virtualenv_no_global(): - raise InstallationError( - "Can not perform a '--user' install. User site-packages " - "are not visible in this virtualenv." - ) - install_options.append('--user') - install_options.append('--prefix=') - - target_temp_dir = TempDirectory(kind="target") - if options.target_dir: - options.ignore_installed = True - options.target_dir = os.path.abspath(options.target_dir) - if (os.path.exists(options.target_dir) and not - os.path.isdir(options.target_dir)): - raise CommandError( - "Target path exists but is not a directory, will not " - "continue." - ) - - # Create a target directory for using with the target option - target_temp_dir.create() - install_options.append('--home=' + target_temp_dir.path) - - global_options = options.global_options or [] - - with self._build_session(options) as session: - finder = self._build_package_finder(options, session) - build_delete = (not (options.no_clean or options.build_dir)) - wheel_cache = WheelCache(options.cache_dir, options.format_control) - - if options.cache_dir and not check_path_owner(options.cache_dir): - logger.warning( - "The directory '%s' or its parent directory is not owned " - "by the current user and caching wheels has been " - "disabled. check the permissions and owner of that " - "directory. If executing pip with sudo, you may want " - "sudo's -H flag.", - options.cache_dir, - ) - options.cache_dir = None - - with TempDirectory( - options.build_dir, delete=build_delete, kind="install" - ) as directory: - requirement_set = RequirementSet( - require_hashes=options.require_hashes, - ) - - try: - self.populate_requirement_set( - requirement_set, args, options, finder, session, - self.name, wheel_cache - ) - preparer = RequirementPreparer( - build_dir=directory.path, - src_dir=options.src_dir, - download_dir=None, - wheel_download_dir=None, - progress_bar=options.progress_bar, - build_isolation=options.build_isolation, - ) - - resolver = Resolver( - preparer=preparer, - finder=finder, - session=session, - wheel_cache=wheel_cache, - use_user_site=options.use_user_site, - upgrade_strategy=upgrade_strategy, - force_reinstall=options.force_reinstall, - ignore_dependencies=options.ignore_dependencies, - ignore_requires_python=options.ignore_requires_python, - ignore_installed=options.ignore_installed, - isolated=options.isolated_mode, - ) - resolver.resolve(requirement_set) - - # If caching is disabled or wheel is not installed don't - # try to build wheels. - if wheel and options.cache_dir: - # build wheels before install. - wb = WheelBuilder( - finder, preparer, wheel_cache, - build_options=[], global_options=[], - ) - # Ignore the result: a failed wheel will be - # installed from the sdist/vcs whatever. - wb.build( - requirement_set.requirements.values(), - session=session, autobuilding=True - ) - - to_install = resolver.get_installation_order( - requirement_set - ) - - # Consistency Checking of the package set we're installing. - should_warn_about_conflicts = ( - not options.ignore_dependencies and - options.warn_about_conflicts - ) - if should_warn_about_conflicts: - self._warn_about_conflicts(to_install) - - # Don't warn about script install locations if - # --target has been specified - warn_script_location = options.warn_script_location - if options.target_dir: - warn_script_location = False - - installed = install_given_reqs( - to_install, - install_options, - global_options, - root=options.root_path, - home=target_temp_dir.path, - prefix=options.prefix_path, - pycompile=options.compile, - warn_script_location=warn_script_location, - use_user_site=options.use_user_site, - ) - - possible_lib_locations = get_lib_location_guesses( - user=options.use_user_site, - home=target_temp_dir.path, - root=options.root_path, - prefix=options.prefix_path, - isolated=options.isolated_mode, - ) - reqs = sorted(installed, key=operator.attrgetter('name')) - items = [] - for req in reqs: - item = req.name - try: - installed_version = get_installed_version( - req.name, possible_lib_locations - ) - if installed_version: - item += '-' + installed_version - except Exception: - pass - items.append(item) - installed = ' '.join(items) - if installed: - logger.info('Successfully installed %s', installed) - except EnvironmentError as error: - show_traceback = (self.verbosity >= 1) - - message = create_env_error_message( - error, show_traceback, options.use_user_site, - ) - logger.error(message, exc_info=show_traceback) - - return ERROR - except PreviousBuildDirError: - options.no_clean = True - raise - finally: - # Clean up - if not options.no_clean: - requirement_set.cleanup_files() - wheel_cache.cleanup() - - if options.target_dir: - self._handle_target_dir( - options.target_dir, target_temp_dir, options.upgrade - ) - return requirement_set - - def _handle_target_dir(self, target_dir, target_temp_dir, upgrade): - ensure_dir(target_dir) - - # Checking both purelib and platlib directories for installed - # packages to be moved to target directory - lib_dir_list = [] - - with target_temp_dir: - # Checking both purelib and platlib directories for installed - # packages to be moved to target directory - scheme = distutils_scheme('', home=target_temp_dir.path) - purelib_dir = scheme['purelib'] - platlib_dir = scheme['platlib'] - data_dir = scheme['data'] - - if os.path.exists(purelib_dir): - lib_dir_list.append(purelib_dir) - if os.path.exists(platlib_dir) and platlib_dir != purelib_dir: - lib_dir_list.append(platlib_dir) - if os.path.exists(data_dir): - lib_dir_list.append(data_dir) - - for lib_dir in lib_dir_list: - for item in os.listdir(lib_dir): - if lib_dir == data_dir: - ddir = os.path.join(data_dir, item) - if any(s.startswith(ddir) for s in lib_dir_list[:-1]): - continue - target_item_dir = os.path.join(target_dir, item) - if os.path.exists(target_item_dir): - if not upgrade: - logger.warning( - 'Target directory %s already exists. Specify ' - '--upgrade to force replacement.', - target_item_dir - ) - continue - if os.path.islink(target_item_dir): - logger.warning( - 'Target directory %s already exists and is ' - 'a link. Pip will not automatically replace ' - 'links, please remove if replacement is ' - 'desired.', - target_item_dir - ) - continue - if os.path.isdir(target_item_dir): - shutil.rmtree(target_item_dir) - else: - os.remove(target_item_dir) - - shutil.move( - os.path.join(lib_dir, item), - target_item_dir - ) - - def _warn_about_conflicts(self, to_install): - package_set, _dep_info = check_install_conflicts(to_install) - missing, conflicting = _dep_info - - # NOTE: There is some duplication here from pip check - for project_name in missing: - version = package_set[project_name][0] - for dependency in missing[project_name]: - logger.critical( - "%s %s requires %s, which is not installed.", - project_name, version, dependency[1], - ) - - for project_name in conflicting: - version = package_set[project_name][0] - for dep_name, dep_version, req in conflicting[project_name]: - logger.critical( - "%s %s has requirement %s, but you'll have %s %s which is " - "incompatible.", - project_name, version, req, dep_name, dep_version, - ) - - -def get_lib_location_guesses(*args, **kwargs): - scheme = distutils_scheme('', *args, **kwargs) - return [scheme['purelib'], scheme['platlib']] - - -def create_env_error_message(error, show_traceback, using_user_site): - """Format an error message for an EnvironmentError - - It may occur anytime during the execution of the install command. - """ - parts = [] - - # Mention the error if we are not going to show a traceback - parts.append("Could not install packages due to an EnvironmentError") - if not show_traceback: - parts.append(": ") - parts.append(str(error)) - else: - parts.append(".") - - # Spilt the error indication from a helper message (if any) - parts[-1] += "\n" - - # Suggest useful actions to the user: - # (1) using user site-packages or (2) verifying the permissions - if error.errno == errno.EACCES: - user_option_part = "Consider using the `--user` option" - permissions_part = "Check the permissions" - - if not using_user_site: - parts.extend([ - user_option_part, " or ", - permissions_part.lower(), - ]) - else: - parts.append(permissions_part) - parts.append(".\n") - - return "".join(parts).strip() + "\n" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/list.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/list.py deleted file mode 100644 index 09f633f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/list.py +++ /dev/null @@ -1,343 +0,0 @@ -from __future__ import absolute_import - -import json -import logging -import warnings - -from pip._vendor import six -from pip._vendor.six.moves import zip_longest - -from pip._internal.basecommand import Command -from pip._internal.cmdoptions import index_group, make_option_group -from pip._internal.exceptions import CommandError -from pip._internal.index import PackageFinder -from pip._internal.utils.deprecation import RemovedInPip11Warning -from pip._internal.utils.misc import ( - dist_is_editable, get_installed_distributions, -) -from pip._internal.utils.packaging import get_installer - -logger = logging.getLogger(__name__) - - -class ListCommand(Command): - """ - List installed packages, including editables. - - Packages are listed in a case-insensitive sorted order. - """ - name = 'list' - usage = """ - %prog [options]""" - summary = 'List installed packages.' - - def __init__(self, *args, **kw): - super(ListCommand, self).__init__(*args, **kw) - - cmd_opts = self.cmd_opts - - cmd_opts.add_option( - '-o', '--outdated', - action='store_true', - default=False, - help='List outdated packages') - cmd_opts.add_option( - '-u', '--uptodate', - action='store_true', - default=False, - help='List uptodate packages') - cmd_opts.add_option( - '-e', '--editable', - action='store_true', - default=False, - help='List editable projects.') - cmd_opts.add_option( - '-l', '--local', - action='store_true', - default=False, - help=('If in a virtualenv that has global access, do not list ' - 'globally-installed packages.'), - ) - self.cmd_opts.add_option( - '--user', - dest='user', - action='store_true', - default=False, - help='Only output packages installed in user-site.') - - cmd_opts.add_option( - '--pre', - action='store_true', - default=False, - help=("Include pre-release and development versions. By default, " - "pip only finds stable versions."), - ) - - cmd_opts.add_option( - '--format', - action='store', - dest='list_format', - default="columns", - choices=('legacy', 'columns', 'freeze', 'json'), - help="Select the output format among: columns (default), freeze, " - "json, or legacy.", - ) - - cmd_opts.add_option( - '--not-required', - action='store_true', - dest='not_required', - help="List packages that are not dependencies of " - "installed packages.", - ) - - cmd_opts.add_option( - '--exclude-editable', - action='store_false', - dest='include_editable', - help='Exclude editable package from output.', - ) - cmd_opts.add_option( - '--include-editable', - action='store_true', - dest='include_editable', - help='Include editable package from output.', - default=True, - ) - index_opts = make_option_group(index_group, self.parser) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, cmd_opts) - - def _build_package_finder(self, options, index_urls, session): - """ - Create a package finder appropriate to this list command. - """ - return PackageFinder( - find_links=options.find_links, - index_urls=index_urls, - allow_all_prereleases=options.pre, - trusted_hosts=options.trusted_hosts, - process_dependency_links=options.process_dependency_links, - session=session, - ) - - def run(self, options, args): - if options.list_format == "legacy": - warnings.warn( - "The legacy format has been deprecated and will be removed " - "in the future.", - RemovedInPip11Warning, - ) - - if options.outdated and options.uptodate: - raise CommandError( - "Options --outdated and --uptodate cannot be combined.") - - packages = get_installed_distributions( - local_only=options.local, - user_only=options.user, - editables_only=options.editable, - include_editables=options.include_editable, - ) - - if options.outdated: - packages = self.get_outdated(packages, options) - elif options.uptodate: - packages = self.get_uptodate(packages, options) - - if options.not_required: - packages = self.get_not_required(packages, options) - - self.output_package_listing(packages, options) - - def get_outdated(self, packages, options): - return [ - dist for dist in self.iter_packages_latest_infos(packages, options) - if dist.latest_version > dist.parsed_version - ] - - def get_uptodate(self, packages, options): - return [ - dist for dist in self.iter_packages_latest_infos(packages, options) - if dist.latest_version == dist.parsed_version - ] - - def get_not_required(self, packages, options): - dep_keys = set() - for dist in packages: - dep_keys.update(requirement.key for requirement in dist.requires()) - return {pkg for pkg in packages if pkg.key not in dep_keys} - - def iter_packages_latest_infos(self, packages, options): - index_urls = [options.index_url] + options.extra_index_urls - if options.no_index: - logger.debug('Ignoring indexes: %s', ','.join(index_urls)) - index_urls = [] - - dependency_links = [] - for dist in packages: - if dist.has_metadata('dependency_links.txt'): - dependency_links.extend( - dist.get_metadata_lines('dependency_links.txt'), - ) - - with self._build_session(options) as session: - finder = self._build_package_finder(options, index_urls, session) - finder.add_dependency_links(dependency_links) - - for dist in packages: - typ = 'unknown' - all_candidates = finder.find_all_candidates(dist.key) - if not options.pre: - # Remove prereleases - all_candidates = [candidate for candidate in all_candidates - if not candidate.version.is_prerelease] - - if not all_candidates: - continue - best_candidate = max(all_candidates, - key=finder._candidate_sort_key) - remote_version = best_candidate.version - if best_candidate.location.is_wheel: - typ = 'wheel' - else: - typ = 'sdist' - # This is dirty but makes the rest of the code much cleaner - dist.latest_version = remote_version - dist.latest_filetype = typ - yield dist - - def output_legacy(self, dist, options): - if options.verbose >= 1: - return '%s (%s, %s, %s)' % ( - dist.project_name, - dist.version, - dist.location, - get_installer(dist), - ) - elif dist_is_editable(dist): - return '%s (%s, %s)' % ( - dist.project_name, - dist.version, - dist.location, - ) - else: - return '%s (%s)' % (dist.project_name, dist.version) - - def output_legacy_latest(self, dist, options): - return '%s - Latest: %s [%s]' % ( - self.output_legacy(dist, options), - dist.latest_version, - dist.latest_filetype, - ) - - def output_package_listing(self, packages, options): - packages = sorted( - packages, - key=lambda dist: dist.project_name.lower(), - ) - if options.list_format == 'columns' and packages: - data, header = format_for_columns(packages, options) - self.output_package_listing_columns(data, header) - elif options.list_format == 'freeze': - for dist in packages: - if options.verbose >= 1: - logger.info("%s==%s (%s)", dist.project_name, - dist.version, dist.location) - else: - logger.info("%s==%s", dist.project_name, dist.version) - elif options.list_format == 'json': - logger.info(format_for_json(packages, options)) - elif options.list_format == "legacy": - for dist in packages: - if options.outdated: - logger.info(self.output_legacy_latest(dist, options)) - else: - logger.info(self.output_legacy(dist, options)) - - def output_package_listing_columns(self, data, header): - # insert the header first: we need to know the size of column names - if len(data) > 0: - data.insert(0, header) - - pkg_strings, sizes = tabulate(data) - - # Create and add a separator. - if len(data) > 0: - pkg_strings.insert(1, " ".join(map(lambda x: '-' * x, sizes))) - - for val in pkg_strings: - logger.info(val) - - -def tabulate(vals): - # From pfmoore on GitHub: - # https://github.com/pypa/pip/issues/3651#issuecomment-216932564 - assert len(vals) > 0 - - sizes = [0] * max(len(x) for x in vals) - for row in vals: - sizes = [max(s, len(str(c))) for s, c in zip_longest(sizes, row)] - - result = [] - for row in vals: - display = " ".join([str(c).ljust(s) if c is not None else '' - for s, c in zip_longest(sizes, row)]) - result.append(display) - - return result, sizes - - -def format_for_columns(pkgs, options): - """ - Convert the package data into something usable - by output_package_listing_columns. - """ - running_outdated = options.outdated - # Adjust the header for the `pip list --outdated` case. - if running_outdated: - header = ["Package", "Version", "Latest", "Type"] - else: - header = ["Package", "Version"] - - data = [] - if options.verbose >= 1 or any(dist_is_editable(x) for x in pkgs): - header.append("Location") - if options.verbose >= 1: - header.append("Installer") - - for proj in pkgs: - # if we're working on the 'outdated' list, separate out the - # latest_version and type - row = [proj.project_name, proj.version] - - if running_outdated: - row.append(proj.latest_version) - row.append(proj.latest_filetype) - - if options.verbose >= 1 or dist_is_editable(proj): - row.append(proj.location) - if options.verbose >= 1: - row.append(get_installer(proj)) - - data.append(row) - - return data, header - - -def format_for_json(packages, options): - data = [] - for dist in packages: - info = { - 'name': dist.project_name, - 'version': six.text_type(dist.version), - } - if options.verbose >= 1: - info['location'] = dist.location - info['installer'] = get_installer(dist) - if options.outdated: - info['latest_version'] = six.text_type(dist.latest_version) - info['latest_filetype'] = dist.latest_filetype - data.append(info) - return json.dumps(data) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/search.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/search.py deleted file mode 100644 index 3abdf59..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/search.py +++ /dev/null @@ -1,135 +0,0 @@ -from __future__ import absolute_import - -import logging -import sys -import textwrap -from collections import OrderedDict - -from pip._vendor import pkg_resources -from pip._vendor.packaging.version import parse as parse_version -# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is -# why we ignore the type on this import -from pip._vendor.six.moves import xmlrpc_client # type: ignore - -from pip._internal.basecommand import SUCCESS, Command -from pip._internal.compat import get_terminal_size -from pip._internal.download import PipXmlrpcTransport -from pip._internal.exceptions import CommandError -from pip._internal.models import PyPI -from pip._internal.status_codes import NO_MATCHES_FOUND -from pip._internal.utils.logging import indent_log - -logger = logging.getLogger(__name__) - - -class SearchCommand(Command): - """Search for PyPI packages whose name or summary contains .""" - name = 'search' - usage = """ - %prog [options] """ - summary = 'Search PyPI for packages.' - ignore_require_venv = True - - def __init__(self, *args, **kw): - super(SearchCommand, self).__init__(*args, **kw) - self.cmd_opts.add_option( - '-i', '--index', - dest='index', - metavar='URL', - default=PyPI.pypi_url, - help='Base URL of Python Package Index (default %default)') - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options, args): - if not args: - raise CommandError('Missing required argument (search query).') - query = args - pypi_hits = self.search(query, options) - hits = transform_hits(pypi_hits) - - terminal_width = None - if sys.stdout.isatty(): - terminal_width = get_terminal_size()[0] - - print_results(hits, terminal_width=terminal_width) - if pypi_hits: - return SUCCESS - return NO_MATCHES_FOUND - - def search(self, query, options): - index_url = options.index - with self._build_session(options) as session: - transport = PipXmlrpcTransport(index_url, session) - pypi = xmlrpc_client.ServerProxy(index_url, transport) - hits = pypi.search({'name': query, 'summary': query}, 'or') - return hits - - -def transform_hits(hits): - """ - The list from pypi is really a list of versions. We want a list of - packages with the list of versions stored inline. This converts the - list from pypi into one we can use. - """ - packages = OrderedDict() - for hit in hits: - name = hit['name'] - summary = hit['summary'] - version = hit['version'] - - if name not in packages.keys(): - packages[name] = { - 'name': name, - 'summary': summary, - 'versions': [version], - } - else: - packages[name]['versions'].append(version) - - # if this is the highest version, replace summary and score - if version == highest_version(packages[name]['versions']): - packages[name]['summary'] = summary - - return list(packages.values()) - - -def print_results(hits, name_column_width=None, terminal_width=None): - if not hits: - return - if name_column_width is None: - name_column_width = max([ - len(hit['name']) + len(highest_version(hit.get('versions', ['-']))) - for hit in hits - ]) + 4 - - installed_packages = [p.project_name for p in pkg_resources.working_set] - for hit in hits: - name = hit['name'] - summary = hit['summary'] or '' - latest = highest_version(hit.get('versions', ['-'])) - if terminal_width is not None: - target_width = terminal_width - name_column_width - 5 - if target_width > 10: - # wrap and indent summary to fit terminal - summary = textwrap.wrap(summary, target_width) - summary = ('\n' + ' ' * (name_column_width + 3)).join(summary) - - line = '%-*s - %s' % (name_column_width, - '%s (%s)' % (name, latest), summary) - try: - logger.info(line) - if name in installed_packages: - dist = pkg_resources.get_distribution(name) - with indent_log(): - if dist.version == latest: - logger.info('INSTALLED: %s (latest)', dist.version) - else: - logger.info('INSTALLED: %s', dist.version) - logger.info('LATEST: %s', latest) - except UnicodeEncodeError: - pass - - -def highest_version(versions): - return max(versions, key=parse_version) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/show.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/show.py deleted file mode 100644 index 1a8d968..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/show.py +++ /dev/null @@ -1,164 +0,0 @@ -from __future__ import absolute_import - -import logging -import os -from email.parser import FeedParser # type: ignore - -from pip._vendor import pkg_resources -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.basecommand import Command -from pip._internal.status_codes import ERROR, SUCCESS - -logger = logging.getLogger(__name__) - - -class ShowCommand(Command): - """Show information about one or more installed packages.""" - name = 'show' - usage = """ - %prog [options] ...""" - summary = 'Show information about installed packages.' - ignore_require_venv = True - - def __init__(self, *args, **kw): - super(ShowCommand, self).__init__(*args, **kw) - self.cmd_opts.add_option( - '-f', '--files', - dest='files', - action='store_true', - default=False, - help='Show the full list of installed files for each package.') - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options, args): - if not args: - logger.warning('ERROR: Please provide a package name or names.') - return ERROR - query = args - - results = search_packages_info(query) - if not print_results( - results, list_files=options.files, verbose=options.verbose): - return ERROR - return SUCCESS - - -def search_packages_info(query): - """ - Gather details from installed distributions. Print distribution name, - version, location, and installed files. Installed files requires a - pip generated 'installed-files.txt' in the distributions '.egg-info' - directory. - """ - installed = {} - for p in pkg_resources.working_set: - installed[canonicalize_name(p.project_name)] = p - - query_names = [canonicalize_name(name) for name in query] - - for dist in [installed[pkg] for pkg in query_names if pkg in installed]: - package = { - 'name': dist.project_name, - 'version': dist.version, - 'location': dist.location, - 'requires': [dep.project_name for dep in dist.requires()], - } - file_list = None - metadata = None - if isinstance(dist, pkg_resources.DistInfoDistribution): - # RECORDs should be part of .dist-info metadatas - if dist.has_metadata('RECORD'): - lines = dist.get_metadata_lines('RECORD') - paths = [l.split(',')[0] for l in lines] - paths = [os.path.join(dist.location, p) for p in paths] - file_list = [os.path.relpath(p, dist.location) for p in paths] - - if dist.has_metadata('METADATA'): - metadata = dist.get_metadata('METADATA') - else: - # Otherwise use pip's log for .egg-info's - if dist.has_metadata('installed-files.txt'): - paths = dist.get_metadata_lines('installed-files.txt') - paths = [os.path.join(dist.egg_info, p) for p in paths] - file_list = [os.path.relpath(p, dist.location) for p in paths] - - if dist.has_metadata('PKG-INFO'): - metadata = dist.get_metadata('PKG-INFO') - - if dist.has_metadata('entry_points.txt'): - entry_points = dist.get_metadata_lines('entry_points.txt') - package['entry_points'] = entry_points - - if dist.has_metadata('INSTALLER'): - for line in dist.get_metadata_lines('INSTALLER'): - if line.strip(): - package['installer'] = line.strip() - break - - # @todo: Should pkg_resources.Distribution have a - # `get_pkg_info` method? - feed_parser = FeedParser() - feed_parser.feed(metadata) - pkg_info_dict = feed_parser.close() - for key in ('metadata-version', 'summary', - 'home-page', 'author', 'author-email', 'license'): - package[key] = pkg_info_dict.get(key) - - # It looks like FeedParser cannot deal with repeated headers - classifiers = [] - for line in metadata.splitlines(): - if line.startswith('Classifier: '): - classifiers.append(line[len('Classifier: '):]) - package['classifiers'] = classifiers - - if file_list: - package['files'] = sorted(file_list) - yield package - - -def print_results(distributions, list_files=False, verbose=False): - """ - Print the informations from installed distributions found. - """ - results_printed = False - for i, dist in enumerate(distributions): - results_printed = True - if i > 0: - logger.info("---") - - name = dist.get('name', '') - required_by = [ - pkg.project_name for pkg in pkg_resources.working_set - if name in [required.name for required in pkg.requires()] - ] - - logger.info("Name: %s", name) - logger.info("Version: %s", dist.get('version', '')) - logger.info("Summary: %s", dist.get('summary', '')) - logger.info("Home-page: %s", dist.get('home-page', '')) - logger.info("Author: %s", dist.get('author', '')) - logger.info("Author-email: %s", dist.get('author-email', '')) - logger.info("License: %s", dist.get('license', '')) - logger.info("Location: %s", dist.get('location', '')) - logger.info("Requires: %s", ', '.join(dist.get('requires', []))) - logger.info("Required-by: %s", ', '.join(required_by)) - - if verbose: - logger.info("Metadata-Version: %s", - dist.get('metadata-version', '')) - logger.info("Installer: %s", dist.get('installer', '')) - logger.info("Classifiers:") - for classifier in dist.get('classifiers', []): - logger.info(" %s", classifier) - logger.info("Entry-points:") - for entry in dist.get('entry_points', []): - logger.info(" %s", entry.strip()) - if list_files: - logger.info("Files:") - for line in dist.get('files', []): - logger.info(" %s", line.strip()) - if "files" not in dist: - logger.info("Cannot locate installed-files.txt") - return results_printed diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/uninstall.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/uninstall.py deleted file mode 100644 index 7476fa6..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/uninstall.py +++ /dev/null @@ -1,71 +0,0 @@ -from __future__ import absolute_import - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.basecommand import Command -from pip._internal.exceptions import InstallationError -from pip._internal.req import InstallRequirement, parse_requirements - - -class UninstallCommand(Command): - """ - Uninstall packages. - - pip is able to uninstall most installed packages. Known exceptions are: - - - Pure distutils packages installed with ``python setup.py install``, which - leave behind no metadata to determine what files were installed. - - Script wrappers installed by ``python setup.py develop``. - """ - name = 'uninstall' - usage = """ - %prog [options] ... - %prog [options] -r ...""" - summary = 'Uninstall packages.' - - def __init__(self, *args, **kw): - super(UninstallCommand, self).__init__(*args, **kw) - self.cmd_opts.add_option( - '-r', '--requirement', - dest='requirements', - action='append', - default=[], - metavar='file', - help='Uninstall all the packages listed in the given requirements ' - 'file. This option can be used multiple times.', - ) - self.cmd_opts.add_option( - '-y', '--yes', - dest='yes', - action='store_true', - help="Don't ask for confirmation of uninstall deletions.") - - self.parser.insert_option_group(0, self.cmd_opts) - - def run(self, options, args): - with self._build_session(options) as session: - reqs_to_uninstall = {} - for name in args: - req = InstallRequirement.from_line( - name, isolated=options.isolated_mode, - ) - if req.name: - reqs_to_uninstall[canonicalize_name(req.name)] = req - for filename in options.requirements: - for req in parse_requirements( - filename, - options=options, - session=session): - if req.name: - reqs_to_uninstall[canonicalize_name(req.name)] = req - if not reqs_to_uninstall: - raise InstallationError( - 'You must give at least one requirement to %(name)s (see ' - '"pip help %(name)s")' % dict(name=self.name) - ) - for req in reqs_to_uninstall.values(): - uninstall_pathset = req.uninstall( - auto_confirm=options.yes, verbose=self.verbosity > 0, - ) - if uninstall_pathset: - uninstall_pathset.commit() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/wheel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/wheel.py deleted file mode 100644 index ac55f91..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/commands/wheel.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import - -import logging -import os - -from pip._internal import cmdoptions -from pip._internal.basecommand import RequirementCommand -from pip._internal.cache import WheelCache -from pip._internal.exceptions import CommandError, PreviousBuildDirError -from pip._internal.operations.prepare import RequirementPreparer -from pip._internal.req import RequirementSet -from pip._internal.resolve import Resolver -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.wheel import WheelBuilder - -logger = logging.getLogger(__name__) - - -class WheelCommand(RequirementCommand): - """ - Build Wheel archives for your requirements and dependencies. - - Wheel is a built-package format, and offers the advantage of not - recompiling your software during every install. For more details, see the - wheel docs: https://wheel.readthedocs.io/en/latest/ - - Requirements: setuptools>=0.8, and wheel. - - 'pip wheel' uses the bdist_wheel setuptools extension from the wheel - package to build individual wheels. - - """ - - name = 'wheel' - usage = """ - %prog [options] ... - %prog [options] -r ... - %prog [options] [-e] ... - %prog [options] [-e] ... - %prog [options] ...""" - - summary = 'Build wheels from your requirements.' - - def __init__(self, *args, **kw): - super(WheelCommand, self).__init__(*args, **kw) - - cmd_opts = self.cmd_opts - - cmd_opts.add_option( - '-w', '--wheel-dir', - dest='wheel_dir', - metavar='dir', - default=os.curdir, - help=("Build wheels into , where the default is the " - "current working directory."), - ) - cmd_opts.add_option(cmdoptions.no_binary()) - cmd_opts.add_option(cmdoptions.only_binary()) - cmd_opts.add_option( - '--build-option', - dest='build_options', - metavar='options', - action='append', - help="Extra arguments to be supplied to 'setup.py bdist_wheel'.", - ) - cmd_opts.add_option(cmdoptions.no_build_isolation()) - cmd_opts.add_option(cmdoptions.constraints()) - cmd_opts.add_option(cmdoptions.editable()) - cmd_opts.add_option(cmdoptions.requirements()) - cmd_opts.add_option(cmdoptions.src()) - cmd_opts.add_option(cmdoptions.ignore_requires_python()) - cmd_opts.add_option(cmdoptions.no_deps()) - cmd_opts.add_option(cmdoptions.build_dir()) - cmd_opts.add_option(cmdoptions.progress_bar()) - - cmd_opts.add_option( - '--global-option', - dest='global_options', - action='append', - metavar='options', - help="Extra global options to be supplied to the setup.py " - "call before the 'bdist_wheel' command.") - - cmd_opts.add_option( - '--pre', - action='store_true', - default=False, - help=("Include pre-release and development versions. By default, " - "pip only finds stable versions."), - ) - - cmd_opts.add_option(cmdoptions.no_clean()) - cmd_opts.add_option(cmdoptions.require_hashes()) - - index_opts = cmdoptions.make_option_group( - cmdoptions.index_group, - self.parser, - ) - - self.parser.insert_option_group(0, index_opts) - self.parser.insert_option_group(0, cmd_opts) - - def run(self, options, args): - cmdoptions.check_install_build_global(options) - - index_urls = [options.index_url] + options.extra_index_urls - if options.no_index: - logger.debug('Ignoring indexes: %s', ','.join(index_urls)) - index_urls = [] - - if options.build_dir: - options.build_dir = os.path.abspath(options.build_dir) - - options.src_dir = os.path.abspath(options.src_dir) - - with self._build_session(options) as session: - finder = self._build_package_finder(options, session) - build_delete = (not (options.no_clean or options.build_dir)) - wheel_cache = WheelCache(options.cache_dir, options.format_control) - - with TempDirectory( - options.build_dir, delete=build_delete, kind="wheel" - ) as directory: - requirement_set = RequirementSet( - require_hashes=options.require_hashes, - ) - - try: - self.populate_requirement_set( - requirement_set, args, options, finder, session, - self.name, wheel_cache - ) - - preparer = RequirementPreparer( - build_dir=directory.path, - src_dir=options.src_dir, - download_dir=None, - wheel_download_dir=options.wheel_dir, - progress_bar=options.progress_bar, - build_isolation=options.build_isolation, - ) - - resolver = Resolver( - preparer=preparer, - finder=finder, - session=session, - wheel_cache=wheel_cache, - use_user_site=False, - upgrade_strategy="to-satisfy-only", - force_reinstall=False, - ignore_dependencies=options.ignore_dependencies, - ignore_requires_python=options.ignore_requires_python, - ignore_installed=True, - isolated=options.isolated_mode, - ) - resolver.resolve(requirement_set) - - # build wheels - wb = WheelBuilder( - finder, preparer, wheel_cache, - build_options=options.build_options or [], - global_options=options.global_options or [], - no_clean=options.no_clean, - ) - wheels_built_successfully = wb.build( - requirement_set.requirements.values(), session=session, - ) - if not wheels_built_successfully: - raise CommandError( - "Failed to build one or more wheels" - ) - except PreviousBuildDirError: - options.no_clean = True - raise - finally: - if not options.no_clean: - requirement_set.cleanup_files() - wheel_cache.cleanup() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/compat.py deleted file mode 100644 index 4aefd58..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/compat.py +++ /dev/null @@ -1,235 +0,0 @@ -"""Stuff that differs in different Python versions and platform -distributions.""" -from __future__ import absolute_import, division - -import codecs -import locale -import logging -import os -import shutil -import sys - -from pip._vendor.six import text_type - -try: - import ipaddress -except ImportError: - try: - from pip._vendor import ipaddress # type: ignore - except ImportError: - import ipaddr as ipaddress # type: ignore - ipaddress.ip_address = ipaddress.IPAddress - ipaddress.ip_network = ipaddress.IPNetwork - - -__all__ = [ - "ipaddress", "uses_pycache", "console_to_str", "native_str", - "get_path_uid", "stdlib_pkgs", "WINDOWS", "samefile", "get_terminal_size", -] - - -logger = logging.getLogger(__name__) - -if sys.version_info >= (3, 4): - uses_pycache = True - from importlib.util import cache_from_source -else: - import imp - - try: - cache_from_source = imp.cache_from_source # type: ignore - except AttributeError: - # does not use __pycache__ - cache_from_source = None - - uses_pycache = cache_from_source is not None - - -if sys.version_info >= (3, 5): - backslashreplace_decode = "backslashreplace" -else: - # In version 3.4 and older, backslashreplace exists - # but does not support use for decoding. - # We implement our own replace handler for this - # situation, so that we can consistently use - # backslash replacement for all versions. - def backslashreplace_decode_fn(err): - raw_bytes = (err.object[i] for i in range(err.start, err.end)) - if sys.version_info[0] == 2: - # Python 2 gave us characters - convert to numeric bytes - raw_bytes = (ord(b) for b in raw_bytes) - return u"".join(u"\\x%x" % c for c in raw_bytes), err.end - codecs.register_error( - "backslashreplace_decode", - backslashreplace_decode_fn, - ) - backslashreplace_decode = "backslashreplace_decode" - - -def console_to_str(data): - """Return a string, safe for output, of subprocess output. - - We assume the data is in the locale preferred encoding. - If it won't decode properly, we warn the user but decode as - best we can. - - We also ensure that the output can be safely written to - standard output without encoding errors. - """ - - # First, get the encoding we assume. This is the preferred - # encoding for the locale, unless that is not found, or - # it is ASCII, in which case assume UTF-8 - encoding = locale.getpreferredencoding() - if (not encoding) or codecs.lookup(encoding).name == "ascii": - encoding = "utf-8" - - # Now try to decode the data - if we fail, warn the user and - # decode with replacement. - try: - s = data.decode(encoding) - except UnicodeDecodeError: - logger.warning( - "Subprocess output does not appear to be encoded as %s", - encoding, - ) - s = data.decode(encoding, errors=backslashreplace_decode) - - # Make sure we can print the output, by encoding it to the output - # encoding with replacement of unencodable characters, and then - # decoding again. - # We use stderr's encoding because it's less likely to be - # redirected and if we don't find an encoding we skip this - # step (on the assumption that output is wrapped by something - # that won't fail). - # The double getattr is to deal with the possibility that we're - # being called in a situation where sys.__stderr__ doesn't exist, - # or doesn't have an encoding attribute. Neither of these cases - # should occur in normal pip use, but there's no harm in checking - # in case people use pip in (unsupported) unusual situations. - output_encoding = getattr(getattr(sys, "__stderr__", None), - "encoding", None) - - if output_encoding: - s = s.encode(output_encoding, errors="backslashreplace") - s = s.decode(output_encoding) - - return s - - -if sys.version_info >= (3,): - def native_str(s, replace=False): - if isinstance(s, bytes): - return s.decode('utf-8', 'replace' if replace else 'strict') - return s - -else: - def native_str(s, replace=False): - # Replace is ignored -- unicode to UTF-8 can't fail - if isinstance(s, text_type): - return s.encode('utf-8') - return s - - -def get_path_uid(path): - """ - Return path's uid. - - Does not follow symlinks: - https://github.com/pypa/pip/pull/935#discussion_r5307003 - - Placed this function in compat due to differences on AIX and - Jython, that should eventually go away. - - :raises OSError: When path is a symlink or can't be read. - """ - if hasattr(os, 'O_NOFOLLOW'): - fd = os.open(path, os.O_RDONLY | os.O_NOFOLLOW) - file_uid = os.fstat(fd).st_uid - os.close(fd) - else: # AIX and Jython - # WARNING: time of check vulnerability, but best we can do w/o NOFOLLOW - if not os.path.islink(path): - # older versions of Jython don't have `os.fstat` - file_uid = os.stat(path).st_uid - else: - # raise OSError for parity with os.O_NOFOLLOW above - raise OSError( - "%s is a symlink; Will not return uid for symlinks" % path - ) - return file_uid - - -def expanduser(path): - """ - Expand ~ and ~user constructions. - - Includes a workaround for http://bugs.python.org/issue14768 - """ - expanded = os.path.expanduser(path) - if path.startswith('~/') and expanded.startswith('//'): - expanded = expanded[1:] - return expanded - - -# packages in the stdlib that may have installation metadata, but should not be -# considered 'installed'. this theoretically could be determined based on -# dist.location (py27:`sysconfig.get_paths()['stdlib']`, -# py26:sysconfig.get_config_vars('LIBDEST')), but fear platform variation may -# make this ineffective, so hard-coding -stdlib_pkgs = {"python", "wsgiref", "argparse"} - - -# windows detection, covers cpython and ironpython -WINDOWS = (sys.platform.startswith("win") or - (sys.platform == 'cli' and os.name == 'nt')) - - -def samefile(file1, file2): - """Provide an alternative for os.path.samefile on Windows/Python2""" - if hasattr(os.path, 'samefile'): - return os.path.samefile(file1, file2) - else: - path1 = os.path.normcase(os.path.abspath(file1)) - path2 = os.path.normcase(os.path.abspath(file2)) - return path1 == path2 - - -if hasattr(shutil, 'get_terminal_size'): - def get_terminal_size(): - """ - Returns a tuple (x, y) representing the width(x) and the height(y) - in characters of the terminal window. - """ - return tuple(shutil.get_terminal_size()) -else: - def get_terminal_size(): - """ - Returns a tuple (x, y) representing the width(x) and the height(y) - in characters of the terminal window. - """ - def ioctl_GWINSZ(fd): - try: - import fcntl - import termios - import struct - cr = struct.unpack_from( - 'hh', - fcntl.ioctl(fd, termios.TIOCGWINSZ, '12345678') - ) - except: - return None - if cr == (0, 0): - return None - return cr - cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) - if not cr: - try: - fd = os.open(os.ctermid(), os.O_RDONLY) - cr = ioctl_GWINSZ(fd) - os.close(fd) - except: - pass - if not cr: - cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80)) - return int(cr[1]), int(cr[0]) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/configuration.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/configuration.py deleted file mode 100644 index b15e3d5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/configuration.py +++ /dev/null @@ -1,378 +0,0 @@ -"""Configuration management setup - -Some terminology: -- name - As written in config files. -- value - Value associated with a name -- key - Name combined with it's section (section.name) -- variant - A single word describing where the configuration key-value pair came from -""" - -import locale -import logging -import os - -from pip._vendor import six -from pip._vendor.six.moves import configparser - -from pip._internal.exceptions import ConfigurationError -from pip._internal.locations import ( - legacy_config_file, new_config_file, running_under_virtualenv, - site_config_files, venv_config_file, -) -from pip._internal.utils.misc import ensure_dir, enum -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from typing import Any, Dict, Iterable, List, NewType, Optional, Tuple - - RawConfigParser = configparser.RawConfigParser # Shorthand - Kind = NewType("Kind", str) - -logger = logging.getLogger(__name__) - - -# NOTE: Maybe use the optionx attribute to normalize keynames. -def _normalize_name(name): - # type: (str) -> str - """Make a name consistent regardless of source (environment or file) - """ - name = name.lower().replace('_', '-') - if name.startswith('--'): - name = name[2:] # only prefer long opts - return name - - -def _disassemble_key(name): - # type: (str) -> List[str] - return name.split(".", 1) - - -# The kinds of configurations there are. -kinds = enum( - USER="user", # User Specific - GLOBAL="global", # System Wide - VENV="venv", # Virtual Environment Specific - ENV="env", # from PIP_CONFIG_FILE - ENV_VAR="env-var", # from Environment Variables -) - - -class Configuration(object): - """Handles management of configuration. - - Provides an interface to accessing and managing configuration files. - - This class converts provides an API that takes "section.key-name" style - keys and stores the value associated with it as "key-name" under the - section "section". - - This allows for a clean interface wherein the both the section and the - key-name are preserved in an easy to manage form in the configuration files - and the data stored is also nice. - """ - - def __init__(self, isolated, load_only=None): - # type: (bool, Kind) -> None - super(Configuration, self).__init__() - - _valid_load_only = [kinds.USER, kinds.GLOBAL, kinds.VENV, None] - if load_only not in _valid_load_only: - raise ConfigurationError( - "Got invalid value for load_only - should be one of {}".format( - ", ".join(map(repr, _valid_load_only[:-1])) - ) - ) - self.isolated = isolated # type: bool - self.load_only = load_only # type: Optional[Kind] - - # The order here determines the override order. - self._override_order = [ - kinds.GLOBAL, kinds.USER, kinds.VENV, kinds.ENV, kinds.ENV_VAR - ] - - self._ignore_env_names = ["version", "help"] - - # Because we keep track of where we got the data from - self._parsers = { - variant: [] for variant in self._override_order - } # type: Dict[Kind, List[Tuple[str, RawConfigParser]]] - self._config = { - variant: {} for variant in self._override_order - } # type: Dict[Kind, Dict[str, Any]] - self._modified_parsers = [] # type: List[Tuple[str, RawConfigParser]] - - def load(self): - # type: () -> None - """Loads configuration from configuration files and environment - """ - self._load_config_files() - if not self.isolated: - self._load_environment_vars() - - def get_file_to_edit(self): - # type: () -> Optional[str] - """Returns the file with highest priority in configuration - """ - assert self.load_only is not None, \ - "Need to be specified a file to be editing" - - try: - return self._get_parser_to_modify()[0] - except IndexError: - return None - - def items(self): - # type: () -> Iterable[Tuple[str, Any]] - """Returns key-value pairs like dict.items() representing the loaded - configuration - """ - return self._dictionary.items() - - def get_value(self, key): - # type: (str) -> Any - """Get a value from the configuration. - """ - try: - return self._dictionary[key] - except KeyError: - raise ConfigurationError("No such key - {}".format(key)) - - def set_value(self, key, value): - # type: (str, Any) -> None - """Modify a value in the configuration. - """ - self._ensure_have_load_only() - - fname, parser = self._get_parser_to_modify() - - if parser is not None: - section, name = _disassemble_key(key) - - # Modify the parser and the configuration - if not parser.has_section(section): - parser.add_section(section) - parser.set(section, name, value) - - self._config[self.load_only][key] = value - self._mark_as_modified(fname, parser) - - def unset_value(self, key): - # type: (str) -> None - """Unset a value in the configuration. - """ - self._ensure_have_load_only() - - if key not in self._config[self.load_only]: - raise ConfigurationError("No such key - {}".format(key)) - - fname, parser = self._get_parser_to_modify() - - if parser is not None: - section, name = _disassemble_key(key) - - # Remove the key in the parser - modified_something = False - if parser.has_section(section): - # Returns whether the option was removed or not - modified_something = parser.remove_option(section, name) - - if modified_something: - # name removed from parser, section may now be empty - section_iter = iter(parser.items(section)) - try: - val = six.next(section_iter) - except StopIteration: - val = None - - if val is None: - parser.remove_section(section) - - self._mark_as_modified(fname, parser) - else: - raise ConfigurationError( - "Fatal Internal error [id=1]. Please report as a bug." - ) - - del self._config[self.load_only][key] - - def save(self): - # type: () -> None - """Save the currentin-memory state. - """ - self._ensure_have_load_only() - - for fname, parser in self._modified_parsers: - logger.info("Writing to %s", fname) - - # Ensure directory exists. - ensure_dir(os.path.dirname(fname)) - - with open(fname, "w") as f: - parser.write(f) # type: ignore - - # - # Private routines - # - - def _ensure_have_load_only(self): - # type: () -> None - if self.load_only is None: - raise ConfigurationError("Needed a specific file to be modifying.") - logger.debug("Will be working with %s variant only", self.load_only) - - @property - def _dictionary(self): - # type: () -> Dict[str, Any] - """A dictionary representing the loaded configuration. - """ - # NOTE: Dictionaries are not populated if not loaded. So, conditionals - # are not needed here. - retval = {} - - for variant in self._override_order: - retval.update(self._config[variant]) - - return retval - - def _load_config_files(self): - # type: () -> None - """Loads configuration from configuration files - """ - config_files = dict(self._iter_config_files()) - if config_files[kinds.ENV][0:1] == [os.devnull]: - logger.debug( - "Skipping loading configuration files due to " - "environment's PIP_CONFIG_FILE being os.devnull" - ) - return - - for variant, files in config_files.items(): - for fname in files: - # If there's specific variant set in `load_only`, load only - # that variant, not the others. - if self.load_only is not None and variant != self.load_only: - logger.debug( - "Skipping file '%s' (variant: %s)", fname, variant - ) - continue - - parser = self._load_file(variant, fname) - - # Keeping track of the parsers used - self._parsers[variant].append((fname, parser)) - - def _load_file(self, variant, fname): - # type: (Kind, str) -> RawConfigParser - logger.debug("For variant '%s', will try loading '%s'", variant, fname) - parser = self._construct_parser(fname) - - for section in parser.sections(): - items = parser.items(section) - self._config[variant].update(self._normalized_keys(section, items)) - - return parser - - def _construct_parser(self, fname): - # type: (str) -> RawConfigParser - parser = configparser.RawConfigParser() - # If there is no such file, don't bother reading it but create the - # parser anyway, to hold the data. - # Doing this is useful when modifying and saving files, where we don't - # need to construct a parser. - if os.path.exists(fname): - try: - parser.read(fname) - except UnicodeDecodeError: - raise ConfigurationError(( - "ERROR: " - "Configuration file contains invalid %s characters.\n" - "Please fix your configuration, located at %s\n" - ) % (locale.getpreferredencoding(False), fname)) - return parser - - def _load_environment_vars(self): - # type: () -> None - """Loads configuration from environment variables - """ - self._config[kinds.ENV_VAR].update( - self._normalized_keys(":env:", self._get_environ_vars()) - ) - - def _normalized_keys(self, section, items): - # type: (str, Iterable[Tuple[str, Any]]) -> Dict[str, Any] - """Normalizes items to construct a dictionary with normalized keys. - - This routine is where the names become keys and are made the same - regardless of source - configuration files or environment. - """ - normalized = {} - for name, val in items: - key = section + "." + _normalize_name(name) - normalized[key] = val - return normalized - - def _get_environ_vars(self): - # type: () -> Iterable[Tuple[str, str]] - """Returns a generator with all environmental vars with prefix PIP_""" - for key, val in os.environ.items(): - should_be_yielded = ( - key.startswith("PIP_") and - key[4:].lower() not in self._ignore_env_names - ) - if should_be_yielded: - yield key[4:].lower(), val - - # XXX: This is patched in the tests. - def _iter_config_files(self): - # type: () -> Iterable[Tuple[Kind, List[str]]] - """Yields variant and configuration files associated with it. - - This should be treated like items of a dictionary. - """ - # SMELL: Move the conditions out of this function - - # environment variables have the lowest priority - config_file = os.environ.get('PIP_CONFIG_FILE', None) - if config_file is not None: - yield kinds.ENV, [config_file] - else: - yield kinds.ENV, [] - - # at the base we have any global configuration - yield kinds.GLOBAL, list(site_config_files) - - # per-user configuration next - should_load_user_config = not self.isolated and not ( - config_file and os.path.exists(config_file) - ) - if should_load_user_config: - # The legacy config file is overridden by the new config file - yield kinds.USER, [legacy_config_file, new_config_file] - - # finally virtualenv configuration first trumping others - if running_under_virtualenv(): - yield kinds.VENV, [venv_config_file] - - def _get_parser_to_modify(self): - # type: () -> Tuple[str, RawConfigParser] - # Determine which parser to modify - parsers = self._parsers[self.load_only] - if not parsers: - # This should not happen if everything works correctly. - raise ConfigurationError( - "Fatal Internal error [id=2]. Please report as a bug." - ) - - # Use the highest priority parser. - return parsers[-1] - - # XXX: This is patched in the tests. - def _mark_as_modified(self, fname, parser): - # type: (str, RawConfigParser) -> None - file_parser_tuple = (fname, parser) - if file_parser_tuple not in self._modified_parsers: - self._modified_parsers.append(file_parser_tuple) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/download.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/download.py deleted file mode 100644 index 06d7201..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/download.py +++ /dev/null @@ -1,922 +0,0 @@ -from __future__ import absolute_import - -import cgi -import email.utils -import getpass -import json -import logging -import mimetypes -import os -import platform -import re -import shutil -import sys - -from pip._vendor import requests, six, urllib3 -from pip._vendor.cachecontrol import CacheControlAdapter -from pip._vendor.cachecontrol.caches import FileCache -from pip._vendor.lockfile import LockError -from pip._vendor.requests.adapters import BaseAdapter, HTTPAdapter -from pip._vendor.requests.auth import AuthBase, HTTPBasicAuth -from pip._vendor.requests.models import CONTENT_CHUNK_SIZE, Response -from pip._vendor.requests.structures import CaseInsensitiveDict -from pip._vendor.requests.utils import get_netrc_auth -# NOTE: XMLRPC Client is not annotated in typeshed as on 2017-07-17, which is -# why we ignore the type on this import -from pip._vendor.six.moves import xmlrpc_client # type: ignore -from pip._vendor.six.moves.urllib import parse as urllib_parse -from pip._vendor.six.moves.urllib import request as urllib_request -from pip._vendor.six.moves.urllib.parse import unquote as urllib_unquote -from pip._vendor.urllib3.util import IS_PYOPENSSL - -import pip -from pip._internal.compat import WINDOWS -from pip._internal.exceptions import HashMismatch, InstallationError -from pip._internal.locations import write_delete_marker_file -from pip._internal.models import PyPI -from pip._internal.utils.encoding import auto_decode -from pip._internal.utils.filesystem import check_path_owner -from pip._internal.utils.glibc import libc_ver -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - ARCHIVE_EXTENSIONS, ask_path_exists, backup_dir, call_subprocess, consume, - display_path, format_size, get_installed_version, rmtree, splitext, - unpack_file, -) -from pip._internal.utils.setuptools_build import SETUPTOOLS_SHIM -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.ui import DownloadProgressProvider -from pip._internal.vcs import vcs - -try: - import ssl # noqa -except ImportError: - ssl = None - -HAS_TLS = (ssl is not None) or IS_PYOPENSSL - -__all__ = ['get_file_content', - 'is_url', 'url_to_path', 'path_to_url', - 'is_archive_file', 'unpack_vcs_link', - 'unpack_file_url', 'is_vcs_url', 'is_file_url', - 'unpack_http_url', 'unpack_url'] - - -logger = logging.getLogger(__name__) - - -def user_agent(): - """ - Return a string representing the user agent. - """ - data = { - "installer": {"name": "pip", "version": pip.__version__}, - "python": platform.python_version(), - "implementation": { - "name": platform.python_implementation(), - }, - } - - if data["implementation"]["name"] == 'CPython': - data["implementation"]["version"] = platform.python_version() - elif data["implementation"]["name"] == 'PyPy': - if sys.pypy_version_info.releaselevel == 'final': - pypy_version_info = sys.pypy_version_info[:3] - else: - pypy_version_info = sys.pypy_version_info - data["implementation"]["version"] = ".".join( - [str(x) for x in pypy_version_info] - ) - elif data["implementation"]["name"] == 'Jython': - # Complete Guess - data["implementation"]["version"] = platform.python_version() - elif data["implementation"]["name"] == 'IronPython': - # Complete Guess - data["implementation"]["version"] = platform.python_version() - - if sys.platform.startswith("linux"): - from pip._vendor import distro - distro_infos = dict(filter( - lambda x: x[1], - zip(["name", "version", "id"], distro.linux_distribution()), - )) - libc = dict(filter( - lambda x: x[1], - zip(["lib", "version"], libc_ver()), - )) - if libc: - distro_infos["libc"] = libc - if distro_infos: - data["distro"] = distro_infos - - if sys.platform.startswith("darwin") and platform.mac_ver()[0]: - data["distro"] = {"name": "macOS", "version": platform.mac_ver()[0]} - - if platform.system(): - data.setdefault("system", {})["name"] = platform.system() - - if platform.release(): - data.setdefault("system", {})["release"] = platform.release() - - if platform.machine(): - data["cpu"] = platform.machine() - - if HAS_TLS: - data["openssl_version"] = ssl.OPENSSL_VERSION - - setuptools_version = get_installed_version("setuptools") - if setuptools_version is not None: - data["setuptools_version"] = setuptools_version - - return "{data[installer][name]}/{data[installer][version]} {json}".format( - data=data, - json=json.dumps(data, separators=(",", ":"), sort_keys=True), - ) - - -class MultiDomainBasicAuth(AuthBase): - - def __init__(self, prompting=True): - self.prompting = prompting - self.passwords = {} - - def __call__(self, req): - parsed = urllib_parse.urlparse(req.url) - - # Get the netloc without any embedded credentials - netloc = parsed.netloc.rsplit("@", 1)[-1] - - # Set the url of the request to the url without any credentials - req.url = urllib_parse.urlunparse(parsed[:1] + (netloc,) + parsed[2:]) - - # Use any stored credentials that we have for this netloc - username, password = self.passwords.get(netloc, (None, None)) - - # Extract credentials embedded in the url if we have none stored - if username is None: - username, password = self.parse_credentials(parsed.netloc) - - # Get creds from netrc if we still don't have them - if username is None and password is None: - netrc_auth = get_netrc_auth(req.url) - username, password = netrc_auth if netrc_auth else (None, None) - - if username or password: - # Store the username and password - self.passwords[netloc] = (username, password) - - # Send the basic auth with this request - req = HTTPBasicAuth(username or "", password or "")(req) - - # Attach a hook to handle 401 responses - req.register_hook("response", self.handle_401) - - return req - - def handle_401(self, resp, **kwargs): - # We only care about 401 responses, anything else we want to just - # pass through the actual response - if resp.status_code != 401: - return resp - - # We are not able to prompt the user so simply return the response - if not self.prompting: - return resp - - parsed = urllib_parse.urlparse(resp.url) - - # Prompt the user for a new username and password - username = six.moves.input("User for %s: " % parsed.netloc) - password = getpass.getpass("Password: ") - - # Store the new username and password to use for future requests - if username or password: - self.passwords[parsed.netloc] = (username, password) - - # Consume content and release the original connection to allow our new - # request to reuse the same one. - resp.content - resp.raw.release_conn() - - # Add our new username and password to the request - req = HTTPBasicAuth(username or "", password or "")(resp.request) - - # Send our new request - new_resp = resp.connection.send(req, **kwargs) - new_resp.history.append(resp) - - return new_resp - - def parse_credentials(self, netloc): - if "@" in netloc: - userinfo = netloc.rsplit("@", 1)[0] - if ":" in userinfo: - user, pwd = userinfo.split(":", 1) - return (urllib_unquote(user), urllib_unquote(pwd)) - return urllib_unquote(userinfo), None - return None, None - - -class LocalFSAdapter(BaseAdapter): - - def send(self, request, stream=None, timeout=None, verify=None, cert=None, - proxies=None): - pathname = url_to_path(request.url) - - resp = Response() - resp.status_code = 200 - resp.url = request.url - - try: - stats = os.stat(pathname) - except OSError as exc: - resp.status_code = 404 - resp.raw = exc - else: - modified = email.utils.formatdate(stats.st_mtime, usegmt=True) - content_type = mimetypes.guess_type(pathname)[0] or "text/plain" - resp.headers = CaseInsensitiveDict({ - "Content-Type": content_type, - "Content-Length": stats.st_size, - "Last-Modified": modified, - }) - - resp.raw = open(pathname, "rb") - resp.close = resp.raw.close - - return resp - - def close(self): - pass - - -class SafeFileCache(FileCache): - """ - A file based cache which is safe to use even when the target directory may - not be accessible or writable. - """ - - def __init__(self, *args, **kwargs): - super(SafeFileCache, self).__init__(*args, **kwargs) - - # Check to ensure that the directory containing our cache directory - # is owned by the user current executing pip. If it does not exist - # we will check the parent directory until we find one that does exist. - # If it is not owned by the user executing pip then we will disable - # the cache and log a warning. - if not check_path_owner(self.directory): - logger.warning( - "The directory '%s' or its parent directory is not owned by " - "the current user and the cache has been disabled. Please " - "check the permissions and owner of that directory. If " - "executing pip with sudo, you may want sudo's -H flag.", - self.directory, - ) - - # Set our directory to None to disable the Cache - self.directory = None - - def get(self, *args, **kwargs): - # If we don't have a directory, then the cache should be a no-op. - if self.directory is None: - return - - try: - return super(SafeFileCache, self).get(*args, **kwargs) - except (LockError, OSError, IOError): - # We intentionally silence this error, if we can't access the cache - # then we can just skip caching and process the request as if - # caching wasn't enabled. - pass - - def set(self, *args, **kwargs): - # If we don't have a directory, then the cache should be a no-op. - if self.directory is None: - return - - try: - return super(SafeFileCache, self).set(*args, **kwargs) - except (LockError, OSError, IOError): - # We intentionally silence this error, if we can't access the cache - # then we can just skip caching and process the request as if - # caching wasn't enabled. - pass - - def delete(self, *args, **kwargs): - # If we don't have a directory, then the cache should be a no-op. - if self.directory is None: - return - - try: - return super(SafeFileCache, self).delete(*args, **kwargs) - except (LockError, OSError, IOError): - # We intentionally silence this error, if we can't access the cache - # then we can just skip caching and process the request as if - # caching wasn't enabled. - pass - - -class InsecureHTTPAdapter(HTTPAdapter): - - def cert_verify(self, conn, url, verify, cert): - conn.cert_reqs = 'CERT_NONE' - conn.ca_certs = None - - -class PipSession(requests.Session): - - timeout = None - - def __init__(self, *args, **kwargs): - retries = kwargs.pop("retries", 0) - cache = kwargs.pop("cache", None) - insecure_hosts = kwargs.pop("insecure_hosts", []) - - super(PipSession, self).__init__(*args, **kwargs) - - # Attach our User Agent to the request - self.headers["User-Agent"] = user_agent() - - # Attach our Authentication handler to the session - self.auth = MultiDomainBasicAuth() - - # Create our urllib3.Retry instance which will allow us to customize - # how we handle retries. - retries = urllib3.Retry( - # Set the total number of retries that a particular request can - # have. - total=retries, - - # A 503 error from PyPI typically means that the Fastly -> Origin - # connection got interrupted in some way. A 503 error in general - # is typically considered a transient error so we'll go ahead and - # retry it. - # A 500 may indicate transient error in Amazon S3 - # A 520 or 527 - may indicate transient error in CloudFlare - status_forcelist=[500, 503, 520, 527], - - # Add a small amount of back off between failed requests in - # order to prevent hammering the service. - backoff_factor=0.25, - ) - - # We want to _only_ cache responses on securely fetched origins. We do - # this because we can't validate the response of an insecurely fetched - # origin, and we don't want someone to be able to poison the cache and - # require manual eviction from the cache to fix it. - if cache: - secure_adapter = CacheControlAdapter( - cache=SafeFileCache(cache, use_dir_lock=True), - max_retries=retries, - ) - else: - secure_adapter = HTTPAdapter(max_retries=retries) - - # Our Insecure HTTPAdapter disables HTTPS validation. It does not - # support caching (see above) so we'll use it for all http:// URLs as - # well as any https:// host that we've marked as ignoring TLS errors - # for. - insecure_adapter = InsecureHTTPAdapter(max_retries=retries) - - self.mount("https://", secure_adapter) - self.mount("http://", insecure_adapter) - - # Enable file:// urls - self.mount("file://", LocalFSAdapter()) - - # We want to use a non-validating adapter for any requests which are - # deemed insecure. - for host in insecure_hosts: - self.mount("https://{}/".format(host), insecure_adapter) - - def request(self, method, url, *args, **kwargs): - # Allow setting a default timeout on a session - kwargs.setdefault("timeout", self.timeout) - - # Dispatch the actual request - return super(PipSession, self).request(method, url, *args, **kwargs) - - -def get_file_content(url, comes_from=None, session=None): - """Gets the content of a file; it may be a filename, file: URL, or - http: URL. Returns (location, content). Content is unicode. - - :param url: File path or url. - :param comes_from: Origin description of requirements. - :param session: Instance of pip.download.PipSession. - """ - if session is None: - raise TypeError( - "get_file_content() missing 1 required keyword argument: 'session'" - ) - - match = _scheme_re.search(url) - if match: - scheme = match.group(1).lower() - if (scheme == 'file' and comes_from and - comes_from.startswith('http')): - raise InstallationError( - 'Requirements file %s references URL %s, which is local' - % (comes_from, url)) - if scheme == 'file': - path = url.split(':', 1)[1] - path = path.replace('\\', '/') - match = _url_slash_drive_re.match(path) - if match: - path = match.group(1) + ':' + path.split('|', 1)[1] - path = urllib_parse.unquote(path) - if path.startswith('/'): - path = '/' + path.lstrip('/') - url = path - else: - # FIXME: catch some errors - resp = session.get(url) - resp.raise_for_status() - return resp.url, resp.text - try: - with open(url, 'rb') as f: - content = auto_decode(f.read()) - except IOError as exc: - raise InstallationError( - 'Could not open requirements file: %s' % str(exc) - ) - return url, content - - -_scheme_re = re.compile(r'^(http|https|file):', re.I) -_url_slash_drive_re = re.compile(r'/*([a-z])\|', re.I) - - -def is_url(name): - """Returns true if the name looks like a URL""" - if ':' not in name: - return False - scheme = name.split(':', 1)[0].lower() - return scheme in ['http', 'https', 'file', 'ftp'] + vcs.all_schemes - - -def url_to_path(url): - """ - Convert a file: URL to a path. - """ - assert url.startswith('file:'), ( - "You can only turn file: urls into filenames (not %r)" % url) - - _, netloc, path, _, _ = urllib_parse.urlsplit(url) - - # if we have a UNC path, prepend UNC share notation - if netloc: - netloc = '\\\\' + netloc - - path = urllib_request.url2pathname(netloc + path) - return path - - -def path_to_url(path): - """ - Convert a path to a file: URL. The path will be made absolute and have - quoted path parts. - """ - path = os.path.normpath(os.path.abspath(path)) - url = urllib_parse.urljoin('file:', urllib_request.pathname2url(path)) - return url - - -def is_archive_file(name): - """Return True if `name` is a considered as an archive file.""" - ext = splitext(name)[1].lower() - if ext in ARCHIVE_EXTENSIONS: - return True - return False - - -def unpack_vcs_link(link, location): - vcs_backend = _get_used_vcs_backend(link) - vcs_backend.unpack(location) - - -def _get_used_vcs_backend(link): - for backend in vcs.backends: - if link.scheme in backend.schemes: - vcs_backend = backend(link.url) - return vcs_backend - - -def is_vcs_url(link): - return bool(_get_used_vcs_backend(link)) - - -def is_file_url(link): - return link.url.lower().startswith('file:') - - -def is_dir_url(link): - """Return whether a file:// Link points to a directory. - - ``link`` must not have any other scheme but file://. Call is_file_url() - first. - - """ - link_path = url_to_path(link.url_without_fragment) - return os.path.isdir(link_path) - - -def _progress_indicator(iterable, *args, **kwargs): - return iterable - - -def _download_url(resp, link, content_file, hashes, progress_bar): - try: - total_length = int(resp.headers['content-length']) - except (ValueError, KeyError, TypeError): - total_length = 0 - - cached_resp = getattr(resp, "from_cache", False) - if logger.getEffectiveLevel() > logging.INFO: - show_progress = False - elif cached_resp: - show_progress = False - elif total_length > (40 * 1000): - show_progress = True - elif not total_length: - show_progress = True - else: - show_progress = False - - show_url = link.show_url - - def resp_read(chunk_size): - try: - # Special case for urllib3. - for chunk in resp.raw.stream( - chunk_size, - # We use decode_content=False here because we don't - # want urllib3 to mess with the raw bytes we get - # from the server. If we decompress inside of - # urllib3 then we cannot verify the checksum - # because the checksum will be of the compressed - # file. This breakage will only occur if the - # server adds a Content-Encoding header, which - # depends on how the server was configured: - # - Some servers will notice that the file isn't a - # compressible file and will leave the file alone - # and with an empty Content-Encoding - # - Some servers will notice that the file is - # already compressed and will leave the file - # alone and will add a Content-Encoding: gzip - # header - # - Some servers won't notice anything at all and - # will take a file that's already been compressed - # and compress it again and set the - # Content-Encoding: gzip header - # - # By setting this not to decode automatically we - # hope to eliminate problems with the second case. - decode_content=False): - yield chunk - except AttributeError: - # Standard file-like object. - while True: - chunk = resp.raw.read(chunk_size) - if not chunk: - break - yield chunk - - def written_chunks(chunks): - for chunk in chunks: - content_file.write(chunk) - yield chunk - - progress_indicator = _progress_indicator - - if link.netloc == PyPI.netloc: - url = show_url - else: - url = link.url_without_fragment - - if show_progress: # We don't show progress on cached responses - progress_indicator = DownloadProgressProvider(progress_bar, - max=total_length) - if total_length: - logger.info("Downloading %s (%s)", url, format_size(total_length)) - else: - logger.info("Downloading %s", url) - elif cached_resp: - logger.info("Using cached %s", url) - else: - logger.info("Downloading %s", url) - - logger.debug('Downloading from URL %s', link) - - downloaded_chunks = written_chunks( - progress_indicator( - resp_read(CONTENT_CHUNK_SIZE), - CONTENT_CHUNK_SIZE - ) - ) - if hashes: - hashes.check_against_chunks(downloaded_chunks) - else: - consume(downloaded_chunks) - - -def _copy_file(filename, location, link): - copy = True - download_location = os.path.join(location, link.filename) - if os.path.exists(download_location): - response = ask_path_exists( - 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)abort' % - display_path(download_location), ('i', 'w', 'b', 'a')) - if response == 'i': - copy = False - elif response == 'w': - logger.warning('Deleting %s', display_path(download_location)) - os.remove(download_location) - elif response == 'b': - dest_file = backup_dir(download_location) - logger.warning( - 'Backing up %s to %s', - display_path(download_location), - display_path(dest_file), - ) - shutil.move(download_location, dest_file) - elif response == 'a': - sys.exit(-1) - if copy: - shutil.copy(filename, download_location) - logger.info('Saved %s', display_path(download_location)) - - -def unpack_http_url(link, location, download_dir=None, - session=None, hashes=None, progress_bar="on"): - if session is None: - raise TypeError( - "unpack_http_url() missing 1 required keyword argument: 'session'" - ) - - with TempDirectory(kind="unpack") as temp_dir: - # If a download dir is specified, is the file already downloaded there? - already_downloaded_path = None - if download_dir: - already_downloaded_path = _check_download_dir(link, - download_dir, - hashes) - - if already_downloaded_path: - from_path = already_downloaded_path - content_type = mimetypes.guess_type(from_path)[0] - else: - # let's download to a tmp dir - from_path, content_type = _download_http_url(link, - session, - temp_dir.path, - hashes, - progress_bar) - - # unpack the archive to the build dir location. even when only - # downloading archives, they have to be unpacked to parse dependencies - unpack_file(from_path, location, content_type, link) - - # a download dir is specified; let's copy the archive there - if download_dir and not already_downloaded_path: - _copy_file(from_path, download_dir, link) - - if not already_downloaded_path: - os.unlink(from_path) - - -def unpack_file_url(link, location, download_dir=None, hashes=None): - """Unpack link into location. - - If download_dir is provided and link points to a file, make a copy - of the link file inside download_dir. - """ - link_path = url_to_path(link.url_without_fragment) - - # If it's a url to a local directory - if is_dir_url(link): - if os.path.isdir(location): - rmtree(location) - shutil.copytree(link_path, location, symlinks=True) - if download_dir: - logger.info('Link is a directory, ignoring download_dir') - return - - # If --require-hashes is off, `hashes` is either empty, the - # link's embedded hash, or MissingHashes; it is required to - # match. If --require-hashes is on, we are satisfied by any - # hash in `hashes` matching: a URL-based or an option-based - # one; no internet-sourced hash will be in `hashes`. - if hashes: - hashes.check_against_path(link_path) - - # If a download dir is specified, is the file already there and valid? - already_downloaded_path = None - if download_dir: - already_downloaded_path = _check_download_dir(link, - download_dir, - hashes) - - if already_downloaded_path: - from_path = already_downloaded_path - else: - from_path = link_path - - content_type = mimetypes.guess_type(from_path)[0] - - # unpack the archive to the build dir location. even when only downloading - # archives, they have to be unpacked to parse dependencies - unpack_file(from_path, location, content_type, link) - - # a download dir is specified and not already downloaded - if download_dir and not already_downloaded_path: - _copy_file(from_path, download_dir, link) - - -def _copy_dist_from_dir(link_path, location): - """Copy distribution files in `link_path` to `location`. - - Invoked when user requests to install a local directory. E.g.: - - pip install . - pip install ~/dev/git-repos/python-prompt-toolkit - - """ - - # Note: This is currently VERY SLOW if you have a lot of data in the - # directory, because it copies everything with `shutil.copytree`. - # What it should really do is build an sdist and install that. - # See https://github.com/pypa/pip/issues/2195 - - if os.path.isdir(location): - rmtree(location) - - # build an sdist - setup_py = 'setup.py' - sdist_args = [sys.executable] - sdist_args.append('-c') - sdist_args.append(SETUPTOOLS_SHIM % setup_py) - sdist_args.append('sdist') - sdist_args += ['--dist-dir', location] - logger.info('Running setup.py sdist for %s', link_path) - - with indent_log(): - call_subprocess(sdist_args, cwd=link_path, show_stdout=False) - - # unpack sdist into `location` - sdist = os.path.join(location, os.listdir(location)[0]) - logger.info('Unpacking sdist %s into %s', sdist, location) - unpack_file(sdist, location, content_type=None, link=None) - - -class PipXmlrpcTransport(xmlrpc_client.Transport): - """Provide a `xmlrpclib.Transport` implementation via a `PipSession` - object. - """ - - def __init__(self, index_url, session, use_datetime=False): - xmlrpc_client.Transport.__init__(self, use_datetime) - index_parts = urllib_parse.urlparse(index_url) - self._scheme = index_parts.scheme - self._session = session - - def request(self, host, handler, request_body, verbose=False): - parts = (self._scheme, host, handler, None, None, None) - url = urllib_parse.urlunparse(parts) - try: - headers = {'Content-Type': 'text/xml'} - response = self._session.post(url, data=request_body, - headers=headers, stream=True) - response.raise_for_status() - self.verbose = verbose - return self.parse_response(response.raw) - except requests.HTTPError as exc: - logger.critical( - "HTTP error %s while getting %s", - exc.response.status_code, url, - ) - raise - - -def unpack_url(link, location, download_dir=None, - only_download=False, session=None, hashes=None, - progress_bar="on"): - """Unpack link. - If link is a VCS link: - if only_download, export into download_dir and ignore location - else unpack into location - for other types of link: - - unpack into location - - if download_dir, copy the file into download_dir - - if only_download, mark location for deletion - - :param hashes: A Hashes object, one of whose embedded hashes must match, - or HashMismatch will be raised. If the Hashes is empty, no matches are - required, and unhashable types of requirements (like VCS ones, which - would ordinarily raise HashUnsupported) are allowed. - """ - # non-editable vcs urls - if is_vcs_url(link): - unpack_vcs_link(link, location) - - # file urls - elif is_file_url(link): - unpack_file_url(link, location, download_dir, hashes=hashes) - - # http urls - else: - if session is None: - session = PipSession() - - unpack_http_url( - link, - location, - download_dir, - session, - hashes=hashes, - progress_bar=progress_bar - ) - if only_download: - write_delete_marker_file(location) - - -def _download_http_url(link, session, temp_dir, hashes, progress_bar): - """Download link url into temp_dir using provided session""" - target_url = link.url.split('#', 1)[0] - try: - resp = session.get( - target_url, - # We use Accept-Encoding: identity here because requests - # defaults to accepting compressed responses. This breaks in - # a variety of ways depending on how the server is configured. - # - Some servers will notice that the file isn't a compressible - # file and will leave the file alone and with an empty - # Content-Encoding - # - Some servers will notice that the file is already - # compressed and will leave the file alone and will add a - # Content-Encoding: gzip header - # - Some servers won't notice anything at all and will take - # a file that's already been compressed and compress it again - # and set the Content-Encoding: gzip header - # By setting this to request only the identity encoding We're - # hoping to eliminate the third case. Hopefully there does not - # exist a server which when given a file will notice it is - # already compressed and that you're not asking for a - # compressed file and will then decompress it before sending - # because if that's the case I don't think it'll ever be - # possible to make this work. - headers={"Accept-Encoding": "identity"}, - stream=True, - ) - resp.raise_for_status() - except requests.HTTPError as exc: - logger.critical( - "HTTP error %s while getting %s", exc.response.status_code, link, - ) - raise - - content_type = resp.headers.get('content-type', '') - filename = link.filename # fallback - # Have a look at the Content-Disposition header for a better guess - content_disposition = resp.headers.get('content-disposition') - if content_disposition: - type, params = cgi.parse_header(content_disposition) - # We use ``or`` here because we don't want to use an "empty" value - # from the filename param. - filename = params.get('filename') or filename - ext = splitext(filename)[1] - if not ext: - ext = mimetypes.guess_extension(content_type) - if ext: - filename += ext - if not ext and link.url != resp.url: - ext = os.path.splitext(resp.url)[1] - if ext: - filename += ext - file_path = os.path.join(temp_dir, filename) - with open(file_path, 'wb') as content_file: - _download_url(resp, link, content_file, hashes, progress_bar) - return file_path, content_type - - -def _check_download_dir(link, download_dir, hashes): - """ Check download_dir for previously downloaded file with correct hash - If a correct file is found return its path else None - """ - download_path = os.path.join(download_dir, link.filename) - if os.path.exists(download_path): - # If already downloaded, does its hash match? - logger.info('File was already downloaded %s', download_path) - if hashes: - try: - hashes.check_against_path(download_path) - except HashMismatch: - logger.warning( - 'Previously-downloaded file %s has bad hash. ' - 'Re-downloading.', - download_path - ) - os.unlink(download_path) - return None - return download_path - return None diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/exceptions.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/exceptions.py deleted file mode 100644 index ad6f412..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/exceptions.py +++ /dev/null @@ -1,249 +0,0 @@ -"""Exceptions used throughout package""" -from __future__ import absolute_import - -from itertools import chain, groupby, repeat - -from pip._vendor.six import iteritems - - -class PipError(Exception): - """Base pip exception""" - - -class ConfigurationError(PipError): - """General exception in configuration""" - - -class InstallationError(PipError): - """General exception during installation""" - - -class UninstallationError(PipError): - """General exception during uninstallation""" - - -class DistributionNotFound(InstallationError): - """Raised when a distribution cannot be found to satisfy a requirement""" - - -class RequirementsFileParseError(InstallationError): - """Raised when a general error occurs parsing a requirements file line.""" - - -class BestVersionAlreadyInstalled(PipError): - """Raised when the most up-to-date version of a package is already - installed.""" - - -class BadCommand(PipError): - """Raised when virtualenv or a command is not found""" - - -class CommandError(PipError): - """Raised when there is an error in command-line arguments""" - - -class PreviousBuildDirError(PipError): - """Raised when there's a previous conflicting build directory""" - - -class InvalidWheelFilename(InstallationError): - """Invalid wheel filename.""" - - -class UnsupportedWheel(InstallationError): - """Unsupported wheel.""" - - -class HashErrors(InstallationError): - """Multiple HashError instances rolled into one for reporting""" - - def __init__(self): - self.errors = [] - - def append(self, error): - self.errors.append(error) - - def __str__(self): - lines = [] - self.errors.sort(key=lambda e: e.order) - for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__): - lines.append(cls.head) - lines.extend(e.body() for e in errors_of_cls) - if lines: - return '\n'.join(lines) - - def __nonzero__(self): - return bool(self.errors) - - def __bool__(self): - return self.__nonzero__() - - -class HashError(InstallationError): - """ - A failure to verify a package against known-good hashes - - :cvar order: An int sorting hash exception classes by difficulty of - recovery (lower being harder), so the user doesn't bother fretting - about unpinned packages when he has deeper issues, like VCS - dependencies, to deal with. Also keeps error reports in a - deterministic order. - :cvar head: A section heading for display above potentially many - exceptions of this kind - :ivar req: The InstallRequirement that triggered this error. This is - pasted on after the exception is instantiated, because it's not - typically available earlier. - - """ - req = None - head = '' - - def body(self): - """Return a summary of me for display under the heading. - - This default implementation simply prints a description of the - triggering requirement. - - :param req: The InstallRequirement that provoked this error, with - populate_link() having already been called - - """ - return ' %s' % self._requirement_name() - - def __str__(self): - return '%s\n%s' % (self.head, self.body()) - - def _requirement_name(self): - """Return a description of the requirement that triggered me. - - This default implementation returns long description of the req, with - line numbers - - """ - return str(self.req) if self.req else 'unknown package' - - -class VcsHashUnsupported(HashError): - """A hash was provided for a version-control-system-based requirement, but - we don't have a method for hashing those.""" - - order = 0 - head = ("Can't verify hashes for these requirements because we don't " - "have a way to hash version control repositories:") - - -class DirectoryUrlHashUnsupported(HashError): - """A hash was provided for a version-control-system-based requirement, but - we don't have a method for hashing those.""" - - order = 1 - head = ("Can't verify hashes for these file:// requirements because they " - "point to directories:") - - -class HashMissing(HashError): - """A hash was needed for a requirement but is absent.""" - - order = 2 - head = ('Hashes are required in --require-hashes mode, but they are ' - 'missing from some requirements. Here is a list of those ' - 'requirements along with the hashes their downloaded archives ' - 'actually had. Add lines like these to your requirements files to ' - 'prevent tampering. (If you did not enable --require-hashes ' - 'manually, note that it turns on automatically when any package ' - 'has a hash.)') - - def __init__(self, gotten_hash): - """ - :param gotten_hash: The hash of the (possibly malicious) archive we - just downloaded - """ - self.gotten_hash = gotten_hash - - def body(self): - # Dodge circular import. - from pip._internal.utils.hashes import FAVORITE_HASH - - package = None - if self.req: - # In the case of URL-based requirements, display the original URL - # seen in the requirements file rather than the package name, - # so the output can be directly copied into the requirements file. - package = (self.req.original_link if self.req.original_link - # In case someone feeds something downright stupid - # to InstallRequirement's constructor. - else getattr(self.req, 'req', None)) - return ' %s --hash=%s:%s' % (package or 'unknown package', - FAVORITE_HASH, - self.gotten_hash) - - -class HashUnpinned(HashError): - """A requirement had a hash specified but was not pinned to a specific - version.""" - - order = 3 - head = ('In --require-hashes mode, all requirements must have their ' - 'versions pinned with ==. These do not:') - - -class HashMismatch(HashError): - """ - Distribution file hash values don't match. - - :ivar package_name: The name of the package that triggered the hash - mismatch. Feel free to write to this after the exception is raise to - improve its error message. - - """ - order = 4 - head = ('THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS ' - 'FILE. If you have updated the package versions, please update ' - 'the hashes. Otherwise, examine the package contents carefully; ' - 'someone may have tampered with them.') - - def __init__(self, allowed, gots): - """ - :param allowed: A dict of algorithm names pointing to lists of allowed - hex digests - :param gots: A dict of algorithm names pointing to hashes we - actually got from the files under suspicion - """ - self.allowed = allowed - self.gots = gots - - def body(self): - return ' %s:\n%s' % (self._requirement_name(), - self._hash_comparison()) - - def _hash_comparison(self): - """ - Return a comparison of actual and expected hash values. - - Example:: - - Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde - or 123451234512345123451234512345123451234512345 - Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef - - """ - def hash_then_or(hash_name): - # For now, all the decent hashes have 6-char names, so we can get - # away with hard-coding space literals. - return chain([hash_name], repeat(' or')) - - lines = [] - for hash_name, expecteds in iteritems(self.allowed): - prefix = hash_then_or(hash_name) - lines.extend((' Expected %s %s' % (next(prefix), e)) - for e in expecteds) - lines.append(' Got %s\n' % - self.gots[hash_name].hexdigest()) - prefix = ' or' - return '\n'.join(lines) - - -class UnsupportedPythonVersion(InstallationError): - """Unsupported python version according to Requires-Python package - metadata.""" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/index.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/index.py deleted file mode 100644 index 3c3a92b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/index.py +++ /dev/null @@ -1,1117 +0,0 @@ -"""Routines related to PyPI, indexes""" -from __future__ import absolute_import - -import cgi -import itertools -import logging -import mimetypes -import os -import posixpath -import re -import sys -import warnings -from collections import namedtuple - -from pip._vendor import html5lib, requests, six -from pip._vendor.distlib.compat import unescape -from pip._vendor.packaging import specifiers -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.requests.exceptions import SSLError -from pip._vendor.six.moves.urllib import parse as urllib_parse -from pip._vendor.six.moves.urllib import request as urllib_request - -from pip._internal.compat import ipaddress -from pip._internal.download import HAS_TLS, is_url, path_to_url, url_to_path -from pip._internal.exceptions import ( - BestVersionAlreadyInstalled, DistributionNotFound, InvalidWheelFilename, - UnsupportedWheel, -) -from pip._internal.models import PyPI -from pip._internal.pep425tags import get_supported -from pip._internal.utils.deprecation import RemovedInPip11Warning -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - ARCHIVE_EXTENSIONS, SUPPORTED_EXTENSIONS, cached_property, normalize_path, - splitext, -) -from pip._internal.utils.packaging import check_requires_python -from pip._internal.wheel import Wheel, wheel_ext - -__all__ = ['FormatControl', 'fmt_ctl_handle_mutual_exclude', 'PackageFinder'] - - -SECURE_ORIGINS = [ - # protocol, hostname, port - # Taken from Chrome's list of secure origins (See: http://bit.ly/1qrySKC) - ("https", "*", "*"), - ("*", "localhost", "*"), - ("*", "127.0.0.0/8", "*"), - ("*", "::1/128", "*"), - ("file", "*", None), - # ssh is always secure. - ("ssh", "*", "*"), -] - - -logger = logging.getLogger(__name__) - - -class InstallationCandidate(object): - - def __init__(self, project, version, location): - self.project = project - self.version = parse_version(version) - self.location = location - self._key = (self.project, self.version, self.location) - - def __repr__(self): - return "".format( - self.project, self.version, self.location, - ) - - def __hash__(self): - return hash(self._key) - - def __lt__(self, other): - return self._compare(other, lambda s, o: s < o) - - def __le__(self, other): - return self._compare(other, lambda s, o: s <= o) - - def __eq__(self, other): - return self._compare(other, lambda s, o: s == o) - - def __ge__(self, other): - return self._compare(other, lambda s, o: s >= o) - - def __gt__(self, other): - return self._compare(other, lambda s, o: s > o) - - def __ne__(self, other): - return self._compare(other, lambda s, o: s != o) - - def _compare(self, other, method): - if not isinstance(other, InstallationCandidate): - return NotImplemented - - return method(self._key, other._key) - - -class PackageFinder(object): - """This finds packages. - - This is meant to match easy_install's technique for looking for - packages, by reading pages and looking for appropriate links. - """ - - def __init__(self, find_links, index_urls, allow_all_prereleases=False, - trusted_hosts=None, process_dependency_links=False, - session=None, format_control=None, platform=None, - versions=None, abi=None, implementation=None): - """Create a PackageFinder. - - :param format_control: A FormatControl object or None. Used to control - the selection of source packages / binary packages when consulting - the index and links. - :param platform: A string or None. If None, searches for packages - that are supported by the current system. Otherwise, will find - packages that can be built on the platform passed in. These - packages will only be downloaded for distribution: they will - not be built locally. - :param versions: A list of strings or None. This is passed directly - to pep425tags.py in the get_supported() method. - :param abi: A string or None. This is passed directly - to pep425tags.py in the get_supported() method. - :param implementation: A string or None. This is passed directly - to pep425tags.py in the get_supported() method. - """ - if session is None: - raise TypeError( - "PackageFinder() missing 1 required keyword argument: " - "'session'" - ) - - # Build find_links. If an argument starts with ~, it may be - # a local file relative to a home directory. So try normalizing - # it and if it exists, use the normalized version. - # This is deliberately conservative - it might be fine just to - # blindly normalize anything starting with a ~... - self.find_links = [] - for link in find_links: - if link.startswith('~'): - new_link = normalize_path(link) - if os.path.exists(new_link): - link = new_link - self.find_links.append(link) - - self.index_urls = index_urls - self.dependency_links = [] - - # These are boring links that have already been logged somehow: - self.logged_links = set() - - self.format_control = format_control or FormatControl(set(), set()) - - # Domains that we won't emit warnings for when not using HTTPS - self.secure_origins = [ - ("*", host, "*") - for host in (trusted_hosts if trusted_hosts else []) - ] - - # Do we want to allow _all_ pre-releases? - self.allow_all_prereleases = allow_all_prereleases - - # Do we process dependency links? - self.process_dependency_links = process_dependency_links - - # The Session we'll use to make requests - self.session = session - - # The valid tags to check potential found wheel candidates against - self.valid_tags = get_supported( - versions=versions, - platform=platform, - abi=abi, - impl=implementation, - ) - - # If we don't have TLS enabled, then WARN if anyplace we're looking - # relies on TLS. - if not HAS_TLS: - for link in itertools.chain(self.index_urls, self.find_links): - parsed = urllib_parse.urlparse(link) - if parsed.scheme == "https": - logger.warning( - "pip is configured with locations that require " - "TLS/SSL, however the ssl module in Python is not " - "available." - ) - break - - def get_formatted_locations(self): - lines = [] - if self.index_urls and self.index_urls != [PyPI.simple_url]: - lines.append( - "Looking in indexes: {}".format(", ".join(self.index_urls)) - ) - if self.find_links: - lines.append( - "Looking in links: {}".format(", ".join(self.find_links)) - ) - return "\n".join(lines) - - def add_dependency_links(self, links): - # # FIXME: this shouldn't be global list this, it should only - # # apply to requirements of the package that specifies the - # # dependency_links value - # # FIXME: also, we should track comes_from (i.e., use Link) - if self.process_dependency_links: - warnings.warn( - "Dependency Links processing has been deprecated and will be " - "removed in a future release.", - RemovedInPip11Warning, - ) - self.dependency_links.extend(links) - - @staticmethod - def _sort_locations(locations, expand_dir=False): - """ - Sort locations into "files" (archives) and "urls", and return - a pair of lists (files,urls) - """ - files = [] - urls = [] - - # puts the url for the given file path into the appropriate list - def sort_path(path): - url = path_to_url(path) - if mimetypes.guess_type(url, strict=False)[0] == 'text/html': - urls.append(url) - else: - files.append(url) - - for url in locations: - - is_local_path = os.path.exists(url) - is_file_url = url.startswith('file:') - - if is_local_path or is_file_url: - if is_local_path: - path = url - else: - path = url_to_path(url) - if os.path.isdir(path): - if expand_dir: - path = os.path.realpath(path) - for item in os.listdir(path): - sort_path(os.path.join(path, item)) - elif is_file_url: - urls.append(url) - elif os.path.isfile(path): - sort_path(path) - else: - logger.warning( - "Url '%s' is ignored: it is neither a file " - "nor a directory.", url, - ) - elif is_url(url): - # Only add url with clear scheme - urls.append(url) - else: - logger.warning( - "Url '%s' is ignored. It is either a non-existing " - "path or lacks a specific scheme.", url, - ) - - return files, urls - - def _candidate_sort_key(self, candidate): - """ - Function used to generate link sort key for link tuples. - The greater the return value, the more preferred it is. - If not finding wheels, then sorted by version only. - If finding wheels, then the sort order is by version, then: - 1. existing installs - 2. wheels ordered via Wheel.support_index_min(self.valid_tags) - 3. source archives - Note: it was considered to embed this logic into the Link - comparison operators, but then different sdist links - with the same version, would have to be considered equal - """ - support_num = len(self.valid_tags) - build_tag = tuple() - if candidate.location.is_wheel: - # can raise InvalidWheelFilename - wheel = Wheel(candidate.location.filename) - if not wheel.supported(self.valid_tags): - raise UnsupportedWheel( - "%s is not a supported wheel for this platform. It " - "can't be sorted." % wheel.filename - ) - pri = -(wheel.support_index_min(self.valid_tags)) - if wheel.build_tag is not None: - match = re.match(r'^(\d+)(.*)$', wheel.build_tag) - build_tag_groups = match.groups() - build_tag = (int(build_tag_groups[0]), build_tag_groups[1]) - else: # sdist - pri = -(support_num) - return (candidate.version, build_tag, pri) - - def _validate_secure_origin(self, logger, location): - # Determine if this url used a secure transport mechanism - parsed = urllib_parse.urlparse(str(location)) - origin = (parsed.scheme, parsed.hostname, parsed.port) - - # The protocol to use to see if the protocol matches. - # Don't count the repository type as part of the protocol: in - # cases such as "git+ssh", only use "ssh". (I.e., Only verify against - # the last scheme.) - protocol = origin[0].rsplit('+', 1)[-1] - - # Determine if our origin is a secure origin by looking through our - # hardcoded list of secure origins, as well as any additional ones - # configured on this PackageFinder instance. - for secure_origin in (SECURE_ORIGINS + self.secure_origins): - if protocol != secure_origin[0] and secure_origin[0] != "*": - continue - - try: - # We need to do this decode dance to ensure that we have a - # unicode object, even on Python 2.x. - addr = ipaddress.ip_address( - origin[1] - if ( - isinstance(origin[1], six.text_type) or - origin[1] is None - ) - else origin[1].decode("utf8") - ) - network = ipaddress.ip_network( - secure_origin[1] - if isinstance(secure_origin[1], six.text_type) - else secure_origin[1].decode("utf8") - ) - except ValueError: - # We don't have both a valid address or a valid network, so - # we'll check this origin against hostnames. - if (origin[1] and - origin[1].lower() != secure_origin[1].lower() and - secure_origin[1] != "*"): - continue - else: - # We have a valid address and network, so see if the address - # is contained within the network. - if addr not in network: - continue - - # Check to see if the port patches - if (origin[2] != secure_origin[2] and - secure_origin[2] != "*" and - secure_origin[2] is not None): - continue - - # If we've gotten here, then this origin matches the current - # secure origin and we should return True - return True - - # If we've gotten to this point, then the origin isn't secure and we - # will not accept it as a valid location to search. We will however - # log a warning that we are ignoring it. - logger.warning( - "The repository located at %s is not a trusted or secure host and " - "is being ignored. If this repository is available via HTTPS we " - "recommend you use HTTPS instead, otherwise you may silence " - "this warning and allow it anyway with '--trusted-host %s'.", - parsed.hostname, - parsed.hostname, - ) - - return False - - def _get_index_urls_locations(self, project_name): - """Returns the locations found via self.index_urls - - Checks the url_name on the main (first in the list) index and - use this url_name to produce all locations - """ - - def mkurl_pypi_url(url): - loc = posixpath.join( - url, - urllib_parse.quote(canonicalize_name(project_name))) - # For maximum compatibility with easy_install, ensure the path - # ends in a trailing slash. Although this isn't in the spec - # (and PyPI can handle it without the slash) some other index - # implementations might break if they relied on easy_install's - # behavior. - if not loc.endswith('/'): - loc = loc + '/' - return loc - - return [mkurl_pypi_url(url) for url in self.index_urls] - - def find_all_candidates(self, project_name): - """Find all available InstallationCandidate for project_name - - This checks index_urls, find_links and dependency_links. - All versions found are returned as an InstallationCandidate list. - - See _link_package_versions for details on which files are accepted - """ - index_locations = self._get_index_urls_locations(project_name) - index_file_loc, index_url_loc = self._sort_locations(index_locations) - fl_file_loc, fl_url_loc = self._sort_locations( - self.find_links, expand_dir=True, - ) - dep_file_loc, dep_url_loc = self._sort_locations(self.dependency_links) - - file_locations = (Link(url) for url in itertools.chain( - index_file_loc, fl_file_loc, dep_file_loc, - )) - - # We trust every url that the user has given us whether it was given - # via --index-url or --find-links - # We explicitly do not trust links that came from dependency_links - # We want to filter out any thing which does not have a secure origin. - url_locations = [ - link for link in itertools.chain( - (Link(url) for url in index_url_loc), - (Link(url) for url in fl_url_loc), - (Link(url) for url in dep_url_loc), - ) - if self._validate_secure_origin(logger, link) - ] - - logger.debug('%d location(s) to search for versions of %s:', - len(url_locations), project_name) - - for location in url_locations: - logger.debug('* %s', location) - - canonical_name = canonicalize_name(project_name) - formats = fmt_ctl_formats(self.format_control, canonical_name) - search = Search(project_name, canonical_name, formats) - find_links_versions = self._package_versions( - # We trust every directly linked archive in find_links - (Link(url, '-f') for url in self.find_links), - search - ) - - page_versions = [] - for page in self._get_pages(url_locations, project_name): - logger.debug('Analyzing links from page %s', page.url) - with indent_log(): - page_versions.extend( - self._package_versions(page.links, search) - ) - - dependency_versions = self._package_versions( - (Link(url) for url in self.dependency_links), search - ) - if dependency_versions: - logger.debug( - 'dependency_links found: %s', - ', '.join([ - version.location.url for version in dependency_versions - ]) - ) - - file_versions = self._package_versions(file_locations, search) - if file_versions: - file_versions.sort(reverse=True) - logger.debug( - 'Local files found: %s', - ', '.join([ - url_to_path(candidate.location.url) - for candidate in file_versions - ]) - ) - - # This is an intentional priority ordering - return ( - file_versions + find_links_versions + page_versions + - dependency_versions - ) - - def find_requirement(self, req, upgrade): - """Try to find a Link matching req - - Expects req, an InstallRequirement and upgrade, a boolean - Returns a Link if found, - Raises DistributionNotFound or BestVersionAlreadyInstalled otherwise - """ - all_candidates = self.find_all_candidates(req.name) - - # Filter out anything which doesn't match our specifier - compatible_versions = set( - req.specifier.filter( - # We turn the version object into a str here because otherwise - # when we're debundled but setuptools isn't, Python will see - # packaging.version.Version and - # pkg_resources._vendor.packaging.version.Version as different - # types. This way we'll use a str as a common data interchange - # format. If we stop using the pkg_resources provided specifier - # and start using our own, we can drop the cast to str(). - [str(c.version) for c in all_candidates], - prereleases=( - self.allow_all_prereleases - if self.allow_all_prereleases else None - ), - ) - ) - applicable_candidates = [ - # Again, converting to str to deal with debundling. - c for c in all_candidates if str(c.version) in compatible_versions - ] - - if applicable_candidates: - best_candidate = max(applicable_candidates, - key=self._candidate_sort_key) - else: - best_candidate = None - - if req.satisfied_by is not None: - installed_version = parse_version(req.satisfied_by.version) - else: - installed_version = None - - if installed_version is None and best_candidate is None: - logger.critical( - 'Could not find a version that satisfies the requirement %s ' - '(from versions: %s)', - req, - ', '.join( - sorted( - {str(c.version) for c in all_candidates}, - key=parse_version, - ) - ) - ) - - raise DistributionNotFound( - 'No matching distribution found for %s' % req - ) - - best_installed = False - if installed_version and ( - best_candidate is None or - best_candidate.version <= installed_version): - best_installed = True - - if not upgrade and installed_version is not None: - if best_installed: - logger.debug( - 'Existing installed version (%s) is most up-to-date and ' - 'satisfies requirement', - installed_version, - ) - else: - logger.debug( - 'Existing installed version (%s) satisfies requirement ' - '(most up-to-date version is %s)', - installed_version, - best_candidate.version, - ) - return None - - if best_installed: - # We have an existing version, and its the best version - logger.debug( - 'Installed version (%s) is most up-to-date (past versions: ' - '%s)', - installed_version, - ', '.join(sorted(compatible_versions, key=parse_version)) or - "none", - ) - raise BestVersionAlreadyInstalled - - logger.debug( - 'Using version %s (newest of versions: %s)', - best_candidate.version, - ', '.join(sorted(compatible_versions, key=parse_version)) - ) - return best_candidate.location - - def _get_pages(self, locations, project_name): - """ - Yields (page, page_url) from the given locations, skipping - locations that have errors. - """ - seen = set() - for location in locations: - if location in seen: - continue - seen.add(location) - - page = self._get_page(location) - if page is None: - continue - - yield page - - _py_version_re = re.compile(r'-py([123]\.?[0-9]?)$') - - def _sort_links(self, links): - """ - Returns elements of links in order, non-egg links first, egg links - second, while eliminating duplicates - """ - eggs, no_eggs = [], [] - seen = set() - for link in links: - if link not in seen: - seen.add(link) - if link.egg_fragment: - eggs.append(link) - else: - no_eggs.append(link) - return no_eggs + eggs - - def _package_versions(self, links, search): - result = [] - for link in self._sort_links(links): - v = self._link_package_versions(link, search) - if v is not None: - result.append(v) - return result - - def _log_skipped_link(self, link, reason): - if link not in self.logged_links: - logger.debug('Skipping link %s; %s', link, reason) - self.logged_links.add(link) - - def _link_package_versions(self, link, search): - """Return an InstallationCandidate or None""" - version = None - if link.egg_fragment: - egg_info = link.egg_fragment - ext = link.ext - else: - egg_info, ext = link.splitext() - if not ext: - self._log_skipped_link(link, 'not a file') - return - if ext not in SUPPORTED_EXTENSIONS: - self._log_skipped_link( - link, 'unsupported archive format: %s' % ext, - ) - return - if "binary" not in search.formats and ext == wheel_ext: - self._log_skipped_link( - link, 'No binaries permitted for %s' % search.supplied, - ) - return - if "macosx10" in link.path and ext == '.zip': - self._log_skipped_link(link, 'macosx10 one') - return - if ext == wheel_ext: - try: - wheel = Wheel(link.filename) - except InvalidWheelFilename: - self._log_skipped_link(link, 'invalid wheel filename') - return - if canonicalize_name(wheel.name) != search.canonical: - self._log_skipped_link( - link, 'wrong project name (not %s)' % search.supplied) - return - - if not wheel.supported(self.valid_tags): - self._log_skipped_link( - link, 'it is not compatible with this Python') - return - - version = wheel.version - - # This should be up by the search.ok_binary check, but see issue 2700. - if "source" not in search.formats and ext != wheel_ext: - self._log_skipped_link( - link, 'No sources permitted for %s' % search.supplied, - ) - return - - if not version: - version = egg_info_matches(egg_info, search.supplied, link) - if version is None: - self._log_skipped_link( - link, 'wrong project name (not %s)' % search.supplied) - return - - match = self._py_version_re.search(version) - if match: - version = version[:match.start()] - py_version = match.group(1) - if py_version != sys.version[:3]: - self._log_skipped_link( - link, 'Python version is incorrect') - return - try: - support_this_python = check_requires_python(link.requires_python) - except specifiers.InvalidSpecifier: - logger.debug("Package %s has an invalid Requires-Python entry: %s", - link.filename, link.requires_python) - support_this_python = True - - if not support_this_python: - logger.debug("The package %s is incompatible with the python" - "version in use. Acceptable python versions are:%s", - link, link.requires_python) - return - logger.debug('Found link %s, version: %s', link, version) - - return InstallationCandidate(search.supplied, version, link) - - def _get_page(self, link): - return HTMLPage.get_page(link, session=self.session) - - -def egg_info_matches( - egg_info, search_name, link, - _egg_info_re=re.compile(r'([a-z0-9_.]+)-([a-z0-9_.!+-]+)', re.I)): - """Pull the version part out of a string. - - :param egg_info: The string to parse. E.g. foo-2.1 - :param search_name: The name of the package this belongs to. None to - infer the name. Note that this cannot unambiguously parse strings - like foo-2-2 which might be foo, 2-2 or foo-2, 2. - :param link: The link the string came from, for logging on failure. - """ - match = _egg_info_re.search(egg_info) - if not match: - logger.debug('Could not parse version from link: %s', link) - return None - if search_name is None: - full_match = match.group(0) - return full_match[full_match.index('-'):] - name = match.group(0).lower() - # To match the "safe" name that pkg_resources creates: - name = name.replace('_', '-') - # project name and version must be separated by a dash - look_for = search_name.lower() + "-" - if name.startswith(look_for): - return match.group(0)[len(look_for):] - else: - return None - - -class HTMLPage(object): - """Represents one page, along with its URL""" - - def __init__(self, content, url, headers=None): - # Determine if we have any encoding information in our headers - encoding = None - if headers and "Content-Type" in headers: - content_type, params = cgi.parse_header(headers["Content-Type"]) - - if "charset" in params: - encoding = params['charset'] - - self.content = content - self.parsed = html5lib.parse( - self.content, - transport_encoding=encoding, - namespaceHTMLElements=False, - ) - self.url = url - self.headers = headers - - def __str__(self): - return self.url - - @classmethod - def get_page(cls, link, skip_archives=True, session=None): - if session is None: - raise TypeError( - "get_page() missing 1 required keyword argument: 'session'" - ) - - url = link.url - url = url.split('#', 1)[0] - - # Check for VCS schemes that do not support lookup as web pages. - from pip._internal.vcs import VcsSupport - for scheme in VcsSupport.schemes: - if url.lower().startswith(scheme) and url[len(scheme)] in '+:': - logger.debug('Cannot look at %s URL %s', scheme, link) - return None - - try: - if skip_archives: - filename = link.filename - for bad_ext in ARCHIVE_EXTENSIONS: - if filename.endswith(bad_ext): - content_type = cls._get_content_type( - url, session=session, - ) - if content_type.lower().startswith('text/html'): - break - else: - logger.debug( - 'Skipping page %s because of Content-Type: %s', - link, - content_type, - ) - return - - logger.debug('Getting page %s', url) - - # Tack index.html onto file:// URLs that point to directories - (scheme, netloc, path, params, query, fragment) = \ - urllib_parse.urlparse(url) - if (scheme == 'file' and - os.path.isdir(urllib_request.url2pathname(path))): - # add trailing slash if not present so urljoin doesn't trim - # final segment - if not url.endswith('/'): - url += '/' - url = urllib_parse.urljoin(url, 'index.html') - logger.debug(' file: URL is directory, getting %s', url) - - resp = session.get( - url, - headers={ - "Accept": "text/html", - "Cache-Control": "max-age=600", - }, - ) - resp.raise_for_status() - - # The check for archives above only works if the url ends with - # something that looks like an archive. However that is not a - # requirement of an url. Unless we issue a HEAD request on every - # url we cannot know ahead of time for sure if something is HTML - # or not. However we can check after we've downloaded it. - content_type = resp.headers.get('Content-Type', 'unknown') - if not content_type.lower().startswith("text/html"): - logger.debug( - 'Skipping page %s because of Content-Type: %s', - link, - content_type, - ) - return - - inst = cls(resp.content, resp.url, resp.headers) - except requests.HTTPError as exc: - cls._handle_fail(link, exc, url) - except SSLError as exc: - reason = "There was a problem confirming the ssl certificate: " - reason += str(exc) - cls._handle_fail(link, reason, url, meth=logger.info) - except requests.ConnectionError as exc: - cls._handle_fail(link, "connection error: %s" % exc, url) - except requests.Timeout: - cls._handle_fail(link, "timed out", url) - else: - return inst - - @staticmethod - def _handle_fail(link, reason, url, meth=None): - if meth is None: - meth = logger.debug - - meth("Could not fetch URL %s: %s - skipping", link, reason) - - @staticmethod - def _get_content_type(url, session): - """Get the Content-Type of the given url, using a HEAD request""" - scheme, netloc, path, query, fragment = urllib_parse.urlsplit(url) - if scheme not in {'http', 'https'}: - # FIXME: some warning or something? - # assertion error? - return '' - - resp = session.head(url, allow_redirects=True) - resp.raise_for_status() - - return resp.headers.get("Content-Type", "") - - @cached_property - def base_url(self): - bases = [ - x for x in self.parsed.findall(".//base") - if x.get("href") is not None - ] - if bases and bases[0].get("href"): - return bases[0].get("href") - else: - return self.url - - @property - def links(self): - """Yields all links in the page""" - for anchor in self.parsed.findall(".//a"): - if anchor.get("href"): - href = anchor.get("href") - url = self.clean_link( - urllib_parse.urljoin(self.base_url, href) - ) - pyrequire = anchor.get('data-requires-python') - pyrequire = unescape(pyrequire) if pyrequire else None - yield Link(url, self, requires_python=pyrequire) - - _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) - - def clean_link(self, url): - """Makes sure a link is fully encoded. That is, if a ' ' shows up in - the link, it will be rewritten to %20 (while not over-quoting - % or other characters).""" - return self._clean_re.sub( - lambda match: '%%%2x' % ord(match.group(0)), url) - - -class Link(object): - - def __init__(self, url, comes_from=None, requires_python=None): - """ - Object representing a parsed link from https://pypi.org/simple/* - - url: - url of the resource pointed to (href of the link) - comes_from: - instance of HTMLPage where the link was found, or string. - requires_python: - String containing the `Requires-Python` metadata field, specified - in PEP 345. This may be specified by a data-requires-python - attribute in the HTML link tag, as described in PEP 503. - """ - - # url can be a UNC windows share - if url.startswith('\\\\'): - url = path_to_url(url) - - self.url = url - self.comes_from = comes_from - self.requires_python = requires_python if requires_python else None - - def __str__(self): - if self.requires_python: - rp = ' (requires-python:%s)' % self.requires_python - else: - rp = '' - if self.comes_from: - return '%s (from %s)%s' % (self.url, self.comes_from, rp) - else: - return str(self.url) - - def __repr__(self): - return '' % self - - def __eq__(self, other): - if not isinstance(other, Link): - return NotImplemented - return self.url == other.url - - def __ne__(self, other): - if not isinstance(other, Link): - return NotImplemented - return self.url != other.url - - def __lt__(self, other): - if not isinstance(other, Link): - return NotImplemented - return self.url < other.url - - def __le__(self, other): - if not isinstance(other, Link): - return NotImplemented - return self.url <= other.url - - def __gt__(self, other): - if not isinstance(other, Link): - return NotImplemented - return self.url > other.url - - def __ge__(self, other): - if not isinstance(other, Link): - return NotImplemented - return self.url >= other.url - - def __hash__(self): - return hash(self.url) - - @property - def filename(self): - _, netloc, path, _, _ = urllib_parse.urlsplit(self.url) - name = posixpath.basename(path.rstrip('/')) or netloc - name = urllib_parse.unquote(name) - assert name, ('URL %r produced no filename' % self.url) - return name - - @property - def scheme(self): - return urllib_parse.urlsplit(self.url)[0] - - @property - def netloc(self): - return urllib_parse.urlsplit(self.url)[1] - - @property - def path(self): - return urllib_parse.unquote(urllib_parse.urlsplit(self.url)[2]) - - def splitext(self): - return splitext(posixpath.basename(self.path.rstrip('/'))) - - @property - def ext(self): - return self.splitext()[1] - - @property - def url_without_fragment(self): - scheme, netloc, path, query, fragment = urllib_parse.urlsplit(self.url) - return urllib_parse.urlunsplit((scheme, netloc, path, query, None)) - - _egg_fragment_re = re.compile(r'[#&]egg=([^&]*)') - - @property - def egg_fragment(self): - match = self._egg_fragment_re.search(self.url) - if not match: - return None - return match.group(1) - - _subdirectory_fragment_re = re.compile(r'[#&]subdirectory=([^&]*)') - - @property - def subdirectory_fragment(self): - match = self._subdirectory_fragment_re.search(self.url) - if not match: - return None - return match.group(1) - - _hash_re = re.compile( - r'(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)' - ) - - @property - def hash(self): - match = self._hash_re.search(self.url) - if match: - return match.group(2) - return None - - @property - def hash_name(self): - match = self._hash_re.search(self.url) - if match: - return match.group(1) - return None - - @property - def show_url(self): - return posixpath.basename(self.url.split('#', 1)[0].split('?', 1)[0]) - - @property - def is_wheel(self): - return self.ext == wheel_ext - - @property - def is_artifact(self): - """ - Determines if this points to an actual artifact (e.g. a tarball) or if - it points to an "abstract" thing like a path or a VCS location. - """ - from pip._internal.vcs import vcs - - if self.scheme in vcs.all_schemes: - return False - - return True - - -FormatControl = namedtuple('FormatControl', 'no_binary only_binary') -"""This object has two fields, no_binary and only_binary. - -If a field is falsy, it isn't set. If it is {':all:'}, it should match all -packages except those listed in the other field. Only one field can be set -to {':all:'} at a time. The rest of the time exact package name matches -are listed, with any given package only showing up in one field at a time. -""" - - -def fmt_ctl_handle_mutual_exclude(value, target, other): - new = value.split(',') - while ':all:' in new: - other.clear() - target.clear() - target.add(':all:') - del new[:new.index(':all:') + 1] - if ':none:' not in new: - # Without a none, we want to discard everything as :all: covers it - return - for name in new: - if name == ':none:': - target.clear() - continue - name = canonicalize_name(name) - other.discard(name) - target.add(name) - - -def fmt_ctl_formats(fmt_ctl, canonical_name): - result = {"binary", "source"} - if canonical_name in fmt_ctl.only_binary: - result.discard('source') - elif canonical_name in fmt_ctl.no_binary: - result.discard('binary') - elif ':all:' in fmt_ctl.only_binary: - result.discard('source') - elif ':all:' in fmt_ctl.no_binary: - result.discard('binary') - return frozenset(result) - - -def fmt_ctl_no_binary(fmt_ctl): - fmt_ctl_handle_mutual_exclude( - ':all:', fmt_ctl.no_binary, fmt_ctl.only_binary, - ) - - -Search = namedtuple('Search', 'supplied canonical formats') -"""Capture key aspects of a search. - -:attribute supplied: The user supplied package. -:attribute canonical: The canonical package name. -:attribute formats: The formats allowed for this package. Should be a set - with 'binary' or 'source' or both in it. -""" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/locations.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/locations.py deleted file mode 100644 index 5a20c92..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/locations.py +++ /dev/null @@ -1,194 +0,0 @@ -"""Locations where we look for configs, install stuff, etc""" -from __future__ import absolute_import - -import os -import os.path -import platform -import site -import sys -import sysconfig -from distutils import sysconfig as distutils_sysconfig -from distutils.command.install import SCHEME_KEYS, install # type: ignore - -from pip._internal.compat import WINDOWS, expanduser -from pip._internal.utils import appdirs - -# Application Directories -USER_CACHE_DIR = appdirs.user_cache_dir("pip") - - -DELETE_MARKER_MESSAGE = '''\ -This file is placed here by pip to indicate the source was put -here by pip. - -Once this package is successfully installed this source code will be -deleted (unless you remove this file). -''' -PIP_DELETE_MARKER_FILENAME = 'pip-delete-this-directory.txt' - - -def write_delete_marker_file(directory): - """ - Write the pip delete marker file into this directory. - """ - filepath = os.path.join(directory, PIP_DELETE_MARKER_FILENAME) - with open(filepath, 'w') as marker_fp: - marker_fp.write(DELETE_MARKER_MESSAGE) - - -def running_under_virtualenv(): - """ - Return True if we're running inside a virtualenv, False otherwise. - - """ - if hasattr(sys, 'real_prefix'): - return True - elif sys.prefix != getattr(sys, "base_prefix", sys.prefix): - return True - - return False - - -def virtualenv_no_global(): - """ - Return True if in a venv and no system site packages. - """ - # this mirrors the logic in virtualenv.py for locating the - # no-global-site-packages.txt file - site_mod_dir = os.path.dirname(os.path.abspath(site.__file__)) - no_global_file = os.path.join(site_mod_dir, 'no-global-site-packages.txt') - if running_under_virtualenv() and os.path.isfile(no_global_file): - return True - - -if running_under_virtualenv(): - src_prefix = os.path.join(sys.prefix, 'src') -else: - # FIXME: keep src in cwd for now (it is not a temporary folder) - try: - src_prefix = os.path.join(os.getcwd(), 'src') - except OSError: - # In case the current working directory has been renamed or deleted - sys.exit( - "The folder you are executing pip from can no longer be found." - ) - -# under macOS + virtualenv sys.prefix is not properly resolved -# it is something like /path/to/python/bin/.. -# Note: using realpath due to tmp dirs on OSX being symlinks -src_prefix = os.path.abspath(src_prefix) - -# FIXME doesn't account for venv linked to global site-packages - -site_packages = sysconfig.get_path("purelib") -# This is because of a bug in PyPy's sysconfig module, see -# https://bitbucket.org/pypy/pypy/issues/2506/sysconfig-returns-incorrect-paths -# for more information. -if platform.python_implementation().lower() == "pypy": - site_packages = distutils_sysconfig.get_python_lib() -try: - # Use getusersitepackages if this is present, as it ensures that the - # value is initialised properly. - user_site = site.getusersitepackages() -except AttributeError: - user_site = site.USER_SITE -user_dir = expanduser('~') -if WINDOWS: - bin_py = os.path.join(sys.prefix, 'Scripts') - bin_user = os.path.join(user_site, 'Scripts') - # buildout uses 'bin' on Windows too? - if not os.path.exists(bin_py): - bin_py = os.path.join(sys.prefix, 'bin') - bin_user = os.path.join(user_site, 'bin') - - config_basename = 'pip.ini' - - legacy_storage_dir = os.path.join(user_dir, 'pip') - legacy_config_file = os.path.join( - legacy_storage_dir, - config_basename, - ) -else: - bin_py = os.path.join(sys.prefix, 'bin') - bin_user = os.path.join(user_site, 'bin') - - config_basename = 'pip.conf' - - legacy_storage_dir = os.path.join(user_dir, '.pip') - legacy_config_file = os.path.join( - legacy_storage_dir, - config_basename, - ) - # Forcing to use /usr/local/bin for standard macOS framework installs - # Also log to ~/Library/Logs/ for use with the Console.app log viewer - if sys.platform[:6] == 'darwin' and sys.prefix[:16] == '/System/Library/': - bin_py = '/usr/local/bin' - -site_config_files = [ - os.path.join(path, config_basename) - for path in appdirs.site_config_dirs('pip') -] - -venv_config_file = os.path.join(sys.prefix, config_basename) -new_config_file = os.path.join(appdirs.user_config_dir("pip"), config_basename) - - -def distutils_scheme(dist_name, user=False, home=None, root=None, - isolated=False, prefix=None): - """ - Return a distutils install scheme - """ - from distutils.dist import Distribution - - scheme = {} - - if isolated: - extra_dist_args = {"script_args": ["--no-user-cfg"]} - else: - extra_dist_args = {} - dist_args = {'name': dist_name} - dist_args.update(extra_dist_args) - - d = Distribution(dist_args) - d.parse_config_files() - i = d.get_command_obj('install', create=True) - # NOTE: setting user or home has the side-effect of creating the home dir - # or user base for installations during finalize_options() - # ideally, we'd prefer a scheme class that has no side-effects. - assert not (user and prefix), "user={} prefix={}".format(user, prefix) - i.user = user or i.user - if user: - i.prefix = "" - i.prefix = prefix or i.prefix - i.home = home or i.home - i.root = root or i.root - i.finalize_options() - for key in SCHEME_KEYS: - scheme[key] = getattr(i, 'install_' + key) - - # install_lib specified in setup.cfg should install *everything* - # into there (i.e. it takes precedence over both purelib and - # platlib). Note, i.install_lib is *always* set after - # finalize_options(); we only want to override here if the user - # has explicitly requested it hence going back to the config - if 'install_lib' in d.get_option_dict('install'): - scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib)) - - if running_under_virtualenv(): - scheme['headers'] = os.path.join( - sys.prefix, - 'include', - 'site', - 'python' + sys.version[:3], - dist_name, - ) - - if root is not None: - path_no_drive = os.path.splitdrive( - os.path.abspath(scheme["headers"]))[1] - scheme["headers"] = os.path.join( - root, - path_no_drive[1:], - ) - - return scheme diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/__init__.py deleted file mode 100644 index 505d92c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from pip._internal.models.index import Index, PyPI - - -__all__ = ["Index", "PyPI"] diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/index.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/index.py deleted file mode 100644 index a7f10c8..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/models/index.py +++ /dev/null @@ -1,15 +0,0 @@ -from pip._vendor.six.moves.urllib import parse as urllib_parse - - -class Index(object): - def __init__(self, url): - self.url = url - self.netloc = urllib_parse.urlsplit(url).netloc - self.simple_url = self.url_to_path('simple') - self.pypi_url = self.url_to_path('pypi') - - def url_to_path(self, path): - return urllib_parse.urljoin(self.url, path) - - -PyPI = Index('https://pypi.org/') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/check.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/check.py deleted file mode 100644 index b1ad5b6..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/check.py +++ /dev/null @@ -1,106 +0,0 @@ -"""Validation of dependencies of packages -""" - -from collections import namedtuple - -from pip._vendor.packaging.utils import canonicalize_name - -from pip._internal.operations.prepare import make_abstract_dist - -from pip._internal.utils.misc import get_installed_distributions -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from pip._internal.req.req_install import InstallRequirement - from typing import Any, Dict, Iterator, Set, Tuple, List - - # Shorthands - PackageSet = Dict[str, 'PackageDetails'] - Missing = Tuple[str, Any] - Conflicting = Tuple[str, str, Any] - - MissingDict = Dict[str, List[Missing]] - ConflictingDict = Dict[str, List[Conflicting]] - CheckResult = Tuple[MissingDict, ConflictingDict] - -PackageDetails = namedtuple('PackageDetails', ['version', 'requires']) - - -def create_package_set_from_installed(**kwargs): - # type: (**Any) -> PackageSet - """Converts a list of distributions into a PackageSet. - """ - # Default to using all packages installed on the system - if kwargs == {}: - kwargs = {"local_only": False, "skip": ()} - retval = {} - for dist in get_installed_distributions(**kwargs): - name = canonicalize_name(dist.project_name) - retval[name] = PackageDetails(dist.version, dist.requires()) - return retval - - -def check_package_set(package_set): - # type: (PackageSet) -> CheckResult - """Check if a package set is consistent - """ - missing = dict() - conflicting = dict() - - for package_name in package_set: - # Info about dependencies of package_name - missing_deps = set() # type: Set[Missing] - conflicting_deps = set() # type: Set[Conflicting] - - for req in package_set[package_name].requires: - name = canonicalize_name(req.project_name) # type: str - - # Check if it's missing - if name not in package_set: - missed = True - if req.marker is not None: - missed = req.marker.evaluate() - if missed: - missing_deps.add((name, req)) - continue - - # Check if there's a conflict - version = package_set[name].version # type: str - if not req.specifier.contains(version, prereleases=True): - conflicting_deps.add((name, version, req)) - - def str_key(x): - return str(x) - - if missing_deps: - missing[package_name] = sorted(missing_deps, key=str_key) - if conflicting_deps: - conflicting[package_name] = sorted(conflicting_deps, key=str_key) - - return missing, conflicting - - -def check_install_conflicts(to_install): - # type: (List[InstallRequirement]) -> Tuple[PackageSet, CheckResult] - """For checking if the dependency graph would be consistent after \ - installing given requirements - """ - # Start from the current state - state = create_package_set_from_installed() - _simulate_installation_of(to_install, state) - return state, check_package_set(state) - - -# NOTE from @pradyunsg -# This required a minor update in dependency link handling logic over at -# operations.prepare.IsSDist.dist() to get it working -def _simulate_installation_of(to_install, state): - # type: (List[InstallRequirement], PackageSet) -> None - """Computes the version of packages after installing to_install. - """ - - # Modify it as installing requirement_set would (assuming no errors) - for inst_req in to_install: - dist = make_abstract_dist(inst_req).dist(finder=None) - name = canonicalize_name(dist.key) - state[name] = PackageDetails(dist.version, dist.requires()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/freeze.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/freeze.py deleted file mode 100644 index b6821c0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/freeze.py +++ /dev/null @@ -1,252 +0,0 @@ -from __future__ import absolute_import - -import collections -import logging -import os -import re -import warnings - -from pip._vendor import pkg_resources, six -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.pkg_resources import RequirementParseError - -from pip._internal.exceptions import InstallationError -from pip._internal.req import InstallRequirement -from pip._internal.req.req_file import COMMENT_RE -from pip._internal.utils.deprecation import RemovedInPip11Warning -from pip._internal.utils.misc import ( - dist_is_editable, get_installed_distributions, -) - -logger = logging.getLogger(__name__) - - -def freeze( - requirement=None, - find_links=None, local_only=None, user_only=None, skip_regex=None, - isolated=False, - wheel_cache=None, - exclude_editable=False, - skip=()): - find_links = find_links or [] - skip_match = None - - if skip_regex: - skip_match = re.compile(skip_regex).search - - dependency_links = [] - - for dist in pkg_resources.working_set: - if dist.has_metadata('dependency_links.txt'): - dependency_links.extend( - dist.get_metadata_lines('dependency_links.txt') - ) - for link in find_links: - if '#egg=' in link: - dependency_links.append(link) - for link in find_links: - yield '-f %s' % link - installations = {} - for dist in get_installed_distributions(local_only=local_only, - skip=(), - user_only=user_only): - try: - req = FrozenRequirement.from_dist( - dist, - dependency_links - ) - except RequirementParseError: - logger.warning( - "Could not parse requirement: %s", - dist.project_name - ) - continue - if exclude_editable and req.editable: - continue - installations[req.name] = req - - if requirement: - # the options that don't get turned into an InstallRequirement - # should only be emitted once, even if the same option is in multiple - # requirements files, so we need to keep track of what has been emitted - # so that we don't emit it again if it's seen again - emitted_options = set() - # keep track of which files a requirement is in so that we can - # give an accurate warning if a requirement appears multiple times. - req_files = collections.defaultdict(list) - for req_file_path in requirement: - with open(req_file_path) as req_file: - for line in req_file: - if (not line.strip() or - line.strip().startswith('#') or - (skip_match and skip_match(line)) or - line.startswith(( - '-r', '--requirement', - '-Z', '--always-unzip', - '-f', '--find-links', - '-i', '--index-url', - '--pre', - '--trusted-host', - '--process-dependency-links', - '--extra-index-url'))): - line = line.rstrip() - if line not in emitted_options: - emitted_options.add(line) - yield line - continue - - if line.startswith('-e') or line.startswith('--editable'): - if line.startswith('-e'): - line = line[2:].strip() - else: - line = line[len('--editable'):].strip().lstrip('=') - line_req = InstallRequirement.from_editable( - line, - isolated=isolated, - wheel_cache=wheel_cache, - ) - else: - line_req = InstallRequirement.from_line( - COMMENT_RE.sub('', line).strip(), - isolated=isolated, - wheel_cache=wheel_cache, - ) - - if not line_req.name: - logger.info( - "Skipping line in requirement file [%s] because " - "it's not clear what it would install: %s", - req_file_path, line.strip(), - ) - logger.info( - " (add #egg=PackageName to the URL to avoid" - " this warning)" - ) - elif line_req.name not in installations: - # either it's not installed, or it is installed - # but has been processed already - if not req_files[line_req.name]: - logger.warning( - "Requirement file [%s] contains %s, but that " - "package is not installed", - req_file_path, - COMMENT_RE.sub('', line).strip(), - ) - else: - req_files[line_req.name].append(req_file_path) - else: - yield str(installations[line_req.name]).rstrip() - del installations[line_req.name] - req_files[line_req.name].append(req_file_path) - - # Warn about requirements that were included multiple times (in a - # single requirements file or in different requirements files). - for name, files in six.iteritems(req_files): - if len(files) > 1: - logger.warning("Requirement %s included multiple times [%s]", - name, ', '.join(sorted(set(files)))) - - yield( - '## The following requirements were added by ' - 'pip freeze:' - ) - for installation in sorted( - installations.values(), key=lambda x: x.name.lower()): - if canonicalize_name(installation.name) not in skip: - yield str(installation).rstrip() - - -class FrozenRequirement(object): - def __init__(self, name, req, editable, comments=()): - self.name = name - self.req = req - self.editable = editable - self.comments = comments - - _rev_re = re.compile(r'-r(\d+)$') - _date_re = re.compile(r'-(20\d\d\d\d\d\d)$') - - @classmethod - def from_dist(cls, dist, dependency_links): - location = os.path.normcase(os.path.abspath(dist.location)) - comments = [] - from pip._internal.vcs import vcs, get_src_requirement - if dist_is_editable(dist) and vcs.get_backend_name(location): - editable = True - try: - req = get_src_requirement(dist, location) - except InstallationError as exc: - logger.warning( - "Error when trying to get requirement for VCS system %s, " - "falling back to uneditable format", exc - ) - req = None - if req is None: - logger.warning( - 'Could not determine repository location of %s', location - ) - comments.append( - '## !! Could not determine repository location' - ) - req = dist.as_requirement() - editable = False - else: - editable = False - req = dist.as_requirement() - specs = req.specs - assert len(specs) == 1 and specs[0][0] in ["==", "==="], \ - 'Expected 1 spec with == or ===; specs = %r; dist = %r' % \ - (specs, dist) - version = specs[0][1] - ver_match = cls._rev_re.search(version) - date_match = cls._date_re.search(version) - if ver_match or date_match: - svn_backend = vcs.get_backend('svn') - if svn_backend: - svn_location = svn_backend().get_location( - dist, - dependency_links, - ) - if not svn_location: - logger.warning( - 'Warning: cannot find svn location for %s', req, - ) - comments.append( - '## FIXME: could not find svn URL in dependency_links ' - 'for this package:' - ) - else: - warnings.warn( - "SVN editable detection based on dependency links " - "will be dropped in the future.", - RemovedInPip11Warning, - ) - comments.append( - '# Installing as editable to satisfy requirement %s:' % - req - ) - if ver_match: - rev = ver_match.group(1) - else: - rev = '{%s}' % date_match.group(1) - editable = True - req = '%s@%s#egg=%s' % ( - svn_location, - rev, - cls.egg_name(dist) - ) - return cls(dist.project_name, req, editable, comments) - - @staticmethod - def egg_name(dist): - name = dist.egg_name() - match = re.search(r'-py\d\.\d$', name) - if match: - name = name[:match.start()] - return name - - def __str__(self): - req = self.req - if self.editable: - req = '-e %s' % req - return '\n'.join(list(self.comments) + [str(req)]) + '\n' diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/prepare.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/prepare.py deleted file mode 100644 index 27e3a5d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/operations/prepare.py +++ /dev/null @@ -1,380 +0,0 @@ -"""Prepares a distribution for installation -""" - -import itertools -import logging -import os -import sys -from copy import copy - -from pip._vendor import pkg_resources, requests - -from pip._internal.build_env import NoOpBuildEnvironment -from pip._internal.compat import expanduser -from pip._internal.download import ( - is_dir_url, is_file_url, is_vcs_url, unpack_url, url_to_path, -) -from pip._internal.exceptions import ( - DirectoryUrlHashUnsupported, HashUnpinned, InstallationError, - PreviousBuildDirError, VcsHashUnsupported, -) -from pip._internal.index import FormatControl -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.hashes import MissingHashes -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - call_subprocess, display_path, normalize_path, -) -from pip._internal.utils.ui import open_spinner -from pip._internal.vcs import vcs - -logger = logging.getLogger(__name__) - - -def make_abstract_dist(req): - """Factory to make an abstract dist object. - - Preconditions: Either an editable req with a source_dir, or satisfied_by or - a wheel link, or a non-editable req with a source_dir. - - :return: A concrete DistAbstraction. - """ - if req.editable: - return IsSDist(req) - elif req.link and req.link.is_wheel: - return IsWheel(req) - else: - return IsSDist(req) - - -def _install_build_reqs(finder, prefix, build_requirements): - # NOTE: What follows is not a very good thing. - # Eventually, this should move into the BuildEnvironment class and - # that should handle all the isolation and sub-process invocation. - finder = copy(finder) - finder.format_control = FormatControl(set(), set([":all:"])) - urls = [ - finder.find_requirement( - InstallRequirement.from_line(r), upgrade=False).url - for r in build_requirements - ] - args = [ - sys.executable, '-m', 'pip', 'install', '--ignore-installed', - '--no-user', '--prefix', prefix, - ] + list(urls) - - with open_spinner("Installing build dependencies") as spinner: - call_subprocess(args, show_stdout=False, spinner=spinner) - - -class DistAbstraction(object): - """Abstracts out the wheel vs non-wheel Resolver.resolve() logic. - - The requirements for anything installable are as follows: - - we must be able to determine the requirement name - (or we can't correctly handle the non-upgrade case). - - we must be able to generate a list of run-time dependencies - without installing any additional packages (or we would - have to either burn time by doing temporary isolated installs - or alternatively violate pips 'don't start installing unless - all requirements are available' rule - neither of which are - desirable). - - for packages with setup requirements, we must also be able - to determine their requirements without installing additional - packages (for the same reason as run-time dependencies) - - we must be able to create a Distribution object exposing the - above metadata. - """ - - def __init__(self, req): - self.req = req - - def dist(self, finder): - """Return a setuptools Dist object.""" - raise NotImplementedError(self.dist) - - def prep_for_dist(self, finder): - """Ensure that we can get a Dist for this requirement.""" - raise NotImplementedError(self.dist) - - -class IsWheel(DistAbstraction): - - def dist(self, finder): - return list(pkg_resources.find_distributions( - self.req.source_dir))[0] - - def prep_for_dist(self, finder, build_isolation): - # FIXME:https://github.com/pypa/pip/issues/1112 - pass - - -class IsSDist(DistAbstraction): - - def dist(self, finder): - dist = self.req.get_dist() - # FIXME: shouldn't be globally added. - if finder and dist.has_metadata('dependency_links.txt'): - finder.add_dependency_links( - dist.get_metadata_lines('dependency_links.txt') - ) - return dist - - def prep_for_dist(self, finder, build_isolation): - # Before calling "setup.py egg_info", we need to set-up the build - # environment. - build_requirements, isolate = self.req.get_pep_518_info() - should_isolate = build_isolation and isolate - - minimum_requirements = ('setuptools', 'wheel') - missing_requirements = set(minimum_requirements) - set( - pkg_resources.Requirement(r).key - for r in build_requirements - ) - if missing_requirements: - def format_reqs(rs): - return ' and '.join(map(repr, sorted(rs))) - logger.warning( - "Missing build time requirements in pyproject.toml for %s: " - "%s.", self.req, format_reqs(missing_requirements) - ) - logger.warning( - "This version of pip does not implement PEP 517 so it cannot " - "build a wheel without %s.", format_reqs(minimum_requirements) - ) - - if should_isolate: - with self.req.build_env: - pass - _install_build_reqs(finder, self.req.build_env.path, - build_requirements) - else: - self.req.build_env = NoOpBuildEnvironment(no_clean=False) - - self.req.run_egg_info() - self.req.assert_source_matches_version() - - -class Installed(DistAbstraction): - - def dist(self, finder): - return self.req.satisfied_by - - def prep_for_dist(self, finder): - pass - - -class RequirementPreparer(object): - """Prepares a Requirement - """ - - def __init__(self, build_dir, download_dir, src_dir, wheel_download_dir, - progress_bar, build_isolation): - super(RequirementPreparer, self).__init__() - - self.src_dir = src_dir - self.build_dir = build_dir - - # Where still packed archives should be written to. If None, they are - # not saved, and are deleted immediately after unpacking. - self.download_dir = download_dir - - # Where still-packed .whl files should be written to. If None, they are - # written to the download_dir parameter. Separate to download_dir to - # permit only keeping wheel archives for pip wheel. - if wheel_download_dir: - wheel_download_dir = normalize_path(wheel_download_dir) - self.wheel_download_dir = wheel_download_dir - - # NOTE - # download_dir and wheel_download_dir overlap semantically and may - # be combined if we're willing to have non-wheel archives present in - # the wheelhouse output by 'pip wheel'. - - self.progress_bar = progress_bar - - # Is build isolation allowed? - self.build_isolation = build_isolation - - @property - def _download_should_save(self): - # TODO: Modify to reduce indentation needed - if self.download_dir: - self.download_dir = expanduser(self.download_dir) - if os.path.exists(self.download_dir): - return True - else: - logger.critical('Could not find download directory') - raise InstallationError( - "Could not find or access download directory '%s'" - % display_path(self.download_dir)) - return False - - def prepare_linked_requirement(self, req, session, finder, - upgrade_allowed, require_hashes): - """Prepare a requirement that would be obtained from req.link - """ - # TODO: Breakup into smaller functions - if req.link and req.link.scheme == 'file': - path = url_to_path(req.link.url) - logger.info('Processing %s', display_path(path)) - else: - logger.info('Collecting %s', req) - - with indent_log(): - # @@ if filesystem packages are not marked - # editable in a req, a non deterministic error - # occurs when the script attempts to unpack the - # build directory - req.ensure_has_source_dir(self.build_dir) - # If a checkout exists, it's unwise to keep going. version - # inconsistencies are logged later, but do not fail the - # installation. - # FIXME: this won't upgrade when there's an existing - # package unpacked in `req.source_dir` - # package unpacked in `req.source_dir` - if os.path.exists(os.path.join(req.source_dir, 'setup.py')): - raise PreviousBuildDirError( - "pip can't proceed with requirements '%s' due to a" - " pre-existing build directory (%s). This is " - "likely due to a previous installation that failed" - ". pip is being responsible and not assuming it " - "can delete this. Please delete it and try again." - % (req, req.source_dir) - ) - req.populate_link(finder, upgrade_allowed, require_hashes) - - # We can't hit this spot and have populate_link return None. - # req.satisfied_by is None here (because we're - # guarded) and upgrade has no impact except when satisfied_by - # is not None. - # Then inside find_requirement existing_applicable -> False - # If no new versions are found, DistributionNotFound is raised, - # otherwise a result is guaranteed. - assert req.link - link = req.link - - # Now that we have the real link, we can tell what kind of - # requirements we have and raise some more informative errors - # than otherwise. (For example, we can raise VcsHashUnsupported - # for a VCS URL rather than HashMissing.) - if require_hashes: - # We could check these first 2 conditions inside - # unpack_url and save repetition of conditions, but then - # we would report less-useful error messages for - # unhashable requirements, complaining that there's no - # hash provided. - if is_vcs_url(link): - raise VcsHashUnsupported() - elif is_file_url(link) and is_dir_url(link): - raise DirectoryUrlHashUnsupported() - if not req.original_link and not req.is_pinned: - # Unpinned packages are asking for trouble when a new - # version is uploaded. This isn't a security check, but - # it saves users a surprising hash mismatch in the - # future. - # - # file:/// URLs aren't pinnable, so don't complain - # about them not being pinned. - raise HashUnpinned() - - hashes = req.hashes(trust_internet=not require_hashes) - if require_hashes and not hashes: - # Known-good hashes are missing for this requirement, so - # shim it with a facade object that will provoke hash - # computation and then raise a HashMissing exception - # showing the user what the hash should be. - hashes = MissingHashes() - - try: - download_dir = self.download_dir - # We always delete unpacked sdists after pip ran. - autodelete_unpacked = True - if req.link.is_wheel and self.wheel_download_dir: - # when doing 'pip wheel` we download wheels to a - # dedicated dir. - download_dir = self.wheel_download_dir - if req.link.is_wheel: - if download_dir: - # When downloading, we only unpack wheels to get - # metadata. - autodelete_unpacked = True - else: - # When installing a wheel, we use the unpacked - # wheel. - autodelete_unpacked = False - unpack_url( - req.link, req.source_dir, - download_dir, autodelete_unpacked, - session=session, hashes=hashes, - progress_bar=self.progress_bar - ) - except requests.HTTPError as exc: - logger.critical( - 'Could not install requirement %s because of error %s', - req, - exc, - ) - raise InstallationError( - 'Could not install requirement %s because of HTTP ' - 'error %s for URL %s' % - (req, exc, req.link) - ) - abstract_dist = make_abstract_dist(req) - abstract_dist.prep_for_dist(finder, self.build_isolation) - if self._download_should_save: - # Make a .zip of the source_dir we already created. - if req.link.scheme in vcs.all_schemes: - req.archive(self.download_dir) - return abstract_dist - - def prepare_editable_requirement(self, req, require_hashes, use_user_site, - finder): - """Prepare an editable requirement - """ - assert req.editable, "cannot prepare a non-editable req as editable" - - logger.info('Obtaining %s', req) - - with indent_log(): - if require_hashes: - raise InstallationError( - 'The editable requirement %s cannot be installed when ' - 'requiring hashes, because there is no single file to ' - 'hash.' % req - ) - req.ensure_has_source_dir(self.src_dir) - req.update_editable(not self._download_should_save) - - abstract_dist = make_abstract_dist(req) - abstract_dist.prep_for_dist(finder, self.build_isolation) - - if self._download_should_save: - req.archive(self.download_dir) - req.check_if_exists(use_user_site) - - return abstract_dist - - def prepare_installed_requirement(self, req, require_hashes, skip_reason): - """Prepare an already-installed requirement - """ - assert req.satisfied_by, "req should have been satisfied but isn't" - assert skip_reason is not None, ( - "did not get skip reason skipped but req.satisfied_by " - "is set to %r" % (req.satisfied_by,) - ) - logger.info( - 'Requirement %s: %s (%s)', - skip_reason, req, req.satisfied_by.version - ) - with indent_log(): - if require_hashes: - logger.debug( - 'Since it is already installed, we are trusting this ' - 'package without checking its hash. To ensure a ' - 'completely repeatable environment, install into an ' - 'empty virtualenv.' - ) - abstract_dist = Installed(req) - - return abstract_dist diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/pep425tags.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/pep425tags.py deleted file mode 100644 index 0b5c783..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/pep425tags.py +++ /dev/null @@ -1,317 +0,0 @@ -"""Generate and work with PEP 425 Compatibility Tags.""" -from __future__ import absolute_import - -import distutils.util -import logging -import platform -import re -import sys -import sysconfig -import warnings -from collections import OrderedDict - -import pip._internal.utils.glibc - -logger = logging.getLogger(__name__) - -_osx_arch_pat = re.compile(r'(.+)_(\d+)_(\d+)_(.+)') - - -def get_config_var(var): - try: - return sysconfig.get_config_var(var) - except IOError as e: # Issue #1074 - warnings.warn("{}".format(e), RuntimeWarning) - return None - - -def get_abbr_impl(): - """Return abbreviated implementation name.""" - if hasattr(sys, 'pypy_version_info'): - pyimpl = 'pp' - elif sys.platform.startswith('java'): - pyimpl = 'jy' - elif sys.platform == 'cli': - pyimpl = 'ip' - else: - pyimpl = 'cp' - return pyimpl - - -def get_impl_ver(): - """Return implementation version.""" - impl_ver = get_config_var("py_version_nodot") - if not impl_ver or get_abbr_impl() == 'pp': - impl_ver = ''.join(map(str, get_impl_version_info())) - return impl_ver - - -def get_impl_version_info(): - """Return sys.version_info-like tuple for use in decrementing the minor - version.""" - if get_abbr_impl() == 'pp': - # as per https://github.com/pypa/pip/issues/2882 - return (sys.version_info[0], sys.pypy_version_info.major, - sys.pypy_version_info.minor) - else: - return sys.version_info[0], sys.version_info[1] - - -def get_impl_tag(): - """ - Returns the Tag for this specific implementation. - """ - return "{}{}".format(get_abbr_impl(), get_impl_ver()) - - -def get_flag(var, fallback, expected=True, warn=True): - """Use a fallback method for determining SOABI flags if the needed config - var is unset or unavailable.""" - val = get_config_var(var) - if val is None: - if warn: - logger.debug("Config variable '%s' is unset, Python ABI tag may " - "be incorrect", var) - return fallback() - return val == expected - - -def get_abi_tag(): - """Return the ABI tag based on SOABI (if available) or emulate SOABI - (CPython 2, PyPy).""" - soabi = get_config_var('SOABI') - impl = get_abbr_impl() - if not soabi and impl in {'cp', 'pp'} and hasattr(sys, 'maxunicode'): - d = '' - m = '' - u = '' - if get_flag('Py_DEBUG', - lambda: hasattr(sys, 'gettotalrefcount'), - warn=(impl == 'cp')): - d = 'd' - if get_flag('WITH_PYMALLOC', - lambda: impl == 'cp', - warn=(impl == 'cp')): - m = 'm' - if get_flag('Py_UNICODE_SIZE', - lambda: sys.maxunicode == 0x10ffff, - expected=4, - warn=(impl == 'cp' and - sys.version_info < (3, 3))) \ - and sys.version_info < (3, 3): - u = 'u' - abi = '%s%s%s%s%s' % (impl, get_impl_ver(), d, m, u) - elif soabi and soabi.startswith('cpython-'): - abi = 'cp' + soabi.split('-')[1] - elif soabi: - abi = soabi.replace('.', '_').replace('-', '_') - else: - abi = None - return abi - - -def _is_running_32bit(): - return sys.maxsize == 2147483647 - - -def get_platform(): - """Return our platform name 'win32', 'linux_x86_64'""" - if sys.platform == 'darwin': - # distutils.util.get_platform() returns the release based on the value - # of MACOSX_DEPLOYMENT_TARGET on which Python was built, which may - # be significantly older than the user's current machine. - release, _, machine = platform.mac_ver() - split_ver = release.split('.') - - if machine == "x86_64" and _is_running_32bit(): - machine = "i386" - elif machine == "ppc64" and _is_running_32bit(): - machine = "ppc" - - return 'macosx_{}_{}_{}'.format(split_ver[0], split_ver[1], machine) - - # XXX remove distutils dependency - result = distutils.util.get_platform().replace('.', '_').replace('-', '_') - if result == "linux_x86_64" and _is_running_32bit(): - # 32 bit Python program (running on a 64 bit Linux): pip should only - # install and run 32 bit compiled extensions in that case. - result = "linux_i686" - - return result - - -def is_manylinux1_compatible(): - # Only Linux, and only x86-64 / i686 - if get_platform() not in {"linux_x86_64", "linux_i686"}: - return False - - # Check for presence of _manylinux module - try: - import _manylinux - return bool(_manylinux.manylinux1_compatible) - except (ImportError, AttributeError): - # Fall through to heuristic check below - pass - - # Check glibc version. CentOS 5 uses glibc 2.5. - return pip._internal.utils.glibc.have_compatible_glibc(2, 5) - - -def get_darwin_arches(major, minor, machine): - """Return a list of supported arches (including group arches) for - the given major, minor and machine architecture of an macOS machine. - """ - arches = [] - - def _supports_arch(major, minor, arch): - # Looking at the application support for macOS versions in the chart - # provided by https://en.wikipedia.org/wiki/OS_X#Versions it appears - # our timeline looks roughly like: - # - # 10.0 - Introduces ppc support. - # 10.4 - Introduces ppc64, i386, and x86_64 support, however the ppc64 - # and x86_64 support is CLI only, and cannot be used for GUI - # applications. - # 10.5 - Extends ppc64 and x86_64 support to cover GUI applications. - # 10.6 - Drops support for ppc64 - # 10.7 - Drops support for ppc - # - # Given that we do not know if we're installing a CLI or a GUI - # application, we must be conservative and assume it might be a GUI - # application and behave as if ppc64 and x86_64 support did not occur - # until 10.5. - # - # Note: The above information is taken from the "Application support" - # column in the chart not the "Processor support" since I believe - # that we care about what instruction sets an application can use - # not which processors the OS supports. - if arch == 'ppc': - return (major, minor) <= (10, 5) - if arch == 'ppc64': - return (major, minor) == (10, 5) - if arch == 'i386': - return (major, minor) >= (10, 4) - if arch == 'x86_64': - return (major, minor) >= (10, 5) - if arch in groups: - for garch in groups[arch]: - if _supports_arch(major, minor, garch): - return True - return False - - groups = OrderedDict([ - ("fat", ("i386", "ppc")), - ("intel", ("x86_64", "i386")), - ("fat64", ("x86_64", "ppc64")), - ("fat32", ("x86_64", "i386", "ppc")), - ]) - - if _supports_arch(major, minor, machine): - arches.append(machine) - - for garch in groups: - if machine in groups[garch] and _supports_arch(major, minor, garch): - arches.append(garch) - - arches.append('universal') - - return arches - - -def get_supported(versions=None, noarch=False, platform=None, - impl=None, abi=None): - """Return a list of supported tags for each version specified in - `versions`. - - :param versions: a list of string versions, of the form ["33", "32"], - or None. The first version will be assumed to support our ABI. - :param platform: specify the exact platform you want valid - tags for, or None. If None, use the local system platform. - :param impl: specify the exact implementation you want valid - tags for, or None. If None, use the local interpreter impl. - :param abi: specify the exact abi you want valid - tags for, or None. If None, use the local interpreter abi. - """ - supported = [] - - # Versions must be given with respect to the preference - if versions is None: - versions = [] - version_info = get_impl_version_info() - major = version_info[:-1] - # Support all previous minor Python versions. - for minor in range(version_info[-1], -1, -1): - versions.append(''.join(map(str, major + (minor,)))) - - impl = impl or get_abbr_impl() - - abis = [] - - abi = abi or get_abi_tag() - if abi: - abis[0:0] = [abi] - - abi3s = set() - import imp - for suffix in imp.get_suffixes(): - if suffix[0].startswith('.abi'): - abi3s.add(suffix[0].split('.', 2)[1]) - - abis.extend(sorted(list(abi3s))) - - abis.append('none') - - if not noarch: - arch = platform or get_platform() - if arch.startswith('macosx'): - # support macosx-10.6-intel on macosx-10.9-x86_64 - match = _osx_arch_pat.match(arch) - if match: - name, major, minor, actual_arch = match.groups() - tpl = '{}_{}_%i_%s'.format(name, major) - arches = [] - for m in reversed(range(int(minor) + 1)): - for a in get_darwin_arches(int(major), m, actual_arch): - arches.append(tpl % (m, a)) - else: - # arch pattern didn't match (?!) - arches = [arch] - elif platform is None and is_manylinux1_compatible(): - arches = [arch.replace('linux', 'manylinux1'), arch] - else: - arches = [arch] - - # Current version, current API (built specifically for our Python): - for abi in abis: - for arch in arches: - supported.append(('%s%s' % (impl, versions[0]), abi, arch)) - - # abi3 modules compatible with older version of Python - for version in versions[1:]: - # abi3 was introduced in Python 3.2 - if version in {'31', '30'}: - break - for abi in abi3s: # empty set if not Python 3 - for arch in arches: - supported.append(("%s%s" % (impl, version), abi, arch)) - - # Has binaries, does not use the Python API: - for arch in arches: - supported.append(('py%s' % (versions[0][0]), 'none', arch)) - - # No abi / arch, but requires our implementation: - supported.append(('%s%s' % (impl, versions[0]), 'none', 'any')) - # Tagged specifically as being cross-version compatible - # (with just the major version specified) - supported.append(('%s%s' % (impl, versions[0][0]), 'none', 'any')) - - # No abi / arch, generic Python - for i, version in enumerate(versions): - supported.append(('py%s' % (version,), 'none', 'any')) - if i == 0: - supported.append(('py%s' % (version[0]), 'none', 'any')) - - return supported - - -implementation_tag = get_impl_tag() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/__init__.py deleted file mode 100644 index c9b4c3c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/__init__.py +++ /dev/null @@ -1,69 +0,0 @@ -from __future__ import absolute_import - -import logging - -from .req_install import InstallRequirement -from .req_set import RequirementSet -from .req_file import parse_requirements -from pip._internal.utils.logging import indent_log - - -__all__ = [ - "RequirementSet", "InstallRequirement", - "parse_requirements", "install_given_reqs", -] - -logger = logging.getLogger(__name__) - - -def install_given_reqs(to_install, install_options, global_options=(), - *args, **kwargs): - """ - Install everything in the given list. - - (to be called after having downloaded and unpacked the packages) - """ - - if to_install: - logger.info( - 'Installing collected packages: %s', - ', '.join([req.name for req in to_install]), - ) - - with indent_log(): - for requirement in to_install: - if requirement.conflicts_with: - logger.info( - 'Found existing installation: %s', - requirement.conflicts_with, - ) - with indent_log(): - uninstalled_pathset = requirement.uninstall( - auto_confirm=True - ) - try: - requirement.install( - install_options, - global_options, - *args, - **kwargs - ) - except: - should_rollback = ( - requirement.conflicts_with and - not requirement.install_succeeded - ) - # if install did not succeed, rollback previous uninstall - if should_rollback: - uninstalled_pathset.rollback() - raise - else: - should_commit = ( - requirement.conflicts_with and - requirement.install_succeeded - ) - if should_commit: - uninstalled_pathset.commit() - requirement.remove_temporary_source() - - return to_install diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_file.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_file.py deleted file mode 100644 index f868497..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_file.py +++ /dev/null @@ -1,338 +0,0 @@ -""" -Requirements file parsing -""" - -from __future__ import absolute_import - -import optparse -import os -import re -import shlex -import sys - -from pip._vendor.six.moves import filterfalse -from pip._vendor.six.moves.urllib import parse as urllib_parse - -from pip._internal import cmdoptions -from pip._internal.download import get_file_content -from pip._internal.exceptions import RequirementsFileParseError -from pip._internal.req.req_install import InstallRequirement - -__all__ = ['parse_requirements'] - -SCHEME_RE = re.compile(r'^(http|https|file):', re.I) -COMMENT_RE = re.compile(r'(^|\s)+#.*$') - -# Matches environment variable-style values in '${MY_VARIABLE_1}' with the -# variable name consisting of only uppercase letters, digits or the '_' -# (underscore). This follows the POSIX standard defined in IEEE Std 1003.1, -# 2013 Edition. -ENV_VAR_RE = re.compile(r'(?P\$\{(?P[A-Z0-9_]+)\})') - -SUPPORTED_OPTIONS = [ - cmdoptions.constraints, - cmdoptions.editable, - cmdoptions.requirements, - cmdoptions.no_index, - cmdoptions.index_url, - cmdoptions.find_links, - cmdoptions.extra_index_url, - cmdoptions.always_unzip, - cmdoptions.no_binary, - cmdoptions.only_binary, - cmdoptions.pre, - cmdoptions.process_dependency_links, - cmdoptions.trusted_host, - cmdoptions.require_hashes, -] - -# options to be passed to requirements -SUPPORTED_OPTIONS_REQ = [ - cmdoptions.install_options, - cmdoptions.global_options, - cmdoptions.hash, -] - -# the 'dest' string values -SUPPORTED_OPTIONS_REQ_DEST = [o().dest for o in SUPPORTED_OPTIONS_REQ] - - -def parse_requirements(filename, finder=None, comes_from=None, options=None, - session=None, constraint=False, wheel_cache=None): - """Parse a requirements file and yield InstallRequirement instances. - - :param filename: Path or url of requirements file. - :param finder: Instance of pip.index.PackageFinder. - :param comes_from: Origin description of requirements. - :param options: cli options. - :param session: Instance of pip.download.PipSession. - :param constraint: If true, parsing a constraint file rather than - requirements file. - :param wheel_cache: Instance of pip.wheel.WheelCache - """ - if session is None: - raise TypeError( - "parse_requirements() missing 1 required keyword argument: " - "'session'" - ) - - _, content = get_file_content( - filename, comes_from=comes_from, session=session - ) - - lines_enum = preprocess(content, options) - - for line_number, line in lines_enum: - req_iter = process_line(line, filename, line_number, finder, - comes_from, options, session, wheel_cache, - constraint=constraint) - for req in req_iter: - yield req - - -def preprocess(content, options): - """Split, filter, and join lines, and return a line iterator - - :param content: the content of the requirements file - :param options: cli options - """ - lines_enum = enumerate(content.splitlines(), start=1) - lines_enum = join_lines(lines_enum) - lines_enum = ignore_comments(lines_enum) - lines_enum = skip_regex(lines_enum, options) - lines_enum = expand_env_variables(lines_enum) - return lines_enum - - -def process_line(line, filename, line_number, finder=None, comes_from=None, - options=None, session=None, wheel_cache=None, - constraint=False): - """Process a single requirements line; This can result in creating/yielding - requirements, or updating the finder. - - For lines that contain requirements, the only options that have an effect - are from SUPPORTED_OPTIONS_REQ, and they are scoped to the - requirement. Other options from SUPPORTED_OPTIONS may be present, but are - ignored. - - For lines that do not contain requirements, the only options that have an - effect are from SUPPORTED_OPTIONS. Options from SUPPORTED_OPTIONS_REQ may - be present, but are ignored. These lines may contain multiple options - (although our docs imply only one is supported), and all our parsed and - affect the finder. - - :param constraint: If True, parsing a constraints file. - :param options: OptionParser options that we may update - """ - parser = build_parser(line) - defaults = parser.get_default_values() - defaults.index_url = None - if finder: - # `finder.format_control` will be updated during parsing - defaults.format_control = finder.format_control - args_str, options_str = break_args_options(line) - if sys.version_info < (2, 7, 3): - # Prior to 2.7.3, shlex cannot deal with unicode entries - options_str = options_str.encode('utf8') - opts, _ = parser.parse_args(shlex.split(options_str), defaults) - - # preserve for the nested code path - line_comes_from = '%s %s (line %s)' % ( - '-c' if constraint else '-r', filename, line_number, - ) - - # yield a line requirement - if args_str: - isolated = options.isolated_mode if options else False - if options: - cmdoptions.check_install_build_global(options, opts) - # get the options that apply to requirements - req_options = {} - for dest in SUPPORTED_OPTIONS_REQ_DEST: - if dest in opts.__dict__ and opts.__dict__[dest]: - req_options[dest] = opts.__dict__[dest] - yield InstallRequirement.from_line( - args_str, line_comes_from, constraint=constraint, - isolated=isolated, options=req_options, wheel_cache=wheel_cache - ) - - # yield an editable requirement - elif opts.editables: - isolated = options.isolated_mode if options else False - yield InstallRequirement.from_editable( - opts.editables[0], comes_from=line_comes_from, - constraint=constraint, isolated=isolated, wheel_cache=wheel_cache - ) - - # parse a nested requirements file - elif opts.requirements or opts.constraints: - if opts.requirements: - req_path = opts.requirements[0] - nested_constraint = False - else: - req_path = opts.constraints[0] - nested_constraint = True - # original file is over http - if SCHEME_RE.search(filename): - # do a url join so relative paths work - req_path = urllib_parse.urljoin(filename, req_path) - # original file and nested file are paths - elif not SCHEME_RE.search(req_path): - # do a join so relative paths work - req_path = os.path.join(os.path.dirname(filename), req_path) - # TODO: Why not use `comes_from='-r {} (line {})'` here as well? - parser = parse_requirements( - req_path, finder, comes_from, options, session, - constraint=nested_constraint, wheel_cache=wheel_cache - ) - for req in parser: - yield req - - # percolate hash-checking option upward - elif opts.require_hashes: - options.require_hashes = opts.require_hashes - - # set finder options - elif finder: - if opts.index_url: - finder.index_urls = [opts.index_url] - if opts.no_index is True: - finder.index_urls = [] - if opts.extra_index_urls: - finder.index_urls.extend(opts.extra_index_urls) - if opts.find_links: - # FIXME: it would be nice to keep track of the source - # of the find_links: support a find-links local path - # relative to a requirements file. - value = opts.find_links[0] - req_dir = os.path.dirname(os.path.abspath(filename)) - relative_to_reqs_file = os.path.join(req_dir, value) - if os.path.exists(relative_to_reqs_file): - value = relative_to_reqs_file - finder.find_links.append(value) - if opts.pre: - finder.allow_all_prereleases = True - if opts.process_dependency_links: - finder.process_dependency_links = True - if opts.trusted_hosts: - finder.secure_origins.extend( - ("*", host, "*") for host in opts.trusted_hosts) - - -def break_args_options(line): - """Break up the line into an args and options string. We only want to shlex - (and then optparse) the options, not the args. args can contain markers - which are corrupted by shlex. - """ - tokens = line.split(' ') - args = [] - options = tokens[:] - for token in tokens: - if token.startswith('-') or token.startswith('--'): - break - else: - args.append(token) - options.pop(0) - return ' '.join(args), ' '.join(options) - - -def build_parser(line): - """ - Return a parser for parsing requirement lines - """ - parser = optparse.OptionParser(add_help_option=False) - - option_factories = SUPPORTED_OPTIONS + SUPPORTED_OPTIONS_REQ - for option_factory in option_factories: - option = option_factory() - parser.add_option(option) - - # By default optparse sys.exits on parsing errors. We want to wrap - # that in our own exception. - def parser_exit(self, msg): - # add offending line - msg = 'Invalid requirement: %s\n%s' % (line, msg) - raise RequirementsFileParseError(msg) - parser.exit = parser_exit - - return parser - - -def join_lines(lines_enum): - """Joins a line ending in '\' with the previous line (except when following - comments). The joined line takes on the index of the first line. - """ - primary_line_number = None - new_line = [] - for line_number, line in lines_enum: - if not line.endswith('\\') or COMMENT_RE.match(line): - if COMMENT_RE.match(line): - # this ensures comments are always matched later - line = ' ' + line - if new_line: - new_line.append(line) - yield primary_line_number, ''.join(new_line) - new_line = [] - else: - yield line_number, line - else: - if not new_line: - primary_line_number = line_number - new_line.append(line.strip('\\')) - - # last line contains \ - if new_line: - yield primary_line_number, ''.join(new_line) - - # TODO: handle space after '\'. - - -def ignore_comments(lines_enum): - """ - Strips comments and filter empty lines. - """ - for line_number, line in lines_enum: - line = COMMENT_RE.sub('', line) - line = line.strip() - if line: - yield line_number, line - - -def skip_regex(lines_enum, options): - """ - Skip lines that match '--skip-requirements-regex' pattern - - Note: the regex pattern is only built once - """ - skip_regex = options.skip_requirements_regex if options else None - if skip_regex: - pattern = re.compile(skip_regex) - lines_enum = filterfalse(lambda e: pattern.search(e[1]), lines_enum) - return lines_enum - - -def expand_env_variables(lines_enum): - """Replace all environment variables that can be retrieved via `os.getenv`. - - The only allowed format for environment variables defined in the - requirement file is `${MY_VARIABLE_1}` to ensure two things: - - 1. Strings that contain a `$` aren't accidentally (partially) expanded. - 2. Ensure consistency across platforms for requirement files. - - These points are the result of a discusssion on the `github pull - request #3514 `_. - - Valid characters in variable names follow the `POSIX standard - `_ and are limited - to uppercase letter, digits and the `_` (underscore). - """ - for line_number, line in lines_enum: - for env_var, var_name in ENV_VAR_RE.findall(line): - value = os.getenv(var_name) - if not value: - continue - - line = line.replace(env_var, value) - - yield line_number, line diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_install.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_install.py deleted file mode 100644 index ddd167c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_install.py +++ /dev/null @@ -1,1115 +0,0 @@ -from __future__ import absolute_import - -import logging -import os -import re -import shutil -import sys -import sysconfig -import traceback -import warnings -import zipfile -from distutils.util import change_root -from email.parser import FeedParser # type: ignore - -from pip._vendor import pkg_resources, pytoml, six -from pip._vendor.packaging import specifiers -from pip._vendor.packaging.markers import Marker -from pip._vendor.packaging.requirements import InvalidRequirement, Requirement -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.packaging.version import Version -from pip._vendor.pkg_resources import RequirementParseError, parse_requirements - -from pip._internal import wheel -from pip._internal.build_env import BuildEnvironment -from pip._internal.compat import native_str -from pip._internal.download import ( - is_archive_file, is_url, path_to_url, url_to_path, -) -from pip._internal.exceptions import InstallationError, UninstallationError -from pip._internal.locations import ( - PIP_DELETE_MARKER_FILENAME, running_under_virtualenv, -) -from pip._internal.req.req_uninstall import UninstallPathSet -from pip._internal.utils.deprecation import RemovedInPip11Warning -from pip._internal.utils.hashes import Hashes -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - _make_build_dir, ask_path_exists, backup_dir, call_subprocess, - display_path, dist_in_site_packages, dist_in_usersite, ensure_dir, - get_installed_version, is_installable_dir, read_text_file, rmtree, -) -from pip._internal.utils.setuptools_build import SETUPTOOLS_SHIM -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.ui import open_spinner -from pip._internal.vcs import vcs -from pip._internal.wheel import Wheel, move_wheel_files - -logger = logging.getLogger(__name__) - -operators = specifiers.Specifier._operators.keys() - - -def _strip_extras(path): - m = re.match(r'^(.+)(\[[^\]]+\])$', path) - extras = None - if m: - path_no_extras = m.group(1) - extras = m.group(2) - else: - path_no_extras = path - - return path_no_extras, extras - - -class InstallRequirement(object): - """ - Represents something that may be installed later on, may have information - about where to fetch the relavant requirement and also contains logic for - installing the said requirement. - """ - - def __init__(self, req, comes_from, source_dir=None, editable=False, - link=None, update=True, markers=None, - isolated=False, options=None, wheel_cache=None, - constraint=False, extras=()): - assert req is None or isinstance(req, Requirement), req - self.req = req - self.comes_from = comes_from - self.constraint = constraint - if source_dir is not None: - self.source_dir = os.path.normpath(os.path.abspath(source_dir)) - else: - self.source_dir = None - self.editable = editable - - self._wheel_cache = wheel_cache - if link is not None: - self.link = self.original_link = link - else: - from pip._internal.index import Link - self.link = self.original_link = req and req.url and Link(req.url) - - if extras: - self.extras = extras - elif req: - self.extras = { - pkg_resources.safe_extra(extra) for extra in req.extras - } - else: - self.extras = set() - if markers is not None: - self.markers = markers - else: - self.markers = req and req.marker - self._egg_info_path = None - # This holds the pkg_resources.Distribution object if this requirement - # is already available: - self.satisfied_by = None - # This hold the pkg_resources.Distribution object if this requirement - # conflicts with another installed distribution: - self.conflicts_with = None - # Temporary build location - self._temp_build_dir = TempDirectory(kind="req-build") - # Used to store the global directory where the _temp_build_dir should - # have been created. Cf _correct_build_location method. - self._ideal_build_dir = None - # True if the editable should be updated: - self.update = update - # Set to True after successful installation - self.install_succeeded = None - # UninstallPathSet of uninstalled distribution (for possible rollback) - self.uninstalled_pathset = None - self.options = options if options else {} - # Set to True after successful preparation of this requirement - self.prepared = False - self.is_direct = False - - self.isolated = isolated - self.build_env = BuildEnvironment(no_clean=True) - - @classmethod - def from_editable(cls, editable_req, comes_from=None, isolated=False, - options=None, wheel_cache=None, constraint=False): - from pip._internal.index import Link - - name, url, extras_override = parse_editable(editable_req) - if url.startswith('file:'): - source_dir = url_to_path(url) - else: - source_dir = None - - if name is not None: - try: - req = Requirement(name) - except InvalidRequirement: - raise InstallationError("Invalid requirement: '%s'" % name) - else: - req = None - return cls( - req, comes_from, source_dir=source_dir, - editable=True, - link=Link(url), - constraint=constraint, - isolated=isolated, - options=options if options else {}, - wheel_cache=wheel_cache, - extras=extras_override or (), - ) - - @classmethod - def from_req(cls, req, comes_from=None, isolated=False, wheel_cache=None): - try: - req = Requirement(req) - except InvalidRequirement: - raise InstallationError("Invalid requirement: '%s'" % req) - if req.url: - raise InstallationError( - "Direct url requirement (like %s) are not allowed for " - "dependencies" % req - ) - return cls(req, comes_from, isolated=isolated, wheel_cache=wheel_cache) - - @classmethod - def from_line( - cls, name, comes_from=None, isolated=False, options=None, - wheel_cache=None, constraint=False): - """Creates an InstallRequirement from a name, which might be a - requirement, directory containing 'setup.py', filename, or URL. - """ - from pip._internal.index import Link - - if is_url(name): - marker_sep = '; ' - else: - marker_sep = ';' - if marker_sep in name: - name, markers = name.split(marker_sep, 1) - markers = markers.strip() - if not markers: - markers = None - else: - markers = Marker(markers) - else: - markers = None - name = name.strip() - req = None - path = os.path.normpath(os.path.abspath(name)) - link = None - extras = None - - if is_url(name): - link = Link(name) - else: - p, extras = _strip_extras(path) - looks_like_dir = os.path.isdir(p) and ( - os.path.sep in name or - (os.path.altsep is not None and os.path.altsep in name) or - name.startswith('.') - ) - if looks_like_dir: - if not is_installable_dir(p): - raise InstallationError( - "Directory %r is not installable. File 'setup.py' " - "not found." % name - ) - link = Link(path_to_url(p)) - elif is_archive_file(p): - if not os.path.isfile(p): - logger.warning( - 'Requirement %r looks like a filename, but the ' - 'file does not exist', - name - ) - link = Link(path_to_url(p)) - - # it's a local file, dir, or url - if link: - # Handle relative file URLs - if link.scheme == 'file' and re.search(r'\.\./', link.url): - link = Link( - path_to_url(os.path.normpath(os.path.abspath(link.path)))) - # wheel file - if link.is_wheel: - wheel = Wheel(link.filename) # can raise InvalidWheelFilename - req = "%s==%s" % (wheel.name, wheel.version) - else: - # set the req to the egg fragment. when it's not there, this - # will become an 'unnamed' requirement - req = link.egg_fragment - - # a requirement specifier - else: - req = name - - if extras: - extras = Requirement("placeholder" + extras.lower()).extras - else: - extras = () - if req is not None: - try: - req = Requirement(req) - except InvalidRequirement: - if os.path.sep in req: - add_msg = "It looks like a path." - add_msg += deduce_helpful_msg(req) - elif '=' in req and not any(op in req for op in operators): - add_msg = "= is not a valid operator. Did you mean == ?" - else: - add_msg = traceback.format_exc() - raise InstallationError( - "Invalid requirement: '%s'\n%s" % (req, add_msg)) - return cls( - req, comes_from, link=link, markers=markers, - isolated=isolated, - options=options if options else {}, - wheel_cache=wheel_cache, - constraint=constraint, - extras=extras, - ) - - def __str__(self): - if self.req: - s = str(self.req) - if self.link: - s += ' from %s' % self.link.url - else: - s = self.link.url if self.link else None - if self.satisfied_by is not None: - s += ' in %s' % display_path(self.satisfied_by.location) - if self.comes_from: - if isinstance(self.comes_from, six.string_types): - comes_from = self.comes_from - else: - comes_from = self.comes_from.from_path() - if comes_from: - s += ' (from %s)' % comes_from - return s - - def __repr__(self): - return '<%s object: %s editable=%r>' % ( - self.__class__.__name__, str(self), self.editable) - - def populate_link(self, finder, upgrade, require_hashes): - """Ensure that if a link can be found for this, that it is found. - - Note that self.link may still be None - if Upgrade is False and the - requirement is already installed. - - If require_hashes is True, don't use the wheel cache, because cached - wheels, always built locally, have different hashes than the files - downloaded from the index server and thus throw false hash mismatches. - Furthermore, cached wheels at present have undeterministic contents due - to file modification times. - """ - if self.link is None: - self.link = finder.find_requirement(self, upgrade) - if self._wheel_cache is not None and not require_hashes: - old_link = self.link - self.link = self._wheel_cache.get(self.link, self.name) - if old_link != self.link: - logger.debug('Using cached wheel link: %s', self.link) - - @property - def specifier(self): - return self.req.specifier - - @property - def is_pinned(self): - """Return whether I am pinned to an exact version. - - For example, some-package==1.2 is pinned; some-package>1.2 is not. - """ - specifiers = self.specifier - return (len(specifiers) == 1 and - next(iter(specifiers)).operator in {'==', '==='}) - - def from_path(self): - if self.req is None: - return None - s = str(self.req) - if self.comes_from: - if isinstance(self.comes_from, six.string_types): - comes_from = self.comes_from - else: - comes_from = self.comes_from.from_path() - if comes_from: - s += '->' + comes_from - return s - - def build_location(self, build_dir): - assert build_dir is not None - if self._temp_build_dir.path is not None: - return self._temp_build_dir.path - if self.req is None: - # for requirement via a path to a directory: the name of the - # package is not available yet so we create a temp directory - # Once run_egg_info will have run, we'll be able - # to fix it via _correct_build_location - # Some systems have /tmp as a symlink which confuses custom - # builds (such as numpy). Thus, we ensure that the real path - # is returned. - self._temp_build_dir.create() - self._ideal_build_dir = build_dir - - return self._temp_build_dir.path - if self.editable: - name = self.name.lower() - else: - name = self.name - # FIXME: Is there a better place to create the build_dir? (hg and bzr - # need this) - if not os.path.exists(build_dir): - logger.debug('Creating directory %s', build_dir) - _make_build_dir(build_dir) - return os.path.join(build_dir, name) - - def _correct_build_location(self): - """Move self._temp_build_dir to self._ideal_build_dir/self.req.name - - For some requirements (e.g. a path to a directory), the name of the - package is not available until we run egg_info, so the build_location - will return a temporary directory and store the _ideal_build_dir. - - This is only called by self.egg_info_path to fix the temporary build - directory. - """ - if self.source_dir is not None: - return - assert self.req is not None - assert self._temp_build_dir.path - assert self._ideal_build_dir.path - old_location = self._temp_build_dir.path - self._temp_build_dir.path = None - - new_location = self.build_location(self._ideal_build_dir) - if os.path.exists(new_location): - raise InstallationError( - 'A package already exists in %s; please remove it to continue' - % display_path(new_location)) - logger.debug( - 'Moving package %s from %s to new location %s', - self, display_path(old_location), display_path(new_location), - ) - shutil.move(old_location, new_location) - self._temp_build_dir.path = new_location - self._ideal_build_dir = None - self.source_dir = os.path.normpath(os.path.abspath(new_location)) - self._egg_info_path = None - - @property - def name(self): - if self.req is None: - return None - return native_str(pkg_resources.safe_name(self.req.name)) - - @property - def setup_py_dir(self): - return os.path.join( - self.source_dir, - self.link and self.link.subdirectory_fragment or '') - - @property - def setup_py(self): - assert self.source_dir, "No source dir for %s" % self - - setup_py = os.path.join(self.setup_py_dir, 'setup.py') - - # Python2 __file__ should not be unicode - if six.PY2 and isinstance(setup_py, six.text_type): - setup_py = setup_py.encode(sys.getfilesystemencoding()) - - return setup_py - - @property - def pyproject_toml(self): - assert self.source_dir, "No source dir for %s" % self - - pp_toml = os.path.join(self.setup_py_dir, 'pyproject.toml') - - # Python2 __file__ should not be unicode - if six.PY2 and isinstance(pp_toml, six.text_type): - pp_toml = pp_toml.encode(sys.getfilesystemencoding()) - - return pp_toml - - def get_pep_518_info(self): - """Get a list of the packages required to build the project, if any, - and a flag indicating whether pyproject.toml is present, indicating - that the build should be isolated. - - Build requirements can be specified in a pyproject.toml, as described - in PEP 518. If this file exists but doesn't specify build - requirements, pip will default to installing setuptools and wheel. - """ - if os.path.isfile(self.pyproject_toml): - with open(self.pyproject_toml) as f: - pp_toml = pytoml.load(f) - build_sys = pp_toml.get('build-system', {}) - return (build_sys.get('requires', ['setuptools', 'wheel']), True) - return (['setuptools', 'wheel'], False) - - def run_egg_info(self): - assert self.source_dir - if self.name: - logger.debug( - 'Running setup.py (path:%s) egg_info for package %s', - self.setup_py, self.name, - ) - else: - logger.debug( - 'Running setup.py (path:%s) egg_info for package from %s', - self.setup_py, self.link, - ) - - with indent_log(): - script = SETUPTOOLS_SHIM % self.setup_py - base_cmd = [sys.executable, '-c', script] - if self.isolated: - base_cmd += ["--no-user-cfg"] - egg_info_cmd = base_cmd + ['egg_info'] - # We can't put the .egg-info files at the root, because then the - # source code will be mistaken for an installed egg, causing - # problems - if self.editable: - egg_base_option = [] - else: - egg_info_dir = os.path.join(self.setup_py_dir, 'pip-egg-info') - ensure_dir(egg_info_dir) - egg_base_option = ['--egg-base', 'pip-egg-info'] - with self.build_env: - call_subprocess( - egg_info_cmd + egg_base_option, - cwd=self.setup_py_dir, - show_stdout=False, - command_desc='python setup.py egg_info') - - if not self.req: - if isinstance(parse_version(self.pkg_info()["Version"]), Version): - op = "==" - else: - op = "===" - self.req = Requirement( - "".join([ - self.pkg_info()["Name"], - op, - self.pkg_info()["Version"], - ]) - ) - self._correct_build_location() - else: - metadata_name = canonicalize_name(self.pkg_info()["Name"]) - if canonicalize_name(self.req.name) != metadata_name: - logger.warning( - 'Running setup.py (path:%s) egg_info for package %s ' - 'produced metadata for project name %s. Fix your ' - '#egg=%s fragments.', - self.setup_py, self.name, metadata_name, self.name - ) - self.req = Requirement(metadata_name) - - def egg_info_data(self, filename): - if self.satisfied_by is not None: - if not self.satisfied_by.has_metadata(filename): - return None - return self.satisfied_by.get_metadata(filename) - assert self.source_dir - filename = self.egg_info_path(filename) - if not os.path.exists(filename): - return None - data = read_text_file(filename) - return data - - def egg_info_path(self, filename): - if self._egg_info_path is None: - if self.editable: - base = self.source_dir - else: - base = os.path.join(self.setup_py_dir, 'pip-egg-info') - filenames = os.listdir(base) - if self.editable: - filenames = [] - for root, dirs, files in os.walk(base): - for dir in vcs.dirnames: - if dir in dirs: - dirs.remove(dir) - # Iterate over a copy of ``dirs``, since mutating - # a list while iterating over it can cause trouble. - # (See https://github.com/pypa/pip/pull/462.) - for dir in list(dirs): - # Don't search in anything that looks like a virtualenv - # environment - if ( - os.path.lexists( - os.path.join(root, dir, 'bin', 'python') - ) or - os.path.exists( - os.path.join( - root, dir, 'Scripts', 'Python.exe' - ) - )): - dirs.remove(dir) - # Also don't search through tests - elif dir == 'test' or dir == 'tests': - dirs.remove(dir) - filenames.extend([os.path.join(root, dir) - for dir in dirs]) - filenames = [f for f in filenames if f.endswith('.egg-info')] - - if not filenames: - raise InstallationError( - 'No files/directories in %s (from %s)' % (base, filename) - ) - assert filenames, \ - "No files/directories in %s (from %s)" % (base, filename) - - # if we have more than one match, we pick the toplevel one. This - # can easily be the case if there is a dist folder which contains - # an extracted tarball for testing purposes. - if len(filenames) > 1: - filenames.sort( - key=lambda x: x.count(os.path.sep) + - (os.path.altsep and x.count(os.path.altsep) or 0) - ) - self._egg_info_path = os.path.join(base, filenames[0]) - return os.path.join(self._egg_info_path, filename) - - def pkg_info(self): - p = FeedParser() - data = self.egg_info_data('PKG-INFO') - if not data: - logger.warning( - 'No PKG-INFO file found in %s', - display_path(self.egg_info_path('PKG-INFO')), - ) - p.feed(data or '') - return p.close() - - _requirements_section_re = re.compile(r'\[(.*?)\]') - - @property - def installed_version(self): - return get_installed_version(self.name) - - def assert_source_matches_version(self): - assert self.source_dir - version = self.pkg_info()['version'] - if self.req.specifier and version not in self.req.specifier: - logger.warning( - 'Requested %s, but installing version %s', - self, - version, - ) - else: - logger.debug( - 'Source in %s has version %s, which satisfies requirement %s', - display_path(self.source_dir), - version, - self, - ) - - def update_editable(self, obtain=True): - if not self.link: - logger.debug( - "Cannot update repository at %s; repository location is " - "unknown", - self.source_dir, - ) - return - assert self.editable - assert self.source_dir - if self.link.scheme == 'file': - # Static paths don't get updated - return - assert '+' in self.link.url, "bad url: %r" % self.link.url - if not self.update: - return - vc_type, url = self.link.url.split('+', 1) - backend = vcs.get_backend(vc_type) - if backend: - vcs_backend = backend(self.link.url) - if obtain: - vcs_backend.obtain(self.source_dir) - else: - vcs_backend.export(self.source_dir) - else: - assert 0, ( - 'Unexpected version control type (in %s): %s' - % (self.link, vc_type)) - - def uninstall(self, auto_confirm=False, verbose=False, - use_user_site=False): - """ - Uninstall the distribution currently satisfying this requirement. - - Prompts before removing or modifying files unless - ``auto_confirm`` is True. - - Refuses to delete or modify files outside of ``sys.prefix`` - - thus uninstallation within a virtual environment can only - modify that virtual environment, even if the virtualenv is - linked to global site-packages. - - """ - if not self.check_if_exists(use_user_site): - logger.warning("Skipping %s as it is not installed.", self.name) - return - dist = self.satisfied_by or self.conflicts_with - - uninstalled_pathset = UninstallPathSet.from_dist(dist) - uninstalled_pathset.remove(auto_confirm, verbose) - return uninstalled_pathset - - def archive(self, build_dir): - assert self.source_dir - create_archive = True - archive_name = '%s-%s.zip' % (self.name, self.pkg_info()["version"]) - archive_path = os.path.join(build_dir, archive_name) - if os.path.exists(archive_path): - response = ask_path_exists( - 'The file %s exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ' % - display_path(archive_path), ('i', 'w', 'b', 'a')) - if response == 'i': - create_archive = False - elif response == 'w': - logger.warning('Deleting %s', display_path(archive_path)) - os.remove(archive_path) - elif response == 'b': - dest_file = backup_dir(archive_path) - logger.warning( - 'Backing up %s to %s', - display_path(archive_path), - display_path(dest_file), - ) - shutil.move(archive_path, dest_file) - elif response == 'a': - sys.exit(-1) - if create_archive: - zip = zipfile.ZipFile( - archive_path, 'w', zipfile.ZIP_DEFLATED, - allowZip64=True - ) - dir = os.path.normcase(os.path.abspath(self.setup_py_dir)) - for dirpath, dirnames, filenames in os.walk(dir): - if 'pip-egg-info' in dirnames: - dirnames.remove('pip-egg-info') - for dirname in dirnames: - dirname = os.path.join(dirpath, dirname) - name = self._clean_zip_name(dirname, dir) - zipdir = zipfile.ZipInfo(self.name + '/' + name + '/') - zipdir.external_attr = 0x1ED << 16 # 0o755 - zip.writestr(zipdir, '') - for filename in filenames: - if filename == PIP_DELETE_MARKER_FILENAME: - continue - filename = os.path.join(dirpath, filename) - name = self._clean_zip_name(filename, dir) - zip.write(filename, self.name + '/' + name) - zip.close() - logger.info('Saved %s', display_path(archive_path)) - - def _clean_zip_name(self, name, prefix): - assert name.startswith(prefix + os.path.sep), ( - "name %r doesn't start with prefix %r" % (name, prefix) - ) - name = name[len(prefix) + 1:] - name = name.replace(os.path.sep, '/') - return name - - def match_markers(self, extras_requested=None): - if not extras_requested: - # Provide an extra to safely evaluate the markers - # without matching any extra - extras_requested = ('',) - if self.markers is not None: - return any( - self.markers.evaluate({'extra': extra}) - for extra in extras_requested) - else: - return True - - def install(self, install_options, global_options=None, root=None, - home=None, prefix=None, warn_script_location=True, - use_user_site=False, pycompile=True): - global_options = global_options if global_options is not None else [] - if self.editable: - self.install_editable( - install_options, global_options, prefix=prefix, - ) - return - if self.is_wheel: - version = wheel.wheel_version(self.source_dir) - wheel.check_compatibility(version, self.name) - - self.move_wheel_files( - self.source_dir, root=root, prefix=prefix, home=home, - warn_script_location=warn_script_location, - use_user_site=use_user_site, pycompile=pycompile, - ) - self.install_succeeded = True - return - - # Extend the list of global and install options passed on to - # the setup.py call with the ones from the requirements file. - # Options specified in requirements file override those - # specified on the command line, since the last option given - # to setup.py is the one that is used. - global_options = list(global_options) + \ - self.options.get('global_options', []) - install_options = list(install_options) + \ - self.options.get('install_options', []) - - if self.isolated: - global_options = global_options + ["--no-user-cfg"] - - with TempDirectory(kind="record") as temp_dir: - record_filename = os.path.join(temp_dir.path, 'install-record.txt') - install_args = self.get_install_args( - global_options, record_filename, root, prefix, pycompile, - ) - msg = 'Running setup.py install for %s' % (self.name,) - with open_spinner(msg) as spinner: - with indent_log(): - with self.build_env: - call_subprocess( - install_args + install_options, - cwd=self.setup_py_dir, - show_stdout=False, - spinner=spinner, - ) - - if not os.path.exists(record_filename): - logger.debug('Record file %s not found', record_filename) - return - self.install_succeeded = True - - def prepend_root(path): - if root is None or not os.path.isabs(path): - return path - else: - return change_root(root, path) - - with open(record_filename) as f: - for line in f: - directory = os.path.dirname(line) - if directory.endswith('.egg-info'): - egg_info_dir = prepend_root(directory) - break - else: - logger.warning( - 'Could not find .egg-info directory in install record' - ' for %s', - self, - ) - # FIXME: put the record somewhere - # FIXME: should this be an error? - return - new_lines = [] - with open(record_filename) as f: - for line in f: - filename = line.strip() - if os.path.isdir(filename): - filename += os.path.sep - new_lines.append( - os.path.relpath(prepend_root(filename), egg_info_dir) - ) - new_lines.sort() - ensure_dir(egg_info_dir) - inst_files_path = os.path.join(egg_info_dir, 'installed-files.txt') - with open(inst_files_path, 'w') as f: - f.write('\n'.join(new_lines) + '\n') - - def ensure_has_source_dir(self, parent_dir): - """Ensure that a source_dir is set. - - This will create a temporary build dir if the name of the requirement - isn't known yet. - - :param parent_dir: The ideal pip parent_dir for the source_dir. - Generally src_dir for editables and build_dir for sdists. - :return: self.source_dir - """ - if self.source_dir is None: - self.source_dir = self.build_location(parent_dir) - return self.source_dir - - def get_install_args(self, global_options, record_filename, root, prefix, - pycompile): - install_args = [sys.executable, "-u"] - install_args.append('-c') - install_args.append(SETUPTOOLS_SHIM % self.setup_py) - install_args += list(global_options) + \ - ['install', '--record', record_filename] - install_args += ['--single-version-externally-managed'] - - if root is not None: - install_args += ['--root', root] - if prefix is not None: - install_args += ['--prefix', prefix] - - if pycompile: - install_args += ["--compile"] - else: - install_args += ["--no-compile"] - - if running_under_virtualenv(): - py_ver_str = 'python' + sysconfig.get_python_version() - install_args += ['--install-headers', - os.path.join(sys.prefix, 'include', 'site', - py_ver_str, self.name)] - - return install_args - - def remove_temporary_source(self): - """Remove the source files from this requirement, if they are marked - for deletion""" - if self.source_dir and os.path.exists( - os.path.join(self.source_dir, PIP_DELETE_MARKER_FILENAME)): - logger.debug('Removing source in %s', self.source_dir) - rmtree(self.source_dir) - self.source_dir = None - self._temp_build_dir.cleanup() - self.build_env.cleanup() - - def install_editable(self, install_options, - global_options=(), prefix=None): - logger.info('Running setup.py develop for %s', self.name) - - if self.isolated: - global_options = list(global_options) + ["--no-user-cfg"] - - if prefix: - prefix_param = ['--prefix={}'.format(prefix)] - install_options = list(install_options) + prefix_param - - with indent_log(): - # FIXME: should we do --install-headers here too? - with self.build_env: - call_subprocess( - [ - sys.executable, - '-c', - SETUPTOOLS_SHIM % self.setup_py - ] + - list(global_options) + - ['develop', '--no-deps'] + - list(install_options), - - cwd=self.setup_py_dir, - show_stdout=False, - ) - - self.install_succeeded = True - - def check_if_exists(self, use_user_site): - """Find an installed distribution that satisfies or conflicts - with this requirement, and set self.satisfied_by or - self.conflicts_with appropriately. - """ - if self.req is None: - return False - try: - # get_distribution() will resolve the entire list of requirements - # anyway, and we've already determined that we need the requirement - # in question, so strip the marker so that we don't try to - # evaluate it. - no_marker = Requirement(str(self.req)) - no_marker.marker = None - self.satisfied_by = pkg_resources.get_distribution(str(no_marker)) - if self.editable and self.satisfied_by: - self.conflicts_with = self.satisfied_by - # when installing editables, nothing pre-existing should ever - # satisfy - self.satisfied_by = None - return True - except pkg_resources.DistributionNotFound: - return False - except pkg_resources.VersionConflict: - existing_dist = pkg_resources.get_distribution( - self.req.name - ) - if use_user_site: - if dist_in_usersite(existing_dist): - self.conflicts_with = existing_dist - elif (running_under_virtualenv() and - dist_in_site_packages(existing_dist)): - raise InstallationError( - "Will not install to the user site because it will " - "lack sys.path precedence to %s in %s" % - (existing_dist.project_name, existing_dist.location) - ) - else: - self.conflicts_with = existing_dist - return True - - @property - def is_wheel(self): - return self.link and self.link.is_wheel - - def move_wheel_files(self, wheeldir, root=None, home=None, prefix=None, - warn_script_location=True, use_user_site=False, - pycompile=True): - move_wheel_files( - self.name, self.req, wheeldir, - user=use_user_site, - home=home, - root=root, - prefix=prefix, - pycompile=pycompile, - isolated=self.isolated, - warn_script_location=warn_script_location, - ) - - def get_dist(self): - """Return a pkg_resources.Distribution built from self.egg_info_path""" - egg_info = self.egg_info_path('').rstrip(os.path.sep) - base_dir = os.path.dirname(egg_info) - metadata = pkg_resources.PathMetadata(base_dir, egg_info) - dist_name = os.path.splitext(os.path.basename(egg_info))[0] - return pkg_resources.Distribution( - os.path.dirname(egg_info), - project_name=dist_name, - metadata=metadata, - ) - - @property - def has_hash_options(self): - """Return whether any known-good hashes are specified as options. - - These activate --require-hashes mode; hashes specified as part of a - URL do not. - - """ - return bool(self.options.get('hashes', {})) - - def hashes(self, trust_internet=True): - """Return a hash-comparer that considers my option- and URL-based - hashes to be known-good. - - Hashes in URLs--ones embedded in the requirements file, not ones - downloaded from an index server--are almost peers with ones from - flags. They satisfy --require-hashes (whether it was implicitly or - explicitly activated) but do not activate it. md5 and sha224 are not - allowed in flags, which should nudge people toward good algos. We - always OR all hashes together, even ones from URLs. - - :param trust_internet: Whether to trust URL-based (#md5=...) hashes - downloaded from the internet, as by populate_link() - - """ - good_hashes = self.options.get('hashes', {}).copy() - link = self.link if trust_internet else self.original_link - if link and link.hash: - good_hashes.setdefault(link.hash_name, []).append(link.hash) - return Hashes(good_hashes) - - -def _strip_postfix(req): - """ - Strip req postfix ( -dev, 0.2, etc ) - """ - # FIXME: use package_to_requirement? - match = re.search(r'^(.*?)(?:-dev|-\d.*)$', req) - if match: - # Strip off -dev, -0.2, etc. - warnings.warn( - "#egg cleanup for editable urls will be dropped in the future", - RemovedInPip11Warning, - ) - req = match.group(1) - return req - - -def parse_editable(editable_req): - """Parses an editable requirement into: - - a requirement name - - an URL - - extras - - editable options - Accepted requirements: - svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir - .[some_extra] - """ - - from pip._internal.index import Link - - url = editable_req - - # If a file path is specified with extras, strip off the extras. - url_no_extras, extras = _strip_extras(url) - - if os.path.isdir(url_no_extras): - if not os.path.exists(os.path.join(url_no_extras, 'setup.py')): - raise InstallationError( - "Directory %r is not installable. File 'setup.py' not found." % - url_no_extras - ) - # Treating it as code that has already been checked out - url_no_extras = path_to_url(url_no_extras) - - if url_no_extras.lower().startswith('file:'): - package_name = Link(url_no_extras).egg_fragment - if extras: - return ( - package_name, - url_no_extras, - Requirement("placeholder" + extras.lower()).extras, - ) - else: - return package_name, url_no_extras, None - - for version_control in vcs: - if url.lower().startswith('%s:' % version_control): - url = '%s+%s' % (version_control, url) - break - - if '+' not in url: - raise InstallationError( - '%s should either be a path to a local project or a VCS url ' - 'beginning with svn+, git+, hg+, or bzr+' % - editable_req - ) - - vc_type = url.split('+', 1)[0].lower() - - if not vcs.get_backend(vc_type): - error_message = 'For --editable=%s only ' % editable_req + \ - ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \ - ' is currently supported' - raise InstallationError(error_message) - - package_name = Link(url).egg_fragment - if not package_name: - raise InstallationError( - "Could not detect requirement name for '%s', please specify one " - "with #egg=your_package_name" % editable_req - ) - return _strip_postfix(package_name), url, None - - -def deduce_helpful_msg(req): - """Returns helpful msg in case requirements file does not exist, - or cannot be parsed. - - :params req: Requirements file path - """ - msg = "" - if os.path.exists(req): - msg = " It does exist." - # Try to parse and check if it is a requirements file. - try: - with open(req, 'r') as fp: - # parse first line only - next(parse_requirements(fp.read())) - msg += " The argument you provided " + \ - "(%s) appears to be a" % (req) + \ - " requirements file. If that is the" + \ - " case, use the '-r' flag to install" + \ - " the packages specified within it." - except RequirementParseError: - logger.debug("Cannot parse '%s' as requirements \ - file" % (req), exc_info=1) - else: - msg += " File '%s' does not exist." % (req) - return msg diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_set.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_set.py deleted file mode 100644 index b2b55f8..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_set.py +++ /dev/null @@ -1,164 +0,0 @@ -from __future__ import absolute_import - -import logging -from collections import OrderedDict - -from pip._internal.exceptions import InstallationError -from pip._internal.utils.logging import indent_log -from pip._internal.wheel import Wheel - -logger = logging.getLogger(__name__) - - -class RequirementSet(object): - - def __init__(self, require_hashes=False): - """Create a RequirementSet. - - :param wheel_cache: The pip wheel cache, for passing to - InstallRequirement. - """ - - self.requirements = OrderedDict() - self.require_hashes = require_hashes - - # Mapping of alias: real_name - self.requirement_aliases = {} - self.unnamed_requirements = [] - self.successfully_downloaded = [] - self.reqs_to_cleanup = [] - - def __str__(self): - reqs = [req for req in self.requirements.values() - if not req.comes_from] - reqs.sort(key=lambda req: req.name.lower()) - return ' '.join([str(req.req) for req in reqs]) - - def __repr__(self): - reqs = [req for req in self.requirements.values()] - reqs.sort(key=lambda req: req.name.lower()) - reqs_str = ', '.join([str(req.req) for req in reqs]) - return ('<%s object; %d requirement(s): %s>' - % (self.__class__.__name__, len(reqs), reqs_str)) - - def add_requirement(self, install_req, parent_req_name=None, - extras_requested=None): - """Add install_req as a requirement to install. - - :param parent_req_name: The name of the requirement that needed this - added. The name is used because when multiple unnamed requirements - resolve to the same name, we could otherwise end up with dependency - links that point outside the Requirements set. parent_req must - already be added. Note that None implies that this is a user - supplied requirement, vs an inferred one. - :param extras_requested: an iterable of extras used to evaluate the - environment markers. - :return: Additional requirements to scan. That is either [] if - the requirement is not applicable, or [install_req] if the - requirement is applicable and has just been added. - """ - name = install_req.name - if not install_req.match_markers(extras_requested): - logger.info("Ignoring %s: markers '%s' don't match your " - "environment", install_req.name, - install_req.markers) - return [], None - - # This check has to come after we filter requirements with the - # environment markers. - if install_req.link and install_req.link.is_wheel: - wheel = Wheel(install_req.link.filename) - if not wheel.supported(): - raise InstallationError( - "%s is not a supported wheel on this platform." % - wheel.filename - ) - - # This next bit is really a sanity check. - assert install_req.is_direct == (parent_req_name is None), ( - "a direct req shouldn't have a parent and also, " - "a non direct req should have a parent" - ) - - if not name: - # url or path requirement w/o an egg fragment - self.unnamed_requirements.append(install_req) - return [install_req], None - else: - try: - existing_req = self.get_requirement(name) - except KeyError: - existing_req = None - if (parent_req_name is None and existing_req and not - existing_req.constraint and - existing_req.extras == install_req.extras and not - existing_req.req.specifier == install_req.req.specifier): - raise InstallationError( - 'Double requirement given: %s (already in %s, name=%r)' - % (install_req, existing_req, name)) - if not existing_req: - # Add requirement - self.requirements[name] = install_req - # FIXME: what about other normalizations? E.g., _ vs. -? - if name.lower() != name: - self.requirement_aliases[name.lower()] = name - result = [install_req] - else: - # Assume there's no need to scan, and that we've already - # encountered this for scanning. - result = [] - if not install_req.constraint and existing_req.constraint: - if (install_req.link and not (existing_req.link and - install_req.link.path == existing_req.link.path)): - self.reqs_to_cleanup.append(install_req) - raise InstallationError( - "Could not satisfy constraints for '%s': " - "installation from path or url cannot be " - "constrained to a version" % name, - ) - # If we're now installing a constraint, mark the existing - # object for real installation. - existing_req.constraint = False - existing_req.extras = tuple( - sorted(set(existing_req.extras).union( - set(install_req.extras)))) - logger.debug("Setting %s extras to: %s", - existing_req, existing_req.extras) - # And now we need to scan this. - result = [existing_req] - # Canonicalise to the already-added object for the backref - # check below. - install_req = existing_req - - # We return install_req here to allow for the caller to add it to - # the dependency information for the parent package. - return result, install_req - - def has_requirement(self, project_name): - name = project_name.lower() - if (name in self.requirements and - not self.requirements[name].constraint or - name in self.requirement_aliases and - not self.requirements[self.requirement_aliases[name]].constraint): - return True - return False - - @property - def has_requirements(self): - return list(req for req in self.requirements.values() if not - req.constraint) or self.unnamed_requirements - - def get_requirement(self, project_name): - for name in project_name, project_name.lower(): - if name in self.requirements: - return self.requirements[name] - if name in self.requirement_aliases: - return self.requirements[self.requirement_aliases[name]] - raise KeyError("No project with the name %r" % project_name) - - def cleanup_files(self): - """Clean up files, remove builds.""" - logger.debug('Cleaning up...') - with indent_log(): - for req in self.reqs_to_cleanup: - req.remove_temporary_source() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_uninstall.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_uninstall.py deleted file mode 100644 index a3cc7bf..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/req/req_uninstall.py +++ /dev/null @@ -1,455 +0,0 @@ -from __future__ import absolute_import - -import csv -import functools -import logging -import os -import sys -import sysconfig - -from pip._vendor import pkg_resources - -from pip._internal.compat import WINDOWS, cache_from_source, uses_pycache -from pip._internal.exceptions import UninstallationError -from pip._internal.locations import bin_py, bin_user -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - FakeFile, ask, dist_in_usersite, dist_is_local, egg_link_path, is_local, - normalize_path, renames, -) -from pip._internal.utils.temp_dir import TempDirectory - -logger = logging.getLogger(__name__) - - -def _script_names(dist, script_name, is_gui): - """Create the fully qualified name of the files created by - {console,gui}_scripts for the given ``dist``. - Returns the list of file names - """ - if dist_in_usersite(dist): - bin_dir = bin_user - else: - bin_dir = bin_py - exe_name = os.path.join(bin_dir, script_name) - paths_to_remove = [exe_name] - if WINDOWS: - paths_to_remove.append(exe_name + '.exe') - paths_to_remove.append(exe_name + '.exe.manifest') - if is_gui: - paths_to_remove.append(exe_name + '-script.pyw') - else: - paths_to_remove.append(exe_name + '-script.py') - return paths_to_remove - - -def _unique(fn): - @functools.wraps(fn) - def unique(*args, **kw): - seen = set() - for item in fn(*args, **kw): - if item not in seen: - seen.add(item) - yield item - return unique - - -@_unique -def uninstallation_paths(dist): - """ - Yield all the uninstallation paths for dist based on RECORD-without-.pyc - - Yield paths to all the files in RECORD. For each .py file in RECORD, add - the .pyc in the same directory. - - UninstallPathSet.add() takes care of the __pycache__ .pyc. - """ - r = csv.reader(FakeFile(dist.get_metadata_lines('RECORD'))) - for row in r: - path = os.path.join(dist.location, row[0]) - yield path - if path.endswith('.py'): - dn, fn = os.path.split(path) - base = fn[:-3] - path = os.path.join(dn, base + '.pyc') - yield path - - -def compact(paths): - """Compact a path set to contain the minimal number of paths - necessary to contain all paths in the set. If /a/path/ and - /a/path/to/a/file.txt are both in the set, leave only the - shorter path.""" - - sep = os.path.sep - short_paths = set() - for path in sorted(paths, key=len): - should_add = any( - path.startswith(shortpath.rstrip("*")) and - path[len(shortpath.rstrip("*").rstrip(sep))] == sep - for shortpath in short_paths - ) - if not should_add: - short_paths.add(path) - return short_paths - - -def compress_for_output_listing(paths): - """Returns a tuple of 2 sets of which paths to display to user - - The first set contains paths that would be deleted. Files of a package - are not added and the top-level directory of the package has a '*' added - at the end - to signify that all it's contents are removed. - - The second set contains files that would have been skipped in the above - folders. - """ - - will_remove = list(paths) - will_skip = set() - - # Determine folders and files - folders = set() - files = set() - for path in will_remove: - if path.endswith(".pyc"): - continue - if path.endswith("__init__.py") or ".dist-info" in path: - folders.add(os.path.dirname(path)) - files.add(path) - - folders = compact(folders) - - # This walks the tree using os.walk to not miss extra folders - # that might get added. - for folder in folders: - for dirpath, _, dirfiles in os.walk(folder): - for fname in dirfiles: - if fname.endswith(".pyc"): - continue - - file_ = os.path.normcase(os.path.join(dirpath, fname)) - if os.path.isfile(file_) and file_ not in files: - # We are skipping this file. Add it to the set. - will_skip.add(file_) - - will_remove = files | { - os.path.join(folder, "*") for folder in folders - } - - return will_remove, will_skip - - -class UninstallPathSet(object): - """A set of file paths to be removed in the uninstallation of a - requirement.""" - def __init__(self, dist): - self.paths = set() - self._refuse = set() - self.pth = {} - self.dist = dist - self.save_dir = TempDirectory(kind="uninstall") - self._moved_paths = [] - - def _permitted(self, path): - """ - Return True if the given path is one we are permitted to - remove/modify, False otherwise. - - """ - return is_local(path) - - def add(self, path): - head, tail = os.path.split(path) - - # we normalize the head to resolve parent directory symlinks, but not - # the tail, since we only want to uninstall symlinks, not their targets - path = os.path.join(normalize_path(head), os.path.normcase(tail)) - - if not os.path.exists(path): - return - if self._permitted(path): - self.paths.add(path) - else: - self._refuse.add(path) - - # __pycache__ files can show up after 'installed-files.txt' is created, - # due to imports - if os.path.splitext(path)[1] == '.py' and uses_pycache: - self.add(cache_from_source(path)) - - def add_pth(self, pth_file, entry): - pth_file = normalize_path(pth_file) - if self._permitted(pth_file): - if pth_file not in self.pth: - self.pth[pth_file] = UninstallPthEntries(pth_file) - self.pth[pth_file].add(entry) - else: - self._refuse.add(pth_file) - - def _stash(self, path): - return os.path.join( - self.save_dir.path, os.path.splitdrive(path)[1].lstrip(os.path.sep) - ) - - def remove(self, auto_confirm=False, verbose=False): - """Remove paths in ``self.paths`` with confirmation (unless - ``auto_confirm`` is True).""" - - if not self.paths: - logger.info( - "Can't uninstall '%s'. No files were found to uninstall.", - self.dist.project_name, - ) - return - - dist_name_version = ( - self.dist.project_name + "-" + self.dist.version - ) - logger.info('Uninstalling %s:', dist_name_version) - - with indent_log(): - if auto_confirm or self._allowed_to_proceed(verbose): - self.save_dir.create() - - for path in sorted(compact(self.paths)): - new_path = self._stash(path) - logger.debug('Removing file or directory %s', path) - self._moved_paths.append(path) - renames(path, new_path) - for pth in self.pth.values(): - pth.remove() - - logger.info('Successfully uninstalled %s', dist_name_version) - - def _allowed_to_proceed(self, verbose): - """Display which files would be deleted and prompt for confirmation - """ - - def _display(msg, paths): - if not paths: - return - - logger.info(msg) - with indent_log(): - for path in sorted(compact(paths)): - logger.info(path) - - if not verbose: - will_remove, will_skip = compress_for_output_listing(self.paths) - else: - # In verbose mode, display all the files that are going to be - # deleted. - will_remove = list(self.paths) - will_skip = set() - - _display('Would remove:', will_remove) - _display('Would not remove (might be manually added):', will_skip) - _display('Would not remove (outside of prefix):', self._refuse) - - return ask('Proceed (y/n)? ', ('y', 'n')) == 'y' - - def rollback(self): - """Rollback the changes previously made by remove().""" - if self.save_dir.path is None: - logger.error( - "Can't roll back %s; was not uninstalled", - self.dist.project_name, - ) - return False - logger.info('Rolling back uninstall of %s', self.dist.project_name) - for path in self._moved_paths: - tmp_path = self._stash(path) - logger.debug('Replacing %s', path) - renames(tmp_path, path) - for pth in self.pth.values(): - pth.rollback() - - def commit(self): - """Remove temporary save dir: rollback will no longer be possible.""" - self.save_dir.cleanup() - self._moved_paths = [] - - @classmethod - def from_dist(cls, dist): - dist_path = normalize_path(dist.location) - if not dist_is_local(dist): - logger.info( - "Not uninstalling %s at %s, outside environment %s", - dist.key, - dist_path, - sys.prefix, - ) - return cls(dist) - - if dist_path in {p for p in {sysconfig.get_path("stdlib"), - sysconfig.get_path("platstdlib")} - if p}: - logger.info( - "Not uninstalling %s at %s, as it is in the standard library.", - dist.key, - dist_path, - ) - return cls(dist) - - paths_to_remove = cls(dist) - develop_egg_link = egg_link_path(dist) - develop_egg_link_egg_info = '{}.egg-info'.format( - pkg_resources.to_filename(dist.project_name)) - egg_info_exists = dist.egg_info and os.path.exists(dist.egg_info) - # Special case for distutils installed package - distutils_egg_info = getattr(dist._provider, 'path', None) - - # Uninstall cases order do matter as in the case of 2 installs of the - # same package, pip needs to uninstall the currently detected version - if (egg_info_exists and dist.egg_info.endswith('.egg-info') and - not dist.egg_info.endswith(develop_egg_link_egg_info)): - # if dist.egg_info.endswith(develop_egg_link_egg_info), we - # are in fact in the develop_egg_link case - paths_to_remove.add(dist.egg_info) - if dist.has_metadata('installed-files.txt'): - for installed_file in dist.get_metadata( - 'installed-files.txt').splitlines(): - path = os.path.normpath( - os.path.join(dist.egg_info, installed_file) - ) - paths_to_remove.add(path) - # FIXME: need a test for this elif block - # occurs with --single-version-externally-managed/--record outside - # of pip - elif dist.has_metadata('top_level.txt'): - if dist.has_metadata('namespace_packages.txt'): - namespaces = dist.get_metadata('namespace_packages.txt') - else: - namespaces = [] - for top_level_pkg in [ - p for p - in dist.get_metadata('top_level.txt').splitlines() - if p and p not in namespaces]: - path = os.path.join(dist.location, top_level_pkg) - paths_to_remove.add(path) - paths_to_remove.add(path + '.py') - paths_to_remove.add(path + '.pyc') - paths_to_remove.add(path + '.pyo') - - elif distutils_egg_info: - raise UninstallationError( - "Cannot uninstall {!r}. It is a distutils installed project " - "and thus we cannot accurately determine which files belong " - "to it which would lead to only a partial uninstall.".format( - dist.project_name, - ) - ) - - elif dist.location.endswith('.egg'): - # package installed by easy_install - # We cannot match on dist.egg_name because it can slightly vary - # i.e. setuptools-0.6c11-py2.6.egg vs setuptools-0.6rc11-py2.6.egg - paths_to_remove.add(dist.location) - easy_install_egg = os.path.split(dist.location)[1] - easy_install_pth = os.path.join(os.path.dirname(dist.location), - 'easy-install.pth') - paths_to_remove.add_pth(easy_install_pth, './' + easy_install_egg) - - elif egg_info_exists and dist.egg_info.endswith('.dist-info'): - for path in uninstallation_paths(dist): - paths_to_remove.add(path) - - elif develop_egg_link: - # develop egg - with open(develop_egg_link, 'r') as fh: - link_pointer = os.path.normcase(fh.readline().strip()) - assert (link_pointer == dist.location), ( - 'Egg-link %s does not match installed location of %s ' - '(at %s)' % (link_pointer, dist.project_name, dist.location) - ) - paths_to_remove.add(develop_egg_link) - easy_install_pth = os.path.join(os.path.dirname(develop_egg_link), - 'easy-install.pth') - paths_to_remove.add_pth(easy_install_pth, dist.location) - - else: - logger.debug( - 'Not sure how to uninstall: %s - Check: %s', - dist, dist.location, - ) - - # find distutils scripts= scripts - if dist.has_metadata('scripts') and dist.metadata_isdir('scripts'): - for script in dist.metadata_listdir('scripts'): - if dist_in_usersite(dist): - bin_dir = bin_user - else: - bin_dir = bin_py - paths_to_remove.add(os.path.join(bin_dir, script)) - if WINDOWS: - paths_to_remove.add(os.path.join(bin_dir, script) + '.bat') - - # find console_scripts - _scripts_to_remove = [] - console_scripts = dist.get_entry_map(group='console_scripts') - for name in console_scripts.keys(): - _scripts_to_remove.extend(_script_names(dist, name, False)) - # find gui_scripts - gui_scripts = dist.get_entry_map(group='gui_scripts') - for name in gui_scripts.keys(): - _scripts_to_remove.extend(_script_names(dist, name, True)) - - for s in _scripts_to_remove: - paths_to_remove.add(s) - - return paths_to_remove - - -class UninstallPthEntries(object): - def __init__(self, pth_file): - if not os.path.isfile(pth_file): - raise UninstallationError( - "Cannot remove entries from nonexistent file %s" % pth_file - ) - self.file = pth_file - self.entries = set() - self._saved_lines = None - - def add(self, entry): - entry = os.path.normcase(entry) - # On Windows, os.path.normcase converts the entry to use - # backslashes. This is correct for entries that describe absolute - # paths outside of site-packages, but all the others use forward - # slashes. - if WINDOWS and not os.path.splitdrive(entry)[0]: - entry = entry.replace('\\', '/') - self.entries.add(entry) - - def remove(self): - logger.debug('Removing pth entries from %s:', self.file) - with open(self.file, 'rb') as fh: - # windows uses '\r\n' with py3k, but uses '\n' with py2.x - lines = fh.readlines() - self._saved_lines = lines - if any(b'\r\n' in line for line in lines): - endline = '\r\n' - else: - endline = '\n' - # handle missing trailing newline - if lines and not lines[-1].endswith(endline.encode("utf-8")): - lines[-1] = lines[-1] + endline.encode("utf-8") - for entry in self.entries: - try: - logger.debug('Removing entry: %s', entry) - lines.remove((entry + endline).encode("utf-8")) - except ValueError: - pass - with open(self.file, 'wb') as fh: - fh.writelines(lines) - - def rollback(self): - if self._saved_lines is None: - logger.error( - 'Cannot roll back changes to %s, none were made', self.file - ) - return False - logger.debug('Rolling %s back to previous state', self.file) - with open(self.file, 'wb') as fh: - fh.writelines(self._saved_lines) - return True diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/resolve.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/resolve.py deleted file mode 100644 index 3200fca..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/resolve.py +++ /dev/null @@ -1,354 +0,0 @@ -"""Dependency Resolution - -The dependency resolution in pip is performed as follows: - -for top-level requirements: - a. only one spec allowed per project, regardless of conflicts or not. - otherwise a "double requirement" exception is raised - b. they override sub-dependency requirements. -for sub-dependencies - a. "first found, wins" (where the order is breadth first) -""" - -import logging -from collections import defaultdict -from itertools import chain - -from pip._internal.exceptions import ( - BestVersionAlreadyInstalled, DistributionNotFound, HashError, HashErrors, - UnsupportedPythonVersion, -) - -from pip._internal.req.req_install import InstallRequirement -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import dist_in_usersite, ensure_dir -from pip._internal.utils.packaging import check_dist_requires_python - -logger = logging.getLogger(__name__) - - -class Resolver(object): - """Resolves which packages need to be installed/uninstalled to perform \ - the requested operation without breaking the requirements of any package. - """ - - _allowed_strategies = {"eager", "only-if-needed", "to-satisfy-only"} - - def __init__(self, preparer, session, finder, wheel_cache, use_user_site, - ignore_dependencies, ignore_installed, ignore_requires_python, - force_reinstall, isolated, upgrade_strategy): - super(Resolver, self).__init__() - assert upgrade_strategy in self._allowed_strategies - - self.preparer = preparer - self.finder = finder - self.session = session - - # NOTE: This would eventually be replaced with a cache that can give - # information about both sdist and wheels transparently. - self.wheel_cache = wheel_cache - - self.require_hashes = None # This is set in resolve - - self.upgrade_strategy = upgrade_strategy - self.force_reinstall = force_reinstall - self.isolated = isolated - self.ignore_dependencies = ignore_dependencies - self.ignore_installed = ignore_installed - self.ignore_requires_python = ignore_requires_python - self.use_user_site = use_user_site - - self._discovered_dependencies = defaultdict(list) - - def resolve(self, requirement_set): - """Resolve what operations need to be done - - As a side-effect of this method, the packages (and their dependencies) - are downloaded, unpacked and prepared for installation. This - preparation is done by ``pip.operations.prepare``. - - Once PyPI has static dependency metadata available, it would be - possible to move the preparation to become a step separated from - dependency resolution. - """ - # make the wheelhouse - if self.preparer.wheel_download_dir: - ensure_dir(self.preparer.wheel_download_dir) - - # If any top-level requirement has a hash specified, enter - # hash-checking mode, which requires hashes from all. - root_reqs = ( - requirement_set.unnamed_requirements + - list(requirement_set.requirements.values()) - ) - self.require_hashes = ( - requirement_set.require_hashes or - any(req.has_hash_options for req in root_reqs) - ) - - # Display where finder is looking for packages - locations = self.finder.get_formatted_locations() - if locations: - logger.info(locations) - - # Actually prepare the files, and collect any exceptions. Most hash - # exceptions cannot be checked ahead of time, because - # req.populate_link() needs to be called before we can make decisions - # based on link type. - discovered_reqs = [] - hash_errors = HashErrors() - for req in chain(root_reqs, discovered_reqs): - try: - discovered_reqs.extend( - self._resolve_one(requirement_set, req) - ) - except HashError as exc: - exc.req = req - hash_errors.append(exc) - - if hash_errors: - raise hash_errors - - def _is_upgrade_allowed(self, req): - if self.upgrade_strategy == "to-satisfy-only": - return False - elif self.upgrade_strategy == "eager": - return True - else: - assert self.upgrade_strategy == "only-if-needed" - return req.is_direct - - def _set_req_to_reinstall(self, req): - """ - Set a requirement to be installed. - """ - # Don't uninstall the conflict if doing a user install and the - # conflict is not a user install. - if not self.use_user_site or dist_in_usersite(req.satisfied_by): - req.conflicts_with = req.satisfied_by - req.satisfied_by = None - - # XXX: Stop passing requirement_set for options - def _check_skip_installed(self, req_to_install): - """Check if req_to_install should be skipped. - - This will check if the req is installed, and whether we should upgrade - or reinstall it, taking into account all the relevant user options. - - After calling this req_to_install will only have satisfied_by set to - None if the req_to_install is to be upgraded/reinstalled etc. Any - other value will be a dist recording the current thing installed that - satisfies the requirement. - - Note that for vcs urls and the like we can't assess skipping in this - routine - we simply identify that we need to pull the thing down, - then later on it is pulled down and introspected to assess upgrade/ - reinstalls etc. - - :return: A text reason for why it was skipped, or None. - """ - if self.ignore_installed: - return None - - req_to_install.check_if_exists(self.use_user_site) - if not req_to_install.satisfied_by: - return None - - if self.force_reinstall: - self._set_req_to_reinstall(req_to_install) - return None - - if not self._is_upgrade_allowed(req_to_install): - if self.upgrade_strategy == "only-if-needed": - return 'not upgraded as not directly required' - return 'already satisfied' - - # Check for the possibility of an upgrade. For link-based - # requirements we have to pull the tree down and inspect to assess - # the version #, so it's handled way down. - if not req_to_install.link: - try: - self.finder.find_requirement(req_to_install, upgrade=True) - except BestVersionAlreadyInstalled: - # Then the best version is installed. - return 'already up-to-date' - except DistributionNotFound: - # No distribution found, so we squash the error. It will - # be raised later when we re-try later to do the install. - # Why don't we just raise here? - pass - - self._set_req_to_reinstall(req_to_install) - return None - - def _get_abstract_dist_for(self, req): - """Takes a InstallRequirement and returns a single AbstractDist \ - representing a prepared variant of the same. - """ - assert self.require_hashes is not None, ( - "require_hashes should have been set in Resolver.resolve()" - ) - - if req.editable: - return self.preparer.prepare_editable_requirement( - req, self.require_hashes, self.use_user_site, self.finder, - ) - - # satisfied_by is only evaluated by calling _check_skip_installed, - # so it must be None here. - assert req.satisfied_by is None - skip_reason = self._check_skip_installed(req) - - if req.satisfied_by: - return self.preparer.prepare_installed_requirement( - req, self.require_hashes, skip_reason - ) - - upgrade_allowed = self._is_upgrade_allowed(req) - abstract_dist = self.preparer.prepare_linked_requirement( - req, self.session, self.finder, upgrade_allowed, - self.require_hashes - ) - - # NOTE - # The following portion is for determining if a certain package is - # going to be re-installed/upgraded or not and reporting to the user. - # This should probably get cleaned up in a future refactor. - - # req.req is only avail after unpack for URL - # pkgs repeat check_if_exists to uninstall-on-upgrade - # (#14) - if not self.ignore_installed: - req.check_if_exists(self.use_user_site) - - if req.satisfied_by: - should_modify = ( - self.upgrade_strategy != "to-satisfy-only" or - self.force_reinstall or - self.ignore_installed or - req.link.scheme == 'file' - ) - if should_modify: - self._set_req_to_reinstall(req) - else: - logger.info( - 'Requirement already satisfied (use --upgrade to upgrade):' - ' %s', req, - ) - - return abstract_dist - - def _resolve_one(self, requirement_set, req_to_install): - """Prepare a single requirements file. - - :return: A list of additional InstallRequirements to also install. - """ - # Tell user what we are doing for this requirement: - # obtain (editable), skipping, processing (local url), collecting - # (remote url or package name) - if req_to_install.constraint or req_to_install.prepared: - return [] - - req_to_install.prepared = True - - # register tmp src for cleanup in case something goes wrong - requirement_set.reqs_to_cleanup.append(req_to_install) - - abstract_dist = self._get_abstract_dist_for(req_to_install) - - # Parse and return dependencies - dist = abstract_dist.dist(self.finder) - try: - check_dist_requires_python(dist) - except UnsupportedPythonVersion as err: - if self.ignore_requires_python: - logger.warning(err.args[0]) - else: - raise - - more_reqs = [] - - def add_req(subreq, extras_requested): - sub_install_req = InstallRequirement.from_req( - str(subreq), - req_to_install, - isolated=self.isolated, - wheel_cache=self.wheel_cache, - ) - parent_req_name = req_to_install.name - to_scan_again, add_to_parent = requirement_set.add_requirement( - sub_install_req, - parent_req_name=parent_req_name, - extras_requested=extras_requested, - ) - if parent_req_name and add_to_parent: - self._discovered_dependencies[parent_req_name].append( - add_to_parent - ) - more_reqs.extend(to_scan_again) - - with indent_log(): - # We add req_to_install before its dependencies, so that we - # can refer to it when adding dependencies. - if not requirement_set.has_requirement(req_to_install.name): - # 'unnamed' requirements will get added here - req_to_install.is_direct = True - requirement_set.add_requirement( - req_to_install, parent_req_name=None, - ) - - if not self.ignore_dependencies: - if req_to_install.extras: - logger.debug( - "Installing extra requirements: %r", - ','.join(req_to_install.extras), - ) - missing_requested = sorted( - set(req_to_install.extras) - set(dist.extras) - ) - for missing in missing_requested: - logger.warning( - '%s does not provide the extra \'%s\'', - dist, missing - ) - - available_requested = sorted( - set(dist.extras) & set(req_to_install.extras) - ) - for subreq in dist.requires(available_requested): - add_req(subreq, extras_requested=available_requested) - - if not req_to_install.editable and not req_to_install.satisfied_by: - # XXX: --no-install leads this to report 'Successfully - # downloaded' for only non-editable reqs, even though we took - # action on them. - requirement_set.successfully_downloaded.append(req_to_install) - - return more_reqs - - def get_installation_order(self, req_set): - """Create the installation order. - - The installation order is topological - requirements are installed - before the requiring thing. We break cycles at an arbitrary point, - and make no other guarantees. - """ - # The current implementation, which we may change at any point - # installs the user specified things in the order given, except when - # dependencies must come earlier to achieve topological order. - order = [] - ordered_reqs = set() - - def schedule(req): - if req.satisfied_by or req in ordered_reqs: - return - if req.constraint: - return - ordered_reqs.add(req) - for dep in self._discovered_dependencies[req.name]: - schedule(dep) - order.append(req) - - for install_req in req_set.requirements.values(): - schedule(install_req) - return order diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/status_codes.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/status_codes.py deleted file mode 100644 index 275360a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/status_codes.py +++ /dev/null @@ -1,8 +0,0 @@ -from __future__ import absolute_import - -SUCCESS = 0 -ERROR = 1 -UNKNOWN_ERROR = 2 -VIRTUALENV_NOT_FOUND = 3 -PREVIOUS_BUILD_DIR_ERROR = 4 -NO_MATCHES_FOUND = 23 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/appdirs.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/appdirs.py deleted file mode 100644 index 28c5d4b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/appdirs.py +++ /dev/null @@ -1,258 +0,0 @@ -""" -This code was taken from https://github.com/ActiveState/appdirs and modified -to suit our purposes. -""" -from __future__ import absolute_import - -import os -import sys - -from pip._vendor.six import PY2, text_type - -from pip._internal.compat import WINDOWS, expanduser - - -def user_cache_dir(appname): - r""" - Return full path to the user-specific cache dir for this application. - - "appname" is the name of application. - - Typical user cache directories are: - macOS: ~/Library/Caches/ - Unix: ~/.cache/ (XDG default) - Windows: C:\Users\\AppData\Local\\Cache - - On Windows the only suggestion in the MSDN docs is that local settings go - in the `CSIDL_LOCAL_APPDATA` directory. This is identical to the - non-roaming app data dir (the default returned by `user_data_dir`). Apps - typically put cache data somewhere *under* the given dir here. Some - examples: - ...\Mozilla\Firefox\Profiles\\Cache - ...\Acme\SuperApp\Cache\1.0 - - OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. - """ - if WINDOWS: - # Get the base path - path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) - - # When using Python 2, return paths as bytes on Windows like we do on - # other operating systems. See helper function docs for more details. - if PY2 and isinstance(path, text_type): - path = _win_path_to_bytes(path) - - # Add our app name and Cache directory to it - path = os.path.join(path, appname, "Cache") - elif sys.platform == "darwin": - # Get the base path - path = expanduser("~/Library/Caches") - - # Add our app name to it - path = os.path.join(path, appname) - else: - # Get the base path - path = os.getenv("XDG_CACHE_HOME", expanduser("~/.cache")) - - # Add our app name to it - path = os.path.join(path, appname) - - return path - - -def user_data_dir(appname, roaming=False): - r""" - Return full path to the user-specific data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "roaming" (boolean, default False) can be set True to use the Windows - roaming appdata directory. That means that for users on a Windows - network setup for roaming profiles, this user data will be - sync'd on login. See - - for a discussion of issues. - - Typical user data directories are: - macOS: ~/Library/Application Support/ - if it exists, else ~/.config/ - Unix: ~/.local/share/ # or in - $XDG_DATA_HOME, if defined - Win XP (not roaming): C:\Documents and Settings\\ ... - ...Application Data\ - Win XP (roaming): C:\Documents and Settings\\Local ... - ...Settings\Application Data\ - Win 7 (not roaming): C:\\Users\\AppData\Local\ - Win 7 (roaming): C:\\Users\\AppData\Roaming\ - - For Unix, we follow the XDG spec and support $XDG_DATA_HOME. - That means, by default "~/.local/share/". - """ - if WINDOWS: - const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" - path = os.path.join(os.path.normpath(_get_win_folder(const)), appname) - elif sys.platform == "darwin": - path = os.path.join( - expanduser('~/Library/Application Support/'), - appname, - ) if os.path.isdir(os.path.join( - expanduser('~/Library/Application Support/'), - appname, - ) - ) else os.path.join( - expanduser('~/.config/'), - appname, - ) - else: - path = os.path.join( - os.getenv('XDG_DATA_HOME', expanduser("~/.local/share")), - appname, - ) - - return path - - -def user_config_dir(appname, roaming=True): - """Return full path to the user-specific config dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "roaming" (boolean, default True) can be set False to not use the - Windows roaming appdata directory. That means that for users on a - Windows network setup for roaming profiles, this user data will be - sync'd on login. See - - for a discussion of issues. - - Typical user data directories are: - macOS: same as user_data_dir - Unix: ~/.config/ - Win *: same as user_data_dir - - For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. - That means, by default "~/.config/". - """ - if WINDOWS: - path = user_data_dir(appname, roaming=roaming) - elif sys.platform == "darwin": - path = user_data_dir(appname) - else: - path = os.getenv('XDG_CONFIG_HOME', expanduser("~/.config")) - path = os.path.join(path, appname) - - return path - - -# for the discussion regarding site_config_dirs locations -# see -def site_config_dirs(appname): - r"""Return a list of potential user-shared config dirs for this application. - - "appname" is the name of application. - - Typical user config directories are: - macOS: /Library/Application Support// - Unix: /etc or $XDG_CONFIG_DIRS[i]// for each value in - $XDG_CONFIG_DIRS - Win XP: C:\Documents and Settings\All Users\Application ... - ...Data\\ - Vista: (Fail! "C:\ProgramData" is a hidden *system* directory - on Vista.) - Win 7: Hidden, but writeable on Win 7: - C:\ProgramData\\ - """ - if WINDOWS: - path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) - pathlist = [os.path.join(path, appname)] - elif sys.platform == 'darwin': - pathlist = [os.path.join('/Library/Application Support', appname)] - else: - # try looking in $XDG_CONFIG_DIRS - xdg_config_dirs = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') - if xdg_config_dirs: - pathlist = [ - os.path.join(expanduser(x), appname) - for x in xdg_config_dirs.split(os.pathsep) - ] - else: - pathlist = [] - - # always look in /etc directly as well - pathlist.append('/etc') - - return pathlist - - -# -- Windows support functions -- - -def _get_win_folder_from_registry(csidl_name): - """ - This is a fallback technique at best. I'm not sure if using the - registry for this guarantees us the correct answer for all CSIDL_* - names. - """ - import _winreg - - shell_folder_name = { - "CSIDL_APPDATA": "AppData", - "CSIDL_COMMON_APPDATA": "Common AppData", - "CSIDL_LOCAL_APPDATA": "Local AppData", - }[csidl_name] - - key = _winreg.OpenKey( - _winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" - ) - directory, _type = _winreg.QueryValueEx(key, shell_folder_name) - return directory - - -def _get_win_folder_with_ctypes(csidl_name): - csidl_const = { - "CSIDL_APPDATA": 26, - "CSIDL_COMMON_APPDATA": 35, - "CSIDL_LOCAL_APPDATA": 28, - }[csidl_name] - - buf = ctypes.create_unicode_buffer(1024) - ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) - - # Downgrade to short path name if have highbit chars. See - # . - has_high_char = False - for c in buf: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - buf2 = ctypes.create_unicode_buffer(1024) - if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): - buf = buf2 - - return buf.value - - -if WINDOWS: - try: - import ctypes - _get_win_folder = _get_win_folder_with_ctypes - except ImportError: - _get_win_folder = _get_win_folder_from_registry - - -def _win_path_to_bytes(path): - """Encode Windows paths to bytes. Only used on Python 2. - - Motivation is to be consistent with other operating systems where paths - are also returned as bytes. This avoids problems mixing bytes and Unicode - elsewhere in the codebase. For more details and discussion see - . - - If encoding using ASCII and MBCS fails, return the original Unicode path. - """ - for encoding in ('ASCII', 'MBCS'): - try: - return path.encode(encoding) - except (UnicodeEncodeError, LookupError): - pass - return path diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/deprecation.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/deprecation.py deleted file mode 100644 index a907172..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/deprecation.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -A module that implements tooling to enable easy warnings about deprecations. -""" -from __future__ import absolute_import - -import logging -import warnings - -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from typing import Any - - -class PipDeprecationWarning(Warning): - pass - - -class Pending(object): - pass - - -class RemovedInPip11Warning(PipDeprecationWarning): - pass - - -class RemovedInPip12Warning(PipDeprecationWarning, Pending): - pass - - -# Warnings <-> Logging Integration - - -_warnings_showwarning = None # type: Any - - -def _showwarning(message, category, filename, lineno, file=None, line=None): - if file is not None: - if _warnings_showwarning is not None: - _warnings_showwarning( - message, category, filename, lineno, file, line, - ) - else: - if issubclass(category, PipDeprecationWarning): - # We use a specially named logger which will handle all of the - # deprecation messages for pip. - logger = logging.getLogger("pip._internal.deprecations") - - # This is purposely using the % formatter here instead of letting - # the logging module handle the interpolation. This is because we - # want it to appear as if someone typed this entire message out. - log_message = "DEPRECATION: %s" % message - - # PipDeprecationWarnings that are Pending still have at least 2 - # versions to go until they are removed so they can just be - # warnings. Otherwise, they will be removed in the very next - # version of pip. We want these to be more obvious so we use the - # ERROR logging level. - if issubclass(category, Pending): - logger.warning(log_message) - else: - logger.error(log_message) - else: - _warnings_showwarning( - message, category, filename, lineno, file, line, - ) - - -def install_warning_logger(): - # Enable our Deprecation Warnings - warnings.simplefilter("default", PipDeprecationWarning, append=True) - - global _warnings_showwarning - - if _warnings_showwarning is None: - _warnings_showwarning = warnings.showwarning - warnings.showwarning = _showwarning diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/encoding.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/encoding.py deleted file mode 100644 index 56f6036..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/encoding.py +++ /dev/null @@ -1,33 +0,0 @@ -import codecs -import locale -import re -import sys - -BOMS = [ - (codecs.BOM_UTF8, 'utf8'), - (codecs.BOM_UTF16, 'utf16'), - (codecs.BOM_UTF16_BE, 'utf16-be'), - (codecs.BOM_UTF16_LE, 'utf16-le'), - (codecs.BOM_UTF32, 'utf32'), - (codecs.BOM_UTF32_BE, 'utf32-be'), - (codecs.BOM_UTF32_LE, 'utf32-le'), -] - -ENCODING_RE = re.compile(br'coding[:=]\s*([-\w.]+)') - - -def auto_decode(data): - """Check a bytes string for a BOM to correctly detect the encoding - - Fallback to locale.getpreferredencoding(False) like open() on Python3""" - for bom, encoding in BOMS: - if data.startswith(bom): - return data[len(bom):].decode(encoding) - # Lets check the first two lines as in PEP263 - for line in data.split(b'\n')[:2]: - if line[0:1] == b'#' and ENCODING_RE.search(line): - encoding = ENCODING_RE.search(line).groups()[0].decode('ascii') - return data.decode(encoding) - return data.decode( - locale.getpreferredencoding(False) or sys.getdefaultencoding(), - ) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/filesystem.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/filesystem.py deleted file mode 100644 index ee45501..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/filesystem.py +++ /dev/null @@ -1,28 +0,0 @@ -import os -import os.path - -from pip._internal.compat import get_path_uid - - -def check_path_owner(path): - # If we don't have a way to check the effective uid of this process, then - # we'll just assume that we own the directory. - if not hasattr(os, "geteuid"): - return True - - previous = None - while path != previous: - if os.path.lexists(path): - # Check if path is writable by current user. - if os.geteuid() == 0: - # Special handling for root user in order to handle properly - # cases where users use sudo without -H flag. - try: - path_uid = get_path_uid(path) - except OSError: - return False - return path_uid == 0 - else: - return os.access(path, os.W_OK) - else: - previous, path = path, os.path.dirname(path) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/glibc.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/glibc.py deleted file mode 100644 index ebcfc5b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/glibc.py +++ /dev/null @@ -1,84 +0,0 @@ -from __future__ import absolute_import - -import ctypes -import re -import warnings - - -def glibc_version_string(): - "Returns glibc version string, or None if not using glibc." - - # ctypes.CDLL(None) internally calls dlopen(NULL), and as the dlopen - # manpage says, "If filename is NULL, then the returned handle is for the - # main program". This way we can let the linker do the work to figure out - # which libc our process is actually using. - process_namespace = ctypes.CDLL(None) - try: - gnu_get_libc_version = process_namespace.gnu_get_libc_version - except AttributeError: - # Symbol doesn't exist -> therefore, we are not linked to - # glibc. - return None - - # Call gnu_get_libc_version, which returns a string like "2.5" - gnu_get_libc_version.restype = ctypes.c_char_p - version_str = gnu_get_libc_version() - # py2 / py3 compatibility: - if not isinstance(version_str, str): - version_str = version_str.decode("ascii") - - return version_str - - -# Separated out from have_compatible_glibc for easier unit testing -def check_glibc_version(version_str, required_major, minimum_minor): - # Parse string and check against requested version. - # - # We use a regexp instead of str.split because we want to discard any - # random junk that might come after the minor version -- this might happen - # in patched/forked versions of glibc (e.g. Linaro's version of glibc - # uses version strings like "2.20-2014.11"). See gh-3588. - m = re.match(r"(?P[0-9]+)\.(?P[0-9]+)", version_str) - if not m: - warnings.warn("Expected glibc version with 2 components major.minor," - " got: %s" % version_str, RuntimeWarning) - return False - return (int(m.group("major")) == required_major and - int(m.group("minor")) >= minimum_minor) - - -def have_compatible_glibc(required_major, minimum_minor): - version_str = glibc_version_string() - if version_str is None: - return False - return check_glibc_version(version_str, required_major, minimum_minor) - - -# platform.libc_ver regularly returns completely nonsensical glibc -# versions. E.g. on my computer, platform says: -# -# ~$ python2.7 -c 'import platform; print(platform.libc_ver())' -# ('glibc', '2.7') -# ~$ python3.5 -c 'import platform; print(platform.libc_ver())' -# ('glibc', '2.9') -# -# But the truth is: -# -# ~$ ldd --version -# ldd (Debian GLIBC 2.22-11) 2.22 -# -# This is unfortunate, because it means that the linehaul data on libc -# versions that was generated by pip 8.1.2 and earlier is useless and -# misleading. Solution: instead of using platform, use our code that actually -# works. -def libc_ver(): - """Try to determine the glibc version - - Returns a tuple of strings (lib, version) which default to empty strings - in case the lookup fails. - """ - glibc_version = glibc_version_string() - if glibc_version is None: - return ("", "") - else: - return ("glibc", glibc_version) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/hashes.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/hashes.py deleted file mode 100644 index 8b909ba..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/hashes.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import absolute_import - -import hashlib - -from pip._vendor.six import iteritems, iterkeys, itervalues - -from pip._internal.exceptions import ( - HashMismatch, HashMissing, InstallationError, -) -from pip._internal.utils.misc import read_chunks - -# The recommended hash algo of the moment. Change this whenever the state of -# the art changes; it won't hurt backward compatibility. -FAVORITE_HASH = 'sha256' - - -# Names of hashlib algorithms allowed by the --hash option and ``pip hash`` -# Currently, those are the ones at least as collision-resistant as sha256. -STRONG_HASHES = ['sha256', 'sha384', 'sha512'] - - -class Hashes(object): - """A wrapper that builds multiple hashes at once and checks them against - known-good values - - """ - def __init__(self, hashes=None): - """ - :param hashes: A dict of algorithm names pointing to lists of allowed - hex digests - """ - self._allowed = {} if hashes is None else hashes - - def check_against_chunks(self, chunks): - """Check good hashes against ones built from iterable of chunks of - data. - - Raise HashMismatch if none match. - - """ - gots = {} - for hash_name in iterkeys(self._allowed): - try: - gots[hash_name] = hashlib.new(hash_name) - except (ValueError, TypeError): - raise InstallationError('Unknown hash name: %s' % hash_name) - - for chunk in chunks: - for hash in itervalues(gots): - hash.update(chunk) - - for hash_name, got in iteritems(gots): - if got.hexdigest() in self._allowed[hash_name]: - return - self._raise(gots) - - def _raise(self, gots): - raise HashMismatch(self._allowed, gots) - - def check_against_file(self, file): - """Check good hashes against a file-like object - - Raise HashMismatch if none match. - - """ - return self.check_against_chunks(read_chunks(file)) - - def check_against_path(self, path): - with open(path, 'rb') as file: - return self.check_against_file(file) - - def __nonzero__(self): - """Return whether I know any known-good hashes.""" - return bool(self._allowed) - - def __bool__(self): - return self.__nonzero__() - - -class MissingHashes(Hashes): - """A workalike for Hashes used when we're missing a hash for a requirement - - It computes the actual hash of the requirement and raises a HashMissing - exception showing it to the user. - - """ - def __init__(self): - """Don't offer the ``hashes`` kwarg.""" - # Pass our favorite hash in to generate a "gotten hash". With the - # empty list, it will never match, so an error will always raise. - super(MissingHashes, self).__init__(hashes={FAVORITE_HASH: []}) - - def _raise(self, gots): - raise HashMissing(gots[FAVORITE_HASH].hexdigest()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/logging.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/logging.py deleted file mode 100644 index 5a5a7d7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/logging.py +++ /dev/null @@ -1,132 +0,0 @@ -from __future__ import absolute_import - -import contextlib -import logging -import logging.handlers -import os - -from pip._internal.compat import WINDOWS -from pip._internal.utils.misc import ensure_dir - -try: - import threading -except ImportError: - import dummy_threading as threading # type: ignore - - -try: - from pip._vendor import colorama -# Lots of different errors can come from this, including SystemError and -# ImportError. -except Exception: - colorama = None - - -_log_state = threading.local() -_log_state.indentation = 0 - - -@contextlib.contextmanager -def indent_log(num=2): - """ - A context manager which will cause the log output to be indented for any - log messages emitted inside it. - """ - _log_state.indentation += num - try: - yield - finally: - _log_state.indentation -= num - - -def get_indentation(): - return getattr(_log_state, 'indentation', 0) - - -class IndentingFormatter(logging.Formatter): - - def format(self, record): - """ - Calls the standard formatter, but will indent all of the log messages - by our current indentation level. - """ - formatted = logging.Formatter.format(self, record) - formatted = "".join([ - (" " * get_indentation()) + line - for line in formatted.splitlines(True) - ]) - return formatted - - -def _color_wrap(*colors): - def wrapped(inp): - return "".join(list(colors) + [inp, colorama.Style.RESET_ALL]) - return wrapped - - -class ColorizedStreamHandler(logging.StreamHandler): - - # Don't build up a list of colors if we don't have colorama - if colorama: - COLORS = [ - # This needs to be in order from highest logging level to lowest. - (logging.ERROR, _color_wrap(colorama.Fore.RED)), - (logging.WARNING, _color_wrap(colorama.Fore.YELLOW)), - ] - else: - COLORS = [] - - def __init__(self, stream=None, no_color=None): - logging.StreamHandler.__init__(self, stream) - self._no_color = no_color - - if WINDOWS and colorama: - self.stream = colorama.AnsiToWin32(self.stream) - - def should_color(self): - # Don't colorize things if we do not have colorama or if told not to - if not colorama or self._no_color: - return False - - real_stream = ( - self.stream if not isinstance(self.stream, colorama.AnsiToWin32) - else self.stream.wrapped - ) - - # If the stream is a tty we should color it - if hasattr(real_stream, "isatty") and real_stream.isatty(): - return True - - # If we have an ASNI term we should color it - if os.environ.get("TERM") == "ANSI": - return True - - # If anything else we should not color it - return False - - def format(self, record): - msg = logging.StreamHandler.format(self, record) - - if self.should_color(): - for level, color in self.COLORS: - if record.levelno >= level: - msg = color(msg) - break - - return msg - - -class BetterRotatingFileHandler(logging.handlers.RotatingFileHandler): - - def _open(self): - ensure_dir(os.path.dirname(self.baseFilename)) - return logging.handlers.RotatingFileHandler._open(self) - - -class MaxLevelFilter(logging.Filter): - - def __init__(self, level): - self.level = level - - def filter(self, record): - return record.levelno < self.level diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/misc.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/misc.py deleted file mode 100644 index 9d4c9b1..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/misc.py +++ /dev/null @@ -1,851 +0,0 @@ -from __future__ import absolute_import - -import contextlib -import errno -import io -import locale -# we have a submodule named 'logging' which would shadow this if we used the -# regular name: -import logging as std_logging -import os -import posixpath -import re -import shutil -import stat -import subprocess -import sys -import tarfile -import zipfile -from collections import deque - -from pip._vendor import pkg_resources -# NOTE: retrying is not annotated in typeshed as on 2017-07-17, which is -# why we ignore the type on this import. -from pip._vendor.retrying import retry # type: ignore -from pip._vendor.six import PY2 -from pip._vendor.six.moves import input - -from pip._internal.compat import console_to_str, expanduser, stdlib_pkgs -from pip._internal.exceptions import InstallationError -from pip._internal.locations import ( - running_under_virtualenv, site_packages, user_site, virtualenv_no_global, - write_delete_marker_file, -) - -if PY2: - from io import BytesIO as StringIO -else: - from io import StringIO - -__all__ = ['rmtree', 'display_path', 'backup_dir', - 'ask', 'splitext', - 'format_size', 'is_installable_dir', - 'is_svn_page', 'file_contents', - 'split_leading_dir', 'has_leading_dir', - 'normalize_path', - 'renames', 'get_prog', - 'unzip_file', 'untar_file', 'unpack_file', 'call_subprocess', - 'captured_stdout', 'ensure_dir', - 'ARCHIVE_EXTENSIONS', 'SUPPORTED_EXTENSIONS', - 'get_installed_version'] - - -logger = std_logging.getLogger(__name__) - -BZ2_EXTENSIONS = ('.tar.bz2', '.tbz') -XZ_EXTENSIONS = ('.tar.xz', '.txz', '.tlz', '.tar.lz', '.tar.lzma') -ZIP_EXTENSIONS = ('.zip', '.whl') -TAR_EXTENSIONS = ('.tar.gz', '.tgz', '.tar') -ARCHIVE_EXTENSIONS = ( - ZIP_EXTENSIONS + BZ2_EXTENSIONS + TAR_EXTENSIONS + XZ_EXTENSIONS) -SUPPORTED_EXTENSIONS = ZIP_EXTENSIONS + TAR_EXTENSIONS -try: - import bz2 # noqa - SUPPORTED_EXTENSIONS += BZ2_EXTENSIONS -except ImportError: - logger.debug('bz2 module is not available') - -try: - # Only for Python 3.3+ - import lzma # noqa - SUPPORTED_EXTENSIONS += XZ_EXTENSIONS -except ImportError: - logger.debug('lzma module is not available') - - -def import_or_raise(pkg_or_module_string, ExceptionType, *args, **kwargs): - try: - return __import__(pkg_or_module_string) - except ImportError: - raise ExceptionType(*args, **kwargs) - - -def ensure_dir(path): - """os.path.makedirs without EEXIST.""" - try: - os.makedirs(path) - except OSError as e: - if e.errno != errno.EEXIST: - raise - - -def get_prog(): - try: - prog = os.path.basename(sys.argv[0]) - if prog in ('__main__.py', '-c'): - return "%s -m pip" % sys.executable - else: - return prog - except (AttributeError, TypeError, IndexError): - pass - return 'pip' - - -# Retry every half second for up to 3 seconds -@retry(stop_max_delay=3000, wait_fixed=500) -def rmtree(dir, ignore_errors=False): - shutil.rmtree(dir, ignore_errors=ignore_errors, - onerror=rmtree_errorhandler) - - -def rmtree_errorhandler(func, path, exc_info): - """On Windows, the files in .svn are read-only, so when rmtree() tries to - remove them, an exception is thrown. We catch that here, remove the - read-only attribute, and hopefully continue without problems.""" - # if file type currently read only - if os.stat(path).st_mode & stat.S_IREAD: - # convert to read/write - os.chmod(path, stat.S_IWRITE) - # use the original function to repeat the operation - func(path) - return - else: - raise - - -def display_path(path): - """Gives the display value for a given path, making it relative to cwd - if possible.""" - path = os.path.normcase(os.path.abspath(path)) - if sys.version_info[0] == 2: - path = path.decode(sys.getfilesystemencoding(), 'replace') - path = path.encode(sys.getdefaultencoding(), 'replace') - if path.startswith(os.getcwd() + os.path.sep): - path = '.' + path[len(os.getcwd()):] - return path - - -def backup_dir(dir, ext='.bak'): - """Figure out the name of a directory to back up the given dir to - (adding .bak, .bak2, etc)""" - n = 1 - extension = ext - while os.path.exists(dir + extension): - n += 1 - extension = ext + str(n) - return dir + extension - - -def ask_path_exists(message, options): - for action in os.environ.get('PIP_EXISTS_ACTION', '').split(): - if action in options: - return action - return ask(message, options) - - -def ask(message, options): - """Ask the message interactively, with the given possible responses""" - while 1: - if os.environ.get('PIP_NO_INPUT'): - raise Exception( - 'No input was expected ($PIP_NO_INPUT set); question: %s' % - message - ) - response = input(message) - response = response.strip().lower() - if response not in options: - print( - 'Your response (%r) was not one of the expected responses: ' - '%s' % (response, ', '.join(options)) - ) - else: - return response - - -def format_size(bytes): - if bytes > 1000 * 1000: - return '%.1fMB' % (bytes / 1000.0 / 1000) - elif bytes > 10 * 1000: - return '%ikB' % (bytes / 1000) - elif bytes > 1000: - return '%.1fkB' % (bytes / 1000.0) - else: - return '%ibytes' % bytes - - -def is_installable_dir(path): - """Return True if `path` is a directory containing a setup.py file.""" - if not os.path.isdir(path): - return False - setup_py = os.path.join(path, 'setup.py') - if os.path.isfile(setup_py): - return True - return False - - -def is_svn_page(html): - """ - Returns true if the page appears to be the index page of an svn repository - """ - return (re.search(r'[^<]*Revision \d+:', html) and - re.search(r'Powered by (?:<a[^>]*?>)?Subversion', html, re.I)) - - -def file_contents(filename): - with open(filename, 'rb') as fp: - return fp.read().decode('utf-8') - - -def read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): - """Yield pieces of data from a file-like object until EOF.""" - while True: - chunk = file.read(size) - if not chunk: - break - yield chunk - - -def split_leading_dir(path): - path = path.lstrip('/').lstrip('\\') - if '/' in path and (('\\' in path and path.find('/') < path.find('\\')) or - '\\' not in path): - return path.split('/', 1) - elif '\\' in path: - return path.split('\\', 1) - else: - return path, '' - - -def has_leading_dir(paths): - """Returns true if all the paths have the same leading path name - (i.e., everything is in one subdirectory in an archive)""" - common_prefix = None - for path in paths: - prefix, rest = split_leading_dir(path) - if not prefix: - return False - elif common_prefix is None: - common_prefix = prefix - elif prefix != common_prefix: - return False - return True - - -def normalize_path(path, resolve_symlinks=True): - """ - Convert a path to its canonical, case-normalized, absolute version. - - """ - path = expanduser(path) - if resolve_symlinks: - path = os.path.realpath(path) - else: - path = os.path.abspath(path) - return os.path.normcase(path) - - -def splitext(path): - """Like os.path.splitext, but take off .tar too""" - base, ext = posixpath.splitext(path) - if base.lower().endswith('.tar'): - ext = base[-4:] + ext - base = base[:-4] - return base, ext - - -def renames(old, new): - """Like os.renames(), but handles renaming across devices.""" - # Implementation borrowed from os.renames(). - head, tail = os.path.split(new) - if head and tail and not os.path.exists(head): - os.makedirs(head) - - shutil.move(old, new) - - head, tail = os.path.split(old) - if head and tail: - try: - os.removedirs(head) - except OSError: - pass - - -def is_local(path): - """ - Return True if path is within sys.prefix, if we're running in a virtualenv. - - If we're not in a virtualenv, all paths are considered "local." - - """ - if not running_under_virtualenv(): - return True - return normalize_path(path).startswith(normalize_path(sys.prefix)) - - -def dist_is_local(dist): - """ - Return True if given Distribution object is installed locally - (i.e. within current virtualenv). - - Always True if we're not in a virtualenv. - - """ - return is_local(dist_location(dist)) - - -def dist_in_usersite(dist): - """ - Return True if given Distribution is installed in user site. - """ - norm_path = normalize_path(dist_location(dist)) - return norm_path.startswith(normalize_path(user_site)) - - -def dist_in_site_packages(dist): - """ - Return True if given Distribution is installed in - sysconfig.get_python_lib(). - """ - return normalize_path( - dist_location(dist) - ).startswith(normalize_path(site_packages)) - - -def dist_is_editable(dist): - """Is distribution an editable install?""" - for path_item in sys.path: - egg_link = os.path.join(path_item, dist.project_name + '.egg-link') - if os.path.isfile(egg_link): - return True - return False - - -def get_installed_distributions(local_only=True, - skip=stdlib_pkgs, - include_editables=True, - editables_only=False, - user_only=False): - """ - Return a list of installed Distribution objects. - - If ``local_only`` is True (default), only return installations - local to the current virtualenv, if in a virtualenv. - - ``skip`` argument is an iterable of lower-case project names to - ignore; defaults to stdlib_pkgs - - If ``include_editables`` is False, don't report editables. - - If ``editables_only`` is True , only report editables. - - If ``user_only`` is True , only report installations in the user - site directory. - - """ - if local_only: - local_test = dist_is_local - else: - def local_test(d): - return True - - if include_editables: - def editable_test(d): - return True - else: - def editable_test(d): - return not dist_is_editable(d) - - if editables_only: - def editables_only_test(d): - return dist_is_editable(d) - else: - def editables_only_test(d): - return True - - if user_only: - user_test = dist_in_usersite - else: - def user_test(d): - return True - - return [d for d in pkg_resources.working_set - if local_test(d) and - d.key not in skip and - editable_test(d) and - editables_only_test(d) and - user_test(d) - ] - - -def egg_link_path(dist): - """ - Return the path for the .egg-link file if it exists, otherwise, None. - - There's 3 scenarios: - 1) not in a virtualenv - try to find in site.USER_SITE, then site_packages - 2) in a no-global virtualenv - try to find in site_packages - 3) in a yes-global virtualenv - try to find in site_packages, then site.USER_SITE - (don't look in global location) - - For #1 and #3, there could be odd cases, where there's an egg-link in 2 - locations. - - This method will just return the first one found. - """ - sites = [] - if running_under_virtualenv(): - if virtualenv_no_global(): - sites.append(site_packages) - else: - sites.append(site_packages) - if user_site: - sites.append(user_site) - else: - if user_site: - sites.append(user_site) - sites.append(site_packages) - - for site in sites: - egglink = os.path.join(site, dist.project_name) + '.egg-link' - if os.path.isfile(egglink): - return egglink - - -def dist_location(dist): - """ - Get the site-packages location of this distribution. Generally - this is dist.location, except in the case of develop-installed - packages, where dist.location is the source code location, and we - want to know where the egg-link file is. - - """ - egg_link = egg_link_path(dist) - if egg_link: - return egg_link - return dist.location - - -def current_umask(): - """Get the current umask which involves having to set it temporarily.""" - mask = os.umask(0) - os.umask(mask) - return mask - - -def unzip_file(filename, location, flatten=True): - """ - Unzip the file (with path `filename`) to the destination `location`. All - files are written based on system defaults and umask (i.e. permissions are - not preserved), except that regular file members with any execute - permissions (user, group, or world) have "chmod +x" applied after being - written. Note that for windows, any execute changes using os.chmod are - no-ops per the python docs. - """ - ensure_dir(location) - zipfp = open(filename, 'rb') - try: - zip = zipfile.ZipFile(zipfp, allowZip64=True) - leading = has_leading_dir(zip.namelist()) and flatten - for info in zip.infolist(): - name = info.filename - data = zip.read(name) - fn = name - if leading: - fn = split_leading_dir(name)[1] - fn = os.path.join(location, fn) - dir = os.path.dirname(fn) - if fn.endswith('/') or fn.endswith('\\'): - # A directory - ensure_dir(fn) - else: - ensure_dir(dir) - fp = open(fn, 'wb') - try: - fp.write(data) - finally: - fp.close() - mode = info.external_attr >> 16 - # if mode and regular file and any execute permissions for - # user/group/world? - if mode and stat.S_ISREG(mode) and mode & 0o111: - # make dest file have execute for user/group/world - # (chmod +x) no-op on windows per python docs - os.chmod(fn, (0o777 - current_umask() | 0o111)) - finally: - zipfp.close() - - -def untar_file(filename, location): - """ - Untar the file (with path `filename`) to the destination `location`. - All files are written based on system defaults and umask (i.e. permissions - are not preserved), except that regular file members with any execute - permissions (user, group, or world) have "chmod +x" applied after being - written. Note that for windows, any execute changes using os.chmod are - no-ops per the python docs. - """ - ensure_dir(location) - if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'): - mode = 'r:gz' - elif filename.lower().endswith(BZ2_EXTENSIONS): - mode = 'r:bz2' - elif filename.lower().endswith(XZ_EXTENSIONS): - mode = 'r:xz' - elif filename.lower().endswith('.tar'): - mode = 'r' - else: - logger.warning( - 'Cannot determine compression type for file %s', filename, - ) - mode = 'r:*' - tar = tarfile.open(filename, mode) - try: - # note: python<=2.5 doesn't seem to know about pax headers, filter them - leading = has_leading_dir([ - member.name for member in tar.getmembers() - if member.name != 'pax_global_header' - ]) - for member in tar.getmembers(): - fn = member.name - if fn == 'pax_global_header': - continue - if leading: - fn = split_leading_dir(fn)[1] - path = os.path.join(location, fn) - if member.isdir(): - ensure_dir(path) - elif member.issym(): - try: - tar._extract_member(member, path) - except Exception as exc: - # Some corrupt tar files seem to produce this - # (specifically bad symlinks) - logger.warning( - 'In the tar file %s the member %s is invalid: %s', - filename, member.name, exc, - ) - continue - else: - try: - fp = tar.extractfile(member) - except (KeyError, AttributeError) as exc: - # Some corrupt tar files seem to produce this - # (specifically bad symlinks) - logger.warning( - 'In the tar file %s the member %s is invalid: %s', - filename, member.name, exc, - ) - continue - ensure_dir(os.path.dirname(path)) - with open(path, 'wb') as destfp: - shutil.copyfileobj(fp, destfp) - fp.close() - # Update the timestamp (useful for cython compiled files) - tar.utime(member, path) - # member have any execute permissions for user/group/world? - if member.mode & 0o111: - # make dest file have execute for user/group/world - # no-op on windows per python docs - os.chmod(path, (0o777 - current_umask() | 0o111)) - finally: - tar.close() - - -def unpack_file(filename, location, content_type, link): - filename = os.path.realpath(filename) - if (content_type == 'application/zip' or - filename.lower().endswith(ZIP_EXTENSIONS) or - zipfile.is_zipfile(filename)): - unzip_file( - filename, - location, - flatten=not filename.endswith('.whl') - ) - elif (content_type == 'application/x-gzip' or - tarfile.is_tarfile(filename) or - filename.lower().endswith( - TAR_EXTENSIONS + BZ2_EXTENSIONS + XZ_EXTENSIONS)): - untar_file(filename, location) - elif (content_type and content_type.startswith('text/html') and - is_svn_page(file_contents(filename))): - # We don't really care about this - from pip._internal.vcs.subversion import Subversion - Subversion('svn+' + link.url).unpack(location) - else: - # FIXME: handle? - # FIXME: magic signatures? - logger.critical( - 'Cannot unpack file %s (downloaded from %s, content-type: %s); ' - 'cannot detect archive format', - filename, location, content_type, - ) - raise InstallationError( - 'Cannot determine archive format of %s' % location - ) - - -def call_subprocess(cmd, show_stdout=True, cwd=None, - on_returncode='raise', - command_desc=None, - extra_environ=None, unset_environ=None, spinner=None): - """ - Args: - unset_environ: an iterable of environment variable names to unset - prior to calling subprocess.Popen(). - """ - if unset_environ is None: - unset_environ = [] - # This function's handling of subprocess output is confusing and I - # previously broke it terribly, so as penance I will write a long comment - # explaining things. - # - # The obvious thing that affects output is the show_stdout= - # kwarg. show_stdout=True means, let the subprocess write directly to our - # stdout. Even though it is nominally the default, it is almost never used - # inside pip (and should not be used in new code without a very good - # reason); as of 2016-02-22 it is only used in a few places inside the VCS - # wrapper code. Ideally we should get rid of it entirely, because it - # creates a lot of complexity here for a rarely used feature. - # - # Most places in pip set show_stdout=False. What this means is: - # - We connect the child stdout to a pipe, which we read. - # - By default, we hide the output but show a spinner -- unless the - # subprocess exits with an error, in which case we show the output. - # - If the --verbose option was passed (= loglevel is DEBUG), then we show - # the output unconditionally. (But in this case we don't want to show - # the output a second time if it turns out that there was an error.) - # - # stderr is always merged with stdout (even if show_stdout=True). - if show_stdout: - stdout = None - else: - stdout = subprocess.PIPE - if command_desc is None: - cmd_parts = [] - for part in cmd: - if ' ' in part or '\n' in part or '"' in part or "'" in part: - part = '"%s"' % part.replace('"', '\\"') - cmd_parts.append(part) - command_desc = ' '.join(cmd_parts) - logger.debug("Running command %s", command_desc) - env = os.environ.copy() - if extra_environ: - env.update(extra_environ) - for name in unset_environ: - env.pop(name, None) - try: - proc = subprocess.Popen( - cmd, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, - stdout=stdout, cwd=cwd, env=env, - ) - proc.stdin.close() - except Exception as exc: - logger.critical( - "Error %s while executing command %s", exc, command_desc, - ) - raise - all_output = [] - if stdout is not None: - while True: - line = console_to_str(proc.stdout.readline()) - if not line: - break - line = line.rstrip() - all_output.append(line + '\n') - if logger.getEffectiveLevel() <= std_logging.DEBUG: - # Show the line immediately - logger.debug(line) - else: - # Update the spinner - if spinner is not None: - spinner.spin() - try: - proc.wait() - finally: - if proc.stdout: - proc.stdout.close() - if spinner is not None: - if proc.returncode: - spinner.finish("error") - else: - spinner.finish("done") - if proc.returncode: - if on_returncode == 'raise': - if (logger.getEffectiveLevel() > std_logging.DEBUG and - not show_stdout): - logger.info( - 'Complete output from command %s:', command_desc, - ) - logger.info( - ''.join(all_output) + - '\n----------------------------------------' - ) - raise InstallationError( - 'Command "%s" failed with error code %s in %s' - % (command_desc, proc.returncode, cwd)) - elif on_returncode == 'warn': - logger.warning( - 'Command "%s" had error code %s in %s', - command_desc, proc.returncode, cwd, - ) - elif on_returncode == 'ignore': - pass - else: - raise ValueError('Invalid value: on_returncode=%s' % - repr(on_returncode)) - if not show_stdout: - return ''.join(all_output) - - -def read_text_file(filename): - """Return the contents of *filename*. - - Try to decode the file contents with utf-8, the preferred system encoding - (e.g., cp1252 on some Windows machines), and latin1, in that order. - Decoding a byte string with latin1 will never raise an error. In the worst - case, the returned string will contain some garbage characters. - - """ - with open(filename, 'rb') as fp: - data = fp.read() - - encodings = ['utf-8', locale.getpreferredencoding(False), 'latin1'] - for enc in encodings: - try: - data = data.decode(enc) - except UnicodeDecodeError: - continue - break - - assert type(data) != bytes # Latin1 should have worked. - return data - - -def _make_build_dir(build_dir): - os.makedirs(build_dir) - write_delete_marker_file(build_dir) - - -class FakeFile(object): - """Wrap a list of lines in an object with readline() to make - ConfigParser happy.""" - def __init__(self, lines): - self._gen = (l for l in lines) - - def readline(self): - try: - try: - return next(self._gen) - except NameError: - return self._gen.next() - except StopIteration: - return '' - - def __iter__(self): - return self._gen - - -class StreamWrapper(StringIO): - - @classmethod - def from_stream(cls, orig_stream): - cls.orig_stream = orig_stream - return cls() - - # compileall.compile_dir() needs stdout.encoding to print to stdout - @property - def encoding(self): - return self.orig_stream.encoding - - -@contextlib.contextmanager -def captured_output(stream_name): - """Return a context manager used by captured_stdout/stdin/stderr - that temporarily replaces the sys stream *stream_name* with a StringIO. - - Taken from Lib/support/__init__.py in the CPython repo. - """ - orig_stdout = getattr(sys, stream_name) - setattr(sys, stream_name, StreamWrapper.from_stream(orig_stdout)) - 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 stdout: - print('hello') - self.assertEqual(stdout.getvalue(), 'hello\n') - - Taken from Lib/support/__init__.py in the CPython repo. - """ - return captured_output('stdout') - - -class cached_property(object): - """A property that is only computed once per instance and then replaces - itself with an ordinary attribute. Deleting the attribute resets the - property. - - Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175 - """ - - def __init__(self, func): - self.__doc__ = getattr(func, '__doc__') - self.func = func - - def __get__(self, obj, cls): - if obj is None: - # We're being accessed from the class itself, not from an object - return self - value = obj.__dict__[self.func.__name__] = self.func(obj) - return value - - -def get_installed_version(dist_name, lookup_dirs=None): - """Get the installed version of dist_name avoiding pkg_resources cache""" - # Create a requirement that we'll look for inside of setuptools. - req = pkg_resources.Requirement.parse(dist_name) - - # We want to avoid having this cached, so we need to construct a new - # working set each time. - if lookup_dirs is None: - working_set = pkg_resources.WorkingSet() - else: - working_set = pkg_resources.WorkingSet(lookup_dirs) - - # Get the installed distribution from our working set - dist = working_set.find(req) - - # Check to see if we got an installed distribution or not, if we did - # we want to return it's version. - return dist.version if dist else None - - -def consume(iterator): - """Consume an iterable at C speed.""" - deque(iterator, maxlen=0) - - -# Simulates an enum -def enum(*sequential, **named): - enums = dict(zip(sequential, range(len(sequential))), **named) - reverse = {value: key for key, value in enums.items()} - enums['reverse_mapping'] = reverse - return type('Enum', (), enums) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/outdated.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/outdated.py deleted file mode 100644 index f8f6466..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/outdated.py +++ /dev/null @@ -1,163 +0,0 @@ -from __future__ import absolute_import - -import datetime -import json -import logging -import os.path -import sys - -from pip._vendor import lockfile -from pip._vendor.packaging import version as packaging_version - -from pip._internal.compat import WINDOWS -from pip._internal.index import PackageFinder -from pip._internal.locations import USER_CACHE_DIR, running_under_virtualenv -from pip._internal.utils.filesystem import check_path_owner -from pip._internal.utils.misc import ensure_dir, get_installed_version - -SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ" - - -logger = logging.getLogger(__name__) - - -class VirtualenvSelfCheckState(object): - def __init__(self): - self.statefile_path = os.path.join(sys.prefix, "pip-selfcheck.json") - - # Load the existing state - try: - with open(self.statefile_path) as statefile: - self.state = json.load(statefile) - except (IOError, ValueError): - self.state = {} - - def save(self, pypi_version, current_time): - # Attempt to write out our version check file - with open(self.statefile_path, "w") as statefile: - json.dump( - { - "last_check": current_time.strftime(SELFCHECK_DATE_FMT), - "pypi_version": pypi_version, - }, - statefile, - sort_keys=True, - separators=(",", ":") - ) - - -class GlobalSelfCheckState(object): - def __init__(self): - self.statefile_path = os.path.join(USER_CACHE_DIR, "selfcheck.json") - - # Load the existing state - try: - with open(self.statefile_path) as statefile: - self.state = json.load(statefile)[sys.prefix] - except (IOError, ValueError, KeyError): - self.state = {} - - def save(self, pypi_version, current_time): - # Check to make sure that we own the directory - if not check_path_owner(os.path.dirname(self.statefile_path)): - return - - # Now that we've ensured the directory is owned by this user, we'll go - # ahead and make sure that all our directories are created. - ensure_dir(os.path.dirname(self.statefile_path)) - - # Attempt to write out our version check file - with lockfile.LockFile(self.statefile_path): - if os.path.exists(self.statefile_path): - with open(self.statefile_path) as statefile: - state = json.load(statefile) - else: - state = {} - - state[sys.prefix] = { - "last_check": current_time.strftime(SELFCHECK_DATE_FMT), - "pypi_version": pypi_version, - } - - with open(self.statefile_path, "w") as statefile: - json.dump(state, statefile, sort_keys=True, - separators=(",", ":")) - - -def load_selfcheck_statefile(): - if running_under_virtualenv(): - return VirtualenvSelfCheckState() - else: - return GlobalSelfCheckState() - - -def pip_version_check(session, options): - """Check for an update for pip. - - Limit the frequency of checks to once per week. State is stored either in - the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix - of the pip script path. - """ - installed_version = get_installed_version("pip") - if not installed_version: - return - - pip_version = packaging_version.parse(installed_version) - pypi_version = None - - try: - state = load_selfcheck_statefile() - - current_time = datetime.datetime.utcnow() - # Determine if we need to refresh the state - if "last_check" in state.state and "pypi_version" in state.state: - last_check = datetime.datetime.strptime( - state.state["last_check"], - SELFCHECK_DATE_FMT - ) - if (current_time - last_check).total_seconds() < 7 * 24 * 60 * 60: - pypi_version = state.state["pypi_version"] - - # Refresh the version if we need to or just see if we need to warn - if pypi_version is None: - # Lets use PackageFinder to see what the latest pip version is - finder = PackageFinder( - find_links=options.find_links, - index_urls=[options.index_url] + options.extra_index_urls, - allow_all_prereleases=False, # Explicitly set to False - trusted_hosts=options.trusted_hosts, - process_dependency_links=options.process_dependency_links, - session=session, - ) - all_candidates = finder.find_all_candidates("pip") - if not all_candidates: - return - pypi_version = str( - max(all_candidates, key=lambda c: c.version).version - ) - - # save that we've performed a check - state.save(pypi_version, current_time) - - remote_version = packaging_version.parse(pypi_version) - - # Determine if our pypi_version is older - if (pip_version < remote_version and - pip_version.base_version != remote_version.base_version): - # Advise "python -m pip" on Windows to avoid issues - # with overwriting pip.exe. - if WINDOWS: - pip_cmd = "python -m pip" - else: - pip_cmd = "pip" - logger.warning( - "You are using pip version %s, however version %s is " - "available.\nYou should consider upgrading via the " - "'%s install --upgrade pip' command.", - pip_version, pypi_version, pip_cmd - ) - except Exception: - logger.debug( - "There was an error checking the latest version of pip", - exc_info=True, - ) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/packaging.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/packaging.py deleted file mode 100644 index 5f9bb93..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/packaging.py +++ /dev/null @@ -1,70 +0,0 @@ -from __future__ import absolute_import - -import logging -import sys -from email.parser import FeedParser # type: ignore - -from pip._vendor import pkg_resources -from pip._vendor.packaging import specifiers, version - -from pip._internal import exceptions - -logger = logging.getLogger(__name__) - - -def check_requires_python(requires_python): - """ - Check if the python version in use match the `requires_python` specifier. - - Returns `True` if the version of python in use matches the requirement. - Returns `False` if the version of python in use does not matches the - requirement. - - Raises an InvalidSpecifier if `requires_python` have an invalid format. - """ - if requires_python is None: - # The package provides no information - return True - requires_python_specifier = specifiers.SpecifierSet(requires_python) - - # We only use major.minor.micro - python_version = version.parse('.'.join(map(str, sys.version_info[:3]))) - return python_version in requires_python_specifier - - -def get_metadata(dist): - if (isinstance(dist, pkg_resources.DistInfoDistribution) and - dist.has_metadata('METADATA')): - return dist.get_metadata('METADATA') - elif dist.has_metadata('PKG-INFO'): - return dist.get_metadata('PKG-INFO') - - -def check_dist_requires_python(dist): - metadata = get_metadata(dist) - feed_parser = FeedParser() - feed_parser.feed(metadata) - pkg_info_dict = feed_parser.close() - requires_python = pkg_info_dict.get('Requires-Python') - try: - if not check_requires_python(requires_python): - raise exceptions.UnsupportedPythonVersion( - "%s requires Python '%s' but the running Python is %s" % ( - dist.project_name, - requires_python, - '.'.join(map(str, sys.version_info[:3])),) - ) - except specifiers.InvalidSpecifier as e: - logger.warning( - "Package %s has an invalid Requires-Python entry %s - %s", - dist.project_name, requires_python, e, - ) - return - - -def get_installer(dist): - if dist.has_metadata('INSTALLER'): - for line in dist.get_metadata_lines('INSTALLER'): - if line.strip(): - return line.strip() - return '' diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/setuptools_build.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/setuptools_build.py deleted file mode 100644 index 03973e9..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/setuptools_build.py +++ /dev/null @@ -1,8 +0,0 @@ -# Shim to wrap setup.py invocation with setuptools -SETUPTOOLS_SHIM = ( - "import setuptools, tokenize;__file__=%r;" - "f=getattr(tokenize, 'open', open)(__file__);" - "code=f.read().replace('\\r\\n', '\\n');" - "f.close();" - "exec(compile(code, __file__, 'exec'))" -) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/temp_dir.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/temp_dir.py deleted file mode 100644 index edc506b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/temp_dir.py +++ /dev/null @@ -1,82 +0,0 @@ -from __future__ import absolute_import - -import logging -import os.path -import tempfile - -from pip._internal.utils.misc import rmtree - -logger = logging.getLogger(__name__) - - -class TempDirectory(object): - """Helper class that owns and cleans up a temporary directory. - - This class can be used as a context manager or as an OO representation of a - temporary directory. - - Attributes: - path - Location to the created temporary directory or None - delete - Whether the directory should be deleted when exiting - (when used as a contextmanager) - - Methods: - create() - Creates a temporary directory and stores its path in the path - attribute. - cleanup() - Deletes the temporary directory and sets path attribute to None - - When used as a context manager, a temporary directory is created on - entering the context and, if the delete attribute is True, on exiting the - context the created directory is deleted. - """ - - def __init__(self, path=None, delete=None, kind="temp"): - super(TempDirectory, self).__init__() - - if path is None and delete is None: - # If we were not given an explicit directory, and we were not given - # an explicit delete option, then we'll default to deleting. - delete = True - - self.path = path - self.delete = delete - self.kind = kind - - def __repr__(self): - return "<{} {!r}>".format(self.__class__.__name__, self.path) - - def __enter__(self): - self.create() - return self - - def __exit__(self, exc, value, tb): - if self.delete: - self.cleanup() - - def create(self): - """Create a temporary directory and store it's path in self.path - """ - if self.path is not None: - logger.debug( - "Skipped creation of temporary directory: {}".format(self.path) - ) - return - # We realpath here because some systems have their default tmpdir - # symlinked to another directory. This tends to confuse build - # scripts, so we canonicalize the path by traversing potential - # symlinks here. - self.path = os.path.realpath( - tempfile.mkdtemp(prefix="pip-{}-".format(self.kind)) - ) - logger.debug("Created temporary directory: {}".format(self.path)) - - def cleanup(self): - """Remove the temporary directory created and reset state - """ - if self.path is not None and os.path.exists(self.path): - rmtree(self.path) - self.path = None diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/typing.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/typing.py deleted file mode 100644 index cb57f8f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/typing.py +++ /dev/null @@ -1,29 +0,0 @@ -"""For neatly implementing static typing in pip. - -`mypy` - the static type analysis tool we use - uses the `typing` module, which -provides core functionality fundamental to mypy's functioning. - -Generally, `typing` would be imported at runtime and used in that fashion - -it acts as a no-op at runtime and does not have any run-time overhead by -design. - -As it turns out, `typing` is not vendorable - it uses separate sources for -Python 2/Python 3. Thus, this codebase can not expect it to be present. -To work around this, mypy allows the typing import to be behind a False-y -optional to prevent it from running at runtime and type-comments can be used -to remove the need for the types to be accessible directly during runtime. - -This module provides the False-y guard in a nicely named fashion so that a -curious maintainer can reach here to read this. - -In pip, all static-typing related imports should be guarded as follows: - - from pip.utils.typing import MYPY_CHECK_RUNNING - - if MYPY_CHECK_RUNNING: - from typing import ... - -Ref: https://github.com/python/mypy/issues/3216 -""" - -MYPY_CHECK_RUNNING = False diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/ui.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/ui.py deleted file mode 100644 index 8ade1e2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/utils/ui.py +++ /dev/null @@ -1,421 +0,0 @@ -from __future__ import absolute_import, division - -import contextlib -import itertools -import logging -import sys -import time -from signal import SIGINT, default_int_handler, signal - -from pip._vendor import six -from pip._vendor.progress.bar import ( - Bar, ChargingBar, FillingCirclesBar, FillingSquaresBar, IncrementalBar, - ShadyBar, -) -from pip._vendor.progress.helpers import HIDE_CURSOR, SHOW_CURSOR, WritelnMixin -from pip._vendor.progress.spinner import Spinner - -from pip._internal.compat import WINDOWS -from pip._internal.utils.logging import get_indentation -from pip._internal.utils.misc import format_size -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from typing import Any - -try: - from pip._vendor import colorama -# Lots of different errors can come from this, including SystemError and -# ImportError. -except Exception: - colorama = None - -logger = logging.getLogger(__name__) - - -def _select_progress_class(preferred, fallback): - encoding = getattr(preferred.file, "encoding", None) - - # If we don't know what encoding this file is in, then we'll just assume - # that it doesn't support unicode and use the ASCII bar. - if not encoding: - return fallback - - # Collect all of the possible characters we want to use with the preferred - # bar. - characters = [ - getattr(preferred, "empty_fill", six.text_type()), - getattr(preferred, "fill", six.text_type()), - ] - characters += list(getattr(preferred, "phases", [])) - - # Try to decode the characters we're using for the bar using the encoding - # of the given file, if this works then we'll assume that we can use the - # fancier bar and if not we'll fall back to the plaintext bar. - try: - six.text_type().join(characters).encode(encoding) - except UnicodeEncodeError: - return fallback - else: - return preferred - - -_BaseBar = _select_progress_class(IncrementalBar, Bar) # type: Any - - -class InterruptibleMixin(object): - """ - Helper to ensure that self.finish() gets called on keyboard interrupt. - - This allows downloads to be interrupted without leaving temporary state - (like hidden cursors) behind. - - This class is similar to the progress library's existing SigIntMixin - helper, but as of version 1.2, that helper has the following problems: - - 1. It calls sys.exit(). - 2. It discards the existing SIGINT handler completely. - 3. It leaves its own handler in place even after an uninterrupted finish, - which will have unexpected delayed effects if the user triggers an - unrelated keyboard interrupt some time after a progress-displaying - download has already completed, for example. - """ - - def __init__(self, *args, **kwargs): - """ - Save the original SIGINT handler for later. - """ - super(InterruptibleMixin, self).__init__(*args, **kwargs) - - self.original_handler = signal(SIGINT, self.handle_sigint) - - # If signal() returns None, the previous handler was not installed from - # Python, and we cannot restore it. This probably should not happen, - # but if it does, we must restore something sensible instead, at least. - # The least bad option should be Python's default SIGINT handler, which - # just raises KeyboardInterrupt. - if self.original_handler is None: - self.original_handler = default_int_handler - - def finish(self): - """ - Restore the original SIGINT handler after finishing. - - This should happen regardless of whether the progress display finishes - normally, or gets interrupted. - """ - super(InterruptibleMixin, self).finish() - signal(SIGINT, self.original_handler) - - def handle_sigint(self, signum, frame): - """ - Call self.finish() before delegating to the original SIGINT handler. - - This handler should only be in place while the progress display is - active. - """ - self.finish() - self.original_handler(signum, frame) - - -class SilentBar(Bar): - - def update(self): - pass - - -class BlueEmojiBar(IncrementalBar): - - suffix = "%(percent)d%%" - bar_prefix = " " - bar_suffix = " " - phases = (u"\U0001F539", u"\U0001F537", u"\U0001F535") # type: Any - - -class DownloadProgressMixin(object): - - def __init__(self, *args, **kwargs): - super(DownloadProgressMixin, self).__init__(*args, **kwargs) - self.message = (" " * (get_indentation() + 2)) + self.message - - @property - def downloaded(self): - return format_size(self.index) - - @property - def download_speed(self): - # Avoid zero division errors... - if self.avg == 0.0: - return "..." - return format_size(1 / self.avg) + "/s" - - @property - def pretty_eta(self): - if self.eta: - return "eta %s" % self.eta_td - return "" - - def iter(self, it, n=1): - for x in it: - yield x - self.next(n) - self.finish() - - -class WindowsMixin(object): - - def __init__(self, *args, **kwargs): - # The Windows terminal does not support the hide/show cursor ANSI codes - # even with colorama. So we'll ensure that hide_cursor is False on - # Windows. - # This call neds to go before the super() call, so that hide_cursor - # is set in time. The base progress bar class writes the "hide cursor" - # code to the terminal in its init, so if we don't set this soon - # enough, we get a "hide" with no corresponding "show"... - if WINDOWS and self.hide_cursor: - self.hide_cursor = False - - super(WindowsMixin, self).__init__(*args, **kwargs) - - # Check if we are running on Windows and we have the colorama module, - # if we do then wrap our file with it. - if WINDOWS and colorama: - self.file = colorama.AnsiToWin32(self.file) - # The progress code expects to be able to call self.file.isatty() - # but the colorama.AnsiToWin32() object doesn't have that, so we'll - # add it. - self.file.isatty = lambda: self.file.wrapped.isatty() - # The progress code expects to be able to call self.file.flush() - # but the colorama.AnsiToWin32() object doesn't have that, so we'll - # add it. - self.file.flush = lambda: self.file.wrapped.flush() - - -class BaseDownloadProgressBar(WindowsMixin, InterruptibleMixin, - DownloadProgressMixin): - - file = sys.stdout - message = "%(percent)d%%" - suffix = "%(downloaded)s %(download_speed)s %(pretty_eta)s" - -# NOTE: The "type: ignore" comments on the following classes are there to -# work around https://github.com/python/typing/issues/241 - - -class DefaultDownloadProgressBar(BaseDownloadProgressBar, - _BaseBar): # type: ignore - pass - - -class DownloadSilentBar(BaseDownloadProgressBar, SilentBar): # type: ignore - pass - - -class DownloadIncrementalBar(BaseDownloadProgressBar, # type: ignore - IncrementalBar): - pass - - -class DownloadChargingBar(BaseDownloadProgressBar, # type: ignore - ChargingBar): - pass - - -class DownloadShadyBar(BaseDownloadProgressBar, ShadyBar): # type: ignore - pass - - -class DownloadFillingSquaresBar(BaseDownloadProgressBar, # type: ignore - FillingSquaresBar): - pass - - -class DownloadFillingCirclesBar(BaseDownloadProgressBar, # type: ignore - FillingCirclesBar): - pass - - -class DownloadBlueEmojiProgressBar(BaseDownloadProgressBar, # type: ignore - BlueEmojiBar): - pass - - -class DownloadProgressSpinner(WindowsMixin, InterruptibleMixin, - DownloadProgressMixin, WritelnMixin, Spinner): - - file = sys.stdout - suffix = "%(downloaded)s %(download_speed)s" - - def next_phase(self): - if not hasattr(self, "_phaser"): - self._phaser = itertools.cycle(self.phases) - return next(self._phaser) - - def update(self): - message = self.message % self - phase = self.next_phase() - suffix = self.suffix % self - line = ''.join([ - message, - " " if message else "", - phase, - " " if suffix else "", - suffix, - ]) - - self.writeln(line) - - -BAR_TYPES = { - "off": (DownloadSilentBar, DownloadSilentBar), - "on": (DefaultDownloadProgressBar, DownloadProgressSpinner), - "ascii": (DownloadIncrementalBar, DownloadProgressSpinner), - "pretty": (DownloadFillingCirclesBar, DownloadProgressSpinner), - "emoji": (DownloadBlueEmojiProgressBar, DownloadProgressSpinner) -} - - -def DownloadProgressProvider(progress_bar, max=None): - if max is None or max == 0: - return BAR_TYPES[progress_bar][1]().iter - else: - return BAR_TYPES[progress_bar][0](max=max).iter - - -################################################################ -# Generic "something is happening" spinners -# -# We don't even try using progress.spinner.Spinner here because it's actually -# simpler to reimplement from scratch than to coerce their code into doing -# what we need. -################################################################ - -@contextlib.contextmanager -def hidden_cursor(file): - # The Windows terminal does not support the hide/show cursor ANSI codes, - # even via colorama. So don't even try. - if WINDOWS: - yield - # We don't want to clutter the output with control characters if we're - # writing to a file, or if the user is running with --quiet. - # See https://github.com/pypa/pip/issues/3418 - elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO: - yield - else: - file.write(HIDE_CURSOR) - try: - yield - finally: - file.write(SHOW_CURSOR) - - -class RateLimiter(object): - def __init__(self, min_update_interval_seconds): - self._min_update_interval_seconds = min_update_interval_seconds - self._last_update = 0 - - def ready(self): - now = time.time() - delta = now - self._last_update - return delta >= self._min_update_interval_seconds - - def reset(self): - self._last_update = time.time() - - -class InteractiveSpinner(object): - def __init__(self, message, file=None, spin_chars="-\\|/", - # Empirically, 8 updates/second looks nice - min_update_interval_seconds=0.125): - self._message = message - if file is None: - file = sys.stdout - self._file = file - self._rate_limiter = RateLimiter(min_update_interval_seconds) - self._finished = False - - self._spin_cycle = itertools.cycle(spin_chars) - - self._file.write(" " * get_indentation() + self._message + " ... ") - self._width = 0 - - def _write(self, status): - assert not self._finished - # Erase what we wrote before by backspacing to the beginning, writing - # spaces to overwrite the old text, and then backspacing again - backup = "\b" * self._width - self._file.write(backup + " " * self._width + backup) - # Now we have a blank slate to add our status - self._file.write(status) - self._width = len(status) - self._file.flush() - self._rate_limiter.reset() - - def spin(self): - if self._finished: - return - if not self._rate_limiter.ready(): - return - self._write(next(self._spin_cycle)) - - def finish(self, final_status): - if self._finished: - return - self._write(final_status) - self._file.write("\n") - self._file.flush() - self._finished = True - - -# Used for dumb terminals, non-interactive installs (no tty), etc. -# We still print updates occasionally (once every 60 seconds by default) to -# act as a keep-alive for systems like Travis-CI that take lack-of-output as -# an indication that a task has frozen. -class NonInteractiveSpinner(object): - def __init__(self, message, min_update_interval_seconds=60): - self._message = message - self._finished = False - self._rate_limiter = RateLimiter(min_update_interval_seconds) - self._update("started") - - def _update(self, status): - assert not self._finished - self._rate_limiter.reset() - logger.info("%s: %s", self._message, status) - - def spin(self): - if self._finished: - return - if not self._rate_limiter.ready(): - return - self._update("still running...") - - def finish(self, final_status): - if self._finished: - return - self._update("finished with status '%s'" % (final_status,)) - self._finished = True - - -@contextlib.contextmanager -def open_spinner(message): - # Interactive spinner goes directly to sys.stdout rather than being routed - # through the logging system, but it acts like it has level INFO, - # i.e. it's only displayed if we're at level INFO or better. - # Non-interactive spinner goes through the logging system, so it is always - # in sync with logging configuration. - if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO: - spinner = InteractiveSpinner(message) - else: - spinner = NonInteractiveSpinner(message) - try: - with hidden_cursor(sys.stdout): - yield spinner - except KeyboardInterrupt: - spinner.finish("canceled") - raise - except Exception: - spinner.finish("error") - raise - else: - spinner.finish("done") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/__init__.py deleted file mode 100644 index 8b159cb..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/__init__.py +++ /dev/null @@ -1,471 +0,0 @@ -"""Handles all VCS (version control) support""" -from __future__ import absolute_import - -import copy -import errno -import logging -import os -import shutil -import sys - -from pip._vendor.six.moves.urllib import parse as urllib_parse - -from pip._internal.exceptions import BadCommand -from pip._internal.utils.misc import ( - display_path, backup_dir, call_subprocess, rmtree, ask_path_exists, -) -from pip._internal.utils.typing import MYPY_CHECK_RUNNING - -if MYPY_CHECK_RUNNING: - from typing import Dict, Optional, Tuple - from pip._internal.basecommand import Command - -__all__ = ['vcs', 'get_src_requirement'] - - -logger = logging.getLogger(__name__) - - -class RevOptions(object): - - """ - Encapsulates a VCS-specific revision to install, along with any VCS - install options. - - Instances of this class should be treated as if immutable. - """ - - def __init__(self, vcs, rev=None, extra_args=None): - """ - Args: - vcs: a VersionControl object. - rev: the name of the revision to install. - extra_args: a list of extra options. - """ - if extra_args is None: - extra_args = [] - - self.extra_args = extra_args - self.rev = rev - self.vcs = vcs - - def __repr__(self): - return '<RevOptions {}: rev={!r}>'.format(self.vcs.name, self.rev) - - @property - def arg_rev(self): - if self.rev is None: - return self.vcs.default_arg_rev - - return self.rev - - def to_args(self): - """ - Return the VCS-specific command arguments. - """ - args = [] - rev = self.arg_rev - if rev is not None: - args += self.vcs.get_base_rev_args(rev) - args += self.extra_args - - return args - - def to_display(self): - if not self.rev: - return '' - - return ' (to revision {})'.format(self.rev) - - def make_new(self, rev): - """ - Make a copy of the current instance, but with a new rev. - - Args: - rev: the name of the revision for the new object. - """ - return self.vcs.make_rev_options(rev, extra_args=self.extra_args) - - -class VcsSupport(object): - _registry = {} # type: Dict[str, Command] - schemes = ['ssh', 'git', 'hg', 'bzr', 'sftp', 'svn'] - - def __init__(self): - # Register more schemes with urlparse for various version control - # systems - urllib_parse.uses_netloc.extend(self.schemes) - # Python >= 2.7.4, 3.3 doesn't have uses_fragment - if getattr(urllib_parse, 'uses_fragment', None): - urllib_parse.uses_fragment.extend(self.schemes) - super(VcsSupport, self).__init__() - - def __iter__(self): - return self._registry.__iter__() - - @property - def backends(self): - return list(self._registry.values()) - - @property - def dirnames(self): - return [backend.dirname for backend in self.backends] - - @property - def all_schemes(self): - schemes = [] - for backend in self.backends: - schemes.extend(backend.schemes) - return schemes - - def register(self, cls): - if not hasattr(cls, 'name'): - logger.warning('Cannot register VCS %s', cls.__name__) - return - if cls.name not in self._registry: - self._registry[cls.name] = cls - logger.debug('Registered VCS backend: %s', cls.name) - - def unregister(self, cls=None, name=None): - if name in self._registry: - del self._registry[name] - elif cls in self._registry.values(): - del self._registry[cls.name] - else: - logger.warning('Cannot unregister because no class or name given') - - def get_backend_name(self, location): - """ - Return the name of the version control backend if found at given - location, e.g. vcs.get_backend_name('/path/to/vcs/checkout') - """ - for vc_type in self._registry.values(): - if vc_type.controls_location(location): - logger.debug('Determine that %s uses VCS: %s', - location, vc_type.name) - return vc_type.name - return None - - def get_backend(self, name): - name = name.lower() - if name in self._registry: - return self._registry[name] - - def get_backend_from_location(self, location): - vc_type = self.get_backend_name(location) - if vc_type: - return self.get_backend(vc_type) - return None - - -vcs = VcsSupport() - - -class VersionControl(object): - name = '' - dirname = '' - # List of supported schemes for this Version Control - schemes = () # type: Tuple[str, ...] - # Iterable of environment variable names to pass to call_subprocess(). - unset_environ = () # type: Tuple[str, ...] - default_arg_rev = None # type: Optional[str] - - def __init__(self, url=None, *args, **kwargs): - self.url = url - super(VersionControl, self).__init__(*args, **kwargs) - - def get_base_rev_args(self, rev): - """ - Return the base revision arguments for a vcs command. - - Args: - rev: the name of a revision to install. Cannot be None. - """ - raise NotImplementedError - - def make_rev_options(self, rev=None, extra_args=None): - """ - Return a RevOptions object. - - Args: - rev: the name of a revision to install. - extra_args: a list of extra options. - """ - return RevOptions(self, rev, extra_args=extra_args) - - def _is_local_repository(self, repo): - """ - posix absolute paths start with os.path.sep, - win32 ones start with drive (like c:\\folder) - """ - drive, tail = os.path.splitdrive(repo) - return repo.startswith(os.path.sep) or drive - - # See issue #1083 for why this method was introduced: - # https://github.com/pypa/pip/issues/1083 - def translate_egg_surname(self, surname): - # For example, Django has branches of the form "stable/1.7.x". - return surname.replace('/', '_') - - def export(self, location): - """ - Export the repository at the url to the destination location - i.e. only download the files, without vcs informations - """ - raise NotImplementedError - - def get_url_rev(self): - """ - Returns the correct repository URL and revision by parsing the given - repository URL - """ - error_message = ( - "Sorry, '%s' is a malformed VCS url. " - "The format is <vcs>+<protocol>://<url>, " - "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp" - ) - assert '+' in self.url, error_message % self.url - url = self.url.split('+', 1)[1] - scheme, netloc, path, query, frag = urllib_parse.urlsplit(url) - rev = None - if '@' in path: - path, rev = path.rsplit('@', 1) - url = urllib_parse.urlunsplit((scheme, netloc, path, query, '')) - return url, rev - - def get_info(self, location): - """ - Returns (url, revision), where both are strings - """ - assert not location.rstrip('/').endswith(self.dirname), \ - 'Bad directory: %s' % location - return self.get_url(location), self.get_revision(location) - - def normalize_url(self, url): - """ - Normalize a URL for comparison by unquoting it and removing any - trailing slash. - """ - return urllib_parse.unquote(url).rstrip('/') - - def compare_urls(self, url1, url2): - """ - Compare two repo URLs for identity, ignoring incidental differences. - """ - return (self.normalize_url(url1) == self.normalize_url(url2)) - - def obtain(self, dest): - """ - Called when installing or updating an editable package, takes the - source path of the checkout. - """ - raise NotImplementedError - - def switch(self, dest, url, rev_options): - """ - Switch the repo at ``dest`` to point to ``URL``. - - Args: - rev_options: a RevOptions object. - """ - raise NotImplementedError - - def update(self, dest, rev_options): - """ - Update an already-existing repo to the given ``rev_options``. - - Args: - rev_options: a RevOptions object. - """ - raise NotImplementedError - - def is_commit_id_equal(self, dest, name): - """ - Return whether the id of the current commit equals the given name. - - Args: - dest: the repository directory. - name: a string name. - """ - raise NotImplementedError - - def check_destination(self, dest, url, rev_options): - """ - Prepare a location to receive a checkout/clone. - - Return True if the location is ready for (and requires) a - checkout/clone, False otherwise. - - Args: - rev_options: a RevOptions object. - """ - checkout = True - prompt = False - rev_display = rev_options.to_display() - if os.path.exists(dest): - checkout = False - if os.path.exists(os.path.join(dest, self.dirname)): - existing_url = self.get_url(dest) - if self.compare_urls(existing_url, url): - logger.debug( - '%s in %s exists, and has correct URL (%s)', - self.repo_name.title(), - display_path(dest), - url, - ) - if not self.is_commit_id_equal(dest, rev_options.rev): - logger.info( - 'Updating %s %s%s', - display_path(dest), - self.repo_name, - rev_display, - ) - self.update(dest, rev_options) - else: - logger.info( - 'Skipping because already up-to-date.') - else: - logger.warning( - '%s %s in %s exists with URL %s', - self.name, - self.repo_name, - display_path(dest), - existing_url, - ) - prompt = ('(s)witch, (i)gnore, (w)ipe, (b)ackup ', - ('s', 'i', 'w', 'b')) - else: - logger.warning( - 'Directory %s already exists, and is not a %s %s.', - dest, - self.name, - self.repo_name, - ) - prompt = ('(i)gnore, (w)ipe, (b)ackup ', ('i', 'w', 'b')) - if prompt: - logger.warning( - 'The plan is to install the %s repository %s', - self.name, - url, - ) - response = ask_path_exists('What to do? %s' % prompt[0], - prompt[1]) - - if response == 's': - logger.info( - 'Switching %s %s to %s%s', - self.repo_name, - display_path(dest), - url, - rev_display, - ) - self.switch(dest, url, rev_options) - elif response == 'i': - # do nothing - pass - elif response == 'w': - logger.warning('Deleting %s', display_path(dest)) - rmtree(dest) - checkout = True - elif response == 'b': - dest_dir = backup_dir(dest) - logger.warning( - 'Backing up %s to %s', display_path(dest), dest_dir, - ) - shutil.move(dest, dest_dir) - checkout = True - elif response == 'a': - sys.exit(-1) - return checkout - - def unpack(self, location): - """ - Clean up current location and download the url repository - (and vcs infos) into location - """ - if os.path.exists(location): - rmtree(location) - self.obtain(location) - - def get_src_requirement(self, dist, location): - """ - Return a string representing the requirement needed to - redownload the files currently present in location, something - like: - {repository_url}@{revision}#egg={project_name}-{version_identifier} - """ - raise NotImplementedError - - def get_url(self, location): - """ - Return the url used at location - Used in get_info or check_destination - """ - raise NotImplementedError - - def get_revision(self, location): - """ - Return the current commit id of the files at the given location. - """ - raise NotImplementedError - - def run_command(self, cmd, show_stdout=True, cwd=None, - on_returncode='raise', - command_desc=None, - extra_environ=None, spinner=None): - """ - Run a VCS subcommand - This is simply a wrapper around call_subprocess that adds the VCS - command name, and checks that the VCS is available - """ - cmd = [self.name] + cmd - try: - return call_subprocess(cmd, show_stdout, cwd, - on_returncode, - command_desc, extra_environ, - unset_environ=self.unset_environ, - spinner=spinner) - except OSError as e: - # errno.ENOENT = no such file or directory - # In other words, the VCS executable isn't available - if e.errno == errno.ENOENT: - raise BadCommand( - 'Cannot find command %r - do you have ' - '%r installed and in your ' - 'PATH?' % (self.name, self.name)) - else: - raise # re-raise exception if a different error occurred - - @classmethod - def controls_location(cls, location): - """ - Check if a location is controlled by the vcs. - It is meant to be overridden to implement smarter detection - mechanisms for specific vcs. - """ - logger.debug('Checking in %s for %s (%s)...', - location, cls.dirname, cls.name) - path = os.path.join(location, cls.dirname) - return os.path.exists(path) - - -def get_src_requirement(dist, location): - version_control = vcs.get_backend_from_location(location) - if version_control: - try: - return version_control().get_src_requirement(dist, - location) - except BadCommand: - logger.warning( - 'cannot determine version of editable source in %s ' - '(%s command not found in path)', - location, - version_control.name, - ) - return dist.as_requirement() - logger.warning( - 'cannot determine version of editable source in %s (is not SVN ' - 'checkout, Git clone, Mercurial clone or Bazaar branch)', - location, - ) - return dist.as_requirement() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/bazaar.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/bazaar.py deleted file mode 100644 index b4e46e0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/bazaar.py +++ /dev/null @@ -1,113 +0,0 @@ -from __future__ import absolute_import - -import logging -import os - -from pip._vendor.six.moves.urllib import parse as urllib_parse - -from pip._internal.download import path_to_url -from pip._internal.utils.misc import display_path, rmtree -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.vcs import VersionControl, vcs - -logger = logging.getLogger(__name__) - - -class Bazaar(VersionControl): - name = 'bzr' - dirname = '.bzr' - repo_name = 'branch' - schemes = ( - 'bzr', 'bzr+http', 'bzr+https', 'bzr+ssh', 'bzr+sftp', 'bzr+ftp', - 'bzr+lp', - ) - - def __init__(self, url=None, *args, **kwargs): - super(Bazaar, self).__init__(url, *args, **kwargs) - # This is only needed for python <2.7.5 - # Register lp but do not expose as a scheme to support bzr+lp. - if getattr(urllib_parse, 'uses_fragment', None): - urllib_parse.uses_fragment.extend(['lp']) - - def get_base_rev_args(self, rev): - return ['-r', rev] - - def export(self, location): - """ - Export the Bazaar repository at the url to the destination location - """ - # Remove the location to make sure Bazaar can export it correctly - if os.path.exists(location): - rmtree(location) - - with TempDirectory(kind="export") as temp_dir: - self.unpack(temp_dir.path) - - self.run_command( - ['export', location], - cwd=temp_dir.path, show_stdout=False, - ) - - def switch(self, dest, url, rev_options): - self.run_command(['switch', url], cwd=dest) - - def update(self, dest, rev_options): - cmd_args = ['pull', '-q'] + rev_options.to_args() - self.run_command(cmd_args, cwd=dest) - - def obtain(self, dest): - url, rev = self.get_url_rev() - rev_options = self.make_rev_options(rev) - if self.check_destination(dest, url, rev_options): - rev_display = rev_options.to_display() - logger.info( - 'Checking out %s%s to %s', - url, - rev_display, - display_path(dest), - ) - cmd_args = ['branch', '-q'] + rev_options.to_args() + [url, dest] - self.run_command(cmd_args) - - def get_url_rev(self): - # hotfix the URL scheme after removing bzr+ from bzr+ssh:// readd it - url, rev = super(Bazaar, self).get_url_rev() - if url.startswith('ssh://'): - url = 'bzr+' + url - return url, rev - - def get_url(self, location): - urls = self.run_command(['info'], show_stdout=False, cwd=location) - for line in urls.splitlines(): - line = line.strip() - for x in ('checkout of branch: ', - 'parent branch: '): - if line.startswith(x): - repo = line.split(x)[1] - if self._is_local_repository(repo): - return path_to_url(repo) - return repo - return None - - def get_revision(self, location): - revision = self.run_command( - ['revno'], show_stdout=False, cwd=location, - ) - return revision.splitlines()[-1] - - def get_src_requirement(self, dist, location): - repo = self.get_url(location) - if not repo: - return None - if not repo.lower().startswith('bzr:'): - repo = 'bzr+' + repo - egg_project_name = dist.egg_name().split('-', 1)[0] - current_rev = self.get_revision(location) - return '%s@%s#egg=%s' % (repo, current_rev, egg_project_name) - - def is_commit_id_equal(self, dest, name): - """Always assume the versions don't match""" - return False - - -vcs.register(Bazaar) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/git.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/git.py deleted file mode 100644 index 33c6806..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/git.py +++ /dev/null @@ -1,311 +0,0 @@ -from __future__ import absolute_import - -import logging -import os.path -import re - -from pip._vendor.packaging.version import parse as parse_version -from pip._vendor.six.moves.urllib import parse as urllib_parse -from pip._vendor.six.moves.urllib import request as urllib_request - -from pip._internal.compat import samefile -from pip._internal.exceptions import BadCommand -from pip._internal.utils.misc import display_path -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.vcs import VersionControl, vcs - -urlsplit = urllib_parse.urlsplit -urlunsplit = urllib_parse.urlunsplit - - -logger = logging.getLogger(__name__) - - -HASH_REGEX = re.compile('[a-fA-F0-9]{40}') - - -def looks_like_hash(sha): - return bool(HASH_REGEX.match(sha)) - - -class Git(VersionControl): - name = 'git' - dirname = '.git' - repo_name = 'clone' - schemes = ( - 'git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file', - ) - # Prevent the user's environment variables from interfering with pip: - # https://github.com/pypa/pip/issues/1130 - unset_environ = ('GIT_DIR', 'GIT_WORK_TREE') - default_arg_rev = 'HEAD' - - def __init__(self, url=None, *args, **kwargs): - - # Works around an apparent Git bug - # (see http://article.gmane.org/gmane.comp.version-control.git/146500) - if url: - scheme, netloc, path, query, fragment = urlsplit(url) - if scheme.endswith('file'): - initial_slashes = path[:-len(path.lstrip('/'))] - newpath = ( - initial_slashes + - urllib_request.url2pathname(path) - .replace('\\', '/').lstrip('/') - ) - url = urlunsplit((scheme, netloc, newpath, query, fragment)) - after_plus = scheme.find('+') + 1 - url = scheme[:after_plus] + urlunsplit( - (scheme[after_plus:], netloc, newpath, query, fragment), - ) - - super(Git, self).__init__(url, *args, **kwargs) - - def get_base_rev_args(self, rev): - return [rev] - - def get_git_version(self): - VERSION_PFX = 'git version ' - version = self.run_command(['version'], show_stdout=False) - if version.startswith(VERSION_PFX): - version = version[len(VERSION_PFX):].split()[0] - else: - version = '' - # get first 3 positions of the git version becasue - # on windows it is x.y.z.windows.t, and this parses as - # LegacyVersion which always smaller than a Version. - version = '.'.join(version.split('.')[:3]) - return parse_version(version) - - def export(self, location): - """Export the Git repository at the url to the destination location""" - if not location.endswith('/'): - location = location + '/' - - with TempDirectory(kind="export") as temp_dir: - self.unpack(temp_dir.path) - self.run_command( - ['checkout-index', '-a', '-f', '--prefix', location], - show_stdout=False, cwd=temp_dir.path - ) - - def get_revision_sha(self, dest, rev): - """ - Return a commit hash for the given revision if it names a remote - branch or tag. Otherwise, return None. - - Args: - dest: the repository directory. - rev: the revision name. - """ - # Pass rev to pre-filter the list. - output = self.run_command(['show-ref', rev], cwd=dest, - show_stdout=False, on_returncode='ignore') - refs = {} - for line in output.strip().splitlines(): - try: - sha, ref = line.split() - except ValueError: - # Include the offending line to simplify troubleshooting if - # this error ever occurs. - raise ValueError('unexpected show-ref line: {!r}'.format(line)) - - refs[ref] = sha - - branch_ref = 'refs/remotes/origin/{}'.format(rev) - tag_ref = 'refs/tags/{}'.format(rev) - - return refs.get(branch_ref) or refs.get(tag_ref) - - def check_rev_options(self, dest, rev_options): - """Check the revision options before checkout. - - Returns a new RevOptions object for the SHA1 of the branch or tag - if found. - - Args: - rev_options: a RevOptions object. - """ - rev = rev_options.arg_rev - sha = self.get_revision_sha(dest, rev) - - if sha is not None: - return rev_options.make_new(sha) - - # Do not show a warning for the common case of something that has - # the form of a Git commit hash. - if not looks_like_hash(rev): - logger.warning( - "Did not find branch or tag '%s', assuming revision or ref.", - rev, - ) - return rev_options - - def is_commit_id_equal(self, dest, name): - """ - Return whether the current commit hash equals the given name. - - Args: - dest: the repository directory. - name: a string name. - """ - if not name: - # Then avoid an unnecessary subprocess call. - return False - - return self.get_revision(dest) == name - - def switch(self, dest, url, rev_options): - self.run_command(['config', 'remote.origin.url', url], cwd=dest) - cmd_args = ['checkout', '-q'] + rev_options.to_args() - self.run_command(cmd_args, cwd=dest) - - self.update_submodules(dest) - - def update(self, dest, rev_options): - # First fetch changes from the default remote - if self.get_git_version() >= parse_version('1.9.0'): - # fetch tags in addition to everything else - self.run_command(['fetch', '-q', '--tags'], cwd=dest) - else: - self.run_command(['fetch', '-q'], cwd=dest) - # Then reset to wanted revision (maybe even origin/master) - rev_options = self.check_rev_options(dest, rev_options) - cmd_args = ['reset', '--hard', '-q'] + rev_options.to_args() - self.run_command(cmd_args, cwd=dest) - #: update submodules - self.update_submodules(dest) - - def obtain(self, dest): - url, rev = self.get_url_rev() - rev_options = self.make_rev_options(rev) - if self.check_destination(dest, url, rev_options): - rev_display = rev_options.to_display() - logger.info( - 'Cloning %s%s to %s', url, rev_display, display_path(dest), - ) - self.run_command(['clone', '-q', url, dest]) - - if rev: - rev_options = self.check_rev_options(dest, rev_options) - # Only do a checkout if the current commit id doesn't match - # the requested revision. - if not self.is_commit_id_equal(dest, rev_options.rev): - rev = rev_options.rev - # Only fetch the revision if it's a ref - if rev.startswith('refs/'): - self.run_command( - ['fetch', '-q', url] + rev_options.to_args(), - cwd=dest, - ) - # Change the revision to the SHA of the ref we fetched - rev = 'FETCH_HEAD' - self.run_command(['checkout', '-q', rev], cwd=dest) - - #: repo may contain submodules - self.update_submodules(dest) - - def get_url(self, location): - """Return URL of the first remote encountered.""" - remotes = self.run_command( - ['config', '--get-regexp', r'remote\..*\.url'], - show_stdout=False, cwd=location, - ) - remotes = remotes.splitlines() - found_remote = remotes[0] - for remote in remotes: - if remote.startswith('remote.origin.url '): - found_remote = remote - break - url = found_remote.split(' ')[1] - return url.strip() - - def get_revision(self, location): - current_rev = self.run_command( - ['rev-parse', 'HEAD'], show_stdout=False, cwd=location, - ) - return current_rev.strip() - - def _get_subdirectory(self, location): - """Return the relative path of setup.py to the git repo root.""" - # find the repo root - git_dir = self.run_command(['rev-parse', '--git-dir'], - show_stdout=False, cwd=location).strip() - if not os.path.isabs(git_dir): - git_dir = os.path.join(location, git_dir) - root_dir = os.path.join(git_dir, '..') - # find setup.py - orig_location = location - while not os.path.exists(os.path.join(location, 'setup.py')): - last_location = location - location = os.path.dirname(location) - if location == last_location: - # We've traversed up to the root of the filesystem without - # finding setup.py - logger.warning( - "Could not find setup.py for directory %s (tried all " - "parent directories)", - orig_location, - ) - return None - # relative path of setup.py to repo root - if samefile(root_dir, location): - return None - return os.path.relpath(location, root_dir) - - def get_src_requirement(self, dist, location): - repo = self.get_url(location) - if not repo.lower().startswith('git:'): - repo = 'git+' + repo - egg_project_name = dist.egg_name().split('-', 1)[0] - if not repo: - return None - current_rev = self.get_revision(location) - req = '%s@%s#egg=%s' % (repo, current_rev, egg_project_name) - subdirectory = self._get_subdirectory(location) - if subdirectory: - req += '&subdirectory=' + subdirectory - return req - - def get_url_rev(self): - """ - Prefixes stub URLs like 'user@hostname:user/repo.git' with 'ssh://'. - That's required because although they use SSH they sometimes doesn't - work with a ssh:// scheme (e.g. Github). But we need a scheme for - parsing. Hence we remove it again afterwards and return it as a stub. - """ - if '://' not in self.url: - assert 'file:' not in self.url - self.url = self.url.replace('git+', 'git+ssh://') - url, rev = super(Git, self).get_url_rev() - url = url.replace('ssh://', '') - else: - url, rev = super(Git, self).get_url_rev() - - return url, rev - - def update_submodules(self, location): - if not os.path.exists(os.path.join(location, '.gitmodules')): - return - self.run_command( - ['submodule', 'update', '--init', '--recursive', '-q'], - cwd=location, - ) - - @classmethod - def controls_location(cls, location): - if super(Git, cls).controls_location(location): - return True - try: - r = cls().run_command(['rev-parse'], - cwd=location, - show_stdout=False, - on_returncode='ignore') - return not r - except BadCommand: - logger.debug("could not determine if %s is under git control " - "because git is not available", location) - return False - - -vcs.register(Git) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/mercurial.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/mercurial.py deleted file mode 100644 index 52a1cce..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/mercurial.py +++ /dev/null @@ -1,105 +0,0 @@ -from __future__ import absolute_import - -import logging -import os - -from pip._vendor.six.moves import configparser - -from pip._internal.download import path_to_url -from pip._internal.utils.misc import display_path -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.vcs import VersionControl, vcs - -logger = logging.getLogger(__name__) - - -class Mercurial(VersionControl): - name = 'hg' - dirname = '.hg' - repo_name = 'clone' - schemes = ('hg', 'hg+http', 'hg+https', 'hg+ssh', 'hg+static-http') - - def get_base_rev_args(self, rev): - return [rev] - - def export(self, location): - """Export the Hg repository at the url to the destination location""" - with TempDirectory(kind="export") as temp_dir: - self.unpack(temp_dir.path) - - self.run_command( - ['archive', location], show_stdout=False, cwd=temp_dir.path - ) - - def switch(self, dest, url, rev_options): - repo_config = os.path.join(dest, self.dirname, 'hgrc') - config = configparser.SafeConfigParser() - try: - config.read(repo_config) - config.set('paths', 'default', url) - with open(repo_config, 'w') as config_file: - config.write(config_file) - except (OSError, configparser.NoSectionError) as exc: - logger.warning( - 'Could not switch Mercurial repository to %s: %s', url, exc, - ) - else: - cmd_args = ['update', '-q'] + rev_options.to_args() - self.run_command(cmd_args, cwd=dest) - - def update(self, dest, rev_options): - self.run_command(['pull', '-q'], cwd=dest) - cmd_args = ['update', '-q'] + rev_options.to_args() - self.run_command(cmd_args, cwd=dest) - - def obtain(self, dest): - url, rev = self.get_url_rev() - rev_options = self.make_rev_options(rev) - if self.check_destination(dest, url, rev_options): - rev_display = rev_options.to_display() - logger.info( - 'Cloning hg %s%s to %s', - url, - rev_display, - display_path(dest), - ) - self.run_command(['clone', '--noupdate', '-q', url, dest]) - cmd_args = ['update', '-q'] + rev_options.to_args() - self.run_command(cmd_args, cwd=dest) - - def get_url(self, location): - url = self.run_command( - ['showconfig', 'paths.default'], - show_stdout=False, cwd=location).strip() - if self._is_local_repository(url): - url = path_to_url(url) - return url.strip() - - def get_revision(self, location): - current_revision = self.run_command( - ['parents', '--template={rev}'], - show_stdout=False, cwd=location).strip() - return current_revision - - def get_revision_hash(self, location): - current_rev_hash = self.run_command( - ['parents', '--template={node}'], - show_stdout=False, cwd=location).strip() - return current_rev_hash - - def get_src_requirement(self, dist, location): - repo = self.get_url(location) - if not repo.lower().startswith('hg:'): - repo = 'hg+' + repo - egg_project_name = dist.egg_name().split('-', 1)[0] - if not repo: - return None - current_rev_hash = self.get_revision_hash(location) - return '%s@%s#egg=%s' % (repo, current_rev_hash, egg_project_name) - - def is_commit_id_equal(self, dest, name): - """Always assume the versions don't match""" - return False - - -vcs.register(Mercurial) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/subversion.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/subversion.py deleted file mode 100644 index 7f369ef..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/vcs/subversion.py +++ /dev/null @@ -1,271 +0,0 @@ -from __future__ import absolute_import - -import logging -import os -import re - -from pip._vendor.six.moves.urllib import parse as urllib_parse - -from pip._internal.index import Link -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import display_path, rmtree -from pip._internal.vcs import VersionControl, vcs - -_svn_xml_url_re = re.compile('url="([^"]+)"') -_svn_rev_re = re.compile(r'committed-rev="(\d+)"') -_svn_url_re = re.compile(r'URL: (.+)') -_svn_revision_re = re.compile(r'Revision: (.+)') -_svn_info_xml_rev_re = re.compile(r'\s*revision="(\d+)"') -_svn_info_xml_url_re = re.compile(r'<url>(.*)</url>') - - -logger = logging.getLogger(__name__) - - -class Subversion(VersionControl): - name = 'svn' - dirname = '.svn' - repo_name = 'checkout' - schemes = ('svn', 'svn+ssh', 'svn+http', 'svn+https', 'svn+svn') - - def get_base_rev_args(self, rev): - return ['-r', rev] - - def get_info(self, location): - """Returns (url, revision), where both are strings""" - assert not location.rstrip('/').endswith(self.dirname), \ - 'Bad directory: %s' % location - output = self.run_command( - ['info', location], - show_stdout=False, - extra_environ={'LANG': 'C'}, - ) - match = _svn_url_re.search(output) - if not match: - logger.warning( - 'Cannot determine URL of svn checkout %s', - display_path(location), - ) - logger.debug('Output that cannot be parsed: \n%s', output) - return None, None - url = match.group(1).strip() - match = _svn_revision_re.search(output) - if not match: - logger.warning( - 'Cannot determine revision of svn checkout %s', - display_path(location), - ) - logger.debug('Output that cannot be parsed: \n%s', output) - return url, None - return url, match.group(1) - - def export(self, location): - """Export the svn repository at the url to the destination location""" - url, rev = self.get_url_rev() - rev_options = get_rev_options(self, url, rev) - url = self.remove_auth_from_url(url) - logger.info('Exporting svn repository %s to %s', url, location) - with indent_log(): - if os.path.exists(location): - # Subversion doesn't like to check out over an existing - # directory --force fixes this, but was only added in svn 1.5 - rmtree(location) - cmd_args = ['export'] + rev_options.to_args() + [url, location] - self.run_command(cmd_args, show_stdout=False) - - def switch(self, dest, url, rev_options): - cmd_args = ['switch'] + rev_options.to_args() + [url, dest] - self.run_command(cmd_args) - - def update(self, dest, rev_options): - cmd_args = ['update'] + rev_options.to_args() + [dest] - self.run_command(cmd_args) - - def obtain(self, dest): - url, rev = self.get_url_rev() - rev_options = get_rev_options(self, url, rev) - url = self.remove_auth_from_url(url) - if self.check_destination(dest, url, rev_options): - rev_display = rev_options.to_display() - logger.info( - 'Checking out %s%s to %s', - url, - rev_display, - display_path(dest), - ) - cmd_args = ['checkout', '-q'] + rev_options.to_args() + [url, dest] - self.run_command(cmd_args) - - def get_location(self, dist, dependency_links): - for url in dependency_links: - egg_fragment = Link(url).egg_fragment - if not egg_fragment: - continue - if '-' in egg_fragment: - # FIXME: will this work when a package has - in the name? - key = '-'.join(egg_fragment.split('-')[:-1]).lower() - else: - key = egg_fragment - if key == dist.key: - return url.split('#', 1)[0] - return None - - def get_revision(self, location): - """ - Return the maximum revision for all files under a given location - """ - # Note: taken from setuptools.command.egg_info - revision = 0 - - for base, dirs, files in os.walk(location): - if self.dirname not in dirs: - dirs[:] = [] - continue # no sense walking uncontrolled subdirs - dirs.remove(self.dirname) - entries_fn = os.path.join(base, self.dirname, 'entries') - if not os.path.exists(entries_fn): - # FIXME: should we warn? - continue - - dirurl, localrev = self._get_svn_url_rev(base) - - if base == location: - base = dirurl + '/' # save the root url - elif not dirurl or not dirurl.startswith(base): - dirs[:] = [] - continue # not part of the same svn tree, skip it - revision = max(revision, localrev) - return revision - - def get_url_rev(self): - # hotfix the URL scheme after removing svn+ from svn+ssh:// readd it - url, rev = super(Subversion, self).get_url_rev() - if url.startswith('ssh://'): - url = 'svn+' + url - return url, rev - - def get_url(self, location): - # In cases where the source is in a subdirectory, not alongside - # setup.py we have to look up in the location until we find a real - # setup.py - orig_location = location - while not os.path.exists(os.path.join(location, 'setup.py')): - last_location = location - location = os.path.dirname(location) - if location == last_location: - # We've traversed up to the root of the filesystem without - # finding setup.py - logger.warning( - "Could not find setup.py for directory %s (tried all " - "parent directories)", - orig_location, - ) - return None - - return self._get_svn_url_rev(location)[0] - - def _get_svn_url_rev(self, location): - from pip._internal.exceptions import InstallationError - - entries_path = os.path.join(location, self.dirname, 'entries') - if os.path.exists(entries_path): - with open(entries_path) as f: - data = f.read() - else: # subversion >= 1.7 does not have the 'entries' file - data = '' - - if (data.startswith('8') or - data.startswith('9') or - data.startswith('10')): - data = list(map(str.splitlines, data.split('\n\x0c\n'))) - del data[0][0] # get rid of the '8' - url = data[0][3] - revs = [int(d[9]) for d in data if len(d) > 9 and d[9]] + [0] - elif data.startswith('<?xml'): - match = _svn_xml_url_re.search(data) - if not match: - raise ValueError('Badly formatted data: %r' % data) - url = match.group(1) # get repository URL - revs = [int(m.group(1)) for m in _svn_rev_re.finditer(data)] + [0] - else: - try: - # subversion >= 1.7 - xml = self.run_command( - ['info', '--xml', location], - show_stdout=False, - ) - url = _svn_info_xml_url_re.search(xml).group(1) - revs = [ - int(m.group(1)) for m in _svn_info_xml_rev_re.finditer(xml) - ] - except InstallationError: - url, revs = None, [] - - if revs: - rev = max(revs) - else: - rev = 0 - - return url, rev - - def get_src_requirement(self, dist, location): - repo = self.get_url(location) - if repo is None: - return None - # FIXME: why not project name? - egg_project_name = dist.egg_name().split('-', 1)[0] - rev = self.get_revision(location) - return 'svn+%s@%s#egg=%s' % (repo, rev, egg_project_name) - - def is_commit_id_equal(self, dest, name): - """Always assume the versions don't match""" - return False - - @staticmethod - def remove_auth_from_url(url): - # Return a copy of url with 'username:password@' removed. - # username/pass params are passed to subversion through flags - # and are not recognized in the url. - - # parsed url - purl = urllib_parse.urlsplit(url) - stripped_netloc = \ - purl.netloc.split('@')[-1] - - # stripped url - url_pieces = ( - purl.scheme, stripped_netloc, purl.path, purl.query, purl.fragment - ) - surl = urllib_parse.urlunsplit(url_pieces) - return surl - - -def get_rev_options(vcs, url, rev): - """ - Return a RevOptions object. - """ - r = urllib_parse.urlsplit(url) - if hasattr(r, 'username'): - # >= Python-2.5 - username, password = r.username, r.password - else: - netloc = r[1] - if '@' in netloc: - auth = netloc.split('@')[0] - if ':' in auth: - username, password = auth.split(':', 1) - else: - username, password = auth, None - else: - username, password = None, None - - extra_args = [] - if username: - extra_args += ['--username', username] - if password: - extra_args += ['--password', password] - - return vcs.make_rev_options(rev, extra_args=extra_args) - - -vcs.register(Subversion) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/wheel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/wheel.py deleted file mode 100644 index c71f17d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_internal/wheel.py +++ /dev/null @@ -1,817 +0,0 @@ -""" -Support for installing and building the "wheel" binary package format. -""" -from __future__ import absolute_import - -import collections -import compileall -import copy -import csv -import hashlib -import logging -import os.path -import re -import shutil -import stat -import sys -import warnings -from base64 import urlsafe_b64encode -from email.parser import Parser - -from pip._vendor import pkg_resources -from pip._vendor.distlib.scripts import ScriptMaker -from pip._vendor.packaging.utils import canonicalize_name -from pip._vendor.six import StringIO - -from pip._internal import pep425tags -from pip._internal.build_env import BuildEnvironment -from pip._internal.download import path_to_url, unpack_url -from pip._internal.exceptions import ( - InstallationError, InvalidWheelFilename, UnsupportedWheel, -) -from pip._internal.locations import ( - PIP_DELETE_MARKER_FILENAME, distutils_scheme, -) -from pip._internal.utils.logging import indent_log -from pip._internal.utils.misc import ( - call_subprocess, captured_stdout, ensure_dir, read_chunks, -) -from pip._internal.utils.setuptools_build import SETUPTOOLS_SHIM -from pip._internal.utils.temp_dir import TempDirectory -from pip._internal.utils.typing import MYPY_CHECK_RUNNING -from pip._internal.utils.ui import open_spinner - -if MYPY_CHECK_RUNNING: - from typing import Dict, List, Optional - -wheel_ext = '.whl' - -VERSION_COMPATIBLE = (1, 0) - - -logger = logging.getLogger(__name__) - - -def rehash(path, algo='sha256', blocksize=1 << 20): - """Return (hash, length) for path using hashlib.new(algo)""" - h = hashlib.new(algo) - length = 0 - with open(path, 'rb') as f: - for block in read_chunks(f, size=blocksize): - length += len(block) - h.update(block) - digest = 'sha256=' + urlsafe_b64encode( - h.digest() - ).decode('latin1').rstrip('=') - return (digest, length) - - -def open_for_csv(name, mode): - if sys.version_info[0] < 3: - nl = {} - bin = 'b' - else: - nl = {'newline': ''} - bin = '' - return open(name, mode + bin, **nl) - - -def fix_script(path): - """Replace #!python with #!/path/to/python - Return True if file was changed.""" - # XXX RECORD hashes will need to be updated - if os.path.isfile(path): - with open(path, 'rb') as script: - firstline = script.readline() - if not firstline.startswith(b'#!python'): - return False - exename = sys.executable.encode(sys.getfilesystemencoding()) - firstline = b'#!' + exename + os.linesep.encode("ascii") - rest = script.read() - with open(path, 'wb') as script: - script.write(firstline) - script.write(rest) - return True - - -dist_info_re = re.compile(r"""^(?P<namever>(?P<name>.+?)(-(?P<ver>.+?))?) - \.dist-info$""", re.VERBOSE) - - -def root_is_purelib(name, wheeldir): - """ - Return True if the extracted wheel in wheeldir should go into purelib. - """ - name_folded = name.replace("-", "_") - for item in os.listdir(wheeldir): - match = dist_info_re.match(item) - if match and match.group('name') == name_folded: - with open(os.path.join(wheeldir, item, 'WHEEL')) as wheel: - for line in wheel: - line = line.lower().rstrip() - if line == "root-is-purelib: true": - return True - return False - - -def get_entrypoints(filename): - if not os.path.exists(filename): - return {}, {} - - # This is done because you can pass a string to entry_points wrappers which - # means that they may or may not be valid INI files. The attempt here is to - # strip leading and trailing whitespace in order to make them valid INI - # files. - with open(filename) as fp: - data = StringIO() - for line in fp: - data.write(line.strip()) - data.write("\n") - data.seek(0) - - # get the entry points and then the script names - entry_points = pkg_resources.EntryPoint.parse_map(data) - console = entry_points.get('console_scripts', {}) - gui = entry_points.get('gui_scripts', {}) - - def _split_ep(s): - """get the string representation of EntryPoint, remove space and split - on '='""" - return str(s).replace(" ", "").split("=") - - # convert the EntryPoint objects into strings with module:function - console = dict(_split_ep(v) for v in console.values()) - gui = dict(_split_ep(v) for v in gui.values()) - return console, gui - - -def message_about_scripts_not_on_PATH(scripts): - # type: (List[str]) -> Optional[str] - """Determine if any scripts are not on PATH and format a warning. - - Returns a warning message if one or more scripts are not on PATH, - otherwise None. - """ - if not scripts: - return None - - # Group scripts by the path they were installed in - grouped_by_dir = collections.defaultdict(set) # type: Dict[str, set] - for destfile in scripts: - parent_dir = os.path.dirname(destfile) - script_name = os.path.basename(destfile) - grouped_by_dir[parent_dir].add(script_name) - - # We don't want to warn for directories that are on PATH. - not_warn_dirs = [ - os.path.normcase(i) for i in os.environ["PATH"].split(os.pathsep) - ] - # If an executable sits with sys.executable, we don't warn for it. - # This covers the case of venv invocations without activating the venv. - not_warn_dirs.append(os.path.normcase(os.path.dirname(sys.executable))) - warn_for = { - parent_dir: scripts for parent_dir, scripts in grouped_by_dir.items() - if os.path.normcase(parent_dir) not in not_warn_dirs - } - if not warn_for: - return None - - # Format a message - msg_lines = [] - for parent_dir, scripts in warn_for.items(): - scripts = sorted(scripts) - if len(scripts) == 1: - start_text = "script {} is".format(scripts[0]) - else: - start_text = "scripts {} are".format( - ", ".join(scripts[:-1]) + " and " + scripts[-1] - ) - - msg_lines.append( - "The {} installed in '{}' which is not on PATH." - .format(start_text, parent_dir) - ) - - last_line_fmt = ( - "Consider adding {} to PATH or, if you prefer " - "to suppress this warning, use --no-warn-script-location." - ) - if len(msg_lines) == 1: - msg_lines.append(last_line_fmt.format("this directory")) - else: - msg_lines.append(last_line_fmt.format("these directories")) - - # Returns the formatted multiline message - return "\n".join(msg_lines) - - -def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None, - pycompile=True, scheme=None, isolated=False, prefix=None, - warn_script_location=True): - """Install a wheel""" - - if not scheme: - scheme = distutils_scheme( - name, user=user, home=home, root=root, isolated=isolated, - prefix=prefix, - ) - - if root_is_purelib(name, wheeldir): - lib_dir = scheme['purelib'] - else: - lib_dir = scheme['platlib'] - - info_dir = [] - data_dirs = [] - source = wheeldir.rstrip(os.path.sep) + os.path.sep - - # Record details of the files moved - # installed = files copied from the wheel to the destination - # changed = files changed while installing (scripts #! line typically) - # generated = files newly generated during the install (script wrappers) - installed = {} - changed = set() - generated = [] - - # Compile all of the pyc files that we're going to be installing - if pycompile: - with captured_stdout() as stdout: - with warnings.catch_warnings(): - warnings.filterwarnings('ignore') - compileall.compile_dir(source, force=True, quiet=True) - logger.debug(stdout.getvalue()) - - def normpath(src, p): - return os.path.relpath(src, p).replace(os.path.sep, '/') - - def record_installed(srcfile, destfile, modified=False): - """Map archive RECORD paths to installation RECORD paths.""" - oldpath = normpath(srcfile, wheeldir) - newpath = normpath(destfile, lib_dir) - installed[oldpath] = newpath - if modified: - changed.add(destfile) - - def clobber(source, dest, is_base, fixer=None, filter=None): - ensure_dir(dest) # common for the 'include' path - - for dir, subdirs, files in os.walk(source): - basedir = dir[len(source):].lstrip(os.path.sep) - destdir = os.path.join(dest, basedir) - if is_base and basedir.split(os.path.sep, 1)[0].endswith('.data'): - continue - for s in subdirs: - destsubdir = os.path.join(dest, basedir, s) - if is_base and basedir == '' and destsubdir.endswith('.data'): - data_dirs.append(s) - continue - elif (is_base and - s.endswith('.dist-info') and - canonicalize_name(s).startswith( - canonicalize_name(req.name))): - assert not info_dir, ('Multiple .dist-info directories: ' + - destsubdir + ', ' + - ', '.join(info_dir)) - info_dir.append(destsubdir) - for f in files: - # Skip unwanted files - if filter and filter(f): - continue - srcfile = os.path.join(dir, f) - destfile = os.path.join(dest, basedir, f) - # directory creation is lazy and after the file filtering above - # to ensure we don't install empty dirs; empty dirs can't be - # uninstalled. - ensure_dir(destdir) - - # We use copyfile (not move, copy, or copy2) to be extra sure - # that we are not moving directories over (copyfile fails for - # directories) as well as to ensure that we are not copying - # over any metadata because we want more control over what - # metadata we actually copy over. - shutil.copyfile(srcfile, destfile) - - # Copy over the metadata for the file, currently this only - # includes the atime and mtime. - st = os.stat(srcfile) - if hasattr(os, "utime"): - os.utime(destfile, (st.st_atime, st.st_mtime)) - - # If our file is executable, then make our destination file - # executable. - if os.access(srcfile, os.X_OK): - st = os.stat(srcfile) - permissions = ( - st.st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH - ) - os.chmod(destfile, permissions) - - changed = False - if fixer: - changed = fixer(destfile) - record_installed(srcfile, destfile, changed) - - clobber(source, lib_dir, True) - - assert info_dir, "%s .dist-info directory not found" % req - - # Get the defined entry points - ep_file = os.path.join(info_dir[0], 'entry_points.txt') - console, gui = get_entrypoints(ep_file) - - def is_entrypoint_wrapper(name): - # EP, EP.exe and EP-script.py are scripts generated for - # entry point EP by setuptools - if name.lower().endswith('.exe'): - matchname = name[:-4] - elif name.lower().endswith('-script.py'): - matchname = name[:-10] - elif name.lower().endswith(".pya"): - matchname = name[:-4] - else: - matchname = name - # Ignore setuptools-generated scripts - return (matchname in console or matchname in gui) - - for datadir in data_dirs: - fixer = None - filter = None - for subdir in os.listdir(os.path.join(wheeldir, datadir)): - fixer = None - if subdir == 'scripts': - fixer = fix_script - filter = is_entrypoint_wrapper - source = os.path.join(wheeldir, datadir, subdir) - dest = scheme[subdir] - clobber(source, dest, False, fixer=fixer, filter=filter) - - maker = ScriptMaker(None, scheme['scripts']) - - # Ensure old scripts are overwritten. - # See https://github.com/pypa/pip/issues/1800 - maker.clobber = True - - # Ensure we don't generate any variants for scripts because this is almost - # never what somebody wants. - # See https://bitbucket.org/pypa/distlib/issue/35/ - maker.variants = {''} - - # This is required because otherwise distlib creates scripts that are not - # executable. - # See https://bitbucket.org/pypa/distlib/issue/32/ - maker.set_mode = True - - # Simplify the script and fix the fact that the default script swallows - # every single stack trace. - # See https://bitbucket.org/pypa/distlib/issue/34/ - # See https://bitbucket.org/pypa/distlib/issue/33/ - def _get_script_text(entry): - if entry.suffix is None: - raise InstallationError( - "Invalid script entry point: %s for req: %s - A callable " - "suffix is required. Cf https://packaging.python.org/en/" - "latest/distributing.html#console-scripts for more " - "information." % (entry, req) - ) - return maker.script_template % { - "module": entry.prefix, - "import_name": entry.suffix.split(".")[0], - "func": entry.suffix, - } - - maker._get_script_text = _get_script_text - maker.script_template = r"""# -*- coding: utf-8 -*- -import re -import sys - -from %(module)s import %(import_name)s - -if __name__ == '__main__': - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - sys.exit(%(func)s()) -""" - - # Special case pip and setuptools to generate versioned wrappers - # - # The issue is that some projects (specifically, pip and setuptools) use - # code in setup.py to create "versioned" entry points - pip2.7 on Python - # 2.7, pip3.3 on Python 3.3, etc. But these entry points are baked into - # the wheel metadata at build time, and so if the wheel is installed with - # a *different* version of Python the entry points will be wrong. The - # correct fix for this is to enhance the metadata to be able to describe - # such versioned entry points, but that won't happen till Metadata 2.0 is - # available. - # In the meantime, projects using versioned entry points will either have - # incorrect versioned entry points, or they will not be able to distribute - # "universal" wheels (i.e., they will need a wheel per Python version). - # - # Because setuptools and pip are bundled with _ensurepip and virtualenv, - # we need to use universal wheels. So, as a stopgap until Metadata 2.0, we - # override the versioned entry points in the wheel and generate the - # correct ones. This code is purely a short-term measure until Metadata 2.0 - # is available. - # - # To add the level of hack in this section of code, in order to support - # ensurepip this code will look for an ``ENSUREPIP_OPTIONS`` environment - # variable which will control which version scripts get installed. - # - # ENSUREPIP_OPTIONS=altinstall - # - Only pipX.Y and easy_install-X.Y will be generated and installed - # ENSUREPIP_OPTIONS=install - # - pipX.Y, pipX, easy_install-X.Y will be generated and installed. Note - # that this option is technically if ENSUREPIP_OPTIONS is set and is - # not altinstall - # DEFAULT - # - The default behavior is to install pip, pipX, pipX.Y, easy_install - # and easy_install-X.Y. - pip_script = console.pop('pip', None) - if pip_script: - if "ENSUREPIP_OPTIONS" not in os.environ: - spec = 'pip = ' + pip_script - generated.extend(maker.make(spec)) - - if os.environ.get("ENSUREPIP_OPTIONS", "") != "altinstall": - spec = 'pip%s = %s' % (sys.version[:1], pip_script) - generated.extend(maker.make(spec)) - - spec = 'pip%s = %s' % (sys.version[:3], pip_script) - generated.extend(maker.make(spec)) - # Delete any other versioned pip entry points - pip_ep = [k for k in console if re.match(r'pip(\d(\.\d)?)?$', k)] - for k in pip_ep: - del console[k] - easy_install_script = console.pop('easy_install', None) - if easy_install_script: - if "ENSUREPIP_OPTIONS" not in os.environ: - spec = 'easy_install = ' + easy_install_script - generated.extend(maker.make(spec)) - - spec = 'easy_install-%s = %s' % (sys.version[:3], easy_install_script) - generated.extend(maker.make(spec)) - # Delete any other versioned easy_install entry points - easy_install_ep = [ - k for k in console if re.match(r'easy_install(-\d\.\d)?$', k) - ] - for k in easy_install_ep: - del console[k] - - # Generate the console and GUI entry points specified in the wheel - if len(console) > 0: - generated_console_scripts = maker.make_multiple( - ['%s = %s' % kv for kv in console.items()] - ) - generated.extend(generated_console_scripts) - - if warn_script_location: - msg = message_about_scripts_not_on_PATH(generated_console_scripts) - if msg is not None: - logger.warn(msg) - - if len(gui) > 0: - generated.extend( - maker.make_multiple( - ['%s = %s' % kv for kv in gui.items()], - {'gui': True} - ) - ) - - # Record pip as the installer - installer = os.path.join(info_dir[0], 'INSTALLER') - temp_installer = os.path.join(info_dir[0], 'INSTALLER.pip') - with open(temp_installer, 'wb') as installer_file: - installer_file.write(b'pip\n') - shutil.move(temp_installer, installer) - generated.append(installer) - - # Record details of all files installed - record = os.path.join(info_dir[0], 'RECORD') - temp_record = os.path.join(info_dir[0], 'RECORD.pip') - with open_for_csv(record, 'r') as record_in: - with open_for_csv(temp_record, 'w+') as record_out: - reader = csv.reader(record_in) - writer = csv.writer(record_out) - for row in reader: - row[0] = installed.pop(row[0], row[0]) - if row[0] in changed: - row[1], row[2] = rehash(row[0]) - writer.writerow(row) - for f in generated: - h, l = rehash(f) - writer.writerow((normpath(f, lib_dir), h, l)) - for f in installed: - writer.writerow((installed[f], '', '')) - shutil.move(temp_record, record) - - -def wheel_version(source_dir): - """ - Return the Wheel-Version of an extracted wheel, if possible. - - Otherwise, return False if we couldn't parse / extract it. - """ - try: - dist = [d for d in pkg_resources.find_on_path(None, source_dir)][0] - - wheel_data = dist.get_metadata('WHEEL') - wheel_data = Parser().parsestr(wheel_data) - - version = wheel_data['Wheel-Version'].strip() - version = tuple(map(int, version.split('.'))) - return version - except: - return False - - -def check_compatibility(version, name): - """ - Raises errors or warns if called with an incompatible Wheel-Version. - - Pip should refuse to install a Wheel-Version that's a major series - ahead of what it's compatible with (e.g 2.0 > 1.1); and warn when - installing a version only minor version ahead (e.g 1.2 > 1.1). - - version: a 2-tuple representing a Wheel-Version (Major, Minor) - name: name of wheel or package to raise exception about - - :raises UnsupportedWheel: when an incompatible Wheel-Version is given - """ - if not version: - raise UnsupportedWheel( - "%s is in an unsupported or invalid wheel" % name - ) - if version[0] > VERSION_COMPATIBLE[0]: - raise UnsupportedWheel( - "%s's Wheel-Version (%s) is not compatible with this version " - "of pip" % (name, '.'.join(map(str, version))) - ) - elif version > VERSION_COMPATIBLE: - logger.warning( - 'Installing from a newer Wheel-Version (%s)', - '.'.join(map(str, version)), - ) - - -class Wheel(object): - """A wheel file""" - - # TODO: maybe move the install code into this class - - wheel_file_re = re.compile( - r"""^(?P<namever>(?P<name>.+?)-(?P<ver>.*?)) - ((-(?P<build>\d[^-]*?))?-(?P<pyver>.+?)-(?P<abi>.+?)-(?P<plat>.+?) - \.whl|\.dist-info)$""", - re.VERBOSE - ) - - def __init__(self, filename): - """ - :raises InvalidWheelFilename: when the filename is invalid for a wheel - """ - wheel_info = self.wheel_file_re.match(filename) - if not wheel_info: - raise InvalidWheelFilename( - "%s is not a valid wheel filename." % filename - ) - self.filename = filename - self.name = wheel_info.group('name').replace('_', '-') - # we'll assume "_" means "-" due to wheel naming scheme - # (https://github.com/pypa/pip/issues/1150) - self.version = wheel_info.group('ver').replace('_', '-') - self.build_tag = wheel_info.group('build') - self.pyversions = wheel_info.group('pyver').split('.') - self.abis = wheel_info.group('abi').split('.') - self.plats = wheel_info.group('plat').split('.') - - # All the tag combinations from this file - self.file_tags = { - (x, y, z) for x in self.pyversions - for y in self.abis for z in self.plats - } - - def support_index_min(self, tags=None): - """ - Return the lowest index that one of the wheel's file_tag combinations - achieves in the supported_tags list e.g. if there are 8 supported tags, - and one of the file tags is first in the list, then return 0. Returns - None is the wheel is not supported. - """ - if tags is None: # for mock - tags = pep425tags.get_supported() - indexes = [tags.index(c) for c in self.file_tags if c in tags] - return min(indexes) if indexes else None - - def supported(self, tags=None): - """Is this wheel supported on this system?""" - if tags is None: # for mock - tags = pep425tags.get_supported() - return bool(set(tags).intersection(self.file_tags)) - - -class WheelBuilder(object): - """Build wheels from a RequirementSet.""" - - def __init__(self, finder, preparer, wheel_cache, - build_options=None, global_options=None, no_clean=False): - self.finder = finder - self.preparer = preparer - self.wheel_cache = wheel_cache - - self._wheel_dir = preparer.wheel_download_dir - - self.build_options = build_options or [] - self.global_options = global_options or [] - self.no_clean = no_clean - - def _build_one(self, req, output_dir, python_tag=None): - """Build one wheel. - - :return: The filename of the built wheel, or None if the build failed. - """ - # Install build deps into temporary directory (PEP 518) - with req.build_env: - return self._build_one_inside_env(req, output_dir, - python_tag=python_tag) - - def _build_one_inside_env(self, req, output_dir, python_tag=None): - with TempDirectory(kind="wheel") as temp_dir: - if self.__build_one(req, temp_dir.path, python_tag=python_tag): - try: - wheel_name = os.listdir(temp_dir.path)[0] - wheel_path = os.path.join(output_dir, wheel_name) - shutil.move( - os.path.join(temp_dir.path, wheel_name), wheel_path - ) - logger.info('Stored in directory: %s', output_dir) - return wheel_path - except: - pass - # Ignore return, we can't do anything else useful. - self._clean_one(req) - return None - - def _base_setup_args(self, req): - # NOTE: Eventually, we'd want to also -S to the flags here, when we're - # isolating. Currently, it breaks Python in virtualenvs, because it - # relies on site.py to find parts of the standard library outside the - # virtualenv. - return [ - sys.executable, '-u', '-c', - SETUPTOOLS_SHIM % req.setup_py - ] + list(self.global_options) - - def __build_one(self, req, tempd, python_tag=None): - base_args = self._base_setup_args(req) - - spin_message = 'Running setup.py bdist_wheel for %s' % (req.name,) - with open_spinner(spin_message) as spinner: - logger.debug('Destination directory: %s', tempd) - wheel_args = base_args + ['bdist_wheel', '-d', tempd] \ - + self.build_options - - if python_tag is not None: - wheel_args += ["--python-tag", python_tag] - - try: - call_subprocess(wheel_args, cwd=req.setup_py_dir, - show_stdout=False, spinner=spinner) - return True - except: - spinner.finish("error") - logger.error('Failed building wheel for %s', req.name) - return False - - def _clean_one(self, req): - base_args = self._base_setup_args(req) - - logger.info('Running setup.py clean for %s', req.name) - clean_args = base_args + ['clean', '--all'] - try: - call_subprocess(clean_args, cwd=req.source_dir, show_stdout=False) - return True - except: - logger.error('Failed cleaning build dir for %s', req.name) - return False - - def build(self, requirements, session, autobuilding=False): - """Build wheels. - - :param unpack: If True, replace the sdist we built from with the - newly built wheel, in preparation for installation. - :return: True if all the wheels built correctly. - """ - from pip._internal import index - - building_is_possible = self._wheel_dir or ( - autobuilding and self.wheel_cache.cache_dir - ) - assert building_is_possible - - buildset = [] - for req in requirements: - if req.constraint: - continue - if req.is_wheel: - if not autobuilding: - logger.info( - 'Skipping %s, due to already being wheel.', req.name, - ) - elif autobuilding and req.editable: - pass - elif autobuilding and not req.source_dir: - pass - elif autobuilding and req.link and not req.link.is_artifact: - # VCS checkout. Build wheel just for this run. - buildset.append((req, True)) - else: - ephem_cache = False - if autobuilding: - link = req.link - base, ext = link.splitext() - if index.egg_info_matches(base, None, link) is None: - # E.g. local directory. Build wheel just for this run. - ephem_cache = True - if "binary" not in index.fmt_ctl_formats( - self.finder.format_control, - canonicalize_name(req.name)): - logger.info( - "Skipping bdist_wheel for %s, due to binaries " - "being disabled for it.", req.name, - ) - continue - buildset.append((req, ephem_cache)) - - if not buildset: - return True - - # Build the wheels. - logger.info( - 'Building wheels for collected packages: %s', - ', '.join([req.name for (req, _) in buildset]), - ) - _cache = self.wheel_cache # shorter name - with indent_log(): - build_success, build_failure = [], [] - for req, ephem in buildset: - python_tag = None - if autobuilding: - python_tag = pep425tags.implementation_tag - if ephem: - output_dir = _cache.get_ephem_path_for_link(req.link) - else: - output_dir = _cache.get_path_for_link(req.link) - try: - ensure_dir(output_dir) - except OSError as e: - logger.warning("Building wheel for %s failed: %s", - req.name, e) - build_failure.append(req) - continue - else: - output_dir = self._wheel_dir - wheel_file = self._build_one( - req, output_dir, - python_tag=python_tag, - ) - if wheel_file: - build_success.append(req) - if autobuilding: - # XXX: This is mildly duplicative with prepare_files, - # but not close enough to pull out to a single common - # method. - # The code below assumes temporary source dirs - - # prevent it doing bad things. - if req.source_dir and not os.path.exists(os.path.join( - req.source_dir, PIP_DELETE_MARKER_FILENAME)): - raise AssertionError( - "bad source dir - missing marker") - # Delete the source we built the wheel from - req.remove_temporary_source() - # set the build directory again - name is known from - # the work prepare_files did. - req.source_dir = req.build_location( - self.preparer.build_dir - ) - # Update the link for this. - req.link = index.Link(path_to_url(wheel_file)) - assert req.link.is_wheel - # extract the wheel into the dir - unpack_url( - req.link, req.source_dir, None, False, - session=session, - ) - else: - build_failure.append(req) - - # notify success/failure - if build_success: - logger.info( - 'Successfully built %s', - ' '.join([req.name for req in build_success]), - ) - if build_failure: - logger.info( - 'Failed to build %s', - ' '.join([req.name for req in build_failure]), - ) - # Return True if all builds were successful - return len(build_failure) == 0 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/__init__.py deleted file mode 100644 index 1387dba..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/__init__.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -pip._vendor is for vendoring dependencies of pip to prevent needing pip to -depend on something external. - -Files inside of pip._vendor should be considered immutable and should only be -updated to versions from upstream. -""" -from __future__ import absolute_import - -import glob -import os.path -import sys - -# Downstream redistributors which have debundled our dependencies should also -# patch this value to be true. This will trigger the additional patching -# to cause things like "six" to be available as pip. -DEBUNDLED = False - -# By default, look in this directory for a bunch of .whl files which we will -# add to the beginning of sys.path before attempting to import anything. This -# is done to support downstream re-distributors like Debian and Fedora who -# wish to create their own Wheels for our dependencies to aid in debundling. -WHEEL_DIR = os.path.abspath(os.path.dirname(__file__)) - - -# Define a small helper function to alias our vendored modules to the real ones -# if the vendored ones do not exist. This idea of this was taken from -# https://github.com/kennethreitz/requests/pull/2567. -def vendored(modulename): - vendored_name = "{0}.{1}".format(__name__, modulename) - - try: - __import__(vendored_name, globals(), locals(), level=0) - except ImportError: - try: - __import__(modulename, globals(), locals(), level=0) - except ImportError: - # We can just silently allow import failures to pass here. If we - # got to this point it means that ``import pip._vendor.whatever`` - # failed and so did ``import whatever``. Since we're importing this - # upfront in an attempt to alias imports, not erroring here will - # just mean we get a regular import error whenever pip *actually* - # tries to import one of these modules to use it, which actually - # gives us a better error message than we would have otherwise - # gotten. - pass - else: - sys.modules[vendored_name] = sys.modules[modulename] - base, head = vendored_name.rsplit(".", 1) - setattr(sys.modules[base], head, sys.modules[modulename]) - - -# If we're operating in a debundled setup, then we want to go ahead and trigger -# the aliasing of our vendored libraries as well as looking for wheels to add -# to our sys.path. This will cause all of this code to be a no-op typically -# however downstream redistributors can enable it in a consistent way across -# all platforms. -if DEBUNDLED: - # Actually look inside of WHEEL_DIR to find .whl files and add them to the - # front of our sys.path. - sys.path[:] = glob.glob(os.path.join(WHEEL_DIR, "*.whl")) + sys.path - - # Actually alias all of our vendored dependencies. - vendored("cachecontrol") - vendored("colorama") - vendored("distlib") - vendored("distro") - vendored("html5lib") - vendored("lockfile") - vendored("six") - vendored("six.moves") - vendored("six.moves.urllib") - vendored("six.moves.urllib.parse") - vendored("packaging") - vendored("packaging.version") - vendored("packaging.specifiers") - vendored("pkg_resources") - vendored("progress") - vendored("pytoml") - vendored("retrying") - vendored("requests") - vendored("requests.packages") - vendored("requests.packages.urllib3") - vendored("requests.packages.urllib3._collections") - vendored("requests.packages.urllib3.connection") - vendored("requests.packages.urllib3.connectionpool") - vendored("requests.packages.urllib3.contrib") - vendored("requests.packages.urllib3.contrib.ntlmpool") - vendored("requests.packages.urllib3.contrib.pyopenssl") - vendored("requests.packages.urllib3.exceptions") - vendored("requests.packages.urllib3.fields") - vendored("requests.packages.urllib3.filepost") - vendored("requests.packages.urllib3.packages") - vendored("requests.packages.urllib3.packages.ordered_dict") - vendored("requests.packages.urllib3.packages.six") - vendored("requests.packages.urllib3.packages.ssl_match_hostname") - vendored("requests.packages.urllib3.packages.ssl_match_hostname." - "_implementation") - vendored("requests.packages.urllib3.poolmanager") - vendored("requests.packages.urllib3.request") - vendored("requests.packages.urllib3.response") - vendored("requests.packages.urllib3.util") - vendored("requests.packages.urllib3.util.connection") - vendored("requests.packages.urllib3.util.request") - vendored("requests.packages.urllib3.util.response") - vendored("requests.packages.urllib3.util.retry") - vendored("requests.packages.urllib3.util.ssl_") - vendored("requests.packages.urllib3.util.timeout") - vendored("requests.packages.urllib3.util.url") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/appdirs.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/appdirs.py deleted file mode 100644 index 2bd3911..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/appdirs.py +++ /dev/null @@ -1,604 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (c) 2005-2010 ActiveState Software Inc. -# Copyright (c) 2013 Eddy Petrișor - -"""Utilities for determining application-specific dirs. - -See <http://github.com/ActiveState/appdirs> for details and usage. -""" -# Dev Notes: -# - MSDN on where to store app data files: -# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 -# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html -# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html - -__version_info__ = (1, 4, 3) -__version__ = '.'.join(map(str, __version_info__)) - - -import sys -import os - -PY3 = sys.version_info[0] == 3 - -if PY3: - unicode = str - -if sys.platform.startswith('java'): - import platform - os_name = platform.java_ver()[3][0] - if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. - system = 'win32' - elif os_name.startswith('Mac'): # "Mac OS X", etc. - system = 'darwin' - else: # "Linux", "SunOS", "FreeBSD", etc. - # Setting this to "linux2" is not ideal, but only Windows or Mac - # are actually checked for and the rest of the module expects - # *sys.platform* style strings. - system = 'linux2' -else: - system = sys.platform - - - -def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): - r"""Return full path to the user-specific data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "roaming" (boolean, default False) can be set True to use the Windows - roaming appdata directory. That means that for users on a Windows - network setup for roaming profiles, this user data will be - sync'd on login. See - <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> - for a discussion of issues. - - Typical user data directories are: - Mac OS X: ~/Library/Application Support/<AppName> - Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined - Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName> - Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName> - Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName> - Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName> - - For Unix, we follow the XDG spec and support $XDG_DATA_HOME. - That means, by default "~/.local/share/<AppName>". - """ - if system == "win32": - if appauthor is None: - appauthor = appname - const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" - path = os.path.normpath(_get_win_folder(const)) - if appname: - if appauthor is not False: - path = os.path.join(path, appauthor, appname) - else: - path = os.path.join(path, appname) - elif system == 'darwin': - path = os.path.expanduser('~/Library/Application Support/') - if appname: - path = os.path.join(path, appname) - else: - path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): - r"""Return full path to the user-shared data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "multipath" is an optional parameter only applicable to *nix - which indicates that the entire list of data dirs should be - returned. By default, the first item from XDG_DATA_DIRS is - returned, or '/usr/local/share/<AppName>', - if XDG_DATA_DIRS is not set - - Typical site data directories are: - Mac OS X: /Library/Application Support/<AppName> - Unix: /usr/local/share/<AppName> or /usr/share/<AppName> - Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName> - Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) - Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7. - - For Unix, this is using the $XDG_DATA_DIRS[0] default. - - WARNING: Do not use this on Windows. See the Vista-Fail note above for why. - """ - if system == "win32": - if appauthor is None: - appauthor = appname - path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) - if appname: - if appauthor is not False: - path = os.path.join(path, appauthor, appname) - else: - path = os.path.join(path, appname) - elif system == 'darwin': - path = os.path.expanduser('/Library/Application Support') - if appname: - path = os.path.join(path, appname) - else: - # XDG default for $XDG_DATA_DIRS - # only first, if multipath is False - path = os.getenv('XDG_DATA_DIRS', - os.pathsep.join(['/usr/local/share', '/usr/share'])) - pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] - if appname: - if version: - appname = os.path.join(appname, version) - pathlist = [os.sep.join([x, appname]) for x in pathlist] - - if multipath: - path = os.pathsep.join(pathlist) - else: - path = pathlist[0] - return path - - if appname and version: - path = os.path.join(path, version) - return path - - -def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): - r"""Return full path to the user-specific config dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "roaming" (boolean, default False) can be set True to use the Windows - roaming appdata directory. That means that for users on a Windows - network setup for roaming profiles, this user data will be - sync'd on login. See - <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> - for a discussion of issues. - - Typical user config directories are: - Mac OS X: same as user_data_dir - Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined - Win *: same as user_data_dir - - For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. - That means, by default "~/.config/<AppName>". - """ - if system in ["win32", "darwin"]: - path = user_data_dir(appname, appauthor, None, roaming) - else: - path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def site_config_dir(appname=None, appauthor=None, version=None, multipath=False): - r"""Return full path to the user-shared data dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "multipath" is an optional parameter only applicable to *nix - which indicates that the entire list of config dirs should be - returned. By default, the first item from XDG_CONFIG_DIRS is - returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set - - Typical site config directories are: - Mac OS X: same as site_data_dir - Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in - $XDG_CONFIG_DIRS - Win *: same as site_data_dir - Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) - - For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False - - WARNING: Do not use this on Windows. See the Vista-Fail note above for why. - """ - if system in ["win32", "darwin"]: - path = site_data_dir(appname, appauthor) - if appname and version: - path = os.path.join(path, version) - else: - # XDG default for $XDG_CONFIG_DIRS - # only first, if multipath is False - path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') - pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)] - if appname: - if version: - appname = os.path.join(appname, version) - pathlist = [os.sep.join([x, appname]) for x in pathlist] - - if multipath: - path = os.pathsep.join(pathlist) - else: - path = pathlist[0] - return path - - -def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): - r"""Return full path to the user-specific cache dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "opinion" (boolean) can be False to disable the appending of - "Cache" to the base app data dir for Windows. See - discussion below. - - Typical user cache directories are: - Mac OS X: ~/Library/Caches/<AppName> - Unix: ~/.cache/<AppName> (XDG default) - Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache - Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache - - On Windows the only suggestion in the MSDN docs is that local settings go in - the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming - app data dir (the default returned by `user_data_dir` above). Apps typically - put cache data somewhere *under* the given dir here. Some examples: - ...\Mozilla\Firefox\Profiles\<ProfileName>\Cache - ...\Acme\SuperApp\Cache\1.0 - OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. - This can be disabled with the `opinion=False` option. - """ - if system == "win32": - if appauthor is None: - appauthor = appname - path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) - if appname: - if appauthor is not False: - path = os.path.join(path, appauthor, appname) - else: - path = os.path.join(path, appname) - if opinion: - path = os.path.join(path, "Cache") - elif system == 'darwin': - path = os.path.expanduser('~/Library/Caches') - if appname: - path = os.path.join(path, appname) - else: - path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def user_state_dir(appname=None, appauthor=None, version=None, roaming=False): - r"""Return full path to the user-specific state dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "roaming" (boolean, default False) can be set True to use the Windows - roaming appdata directory. That means that for users on a Windows - network setup for roaming profiles, this user data will be - sync'd on login. See - <http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx> - for a discussion of issues. - - Typical user state directories are: - Mac OS X: same as user_data_dir - Unix: ~/.local/state/<AppName> # or in $XDG_STATE_HOME, if defined - Win *: same as user_data_dir - - For Unix, we follow this Debian proposal <https://wiki.debian.org/XDGBaseDirectorySpecification#state> - to extend the XDG spec and support $XDG_STATE_HOME. - - That means, by default "~/.local/state/<AppName>". - """ - if system in ["win32", "darwin"]: - path = user_data_dir(appname, appauthor, None, roaming) - else: - path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state")) - if appname: - path = os.path.join(path, appname) - if appname and version: - path = os.path.join(path, version) - return path - - -def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): - r"""Return full path to the user-specific log dir for this application. - - "appname" is the name of application. - If None, just the system directory is returned. - "appauthor" (only used on Windows) is the name of the - appauthor or distributing body for this application. Typically - it is the owning company name. This falls back to appname. You may - pass False to disable it. - "version" is an optional version path element to append to the - path. You might want to use this if you want multiple versions - of your app to be able to run independently. If used, this - would typically be "<major>.<minor>". - Only applied when appname is present. - "opinion" (boolean) can be False to disable the appending of - "Logs" to the base app data dir for Windows, and "log" to the - base cache dir for Unix. See discussion below. - - Typical user log directories are: - Mac OS X: ~/Library/Logs/<AppName> - Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined - Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs - Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs - - On Windows the only suggestion in the MSDN docs is that local settings - go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in - examples of what some windows apps use for a logs dir.) - - OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` - value for Windows and appends "log" to the user cache dir for Unix. - This can be disabled with the `opinion=False` option. - """ - if system == "darwin": - path = os.path.join( - os.path.expanduser('~/Library/Logs'), - appname) - elif system == "win32": - path = user_data_dir(appname, appauthor, version) - version = False - if opinion: - path = os.path.join(path, "Logs") - else: - path = user_cache_dir(appname, appauthor, version) - version = False - if opinion: - path = os.path.join(path, "log") - if appname and version: - path = os.path.join(path, version) - return path - - -class AppDirs(object): - """Convenience wrapper for getting application dirs.""" - def __init__(self, appname=None, appauthor=None, version=None, - roaming=False, multipath=False): - self.appname = appname - self.appauthor = appauthor - self.version = version - self.roaming = roaming - self.multipath = multipath - - @property - def user_data_dir(self): - return user_data_dir(self.appname, self.appauthor, - version=self.version, roaming=self.roaming) - - @property - def site_data_dir(self): - return site_data_dir(self.appname, self.appauthor, - version=self.version, multipath=self.multipath) - - @property - def user_config_dir(self): - return user_config_dir(self.appname, self.appauthor, - version=self.version, roaming=self.roaming) - - @property - def site_config_dir(self): - return site_config_dir(self.appname, self.appauthor, - version=self.version, multipath=self.multipath) - - @property - def user_cache_dir(self): - return user_cache_dir(self.appname, self.appauthor, - version=self.version) - - @property - def user_state_dir(self): - return user_state_dir(self.appname, self.appauthor, - version=self.version) - - @property - def user_log_dir(self): - return user_log_dir(self.appname, self.appauthor, - version=self.version) - - -#---- internal support stuff - -def _get_win_folder_from_registry(csidl_name): - """This is a fallback technique at best. I'm not sure if using the - registry for this guarantees us the correct answer for all CSIDL_* - names. - """ - if PY3: - import winreg as _winreg - else: - import _winreg - - shell_folder_name = { - "CSIDL_APPDATA": "AppData", - "CSIDL_COMMON_APPDATA": "Common AppData", - "CSIDL_LOCAL_APPDATA": "Local AppData", - }[csidl_name] - - key = _winreg.OpenKey( - _winreg.HKEY_CURRENT_USER, - r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" - ) - dir, type = _winreg.QueryValueEx(key, shell_folder_name) - return dir - - -def _get_win_folder_with_pywin32(csidl_name): - from win32com.shell import shellcon, shell - dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) - # Try to make this a unicode path because SHGetFolderPath does - # not return unicode strings when there is unicode data in the - # path. - try: - dir = unicode(dir) - - # Downgrade to short path name if have highbit chars. See - # <http://bugs.activestate.com/show_bug.cgi?id=85099>. - has_high_char = False - for c in dir: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - try: - import win32api - dir = win32api.GetShortPathName(dir) - except ImportError: - pass - except UnicodeError: - pass - return dir - - -def _get_win_folder_with_ctypes(csidl_name): - import ctypes - - csidl_const = { - "CSIDL_APPDATA": 26, - "CSIDL_COMMON_APPDATA": 35, - "CSIDL_LOCAL_APPDATA": 28, - }[csidl_name] - - buf = ctypes.create_unicode_buffer(1024) - ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) - - # Downgrade to short path name if have highbit chars. See - # <http://bugs.activestate.com/show_bug.cgi?id=85099>. - has_high_char = False - for c in buf: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - buf2 = ctypes.create_unicode_buffer(1024) - if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): - buf = buf2 - - return buf.value - -def _get_win_folder_with_jna(csidl_name): - import array - from com.sun import jna - from com.sun.jna.platform import win32 - - buf_size = win32.WinDef.MAX_PATH * 2 - buf = array.zeros('c', buf_size) - shell = win32.Shell32.INSTANCE - shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf) - dir = jna.Native.toString(buf.tostring()).rstrip("\0") - - # Downgrade to short path name if have highbit chars. See - # <http://bugs.activestate.com/show_bug.cgi?id=85099>. - has_high_char = False - for c in dir: - if ord(c) > 255: - has_high_char = True - break - if has_high_char: - buf = array.zeros('c', buf_size) - kernel = win32.Kernel32.INSTANCE - if kernel.GetShortPathName(dir, buf, buf_size): - dir = jna.Native.toString(buf.tostring()).rstrip("\0") - - return dir - -if system == "win32": - try: - from ctypes import windll - _get_win_folder = _get_win_folder_with_ctypes - except ImportError: - try: - import com.sun.jna - _get_win_folder = _get_win_folder_with_jna - except ImportError: - _get_win_folder = _get_win_folder_from_registry - - -#---- self test code - -if __name__ == "__main__": - appname = "MyApp" - appauthor = "MyCompany" - - props = ("user_data_dir", - "user_config_dir", - "user_cache_dir", - "user_state_dir", - "user_log_dir", - "site_data_dir", - "site_config_dir") - - print("-- app dirs %s --" % __version__) - - print("-- app dirs (with optional 'version')") - dirs = AppDirs(appname, appauthor, version="1.0") - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) - - print("\n-- app dirs (without optional 'version')") - dirs = AppDirs(appname, appauthor) - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) - - print("\n-- app dirs (without optional 'appauthor')") - dirs = AppDirs(appname) - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) - - print("\n-- app dirs (with disabled 'appauthor')") - dirs = AppDirs(appname, appauthor=False) - for prop in props: - print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py deleted file mode 100644 index f386d49..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -"""CacheControl import Interface. - -Make it easy to import from cachecontrol without long namespaces. -""" -__author__ = 'Eric Larson' -__email__ = 'eric@ionrock.org' -__version__ = '0.12.4' - -from .wrapper import CacheControl -from .adapter import CacheControlAdapter -from .controller import CacheController diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py deleted file mode 100644 index afdcc88..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/_cmd.py +++ /dev/null @@ -1,60 +0,0 @@ -import logging - -from pip._vendor import requests - -from pip._vendor.cachecontrol.adapter import CacheControlAdapter -from pip._vendor.cachecontrol.cache import DictCache -from pip._vendor.cachecontrol.controller import logger - -from argparse import ArgumentParser - - -def setup_logging(): - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler() - logger.addHandler(handler) - - -def get_session(): - adapter = CacheControlAdapter( - DictCache(), - cache_etags=True, - serializer=None, - heuristic=None, - ) - sess = requests.Session() - sess.mount('http://', adapter) - sess.mount('https://', adapter) - - sess.cache_controller = adapter.controller - return sess - - -def get_args(): - parser = ArgumentParser() - parser.add_argument('url', help='The URL to try and cache') - return parser.parse_args() - - -def main(args=None): - args = get_args() - sess = get_session() - - # Make a request to get a response - resp = sess.get(args.url) - - # Turn on logging - setup_logging() - - # try setting the cache - sess.cache_controller.cache_response(resp.request, resp.raw) - - # Now try to get it - if sess.cache_controller.cached_request(resp.request): - print('Cached!') - else: - print('Not cached :(') - - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py deleted file mode 100644 index ecb34a6..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/adapter.py +++ /dev/null @@ -1,134 +0,0 @@ -import types -import functools -import zlib - -from pip._vendor.requests.adapters import HTTPAdapter - -from .controller import CacheController -from .cache import DictCache -from .filewrapper import CallbackFileWrapper - - -class CacheControlAdapter(HTTPAdapter): - invalidating_methods = set(['PUT', 'DELETE']) - - def __init__(self, cache=None, - cache_etags=True, - controller_class=None, - serializer=None, - heuristic=None, - cacheable_methods=None, - *args, **kw): - super(CacheControlAdapter, self).__init__(*args, **kw) - self.cache = cache or DictCache() - self.heuristic = heuristic - self.cacheable_methods = cacheable_methods or ('GET',) - - controller_factory = controller_class or CacheController - self.controller = controller_factory( - self.cache, - cache_etags=cache_etags, - serializer=serializer, - ) - - def send(self, request, cacheable_methods=None, **kw): - """ - Send a request. Use the request information to see if it - exists in the cache and cache the response if we need to and can. - """ - cacheable = cacheable_methods or self.cacheable_methods - if request.method in cacheable: - try: - cached_response = self.controller.cached_request(request) - except zlib.error: - cached_response = None - if cached_response: - return self.build_response(request, cached_response, - from_cache=True) - - # check for etags and add headers if appropriate - request.headers.update( - self.controller.conditional_headers(request) - ) - - resp = super(CacheControlAdapter, self).send(request, **kw) - - return resp - - def build_response(self, request, response, from_cache=False, - cacheable_methods=None): - """ - Build a response by making a request or using the cache. - - This will end up calling send and returning a potentially - cached response - """ - cacheable = cacheable_methods or self.cacheable_methods - if not from_cache and request.method in cacheable: - # Check for any heuristics that might update headers - # before trying to cache. - if self.heuristic: - response = self.heuristic.apply(response) - - # apply any expiration heuristics - if response.status == 304: - # We must have sent an ETag request. This could mean - # that we've been expired already or that we simply - # have an etag. In either case, we want to try and - # update the cache if that is the case. - cached_response = self.controller.update_cached_response( - request, response - ) - - if cached_response is not response: - from_cache = True - - # We are done with the server response, read a - # possible response body (compliant servers will - # not return one, but we cannot be 100% sure) and - # release the connection back to the pool. - response.read(decode_content=False) - response.release_conn() - - response = cached_response - - # We always cache the 301 responses - elif response.status == 301: - self.controller.cache_response(request, response) - else: - # Wrap the response file with a wrapper that will cache the - # response when the stream has been consumed. - response._fp = CallbackFileWrapper( - response._fp, - functools.partial( - self.controller.cache_response, - request, - response, - ) - ) - if response.chunked: - super_update_chunk_length = response._update_chunk_length - - def _update_chunk_length(self): - super_update_chunk_length() - if self.chunk_left == 0: - self._fp._close() - response._update_chunk_length = types.MethodType(_update_chunk_length, response) - - resp = super(CacheControlAdapter, self).build_response( - request, response - ) - - # See if we should invalidate the cache. - if request.method in self.invalidating_methods and resp.ok: - cache_url = self.controller.cache_url(request.url) - self.cache.delete(cache_url) - - # Give the request a from_cache attr to let people use it - resp.from_cache = from_cache - - return resp - - def close(self): - self.cache.close() - super(CacheControlAdapter, self).close() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py deleted file mode 100644 index 7389a73..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/cache.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -The cache object API for implementing caches. The default is a thread -safe in-memory dictionary. -""" -from threading import Lock - - -class BaseCache(object): - - def get(self, key): - raise NotImplemented() - - def set(self, key, value): - raise NotImplemented() - - def delete(self, key): - raise NotImplemented() - - def close(self): - pass - - -class DictCache(BaseCache): - - def __init__(self, init_dict=None): - self.lock = Lock() - self.data = init_dict or {} - - def get(self, key): - return self.data.get(key, None) - - def set(self, key, value): - with self.lock: - self.data.update({key: value}) - - def delete(self, key): - with self.lock: - if key in self.data: - self.data.pop(key) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py deleted file mode 100644 index 0e1658f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .file_cache import FileCache # noqa -from .redis_cache import RedisCache # noqa diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py deleted file mode 100644 index 885c8a6..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/file_cache.py +++ /dev/null @@ -1,133 +0,0 @@ -import hashlib -import os -from textwrap import dedent - -from ..cache import BaseCache -from ..controller import CacheController - -try: - FileNotFoundError -except NameError: - # py2.X - FileNotFoundError = OSError - - -def _secure_open_write(filename, fmode): - # We only want to write to this file, so open it in write only mode - flags = os.O_WRONLY - - # os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only - # will open *new* files. - # We specify this because we want to ensure that the mode we pass is the - # mode of the file. - flags |= os.O_CREAT | os.O_EXCL - - # Do not follow symlinks to prevent someone from making a symlink that - # we follow and insecurely open a cache file. - if hasattr(os, "O_NOFOLLOW"): - flags |= os.O_NOFOLLOW - - # On Windows we'll mark this file as binary - if hasattr(os, "O_BINARY"): - flags |= os.O_BINARY - - # Before we open our file, we want to delete any existing file that is - # there - try: - os.remove(filename) - except (IOError, OSError): - # The file must not exist already, so we can just skip ahead to opening - pass - - # Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a - # race condition happens between the os.remove and this line, that an - # error will be raised. Because we utilize a lockfile this should only - # happen if someone is attempting to attack us. - fd = os.open(filename, flags, fmode) - try: - return os.fdopen(fd, "wb") - except: - # An error occurred wrapping our FD in a file object - os.close(fd) - raise - - -class FileCache(BaseCache): - def __init__(self, directory, forever=False, filemode=0o0600, - dirmode=0o0700, use_dir_lock=None, lock_class=None): - - if use_dir_lock is not None and lock_class is not None: - raise ValueError("Cannot use use_dir_lock and lock_class together") - - try: - from pip._vendor.lockfile import LockFile - from pip._vendor.lockfile.mkdirlockfile import MkdirLockFile - except ImportError: - notice = dedent(""" - NOTE: In order to use the FileCache you must have - lockfile installed. You can install it via pip: - pip install lockfile - """) - raise ImportError(notice) - else: - if use_dir_lock: - lock_class = MkdirLockFile - - elif lock_class is None: - lock_class = LockFile - - self.directory = directory - self.forever = forever - self.filemode = filemode - self.dirmode = dirmode - self.lock_class = lock_class - - @staticmethod - def encode(x): - return hashlib.sha224(x.encode()).hexdigest() - - def _fn(self, name): - # NOTE: This method should not change as some may depend on it. - # See: https://github.com/ionrock/cachecontrol/issues/63 - hashed = self.encode(name) - parts = list(hashed[:5]) + [hashed] - return os.path.join(self.directory, *parts) - - def get(self, key): - name = self._fn(key) - if not os.path.exists(name): - return None - - with open(name, 'rb') as fh: - return fh.read() - - def set(self, key, value): - name = self._fn(key) - - # Make sure the directory exists - try: - os.makedirs(os.path.dirname(name), self.dirmode) - except (IOError, OSError): - pass - - with self.lock_class(name) as lock: - # Write our actual file - with _secure_open_write(lock.path, self.filemode) as fh: - fh.write(value) - - def delete(self, key): - name = self._fn(key) - if not self.forever: - try: - os.remove(name) - except FileNotFoundError: - pass - - -def url_to_file_path(url, filecache): - """Return the file cache path based on the URL. - - This does not ensure the file exists! - """ - key = CacheController.cache_url(url) - return filecache._fn(key) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py deleted file mode 100644 index b6285e9..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/caches/redis_cache.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import division - -from datetime import datetime -from pip._vendor.cachecontrol.cache import BaseCache - - -def total_seconds(td): - """Python 2.6 compatability""" - if hasattr(td, 'total_seconds'): - return int(td.total_seconds()) - - ms = td.microseconds - secs = (td.seconds + td.days * 24 * 3600) - return int((ms + secs * 10**6) / 10**6) - - -class RedisCache(BaseCache): - - def __init__(self, conn): - self.conn = conn - - def get(self, key): - return self.conn.get(key) - - def set(self, key, value, expires=None): - if not expires: - self.conn.set(key, value) - else: - expires = expires - datetime.utcnow() - self.conn.setex(key, total_seconds(expires), value) - - def delete(self, key): - self.conn.delete(key) - - def clear(self): - """Helper for clearing all the keys in a database. Use with - caution!""" - for key in self.conn.keys(): - self.conn.delete(key) - - def close(self): - """Redis uses connection pooling, no need to close the connection.""" - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py deleted file mode 100644 index 33b5aed..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/compat.py +++ /dev/null @@ -1,29 +0,0 @@ -try: - from urllib.parse import urljoin -except ImportError: - from urlparse import urljoin - - -try: - import cPickle as pickle -except ImportError: - import pickle - - -# Handle the case where the requests module has been patched to not have -# urllib3 bundled as part of its source. -try: - from pip._vendor.requests.packages.urllib3.response import HTTPResponse -except ImportError: - from pip._vendor.urllib3.response import HTTPResponse - -try: - from pip._vendor.requests.packages.urllib3.util import is_fp_closed -except ImportError: - from pip._vendor.urllib3.util import is_fp_closed - -# Replicate some six behaviour -try: - text_type = unicode -except NameError: - text_type = str diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py deleted file mode 100644 index 0e2eb3c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/controller.py +++ /dev/null @@ -1,373 +0,0 @@ -""" -The httplib2 algorithms ported for use with requests. -""" -import logging -import re -import calendar -import time -from email.utils import parsedate_tz - -from pip._vendor.requests.structures import CaseInsensitiveDict - -from .cache import DictCache -from .serialize import Serializer - - -logger = logging.getLogger(__name__) - -URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") - - -def parse_uri(uri): - """Parses a URI using the regex given in Appendix B of RFC 3986. - - (scheme, authority, path, query, fragment) = parse_uri(uri) - """ - groups = URI.match(uri).groups() - return (groups[1], groups[3], groups[4], groups[6], groups[8]) - - -class CacheController(object): - """An interface to see if request should cached or not. - """ - def __init__(self, cache=None, cache_etags=True, serializer=None, - status_codes=None): - self.cache = cache or DictCache() - self.cache_etags = cache_etags - self.serializer = serializer or Serializer() - self.cacheable_status_codes = status_codes or (200, 203, 300, 301) - - @classmethod - def _urlnorm(cls, uri): - """Normalize the URL to create a safe key for the cache""" - (scheme, authority, path, query, fragment) = parse_uri(uri) - if not scheme or not authority: - raise Exception("Only absolute URIs are allowed. uri = %s" % uri) - - scheme = scheme.lower() - authority = authority.lower() - - if not path: - path = "/" - - # Could do syntax based normalization of the URI before - # computing the digest. See Section 6.2.2 of Std 66. - request_uri = query and "?".join([path, query]) or path - defrag_uri = scheme + "://" + authority + request_uri - - return defrag_uri - - @classmethod - def cache_url(cls, uri): - return cls._urlnorm(uri) - - def parse_cache_control(self, headers): - known_directives = { - # https://tools.ietf.org/html/rfc7234#section-5.2 - 'max-age': (int, True,), - 'max-stale': (int, False,), - 'min-fresh': (int, True,), - 'no-cache': (None, False,), - 'no-store': (None, False,), - 'no-transform': (None, False,), - 'only-if-cached' : (None, False,), - 'must-revalidate': (None, False,), - 'public': (None, False,), - 'private': (None, False,), - 'proxy-revalidate': (None, False,), - 's-maxage': (int, True,) - } - - cc_headers = headers.get('cache-control', - headers.get('Cache-Control', '')) - - retval = {} - - for cc_directive in cc_headers.split(','): - parts = cc_directive.split('=', 1) - directive = parts[0].strip() - - try: - typ, required = known_directives[directive] - except KeyError: - logger.debug('Ignoring unknown cache-control directive: %s', - directive) - continue - - if not typ or not required: - retval[directive] = None - if typ: - try: - retval[directive] = typ(parts[1].strip()) - except IndexError: - if required: - logger.debug('Missing value for cache-control ' - 'directive: %s', directive) - except ValueError: - logger.debug('Invalid value for cache-control directive ' - '%s, must be %s', directive, typ.__name__) - - return retval - - def cached_request(self, request): - """ - Return a cached response if it exists in the cache, otherwise - return False. - """ - cache_url = self.cache_url(request.url) - logger.debug('Looking up "%s" in the cache', cache_url) - cc = self.parse_cache_control(request.headers) - - # Bail out if the request insists on fresh data - if 'no-cache' in cc: - logger.debug('Request header has "no-cache", cache bypassed') - return False - - if 'max-age' in cc and cc['max-age'] == 0: - logger.debug('Request header has "max_age" as 0, cache bypassed') - return False - - # Request allows serving from the cache, let's see if we find something - cache_data = self.cache.get(cache_url) - if cache_data is None: - logger.debug('No cache entry available') - return False - - # Check whether it can be deserialized - resp = self.serializer.loads(request, cache_data) - if not resp: - logger.warning('Cache entry deserialization failed, entry ignored') - return False - - # If we have a cached 301, return it immediately. We don't - # need to test our response for other headers b/c it is - # intrinsically "cacheable" as it is Permanent. - # See: - # https://tools.ietf.org/html/rfc7231#section-6.4.2 - # - # Client can try to refresh the value by repeating the request - # with cache busting headers as usual (ie no-cache). - if resp.status == 301: - msg = ('Returning cached "301 Moved Permanently" response ' - '(ignoring date and etag information)') - logger.debug(msg) - return resp - - headers = CaseInsensitiveDict(resp.headers) - if not headers or 'date' not in headers: - if 'etag' not in headers: - # Without date or etag, the cached response can never be used - # and should be deleted. - logger.debug('Purging cached response: no date or etag') - self.cache.delete(cache_url) - logger.debug('Ignoring cached response: no date') - return False - - now = time.time() - date = calendar.timegm( - parsedate_tz(headers['date']) - ) - current_age = max(0, now - date) - logger.debug('Current age based on date: %i', current_age) - - # TODO: There is an assumption that the result will be a - # urllib3 response object. This may not be best since we - # could probably avoid instantiating or constructing the - # response until we know we need it. - resp_cc = self.parse_cache_control(headers) - - # determine freshness - freshness_lifetime = 0 - - # Check the max-age pragma in the cache control header - if 'max-age' in resp_cc: - freshness_lifetime = resp_cc['max-age'] - logger.debug('Freshness lifetime from max-age: %i', - freshness_lifetime) - - # If there isn't a max-age, check for an expires header - elif 'expires' in headers: - expires = parsedate_tz(headers['expires']) - if expires is not None: - expire_time = calendar.timegm(expires) - date - freshness_lifetime = max(0, expire_time) - logger.debug("Freshness lifetime from expires: %i", - freshness_lifetime) - - # Determine if we are setting freshness limit in the - # request. Note, this overrides what was in the response. - if 'max-age' in cc: - freshness_lifetime = cc['max-age'] - logger.debug('Freshness lifetime from request max-age: %i', - freshness_lifetime) - - if 'min-fresh' in cc: - min_fresh = cc['min-fresh'] - # adjust our current age by our min fresh - current_age += min_fresh - logger.debug('Adjusted current age from min-fresh: %i', - current_age) - - # Return entry if it is fresh enough - if freshness_lifetime > current_age: - logger.debug('The response is "fresh", returning cached response') - logger.debug('%i > %i', freshness_lifetime, current_age) - return resp - - # we're not fresh. If we don't have an Etag, clear it out - if 'etag' not in headers: - logger.debug( - 'The cached response is "stale" with no etag, purging' - ) - self.cache.delete(cache_url) - - # return the original handler - return False - - def conditional_headers(self, request): - cache_url = self.cache_url(request.url) - resp = self.serializer.loads(request, self.cache.get(cache_url)) - new_headers = {} - - if resp: - headers = CaseInsensitiveDict(resp.headers) - - if 'etag' in headers: - new_headers['If-None-Match'] = headers['ETag'] - - if 'last-modified' in headers: - new_headers['If-Modified-Since'] = headers['Last-Modified'] - - return new_headers - - def cache_response(self, request, response, body=None, - status_codes=None): - """ - Algorithm for caching requests. - - This assumes a requests Response object. - """ - # From httplib2: Don't cache 206's since we aren't going to - # handle byte range requests - cacheable_status_codes = status_codes or self.cacheable_status_codes - if response.status not in cacheable_status_codes: - logger.debug( - 'Status code %s not in %s', - response.status, - cacheable_status_codes - ) - return - - response_headers = CaseInsensitiveDict(response.headers) - - # If we've been given a body, our response has a Content-Length, that - # Content-Length is valid then we can check to see if the body we've - # been given matches the expected size, and if it doesn't we'll just - # skip trying to cache it. - if (body is not None and - "content-length" in response_headers and - response_headers["content-length"].isdigit() and - int(response_headers["content-length"]) != len(body)): - return - - cc_req = self.parse_cache_control(request.headers) - cc = self.parse_cache_control(response_headers) - - cache_url = self.cache_url(request.url) - logger.debug('Updating cache with response from "%s"', cache_url) - - # Delete it from the cache if we happen to have it stored there - no_store = False - if 'no-store' in cc: - no_store = True - logger.debug('Response header has "no-store"') - if 'no-store' in cc_req: - no_store = True - logger.debug('Request header has "no-store"') - if no_store and self.cache.get(cache_url): - logger.debug('Purging existing cache entry to honor "no-store"') - self.cache.delete(cache_url) - - # If we've been given an etag, then keep the response - if self.cache_etags and 'etag' in response_headers: - logger.debug('Caching due to etag') - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body=body), - ) - - # Add to the cache any 301s. We do this before looking that - # the Date headers. - elif response.status == 301: - logger.debug('Caching permanant redirect') - self.cache.set( - cache_url, - self.serializer.dumps(request, response) - ) - - # Add to the cache if the response headers demand it. If there - # is no date header then we can't do anything about expiring - # the cache. - elif 'date' in response_headers: - # cache when there is a max-age > 0 - if 'max-age' in cc and cc['max-age'] > 0: - logger.debug('Caching b/c date exists and max-age > 0') - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body=body), - ) - - # If the request can expire, it means we should cache it - # in the meantime. - elif 'expires' in response_headers: - if response_headers['expires']: - logger.debug('Caching b/c of expires header') - self.cache.set( - cache_url, - self.serializer.dumps(request, response, body=body), - ) - - def update_cached_response(self, request, response): - """On a 304 we will get a new set of headers that we want to - update our cached value with, assuming we have one. - - This should only ever be called when we've sent an ETag and - gotten a 304 as the response. - """ - cache_url = self.cache_url(request.url) - - cached_response = self.serializer.loads( - request, - self.cache.get(cache_url) - ) - - if not cached_response: - # we didn't have a cached response - return response - - # Lets update our headers with the headers from the new request: - # http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1 - # - # The server isn't supposed to send headers that would make - # the cached body invalid. But... just in case, we'll be sure - # to strip out ones we know that might be problmatic due to - # typical assumptions. - excluded_headers = [ - "content-length", - ] - - cached_response.headers.update( - dict((k, v) for k, v in response.headers.items() - if k.lower() not in excluded_headers) - ) - - # we want a 200 b/c we have content via the cache - cached_response.status = 200 - - # update our cache - self.cache.set( - cache_url, - self.serializer.dumps(request, cached_response), - ) - - return cached_response diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py deleted file mode 100644 index f1e1ce0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/filewrapper.py +++ /dev/null @@ -1,78 +0,0 @@ -from io import BytesIO - - -class CallbackFileWrapper(object): - """ - Small wrapper around a fp object which will tee everything read into a - buffer, and when that file is closed it will execute a callback with the - contents of that buffer. - - All attributes are proxied to the underlying file object. - - This class uses members with a double underscore (__) leading prefix so as - not to accidentally shadow an attribute. - """ - - def __init__(self, fp, callback): - self.__buf = BytesIO() - self.__fp = fp - self.__callback = callback - - def __getattr__(self, name): - # The vaguaries of garbage collection means that self.__fp is - # not always set. By using __getattribute__ and the private - # name[0] allows looking up the attribute value and raising an - # AttributeError when it doesn't exist. This stop thigns from - # infinitely recursing calls to getattr in the case where - # self.__fp hasn't been set. - # - # [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers - fp = self.__getattribute__('_CallbackFileWrapper__fp') - return getattr(fp, name) - - def __is_fp_closed(self): - try: - return self.__fp.fp is None - except AttributeError: - pass - - try: - return self.__fp.closed - except AttributeError: - pass - - # We just don't cache it then. - # TODO: Add some logging here... - return False - - def _close(self): - if self.__callback: - self.__callback(self.__buf.getvalue()) - - # We assign this to None here, because otherwise we can get into - # really tricky problems where the CPython interpreter dead locks - # because the callback is holding a reference to something which - # has a __del__ method. Setting this to None breaks the cycle - # and allows the garbage collector to do it's thing normally. - self.__callback = None - - def read(self, amt=None): - data = self.__fp.read(amt) - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data - - def _safe_read(self, amt): - data = self.__fp._safe_read(amt) - if amt == 2 and data == b'\r\n': - # urllib executes this read to toss the CRLF at the end - # of the chunk. - return data - - self.__buf.write(data) - if self.__is_fp_closed(): - self._close() - - return data diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py deleted file mode 100644 index f182ff0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/heuristics.py +++ /dev/null @@ -1,138 +0,0 @@ -import calendar -import time - -from email.utils import formatdate, parsedate, parsedate_tz - -from datetime import datetime, timedelta - -TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT" - - -def expire_after(delta, date=None): - date = date or datetime.utcnow() - return date + delta - - -def datetime_to_header(dt): - return formatdate(calendar.timegm(dt.timetuple())) - - -class BaseHeuristic(object): - - def warning(self, response): - """ - Return a valid 1xx warning header value describing the cache - adjustments. - - The response is provided too allow warnings like 113 - http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need - to explicitly say response is over 24 hours old. - """ - return '110 - "Response is Stale"' - - def update_headers(self, response): - """Update the response headers with any new headers. - - NOTE: This SHOULD always include some Warning header to - signify that the response was cached by the client, not - by way of the provided headers. - """ - return {} - - def apply(self, response): - updated_headers = self.update_headers(response) - - if updated_headers: - response.headers.update(updated_headers) - warning_header_value = self.warning(response) - if warning_header_value is not None: - response.headers.update({'Warning': warning_header_value}) - - return response - - -class OneDayCache(BaseHeuristic): - """ - Cache the response by providing an expires 1 day in the - future. - """ - def update_headers(self, response): - headers = {} - - if 'expires' not in response.headers: - date = parsedate(response.headers['date']) - expires = expire_after(timedelta(days=1), - date=datetime(*date[:6])) - headers['expires'] = datetime_to_header(expires) - headers['cache-control'] = 'public' - return headers - - -class ExpiresAfter(BaseHeuristic): - """ - Cache **all** requests for a defined time period. - """ - - def __init__(self, **kw): - self.delta = timedelta(**kw) - - def update_headers(self, response): - expires = expire_after(self.delta) - return { - 'expires': datetime_to_header(expires), - 'cache-control': 'public', - } - - def warning(self, response): - tmpl = '110 - Automatically cached for %s. Response might be stale' - return tmpl % self.delta - - -class LastModified(BaseHeuristic): - """ - If there is no Expires header already, fall back on Last-Modified - using the heuristic from - http://tools.ietf.org/html/rfc7234#section-4.2.2 - to calculate a reasonable value. - - Firefox also does something like this per - https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ - http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397 - Unlike mozilla we limit this to 24-hr. - """ - cacheable_by_default_statuses = set([ - 200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501 - ]) - - def update_headers(self, resp): - headers = resp.headers - - if 'expires' in headers: - return {} - - if 'cache-control' in headers and headers['cache-control'] != 'public': - return {} - - if resp.status not in self.cacheable_by_default_statuses: - return {} - - if 'date' not in headers or 'last-modified' not in headers: - return {} - - date = calendar.timegm(parsedate_tz(headers['date'])) - last_modified = parsedate(headers['last-modified']) - if date is None or last_modified is None: - return {} - - now = time.time() - current_age = max(0, now - date) - delta = date - calendar.timegm(last_modified) - freshness_lifetime = max(0, min(delta / 10, 24 * 3600)) - if freshness_lifetime <= current_age: - return {} - - expires = date + freshness_lifetime - return {'expires': time.strftime(TIME_FMT, time.gmtime(expires))} - - def warning(self, resp): - return None diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py deleted file mode 100644 index 05b6e24..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/serialize.py +++ /dev/null @@ -1,194 +0,0 @@ -import base64 -import io -import json -import zlib - -from pip._vendor import msgpack -from pip._vendor.requests.structures import CaseInsensitiveDict - -from .compat import HTTPResponse, pickle, text_type - - -def _b64_decode_bytes(b): - return base64.b64decode(b.encode("ascii")) - - -def _b64_decode_str(s): - return _b64_decode_bytes(s).decode("utf8") - - -class Serializer(object): - - def dumps(self, request, response, body=None): - response_headers = CaseInsensitiveDict(response.headers) - - if body is None: - body = response.read(decode_content=False) - - # NOTE: 99% sure this is dead code. I'm only leaving it - # here b/c I don't have a test yet to prove - # it. Basically, before using - # `cachecontrol.filewrapper.CallbackFileWrapper`, - # this made an effort to reset the file handle. The - # `CallbackFileWrapper` short circuits this code by - # setting the body as the content is consumed, the - # result being a `body` argument is *always* passed - # into cache_response, and in turn, - # `Serializer.dump`. - response._fp = io.BytesIO(body) - - # NOTE: This is all a bit weird, but it's really important that on - # Python 2.x these objects are unicode and not str, even when - # they contain only ascii. The problem here is that msgpack - # understands the difference between unicode and bytes and we - # have it set to differentiate between them, however Python 2 - # doesn't know the difference. Forcing these to unicode will be - # enough to have msgpack know the difference. - data = { - u"response": { - u"body": body, - u"headers": dict( - (text_type(k), text_type(v)) - for k, v in response.headers.items() - ), - u"status": response.status, - u"version": response.version, - u"reason": text_type(response.reason), - u"strict": response.strict, - u"decode_content": response.decode_content, - }, - } - - # Construct our vary headers - data[u"vary"] = {} - if u"vary" in response_headers: - varied_headers = response_headers[u'vary'].split(',') - for header in varied_headers: - header = header.strip() - header_value = request.headers.get(header, None) - if header_value is not None: - header_value = text_type(header_value) - data[u"vary"][header] = header_value - - return b",".join([b"cc=4", msgpack.dumps(data, use_bin_type=True)]) - - def loads(self, request, data): - # Short circuit if we've been given an empty set of data - if not data: - return - - # Determine what version of the serializer the data was serialized - # with - try: - ver, data = data.split(b",", 1) - except ValueError: - ver = b"cc=0" - - # Make sure that our "ver" is actually a version and isn't a false - # positive from a , being in the data stream. - if ver[:3] != b"cc=": - data = ver + data - ver = b"cc=0" - - # Get the version number out of the cc=N - ver = ver.split(b"=", 1)[-1].decode("ascii") - - # Dispatch to the actual load method for the given version - try: - return getattr(self, "_loads_v{0}".format(ver))(request, data) - except AttributeError: - # This is a version we don't have a loads function for, so we'll - # just treat it as a miss and return None - return - - def prepare_response(self, request, cached): - """Verify our vary headers match and construct a real urllib3 - HTTPResponse object. - """ - # Special case the '*' Vary value as it means we cannot actually - # determine if the cached response is suitable for this request. - if "*" in cached.get("vary", {}): - return - - # Ensure that the Vary headers for the cached response match our - # request - for header, value in cached.get("vary", {}).items(): - if request.headers.get(header, None) != value: - return - - body_raw = cached["response"].pop("body") - - headers = CaseInsensitiveDict(data=cached['response']['headers']) - if headers.get('transfer-encoding', '') == 'chunked': - headers.pop('transfer-encoding') - - cached['response']['headers'] = headers - - try: - body = io.BytesIO(body_raw) - except TypeError: - # This can happen if cachecontrol serialized to v1 format (pickle) - # using Python 2. A Python 2 str(byte string) will be unpickled as - # a Python 3 str (unicode string), which will cause the above to - # fail with: - # - # TypeError: 'str' does not support the buffer interface - body = io.BytesIO(body_raw.encode('utf8')) - - return HTTPResponse( - body=body, - preload_content=False, - **cached["response"] - ) - - def _loads_v0(self, request, data): - # The original legacy cache data. This doesn't contain enough - # information to construct everything we need, so we'll treat this as - # a miss. - return - - def _loads_v1(self, request, data): - try: - cached = pickle.loads(data) - except ValueError: - return - - return self.prepare_response(request, cached) - - def _loads_v2(self, request, data): - try: - cached = json.loads(zlib.decompress(data).decode("utf8")) - except (ValueError, zlib.error): - return - - # We need to decode the items that we've base64 encoded - cached["response"]["body"] = _b64_decode_bytes( - cached["response"]["body"] - ) - cached["response"]["headers"] = dict( - (_b64_decode_str(k), _b64_decode_str(v)) - for k, v in cached["response"]["headers"].items() - ) - cached["response"]["reason"] = _b64_decode_str( - cached["response"]["reason"], - ) - cached["vary"] = dict( - (_b64_decode_str(k), _b64_decode_str(v) if v is not None else v) - for k, v in cached["vary"].items() - ) - - return self.prepare_response(request, cached) - - def _loads_v3(self, request, data): - # Due to Python 2 encoding issues, it's impossible to know for sure - # exactly how to load v3 entries, thus we'll treat these as a miss so - # that they get rewritten out as v4 entries. - return - - def _loads_v4(self, request, data): - try: - cached = msgpack.loads(data, encoding='utf-8') - except ValueError: - return - - return self.prepare_response(request, cached) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py deleted file mode 100644 index b50a6e2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/cachecontrol/wrapper.py +++ /dev/null @@ -1,27 +0,0 @@ -from .adapter import CacheControlAdapter -from .cache import DictCache - - -def CacheControl(sess, - cache=None, - cache_etags=True, - serializer=None, - heuristic=None, - controller_class=None, - adapter_class=None, - cacheable_methods=None): - - cache = cache or DictCache() - adapter_class = adapter_class or CacheControlAdapter - adapter = adapter_class( - cache, - cache_etags=cache_etags, - serializer=serializer, - heuristic=heuristic, - controller_class=controller_class, - cacheable_methods=cacheable_methods - ) - sess.mount('http://', adapter) - sess.mount('https://', adapter) - - return sess diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__init__.py deleted file mode 100644 index 556193c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .core import where, old_where - -__version__ = "2018.01.18" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__main__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__main__.py deleted file mode 100644 index 5f1da0d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/__main__.py +++ /dev/null @@ -1,2 +0,0 @@ -from certifi import where -print(where()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/cacert.pem b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/cacert.pem deleted file mode 100644 index 101ac98..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/cacert.pem +++ /dev/null @@ -1,4433 +0,0 @@ - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Subject: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Label: "Visa eCommerce Root" -# Serial: 25952180776285836048024890241505565794 -# MD5 Fingerprint: fc:11:b8:d8:08:93:30:00:6d:23:f9:7e:eb:52:1e:02 -# SHA1 Fingerprint: 70:17:9b:86:8c:00:a4:fa:60:91:52:22:3f:9f:3e:32:bd:e0:05:62 -# SHA256 Fingerprint: 69:fa:c9:bd:55:fb:0a:c7:8d:53:bb:ee:5c:f1:d5:97:98:9f:d0:aa:ab:20:a2:51:51:bd:f1:73:3e:e7:d1:22 ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Label: "QuoVadis Root CA" -# Serial: 985026699 -# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 -# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 -# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 -# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 -# Label: "Security Communication Root CA" -# Serial: 0 -# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a -# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 -# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -# Issuer: CN=Sonera Class2 CA O=Sonera -# Subject: CN=Sonera Class2 CA O=Sonera -# Label: "Sonera Class 2 Root CA" -# Serial: 29 -# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb -# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 -# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: O=Government Root Certification Authority -# Subject: O=Government Root Certification Authority -# Label: "Taiwan GRCA" -# Serial: 42023070807708724159991140556527066870 -# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e -# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 -# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ -MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow -PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR -IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q -gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy -yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts -F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 -jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx -ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC -VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK -YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH -EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN -Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud -DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE -MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK -UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf -qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK -ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE -JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 -hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 -EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm -nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX -udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz -ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe -LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl -pYYsfPQS ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=Class 2 Primary CA O=Certplus -# Subject: CN=Class 2 Primary CA O=Certplus -# Label: "Certplus Class 2 Primary CA" -# Serial: 177770208045934040241468760488327595043 -# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b -# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb -# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Label: "DST Root CA X3" -# Serial: 91299735575339953335919266965803778155 -# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 -# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 -# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GA CA" -# Serial: 86718877871133159090080555911823548314 -# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 -# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 -# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Label: "Deutsche Telekom Root CA 2" -# Serial: 38 -# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 -# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf -# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G2" -# Serial: 10000012 -# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a -# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 -# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Label: "Hongkong Post Root CA 1" -# Serial: 1000 -# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca -# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 -# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 6047274297262753887 -# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 -# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa -# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Label: "Chambers of Commerce Root - 2008" -# Serial: 11806822484801597146 -# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 -# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c -# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Label: "Global Chambersign Root - 2008" -# Serial: 14541511773111788494 -# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 -# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c -# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2011" -# Serial: 0 -# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 -# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d -# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: O=Trustis Limited OU=Trustis FPS Root CA -# Subject: O=Trustis Limited OU=Trustis FPS Root CA -# Label: "Trustis FPS Root CA" -# Serial: 36053640375399034304724988975563710553 -# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d -# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 -# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL -ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx -MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc -MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ -AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH -iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj -vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA -0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB -OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ -BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E -FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 -GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW -zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 -1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE -f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F -jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN -ZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Label: "EE Certification Centre Root CA" -# Serial: 112324828676200291871926431888494945866 -# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f -# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 -# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 -czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG -CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy -MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl -ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS -b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy -euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO -bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw -WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d -MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE -1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ -zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF -BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV -v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG -E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW -iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v -GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Subject: CN=E-Tugra Certification Authority O=E-Tu\u011fra EBG Bili\u015fim Teknolojileri ve Hizmetleri A.\u015e. OU=E-Tugra Sertifikasyon Merkezi -# Label: "E-Tugra Certification Authority" -# Serial: 7667447206703254355 -# MD5 Fingerprint: b8:a1:03:63:b0:bd:21:71:70:8a:6f:13:3a:bb:79:49 -# SHA1 Fingerprint: 51:c6:e7:08:49:06:6e:f3:92:d4:5c:a0:0d:6d:a3:62:8f:c3:52:39 -# SHA256 Fingerprint: b0:bf:d5:2b:b0:d7:d9:bd:92:bf:5d:4d:c1:3d:a2:55:c0:2c:54:2f:37:83:65:ea:89:39:11:f5:5e:55:f2:3c ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV -BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC -aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV -BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 -Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz -MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ -BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp -em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY -B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH -D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF -Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo -q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D -k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH -fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut -dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM -ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 -zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX -U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 -Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 -XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF -Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR -HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY -GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c -77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 -+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK -vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 -FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl -yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P -AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD -y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d -NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 14367148294922964480859022125800977897474 -# MD5 Fingerprint: 20:f0:27:68:d1:7e:a0:9d:0e:e6:2a:ca:df:5c:89:8e -# SHA1 Fingerprint: 69:69:56:2e:40:80:f4:24:a1:e7:19:9f:14:ba:f3:ee:58:ab:6a:bb -# SHA256 Fingerprint: be:c9:49:11:c2:95:56:76:db:6c:0a:55:09:86:d7:6e:3b:a0:05:66:7c:44:2c:97:62:b4:fb:b7:73:de:22:8c ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ -FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F -uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX -kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs -ewv4n4Q= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G3 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G3" -# Serial: 10003001 -# MD5 Fingerprint: 0b:46:67:07:db:10:2f:19:8c:35:50:60:d1:0b:f4:37 -# SHA1 Fingerprint: d8:eb:6b:41:51:92:59:e0:f3:e7:85:00:c0:3d:b6:88:97:c9:ee:fc -# SHA256 Fingerprint: 3c:4f:b0:b9:5a:b8:b3:00:32:f4:32:b8:6f:53:5f:e1:72:c1:85:d0:fd:39:86:58:37:cf:36:18:7f:a6:f4:28 ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX -DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP -cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW -IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX -xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy -KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR -9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az -5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 -6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 -Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP -bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt -BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt -XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd -INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp -LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 -Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp -gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh -/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw -0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A -fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq -4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR -1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ -QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM -94B7IWcnMFk= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden EV Root CA O=Staat der Nederlanden -# Label: "Staat der Nederlanden EV Root CA" -# Serial: 10000013 -# MD5 Fingerprint: fc:06:af:7b:e8:1a:f1:9a:b4:e8:d2:70:1f:c0:f5:ba -# SHA1 Fingerprint: 76:e2:7e:c1:4f:db:82:c1:c0:a6:75:b5:05:be:3d:29:b4:ed:db:bb -# SHA256 Fingerprint: 4d:24:91:41:4c:fe:95:67:46:ec:4c:ef:a6:cf:6f:72:e2:8a:13:29:43:2f:9d:8a:90:7a:c4:cb:5d:ad:c1:5a ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y -MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg -TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS -b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS -M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC -UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d -Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p -rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l -pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb -j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC -KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS -/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X -cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH -1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP -px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 -MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u -2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS -v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC -wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy -CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e -vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 -Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa -Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL -eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 -FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc -7uzXLg== ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. -# Subject: CN=T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5 O=T\xdcRKTRUST Bilgi \u0130leti\u015fim ve Bili\u015fim G\xfcvenli\u011fi Hizmetleri A.\u015e. -# Label: "T\xdcRKTRUST Elektronik Sertifika Hizmet Sa\u011flay\u0131c\u0131s\u0131 H5" -# Serial: 156233699172481 -# MD5 Fingerprint: da:70:8e:f0:22:df:93:26:f6:5f:9f:d3:15:06:52:4e -# SHA1 Fingerprint: c4:18:f6:4d:46:d1:df:00:3d:27:30:13:72:43:a9:12:11:c6:75:fb -# SHA256 Fingerprint: 49:35:1b:90:34:44:c1:85:cc:dc:5c:69:3d:24:d8:55:5c:b2:08:d6:a8:14:13:07:69:9f:4a:f0:63:19:9d:78 ------BEGIN CERTIFICATE----- -MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UE -BhMCVFIxDzANBgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxn -aSDEsGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkg -QS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1QgRWxla3Ryb25payBTZXJ0aWZpa2Eg -SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAwODA3MDFaFw0yMzA0 -MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0wSwYD -VQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCUZ4WWe60ghUEoI5RHwWrom -/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537jVJp45wnEFPzpALFp/kR -Gml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1mep5Fimh3 -4khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z -5UNP9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0 -hO8EuPbJbKoCPrZV4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QID -AQABo0IwQDAdBgNVHQ4EFgQUVpkHHtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAJ5FdnsX -SDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPoBP5yCccLqh0l -VX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq -URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nf -peYVhDfwwvJllpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CF -Yv4HAqGEVka+lgqaE9chTLd8B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW -+qtB4Uu2NQvAmxU= ------END CERTIFICATE----- - -# Issuer: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 -# Subject: CN=Certinomis - Root CA O=Certinomis OU=0002 433998903 -# Label: "Certinomis - Root CA" -# Serial: 1 -# MD5 Fingerprint: 14:0a:fd:8d:a8:28:b5:38:69:db:56:7e:61:22:03:3f -# SHA1 Fingerprint: 9d:70:bb:01:a5:a4:a0:18:11:2e:f7:1c:01:b9:32:c5:34:e7:88:a8 -# SHA256 Fingerprint: 2a:99:f5:bc:11:74:b7:3c:bb:1d:62:08:84:e0:1c:34:e5:1c:cb:39:78:da:12:5f:0e:33:26:88:83:bf:41:58 ------BEGIN CERTIFICATE----- -MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET -MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb -BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz -MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx -FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g -Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 -fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl -LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV -WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF -TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb -5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc -CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri -wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ -wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG -m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 -F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng -WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 -2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF -AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ -0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw -F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS -g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj -qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN -h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ -ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V -btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj -Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ -8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW -gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=Certplus Root CA G1 O=Certplus -# Subject: CN=Certplus Root CA G1 O=Certplus -# Label: "Certplus Root CA G1" -# Serial: 1491911565779898356709731176965615564637713 -# MD5 Fingerprint: 7f:09:9c:f7:d9:b9:5c:69:69:56:d5:37:3e:14:0d:42 -# SHA1 Fingerprint: 22:fd:d0:b7:fd:a2:4e:0d:ac:49:2c:a0:ac:a6:7b:6a:1f:e3:f7:66 -# SHA256 Fingerprint: 15:2a:40:2b:fc:df:2c:d5:48:05:4d:22:75:b3:9c:7f:ca:3e:c0:97:80:78:b0:f0:ea:76:e5:61:a6:c7:43:3e ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUA -MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy -dHBsdXMgUm9vdCBDQSBHMTAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBa -MD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2Vy -dHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHNr49a -iZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt -6kuJPKNxQv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP -0FG7Yn2ksYyy/yARujVjBYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f -6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTvLRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDE -EW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2z4QTd28n6v+WZxcIbekN -1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc4nBvCGrc -h2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCT -mehd4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV -4EJQeIQEQWGw9CEjjy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPO -WftwenMGE9nTdDckQQoRb5fc5+R+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1Ud -DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSowcCbkahDFXxd -Bie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHYlwuBsTANBgkq -hkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh -66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7 -/SMNkPX0XtPGYX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BS -S7CTKtQ+FjPlnsZlFT5kOwQ/2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j -2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F6ALEUz65noe8zDUa3qHpimOHZR4R -Kttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilXCNQ314cnrUlZp5Gr -RHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWetUNy -6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEV -V/xuZDDCVRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5 -g4VCXA9DO2pJNdWY9BW/+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl -++O/QmueD6i9a5jc2NvLi6Td11n0bt3+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= ------END CERTIFICATE----- - -# Issuer: CN=Certplus Root CA G2 O=Certplus -# Subject: CN=Certplus Root CA G2 O=Certplus -# Label: "Certplus Root CA G2" -# Serial: 1492087096131536844209563509228951875861589 -# MD5 Fingerprint: a7:ee:c4:78:2d:1b:ee:2d:b9:29:ce:d6:a7:96:32:31 -# SHA1 Fingerprint: 4f:65:8e:1f:e9:06:d8:28:02:e9:54:47:41:c9:54:25:5d:69:cc:1a -# SHA256 Fingerprint: 6c:c0:50:41:e6:44:5e:74:69:6c:4c:fb:c9:f8:0f:54:3b:7e:ab:bb:44:b4:ce:6f:78:7c:6a:99:71:c4:2f:17 ------BEGIN CERTIFICATE----- -MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4x -CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs -dXMgUm9vdCBDQSBHMjAeFw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4x -CzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBs -dXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABM0PW1aC3/BFGtat -93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uNAm8x -Ik0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwj -FNiPwyCrKGBZMB8GA1UdIwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqG -SM49BAMDA2gAMGUCMHD+sAvZ94OX7PNVHdTcswYO/jOYnYs5kGuUIe22113WTNch -p+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjlvPl5adytRSv3tjFzzAal -U5ORGpOucGpnutee5WEaXw== ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G1 O=OpenTrust -# Subject: CN=OpenTrust Root CA G1 O=OpenTrust -# Label: "OpenTrust Root CA G1" -# Serial: 1492036577811947013770400127034825178844775 -# MD5 Fingerprint: 76:00:cc:81:29:cd:55:5e:88:6a:7a:2e:f7:4d:39:da -# SHA1 Fingerprint: 79:91:e8:34:f7:e2:ee:dd:08:95:01:52:e9:55:2d:14:e9:58:d5:7e -# SHA256 Fingerprint: 56:c7:71:28:d9:8c:18:d9:1b:4c:fd:ff:bc:25:ee:91:03:d4:75:8e:a2:ab:ad:82:6a:90:f3:45:7d:46:0e:b4 ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUA -MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w -ZW5UcnVzdCBSb290IENBIEcxMB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAw -MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU -T3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7faYp6b -wiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX -/uMftk87ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR0 -77F9jAHiOH3BX2pfJLKOYheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGP -uY4zbGneWK2gDqdkVBFpRGZPTBKnjix9xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLx -p2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO9z0M+Yo0FMT7MzUj8czx -Kselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq3ywgsNw2 -TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+W -G+Oin6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPw -vFEVVJSmdz7QdFG9URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYY -EQRVzXR7z2FwefR7LFxckvzluFqrTJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUl0YhVyE1 -2jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/PxN3DlCPaTKbYw -DQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E -PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kf -gLMtMrpkZ2CvuVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbS -FXJfLkur1J1juONI5f6ELlgKn0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0 -V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLhX4SPgPL0DTatdrOjteFkdjpY3H1P -XlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80nR14SohWZ25g/4/I -i+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcmGS3t -TAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L91 -09S5zvE/bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/Ky -Pu1svf0OnWZzsD2097+o4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJ -AwSQiumPv+i2tCqjI40cHLI5kqiPAlxAOXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj -1oxx ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G2 O=OpenTrust -# Subject: CN=OpenTrust Root CA G2 O=OpenTrust -# Label: "OpenTrust Root CA G2" -# Serial: 1492012448042702096986875987676935573415441 -# MD5 Fingerprint: 57:24:b6:59:24:6b:ae:c8:fe:1c:0c:20:f2:c0:4e:eb -# SHA1 Fingerprint: 79:5f:88:60:c5:ab:7c:3d:92:e6:cb:f4:8d:e1:45:cd:11:ef:60:0b -# SHA256 Fingerprint: 27:99:58:29:fe:6a:75:15:c1:bf:e8:48:f9:c4:76:1d:b1:6c:22:59:29:25:7b:f4:0d:08:94:f2:9e:a8:ba:f2 ------BEGIN CERTIFICATE----- -MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUA -MEAxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9w -ZW5UcnVzdCBSb290IENBIEcyMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAw -MFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwU -T3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+Ntmh -/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78e -CbY2albz4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/6 -1UWY0jUJ9gNDlP7ZvyCVeYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fE -FY8ElggGQgT4hNYdvJGmQr5J1WqIP7wtUdGejeBSzFfdNTVY27SPJIjki9/ca1TS -gSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz3GIZ38i1MH/1PCZ1Eb3X -G7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj3CzMpSZy -YhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaH -vGOz9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4 -t/bQWVyJ98LVtZR00dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/ -gh7PU3+06yzbXfZqfUAkBXKJOAGTy3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUajn6QiL3 -5okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59M4PLuG53hq8w -DQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz -Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0 -nXGEL8pZ0keImUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qT -RmTFAHneIWv2V6CG1wZy7HBGS4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpT -wm+bREx50B1ws9efAvSyB7DH5fitIw6mVskpEndI2S9G/Tvw/HRwkqWOOAgfZDC2 -t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ6e18CL13zSdkzJTa -TkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97krgCf2 -o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU -3jg9CcCoSmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eA -iN1nE28daCSLT7d0geX0YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14f -WKGVyasvc0rQLW6aWQ9VGHgtPFGml4vmu7JwqkwR3v98KzfUetF3NI/n+UL3PIEM -S1IK ------END CERTIFICATE----- - -# Issuer: CN=OpenTrust Root CA G3 O=OpenTrust -# Subject: CN=OpenTrust Root CA G3 O=OpenTrust -# Label: "OpenTrust Root CA G3" -# Serial: 1492104908271485653071219941864171170455615 -# MD5 Fingerprint: 21:37:b4:17:16:92:7b:67:46:70:a9:96:d7:a8:13:24 -# SHA1 Fingerprint: 6e:26:64:f3:56:bf:34:55:bf:d1:93:3f:7c:01:de:d8:13:da:8a:a6 -# SHA256 Fingerprint: b7:c3:62:31:70:6e:81:07:8c:36:7c:b8:96:19:8f:1e:32:08:dd:92:69:49:dd:8f:57:09:a4:10:f7:5b:62:92 ------BEGIN CERTIFICATE----- -MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAx -CzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5U -cnVzdCBSb290IENBIEczMB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFow -QDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9wZW5UcnVzdDEdMBsGA1UEAwwUT3Bl -blRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARK7liuTcpm -3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5Bta1d -oYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5 -DMlv4VBN0BBY3JWIbTAfBgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAK -BggqhkjOPQQDAwNpADBmAjEAj6jcnboMBBf6Fek9LykBl7+BFjNAk2z8+e2AcG+q -j9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta3U1fJAuwACEl74+nBCZx -4nxp5V2a+EEfOzmTk51V6s2N8fvB ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Subject: CN=LuxTrust Global Root 2 O=LuxTrust S.A. -# Label: "LuxTrust Global Root 2" -# Serial: 59914338225734147123941058376788110305822489521 -# MD5 Fingerprint: b2:e1:09:00:61:af:f7:f1:91:6f:c4:ad:8d:5e:3b:7c -# SHA1 Fingerprint: 1e:0e:56:19:0a:d1:8b:25:98:b2:04:44:ff:66:8a:04:17:99:5f:3f -# SHA256 Fingerprint: 54:45:5f:71:29:c2:0b:14:47:c4:18:f9:97:16:8f:24:c5:8f:c5:02:3b:f5:da:5b:e2:eb:6e:1d:d8:90:2e:d5 ------BEGIN CERTIFICATE----- -MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQEL -BQAwRjELMAkGA1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNV -BAMMFkx1eFRydXN0IEdsb2JhbCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUw -MzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEWMBQGA1UECgwNTHV4VHJ1c3QgUy5B -LjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wmKb3F -ibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTem -hfY7RBi2xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1 -EMShduxq3sVs35a0VkBCwGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsn -Xpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4 -zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkmFRseTJIpgp7VkoGSQXAZ -96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niFwpN6cj5m -j5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4g -DEa/a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+ -8kPREd8vZS9kzl8UubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2j -X5t/Lax5Gw5CMZdjpPuKadUiDTSQMC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmH -hFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB/zBCBgNVHSAEOzA5MDcGByuB -KwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5Lmx1eHRydXN0 -Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT -+Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQEL -BQADggIBAGoZFO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9 -BzZAcg4atmpZ1gDlaCDdLnINH2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTO -jFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW7MM3LGVYvlcAGvI1+ut7MV3CwRI9 -loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIuZY+kt9J/Z93I055c -qqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWAVWe+ -2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/ -JEAdemrRTxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKre -zrnK+T+Tb/mjuuqlPpmt/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQf -LSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+ -x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31IiyBMz2TWuJdGsE7RKlY6 -oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-1" -# Serial: 15752444095811006489 -# MD5 Fingerprint: 6e:85:f1:dc:1a:00:d3:22:d5:b2:b2:ac:6b:37:05:45 -# SHA1 Fingerprint: ff:bd:cd:e7:82:c8:43:5e:3c:6f:26:86:5c:ca:a8:3a:45:5b:c3:0a -# SHA256 Fingerprint: d4:0e:9c:86:cd:8f:e4:68:c1:77:69:59:f4:9e:a7:74:fa:54:86:84:b6:c4:06:f3:90:92:61:f4:dc:e2:57:5c ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29y -IFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkxMjMxMTcyMzE2WjCB -pDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFuYW1h -IENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUG -A1UECwweVHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZU -cnVzdENvciBSb290Q2VydCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAv463leLCJhJrMxnHQFgKq1mqjQCj/IDHUHuO1CAmujIS2CNUSSUQIpid -RtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4pQa81QBeCQryJ3pS/C3V -seq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0JEsq1pme -9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CV -EY4hgLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorW -hnAbJN7+KIor0Gqw/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/ -DeOxCbeKyKsZn3MzUOcwHwYDVR0jBBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD -ggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5mDo4Nvu7Zp5I -/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZ -yonnMlo2HD6CqFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djts -L1Ac59v2Z3kf9YKVmgenFK+P3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdN -zl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -# Issuer: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor RootCert CA-2 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor RootCert CA-2" -# Serial: 2711694510199101698 -# MD5 Fingerprint: a2:e1:f8:18:0b:ba:45:d5:c7:41:2a:bb:37:52:45:64 -# SHA1 Fingerprint: b8:be:6d:cb:56:f1:55:b9:63:d4:12:ca:4e:06:34:c7:94:b2:1c:c0 -# SHA256 Fingerprint: 07:53:e9:40:37:8c:1b:d5:e3:83:6e:39:5d:ae:a5:cb:83:9e:50:46:f1:bd:0e:ae:19:51:cf:10:fe:c7:c9:65 ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEfMB0GA1UEAwwWVHJ1c3RDb3Ig -Um9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEyMzExNzI2MzlaMIGk -MQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEg -Q2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYD -VQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRy -dXN0Q29yIFJvb3RDZXJ0IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCnIG7CKqJiJJWQdsg4foDSq8GbZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+ -QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9NkRvRUqdw6VC0xK5mC8tkq -1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1oYxOdqHp -2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nK -DOObXUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hape -az6LMvYHL1cEksr1/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF -3wP+TfSvPd9cW436cOGlfifHhi5qjxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88 -oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQPeSghYA2FFn3XVDjxklb9tTNM -g9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+CtgrKAmrhQhJ8Z3 -mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAd -BgNVHQ4EFgQU2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6U -nrybPZx9mCAZ5YwwYrIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYw -DQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/hOsh80QA9z+LqBrWyOrsGS2h60COX -dKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnpkpfbsEZC89NiqpX+ -MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv2wnL -/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RX -CI/hOWB3S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYa -ZH9bDTMJBzN7Bj8RpFxwPIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW -2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dvDDqPys/cA8GiCcjl/YBeyGBCARsaU1q7 -N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYURpFHmygk71dSTlxCnKr3 -Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANExdqtvArB -As8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp -5KeXRKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu -1uwJ ------END CERTIFICATE----- - -# Issuer: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Subject: CN=TrustCor ECA-1 O=TrustCor Systems S. de R.L. OU=TrustCor Certificate Authority -# Label: "TrustCor ECA-1" -# Serial: 9548242946988625984 -# MD5 Fingerprint: 27:92:23:1d:0a:f5:40:7c:e9:e6:6b:9d:d8:f5:e7:6c -# SHA1 Fingerprint: 58:d1:df:95:95:67:6b:63:c0:f0:5b:1c:17:4d:8b:84:0b:c8:78:bd -# SHA256 Fingerprint: 5a:88:5d:b1:9c:01:d9:12:c5:75:93:88:93:8c:af:bb:df:03:1a:b2:d4:8e:91:ee:15:58:9b:42:97:1d:03:9c ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYD -VQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEk -MCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxFzAVBgNVBAMMDlRydXN0Q29y -IEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3MjgwN1owgZwxCzAJBgNV -BAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQw -IgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRy -dXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3Ig -RUNBLTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb -3w9U73NjKYKtR8aja+3+XzP4Q1HpGjORMRegdMTUpwHmspI+ap3tDvl0mEDTPwOA -BoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23xFUfJ3zSCNV2HykVh0A5 -3ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmcp0yJF4Ou -owReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/ -wZ0+fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZF -ZtS6mFjBAgMBAAGjYzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAf -BgNVHSMEGDAWgBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAQEABT41XBVwm8nHc2Fv -civUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u/ukZMjgDfxT2 -AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50 -soIipX1TH0XsJ5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BI -WJZpTdwHjFGTot+fDz2LYLSCjaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1Wi -tJ/X5g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/core.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/core.py deleted file mode 100644 index eab9d1d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/certifi/core.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -certifi.py -~~~~~~~~~~ - -This module returns the installation location of cacert.pem. -""" -import os -import warnings - - -class DeprecatedBundleWarning(DeprecationWarning): - """ - The weak security bundle is being deprecated. Please bother your service - provider to get them to stop using cross-signed roots. - """ - - -def where(): - f = os.path.dirname(__file__) - - return os.path.join(f, 'cacert.pem') - - -def old_where(): - warnings.warn( - "The weak security bundle has been removed. certifi.old_where() is now an alias " - "of certifi.where(). Please update your code to use certifi.where() instead. " - "certifi.old_where() will be removed in 2018.", - DeprecatedBundleWarning - ) - return where() - -if __name__ == '__main__': - print(where()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/__init__.py deleted file mode 100644 index 0f9f820..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/__init__.py +++ /dev/null @@ -1,39 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -from .compat import PY2, PY3 -from .universaldetector import UniversalDetector -from .version import __version__, VERSION - - -def detect(byte_str): - """ - Detect the encoding of the given byte string. - - :param byte_str: The byte sequence to examine. - :type byte_str: ``bytes`` or ``bytearray`` - """ - if not isinstance(byte_str, bytearray): - if not isinstance(byte_str, bytes): - raise TypeError('Expected object of type bytes or bytearray, got: ' - '{0}'.format(type(byte_str))) - else: - byte_str = bytearray(byte_str) - detector = UniversalDetector() - detector.feed(byte_str) - return detector.close() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5freq.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5freq.py deleted file mode 100644 index 38f3251..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5freq.py +++ /dev/null @@ -1,386 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Big5 frequency table -# by Taiwan's Mandarin Promotion Council -# <http://www.edu.tw:81/mandr/> -# -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -#Char to FreqOrder table -BIG5_TABLE_SIZE = 5376 - -BIG5_CHAR_TO_FREQ_ORDER = ( - 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 -3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 -1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 - 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 -3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 -4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 -5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 - 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 - 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 - 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 -2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 -1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 -3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 - 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 -3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 -2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 - 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 -3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 -1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 -5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 - 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 -5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 -1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 - 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 - 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 -3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 -3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 - 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 -2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 -2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 - 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 - 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 -3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 -1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 -1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 -1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 -2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 - 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 -4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 -1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 -5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 -2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 - 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 - 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 - 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 - 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 -5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 - 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 -1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 - 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 - 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 -5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 -1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 - 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 -3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 -4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 -3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 - 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 - 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 -1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 -4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 -3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 -3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 -2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 -5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 -3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 -5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 -1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 -2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 -1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 - 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 -1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 -4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 -3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 - 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 - 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 - 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 -2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 -5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 -1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 -2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 -1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 -1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 -5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 -5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 -5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 -3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 -4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 -4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 -2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 -5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 -3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 - 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 -5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 -5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 -1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 -2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 -3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 -4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 -5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 -3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 -4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 -1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 -1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 -4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 -1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 - 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 -1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 -1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 -3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 - 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 -5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 -2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 -1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 -1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 -5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 - 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 -4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 - 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 -2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 - 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 -1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 -1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 - 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 -4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 -4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 -1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 -3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 -5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 -5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 -1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 -2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 -1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 -3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 -2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 -3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 -2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 -4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 -4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 -3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 - 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 -3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 - 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 -3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 -4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 -3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 -1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 -5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 - 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 -5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 -1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 - 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 -4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 -4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 - 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 -2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 -2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 -3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 -1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 -4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 -2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 -1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 -1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 -2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 -3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 -1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 -5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 -1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 -4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 -1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 - 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 -1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 -4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 -4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 -2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 -1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 -4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 - 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 -5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 -2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 -3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 -4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 - 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 -5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 -5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 -1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 -4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 -4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 -2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 -3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 -3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 -2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 -1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 -4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 -3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 -3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 -2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 -4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 -5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 -3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 -2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 -3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 -1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 -2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 -3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 -4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 -2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 -2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 -5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 -1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 -2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 -1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 -3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 -4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 -2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 -3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 -3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 -2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 -4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 -2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 -3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 -4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 -5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 -3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 - 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 -1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 -4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 -1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 -4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 -5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 - 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 -5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 -5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 -2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 -3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 -2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 -2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 - 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 -1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 -4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 -3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 -3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 - 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 -2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 - 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 -2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 -4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 -1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 -4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 -1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 -3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 - 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 -3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 -5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 -5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 -3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 -3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 -1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 -2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 -5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 -1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 -1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 -3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 - 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 -1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 -4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 -5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 -2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 -3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 - 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 -1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 -2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 -2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 -5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 -5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 -5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 -2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 -2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 -1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 -4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 -3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 -3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 -4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 -4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 -2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 -2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 -5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 -4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 -5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 -4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 - 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 - 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 -1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 -3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 -4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 -1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 -5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 -2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 -2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 -3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 -5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 -1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 -3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 -5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 -1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 -5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 -2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 -3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 -2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 -3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 -3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 -3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 -4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 - 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 -2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 -4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 -3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 -5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 -1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 -5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 - 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 -1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 - 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 -4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 -1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 -4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 -1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 - 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 -3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 -4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 -5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 - 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 -3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 - 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 -2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 -) - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5prober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5prober.py deleted file mode 100644 index 98f9970..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/big5prober.py +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import Big5DistributionAnalysis -from .mbcssm import BIG5_SM_MODEL - - -class Big5Prober(MultiByteCharSetProber): - def __init__(self): - super(Big5Prober, self).__init__() - self.coding_sm = CodingStateMachine(BIG5_SM_MODEL) - self.distribution_analyzer = Big5DistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "Big5" - - @property - def language(self): - return "Chinese" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/chardistribution.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/chardistribution.py deleted file mode 100644 index c0395f4..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/chardistribution.py +++ /dev/null @@ -1,233 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .euctwfreq import (EUCTW_CHAR_TO_FREQ_ORDER, EUCTW_TABLE_SIZE, - EUCTW_TYPICAL_DISTRIBUTION_RATIO) -from .euckrfreq import (EUCKR_CHAR_TO_FREQ_ORDER, EUCKR_TABLE_SIZE, - EUCKR_TYPICAL_DISTRIBUTION_RATIO) -from .gb2312freq import (GB2312_CHAR_TO_FREQ_ORDER, GB2312_TABLE_SIZE, - GB2312_TYPICAL_DISTRIBUTION_RATIO) -from .big5freq import (BIG5_CHAR_TO_FREQ_ORDER, BIG5_TABLE_SIZE, - BIG5_TYPICAL_DISTRIBUTION_RATIO) -from .jisfreq import (JIS_CHAR_TO_FREQ_ORDER, JIS_TABLE_SIZE, - JIS_TYPICAL_DISTRIBUTION_RATIO) - - -class CharDistributionAnalysis(object): - ENOUGH_DATA_THRESHOLD = 1024 - SURE_YES = 0.99 - SURE_NO = 0.01 - MINIMUM_DATA_THRESHOLD = 3 - - def __init__(self): - # Mapping table to get frequency order from char order (get from - # GetOrder()) - self._char_to_freq_order = None - self._table_size = None # Size of above table - # This is a constant value which varies from language to language, - # used in calculating confidence. See - # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html - # for further detail. - self.typical_distribution_ratio = None - self._done = None - self._total_chars = None - self._freq_chars = None - self.reset() - - def reset(self): - """reset analyser, clear any state""" - # If this flag is set to True, detection is done and conclusion has - # been made - self._done = False - self._total_chars = 0 # Total characters encountered - # The number of characters whose frequency order is less than 512 - self._freq_chars = 0 - - def feed(self, char, char_len): - """feed a character with known length""" - if char_len == 2: - # we only care about 2-bytes character in our distribution analysis - order = self.get_order(char) - else: - order = -1 - if order >= 0: - self._total_chars += 1 - # order is valid - if order < self._table_size: - if 512 > self._char_to_freq_order[order]: - self._freq_chars += 1 - - def get_confidence(self): - """return confidence based on existing data""" - # if we didn't receive any character in our consideration range, - # return negative answer - if self._total_chars <= 0 or self._freq_chars <= self.MINIMUM_DATA_THRESHOLD: - return self.SURE_NO - - if self._total_chars != self._freq_chars: - r = (self._freq_chars / ((self._total_chars - self._freq_chars) - * self.typical_distribution_ratio)) - if r < self.SURE_YES: - return r - - # normalize confidence (we don't want to be 100% sure) - return self.SURE_YES - - def got_enough_data(self): - # It is not necessary to receive all data to draw conclusion. - # For charset detection, certain amount of data is enough - return self._total_chars > self.ENOUGH_DATA_THRESHOLD - - def get_order(self, byte_str): - # We do not handle characters based on the original encoding string, - # but convert this encoding string to a number, here called order. - # This allows multiple encodings of a language to share one frequency - # table. - return -1 - - -class EUCTWDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCTWDistributionAnalysis, self).__init__() - self._char_to_freq_order = EUCTW_CHAR_TO_FREQ_ORDER - self._table_size = EUCTW_TABLE_SIZE - self.typical_distribution_ratio = EUCTW_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-TW encoding, we are interested - # first byte range: 0xc4 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = byte_str[0] - if first_char >= 0xC4: - return 94 * (first_char - 0xC4) + byte_str[1] - 0xA1 - else: - return -1 - - -class EUCKRDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCKRDistributionAnalysis, self).__init__() - self._char_to_freq_order = EUCKR_CHAR_TO_FREQ_ORDER - self._table_size = EUCKR_TABLE_SIZE - self.typical_distribution_ratio = EUCKR_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-KR encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = byte_str[0] - if first_char >= 0xB0: - return 94 * (first_char - 0xB0) + byte_str[1] - 0xA1 - else: - return -1 - - -class GB2312DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(GB2312DistributionAnalysis, self).__init__() - self._char_to_freq_order = GB2312_CHAR_TO_FREQ_ORDER - self._table_size = GB2312_TABLE_SIZE - self.typical_distribution_ratio = GB2312_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for GB2312 encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if (first_char >= 0xB0) and (second_char >= 0xA1): - return 94 * (first_char - 0xB0) + second_char - 0xA1 - else: - return -1 - - -class Big5DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(Big5DistributionAnalysis, self).__init__() - self._char_to_freq_order = BIG5_CHAR_TO_FREQ_ORDER - self._table_size = BIG5_TABLE_SIZE - self.typical_distribution_ratio = BIG5_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for big5 encoding, we are interested - # first byte range: 0xa4 -- 0xfe - # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if first_char >= 0xA4: - if second_char >= 0xA1: - return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 - else: - return 157 * (first_char - 0xA4) + second_char - 0x40 - else: - return -1 - - -class SJISDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(SJISDistributionAnalysis, self).__init__() - self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER - self._table_size = JIS_TABLE_SIZE - self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for sjis encoding, we are interested - # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe - # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe - # no validation needed here. State machine has done that - first_char, second_char = byte_str[0], byte_str[1] - if (first_char >= 0x81) and (first_char <= 0x9F): - order = 188 * (first_char - 0x81) - elif (first_char >= 0xE0) and (first_char <= 0xEF): - order = 188 * (first_char - 0xE0 + 31) - else: - return -1 - order = order + second_char - 0x40 - if second_char > 0x7F: - order = -1 - return order - - -class EUCJPDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - super(EUCJPDistributionAnalysis, self).__init__() - self._char_to_freq_order = JIS_CHAR_TO_FREQ_ORDER - self._table_size = JIS_TABLE_SIZE - self.typical_distribution_ratio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, byte_str): - # for euc-JP encoding, we are interested - # first byte range: 0xa0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - char = byte_str[0] - if char >= 0xA0: - return 94 * (char - 0xA1) + byte_str[1] - 0xa1 - else: - return -1 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetgroupprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetgroupprober.py deleted file mode 100644 index 8b3738e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetgroupprober.py +++ /dev/null @@ -1,106 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import ProbingState -from .charsetprober import CharSetProber - - -class CharSetGroupProber(CharSetProber): - def __init__(self, lang_filter=None): - super(CharSetGroupProber, self).__init__(lang_filter=lang_filter) - self._active_num = 0 - self.probers = [] - self._best_guess_prober = None - - def reset(self): - super(CharSetGroupProber, self).reset() - self._active_num = 0 - for prober in self.probers: - if prober: - prober.reset() - prober.active = True - self._active_num += 1 - self._best_guess_prober = None - - @property - def charset_name(self): - if not self._best_guess_prober: - self.get_confidence() - if not self._best_guess_prober: - return None - return self._best_guess_prober.charset_name - - @property - def language(self): - if not self._best_guess_prober: - self.get_confidence() - if not self._best_guess_prober: - return None - return self._best_guess_prober.language - - def feed(self, byte_str): - for prober in self.probers: - if not prober: - continue - if not prober.active: - continue - state = prober.feed(byte_str) - if not state: - continue - if state == ProbingState.FOUND_IT: - self._best_guess_prober = prober - return self.state - elif state == ProbingState.NOT_ME: - prober.active = False - self._active_num -= 1 - if self._active_num <= 0: - self._state = ProbingState.NOT_ME - return self.state - return self.state - - def get_confidence(self): - state = self.state - if state == ProbingState.FOUND_IT: - return 0.99 - elif state == ProbingState.NOT_ME: - return 0.01 - best_conf = 0.0 - self._best_guess_prober = None - for prober in self.probers: - if not prober: - continue - if not prober.active: - self.logger.debug('%s not active', prober.charset_name) - continue - conf = prober.get_confidence() - self.logger.debug('%s %s confidence = %s', prober.charset_name, prober.language, conf) - if best_conf < conf: - best_conf = conf - self._best_guess_prober = prober - if not self._best_guess_prober: - return 0.0 - return best_conf diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetprober.py deleted file mode 100644 index eac4e59..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/charsetprober.py +++ /dev/null @@ -1,145 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import logging -import re - -from .enums import ProbingState - - -class CharSetProber(object): - - SHORTCUT_THRESHOLD = 0.95 - - def __init__(self, lang_filter=None): - self._state = None - self.lang_filter = lang_filter - self.logger = logging.getLogger(__name__) - - def reset(self): - self._state = ProbingState.DETECTING - - @property - def charset_name(self): - return None - - def feed(self, buf): - pass - - @property - def state(self): - return self._state - - def get_confidence(self): - return 0.0 - - @staticmethod - def filter_high_byte_only(buf): - buf = re.sub(b'([\x00-\x7F])+', b' ', buf) - return buf - - @staticmethod - def filter_international_words(buf): - """ - We define three types of bytes: - alphabet: english alphabets [a-zA-Z] - international: international characters [\x80-\xFF] - marker: everything else [^a-zA-Z\x80-\xFF] - - The input buffer can be thought to contain a series of words delimited - by markers. This function works to filter all words that contain at - least one international character. All contiguous sequences of markers - are replaced by a single space ascii character. - - This filter applies to all scripts which do not use English characters. - """ - filtered = bytearray() - - # This regex expression filters out only words that have at-least one - # international character. The word may include one marker character at - # the end. - words = re.findall(b'[a-zA-Z]*[\x80-\xFF]+[a-zA-Z]*[^a-zA-Z\x80-\xFF]?', - buf) - - for word in words: - filtered.extend(word[:-1]) - - # If the last character in the word is a marker, replace it with a - # space as markers shouldn't affect our analysis (they are used - # similarly across all languages and may thus have similar - # frequencies). - last_char = word[-1:] - if not last_char.isalpha() and last_char < b'\x80': - last_char = b' ' - filtered.extend(last_char) - - return filtered - - @staticmethod - def filter_with_english_letters(buf): - """ - Returns a copy of ``buf`` that retains only the sequences of English - alphabet and high byte characters that are not between <> characters. - Also retains English alphabet and high byte characters immediately - before occurrences of >. - - This filter can be applied to all scripts which contain both English - characters and extended ASCII characters, but is currently only used by - ``Latin1Prober``. - """ - filtered = bytearray() - in_tag = False - prev = 0 - - for curr in range(len(buf)): - # Slice here to get bytes instead of an int with Python 3 - buf_char = buf[curr:curr + 1] - # Check if we're coming out of or entering an HTML tag - if buf_char == b'>': - in_tag = False - elif buf_char == b'<': - in_tag = True - - # If current character is not extended-ASCII and not alphabetic... - if buf_char < b'\x80' and not buf_char.isalpha(): - # ...and we're not in a tag - if curr > prev and not in_tag: - # Keep everything after last non-extended-ASCII, - # non-alphabetic character - filtered.extend(buf[prev:curr]) - # Output a space to delimit stretch we kept - filtered.extend(b' ') - prev = curr + 1 - - # If we're not in a tag... - if not in_tag: - # Keep everything after last non-extended-ASCII, non-alphabetic - # character - filtered.extend(buf[prev:]) - - return filtered diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/__init__.py deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/chardetect.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/chardetect.py deleted file mode 100644 index c61136b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cli/chardetect.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python -""" -Script which takes one or more file paths and reports on their detected -encodings - -Example:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -If no paths are provided, it takes its input from stdin. - -""" - -from __future__ import absolute_import, print_function, unicode_literals - -import argparse -import sys - -from pip._vendor.chardet import __version__ -from pip._vendor.chardet.compat import PY2 -from pip._vendor.chardet.universaldetector import UniversalDetector - - -def description_of(lines, name='stdin'): - """ - Return a string describing the probable encoding of a file or - list of strings. - - :param lines: The lines to get the encoding of. - :type lines: Iterable of bytes - :param name: Name of file or collection of lines - :type name: str - """ - u = UniversalDetector() - for line in lines: - line = bytearray(line) - u.feed(line) - # shortcut out of the loop to save reading further - particularly useful if we read a BOM. - if u.done: - break - u.close() - result = u.result - if PY2: - name = name.decode(sys.getfilesystemencoding(), 'ignore') - if result['encoding']: - return '{0}: {1} with confidence {2}'.format(name, result['encoding'], - result['confidence']) - else: - return '{0}: no result'.format(name) - - -def main(argv=None): - """ - Handles command line arguments and gets things started. - - :param argv: List of arguments, as if specified on the command-line. - If None, ``sys.argv[1:]`` is used instead. - :type argv: list of str - """ - # Get command line arguments - parser = argparse.ArgumentParser( - description="Takes one or more file paths and reports their detected \ - encodings") - parser.add_argument('input', - help='File whose encoding we would like to determine. \ - (default: stdin)', - type=argparse.FileType('rb'), nargs='*', - default=[sys.stdin if PY2 else sys.stdin.buffer]) - parser.add_argument('--version', action='version', - version='%(prog)s {0}'.format(__version__)) - args = parser.parse_args(argv) - - for f in args.input: - if f.isatty(): - print("You are running chardetect interactively. Press " + - "CTRL-D twice at the start of a blank line to signal the " + - "end of your input. If you want help, run chardetect " + - "--help\n", file=sys.stderr) - print(description_of(f, f.name)) - - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/codingstatemachine.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/codingstatemachine.py deleted file mode 100644 index 68fba44..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/codingstatemachine.py +++ /dev/null @@ -1,88 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import logging - -from .enums import MachineState - - -class CodingStateMachine(object): - """ - A state machine to verify a byte sequence for a particular encoding. For - each byte the detector receives, it will feed that byte to every active - state machine available, one byte at a time. The state machine changes its - state based on its previous state and the byte it receives. There are 3 - states in a state machine that are of interest to an auto-detector: - - START state: This is the state to start with, or a legal byte sequence - (i.e. a valid code point) for character has been identified. - - ME state: This indicates that the state machine identified a byte sequence - that is specific to the charset it is designed for and that - there is no other possible encoding which can contain this byte - sequence. This will to lead to an immediate positive answer for - the detector. - - ERROR state: This indicates the state machine identified an illegal byte - sequence for that encoding. This will lead to an immediate - negative answer for this encoding. Detector will exclude this - encoding from consideration from here on. - """ - def __init__(self, sm): - self._model = sm - self._curr_byte_pos = 0 - self._curr_char_len = 0 - self._curr_state = None - self.logger = logging.getLogger(__name__) - self.reset() - - def reset(self): - self._curr_state = MachineState.START - - def next_state(self, c): - # for each byte we get its class - # if it is first byte, we also get byte length - byte_class = self._model['class_table'][c] - if self._curr_state == MachineState.START: - self._curr_byte_pos = 0 - self._curr_char_len = self._model['char_len_table'][byte_class] - # from byte's class and state_table, we get its next state - curr_state = (self._curr_state * self._model['class_factor'] - + byte_class) - self._curr_state = self._model['state_table'][curr_state] - self._curr_byte_pos += 1 - return self._curr_state - - def get_current_charlen(self): - return self._curr_char_len - - def get_coding_state_machine(self): - return self._model['name'] - - @property - def language(self): - return self._model['language'] diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/compat.py deleted file mode 100644 index ddd7468..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/compat.py +++ /dev/null @@ -1,34 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# Contributor(s): -# Dan Blanchard -# Ian Cordasco -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys - - -if sys.version_info < (3, 0): - PY2 = True - PY3 = False - base_str = (str, unicode) - text_type = unicode -else: - PY2 = False - PY3 = True - base_str = (bytes, str) - text_type = str diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cp949prober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cp949prober.py deleted file mode 100644 index efd793a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/cp949prober.py +++ /dev/null @@ -1,49 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .chardistribution import EUCKRDistributionAnalysis -from .codingstatemachine import CodingStateMachine -from .mbcharsetprober import MultiByteCharSetProber -from .mbcssm import CP949_SM_MODEL - - -class CP949Prober(MultiByteCharSetProber): - def __init__(self): - super(CP949Prober, self).__init__() - self.coding_sm = CodingStateMachine(CP949_SM_MODEL) - # NOTE: CP949 is a superset of EUC-KR, so the distribution should be - # not different. - self.distribution_analyzer = EUCKRDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "CP949" - - @property - def language(self): - return "Korean" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/enums.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/enums.py deleted file mode 100644 index 0451207..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/enums.py +++ /dev/null @@ -1,76 +0,0 @@ -""" -All of the Enums that are used throughout the chardet package. - -:author: Dan Blanchard (dan.blanchard@gmail.com) -""" - - -class InputState(object): - """ - This enum represents the different states a universal detector can be in. - """ - PURE_ASCII = 0 - ESC_ASCII = 1 - HIGH_BYTE = 2 - - -class LanguageFilter(object): - """ - This enum represents the different language filters we can apply to a - ``UniversalDetector``. - """ - CHINESE_SIMPLIFIED = 0x01 - CHINESE_TRADITIONAL = 0x02 - JAPANESE = 0x04 - KOREAN = 0x08 - NON_CJK = 0x10 - ALL = 0x1F - CHINESE = CHINESE_SIMPLIFIED | CHINESE_TRADITIONAL - CJK = CHINESE | JAPANESE | KOREAN - - -class ProbingState(object): - """ - This enum represents the different states a prober can be in. - """ - DETECTING = 0 - FOUND_IT = 1 - NOT_ME = 2 - - -class MachineState(object): - """ - This enum represents the different states a state machine can be in. - """ - START = 0 - ERROR = 1 - ITS_ME = 2 - - -class SequenceLikelihood(object): - """ - This enum represents the likelihood of a character following the previous one. - """ - NEGATIVE = 0 - UNLIKELY = 1 - LIKELY = 2 - POSITIVE = 3 - - @classmethod - def get_num_categories(cls): - """:returns: The number of likelihood categories in the enum.""" - return 4 - - -class CharacterCategory(object): - """ - This enum represents the different categories language models for - ``SingleByteCharsetProber`` put characters into. - - Anything less than CONTROL is considered a letter. - """ - UNDEFINED = 255 - LINE_BREAK = 254 - SYMBOL = 253 - DIGIT = 252 - CONTROL = 251 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escprober.py deleted file mode 100644 index c70493f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escprober.py +++ /dev/null @@ -1,101 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .codingstatemachine import CodingStateMachine -from .enums import LanguageFilter, ProbingState, MachineState -from .escsm import (HZ_SM_MODEL, ISO2022CN_SM_MODEL, ISO2022JP_SM_MODEL, - ISO2022KR_SM_MODEL) - - -class EscCharSetProber(CharSetProber): - """ - This CharSetProber uses a "code scheme" approach for detecting encodings, - whereby easily recognizable escape or shift sequences are relied on to - identify these encodings. - """ - - def __init__(self, lang_filter=None): - super(EscCharSetProber, self).__init__(lang_filter=lang_filter) - self.coding_sm = [] - if self.lang_filter & LanguageFilter.CHINESE_SIMPLIFIED: - self.coding_sm.append(CodingStateMachine(HZ_SM_MODEL)) - self.coding_sm.append(CodingStateMachine(ISO2022CN_SM_MODEL)) - if self.lang_filter & LanguageFilter.JAPANESE: - self.coding_sm.append(CodingStateMachine(ISO2022JP_SM_MODEL)) - if self.lang_filter & LanguageFilter.KOREAN: - self.coding_sm.append(CodingStateMachine(ISO2022KR_SM_MODEL)) - self.active_sm_count = None - self._detected_charset = None - self._detected_language = None - self._state = None - self.reset() - - def reset(self): - super(EscCharSetProber, self).reset() - for coding_sm in self.coding_sm: - if not coding_sm: - continue - coding_sm.active = True - coding_sm.reset() - self.active_sm_count = len(self.coding_sm) - self._detected_charset = None - self._detected_language = None - - @property - def charset_name(self): - return self._detected_charset - - @property - def language(self): - return self._detected_language - - def get_confidence(self): - if self._detected_charset: - return 0.99 - else: - return 0.00 - - def feed(self, byte_str): - for c in byte_str: - for coding_sm in self.coding_sm: - if not coding_sm or not coding_sm.active: - continue - coding_state = coding_sm.next_state(c) - if coding_state == MachineState.ERROR: - coding_sm.active = False - self.active_sm_count -= 1 - if self.active_sm_count <= 0: - self._state = ProbingState.NOT_ME - return self.state - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - self._detected_charset = coding_sm.get_coding_state_machine() - self._detected_language = coding_sm.language - return self.state - - return self.state diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escsm.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escsm.py deleted file mode 100644 index 0069523..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/escsm.py +++ /dev/null @@ -1,246 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import MachineState - -HZ_CLS = ( -1,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,0,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,4,0,5,2,0, # 78 - 7f -1,1,1,1,1,1,1,1, # 80 - 87 -1,1,1,1,1,1,1,1, # 88 - 8f -1,1,1,1,1,1,1,1, # 90 - 97 -1,1,1,1,1,1,1,1, # 98 - 9f -1,1,1,1,1,1,1,1, # a0 - a7 -1,1,1,1,1,1,1,1, # a8 - af -1,1,1,1,1,1,1,1, # b0 - b7 -1,1,1,1,1,1,1,1, # b8 - bf -1,1,1,1,1,1,1,1, # c0 - c7 -1,1,1,1,1,1,1,1, # c8 - cf -1,1,1,1,1,1,1,1, # d0 - d7 -1,1,1,1,1,1,1,1, # d8 - df -1,1,1,1,1,1,1,1, # e0 - e7 -1,1,1,1,1,1,1,1, # e8 - ef -1,1,1,1,1,1,1,1, # f0 - f7 -1,1,1,1,1,1,1,1, # f8 - ff -) - -HZ_ST = ( -MachineState.START,MachineState.ERROR, 3,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START, 4,MachineState.ERROR,# 10-17 - 5,MachineState.ERROR, 6,MachineState.ERROR, 5, 5, 4,MachineState.ERROR,# 18-1f - 4,MachineState.ERROR, 4, 4, 4,MachineState.ERROR, 4,MachineState.ERROR,# 20-27 - 4,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 28-2f -) - -HZ_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) - -HZ_SM_MODEL = {'class_table': HZ_CLS, - 'class_factor': 6, - 'state_table': HZ_ST, - 'char_len_table': HZ_CHAR_LEN_TABLE, - 'name': "HZ-GB-2312", - 'language': 'Chinese'} - -ISO2022CN_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,3,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,4,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022CN_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 -MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f -MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,# 18-1f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 20-27 - 5, 6,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 28-2f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 30-37 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,# 38-3f -) - -ISO2022CN_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022CN_SM_MODEL = {'class_table': ISO2022CN_CLS, - 'class_factor': 9, - 'state_table': ISO2022CN_ST, - 'char_len_table': ISO2022CN_CHAR_LEN_TABLE, - 'name': "ISO-2022-CN", - 'language': 'Chinese'} - -ISO2022JP_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,2,2, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,7,0,0,0, # 20 - 27 -3,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -6,0,4,0,8,0,0,0, # 40 - 47 -0,9,5,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022JP_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 00-07 -MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 08-0f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 10-17 -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,# 18-1f -MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 20-27 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 6,MachineState.ITS_ME,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,# 28-2f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,# 30-37 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 38-3f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.START,# 40-47 -) - -ISO2022JP_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022JP_SM_MODEL = {'class_table': ISO2022JP_CLS, - 'class_factor': 10, - 'state_table': ISO2022JP_ST, - 'char_len_table': ISO2022JP_CHAR_LEN_TABLE, - 'name': "ISO-2022-JP", - 'language': 'Japanese'} - -ISO2022KR_CLS = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,3,0,0,0, # 20 - 27 -0,4,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,5,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022KR_ST = ( -MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,# 00-07 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,# 08-0f -MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 4,MachineState.ERROR,MachineState.ERROR,# 10-17 -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,# 18-1f -MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.START,MachineState.START,MachineState.START,MachineState.START,# 20-27 -) - -ISO2022KR_CHAR_LEN_TABLE = (0, 0, 0, 0, 0, 0) - -ISO2022KR_SM_MODEL = {'class_table': ISO2022KR_CLS, - 'class_factor': 6, - 'state_table': ISO2022KR_ST, - 'char_len_table': ISO2022KR_CHAR_LEN_TABLE, - 'name': "ISO-2022-KR", - 'language': 'Korean'} - - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/eucjpprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/eucjpprober.py deleted file mode 100644 index 20ce8f7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/eucjpprober.py +++ /dev/null @@ -1,92 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import ProbingState, MachineState -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCJPDistributionAnalysis -from .jpcntx import EUCJPContextAnalysis -from .mbcssm import EUCJP_SM_MODEL - - -class EUCJPProber(MultiByteCharSetProber): - def __init__(self): - super(EUCJPProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCJP_SM_MODEL) - self.distribution_analyzer = EUCJPDistributionAnalysis() - self.context_analyzer = EUCJPContextAnalysis() - self.reset() - - def reset(self): - super(EUCJPProber, self).reset() - self.context_analyzer.reset() - - @property - def charset_name(self): - return "EUC-JP" - - @property - def language(self): - return "Japanese" - - def feed(self, byte_str): - for i in range(len(byte_str)): - # PY3K: byte_str is a byte array, so byte_str[i] is an int, not a byte - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.context_analyzer.feed(self._last_char, char_len) - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.context_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.context_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - context_conf = self.context_analyzer.get_confidence() - distrib_conf = self.distribution_analyzer.get_confidence() - return max(context_conf, distrib_conf) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrfreq.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrfreq.py deleted file mode 100644 index b68078c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrfreq.py +++ /dev/null @@ -1,195 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology - -# 128 --> 0.79 -# 256 --> 0.92 -# 512 --> 0.986 -# 1024 --> 0.99944 -# 2048 --> 0.99999 -# -# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 -# Random Distribution Ration = 512 / (2350-512) = 0.279. -# -# Typical Distribution Ratio - -EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 - -EUCKR_TABLE_SIZE = 2352 - -# Char to FreqOrder table , -EUCKR_CHAR_TO_FREQ_ORDER = ( - 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, -1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, -1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, - 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, - 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, - 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, -1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, - 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, - 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, -1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, -1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, -1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, -1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, -1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, - 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, -1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, -1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, -1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, -1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, - 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, -1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, - 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, - 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, -1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, - 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, -1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, - 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, - 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, -1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, -1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, -1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, -1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, - 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, -1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, - 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, - 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, -1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, -1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, -1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, -1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, -1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, -1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, - 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, - 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, - 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, -1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, - 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, -1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, - 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, - 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, -2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, - 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, - 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, -2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, -2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, -2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, - 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, - 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, -2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, - 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, -1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, -2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, -1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, -2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, -2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, -1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, - 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, -2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, -2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, - 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, - 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, -2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, -1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, -2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, -2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, -2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, -2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, -2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, -2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, -1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, -2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, -2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, -2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, -2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, -2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, -1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, -1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, -2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, -1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, -2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, -1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, - 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, -2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, - 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, -2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, - 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, -2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, -2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, - 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, -2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, -1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, - 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, -1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, -2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, -1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, -2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, - 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, -2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, -1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, -2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, -1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, -2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, -1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, - 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, -2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, -2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, - 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, - 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, -1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, -1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, - 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, -2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, -2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, - 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, - 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, - 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, -2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, - 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, - 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, -2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, -2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, - 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, -2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, -1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, - 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, -2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, -2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, -2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, - 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, - 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, - 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, -2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, -2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, -2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, -1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, -2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, - 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 -) - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrprober.py deleted file mode 100644 index 345a060..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euckrprober.py +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCKRDistributionAnalysis -from .mbcssm import EUCKR_SM_MODEL - - -class EUCKRProber(MultiByteCharSetProber): - def __init__(self): - super(EUCKRProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCKR_SM_MODEL) - self.distribution_analyzer = EUCKRDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "EUC-KR" - - @property - def language(self): - return "Korean" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwfreq.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwfreq.py deleted file mode 100644 index ed7a995..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwfreq.py +++ /dev/null @@ -1,387 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# EUCTW frequency table -# Converted from big5 work -# by Taiwan's Mandarin Promotion Council -# <http:#www.edu.tw:81/mandr/> - -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -# Char to FreqOrder table , -EUCTW_TABLE_SIZE = 5376 - -EUCTW_CHAR_TO_FREQ_ORDER = ( - 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 -3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 -1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 - 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 -3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 -4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 -7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 - 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 - 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 - 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 -2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 -1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 -3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 - 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 -3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 -2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 - 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 -3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 -1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 -7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 - 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 -7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 -1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 - 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 - 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 -3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 -3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 - 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 -2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 -2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 - 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 - 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 -3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 -1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 -1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 -1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 -2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 - 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 -4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 -1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 -7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 -2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 - 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 - 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 - 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 - 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 -7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 - 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 -1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 - 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 - 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 -7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 -1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 - 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 -3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 -4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 -3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 - 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 - 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 -1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 -4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 -3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 -3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 -2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 -7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 -3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 -7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 -1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 -2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 -1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 - 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 -1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 -4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 -3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 - 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 - 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 - 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 -2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 -7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 -1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 -2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 -1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 -1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 -7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 -7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 -7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 -3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 -4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 -1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 -7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 -2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 -7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 -3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 -3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 -7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 -2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 -7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 - 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 -4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 -2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 -7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 -3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 -2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 -2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 - 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 -2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 -1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 -1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 -2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 -1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 -7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 -7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 -2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 -4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 -1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 -7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 - 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 -4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 - 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 -2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 - 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 -1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 -1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 - 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 -3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 -3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 -1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 -3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 -7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 -7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 -1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 -2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 -1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 -3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 -2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 -3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 -2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 -4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 -4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 -3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 - 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 -3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 - 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 -3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 -3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 -3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 -1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 -7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 - 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 -7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 -1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 - 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 -4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 -3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 - 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 -2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 -2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 -3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 -1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 -4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 -2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 -1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 -1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 -2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 -3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 -1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 -7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 -1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 -4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 -1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 - 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 -1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 -3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 -3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 -2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 -1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 -4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 - 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 -7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 -2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 -3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 -4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 - 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 -7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 -7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 -1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 -4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 -3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 -2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 -3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 -3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 -2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 -1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 -4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 -3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 -3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 -2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 -4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 -7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 -3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 -2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 -3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 -1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 -2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 -3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 -4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 -2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 -2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 -7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 -1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 -2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 -1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 -3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 -4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 -2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 -3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 -3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 -2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 -4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 -2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 -3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 -4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 -7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 -3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 - 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 -1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 -4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 -1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 -4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 -7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 - 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 -7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 -2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 -1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 -1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 -3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 - 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 - 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 - 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 -3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 -2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 - 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 -7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 -1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 -3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 -7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 -1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 -7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 -4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 -1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 -2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 -2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 -4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 - 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 - 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 -3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 -3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 -1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 -2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 -7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 -1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 -1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 -3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 - 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 -1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 -4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 -7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 -2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 -3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 - 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 -1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 -2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 -2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 -7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 -7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 -7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 -2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 -2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 -1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 -4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 -3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 -3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 -4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 -4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 -2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 -2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 -7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 -4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 -7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 -2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 -1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 -3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 -4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 -2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 - 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 -2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 -1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 -2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 -2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 -4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 -7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 -1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 -3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 -7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 -1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 -8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 -2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 -8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 -2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 -2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 -8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 -8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 -8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 - 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 -8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 -4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 -3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 -8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 -1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 -8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 - 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 -1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 - 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 -4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 -1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 -4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 -1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 - 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 -3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 -4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 -8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 - 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 -3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 - 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 -2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 -) - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwprober.py deleted file mode 100644 index 35669cc..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/euctwprober.py +++ /dev/null @@ -1,46 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCTWDistributionAnalysis -from .mbcssm import EUCTW_SM_MODEL - -class EUCTWProber(MultiByteCharSetProber): - def __init__(self): - super(EUCTWProber, self).__init__() - self.coding_sm = CodingStateMachine(EUCTW_SM_MODEL) - self.distribution_analyzer = EUCTWDistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "EUC-TW" - - @property - def language(self): - return "Taiwan" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312freq.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312freq.py deleted file mode 100644 index 697837b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312freq.py +++ /dev/null @@ -1,283 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# GB2312 most frequently used character table -# -# Char to FreqOrder table , from hz6763 - -# 512 --> 0.79 -- 0.79 -# 1024 --> 0.92 -- 0.13 -# 2048 --> 0.98 -- 0.06 -# 6768 --> 1.00 -- 0.02 -# -# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 -# Random Distribution Ration = 512 / (3755 - 512) = 0.157 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR - -GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 - -GB2312_TABLE_SIZE = 3760 - -GB2312_CHAR_TO_FREQ_ORDER = ( -1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, -2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, -2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, - 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, -1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, -1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, - 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, -1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, -2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, -3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, - 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, -1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, - 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, -2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, - 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, -2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, -1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, -3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, - 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, -1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, - 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, -2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, -1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, -3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, -1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, -2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, -1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, - 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, -3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, -3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, - 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, -3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, - 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, -1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, -3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, -2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, -1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, - 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, -1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, -4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, - 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, -3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, -3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, - 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, -1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, -2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, -1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, -1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, - 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, -3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, -3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, -4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, - 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, -3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, -1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, -1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, -4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, - 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, - 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, -3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, -1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, - 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, -1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, -2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, - 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, - 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, - 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, -3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, -4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, -3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, - 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, -2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, -2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, -2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, - 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, -2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, - 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, - 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, - 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, -3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, -2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, -2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, -1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, - 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, -2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, - 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, - 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, -1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, -1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, - 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, - 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, -1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, -2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, -3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, -2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, -2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, -2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, -3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, -1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, -1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, -2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, -1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, -3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, -1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, -1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, -3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, - 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, -2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, -1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, -4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, -1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, -1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, -3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, -1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, - 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, - 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, -1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, - 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, -1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, -1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, - 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, -3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, -4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, -3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, -2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, -2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, -1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, -3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, -2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, -1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, -1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, - 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, -2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, -2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, -3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, -4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, -3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, - 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, -3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, -2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, -1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, - 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, - 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, -3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, -4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, -2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, -1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, -1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, - 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, -1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, -3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, - 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, - 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, -1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, - 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, -1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, - 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, -2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, - 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, -2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, -2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, -1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, -1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, -2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, - 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, -1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, -1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, -2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, -2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, -3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, -1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, -4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, - 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, - 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, -3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, -1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, - 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, -3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, -1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, -4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, -1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, -2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, -1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, - 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, -1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, -3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, - 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, -2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, - 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, -1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, -1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, -1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, -3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, -2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, -3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, -3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, -3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, - 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, -2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, - 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, -2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, - 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, -1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, - 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, - 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, -1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, -3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, -3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, -1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, -1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, -3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, -2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, -2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, -1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, -3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, - 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, -4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, -1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, -2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, -3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, -3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, -1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, - 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, - 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, -2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, - 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, -1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, - 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, -1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, -1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, -1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, -1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, -1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, - 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, - 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, #last 512 -) - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312prober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312prober.py deleted file mode 100644 index 8446d2d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/gb2312prober.py +++ /dev/null @@ -1,46 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import GB2312DistributionAnalysis -from .mbcssm import GB2312_SM_MODEL - -class GB2312Prober(MultiByteCharSetProber): - def __init__(self): - super(GB2312Prober, self).__init__() - self.coding_sm = CodingStateMachine(GB2312_SM_MODEL) - self.distribution_analyzer = GB2312DistributionAnalysis() - self.reset() - - @property - def charset_name(self): - return "GB2312" - - @property - def language(self): - return "Chinese" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/hebrewprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/hebrewprober.py deleted file mode 100644 index b0e1bf4..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/hebrewprober.py +++ /dev/null @@ -1,292 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Shy Shalom -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState - -# This prober doesn't actually recognize a language or a charset. -# It is a helper prober for the use of the Hebrew model probers - -### General ideas of the Hebrew charset recognition ### -# -# Four main charsets exist in Hebrew: -# "ISO-8859-8" - Visual Hebrew -# "windows-1255" - Logical Hebrew -# "ISO-8859-8-I" - Logical Hebrew -# "x-mac-hebrew" - ?? Logical Hebrew ?? -# -# Both "ISO" charsets use a completely identical set of code points, whereas -# "windows-1255" and "x-mac-hebrew" are two different proper supersets of -# these code points. windows-1255 defines additional characters in the range -# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific -# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. -# x-mac-hebrew defines similar additional code points but with a different -# mapping. -# -# As far as an average Hebrew text with no diacritics is concerned, all four -# charsets are identical with respect to code points. Meaning that for the -# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters -# (including final letters). -# -# The dominant difference between these charsets is their directionality. -# "Visual" directionality means that the text is ordered as if the renderer is -# not aware of a BIDI rendering algorithm. The renderer sees the text and -# draws it from left to right. The text itself when ordered naturally is read -# backwards. A buffer of Visual Hebrew generally looks like so: -# "[last word of first line spelled backwards] [whole line ordered backwards -# and spelled backwards] [first word of first line spelled backwards] -# [end of line] [last word of second line] ... etc' " -# adding punctuation marks, numbers and English text to visual text is -# naturally also "visual" and from left to right. -# -# "Logical" directionality means the text is ordered "naturally" according to -# the order it is read. It is the responsibility of the renderer to display -# the text from right to left. A BIDI algorithm is used to place general -# punctuation marks, numbers and English text in the text. -# -# Texts in x-mac-hebrew are almost impossible to find on the Internet. From -# what little evidence I could find, it seems that its general directionality -# is Logical. -# -# To sum up all of the above, the Hebrew probing mechanism knows about two -# charsets: -# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are -# backwards while line order is natural. For charset recognition purposes -# the line order is unimportant (In fact, for this implementation, even -# word order is unimportant). -# Logical Hebrew - "windows-1255" - normal, naturally ordered text. -# -# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be -# specifically identified. -# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew -# that contain special punctuation marks or diacritics is displayed with -# some unconverted characters showing as question marks. This problem might -# be corrected using another model prober for x-mac-hebrew. Due to the fact -# that x-mac-hebrew texts are so rare, writing another model prober isn't -# worth the effort and performance hit. -# -#### The Prober #### -# -# The prober is divided between two SBCharSetProbers and a HebrewProber, -# all of which are managed, created, fed data, inquired and deleted by the -# SBCSGroupProber. The two SBCharSetProbers identify that the text is in -# fact some kind of Hebrew, Logical or Visual. The final decision about which -# one is it is made by the HebrewProber by combining final-letter scores -# with the scores of the two SBCharSetProbers to produce a final answer. -# -# The SBCSGroupProber is responsible for stripping the original text of HTML -# tags, English characters, numbers, low-ASCII punctuation characters, spaces -# and new lines. It reduces any sequence of such characters to a single space. -# The buffer fed to each prober in the SBCS group prober is pure text in -# high-ASCII. -# The two SBCharSetProbers (model probers) share the same language model: -# Win1255Model. -# The first SBCharSetProber uses the model normally as any other -# SBCharSetProber does, to recognize windows-1255, upon which this model was -# built. The second SBCharSetProber is told to make the pair-of-letter -# lookup in the language model backwards. This in practice exactly simulates -# a visual Hebrew model using the windows-1255 logical Hebrew model. -# -# The HebrewProber is not using any language model. All it does is look for -# final-letter evidence suggesting the text is either logical Hebrew or visual -# Hebrew. Disjointed from the model probers, the results of the HebrewProber -# alone are meaningless. HebrewProber always returns 0.00 as confidence -# since it never identifies a charset by itself. Instead, the pointer to the -# HebrewProber is passed to the model probers as a helper "Name Prober". -# When the Group prober receives a positive identification from any prober, -# it asks for the name of the charset identified. If the prober queried is a -# Hebrew model prober, the model prober forwards the call to the -# HebrewProber to make the final decision. In the HebrewProber, the -# decision is made according to the final-letters scores maintained and Both -# model probers scores. The answer is returned in the form of the name of the -# charset identified, either "windows-1255" or "ISO-8859-8". - -class HebrewProber(CharSetProber): - # windows-1255 / ISO-8859-8 code points of interest - FINAL_KAF = 0xea - NORMAL_KAF = 0xeb - FINAL_MEM = 0xed - NORMAL_MEM = 0xee - FINAL_NUN = 0xef - NORMAL_NUN = 0xf0 - FINAL_PE = 0xf3 - NORMAL_PE = 0xf4 - FINAL_TSADI = 0xf5 - NORMAL_TSADI = 0xf6 - - # Minimum Visual vs Logical final letter score difference. - # If the difference is below this, don't rely solely on the final letter score - # distance. - MIN_FINAL_CHAR_DISTANCE = 5 - - # Minimum Visual vs Logical model score difference. - # If the difference is below this, don't rely at all on the model score - # distance. - MIN_MODEL_DISTANCE = 0.01 - - VISUAL_HEBREW_NAME = "ISO-8859-8" - LOGICAL_HEBREW_NAME = "windows-1255" - - def __init__(self): - super(HebrewProber, self).__init__() - self._final_char_logical_score = None - self._final_char_visual_score = None - self._prev = None - self._before_prev = None - self._logical_prober = None - self._visual_prober = None - self.reset() - - def reset(self): - self._final_char_logical_score = 0 - self._final_char_visual_score = 0 - # The two last characters seen in the previous buffer, - # mPrev and mBeforePrev are initialized to space in order to simulate - # a word delimiter at the beginning of the data - self._prev = ' ' - self._before_prev = ' ' - # These probers are owned by the group prober. - - def set_model_probers(self, logicalProber, visualProber): - self._logical_prober = logicalProber - self._visual_prober = visualProber - - def is_final(self, c): - return c in [self.FINAL_KAF, self.FINAL_MEM, self.FINAL_NUN, - self.FINAL_PE, self.FINAL_TSADI] - - def is_non_final(self, c): - # The normal Tsadi is not a good Non-Final letter due to words like - # 'lechotet' (to chat) containing an apostrophe after the tsadi. This - # apostrophe is converted to a space in FilterWithoutEnglishLetters - # causing the Non-Final tsadi to appear at an end of a word even - # though this is not the case in the original text. - # The letters Pe and Kaf rarely display a related behavior of not being - # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' - # for example legally end with a Non-Final Pe or Kaf. However, the - # benefit of these letters as Non-Final letters outweighs the damage - # since these words are quite rare. - return c in [self.NORMAL_KAF, self.NORMAL_MEM, - self.NORMAL_NUN, self.NORMAL_PE] - - def feed(self, byte_str): - # Final letter analysis for logical-visual decision. - # Look for evidence that the received buffer is either logical Hebrew - # or visual Hebrew. - # The following cases are checked: - # 1) A word longer than 1 letter, ending with a final letter. This is - # an indication that the text is laid out "naturally" since the - # final letter really appears at the end. +1 for logical score. - # 2) A word longer than 1 letter, ending with a Non-Final letter. In - # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, - # should not end with the Non-Final form of that letter. Exceptions - # to this rule are mentioned above in isNonFinal(). This is an - # indication that the text is laid out backwards. +1 for visual - # score - # 3) A word longer than 1 letter, starting with a final letter. Final - # letters should not appear at the beginning of a word. This is an - # indication that the text is laid out backwards. +1 for visual - # score. - # - # The visual score and logical score are accumulated throughout the - # text and are finally checked against each other in GetCharSetName(). - # No checking for final letters in the middle of words is done since - # that case is not an indication for either Logical or Visual text. - # - # We automatically filter out all 7-bit characters (replace them with - # spaces) so the word boundary detection works properly. [MAP] - - if self.state == ProbingState.NOT_ME: - # Both model probers say it's not them. No reason to continue. - return ProbingState.NOT_ME - - byte_str = self.filter_high_byte_only(byte_str) - - for cur in byte_str: - if cur == ' ': - # We stand on a space - a word just ended - if self._before_prev != ' ': - # next-to-last char was not a space so self._prev is not a - # 1 letter word - if self.is_final(self._prev): - # case (1) [-2:not space][-1:final letter][cur:space] - self._final_char_logical_score += 1 - elif self.is_non_final(self._prev): - # case (2) [-2:not space][-1:Non-Final letter][ - # cur:space] - self._final_char_visual_score += 1 - else: - # Not standing on a space - if ((self._before_prev == ' ') and - (self.is_final(self._prev)) and (cur != ' ')): - # case (3) [-2:space][-1:final letter][cur:not space] - self._final_char_visual_score += 1 - self._before_prev = self._prev - self._prev = cur - - # Forever detecting, till the end or until both model probers return - # ProbingState.NOT_ME (handled above) - return ProbingState.DETECTING - - @property - def charset_name(self): - # Make the decision: is it Logical or Visual? - # If the final letter score distance is dominant enough, rely on it. - finalsub = self._final_char_logical_score - self._final_char_visual_score - if finalsub >= self.MIN_FINAL_CHAR_DISTANCE: - return self.LOGICAL_HEBREW_NAME - if finalsub <= -self.MIN_FINAL_CHAR_DISTANCE: - return self.VISUAL_HEBREW_NAME - - # It's not dominant enough, try to rely on the model scores instead. - modelsub = (self._logical_prober.get_confidence() - - self._visual_prober.get_confidence()) - if modelsub > self.MIN_MODEL_DISTANCE: - return self.LOGICAL_HEBREW_NAME - if modelsub < -self.MIN_MODEL_DISTANCE: - return self.VISUAL_HEBREW_NAME - - # Still no good, back to final letter distance, maybe it'll save the - # day. - if finalsub < 0.0: - return self.VISUAL_HEBREW_NAME - - # (finalsub > 0 - Logical) or (don't know what to do) default to - # Logical. - return self.LOGICAL_HEBREW_NAME - - @property - def language(self): - return 'Hebrew' - - @property - def state(self): - # Remain active as long as any of the model probers are active. - if (self._logical_prober.state == ProbingState.NOT_ME) and \ - (self._visual_prober.state == ProbingState.NOT_ME): - return ProbingState.NOT_ME - return ProbingState.DETECTING diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jisfreq.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jisfreq.py deleted file mode 100644 index 83fc082..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jisfreq.py +++ /dev/null @@ -1,325 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology -# -# Japanese frequency table, applied to both S-JIS and EUC-JP -# They are sorted in order. - -# 128 --> 0.77094 -# 256 --> 0.85710 -# 512 --> 0.92635 -# 1024 --> 0.97130 -# 2048 --> 0.99431 -# -# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 -# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 -# -# Typical Distribution Ratio, 25% of IDR - -JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 - -# Char to FreqOrder table , -JIS_TABLE_SIZE = 4368 - -JIS_CHAR_TO_FREQ_ORDER = ( - 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 -3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 -1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 -2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 -2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 -5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 -1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 -5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 -5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 -5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 -5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 -5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 -5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 -1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 -1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 -1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 -2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 -3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 -3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 - 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 - 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 -1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 - 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 -5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 - 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 - 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 - 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 - 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 - 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 -5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 -5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 -5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 -4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 -5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 -5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 -5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 -5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 -5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 -5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 -5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 -5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 -5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 -3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 -5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 -5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 -5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 -5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 -5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 -5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 -5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 -5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 -5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 -5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 -5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 -5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 -5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 -5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 -5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 -5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 -5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 -5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 -5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 -5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 -5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 -5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 -5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 -5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 -5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 -5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 -5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 -5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 -5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 -5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 -5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 -5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 -5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 -5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 -5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 -5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 -6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 -6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 -6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 -6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 -6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 -6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 -6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 -6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 -4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 - 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 - 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 -1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 -1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 - 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 -3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 -3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 - 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 -3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 -3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 - 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 -2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 - 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 -3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 -1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 - 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 -1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 - 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 -2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 -2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 -2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 -2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 -1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 -1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 -1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 -1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 -2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 -1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 -2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 -1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 -1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 -1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 -1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 -1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 -1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 - 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 - 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 -1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 -2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 -2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 -2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 -3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 -3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 - 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 -3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 -1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 - 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 -2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 -1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 - 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 -3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 -4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 -2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 -1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 -2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 -1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 - 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 - 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 -1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 -2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 -2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 -2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 -3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 -1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 -2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 - 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 - 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 - 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 -1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 -2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 - 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 -1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 -1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 - 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 -1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 -1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 -1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 - 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 -2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 - 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 -2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 -3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 -2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 -1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 -6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 -1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 -2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 -1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 - 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 - 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 -3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 -3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 -1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 -1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 -1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 -1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 - 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 - 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 -2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 - 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 -3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 -2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 - 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 -1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 -2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 - 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 -1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 - 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 -4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 -2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 -1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 - 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 -1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 -2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 - 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 -6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 -1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 -1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 -2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 -3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 - 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 -3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 -1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 - 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 -1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 - 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 -3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 - 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 -2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 - 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 -4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 -2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 -1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 -1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 -1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 - 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 -1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 -3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 -1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 -3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 - 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 - 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 - 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 -2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 -1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 - 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 -1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 - 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 -1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 - 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 - 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 - 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 -1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 -1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 -2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 -4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 - 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 -1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 - 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 -1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 -3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 -1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 -2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 -2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 -1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 -1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 -2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 - 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 -2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 -1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 -1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 -1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 -1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 -3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 -2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 -2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 - 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 -3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 -3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 -1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 -2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 -1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 -2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 -) - - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jpcntx.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jpcntx.py deleted file mode 100644 index 20044e4..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/jpcntx.py +++ /dev/null @@ -1,233 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -# This is hiragana 2-char sequence table, the number in each cell represents its frequency category -jp2CharContext = ( -(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), -(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), -(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), -(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), -(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), -(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), -(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), -(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), -(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), -(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), -(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), -(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), -(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), -(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), -(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), -(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), -(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), -(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), -(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), -(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), -(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), -(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), -(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), -(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), -(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), -(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), -(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), -(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), -(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), -(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), -(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), -(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), -(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), -(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), -(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), -(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), -(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), -(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), -(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), -(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), -(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), -(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), -(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), -(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), -(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), -(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), -(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), -(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), -(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), -(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), -(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), -(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), -(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), -(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), -(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), -(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), -(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), -(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), -(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), -(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), -(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), -(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), -(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), -(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), -(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), -(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), -(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), -(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), -(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), -(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), -(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), -(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), -(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), -(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), -) - -class JapaneseContextAnalysis(object): - NUM_OF_CATEGORY = 6 - DONT_KNOW = -1 - ENOUGH_REL_THRESHOLD = 100 - MAX_REL_THRESHOLD = 1000 - MINIMUM_DATA_THRESHOLD = 4 - - def __init__(self): - self._total_rel = None - self._rel_sample = None - self._need_to_skip_char_num = None - self._last_char_order = None - self._done = None - self.reset() - - def reset(self): - self._total_rel = 0 # total sequence received - # category counters, each integer counts sequence in its category - self._rel_sample = [0] * self.NUM_OF_CATEGORY - # if last byte in current buffer is not the last byte of a character, - # we need to know how many bytes to skip in next buffer - self._need_to_skip_char_num = 0 - self._last_char_order = -1 # The order of previous char - # If this flag is set to True, detection is done and conclusion has - # been made - self._done = False - - def feed(self, byte_str, num_bytes): - if self._done: - return - - # The buffer we got is byte oriented, and a character may span in more than one - # buffers. In case the last one or two byte in last buffer is not - # complete, we record how many byte needed to complete that character - # and skip these bytes here. We can choose to record those bytes as - # well and analyse the character once it is complete, but since a - # character will not make much difference, by simply skipping - # this character will simply our logic and improve performance. - i = self._need_to_skip_char_num - while i < num_bytes: - order, char_len = self.get_order(byte_str[i:i + 2]) - i += char_len - if i > num_bytes: - self._need_to_skip_char_num = i - num_bytes - self._last_char_order = -1 - else: - if (order != -1) and (self._last_char_order != -1): - self._total_rel += 1 - if self._total_rel > self.MAX_REL_THRESHOLD: - self._done = True - break - self._rel_sample[jp2CharContext[self._last_char_order][order]] += 1 - self._last_char_order = order - - def got_enough_data(self): - return self._total_rel > self.ENOUGH_REL_THRESHOLD - - def get_confidence(self): - # This is just one way to calculate confidence. It works well for me. - if self._total_rel > self.MINIMUM_DATA_THRESHOLD: - return (self._total_rel - self._rel_sample[0]) / self._total_rel - else: - return self.DONT_KNOW - - def get_order(self, byte_str): - return -1, 1 - -class SJISContextAnalysis(JapaneseContextAnalysis): - def __init__(self): - super(SJISContextAnalysis, self).__init__() - self._charset_name = "SHIFT_JIS" - - @property - def charset_name(self): - return self._charset_name - - def get_order(self, byte_str): - if not byte_str: - return -1, 1 - # find out current char's byte length - first_char = byte_str[0] - if (0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC): - char_len = 2 - if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): - self._charset_name = "CP932" - else: - char_len = 1 - - # return its order if it is hiragana - if len(byte_str) > 1: - second_char = byte_str[1] - if (first_char == 202) and (0x9F <= second_char <= 0xF1): - return second_char - 0x9F, char_len - - return -1, char_len - -class EUCJPContextAnalysis(JapaneseContextAnalysis): - def get_order(self, byte_str): - if not byte_str: - return -1, 1 - # find out current char's byte length - first_char = byte_str[0] - if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): - char_len = 2 - elif first_char == 0x8F: - char_len = 3 - else: - char_len = 1 - - # return its order if it is hiragana - if len(byte_str) > 1: - second_char = byte_str[1] - if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): - return second_char - 0xA1, char_len - - return -1, char_len - - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langbulgarianmodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langbulgarianmodel.py deleted file mode 100644 index 2aa4fb2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langbulgarianmodel.py +++ /dev/null @@ -1,228 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -# this table is modified base on win1251BulgarianCharToOrderMap, so -# only number <64 is sure valid - -Latin5_BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 -210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 - 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 - 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 -) - -win1251BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 -221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 - 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 - 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 96.9392% -# first 1024 sequences:3.0618% -# rest sequences: 0.2992% -# negative sequences: 0.0020% -BulgarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, -3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, -0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, -0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, -0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, -0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, -0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, -2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, -3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, -1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, -3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, -1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, -2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, -2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, -3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, -1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, -2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, -2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, -1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, -2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, -2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, -2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, -1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, -2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, -1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, -3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, -1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, -3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, -1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, -2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, -1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, -2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, -1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, -2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, -1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, -2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, -1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, -0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, -1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, -1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, -1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, -0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, -1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, -1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -) - -Latin5BulgarianModel = { - 'char_to_order_map': Latin5_BulgarianCharToOrderMap, - 'precedence_matrix': BulgarianLangModel, - 'typical_positive_ratio': 0.969392, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-5", - 'language': 'Bulgairan', -} - -Win1251BulgarianModel = { - 'char_to_order_map': win1251BulgarianCharToOrderMap, - 'precedence_matrix': BulgarianLangModel, - 'typical_positive_ratio': 0.969392, - 'keep_english_letter': False, - 'charset_name': "windows-1251", - 'language': 'Bulgarian', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langcyrillicmodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langcyrillicmodel.py deleted file mode 100644 index e5f9a1f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langcyrillicmodel.py +++ /dev/null @@ -1,333 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# KOI8-R language model -# Character Mapping Table: -KOI8R_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 -223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 -238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 - 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 - 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 - 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 - 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 -) - -win1251_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -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, 68,247,248,249,250,251,252,253, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -) - -latin5_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -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, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -macCyrillic_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, -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, 68, 16, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, -) - -IBM855_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, -206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, - 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, -220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, -230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, - 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, - 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, -250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, -) - -IBM866_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, -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, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 97.6601% -# first 1024 sequences: 2.3389% -# rest sequences: 0.1237% -# negative sequences: 0.0009% -RussianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, -1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, -1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, -2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, -1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, -3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, -1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, -2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, -1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, -1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, -1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, -1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, -3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, -1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, -2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, -1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, -2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, -1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, -1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, -1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, -3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, -3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, -1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, -1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, -0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, -1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, -1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, -0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, -1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, -2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, -1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, -1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, -2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, -1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, -1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, -1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, -0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, -0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, -0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, -2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, -0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -) - -Koi8rModel = { - 'char_to_order_map': KOI8R_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "KOI8-R", - 'language': 'Russian', -} - -Win1251CyrillicModel = { - 'char_to_order_map': win1251_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "windows-1251", - 'language': 'Russian', -} - -Latin5CyrillicModel = { - 'char_to_order_map': latin5_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-5", - 'language': 'Russian', -} - -MacCyrillicModel = { - 'char_to_order_map': macCyrillic_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "MacCyrillic", - 'language': 'Russian', -} - -Ibm866Model = { - 'char_to_order_map': IBM866_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "IBM866", - 'language': 'Russian', -} - -Ibm855Model = { - 'char_to_order_map': IBM855_char_to_order_map, - 'precedence_matrix': RussianLangModel, - 'typical_positive_ratio': 0.976601, - 'keep_english_letter': False, - 'charset_name': "IBM855", - 'language': 'Russian', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langgreekmodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langgreekmodel.py deleted file mode 100644 index 5332221..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langgreekmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin7_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -win1253_char_to_order_map = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.2851% -# first 1024 sequences:1.7001% -# rest sequences: 0.0359% -# negative sequences: 0.0148% -GreekLangModel = ( -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, -2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, -2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, -2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, -0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, -3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, -2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, -0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, -0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, -0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, -0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, -0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, -0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, -0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, -0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, -0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, -0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, -0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, -0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, -0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, -0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, -0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, -0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, -0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, -0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin7GreekModel = { - 'char_to_order_map': Latin7_char_to_order_map, - 'precedence_matrix': GreekLangModel, - 'typical_positive_ratio': 0.982851, - 'keep_english_letter': False, - 'charset_name': "ISO-8859-7", - 'language': 'Greek', -} - -Win1253GreekModel = { - 'char_to_order_map': win1253_char_to_order_map, - 'precedence_matrix': GreekLangModel, - 'typical_positive_ratio': 0.982851, - 'keep_english_letter': False, - 'charset_name': "windows-1253", - 'language': 'Greek', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhebrewmodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhebrewmodel.py deleted file mode 100644 index 58f4c87..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhebrewmodel.py +++ /dev/null @@ -1,200 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Simon Montagu -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Shoshannah Forbes - original C code (?) -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Windows-1255 language model -# Character Mapping Table: -WIN1255_CHAR_TO_ORDER_MAP = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 - 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 -253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 - 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 -124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, -215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, - 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, -106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, - 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, -238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, - 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, - 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.4004% -# first 1024 sequences: 1.5981% -# rest sequences: 0.087% -# negative sequences: 0.0015% -HEBREW_LANG_MODEL = ( -0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, -3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, -1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, -1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, -1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, -1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, -0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, -0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, -0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, -0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, -0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, -0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, -0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, -0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, -0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, -0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, -0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, -0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, -0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, -1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, -1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, -2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, -0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, -0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, -) - -Win1255HebrewModel = { - 'char_to_order_map': WIN1255_CHAR_TO_ORDER_MAP, - 'precedence_matrix': HEBREW_LANG_MODEL, - 'typical_positive_ratio': 0.984004, - 'keep_english_letter': False, - 'charset_name': "windows-1255", - 'language': 'Hebrew', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhungarianmodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhungarianmodel.py deleted file mode 100644 index bb7c095..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langhungarianmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin2_HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -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, 75,198,199,200,201,202,203,204,205, - 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, - 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, -245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -win1250HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, -177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, - 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, - 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, -245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 94.7368% -# first 1024 sequences:5.2623% -# rest sequences: 0.8894% -# negative sequences: 0.0009% -HungarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, -3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, -0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, -1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, -1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, -3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, -2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, -2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, -2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, -2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, -1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, -1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, -3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, -1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, -1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, -2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, -2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, -2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, -3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, -1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, -1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, -1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, -2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, -1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, -2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, -2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, -1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, -1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, -0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, -2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, -2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, -1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, -1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, -2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, -2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, -2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, -1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, -0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -) - -Latin2HungarianModel = { - 'char_to_order_map': Latin2_HungarianCharToOrderMap, - 'precedence_matrix': HungarianLangModel, - 'typical_positive_ratio': 0.947368, - 'keep_english_letter': True, - 'charset_name': "ISO-8859-2", - 'language': 'Hungarian', -} - -Win1250HungarianModel = { - 'char_to_order_map': win1250HungarianCharToOrderMap, - 'precedence_matrix': HungarianLangModel, - 'typical_positive_ratio': 0.947368, - 'keep_english_letter': True, - 'charset_name': "windows-1250", - 'language': 'Hungarian', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langthaimodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langthaimodel.py deleted file mode 100644 index 15f94c2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langthaimodel.py +++ /dev/null @@ -1,199 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# The following result for thai was collected from a limited sample (1M). - -# Character Mapping Table: -TIS620CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 -188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 -253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 - 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 -209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, -223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, -236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, - 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, - 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, - 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, - 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, - 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 92.6386% -# first 1024 sequences:7.3177% -# rest sequences: 1.0230% -# negative sequences: 0.0436% -ThaiLangModel = ( -0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, -0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, -3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, -0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, -3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, -3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, -3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, -3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, -2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, -3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, -1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, -3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, -1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, -0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, -0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, -2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, -0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, -3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, -2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, -2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, -3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, -3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, -3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, -3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, -1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, -0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, -0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, -3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, -3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, -1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, -3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, -3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, -0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, -0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, -1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, -1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, -3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, -0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, -3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, -0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, -0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, -0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, -0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, -0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, -0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, -0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, -3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, -2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, -0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, -3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, -1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, -1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -TIS620ThaiModel = { - 'char_to_order_map': TIS620CharToOrderMap, - 'precedence_matrix': ThaiLangModel, - 'typical_positive_ratio': 0.926386, - 'keep_english_letter': False, - 'charset_name': "TIS-620", - 'language': 'Thai', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langturkishmodel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langturkishmodel.py deleted file mode 100644 index a427a45..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/langturkishmodel.py +++ /dev/null @@ -1,193 +0,0 @@ -# -*- coding: utf-8 -*- -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Özgür Baskın - Turkish Language Model -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin5_TurkishCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -255, 23, 37, 47, 39, 29, 52, 36, 45, 53, 60, 16, 49, 20, 46, 42, - 48, 69, 44, 35, 31, 51, 38, 62, 65, 43, 56,255,255,255,255,255, -255, 1, 21, 28, 12, 2, 18, 27, 25, 3, 24, 10, 5, 13, 4, 15, - 26, 64, 7, 8, 9, 14, 32, 57, 58, 11, 22,255,255,255,255,255, -180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165, -164,163,162,161,160,159,101,158,157,156,155,154,153,152,151,106, -150,149,148,147,146,145,144,100,143,142,141,140,139,138,137,136, - 94, 80, 93,135,105,134,133, 63,132,131,130,129,128,127,126,125, -124,104, 73, 99, 79, 85,123, 54,122, 98, 92,121,120, 91,103,119, - 68,118,117, 97,116,115, 50, 90,114,113,112,111, 55, 41, 40, 86, - 89, 70, 59, 78, 71, 82, 88, 33, 77, 66, 84, 83,110, 75, 61, 96, - 30, 67,109, 74, 87,102, 34, 95, 81,108, 76, 72, 17, 6, 19,107, -) - -TurkishLangModel = ( -3,2,3,3,3,1,3,3,3,3,3,3,3,3,2,1,1,3,3,1,3,3,0,3,3,3,3,3,0,3,1,3, -3,2,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, -3,2,2,3,3,0,3,3,3,3,3,3,3,2,3,1,0,3,3,1,3,3,0,3,3,3,3,3,0,3,0,3, -3,1,1,0,1,0,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,2,2,0,0,0,1,0,1, -3,3,2,3,3,0,3,3,3,3,3,3,3,2,3,1,1,3,3,0,3,3,1,2,3,3,3,3,0,3,0,3, -3,1,1,0,0,0,1,0,0,0,0,1,1,0,1,2,1,0,0,0,1,0,0,0,0,2,0,0,0,0,0,1, -3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,2,0,3,2,1,2,2,1,3,3,0,0,0,2, -2,2,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1, -3,3,3,2,3,3,1,2,3,3,3,3,3,3,3,1,3,2,1,0,3,2,0,1,2,3,3,2,1,0,0,2, -2,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0, -1,0,1,3,3,1,3,3,3,3,3,3,3,1,2,0,0,2,3,0,2,3,0,0,2,2,2,3,0,3,0,1, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,0,3,2,0,2,3,2,3,3,1,0,0,2, -3,2,0,0,1,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,1,0,2,0,0,1, -3,3,3,2,3,3,2,3,3,3,3,2,3,3,3,0,3,3,0,0,2,1,0,0,2,3,2,2,0,0,0,2, -2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1,0,2,0,0,1, -3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,0,1,3,2,1,1,3,2,3,2,1,0,0,2, -2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, -3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,0,3,2,2,0,2,3,0,0,2,2,2,2,0,0,0,2, -3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, -3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,0,3,3,1,1,2,2,0,0,2,2,3,2,0,0,1,3, -0,3,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1, -3,3,3,2,3,3,3,2,1,2,2,3,2,3,3,0,3,2,0,0,1,1,0,1,1,2,1,2,0,0,0,1, -0,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0, -3,3,3,2,3,3,2,3,2,2,2,3,3,3,3,1,3,1,1,0,3,2,1,1,3,3,2,3,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,1, -3,2,2,3,3,0,3,3,3,3,3,3,3,2,2,1,0,3,3,1,3,3,0,1,3,3,2,3,0,3,0,3, -2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -2,2,2,3,3,0,3,3,3,3,3,3,3,3,3,0,0,3,2,0,3,3,0,3,2,3,3,3,0,3,1,3, -2,0,0,0,0,0,0,0,0,0,0,1,0,1,2,0,1,0,0,0,0,0,0,0,2,2,0,0,1,0,0,1, -3,3,3,1,2,3,3,1,0,0,1,0,0,3,3,2,3,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0, -0,3,1,0,1,0,0,0,2,2,1,0,1,1,2,1,2,2,2,0,2,1,1,0,0,0,2,0,0,0,0,0, -1,2,1,3,3,0,3,3,3,3,3,2,3,0,0,0,0,2,3,0,2,3,1,0,2,3,1,3,0,3,0,2, -3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,3,3,2,2,3,2,2,0,1,2,3,0,1,2,1,0,1,0,0,0,1,0,2,2,0,0,0,1, -1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0, -3,3,3,1,3,3,1,1,3,3,1,1,3,3,1,0,2,1,2,0,2,1,0,0,1,1,2,1,0,0,0,2, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,0,2,1,3,0,0,2,0,0,3,3,0,3,0,0,1,0,1,2,0,0,1,1,2,2,0,1,0, -0,1,2,1,1,0,1,0,1,1,1,1,1,0,1,1,1,2,2,1,2,0,1,0,0,0,0,0,0,1,0,0, -3,3,3,2,3,2,3,3,0,2,2,2,3,3,3,0,3,0,0,0,2,2,0,1,2,1,1,1,0,0,0,1, -0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -3,3,3,3,3,3,2,1,2,2,3,3,3,3,2,0,2,0,0,0,2,2,0,0,2,1,3,3,0,0,1,1, -1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0, -1,1,2,3,3,0,3,3,3,3,3,3,2,2,0,2,0,2,3,2,3,2,2,2,2,2,2,2,1,3,2,3, -2,0,2,1,2,2,2,2,1,1,2,2,1,2,2,1,2,0,0,2,1,1,0,2,1,0,0,1,0,0,0,1, -2,3,3,1,1,1,0,1,1,1,2,3,2,1,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,2,2,1,3,3,3,0,2,1,2,0,2,1,0,0,1,1,1,1,1,0,0,1, -2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,2,0,1,0,0,0, -3,3,3,2,3,3,3,3,3,2,3,1,2,3,3,1,2,0,0,0,0,0,0,0,3,2,1,1,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -3,3,3,2,2,3,3,2,1,1,1,1,1,3,3,0,3,1,0,0,1,1,0,0,3,1,2,1,0,0,0,0, -0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, -3,3,3,2,2,3,2,2,2,3,2,1,1,3,3,0,3,0,0,0,0,1,0,0,3,1,1,2,0,0,0,1, -1,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,3,3,0,3,3,3,3,3,2,2,2,1,2,0,2,1,2,2,1,1,0,1,2,2,2,2,2,2,2, -0,0,2,1,2,1,2,1,0,1,1,3,1,2,1,1,2,0,0,2,0,1,0,1,0,1,0,0,0,1,0,1, -3,3,3,1,3,3,3,0,1,1,0,2,2,3,1,0,3,0,0,0,1,0,0,0,1,0,0,1,0,1,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,2,2,1,0,0,1,0,0,3,3,1,3,0,0,1,1,0,2,0,3,0,0,0,2,0,1,1, -0,1,2,0,1,2,2,0,2,2,2,2,1,0,2,1,1,0,2,0,2,1,2,0,0,0,0,0,0,0,0,0, -3,3,3,1,3,2,3,2,0,2,2,2,1,3,2,0,2,1,2,0,1,2,0,0,1,0,2,2,0,0,0,2, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0, -3,3,3,0,3,3,1,1,2,3,1,0,3,2,3,0,3,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0, -1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,3,0,3,3,2,3,3,2,2,0,0,0,0,1,2,0,1,3,0,0,0,3,1,1,0,3,0,2, -2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,1,2,2,1,0,3,1,1,1,1,3,3,2,3,0,0,1,0,1,2,0,2,2,0,2,2,0,2,1, -0,2,2,1,1,1,1,0,2,1,1,0,1,1,1,1,2,1,2,1,2,0,1,0,1,0,0,0,0,0,0,0, -3,3,3,0,1,1,3,0,0,1,1,0,0,2,2,0,3,0,0,1,1,0,1,0,0,0,0,0,2,0,0,0, -0,3,1,0,1,0,1,0,2,0,0,1,0,1,0,1,1,1,2,1,1,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,0,2,0,1,1,1,0,0,3,3,0,2,0,0,1,0,0,2,1,1,0,1,0,1,0,1,0, -0,2,0,1,2,0,2,0,2,1,1,0,1,0,2,1,1,0,2,1,1,0,1,0,0,0,1,1,0,0,0,0, -3,2,3,0,1,0,0,0,0,0,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,0,2,0,0,0, -0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,2,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,0,0,2,3,0,0,1,0,1,0,2,3,2,3,0,0,1,3,0,2,1,0,0,0,0,2,0,1,0, -0,2,1,0,0,1,1,0,2,1,0,0,1,0,0,1,1,0,1,1,2,0,1,0,0,0,0,1,0,0,0,0, -3,2,2,0,0,1,1,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,1,0,0,0,0,0,2,0,1,0, -0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,3,3,0,2,3,2,2,1,2,2,1,1,2,0,1,3,2,2,2,0,0,2,2,0,0,0,1,2,1, -3,0,2,1,1,0,1,1,1,0,1,2,2,2,1,1,2,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0, -0,1,1,2,3,0,3,3,3,2,2,2,2,1,0,1,0,1,0,1,2,2,0,0,2,2,1,3,1,1,2,1, -0,0,1,1,2,0,1,1,0,0,1,2,0,2,1,1,2,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0, -3,3,2,0,0,3,1,0,0,0,0,0,0,3,2,1,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, -0,2,1,1,0,0,1,0,1,2,0,0,1,1,0,0,2,1,1,1,1,0,2,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,1,0,0,0,0,1,0,0,3,3,2,2,0,0,1,0,0,2,0,1,0,0,0,2,0,1,0, -0,0,1,1,0,0,2,0,2,1,0,0,1,1,2,1,2,0,2,1,2,1,1,1,0,0,1,1,0,0,0,0, -3,3,2,0,0,2,2,0,0,0,1,1,0,2,2,1,3,1,0,1,0,1,2,0,0,0,0,0,1,0,1,0, -0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,0,0,0,1,0,0,1,0,0,2,3,1,2,0,0,1,0,0,2,0,0,0,1,0,2,0,2,0, -0,1,1,2,2,1,2,0,2,1,1,0,0,1,1,0,1,1,1,1,2,1,1,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,1,2,1,0,0,1,1,0,3,3,1,2,0,0,1,0,0,2,0,2,0,1,1,2,0,0,0, -0,0,1,1,1,1,2,0,1,1,0,1,1,1,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -3,3,3,0,2,2,3,2,0,0,1,0,0,2,3,1,0,0,0,0,0,0,2,0,2,0,0,0,2,0,0,0, -0,1,1,0,0,0,1,0,0,1,0,1,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,0,0,0,0,0,0,1,0,0,2,2,2,2,0,0,1,0,0,2,0,0,0,0,0,2,0,1,0, -0,0,2,1,1,0,1,0,2,1,1,0,0,1,1,2,1,0,2,0,2,0,1,0,0,0,2,0,0,0,0,0, -0,0,0,2,2,0,2,1,1,1,1,2,2,0,0,1,0,1,0,0,1,3,0,0,0,0,1,0,0,2,1,0, -0,0,1,0,1,0,0,0,0,0,2,1,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -2,0,0,2,3,0,2,3,1,2,2,0,2,0,0,2,0,2,1,1,1,2,1,0,0,1,2,1,1,2,1,0, -1,0,2,0,1,0,1,1,0,0,2,2,1,2,1,1,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,0,2,1,2,0,0,0,1,0,0,3,2,0,1,0,0,1,0,0,2,0,0,0,1,2,1,0,1,0, -0,0,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,2,2,0,2,2,1,1,0,1,1,1,1,1,0,0,1,2,1,1,1,0,1,0,0,0,1,1,1,1, -0,0,2,1,0,1,1,1,0,1,1,2,1,2,1,1,2,0,1,1,2,1,0,2,0,0,0,0,0,0,0,0, -3,2,2,0,0,2,0,0,0,0,0,0,0,2,2,0,2,0,0,1,0,0,2,0,0,0,0,0,2,0,0,0, -0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,0,2,2,0,1,1,0,1,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0, -2,0,1,0,1,0,1,1,0,0,1,2,0,1,0,1,1,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0, -2,2,2,0,1,1,0,0,0,1,0,0,0,1,2,0,1,0,0,1,0,0,1,0,0,0,0,1,2,0,1,0, -0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,1,1,1,0,0,0,0,1,2,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -1,1,2,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,1, -0,0,1,2,2,0,2,1,2,1,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,2,2,0,0,0,1,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin5TurkishModel = { - 'char_to_order_map': Latin5_TurkishCharToOrderMap, - 'precedence_matrix': TurkishLangModel, - 'typical_positive_ratio': 0.970290, - 'keep_english_letter': True, - 'charset_name': "ISO-8859-9", - 'language': 'Turkish', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/latin1prober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/latin1prober.py deleted file mode 100644 index 7d1e8c2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/latin1prober.py +++ /dev/null @@ -1,145 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState - -FREQ_CAT_NUM = 4 - -UDF = 0 # undefined -OTH = 1 # other -ASC = 2 # ascii capital letter -ASS = 3 # ascii small letter -ACV = 4 # accent capital vowel -ACO = 5 # accent capital other -ASV = 6 # accent small vowel -ASO = 7 # accent small other -CLASS_NUM = 8 # total classes - -Latin1_CharToClass = ( - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F - OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 - ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F - OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 - ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F - OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 - OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F - UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 - OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF - ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 - ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF - ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 - ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF - ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 - ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF - ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 - ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF -) - -# 0 : illegal -# 1 : very unlikely -# 2 : normal -# 3 : very likely -Latin1ClassModel = ( -# UDF OTH ASC ASS ACV ACO ASV ASO - 0, 0, 0, 0, 0, 0, 0, 0, # UDF - 0, 3, 3, 3, 3, 3, 3, 3, # OTH - 0, 3, 3, 3, 3, 3, 3, 3, # ASC - 0, 3, 3, 3, 1, 1, 3, 3, # ASS - 0, 3, 3, 3, 1, 2, 1, 2, # ACV - 0, 3, 3, 3, 3, 3, 3, 3, # ACO - 0, 3, 1, 3, 1, 1, 1, 3, # ASV - 0, 3, 1, 3, 1, 1, 3, 3, # ASO -) - - -class Latin1Prober(CharSetProber): - def __init__(self): - super(Latin1Prober, self).__init__() - self._last_char_class = None - self._freq_counter = None - self.reset() - - def reset(self): - self._last_char_class = OTH - self._freq_counter = [0] * FREQ_CAT_NUM - CharSetProber.reset(self) - - @property - def charset_name(self): - return "ISO-8859-1" - - @property - def language(self): - return "" - - def feed(self, byte_str): - byte_str = self.filter_with_english_letters(byte_str) - for c in byte_str: - char_class = Latin1_CharToClass[c] - freq = Latin1ClassModel[(self._last_char_class * CLASS_NUM) - + char_class] - if freq == 0: - self._state = ProbingState.NOT_ME - break - self._freq_counter[freq] += 1 - self._last_char_class = char_class - - return self.state - - def get_confidence(self): - if self.state == ProbingState.NOT_ME: - return 0.01 - - total = sum(self._freq_counter) - if total < 0.01: - confidence = 0.0 - else: - confidence = ((self._freq_counter[3] - self._freq_counter[1] * 20.0) - / total) - if confidence < 0.0: - confidence = 0.0 - # lower the confidence of latin1 so that other more accurate - # detector can take priority. - confidence = confidence * 0.73 - return confidence diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcharsetprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcharsetprober.py deleted file mode 100644 index 6256ecf..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcharsetprober.py +++ /dev/null @@ -1,91 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState, MachineState - - -class MultiByteCharSetProber(CharSetProber): - """ - MultiByteCharSetProber - """ - - def __init__(self, lang_filter=None): - super(MultiByteCharSetProber, self).__init__(lang_filter=lang_filter) - self.distribution_analyzer = None - self.coding_sm = None - self._last_char = [0, 0] - - def reset(self): - super(MultiByteCharSetProber, self).reset() - if self.coding_sm: - self.coding_sm.reset() - if self.distribution_analyzer: - self.distribution_analyzer.reset() - self._last_char = [0, 0] - - @property - def charset_name(self): - raise NotImplementedError - - @property - def language(self): - raise NotImplementedError - - def feed(self, byte_str): - for i in range(len(byte_str)): - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.distribution_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - return self.distribution_analyzer.get_confidence() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcsgroupprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcsgroupprober.py deleted file mode 100644 index 530abe7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcsgroupprober.py +++ /dev/null @@ -1,54 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .utf8prober import UTF8Prober -from .sjisprober import SJISProber -from .eucjpprober import EUCJPProber -from .gb2312prober import GB2312Prober -from .euckrprober import EUCKRProber -from .cp949prober import CP949Prober -from .big5prober import Big5Prober -from .euctwprober import EUCTWProber - - -class MBCSGroupProber(CharSetGroupProber): - def __init__(self, lang_filter=None): - super(MBCSGroupProber, self).__init__(lang_filter=lang_filter) - self.probers = [ - UTF8Prober(), - SJISProber(), - EUCJPProber(), - GB2312Prober(), - EUCKRProber(), - CP949Prober(), - Big5Prober(), - EUCTWProber() - ] - self.reset() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcssm.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcssm.py deleted file mode 100644 index 8360d0f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/mbcssm.py +++ /dev/null @@ -1,572 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .enums import MachineState - -# BIG5 - -BIG5_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 4,4,4,4,4,4,4,4, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 4,3,3,3,3,3,3,3, # a0 - a7 - 3,3,3,3,3,3,3,3, # a8 - af - 3,3,3,3,3,3,3,3, # b0 - b7 - 3,3,3,3,3,3,3,3, # b8 - bf - 3,3,3,3,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -BIG5_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,#08-0f - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START#10-17 -) - -BIG5_CHAR_LEN_TABLE = (0, 1, 1, 2, 0) - -BIG5_SM_MODEL = {'class_table': BIG5_CLS, - 'class_factor': 5, - 'state_table': BIG5_ST, - 'char_len_table': BIG5_CHAR_LEN_TABLE, - 'name': 'Big5'} - -# CP949 - -CP949_CLS = ( - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f - 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f - 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f - 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f - 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f - 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f - 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f - 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f - 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af - 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf - 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff -) - -CP949_ST = ( -#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = - MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.START,MachineState.START, 4, 5,MachineState.ERROR, 6, # MachineState.START - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, # MachineState.ERROR - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME, # MachineState.ITS_ME - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 3 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 4 - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, # 5 - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START, # 6 -) - -CP949_CHAR_LEN_TABLE = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) - -CP949_SM_MODEL = {'class_table': CP949_CLS, - 'class_factor': 10, - 'state_table': CP949_ST, - 'char_len_table': CP949_CHAR_LEN_TABLE, - 'name': 'CP949'} - -# EUC-JP - -EUCJP_CLS = ( - 4,4,4,4,4,4,4,4, # 00 - 07 - 4,4,4,4,4,4,5,5, # 08 - 0f - 4,4,4,4,4,4,4,4, # 10 - 17 - 4,4,4,5,4,4,4,4, # 18 - 1f - 4,4,4,4,4,4,4,4, # 20 - 27 - 4,4,4,4,4,4,4,4, # 28 - 2f - 4,4,4,4,4,4,4,4, # 30 - 37 - 4,4,4,4,4,4,4,4, # 38 - 3f - 4,4,4,4,4,4,4,4, # 40 - 47 - 4,4,4,4,4,4,4,4, # 48 - 4f - 4,4,4,4,4,4,4,4, # 50 - 57 - 4,4,4,4,4,4,4,4, # 58 - 5f - 4,4,4,4,4,4,4,4, # 60 - 67 - 4,4,4,4,4,4,4,4, # 68 - 6f - 4,4,4,4,4,4,4,4, # 70 - 77 - 4,4,4,4,4,4,4,4, # 78 - 7f - 5,5,5,5,5,5,5,5, # 80 - 87 - 5,5,5,5,5,5,1,3, # 88 - 8f - 5,5,5,5,5,5,5,5, # 90 - 97 - 5,5,5,5,5,5,5,5, # 98 - 9f - 5,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,0,5 # f8 - ff -) - -EUCJP_ST = ( - 3, 4, 3, 5,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 3,MachineState.ERROR,#18-1f - 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START#20-27 -) - -EUCJP_CHAR_LEN_TABLE = (2, 2, 2, 3, 1, 0) - -EUCJP_SM_MODEL = {'class_table': EUCJP_CLS, - 'class_factor': 6, - 'state_table': EUCJP_ST, - 'char_len_table': EUCJP_CHAR_LEN_TABLE, - 'name': 'EUC-JP'} - -# EUC-KR - -EUCKR_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,3,3,3, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,3,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 2,2,2,2,2,2,2,2, # e0 - e7 - 2,2,2,2,2,2,2,2, # e8 - ef - 2,2,2,2,2,2,2,2, # f0 - f7 - 2,2,2,2,2,2,2,0 # f8 - ff -) - -EUCKR_ST = ( - MachineState.ERROR,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #08-0f -) - -EUCKR_CHAR_LEN_TABLE = (0, 1, 2, 0) - -EUCKR_SM_MODEL = {'class_table': EUCKR_CLS, - 'class_factor': 4, - 'state_table': EUCKR_ST, - 'char_len_table': EUCKR_CHAR_LEN_TABLE, - 'name': 'EUC-KR'} - -# EUC-TW - -EUCTW_CLS = ( - 2,2,2,2,2,2,2,2, # 00 - 07 - 2,2,2,2,2,2,0,0, # 08 - 0f - 2,2,2,2,2,2,2,2, # 10 - 17 - 2,2,2,0,2,2,2,2, # 18 - 1f - 2,2,2,2,2,2,2,2, # 20 - 27 - 2,2,2,2,2,2,2,2, # 28 - 2f - 2,2,2,2,2,2,2,2, # 30 - 37 - 2,2,2,2,2,2,2,2, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,2, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,6,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,3,4,4,4,4,4,4, # a0 - a7 - 5,5,1,1,1,1,1,1, # a8 - af - 1,1,1,1,1,1,1,1, # b0 - b7 - 1,1,1,1,1,1,1,1, # b8 - bf - 1,1,3,1,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -EUCTW_ST = ( - MachineState.ERROR,MachineState.ERROR,MachineState.START, 3, 3, 3, 4,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.START,MachineState.ERROR,#10-17 - MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,#20-27 - MachineState.START,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f -) - -EUCTW_CHAR_LEN_TABLE = (0, 0, 1, 2, 2, 2, 3) - -EUCTW_SM_MODEL = {'class_table': EUCTW_CLS, - 'class_factor': 7, - 'state_table': EUCTW_ST, - 'char_len_table': EUCTW_CHAR_LEN_TABLE, - 'name': 'x-euc-tw'} - -# GB2312 - -GB2312_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 3,3,3,3,3,3,3,3, # 30 - 37 - 3,3,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,4, # 78 - 7f - 5,6,6,6,6,6,6,6, # 80 - 87 - 6,6,6,6,6,6,6,6, # 88 - 8f - 6,6,6,6,6,6,6,6, # 90 - 97 - 6,6,6,6,6,6,6,6, # 98 - 9f - 6,6,6,6,6,6,6,6, # a0 - a7 - 6,6,6,6,6,6,6,6, # a8 - af - 6,6,6,6,6,6,6,6, # b0 - b7 - 6,6,6,6,6,6,6,6, # b8 - bf - 6,6,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 6,6,6,6,6,6,6,6, # e0 - e7 - 6,6,6,6,6,6,6,6, # e8 - ef - 6,6,6,6,6,6,6,6, # f0 - f7 - 6,6,6,6,6,6,6,0 # f8 - ff -) - -GB2312_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START, 3,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,#10-17 - 4,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - MachineState.ERROR,MachineState.ERROR, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#20-27 - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.START #28-2f -) - -# To be accurate, the length of class 6 can be either 2 or 4. -# But it is not necessary to discriminate between the two since -# it is used for frequency analysis only, and we are validating -# each code range there as well. So it is safe to set it to be -# 2 here. -GB2312_CHAR_LEN_TABLE = (0, 1, 1, 1, 1, 1, 2) - -GB2312_SM_MODEL = {'class_table': GB2312_CLS, - 'class_factor': 7, - 'state_table': GB2312_ST, - 'char_len_table': GB2312_CHAR_LEN_TABLE, - 'name': 'GB2312'} - -# Shift_JIS - -SJIS_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 3,3,3,3,3,2,2,3, # 80 - 87 - 3,3,3,3,3,3,3,3, # 88 - 8f - 3,3,3,3,3,3,3,3, # 90 - 97 - 3,3,3,3,3,3,3,3, # 98 - 9f - #0xa0 is illegal in sjis encoding, but some pages does - #contain such byte. We need to be more error forgiven. - 2,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,4,4,4, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,0,0,0) # f8 - ff - - -SJIS_ST = ( - MachineState.ERROR,MachineState.START,MachineState.START, 3,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START #10-17 -) - -SJIS_CHAR_LEN_TABLE = (0, 1, 1, 2, 0, 0) - -SJIS_SM_MODEL = {'class_table': SJIS_CLS, - 'class_factor': 6, - 'state_table': SJIS_ST, - 'char_len_table': SJIS_CHAR_LEN_TABLE, - 'name': 'Shift_JIS'} - -# UCS2-BE - -UCS2BE_CLS = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2BE_ST = ( - 5, 7, 7,MachineState.ERROR, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME, 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,#10-17 - 6, 6, 6, 6, 6,MachineState.ITS_ME, 6, 6,#18-1f - 6, 6, 6, 6, 5, 7, 7,MachineState.ERROR,#20-27 - 5, 8, 6, 6,MachineState.ERROR, 6, 6, 6,#28-2f - 6, 6, 6, 6,MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START #30-37 -) - -UCS2BE_CHAR_LEN_TABLE = (2, 2, 2, 0, 2, 2) - -UCS2BE_SM_MODEL = {'class_table': UCS2BE_CLS, - 'class_factor': 6, - 'state_table': UCS2BE_ST, - 'char_len_table': UCS2BE_CHAR_LEN_TABLE, - 'name': 'UTF-16BE'} - -# UCS2-LE - -UCS2LE_CLS = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2LE_ST = ( - 6, 6, 7, 6, 4, 3,MachineState.ERROR,MachineState.ERROR,#00-07 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#08-0f - MachineState.ITS_ME,MachineState.ITS_ME, 5, 5, 5,MachineState.ERROR,MachineState.ITS_ME,MachineState.ERROR,#10-17 - 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR, 6, 6,#18-1f - 7, 6, 8, 8, 5, 5, 5,MachineState.ERROR,#20-27 - 5, 5, 5,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5,#28-2f - 5, 5, 5,MachineState.ERROR, 5,MachineState.ERROR,MachineState.START,MachineState.START #30-37 -) - -UCS2LE_CHAR_LEN_TABLE = (2, 2, 2, 2, 2, 2) - -UCS2LE_SM_MODEL = {'class_table': UCS2LE_CLS, - 'class_factor': 6, - 'state_table': UCS2LE_ST, - 'char_len_table': UCS2LE_CHAR_LEN_TABLE, - 'name': 'UTF-16LE'} - -# UTF-8 - -UTF8_CLS = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 2,2,2,2,3,3,3,3, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 5,5,5,5,5,5,5,5, # a0 - a7 - 5,5,5,5,5,5,5,5, # a8 - af - 5,5,5,5,5,5,5,5, # b0 - b7 - 5,5,5,5,5,5,5,5, # b8 - bf - 0,0,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 7,8,8,8,8,8,8,8, # e0 - e7 - 8,8,8,8,8,9,8,8, # e8 - ef - 10,11,11,11,11,11,11,11, # f0 - f7 - 12,13,13,13,14,15,0,0 # f8 - ff -) - -UTF8_ST = ( - MachineState.ERROR,MachineState.START,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12, 10,#00-07 - 9, 11, 8, 7, 6, 5, 4, 3,#08-0f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#10-17 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#18-1f - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#20-27 - MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,MachineState.ITS_ME,#28-2f - MachineState.ERROR,MachineState.ERROR, 5, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#30-37 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#38-3f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 5, 5, 5,MachineState.ERROR,MachineState.ERROR,#40-47 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#48-4f - MachineState.ERROR,MachineState.ERROR, 7, 7, 7, 7,MachineState.ERROR,MachineState.ERROR,#50-57 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#58-5f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 7, 7,MachineState.ERROR,MachineState.ERROR,#60-67 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#68-6f - MachineState.ERROR,MachineState.ERROR, 9, 9, 9, 9,MachineState.ERROR,MachineState.ERROR,#70-77 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#78-7f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 9,MachineState.ERROR,MachineState.ERROR,#80-87 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#88-8f - MachineState.ERROR,MachineState.ERROR, 12, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,#90-97 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#98-9f - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR, 12,MachineState.ERROR,MachineState.ERROR,#a0-a7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#a8-af - MachineState.ERROR,MachineState.ERROR, 12, 12, 12,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b0-b7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,#b8-bf - MachineState.ERROR,MachineState.ERROR,MachineState.START,MachineState.START,MachineState.START,MachineState.START,MachineState.ERROR,MachineState.ERROR,#c0-c7 - MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR,MachineState.ERROR #c8-cf -) - -UTF8_CHAR_LEN_TABLE = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) - -UTF8_SM_MODEL = {'class_table': UTF8_CLS, - 'class_factor': 16, - 'state_table': UTF8_ST, - 'char_len_table': UTF8_CHAR_LEN_TABLE, - 'name': 'UTF-8'} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcharsetprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcharsetprober.py deleted file mode 100644 index 0adb51d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcharsetprober.py +++ /dev/null @@ -1,132 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import CharacterCategory, ProbingState, SequenceLikelihood - - -class SingleByteCharSetProber(CharSetProber): - SAMPLE_SIZE = 64 - SB_ENOUGH_REL_THRESHOLD = 1024 # 0.25 * SAMPLE_SIZE^2 - POSITIVE_SHORTCUT_THRESHOLD = 0.95 - NEGATIVE_SHORTCUT_THRESHOLD = 0.05 - - def __init__(self, model, reversed=False, name_prober=None): - super(SingleByteCharSetProber, self).__init__() - self._model = model - # TRUE if we need to reverse every pair in the model lookup - self._reversed = reversed - # Optional auxiliary prober for name decision - self._name_prober = name_prober - self._last_order = None - self._seq_counters = None - self._total_seqs = None - self._total_char = None - self._freq_char = None - self.reset() - - def reset(self): - super(SingleByteCharSetProber, self).reset() - # char order of last character - self._last_order = 255 - self._seq_counters = [0] * SequenceLikelihood.get_num_categories() - self._total_seqs = 0 - self._total_char = 0 - # characters that fall in our sampling range - self._freq_char = 0 - - @property - def charset_name(self): - if self._name_prober: - return self._name_prober.charset_name - else: - return self._model['charset_name'] - - @property - def language(self): - if self._name_prober: - return self._name_prober.language - else: - return self._model.get('language') - - def feed(self, byte_str): - if not self._model['keep_english_letter']: - byte_str = self.filter_international_words(byte_str) - if not byte_str: - return self.state - char_to_order_map = self._model['char_to_order_map'] - for i, c in enumerate(byte_str): - # XXX: Order is in range 1-64, so one would think we want 0-63 here, - # but that leads to 27 more test failures than before. - order = char_to_order_map[c] - # XXX: This was SYMBOL_CAT_ORDER before, with a value of 250, but - # CharacterCategory.SYMBOL is actually 253, so we use CONTROL - # to make it closer to the original intent. The only difference - # is whether or not we count digits and control characters for - # _total_char purposes. - if order < CharacterCategory.CONTROL: - self._total_char += 1 - if order < self.SAMPLE_SIZE: - self._freq_char += 1 - if self._last_order < self.SAMPLE_SIZE: - self._total_seqs += 1 - if not self._reversed: - i = (self._last_order * self.SAMPLE_SIZE) + order - model = self._model['precedence_matrix'][i] - else: # reverse the order of the letters in the lookup - i = (order * self.SAMPLE_SIZE) + self._last_order - model = self._model['precedence_matrix'][i] - self._seq_counters[model] += 1 - self._last_order = order - - charset_name = self._model['charset_name'] - if self.state == ProbingState.DETECTING: - if self._total_seqs > self.SB_ENOUGH_REL_THRESHOLD: - confidence = self.get_confidence() - if confidence > self.POSITIVE_SHORTCUT_THRESHOLD: - self.logger.debug('%s confidence = %s, we have a winner', - charset_name, confidence) - self._state = ProbingState.FOUND_IT - elif confidence < self.NEGATIVE_SHORTCUT_THRESHOLD: - self.logger.debug('%s confidence = %s, below negative ' - 'shortcut threshhold %s', charset_name, - confidence, - self.NEGATIVE_SHORTCUT_THRESHOLD) - self._state = ProbingState.NOT_ME - - return self.state - - def get_confidence(self): - r = 0.01 - if self._total_seqs > 0: - r = ((1.0 * self._seq_counters[SequenceLikelihood.POSITIVE]) / - self._total_seqs / self._model['typical_positive_ratio']) - r = r * self._freq_char / self._total_char - if r >= 1.0: - r = 0.99 - return r diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcsgroupprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcsgroupprober.py deleted file mode 100644 index 98e95dc..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sbcsgroupprober.py +++ /dev/null @@ -1,73 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .sbcharsetprober import SingleByteCharSetProber -from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, - Latin5CyrillicModel, MacCyrillicModel, - Ibm866Model, Ibm855Model) -from .langgreekmodel import Latin7GreekModel, Win1253GreekModel -from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel -# from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel -from .langthaimodel import TIS620ThaiModel -from .langhebrewmodel import Win1255HebrewModel -from .hebrewprober import HebrewProber -from .langturkishmodel import Latin5TurkishModel - - -class SBCSGroupProber(CharSetGroupProber): - def __init__(self): - super(SBCSGroupProber, self).__init__() - self.probers = [ - SingleByteCharSetProber(Win1251CyrillicModel), - SingleByteCharSetProber(Koi8rModel), - SingleByteCharSetProber(Latin5CyrillicModel), - SingleByteCharSetProber(MacCyrillicModel), - SingleByteCharSetProber(Ibm866Model), - SingleByteCharSetProber(Ibm855Model), - SingleByteCharSetProber(Latin7GreekModel), - SingleByteCharSetProber(Win1253GreekModel), - SingleByteCharSetProber(Latin5BulgarianModel), - SingleByteCharSetProber(Win1251BulgarianModel), - # TODO: Restore Hungarian encodings (iso-8859-2 and windows-1250) - # after we retrain model. - # SingleByteCharSetProber(Latin2HungarianModel), - # SingleByteCharSetProber(Win1250HungarianModel), - SingleByteCharSetProber(TIS620ThaiModel), - SingleByteCharSetProber(Latin5TurkishModel), - ] - hebrew_prober = HebrewProber() - logical_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, - False, hebrew_prober) - visual_hebrew_prober = SingleByteCharSetProber(Win1255HebrewModel, True, - hebrew_prober) - hebrew_prober.set_model_probers(logical_hebrew_prober, visual_hebrew_prober) - self.probers.extend([hebrew_prober, logical_hebrew_prober, - visual_hebrew_prober]) - - self.reset() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sjisprober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sjisprober.py deleted file mode 100644 index 9e29623..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/sjisprober.py +++ /dev/null @@ -1,92 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import SJISDistributionAnalysis -from .jpcntx import SJISContextAnalysis -from .mbcssm import SJIS_SM_MODEL -from .enums import ProbingState, MachineState - - -class SJISProber(MultiByteCharSetProber): - def __init__(self): - super(SJISProber, self).__init__() - self.coding_sm = CodingStateMachine(SJIS_SM_MODEL) - self.distribution_analyzer = SJISDistributionAnalysis() - self.context_analyzer = SJISContextAnalysis() - self.reset() - - def reset(self): - super(SJISProber, self).reset() - self.context_analyzer.reset() - - @property - def charset_name(self): - return self.context_analyzer.charset_name - - @property - def language(self): - return "Japanese" - - def feed(self, byte_str): - for i in range(len(byte_str)): - coding_state = self.coding_sm.next_state(byte_str[i]) - if coding_state == MachineState.ERROR: - self.logger.debug('%s %s prober hit error at byte %s', - self.charset_name, self.language, i) - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - char_len = self.coding_sm.get_current_charlen() - if i == 0: - self._last_char[1] = byte_str[0] - self.context_analyzer.feed(self._last_char[2 - char_len:], - char_len) - self.distribution_analyzer.feed(self._last_char, char_len) - else: - self.context_analyzer.feed(byte_str[i + 1 - char_len:i + 3 - - char_len], char_len) - self.distribution_analyzer.feed(byte_str[i - 1:i + 1], - char_len) - - self._last_char[0] = byte_str[-1] - - if self.state == ProbingState.DETECTING: - if (self.context_analyzer.got_enough_data() and - (self.get_confidence() > self.SHORTCUT_THRESHOLD)): - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - context_conf = self.context_analyzer.get_confidence() - distrib_conf = self.distribution_analyzer.get_confidence() - return max(context_conf, distrib_conf) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/universaldetector.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/universaldetector.py deleted file mode 100644 index 7b4e92d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/universaldetector.py +++ /dev/null @@ -1,286 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### -""" -Module containing the UniversalDetector detector class, which is the primary -class a user of ``chardet`` should use. - -:author: Mark Pilgrim (initial port to Python) -:author: Shy Shalom (original C code) -:author: Dan Blanchard (major refactoring for 3.0) -:author: Ian Cordasco -""" - - -import codecs -import logging -import re - -from .charsetgroupprober import CharSetGroupProber -from .enums import InputState, LanguageFilter, ProbingState -from .escprober import EscCharSetProber -from .latin1prober import Latin1Prober -from .mbcsgroupprober import MBCSGroupProber -from .sbcsgroupprober import SBCSGroupProber - - -class UniversalDetector(object): - """ - The ``UniversalDetector`` class underlies the ``chardet.detect`` function - and coordinates all of the different charset probers. - - To get a ``dict`` containing an encoding and its confidence, you can simply - run: - - .. code:: - - u = UniversalDetector() - u.feed(some_bytes) - u.close() - detected = u.result - - """ - - MINIMUM_THRESHOLD = 0.20 - HIGH_BYTE_DETECTOR = re.compile(b'[\x80-\xFF]') - ESC_DETECTOR = re.compile(b'(\033|~{)') - WIN_BYTE_DETECTOR = re.compile(b'[\x80-\x9F]') - ISO_WIN_MAP = {'iso-8859-1': 'Windows-1252', - 'iso-8859-2': 'Windows-1250', - 'iso-8859-5': 'Windows-1251', - 'iso-8859-6': 'Windows-1256', - 'iso-8859-7': 'Windows-1253', - 'iso-8859-8': 'Windows-1255', - 'iso-8859-9': 'Windows-1254', - 'iso-8859-13': 'Windows-1257'} - - def __init__(self, lang_filter=LanguageFilter.ALL): - self._esc_charset_prober = None - self._charset_probers = [] - self.result = None - self.done = None - self._got_data = None - self._input_state = None - self._last_char = None - self.lang_filter = lang_filter - self.logger = logging.getLogger(__name__) - self._has_win_bytes = None - self.reset() - - def reset(self): - """ - Reset the UniversalDetector and all of its probers back to their - initial states. This is called by ``__init__``, so you only need to - call this directly in between analyses of different documents. - """ - self.result = {'encoding': None, 'confidence': 0.0, 'language': None} - self.done = False - self._got_data = False - self._has_win_bytes = False - self._input_state = InputState.PURE_ASCII - self._last_char = b'' - if self._esc_charset_prober: - self._esc_charset_prober.reset() - for prober in self._charset_probers: - prober.reset() - - def feed(self, byte_str): - """ - Takes a chunk of a document and feeds it through all of the relevant - charset probers. - - After calling ``feed``, you can check the value of the ``done`` - attribute to see if you need to continue feeding the - ``UniversalDetector`` more data, or if it has made a prediction - (in the ``result`` attribute). - - .. note:: - You should always call ``close`` when you're done feeding in your - document if ``done`` is not already ``True``. - """ - if self.done: - return - - if not len(byte_str): - return - - if not isinstance(byte_str, bytearray): - byte_str = bytearray(byte_str) - - # First check for known BOMs, since these are guaranteed to be correct - if not self._got_data: - # If the data starts with BOM, we know it is UTF - if byte_str.startswith(codecs.BOM_UTF8): - # EF BB BF UTF-8 with BOM - self.result = {'encoding': "UTF-8-SIG", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith((codecs.BOM_UTF32_LE, - codecs.BOM_UTF32_BE)): - # FF FE 00 00 UTF-32, little-endian BOM - # 00 00 FE FF UTF-32, big-endian BOM - self.result = {'encoding': "UTF-32", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith(b'\xFE\xFF\x00\x00'): - # FE FF 00 00 UCS-4, unusual octet order BOM (3412) - self.result = {'encoding': "X-ISO-10646-UCS-4-3412", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith(b'\x00\x00\xFF\xFE'): - # 00 00 FF FE UCS-4, unusual octet order BOM (2143) - self.result = {'encoding': "X-ISO-10646-UCS-4-2143", - 'confidence': 1.0, - 'language': ''} - elif byte_str.startswith((codecs.BOM_LE, codecs.BOM_BE)): - # FF FE UTF-16, little endian BOM - # FE FF UTF-16, big endian BOM - self.result = {'encoding': "UTF-16", - 'confidence': 1.0, - 'language': ''} - - self._got_data = True - if self.result['encoding'] is not None: - self.done = True - return - - # If none of those matched and we've only see ASCII so far, check - # for high bytes and escape sequences - if self._input_state == InputState.PURE_ASCII: - if self.HIGH_BYTE_DETECTOR.search(byte_str): - self._input_state = InputState.HIGH_BYTE - elif self._input_state == InputState.PURE_ASCII and \ - self.ESC_DETECTOR.search(self._last_char + byte_str): - self._input_state = InputState.ESC_ASCII - - self._last_char = byte_str[-1:] - - # If we've seen escape sequences, use the EscCharSetProber, which - # uses a simple state machine to check for known escape sequences in - # HZ and ISO-2022 encodings, since those are the only encodings that - # use such sequences. - if self._input_state == InputState.ESC_ASCII: - if not self._esc_charset_prober: - self._esc_charset_prober = EscCharSetProber(self.lang_filter) - if self._esc_charset_prober.feed(byte_str) == ProbingState.FOUND_IT: - self.result = {'encoding': - self._esc_charset_prober.charset_name, - 'confidence': - self._esc_charset_prober.get_confidence(), - 'language': - self._esc_charset_prober.language} - self.done = True - # If we've seen high bytes (i.e., those with values greater than 127), - # we need to do more complicated checks using all our multi-byte and - # single-byte probers that are left. The single-byte probers - # use character bigram distributions to determine the encoding, whereas - # the multi-byte probers use a combination of character unigram and - # bigram distributions. - elif self._input_state == InputState.HIGH_BYTE: - if not self._charset_probers: - self._charset_probers = [MBCSGroupProber(self.lang_filter)] - # If we're checking non-CJK encodings, use single-byte prober - if self.lang_filter & LanguageFilter.NON_CJK: - self._charset_probers.append(SBCSGroupProber()) - self._charset_probers.append(Latin1Prober()) - for prober in self._charset_probers: - if prober.feed(byte_str) == ProbingState.FOUND_IT: - self.result = {'encoding': prober.charset_name, - 'confidence': prober.get_confidence(), - 'language': prober.language} - self.done = True - break - if self.WIN_BYTE_DETECTOR.search(byte_str): - self._has_win_bytes = True - - def close(self): - """ - Stop analyzing the current document and come up with a final - prediction. - - :returns: The ``result`` attribute, a ``dict`` with the keys - `encoding`, `confidence`, and `language`. - """ - # Don't bother with checks if we're already done - if self.done: - return self.result - self.done = True - - if not self._got_data: - self.logger.debug('no data received!') - - # Default to ASCII if it is all we've seen so far - elif self._input_state == InputState.PURE_ASCII: - self.result = {'encoding': 'ascii', - 'confidence': 1.0, - 'language': ''} - - # If we have seen non-ASCII, return the best that met MINIMUM_THRESHOLD - elif self._input_state == InputState.HIGH_BYTE: - prober_confidence = None - max_prober_confidence = 0.0 - max_prober = None - for prober in self._charset_probers: - if not prober: - continue - prober_confidence = prober.get_confidence() - if prober_confidence > max_prober_confidence: - max_prober_confidence = prober_confidence - max_prober = prober - if max_prober and (max_prober_confidence > self.MINIMUM_THRESHOLD): - charset_name = max_prober.charset_name - lower_charset_name = max_prober.charset_name.lower() - confidence = max_prober.get_confidence() - # Use Windows encoding name instead of ISO-8859 if we saw any - # extra Windows-specific bytes - if lower_charset_name.startswith('iso-8859'): - if self._has_win_bytes: - charset_name = self.ISO_WIN_MAP.get(lower_charset_name, - charset_name) - self.result = {'encoding': charset_name, - 'confidence': confidence, - 'language': max_prober.language} - - # Log all prober confidences if none met MINIMUM_THRESHOLD - if self.logger.getEffectiveLevel() == logging.DEBUG: - if self.result['encoding'] is None: - self.logger.debug('no probers hit minimum threshold') - for group_prober in self._charset_probers: - if not group_prober: - continue - if isinstance(group_prober, CharSetGroupProber): - for prober in group_prober.probers: - self.logger.debug('%s %s confidence = %s', - prober.charset_name, - prober.language, - prober.get_confidence()) - else: - self.logger.debug('%s %s confidence = %s', - prober.charset_name, - prober.language, - prober.get_confidence()) - return self.result diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/utf8prober.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/utf8prober.py deleted file mode 100644 index 6c3196c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/utf8prober.py +++ /dev/null @@ -1,82 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .enums import ProbingState, MachineState -from .codingstatemachine import CodingStateMachine -from .mbcssm import UTF8_SM_MODEL - - - -class UTF8Prober(CharSetProber): - ONE_CHAR_PROB = 0.5 - - def __init__(self): - super(UTF8Prober, self).__init__() - self.coding_sm = CodingStateMachine(UTF8_SM_MODEL) - self._num_mb_chars = None - self.reset() - - def reset(self): - super(UTF8Prober, self).reset() - self.coding_sm.reset() - self._num_mb_chars = 0 - - @property - def charset_name(self): - return "utf-8" - - @property - def language(self): - return "" - - def feed(self, byte_str): - for c in byte_str: - coding_state = self.coding_sm.next_state(c) - if coding_state == MachineState.ERROR: - self._state = ProbingState.NOT_ME - break - elif coding_state == MachineState.ITS_ME: - self._state = ProbingState.FOUND_IT - break - elif coding_state == MachineState.START: - if self.coding_sm.get_current_charlen() >= 2: - self._num_mb_chars += 1 - - if self.state == ProbingState.DETECTING: - if self.get_confidence() > self.SHORTCUT_THRESHOLD: - self._state = ProbingState.FOUND_IT - - return self.state - - def get_confidence(self): - unlike = 0.99 - if self._num_mb_chars < 6: - unlike *= self.ONE_CHAR_PROB ** self._num_mb_chars - return 1.0 - unlike - else: - return unlike diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/version.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/version.py deleted file mode 100644 index bb2a34a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/chardet/version.py +++ /dev/null @@ -1,9 +0,0 @@ -""" -This module exists only to simplify retrieving the version number of chardet -from within setup.py and from chardet subpackages. - -:author: Dan Blanchard (dan.blanchard@gmail.com) -""" - -__version__ = "3.0.4" -VERSION = __version__.split('.') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py deleted file mode 100644 index f4d9ce2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -from .initialise import init, deinit, reinit, colorama_text -from .ansi import Fore, Back, Style, Cursor -from .ansitowin32 import AnsiToWin32 - -__version__ = '0.3.9' - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py deleted file mode 100644 index 7877658..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansi.py +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -''' -This module generates ANSI character codes to printing colors to terminals. -See: http://en.wikipedia.org/wiki/ANSI_escape_code -''' - -CSI = '\033[' -OSC = '\033]' -BEL = '\007' - - -def code_to_chars(code): - return CSI + str(code) + 'm' - -def set_title(title): - return OSC + '2;' + title + BEL - -def clear_screen(mode=2): - return CSI + str(mode) + 'J' - -def clear_line(mode=2): - return CSI + str(mode) + 'K' - - -class AnsiCodes(object): - def __init__(self): - # the subclasses declare class attributes which are numbers. - # Upon instantiation we define instance attributes, which are the same - # as the class attributes but wrapped with the ANSI escape sequence - for name in dir(self): - if not name.startswith('_'): - value = getattr(self, name) - setattr(self, name, code_to_chars(value)) - - -class AnsiCursor(object): - def UP(self, n=1): - return CSI + str(n) + 'A' - def DOWN(self, n=1): - return CSI + str(n) + 'B' - def FORWARD(self, n=1): - return CSI + str(n) + 'C' - def BACK(self, n=1): - return CSI + str(n) + 'D' - def POS(self, x=1, y=1): - return CSI + str(y) + ';' + str(x) + 'H' - - -class AnsiFore(AnsiCodes): - BLACK = 30 - RED = 31 - GREEN = 32 - YELLOW = 33 - BLUE = 34 - MAGENTA = 35 - CYAN = 36 - WHITE = 37 - RESET = 39 - - # These are fairly well supported, but not part of the standard. - LIGHTBLACK_EX = 90 - LIGHTRED_EX = 91 - LIGHTGREEN_EX = 92 - LIGHTYELLOW_EX = 93 - LIGHTBLUE_EX = 94 - LIGHTMAGENTA_EX = 95 - LIGHTCYAN_EX = 96 - LIGHTWHITE_EX = 97 - - -class AnsiBack(AnsiCodes): - BLACK = 40 - RED = 41 - GREEN = 42 - YELLOW = 43 - BLUE = 44 - MAGENTA = 45 - CYAN = 46 - WHITE = 47 - RESET = 49 - - # These are fairly well supported, but not part of the standard. - LIGHTBLACK_EX = 100 - LIGHTRED_EX = 101 - LIGHTGREEN_EX = 102 - LIGHTYELLOW_EX = 103 - LIGHTBLUE_EX = 104 - LIGHTMAGENTA_EX = 105 - LIGHTCYAN_EX = 106 - LIGHTWHITE_EX = 107 - - -class AnsiStyle(AnsiCodes): - BRIGHT = 1 - DIM = 2 - NORMAL = 22 - RESET_ALL = 0 - -Fore = AnsiFore() -Back = AnsiBack() -Style = AnsiStyle() -Cursor = AnsiCursor() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py deleted file mode 100644 index 1d6e605..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/ansitowin32.py +++ /dev/null @@ -1,236 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -import re -import sys -import os - -from .ansi import AnsiFore, AnsiBack, AnsiStyle, Style -from .winterm import WinTerm, WinColor, WinStyle -from .win32 import windll, winapi_test - - -winterm = None -if windll is not None: - winterm = WinTerm() - - -def is_stream_closed(stream): - return not hasattr(stream, 'closed') or stream.closed - - -def is_a_tty(stream): - return hasattr(stream, 'isatty') and stream.isatty() - - -class StreamWrapper(object): - ''' - Wraps a stream (such as stdout), acting as a transparent proxy for all - attribute access apart from method 'write()', which is delegated to our - Converter instance. - ''' - def __init__(self, wrapped, converter): - # double-underscore everything to prevent clashes with names of - # attributes on the wrapped stream object. - self.__wrapped = wrapped - self.__convertor = converter - - def __getattr__(self, name): - return getattr(self.__wrapped, name) - - def write(self, text): - self.__convertor.write(text) - - -class AnsiToWin32(object): - ''' - Implements a 'write()' method which, on Windows, will strip ANSI character - sequences from the text, and if outputting to a tty, will convert them into - win32 function calls. - ''' - ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?') # Control Sequence Introducer - ANSI_OSC_RE = re.compile('\001?\033\\]((?:.|;)*?)(\x07)\002?') # Operating System Command - - def __init__(self, wrapped, convert=None, strip=None, autoreset=False): - # The wrapped stream (normally sys.stdout or sys.stderr) - self.wrapped = wrapped - - # should we reset colors to defaults after every .write() - self.autoreset = autoreset - - # create the proxy wrapping our output stream - self.stream = StreamWrapper(wrapped, self) - - on_windows = os.name == 'nt' - # We test if the WinAPI works, because even if we are on Windows - # we may be using a terminal that doesn't support the WinAPI - # (e.g. Cygwin Terminal). In this case it's up to the terminal - # to support the ANSI codes. - conversion_supported = on_windows and winapi_test() - - # should we strip ANSI sequences from our output? - if strip is None: - strip = conversion_supported or (not is_stream_closed(wrapped) and not is_a_tty(wrapped)) - self.strip = strip - - # should we should convert ANSI sequences into win32 calls? - if convert is None: - convert = conversion_supported and not is_stream_closed(wrapped) and is_a_tty(wrapped) - self.convert = convert - - # dict of ansi codes to win32 functions and parameters - self.win32_calls = self.get_win32_calls() - - # are we wrapping stderr? - self.on_stderr = self.wrapped is sys.stderr - - def should_wrap(self): - ''' - True if this class is actually needed. If false, then the output - stream will not be affected, nor will win32 calls be issued, so - wrapping stdout is not actually required. This will generally be - False on non-Windows platforms, unless optional functionality like - autoreset has been requested using kwargs to init() - ''' - return self.convert or self.strip or self.autoreset - - def get_win32_calls(self): - if self.convert and winterm: - return { - AnsiStyle.RESET_ALL: (winterm.reset_all, ), - AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT), - AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL), - AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL), - AnsiFore.BLACK: (winterm.fore, WinColor.BLACK), - AnsiFore.RED: (winterm.fore, WinColor.RED), - AnsiFore.GREEN: (winterm.fore, WinColor.GREEN), - AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW), - AnsiFore.BLUE: (winterm.fore, WinColor.BLUE), - AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA), - AnsiFore.CYAN: (winterm.fore, WinColor.CYAN), - AnsiFore.WHITE: (winterm.fore, WinColor.GREY), - AnsiFore.RESET: (winterm.fore, ), - AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True), - AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True), - AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True), - AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True), - AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True), - AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True), - AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True), - AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True), - AnsiBack.BLACK: (winterm.back, WinColor.BLACK), - AnsiBack.RED: (winterm.back, WinColor.RED), - AnsiBack.GREEN: (winterm.back, WinColor.GREEN), - AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW), - AnsiBack.BLUE: (winterm.back, WinColor.BLUE), - AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA), - AnsiBack.CYAN: (winterm.back, WinColor.CYAN), - AnsiBack.WHITE: (winterm.back, WinColor.GREY), - AnsiBack.RESET: (winterm.back, ), - AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True), - AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True), - AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True), - AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True), - AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True), - AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True), - AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True), - AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True), - } - return dict() - - def write(self, text): - if self.strip or self.convert: - self.write_and_convert(text) - else: - self.wrapped.write(text) - self.wrapped.flush() - if self.autoreset: - self.reset_all() - - - def reset_all(self): - if self.convert: - self.call_win32('m', (0,)) - elif not self.strip and not is_stream_closed(self.wrapped): - self.wrapped.write(Style.RESET_ALL) - - - def write_and_convert(self, text): - ''' - Write the given text to our wrapped stream, stripping any ANSI - sequences from the text, and optionally converting them into win32 - calls. - ''' - cursor = 0 - text = self.convert_osc(text) - for match in self.ANSI_CSI_RE.finditer(text): - start, end = match.span() - self.write_plain_text(text, cursor, start) - self.convert_ansi(*match.groups()) - cursor = end - self.write_plain_text(text, cursor, len(text)) - - - def write_plain_text(self, text, start, end): - if start < end: - self.wrapped.write(text[start:end]) - self.wrapped.flush() - - - def convert_ansi(self, paramstring, command): - if self.convert: - params = self.extract_params(command, paramstring) - self.call_win32(command, params) - - - def extract_params(self, command, paramstring): - if command in 'Hf': - params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';')) - while len(params) < 2: - # defaults: - params = params + (1,) - else: - params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0) - if len(params) == 0: - # defaults: - if command in 'JKm': - params = (0,) - elif command in 'ABCD': - params = (1,) - - return params - - - def call_win32(self, command, params): - if command == 'm': - for param in params: - if param in self.win32_calls: - func_args = self.win32_calls[param] - func = func_args[0] - args = func_args[1:] - kwargs = dict(on_stderr=self.on_stderr) - func(*args, **kwargs) - elif command in 'J': - winterm.erase_screen(params[0], on_stderr=self.on_stderr) - elif command in 'K': - winterm.erase_line(params[0], on_stderr=self.on_stderr) - elif command in 'Hf': # cursor position - absolute - winterm.set_cursor_position(params, on_stderr=self.on_stderr) - elif command in 'ABCD': # cursor position - relative - n = params[0] - # A - up, B - down, C - forward, D - back - x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command] - winterm.cursor_adjust(x, y, on_stderr=self.on_stderr) - - - def convert_osc(self, text): - for match in self.ANSI_OSC_RE.finditer(text): - start, end = match.span() - text = text[:start] + text[end:] - paramstring, command = match.groups() - if command in '\x07': # \x07 = BEL - params = paramstring.split(";") - # 0 - change title and icon (we will only change title) - # 1 - change icon (we don't support this) - # 2 - change title - if params[0] in '02': - winterm.set_title(params[1]) - return text diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py deleted file mode 100644 index 834962a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/initialise.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -import atexit -import contextlib -import sys - -from .ansitowin32 import AnsiToWin32 - - -orig_stdout = None -orig_stderr = None - -wrapped_stdout = None -wrapped_stderr = None - -atexit_done = False - - -def reset_all(): - if AnsiToWin32 is not None: # Issue #74: objects might become None at exit - AnsiToWin32(orig_stdout).reset_all() - - -def init(autoreset=False, convert=None, strip=None, wrap=True): - - if not wrap and any([autoreset, convert, strip]): - raise ValueError('wrap=False conflicts with any other arg=True') - - global wrapped_stdout, wrapped_stderr - global orig_stdout, orig_stderr - - orig_stdout = sys.stdout - orig_stderr = sys.stderr - - if sys.stdout is None: - wrapped_stdout = None - else: - sys.stdout = wrapped_stdout = \ - wrap_stream(orig_stdout, convert, strip, autoreset, wrap) - if sys.stderr is None: - wrapped_stderr = None - else: - sys.stderr = wrapped_stderr = \ - wrap_stream(orig_stderr, convert, strip, autoreset, wrap) - - global atexit_done - if not atexit_done: - atexit.register(reset_all) - atexit_done = True - - -def deinit(): - if orig_stdout is not None: - sys.stdout = orig_stdout - if orig_stderr is not None: - sys.stderr = orig_stderr - - -@contextlib.contextmanager -def colorama_text(*args, **kwargs): - init(*args, **kwargs) - try: - yield - finally: - deinit() - - -def reinit(): - if wrapped_stdout is not None: - sys.stdout = wrapped_stdout - if wrapped_stderr is not None: - sys.stderr = wrapped_stderr - - -def wrap_stream(stream, convert, strip, autoreset, wrap): - if wrap: - wrapper = AnsiToWin32(stream, - convert=convert, strip=strip, autoreset=autoreset) - if wrapper.should_wrap(): - stream = wrapper.stream - return stream - - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/win32.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/win32.py deleted file mode 100644 index 8262e35..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/win32.py +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. - -# from winbase.h -STDOUT = -11 -STDERR = -12 - -try: - import ctypes - from ctypes import LibraryLoader - windll = LibraryLoader(ctypes.WinDLL) - from ctypes import wintypes -except (AttributeError, ImportError): - windll = None - SetConsoleTextAttribute = lambda *_: None - winapi_test = lambda *_: None -else: - from ctypes import byref, Structure, c_char, POINTER - - COORD = wintypes._COORD - - class CONSOLE_SCREEN_BUFFER_INFO(Structure): - """struct in wincon.h.""" - _fields_ = [ - ("dwSize", COORD), - ("dwCursorPosition", COORD), - ("wAttributes", wintypes.WORD), - ("srWindow", wintypes.SMALL_RECT), - ("dwMaximumWindowSize", COORD), - ] - def __str__(self): - return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % ( - self.dwSize.Y, self.dwSize.X - , self.dwCursorPosition.Y, self.dwCursorPosition.X - , self.wAttributes - , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right - , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X - ) - - _GetStdHandle = windll.kernel32.GetStdHandle - _GetStdHandle.argtypes = [ - wintypes.DWORD, - ] - _GetStdHandle.restype = wintypes.HANDLE - - _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo - _GetConsoleScreenBufferInfo.argtypes = [ - wintypes.HANDLE, - POINTER(CONSOLE_SCREEN_BUFFER_INFO), - ] - _GetConsoleScreenBufferInfo.restype = wintypes.BOOL - - _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute - _SetConsoleTextAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, - ] - _SetConsoleTextAttribute.restype = wintypes.BOOL - - _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition - _SetConsoleCursorPosition.argtypes = [ - wintypes.HANDLE, - COORD, - ] - _SetConsoleCursorPosition.restype = wintypes.BOOL - - _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA - _FillConsoleOutputCharacterA.argtypes = [ - wintypes.HANDLE, - c_char, - wintypes.DWORD, - COORD, - POINTER(wintypes.DWORD), - ] - _FillConsoleOutputCharacterA.restype = wintypes.BOOL - - _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute - _FillConsoleOutputAttribute.argtypes = [ - wintypes.HANDLE, - wintypes.WORD, - wintypes.DWORD, - COORD, - POINTER(wintypes.DWORD), - ] - _FillConsoleOutputAttribute.restype = wintypes.BOOL - - _SetConsoleTitleW = windll.kernel32.SetConsoleTitleW - _SetConsoleTitleW.argtypes = [ - wintypes.LPCWSTR - ] - _SetConsoleTitleW.restype = wintypes.BOOL - - handles = { - STDOUT: _GetStdHandle(STDOUT), - STDERR: _GetStdHandle(STDERR), - } - - def _winapi_test(handle): - csbi = CONSOLE_SCREEN_BUFFER_INFO() - success = _GetConsoleScreenBufferInfo( - handle, byref(csbi)) - return bool(success) - - def winapi_test(): - return any(_winapi_test(h) for h in handles.values()) - - def GetConsoleScreenBufferInfo(stream_id=STDOUT): - handle = handles[stream_id] - csbi = CONSOLE_SCREEN_BUFFER_INFO() - success = _GetConsoleScreenBufferInfo( - handle, byref(csbi)) - return csbi - - def SetConsoleTextAttribute(stream_id, attrs): - handle = handles[stream_id] - return _SetConsoleTextAttribute(handle, attrs) - - def SetConsoleCursorPosition(stream_id, position, adjust=True): - position = COORD(*position) - # If the position is out of range, do nothing. - if position.Y <= 0 or position.X <= 0: - return - # Adjust for Windows' SetConsoleCursorPosition: - # 1. being 0-based, while ANSI is 1-based. - # 2. expecting (x,y), while ANSI uses (y,x). - adjusted_position = COORD(position.Y - 1, position.X - 1) - if adjust: - # Adjust for viewport's scroll position - sr = GetConsoleScreenBufferInfo(STDOUT).srWindow - adjusted_position.Y += sr.Top - adjusted_position.X += sr.Left - # Resume normal processing - handle = handles[stream_id] - return _SetConsoleCursorPosition(handle, adjusted_position) - - def FillConsoleOutputCharacter(stream_id, char, length, start): - handle = handles[stream_id] - char = c_char(char.encode()) - length = wintypes.DWORD(length) - num_written = wintypes.DWORD(0) - # Note that this is hard-coded for ANSI (vs wide) bytes. - success = _FillConsoleOutputCharacterA( - handle, char, length, start, byref(num_written)) - return num_written.value - - def FillConsoleOutputAttribute(stream_id, attr, length, start): - ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )''' - handle = handles[stream_id] - attribute = wintypes.WORD(attr) - length = wintypes.DWORD(length) - num_written = wintypes.DWORD(0) - # Note that this is hard-coded for ANSI (vs wide) bytes. - return _FillConsoleOutputAttribute( - handle, attribute, length, start, byref(num_written)) - - def SetConsoleTitle(title): - return _SetConsoleTitleW(title) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py deleted file mode 100644 index 60309d3..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/colorama/winterm.py +++ /dev/null @@ -1,162 +0,0 @@ -# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file. -from . import win32 - - -# from wincon.h -class WinColor(object): - BLACK = 0 - BLUE = 1 - GREEN = 2 - CYAN = 3 - RED = 4 - MAGENTA = 5 - YELLOW = 6 - GREY = 7 - -# from wincon.h -class WinStyle(object): - NORMAL = 0x00 # dim text, dim background - BRIGHT = 0x08 # bright text, dim background - BRIGHT_BACKGROUND = 0x80 # dim text, bright background - -class WinTerm(object): - - def __init__(self): - self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes - self.set_attrs(self._default) - self._default_fore = self._fore - self._default_back = self._back - self._default_style = self._style - # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style. - # So that LIGHT_EX colors and BRIGHT style do not clobber each other, - # we track them separately, since LIGHT_EX is overwritten by Fore/Back - # and BRIGHT is overwritten by Style codes. - self._light = 0 - - def get_attrs(self): - return self._fore + self._back * 16 + (self._style | self._light) - - def set_attrs(self, value): - self._fore = value & 7 - self._back = (value >> 4) & 7 - self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND) - - def reset_all(self, on_stderr=None): - self.set_attrs(self._default) - self.set_console(attrs=self._default) - - def fore(self, fore=None, light=False, on_stderr=False): - if fore is None: - fore = self._default_fore - self._fore = fore - # Emulate LIGHT_EX with BRIGHT Style - if light: - self._light |= WinStyle.BRIGHT - else: - self._light &= ~WinStyle.BRIGHT - self.set_console(on_stderr=on_stderr) - - def back(self, back=None, light=False, on_stderr=False): - if back is None: - back = self._default_back - self._back = back - # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style - if light: - self._light |= WinStyle.BRIGHT_BACKGROUND - else: - self._light &= ~WinStyle.BRIGHT_BACKGROUND - self.set_console(on_stderr=on_stderr) - - def style(self, style=None, on_stderr=False): - if style is None: - style = self._default_style - self._style = style - self.set_console(on_stderr=on_stderr) - - def set_console(self, attrs=None, on_stderr=False): - if attrs is None: - attrs = self.get_attrs() - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - win32.SetConsoleTextAttribute(handle, attrs) - - def get_position(self, handle): - position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition - # Because Windows coordinates are 0-based, - # and win32.SetConsoleCursorPosition expects 1-based. - position.X += 1 - position.Y += 1 - return position - - def set_cursor_position(self, position=None, on_stderr=False): - if position is None: - # I'm not currently tracking the position, so there is no default. - # position = self.get_position() - return - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - win32.SetConsoleCursorPosition(handle, position) - - def cursor_adjust(self, x, y, on_stderr=False): - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - position = self.get_position(handle) - adjusted_position = (position.Y + y, position.X + x) - win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False) - - def erase_screen(self, mode=0, on_stderr=False): - # 0 should clear from the cursor to the end of the screen. - # 1 should clear from the cursor to the beginning of the screen. - # 2 should clear the entire screen, and move cursor to (1,1) - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - csbi = win32.GetConsoleScreenBufferInfo(handle) - # get the number of character cells in the current buffer - cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y - # get number of character cells before current cursor position - cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X - if mode == 0: - from_coord = csbi.dwCursorPosition - cells_to_erase = cells_in_screen - cells_before_cursor - if mode == 1: - from_coord = win32.COORD(0, 0) - cells_to_erase = cells_before_cursor - elif mode == 2: - from_coord = win32.COORD(0, 0) - cells_to_erase = cells_in_screen - # fill the entire screen with blanks - win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) - # now set the buffer's attributes accordingly - win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) - if mode == 2: - # put the cursor where needed - win32.SetConsoleCursorPosition(handle, (1, 1)) - - def erase_line(self, mode=0, on_stderr=False): - # 0 should clear from the cursor to the end of the line. - # 1 should clear from the cursor to the beginning of the line. - # 2 should clear the entire line. - handle = win32.STDOUT - if on_stderr: - handle = win32.STDERR - csbi = win32.GetConsoleScreenBufferInfo(handle) - if mode == 0: - from_coord = csbi.dwCursorPosition - cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X - if mode == 1: - from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) - cells_to_erase = csbi.dwCursorPosition.X - elif mode == 2: - from_coord = win32.COORD(0, csbi.dwCursorPosition.Y) - cells_to_erase = csbi.dwSize.X - # fill the entire screen with blanks - win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord) - # now set the buffer's attributes accordingly - win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord) - - def set_title(self, title): - win32.SetConsoleTitle(title) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py deleted file mode 100644 index d4aab45..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import logging - -__version__ = '0.2.7' - -class DistlibException(Exception): - pass - -try: - from logging import NullHandler -except ImportError: # pragma: no cover - class NullHandler(logging.Handler): - def handle(self, record): pass - def emit(self, record): pass - def createLock(self): self.lock = None - -logger = logging.getLogger(__name__) -logger.addHandler(NullHandler()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py deleted file mode 100644 index f7dbf4c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -"""Modules copied from Python 3 standard libraries, for internal use only. - -Individual classes and functions are found in d2._backport.misc. Intended -usage is to always import things missing from 3.1 from that module: the -built-in/stdlib objects will be used if found. -""" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py deleted file mode 100644 index cfb318d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/misc.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Backports for individual classes and functions.""" - -import os -import sys - -__all__ = ['cache_from_source', 'callable', 'fsencode'] - - -try: - from imp import cache_from_source -except ImportError: - def cache_from_source(py_file, debug=__debug__): - ext = debug and 'c' or 'o' - return py_file + ext - - -try: - callable = callable -except NameError: - from collections import Callable - - def callable(obj): - return isinstance(obj, Callable) - - -try: - fsencode = os.fsencode -except AttributeError: - def fsencode(filename): - if isinstance(filename, bytes): - return filename - elif isinstance(filename, str): - return filename.encode(sys.getfilesystemencoding()) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py deleted file mode 100644 index 159e49e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/shutil.py +++ /dev/null @@ -1,761 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Utility functions for copying and archiving files and directory trees. - -XXX The functions here don't copy the resource fork or other metadata on Mac. - -""" - -import os -import sys -import stat -from os.path import abspath -import fnmatch -import collections -import errno -from . import tarfile - -try: - import bz2 - _BZ2_SUPPORTED = True -except ImportError: - _BZ2_SUPPORTED = False - -try: - from pwd import getpwnam -except ImportError: - getpwnam = None - -try: - from grp import getgrnam -except ImportError: - getgrnam = None - -__all__ = ["copyfileobj", "copyfile", "copymode", "copystat", "copy", "copy2", - "copytree", "move", "rmtree", "Error", "SpecialFileError", - "ExecError", "make_archive", "get_archive_formats", - "register_archive_format", "unregister_archive_format", - "get_unpack_formats", "register_unpack_format", - "unregister_unpack_format", "unpack_archive", "ignore_patterns"] - -class Error(EnvironmentError): - pass - -class SpecialFileError(EnvironmentError): - """Raised when trying to do a kind of operation (e.g. copying) which is - not supported on a special file (e.g. a named pipe)""" - -class ExecError(EnvironmentError): - """Raised when a command could not be executed""" - -class ReadError(EnvironmentError): - """Raised when an archive cannot be read""" - -class RegistryError(Exception): - """Raised when a registry operation with the archiving - and unpacking registries fails""" - - -try: - WindowsError -except NameError: - WindowsError = None - -def copyfileobj(fsrc, fdst, length=16*1024): - """copy data from file-like object fsrc to file-like object fdst""" - while 1: - buf = fsrc.read(length) - if not buf: - break - fdst.write(buf) - -def _samefile(src, dst): - # Macintosh, Unix. - if hasattr(os.path, 'samefile'): - try: - return os.path.samefile(src, dst) - except OSError: - return False - - # All other platforms: check for same pathname. - return (os.path.normcase(os.path.abspath(src)) == - os.path.normcase(os.path.abspath(dst))) - -def copyfile(src, dst): - """Copy data from src to dst""" - if _samefile(src, dst): - raise Error("`%s` and `%s` are the same file" % (src, dst)) - - for fn in [src, dst]: - try: - st = os.stat(fn) - except OSError: - # File most likely does not exist - pass - else: - # XXX What about other special files? (sockets, devices...) - if stat.S_ISFIFO(st.st_mode): - raise SpecialFileError("`%s` is a named pipe" % fn) - - with open(src, 'rb') as fsrc: - with open(dst, 'wb') as fdst: - copyfileobj(fsrc, fdst) - -def copymode(src, dst): - """Copy mode bits from src to dst""" - if hasattr(os, 'chmod'): - st = os.stat(src) - mode = stat.S_IMODE(st.st_mode) - os.chmod(dst, mode) - -def copystat(src, dst): - """Copy all stat info (mode bits, atime, mtime, flags) from src to dst""" - st = os.stat(src) - mode = stat.S_IMODE(st.st_mode) - if hasattr(os, 'utime'): - os.utime(dst, (st.st_atime, st.st_mtime)) - if hasattr(os, 'chmod'): - os.chmod(dst, mode) - if hasattr(os, 'chflags') and hasattr(st, 'st_flags'): - try: - os.chflags(dst, st.st_flags) - except OSError as why: - if (not hasattr(errno, 'EOPNOTSUPP') or - why.errno != errno.EOPNOTSUPP): - raise - -def copy(src, dst): - """Copy data and mode bits ("cp src dst"). - - The destination may be a directory. - - """ - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - copyfile(src, dst) - copymode(src, dst) - -def copy2(src, dst): - """Copy data and all stat info ("cp -p src dst"). - - The destination may be a directory. - - """ - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - copyfile(src, dst) - copystat(src, dst) - -def ignore_patterns(*patterns): - """Function that can be used as copytree() ignore parameter. - - Patterns is a sequence of glob-style patterns - that are used to exclude files""" - def _ignore_patterns(path, names): - ignored_names = [] - for pattern in patterns: - ignored_names.extend(fnmatch.filter(names, pattern)) - return set(ignored_names) - return _ignore_patterns - -def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, - ignore_dangling_symlinks=False): - """Recursively copy a directory tree. - - The destination directory must not already exist. - If exception(s) occur, an Error is raised with a list of reasons. - - If the optional symlinks flag is true, symbolic links in the - source tree result in symbolic links in the destination tree; if - it is false, the contents of the files pointed to by symbolic - links are copied. If the file pointed by the symlink doesn't - exist, an exception will be added in the list of errors raised in - an Error exception at the end of the copy process. - - You can set the optional ignore_dangling_symlinks flag to true if you - want to silence this exception. Notice that this has no effect on - platforms that don't support os.symlink. - - The optional ignore argument is a callable. If given, it - is called with the `src` parameter, which is the directory - being visited by copytree(), and `names` which is the list of - `src` contents, as returned by os.listdir(): - - callable(src, names) -> ignored_names - - Since copytree() is called recursively, the callable will be - called once for each directory that is copied. It returns a - list of names relative to the `src` directory that should - not be copied. - - The optional copy_function argument is a callable that will be used - to copy each file. It will be called with the source path and the - destination path as arguments. By default, copy2() is used, but any - function that supports the same signature (like copy()) can be used. - - """ - names = os.listdir(src) - if ignore is not None: - ignored_names = ignore(src, names) - else: - ignored_names = set() - - os.makedirs(dst) - errors = [] - for name in names: - if name in ignored_names: - continue - srcname = os.path.join(src, name) - dstname = os.path.join(dst, name) - try: - if os.path.islink(srcname): - linkto = os.readlink(srcname) - if symlinks: - os.symlink(linkto, dstname) - else: - # ignore dangling symlink if the flag is on - if not os.path.exists(linkto) and ignore_dangling_symlinks: - continue - # otherwise let the copy occurs. copy2 will raise an error - copy_function(srcname, dstname) - elif os.path.isdir(srcname): - copytree(srcname, dstname, symlinks, ignore, copy_function) - else: - # Will raise a SpecialFileError for unsupported file types - copy_function(srcname, dstname) - # catch the Error from the recursive copytree so that we can - # continue with other files - except Error as err: - errors.extend(err.args[0]) - except EnvironmentError as why: - errors.append((srcname, dstname, str(why))) - try: - copystat(src, dst) - except OSError as why: - if WindowsError is not None and isinstance(why, WindowsError): - # Copying file access times may fail on Windows - pass - else: - errors.extend((src, dst, str(why))) - if errors: - raise Error(errors) - -def rmtree(path, ignore_errors=False, onerror=None): - """Recursively delete a directory tree. - - If ignore_errors is set, errors are ignored; otherwise, if onerror - is set, it is called to handle the error with arguments (func, - path, exc_info) where func is os.listdir, os.remove, or os.rmdir; - path is the argument to that function that caused it to fail; and - exc_info is a tuple returned by sys.exc_info(). If ignore_errors - is false and onerror is None, an exception is raised. - - """ - if ignore_errors: - def onerror(*args): - pass - elif onerror is None: - def onerror(*args): - raise - try: - if os.path.islink(path): - # symlinks to directories are forbidden, see bug #1669 - raise OSError("Cannot call rmtree on a symbolic link") - except OSError: - onerror(os.path.islink, path, sys.exc_info()) - # can't continue even if onerror hook returns - return - names = [] - try: - names = os.listdir(path) - except os.error: - onerror(os.listdir, path, sys.exc_info()) - for name in names: - fullname = os.path.join(path, name) - try: - mode = os.lstat(fullname).st_mode - except os.error: - mode = 0 - if stat.S_ISDIR(mode): - rmtree(fullname, ignore_errors, onerror) - else: - try: - os.remove(fullname) - except os.error: - onerror(os.remove, fullname, sys.exc_info()) - try: - os.rmdir(path) - except os.error: - onerror(os.rmdir, path, sys.exc_info()) - - -def _basename(path): - # A basename() variant which first strips the trailing slash, if present. - # Thus we always get the last component of the path, even for directories. - return os.path.basename(path.rstrip(os.path.sep)) - -def move(src, dst): - """Recursively move a file or directory to another location. This is - similar to the Unix "mv" command. - - If the destination is a directory or a symlink to a directory, the source - is moved inside the directory. The destination path must not already - exist. - - If the destination already exists but is not a directory, it may be - overwritten depending on os.rename() semantics. - - If the destination is on our current filesystem, then rename() is used. - Otherwise, src is copied to the destination and then removed. - A lot more could be done here... A look at a mv.c shows a lot of - the issues this implementation glosses over. - - """ - real_dst = dst - if os.path.isdir(dst): - if _samefile(src, dst): - # We might be on a case insensitive filesystem, - # perform the rename anyway. - os.rename(src, dst) - return - - real_dst = os.path.join(dst, _basename(src)) - if os.path.exists(real_dst): - raise Error("Destination path '%s' already exists" % real_dst) - try: - os.rename(src, real_dst) - except OSError: - if os.path.isdir(src): - if _destinsrc(src, dst): - raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst)) - copytree(src, real_dst, symlinks=True) - rmtree(src) - else: - copy2(src, real_dst) - os.unlink(src) - -def _destinsrc(src, dst): - src = abspath(src) - dst = abspath(dst) - if not src.endswith(os.path.sep): - src += os.path.sep - if not dst.endswith(os.path.sep): - dst += os.path.sep - return dst.startswith(src) - -def _get_gid(name): - """Returns a gid, given a group name.""" - if getgrnam is None or name is None: - return None - try: - result = getgrnam(name) - except KeyError: - result = None - if result is not None: - return result[2] - return None - -def _get_uid(name): - """Returns an uid, given a user name.""" - if getpwnam is None or name is None: - return None - try: - result = getpwnam(name) - except KeyError: - result = None - if result is not None: - return result[2] - return None - -def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, - owner=None, group=None, logger=None): - """Create a (possibly compressed) tar file from all the files under - 'base_dir'. - - 'compress' must be "gzip" (the default), "bzip2", or None. - - 'owner' and 'group' can be used to define an owner and a group for the - archive that is being built. If not provided, the current owner and group - will be used. - - The output tar file will be named 'base_name' + ".tar", possibly plus - the appropriate compression extension (".gz", or ".bz2"). - - Returns the output filename. - """ - tar_compression = {'gzip': 'gz', None: ''} - compress_ext = {'gzip': '.gz'} - - if _BZ2_SUPPORTED: - tar_compression['bzip2'] = 'bz2' - compress_ext['bzip2'] = '.bz2' - - # flags for compression program, each element of list will be an argument - if compress is not None and compress not in compress_ext: - raise ValueError("bad value for 'compress', or compression format not " - "supported : {0}".format(compress)) - - archive_name = base_name + '.tar' + compress_ext.get(compress, '') - archive_dir = os.path.dirname(archive_name) - - if not os.path.exists(archive_dir): - if logger is not None: - logger.info("creating %s", archive_dir) - if not dry_run: - os.makedirs(archive_dir) - - # creating the tarball - if logger is not None: - logger.info('Creating tar archive') - - uid = _get_uid(owner) - gid = _get_gid(group) - - def _set_uid_gid(tarinfo): - if gid is not None: - tarinfo.gid = gid - tarinfo.gname = group - if uid is not None: - tarinfo.uid = uid - tarinfo.uname = owner - return tarinfo - - if not dry_run: - tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) - try: - tar.add(base_dir, filter=_set_uid_gid) - finally: - tar.close() - - return archive_name - -def _call_external_zip(base_dir, zip_filename, verbose=False, dry_run=False): - # 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 - try: - spawn(["zip", zipoptions, zip_filename, base_dir], dry_run=dry_run) - except DistutilsExecError: - # XXX really should distinguish between "couldn't find - # external 'zip' command" and "zip failed". - raise ExecError("unable to create zip file '%s': " - "could neither import the 'zipfile' module nor " - "find a standalone zip utility") % zip_filename - -def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None): - """Create a zip file from all the files under 'base_dir'. - - The output zip file will be named 'base_name' + ".zip". Uses either the - "zipfile" Python module (if available) or the InfoZIP "zip" utility - (if installed and found on the default search path). If neither tool is - available, raises ExecError. Returns the name of the output zip - file. - """ - zip_filename = base_name + ".zip" - archive_dir = os.path.dirname(base_name) - - if not os.path.exists(archive_dir): - if logger is not None: - logger.info("creating %s", archive_dir) - if not dry_run: - os.makedirs(archive_dir) - - # If zipfile module is not available, try spawning an external 'zip' - # command. - try: - import zipfile - except ImportError: - zipfile = None - - if zipfile is None: - _call_external_zip(base_dir, zip_filename, verbose, dry_run) - else: - if logger is not None: - logger.info("creating '%s' and adding '%s' to it", - zip_filename, base_dir) - - if not dry_run: - zip = zipfile.ZipFile(zip_filename, "w", - compression=zipfile.ZIP_DEFLATED) - - for dirpath, dirnames, filenames in os.walk(base_dir): - for name in filenames: - path = os.path.normpath(os.path.join(dirpath, name)) - if os.path.isfile(path): - zip.write(path, path) - if logger is not None: - logger.info("adding '%s'", path) - zip.close() - - 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"), - } - -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. - - Each element of the returned sequence is a tuple (name, description) - """ - formats = [(name, registry[2]) for name, registry in - _ARCHIVE_FORMATS.items()] - formats.sort() - return formats - -def register_archive_format(name, function, extra_args=None, description=''): - """Registers an archive format. - - name is the name of the format. function is the callable that will be - used to create archives. If provided, extra_args is a sequence of - (name, value) tuples that will be passed as arguments to the callable. - description can be provided to describe the format, and will be returned - by the get_archive_formats() function. - """ - if extra_args is None: - extra_args = [] - if not isinstance(function, collections.Callable): - raise TypeError('The %s object is not callable' % function) - if not isinstance(extra_args, (tuple, list)): - raise TypeError('extra_args needs to be a sequence') - for element in extra_args: - if not isinstance(element, (tuple, list)) or len(element) !=2: - raise TypeError('extra_args elements are : (arg_name, value)') - - _ARCHIVE_FORMATS[name] = (function, extra_args, description) - -def unregister_archive_format(name): - del _ARCHIVE_FORMATS[name] - -def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, - dry_run=0, owner=None, group=None, logger=None): - """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". - - 'root_dir' is a directory that will be the root directory of the - archive; ie. we typically chdir into 'root_dir' before creating the - archive. 'base_dir' is the directory where we start archiving from; - ie. 'base_dir' will be the common prefix of all files and - directories in the archive. 'root_dir' and 'base_dir' both default - to the current directory. Returns the name of the archive file. - - 'owner' and 'group' are used when creating a tar archive. By default, - uses the current owner and group. - """ - save_cwd = os.getcwd() - if root_dir is not None: - if logger is not None: - logger.debug("changing into '%s'", root_dir) - base_name = os.path.abspath(base_name) - if not dry_run: - os.chdir(root_dir) - - if base_dir is None: - base_dir = os.curdir - - kwargs = {'dry_run': dry_run, 'logger': logger} - - try: - format_info = _ARCHIVE_FORMATS[format] - except KeyError: - raise ValueError("unknown archive format '%s'" % format) - - func = format_info[0] - for arg, val in format_info[1]: - kwargs[arg] = val - - if format != 'zip': - kwargs['owner'] = owner - kwargs['group'] = group - - try: - filename = func(base_name, base_dir, **kwargs) - finally: - if root_dir is not None: - if logger is not None: - logger.debug("changing back to '%s'", save_cwd) - os.chdir(save_cwd) - - return filename - - -def get_unpack_formats(): - """Returns a list of supported formats for unpacking. - - Each element of the returned sequence is a tuple - (name, extensions, description) - """ - formats = [(name, info[0], info[3]) for name, info in - _UNPACK_FORMATS.items()] - formats.sort() - return formats - -def _check_unpack_options(extensions, function, extra_args): - """Checks what gets registered as an unpacker.""" - # first make sure no other unpacker is registered for this extension - existing_extensions = {} - for name, info in _UNPACK_FORMATS.items(): - for ext in info[0]: - existing_extensions[ext] = name - - for extension in extensions: - if extension in existing_extensions: - msg = '%s is already registered for "%s"' - raise RegistryError(msg % (extension, - existing_extensions[extension])) - - if not isinstance(function, collections.Callable): - raise TypeError('The registered function must be a callable') - - -def register_unpack_format(name, extensions, function, extra_args=None, - description=''): - """Registers an unpack format. - - `name` is the name of the format. `extensions` is a list of extensions - corresponding to the format. - - `function` is the callable that will be - used to unpack archives. The callable will receive archives to unpack. - If it's unable to handle an archive, it needs to raise a ReadError - exception. - - If provided, `extra_args` is a sequence of - (name, value) tuples that will be passed as arguments to the callable. - description can be provided to describe the format, and will be returned - by the get_unpack_formats() function. - """ - if extra_args is None: - extra_args = [] - _check_unpack_options(extensions, function, extra_args) - _UNPACK_FORMATS[name] = extensions, function, extra_args, description - -def unregister_unpack_format(name): - """Removes the pack format from the registry.""" - del _UNPACK_FORMATS[name] - -def _ensure_directory(path): - """Ensure that the parent directory of `path` exists""" - dirname = os.path.dirname(path) - if not os.path.isdir(dirname): - os.makedirs(dirname) - -def _unpack_zipfile(filename, extract_dir): - """Unpack zip `filename` to `extract_dir` - """ - try: - import zipfile - except ImportError: - raise ReadError('zlib not supported, cannot unpack this archive.') - - if not zipfile.is_zipfile(filename): - raise ReadError("%s is not a zip file" % filename) - - zip = zipfile.ZipFile(filename) - try: - for info in zip.infolist(): - name = info.filename - - # don't extract absolute paths or ones with .. in them - if name.startswith('/') or '..' in name: - continue - - target = os.path.join(extract_dir, *name.split('/')) - if not target: - continue - - _ensure_directory(target) - if not name.endswith('/'): - # file - data = zip.read(info.filename) - f = open(target, 'wb') - try: - f.write(data) - finally: - f.close() - del data - finally: - zip.close() - -def _unpack_tarfile(filename, extract_dir): - """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir` - """ - try: - tarobj = tarfile.open(filename) - except tarfile.TarError: - raise ReadError( - "%s is not a compressed or uncompressed tar file" % filename) - try: - tarobj.extractall(extract_dir) - finally: - tarobj.close() - -_UNPACK_FORMATS = { - 'gztar': (['.tar.gz', '.tgz'], _unpack_tarfile, [], "gzip'ed tar-file"), - 'tar': (['.tar'], _unpack_tarfile, [], "uncompressed tar file"), - 'zip': (['.zip'], _unpack_zipfile, [], "ZIP file") - } - -if _BZ2_SUPPORTED: - _UNPACK_FORMATS['bztar'] = (['.bz2'], _unpack_tarfile, [], - "bzip2'ed tar-file") - -def _find_unpack_format(filename): - for name, info in _UNPACK_FORMATS.items(): - for extension in info[0]: - if filename.endswith(extension): - return name - return None - -def unpack_archive(filename, extract_dir=None, format=None): - """Unpack an archive. - - `filename` is the name of the archive. - - `extract_dir` is the name of the target directory, where the archive - is unpacked. If not provided, the current working directory is used. - - `format` is the archive format: one of "zip", "tar", or "gztar". Or any - other registered format. If not provided, unpack_archive will use the - filename extension and see if an unpacker was registered for that - extension. - - In case none is found, a ValueError is raised. - """ - if extract_dir is None: - extract_dir = os.getcwd() - - if format is not None: - try: - format_info = _UNPACK_FORMATS[format] - except KeyError: - raise ValueError("Unknown unpack format '{0}'".format(format)) - - func = format_info[1] - func(filename, extract_dir, **dict(format_info[2])) - else: - # we need to look at the registered unpackers supported extensions - format = _find_unpack_format(filename) - if format is None: - raise ReadError("Unknown archive format '{0}'".format(filename)) - - func = _UNPACK_FORMATS[format][1] - kwargs = dict(_UNPACK_FORMATS[format][2]) - func(filename, extract_dir, **kwargs) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg deleted file mode 100644 index 1746bd0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.cfg +++ /dev/null @@ -1,84 +0,0 @@ -[posix_prefix] -# Configuration directories. Some of these come straight out of the -# configure script. They are for implementing the other variables, not to -# be used directly in [resource_locations]. -confdir = /etc -datadir = /usr/share -libdir = /usr/lib -statedir = /var -# User resource directory -local = ~/.local/{distribution.name} - -stdlib = {base}/lib/python{py_version_short} -platstdlib = {platbase}/lib/python{py_version_short} -purelib = {base}/lib/python{py_version_short}/site-packages -platlib = {platbase}/lib/python{py_version_short}/site-packages -include = {base}/include/python{py_version_short}{abiflags} -platinclude = {platbase}/include/python{py_version_short}{abiflags} -data = {base} - -[posix_home] -stdlib = {base}/lib/python -platstdlib = {base}/lib/python -purelib = {base}/lib/python -platlib = {base}/lib/python -include = {base}/include/python -platinclude = {base}/include/python -scripts = {base}/bin -data = {base} - -[nt] -stdlib = {base}/Lib -platstdlib = {base}/Lib -purelib = {base}/Lib/site-packages -platlib = {base}/Lib/site-packages -include = {base}/Include -platinclude = {base}/Include -scripts = {base}/Scripts -data = {base} - -[os2] -stdlib = {base}/Lib -platstdlib = {base}/Lib -purelib = {base}/Lib/site-packages -platlib = {base}/Lib/site-packages -include = {base}/Include -platinclude = {base}/Include -scripts = {base}/Scripts -data = {base} - -[os2_home] -stdlib = {userbase}/lib/python{py_version_short} -platstdlib = {userbase}/lib/python{py_version_short} -purelib = {userbase}/lib/python{py_version_short}/site-packages -platlib = {userbase}/lib/python{py_version_short}/site-packages -include = {userbase}/include/python{py_version_short} -scripts = {userbase}/bin -data = {userbase} - -[nt_user] -stdlib = {userbase}/Python{py_version_nodot} -platstdlib = {userbase}/Python{py_version_nodot} -purelib = {userbase}/Python{py_version_nodot}/site-packages -platlib = {userbase}/Python{py_version_nodot}/site-packages -include = {userbase}/Python{py_version_nodot}/Include -scripts = {userbase}/Scripts -data = {userbase} - -[posix_user] -stdlib = {userbase}/lib/python{py_version_short} -platstdlib = {userbase}/lib/python{py_version_short} -purelib = {userbase}/lib/python{py_version_short}/site-packages -platlib = {userbase}/lib/python{py_version_short}/site-packages -include = {userbase}/include/python{py_version_short} -scripts = {userbase}/bin -data = {userbase} - -[osx_framework_user] -stdlib = {userbase}/lib/python -platstdlib = {userbase}/lib/python -purelib = {userbase}/lib/python/site-packages -platlib = {userbase}/lib/python/site-packages -include = {userbase}/include -scripts = {userbase}/bin -data = {userbase} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py deleted file mode 100644 index 1df3aba..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/sysconfig.py +++ /dev/null @@ -1,788 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Access to Python's configuration information.""" - -import codecs -import os -import re -import sys -from os.path import pardir, realpath -try: - import configparser -except ImportError: - import ConfigParser as configparser - - -__all__ = [ - 'get_config_h_filename', - 'get_config_var', - 'get_config_vars', - 'get_makefile_filename', - 'get_path', - 'get_path_names', - 'get_paths', - 'get_platform', - 'get_python_version', - 'get_scheme_names', - 'parse_config_h', -] - - -def _safe_realpath(path): - try: - return realpath(path) - except OSError: - return path - - -if sys.executable: - _PROJECT_BASE = os.path.dirname(_safe_realpath(sys.executable)) -else: - # sys.executable can be empty if argv[0] has been changed and Python is - # unable to retrieve the real program name - _PROJECT_BASE = _safe_realpath(os.getcwd()) - -if os.name == "nt" and "pcbuild" in _PROJECT_BASE[-8:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir)) -# 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/AMD64 -if os.name == "nt" and "\\pcbuild\\amd64" in _PROJECT_BASE[-14:].lower(): - _PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir)) - - -def is_python_build(): - for fn in ("Setup.dist", "Setup.local"): - if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)): - return True - return False - -_PYTHON_BUILD = is_python_build() - -_cfg_read = False - -def _ensure_cfg_read(): - global _cfg_read - if not _cfg_read: - from ..resources import finder - backport_package = __name__.rsplit('.', 1)[0] - _finder = finder(backport_package) - _cfgfile = _finder.find('sysconfig.cfg') - assert _cfgfile, 'sysconfig.cfg exists' - with _cfgfile.as_stream() as s: - _SCHEMES.readfp(s) - if _PYTHON_BUILD: - for scheme in ('posix_prefix', 'posix_home'): - _SCHEMES.set(scheme, 'include', '{srcdir}/Include') - _SCHEMES.set(scheme, 'platinclude', '{projectbase}/.') - - _cfg_read = True - - -_SCHEMES = configparser.RawConfigParser() -_VAR_REPL = re.compile(r'\{([^{]*?)\}') - -def _expand_globals(config): - _ensure_cfg_read() - if config.has_section('globals'): - globals = config.items('globals') - else: - globals = tuple() - - sections = config.sections() - for section in sections: - if section == 'globals': - continue - for option, value in globals: - if config.has_option(section, option): - continue - config.set(section, option, value) - config.remove_section('globals') - - # now expanding local variables defined in the cfg file - # - for section in config.sections(): - variables = dict(config.items(section)) - - def _replacer(matchobj): - name = matchobj.group(1) - if name in variables: - return variables[name] - return matchobj.group(0) - - for option, value in config.items(section): - config.set(section, option, _VAR_REPL.sub(_replacer, value)) - -#_expand_globals(_SCHEMES) - - # FIXME don't rely on sys.version here, its format is an implementation detail - # of CPython, use sys.version_info or sys.hexversion -_PY_VERSION = sys.version.split()[0] -_PY_VERSION_SHORT = sys.version[:3] -_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2] -_PREFIX = os.path.normpath(sys.prefix) -_EXEC_PREFIX = os.path.normpath(sys.exec_prefix) -_CONFIG_VARS = None -_USER_BASE = None - - -def _subst_vars(path, local_vars): - """In the string `path`, replace tokens like {some.thing} with the - corresponding value from the map `local_vars`. - - If there is no corresponding value, leave the token unchanged. - """ - def _replacer(matchobj): - name = matchobj.group(1) - if name in local_vars: - return local_vars[name] - elif name in os.environ: - return os.environ[name] - return matchobj.group(0) - return _VAR_REPL.sub(_replacer, path) - - -def _extend_dict(target_dict, other_dict): - target_keys = target_dict.keys() - for key, value in other_dict.items(): - if key in target_keys: - continue - target_dict[key] = value - - -def _expand_vars(scheme, vars): - res = {} - if vars is None: - vars = {} - _extend_dict(vars, get_config_vars()) - - for key, value in _SCHEMES.items(scheme): - if os.name in ('posix', 'nt'): - value = os.path.expanduser(value) - res[key] = os.path.normpath(_subst_vars(value, vars)) - return res - - -def format_value(value, vars): - def _replacer(matchobj): - name = matchobj.group(1) - if name in vars: - return vars[name] - return matchobj.group(0) - return _VAR_REPL.sub(_replacer, value) - - -def _get_default_scheme(): - if os.name == 'posix': - # the default scheme for posix is posix_prefix - return 'posix_prefix' - return os.name - - -def _getuserbase(): - env_base = os.environ.get("PYTHONUSERBASE", None) - - def joinuser(*args): - return os.path.expanduser(os.path.join(*args)) - - # what about 'os2emx', 'riscos' ? - if os.name == "nt": - base = os.environ.get("APPDATA") or "~" - if env_base: - return env_base - else: - return joinuser(base, "Python") - - if sys.platform == "darwin": - framework = get_config_var("PYTHONFRAMEWORK") - if framework: - if env_base: - return env_base - else: - return joinuser("~", "Library", framework, "%d.%d" % - sys.version_info[:2]) - - if env_base: - return env_base - else: - return joinuser("~", ".local") - - -def _parse_makefile(filename, vars=None): - """Parse a Makefile-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - # Regexes needed for parsing Makefile (and similar syntaxes, - # like old-style Setup files). - _variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") - _findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") - _findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") - - if vars is None: - vars = {} - done = {} - notdone = {} - - with codecs.open(filename, encoding='utf-8', errors="surrogateescape") as f: - lines = f.readlines() - - for line in lines: - if line.startswith('#') or line.strip() == '': - continue - m = _variable_rx.match(line) - if m: - n, v = m.group(1, 2) - v = v.strip() - # `$$' is a literal `$' in make - tmpv = v.replace('$$', '') - - if "$" in tmpv: - notdone[n] = v - else: - try: - v = int(v) - except ValueError: - # insert literal `$' - done[n] = v.replace('$$', '$') - else: - done[n] = v - - # do variable interpolation here - variables = list(notdone.keys()) - - # Variables with a 'PY_' prefix in the makefile. These need to - # be made available without that prefix through sysconfig. - # Special care is needed to ensure that variable expansion works, even - # if the expansion uses the name without a prefix. - renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') - - while len(variables) > 0: - for name in tuple(variables): - value = notdone[name] - m = _findvar1_rx.search(value) or _findvar2_rx.search(value) - if m is not None: - n = m.group(1) - found = True - if n in done: - item = str(done[n]) - elif n in notdone: - # get it on a subsequent round - found = False - elif n in os.environ: - # do it like make: fall back to environment - item = os.environ[n] - - elif n in renamed_variables: - if (name.startswith('PY_') and - name[3:] in renamed_variables): - item = "" - - elif 'PY_' + n in notdone: - found = False - - else: - item = str(done['PY_' + n]) - - else: - done[n] = item = "" - - if found: - after = value[m.end():] - value = value[:m.start()] + item + after - if "$" in after: - notdone[name] = value - else: - try: - value = int(value) - except ValueError: - done[name] = value.strip() - else: - done[name] = value - variables.remove(name) - - if (name.startswith('PY_') and - name[3:] in renamed_variables): - - name = name[3:] - if name not in done: - done[name] = value - - else: - # bogus variable reference (e.g. "prefix=$/opt/python"); - # just drop it since we can't deal - done[name] = value - variables.remove(name) - - # strip spurious spaces - for k, v in done.items(): - if isinstance(v, str): - done[k] = v.strip() - - # save the results in the global dictionary - vars.update(done) - return vars - - -def get_makefile_filename(): - """Return the path of the Makefile.""" - if _PYTHON_BUILD: - return os.path.join(_PROJECT_BASE, "Makefile") - if hasattr(sys, 'abiflags'): - config_dir_name = 'config-%s%s' % (_PY_VERSION_SHORT, sys.abiflags) - else: - config_dir_name = 'config' - return os.path.join(get_path('stdlib'), config_dir_name, 'Makefile') - - -def _init_posix(vars): - """Initialize the module as appropriate for POSIX systems.""" - # load the installed Makefile: - makefile = get_makefile_filename() - try: - _parse_makefile(makefile, vars) - except IOError as e: - msg = "invalid Python installation: unable to open %s" % makefile - if hasattr(e, "strerror"): - msg = msg + " (%s)" % e.strerror - raise IOError(msg) - # load the installed pyconfig.h: - config_h = get_config_h_filename() - try: - with open(config_h) as f: - parse_config_h(f, vars) - except IOError as e: - msg = "invalid Python installation: unable to open %s" % config_h - if hasattr(e, "strerror"): - msg = msg + " (%s)" % e.strerror - raise IOError(msg) - # On AIX, there are wrong paths to the linker scripts in the Makefile - # -- these paths are relative to the Python source, but when installed - # the scripts are in another directory. - if _PYTHON_BUILD: - vars['LDSHARED'] = vars['BLDSHARED'] - - -def _init_non_posix(vars): - """Initialize the module as appropriate for NT""" - # set basic install directories - vars['LIBDEST'] = get_path('stdlib') - vars['BINLIBDEST'] = get_path('platstdlib') - vars['INCLUDEPY'] = get_path('include') - vars['SO'] = '.pyd' - vars['EXE'] = '.exe' - vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT - vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) - -# -# public APIs -# - - -def parse_config_h(fp, vars=None): - """Parse a config.h-style file. - - A dictionary containing name/value pairs is returned. If an - optional dictionary is passed in as the second argument, it is - used instead of a new dictionary. - """ - if vars is None: - vars = {} - define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") - undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") - - while True: - line = fp.readline() - if not line: - break - m = define_rx.match(line) - if m: - n, v = m.group(1, 2) - try: - v = int(v) - except ValueError: - pass - vars[n] = v - else: - m = undef_rx.match(line) - if m: - vars[m.group(1)] = 0 - return vars - - -def get_config_h_filename(): - """Return the path of pyconfig.h.""" - if _PYTHON_BUILD: - if os.name == "nt": - inc_dir = os.path.join(_PROJECT_BASE, "PC") - else: - inc_dir = _PROJECT_BASE - else: - inc_dir = get_path('platinclude') - return os.path.join(inc_dir, 'pyconfig.h') - - -def get_scheme_names(): - """Return a tuple containing the schemes names.""" - return tuple(sorted(_SCHEMES.sections())) - - -def get_path_names(): - """Return a tuple containing the paths names.""" - # xxx see if we want a static list - return _SCHEMES.options('posix_prefix') - - -def get_paths(scheme=_get_default_scheme(), vars=None, expand=True): - """Return a mapping containing an install scheme. - - ``scheme`` is the install scheme name. If not provided, it will - return the default scheme for the current platform. - """ - _ensure_cfg_read() - if expand: - return _expand_vars(scheme, vars) - else: - return dict(_SCHEMES.items(scheme)) - - -def get_path(name, scheme=_get_default_scheme(), vars=None, expand=True): - """Return a path corresponding to the scheme. - - ``scheme`` is the install scheme name. - """ - return get_paths(scheme, vars, expand)[name] - - -def get_config_vars(*args): - """With no arguments, return a dictionary of all configuration - variables relevant for the current platform. - - On Unix, this means every variable defined in Python's installed Makefile; - On Windows and Mac OS it's a much smaller set. - - With arguments, return a list of values that result from looking up - each argument in the configuration variable dictionary. - """ - global _CONFIG_VARS - if _CONFIG_VARS is None: - _CONFIG_VARS = {} - # Normalized versions of prefix and exec_prefix are handy to have; - # in fact, these are the standard versions used most places in the - # distutils2 module. - _CONFIG_VARS['prefix'] = _PREFIX - _CONFIG_VARS['exec_prefix'] = _EXEC_PREFIX - _CONFIG_VARS['py_version'] = _PY_VERSION - _CONFIG_VARS['py_version_short'] = _PY_VERSION_SHORT - _CONFIG_VARS['py_version_nodot'] = _PY_VERSION[0] + _PY_VERSION[2] - _CONFIG_VARS['base'] = _PREFIX - _CONFIG_VARS['platbase'] = _EXEC_PREFIX - _CONFIG_VARS['projectbase'] = _PROJECT_BASE - try: - _CONFIG_VARS['abiflags'] = sys.abiflags - except AttributeError: - # sys.abiflags may not be defined on all platforms. - _CONFIG_VARS['abiflags'] = '' - - if os.name in ('nt', 'os2'): - _init_non_posix(_CONFIG_VARS) - if os.name == 'posix': - _init_posix(_CONFIG_VARS) - # Setting 'userbase' is done below the call to the - # init function to enable using 'get_config_var' in - # the init-function. - if sys.version >= '2.6': - _CONFIG_VARS['userbase'] = _getuserbase() - - if 'srcdir' not in _CONFIG_VARS: - _CONFIG_VARS['srcdir'] = _PROJECT_BASE - else: - _CONFIG_VARS['srcdir'] = _safe_realpath(_CONFIG_VARS['srcdir']) - - # Convert srcdir into an absolute path if it appears necessary. - # Normally it is relative to the build directory. However, during - # testing, for example, we might be running a non-installed python - # from a different directory. - if _PYTHON_BUILD and os.name == "posix": - base = _PROJECT_BASE - try: - cwd = os.getcwd() - except OSError: - cwd = None - if (not os.path.isabs(_CONFIG_VARS['srcdir']) and - base != cwd): - # srcdir is relative and we are not in the same directory - # as the executable. Assume executable is in the build - # directory and make srcdir absolute. - srcdir = os.path.join(base, _CONFIG_VARS['srcdir']) - _CONFIG_VARS['srcdir'] = os.path.normpath(srcdir) - - if sys.platform == 'darwin': - kernel_version = os.uname()[2] # Kernel version (8.4.3) - major_version = int(kernel_version.split('.')[0]) - - if major_version < 8: - # On Mac OS X before 10.4, check if -arch and -isysroot - # are in CFLAGS or LDFLAGS and remove them if they are. - # This is needed when building extensions on a 10.3 system - # using a universal build of python. - for key in ('LDFLAGS', 'BASECFLAGS', - # a number of derived variables. These need to be - # patched up as well. - 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): - flags = _CONFIG_VARS[key] - flags = re.sub(r'-arch\s+\w+\s', ' ', flags) - flags = re.sub('-isysroot [^ \t]*', ' ', flags) - _CONFIG_VARS[key] = flags - else: - # Allow the user to override the architecture flags using - # an environment variable. - # NOTE: This name was introduced by Apple in OSX 10.5 and - # is used by several scripting languages distributed with - # that OS release. - if 'ARCHFLAGS' in os.environ: - arch = os.environ['ARCHFLAGS'] - for key in ('LDFLAGS', 'BASECFLAGS', - # a number of derived variables. These need to be - # patched up as well. - 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): - - flags = _CONFIG_VARS[key] - flags = re.sub(r'-arch\s+\w+\s', ' ', flags) - flags = flags + ' ' + arch - _CONFIG_VARS[key] = flags - - # If we're on OSX 10.5 or later and the user tries to - # compiles an extension using an SDK that is not present - # on the current machine it is better to not use an SDK - # than to fail. - # - # The major usecase for this is users using a Python.org - # binary installer on OSX 10.6: that installer uses - # the 10.4u SDK, but that SDK is not installed by default - # when you install Xcode. - # - CFLAGS = _CONFIG_VARS.get('CFLAGS', '') - m = re.search(r'-isysroot\s+(\S+)', CFLAGS) - if m is not None: - sdk = m.group(1) - if not os.path.exists(sdk): - for key in ('LDFLAGS', 'BASECFLAGS', - # a number of derived variables. These need to be - # patched up as well. - 'CFLAGS', 'PY_CFLAGS', 'BLDSHARED'): - - flags = _CONFIG_VARS[key] - flags = re.sub(r'-isysroot\s+\S+(\s|$)', ' ', flags) - _CONFIG_VARS[key] = flags - - if args: - vals = [] - for name in args: - vals.append(_CONFIG_VARS.get(name)) - return vals - else: - return _CONFIG_VARS - - -def get_config_var(name): - """Return the value of a single variable using the dictionary returned by - 'get_config_vars()'. - - Equivalent to get_config_vars().get(name) - """ - return get_config_vars().get(name) - - -def get_platform(): - """Return a string that identifies the current platform. - - This is used mainly to distinguish platform-specific build directories and - platform-specific built distributions. Typically includes the OS name - and version and the architecture (as supplied by 'os.uname()'), - although the exact information included depends on the OS; eg. for IRIX - the architecture isn't particularly important (IRIX only runs on SGI - hardware), but for Linux the kernel version isn't particularly - important. - - Examples of returned values: - linux-i586 - linux-alpha (?) - solaris-2.6-sun4u - irix-5.3 - irix64-6.2 - - Windows will return one of: - win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) - win-ia64 (64bit Windows on Itanium) - win32 (all others - specifically, sys.platform is returned) - - For other non-POSIX platforms, currently just returns 'sys.platform'. - """ - if os.name == 'nt': - # sniff sys.version for architecture. - prefix = " bit (" - i = sys.version.find(prefix) - if i == -1: - return sys.platform - j = sys.version.find(")", i) - look = sys.version[i+len(prefix):j].lower() - if look == 'amd64': - return 'win-amd64' - if look == 'itanium': - return 'win-ia64' - return sys.platform - - if os.name != "posix" or not hasattr(os, 'uname'): - # XXX what about the architecture? NT is Intel or Alpha, - # Mac OS is M68k or PPC, etc. - return sys.platform - - # Try to distinguish various flavours of Unix - osname, host, release, version, machine = os.uname() - - # Convert the OS name to lowercase, remove '/' characters - # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") - osname = osname.lower().replace('/', '') - machine = machine.replace(' ', '_') - machine = machine.replace('/', '-') - - if osname[:5] == "linux": - # At least on Linux/Intel, 'machine' is the processor -- - # i386, etc. - # XXX what about Alpha, SPARC, etc? - return "%s-%s" % (osname, machine) - elif osname[:5] == "sunos": - if release[0] >= "5": # SunOS 5 == Solaris 2 - osname = "solaris" - release = "%d.%s" % (int(release[0]) - 3, release[2:]) - # fall through to standard osname-release-machine representation - elif osname[:4] == "irix": # could be "irix64"! - return "%s-%s" % (osname, release) - elif osname[:3] == "aix": - return "%s-%s.%s" % (osname, version, release) - elif osname[:6] == "cygwin": - osname = "cygwin" - rel_re = re.compile(r'[\d.]+') - m = rel_re.match(release) - if m: - release = m.group() - elif osname[:6] == "darwin": - # - # For our purposes, we'll assume that the system version from - # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set - # to. This makes the compatibility story a bit more sane because the - # machine is going to compile and link as if it were - # MACOSX_DEPLOYMENT_TARGET. - cfgvars = get_config_vars() - macver = cfgvars.get('MACOSX_DEPLOYMENT_TARGET') - - if True: - # Always calculate the release of the running machine, - # needed to determine if we can build fat binaries or not. - - macrelease = macver - # Get the system version. Reading this plist is a documented - # way to get the system version (see the documentation for - # the Gestalt Manager) - try: - f = open('/System/Library/CoreServices/SystemVersion.plist') - except IOError: - # We're on a plain darwin box, fall back to the default - # behaviour. - pass - else: - try: - m = re.search(r'<key>ProductUserVisibleVersion</key>\s*' - r'<string>(.*?)</string>', f.read()) - finally: - f.close() - if m is not None: - macrelease = '.'.join(m.group(1).split('.')[:2]) - # else: fall back to the default behaviour - - if not macver: - macver = macrelease - - if macver: - release = macver - osname = "macosx" - - if ((macrelease + '.') >= '10.4.' and - '-arch' in get_config_vars().get('CFLAGS', '').strip()): - # The universal build will build fat binaries, but not on - # systems before 10.4 - # - # Try to detect 4-way universal builds, those have machine-type - # 'universal' instead of 'fat'. - - machine = 'fat' - cflags = get_config_vars().get('CFLAGS') - - archs = re.findall(r'-arch\s+(\S+)', cflags) - archs = tuple(sorted(set(archs))) - - if len(archs) == 1: - machine = archs[0] - elif archs == ('i386', 'ppc'): - machine = 'fat' - elif archs == ('i386', 'x86_64'): - machine = 'intel' - elif archs == ('i386', 'ppc', 'x86_64'): - machine = 'fat3' - elif archs == ('ppc64', 'x86_64'): - machine = 'fat64' - elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): - machine = 'universal' - else: - raise ValueError( - "Don't know machine value for archs=%r" % (archs,)) - - elif machine == 'i386': - # On OSX the machine type returned by uname is always the - # 32-bit variant, even if the executable architecture is - # the 64-bit variant - if sys.maxsize >= 2**32: - machine = 'x86_64' - - elif machine in ('PowerPC', 'Power_Macintosh'): - # Pick a sane name for the PPC architecture. - # See 'i386' case - if sys.maxsize >= 2**32: - machine = 'ppc64' - else: - machine = 'ppc' - - return "%s-%s-%s" % (osname, release, machine) - - -def get_python_version(): - return _PY_VERSION_SHORT - - -def _print_dict(title, data): - for index, (key, value) in enumerate(sorted(data.items())): - if index == 0: - print('%s: ' % (title)) - print('\t%s = "%s"' % (key, value)) - - -def _main(): - """Display all information sysconfig detains.""" - print('Platform: "%s"' % get_platform()) - print('Python version: "%s"' % get_python_version()) - print('Current installation scheme: "%s"' % _get_default_scheme()) - print() - _print_dict('Paths', get_paths()) - print() - _print_dict('Variables', get_config_vars()) - - -if __name__ == '__main__': - _main() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py deleted file mode 100644 index d66d856..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/_backport/tarfile.py +++ /dev/null @@ -1,2607 +0,0 @@ -#------------------------------------------------------------------- -# tarfile.py -#------------------------------------------------------------------- -# Copyright (C) 2002 Lars Gustaebel <lars@gustaebel.de> -# All rights reserved. -# -# 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. -# -from __future__ import print_function - -"""Read from and write to tar format archives. -""" - -__version__ = "$Revision$" - -version = "0.9.0" -__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" -__date__ = "$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $" -__cvsid__ = "$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $" -__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." - -#--------- -# Imports -#--------- -import sys -import os -import stat -import errno -import time -import struct -import copy -import re - -try: - import grp, pwd -except ImportError: - grp = pwd = None - -# os.symlink on Windows prior to 6.0 raises NotImplementedError -symlink_exception = (AttributeError, NotImplementedError) -try: - # WindowsError (1314) will be raised if the caller does not hold the - # SeCreateSymbolicLinkPrivilege privilege - symlink_exception += (WindowsError,) -except NameError: - pass - -# from tarfile import * -__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError"] - -if sys.version_info[0] < 3: - import __builtin__ as builtins -else: - import builtins - -_open = builtins.open # Since 'open' is TarFile.open - -#--------------------------------------------------------- -# tar constants -#--------------------------------------------------------- -NUL = b"\0" # the null character -BLOCKSIZE = 512 # length of processing blocks -RECORDSIZE = BLOCKSIZE * 20 # length of records -GNU_MAGIC = b"ustar \0" # magic gnu tar string -POSIX_MAGIC = b"ustar\x0000" # magic posix tar string - -LENGTH_NAME = 100 # maximum length of a filename -LENGTH_LINK = 100 # maximum length of a linkname -LENGTH_PREFIX = 155 # maximum length of the prefix field - -REGTYPE = b"0" # regular file -AREGTYPE = b"\0" # regular file -LNKTYPE = b"1" # link (inside tarfile) -SYMTYPE = b"2" # symbolic link -CHRTYPE = b"3" # character special device -BLKTYPE = b"4" # block special device -DIRTYPE = b"5" # directory -FIFOTYPE = b"6" # fifo special device -CONTTYPE = b"7" # contiguous file - -GNUTYPE_LONGNAME = b"L" # GNU tar longname -GNUTYPE_LONGLINK = b"K" # GNU tar longlink -GNUTYPE_SPARSE = b"S" # GNU tar sparse file - -XHDTYPE = b"x" # POSIX.1-2001 extended header -XGLTYPE = b"g" # POSIX.1-2001 global header -SOLARIS_XHDTYPE = b"X" # Solaris extended header - -USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format -GNU_FORMAT = 1 # GNU tar format -PAX_FORMAT = 2 # POSIX.1-2001 (pax) format -DEFAULT_FORMAT = GNU_FORMAT - -#--------------------------------------------------------- -# tarfile constants -#--------------------------------------------------------- -# File types that tarfile supports: -SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, - SYMTYPE, DIRTYPE, FIFOTYPE, - CONTTYPE, CHRTYPE, BLKTYPE, - GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, - GNUTYPE_SPARSE) - -# File types that will be treated as a regular file. -REGULAR_TYPES = (REGTYPE, AREGTYPE, - CONTTYPE, GNUTYPE_SPARSE) - -# File types that are part of the GNU tar format. -GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, - GNUTYPE_SPARSE) - -# Fields from a pax header that override a TarInfo attribute. -PAX_FIELDS = ("path", "linkpath", "size", "mtime", - "uid", "gid", "uname", "gname") - -# Fields from a pax header that are affected by hdrcharset. -PAX_NAME_FIELDS = set(("path", "linkpath", "uname", "gname")) - -# Fields in a pax header that are numbers, all other fields -# are treated as strings. -PAX_NUMBER_FIELDS = { - "atime": float, - "ctime": float, - "mtime": float, - "uid": int, - "gid": int, - "size": int -} - -#--------------------------------------------------------- -# Bits used in the mode field, values in octal. -#--------------------------------------------------------- -S_IFLNK = 0o120000 # symbolic link -S_IFREG = 0o100000 # regular file -S_IFBLK = 0o060000 # block device -S_IFDIR = 0o040000 # directory -S_IFCHR = 0o020000 # character device -S_IFIFO = 0o010000 # fifo - -TSUID = 0o4000 # set UID on execution -TSGID = 0o2000 # set GID on execution -TSVTX = 0o1000 # reserved - -TUREAD = 0o400 # read by owner -TUWRITE = 0o200 # write by owner -TUEXEC = 0o100 # execute/search by owner -TGREAD = 0o040 # read by group -TGWRITE = 0o020 # write by group -TGEXEC = 0o010 # execute/search by group -TOREAD = 0o004 # read by other -TOWRITE = 0o002 # write by other -TOEXEC = 0o001 # execute/search by other - -#--------------------------------------------------------- -# initialization -#--------------------------------------------------------- -if os.name in ("nt", "ce"): - ENCODING = "utf-8" -else: - ENCODING = sys.getfilesystemencoding() - -#--------------------------------------------------------- -# Some useful functions -#--------------------------------------------------------- - -def stn(s, length, encoding, errors): - """Convert a string to a null-terminated bytes object. - """ - s = s.encode(encoding, errors) - return s[:length] + (length - len(s)) * NUL - -def nts(s, encoding, errors): - """Convert a null-terminated bytes object to a string. - """ - p = s.find(b"\0") - if p != -1: - s = s[:p] - return s.decode(encoding, errors) - -def nti(s): - """Convert a number field to a python number. - """ - # There are two possible encodings for a number field, see - # itn() below. - if s[0] != chr(0o200): - try: - n = int(nts(s, "ascii", "strict") or "0", 8) - except ValueError: - raise InvalidHeaderError("invalid header") - else: - n = 0 - for i in range(len(s) - 1): - n <<= 8 - n += ord(s[i + 1]) - return n - -def itn(n, digits=8, format=DEFAULT_FORMAT): - """Convert a python number to a number field. - """ - # POSIX 1003.1-1988 requires numbers to be encoded as a string of - # octal digits followed by a null-byte, this allows values up to - # (8**(digits-1))-1. GNU tar allows storing numbers greater than - # that if necessary. A leading 0o200 byte indicates this particular - # encoding, the following digits-1 bytes are a big-endian - # representation. This allows values up to (256**(digits-1))-1. - if 0 <= n < 8 ** (digits - 1): - s = ("%0*o" % (digits - 1, n)).encode("ascii") + NUL - else: - if format != GNU_FORMAT or n >= 256 ** (digits - 1): - raise ValueError("overflow in number field") - - if n < 0: - # XXX We mimic GNU tar's behaviour with negative numbers, - # this could raise OverflowError. - n = struct.unpack("L", struct.pack("l", n))[0] - - s = bytearray() - for i in range(digits - 1): - s.insert(0, n & 0o377) - n >>= 8 - s.insert(0, 0o200) - return s - -def calc_chksums(buf): - """Calculate the checksum for a member's header by summing up all - characters except for the chksum field which is treated as if - it was filled with spaces. According to the GNU tar sources, - some tars (Sun and NeXT) calculate chksum with signed char, - which will be different if there are chars in the buffer with - the high bit set. So we calculate two checksums, unsigned and - signed. - """ - unsigned_chksum = 256 + sum(struct.unpack("148B", buf[:148]) + struct.unpack("356B", buf[156:512])) - signed_chksum = 256 + sum(struct.unpack("148b", buf[:148]) + struct.unpack("356b", buf[156:512])) - return unsigned_chksum, signed_chksum - -def copyfileobj(src, dst, length=None): - """Copy length bytes from fileobj src to fileobj dst. - If length is None, copy the entire content. - """ - if length == 0: - return - if length is None: - while True: - buf = src.read(16*1024) - if not buf: - break - dst.write(buf) - return - - BUFSIZE = 16 * 1024 - blocks, remainder = divmod(length, BUFSIZE) - for b in range(blocks): - buf = src.read(BUFSIZE) - if len(buf) < BUFSIZE: - raise IOError("end of file reached") - dst.write(buf) - - if remainder != 0: - buf = src.read(remainder) - if len(buf) < remainder: - raise IOError("end of file reached") - dst.write(buf) - return - -filemode_table = ( - ((S_IFLNK, "l"), - (S_IFREG, "-"), - (S_IFBLK, "b"), - (S_IFDIR, "d"), - (S_IFCHR, "c"), - (S_IFIFO, "p")), - - ((TUREAD, "r"),), - ((TUWRITE, "w"),), - ((TUEXEC|TSUID, "s"), - (TSUID, "S"), - (TUEXEC, "x")), - - ((TGREAD, "r"),), - ((TGWRITE, "w"),), - ((TGEXEC|TSGID, "s"), - (TSGID, "S"), - (TGEXEC, "x")), - - ((TOREAD, "r"),), - ((TOWRITE, "w"),), - ((TOEXEC|TSVTX, "t"), - (TSVTX, "T"), - (TOEXEC, "x")) -) - -def filemode(mode): - """Convert a file's mode to a string of the form - -rwxrwxrwx. - Used by TarFile.list() - """ - perm = [] - for table in filemode_table: - for bit, char in table: - if mode & bit == bit: - perm.append(char) - break - else: - perm.append("-") - return "".join(perm) - -class TarError(Exception): - """Base exception.""" - pass -class ExtractError(TarError): - """General exception for extract errors.""" - pass -class ReadError(TarError): - """Exception for unreadable tar archives.""" - pass -class CompressionError(TarError): - """Exception for unavailable compression methods.""" - pass -class StreamError(TarError): - """Exception for unsupported operations on stream-like TarFiles.""" - pass -class HeaderError(TarError): - """Base exception for header errors.""" - pass -class EmptyHeaderError(HeaderError): - """Exception for empty headers.""" - pass -class TruncatedHeaderError(HeaderError): - """Exception for truncated headers.""" - pass -class EOFHeaderError(HeaderError): - """Exception for end of file headers.""" - pass -class InvalidHeaderError(HeaderError): - """Exception for invalid headers.""" - pass -class SubsequentHeaderError(HeaderError): - """Exception for missing and invalid extended headers.""" - pass - -#--------------------------- -# internal stream interface -#--------------------------- -class _LowLevelFile(object): - """Low-level file object. Supports reading and writing. - It is used instead of a regular file object for streaming - access. - """ - - def __init__(self, name, mode): - mode = { - "r": os.O_RDONLY, - "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, - }[mode] - if hasattr(os, "O_BINARY"): - mode |= os.O_BINARY - self.fd = os.open(name, mode, 0o666) - - def close(self): - os.close(self.fd) - - def read(self, size): - return os.read(self.fd, size) - - def write(self, s): - os.write(self.fd, s) - -class _Stream(object): - """Class that serves as an adapter between TarFile and - a stream-like object. The stream-like object only - needs to have a read() or write() method and is accessed - blockwise. Use of gzip or bzip2 compression is possible. - A stream-like object could be for example: sys.stdin, - sys.stdout, a socket, a tape device etc. - - _Stream is intended to be used only internally. - """ - - def __init__(self, name, mode, comptype, fileobj, bufsize): - """Construct a _Stream object. - """ - self._extfileobj = True - if fileobj is None: - fileobj = _LowLevelFile(name, mode) - self._extfileobj = False - - if comptype == '*': - # Enable transparent compression detection for the - # stream interface - fileobj = _StreamProxy(fileobj) - comptype = fileobj.getcomptype() - - self.name = name or "" - self.mode = mode - self.comptype = comptype - self.fileobj = fileobj - self.bufsize = bufsize - self.buf = b"" - self.pos = 0 - self.closed = False - - try: - if comptype == "gz": - try: - import zlib - except ImportError: - raise CompressionError("zlib module is not available") - self.zlib = zlib - self.crc = zlib.crc32(b"") - if mode == "r": - self._init_read_gz() - else: - self._init_write_gz() - - if comptype == "bz2": - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") - if mode == "r": - self.dbuf = b"" - self.cmp = bz2.BZ2Decompressor() - else: - self.cmp = bz2.BZ2Compressor() - except: - if not self._extfileobj: - self.fileobj.close() - self.closed = True - raise - - def __del__(self): - if hasattr(self, "closed") and not self.closed: - self.close() - - def _init_write_gz(self): - """Initialize for writing with gzip compression. - """ - self.cmp = self.zlib.compressobj(9, self.zlib.DEFLATED, - -self.zlib.MAX_WBITS, - self.zlib.DEF_MEM_LEVEL, - 0) - timestamp = struct.pack("<L", int(time.time())) - self.__write(b"\037\213\010\010" + timestamp + b"\002\377") - if self.name.endswith(".gz"): - self.name = self.name[:-3] - # RFC1952 says we must use ISO-8859-1 for the FNAME field. - self.__write(self.name.encode("iso-8859-1", "replace") + NUL) - - def write(self, s): - """Write string s to the stream. - """ - if self.comptype == "gz": - self.crc = self.zlib.crc32(s, self.crc) - self.pos += len(s) - if self.comptype != "tar": - s = self.cmp.compress(s) - self.__write(s) - - def __write(self, s): - """Write string s to the stream if a whole new block - is ready to be written. - """ - self.buf += s - while len(self.buf) > self.bufsize: - self.fileobj.write(self.buf[:self.bufsize]) - self.buf = self.buf[self.bufsize:] - - def close(self): - """Close the _Stream object. No operation should be - done on it afterwards. - """ - if self.closed: - return - - if self.mode == "w" and self.comptype != "tar": - self.buf += self.cmp.flush() - - if self.mode == "w" and self.buf: - self.fileobj.write(self.buf) - self.buf = b"" - if self.comptype == "gz": - # The native zlib crc is an unsigned 32-bit integer, but - # the Python wrapper implicitly casts that to a signed C - # long. So, on a 32-bit box self.crc may "look negative", - # while the same crc on a 64-bit box may "look positive". - # To avoid irksome warnings from the `struct` module, force - # it to look positive on all boxes. - self.fileobj.write(struct.pack("<L", self.crc & 0xffffffff)) - self.fileobj.write(struct.pack("<L", self.pos & 0xffffFFFF)) - - if not self._extfileobj: - self.fileobj.close() - - self.closed = True - - def _init_read_gz(self): - """Initialize for reading a gzip compressed fileobj. - """ - self.cmp = self.zlib.decompressobj(-self.zlib.MAX_WBITS) - self.dbuf = b"" - - # taken from gzip.GzipFile with some alterations - if self.__read(2) != b"\037\213": - raise ReadError("not a gzip file") - if self.__read(1) != b"\010": - raise CompressionError("unsupported compression method") - - flag = ord(self.__read(1)) - self.__read(6) - - if flag & 4: - xlen = ord(self.__read(1)) + 256 * ord(self.__read(1)) - self.read(xlen) - if flag & 8: - while True: - s = self.__read(1) - if not s or s == NUL: - break - if flag & 16: - while True: - s = self.__read(1) - if not s or s == NUL: - break - if flag & 2: - self.__read(2) - - def tell(self): - """Return the stream's file pointer position. - """ - return self.pos - - def seek(self, pos=0): - """Set the stream's file pointer to pos. Negative seeking - is forbidden. - """ - if pos - self.pos >= 0: - blocks, remainder = divmod(pos - self.pos, self.bufsize) - for i in range(blocks): - self.read(self.bufsize) - self.read(remainder) - else: - raise StreamError("seeking backwards is not allowed") - return self.pos - - def read(self, size=None): - """Return the next size number of bytes from the stream. - If size is not defined, return all bytes of the stream - up to EOF. - """ - if size is None: - t = [] - while True: - buf = self._read(self.bufsize) - if not buf: - break - t.append(buf) - buf = "".join(t) - else: - buf = self._read(size) - self.pos += len(buf) - return buf - - def _read(self, size): - """Return size bytes from the stream. - """ - if self.comptype == "tar": - return self.__read(size) - - c = len(self.dbuf) - while c < size: - buf = self.__read(self.bufsize) - if not buf: - break - try: - buf = self.cmp.decompress(buf) - except IOError: - raise ReadError("invalid compressed data") - self.dbuf += buf - c += len(buf) - buf = self.dbuf[:size] - self.dbuf = self.dbuf[size:] - return buf - - def __read(self, size): - """Return size bytes from stream. If internal buffer is empty, - read another block from the stream. - """ - c = len(self.buf) - while c < size: - buf = self.fileobj.read(self.bufsize) - if not buf: - break - self.buf += buf - c += len(buf) - buf = self.buf[:size] - self.buf = self.buf[size:] - return buf -# class _Stream - -class _StreamProxy(object): - """Small proxy class that enables transparent compression - detection for the Stream interface (mode 'r|*'). - """ - - def __init__(self, fileobj): - self.fileobj = fileobj - self.buf = self.fileobj.read(BLOCKSIZE) - - def read(self, size): - self.read = self.fileobj.read - return self.buf - - def getcomptype(self): - if self.buf.startswith(b"\037\213\010"): - return "gz" - if self.buf.startswith(b"BZh91"): - return "bz2" - return "tar" - - def close(self): - self.fileobj.close() -# class StreamProxy - -class _BZ2Proxy(object): - """Small proxy class that enables external file object - support for "r:bz2" and "w:bz2" modes. This is actually - a workaround for a limitation in bz2 module's BZ2File - class which (unlike gzip.GzipFile) has no support for - a file object argument. - """ - - blocksize = 16 * 1024 - - def __init__(self, fileobj, mode): - self.fileobj = fileobj - self.mode = mode - self.name = getattr(self.fileobj, "name", None) - self.init() - - def init(self): - import bz2 - self.pos = 0 - if self.mode == "r": - self.bz2obj = bz2.BZ2Decompressor() - self.fileobj.seek(0) - self.buf = b"" - else: - self.bz2obj = bz2.BZ2Compressor() - - def read(self, size): - x = len(self.buf) - while x < size: - raw = self.fileobj.read(self.blocksize) - if not raw: - break - data = self.bz2obj.decompress(raw) - self.buf += data - x += len(data) - - buf = self.buf[:size] - self.buf = self.buf[size:] - self.pos += len(buf) - return buf - - def seek(self, pos): - if pos < self.pos: - self.init() - self.read(pos - self.pos) - - def tell(self): - return self.pos - - def write(self, data): - self.pos += len(data) - raw = self.bz2obj.compress(data) - self.fileobj.write(raw) - - def close(self): - if self.mode == "w": - raw = self.bz2obj.flush() - self.fileobj.write(raw) -# class _BZ2Proxy - -#------------------------ -# Extraction file object -#------------------------ -class _FileInFile(object): - """A thin wrapper around an existing file object that - provides a part of its data as an individual file - object. - """ - - def __init__(self, fileobj, offset, size, blockinfo=None): - self.fileobj = fileobj - self.offset = offset - self.size = size - self.position = 0 - - if blockinfo is None: - blockinfo = [(0, size)] - - # Construct a map with data and zero blocks. - self.map_index = 0 - self.map = [] - lastpos = 0 - realpos = self.offset - for offset, size in blockinfo: - if offset > lastpos: - self.map.append((False, lastpos, offset, None)) - self.map.append((True, offset, offset + size, realpos)) - realpos += size - lastpos = offset + size - if lastpos < self.size: - self.map.append((False, lastpos, self.size, None)) - - def seekable(self): - if not hasattr(self.fileobj, "seekable"): - # XXX gzip.GzipFile and bz2.BZ2File - return True - return self.fileobj.seekable() - - def tell(self): - """Return the current file position. - """ - return self.position - - def seek(self, position): - """Seek to a position in the file. - """ - self.position = position - - def read(self, size=None): - """Read data from the file. - """ - if size is None: - size = self.size - self.position - else: - size = min(size, self.size - self.position) - - buf = b"" - while size > 0: - while True: - data, start, stop, offset = self.map[self.map_index] - if start <= self.position < stop: - break - else: - self.map_index += 1 - if self.map_index == len(self.map): - self.map_index = 0 - length = min(size, stop - self.position) - if data: - self.fileobj.seek(offset + (self.position - start)) - buf += self.fileobj.read(length) - else: - buf += NUL * length - size -= length - self.position += length - return buf -#class _FileInFile - - -class ExFileObject(object): - """File-like object for reading an archive member. - Is returned by TarFile.extractfile(). - """ - blocksize = 1024 - - def __init__(self, tarfile, tarinfo): - self.fileobj = _FileInFile(tarfile.fileobj, - tarinfo.offset_data, - tarinfo.size, - tarinfo.sparse) - self.name = tarinfo.name - self.mode = "r" - self.closed = False - self.size = tarinfo.size - - self.position = 0 - self.buffer = b"" - - def readable(self): - return True - - def writable(self): - return False - - def seekable(self): - return self.fileobj.seekable() - - def read(self, size=None): - """Read at most size bytes from the file. If size is not - present or None, read all data until EOF is reached. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - buf = b"" - if self.buffer: - if size is None: - buf = self.buffer - self.buffer = b"" - else: - buf = self.buffer[:size] - self.buffer = self.buffer[size:] - - if size is None: - buf += self.fileobj.read() - else: - buf += self.fileobj.read(size - len(buf)) - - self.position += len(buf) - return buf - - # XXX TextIOWrapper uses the read1() method. - read1 = read - - def readline(self, size=-1): - """Read one entire line from the file. If size is present - and non-negative, return a string with at most that - size, which may be an incomplete line. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - pos = self.buffer.find(b"\n") + 1 - if pos == 0: - # no newline found. - while True: - buf = self.fileobj.read(self.blocksize) - self.buffer += buf - if not buf or b"\n" in buf: - pos = self.buffer.find(b"\n") + 1 - if pos == 0: - # no newline found. - pos = len(self.buffer) - break - - if size != -1: - pos = min(size, pos) - - buf = self.buffer[:pos] - self.buffer = self.buffer[pos:] - self.position += len(buf) - return buf - - def readlines(self): - """Return a list with all remaining lines. - """ - result = [] - while True: - line = self.readline() - if not line: break - result.append(line) - return result - - def tell(self): - """Return the current file position. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - return self.position - - def seek(self, pos, whence=os.SEEK_SET): - """Seek to a position in the file. - """ - if self.closed: - raise ValueError("I/O operation on closed file") - - if whence == os.SEEK_SET: - self.position = min(max(pos, 0), self.size) - elif whence == os.SEEK_CUR: - if pos < 0: - self.position = max(self.position + pos, 0) - else: - self.position = min(self.position + pos, self.size) - elif whence == os.SEEK_END: - self.position = max(min(self.size + pos, self.size), 0) - else: - raise ValueError("Invalid argument") - - self.buffer = b"" - self.fileobj.seek(self.position) - - def close(self): - """Close the file object. - """ - self.closed = True - - def __iter__(self): - """Get an iterator over the file's lines. - """ - while True: - line = self.readline() - if not line: - break - yield line -#class ExFileObject - -#------------------ -# Exported Classes -#------------------ -class TarInfo(object): - """Informational class which holds the details about an - archive member given by a tar header block. - TarInfo objects are returned by TarFile.getmember(), - TarFile.getmembers() and TarFile.gettarinfo() and are - usually created internally. - """ - - __slots__ = ("name", "mode", "uid", "gid", "size", "mtime", - "chksum", "type", "linkname", "uname", "gname", - "devmajor", "devminor", - "offset", "offset_data", "pax_headers", "sparse", - "tarfile", "_sparse_structs", "_link_target") - - def __init__(self, name=""): - """Construct a TarInfo object. name is the optional name - of the member. - """ - self.name = name # member name - self.mode = 0o644 # file permissions - self.uid = 0 # user id - self.gid = 0 # group id - self.size = 0 # file size - self.mtime = 0 # modification time - self.chksum = 0 # header checksum - self.type = REGTYPE # member type - self.linkname = "" # link name - self.uname = "" # user name - self.gname = "" # group name - self.devmajor = 0 # device major number - self.devminor = 0 # device minor number - - self.offset = 0 # the tar header starts here - self.offset_data = 0 # the file's data starts here - - self.sparse = None # sparse member information - self.pax_headers = {} # pax header information - - # In pax headers the "name" and "linkname" field are called - # "path" and "linkpath". - def _getpath(self): - return self.name - def _setpath(self, name): - self.name = name - path = property(_getpath, _setpath) - - def _getlinkpath(self): - return self.linkname - def _setlinkpath(self, linkname): - self.linkname = linkname - linkpath = property(_getlinkpath, _setlinkpath) - - def __repr__(self): - return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) - - def get_info(self): - """Return the TarInfo's attributes as a dictionary. - """ - info = { - "name": self.name, - "mode": self.mode & 0o7777, - "uid": self.uid, - "gid": self.gid, - "size": self.size, - "mtime": self.mtime, - "chksum": self.chksum, - "type": self.type, - "linkname": self.linkname, - "uname": self.uname, - "gname": self.gname, - "devmajor": self.devmajor, - "devminor": self.devminor - } - - if info["type"] == DIRTYPE and not info["name"].endswith("/"): - info["name"] += "/" - - return info - - def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): - """Return a tar header as a string of 512 byte blocks. - """ - info = self.get_info() - - if format == USTAR_FORMAT: - return self.create_ustar_header(info, encoding, errors) - elif format == GNU_FORMAT: - return self.create_gnu_header(info, encoding, errors) - elif format == PAX_FORMAT: - return self.create_pax_header(info, encoding) - else: - raise ValueError("invalid format") - - def create_ustar_header(self, info, encoding, errors): - """Return the object as a ustar header block. - """ - info["magic"] = POSIX_MAGIC - - if len(info["linkname"]) > LENGTH_LINK: - raise ValueError("linkname is too long") - - if len(info["name"]) > LENGTH_NAME: - info["prefix"], info["name"] = self._posix_split_name(info["name"]) - - return self._create_header(info, USTAR_FORMAT, encoding, errors) - - def create_gnu_header(self, info, encoding, errors): - """Return the object as a GNU header block sequence. - """ - info["magic"] = GNU_MAGIC - - buf = b"" - if len(info["linkname"]) > LENGTH_LINK: - buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) - - if len(info["name"]) > LENGTH_NAME: - buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) - - return buf + self._create_header(info, GNU_FORMAT, encoding, errors) - - def create_pax_header(self, info, encoding): - """Return the object as a ustar header block. If it cannot be - represented this way, prepend a pax extended header sequence - with supplement information. - """ - info["magic"] = POSIX_MAGIC - pax_headers = self.pax_headers.copy() - - # Test string fields for values that exceed the field length or cannot - # be represented in ASCII encoding. - for name, hname, length in ( - ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), - ("uname", "uname", 32), ("gname", "gname", 32)): - - if hname in pax_headers: - # The pax header has priority. - continue - - # Try to encode the string as ASCII. - try: - info[name].encode("ascii", "strict") - except UnicodeEncodeError: - pax_headers[hname] = info[name] - continue - - if len(info[name]) > length: - pax_headers[hname] = info[name] - - # Test number fields for values that exceed the field limit or values - # that like to be stored as float. - for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): - if name in pax_headers: - # The pax header has priority. Avoid overflow. - info[name] = 0 - continue - - val = info[name] - if not 0 <= val < 8 ** (digits - 1) or isinstance(val, float): - pax_headers[name] = str(val) - info[name] = 0 - - # Create a pax extended header if necessary. - if pax_headers: - buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) - else: - buf = b"" - - return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") - - @classmethod - def create_pax_global_header(cls, pax_headers): - """Return the object as a pax global header block sequence. - """ - return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf8") - - def _posix_split_name(self, name): - """Split a name longer than 100 chars into a prefix - and a name part. - """ - prefix = name[:LENGTH_PREFIX + 1] - while prefix and prefix[-1] != "/": - prefix = prefix[:-1] - - name = name[len(prefix):] - prefix = prefix[:-1] - - if not prefix or len(name) > LENGTH_NAME: - raise ValueError("name is too long") - return prefix, name - - @staticmethod - def _create_header(info, format, encoding, errors): - """Return a header block. info is a dictionary with file - information, format must be one of the *_FORMAT constants. - """ - parts = [ - stn(info.get("name", ""), 100, encoding, errors), - itn(info.get("mode", 0) & 0o7777, 8, format), - itn(info.get("uid", 0), 8, format), - itn(info.get("gid", 0), 8, format), - itn(info.get("size", 0), 12, format), - itn(info.get("mtime", 0), 12, format), - b" ", # checksum field - info.get("type", REGTYPE), - stn(info.get("linkname", ""), 100, encoding, errors), - info.get("magic", POSIX_MAGIC), - stn(info.get("uname", ""), 32, encoding, errors), - stn(info.get("gname", ""), 32, encoding, errors), - itn(info.get("devmajor", 0), 8, format), - itn(info.get("devminor", 0), 8, format), - stn(info.get("prefix", ""), 155, encoding, errors) - ] - - buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) - chksum = calc_chksums(buf[-BLOCKSIZE:])[0] - buf = buf[:-364] + ("%06o\0" % chksum).encode("ascii") + buf[-357:] - return buf - - @staticmethod - def _create_payload(payload): - """Return the string payload filled with zero bytes - up to the next 512 byte border. - """ - blocks, remainder = divmod(len(payload), BLOCKSIZE) - if remainder > 0: - payload += (BLOCKSIZE - remainder) * NUL - return payload - - @classmethod - def _create_gnu_long_header(cls, name, type, encoding, errors): - """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence - for name. - """ - name = name.encode(encoding, errors) + NUL - - info = {} - info["name"] = "././@LongLink" - info["type"] = type - info["size"] = len(name) - info["magic"] = GNU_MAGIC - - # create extended header + name blocks. - return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ - cls._create_payload(name) - - @classmethod - def _create_pax_generic_header(cls, pax_headers, type, encoding): - """Return a POSIX.1-2008 extended or global header sequence - that contains a list of keyword, value pairs. The values - must be strings. - """ - # Check if one of the fields contains surrogate characters and thereby - # forces hdrcharset=BINARY, see _proc_pax() for more information. - binary = False - for keyword, value in pax_headers.items(): - try: - value.encode("utf8", "strict") - except UnicodeEncodeError: - binary = True - break - - records = b"" - if binary: - # Put the hdrcharset field at the beginning of the header. - records += b"21 hdrcharset=BINARY\n" - - for keyword, value in pax_headers.items(): - keyword = keyword.encode("utf8") - if binary: - # Try to restore the original byte representation of `value'. - # Needless to say, that the encoding must match the string. - value = value.encode(encoding, "surrogateescape") - else: - value = value.encode("utf8") - - l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' - n = p = 0 - while True: - n = l + len(str(p)) - if n == p: - break - p = n - records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" - - # We use a hardcoded "././@PaxHeader" name like star does - # instead of the one that POSIX recommends. - info = {} - info["name"] = "././@PaxHeader" - info["type"] = type - info["size"] = len(records) - info["magic"] = POSIX_MAGIC - - # Create pax header + record blocks. - return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ - cls._create_payload(records) - - @classmethod - def frombuf(cls, buf, encoding, errors): - """Construct a TarInfo object from a 512 byte bytes object. - """ - if len(buf) == 0: - raise EmptyHeaderError("empty header") - if len(buf) != BLOCKSIZE: - raise TruncatedHeaderError("truncated header") - if buf.count(NUL) == BLOCKSIZE: - raise EOFHeaderError("end of file header") - - chksum = nti(buf[148:156]) - if chksum not in calc_chksums(buf): - raise InvalidHeaderError("bad checksum") - - obj = cls() - obj.name = nts(buf[0:100], encoding, errors) - obj.mode = nti(buf[100:108]) - obj.uid = nti(buf[108:116]) - obj.gid = nti(buf[116:124]) - obj.size = nti(buf[124:136]) - obj.mtime = nti(buf[136:148]) - obj.chksum = chksum - obj.type = buf[156:157] - obj.linkname = nts(buf[157:257], encoding, errors) - obj.uname = nts(buf[265:297], encoding, errors) - obj.gname = nts(buf[297:329], encoding, errors) - obj.devmajor = nti(buf[329:337]) - obj.devminor = nti(buf[337:345]) - prefix = nts(buf[345:500], encoding, errors) - - # Old V7 tar format represents a directory as a regular - # file with a trailing slash. - if obj.type == AREGTYPE and obj.name.endswith("/"): - obj.type = DIRTYPE - - # The old GNU sparse format occupies some of the unused - # space in the buffer for up to 4 sparse structures. - # Save the them for later processing in _proc_sparse(). - if obj.type == GNUTYPE_SPARSE: - pos = 386 - structs = [] - for i in range(4): - try: - offset = nti(buf[pos:pos + 12]) - numbytes = nti(buf[pos + 12:pos + 24]) - except ValueError: - break - structs.append((offset, numbytes)) - pos += 24 - isextended = bool(buf[482]) - origsize = nti(buf[483:495]) - obj._sparse_structs = (structs, isextended, origsize) - - # Remove redundant slashes from directories. - if obj.isdir(): - obj.name = obj.name.rstrip("/") - - # Reconstruct a ustar longname. - if prefix and obj.type not in GNU_TYPES: - obj.name = prefix + "/" + obj.name - return obj - - @classmethod - def fromtarfile(cls, tarfile): - """Return the next TarInfo object from TarFile object - tarfile. - """ - buf = tarfile.fileobj.read(BLOCKSIZE) - obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) - obj.offset = tarfile.fileobj.tell() - BLOCKSIZE - return obj._proc_member(tarfile) - - #-------------------------------------------------------------------------- - # The following are methods that are called depending on the type of a - # member. The entry point is _proc_member() which can be overridden in a - # subclass to add custom _proc_*() methods. A _proc_*() method MUST - # implement the following - # operations: - # 1. Set self.offset_data to the position where the data blocks begin, - # if there is data that follows. - # 2. Set tarfile.offset to the position where the next member's header will - # begin. - # 3. Return self or another valid TarInfo object. - def _proc_member(self, tarfile): - """Choose the right processing method depending on - the type and call it. - """ - if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): - return self._proc_gnulong(tarfile) - elif self.type == GNUTYPE_SPARSE: - return self._proc_sparse(tarfile) - elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): - return self._proc_pax(tarfile) - else: - return self._proc_builtin(tarfile) - - def _proc_builtin(self, tarfile): - """Process a builtin type or an unknown type which - will be treated as a regular file. - """ - self.offset_data = tarfile.fileobj.tell() - offset = self.offset_data - if self.isreg() or self.type not in SUPPORTED_TYPES: - # Skip the following data blocks. - offset += self._block(self.size) - tarfile.offset = offset - - # Patch the TarInfo object with saved global - # header information. - self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) - - return self - - def _proc_gnulong(self, tarfile): - """Process the blocks that hold a GNU longname - or longlink member. - """ - buf = tarfile.fileobj.read(self._block(self.size)) - - # Fetch the next header and process it. - try: - next = self.fromtarfile(tarfile) - except HeaderError: - raise SubsequentHeaderError("missing or bad subsequent header") - - # Patch the TarInfo object from the next header with - # the longname information. - next.offset = self.offset - if self.type == GNUTYPE_LONGNAME: - next.name = nts(buf, tarfile.encoding, tarfile.errors) - elif self.type == GNUTYPE_LONGLINK: - next.linkname = nts(buf, tarfile.encoding, tarfile.errors) - - return next - - def _proc_sparse(self, tarfile): - """Process a GNU sparse header plus extra headers. - """ - # We already collected some sparse structures in frombuf(). - structs, isextended, origsize = self._sparse_structs - del self._sparse_structs - - # Collect sparse structures from extended header blocks. - while isextended: - buf = tarfile.fileobj.read(BLOCKSIZE) - pos = 0 - for i in range(21): - try: - offset = nti(buf[pos:pos + 12]) - numbytes = nti(buf[pos + 12:pos + 24]) - except ValueError: - break - if offset and numbytes: - structs.append((offset, numbytes)) - pos += 24 - isextended = bool(buf[504]) - self.sparse = structs - - self.offset_data = tarfile.fileobj.tell() - tarfile.offset = self.offset_data + self._block(self.size) - self.size = origsize - return self - - def _proc_pax(self, tarfile): - """Process an extended or global header as described in - POSIX.1-2008. - """ - # Read the header information. - buf = tarfile.fileobj.read(self._block(self.size)) - - # A pax header stores supplemental information for either - # the following file (extended) or all following files - # (global). - if self.type == XGLTYPE: - pax_headers = tarfile.pax_headers - else: - pax_headers = tarfile.pax_headers.copy() - - # Check if the pax header contains a hdrcharset field. This tells us - # the encoding of the path, linkpath, uname and gname fields. Normally, - # these fields are UTF-8 encoded but since POSIX.1-2008 tar - # implementations are allowed to store them as raw binary strings if - # the translation to UTF-8 fails. - match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) - if match is not None: - pax_headers["hdrcharset"] = match.group(1).decode("utf8") - - # For the time being, we don't care about anything other than "BINARY". - # The only other value that is currently allowed by the standard is - # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. - hdrcharset = pax_headers.get("hdrcharset") - if hdrcharset == "BINARY": - encoding = tarfile.encoding - else: - encoding = "utf8" - - # Parse pax header information. A record looks like that: - # "%d %s=%s\n" % (length, keyword, value). length is the size - # of the complete record including the length field itself and - # the newline. keyword and value are both UTF-8 encoded strings. - regex = re.compile(br"(\d+) ([^=]+)=") - pos = 0 - while True: - match = regex.match(buf, pos) - if not match: - break - - length, keyword = match.groups() - length = int(length) - value = buf[match.end(2) + 1:match.start(1) + length - 1] - - # Normally, we could just use "utf8" as the encoding and "strict" - # as the error handler, but we better not take the risk. For - # example, GNU tar <= 1.23 is known to store filenames it cannot - # translate to UTF-8 as raw strings (unfortunately without a - # hdrcharset=BINARY header). - # We first try the strict standard encoding, and if that fails we - # fall back on the user's encoding and error handler. - keyword = self._decode_pax_field(keyword, "utf8", "utf8", - tarfile.errors) - if keyword in PAX_NAME_FIELDS: - value = self._decode_pax_field(value, encoding, tarfile.encoding, - tarfile.errors) - else: - value = self._decode_pax_field(value, "utf8", "utf8", - tarfile.errors) - - pax_headers[keyword] = value - pos += length - - # Fetch the next header. - try: - next = self.fromtarfile(tarfile) - except HeaderError: - raise SubsequentHeaderError("missing or bad subsequent header") - - # Process GNU sparse information. - if "GNU.sparse.map" in pax_headers: - # GNU extended sparse format version 0.1. - self._proc_gnusparse_01(next, pax_headers) - - elif "GNU.sparse.size" in pax_headers: - # GNU extended sparse format version 0.0. - self._proc_gnusparse_00(next, pax_headers, buf) - - elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": - # GNU extended sparse format version 1.0. - self._proc_gnusparse_10(next, pax_headers, tarfile) - - if self.type in (XHDTYPE, SOLARIS_XHDTYPE): - # Patch the TarInfo object with the extended header info. - next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) - next.offset = self.offset - - if "size" in pax_headers: - # If the extended header replaces the size field, - # we need to recalculate the offset where the next - # header starts. - offset = next.offset_data - if next.isreg() or next.type not in SUPPORTED_TYPES: - offset += next._block(next.size) - tarfile.offset = offset - - return next - - def _proc_gnusparse_00(self, next, pax_headers, buf): - """Process a GNU tar extended sparse header, version 0.0. - """ - offsets = [] - for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): - offsets.append(int(match.group(1))) - numbytes = [] - for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): - numbytes.append(int(match.group(1))) - next.sparse = list(zip(offsets, numbytes)) - - def _proc_gnusparse_01(self, next, pax_headers): - """Process a GNU tar extended sparse header, version 0.1. - """ - sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] - next.sparse = list(zip(sparse[::2], sparse[1::2])) - - def _proc_gnusparse_10(self, next, pax_headers, tarfile): - """Process a GNU tar extended sparse header, version 1.0. - """ - fields = None - sparse = [] - buf = tarfile.fileobj.read(BLOCKSIZE) - fields, buf = buf.split(b"\n", 1) - fields = int(fields) - while len(sparse) < fields * 2: - if b"\n" not in buf: - buf += tarfile.fileobj.read(BLOCKSIZE) - number, buf = buf.split(b"\n", 1) - sparse.append(int(number)) - next.offset_data = tarfile.fileobj.tell() - next.sparse = list(zip(sparse[::2], sparse[1::2])) - - def _apply_pax_info(self, pax_headers, encoding, errors): - """Replace fields with supplemental information from a previous - pax extended or global header. - """ - for keyword, value in pax_headers.items(): - if keyword == "GNU.sparse.name": - setattr(self, "path", value) - elif keyword == "GNU.sparse.size": - setattr(self, "size", int(value)) - elif keyword == "GNU.sparse.realsize": - setattr(self, "size", int(value)) - elif keyword in PAX_FIELDS: - if keyword in PAX_NUMBER_FIELDS: - try: - value = PAX_NUMBER_FIELDS[keyword](value) - except ValueError: - value = 0 - if keyword == "path": - value = value.rstrip("/") - setattr(self, keyword, value) - - self.pax_headers = pax_headers.copy() - - def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): - """Decode a single field from a pax record. - """ - try: - return value.decode(encoding, "strict") - except UnicodeDecodeError: - return value.decode(fallback_encoding, fallback_errors) - - def _block(self, count): - """Round up a byte count by BLOCKSIZE and return it, - e.g. _block(834) => 1024. - """ - blocks, remainder = divmod(count, BLOCKSIZE) - if remainder: - blocks += 1 - return blocks * BLOCKSIZE - - def isreg(self): - return self.type in REGULAR_TYPES - def isfile(self): - return self.isreg() - def isdir(self): - return self.type == DIRTYPE - def issym(self): - return self.type == SYMTYPE - def islnk(self): - return self.type == LNKTYPE - def ischr(self): - return self.type == CHRTYPE - def isblk(self): - return self.type == BLKTYPE - def isfifo(self): - return self.type == FIFOTYPE - def issparse(self): - return self.sparse is not None - def isdev(self): - return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) -# class TarInfo - -class TarFile(object): - """The TarFile Class provides an interface to tar archives. - """ - - debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) - - dereference = False # If true, add content of linked file to the - # tar file, else the link. - - ignore_zeros = False # If true, skips empty or invalid blocks and - # continues processing. - - errorlevel = 1 # If 0, fatal errors only appear in debug - # messages (if debug >= 0). If > 0, errors - # are passed to the caller as exceptions. - - format = DEFAULT_FORMAT # The format to use when creating an archive. - - encoding = ENCODING # Encoding for 8-bit character strings. - - errors = None # Error handler for unicode conversion. - - tarinfo = TarInfo # The default TarInfo class to use. - - fileobject = ExFileObject # The default ExFileObject class to use. - - def __init__(self, name=None, mode="r", fileobj=None, format=None, - tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, - errors="surrogateescape", pax_headers=None, debug=None, errorlevel=None): - """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to - read from an existing archive, 'a' to append data to an existing - file or 'w' to create a new file overwriting an existing one. `mode' - defaults to 'r'. - If `fileobj' is given, it is used for reading or writing data. If it - can be determined, `mode' is overridden by `fileobj's mode. - `fileobj' is not closed, when TarFile is closed. - """ - if len(mode) > 1 or mode not in "raw": - raise ValueError("mode must be 'r', 'a' or 'w'") - self.mode = mode - self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] - - if not fileobj: - if self.mode == "a" and not os.path.exists(name): - # Create nonexistent files in append mode. - self.mode = "w" - self._mode = "wb" - fileobj = bltn_open(name, self._mode) - self._extfileobj = False - else: - if name is None and hasattr(fileobj, "name"): - name = fileobj.name - if hasattr(fileobj, "mode"): - self._mode = fileobj.mode - self._extfileobj = True - self.name = os.path.abspath(name) if name else None - self.fileobj = fileobj - - # Init attributes. - if format is not None: - self.format = format - if tarinfo is not None: - self.tarinfo = tarinfo - if dereference is not None: - self.dereference = dereference - if ignore_zeros is not None: - self.ignore_zeros = ignore_zeros - if encoding is not None: - self.encoding = encoding - self.errors = errors - - if pax_headers is not None and self.format == PAX_FORMAT: - self.pax_headers = pax_headers - else: - self.pax_headers = {} - - if debug is not None: - self.debug = debug - if errorlevel is not None: - self.errorlevel = errorlevel - - # Init datastructures. - self.closed = False - self.members = [] # list of members as TarInfo objects - self._loaded = False # flag if all members have been read - self.offset = self.fileobj.tell() - # current position in the archive file - self.inodes = {} # dictionary caching the inodes of - # archive members already added - - try: - if self.mode == "r": - self.firstmember = None - self.firstmember = self.next() - - if self.mode == "a": - # Move to the end of the archive, - # before the first empty block. - while True: - self.fileobj.seek(self.offset) - try: - tarinfo = self.tarinfo.fromtarfile(self) - self.members.append(tarinfo) - except EOFHeaderError: - self.fileobj.seek(self.offset) - break - except HeaderError as e: - raise ReadError(str(e)) - - if self.mode in "aw": - self._loaded = True - - if self.pax_headers: - buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) - self.fileobj.write(buf) - self.offset += len(buf) - except: - if not self._extfileobj: - self.fileobj.close() - self.closed = True - raise - - #-------------------------------------------------------------------------- - # Below are the classmethods which act as alternate constructors to the - # TarFile class. The open() method is the only one that is needed for - # public use; it is the "super"-constructor and is able to select an - # adequate "sub"-constructor for a particular compression using the mapping - # from OPEN_METH. - # - # This concept allows one to subclass TarFile without losing the comfort of - # the super-constructor. A sub-constructor is registered and made available - # by adding it to the mapping in OPEN_METH. - - @classmethod - def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): - """Open a tar archive for reading, writing or appending. Return - an appropriate TarFile class. - - mode: - 'r' or 'r:*' open for reading with transparent compression - 'r:' open for reading exclusively uncompressed - 'r:gz' open for reading with gzip compression - 'r:bz2' open for reading with bzip2 compression - 'a' or 'a:' open for appending, creating the file if necessary - 'w' or 'w:' open for writing without compression - 'w:gz' open for writing with gzip compression - 'w:bz2' open for writing with bzip2 compression - - 'r|*' open a stream of tar blocks with transparent compression - 'r|' open an uncompressed stream of tar blocks for reading - 'r|gz' open a gzip compressed stream of tar blocks - 'r|bz2' open a bzip2 compressed stream of tar blocks - 'w|' open an uncompressed stream for writing - 'w|gz' open a gzip compressed stream for writing - 'w|bz2' open a bzip2 compressed stream for writing - """ - - if not name and not fileobj: - raise ValueError("nothing to open") - - if mode in ("r", "r:*"): - # Find out which *open() is appropriate for opening the file. - for comptype in cls.OPEN_METH: - func = getattr(cls, cls.OPEN_METH[comptype]) - if fileobj is not None: - saved_pos = fileobj.tell() - try: - return func(name, "r", fileobj, **kwargs) - except (ReadError, CompressionError) as e: - if fileobj is not None: - fileobj.seek(saved_pos) - continue - raise ReadError("file could not be opened successfully") - - elif ":" in mode: - filemode, comptype = mode.split(":", 1) - filemode = filemode or "r" - comptype = comptype or "tar" - - # Select the *open() function according to - # given compression. - if comptype in cls.OPEN_METH: - func = getattr(cls, cls.OPEN_METH[comptype]) - else: - raise CompressionError("unknown compression type %r" % comptype) - return func(name, filemode, fileobj, **kwargs) - - elif "|" in mode: - filemode, comptype = mode.split("|", 1) - filemode = filemode or "r" - comptype = comptype or "tar" - - if filemode not in "rw": - raise ValueError("mode must be 'r' or 'w'") - - stream = _Stream(name, filemode, comptype, fileobj, bufsize) - try: - t = cls(name, filemode, stream, **kwargs) - except: - stream.close() - raise - t._extfileobj = False - return t - - elif mode in "aw": - return cls.taropen(name, mode, fileobj, **kwargs) - - raise ValueError("undiscernible mode") - - @classmethod - def taropen(cls, name, mode="r", fileobj=None, **kwargs): - """Open uncompressed tar archive name for reading or writing. - """ - if len(mode) > 1 or mode not in "raw": - raise ValueError("mode must be 'r', 'a' or 'w'") - return cls(name, mode, fileobj, **kwargs) - - @classmethod - def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): - """Open gzip compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if len(mode) > 1 or mode not in "rw": - raise ValueError("mode must be 'r' or 'w'") - - try: - import gzip - gzip.GzipFile - except (ImportError, AttributeError): - raise CompressionError("gzip module is not available") - - extfileobj = fileobj is not None - try: - fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj) - t = cls.taropen(name, mode, fileobj, **kwargs) - except IOError: - if not extfileobj and fileobj is not None: - fileobj.close() - if fileobj is None: - raise - raise ReadError("not a gzip file") - except: - if not extfileobj and fileobj is not None: - fileobj.close() - raise - t._extfileobj = extfileobj - return t - - @classmethod - def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): - """Open bzip2 compressed tar archive name for reading or writing. - Appending is not allowed. - """ - if len(mode) > 1 or mode not in "rw": - raise ValueError("mode must be 'r' or 'w'.") - - try: - import bz2 - except ImportError: - raise CompressionError("bz2 module is not available") - - if fileobj is not None: - fileobj = _BZ2Proxy(fileobj, mode) - else: - fileobj = bz2.BZ2File(name, mode, compresslevel=compresslevel) - - try: - t = cls.taropen(name, mode, fileobj, **kwargs) - except (IOError, EOFError): - fileobj.close() - raise ReadError("not a bzip2 file") - t._extfileobj = False - return t - - # All *open() methods are registered here. - OPEN_METH = { - "tar": "taropen", # uncompressed tar - "gz": "gzopen", # gzip compressed tar - "bz2": "bz2open" # bzip2 compressed tar - } - - #-------------------------------------------------------------------------- - # The public methods which TarFile provides: - - def close(self): - """Close the TarFile. In write-mode, two finishing zero blocks are - appended to the archive. - """ - if self.closed: - return - - if self.mode in "aw": - self.fileobj.write(NUL * (BLOCKSIZE * 2)) - self.offset += (BLOCKSIZE * 2) - # fill up the end with zero-blocks - # (like option -b20 for tar does) - blocks, remainder = divmod(self.offset, RECORDSIZE) - if remainder > 0: - self.fileobj.write(NUL * (RECORDSIZE - remainder)) - - if not self._extfileobj: - self.fileobj.close() - self.closed = True - - def getmember(self, name): - """Return a TarInfo object for member `name'. If `name' can not be - found in the archive, KeyError is raised. If a member occurs more - than once in the archive, its last occurrence is assumed to be the - most up-to-date version. - """ - tarinfo = self._getmember(name) - if tarinfo is None: - raise KeyError("filename %r not found" % name) - return tarinfo - - def getmembers(self): - """Return the members of the archive as a list of TarInfo objects. The - list has the same order as the members in the archive. - """ - self._check() - if not self._loaded: # if we want to obtain a list of - self._load() # all members, we first have to - # scan the whole archive. - return self.members - - def getnames(self): - """Return the members of the archive as a list of their names. It has - the same order as the list returned by getmembers(). - """ - return [tarinfo.name for tarinfo in self.getmembers()] - - def gettarinfo(self, name=None, arcname=None, fileobj=None): - """Create a TarInfo object for either the file `name' or the file - object `fileobj' (using os.fstat on its file descriptor). You can - modify some of the TarInfo's attributes before you add it using - addfile(). If given, `arcname' specifies an alternative name for the - file in the archive. - """ - self._check("aw") - - # When fileobj is given, replace name by - # fileobj's real name. - if fileobj is not None: - name = fileobj.name - - # Building the name of the member in the archive. - # Backward slashes are converted to forward slashes, - # Absolute paths are turned to relative paths. - if arcname is None: - arcname = name - drv, arcname = os.path.splitdrive(arcname) - arcname = arcname.replace(os.sep, "/") - arcname = arcname.lstrip("/") - - # Now, fill the TarInfo object with - # information specific for the file. - tarinfo = self.tarinfo() - tarinfo.tarfile = self - - # Use os.stat or os.lstat, depending on platform - # and if symlinks shall be resolved. - if fileobj is None: - if hasattr(os, "lstat") and not self.dereference: - statres = os.lstat(name) - else: - statres = os.stat(name) - else: - statres = os.fstat(fileobj.fileno()) - linkname = "" - - stmd = statres.st_mode - if stat.S_ISREG(stmd): - inode = (statres.st_ino, statres.st_dev) - if not self.dereference and statres.st_nlink > 1 and \ - inode in self.inodes and arcname != self.inodes[inode]: - # Is it a hardlink to an already - # archived file? - type = LNKTYPE - linkname = self.inodes[inode] - else: - # The inode is added only if its valid. - # For win32 it is always 0. - type = REGTYPE - if inode[0]: - self.inodes[inode] = arcname - elif stat.S_ISDIR(stmd): - type = DIRTYPE - elif stat.S_ISFIFO(stmd): - type = FIFOTYPE - elif stat.S_ISLNK(stmd): - type = SYMTYPE - linkname = os.readlink(name) - elif stat.S_ISCHR(stmd): - type = CHRTYPE - elif stat.S_ISBLK(stmd): - type = BLKTYPE - else: - return None - - # Fill the TarInfo object with all - # information we can get. - tarinfo.name = arcname - tarinfo.mode = stmd - tarinfo.uid = statres.st_uid - tarinfo.gid = statres.st_gid - if type == REGTYPE: - tarinfo.size = statres.st_size - else: - tarinfo.size = 0 - tarinfo.mtime = statres.st_mtime - tarinfo.type = type - tarinfo.linkname = linkname - if pwd: - try: - tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] - except KeyError: - pass - if grp: - try: - tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] - except KeyError: - pass - - if type in (CHRTYPE, BLKTYPE): - if hasattr(os, "major") and hasattr(os, "minor"): - tarinfo.devmajor = os.major(statres.st_rdev) - tarinfo.devminor = os.minor(statres.st_rdev) - return tarinfo - - def list(self, verbose=True): - """Print a table of contents to sys.stdout. If `verbose' is False, only - the names of the members are printed. If it is True, an `ls -l'-like - output is produced. - """ - self._check() - - for tarinfo in self: - if verbose: - print(filemode(tarinfo.mode), end=' ') - print("%s/%s" % (tarinfo.uname or tarinfo.uid, - tarinfo.gname or tarinfo.gid), end=' ') - if tarinfo.ischr() or tarinfo.isblk(): - print("%10s" % ("%d,%d" \ - % (tarinfo.devmajor, tarinfo.devminor)), end=' ') - else: - print("%10d" % tarinfo.size, end=' ') - print("%d-%02d-%02d %02d:%02d:%02d" \ - % time.localtime(tarinfo.mtime)[:6], end=' ') - - print(tarinfo.name + ("/" if tarinfo.isdir() else ""), end=' ') - - if verbose: - if tarinfo.issym(): - print("->", tarinfo.linkname, end=' ') - if tarinfo.islnk(): - print("link to", tarinfo.linkname, end=' ') - print() - - def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): - """Add the file `name' to the archive. `name' may be any type of file - (directory, fifo, symbolic link, etc.). If given, `arcname' - specifies an alternative name for the file in the archive. - Directories are added recursively by default. This can be avoided by - setting `recursive' to False. `exclude' is a function that should - return True for each filename to be excluded. `filter' is a function - that expects a TarInfo object argument and returns the changed - TarInfo object, if it returns None the TarInfo object will be - excluded from the archive. - """ - self._check("aw") - - if arcname is None: - arcname = name - - # Exclude pathnames. - if exclude is not None: - import warnings - warnings.warn("use the filter argument instead", - DeprecationWarning, 2) - if exclude(name): - self._dbg(2, "tarfile: Excluded %r" % name) - return - - # Skip if somebody tries to archive the archive... - if self.name is not None and os.path.abspath(name) == self.name: - self._dbg(2, "tarfile: Skipped %r" % name) - return - - self._dbg(1, name) - - # Create a TarInfo object from the file. - tarinfo = self.gettarinfo(name, arcname) - - if tarinfo is None: - self._dbg(1, "tarfile: Unsupported type %r" % name) - return - - # Change or exclude the TarInfo object. - if filter is not None: - tarinfo = filter(tarinfo) - if tarinfo is None: - self._dbg(2, "tarfile: Excluded %r" % name) - return - - # Append the tar header and data to the archive. - if tarinfo.isreg(): - f = bltn_open(name, "rb") - self.addfile(tarinfo, f) - f.close() - - elif tarinfo.isdir(): - self.addfile(tarinfo) - if recursive: - for f in os.listdir(name): - self.add(os.path.join(name, f), os.path.join(arcname, f), - recursive, exclude, filter=filter) - - else: - self.addfile(tarinfo) - - def addfile(self, tarinfo, fileobj=None): - """Add the TarInfo object `tarinfo' to the archive. If `fileobj' is - given, tarinfo.size bytes are read from it and added to the archive. - You can create TarInfo objects using gettarinfo(). - On Windows platforms, `fileobj' should always be opened with mode - 'rb' to avoid irritation about the file size. - """ - self._check("aw") - - tarinfo = copy.copy(tarinfo) - - buf = tarinfo.tobuf(self.format, self.encoding, self.errors) - self.fileobj.write(buf) - self.offset += len(buf) - - # If there's data to follow, append it. - if fileobj is not None: - copyfileobj(fileobj, self.fileobj, tarinfo.size) - blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) - if remainder > 0: - self.fileobj.write(NUL * (BLOCKSIZE - remainder)) - blocks += 1 - self.offset += blocks * BLOCKSIZE - - self.members.append(tarinfo) - - def extractall(self, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). - """ - directories = [] - - if members is None: - members = self - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directories with a safe mode. - directories.append(tarinfo) - tarinfo = copy.copy(tarinfo) - tarinfo.mode = 0o700 - # Do not set_attrs directories, as we will do that further down - self.extract(tarinfo, path, set_attrs=not tarinfo.isdir()) - - # Reverse sort directories. - directories.sort(key=lambda a: a.name) - directories.reverse() - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - dirpath = os.path.join(path, tarinfo.name) - try: - self.chown(tarinfo, dirpath) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError as e: - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - def extract(self, member, path="", set_attrs=True): - """Extract a member from the archive to the current working directory, - using its full name. Its file information is extracted as accurately - as possible. `member' may be a filename or a TarInfo object. You can - specify a different directory using `path'. File attributes (owner, - mtime, mode) are set unless `set_attrs' is False. - """ - self._check("r") - - if isinstance(member, str): - tarinfo = self.getmember(member) - else: - tarinfo = member - - # Prepare the link target for makelink(). - if tarinfo.islnk(): - tarinfo._link_target = os.path.join(path, tarinfo.linkname) - - try: - self._extract_member(tarinfo, os.path.join(path, tarinfo.name), - set_attrs=set_attrs) - except EnvironmentError as e: - if self.errorlevel > 0: - raise - else: - if e.filename is None: - self._dbg(1, "tarfile: %s" % e.strerror) - else: - self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) - except ExtractError as e: - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - def extractfile(self, member): - """Extract a member from the archive as a file object. `member' may be - a filename or a TarInfo object. If `member' is a regular file, a - file-like object is returned. If `member' is a link, a file-like - object is constructed from the link's target. If `member' is none of - the above, None is returned. - The file-like object is read-only and provides the following - methods: read(), readline(), readlines(), seek() and tell() - """ - self._check("r") - - if isinstance(member, str): - tarinfo = self.getmember(member) - else: - tarinfo = member - - if tarinfo.isreg(): - return self.fileobject(self, tarinfo) - - elif tarinfo.type not in SUPPORTED_TYPES: - # If a member's type is unknown, it is treated as a - # regular file. - return self.fileobject(self, tarinfo) - - elif tarinfo.islnk() or tarinfo.issym(): - if isinstance(self.fileobj, _Stream): - # A small but ugly workaround for the case that someone tries - # to extract a (sym)link as a file-object from a non-seekable - # stream of tar blocks. - raise StreamError("cannot extract (sym)link as file object") - else: - # A (sym)link's file object is its target's file object. - return self.extractfile(self._find_link_target(tarinfo)) - else: - # If there's no data associated with the member (directory, chrdev, - # blkdev, etc.), return None instead of a file object. - return None - - def _extract_member(self, tarinfo, targetpath, set_attrs=True): - """Extract the TarInfo object tarinfo to a physical - file called targetpath. - """ - # Fetch the TarInfo object for the given name - # and build the destination pathname, replacing - # forward slashes to platform specific separators. - targetpath = targetpath.rstrip("/") - targetpath = targetpath.replace("/", os.sep) - - # Create all upper directories. - upperdirs = os.path.dirname(targetpath) - if upperdirs and not os.path.exists(upperdirs): - # Create directories that are not part of the archive with - # default permissions. - os.makedirs(upperdirs) - - if tarinfo.islnk() or tarinfo.issym(): - self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) - else: - self._dbg(1, tarinfo.name) - - if tarinfo.isreg(): - self.makefile(tarinfo, targetpath) - elif tarinfo.isdir(): - self.makedir(tarinfo, targetpath) - elif tarinfo.isfifo(): - self.makefifo(tarinfo, targetpath) - elif tarinfo.ischr() or tarinfo.isblk(): - self.makedev(tarinfo, targetpath) - elif tarinfo.islnk() or tarinfo.issym(): - self.makelink(tarinfo, targetpath) - elif tarinfo.type not in SUPPORTED_TYPES: - self.makeunknown(tarinfo, targetpath) - else: - self.makefile(tarinfo, targetpath) - - if set_attrs: - self.chown(tarinfo, targetpath) - if not tarinfo.issym(): - self.chmod(tarinfo, targetpath) - self.utime(tarinfo, targetpath) - - #-------------------------------------------------------------------------- - # Below are the different file methods. They are called via - # _extract_member() when extract() is called. They can be replaced in a - # subclass to implement other functionality. - - def makedir(self, tarinfo, targetpath): - """Make a directory called targetpath. - """ - try: - # Use a safe mode for the directory, the real mode is set - # later in _extract_member(). - os.mkdir(targetpath, 0o700) - except EnvironmentError as e: - if e.errno != errno.EEXIST: - raise - - def makefile(self, tarinfo, targetpath): - """Make a file called targetpath. - """ - source = self.fileobj - source.seek(tarinfo.offset_data) - target = bltn_open(targetpath, "wb") - if tarinfo.sparse is not None: - for offset, size in tarinfo.sparse: - target.seek(offset) - copyfileobj(source, target, size) - else: - copyfileobj(source, target, tarinfo.size) - target.seek(tarinfo.size) - target.truncate() - target.close() - - def makeunknown(self, tarinfo, targetpath): - """Make a file from a TarInfo object with an unknown type - at targetpath. - """ - self.makefile(tarinfo, targetpath) - self._dbg(1, "tarfile: Unknown file type %r, " \ - "extracted as regular file." % tarinfo.type) - - def makefifo(self, tarinfo, targetpath): - """Make a fifo called targetpath. - """ - if hasattr(os, "mkfifo"): - os.mkfifo(targetpath) - else: - raise ExtractError("fifo not supported by system") - - def makedev(self, tarinfo, targetpath): - """Make a character or block device called targetpath. - """ - if not hasattr(os, "mknod") or not hasattr(os, "makedev"): - raise ExtractError("special devices not supported by system") - - mode = tarinfo.mode - if tarinfo.isblk(): - mode |= stat.S_IFBLK - else: - mode |= stat.S_IFCHR - - os.mknod(targetpath, mode, - os.makedev(tarinfo.devmajor, tarinfo.devminor)) - - def makelink(self, tarinfo, targetpath): - """Make a (symbolic) link called targetpath. If it cannot be created - (platform limitation), we try to make a copy of the referenced file - instead of a link. - """ - try: - # For systems that support symbolic and hard links. - if tarinfo.issym(): - os.symlink(tarinfo.linkname, targetpath) - else: - # See extract(). - if os.path.exists(tarinfo._link_target): - os.link(tarinfo._link_target, targetpath) - else: - self._extract_member(self._find_link_target(tarinfo), - targetpath) - except symlink_exception: - if tarinfo.issym(): - linkpath = os.path.join(os.path.dirname(tarinfo.name), - tarinfo.linkname) - else: - linkpath = tarinfo.linkname - else: - try: - self._extract_member(self._find_link_target(tarinfo), - targetpath) - except KeyError: - raise ExtractError("unable to resolve link inside archive") - - def chown(self, tarinfo, targetpath): - """Set owner of targetpath according to tarinfo. - """ - if pwd and hasattr(os, "geteuid") and os.geteuid() == 0: - # We have to be root to do so. - try: - g = grp.getgrnam(tarinfo.gname)[2] - except KeyError: - g = tarinfo.gid - try: - u = pwd.getpwnam(tarinfo.uname)[2] - except KeyError: - u = tarinfo.uid - try: - if tarinfo.issym() and hasattr(os, "lchown"): - os.lchown(targetpath, u, g) - else: - if sys.platform != "os2emx": - os.chown(targetpath, u, g) - except EnvironmentError as e: - raise ExtractError("could not change owner") - - def chmod(self, tarinfo, targetpath): - """Set file permissions of targetpath according to tarinfo. - """ - if hasattr(os, 'chmod'): - try: - os.chmod(targetpath, tarinfo.mode) - except EnvironmentError as e: - raise ExtractError("could not change mode") - - def utime(self, tarinfo, targetpath): - """Set modification time of targetpath according to tarinfo. - """ - if not hasattr(os, 'utime'): - return - try: - os.utime(targetpath, (tarinfo.mtime, tarinfo.mtime)) - except EnvironmentError as e: - raise ExtractError("could not change modification time") - - #-------------------------------------------------------------------------- - def next(self): - """Return the next member of the archive as a TarInfo object, when - TarFile is opened for reading. Return None if there is no more - available. - """ - self._check("ra") - if self.firstmember is not None: - m = self.firstmember - self.firstmember = None - return m - - # Read the next block. - self.fileobj.seek(self.offset) - tarinfo = None - while True: - try: - tarinfo = self.tarinfo.fromtarfile(self) - except EOFHeaderError as e: - if self.ignore_zeros: - self._dbg(2, "0x%X: %s" % (self.offset, e)) - self.offset += BLOCKSIZE - continue - except InvalidHeaderError as e: - if self.ignore_zeros: - self._dbg(2, "0x%X: %s" % (self.offset, e)) - self.offset += BLOCKSIZE - continue - elif self.offset == 0: - raise ReadError(str(e)) - except EmptyHeaderError: - if self.offset == 0: - raise ReadError("empty file") - except TruncatedHeaderError as e: - if self.offset == 0: - raise ReadError(str(e)) - except SubsequentHeaderError as e: - raise ReadError(str(e)) - break - - if tarinfo is not None: - self.members.append(tarinfo) - else: - self._loaded = True - - return tarinfo - - #-------------------------------------------------------------------------- - # Little helper methods: - - def _getmember(self, name, tarinfo=None, normalize=False): - """Find an archive member by name from bottom to top. - If tarinfo is given, it is used as the starting point. - """ - # Ensure that all members have been loaded. - members = self.getmembers() - - # Limit the member search list up to tarinfo. - if tarinfo is not None: - members = members[:members.index(tarinfo)] - - if normalize: - name = os.path.normpath(name) - - for member in reversed(members): - if normalize: - member_name = os.path.normpath(member.name) - else: - member_name = member.name - - if name == member_name: - return member - - def _load(self): - """Read through the entire archive file and look for readable - members. - """ - while True: - tarinfo = self.next() - if tarinfo is None: - break - self._loaded = True - - def _check(self, mode=None): - """Check if TarFile is still open, and if the operation's mode - corresponds to TarFile's mode. - """ - if self.closed: - raise IOError("%s is closed" % self.__class__.__name__) - if mode is not None and self.mode not in mode: - raise IOError("bad operation for mode %r" % self.mode) - - def _find_link_target(self, tarinfo): - """Find the target member of a symlink or hardlink member in the - archive. - """ - if tarinfo.issym(): - # Always search the entire archive. - linkname = os.path.dirname(tarinfo.name) + "/" + tarinfo.linkname - limit = None - else: - # Search the archive before the link, because a hard link is - # just a reference to an already archived file. - linkname = tarinfo.linkname - limit = tarinfo - - member = self._getmember(linkname, tarinfo=limit, normalize=True) - if member is None: - raise KeyError("linkname %r not found" % linkname) - return member - - def __iter__(self): - """Provide an iterator object. - """ - if self._loaded: - return iter(self.members) - else: - return TarIter(self) - - def _dbg(self, level, msg): - """Write debugging output to sys.stderr. - """ - if level <= self.debug: - print(msg, file=sys.stderr) - - def __enter__(self): - self._check() - return self - - def __exit__(self, type, value, traceback): - if type is None: - self.close() - else: - # An exception occurred. We must not call close() because - # it would try to write end-of-archive blocks and padding. - if not self._extfileobj: - self.fileobj.close() - self.closed = True -# class TarFile - -class TarIter(object): - """Iterator Class. - - for tarinfo in TarFile(...): - suite... - """ - - def __init__(self, tarfile): - """Construct a TarIter object. - """ - self.tarfile = tarfile - self.index = 0 - def __iter__(self): - """Return iterator object. - """ - return self - - def __next__(self): - """Return the next item using TarFile's next() method. - When all members have been read, set TarFile as _loaded. - """ - # Fix for SF #1100429: Under rare circumstances it can - # happen that getmembers() is called during iteration, - # which will cause TarIter to stop prematurely. - if not self.tarfile._loaded: - tarinfo = self.tarfile.next() - if not tarinfo: - self.tarfile._loaded = True - raise StopIteration - else: - try: - tarinfo = self.tarfile.members[self.index] - except IndexError: - raise StopIteration - self.index += 1 - return tarinfo - - next = __next__ # for Python 2.x - -#-------------------- -# exported functions -#-------------------- -def is_tarfile(name): - """Return True if name points to a tar archive that we - are able to handle, else return False. - """ - try: - t = open(name) - t.close() - return True - except TarError: - return False - -bltn_open = open -open = TarFile.open diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/compat.py deleted file mode 100644 index ff328c8..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/compat.py +++ /dev/null @@ -1,1120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import absolute_import - -import os -import re -import sys - -try: - import ssl -except ImportError: # pragma: no cover - ssl = None - -if sys.version_info[0] < 3: # pragma: no cover - from StringIO import StringIO - string_types = basestring, - text_type = unicode - from types import FileType as file_type - import __builtin__ as builtins - import ConfigParser as configparser - from ._backport import shutil - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit - from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, - pathname2url, ContentTooShortError, splittype) - - def quote(s): - if isinstance(s, unicode): - s = s.encode('utf-8') - return _quote(s) - - import urllib2 - from urllib2 import (Request, urlopen, URLError, HTTPError, - HTTPBasicAuthHandler, HTTPPasswordMgr, - HTTPHandler, HTTPRedirectHandler, - build_opener) - if ssl: - from urllib2 import HTTPSHandler - import httplib - import xmlrpclib - import Queue as queue - from HTMLParser import HTMLParser - import htmlentitydefs - raw_input = raw_input - from itertools import ifilter as filter - from itertools import ifilterfalse as filterfalse - - _userprog = None - def splituser(host): - """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" - global _userprog - if _userprog is None: - import re - _userprog = re.compile('^(.*)@(.*)$') - - match = _userprog.match(host) - if match: return match.group(1, 2) - return None, host - -else: # pragma: no cover - from io import StringIO - string_types = str, - text_type = str - from io import TextIOWrapper as file_type - import builtins - import configparser - import shutil - from urllib.parse import (urlparse, urlunparse, urljoin, splituser, quote, - unquote, urlsplit, urlunsplit, splittype) - from urllib.request import (urlopen, urlretrieve, Request, url2pathname, - pathname2url, - HTTPBasicAuthHandler, HTTPPasswordMgr, - HTTPHandler, HTTPRedirectHandler, - build_opener) - if ssl: - from urllib.request import HTTPSHandler - from urllib.error import HTTPError, URLError, ContentTooShortError - import http.client as httplib - import urllib.request as urllib2 - import xmlrpc.client as xmlrpclib - import queue - from html.parser import HTMLParser - import html.entities as htmlentitydefs - raw_input = input - from itertools import filterfalse - filter = filter - -try: - from ssl import match_hostname, CertificateError -except ImportError: # pragma: no cover - class CertificateError(ValueError): - pass - - - def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - parts = dn.split('.') - leftmost, remainder = parts[0], parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - - def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" - % (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" - % (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") - - -try: - from types import SimpleNamespace as Container -except ImportError: # pragma: no cover - class Container(object): - """ - A generic container for when multiple values need to be returned - """ - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -try: - from shutil import which -except ImportError: # pragma: no cover - # Implementation from Python 3.3 - def which(cmd, mode=os.F_OK | os.X_OK, path=None): - """Given a command, mode, and a PATH string, return the path which - conforms to the given mode on the PATH, or None if there is no such - file. - - `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result - of os.environ.get("PATH"), or can be overridden with a custom search - path. - - """ - # Check that a given file can be accessed with the correct mode. - # Additionally check that `file` is not a directory, as on Windows - # directories pass the os.access check. - def _access_check(fn, mode): - return (os.path.exists(fn) and os.access(fn, mode) - and not os.path.isdir(fn)) - - # If we're given a path with a directory part, look it up directly rather - # than referring to PATH directories. This includes checking relative to the - # current directory, e.g. ./script - if os.path.dirname(cmd): - if _access_check(cmd, mode): - return cmd - return None - - if path is None: - path = os.environ.get("PATH", os.defpath) - if not path: - return None - path = path.split(os.pathsep) - - if sys.platform == "win32": - # The current directory takes precedence on Windows. - if not os.curdir in path: - path.insert(0, os.curdir) - - # PATHEXT is necessary to check on Windows. - pathext = os.environ.get("PATHEXT", "").split(os.pathsep) - # See if the given file matches any of the expected path extensions. - # This will allow us to short circuit when given "python.exe". - # If it does match, only test that one, otherwise we have to try - # others. - if any(cmd.lower().endswith(ext.lower()) for ext in pathext): - files = [cmd] - else: - files = [cmd + ext for ext in pathext] - else: - # On other platforms you don't have things like PATHEXT to tell you - # what file suffixes are executable, so just pass on cmd as-is. - files = [cmd] - - seen = set() - for dir in path: - normdir = os.path.normcase(dir) - if not normdir in seen: - seen.add(normdir) - for thefile in files: - name = os.path.join(dir, thefile) - if _access_check(name, mode): - return name - return None - - -# ZipFile is a context manager in 2.7, but not in 2.6 - -from zipfile import ZipFile as BaseZipFile - -if hasattr(BaseZipFile, '__enter__'): # pragma: no cover - ZipFile = BaseZipFile -else: # pragma: no cover - from zipfile import ZipExtFile as BaseZipExtFile - - class ZipExtFile(BaseZipExtFile): - def __init__(self, base): - self.__dict__.update(base.__dict__) - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - class ZipFile(BaseZipFile): - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.close() - # return None, so if an exception occurred, it will propagate - - def open(self, *args, **kwargs): - base = BaseZipFile.open(self, *args, **kwargs) - return ZipExtFile(base) - -try: - from platform import python_implementation -except ImportError: # pragma: no cover - def python_implementation(): - """Return a string identifying the Python implementation.""" - if 'PyPy' in sys.version: - return 'PyPy' - if os.name == 'java': - return 'Jython' - if sys.version.startswith('IronPython'): - return 'IronPython' - return 'CPython' - -try: - import sysconfig -except ImportError: # pragma: no cover - from ._backport import sysconfig - -try: - callable = callable -except NameError: # pragma: no cover - from collections import Callable - - def callable(obj): - return isinstance(obj, Callable) - - -try: - fsencode = os.fsencode - fsdecode = os.fsdecode -except AttributeError: # pragma: no cover - # Issue #99: on some systems (e.g. containerised), - # sys.getfilesystemencoding() returns None, and we need a real value, - # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and - # sys.getfilesystemencoding(): the return value is "the user’s preference - # according to the result of nl_langinfo(CODESET), or None if the - # nl_langinfo(CODESET) failed." - _fsencoding = sys.getfilesystemencoding() or 'utf-8' - if _fsencoding == 'mbcs': - _fserrors = 'strict' - else: - _fserrors = 'surrogateescape' - - def fsencode(filename): - if isinstance(filename, bytes): - return filename - elif isinstance(filename, text_type): - return filename.encode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - - def fsdecode(filename): - if isinstance(filename, text_type): - return filename - elif isinstance(filename, bytes): - return filename.decode(_fsencoding, _fserrors) - else: - raise TypeError("expect bytes or str, not %s" % - type(filename).__name__) - -try: - from tokenize import detect_encoding -except ImportError: # pragma: no cover - from codecs import BOM_UTF8, lookup - import re - - cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") - - def _get_normal_name(orig_enc): - """Imitates get_normal_name in tokenizer.c.""" - # Only care about the first 12 characters. - enc = orig_enc[:12].lower().replace("_", "-") - if enc == "utf-8" or enc.startswith("utf-8-"): - return "utf-8" - if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ - enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): - return "iso-8859-1" - return orig_enc - - def detect_encoding(readline): - """ - The detect_encoding() function is used to detect the encoding that should - be used to decode a Python source file. It requires one argument, readline, - in the same way as the tokenize() generator. - - It will call readline a maximum of twice, and return the encoding used - (as a string) and a list of any lines (left as bytes) it has read in. - - It detects the encoding from the presence of a utf-8 bom or an encoding - cookie as specified in pep-0263. If both a bom and a cookie are present, - but disagree, a SyntaxError will be raised. If the encoding cookie is an - invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, - 'utf-8-sig' is returned. - - If no encoding is specified, then the default of 'utf-8' will be returned. - """ - try: - filename = readline.__self__.name - except AttributeError: - filename = None - bom_found = False - encoding = None - default = 'utf-8' - def read_or_stop(): - try: - return readline() - except StopIteration: - return b'' - - def find_cookie(line): - try: - # Decode as UTF-8. Either the line is an encoding declaration, - # in which case it should be pure ASCII, or it must be UTF-8 - # per default encoding. - line_string = line.decode('utf-8') - except UnicodeDecodeError: - msg = "invalid or missing encoding declaration" - if filename is not None: - msg = '{} for {!r}'.format(msg, filename) - raise SyntaxError(msg) - - matches = cookie_re.findall(line_string) - if not matches: - return None - encoding = _get_normal_name(matches[0]) - try: - codec = lookup(encoding) - except LookupError: - # This behaviour mimics the Python interpreter - if filename is None: - msg = "unknown encoding: " + encoding - else: - msg = "unknown encoding for {!r}: {}".format(filename, - encoding) - raise SyntaxError(msg) - - if bom_found: - if codec.name != 'utf-8': - # This behaviour mimics the Python interpreter - if filename is None: - msg = 'encoding problem: utf-8' - else: - msg = 'encoding problem for {!r}: utf-8'.format(filename) - raise SyntaxError(msg) - encoding += '-sig' - return encoding - - first = read_or_stop() - if first.startswith(BOM_UTF8): - bom_found = True - first = first[3:] - default = 'utf-8-sig' - if not first: - return default, [] - - encoding = find_cookie(first) - if encoding: - return encoding, [first] - - second = read_or_stop() - if not second: - return default, [first] - - encoding = find_cookie(second) - if encoding: - return encoding, [first, second] - - return default, [first, second] - -# For converting & <-> & etc. -try: - from html import escape -except ImportError: - from cgi import escape -if sys.version_info[:2] < (3, 4): - unescape = HTMLParser().unescape -else: - from html import unescape - -try: - from collections import ChainMap -except ImportError: # pragma: no cover - from collections import MutableMapping - - try: - from reprlib import recursive_repr as _recursive_repr - except ImportError: - def _recursive_repr(fillvalue='...'): - ''' - Decorator to make a repr function return fillvalue for a recursive - call - ''' - - def decorating_function(user_function): - repr_running = set() - - def wrapper(self): - key = id(self), get_ident() - if key in repr_running: - return fillvalue - repr_running.add(key) - try: - result = user_function(self) - finally: - repr_running.discard(key) - return result - - # Can't use functools.wraps() here because of bootstrap issues - wrapper.__module__ = getattr(user_function, '__module__') - wrapper.__doc__ = getattr(user_function, '__doc__') - wrapper.__name__ = getattr(user_function, '__name__') - wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) - return wrapper - - return decorating_function - - class ChainMap(MutableMapping): - ''' A ChainMap groups multiple dicts (or other mappings) together - to create a single, updateable view. - - The underlying mappings are stored in a list. That list is public and can - accessed or updated using the *maps* attribute. There is no other state. - - Lookups search the underlying mappings successively until a key is found. - In contrast, writes, updates, and deletions only operate on the first - mapping. - - ''' - - def __init__(self, *maps): - '''Initialize a ChainMap by setting *maps* to the given mappings. - If no mappings are provided, a single empty dictionary is used. - - ''' - self.maps = list(maps) or [{}] # always at least one map - - def __missing__(self, key): - raise KeyError(key) - - def __getitem__(self, key): - for mapping in self.maps: - try: - return mapping[key] # can't use 'key in mapping' with defaultdict - except KeyError: - pass - return self.__missing__(key) # support subclasses that define __missing__ - - def get(self, key, default=None): - return self[key] if key in self else default - - def __len__(self): - return len(set().union(*self.maps)) # reuses stored hash values if possible - - def __iter__(self): - return iter(set().union(*self.maps)) - - def __contains__(self, key): - return any(key in m for m in self.maps) - - def __bool__(self): - return any(self.maps) - - @_recursive_repr() - def __repr__(self): - return '{0.__class__.__name__}({1})'.format( - self, ', '.join(map(repr, self.maps))) - - @classmethod - def fromkeys(cls, iterable, *args): - 'Create a ChainMap with a single dict created from the iterable.' - return cls(dict.fromkeys(iterable, *args)) - - def copy(self): - 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' - return self.__class__(self.maps[0].copy(), *self.maps[1:]) - - __copy__ = copy - - def new_child(self): # like Django's Context.push() - 'New ChainMap with a new dict followed by all previous maps.' - return self.__class__({}, *self.maps) - - @property - def parents(self): # like Django's Context.pop() - 'New ChainMap from maps[1:].' - return self.__class__(*self.maps[1:]) - - def __setitem__(self, key, value): - self.maps[0][key] = value - - def __delitem__(self, key): - try: - del self.maps[0][key] - except KeyError: - raise KeyError('Key not found in the first mapping: {!r}'.format(key)) - - def popitem(self): - 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' - try: - return self.maps[0].popitem() - except KeyError: - raise KeyError('No keys found in the first mapping.') - - def pop(self, key, *args): - 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' - try: - return self.maps[0].pop(key, *args) - except KeyError: - raise KeyError('Key not found in the first mapping: {!r}'.format(key)) - - def clear(self): - 'Clear maps[0], leaving maps[1:] intact.' - self.maps[0].clear() - -try: - from importlib.util import cache_from_source # Python >= 3.4 -except ImportError: # pragma: no cover - try: - from imp import cache_from_source - except ImportError: # pragma: no cover - def cache_from_source(path, debug_override=None): - assert path.endswith('.py') - if debug_override is None: - debug_override = __debug__ - if debug_override: - suffix = 'c' - else: - suffix = 'o' - return path + suffix - -try: - from collections import OrderedDict -except ImportError: # pragma: no cover -## {{{ http://code.activestate.com/recipes/576693/ (r9) -# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. -# Passes Python2.7's test suite and incorporates all the latest updates. - try: - from thread import get_ident as _get_ident - except ImportError: - from dummy_thread import get_ident as _get_ident - - try: - from _abcoll import KeysView, ValuesView, ItemsView - except ImportError: - pass - - - class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args),)) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running=None): - 'od.__repr__() <==> repr(od)' - if not _repr_running: _repr_running = {} - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) - -try: - from logging.config import BaseConfigurator, valid_ident -except ImportError: # pragma: no cover - IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) - - - def valid_ident(s): - m = IDENTIFIER.match(s) - if not m: - raise ValueError('Not a valid Python identifier: %r' % s) - return True - - - # The ConvertingXXX classes are wrappers around standard Python containers, - # and they serve to convert any suitable values in the container. The - # conversion converts base dicts, lists and tuples to their wrapped - # equivalents, whereas strings which match a conversion format are converted - # appropriately. - # - # Each wrapper should have a configurator attribute holding the actual - # configurator to use for conversion. - - class ConvertingDict(dict): - """A converting dictionary wrapper.""" - - def __getitem__(self, key): - value = dict.__getitem__(self, key) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def get(self, key, default=None): - value = dict.get(self, key, default) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, key, default=None): - value = dict.pop(self, key, default) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class ConvertingList(list): - """A converting list wrapper.""" - def __getitem__(self, key): - value = list.__getitem__(self, key) - result = self.configurator.convert(value) - #If the converted value is different, save for next time - if value is not result: - self[key] = result - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - def pop(self, idx=-1): - value = list.pop(self, idx) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - return result - - class ConvertingTuple(tuple): - """A converting tuple wrapper.""" - def __getitem__(self, key): - value = tuple.__getitem__(self, key) - result = self.configurator.convert(value) - if value is not result: - if type(result) in (ConvertingDict, ConvertingList, - ConvertingTuple): - result.parent = self - result.key = key - return result - - class BaseConfigurator(object): - """ - The configurator base class which defines some useful defaults. - """ - - CONVERT_PATTERN = re.compile(r'^(?P<prefix>[a-z]+)://(?P<suffix>.*)$') - - WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') - DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') - INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') - DIGIT_PATTERN = re.compile(r'^\d+$') - - value_converters = { - 'ext' : 'ext_convert', - 'cfg' : 'cfg_convert', - } - - # We might want to use a different one, e.g. importlib - importer = staticmethod(__import__) - - def __init__(self, config): - self.config = ConvertingDict(config) - self.config.configurator = self - - def resolve(self, s): - """ - Resolve strings to objects using standard import and attribute - syntax. - """ - name = s.split('.') - used = name.pop(0) - try: - found = self.importer(used) - for frag in name: - used += '.' + frag - try: - found = getattr(found, frag) - except AttributeError: - self.importer(used) - found = getattr(found, frag) - return found - except ImportError: - e, tb = sys.exc_info()[1:] - v = ValueError('Cannot resolve %r: %s' % (s, e)) - v.__cause__, v.__traceback__ = e, tb - raise v - - def ext_convert(self, value): - """Default converter for the ext:// protocol.""" - return self.resolve(value) - - def cfg_convert(self, value): - """Default converter for the cfg:// protocol.""" - rest = value - m = self.WORD_PATTERN.match(rest) - if m is None: - raise ValueError("Unable to convert %r" % value) - else: - rest = rest[m.end():] - d = self.config[m.groups()[0]] - #print d, rest - while rest: - m = self.DOT_PATTERN.match(rest) - if m: - d = d[m.groups()[0]] - else: - m = self.INDEX_PATTERN.match(rest) - if m: - idx = m.groups()[0] - if not self.DIGIT_PATTERN.match(idx): - d = d[idx] - else: - try: - n = int(idx) # try as number first (most likely) - d = d[n] - except TypeError: - d = d[idx] - if m: - rest = rest[m.end():] - else: - raise ValueError('Unable to convert ' - '%r at %r' % (value, rest)) - #rest should be empty - return d - - def convert(self, value): - """ - Convert values to an appropriate type. dicts, lists and tuples are - replaced by their converting alternatives. Strings are checked to - see if they have a conversion format and are converted if they do. - """ - if not isinstance(value, ConvertingDict) and isinstance(value, dict): - value = ConvertingDict(value) - value.configurator = self - elif not isinstance(value, ConvertingList) and isinstance(value, list): - value = ConvertingList(value) - value.configurator = self - elif not isinstance(value, ConvertingTuple) and\ - isinstance(value, tuple): - value = ConvertingTuple(value) - value.configurator = self - elif isinstance(value, string_types): - m = self.CONVERT_PATTERN.match(value) - if m: - d = m.groupdict() - prefix = d['prefix'] - converter = self.value_converters.get(prefix, None) - if converter: - suffix = d['suffix'] - converter = getattr(self, converter) - value = converter(suffix) - return value - - def configure_custom(self, config): - """Configure an object with a user-supplied factory.""" - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) - result = c(**kwargs) - if props: - for name, value in props.items(): - setattr(result, name, value) - return result - - def as_tuple(self, value): - """Utility function which converts lists to tuples.""" - if isinstance(value, list): - value = tuple(value) - return value diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/database.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/database.py deleted file mode 100644 index a19905e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/database.py +++ /dev/null @@ -1,1336 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2017 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""PEP 376 implementation.""" - -from __future__ import unicode_literals - -import base64 -import codecs -import contextlib -import hashlib -import logging -import os -import posixpath -import sys -import zipimport - -from . import DistlibException, resources -from .compat import StringIO -from .version import get_scheme, UnsupportedVersionError -from .metadata import Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME -from .util import (parse_requirement, cached_property, parse_name_and_version, - read_exports, write_exports, CSVReader, CSVWriter) - - -__all__ = ['Distribution', 'BaseInstalledDistribution', - 'InstalledDistribution', 'EggInfoDistribution', - 'DistributionPath'] - - -logger = logging.getLogger(__name__) - -EXPORTS_FILENAME = 'pydist-exports.json' -COMMANDS_FILENAME = 'pydist-commands.json' - -DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', - 'RESOURCES', EXPORTS_FILENAME, 'SHARED') - -DISTINFO_EXT = '.dist-info' - - -class _Cache(object): - """ - A simple cache mapping names and .dist-info paths to distributions - """ - def __init__(self): - """ - Initialise an instance. There is normally one for each DistributionPath. - """ - self.name = {} - self.path = {} - self.generated = False - - def clear(self): - """ - Clear the cache, setting it to its initial state. - """ - self.name.clear() - self.path.clear() - self.generated = False - - def add(self, dist): - """ - Add a distribution to the cache. - :param dist: The distribution to add. - """ - if dist.path not in self.path: - self.path[dist.path] = dist - self.name.setdefault(dist.key, []).append(dist) - - -class DistributionPath(object): - """ - Represents a set of distributions installed on a path (typically sys.path). - """ - def __init__(self, path=None, include_egg=False): - """ - Create an instance from a path, optionally including legacy (distutils/ - setuptools/distribute) distributions. - :param path: The path to use, as a list of directories. If not specified, - sys.path is used. - :param include_egg: If True, this instance will look for and return legacy - distributions as well as those based on PEP 376. - """ - if path is None: - path = sys.path - self.path = path - self._include_dist = True - self._include_egg = include_egg - - self._cache = _Cache() - self._cache_egg = _Cache() - self._cache_enabled = True - self._scheme = get_scheme('default') - - def _get_cache_enabled(self): - return self._cache_enabled - - def _set_cache_enabled(self, value): - self._cache_enabled = value - - cache_enabled = property(_get_cache_enabled, _set_cache_enabled) - - def clear_cache(self): - """ - Clears the internal cache. - """ - self._cache.clear() - self._cache_egg.clear() - - - def _yield_distributions(self): - """ - Yield .dist-info and/or .egg(-info) distributions. - """ - # We need to check if we've seen some resources already, because on - # some Linux systems (e.g. some Debian/Ubuntu variants) there are - # symlinks which alias other files in the environment. - seen = set() - for path in self.path: - finder = resources.finder_for_path(path) - if finder is None: - continue - r = finder.find('') - if not r or not r.is_container: - continue - rset = sorted(r.resources) - for entry in rset: - r = finder.find(entry) - if not r or r.path in seen: - continue - if self._include_dist and entry.endswith(DISTINFO_EXT): - possible_filenames = [METADATA_FILENAME, WHEEL_METADATA_FILENAME] - for metadata_filename in possible_filenames: - metadata_path = posixpath.join(entry, metadata_filename) - pydist = finder.find(metadata_path) - if pydist: - break - else: - continue - - with contextlib.closing(pydist.as_stream()) as stream: - metadata = Metadata(fileobj=stream, scheme='legacy') - logger.debug('Found %s', r.path) - seen.add(r.path) - yield new_dist_class(r.path, metadata=metadata, - env=self) - elif self._include_egg and entry.endswith(('.egg-info', - '.egg')): - logger.debug('Found %s', r.path) - seen.add(r.path) - yield old_dist_class(r.path, self) - - def _generate_cache(self): - """ - Scan the path for distributions and populate the cache with - those that are found. - """ - gen_dist = not self._cache.generated - gen_egg = self._include_egg and not self._cache_egg.generated - if gen_dist or gen_egg: - for dist in self._yield_distributions(): - if isinstance(dist, InstalledDistribution): - self._cache.add(dist) - else: - self._cache_egg.add(dist) - - if gen_dist: - self._cache.generated = True - if gen_egg: - self._cache_egg.generated = True - - @classmethod - def distinfo_dirname(cls, name, version): - """ - The *name* and *version* parameters are converted into their - filename-escaped form, i.e. any ``'-'`` characters are replaced - with ``'_'`` other than the one in ``'dist-info'`` and the one - separating the name from the version number. - - :parameter name: is converted to a standard distribution name by replacing - any runs of non- alphanumeric characters with a single - ``'-'``. - :type name: string - :parameter version: is converted to a standard version string. Spaces - become dots, and all other non-alphanumeric characters - (except dots) become dashes, with runs of multiple - dashes condensed to a single dash. - :type version: string - :returns: directory name - :rtype: string""" - name = name.replace('-', '_') - return '-'.join([name, version]) + DISTINFO_EXT - - def get_distributions(self): - """ - Provides an iterator that looks for distributions and returns - :class:`InstalledDistribution` or - :class:`EggInfoDistribution` instances for each one of them. - - :rtype: iterator of :class:`InstalledDistribution` and - :class:`EggInfoDistribution` instances - """ - if not self._cache_enabled: - for dist in self._yield_distributions(): - yield dist - else: - self._generate_cache() - - for dist in self._cache.path.values(): - yield dist - - if self._include_egg: - for dist in self._cache_egg.path.values(): - yield dist - - def get_distribution(self, name): - """ - Looks for a named distribution on the path. - - This function only returns the first result found, as no more than one - value is expected. If nothing is found, ``None`` is returned. - - :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` - or ``None`` - """ - result = None - name = name.lower() - if not self._cache_enabled: - for dist in self._yield_distributions(): - if dist.key == name: - result = dist - break - else: - self._generate_cache() - - if name in self._cache.name: - result = self._cache.name[name][0] - elif self._include_egg and name in self._cache_egg.name: - result = self._cache_egg.name[name][0] - return result - - def provides_distribution(self, name, version=None): - """ - Iterates over all distributions to find which distributions provide *name*. - If a *version* is provided, it will be used to filter the results. - - This function only returns the first result found, since no more than - one values are expected. If the directory is not found, returns ``None``. - - :parameter version: a version specifier that indicates the version - required, conforming to the format in ``PEP-345`` - - :type name: string - :type version: string - """ - matcher = None - if version is not None: - try: - matcher = self._scheme.matcher('%s (%s)' % (name, version)) - except ValueError: - raise DistlibException('invalid name or version: %r, %r' % - (name, version)) - - for dist in self.get_distributions(): - # We hit a problem on Travis where enum34 was installed and doesn't - # have a provides attribute ... - if not hasattr(dist, 'provides'): - logger.debug('No "provides": %s', dist) - else: - provided = dist.provides - - for p in provided: - p_name, p_ver = parse_name_and_version(p) - if matcher is None: - if p_name == name: - yield dist - break - else: - if p_name == name and matcher.match(p_ver): - yield dist - break - - def get_file_path(self, name, relative_path): - """ - Return the path to a resource file. - """ - dist = self.get_distribution(name) - if dist is None: - raise LookupError('no distribution named %r found' % name) - return dist.get_resource_path(relative_path) - - def get_exported_entries(self, category, name=None): - """ - Return all of the exported entries in a particular category. - - :param category: The category to search for entries. - :param name: If specified, only entries with that name are returned. - """ - for dist in self.get_distributions(): - r = dist.exports - if category in r: - d = r[category] - if name is not None: - if name in d: - yield d[name] - else: - for v in d.values(): - yield v - - -class Distribution(object): - """ - A base class for distributions, whether installed or from indexes. - Either way, it must have some metadata, so that's all that's needed - for construction. - """ - - build_time_dependency = False - """ - Set to True if it's known to be only a build-time dependency (i.e. - not needed after installation). - """ - - requested = False - """A boolean that indicates whether the ``REQUESTED`` metadata file is - present (in other words, whether the package was installed by user - request or it was installed as a dependency).""" - - def __init__(self, metadata): - """ - Initialise an instance. - :param metadata: The instance of :class:`Metadata` describing this - distribution. - """ - self.metadata = metadata - self.name = metadata.name - self.key = self.name.lower() # for case-insensitive comparisons - self.version = metadata.version - self.locator = None - self.digest = None - self.extras = None # additional features requested - self.context = None # environment marker overrides - self.download_urls = set() - self.digests = {} - - @property - def source_url(self): - """ - The source archive download URL for this distribution. - """ - return self.metadata.source_url - - download_url = source_url # Backward compatibility - - @property - def name_and_version(self): - """ - A utility property which displays the name and version in parentheses. - """ - return '%s (%s)' % (self.name, self.version) - - @property - def provides(self): - """ - A set of distribution names and versions provided by this distribution. - :return: A set of "name (version)" strings. - """ - plist = self.metadata.provides - s = '%s (%s)' % (self.name, self.version) - if s not in plist: - plist.append(s) - return plist - - def _get_requirements(self, req_attr): - md = self.metadata - logger.debug('Getting requirements from metadata %r', md.todict()) - reqts = getattr(md, req_attr) - return set(md.get_requirements(reqts, extras=self.extras, - env=self.context)) - - @property - def run_requires(self): - return self._get_requirements('run_requires') - - @property - def meta_requires(self): - return self._get_requirements('meta_requires') - - @property - def build_requires(self): - return self._get_requirements('build_requires') - - @property - def test_requires(self): - return self._get_requirements('test_requires') - - @property - def dev_requires(self): - return self._get_requirements('dev_requires') - - def matches_requirement(self, req): - """ - Say if this instance matches (fulfills) a requirement. - :param req: The requirement to match. - :rtype req: str - :return: True if it matches, else False. - """ - # Requirement may contain extras - parse to lose those - # from what's passed to the matcher - r = parse_requirement(req) - scheme = get_scheme(self.metadata.scheme) - try: - matcher = scheme.matcher(r.requirement) - except UnsupportedVersionError: - # XXX compat-mode if cannot read the version - logger.warning('could not read version %r - using name only', - req) - name = req.split()[0] - matcher = scheme.matcher(name) - - name = matcher.key # case-insensitive - - result = False - for p in self.provides: - p_name, p_ver = parse_name_and_version(p) - if p_name != name: - continue - try: - result = matcher.match(p_ver) - break - except UnsupportedVersionError: - pass - return result - - def __repr__(self): - """ - Return a textual representation of this instance, - """ - if self.source_url: - suffix = ' [%s]' % self.source_url - else: - suffix = '' - return '<Distribution %s (%s)%s>' % (self.name, self.version, suffix) - - def __eq__(self, other): - """ - See if this distribution is the same as another. - :param other: The distribution to compare with. To be equal to one - another. distributions must have the same type, name, - version and source_url. - :return: True if it is the same, else False. - """ - if type(other) is not type(self): - result = False - else: - result = (self.name == other.name and - self.version == other.version and - self.source_url == other.source_url) - return result - - def __hash__(self): - """ - Compute hash in a way which matches the equality test. - """ - return hash(self.name) + hash(self.version) + hash(self.source_url) - - -class BaseInstalledDistribution(Distribution): - """ - This is the base class for installed distributions (whether PEP 376 or - legacy). - """ - - hasher = None - - def __init__(self, metadata, path, env=None): - """ - Initialise an instance. - :param metadata: An instance of :class:`Metadata` which describes the - distribution. This will normally have been initialised - from a metadata file in the ``path``. - :param path: The path of the ``.dist-info`` or ``.egg-info`` - directory for the distribution. - :param env: This is normally the :class:`DistributionPath` - instance where this distribution was found. - """ - super(BaseInstalledDistribution, self).__init__(metadata) - self.path = path - self.dist_path = env - - def get_hash(self, data, hasher=None): - """ - Get the hash of some data, using a particular hash algorithm, if - specified. - - :param data: The data to be hashed. - :type data: bytes - :param hasher: The name of a hash implementation, supported by hashlib, - or ``None``. Examples of valid values are ``'sha1'``, - ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and - ``'sha512'``. If no hasher is specified, the ``hasher`` - attribute of the :class:`InstalledDistribution` instance - is used. If the hasher is determined to be ``None``, MD5 - is used as the hashing algorithm. - :returns: The hash of the data. If a hasher was explicitly specified, - the returned hash will be prefixed with the specified hasher - followed by '='. - :rtype: str - """ - if hasher is None: - hasher = self.hasher - if hasher is None: - hasher = hashlib.md5 - prefix = '' - else: - hasher = getattr(hashlib, hasher) - prefix = '%s=' % self.hasher - digest = hasher(data).digest() - digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') - return '%s%s' % (prefix, digest) - - -class InstalledDistribution(BaseInstalledDistribution): - """ - Created with the *path* of the ``.dist-info`` directory provided to the - constructor. It reads the metadata contained in ``pydist.json`` when it is - instantiated., or uses a passed in Metadata instance (useful for when - dry-run mode is being used). - """ - - hasher = 'sha256' - - def __init__(self, path, metadata=None, env=None): - self.modules = [] - self.finder = finder = resources.finder_for_path(path) - if finder is None: - raise ValueError('finder unavailable for %s' % path) - if env and env._cache_enabled and path in env._cache.path: - metadata = env._cache.path[path].metadata - elif metadata is None: - r = finder.find(METADATA_FILENAME) - # Temporary - for Wheel 0.23 support - if r is None: - r = finder.find(WHEEL_METADATA_FILENAME) - # Temporary - for legacy support - if r is None: - r = finder.find('METADATA') - if r is None: - raise ValueError('no %s found in %s' % (METADATA_FILENAME, - path)) - with contextlib.closing(r.as_stream()) as stream: - metadata = Metadata(fileobj=stream, scheme='legacy') - - super(InstalledDistribution, self).__init__(metadata, path, env) - - if env and env._cache_enabled: - env._cache.add(self) - - r = finder.find('REQUESTED') - self.requested = r is not None - p = os.path.join(path, 'top_level.txt') - if os.path.exists(p): - with open(p, 'rb') as f: - data = f.read() - self.modules = data.splitlines() - - def __repr__(self): - return '<InstalledDistribution %r %s at %r>' % ( - self.name, self.version, self.path) - - def __str__(self): - return "%s %s" % (self.name, self.version) - - def _get_records(self): - """ - Get the list of installed files for the distribution - :return: A list of tuples of path, hash and size. Note that hash and - size might be ``None`` for some entries. The path is exactly - as stored in the file (which is as in PEP 376). - """ - results = [] - r = self.get_distinfo_resource('RECORD') - with contextlib.closing(r.as_stream()) as stream: - with CSVReader(stream=stream) as record_reader: - # Base location is parent dir of .dist-info dir - #base_location = os.path.dirname(self.path) - #base_location = os.path.abspath(base_location) - for row in record_reader: - missing = [None for i in range(len(row), 3)] - path, checksum, size = row + missing - #if not os.path.isabs(path): - # path = path.replace('/', os.sep) - # path = os.path.join(base_location, path) - results.append((path, checksum, size)) - return results - - @cached_property - def exports(self): - """ - Return the information exported by this distribution. - :return: A dictionary of exports, mapping an export category to a dict - of :class:`ExportEntry` instances describing the individual - export entries, and keyed by name. - """ - result = {} - r = self.get_distinfo_resource(EXPORTS_FILENAME) - if r: - result = self.read_exports() - return result - - def read_exports(self): - """ - Read exports data from a file in .ini format. - - :return: A dictionary of exports, mapping an export category to a list - of :class:`ExportEntry` instances describing the individual - export entries. - """ - result = {} - r = self.get_distinfo_resource(EXPORTS_FILENAME) - if r: - with contextlib.closing(r.as_stream()) as stream: - result = read_exports(stream) - return result - - def write_exports(self, exports): - """ - Write a dictionary of exports to a file in .ini format. - :param exports: A dictionary of exports, mapping an export category to - a list of :class:`ExportEntry` instances describing the - individual export entries. - """ - rf = self.get_distinfo_file(EXPORTS_FILENAME) - with open(rf, 'w') as f: - write_exports(exports, f) - - def get_resource_path(self, relative_path): - """ - NOTE: This API may change in the future. - - Return the absolute path to a resource file with the given relative - path. - - :param relative_path: The path, relative to .dist-info, of the resource - of interest. - :return: The absolute path where the resource is to be found. - """ - r = self.get_distinfo_resource('RESOURCES') - with contextlib.closing(r.as_stream()) as stream: - with CSVReader(stream=stream) as resources_reader: - for relative, destination in resources_reader: - if relative == relative_path: - return destination - raise KeyError('no resource file with relative path %r ' - 'is installed' % relative_path) - - def list_installed_files(self): - """ - Iterates over the ``RECORD`` entries and returns a tuple - ``(path, hash, size)`` for each line. - - :returns: iterator of (path, hash, size) - """ - for result in self._get_records(): - yield result - - def write_installed_files(self, paths, prefix, dry_run=False): - """ - Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any - existing ``RECORD`` file is silently overwritten. - - prefix is used to determine when to write absolute paths. - """ - prefix = os.path.join(prefix, '') - base = os.path.dirname(self.path) - base_under_prefix = base.startswith(prefix) - base = os.path.join(base, '') - record_path = self.get_distinfo_file('RECORD') - logger.info('creating %s', record_path) - if dry_run: - return None - with CSVWriter(record_path) as writer: - for path in paths: - if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): - # do not put size and hash, as in PEP-376 - hash_value = size = '' - else: - size = '%d' % os.path.getsize(path) - with open(path, 'rb') as fp: - hash_value = self.get_hash(fp.read()) - if path.startswith(base) or (base_under_prefix and - path.startswith(prefix)): - path = os.path.relpath(path, base) - writer.writerow((path, hash_value, size)) - - # add the RECORD file itself - if record_path.startswith(base): - record_path = os.path.relpath(record_path, base) - writer.writerow((record_path, '', '')) - return record_path - - def check_installed_files(self): - """ - Checks that the hashes and sizes of the files in ``RECORD`` are - matched by the files themselves. Returns a (possibly empty) list of - mismatches. Each entry in the mismatch list will be a tuple consisting - of the path, 'exists', 'size' or 'hash' according to what didn't match - (existence is checked first, then size, then hash), the expected - value and the actual value. - """ - mismatches = [] - base = os.path.dirname(self.path) - record_path = self.get_distinfo_file('RECORD') - for path, hash_value, size in self.list_installed_files(): - if not os.path.isabs(path): - path = os.path.join(base, path) - if path == record_path: - continue - if not os.path.exists(path): - mismatches.append((path, 'exists', True, False)) - elif os.path.isfile(path): - actual_size = str(os.path.getsize(path)) - if size and actual_size != size: - mismatches.append((path, 'size', size, actual_size)) - elif hash_value: - if '=' in hash_value: - hasher = hash_value.split('=', 1)[0] - else: - hasher = None - - with open(path, 'rb') as f: - actual_hash = self.get_hash(f.read(), hasher) - if actual_hash != hash_value: - mismatches.append((path, 'hash', hash_value, actual_hash)) - return mismatches - - @cached_property - def shared_locations(self): - """ - A dictionary of shared locations whose keys are in the set 'prefix', - 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. - The corresponding value is the absolute path of that category for - this distribution, and takes into account any paths selected by the - user at installation time (e.g. via command-line arguments). In the - case of the 'namespace' key, this would be a list of absolute paths - for the roots of namespace packages in this distribution. - - The first time this property is accessed, the relevant information is - read from the SHARED file in the .dist-info directory. - """ - result = {} - shared_path = os.path.join(self.path, 'SHARED') - if os.path.isfile(shared_path): - with codecs.open(shared_path, 'r', encoding='utf-8') as f: - lines = f.read().splitlines() - for line in lines: - key, value = line.split('=', 1) - if key == 'namespace': - result.setdefault(key, []).append(value) - else: - result[key] = value - return result - - def write_shared_locations(self, paths, dry_run=False): - """ - Write shared location information to the SHARED file in .dist-info. - :param paths: A dictionary as described in the documentation for - :meth:`shared_locations`. - :param dry_run: If True, the action is logged but no file is actually - written. - :return: The path of the file written to. - """ - shared_path = os.path.join(self.path, 'SHARED') - logger.info('creating %s', shared_path) - if dry_run: - return None - lines = [] - for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): - path = paths[key] - if os.path.isdir(paths[key]): - lines.append('%s=%s' % (key, path)) - for ns in paths.get('namespace', ()): - lines.append('namespace=%s' % ns) - - with codecs.open(shared_path, 'w', encoding='utf-8') as f: - f.write('\n'.join(lines)) - return shared_path - - def get_distinfo_resource(self, path): - if path not in DIST_FILES: - raise DistlibException('invalid path for a dist-info file: ' - '%r at %r' % (path, self.path)) - finder = resources.finder_for_path(self.path) - if finder is None: - raise DistlibException('Unable to get a finder for %s' % self.path) - return finder.find(path) - - def get_distinfo_file(self, path): - """ - Returns a path located under the ``.dist-info`` directory. Returns a - string representing the path. - - :parameter path: a ``'/'``-separated path relative to the - ``.dist-info`` directory or an absolute path; - If *path* is an absolute path and doesn't start - with the ``.dist-info`` directory path, - a :class:`DistlibException` is raised - :type path: str - :rtype: str - """ - # Check if it is an absolute path # XXX use relpath, add tests - if path.find(os.sep) >= 0: - # it's an absolute path? - distinfo_dirname, path = path.split(os.sep)[-2:] - if distinfo_dirname != self.path.split(os.sep)[-1]: - raise DistlibException( - 'dist-info file %r does not belong to the %r %s ' - 'distribution' % (path, self.name, self.version)) - - # The file must be relative - if path not in DIST_FILES: - raise DistlibException('invalid path for a dist-info file: ' - '%r at %r' % (path, self.path)) - - return os.path.join(self.path, path) - - def list_distinfo_files(self): - """ - Iterates over the ``RECORD`` entries and returns paths for each line if - the path is pointing to a file located in the ``.dist-info`` directory - or one of its subdirectories. - - :returns: iterator of paths - """ - base = os.path.dirname(self.path) - for path, checksum, size in self._get_records(): - # XXX add separator or use real relpath algo - if not os.path.isabs(path): - path = os.path.join(base, path) - if path.startswith(self.path): - yield path - - def __eq__(self, other): - return (isinstance(other, InstalledDistribution) and - self.path == other.path) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - __hash__ = object.__hash__ - - -class EggInfoDistribution(BaseInstalledDistribution): - """Created with the *path* of the ``.egg-info`` directory or file provided - to the constructor. It reads the metadata contained in the file itself, or - if the given path happens to be a directory, the metadata is read from the - file ``PKG-INFO`` under that directory.""" - - requested = True # as we have no way of knowing, assume it was - shared_locations = {} - - def __init__(self, path, env=None): - def set_name_and_version(s, n, v): - s.name = n - s.key = n.lower() # for case-insensitive comparisons - s.version = v - - self.path = path - self.dist_path = env - if env and env._cache_enabled and path in env._cache_egg.path: - metadata = env._cache_egg.path[path].metadata - set_name_and_version(self, metadata.name, metadata.version) - else: - metadata = self._get_metadata(path) - - # Need to be set before caching - set_name_and_version(self, metadata.name, metadata.version) - - if env and env._cache_enabled: - env._cache_egg.add(self) - super(EggInfoDistribution, self).__init__(metadata, path, env) - - def _get_metadata(self, path): - requires = None - - def parse_requires_data(data): - """Create a list of dependencies from a requires.txt file. - - *data*: the contents of a setuptools-produced requires.txt file. - """ - reqs = [] - lines = data.splitlines() - for line in lines: - line = line.strip() - if line.startswith('['): - logger.warning('Unexpected line: quitting requirement scan: %r', - line) - break - r = parse_requirement(line) - if not r: - logger.warning('Not recognised as a requirement: %r', line) - continue - if r.extras: - logger.warning('extra requirements in requires.txt are ' - 'not supported') - if not r.constraints: - reqs.append(r.name) - else: - cons = ', '.join('%s%s' % c for c in r.constraints) - reqs.append('%s (%s)' % (r.name, cons)) - return reqs - - def parse_requires_path(req_path): - """Create a list of dependencies from a requires.txt file. - - *req_path*: the path to a setuptools-produced requires.txt file. - """ - - reqs = [] - try: - with codecs.open(req_path, 'r', 'utf-8') as fp: - reqs = parse_requires_data(fp.read()) - except IOError: - pass - return reqs - - tl_path = tl_data = None - if path.endswith('.egg'): - if os.path.isdir(path): - p = os.path.join(path, 'EGG-INFO') - meta_path = os.path.join(p, 'PKG-INFO') - metadata = Metadata(path=meta_path, scheme='legacy') - req_path = os.path.join(p, 'requires.txt') - tl_path = os.path.join(p, 'top_level.txt') - requires = parse_requires_path(req_path) - else: - # FIXME handle the case where zipfile is not available - zipf = zipimport.zipimporter(path) - fileobj = StringIO( - zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) - metadata = Metadata(fileobj=fileobj, scheme='legacy') - try: - data = zipf.get_data('EGG-INFO/requires.txt') - tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode('utf-8') - requires = parse_requires_data(data.decode('utf-8')) - except IOError: - requires = None - elif path.endswith('.egg-info'): - if os.path.isdir(path): - req_path = os.path.join(path, 'requires.txt') - requires = parse_requires_path(req_path) - path = os.path.join(path, 'PKG-INFO') - tl_path = os.path.join(path, 'top_level.txt') - metadata = Metadata(path=path, scheme='legacy') - else: - raise DistlibException('path must end with .egg-info or .egg, ' - 'got %r' % path) - - if requires: - metadata.add_requirements(requires) - # look for top-level modules in top_level.txt, if present - if tl_data is None: - if tl_path is not None and os.path.exists(tl_path): - with open(tl_path, 'rb') as f: - tl_data = f.read().decode('utf-8') - if not tl_data: - tl_data = [] - else: - tl_data = tl_data.splitlines() - self.modules = tl_data - return metadata - - def __repr__(self): - return '<EggInfoDistribution %r %s at %r>' % ( - self.name, self.version, self.path) - - def __str__(self): - return "%s %s" % (self.name, self.version) - - def check_installed_files(self): - """ - Checks that the hashes and sizes of the files in ``RECORD`` are - matched by the files themselves. Returns a (possibly empty) list of - mismatches. Each entry in the mismatch list will be a tuple consisting - of the path, 'exists', 'size' or 'hash' according to what didn't match - (existence is checked first, then size, then hash), the expected - value and the actual value. - """ - mismatches = [] - record_path = os.path.join(self.path, 'installed-files.txt') - if os.path.exists(record_path): - for path, _, _ in self.list_installed_files(): - if path == record_path: - continue - if not os.path.exists(path): - mismatches.append((path, 'exists', True, False)) - return mismatches - - def list_installed_files(self): - """ - Iterates over the ``installed-files.txt`` entries and returns a tuple - ``(path, hash, size)`` for each line. - - :returns: a list of (path, hash, size) - """ - - def _md5(path): - f = open(path, 'rb') - try: - content = f.read() - finally: - f.close() - return hashlib.md5(content).hexdigest() - - def _size(path): - return os.stat(path).st_size - - record_path = os.path.join(self.path, 'installed-files.txt') - result = [] - if os.path.exists(record_path): - with codecs.open(record_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - p = os.path.normpath(os.path.join(self.path, line)) - # "./" is present as a marker between installed files - # and installation metadata files - if not os.path.exists(p): - logger.warning('Non-existent file: %s', p) - if p.endswith(('.pyc', '.pyo')): - continue - #otherwise fall through and fail - if not os.path.isdir(p): - result.append((p, _md5(p), _size(p))) - result.append((record_path, None, None)) - return result - - def list_distinfo_files(self, absolute=False): - """ - Iterates over the ``installed-files.txt`` entries and returns paths for - each line if the path is pointing to a file located in the - ``.egg-info`` directory or one of its subdirectories. - - :parameter absolute: If *absolute* is ``True``, each returned path is - transformed into a local absolute path. Otherwise the - raw value from ``installed-files.txt`` is returned. - :type absolute: boolean - :returns: iterator of paths - """ - record_path = os.path.join(self.path, 'installed-files.txt') - if os.path.exists(record_path): - skip = True - with codecs.open(record_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - if line == './': - skip = False - continue - if not skip: - p = os.path.normpath(os.path.join(self.path, line)) - if p.startswith(self.path): - if absolute: - yield p - else: - yield line - - def __eq__(self, other): - return (isinstance(other, EggInfoDistribution) and - self.path == other.path) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - __hash__ = object.__hash__ - -new_dist_class = InstalledDistribution -old_dist_class = EggInfoDistribution - - -class DependencyGraph(object): - """ - Represents a dependency graph between distributions. - - The dependency relationships are stored in an ``adjacency_list`` that maps - distributions to a list of ``(other, label)`` tuples where ``other`` - is a distribution and the edge is labeled with ``label`` (i.e. the version - specifier, if such was provided). Also, for more efficient traversal, for - every distribution ``x``, a list of predecessors is kept in - ``reverse_list[x]``. An edge from distribution ``a`` to - distribution ``b`` means that ``a`` depends on ``b``. If any missing - dependencies are found, they are stored in ``missing``, which is a - dictionary that maps distributions to a list of requirements that were not - provided by any other distributions. - """ - - def __init__(self): - self.adjacency_list = {} - self.reverse_list = {} - self.missing = {} - - def add_distribution(self, distribution): - """Add the *distribution* to the graph. - - :type distribution: :class:`distutils2.database.InstalledDistribution` - or :class:`distutils2.database.EggInfoDistribution` - """ - self.adjacency_list[distribution] = [] - self.reverse_list[distribution] = [] - #self.missing[distribution] = [] - - def add_edge(self, x, y, label=None): - """Add an edge from distribution *x* to distribution *y* with the given - *label*. - - :type x: :class:`distutils2.database.InstalledDistribution` or - :class:`distutils2.database.EggInfoDistribution` - :type y: :class:`distutils2.database.InstalledDistribution` or - :class:`distutils2.database.EggInfoDistribution` - :type label: ``str`` or ``None`` - """ - self.adjacency_list[x].append((y, label)) - # multiple edges are allowed, so be careful - if x not in self.reverse_list[y]: - self.reverse_list[y].append(x) - - def add_missing(self, distribution, requirement): - """ - Add a missing *requirement* for the given *distribution*. - - :type distribution: :class:`distutils2.database.InstalledDistribution` - or :class:`distutils2.database.EggInfoDistribution` - :type requirement: ``str`` - """ - logger.debug('%s missing %r', distribution, requirement) - self.missing.setdefault(distribution, []).append(requirement) - - def _repr_dist(self, dist): - return '%s %s' % (dist.name, dist.version) - - def repr_node(self, dist, level=1): - """Prints only a subgraph""" - output = [self._repr_dist(dist)] - for other, label in self.adjacency_list[dist]: - dist = self._repr_dist(other) - if label is not None: - dist = '%s [%s]' % (dist, label) - output.append(' ' * level + str(dist)) - suboutput = self.repr_node(other, level + 1) - subs = suboutput.split('\n') - output.extend(subs[1:]) - return '\n'.join(output) - - def to_dot(self, f, skip_disconnected=True): - """Writes a DOT output for the graph to the provided file *f*. - - If *skip_disconnected* is set to ``True``, then all distributions - that are not dependent on any other distribution are skipped. - - :type f: has to support ``file``-like operations - :type skip_disconnected: ``bool`` - """ - disconnected = [] - - f.write("digraph dependencies {\n") - for dist, adjs in self.adjacency_list.items(): - if len(adjs) == 0 and not skip_disconnected: - disconnected.append(dist) - for other, label in adjs: - if not label is None: - f.write('"%s" -> "%s" [label="%s"]\n' % - (dist.name, other.name, label)) - else: - f.write('"%s" -> "%s"\n' % (dist.name, other.name)) - if not skip_disconnected and len(disconnected) > 0: - f.write('subgraph disconnected {\n') - f.write('label = "Disconnected"\n') - f.write('bgcolor = red\n') - - for dist in disconnected: - f.write('"%s"' % dist.name) - f.write('\n') - f.write('}\n') - f.write('}\n') - - def topological_sort(self): - """ - Perform a topological sort of the graph. - :return: A tuple, the first element of which is a topologically sorted - list of distributions, and the second element of which is a - list of distributions that cannot be sorted because they have - circular dependencies and so form a cycle. - """ - result = [] - # Make a shallow copy of the adjacency list - alist = {} - for k, v in self.adjacency_list.items(): - alist[k] = v[:] - while True: - # See what we can remove in this run - to_remove = [] - for k, v in list(alist.items())[:]: - if not v: - to_remove.append(k) - del alist[k] - if not to_remove: - # What's left in alist (if anything) is a cycle. - break - # Remove from the adjacency list of others - for k, v in alist.items(): - alist[k] = [(d, r) for d, r in v if d not in to_remove] - logger.debug('Moving to result: %s', - ['%s (%s)' % (d.name, d.version) for d in to_remove]) - result.extend(to_remove) - return result, list(alist.keys()) - - def __repr__(self): - """Representation of the graph""" - output = [] - for dist, adjs in self.adjacency_list.items(): - output.append(self.repr_node(dist)) - return '\n'.join(output) - - -def make_graph(dists, scheme='default'): - """Makes a dependency graph from the given distributions. - - :parameter dists: a list of distributions - :type dists: list of :class:`distutils2.database.InstalledDistribution` and - :class:`distutils2.database.EggInfoDistribution` instances - :rtype: a :class:`DependencyGraph` instance - """ - scheme = get_scheme(scheme) - graph = DependencyGraph() - provided = {} # maps names to lists of (version, dist) tuples - - # first, build the graph and find out what's provided - for dist in dists: - graph.add_distribution(dist) - - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Add to provided: %s, %s, %s', name, version, dist) - provided.setdefault(name, []).append((version, dist)) - - # now make the edges - for dist in dists: - requires = (dist.run_requires | dist.meta_requires | - dist.build_requires | dist.dev_requires) - for req in requires: - try: - matcher = scheme.matcher(req) - except UnsupportedVersionError: - # XXX compat-mode if cannot read the version - logger.warning('could not read version %r - using name only', - req) - name = req.split()[0] - matcher = scheme.matcher(name) - - name = matcher.key # case-insensitive - - matched = False - if name in provided: - for version, provider in provided[name]: - try: - match = matcher.match(version) - except UnsupportedVersionError: - match = False - - if match: - graph.add_edge(dist, provider, req) - matched = True - break - if not matched: - graph.add_missing(dist, req) - return graph - - -def get_dependent_dists(dists, dist): - """Recursively generate a list of distributions from *dists* that are - dependent on *dist*. - - :param dists: a list of distributions - :param dist: a distribution, member of *dists* for which we are interested - """ - if dist not in dists: - raise DistlibException('given distribution %r is not a member ' - 'of the list' % dist.name) - graph = make_graph(dists) - - dep = [dist] # dependent distributions - todo = graph.reverse_list[dist] # list of nodes we should inspect - - while todo: - d = todo.pop() - dep.append(d) - for succ in graph.reverse_list[d]: - if succ not in dep: - todo.append(succ) - - dep.pop(0) # remove dist from dep, was there to prevent infinite loops - return dep - - -def get_required_dists(dists, dist): - """Recursively generate a list of distributions from *dists* that are - required by *dist*. - - :param dists: a list of distributions - :param dist: a distribution, member of *dists* for which we are interested - """ - if dist not in dists: - raise DistlibException('given distribution %r is not a member ' - 'of the list' % dist.name) - graph = make_graph(dists) - - req = [] # required distributions - todo = graph.adjacency_list[dist] # list of nodes we should inspect - - while todo: - d = todo.pop()[0] - req.append(d) - for pred in graph.adjacency_list[d]: - if pred not in req: - todo.append(pred) - - return req - - -def make_dist(name, version, **kwargs): - """ - A convenience method for making a dist given just a name and version. - """ - summary = kwargs.pop('summary', 'Placeholder for summary') - md = Metadata(**kwargs) - md.name = name - md.version = version - md.summary = summary or 'Placeholder for summary' - return Distribution(md) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/index.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/index.py deleted file mode 100644 index 2406be2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/index.py +++ /dev/null @@ -1,516 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import hashlib -import logging -import os -import shutil -import subprocess -import tempfile -try: - from threading import Thread -except ImportError: - from dummy_threading import Thread - -from . import DistlibException -from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, - urlparse, build_opener, string_types) -from .util import cached_property, zip_dir, ServerProxy - -logger = logging.getLogger(__name__) - -DEFAULT_INDEX = 'https://pypi.python.org/pypi' -DEFAULT_REALM = 'pypi' - -class PackageIndex(object): - """ - This class represents a package index compatible with PyPI, the Python - Package Index. - """ - - boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' - - def __init__(self, url=None): - """ - Initialise an instance. - - :param url: The URL of the index. If not specified, the URL for PyPI is - used. - """ - self.url = url or DEFAULT_INDEX - self.read_configuration() - scheme, netloc, path, params, query, frag = urlparse(self.url) - if params or query or frag or scheme not in ('http', 'https'): - raise DistlibException('invalid repository: %s' % self.url) - self.password_handler = None - self.ssl_verifier = None - self.gpg = None - self.gpg_home = None - with open(os.devnull, 'w') as sink: - # Use gpg by default rather than gpg2, as gpg2 insists on - # prompting for passwords - for s in ('gpg', 'gpg2'): - try: - rc = subprocess.check_call([s, '--version'], stdout=sink, - stderr=sink) - if rc == 0: - self.gpg = s - break - except OSError: - pass - - def _get_pypirc_command(self): - """ - Get the distutils command for interacting with PyPI configurations. - :return: the command. - """ - from distutils.core import Distribution - from distutils.config import PyPIRCCommand - d = Distribution() - return PyPIRCCommand(d) - - def read_configuration(self): - """ - Read the PyPI access configuration as supported by distutils, getting - PyPI to do the actual work. This populates ``username``, ``password``, - ``realm`` and ``url`` attributes from the configuration. - """ - # get distutils to do the work - c = self._get_pypirc_command() - c.repository = self.url - cfg = c._read_pypirc() - self.username = cfg.get('username') - self.password = cfg.get('password') - self.realm = cfg.get('realm', 'pypi') - self.url = cfg.get('repository', self.url) - - def save_configuration(self): - """ - Save the PyPI access configuration. You must have set ``username`` and - ``password`` attributes before calling this method. - - Again, distutils is used to do the actual work. - """ - self.check_credentials() - # get distutils to do the work - c = self._get_pypirc_command() - c._store_pypirc(self.username, self.password) - - def check_credentials(self): - """ - Check that ``username`` and ``password`` have been set, and raise an - exception if not. - """ - if self.username is None or self.password is None: - raise DistlibException('username and password must be set') - pm = HTTPPasswordMgr() - _, netloc, _, _, _, _ = urlparse(self.url) - pm.add_password(self.realm, netloc, self.username, self.password) - self.password_handler = HTTPBasicAuthHandler(pm) - - def register(self, metadata): - """ - Register a distribution on PyPI, using the provided metadata. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the distribution to be - registered. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - metadata.validate() - d = metadata.todict() - d[':action'] = 'verify' - request = self.encode_request(d.items(), []) - response = self.send_request(request) - d[':action'] = 'submit' - request = self.encode_request(d.items(), []) - return self.send_request(request) - - def _reader(self, name, stream, outbuf): - """ - Thread runner for reading lines of from a subprocess into a buffer. - - :param name: The logical name of the stream (used for logging only). - :param stream: The stream to read from. This will typically a pipe - connected to the output stream of a subprocess. - :param outbuf: The list to append the read lines to. - """ - while True: - s = stream.readline() - if not s: - break - s = s.decode('utf-8').rstrip() - outbuf.append(s) - logger.debug('%s: %s' % (name, s)) - stream.close() - - def get_sign_command(self, filename, signer, sign_password, - keystore=None): - """ - Return a suitable command for signing a file. - - :param filename: The pathname to the file to be signed. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: The signing command as a list suitable to be - passed to :class:`subprocess.Popen`. - """ - cmd = [self.gpg, '--status-fd', '2', '--no-tty'] - if keystore is None: - keystore = self.gpg_home - if keystore: - cmd.extend(['--homedir', keystore]) - if sign_password is not None: - cmd.extend(['--batch', '--passphrase-fd', '0']) - td = tempfile.mkdtemp() - sf = os.path.join(td, os.path.basename(filename) + '.asc') - cmd.extend(['--detach-sign', '--armor', '--local-user', - signer, '--output', sf, filename]) - logger.debug('invoking: %s', ' '.join(cmd)) - return cmd, sf - - def run_command(self, cmd, input_data=None): - """ - Run a command in a child process , passing it any input data specified. - - :param cmd: The command to run. - :param input_data: If specified, this must be a byte string containing - data to be sent to the child process. - :return: A tuple consisting of the subprocess' exit code, a list of - lines read from the subprocess' ``stdout``, and a list of - lines read from the subprocess' ``stderr``. - """ - kwargs = { - 'stdout': subprocess.PIPE, - 'stderr': subprocess.PIPE, - } - if input_data is not None: - kwargs['stdin'] = subprocess.PIPE - stdout = [] - stderr = [] - p = subprocess.Popen(cmd, **kwargs) - # We don't use communicate() here because we may need to - # get clever with interacting with the command - t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) - t1.start() - t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) - t2.start() - if input_data is not None: - p.stdin.write(input_data) - p.stdin.close() - - p.wait() - t1.join() - t2.join() - return p.returncode, stdout, stderr - - def sign_file(self, filename, signer, sign_password, keystore=None): - """ - Sign a file. - - :param filename: The pathname to the file to be signed. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param keystore: The path to a directory which contains the keys - used in signing. If not specified, the instance's - ``gpg_home`` attribute is used instead. - :return: The absolute pathname of the file where the signature is - stored. - """ - cmd, sig_file = self.get_sign_command(filename, signer, sign_password, - keystore) - rc, stdout, stderr = self.run_command(cmd, - sign_password.encode('utf-8')) - if rc != 0: - raise DistlibException('sign command failed with error ' - 'code %s' % rc) - return sig_file - - def upload_file(self, metadata, filename, signer=None, sign_password=None, - filetype='sdist', pyversion='source', keystore=None): - """ - Upload a release file to the index. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the file to be uploaded. - :param filename: The pathname of the file to be uploaded. - :param signer: The identifier of the signer of the file. - :param sign_password: The passphrase for the signer's - private key used for signing. - :param filetype: The type of the file being uploaded. This is the - distutils command which produced that file, e.g. - ``sdist`` or ``bdist_wheel``. - :param pyversion: The version of Python which the release relates - to. For code compatible with any Python, this would - be ``source``, otherwise it would be e.g. ``3.2``. - :param keystore: The path to a directory which contains the keys - used in signing. If not specified, the instance's - ``gpg_home`` attribute is used instead. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - if not os.path.exists(filename): - raise DistlibException('not found: %s' % filename) - metadata.validate() - d = metadata.todict() - sig_file = None - if signer: - if not self.gpg: - logger.warning('no signing program available - not signed') - else: - sig_file = self.sign_file(filename, signer, sign_password, - keystore) - with open(filename, 'rb') as f: - file_data = f.read() - md5_digest = hashlib.md5(file_data).hexdigest() - sha256_digest = hashlib.sha256(file_data).hexdigest() - d.update({ - ':action': 'file_upload', - 'protocol_version': '1', - 'filetype': filetype, - 'pyversion': pyversion, - 'md5_digest': md5_digest, - 'sha256_digest': sha256_digest, - }) - files = [('content', os.path.basename(filename), file_data)] - if sig_file: - with open(sig_file, 'rb') as f: - sig_data = f.read() - files.append(('gpg_signature', os.path.basename(sig_file), - sig_data)) - shutil.rmtree(os.path.dirname(sig_file)) - request = self.encode_request(d.items(), files) - return self.send_request(request) - - def upload_documentation(self, metadata, doc_dir): - """ - Upload documentation to the index. - - :param metadata: A :class:`Metadata` instance defining at least a name - and version number for the documentation to be - uploaded. - :param doc_dir: The pathname of the directory which contains the - documentation. This should be the directory that - contains the ``index.html`` for the documentation. - :return: The HTTP response received from PyPI upon submission of the - request. - """ - self.check_credentials() - if not os.path.isdir(doc_dir): - raise DistlibException('not a directory: %r' % doc_dir) - fn = os.path.join(doc_dir, 'index.html') - if not os.path.exists(fn): - raise DistlibException('not found: %r' % fn) - metadata.validate() - name, version = metadata.name, metadata.version - zip_data = zip_dir(doc_dir).getvalue() - fields = [(':action', 'doc_upload'), - ('name', name), ('version', version)] - files = [('content', name, zip_data)] - request = self.encode_request(fields, files) - return self.send_request(request) - - def get_verify_command(self, signature_filename, data_filename, - keystore=None): - """ - Return a suitable command for verifying a file. - - :param signature_filename: The pathname to the file containing the - signature. - :param data_filename: The pathname to the file containing the - signed data. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: The verifying command as a list suitable to be - passed to :class:`subprocess.Popen`. - """ - cmd = [self.gpg, '--status-fd', '2', '--no-tty'] - if keystore is None: - keystore = self.gpg_home - if keystore: - cmd.extend(['--homedir', keystore]) - cmd.extend(['--verify', signature_filename, data_filename]) - logger.debug('invoking: %s', ' '.join(cmd)) - return cmd - - def verify_signature(self, signature_filename, data_filename, - keystore=None): - """ - Verify a signature for a file. - - :param signature_filename: The pathname to the file containing the - signature. - :param data_filename: The pathname to the file containing the - signed data. - :param keystore: The path to a directory which contains the keys - used in verification. If not specified, the - instance's ``gpg_home`` attribute is used instead. - :return: True if the signature was verified, else False. - """ - if not self.gpg: - raise DistlibException('verification unavailable because gpg ' - 'unavailable') - cmd = self.get_verify_command(signature_filename, data_filename, - keystore) - rc, stdout, stderr = self.run_command(cmd) - if rc not in (0, 1): - raise DistlibException('verify command failed with error ' - 'code %s' % rc) - return rc == 0 - - def download_file(self, url, destfile, digest=None, reporthook=None): - """ - This is a convenience method for downloading a file from an URL. - Normally, this will be a file from the index, though currently - no check is made for this (i.e. a file can be downloaded from - anywhere). - - The method is just like the :func:`urlretrieve` function in the - standard library, except that it allows digest computation to be - done during download and checking that the downloaded data - matched any expected value. - - :param url: The URL of the file to be downloaded (assumed to be - available via an HTTP GET request). - :param destfile: The pathname where the downloaded file is to be - saved. - :param digest: If specified, this must be a (hasher, value) - tuple, where hasher is the algorithm used (e.g. - ``'md5'``) and ``value`` is the expected value. - :param reporthook: The same as for :func:`urlretrieve` in the - standard library. - """ - if digest is None: - digester = None - logger.debug('No digest specified') - else: - if isinstance(digest, (list, tuple)): - hasher, digest = digest - else: - hasher = 'md5' - digester = getattr(hashlib, hasher)() - logger.debug('Digest specified: %s' % digest) - # The following code is equivalent to urlretrieve. - # We need to do it this way so that we can compute the - # digest of the file as we go. - with open(destfile, 'wb') as dfp: - # addinfourl is not a context manager on 2.x - # so we have to use try/finally - sfp = self.send_request(Request(url)) - try: - headers = sfp.info() - blocksize = 8192 - size = -1 - read = 0 - blocknum = 0 - if "content-length" in headers: - size = int(headers["Content-Length"]) - if reporthook: - reporthook(blocknum, blocksize, size) - while True: - block = sfp.read(blocksize) - if not block: - break - read += len(block) - dfp.write(block) - if digester: - digester.update(block) - blocknum += 1 - if reporthook: - reporthook(blocknum, blocksize, size) - finally: - sfp.close() - - # check that we got the whole file, if we can - if size >= 0 and read < size: - raise DistlibException( - 'retrieval incomplete: got only %d out of %d bytes' - % (read, size)) - # if we have a digest, it must match. - if digester: - actual = digester.hexdigest() - if digest != actual: - raise DistlibException('%s digest mismatch for %s: expected ' - '%s, got %s' % (hasher, destfile, - digest, actual)) - logger.debug('Digest verified: %s', digest) - - def send_request(self, req): - """ - Send a standard library :class:`Request` to PyPI and return its - response. - - :param req: The request to send. - :return: The HTTP response from PyPI (a standard library HTTPResponse). - """ - handlers = [] - if self.password_handler: - handlers.append(self.password_handler) - if self.ssl_verifier: - handlers.append(self.ssl_verifier) - opener = build_opener(*handlers) - return opener.open(req) - - def encode_request(self, fields, files): - """ - Encode fields and files for posting to an HTTP server. - - :param fields: The fields to send as a list of (fieldname, value) - tuples. - :param files: The files to send as a list of (fieldname, filename, - file_bytes) tuple. - """ - # Adapted from packaging, which in turn was adapted from - # http://code.activestate.com/recipes/146306 - - parts = [] - boundary = self.boundary - for k, values in fields: - if not isinstance(values, (list, tuple)): - values = [values] - - for v in values: - parts.extend(( - b'--' + boundary, - ('Content-Disposition: form-data; name="%s"' % - k).encode('utf-8'), - b'', - v.encode('utf-8'))) - for key, filename, value in files: - parts.extend(( - b'--' + boundary, - ('Content-Disposition: form-data; name="%s"; filename="%s"' % - (key, filename)).encode('utf-8'), - b'', - value)) - - parts.extend((b'--' + boundary + b'--', b'')) - - body = b'\r\n'.join(parts) - ct = b'multipart/form-data; boundary=' + boundary - headers = { - 'Content-type': ct, - 'Content-length': str(len(body)) - } - return Request(self.url, body, headers) - - def search(self, terms, operator=None): - if isinstance(terms, string_types): - terms = {'name': terms} - rpc_proxy = ServerProxy(self.url, timeout=3.0) - try: - return rpc_proxy.search(terms, operator or 'and') - finally: - rpc_proxy('close')() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/locators.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/locators.py deleted file mode 100644 index 11d2636..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/locators.py +++ /dev/null @@ -1,1292 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2015 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# - -import gzip -from io import BytesIO -import json -import logging -import os -import posixpath -import re -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import zlib - -from . import DistlibException -from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, - queue, quote, unescape, string_types, build_opener, - HTTPRedirectHandler as BaseRedirectHandler, text_type, - Request, HTTPError, URLError) -from .database import Distribution, DistributionPath, make_dist -from .metadata import Metadata, MetadataInvalidError -from .util import (cached_property, parse_credentials, ensure_slash, - split_filename, get_project_data, parse_requirement, - parse_name_and_version, ServerProxy, normalize_name) -from .version import get_scheme, UnsupportedVersionError -from .wheel import Wheel, is_compatible - -logger = logging.getLogger(__name__) - -HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') -CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) -HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') -DEFAULT_INDEX = 'https://pypi.python.org/pypi' - -def get_all_distribution_names(url=None): - """ - Return all distribution names known by an index. - :param url: The URL of the index. - :return: A list of all known distribution names. - """ - if url is None: - url = DEFAULT_INDEX - client = ServerProxy(url, timeout=3.0) - try: - return client.list_packages() - finally: - client('close')() - -class RedirectHandler(BaseRedirectHandler): - """ - A class to work around a bug in some Python 3.2.x releases. - """ - # There's a bug in the base version for some 3.2.x - # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header - # returns e.g. /abc, it bails because it says the scheme '' - # is bogus, when actually it should use the request's - # URL for the scheme. See Python issue #13696. - def http_error_302(self, req, fp, code, msg, headers): - # Some servers (incorrectly) return multiple Location headers - # (so probably same goes for URI). Use first header. - newurl = None - for key in ('location', 'uri'): - if key in headers: - newurl = headers[key] - break - if newurl is None: # pragma: no cover - return - urlparts = urlparse(newurl) - if urlparts.scheme == '': - newurl = urljoin(req.get_full_url(), newurl) - if hasattr(headers, 'replace_header'): - headers.replace_header(key, newurl) - else: - headers[key] = newurl - return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, - headers) - - http_error_301 = http_error_303 = http_error_307 = http_error_302 - -class Locator(object): - """ - A base class for locators - things that locate distributions. - """ - source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') - binary_extensions = ('.egg', '.exe', '.whl') - excluded_extensions = ('.pdf',) - - # A list of tags indicating which wheels you want to match. The default - # value of None matches against the tags compatible with the running - # Python. If you want to match other values, set wheel_tags on a locator - # instance to a list of tuples (pyver, abi, arch) which you want to match. - wheel_tags = None - - downloadable_extensions = source_extensions + ('.whl',) - - def __init__(self, scheme='default'): - """ - Initialise an instance. - :param scheme: Because locators look for most recent versions, they - need to know the version scheme to use. This specifies - the current PEP-recommended scheme - use ``'legacy'`` - if you need to support existing distributions on PyPI. - """ - self._cache = {} - self.scheme = scheme - # Because of bugs in some of the handlers on some of the platforms, - # we use our own opener rather than just using urlopen. - self.opener = build_opener(RedirectHandler()) - # If get_project() is called from locate(), the matcher instance - # is set from the requirement passed to locate(). See issue #18 for - # why this can be useful to know. - self.matcher = None - self.errors = queue.Queue() - - def get_errors(self): - """ - Return any errors which have occurred. - """ - result = [] - while not self.errors.empty(): # pragma: no cover - try: - e = self.errors.get(False) - result.append(e) - except self.errors.Empty: - continue - self.errors.task_done() - return result - - def clear_errors(self): - """ - Clear any errors which may have been logged. - """ - # Just get the errors and throw them away - self.get_errors() - - def clear_cache(self): - self._cache.clear() - - def _get_scheme(self): - return self._scheme - - def _set_scheme(self, value): - self._scheme = value - - scheme = property(_get_scheme, _set_scheme) - - def _get_project(self, name): - """ - For a given project, get a dictionary mapping available versions to Distribution - instances. - - This should be implemented in subclasses. - - If called from a locate() request, self.matcher will be set to a - matcher for the requirement to satisfy, otherwise it will be None. - """ - raise NotImplementedError('Please implement in the subclass') - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Please implement in the subclass') - - def get_project(self, name): - """ - For a given project, get a dictionary mapping available versions to Distribution - instances. - - This calls _get_project to do all the work, and just implements a caching layer on top. - """ - if self._cache is None: # pragma: no cover - result = self._get_project(name) - elif name in self._cache: - result = self._cache[name] - else: - self.clear_errors() - result = self._get_project(name) - self._cache[name] = result - return result - - def score_url(self, url): - """ - Give an url a score which can be used to choose preferred URLs - for a given project release. - """ - t = urlparse(url) - basename = posixpath.basename(t.path) - compatible = True - is_wheel = basename.endswith('.whl') - is_downloadable = basename.endswith(self.downloadable_extensions) - if is_wheel: - compatible = is_compatible(Wheel(basename), self.wheel_tags) - return (t.scheme == 'https', 'pypi.python.org' in t.netloc, - is_downloadable, is_wheel, compatible, basename) - - def prefer_url(self, url1, url2): - """ - Choose one of two URLs where both are candidates for distribution - archives for the same version of a distribution (for example, - .tar.gz vs. zip). - - The current implementation favours https:// URLs over http://, archives - from PyPI over those from other locations, wheel compatibility (if a - wheel) and then the archive name. - """ - result = url2 - if url1: - s1 = self.score_url(url1) - s2 = self.score_url(url2) - if s1 > s2: - result = url1 - if result != url2: - logger.debug('Not replacing %r with %r', url1, url2) - else: - logger.debug('Replacing %r with %r', url1, url2) - return result - - def split_filename(self, filename, project_name): - """ - Attempt to split a filename in project name, version and Python version. - """ - return split_filename(filename, project_name) - - def convert_url_to_download_info(self, url, project_name): - """ - See if a URL is a candidate for a download URL for a project (the URL - has typically been scraped from an HTML page). - - If it is, a dictionary is returned with keys "name", "version", - "filename" and "url"; otherwise, None is returned. - """ - def same_project(name1, name2): - return normalize_name(name1) == normalize_name(name2) - - result = None - scheme, netloc, path, params, query, frag = urlparse(url) - if frag.lower().startswith('egg='): # pragma: no cover - logger.debug('%s: version hint in fragment: %r', - project_name, frag) - m = HASHER_HASH.match(frag) - if m: - algo, digest = m.groups() - else: - algo, digest = None, None - origpath = path - if path and path[-1] == '/': # pragma: no cover - path = path[:-1] - if path.endswith('.whl'): - try: - wheel = Wheel(path) - if is_compatible(wheel, self.wheel_tags): - if project_name is None: - include = True - else: - include = same_project(wheel.name, project_name) - if include: - result = { - 'name': wheel.name, - 'version': wheel.version, - 'filename': wheel.filename, - 'url': urlunparse((scheme, netloc, origpath, - params, query, '')), - 'python-version': ', '.join( - ['.'.join(list(v[2:])) for v in wheel.pyver]), - } - except Exception as e: # pragma: no cover - logger.warning('invalid path for wheel: %s', path) - elif not path.endswith(self.downloadable_extensions): # pragma: no cover - logger.debug('Not downloadable: %s', path) - else: # downloadable extension - path = filename = posixpath.basename(path) - for ext in self.downloadable_extensions: - if path.endswith(ext): - path = path[:-len(ext)] - t = self.split_filename(path, project_name) - if not t: # pragma: no cover - logger.debug('No match for project/version: %s', path) - else: - name, version, pyver = t - if not project_name or same_project(project_name, name): - result = { - 'name': name, - 'version': version, - 'filename': filename, - 'url': urlunparse((scheme, netloc, origpath, - params, query, '')), - #'packagetype': 'sdist', - } - if pyver: # pragma: no cover - result['python-version'] = pyver - break - if result and algo: - result['%s_digest' % algo] = digest - return result - - def _get_digest(self, info): - """ - Get a digest from a dictionary by looking at keys of the form - 'algo_digest'. - - Returns a 2-tuple (algo, digest) if found, else None. Currently - looks only for SHA256, then MD5. - """ - result = None - for algo in ('sha256', 'md5'): - key = '%s_digest' % algo - if key in info: - result = (algo, info[key]) - break - return result - - def _update_version_data(self, result, info): - """ - Update a result dictionary (the final result from _get_project) with a - dictionary for a specific version, which typically holds information - gleaned from a filename or URL for an archive for the distribution. - """ - name = info.pop('name') - version = info.pop('version') - if version in result: - dist = result[version] - md = dist.metadata - else: - dist = make_dist(name, version, scheme=self.scheme) - md = dist.metadata - dist.digest = digest = self._get_digest(info) - url = info['url'] - result['digests'][url] = digest - if md.source_url != info['url']: - md.source_url = self.prefer_url(md.source_url, url) - result['urls'].setdefault(version, set()).add(url) - dist.locator = self - result[version] = dist - - def locate(self, requirement, prereleases=False): - """ - Find the most recent distribution which matches the given - requirement. - - :param requirement: A requirement of the form 'foo (1.0)' or perhaps - 'foo (>= 1.0, < 2.0, != 1.3)' - :param prereleases: If ``True``, allow pre-release versions - to be located. Otherwise, pre-release versions - are not returned. - :return: A :class:`Distribution` instance, or ``None`` if no such - distribution could be located. - """ - result = None - r = parse_requirement(requirement) - if r is None: # pragma: no cover - raise DistlibException('Not a valid requirement: %r' % requirement) - scheme = get_scheme(self.scheme) - self.matcher = matcher = scheme.matcher(r.requirement) - logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) - versions = self.get_project(r.name) - if len(versions) > 2: # urls and digests keys are present - # sometimes, versions are invalid - slist = [] - vcls = matcher.version_class - for k in versions: - if k in ('urls', 'digests'): - continue - try: - if not matcher.match(k): - logger.debug('%s did not match %r', matcher, k) - else: - if prereleases or not vcls(k).is_prerelease: - slist.append(k) - else: - logger.debug('skipping pre-release ' - 'version %s of %s', k, matcher.name) - except Exception: # pragma: no cover - logger.warning('error matching %s with %r', matcher, k) - pass # slist.append(k) - if len(slist) > 1: - slist = sorted(slist, key=scheme.key) - if slist: - logger.debug('sorted list: %s', slist) - version = slist[-1] - result = versions[version] - if result: - if r.extras: - result.extras = r.extras - result.download_urls = versions.get('urls', {}).get(version, set()) - d = {} - sd = versions.get('digests', {}) - for url in result.download_urls: - if url in sd: # pragma: no cover - d[url] = sd[url] - result.digests = d - self.matcher = None - return result - - -class PyPIRPCLocator(Locator): - """ - This locator uses XML-RPC to locate distributions. It therefore - cannot be used with simple mirrors (that only mirror file content). - """ - def __init__(self, url, **kwargs): - """ - Initialise an instance. - - :param url: The URL to use for XML-RPC. - :param kwargs: Passed to the superclass constructor. - """ - super(PyPIRPCLocator, self).__init__(**kwargs) - self.base_url = url - self.client = ServerProxy(url, timeout=3.0) - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - return set(self.client.list_packages()) - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - versions = self.client.package_releases(name, True) - for v in versions: - urls = self.client.release_urls(name, v) - data = self.client.release_data(name, v) - metadata = Metadata(scheme=self.scheme) - metadata.name = data['name'] - metadata.version = data['version'] - metadata.license = data.get('license') - metadata.keywords = data.get('keywords', []) - metadata.summary = data.get('summary') - dist = Distribution(metadata) - if urls: - info = urls[0] - metadata.source_url = info['url'] - dist.digest = self._get_digest(info) - dist.locator = self - result[v] = dist - for info in urls: - url = info['url'] - digest = self._get_digest(info) - result['urls'].setdefault(v, set()).add(url) - result['digests'][url] = digest - return result - -class PyPIJSONLocator(Locator): - """ - This locator uses PyPI's JSON interface. It's very limited in functionality - and probably not worth using. - """ - def __init__(self, url, **kwargs): - super(PyPIJSONLocator, self).__init__(**kwargs) - self.base_url = ensure_slash(url) - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Not available from this locator') - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - url = urljoin(self.base_url, '%s/json' % quote(name)) - try: - resp = self.opener.open(url) - data = resp.read().decode() # for now - d = json.loads(data) - md = Metadata(scheme=self.scheme) - data = d['info'] - md.name = data['name'] - md.version = data['version'] - md.license = data.get('license') - md.keywords = data.get('keywords', []) - md.summary = data.get('summary') - dist = Distribution(md) - dist.locator = self - urls = d['urls'] - result[md.version] = dist - for info in d['urls']: - url = info['url'] - dist.download_urls.add(url) - dist.digests[url] = self._get_digest(info) - result['urls'].setdefault(md.version, set()).add(url) - result['digests'][url] = self._get_digest(info) - # Now get other releases - for version, infos in d['releases'].items(): - if version == md.version: - continue # already done - omd = Metadata(scheme=self.scheme) - omd.name = md.name - omd.version = version - odist = Distribution(omd) - odist.locator = self - result[version] = odist - for info in infos: - url = info['url'] - odist.download_urls.add(url) - odist.digests[url] = self._get_digest(info) - result['urls'].setdefault(version, set()).add(url) - result['digests'][url] = self._get_digest(info) -# for info in urls: -# md.source_url = info['url'] -# dist.digest = self._get_digest(info) -# dist.locator = self -# for info in urls: -# url = info['url'] -# result['urls'].setdefault(md.version, set()).add(url) -# result['digests'][url] = self._get_digest(info) - except Exception as e: - self.errors.put(text_type(e)) - logger.exception('JSON fetch failed: %s', e) - return result - - -class Page(object): - """ - This class represents a scraped HTML page. - """ - # The following slightly hairy-looking regex just looks for the contents of - # an anchor link, which has an attribute "href" either immediately preceded - # or immediately followed by a "rel" attribute. The attribute values can be - # declared with double quotes, single quotes or no quotes - which leads to - # the length of the expression. - _href = re.compile(""" -(rel\\s*=\\s*(?:"(?P<rel1>[^"]*)"|'(?P<rel2>[^']*)'|(?P<rel3>[^>\\s\n]*))\\s+)? -href\\s*=\\s*(?:"(?P<url1>[^"]*)"|'(?P<url2>[^']*)'|(?P<url3>[^>\\s\n]*)) -(\\s+rel\\s*=\\s*(?:"(?P<rel4>[^"]*)"|'(?P<rel5>[^']*)'|(?P<rel6>[^>\\s\n]*)))? -""", re.I | re.S | re.X) - _base = re.compile(r"""<base\s+href\s*=\s*['"]?([^'">]+)""", re.I | re.S) - - def __init__(self, data, url): - """ - Initialise an instance with the Unicode page contents and the URL they - came from. - """ - self.data = data - self.base_url = self.url = url - m = self._base.search(self.data) - if m: - self.base_url = m.group(1) - - _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) - - @cached_property - def links(self): - """ - Return the URLs of all the links on a page together with information - about their "rel" attribute, for determining which ones to treat as - downloads and which ones to queue for further scraping. - """ - def clean(url): - "Tidy up an URL." - scheme, netloc, path, params, query, frag = urlparse(url) - return urlunparse((scheme, netloc, quote(path), - params, query, frag)) - - result = set() - for match in self._href.finditer(self.data): - d = match.groupdict('') - rel = (d['rel1'] or d['rel2'] or d['rel3'] or - d['rel4'] or d['rel5'] or d['rel6']) - url = d['url1'] or d['url2'] or d['url3'] - url = urljoin(self.base_url, url) - url = unescape(url) - url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) - result.add((url, rel)) - # We sort the result, hoping to bring the most recent versions - # to the front - result = sorted(result, key=lambda t: t[0], reverse=True) - return result - - -class SimpleScrapingLocator(Locator): - """ - A locator which scrapes HTML pages to locate downloads for a distribution. - This runs multiple threads to do the I/O; performance is at least as good - as pip's PackageFinder, which works in an analogous fashion. - """ - - # These are used to deal with various Content-Encoding schemes. - decoders = { - 'deflate': zlib.decompress, - 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(d)).read(), - 'none': lambda b: b, - } - - def __init__(self, url, timeout=None, num_workers=10, **kwargs): - """ - Initialise an instance. - :param url: The root URL to use for scraping. - :param timeout: The timeout, in seconds, to be applied to requests. - This defaults to ``None`` (no timeout specified). - :param num_workers: The number of worker threads you want to do I/O, - This defaults to 10. - :param kwargs: Passed to the superclass. - """ - super(SimpleScrapingLocator, self).__init__(**kwargs) - self.base_url = ensure_slash(url) - self.timeout = timeout - self._page_cache = {} - self._seen = set() - self._to_fetch = queue.Queue() - self._bad_hosts = set() - self.skip_externals = False - self.num_workers = num_workers - self._lock = threading.RLock() - # See issue #45: we need to be resilient when the locator is used - # in a thread, e.g. with concurrent.futures. We can't use self._lock - # as it is for coordinating our internal threads - the ones created - # in _prepare_threads. - self._gplock = threading.RLock() - - def _prepare_threads(self): - """ - Threads are created only when get_project is called, and terminate - before it returns. They are there primarily to parallelise I/O (i.e. - fetching web pages). - """ - self._threads = [] - for i in range(self.num_workers): - t = threading.Thread(target=self._fetch) - t.setDaemon(True) - t.start() - self._threads.append(t) - - def _wait_threads(self): - """ - Tell all the threads to terminate (by sending a sentinel value) and - wait for them to do so. - """ - # Note that you need two loops, since you can't say which - # thread will get each sentinel - for t in self._threads: - self._to_fetch.put(None) # sentinel - for t in self._threads: - t.join() - self._threads = [] - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - with self._gplock: - self.result = result - self.project_name = name - url = urljoin(self.base_url, '%s/' % quote(name)) - self._seen.clear() - self._page_cache.clear() - self._prepare_threads() - try: - logger.debug('Queueing %s', url) - self._to_fetch.put(url) - self._to_fetch.join() - finally: - self._wait_threads() - del self.result - return result - - platform_dependent = re.compile(r'\b(linux-(i\d86|x86_64|arm\w+)|' - r'win(32|-amd64)|macosx-?\d+)\b', re.I) - - def _is_platform_dependent(self, url): - """ - Does an URL refer to a platform-specific download? - """ - return self.platform_dependent.search(url) - - def _process_download(self, url): - """ - See if an URL is a suitable download for a project. - - If it is, register information in the result dictionary (for - _get_project) about the specific version it's for. - - Note that the return value isn't actually used other than as a boolean - value. - """ - if self._is_platform_dependent(url): - info = None - else: - info = self.convert_url_to_download_info(url, self.project_name) - logger.debug('process_download: %s -> %s', url, info) - if info: - with self._lock: # needed because self.result is shared - self._update_version_data(self.result, info) - return info - - def _should_queue(self, link, referrer, rel): - """ - Determine whether a link URL from a referring page and with a - particular "rel" attribute should be queued for scraping. - """ - scheme, netloc, path, _, _, _ = urlparse(link) - if path.endswith(self.source_extensions + self.binary_extensions + - self.excluded_extensions): - result = False - elif self.skip_externals and not link.startswith(self.base_url): - result = False - elif not referrer.startswith(self.base_url): - result = False - elif rel not in ('homepage', 'download'): - result = False - elif scheme not in ('http', 'https', 'ftp'): - result = False - elif self._is_platform_dependent(link): - result = False - else: - host = netloc.split(':', 1)[0] - if host.lower() == 'localhost': - result = False - else: - result = True - logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, - referrer, result) - return result - - def _fetch(self): - """ - Get a URL to fetch from the work queue, get the HTML page, examine its - links for download candidates and candidates for further scraping. - - This is a handy method to run in a thread. - """ - while True: - url = self._to_fetch.get() - try: - if url: - page = self.get_page(url) - if page is None: # e.g. after an error - continue - for link, rel in page.links: - if link not in self._seen: - try: - self._seen.add(link) - if (not self._process_download(link) and - self._should_queue(link, url, rel)): - logger.debug('Queueing %s from %s', link, url) - self._to_fetch.put(link) - except MetadataInvalidError: # e.g. invalid versions - pass - except Exception as e: # pragma: no cover - self.errors.put(text_type(e)) - finally: - # always do this, to avoid hangs :-) - self._to_fetch.task_done() - if not url: - #logger.debug('Sentinel seen, quitting.') - break - - def get_page(self, url): - """ - Get the HTML for an URL, possibly from an in-memory cache. - - XXX TODO Note: this cache is never actually cleared. It's assumed that - the data won't get stale over the lifetime of a locator instance (not - necessarily true for the default_locator). - """ - # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api - scheme, netloc, path, _, _, _ = urlparse(url) - if scheme == 'file' and os.path.isdir(url2pathname(path)): - url = urljoin(ensure_slash(url), 'index.html') - - if url in self._page_cache: - result = self._page_cache[url] - logger.debug('Returning %s from cache: %s', url, result) - else: - host = netloc.split(':', 1)[0] - result = None - if host in self._bad_hosts: - logger.debug('Skipping %s due to bad host %s', url, host) - else: - req = Request(url, headers={'Accept-encoding': 'identity'}) - try: - logger.debug('Fetching %s', url) - resp = self.opener.open(req, timeout=self.timeout) - logger.debug('Fetched %s', url) - headers = resp.info() - content_type = headers.get('Content-Type', '') - if HTML_CONTENT_TYPE.match(content_type): - final_url = resp.geturl() - data = resp.read() - encoding = headers.get('Content-Encoding') - if encoding: - decoder = self.decoders[encoding] # fail if not found - data = decoder(data) - encoding = 'utf-8' - m = CHARSET.search(content_type) - if m: - encoding = m.group(1) - try: - data = data.decode(encoding) - except UnicodeError: # pragma: no cover - data = data.decode('latin-1') # fallback - result = Page(data, final_url) - self._page_cache[final_url] = result - except HTTPError as e: - if e.code != 404: - logger.exception('Fetch failed: %s: %s', url, e) - except URLError as e: # pragma: no cover - logger.exception('Fetch failed: %s: %s', url, e) - with self._lock: - self._bad_hosts.add(host) - except Exception as e: # pragma: no cover - logger.exception('Fetch failed: %s: %s', url, e) - finally: - self._page_cache[url] = result # even if None (failure) - return result - - _distname_re = re.compile('<a href=[^>]*>([^<]+)<') - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - page = self.get_page(self.base_url) - if not page: - raise DistlibException('Unable to get %s' % self.base_url) - for match in self._distname_re.finditer(page.data): - result.add(match.group(1)) - return result - -class DirectoryLocator(Locator): - """ - This class locates distributions in a directory tree. - """ - - def __init__(self, path, **kwargs): - """ - Initialise an instance. - :param path: The root of the directory tree to search. - :param kwargs: Passed to the superclass constructor, - except for: - * recursive - if True (the default), subdirectories are - recursed into. If False, only the top-level directory - is searched, - """ - self.recursive = kwargs.pop('recursive', True) - super(DirectoryLocator, self).__init__(**kwargs) - path = os.path.abspath(path) - if not os.path.isdir(path): # pragma: no cover - raise DistlibException('Not a directory: %r' % path) - self.base_dir = path - - def should_include(self, filename, parent): - """ - Should a filename be considered as a candidate for a distribution - archive? As well as the filename, the directory which contains it - is provided, though not used by the current implementation. - """ - return filename.endswith(self.downloadable_extensions) - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - for root, dirs, files in os.walk(self.base_dir): - for fn in files: - if self.should_include(fn, root): - fn = os.path.join(root, fn) - url = urlunparse(('file', '', - pathname2url(os.path.abspath(fn)), - '', '', '')) - info = self.convert_url_to_download_info(url, name) - if info: - self._update_version_data(result, info) - if not self.recursive: - break - return result - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - for root, dirs, files in os.walk(self.base_dir): - for fn in files: - if self.should_include(fn, root): - fn = os.path.join(root, fn) - url = urlunparse(('file', '', - pathname2url(os.path.abspath(fn)), - '', '', '')) - info = self.convert_url_to_download_info(url, None) - if info: - result.add(info['name']) - if not self.recursive: - break - return result - -class JSONLocator(Locator): - """ - This locator uses special extended metadata (not available on PyPI) and is - the basis of performant dependency resolution in distlib. Other locators - require archive downloads before dependencies can be determined! As you - might imagine, that can be slow. - """ - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - raise NotImplementedError('Not available from this locator') - - def _get_project(self, name): - result = {'urls': {}, 'digests': {}} - data = get_project_data(name) - if data: - for info in data.get('files', []): - if info['ptype'] != 'sdist' or info['pyversion'] != 'source': - continue - # We don't store summary in project metadata as it makes - # the data bigger for no benefit during dependency - # resolution - dist = make_dist(data['name'], info['version'], - summary=data.get('summary', - 'Placeholder for summary'), - scheme=self.scheme) - md = dist.metadata - md.source_url = info['url'] - # TODO SHA256 digest - if 'digest' in info and info['digest']: - dist.digest = ('md5', info['digest']) - md.dependencies = info.get('requirements', {}) - dist.exports = info.get('exports', {}) - result[dist.version] = dist - result['urls'].setdefault(dist.version, set()).add(info['url']) - return result - -class DistPathLocator(Locator): - """ - This locator finds installed distributions in a path. It can be useful for - adding to an :class:`AggregatingLocator`. - """ - def __init__(self, distpath, **kwargs): - """ - Initialise an instance. - - :param distpath: A :class:`DistributionPath` instance to search. - """ - super(DistPathLocator, self).__init__(**kwargs) - assert isinstance(distpath, DistributionPath) - self.distpath = distpath - - def _get_project(self, name): - dist = self.distpath.get_distribution(name) - if dist is None: - result = {'urls': {}, 'digests': {}} - else: - result = { - dist.version: dist, - 'urls': {dist.version: set([dist.source_url])}, - 'digests': {dist.version: set([None])} - } - return result - - -class AggregatingLocator(Locator): - """ - This class allows you to chain and/or merge a list of locators. - """ - def __init__(self, *locators, **kwargs): - """ - Initialise an instance. - - :param locators: The list of locators to search. - :param kwargs: Passed to the superclass constructor, - except for: - * merge - if False (the default), the first successful - search from any of the locators is returned. If True, - the results from all locators are merged (this can be - slow). - """ - self.merge = kwargs.pop('merge', False) - self.locators = locators - super(AggregatingLocator, self).__init__(**kwargs) - - def clear_cache(self): - super(AggregatingLocator, self).clear_cache() - for locator in self.locators: - locator.clear_cache() - - def _set_scheme(self, value): - self._scheme = value - for locator in self.locators: - locator.scheme = value - - scheme = property(Locator.scheme.fget, _set_scheme) - - def _get_project(self, name): - result = {} - for locator in self.locators: - d = locator.get_project(name) - if d: - if self.merge: - files = result.get('urls', {}) - digests = result.get('digests', {}) - # next line could overwrite result['urls'], result['digests'] - result.update(d) - df = result.get('urls') - if files and df: - for k, v in files.items(): - if k in df: - df[k] |= v - else: - df[k] = v - dd = result.get('digests') - if digests and dd: - dd.update(digests) - else: - # See issue #18. If any dists are found and we're looking - # for specific constraints, we only return something if - # a match is found. For example, if a DirectoryLocator - # returns just foo (1.0) while we're looking for - # foo (>= 2.0), we'll pretend there was nothing there so - # that subsequent locators can be queried. Otherwise we - # would just return foo (1.0) which would then lead to a - # failure to find foo (>= 2.0), because other locators - # weren't searched. Note that this only matters when - # merge=False. - if self.matcher is None: - found = True - else: - found = False - for k in d: - if self.matcher.match(k): - found = True - break - if found: - result = d - break - return result - - def get_distribution_names(self): - """ - Return all the distribution names known to this locator. - """ - result = set() - for locator in self.locators: - try: - result |= locator.get_distribution_names() - except NotImplementedError: - pass - return result - - -# We use a legacy scheme simply because most of the dists on PyPI use legacy -# versions which don't conform to PEP 426 / PEP 440. -default_locator = AggregatingLocator( - JSONLocator(), - SimpleScrapingLocator('https://pypi.python.org/simple/', - timeout=3.0), - scheme='legacy') - -locate = default_locator.locate - -NAME_VERSION_RE = re.compile(r'(?P<name>[\w-]+)\s*' - r'\(\s*(==\s*)?(?P<ver>[^)]+)\)$') - -class DependencyFinder(object): - """ - Locate dependencies for distributions. - """ - - def __init__(self, locator=None): - """ - Initialise an instance, using the specified locator - to locate distributions. - """ - self.locator = locator or default_locator - self.scheme = get_scheme(self.locator.scheme) - - def add_distribution(self, dist): - """ - Add a distribution to the finder. This will update internal information - about who provides what. - :param dist: The distribution to add. - """ - logger.debug('adding distribution %s', dist) - name = dist.key - self.dists_by_name[name] = dist - self.dists[(name, dist.version)] = dist - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Add to provided: %s, %s, %s', name, version, dist) - self.provided.setdefault(name, set()).add((version, dist)) - - def remove_distribution(self, dist): - """ - Remove a distribution from the finder. This will update internal - information about who provides what. - :param dist: The distribution to remove. - """ - logger.debug('removing distribution %s', dist) - name = dist.key - del self.dists_by_name[name] - del self.dists[(name, dist.version)] - for p in dist.provides: - name, version = parse_name_and_version(p) - logger.debug('Remove from provided: %s, %s, %s', name, version, dist) - s = self.provided[name] - s.remove((version, dist)) - if not s: - del self.provided[name] - - def get_matcher(self, reqt): - """ - Get a version matcher for a requirement. - :param reqt: The requirement - :type reqt: str - :return: A version matcher (an instance of - :class:`distlib.version.Matcher`). - """ - try: - matcher = self.scheme.matcher(reqt) - except UnsupportedVersionError: # pragma: no cover - # XXX compat-mode if cannot read the version - name = reqt.split()[0] - matcher = self.scheme.matcher(name) - return matcher - - def find_providers(self, reqt): - """ - Find the distributions which can fulfill a requirement. - - :param reqt: The requirement. - :type reqt: str - :return: A set of distribution which can fulfill the requirement. - """ - matcher = self.get_matcher(reqt) - name = matcher.key # case-insensitive - result = set() - provided = self.provided - if name in provided: - for version, provider in provided[name]: - try: - match = matcher.match(version) - except UnsupportedVersionError: - match = False - - if match: - result.add(provider) - break - return result - - def try_to_replace(self, provider, other, problems): - """ - Attempt to replace one provider with another. This is typically used - when resolving dependencies from multiple sources, e.g. A requires - (B >= 1.0) while C requires (B >= 1.1). - - For successful replacement, ``provider`` must meet all the requirements - which ``other`` fulfills. - - :param provider: The provider we are trying to replace with. - :param other: The provider we're trying to replace. - :param problems: If False is returned, this will contain what - problems prevented replacement. This is currently - a tuple of the literal string 'cantreplace', - ``provider``, ``other`` and the set of requirements - that ``provider`` couldn't fulfill. - :return: True if we can replace ``other`` with ``provider``, else - False. - """ - rlist = self.reqts[other] - unmatched = set() - for s in rlist: - matcher = self.get_matcher(s) - if not matcher.match(provider.version): - unmatched.add(s) - if unmatched: - # can't replace other with provider - problems.add(('cantreplace', provider, other, - frozenset(unmatched))) - result = False - else: - # can replace other with provider - self.remove_distribution(other) - del self.reqts[other] - for s in rlist: - self.reqts.setdefault(provider, set()).add(s) - self.add_distribution(provider) - result = True - return result - - def find(self, requirement, meta_extras=None, prereleases=False): - """ - Find a distribution and all distributions it depends on. - - :param requirement: The requirement specifying the distribution to - find, or a Distribution instance. - :param meta_extras: A list of meta extras such as :test:, :build: and - so on. - :param prereleases: If ``True``, allow pre-release versions to be - returned - otherwise, don't return prereleases - unless they're all that's available. - - Return a set of :class:`Distribution` instances and a set of - problems. - - The distributions returned should be such that they have the - :attr:`required` attribute set to ``True`` if they were - from the ``requirement`` passed to ``find()``, and they have the - :attr:`build_time_dependency` attribute set to ``True`` unless they - are post-installation dependencies of the ``requirement``. - - The problems should be a tuple consisting of the string - ``'unsatisfied'`` and the requirement which couldn't be satisfied - by any distribution known to the locator. - """ - - self.provided = {} - self.dists = {} - self.dists_by_name = {} - self.reqts = {} - - meta_extras = set(meta_extras or []) - if ':*:' in meta_extras: - meta_extras.remove(':*:') - # :meta: and :run: are implicitly included - meta_extras |= set([':test:', ':build:', ':dev:']) - - if isinstance(requirement, Distribution): - dist = odist = requirement - logger.debug('passed %s as requirement', odist) - else: - dist = odist = self.locator.locate(requirement, - prereleases=prereleases) - if dist is None: - raise DistlibException('Unable to locate %r' % requirement) - logger.debug('located %s', odist) - dist.requested = True - problems = set() - todo = set([dist]) - install_dists = set([odist]) - while todo: - dist = todo.pop() - name = dist.key # case-insensitive - if name not in self.dists_by_name: - self.add_distribution(dist) - else: - #import pdb; pdb.set_trace() - other = self.dists_by_name[name] - if other != dist: - self.try_to_replace(dist, other, problems) - - ireqts = dist.run_requires | dist.meta_requires - sreqts = dist.build_requires - ereqts = set() - if meta_extras and dist in install_dists: - for key in ('test', 'build', 'dev'): - e = ':%s:' % key - if e in meta_extras: - ereqts |= getattr(dist, '%s_requires' % key) - all_reqts = ireqts | sreqts | ereqts - for r in all_reqts: - providers = self.find_providers(r) - if not providers: - logger.debug('No providers found for %r', r) - provider = self.locator.locate(r, prereleases=prereleases) - # If no provider is found and we didn't consider - # prereleases, consider them now. - if provider is None and not prereleases: - provider = self.locator.locate(r, prereleases=True) - if provider is None: - logger.debug('Cannot satisfy %r', r) - problems.add(('unsatisfied', r)) - else: - n, v = provider.key, provider.version - if (n, v) not in self.dists: - todo.add(provider) - providers.add(provider) - if r in ireqts and dist in install_dists: - install_dists.add(provider) - logger.debug('Adding %s to install_dists', - provider.name_and_version) - for p in providers: - name = p.key - if name not in self.dists_by_name: - self.reqts.setdefault(p, set()).add(r) - else: - other = self.dists_by_name[name] - if other != p: - # see if other can be replaced by p - self.try_to_replace(p, other, problems) - - dists = set(self.dists.values()) - for dist in dists: - dist.build_time_dependency = dist not in install_dists - if dist.build_time_dependency: - logger.debug('%s is a build-time dependency only.', - dist.name_and_version) - logger.debug('find done for %s', odist) - return dists, problems diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py deleted file mode 100644 index ca0fe44..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/manifest.py +++ /dev/null @@ -1,393 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2013 Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Class representing the list of files in a distribution. - -Equivalent to distutils.filelist, but fixes some problems. -""" -import fnmatch -import logging -import os -import re -import sys - -from . import DistlibException -from .compat import fsdecode -from .util import convert_path - - -__all__ = ['Manifest'] - -logger = logging.getLogger(__name__) - -# a \ followed by some spaces + EOL -_COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) -_COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) - -# -# Due to the different results returned by fnmatch.translate, we need -# to do slightly different processing for Python 2.7 and 3.2 ... this needed -# to be brought in for Python 3.6 onwards. -# -_PYTHON_VERSION = sys.version_info[:2] - -class Manifest(object): - """A list of files built by on exploring the filesystem and filtered by - applying various patterns to what we find there. - """ - - def __init__(self, base=None): - """ - Initialise an instance. - - :param base: The base directory to explore under. - """ - self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) - self.prefix = self.base + os.sep - self.allfiles = None - self.files = set() - - # - # Public API - # - - def findall(self): - """Find all files under the base and set ``allfiles`` to the absolute - pathnames of files found. - """ - from stat import S_ISREG, S_ISDIR, S_ISLNK - - self.allfiles = allfiles = [] - root = self.base - stack = [root] - pop = stack.pop - push = stack.append - - while stack: - root = pop() - names = os.listdir(root) - - for name in names: - fullname = os.path.join(root, name) - - # Avoid excess stat calls -- just one will do, thank you! - stat = os.stat(fullname) - mode = stat.st_mode - if S_ISREG(mode): - allfiles.append(fsdecode(fullname)) - elif S_ISDIR(mode) and not S_ISLNK(mode): - push(fullname) - - def add(self, item): - """ - Add a file to the manifest. - - :param item: The pathname to add. This can be relative to the base. - """ - if not item.startswith(self.prefix): - item = os.path.join(self.base, item) - self.files.add(os.path.normpath(item)) - - def add_many(self, items): - """ - Add a list of files to the manifest. - - :param items: The pathnames to add. These can be relative to the base. - """ - for item in items: - self.add(item) - - def sorted(self, wantdirs=False): - """ - Return sorted files in directory order - """ - - def add_dir(dirs, d): - dirs.add(d) - logger.debug('add_dir added %s', d) - if d != self.base: - parent, _ = os.path.split(d) - assert parent not in ('', '/') - add_dir(dirs, parent) - - result = set(self.files) # make a copy! - if wantdirs: - dirs = set() - for f in result: - add_dir(dirs, os.path.dirname(f)) - result |= dirs - return [os.path.join(*path_tuple) for path_tuple in - sorted(os.path.split(path) for path in result)] - - def clear(self): - """Clear all collected files.""" - self.files = set() - self.allfiles = [] - - def process_directive(self, directive): - """ - Process a directive which either adds some files from ``allfiles`` to - ``files``, or removes some files from ``files``. - - :param directive: The directive to process. This should be in a format - compatible with distutils ``MANIFEST.in`` files: - - http://docs.python.org/distutils/sourcedist.html#commands - """ - # Parse the line: split it up, make sure the right number of words - # is there, and return the relevant words. 'action' is always - # defined: it's the first word of the line. Which of the other - # three are defined depends on the action; it'll be either - # patterns, (dir and patterns), or (dirpattern). - action, patterns, thedir, dirpattern = self._parse_directive(directive) - - # OK, now we know that the action is valid and we have the - # right number of words on the line for that action -- so we - # can proceed with minimal error-checking. - if action == 'include': - for pattern in patterns: - if not self._include_pattern(pattern, anchor=True): - logger.warning('no files found matching %r', pattern) - - elif action == 'exclude': - for pattern in patterns: - found = self._exclude_pattern(pattern, anchor=True) - #if not found: - # logger.warning('no previously-included files ' - # 'found matching %r', pattern) - - elif action == 'global-include': - for pattern in patterns: - if not self._include_pattern(pattern, anchor=False): - logger.warning('no files found matching %r ' - 'anywhere in distribution', pattern) - - elif action == 'global-exclude': - for pattern in patterns: - found = self._exclude_pattern(pattern, anchor=False) - #if not found: - # logger.warning('no previously-included files ' - # 'matching %r found anywhere in ' - # 'distribution', pattern) - - elif action == 'recursive-include': - for pattern in patterns: - if not self._include_pattern(pattern, prefix=thedir): - logger.warning('no files found matching %r ' - 'under directory %r', pattern, thedir) - - elif action == 'recursive-exclude': - for pattern in patterns: - found = self._exclude_pattern(pattern, prefix=thedir) - #if not found: - # logger.warning('no previously-included files ' - # 'matching %r found under directory %r', - # pattern, thedir) - - elif action == 'graft': - if not self._include_pattern(None, prefix=dirpattern): - logger.warning('no directories found matching %r', - dirpattern) - - elif action == 'prune': - if not self._exclude_pattern(None, prefix=dirpattern): - logger.warning('no previously-included directories found ' - 'matching %r', dirpattern) - else: # pragma: no cover - # This should never happen, as it should be caught in - # _parse_template_line - raise DistlibException( - 'invalid action %r' % action) - - # - # Private API - # - - def _parse_directive(self, directive): - """ - Validate a directive. - :param directive: The directive to validate. - :return: A tuple of action, patterns, thedir, dir_patterns - """ - words = directive.split() - if len(words) == 1 and words[0] not in ('include', 'exclude', - 'global-include', - 'global-exclude', - 'recursive-include', - 'recursive-exclude', - 'graft', 'prune'): - # no action given, let's use the default 'include' - words.insert(0, 'include') - - action = words[0] - patterns = thedir = dir_pattern = None - - if action in ('include', 'exclude', - 'global-include', 'global-exclude'): - if len(words) < 2: - raise DistlibException( - '%r expects <pattern1> <pattern2> ...' % action) - - patterns = [convert_path(word) for word in words[1:]] - - elif action in ('recursive-include', 'recursive-exclude'): - if len(words) < 3: - raise DistlibException( - '%r expects <dir> <pattern1> <pattern2> ...' % action) - - thedir = convert_path(words[1]) - patterns = [convert_path(word) for word in words[2:]] - - elif action in ('graft', 'prune'): - if len(words) != 2: - raise DistlibException( - '%r expects a single <dir_pattern>' % action) - - dir_pattern = convert_path(words[1]) - - else: - raise DistlibException('unknown action %r' % action) - - return action, patterns, thedir, dir_pattern - - def _include_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Select strings (presumably filenames) from 'self.files' that - match 'pattern', a Unix-style wildcard (glob) pattern. - - Patterns are not quite the same as implemented by the 'fnmatch' - module: '*' and '?' match non-special characters, where "special" - is platform-dependent: slash on Unix; colon, slash, and backslash on - DOS/Windows; and colon on Mac OS. - - If 'anchor' is true (the default), then the pattern match is more - stringent: "*.py" will match "foo.py" but not "foo/bar.py". If - 'anchor' is false, both of these will match. - - If 'prefix' is supplied, then only filenames starting with 'prefix' - (itself a pattern) and ending with 'pattern', with anything in between - them, will match. 'anchor' is ignored in this case. - - If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and - 'pattern' is assumed to be either a string containing a regex or a - regex object -- no translation is done, the regex is just compiled - and used as-is. - - Selected strings will be added to self.files. - - Return True if files are found. - """ - # XXX docstring lying about what the special chars are? - found = False - pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) - - # delayed loading of allfiles list - if self.allfiles is None: - self.findall() - - for name in self.allfiles: - if pattern_re.search(name): - self.files.add(name) - found = True - return found - - def _exclude_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Remove strings (presumably filenames) from 'files' that match - 'pattern'. - - Other parameters are the same as for 'include_pattern()', above. - The list 'self.files' is modified in place. Return True if files are - found. - - This API is public to allow e.g. exclusion of SCM subdirs, e.g. when - packaging source distributions - """ - found = False - pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) - for f in list(self.files): - if pattern_re.search(f): - self.files.remove(f) - found = True - return found - - def _translate_pattern(self, pattern, anchor=True, prefix=None, - is_regex=False): - """Translate a shell-like wildcard pattern to a compiled regular - expression. - - Return the compiled regex. If 'is_regex' true, - then 'pattern' is directly compiled to a regex (if it's a string) - or just returned as-is (assumes it's a regex object). - """ - if is_regex: - if isinstance(pattern, str): - return re.compile(pattern) - else: - return pattern - - if _PYTHON_VERSION > (3, 2): - # ditch start and end characters - start, _, end = self._glob_to_re('_').partition('_') - - if pattern: - pattern_re = self._glob_to_re(pattern) - if _PYTHON_VERSION > (3, 2): - assert pattern_re.startswith(start) and pattern_re.endswith(end) - else: - pattern_re = '' - - base = re.escape(os.path.join(self.base, '')) - if prefix is not None: - # ditch end of pattern character - if _PYTHON_VERSION <= (3, 2): - empty_pattern = self._glob_to_re('') - prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] - else: - prefix_re = self._glob_to_re(prefix) - assert prefix_re.startswith(start) and prefix_re.endswith(end) - prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] - sep = os.sep - if os.sep == '\\': - sep = r'\\' - if _PYTHON_VERSION <= (3, 2): - pattern_re = '^' + base + sep.join((prefix_re, - '.*' + pattern_re)) - else: - pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] - pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, - pattern_re, end) - else: # no prefix -- respect anchor flag - if anchor: - if _PYTHON_VERSION <= (3, 2): - pattern_re = '^' + base + pattern_re - else: - pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) - - return re.compile(pattern_re) - - def _glob_to_re(self, pattern): - """Translate a shell-like glob pattern to a regular expression. - - Return a string containing the regex. Differs from - 'fnmatch.translate()' in that '*' does not match "special characters" - (which are platform-specific). - """ - pattern_re = fnmatch.translate(pattern) - - # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which - # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, - # and by extension they shouldn't match such "special characters" under - # any OS. So change all non-escaped dots in the RE to match any - # character except the special characters (currently: just os.sep). - sep = os.sep - if os.sep == '\\': - # we're using a regex to manipulate a regex, so we need - # to escape the backslash twice - sep = r'\\\\' - escaped = r'\1[^%s]' % sep - pattern_re = re.sub(r'((?<!\\)(\\\\)*)\.', escaped, pattern_re) - return pattern_re diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/markers.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/markers.py deleted file mode 100644 index ee1f3e2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/markers.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Parser for the environment markers micro-language defined in PEP 508. -""" - -# Note: In PEP 345, the micro-language was Python compatible, so the ast -# module could be used to parse it. However, PEP 508 introduced operators such -# as ~= and === which aren't in Python, necessitating a different approach. - -import os -import sys -import platform -import re - -from .compat import python_implementation, urlparse, string_types -from .util import in_venv, parse_marker - -__all__ = ['interpret'] - -def _is_literal(o): - if not isinstance(o, string_types) or not o: - return False - return o[0] in '\'"' - -class Evaluator(object): - """ - This class is used to evaluate marker expessions. - """ - - operations = { - '==': lambda x, y: x == y, - '===': lambda x, y: x == y, - '~=': lambda x, y: x == y or x > y, - '!=': lambda x, y: x != y, - '<': lambda x, y: x < y, - '<=': lambda x, y: x == y or x < y, - '>': lambda x, y: x > y, - '>=': lambda x, y: x == y or x > y, - 'and': lambda x, y: x and y, - 'or': lambda x, y: x or y, - 'in': lambda x, y: x in y, - 'not in': lambda x, y: x not in y, - } - - def evaluate(self, expr, context): - """ - Evaluate a marker expression returned by the :func:`parse_requirement` - function in the specified context. - """ - if isinstance(expr, string_types): - if expr[0] in '\'"': - result = expr[1:-1] - else: - if expr not in context: - raise SyntaxError('unknown variable: %s' % expr) - result = context[expr] - else: - assert isinstance(expr, dict) - op = expr['op'] - if op not in self.operations: - raise NotImplementedError('op not implemented: %s' % op) - elhs = expr['lhs'] - erhs = expr['rhs'] - if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): - raise SyntaxError('invalid comparison: %s %s %s' % (elhs, op, erhs)) - - lhs = self.evaluate(elhs, context) - rhs = self.evaluate(erhs, context) - result = self.operations[op](lhs, rhs) - return result - -def default_context(): - def format_full_version(info): - version = '%s.%s.%s' % (info.major, info.minor, info.micro) - kind = info.releaselevel - if kind != 'final': - version += kind[0] + str(info.serial) - return version - - if hasattr(sys, 'implementation'): - implementation_version = format_full_version(sys.implementation.version) - implementation_name = sys.implementation.name - else: - implementation_version = '0' - implementation_name = '' - - result = { - 'implementation_name': implementation_name, - 'implementation_version': implementation_version, - 'os_name': os.name, - 'platform_machine': platform.machine(), - 'platform_python_implementation': platform.python_implementation(), - 'platform_release': platform.release(), - 'platform_system': platform.system(), - 'platform_version': platform.version(), - 'platform_in_venv': str(in_venv()), - 'python_full_version': platform.python_version(), - 'python_version': platform.python_version()[:3], - 'sys_platform': sys.platform, - } - return result - -DEFAULT_CONTEXT = default_context() -del default_context - -evaluator = Evaluator() - -def interpret(marker, execution_context=None): - """ - Interpret a marker and return a result depending on environment. - - :param marker: The marker to interpret. - :type marker: str - :param execution_context: The context used for name lookup. - :type execution_context: mapping - """ - try: - expr, rest = parse_marker(marker) - except Exception as e: - raise SyntaxError('Unable to interpret marker syntax: %s: %s' % (marker, e)) - if rest and rest[0] != '#': - raise SyntaxError('unexpected trailing data in marker: %s: %s' % (marker, rest)) - context = dict(DEFAULT_CONTEXT) - if execution_context: - context.update(execution_context) - return evaluator.evaluate(expr, context) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py deleted file mode 100644 index 6d6470f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/metadata.py +++ /dev/null @@ -1,1091 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -"""Implementation of the Metadata for Python packages PEPs. - -Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental). -""" -from __future__ import unicode_literals - -import codecs -from email import message_from_file -import json -import logging -import re - - -from . import DistlibException, __version__ -from .compat import StringIO, string_types, text_type -from .markers import interpret -from .util import extract_by_key, get_extras -from .version import get_scheme, PEP440_VERSION_RE - -logger = logging.getLogger(__name__) - - -class MetadataMissingError(DistlibException): - """A required metadata is missing""" - - -class MetadataConflictError(DistlibException): - """Attempt to read or write metadata fields that are conflictual.""" - - -class MetadataUnrecognizedVersionError(DistlibException): - """Unknown metadata version number.""" - - -class MetadataInvalidError(DistlibException): - """A metadata value is invalid""" - -# public API of this module -__all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] - -# Encoding used for the PKG-INFO files -PKG_INFO_ENCODING = 'utf-8' - -# preferred version. Hopefully will be changed -# to 1.2 once PEP 345 is supported everywhere -PKG_INFO_PREFERRED_VERSION = '1.1' - -_LINE_PREFIX_1_2 = re.compile('\n \\|') -_LINE_PREFIX_PRE_1_2 = re.compile('\n ') -_241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'License') - -_314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'License', 'Classifier', 'Download-URL', 'Obsoletes', - 'Provides', 'Requires') - -_314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', - 'Download-URL') - -_345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'Maintainer', 'Maintainer-email', 'License', - 'Classifier', 'Download-URL', 'Obsoletes-Dist', - 'Project-URL', 'Provides-Dist', 'Requires-Dist', - 'Requires-Python', 'Requires-External') - -_345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', - 'Obsoletes-Dist', 'Requires-External', 'Maintainer', - 'Maintainer-email', 'Project-URL') - -_426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', - 'Supported-Platform', 'Summary', 'Description', - 'Keywords', 'Home-page', 'Author', 'Author-email', - 'Maintainer', 'Maintainer-email', 'License', - 'Classifier', 'Download-URL', 'Obsoletes-Dist', - 'Project-URL', 'Provides-Dist', 'Requires-Dist', - 'Requires-Python', 'Requires-External', 'Private-Version', - 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', - 'Provides-Extra') - -_426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', - 'Setup-Requires-Dist', 'Extension') - -_566_FIELDS = _426_FIELDS + ('Description-Content-Type',) - -_566_MARKERS = ('Description-Content-Type',) - -_ALL_FIELDS = set() -_ALL_FIELDS.update(_241_FIELDS) -_ALL_FIELDS.update(_314_FIELDS) -_ALL_FIELDS.update(_345_FIELDS) -_ALL_FIELDS.update(_426_FIELDS) -_ALL_FIELDS.update(_566_FIELDS) - -EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') - - -def _version2fieldlist(version): - if version == '1.0': - return _241_FIELDS - elif version == '1.1': - return _314_FIELDS - elif version == '1.2': - return _345_FIELDS - elif version in ('1.3', '2.1'): - return _345_FIELDS + _566_FIELDS - elif version == '2.0': - return _426_FIELDS - raise MetadataUnrecognizedVersionError(version) - - -def _best_version(fields): - """Detect the best version depending on the fields used.""" - def _has_marker(keys, markers): - for marker in markers: - if marker in keys: - return True - return False - - keys = [] - for key, value in fields.items(): - if value in ([], 'UNKNOWN', None): - continue - keys.append(key) - - possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.0', '2.1'] - - # first let's try to see if a field is not part of one of the version - for key in keys: - if key not in _241_FIELDS and '1.0' in possible_versions: - possible_versions.remove('1.0') - logger.debug('Removed 1.0 due to %s', key) - if key not in _314_FIELDS and '1.1' in possible_versions: - possible_versions.remove('1.1') - logger.debug('Removed 1.1 due to %s', key) - if key not in _345_FIELDS and '1.2' in possible_versions: - possible_versions.remove('1.2') - logger.debug('Removed 1.2 due to %s', key) - if key not in _566_FIELDS and '1.3' in possible_versions: - possible_versions.remove('1.3') - logger.debug('Removed 1.3 due to %s', key) - if key not in _566_FIELDS and '2.1' in possible_versions: - if key != 'Description': # In 2.1, description allowed after headers - possible_versions.remove('2.1') - logger.debug('Removed 2.1 due to %s', key) - if key not in _426_FIELDS and '2.0' in possible_versions: - possible_versions.remove('2.0') - logger.debug('Removed 2.0 due to %s', key) - - # possible_version contains qualified versions - if len(possible_versions) == 1: - return possible_versions[0] # found ! - elif len(possible_versions) == 0: - logger.debug('Out of options - unknown metadata set: %s', fields) - raise MetadataConflictError('Unknown metadata set') - - # let's see if one unique marker is found - is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) - is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) - is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) - is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) - if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_0) > 1: - raise MetadataConflictError('You used incompatible 1.1/1.2/2.0/2.1 fields') - - # we have the choice, 1.0, or 1.2, or 2.0 - # - 1.0 has a broken Summary field but works with all tools - # - 1.1 is to avoid - # - 1.2 fixes Summary but has little adoption - # - 2.0 adds more features and is very new - if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_0: - # we couldn't find any specific marker - if PKG_INFO_PREFERRED_VERSION in possible_versions: - return PKG_INFO_PREFERRED_VERSION - if is_1_1: - return '1.1' - if is_1_2: - return '1.2' - if is_2_1: - return '2.1' - - return '2.0' - -_ATTR2FIELD = { - 'metadata_version': 'Metadata-Version', - 'name': 'Name', - 'version': 'Version', - 'platform': 'Platform', - 'supported_platform': 'Supported-Platform', - 'summary': 'Summary', - 'description': 'Description', - 'keywords': 'Keywords', - 'home_page': 'Home-page', - 'author': 'Author', - 'author_email': 'Author-email', - 'maintainer': 'Maintainer', - 'maintainer_email': 'Maintainer-email', - 'license': 'License', - 'classifier': 'Classifier', - 'download_url': 'Download-URL', - 'obsoletes_dist': 'Obsoletes-Dist', - 'provides_dist': 'Provides-Dist', - 'requires_dist': 'Requires-Dist', - 'setup_requires_dist': 'Setup-Requires-Dist', - 'requires_python': 'Requires-Python', - 'requires_external': 'Requires-External', - 'requires': 'Requires', - 'provides': 'Provides', - 'obsoletes': 'Obsoletes', - 'project_url': 'Project-URL', - 'private_version': 'Private-Version', - 'obsoleted_by': 'Obsoleted-By', - 'extension': 'Extension', - 'provides_extra': 'Provides-Extra', -} - -_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') -_VERSIONS_FIELDS = ('Requires-Python',) -_VERSION_FIELDS = ('Version',) -_LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', - 'Requires', 'Provides', 'Obsoletes-Dist', - 'Provides-Dist', 'Requires-Dist', 'Requires-External', - 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', - 'Provides-Extra', 'Extension') -_LISTTUPLEFIELDS = ('Project-URL',) - -_ELEMENTSFIELD = ('Keywords',) - -_UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') - -_MISSING = object() - -_FILESAFE = re.compile('[^A-Za-z0-9.]+') - - -def _get_name_and_version(name, version, for_filename=False): - """Return the distribution name with version. - - If for_filename is true, return a filename-escaped form.""" - if for_filename: - # For both name and version any runs of non-alphanumeric or '.' - # characters are replaced with a single '-'. Additionally any - # spaces in the version string become '.' - name = _FILESAFE.sub('-', name) - version = _FILESAFE.sub('-', version.replace(' ', '.')) - return '%s-%s' % (name, version) - - -class LegacyMetadata(object): - """The legacy metadata of a release. - - Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can - instantiate the class with one of these arguments (or none): - - *path*, the path to a metadata file - - *fileobj* give a file-like object with metadata as content - - *mapping* is a dict-like object - - *scheme* is a version scheme name - """ - # TODO document the mapping API and UNKNOWN default key - - def __init__(self, path=None, fileobj=None, mapping=None, - scheme='default'): - if [path, fileobj, mapping].count(None) < 2: - raise TypeError('path, fileobj and mapping are exclusive') - self._fields = {} - self.requires_files = [] - self._dependencies = None - self.scheme = scheme - if path is not None: - self.read(path) - elif fileobj is not None: - self.read_file(fileobj) - elif mapping is not None: - self.update(mapping) - self.set_metadata_version() - - def set_metadata_version(self): - self._fields['Metadata-Version'] = _best_version(self._fields) - - def _write_field(self, fileobj, name, value): - fileobj.write('%s: %s\n' % (name, value)) - - def __getitem__(self, name): - return self.get(name) - - def __setitem__(self, name, value): - return self.set(name, value) - - def __delitem__(self, name): - field_name = self._convert_name(name) - try: - del self._fields[field_name] - except KeyError: - raise KeyError(name) - - def __contains__(self, name): - return (name in self._fields or - self._convert_name(name) in self._fields) - - def _convert_name(self, name): - if name in _ALL_FIELDS: - return name - name = name.replace('-', '_').lower() - return _ATTR2FIELD.get(name, name) - - def _default_value(self, name): - if name in _LISTFIELDS or name in _ELEMENTSFIELD: - return [] - return 'UNKNOWN' - - def _remove_line_prefix(self, value): - if self.metadata_version in ('1.0', '1.1'): - return _LINE_PREFIX_PRE_1_2.sub('\n', value) - else: - return _LINE_PREFIX_1_2.sub('\n', value) - - def __getattr__(self, name): - if name in _ATTR2FIELD: - return self[name] - raise AttributeError(name) - - # - # Public API - # - -# dependencies = property(_get_dependencies, _set_dependencies) - - def get_fullname(self, filesafe=False): - """Return the distribution name with version. - - If filesafe is true, return a filename-escaped form.""" - return _get_name_and_version(self['Name'], self['Version'], filesafe) - - def is_field(self, name): - """return True if name is a valid metadata key""" - name = self._convert_name(name) - return name in _ALL_FIELDS - - def is_multi_field(self, name): - name = self._convert_name(name) - return name in _LISTFIELDS - - def read(self, filepath): - """Read the metadata values from a file path.""" - fp = codecs.open(filepath, 'r', encoding='utf-8') - try: - self.read_file(fp) - finally: - fp.close() - - def read_file(self, fileob): - """Read the metadata values from a file object.""" - msg = message_from_file(fileob) - self._fields['Metadata-Version'] = msg['metadata-version'] - - # When reading, get all the fields we can - for field in _ALL_FIELDS: - if field not in msg: - continue - if field in _LISTFIELDS: - # we can have multiple lines - values = msg.get_all(field) - if field in _LISTTUPLEFIELDS and values is not None: - values = [tuple(value.split(',')) for value in values] - self.set(field, values) - else: - # single line - value = msg[field] - if value is not None and value != 'UNKNOWN': - self.set(field, value) - logger.debug('Attempting to set metadata for %s', self) - self.set_metadata_version() - - def write(self, filepath, skip_unknown=False): - """Write the metadata fields to filepath.""" - fp = codecs.open(filepath, 'w', encoding='utf-8') - try: - self.write_file(fp, skip_unknown) - finally: - fp.close() - - def write_file(self, fileobject, skip_unknown=False): - """Write the PKG-INFO format data to a file object.""" - self.set_metadata_version() - - for field in _version2fieldlist(self['Metadata-Version']): - values = self.get(field) - if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): - continue - if field in _ELEMENTSFIELD: - self._write_field(fileobject, field, ','.join(values)) - continue - if field not in _LISTFIELDS: - if field == 'Description': - if self.metadata_version in ('1.0', '1.1'): - values = values.replace('\n', '\n ') - else: - values = values.replace('\n', '\n |') - values = [values] - - if field in _LISTTUPLEFIELDS: - values = [','.join(value) for value in values] - - for value in values: - self._write_field(fileobject, field, value) - - def update(self, other=None, **kwargs): - """Set metadata values from the given iterable `other` and kwargs. - - Behavior is like `dict.update`: If `other` has a ``keys`` method, - they are looped over and ``self[key]`` is assigned ``other[key]``. - Else, ``other`` is an iterable of ``(key, value)`` iterables. - - Keys that don't match a metadata field or that have an empty value are - dropped. - """ - def _set(key, value): - if key in _ATTR2FIELD and value: - self.set(self._convert_name(key), value) - - if not other: - # other is None or empty container - pass - elif hasattr(other, 'keys'): - for k in other.keys(): - _set(k, other[k]) - else: - for k, v in other: - _set(k, v) - - if kwargs: - for k, v in kwargs.items(): - _set(k, v) - - def set(self, name, value): - """Control then set a metadata field.""" - name = self._convert_name(name) - - if ((name in _ELEMENTSFIELD or name == 'Platform') and - not isinstance(value, (list, tuple))): - if isinstance(value, string_types): - value = [v.strip() for v in value.split(',')] - else: - value = [] - elif (name in _LISTFIELDS and - not isinstance(value, (list, tuple))): - if isinstance(value, string_types): - value = [value] - else: - value = [] - - if logger.isEnabledFor(logging.WARNING): - project_name = self['Name'] - - scheme = get_scheme(self.scheme) - if name in _PREDICATE_FIELDS and value is not None: - for v in value: - # check that the values are valid - if not scheme.is_valid_matcher(v.split(';')[0]): - logger.warning( - "'%s': '%s' is not valid (field '%s')", - project_name, v, name) - # FIXME this rejects UNKNOWN, is that right? - elif name in _VERSIONS_FIELDS and value is not None: - if not scheme.is_valid_constraint_list(value): - logger.warning("'%s': '%s' is not a valid version (field '%s')", - project_name, value, name) - elif name in _VERSION_FIELDS and value is not None: - if not scheme.is_valid_version(value): - logger.warning("'%s': '%s' is not a valid version (field '%s')", - project_name, value, name) - - if name in _UNICODEFIELDS: - if name == 'Description': - value = self._remove_line_prefix(value) - - self._fields[name] = value - - def get(self, name, default=_MISSING): - """Get a metadata field.""" - name = self._convert_name(name) - if name not in self._fields: - if default is _MISSING: - default = self._default_value(name) - return default - if name in _UNICODEFIELDS: - value = self._fields[name] - return value - elif name in _LISTFIELDS: - value = self._fields[name] - if value is None: - return [] - res = [] - for val in value: - if name not in _LISTTUPLEFIELDS: - res.append(val) - else: - # That's for Project-URL - res.append((val[0], val[1])) - return res - - elif name in _ELEMENTSFIELD: - value = self._fields[name] - if isinstance(value, string_types): - return value.split(',') - return self._fields[name] - - def check(self, strict=False): - """Check if the metadata is compliant. If strict is True then raise if - no Name or Version are provided""" - self.set_metadata_version() - - # XXX should check the versions (if the file was loaded) - missing, warnings = [], [] - - for attr in ('Name', 'Version'): # required by PEP 345 - if attr not in self: - missing.append(attr) - - if strict and missing != []: - msg = 'missing required metadata: %s' % ', '.join(missing) - raise MetadataMissingError(msg) - - for attr in ('Home-page', 'Author'): - if attr not in self: - missing.append(attr) - - # checking metadata 1.2 (XXX needs to check 1.1, 1.0) - if self['Metadata-Version'] != '1.2': - return missing, warnings - - scheme = get_scheme(self.scheme) - - def are_valid_constraints(value): - for v in value: - if not scheme.is_valid_matcher(v.split(';')[0]): - return False - return True - - for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), - (_VERSIONS_FIELDS, - scheme.is_valid_constraint_list), - (_VERSION_FIELDS, - scheme.is_valid_version)): - for field in fields: - value = self.get(field, None) - if value is not None and not controller(value): - warnings.append("Wrong value for '%s': %s" % (field, value)) - - return missing, warnings - - def todict(self, skip_missing=False): - """Return fields as a dict. - - Field names will be converted to use the underscore-lowercase style - instead of hyphen-mixed case (i.e. home_page instead of Home-page). - """ - self.set_metadata_version() - - mapping_1_0 = ( - ('metadata_version', 'Metadata-Version'), - ('name', 'Name'), - ('version', 'Version'), - ('summary', 'Summary'), - ('home_page', 'Home-page'), - ('author', 'Author'), - ('author_email', 'Author-email'), - ('license', 'License'), - ('description', 'Description'), - ('keywords', 'Keywords'), - ('platform', 'Platform'), - ('classifiers', 'Classifier'), - ('download_url', 'Download-URL'), - ) - - data = {} - for key, field_name in mapping_1_0: - if not skip_missing or field_name in self._fields: - data[key] = self[field_name] - - if self['Metadata-Version'] == '1.2': - mapping_1_2 = ( - ('requires_dist', 'Requires-Dist'), - ('requires_python', 'Requires-Python'), - ('requires_external', 'Requires-External'), - ('provides_dist', 'Provides-Dist'), - ('obsoletes_dist', 'Obsoletes-Dist'), - ('project_url', 'Project-URL'), - ('maintainer', 'Maintainer'), - ('maintainer_email', 'Maintainer-email'), - ) - for key, field_name in mapping_1_2: - if not skip_missing or field_name in self._fields: - if key != 'project_url': - data[key] = self[field_name] - else: - data[key] = [','.join(u) for u in self[field_name]] - - elif self['Metadata-Version'] == '1.1': - mapping_1_1 = ( - ('provides', 'Provides'), - ('requires', 'Requires'), - ('obsoletes', 'Obsoletes'), - ) - for key, field_name in mapping_1_1: - if not skip_missing or field_name in self._fields: - data[key] = self[field_name] - - return data - - def add_requirements(self, requirements): - if self['Metadata-Version'] == '1.1': - # we can't have 1.1 metadata *and* Setuptools requires - for field in ('Obsoletes', 'Requires', 'Provides'): - if field in self: - del self[field] - self['Requires-Dist'] += requirements - - # Mapping API - # TODO could add iter* variants - - def keys(self): - return list(_version2fieldlist(self['Metadata-Version'])) - - def __iter__(self): - for key in self.keys(): - yield key - - def values(self): - return [self[key] for key in self.keys()] - - def items(self): - return [(key, self[key]) for key in self.keys()] - - def __repr__(self): - return '<%s %s %s>' % (self.__class__.__name__, self.name, - self.version) - - -METADATA_FILENAME = 'pydist.json' -WHEEL_METADATA_FILENAME = 'metadata.json' - - -class Metadata(object): - """ - The metadata of a release. This implementation uses 2.0 (JSON) - metadata where possible. If not possible, it wraps a LegacyMetadata - instance which handles the key-value metadata format. - """ - - METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') - - NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) - - VERSION_MATCHER = PEP440_VERSION_RE - - SUMMARY_MATCHER = re.compile('.{1,2047}') - - METADATA_VERSION = '2.0' - - GENERATOR = 'distlib (%s)' % __version__ - - MANDATORY_KEYS = { - 'name': (), - 'version': (), - 'summary': ('legacy',), - } - - INDEX_KEYS = ('name version license summary description author ' - 'author_email keywords platform home_page classifiers ' - 'download_url') - - DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' - 'dev_requires provides meta_requires obsoleted_by ' - 'supports_environments') - - SYNTAX_VALIDATORS = { - 'metadata_version': (METADATA_VERSION_MATCHER, ()), - 'name': (NAME_MATCHER, ('legacy',)), - 'version': (VERSION_MATCHER, ('legacy',)), - 'summary': (SUMMARY_MATCHER, ('legacy',)), - } - - __slots__ = ('_legacy', '_data', 'scheme') - - def __init__(self, path=None, fileobj=None, mapping=None, - scheme='default'): - if [path, fileobj, mapping].count(None) < 2: - raise TypeError('path, fileobj and mapping are exclusive') - self._legacy = None - self._data = None - self.scheme = scheme - #import pdb; pdb.set_trace() - if mapping is not None: - try: - self._validate_mapping(mapping, scheme) - self._data = mapping - except MetadataUnrecognizedVersionError: - self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) - self.validate() - else: - data = None - if path: - with open(path, 'rb') as f: - data = f.read() - elif fileobj: - data = fileobj.read() - if data is None: - # Initialised with no args - to be added - self._data = { - 'metadata_version': self.METADATA_VERSION, - 'generator': self.GENERATOR, - } - else: - if not isinstance(data, text_type): - data = data.decode('utf-8') - try: - self._data = json.loads(data) - self._validate_mapping(self._data, scheme) - except ValueError: - # Note: MetadataUnrecognizedVersionError does not - # inherit from ValueError (it's a DistlibException, - # which should not inherit from ValueError). - # The ValueError comes from the json.load - if that - # succeeds and we get a validation error, we want - # that to propagate - self._legacy = LegacyMetadata(fileobj=StringIO(data), - scheme=scheme) - self.validate() - - common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) - - none_list = (None, list) - none_dict = (None, dict) - - mapped_keys = { - 'run_requires': ('Requires-Dist', list), - 'build_requires': ('Setup-Requires-Dist', list), - 'dev_requires': none_list, - 'test_requires': none_list, - 'meta_requires': none_list, - 'extras': ('Provides-Extra', list), - 'modules': none_list, - 'namespaces': none_list, - 'exports': none_dict, - 'commands': none_dict, - 'classifiers': ('Classifier', list), - 'source_url': ('Download-URL', None), - 'metadata_version': ('Metadata-Version', None), - } - - del none_list, none_dict - - def __getattribute__(self, key): - common = object.__getattribute__(self, 'common_keys') - mapped = object.__getattribute__(self, 'mapped_keys') - if key in mapped: - lk, maker = mapped[key] - if self._legacy: - if lk is None: - result = None if maker is None else maker() - else: - result = self._legacy.get(lk) - else: - value = None if maker is None else maker() - if key not in ('commands', 'exports', 'modules', 'namespaces', - 'classifiers'): - result = self._data.get(key, value) - else: - # special cases for PEP 459 - sentinel = object() - result = sentinel - d = self._data.get('extensions') - if d: - if key == 'commands': - result = d.get('python.commands', value) - elif key == 'classifiers': - d = d.get('python.details') - if d: - result = d.get(key, value) - else: - d = d.get('python.exports') - if not d: - d = self._data.get('python.exports') - if d: - result = d.get(key, value) - if result is sentinel: - result = value - elif key not in common: - result = object.__getattribute__(self, key) - elif self._legacy: - result = self._legacy.get(key) - else: - result = self._data.get(key) - return result - - def _validate_value(self, key, value, scheme=None): - if key in self.SYNTAX_VALIDATORS: - pattern, exclusions = self.SYNTAX_VALIDATORS[key] - if (scheme or self.scheme) not in exclusions: - m = pattern.match(value) - if not m: - raise MetadataInvalidError("'%s' is an invalid value for " - "the '%s' property" % (value, - key)) - - def __setattr__(self, key, value): - self._validate_value(key, value) - common = object.__getattribute__(self, 'common_keys') - mapped = object.__getattribute__(self, 'mapped_keys') - if key in mapped: - lk, _ = mapped[key] - if self._legacy: - if lk is None: - raise NotImplementedError - self._legacy[lk] = value - elif key not in ('commands', 'exports', 'modules', 'namespaces', - 'classifiers'): - self._data[key] = value - else: - # special cases for PEP 459 - d = self._data.setdefault('extensions', {}) - if key == 'commands': - d['python.commands'] = value - elif key == 'classifiers': - d = d.setdefault('python.details', {}) - d[key] = value - else: - d = d.setdefault('python.exports', {}) - d[key] = value - elif key not in common: - object.__setattr__(self, key, value) - else: - if key == 'keywords': - if isinstance(value, string_types): - value = value.strip() - if value: - value = value.split() - else: - value = [] - if self._legacy: - self._legacy[key] = value - else: - self._data[key] = value - - @property - def name_and_version(self): - return _get_name_and_version(self.name, self.version, True) - - @property - def provides(self): - if self._legacy: - result = self._legacy['Provides-Dist'] - else: - result = self._data.setdefault('provides', []) - s = '%s (%s)' % (self.name, self.version) - if s not in result: - result.append(s) - return result - - @provides.setter - def provides(self, value): - if self._legacy: - self._legacy['Provides-Dist'] = value - else: - self._data['provides'] = value - - def get_requirements(self, reqts, extras=None, env=None): - """ - Base method to get dependencies, given a set of extras - to satisfy and an optional environment context. - :param reqts: A list of sometimes-wanted dependencies, - perhaps dependent on extras and environment. - :param extras: A list of optional components being requested. - :param env: An optional environment for marker evaluation. - """ - if self._legacy: - result = reqts - else: - result = [] - extras = get_extras(extras or [], self.extras) - for d in reqts: - if 'extra' not in d and 'environment' not in d: - # unconditional - include = True - else: - if 'extra' not in d: - # Not extra-dependent - only environment-dependent - include = True - else: - include = d.get('extra') in extras - if include: - # Not excluded because of extras, check environment - marker = d.get('environment') - if marker: - include = interpret(marker, env) - if include: - result.extend(d['requires']) - for key in ('build', 'dev', 'test'): - e = ':%s:' % key - if e in extras: - extras.remove(e) - # A recursive call, but it should terminate since 'test' - # has been removed from the extras - reqts = self._data.get('%s_requires' % key, []) - result.extend(self.get_requirements(reqts, extras=extras, - env=env)) - return result - - @property - def dictionary(self): - if self._legacy: - return self._from_legacy() - return self._data - - @property - def dependencies(self): - if self._legacy: - raise NotImplementedError - else: - return extract_by_key(self._data, self.DEPENDENCY_KEYS) - - @dependencies.setter - def dependencies(self, value): - if self._legacy: - raise NotImplementedError - else: - self._data.update(value) - - def _validate_mapping(self, mapping, scheme): - if mapping.get('metadata_version') != self.METADATA_VERSION: - raise MetadataUnrecognizedVersionError() - missing = [] - for key, exclusions in self.MANDATORY_KEYS.items(): - if key not in mapping: - if scheme not in exclusions: - missing.append(key) - if missing: - msg = 'Missing metadata items: %s' % ', '.join(missing) - raise MetadataMissingError(msg) - for k, v in mapping.items(): - self._validate_value(k, v, scheme) - - def validate(self): - if self._legacy: - missing, warnings = self._legacy.check(True) - if missing or warnings: - logger.warning('Metadata: missing: %s, warnings: %s', - missing, warnings) - else: - self._validate_mapping(self._data, self.scheme) - - def todict(self): - if self._legacy: - return self._legacy.todict(True) - else: - result = extract_by_key(self._data, self.INDEX_KEYS) - return result - - def _from_legacy(self): - assert self._legacy and not self._data - result = { - 'metadata_version': self.METADATA_VERSION, - 'generator': self.GENERATOR, - } - lmd = self._legacy.todict(True) # skip missing ones - for k in ('name', 'version', 'license', 'summary', 'description', - 'classifier'): - if k in lmd: - if k == 'classifier': - nk = 'classifiers' - else: - nk = k - result[nk] = lmd[k] - kw = lmd.get('Keywords', []) - if kw == ['']: - kw = [] - result['keywords'] = kw - keys = (('requires_dist', 'run_requires'), - ('setup_requires_dist', 'build_requires')) - for ok, nk in keys: - if ok in lmd and lmd[ok]: - result[nk] = [{'requires': lmd[ok]}] - result['provides'] = self.provides - author = {} - maintainer = {} - return result - - LEGACY_MAPPING = { - 'name': 'Name', - 'version': 'Version', - 'license': 'License', - 'summary': 'Summary', - 'description': 'Description', - 'classifiers': 'Classifier', - } - - def _to_legacy(self): - def process_entries(entries): - reqts = set() - for e in entries: - extra = e.get('extra') - env = e.get('environment') - rlist = e['requires'] - for r in rlist: - if not env and not extra: - reqts.add(r) - else: - marker = '' - if extra: - marker = 'extra == "%s"' % extra - if env: - if marker: - marker = '(%s) and %s' % (env, marker) - else: - marker = env - reqts.add(';'.join((r, marker))) - return reqts - - assert self._data and not self._legacy - result = LegacyMetadata() - nmd = self._data - for nk, ok in self.LEGACY_MAPPING.items(): - if nk in nmd: - result[ok] = nmd[nk] - r1 = process_entries(self.run_requires + self.meta_requires) - r2 = process_entries(self.build_requires + self.dev_requires) - if self.extras: - result['Provides-Extra'] = sorted(self.extras) - result['Requires-Dist'] = sorted(r1) - result['Setup-Requires-Dist'] = sorted(r2) - # TODO: other fields such as contacts - return result - - def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): - if [path, fileobj].count(None) != 1: - raise ValueError('Exactly one of path and fileobj is needed') - self.validate() - if legacy: - if self._legacy: - legacy_md = self._legacy - else: - legacy_md = self._to_legacy() - if path: - legacy_md.write(path, skip_unknown=skip_unknown) - else: - legacy_md.write_file(fileobj, skip_unknown=skip_unknown) - else: - if self._legacy: - d = self._from_legacy() - else: - d = self._data - if fileobj: - json.dump(d, fileobj, ensure_ascii=True, indent=2, - sort_keys=True) - else: - with codecs.open(path, 'w', 'utf-8') as f: - json.dump(d, f, ensure_ascii=True, indent=2, - sort_keys=True) - - def add_requirements(self, requirements): - if self._legacy: - self._legacy.add_requirements(requirements) - else: - run_requires = self._data.setdefault('run_requires', []) - always = None - for entry in run_requires: - if 'environment' not in entry and 'extra' not in entry: - always = entry - break - if always is None: - always = { 'requires': requirements } - run_requires.insert(0, always) - else: - rset = set(always['requires']) | set(requirements) - always['requires'] = sorted(rset) - - def __repr__(self): - name = self.name or '(no name)' - version = self.version or 'no version' - return '<%s %s %s (%s)>' % (self.__class__.__name__, - self.metadata_version, name, version) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/resources.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/resources.py deleted file mode 100644 index 1884016..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/resources.py +++ /dev/null @@ -1,355 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import bisect -import io -import logging -import os -import pkgutil -import shutil -import sys -import types -import zipimport - -from . import DistlibException -from .util import cached_property, get_cache_base, path_to_cache_dir, Cache - -logger = logging.getLogger(__name__) - - -cache = None # created when needed - - -class ResourceCache(Cache): - def __init__(self, base=None): - if base is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('resource-cache')) - super(ResourceCache, self).__init__(base) - - def is_stale(self, resource, path): - """ - Is the cache stale for the given resource? - - :param resource: The :class:`Resource` being cached. - :param path: The path of the resource in the cache. - :return: True if the cache is stale. - """ - # Cache invalidation is a hard problem :-) - return True - - def get(self, resource): - """ - Get a resource into the cache, - - :param resource: A :class:`Resource` instance. - :return: The pathname of the resource in the cache. - """ - prefix, path = resource.finder.get_cache_info(resource) - if prefix is None: - result = path - else: - result = os.path.join(self.base, self.prefix_to_dir(prefix), path) - dirname = os.path.dirname(result) - if not os.path.isdir(dirname): - os.makedirs(dirname) - if not os.path.exists(result): - stale = True - else: - stale = self.is_stale(resource, path) - if stale: - # write the bytes of the resource to the cache location - with open(result, 'wb') as f: - f.write(resource.bytes) - return result - - -class ResourceBase(object): - def __init__(self, finder, name): - self.finder = finder - self.name = name - - -class Resource(ResourceBase): - """ - A class representing an in-package resource, such as a data file. This is - not normally instantiated by user code, but rather by a - :class:`ResourceFinder` which manages the resource. - """ - is_container = False # Backwards compatibility - - def as_stream(self): - """ - Get the resource as a stream. - - This is not a property to make it obvious that it returns a new stream - each time. - """ - return self.finder.get_stream(self) - - @cached_property - def file_path(self): - global cache - if cache is None: - cache = ResourceCache() - return cache.get(self) - - @cached_property - def bytes(self): - return self.finder.get_bytes(self) - - @cached_property - def size(self): - return self.finder.get_size(self) - - -class ResourceContainer(ResourceBase): - is_container = True # Backwards compatibility - - @cached_property - def resources(self): - return self.finder.get_resources(self) - - -class ResourceFinder(object): - """ - Resource finder for file system resources. - """ - - if sys.platform.startswith('java'): - skipped_extensions = ('.pyc', '.pyo', '.class') - else: - skipped_extensions = ('.pyc', '.pyo') - - def __init__(self, module): - self.module = module - self.loader = getattr(module, '__loader__', None) - self.base = os.path.dirname(getattr(module, '__file__', '')) - - def _adjust_path(self, path): - return os.path.realpath(path) - - def _make_path(self, resource_name): - # Issue #50: need to preserve type of path on Python 2.x - # like os.path._get_sep - if isinstance(resource_name, bytes): # should only happen on 2.x - sep = b'/' - else: - sep = '/' - parts = resource_name.split(sep) - parts.insert(0, self.base) - result = os.path.join(*parts) - return self._adjust_path(result) - - def _find(self, path): - return os.path.exists(path) - - def get_cache_info(self, resource): - return None, resource.path - - def find(self, resource_name): - path = self._make_path(resource_name) - if not self._find(path): - result = None - else: - if self._is_directory(path): - result = ResourceContainer(self, resource_name) - else: - result = Resource(self, resource_name) - result.path = path - return result - - def get_stream(self, resource): - return open(resource.path, 'rb') - - def get_bytes(self, resource): - with open(resource.path, 'rb') as f: - return f.read() - - def get_size(self, resource): - return os.path.getsize(resource.path) - - def get_resources(self, resource): - def allowed(f): - return (f != '__pycache__' and not - f.endswith(self.skipped_extensions)) - return set([f for f in os.listdir(resource.path) if allowed(f)]) - - def is_container(self, resource): - return self._is_directory(resource.path) - - _is_directory = staticmethod(os.path.isdir) - - def iterator(self, resource_name): - resource = self.find(resource_name) - if resource is not None: - todo = [resource] - while todo: - resource = todo.pop(0) - yield resource - if resource.is_container: - rname = resource.name - for name in resource.resources: - if not rname: - new_name = name - else: - new_name = '/'.join([rname, name]) - child = self.find(new_name) - if child.is_container: - todo.append(child) - else: - yield child - - -class ZipResourceFinder(ResourceFinder): - """ - Resource finder for resources in .zip files. - """ - def __init__(self, module): - super(ZipResourceFinder, self).__init__(module) - archive = self.loader.archive - self.prefix_len = 1 + len(archive) - # PyPy doesn't have a _files attr on zipimporter, and you can't set one - if hasattr(self.loader, '_files'): - self._files = self.loader._files - else: - self._files = zipimport._zip_directory_cache[archive] - self.index = sorted(self._files) - - def _adjust_path(self, path): - return path - - def _find(self, path): - path = path[self.prefix_len:] - if path in self._files: - result = True - else: - if path and path[-1] != os.sep: - path = path + os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - if not result: - logger.debug('_find failed: %r %r', path, self.loader.prefix) - else: - logger.debug('_find worked: %r %r', path, self.loader.prefix) - return result - - def get_cache_info(self, resource): - prefix = self.loader.archive - path = resource.path[1 + len(prefix):] - return prefix, path - - def get_bytes(self, resource): - return self.loader.get_data(resource.path) - - def get_stream(self, resource): - return io.BytesIO(self.get_bytes(resource)) - - def get_size(self, resource): - path = resource.path[self.prefix_len:] - return self._files[path][3] - - def get_resources(self, resource): - path = resource.path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - plen = len(path) - result = set() - i = bisect.bisect(self.index, path) - while i < len(self.index): - if not self.index[i].startswith(path): - break - s = self.index[i][plen:] - result.add(s.split(os.sep, 1)[0]) # only immediate children - i += 1 - return result - - def _is_directory(self, path): - path = path[self.prefix_len:] - if path and path[-1] != os.sep: - path += os.sep - i = bisect.bisect(self.index, path) - try: - result = self.index[i].startswith(path) - except IndexError: - result = False - return result - -_finder_registry = { - type(None): ResourceFinder, - zipimport.zipimporter: ZipResourceFinder -} - -try: - # In Python 3.6, _frozen_importlib -> _frozen_importlib_external - try: - import _frozen_importlib_external as _fi - except ImportError: - import _frozen_importlib as _fi - _finder_registry[_fi.SourceFileLoader] = ResourceFinder - _finder_registry[_fi.FileFinder] = ResourceFinder - del _fi -except (ImportError, AttributeError): - pass - - -def register_finder(loader, finder_maker): - _finder_registry[type(loader)] = finder_maker - -_finder_cache = {} - - -def finder(package): - """ - Return a resource finder for a package. - :param package: The name of the package. - :return: A :class:`ResourceFinder` instance for the package. - """ - if package in _finder_cache: - result = _finder_cache[package] - else: - if package not in sys.modules: - __import__(package) - module = sys.modules[package] - path = getattr(module, '__path__', None) - if path is None: - raise DistlibException('You cannot get a finder for a module, ' - 'only for a package') - loader = getattr(module, '__loader__', None) - finder_maker = _finder_registry.get(type(loader)) - if finder_maker is None: - raise DistlibException('Unable to locate finder for %r' % package) - result = finder_maker(module) - _finder_cache[package] = result - return result - - -_dummy_module = types.ModuleType(str('__dummy__')) - - -def finder_for_path(path): - """ - Return a resource finder for a path, which should represent a container. - - :param path: The path. - :return: A :class:`ResourceFinder` instance for the path. - """ - result = None - # calls any path hooks, gets importer into cache - pkgutil.get_importer(path) - loader = sys.path_importer_cache.get(path) - finder = _finder_registry.get(type(loader)) - if finder: - module = _dummy_module - module.__file__ = os.path.join(path, '') - module.__loader__ = loader - result = finder(module) - return result diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py deleted file mode 100644 index 0b7c3d0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/scripts.py +++ /dev/null @@ -1,415 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2015 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from io import BytesIO -import logging -import os -import re -import struct -import sys - -from .compat import sysconfig, detect_encoding, ZipFile -from .resources import finder -from .util import (FileOperator, get_export_entry, convert_path, - get_executable, in_venv) - -logger = logging.getLogger(__name__) - -_DEFAULT_MANIFEST = ''' -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> - <assemblyIdentity version="1.0.0.0" - processorArchitecture="X86" - name="%s" - type="win32"/> - - <!-- Identify the application security requirements. --> - <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> - <security> - <requestedPrivileges> - <requestedExecutionLevel level="asInvoker" uiAccess="false"/> - </requestedPrivileges> - </security> - </trustInfo> -</assembly>'''.strip() - -# check if Python is called on the first line with this expression -FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') -SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- -if __name__ == '__main__': - import sys, re - - def _resolve(module, func): - __import__(module) - mod = sys.modules[module] - parts = func.split('.') - result = getattr(mod, parts.pop(0)) - for p in parts: - result = getattr(result, p) - return result - - try: - sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) - - func = _resolve('%(module)s', '%(func)s') - rc = func() # None interpreted as 0 - except Exception as e: # only supporting Python >= 2.6 - sys.stderr.write('%%s\n' %% e) - rc = 1 - sys.exit(rc) -''' - - -def _enquote_executable(executable): - if ' ' in executable: - # make sure we quote only the executable in case of env - # for example /usr/bin/env "/dir with spaces/bin/jython" - # instead of "/usr/bin/env /dir with spaces/bin/jython" - # otherwise whole - if executable.startswith('/usr/bin/env '): - env, _executable = executable.split(' ', 1) - if ' ' in _executable and not _executable.startswith('"'): - executable = '%s "%s"' % (env, _executable) - else: - if not executable.startswith('"'): - executable = '"%s"' % executable - return executable - - -class ScriptMaker(object): - """ - A class to copy or create scripts from source scripts or callable - specifications. - """ - script_template = SCRIPT_TEMPLATE - - executable = None # for shebangs - - def __init__(self, source_dir, target_dir, add_launchers=True, - dry_run=False, fileop=None): - self.source_dir = source_dir - self.target_dir = target_dir - self.add_launchers = add_launchers - self.force = False - self.clobber = False - # It only makes sense to set mode bits on POSIX. - self.set_mode = (os.name == 'posix') or (os.name == 'java' and - os._name == 'posix') - self.variants = set(('', 'X.Y')) - self._fileop = fileop or FileOperator(dry_run) - - self._is_nt = os.name == 'nt' or ( - os.name == 'java' and os._name == 'nt') - - def _get_alternate_executable(self, executable, options): - if options.get('gui', False) and self._is_nt: # pragma: no cover - dn, fn = os.path.split(executable) - fn = fn.replace('python', 'pythonw') - executable = os.path.join(dn, fn) - return executable - - if sys.platform.startswith('java'): # pragma: no cover - def _is_shell(self, executable): - """ - Determine if the specified executable is a script - (contains a #! line) - """ - try: - with open(executable) as fp: - return fp.read(2) == '#!' - except (OSError, IOError): - logger.warning('Failed to open %s', executable) - return False - - def _fix_jython_executable(self, executable): - if self._is_shell(executable): - # Workaround for Jython is not needed on Linux systems. - import java - - if java.lang.System.getProperty('os.name') == 'Linux': - return executable - elif executable.lower().endswith('jython.exe'): - # Use wrapper exe for Jython on Windows - return executable - return '/usr/bin/env %s' % executable - - def _build_shebang(self, executable, post_interp): - """ - Build a shebang line. In the simple case (on Windows, or a shebang line - which is not too long or contains spaces) use a simple formulation for - the shebang. Otherwise, use /bin/sh as the executable, with a contrived - shebang which allows the script to run either under Python or sh, using - suitable quoting. Thanks to Harald Nordgren for his input. - - See also: http://www.in-ulm.de/~mascheck/various/shebang/#length - https://hg.mozilla.org/mozilla-central/file/tip/mach - """ - if os.name != 'posix': - simple_shebang = True - else: - # Add 3 for '#!' prefix and newline suffix. - shebang_length = len(executable) + len(post_interp) + 3 - if sys.platform == 'darwin': - max_shebang_length = 512 - else: - max_shebang_length = 127 - simple_shebang = ((b' ' not in executable) and - (shebang_length <= max_shebang_length)) - - if simple_shebang: - result = b'#!' + executable + post_interp + b'\n' - else: - result = b'#!/bin/sh\n' - result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' - result += b"' '''" - return result - - def _get_shebang(self, encoding, post_interp=b'', options=None): - enquote = True - if self.executable: - executable = self.executable - enquote = False # assume this will be taken care of - elif not sysconfig.is_python_build(): - executable = get_executable() - elif in_venv(): # pragma: no cover - executable = os.path.join(sysconfig.get_path('scripts'), - 'python%s' % sysconfig.get_config_var('EXE')) - else: # pragma: no cover - executable = os.path.join( - sysconfig.get_config_var('BINDIR'), - 'python%s%s' % (sysconfig.get_config_var('VERSION'), - sysconfig.get_config_var('EXE'))) - if options: - executable = self._get_alternate_executable(executable, options) - - if sys.platform.startswith('java'): # pragma: no cover - executable = self._fix_jython_executable(executable) - # Normalise case for Windows - executable = os.path.normcase(executable) - # If the user didn't specify an executable, it may be necessary to - # cater for executable paths with spaces (not uncommon on Windows) - if enquote: - executable = _enquote_executable(executable) - # Issue #51: don't use fsencode, since we later try to - # check that the shebang is decodable using utf-8. - executable = executable.encode('utf-8') - # in case of IronPython, play safe and enable frames support - if (sys.platform == 'cli' and '-X:Frames' not in post_interp - and '-X:FullFrames' not in post_interp): # pragma: no cover - post_interp += b' -X:Frames' - shebang = self._build_shebang(executable, post_interp) - # Python parser starts to read a script using UTF-8 until - # it gets a #coding:xxx cookie. The shebang has to be the - # first line of a file, the #coding:xxx cookie cannot be - # written before. So the shebang has to be decodable from - # UTF-8. - try: - shebang.decode('utf-8') - except UnicodeDecodeError: # pragma: no cover - raise ValueError( - 'The shebang (%r) is not decodable from utf-8' % shebang) - # If the script is encoded to a custom encoding (use a - # #coding:xxx cookie), the shebang has to be decodable from - # the script encoding too. - if encoding != 'utf-8': - try: - shebang.decode(encoding) - except UnicodeDecodeError: # pragma: no cover - raise ValueError( - 'The shebang (%r) is not decodable ' - 'from the script encoding (%r)' % (shebang, encoding)) - return shebang - - def _get_script_text(self, entry): - return self.script_template % dict(module=entry.prefix, - func=entry.suffix) - - manifest = _DEFAULT_MANIFEST - - def get_manifest(self, exename): - base = os.path.basename(exename) - return self.manifest % base - - def _write_script(self, names, shebang, script_bytes, filenames, ext): - use_launcher = self.add_launchers and self._is_nt - linesep = os.linesep.encode('utf-8') - if not use_launcher: - script_bytes = shebang + linesep + script_bytes - else: # pragma: no cover - if ext == 'py': - launcher = self._get_launcher('t') - else: - launcher = self._get_launcher('w') - stream = BytesIO() - with ZipFile(stream, 'w') as zf: - zf.writestr('__main__.py', script_bytes) - zip_data = stream.getvalue() - script_bytes = launcher + shebang + linesep + zip_data - for name in names: - outname = os.path.join(self.target_dir, name) - if use_launcher: # pragma: no cover - n, e = os.path.splitext(outname) - if e.startswith('.py'): - outname = n - outname = '%s.exe' % outname - try: - self._fileop.write_binary_file(outname, script_bytes) - except Exception: - # Failed writing an executable - it might be in use. - logger.warning('Failed to write executable - trying to ' - 'use .deleteme logic') - dfname = '%s.deleteme' % outname - if os.path.exists(dfname): - os.remove(dfname) # Not allowed to fail here - os.rename(outname, dfname) # nor here - self._fileop.write_binary_file(outname, script_bytes) - logger.debug('Able to replace executable using ' - '.deleteme logic') - try: - os.remove(dfname) - except Exception: - pass # still in use - ignore error - else: - if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover - outname = '%s.%s' % (outname, ext) - if os.path.exists(outname) and not self.clobber: - logger.warning('Skipping existing file %s', outname) - continue - self._fileop.write_binary_file(outname, script_bytes) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - - def _make_script(self, entry, filenames, options=None): - post_interp = b'' - if options: - args = options.get('interpreter_args', []) - if args: - args = ' %s' % ' '.join(args) - post_interp = args.encode('utf-8') - shebang = self._get_shebang('utf-8', post_interp, options=options) - script = self._get_script_text(entry).encode('utf-8') - name = entry.name - scriptnames = set() - if '' in self.variants: - scriptnames.add(name) - if 'X' in self.variants: - scriptnames.add('%s%s' % (name, sys.version[0])) - if 'X.Y' in self.variants: - scriptnames.add('%s-%s' % (name, sys.version[:3])) - if options and options.get('gui', False): - ext = 'pyw' - else: - ext = 'py' - self._write_script(scriptnames, shebang, script, filenames, ext) - - def _copy_script(self, script, filenames): - adjust = False - script = os.path.join(self.source_dir, convert_path(script)) - outname = os.path.join(self.target_dir, os.path.basename(script)) - if not self.force and not self._fileop.newer(script, outname): - logger.debug('not copying %s (up-to-date)', script) - return - - # Always open the file, but ignore failures in dry-run mode -- - # that way, we'll get accurate feedback if we can read the - # script. - try: - f = open(script, 'rb') - except IOError: # pragma: no cover - if not self.dry_run: - raise - f = None - else: - first_line = f.readline() - if not first_line: # pragma: no cover - logger.warning('%s: %s is an empty file (skipping)', - self.get_command_name(), script) - return - - match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) - if match: - adjust = True - post_interp = match.group(1) or b'' - - if not adjust: - if f: - f.close() - self._fileop.copy_file(script, outname) - if self.set_mode: - self._fileop.set_executable_mode([outname]) - filenames.append(outname) - else: - logger.info('copying and adjusting %s -> %s', script, - self.target_dir) - if not self._fileop.dry_run: - encoding, lines = detect_encoding(f.readline) - f.seek(0) - shebang = self._get_shebang(encoding, post_interp) - if b'pythonw' in first_line: # pragma: no cover - ext = 'pyw' - else: - ext = 'py' - n = os.path.basename(outname) - self._write_script([n], shebang, f.read(), filenames, ext) - if f: - f.close() - - @property - def dry_run(self): - return self._fileop.dry_run - - @dry_run.setter - def dry_run(self, value): - self._fileop.dry_run = value - - if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover - # Executable launcher support. - # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ - - def _get_launcher(self, kind): - if struct.calcsize('P') == 8: # 64-bit - bits = '64' - else: - bits = '32' - name = '%s%s.exe' % (kind, bits) - # Issue 31: don't hardcode an absolute package name, but - # determine it relative to the current package - distlib_package = __name__.rsplit('.', 1)[0] - result = finder(distlib_package).find(name).bytes - return result - - # Public API follows - - def make(self, specification, options=None): - """ - Make a script. - - :param specification: The specification, which is either a valid export - entry specification (to make a script from a - callable) or a filename (to make a script by - copying from a source location). - :param options: A dictionary of options controlling script generation. - :return: A list of all absolute pathnames written to. - """ - filenames = [] - entry = get_export_entry(specification) - if entry is None: - self._copy_script(specification, filenames) - else: - self._make_script(entry, filenames, options=options) - return filenames - - def make_multiple(self, specifications, options=None): - """ - Take a list of specifications and make scripts from them, - :param specifications: A list of specifications. - :return: A list of all absolute pathnames written to, - """ - filenames = [] - for specification in specifications: - filenames.extend(self.make(specification, options)) - return filenames diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/t32.exe b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/t32.exe deleted file mode 100755 index a09d926872d84ae22a617dfe9ebb560d420b37de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92672 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 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/t64.exe b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/t64.exe deleted file mode 100755 index 9da9b40de922fb203df6b9a1d0ad4139af536850..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102400 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�vlnW`{LoXpTySn$@;x8yoz96jn?+Kk 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�?dYNUd4WaURX_A__M4W}D0!0n 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 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/util.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/util.py deleted file mode 100644 index 0b14a93..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/util.py +++ /dev/null @@ -1,1755 +0,0 @@ -# -# Copyright (C) 2012-2017 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -import codecs -from collections import deque -import contextlib -import csv -from glob import iglob as std_iglob -import io -import json -import logging -import os -import py_compile -import re -import socket -try: - import ssl -except ImportError: # pragma: no cover - ssl = None -import subprocess -import sys -import tarfile -import tempfile -import textwrap - -try: - import threading -except ImportError: # pragma: no cover - import dummy_threading as threading -import time - -from . import DistlibException -from .compat import (string_types, text_type, shutil, raw_input, StringIO, - cache_from_source, urlopen, urljoin, httplib, xmlrpclib, - splittype, HTTPHandler, BaseConfigurator, valid_ident, - Container, configparser, URLError, ZipFile, fsdecode, - unquote, urlparse) - -logger = logging.getLogger(__name__) - -# -# Requirement parsing code as per PEP 508 -# - -IDENTIFIER = re.compile(r'^([\w\.-]+)\s*') -VERSION_IDENTIFIER = re.compile(r'^([\w\.*+-]+)\s*') -COMPARE_OP = re.compile(r'^(<=?|>=?|={2,3}|[~!]=)\s*') -MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') -OR = re.compile(r'^or\b\s*') -AND = re.compile(r'^and\b\s*') -NON_SPACE = re.compile(r'(\S+)\s*') -STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') - - -def parse_marker(marker_string): - """ - Parse a marker string and return a dictionary containing a marker expression. - - The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in - the expression grammar, or strings. A string contained in quotes is to be - interpreted as a literal string, and a string not contained in quotes is a - variable (such as os_name). - """ - def marker_var(remaining): - # either identifier, or literal string - m = IDENTIFIER.match(remaining) - if m: - result = m.groups()[0] - remaining = remaining[m.end():] - elif not remaining: - raise SyntaxError('unexpected end of input') - else: - q = remaining[0] - if q not in '\'"': - raise SyntaxError('invalid expression: %s' % remaining) - oq = '\'"'.replace(q, '') - remaining = remaining[1:] - parts = [q] - while remaining: - # either a string chunk, or oq, or q to terminate - if remaining[0] == q: - break - elif remaining[0] == oq: - parts.append(oq) - remaining = remaining[1:] - else: - m = STRING_CHUNK.match(remaining) - if not m: - raise SyntaxError('error in string literal: %s' % remaining) - parts.append(m.groups()[0]) - remaining = remaining[m.end():] - else: - s = ''.join(parts) - raise SyntaxError('unterminated string: %s' % s) - parts.append(q) - result = ''.join(parts) - remaining = remaining[1:].lstrip() # skip past closing quote - return result, remaining - - def marker_expr(remaining): - if remaining and remaining[0] == '(': - result, remaining = marker(remaining[1:].lstrip()) - if remaining[0] != ')': - raise SyntaxError('unterminated parenthesis: %s' % remaining) - remaining = remaining[1:].lstrip() - else: - lhs, remaining = marker_var(remaining) - while remaining: - m = MARKER_OP.match(remaining) - if not m: - break - op = m.groups()[0] - remaining = remaining[m.end():] - rhs, remaining = marker_var(remaining) - lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} - result = lhs - return result, remaining - - def marker_and(remaining): - lhs, remaining = marker_expr(remaining) - while remaining: - m = AND.match(remaining) - if not m: - break - remaining = remaining[m.end():] - rhs, remaining = marker_expr(remaining) - lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} - return lhs, remaining - - def marker(remaining): - lhs, remaining = marker_and(remaining) - while remaining: - m = OR.match(remaining) - if not m: - break - remaining = remaining[m.end():] - rhs, remaining = marker_and(remaining) - lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} - return lhs, remaining - - return marker(marker_string) - - -def parse_requirement(req): - """ - Parse a requirement passed in as a string. Return a Container - whose attributes contain the various parts of the requirement. - """ - remaining = req.strip() - if not remaining or remaining.startswith('#'): - return None - m = IDENTIFIER.match(remaining) - if not m: - raise SyntaxError('name expected: %s' % remaining) - distname = m.groups()[0] - remaining = remaining[m.end():] - extras = mark_expr = versions = uri = None - if remaining and remaining[0] == '[': - i = remaining.find(']', 1) - if i < 0: - raise SyntaxError('unterminated extra: %s' % remaining) - s = remaining[1:i] - remaining = remaining[i + 1:].lstrip() - extras = [] - while s: - m = IDENTIFIER.match(s) - if not m: - raise SyntaxError('malformed extra: %s' % s) - extras.append(m.groups()[0]) - s = s[m.end():] - if not s: - break - if s[0] != ',': - raise SyntaxError('comma expected in extras: %s' % s) - s = s[1:].lstrip() - if not extras: - extras = None - if remaining: - if remaining[0] == '@': - # it's a URI - remaining = remaining[1:].lstrip() - m = NON_SPACE.match(remaining) - if not m: - raise SyntaxError('invalid URI: %s' % remaining) - uri = m.groups()[0] - t = urlparse(uri) - # there are issues with Python and URL parsing, so this test - # is a bit crude. See bpo-20271, bpo-23505. Python doesn't - # always parse invalid URLs correctly - it should raise - # exceptions for malformed URLs - if not (t.scheme and t.netloc): - raise SyntaxError('Invalid URL: %s' % uri) - remaining = remaining[m.end():].lstrip() - else: - - def get_versions(ver_remaining): - """ - Return a list of operator, version tuples if any are - specified, else None. - """ - m = COMPARE_OP.match(ver_remaining) - versions = None - if m: - versions = [] - while True: - op = m.groups()[0] - ver_remaining = ver_remaining[m.end():] - m = VERSION_IDENTIFIER.match(ver_remaining) - if not m: - raise SyntaxError('invalid version: %s' % ver_remaining) - v = m.groups()[0] - versions.append((op, v)) - ver_remaining = ver_remaining[m.end():] - if not ver_remaining or ver_remaining[0] != ',': - break - ver_remaining = ver_remaining[1:].lstrip() - m = COMPARE_OP.match(ver_remaining) - if not m: - raise SyntaxError('invalid constraint: %s' % ver_remaining) - if not versions: - versions = None - return versions, ver_remaining - - if remaining[0] != '(': - versions, remaining = get_versions(remaining) - else: - i = remaining.find(')', 1) - if i < 0: - raise SyntaxError('unterminated parenthesis: %s' % remaining) - s = remaining[1:i] - remaining = remaining[i + 1:].lstrip() - # As a special diversion from PEP 508, allow a version number - # a.b.c in parentheses as a synonym for ~= a.b.c (because this - # is allowed in earlier PEPs) - if COMPARE_OP.match(s): - versions, _ = get_versions(s) - else: - m = VERSION_IDENTIFIER.match(s) - if not m: - raise SyntaxError('invalid constraint: %s' % s) - v = m.groups()[0] - s = s[m.end():].lstrip() - if s: - raise SyntaxError('invalid constraint: %s' % s) - versions = [('~=', v)] - - if remaining: - if remaining[0] != ';': - raise SyntaxError('invalid requirement: %s' % remaining) - remaining = remaining[1:].lstrip() - - mark_expr, remaining = parse_marker(remaining) - - if remaining and remaining[0] != '#': - raise SyntaxError('unexpected trailing data: %s' % remaining) - - if not versions: - rs = distname - else: - rs = '%s %s' % (distname, ', '.join(['%s %s' % con for con in versions])) - return Container(name=distname, extras=extras, constraints=versions, - marker=mark_expr, url=uri, requirement=rs) - - -def get_resources_dests(resources_root, rules): - """Find destinations for resources files""" - - def get_rel_path(root, path): - # normalizes and returns a lstripped-/-separated path - root = root.replace(os.path.sep, '/') - path = path.replace(os.path.sep, '/') - assert path.startswith(root) - return path[len(root):].lstrip('/') - - destinations = {} - for base, suffix, dest in rules: - prefix = os.path.join(resources_root, base) - for abs_base in iglob(prefix): - abs_glob = os.path.join(abs_base, suffix) - for abs_path in iglob(abs_glob): - resource_file = get_rel_path(resources_root, abs_path) - if dest is None: # remove the entry if it was here - destinations.pop(resource_file, None) - else: - rel_path = get_rel_path(abs_base, abs_path) - rel_dest = dest.replace(os.path.sep, '/').rstrip('/') - destinations[resource_file] = rel_dest + '/' + rel_path - return destinations - - -def in_venv(): - if hasattr(sys, 'real_prefix'): - # virtualenv venvs - result = True - else: - # PEP 405 venvs - result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) - return result - - -def get_executable(): -# The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as -# changes to the stub launcher mean that sys.executable always points -# to the stub on OS X -# if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' -# in os.environ): -# result = os.environ['__PYVENV_LAUNCHER__'] -# else: -# result = sys.executable -# return result - result = os.path.normcase(sys.executable) - if not isinstance(result, text_type): - result = fsdecode(result) - return result - - -def proceed(prompt, allowed_chars, error_prompt=None, default=None): - p = prompt - while True: - s = raw_input(p) - p = prompt - if not s and default: - s = default - if s: - c = s[0].lower() - if c in allowed_chars: - break - if error_prompt: - p = '%c: %s\n%s' % (c, error_prompt, prompt) - return c - - -def extract_by_key(d, keys): - if isinstance(keys, string_types): - keys = keys.split() - result = {} - for key in keys: - if key in d: - result[key] = d[key] - return result - -def read_exports(stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - # Try to load as JSON, falling back on legacy format - data = stream.read() - stream = StringIO(data) - try: - jdata = json.load(stream) - result = jdata['extensions']['python.exports']['exports'] - for group, entries in result.items(): - for k, v in entries.items(): - s = '%s = %s' % (k, v) - entry = get_export_entry(s) - assert entry is not None - entries[k] = entry - return result - except Exception: - stream.seek(0, 0) - - def read_stream(cp, stream): - if hasattr(cp, 'read_file'): - cp.read_file(stream) - else: - cp.readfp(stream) - - cp = configparser.ConfigParser() - try: - read_stream(cp, stream) - except configparser.MissingSectionHeaderError: - stream.close() - data = textwrap.dedent(data) - stream = StringIO(data) - read_stream(cp, stream) - - result = {} - for key in cp.sections(): - result[key] = entries = {} - for name, value in cp.items(key): - s = '%s = %s' % (name, value) - entry = get_export_entry(s) - assert entry is not None - #entry.dist = self - entries[name] = entry - return result - - -def write_exports(exports, stream): - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getwriter('utf-8')(stream) - cp = configparser.ConfigParser() - for k, v in exports.items(): - # TODO check k, v for valid values - cp.add_section(k) - for entry in v.values(): - if entry.suffix is None: - s = entry.prefix - else: - s = '%s:%s' % (entry.prefix, entry.suffix) - if entry.flags: - s = '%s [%s]' % (s, ', '.join(entry.flags)) - cp.set(k, entry.name, s) - cp.write(stream) - - -@contextlib.contextmanager -def tempdir(): - td = tempfile.mkdtemp() - try: - yield td - finally: - shutil.rmtree(td) - -@contextlib.contextmanager -def chdir(d): - cwd = os.getcwd() - try: - os.chdir(d) - yield - finally: - os.chdir(cwd) - - -@contextlib.contextmanager -def socket_timeout(seconds=15): - cto = socket.getdefaulttimeout() - try: - socket.setdefaulttimeout(seconds) - yield - finally: - socket.setdefaulttimeout(cto) - - -class cached_property(object): - def __init__(self, func): - self.func = func - #for attr in ('__name__', '__module__', '__doc__'): - # setattr(self, attr, getattr(func, attr, None)) - - def __get__(self, obj, cls=None): - if obj is None: - return self - value = self.func(obj) - object.__setattr__(obj, self.func.__name__, value) - #obj.__dict__[self.func.__name__] = value = self.func(obj) - return value - -def convert_path(pathname): - """Return 'pathname' as a name that will work on the native filesystem. - - The path is split on '/' and put back together again using the current - directory separator. Needed because filenames in the setup script are - always supplied in Unix style, and have to be converted to the local - convention before we can actually use them in the filesystem. Raises - ValueError on non-Unix-ish systems if 'pathname' either starts or - ends with a slash. - """ - if os.sep == '/': - return pathname - if not pathname: - return pathname - if pathname[0] == '/': - raise ValueError("path '%s' cannot be absolute" % pathname) - if pathname[-1] == '/': - raise ValueError("path '%s' cannot end with '/'" % pathname) - - paths = pathname.split('/') - while os.curdir in paths: - paths.remove(os.curdir) - if not paths: - return os.curdir - return os.path.join(*paths) - - -class FileOperator(object): - def __init__(self, dry_run=False): - self.dry_run = dry_run - self.ensured = set() - self._init_record() - - def _init_record(self): - self.record = False - self.files_written = set() - self.dirs_created = set() - - def record_as_written(self, path): - if self.record: - self.files_written.add(path) - - def newer(self, source, target): - """Tell if the target is newer than the source. - - Returns true if 'source' exists and is more recently modified than - 'target', or if 'source' exists and 'target' doesn't. - - Returns false if both exist and 'target' is the same age or younger - than 'source'. Raise PackagingFileError if 'source' does not exist. - - Note that this test is not very accurate: files created in the same - second will have the same "age". - """ - if not os.path.exists(source): - raise DistlibException("file '%r' does not exist" % - os.path.abspath(source)) - if not os.path.exists(target): - return True - - return os.stat(source).st_mtime > os.stat(target).st_mtime - - def copy_file(self, infile, outfile, check=True): - """Copy a file respecting dry-run and force flags. - """ - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying %s to %s', infile, outfile) - if not self.dry_run: - msg = None - if check: - if os.path.islink(outfile): - msg = '%s is a symlink' % outfile - elif os.path.exists(outfile) and not os.path.isfile(outfile): - msg = '%s is a non-regular file' % outfile - if msg: - raise ValueError(msg + ' which would be overwritten') - shutil.copyfile(infile, outfile) - self.record_as_written(outfile) - - def copy_stream(self, instream, outfile, encoding=None): - assert not os.path.isdir(outfile) - self.ensure_dir(os.path.dirname(outfile)) - logger.info('Copying stream %s to %s', instream, outfile) - if not self.dry_run: - if encoding is None: - outstream = open(outfile, 'wb') - else: - outstream = codecs.open(outfile, 'w', encoding=encoding) - try: - shutil.copyfileobj(instream, outstream) - finally: - outstream.close() - self.record_as_written(outfile) - - def write_binary_file(self, path, data): - self.ensure_dir(os.path.dirname(path)) - if not self.dry_run: - with open(path, 'wb') as f: - f.write(data) - self.record_as_written(path) - - def write_text_file(self, path, data, encoding): - self.ensure_dir(os.path.dirname(path)) - if not self.dry_run: - with open(path, 'wb') as f: - f.write(data.encode(encoding)) - self.record_as_written(path) - - def set_mode(self, bits, mask, files): - if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): - # Set the executable bits (owner, group, and world) on - # all the files specified. - for f in files: - if self.dry_run: - logger.info("changing mode of %s", f) - else: - mode = (os.stat(f).st_mode | bits) & mask - logger.info("changing mode of %s to %o", f, mode) - os.chmod(f, mode) - - set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) - - def ensure_dir(self, path): - path = os.path.abspath(path) - if path not in self.ensured and not os.path.exists(path): - self.ensured.add(path) - d, f = os.path.split(path) - self.ensure_dir(d) - logger.info('Creating %s' % path) - if not self.dry_run: - os.mkdir(path) - if self.record: - self.dirs_created.add(path) - - def byte_compile(self, path, optimize=False, force=False, prefix=None): - dpath = cache_from_source(path, not optimize) - logger.info('Byte-compiling %s to %s', path, dpath) - if not self.dry_run: - if force or self.newer(path, dpath): - if not prefix: - diagpath = None - else: - assert path.startswith(prefix) - diagpath = path[len(prefix):] - py_compile.compile(path, dpath, diagpath, True) # raise error - self.record_as_written(dpath) - return dpath - - def ensure_removed(self, path): - if os.path.exists(path): - if os.path.isdir(path) and not os.path.islink(path): - logger.debug('Removing directory tree at %s', path) - if not self.dry_run: - shutil.rmtree(path) - if self.record: - if path in self.dirs_created: - self.dirs_created.remove(path) - else: - if os.path.islink(path): - s = 'link' - else: - s = 'file' - logger.debug('Removing %s %s', s, path) - if not self.dry_run: - os.remove(path) - if self.record: - if path in self.files_written: - self.files_written.remove(path) - - def is_writable(self, path): - result = False - while not result: - if os.path.exists(path): - result = os.access(path, os.W_OK) - break - parent = os.path.dirname(path) - if parent == path: - break - path = parent - return result - - def commit(self): - """ - Commit recorded changes, turn off recording, return - changes. - """ - assert self.record - result = self.files_written, self.dirs_created - self._init_record() - return result - - def rollback(self): - if not self.dry_run: - for f in list(self.files_written): - if os.path.exists(f): - os.remove(f) - # dirs should all be empty now, except perhaps for - # __pycache__ subdirs - # reverse so that subdirs appear before their parents - dirs = sorted(self.dirs_created, reverse=True) - for d in dirs: - flist = os.listdir(d) - if flist: - assert flist == ['__pycache__'] - sd = os.path.join(d, flist[0]) - os.rmdir(sd) - os.rmdir(d) # should fail if non-empty - self._init_record() - -def resolve(module_name, dotted_path): - if module_name in sys.modules: - mod = sys.modules[module_name] - else: - mod = __import__(module_name) - if dotted_path is None: - result = mod - else: - parts = dotted_path.split('.') - result = getattr(mod, parts.pop(0)) - for p in parts: - result = getattr(result, p) - return result - - -class ExportEntry(object): - def __init__(self, name, prefix, suffix, flags): - self.name = name - self.prefix = prefix - self.suffix = suffix - self.flags = flags - - @cached_property - def value(self): - return resolve(self.prefix, self.suffix) - - def __repr__(self): # pragma: no cover - return '<ExportEntry %s = %s:%s %s>' % (self.name, self.prefix, - self.suffix, self.flags) - - def __eq__(self, other): - if not isinstance(other, ExportEntry): - result = False - else: - result = (self.name == other.name and - self.prefix == other.prefix and - self.suffix == other.suffix and - self.flags == other.flags) - return result - - __hash__ = object.__hash__ - - -ENTRY_RE = re.compile(r'''(?P<name>(\w|[-.+])+) - \s*=\s*(?P<callable>(\w+)([:\.]\w+)*) - \s*(\[\s*(?P<flags>\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? - ''', re.VERBOSE) - -def get_export_entry(specification): - m = ENTRY_RE.search(specification) - if not m: - result = None - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - else: - d = m.groupdict() - name = d['name'] - path = d['callable'] - colons = path.count(':') - if colons == 0: - prefix, suffix = path, None - else: - if colons != 1: - raise DistlibException("Invalid specification " - "'%s'" % specification) - prefix, suffix = path.split(':') - flags = d['flags'] - if flags is None: - if '[' in specification or ']' in specification: - raise DistlibException("Invalid specification " - "'%s'" % specification) - flags = [] - else: - flags = [f.strip() for f in flags.split(',')] - result = ExportEntry(name, prefix, suffix, flags) - return result - - -def get_cache_base(suffix=None): - """ - Return the default base location for distlib caches. If the directory does - not exist, it is created. Use the suffix provided for the base directory, - and default to '.distlib' if it isn't provided. - - On Windows, if LOCALAPPDATA is defined in the environment, then it is - assumed to be a directory, and will be the parent directory of the result. - On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home - directory - using os.expanduser('~') - will be the parent directory of - the result. - - The result is just the directory '.distlib' in the parent directory as - determined above, or with the name specified with ``suffix``. - """ - if suffix is None: - suffix = '.distlib' - if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: - result = os.path.expandvars('$localappdata') - else: - # Assume posix, or old Windows - result = os.path.expanduser('~') - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if os.path.isdir(result): - usable = os.access(result, os.W_OK) - if not usable: - logger.warning('Directory exists but is not writable: %s', result) - else: - try: - os.makedirs(result) - usable = True - except OSError: - logger.warning('Unable to create %s', result, exc_info=True) - usable = False - if not usable: - result = tempfile.mkdtemp() - logger.warning('Default location unusable, using %s', result) - return os.path.join(result, suffix) - - -def path_to_cache_dir(path): - """ - Convert an absolute path to a directory name for use in a cache. - - The algorithm used is: - - #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. - #. Any occurrence of ``os.sep`` is replaced with ``'--'``. - #. ``'.cache'`` is appended. - """ - d, p = os.path.splitdrive(os.path.abspath(path)) - if d: - d = d.replace(':', '---') - p = p.replace(os.sep, '--') - return d + p + '.cache' - - -def ensure_slash(s): - if not s.endswith('/'): - return s + '/' - return s - - -def parse_credentials(netloc): - username = password = None - if '@' in netloc: - prefix, netloc = netloc.split('@', 1) - if ':' not in prefix: - username = prefix - else: - username, password = prefix.split(':', 1) - return username, password, netloc - - -def get_process_umask(): - result = os.umask(0o22) - os.umask(result) - return result - -def is_string_sequence(seq): - result = True - i = None - for i, s in enumerate(seq): - if not isinstance(s, string_types): - result = False - break - assert i is not None - return result - -PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' - '([a-z0-9_.+-]+)', re.I) -PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') - - -def split_filename(filename, project_name=None): - """ - Extract name, version, python version from a filename (no extension) - - Return name, version, pyver or None - """ - result = None - pyver = None - filename = unquote(filename).replace(' ', '-') - m = PYTHON_VERSION.search(filename) - if m: - pyver = m.group(1) - filename = filename[:m.start()] - if project_name and len(filename) > len(project_name) + 1: - m = re.match(re.escape(project_name) + r'\b', filename) - if m: - n = m.end() - result = filename[:n], filename[n + 1:], pyver - if result is None: - m = PROJECT_NAME_AND_VERSION.match(filename) - if m: - result = m.group(1), m.group(3), pyver - return result - -# Allow spaces in name because of legacy dists like "Twisted Core" -NAME_VERSION_RE = re.compile(r'(?P<name>[\w .-]+)\s*' - r'\(\s*(?P<ver>[^\s)]+)\)$') - -def parse_name_and_version(p): - """ - A utility method used to get name and version from a string. - - From e.g. a Provides-Dist value. - - :param p: A value in a form 'foo (1.0)' - :return: The name and version as a tuple. - """ - m = NAME_VERSION_RE.match(p) - if not m: - raise DistlibException('Ill-formed name/version string: \'%s\'' % p) - d = m.groupdict() - return d['name'].strip().lower(), d['ver'] - -def get_extras(requested, available): - result = set() - requested = set(requested or []) - available = set(available or []) - if '*' in requested: - requested.remove('*') - result |= available - for r in requested: - if r == '-': - result.add(r) - elif r.startswith('-'): - unwanted = r[1:] - if unwanted not in available: - logger.warning('undeclared extra: %s' % unwanted) - if unwanted in result: - result.remove(unwanted) - else: - if r not in available: - logger.warning('undeclared extra: %s' % r) - result.add(r) - return result -# -# Extended metadata functionality -# - -def _get_external_data(url): - result = {} - try: - # urlopen might fail if it runs into redirections, - # because of Python issue #13696. Fixed in locators - # using a custom redirect handler. - resp = urlopen(url) - headers = resp.info() - ct = headers.get('Content-Type') - if not ct.startswith('application/json'): - logger.debug('Unexpected response for JSON request: %s', ct) - else: - reader = codecs.getreader('utf-8')(resp) - #data = reader.read().decode('utf-8') - #result = json.loads(data) - result = json.load(reader) - except Exception as e: - logger.exception('Failed to get external data for %s: %s', url, e) - return result - -_external_data_base_url = 'https://www.red-dove.com/pypi/projects/' - -def get_project_data(name): - url = '%s/%s/project.json' % (name[0].upper(), name) - url = urljoin(_external_data_base_url, url) - result = _get_external_data(url) - return result - -def get_package_data(name, version): - url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) - url = urljoin(_external_data_base_url, url) - return _get_external_data(url) - - -class Cache(object): - """ - A class implementing a cache for resources that need to live in the file system - e.g. shared libraries. This class was moved from resources to here because it - could be used by other modules, e.g. the wheel module. - """ - - def __init__(self, base): - """ - Initialise an instance. - - :param base: The base directory where the cache should be located. - """ - # we use 'isdir' instead of 'exists', because we want to - # fail if there's a file with that name - if not os.path.isdir(base): # pragma: no cover - os.makedirs(base) - if (os.stat(base).st_mode & 0o77) != 0: - logger.warning('Directory \'%s\' is not private', base) - self.base = os.path.abspath(os.path.normpath(base)) - - def prefix_to_dir(self, prefix): - """ - Converts a resource prefix to a directory name in the cache. - """ - return path_to_cache_dir(prefix) - - def clear(self): - """ - Clear the cache. - """ - not_removed = [] - for fn in os.listdir(self.base): - fn = os.path.join(self.base, fn) - try: - if os.path.islink(fn) or os.path.isfile(fn): - os.remove(fn) - elif os.path.isdir(fn): - shutil.rmtree(fn) - except Exception: - not_removed.append(fn) - return not_removed - - -class EventMixin(object): - """ - A very simple publish/subscribe system. - """ - def __init__(self): - self._subscribers = {} - - def add(self, event, subscriber, append=True): - """ - Add a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be added (and called when the - event is published). - :param append: Whether to append or prepend the subscriber to an - existing subscriber list for the event. - """ - subs = self._subscribers - if event not in subs: - subs[event] = deque([subscriber]) - else: - sq = subs[event] - if append: - sq.append(subscriber) - else: - sq.appendleft(subscriber) - - def remove(self, event, subscriber): - """ - Remove a subscriber for an event. - - :param event: The name of an event. - :param subscriber: The subscriber to be removed. - """ - subs = self._subscribers - if event not in subs: - raise ValueError('No subscribers: %r' % event) - subs[event].remove(subscriber) - - def get_subscribers(self, event): - """ - Return an iterator for the subscribers for an event. - :param event: The event to return subscribers for. - """ - return iter(self._subscribers.get(event, ())) - - def publish(self, event, *args, **kwargs): - """ - Publish a event and return a list of values returned by its - subscribers. - - :param event: The event to publish. - :param args: The positional arguments to pass to the event's - subscribers. - :param kwargs: The keyword arguments to pass to the event's - subscribers. - """ - result = [] - for subscriber in self.get_subscribers(event): - try: - value = subscriber(event, *args, **kwargs) - except Exception: - logger.exception('Exception during event publication') - value = None - result.append(value) - logger.debug('publish %s: args = %s, kwargs = %s, result = %s', - event, args, kwargs, result) - return result - -# -# Simple sequencing -# -class Sequencer(object): - def __init__(self): - self._preds = {} - self._succs = {} - self._nodes = set() # nodes with no preds/succs - - def add_node(self, node): - self._nodes.add(node) - - def remove_node(self, node, edges=False): - if node in self._nodes: - self._nodes.remove(node) - if edges: - for p in set(self._preds.get(node, ())): - self.remove(p, node) - for s in set(self._succs.get(node, ())): - self.remove(node, s) - # Remove empties - for k, v in list(self._preds.items()): - if not v: - del self._preds[k] - for k, v in list(self._succs.items()): - if not v: - del self._succs[k] - - def add(self, pred, succ): - assert pred != succ - self._preds.setdefault(succ, set()).add(pred) - self._succs.setdefault(pred, set()).add(succ) - - def remove(self, pred, succ): - assert pred != succ - try: - preds = self._preds[succ] - succs = self._succs[pred] - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of anything' % succ) - try: - preds.remove(pred) - succs.remove(succ) - except KeyError: # pragma: no cover - raise ValueError('%r not a successor of %r' % (succ, pred)) - - def is_step(self, step): - return (step in self._preds or step in self._succs or - step in self._nodes) - - def get_steps(self, final): - if not self.is_step(final): - raise ValueError('Unknown: %r' % final) - result = [] - todo = [] - seen = set() - todo.append(final) - while todo: - step = todo.pop(0) - if step in seen: - # if a step was already seen, - # move it to the end (so it will appear earlier - # when reversed on return) ... but not for the - # final step, as that would be confusing for - # users - if step != final: - result.remove(step) - result.append(step) - else: - seen.add(step) - result.append(step) - preds = self._preds.get(step, ()) - todo.extend(preds) - return reversed(result) - - @property - def strong_connections(self): - #http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm - index_counter = [0] - stack = [] - lowlinks = {} - index = {} - result = [] - - graph = self._succs - - def strongconnect(node): - # set the depth index for this node to the smallest unused index - index[node] = index_counter[0] - lowlinks[node] = index_counter[0] - index_counter[0] += 1 - stack.append(node) - - # Consider successors - try: - successors = graph[node] - except Exception: - successors = [] - for successor in successors: - if successor not in lowlinks: - # Successor has not yet been visited - strongconnect(successor) - lowlinks[node] = min(lowlinks[node],lowlinks[successor]) - elif successor in stack: - # the successor is in the stack and hence in the current - # strongly connected component (SCC) - lowlinks[node] = min(lowlinks[node],index[successor]) - - # If `node` is a root node, pop the stack and generate an SCC - if lowlinks[node] == index[node]: - connected_component = [] - - while True: - successor = stack.pop() - connected_component.append(successor) - if successor == node: break - component = tuple(connected_component) - # storing the result - result.append(component) - - for node in graph: - if node not in lowlinks: - strongconnect(node) - - return result - - @property - def dot(self): - result = ['digraph G {'] - for succ in self._preds: - preds = self._preds[succ] - for pred in preds: - result.append(' %s -> %s;' % (pred, succ)) - for node in self._nodes: - result.append(' %s;' % node) - result.append('}') - return '\n'.join(result) - -# -# Unarchiving functionality for zip, tar, tgz, tbz, whl -# - -ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', - '.tgz', '.tbz', '.whl') - -def unarchive(archive_filename, dest_dir, format=None, check=True): - - def check_path(path): - if not isinstance(path, text_type): - path = path.decode('utf-8') - p = os.path.abspath(os.path.join(dest_dir, path)) - if not p.startswith(dest_dir) or p[plen] != os.sep: - raise ValueError('path outside destination: %r' % p) - - dest_dir = os.path.abspath(dest_dir) - plen = len(dest_dir) - archive = None - if format is None: - if archive_filename.endswith(('.zip', '.whl')): - format = 'zip' - elif archive_filename.endswith(('.tar.gz', '.tgz')): - format = 'tgz' - mode = 'r:gz' - elif archive_filename.endswith(('.tar.bz2', '.tbz')): - format = 'tbz' - mode = 'r:bz2' - elif archive_filename.endswith('.tar'): - format = 'tar' - mode = 'r' - else: # pragma: no cover - raise ValueError('Unknown format for %r' % archive_filename) - try: - if format == 'zip': - archive = ZipFile(archive_filename, 'r') - if check: - names = archive.namelist() - for name in names: - check_path(name) - else: - archive = tarfile.open(archive_filename, mode) - if check: - names = archive.getnames() - for name in names: - check_path(name) - if format != 'zip' and sys.version_info[0] < 3: - # See Python issue 17153. If the dest path contains Unicode, - # tarfile extraction fails on Python 2.x if a member path name - # contains non-ASCII characters - it leads to an implicit - # bytes -> unicode conversion using ASCII to decode. - for tarinfo in archive.getmembers(): - if not isinstance(tarinfo.name, text_type): - tarinfo.name = tarinfo.name.decode('utf-8') - archive.extractall(dest_dir) - - finally: - if archive: - archive.close() - - -def zip_dir(directory): - """zip a directory tree into a BytesIO object""" - result = io.BytesIO() - dlen = len(directory) - with ZipFile(result, "w") as zf: - for root, dirs, files in os.walk(directory): - for name in files: - full = os.path.join(root, name) - rel = root[dlen:] - dest = os.path.join(rel, name) - zf.write(full, dest) - return result - -# -# Simple progress bar -# - -UNITS = ('', 'K', 'M', 'G','T','P') - - -class Progress(object): - unknown = 'UNKNOWN' - - def __init__(self, minval=0, maxval=100): - assert maxval is None or maxval >= minval - self.min = self.cur = minval - self.max = maxval - self.started = None - self.elapsed = 0 - self.done = False - - def update(self, curval): - assert self.min <= curval - assert self.max is None or curval <= self.max - self.cur = curval - now = time.time() - if self.started is None: - self.started = now - else: - self.elapsed = now - self.started - - def increment(self, incr): - assert incr >= 0 - self.update(self.cur + incr) - - def start(self): - self.update(self.min) - return self - - def stop(self): - if self.max is not None: - self.update(self.max) - self.done = True - - @property - def maximum(self): - return self.unknown if self.max is None else self.max - - @property - def percentage(self): - if self.done: - result = '100 %' - elif self.max is None: - result = ' ?? %' - else: - v = 100.0 * (self.cur - self.min) / (self.max - self.min) - result = '%3d %%' % v - return result - - def format_duration(self, duration): - if (duration <= 0) and self.max is None or self.cur == self.min: - result = '??:??:??' - #elif duration < 1: - # result = '--:--:--' - else: - result = time.strftime('%H:%M:%S', time.gmtime(duration)) - return result - - @property - def ETA(self): - if self.done: - prefix = 'Done' - t = self.elapsed - #import pdb; pdb.set_trace() - else: - prefix = 'ETA ' - if self.max is None: - t = -1 - elif self.elapsed == 0 or (self.cur == self.min): - t = 0 - else: - #import pdb; pdb.set_trace() - t = float(self.max - self.min) - t /= self.cur - self.min - t = (t - 1) * self.elapsed - return '%s: %s' % (prefix, self.format_duration(t)) - - @property - def speed(self): - if self.elapsed == 0: - result = 0.0 - else: - result = (self.cur - self.min) / self.elapsed - for unit in UNITS: - if result < 1000: - break - result /= 1000.0 - return '%d %sB/s' % (result, unit) - -# -# Glob functionality -# - -RICH_GLOB = re.compile(r'\{([^}]*)\}') -_CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') -_CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') - - -def iglob(path_glob): - """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" - if _CHECK_RECURSIVE_GLOB.search(path_glob): - msg = """invalid glob %r: recursive glob "**" must be used alone""" - raise ValueError(msg % path_glob) - if _CHECK_MISMATCH_SET.search(path_glob): - msg = """invalid glob %r: mismatching set marker '{' or '}'""" - raise ValueError(msg % path_glob) - return _iglob(path_glob) - - -def _iglob(path_glob): - rich_path_glob = RICH_GLOB.split(path_glob, 1) - if len(rich_path_glob) > 1: - assert len(rich_path_glob) == 3, rich_path_glob - prefix, set, suffix = rich_path_glob - for item in set.split(','): - for path in _iglob(''.join((prefix, item, suffix))): - yield path - else: - if '**' not in path_glob: - for item in std_iglob(path_glob): - yield item - else: - prefix, radical = path_glob.split('**', 1) - if prefix == '': - prefix = '.' - if radical == '': - radical = '*' - else: - # we support both - radical = radical.lstrip('/') - radical = radical.lstrip('\\') - for path, dir, files in os.walk(prefix): - path = os.path.normpath(path) - for fn in _iglob(os.path.join(path, radical)): - yield fn - -if ssl: - from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, - CertificateError) - - -# -# HTTPSConnection which verifies certificates/matches domains -# - - class HTTPSConnection(httplib.HTTPSConnection): - ca_certs = None # set this to the path to the certs file (.pem) - check_domain = True # only used if ca_certs is not None - - # noinspection PyPropertyAccess - def connect(self): - sock = socket.create_connection((self.host, self.port), self.timeout) - if getattr(self, '_tunnel_host', False): - self.sock = sock - self._tunnel() - - if not hasattr(ssl, 'SSLContext'): - # For 2.x - if self.ca_certs: - cert_reqs = ssl.CERT_REQUIRED - else: - cert_reqs = ssl.CERT_NONE - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, - cert_reqs=cert_reqs, - ssl_version=ssl.PROTOCOL_SSLv23, - ca_certs=self.ca_certs) - else: # pragma: no cover - context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - context.options |= ssl.OP_NO_SSLv2 - if self.cert_file: - context.load_cert_chain(self.cert_file, self.key_file) - kwargs = {} - if self.ca_certs: - context.verify_mode = ssl.CERT_REQUIRED - context.load_verify_locations(cafile=self.ca_certs) - if getattr(ssl, 'HAS_SNI', False): - kwargs['server_hostname'] = self.host - self.sock = context.wrap_socket(sock, **kwargs) - if self.ca_certs and self.check_domain: - try: - match_hostname(self.sock.getpeercert(), self.host) - logger.debug('Host verified: %s', self.host) - except CertificateError: # pragma: no cover - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - raise - - class HTTPSHandler(BaseHTTPSHandler): - def __init__(self, ca_certs, check_domain=True): - BaseHTTPSHandler.__init__(self) - self.ca_certs = ca_certs - self.check_domain = check_domain - - def _conn_maker(self, *args, **kwargs): - """ - This is called to create a connection instance. Normally you'd - pass a connection class to do_open, but it doesn't actually check for - a class, and just expects a callable. As long as we behave just as a - constructor would have, we should be OK. If it ever changes so that - we *must* pass a class, we'll create an UnsafeHTTPSConnection class - which just sets check_domain to False in the class definition, and - choose which one to pass to do_open. - """ - result = HTTPSConnection(*args, **kwargs) - if self.ca_certs: - result.ca_certs = self.ca_certs - result.check_domain = self.check_domain - return result - - def https_open(self, req): - try: - return self.do_open(self._conn_maker, req) - except URLError as e: - if 'certificate verify failed' in str(e.reason): - raise CertificateError('Unable to verify server certificate ' - 'for %s' % req.host) - else: - raise - - # - # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- - # Middle proxy using HTTP listens on port 443, or an index mistakenly serves - # HTML containing a http://xyz link when it should be https://xyz), - # you can use the following handler class, which does not allow HTTP traffic. - # - # It works by inheriting from HTTPHandler - so build_opener won't add a - # handler for HTTP itself. - # - class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): - def http_open(self, req): - raise URLError('Unexpected HTTP request on what should be a secure ' - 'connection: %s' % req) - -# -# XML-RPC with timeouts -# - -_ver_info = sys.version_info[:2] - -if _ver_info == (2, 6): - class HTTP(httplib.HTTP): - def __init__(self, host='', port=None, **kwargs): - if port == 0: # 0 means use port 0, not the default port - port = None - self._setup(self._connection_class(host, port, **kwargs)) - - - if ssl: - class HTTPS(httplib.HTTPS): - def __init__(self, host='', port=None, **kwargs): - if port == 0: # 0 means use port 0, not the default port - port = None - self._setup(self._connection_class(host, port, **kwargs)) - - -class Transport(xmlrpclib.Transport): - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.Transport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, x509 = self.get_host_info(host) - if _ver_info == (2, 6): - result = HTTP(h, timeout=self.timeout) - else: - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPConnection(h) - result = self._connection[1] - return result - -if ssl: - class SafeTransport(xmlrpclib.SafeTransport): - def __init__(self, timeout, use_datetime=0): - self.timeout = timeout - xmlrpclib.SafeTransport.__init__(self, use_datetime) - - def make_connection(self, host): - h, eh, kwargs = self.get_host_info(host) - if not kwargs: - kwargs = {} - kwargs['timeout'] = self.timeout - if _ver_info == (2, 6): - result = HTTPS(host, None, **kwargs) - else: - if not self._connection or host != self._connection[0]: - self._extra_headers = eh - self._connection = host, httplib.HTTPSConnection(h, None, - **kwargs) - result = self._connection[1] - return result - - -class ServerProxy(xmlrpclib.ServerProxy): - def __init__(self, uri, **kwargs): - self.timeout = timeout = kwargs.pop('timeout', None) - # The above classes only come into play if a timeout - # is specified - if timeout is not None: - scheme, _ = splittype(uri) - use_datetime = kwargs.get('use_datetime', 0) - if scheme == 'https': - tcls = SafeTransport - else: - tcls = Transport - kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) - self.transport = t - xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) - -# -# CSV functionality. This is provided because on 2.x, the csv module can't -# handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. -# - -def _csv_open(fn, mode, **kwargs): - if sys.version_info[0] < 3: - mode += 'b' - else: - kwargs['newline'] = '' - # Python 3 determines encoding from locale. Force 'utf-8' - # file encoding to match other forced utf-8 encoding - kwargs['encoding'] = 'utf-8' - return open(fn, mode, **kwargs) - - -class CSVBase(object): - defaults = { - 'delimiter': str(','), # The strs are used because we need native - 'quotechar': str('"'), # str in the csv API (2.x won't take - 'lineterminator': str('\n') # Unicode) - } - - def __enter__(self): - return self - - def __exit__(self, *exc_info): - self.stream.close() - - -class CSVReader(CSVBase): - def __init__(self, **kwargs): - if 'stream' in kwargs: - stream = kwargs['stream'] - if sys.version_info[0] >= 3: - # needs to be a text stream - stream = codecs.getreader('utf-8')(stream) - self.stream = stream - else: - self.stream = _csv_open(kwargs['path'], 'r') - self.reader = csv.reader(self.stream, **self.defaults) - - def __iter__(self): - return self - - def next(self): - result = next(self.reader) - if sys.version_info[0] < 3: - for i, item in enumerate(result): - if not isinstance(item, text_type): - result[i] = item.decode('utf-8') - return result - - __next__ = next - -class CSVWriter(CSVBase): - def __init__(self, fn, **kwargs): - self.stream = _csv_open(fn, 'w') - self.writer = csv.writer(self.stream, **self.defaults) - - def writerow(self, row): - if sys.version_info[0] < 3: - r = [] - for item in row: - if isinstance(item, text_type): - item = item.encode('utf-8') - r.append(item) - row = r - self.writer.writerow(row) - -# -# Configurator functionality -# - -class Configurator(BaseConfigurator): - - value_converters = dict(BaseConfigurator.value_converters) - value_converters['inc'] = 'inc_convert' - - def __init__(self, config, base=None): - super(Configurator, self).__init__(config) - self.base = base or os.getcwd() - - def configure_custom(self, config): - def convert(o): - if isinstance(o, (list, tuple)): - result = type(o)([convert(i) for i in o]) - elif isinstance(o, dict): - if '()' in o: - result = self.configure_custom(o) - else: - result = {} - for k in o: - result[k] = convert(o[k]) - else: - result = self.convert(o) - return result - - c = config.pop('()') - if not callable(c): - c = self.resolve(c) - props = config.pop('.', None) - # Check for valid identifiers - args = config.pop('[]', ()) - if args: - args = tuple([convert(o) for o in args]) - items = [(k, convert(config[k])) for k in config if valid_ident(k)] - kwargs = dict(items) - result = c(*args, **kwargs) - if props: - for n, v in props.items(): - setattr(result, n, convert(v)) - return result - - def __getitem__(self, key): - result = self.config[key] - if isinstance(result, dict) and '()' in result: - self.config[key] = result = self.configure_custom(result) - return result - - def inc_convert(self, value): - """Default converter for the inc:// protocol.""" - if not os.path.isabs(value): - value = os.path.join(self.base, value) - with codecs.open(value, 'r', encoding='utf-8') as f: - result = json.load(f) - return result - - -class SubprocessMixin(object): - """ - Mixin for running subprocesses and capturing their output - """ - def __init__(self, verbose=False, progress=None): - self.verbose = verbose - self.progress = progress - - def reader(self, stream, context): - """ - Read lines from a subprocess' output stream and either pass to a progress - callable (if specified) or write progress information to sys.stderr. - """ - progress = self.progress - verbose = self.verbose - while True: - s = stream.readline() - if not s: - break - if progress is not None: - progress(s, context) - else: - if not verbose: - sys.stderr.write('.') - else: - sys.stderr.write(s.decode('utf-8')) - sys.stderr.flush() - stream.close() - - def run_command(self, cmd, **kwargs): - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, **kwargs) - t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) - t1.start() - t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) - t2.start() - p.wait() - t1.join() - t2.join() - if self.progress is not None: - self.progress('done.', 'main') - elif self.verbose: - sys.stderr.write('done.\n') - return p - - -def normalize_name(name): - """Normalize a python package name a la PEP 503""" - # https://www.python.org/dev/peps/pep-0503/#normalized-names - return re.sub('[-_.]+', '-', name).lower() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/version.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/version.py deleted file mode 100644 index 3eebe18..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/version.py +++ /dev/null @@ -1,736 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2012-2017 The Python Software Foundation. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -""" -Implementation of a flexible versioning scheme providing support for PEP-440, -setuptools-compatible and semantic versioning. -""" - -import logging -import re - -from .compat import string_types -from .util import parse_requirement - -__all__ = ['NormalizedVersion', 'NormalizedMatcher', - 'LegacyVersion', 'LegacyMatcher', - 'SemanticVersion', 'SemanticMatcher', - 'UnsupportedVersionError', 'get_scheme'] - -logger = logging.getLogger(__name__) - - -class UnsupportedVersionError(ValueError): - """This is an unsupported version.""" - pass - - -class Version(object): - def __init__(self, s): - self._string = s = s.strip() - self._parts = parts = self.parse(s) - assert isinstance(parts, tuple) - assert len(parts) > 0 - - def parse(self, s): - raise NotImplementedError('please implement in a subclass') - - def _check_compatible(self, other): - if type(self) != type(other): - raise TypeError('cannot compare %r and %r' % (self, other)) - - def __eq__(self, other): - self._check_compatible(other) - return self._parts == other._parts - - def __ne__(self, other): - return not self.__eq__(other) - - def __lt__(self, other): - self._check_compatible(other) - return self._parts < other._parts - - def __gt__(self, other): - return not (self.__lt__(other) or self.__eq__(other)) - - def __le__(self, other): - return self.__lt__(other) or self.__eq__(other) - - def __ge__(self, other): - return self.__gt__(other) or self.__eq__(other) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - def __hash__(self): - return hash(self._parts) - - def __repr__(self): - return "%s('%s')" % (self.__class__.__name__, self._string) - - def __str__(self): - return self._string - - @property - def is_prerelease(self): - raise NotImplementedError('Please implement in subclasses.') - - -class Matcher(object): - version_class = None - - # value is either a callable or the name of a method - _operators = { - '<': lambda v, c, p: v < c, - '>': lambda v, c, p: v > c, - '<=': lambda v, c, p: v == c or v < c, - '>=': lambda v, c, p: v == c or v > c, - '==': lambda v, c, p: v == c, - '===': lambda v, c, p: v == c, - # by default, compatible => >=. - '~=': lambda v, c, p: v == c or v > c, - '!=': lambda v, c, p: v != c, - } - - # this is a method only to support alternative implementations - # via overriding - def parse_requirement(self, s): - return parse_requirement(s) - - def __init__(self, s): - if self.version_class is None: - raise ValueError('Please specify a version class') - self._string = s = s.strip() - r = self.parse_requirement(s) - if not r: - raise ValueError('Not valid: %r' % s) - self.name = r.name - self.key = self.name.lower() # for case-insensitive comparisons - clist = [] - if r.constraints: - # import pdb; pdb.set_trace() - for op, s in r.constraints: - if s.endswith('.*'): - if op not in ('==', '!='): - raise ValueError('\'.*\' not allowed for ' - '%r constraints' % op) - # Could be a partial version (e.g. for '2.*') which - # won't parse as a version, so keep it as a string - vn, prefix = s[:-2], True - # Just to check that vn is a valid version - self.version_class(vn) - else: - # Should parse as a version, so we can create an - # instance for the comparison - vn, prefix = self.version_class(s), False - clist.append((op, vn, prefix)) - self._parts = tuple(clist) - - def match(self, version): - """ - Check if the provided version matches the constraints. - - :param version: The version to match against this instance. - :type version: String or :class:`Version` instance. - """ - if isinstance(version, string_types): - version = self.version_class(version) - for operator, constraint, prefix in self._parts: - f = self._operators.get(operator) - if isinstance(f, string_types): - f = getattr(self, f) - if not f: - msg = ('%r not implemented ' - 'for %s' % (operator, self.__class__.__name__)) - raise NotImplementedError(msg) - if not f(version, constraint, prefix): - return False - return True - - @property - def exact_version(self): - result = None - if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): - result = self._parts[0][1] - return result - - def _check_compatible(self, other): - if type(self) != type(other) or self.name != other.name: - raise TypeError('cannot compare %s and %s' % (self, other)) - - def __eq__(self, other): - self._check_compatible(other) - return self.key == other.key and self._parts == other._parts - - def __ne__(self, other): - return not self.__eq__(other) - - # See http://docs.python.org/reference/datamodel#object.__hash__ - def __hash__(self): - return hash(self.key) + hash(self._parts) - - def __repr__(self): - return "%s(%r)" % (self.__class__.__name__, self._string) - - def __str__(self): - return self._string - - -PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?' - r'(\.(post)(\d+))?(\.(dev)(\d+))?' - r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$') - - -def _pep_440_key(s): - s = s.strip() - m = PEP440_VERSION_RE.match(s) - if not m: - raise UnsupportedVersionError('Not a valid version: %s' % s) - groups = m.groups() - nums = tuple(int(v) for v in groups[1].split('.')) - while len(nums) > 1 and nums[-1] == 0: - nums = nums[:-1] - - if not groups[0]: - epoch = 0 - else: - epoch = int(groups[0]) - pre = groups[4:6] - post = groups[7:9] - dev = groups[10:12] - local = groups[13] - if pre == (None, None): - pre = () - else: - pre = pre[0], int(pre[1]) - if post == (None, None): - post = () - else: - post = post[0], int(post[1]) - if dev == (None, None): - dev = () - else: - dev = dev[0], int(dev[1]) - if local is None: - local = () - else: - parts = [] - for part in local.split('.'): - # to ensure that numeric compares as > lexicographic, avoid - # comparing them directly, but encode a tuple which ensures - # correct sorting - if part.isdigit(): - part = (1, int(part)) - else: - part = (0, part) - parts.append(part) - local = tuple(parts) - if not pre: - # either before pre-release, or final release and after - if not post and dev: - # before pre-release - pre = ('a', -1) # to sort before a0 - else: - pre = ('z',) # to sort after all pre-releases - # now look at the state of post and dev. - if not post: - post = ('_',) # sort before 'a' - if not dev: - dev = ('final',) - - #print('%s -> %s' % (s, m.groups())) - return epoch, nums, pre, post, dev, local - - -_normalized_key = _pep_440_key - - -class NormalizedVersion(Version): - """A rational version. - - Good: - 1.2 # equivalent to "1.2.0" - 1.2.0 - 1.2a1 - 1.2.3a2 - 1.2.3b1 - 1.2.3c1 - 1.2.3.4 - TODO: fill this out - - Bad: - 1 # minimum two numbers - 1.2a # release level must have a release serial - 1.2.3b - """ - def parse(self, s): - result = _normalized_key(s) - # _normalized_key loses trailing zeroes in the release - # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 - # However, PEP 440 prefix matching needs it: for example, - # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). - m = PEP440_VERSION_RE.match(s) # must succeed - groups = m.groups() - self._release_clause = tuple(int(v) for v in groups[1].split('.')) - return result - - PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) - - @property - def is_prerelease(self): - return any(t[0] in self.PREREL_TAGS for t in self._parts if t) - - -def _match_prefix(x, y): - x = str(x) - y = str(y) - if x == y: - return True - if not x.startswith(y): - return False - n = len(y) - return x[n] == '.' - - -class NormalizedMatcher(Matcher): - version_class = NormalizedVersion - - # value is either a callable or the name of a method - _operators = { - '~=': '_match_compatible', - '<': '_match_lt', - '>': '_match_gt', - '<=': '_match_le', - '>=': '_match_ge', - '==': '_match_eq', - '===': '_match_arbitrary', - '!=': '_match_ne', - } - - def _adjust_local(self, version, constraint, prefix): - if prefix: - strip_local = '+' not in constraint and version._parts[-1] - else: - # both constraint and version are - # NormalizedVersion instances. - # If constraint does not have a local component, - # ensure the version doesn't, either. - strip_local = not constraint._parts[-1] and version._parts[-1] - if strip_local: - s = version._string.split('+', 1)[0] - version = self.version_class(s) - return version, constraint - - def _match_lt(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version >= constraint: - return False - release_clause = constraint._release_clause - pfx = '.'.join([str(i) for i in release_clause]) - return not _match_prefix(version, pfx) - - def _match_gt(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version <= constraint: - return False - release_clause = constraint._release_clause - pfx = '.'.join([str(i) for i in release_clause]) - return not _match_prefix(version, pfx) - - def _match_le(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - return version <= constraint - - def _match_ge(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - return version >= constraint - - def _match_eq(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if not prefix: - result = (version == constraint) - else: - result = _match_prefix(version, constraint) - return result - - def _match_arbitrary(self, version, constraint, prefix): - return str(version) == str(constraint) - - def _match_ne(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if not prefix: - result = (version != constraint) - else: - result = not _match_prefix(version, constraint) - return result - - def _match_compatible(self, version, constraint, prefix): - version, constraint = self._adjust_local(version, constraint, prefix) - if version == constraint: - return True - if version < constraint: - return False -# if not prefix: -# return True - release_clause = constraint._release_clause - if len(release_clause) > 1: - release_clause = release_clause[:-1] - pfx = '.'.join([str(i) for i in release_clause]) - return _match_prefix(version, pfx) - -_REPLACEMENTS = ( - (re.compile('[.+-]$'), ''), # remove trailing puncts - (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start - (re.compile('^[.-]'), ''), # remove leading puncts - (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses - (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) - (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) - (re.compile('[.]{2,}'), '.'), # multiple runs of '.' - (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha - (re.compile(r'\b(pre-alpha|prealpha)\b'), - 'pre.alpha'), # standardise - (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses -) - -_SUFFIX_REPLACEMENTS = ( - (re.compile('^[:~._+-]+'), ''), # remove leading puncts - (re.compile('[,*")([\\]]'), ''), # remove unwanted chars - (re.compile('[~:+_ -]'), '.'), # replace illegal chars - (re.compile('[.]{2,}'), '.'), # multiple runs of '.' - (re.compile(r'\.$'), ''), # trailing '.' -) - -_NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') - - -def _suggest_semantic_version(s): - """ - Try to suggest a semantic form for a version for which - _suggest_normalized_version couldn't come up with anything. - """ - result = s.strip().lower() - for pat, repl in _REPLACEMENTS: - result = pat.sub(repl, result) - if not result: - result = '0.0.0' - - # Now look for numeric prefix, and separate it out from - # the rest. - #import pdb; pdb.set_trace() - m = _NUMERIC_PREFIX.match(result) - if not m: - prefix = '0.0.0' - suffix = result - else: - prefix = m.groups()[0].split('.') - prefix = [int(i) for i in prefix] - while len(prefix) < 3: - prefix.append(0) - if len(prefix) == 3: - suffix = result[m.end():] - else: - suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] - prefix = prefix[:3] - prefix = '.'.join([str(i) for i in prefix]) - suffix = suffix.strip() - if suffix: - #import pdb; pdb.set_trace() - # massage the suffix. - for pat, repl in _SUFFIX_REPLACEMENTS: - suffix = pat.sub(repl, suffix) - - if not suffix: - result = prefix - else: - sep = '-' if 'dev' in suffix else '+' - result = prefix + sep + suffix - if not is_semver(result): - result = None - return result - - -def _suggest_normalized_version(s): - """Suggest a normalized version close to the given version string. - - If you have a version string that isn't rational (i.e. NormalizedVersion - doesn't like it) then you might be able to get an equivalent (or close) - rational version from this function. - - This does a number of simple normalizations to the given string, based - on observation of versions currently in use on PyPI. Given a dump of - those version during PyCon 2009, 4287 of them: - - 2312 (53.93%) match NormalizedVersion without change - with the automatic suggestion - - 3474 (81.04%) match when using this suggestion method - - @param s {str} An irrational version string. - @returns A rational version string, or None, if couldn't determine one. - """ - try: - _normalized_key(s) - return s # already rational - except UnsupportedVersionError: - pass - - rs = s.lower() - - # part of this could use maketrans - for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), - ('beta', 'b'), ('rc', 'c'), ('-final', ''), - ('-pre', 'c'), - ('-release', ''), ('.release', ''), ('-stable', ''), - ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), - ('final', '')): - rs = rs.replace(orig, repl) - - # if something ends with dev or pre, we add a 0 - rs = re.sub(r"pre$", r"pre0", rs) - rs = re.sub(r"dev$", r"dev0", rs) - - # if we have something like "b-2" or "a.2" at the end of the - # version, that is probably beta, alpha, etc - # let's remove the dash or dot - rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) - - # 1.0-dev-r371 -> 1.0.dev371 - # 0.1-dev-r79 -> 0.1.dev79 - rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) - - # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 - rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) - - # Clean: v0.3, v1.0 - if rs.startswith('v'): - rs = rs[1:] - - # Clean leading '0's on numbers. - #TODO: unintended side-effect on, e.g., "2003.05.09" - # PyPI stats: 77 (~2%) better - rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) - - # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers - # zero. - # PyPI stats: 245 (7.56%) better - rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) - - # the 'dev-rNNN' tag is a dev tag - rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) - - # clean the - when used as a pre delimiter - rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) - - # a terminal "dev" or "devel" can be changed into ".dev0" - rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) - - # a terminal "dev" can be changed into ".dev0" - rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) - - # a terminal "final" or "stable" can be removed - rs = re.sub(r"(final|stable)$", "", rs) - - # The 'r' and the '-' tags are post release tags - # 0.4a1.r10 -> 0.4a1.post10 - # 0.9.33-17222 -> 0.9.33.post17222 - # 0.9.33-r17222 -> 0.9.33.post17222 - rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) - - # Clean 'r' instead of 'dev' usage: - # 0.9.33+r17222 -> 0.9.33.dev17222 - # 1.0dev123 -> 1.0.dev123 - # 1.0.git123 -> 1.0.dev123 - # 1.0.bzr123 -> 1.0.dev123 - # 0.1a0dev.123 -> 0.1a0.dev123 - # PyPI stats: ~150 (~4%) better - rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) - - # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: - # 0.2.pre1 -> 0.2c1 - # 0.2-c1 -> 0.2c1 - # 1.0preview123 -> 1.0c123 - # PyPI stats: ~21 (0.62%) better - rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) - - # Tcl/Tk uses "px" for their post release markers - rs = re.sub(r"p(\d+)$", r".post\1", rs) - - try: - _normalized_key(rs) - except UnsupportedVersionError: - rs = None - return rs - -# -# Legacy version processing (distribute-compatible) -# - -_VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) -_VERSION_REPLACE = { - 'pre': 'c', - 'preview': 'c', - '-': 'final-', - 'rc': 'c', - 'dev': '@', - '': None, - '.': None, -} - - -def _legacy_key(s): - def get_parts(s): - result = [] - for p in _VERSION_PART.split(s.lower()): - p = _VERSION_REPLACE.get(p, p) - if p: - if '0' <= p[:1] <= '9': - p = p.zfill(8) - else: - p = '*' + p - result.append(p) - result.append('*final') - return result - - result = [] - for p in get_parts(s): - if p.startswith('*'): - if p < '*final': - while result and result[-1] == '*final-': - result.pop() - while result and result[-1] == '00000000': - result.pop() - result.append(p) - return tuple(result) - - -class LegacyVersion(Version): - def parse(self, s): - return _legacy_key(s) - - @property - def is_prerelease(self): - result = False - for x in self._parts: - if (isinstance(x, string_types) and x.startswith('*') and - x < '*final'): - result = True - break - return result - - -class LegacyMatcher(Matcher): - version_class = LegacyVersion - - _operators = dict(Matcher._operators) - _operators['~='] = '_match_compatible' - - numeric_re = re.compile(r'^(\d+(\.\d+)*)') - - def _match_compatible(self, version, constraint, prefix): - if version < constraint: - return False - m = self.numeric_re.match(str(constraint)) - if not m: - logger.warning('Cannot compute compatible match for version %s ' - ' and constraint %s', version, constraint) - return True - s = m.groups()[0] - if '.' in s: - s = s.rsplit('.', 1)[0] - return _match_prefix(version, s) - -# -# Semantic versioning -# - -_SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' - r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' - r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) - - -def is_semver(s): - return _SEMVER_RE.match(s) - - -def _semantic_key(s): - def make_tuple(s, absent): - if s is None: - result = (absent,) - else: - parts = s[1:].split('.') - # We can't compare ints and strings on Python 3, so fudge it - # by zero-filling numeric values so simulate a numeric comparison - result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) - return result - - m = is_semver(s) - if not m: - raise UnsupportedVersionError(s) - groups = m.groups() - major, minor, patch = [int(i) for i in groups[:3]] - # choose the '|' and '*' so that versions sort correctly - pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') - return (major, minor, patch), pre, build - - -class SemanticVersion(Version): - def parse(self, s): - return _semantic_key(s) - - @property - def is_prerelease(self): - return self._parts[1][0] != '|' - - -class SemanticMatcher(Matcher): - version_class = SemanticVersion - - -class VersionScheme(object): - def __init__(self, key, matcher, suggester=None): - self.key = key - self.matcher = matcher - self.suggester = suggester - - def is_valid_version(self, s): - try: - self.matcher.version_class(s) - result = True - except UnsupportedVersionError: - result = False - return result - - def is_valid_matcher(self, s): - try: - self.matcher(s) - result = True - except UnsupportedVersionError: - result = False - return result - - def is_valid_constraint_list(self, s): - """ - Used for processing some metadata fields - """ - return self.is_valid_matcher('dummy_name (%s)' % s) - - def suggest(self, s): - if self.suggester is None: - result = None - else: - result = self.suggester(s) - return result - -_SCHEMES = { - 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, - _suggest_normalized_version), - 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), - 'semantic': VersionScheme(_semantic_key, SemanticMatcher, - _suggest_semantic_version), -} - -_SCHEMES['default'] = _SCHEMES['normalized'] - - -def get_scheme(name): - if name not in _SCHEMES: - raise ValueError('unknown scheme name: %r' % name) - return _SCHEMES[name] diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/w32.exe b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/w32.exe deleted file mode 100755 index 732215a9d34ccb7b417d637a7646d9b843ecafa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89088 zcmeFae|S?>wm*FGqitH!CO`{C3REl(SahnPNDYM`O{q#T7)Xdvz$<hz5gjb&0FD$| zPs=nt#$jgk-tk`NUb*PJIy$3wMg@OiORy=5PEkZ0P^;6cyPm2=Y8#~Xyq~pC(iU~@ z_dd`2ywCg3TS)e=wSTX@_S$Q$y;FJf9>F9Cf*Bu86NCeB>CeT#|L3nblC!40kR?2m z{>H@z3`^g*ct!B1Tk<#8{Ol(+x7?n8>n(TO@iQ_1pEl;#NO$D_^p5<p8@>6r|7^p? zD>5@P3KB)%InlPUc<U{5lb_$uJ2!U@!dIxT&CTYnHuoCtzCL#`-1%8w%`JjkymkHD zpYr&>Cg9H}+(GW%^wV2|ROUbGfyXTfOART)i?<!WISJD#7!6|#8G`TvV*Xu^z32+K zc6>T0?9%;4K}Zn{6fx`yPa}*$9C+R!7zI~72c&$InY+UdMGBkF3c`HyxD3K09`bzW z?_q;rO&5ec#{?noJ4vI19bbHBt~vx^h2FH$V8i|^#EsiUg#JboP3@w-(&Uf&%NK<8 zSJZ5{MZ852W)~s>WeT(LIf&1wKNqULLI)GN_(-E-D)X~ZK=1;t<%*guHMhdg`-(mb zHzDv1KBN9zR9?--O+N$ReOXAr81V9z!X5SJ5`=3<1^<8V|AP@&sr2}Qvp;hQT24iW zOHg|EiZd1ojV;oo#(r^ba2`^8T22{~_UQ@YMZp7O1R*2@?SerFE~TuJB_wDaYC0h8 zfONF1t%{=H`W`bdYp+>YBsg9Ty9ec3iy+O3xa}TIvPK#Q&udyx1MvwG0(#iaGC|N| zJ#3?<Y4YLRkU`54s9BYRjyISA>){9$tW;Y34lPnX=&>D4X~|k7c$TwEfOzs@Yh#Nz z`FV;`(w!E`sKg@`2E}bDY>ku^4XS@tV(WO*<eu67;0Clk;vRHp!Qf<+5w0B!*Y>g? zYH=KK#%%Yu1~&m>IlB^#2^syGG|2AB1(}4aOcaC%!)}%`I7AIC2(Ro3yW`GSttng^ z_xb=ECor!L{-PNO>_ulJ3%fm=O0X!s%)$GZ?~I94l-^KEAX0n$?4wGpr7&i4#~)OB zQD%2NrWUKtZuYT1Vnu}AeF`cSgx>Rkk@}Lg{WltgT76VeA2aic`cTnpXrt2WXmJkM z9%u<Rp-*9{$HQ)>Xm?McyDyZ28Ux7mpxy?mnmvzMMr-85vkRrJLaDRx>|I7je+cM+ zj{RJ(3Vrgke;W@#D!y%U%fQLtlPKTAzWtVuOQdXpwsy6eRjt^cZ%0D4bF7$F;f!th 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ð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 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/w64.exe b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/w64.exe deleted file mode 100755 index c41bd0a011fd760ce20ba795d9e535e0d2c39876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99328 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 B=L-M; diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py deleted file mode 100644 index 7737223..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distlib/wheel.py +++ /dev/null @@ -1,984 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2013-2017 Vinay Sajip. -# Licensed to the Python Software Foundation under a contributor agreement. -# See LICENSE.txt and CONTRIBUTORS.txt. -# -from __future__ import unicode_literals - -import base64 -import codecs -import datetime -import distutils.util -from email import message_from_file -import hashlib -import imp -import json -import logging -import os -import posixpath -import re -import shutil -import sys -import tempfile -import zipfile - -from . import __version__, DistlibException -from .compat import sysconfig, ZipFile, fsdecode, text_type, filter -from .database import InstalledDistribution -from .metadata import Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME -from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, - cached_property, get_cache_base, read_exports, tempdir) -from .version import NormalizedVersion, UnsupportedVersionError - -logger = logging.getLogger(__name__) - -cache = None # created when needed - -if hasattr(sys, 'pypy_version_info'): # pragma: no cover - IMP_PREFIX = 'pp' -elif sys.platform.startswith('java'): # pragma: no cover - IMP_PREFIX = 'jy' -elif sys.platform == 'cli': # pragma: no cover - IMP_PREFIX = 'ip' -else: - IMP_PREFIX = 'cp' - -VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') -if not VER_SUFFIX: # pragma: no cover - VER_SUFFIX = '%s%s' % sys.version_info[:2] -PYVER = 'py' + VER_SUFFIX -IMPVER = IMP_PREFIX + VER_SUFFIX - -ARCH = distutils.util.get_platform().replace('-', '_').replace('.', '_') - -ABI = sysconfig.get_config_var('SOABI') -if ABI and ABI.startswith('cpython-'): - ABI = ABI.replace('cpython-', 'cp') -else: - def _derive_abi(): - parts = ['cp', VER_SUFFIX] - if sysconfig.get_config_var('Py_DEBUG'): - parts.append('d') - if sysconfig.get_config_var('WITH_PYMALLOC'): - parts.append('m') - if sysconfig.get_config_var('Py_UNICODE_SIZE') == 4: - parts.append('u') - return ''.join(parts) - ABI = _derive_abi() - del _derive_abi - -FILENAME_RE = re.compile(r''' -(?P<nm>[^-]+) --(?P<vn>\d+[^-]*) -(-(?P<bn>\d+[^-]*))? --(?P<py>\w+\d+(\.\w+\d+)*) --(?P<bi>\w+) --(?P<ar>\w+(\.\w+)*) -\.whl$ -''', re.IGNORECASE | re.VERBOSE) - -NAME_VERSION_RE = re.compile(r''' -(?P<nm>[^-]+) --(?P<vn>\d+[^-]*) -(-(?P<bn>\d+[^-]*))?$ -''', re.IGNORECASE | re.VERBOSE) - -SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') -SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') -SHEBANG_PYTHON = b'#!python' -SHEBANG_PYTHONW = b'#!pythonw' - -if os.sep == '/': - to_posix = lambda o: o -else: - to_posix = lambda o: o.replace(os.sep, '/') - - -class Mounter(object): - def __init__(self): - self.impure_wheels = {} - self.libs = {} - - def add(self, pathname, extensions): - self.impure_wheels[pathname] = extensions - self.libs.update(extensions) - - def remove(self, pathname): - extensions = self.impure_wheels.pop(pathname) - for k, v in extensions: - if k in self.libs: - del self.libs[k] - - def find_module(self, fullname, path=None): - if fullname in self.libs: - result = self - else: - result = None - return result - - def load_module(self, fullname): - if fullname in sys.modules: - result = sys.modules[fullname] - else: - if fullname not in self.libs: - raise ImportError('unable to find extension for %s' % fullname) - result = imp.load_dynamic(fullname, self.libs[fullname]) - result.__loader__ = self - parts = fullname.rsplit('.', 1) - if len(parts) > 1: - result.__package__ = parts[0] - return result - -_hook = Mounter() - - -class Wheel(object): - """ - Class to build and install from Wheel files (PEP 427). - """ - - wheel_version = (1, 1) - hash_kind = 'sha256' - - def __init__(self, filename=None, sign=False, verify=False): - """ - Initialise an instance using a (valid) filename. - """ - self.sign = sign - self.should_verify = verify - self.buildver = '' - self.pyver = [PYVER] - self.abi = ['none'] - self.arch = ['any'] - self.dirname = os.getcwd() - if filename is None: - self.name = 'dummy' - self.version = '0.1' - self._filename = self.filename - else: - m = NAME_VERSION_RE.match(filename) - if m: - info = m.groupdict('') - self.name = info['nm'] - # Reinstate the local version separator - self.version = info['vn'].replace('_', '-') - self.buildver = info['bn'] - self._filename = self.filename - else: - dirname, filename = os.path.split(filename) - m = FILENAME_RE.match(filename) - if not m: - raise DistlibException('Invalid name or ' - 'filename: %r' % filename) - if dirname: - self.dirname = os.path.abspath(dirname) - self._filename = filename - info = m.groupdict('') - self.name = info['nm'] - self.version = info['vn'] - self.buildver = info['bn'] - self.pyver = info['py'].split('.') - self.abi = info['bi'].split('.') - self.arch = info['ar'].split('.') - - @property - def filename(self): - """ - Build and return a filename from the various components. - """ - if self.buildver: - buildver = '-' + self.buildver - else: - buildver = '' - pyver = '.'.join(self.pyver) - abi = '.'.join(self.abi) - arch = '.'.join(self.arch) - # replace - with _ as a local version separator - version = self.version.replace('-', '_') - return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, - pyver, abi, arch) - - @property - def exists(self): - path = os.path.join(self.dirname, self.filename) - return os.path.isfile(path) - - @property - def tags(self): - for pyver in self.pyver: - for abi in self.abi: - for arch in self.arch: - yield pyver, abi, arch - - @cached_property - def metadata(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - wrapper = codecs.getreader('utf-8') - with ZipFile(pathname, 'r') as zf: - wheel_metadata = self.get_wheel_metadata(zf) - wv = wheel_metadata['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - if file_version < (1, 1): - fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, 'METADATA'] - else: - fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] - result = None - for fn in fns: - try: - metadata_filename = posixpath.join(info_dir, fn) - with zf.open(metadata_filename) as bf: - wf = wrapper(bf) - result = Metadata(fileobj=wf) - if result: - break - except KeyError: - pass - if not result: - raise ValueError('Invalid wheel, because metadata is ' - 'missing: looked in %s' % ', '.join(fns)) - return result - - def get_wheel_metadata(self, zf): - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - metadata_filename = posixpath.join(info_dir, 'WHEEL') - with zf.open(metadata_filename) as bf: - wf = codecs.getreader('utf-8')(bf) - message = message_from_file(wf) - return dict(message) - - @cached_property - def info(self): - pathname = os.path.join(self.dirname, self.filename) - with ZipFile(pathname, 'r') as zf: - result = self.get_wheel_metadata(zf) - return result - - def process_shebang(self, data): - m = SHEBANG_RE.match(data) - if m: - end = m.end() - shebang, data_after_shebang = data[:end], data[end:] - # Preserve any arguments after the interpreter - if b'pythonw' in shebang.lower(): - shebang_python = SHEBANG_PYTHONW - else: - shebang_python = SHEBANG_PYTHON - m = SHEBANG_DETAIL_RE.match(shebang) - if m: - args = b' ' + m.groups()[-1] - else: - args = b'' - shebang = shebang_python + args - data = shebang + data_after_shebang - else: - cr = data.find(b'\r') - lf = data.find(b'\n') - if cr < 0 or cr > lf: - term = b'\n' - else: - if data[cr:cr + 2] == b'\r\n': - term = b'\r\n' - else: - term = b'\r' - data = SHEBANG_PYTHON + term + data - return data - - def get_hash(self, data, hash_kind=None): - if hash_kind is None: - hash_kind = self.hash_kind - try: - hasher = getattr(hashlib, hash_kind) - except AttributeError: - raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) - result = hasher(data).digest() - result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') - return hash_kind, result - - def write_record(self, records, record_path, base): - records = list(records) # make a copy for sorting - p = to_posix(os.path.relpath(record_path, base)) - records.append((p, '', '')) - records.sort() - with CSVWriter(record_path) as writer: - for row in records: - writer.writerow(row) - - def write_records(self, info, libdir, archive_paths): - records = [] - distinfo, info_dir = info - hasher = getattr(hashlib, self.hash_kind) - for ap, p in archive_paths: - with open(p, 'rb') as f: - data = f.read() - digest = '%s=%s' % self.get_hash(data) - size = os.path.getsize(p) - records.append((ap, digest, size)) - - p = os.path.join(distinfo, 'RECORD') - self.write_record(records, p, libdir) - ap = to_posix(os.path.join(info_dir, 'RECORD')) - archive_paths.append((ap, p)) - - def build_zip(self, pathname, archive_paths): - with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: - for ap, p in archive_paths: - logger.debug('Wrote %s to %s in wheel', p, ap) - zf.write(p, ap) - - def build(self, paths, tags=None, wheel_version=None): - """ - Build a wheel from files in specified paths, and use any specified tags - when determining the name of the wheel. - """ - if tags is None: - tags = {} - - libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] - if libkey == 'platlib': - is_pure = 'false' - default_pyver = [IMPVER] - default_abi = [ABI] - default_arch = [ARCH] - else: - is_pure = 'true' - default_pyver = [PYVER] - default_abi = ['none'] - default_arch = ['any'] - - self.pyver = tags.get('pyver', default_pyver) - self.abi = tags.get('abi', default_abi) - self.arch = tags.get('arch', default_arch) - - libdir = paths[libkey] - - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - archive_paths = [] - - # First, stuff which is not in site-packages - for key in ('data', 'headers', 'scripts'): - if key not in paths: - continue - path = paths[key] - if os.path.isdir(path): - for root, dirs, files in os.walk(path): - for fn in files: - p = fsdecode(os.path.join(root, fn)) - rp = os.path.relpath(p, path) - ap = to_posix(os.path.join(data_dir, key, rp)) - archive_paths.append((ap, p)) - if key == 'scripts' and not p.endswith('.exe'): - with open(p, 'rb') as f: - data = f.read() - data = self.process_shebang(data) - with open(p, 'wb') as f: - f.write(data) - - # Now, stuff which is in site-packages, other than the - # distinfo stuff. - path = libdir - distinfo = None - for root, dirs, files in os.walk(path): - if root == path: - # At the top level only, save distinfo for later - # and skip it for now - for i, dn in enumerate(dirs): - dn = fsdecode(dn) - if dn.endswith('.dist-info'): - distinfo = os.path.join(root, dn) - del dirs[i] - break - assert distinfo, '.dist-info directory expected, not found' - - for fn in files: - # comment out next suite to leave .pyc files in - if fsdecode(fn).endswith(('.pyc', '.pyo')): - continue - p = os.path.join(root, fn) - rp = to_posix(os.path.relpath(p, path)) - archive_paths.append((rp, p)) - - # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. - files = os.listdir(distinfo) - for fn in files: - if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): - p = fsdecode(os.path.join(distinfo, fn)) - ap = to_posix(os.path.join(info_dir, fn)) - archive_paths.append((ap, p)) - - wheel_metadata = [ - 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), - 'Generator: distlib %s' % __version__, - 'Root-Is-Purelib: %s' % is_pure, - ] - for pyver, abi, arch in self.tags: - wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) - p = os.path.join(distinfo, 'WHEEL') - with open(p, 'w') as f: - f.write('\n'.join(wheel_metadata)) - ap = to_posix(os.path.join(info_dir, 'WHEEL')) - archive_paths.append((ap, p)) - - # Now, at last, RECORD. - # Paths in here are archive paths - nothing else makes sense. - self.write_records((distinfo, info_dir), libdir, archive_paths) - # Now, ready to build the zip file - pathname = os.path.join(self.dirname, self.filename) - self.build_zip(pathname, archive_paths) - return pathname - - def install(self, paths, maker, **kwargs): - """ - Install a wheel to the specified paths. If kwarg ``warner`` is - specified, it should be a callable, which will be called with two - tuples indicating the wheel version of this software and the wheel - version in the file, if there is a discrepancy in the versions. - This can be used to issue any warnings to raise any exceptions. - If kwarg ``lib_only`` is True, only the purelib/platlib files are - installed, and the headers, scripts, data and dist-info metadata are - not written. - - The return value is a :class:`InstalledDistribution` instance unless - ``options.lib_only`` is True, in which case the return value is ``None``. - """ - - dry_run = maker.dry_run - warner = kwargs.get('warner') - lib_only = kwargs.get('lib_only', False) - - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - metadata_name = posixpath.join(info_dir, METADATA_FILENAME) - wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') - record_name = posixpath.join(info_dir, 'RECORD') - - wrapper = codecs.getreader('utf-8') - - with ZipFile(pathname, 'r') as zf: - with zf.open(wheel_metadata_name) as bwf: - wf = wrapper(bwf) - message = message_from_file(wf) - wv = message['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - if (file_version != self.wheel_version) and warner: - warner(self.wheel_version, file_version) - - if message['Root-Is-Purelib'] == 'true': - libdir = paths['purelib'] - else: - libdir = paths['platlib'] - - records = {} - with zf.open(record_name) as bf: - with CSVReader(stream=bf) as reader: - for row in reader: - p = row[0] - records[p] = row - - data_pfx = posixpath.join(data_dir, '') - info_pfx = posixpath.join(info_dir, '') - script_pfx = posixpath.join(data_dir, 'scripts', '') - - # make a new instance rather than a copy of maker's, - # as we mutate it - fileop = FileOperator(dry_run=dry_run) - fileop.record = True # so we can rollback if needed - - bc = not sys.dont_write_bytecode # Double negatives. Lovely! - - outfiles = [] # for RECORD writing - - # for script copying/shebang processing - workdir = tempfile.mkdtemp() - # set target dir later - # we default add_launchers to False, as the - # Python Launcher should be used instead - maker.source_dir = workdir - maker.target_dir = None - try: - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - # The signature file won't be in RECORD, - # and we don't currently don't do anything with it - if u_arcname.endswith('/RECORD.jws'): - continue - row = records[u_arcname] - if row[2] and str(zinfo.file_size) != row[2]: - raise DistlibException('size mismatch for ' - '%s' % u_arcname) - if row[1]: - kind, value = row[1].split('=', 1) - with zf.open(arcname) as bf: - data = bf.read() - _, digest = self.get_hash(data, kind) - if digest != value: - raise DistlibException('digest mismatch for ' - '%s' % arcname) - - if lib_only and u_arcname.startswith((info_pfx, data_pfx)): - logger.debug('lib_only: skipping %s', u_arcname) - continue - is_script = (u_arcname.startswith(script_pfx) - and not u_arcname.endswith('.exe')) - - if u_arcname.startswith(data_pfx): - _, where, rp = u_arcname.split('/', 2) - outfile = os.path.join(paths[where], convert_path(rp)) - else: - # meant for site-packages. - if u_arcname in (wheel_metadata_name, record_name): - continue - outfile = os.path.join(libdir, convert_path(u_arcname)) - if not is_script: - with zf.open(arcname) as bf: - fileop.copy_stream(bf, outfile) - outfiles.append(outfile) - # Double check the digest of the written file - if not dry_run and row[1]: - with open(outfile, 'rb') as bf: - data = bf.read() - _, newdigest = self.get_hash(data, kind) - if newdigest != digest: - raise DistlibException('digest mismatch ' - 'on write for ' - '%s' % outfile) - if bc and outfile.endswith('.py'): - try: - pyc = fileop.byte_compile(outfile) - outfiles.append(pyc) - except Exception: - # Don't give up if byte-compilation fails, - # but log it and perhaps warn the user - logger.warning('Byte-compilation failed', - exc_info=True) - else: - fn = os.path.basename(convert_path(arcname)) - workname = os.path.join(workdir, fn) - with zf.open(arcname) as bf: - fileop.copy_stream(bf, workname) - - dn, fn = os.path.split(outfile) - maker.target_dir = dn - filenames = maker.make(fn) - fileop.set_executable_mode(filenames) - outfiles.extend(filenames) - - if lib_only: - logger.debug('lib_only: returning None') - dist = None - else: - # Generate scripts - - # Try to get pydist.json so we can see if there are - # any commands to generate. If this fails (e.g. because - # of a legacy wheel), log a warning but don't give up. - commands = None - file_version = self.info['Wheel-Version'] - if file_version == '1.0': - # Use legacy info - ep = posixpath.join(info_dir, 'entry_points.txt') - try: - with zf.open(ep) as bwf: - epdata = read_exports(bwf) - commands = {} - for key in ('console', 'gui'): - k = '%s_scripts' % key - if k in epdata: - commands['wrap_%s' % key] = d = {} - for v in epdata[k].values(): - s = '%s:%s' % (v.prefix, v.suffix) - if v.flags: - s += ' %s' % v.flags - d[v.name] = s - except Exception: - logger.warning('Unable to read legacy script ' - 'metadata, so cannot generate ' - 'scripts') - else: - try: - with zf.open(metadata_name) as bwf: - wf = wrapper(bwf) - commands = json.load(wf).get('extensions') - if commands: - commands = commands.get('python.commands') - except Exception: - logger.warning('Unable to read JSON metadata, so ' - 'cannot generate scripts') - if commands: - console_scripts = commands.get('wrap_console', {}) - gui_scripts = commands.get('wrap_gui', {}) - if console_scripts or gui_scripts: - script_dir = paths.get('scripts', '') - if not os.path.isdir(script_dir): - raise ValueError('Valid script path not ' - 'specified') - maker.target_dir = script_dir - for k, v in console_scripts.items(): - script = '%s = %s' % (k, v) - filenames = maker.make(script) - fileop.set_executable_mode(filenames) - - if gui_scripts: - options = {'gui': True } - for k, v in gui_scripts.items(): - script = '%s = %s' % (k, v) - filenames = maker.make(script, options) - fileop.set_executable_mode(filenames) - - p = os.path.join(libdir, info_dir) - dist = InstalledDistribution(p) - - # Write SHARED - paths = dict(paths) # don't change passed in dict - del paths['purelib'] - del paths['platlib'] - paths['lib'] = libdir - p = dist.write_shared_locations(paths, dry_run) - if p: - outfiles.append(p) - - # Write RECORD - dist.write_installed_files(outfiles, paths['prefix'], - dry_run) - return dist - except Exception: # pragma: no cover - logger.exception('installation failed.') - fileop.rollback() - raise - finally: - shutil.rmtree(workdir) - - def _get_dylib_cache(self): - global cache - if cache is None: - # Use native string to avoid issues on 2.x: see Python #20140. - base = os.path.join(get_cache_base(), str('dylib-cache'), - sys.version[:3]) - cache = Cache(base) - return cache - - def _get_extensions(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - arcname = posixpath.join(info_dir, 'EXTENSIONS') - wrapper = codecs.getreader('utf-8') - result = [] - with ZipFile(pathname, 'r') as zf: - try: - with zf.open(arcname) as bf: - wf = wrapper(bf) - extensions = json.load(wf) - cache = self._get_dylib_cache() - prefix = cache.prefix_to_dir(pathname) - cache_base = os.path.join(cache.base, prefix) - if not os.path.isdir(cache_base): - os.makedirs(cache_base) - for name, relpath in extensions.items(): - dest = os.path.join(cache_base, convert_path(relpath)) - if not os.path.exists(dest): - extract = True - else: - file_time = os.stat(dest).st_mtime - file_time = datetime.datetime.fromtimestamp(file_time) - info = zf.getinfo(relpath) - wheel_time = datetime.datetime(*info.date_time) - extract = wheel_time > file_time - if extract: - zf.extract(relpath, cache_base) - result.append((name, dest)) - except KeyError: - pass - return result - - def is_compatible(self): - """ - Determine if a wheel is compatible with the running system. - """ - return is_compatible(self) - - def is_mountable(self): - """ - Determine if a wheel is asserted as mountable by its metadata. - """ - return True # for now - metadata details TBD - - def mount(self, append=False): - pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) - if not self.is_compatible(): - msg = 'Wheel %s not compatible with this Python.' % pathname - raise DistlibException(msg) - if not self.is_mountable(): - msg = 'Wheel %s is marked as not mountable.' % pathname - raise DistlibException(msg) - if pathname in sys.path: - logger.debug('%s already in path', pathname) - else: - if append: - sys.path.append(pathname) - else: - sys.path.insert(0, pathname) - extensions = self._get_extensions() - if extensions: - if _hook not in sys.meta_path: - sys.meta_path.append(_hook) - _hook.add(pathname, extensions) - - def unmount(self): - pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) - if pathname not in sys.path: - logger.debug('%s not in path', pathname) - else: - sys.path.remove(pathname) - if pathname in _hook.impure_wheels: - _hook.remove(pathname) - if not _hook.impure_wheels: - if _hook in sys.meta_path: - sys.meta_path.remove(_hook) - - def verify(self): - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - data_dir = '%s.data' % name_ver - info_dir = '%s.dist-info' % name_ver - - metadata_name = posixpath.join(info_dir, METADATA_FILENAME) - wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') - record_name = posixpath.join(info_dir, 'RECORD') - - wrapper = codecs.getreader('utf-8') - - with ZipFile(pathname, 'r') as zf: - with zf.open(wheel_metadata_name) as bwf: - wf = wrapper(bwf) - message = message_from_file(wf) - wv = message['Wheel-Version'].split('.', 1) - file_version = tuple([int(i) for i in wv]) - # TODO version verification - - records = {} - with zf.open(record_name) as bf: - with CSVReader(stream=bf) as reader: - for row in reader: - p = row[0] - records[p] = row - - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - if '..' in u_arcname: - raise DistlibException('invalid entry in ' - 'wheel: %r' % u_arcname) - - # The signature file won't be in RECORD, - # and we don't currently don't do anything with it - if u_arcname.endswith('/RECORD.jws'): - continue - row = records[u_arcname] - if row[2] and str(zinfo.file_size) != row[2]: - raise DistlibException('size mismatch for ' - '%s' % u_arcname) - if row[1]: - kind, value = row[1].split('=', 1) - with zf.open(arcname) as bf: - data = bf.read() - _, digest = self.get_hash(data, kind) - if digest != value: - raise DistlibException('digest mismatch for ' - '%s' % arcname) - - def update(self, modifier, dest_dir=None, **kwargs): - """ - Update the contents of a wheel in a generic way. The modifier should - be a callable which expects a dictionary argument: its keys are - archive-entry paths, and its values are absolute filesystem paths - where the contents the corresponding archive entries can be found. The - modifier is free to change the contents of the files pointed to, add - new entries and remove entries, before returning. This method will - extract the entire contents of the wheel to a temporary location, call - the modifier, and then use the passed (and possibly updated) - dictionary to write a new wheel. If ``dest_dir`` is specified, the new - wheel is written there -- otherwise, the original wheel is overwritten. - - The modifier should return True if it updated the wheel, else False. - This method returns the same value the modifier returns. - """ - - def get_version(path_map, info_dir): - version = path = None - key = '%s/%s' % (info_dir, METADATA_FILENAME) - if key not in path_map: - key = '%s/PKG-INFO' % info_dir - if key in path_map: - path = path_map[key] - version = Metadata(path=path).version - return version, path - - def update_version(version, path): - updated = None - try: - v = NormalizedVersion(version) - i = version.find('-') - if i < 0: - updated = '%s+1' % version - else: - parts = [int(s) for s in version[i + 1:].split('.')] - parts[-1] += 1 - updated = '%s+%s' % (version[:i], - '.'.join(str(i) for i in parts)) - except UnsupportedVersionError: - logger.debug('Cannot update non-compliant (PEP-440) ' - 'version %r', version) - if updated: - md = Metadata(path=path) - md.version = updated - legacy = not path.endswith(METADATA_FILENAME) - md.write(path=path, legacy=legacy) - logger.debug('Version updated from %r to %r', version, - updated) - - pathname = os.path.join(self.dirname, self.filename) - name_ver = '%s-%s' % (self.name, self.version) - info_dir = '%s.dist-info' % name_ver - record_name = posixpath.join(info_dir, 'RECORD') - with tempdir() as workdir: - with ZipFile(pathname, 'r') as zf: - path_map = {} - for zinfo in zf.infolist(): - arcname = zinfo.filename - if isinstance(arcname, text_type): - u_arcname = arcname - else: - u_arcname = arcname.decode('utf-8') - if u_arcname == record_name: - continue - if '..' in u_arcname: - raise DistlibException('invalid entry in ' - 'wheel: %r' % u_arcname) - zf.extract(zinfo, workdir) - path = os.path.join(workdir, convert_path(u_arcname)) - path_map[u_arcname] = path - - # Remember the version. - original_version, _ = get_version(path_map, info_dir) - # Files extracted. Call the modifier. - modified = modifier(path_map, **kwargs) - if modified: - # Something changed - need to build a new wheel. - current_version, path = get_version(path_map, info_dir) - if current_version and (current_version == original_version): - # Add or update local version to signify changes. - update_version(current_version, path) - # Decide where the new wheel goes. - if dest_dir is None: - fd, newpath = tempfile.mkstemp(suffix='.whl', - prefix='wheel-update-', - dir=workdir) - os.close(fd) - else: - if not os.path.isdir(dest_dir): - raise DistlibException('Not a directory: %r' % dest_dir) - newpath = os.path.join(dest_dir, self.filename) - archive_paths = list(path_map.items()) - distinfo = os.path.join(workdir, info_dir) - info = distinfo, info_dir - self.write_records(info, workdir, archive_paths) - self.build_zip(newpath, archive_paths) - if dest_dir is None: - shutil.copyfile(newpath, pathname) - return modified - -def compatible_tags(): - """ - Return (pyver, abi, arch) tuples compatible with this Python. - """ - versions = [VER_SUFFIX] - major = VER_SUFFIX[0] - for minor in range(sys.version_info[1] - 1, - 1, -1): - versions.append(''.join([major, str(minor)])) - - abis = [] - for suffix, _, _ in imp.get_suffixes(): - if suffix.startswith('.abi'): - abis.append(suffix.split('.', 2)[1]) - abis.sort() - if ABI != 'none': - abis.insert(0, ABI) - abis.append('none') - result = [] - - arches = [ARCH] - if sys.platform == 'darwin': - m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) - if m: - name, major, minor, arch = m.groups() - minor = int(minor) - matches = [arch] - if arch in ('i386', 'ppc'): - matches.append('fat') - if arch in ('i386', 'ppc', 'x86_64'): - matches.append('fat3') - if arch in ('ppc64', 'x86_64'): - matches.append('fat64') - if arch in ('i386', 'x86_64'): - matches.append('intel') - if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): - matches.append('universal') - while minor >= 0: - for match in matches: - s = '%s_%s_%s_%s' % (name, major, minor, match) - if s != ARCH: # already there - arches.append(s) - minor -= 1 - - # Most specific - our Python version, ABI and arch - for abi in abis: - for arch in arches: - result.append((''.join((IMP_PREFIX, versions[0])), abi, arch)) - - # where no ABI / arch dependency, but IMP_PREFIX dependency - for i, version in enumerate(versions): - result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) - if i == 0: - result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) - - # no IMP_PREFIX, ABI or arch dependency - for i, version in enumerate(versions): - result.append((''.join(('py', version)), 'none', 'any')) - if i == 0: - result.append((''.join(('py', version[0])), 'none', 'any')) - return set(result) - - -COMPATIBLE_TAGS = compatible_tags() - -del compatible_tags - - -def is_compatible(wheel, tags=None): - if not isinstance(wheel, Wheel): - wheel = Wheel(wheel) # assume it's a filename - result = False - if tags is None: - tags = COMPATIBLE_TAGS - for ver, abi, arch in tags: - if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: - result = True - break - return result diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distro.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distro.py deleted file mode 100644 index 39bfce7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/distro.py +++ /dev/null @@ -1,1104 +0,0 @@ -# Copyright 2015,2016 Nir Cohen -# -# 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. - -""" -The ``distro`` package (``distro`` stands for Linux Distribution) provides -information about the Linux distribution it runs on, such as a reliable -machine-readable distro ID, or version information. - -It is a renewed alternative implementation for Python's original -:py:func:`platform.linux_distribution` function, but it provides much more -functionality. An alternative implementation became necessary because Python -3.5 deprecated this function, and Python 3.7 is expected to remove it -altogether. Its predecessor function :py:func:`platform.dist` was already -deprecated since Python 2.6 and is also expected to be removed in Python 3.7. -Still, there are many cases in which access to Linux distribution information -is needed. See `Python issue 1322 <https://bugs.python.org/issue1322>`_ for -more information. -""" - -import os -import re -import sys -import json -import shlex -import logging -import argparse -import subprocess - - -_UNIXCONFDIR = os.environ.get('UNIXCONFDIR', '/etc') -_OS_RELEASE_BASENAME = 'os-release' - -#: Translation table for normalizing the "ID" attribute defined in os-release -#: files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as defined in the os-release file, translated to lower case, -#: with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_OS_ID = {} - -#: Translation table for normalizing the "Distributor ID" attribute returned by -#: the lsb_release command, for use by the :func:`distro.id` method. -#: -#: * Key: Value as returned by the lsb_release command, translated to lower -#: case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_LSB_ID = { - 'enterpriseenterprise': 'oracle', # Oracle Enterprise Linux - 'redhatenterpriseworkstation': 'rhel', # RHEL 6, 7 Workstation - 'redhatenterpriseserver': 'rhel', # RHEL 6, 7 Server -} - -#: Translation table for normalizing the distro ID derived from the file name -#: of distro release files, for use by the :func:`distro.id` method. -#: -#: * Key: Value as derived from the file name of a distro release file, -#: translated to lower case, with blanks translated to underscores. -#: -#: * Value: Normalized value. -NORMALIZED_DISTRO_ID = { - 'redhat': 'rhel', # RHEL 6.x, 7.x -} - -# Pattern for content of distro release file (reversed) -_DISTRO_RELEASE_CONTENT_REVERSED_PATTERN = re.compile( - r'(?:[^)]*\)(.*)\()? *(?:STL )?([\d.+\-a-z]*\d) *(?:esaeler *)?(.+)') - -# Pattern for base file name of distro release file -_DISTRO_RELEASE_BASENAME_PATTERN = re.compile( - r'(\w+)[-_](release|version)$') - -# Base file names to be ignored when searching for distro release file -_DISTRO_RELEASE_IGNORE_BASENAMES = ( - 'debian_version', - 'lsb-release', - 'oem-release', - _OS_RELEASE_BASENAME, - 'system-release' -) - - -def linux_distribution(full_distribution_name=True): - """ - Return information about the current Linux distribution as a tuple - ``(id_name, version, codename)`` with items as follows: - - * ``id_name``: If *full_distribution_name* is false, the result of - :func:`distro.id`. Otherwise, the result of :func:`distro.name`. - - * ``version``: The result of :func:`distro.version`. - - * ``codename``: The result of :func:`distro.codename`. - - The interface of this function is compatible with the original - :py:func:`platform.linux_distribution` function, supporting a subset of - its parameters. - - The data it returns may not exactly be the same, because it uses more data - sources than the original function, and that may lead to different data if - the Linux distribution is not consistent across multiple data sources it - provides (there are indeed such distributions ...). - - Another reason for differences is the fact that the :func:`distro.id` - method normalizes the distro ID string to a reliable machine-readable value - for a number of popular Linux distributions. - """ - return _distro.linux_distribution(full_distribution_name) - - -def id(): - """ - Return the distro ID of the current Linux distribution, as a - machine-readable string. - - For a number of Linux distributions, the returned distro ID value is - *reliable*, in the sense that it is documented and that it does not change - across releases of the distribution. - - This package maintains the following reliable distro ID values: - - ============== ========================================= - Distro ID Distribution - ============== ========================================= - "ubuntu" Ubuntu - "debian" Debian - "rhel" RedHat Enterprise Linux - "centos" CentOS - "fedora" Fedora - "sles" SUSE Linux Enterprise Server - "opensuse" openSUSE - "amazon" Amazon Linux - "arch" Arch Linux - "cloudlinux" CloudLinux OS - "exherbo" Exherbo Linux - "gentoo" GenToo Linux - "ibm_powerkvm" IBM PowerKVM - "kvmibm" KVM for IBM z Systems - "linuxmint" Linux Mint - "mageia" Mageia - "mandriva" Mandriva Linux - "parallels" Parallels - "pidora" Pidora - "raspbian" Raspbian - "oracle" Oracle Linux (and Oracle Enterprise Linux) - "scientific" Scientific Linux - "slackware" Slackware - "xenserver" XenServer - ============== ========================================= - - If you have a need to get distros for reliable IDs added into this set, - or if you find that the :func:`distro.id` function returns a different - distro ID for one of the listed distros, please create an issue in the - `distro issue tracker`_. - - **Lookup hierarchy and transformations:** - - First, the ID is obtained from the following sources, in the specified - order. The first available and non-empty value is used: - - * the value of the "ID" attribute of the os-release file, - - * the value of the "Distributor ID" attribute returned by the lsb_release - command, - - * the first part of the file name of the distro release file, - - The so determined ID value then passes the following transformations, - before it is returned by this method: - - * it is translated to lower case, - - * blanks (which should not be there anyway) are translated to underscores, - - * a normalization of the ID is performed, based upon - `normalization tables`_. The purpose of this normalization is to ensure - that the ID is as reliable as possible, even across incompatible changes - in the Linux distributions. A common reason for an incompatible change is - the addition of an os-release file, or the addition of the lsb_release - command, with ID values that differ from what was previously determined - from the distro release file name. - """ - return _distro.id() - - -def name(pretty=False): - """ - Return the name of the current Linux distribution, as a human-readable - string. - - If *pretty* is false, the name is returned without version or codename. - (e.g. "CentOS Linux") - - If *pretty* is true, the version and codename are appended. - (e.g. "CentOS Linux 7.1.1503 (Core)") - - **Lookup hierarchy:** - - The name is obtained from the following sources, in the specified order. - The first available and non-empty value is used: - - * If *pretty* is false: - - - the value of the "NAME" attribute of the os-release file, - - - the value of the "Distributor ID" attribute returned by the lsb_release - command, - - - the value of the "<name>" field of the distro release file. - - * If *pretty* is true: - - - the value of the "PRETTY_NAME" attribute of the os-release file, - - - the value of the "Description" attribute returned by the lsb_release - command, - - - the value of the "<name>" field of the distro release file, appended - with the value of the pretty version ("<version_id>" and "<codename>" - fields) of the distro release file, if available. - """ - return _distro.name(pretty) - - -def version(pretty=False, best=False): - """ - Return the version of the current Linux distribution, as a human-readable - string. - - If *pretty* is false, the version is returned without codename (e.g. - "7.0"). - - If *pretty* is true, the codename in parenthesis is appended, if the - codename is non-empty (e.g. "7.0 (Maipo)"). - - Some distributions provide version numbers with different precisions in - the different sources of distribution information. Examining the different - sources in a fixed priority order does not always yield the most precise - version (e.g. for Debian 8.2, or CentOS 7.1). - - The *best* parameter can be used to control the approach for the returned - version: - - If *best* is false, the first non-empty version number in priority order of - the examined sources is returned. - - If *best* is true, the most precise version number out of all examined - sources is returned. - - **Lookup hierarchy:** - - In all cases, the version number is obtained from the following sources. - If *best* is false, this order represents the priority order: - - * the value of the "VERSION_ID" attribute of the os-release file, - * the value of the "Release" attribute returned by the lsb_release - command, - * the version number parsed from the "<version_id>" field of the first line - of the distro release file, - * the version number parsed from the "PRETTY_NAME" attribute of the - os-release file, if it follows the format of the distro release files. - * the version number parsed from the "Description" attribute returned by - the lsb_release command, if it follows the format of the distro release - files. - """ - return _distro.version(pretty, best) - - -def version_parts(best=False): - """ - Return the version of the current Linux distribution as a tuple - ``(major, minor, build_number)`` with items as follows: - - * ``major``: The result of :func:`distro.major_version`. - - * ``minor``: The result of :func:`distro.minor_version`. - - * ``build_number``: The result of :func:`distro.build_number`. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.version_parts(best) - - -def major_version(best=False): - """ - Return the major version of the current Linux distribution, as a string, - if provided. - Otherwise, the empty string is returned. The major version is the first - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.major_version(best) - - -def minor_version(best=False): - """ - Return the minor version of the current Linux distribution, as a string, - if provided. - Otherwise, the empty string is returned. The minor version is the second - part of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.minor_version(best) - - -def build_number(best=False): - """ - Return the build number of the current Linux distribution, as a string, - if provided. - Otherwise, the empty string is returned. The build number is the third part - of the dot-separated version string. - - For a description of the *best* parameter, see the :func:`distro.version` - method. - """ - return _distro.build_number(best) - - -def like(): - """ - Return a space-separated list of distro IDs of distributions that are - closely related to the current Linux distribution in regards to packaging - and programming interfaces, for example distributions the current - distribution is a derivative from. - - **Lookup hierarchy:** - - This information item is only provided by the os-release file. - For details, see the description of the "ID_LIKE" attribute in the - `os-release man page - <http://www.freedesktop.org/software/systemd/man/os-release.html>`_. - """ - return _distro.like() - - -def codename(): - """ - Return the codename for the release of the current Linux distribution, - as a string. - - If the distribution does not have a codename, an empty string is returned. - - Note that the returned codename is not always really a codename. For - example, openSUSE returns "x86_64". This function does not handle such - cases in any special way and just returns the string it finds, if any. - - **Lookup hierarchy:** - - * the codename within the "VERSION" attribute of the os-release file, if - provided, - - * the value of the "Codename" attribute returned by the lsb_release - command, - - * the value of the "<codename>" field of the distro release file. - """ - return _distro.codename() - - -def info(pretty=False, best=False): - """ - Return certain machine-readable information items about the current Linux - distribution in a dictionary, as shown in the following example: - - .. sourcecode:: python - - { - 'id': 'rhel', - 'version': '7.0', - 'version_parts': { - 'major': '7', - 'minor': '0', - 'build_number': '' - }, - 'like': 'fedora', - 'codename': 'Maipo' - } - - The dictionary structure and keys are always the same, regardless of which - information items are available in the underlying data sources. The values - for the various keys are as follows: - - * ``id``: The result of :func:`distro.id`. - - * ``version``: The result of :func:`distro.version`. - - * ``version_parts -> major``: The result of :func:`distro.major_version`. - - * ``version_parts -> minor``: The result of :func:`distro.minor_version`. - - * ``version_parts -> build_number``: The result of - :func:`distro.build_number`. - - * ``like``: The result of :func:`distro.like`. - - * ``codename``: The result of :func:`distro.codename`. - - For a description of the *pretty* and *best* parameters, see the - :func:`distro.version` method. - """ - return _distro.info(pretty, best) - - -def os_release_info(): - """ - Return a dictionary containing key-value pairs for the information items - from the os-release file data source of the current Linux distribution. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_info() - - -def lsb_release_info(): - """ - Return a dictionary containing key-value pairs for the information items - from the lsb_release command data source of the current Linux distribution. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_info() - - -def distro_release_info(): - """ - Return a dictionary containing key-value pairs for the information items - from the distro release file data source of the current Linux distribution. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_info() - - -def os_release_attr(attribute): - """ - Return a single named information item from the os-release file data source - of the current Linux distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `os-release file`_ for details about these information items. - """ - return _distro.os_release_attr(attribute) - - -def lsb_release_attr(attribute): - """ - Return a single named information item from the lsb_release command output - data source of the current Linux distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `lsb_release command output`_ for details about these information - items. - """ - return _distro.lsb_release_attr(attribute) - - -def distro_release_attr(attribute): - """ - Return a single named information item from the distro release file - data source of the current Linux distribution. - - Parameters: - - * ``attribute`` (string): Key of the information item. - - Returns: - - * (string): Value of the information item, if the item exists. - The empty string, if the item does not exist. - - See `distro release file`_ for details about these information items. - """ - return _distro.distro_release_attr(attribute) - - -class cached_property(object): - """A version of @property which caches the value. On access, it calls the - underlying function and sets the value in `__dict__` so future accesses - will not re-call the property. - """ - def __init__(self, f): - self._fname = f.__name__ - self._f = f - - def __get__(self, obj, owner): - assert obj is not None, 'call {} on an instance'.format(self._fname) - ret = obj.__dict__[self._fname] = self._f(obj) - return ret - - -class LinuxDistribution(object): - """ - Provides information about a Linux distribution. - - This package creates a private module-global instance of this class with - default initialization arguments, that is used by the - `consolidated accessor functions`_ and `single source accessor functions`_. - By using default initialization arguments, that module-global instance - returns data about the current Linux distribution (i.e. the distro this - package runs on). - - Normally, it is not necessary to create additional instances of this class. - However, in situations where control is needed over the exact data sources - that are used, instances of this class can be created with a specific - distro release file, or a specific os-release file, or without invoking the - lsb_release command. - """ - - def __init__(self, - include_lsb=True, - os_release_file='', - distro_release_file=''): - """ - The initialization method of this class gathers information from the - available data sources, and stores that in private instance attributes. - Subsequent access to the information items uses these private instance - attributes, so that the data sources are read only once. - - Parameters: - - * ``include_lsb`` (bool): Controls whether the - `lsb_release command output`_ is included as a data source. - - If the lsb_release command is not available in the program execution - path, the data source for the lsb_release command will be empty. - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is to be used as a data source. - - An empty string (the default) will cause the default path name to - be used (see `os-release file`_ for details). - - If the specified or defaulted os-release file does not exist, the - data source for the os-release file will be empty. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is to be used as a data source. - - An empty string (the default) will cause a default search algorithm - to be used (see `distro release file`_ for details). - - If the specified distro release file does not exist, or if no default - distro release file can be found, the data source for the distro - release file will be empty. - - Public instance attributes: - - * ``os_release_file`` (string): The path name of the - `os-release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``distro_release_file`` (string): The path name of the - `distro release file`_ that is actually used as a data source. The - empty string if no distro release file is used as a data source. - - * ``include_lsb`` (bool): The result of the ``include_lsb`` parameter. - This controls whether the lsb information will be loaded. - - Raises: - - * :py:exc:`IOError`: Some I/O issue with an os-release file or distro - release file. - - * :py:exc:`subprocess.CalledProcessError`: The lsb_release command had - some issue (other than not being available in the program execution - path). - - * :py:exc:`UnicodeError`: A data source has unexpected characters or - uses an unexpected encoding. - """ - self.os_release_file = os_release_file or \ - os.path.join(_UNIXCONFDIR, _OS_RELEASE_BASENAME) - self.distro_release_file = distro_release_file or '' # updated later - self.include_lsb = include_lsb - - def __repr__(self): - """Return repr of all info - """ - return \ - "LinuxDistribution(" \ - "os_release_file={self.os_release_file!r}, " \ - "distro_release_file={self.distro_release_file!r}, " \ - "include_lsb={self.include_lsb!r}, " \ - "_os_release_info={self._os_release_info!r}, " \ - "_lsb_release_info={self._lsb_release_info!r}, " \ - "_distro_release_info={self._distro_release_info!r})".format( - self=self) - - def linux_distribution(self, full_distribution_name=True): - """ - Return information about the Linux distribution that is compatible - with Python's :func:`platform.linux_distribution`, supporting a subset - of its parameters. - - For details, see :func:`distro.linux_distribution`. - """ - return ( - self.name() if full_distribution_name else self.id(), - self.version(), - self.codename() - ) - - def id(self): - """Return the distro ID of the Linux distribution, as a string. - - For details, see :func:`distro.id`. - """ - def normalize(distro_id, table): - distro_id = distro_id.lower().replace(' ', '_') - return table.get(distro_id, distro_id) - - distro_id = self.os_release_attr('id') - if distro_id: - return normalize(distro_id, NORMALIZED_OS_ID) - - distro_id = self.lsb_release_attr('distributor_id') - if distro_id: - return normalize(distro_id, NORMALIZED_LSB_ID) - - distro_id = self.distro_release_attr('id') - if distro_id: - return normalize(distro_id, NORMALIZED_DISTRO_ID) - - return '' - - def name(self, pretty=False): - """ - Return the name of the Linux distribution, as a string. - - For details, see :func:`distro.name`. - """ - name = self.os_release_attr('name') \ - or self.lsb_release_attr('distributor_id') \ - or self.distro_release_attr('name') - if pretty: - name = self.os_release_attr('pretty_name') \ - or self.lsb_release_attr('description') - if not name: - name = self.distro_release_attr('name') - version = self.version(pretty=True) - if version: - name = name + ' ' + version - return name or '' - - def version(self, pretty=False, best=False): - """ - Return the version of the Linux distribution, as a string. - - For details, see :func:`distro.version`. - """ - versions = [ - self.os_release_attr('version_id'), - self.lsb_release_attr('release'), - self.distro_release_attr('version_id'), - self._parse_distro_release_content( - self.os_release_attr('pretty_name')).get('version_id', ''), - self._parse_distro_release_content( - self.lsb_release_attr('description')).get('version_id', '') - ] - version = '' - if best: - # This algorithm uses the last version in priority order that has - # the best precision. If the versions are not in conflict, that - # does not matter; otherwise, using the last one instead of the - # first one might be considered a surprise. - for v in versions: - if v.count(".") > version.count(".") or version == '': - version = v - else: - for v in versions: - if v != '': - version = v - break - if pretty and version and self.codename(): - version = u'{0} ({1})'.format(version, self.codename()) - return version - - def version_parts(self, best=False): - """ - Return the version of the Linux distribution, as a tuple of version - numbers. - - For details, see :func:`distro.version_parts`. - """ - version_str = self.version(best=best) - if version_str: - version_regex = re.compile(r'(\d+)\.?(\d+)?\.?(\d+)?') - matches = version_regex.match(version_str) - if matches: - major, minor, build_number = matches.groups() - return major, minor or '', build_number or '' - return '', '', '' - - def major_version(self, best=False): - """ - Return the major version number of the current distribution. - - For details, see :func:`distro.major_version`. - """ - return self.version_parts(best)[0] - - def minor_version(self, best=False): - """ - Return the minor version number of the Linux distribution. - - For details, see :func:`distro.minor_version`. - """ - return self.version_parts(best)[1] - - def build_number(self, best=False): - """ - Return the build number of the Linux distribution. - - For details, see :func:`distro.build_number`. - """ - return self.version_parts(best)[2] - - def like(self): - """ - Return the IDs of distributions that are like the Linux distribution. - - For details, see :func:`distro.like`. - """ - return self.os_release_attr('id_like') or '' - - def codename(self): - """ - Return the codename of the Linux distribution. - - For details, see :func:`distro.codename`. - """ - return self.os_release_attr('codename') \ - or self.lsb_release_attr('codename') \ - or self.distro_release_attr('codename') \ - or '' - - def info(self, pretty=False, best=False): - """ - Return certain machine-readable information about the Linux - distribution. - - For details, see :func:`distro.info`. - """ - return dict( - id=self.id(), - version=self.version(pretty, best), - version_parts=dict( - major=self.major_version(best), - minor=self.minor_version(best), - build_number=self.build_number(best) - ), - like=self.like(), - codename=self.codename(), - ) - - def os_release_info(self): - """ - Return a dictionary containing key-value pairs for the information - items from the os-release file data source of the Linux distribution. - - For details, see :func:`distro.os_release_info`. - """ - return self._os_release_info - - def lsb_release_info(self): - """ - Return a dictionary containing key-value pairs for the information - items from the lsb_release command data source of the Linux - distribution. - - For details, see :func:`distro.lsb_release_info`. - """ - return self._lsb_release_info - - def distro_release_info(self): - """ - Return a dictionary containing key-value pairs for the information - items from the distro release file data source of the Linux - distribution. - - For details, see :func:`distro.distro_release_info`. - """ - return self._distro_release_info - - def os_release_attr(self, attribute): - """ - Return a single named information item from the os-release file data - source of the Linux distribution. - - For details, see :func:`distro.os_release_attr`. - """ - return self._os_release_info.get(attribute, '') - - def lsb_release_attr(self, attribute): - """ - Return a single named information item from the lsb_release command - output data source of the Linux distribution. - - For details, see :func:`distro.lsb_release_attr`. - """ - return self._lsb_release_info.get(attribute, '') - - def distro_release_attr(self, attribute): - """ - Return a single named information item from the distro release file - data source of the Linux distribution. - - For details, see :func:`distro.distro_release_attr`. - """ - return self._distro_release_info.get(attribute, '') - - @cached_property - def _os_release_info(self): - """ - Get the information items from the specified os-release file. - - Returns: - A dictionary containing all information items. - """ - if os.path.isfile(self.os_release_file): - with open(self.os_release_file) as release_file: - return self._parse_os_release_content(release_file) - return {} - - @staticmethod - def _parse_os_release_content(lines): - """ - Parse the lines of an os-release file. - - Parameters: - - * lines: Iterable through the lines in the os-release file. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - lexer = shlex.shlex(lines, posix=True) - lexer.whitespace_split = True - - # The shlex module defines its `wordchars` variable using literals, - # making it dependent on the encoding of the Python source file. - # In Python 2.6 and 2.7, the shlex source file is encoded in - # 'iso-8859-1', and the `wordchars` variable is defined as a byte - # string. This causes a UnicodeDecodeError to be raised when the - # parsed content is a unicode object. The following fix resolves that - # (... but it should be fixed in shlex...): - if sys.version_info[0] == 2 and isinstance(lexer.wordchars, bytes): - lexer.wordchars = lexer.wordchars.decode('iso-8859-1') - - tokens = list(lexer) - for token in tokens: - # At this point, all shell-like parsing has been done (i.e. - # comments processed, quotes and backslash escape sequences - # processed, multi-line values assembled, trailing newlines - # stripped, etc.), so the tokens are now either: - # * variable assignments: var=value - # * commands or their arguments (not allowed in os-release) - if '=' in token: - k, v = token.split('=', 1) - if isinstance(v, bytes): - v = v.decode('utf-8') - props[k.lower()] = v - if k == 'VERSION': - # this handles cases in which the codename is in - # the `(CODENAME)` (rhel, centos, fedora) format - # or in the `, CODENAME` format (Ubuntu). - codename = re.search(r'(\(\D+\))|,(\s+)?\D+', v) - if codename: - codename = codename.group() - codename = codename.strip('()') - codename = codename.strip(',') - codename = codename.strip() - # codename appears within paranthese. - props['codename'] = codename - else: - props['codename'] = '' - else: - # Ignore any tokens that are not variable assignments - pass - return props - - @cached_property - def _lsb_release_info(self): - """ - Get the information items from the lsb_release command output. - - Returns: - A dictionary containing all information items. - """ - if not self.include_lsb: - return {} - with open(os.devnull, 'w') as devnull: - try: - cmd = ('lsb_release', '-a') - stdout = subprocess.check_output(cmd, stderr=devnull) - except OSError: # Command not found - return {} - content = stdout.decode(sys.getfilesystemencoding()).splitlines() - return self._parse_lsb_release_content(content) - - @staticmethod - def _parse_lsb_release_content(lines): - """ - Parse the output of the lsb_release command. - - Parameters: - - * lines: Iterable through the lines of the lsb_release output. - Each line must be a unicode string or a UTF-8 encoded byte - string. - - Returns: - A dictionary containing all information items. - """ - props = {} - for line in lines: - kv = line.strip('\n').split(':', 1) - if len(kv) != 2: - # Ignore lines without colon. - continue - k, v = kv - props.update({k.replace(' ', '_').lower(): v.strip()}) - return props - - @cached_property - def _distro_release_info(self): - """ - Get the information items from the specified distro release file. - - Returns: - A dictionary containing all information items. - """ - if self.distro_release_file: - # If it was specified, we use it and parse what we can, even if - # its file name or content does not match the expected pattern. - distro_info = self._parse_distro_release_file( - self.distro_release_file) - basename = os.path.basename(self.distro_release_file) - # The file name pattern for user-specified distro release files - # is somewhat more tolerant (compared to when searching for the - # file), because we want to use what was specified as best as - # possible. - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - if match: - distro_info['id'] = match.group(1) - return distro_info - else: - try: - basenames = os.listdir(_UNIXCONFDIR) - # We sort for repeatability in cases where there are multiple - # distro specific files; e.g. CentOS, Oracle, Enterprise all - # containing `redhat-release` on top of their own. - basenames.sort() - except OSError: - # This may occur when /etc is not readable but we can't be - # sure about the *-release files. Check common entries of - # /etc for information. If they turn out to not be there the - # error is handled in `_parse_distro_release_file()`. - basenames = ['SuSE-release', - 'arch-release', - 'base-release', - 'centos-release', - 'fedora-release', - 'gentoo-release', - 'mageia-release', - 'mandrake-release', - 'mandriva-release', - 'mandrivalinux-release', - 'manjaro-release', - 'oracle-release', - 'redhat-release', - 'sl-release', - 'slackware-version'] - for basename in basenames: - if basename in _DISTRO_RELEASE_IGNORE_BASENAMES: - continue - match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename) - if match: - filepath = os.path.join(_UNIXCONFDIR, basename) - distro_info = self._parse_distro_release_file(filepath) - if 'name' in distro_info: - # The name is always present if the pattern matches - self.distro_release_file = filepath - distro_info['id'] = match.group(1) - return distro_info - return {} - - def _parse_distro_release_file(self, filepath): - """ - Parse a distro release file. - - Parameters: - - * filepath: Path name of the distro release file. - - Returns: - A dictionary containing all information items. - """ - try: - with open(filepath) as fp: - # Only parse the first line. For instance, on SLES there - # are multiple lines. We don't want them... - return self._parse_distro_release_content(fp.readline()) - except (OSError, IOError): - # Ignore not being able to read a specific, seemingly version - # related file. - # See https://github.com/nir0s/distro/issues/162 - return {} - - @staticmethod - def _parse_distro_release_content(line): - """ - Parse a line from a distro release file. - - Parameters: - * line: Line from the distro release file. Must be a unicode string - or a UTF-8 encoded byte string. - - Returns: - A dictionary containing all information items. - """ - if isinstance(line, bytes): - line = line.decode('utf-8') - matches = _DISTRO_RELEASE_CONTENT_REVERSED_PATTERN.match( - line.strip()[::-1]) - distro_info = {} - if matches: - # regexp ensures non-None - distro_info['name'] = matches.group(3)[::-1] - if matches.group(2): - distro_info['version_id'] = matches.group(2)[::-1] - if matches.group(1): - distro_info['codename'] = matches.group(1)[::-1] - elif line: - distro_info['name'] = line.strip() - return distro_info - - -_distro = LinuxDistribution() - - -def main(): - logger = logging.getLogger(__name__) - logger.setLevel(logging.DEBUG) - logger.addHandler(logging.StreamHandler(sys.stdout)) - - parser = argparse.ArgumentParser(description="Linux distro info tool") - parser.add_argument( - '--json', - '-j', - help="Output in machine readable format", - action="store_true") - args = parser.parse_args() - - if args.json: - logger.info(json.dumps(info(), indent=4, sort_keys=True)) - else: - logger.info('Name: %s', name(pretty=True)) - distribution_version = version(pretty=True) - logger.info('Version: %s', distribution_version) - distribution_codename = codename() - logger.info('Codename: %s', distribution_codename) - - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py deleted file mode 100644 index 0491234..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/__init__.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -HTML parsing library based on the `WHATWG HTML specification -<https://whatwg.org/html>`_. The parser is designed to be compatible with -existing HTML found in the wild and implements well-defined error recovery that -is largely compatible with modern desktop web browsers. - -Example usage:: - - from pip._vendor import html5lib - with open("my_document.html", "rb") as f: - tree = html5lib.parse(f) - -For convenience, this module re-exports the following names: - -* :func:`~.html5parser.parse` -* :func:`~.html5parser.parseFragment` -* :class:`~.html5parser.HTMLParser` -* :func:`~.treebuilders.getTreeBuilder` -* :func:`~.treewalkers.getTreeWalker` -* :func:`~.serializer.serialize` -""" - -from __future__ import absolute_import, division, unicode_literals - -from .html5parser import HTMLParser, parse, parseFragment -from .treebuilders import getTreeBuilder -from .treewalkers import getTreeWalker -from .serializer import serialize - -__all__ = ["HTMLParser", "parse", "parseFragment", "getTreeBuilder", - "getTreeWalker", "serialize"] - -# this has to be at the top level, see how setup.py parses this -#: Distribution version number. -__version__ = "1.0.1" diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py deleted file mode 100644 index 4c77717..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_ihatexml.py +++ /dev/null @@ -1,288 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import re -import warnings - -from .constants import DataLossWarning - -baseChar = """ -[#x0041-#x005A] | [#x0061-#x007A] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | -[#x00F8-#x00FF] | [#x0100-#x0131] | [#x0134-#x013E] | [#x0141-#x0148] | -[#x014A-#x017E] | [#x0180-#x01C3] | [#x01CD-#x01F0] | [#x01F4-#x01F5] | -[#x01FA-#x0217] | [#x0250-#x02A8] | [#x02BB-#x02C1] | #x0386 | -[#x0388-#x038A] | #x038C | [#x038E-#x03A1] | [#x03A3-#x03CE] | -[#x03D0-#x03D6] | #x03DA | #x03DC | #x03DE | #x03E0 | [#x03E2-#x03F3] | -[#x0401-#x040C] | [#x040E-#x044F] | [#x0451-#x045C] | [#x045E-#x0481] | -[#x0490-#x04C4] | [#x04C7-#x04C8] | [#x04CB-#x04CC] | [#x04D0-#x04EB] | -[#x04EE-#x04F5] | [#x04F8-#x04F9] | [#x0531-#x0556] | #x0559 | -[#x0561-#x0586] | [#x05D0-#x05EA] | [#x05F0-#x05F2] | [#x0621-#x063A] | -[#x0641-#x064A] | [#x0671-#x06B7] | [#x06BA-#x06BE] | [#x06C0-#x06CE] | -[#x06D0-#x06D3] | #x06D5 | [#x06E5-#x06E6] | [#x0905-#x0939] | #x093D | -[#x0958-#x0961] | [#x0985-#x098C] | [#x098F-#x0990] | [#x0993-#x09A8] | -[#x09AA-#x09B0] | #x09B2 | [#x09B6-#x09B9] | [#x09DC-#x09DD] | -[#x09DF-#x09E1] | [#x09F0-#x09F1] | [#x0A05-#x0A0A] | [#x0A0F-#x0A10] | -[#x0A13-#x0A28] | [#x0A2A-#x0A30] | [#x0A32-#x0A33] | [#x0A35-#x0A36] | -[#x0A38-#x0A39] | [#x0A59-#x0A5C] | #x0A5E | [#x0A72-#x0A74] | -[#x0A85-#x0A8B] | #x0A8D | [#x0A8F-#x0A91] | [#x0A93-#x0AA8] | -[#x0AAA-#x0AB0] | [#x0AB2-#x0AB3] | [#x0AB5-#x0AB9] | #x0ABD | #x0AE0 | -[#x0B05-#x0B0C] | [#x0B0F-#x0B10] | [#x0B13-#x0B28] | [#x0B2A-#x0B30] | -[#x0B32-#x0B33] | [#x0B36-#x0B39] | #x0B3D | [#x0B5C-#x0B5D] | -[#x0B5F-#x0B61] | [#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | -[#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F] | [#x0BA3-#x0BA4] | -[#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9] | [#x0C05-#x0C0C] | -[#x0C0E-#x0C10] | [#x0C12-#x0C28] | [#x0C2A-#x0C33] | [#x0C35-#x0C39] | -[#x0C60-#x0C61] | [#x0C85-#x0C8C] | [#x0C8E-#x0C90] | [#x0C92-#x0CA8] | -[#x0CAA-#x0CB3] | [#x0CB5-#x0CB9] | #x0CDE | [#x0CE0-#x0CE1] | -[#x0D05-#x0D0C] | [#x0D0E-#x0D10] | [#x0D12-#x0D28] | [#x0D2A-#x0D39] | -[#x0D60-#x0D61] | [#x0E01-#x0E2E] | #x0E30 | [#x0E32-#x0E33] | -[#x0E40-#x0E45] | [#x0E81-#x0E82] | #x0E84 | [#x0E87-#x0E88] | #x0E8A | -#x0E8D | [#x0E94-#x0E97] | [#x0E99-#x0E9F] | [#x0EA1-#x0EA3] | #x0EA5 | -#x0EA7 | [#x0EAA-#x0EAB] | [#x0EAD-#x0EAE] | #x0EB0 | [#x0EB2-#x0EB3] | -#x0EBD | [#x0EC0-#x0EC4] | [#x0F40-#x0F47] | [#x0F49-#x0F69] | -[#x10A0-#x10C5] | [#x10D0-#x10F6] | #x1100 | [#x1102-#x1103] | -[#x1105-#x1107] | #x1109 | [#x110B-#x110C] | [#x110E-#x1112] | #x113C | -#x113E | #x1140 | #x114C | #x114E | #x1150 | [#x1154-#x1155] | #x1159 | -[#x115F-#x1161] | #x1163 | #x1165 | #x1167 | #x1169 | [#x116D-#x116E] | -[#x1172-#x1173] | #x1175 | #x119E | #x11A8 | #x11AB | [#x11AE-#x11AF] | -[#x11B7-#x11B8] | #x11BA | [#x11BC-#x11C2] | #x11EB | #x11F0 | #x11F9 | -[#x1E00-#x1E9B] | [#x1EA0-#x1EF9] | [#x1F00-#x1F15] | [#x1F18-#x1F1D] | -[#x1F20-#x1F45] | [#x1F48-#x1F4D] | [#x1F50-#x1F57] | #x1F59 | #x1F5B | -#x1F5D | [#x1F5F-#x1F7D] | [#x1F80-#x1FB4] | [#x1FB6-#x1FBC] | #x1FBE | -[#x1FC2-#x1FC4] | [#x1FC6-#x1FCC] | [#x1FD0-#x1FD3] | [#x1FD6-#x1FDB] | -[#x1FE0-#x1FEC] | [#x1FF2-#x1FF4] | [#x1FF6-#x1FFC] | #x2126 | -[#x212A-#x212B] | #x212E | [#x2180-#x2182] | [#x3041-#x3094] | -[#x30A1-#x30FA] | [#x3105-#x312C] | [#xAC00-#xD7A3]""" - -ideographic = """[#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]""" - -combiningCharacter = """ -[#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | -[#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | -[#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | -[#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | -#x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | -[#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | -[#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | -#x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | -[#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | -[#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | -#x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | -[#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | -[#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | -[#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | -[#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | -[#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | -#x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | -[#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | -#x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | -[#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | -[#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | -#x3099 | #x309A""" - -digit = """ -[#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | -[#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | -[#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | -[#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29]""" - -extender = """ -#x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | -#[#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE]""" - -letter = " | ".join([baseChar, ideographic]) - -# Without the -name = " | ".join([letter, digit, ".", "-", "_", combiningCharacter, - extender]) -nameFirst = " | ".join([letter, "_"]) - -reChar = re.compile(r"#x([\d|A-F]{4,4})") -reCharRange = re.compile(r"\[#x([\d|A-F]{4,4})-#x([\d|A-F]{4,4})\]") - - -def charStringToList(chars): - charRanges = [item.strip() for item in chars.split(" | ")] - rv = [] - for item in charRanges: - foundMatch = False - for regexp in (reChar, reCharRange): - match = regexp.match(item) - if match is not None: - rv.append([hexToInt(item) for item in match.groups()]) - if len(rv[-1]) == 1: - rv[-1] = rv[-1] * 2 - foundMatch = True - break - if not foundMatch: - assert len(item) == 1 - - rv.append([ord(item)] * 2) - rv = normaliseCharList(rv) - return rv - - -def normaliseCharList(charList): - charList = sorted(charList) - for item in charList: - assert item[1] >= item[0] - rv = [] - i = 0 - while i < len(charList): - j = 1 - rv.append(charList[i]) - while i + j < len(charList) and charList[i + j][0] <= rv[-1][1] + 1: - rv[-1][1] = charList[i + j][1] - j += 1 - i += j - return rv - -# We don't really support characters above the BMP :( -max_unicode = int("FFFF", 16) - - -def missingRanges(charList): - rv = [] - if charList[0] != 0: - rv.append([0, charList[0][0] - 1]) - for i, item in enumerate(charList[:-1]): - rv.append([item[1] + 1, charList[i + 1][0] - 1]) - if charList[-1][1] != max_unicode: - rv.append([charList[-1][1] + 1, max_unicode]) - return rv - - -def listToRegexpStr(charList): - rv = [] - for item in charList: - if item[0] == item[1]: - rv.append(escapeRegexp(chr(item[0]))) - else: - rv.append(escapeRegexp(chr(item[0])) + "-" + - escapeRegexp(chr(item[1]))) - return "[%s]" % "".join(rv) - - -def hexToInt(hex_str): - return int(hex_str, 16) - - -def escapeRegexp(string): - specialCharacters = (".", "^", "$", "*", "+", "?", "{", "}", - "[", "]", "|", "(", ")", "-") - for char in specialCharacters: - string = string.replace(char, "\\" + char) - - return string - -# output from the above -nonXmlNameBMPRegexp = re.compile('[\x00-,/:-@\\[-\\^`\\{-\xb6\xb8-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u02cf\u02d2-\u02ff\u0346-\u035f\u0362-\u0385\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482\u0487-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u0590\u05a2\u05ba\u05be\u05c0\u05c3\u05c5-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u063f\u0653-\u065f\u066a-\u066f\u06b8-\u06b9\u06bf\u06cf\u06d4\u06e9\u06ee-\u06ef\u06fa-\u0900\u0904\u093a-\u093b\u094e-\u0950\u0955-\u0957\u0964-\u0965\u0970-\u0980\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09bb\u09bd\u09c5-\u09c6\u09c9-\u09ca\u09ce-\u09d6\u09d8-\u09db\u09de\u09e4-\u09e5\u09f2-\u0a01\u0a03-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a3b\u0a3d\u0a43-\u0a46\u0a49-\u0a4a\u0a4e-\u0a58\u0a5d\u0a5f-\u0a65\u0a75-\u0a80\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abb\u0ac6\u0aca\u0ace-\u0adf\u0ae1-\u0ae5\u0af0-\u0b00\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3b\u0b44-\u0b46\u0b49-\u0b4a\u0b4e-\u0b55\u0b58-\u0b5b\u0b5e\u0b62-\u0b65\u0b70-\u0b81\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0bbd\u0bc3-\u0bc5\u0bc9\u0bce-\u0bd6\u0bd8-\u0be6\u0bf0-\u0c00\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c3d\u0c45\u0c49\u0c4e-\u0c54\u0c57-\u0c5f\u0c62-\u0c65\u0c70-\u0c81\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cbd\u0cc5\u0cc9\u0cce-\u0cd4\u0cd7-\u0cdd\u0cdf\u0ce2-\u0ce5\u0cf0-\u0d01\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d3d\u0d44-\u0d45\u0d49\u0d4e-\u0d56\u0d58-\u0d5f\u0d62-\u0d65\u0d70-\u0e00\u0e2f\u0e3b-\u0e3f\u0e4f\u0e5a-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eba\u0ebe-\u0ebf\u0ec5\u0ec7\u0ece-\u0ecf\u0eda-\u0f17\u0f1a-\u0f1f\u0f2a-\u0f34\u0f36\u0f38\u0f3a-\u0f3d\u0f48\u0f6a-\u0f70\u0f85\u0f8c-\u0f8f\u0f96\u0f98\u0fae-\u0fb0\u0fb8\u0fba-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u20cf\u20dd-\u20e0\u20e2-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3004\u3006\u3008-\u3020\u3030\u3036-\u3040\u3095-\u3098\u309b-\u309c\u309f-\u30a0\u30fb\u30ff-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa - -nonXmlNameFirstBMPRegexp = re.compile('[\x00-@\\[-\\^`\\{-\xbf\xd7\xf7\u0132-\u0133\u013f-\u0140\u0149\u017f\u01c4-\u01cc\u01f1-\u01f3\u01f6-\u01f9\u0218-\u024f\u02a9-\u02ba\u02c2-\u0385\u0387\u038b\u038d\u03a2\u03cf\u03d7-\u03d9\u03db\u03dd\u03df\u03e1\u03f4-\u0400\u040d\u0450\u045d\u0482-\u048f\u04c5-\u04c6\u04c9-\u04ca\u04cd-\u04cf\u04ec-\u04ed\u04f6-\u04f7\u04fa-\u0530\u0557-\u0558\u055a-\u0560\u0587-\u05cf\u05eb-\u05ef\u05f3-\u0620\u063b-\u0640\u064b-\u0670\u06b8-\u06b9\u06bf\u06cf\u06d4\u06d6-\u06e4\u06e7-\u0904\u093a-\u093c\u093e-\u0957\u0962-\u0984\u098d-\u098e\u0991-\u0992\u09a9\u09b1\u09b3-\u09b5\u09ba-\u09db\u09de\u09e2-\u09ef\u09f2-\u0a04\u0a0b-\u0a0e\u0a11-\u0a12\u0a29\u0a31\u0a34\u0a37\u0a3a-\u0a58\u0a5d\u0a5f-\u0a71\u0a75-\u0a84\u0a8c\u0a8e\u0a92\u0aa9\u0ab1\u0ab4\u0aba-\u0abc\u0abe-\u0adf\u0ae1-\u0b04\u0b0d-\u0b0e\u0b11-\u0b12\u0b29\u0b31\u0b34-\u0b35\u0b3a-\u0b3c\u0b3e-\u0b5b\u0b5e\u0b62-\u0b84\u0b8b-\u0b8d\u0b91\u0b96-\u0b98\u0b9b\u0b9d\u0ba0-\u0ba2\u0ba5-\u0ba7\u0bab-\u0bad\u0bb6\u0bba-\u0c04\u0c0d\u0c11\u0c29\u0c34\u0c3a-\u0c5f\u0c62-\u0c84\u0c8d\u0c91\u0ca9\u0cb4\u0cba-\u0cdd\u0cdf\u0ce2-\u0d04\u0d0d\u0d11\u0d29\u0d3a-\u0d5f\u0d62-\u0e00\u0e2f\u0e31\u0e34-\u0e3f\u0e46-\u0e80\u0e83\u0e85-\u0e86\u0e89\u0e8b-\u0e8c\u0e8e-\u0e93\u0e98\u0ea0\u0ea4\u0ea6\u0ea8-\u0ea9\u0eac\u0eaf\u0eb1\u0eb4-\u0ebc\u0ebe-\u0ebf\u0ec5-\u0f3f\u0f48\u0f6a-\u109f\u10c6-\u10cf\u10f7-\u10ff\u1101\u1104\u1108\u110a\u110d\u1113-\u113b\u113d\u113f\u1141-\u114b\u114d\u114f\u1151-\u1153\u1156-\u1158\u115a-\u115e\u1162\u1164\u1166\u1168\u116a-\u116c\u116f-\u1171\u1174\u1176-\u119d\u119f-\u11a7\u11a9-\u11aa\u11ac-\u11ad\u11b0-\u11b6\u11b9\u11bb\u11c3-\u11ea\u11ec-\u11ef\u11f1-\u11f8\u11fa-\u1dff\u1e9c-\u1e9f\u1efa-\u1eff\u1f16-\u1f17\u1f1e-\u1f1f\u1f46-\u1f47\u1f4e-\u1f4f\u1f58\u1f5a\u1f5c\u1f5e\u1f7e-\u1f7f\u1fb5\u1fbd\u1fbf-\u1fc1\u1fc5\u1fcd-\u1fcf\u1fd4-\u1fd5\u1fdc-\u1fdf\u1fed-\u1ff1\u1ff5\u1ffd-\u2125\u2127-\u2129\u212c-\u212d\u212f-\u217f\u2183-\u3006\u3008-\u3020\u302a-\u3040\u3095-\u30a0\u30fb-\u3104\u312d-\u4dff\u9fa6-\uabff\ud7a4-\uffff]') # noqa - -# Simpler things -nonPubidCharRegexp = re.compile("[^\x20\x0D\x0Aa-zA-Z0-9\\-'()+,./:=?;!*#@$_%]") - - -class InfosetFilter(object): - replacementRegexp = re.compile(r"U[\dA-F]{5,5}") - - def __init__(self, - dropXmlnsLocalName=False, - dropXmlnsAttrNs=False, - preventDoubleDashComments=False, - preventDashAtCommentEnd=False, - replaceFormFeedCharacters=True, - preventSingleQuotePubid=False): - - self.dropXmlnsLocalName = dropXmlnsLocalName - self.dropXmlnsAttrNs = dropXmlnsAttrNs - - self.preventDoubleDashComments = preventDoubleDashComments - self.preventDashAtCommentEnd = preventDashAtCommentEnd - - self.replaceFormFeedCharacters = replaceFormFeedCharacters - - self.preventSingleQuotePubid = preventSingleQuotePubid - - self.replaceCache = {} - - def coerceAttribute(self, name, namespace=None): - if self.dropXmlnsLocalName and name.startswith("xmlns:"): - warnings.warn("Attributes cannot begin with xmlns", DataLossWarning) - return None - elif (self.dropXmlnsAttrNs and - namespace == "http://www.w3.org/2000/xmlns/"): - warnings.warn("Attributes cannot be in the xml namespace", DataLossWarning) - return None - else: - return self.toXmlName(name) - - def coerceElement(self, name): - return self.toXmlName(name) - - def coerceComment(self, data): - if self.preventDoubleDashComments: - while "--" in data: - warnings.warn("Comments cannot contain adjacent dashes", DataLossWarning) - data = data.replace("--", "- -") - if data.endswith("-"): - warnings.warn("Comments cannot end in a dash", DataLossWarning) - data += " " - return data - - def coerceCharacters(self, data): - if self.replaceFormFeedCharacters: - for _ in range(data.count("\x0C")): - warnings.warn("Text cannot contain U+000C", DataLossWarning) - data = data.replace("\x0C", " ") - # Other non-xml characters - return data - - def coercePubid(self, data): - dataOutput = data - for char in nonPubidCharRegexp.findall(data): - warnings.warn("Coercing non-XML pubid", DataLossWarning) - replacement = self.getReplacementCharacter(char) - dataOutput = dataOutput.replace(char, replacement) - if self.preventSingleQuotePubid and dataOutput.find("'") >= 0: - warnings.warn("Pubid cannot contain single quote", DataLossWarning) - dataOutput = dataOutput.replace("'", self.getReplacementCharacter("'")) - return dataOutput - - def toXmlName(self, name): - nameFirst = name[0] - nameRest = name[1:] - m = nonXmlNameFirstBMPRegexp.match(nameFirst) - if m: - warnings.warn("Coercing non-XML name", DataLossWarning) - nameFirstOutput = self.getReplacementCharacter(nameFirst) - else: - nameFirstOutput = nameFirst - - nameRestOutput = nameRest - replaceChars = set(nonXmlNameBMPRegexp.findall(nameRest)) - for char in replaceChars: - warnings.warn("Coercing non-XML name", DataLossWarning) - replacement = self.getReplacementCharacter(char) - nameRestOutput = nameRestOutput.replace(char, replacement) - return nameFirstOutput + nameRestOutput - - def getReplacementCharacter(self, char): - if char in self.replaceCache: - replacement = self.replaceCache[char] - else: - replacement = self.escapeChar(char) - return replacement - - def fromXmlName(self, name): - for item in set(self.replacementRegexp.findall(name)): - name = name.replace(item, self.unescapeChar(item)) - return name - - def escapeChar(self, char): - replacement = "U%05X" % ord(char) - self.replaceCache[char] = replacement - return replacement - - def unescapeChar(self, charcode): - return chr(int(charcode[1:], 16)) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py deleted file mode 100644 index a65e55f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_inputstream.py +++ /dev/null @@ -1,923 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from pip._vendor.six import text_type, binary_type -from pip._vendor.six.moves import http_client, urllib - -import codecs -import re - -from pip._vendor import webencodings - -from .constants import EOF, spaceCharacters, asciiLetters, asciiUppercase -from .constants import _ReparseException -from . import _utils - -from io import StringIO - -try: - from io import BytesIO -except ImportError: - BytesIO = StringIO - -# Non-unicode versions of constants for use in the pre-parser -spaceCharactersBytes = frozenset([item.encode("ascii") for item in spaceCharacters]) -asciiLettersBytes = frozenset([item.encode("ascii") for item in asciiLetters]) -asciiUppercaseBytes = frozenset([item.encode("ascii") for item in asciiUppercase]) -spacesAngleBrackets = spaceCharactersBytes | frozenset([b">", b"<"]) - - -invalid_unicode_no_surrogate = "[\u0001-\u0008\u000B\u000E-\u001F\u007F-\u009F\uFDD0-\uFDEF\uFFFE\uFFFF\U0001FFFE\U0001FFFF\U0002FFFE\U0002FFFF\U0003FFFE\U0003FFFF\U0004FFFE\U0004FFFF\U0005FFFE\U0005FFFF\U0006FFFE\U0006FFFF\U0007FFFE\U0007FFFF\U0008FFFE\U0008FFFF\U0009FFFE\U0009FFFF\U000AFFFE\U000AFFFF\U000BFFFE\U000BFFFF\U000CFFFE\U000CFFFF\U000DFFFE\U000DFFFF\U000EFFFE\U000EFFFF\U000FFFFE\U000FFFFF\U0010FFFE\U0010FFFF]" # noqa - -if _utils.supports_lone_surrogates: - # Use one extra step of indirection and create surrogates with - # eval. Not using this indirection would introduce an illegal - # unicode literal on platforms not supporting such lone - # surrogates. - assert invalid_unicode_no_surrogate[-1] == "]" and invalid_unicode_no_surrogate.count("]") == 1 - invalid_unicode_re = re.compile(invalid_unicode_no_surrogate[:-1] + - eval('"\\uD800-\\uDFFF"') + # pylint:disable=eval-used - "]") -else: - invalid_unicode_re = re.compile(invalid_unicode_no_surrogate) - -non_bmp_invalid_codepoints = set([0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, - 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, - 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, - 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, - 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, - 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, - 0x10FFFE, 0x10FFFF]) - -ascii_punctuation_re = re.compile("[\u0009-\u000D\u0020-\u002F\u003A-\u0040\u005C\u005B-\u0060\u007B-\u007E]") - -# Cache for charsUntil() -charsUntilRegEx = {} - - -class BufferedStream(object): - """Buffering for streams that do not have buffering of their own - - The buffer is implemented as a list of chunks on the assumption that - joining many strings will be slow since it is O(n**2) - """ - - def __init__(self, stream): - self.stream = stream - self.buffer = [] - self.position = [-1, 0] # chunk number, offset - - def tell(self): - pos = 0 - for chunk in self.buffer[:self.position[0]]: - pos += len(chunk) - pos += self.position[1] - return pos - - def seek(self, pos): - assert pos <= self._bufferedBytes() - offset = pos - i = 0 - while len(self.buffer[i]) < offset: - offset -= len(self.buffer[i]) - i += 1 - self.position = [i, offset] - - def read(self, bytes): - if not self.buffer: - return self._readStream(bytes) - elif (self.position[0] == len(self.buffer) and - self.position[1] == len(self.buffer[-1])): - return self._readStream(bytes) - else: - return self._readFromBuffer(bytes) - - def _bufferedBytes(self): - return sum([len(item) for item in self.buffer]) - - def _readStream(self, bytes): - data = self.stream.read(bytes) - self.buffer.append(data) - self.position[0] += 1 - self.position[1] = len(data) - return data - - def _readFromBuffer(self, bytes): - remainingBytes = bytes - rv = [] - bufferIndex = self.position[0] - bufferOffset = self.position[1] - while bufferIndex < len(self.buffer) and remainingBytes != 0: - assert remainingBytes > 0 - bufferedData = self.buffer[bufferIndex] - - if remainingBytes <= len(bufferedData) - bufferOffset: - bytesToRead = remainingBytes - self.position = [bufferIndex, bufferOffset + bytesToRead] - else: - bytesToRead = len(bufferedData) - bufferOffset - self.position = [bufferIndex, len(bufferedData)] - bufferIndex += 1 - rv.append(bufferedData[bufferOffset:bufferOffset + bytesToRead]) - remainingBytes -= bytesToRead - - bufferOffset = 0 - - if remainingBytes: - rv.append(self._readStream(remainingBytes)) - - return b"".join(rv) - - -def HTMLInputStream(source, **kwargs): - # Work around Python bug #20007: read(0) closes the connection. - # http://bugs.python.org/issue20007 - if (isinstance(source, http_client.HTTPResponse) or - # Also check for addinfourl wrapping HTTPResponse - (isinstance(source, urllib.response.addbase) and - isinstance(source.fp, http_client.HTTPResponse))): - isUnicode = False - elif hasattr(source, "read"): - isUnicode = isinstance(source.read(0), text_type) - else: - isUnicode = isinstance(source, text_type) - - if isUnicode: - encodings = [x for x in kwargs if x.endswith("_encoding")] - if encodings: - raise TypeError("Cannot set an encoding with a unicode input, set %r" % encodings) - - return HTMLUnicodeInputStream(source, **kwargs) - else: - return HTMLBinaryInputStream(source, **kwargs) - - -class HTMLUnicodeInputStream(object): - """Provides a unicode stream of characters to the HTMLTokenizer. - - This class takes care of character encoding and removing or replacing - incorrect byte-sequences and also provides column and line tracking. - - """ - - _defaultChunkSize = 10240 - - def __init__(self, source): - """Initialises the HTMLInputStream. - - HTMLInputStream(source, [encoding]) -> Normalized stream from source - for use by html5lib. - - source can be either a file-object, local filename or a string. - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - """ - - if not _utils.supports_lone_surrogates: - # Such platforms will have already checked for such - # surrogate errors, so no need to do this checking. - self.reportCharacterErrors = None - elif len("\U0010FFFF") == 1: - self.reportCharacterErrors = self.characterErrorsUCS4 - else: - self.reportCharacterErrors = self.characterErrorsUCS2 - - # List of where new lines occur - self.newLines = [0] - - self.charEncoding = (lookupEncoding("utf-8"), "certain") - self.dataStream = self.openStream(source) - - self.reset() - - def reset(self): - self.chunk = "" - self.chunkSize = 0 - self.chunkOffset = 0 - self.errors = [] - - # number of (complete) lines in previous chunks - self.prevNumLines = 0 - # number of columns in the last line of the previous chunk - self.prevNumCols = 0 - - # Deal with CR LF and surrogates split over chunk boundaries - self._bufferedCharacter = None - - def openStream(self, source): - """Produces a file object from source. - - source can be either a file object, local filename or a string. - - """ - # Already a file object - if hasattr(source, 'read'): - stream = source - else: - stream = StringIO(source) - - return stream - - def _position(self, offset): - chunk = self.chunk - nLines = chunk.count('\n', 0, offset) - positionLine = self.prevNumLines + nLines - lastLinePos = chunk.rfind('\n', 0, offset) - if lastLinePos == -1: - positionColumn = self.prevNumCols + offset - else: - positionColumn = offset - (lastLinePos + 1) - return (positionLine, positionColumn) - - def position(self): - """Returns (line, col) of the current position in the stream.""" - line, col = self._position(self.chunkOffset) - return (line + 1, col) - - def char(self): - """ Read one character from the stream or queue if available. Return - EOF when EOF is reached. - """ - # Read a new chunk from the input stream if necessary - if self.chunkOffset >= self.chunkSize: - if not self.readChunk(): - return EOF - - chunkOffset = self.chunkOffset - char = self.chunk[chunkOffset] - self.chunkOffset = chunkOffset + 1 - - return char - - def readChunk(self, chunkSize=None): - if chunkSize is None: - chunkSize = self._defaultChunkSize - - self.prevNumLines, self.prevNumCols = self._position(self.chunkSize) - - self.chunk = "" - self.chunkSize = 0 - self.chunkOffset = 0 - - data = self.dataStream.read(chunkSize) - - # Deal with CR LF and surrogates broken across chunks - if self._bufferedCharacter: - data = self._bufferedCharacter + data - self._bufferedCharacter = None - elif not data: - # We have no more data, bye-bye stream - return False - - if len(data) > 1: - lastv = ord(data[-1]) - if lastv == 0x0D or 0xD800 <= lastv <= 0xDBFF: - self._bufferedCharacter = data[-1] - data = data[:-1] - - if self.reportCharacterErrors: - self.reportCharacterErrors(data) - - # Replace invalid characters - data = data.replace("\r\n", "\n") - data = data.replace("\r", "\n") - - self.chunk = data - self.chunkSize = len(data) - - return True - - def characterErrorsUCS4(self, data): - for _ in range(len(invalid_unicode_re.findall(data))): - self.errors.append("invalid-codepoint") - - def characterErrorsUCS2(self, data): - # Someone picked the wrong compile option - # You lose - skip = False - for match in invalid_unicode_re.finditer(data): - if skip: - continue - codepoint = ord(match.group()) - pos = match.start() - # Pretty sure there should be endianness issues here - if _utils.isSurrogatePair(data[pos:pos + 2]): - # We have a surrogate pair! - char_val = _utils.surrogatePairToCodepoint(data[pos:pos + 2]) - if char_val in non_bmp_invalid_codepoints: - self.errors.append("invalid-codepoint") - skip = True - elif (codepoint >= 0xD800 and codepoint <= 0xDFFF and - pos == len(data) - 1): - self.errors.append("invalid-codepoint") - else: - skip = False - self.errors.append("invalid-codepoint") - - def charsUntil(self, characters, opposite=False): - """ Returns a string of characters from the stream up to but not - including any character in 'characters' or EOF. 'characters' must be - a container that supports the 'in' method and iteration over its - characters. - """ - - # Use a cache of regexps to find the required characters - try: - chars = charsUntilRegEx[(characters, opposite)] - except KeyError: - if __debug__: - for c in characters: - assert(ord(c) < 128) - regex = "".join(["\\x%02x" % ord(c) for c in characters]) - if not opposite: - regex = "^%s" % regex - chars = charsUntilRegEx[(characters, opposite)] = re.compile("[%s]+" % regex) - - rv = [] - - while True: - # Find the longest matching prefix - m = chars.match(self.chunk, self.chunkOffset) - if m is None: - # If nothing matched, and it wasn't because we ran out of chunk, - # then stop - if self.chunkOffset != self.chunkSize: - break - else: - end = m.end() - # If not the whole chunk matched, return everything - # up to the part that didn't match - if end != self.chunkSize: - rv.append(self.chunk[self.chunkOffset:end]) - self.chunkOffset = end - break - # If the whole remainder of the chunk matched, - # use it all and read the next chunk - rv.append(self.chunk[self.chunkOffset:]) - if not self.readChunk(): - # Reached EOF - break - - r = "".join(rv) - return r - - def unget(self, char): - # Only one character is allowed to be ungotten at once - it must - # be consumed again before any further call to unget - if char is not None: - if self.chunkOffset == 0: - # unget is called quite rarely, so it's a good idea to do - # more work here if it saves a bit of work in the frequently - # called char and charsUntil. - # So, just prepend the ungotten character onto the current - # chunk: - self.chunk = char + self.chunk - self.chunkSize += 1 - else: - self.chunkOffset -= 1 - assert self.chunk[self.chunkOffset] == char - - -class HTMLBinaryInputStream(HTMLUnicodeInputStream): - """Provides a unicode stream of characters to the HTMLTokenizer. - - This class takes care of character encoding and removing or replacing - incorrect byte-sequences and also provides column and line tracking. - - """ - - def __init__(self, source, override_encoding=None, transport_encoding=None, - same_origin_parent_encoding=None, likely_encoding=None, - default_encoding="windows-1252", useChardet=True): - """Initialises the HTMLInputStream. - - HTMLInputStream(source, [encoding]) -> Normalized stream from source - for use by html5lib. - - source can be either a file-object, local filename or a string. - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - """ - # Raw Stream - for unicode objects this will encode to utf-8 and set - # self.charEncoding as appropriate - self.rawStream = self.openStream(source) - - HTMLUnicodeInputStream.__init__(self, self.rawStream) - - # Encoding Information - # Number of bytes to use when looking for a meta element with - # encoding information - self.numBytesMeta = 1024 - # Number of bytes to use when using detecting encoding using chardet - self.numBytesChardet = 100 - # Things from args - self.override_encoding = override_encoding - self.transport_encoding = transport_encoding - self.same_origin_parent_encoding = same_origin_parent_encoding - self.likely_encoding = likely_encoding - self.default_encoding = default_encoding - - # Determine encoding - self.charEncoding = self.determineEncoding(useChardet) - assert self.charEncoding[0] is not None - - # Call superclass - self.reset() - - def reset(self): - self.dataStream = self.charEncoding[0].codec_info.streamreader(self.rawStream, 'replace') - HTMLUnicodeInputStream.reset(self) - - def openStream(self, source): - """Produces a file object from source. - - source can be either a file object, local filename or a string. - - """ - # Already a file object - if hasattr(source, 'read'): - stream = source - else: - stream = BytesIO(source) - - try: - stream.seek(stream.tell()) - except: # pylint:disable=bare-except - stream = BufferedStream(stream) - - return stream - - def determineEncoding(self, chardet=True): - # BOMs take precedence over everything - # This will also read past the BOM if present - charEncoding = self.detectBOM(), "certain" - if charEncoding[0] is not None: - return charEncoding - - # If we've been overriden, we've been overriden - charEncoding = lookupEncoding(self.override_encoding), "certain" - if charEncoding[0] is not None: - return charEncoding - - # Now check the transport layer - charEncoding = lookupEncoding(self.transport_encoding), "certain" - if charEncoding[0] is not None: - return charEncoding - - # Look for meta elements with encoding information - charEncoding = self.detectEncodingMeta(), "tentative" - if charEncoding[0] is not None: - return charEncoding - - # Parent document encoding - charEncoding = lookupEncoding(self.same_origin_parent_encoding), "tentative" - if charEncoding[0] is not None and not charEncoding[0].name.startswith("utf-16"): - return charEncoding - - # "likely" encoding - charEncoding = lookupEncoding(self.likely_encoding), "tentative" - if charEncoding[0] is not None: - return charEncoding - - # Guess with chardet, if available - if chardet: - try: - from pip._vendor.chardet.universaldetector import UniversalDetector - except ImportError: - pass - else: - buffers = [] - detector = UniversalDetector() - while not detector.done: - buffer = self.rawStream.read(self.numBytesChardet) - assert isinstance(buffer, bytes) - if not buffer: - break - buffers.append(buffer) - detector.feed(buffer) - detector.close() - encoding = lookupEncoding(detector.result['encoding']) - self.rawStream.seek(0) - if encoding is not None: - return encoding, "tentative" - - # Try the default encoding - charEncoding = lookupEncoding(self.default_encoding), "tentative" - if charEncoding[0] is not None: - return charEncoding - - # Fallback to html5lib's default if even that hasn't worked - return lookupEncoding("windows-1252"), "tentative" - - def changeEncoding(self, newEncoding): - assert self.charEncoding[1] != "certain" - newEncoding = lookupEncoding(newEncoding) - if newEncoding is None: - return - if newEncoding.name in ("utf-16be", "utf-16le"): - newEncoding = lookupEncoding("utf-8") - assert newEncoding is not None - elif newEncoding == self.charEncoding[0]: - self.charEncoding = (self.charEncoding[0], "certain") - else: - self.rawStream.seek(0) - self.charEncoding = (newEncoding, "certain") - self.reset() - raise _ReparseException("Encoding changed from %s to %s" % (self.charEncoding[0], newEncoding)) - - def detectBOM(self): - """Attempts to detect at BOM at the start of the stream. If - an encoding can be determined from the BOM return the name of the - encoding otherwise return None""" - bomDict = { - codecs.BOM_UTF8: 'utf-8', - codecs.BOM_UTF16_LE: 'utf-16le', codecs.BOM_UTF16_BE: 'utf-16be', - codecs.BOM_UTF32_LE: 'utf-32le', codecs.BOM_UTF32_BE: 'utf-32be' - } - - # Go to beginning of file and read in 4 bytes - string = self.rawStream.read(4) - assert isinstance(string, bytes) - - # Try detecting the BOM using bytes from the string - encoding = bomDict.get(string[:3]) # UTF-8 - seek = 3 - if not encoding: - # Need to detect UTF-32 before UTF-16 - encoding = bomDict.get(string) # UTF-32 - seek = 4 - if not encoding: - encoding = bomDict.get(string[:2]) # UTF-16 - seek = 2 - - # Set the read position past the BOM if one was found, otherwise - # set it to the start of the stream - if encoding: - self.rawStream.seek(seek) - return lookupEncoding(encoding) - else: - self.rawStream.seek(0) - return None - - def detectEncodingMeta(self): - """Report the encoding declared by the meta element - """ - buffer = self.rawStream.read(self.numBytesMeta) - assert isinstance(buffer, bytes) - parser = EncodingParser(buffer) - self.rawStream.seek(0) - encoding = parser.getEncoding() - - if encoding is not None and encoding.name in ("utf-16be", "utf-16le"): - encoding = lookupEncoding("utf-8") - - return encoding - - -class EncodingBytes(bytes): - """String-like object with an associated position and various extra methods - If the position is ever greater than the string length then an exception is - raised""" - def __new__(self, value): - assert isinstance(value, bytes) - return bytes.__new__(self, value.lower()) - - def __init__(self, value): - # pylint:disable=unused-argument - self._position = -1 - - def __iter__(self): - return self - - def __next__(self): - p = self._position = self._position + 1 - if p >= len(self): - raise StopIteration - elif p < 0: - raise TypeError - return self[p:p + 1] - - def next(self): - # Py2 compat - return self.__next__() - - def previous(self): - p = self._position - if p >= len(self): - raise StopIteration - elif p < 0: - raise TypeError - self._position = p = p - 1 - return self[p:p + 1] - - def setPosition(self, position): - if self._position >= len(self): - raise StopIteration - self._position = position - - def getPosition(self): - if self._position >= len(self): - raise StopIteration - if self._position >= 0: - return self._position - else: - return None - - position = property(getPosition, setPosition) - - def getCurrentByte(self): - return self[self.position:self.position + 1] - - currentByte = property(getCurrentByte) - - def skip(self, chars=spaceCharactersBytes): - """Skip past a list of characters""" - p = self.position # use property for the error-checking - while p < len(self): - c = self[p:p + 1] - if c not in chars: - self._position = p - return c - p += 1 - self._position = p - return None - - def skipUntil(self, chars): - p = self.position - while p < len(self): - c = self[p:p + 1] - if c in chars: - self._position = p - return c - p += 1 - self._position = p - return None - - def matchBytes(self, bytes): - """Look for a sequence of bytes at the start of a string. If the bytes - are found return True and advance the position to the byte after the - match. Otherwise return False and leave the position alone""" - p = self.position - data = self[p:p + len(bytes)] - rv = data.startswith(bytes) - if rv: - self.position += len(bytes) - return rv - - def jumpTo(self, bytes): - """Look for the next sequence of bytes matching a given sequence. If - a match is found advance the position to the last byte of the match""" - newPosition = self[self.position:].find(bytes) - if newPosition > -1: - # XXX: This is ugly, but I can't see a nicer way to fix this. - if self._position == -1: - self._position = 0 - self._position += (newPosition + len(bytes) - 1) - return True - else: - raise StopIteration - - -class EncodingParser(object): - """Mini parser for detecting character encoding from meta elements""" - - def __init__(self, data): - """string - the data to work on for encoding detection""" - self.data = EncodingBytes(data) - self.encoding = None - - def getEncoding(self): - methodDispatch = ( - (b"<!--", self.handleComment), - (b"<meta", self.handleMeta), - (b"</", self.handlePossibleEndTag), - (b"<!", self.handleOther), - (b"<?", self.handleOther), - (b"<", self.handlePossibleStartTag)) - for _ in self.data: - keepParsing = True - for key, method in methodDispatch: - if self.data.matchBytes(key): - try: - keepParsing = method() - break - except StopIteration: - keepParsing = False - break - if not keepParsing: - break - - return self.encoding - - def handleComment(self): - """Skip over comments""" - return self.data.jumpTo(b"-->") - - def handleMeta(self): - if self.data.currentByte not in spaceCharactersBytes: - # if we have <meta not followed by a space so just keep going - return True - # We have a valid meta element we want to search for attributes - hasPragma = False - pendingEncoding = None - while True: - # Try to find the next attribute after the current position - attr = self.getAttribute() - if attr is None: - return True - else: - if attr[0] == b"http-equiv": - hasPragma = attr[1] == b"content-type" - if hasPragma and pendingEncoding is not None: - self.encoding = pendingEncoding - return False - elif attr[0] == b"charset": - tentativeEncoding = attr[1] - codec = lookupEncoding(tentativeEncoding) - if codec is not None: - self.encoding = codec - return False - elif attr[0] == b"content": - contentParser = ContentAttrParser(EncodingBytes(attr[1])) - tentativeEncoding = contentParser.parse() - if tentativeEncoding is not None: - codec = lookupEncoding(tentativeEncoding) - if codec is not None: - if hasPragma: - self.encoding = codec - return False - else: - pendingEncoding = codec - - def handlePossibleStartTag(self): - return self.handlePossibleTag(False) - - def handlePossibleEndTag(self): - next(self.data) - return self.handlePossibleTag(True) - - def handlePossibleTag(self, endTag): - data = self.data - if data.currentByte not in asciiLettersBytes: - # If the next byte is not an ascii letter either ignore this - # fragment (possible start tag case) or treat it according to - # handleOther - if endTag: - data.previous() - self.handleOther() - return True - - c = data.skipUntil(spacesAngleBrackets) - if c == b"<": - # return to the first step in the overall "two step" algorithm - # reprocessing the < byte - data.previous() - else: - # Read all attributes - attr = self.getAttribute() - while attr is not None: - attr = self.getAttribute() - return True - - def handleOther(self): - return self.data.jumpTo(b">") - - def getAttribute(self): - """Return a name,value pair for the next attribute in the stream, - if one is found, or None""" - data = self.data - # Step 1 (skip chars) - c = data.skip(spaceCharactersBytes | frozenset([b"/"])) - assert c is None or len(c) == 1 - # Step 2 - if c in (b">", None): - return None - # Step 3 - attrName = [] - attrValue = [] - # Step 4 attribute name - while True: - if c == b"=" and attrName: - break - elif c in spaceCharactersBytes: - # Step 6! - c = data.skip() - break - elif c in (b"/", b">"): - return b"".join(attrName), b"" - elif c in asciiUppercaseBytes: - attrName.append(c.lower()) - elif c is None: - return None - else: - attrName.append(c) - # Step 5 - c = next(data) - # Step 7 - if c != b"=": - data.previous() - return b"".join(attrName), b"" - # Step 8 - next(data) - # Step 9 - c = data.skip() - # Step 10 - if c in (b"'", b'"'): - # 10.1 - quoteChar = c - while True: - # 10.2 - c = next(data) - # 10.3 - if c == quoteChar: - next(data) - return b"".join(attrName), b"".join(attrValue) - # 10.4 - elif c in asciiUppercaseBytes: - attrValue.append(c.lower()) - # 10.5 - else: - attrValue.append(c) - elif c == b">": - return b"".join(attrName), b"" - elif c in asciiUppercaseBytes: - attrValue.append(c.lower()) - elif c is None: - return None - else: - attrValue.append(c) - # Step 11 - while True: - c = next(data) - if c in spacesAngleBrackets: - return b"".join(attrName), b"".join(attrValue) - elif c in asciiUppercaseBytes: - attrValue.append(c.lower()) - elif c is None: - return None - else: - attrValue.append(c) - - -class ContentAttrParser(object): - def __init__(self, data): - assert isinstance(data, bytes) - self.data = data - - def parse(self): - try: - # Check if the attr name is charset - # otherwise return - self.data.jumpTo(b"charset") - self.data.position += 1 - self.data.skip() - if not self.data.currentByte == b"=": - # If there is no = sign keep looking for attrs - return None - self.data.position += 1 - self.data.skip() - # Look for an encoding between matching quote marks - if self.data.currentByte in (b'"', b"'"): - quoteMark = self.data.currentByte - self.data.position += 1 - oldPosition = self.data.position - if self.data.jumpTo(quoteMark): - return self.data[oldPosition:self.data.position] - else: - return None - else: - # Unquoted value - oldPosition = self.data.position - try: - self.data.skipUntil(spaceCharactersBytes) - return self.data[oldPosition:self.data.position] - except StopIteration: - # Return the whole remaining value - return self.data[oldPosition:] - except StopIteration: - return None - - -def lookupEncoding(encoding): - """Return the python codec name corresponding to an encoding or None if the - string doesn't correspond to a valid encoding.""" - if isinstance(encoding, binary_type): - try: - encoding = encoding.decode("ascii") - except UnicodeDecodeError: - return None - - if encoding is not None: - try: - return webencodings.lookup(encoding) - except AttributeError: - return None - else: - return None diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py deleted file mode 100644 index 178f6e7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_tokenizer.py +++ /dev/null @@ -1,1721 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from pip._vendor.six import unichr as chr - -from collections import deque - -from .constants import spaceCharacters -from .constants import entities -from .constants import asciiLetters, asciiUpper2Lower -from .constants import digits, hexDigits, EOF -from .constants import tokenTypes, tagTokenTypes -from .constants import replacementCharacters - -from ._inputstream import HTMLInputStream - -from ._trie import Trie - -entitiesTrie = Trie(entities) - - -class HTMLTokenizer(object): - """ This class takes care of tokenizing HTML. - - * self.currentToken - Holds the token that is currently being processed. - - * self.state - Holds a reference to the method to be invoked... XXX - - * self.stream - Points to HTMLInputStream object. - """ - - def __init__(self, stream, parser=None, **kwargs): - - self.stream = HTMLInputStream(stream, **kwargs) - self.parser = parser - - # Setup the initial tokenizer state - self.escapeFlag = False - self.lastFourChars = [] - self.state = self.dataState - self.escape = False - - # The current token being created - self.currentToken = None - super(HTMLTokenizer, self).__init__() - - def __iter__(self): - """ This is where the magic happens. - - We do our usually processing through the states and when we have a token - to return we yield the token which pauses processing until the next token - is requested. - """ - self.tokenQueue = deque([]) - # Start processing. When EOF is reached self.state will return False - # instead of True and the loop will terminate. - while self.state(): - while self.stream.errors: - yield {"type": tokenTypes["ParseError"], "data": self.stream.errors.pop(0)} - while self.tokenQueue: - yield self.tokenQueue.popleft() - - def consumeNumberEntity(self, isHex): - """This function returns either U+FFFD or the character based on the - decimal or hexadecimal representation. It also discards ";" if present. - If not present self.tokenQueue.append({"type": tokenTypes["ParseError"]}) is invoked. - """ - - allowed = digits - radix = 10 - if isHex: - allowed = hexDigits - radix = 16 - - charStack = [] - - # Consume all the characters that are in range while making sure we - # don't hit an EOF. - c = self.stream.char() - while c in allowed and c is not EOF: - charStack.append(c) - c = self.stream.char() - - # Convert the set of characters consumed to an int. - charAsInt = int("".join(charStack), radix) - - # Certain characters get replaced with others - if charAsInt in replacementCharacters: - char = replacementCharacters[charAsInt] - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "illegal-codepoint-for-numeric-entity", - "datavars": {"charAsInt": charAsInt}}) - elif ((0xD800 <= charAsInt <= 0xDFFF) or - (charAsInt > 0x10FFFF)): - char = "\uFFFD" - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "illegal-codepoint-for-numeric-entity", - "datavars": {"charAsInt": charAsInt}}) - else: - # Should speed up this check somehow (e.g. move the set to a constant) - if ((0x0001 <= charAsInt <= 0x0008) or - (0x000E <= charAsInt <= 0x001F) or - (0x007F <= charAsInt <= 0x009F) or - (0xFDD0 <= charAsInt <= 0xFDEF) or - charAsInt in frozenset([0x000B, 0xFFFE, 0xFFFF, 0x1FFFE, - 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, - 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, - 0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, - 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, - 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, - 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, - 0xDFFFF, 0xEFFFE, 0xEFFFF, 0xFFFFE, - 0xFFFFF, 0x10FFFE, 0x10FFFF])): - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": - "illegal-codepoint-for-numeric-entity", - "datavars": {"charAsInt": charAsInt}}) - try: - # Try/except needed as UCS-2 Python builds' unichar only works - # within the BMP. - char = chr(charAsInt) - except ValueError: - v = charAsInt - 0x10000 - char = chr(0xD800 | (v >> 10)) + chr(0xDC00 | (v & 0x3FF)) - - # Discard the ; if present. Otherwise, put it back on the queue and - # invoke parseError on parser. - if c != ";": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "numeric-entity-without-semicolon"}) - self.stream.unget(c) - - return char - - def consumeEntity(self, allowedChar=None, fromAttribute=False): - # Initialise to the default output for when no entity is matched - output = "&" - - charStack = [self.stream.char()] - if (charStack[0] in spaceCharacters or charStack[0] in (EOF, "<", "&") or - (allowedChar is not None and allowedChar == charStack[0])): - self.stream.unget(charStack[0]) - - elif charStack[0] == "#": - # Read the next character to see if it's hex or decimal - hex = False - charStack.append(self.stream.char()) - if charStack[-1] in ("x", "X"): - hex = True - charStack.append(self.stream.char()) - - # charStack[-1] should be the first digit - if (hex and charStack[-1] in hexDigits) \ - or (not hex and charStack[-1] in digits): - # At least one digit found, so consume the whole number - self.stream.unget(charStack[-1]) - output = self.consumeNumberEntity(hex) - else: - # No digits found - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "expected-numeric-entity"}) - self.stream.unget(charStack.pop()) - output = "&" + "".join(charStack) - - else: - # At this point in the process might have named entity. Entities - # are stored in the global variable "entities". - # - # Consume characters and compare to these to a substring of the - # entity names in the list until the substring no longer matches. - while (charStack[-1] is not EOF): - if not entitiesTrie.has_keys_with_prefix("".join(charStack)): - break - charStack.append(self.stream.char()) - - # At this point we have a string that starts with some characters - # that may match an entity - # Try to find the longest entity the string will match to take care - # of ¬i for instance. - try: - entityName = entitiesTrie.longest_prefix("".join(charStack[:-1])) - entityLength = len(entityName) - except KeyError: - entityName = None - - if entityName is not None: - if entityName[-1] != ";": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "named-entity-without-semicolon"}) - if (entityName[-1] != ";" and fromAttribute and - (charStack[entityLength] in asciiLetters or - charStack[entityLength] in digits or - charStack[entityLength] == "=")): - self.stream.unget(charStack.pop()) - output = "&" + "".join(charStack) - else: - output = entities[entityName] - self.stream.unget(charStack.pop()) - output += "".join(charStack[entityLength:]) - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-named-entity"}) - self.stream.unget(charStack.pop()) - output = "&" + "".join(charStack) - - if fromAttribute: - self.currentToken["data"][-1][1] += output - else: - if output in spaceCharacters: - tokenType = "SpaceCharacters" - else: - tokenType = "Characters" - self.tokenQueue.append({"type": tokenTypes[tokenType], "data": output}) - - def processEntityInAttribute(self, allowedChar): - """This method replaces the need for "entityInAttributeValueState". - """ - self.consumeEntity(allowedChar=allowedChar, fromAttribute=True) - - def emitCurrentToken(self): - """This method is a generic handler for emitting the tags. It also sets - the state to "data" because that's what's needed after a token has been - emitted. - """ - token = self.currentToken - # Add token to the queue to be yielded - if (token["type"] in tagTokenTypes): - token["name"] = token["name"].translate(asciiUpper2Lower) - if token["type"] == tokenTypes["EndTag"]: - if token["data"]: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "attributes-in-end-tag"}) - if token["selfClosing"]: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "self-closing-flag-on-end-tag"}) - self.tokenQueue.append(token) - self.state = self.dataState - - # Below are the various tokenizer states worked out. - def dataState(self): - data = self.stream.char() - if data == "&": - self.state = self.entityDataState - elif data == "<": - self.state = self.tagOpenState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\u0000"}) - elif data is EOF: - # Tokenization ends. - return False - elif data in spaceCharacters: - # Directly after emitting a token you switch back to the "data - # state". At that point spaceCharacters are important so they are - # emitted separately. - self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": - data + self.stream.charsUntil(spaceCharacters, True)}) - # No need to update lastFourChars here, since the first space will - # have already been appended to lastFourChars and will have broken - # any <!-- or --> sequences - else: - chars = self.stream.charsUntil(("&", "<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def entityDataState(self): - self.consumeEntity() - self.state = self.dataState - return True - - def rcdataState(self): - data = self.stream.char() - if data == "&": - self.state = self.characterReferenceInRcdata - elif data == "<": - self.state = self.rcdataLessThanSignState - elif data == EOF: - # Tokenization ends. - return False - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data in spaceCharacters: - # Directly after emitting a token you switch back to the "data - # state". At that point spaceCharacters are important so they are - # emitted separately. - self.tokenQueue.append({"type": tokenTypes["SpaceCharacters"], "data": - data + self.stream.charsUntil(spaceCharacters, True)}) - # No need to update lastFourChars here, since the first space will - # have already been appended to lastFourChars and will have broken - # any <!-- or --> sequences - else: - chars = self.stream.charsUntil(("&", "<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def characterReferenceInRcdata(self): - self.consumeEntity() - self.state = self.rcdataState - return True - - def rawtextState(self): - data = self.stream.char() - if data == "<": - self.state = self.rawtextLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - # Tokenization ends. - return False - else: - chars = self.stream.charsUntil(("<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def scriptDataState(self): - data = self.stream.char() - if data == "<": - self.state = self.scriptDataLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - # Tokenization ends. - return False - else: - chars = self.stream.charsUntil(("<", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def plaintextState(self): - data = self.stream.char() - if data == EOF: - # Tokenization ends. - return False - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + self.stream.charsUntil("\u0000")}) - return True - - def tagOpenState(self): - data = self.stream.char() - if data == "!": - self.state = self.markupDeclarationOpenState - elif data == "/": - self.state = self.closeTagOpenState - elif data in asciiLetters: - self.currentToken = {"type": tokenTypes["StartTag"], - "name": data, "data": [], - "selfClosing": False, - "selfClosingAcknowledged": False} - self.state = self.tagNameState - elif data == ">": - # XXX In theory it could be something besides a tag name. But - # do we really care? - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-tag-name-but-got-right-bracket"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<>"}) - self.state = self.dataState - elif data == "?": - # XXX In theory it could be something besides a tag name. But - # do we really care? - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-tag-name-but-got-question-mark"}) - self.stream.unget(data) - self.state = self.bogusCommentState - else: - # XXX - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-tag-name"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.dataState - return True - - def closeTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.currentToken = {"type": tokenTypes["EndTag"], "name": data, - "data": [], "selfClosing": False} - self.state = self.tagNameState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-closing-tag-but-got-right-bracket"}) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-closing-tag-but-got-eof"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) - self.state = self.dataState - else: - # XXX data can be _'_... - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-closing-tag-but-got-char", - "datavars": {"data": data}}) - self.stream.unget(data) - self.state = self.bogusCommentState - return True - - def tagNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeAttributeNameState - elif data == ">": - self.emitCurrentToken() - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-tag-name"}) - self.state = self.dataState - elif data == "/": - self.state = self.selfClosingStartTagState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["name"] += "\uFFFD" - else: - self.currentToken["name"] += data - # (Don't use charsUntil here, because tag names are - # very short and it's faster to not do anything fancy) - return True - - def rcdataLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.temporaryBuffer = "" - self.state = self.rcdataEndTagOpenState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.rcdataState - return True - - def rcdataEndTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.temporaryBuffer += data - self.state = self.rcdataEndTagNameState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) - self.stream.unget(data) - self.state = self.rcdataState - return True - - def rcdataEndTagNameState(self): - appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() - data = self.stream.char() - if data in spaceCharacters and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState - elif data == "/" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState - elif data == ">" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "</" + self.temporaryBuffer}) - self.stream.unget(data) - self.state = self.rcdataState - return True - - def rawtextLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.temporaryBuffer = "" - self.state = self.rawtextEndTagOpenState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.rawtextState - return True - - def rawtextEndTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.temporaryBuffer += data - self.state = self.rawtextEndTagNameState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) - self.stream.unget(data) - self.state = self.rawtextState - return True - - def rawtextEndTagNameState(self): - appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() - data = self.stream.char() - if data in spaceCharacters and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState - elif data == "/" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState - elif data == ">" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "</" + self.temporaryBuffer}) - self.stream.unget(data) - self.state = self.rawtextState - return True - - def scriptDataLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.temporaryBuffer = "" - self.state = self.scriptDataEndTagOpenState - elif data == "!": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<!"}) - self.state = self.scriptDataEscapeStartState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.scriptDataState - return True - - def scriptDataEndTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.temporaryBuffer += data - self.state = self.scriptDataEndTagNameState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) - self.stream.unget(data) - self.state = self.scriptDataState - return True - - def scriptDataEndTagNameState(self): - appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() - data = self.stream.char() - if data in spaceCharacters and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState - elif data == "/" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState - elif data == ">" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "</" + self.temporaryBuffer}) - self.stream.unget(data) - self.state = self.scriptDataState - return True - - def scriptDataEscapeStartState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapeStartDashState - else: - self.stream.unget(data) - self.state = self.scriptDataState - return True - - def scriptDataEscapeStartDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapedDashDashState - else: - self.stream.unget(data) - self.state = self.scriptDataState - return True - - def scriptDataEscapedState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapedDashState - elif data == "<": - self.state = self.scriptDataEscapedLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - self.state = self.dataState - else: - chars = self.stream.charsUntil(("<", "-", "\u0000")) - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": - data + chars}) - return True - - def scriptDataEscapedDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataEscapedDashDashState - elif data == "<": - self.state = self.scriptDataEscapedLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataEscapedState - elif data == EOF: - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataEscapedState - return True - - def scriptDataEscapedDashDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - elif data == "<": - self.state = self.scriptDataEscapedLessThanSignState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) - self.state = self.scriptDataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataEscapedState - elif data == EOF: - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataEscapedState - return True - - def scriptDataEscapedLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.temporaryBuffer = "" - self.state = self.scriptDataEscapedEndTagOpenState - elif data in asciiLetters: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<" + data}) - self.temporaryBuffer = data - self.state = self.scriptDataDoubleEscapeStartState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.stream.unget(data) - self.state = self.scriptDataEscapedState - return True - - def scriptDataEscapedEndTagOpenState(self): - data = self.stream.char() - if data in asciiLetters: - self.temporaryBuffer = data - self.state = self.scriptDataEscapedEndTagNameState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "</"}) - self.stream.unget(data) - self.state = self.scriptDataEscapedState - return True - - def scriptDataEscapedEndTagNameState(self): - appropriate = self.currentToken and self.currentToken["name"].lower() == self.temporaryBuffer.lower() - data = self.stream.char() - if data in spaceCharacters and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.beforeAttributeNameState - elif data == "/" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.state = self.selfClosingStartTagState - elif data == ">" and appropriate: - self.currentToken = {"type": tokenTypes["EndTag"], - "name": self.temporaryBuffer, - "data": [], "selfClosing": False} - self.emitCurrentToken() - self.state = self.dataState - elif data in asciiLetters: - self.temporaryBuffer += data - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "</" + self.temporaryBuffer}) - self.stream.unget(data) - self.state = self.scriptDataEscapedState - return True - - def scriptDataDoubleEscapeStartState(self): - data = self.stream.char() - if data in (spaceCharacters | frozenset(("/", ">"))): - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - if self.temporaryBuffer.lower() == "script": - self.state = self.scriptDataDoubleEscapedState - else: - self.state = self.scriptDataEscapedState - elif data in asciiLetters: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.temporaryBuffer += data - else: - self.stream.unget(data) - self.state = self.scriptDataEscapedState - return True - - def scriptDataDoubleEscapedState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataDoubleEscapedDashState - elif data == "<": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-script-in-script"}) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - return True - - def scriptDataDoubleEscapedDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - self.state = self.scriptDataDoubleEscapedDashDashState - elif data == "<": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataDoubleEscapedState - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-script-in-script"}) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataDoubleEscapedState - return True - - def scriptDataDoubleEscapedDashDashState(self): - data = self.stream.char() - if data == "-": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "-"}) - elif data == "<": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "<"}) - self.state = self.scriptDataDoubleEscapedLessThanSignState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": ">"}) - self.state = self.scriptDataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": "\uFFFD"}) - self.state = self.scriptDataDoubleEscapedState - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-script-in-script"}) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.state = self.scriptDataDoubleEscapedState - return True - - def scriptDataDoubleEscapedLessThanSignState(self): - data = self.stream.char() - if data == "/": - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": "/"}) - self.temporaryBuffer = "" - self.state = self.scriptDataDoubleEscapeEndState - else: - self.stream.unget(data) - self.state = self.scriptDataDoubleEscapedState - return True - - def scriptDataDoubleEscapeEndState(self): - data = self.stream.char() - if data in (spaceCharacters | frozenset(("/", ">"))): - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - if self.temporaryBuffer.lower() == "script": - self.state = self.scriptDataEscapedState - else: - self.state = self.scriptDataDoubleEscapedState - elif data in asciiLetters: - self.tokenQueue.append({"type": tokenTypes["Characters"], "data": data}) - self.temporaryBuffer += data - else: - self.stream.unget(data) - self.state = self.scriptDataDoubleEscapedState - return True - - def beforeAttributeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.stream.charsUntil(spaceCharacters, True) - elif data in asciiLetters: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data == ">": - self.emitCurrentToken() - elif data == "/": - self.state = self.selfClosingStartTagState - elif data in ("'", '"', "=", "<"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "invalid-character-in-attribute-name"}) - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"].append(["\uFFFD", ""]) - self.state = self.attributeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-attribute-name-but-got-eof"}) - self.state = self.dataState - else: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - return True - - def attributeNameState(self): - data = self.stream.char() - leavingThisState = True - emitToken = False - if data == "=": - self.state = self.beforeAttributeValueState - elif data in asciiLetters: - self.currentToken["data"][-1][0] += data +\ - self.stream.charsUntil(asciiLetters, True) - leavingThisState = False - elif data == ">": - # XXX If we emit here the attributes are converted to a dict - # without being checked and when the code below runs we error - # because data is a dict not a list - emitToken = True - elif data in spaceCharacters: - self.state = self.afterAttributeNameState - elif data == "/": - self.state = self.selfClosingStartTagState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][0] += "\uFFFD" - leavingThisState = False - elif data in ("'", '"', "<"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": - "invalid-character-in-attribute-name"}) - self.currentToken["data"][-1][0] += data - leavingThisState = False - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "eof-in-attribute-name"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][0] += data - leavingThisState = False - - if leavingThisState: - # Attributes are not dropped at this stage. That happens when the - # start tag token is emitted so values can still be safely appended - # to attributes, but we do want to report the parse error in time. - self.currentToken["data"][-1][0] = ( - self.currentToken["data"][-1][0].translate(asciiUpper2Lower)) - for name, _ in self.currentToken["data"][:-1]: - if self.currentToken["data"][-1][0] == name: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "duplicate-attribute"}) - break - # XXX Fix for above XXX - if emitToken: - self.emitCurrentToken() - return True - - def afterAttributeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.stream.charsUntil(spaceCharacters, True) - elif data == "=": - self.state = self.beforeAttributeValueState - elif data == ">": - self.emitCurrentToken() - elif data in asciiLetters: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data == "/": - self.state = self.selfClosingStartTagState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"].append(["\uFFFD", ""]) - self.state = self.attributeNameState - elif data in ("'", '"', "<"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "invalid-character-after-attribute-name"}) - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-end-of-tag-but-got-eof"}) - self.state = self.dataState - else: - self.currentToken["data"].append([data, ""]) - self.state = self.attributeNameState - return True - - def beforeAttributeValueState(self): - data = self.stream.char() - if data in spaceCharacters: - self.stream.charsUntil(spaceCharacters, True) - elif data == "\"": - self.state = self.attributeValueDoubleQuotedState - elif data == "&": - self.state = self.attributeValueUnQuotedState - self.stream.unget(data) - elif data == "'": - self.state = self.attributeValueSingleQuotedState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-attribute-value-but-got-right-bracket"}) - self.emitCurrentToken() - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - self.state = self.attributeValueUnQuotedState - elif data in ("=", "<", "`"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "equals-in-unquoted-attribute-value"}) - self.currentToken["data"][-1][1] += data - self.state = self.attributeValueUnQuotedState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-attribute-value-but-got-eof"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data - self.state = self.attributeValueUnQuotedState - return True - - def attributeValueDoubleQuotedState(self): - data = self.stream.char() - if data == "\"": - self.state = self.afterAttributeValueState - elif data == "&": - self.processEntityInAttribute('"') - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-attribute-value-double-quote"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data +\ - self.stream.charsUntil(("\"", "&", "\u0000")) - return True - - def attributeValueSingleQuotedState(self): - data = self.stream.char() - if data == "'": - self.state = self.afterAttributeValueState - elif data == "&": - self.processEntityInAttribute("'") - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-attribute-value-single-quote"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data +\ - self.stream.charsUntil(("'", "&", "\u0000")) - return True - - def attributeValueUnQuotedState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeAttributeNameState - elif data == "&": - self.processEntityInAttribute(">") - elif data == ">": - self.emitCurrentToken() - elif data in ('"', "'", "=", "<", "`"): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-character-in-unquoted-attribute-value"}) - self.currentToken["data"][-1][1] += data - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"][-1][1] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-attribute-value-no-quotes"}) - self.state = self.dataState - else: - self.currentToken["data"][-1][1] += data + self.stream.charsUntil( - frozenset(("&", ">", '"', "'", "=", "<", "`", "\u0000")) | spaceCharacters) - return True - - def afterAttributeValueState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeAttributeNameState - elif data == ">": - self.emitCurrentToken() - elif data == "/": - self.state = self.selfClosingStartTagState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-EOF-after-attribute-value"}) - self.stream.unget(data) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-character-after-attribute-value"}) - self.stream.unget(data) - self.state = self.beforeAttributeNameState - return True - - def selfClosingStartTagState(self): - data = self.stream.char() - if data == ">": - self.currentToken["selfClosing"] = True - self.emitCurrentToken() - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": - "unexpected-EOF-after-solidus-in-tag"}) - self.stream.unget(data) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-character-after-solidus-in-tag"}) - self.stream.unget(data) - self.state = self.beforeAttributeNameState - return True - - def bogusCommentState(self): - # Make a new comment token and give it as value all the characters - # until the first > or EOF (charsUntil checks for EOF automatically) - # and emit it. - data = self.stream.charsUntil(">") - data = data.replace("\u0000", "\uFFFD") - self.tokenQueue.append( - {"type": tokenTypes["Comment"], "data": data}) - - # Eat the character directly after the bogus comment which is either a - # ">" or an EOF. - self.stream.char() - self.state = self.dataState - return True - - def markupDeclarationOpenState(self): - charStack = [self.stream.char()] - if charStack[-1] == "-": - charStack.append(self.stream.char()) - if charStack[-1] == "-": - self.currentToken = {"type": tokenTypes["Comment"], "data": ""} - self.state = self.commentStartState - return True - elif charStack[-1] in ('d', 'D'): - matched = True - for expected in (('o', 'O'), ('c', 'C'), ('t', 'T'), - ('y', 'Y'), ('p', 'P'), ('e', 'E')): - charStack.append(self.stream.char()) - if charStack[-1] not in expected: - matched = False - break - if matched: - self.currentToken = {"type": tokenTypes["Doctype"], - "name": "", - "publicId": None, "systemId": None, - "correct": True} - self.state = self.doctypeState - return True - elif (charStack[-1] == "[" and - self.parser is not None and - self.parser.tree.openElements and - self.parser.tree.openElements[-1].namespace != self.parser.tree.defaultNamespace): - matched = True - for expected in ["C", "D", "A", "T", "A", "["]: - charStack.append(self.stream.char()) - if charStack[-1] != expected: - matched = False - break - if matched: - self.state = self.cdataSectionState - return True - - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-dashes-or-doctype"}) - - while charStack: - self.stream.unget(charStack.pop()) - self.state = self.bogusCommentState - return True - - def commentStartState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentStartDashState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "incorrect-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += data - self.state = self.commentState - return True - - def commentStartDashState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentEndState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "-\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "incorrect-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += "-" + data - self.state = self.commentState - return True - - def commentState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentEndDashState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "\uFFFD" - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "eof-in-comment"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += data + \ - self.stream.charsUntil(("-", "\u0000")) - return True - - def commentEndDashState(self): - data = self.stream.char() - if data == "-": - self.state = self.commentEndState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "-\uFFFD" - self.state = self.commentState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment-end-dash"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += "-" + data - self.state = self.commentState - return True - - def commentEndState(self): - data = self.stream.char() - if data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "--\uFFFD" - self.state = self.commentState - elif data == "!": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-bang-after-double-dash-in-comment"}) - self.state = self.commentEndBangState - elif data == "-": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-dash-after-double-dash-in-comment"}) - self.currentToken["data"] += data - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment-double-dash"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - # XXX - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-comment"}) - self.currentToken["data"] += "--" + data - self.state = self.commentState - return True - - def commentEndBangState(self): - data = self.stream.char() - if data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "-": - self.currentToken["data"] += "--!" - self.state = self.commentEndDashState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["data"] += "--!\uFFFD" - self.state = self.commentState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-comment-end-bang-state"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["data"] += "--!" + data - self.state = self.commentState - return True - - def doctypeState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeDoctypeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-doctype-name-but-got-eof"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "need-space-after-doctype"}) - self.stream.unget(data) - self.state = self.beforeDoctypeNameState - return True - - def beforeDoctypeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-doctype-name-but-got-right-bracket"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["name"] = "\uFFFD" - self.state = self.doctypeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-doctype-name-but-got-eof"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["name"] = data - self.state = self.doctypeNameState - return True - - def doctypeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.state = self.afterDoctypeNameState - elif data == ">": - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["name"] += "\uFFFD" - self.state = self.doctypeNameState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype-name"}) - self.currentToken["correct"] = False - self.currentToken["name"] = self.currentToken["name"].translate(asciiUpper2Lower) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["name"] += data - return True - - def afterDoctypeNameState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.currentToken["correct"] = False - self.stream.unget(data) - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - if data in ("p", "P"): - matched = True - for expected in (("u", "U"), ("b", "B"), ("l", "L"), - ("i", "I"), ("c", "C")): - data = self.stream.char() - if data not in expected: - matched = False - break - if matched: - self.state = self.afterDoctypePublicKeywordState - return True - elif data in ("s", "S"): - matched = True - for expected in (("y", "Y"), ("s", "S"), ("t", "T"), - ("e", "E"), ("m", "M")): - data = self.stream.char() - if data not in expected: - matched = False - break - if matched: - self.state = self.afterDoctypeSystemKeywordState - return True - - # All the characters read before the current 'data' will be - # [a-zA-Z], so they're garbage in the bogus doctype and can be - # discarded; only the latest character might be '>' or EOF - # and needs to be ungetted - self.stream.unget(data) - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "expected-space-or-right-bracket-in-doctype", "datavars": - {"data": data}}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - - return True - - def afterDoctypePublicKeywordState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeDoctypePublicIdentifierState - elif data in ("'", '"'): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.stream.unget(data) - self.state = self.beforeDoctypePublicIdentifierState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.stream.unget(data) - self.state = self.beforeDoctypePublicIdentifierState - return True - - def beforeDoctypePublicIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == "\"": - self.currentToken["publicId"] = "" - self.state = self.doctypePublicIdentifierDoubleQuotedState - elif data == "'": - self.currentToken["publicId"] = "" - self.state = self.doctypePublicIdentifierSingleQuotedState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def doctypePublicIdentifierDoubleQuotedState(self): - data = self.stream.char() - if data == "\"": - self.state = self.afterDoctypePublicIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["publicId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["publicId"] += data - return True - - def doctypePublicIdentifierSingleQuotedState(self): - data = self.stream.char() - if data == "'": - self.state = self.afterDoctypePublicIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["publicId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["publicId"] += data - return True - - def afterDoctypePublicIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.betweenDoctypePublicAndSystemIdentifiersState - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == '"': - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState - elif data == "'": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def betweenDoctypePublicAndSystemIdentifiersState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data == '"': - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState - elif data == "'": - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState - elif data == EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def afterDoctypeSystemKeywordState(self): - data = self.stream.char() - if data in spaceCharacters: - self.state = self.beforeDoctypeSystemIdentifierState - elif data in ("'", '"'): - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.stream.unget(data) - self.state = self.beforeDoctypeSystemIdentifierState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.stream.unget(data) - self.state = self.beforeDoctypeSystemIdentifierState - return True - - def beforeDoctypeSystemIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == "\"": - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierDoubleQuotedState - elif data == "'": - self.currentToken["systemId"] = "" - self.state = self.doctypeSystemIdentifierSingleQuotedState - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.currentToken["correct"] = False - self.state = self.bogusDoctypeState - return True - - def doctypeSystemIdentifierDoubleQuotedState(self): - data = self.stream.char() - if data == "\"": - self.state = self.afterDoctypeSystemIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["systemId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["systemId"] += data - return True - - def doctypeSystemIdentifierSingleQuotedState(self): - data = self.stream.char() - if data == "'": - self.state = self.afterDoctypeSystemIdentifierState - elif data == "\u0000": - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - self.currentToken["systemId"] += "\uFFFD" - elif data == ">": - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-end-of-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.currentToken["systemId"] += data - return True - - def afterDoctypeSystemIdentifierState(self): - data = self.stream.char() - if data in spaceCharacters: - pass - elif data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "eof-in-doctype"}) - self.currentToken["correct"] = False - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - self.tokenQueue.append({"type": tokenTypes["ParseError"], "data": - "unexpected-char-in-doctype"}) - self.state = self.bogusDoctypeState - return True - - def bogusDoctypeState(self): - data = self.stream.char() - if data == ">": - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - elif data is EOF: - # XXX EMIT - self.stream.unget(data) - self.tokenQueue.append(self.currentToken) - self.state = self.dataState - else: - pass - return True - - def cdataSectionState(self): - data = [] - while True: - data.append(self.stream.charsUntil("]")) - data.append(self.stream.charsUntil(">")) - char = self.stream.char() - if char == EOF: - break - else: - assert char == ">" - if data[-1][-2:] == "]]": - data[-1] = data[-1][:-2] - break - else: - data.append(char) - - data = "".join(data) # pylint:disable=redefined-variable-type - # Deal with null here rather than in the parser - nullCount = data.count("\u0000") - if nullCount > 0: - for _ in range(nullCount): - self.tokenQueue.append({"type": tokenTypes["ParseError"], - "data": "invalid-codepoint"}) - data = data.replace("\u0000", "\uFFFD") - if data: - self.tokenQueue.append({"type": tokenTypes["Characters"], - "data": data}) - self.state = self.dataState - return True diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py deleted file mode 100644 index a5ba4bf..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from .py import Trie as PyTrie - -Trie = PyTrie - -# pylint:disable=wrong-import-position -try: - from .datrie import Trie as DATrie -except ImportError: - pass -else: - Trie = DATrie -# pylint:enable=wrong-import-position diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py deleted file mode 100644 index a1158bb..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/_base.py +++ /dev/null @@ -1,37 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from collections import Mapping - - -class Trie(Mapping): - """Abstract base class for tries""" - - def keys(self, prefix=None): - # pylint:disable=arguments-differ - keys = super(Trie, self).keys() - - if prefix is None: - return set(keys) - - return {x for x in keys if x.startswith(prefix)} - - def has_keys_with_prefix(self, prefix): - for key in self.keys(): - if key.startswith(prefix): - return True - - return False - - def longest_prefix(self, prefix): - if prefix in self: - return prefix - - for i in range(1, len(prefix) + 1): - if prefix[:-i] in self: - return prefix[:-i] - - raise KeyError(prefix) - - def longest_prefix_item(self, prefix): - lprefix = self.longest_prefix(prefix) - return (lprefix, self[lprefix]) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py deleted file mode 100644 index e2e5f86..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/datrie.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from datrie import Trie as DATrie -from pip._vendor.six import text_type - -from ._base import Trie as ABCTrie - - -class Trie(ABCTrie): - def __init__(self, data): - chars = set() - for key in data.keys(): - if not isinstance(key, text_type): - raise TypeError("All keys must be strings") - for char in key: - chars.add(char) - - self._data = DATrie("".join(chars)) - for key, value in data.items(): - self._data[key] = value - - def __contains__(self, key): - return key in self._data - - def __len__(self): - return len(self._data) - - def __iter__(self): - raise NotImplementedError() - - def __getitem__(self, key): - return self._data[key] - - def keys(self, prefix=None): - return self._data.keys(prefix) - - def has_keys_with_prefix(self, prefix): - return self._data.has_keys_with_prefix(prefix) - - def longest_prefix(self, prefix): - return self._data.longest_prefix(prefix) - - def longest_prefix_item(self, prefix): - return self._data.longest_prefix_item(prefix) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py deleted file mode 100644 index c178b21..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_trie/py.py +++ /dev/null @@ -1,67 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import text_type - -from bisect import bisect_left - -from ._base import Trie as ABCTrie - - -class Trie(ABCTrie): - def __init__(self, data): - if not all(isinstance(x, text_type) for x in data.keys()): - raise TypeError("All keys must be strings") - - self._data = data - self._keys = sorted(data.keys()) - self._cachestr = "" - self._cachepoints = (0, len(data)) - - def __contains__(self, key): - return key in self._data - - def __len__(self): - return len(self._data) - - def __iter__(self): - return iter(self._data) - - def __getitem__(self, key): - return self._data[key] - - def keys(self, prefix=None): - if prefix is None or prefix == "" or not self._keys: - return set(self._keys) - - if prefix.startswith(self._cachestr): - lo, hi = self._cachepoints - start = i = bisect_left(self._keys, prefix, lo, hi) - else: - start = i = bisect_left(self._keys, prefix) - - keys = set() - if start == len(self._keys): - return keys - - while self._keys[i].startswith(prefix): - keys.add(self._keys[i]) - i += 1 - - self._cachestr = prefix - self._cachepoints = (start, i) - - return keys - - def has_keys_with_prefix(self, prefix): - if prefix in self._data: - return True - - if prefix.startswith(self._cachestr): - lo, hi = self._cachepoints - i = bisect_left(self._keys, prefix, lo, hi) - else: - i = bisect_left(self._keys, prefix) - - if i == len(self._keys): - return False - - return self._keys[i].startswith(prefix) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py deleted file mode 100644 index 0703afb..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/_utils.py +++ /dev/null @@ -1,124 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from types import ModuleType - -from pip._vendor.six import text_type - -try: - import xml.etree.cElementTree as default_etree -except ImportError: - import xml.etree.ElementTree as default_etree - - -__all__ = ["default_etree", "MethodDispatcher", "isSurrogatePair", - "surrogatePairToCodepoint", "moduleFactoryFactory", - "supports_lone_surrogates"] - - -# Platforms not supporting lone surrogates (\uD800-\uDFFF) should be -# caught by the below test. In general this would be any platform -# using UTF-16 as its encoding of unicode strings, such as -# Jython. This is because UTF-16 itself is based on the use of such -# surrogates, and there is no mechanism to further escape such -# escapes. -try: - _x = eval('"\\uD800"') # pylint:disable=eval-used - if not isinstance(_x, text_type): - # We need this with u"" because of http://bugs.jython.org/issue2039 - _x = eval('u"\\uD800"') # pylint:disable=eval-used - assert isinstance(_x, text_type) -except: # pylint:disable=bare-except - supports_lone_surrogates = False -else: - supports_lone_surrogates = True - - -class MethodDispatcher(dict): - """Dict with 2 special properties: - - On initiation, keys that are lists, sets or tuples are converted to - multiple keys so accessing any one of the items in the original - list-like object returns the matching value - - md = MethodDispatcher({("foo", "bar"):"baz"}) - md["foo"] == "baz" - - A default value which can be set through the default attribute. - """ - - def __init__(self, items=()): - # Using _dictEntries instead of directly assigning to self is about - # twice as fast. Please do careful performance testing before changing - # anything here. - _dictEntries = [] - for name, value in items: - if isinstance(name, (list, tuple, frozenset, set)): - for item in name: - _dictEntries.append((item, value)) - else: - _dictEntries.append((name, value)) - dict.__init__(self, _dictEntries) - assert len(self) == len(_dictEntries) - self.default = None - - def __getitem__(self, key): - return dict.get(self, key, self.default) - - -# Some utility functions to deal with weirdness around UCS2 vs UCS4 -# python builds - -def isSurrogatePair(data): - return (len(data) == 2 and - ord(data[0]) >= 0xD800 and ord(data[0]) <= 0xDBFF and - ord(data[1]) >= 0xDC00 and ord(data[1]) <= 0xDFFF) - - -def surrogatePairToCodepoint(data): - char_val = (0x10000 + (ord(data[0]) - 0xD800) * 0x400 + - (ord(data[1]) - 0xDC00)) - return char_val - -# Module Factory Factory (no, this isn't Java, I know) -# Here to stop this being duplicated all over the place. - - -def moduleFactoryFactory(factory): - moduleCache = {} - - def moduleFactory(baseModule, *args, **kwargs): - if isinstance(ModuleType.__name__, type("")): - name = "_%s_factory" % baseModule.__name__ - else: - name = b"_%s_factory" % baseModule.__name__ - - kwargs_tuple = tuple(kwargs.items()) - - try: - return moduleCache[name][args][kwargs_tuple] - except KeyError: - mod = ModuleType(name) - objs = factory(baseModule, *args, **kwargs) - mod.__dict__.update(objs) - if "name" not in moduleCache: - moduleCache[name] = {} - if "args" not in moduleCache[name]: - moduleCache[name][args] = {} - if "kwargs" not in moduleCache[name][args]: - moduleCache[name][args][kwargs_tuple] = {} - moduleCache[name][args][kwargs_tuple] = mod - return mod - - return moduleFactory - - -def memoize(func): - cache = {} - - def wrapped(*args, **kwargs): - key = (tuple(args), tuple(kwargs.items())) - if key not in cache: - cache[key] = func(*args, **kwargs) - return cache[key] - - return wrapped diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py deleted file mode 100644 index 1ff8041..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/constants.py +++ /dev/null @@ -1,2947 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import string - -EOF = None - -E = { - "null-character": - "Null character in input stream, replaced with U+FFFD.", - "invalid-codepoint": - "Invalid codepoint in stream.", - "incorrectly-placed-solidus": - "Solidus (/) incorrectly placed in tag.", - "incorrect-cr-newline-entity": - "Incorrect CR newline entity, replaced with LF.", - "illegal-windows-1252-entity": - "Entity used with illegal number (windows-1252 reference).", - "cant-convert-numeric-entity": - "Numeric entity couldn't be converted to character " - "(codepoint U+%(charAsInt)08x).", - "illegal-codepoint-for-numeric-entity": - "Numeric entity represents an illegal codepoint: " - "U+%(charAsInt)08x.", - "numeric-entity-without-semicolon": - "Numeric entity didn't end with ';'.", - "expected-numeric-entity-but-got-eof": - "Numeric entity expected. Got end of file instead.", - "expected-numeric-entity": - "Numeric entity expected but none found.", - "named-entity-without-semicolon": - "Named entity didn't end with ';'.", - "expected-named-entity": - "Named entity expected. Got none.", - "attributes-in-end-tag": - "End tag contains unexpected attributes.", - 'self-closing-flag-on-end-tag': - "End tag contains unexpected self-closing flag.", - "expected-tag-name-but-got-right-bracket": - "Expected tag name. Got '>' instead.", - "expected-tag-name-but-got-question-mark": - "Expected tag name. Got '?' instead. (HTML doesn't " - "support processing instructions.)", - "expected-tag-name": - "Expected tag name. Got something else instead", - "expected-closing-tag-but-got-right-bracket": - "Expected closing tag. Got '>' instead. Ignoring '</>'.", - "expected-closing-tag-but-got-eof": - "Expected closing tag. Unexpected end of file.", - "expected-closing-tag-but-got-char": - "Expected closing tag. Unexpected character '%(data)s' found.", - "eof-in-tag-name": - "Unexpected end of file in the tag name.", - "expected-attribute-name-but-got-eof": - "Unexpected end of file. Expected attribute name instead.", - "eof-in-attribute-name": - "Unexpected end of file in attribute name.", - "invalid-character-in-attribute-name": - "Invalid character in attribute name", - "duplicate-attribute": - "Dropped duplicate attribute on tag.", - "expected-end-of-tag-name-but-got-eof": - "Unexpected end of file. Expected = or end of tag.", - "expected-attribute-value-but-got-eof": - "Unexpected end of file. Expected attribute value.", - "expected-attribute-value-but-got-right-bracket": - "Expected attribute value. Got '>' instead.", - 'equals-in-unquoted-attribute-value': - "Unexpected = in unquoted attribute", - 'unexpected-character-in-unquoted-attribute-value': - "Unexpected character in unquoted attribute", - "invalid-character-after-attribute-name": - "Unexpected character after attribute name.", - "unexpected-character-after-attribute-value": - "Unexpected character after attribute value.", - "eof-in-attribute-value-double-quote": - "Unexpected end of file in attribute value (\").", - "eof-in-attribute-value-single-quote": - "Unexpected end of file in attribute value (').", - "eof-in-attribute-value-no-quotes": - "Unexpected end of file in attribute value.", - "unexpected-EOF-after-solidus-in-tag": - "Unexpected end of file in tag. Expected >", - "unexpected-character-after-solidus-in-tag": - "Unexpected character after / in tag. Expected >", - "expected-dashes-or-doctype": - "Expected '--' or 'DOCTYPE'. Not found.", - "unexpected-bang-after-double-dash-in-comment": - "Unexpected ! after -- in comment", - "unexpected-space-after-double-dash-in-comment": - "Unexpected space after -- in comment", - "incorrect-comment": - "Incorrect comment.", - "eof-in-comment": - "Unexpected end of file in comment.", - "eof-in-comment-end-dash": - "Unexpected end of file in comment (-)", - "unexpected-dash-after-double-dash-in-comment": - "Unexpected '-' after '--' found in comment.", - "eof-in-comment-double-dash": - "Unexpected end of file in comment (--).", - "eof-in-comment-end-space-state": - "Unexpected end of file in comment.", - "eof-in-comment-end-bang-state": - "Unexpected end of file in comment.", - "unexpected-char-in-comment": - "Unexpected character in comment found.", - "need-space-after-doctype": - "No space after literal string 'DOCTYPE'.", - "expected-doctype-name-but-got-right-bracket": - "Unexpected > character. Expected DOCTYPE name.", - "expected-doctype-name-but-got-eof": - "Unexpected end of file. Expected DOCTYPE name.", - "eof-in-doctype-name": - "Unexpected end of file in DOCTYPE name.", - "eof-in-doctype": - "Unexpected end of file in DOCTYPE.", - "expected-space-or-right-bracket-in-doctype": - "Expected space or '>'. Got '%(data)s'", - "unexpected-end-of-doctype": - "Unexpected end of DOCTYPE.", - "unexpected-char-in-doctype": - "Unexpected character in DOCTYPE.", - "eof-in-innerhtml": - "XXX innerHTML EOF", - "unexpected-doctype": - "Unexpected DOCTYPE. Ignored.", - "non-html-root": - "html needs to be the first start tag.", - "expected-doctype-but-got-eof": - "Unexpected End of file. Expected DOCTYPE.", - "unknown-doctype": - "Erroneous DOCTYPE.", - "expected-doctype-but-got-chars": - "Unexpected non-space characters. Expected DOCTYPE.", - "expected-doctype-but-got-start-tag": - "Unexpected start tag (%(name)s). Expected DOCTYPE.", - "expected-doctype-but-got-end-tag": - "Unexpected end tag (%(name)s). Expected DOCTYPE.", - "end-tag-after-implied-root": - "Unexpected end tag (%(name)s) after the (implied) root element.", - "expected-named-closing-tag-but-got-eof": - "Unexpected end of file. Expected end tag (%(name)s).", - "two-heads-are-not-better-than-one": - "Unexpected start tag head in existing head. Ignored.", - "unexpected-end-tag": - "Unexpected end tag (%(name)s). Ignored.", - "unexpected-start-tag-out-of-my-head": - "Unexpected start tag (%(name)s) that can be in head. Moved.", - "unexpected-start-tag": - "Unexpected start tag (%(name)s).", - "missing-end-tag": - "Missing end tag (%(name)s).", - "missing-end-tags": - "Missing end tags (%(name)s).", - "unexpected-start-tag-implies-end-tag": - "Unexpected start tag (%(startName)s) " - "implies end tag (%(endName)s).", - "unexpected-start-tag-treated-as": - "Unexpected start tag (%(originalName)s). Treated as %(newName)s.", - "deprecated-tag": - "Unexpected start tag %(name)s. Don't use it!", - "unexpected-start-tag-ignored": - "Unexpected start tag %(name)s. Ignored.", - "expected-one-end-tag-but-got-another": - "Unexpected end tag (%(gotName)s). " - "Missing end tag (%(expectedName)s).", - "end-tag-too-early": - "End tag (%(name)s) seen too early. Expected other end tag.", - "end-tag-too-early-named": - "Unexpected end tag (%(gotName)s). Expected end tag (%(expectedName)s).", - "end-tag-too-early-ignored": - "End tag (%(name)s) seen too early. Ignored.", - "adoption-agency-1.1": - "End tag (%(name)s) violates step 1, " - "paragraph 1 of the adoption agency algorithm.", - "adoption-agency-1.2": - "End tag (%(name)s) violates step 1, " - "paragraph 2 of the adoption agency algorithm.", - "adoption-agency-1.3": - "End tag (%(name)s) violates step 1, " - "paragraph 3 of the adoption agency algorithm.", - "adoption-agency-4.4": - "End tag (%(name)s) violates step 4, " - "paragraph 4 of the adoption agency algorithm.", - "unexpected-end-tag-treated-as": - "Unexpected end tag (%(originalName)s). Treated as %(newName)s.", - "no-end-tag": - "This element (%(name)s) has no end tag.", - "unexpected-implied-end-tag-in-table": - "Unexpected implied end tag (%(name)s) in the table phase.", - "unexpected-implied-end-tag-in-table-body": - "Unexpected implied end tag (%(name)s) in the table body phase.", - "unexpected-char-implies-table-voodoo": - "Unexpected non-space characters in " - "table context caused voodoo mode.", - "unexpected-hidden-input-in-table": - "Unexpected input with type hidden in table context.", - "unexpected-form-in-table": - "Unexpected form in table context.", - "unexpected-start-tag-implies-table-voodoo": - "Unexpected start tag (%(name)s) in " - "table context caused voodoo mode.", - "unexpected-end-tag-implies-table-voodoo": - "Unexpected end tag (%(name)s) in " - "table context caused voodoo mode.", - "unexpected-cell-in-table-body": - "Unexpected table cell start tag (%(name)s) " - "in the table body phase.", - "unexpected-cell-end-tag": - "Got table cell end tag (%(name)s) " - "while required end tags are missing.", - "unexpected-end-tag-in-table-body": - "Unexpected end tag (%(name)s) in the table body phase. Ignored.", - "unexpected-implied-end-tag-in-table-row": - "Unexpected implied end tag (%(name)s) in the table row phase.", - "unexpected-end-tag-in-table-row": - "Unexpected end tag (%(name)s) in the table row phase. Ignored.", - "unexpected-select-in-select": - "Unexpected select start tag in the select phase " - "treated as select end tag.", - "unexpected-input-in-select": - "Unexpected input start tag in the select phase.", - "unexpected-start-tag-in-select": - "Unexpected start tag token (%(name)s in the select phase. " - "Ignored.", - "unexpected-end-tag-in-select": - "Unexpected end tag (%(name)s) in the select phase. Ignored.", - "unexpected-table-element-start-tag-in-select-in-table": - "Unexpected table element start tag (%(name)s) in the select in table phase.", - "unexpected-table-element-end-tag-in-select-in-table": - "Unexpected table element end tag (%(name)s) in the select in table phase.", - "unexpected-char-after-body": - "Unexpected non-space characters in the after body phase.", - "unexpected-start-tag-after-body": - "Unexpected start tag token (%(name)s)" - " in the after body phase.", - "unexpected-end-tag-after-body": - "Unexpected end tag token (%(name)s)" - " in the after body phase.", - "unexpected-char-in-frameset": - "Unexpected characters in the frameset phase. Characters ignored.", - "unexpected-start-tag-in-frameset": - "Unexpected start tag token (%(name)s)" - " in the frameset phase. Ignored.", - "unexpected-frameset-in-frameset-innerhtml": - "Unexpected end tag token (frameset) " - "in the frameset phase (innerHTML).", - "unexpected-end-tag-in-frameset": - "Unexpected end tag token (%(name)s)" - " in the frameset phase. Ignored.", - "unexpected-char-after-frameset": - "Unexpected non-space characters in the " - "after frameset phase. Ignored.", - "unexpected-start-tag-after-frameset": - "Unexpected start tag (%(name)s)" - " in the after frameset phase. Ignored.", - "unexpected-end-tag-after-frameset": - "Unexpected end tag (%(name)s)" - " in the after frameset phase. Ignored.", - "unexpected-end-tag-after-body-innerhtml": - "Unexpected end tag after body(innerHtml)", - "expected-eof-but-got-char": - "Unexpected non-space characters. Expected end of file.", - "expected-eof-but-got-start-tag": - "Unexpected start tag (%(name)s)" - ". Expected end of file.", - "expected-eof-but-got-end-tag": - "Unexpected end tag (%(name)s)" - ". Expected end of file.", - "eof-in-table": - "Unexpected end of file. Expected table content.", - "eof-in-select": - "Unexpected end of file. Expected select content.", - "eof-in-frameset": - "Unexpected end of file. Expected frameset content.", - "eof-in-script-in-script": - "Unexpected end of file. Expected script content.", - "eof-in-foreign-lands": - "Unexpected end of file. Expected foreign content", - "non-void-element-with-trailing-solidus": - "Trailing solidus not allowed on element %(name)s", - "unexpected-html-element-in-foreign-content": - "Element %(name)s not allowed in a non-html context", - "unexpected-end-tag-before-html": - "Unexpected end tag (%(name)s) before html.", - "unexpected-inhead-noscript-tag": - "Element %(name)s not allowed in a inhead-noscript context", - "eof-in-head-noscript": - "Unexpected end of file. Expected inhead-noscript content", - "char-in-head-noscript": - "Unexpected non-space character. Expected inhead-noscript content", - "XXX-undefined-error": - "Undefined error (this sucks and should be fixed)", -} - -namespaces = { - "html": "http://www.w3.org/1999/xhtml", - "mathml": "http://www.w3.org/1998/Math/MathML", - "svg": "http://www.w3.org/2000/svg", - "xlink": "http://www.w3.org/1999/xlink", - "xml": "http://www.w3.org/XML/1998/namespace", - "xmlns": "http://www.w3.org/2000/xmlns/" -} - -scopingElements = frozenset([ - (namespaces["html"], "applet"), - (namespaces["html"], "caption"), - (namespaces["html"], "html"), - (namespaces["html"], "marquee"), - (namespaces["html"], "object"), - (namespaces["html"], "table"), - (namespaces["html"], "td"), - (namespaces["html"], "th"), - (namespaces["mathml"], "mi"), - (namespaces["mathml"], "mo"), - (namespaces["mathml"], "mn"), - (namespaces["mathml"], "ms"), - (namespaces["mathml"], "mtext"), - (namespaces["mathml"], "annotation-xml"), - (namespaces["svg"], "foreignObject"), - (namespaces["svg"], "desc"), - (namespaces["svg"], "title"), -]) - -formattingElements = frozenset([ - (namespaces["html"], "a"), - (namespaces["html"], "b"), - (namespaces["html"], "big"), - (namespaces["html"], "code"), - (namespaces["html"], "em"), - (namespaces["html"], "font"), - (namespaces["html"], "i"), - (namespaces["html"], "nobr"), - (namespaces["html"], "s"), - (namespaces["html"], "small"), - (namespaces["html"], "strike"), - (namespaces["html"], "strong"), - (namespaces["html"], "tt"), - (namespaces["html"], "u") -]) - -specialElements = frozenset([ - (namespaces["html"], "address"), - (namespaces["html"], "applet"), - (namespaces["html"], "area"), - (namespaces["html"], "article"), - (namespaces["html"], "aside"), - (namespaces["html"], "base"), - (namespaces["html"], "basefont"), - (namespaces["html"], "bgsound"), - (namespaces["html"], "blockquote"), - (namespaces["html"], "body"), - (namespaces["html"], "br"), - (namespaces["html"], "button"), - (namespaces["html"], "caption"), - (namespaces["html"], "center"), - (namespaces["html"], "col"), - (namespaces["html"], "colgroup"), - (namespaces["html"], "command"), - (namespaces["html"], "dd"), - (namespaces["html"], "details"), - (namespaces["html"], "dir"), - (namespaces["html"], "div"), - (namespaces["html"], "dl"), - (namespaces["html"], "dt"), - (namespaces["html"], "embed"), - (namespaces["html"], "fieldset"), - (namespaces["html"], "figure"), - (namespaces["html"], "footer"), - (namespaces["html"], "form"), - (namespaces["html"], "frame"), - (namespaces["html"], "frameset"), - (namespaces["html"], "h1"), - (namespaces["html"], "h2"), - (namespaces["html"], "h3"), - (namespaces["html"], "h4"), - (namespaces["html"], "h5"), - (namespaces["html"], "h6"), - (namespaces["html"], "head"), - (namespaces["html"], "header"), - (namespaces["html"], "hr"), - (namespaces["html"], "html"), - (namespaces["html"], "iframe"), - # Note that image is commented out in the spec as "this isn't an - # element that can end up on the stack, so it doesn't matter," - (namespaces["html"], "image"), - (namespaces["html"], "img"), - (namespaces["html"], "input"), - (namespaces["html"], "isindex"), - (namespaces["html"], "li"), - (namespaces["html"], "link"), - (namespaces["html"], "listing"), - (namespaces["html"], "marquee"), - (namespaces["html"], "menu"), - (namespaces["html"], "meta"), - (namespaces["html"], "nav"), - (namespaces["html"], "noembed"), - (namespaces["html"], "noframes"), - (namespaces["html"], "noscript"), - (namespaces["html"], "object"), - (namespaces["html"], "ol"), - (namespaces["html"], "p"), - (namespaces["html"], "param"), - (namespaces["html"], "plaintext"), - (namespaces["html"], "pre"), - (namespaces["html"], "script"), - (namespaces["html"], "section"), - (namespaces["html"], "select"), - (namespaces["html"], "style"), - (namespaces["html"], "table"), - (namespaces["html"], "tbody"), - (namespaces["html"], "td"), - (namespaces["html"], "textarea"), - (namespaces["html"], "tfoot"), - (namespaces["html"], "th"), - (namespaces["html"], "thead"), - (namespaces["html"], "title"), - (namespaces["html"], "tr"), - (namespaces["html"], "ul"), - (namespaces["html"], "wbr"), - (namespaces["html"], "xmp"), - (namespaces["svg"], "foreignObject") -]) - -htmlIntegrationPointElements = frozenset([ - (namespaces["mathml"], "annotation-xml"), - (namespaces["svg"], "foreignObject"), - (namespaces["svg"], "desc"), - (namespaces["svg"], "title") -]) - -mathmlTextIntegrationPointElements = frozenset([ - (namespaces["mathml"], "mi"), - (namespaces["mathml"], "mo"), - (namespaces["mathml"], "mn"), - (namespaces["mathml"], "ms"), - (namespaces["mathml"], "mtext") -]) - -adjustSVGAttributes = { - "attributename": "attributeName", - "attributetype": "attributeType", - "basefrequency": "baseFrequency", - "baseprofile": "baseProfile", - "calcmode": "calcMode", - "clippathunits": "clipPathUnits", - "contentscripttype": "contentScriptType", - "contentstyletype": "contentStyleType", - "diffuseconstant": "diffuseConstant", - "edgemode": "edgeMode", - "externalresourcesrequired": "externalResourcesRequired", - "filterres": "filterRes", - "filterunits": "filterUnits", - "glyphref": "glyphRef", - "gradienttransform": "gradientTransform", - "gradientunits": "gradientUnits", - "kernelmatrix": "kernelMatrix", - "kernelunitlength": "kernelUnitLength", - "keypoints": "keyPoints", - "keysplines": "keySplines", - "keytimes": "keyTimes", - "lengthadjust": "lengthAdjust", - "limitingconeangle": "limitingConeAngle", - "markerheight": "markerHeight", - "markerunits": "markerUnits", - "markerwidth": "markerWidth", - "maskcontentunits": "maskContentUnits", - "maskunits": "maskUnits", - "numoctaves": "numOctaves", - "pathlength": "pathLength", - "patterncontentunits": "patternContentUnits", - "patterntransform": "patternTransform", - "patternunits": "patternUnits", - "pointsatx": "pointsAtX", - "pointsaty": "pointsAtY", - "pointsatz": "pointsAtZ", - "preservealpha": "preserveAlpha", - "preserveaspectratio": "preserveAspectRatio", - "primitiveunits": "primitiveUnits", - "refx": "refX", - "refy": "refY", - "repeatcount": "repeatCount", - "repeatdur": "repeatDur", - "requiredextensions": "requiredExtensions", - "requiredfeatures": "requiredFeatures", - "specularconstant": "specularConstant", - "specularexponent": "specularExponent", - "spreadmethod": "spreadMethod", - "startoffset": "startOffset", - "stddeviation": "stdDeviation", - "stitchtiles": "stitchTiles", - "surfacescale": "surfaceScale", - "systemlanguage": "systemLanguage", - "tablevalues": "tableValues", - "targetx": "targetX", - "targety": "targetY", - "textlength": "textLength", - "viewbox": "viewBox", - "viewtarget": "viewTarget", - "xchannelselector": "xChannelSelector", - "ychannelselector": "yChannelSelector", - "zoomandpan": "zoomAndPan" -} - -adjustMathMLAttributes = {"definitionurl": "definitionURL"} - -adjustForeignAttributes = { - "xlink:actuate": ("xlink", "actuate", namespaces["xlink"]), - "xlink:arcrole": ("xlink", "arcrole", namespaces["xlink"]), - "xlink:href": ("xlink", "href", namespaces["xlink"]), - "xlink:role": ("xlink", "role", namespaces["xlink"]), - "xlink:show": ("xlink", "show", namespaces["xlink"]), - "xlink:title": ("xlink", "title", namespaces["xlink"]), - "xlink:type": ("xlink", "type", namespaces["xlink"]), - "xml:base": ("xml", "base", namespaces["xml"]), - "xml:lang": ("xml", "lang", namespaces["xml"]), - "xml:space": ("xml", "space", namespaces["xml"]), - "xmlns": (None, "xmlns", namespaces["xmlns"]), - "xmlns:xlink": ("xmlns", "xlink", namespaces["xmlns"]) -} - -unadjustForeignAttributes = dict([((ns, local), qname) for qname, (prefix, local, ns) in - adjustForeignAttributes.items()]) - -spaceCharacters = frozenset([ - "\t", - "\n", - "\u000C", - " ", - "\r" -]) - -tableInsertModeElements = frozenset([ - "table", - "tbody", - "tfoot", - "thead", - "tr" -]) - -asciiLowercase = frozenset(string.ascii_lowercase) -asciiUppercase = frozenset(string.ascii_uppercase) -asciiLetters = frozenset(string.ascii_letters) -digits = frozenset(string.digits) -hexDigits = frozenset(string.hexdigits) - -asciiUpper2Lower = dict([(ord(c), ord(c.lower())) - for c in string.ascii_uppercase]) - -# Heading elements need to be ordered -headingElements = ( - "h1", - "h2", - "h3", - "h4", - "h5", - "h6" -) - -voidElements = frozenset([ - "base", - "command", - "event-source", - "link", - "meta", - "hr", - "br", - "img", - "embed", - "param", - "area", - "col", - "input", - "source", - "track" -]) - -cdataElements = frozenset(['title', 'textarea']) - -rcdataElements = frozenset([ - 'style', - 'script', - 'xmp', - 'iframe', - 'noembed', - 'noframes', - 'noscript' -]) - -booleanAttributes = { - "": frozenset(["irrelevant", "itemscope"]), - "style": frozenset(["scoped"]), - "img": frozenset(["ismap"]), - "audio": frozenset(["autoplay", "controls"]), - "video": frozenset(["autoplay", "controls"]), - "script": frozenset(["defer", "async"]), - "details": frozenset(["open"]), - "datagrid": frozenset(["multiple", "disabled"]), - "command": frozenset(["hidden", "disabled", "checked", "default"]), - "hr": frozenset(["noshade"]), - "menu": frozenset(["autosubmit"]), - "fieldset": frozenset(["disabled", "readonly"]), - "option": frozenset(["disabled", "readonly", "selected"]), - "optgroup": frozenset(["disabled", "readonly"]), - "button": frozenset(["disabled", "autofocus"]), - "input": frozenset(["disabled", "readonly", "required", "autofocus", "checked", "ismap"]), - "select": frozenset(["disabled", "readonly", "autofocus", "multiple"]), - "output": frozenset(["disabled", "readonly"]), - "iframe": frozenset(["seamless"]), -} - -# entitiesWindows1252 has to be _ordered_ and needs to have an index. It -# therefore can't be a frozenset. -entitiesWindows1252 = ( - 8364, # 0x80 0x20AC EURO SIGN - 65533, # 0x81 UNDEFINED - 8218, # 0x82 0x201A SINGLE LOW-9 QUOTATION MARK - 402, # 0x83 0x0192 LATIN SMALL LETTER F WITH HOOK - 8222, # 0x84 0x201E DOUBLE LOW-9 QUOTATION MARK - 8230, # 0x85 0x2026 HORIZONTAL ELLIPSIS - 8224, # 0x86 0x2020 DAGGER - 8225, # 0x87 0x2021 DOUBLE DAGGER - 710, # 0x88 0x02C6 MODIFIER LETTER CIRCUMFLEX ACCENT - 8240, # 0x89 0x2030 PER MILLE SIGN - 352, # 0x8A 0x0160 LATIN CAPITAL LETTER S WITH CARON - 8249, # 0x8B 0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK - 338, # 0x8C 0x0152 LATIN CAPITAL LIGATURE OE - 65533, # 0x8D UNDEFINED - 381, # 0x8E 0x017D LATIN CAPITAL LETTER Z WITH CARON - 65533, # 0x8F UNDEFINED - 65533, # 0x90 UNDEFINED - 8216, # 0x91 0x2018 LEFT SINGLE QUOTATION MARK - 8217, # 0x92 0x2019 RIGHT SINGLE QUOTATION MARK - 8220, # 0x93 0x201C LEFT DOUBLE QUOTATION MARK - 8221, # 0x94 0x201D RIGHT DOUBLE QUOTATION MARK - 8226, # 0x95 0x2022 BULLET - 8211, # 0x96 0x2013 EN DASH - 8212, # 0x97 0x2014 EM DASH - 732, # 0x98 0x02DC SMALL TILDE - 8482, # 0x99 0x2122 TRADE MARK SIGN - 353, # 0x9A 0x0161 LATIN SMALL LETTER S WITH CARON - 8250, # 0x9B 0x203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - 339, # 0x9C 0x0153 LATIN SMALL LIGATURE OE - 65533, # 0x9D UNDEFINED - 382, # 0x9E 0x017E LATIN SMALL LETTER Z WITH CARON - 376 # 0x9F 0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS -) - -xmlEntities = frozenset(['lt;', 'gt;', 'amp;', 'apos;', 'quot;']) - -entities = { - "AElig": "\xc6", - "AElig;": "\xc6", - "AMP": "&", - "AMP;": "&", - "Aacute": "\xc1", - "Aacute;": "\xc1", - "Abreve;": "\u0102", - "Acirc": "\xc2", - "Acirc;": "\xc2", - "Acy;": "\u0410", - "Afr;": "\U0001d504", - "Agrave": "\xc0", - "Agrave;": "\xc0", - "Alpha;": "\u0391", - "Amacr;": "\u0100", - "And;": "\u2a53", - "Aogon;": "\u0104", - "Aopf;": "\U0001d538", - "ApplyFunction;": "\u2061", - "Aring": "\xc5", - "Aring;": "\xc5", - "Ascr;": "\U0001d49c", - "Assign;": "\u2254", - "Atilde": "\xc3", - "Atilde;": "\xc3", - "Auml": "\xc4", - "Auml;": "\xc4", - "Backslash;": "\u2216", - "Barv;": "\u2ae7", - "Barwed;": "\u2306", - "Bcy;": "\u0411", - "Because;": "\u2235", - "Bernoullis;": "\u212c", - "Beta;": "\u0392", - "Bfr;": "\U0001d505", - "Bopf;": "\U0001d539", - "Breve;": "\u02d8", - "Bscr;": "\u212c", - "Bumpeq;": "\u224e", - "CHcy;": "\u0427", - "COPY": "\xa9", - "COPY;": "\xa9", - "Cacute;": "\u0106", - "Cap;": "\u22d2", - "CapitalDifferentialD;": "\u2145", - "Cayleys;": "\u212d", - "Ccaron;": "\u010c", - "Ccedil": "\xc7", - "Ccedil;": "\xc7", - "Ccirc;": "\u0108", - "Cconint;": "\u2230", - "Cdot;": "\u010a", - "Cedilla;": "\xb8", - "CenterDot;": "\xb7", - "Cfr;": "\u212d", - "Chi;": "\u03a7", - "CircleDot;": "\u2299", - "CircleMinus;": "\u2296", - "CirclePlus;": "\u2295", - "CircleTimes;": "\u2297", - "ClockwiseContourIntegral;": "\u2232", - "CloseCurlyDoubleQuote;": "\u201d", - "CloseCurlyQuote;": "\u2019", - "Colon;": "\u2237", - "Colone;": "\u2a74", - "Congruent;": "\u2261", - "Conint;": "\u222f", - "ContourIntegral;": "\u222e", - "Copf;": "\u2102", - "Coproduct;": "\u2210", - "CounterClockwiseContourIntegral;": "\u2233", - "Cross;": "\u2a2f", - "Cscr;": "\U0001d49e", - "Cup;": "\u22d3", - "CupCap;": "\u224d", - "DD;": "\u2145", - "DDotrahd;": "\u2911", - "DJcy;": "\u0402", - "DScy;": "\u0405", - "DZcy;": "\u040f", - "Dagger;": "\u2021", - "Darr;": "\u21a1", - "Dashv;": "\u2ae4", - "Dcaron;": "\u010e", - "Dcy;": "\u0414", - "Del;": "\u2207", - "Delta;": "\u0394", - "Dfr;": "\U0001d507", - "DiacriticalAcute;": "\xb4", - "DiacriticalDot;": "\u02d9", - "DiacriticalDoubleAcute;": "\u02dd", - "DiacriticalGrave;": "`", - "DiacriticalTilde;": "\u02dc", - "Diamond;": "\u22c4", - "DifferentialD;": "\u2146", - "Dopf;": "\U0001d53b", - "Dot;": "\xa8", - "DotDot;": "\u20dc", - "DotEqual;": "\u2250", - "DoubleContourIntegral;": "\u222f", - "DoubleDot;": "\xa8", - "DoubleDownArrow;": "\u21d3", - "DoubleLeftArrow;": "\u21d0", - "DoubleLeftRightArrow;": "\u21d4", - "DoubleLeftTee;": "\u2ae4", - "DoubleLongLeftArrow;": "\u27f8", - "DoubleLongLeftRightArrow;": "\u27fa", - "DoubleLongRightArrow;": "\u27f9", - "DoubleRightArrow;": "\u21d2", - "DoubleRightTee;": "\u22a8", - "DoubleUpArrow;": "\u21d1", - "DoubleUpDownArrow;": "\u21d5", - "DoubleVerticalBar;": "\u2225", - "DownArrow;": "\u2193", - "DownArrowBar;": "\u2913", - "DownArrowUpArrow;": "\u21f5", - "DownBreve;": "\u0311", - "DownLeftRightVector;": "\u2950", - "DownLeftTeeVector;": "\u295e", - "DownLeftVector;": "\u21bd", - "DownLeftVectorBar;": "\u2956", - "DownRightTeeVector;": "\u295f", - "DownRightVector;": "\u21c1", - "DownRightVectorBar;": "\u2957", - "DownTee;": "\u22a4", - "DownTeeArrow;": "\u21a7", - "Downarrow;": "\u21d3", - "Dscr;": "\U0001d49f", - "Dstrok;": "\u0110", - "ENG;": "\u014a", - "ETH": "\xd0", - "ETH;": "\xd0", - "Eacute": "\xc9", - "Eacute;": "\xc9", - "Ecaron;": "\u011a", - "Ecirc": "\xca", - "Ecirc;": "\xca", - "Ecy;": "\u042d", - "Edot;": "\u0116", - "Efr;": "\U0001d508", - "Egrave": "\xc8", - "Egrave;": "\xc8", - "Element;": "\u2208", - "Emacr;": "\u0112", - "EmptySmallSquare;": "\u25fb", - "EmptyVerySmallSquare;": "\u25ab", - "Eogon;": "\u0118", - "Eopf;": "\U0001d53c", - "Epsilon;": "\u0395", - "Equal;": "\u2a75", - "EqualTilde;": "\u2242", - "Equilibrium;": "\u21cc", - "Escr;": "\u2130", - "Esim;": "\u2a73", - "Eta;": "\u0397", - "Euml": "\xcb", - "Euml;": "\xcb", - "Exists;": "\u2203", - "ExponentialE;": "\u2147", - "Fcy;": "\u0424", - "Ffr;": "\U0001d509", - "FilledSmallSquare;": "\u25fc", - "FilledVerySmallSquare;": "\u25aa", - "Fopf;": "\U0001d53d", - "ForAll;": "\u2200", - "Fouriertrf;": "\u2131", - "Fscr;": "\u2131", - "GJcy;": "\u0403", - "GT": ">", - "GT;": ">", - "Gamma;": "\u0393", - "Gammad;": "\u03dc", - "Gbreve;": "\u011e", - "Gcedil;": "\u0122", - "Gcirc;": "\u011c", - "Gcy;": "\u0413", - "Gdot;": "\u0120", - "Gfr;": "\U0001d50a", - "Gg;": "\u22d9", - "Gopf;": "\U0001d53e", - "GreaterEqual;": "\u2265", - "GreaterEqualLess;": "\u22db", - "GreaterFullEqual;": "\u2267", - "GreaterGreater;": "\u2aa2", - "GreaterLess;": "\u2277", - "GreaterSlantEqual;": "\u2a7e", - "GreaterTilde;": "\u2273", - "Gscr;": "\U0001d4a2", - "Gt;": "\u226b", - "HARDcy;": "\u042a", - "Hacek;": "\u02c7", - "Hat;": "^", - "Hcirc;": "\u0124", - "Hfr;": "\u210c", - "HilbertSpace;": "\u210b", - "Hopf;": "\u210d", - "HorizontalLine;": "\u2500", - "Hscr;": "\u210b", - "Hstrok;": "\u0126", - "HumpDownHump;": "\u224e", - "HumpEqual;": "\u224f", - "IEcy;": "\u0415", - "IJlig;": "\u0132", - "IOcy;": "\u0401", - "Iacute": "\xcd", - "Iacute;": "\xcd", - "Icirc": "\xce", - "Icirc;": "\xce", - "Icy;": "\u0418", - "Idot;": "\u0130", - "Ifr;": "\u2111", - "Igrave": "\xcc", - "Igrave;": "\xcc", - "Im;": "\u2111", - "Imacr;": "\u012a", - "ImaginaryI;": "\u2148", - "Implies;": "\u21d2", - "Int;": "\u222c", - "Integral;": "\u222b", - "Intersection;": "\u22c2", - "InvisibleComma;": "\u2063", - "InvisibleTimes;": "\u2062", - "Iogon;": "\u012e", - "Iopf;": "\U0001d540", - "Iota;": "\u0399", - "Iscr;": "\u2110", - "Itilde;": "\u0128", - "Iukcy;": "\u0406", - "Iuml": "\xcf", - "Iuml;": "\xcf", - "Jcirc;": "\u0134", - "Jcy;": "\u0419", - "Jfr;": "\U0001d50d", - "Jopf;": "\U0001d541", - "Jscr;": "\U0001d4a5", - "Jsercy;": "\u0408", - "Jukcy;": "\u0404", - "KHcy;": "\u0425", - "KJcy;": "\u040c", - "Kappa;": "\u039a", - "Kcedil;": "\u0136", - "Kcy;": "\u041a", - "Kfr;": "\U0001d50e", - "Kopf;": "\U0001d542", - "Kscr;": "\U0001d4a6", - "LJcy;": "\u0409", - "LT": "<", - "LT;": "<", - "Lacute;": "\u0139", - "Lambda;": "\u039b", - "Lang;": "\u27ea", - "Laplacetrf;": "\u2112", - "Larr;": "\u219e", - "Lcaron;": "\u013d", - "Lcedil;": "\u013b", - "Lcy;": "\u041b", - "LeftAngleBracket;": "\u27e8", - "LeftArrow;": "\u2190", - "LeftArrowBar;": "\u21e4", - "LeftArrowRightArrow;": "\u21c6", - "LeftCeiling;": "\u2308", - "LeftDoubleBracket;": "\u27e6", - "LeftDownTeeVector;": "\u2961", - "LeftDownVector;": "\u21c3", - "LeftDownVectorBar;": "\u2959", - "LeftFloor;": "\u230a", - "LeftRightArrow;": "\u2194", - "LeftRightVector;": "\u294e", - "LeftTee;": "\u22a3", - "LeftTeeArrow;": "\u21a4", - "LeftTeeVector;": "\u295a", - "LeftTriangle;": "\u22b2", - "LeftTriangleBar;": "\u29cf", - "LeftTriangleEqual;": "\u22b4", - "LeftUpDownVector;": "\u2951", - "LeftUpTeeVector;": "\u2960", - "LeftUpVector;": "\u21bf", - "LeftUpVectorBar;": "\u2958", - "LeftVector;": "\u21bc", - "LeftVectorBar;": "\u2952", - "Leftarrow;": "\u21d0", - "Leftrightarrow;": "\u21d4", - "LessEqualGreater;": "\u22da", - "LessFullEqual;": "\u2266", - "LessGreater;": "\u2276", - "LessLess;": "\u2aa1", - "LessSlantEqual;": "\u2a7d", - "LessTilde;": "\u2272", - "Lfr;": "\U0001d50f", - "Ll;": "\u22d8", - "Lleftarrow;": "\u21da", - "Lmidot;": "\u013f", - "LongLeftArrow;": "\u27f5", - "LongLeftRightArrow;": "\u27f7", - "LongRightArrow;": "\u27f6", - "Longleftarrow;": "\u27f8", - "Longleftrightarrow;": "\u27fa", - "Longrightarrow;": "\u27f9", - "Lopf;": "\U0001d543", - "LowerLeftArrow;": "\u2199", - "LowerRightArrow;": "\u2198", - "Lscr;": "\u2112", - "Lsh;": "\u21b0", - "Lstrok;": "\u0141", - "Lt;": "\u226a", - "Map;": "\u2905", - "Mcy;": "\u041c", - "MediumSpace;": "\u205f", - "Mellintrf;": "\u2133", - "Mfr;": "\U0001d510", - "MinusPlus;": "\u2213", - "Mopf;": "\U0001d544", - "Mscr;": "\u2133", - "Mu;": "\u039c", - "NJcy;": "\u040a", - "Nacute;": "\u0143", - "Ncaron;": "\u0147", - "Ncedil;": "\u0145", - "Ncy;": "\u041d", - "NegativeMediumSpace;": "\u200b", - "NegativeThickSpace;": "\u200b", - "NegativeThinSpace;": "\u200b", - "NegativeVeryThinSpace;": "\u200b", - "NestedGreaterGreater;": "\u226b", - "NestedLessLess;": "\u226a", - "NewLine;": "\n", - "Nfr;": "\U0001d511", - "NoBreak;": "\u2060", - "NonBreakingSpace;": "\xa0", - "Nopf;": "\u2115", - "Not;": "\u2aec", - "NotCongruent;": "\u2262", - "NotCupCap;": "\u226d", - "NotDoubleVerticalBar;": "\u2226", - "NotElement;": "\u2209", - "NotEqual;": "\u2260", - "NotEqualTilde;": "\u2242\u0338", - "NotExists;": "\u2204", - "NotGreater;": "\u226f", - "NotGreaterEqual;": "\u2271", - "NotGreaterFullEqual;": "\u2267\u0338", - "NotGreaterGreater;": "\u226b\u0338", - "NotGreaterLess;": "\u2279", - "NotGreaterSlantEqual;": "\u2a7e\u0338", - "NotGreaterTilde;": "\u2275", - "NotHumpDownHump;": "\u224e\u0338", - "NotHumpEqual;": "\u224f\u0338", - "NotLeftTriangle;": "\u22ea", - "NotLeftTriangleBar;": "\u29cf\u0338", - "NotLeftTriangleEqual;": "\u22ec", - "NotLess;": "\u226e", - "NotLessEqual;": "\u2270", - "NotLessGreater;": "\u2278", - "NotLessLess;": "\u226a\u0338", - "NotLessSlantEqual;": "\u2a7d\u0338", - "NotLessTilde;": "\u2274", - "NotNestedGreaterGreater;": "\u2aa2\u0338", - "NotNestedLessLess;": "\u2aa1\u0338", - "NotPrecedes;": "\u2280", - "NotPrecedesEqual;": "\u2aaf\u0338", - "NotPrecedesSlantEqual;": "\u22e0", - "NotReverseElement;": "\u220c", - "NotRightTriangle;": "\u22eb", - "NotRightTriangleBar;": "\u29d0\u0338", - "NotRightTriangleEqual;": "\u22ed", - "NotSquareSubset;": "\u228f\u0338", - "NotSquareSubsetEqual;": "\u22e2", - "NotSquareSuperset;": "\u2290\u0338", - "NotSquareSupersetEqual;": "\u22e3", - "NotSubset;": "\u2282\u20d2", - "NotSubsetEqual;": "\u2288", - "NotSucceeds;": "\u2281", - "NotSucceedsEqual;": "\u2ab0\u0338", - "NotSucceedsSlantEqual;": "\u22e1", - "NotSucceedsTilde;": "\u227f\u0338", - "NotSuperset;": "\u2283\u20d2", - "NotSupersetEqual;": "\u2289", - "NotTilde;": "\u2241", - "NotTildeEqual;": "\u2244", - "NotTildeFullEqual;": "\u2247", - "NotTildeTilde;": "\u2249", - "NotVerticalBar;": "\u2224", - "Nscr;": "\U0001d4a9", - "Ntilde": "\xd1", - "Ntilde;": "\xd1", - "Nu;": "\u039d", - "OElig;": "\u0152", - "Oacute": "\xd3", - "Oacute;": "\xd3", - "Ocirc": "\xd4", - "Ocirc;": "\xd4", - "Ocy;": "\u041e", - "Odblac;": "\u0150", - "Ofr;": "\U0001d512", - "Ograve": "\xd2", - "Ograve;": "\xd2", - "Omacr;": "\u014c", - "Omega;": "\u03a9", - "Omicron;": "\u039f", - "Oopf;": "\U0001d546", - "OpenCurlyDoubleQuote;": "\u201c", - "OpenCurlyQuote;": "\u2018", - "Or;": "\u2a54", - "Oscr;": "\U0001d4aa", - "Oslash": "\xd8", - "Oslash;": "\xd8", - "Otilde": "\xd5", - "Otilde;": "\xd5", - "Otimes;": "\u2a37", - "Ouml": "\xd6", - "Ouml;": "\xd6", - "OverBar;": "\u203e", - "OverBrace;": "\u23de", - "OverBracket;": "\u23b4", - "OverParenthesis;": "\u23dc", - "PartialD;": "\u2202", - "Pcy;": "\u041f", - "Pfr;": "\U0001d513", - "Phi;": "\u03a6", - "Pi;": "\u03a0", - "PlusMinus;": "\xb1", - "Poincareplane;": "\u210c", - "Popf;": "\u2119", - "Pr;": "\u2abb", - "Precedes;": "\u227a", - "PrecedesEqual;": "\u2aaf", - "PrecedesSlantEqual;": "\u227c", - "PrecedesTilde;": "\u227e", - "Prime;": "\u2033", - "Product;": "\u220f", - "Proportion;": "\u2237", - "Proportional;": "\u221d", - "Pscr;": "\U0001d4ab", - "Psi;": "\u03a8", - "QUOT": "\"", - "QUOT;": "\"", - "Qfr;": "\U0001d514", - "Qopf;": "\u211a", - "Qscr;": "\U0001d4ac", - "RBarr;": "\u2910", - "REG": "\xae", - "REG;": "\xae", - "Racute;": "\u0154", - "Rang;": "\u27eb", - "Rarr;": "\u21a0", - "Rarrtl;": "\u2916", - "Rcaron;": "\u0158", - "Rcedil;": "\u0156", - "Rcy;": "\u0420", - "Re;": "\u211c", - "ReverseElement;": "\u220b", - "ReverseEquilibrium;": "\u21cb", - "ReverseUpEquilibrium;": "\u296f", - "Rfr;": "\u211c", - "Rho;": "\u03a1", - "RightAngleBracket;": "\u27e9", - "RightArrow;": "\u2192", - "RightArrowBar;": "\u21e5", - "RightArrowLeftArrow;": "\u21c4", - "RightCeiling;": "\u2309", - "RightDoubleBracket;": "\u27e7", - "RightDownTeeVector;": "\u295d", - "RightDownVector;": "\u21c2", - "RightDownVectorBar;": "\u2955", - "RightFloor;": "\u230b", - "RightTee;": "\u22a2", - "RightTeeArrow;": "\u21a6", - "RightTeeVector;": "\u295b", - "RightTriangle;": "\u22b3", - "RightTriangleBar;": "\u29d0", - "RightTriangleEqual;": "\u22b5", - "RightUpDownVector;": "\u294f", - "RightUpTeeVector;": "\u295c", - "RightUpVector;": "\u21be", - "RightUpVectorBar;": "\u2954", - "RightVector;": "\u21c0", - "RightVectorBar;": "\u2953", - "Rightarrow;": "\u21d2", - "Ropf;": "\u211d", - "RoundImplies;": "\u2970", - "Rrightarrow;": "\u21db", - "Rscr;": "\u211b", - "Rsh;": "\u21b1", - "RuleDelayed;": "\u29f4", - "SHCHcy;": "\u0429", - "SHcy;": "\u0428", - "SOFTcy;": "\u042c", - "Sacute;": "\u015a", - "Sc;": "\u2abc", - "Scaron;": "\u0160", - "Scedil;": "\u015e", - "Scirc;": "\u015c", - "Scy;": "\u0421", - "Sfr;": "\U0001d516", - "ShortDownArrow;": "\u2193", - "ShortLeftArrow;": "\u2190", - "ShortRightArrow;": "\u2192", - "ShortUpArrow;": "\u2191", - "Sigma;": "\u03a3", - "SmallCircle;": "\u2218", - "Sopf;": "\U0001d54a", - "Sqrt;": "\u221a", - "Square;": "\u25a1", - "SquareIntersection;": "\u2293", - "SquareSubset;": "\u228f", - "SquareSubsetEqual;": "\u2291", - "SquareSuperset;": "\u2290", - "SquareSupersetEqual;": "\u2292", - "SquareUnion;": "\u2294", - "Sscr;": "\U0001d4ae", - "Star;": "\u22c6", - "Sub;": "\u22d0", - "Subset;": "\u22d0", - "SubsetEqual;": "\u2286", - "Succeeds;": "\u227b", - "SucceedsEqual;": "\u2ab0", - "SucceedsSlantEqual;": "\u227d", - "SucceedsTilde;": "\u227f", - "SuchThat;": "\u220b", - "Sum;": "\u2211", - "Sup;": "\u22d1", - "Superset;": "\u2283", - "SupersetEqual;": "\u2287", - "Supset;": "\u22d1", - "THORN": "\xde", - "THORN;": "\xde", - "TRADE;": "\u2122", - "TSHcy;": "\u040b", - "TScy;": "\u0426", - "Tab;": "\t", - "Tau;": "\u03a4", - "Tcaron;": "\u0164", - "Tcedil;": "\u0162", - "Tcy;": "\u0422", - "Tfr;": "\U0001d517", - "Therefore;": "\u2234", - "Theta;": "\u0398", - "ThickSpace;": "\u205f\u200a", - "ThinSpace;": "\u2009", - "Tilde;": "\u223c", - "TildeEqual;": "\u2243", - "TildeFullEqual;": "\u2245", - "TildeTilde;": "\u2248", - "Topf;": "\U0001d54b", - "TripleDot;": "\u20db", - "Tscr;": "\U0001d4af", - "Tstrok;": "\u0166", - "Uacute": "\xda", - "Uacute;": "\xda", - "Uarr;": "\u219f", - "Uarrocir;": "\u2949", - "Ubrcy;": "\u040e", - "Ubreve;": "\u016c", - "Ucirc": "\xdb", - "Ucirc;": "\xdb", - "Ucy;": "\u0423", - "Udblac;": "\u0170", - "Ufr;": "\U0001d518", - "Ugrave": "\xd9", - "Ugrave;": "\xd9", - "Umacr;": "\u016a", - "UnderBar;": "_", - "UnderBrace;": "\u23df", - "UnderBracket;": "\u23b5", - "UnderParenthesis;": "\u23dd", - "Union;": "\u22c3", - "UnionPlus;": "\u228e", - "Uogon;": "\u0172", - "Uopf;": "\U0001d54c", - "UpArrow;": "\u2191", - "UpArrowBar;": "\u2912", - "UpArrowDownArrow;": "\u21c5", - "UpDownArrow;": "\u2195", - "UpEquilibrium;": "\u296e", - "UpTee;": "\u22a5", - "UpTeeArrow;": "\u21a5", - "Uparrow;": "\u21d1", - "Updownarrow;": "\u21d5", - "UpperLeftArrow;": "\u2196", - "UpperRightArrow;": "\u2197", - "Upsi;": "\u03d2", - "Upsilon;": "\u03a5", - "Uring;": "\u016e", - "Uscr;": "\U0001d4b0", - "Utilde;": "\u0168", - "Uuml": "\xdc", - "Uuml;": "\xdc", - "VDash;": "\u22ab", - "Vbar;": "\u2aeb", - "Vcy;": "\u0412", - "Vdash;": "\u22a9", - "Vdashl;": "\u2ae6", - "Vee;": "\u22c1", - "Verbar;": "\u2016", - "Vert;": "\u2016", - "VerticalBar;": "\u2223", - "VerticalLine;": "|", - "VerticalSeparator;": "\u2758", - "VerticalTilde;": "\u2240", - "VeryThinSpace;": "\u200a", - "Vfr;": "\U0001d519", - "Vopf;": "\U0001d54d", - "Vscr;": "\U0001d4b1", - "Vvdash;": "\u22aa", - "Wcirc;": "\u0174", - "Wedge;": "\u22c0", - "Wfr;": "\U0001d51a", - "Wopf;": "\U0001d54e", - "Wscr;": "\U0001d4b2", - "Xfr;": "\U0001d51b", - "Xi;": "\u039e", - "Xopf;": "\U0001d54f", - "Xscr;": "\U0001d4b3", - "YAcy;": "\u042f", - "YIcy;": "\u0407", - "YUcy;": "\u042e", - "Yacute": "\xdd", - "Yacute;": "\xdd", - "Ycirc;": "\u0176", - "Ycy;": "\u042b", - "Yfr;": "\U0001d51c", - "Yopf;": "\U0001d550", - "Yscr;": "\U0001d4b4", - "Yuml;": "\u0178", - "ZHcy;": "\u0416", - "Zacute;": "\u0179", - "Zcaron;": "\u017d", - "Zcy;": "\u0417", - "Zdot;": "\u017b", - "ZeroWidthSpace;": "\u200b", - "Zeta;": "\u0396", - "Zfr;": "\u2128", - "Zopf;": "\u2124", - "Zscr;": "\U0001d4b5", - "aacute": "\xe1", - "aacute;": "\xe1", - "abreve;": "\u0103", - "ac;": "\u223e", - "acE;": "\u223e\u0333", - "acd;": "\u223f", - "acirc": "\xe2", - "acirc;": "\xe2", - "acute": "\xb4", - "acute;": "\xb4", - "acy;": "\u0430", - "aelig": "\xe6", - "aelig;": "\xe6", - "af;": "\u2061", - "afr;": "\U0001d51e", - "agrave": "\xe0", - "agrave;": "\xe0", - "alefsym;": "\u2135", - "aleph;": "\u2135", - "alpha;": "\u03b1", - "amacr;": "\u0101", - "amalg;": "\u2a3f", - "amp": "&", - "amp;": "&", - "and;": "\u2227", - "andand;": "\u2a55", - "andd;": "\u2a5c", - "andslope;": "\u2a58", - "andv;": "\u2a5a", - "ang;": "\u2220", - "ange;": "\u29a4", - "angle;": "\u2220", - "angmsd;": "\u2221", - "angmsdaa;": "\u29a8", - "angmsdab;": "\u29a9", - "angmsdac;": "\u29aa", - "angmsdad;": "\u29ab", - "angmsdae;": "\u29ac", - "angmsdaf;": "\u29ad", - "angmsdag;": "\u29ae", - "angmsdah;": "\u29af", - "angrt;": "\u221f", - "angrtvb;": "\u22be", - "angrtvbd;": "\u299d", - "angsph;": "\u2222", - "angst;": "\xc5", - "angzarr;": "\u237c", - "aogon;": "\u0105", - "aopf;": "\U0001d552", - "ap;": "\u2248", - "apE;": "\u2a70", - "apacir;": "\u2a6f", - "ape;": "\u224a", - "apid;": "\u224b", - "apos;": "'", - "approx;": "\u2248", - "approxeq;": "\u224a", - "aring": "\xe5", - "aring;": "\xe5", - "ascr;": "\U0001d4b6", - "ast;": "*", - "asymp;": "\u2248", - "asympeq;": "\u224d", - "atilde": "\xe3", - "atilde;": "\xe3", - "auml": "\xe4", - "auml;": "\xe4", - "awconint;": "\u2233", - "awint;": "\u2a11", - "bNot;": "\u2aed", - "backcong;": "\u224c", - "backepsilon;": "\u03f6", - "backprime;": "\u2035", - "backsim;": "\u223d", - "backsimeq;": "\u22cd", - "barvee;": "\u22bd", - "barwed;": "\u2305", - "barwedge;": "\u2305", - "bbrk;": "\u23b5", - "bbrktbrk;": "\u23b6", - "bcong;": "\u224c", - "bcy;": "\u0431", - "bdquo;": "\u201e", - "becaus;": "\u2235", - "because;": "\u2235", - "bemptyv;": "\u29b0", - "bepsi;": "\u03f6", - "bernou;": "\u212c", - "beta;": "\u03b2", - "beth;": "\u2136", - "between;": "\u226c", - "bfr;": "\U0001d51f", - "bigcap;": "\u22c2", - "bigcirc;": "\u25ef", - "bigcup;": "\u22c3", - "bigodot;": "\u2a00", - "bigoplus;": "\u2a01", - "bigotimes;": "\u2a02", - "bigsqcup;": "\u2a06", - "bigstar;": "\u2605", - "bigtriangledown;": "\u25bd", - "bigtriangleup;": "\u25b3", - "biguplus;": "\u2a04", - "bigvee;": "\u22c1", - "bigwedge;": "\u22c0", - "bkarow;": "\u290d", - "blacklozenge;": "\u29eb", - "blacksquare;": "\u25aa", - "blacktriangle;": "\u25b4", - "blacktriangledown;": "\u25be", - "blacktriangleleft;": "\u25c2", - "blacktriangleright;": "\u25b8", - "blank;": "\u2423", - "blk12;": "\u2592", - "blk14;": "\u2591", - "blk34;": "\u2593", - "block;": "\u2588", - "bne;": "=\u20e5", - "bnequiv;": "\u2261\u20e5", - "bnot;": "\u2310", - "bopf;": "\U0001d553", - "bot;": "\u22a5", - "bottom;": "\u22a5", - "bowtie;": "\u22c8", - "boxDL;": "\u2557", - "boxDR;": "\u2554", - "boxDl;": "\u2556", - "boxDr;": "\u2553", - "boxH;": "\u2550", - "boxHD;": "\u2566", - "boxHU;": "\u2569", - "boxHd;": "\u2564", - "boxHu;": "\u2567", - "boxUL;": "\u255d", - "boxUR;": "\u255a", - "boxUl;": "\u255c", - "boxUr;": "\u2559", - "boxV;": "\u2551", - "boxVH;": "\u256c", - "boxVL;": "\u2563", - "boxVR;": "\u2560", - "boxVh;": "\u256b", - "boxVl;": "\u2562", - "boxVr;": "\u255f", - "boxbox;": "\u29c9", - "boxdL;": "\u2555", - "boxdR;": "\u2552", - "boxdl;": "\u2510", - "boxdr;": "\u250c", - "boxh;": "\u2500", - "boxhD;": "\u2565", - "boxhU;": "\u2568", - "boxhd;": "\u252c", - "boxhu;": "\u2534", - "boxminus;": "\u229f", - "boxplus;": "\u229e", - "boxtimes;": "\u22a0", - "boxuL;": "\u255b", - "boxuR;": "\u2558", - "boxul;": "\u2518", - "boxur;": "\u2514", - "boxv;": "\u2502", - "boxvH;": "\u256a", - "boxvL;": "\u2561", - "boxvR;": "\u255e", - "boxvh;": "\u253c", - "boxvl;": "\u2524", - "boxvr;": "\u251c", - "bprime;": "\u2035", - "breve;": "\u02d8", - "brvbar": "\xa6", - "brvbar;": "\xa6", - "bscr;": "\U0001d4b7", - "bsemi;": "\u204f", - "bsim;": "\u223d", - "bsime;": "\u22cd", - "bsol;": "\\", - "bsolb;": "\u29c5", - "bsolhsub;": "\u27c8", - "bull;": "\u2022", - "bullet;": "\u2022", - "bump;": "\u224e", - "bumpE;": "\u2aae", - "bumpe;": "\u224f", - "bumpeq;": "\u224f", - "cacute;": "\u0107", - "cap;": "\u2229", - "capand;": "\u2a44", - "capbrcup;": "\u2a49", - "capcap;": "\u2a4b", - "capcup;": "\u2a47", - "capdot;": "\u2a40", - "caps;": "\u2229\ufe00", - "caret;": "\u2041", - "caron;": "\u02c7", - "ccaps;": "\u2a4d", - "ccaron;": "\u010d", - "ccedil": "\xe7", - "ccedil;": "\xe7", - "ccirc;": "\u0109", - "ccups;": "\u2a4c", - "ccupssm;": "\u2a50", - "cdot;": "\u010b", - "cedil": "\xb8", - "cedil;": "\xb8", - "cemptyv;": "\u29b2", - "cent": "\xa2", - "cent;": "\xa2", - "centerdot;": "\xb7", - "cfr;": "\U0001d520", - "chcy;": "\u0447", - "check;": "\u2713", - "checkmark;": "\u2713", - "chi;": "\u03c7", - "cir;": "\u25cb", - "cirE;": "\u29c3", - "circ;": "\u02c6", - "circeq;": "\u2257", - "circlearrowleft;": "\u21ba", - "circlearrowright;": "\u21bb", - "circledR;": "\xae", - "circledS;": "\u24c8", - "circledast;": "\u229b", - "circledcirc;": "\u229a", - "circleddash;": "\u229d", - "cire;": "\u2257", - "cirfnint;": "\u2a10", - "cirmid;": "\u2aef", - "cirscir;": "\u29c2", - "clubs;": "\u2663", - "clubsuit;": "\u2663", - "colon;": ":", - "colone;": "\u2254", - "coloneq;": "\u2254", - "comma;": ",", - "commat;": "@", - "comp;": "\u2201", - "compfn;": "\u2218", - "complement;": "\u2201", - "complexes;": "\u2102", - "cong;": "\u2245", - "congdot;": "\u2a6d", - "conint;": "\u222e", - "copf;": "\U0001d554", - "coprod;": "\u2210", - "copy": "\xa9", - "copy;": "\xa9", - "copysr;": "\u2117", - "crarr;": "\u21b5", - "cross;": "\u2717", - "cscr;": "\U0001d4b8", - "csub;": "\u2acf", - "csube;": "\u2ad1", - "csup;": "\u2ad0", - "csupe;": "\u2ad2", - "ctdot;": "\u22ef", - "cudarrl;": "\u2938", - "cudarrr;": "\u2935", - "cuepr;": "\u22de", - "cuesc;": "\u22df", - "cularr;": "\u21b6", - "cularrp;": "\u293d", - "cup;": "\u222a", - "cupbrcap;": "\u2a48", - "cupcap;": "\u2a46", - "cupcup;": "\u2a4a", - "cupdot;": "\u228d", - "cupor;": "\u2a45", - "cups;": "\u222a\ufe00", - "curarr;": "\u21b7", - "curarrm;": "\u293c", - "curlyeqprec;": "\u22de", - "curlyeqsucc;": "\u22df", - "curlyvee;": "\u22ce", - "curlywedge;": "\u22cf", - "curren": "\xa4", - "curren;": "\xa4", - "curvearrowleft;": "\u21b6", - "curvearrowright;": "\u21b7", - "cuvee;": "\u22ce", - "cuwed;": "\u22cf", - "cwconint;": "\u2232", - "cwint;": "\u2231", - "cylcty;": "\u232d", - "dArr;": "\u21d3", - "dHar;": "\u2965", - "dagger;": "\u2020", - "daleth;": "\u2138", - "darr;": "\u2193", - "dash;": "\u2010", - "dashv;": "\u22a3", - "dbkarow;": "\u290f", - "dblac;": "\u02dd", - "dcaron;": "\u010f", - "dcy;": "\u0434", - "dd;": "\u2146", - "ddagger;": "\u2021", - "ddarr;": "\u21ca", - "ddotseq;": "\u2a77", - "deg": "\xb0", - "deg;": "\xb0", - "delta;": "\u03b4", - "demptyv;": "\u29b1", - "dfisht;": "\u297f", - "dfr;": "\U0001d521", - "dharl;": "\u21c3", - "dharr;": "\u21c2", - "diam;": "\u22c4", - "diamond;": "\u22c4", - "diamondsuit;": "\u2666", - "diams;": "\u2666", - "die;": "\xa8", - "digamma;": "\u03dd", - "disin;": "\u22f2", - "div;": "\xf7", - "divide": "\xf7", - "divide;": "\xf7", - "divideontimes;": "\u22c7", - "divonx;": "\u22c7", - "djcy;": "\u0452", - "dlcorn;": "\u231e", - "dlcrop;": "\u230d", - "dollar;": "$", - "dopf;": "\U0001d555", - "dot;": "\u02d9", - "doteq;": "\u2250", - "doteqdot;": "\u2251", - "dotminus;": "\u2238", - "dotplus;": "\u2214", - "dotsquare;": "\u22a1", - "doublebarwedge;": "\u2306", - "downarrow;": "\u2193", - "downdownarrows;": "\u21ca", - "downharpoonleft;": "\u21c3", - "downharpoonright;": "\u21c2", - "drbkarow;": "\u2910", - "drcorn;": "\u231f", - "drcrop;": "\u230c", - "dscr;": "\U0001d4b9", - "dscy;": "\u0455", - "dsol;": "\u29f6", - "dstrok;": "\u0111", - "dtdot;": "\u22f1", - "dtri;": "\u25bf", - "dtrif;": "\u25be", - "duarr;": "\u21f5", - "duhar;": "\u296f", - "dwangle;": "\u29a6", - "dzcy;": "\u045f", - "dzigrarr;": "\u27ff", - "eDDot;": "\u2a77", - "eDot;": "\u2251", - "eacute": "\xe9", - "eacute;": "\xe9", - "easter;": "\u2a6e", - "ecaron;": "\u011b", - "ecir;": "\u2256", - "ecirc": "\xea", - "ecirc;": "\xea", - "ecolon;": "\u2255", - "ecy;": "\u044d", - "edot;": "\u0117", - "ee;": "\u2147", - "efDot;": "\u2252", - "efr;": "\U0001d522", - "eg;": "\u2a9a", - "egrave": "\xe8", - "egrave;": "\xe8", - "egs;": "\u2a96", - "egsdot;": "\u2a98", - "el;": "\u2a99", - "elinters;": "\u23e7", - "ell;": "\u2113", - "els;": "\u2a95", - "elsdot;": "\u2a97", - "emacr;": "\u0113", - "empty;": "\u2205", - "emptyset;": "\u2205", - "emptyv;": "\u2205", - "emsp13;": "\u2004", - "emsp14;": "\u2005", - "emsp;": "\u2003", - "eng;": "\u014b", - "ensp;": "\u2002", - "eogon;": "\u0119", - "eopf;": "\U0001d556", - "epar;": "\u22d5", - "eparsl;": "\u29e3", - "eplus;": "\u2a71", - "epsi;": "\u03b5", - "epsilon;": "\u03b5", - "epsiv;": "\u03f5", - "eqcirc;": "\u2256", - "eqcolon;": "\u2255", - "eqsim;": "\u2242", - "eqslantgtr;": "\u2a96", - "eqslantless;": "\u2a95", - "equals;": "=", - "equest;": "\u225f", - "equiv;": "\u2261", - "equivDD;": "\u2a78", - "eqvparsl;": "\u29e5", - "erDot;": "\u2253", - "erarr;": "\u2971", - "escr;": "\u212f", - "esdot;": "\u2250", - "esim;": "\u2242", - "eta;": "\u03b7", - "eth": "\xf0", - "eth;": "\xf0", - "euml": "\xeb", - "euml;": "\xeb", - "euro;": "\u20ac", - "excl;": "!", - "exist;": "\u2203", - "expectation;": "\u2130", - "exponentiale;": "\u2147", - "fallingdotseq;": "\u2252", - "fcy;": "\u0444", - "female;": "\u2640", - "ffilig;": "\ufb03", - "fflig;": "\ufb00", - "ffllig;": "\ufb04", - "ffr;": "\U0001d523", - "filig;": "\ufb01", - "fjlig;": "fj", - "flat;": "\u266d", - "fllig;": "\ufb02", - "fltns;": "\u25b1", - "fnof;": "\u0192", - "fopf;": "\U0001d557", - "forall;": "\u2200", - "fork;": "\u22d4", - "forkv;": "\u2ad9", - "fpartint;": "\u2a0d", - "frac12": "\xbd", - "frac12;": "\xbd", - "frac13;": "\u2153", - "frac14": "\xbc", - "frac14;": "\xbc", - "frac15;": "\u2155", - "frac16;": "\u2159", - "frac18;": "\u215b", - "frac23;": "\u2154", - "frac25;": "\u2156", - "frac34": "\xbe", - "frac34;": "\xbe", - "frac35;": "\u2157", - "frac38;": "\u215c", - "frac45;": "\u2158", - "frac56;": "\u215a", - "frac58;": "\u215d", - "frac78;": "\u215e", - "frasl;": "\u2044", - "frown;": "\u2322", - "fscr;": "\U0001d4bb", - "gE;": "\u2267", - "gEl;": "\u2a8c", - "gacute;": "\u01f5", - "gamma;": "\u03b3", - "gammad;": "\u03dd", - "gap;": "\u2a86", - "gbreve;": "\u011f", - "gcirc;": "\u011d", - "gcy;": "\u0433", - "gdot;": "\u0121", - "ge;": "\u2265", - "gel;": "\u22db", - "geq;": "\u2265", - "geqq;": "\u2267", - "geqslant;": "\u2a7e", - "ges;": "\u2a7e", - "gescc;": "\u2aa9", - "gesdot;": "\u2a80", - "gesdoto;": "\u2a82", - "gesdotol;": "\u2a84", - "gesl;": "\u22db\ufe00", - "gesles;": "\u2a94", - "gfr;": "\U0001d524", - "gg;": "\u226b", - "ggg;": "\u22d9", - "gimel;": "\u2137", - "gjcy;": "\u0453", - "gl;": "\u2277", - "glE;": "\u2a92", - "gla;": "\u2aa5", - "glj;": "\u2aa4", - "gnE;": "\u2269", - "gnap;": "\u2a8a", - "gnapprox;": "\u2a8a", - "gne;": "\u2a88", - "gneq;": "\u2a88", - "gneqq;": "\u2269", - "gnsim;": "\u22e7", - "gopf;": "\U0001d558", - "grave;": "`", - "gscr;": "\u210a", - "gsim;": "\u2273", - "gsime;": "\u2a8e", - "gsiml;": "\u2a90", - "gt": ">", - "gt;": ">", - "gtcc;": "\u2aa7", - "gtcir;": "\u2a7a", - "gtdot;": "\u22d7", - "gtlPar;": "\u2995", - "gtquest;": "\u2a7c", - "gtrapprox;": "\u2a86", - "gtrarr;": "\u2978", - "gtrdot;": "\u22d7", - "gtreqless;": "\u22db", - "gtreqqless;": "\u2a8c", - "gtrless;": "\u2277", - "gtrsim;": "\u2273", - "gvertneqq;": "\u2269\ufe00", - "gvnE;": "\u2269\ufe00", - "hArr;": "\u21d4", - "hairsp;": "\u200a", - "half;": "\xbd", - "hamilt;": "\u210b", - "hardcy;": "\u044a", - "harr;": "\u2194", - "harrcir;": "\u2948", - "harrw;": "\u21ad", - "hbar;": "\u210f", - "hcirc;": "\u0125", - "hearts;": "\u2665", - "heartsuit;": "\u2665", - "hellip;": "\u2026", - "hercon;": "\u22b9", - "hfr;": "\U0001d525", - "hksearow;": "\u2925", - "hkswarow;": "\u2926", - "hoarr;": "\u21ff", - "homtht;": "\u223b", - "hookleftarrow;": "\u21a9", - "hookrightarrow;": "\u21aa", - "hopf;": "\U0001d559", - "horbar;": "\u2015", - "hscr;": "\U0001d4bd", - "hslash;": "\u210f", - "hstrok;": "\u0127", - "hybull;": "\u2043", - "hyphen;": "\u2010", - "iacute": "\xed", - "iacute;": "\xed", - "ic;": "\u2063", - "icirc": "\xee", - "icirc;": "\xee", - "icy;": "\u0438", - "iecy;": "\u0435", - "iexcl": "\xa1", - "iexcl;": "\xa1", - "iff;": "\u21d4", - "ifr;": "\U0001d526", - "igrave": "\xec", - "igrave;": "\xec", - "ii;": "\u2148", - "iiiint;": "\u2a0c", - "iiint;": "\u222d", - "iinfin;": "\u29dc", - "iiota;": "\u2129", - "ijlig;": "\u0133", - "imacr;": "\u012b", - "image;": "\u2111", - "imagline;": "\u2110", - "imagpart;": "\u2111", - "imath;": "\u0131", - "imof;": "\u22b7", - "imped;": "\u01b5", - "in;": "\u2208", - "incare;": "\u2105", - "infin;": "\u221e", - "infintie;": "\u29dd", - "inodot;": "\u0131", - "int;": "\u222b", - "intcal;": "\u22ba", - "integers;": "\u2124", - "intercal;": "\u22ba", - "intlarhk;": "\u2a17", - "intprod;": "\u2a3c", - "iocy;": "\u0451", - "iogon;": "\u012f", - "iopf;": "\U0001d55a", - "iota;": "\u03b9", - "iprod;": "\u2a3c", - "iquest": "\xbf", - "iquest;": "\xbf", - "iscr;": "\U0001d4be", - "isin;": "\u2208", - "isinE;": "\u22f9", - "isindot;": "\u22f5", - "isins;": "\u22f4", - "isinsv;": "\u22f3", - "isinv;": "\u2208", - "it;": "\u2062", - "itilde;": "\u0129", - "iukcy;": "\u0456", - "iuml": "\xef", - "iuml;": "\xef", - "jcirc;": "\u0135", - "jcy;": "\u0439", - "jfr;": "\U0001d527", - "jmath;": "\u0237", - "jopf;": "\U0001d55b", - "jscr;": "\U0001d4bf", - "jsercy;": "\u0458", - "jukcy;": "\u0454", - "kappa;": "\u03ba", - "kappav;": "\u03f0", - "kcedil;": "\u0137", - "kcy;": "\u043a", - "kfr;": "\U0001d528", - "kgreen;": "\u0138", - "khcy;": "\u0445", - "kjcy;": "\u045c", - "kopf;": "\U0001d55c", - "kscr;": "\U0001d4c0", - "lAarr;": "\u21da", - "lArr;": "\u21d0", - "lAtail;": "\u291b", - "lBarr;": "\u290e", - "lE;": "\u2266", - "lEg;": "\u2a8b", - "lHar;": "\u2962", - "lacute;": "\u013a", - "laemptyv;": "\u29b4", - "lagran;": "\u2112", - "lambda;": "\u03bb", - "lang;": "\u27e8", - "langd;": "\u2991", - "langle;": "\u27e8", - "lap;": "\u2a85", - "laquo": "\xab", - "laquo;": "\xab", - "larr;": "\u2190", - "larrb;": "\u21e4", - "larrbfs;": "\u291f", - "larrfs;": "\u291d", - "larrhk;": "\u21a9", - "larrlp;": "\u21ab", - "larrpl;": "\u2939", - "larrsim;": "\u2973", - "larrtl;": "\u21a2", - "lat;": "\u2aab", - "latail;": "\u2919", - "late;": "\u2aad", - "lates;": "\u2aad\ufe00", - "lbarr;": "\u290c", - "lbbrk;": "\u2772", - "lbrace;": "{", - "lbrack;": "[", - "lbrke;": "\u298b", - "lbrksld;": "\u298f", - "lbrkslu;": "\u298d", - "lcaron;": "\u013e", - "lcedil;": "\u013c", - "lceil;": "\u2308", - "lcub;": "{", - "lcy;": "\u043b", - "ldca;": "\u2936", - "ldquo;": "\u201c", - "ldquor;": "\u201e", - "ldrdhar;": "\u2967", - "ldrushar;": "\u294b", - "ldsh;": "\u21b2", - "le;": "\u2264", - "leftarrow;": "\u2190", - "leftarrowtail;": "\u21a2", - "leftharpoondown;": "\u21bd", - "leftharpoonup;": "\u21bc", - "leftleftarrows;": "\u21c7", - "leftrightarrow;": "\u2194", - "leftrightarrows;": "\u21c6", - "leftrightharpoons;": "\u21cb", - "leftrightsquigarrow;": "\u21ad", - "leftthreetimes;": "\u22cb", - "leg;": "\u22da", - "leq;": "\u2264", - "leqq;": "\u2266", - "leqslant;": "\u2a7d", - "les;": "\u2a7d", - "lescc;": "\u2aa8", - "lesdot;": "\u2a7f", - "lesdoto;": "\u2a81", - "lesdotor;": "\u2a83", - "lesg;": "\u22da\ufe00", - "lesges;": "\u2a93", - "lessapprox;": "\u2a85", - "lessdot;": "\u22d6", - "lesseqgtr;": "\u22da", - "lesseqqgtr;": "\u2a8b", - "lessgtr;": "\u2276", - "lesssim;": "\u2272", - "lfisht;": "\u297c", - "lfloor;": "\u230a", - "lfr;": "\U0001d529", - "lg;": "\u2276", - "lgE;": "\u2a91", - "lhard;": "\u21bd", - "lharu;": "\u21bc", - "lharul;": "\u296a", - "lhblk;": "\u2584", - "ljcy;": "\u0459", - "ll;": "\u226a", - "llarr;": "\u21c7", - "llcorner;": "\u231e", - "llhard;": "\u296b", - "lltri;": "\u25fa", - "lmidot;": "\u0140", - "lmoust;": "\u23b0", - "lmoustache;": "\u23b0", - "lnE;": "\u2268", - "lnap;": "\u2a89", - "lnapprox;": "\u2a89", - "lne;": "\u2a87", - "lneq;": "\u2a87", - "lneqq;": "\u2268", - "lnsim;": "\u22e6", - "loang;": "\u27ec", - "loarr;": "\u21fd", - "lobrk;": "\u27e6", - "longleftarrow;": "\u27f5", - "longleftrightarrow;": "\u27f7", - "longmapsto;": "\u27fc", - "longrightarrow;": "\u27f6", - "looparrowleft;": "\u21ab", - "looparrowright;": "\u21ac", - "lopar;": "\u2985", - "lopf;": "\U0001d55d", - "loplus;": "\u2a2d", - "lotimes;": "\u2a34", - "lowast;": "\u2217", - "lowbar;": "_", - "loz;": "\u25ca", - "lozenge;": "\u25ca", - "lozf;": "\u29eb", - "lpar;": "(", - "lparlt;": "\u2993", - "lrarr;": "\u21c6", - "lrcorner;": "\u231f", - "lrhar;": "\u21cb", - "lrhard;": "\u296d", - "lrm;": "\u200e", - "lrtri;": "\u22bf", - "lsaquo;": "\u2039", - "lscr;": "\U0001d4c1", - "lsh;": "\u21b0", - "lsim;": "\u2272", - "lsime;": "\u2a8d", - "lsimg;": "\u2a8f", - "lsqb;": "[", - "lsquo;": "\u2018", - "lsquor;": "\u201a", - "lstrok;": "\u0142", - "lt": "<", - "lt;": "<", - "ltcc;": "\u2aa6", - "ltcir;": "\u2a79", - "ltdot;": "\u22d6", - "lthree;": "\u22cb", - "ltimes;": "\u22c9", - "ltlarr;": "\u2976", - "ltquest;": "\u2a7b", - "ltrPar;": "\u2996", - "ltri;": "\u25c3", - "ltrie;": "\u22b4", - "ltrif;": "\u25c2", - "lurdshar;": "\u294a", - "luruhar;": "\u2966", - "lvertneqq;": "\u2268\ufe00", - "lvnE;": "\u2268\ufe00", - "mDDot;": "\u223a", - "macr": "\xaf", - "macr;": "\xaf", - "male;": "\u2642", - "malt;": "\u2720", - "maltese;": "\u2720", - "map;": "\u21a6", - "mapsto;": "\u21a6", - "mapstodown;": "\u21a7", - "mapstoleft;": "\u21a4", - "mapstoup;": "\u21a5", - "marker;": "\u25ae", - "mcomma;": "\u2a29", - "mcy;": "\u043c", - "mdash;": "\u2014", - "measuredangle;": "\u2221", - "mfr;": "\U0001d52a", - "mho;": "\u2127", - "micro": "\xb5", - "micro;": "\xb5", - "mid;": "\u2223", - "midast;": "*", - "midcir;": "\u2af0", - "middot": "\xb7", - "middot;": "\xb7", - "minus;": "\u2212", - "minusb;": "\u229f", - "minusd;": "\u2238", - "minusdu;": "\u2a2a", - "mlcp;": "\u2adb", - "mldr;": "\u2026", - "mnplus;": "\u2213", - "models;": "\u22a7", - "mopf;": "\U0001d55e", - "mp;": "\u2213", - "mscr;": "\U0001d4c2", - "mstpos;": "\u223e", - "mu;": "\u03bc", - "multimap;": "\u22b8", - "mumap;": "\u22b8", - "nGg;": "\u22d9\u0338", - "nGt;": "\u226b\u20d2", - "nGtv;": "\u226b\u0338", - "nLeftarrow;": "\u21cd", - "nLeftrightarrow;": "\u21ce", - "nLl;": "\u22d8\u0338", - "nLt;": "\u226a\u20d2", - "nLtv;": "\u226a\u0338", - "nRightarrow;": "\u21cf", - "nVDash;": "\u22af", - "nVdash;": "\u22ae", - "nabla;": "\u2207", - "nacute;": "\u0144", - "nang;": "\u2220\u20d2", - "nap;": "\u2249", - "napE;": "\u2a70\u0338", - "napid;": "\u224b\u0338", - "napos;": "\u0149", - "napprox;": "\u2249", - "natur;": "\u266e", - "natural;": "\u266e", - "naturals;": "\u2115", - "nbsp": "\xa0", - "nbsp;": "\xa0", - "nbump;": "\u224e\u0338", - "nbumpe;": "\u224f\u0338", - "ncap;": "\u2a43", - "ncaron;": "\u0148", - "ncedil;": "\u0146", - "ncong;": "\u2247", - "ncongdot;": "\u2a6d\u0338", - "ncup;": "\u2a42", - "ncy;": "\u043d", - "ndash;": "\u2013", - "ne;": "\u2260", - "neArr;": "\u21d7", - "nearhk;": "\u2924", - "nearr;": "\u2197", - "nearrow;": "\u2197", - "nedot;": "\u2250\u0338", - "nequiv;": "\u2262", - "nesear;": "\u2928", - "nesim;": "\u2242\u0338", - "nexist;": "\u2204", - "nexists;": "\u2204", - "nfr;": "\U0001d52b", - "ngE;": "\u2267\u0338", - "nge;": "\u2271", - "ngeq;": "\u2271", - "ngeqq;": "\u2267\u0338", - "ngeqslant;": "\u2a7e\u0338", - "nges;": "\u2a7e\u0338", - "ngsim;": "\u2275", - "ngt;": "\u226f", - "ngtr;": "\u226f", - "nhArr;": "\u21ce", - "nharr;": "\u21ae", - "nhpar;": "\u2af2", - "ni;": "\u220b", - "nis;": "\u22fc", - "nisd;": "\u22fa", - "niv;": "\u220b", - "njcy;": "\u045a", - "nlArr;": "\u21cd", - "nlE;": "\u2266\u0338", - "nlarr;": "\u219a", - "nldr;": "\u2025", - "nle;": "\u2270", - "nleftarrow;": "\u219a", - "nleftrightarrow;": "\u21ae", - "nleq;": "\u2270", - "nleqq;": "\u2266\u0338", - "nleqslant;": "\u2a7d\u0338", - "nles;": "\u2a7d\u0338", - "nless;": "\u226e", - "nlsim;": "\u2274", - "nlt;": "\u226e", - "nltri;": "\u22ea", - "nltrie;": "\u22ec", - "nmid;": "\u2224", - "nopf;": "\U0001d55f", - "not": "\xac", - "not;": "\xac", - "notin;": "\u2209", - "notinE;": "\u22f9\u0338", - "notindot;": "\u22f5\u0338", - "notinva;": "\u2209", - "notinvb;": "\u22f7", - "notinvc;": "\u22f6", - "notni;": "\u220c", - "notniva;": "\u220c", - "notnivb;": "\u22fe", - "notnivc;": "\u22fd", - "npar;": "\u2226", - "nparallel;": "\u2226", - "nparsl;": "\u2afd\u20e5", - "npart;": "\u2202\u0338", - "npolint;": "\u2a14", - "npr;": "\u2280", - "nprcue;": "\u22e0", - "npre;": "\u2aaf\u0338", - "nprec;": "\u2280", - "npreceq;": "\u2aaf\u0338", - "nrArr;": "\u21cf", - "nrarr;": "\u219b", - "nrarrc;": "\u2933\u0338", - "nrarrw;": "\u219d\u0338", - "nrightarrow;": "\u219b", - "nrtri;": "\u22eb", - "nrtrie;": "\u22ed", - "nsc;": "\u2281", - "nsccue;": "\u22e1", - "nsce;": "\u2ab0\u0338", - "nscr;": "\U0001d4c3", - "nshortmid;": "\u2224", - "nshortparallel;": "\u2226", - "nsim;": "\u2241", - "nsime;": "\u2244", - "nsimeq;": "\u2244", - "nsmid;": "\u2224", - "nspar;": "\u2226", - "nsqsube;": "\u22e2", - "nsqsupe;": "\u22e3", - "nsub;": "\u2284", - "nsubE;": "\u2ac5\u0338", - "nsube;": "\u2288", - "nsubset;": "\u2282\u20d2", - "nsubseteq;": "\u2288", - "nsubseteqq;": "\u2ac5\u0338", - "nsucc;": "\u2281", - "nsucceq;": "\u2ab0\u0338", - "nsup;": "\u2285", - "nsupE;": "\u2ac6\u0338", - "nsupe;": "\u2289", - "nsupset;": "\u2283\u20d2", - "nsupseteq;": "\u2289", - "nsupseteqq;": "\u2ac6\u0338", - "ntgl;": "\u2279", - "ntilde": "\xf1", - "ntilde;": "\xf1", - "ntlg;": "\u2278", - "ntriangleleft;": "\u22ea", - "ntrianglelefteq;": "\u22ec", - "ntriangleright;": "\u22eb", - "ntrianglerighteq;": "\u22ed", - "nu;": "\u03bd", - "num;": "#", - "numero;": "\u2116", - "numsp;": "\u2007", - "nvDash;": "\u22ad", - "nvHarr;": "\u2904", - "nvap;": "\u224d\u20d2", - "nvdash;": "\u22ac", - "nvge;": "\u2265\u20d2", - "nvgt;": ">\u20d2", - "nvinfin;": "\u29de", - "nvlArr;": "\u2902", - "nvle;": "\u2264\u20d2", - "nvlt;": "<\u20d2", - "nvltrie;": "\u22b4\u20d2", - "nvrArr;": "\u2903", - "nvrtrie;": "\u22b5\u20d2", - "nvsim;": "\u223c\u20d2", - "nwArr;": "\u21d6", - "nwarhk;": "\u2923", - "nwarr;": "\u2196", - "nwarrow;": "\u2196", - "nwnear;": "\u2927", - "oS;": "\u24c8", - "oacute": "\xf3", - "oacute;": "\xf3", - "oast;": "\u229b", - "ocir;": "\u229a", - "ocirc": "\xf4", - "ocirc;": "\xf4", - "ocy;": "\u043e", - "odash;": "\u229d", - "odblac;": "\u0151", - "odiv;": "\u2a38", - "odot;": "\u2299", - "odsold;": "\u29bc", - "oelig;": "\u0153", - "ofcir;": "\u29bf", - "ofr;": "\U0001d52c", - "ogon;": "\u02db", - "ograve": "\xf2", - "ograve;": "\xf2", - "ogt;": "\u29c1", - "ohbar;": "\u29b5", - "ohm;": "\u03a9", - "oint;": "\u222e", - "olarr;": "\u21ba", - "olcir;": "\u29be", - "olcross;": "\u29bb", - "oline;": "\u203e", - "olt;": "\u29c0", - "omacr;": "\u014d", - "omega;": "\u03c9", - "omicron;": "\u03bf", - "omid;": "\u29b6", - "ominus;": "\u2296", - "oopf;": "\U0001d560", - "opar;": "\u29b7", - "operp;": "\u29b9", - "oplus;": "\u2295", - "or;": "\u2228", - "orarr;": "\u21bb", - "ord;": "\u2a5d", - "order;": "\u2134", - "orderof;": "\u2134", - "ordf": "\xaa", - "ordf;": "\xaa", - "ordm": "\xba", - "ordm;": "\xba", - "origof;": "\u22b6", - "oror;": "\u2a56", - "orslope;": "\u2a57", - "orv;": "\u2a5b", - "oscr;": "\u2134", - "oslash": "\xf8", - "oslash;": "\xf8", - "osol;": "\u2298", - "otilde": "\xf5", - "otilde;": "\xf5", - "otimes;": "\u2297", - "otimesas;": "\u2a36", - "ouml": "\xf6", - "ouml;": "\xf6", - "ovbar;": "\u233d", - "par;": "\u2225", - "para": "\xb6", - "para;": "\xb6", - "parallel;": "\u2225", - "parsim;": "\u2af3", - "parsl;": "\u2afd", - "part;": "\u2202", - "pcy;": "\u043f", - "percnt;": "%", - "period;": ".", - "permil;": "\u2030", - "perp;": "\u22a5", - "pertenk;": "\u2031", - "pfr;": "\U0001d52d", - "phi;": "\u03c6", - "phiv;": "\u03d5", - "phmmat;": "\u2133", - "phone;": "\u260e", - "pi;": "\u03c0", - "pitchfork;": "\u22d4", - "piv;": "\u03d6", - "planck;": "\u210f", - "planckh;": "\u210e", - "plankv;": "\u210f", - "plus;": "+", - "plusacir;": "\u2a23", - "plusb;": "\u229e", - "pluscir;": "\u2a22", - "plusdo;": "\u2214", - "plusdu;": "\u2a25", - "pluse;": "\u2a72", - "plusmn": "\xb1", - "plusmn;": "\xb1", - "plussim;": "\u2a26", - "plustwo;": "\u2a27", - "pm;": "\xb1", - "pointint;": "\u2a15", - "popf;": "\U0001d561", - "pound": "\xa3", - "pound;": "\xa3", - "pr;": "\u227a", - "prE;": "\u2ab3", - "prap;": "\u2ab7", - "prcue;": "\u227c", - "pre;": "\u2aaf", - "prec;": "\u227a", - "precapprox;": "\u2ab7", - "preccurlyeq;": "\u227c", - "preceq;": "\u2aaf", - "precnapprox;": "\u2ab9", - "precneqq;": "\u2ab5", - "precnsim;": "\u22e8", - "precsim;": "\u227e", - "prime;": "\u2032", - "primes;": "\u2119", - "prnE;": "\u2ab5", - "prnap;": "\u2ab9", - "prnsim;": "\u22e8", - "prod;": "\u220f", - "profalar;": "\u232e", - "profline;": "\u2312", - "profsurf;": "\u2313", - "prop;": "\u221d", - "propto;": "\u221d", - "prsim;": "\u227e", - "prurel;": "\u22b0", - "pscr;": "\U0001d4c5", - "psi;": "\u03c8", - "puncsp;": "\u2008", - "qfr;": "\U0001d52e", - "qint;": "\u2a0c", - "qopf;": "\U0001d562", - "qprime;": "\u2057", - "qscr;": "\U0001d4c6", - "quaternions;": "\u210d", - "quatint;": "\u2a16", - "quest;": "?", - "questeq;": "\u225f", - "quot": "\"", - "quot;": "\"", - "rAarr;": "\u21db", - "rArr;": "\u21d2", - "rAtail;": "\u291c", - "rBarr;": "\u290f", - "rHar;": "\u2964", - "race;": "\u223d\u0331", - "racute;": "\u0155", - "radic;": "\u221a", - "raemptyv;": "\u29b3", - "rang;": "\u27e9", - "rangd;": "\u2992", - "range;": "\u29a5", - "rangle;": "\u27e9", - "raquo": "\xbb", - "raquo;": "\xbb", - "rarr;": "\u2192", - "rarrap;": "\u2975", - "rarrb;": "\u21e5", - "rarrbfs;": "\u2920", - "rarrc;": "\u2933", - "rarrfs;": "\u291e", - "rarrhk;": "\u21aa", - "rarrlp;": "\u21ac", - "rarrpl;": "\u2945", - "rarrsim;": "\u2974", - "rarrtl;": "\u21a3", - "rarrw;": "\u219d", - "ratail;": "\u291a", - "ratio;": "\u2236", - "rationals;": "\u211a", - "rbarr;": "\u290d", - "rbbrk;": "\u2773", - "rbrace;": "}", - "rbrack;": "]", - "rbrke;": "\u298c", - "rbrksld;": "\u298e", - "rbrkslu;": "\u2990", - "rcaron;": "\u0159", - "rcedil;": "\u0157", - "rceil;": "\u2309", - "rcub;": "}", - "rcy;": "\u0440", - "rdca;": "\u2937", - "rdldhar;": "\u2969", - "rdquo;": "\u201d", - "rdquor;": "\u201d", - "rdsh;": "\u21b3", - "real;": "\u211c", - "realine;": "\u211b", - "realpart;": "\u211c", - "reals;": "\u211d", - "rect;": "\u25ad", - "reg": "\xae", - "reg;": "\xae", - "rfisht;": "\u297d", - "rfloor;": "\u230b", - "rfr;": "\U0001d52f", - "rhard;": "\u21c1", - "rharu;": "\u21c0", - "rharul;": "\u296c", - "rho;": "\u03c1", - "rhov;": "\u03f1", - "rightarrow;": "\u2192", - "rightarrowtail;": "\u21a3", - "rightharpoondown;": "\u21c1", - "rightharpoonup;": "\u21c0", - "rightleftarrows;": "\u21c4", - "rightleftharpoons;": "\u21cc", - "rightrightarrows;": "\u21c9", - "rightsquigarrow;": "\u219d", - "rightthreetimes;": "\u22cc", - "ring;": "\u02da", - "risingdotseq;": "\u2253", - "rlarr;": "\u21c4", - "rlhar;": "\u21cc", - "rlm;": "\u200f", - "rmoust;": "\u23b1", - "rmoustache;": "\u23b1", - "rnmid;": "\u2aee", - "roang;": "\u27ed", - "roarr;": "\u21fe", - "robrk;": "\u27e7", - "ropar;": "\u2986", - "ropf;": "\U0001d563", - "roplus;": "\u2a2e", - "rotimes;": "\u2a35", - "rpar;": ")", - "rpargt;": "\u2994", - "rppolint;": "\u2a12", - "rrarr;": "\u21c9", - "rsaquo;": "\u203a", - "rscr;": "\U0001d4c7", - "rsh;": "\u21b1", - "rsqb;": "]", - "rsquo;": "\u2019", - "rsquor;": "\u2019", - "rthree;": "\u22cc", - "rtimes;": "\u22ca", - "rtri;": "\u25b9", - "rtrie;": "\u22b5", - "rtrif;": "\u25b8", - "rtriltri;": "\u29ce", - "ruluhar;": "\u2968", - "rx;": "\u211e", - "sacute;": "\u015b", - "sbquo;": "\u201a", - "sc;": "\u227b", - "scE;": "\u2ab4", - "scap;": "\u2ab8", - "scaron;": "\u0161", - "sccue;": "\u227d", - "sce;": "\u2ab0", - "scedil;": "\u015f", - "scirc;": "\u015d", - "scnE;": "\u2ab6", - "scnap;": "\u2aba", - "scnsim;": "\u22e9", - "scpolint;": "\u2a13", - "scsim;": "\u227f", - "scy;": "\u0441", - "sdot;": "\u22c5", - "sdotb;": "\u22a1", - "sdote;": "\u2a66", - "seArr;": "\u21d8", - "searhk;": "\u2925", - "searr;": "\u2198", - "searrow;": "\u2198", - "sect": "\xa7", - "sect;": "\xa7", - "semi;": ";", - "seswar;": "\u2929", - "setminus;": "\u2216", - "setmn;": "\u2216", - "sext;": "\u2736", - "sfr;": "\U0001d530", - "sfrown;": "\u2322", - "sharp;": "\u266f", - "shchcy;": "\u0449", - "shcy;": "\u0448", - "shortmid;": "\u2223", - "shortparallel;": "\u2225", - "shy": "\xad", - "shy;": "\xad", - "sigma;": "\u03c3", - "sigmaf;": "\u03c2", - "sigmav;": "\u03c2", - "sim;": "\u223c", - "simdot;": "\u2a6a", - "sime;": "\u2243", - "simeq;": "\u2243", - "simg;": "\u2a9e", - "simgE;": "\u2aa0", - "siml;": "\u2a9d", - "simlE;": "\u2a9f", - "simne;": "\u2246", - "simplus;": "\u2a24", - "simrarr;": "\u2972", - "slarr;": "\u2190", - "smallsetminus;": "\u2216", - "smashp;": "\u2a33", - "smeparsl;": "\u29e4", - "smid;": "\u2223", - "smile;": "\u2323", - "smt;": "\u2aaa", - "smte;": "\u2aac", - "smtes;": "\u2aac\ufe00", - "softcy;": "\u044c", - "sol;": "/", - "solb;": "\u29c4", - "solbar;": "\u233f", - "sopf;": "\U0001d564", - "spades;": "\u2660", - "spadesuit;": "\u2660", - "spar;": "\u2225", - "sqcap;": "\u2293", - "sqcaps;": "\u2293\ufe00", - "sqcup;": "\u2294", - "sqcups;": "\u2294\ufe00", - "sqsub;": "\u228f", - "sqsube;": "\u2291", - "sqsubset;": "\u228f", - "sqsubseteq;": "\u2291", - "sqsup;": "\u2290", - "sqsupe;": "\u2292", - "sqsupset;": "\u2290", - "sqsupseteq;": "\u2292", - "squ;": "\u25a1", - "square;": "\u25a1", - "squarf;": "\u25aa", - "squf;": "\u25aa", - "srarr;": "\u2192", - "sscr;": "\U0001d4c8", - "ssetmn;": "\u2216", - "ssmile;": "\u2323", - "sstarf;": "\u22c6", - "star;": "\u2606", - "starf;": "\u2605", - "straightepsilon;": "\u03f5", - "straightphi;": "\u03d5", - "strns;": "\xaf", - "sub;": "\u2282", - "subE;": "\u2ac5", - "subdot;": "\u2abd", - "sube;": "\u2286", - "subedot;": "\u2ac3", - "submult;": "\u2ac1", - "subnE;": "\u2acb", - "subne;": "\u228a", - "subplus;": "\u2abf", - "subrarr;": "\u2979", - "subset;": "\u2282", - "subseteq;": "\u2286", - "subseteqq;": "\u2ac5", - "subsetneq;": "\u228a", - "subsetneqq;": "\u2acb", - "subsim;": "\u2ac7", - "subsub;": "\u2ad5", - "subsup;": "\u2ad3", - "succ;": "\u227b", - "succapprox;": "\u2ab8", - "succcurlyeq;": "\u227d", - "succeq;": "\u2ab0", - "succnapprox;": "\u2aba", - "succneqq;": "\u2ab6", - "succnsim;": "\u22e9", - "succsim;": "\u227f", - "sum;": "\u2211", - "sung;": "\u266a", - "sup1": "\xb9", - "sup1;": "\xb9", - "sup2": "\xb2", - "sup2;": "\xb2", - "sup3": "\xb3", - "sup3;": "\xb3", - "sup;": "\u2283", - "supE;": "\u2ac6", - "supdot;": "\u2abe", - "supdsub;": "\u2ad8", - "supe;": "\u2287", - "supedot;": "\u2ac4", - "suphsol;": "\u27c9", - "suphsub;": "\u2ad7", - "suplarr;": "\u297b", - "supmult;": "\u2ac2", - "supnE;": "\u2acc", - "supne;": "\u228b", - "supplus;": "\u2ac0", - "supset;": "\u2283", - "supseteq;": "\u2287", - "supseteqq;": "\u2ac6", - "supsetneq;": "\u228b", - "supsetneqq;": "\u2acc", - "supsim;": "\u2ac8", - "supsub;": "\u2ad4", - "supsup;": "\u2ad6", - "swArr;": "\u21d9", - "swarhk;": "\u2926", - "swarr;": "\u2199", - "swarrow;": "\u2199", - "swnwar;": "\u292a", - "szlig": "\xdf", - "szlig;": "\xdf", - "target;": "\u2316", - "tau;": "\u03c4", - "tbrk;": "\u23b4", - "tcaron;": "\u0165", - "tcedil;": "\u0163", - "tcy;": "\u0442", - "tdot;": "\u20db", - "telrec;": "\u2315", - "tfr;": "\U0001d531", - "there4;": "\u2234", - "therefore;": "\u2234", - "theta;": "\u03b8", - "thetasym;": "\u03d1", - "thetav;": "\u03d1", - "thickapprox;": "\u2248", - "thicksim;": "\u223c", - "thinsp;": "\u2009", - "thkap;": "\u2248", - "thksim;": "\u223c", - "thorn": "\xfe", - "thorn;": "\xfe", - "tilde;": "\u02dc", - "times": "\xd7", - "times;": "\xd7", - "timesb;": "\u22a0", - "timesbar;": "\u2a31", - "timesd;": "\u2a30", - "tint;": "\u222d", - "toea;": "\u2928", - "top;": "\u22a4", - "topbot;": "\u2336", - "topcir;": "\u2af1", - "topf;": "\U0001d565", - "topfork;": "\u2ada", - "tosa;": "\u2929", - "tprime;": "\u2034", - "trade;": "\u2122", - "triangle;": "\u25b5", - "triangledown;": "\u25bf", - "triangleleft;": "\u25c3", - "trianglelefteq;": "\u22b4", - "triangleq;": "\u225c", - "triangleright;": "\u25b9", - "trianglerighteq;": "\u22b5", - "tridot;": "\u25ec", - "trie;": "\u225c", - "triminus;": "\u2a3a", - "triplus;": "\u2a39", - "trisb;": "\u29cd", - "tritime;": "\u2a3b", - "trpezium;": "\u23e2", - "tscr;": "\U0001d4c9", - "tscy;": "\u0446", - "tshcy;": "\u045b", - "tstrok;": "\u0167", - "twixt;": "\u226c", - "twoheadleftarrow;": "\u219e", - "twoheadrightarrow;": "\u21a0", - "uArr;": "\u21d1", - "uHar;": "\u2963", - "uacute": "\xfa", - "uacute;": "\xfa", - "uarr;": "\u2191", - "ubrcy;": "\u045e", - "ubreve;": "\u016d", - "ucirc": "\xfb", - "ucirc;": "\xfb", - "ucy;": "\u0443", - "udarr;": "\u21c5", - "udblac;": "\u0171", - "udhar;": "\u296e", - "ufisht;": "\u297e", - "ufr;": "\U0001d532", - "ugrave": "\xf9", - "ugrave;": "\xf9", - "uharl;": "\u21bf", - "uharr;": "\u21be", - "uhblk;": "\u2580", - "ulcorn;": "\u231c", - "ulcorner;": "\u231c", - "ulcrop;": "\u230f", - "ultri;": "\u25f8", - "umacr;": "\u016b", - "uml": "\xa8", - "uml;": "\xa8", - "uogon;": "\u0173", - "uopf;": "\U0001d566", - "uparrow;": "\u2191", - "updownarrow;": "\u2195", - "upharpoonleft;": "\u21bf", - "upharpoonright;": "\u21be", - "uplus;": "\u228e", - "upsi;": "\u03c5", - "upsih;": "\u03d2", - "upsilon;": "\u03c5", - "upuparrows;": "\u21c8", - "urcorn;": "\u231d", - "urcorner;": "\u231d", - "urcrop;": "\u230e", - "uring;": "\u016f", - "urtri;": "\u25f9", - "uscr;": "\U0001d4ca", - "utdot;": "\u22f0", - "utilde;": "\u0169", - "utri;": "\u25b5", - "utrif;": "\u25b4", - "uuarr;": "\u21c8", - "uuml": "\xfc", - "uuml;": "\xfc", - "uwangle;": "\u29a7", - "vArr;": "\u21d5", - "vBar;": "\u2ae8", - "vBarv;": "\u2ae9", - "vDash;": "\u22a8", - "vangrt;": "\u299c", - "varepsilon;": "\u03f5", - "varkappa;": "\u03f0", - "varnothing;": "\u2205", - "varphi;": "\u03d5", - "varpi;": "\u03d6", - "varpropto;": "\u221d", - "varr;": "\u2195", - "varrho;": "\u03f1", - "varsigma;": "\u03c2", - "varsubsetneq;": "\u228a\ufe00", - "varsubsetneqq;": "\u2acb\ufe00", - "varsupsetneq;": "\u228b\ufe00", - "varsupsetneqq;": "\u2acc\ufe00", - "vartheta;": "\u03d1", - "vartriangleleft;": "\u22b2", - "vartriangleright;": "\u22b3", - "vcy;": "\u0432", - "vdash;": "\u22a2", - "vee;": "\u2228", - "veebar;": "\u22bb", - "veeeq;": "\u225a", - "vellip;": "\u22ee", - "verbar;": "|", - "vert;": "|", - "vfr;": "\U0001d533", - "vltri;": "\u22b2", - "vnsub;": "\u2282\u20d2", - "vnsup;": "\u2283\u20d2", - "vopf;": "\U0001d567", - "vprop;": "\u221d", - "vrtri;": "\u22b3", - "vscr;": "\U0001d4cb", - "vsubnE;": "\u2acb\ufe00", - "vsubne;": "\u228a\ufe00", - "vsupnE;": "\u2acc\ufe00", - "vsupne;": "\u228b\ufe00", - "vzigzag;": "\u299a", - "wcirc;": "\u0175", - "wedbar;": "\u2a5f", - "wedge;": "\u2227", - "wedgeq;": "\u2259", - "weierp;": "\u2118", - "wfr;": "\U0001d534", - "wopf;": "\U0001d568", - "wp;": "\u2118", - "wr;": "\u2240", - "wreath;": "\u2240", - "wscr;": "\U0001d4cc", - "xcap;": "\u22c2", - "xcirc;": "\u25ef", - "xcup;": "\u22c3", - "xdtri;": "\u25bd", - "xfr;": "\U0001d535", - "xhArr;": "\u27fa", - "xharr;": "\u27f7", - "xi;": "\u03be", - "xlArr;": "\u27f8", - "xlarr;": "\u27f5", - "xmap;": "\u27fc", - "xnis;": "\u22fb", - "xodot;": "\u2a00", - "xopf;": "\U0001d569", - "xoplus;": "\u2a01", - "xotime;": "\u2a02", - "xrArr;": "\u27f9", - "xrarr;": "\u27f6", - "xscr;": "\U0001d4cd", - "xsqcup;": "\u2a06", - "xuplus;": "\u2a04", - "xutri;": "\u25b3", - "xvee;": "\u22c1", - "xwedge;": "\u22c0", - "yacute": "\xfd", - "yacute;": "\xfd", - "yacy;": "\u044f", - "ycirc;": "\u0177", - "ycy;": "\u044b", - "yen": "\xa5", - "yen;": "\xa5", - "yfr;": "\U0001d536", - "yicy;": "\u0457", - "yopf;": "\U0001d56a", - "yscr;": "\U0001d4ce", - "yucy;": "\u044e", - "yuml": "\xff", - "yuml;": "\xff", - "zacute;": "\u017a", - "zcaron;": "\u017e", - "zcy;": "\u0437", - "zdot;": "\u017c", - "zeetrf;": "\u2128", - "zeta;": "\u03b6", - "zfr;": "\U0001d537", - "zhcy;": "\u0436", - "zigrarr;": "\u21dd", - "zopf;": "\U0001d56b", - "zscr;": "\U0001d4cf", - "zwj;": "\u200d", - "zwnj;": "\u200c", -} - -replacementCharacters = { - 0x0: "\uFFFD", - 0x0d: "\u000D", - 0x80: "\u20AC", - 0x81: "\u0081", - 0x82: "\u201A", - 0x83: "\u0192", - 0x84: "\u201E", - 0x85: "\u2026", - 0x86: "\u2020", - 0x87: "\u2021", - 0x88: "\u02C6", - 0x89: "\u2030", - 0x8A: "\u0160", - 0x8B: "\u2039", - 0x8C: "\u0152", - 0x8D: "\u008D", - 0x8E: "\u017D", - 0x8F: "\u008F", - 0x90: "\u0090", - 0x91: "\u2018", - 0x92: "\u2019", - 0x93: "\u201C", - 0x94: "\u201D", - 0x95: "\u2022", - 0x96: "\u2013", - 0x97: "\u2014", - 0x98: "\u02DC", - 0x99: "\u2122", - 0x9A: "\u0161", - 0x9B: "\u203A", - 0x9C: "\u0153", - 0x9D: "\u009D", - 0x9E: "\u017E", - 0x9F: "\u0178", -} - -tokenTypes = { - "Doctype": 0, - "Characters": 1, - "SpaceCharacters": 2, - "StartTag": 3, - "EndTag": 4, - "EmptyTag": 5, - "Comment": 6, - "ParseError": 7 -} - -tagTokenTypes = frozenset([tokenTypes["StartTag"], tokenTypes["EndTag"], - tokenTypes["EmptyTag"]]) - - -prefixes = dict([(v, k) for k, v in namespaces.items()]) -prefixes["http://www.w3.org/1998/Math/MathML"] = "math" - - -class DataLossWarning(UserWarning): - """Raised when the current tree is unable to represent the input data""" - pass - - -class _ReparseException(Exception): - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py deleted file mode 100644 index 5ba926e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/alphabeticalattributes.py +++ /dev/null @@ -1,29 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from . import base - -from collections import OrderedDict - - -def _attr_key(attr): - """Return an appropriate key for an attribute for sorting - - Attributes have a namespace that can be either ``None`` or a string. We - can't compare the two because they're different types, so we convert - ``None`` to an empty string first. - - """ - return (attr[0][0] or ''), attr[0][1] - - -class Filter(base.Filter): - """Alphabetizes attributes for elements""" - def __iter__(self): - for token in base.Filter.__iter__(self): - if token["type"] in ("StartTag", "EmptyTag"): - attrs = OrderedDict() - for name, value in sorted(token["data"].items(), - key=_attr_key): - attrs[name] = value - token["data"] = attrs - yield token diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py deleted file mode 100644 index c7dbaed..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/base.py +++ /dev/null @@ -1,12 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - - -class Filter(object): - def __init__(self, source): - self.source = source - - def __iter__(self): - return iter(self.source) - - def __getattr__(self, name): - return getattr(self.source, name) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py deleted file mode 100644 index aefb5c8..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/inject_meta_charset.py +++ /dev/null @@ -1,73 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from . import base - - -class Filter(base.Filter): - """Injects ``<meta charset=ENCODING>`` tag into head of document""" - def __init__(self, source, encoding): - """Creates a Filter - - :arg source: the source token stream - - :arg encoding: the encoding to set - - """ - base.Filter.__init__(self, source) - self.encoding = encoding - - def __iter__(self): - state = "pre_head" - meta_found = (self.encoding is None) - pending = [] - - for token in base.Filter.__iter__(self): - type = token["type"] - if type == "StartTag": - if token["name"].lower() == "head": - state = "in_head" - - elif type == "EmptyTag": - if token["name"].lower() == "meta": - # replace charset with actual encoding - has_http_equiv_content_type = False - for (namespace, name), value in token["data"].items(): - if namespace is not None: - continue - elif name.lower() == 'charset': - token["data"][(namespace, name)] = self.encoding - meta_found = True - break - elif name == 'http-equiv' and value.lower() == 'content-type': - has_http_equiv_content_type = True - else: - if has_http_equiv_content_type and (None, "content") in token["data"]: - token["data"][(None, "content")] = 'text/html; charset=%s' % self.encoding - meta_found = True - - elif token["name"].lower() == "head" and not meta_found: - # insert meta into empty head - yield {"type": "StartTag", "name": "head", - "data": token["data"]} - yield {"type": "EmptyTag", "name": "meta", - "data": {(None, "charset"): self.encoding}} - yield {"type": "EndTag", "name": "head"} - meta_found = True - continue - - elif type == "EndTag": - if token["name"].lower() == "head" and pending: - # insert meta into head (if necessary) and flush pending queue - yield pending.pop(0) - if not meta_found: - yield {"type": "EmptyTag", "name": "meta", - "data": {(None, "charset"): self.encoding}} - while pending: - yield pending.pop(0) - meta_found = True - state = "post_head" - - if state == "in_head": - pending.append(token) - else: - yield token diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py deleted file mode 100644 index fcc07ee..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/lint.py +++ /dev/null @@ -1,93 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from pip._vendor.six import text_type - -from . import base -from ..constants import namespaces, voidElements - -from ..constants import spaceCharacters -spaceCharacters = "".join(spaceCharacters) - - -class Filter(base.Filter): - """Lints the token stream for errors - - If it finds any errors, it'll raise an ``AssertionError``. - - """ - def __init__(self, source, require_matching_tags=True): - """Creates a Filter - - :arg source: the source token stream - - :arg require_matching_tags: whether or not to require matching tags - - """ - super(Filter, self).__init__(source) - self.require_matching_tags = require_matching_tags - - def __iter__(self): - open_elements = [] - for token in base.Filter.__iter__(self): - type = token["type"] - if type in ("StartTag", "EmptyTag"): - namespace = token["namespace"] - name = token["name"] - assert namespace is None or isinstance(namespace, text_type) - assert namespace != "" - assert isinstance(name, text_type) - assert name != "" - assert isinstance(token["data"], dict) - if (not namespace or namespace == namespaces["html"]) and name in voidElements: - assert type == "EmptyTag" - else: - assert type == "StartTag" - if type == "StartTag" and self.require_matching_tags: - open_elements.append((namespace, name)) - for (namespace, name), value in token["data"].items(): - assert namespace is None or isinstance(namespace, text_type) - assert namespace != "" - assert isinstance(name, text_type) - assert name != "" - assert isinstance(value, text_type) - - elif type == "EndTag": - namespace = token["namespace"] - name = token["name"] - assert namespace is None or isinstance(namespace, text_type) - assert namespace != "" - assert isinstance(name, text_type) - assert name != "" - if (not namespace or namespace == namespaces["html"]) and name in voidElements: - assert False, "Void element reported as EndTag token: %(tag)s" % {"tag": name} - elif self.require_matching_tags: - start = open_elements.pop() - assert start == (namespace, name) - - elif type == "Comment": - data = token["data"] - assert isinstance(data, text_type) - - elif type in ("Characters", "SpaceCharacters"): - data = token["data"] - assert isinstance(data, text_type) - assert data != "" - if type == "SpaceCharacters": - assert data.strip(spaceCharacters) == "" - - elif type == "Doctype": - name = token["name"] - assert name is None or isinstance(name, text_type) - assert token["publicId"] is None or isinstance(name, text_type) - assert token["systemId"] is None or isinstance(name, text_type) - - elif type == "Entity": - assert isinstance(token["name"], text_type) - - elif type == "SerializerError": - assert isinstance(token["data"], text_type) - - else: - assert False, "Unknown token type: %(type)s" % {"type": type} - - yield token diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py deleted file mode 100644 index 4a86501..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/optionaltags.py +++ /dev/null @@ -1,207 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from . import base - - -class Filter(base.Filter): - """Removes optional tags from the token stream""" - def slider(self): - previous1 = previous2 = None - for token in self.source: - if previous1 is not None: - yield previous2, previous1, token - previous2 = previous1 - previous1 = token - if previous1 is not None: - yield previous2, previous1, None - - def __iter__(self): - for previous, token, next in self.slider(): - type = token["type"] - if type == "StartTag": - if (token["data"] or - not self.is_optional_start(token["name"], previous, next)): - yield token - elif type == "EndTag": - if not self.is_optional_end(token["name"], next): - yield token - else: - yield token - - def is_optional_start(self, tagname, previous, next): - type = next and next["type"] or None - if tagname in 'html': - # An html element's start tag may be omitted if the first thing - # inside the html element is not a space character or a comment. - return type not in ("Comment", "SpaceCharacters") - elif tagname == 'head': - # A head element's start tag may be omitted if the first thing - # inside the head element is an element. - # XXX: we also omit the start tag if the head element is empty - if type in ("StartTag", "EmptyTag"): - return True - elif type == "EndTag": - return next["name"] == "head" - elif tagname == 'body': - # A body element's start tag may be omitted if the first thing - # inside the body element is not a space character or a comment, - # except if the first thing inside the body element is a script - # or style element and the node immediately preceding the body - # element is a head element whose end tag has been omitted. - if type in ("Comment", "SpaceCharacters"): - return False - elif type == "StartTag": - # XXX: we do not look at the preceding event, so we never omit - # the body element's start tag if it's followed by a script or - # a style element. - return next["name"] not in ('script', 'style') - else: - return True - elif tagname == 'colgroup': - # A colgroup element's start tag may be omitted if the first thing - # inside the colgroup element is a col element, and if the element - # is not immediately preceded by another colgroup element whose - # end tag has been omitted. - if type in ("StartTag", "EmptyTag"): - # XXX: we do not look at the preceding event, so instead we never - # omit the colgroup element's end tag when it is immediately - # followed by another colgroup element. See is_optional_end. - return next["name"] == "col" - else: - return False - elif tagname == 'tbody': - # A tbody element's start tag may be omitted if the first thing - # inside the tbody element is a tr element, and if the element is - # not immediately preceded by a tbody, thead, or tfoot element - # whose end tag has been omitted. - if type == "StartTag": - # omit the thead and tfoot elements' end tag when they are - # immediately followed by a tbody element. See is_optional_end. - if previous and previous['type'] == 'EndTag' and \ - previous['name'] in ('tbody', 'thead', 'tfoot'): - return False - return next["name"] == 'tr' - else: - return False - return False - - def is_optional_end(self, tagname, next): - type = next and next["type"] or None - if tagname in ('html', 'head', 'body'): - # An html element's end tag may be omitted if the html element - # is not immediately followed by a space character or a comment. - return type not in ("Comment", "SpaceCharacters") - elif tagname in ('li', 'optgroup', 'tr'): - # A li element's end tag may be omitted if the li element is - # immediately followed by another li element or if there is - # no more content in the parent element. - # An optgroup element's end tag may be omitted if the optgroup - # element is immediately followed by another optgroup element, - # or if there is no more content in the parent element. - # A tr element's end tag may be omitted if the tr element is - # immediately followed by another tr element, or if there is - # no more content in the parent element. - if type == "StartTag": - return next["name"] == tagname - else: - return type == "EndTag" or type is None - elif tagname in ('dt', 'dd'): - # A dt element's end tag may be omitted if the dt element is - # immediately followed by another dt element or a dd element. - # A dd element's end tag may be omitted if the dd element is - # immediately followed by another dd element or a dt element, - # or if there is no more content in the parent element. - if type == "StartTag": - return next["name"] in ('dt', 'dd') - elif tagname == 'dd': - return type == "EndTag" or type is None - else: - return False - elif tagname == 'p': - # A p element's end tag may be omitted if the p element is - # immediately followed by an address, article, aside, - # blockquote, datagrid, dialog, dir, div, dl, fieldset, - # footer, form, h1, h2, h3, h4, h5, h6, header, hr, menu, - # nav, ol, p, pre, section, table, or ul, element, or if - # there is no more content in the parent element. - if type in ("StartTag", "EmptyTag"): - return next["name"] in ('address', 'article', 'aside', - 'blockquote', 'datagrid', 'dialog', - 'dir', 'div', 'dl', 'fieldset', 'footer', - 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', - 'header', 'hr', 'menu', 'nav', 'ol', - 'p', 'pre', 'section', 'table', 'ul') - else: - return type == "EndTag" or type is None - elif tagname == 'option': - # An option element's end tag may be omitted if the option - # element is immediately followed by another option element, - # or if it is immediately followed by an <code>optgroup</code> - # element, or if there is no more content in the parent - # element. - if type == "StartTag": - return next["name"] in ('option', 'optgroup') - else: - return type == "EndTag" or type is None - elif tagname in ('rt', 'rp'): - # An rt element's end tag may be omitted if the rt element is - # immediately followed by an rt or rp element, or if there is - # no more content in the parent element. - # An rp element's end tag may be omitted if the rp element is - # immediately followed by an rt or rp element, or if there is - # no more content in the parent element. - if type == "StartTag": - return next["name"] in ('rt', 'rp') - else: - return type == "EndTag" or type is None - elif tagname == 'colgroup': - # A colgroup element's end tag may be omitted if the colgroup - # element is not immediately followed by a space character or - # a comment. - if type in ("Comment", "SpaceCharacters"): - return False - elif type == "StartTag": - # XXX: we also look for an immediately following colgroup - # element. See is_optional_start. - return next["name"] != 'colgroup' - else: - return True - elif tagname in ('thead', 'tbody'): - # A thead element's end tag may be omitted if the thead element - # is immediately followed by a tbody or tfoot element. - # A tbody element's end tag may be omitted if the tbody element - # is immediately followed by a tbody or tfoot element, or if - # there is no more content in the parent element. - # A tfoot element's end tag may be omitted if the tfoot element - # is immediately followed by a tbody element, or if there is no - # more content in the parent element. - # XXX: we never omit the end tag when the following element is - # a tbody. See is_optional_start. - if type == "StartTag": - return next["name"] in ['tbody', 'tfoot'] - elif tagname == 'tbody': - return type == "EndTag" or type is None - else: - return False - elif tagname == 'tfoot': - # A tfoot element's end tag may be omitted if the tfoot element - # is immediately followed by a tbody element, or if there is no - # more content in the parent element. - # XXX: we never omit the end tag when the following element is - # a tbody. See is_optional_start. - if type == "StartTag": - return next["name"] == 'tbody' - else: - return type == "EndTag" or type is None - elif tagname in ('td', 'th'): - # A td element's end tag may be omitted if the td element is - # immediately followed by a td or th element, or if there is - # no more content in the parent element. - # A th element's end tag may be omitted if the th element is - # immediately followed by a td or th element, or if there is - # no more content in the parent element. - if type == "StartTag": - return next["name"] in ('td', 'th') - else: - return type == "EndTag" or type is None - return False diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py deleted file mode 100644 index af8e77b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/sanitizer.py +++ /dev/null @@ -1,896 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import re -from xml.sax.saxutils import escape, unescape - -from pip._vendor.six.moves import urllib_parse as urlparse - -from . import base -from ..constants import namespaces, prefixes - -__all__ = ["Filter"] - - -allowed_elements = frozenset(( - (namespaces['html'], 'a'), - (namespaces['html'], 'abbr'), - (namespaces['html'], 'acronym'), - (namespaces['html'], 'address'), - (namespaces['html'], 'area'), - (namespaces['html'], 'article'), - (namespaces['html'], 'aside'), - (namespaces['html'], 'audio'), - (namespaces['html'], 'b'), - (namespaces['html'], 'big'), - (namespaces['html'], 'blockquote'), - (namespaces['html'], 'br'), - (namespaces['html'], 'button'), - (namespaces['html'], 'canvas'), - (namespaces['html'], 'caption'), - (namespaces['html'], 'center'), - (namespaces['html'], 'cite'), - (namespaces['html'], 'code'), - (namespaces['html'], 'col'), - (namespaces['html'], 'colgroup'), - (namespaces['html'], 'command'), - (namespaces['html'], 'datagrid'), - (namespaces['html'], 'datalist'), - (namespaces['html'], 'dd'), - (namespaces['html'], 'del'), - (namespaces['html'], 'details'), - (namespaces['html'], 'dfn'), - (namespaces['html'], 'dialog'), - (namespaces['html'], 'dir'), - (namespaces['html'], 'div'), - (namespaces['html'], 'dl'), - (namespaces['html'], 'dt'), - (namespaces['html'], 'em'), - (namespaces['html'], 'event-source'), - (namespaces['html'], 'fieldset'), - (namespaces['html'], 'figcaption'), - (namespaces['html'], 'figure'), - (namespaces['html'], 'footer'), - (namespaces['html'], 'font'), - (namespaces['html'], 'form'), - (namespaces['html'], 'header'), - (namespaces['html'], 'h1'), - (namespaces['html'], 'h2'), - (namespaces['html'], 'h3'), - (namespaces['html'], 'h4'), - (namespaces['html'], 'h5'), - (namespaces['html'], 'h6'), - (namespaces['html'], 'hr'), - (namespaces['html'], 'i'), - (namespaces['html'], 'img'), - (namespaces['html'], 'input'), - (namespaces['html'], 'ins'), - (namespaces['html'], 'keygen'), - (namespaces['html'], 'kbd'), - (namespaces['html'], 'label'), - (namespaces['html'], 'legend'), - (namespaces['html'], 'li'), - (namespaces['html'], 'm'), - (namespaces['html'], 'map'), - (namespaces['html'], 'menu'), - (namespaces['html'], 'meter'), - (namespaces['html'], 'multicol'), - (namespaces['html'], 'nav'), - (namespaces['html'], 'nextid'), - (namespaces['html'], 'ol'), - (namespaces['html'], 'output'), - (namespaces['html'], 'optgroup'), - (namespaces['html'], 'option'), - (namespaces['html'], 'p'), - (namespaces['html'], 'pre'), - (namespaces['html'], 'progress'), - (namespaces['html'], 'q'), - (namespaces['html'], 's'), - (namespaces['html'], 'samp'), - (namespaces['html'], 'section'), - (namespaces['html'], 'select'), - (namespaces['html'], 'small'), - (namespaces['html'], 'sound'), - (namespaces['html'], 'source'), - (namespaces['html'], 'spacer'), - (namespaces['html'], 'span'), - (namespaces['html'], 'strike'), - (namespaces['html'], 'strong'), - (namespaces['html'], 'sub'), - (namespaces['html'], 'sup'), - (namespaces['html'], 'table'), - (namespaces['html'], 'tbody'), - (namespaces['html'], 'td'), - (namespaces['html'], 'textarea'), - (namespaces['html'], 'time'), - (namespaces['html'], 'tfoot'), - (namespaces['html'], 'th'), - (namespaces['html'], 'thead'), - (namespaces['html'], 'tr'), - (namespaces['html'], 'tt'), - (namespaces['html'], 'u'), - (namespaces['html'], 'ul'), - (namespaces['html'], 'var'), - (namespaces['html'], 'video'), - (namespaces['mathml'], 'maction'), - (namespaces['mathml'], 'math'), - (namespaces['mathml'], 'merror'), - (namespaces['mathml'], 'mfrac'), - (namespaces['mathml'], 'mi'), - (namespaces['mathml'], 'mmultiscripts'), - (namespaces['mathml'], 'mn'), - (namespaces['mathml'], 'mo'), - (namespaces['mathml'], 'mover'), - (namespaces['mathml'], 'mpadded'), - (namespaces['mathml'], 'mphantom'), - (namespaces['mathml'], 'mprescripts'), - (namespaces['mathml'], 'mroot'), - (namespaces['mathml'], 'mrow'), - (namespaces['mathml'], 'mspace'), - (namespaces['mathml'], 'msqrt'), - (namespaces['mathml'], 'mstyle'), - (namespaces['mathml'], 'msub'), - (namespaces['mathml'], 'msubsup'), - (namespaces['mathml'], 'msup'), - (namespaces['mathml'], 'mtable'), - (namespaces['mathml'], 'mtd'), - (namespaces['mathml'], 'mtext'), - (namespaces['mathml'], 'mtr'), - (namespaces['mathml'], 'munder'), - (namespaces['mathml'], 'munderover'), - (namespaces['mathml'], 'none'), - (namespaces['svg'], 'a'), - (namespaces['svg'], 'animate'), - (namespaces['svg'], 'animateColor'), - (namespaces['svg'], 'animateMotion'), - (namespaces['svg'], 'animateTransform'), - (namespaces['svg'], 'clipPath'), - (namespaces['svg'], 'circle'), - (namespaces['svg'], 'defs'), - (namespaces['svg'], 'desc'), - (namespaces['svg'], 'ellipse'), - (namespaces['svg'], 'font-face'), - (namespaces['svg'], 'font-face-name'), - (namespaces['svg'], 'font-face-src'), - (namespaces['svg'], 'g'), - (namespaces['svg'], 'glyph'), - (namespaces['svg'], 'hkern'), - (namespaces['svg'], 'linearGradient'), - (namespaces['svg'], 'line'), - (namespaces['svg'], 'marker'), - (namespaces['svg'], 'metadata'), - (namespaces['svg'], 'missing-glyph'), - (namespaces['svg'], 'mpath'), - (namespaces['svg'], 'path'), - (namespaces['svg'], 'polygon'), - (namespaces['svg'], 'polyline'), - (namespaces['svg'], 'radialGradient'), - (namespaces['svg'], 'rect'), - (namespaces['svg'], 'set'), - (namespaces['svg'], 'stop'), - (namespaces['svg'], 'svg'), - (namespaces['svg'], 'switch'), - (namespaces['svg'], 'text'), - (namespaces['svg'], 'title'), - (namespaces['svg'], 'tspan'), - (namespaces['svg'], 'use'), -)) - -allowed_attributes = frozenset(( - # HTML attributes - (None, 'abbr'), - (None, 'accept'), - (None, 'accept-charset'), - (None, 'accesskey'), - (None, 'action'), - (None, 'align'), - (None, 'alt'), - (None, 'autocomplete'), - (None, 'autofocus'), - (None, 'axis'), - (None, 'background'), - (None, 'balance'), - (None, 'bgcolor'), - (None, 'bgproperties'), - (None, 'border'), - (None, 'bordercolor'), - (None, 'bordercolordark'), - (None, 'bordercolorlight'), - (None, 'bottompadding'), - (None, 'cellpadding'), - (None, 'cellspacing'), - (None, 'ch'), - (None, 'challenge'), - (None, 'char'), - (None, 'charoff'), - (None, 'choff'), - (None, 'charset'), - (None, 'checked'), - (None, 'cite'), - (None, 'class'), - (None, 'clear'), - (None, 'color'), - (None, 'cols'), - (None, 'colspan'), - (None, 'compact'), - (None, 'contenteditable'), - (None, 'controls'), - (None, 'coords'), - (None, 'data'), - (None, 'datafld'), - (None, 'datapagesize'), - (None, 'datasrc'), - (None, 'datetime'), - (None, 'default'), - (None, 'delay'), - (None, 'dir'), - (None, 'disabled'), - (None, 'draggable'), - (None, 'dynsrc'), - (None, 'enctype'), - (None, 'end'), - (None, 'face'), - (None, 'for'), - (None, 'form'), - (None, 'frame'), - (None, 'galleryimg'), - (None, 'gutter'), - (None, 'headers'), - (None, 'height'), - (None, 'hidefocus'), - (None, 'hidden'), - (None, 'high'), - (None, 'href'), - (None, 'hreflang'), - (None, 'hspace'), - (None, 'icon'), - (None, 'id'), - (None, 'inputmode'), - (None, 'ismap'), - (None, 'keytype'), - (None, 'label'), - (None, 'leftspacing'), - (None, 'lang'), - (None, 'list'), - (None, 'longdesc'), - (None, 'loop'), - (None, 'loopcount'), - (None, 'loopend'), - (None, 'loopstart'), - (None, 'low'), - (None, 'lowsrc'), - (None, 'max'), - (None, 'maxlength'), - (None, 'media'), - (None, 'method'), - (None, 'min'), - (None, 'multiple'), - (None, 'name'), - (None, 'nohref'), - (None, 'noshade'), - (None, 'nowrap'), - (None, 'open'), - (None, 'optimum'), - (None, 'pattern'), - (None, 'ping'), - (None, 'point-size'), - (None, 'poster'), - (None, 'pqg'), - (None, 'preload'), - (None, 'prompt'), - (None, 'radiogroup'), - (None, 'readonly'), - (None, 'rel'), - (None, 'repeat-max'), - (None, 'repeat-min'), - (None, 'replace'), - (None, 'required'), - (None, 'rev'), - (None, 'rightspacing'), - (None, 'rows'), - (None, 'rowspan'), - (None, 'rules'), - (None, 'scope'), - (None, 'selected'), - (None, 'shape'), - (None, 'size'), - (None, 'span'), - (None, 'src'), - (None, 'start'), - (None, 'step'), - (None, 'style'), - (None, 'summary'), - (None, 'suppress'), - (None, 'tabindex'), - (None, 'target'), - (None, 'template'), - (None, 'title'), - (None, 'toppadding'), - (None, 'type'), - (None, 'unselectable'), - (None, 'usemap'), - (None, 'urn'), - (None, 'valign'), - (None, 'value'), - (None, 'variable'), - (None, 'volume'), - (None, 'vspace'), - (None, 'vrml'), - (None, 'width'), - (None, 'wrap'), - (namespaces['xml'], 'lang'), - # MathML attributes - (None, 'actiontype'), - (None, 'align'), - (None, 'columnalign'), - (None, 'columnalign'), - (None, 'columnalign'), - (None, 'columnlines'), - (None, 'columnspacing'), - (None, 'columnspan'), - (None, 'depth'), - (None, 'display'), - (None, 'displaystyle'), - (None, 'equalcolumns'), - (None, 'equalrows'), - (None, 'fence'), - (None, 'fontstyle'), - (None, 'fontweight'), - (None, 'frame'), - (None, 'height'), - (None, 'linethickness'), - (None, 'lspace'), - (None, 'mathbackground'), - (None, 'mathcolor'), - (None, 'mathvariant'), - (None, 'mathvariant'), - (None, 'maxsize'), - (None, 'minsize'), - (None, 'other'), - (None, 'rowalign'), - (None, 'rowalign'), - (None, 'rowalign'), - (None, 'rowlines'), - (None, 'rowspacing'), - (None, 'rowspan'), - (None, 'rspace'), - (None, 'scriptlevel'), - (None, 'selection'), - (None, 'separator'), - (None, 'stretchy'), - (None, 'width'), - (None, 'width'), - (namespaces['xlink'], 'href'), - (namespaces['xlink'], 'show'), - (namespaces['xlink'], 'type'), - # SVG attributes - (None, 'accent-height'), - (None, 'accumulate'), - (None, 'additive'), - (None, 'alphabetic'), - (None, 'arabic-form'), - (None, 'ascent'), - (None, 'attributeName'), - (None, 'attributeType'), - (None, 'baseProfile'), - (None, 'bbox'), - (None, 'begin'), - (None, 'by'), - (None, 'calcMode'), - (None, 'cap-height'), - (None, 'class'), - (None, 'clip-path'), - (None, 'color'), - (None, 'color-rendering'), - (None, 'content'), - (None, 'cx'), - (None, 'cy'), - (None, 'd'), - (None, 'dx'), - (None, 'dy'), - (None, 'descent'), - (None, 'display'), - (None, 'dur'), - (None, 'end'), - (None, 'fill'), - (None, 'fill-opacity'), - (None, 'fill-rule'), - (None, 'font-family'), - (None, 'font-size'), - (None, 'font-stretch'), - (None, 'font-style'), - (None, 'font-variant'), - (None, 'font-weight'), - (None, 'from'), - (None, 'fx'), - (None, 'fy'), - (None, 'g1'), - (None, 'g2'), - (None, 'glyph-name'), - (None, 'gradientUnits'), - (None, 'hanging'), - (None, 'height'), - (None, 'horiz-adv-x'), - (None, 'horiz-origin-x'), - (None, 'id'), - (None, 'ideographic'), - (None, 'k'), - (None, 'keyPoints'), - (None, 'keySplines'), - (None, 'keyTimes'), - (None, 'lang'), - (None, 'marker-end'), - (None, 'marker-mid'), - (None, 'marker-start'), - (None, 'markerHeight'), - (None, 'markerUnits'), - (None, 'markerWidth'), - (None, 'mathematical'), - (None, 'max'), - (None, 'min'), - (None, 'name'), - (None, 'offset'), - (None, 'opacity'), - (None, 'orient'), - (None, 'origin'), - (None, 'overline-position'), - (None, 'overline-thickness'), - (None, 'panose-1'), - (None, 'path'), - (None, 'pathLength'), - (None, 'points'), - (None, 'preserveAspectRatio'), - (None, 'r'), - (None, 'refX'), - (None, 'refY'), - (None, 'repeatCount'), - (None, 'repeatDur'), - (None, 'requiredExtensions'), - (None, 'requiredFeatures'), - (None, 'restart'), - (None, 'rotate'), - (None, 'rx'), - (None, 'ry'), - (None, 'slope'), - (None, 'stemh'), - (None, 'stemv'), - (None, 'stop-color'), - (None, 'stop-opacity'), - (None, 'strikethrough-position'), - (None, 'strikethrough-thickness'), - (None, 'stroke'), - (None, 'stroke-dasharray'), - (None, 'stroke-dashoffset'), - (None, 'stroke-linecap'), - (None, 'stroke-linejoin'), - (None, 'stroke-miterlimit'), - (None, 'stroke-opacity'), - (None, 'stroke-width'), - (None, 'systemLanguage'), - (None, 'target'), - (None, 'text-anchor'), - (None, 'to'), - (None, 'transform'), - (None, 'type'), - (None, 'u1'), - (None, 'u2'), - (None, 'underline-position'), - (None, 'underline-thickness'), - (None, 'unicode'), - (None, 'unicode-range'), - (None, 'units-per-em'), - (None, 'values'), - (None, 'version'), - (None, 'viewBox'), - (None, 'visibility'), - (None, 'width'), - (None, 'widths'), - (None, 'x'), - (None, 'x-height'), - (None, 'x1'), - (None, 'x2'), - (namespaces['xlink'], 'actuate'), - (namespaces['xlink'], 'arcrole'), - (namespaces['xlink'], 'href'), - (namespaces['xlink'], 'role'), - (namespaces['xlink'], 'show'), - (namespaces['xlink'], 'title'), - (namespaces['xlink'], 'type'), - (namespaces['xml'], 'base'), - (namespaces['xml'], 'lang'), - (namespaces['xml'], 'space'), - (None, 'y'), - (None, 'y1'), - (None, 'y2'), - (None, 'zoomAndPan'), -)) - -attr_val_is_uri = frozenset(( - (None, 'href'), - (None, 'src'), - (None, 'cite'), - (None, 'action'), - (None, 'longdesc'), - (None, 'poster'), - (None, 'background'), - (None, 'datasrc'), - (None, 'dynsrc'), - (None, 'lowsrc'), - (None, 'ping'), - (namespaces['xlink'], 'href'), - (namespaces['xml'], 'base'), -)) - -svg_attr_val_allows_ref = frozenset(( - (None, 'clip-path'), - (None, 'color-profile'), - (None, 'cursor'), - (None, 'fill'), - (None, 'filter'), - (None, 'marker'), - (None, 'marker-start'), - (None, 'marker-mid'), - (None, 'marker-end'), - (None, 'mask'), - (None, 'stroke'), -)) - -svg_allow_local_href = frozenset(( - (None, 'altGlyph'), - (None, 'animate'), - (None, 'animateColor'), - (None, 'animateMotion'), - (None, 'animateTransform'), - (None, 'cursor'), - (None, 'feImage'), - (None, 'filter'), - (None, 'linearGradient'), - (None, 'pattern'), - (None, 'radialGradient'), - (None, 'textpath'), - (None, 'tref'), - (None, 'set'), - (None, 'use') -)) - -allowed_css_properties = frozenset(( - 'azimuth', - 'background-color', - 'border-bottom-color', - 'border-collapse', - 'border-color', - 'border-left-color', - 'border-right-color', - 'border-top-color', - 'clear', - 'color', - 'cursor', - 'direction', - 'display', - 'elevation', - 'float', - 'font', - 'font-family', - 'font-size', - 'font-style', - 'font-variant', - 'font-weight', - 'height', - 'letter-spacing', - 'line-height', - 'overflow', - 'pause', - 'pause-after', - 'pause-before', - 'pitch', - 'pitch-range', - 'richness', - 'speak', - 'speak-header', - 'speak-numeral', - 'speak-punctuation', - 'speech-rate', - 'stress', - 'text-align', - 'text-decoration', - 'text-indent', - 'unicode-bidi', - 'vertical-align', - 'voice-family', - 'volume', - 'white-space', - 'width', -)) - -allowed_css_keywords = frozenset(( - 'auto', - 'aqua', - 'black', - 'block', - 'blue', - 'bold', - 'both', - 'bottom', - 'brown', - 'center', - 'collapse', - 'dashed', - 'dotted', - 'fuchsia', - 'gray', - 'green', - '!important', - 'italic', - 'left', - 'lime', - 'maroon', - 'medium', - 'none', - 'navy', - 'normal', - 'nowrap', - 'olive', - 'pointer', - 'purple', - 'red', - 'right', - 'solid', - 'silver', - 'teal', - 'top', - 'transparent', - 'underline', - 'white', - 'yellow', -)) - -allowed_svg_properties = frozenset(( - 'fill', - 'fill-opacity', - 'fill-rule', - 'stroke', - 'stroke-width', - 'stroke-linecap', - 'stroke-linejoin', - 'stroke-opacity', -)) - -allowed_protocols = frozenset(( - 'ed2k', - 'ftp', - 'http', - 'https', - 'irc', - 'mailto', - 'news', - 'gopher', - 'nntp', - 'telnet', - 'webcal', - 'xmpp', - 'callto', - 'feed', - 'urn', - 'aim', - 'rsync', - 'tag', - 'ssh', - 'sftp', - 'rtsp', - 'afs', - 'data', -)) - -allowed_content_types = frozenset(( - 'image/png', - 'image/jpeg', - 'image/gif', - 'image/webp', - 'image/bmp', - 'text/plain', -)) - - -data_content_type = re.compile(r''' - ^ - # Match a content type <application>/<type> - (?P<content_type>[-a-zA-Z0-9.]+/[-a-zA-Z0-9.]+) - # Match any character set and encoding - (?:(?:;charset=(?:[-a-zA-Z0-9]+)(?:;(?:base64))?) - |(?:;(?:base64))?(?:;charset=(?:[-a-zA-Z0-9]+))?) - # Assume the rest is data - ,.* - $ - ''', - re.VERBOSE) - - -class Filter(base.Filter): - """Sanitizes token stream of XHTML+MathML+SVG and of inline style attributes""" - def __init__(self, - source, - allowed_elements=allowed_elements, - allowed_attributes=allowed_attributes, - allowed_css_properties=allowed_css_properties, - allowed_css_keywords=allowed_css_keywords, - allowed_svg_properties=allowed_svg_properties, - allowed_protocols=allowed_protocols, - allowed_content_types=allowed_content_types, - attr_val_is_uri=attr_val_is_uri, - svg_attr_val_allows_ref=svg_attr_val_allows_ref, - svg_allow_local_href=svg_allow_local_href): - """Creates a Filter - - :arg allowed_elements: set of elements to allow--everything else will - be escaped - - :arg allowed_attributes: set of attributes to allow in - elements--everything else will be stripped - - :arg allowed_css_properties: set of CSS properties to allow--everything - else will be stripped - - :arg allowed_css_keywords: set of CSS keywords to allow--everything - else will be stripped - - :arg allowed_svg_properties: set of SVG properties to allow--everything - else will be removed - - :arg allowed_protocols: set of allowed protocols for URIs - - :arg allowed_content_types: set of allowed content types for ``data`` URIs. - - :arg attr_val_is_uri: set of attributes that have URI values--values - that have a scheme not listed in ``allowed_protocols`` are removed - - :arg svg_attr_val_allows_ref: set of SVG attributes that can have - references - - :arg svg_allow_local_href: set of SVG elements that can have local - hrefs--these are removed - - """ - super(Filter, self).__init__(source) - self.allowed_elements = allowed_elements - self.allowed_attributes = allowed_attributes - self.allowed_css_properties = allowed_css_properties - self.allowed_css_keywords = allowed_css_keywords - self.allowed_svg_properties = allowed_svg_properties - self.allowed_protocols = allowed_protocols - self.allowed_content_types = allowed_content_types - self.attr_val_is_uri = attr_val_is_uri - self.svg_attr_val_allows_ref = svg_attr_val_allows_ref - self.svg_allow_local_href = svg_allow_local_href - - def __iter__(self): - for token in base.Filter.__iter__(self): - token = self.sanitize_token(token) - if token: - yield token - - # Sanitize the +html+, escaping all elements not in ALLOWED_ELEMENTS, and - # stripping out all attributes not in ALLOWED_ATTRIBUTES. Style attributes - # are parsed, and a restricted set, specified by ALLOWED_CSS_PROPERTIES and - # ALLOWED_CSS_KEYWORDS, are allowed through. attributes in ATTR_VAL_IS_URI - # are scanned, and only URI schemes specified in ALLOWED_PROTOCOLS are - # allowed. - # - # sanitize_html('<script> do_nasty_stuff() </script>') - # => <script> do_nasty_stuff() </script> - # sanitize_html('<a href="javascript: sucker();">Click here for $100</a>') - # => <a>Click here for $100</a> - def sanitize_token(self, token): - - # accommodate filters which use token_type differently - token_type = token["type"] - if token_type in ("StartTag", "EndTag", "EmptyTag"): - name = token["name"] - namespace = token["namespace"] - if ((namespace, name) in self.allowed_elements or - (namespace is None and - (namespaces["html"], name) in self.allowed_elements)): - return self.allowed_token(token) - else: - return self.disallowed_token(token) - elif token_type == "Comment": - pass - else: - return token - - def allowed_token(self, token): - if "data" in token: - attrs = token["data"] - attr_names = set(attrs.keys()) - - # Remove forbidden attributes - for to_remove in (attr_names - self.allowed_attributes): - del token["data"][to_remove] - attr_names.remove(to_remove) - - # Remove attributes with disallowed URL values - for attr in (attr_names & self.attr_val_is_uri): - assert attr in attrs - # I don't have a clue where this regexp comes from or why it matches those - # characters, nor why we call unescape. I just know it's always been here. - # Should you be worried by this comment in a sanitizer? Yes. On the other hand, all - # this will do is remove *more* than it otherwise would. - val_unescaped = re.sub("[`\x00-\x20\x7f-\xa0\\s]+", '', - unescape(attrs[attr])).lower() - # remove replacement characters from unescaped characters - val_unescaped = val_unescaped.replace("\ufffd", "") - try: - uri = urlparse.urlparse(val_unescaped) - except ValueError: - uri = None - del attrs[attr] - if uri and uri.scheme: - if uri.scheme not in self.allowed_protocols: - del attrs[attr] - if uri.scheme == 'data': - m = data_content_type.match(uri.path) - if not m: - del attrs[attr] - elif m.group('content_type') not in self.allowed_content_types: - del attrs[attr] - - for attr in self.svg_attr_val_allows_ref: - if attr in attrs: - attrs[attr] = re.sub(r'url\s*\(\s*[^#\s][^)]+?\)', - ' ', - unescape(attrs[attr])) - if (token["name"] in self.svg_allow_local_href and - (namespaces['xlink'], 'href') in attrs and re.search(r'^\s*[^#\s].*', - attrs[(namespaces['xlink'], 'href')])): - del attrs[(namespaces['xlink'], 'href')] - if (None, 'style') in attrs: - attrs[(None, 'style')] = self.sanitize_css(attrs[(None, 'style')]) - token["data"] = attrs - return token - - def disallowed_token(self, token): - token_type = token["type"] - if token_type == "EndTag": - token["data"] = "</%s>" % token["name"] - elif token["data"]: - assert token_type in ("StartTag", "EmptyTag") - attrs = [] - for (ns, name), v in token["data"].items(): - attrs.append(' %s="%s"' % (name if ns is None else "%s:%s" % (prefixes[ns], name), escape(v))) - token["data"] = "<%s%s>" % (token["name"], ''.join(attrs)) - else: - token["data"] = "<%s>" % token["name"] - if token.get("selfClosing"): - token["data"] = token["data"][:-1] + "/>" - - token["type"] = "Characters" - - del token["name"] - return token - - def sanitize_css(self, style): - # disallow urls - style = re.compile(r'url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ', style) - - # gauntlet - if not re.match(r"""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style): - return '' - if not re.match(r"^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$", style): - return '' - - clean = [] - for prop, value in re.findall(r"([-\w]+)\s*:\s*([^:;]*)", style): - if not value: - continue - if prop.lower() in self.allowed_css_properties: - clean.append(prop + ': ' + value + ';') - elif prop.split('-')[0].lower() in ['background', 'border', 'margin', - 'padding']: - for keyword in value.split(): - if keyword not in self.allowed_css_keywords and \ - not re.match(r"^(#[0-9a-fA-F]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$", keyword): # noqa - break - else: - clean.append(prop + ': ' + value + ';') - elif prop.lower() in self.allowed_svg_properties: - clean.append(prop + ': ' + value + ';') - - return ' '.join(clean) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py deleted file mode 100644 index 0d12584..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/filters/whitespace.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -import re - -from . import base -from ..constants import rcdataElements, spaceCharacters -spaceCharacters = "".join(spaceCharacters) - -SPACES_REGEX = re.compile("[%s]+" % spaceCharacters) - - -class Filter(base.Filter): - """Collapses whitespace except in pre, textarea, and script elements""" - spacePreserveElements = frozenset(["pre", "textarea"] + list(rcdataElements)) - - def __iter__(self): - preserve = 0 - for token in base.Filter.__iter__(self): - type = token["type"] - if type == "StartTag" \ - and (preserve or token["name"] in self.spacePreserveElements): - preserve += 1 - - elif type == "EndTag" and preserve: - preserve -= 1 - - elif not preserve and type == "SpaceCharacters" and token["data"]: - # Test on token["data"] above to not introduce spaces where there were not - token["data"] = " " - - elif not preserve and type == "Characters": - token["data"] = collapse_spaces(token["data"]) - - yield token - - -def collapse_spaces(text): - return SPACES_REGEX.sub(' ', text) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py deleted file mode 100644 index ae41a13..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/html5parser.py +++ /dev/null @@ -1,2791 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import with_metaclass, viewkeys - -import types -from collections import OrderedDict - -from . import _inputstream -from . import _tokenizer - -from . import treebuilders -from .treebuilders.base import Marker - -from . import _utils -from .constants import ( - spaceCharacters, asciiUpper2Lower, - specialElements, headingElements, cdataElements, rcdataElements, - tokenTypes, tagTokenTypes, - namespaces, - htmlIntegrationPointElements, mathmlTextIntegrationPointElements, - adjustForeignAttributes as adjustForeignAttributesMap, - adjustMathMLAttributes, adjustSVGAttributes, - E, - _ReparseException -) - - -def parse(doc, treebuilder="etree", namespaceHTMLElements=True, **kwargs): - """Parse an HTML document as a string or file-like object into a tree - - :arg doc: the document to parse as a string or file-like object - - :arg treebuilder: the treebuilder to use when parsing - - :arg namespaceHTMLElements: whether or not to namespace HTML elements - - :returns: parsed tree - - Example: - - >>> from html5lib.html5parser import parse - >>> parse('<html><body><p>This is a doc</p></body></html>') - <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0> - - """ - tb = treebuilders.getTreeBuilder(treebuilder) - p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parse(doc, **kwargs) - - -def parseFragment(doc, container="div", treebuilder="etree", namespaceHTMLElements=True, **kwargs): - """Parse an HTML fragment as a string or file-like object into a tree - - :arg doc: the fragment to parse as a string or file-like object - - :arg container: the container context to parse the fragment in - - :arg treebuilder: the treebuilder to use when parsing - - :arg namespaceHTMLElements: whether or not to namespace HTML elements - - :returns: parsed tree - - Example: - - >>> from html5lib.html5libparser import parseFragment - >>> parseFragment('<b>this is a fragment</b>') - <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090> - - """ - tb = treebuilders.getTreeBuilder(treebuilder) - p = HTMLParser(tb, namespaceHTMLElements=namespaceHTMLElements) - return p.parseFragment(doc, container=container, **kwargs) - - -def method_decorator_metaclass(function): - class Decorated(type): - def __new__(meta, classname, bases, classDict): - for attributeName, attribute in classDict.items(): - if isinstance(attribute, types.FunctionType): - attribute = function(attribute) - - classDict[attributeName] = attribute - return type.__new__(meta, classname, bases, classDict) - return Decorated - - -class HTMLParser(object): - """HTML parser - - Generates a tree structure from a stream of (possibly malformed) HTML. - - """ - - def __init__(self, tree=None, strict=False, namespaceHTMLElements=True, debug=False): - """ - :arg tree: a treebuilder class controlling the type of tree that will be - returned. Built in treebuilders can be accessed through - html5lib.treebuilders.getTreeBuilder(treeType) - - :arg strict: raise an exception when a parse error is encountered - - :arg namespaceHTMLElements: whether or not to namespace HTML elements - - :arg debug: whether or not to enable debug mode which logs things - - Example: - - >>> from html5lib.html5parser import HTMLParser - >>> parser = HTMLParser() # generates parser with etree builder - >>> parser = HTMLParser('lxml', strict=True) # generates parser with lxml builder which is strict - - """ - - # Raise an exception on the first error encountered - self.strict = strict - - if tree is None: - tree = treebuilders.getTreeBuilder("etree") - self.tree = tree(namespaceHTMLElements) - self.errors = [] - - self.phases = dict([(name, cls(self, self.tree)) for name, cls in - getPhases(debug).items()]) - - def _parse(self, stream, innerHTML=False, container="div", scripting=False, **kwargs): - - self.innerHTMLMode = innerHTML - self.container = container - self.scripting = scripting - self.tokenizer = _tokenizer.HTMLTokenizer(stream, parser=self, **kwargs) - self.reset() - - try: - self.mainLoop() - except _ReparseException: - self.reset() - self.mainLoop() - - def reset(self): - self.tree.reset() - self.firstStartTag = False - self.errors = [] - self.log = [] # only used with debug mode - # "quirks" / "limited quirks" / "no quirks" - self.compatMode = "no quirks" - - if self.innerHTMLMode: - self.innerHTML = self.container.lower() - - if self.innerHTML in cdataElements: - self.tokenizer.state = self.tokenizer.rcdataState - elif self.innerHTML in rcdataElements: - self.tokenizer.state = self.tokenizer.rawtextState - elif self.innerHTML == 'plaintext': - self.tokenizer.state = self.tokenizer.plaintextState - else: - # state already is data state - # self.tokenizer.state = self.tokenizer.dataState - pass - self.phase = self.phases["beforeHtml"] - self.phase.insertHtmlElement() - self.resetInsertionMode() - else: - self.innerHTML = False # pylint:disable=redefined-variable-type - self.phase = self.phases["initial"] - - self.lastPhase = None - - self.beforeRCDataPhase = None - - self.framesetOK = True - - @property - def documentEncoding(self): - """Name of the character encoding that was used to decode the input stream, or - :obj:`None` if that is not determined yet - - """ - if not hasattr(self, 'tokenizer'): - return None - return self.tokenizer.stream.charEncoding[0].name - - def isHTMLIntegrationPoint(self, element): - if (element.name == "annotation-xml" and - element.namespace == namespaces["mathml"]): - return ("encoding" in element.attributes and - element.attributes["encoding"].translate( - asciiUpper2Lower) in - ("text/html", "application/xhtml+xml")) - else: - return (element.namespace, element.name) in htmlIntegrationPointElements - - def isMathMLTextIntegrationPoint(self, element): - return (element.namespace, element.name) in mathmlTextIntegrationPointElements - - def mainLoop(self): - CharactersToken = tokenTypes["Characters"] - SpaceCharactersToken = tokenTypes["SpaceCharacters"] - StartTagToken = tokenTypes["StartTag"] - EndTagToken = tokenTypes["EndTag"] - CommentToken = tokenTypes["Comment"] - DoctypeToken = tokenTypes["Doctype"] - ParseErrorToken = tokenTypes["ParseError"] - - for token in self.normalizedTokens(): - prev_token = None - new_token = token - while new_token is not None: - prev_token = new_token - currentNode = self.tree.openElements[-1] if self.tree.openElements else None - currentNodeNamespace = currentNode.namespace if currentNode else None - currentNodeName = currentNode.name if currentNode else None - - type = new_token["type"] - - if type == ParseErrorToken: - self.parseError(new_token["data"], new_token.get("datavars", {})) - new_token = None - else: - if (len(self.tree.openElements) == 0 or - currentNodeNamespace == self.tree.defaultNamespace or - (self.isMathMLTextIntegrationPoint(currentNode) and - ((type == StartTagToken and - token["name"] not in frozenset(["mglyph", "malignmark"])) or - type in (CharactersToken, SpaceCharactersToken))) or - (currentNodeNamespace == namespaces["mathml"] and - currentNodeName == "annotation-xml" and - type == StartTagToken and - token["name"] == "svg") or - (self.isHTMLIntegrationPoint(currentNode) and - type in (StartTagToken, CharactersToken, SpaceCharactersToken))): - phase = self.phase - else: - phase = self.phases["inForeignContent"] - - if type == CharactersToken: - new_token = phase.processCharacters(new_token) - elif type == SpaceCharactersToken: - new_token = phase.processSpaceCharacters(new_token) - elif type == StartTagToken: - new_token = phase.processStartTag(new_token) - elif type == EndTagToken: - new_token = phase.processEndTag(new_token) - elif type == CommentToken: - new_token = phase.processComment(new_token) - elif type == DoctypeToken: - new_token = phase.processDoctype(new_token) - - if (type == StartTagToken and prev_token["selfClosing"] and - not prev_token["selfClosingAcknowledged"]): - self.parseError("non-void-element-with-trailing-solidus", - {"name": prev_token["name"]}) - - # When the loop finishes it's EOF - reprocess = True - phases = [] - while reprocess: - phases.append(self.phase) - reprocess = self.phase.processEOF() - if reprocess: - assert self.phase not in phases - - def normalizedTokens(self): - for token in self.tokenizer: - yield self.normalizeToken(token) - - def parse(self, stream, *args, **kwargs): - """Parse a HTML document into a well-formed tree - - :arg stream: a file-like object or string containing the HTML to be parsed - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element). - - :arg scripting: treat noscript elements as if JavaScript was turned on - - :returns: parsed tree - - Example: - - >>> from html5lib.html5parser import HTMLParser - >>> parser = HTMLParser() - >>> parser.parse('<html><body><p>This is a doc</p></body></html>') - <Element u'{http://www.w3.org/1999/xhtml}html' at 0x7feac4909db0> - - """ - self._parse(stream, False, None, *args, **kwargs) - return self.tree.getDocument() - - def parseFragment(self, stream, *args, **kwargs): - """Parse a HTML fragment into a well-formed tree fragment - - :arg container: name of the element we're setting the innerHTML - property if set to None, default to 'div' - - :arg stream: a file-like object or string containing the HTML to be parsed - - The optional encoding parameter must be a string that indicates - the encoding. If specified, that encoding will be used, - regardless of any BOM or later declaration (such as in a meta - element) - - :arg scripting: treat noscript elements as if JavaScript was turned on - - :returns: parsed tree - - Example: - - >>> from html5lib.html5libparser import HTMLParser - >>> parser = HTMLParser() - >>> parser.parseFragment('<b>this is a fragment</b>') - <Element u'DOCUMENT_FRAGMENT' at 0x7feac484b090> - - """ - self._parse(stream, True, *args, **kwargs) - return self.tree.getFragment() - - def parseError(self, errorcode="XXX-undefined-error", datavars=None): - # XXX The idea is to make errorcode mandatory. - if datavars is None: - datavars = {} - self.errors.append((self.tokenizer.stream.position(), errorcode, datavars)) - if self.strict: - raise ParseError(E[errorcode] % datavars) - - def normalizeToken(self, token): - # HTML5 specific normalizations to the token stream - if token["type"] == tokenTypes["StartTag"]: - raw = token["data"] - token["data"] = OrderedDict(raw) - if len(raw) > len(token["data"]): - # we had some duplicated attribute, fix so first wins - token["data"].update(raw[::-1]) - - return token - - def adjustMathMLAttributes(self, token): - adjust_attributes(token, adjustMathMLAttributes) - - def adjustSVGAttributes(self, token): - adjust_attributes(token, adjustSVGAttributes) - - def adjustForeignAttributes(self, token): - adjust_attributes(token, adjustForeignAttributesMap) - - def reparseTokenNormal(self, token): - # pylint:disable=unused-argument - self.parser.phase() - - def resetInsertionMode(self): - # The name of this method is mostly historical. (It's also used in the - # specification.) - last = False - newModes = { - "select": "inSelect", - "td": "inCell", - "th": "inCell", - "tr": "inRow", - "tbody": "inTableBody", - "thead": "inTableBody", - "tfoot": "inTableBody", - "caption": "inCaption", - "colgroup": "inColumnGroup", - "table": "inTable", - "head": "inBody", - "body": "inBody", - "frameset": "inFrameset", - "html": "beforeHead" - } - for node in self.tree.openElements[::-1]: - nodeName = node.name - new_phase = None - if node == self.tree.openElements[0]: - assert self.innerHTML - last = True - nodeName = self.innerHTML - # Check for conditions that should only happen in the innerHTML - # case - if nodeName in ("select", "colgroup", "head", "html"): - assert self.innerHTML - - if not last and node.namespace != self.tree.defaultNamespace: - continue - - if nodeName in newModes: - new_phase = self.phases[newModes[nodeName]] - break - elif last: - new_phase = self.phases["inBody"] - break - - self.phase = new_phase - - def parseRCDataRawtext(self, token, contentType): - # Generic RCDATA/RAWTEXT Parsing algorithm - assert contentType in ("RAWTEXT", "RCDATA") - - self.tree.insertElement(token) - - if contentType == "RAWTEXT": - self.tokenizer.state = self.tokenizer.rawtextState - else: - self.tokenizer.state = self.tokenizer.rcdataState - - self.originalPhase = self.phase - - self.phase = self.phases["text"] - - -@_utils.memoize -def getPhases(debug): - def log(function): - """Logger that records which phase processes each token""" - type_names = dict((value, key) for key, value in - tokenTypes.items()) - - def wrapped(self, *args, **kwargs): - if function.__name__.startswith("process") and len(args) > 0: - token = args[0] - try: - info = {"type": type_names[token['type']]} - except: - raise - if token['type'] in tagTokenTypes: - info["name"] = token['name'] - - self.parser.log.append((self.parser.tokenizer.state.__name__, - self.parser.phase.__class__.__name__, - self.__class__.__name__, - function.__name__, - info)) - return function(self, *args, **kwargs) - else: - return function(self, *args, **kwargs) - return wrapped - - def getMetaclass(use_metaclass, metaclass_func): - if use_metaclass: - return method_decorator_metaclass(metaclass_func) - else: - return type - - # pylint:disable=unused-argument - class Phase(with_metaclass(getMetaclass(debug, log))): - """Base class for helper object that implements each phase of processing - """ - - def __init__(self, parser, tree): - self.parser = parser - self.tree = tree - - def processEOF(self): - raise NotImplementedError - - def processComment(self, token): - # For most phases the following is correct. Where it's not it will be - # overridden. - self.tree.insertComment(token, self.tree.openElements[-1]) - - def processDoctype(self, token): - self.parser.parseError("unexpected-doctype") - - def processCharacters(self, token): - self.tree.insertText(token["data"]) - - def processSpaceCharacters(self, token): - self.tree.insertText(token["data"]) - - def processStartTag(self, token): - return self.startTagHandler[token["name"]](token) - - def startTagHtml(self, token): - if not self.parser.firstStartTag and token["name"] == "html": - self.parser.parseError("non-html-root") - # XXX Need a check here to see if the first start tag token emitted is - # this token... If it's not, invoke self.parser.parseError(). - for attr, value in token["data"].items(): - if attr not in self.tree.openElements[0].attributes: - self.tree.openElements[0].attributes[attr] = value - self.parser.firstStartTag = False - - def processEndTag(self, token): - return self.endTagHandler[token["name"]](token) - - class InitialPhase(Phase): - def processSpaceCharacters(self, token): - pass - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processDoctype(self, token): - name = token["name"] - publicId = token["publicId"] - systemId = token["systemId"] - correct = token["correct"] - - if (name != "html" or publicId is not None or - systemId is not None and systemId != "about:legacy-compat"): - self.parser.parseError("unknown-doctype") - - if publicId is None: - publicId = "" - - self.tree.insertDoctype(token) - - if publicId != "": - publicId = publicId.translate(asciiUpper2Lower) - - if (not correct or token["name"] != "html" or - publicId.startswith( - ("+//silmaril//dtd html pro v0r11 19970101//", - "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", - "-//as//dtd html 3.0 aswedit + extensions//", - "-//ietf//dtd html 2.0 level 1//", - "-//ietf//dtd html 2.0 level 2//", - "-//ietf//dtd html 2.0 strict level 1//", - "-//ietf//dtd html 2.0 strict level 2//", - "-//ietf//dtd html 2.0 strict//", - "-//ietf//dtd html 2.0//", - "-//ietf//dtd html 2.1e//", - "-//ietf//dtd html 3.0//", - "-//ietf//dtd html 3.2 final//", - "-//ietf//dtd html 3.2//", - "-//ietf//dtd html 3//", - "-//ietf//dtd html level 0//", - "-//ietf//dtd html level 1//", - "-//ietf//dtd html level 2//", - "-//ietf//dtd html level 3//", - "-//ietf//dtd html strict level 0//", - "-//ietf//dtd html strict level 1//", - "-//ietf//dtd html strict level 2//", - "-//ietf//dtd html strict level 3//", - "-//ietf//dtd html strict//", - "-//ietf//dtd html//", - "-//metrius//dtd metrius presentational//", - "-//microsoft//dtd internet explorer 2.0 html strict//", - "-//microsoft//dtd internet explorer 2.0 html//", - "-//microsoft//dtd internet explorer 2.0 tables//", - "-//microsoft//dtd internet explorer 3.0 html strict//", - "-//microsoft//dtd internet explorer 3.0 html//", - "-//microsoft//dtd internet explorer 3.0 tables//", - "-//netscape comm. corp.//dtd html//", - "-//netscape comm. corp.//dtd strict html//", - "-//o'reilly and associates//dtd html 2.0//", - "-//o'reilly and associates//dtd html extended 1.0//", - "-//o'reilly and associates//dtd html extended relaxed 1.0//", - "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", - "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", - "-//spyglass//dtd html 2.0 extended//", - "-//sq//dtd html 2.0 hotmetal + extensions//", - "-//sun microsystems corp.//dtd hotjava html//", - "-//sun microsystems corp.//dtd hotjava strict html//", - "-//w3c//dtd html 3 1995-03-24//", - "-//w3c//dtd html 3.2 draft//", - "-//w3c//dtd html 3.2 final//", - "-//w3c//dtd html 3.2//", - "-//w3c//dtd html 3.2s draft//", - "-//w3c//dtd html 4.0 frameset//", - "-//w3c//dtd html 4.0 transitional//", - "-//w3c//dtd html experimental 19960712//", - "-//w3c//dtd html experimental 970421//", - "-//w3c//dtd w3 html//", - "-//w3o//dtd w3 html 3.0//", - "-//webtechs//dtd mozilla html 2.0//", - "-//webtechs//dtd mozilla html//")) or - publicId in ("-//w3o//dtd w3 html strict 3.0//en//", - "-/w3c/dtd html 4.0 transitional/en", - "html") or - publicId.startswith( - ("-//w3c//dtd html 4.01 frameset//", - "-//w3c//dtd html 4.01 transitional//")) and - systemId is None or - systemId and systemId.lower() == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd"): - self.parser.compatMode = "quirks" - elif (publicId.startswith( - ("-//w3c//dtd xhtml 1.0 frameset//", - "-//w3c//dtd xhtml 1.0 transitional//")) or - publicId.startswith( - ("-//w3c//dtd html 4.01 frameset//", - "-//w3c//dtd html 4.01 transitional//")) and - systemId is not None): - self.parser.compatMode = "limited quirks" - - self.parser.phase = self.parser.phases["beforeHtml"] - - def anythingElse(self): - self.parser.compatMode = "quirks" - self.parser.phase = self.parser.phases["beforeHtml"] - - def processCharacters(self, token): - self.parser.parseError("expected-doctype-but-got-chars") - self.anythingElse() - return token - - def processStartTag(self, token): - self.parser.parseError("expected-doctype-but-got-start-tag", - {"name": token["name"]}) - self.anythingElse() - return token - - def processEndTag(self, token): - self.parser.parseError("expected-doctype-but-got-end-tag", - {"name": token["name"]}) - self.anythingElse() - return token - - def processEOF(self): - self.parser.parseError("expected-doctype-but-got-eof") - self.anythingElse() - return True - - class BeforeHtmlPhase(Phase): - # helper methods - def insertHtmlElement(self): - self.tree.insertRoot(impliedTagToken("html", "StartTag")) - self.parser.phase = self.parser.phases["beforeHead"] - - # other - def processEOF(self): - self.insertHtmlElement() - return True - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processSpaceCharacters(self, token): - pass - - def processCharacters(self, token): - self.insertHtmlElement() - return token - - def processStartTag(self, token): - if token["name"] == "html": - self.parser.firstStartTag = True - self.insertHtmlElement() - return token - - def processEndTag(self, token): - if token["name"] not in ("head", "body", "html", "br"): - self.parser.parseError("unexpected-end-tag-before-html", - {"name": token["name"]}) - else: - self.insertHtmlElement() - return token - - class BeforeHeadPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("head", self.startTagHead) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - (("head", "body", "html", "br"), self.endTagImplyHead) - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.startTagHead(impliedTagToken("head", "StartTag")) - return True - - def processSpaceCharacters(self, token): - pass - - def processCharacters(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagHead(self, token): - self.tree.insertElement(token) - self.tree.headPointer = self.tree.openElements[-1] - self.parser.phase = self.parser.phases["inHead"] - - def startTagOther(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token - - def endTagImplyHead(self, token): - self.startTagHead(impliedTagToken("head", "StartTag")) - return token - - def endTagOther(self, token): - self.parser.parseError("end-tag-after-implied-root", - {"name": token["name"]}) - - class InHeadPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("title", self.startTagTitle), - (("noframes", "style"), self.startTagNoFramesStyle), - ("noscript", self.startTagNoscript), - ("script", self.startTagScript), - (("base", "basefont", "bgsound", "command", "link"), - self.startTagBaseLinkCommand), - ("meta", self.startTagMeta), - ("head", self.startTagHead) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("head", self.endTagHead), - (("br", "html", "body"), self.endTagHtmlBodyBr) - ]) - self.endTagHandler.default = self.endTagOther - - # the real thing - def processEOF(self): - self.anythingElse() - return True - - def processCharacters(self, token): - self.anythingElse() - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagHead(self, token): - self.parser.parseError("two-heads-are-not-better-than-one") - - def startTagBaseLinkCommand(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def startTagMeta(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - attributes = token["data"] - if self.parser.tokenizer.stream.charEncoding[1] == "tentative": - if "charset" in attributes: - self.parser.tokenizer.stream.changeEncoding(attributes["charset"]) - elif ("content" in attributes and - "http-equiv" in attributes and - attributes["http-equiv"].lower() == "content-type"): - # Encoding it as UTF-8 here is a hack, as really we should pass - # the abstract Unicode string, and just use the - # ContentAttrParser on that, but using UTF-8 allows all chars - # to be encoded and as a ASCII-superset works. - data = _inputstream.EncodingBytes(attributes["content"].encode("utf-8")) - parser = _inputstream.ContentAttrParser(data) - codec = parser.parse() - self.parser.tokenizer.stream.changeEncoding(codec) - - def startTagTitle(self, token): - self.parser.parseRCDataRawtext(token, "RCDATA") - - def startTagNoFramesStyle(self, token): - # Need to decide whether to implement the scripting-disabled case - self.parser.parseRCDataRawtext(token, "RAWTEXT") - - def startTagNoscript(self, token): - if self.parser.scripting: - self.parser.parseRCDataRawtext(token, "RAWTEXT") - else: - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inHeadNoscript"] - - def startTagScript(self, token): - self.tree.insertElement(token) - self.parser.tokenizer.state = self.parser.tokenizer.scriptDataState - self.parser.originalPhase = self.parser.phase - self.parser.phase = self.parser.phases["text"] - - def startTagOther(self, token): - self.anythingElse() - return token - - def endTagHead(self, token): - node = self.parser.tree.openElements.pop() - assert node.name == "head", "Expected head got %s" % node.name - self.parser.phase = self.parser.phases["afterHead"] - - def endTagHtmlBodyBr(self, token): - self.anythingElse() - return token - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def anythingElse(self): - self.endTagHead(impliedTagToken("head")) - - class InHeadNoscriptPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("basefont", "bgsound", "link", "meta", "noframes", "style"), self.startTagBaseLinkCommand), - (("head", "noscript"), self.startTagHeadNoscript), - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("noscript", self.endTagNoscript), - ("br", self.endTagBr), - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.parser.parseError("eof-in-head-noscript") - self.anythingElse() - return True - - def processComment(self, token): - return self.parser.phases["inHead"].processComment(token) - - def processCharacters(self, token): - self.parser.parseError("char-in-head-noscript") - self.anythingElse() - return token - - def processSpaceCharacters(self, token): - return self.parser.phases["inHead"].processSpaceCharacters(token) - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagBaseLinkCommand(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagHeadNoscript(self, token): - self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) - - def startTagOther(self, token): - self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) - self.anythingElse() - return token - - def endTagNoscript(self, token): - node = self.parser.tree.openElements.pop() - assert node.name == "noscript", "Expected noscript got %s" % node.name - self.parser.phase = self.parser.phases["inHead"] - - def endTagBr(self, token): - self.parser.parseError("unexpected-inhead-noscript-tag", {"name": token["name"]}) - self.anythingElse() - return token - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def anythingElse(self): - # Caller must raise parse error first! - self.endTagNoscript(impliedTagToken("noscript")) - - class AfterHeadPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("body", self.startTagBody), - ("frameset", self.startTagFrameset), - (("base", "basefont", "bgsound", "link", "meta", "noframes", "script", - "style", "title"), - self.startTagFromHead), - ("head", self.startTagHead) - ]) - self.startTagHandler.default = self.startTagOther - self.endTagHandler = _utils.MethodDispatcher([(("body", "html", "br"), - self.endTagHtmlBodyBr)]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.anythingElse() - return True - - def processCharacters(self, token): - self.anythingElse() - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagBody(self, token): - self.parser.framesetOK = False - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inBody"] - - def startTagFrameset(self, token): - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inFrameset"] - - def startTagFromHead(self, token): - self.parser.parseError("unexpected-start-tag-out-of-my-head", - {"name": token["name"]}) - self.tree.openElements.append(self.tree.headPointer) - self.parser.phases["inHead"].processStartTag(token) - for node in self.tree.openElements[::-1]: - if node.name == "head": - self.tree.openElements.remove(node) - break - - def startTagHead(self, token): - self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) - - def startTagOther(self, token): - self.anythingElse() - return token - - def endTagHtmlBodyBr(self, token): - self.anythingElse() - return token - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def anythingElse(self): - self.tree.insertElement(impliedTagToken("body", "StartTag")) - self.parser.phase = self.parser.phases["inBody"] - self.parser.framesetOK = True - - class InBodyPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#parsing-main-inbody - # the really-really-really-very crazy mode - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - # Set this to the default handler - self.processSpaceCharacters = self.processSpaceCharactersNonPre - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("base", "basefont", "bgsound", "command", "link", "meta", - "script", "style", "title"), - self.startTagProcessInHead), - ("body", self.startTagBody), - ("frameset", self.startTagFrameset), - (("address", "article", "aside", "blockquote", "center", "details", - "dir", "div", "dl", "fieldset", "figcaption", "figure", - "footer", "header", "hgroup", "main", "menu", "nav", "ol", "p", - "section", "summary", "ul"), - self.startTagCloseP), - (headingElements, self.startTagHeading), - (("pre", "listing"), self.startTagPreListing), - ("form", self.startTagForm), - (("li", "dd", "dt"), self.startTagListItem), - ("plaintext", self.startTagPlaintext), - ("a", self.startTagA), - (("b", "big", "code", "em", "font", "i", "s", "small", "strike", - "strong", "tt", "u"), self.startTagFormatting), - ("nobr", self.startTagNobr), - ("button", self.startTagButton), - (("applet", "marquee", "object"), self.startTagAppletMarqueeObject), - ("xmp", self.startTagXmp), - ("table", self.startTagTable), - (("area", "br", "embed", "img", "keygen", "wbr"), - self.startTagVoidFormatting), - (("param", "source", "track"), self.startTagParamSource), - ("input", self.startTagInput), - ("hr", self.startTagHr), - ("image", self.startTagImage), - ("isindex", self.startTagIsIndex), - ("textarea", self.startTagTextarea), - ("iframe", self.startTagIFrame), - ("noscript", self.startTagNoscript), - (("noembed", "noframes"), self.startTagRawtext), - ("select", self.startTagSelect), - (("rp", "rt"), self.startTagRpRt), - (("option", "optgroup"), self.startTagOpt), - (("math"), self.startTagMath), - (("svg"), self.startTagSvg), - (("caption", "col", "colgroup", "frame", "head", - "tbody", "td", "tfoot", "th", "thead", - "tr"), self.startTagMisplaced) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("body", self.endTagBody), - ("html", self.endTagHtml), - (("address", "article", "aside", "blockquote", "button", "center", - "details", "dialog", "dir", "div", "dl", "fieldset", "figcaption", "figure", - "footer", "header", "hgroup", "listing", "main", "menu", "nav", "ol", "pre", - "section", "summary", "ul"), self.endTagBlock), - ("form", self.endTagForm), - ("p", self.endTagP), - (("dd", "dt", "li"), self.endTagListItem), - (headingElements, self.endTagHeading), - (("a", "b", "big", "code", "em", "font", "i", "nobr", "s", "small", - "strike", "strong", "tt", "u"), self.endTagFormatting), - (("applet", "marquee", "object"), self.endTagAppletMarqueeObject), - ("br", self.endTagBr), - ]) - self.endTagHandler.default = self.endTagOther - - def isMatchingFormattingElement(self, node1, node2): - return (node1.name == node2.name and - node1.namespace == node2.namespace and - node1.attributes == node2.attributes) - - # helper - def addFormattingElement(self, token): - self.tree.insertElement(token) - element = self.tree.openElements[-1] - - matchingElements = [] - for node in self.tree.activeFormattingElements[::-1]: - if node is Marker: - break - elif self.isMatchingFormattingElement(node, element): - matchingElements.append(node) - - assert len(matchingElements) <= 3 - if len(matchingElements) == 3: - self.tree.activeFormattingElements.remove(matchingElements[-1]) - self.tree.activeFormattingElements.append(element) - - # the real deal - def processEOF(self): - allowed_elements = frozenset(("dd", "dt", "li", "p", "tbody", "td", - "tfoot", "th", "thead", "tr", "body", - "html")) - for node in self.tree.openElements[::-1]: - if node.name not in allowed_elements: - self.parser.parseError("expected-closing-tag-but-got-eof") - break - # Stop parsing - - def processSpaceCharactersDropNewline(self, token): - # Sometimes (start of <pre>, <listing>, and <textarea> blocks) we - # want to drop leading newlines - data = token["data"] - self.processSpaceCharacters = self.processSpaceCharactersNonPre - if (data.startswith("\n") and - self.tree.openElements[-1].name in ("pre", "listing", "textarea") and - not self.tree.openElements[-1].hasContent()): - data = data[1:] - if data: - self.tree.reconstructActiveFormattingElements() - self.tree.insertText(data) - - def processCharacters(self, token): - if token["data"] == "\u0000": - # The tokenizer should always emit null on its own - return - self.tree.reconstructActiveFormattingElements() - self.tree.insertText(token["data"]) - # This must be bad for performance - if (self.parser.framesetOK and - any([char not in spaceCharacters - for char in token["data"]])): - self.parser.framesetOK = False - - def processSpaceCharactersNonPre(self, token): - self.tree.reconstructActiveFormattingElements() - self.tree.insertText(token["data"]) - - def startTagProcessInHead(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagBody(self, token): - self.parser.parseError("unexpected-start-tag", {"name": "body"}) - if (len(self.tree.openElements) == 1 or - self.tree.openElements[1].name != "body"): - assert self.parser.innerHTML - else: - self.parser.framesetOK = False - for attr, value in token["data"].items(): - if attr not in self.tree.openElements[1].attributes: - self.tree.openElements[1].attributes[attr] = value - - def startTagFrameset(self, token): - self.parser.parseError("unexpected-start-tag", {"name": "frameset"}) - if (len(self.tree.openElements) == 1 or self.tree.openElements[1].name != "body"): - assert self.parser.innerHTML - elif not self.parser.framesetOK: - pass - else: - if self.tree.openElements[1].parent: - self.tree.openElements[1].parent.removeChild(self.tree.openElements[1]) - while self.tree.openElements[-1].name != "html": - self.tree.openElements.pop() - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inFrameset"] - - def startTagCloseP(self, token): - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - self.tree.insertElement(token) - - def startTagPreListing(self, token): - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - self.tree.insertElement(token) - self.parser.framesetOK = False - self.processSpaceCharacters = self.processSpaceCharactersDropNewline - - def startTagForm(self, token): - if self.tree.formPointer: - self.parser.parseError("unexpected-start-tag", {"name": "form"}) - else: - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - self.tree.insertElement(token) - self.tree.formPointer = self.tree.openElements[-1] - - def startTagListItem(self, token): - self.parser.framesetOK = False - - stopNamesMap = {"li": ["li"], - "dt": ["dt", "dd"], - "dd": ["dt", "dd"]} - stopNames = stopNamesMap[token["name"]] - for node in reversed(self.tree.openElements): - if node.name in stopNames: - self.parser.phase.processEndTag( - impliedTagToken(node.name, "EndTag")) - break - if (node.nameTuple in specialElements and - node.name not in ("address", "div", "p")): - break - - if self.tree.elementInScope("p", variant="button"): - self.parser.phase.processEndTag( - impliedTagToken("p", "EndTag")) - - self.tree.insertElement(token) - - def startTagPlaintext(self, token): - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - self.tree.insertElement(token) - self.parser.tokenizer.state = self.parser.tokenizer.plaintextState - - def startTagHeading(self, token): - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - if self.tree.openElements[-1].name in headingElements: - self.parser.parseError("unexpected-start-tag", {"name": token["name"]}) - self.tree.openElements.pop() - self.tree.insertElement(token) - - def startTagA(self, token): - afeAElement = self.tree.elementInActiveFormattingElements("a") - if afeAElement: - self.parser.parseError("unexpected-start-tag-implies-end-tag", - {"startName": "a", "endName": "a"}) - self.endTagFormatting(impliedTagToken("a")) - if afeAElement in self.tree.openElements: - self.tree.openElements.remove(afeAElement) - if afeAElement in self.tree.activeFormattingElements: - self.tree.activeFormattingElements.remove(afeAElement) - self.tree.reconstructActiveFormattingElements() - self.addFormattingElement(token) - - def startTagFormatting(self, token): - self.tree.reconstructActiveFormattingElements() - self.addFormattingElement(token) - - def startTagNobr(self, token): - self.tree.reconstructActiveFormattingElements() - if self.tree.elementInScope("nobr"): - self.parser.parseError("unexpected-start-tag-implies-end-tag", - {"startName": "nobr", "endName": "nobr"}) - self.processEndTag(impliedTagToken("nobr")) - # XXX Need tests that trigger the following - self.tree.reconstructActiveFormattingElements() - self.addFormattingElement(token) - - def startTagButton(self, token): - if self.tree.elementInScope("button"): - self.parser.parseError("unexpected-start-tag-implies-end-tag", - {"startName": "button", "endName": "button"}) - self.processEndTag(impliedTagToken("button")) - return token - else: - self.tree.reconstructActiveFormattingElements() - self.tree.insertElement(token) - self.parser.framesetOK = False - - def startTagAppletMarqueeObject(self, token): - self.tree.reconstructActiveFormattingElements() - self.tree.insertElement(token) - self.tree.activeFormattingElements.append(Marker) - self.parser.framesetOK = False - - def startTagXmp(self, token): - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - self.tree.reconstructActiveFormattingElements() - self.parser.framesetOK = False - self.parser.parseRCDataRawtext(token, "RAWTEXT") - - def startTagTable(self, token): - if self.parser.compatMode != "quirks": - if self.tree.elementInScope("p", variant="button"): - self.processEndTag(impliedTagToken("p")) - self.tree.insertElement(token) - self.parser.framesetOK = False - self.parser.phase = self.parser.phases["inTable"] - - def startTagVoidFormatting(self, token): - self.tree.reconstructActiveFormattingElements() - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - self.parser.framesetOK = False - - def startTagInput(self, token): - framesetOK = self.parser.framesetOK - self.startTagVoidFormatting(token) - if ("type" in token["data"] and - token["data"]["type"].translate(asciiUpper2Lower) == "hidden"): - # input type=hidden doesn't change framesetOK - self.parser.framesetOK = framesetOK - - def startTagParamSource(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def startTagHr(self, token): - if self.tree.elementInScope("p", variant="button"): - self.endTagP(impliedTagToken("p")) - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - self.parser.framesetOK = False - - def startTagImage(self, token): - # No really... - self.parser.parseError("unexpected-start-tag-treated-as", - {"originalName": "image", "newName": "img"}) - self.processStartTag(impliedTagToken("img", "StartTag", - attributes=token["data"], - selfClosing=token["selfClosing"])) - - def startTagIsIndex(self, token): - self.parser.parseError("deprecated-tag", {"name": "isindex"}) - if self.tree.formPointer: - return - form_attrs = {} - if "action" in token["data"]: - form_attrs["action"] = token["data"]["action"] - self.processStartTag(impliedTagToken("form", "StartTag", - attributes=form_attrs)) - self.processStartTag(impliedTagToken("hr", "StartTag")) - self.processStartTag(impliedTagToken("label", "StartTag")) - # XXX Localization ... - if "prompt" in token["data"]: - prompt = token["data"]["prompt"] - else: - prompt = "This is a searchable index. Enter search keywords: " - self.processCharacters( - {"type": tokenTypes["Characters"], "data": prompt}) - attributes = token["data"].copy() - if "action" in attributes: - del attributes["action"] - if "prompt" in attributes: - del attributes["prompt"] - attributes["name"] = "isindex" - self.processStartTag(impliedTagToken("input", "StartTag", - attributes=attributes, - selfClosing=token["selfClosing"])) - self.processEndTag(impliedTagToken("label")) - self.processStartTag(impliedTagToken("hr", "StartTag")) - self.processEndTag(impliedTagToken("form")) - - def startTagTextarea(self, token): - self.tree.insertElement(token) - self.parser.tokenizer.state = self.parser.tokenizer.rcdataState - self.processSpaceCharacters = self.processSpaceCharactersDropNewline - self.parser.framesetOK = False - - def startTagIFrame(self, token): - self.parser.framesetOK = False - self.startTagRawtext(token) - - def startTagNoscript(self, token): - if self.parser.scripting: - self.startTagRawtext(token) - else: - self.startTagOther(token) - - def startTagRawtext(self, token): - """iframe, noembed noframes, noscript(if scripting enabled)""" - self.parser.parseRCDataRawtext(token, "RAWTEXT") - - def startTagOpt(self, token): - if self.tree.openElements[-1].name == "option": - self.parser.phase.processEndTag(impliedTagToken("option")) - self.tree.reconstructActiveFormattingElements() - self.parser.tree.insertElement(token) - - def startTagSelect(self, token): - self.tree.reconstructActiveFormattingElements() - self.tree.insertElement(token) - self.parser.framesetOK = False - if self.parser.phase in (self.parser.phases["inTable"], - self.parser.phases["inCaption"], - self.parser.phases["inColumnGroup"], - self.parser.phases["inTableBody"], - self.parser.phases["inRow"], - self.parser.phases["inCell"]): - self.parser.phase = self.parser.phases["inSelectInTable"] - else: - self.parser.phase = self.parser.phases["inSelect"] - - def startTagRpRt(self, token): - if self.tree.elementInScope("ruby"): - self.tree.generateImpliedEndTags() - if self.tree.openElements[-1].name != "ruby": - self.parser.parseError() - self.tree.insertElement(token) - - def startTagMath(self, token): - self.tree.reconstructActiveFormattingElements() - self.parser.adjustMathMLAttributes(token) - self.parser.adjustForeignAttributes(token) - token["namespace"] = namespaces["mathml"] - self.tree.insertElement(token) - # Need to get the parse error right for the case where the token - # has a namespace not equal to the xmlns attribute - if token["selfClosing"]: - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def startTagSvg(self, token): - self.tree.reconstructActiveFormattingElements() - self.parser.adjustSVGAttributes(token) - self.parser.adjustForeignAttributes(token) - token["namespace"] = namespaces["svg"] - self.tree.insertElement(token) - # Need to get the parse error right for the case where the token - # has a namespace not equal to the xmlns attribute - if token["selfClosing"]: - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def startTagMisplaced(self, token): - """ Elements that should be children of other elements that have a - different insertion mode; here they are ignored - "caption", "col", "colgroup", "frame", "frameset", "head", - "option", "optgroup", "tbody", "td", "tfoot", "th", "thead", - "tr", "noscript" - """ - self.parser.parseError("unexpected-start-tag-ignored", {"name": token["name"]}) - - def startTagOther(self, token): - self.tree.reconstructActiveFormattingElements() - self.tree.insertElement(token) - - def endTagP(self, token): - if not self.tree.elementInScope("p", variant="button"): - self.startTagCloseP(impliedTagToken("p", "StartTag")) - self.parser.parseError("unexpected-end-tag", {"name": "p"}) - self.endTagP(impliedTagToken("p", "EndTag")) - else: - self.tree.generateImpliedEndTags("p") - if self.tree.openElements[-1].name != "p": - self.parser.parseError("unexpected-end-tag", {"name": "p"}) - node = self.tree.openElements.pop() - while node.name != "p": - node = self.tree.openElements.pop() - - def endTagBody(self, token): - if not self.tree.elementInScope("body"): - self.parser.parseError() - return - elif self.tree.openElements[-1].name != "body": - for node in self.tree.openElements[2:]: - if node.name not in frozenset(("dd", "dt", "li", "optgroup", - "option", "p", "rp", "rt", - "tbody", "td", "tfoot", - "th", "thead", "tr", "body", - "html")): - # Not sure this is the correct name for the parse error - self.parser.parseError( - "expected-one-end-tag-but-got-another", - {"gotName": "body", "expectedName": node.name}) - break - self.parser.phase = self.parser.phases["afterBody"] - - def endTagHtml(self, token): - # We repeat the test for the body end tag token being ignored here - if self.tree.elementInScope("body"): - self.endTagBody(impliedTagToken("body")) - return token - - def endTagBlock(self, token): - # Put us back in the right whitespace handling mode - if token["name"] == "pre": - self.processSpaceCharacters = self.processSpaceCharactersNonPre - inScope = self.tree.elementInScope(token["name"]) - if inScope: - self.tree.generateImpliedEndTags() - if self.tree.openElements[-1].name != token["name"]: - self.parser.parseError("end-tag-too-early", {"name": token["name"]}) - if inScope: - node = self.tree.openElements.pop() - while node.name != token["name"]: - node = self.tree.openElements.pop() - - def endTagForm(self, token): - node = self.tree.formPointer - self.tree.formPointer = None - if node is None or not self.tree.elementInScope(node): - self.parser.parseError("unexpected-end-tag", - {"name": "form"}) - else: - self.tree.generateImpliedEndTags() - if self.tree.openElements[-1] != node: - self.parser.parseError("end-tag-too-early-ignored", - {"name": "form"}) - self.tree.openElements.remove(node) - - def endTagListItem(self, token): - if token["name"] == "li": - variant = "list" - else: - variant = None - if not self.tree.elementInScope(token["name"], variant=variant): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - else: - self.tree.generateImpliedEndTags(exclude=token["name"]) - if self.tree.openElements[-1].name != token["name"]: - self.parser.parseError( - "end-tag-too-early", - {"name": token["name"]}) - node = self.tree.openElements.pop() - while node.name != token["name"]: - node = self.tree.openElements.pop() - - def endTagHeading(self, token): - for item in headingElements: - if self.tree.elementInScope(item): - self.tree.generateImpliedEndTags() - break - if self.tree.openElements[-1].name != token["name"]: - self.parser.parseError("end-tag-too-early", {"name": token["name"]}) - - for item in headingElements: - if self.tree.elementInScope(item): - item = self.tree.openElements.pop() - while item.name not in headingElements: - item = self.tree.openElements.pop() - break - - def endTagFormatting(self, token): - """The much-feared adoption agency algorithm""" - # http://svn.whatwg.org/webapps/complete.html#adoptionAgency revision 7867 - # XXX Better parseError messages appreciated. - - # Step 1 - outerLoopCounter = 0 - - # Step 2 - while outerLoopCounter < 8: - - # Step 3 - outerLoopCounter += 1 - - # Step 4: - - # Let the formatting element be the last element in - # the list of active formatting elements that: - # - is between the end of the list and the last scope - # marker in the list, if any, or the start of the list - # otherwise, and - # - has the same tag name as the token. - formattingElement = self.tree.elementInActiveFormattingElements( - token["name"]) - if (not formattingElement or - (formattingElement in self.tree.openElements and - not self.tree.elementInScope(formattingElement.name))): - # If there is no such node, then abort these steps - # and instead act as described in the "any other - # end tag" entry below. - self.endTagOther(token) - return - - # Otherwise, if there is such a node, but that node is - # not in the stack of open elements, then this is a - # parse error; remove the element from the list, and - # abort these steps. - elif formattingElement not in self.tree.openElements: - self.parser.parseError("adoption-agency-1.2", {"name": token["name"]}) - self.tree.activeFormattingElements.remove(formattingElement) - return - - # Otherwise, if there is such a node, and that node is - # also in the stack of open elements, but the element - # is not in scope, then this is a parse error; ignore - # the token, and abort these steps. - elif not self.tree.elementInScope(formattingElement.name): - self.parser.parseError("adoption-agency-4.4", {"name": token["name"]}) - return - - # Otherwise, there is a formatting element and that - # element is in the stack and is in scope. If the - # element is not the current node, this is a parse - # error. In any case, proceed with the algorithm as - # written in the following steps. - else: - if formattingElement != self.tree.openElements[-1]: - self.parser.parseError("adoption-agency-1.3", {"name": token["name"]}) - - # Step 5: - - # Let the furthest block be the topmost node in the - # stack of open elements that is lower in the stack - # than the formatting element, and is an element in - # the special category. There might not be one. - afeIndex = self.tree.openElements.index(formattingElement) - furthestBlock = None - for element in self.tree.openElements[afeIndex:]: - if element.nameTuple in specialElements: - furthestBlock = element - break - - # Step 6: - - # If there is no furthest block, then the UA must - # first pop all the nodes from the bottom of the stack - # of open elements, from the current node up to and - # including the formatting element, then remove the - # formatting element from the list of active - # formatting elements, and finally abort these steps. - if furthestBlock is None: - element = self.tree.openElements.pop() - while element != formattingElement: - element = self.tree.openElements.pop() - self.tree.activeFormattingElements.remove(element) - return - - # Step 7 - commonAncestor = self.tree.openElements[afeIndex - 1] - - # Step 8: - # The bookmark is supposed to help us identify where to reinsert - # nodes in step 15. We have to ensure that we reinsert nodes after - # the node before the active formatting element. Note the bookmark - # can move in step 9.7 - bookmark = self.tree.activeFormattingElements.index(formattingElement) - - # Step 9 - lastNode = node = furthestBlock - innerLoopCounter = 0 - - index = self.tree.openElements.index(node) - while innerLoopCounter < 3: - innerLoopCounter += 1 - # Node is element before node in open elements - index -= 1 - node = self.tree.openElements[index] - if node not in self.tree.activeFormattingElements: - self.tree.openElements.remove(node) - continue - # Step 9.6 - if node == formattingElement: - break - # Step 9.7 - if lastNode == furthestBlock: - bookmark = self.tree.activeFormattingElements.index(node) + 1 - # Step 9.8 - clone = node.cloneNode() - # Replace node with clone - self.tree.activeFormattingElements[ - self.tree.activeFormattingElements.index(node)] = clone - self.tree.openElements[ - self.tree.openElements.index(node)] = clone - node = clone - # Step 9.9 - # Remove lastNode from its parents, if any - if lastNode.parent: - lastNode.parent.removeChild(lastNode) - node.appendChild(lastNode) - # Step 9.10 - lastNode = node - - # Step 10 - # Foster parent lastNode if commonAncestor is a - # table, tbody, tfoot, thead, or tr we need to foster - # parent the lastNode - if lastNode.parent: - lastNode.parent.removeChild(lastNode) - - if commonAncestor.name in frozenset(("table", "tbody", "tfoot", "thead", "tr")): - parent, insertBefore = self.tree.getTableMisnestedNodePosition() - parent.insertBefore(lastNode, insertBefore) - else: - commonAncestor.appendChild(lastNode) - - # Step 11 - clone = formattingElement.cloneNode() - - # Step 12 - furthestBlock.reparentChildren(clone) - - # Step 13 - furthestBlock.appendChild(clone) - - # Step 14 - self.tree.activeFormattingElements.remove(formattingElement) - self.tree.activeFormattingElements.insert(bookmark, clone) - - # Step 15 - self.tree.openElements.remove(formattingElement) - self.tree.openElements.insert( - self.tree.openElements.index(furthestBlock) + 1, clone) - - def endTagAppletMarqueeObject(self, token): - if self.tree.elementInScope(token["name"]): - self.tree.generateImpliedEndTags() - if self.tree.openElements[-1].name != token["name"]: - self.parser.parseError("end-tag-too-early", {"name": token["name"]}) - - if self.tree.elementInScope(token["name"]): - element = self.tree.openElements.pop() - while element.name != token["name"]: - element = self.tree.openElements.pop() - self.tree.clearActiveFormattingElements() - - def endTagBr(self, token): - self.parser.parseError("unexpected-end-tag-treated-as", - {"originalName": "br", "newName": "br element"}) - self.tree.reconstructActiveFormattingElements() - self.tree.insertElement(impliedTagToken("br", "StartTag")) - self.tree.openElements.pop() - - def endTagOther(self, token): - for node in self.tree.openElements[::-1]: - if node.name == token["name"]: - self.tree.generateImpliedEndTags(exclude=token["name"]) - if self.tree.openElements[-1].name != token["name"]: - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - while self.tree.openElements.pop() != node: - pass - break - else: - if node.nameTuple in specialElements: - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - break - - class TextPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - self.startTagHandler = _utils.MethodDispatcher([]) - self.startTagHandler.default = self.startTagOther - self.endTagHandler = _utils.MethodDispatcher([ - ("script", self.endTagScript)]) - self.endTagHandler.default = self.endTagOther - - def processCharacters(self, token): - self.tree.insertText(token["data"]) - - def processEOF(self): - self.parser.parseError("expected-named-closing-tag-but-got-eof", - {"name": self.tree.openElements[-1].name}) - self.tree.openElements.pop() - self.parser.phase = self.parser.originalPhase - return True - - def startTagOther(self, token): - assert False, "Tried to process start tag %s in RCDATA/RAWTEXT mode" % token['name'] - - def endTagScript(self, token): - node = self.tree.openElements.pop() - assert node.name == "script" - self.parser.phase = self.parser.originalPhase - # The rest of this method is all stuff that only happens if - # document.write works - - def endTagOther(self, token): - self.tree.openElements.pop() - self.parser.phase = self.parser.originalPhase - - class InTablePhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-table - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("caption", self.startTagCaption), - ("colgroup", self.startTagColgroup), - ("col", self.startTagCol), - (("tbody", "tfoot", "thead"), self.startTagRowGroup), - (("td", "th", "tr"), self.startTagImplyTbody), - ("table", self.startTagTable), - (("style", "script"), self.startTagStyleScript), - ("input", self.startTagInput), - ("form", self.startTagForm) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("table", self.endTagTable), - (("body", "caption", "col", "colgroup", "html", "tbody", "td", - "tfoot", "th", "thead", "tr"), self.endTagIgnore) - ]) - self.endTagHandler.default = self.endTagOther - - # helper methods - def clearStackToTableContext(self): - # "clear the stack back to a table context" - while self.tree.openElements[-1].name not in ("table", "html"): - # self.parser.parseError("unexpected-implied-end-tag-in-table", - # {"name": self.tree.openElements[-1].name}) - self.tree.openElements.pop() - # When the current node is <html> it's an innerHTML case - - # processing methods - def processEOF(self): - if self.tree.openElements[-1].name != "html": - self.parser.parseError("eof-in-table") - else: - assert self.parser.innerHTML - # Stop parsing - - def processSpaceCharacters(self, token): - originalPhase = self.parser.phase - self.parser.phase = self.parser.phases["inTableText"] - self.parser.phase.originalPhase = originalPhase - self.parser.phase.processSpaceCharacters(token) - - def processCharacters(self, token): - originalPhase = self.parser.phase - self.parser.phase = self.parser.phases["inTableText"] - self.parser.phase.originalPhase = originalPhase - self.parser.phase.processCharacters(token) - - def insertText(self, token): - # If we get here there must be at least one non-whitespace character - # Do the table magic! - self.tree.insertFromTable = True - self.parser.phases["inBody"].processCharacters(token) - self.tree.insertFromTable = False - - def startTagCaption(self, token): - self.clearStackToTableContext() - self.tree.activeFormattingElements.append(Marker) - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inCaption"] - - def startTagColgroup(self, token): - self.clearStackToTableContext() - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inColumnGroup"] - - def startTagCol(self, token): - self.startTagColgroup(impliedTagToken("colgroup", "StartTag")) - return token - - def startTagRowGroup(self, token): - self.clearStackToTableContext() - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inTableBody"] - - def startTagImplyTbody(self, token): - self.startTagRowGroup(impliedTagToken("tbody", "StartTag")) - return token - - def startTagTable(self, token): - self.parser.parseError("unexpected-start-tag-implies-end-tag", - {"startName": "table", "endName": "table"}) - self.parser.phase.processEndTag(impliedTagToken("table")) - if not self.parser.innerHTML: - return token - - def startTagStyleScript(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagInput(self, token): - if ("type" in token["data"] and - token["data"]["type"].translate(asciiUpper2Lower) == "hidden"): - self.parser.parseError("unexpected-hidden-input-in-table") - self.tree.insertElement(token) - # XXX associate with form - self.tree.openElements.pop() - else: - self.startTagOther(token) - - def startTagForm(self, token): - self.parser.parseError("unexpected-form-in-table") - if self.tree.formPointer is None: - self.tree.insertElement(token) - self.tree.formPointer = self.tree.openElements[-1] - self.tree.openElements.pop() - - def startTagOther(self, token): - self.parser.parseError("unexpected-start-tag-implies-table-voodoo", {"name": token["name"]}) - # Do the table magic! - self.tree.insertFromTable = True - self.parser.phases["inBody"].processStartTag(token) - self.tree.insertFromTable = False - - def endTagTable(self, token): - if self.tree.elementInScope("table", variant="table"): - self.tree.generateImpliedEndTags() - if self.tree.openElements[-1].name != "table": - self.parser.parseError("end-tag-too-early-named", - {"gotName": "table", - "expectedName": self.tree.openElements[-1].name}) - while self.tree.openElements[-1].name != "table": - self.tree.openElements.pop() - self.tree.openElements.pop() - self.parser.resetInsertionMode() - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def endTagIgnore(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag-implies-table-voodoo", {"name": token["name"]}) - # Do the table magic! - self.tree.insertFromTable = True - self.parser.phases["inBody"].processEndTag(token) - self.tree.insertFromTable = False - - class InTableTextPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - self.originalPhase = None - self.characterTokens = [] - - def flushCharacters(self): - data = "".join([item["data"] for item in self.characterTokens]) - if any([item not in spaceCharacters for item in data]): - token = {"type": tokenTypes["Characters"], "data": data} - self.parser.phases["inTable"].insertText(token) - elif data: - self.tree.insertText(data) - self.characterTokens = [] - - def processComment(self, token): - self.flushCharacters() - self.parser.phase = self.originalPhase - return token - - def processEOF(self): - self.flushCharacters() - self.parser.phase = self.originalPhase - return True - - def processCharacters(self, token): - if token["data"] == "\u0000": - return - self.characterTokens.append(token) - - def processSpaceCharacters(self, token): - # pretty sure we should never reach here - self.characterTokens.append(token) - # assert False - - def processStartTag(self, token): - self.flushCharacters() - self.parser.phase = self.originalPhase - return token - - def processEndTag(self, token): - self.flushCharacters() - self.parser.phase = self.originalPhase - return token - - class InCaptionPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-caption - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("caption", "col", "colgroup", "tbody", "td", "tfoot", "th", - "thead", "tr"), self.startTagTableElement) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("caption", self.endTagCaption), - ("table", self.endTagTable), - (("body", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", - "thead", "tr"), self.endTagIgnore) - ]) - self.endTagHandler.default = self.endTagOther - - def ignoreEndTagCaption(self): - return not self.tree.elementInScope("caption", variant="table") - - def processEOF(self): - self.parser.phases["inBody"].processEOF() - - def processCharacters(self, token): - return self.parser.phases["inBody"].processCharacters(token) - - def startTagTableElement(self, token): - self.parser.parseError() - # XXX Have to duplicate logic here to find out if the tag is ignored - ignoreEndTag = self.ignoreEndTagCaption() - self.parser.phase.processEndTag(impliedTagToken("caption")) - if not ignoreEndTag: - return token - - def startTagOther(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def endTagCaption(self, token): - if not self.ignoreEndTagCaption(): - # AT this code is quite similar to endTagTable in "InTable" - self.tree.generateImpliedEndTags() - if self.tree.openElements[-1].name != "caption": - self.parser.parseError("expected-one-end-tag-but-got-another", - {"gotName": "caption", - "expectedName": self.tree.openElements[-1].name}) - while self.tree.openElements[-1].name != "caption": - self.tree.openElements.pop() - self.tree.openElements.pop() - self.tree.clearActiveFormattingElements() - self.parser.phase = self.parser.phases["inTable"] - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def endTagTable(self, token): - self.parser.parseError() - ignoreEndTag = self.ignoreEndTagCaption() - self.parser.phase.processEndTag(impliedTagToken("caption")) - if not ignoreEndTag: - return token - - def endTagIgnore(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def endTagOther(self, token): - return self.parser.phases["inBody"].processEndTag(token) - - class InColumnGroupPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-column - - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("col", self.startTagCol) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("colgroup", self.endTagColgroup), - ("col", self.endTagCol) - ]) - self.endTagHandler.default = self.endTagOther - - def ignoreEndTagColgroup(self): - return self.tree.openElements[-1].name == "html" - - def processEOF(self): - if self.tree.openElements[-1].name == "html": - assert self.parser.innerHTML - return - else: - ignoreEndTag = self.ignoreEndTagColgroup() - self.endTagColgroup(impliedTagToken("colgroup")) - if not ignoreEndTag: - return True - - def processCharacters(self, token): - ignoreEndTag = self.ignoreEndTagColgroup() - self.endTagColgroup(impliedTagToken("colgroup")) - if not ignoreEndTag: - return token - - def startTagCol(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def startTagOther(self, token): - ignoreEndTag = self.ignoreEndTagColgroup() - self.endTagColgroup(impliedTagToken("colgroup")) - if not ignoreEndTag: - return token - - def endTagColgroup(self, token): - if self.ignoreEndTagColgroup(): - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - else: - self.tree.openElements.pop() - self.parser.phase = self.parser.phases["inTable"] - - def endTagCol(self, token): - self.parser.parseError("no-end-tag", {"name": "col"}) - - def endTagOther(self, token): - ignoreEndTag = self.ignoreEndTagColgroup() - self.endTagColgroup(impliedTagToken("colgroup")) - if not ignoreEndTag: - return token - - class InTableBodyPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-table0 - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("tr", self.startTagTr), - (("td", "th"), self.startTagTableCell), - (("caption", "col", "colgroup", "tbody", "tfoot", "thead"), - self.startTagTableOther) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - (("tbody", "tfoot", "thead"), self.endTagTableRowGroup), - ("table", self.endTagTable), - (("body", "caption", "col", "colgroup", "html", "td", "th", - "tr"), self.endTagIgnore) - ]) - self.endTagHandler.default = self.endTagOther - - # helper methods - def clearStackToTableBodyContext(self): - while self.tree.openElements[-1].name not in ("tbody", "tfoot", - "thead", "html"): - # self.parser.parseError("unexpected-implied-end-tag-in-table", - # {"name": self.tree.openElements[-1].name}) - self.tree.openElements.pop() - if self.tree.openElements[-1].name == "html": - assert self.parser.innerHTML - - # the rest - def processEOF(self): - self.parser.phases["inTable"].processEOF() - - def processSpaceCharacters(self, token): - return self.parser.phases["inTable"].processSpaceCharacters(token) - - def processCharacters(self, token): - return self.parser.phases["inTable"].processCharacters(token) - - def startTagTr(self, token): - self.clearStackToTableBodyContext() - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inRow"] - - def startTagTableCell(self, token): - self.parser.parseError("unexpected-cell-in-table-body", - {"name": token["name"]}) - self.startTagTr(impliedTagToken("tr", "StartTag")) - return token - - def startTagTableOther(self, token): - # XXX AT Any ideas on how to share this with endTagTable? - if (self.tree.elementInScope("tbody", variant="table") or - self.tree.elementInScope("thead", variant="table") or - self.tree.elementInScope("tfoot", variant="table")): - self.clearStackToTableBodyContext() - self.endTagTableRowGroup( - impliedTagToken(self.tree.openElements[-1].name)) - return token - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def startTagOther(self, token): - return self.parser.phases["inTable"].processStartTag(token) - - def endTagTableRowGroup(self, token): - if self.tree.elementInScope(token["name"], variant="table"): - self.clearStackToTableBodyContext() - self.tree.openElements.pop() - self.parser.phase = self.parser.phases["inTable"] - else: - self.parser.parseError("unexpected-end-tag-in-table-body", - {"name": token["name"]}) - - def endTagTable(self, token): - if (self.tree.elementInScope("tbody", variant="table") or - self.tree.elementInScope("thead", variant="table") or - self.tree.elementInScope("tfoot", variant="table")): - self.clearStackToTableBodyContext() - self.endTagTableRowGroup( - impliedTagToken(self.tree.openElements[-1].name)) - return token - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def endTagIgnore(self, token): - self.parser.parseError("unexpected-end-tag-in-table-body", - {"name": token["name"]}) - - def endTagOther(self, token): - return self.parser.phases["inTable"].processEndTag(token) - - class InRowPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-row - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("td", "th"), self.startTagTableCell), - (("caption", "col", "colgroup", "tbody", "tfoot", "thead", - "tr"), self.startTagTableOther) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("tr", self.endTagTr), - ("table", self.endTagTable), - (("tbody", "tfoot", "thead"), self.endTagTableRowGroup), - (("body", "caption", "col", "colgroup", "html", "td", "th"), - self.endTagIgnore) - ]) - self.endTagHandler.default = self.endTagOther - - # helper methods (XXX unify this with other table helper methods) - def clearStackToTableRowContext(self): - while self.tree.openElements[-1].name not in ("tr", "html"): - self.parser.parseError("unexpected-implied-end-tag-in-table-row", - {"name": self.tree.openElements[-1].name}) - self.tree.openElements.pop() - - def ignoreEndTagTr(self): - return not self.tree.elementInScope("tr", variant="table") - - # the rest - def processEOF(self): - self.parser.phases["inTable"].processEOF() - - def processSpaceCharacters(self, token): - return self.parser.phases["inTable"].processSpaceCharacters(token) - - def processCharacters(self, token): - return self.parser.phases["inTable"].processCharacters(token) - - def startTagTableCell(self, token): - self.clearStackToTableRowContext() - self.tree.insertElement(token) - self.parser.phase = self.parser.phases["inCell"] - self.tree.activeFormattingElements.append(Marker) - - def startTagTableOther(self, token): - ignoreEndTag = self.ignoreEndTagTr() - self.endTagTr(impliedTagToken("tr")) - # XXX how are we sure it's always ignored in the innerHTML case? - if not ignoreEndTag: - return token - - def startTagOther(self, token): - return self.parser.phases["inTable"].processStartTag(token) - - def endTagTr(self, token): - if not self.ignoreEndTagTr(): - self.clearStackToTableRowContext() - self.tree.openElements.pop() - self.parser.phase = self.parser.phases["inTableBody"] - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def endTagTable(self, token): - ignoreEndTag = self.ignoreEndTagTr() - self.endTagTr(impliedTagToken("tr")) - # Reprocess the current tag if the tr end tag was not ignored - # XXX how are we sure it's always ignored in the innerHTML case? - if not ignoreEndTag: - return token - - def endTagTableRowGroup(self, token): - if self.tree.elementInScope(token["name"], variant="table"): - self.endTagTr(impliedTagToken("tr")) - return token - else: - self.parser.parseError() - - def endTagIgnore(self, token): - self.parser.parseError("unexpected-end-tag-in-table-row", - {"name": token["name"]}) - - def endTagOther(self, token): - return self.parser.phases["inTable"].processEndTag(token) - - class InCellPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-cell - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - (("caption", "col", "colgroup", "tbody", "td", "tfoot", "th", - "thead", "tr"), self.startTagTableOther) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - (("td", "th"), self.endTagTableCell), - (("body", "caption", "col", "colgroup", "html"), self.endTagIgnore), - (("table", "tbody", "tfoot", "thead", "tr"), self.endTagImply) - ]) - self.endTagHandler.default = self.endTagOther - - # helper - def closeCell(self): - if self.tree.elementInScope("td", variant="table"): - self.endTagTableCell(impliedTagToken("td")) - elif self.tree.elementInScope("th", variant="table"): - self.endTagTableCell(impliedTagToken("th")) - - # the rest - def processEOF(self): - self.parser.phases["inBody"].processEOF() - - def processCharacters(self, token): - return self.parser.phases["inBody"].processCharacters(token) - - def startTagTableOther(self, token): - if (self.tree.elementInScope("td", variant="table") or - self.tree.elementInScope("th", variant="table")): - self.closeCell() - return token - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def startTagOther(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def endTagTableCell(self, token): - if self.tree.elementInScope(token["name"], variant="table"): - self.tree.generateImpliedEndTags(token["name"]) - if self.tree.openElements[-1].name != token["name"]: - self.parser.parseError("unexpected-cell-end-tag", - {"name": token["name"]}) - while True: - node = self.tree.openElements.pop() - if node.name == token["name"]: - break - else: - self.tree.openElements.pop() - self.tree.clearActiveFormattingElements() - self.parser.phase = self.parser.phases["inRow"] - else: - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def endTagIgnore(self, token): - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - def endTagImply(self, token): - if self.tree.elementInScope(token["name"], variant="table"): - self.closeCell() - return token - else: - # sometimes innerHTML case - self.parser.parseError() - - def endTagOther(self, token): - return self.parser.phases["inBody"].processEndTag(token) - - class InSelectPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("option", self.startTagOption), - ("optgroup", self.startTagOptgroup), - ("select", self.startTagSelect), - (("input", "keygen", "textarea"), self.startTagInput), - ("script", self.startTagScript) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("option", self.endTagOption), - ("optgroup", self.endTagOptgroup), - ("select", self.endTagSelect) - ]) - self.endTagHandler.default = self.endTagOther - - # http://www.whatwg.org/specs/web-apps/current-work/#in-select - def processEOF(self): - if self.tree.openElements[-1].name != "html": - self.parser.parseError("eof-in-select") - else: - assert self.parser.innerHTML - - def processCharacters(self, token): - if token["data"] == "\u0000": - return - self.tree.insertText(token["data"]) - - def startTagOption(self, token): - # We need to imply </option> if <option> is the current node. - if self.tree.openElements[-1].name == "option": - self.tree.openElements.pop() - self.tree.insertElement(token) - - def startTagOptgroup(self, token): - if self.tree.openElements[-1].name == "option": - self.tree.openElements.pop() - if self.tree.openElements[-1].name == "optgroup": - self.tree.openElements.pop() - self.tree.insertElement(token) - - def startTagSelect(self, token): - self.parser.parseError("unexpected-select-in-select") - self.endTagSelect(impliedTagToken("select")) - - def startTagInput(self, token): - self.parser.parseError("unexpected-input-in-select") - if self.tree.elementInScope("select", variant="select"): - self.endTagSelect(impliedTagToken("select")) - return token - else: - assert self.parser.innerHTML - - def startTagScript(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagOther(self, token): - self.parser.parseError("unexpected-start-tag-in-select", - {"name": token["name"]}) - - def endTagOption(self, token): - if self.tree.openElements[-1].name == "option": - self.tree.openElements.pop() - else: - self.parser.parseError("unexpected-end-tag-in-select", - {"name": "option"}) - - def endTagOptgroup(self, token): - # </optgroup> implicitly closes <option> - if (self.tree.openElements[-1].name == "option" and - self.tree.openElements[-2].name == "optgroup"): - self.tree.openElements.pop() - # It also closes </optgroup> - if self.tree.openElements[-1].name == "optgroup": - self.tree.openElements.pop() - # But nothing else - else: - self.parser.parseError("unexpected-end-tag-in-select", - {"name": "optgroup"}) - - def endTagSelect(self, token): - if self.tree.elementInScope("select", variant="select"): - node = self.tree.openElements.pop() - while node.name != "select": - node = self.tree.openElements.pop() - self.parser.resetInsertionMode() - else: - # innerHTML case - assert self.parser.innerHTML - self.parser.parseError() - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag-in-select", - {"name": token["name"]}) - - class InSelectInTablePhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - (("caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"), - self.startTagTable) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - (("caption", "table", "tbody", "tfoot", "thead", "tr", "td", "th"), - self.endTagTable) - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - self.parser.phases["inSelect"].processEOF() - - def processCharacters(self, token): - return self.parser.phases["inSelect"].processCharacters(token) - - def startTagTable(self, token): - self.parser.parseError("unexpected-table-element-start-tag-in-select-in-table", {"name": token["name"]}) - self.endTagOther(impliedTagToken("select")) - return token - - def startTagOther(self, token): - return self.parser.phases["inSelect"].processStartTag(token) - - def endTagTable(self, token): - self.parser.parseError("unexpected-table-element-end-tag-in-select-in-table", {"name": token["name"]}) - if self.tree.elementInScope(token["name"], variant="table"): - self.endTagOther(impliedTagToken("select")) - return token - - def endTagOther(self, token): - return self.parser.phases["inSelect"].processEndTag(token) - - class InForeignContentPhase(Phase): - breakoutElements = frozenset(["b", "big", "blockquote", "body", "br", - "center", "code", "dd", "div", "dl", "dt", - "em", "embed", "h1", "h2", "h3", - "h4", "h5", "h6", "head", "hr", "i", "img", - "li", "listing", "menu", "meta", "nobr", - "ol", "p", "pre", "ruby", "s", "small", - "span", "strong", "strike", "sub", "sup", - "table", "tt", "u", "ul", "var"]) - - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - def adjustSVGTagNames(self, token): - replacements = {"altglyph": "altGlyph", - "altglyphdef": "altGlyphDef", - "altglyphitem": "altGlyphItem", - "animatecolor": "animateColor", - "animatemotion": "animateMotion", - "animatetransform": "animateTransform", - "clippath": "clipPath", - "feblend": "feBlend", - "fecolormatrix": "feColorMatrix", - "fecomponenttransfer": "feComponentTransfer", - "fecomposite": "feComposite", - "feconvolvematrix": "feConvolveMatrix", - "fediffuselighting": "feDiffuseLighting", - "fedisplacementmap": "feDisplacementMap", - "fedistantlight": "feDistantLight", - "feflood": "feFlood", - "fefunca": "feFuncA", - "fefuncb": "feFuncB", - "fefuncg": "feFuncG", - "fefuncr": "feFuncR", - "fegaussianblur": "feGaussianBlur", - "feimage": "feImage", - "femerge": "feMerge", - "femergenode": "feMergeNode", - "femorphology": "feMorphology", - "feoffset": "feOffset", - "fepointlight": "fePointLight", - "fespecularlighting": "feSpecularLighting", - "fespotlight": "feSpotLight", - "fetile": "feTile", - "feturbulence": "feTurbulence", - "foreignobject": "foreignObject", - "glyphref": "glyphRef", - "lineargradient": "linearGradient", - "radialgradient": "radialGradient", - "textpath": "textPath"} - - if token["name"] in replacements: - token["name"] = replacements[token["name"]] - - def processCharacters(self, token): - if token["data"] == "\u0000": - token["data"] = "\uFFFD" - elif (self.parser.framesetOK and - any(char not in spaceCharacters for char in token["data"])): - self.parser.framesetOK = False - Phase.processCharacters(self, token) - - def processStartTag(self, token): - currentNode = self.tree.openElements[-1] - if (token["name"] in self.breakoutElements or - (token["name"] == "font" and - set(token["data"].keys()) & set(["color", "face", "size"]))): - self.parser.parseError("unexpected-html-element-in-foreign-content", - {"name": token["name"]}) - while (self.tree.openElements[-1].namespace != - self.tree.defaultNamespace and - not self.parser.isHTMLIntegrationPoint(self.tree.openElements[-1]) and - not self.parser.isMathMLTextIntegrationPoint(self.tree.openElements[-1])): - self.tree.openElements.pop() - return token - - else: - if currentNode.namespace == namespaces["mathml"]: - self.parser.adjustMathMLAttributes(token) - elif currentNode.namespace == namespaces["svg"]: - self.adjustSVGTagNames(token) - self.parser.adjustSVGAttributes(token) - self.parser.adjustForeignAttributes(token) - token["namespace"] = currentNode.namespace - self.tree.insertElement(token) - if token["selfClosing"]: - self.tree.openElements.pop() - token["selfClosingAcknowledged"] = True - - def processEndTag(self, token): - nodeIndex = len(self.tree.openElements) - 1 - node = self.tree.openElements[-1] - if node.name.translate(asciiUpper2Lower) != token["name"]: - self.parser.parseError("unexpected-end-tag", {"name": token["name"]}) - - while True: - if node.name.translate(asciiUpper2Lower) == token["name"]: - # XXX this isn't in the spec but it seems necessary - if self.parser.phase == self.parser.phases["inTableText"]: - self.parser.phase.flushCharacters() - self.parser.phase = self.parser.phase.originalPhase - while self.tree.openElements.pop() != node: - assert self.tree.openElements - new_token = None - break - nodeIndex -= 1 - - node = self.tree.openElements[nodeIndex] - if node.namespace != self.tree.defaultNamespace: - continue - else: - new_token = self.parser.phase.processEndTag(token) - break - return new_token - - class AfterBodyPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([("html", self.endTagHtml)]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - # Stop parsing - pass - - def processComment(self, token): - # This is needed because data is to be appended to the <html> element - # here and not to whatever is currently open. - self.tree.insertComment(token, self.tree.openElements[0]) - - def processCharacters(self, token): - self.parser.parseError("unexpected-char-after-body") - self.parser.phase = self.parser.phases["inBody"] - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagOther(self, token): - self.parser.parseError("unexpected-start-tag-after-body", - {"name": token["name"]}) - self.parser.phase = self.parser.phases["inBody"] - return token - - def endTagHtml(self, name): - if self.parser.innerHTML: - self.parser.parseError("unexpected-end-tag-after-body-innerhtml") - else: - self.parser.phase = self.parser.phases["afterAfterBody"] - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag-after-body", - {"name": token["name"]}) - self.parser.phase = self.parser.phases["inBody"] - return token - - class InFramesetPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#in-frameset - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("frameset", self.startTagFrameset), - ("frame", self.startTagFrame), - ("noframes", self.startTagNoframes) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("frameset", self.endTagFrameset) - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - if self.tree.openElements[-1].name != "html": - self.parser.parseError("eof-in-frameset") - else: - assert self.parser.innerHTML - - def processCharacters(self, token): - self.parser.parseError("unexpected-char-in-frameset") - - def startTagFrameset(self, token): - self.tree.insertElement(token) - - def startTagFrame(self, token): - self.tree.insertElement(token) - self.tree.openElements.pop() - - def startTagNoframes(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagOther(self, token): - self.parser.parseError("unexpected-start-tag-in-frameset", - {"name": token["name"]}) - - def endTagFrameset(self, token): - if self.tree.openElements[-1].name == "html": - # innerHTML case - self.parser.parseError("unexpected-frameset-in-frameset-innerhtml") - else: - self.tree.openElements.pop() - if (not self.parser.innerHTML and - self.tree.openElements[-1].name != "frameset"): - # If we're not in innerHTML mode and the current node is not a - # "frameset" element (anymore) then switch. - self.parser.phase = self.parser.phases["afterFrameset"] - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag-in-frameset", - {"name": token["name"]}) - - class AfterFramesetPhase(Phase): - # http://www.whatwg.org/specs/web-apps/current-work/#after3 - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("noframes", self.startTagNoframes) - ]) - self.startTagHandler.default = self.startTagOther - - self.endTagHandler = _utils.MethodDispatcher([ - ("html", self.endTagHtml) - ]) - self.endTagHandler.default = self.endTagOther - - def processEOF(self): - # Stop parsing - pass - - def processCharacters(self, token): - self.parser.parseError("unexpected-char-after-frameset") - - def startTagNoframes(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagOther(self, token): - self.parser.parseError("unexpected-start-tag-after-frameset", - {"name": token["name"]}) - - def endTagHtml(self, token): - self.parser.phase = self.parser.phases["afterAfterFrameset"] - - def endTagOther(self, token): - self.parser.parseError("unexpected-end-tag-after-frameset", - {"name": token["name"]}) - - class AfterAfterBodyPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml) - ]) - self.startTagHandler.default = self.startTagOther - - def processEOF(self): - pass - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processSpaceCharacters(self, token): - return self.parser.phases["inBody"].processSpaceCharacters(token) - - def processCharacters(self, token): - self.parser.parseError("expected-eof-but-got-char") - self.parser.phase = self.parser.phases["inBody"] - return token - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagOther(self, token): - self.parser.parseError("expected-eof-but-got-start-tag", - {"name": token["name"]}) - self.parser.phase = self.parser.phases["inBody"] - return token - - def processEndTag(self, token): - self.parser.parseError("expected-eof-but-got-end-tag", - {"name": token["name"]}) - self.parser.phase = self.parser.phases["inBody"] - return token - - class AfterAfterFramesetPhase(Phase): - def __init__(self, parser, tree): - Phase.__init__(self, parser, tree) - - self.startTagHandler = _utils.MethodDispatcher([ - ("html", self.startTagHtml), - ("noframes", self.startTagNoFrames) - ]) - self.startTagHandler.default = self.startTagOther - - def processEOF(self): - pass - - def processComment(self, token): - self.tree.insertComment(token, self.tree.document) - - def processSpaceCharacters(self, token): - return self.parser.phases["inBody"].processSpaceCharacters(token) - - def processCharacters(self, token): - self.parser.parseError("expected-eof-but-got-char") - - def startTagHtml(self, token): - return self.parser.phases["inBody"].processStartTag(token) - - def startTagNoFrames(self, token): - return self.parser.phases["inHead"].processStartTag(token) - - def startTagOther(self, token): - self.parser.parseError("expected-eof-but-got-start-tag", - {"name": token["name"]}) - - def processEndTag(self, token): - self.parser.parseError("expected-eof-but-got-end-tag", - {"name": token["name"]}) - # pylint:enable=unused-argument - - return { - "initial": InitialPhase, - "beforeHtml": BeforeHtmlPhase, - "beforeHead": BeforeHeadPhase, - "inHead": InHeadPhase, - "inHeadNoscript": InHeadNoscriptPhase, - "afterHead": AfterHeadPhase, - "inBody": InBodyPhase, - "text": TextPhase, - "inTable": InTablePhase, - "inTableText": InTableTextPhase, - "inCaption": InCaptionPhase, - "inColumnGroup": InColumnGroupPhase, - "inTableBody": InTableBodyPhase, - "inRow": InRowPhase, - "inCell": InCellPhase, - "inSelect": InSelectPhase, - "inSelectInTable": InSelectInTablePhase, - "inForeignContent": InForeignContentPhase, - "afterBody": AfterBodyPhase, - "inFrameset": InFramesetPhase, - "afterFrameset": AfterFramesetPhase, - "afterAfterBody": AfterAfterBodyPhase, - "afterAfterFrameset": AfterAfterFramesetPhase, - # XXX after after frameset - } - - -def adjust_attributes(token, replacements): - needs_adjustment = viewkeys(token['data']) & viewkeys(replacements) - if needs_adjustment: - token['data'] = OrderedDict((replacements.get(k, k), v) - for k, v in token['data'].items()) - - -def impliedTagToken(name, type="EndTag", attributes=None, - selfClosing=False): - if attributes is None: - attributes = {} - return {"type": tokenTypes[type], "name": name, "data": attributes, - "selfClosing": selfClosing} - - -class ParseError(Exception): - """Error in parsed document""" - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/serializer.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/serializer.py deleted file mode 100644 index 53f4d44..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/serializer.py +++ /dev/null @@ -1,409 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import text_type - -import re - -from codecs import register_error, xmlcharrefreplace_errors - -from .constants import voidElements, booleanAttributes, spaceCharacters -from .constants import rcdataElements, entities, xmlEntities -from . import treewalkers, _utils -from xml.sax.saxutils import escape - -_quoteAttributeSpecChars = "".join(spaceCharacters) + "\"'=<>`" -_quoteAttributeSpec = re.compile("[" + _quoteAttributeSpecChars + "]") -_quoteAttributeLegacy = re.compile("[" + _quoteAttributeSpecChars + - "\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n" - "\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15" - "\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" - "\x20\x2f\x60\xa0\u1680\u180e\u180f\u2000" - "\u2001\u2002\u2003\u2004\u2005\u2006\u2007" - "\u2008\u2009\u200a\u2028\u2029\u202f\u205f" - "\u3000]") - - -_encode_entity_map = {} -_is_ucs4 = len("\U0010FFFF") == 1 -for k, v in list(entities.items()): - # skip multi-character entities - if ((_is_ucs4 and len(v) > 1) or - (not _is_ucs4 and len(v) > 2)): - continue - if v != "&": - if len(v) == 2: - v = _utils.surrogatePairToCodepoint(v) - else: - v = ord(v) - if v not in _encode_entity_map or k.islower(): - # prefer < over < and similarly for &, >, etc. - _encode_entity_map[v] = k - - -def htmlentityreplace_errors(exc): - if isinstance(exc, (UnicodeEncodeError, UnicodeTranslateError)): - res = [] - codepoints = [] - skip = False - for i, c in enumerate(exc.object[exc.start:exc.end]): - if skip: - skip = False - continue - index = i + exc.start - if _utils.isSurrogatePair(exc.object[index:min([exc.end, index + 2])]): - codepoint = _utils.surrogatePairToCodepoint(exc.object[index:index + 2]) - skip = True - else: - codepoint = ord(c) - codepoints.append(codepoint) - for cp in codepoints: - e = _encode_entity_map.get(cp) - if e: - res.append("&") - res.append(e) - if not e.endswith(";"): - res.append(";") - else: - res.append("&#x%s;" % (hex(cp)[2:])) - return ("".join(res), exc.end) - else: - return xmlcharrefreplace_errors(exc) - - -register_error("htmlentityreplace", htmlentityreplace_errors) - - -def serialize(input, tree="etree", encoding=None, **serializer_opts): - """Serializes the input token stream using the specified treewalker - - :arg input: the token stream to serialize - - :arg tree: the treewalker to use - - :arg encoding: the encoding to use - - :arg serializer_opts: any options to pass to the - :py:class:`html5lib.serializer.HTMLSerializer` that gets created - - :returns: the tree serialized as a string - - Example: - - >>> from html5lib.html5parser import parse - >>> from html5lib.serializer import serialize - >>> token_stream = parse('<html><body><p>Hi!</p></body></html>') - >>> serialize(token_stream, omit_optional_tags=False) - '<html><head></head><body><p>Hi!</p></body></html>' - - """ - # XXX: Should we cache this? - walker = treewalkers.getTreeWalker(tree) - s = HTMLSerializer(**serializer_opts) - return s.render(walker(input), encoding) - - -class HTMLSerializer(object): - - # attribute quoting options - quote_attr_values = "legacy" # be secure by default - quote_char = '"' - use_best_quote_char = True - - # tag syntax options - omit_optional_tags = True - minimize_boolean_attributes = True - use_trailing_solidus = False - space_before_trailing_solidus = True - - # escaping options - escape_lt_in_attrs = False - escape_rcdata = False - resolve_entities = True - - # miscellaneous options - alphabetical_attributes = False - inject_meta_charset = True - strip_whitespace = False - sanitize = False - - options = ("quote_attr_values", "quote_char", "use_best_quote_char", - "omit_optional_tags", "minimize_boolean_attributes", - "use_trailing_solidus", "space_before_trailing_solidus", - "escape_lt_in_attrs", "escape_rcdata", "resolve_entities", - "alphabetical_attributes", "inject_meta_charset", - "strip_whitespace", "sanitize") - - def __init__(self, **kwargs): - """Initialize HTMLSerializer - - :arg inject_meta_charset: Whether or not to inject the meta charset. - - Defaults to ``True``. - - :arg quote_attr_values: Whether to quote attribute values that don't - require quoting per legacy browser behavior (``"legacy"``), when - required by the standard (``"spec"``), or always (``"always"``). - - Defaults to ``"legacy"``. - - :arg quote_char: Use given quote character for attribute quoting. - - Defaults to ``"`` which will use double quotes unless attribute - value contains a double quote, in which case single quotes are - used. - - :arg escape_lt_in_attrs: Whether or not to escape ``<`` in attribute - values. - - Defaults to ``False``. - - :arg escape_rcdata: Whether to escape characters that need to be - escaped within normal elements within rcdata elements such as - style. - - Defaults to ``False``. - - :arg resolve_entities: Whether to resolve named character entities that - appear in the source tree. The XML predefined entities < > - & " ' are unaffected by this setting. - - Defaults to ``True``. - - :arg strip_whitespace: Whether to remove semantically meaningless - whitespace. (This compresses all whitespace to a single space - except within ``pre``.) - - Defaults to ``False``. - - :arg minimize_boolean_attributes: Shortens boolean attributes to give - just the attribute value, for example:: - - <input disabled="disabled"> - - becomes:: - - <input disabled> - - Defaults to ``True``. - - :arg use_trailing_solidus: Includes a close-tag slash at the end of the - start tag of void elements (empty elements whose end tag is - forbidden). E.g. ``<hr/>``. - - Defaults to ``False``. - - :arg space_before_trailing_solidus: Places a space immediately before - the closing slash in a tag using a trailing solidus. E.g. - ``<hr />``. Requires ``use_trailing_solidus=True``. - - Defaults to ``True``. - - :arg sanitize: Strip all unsafe or unknown constructs from output. - See :py:class:`html5lib.filters.sanitizer.Filter`. - - Defaults to ``False``. - - :arg omit_optional_tags: Omit start/end tags that are optional. - - Defaults to ``True``. - - :arg alphabetical_attributes: Reorder attributes to be in alphabetical order. - - Defaults to ``False``. - - """ - unexpected_args = frozenset(kwargs) - frozenset(self.options) - if len(unexpected_args) > 0: - raise TypeError("__init__() got an unexpected keyword argument '%s'" % next(iter(unexpected_args))) - if 'quote_char' in kwargs: - self.use_best_quote_char = False - for attr in self.options: - setattr(self, attr, kwargs.get(attr, getattr(self, attr))) - self.errors = [] - self.strict = False - - def encode(self, string): - assert(isinstance(string, text_type)) - if self.encoding: - return string.encode(self.encoding, "htmlentityreplace") - else: - return string - - def encodeStrict(self, string): - assert(isinstance(string, text_type)) - if self.encoding: - return string.encode(self.encoding, "strict") - else: - return string - - def serialize(self, treewalker, encoding=None): - # pylint:disable=too-many-nested-blocks - self.encoding = encoding - in_cdata = False - self.errors = [] - - if encoding and self.inject_meta_charset: - from .filters.inject_meta_charset import Filter - treewalker = Filter(treewalker, encoding) - # Alphabetical attributes is here under the assumption that none of - # the later filters add or change order of attributes; it needs to be - # before the sanitizer so escaped elements come out correctly - if self.alphabetical_attributes: - from .filters.alphabeticalattributes import Filter - treewalker = Filter(treewalker) - # WhitespaceFilter should be used before OptionalTagFilter - # for maximum efficiently of this latter filter - if self.strip_whitespace: - from .filters.whitespace import Filter - treewalker = Filter(treewalker) - if self.sanitize: - from .filters.sanitizer import Filter - treewalker = Filter(treewalker) - if self.omit_optional_tags: - from .filters.optionaltags import Filter - treewalker = Filter(treewalker) - - for token in treewalker: - type = token["type"] - if type == "Doctype": - doctype = "<!DOCTYPE %s" % token["name"] - - if token["publicId"]: - doctype += ' PUBLIC "%s"' % token["publicId"] - elif token["systemId"]: - doctype += " SYSTEM" - if token["systemId"]: - if token["systemId"].find('"') >= 0: - if token["systemId"].find("'") >= 0: - self.serializeError("System identifer contains both single and double quote characters") - quote_char = "'" - else: - quote_char = '"' - doctype += " %s%s%s" % (quote_char, token["systemId"], quote_char) - - doctype += ">" - yield self.encodeStrict(doctype) - - elif type in ("Characters", "SpaceCharacters"): - if type == "SpaceCharacters" or in_cdata: - if in_cdata and token["data"].find("</") >= 0: - self.serializeError("Unexpected </ in CDATA") - yield self.encode(token["data"]) - else: - yield self.encode(escape(token["data"])) - - elif type in ("StartTag", "EmptyTag"): - name = token["name"] - yield self.encodeStrict("<%s" % name) - if name in rcdataElements and not self.escape_rcdata: - in_cdata = True - elif in_cdata: - self.serializeError("Unexpected child element of a CDATA element") - for (_, attr_name), attr_value in token["data"].items(): - # TODO: Add namespace support here - k = attr_name - v = attr_value - yield self.encodeStrict(' ') - - yield self.encodeStrict(k) - if not self.minimize_boolean_attributes or \ - (k not in booleanAttributes.get(name, tuple()) and - k not in booleanAttributes.get("", tuple())): - yield self.encodeStrict("=") - if self.quote_attr_values == "always" or len(v) == 0: - quote_attr = True - elif self.quote_attr_values == "spec": - quote_attr = _quoteAttributeSpec.search(v) is not None - elif self.quote_attr_values == "legacy": - quote_attr = _quoteAttributeLegacy.search(v) is not None - else: - raise ValueError("quote_attr_values must be one of: " - "'always', 'spec', or 'legacy'") - v = v.replace("&", "&") - if self.escape_lt_in_attrs: - v = v.replace("<", "<") - if quote_attr: - quote_char = self.quote_char - if self.use_best_quote_char: - if "'" in v and '"' not in v: - quote_char = '"' - elif '"' in v and "'" not in v: - quote_char = "'" - if quote_char == "'": - v = v.replace("'", "'") - else: - v = v.replace('"', """) - yield self.encodeStrict(quote_char) - yield self.encode(v) - yield self.encodeStrict(quote_char) - else: - yield self.encode(v) - if name in voidElements and self.use_trailing_solidus: - if self.space_before_trailing_solidus: - yield self.encodeStrict(" /") - else: - yield self.encodeStrict("/") - yield self.encode(">") - - elif type == "EndTag": - name = token["name"] - if name in rcdataElements: - in_cdata = False - elif in_cdata: - self.serializeError("Unexpected child element of a CDATA element") - yield self.encodeStrict("</%s>" % name) - - elif type == "Comment": - data = token["data"] - if data.find("--") >= 0: - self.serializeError("Comment contains --") - yield self.encodeStrict("<!--%s-->" % token["data"]) - - elif type == "Entity": - name = token["name"] - key = name + ";" - if key not in entities: - self.serializeError("Entity %s not recognized" % name) - if self.resolve_entities and key not in xmlEntities: - data = entities[key] - else: - data = "&%s;" % name - yield self.encodeStrict(data) - - else: - self.serializeError(token["data"]) - - def render(self, treewalker, encoding=None): - """Serializes the stream from the treewalker into a string - - :arg treewalker: the treewalker to serialize - - :arg encoding: the string encoding to use - - :returns: the serialized tree - - Example: - - >>> from html5lib import parse, getTreeWalker - >>> from html5lib.serializer import HTMLSerializer - >>> token_stream = parse('<html><body>Hi!</body></html>') - >>> walker = getTreeWalker('etree') - >>> serializer = HTMLSerializer(omit_optional_tags=False) - >>> serializer.render(walker(token_stream)) - '<html><head></head><body>Hi!</body></html>' - - """ - if encoding: - return b"".join(list(self.serialize(treewalker, encoding))) - else: - return "".join(list(self.serialize(treewalker))) - - def serializeError(self, data="XXX ERROR MESSAGE NEEDED"): - # XXX The idea is to make data mandatory. - self.errors.append(data) - if self.strict: - raise SerializeError - - -class SerializeError(Exception): - """Error in serialized tree""" - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/__init__.py deleted file mode 100644 index 7ef5959..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/__init__.py +++ /dev/null @@ -1,30 +0,0 @@ -"""Tree adapters let you convert from one tree structure to another - -Example: - -.. code-block:: python - - from pip._vendor import html5lib - from pip._vendor.html5lib.treeadapters import genshi - - doc = '<html><body>Hi!</body></html>' - treebuilder = html5lib.getTreeBuilder('etree') - parser = html5lib.HTMLParser(tree=treebuilder) - tree = parser.parse(doc) - TreeWalker = html5lib.getTreeWalker('etree') - - genshi_tree = genshi.to_genshi(TreeWalker(tree)) - -""" -from __future__ import absolute_import, division, unicode_literals - -from . import sax - -__all__ = ["sax"] - -try: - from . import genshi # noqa -except ImportError: - pass -else: - __all__.append("genshi") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/genshi.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/genshi.py deleted file mode 100644 index 61d5fb6..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/genshi.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from genshi.core import QName, Attrs -from genshi.core import START, END, TEXT, COMMENT, DOCTYPE - - -def to_genshi(walker): - """Convert a tree to a genshi tree - - :arg walker: the treewalker to use to walk the tree to convert it - - :returns: generator of genshi nodes - - """ - text = [] - for token in walker: - type = token["type"] - if type in ("Characters", "SpaceCharacters"): - text.append(token["data"]) - elif text: - yield TEXT, "".join(text), (None, -1, -1) - text = [] - - if type in ("StartTag", "EmptyTag"): - if token["namespace"]: - name = "{%s}%s" % (token["namespace"], token["name"]) - else: - name = token["name"] - attrs = Attrs([(QName("{%s}%s" % attr if attr[0] is not None else attr[1]), value) - for attr, value in token["data"].items()]) - yield (START, (QName(name), attrs), (None, -1, -1)) - if type == "EmptyTag": - type = "EndTag" - - if type == "EndTag": - if token["namespace"]: - name = "{%s}%s" % (token["namespace"], token["name"]) - else: - name = token["name"] - - yield END, QName(name), (None, -1, -1) - - elif type == "Comment": - yield COMMENT, token["data"], (None, -1, -1) - - elif type == "Doctype": - yield DOCTYPE, (token["name"], token["publicId"], - token["systemId"]), (None, -1, -1) - - else: - pass # FIXME: What to do? - - if text: - yield TEXT, "".join(text), (None, -1, -1) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/sax.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/sax.py deleted file mode 100644 index f4ccea5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treeadapters/sax.py +++ /dev/null @@ -1,50 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from xml.sax.xmlreader import AttributesNSImpl - -from ..constants import adjustForeignAttributes, unadjustForeignAttributes - -prefix_mapping = {} -for prefix, localName, namespace in adjustForeignAttributes.values(): - if prefix is not None: - prefix_mapping[prefix] = namespace - - -def to_sax(walker, handler): - """Call SAX-like content handler based on treewalker walker - - :arg walker: the treewalker to use to walk the tree to convert it - - :arg handler: SAX handler to use - - """ - handler.startDocument() - for prefix, namespace in prefix_mapping.items(): - handler.startPrefixMapping(prefix, namespace) - - for token in walker: - type = token["type"] - if type == "Doctype": - continue - elif type in ("StartTag", "EmptyTag"): - attrs = AttributesNSImpl(token["data"], - unadjustForeignAttributes) - handler.startElementNS((token["namespace"], token["name"]), - token["name"], - attrs) - if type == "EmptyTag": - handler.endElementNS((token["namespace"], token["name"]), - token["name"]) - elif type == "EndTag": - handler.endElementNS((token["namespace"], token["name"]), - token["name"]) - elif type in ("Characters", "SpaceCharacters"): - handler.characters(token["data"]) - elif type == "Comment": - pass - else: - assert False, "Unknown token type" - - for prefix, namespace in prefix_mapping.items(): - handler.endPrefixMapping(prefix) - handler.endDocument() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/__init__.py deleted file mode 100644 index d44447e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/__init__.py +++ /dev/null @@ -1,88 +0,0 @@ -"""A collection of modules for building different kinds of trees from HTML -documents. - -To create a treebuilder for a new type of tree, you need to do -implement several things: - -1. A set of classes for various types of elements: Document, Doctype, Comment, - Element. These must implement the interface of ``base.treebuilders.Node`` - (although comment nodes have a different signature for their constructor, - see ``treebuilders.etree.Comment``) Textual content may also be implemented - as another node type, or not, as your tree implementation requires. - -2. A treebuilder object (called ``TreeBuilder`` by convention) that inherits - from ``treebuilders.base.TreeBuilder``. This has 4 required attributes: - - * ``documentClass`` - the class to use for the bottommost node of a document - * ``elementClass`` - the class to use for HTML Elements - * ``commentClass`` - the class to use for comments - * ``doctypeClass`` - the class to use for doctypes - - It also has one required method: - - * ``getDocument`` - Returns the root node of the complete document tree - -3. If you wish to run the unit tests, you must also create a ``testSerializer`` - method on your treebuilder which accepts a node and returns a string - containing Node and its children serialized according to the format used in - the unittests - -""" - -from __future__ import absolute_import, division, unicode_literals - -from .._utils import default_etree - -treeBuilderCache = {} - - -def getTreeBuilder(treeType, implementation=None, **kwargs): - """Get a TreeBuilder class for various types of trees with built-in support - - :arg treeType: the name of the tree type required (case-insensitive). Supported - values are: - - * "dom" - A generic builder for DOM implementations, defaulting to a - xml.dom.minidom based implementation. - * "etree" - A generic builder for tree implementations exposing an - ElementTree-like interface, defaulting to xml.etree.cElementTree if - available and xml.etree.ElementTree if not. - * "lxml" - A etree-based builder for lxml.etree, handling limitations - of lxml's implementation. - - :arg implementation: (Currently applies to the "etree" and "dom" tree - types). A module implementing the tree type e.g. xml.etree.ElementTree - or xml.etree.cElementTree. - - :arg kwargs: Any additional options to pass to the TreeBuilder when - creating it. - - Example: - - >>> from html5lib.treebuilders import getTreeBuilder - >>> builder = getTreeBuilder('etree') - - """ - - treeType = treeType.lower() - if treeType not in treeBuilderCache: - if treeType == "dom": - from . import dom - # Come up with a sane default (pref. from the stdlib) - if implementation is None: - from xml.dom import minidom - implementation = minidom - # NEVER cache here, caching is done in the dom submodule - return dom.getDomModule(implementation, **kwargs).TreeBuilder - elif treeType == "lxml": - from . import etree_lxml - treeBuilderCache[treeType] = etree_lxml.TreeBuilder - elif treeType == "etree": - from . import etree - if implementation is None: - implementation = default_etree - # NEVER cache here, caching is done in the etree submodule - return etree.getETreeModule(implementation, **kwargs).TreeBuilder - else: - raise ValueError("""Unrecognised treebuilder "%s" """ % treeType) - return treeBuilderCache.get(treeType) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/base.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/base.py deleted file mode 100644 index 73973db..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/base.py +++ /dev/null @@ -1,417 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import text_type - -from ..constants import scopingElements, tableInsertModeElements, namespaces - -# The scope markers are inserted when entering object elements, -# marquees, table cells, and table captions, and are used to prevent formatting -# from "leaking" into tables, object elements, and marquees. -Marker = None - -listElementsMap = { - None: (frozenset(scopingElements), False), - "button": (frozenset(scopingElements | set([(namespaces["html"], "button")])), False), - "list": (frozenset(scopingElements | set([(namespaces["html"], "ol"), - (namespaces["html"], "ul")])), False), - "table": (frozenset([(namespaces["html"], "html"), - (namespaces["html"], "table")]), False), - "select": (frozenset([(namespaces["html"], "optgroup"), - (namespaces["html"], "option")]), True) -} - - -class Node(object): - """Represents an item in the tree""" - def __init__(self, name): - """Creates a Node - - :arg name: The tag name associated with the node - - """ - # The tag name assocaited with the node - self.name = name - # The parent of the current node (or None for the document node) - self.parent = None - # The value of the current node (applies to text nodes and comments) - self.value = None - # A dict holding name -> value pairs for attributes of the node - self.attributes = {} - # A list of child nodes of the current node. This must include all - # elements but not necessarily other node types. - self.childNodes = [] - # A list of miscellaneous flags that can be set on the node. - self._flags = [] - - def __str__(self): - attributesStr = " ".join(["%s=\"%s\"" % (name, value) - for name, value in - self.attributes.items()]) - if attributesStr: - return "<%s %s>" % (self.name, attributesStr) - else: - return "<%s>" % (self.name) - - def __repr__(self): - return "<%s>" % (self.name) - - def appendChild(self, node): - """Insert node as a child of the current node - - :arg node: the node to insert - - """ - raise NotImplementedError - - def insertText(self, data, insertBefore=None): - """Insert data as text in the current node, positioned before the - start of node insertBefore or to the end of the node's text. - - :arg data: the data to insert - - :arg insertBefore: True if you want to insert the text before the node - and False if you want to insert it after the node - - """ - raise NotImplementedError - - def insertBefore(self, node, refNode): - """Insert node as a child of the current node, before refNode in the - list of child nodes. Raises ValueError if refNode is not a child of - the current node - - :arg node: the node to insert - - :arg refNode: the child node to insert the node before - - """ - raise NotImplementedError - - def removeChild(self, node): - """Remove node from the children of the current node - - :arg node: the child node to remove - - """ - raise NotImplementedError - - def reparentChildren(self, newParent): - """Move all the children of the current node to newParent. - This is needed so that trees that don't store text as nodes move the - text in the correct way - - :arg newParent: the node to move all this node's children to - - """ - # XXX - should this method be made more general? - for child in self.childNodes: - newParent.appendChild(child) - self.childNodes = [] - - def cloneNode(self): - """Return a shallow copy of the current node i.e. a node with the same - name and attributes but with no parent or child nodes - """ - raise NotImplementedError - - def hasContent(self): - """Return true if the node has children or text, false otherwise - """ - raise NotImplementedError - - -class ActiveFormattingElements(list): - def append(self, node): - equalCount = 0 - if node != Marker: - for element in self[::-1]: - if element == Marker: - break - if self.nodesEqual(element, node): - equalCount += 1 - if equalCount == 3: - self.remove(element) - break - list.append(self, node) - - def nodesEqual(self, node1, node2): - if not node1.nameTuple == node2.nameTuple: - return False - - if not node1.attributes == node2.attributes: - return False - - return True - - -class TreeBuilder(object): - """Base treebuilder implementation - - * documentClass - the class to use for the bottommost node of a document - * elementClass - the class to use for HTML Elements - * commentClass - the class to use for comments - * doctypeClass - the class to use for doctypes - - """ - # pylint:disable=not-callable - - # Document class - documentClass = None - - # The class to use for creating a node - elementClass = None - - # The class to use for creating comments - commentClass = None - - # The class to use for creating doctypes - doctypeClass = None - - # Fragment class - fragmentClass = None - - def __init__(self, namespaceHTMLElements): - """Create a TreeBuilder - - :arg namespaceHTMLElements: whether or not to namespace HTML elements - - """ - if namespaceHTMLElements: - self.defaultNamespace = "http://www.w3.org/1999/xhtml" - else: - self.defaultNamespace = None - self.reset() - - def reset(self): - self.openElements = [] - self.activeFormattingElements = ActiveFormattingElements() - - # XXX - rename these to headElement, formElement - self.headPointer = None - self.formPointer = None - - self.insertFromTable = False - - self.document = self.documentClass() - - def elementInScope(self, target, variant=None): - - # If we pass a node in we match that. if we pass a string - # match any node with that name - exactNode = hasattr(target, "nameTuple") - if not exactNode: - if isinstance(target, text_type): - target = (namespaces["html"], target) - assert isinstance(target, tuple) - - listElements, invert = listElementsMap[variant] - - for node in reversed(self.openElements): - if exactNode and node == target: - return True - elif not exactNode and node.nameTuple == target: - return True - elif (invert ^ (node.nameTuple in listElements)): - return False - - assert False # We should never reach this point - - def reconstructActiveFormattingElements(self): - # Within this algorithm the order of steps described in the - # specification is not quite the same as the order of steps in the - # code. It should still do the same though. - - # Step 1: stop the algorithm when there's nothing to do. - if not self.activeFormattingElements: - return - - # Step 2 and step 3: we start with the last element. So i is -1. - i = len(self.activeFormattingElements) - 1 - entry = self.activeFormattingElements[i] - if entry == Marker or entry in self.openElements: - return - - # Step 6 - while entry != Marker and entry not in self.openElements: - if i == 0: - # This will be reset to 0 below - i = -1 - break - i -= 1 - # Step 5: let entry be one earlier in the list. - entry = self.activeFormattingElements[i] - - while True: - # Step 7 - i += 1 - - # Step 8 - entry = self.activeFormattingElements[i] - clone = entry.cloneNode() # Mainly to get a new copy of the attributes - - # Step 9 - element = self.insertElement({"type": "StartTag", - "name": clone.name, - "namespace": clone.namespace, - "data": clone.attributes}) - - # Step 10 - self.activeFormattingElements[i] = element - - # Step 11 - if element == self.activeFormattingElements[-1]: - break - - def clearActiveFormattingElements(self): - entry = self.activeFormattingElements.pop() - while self.activeFormattingElements and entry != Marker: - entry = self.activeFormattingElements.pop() - - def elementInActiveFormattingElements(self, name): - """Check if an element exists between the end of the active - formatting elements and the last marker. If it does, return it, else - return false""" - - for item in self.activeFormattingElements[::-1]: - # Check for Marker first because if it's a Marker it doesn't have a - # name attribute. - if item == Marker: - break - elif item.name == name: - return item - return False - - def insertRoot(self, token): - element = self.createElement(token) - self.openElements.append(element) - self.document.appendChild(element) - - def insertDoctype(self, token): - name = token["name"] - publicId = token["publicId"] - systemId = token["systemId"] - - doctype = self.doctypeClass(name, publicId, systemId) - self.document.appendChild(doctype) - - def insertComment(self, token, parent=None): - if parent is None: - parent = self.openElements[-1] - parent.appendChild(self.commentClass(token["data"])) - - def createElement(self, token): - """Create an element but don't insert it anywhere""" - name = token["name"] - namespace = token.get("namespace", self.defaultNamespace) - element = self.elementClass(name, namespace) - element.attributes = token["data"] - return element - - def _getInsertFromTable(self): - return self._insertFromTable - - def _setInsertFromTable(self, value): - """Switch the function used to insert an element from the - normal one to the misnested table one and back again""" - self._insertFromTable = value - if value: - self.insertElement = self.insertElementTable - else: - self.insertElement = self.insertElementNormal - - insertFromTable = property(_getInsertFromTable, _setInsertFromTable) - - def insertElementNormal(self, token): - name = token["name"] - assert isinstance(name, text_type), "Element %s not unicode" % name - namespace = token.get("namespace", self.defaultNamespace) - element = self.elementClass(name, namespace) - element.attributes = token["data"] - self.openElements[-1].appendChild(element) - self.openElements.append(element) - return element - - def insertElementTable(self, token): - """Create an element and insert it into the tree""" - element = self.createElement(token) - if self.openElements[-1].name not in tableInsertModeElements: - return self.insertElementNormal(token) - else: - # We should be in the InTable mode. This means we want to do - # special magic element rearranging - parent, insertBefore = self.getTableMisnestedNodePosition() - if insertBefore is None: - parent.appendChild(element) - else: - parent.insertBefore(element, insertBefore) - self.openElements.append(element) - return element - - def insertText(self, data, parent=None): - """Insert text data.""" - if parent is None: - parent = self.openElements[-1] - - if (not self.insertFromTable or (self.insertFromTable and - self.openElements[-1].name - not in tableInsertModeElements)): - parent.insertText(data) - else: - # We should be in the InTable mode. This means we want to do - # special magic element rearranging - parent, insertBefore = self.getTableMisnestedNodePosition() - parent.insertText(data, insertBefore) - - def getTableMisnestedNodePosition(self): - """Get the foster parent element, and sibling to insert before - (or None) when inserting a misnested table node""" - # The foster parent element is the one which comes before the most - # recently opened table element - # XXX - this is really inelegant - lastTable = None - fosterParent = None - insertBefore = None - for elm in self.openElements[::-1]: - if elm.name == "table": - lastTable = elm - break - if lastTable: - # XXX - we should really check that this parent is actually a - # node here - if lastTable.parent: - fosterParent = lastTable.parent - insertBefore = lastTable - else: - fosterParent = self.openElements[ - self.openElements.index(lastTable) - 1] - else: - fosterParent = self.openElements[0] - return fosterParent, insertBefore - - def generateImpliedEndTags(self, exclude=None): - name = self.openElements[-1].name - # XXX td, th and tr are not actually needed - if (name in frozenset(("dd", "dt", "li", "option", "optgroup", "p", "rp", "rt")) and - name != exclude): - self.openElements.pop() - # XXX This is not entirely what the specification says. We should - # investigate it more closely. - self.generateImpliedEndTags(exclude) - - def getDocument(self): - """Return the final tree""" - return self.document - - def getFragment(self): - """Return the final fragment""" - # assert self.innerHTML - fragment = self.fragmentClass() - self.openElements[0].reparentChildren(fragment) - return fragment - - def testSerializer(self, node): - """Serialize the subtree of node in the format required by unit tests - - :arg node: the node from which to start serializing - - """ - raise NotImplementedError diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/dom.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/dom.py deleted file mode 100644 index dcfac22..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/dom.py +++ /dev/null @@ -1,236 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - - -from collections import MutableMapping -from xml.dom import minidom, Node -import weakref - -from . import base -from .. import constants -from ..constants import namespaces -from .._utils import moduleFactoryFactory - - -def getDomBuilder(DomImplementation): - Dom = DomImplementation - - class AttrList(MutableMapping): - def __init__(self, element): - self.element = element - - def __iter__(self): - return iter(self.element.attributes.keys()) - - def __setitem__(self, name, value): - if isinstance(name, tuple): - raise NotImplementedError - else: - attr = self.element.ownerDocument.createAttribute(name) - attr.value = value - self.element.attributes[name] = attr - - def __len__(self): - return len(self.element.attributes) - - def items(self): - return list(self.element.attributes.items()) - - def values(self): - return list(self.element.attributes.values()) - - def __getitem__(self, name): - if isinstance(name, tuple): - raise NotImplementedError - else: - return self.element.attributes[name].value - - def __delitem__(self, name): - if isinstance(name, tuple): - raise NotImplementedError - else: - del self.element.attributes[name] - - class NodeBuilder(base.Node): - def __init__(self, element): - base.Node.__init__(self, element.nodeName) - self.element = element - - namespace = property(lambda self: hasattr(self.element, "namespaceURI") and - self.element.namespaceURI or None) - - def appendChild(self, node): - node.parent = self - self.element.appendChild(node.element) - - def insertText(self, data, insertBefore=None): - text = self.element.ownerDocument.createTextNode(data) - if insertBefore: - self.element.insertBefore(text, insertBefore.element) - else: - self.element.appendChild(text) - - def insertBefore(self, node, refNode): - self.element.insertBefore(node.element, refNode.element) - node.parent = self - - def removeChild(self, node): - if node.element.parentNode == self.element: - self.element.removeChild(node.element) - node.parent = None - - def reparentChildren(self, newParent): - while self.element.hasChildNodes(): - child = self.element.firstChild - self.element.removeChild(child) - newParent.element.appendChild(child) - self.childNodes = [] - - def getAttributes(self): - return AttrList(self.element) - - def setAttributes(self, attributes): - if attributes: - for name, value in list(attributes.items()): - if isinstance(name, tuple): - if name[0] is not None: - qualifiedName = (name[0] + ":" + name[1]) - else: - qualifiedName = name[1] - self.element.setAttributeNS(name[2], qualifiedName, - value) - else: - self.element.setAttribute( - name, value) - attributes = property(getAttributes, setAttributes) - - def cloneNode(self): - return NodeBuilder(self.element.cloneNode(False)) - - def hasContent(self): - return self.element.hasChildNodes() - - def getNameTuple(self): - if self.namespace is None: - return namespaces["html"], self.name - else: - return self.namespace, self.name - - nameTuple = property(getNameTuple) - - class TreeBuilder(base.TreeBuilder): # pylint:disable=unused-variable - def documentClass(self): - self.dom = Dom.getDOMImplementation().createDocument(None, None, None) - return weakref.proxy(self) - - def insertDoctype(self, token): - name = token["name"] - publicId = token["publicId"] - systemId = token["systemId"] - - domimpl = Dom.getDOMImplementation() - doctype = domimpl.createDocumentType(name, publicId, systemId) - self.document.appendChild(NodeBuilder(doctype)) - if Dom == minidom: - doctype.ownerDocument = self.dom - - def elementClass(self, name, namespace=None): - if namespace is None and self.defaultNamespace is None: - node = self.dom.createElement(name) - else: - node = self.dom.createElementNS(namespace, name) - - return NodeBuilder(node) - - def commentClass(self, data): - return NodeBuilder(self.dom.createComment(data)) - - def fragmentClass(self): - return NodeBuilder(self.dom.createDocumentFragment()) - - def appendChild(self, node): - self.dom.appendChild(node.element) - - def testSerializer(self, element): - return testSerializer(element) - - def getDocument(self): - return self.dom - - def getFragment(self): - return base.TreeBuilder.getFragment(self).element - - def insertText(self, data, parent=None): - data = data - if parent != self: - base.TreeBuilder.insertText(self, data, parent) - else: - # HACK: allow text nodes as children of the document node - if hasattr(self.dom, '_child_node_types'): - # pylint:disable=protected-access - if Node.TEXT_NODE not in self.dom._child_node_types: - self.dom._child_node_types = list(self.dom._child_node_types) - self.dom._child_node_types.append(Node.TEXT_NODE) - self.dom.appendChild(self.dom.createTextNode(data)) - - implementation = DomImplementation - name = None - - def testSerializer(element): - element.normalize() - rv = [] - - def serializeElement(element, indent=0): - if element.nodeType == Node.DOCUMENT_TYPE_NODE: - if element.name: - if element.publicId or element.systemId: - publicId = element.publicId or "" - systemId = element.systemId or "" - rv.append("""|%s<!DOCTYPE %s "%s" "%s">""" % - (' ' * indent, element.name, publicId, systemId)) - else: - rv.append("|%s<!DOCTYPE %s>" % (' ' * indent, element.name)) - else: - rv.append("|%s<!DOCTYPE >" % (' ' * indent,)) - elif element.nodeType == Node.DOCUMENT_NODE: - rv.append("#document") - elif element.nodeType == Node.DOCUMENT_FRAGMENT_NODE: - rv.append("#document-fragment") - elif element.nodeType == Node.COMMENT_NODE: - rv.append("|%s<!-- %s -->" % (' ' * indent, element.nodeValue)) - elif element.nodeType == Node.TEXT_NODE: - rv.append("|%s\"%s\"" % (' ' * indent, element.nodeValue)) - else: - if (hasattr(element, "namespaceURI") and - element.namespaceURI is not None): - name = "%s %s" % (constants.prefixes[element.namespaceURI], - element.nodeName) - else: - name = element.nodeName - rv.append("|%s<%s>" % (' ' * indent, name)) - if element.hasAttributes(): - attributes = [] - for i in range(len(element.attributes)): - attr = element.attributes.item(i) - name = attr.nodeName - value = attr.value - ns = attr.namespaceURI - if ns: - name = "%s %s" % (constants.prefixes[ns], attr.localName) - else: - name = attr.nodeName - attributes.append((name, value)) - - for name, value in sorted(attributes): - rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) - indent += 2 - for child in element.childNodes: - serializeElement(child, indent) - serializeElement(element, 0) - - return "\n".join(rv) - - return locals() - - -# The actual means to get a module! -getDomModule = moduleFactoryFactory(getDomBuilder) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree.py deleted file mode 100644 index 0dedf44..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree.py +++ /dev/null @@ -1,340 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -# pylint:disable=protected-access - -from pip._vendor.six import text_type - -import re - -from . import base -from .. import _ihatexml -from .. import constants -from ..constants import namespaces -from .._utils import moduleFactoryFactory - -tag_regexp = re.compile("{([^}]*)}(.*)") - - -def getETreeBuilder(ElementTreeImplementation, fullTree=False): - ElementTree = ElementTreeImplementation - ElementTreeCommentType = ElementTree.Comment("asd").tag - - class Element(base.Node): - def __init__(self, name, namespace=None): - self._name = name - self._namespace = namespace - self._element = ElementTree.Element(self._getETreeTag(name, - namespace)) - if namespace is None: - self.nameTuple = namespaces["html"], self._name - else: - self.nameTuple = self._namespace, self._name - self.parent = None - self._childNodes = [] - self._flags = [] - - def _getETreeTag(self, name, namespace): - if namespace is None: - etree_tag = name - else: - etree_tag = "{%s}%s" % (namespace, name) - return etree_tag - - def _setName(self, name): - self._name = name - self._element.tag = self._getETreeTag(self._name, self._namespace) - - def _getName(self): - return self._name - - name = property(_getName, _setName) - - def _setNamespace(self, namespace): - self._namespace = namespace - self._element.tag = self._getETreeTag(self._name, self._namespace) - - def _getNamespace(self): - return self._namespace - - namespace = property(_getNamespace, _setNamespace) - - def _getAttributes(self): - return self._element.attrib - - def _setAttributes(self, attributes): - # Delete existing attributes first - # XXX - there may be a better way to do this... - for key in list(self._element.attrib.keys()): - del self._element.attrib[key] - for key, value in attributes.items(): - if isinstance(key, tuple): - name = "{%s}%s" % (key[2], key[1]) - else: - name = key - self._element.set(name, value) - - attributes = property(_getAttributes, _setAttributes) - - def _getChildNodes(self): - return self._childNodes - - def _setChildNodes(self, value): - del self._element[:] - self._childNodes = [] - for element in value: - self.insertChild(element) - - childNodes = property(_getChildNodes, _setChildNodes) - - def hasContent(self): - """Return true if the node has children or text""" - return bool(self._element.text or len(self._element)) - - def appendChild(self, node): - self._childNodes.append(node) - self._element.append(node._element) - node.parent = self - - def insertBefore(self, node, refNode): - index = list(self._element).index(refNode._element) - self._element.insert(index, node._element) - node.parent = self - - def removeChild(self, node): - self._childNodes.remove(node) - self._element.remove(node._element) - node.parent = None - - def insertText(self, data, insertBefore=None): - if not(len(self._element)): - if not self._element.text: - self._element.text = "" - self._element.text += data - elif insertBefore is None: - # Insert the text as the tail of the last child element - if not self._element[-1].tail: - self._element[-1].tail = "" - self._element[-1].tail += data - else: - # Insert the text before the specified node - children = list(self._element) - index = children.index(insertBefore._element) - if index > 0: - if not self._element[index - 1].tail: - self._element[index - 1].tail = "" - self._element[index - 1].tail += data - else: - if not self._element.text: - self._element.text = "" - self._element.text += data - - def cloneNode(self): - element = type(self)(self.name, self.namespace) - for name, value in self.attributes.items(): - element.attributes[name] = value - return element - - def reparentChildren(self, newParent): - if newParent.childNodes: - newParent.childNodes[-1]._element.tail += self._element.text - else: - if not newParent._element.text: - newParent._element.text = "" - if self._element.text is not None: - newParent._element.text += self._element.text - self._element.text = "" - base.Node.reparentChildren(self, newParent) - - class Comment(Element): - def __init__(self, data): - # Use the superclass constructor to set all properties on the - # wrapper element - self._element = ElementTree.Comment(data) - self.parent = None - self._childNodes = [] - self._flags = [] - - def _getData(self): - return self._element.text - - def _setData(self, value): - self._element.text = value - - data = property(_getData, _setData) - - class DocumentType(Element): - def __init__(self, name, publicId, systemId): - Element.__init__(self, "<!DOCTYPE>") - self._element.text = name - self.publicId = publicId - self.systemId = systemId - - def _getPublicId(self): - return self._element.get("publicId", "") - - def _setPublicId(self, value): - if value is not None: - self._element.set("publicId", value) - - publicId = property(_getPublicId, _setPublicId) - - def _getSystemId(self): - return self._element.get("systemId", "") - - def _setSystemId(self, value): - if value is not None: - self._element.set("systemId", value) - - systemId = property(_getSystemId, _setSystemId) - - class Document(Element): - def __init__(self): - Element.__init__(self, "DOCUMENT_ROOT") - - class DocumentFragment(Element): - def __init__(self): - Element.__init__(self, "DOCUMENT_FRAGMENT") - - def testSerializer(element): - rv = [] - - def serializeElement(element, indent=0): - if not(hasattr(element, "tag")): - element = element.getroot() - if element.tag == "<!DOCTYPE>": - if element.get("publicId") or element.get("systemId"): - publicId = element.get("publicId") or "" - systemId = element.get("systemId") or "" - rv.append("""<!DOCTYPE %s "%s" "%s">""" % - (element.text, publicId, systemId)) - else: - rv.append("<!DOCTYPE %s>" % (element.text,)) - elif element.tag == "DOCUMENT_ROOT": - rv.append("#document") - if element.text is not None: - rv.append("|%s\"%s\"" % (' ' * (indent + 2), element.text)) - if element.tail is not None: - raise TypeError("Document node cannot have tail") - if hasattr(element, "attrib") and len(element.attrib): - raise TypeError("Document node cannot have attributes") - elif element.tag == ElementTreeCommentType: - rv.append("|%s<!-- %s -->" % (' ' * indent, element.text)) - else: - assert isinstance(element.tag, text_type), \ - "Expected unicode, got %s, %s" % (type(element.tag), element.tag) - nsmatch = tag_regexp.match(element.tag) - - if nsmatch is None: - name = element.tag - else: - ns, name = nsmatch.groups() - prefix = constants.prefixes[ns] - name = "%s %s" % (prefix, name) - rv.append("|%s<%s>" % (' ' * indent, name)) - - if hasattr(element, "attrib"): - attributes = [] - for name, value in element.attrib.items(): - nsmatch = tag_regexp.match(name) - if nsmatch is not None: - ns, name = nsmatch.groups() - prefix = constants.prefixes[ns] - attr_string = "%s %s" % (prefix, name) - else: - attr_string = name - attributes.append((attr_string, value)) - - for name, value in sorted(attributes): - rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) - if element.text: - rv.append("|%s\"%s\"" % (' ' * (indent + 2), element.text)) - indent += 2 - for child in element: - serializeElement(child, indent) - if element.tail: - rv.append("|%s\"%s\"" % (' ' * (indent - 2), element.tail)) - serializeElement(element, 0) - - return "\n".join(rv) - - def tostring(element): # pylint:disable=unused-variable - """Serialize an element and its child nodes to a string""" - rv = [] - filter = _ihatexml.InfosetFilter() - - def serializeElement(element): - if isinstance(element, ElementTree.ElementTree): - element = element.getroot() - - if element.tag == "<!DOCTYPE>": - if element.get("publicId") or element.get("systemId"): - publicId = element.get("publicId") or "" - systemId = element.get("systemId") or "" - rv.append("""<!DOCTYPE %s PUBLIC "%s" "%s">""" % - (element.text, publicId, systemId)) - else: - rv.append("<!DOCTYPE %s>" % (element.text,)) - elif element.tag == "DOCUMENT_ROOT": - if element.text is not None: - rv.append(element.text) - if element.tail is not None: - raise TypeError("Document node cannot have tail") - if hasattr(element, "attrib") and len(element.attrib): - raise TypeError("Document node cannot have attributes") - - for child in element: - serializeElement(child) - - elif element.tag == ElementTreeCommentType: - rv.append("<!--%s-->" % (element.text,)) - else: - # This is assumed to be an ordinary element - if not element.attrib: - rv.append("<%s>" % (filter.fromXmlName(element.tag),)) - else: - attr = " ".join(["%s=\"%s\"" % ( - filter.fromXmlName(name), value) - for name, value in element.attrib.items()]) - rv.append("<%s %s>" % (element.tag, attr)) - if element.text: - rv.append(element.text) - - for child in element: - serializeElement(child) - - rv.append("</%s>" % (element.tag,)) - - if element.tail: - rv.append(element.tail) - - serializeElement(element) - - return "".join(rv) - - class TreeBuilder(base.TreeBuilder): # pylint:disable=unused-variable - documentClass = Document - doctypeClass = DocumentType - elementClass = Element - commentClass = Comment - fragmentClass = DocumentFragment - implementation = ElementTreeImplementation - - def testSerializer(self, element): - return testSerializer(element) - - def getDocument(self): - if fullTree: - return self.document._element - else: - if self.defaultNamespace is not None: - return self.document._element.find( - "{%s}html" % self.defaultNamespace) - else: - return self.document._element.find("html") - - def getFragment(self): - return base.TreeBuilder.getFragment(self)._element - - return locals() - - -getETreeModule = moduleFactoryFactory(getETreeBuilder) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree_lxml.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree_lxml.py deleted file mode 100644 index ca12a99..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treebuilders/etree_lxml.py +++ /dev/null @@ -1,366 +0,0 @@ -"""Module for supporting the lxml.etree library. The idea here is to use as much -of the native library as possible, without using fragile hacks like custom element -names that break between releases. The downside of this is that we cannot represent -all possible trees; specifically the following are known to cause problems: - -Text or comments as siblings of the root element -Docypes with no name - -When any of these things occur, we emit a DataLossWarning -""" - -from __future__ import absolute_import, division, unicode_literals -# pylint:disable=protected-access - -import warnings -import re -import sys - -from . import base -from ..constants import DataLossWarning -from .. import constants -from . import etree as etree_builders -from .. import _ihatexml - -import lxml.etree as etree - - -fullTree = True -tag_regexp = re.compile("{([^}]*)}(.*)") - -comment_type = etree.Comment("asd").tag - - -class DocumentType(object): - def __init__(self, name, publicId, systemId): - self.name = name - self.publicId = publicId - self.systemId = systemId - - -class Document(object): - def __init__(self): - self._elementTree = None - self._childNodes = [] - - def appendChild(self, element): - self._elementTree.getroot().addnext(element._element) - - def _getChildNodes(self): - return self._childNodes - - childNodes = property(_getChildNodes) - - -def testSerializer(element): - rv = [] - infosetFilter = _ihatexml.InfosetFilter(preventDoubleDashComments=True) - - def serializeElement(element, indent=0): - if not hasattr(element, "tag"): - if hasattr(element, "getroot"): - # Full tree case - rv.append("#document") - if element.docinfo.internalDTD: - if not (element.docinfo.public_id or - element.docinfo.system_url): - dtd_str = "<!DOCTYPE %s>" % element.docinfo.root_name - else: - dtd_str = """<!DOCTYPE %s "%s" "%s">""" % ( - element.docinfo.root_name, - element.docinfo.public_id, - element.docinfo.system_url) - rv.append("|%s%s" % (' ' * (indent + 2), dtd_str)) - next_element = element.getroot() - while next_element.getprevious() is not None: - next_element = next_element.getprevious() - while next_element is not None: - serializeElement(next_element, indent + 2) - next_element = next_element.getnext() - elif isinstance(element, str) or isinstance(element, bytes): - # Text in a fragment - assert isinstance(element, str) or sys.version_info[0] == 2 - rv.append("|%s\"%s\"" % (' ' * indent, element)) - else: - # Fragment case - rv.append("#document-fragment") - for next_element in element: - serializeElement(next_element, indent + 2) - elif element.tag == comment_type: - rv.append("|%s<!-- %s -->" % (' ' * indent, element.text)) - if hasattr(element, "tail") and element.tail: - rv.append("|%s\"%s\"" % (' ' * indent, element.tail)) - else: - assert isinstance(element, etree._Element) - nsmatch = etree_builders.tag_regexp.match(element.tag) - if nsmatch is not None: - ns = nsmatch.group(1) - tag = nsmatch.group(2) - prefix = constants.prefixes[ns] - rv.append("|%s<%s %s>" % (' ' * indent, prefix, - infosetFilter.fromXmlName(tag))) - else: - rv.append("|%s<%s>" % (' ' * indent, - infosetFilter.fromXmlName(element.tag))) - - if hasattr(element, "attrib"): - attributes = [] - for name, value in element.attrib.items(): - nsmatch = tag_regexp.match(name) - if nsmatch is not None: - ns, name = nsmatch.groups() - name = infosetFilter.fromXmlName(name) - prefix = constants.prefixes[ns] - attr_string = "%s %s" % (prefix, name) - else: - attr_string = infosetFilter.fromXmlName(name) - attributes.append((attr_string, value)) - - for name, value in sorted(attributes): - rv.append('|%s%s="%s"' % (' ' * (indent + 2), name, value)) - - if element.text: - rv.append("|%s\"%s\"" % (' ' * (indent + 2), element.text)) - indent += 2 - for child in element: - serializeElement(child, indent) - if hasattr(element, "tail") and element.tail: - rv.append("|%s\"%s\"" % (' ' * (indent - 2), element.tail)) - serializeElement(element, 0) - - return "\n".join(rv) - - -def tostring(element): - """Serialize an element and its child nodes to a string""" - rv = [] - - def serializeElement(element): - if not hasattr(element, "tag"): - if element.docinfo.internalDTD: - if element.docinfo.doctype: - dtd_str = element.docinfo.doctype - else: - dtd_str = "<!DOCTYPE %s>" % element.docinfo.root_name - rv.append(dtd_str) - serializeElement(element.getroot()) - - elif element.tag == comment_type: - rv.append("<!--%s-->" % (element.text,)) - - else: - # This is assumed to be an ordinary element - if not element.attrib: - rv.append("<%s>" % (element.tag,)) - else: - attr = " ".join(["%s=\"%s\"" % (name, value) - for name, value in element.attrib.items()]) - rv.append("<%s %s>" % (element.tag, attr)) - if element.text: - rv.append(element.text) - - for child in element: - serializeElement(child) - - rv.append("</%s>" % (element.tag,)) - - if hasattr(element, "tail") and element.tail: - rv.append(element.tail) - - serializeElement(element) - - return "".join(rv) - - -class TreeBuilder(base.TreeBuilder): - documentClass = Document - doctypeClass = DocumentType - elementClass = None - commentClass = None - fragmentClass = Document - implementation = etree - - def __init__(self, namespaceHTMLElements, fullTree=False): - builder = etree_builders.getETreeModule(etree, fullTree=fullTree) - infosetFilter = self.infosetFilter = _ihatexml.InfosetFilter(preventDoubleDashComments=True) - self.namespaceHTMLElements = namespaceHTMLElements - - class Attributes(dict): - def __init__(self, element, value=None): - if value is None: - value = {} - self._element = element - dict.__init__(self, value) # pylint:disable=non-parent-init-called - for key, value in self.items(): - if isinstance(key, tuple): - name = "{%s}%s" % (key[2], infosetFilter.coerceAttribute(key[1])) - else: - name = infosetFilter.coerceAttribute(key) - self._element._element.attrib[name] = value - - def __setitem__(self, key, value): - dict.__setitem__(self, key, value) - if isinstance(key, tuple): - name = "{%s}%s" % (key[2], infosetFilter.coerceAttribute(key[1])) - else: - name = infosetFilter.coerceAttribute(key) - self._element._element.attrib[name] = value - - class Element(builder.Element): - def __init__(self, name, namespace): - name = infosetFilter.coerceElement(name) - builder.Element.__init__(self, name, namespace=namespace) - self._attributes = Attributes(self) - - def _setName(self, name): - self._name = infosetFilter.coerceElement(name) - self._element.tag = self._getETreeTag( - self._name, self._namespace) - - def _getName(self): - return infosetFilter.fromXmlName(self._name) - - name = property(_getName, _setName) - - def _getAttributes(self): - return self._attributes - - def _setAttributes(self, attributes): - self._attributes = Attributes(self, attributes) - - attributes = property(_getAttributes, _setAttributes) - - def insertText(self, data, insertBefore=None): - data = infosetFilter.coerceCharacters(data) - builder.Element.insertText(self, data, insertBefore) - - def appendChild(self, child): - builder.Element.appendChild(self, child) - - class Comment(builder.Comment): - def __init__(self, data): - data = infosetFilter.coerceComment(data) - builder.Comment.__init__(self, data) - - def _setData(self, data): - data = infosetFilter.coerceComment(data) - self._element.text = data - - def _getData(self): - return self._element.text - - data = property(_getData, _setData) - - self.elementClass = Element - self.commentClass = Comment - # self.fragmentClass = builder.DocumentFragment - base.TreeBuilder.__init__(self, namespaceHTMLElements) - - def reset(self): - base.TreeBuilder.reset(self) - self.insertComment = self.insertCommentInitial - self.initial_comments = [] - self.doctype = None - - def testSerializer(self, element): - return testSerializer(element) - - def getDocument(self): - if fullTree: - return self.document._elementTree - else: - return self.document._elementTree.getroot() - - def getFragment(self): - fragment = [] - element = self.openElements[0]._element - if element.text: - fragment.append(element.text) - fragment.extend(list(element)) - if element.tail: - fragment.append(element.tail) - return fragment - - def insertDoctype(self, token): - name = token["name"] - publicId = token["publicId"] - systemId = token["systemId"] - - if not name: - warnings.warn("lxml cannot represent empty doctype", DataLossWarning) - self.doctype = None - else: - coercedName = self.infosetFilter.coerceElement(name) - if coercedName != name: - warnings.warn("lxml cannot represent non-xml doctype", DataLossWarning) - - doctype = self.doctypeClass(coercedName, publicId, systemId) - self.doctype = doctype - - def insertCommentInitial(self, data, parent=None): - assert parent is None or parent is self.document - assert self.document._elementTree is None - self.initial_comments.append(data) - - def insertCommentMain(self, data, parent=None): - if (parent == self.document and - self.document._elementTree.getroot()[-1].tag == comment_type): - warnings.warn("lxml cannot represent adjacent comments beyond the root elements", DataLossWarning) - super(TreeBuilder, self).insertComment(data, parent) - - def insertRoot(self, token): - # Because of the way libxml2 works, it doesn't seem to be possible to - # alter information like the doctype after the tree has been parsed. - # Therefore we need to use the built-in parser to create our initial - # tree, after which we can add elements like normal - docStr = "" - if self.doctype: - assert self.doctype.name - docStr += "<!DOCTYPE %s" % self.doctype.name - if (self.doctype.publicId is not None or - self.doctype.systemId is not None): - docStr += (' PUBLIC "%s" ' % - (self.infosetFilter.coercePubid(self.doctype.publicId or ""))) - if self.doctype.systemId: - sysid = self.doctype.systemId - if sysid.find("'") >= 0 and sysid.find('"') >= 0: - warnings.warn("DOCTYPE system cannot contain single and double quotes", DataLossWarning) - sysid = sysid.replace("'", 'U00027') - if sysid.find("'") >= 0: - docStr += '"%s"' % sysid - else: - docStr += "'%s'" % sysid - else: - docStr += "''" - docStr += ">" - if self.doctype.name != token["name"]: - warnings.warn("lxml cannot represent doctype with a different name to the root element", DataLossWarning) - docStr += "<THIS_SHOULD_NEVER_APPEAR_PUBLICLY/>" - root = etree.fromstring(docStr) - - # Append the initial comments: - for comment_token in self.initial_comments: - comment = self.commentClass(comment_token["data"]) - root.addprevious(comment._element) - - # Create the root document and add the ElementTree to it - self.document = self.documentClass() - self.document._elementTree = root.getroottree() - - # Give the root element the right name - name = token["name"] - namespace = token.get("namespace", self.defaultNamespace) - if namespace is None: - etree_tag = name - else: - etree_tag = "{%s}%s" % (namespace, name) - root.tag = etree_tag - - # Add the root element to the internal child/open data structures - root_element = self.elementClass(name, namespace) - root_element._element = root - self.document._childNodes.append(root_element) - self.openElements.append(root_element) - - # Reset to the default insert comment function - self.insertComment = self.insertCommentMain diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/__init__.py deleted file mode 100644 index 9bec207..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/__init__.py +++ /dev/null @@ -1,154 +0,0 @@ -"""A collection of modules for iterating through different kinds of -tree, generating tokens identical to those produced by the tokenizer -module. - -To create a tree walker for a new type of tree, you need to do -implement a tree walker object (called TreeWalker by convention) that -implements a 'serialize' method taking a tree as sole argument and -returning an iterator generating tokens. -""" - -from __future__ import absolute_import, division, unicode_literals - -from .. import constants -from .._utils import default_etree - -__all__ = ["getTreeWalker", "pprint"] - -treeWalkerCache = {} - - -def getTreeWalker(treeType, implementation=None, **kwargs): - """Get a TreeWalker class for various types of tree with built-in support - - :arg str treeType: the name of the tree type required (case-insensitive). - Supported values are: - - * "dom": The xml.dom.minidom DOM implementation - * "etree": A generic walker for tree implementations exposing an - elementtree-like interface (known to work with ElementTree, - cElementTree and lxml.etree). - * "lxml": Optimized walker for lxml.etree - * "genshi": a Genshi stream - - :arg implementation: A module implementing the tree type e.g. - xml.etree.ElementTree or cElementTree (Currently applies to the "etree" - tree type only). - - :arg kwargs: keyword arguments passed to the etree walker--for other - walkers, this has no effect - - :returns: a TreeWalker class - - """ - - treeType = treeType.lower() - if treeType not in treeWalkerCache: - if treeType == "dom": - from . import dom - treeWalkerCache[treeType] = dom.TreeWalker - elif treeType == "genshi": - from . import genshi - treeWalkerCache[treeType] = genshi.TreeWalker - elif treeType == "lxml": - from . import etree_lxml - treeWalkerCache[treeType] = etree_lxml.TreeWalker - elif treeType == "etree": - from . import etree - if implementation is None: - implementation = default_etree - # XXX: NEVER cache here, caching is done in the etree submodule - return etree.getETreeModule(implementation, **kwargs).TreeWalker - return treeWalkerCache.get(treeType) - - -def concatenateCharacterTokens(tokens): - pendingCharacters = [] - for token in tokens: - type = token["type"] - if type in ("Characters", "SpaceCharacters"): - pendingCharacters.append(token["data"]) - else: - if pendingCharacters: - yield {"type": "Characters", "data": "".join(pendingCharacters)} - pendingCharacters = [] - yield token - if pendingCharacters: - yield {"type": "Characters", "data": "".join(pendingCharacters)} - - -def pprint(walker): - """Pretty printer for tree walkers - - Takes a TreeWalker instance and pretty prints the output of walking the tree. - - :arg walker: a TreeWalker instance - - """ - output = [] - indent = 0 - for token in concatenateCharacterTokens(walker): - type = token["type"] - if type in ("StartTag", "EmptyTag"): - # tag name - if token["namespace"] and token["namespace"] != constants.namespaces["html"]: - if token["namespace"] in constants.prefixes: - ns = constants.prefixes[token["namespace"]] - else: - ns = token["namespace"] - name = "%s %s" % (ns, token["name"]) - else: - name = token["name"] - output.append("%s<%s>" % (" " * indent, name)) - indent += 2 - # attributes (sorted for consistent ordering) - attrs = token["data"] - for (namespace, localname), value in sorted(attrs.items()): - if namespace: - if namespace in constants.prefixes: - ns = constants.prefixes[namespace] - else: - ns = namespace - name = "%s %s" % (ns, localname) - else: - name = localname - output.append("%s%s=\"%s\"" % (" " * indent, name, value)) - # self-closing - if type == "EmptyTag": - indent -= 2 - - elif type == "EndTag": - indent -= 2 - - elif type == "Comment": - output.append("%s<!-- %s -->" % (" " * indent, token["data"])) - - elif type == "Doctype": - if token["name"]: - if token["publicId"]: - output.append("""%s<!DOCTYPE %s "%s" "%s">""" % - (" " * indent, - token["name"], - token["publicId"], - token["systemId"] if token["systemId"] else "")) - elif token["systemId"]: - output.append("""%s<!DOCTYPE %s "" "%s">""" % - (" " * indent, - token["name"], - token["systemId"])) - else: - output.append("%s<!DOCTYPE %s>" % (" " * indent, - token["name"])) - else: - output.append("%s<!DOCTYPE >" % (" " * indent,)) - - elif type == "Characters": - output.append("%s\"%s\"" % (" " * indent, token["data"])) - - elif type == "SpaceCharacters": - assert False, "concatenateCharacterTokens should have got rid of all Space tokens" - - else: - raise ValueError("Unknown token type, %s" % type) - - return "\n".join(output) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/base.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/base.py deleted file mode 100644 index 80c474c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/base.py +++ /dev/null @@ -1,252 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from xml.dom import Node -from ..constants import namespaces, voidElements, spaceCharacters - -__all__ = ["DOCUMENT", "DOCTYPE", "TEXT", "ELEMENT", "COMMENT", "ENTITY", "UNKNOWN", - "TreeWalker", "NonRecursiveTreeWalker"] - -DOCUMENT = Node.DOCUMENT_NODE -DOCTYPE = Node.DOCUMENT_TYPE_NODE -TEXT = Node.TEXT_NODE -ELEMENT = Node.ELEMENT_NODE -COMMENT = Node.COMMENT_NODE -ENTITY = Node.ENTITY_NODE -UNKNOWN = "<#UNKNOWN#>" - -spaceCharacters = "".join(spaceCharacters) - - -class TreeWalker(object): - """Walks a tree yielding tokens - - Tokens are dicts that all have a ``type`` field specifying the type of the - token. - - """ - def __init__(self, tree): - """Creates a TreeWalker - - :arg tree: the tree to walk - - """ - self.tree = tree - - def __iter__(self): - raise NotImplementedError - - def error(self, msg): - """Generates an error token with the given message - - :arg msg: the error message - - :returns: SerializeError token - - """ - return {"type": "SerializeError", "data": msg} - - def emptyTag(self, namespace, name, attrs, hasChildren=False): - """Generates an EmptyTag token - - :arg namespace: the namespace of the token--can be ``None`` - - :arg name: the name of the element - - :arg attrs: the attributes of the element as a dict - - :arg hasChildren: whether or not to yield a SerializationError because - this tag shouldn't have children - - :returns: EmptyTag token - - """ - yield {"type": "EmptyTag", "name": name, - "namespace": namespace, - "data": attrs} - if hasChildren: - yield self.error("Void element has children") - - def startTag(self, namespace, name, attrs): - """Generates a StartTag token - - :arg namespace: the namespace of the token--can be ``None`` - - :arg name: the name of the element - - :arg attrs: the attributes of the element as a dict - - :returns: StartTag token - - """ - return {"type": "StartTag", - "name": name, - "namespace": namespace, - "data": attrs} - - def endTag(self, namespace, name): - """Generates an EndTag token - - :arg namespace: the namespace of the token--can be ``None`` - - :arg name: the name of the element - - :returns: EndTag token - - """ - return {"type": "EndTag", - "name": name, - "namespace": namespace} - - def text(self, data): - """Generates SpaceCharacters and Characters tokens - - Depending on what's in the data, this generates one or more - ``SpaceCharacters`` and ``Characters`` tokens. - - For example: - - >>> from html5lib.treewalkers.base import TreeWalker - >>> # Give it an empty tree just so it instantiates - >>> walker = TreeWalker([]) - >>> list(walker.text('')) - [] - >>> list(walker.text(' ')) - [{u'data': ' ', u'type': u'SpaceCharacters'}] - >>> list(walker.text(' abc ')) # doctest: +NORMALIZE_WHITESPACE - [{u'data': ' ', u'type': u'SpaceCharacters'}, - {u'data': u'abc', u'type': u'Characters'}, - {u'data': u' ', u'type': u'SpaceCharacters'}] - - :arg data: the text data - - :returns: one or more ``SpaceCharacters`` and ``Characters`` tokens - - """ - data = data - middle = data.lstrip(spaceCharacters) - left = data[:len(data) - len(middle)] - if left: - yield {"type": "SpaceCharacters", "data": left} - data = middle - middle = data.rstrip(spaceCharacters) - right = data[len(middle):] - if middle: - yield {"type": "Characters", "data": middle} - if right: - yield {"type": "SpaceCharacters", "data": right} - - def comment(self, data): - """Generates a Comment token - - :arg data: the comment - - :returns: Comment token - - """ - return {"type": "Comment", "data": data} - - def doctype(self, name, publicId=None, systemId=None): - """Generates a Doctype token - - :arg name: - - :arg publicId: - - :arg systemId: - - :returns: the Doctype token - - """ - return {"type": "Doctype", - "name": name, - "publicId": publicId, - "systemId": systemId} - - def entity(self, name): - """Generates an Entity token - - :arg name: the entity name - - :returns: an Entity token - - """ - return {"type": "Entity", "name": name} - - def unknown(self, nodeType): - """Handles unknown node types""" - return self.error("Unknown node type: " + nodeType) - - -class NonRecursiveTreeWalker(TreeWalker): - def getNodeDetails(self, node): - raise NotImplementedError - - def getFirstChild(self, node): - raise NotImplementedError - - def getNextSibling(self, node): - raise NotImplementedError - - def getParentNode(self, node): - raise NotImplementedError - - def __iter__(self): - currentNode = self.tree - while currentNode is not None: - details = self.getNodeDetails(currentNode) - type, details = details[0], details[1:] - hasChildren = False - - if type == DOCTYPE: - yield self.doctype(*details) - - elif type == TEXT: - for token in self.text(*details): - yield token - - elif type == ELEMENT: - namespace, name, attributes, hasChildren = details - if (not namespace or namespace == namespaces["html"]) and name in voidElements: - for token in self.emptyTag(namespace, name, attributes, - hasChildren): - yield token - hasChildren = False - else: - yield self.startTag(namespace, name, attributes) - - elif type == COMMENT: - yield self.comment(details[0]) - - elif type == ENTITY: - yield self.entity(details[0]) - - elif type == DOCUMENT: - hasChildren = True - - else: - yield self.unknown(details[0]) - - if hasChildren: - firstChild = self.getFirstChild(currentNode) - else: - firstChild = None - - if firstChild is not None: - currentNode = firstChild - else: - while currentNode is not None: - details = self.getNodeDetails(currentNode) - type, details = details[0], details[1:] - if type == ELEMENT: - namespace, name, attributes, hasChildren = details - if (namespace and namespace != namespaces["html"]) or name not in voidElements: - yield self.endTag(namespace, name) - if self.tree is currentNode: - currentNode = None - break - nextSibling = self.getNextSibling(currentNode) - if nextSibling is not None: - currentNode = nextSibling - break - else: - currentNode = self.getParentNode(currentNode) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/dom.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/dom.py deleted file mode 100644 index b0c89b0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/dom.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from xml.dom import Node - -from . import base - - -class TreeWalker(base.NonRecursiveTreeWalker): - def getNodeDetails(self, node): - if node.nodeType == Node.DOCUMENT_TYPE_NODE: - return base.DOCTYPE, node.name, node.publicId, node.systemId - - elif node.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): - return base.TEXT, node.nodeValue - - elif node.nodeType == Node.ELEMENT_NODE: - attrs = {} - for attr in list(node.attributes.keys()): - attr = node.getAttributeNode(attr) - if attr.namespaceURI: - attrs[(attr.namespaceURI, attr.localName)] = attr.value - else: - attrs[(None, attr.name)] = attr.value - return (base.ELEMENT, node.namespaceURI, node.nodeName, - attrs, node.hasChildNodes()) - - elif node.nodeType == Node.COMMENT_NODE: - return base.COMMENT, node.nodeValue - - elif node.nodeType in (Node.DOCUMENT_NODE, Node.DOCUMENT_FRAGMENT_NODE): - return (base.DOCUMENT,) - - else: - return base.UNKNOWN, node.nodeType - - def getFirstChild(self, node): - return node.firstChild - - def getNextSibling(self, node): - return node.nextSibling - - def getParentNode(self, node): - return node.parentNode diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree.py deleted file mode 100644 index 95fc0c1..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree.py +++ /dev/null @@ -1,130 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from collections import OrderedDict -import re - -from pip._vendor.six import string_types - -from . import base -from .._utils import moduleFactoryFactory - -tag_regexp = re.compile("{([^}]*)}(.*)") - - -def getETreeBuilder(ElementTreeImplementation): - ElementTree = ElementTreeImplementation - ElementTreeCommentType = ElementTree.Comment("asd").tag - - class TreeWalker(base.NonRecursiveTreeWalker): # pylint:disable=unused-variable - """Given the particular ElementTree representation, this implementation, - to avoid using recursion, returns "nodes" as tuples with the following - content: - - 1. The current element - - 2. The index of the element relative to its parent - - 3. A stack of ancestor elements - - 4. A flag "text", "tail" or None to indicate if the current node is a - text node; either the text or tail of the current element (1) - """ - def getNodeDetails(self, node): - if isinstance(node, tuple): # It might be the root Element - elt, _, _, flag = node - if flag in ("text", "tail"): - return base.TEXT, getattr(elt, flag) - else: - node = elt - - if not(hasattr(node, "tag")): - node = node.getroot() - - if node.tag in ("DOCUMENT_ROOT", "DOCUMENT_FRAGMENT"): - return (base.DOCUMENT,) - - elif node.tag == "<!DOCTYPE>": - return (base.DOCTYPE, node.text, - node.get("publicId"), node.get("systemId")) - - elif node.tag == ElementTreeCommentType: - return base.COMMENT, node.text - - else: - assert isinstance(node.tag, string_types), type(node.tag) - # This is assumed to be an ordinary element - match = tag_regexp.match(node.tag) - if match: - namespace, tag = match.groups() - else: - namespace = None - tag = node.tag - attrs = OrderedDict() - for name, value in list(node.attrib.items()): - match = tag_regexp.match(name) - if match: - attrs[(match.group(1), match.group(2))] = value - else: - attrs[(None, name)] = value - return (base.ELEMENT, namespace, tag, - attrs, len(node) or node.text) - - def getFirstChild(self, node): - if isinstance(node, tuple): - element, key, parents, flag = node - else: - element, key, parents, flag = node, None, [], None - - if flag in ("text", "tail"): - return None - else: - if element.text: - return element, key, parents, "text" - elif len(element): - parents.append(element) - return element[0], 0, parents, None - else: - return None - - def getNextSibling(self, node): - if isinstance(node, tuple): - element, key, parents, flag = node - else: - return None - - if flag == "text": - if len(element): - parents.append(element) - return element[0], 0, parents, None - else: - return None - else: - if element.tail and flag != "tail": - return element, key, parents, "tail" - elif key < len(parents[-1]) - 1: - return parents[-1][key + 1], key + 1, parents, None - else: - return None - - def getParentNode(self, node): - if isinstance(node, tuple): - element, key, parents, flag = node - else: - return None - - if flag == "text": - if not parents: - return element - else: - return element, key, parents, None - else: - parent = parents.pop() - if not parents: - return parent - else: - assert list(parents[-1]).count(parent) == 1 - return parent, list(parents[-1]).index(parent), parents, None - - return locals() - -getETreeModule = moduleFactoryFactory(getETreeBuilder) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree_lxml.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree_lxml.py deleted file mode 100644 index e81ddf3..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/etree_lxml.py +++ /dev/null @@ -1,213 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals -from pip._vendor.six import text_type - -from lxml import etree -from ..treebuilders.etree import tag_regexp - -from . import base - -from .. import _ihatexml - - -def ensure_str(s): - if s is None: - return None - elif isinstance(s, text_type): - return s - else: - return s.decode("ascii", "strict") - - -class Root(object): - def __init__(self, et): - self.elementtree = et - self.children = [] - - try: - if et.docinfo.internalDTD: - self.children.append(Doctype(self, - ensure_str(et.docinfo.root_name), - ensure_str(et.docinfo.public_id), - ensure_str(et.docinfo.system_url))) - except AttributeError: - pass - - try: - node = et.getroot() - except AttributeError: - node = et - - while node.getprevious() is not None: - node = node.getprevious() - while node is not None: - self.children.append(node) - node = node.getnext() - - self.text = None - self.tail = None - - def __getitem__(self, key): - return self.children[key] - - def getnext(self): - return None - - def __len__(self): - return 1 - - -class Doctype(object): - def __init__(self, root_node, name, public_id, system_id): - self.root_node = root_node - self.name = name - self.public_id = public_id - self.system_id = system_id - - self.text = None - self.tail = None - - def getnext(self): - return self.root_node.children[1] - - -class FragmentRoot(Root): - def __init__(self, children): - self.children = [FragmentWrapper(self, child) for child in children] - self.text = self.tail = None - - def getnext(self): - return None - - -class FragmentWrapper(object): - def __init__(self, fragment_root, obj): - self.root_node = fragment_root - self.obj = obj - if hasattr(self.obj, 'text'): - self.text = ensure_str(self.obj.text) - else: - self.text = None - if hasattr(self.obj, 'tail'): - self.tail = ensure_str(self.obj.tail) - else: - self.tail = None - - def __getattr__(self, name): - return getattr(self.obj, name) - - def getnext(self): - siblings = self.root_node.children - idx = siblings.index(self) - if idx < len(siblings) - 1: - return siblings[idx + 1] - else: - return None - - def __getitem__(self, key): - return self.obj[key] - - def __bool__(self): - return bool(self.obj) - - def getparent(self): - return None - - def __str__(self): - return str(self.obj) - - def __unicode__(self): - return str(self.obj) - - def __len__(self): - return len(self.obj) - - -class TreeWalker(base.NonRecursiveTreeWalker): - def __init__(self, tree): - # pylint:disable=redefined-variable-type - if isinstance(tree, list): - self.fragmentChildren = set(tree) - tree = FragmentRoot(tree) - else: - self.fragmentChildren = set() - tree = Root(tree) - base.NonRecursiveTreeWalker.__init__(self, tree) - self.filter = _ihatexml.InfosetFilter() - - def getNodeDetails(self, node): - if isinstance(node, tuple): # Text node - node, key = node - assert key in ("text", "tail"), "Text nodes are text or tail, found %s" % key - return base.TEXT, ensure_str(getattr(node, key)) - - elif isinstance(node, Root): - return (base.DOCUMENT,) - - elif isinstance(node, Doctype): - return base.DOCTYPE, node.name, node.public_id, node.system_id - - elif isinstance(node, FragmentWrapper) and not hasattr(node, "tag"): - return base.TEXT, ensure_str(node.obj) - - elif node.tag == etree.Comment: - return base.COMMENT, ensure_str(node.text) - - elif node.tag == etree.Entity: - return base.ENTITY, ensure_str(node.text)[1:-1] # strip &; - - else: - # This is assumed to be an ordinary element - match = tag_regexp.match(ensure_str(node.tag)) - if match: - namespace, tag = match.groups() - else: - namespace = None - tag = ensure_str(node.tag) - attrs = {} - for name, value in list(node.attrib.items()): - name = ensure_str(name) - value = ensure_str(value) - match = tag_regexp.match(name) - if match: - attrs[(match.group(1), match.group(2))] = value - else: - attrs[(None, name)] = value - return (base.ELEMENT, namespace, self.filter.fromXmlName(tag), - attrs, len(node) > 0 or node.text) - - def getFirstChild(self, node): - assert not isinstance(node, tuple), "Text nodes have no children" - - assert len(node) or node.text, "Node has no children" - if node.text: - return (node, "text") - else: - return node[0] - - def getNextSibling(self, node): - if isinstance(node, tuple): # Text node - node, key = node - assert key in ("text", "tail"), "Text nodes are text or tail, found %s" % key - if key == "text": - # XXX: we cannot use a "bool(node) and node[0] or None" construct here - # because node[0] might evaluate to False if it has no child element - if len(node): - return node[0] - else: - return None - else: # tail - return node.getnext() - - return (node, "tail") if node.tail else node.getnext() - - def getParentNode(self, node): - if isinstance(node, tuple): # Text node - node, key = node - assert key in ("text", "tail"), "Text nodes are text or tail, found %s" % key - if key == "text": - return node - # else: fallback to "normal" processing - elif node in self.fragmentChildren: - return None - - return node.getparent() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/genshi.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/genshi.py deleted file mode 100644 index 7483be2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/html5lib/treewalkers/genshi.py +++ /dev/null @@ -1,69 +0,0 @@ -from __future__ import absolute_import, division, unicode_literals - -from genshi.core import QName -from genshi.core import START, END, XML_NAMESPACE, DOCTYPE, TEXT -from genshi.core import START_NS, END_NS, START_CDATA, END_CDATA, PI, COMMENT - -from . import base - -from ..constants import voidElements, namespaces - - -class TreeWalker(base.TreeWalker): - def __iter__(self): - # Buffer the events so we can pass in the following one - previous = None - for event in self.tree: - if previous is not None: - for token in self.tokens(previous, event): - yield token - previous = event - - # Don't forget the final event! - if previous is not None: - for token in self.tokens(previous, None): - yield token - - def tokens(self, event, next): - kind, data, _ = event - if kind == START: - tag, attribs = data - name = tag.localname - namespace = tag.namespace - converted_attribs = {} - for k, v in attribs: - if isinstance(k, QName): - converted_attribs[(k.namespace, k.localname)] = v - else: - converted_attribs[(None, k)] = v - - if namespace == namespaces["html"] and name in voidElements: - for token in self.emptyTag(namespace, name, converted_attribs, - not next or next[0] != END or - next[1] != tag): - yield token - else: - yield self.startTag(namespace, name, converted_attribs) - - elif kind == END: - name = data.localname - namespace = data.namespace - if namespace != namespaces["html"] or name not in voidElements: - yield self.endTag(namespace, name) - - elif kind == COMMENT: - yield self.comment(data) - - elif kind == TEXT: - for token in self.text(data): - yield token - - elif kind == DOCTYPE: - yield self.doctype(*data) - - elif kind in (XML_NAMESPACE, DOCTYPE, START_NS, END_NS, - START_CDATA, END_CDATA, PI): - pass - - else: - yield self.unknown(kind) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/__init__.py deleted file mode 100644 index 847bf93..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .package_data import __version__ -from .core import * diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/codec.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/codec.py deleted file mode 100644 index 98c65ea..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/codec.py +++ /dev/null @@ -1,118 +0,0 @@ -from .core import encode, decode, alabel, ulabel, IDNAError -import codecs -import re - -_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') - -class Codec(codecs.Codec): - - def encode(self, data, errors='strict'): - - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return "", 0 - - return encode(data), len(data) - - def decode(self, data, errors='strict'): - - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return u"", 0 - - return decode(data), len(data) - -class IncrementalEncoder(codecs.BufferedIncrementalEncoder): - def _buffer_encode(self, data, errors, final): - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return ("", 0) - - labels = _unicode_dots_re.split(data) - trailing_dot = u'' - if labels: - if not labels[-1]: - trailing_dot = '.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = '.' - - result = [] - size = 0 - for label in labels: - result.append(alabel(label)) - if size: - size += 1 - size += len(label) - - # Join with U+002E - result = ".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - -class IncrementalDecoder(codecs.BufferedIncrementalDecoder): - def _buffer_decode(self, data, errors, final): - if errors != 'strict': - raise IDNAError("Unsupported error handling \"{0}\"".format(errors)) - - if not data: - return (u"", 0) - - # IDNA allows decoding to operate on Unicode strings, too. - if isinstance(data, unicode): - labels = _unicode_dots_re.split(data) - else: - # Must be ASCII string - data = str(data) - unicode(data, "ascii") - labels = data.split(".") - - trailing_dot = u'' - if labels: - if not labels[-1]: - trailing_dot = u'.' - del labels[-1] - elif not final: - # Keep potentially unfinished label until the next call - del labels[-1] - if labels: - trailing_dot = u'.' - - result = [] - size = 0 - for label in labels: - result.append(ulabel(label)) - if size: - size += 1 - size += len(label) - - result = u".".join(result) + trailing_dot - size += len(trailing_dot) - return (result, size) - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - -class StreamReader(Codec, codecs.StreamReader): - pass - -def getregentry(): - return codecs.CodecInfo( - name='idna', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamwriter=StreamWriter, - streamreader=StreamReader, - ) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/compat.py deleted file mode 100644 index 4d47f33..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/compat.py +++ /dev/null @@ -1,12 +0,0 @@ -from .core import * -from .codec import * - -def ToASCII(label): - return encode(label) - -def ToUnicode(label): - return decode(label) - -def nameprep(s): - raise NotImplementedError("IDNA 2008 does not utilise nameprep protocol") - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/core.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/core.py deleted file mode 100644 index b55b664..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/core.py +++ /dev/null @@ -1,387 +0,0 @@ -from . import idnadata -import bisect -import unicodedata -import re -import sys -from .intranges import intranges_contain - -_virama_combining_class = 9 -_alabel_prefix = b'xn--' -_unicode_dots_re = re.compile(u'[\u002e\u3002\uff0e\uff61]') - -if sys.version_info[0] == 3: - unicode = str - unichr = chr - -class IDNAError(UnicodeError): - """ Base exception for all IDNA-encoding related problems """ - pass - - -class IDNABidiError(IDNAError): - """ Exception when bidirectional requirements are not satisfied """ - pass - - -class InvalidCodepoint(IDNAError): - """ Exception when a disallowed or unallocated codepoint is used """ - pass - - -class InvalidCodepointContext(IDNAError): - """ Exception when the codepoint is not valid in the context it is used """ - pass - - -def _combining_class(cp): - return unicodedata.combining(unichr(cp)) - -def _is_script(cp, script): - return intranges_contain(ord(cp), idnadata.scripts[script]) - -def _punycode(s): - return s.encode('punycode') - -def _unot(s): - return 'U+{0:04X}'.format(s) - - -def valid_label_length(label): - - if len(label) > 63: - return False - return True - - -def valid_string_length(label, trailing_dot): - - if len(label) > (254 if trailing_dot else 253): - return False - return True - - -def check_bidi(label, check_ltr=False): - - # Bidi rules should only be applied if string contains RTL characters - bidi_label = False - for (idx, cp) in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - if direction == '': - # String likely comes from a newer version of Unicode - raise IDNABidiError('Unknown directionality in label {0} at position {1}'.format(repr(label), idx)) - if direction in ['R', 'AL', 'AN']: - bidi_label = True - break - if not bidi_label and not check_ltr: - return True - - # Bidi rule 1 - direction = unicodedata.bidirectional(label[0]) - if direction in ['R', 'AL']: - rtl = True - elif direction == 'L': - rtl = False - else: - raise IDNABidiError('First codepoint in label {0} must be directionality L, R or AL'.format(repr(label))) - - valid_ending = False - number_type = False - for (idx, cp) in enumerate(label, 1): - direction = unicodedata.bidirectional(cp) - - if rtl: - # Bidi rule 2 - if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: - raise IDNABidiError('Invalid direction for codepoint at position {0} in a right-to-left label'.format(idx)) - # Bidi rule 3 - if direction in ['R', 'AL', 'EN', 'AN']: - valid_ending = True - elif direction != 'NSM': - valid_ending = False - # Bidi rule 4 - if direction in ['AN', 'EN']: - if not number_type: - number_type = direction - else: - if number_type != direction: - raise IDNABidiError('Can not mix numeral types in a right-to-left label') - else: - # Bidi rule 5 - if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']: - raise IDNABidiError('Invalid direction for codepoint at position {0} in a left-to-right label'.format(idx)) - # Bidi rule 6 - if direction in ['L', 'EN']: - valid_ending = True - elif direction != 'NSM': - valid_ending = False - - if not valid_ending: - raise IDNABidiError('Label ends with illegal codepoint directionality') - - return True - - -def check_initial_combiner(label): - - if unicodedata.category(label[0])[0] == 'M': - raise IDNAError('Label begins with an illegal combining character') - return True - - -def check_hyphen_ok(label): - - if label[2:4] == '--': - raise IDNAError('Label has disallowed hyphens in 3rd and 4th position') - if label[0] == '-' or label[-1] == '-': - raise IDNAError('Label must not start or end with a hyphen') - return True - - -def check_nfc(label): - - if unicodedata.normalize('NFC', label) != label: - raise IDNAError('Label must be in Normalization Form C') - - -def valid_contextj(label, pos): - - cp_value = ord(label[pos]) - - if cp_value == 0x200c: - - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - - ok = False - for i in range(pos-1, -1, -1): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord('T'): - continue - if joining_type in [ord('L'), ord('D')]: - ok = True - break - - if not ok: - return False - - ok = False - for i in range(pos+1, len(label)): - joining_type = idnadata.joining_types.get(ord(label[i])) - if joining_type == ord('T'): - continue - if joining_type in [ord('R'), ord('D')]: - ok = True - break - return ok - - if cp_value == 0x200d: - - if pos > 0: - if _combining_class(ord(label[pos - 1])) == _virama_combining_class: - return True - return False - - else: - - return False - - -def valid_contexto(label, pos, exception=False): - - cp_value = ord(label[pos]) - - if cp_value == 0x00b7: - if 0 < pos < len(label)-1: - if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c: - return True - return False - - elif cp_value == 0x0375: - if pos < len(label)-1 and len(label) > 1: - return _is_script(label[pos + 1], 'Greek') - return False - - elif cp_value == 0x05f3 or cp_value == 0x05f4: - if pos > 0: - return _is_script(label[pos - 1], 'Hebrew') - return False - - elif cp_value == 0x30fb: - for cp in label: - if cp == u'\u30fb': - continue - if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'): - return True - return False - - elif 0x660 <= cp_value <= 0x669: - for cp in label: - if 0x6f0 <= ord(cp) <= 0x06f9: - return False - return True - - elif 0x6f0 <= cp_value <= 0x6f9: - for cp in label: - if 0x660 <= ord(cp) <= 0x0669: - return False - return True - - -def check_label(label): - - if isinstance(label, (bytes, bytearray)): - label = label.decode('utf-8') - if len(label) == 0: - raise IDNAError('Empty Label') - - check_nfc(label) - check_hyphen_ok(label) - check_initial_combiner(label) - - for (pos, cp) in enumerate(label): - cp_value = ord(cp) - if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']): - continue - elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']): - if not valid_contextj(label, pos): - raise InvalidCodepointContext('Joiner {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label))) - elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']): - if not valid_contexto(label, pos): - raise InvalidCodepointContext('Codepoint {0} not allowed at position {1} in {2}'.format(_unot(cp_value), pos+1, repr(label))) - else: - raise InvalidCodepoint('Codepoint {0} at position {1} of {2} not allowed'.format(_unot(cp_value), pos+1, repr(label))) - - check_bidi(label) - - -def alabel(label): - - try: - label = label.encode('ascii') - try: - ulabel(label) - except IDNAError: - raise IDNAError('The label {0} is not a valid A-label'.format(label)) - if not valid_label_length(label): - raise IDNAError('Label too long') - return label - except UnicodeEncodeError: - pass - - if not label: - raise IDNAError('No Input') - - label = unicode(label) - check_label(label) - label = _punycode(label) - label = _alabel_prefix + label - - if not valid_label_length(label): - raise IDNAError('Label too long') - - return label - - -def ulabel(label): - - if not isinstance(label, (bytes, bytearray)): - try: - label = label.encode('ascii') - except UnicodeEncodeError: - check_label(label) - return label - - label = label.lower() - if label.startswith(_alabel_prefix): - label = label[len(_alabel_prefix):] - else: - check_label(label) - return label.decode('ascii') - - label = label.decode('punycode') - check_label(label) - return label - - -def uts46_remap(domain, std3_rules=True, transitional=False): - """Re-map the characters in the string according to UTS46 processing.""" - from .uts46data import uts46data - output = u"" - try: - for pos, char in enumerate(domain): - code_point = ord(char) - uts46row = uts46data[code_point if code_point < 256 else - bisect.bisect_left(uts46data, (code_point, "Z")) - 1] - status = uts46row[1] - replacement = uts46row[2] if len(uts46row) == 3 else None - if (status == "V" or - (status == "D" and not transitional) or - (status == "3" and std3_rules and replacement is None)): - output += char - elif replacement is not None and (status == "M" or - (status == "3" and std3_rules) or - (status == "D" and transitional)): - output += replacement - elif status != "I": - raise IndexError() - return unicodedata.normalize("NFC", output) - except IndexError: - raise InvalidCodepoint( - "Codepoint {0} not allowed at position {1} in {2}".format( - _unot(code_point), pos + 1, repr(domain))) - - -def encode(s, strict=False, uts46=False, std3_rules=False, transitional=False): - - if isinstance(s, (bytes, bytearray)): - s = s.decode("ascii") - if uts46: - s = uts46_remap(s, std3_rules, transitional) - trailing_dot = False - result = [] - if strict: - labels = s.split('.') - else: - labels = _unicode_dots_re.split(s) - while labels and not labels[0]: - del labels[0] - if not labels: - raise IDNAError('Empty domain') - if labels[-1] == '': - del labels[-1] - trailing_dot = True - for label in labels: - result.append(alabel(label)) - if trailing_dot: - result.append(b'') - s = b'.'.join(result) - if not valid_string_length(s, trailing_dot): - raise IDNAError('Domain too long') - return s - - -def decode(s, strict=False, uts46=False, std3_rules=False): - - if isinstance(s, (bytes, bytearray)): - s = s.decode("ascii") - if uts46: - s = uts46_remap(s, std3_rules, False) - trailing_dot = False - result = [] - if not strict: - labels = _unicode_dots_re.split(s) - else: - labels = s.split(u'.') - while labels and not labels[0]: - del labels[0] - if not labels: - raise IDNAError('Empty domain') - if not labels[-1]: - del labels[-1] - trailing_dot = True - for label in labels: - result.append(ulabel(label)) - if trailing_dot: - result.append(u'') - return u'.'.join(result) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/idnadata.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/idnadata.py deleted file mode 100644 index c48f1b5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/idnadata.py +++ /dev/null @@ -1,1585 +0,0 @@ -# This file is automatically generated by tools/idna-data - -__version__ = "6.3.0" -scripts = { - 'Greek': ( - 0x37000000374, - 0x37500000378, - 0x37a0000037e, - 0x38400000385, - 0x38600000387, - 0x3880000038b, - 0x38c0000038d, - 0x38e000003a2, - 0x3a3000003e2, - 0x3f000000400, - 0x1d2600001d2b, - 0x1d5d00001d62, - 0x1d6600001d6b, - 0x1dbf00001dc0, - 0x1f0000001f16, - 0x1f1800001f1e, - 0x1f2000001f46, - 0x1f4800001f4e, - 0x1f5000001f58, - 0x1f5900001f5a, - 0x1f5b00001f5c, - 0x1f5d00001f5e, - 0x1f5f00001f7e, - 0x1f8000001fb5, - 0x1fb600001fc5, - 0x1fc600001fd4, - 0x1fd600001fdc, - 0x1fdd00001ff0, - 0x1ff200001ff5, - 0x1ff600001fff, - 0x212600002127, - 0x101400001018b, - 0x1d2000001d246, - ), - 'Han': ( - 0x2e8000002e9a, - 0x2e9b00002ef4, - 0x2f0000002fd6, - 0x300500003006, - 0x300700003008, - 0x30210000302a, - 0x30380000303c, - 0x340000004db6, - 0x4e0000009fcd, - 0xf9000000fa6e, - 0xfa700000fada, - 0x200000002a6d7, - 0x2a7000002b735, - 0x2b7400002b81e, - 0x2f8000002fa1e, - ), - 'Hebrew': ( - 0x591000005c8, - 0x5d0000005eb, - 0x5f0000005f5, - 0xfb1d0000fb37, - 0xfb380000fb3d, - 0xfb3e0000fb3f, - 0xfb400000fb42, - 0xfb430000fb45, - 0xfb460000fb50, - ), - 'Hiragana': ( - 0x304100003097, - 0x309d000030a0, - 0x1b0010001b002, - 0x1f2000001f201, - ), - 'Katakana': ( - 0x30a1000030fb, - 0x30fd00003100, - 0x31f000003200, - 0x32d0000032ff, - 0x330000003358, - 0xff660000ff70, - 0xff710000ff9e, - 0x1b0000001b001, - ), -} -joining_types = { - 0x600: 85, - 0x601: 85, - 0x602: 85, - 0x603: 85, - 0x604: 85, - 0x608: 85, - 0x60b: 85, - 0x620: 68, - 0x621: 85, - 0x622: 82, - 0x623: 82, - 0x624: 82, - 0x625: 82, - 0x626: 68, - 0x627: 82, - 0x628: 68, - 0x629: 82, - 0x62a: 68, - 0x62b: 68, - 0x62c: 68, - 0x62d: 68, - 0x62e: 68, - 0x62f: 82, - 0x630: 82, - 0x631: 82, - 0x632: 82, - 0x633: 68, - 0x634: 68, - 0x635: 68, - 0x636: 68, - 0x637: 68, - 0x638: 68, - 0x639: 68, - 0x63a: 68, - 0x63b: 68, - 0x63c: 68, - 0x63d: 68, - 0x63e: 68, - 0x63f: 68, - 0x640: 67, - 0x641: 68, - 0x642: 68, - 0x643: 68, - 0x644: 68, - 0x645: 68, - 0x646: 68, - 0x647: 68, - 0x648: 82, - 0x649: 68, - 0x64a: 68, - 0x66e: 68, - 0x66f: 68, - 0x671: 82, - 0x672: 82, - 0x673: 82, - 0x674: 85, - 0x675: 82, - 0x676: 82, - 0x677: 82, - 0x678: 68, - 0x679: 68, - 0x67a: 68, - 0x67b: 68, - 0x67c: 68, - 0x67d: 68, - 0x67e: 68, - 0x67f: 68, - 0x680: 68, - 0x681: 68, - 0x682: 68, - 0x683: 68, - 0x684: 68, - 0x685: 68, - 0x686: 68, - 0x687: 68, - 0x688: 82, - 0x689: 82, - 0x68a: 82, - 0x68b: 82, - 0x68c: 82, - 0x68d: 82, - 0x68e: 82, - 0x68f: 82, - 0x690: 82, - 0x691: 82, - 0x692: 82, - 0x693: 82, - 0x694: 82, - 0x695: 82, - 0x696: 82, - 0x697: 82, - 0x698: 82, - 0x699: 82, - 0x69a: 68, - 0x69b: 68, - 0x69c: 68, - 0x69d: 68, - 0x69e: 68, - 0x69f: 68, - 0x6a0: 68, - 0x6a1: 68, - 0x6a2: 68, - 0x6a3: 68, - 0x6a4: 68, - 0x6a5: 68, - 0x6a6: 68, - 0x6a7: 68, - 0x6a8: 68, - 0x6a9: 68, - 0x6aa: 68, - 0x6ab: 68, - 0x6ac: 68, - 0x6ad: 68, - 0x6ae: 68, - 0x6af: 68, - 0x6b0: 68, - 0x6b1: 68, - 0x6b2: 68, - 0x6b3: 68, - 0x6b4: 68, - 0x6b5: 68, - 0x6b6: 68, - 0x6b7: 68, - 0x6b8: 68, - 0x6b9: 68, - 0x6ba: 68, - 0x6bb: 68, - 0x6bc: 68, - 0x6bd: 68, - 0x6be: 68, - 0x6bf: 68, - 0x6c0: 82, - 0x6c1: 68, - 0x6c2: 68, - 0x6c3: 82, - 0x6c4: 82, - 0x6c5: 82, - 0x6c6: 82, - 0x6c7: 82, - 0x6c8: 82, - 0x6c9: 82, - 0x6ca: 82, - 0x6cb: 82, - 0x6cc: 68, - 0x6cd: 82, - 0x6ce: 68, - 0x6cf: 82, - 0x6d0: 68, - 0x6d1: 68, - 0x6d2: 82, - 0x6d3: 82, - 0x6d5: 82, - 0x6dd: 85, - 0x6ee: 82, - 0x6ef: 82, - 0x6fa: 68, - 0x6fb: 68, - 0x6fc: 68, - 0x6ff: 68, - 0x710: 82, - 0x712: 68, - 0x713: 68, - 0x714: 68, - 0x715: 82, - 0x716: 82, - 0x717: 82, - 0x718: 82, - 0x719: 82, - 0x71a: 68, - 0x71b: 68, - 0x71c: 68, - 0x71d: 68, - 0x71e: 82, - 0x71f: 68, - 0x720: 68, - 0x721: 68, - 0x722: 68, - 0x723: 68, - 0x724: 68, - 0x725: 68, - 0x726: 68, - 0x727: 68, - 0x728: 82, - 0x729: 68, - 0x72a: 82, - 0x72b: 68, - 0x72c: 82, - 0x72d: 68, - 0x72e: 68, - 0x72f: 82, - 0x74d: 82, - 0x74e: 68, - 0x74f: 68, - 0x750: 68, - 0x751: 68, - 0x752: 68, - 0x753: 68, - 0x754: 68, - 0x755: 68, - 0x756: 68, - 0x757: 68, - 0x758: 68, - 0x759: 82, - 0x75a: 82, - 0x75b: 82, - 0x75c: 68, - 0x75d: 68, - 0x75e: 68, - 0x75f: 68, - 0x760: 68, - 0x761: 68, - 0x762: 68, - 0x763: 68, - 0x764: 68, - 0x765: 68, - 0x766: 68, - 0x767: 68, - 0x768: 68, - 0x769: 68, - 0x76a: 68, - 0x76b: 82, - 0x76c: 82, - 0x76d: 68, - 0x76e: 68, - 0x76f: 68, - 0x770: 68, - 0x771: 82, - 0x772: 68, - 0x773: 82, - 0x774: 82, - 0x775: 68, - 0x776: 68, - 0x777: 68, - 0x778: 82, - 0x779: 82, - 0x77a: 68, - 0x77b: 68, - 0x77c: 68, - 0x77d: 68, - 0x77e: 68, - 0x77f: 68, - 0x7ca: 68, - 0x7cb: 68, - 0x7cc: 68, - 0x7cd: 68, - 0x7ce: 68, - 0x7cf: 68, - 0x7d0: 68, - 0x7d1: 68, - 0x7d2: 68, - 0x7d3: 68, - 0x7d4: 68, - 0x7d5: 68, - 0x7d6: 68, - 0x7d7: 68, - 0x7d8: 68, - 0x7d9: 68, - 0x7da: 68, - 0x7db: 68, - 0x7dc: 68, - 0x7dd: 68, - 0x7de: 68, - 0x7df: 68, - 0x7e0: 68, - 0x7e1: 68, - 0x7e2: 68, - 0x7e3: 68, - 0x7e4: 68, - 0x7e5: 68, - 0x7e6: 68, - 0x7e7: 68, - 0x7e8: 68, - 0x7e9: 68, - 0x7ea: 68, - 0x7fa: 67, - 0x840: 82, - 0x841: 68, - 0x842: 68, - 0x843: 68, - 0x844: 68, - 0x845: 68, - 0x846: 82, - 0x847: 68, - 0x848: 68, - 0x849: 82, - 0x84a: 68, - 0x84b: 68, - 0x84c: 68, - 0x84d: 68, - 0x84e: 68, - 0x84f: 82, - 0x850: 68, - 0x851: 68, - 0x852: 68, - 0x853: 68, - 0x854: 82, - 0x855: 68, - 0x856: 85, - 0x857: 85, - 0x858: 85, - 0x8a0: 68, - 0x8a2: 68, - 0x8a3: 68, - 0x8a4: 68, - 0x8a5: 68, - 0x8a6: 68, - 0x8a7: 68, - 0x8a8: 68, - 0x8a9: 68, - 0x8aa: 82, - 0x8ab: 82, - 0x8ac: 82, - 0x1806: 85, - 0x1807: 68, - 0x180a: 67, - 0x180e: 85, - 0x1820: 68, - 0x1821: 68, - 0x1822: 68, - 0x1823: 68, - 0x1824: 68, - 0x1825: 68, - 0x1826: 68, - 0x1827: 68, - 0x1828: 68, - 0x1829: 68, - 0x182a: 68, - 0x182b: 68, - 0x182c: 68, - 0x182d: 68, - 0x182e: 68, - 0x182f: 68, - 0x1830: 68, - 0x1831: 68, - 0x1832: 68, - 0x1833: 68, - 0x1834: 68, - 0x1835: 68, - 0x1836: 68, - 0x1837: 68, - 0x1838: 68, - 0x1839: 68, - 0x183a: 68, - 0x183b: 68, - 0x183c: 68, - 0x183d: 68, - 0x183e: 68, - 0x183f: 68, - 0x1840: 68, - 0x1841: 68, - 0x1842: 68, - 0x1843: 68, - 0x1844: 68, - 0x1845: 68, - 0x1846: 68, - 0x1847: 68, - 0x1848: 68, - 0x1849: 68, - 0x184a: 68, - 0x184b: 68, - 0x184c: 68, - 0x184d: 68, - 0x184e: 68, - 0x184f: 68, - 0x1850: 68, - 0x1851: 68, - 0x1852: 68, - 0x1853: 68, - 0x1854: 68, - 0x1855: 68, - 0x1856: 68, - 0x1857: 68, - 0x1858: 68, - 0x1859: 68, - 0x185a: 68, - 0x185b: 68, - 0x185c: 68, - 0x185d: 68, - 0x185e: 68, - 0x185f: 68, - 0x1860: 68, - 0x1861: 68, - 0x1862: 68, - 0x1863: 68, - 0x1864: 68, - 0x1865: 68, - 0x1866: 68, - 0x1867: 68, - 0x1868: 68, - 0x1869: 68, - 0x186a: 68, - 0x186b: 68, - 0x186c: 68, - 0x186d: 68, - 0x186e: 68, - 0x186f: 68, - 0x1870: 68, - 0x1871: 68, - 0x1872: 68, - 0x1873: 68, - 0x1874: 68, - 0x1875: 68, - 0x1876: 68, - 0x1877: 68, - 0x1880: 85, - 0x1881: 85, - 0x1882: 85, - 0x1883: 85, - 0x1884: 85, - 0x1885: 85, - 0x1886: 85, - 0x1887: 68, - 0x1888: 68, - 0x1889: 68, - 0x188a: 68, - 0x188b: 68, - 0x188c: 68, - 0x188d: 68, - 0x188e: 68, - 0x188f: 68, - 0x1890: 68, - 0x1891: 68, - 0x1892: 68, - 0x1893: 68, - 0x1894: 68, - 0x1895: 68, - 0x1896: 68, - 0x1897: 68, - 0x1898: 68, - 0x1899: 68, - 0x189a: 68, - 0x189b: 68, - 0x189c: 68, - 0x189d: 68, - 0x189e: 68, - 0x189f: 68, - 0x18a0: 68, - 0x18a1: 68, - 0x18a2: 68, - 0x18a3: 68, - 0x18a4: 68, - 0x18a5: 68, - 0x18a6: 68, - 0x18a7: 68, - 0x18a8: 68, - 0x18aa: 68, - 0x200c: 85, - 0x200d: 67, - 0x2066: 85, - 0x2067: 85, - 0x2068: 85, - 0x2069: 85, - 0xa840: 68, - 0xa841: 68, - 0xa842: 68, - 0xa843: 68, - 0xa844: 68, - 0xa845: 68, - 0xa846: 68, - 0xa847: 68, - 0xa848: 68, - 0xa849: 68, - 0xa84a: 68, - 0xa84b: 68, - 0xa84c: 68, - 0xa84d: 68, - 0xa84e: 68, - 0xa84f: 68, - 0xa850: 68, - 0xa851: 68, - 0xa852: 68, - 0xa853: 68, - 0xa854: 68, - 0xa855: 68, - 0xa856: 68, - 0xa857: 68, - 0xa858: 68, - 0xa859: 68, - 0xa85a: 68, - 0xa85b: 68, - 0xa85c: 68, - 0xa85d: 68, - 0xa85e: 68, - 0xa85f: 68, - 0xa860: 68, - 0xa861: 68, - 0xa862: 68, - 0xa863: 68, - 0xa864: 68, - 0xa865: 68, - 0xa866: 68, - 0xa867: 68, - 0xa868: 68, - 0xa869: 68, - 0xa86a: 68, - 0xa86b: 68, - 0xa86c: 68, - 0xa86d: 68, - 0xa86e: 68, - 0xa86f: 68, - 0xa870: 68, - 0xa871: 68, - 0xa872: 76, - 0xa873: 85, -} -codepoint_classes = { - 'PVALID': ( - 0x2d0000002e, - 0x300000003a, - 0x610000007b, - 0xdf000000f7, - 0xf800000100, - 0x10100000102, - 0x10300000104, - 0x10500000106, - 0x10700000108, - 0x1090000010a, - 0x10b0000010c, - 0x10d0000010e, - 0x10f00000110, - 0x11100000112, - 0x11300000114, - 0x11500000116, - 0x11700000118, - 0x1190000011a, - 0x11b0000011c, - 0x11d0000011e, - 0x11f00000120, - 0x12100000122, - 0x12300000124, - 0x12500000126, - 0x12700000128, - 0x1290000012a, - 0x12b0000012c, - 0x12d0000012e, - 0x12f00000130, - 0x13100000132, - 0x13500000136, - 0x13700000139, - 0x13a0000013b, - 0x13c0000013d, - 0x13e0000013f, - 0x14200000143, - 0x14400000145, - 0x14600000147, - 0x14800000149, - 0x14b0000014c, - 0x14d0000014e, - 0x14f00000150, - 0x15100000152, - 0x15300000154, - 0x15500000156, - 0x15700000158, - 0x1590000015a, - 0x15b0000015c, - 0x15d0000015e, - 0x15f00000160, - 0x16100000162, - 0x16300000164, - 0x16500000166, - 0x16700000168, - 0x1690000016a, - 0x16b0000016c, - 0x16d0000016e, - 0x16f00000170, - 0x17100000172, - 0x17300000174, - 0x17500000176, - 0x17700000178, - 0x17a0000017b, - 0x17c0000017d, - 0x17e0000017f, - 0x18000000181, - 0x18300000184, - 0x18500000186, - 0x18800000189, - 0x18c0000018e, - 0x19200000193, - 0x19500000196, - 0x1990000019c, - 0x19e0000019f, - 0x1a1000001a2, - 0x1a3000001a4, - 0x1a5000001a6, - 0x1a8000001a9, - 0x1aa000001ac, - 0x1ad000001ae, - 0x1b0000001b1, - 0x1b4000001b5, - 0x1b6000001b7, - 0x1b9000001bc, - 0x1bd000001c4, - 0x1ce000001cf, - 0x1d0000001d1, - 0x1d2000001d3, - 0x1d4000001d5, - 0x1d6000001d7, - 0x1d8000001d9, - 0x1da000001db, - 0x1dc000001de, - 0x1df000001e0, - 0x1e1000001e2, - 0x1e3000001e4, - 0x1e5000001e6, - 0x1e7000001e8, - 0x1e9000001ea, - 0x1eb000001ec, - 0x1ed000001ee, - 0x1ef000001f1, - 0x1f5000001f6, - 0x1f9000001fa, - 0x1fb000001fc, - 0x1fd000001fe, - 0x1ff00000200, - 0x20100000202, - 0x20300000204, - 0x20500000206, - 0x20700000208, - 0x2090000020a, - 0x20b0000020c, - 0x20d0000020e, - 0x20f00000210, - 0x21100000212, - 0x21300000214, - 0x21500000216, - 0x21700000218, - 0x2190000021a, - 0x21b0000021c, - 0x21d0000021e, - 0x21f00000220, - 0x22100000222, - 0x22300000224, - 0x22500000226, - 0x22700000228, - 0x2290000022a, - 0x22b0000022c, - 0x22d0000022e, - 0x22f00000230, - 0x23100000232, - 0x2330000023a, - 0x23c0000023d, - 0x23f00000241, - 0x24200000243, - 0x24700000248, - 0x2490000024a, - 0x24b0000024c, - 0x24d0000024e, - 0x24f000002b0, - 0x2b9000002c2, - 0x2c6000002d2, - 0x2ec000002ed, - 0x2ee000002ef, - 0x30000000340, - 0x34200000343, - 0x3460000034f, - 0x35000000370, - 0x37100000372, - 0x37300000374, - 0x37700000378, - 0x37b0000037e, - 0x39000000391, - 0x3ac000003cf, - 0x3d7000003d8, - 0x3d9000003da, - 0x3db000003dc, - 0x3dd000003de, - 0x3df000003e0, - 0x3e1000003e2, - 0x3e3000003e4, - 0x3e5000003e6, - 0x3e7000003e8, - 0x3e9000003ea, - 0x3eb000003ec, - 0x3ed000003ee, - 0x3ef000003f0, - 0x3f3000003f4, - 0x3f8000003f9, - 0x3fb000003fd, - 0x43000000460, - 0x46100000462, - 0x46300000464, - 0x46500000466, - 0x46700000468, - 0x4690000046a, - 0x46b0000046c, - 0x46d0000046e, - 0x46f00000470, - 0x47100000472, - 0x47300000474, - 0x47500000476, - 0x47700000478, - 0x4790000047a, - 0x47b0000047c, - 0x47d0000047e, - 0x47f00000480, - 0x48100000482, - 0x48300000488, - 0x48b0000048c, - 0x48d0000048e, - 0x48f00000490, - 0x49100000492, - 0x49300000494, - 0x49500000496, - 0x49700000498, - 0x4990000049a, - 0x49b0000049c, - 0x49d0000049e, - 0x49f000004a0, - 0x4a1000004a2, - 0x4a3000004a4, - 0x4a5000004a6, - 0x4a7000004a8, - 0x4a9000004aa, - 0x4ab000004ac, - 0x4ad000004ae, - 0x4af000004b0, - 0x4b1000004b2, - 0x4b3000004b4, - 0x4b5000004b6, - 0x4b7000004b8, - 0x4b9000004ba, - 0x4bb000004bc, - 0x4bd000004be, - 0x4bf000004c0, - 0x4c2000004c3, - 0x4c4000004c5, - 0x4c6000004c7, - 0x4c8000004c9, - 0x4ca000004cb, - 0x4cc000004cd, - 0x4ce000004d0, - 0x4d1000004d2, - 0x4d3000004d4, - 0x4d5000004d6, - 0x4d7000004d8, - 0x4d9000004da, - 0x4db000004dc, - 0x4dd000004de, - 0x4df000004e0, - 0x4e1000004e2, - 0x4e3000004e4, - 0x4e5000004e6, - 0x4e7000004e8, - 0x4e9000004ea, - 0x4eb000004ec, - 0x4ed000004ee, - 0x4ef000004f0, - 0x4f1000004f2, - 0x4f3000004f4, - 0x4f5000004f6, - 0x4f7000004f8, - 0x4f9000004fa, - 0x4fb000004fc, - 0x4fd000004fe, - 0x4ff00000500, - 0x50100000502, - 0x50300000504, - 0x50500000506, - 0x50700000508, - 0x5090000050a, - 0x50b0000050c, - 0x50d0000050e, - 0x50f00000510, - 0x51100000512, - 0x51300000514, - 0x51500000516, - 0x51700000518, - 0x5190000051a, - 0x51b0000051c, - 0x51d0000051e, - 0x51f00000520, - 0x52100000522, - 0x52300000524, - 0x52500000526, - 0x52700000528, - 0x5590000055a, - 0x56100000587, - 0x591000005be, - 0x5bf000005c0, - 0x5c1000005c3, - 0x5c4000005c6, - 0x5c7000005c8, - 0x5d0000005eb, - 0x5f0000005f3, - 0x6100000061b, - 0x62000000640, - 0x64100000660, - 0x66e00000675, - 0x679000006d4, - 0x6d5000006dd, - 0x6df000006e9, - 0x6ea000006f0, - 0x6fa00000700, - 0x7100000074b, - 0x74d000007b2, - 0x7c0000007f6, - 0x8000000082e, - 0x8400000085c, - 0x8a0000008a1, - 0x8a2000008ad, - 0x8e4000008ff, - 0x90000000958, - 0x96000000964, - 0x96600000970, - 0x97100000978, - 0x97900000980, - 0x98100000984, - 0x9850000098d, - 0x98f00000991, - 0x993000009a9, - 0x9aa000009b1, - 0x9b2000009b3, - 0x9b6000009ba, - 0x9bc000009c5, - 0x9c7000009c9, - 0x9cb000009cf, - 0x9d7000009d8, - 0x9e0000009e4, - 0x9e6000009f2, - 0xa0100000a04, - 0xa0500000a0b, - 0xa0f00000a11, - 0xa1300000a29, - 0xa2a00000a31, - 0xa3200000a33, - 0xa3500000a36, - 0xa3800000a3a, - 0xa3c00000a3d, - 0xa3e00000a43, - 0xa4700000a49, - 0xa4b00000a4e, - 0xa5100000a52, - 0xa5c00000a5d, - 0xa6600000a76, - 0xa8100000a84, - 0xa8500000a8e, - 0xa8f00000a92, - 0xa9300000aa9, - 0xaaa00000ab1, - 0xab200000ab4, - 0xab500000aba, - 0xabc00000ac6, - 0xac700000aca, - 0xacb00000ace, - 0xad000000ad1, - 0xae000000ae4, - 0xae600000af0, - 0xb0100000b04, - 0xb0500000b0d, - 0xb0f00000b11, - 0xb1300000b29, - 0xb2a00000b31, - 0xb3200000b34, - 0xb3500000b3a, - 0xb3c00000b45, - 0xb4700000b49, - 0xb4b00000b4e, - 0xb5600000b58, - 0xb5f00000b64, - 0xb6600000b70, - 0xb7100000b72, - 0xb8200000b84, - 0xb8500000b8b, - 0xb8e00000b91, - 0xb9200000b96, - 0xb9900000b9b, - 0xb9c00000b9d, - 0xb9e00000ba0, - 0xba300000ba5, - 0xba800000bab, - 0xbae00000bba, - 0xbbe00000bc3, - 0xbc600000bc9, - 0xbca00000bce, - 0xbd000000bd1, - 0xbd700000bd8, - 0xbe600000bf0, - 0xc0100000c04, - 0xc0500000c0d, - 0xc0e00000c11, - 0xc1200000c29, - 0xc2a00000c34, - 0xc3500000c3a, - 0xc3d00000c45, - 0xc4600000c49, - 0xc4a00000c4e, - 0xc5500000c57, - 0xc5800000c5a, - 0xc6000000c64, - 0xc6600000c70, - 0xc8200000c84, - 0xc8500000c8d, - 0xc8e00000c91, - 0xc9200000ca9, - 0xcaa00000cb4, - 0xcb500000cba, - 0xcbc00000cc5, - 0xcc600000cc9, - 0xcca00000cce, - 0xcd500000cd7, - 0xcde00000cdf, - 0xce000000ce4, - 0xce600000cf0, - 0xcf100000cf3, - 0xd0200000d04, - 0xd0500000d0d, - 0xd0e00000d11, - 0xd1200000d3b, - 0xd3d00000d45, - 0xd4600000d49, - 0xd4a00000d4f, - 0xd5700000d58, - 0xd6000000d64, - 0xd6600000d70, - 0xd7a00000d80, - 0xd8200000d84, - 0xd8500000d97, - 0xd9a00000db2, - 0xdb300000dbc, - 0xdbd00000dbe, - 0xdc000000dc7, - 0xdca00000dcb, - 0xdcf00000dd5, - 0xdd600000dd7, - 0xdd800000de0, - 0xdf200000df4, - 0xe0100000e33, - 0xe3400000e3b, - 0xe4000000e4f, - 0xe5000000e5a, - 0xe8100000e83, - 0xe8400000e85, - 0xe8700000e89, - 0xe8a00000e8b, - 0xe8d00000e8e, - 0xe9400000e98, - 0xe9900000ea0, - 0xea100000ea4, - 0xea500000ea6, - 0xea700000ea8, - 0xeaa00000eac, - 0xead00000eb3, - 0xeb400000eba, - 0xebb00000ebe, - 0xec000000ec5, - 0xec600000ec7, - 0xec800000ece, - 0xed000000eda, - 0xede00000ee0, - 0xf0000000f01, - 0xf0b00000f0c, - 0xf1800000f1a, - 0xf2000000f2a, - 0xf3500000f36, - 0xf3700000f38, - 0xf3900000f3a, - 0xf3e00000f43, - 0xf4400000f48, - 0xf4900000f4d, - 0xf4e00000f52, - 0xf5300000f57, - 0xf5800000f5c, - 0xf5d00000f69, - 0xf6a00000f6d, - 0xf7100000f73, - 0xf7400000f75, - 0xf7a00000f81, - 0xf8200000f85, - 0xf8600000f93, - 0xf9400000f98, - 0xf9900000f9d, - 0xf9e00000fa2, - 0xfa300000fa7, - 0xfa800000fac, - 0xfad00000fb9, - 0xfba00000fbd, - 0xfc600000fc7, - 0x10000000104a, - 0x10500000109e, - 0x10d0000010fb, - 0x10fd00001100, - 0x120000001249, - 0x124a0000124e, - 0x125000001257, - 0x125800001259, - 0x125a0000125e, - 0x126000001289, - 0x128a0000128e, - 0x1290000012b1, - 0x12b2000012b6, - 0x12b8000012bf, - 0x12c0000012c1, - 0x12c2000012c6, - 0x12c8000012d7, - 0x12d800001311, - 0x131200001316, - 0x13180000135b, - 0x135d00001360, - 0x138000001390, - 0x13a0000013f5, - 0x14010000166d, - 0x166f00001680, - 0x16810000169b, - 0x16a0000016eb, - 0x17000000170d, - 0x170e00001715, - 0x172000001735, - 0x174000001754, - 0x17600000176d, - 0x176e00001771, - 0x177200001774, - 0x1780000017b4, - 0x17b6000017d4, - 0x17d7000017d8, - 0x17dc000017de, - 0x17e0000017ea, - 0x18100000181a, - 0x182000001878, - 0x1880000018ab, - 0x18b0000018f6, - 0x19000000191d, - 0x19200000192c, - 0x19300000193c, - 0x19460000196e, - 0x197000001975, - 0x1980000019ac, - 0x19b0000019ca, - 0x19d0000019da, - 0x1a0000001a1c, - 0x1a2000001a5f, - 0x1a6000001a7d, - 0x1a7f00001a8a, - 0x1a9000001a9a, - 0x1aa700001aa8, - 0x1b0000001b4c, - 0x1b5000001b5a, - 0x1b6b00001b74, - 0x1b8000001bf4, - 0x1c0000001c38, - 0x1c4000001c4a, - 0x1c4d00001c7e, - 0x1cd000001cd3, - 0x1cd400001cf7, - 0x1d0000001d2c, - 0x1d2f00001d30, - 0x1d3b00001d3c, - 0x1d4e00001d4f, - 0x1d6b00001d78, - 0x1d7900001d9b, - 0x1dc000001de7, - 0x1dfc00001e00, - 0x1e0100001e02, - 0x1e0300001e04, - 0x1e0500001e06, - 0x1e0700001e08, - 0x1e0900001e0a, - 0x1e0b00001e0c, - 0x1e0d00001e0e, - 0x1e0f00001e10, - 0x1e1100001e12, - 0x1e1300001e14, - 0x1e1500001e16, - 0x1e1700001e18, - 0x1e1900001e1a, - 0x1e1b00001e1c, - 0x1e1d00001e1e, - 0x1e1f00001e20, - 0x1e2100001e22, - 0x1e2300001e24, - 0x1e2500001e26, - 0x1e2700001e28, - 0x1e2900001e2a, - 0x1e2b00001e2c, - 0x1e2d00001e2e, - 0x1e2f00001e30, - 0x1e3100001e32, - 0x1e3300001e34, - 0x1e3500001e36, - 0x1e3700001e38, - 0x1e3900001e3a, - 0x1e3b00001e3c, - 0x1e3d00001e3e, - 0x1e3f00001e40, - 0x1e4100001e42, - 0x1e4300001e44, - 0x1e4500001e46, - 0x1e4700001e48, - 0x1e4900001e4a, - 0x1e4b00001e4c, - 0x1e4d00001e4e, - 0x1e4f00001e50, - 0x1e5100001e52, - 0x1e5300001e54, - 0x1e5500001e56, - 0x1e5700001e58, - 0x1e5900001e5a, - 0x1e5b00001e5c, - 0x1e5d00001e5e, - 0x1e5f00001e60, - 0x1e6100001e62, - 0x1e6300001e64, - 0x1e6500001e66, - 0x1e6700001e68, - 0x1e6900001e6a, - 0x1e6b00001e6c, - 0x1e6d00001e6e, - 0x1e6f00001e70, - 0x1e7100001e72, - 0x1e7300001e74, - 0x1e7500001e76, - 0x1e7700001e78, - 0x1e7900001e7a, - 0x1e7b00001e7c, - 0x1e7d00001e7e, - 0x1e7f00001e80, - 0x1e8100001e82, - 0x1e8300001e84, - 0x1e8500001e86, - 0x1e8700001e88, - 0x1e8900001e8a, - 0x1e8b00001e8c, - 0x1e8d00001e8e, - 0x1e8f00001e90, - 0x1e9100001e92, - 0x1e9300001e94, - 0x1e9500001e9a, - 0x1e9c00001e9e, - 0x1e9f00001ea0, - 0x1ea100001ea2, - 0x1ea300001ea4, - 0x1ea500001ea6, - 0x1ea700001ea8, - 0x1ea900001eaa, - 0x1eab00001eac, - 0x1ead00001eae, - 0x1eaf00001eb0, - 0x1eb100001eb2, - 0x1eb300001eb4, - 0x1eb500001eb6, - 0x1eb700001eb8, - 0x1eb900001eba, - 0x1ebb00001ebc, - 0x1ebd00001ebe, - 0x1ebf00001ec0, - 0x1ec100001ec2, - 0x1ec300001ec4, - 0x1ec500001ec6, - 0x1ec700001ec8, - 0x1ec900001eca, - 0x1ecb00001ecc, - 0x1ecd00001ece, - 0x1ecf00001ed0, - 0x1ed100001ed2, - 0x1ed300001ed4, - 0x1ed500001ed6, - 0x1ed700001ed8, - 0x1ed900001eda, - 0x1edb00001edc, - 0x1edd00001ede, - 0x1edf00001ee0, - 0x1ee100001ee2, - 0x1ee300001ee4, - 0x1ee500001ee6, - 0x1ee700001ee8, - 0x1ee900001eea, - 0x1eeb00001eec, - 0x1eed00001eee, - 0x1eef00001ef0, - 0x1ef100001ef2, - 0x1ef300001ef4, - 0x1ef500001ef6, - 0x1ef700001ef8, - 0x1ef900001efa, - 0x1efb00001efc, - 0x1efd00001efe, - 0x1eff00001f08, - 0x1f1000001f16, - 0x1f2000001f28, - 0x1f3000001f38, - 0x1f4000001f46, - 0x1f5000001f58, - 0x1f6000001f68, - 0x1f7000001f71, - 0x1f7200001f73, - 0x1f7400001f75, - 0x1f7600001f77, - 0x1f7800001f79, - 0x1f7a00001f7b, - 0x1f7c00001f7d, - 0x1fb000001fb2, - 0x1fb600001fb7, - 0x1fc600001fc7, - 0x1fd000001fd3, - 0x1fd600001fd8, - 0x1fe000001fe3, - 0x1fe400001fe8, - 0x1ff600001ff7, - 0x214e0000214f, - 0x218400002185, - 0x2c3000002c5f, - 0x2c6100002c62, - 0x2c6500002c67, - 0x2c6800002c69, - 0x2c6a00002c6b, - 0x2c6c00002c6d, - 0x2c7100002c72, - 0x2c7300002c75, - 0x2c7600002c7c, - 0x2c8100002c82, - 0x2c8300002c84, - 0x2c8500002c86, - 0x2c8700002c88, - 0x2c8900002c8a, - 0x2c8b00002c8c, - 0x2c8d00002c8e, - 0x2c8f00002c90, - 0x2c9100002c92, - 0x2c9300002c94, - 0x2c9500002c96, - 0x2c9700002c98, - 0x2c9900002c9a, - 0x2c9b00002c9c, - 0x2c9d00002c9e, - 0x2c9f00002ca0, - 0x2ca100002ca2, - 0x2ca300002ca4, - 0x2ca500002ca6, - 0x2ca700002ca8, - 0x2ca900002caa, - 0x2cab00002cac, - 0x2cad00002cae, - 0x2caf00002cb0, - 0x2cb100002cb2, - 0x2cb300002cb4, - 0x2cb500002cb6, - 0x2cb700002cb8, - 0x2cb900002cba, - 0x2cbb00002cbc, - 0x2cbd00002cbe, - 0x2cbf00002cc0, - 0x2cc100002cc2, - 0x2cc300002cc4, - 0x2cc500002cc6, - 0x2cc700002cc8, - 0x2cc900002cca, - 0x2ccb00002ccc, - 0x2ccd00002cce, - 0x2ccf00002cd0, - 0x2cd100002cd2, - 0x2cd300002cd4, - 0x2cd500002cd6, - 0x2cd700002cd8, - 0x2cd900002cda, - 0x2cdb00002cdc, - 0x2cdd00002cde, - 0x2cdf00002ce0, - 0x2ce100002ce2, - 0x2ce300002ce5, - 0x2cec00002ced, - 0x2cee00002cf2, - 0x2cf300002cf4, - 0x2d0000002d26, - 0x2d2700002d28, - 0x2d2d00002d2e, - 0x2d3000002d68, - 0x2d7f00002d97, - 0x2da000002da7, - 0x2da800002daf, - 0x2db000002db7, - 0x2db800002dbf, - 0x2dc000002dc7, - 0x2dc800002dcf, - 0x2dd000002dd7, - 0x2dd800002ddf, - 0x2de000002e00, - 0x2e2f00002e30, - 0x300500003008, - 0x302a0000302e, - 0x303c0000303d, - 0x304100003097, - 0x30990000309b, - 0x309d0000309f, - 0x30a1000030fb, - 0x30fc000030ff, - 0x31050000312e, - 0x31a0000031bb, - 0x31f000003200, - 0x340000004db6, - 0x4e0000009fcd, - 0xa0000000a48d, - 0xa4d00000a4fe, - 0xa5000000a60d, - 0xa6100000a62c, - 0xa6410000a642, - 0xa6430000a644, - 0xa6450000a646, - 0xa6470000a648, - 0xa6490000a64a, - 0xa64b0000a64c, - 0xa64d0000a64e, - 0xa64f0000a650, - 0xa6510000a652, - 0xa6530000a654, - 0xa6550000a656, - 0xa6570000a658, - 0xa6590000a65a, - 0xa65b0000a65c, - 0xa65d0000a65e, - 0xa65f0000a660, - 0xa6610000a662, - 0xa6630000a664, - 0xa6650000a666, - 0xa6670000a668, - 0xa6690000a66a, - 0xa66b0000a66c, - 0xa66d0000a670, - 0xa6740000a67e, - 0xa67f0000a680, - 0xa6810000a682, - 0xa6830000a684, - 0xa6850000a686, - 0xa6870000a688, - 0xa6890000a68a, - 0xa68b0000a68c, - 0xa68d0000a68e, - 0xa68f0000a690, - 0xa6910000a692, - 0xa6930000a694, - 0xa6950000a696, - 0xa6970000a698, - 0xa69f0000a6e6, - 0xa6f00000a6f2, - 0xa7170000a720, - 0xa7230000a724, - 0xa7250000a726, - 0xa7270000a728, - 0xa7290000a72a, - 0xa72b0000a72c, - 0xa72d0000a72e, - 0xa72f0000a732, - 0xa7330000a734, - 0xa7350000a736, - 0xa7370000a738, - 0xa7390000a73a, - 0xa73b0000a73c, - 0xa73d0000a73e, - 0xa73f0000a740, - 0xa7410000a742, - 0xa7430000a744, - 0xa7450000a746, - 0xa7470000a748, - 0xa7490000a74a, - 0xa74b0000a74c, - 0xa74d0000a74e, - 0xa74f0000a750, - 0xa7510000a752, - 0xa7530000a754, - 0xa7550000a756, - 0xa7570000a758, - 0xa7590000a75a, - 0xa75b0000a75c, - 0xa75d0000a75e, - 0xa75f0000a760, - 0xa7610000a762, - 0xa7630000a764, - 0xa7650000a766, - 0xa7670000a768, - 0xa7690000a76a, - 0xa76b0000a76c, - 0xa76d0000a76e, - 0xa76f0000a770, - 0xa7710000a779, - 0xa77a0000a77b, - 0xa77c0000a77d, - 0xa77f0000a780, - 0xa7810000a782, - 0xa7830000a784, - 0xa7850000a786, - 0xa7870000a789, - 0xa78c0000a78d, - 0xa78e0000a78f, - 0xa7910000a792, - 0xa7930000a794, - 0xa7a10000a7a2, - 0xa7a30000a7a4, - 0xa7a50000a7a6, - 0xa7a70000a7a8, - 0xa7a90000a7aa, - 0xa7fa0000a828, - 0xa8400000a874, - 0xa8800000a8c5, - 0xa8d00000a8da, - 0xa8e00000a8f8, - 0xa8fb0000a8fc, - 0xa9000000a92e, - 0xa9300000a954, - 0xa9800000a9c1, - 0xa9cf0000a9da, - 0xaa000000aa37, - 0xaa400000aa4e, - 0xaa500000aa5a, - 0xaa600000aa77, - 0xaa7a0000aa7c, - 0xaa800000aac3, - 0xaadb0000aade, - 0xaae00000aaf0, - 0xaaf20000aaf7, - 0xab010000ab07, - 0xab090000ab0f, - 0xab110000ab17, - 0xab200000ab27, - 0xab280000ab2f, - 0xabc00000abeb, - 0xabec0000abee, - 0xabf00000abfa, - 0xac000000d7a4, - 0xfa0e0000fa10, - 0xfa110000fa12, - 0xfa130000fa15, - 0xfa1f0000fa20, - 0xfa210000fa22, - 0xfa230000fa25, - 0xfa270000fa2a, - 0xfb1e0000fb1f, - 0xfe200000fe27, - 0xfe730000fe74, - 0x100000001000c, - 0x1000d00010027, - 0x100280001003b, - 0x1003c0001003e, - 0x1003f0001004e, - 0x100500001005e, - 0x10080000100fb, - 0x101fd000101fe, - 0x102800001029d, - 0x102a0000102d1, - 0x103000001031f, - 0x1033000010341, - 0x103420001034a, - 0x103800001039e, - 0x103a0000103c4, - 0x103c8000103d0, - 0x104280001049e, - 0x104a0000104aa, - 0x1080000010806, - 0x1080800010809, - 0x1080a00010836, - 0x1083700010839, - 0x1083c0001083d, - 0x1083f00010856, - 0x1090000010916, - 0x109200001093a, - 0x10980000109b8, - 0x109be000109c0, - 0x10a0000010a04, - 0x10a0500010a07, - 0x10a0c00010a14, - 0x10a1500010a18, - 0x10a1900010a34, - 0x10a3800010a3b, - 0x10a3f00010a40, - 0x10a6000010a7d, - 0x10b0000010b36, - 0x10b4000010b56, - 0x10b6000010b73, - 0x10c0000010c49, - 0x1100000011047, - 0x1106600011070, - 0x11080000110bb, - 0x110d0000110e9, - 0x110f0000110fa, - 0x1110000011135, - 0x1113600011140, - 0x11180000111c5, - 0x111d0000111da, - 0x11680000116b8, - 0x116c0000116ca, - 0x120000001236f, - 0x130000001342f, - 0x1680000016a39, - 0x16f0000016f45, - 0x16f5000016f7f, - 0x16f8f00016fa0, - 0x1b0000001b002, - 0x200000002a6d7, - 0x2a7000002b735, - 0x2b7400002b81e, - ), - 'CONTEXTJ': ( - 0x200c0000200e, - ), - 'CONTEXTO': ( - 0xb7000000b8, - 0x37500000376, - 0x5f3000005f5, - 0x6600000066a, - 0x6f0000006fa, - 0x30fb000030fc, - ), -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/intranges.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/intranges.py deleted file mode 100644 index fa8a735..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/intranges.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Given a list of integers, made up of (hopefully) a small number of long runs -of consecutive integers, compute a representation of the form -((start1, end1), (start2, end2) ...). Then answer the question "was x present -in the original list?" in time O(log(# runs)). -""" - -import bisect - -def intranges_from_list(list_): - """Represent a list of integers as a sequence of ranges: - ((start_0, end_0), (start_1, end_1), ...), such that the original - integers are exactly those x such that start_i <= x < end_i for some i. - - Ranges are encoded as single integers (start << 32 | end), not as tuples. - """ - - sorted_list = sorted(list_) - ranges = [] - last_write = -1 - for i in range(len(sorted_list)): - if i+1 < len(sorted_list): - if sorted_list[i] == sorted_list[i+1]-1: - continue - current_range = sorted_list[last_write+1:i+1] - ranges.append(_encode_range(current_range[0], current_range[-1] + 1)) - last_write = i - - return tuple(ranges) - -def _encode_range(start, end): - return (start << 32) | end - -def _decode_range(r): - return (r >> 32), (r & ((1 << 32) - 1)) - - -def intranges_contain(int_, ranges): - """Determine if `int_` falls into one of the ranges in `ranges`.""" - tuple_ = _encode_range(int_, 0) - pos = bisect.bisect_left(ranges, tuple_) - # we could be immediately ahead of a tuple (start, end) - # with start < int_ <= end - if pos > 0: - left, right = _decode_range(ranges[pos-1]) - if left <= int_ < right: - return True - # or we could be immediately behind a tuple (int_, end) - if pos < len(ranges): - left, _ = _decode_range(ranges[pos]) - if left == int_: - return True - return False diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/package_data.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/package_data.py deleted file mode 100644 index fc33139..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/package_data.py +++ /dev/null @@ -1,2 +0,0 @@ -__version__ = '2.6' - diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/uts46data.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/uts46data.py deleted file mode 100644 index f9b3236..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/idna/uts46data.py +++ /dev/null @@ -1,7634 +0,0 @@ -# This file is automatically generated by tools/idna-data -# vim: set fileencoding=utf-8 : - -"""IDNA Mapping Table from UTS46.""" - - -__version__ = "6.3.0" -def _seg_0(): - return [ - (0x0, '3'), - (0x1, '3'), - (0x2, '3'), - (0x3, '3'), - (0x4, '3'), - (0x5, '3'), - (0x6, '3'), - (0x7, '3'), - (0x8, '3'), - (0x9, '3'), - (0xA, '3'), - (0xB, '3'), - (0xC, '3'), - (0xD, '3'), - (0xE, '3'), - (0xF, '3'), - (0x10, '3'), - (0x11, '3'), - (0x12, '3'), - (0x13, '3'), - (0x14, '3'), - (0x15, '3'), - (0x16, '3'), - (0x17, '3'), - (0x18, '3'), - (0x19, '3'), - (0x1A, '3'), - (0x1B, '3'), - (0x1C, '3'), - (0x1D, '3'), - (0x1E, '3'), - (0x1F, '3'), - (0x20, '3'), - (0x21, '3'), - (0x22, '3'), - (0x23, '3'), - (0x24, '3'), - (0x25, '3'), - (0x26, '3'), - (0x27, '3'), - (0x28, '3'), - (0x29, '3'), - (0x2A, '3'), - (0x2B, '3'), - (0x2C, '3'), - (0x2D, 'V'), - (0x2E, 'V'), - (0x2F, '3'), - (0x30, 'V'), - (0x31, 'V'), - (0x32, 'V'), - (0x33, 'V'), - (0x34, 'V'), - (0x35, 'V'), - (0x36, 'V'), - (0x37, 'V'), - (0x38, 'V'), - (0x39, 'V'), - (0x3A, '3'), - (0x3B, '3'), - (0x3C, '3'), - (0x3D, '3'), - (0x3E, '3'), - (0x3F, '3'), - (0x40, '3'), - (0x41, 'M', u'a'), - (0x42, 'M', u'b'), - (0x43, 'M', u'c'), - (0x44, 'M', u'd'), - (0x45, 'M', u'e'), - (0x46, 'M', u'f'), - (0x47, 'M', u'g'), - (0x48, 'M', u'h'), - (0x49, 'M', u'i'), - (0x4A, 'M', u'j'), - (0x4B, 'M', u'k'), - (0x4C, 'M', u'l'), - (0x4D, 'M', u'm'), - (0x4E, 'M', u'n'), - (0x4F, 'M', u'o'), - (0x50, 'M', u'p'), - (0x51, 'M', u'q'), - (0x52, 'M', u'r'), - (0x53, 'M', u's'), - (0x54, 'M', u't'), - (0x55, 'M', u'u'), - (0x56, 'M', u'v'), - (0x57, 'M', u'w'), - (0x58, 'M', u'x'), - (0x59, 'M', u'y'), - (0x5A, 'M', u'z'), - (0x5B, '3'), - (0x5C, '3'), - (0x5D, '3'), - (0x5E, '3'), - (0x5F, '3'), - (0x60, '3'), - (0x61, 'V'), - (0x62, 'V'), - (0x63, 'V'), - ] - -def _seg_1(): - return [ - (0x64, 'V'), - (0x65, 'V'), - (0x66, 'V'), - (0x67, 'V'), - (0x68, 'V'), - (0x69, 'V'), - (0x6A, 'V'), - (0x6B, 'V'), - (0x6C, 'V'), - (0x6D, 'V'), - (0x6E, 'V'), - (0x6F, 'V'), - (0x70, 'V'), - (0x71, 'V'), - (0x72, 'V'), - (0x73, 'V'), - (0x74, 'V'), - (0x75, 'V'), - (0x76, 'V'), - (0x77, 'V'), - (0x78, 'V'), - (0x79, 'V'), - (0x7A, 'V'), - (0x7B, '3'), - (0x7C, '3'), - (0x7D, '3'), - (0x7E, '3'), - (0x7F, '3'), - (0x80, 'X'), - (0x81, 'X'), - (0x82, 'X'), - (0x83, 'X'), - (0x84, 'X'), - (0x85, 'X'), - (0x86, 'X'), - (0x87, 'X'), - (0x88, 'X'), - (0x89, 'X'), - (0x8A, 'X'), - (0x8B, 'X'), - (0x8C, 'X'), - (0x8D, 'X'), - (0x8E, 'X'), - (0x8F, 'X'), - (0x90, 'X'), - (0x91, 'X'), - (0x92, 'X'), - (0x93, 'X'), - (0x94, 'X'), - (0x95, 'X'), - (0x96, 'X'), - (0x97, 'X'), - (0x98, 'X'), - (0x99, 'X'), - (0x9A, 'X'), - (0x9B, 'X'), - (0x9C, 'X'), - (0x9D, 'X'), - (0x9E, 'X'), - (0x9F, 'X'), - (0xA0, '3', u' '), - (0xA1, 'V'), - (0xA2, 'V'), - (0xA3, 'V'), - (0xA4, 'V'), - (0xA5, 'V'), - (0xA6, 'V'), - (0xA7, 'V'), - (0xA8, '3', u' ̈'), - (0xA9, 'V'), - (0xAA, 'M', u'a'), - (0xAB, 'V'), - (0xAC, 'V'), - (0xAD, 'I'), - (0xAE, 'V'), - (0xAF, '3', u' ̄'), - (0xB0, 'V'), - (0xB1, 'V'), - (0xB2, 'M', u'2'), - (0xB3, 'M', u'3'), - (0xB4, '3', u' ́'), - (0xB5, 'M', u'μ'), - (0xB6, 'V'), - (0xB7, 'V'), - (0xB8, '3', u' ̧'), - (0xB9, 'M', u'1'), - (0xBA, 'M', u'o'), - (0xBB, 'V'), - (0xBC, 'M', u'1⁄4'), - (0xBD, 'M', u'1⁄2'), - (0xBE, 'M', u'3⁄4'), - (0xBF, 'V'), - (0xC0, 'M', u'à'), - (0xC1, 'M', u'á'), - (0xC2, 'M', u'â'), - (0xC3, 'M', u'ã'), - (0xC4, 'M', u'ä'), - (0xC5, 'M', u'å'), - (0xC6, 'M', u'æ'), - (0xC7, 'M', u'ç'), - ] - -def _seg_2(): - return [ - (0xC8, 'M', u'è'), - (0xC9, 'M', u'é'), - (0xCA, 'M', u'ê'), - (0xCB, 'M', u'ë'), - (0xCC, 'M', u'ì'), - (0xCD, 'M', u'í'), - (0xCE, 'M', u'î'), - (0xCF, 'M', u'ï'), - (0xD0, 'M', u'ð'), - (0xD1, 'M', u'ñ'), - (0xD2, 'M', u'ò'), - (0xD3, 'M', u'ó'), - (0xD4, 'M', u'ô'), - (0xD5, 'M', u'õ'), - (0xD6, 'M', u'ö'), - (0xD7, 'V'), - (0xD8, 'M', u'ø'), - (0xD9, 'M', u'ù'), - (0xDA, 'M', u'ú'), - (0xDB, 'M', u'û'), - (0xDC, 'M', u'ü'), - (0xDD, 'M', u'ý'), - (0xDE, 'M', u'þ'), - (0xDF, 'D', u'ss'), - (0xE0, 'V'), - (0xE1, 'V'), - (0xE2, 'V'), - (0xE3, 'V'), - (0xE4, 'V'), - (0xE5, 'V'), - (0xE6, 'V'), - (0xE7, 'V'), - (0xE8, 'V'), - (0xE9, 'V'), - (0xEA, 'V'), - (0xEB, 'V'), - (0xEC, 'V'), - (0xED, 'V'), - (0xEE, 'V'), - (0xEF, 'V'), - (0xF0, 'V'), - (0xF1, 'V'), - (0xF2, 'V'), - (0xF3, 'V'), - (0xF4, 'V'), - (0xF5, 'V'), - (0xF6, 'V'), - (0xF7, 'V'), - (0xF8, 'V'), - (0xF9, 'V'), - (0xFA, 'V'), - (0xFB, 'V'), - (0xFC, 'V'), - (0xFD, 'V'), - (0xFE, 'V'), - (0xFF, 'V'), - (0x100, 'M', u'ā'), - (0x101, 'V'), - (0x102, 'M', u'ă'), - (0x103, 'V'), - (0x104, 'M', u'ą'), - (0x105, 'V'), - (0x106, 'M', u'ć'), - (0x107, 'V'), - (0x108, 'M', u'ĉ'), - (0x109, 'V'), - (0x10A, 'M', u'ċ'), - (0x10B, 'V'), - (0x10C, 'M', u'č'), - (0x10D, 'V'), - (0x10E, 'M', u'ď'), - (0x10F, 'V'), - (0x110, 'M', u'đ'), - (0x111, 'V'), - (0x112, 'M', u'ē'), - (0x113, 'V'), - (0x114, 'M', u'ĕ'), - (0x115, 'V'), - (0x116, 'M', u'ė'), - (0x117, 'V'), - (0x118, 'M', u'ę'), - (0x119, 'V'), - (0x11A, 'M', u'ě'), - (0x11B, 'V'), - (0x11C, 'M', u'ĝ'), - (0x11D, 'V'), - (0x11E, 'M', u'ğ'), - (0x11F, 'V'), - (0x120, 'M', u'ġ'), - (0x121, 'V'), - (0x122, 'M', u'ģ'), - (0x123, 'V'), - (0x124, 'M', u'ĥ'), - (0x125, 'V'), - (0x126, 'M', u'ħ'), - (0x127, 'V'), - (0x128, 'M', u'ĩ'), - (0x129, 'V'), - (0x12A, 'M', u'ī'), - (0x12B, 'V'), - ] - -def _seg_3(): - return [ - (0x12C, 'M', u'ĭ'), - (0x12D, 'V'), - (0x12E, 'M', u'į'), - (0x12F, 'V'), - (0x130, 'M', u'i̇'), - (0x131, 'V'), - (0x132, 'M', u'ij'), - (0x134, 'M', u'ĵ'), - (0x135, 'V'), - (0x136, 'M', u'ķ'), - (0x137, 'V'), - (0x139, 'M', u'ĺ'), - (0x13A, 'V'), - (0x13B, 'M', u'ļ'), - (0x13C, 'V'), - (0x13D, 'M', u'ľ'), - (0x13E, 'V'), - (0x13F, 'M', u'l·'), - (0x141, 'M', u'ł'), - (0x142, 'V'), - (0x143, 'M', u'ń'), - (0x144, 'V'), - (0x145, 'M', u'ņ'), - (0x146, 'V'), - (0x147, 'M', u'ň'), - (0x148, 'V'), - (0x149, 'M', u'ʼn'), - (0x14A, 'M', u'ŋ'), - (0x14B, 'V'), - (0x14C, 'M', u'ō'), - (0x14D, 'V'), - (0x14E, 'M', u'ŏ'), - (0x14F, 'V'), - (0x150, 'M', u'ő'), - (0x151, 'V'), - (0x152, 'M', u'œ'), - (0x153, 'V'), - (0x154, 'M', u'ŕ'), - (0x155, 'V'), - (0x156, 'M', u'ŗ'), - (0x157, 'V'), - (0x158, 'M', u'ř'), - (0x159, 'V'), - (0x15A, 'M', u'ś'), - (0x15B, 'V'), - (0x15C, 'M', u'ŝ'), - (0x15D, 'V'), - (0x15E, 'M', u'ş'), - (0x15F, 'V'), - (0x160, 'M', u'š'), - (0x161, 'V'), - (0x162, 'M', u'ţ'), - (0x163, 'V'), - (0x164, 'M', u'ť'), - (0x165, 'V'), - (0x166, 'M', u'ŧ'), - (0x167, 'V'), - (0x168, 'M', u'ũ'), - (0x169, 'V'), - (0x16A, 'M', u'ū'), - (0x16B, 'V'), - (0x16C, 'M', u'ŭ'), - (0x16D, 'V'), - (0x16E, 'M', u'ů'), - (0x16F, 'V'), - (0x170, 'M', u'ű'), - (0x171, 'V'), - (0x172, 'M', u'ų'), - (0x173, 'V'), - (0x174, 'M', u'ŵ'), - (0x175, 'V'), - (0x176, 'M', u'ŷ'), - (0x177, 'V'), - (0x178, 'M', u'ÿ'), - (0x179, 'M', u'ź'), - (0x17A, 'V'), - (0x17B, 'M', u'ż'), - (0x17C, 'V'), - (0x17D, 'M', u'ž'), - (0x17E, 'V'), - (0x17F, 'M', u's'), - (0x180, 'V'), - (0x181, 'M', u'ɓ'), - (0x182, 'M', u'ƃ'), - (0x183, 'V'), - (0x184, 'M', u'ƅ'), - (0x185, 'V'), - (0x186, 'M', u'ɔ'), - (0x187, 'M', u'ƈ'), - (0x188, 'V'), - (0x189, 'M', u'ɖ'), - (0x18A, 'M', u'ɗ'), - (0x18B, 'M', u'ƌ'), - (0x18C, 'V'), - (0x18E, 'M', u'ǝ'), - (0x18F, 'M', u'ə'), - (0x190, 'M', u'ɛ'), - (0x191, 'M', u'ƒ'), - (0x192, 'V'), - (0x193, 'M', u'ɠ'), - ] - -def _seg_4(): - return [ - (0x194, 'M', u'ɣ'), - (0x195, 'V'), - (0x196, 'M', u'ɩ'), - (0x197, 'M', u'ɨ'), - (0x198, 'M', u'ƙ'), - (0x199, 'V'), - (0x19C, 'M', u'ɯ'), - (0x19D, 'M', u'ɲ'), - (0x19E, 'V'), - (0x19F, 'M', u'ɵ'), - (0x1A0, 'M', u'ơ'), - (0x1A1, 'V'), - (0x1A2, 'M', u'ƣ'), - (0x1A3, 'V'), - (0x1A4, 'M', u'ƥ'), - (0x1A5, 'V'), - (0x1A6, 'M', u'ʀ'), - (0x1A7, 'M', u'ƨ'), - (0x1A8, 'V'), - (0x1A9, 'M', u'ʃ'), - (0x1AA, 'V'), - (0x1AC, 'M', u'ƭ'), - (0x1AD, 'V'), - (0x1AE, 'M', u'ʈ'), - (0x1AF, 'M', u'ư'), - (0x1B0, 'V'), - (0x1B1, 'M', u'ʊ'), - (0x1B2, 'M', u'ʋ'), - (0x1B3, 'M', u'ƴ'), - (0x1B4, 'V'), - (0x1B5, 'M', u'ƶ'), - (0x1B6, 'V'), - (0x1B7, 'M', u'ʒ'), - (0x1B8, 'M', u'ƹ'), - (0x1B9, 'V'), - (0x1BC, 'M', u'ƽ'), - (0x1BD, 'V'), - (0x1C4, 'M', u'dž'), - (0x1C7, 'M', u'lj'), - (0x1CA, 'M', u'nj'), - (0x1CD, 'M', u'ǎ'), - (0x1CE, 'V'), - (0x1CF, 'M', u'ǐ'), - (0x1D0, 'V'), - (0x1D1, 'M', u'ǒ'), - (0x1D2, 'V'), - (0x1D3, 'M', u'ǔ'), - (0x1D4, 'V'), - (0x1D5, 'M', u'ǖ'), - (0x1D6, 'V'), - (0x1D7, 'M', u'ǘ'), - (0x1D8, 'V'), - (0x1D9, 'M', u'ǚ'), - (0x1DA, 'V'), - (0x1DB, 'M', u'ǜ'), - (0x1DC, 'V'), - (0x1DE, 'M', u'ǟ'), - (0x1DF, 'V'), - (0x1E0, 'M', u'ǡ'), - (0x1E1, 'V'), - (0x1E2, 'M', u'ǣ'), - (0x1E3, 'V'), - (0x1E4, 'M', u'ǥ'), - (0x1E5, 'V'), - (0x1E6, 'M', u'ǧ'), - (0x1E7, 'V'), - (0x1E8, 'M', u'ǩ'), - (0x1E9, 'V'), - (0x1EA, 'M', u'ǫ'), - (0x1EB, 'V'), - (0x1EC, 'M', u'ǭ'), - (0x1ED, 'V'), - (0x1EE, 'M', u'ǯ'), - (0x1EF, 'V'), - (0x1F1, 'M', u'dz'), - (0x1F4, 'M', u'ǵ'), - (0x1F5, 'V'), - (0x1F6, 'M', u'ƕ'), - (0x1F7, 'M', u'ƿ'), - (0x1F8, 'M', u'ǹ'), - (0x1F9, 'V'), - (0x1FA, 'M', u'ǻ'), - (0x1FB, 'V'), - (0x1FC, 'M', u'ǽ'), - (0x1FD, 'V'), - (0x1FE, 'M', u'ǿ'), - (0x1FF, 'V'), - (0x200, 'M', u'ȁ'), - (0x201, 'V'), - (0x202, 'M', u'ȃ'), - (0x203, 'V'), - (0x204, 'M', u'ȅ'), - (0x205, 'V'), - (0x206, 'M', u'ȇ'), - (0x207, 'V'), - (0x208, 'M', u'ȉ'), - (0x209, 'V'), - (0x20A, 'M', u'ȋ'), - (0x20B, 'V'), - (0x20C, 'M', u'ȍ'), - ] - -def _seg_5(): - return [ - (0x20D, 'V'), - (0x20E, 'M', u'ȏ'), - (0x20F, 'V'), - (0x210, 'M', u'ȑ'), - (0x211, 'V'), - (0x212, 'M', u'ȓ'), - (0x213, 'V'), - (0x214, 'M', u'ȕ'), - (0x215, 'V'), - (0x216, 'M', u'ȗ'), - (0x217, 'V'), - (0x218, 'M', u'ș'), - (0x219, 'V'), - (0x21A, 'M', u'ț'), - (0x21B, 'V'), - (0x21C, 'M', u'ȝ'), - (0x21D, 'V'), - (0x21E, 'M', u'ȟ'), - (0x21F, 'V'), - (0x220, 'M', u'ƞ'), - (0x221, 'V'), - (0x222, 'M', u'ȣ'), - (0x223, 'V'), - (0x224, 'M', u'ȥ'), - (0x225, 'V'), - (0x226, 'M', u'ȧ'), - (0x227, 'V'), - (0x228, 'M', u'ȩ'), - (0x229, 'V'), - (0x22A, 'M', u'ȫ'), - (0x22B, 'V'), - (0x22C, 'M', u'ȭ'), - (0x22D, 'V'), - (0x22E, 'M', u'ȯ'), - (0x22F, 'V'), - (0x230, 'M', u'ȱ'), - (0x231, 'V'), - (0x232, 'M', u'ȳ'), - (0x233, 'V'), - (0x23A, 'M', u'ⱥ'), - (0x23B, 'M', u'ȼ'), - (0x23C, 'V'), - (0x23D, 'M', u'ƚ'), - (0x23E, 'M', u'ⱦ'), - (0x23F, 'V'), - (0x241, 'M', u'ɂ'), - (0x242, 'V'), - (0x243, 'M', u'ƀ'), - (0x244, 'M', u'ʉ'), - (0x245, 'M', u'ʌ'), - (0x246, 'M', u'ɇ'), - (0x247, 'V'), - (0x248, 'M', u'ɉ'), - (0x249, 'V'), - (0x24A, 'M', u'ɋ'), - (0x24B, 'V'), - (0x24C, 'M', u'ɍ'), - (0x24D, 'V'), - (0x24E, 'M', u'ɏ'), - (0x24F, 'V'), - (0x2B0, 'M', u'h'), - (0x2B1, 'M', u'ɦ'), - (0x2B2, 'M', u'j'), - (0x2B3, 'M', u'r'), - (0x2B4, 'M', u'ɹ'), - (0x2B5, 'M', u'ɻ'), - (0x2B6, 'M', u'ʁ'), - (0x2B7, 'M', u'w'), - (0x2B8, 'M', u'y'), - (0x2B9, 'V'), - (0x2D8, '3', u' ̆'), - (0x2D9, '3', u' ̇'), - (0x2DA, '3', u' ̊'), - (0x2DB, '3', u' ̨'), - (0x2DC, '3', u' ̃'), - (0x2DD, '3', u' ̋'), - (0x2DE, 'V'), - (0x2E0, 'M', u'ɣ'), - (0x2E1, 'M', u'l'), - (0x2E2, 'M', u's'), - (0x2E3, 'M', u'x'), - (0x2E4, 'M', u'ʕ'), - (0x2E5, 'V'), - (0x340, 'M', u'̀'), - (0x341, 'M', u'́'), - (0x342, 'V'), - (0x343, 'M', u'̓'), - (0x344, 'M', u'̈́'), - (0x345, 'M', u'ι'), - (0x346, 'V'), - (0x34F, 'I'), - (0x350, 'V'), - (0x370, 'M', u'ͱ'), - (0x371, 'V'), - (0x372, 'M', u'ͳ'), - (0x373, 'V'), - (0x374, 'M', u'ʹ'), - (0x375, 'V'), - (0x376, 'M', u'ͷ'), - (0x377, 'V'), - ] - -def _seg_6(): - return [ - (0x378, 'X'), - (0x37A, '3', u' ι'), - (0x37B, 'V'), - (0x37E, '3', u';'), - (0x37F, 'X'), - (0x384, '3', u' ́'), - (0x385, '3', u' ̈́'), - (0x386, 'M', u'ά'), - (0x387, 'M', u'·'), - (0x388, 'M', u'έ'), - (0x389, 'M', u'ή'), - (0x38A, 'M', u'ί'), - (0x38B, 'X'), - (0x38C, 'M', u'ό'), - (0x38D, 'X'), - (0x38E, 'M', u'ύ'), - (0x38F, 'M', u'ώ'), - (0x390, 'V'), - (0x391, 'M', u'α'), - (0x392, 'M', u'β'), - (0x393, 'M', u'γ'), - (0x394, 'M', u'δ'), - (0x395, 'M', u'ε'), - (0x396, 'M', u'ζ'), - (0x397, 'M', u'η'), - (0x398, 'M', u'θ'), - (0x399, 'M', u'ι'), - (0x39A, 'M', u'κ'), - (0x39B, 'M', u'λ'), - (0x39C, 'M', u'μ'), - (0x39D, 'M', u'ν'), - (0x39E, 'M', u'ξ'), - (0x39F, 'M', u'ο'), - (0x3A0, 'M', u'π'), - (0x3A1, 'M', u'ρ'), - (0x3A2, 'X'), - (0x3A3, 'M', u'σ'), - (0x3A4, 'M', u'τ'), - (0x3A5, 'M', u'υ'), - (0x3A6, 'M', u'φ'), - (0x3A7, 'M', u'χ'), - (0x3A8, 'M', u'ψ'), - (0x3A9, 'M', u'ω'), - (0x3AA, 'M', u'ϊ'), - (0x3AB, 'M', u'ϋ'), - (0x3AC, 'V'), - (0x3C2, 'D', u'σ'), - (0x3C3, 'V'), - (0x3CF, 'M', u'ϗ'), - (0x3D0, 'M', u'β'), - (0x3D1, 'M', u'θ'), - (0x3D2, 'M', u'υ'), - (0x3D3, 'M', u'ύ'), - (0x3D4, 'M', u'ϋ'), - (0x3D5, 'M', u'φ'), - (0x3D6, 'M', u'π'), - (0x3D7, 'V'), - (0x3D8, 'M', u'ϙ'), - (0x3D9, 'V'), - (0x3DA, 'M', u'ϛ'), - (0x3DB, 'V'), - (0x3DC, 'M', u'ϝ'), - (0x3DD, 'V'), - (0x3DE, 'M', u'ϟ'), - (0x3DF, 'V'), - (0x3E0, 'M', u'ϡ'), - (0x3E1, 'V'), - (0x3E2, 'M', u'ϣ'), - (0x3E3, 'V'), - (0x3E4, 'M', u'ϥ'), - (0x3E5, 'V'), - (0x3E6, 'M', u'ϧ'), - (0x3E7, 'V'), - (0x3E8, 'M', u'ϩ'), - (0x3E9, 'V'), - (0x3EA, 'M', u'ϫ'), - (0x3EB, 'V'), - (0x3EC, 'M', u'ϭ'), - (0x3ED, 'V'), - (0x3EE, 'M', u'ϯ'), - (0x3EF, 'V'), - (0x3F0, 'M', u'κ'), - (0x3F1, 'M', u'ρ'), - (0x3F2, 'M', u'σ'), - (0x3F3, 'V'), - (0x3F4, 'M', u'θ'), - (0x3F5, 'M', u'ε'), - (0x3F6, 'V'), - (0x3F7, 'M', u'ϸ'), - (0x3F8, 'V'), - (0x3F9, 'M', u'σ'), - (0x3FA, 'M', u'ϻ'), - (0x3FB, 'V'), - (0x3FD, 'M', u'ͻ'), - (0x3FE, 'M', u'ͼ'), - (0x3FF, 'M', u'ͽ'), - (0x400, 'M', u'ѐ'), - (0x401, 'M', u'ё'), - (0x402, 'M', u'ђ'), - (0x403, 'M', u'ѓ'), - ] - -def _seg_7(): - return [ - (0x404, 'M', u'є'), - (0x405, 'M', u'ѕ'), - (0x406, 'M', u'і'), - (0x407, 'M', u'ї'), - (0x408, 'M', u'ј'), - (0x409, 'M', u'љ'), - (0x40A, 'M', u'њ'), - (0x40B, 'M', u'ћ'), - (0x40C, 'M', u'ќ'), - (0x40D, 'M', u'ѝ'), - (0x40E, 'M', u'ў'), - (0x40F, 'M', u'џ'), - (0x410, 'M', u'а'), - (0x411, 'M', u'б'), - (0x412, 'M', u'в'), - (0x413, 'M', u'г'), - (0x414, 'M', u'д'), - (0x415, 'M', u'е'), - (0x416, 'M', u'ж'), - (0x417, 'M', u'з'), - (0x418, 'M', u'и'), - (0x419, 'M', u'й'), - (0x41A, 'M', u'к'), - (0x41B, 'M', u'л'), - (0x41C, 'M', u'м'), - (0x41D, 'M', u'н'), - (0x41E, 'M', u'о'), - (0x41F, 'M', u'п'), - (0x420, 'M', u'р'), - (0x421, 'M', u'с'), - (0x422, 'M', u'т'), - (0x423, 'M', u'у'), - (0x424, 'M', u'ф'), - (0x425, 'M', u'х'), - (0x426, 'M', u'ц'), - (0x427, 'M', u'ч'), - (0x428, 'M', u'ш'), - (0x429, 'M', u'щ'), - (0x42A, 'M', u'ъ'), - (0x42B, 'M', u'ы'), - (0x42C, 'M', u'ь'), - (0x42D, 'M', u'э'), - (0x42E, 'M', u'ю'), - (0x42F, 'M', u'я'), - (0x430, 'V'), - (0x460, 'M', u'ѡ'), - (0x461, 'V'), - (0x462, 'M', u'ѣ'), - (0x463, 'V'), - (0x464, 'M', u'ѥ'), - (0x465, 'V'), - (0x466, 'M', u'ѧ'), - (0x467, 'V'), - (0x468, 'M', u'ѩ'), - (0x469, 'V'), - (0x46A, 'M', u'ѫ'), - (0x46B, 'V'), - (0x46C, 'M', u'ѭ'), - (0x46D, 'V'), - (0x46E, 'M', u'ѯ'), - (0x46F, 'V'), - (0x470, 'M', u'ѱ'), - (0x471, 'V'), - (0x472, 'M', u'ѳ'), - (0x473, 'V'), - (0x474, 'M', u'ѵ'), - (0x475, 'V'), - (0x476, 'M', u'ѷ'), - (0x477, 'V'), - (0x478, 'M', u'ѹ'), - (0x479, 'V'), - (0x47A, 'M', u'ѻ'), - (0x47B, 'V'), - (0x47C, 'M', u'ѽ'), - (0x47D, 'V'), - (0x47E, 'M', u'ѿ'), - (0x47F, 'V'), - (0x480, 'M', u'ҁ'), - (0x481, 'V'), - (0x48A, 'M', u'ҋ'), - (0x48B, 'V'), - (0x48C, 'M', u'ҍ'), - (0x48D, 'V'), - (0x48E, 'M', u'ҏ'), - (0x48F, 'V'), - (0x490, 'M', u'ґ'), - (0x491, 'V'), - (0x492, 'M', u'ғ'), - (0x493, 'V'), - (0x494, 'M', u'ҕ'), - (0x495, 'V'), - (0x496, 'M', u'җ'), - (0x497, 'V'), - (0x498, 'M', u'ҙ'), - (0x499, 'V'), - (0x49A, 'M', u'қ'), - (0x49B, 'V'), - (0x49C, 'M', u'ҝ'), - (0x49D, 'V'), - (0x49E, 'M', u'ҟ'), - ] - -def _seg_8(): - return [ - (0x49F, 'V'), - (0x4A0, 'M', u'ҡ'), - (0x4A1, 'V'), - (0x4A2, 'M', u'ң'), - (0x4A3, 'V'), - (0x4A4, 'M', u'ҥ'), - (0x4A5, 'V'), - (0x4A6, 'M', u'ҧ'), - (0x4A7, 'V'), - (0x4A8, 'M', u'ҩ'), - (0x4A9, 'V'), - (0x4AA, 'M', u'ҫ'), - (0x4AB, 'V'), - (0x4AC, 'M', u'ҭ'), - (0x4AD, 'V'), - (0x4AE, 'M', u'ү'), - (0x4AF, 'V'), - (0x4B0, 'M', u'ұ'), - (0x4B1, 'V'), - (0x4B2, 'M', u'ҳ'), - (0x4B3, 'V'), - (0x4B4, 'M', u'ҵ'), - (0x4B5, 'V'), - (0x4B6, 'M', u'ҷ'), - (0x4B7, 'V'), - (0x4B8, 'M', u'ҹ'), - (0x4B9, 'V'), - (0x4BA, 'M', u'һ'), - (0x4BB, 'V'), - (0x4BC, 'M', u'ҽ'), - (0x4BD, 'V'), - (0x4BE, 'M', u'ҿ'), - (0x4BF, 'V'), - (0x4C0, 'X'), - (0x4C1, 'M', u'ӂ'), - (0x4C2, 'V'), - (0x4C3, 'M', u'ӄ'), - (0x4C4, 'V'), - (0x4C5, 'M', u'ӆ'), - (0x4C6, 'V'), - (0x4C7, 'M', u'ӈ'), - (0x4C8, 'V'), - (0x4C9, 'M', u'ӊ'), - (0x4CA, 'V'), - (0x4CB, 'M', u'ӌ'), - (0x4CC, 'V'), - (0x4CD, 'M', u'ӎ'), - (0x4CE, 'V'), - (0x4D0, 'M', u'ӑ'), - (0x4D1, 'V'), - (0x4D2, 'M', u'ӓ'), - (0x4D3, 'V'), - (0x4D4, 'M', u'ӕ'), - (0x4D5, 'V'), - (0x4D6, 'M', u'ӗ'), - (0x4D7, 'V'), - (0x4D8, 'M', u'ә'), - (0x4D9, 'V'), - (0x4DA, 'M', u'ӛ'), - (0x4DB, 'V'), - (0x4DC, 'M', u'ӝ'), - (0x4DD, 'V'), - (0x4DE, 'M', u'ӟ'), - (0x4DF, 'V'), - (0x4E0, 'M', u'ӡ'), - (0x4E1, 'V'), - (0x4E2, 'M', u'ӣ'), - (0x4E3, 'V'), - (0x4E4, 'M', u'ӥ'), - (0x4E5, 'V'), - (0x4E6, 'M', u'ӧ'), - (0x4E7, 'V'), - (0x4E8, 'M', u'ө'), - (0x4E9, 'V'), - (0x4EA, 'M', u'ӫ'), - (0x4EB, 'V'), - (0x4EC, 'M', u'ӭ'), - (0x4ED, 'V'), - (0x4EE, 'M', u'ӯ'), - (0x4EF, 'V'), - (0x4F0, 'M', u'ӱ'), - (0x4F1, 'V'), - (0x4F2, 'M', u'ӳ'), - (0x4F3, 'V'), - (0x4F4, 'M', u'ӵ'), - (0x4F5, 'V'), - (0x4F6, 'M', u'ӷ'), - (0x4F7, 'V'), - (0x4F8, 'M', u'ӹ'), - (0x4F9, 'V'), - (0x4FA, 'M', u'ӻ'), - (0x4FB, 'V'), - (0x4FC, 'M', u'ӽ'), - (0x4FD, 'V'), - (0x4FE, 'M', u'ӿ'), - (0x4FF, 'V'), - (0x500, 'M', u'ԁ'), - (0x501, 'V'), - (0x502, 'M', u'ԃ'), - (0x503, 'V'), - ] - -def _seg_9(): - return [ - (0x504, 'M', u'ԅ'), - (0x505, 'V'), - (0x506, 'M', u'ԇ'), - (0x507, 'V'), - (0x508, 'M', u'ԉ'), - (0x509, 'V'), - (0x50A, 'M', u'ԋ'), - (0x50B, 'V'), - (0x50C, 'M', u'ԍ'), - (0x50D, 'V'), - (0x50E, 'M', u'ԏ'), - (0x50F, 'V'), - (0x510, 'M', u'ԑ'), - (0x511, 'V'), - (0x512, 'M', u'ԓ'), - (0x513, 'V'), - (0x514, 'M', u'ԕ'), - (0x515, 'V'), - (0x516, 'M', u'ԗ'), - (0x517, 'V'), - (0x518, 'M', u'ԙ'), - (0x519, 'V'), - (0x51A, 'M', u'ԛ'), - (0x51B, 'V'), - (0x51C, 'M', u'ԝ'), - (0x51D, 'V'), - (0x51E, 'M', u'ԟ'), - (0x51F, 'V'), - (0x520, 'M', u'ԡ'), - (0x521, 'V'), - (0x522, 'M', u'ԣ'), - (0x523, 'V'), - (0x524, 'M', u'ԥ'), - (0x525, 'V'), - (0x526, 'M', u'ԧ'), - (0x527, 'V'), - (0x528, 'X'), - (0x531, 'M', u'ա'), - (0x532, 'M', u'բ'), - (0x533, 'M', u'գ'), - (0x534, 'M', u'դ'), - (0x535, 'M', u'ե'), - (0x536, 'M', u'զ'), - (0x537, 'M', u'է'), - (0x538, 'M', u'ը'), - (0x539, 'M', u'թ'), - (0x53A, 'M', u'ժ'), - (0x53B, 'M', u'ի'), - (0x53C, 'M', u'լ'), - (0x53D, 'M', u'խ'), - (0x53E, 'M', u'ծ'), - (0x53F, 'M', u'կ'), - (0x540, 'M', u'հ'), - (0x541, 'M', u'ձ'), - (0x542, 'M', u'ղ'), - (0x543, 'M', u'ճ'), - (0x544, 'M', u'մ'), - (0x545, 'M', u'յ'), - (0x546, 'M', u'ն'), - (0x547, 'M', u'շ'), - (0x548, 'M', u'ո'), - (0x549, 'M', u'չ'), - (0x54A, 'M', u'պ'), - (0x54B, 'M', u'ջ'), - (0x54C, 'M', u'ռ'), - (0x54D, 'M', u'ս'), - (0x54E, 'M', u'վ'), - (0x54F, 'M', u'տ'), - (0x550, 'M', u'ր'), - (0x551, 'M', u'ց'), - (0x552, 'M', u'ւ'), - (0x553, 'M', u'փ'), - (0x554, 'M', u'ք'), - (0x555, 'M', u'օ'), - (0x556, 'M', u'ֆ'), - (0x557, 'X'), - (0x559, 'V'), - (0x560, 'X'), - (0x561, 'V'), - (0x587, 'M', u'եւ'), - (0x588, 'X'), - (0x589, 'V'), - (0x58B, 'X'), - (0x58F, 'V'), - (0x590, 'X'), - (0x591, 'V'), - (0x5C8, 'X'), - (0x5D0, 'V'), - (0x5EB, 'X'), - (0x5F0, 'V'), - (0x5F5, 'X'), - (0x606, 'V'), - (0x61C, 'X'), - (0x61E, 'V'), - (0x675, 'M', u'اٴ'), - (0x676, 'M', u'وٴ'), - (0x677, 'M', u'ۇٴ'), - (0x678, 'M', u'يٴ'), - (0x679, 'V'), - (0x6DD, 'X'), - ] - -def _seg_10(): - return [ - (0x6DE, 'V'), - (0x70E, 'X'), - (0x710, 'V'), - (0x74B, 'X'), - (0x74D, 'V'), - (0x7B2, 'X'), - (0x7C0, 'V'), - (0x7FB, 'X'), - (0x800, 'V'), - (0x82E, 'X'), - (0x830, 'V'), - (0x83F, 'X'), - (0x840, 'V'), - (0x85C, 'X'), - (0x85E, 'V'), - (0x85F, 'X'), - (0x8A0, 'V'), - (0x8A1, 'X'), - (0x8A2, 'V'), - (0x8AD, 'X'), - (0x8E4, 'V'), - (0x8FF, 'X'), - (0x900, 'V'), - (0x958, 'M', u'क़'), - (0x959, 'M', u'ख़'), - (0x95A, 'M', u'ग़'), - (0x95B, 'M', u'ज़'), - (0x95C, 'M', u'ड़'), - (0x95D, 'M', u'ढ़'), - (0x95E, 'M', u'फ़'), - (0x95F, 'M', u'य़'), - (0x960, 'V'), - (0x978, 'X'), - (0x979, 'V'), - (0x980, 'X'), - (0x981, 'V'), - (0x984, 'X'), - (0x985, 'V'), - (0x98D, 'X'), - (0x98F, 'V'), - (0x991, 'X'), - (0x993, 'V'), - (0x9A9, 'X'), - (0x9AA, 'V'), - (0x9B1, 'X'), - (0x9B2, 'V'), - (0x9B3, 'X'), - (0x9B6, 'V'), - (0x9BA, 'X'), - (0x9BC, 'V'), - (0x9C5, 'X'), - (0x9C7, 'V'), - (0x9C9, 'X'), - (0x9CB, 'V'), - (0x9CF, 'X'), - (0x9D7, 'V'), - (0x9D8, 'X'), - (0x9DC, 'M', u'ড়'), - (0x9DD, 'M', u'ঢ়'), - (0x9DE, 'X'), - (0x9DF, 'M', u'য়'), - (0x9E0, 'V'), - (0x9E4, 'X'), - (0x9E6, 'V'), - (0x9FC, 'X'), - (0xA01, 'V'), - (0xA04, 'X'), - (0xA05, 'V'), - (0xA0B, 'X'), - (0xA0F, 'V'), - (0xA11, 'X'), - (0xA13, 'V'), - (0xA29, 'X'), - (0xA2A, 'V'), - (0xA31, 'X'), - (0xA32, 'V'), - (0xA33, 'M', u'ਲ਼'), - (0xA34, 'X'), - (0xA35, 'V'), - (0xA36, 'M', u'ਸ਼'), - (0xA37, 'X'), - (0xA38, 'V'), - (0xA3A, 'X'), - (0xA3C, 'V'), - (0xA3D, 'X'), - (0xA3E, 'V'), - (0xA43, 'X'), - (0xA47, 'V'), - (0xA49, 'X'), - (0xA4B, 'V'), - (0xA4E, 'X'), - (0xA51, 'V'), - (0xA52, 'X'), - (0xA59, 'M', u'ਖ਼'), - (0xA5A, 'M', u'ਗ਼'), - (0xA5B, 'M', u'ਜ਼'), - (0xA5C, 'V'), - (0xA5D, 'X'), - (0xA5E, 'M', u'ਫ਼'), - (0xA5F, 'X'), - ] - -def _seg_11(): - return [ - (0xA66, 'V'), - (0xA76, 'X'), - (0xA81, 'V'), - (0xA84, 'X'), - (0xA85, 'V'), - (0xA8E, 'X'), - (0xA8F, 'V'), - (0xA92, 'X'), - (0xA93, 'V'), - (0xAA9, 'X'), - (0xAAA, 'V'), - (0xAB1, 'X'), - (0xAB2, 'V'), - (0xAB4, 'X'), - (0xAB5, 'V'), - (0xABA, 'X'), - (0xABC, 'V'), - (0xAC6, 'X'), - (0xAC7, 'V'), - (0xACA, 'X'), - (0xACB, 'V'), - (0xACE, 'X'), - (0xAD0, 'V'), - (0xAD1, 'X'), - (0xAE0, 'V'), - (0xAE4, 'X'), - (0xAE6, 'V'), - (0xAF2, 'X'), - (0xB01, 'V'), - (0xB04, 'X'), - (0xB05, 'V'), - (0xB0D, 'X'), - (0xB0F, 'V'), - (0xB11, 'X'), - (0xB13, 'V'), - (0xB29, 'X'), - (0xB2A, 'V'), - (0xB31, 'X'), - (0xB32, 'V'), - (0xB34, 'X'), - (0xB35, 'V'), - (0xB3A, 'X'), - (0xB3C, 'V'), - (0xB45, 'X'), - (0xB47, 'V'), - (0xB49, 'X'), - (0xB4B, 'V'), - (0xB4E, 'X'), - (0xB56, 'V'), - (0xB58, 'X'), - (0xB5C, 'M', u'ଡ଼'), - (0xB5D, 'M', u'ଢ଼'), - (0xB5E, 'X'), - (0xB5F, 'V'), - (0xB64, 'X'), - (0xB66, 'V'), - (0xB78, 'X'), - (0xB82, 'V'), - (0xB84, 'X'), - (0xB85, 'V'), - (0xB8B, 'X'), - (0xB8E, 'V'), - (0xB91, 'X'), - (0xB92, 'V'), - (0xB96, 'X'), - (0xB99, 'V'), - (0xB9B, 'X'), - (0xB9C, 'V'), - (0xB9D, 'X'), - (0xB9E, 'V'), - (0xBA0, 'X'), - (0xBA3, 'V'), - (0xBA5, 'X'), - (0xBA8, 'V'), - (0xBAB, 'X'), - (0xBAE, 'V'), - (0xBBA, 'X'), - (0xBBE, 'V'), - (0xBC3, 'X'), - (0xBC6, 'V'), - (0xBC9, 'X'), - (0xBCA, 'V'), - (0xBCE, 'X'), - (0xBD0, 'V'), - (0xBD1, 'X'), - (0xBD7, 'V'), - (0xBD8, 'X'), - (0xBE6, 'V'), - (0xBFB, 'X'), - (0xC01, 'V'), - (0xC04, 'X'), - (0xC05, 'V'), - (0xC0D, 'X'), - (0xC0E, 'V'), - (0xC11, 'X'), - (0xC12, 'V'), - (0xC29, 'X'), - (0xC2A, 'V'), - (0xC34, 'X'), - (0xC35, 'V'), - ] - -def _seg_12(): - return [ - (0xC3A, 'X'), - (0xC3D, 'V'), - (0xC45, 'X'), - (0xC46, 'V'), - (0xC49, 'X'), - (0xC4A, 'V'), - (0xC4E, 'X'), - (0xC55, 'V'), - (0xC57, 'X'), - (0xC58, 'V'), - (0xC5A, 'X'), - (0xC60, 'V'), - (0xC64, 'X'), - (0xC66, 'V'), - (0xC70, 'X'), - (0xC78, 'V'), - (0xC80, 'X'), - (0xC82, 'V'), - (0xC84, 'X'), - (0xC85, 'V'), - (0xC8D, 'X'), - (0xC8E, 'V'), - (0xC91, 'X'), - (0xC92, 'V'), - (0xCA9, 'X'), - (0xCAA, 'V'), - (0xCB4, 'X'), - (0xCB5, 'V'), - (0xCBA, 'X'), - (0xCBC, 'V'), - (0xCC5, 'X'), - (0xCC6, 'V'), - (0xCC9, 'X'), - (0xCCA, 'V'), - (0xCCE, 'X'), - (0xCD5, 'V'), - (0xCD7, 'X'), - (0xCDE, 'V'), - (0xCDF, 'X'), - (0xCE0, 'V'), - (0xCE4, 'X'), - (0xCE6, 'V'), - (0xCF0, 'X'), - (0xCF1, 'V'), - (0xCF3, 'X'), - (0xD02, 'V'), - (0xD04, 'X'), - (0xD05, 'V'), - (0xD0D, 'X'), - (0xD0E, 'V'), - (0xD11, 'X'), - (0xD12, 'V'), - (0xD3B, 'X'), - (0xD3D, 'V'), - (0xD45, 'X'), - (0xD46, 'V'), - (0xD49, 'X'), - (0xD4A, 'V'), - (0xD4F, 'X'), - (0xD57, 'V'), - (0xD58, 'X'), - (0xD60, 'V'), - (0xD64, 'X'), - (0xD66, 'V'), - (0xD76, 'X'), - (0xD79, 'V'), - (0xD80, 'X'), - (0xD82, 'V'), - (0xD84, 'X'), - (0xD85, 'V'), - (0xD97, 'X'), - (0xD9A, 'V'), - (0xDB2, 'X'), - (0xDB3, 'V'), - (0xDBC, 'X'), - (0xDBD, 'V'), - (0xDBE, 'X'), - (0xDC0, 'V'), - (0xDC7, 'X'), - (0xDCA, 'V'), - (0xDCB, 'X'), - (0xDCF, 'V'), - (0xDD5, 'X'), - (0xDD6, 'V'), - (0xDD7, 'X'), - (0xDD8, 'V'), - (0xDE0, 'X'), - (0xDF2, 'V'), - (0xDF5, 'X'), - (0xE01, 'V'), - (0xE33, 'M', u'ํา'), - (0xE34, 'V'), - (0xE3B, 'X'), - (0xE3F, 'V'), - (0xE5C, 'X'), - (0xE81, 'V'), - (0xE83, 'X'), - (0xE84, 'V'), - (0xE85, 'X'), - (0xE87, 'V'), - ] - -def _seg_13(): - return [ - (0xE89, 'X'), - (0xE8A, 'V'), - (0xE8B, 'X'), - (0xE8D, 'V'), - (0xE8E, 'X'), - (0xE94, 'V'), - (0xE98, 'X'), - (0xE99, 'V'), - (0xEA0, 'X'), - (0xEA1, 'V'), - (0xEA4, 'X'), - (0xEA5, 'V'), - (0xEA6, 'X'), - (0xEA7, 'V'), - (0xEA8, 'X'), - (0xEAA, 'V'), - (0xEAC, 'X'), - (0xEAD, 'V'), - (0xEB3, 'M', u'ໍາ'), - (0xEB4, 'V'), - (0xEBA, 'X'), - (0xEBB, 'V'), - (0xEBE, 'X'), - (0xEC0, 'V'), - (0xEC5, 'X'), - (0xEC6, 'V'), - (0xEC7, 'X'), - (0xEC8, 'V'), - (0xECE, 'X'), - (0xED0, 'V'), - (0xEDA, 'X'), - (0xEDC, 'M', u'ຫນ'), - (0xEDD, 'M', u'ຫມ'), - (0xEDE, 'V'), - (0xEE0, 'X'), - (0xF00, 'V'), - (0xF0C, 'M', u'་'), - (0xF0D, 'V'), - (0xF43, 'M', u'གྷ'), - (0xF44, 'V'), - (0xF48, 'X'), - (0xF49, 'V'), - (0xF4D, 'M', u'ཌྷ'), - (0xF4E, 'V'), - (0xF52, 'M', u'དྷ'), - (0xF53, 'V'), - (0xF57, 'M', u'བྷ'), - (0xF58, 'V'), - (0xF5C, 'M', u'ཛྷ'), - (0xF5D, 'V'), - (0xF69, 'M', u'ཀྵ'), - (0xF6A, 'V'), - (0xF6D, 'X'), - (0xF71, 'V'), - (0xF73, 'M', u'ཱི'), - (0xF74, 'V'), - (0xF75, 'M', u'ཱུ'), - (0xF76, 'M', u'ྲྀ'), - (0xF77, 'M', u'ྲཱྀ'), - (0xF78, 'M', u'ླྀ'), - (0xF79, 'M', u'ླཱྀ'), - (0xF7A, 'V'), - (0xF81, 'M', u'ཱྀ'), - (0xF82, 'V'), - (0xF93, 'M', u'ྒྷ'), - (0xF94, 'V'), - (0xF98, 'X'), - (0xF99, 'V'), - (0xF9D, 'M', u'ྜྷ'), - (0xF9E, 'V'), - (0xFA2, 'M', u'ྡྷ'), - (0xFA3, 'V'), - (0xFA7, 'M', u'ྦྷ'), - (0xFA8, 'V'), - (0xFAC, 'M', u'ྫྷ'), - (0xFAD, 'V'), - (0xFB9, 'M', u'ྐྵ'), - (0xFBA, 'V'), - (0xFBD, 'X'), - (0xFBE, 'V'), - (0xFCD, 'X'), - (0xFCE, 'V'), - (0xFDB, 'X'), - (0x1000, 'V'), - (0x10A0, 'X'), - (0x10C7, 'M', u'ⴧ'), - (0x10C8, 'X'), - (0x10CD, 'M', u'ⴭ'), - (0x10CE, 'X'), - (0x10D0, 'V'), - (0x10FC, 'M', u'ნ'), - (0x10FD, 'V'), - (0x115F, 'X'), - (0x1161, 'V'), - (0x1249, 'X'), - (0x124A, 'V'), - (0x124E, 'X'), - (0x1250, 'V'), - (0x1257, 'X'), - (0x1258, 'V'), - ] - -def _seg_14(): - return [ - (0x1259, 'X'), - (0x125A, 'V'), - (0x125E, 'X'), - (0x1260, 'V'), - (0x1289, 'X'), - (0x128A, 'V'), - (0x128E, 'X'), - (0x1290, 'V'), - (0x12B1, 'X'), - (0x12B2, 'V'), - (0x12B6, 'X'), - (0x12B8, 'V'), - (0x12BF, 'X'), - (0x12C0, 'V'), - (0x12C1, 'X'), - (0x12C2, 'V'), - (0x12C6, 'X'), - (0x12C8, 'V'), - (0x12D7, 'X'), - (0x12D8, 'V'), - (0x1311, 'X'), - (0x1312, 'V'), - (0x1316, 'X'), - (0x1318, 'V'), - (0x135B, 'X'), - (0x135D, 'V'), - (0x137D, 'X'), - (0x1380, 'V'), - (0x139A, 'X'), - (0x13A0, 'V'), - (0x13F5, 'X'), - (0x1400, 'V'), - (0x1680, 'X'), - (0x1681, 'V'), - (0x169D, 'X'), - (0x16A0, 'V'), - (0x16F1, 'X'), - (0x1700, 'V'), - (0x170D, 'X'), - (0x170E, 'V'), - (0x1715, 'X'), - (0x1720, 'V'), - (0x1737, 'X'), - (0x1740, 'V'), - (0x1754, 'X'), - (0x1760, 'V'), - (0x176D, 'X'), - (0x176E, 'V'), - (0x1771, 'X'), - (0x1772, 'V'), - (0x1774, 'X'), - (0x1780, 'V'), - (0x17B4, 'X'), - (0x17B6, 'V'), - (0x17DE, 'X'), - (0x17E0, 'V'), - (0x17EA, 'X'), - (0x17F0, 'V'), - (0x17FA, 'X'), - (0x1800, 'V'), - (0x1806, 'X'), - (0x1807, 'V'), - (0x180B, 'I'), - (0x180E, 'X'), - (0x1810, 'V'), - (0x181A, 'X'), - (0x1820, 'V'), - (0x1878, 'X'), - (0x1880, 'V'), - (0x18AB, 'X'), - (0x18B0, 'V'), - (0x18F6, 'X'), - (0x1900, 'V'), - (0x191D, 'X'), - (0x1920, 'V'), - (0x192C, 'X'), - (0x1930, 'V'), - (0x193C, 'X'), - (0x1940, 'V'), - (0x1941, 'X'), - (0x1944, 'V'), - (0x196E, 'X'), - (0x1970, 'V'), - (0x1975, 'X'), - (0x1980, 'V'), - (0x19AC, 'X'), - (0x19B0, 'V'), - (0x19CA, 'X'), - (0x19D0, 'V'), - (0x19DB, 'X'), - (0x19DE, 'V'), - (0x1A1C, 'X'), - (0x1A1E, 'V'), - (0x1A5F, 'X'), - (0x1A60, 'V'), - (0x1A7D, 'X'), - (0x1A7F, 'V'), - (0x1A8A, 'X'), - (0x1A90, 'V'), - (0x1A9A, 'X'), - ] - -def _seg_15(): - return [ - (0x1AA0, 'V'), - (0x1AAE, 'X'), - (0x1B00, 'V'), - (0x1B4C, 'X'), - (0x1B50, 'V'), - (0x1B7D, 'X'), - (0x1B80, 'V'), - (0x1BF4, 'X'), - (0x1BFC, 'V'), - (0x1C38, 'X'), - (0x1C3B, 'V'), - (0x1C4A, 'X'), - (0x1C4D, 'V'), - (0x1C80, 'X'), - (0x1CC0, 'V'), - (0x1CC8, 'X'), - (0x1CD0, 'V'), - (0x1CF7, 'X'), - (0x1D00, 'V'), - (0x1D2C, 'M', u'a'), - (0x1D2D, 'M', u'æ'), - (0x1D2E, 'M', u'b'), - (0x1D2F, 'V'), - (0x1D30, 'M', u'd'), - (0x1D31, 'M', u'e'), - (0x1D32, 'M', u'ǝ'), - (0x1D33, 'M', u'g'), - (0x1D34, 'M', u'h'), - (0x1D35, 'M', u'i'), - (0x1D36, 'M', u'j'), - (0x1D37, 'M', u'k'), - (0x1D38, 'M', u'l'), - (0x1D39, 'M', u'm'), - (0x1D3A, 'M', u'n'), - (0x1D3B, 'V'), - (0x1D3C, 'M', u'o'), - (0x1D3D, 'M', u'ȣ'), - (0x1D3E, 'M', u'p'), - (0x1D3F, 'M', u'r'), - (0x1D40, 'M', u't'), - (0x1D41, 'M', u'u'), - (0x1D42, 'M', u'w'), - (0x1D43, 'M', u'a'), - (0x1D44, 'M', u'ɐ'), - (0x1D45, 'M', u'ɑ'), - (0x1D46, 'M', u'ᴂ'), - (0x1D47, 'M', u'b'), - (0x1D48, 'M', u'd'), - (0x1D49, 'M', u'e'), - (0x1D4A, 'M', u'ə'), - (0x1D4B, 'M', u'ɛ'), - (0x1D4C, 'M', u'ɜ'), - (0x1D4D, 'M', u'g'), - (0x1D4E, 'V'), - (0x1D4F, 'M', u'k'), - (0x1D50, 'M', u'm'), - (0x1D51, 'M', u'ŋ'), - (0x1D52, 'M', u'o'), - (0x1D53, 'M', u'ɔ'), - (0x1D54, 'M', u'ᴖ'), - (0x1D55, 'M', u'ᴗ'), - (0x1D56, 'M', u'p'), - (0x1D57, 'M', u't'), - (0x1D58, 'M', u'u'), - (0x1D59, 'M', u'ᴝ'), - (0x1D5A, 'M', u'ɯ'), - (0x1D5B, 'M', u'v'), - (0x1D5C, 'M', u'ᴥ'), - (0x1D5D, 'M', u'β'), - (0x1D5E, 'M', u'γ'), - (0x1D5F, 'M', u'δ'), - (0x1D60, 'M', u'φ'), - (0x1D61, 'M', u'χ'), - (0x1D62, 'M', u'i'), - (0x1D63, 'M', u'r'), - (0x1D64, 'M', u'u'), - (0x1D65, 'M', u'v'), - (0x1D66, 'M', u'β'), - (0x1D67, 'M', u'γ'), - (0x1D68, 'M', u'ρ'), - (0x1D69, 'M', u'φ'), - (0x1D6A, 'M', u'χ'), - (0x1D6B, 'V'), - (0x1D78, 'M', u'н'), - (0x1D79, 'V'), - (0x1D9B, 'M', u'ɒ'), - (0x1D9C, 'M', u'c'), - (0x1D9D, 'M', u'ɕ'), - (0x1D9E, 'M', u'ð'), - (0x1D9F, 'M', u'ɜ'), - (0x1DA0, 'M', u'f'), - (0x1DA1, 'M', u'ɟ'), - (0x1DA2, 'M', u'ɡ'), - (0x1DA3, 'M', u'ɥ'), - (0x1DA4, 'M', u'ɨ'), - (0x1DA5, 'M', u'ɩ'), - (0x1DA6, 'M', u'ɪ'), - (0x1DA7, 'M', u'ᵻ'), - (0x1DA8, 'M', u'ʝ'), - (0x1DA9, 'M', u'ɭ'), - ] - -def _seg_16(): - return [ - (0x1DAA, 'M', u'ᶅ'), - (0x1DAB, 'M', u'ʟ'), - (0x1DAC, 'M', u'ɱ'), - (0x1DAD, 'M', u'ɰ'), - (0x1DAE, 'M', u'ɲ'), - (0x1DAF, 'M', u'ɳ'), - (0x1DB0, 'M', u'ɴ'), - (0x1DB1, 'M', u'ɵ'), - (0x1DB2, 'M', u'ɸ'), - (0x1DB3, 'M', u'ʂ'), - (0x1DB4, 'M', u'ʃ'), - (0x1DB5, 'M', u'ƫ'), - (0x1DB6, 'M', u'ʉ'), - (0x1DB7, 'M', u'ʊ'), - (0x1DB8, 'M', u'ᴜ'), - (0x1DB9, 'M', u'ʋ'), - (0x1DBA, 'M', u'ʌ'), - (0x1DBB, 'M', u'z'), - (0x1DBC, 'M', u'ʐ'), - (0x1DBD, 'M', u'ʑ'), - (0x1DBE, 'M', u'ʒ'), - (0x1DBF, 'M', u'θ'), - (0x1DC0, 'V'), - (0x1DE7, 'X'), - (0x1DFC, 'V'), - (0x1E00, 'M', u'ḁ'), - (0x1E01, 'V'), - (0x1E02, 'M', u'ḃ'), - (0x1E03, 'V'), - (0x1E04, 'M', u'ḅ'), - (0x1E05, 'V'), - (0x1E06, 'M', u'ḇ'), - (0x1E07, 'V'), - (0x1E08, 'M', u'ḉ'), - (0x1E09, 'V'), - (0x1E0A, 'M', u'ḋ'), - (0x1E0B, 'V'), - (0x1E0C, 'M', u'ḍ'), - (0x1E0D, 'V'), - (0x1E0E, 'M', u'ḏ'), - (0x1E0F, 'V'), - (0x1E10, 'M', u'ḑ'), - (0x1E11, 'V'), - (0x1E12, 'M', u'ḓ'), - (0x1E13, 'V'), - (0x1E14, 'M', u'ḕ'), - (0x1E15, 'V'), - (0x1E16, 'M', u'ḗ'), - (0x1E17, 'V'), - (0x1E18, 'M', u'ḙ'), - (0x1E19, 'V'), - (0x1E1A, 'M', u'ḛ'), - (0x1E1B, 'V'), - (0x1E1C, 'M', u'ḝ'), - (0x1E1D, 'V'), - (0x1E1E, 'M', u'ḟ'), - (0x1E1F, 'V'), - (0x1E20, 'M', u'ḡ'), - (0x1E21, 'V'), - (0x1E22, 'M', u'ḣ'), - (0x1E23, 'V'), - (0x1E24, 'M', u'ḥ'), - (0x1E25, 'V'), - (0x1E26, 'M', u'ḧ'), - (0x1E27, 'V'), - (0x1E28, 'M', u'ḩ'), - (0x1E29, 'V'), - (0x1E2A, 'M', u'ḫ'), - (0x1E2B, 'V'), - (0x1E2C, 'M', u'ḭ'), - (0x1E2D, 'V'), - (0x1E2E, 'M', u'ḯ'), - (0x1E2F, 'V'), - (0x1E30, 'M', u'ḱ'), - (0x1E31, 'V'), - (0x1E32, 'M', u'ḳ'), - (0x1E33, 'V'), - (0x1E34, 'M', u'ḵ'), - (0x1E35, 'V'), - (0x1E36, 'M', u'ḷ'), - (0x1E37, 'V'), - (0x1E38, 'M', u'ḹ'), - (0x1E39, 'V'), - (0x1E3A, 'M', u'ḻ'), - (0x1E3B, 'V'), - (0x1E3C, 'M', u'ḽ'), - (0x1E3D, 'V'), - (0x1E3E, 'M', u'ḿ'), - (0x1E3F, 'V'), - (0x1E40, 'M', u'ṁ'), - (0x1E41, 'V'), - (0x1E42, 'M', u'ṃ'), - (0x1E43, 'V'), - (0x1E44, 'M', u'ṅ'), - (0x1E45, 'V'), - (0x1E46, 'M', u'ṇ'), - (0x1E47, 'V'), - (0x1E48, 'M', u'ṉ'), - (0x1E49, 'V'), - (0x1E4A, 'M', u'ṋ'), - ] - -def _seg_17(): - return [ - (0x1E4B, 'V'), - (0x1E4C, 'M', u'ṍ'), - (0x1E4D, 'V'), - (0x1E4E, 'M', u'ṏ'), - (0x1E4F, 'V'), - (0x1E50, 'M', u'ṑ'), - (0x1E51, 'V'), - (0x1E52, 'M', u'ṓ'), - (0x1E53, 'V'), - (0x1E54, 'M', u'ṕ'), - (0x1E55, 'V'), - (0x1E56, 'M', u'ṗ'), - (0x1E57, 'V'), - (0x1E58, 'M', u'ṙ'), - (0x1E59, 'V'), - (0x1E5A, 'M', u'ṛ'), - (0x1E5B, 'V'), - (0x1E5C, 'M', u'ṝ'), - (0x1E5D, 'V'), - (0x1E5E, 'M', u'ṟ'), - (0x1E5F, 'V'), - (0x1E60, 'M', u'ṡ'), - (0x1E61, 'V'), - (0x1E62, 'M', u'ṣ'), - (0x1E63, 'V'), - (0x1E64, 'M', u'ṥ'), - (0x1E65, 'V'), - (0x1E66, 'M', u'ṧ'), - (0x1E67, 'V'), - (0x1E68, 'M', u'ṩ'), - (0x1E69, 'V'), - (0x1E6A, 'M', u'ṫ'), - (0x1E6B, 'V'), - (0x1E6C, 'M', u'ṭ'), - (0x1E6D, 'V'), - (0x1E6E, 'M', u'ṯ'), - (0x1E6F, 'V'), - (0x1E70, 'M', u'ṱ'), - (0x1E71, 'V'), - (0x1E72, 'M', u'ṳ'), - (0x1E73, 'V'), - (0x1E74, 'M', u'ṵ'), - (0x1E75, 'V'), - (0x1E76, 'M', u'ṷ'), - (0x1E77, 'V'), - (0x1E78, 'M', u'ṹ'), - (0x1E79, 'V'), - (0x1E7A, 'M', u'ṻ'), - (0x1E7B, 'V'), - (0x1E7C, 'M', u'ṽ'), - (0x1E7D, 'V'), - (0x1E7E, 'M', u'ṿ'), - (0x1E7F, 'V'), - (0x1E80, 'M', u'ẁ'), - (0x1E81, 'V'), - (0x1E82, 'M', u'ẃ'), - (0x1E83, 'V'), - (0x1E84, 'M', u'ẅ'), - (0x1E85, 'V'), - (0x1E86, 'M', u'ẇ'), - (0x1E87, 'V'), - (0x1E88, 'M', u'ẉ'), - (0x1E89, 'V'), - (0x1E8A, 'M', u'ẋ'), - (0x1E8B, 'V'), - (0x1E8C, 'M', u'ẍ'), - (0x1E8D, 'V'), - (0x1E8E, 'M', u'ẏ'), - (0x1E8F, 'V'), - (0x1E90, 'M', u'ẑ'), - (0x1E91, 'V'), - (0x1E92, 'M', u'ẓ'), - (0x1E93, 'V'), - (0x1E94, 'M', u'ẕ'), - (0x1E95, 'V'), - (0x1E9A, 'M', u'aʾ'), - (0x1E9B, 'M', u'ṡ'), - (0x1E9C, 'V'), - (0x1E9E, 'M', u'ss'), - (0x1E9F, 'V'), - (0x1EA0, 'M', u'ạ'), - (0x1EA1, 'V'), - (0x1EA2, 'M', u'ả'), - (0x1EA3, 'V'), - (0x1EA4, 'M', u'ấ'), - (0x1EA5, 'V'), - (0x1EA6, 'M', u'ầ'), - (0x1EA7, 'V'), - (0x1EA8, 'M', u'ẩ'), - (0x1EA9, 'V'), - (0x1EAA, 'M', u'ẫ'), - (0x1EAB, 'V'), - (0x1EAC, 'M', u'ậ'), - (0x1EAD, 'V'), - (0x1EAE, 'M', u'ắ'), - (0x1EAF, 'V'), - (0x1EB0, 'M', u'ằ'), - (0x1EB1, 'V'), - (0x1EB2, 'M', u'ẳ'), - (0x1EB3, 'V'), - ] - -def _seg_18(): - return [ - (0x1EB4, 'M', u'ẵ'), - (0x1EB5, 'V'), - (0x1EB6, 'M', u'ặ'), - (0x1EB7, 'V'), - (0x1EB8, 'M', u'ẹ'), - (0x1EB9, 'V'), - (0x1EBA, 'M', u'ẻ'), - (0x1EBB, 'V'), - (0x1EBC, 'M', u'ẽ'), - (0x1EBD, 'V'), - (0x1EBE, 'M', u'ế'), - (0x1EBF, 'V'), - (0x1EC0, 'M', u'ề'), - (0x1EC1, 'V'), - (0x1EC2, 'M', u'ể'), - (0x1EC3, 'V'), - (0x1EC4, 'M', u'ễ'), - (0x1EC5, 'V'), - (0x1EC6, 'M', u'ệ'), - (0x1EC7, 'V'), - (0x1EC8, 'M', u'ỉ'), - (0x1EC9, 'V'), - (0x1ECA, 'M', u'ị'), - (0x1ECB, 'V'), - (0x1ECC, 'M', u'ọ'), - (0x1ECD, 'V'), - (0x1ECE, 'M', u'ỏ'), - (0x1ECF, 'V'), - (0x1ED0, 'M', u'ố'), - (0x1ED1, 'V'), - (0x1ED2, 'M', u'ồ'), - (0x1ED3, 'V'), - (0x1ED4, 'M', u'ổ'), - (0x1ED5, 'V'), - (0x1ED6, 'M', u'ỗ'), - (0x1ED7, 'V'), - (0x1ED8, 'M', u'ộ'), - (0x1ED9, 'V'), - (0x1EDA, 'M', u'ớ'), - (0x1EDB, 'V'), - (0x1EDC, 'M', u'ờ'), - (0x1EDD, 'V'), - (0x1EDE, 'M', u'ở'), - (0x1EDF, 'V'), - (0x1EE0, 'M', u'ỡ'), - (0x1EE1, 'V'), - (0x1EE2, 'M', u'ợ'), - (0x1EE3, 'V'), - (0x1EE4, 'M', u'ụ'), - (0x1EE5, 'V'), - (0x1EE6, 'M', u'ủ'), - (0x1EE7, 'V'), - (0x1EE8, 'M', u'ứ'), - (0x1EE9, 'V'), - (0x1EEA, 'M', u'ừ'), - (0x1EEB, 'V'), - (0x1EEC, 'M', u'ử'), - (0x1EED, 'V'), - (0x1EEE, 'M', u'ữ'), - (0x1EEF, 'V'), - (0x1EF0, 'M', u'ự'), - (0x1EF1, 'V'), - (0x1EF2, 'M', u'ỳ'), - (0x1EF3, 'V'), - (0x1EF4, 'M', u'ỵ'), - (0x1EF5, 'V'), - (0x1EF6, 'M', u'ỷ'), - (0x1EF7, 'V'), - (0x1EF8, 'M', u'ỹ'), - (0x1EF9, 'V'), - (0x1EFA, 'M', u'ỻ'), - (0x1EFB, 'V'), - (0x1EFC, 'M', u'ỽ'), - (0x1EFD, 'V'), - (0x1EFE, 'M', u'ỿ'), - (0x1EFF, 'V'), - (0x1F08, 'M', u'ἀ'), - (0x1F09, 'M', u'ἁ'), - (0x1F0A, 'M', u'ἂ'), - (0x1F0B, 'M', u'ἃ'), - (0x1F0C, 'M', u'ἄ'), - (0x1F0D, 'M', u'ἅ'), - (0x1F0E, 'M', u'ἆ'), - (0x1F0F, 'M', u'ἇ'), - (0x1F10, 'V'), - (0x1F16, 'X'), - (0x1F18, 'M', u'ἐ'), - (0x1F19, 'M', u'ἑ'), - (0x1F1A, 'M', u'ἒ'), - (0x1F1B, 'M', u'ἓ'), - (0x1F1C, 'M', u'ἔ'), - (0x1F1D, 'M', u'ἕ'), - (0x1F1E, 'X'), - (0x1F20, 'V'), - (0x1F28, 'M', u'ἠ'), - (0x1F29, 'M', u'ἡ'), - (0x1F2A, 'M', u'ἢ'), - (0x1F2B, 'M', u'ἣ'), - (0x1F2C, 'M', u'ἤ'), - (0x1F2D, 'M', u'ἥ'), - ] - -def _seg_19(): - return [ - (0x1F2E, 'M', u'ἦ'), - (0x1F2F, 'M', u'ἧ'), - (0x1F30, 'V'), - (0x1F38, 'M', u'ἰ'), - (0x1F39, 'M', u'ἱ'), - (0x1F3A, 'M', u'ἲ'), - (0x1F3B, 'M', u'ἳ'), - (0x1F3C, 'M', u'ἴ'), - (0x1F3D, 'M', u'ἵ'), - (0x1F3E, 'M', u'ἶ'), - (0x1F3F, 'M', u'ἷ'), - (0x1F40, 'V'), - (0x1F46, 'X'), - (0x1F48, 'M', u'ὀ'), - (0x1F49, 'M', u'ὁ'), - (0x1F4A, 'M', u'ὂ'), - (0x1F4B, 'M', u'ὃ'), - (0x1F4C, 'M', u'ὄ'), - (0x1F4D, 'M', u'ὅ'), - (0x1F4E, 'X'), - (0x1F50, 'V'), - (0x1F58, 'X'), - (0x1F59, 'M', u'ὑ'), - (0x1F5A, 'X'), - (0x1F5B, 'M', u'ὓ'), - (0x1F5C, 'X'), - (0x1F5D, 'M', u'ὕ'), - (0x1F5E, 'X'), - (0x1F5F, 'M', u'ὗ'), - (0x1F60, 'V'), - (0x1F68, 'M', u'ὠ'), - (0x1F69, 'M', u'ὡ'), - (0x1F6A, 'M', u'ὢ'), - (0x1F6B, 'M', u'ὣ'), - (0x1F6C, 'M', u'ὤ'), - (0x1F6D, 'M', u'ὥ'), - (0x1F6E, 'M', u'ὦ'), - (0x1F6F, 'M', u'ὧ'), - (0x1F70, 'V'), - (0x1F71, 'M', u'ά'), - (0x1F72, 'V'), - (0x1F73, 'M', u'έ'), - (0x1F74, 'V'), - (0x1F75, 'M', u'ή'), - (0x1F76, 'V'), - (0x1F77, 'M', u'ί'), - (0x1F78, 'V'), - (0x1F79, 'M', u'ό'), - (0x1F7A, 'V'), - (0x1F7B, 'M', u'ύ'), - (0x1F7C, 'V'), - (0x1F7D, 'M', u'ώ'), - (0x1F7E, 'X'), - (0x1F80, 'M', u'ἀι'), - (0x1F81, 'M', u'ἁι'), - (0x1F82, 'M', u'ἂι'), - (0x1F83, 'M', u'ἃι'), - (0x1F84, 'M', u'ἄι'), - (0x1F85, 'M', u'ἅι'), - (0x1F86, 'M', u'ἆι'), - (0x1F87, 'M', u'ἇι'), - (0x1F88, 'M', u'ἀι'), - (0x1F89, 'M', u'ἁι'), - (0x1F8A, 'M', u'ἂι'), - (0x1F8B, 'M', u'ἃι'), - (0x1F8C, 'M', u'ἄι'), - (0x1F8D, 'M', u'ἅι'), - (0x1F8E, 'M', u'ἆι'), - (0x1F8F, 'M', u'ἇι'), - (0x1F90, 'M', u'ἠι'), - (0x1F91, 'M', u'ἡι'), - (0x1F92, 'M', u'ἢι'), - (0x1F93, 'M', u'ἣι'), - (0x1F94, 'M', u'ἤι'), - (0x1F95, 'M', u'ἥι'), - (0x1F96, 'M', u'ἦι'), - (0x1F97, 'M', u'ἧι'), - (0x1F98, 'M', u'ἠι'), - (0x1F99, 'M', u'ἡι'), - (0x1F9A, 'M', u'ἢι'), - (0x1F9B, 'M', u'ἣι'), - (0x1F9C, 'M', u'ἤι'), - (0x1F9D, 'M', u'ἥι'), - (0x1F9E, 'M', u'ἦι'), - (0x1F9F, 'M', u'ἧι'), - (0x1FA0, 'M', u'ὠι'), - (0x1FA1, 'M', u'ὡι'), - (0x1FA2, 'M', u'ὢι'), - (0x1FA3, 'M', u'ὣι'), - (0x1FA4, 'M', u'ὤι'), - (0x1FA5, 'M', u'ὥι'), - (0x1FA6, 'M', u'ὦι'), - (0x1FA7, 'M', u'ὧι'), - (0x1FA8, 'M', u'ὠι'), - (0x1FA9, 'M', u'ὡι'), - (0x1FAA, 'M', u'ὢι'), - (0x1FAB, 'M', u'ὣι'), - (0x1FAC, 'M', u'ὤι'), - (0x1FAD, 'M', u'ὥι'), - (0x1FAE, 'M', u'ὦι'), - ] - -def _seg_20(): - return [ - (0x1FAF, 'M', u'ὧι'), - (0x1FB0, 'V'), - (0x1FB2, 'M', u'ὰι'), - (0x1FB3, 'M', u'αι'), - (0x1FB4, 'M', u'άι'), - (0x1FB5, 'X'), - (0x1FB6, 'V'), - (0x1FB7, 'M', u'ᾶι'), - (0x1FB8, 'M', u'ᾰ'), - (0x1FB9, 'M', u'ᾱ'), - (0x1FBA, 'M', u'ὰ'), - (0x1FBB, 'M', u'ά'), - (0x1FBC, 'M', u'αι'), - (0x1FBD, '3', u' ̓'), - (0x1FBE, 'M', u'ι'), - (0x1FBF, '3', u' ̓'), - (0x1FC0, '3', u' ͂'), - (0x1FC1, '3', u' ̈͂'), - (0x1FC2, 'M', u'ὴι'), - (0x1FC3, 'M', u'ηι'), - (0x1FC4, 'M', u'ήι'), - (0x1FC5, 'X'), - (0x1FC6, 'V'), - (0x1FC7, 'M', u'ῆι'), - (0x1FC8, 'M', u'ὲ'), - (0x1FC9, 'M', u'έ'), - (0x1FCA, 'M', u'ὴ'), - (0x1FCB, 'M', u'ή'), - (0x1FCC, 'M', u'ηι'), - (0x1FCD, '3', u' ̓̀'), - (0x1FCE, '3', u' ̓́'), - (0x1FCF, '3', u' ̓͂'), - (0x1FD0, 'V'), - (0x1FD3, 'M', u'ΐ'), - (0x1FD4, 'X'), - (0x1FD6, 'V'), - (0x1FD8, 'M', u'ῐ'), - (0x1FD9, 'M', u'ῑ'), - (0x1FDA, 'M', u'ὶ'), - (0x1FDB, 'M', u'ί'), - (0x1FDC, 'X'), - (0x1FDD, '3', u' ̔̀'), - (0x1FDE, '3', u' ̔́'), - (0x1FDF, '3', u' ̔͂'), - (0x1FE0, 'V'), - (0x1FE3, 'M', u'ΰ'), - (0x1FE4, 'V'), - (0x1FE8, 'M', u'ῠ'), - (0x1FE9, 'M', u'ῡ'), - (0x1FEA, 'M', u'ὺ'), - (0x1FEB, 'M', u'ύ'), - (0x1FEC, 'M', u'ῥ'), - (0x1FED, '3', u' ̈̀'), - (0x1FEE, '3', u' ̈́'), - (0x1FEF, '3', u'`'), - (0x1FF0, 'X'), - (0x1FF2, 'M', u'ὼι'), - (0x1FF3, 'M', u'ωι'), - (0x1FF4, 'M', u'ώι'), - (0x1FF5, 'X'), - (0x1FF6, 'V'), - (0x1FF7, 'M', u'ῶι'), - (0x1FF8, 'M', u'ὸ'), - (0x1FF9, 'M', u'ό'), - (0x1FFA, 'M', u'ὼ'), - (0x1FFB, 'M', u'ώ'), - (0x1FFC, 'M', u'ωι'), - (0x1FFD, '3', u' ́'), - (0x1FFE, '3', u' ̔'), - (0x1FFF, 'X'), - (0x2000, '3', u' '), - (0x200B, 'I'), - (0x200C, 'D', u''), - (0x200E, 'X'), - (0x2010, 'V'), - (0x2011, 'M', u'‐'), - (0x2012, 'V'), - (0x2017, '3', u' ̳'), - (0x2018, 'V'), - (0x2024, 'X'), - (0x2027, 'V'), - (0x2028, 'X'), - (0x202F, '3', u' '), - (0x2030, 'V'), - (0x2033, 'M', u'′′'), - (0x2034, 'M', u'′′′'), - (0x2035, 'V'), - (0x2036, 'M', u'‵‵'), - (0x2037, 'M', u'‵‵‵'), - (0x2038, 'V'), - (0x203C, '3', u'!!'), - (0x203D, 'V'), - (0x203E, '3', u' ̅'), - (0x203F, 'V'), - (0x2047, '3', u'??'), - (0x2048, '3', u'?!'), - (0x2049, '3', u'!?'), - (0x204A, 'V'), - (0x2057, 'M', u'′′′′'), - (0x2058, 'V'), - ] - -def _seg_21(): - return [ - (0x205F, '3', u' '), - (0x2060, 'I'), - (0x2061, 'X'), - (0x2064, 'I'), - (0x2065, 'X'), - (0x2070, 'M', u'0'), - (0x2071, 'M', u'i'), - (0x2072, 'X'), - (0x2074, 'M', u'4'), - (0x2075, 'M', u'5'), - (0x2076, 'M', u'6'), - (0x2077, 'M', u'7'), - (0x2078, 'M', u'8'), - (0x2079, 'M', u'9'), - (0x207A, '3', u'+'), - (0x207B, 'M', u'−'), - (0x207C, '3', u'='), - (0x207D, '3', u'('), - (0x207E, '3', u')'), - (0x207F, 'M', u'n'), - (0x2080, 'M', u'0'), - (0x2081, 'M', u'1'), - (0x2082, 'M', u'2'), - (0x2083, 'M', u'3'), - (0x2084, 'M', u'4'), - (0x2085, 'M', u'5'), - (0x2086, 'M', u'6'), - (0x2087, 'M', u'7'), - (0x2088, 'M', u'8'), - (0x2089, 'M', u'9'), - (0x208A, '3', u'+'), - (0x208B, 'M', u'−'), - (0x208C, '3', u'='), - (0x208D, '3', u'('), - (0x208E, '3', u')'), - (0x208F, 'X'), - (0x2090, 'M', u'a'), - (0x2091, 'M', u'e'), - (0x2092, 'M', u'o'), - (0x2093, 'M', u'x'), - (0x2094, 'M', u'ə'), - (0x2095, 'M', u'h'), - (0x2096, 'M', u'k'), - (0x2097, 'M', u'l'), - (0x2098, 'M', u'm'), - (0x2099, 'M', u'n'), - (0x209A, 'M', u'p'), - (0x209B, 'M', u's'), - (0x209C, 'M', u't'), - (0x209D, 'X'), - (0x20A0, 'V'), - (0x20A8, 'M', u'rs'), - (0x20A9, 'V'), - (0x20BB, 'X'), - (0x20D0, 'V'), - (0x20F1, 'X'), - (0x2100, '3', u'a/c'), - (0x2101, '3', u'a/s'), - (0x2102, 'M', u'c'), - (0x2103, 'M', u'°c'), - (0x2104, 'V'), - (0x2105, '3', u'c/o'), - (0x2106, '3', u'c/u'), - (0x2107, 'M', u'ɛ'), - (0x2108, 'V'), - (0x2109, 'M', u'°f'), - (0x210A, 'M', u'g'), - (0x210B, 'M', u'h'), - (0x210F, 'M', u'ħ'), - (0x2110, 'M', u'i'), - (0x2112, 'M', u'l'), - (0x2114, 'V'), - (0x2115, 'M', u'n'), - (0x2116, 'M', u'no'), - (0x2117, 'V'), - (0x2119, 'M', u'p'), - (0x211A, 'M', u'q'), - (0x211B, 'M', u'r'), - (0x211E, 'V'), - (0x2120, 'M', u'sm'), - (0x2121, 'M', u'tel'), - (0x2122, 'M', u'tm'), - (0x2123, 'V'), - (0x2124, 'M', u'z'), - (0x2125, 'V'), - (0x2126, 'M', u'ω'), - (0x2127, 'V'), - (0x2128, 'M', u'z'), - (0x2129, 'V'), - (0x212A, 'M', u'k'), - (0x212B, 'M', u'å'), - (0x212C, 'M', u'b'), - (0x212D, 'M', u'c'), - (0x212E, 'V'), - (0x212F, 'M', u'e'), - (0x2131, 'M', u'f'), - (0x2132, 'X'), - (0x2133, 'M', u'm'), - (0x2134, 'M', u'o'), - (0x2135, 'M', u'א'), - ] - -def _seg_22(): - return [ - (0x2136, 'M', u'ב'), - (0x2137, 'M', u'ג'), - (0x2138, 'M', u'ד'), - (0x2139, 'M', u'i'), - (0x213A, 'V'), - (0x213B, 'M', u'fax'), - (0x213C, 'M', u'π'), - (0x213D, 'M', u'γ'), - (0x213F, 'M', u'π'), - (0x2140, 'M', u'∑'), - (0x2141, 'V'), - (0x2145, 'M', u'd'), - (0x2147, 'M', u'e'), - (0x2148, 'M', u'i'), - (0x2149, 'M', u'j'), - (0x214A, 'V'), - (0x2150, 'M', u'1⁄7'), - (0x2151, 'M', u'1⁄9'), - (0x2152, 'M', u'1⁄10'), - (0x2153, 'M', u'1⁄3'), - (0x2154, 'M', u'2⁄3'), - (0x2155, 'M', u'1⁄5'), - (0x2156, 'M', u'2⁄5'), - (0x2157, 'M', u'3⁄5'), - (0x2158, 'M', u'4⁄5'), - (0x2159, 'M', u'1⁄6'), - (0x215A, 'M', u'5⁄6'), - (0x215B, 'M', u'1⁄8'), - (0x215C, 'M', u'3⁄8'), - (0x215D, 'M', u'5⁄8'), - (0x215E, 'M', u'7⁄8'), - (0x215F, 'M', u'1⁄'), - (0x2160, 'M', u'i'), - (0x2161, 'M', u'ii'), - (0x2162, 'M', u'iii'), - (0x2163, 'M', u'iv'), - (0x2164, 'M', u'v'), - (0x2165, 'M', u'vi'), - (0x2166, 'M', u'vii'), - (0x2167, 'M', u'viii'), - (0x2168, 'M', u'ix'), - (0x2169, 'M', u'x'), - (0x216A, 'M', u'xi'), - (0x216B, 'M', u'xii'), - (0x216C, 'M', u'l'), - (0x216D, 'M', u'c'), - (0x216E, 'M', u'd'), - (0x216F, 'M', u'm'), - (0x2170, 'M', u'i'), - (0x2171, 'M', u'ii'), - (0x2172, 'M', u'iii'), - (0x2173, 'M', u'iv'), - (0x2174, 'M', u'v'), - (0x2175, 'M', u'vi'), - (0x2176, 'M', u'vii'), - (0x2177, 'M', u'viii'), - (0x2178, 'M', u'ix'), - (0x2179, 'M', u'x'), - (0x217A, 'M', u'xi'), - (0x217B, 'M', u'xii'), - (0x217C, 'M', u'l'), - (0x217D, 'M', u'c'), - (0x217E, 'M', u'd'), - (0x217F, 'M', u'm'), - (0x2180, 'V'), - (0x2183, 'X'), - (0x2184, 'V'), - (0x2189, 'M', u'0⁄3'), - (0x218A, 'X'), - (0x2190, 'V'), - (0x222C, 'M', u'∫∫'), - (0x222D, 'M', u'∫∫∫'), - (0x222E, 'V'), - (0x222F, 'M', u'∮∮'), - (0x2230, 'M', u'∮∮∮'), - (0x2231, 'V'), - (0x2260, '3'), - (0x2261, 'V'), - (0x226E, '3'), - (0x2270, 'V'), - (0x2329, 'M', u'〈'), - (0x232A, 'M', u'〉'), - (0x232B, 'V'), - (0x23F4, 'X'), - (0x2400, 'V'), - (0x2427, 'X'), - (0x2440, 'V'), - (0x244B, 'X'), - (0x2460, 'M', u'1'), - (0x2461, 'M', u'2'), - (0x2462, 'M', u'3'), - (0x2463, 'M', u'4'), - (0x2464, 'M', u'5'), - (0x2465, 'M', u'6'), - (0x2466, 'M', u'7'), - (0x2467, 'M', u'8'), - (0x2468, 'M', u'9'), - (0x2469, 'M', u'10'), - (0x246A, 'M', u'11'), - (0x246B, 'M', u'12'), - ] - -def _seg_23(): - return [ - (0x246C, 'M', u'13'), - (0x246D, 'M', u'14'), - (0x246E, 'M', u'15'), - (0x246F, 'M', u'16'), - (0x2470, 'M', u'17'), - (0x2471, 'M', u'18'), - (0x2472, 'M', u'19'), - (0x2473, 'M', u'20'), - (0x2474, '3', u'(1)'), - (0x2475, '3', u'(2)'), - (0x2476, '3', u'(3)'), - (0x2477, '3', u'(4)'), - (0x2478, '3', u'(5)'), - (0x2479, '3', u'(6)'), - (0x247A, '3', u'(7)'), - (0x247B, '3', u'(8)'), - (0x247C, '3', u'(9)'), - (0x247D, '3', u'(10)'), - (0x247E, '3', u'(11)'), - (0x247F, '3', u'(12)'), - (0x2480, '3', u'(13)'), - (0x2481, '3', u'(14)'), - (0x2482, '3', u'(15)'), - (0x2483, '3', u'(16)'), - (0x2484, '3', u'(17)'), - (0x2485, '3', u'(18)'), - (0x2486, '3', u'(19)'), - (0x2487, '3', u'(20)'), - (0x2488, 'X'), - (0x249C, '3', u'(a)'), - (0x249D, '3', u'(b)'), - (0x249E, '3', u'(c)'), - (0x249F, '3', u'(d)'), - (0x24A0, '3', u'(e)'), - (0x24A1, '3', u'(f)'), - (0x24A2, '3', u'(g)'), - (0x24A3, '3', u'(h)'), - (0x24A4, '3', u'(i)'), - (0x24A5, '3', u'(j)'), - (0x24A6, '3', u'(k)'), - (0x24A7, '3', u'(l)'), - (0x24A8, '3', u'(m)'), - (0x24A9, '3', u'(n)'), - (0x24AA, '3', u'(o)'), - (0x24AB, '3', u'(p)'), - (0x24AC, '3', u'(q)'), - (0x24AD, '3', u'(r)'), - (0x24AE, '3', u'(s)'), - (0x24AF, '3', u'(t)'), - (0x24B0, '3', u'(u)'), - (0x24B1, '3', u'(v)'), - (0x24B2, '3', u'(w)'), - (0x24B3, '3', u'(x)'), - (0x24B4, '3', u'(y)'), - (0x24B5, '3', u'(z)'), - (0x24B6, 'M', u'a'), - (0x24B7, 'M', u'b'), - (0x24B8, 'M', u'c'), - (0x24B9, 'M', u'd'), - (0x24BA, 'M', u'e'), - (0x24BB, 'M', u'f'), - (0x24BC, 'M', u'g'), - (0x24BD, 'M', u'h'), - (0x24BE, 'M', u'i'), - (0x24BF, 'M', u'j'), - (0x24C0, 'M', u'k'), - (0x24C1, 'M', u'l'), - (0x24C2, 'M', u'm'), - (0x24C3, 'M', u'n'), - (0x24C4, 'M', u'o'), - (0x24C5, 'M', u'p'), - (0x24C6, 'M', u'q'), - (0x24C7, 'M', u'r'), - (0x24C8, 'M', u's'), - (0x24C9, 'M', u't'), - (0x24CA, 'M', u'u'), - (0x24CB, 'M', u'v'), - (0x24CC, 'M', u'w'), - (0x24CD, 'M', u'x'), - (0x24CE, 'M', u'y'), - (0x24CF, 'M', u'z'), - (0x24D0, 'M', u'a'), - (0x24D1, 'M', u'b'), - (0x24D2, 'M', u'c'), - (0x24D3, 'M', u'd'), - (0x24D4, 'M', u'e'), - (0x24D5, 'M', u'f'), - (0x24D6, 'M', u'g'), - (0x24D7, 'M', u'h'), - (0x24D8, 'M', u'i'), - (0x24D9, 'M', u'j'), - (0x24DA, 'M', u'k'), - (0x24DB, 'M', u'l'), - (0x24DC, 'M', u'm'), - (0x24DD, 'M', u'n'), - (0x24DE, 'M', u'o'), - (0x24DF, 'M', u'p'), - (0x24E0, 'M', u'q'), - (0x24E1, 'M', u'r'), - (0x24E2, 'M', u's'), - ] - -def _seg_24(): - return [ - (0x24E3, 'M', u't'), - (0x24E4, 'M', u'u'), - (0x24E5, 'M', u'v'), - (0x24E6, 'M', u'w'), - (0x24E7, 'M', u'x'), - (0x24E8, 'M', u'y'), - (0x24E9, 'M', u'z'), - (0x24EA, 'M', u'0'), - (0x24EB, 'V'), - (0x2700, 'X'), - (0x2701, 'V'), - (0x2A0C, 'M', u'∫∫∫∫'), - (0x2A0D, 'V'), - (0x2A74, '3', u'::='), - (0x2A75, '3', u'=='), - (0x2A76, '3', u'==='), - (0x2A77, 'V'), - (0x2ADC, 'M', u'⫝̸'), - (0x2ADD, 'V'), - (0x2B4D, 'X'), - (0x2B50, 'V'), - (0x2B5A, 'X'), - (0x2C00, 'M', u'ⰰ'), - (0x2C01, 'M', u'ⰱ'), - (0x2C02, 'M', u'ⰲ'), - (0x2C03, 'M', u'ⰳ'), - (0x2C04, 'M', u'ⰴ'), - (0x2C05, 'M', u'ⰵ'), - (0x2C06, 'M', u'ⰶ'), - (0x2C07, 'M', u'ⰷ'), - (0x2C08, 'M', u'ⰸ'), - (0x2C09, 'M', u'ⰹ'), - (0x2C0A, 'M', u'ⰺ'), - (0x2C0B, 'M', u'ⰻ'), - (0x2C0C, 'M', u'ⰼ'), - (0x2C0D, 'M', u'ⰽ'), - (0x2C0E, 'M', u'ⰾ'), - (0x2C0F, 'M', u'ⰿ'), - (0x2C10, 'M', u'ⱀ'), - (0x2C11, 'M', u'ⱁ'), - (0x2C12, 'M', u'ⱂ'), - (0x2C13, 'M', u'ⱃ'), - (0x2C14, 'M', u'ⱄ'), - (0x2C15, 'M', u'ⱅ'), - (0x2C16, 'M', u'ⱆ'), - (0x2C17, 'M', u'ⱇ'), - (0x2C18, 'M', u'ⱈ'), - (0x2C19, 'M', u'ⱉ'), - (0x2C1A, 'M', u'ⱊ'), - (0x2C1B, 'M', u'ⱋ'), - (0x2C1C, 'M', u'ⱌ'), - (0x2C1D, 'M', u'ⱍ'), - (0x2C1E, 'M', u'ⱎ'), - (0x2C1F, 'M', u'ⱏ'), - (0x2C20, 'M', u'ⱐ'), - (0x2C21, 'M', u'ⱑ'), - (0x2C22, 'M', u'ⱒ'), - (0x2C23, 'M', u'ⱓ'), - (0x2C24, 'M', u'ⱔ'), - (0x2C25, 'M', u'ⱕ'), - (0x2C26, 'M', u'ⱖ'), - (0x2C27, 'M', u'ⱗ'), - (0x2C28, 'M', u'ⱘ'), - (0x2C29, 'M', u'ⱙ'), - (0x2C2A, 'M', u'ⱚ'), - (0x2C2B, 'M', u'ⱛ'), - (0x2C2C, 'M', u'ⱜ'), - (0x2C2D, 'M', u'ⱝ'), - (0x2C2E, 'M', u'ⱞ'), - (0x2C2F, 'X'), - (0x2C30, 'V'), - (0x2C5F, 'X'), - (0x2C60, 'M', u'ⱡ'), - (0x2C61, 'V'), - (0x2C62, 'M', u'ɫ'), - (0x2C63, 'M', u'ᵽ'), - (0x2C64, 'M', u'ɽ'), - (0x2C65, 'V'), - (0x2C67, 'M', u'ⱨ'), - (0x2C68, 'V'), - (0x2C69, 'M', u'ⱪ'), - (0x2C6A, 'V'), - (0x2C6B, 'M', u'ⱬ'), - (0x2C6C, 'V'), - (0x2C6D, 'M', u'ɑ'), - (0x2C6E, 'M', u'ɱ'), - (0x2C6F, 'M', u'ɐ'), - (0x2C70, 'M', u'ɒ'), - (0x2C71, 'V'), - (0x2C72, 'M', u'ⱳ'), - (0x2C73, 'V'), - (0x2C75, 'M', u'ⱶ'), - (0x2C76, 'V'), - (0x2C7C, 'M', u'j'), - (0x2C7D, 'M', u'v'), - (0x2C7E, 'M', u'ȿ'), - (0x2C7F, 'M', u'ɀ'), - (0x2C80, 'M', u'ⲁ'), - (0x2C81, 'V'), - (0x2C82, 'M', u'ⲃ'), - ] - -def _seg_25(): - return [ - (0x2C83, 'V'), - (0x2C84, 'M', u'ⲅ'), - (0x2C85, 'V'), - (0x2C86, 'M', u'ⲇ'), - (0x2C87, 'V'), - (0x2C88, 'M', u'ⲉ'), - (0x2C89, 'V'), - (0x2C8A, 'M', u'ⲋ'), - (0x2C8B, 'V'), - (0x2C8C, 'M', u'ⲍ'), - (0x2C8D, 'V'), - (0x2C8E, 'M', u'ⲏ'), - (0x2C8F, 'V'), - (0x2C90, 'M', u'ⲑ'), - (0x2C91, 'V'), - (0x2C92, 'M', u'ⲓ'), - (0x2C93, 'V'), - (0x2C94, 'M', u'ⲕ'), - (0x2C95, 'V'), - (0x2C96, 'M', u'ⲗ'), - (0x2C97, 'V'), - (0x2C98, 'M', u'ⲙ'), - (0x2C99, 'V'), - (0x2C9A, 'M', u'ⲛ'), - (0x2C9B, 'V'), - (0x2C9C, 'M', u'ⲝ'), - (0x2C9D, 'V'), - (0x2C9E, 'M', u'ⲟ'), - (0x2C9F, 'V'), - (0x2CA0, 'M', u'ⲡ'), - (0x2CA1, 'V'), - (0x2CA2, 'M', u'ⲣ'), - (0x2CA3, 'V'), - (0x2CA4, 'M', u'ⲥ'), - (0x2CA5, 'V'), - (0x2CA6, 'M', u'ⲧ'), - (0x2CA7, 'V'), - (0x2CA8, 'M', u'ⲩ'), - (0x2CA9, 'V'), - (0x2CAA, 'M', u'ⲫ'), - (0x2CAB, 'V'), - (0x2CAC, 'M', u'ⲭ'), - (0x2CAD, 'V'), - (0x2CAE, 'M', u'ⲯ'), - (0x2CAF, 'V'), - (0x2CB0, 'M', u'ⲱ'), - (0x2CB1, 'V'), - (0x2CB2, 'M', u'ⲳ'), - (0x2CB3, 'V'), - (0x2CB4, 'M', u'ⲵ'), - (0x2CB5, 'V'), - (0x2CB6, 'M', u'ⲷ'), - (0x2CB7, 'V'), - (0x2CB8, 'M', u'ⲹ'), - (0x2CB9, 'V'), - (0x2CBA, 'M', u'ⲻ'), - (0x2CBB, 'V'), - (0x2CBC, 'M', u'ⲽ'), - (0x2CBD, 'V'), - (0x2CBE, 'M', u'ⲿ'), - (0x2CBF, 'V'), - (0x2CC0, 'M', u'ⳁ'), - (0x2CC1, 'V'), - (0x2CC2, 'M', u'ⳃ'), - (0x2CC3, 'V'), - (0x2CC4, 'M', u'ⳅ'), - (0x2CC5, 'V'), - (0x2CC6, 'M', u'ⳇ'), - (0x2CC7, 'V'), - (0x2CC8, 'M', u'ⳉ'), - (0x2CC9, 'V'), - (0x2CCA, 'M', u'ⳋ'), - (0x2CCB, 'V'), - (0x2CCC, 'M', u'ⳍ'), - (0x2CCD, 'V'), - (0x2CCE, 'M', u'ⳏ'), - (0x2CCF, 'V'), - (0x2CD0, 'M', u'ⳑ'), - (0x2CD1, 'V'), - (0x2CD2, 'M', u'ⳓ'), - (0x2CD3, 'V'), - (0x2CD4, 'M', u'ⳕ'), - (0x2CD5, 'V'), - (0x2CD6, 'M', u'ⳗ'), - (0x2CD7, 'V'), - (0x2CD8, 'M', u'ⳙ'), - (0x2CD9, 'V'), - (0x2CDA, 'M', u'ⳛ'), - (0x2CDB, 'V'), - (0x2CDC, 'M', u'ⳝ'), - (0x2CDD, 'V'), - (0x2CDE, 'M', u'ⳟ'), - (0x2CDF, 'V'), - (0x2CE0, 'M', u'ⳡ'), - (0x2CE1, 'V'), - (0x2CE2, 'M', u'ⳣ'), - (0x2CE3, 'V'), - (0x2CEB, 'M', u'ⳬ'), - (0x2CEC, 'V'), - (0x2CED, 'M', u'ⳮ'), - ] - -def _seg_26(): - return [ - (0x2CEE, 'V'), - (0x2CF2, 'M', u'ⳳ'), - (0x2CF3, 'V'), - (0x2CF4, 'X'), - (0x2CF9, 'V'), - (0x2D26, 'X'), - (0x2D27, 'V'), - (0x2D28, 'X'), - (0x2D2D, 'V'), - (0x2D2E, 'X'), - (0x2D30, 'V'), - (0x2D68, 'X'), - (0x2D6F, 'M', u'ⵡ'), - (0x2D70, 'V'), - (0x2D71, 'X'), - (0x2D7F, 'V'), - (0x2D97, 'X'), - (0x2DA0, 'V'), - (0x2DA7, 'X'), - (0x2DA8, 'V'), - (0x2DAF, 'X'), - (0x2DB0, 'V'), - (0x2DB7, 'X'), - (0x2DB8, 'V'), - (0x2DBF, 'X'), - (0x2DC0, 'V'), - (0x2DC7, 'X'), - (0x2DC8, 'V'), - (0x2DCF, 'X'), - (0x2DD0, 'V'), - (0x2DD7, 'X'), - (0x2DD8, 'V'), - (0x2DDF, 'X'), - (0x2DE0, 'V'), - (0x2E3C, 'X'), - (0x2E80, 'V'), - (0x2E9A, 'X'), - (0x2E9B, 'V'), - (0x2E9F, 'M', u'母'), - (0x2EA0, 'V'), - (0x2EF3, 'M', u'龟'), - (0x2EF4, 'X'), - (0x2F00, 'M', u'一'), - (0x2F01, 'M', u'丨'), - (0x2F02, 'M', u'丶'), - (0x2F03, 'M', u'丿'), - (0x2F04, 'M', u'乙'), - (0x2F05, 'M', u'亅'), - (0x2F06, 'M', u'二'), - (0x2F07, 'M', u'亠'), - (0x2F08, 'M', u'人'), - (0x2F09, 'M', u'儿'), - (0x2F0A, 'M', u'入'), - (0x2F0B, 'M', u'八'), - (0x2F0C, 'M', u'冂'), - (0x2F0D, 'M', u'冖'), - (0x2F0E, 'M', u'冫'), - (0x2F0F, 'M', u'几'), - (0x2F10, 'M', u'凵'), - (0x2F11, 'M', u'刀'), - (0x2F12, 'M', u'力'), - (0x2F13, 'M', u'勹'), - (0x2F14, 'M', u'匕'), - (0x2F15, 'M', u'匚'), - (0x2F16, 'M', u'匸'), - (0x2F17, 'M', u'十'), - (0x2F18, 'M', u'卜'), - (0x2F19, 'M', u'卩'), - (0x2F1A, 'M', u'厂'), - (0x2F1B, 'M', u'厶'), - (0x2F1C, 'M', u'又'), - (0x2F1D, 'M', u'口'), - (0x2F1E, 'M', u'囗'), - (0x2F1F, 'M', u'土'), - (0x2F20, 'M', u'士'), - (0x2F21, 'M', u'夂'), - (0x2F22, 'M', u'夊'), - (0x2F23, 'M', u'夕'), - (0x2F24, 'M', u'大'), - (0x2F25, 'M', u'女'), - (0x2F26, 'M', u'子'), - (0x2F27, 'M', u'宀'), - (0x2F28, 'M', u'寸'), - (0x2F29, 'M', u'小'), - (0x2F2A, 'M', u'尢'), - (0x2F2B, 'M', u'尸'), - (0x2F2C, 'M', u'屮'), - (0x2F2D, 'M', u'山'), - (0x2F2E, 'M', u'巛'), - (0x2F2F, 'M', u'工'), - (0x2F30, 'M', u'己'), - (0x2F31, 'M', u'巾'), - (0x2F32, 'M', u'干'), - (0x2F33, 'M', u'幺'), - (0x2F34, 'M', u'广'), - (0x2F35, 'M', u'廴'), - (0x2F36, 'M', u'廾'), - (0x2F37, 'M', u'弋'), - (0x2F38, 'M', u'弓'), - (0x2F39, 'M', u'彐'), - ] - -def _seg_27(): - return [ - (0x2F3A, 'M', u'彡'), - (0x2F3B, 'M', u'彳'), - (0x2F3C, 'M', u'心'), - (0x2F3D, 'M', u'戈'), - (0x2F3E, 'M', u'戶'), - (0x2F3F, 'M', u'手'), - (0x2F40, 'M', u'支'), - (0x2F41, 'M', u'攴'), - (0x2F42, 'M', u'文'), - (0x2F43, 'M', u'斗'), - (0x2F44, 'M', u'斤'), - (0x2F45, 'M', u'方'), - (0x2F46, 'M', u'无'), - (0x2F47, 'M', u'日'), - (0x2F48, 'M', u'曰'), - (0x2F49, 'M', u'月'), - (0x2F4A, 'M', u'木'), - (0x2F4B, 'M', u'欠'), - (0x2F4C, 'M', u'止'), - (0x2F4D, 'M', u'歹'), - (0x2F4E, 'M', u'殳'), - (0x2F4F, 'M', u'毋'), - (0x2F50, 'M', u'比'), - (0x2F51, 'M', u'毛'), - (0x2F52, 'M', u'氏'), - (0x2F53, 'M', u'气'), - (0x2F54, 'M', u'水'), - (0x2F55, 'M', u'火'), - (0x2F56, 'M', u'爪'), - (0x2F57, 'M', u'父'), - (0x2F58, 'M', u'爻'), - (0x2F59, 'M', u'爿'), - (0x2F5A, 'M', u'片'), - (0x2F5B, 'M', u'牙'), - (0x2F5C, 'M', u'牛'), - (0x2F5D, 'M', u'犬'), - (0x2F5E, 'M', u'玄'), - (0x2F5F, 'M', u'玉'), - (0x2F60, 'M', u'瓜'), - (0x2F61, 'M', u'瓦'), - (0x2F62, 'M', u'甘'), - (0x2F63, 'M', u'生'), - (0x2F64, 'M', u'用'), - (0x2F65, 'M', u'田'), - (0x2F66, 'M', u'疋'), - (0x2F67, 'M', u'疒'), - (0x2F68, 'M', u'癶'), - (0x2F69, 'M', u'白'), - (0x2F6A, 'M', u'皮'), - (0x2F6B, 'M', u'皿'), - (0x2F6C, 'M', u'目'), - (0x2F6D, 'M', u'矛'), - (0x2F6E, 'M', u'矢'), - (0x2F6F, 'M', u'石'), - (0x2F70, 'M', u'示'), - (0x2F71, 'M', u'禸'), - (0x2F72, 'M', u'禾'), - (0x2F73, 'M', u'穴'), - (0x2F74, 'M', u'立'), - (0x2F75, 'M', u'竹'), - (0x2F76, 'M', u'米'), - (0x2F77, 'M', u'糸'), - (0x2F78, 'M', u'缶'), - (0x2F79, 'M', u'网'), - (0x2F7A, 'M', u'羊'), - (0x2F7B, 'M', u'羽'), - (0x2F7C, 'M', u'老'), - (0x2F7D, 'M', u'而'), - (0x2F7E, 'M', u'耒'), - (0x2F7F, 'M', u'耳'), - (0x2F80, 'M', u'聿'), - (0x2F81, 'M', u'肉'), - (0x2F82, 'M', u'臣'), - (0x2F83, 'M', u'自'), - (0x2F84, 'M', u'至'), - (0x2F85, 'M', u'臼'), - (0x2F86, 'M', u'舌'), - (0x2F87, 'M', u'舛'), - (0x2F88, 'M', u'舟'), - (0x2F89, 'M', u'艮'), - (0x2F8A, 'M', u'色'), - (0x2F8B, 'M', u'艸'), - (0x2F8C, 'M', u'虍'), - (0x2F8D, 'M', u'虫'), - (0x2F8E, 'M', u'血'), - (0x2F8F, 'M', u'行'), - (0x2F90, 'M', u'衣'), - (0x2F91, 'M', u'襾'), - (0x2F92, 'M', u'見'), - (0x2F93, 'M', u'角'), - (0x2F94, 'M', u'言'), - (0x2F95, 'M', u'谷'), - (0x2F96, 'M', u'豆'), - (0x2F97, 'M', u'豕'), - (0x2F98, 'M', u'豸'), - (0x2F99, 'M', u'貝'), - (0x2F9A, 'M', u'赤'), - (0x2F9B, 'M', u'走'), - (0x2F9C, 'M', u'足'), - (0x2F9D, 'M', u'身'), - ] - -def _seg_28(): - return [ - (0x2F9E, 'M', u'車'), - (0x2F9F, 'M', u'辛'), - (0x2FA0, 'M', u'辰'), - (0x2FA1, 'M', u'辵'), - (0x2FA2, 'M', u'邑'), - (0x2FA3, 'M', u'酉'), - (0x2FA4, 'M', u'釆'), - (0x2FA5, 'M', u'里'), - (0x2FA6, 'M', u'金'), - (0x2FA7, 'M', u'長'), - (0x2FA8, 'M', u'門'), - (0x2FA9, 'M', u'阜'), - (0x2FAA, 'M', u'隶'), - (0x2FAB, 'M', u'隹'), - (0x2FAC, 'M', u'雨'), - (0x2FAD, 'M', u'靑'), - (0x2FAE, 'M', u'非'), - (0x2FAF, 'M', u'面'), - (0x2FB0, 'M', u'革'), - (0x2FB1, 'M', u'韋'), - (0x2FB2, 'M', u'韭'), - (0x2FB3, 'M', u'音'), - (0x2FB4, 'M', u'頁'), - (0x2FB5, 'M', u'風'), - (0x2FB6, 'M', u'飛'), - (0x2FB7, 'M', u'食'), - (0x2FB8, 'M', u'首'), - (0x2FB9, 'M', u'香'), - (0x2FBA, 'M', u'馬'), - (0x2FBB, 'M', u'骨'), - (0x2FBC, 'M', u'高'), - (0x2FBD, 'M', u'髟'), - (0x2FBE, 'M', u'鬥'), - (0x2FBF, 'M', u'鬯'), - (0x2FC0, 'M', u'鬲'), - (0x2FC1, 'M', u'鬼'), - (0x2FC2, 'M', u'魚'), - (0x2FC3, 'M', u'鳥'), - (0x2FC4, 'M', u'鹵'), - (0x2FC5, 'M', u'鹿'), - (0x2FC6, 'M', u'麥'), - (0x2FC7, 'M', u'麻'), - (0x2FC8, 'M', u'黃'), - (0x2FC9, 'M', u'黍'), - (0x2FCA, 'M', u'黑'), - (0x2FCB, 'M', u'黹'), - (0x2FCC, 'M', u'黽'), - (0x2FCD, 'M', u'鼎'), - (0x2FCE, 'M', u'鼓'), - (0x2FCF, 'M', u'鼠'), - (0x2FD0, 'M', u'鼻'), - (0x2FD1, 'M', u'齊'), - (0x2FD2, 'M', u'齒'), - (0x2FD3, 'M', u'龍'), - (0x2FD4, 'M', u'龜'), - (0x2FD5, 'M', u'龠'), - (0x2FD6, 'X'), - (0x3000, '3', u' '), - (0x3001, 'V'), - (0x3002, 'M', u'.'), - (0x3003, 'V'), - (0x3036, 'M', u'〒'), - (0x3037, 'V'), - (0x3038, 'M', u'十'), - (0x3039, 'M', u'卄'), - (0x303A, 'M', u'卅'), - (0x303B, 'V'), - (0x3040, 'X'), - (0x3041, 'V'), - (0x3097, 'X'), - (0x3099, 'V'), - (0x309B, '3', u' ゙'), - (0x309C, '3', u' ゚'), - (0x309D, 'V'), - (0x309F, 'M', u'より'), - (0x30A0, 'V'), - (0x30FF, 'M', u'コト'), - (0x3100, 'X'), - (0x3105, 'V'), - (0x312E, 'X'), - (0x3131, 'M', u'ᄀ'), - (0x3132, 'M', u'ᄁ'), - (0x3133, 'M', u'ᆪ'), - (0x3134, 'M', u'ᄂ'), - (0x3135, 'M', u'ᆬ'), - (0x3136, 'M', u'ᆭ'), - (0x3137, 'M', u'ᄃ'), - (0x3138, 'M', u'ᄄ'), - (0x3139, 'M', u'ᄅ'), - (0x313A, 'M', u'ᆰ'), - (0x313B, 'M', u'ᆱ'), - (0x313C, 'M', u'ᆲ'), - (0x313D, 'M', u'ᆳ'), - (0x313E, 'M', u'ᆴ'), - (0x313F, 'M', u'ᆵ'), - (0x3140, 'M', u'ᄚ'), - (0x3141, 'M', u'ᄆ'), - (0x3142, 'M', u'ᄇ'), - (0x3143, 'M', u'ᄈ'), - (0x3144, 'M', u'ᄡ'), - ] - -def _seg_29(): - return [ - (0x3145, 'M', u'ᄉ'), - (0x3146, 'M', u'ᄊ'), - (0x3147, 'M', u'ᄋ'), - (0x3148, 'M', u'ᄌ'), - (0x3149, 'M', u'ᄍ'), - (0x314A, 'M', u'ᄎ'), - (0x314B, 'M', u'ᄏ'), - (0x314C, 'M', u'ᄐ'), - (0x314D, 'M', u'ᄑ'), - (0x314E, 'M', u'ᄒ'), - (0x314F, 'M', u'ᅡ'), - (0x3150, 'M', u'ᅢ'), - (0x3151, 'M', u'ᅣ'), - (0x3152, 'M', u'ᅤ'), - (0x3153, 'M', u'ᅥ'), - (0x3154, 'M', u'ᅦ'), - (0x3155, 'M', u'ᅧ'), - (0x3156, 'M', u'ᅨ'), - (0x3157, 'M', u'ᅩ'), - (0x3158, 'M', u'ᅪ'), - (0x3159, 'M', u'ᅫ'), - (0x315A, 'M', u'ᅬ'), - (0x315B, 'M', u'ᅭ'), - (0x315C, 'M', u'ᅮ'), - (0x315D, 'M', u'ᅯ'), - (0x315E, 'M', u'ᅰ'), - (0x315F, 'M', u'ᅱ'), - (0x3160, 'M', u'ᅲ'), - (0x3161, 'M', u'ᅳ'), - (0x3162, 'M', u'ᅴ'), - (0x3163, 'M', u'ᅵ'), - (0x3164, 'X'), - (0x3165, 'M', u'ᄔ'), - (0x3166, 'M', u'ᄕ'), - (0x3167, 'M', u'ᇇ'), - (0x3168, 'M', u'ᇈ'), - (0x3169, 'M', u'ᇌ'), - (0x316A, 'M', u'ᇎ'), - (0x316B, 'M', u'ᇓ'), - (0x316C, 'M', u'ᇗ'), - (0x316D, 'M', u'ᇙ'), - (0x316E, 'M', u'ᄜ'), - (0x316F, 'M', u'ᇝ'), - (0x3170, 'M', u'ᇟ'), - (0x3171, 'M', u'ᄝ'), - (0x3172, 'M', u'ᄞ'), - (0x3173, 'M', u'ᄠ'), - (0x3174, 'M', u'ᄢ'), - (0x3175, 'M', u'ᄣ'), - (0x3176, 'M', u'ᄧ'), - (0x3177, 'M', u'ᄩ'), - (0x3178, 'M', u'ᄫ'), - (0x3179, 'M', u'ᄬ'), - (0x317A, 'M', u'ᄭ'), - (0x317B, 'M', u'ᄮ'), - (0x317C, 'M', u'ᄯ'), - (0x317D, 'M', u'ᄲ'), - (0x317E, 'M', u'ᄶ'), - (0x317F, 'M', u'ᅀ'), - (0x3180, 'M', u'ᅇ'), - (0x3181, 'M', u'ᅌ'), - (0x3182, 'M', u'ᇱ'), - (0x3183, 'M', u'ᇲ'), - (0x3184, 'M', u'ᅗ'), - (0x3185, 'M', u'ᅘ'), - (0x3186, 'M', u'ᅙ'), - (0x3187, 'M', u'ᆄ'), - (0x3188, 'M', u'ᆅ'), - (0x3189, 'M', u'ᆈ'), - (0x318A, 'M', u'ᆑ'), - (0x318B, 'M', u'ᆒ'), - (0x318C, 'M', u'ᆔ'), - (0x318D, 'M', u'ᆞ'), - (0x318E, 'M', u'ᆡ'), - (0x318F, 'X'), - (0x3190, 'V'), - (0x3192, 'M', u'一'), - (0x3193, 'M', u'二'), - (0x3194, 'M', u'三'), - (0x3195, 'M', u'四'), - (0x3196, 'M', u'上'), - (0x3197, 'M', u'中'), - (0x3198, 'M', u'下'), - (0x3199, 'M', u'甲'), - (0x319A, 'M', u'乙'), - (0x319B, 'M', u'丙'), - (0x319C, 'M', u'丁'), - (0x319D, 'M', u'天'), - (0x319E, 'M', u'地'), - (0x319F, 'M', u'人'), - (0x31A0, 'V'), - (0x31BB, 'X'), - (0x31C0, 'V'), - (0x31E4, 'X'), - (0x31F0, 'V'), - (0x3200, '3', u'(ᄀ)'), - (0x3201, '3', u'(ᄂ)'), - (0x3202, '3', u'(ᄃ)'), - (0x3203, '3', u'(ᄅ)'), - (0x3204, '3', u'(ᄆ)'), - ] - -def _seg_30(): - return [ - (0x3205, '3', u'(ᄇ)'), - (0x3206, '3', u'(ᄉ)'), - (0x3207, '3', u'(ᄋ)'), - (0x3208, '3', u'(ᄌ)'), - (0x3209, '3', u'(ᄎ)'), - (0x320A, '3', u'(ᄏ)'), - (0x320B, '3', u'(ᄐ)'), - (0x320C, '3', u'(ᄑ)'), - (0x320D, '3', u'(ᄒ)'), - (0x320E, '3', u'(가)'), - (0x320F, '3', u'(나)'), - (0x3210, '3', u'(다)'), - (0x3211, '3', u'(라)'), - (0x3212, '3', u'(마)'), - (0x3213, '3', u'(바)'), - (0x3214, '3', u'(사)'), - (0x3215, '3', u'(아)'), - (0x3216, '3', u'(자)'), - (0x3217, '3', u'(차)'), - (0x3218, '3', u'(카)'), - (0x3219, '3', u'(타)'), - (0x321A, '3', u'(파)'), - (0x321B, '3', u'(하)'), - (0x321C, '3', u'(주)'), - (0x321D, '3', u'(오전)'), - (0x321E, '3', u'(오후)'), - (0x321F, 'X'), - (0x3220, '3', u'(一)'), - (0x3221, '3', u'(二)'), - (0x3222, '3', u'(三)'), - (0x3223, '3', u'(四)'), - (0x3224, '3', u'(五)'), - (0x3225, '3', u'(六)'), - (0x3226, '3', u'(七)'), - (0x3227, '3', u'(八)'), - (0x3228, '3', u'(九)'), - (0x3229, '3', u'(十)'), - (0x322A, '3', u'(月)'), - (0x322B, '3', u'(火)'), - (0x322C, '3', u'(水)'), - (0x322D, '3', u'(木)'), - (0x322E, '3', u'(金)'), - (0x322F, '3', u'(土)'), - (0x3230, '3', u'(日)'), - (0x3231, '3', u'(株)'), - (0x3232, '3', u'(有)'), - (0x3233, '3', u'(社)'), - (0x3234, '3', u'(名)'), - (0x3235, '3', u'(特)'), - (0x3236, '3', u'(財)'), - (0x3237, '3', u'(祝)'), - (0x3238, '3', u'(労)'), - (0x3239, '3', u'(代)'), - (0x323A, '3', u'(呼)'), - (0x323B, '3', u'(学)'), - (0x323C, '3', u'(監)'), - (0x323D, '3', u'(企)'), - (0x323E, '3', u'(資)'), - (0x323F, '3', u'(協)'), - (0x3240, '3', u'(祭)'), - (0x3241, '3', u'(休)'), - (0x3242, '3', u'(自)'), - (0x3243, '3', u'(至)'), - (0x3244, 'M', u'問'), - (0x3245, 'M', u'幼'), - (0x3246, 'M', u'文'), - (0x3247, 'M', u'箏'), - (0x3248, 'V'), - (0x3250, 'M', u'pte'), - (0x3251, 'M', u'21'), - (0x3252, 'M', u'22'), - (0x3253, 'M', u'23'), - (0x3254, 'M', u'24'), - (0x3255, 'M', u'25'), - (0x3256, 'M', u'26'), - (0x3257, 'M', u'27'), - (0x3258, 'M', u'28'), - (0x3259, 'M', u'29'), - (0x325A, 'M', u'30'), - (0x325B, 'M', u'31'), - (0x325C, 'M', u'32'), - (0x325D, 'M', u'33'), - (0x325E, 'M', u'34'), - (0x325F, 'M', u'35'), - (0x3260, 'M', u'ᄀ'), - (0x3261, 'M', u'ᄂ'), - (0x3262, 'M', u'ᄃ'), - (0x3263, 'M', u'ᄅ'), - (0x3264, 'M', u'ᄆ'), - (0x3265, 'M', u'ᄇ'), - (0x3266, 'M', u'ᄉ'), - (0x3267, 'M', u'ᄋ'), - (0x3268, 'M', u'ᄌ'), - (0x3269, 'M', u'ᄎ'), - (0x326A, 'M', u'ᄏ'), - (0x326B, 'M', u'ᄐ'), - (0x326C, 'M', u'ᄑ'), - (0x326D, 'M', u'ᄒ'), - (0x326E, 'M', u'가'), - (0x326F, 'M', u'나'), - ] - -def _seg_31(): - return [ - (0x3270, 'M', u'다'), - (0x3271, 'M', u'라'), - (0x3272, 'M', u'마'), - (0x3273, 'M', u'바'), - (0x3274, 'M', u'사'), - (0x3275, 'M', u'아'), - (0x3276, 'M', u'자'), - (0x3277, 'M', u'차'), - (0x3278, 'M', u'카'), - (0x3279, 'M', u'타'), - (0x327A, 'M', u'파'), - (0x327B, 'M', u'하'), - (0x327C, 'M', u'참고'), - (0x327D, 'M', u'주의'), - (0x327E, 'M', u'우'), - (0x327F, 'V'), - (0x3280, 'M', u'一'), - (0x3281, 'M', u'二'), - (0x3282, 'M', u'三'), - (0x3283, 'M', u'四'), - (0x3284, 'M', u'五'), - (0x3285, 'M', u'六'), - (0x3286, 'M', u'七'), - (0x3287, 'M', u'八'), - (0x3288, 'M', u'九'), - (0x3289, 'M', u'十'), - (0x328A, 'M', u'月'), - (0x328B, 'M', u'火'), - (0x328C, 'M', u'水'), - (0x328D, 'M', u'木'), - (0x328E, 'M', u'金'), - (0x328F, 'M', u'土'), - (0x3290, 'M', u'日'), - (0x3291, 'M', u'株'), - (0x3292, 'M', u'有'), - (0x3293, 'M', u'社'), - (0x3294, 'M', u'名'), - (0x3295, 'M', u'特'), - (0x3296, 'M', u'財'), - (0x3297, 'M', u'祝'), - (0x3298, 'M', u'労'), - (0x3299, 'M', u'秘'), - (0x329A, 'M', u'男'), - (0x329B, 'M', u'女'), - (0x329C, 'M', u'適'), - (0x329D, 'M', u'優'), - (0x329E, 'M', u'印'), - (0x329F, 'M', u'注'), - (0x32A0, 'M', u'項'), - (0x32A1, 'M', u'休'), - (0x32A2, 'M', u'写'), - (0x32A3, 'M', u'正'), - (0x32A4, 'M', u'上'), - (0x32A5, 'M', u'中'), - (0x32A6, 'M', u'下'), - (0x32A7, 'M', u'左'), - (0x32A8, 'M', u'右'), - (0x32A9, 'M', u'医'), - (0x32AA, 'M', u'宗'), - (0x32AB, 'M', u'学'), - (0x32AC, 'M', u'監'), - (0x32AD, 'M', u'企'), - (0x32AE, 'M', u'資'), - (0x32AF, 'M', u'協'), - (0x32B0, 'M', u'夜'), - (0x32B1, 'M', u'36'), - (0x32B2, 'M', u'37'), - (0x32B3, 'M', u'38'), - (0x32B4, 'M', u'39'), - (0x32B5, 'M', u'40'), - (0x32B6, 'M', u'41'), - (0x32B7, 'M', u'42'), - (0x32B8, 'M', u'43'), - (0x32B9, 'M', u'44'), - (0x32BA, 'M', u'45'), - (0x32BB, 'M', u'46'), - (0x32BC, 'M', u'47'), - (0x32BD, 'M', u'48'), - (0x32BE, 'M', u'49'), - (0x32BF, 'M', u'50'), - (0x32C0, 'M', u'1月'), - (0x32C1, 'M', u'2月'), - (0x32C2, 'M', u'3月'), - (0x32C3, 'M', u'4月'), - (0x32C4, 'M', u'5月'), - (0x32C5, 'M', u'6月'), - (0x32C6, 'M', u'7月'), - (0x32C7, 'M', u'8月'), - (0x32C8, 'M', u'9月'), - (0x32C9, 'M', u'10月'), - (0x32CA, 'M', u'11月'), - (0x32CB, 'M', u'12月'), - (0x32CC, 'M', u'hg'), - (0x32CD, 'M', u'erg'), - (0x32CE, 'M', u'ev'), - (0x32CF, 'M', u'ltd'), - (0x32D0, 'M', u'ア'), - (0x32D1, 'M', u'イ'), - (0x32D2, 'M', u'ウ'), - (0x32D3, 'M', u'エ'), - ] - -def _seg_32(): - return [ - (0x32D4, 'M', u'オ'), - (0x32D5, 'M', u'カ'), - (0x32D6, 'M', u'キ'), - (0x32D7, 'M', u'ク'), - (0x32D8, 'M', u'ケ'), - (0x32D9, 'M', u'コ'), - (0x32DA, 'M', u'サ'), - (0x32DB, 'M', u'シ'), - (0x32DC, 'M', u'ス'), - (0x32DD, 'M', u'セ'), - (0x32DE, 'M', u'ソ'), - (0x32DF, 'M', u'タ'), - (0x32E0, 'M', u'チ'), - (0x32E1, 'M', u'ツ'), - (0x32E2, 'M', u'テ'), - (0x32E3, 'M', u'ト'), - (0x32E4, 'M', u'ナ'), - (0x32E5, 'M', u'ニ'), - (0x32E6, 'M', u'ヌ'), - (0x32E7, 'M', u'ネ'), - (0x32E8, 'M', u'ノ'), - (0x32E9, 'M', u'ハ'), - (0x32EA, 'M', u'ヒ'), - (0x32EB, 'M', u'フ'), - (0x32EC, 'M', u'ヘ'), - (0x32ED, 'M', u'ホ'), - (0x32EE, 'M', u'マ'), - (0x32EF, 'M', u'ミ'), - (0x32F0, 'M', u'ム'), - (0x32F1, 'M', u'メ'), - (0x32F2, 'M', u'モ'), - (0x32F3, 'M', u'ヤ'), - (0x32F4, 'M', u'ユ'), - (0x32F5, 'M', u'ヨ'), - (0x32F6, 'M', u'ラ'), - (0x32F7, 'M', u'リ'), - (0x32F8, 'M', u'ル'), - (0x32F9, 'M', u'レ'), - (0x32FA, 'M', u'ロ'), - (0x32FB, 'M', u'ワ'), - (0x32FC, 'M', u'ヰ'), - (0x32FD, 'M', u'ヱ'), - (0x32FE, 'M', u'ヲ'), - (0x32FF, 'X'), - (0x3300, 'M', u'アパート'), - (0x3301, 'M', u'アルファ'), - (0x3302, 'M', u'アンペア'), - (0x3303, 'M', u'アール'), - (0x3304, 'M', u'イニング'), - (0x3305, 'M', u'インチ'), - (0x3306, 'M', u'ウォン'), - (0x3307, 'M', u'エスクード'), - (0x3308, 'M', u'エーカー'), - (0x3309, 'M', u'オンス'), - (0x330A, 'M', u'オーム'), - (0x330B, 'M', u'カイリ'), - (0x330C, 'M', u'カラット'), - (0x330D, 'M', u'カロリー'), - (0x330E, 'M', u'ガロン'), - (0x330F, 'M', u'ガンマ'), - (0x3310, 'M', u'ギガ'), - (0x3311, 'M', u'ギニー'), - (0x3312, 'M', u'キュリー'), - (0x3313, 'M', u'ギルダー'), - (0x3314, 'M', u'キロ'), - (0x3315, 'M', u'キログラム'), - (0x3316, 'M', u'キロメートル'), - (0x3317, 'M', u'キロワット'), - (0x3318, 'M', u'グラム'), - (0x3319, 'M', u'グラムトン'), - (0x331A, 'M', u'クルゼイロ'), - (0x331B, 'M', u'クローネ'), - (0x331C, 'M', u'ケース'), - (0x331D, 'M', u'コルナ'), - (0x331E, 'M', u'コーポ'), - (0x331F, 'M', u'サイクル'), - (0x3320, 'M', u'サンチーム'), - (0x3321, 'M', u'シリング'), - (0x3322, 'M', u'センチ'), - (0x3323, 'M', u'セント'), - (0x3324, 'M', u'ダース'), - (0x3325, 'M', u'デシ'), - (0x3326, 'M', u'ドル'), - (0x3327, 'M', u'トン'), - (0x3328, 'M', u'ナノ'), - (0x3329, 'M', u'ノット'), - (0x332A, 'M', u'ハイツ'), - (0x332B, 'M', u'パーセント'), - (0x332C, 'M', u'パーツ'), - (0x332D, 'M', u'バーレル'), - (0x332E, 'M', u'ピアストル'), - (0x332F, 'M', u'ピクル'), - (0x3330, 'M', u'ピコ'), - (0x3331, 'M', u'ビル'), - (0x3332, 'M', u'ファラッド'), - (0x3333, 'M', u'フィート'), - (0x3334, 'M', u'ブッシェル'), - (0x3335, 'M', u'フラン'), - (0x3336, 'M', u'ヘクタール'), - (0x3337, 'M', u'ペソ'), - ] - -def _seg_33(): - return [ - (0x3338, 'M', u'ペニヒ'), - (0x3339, 'M', u'ヘルツ'), - (0x333A, 'M', u'ペンス'), - (0x333B, 'M', u'ページ'), - (0x333C, 'M', u'ベータ'), - (0x333D, 'M', u'ポイント'), - (0x333E, 'M', u'ボルト'), - (0x333F, 'M', u'ホン'), - (0x3340, 'M', u'ポンド'), - (0x3341, 'M', u'ホール'), - (0x3342, 'M', u'ホーン'), - (0x3343, 'M', u'マイクロ'), - (0x3344, 'M', u'マイル'), - (0x3345, 'M', u'マッハ'), - (0x3346, 'M', u'マルク'), - (0x3347, 'M', u'マンション'), - (0x3348, 'M', u'ミクロン'), - (0x3349, 'M', u'ミリ'), - (0x334A, 'M', u'ミリバール'), - (0x334B, 'M', u'メガ'), - (0x334C, 'M', u'メガトン'), - (0x334D, 'M', u'メートル'), - (0x334E, 'M', u'ヤード'), - (0x334F, 'M', u'ヤール'), - (0x3350, 'M', u'ユアン'), - (0x3351, 'M', u'リットル'), - (0x3352, 'M', u'リラ'), - (0x3353, 'M', u'ルピー'), - (0x3354, 'M', u'ルーブル'), - (0x3355, 'M', u'レム'), - (0x3356, 'M', u'レントゲン'), - (0x3357, 'M', u'ワット'), - (0x3358, 'M', u'0点'), - (0x3359, 'M', u'1点'), - (0x335A, 'M', u'2点'), - (0x335B, 'M', u'3点'), - (0x335C, 'M', u'4点'), - (0x335D, 'M', u'5点'), - (0x335E, 'M', u'6点'), - (0x335F, 'M', u'7点'), - (0x3360, 'M', u'8点'), - (0x3361, 'M', u'9点'), - (0x3362, 'M', u'10点'), - (0x3363, 'M', u'11点'), - (0x3364, 'M', u'12点'), - (0x3365, 'M', u'13点'), - (0x3366, 'M', u'14点'), - (0x3367, 'M', u'15点'), - (0x3368, 'M', u'16点'), - (0x3369, 'M', u'17点'), - (0x336A, 'M', u'18点'), - (0x336B, 'M', u'19点'), - (0x336C, 'M', u'20点'), - (0x336D, 'M', u'21点'), - (0x336E, 'M', u'22点'), - (0x336F, 'M', u'23点'), - (0x3370, 'M', u'24点'), - (0x3371, 'M', u'hpa'), - (0x3372, 'M', u'da'), - (0x3373, 'M', u'au'), - (0x3374, 'M', u'bar'), - (0x3375, 'M', u'ov'), - (0x3376, 'M', u'pc'), - (0x3377, 'M', u'dm'), - (0x3378, 'M', u'dm2'), - (0x3379, 'M', u'dm3'), - (0x337A, 'M', u'iu'), - (0x337B, 'M', u'平成'), - (0x337C, 'M', u'昭和'), - (0x337D, 'M', u'大正'), - (0x337E, 'M', u'明治'), - (0x337F, 'M', u'株式会社'), - (0x3380, 'M', u'pa'), - (0x3381, 'M', u'na'), - (0x3382, 'M', u'μa'), - (0x3383, 'M', u'ma'), - (0x3384, 'M', u'ka'), - (0x3385, 'M', u'kb'), - (0x3386, 'M', u'mb'), - (0x3387, 'M', u'gb'), - (0x3388, 'M', u'cal'), - (0x3389, 'M', u'kcal'), - (0x338A, 'M', u'pf'), - (0x338B, 'M', u'nf'), - (0x338C, 'M', u'μf'), - (0x338D, 'M', u'μg'), - (0x338E, 'M', u'mg'), - (0x338F, 'M', u'kg'), - (0x3390, 'M', u'hz'), - (0x3391, 'M', u'khz'), - (0x3392, 'M', u'mhz'), - (0x3393, 'M', u'ghz'), - (0x3394, 'M', u'thz'), - (0x3395, 'M', u'μl'), - (0x3396, 'M', u'ml'), - (0x3397, 'M', u'dl'), - (0x3398, 'M', u'kl'), - (0x3399, 'M', u'fm'), - (0x339A, 'M', u'nm'), - (0x339B, 'M', u'μm'), - ] - -def _seg_34(): - return [ - (0x339C, 'M', u'mm'), - (0x339D, 'M', u'cm'), - (0x339E, 'M', u'km'), - (0x339F, 'M', u'mm2'), - (0x33A0, 'M', u'cm2'), - (0x33A1, 'M', u'm2'), - (0x33A2, 'M', u'km2'), - (0x33A3, 'M', u'mm3'), - (0x33A4, 'M', u'cm3'), - (0x33A5, 'M', u'm3'), - (0x33A6, 'M', u'km3'), - (0x33A7, 'M', u'm∕s'), - (0x33A8, 'M', u'm∕s2'), - (0x33A9, 'M', u'pa'), - (0x33AA, 'M', u'kpa'), - (0x33AB, 'M', u'mpa'), - (0x33AC, 'M', u'gpa'), - (0x33AD, 'M', u'rad'), - (0x33AE, 'M', u'rad∕s'), - (0x33AF, 'M', u'rad∕s2'), - (0x33B0, 'M', u'ps'), - (0x33B1, 'M', u'ns'), - (0x33B2, 'M', u'μs'), - (0x33B3, 'M', u'ms'), - (0x33B4, 'M', u'pv'), - (0x33B5, 'M', u'nv'), - (0x33B6, 'M', u'μv'), - (0x33B7, 'M', u'mv'), - (0x33B8, 'M', u'kv'), - (0x33B9, 'M', u'mv'), - (0x33BA, 'M', u'pw'), - (0x33BB, 'M', u'nw'), - (0x33BC, 'M', u'μw'), - (0x33BD, 'M', u'mw'), - (0x33BE, 'M', u'kw'), - (0x33BF, 'M', u'mw'), - (0x33C0, 'M', u'kω'), - (0x33C1, 'M', u'mω'), - (0x33C2, 'X'), - (0x33C3, 'M', u'bq'), - (0x33C4, 'M', u'cc'), - (0x33C5, 'M', u'cd'), - (0x33C6, 'M', u'c∕kg'), - (0x33C7, 'X'), - (0x33C8, 'M', u'db'), - (0x33C9, 'M', u'gy'), - (0x33CA, 'M', u'ha'), - (0x33CB, 'M', u'hp'), - (0x33CC, 'M', u'in'), - (0x33CD, 'M', u'kk'), - (0x33CE, 'M', u'km'), - (0x33CF, 'M', u'kt'), - (0x33D0, 'M', u'lm'), - (0x33D1, 'M', u'ln'), - (0x33D2, 'M', u'log'), - (0x33D3, 'M', u'lx'), - (0x33D4, 'M', u'mb'), - (0x33D5, 'M', u'mil'), - (0x33D6, 'M', u'mol'), - (0x33D7, 'M', u'ph'), - (0x33D8, 'X'), - (0x33D9, 'M', u'ppm'), - (0x33DA, 'M', u'pr'), - (0x33DB, 'M', u'sr'), - (0x33DC, 'M', u'sv'), - (0x33DD, 'M', u'wb'), - (0x33DE, 'M', u'v∕m'), - (0x33DF, 'M', u'a∕m'), - (0x33E0, 'M', u'1日'), - (0x33E1, 'M', u'2日'), - (0x33E2, 'M', u'3日'), - (0x33E3, 'M', u'4日'), - (0x33E4, 'M', u'5日'), - (0x33E5, 'M', u'6日'), - (0x33E6, 'M', u'7日'), - (0x33E7, 'M', u'8日'), - (0x33E8, 'M', u'9日'), - (0x33E9, 'M', u'10日'), - (0x33EA, 'M', u'11日'), - (0x33EB, 'M', u'12日'), - (0x33EC, 'M', u'13日'), - (0x33ED, 'M', u'14日'), - (0x33EE, 'M', u'15日'), - (0x33EF, 'M', u'16日'), - (0x33F0, 'M', u'17日'), - (0x33F1, 'M', u'18日'), - (0x33F2, 'M', u'19日'), - (0x33F3, 'M', u'20日'), - (0x33F4, 'M', u'21日'), - (0x33F5, 'M', u'22日'), - (0x33F6, 'M', u'23日'), - (0x33F7, 'M', u'24日'), - (0x33F8, 'M', u'25日'), - (0x33F9, 'M', u'26日'), - (0x33FA, 'M', u'27日'), - (0x33FB, 'M', u'28日'), - (0x33FC, 'M', u'29日'), - (0x33FD, 'M', u'30日'), - (0x33FE, 'M', u'31日'), - (0x33FF, 'M', u'gal'), - ] - -def _seg_35(): - return [ - (0x3400, 'V'), - (0x4DB6, 'X'), - (0x4DC0, 'V'), - (0x9FCD, 'X'), - (0xA000, 'V'), - (0xA48D, 'X'), - (0xA490, 'V'), - (0xA4C7, 'X'), - (0xA4D0, 'V'), - (0xA62C, 'X'), - (0xA640, 'M', u'ꙁ'), - (0xA641, 'V'), - (0xA642, 'M', u'ꙃ'), - (0xA643, 'V'), - (0xA644, 'M', u'ꙅ'), - (0xA645, 'V'), - (0xA646, 'M', u'ꙇ'), - (0xA647, 'V'), - (0xA648, 'M', u'ꙉ'), - (0xA649, 'V'), - (0xA64A, 'M', u'ꙋ'), - (0xA64B, 'V'), - (0xA64C, 'M', u'ꙍ'), - (0xA64D, 'V'), - (0xA64E, 'M', u'ꙏ'), - (0xA64F, 'V'), - (0xA650, 'M', u'ꙑ'), - (0xA651, 'V'), - (0xA652, 'M', u'ꙓ'), - (0xA653, 'V'), - (0xA654, 'M', u'ꙕ'), - (0xA655, 'V'), - (0xA656, 'M', u'ꙗ'), - (0xA657, 'V'), - (0xA658, 'M', u'ꙙ'), - (0xA659, 'V'), - (0xA65A, 'M', u'ꙛ'), - (0xA65B, 'V'), - (0xA65C, 'M', u'ꙝ'), - (0xA65D, 'V'), - (0xA65E, 'M', u'ꙟ'), - (0xA65F, 'V'), - (0xA660, 'M', u'ꙡ'), - (0xA661, 'V'), - (0xA662, 'M', u'ꙣ'), - (0xA663, 'V'), - (0xA664, 'M', u'ꙥ'), - (0xA665, 'V'), - (0xA666, 'M', u'ꙧ'), - (0xA667, 'V'), - (0xA668, 'M', u'ꙩ'), - (0xA669, 'V'), - (0xA66A, 'M', u'ꙫ'), - (0xA66B, 'V'), - (0xA66C, 'M', u'ꙭ'), - (0xA66D, 'V'), - (0xA680, 'M', u'ꚁ'), - (0xA681, 'V'), - (0xA682, 'M', u'ꚃ'), - (0xA683, 'V'), - (0xA684, 'M', u'ꚅ'), - (0xA685, 'V'), - (0xA686, 'M', u'ꚇ'), - (0xA687, 'V'), - (0xA688, 'M', u'ꚉ'), - (0xA689, 'V'), - (0xA68A, 'M', u'ꚋ'), - (0xA68B, 'V'), - (0xA68C, 'M', u'ꚍ'), - (0xA68D, 'V'), - (0xA68E, 'M', u'ꚏ'), - (0xA68F, 'V'), - (0xA690, 'M', u'ꚑ'), - (0xA691, 'V'), - (0xA692, 'M', u'ꚓ'), - (0xA693, 'V'), - (0xA694, 'M', u'ꚕ'), - (0xA695, 'V'), - (0xA696, 'M', u'ꚗ'), - (0xA697, 'V'), - (0xA698, 'X'), - (0xA69F, 'V'), - (0xA6F8, 'X'), - (0xA700, 'V'), - (0xA722, 'M', u'ꜣ'), - (0xA723, 'V'), - (0xA724, 'M', u'ꜥ'), - (0xA725, 'V'), - (0xA726, 'M', u'ꜧ'), - (0xA727, 'V'), - (0xA728, 'M', u'ꜩ'), - (0xA729, 'V'), - (0xA72A, 'M', u'ꜫ'), - (0xA72B, 'V'), - (0xA72C, 'M', u'ꜭ'), - (0xA72D, 'V'), - (0xA72E, 'M', u'ꜯ'), - (0xA72F, 'V'), - (0xA732, 'M', u'ꜳ'), - (0xA733, 'V'), - ] - -def _seg_36(): - return [ - (0xA734, 'M', u'ꜵ'), - (0xA735, 'V'), - (0xA736, 'M', u'ꜷ'), - (0xA737, 'V'), - (0xA738, 'M', u'ꜹ'), - (0xA739, 'V'), - (0xA73A, 'M', u'ꜻ'), - (0xA73B, 'V'), - (0xA73C, 'M', u'ꜽ'), - (0xA73D, 'V'), - (0xA73E, 'M', u'ꜿ'), - (0xA73F, 'V'), - (0xA740, 'M', u'ꝁ'), - (0xA741, 'V'), - (0xA742, 'M', u'ꝃ'), - (0xA743, 'V'), - (0xA744, 'M', u'ꝅ'), - (0xA745, 'V'), - (0xA746, 'M', u'ꝇ'), - (0xA747, 'V'), - (0xA748, 'M', u'ꝉ'), - (0xA749, 'V'), - (0xA74A, 'M', u'ꝋ'), - (0xA74B, 'V'), - (0xA74C, 'M', u'ꝍ'), - (0xA74D, 'V'), - (0xA74E, 'M', u'ꝏ'), - (0xA74F, 'V'), - (0xA750, 'M', u'ꝑ'), - (0xA751, 'V'), - (0xA752, 'M', u'ꝓ'), - (0xA753, 'V'), - (0xA754, 'M', u'ꝕ'), - (0xA755, 'V'), - (0xA756, 'M', u'ꝗ'), - (0xA757, 'V'), - (0xA758, 'M', u'ꝙ'), - (0xA759, 'V'), - (0xA75A, 'M', u'ꝛ'), - (0xA75B, 'V'), - (0xA75C, 'M', u'ꝝ'), - (0xA75D, 'V'), - (0xA75E, 'M', u'ꝟ'), - (0xA75F, 'V'), - (0xA760, 'M', u'ꝡ'), - (0xA761, 'V'), - (0xA762, 'M', u'ꝣ'), - (0xA763, 'V'), - (0xA764, 'M', u'ꝥ'), - (0xA765, 'V'), - (0xA766, 'M', u'ꝧ'), - (0xA767, 'V'), - (0xA768, 'M', u'ꝩ'), - (0xA769, 'V'), - (0xA76A, 'M', u'ꝫ'), - (0xA76B, 'V'), - (0xA76C, 'M', u'ꝭ'), - (0xA76D, 'V'), - (0xA76E, 'M', u'ꝯ'), - (0xA76F, 'V'), - (0xA770, 'M', u'ꝯ'), - (0xA771, 'V'), - (0xA779, 'M', u'ꝺ'), - (0xA77A, 'V'), - (0xA77B, 'M', u'ꝼ'), - (0xA77C, 'V'), - (0xA77D, 'M', u'ᵹ'), - (0xA77E, 'M', u'ꝿ'), - (0xA77F, 'V'), - (0xA780, 'M', u'ꞁ'), - (0xA781, 'V'), - (0xA782, 'M', u'ꞃ'), - (0xA783, 'V'), - (0xA784, 'M', u'ꞅ'), - (0xA785, 'V'), - (0xA786, 'M', u'ꞇ'), - (0xA787, 'V'), - (0xA78B, 'M', u'ꞌ'), - (0xA78C, 'V'), - (0xA78D, 'M', u'ɥ'), - (0xA78E, 'V'), - (0xA78F, 'X'), - (0xA790, 'M', u'ꞑ'), - (0xA791, 'V'), - (0xA792, 'M', u'ꞓ'), - (0xA793, 'V'), - (0xA794, 'X'), - (0xA7A0, 'M', u'ꞡ'), - (0xA7A1, 'V'), - (0xA7A2, 'M', u'ꞣ'), - (0xA7A3, 'V'), - (0xA7A4, 'M', u'ꞥ'), - (0xA7A5, 'V'), - (0xA7A6, 'M', u'ꞧ'), - (0xA7A7, 'V'), - (0xA7A8, 'M', u'ꞩ'), - (0xA7A9, 'V'), - (0xA7AA, 'M', u'ɦ'), - (0xA7AB, 'X'), - (0xA7F8, 'M', u'ħ'), - ] - -def _seg_37(): - return [ - (0xA7F9, 'M', u'œ'), - (0xA7FA, 'V'), - (0xA82C, 'X'), - (0xA830, 'V'), - (0xA83A, 'X'), - (0xA840, 'V'), - (0xA878, 'X'), - (0xA880, 'V'), - (0xA8C5, 'X'), - (0xA8CE, 'V'), - (0xA8DA, 'X'), - (0xA8E0, 'V'), - (0xA8FC, 'X'), - (0xA900, 'V'), - (0xA954, 'X'), - (0xA95F, 'V'), - (0xA97D, 'X'), - (0xA980, 'V'), - (0xA9CE, 'X'), - (0xA9CF, 'V'), - (0xA9DA, 'X'), - (0xA9DE, 'V'), - (0xA9E0, 'X'), - (0xAA00, 'V'), - (0xAA37, 'X'), - (0xAA40, 'V'), - (0xAA4E, 'X'), - (0xAA50, 'V'), - (0xAA5A, 'X'), - (0xAA5C, 'V'), - (0xAA7C, 'X'), - (0xAA80, 'V'), - (0xAAC3, 'X'), - (0xAADB, 'V'), - (0xAAF7, 'X'), - (0xAB01, 'V'), - (0xAB07, 'X'), - (0xAB09, 'V'), - (0xAB0F, 'X'), - (0xAB11, 'V'), - (0xAB17, 'X'), - (0xAB20, 'V'), - (0xAB27, 'X'), - (0xAB28, 'V'), - (0xAB2F, 'X'), - (0xABC0, 'V'), - (0xABEE, 'X'), - (0xABF0, 'V'), - (0xABFA, 'X'), - (0xAC00, 'V'), - (0xD7A4, 'X'), - (0xD7B0, 'V'), - (0xD7C7, 'X'), - (0xD7CB, 'V'), - (0xD7FC, 'X'), - (0xF900, 'M', u'豈'), - (0xF901, 'M', u'更'), - (0xF902, 'M', u'車'), - (0xF903, 'M', u'賈'), - (0xF904, 'M', u'滑'), - (0xF905, 'M', u'串'), - (0xF906, 'M', u'句'), - (0xF907, 'M', u'龜'), - (0xF909, 'M', u'契'), - (0xF90A, 'M', u'金'), - (0xF90B, 'M', u'喇'), - (0xF90C, 'M', u'奈'), - (0xF90D, 'M', u'懶'), - (0xF90E, 'M', u'癩'), - (0xF90F, 'M', u'羅'), - (0xF910, 'M', u'蘿'), - (0xF911, 'M', u'螺'), - (0xF912, 'M', u'裸'), - (0xF913, 'M', u'邏'), - (0xF914, 'M', u'樂'), - (0xF915, 'M', u'洛'), - (0xF916, 'M', u'烙'), - (0xF917, 'M', u'珞'), - (0xF918, 'M', u'落'), - (0xF919, 'M', u'酪'), - (0xF91A, 'M', u'駱'), - (0xF91B, 'M', u'亂'), - (0xF91C, 'M', u'卵'), - (0xF91D, 'M', u'欄'), - (0xF91E, 'M', u'爛'), - (0xF91F, 'M', u'蘭'), - (0xF920, 'M', u'鸞'), - (0xF921, 'M', u'嵐'), - (0xF922, 'M', u'濫'), - (0xF923, 'M', u'藍'), - (0xF924, 'M', u'襤'), - (0xF925, 'M', u'拉'), - (0xF926, 'M', u'臘'), - (0xF927, 'M', u'蠟'), - (0xF928, 'M', u'廊'), - (0xF929, 'M', u'朗'), - (0xF92A, 'M', u'浪'), - (0xF92B, 'M', u'狼'), - (0xF92C, 'M', u'郎'), - (0xF92D, 'M', u'來'), - ] - -def _seg_38(): - return [ - (0xF92E, 'M', u'冷'), - (0xF92F, 'M', u'勞'), - (0xF930, 'M', u'擄'), - (0xF931, 'M', u'櫓'), - (0xF932, 'M', u'爐'), - (0xF933, 'M', u'盧'), - (0xF934, 'M', u'老'), - (0xF935, 'M', u'蘆'), - (0xF936, 'M', u'虜'), - (0xF937, 'M', u'路'), - (0xF938, 'M', u'露'), - (0xF939, 'M', u'魯'), - (0xF93A, 'M', u'鷺'), - (0xF93B, 'M', u'碌'), - (0xF93C, 'M', u'祿'), - (0xF93D, 'M', u'綠'), - (0xF93E, 'M', u'菉'), - (0xF93F, 'M', u'錄'), - (0xF940, 'M', u'鹿'), - (0xF941, 'M', u'論'), - (0xF942, 'M', u'壟'), - (0xF943, 'M', u'弄'), - (0xF944, 'M', u'籠'), - (0xF945, 'M', u'聾'), - (0xF946, 'M', u'牢'), - (0xF947, 'M', u'磊'), - (0xF948, 'M', u'賂'), - (0xF949, 'M', u'雷'), - (0xF94A, 'M', u'壘'), - (0xF94B, 'M', u'屢'), - (0xF94C, 'M', u'樓'), - (0xF94D, 'M', u'淚'), - (0xF94E, 'M', u'漏'), - (0xF94F, 'M', u'累'), - (0xF950, 'M', u'縷'), - (0xF951, 'M', u'陋'), - (0xF952, 'M', u'勒'), - (0xF953, 'M', u'肋'), - (0xF954, 'M', u'凜'), - (0xF955, 'M', u'凌'), - (0xF956, 'M', u'稜'), - (0xF957, 'M', u'綾'), - (0xF958, 'M', u'菱'), - (0xF959, 'M', u'陵'), - (0xF95A, 'M', u'讀'), - (0xF95B, 'M', u'拏'), - (0xF95C, 'M', u'樂'), - (0xF95D, 'M', u'諾'), - (0xF95E, 'M', u'丹'), - (0xF95F, 'M', u'寧'), - (0xF960, 'M', u'怒'), - (0xF961, 'M', u'率'), - (0xF962, 'M', u'異'), - (0xF963, 'M', u'北'), - (0xF964, 'M', u'磻'), - (0xF965, 'M', u'便'), - (0xF966, 'M', u'復'), - (0xF967, 'M', u'不'), - (0xF968, 'M', u'泌'), - (0xF969, 'M', u'數'), - (0xF96A, 'M', u'索'), - (0xF96B, 'M', u'參'), - (0xF96C, 'M', u'塞'), - (0xF96D, 'M', u'省'), - (0xF96E, 'M', u'葉'), - (0xF96F, 'M', u'說'), - (0xF970, 'M', u'殺'), - (0xF971, 'M', u'辰'), - (0xF972, 'M', u'沈'), - (0xF973, 'M', u'拾'), - (0xF974, 'M', u'若'), - (0xF975, 'M', u'掠'), - (0xF976, 'M', u'略'), - (0xF977, 'M', u'亮'), - (0xF978, 'M', u'兩'), - (0xF979, 'M', u'凉'), - (0xF97A, 'M', u'梁'), - (0xF97B, 'M', u'糧'), - (0xF97C, 'M', u'良'), - (0xF97D, 'M', u'諒'), - (0xF97E, 'M', u'量'), - (0xF97F, 'M', u'勵'), - (0xF980, 'M', u'呂'), - (0xF981, 'M', u'女'), - (0xF982, 'M', u'廬'), - (0xF983, 'M', u'旅'), - (0xF984, 'M', u'濾'), - (0xF985, 'M', u'礪'), - (0xF986, 'M', u'閭'), - (0xF987, 'M', u'驪'), - (0xF988, 'M', u'麗'), - (0xF989, 'M', u'黎'), - (0xF98A, 'M', u'力'), - (0xF98B, 'M', u'曆'), - (0xF98C, 'M', u'歷'), - (0xF98D, 'M', u'轢'), - (0xF98E, 'M', u'年'), - (0xF98F, 'M', u'憐'), - (0xF990, 'M', u'戀'), - (0xF991, 'M', u'撚'), - ] - -def _seg_39(): - return [ - (0xF992, 'M', u'漣'), - (0xF993, 'M', u'煉'), - (0xF994, 'M', u'璉'), - (0xF995, 'M', u'秊'), - (0xF996, 'M', u'練'), - (0xF997, 'M', u'聯'), - (0xF998, 'M', u'輦'), - (0xF999, 'M', u'蓮'), - (0xF99A, 'M', u'連'), - (0xF99B, 'M', u'鍊'), - (0xF99C, 'M', u'列'), - (0xF99D, 'M', u'劣'), - (0xF99E, 'M', u'咽'), - (0xF99F, 'M', u'烈'), - (0xF9A0, 'M', u'裂'), - (0xF9A1, 'M', u'說'), - (0xF9A2, 'M', u'廉'), - (0xF9A3, 'M', u'念'), - (0xF9A4, 'M', u'捻'), - (0xF9A5, 'M', u'殮'), - (0xF9A6, 'M', u'簾'), - (0xF9A7, 'M', u'獵'), - (0xF9A8, 'M', u'令'), - (0xF9A9, 'M', u'囹'), - (0xF9AA, 'M', u'寧'), - (0xF9AB, 'M', u'嶺'), - (0xF9AC, 'M', u'怜'), - (0xF9AD, 'M', u'玲'), - (0xF9AE, 'M', u'瑩'), - (0xF9AF, 'M', u'羚'), - (0xF9B0, 'M', u'聆'), - (0xF9B1, 'M', u'鈴'), - (0xF9B2, 'M', u'零'), - (0xF9B3, 'M', u'靈'), - (0xF9B4, 'M', u'領'), - (0xF9B5, 'M', u'例'), - (0xF9B6, 'M', u'禮'), - (0xF9B7, 'M', u'醴'), - (0xF9B8, 'M', u'隸'), - (0xF9B9, 'M', u'惡'), - (0xF9BA, 'M', u'了'), - (0xF9BB, 'M', u'僚'), - (0xF9BC, 'M', u'寮'), - (0xF9BD, 'M', u'尿'), - (0xF9BE, 'M', u'料'), - (0xF9BF, 'M', u'樂'), - (0xF9C0, 'M', u'燎'), - (0xF9C1, 'M', u'療'), - (0xF9C2, 'M', u'蓼'), - (0xF9C3, 'M', u'遼'), - (0xF9C4, 'M', u'龍'), - (0xF9C5, 'M', u'暈'), - (0xF9C6, 'M', u'阮'), - (0xF9C7, 'M', u'劉'), - (0xF9C8, 'M', u'杻'), - (0xF9C9, 'M', u'柳'), - (0xF9CA, 'M', u'流'), - (0xF9CB, 'M', u'溜'), - (0xF9CC, 'M', u'琉'), - (0xF9CD, 'M', u'留'), - (0xF9CE, 'M', u'硫'), - (0xF9CF, 'M', u'紐'), - (0xF9D0, 'M', u'類'), - (0xF9D1, 'M', u'六'), - (0xF9D2, 'M', u'戮'), - (0xF9D3, 'M', u'陸'), - (0xF9D4, 'M', u'倫'), - (0xF9D5, 'M', u'崙'), - (0xF9D6, 'M', u'淪'), - (0xF9D7, 'M', u'輪'), - (0xF9D8, 'M', u'律'), - (0xF9D9, 'M', u'慄'), - (0xF9DA, 'M', u'栗'), - (0xF9DB, 'M', u'率'), - (0xF9DC, 'M', u'隆'), - (0xF9DD, 'M', u'利'), - (0xF9DE, 'M', u'吏'), - (0xF9DF, 'M', u'履'), - (0xF9E0, 'M', u'易'), - (0xF9E1, 'M', u'李'), - (0xF9E2, 'M', u'梨'), - (0xF9E3, 'M', u'泥'), - (0xF9E4, 'M', u'理'), - (0xF9E5, 'M', u'痢'), - (0xF9E6, 'M', u'罹'), - (0xF9E7, 'M', u'裏'), - (0xF9E8, 'M', u'裡'), - (0xF9E9, 'M', u'里'), - (0xF9EA, 'M', u'離'), - (0xF9EB, 'M', u'匿'), - (0xF9EC, 'M', u'溺'), - (0xF9ED, 'M', u'吝'), - (0xF9EE, 'M', u'燐'), - (0xF9EF, 'M', u'璘'), - (0xF9F0, 'M', u'藺'), - (0xF9F1, 'M', u'隣'), - (0xF9F2, 'M', u'鱗'), - (0xF9F3, 'M', u'麟'), - (0xF9F4, 'M', u'林'), - (0xF9F5, 'M', u'淋'), - ] - -def _seg_40(): - return [ - (0xF9F6, 'M', u'臨'), - (0xF9F7, 'M', u'立'), - (0xF9F8, 'M', u'笠'), - (0xF9F9, 'M', u'粒'), - (0xF9FA, 'M', u'狀'), - (0xF9FB, 'M', u'炙'), - (0xF9FC, 'M', u'識'), - (0xF9FD, 'M', u'什'), - (0xF9FE, 'M', u'茶'), - (0xF9FF, 'M', u'刺'), - (0xFA00, 'M', u'切'), - (0xFA01, 'M', u'度'), - (0xFA02, 'M', u'拓'), - (0xFA03, 'M', u'糖'), - (0xFA04, 'M', u'宅'), - (0xFA05, 'M', u'洞'), - (0xFA06, 'M', u'暴'), - (0xFA07, 'M', u'輻'), - (0xFA08, 'M', u'行'), - (0xFA09, 'M', u'降'), - (0xFA0A, 'M', u'見'), - (0xFA0B, 'M', u'廓'), - (0xFA0C, 'M', u'兀'), - (0xFA0D, 'M', u'嗀'), - (0xFA0E, 'V'), - (0xFA10, 'M', u'塚'), - (0xFA11, 'V'), - (0xFA12, 'M', u'晴'), - (0xFA13, 'V'), - (0xFA15, 'M', u'凞'), - (0xFA16, 'M', u'猪'), - (0xFA17, 'M', u'益'), - (0xFA18, 'M', u'礼'), - (0xFA19, 'M', u'神'), - (0xFA1A, 'M', u'祥'), - (0xFA1B, 'M', u'福'), - (0xFA1C, 'M', u'靖'), - (0xFA1D, 'M', u'精'), - (0xFA1E, 'M', u'羽'), - (0xFA1F, 'V'), - (0xFA20, 'M', u'蘒'), - (0xFA21, 'V'), - (0xFA22, 'M', u'諸'), - (0xFA23, 'V'), - (0xFA25, 'M', u'逸'), - (0xFA26, 'M', u'都'), - (0xFA27, 'V'), - (0xFA2A, 'M', u'飯'), - (0xFA2B, 'M', u'飼'), - (0xFA2C, 'M', u'館'), - (0xFA2D, 'M', u'鶴'), - (0xFA2E, 'M', u'郞'), - (0xFA2F, 'M', u'隷'), - (0xFA30, 'M', u'侮'), - (0xFA31, 'M', u'僧'), - (0xFA32, 'M', u'免'), - (0xFA33, 'M', u'勉'), - (0xFA34, 'M', u'勤'), - (0xFA35, 'M', u'卑'), - (0xFA36, 'M', u'喝'), - (0xFA37, 'M', u'嘆'), - (0xFA38, 'M', u'器'), - (0xFA39, 'M', u'塀'), - (0xFA3A, 'M', u'墨'), - (0xFA3B, 'M', u'層'), - (0xFA3C, 'M', u'屮'), - (0xFA3D, 'M', u'悔'), - (0xFA3E, 'M', u'慨'), - (0xFA3F, 'M', u'憎'), - (0xFA40, 'M', u'懲'), - (0xFA41, 'M', u'敏'), - (0xFA42, 'M', u'既'), - (0xFA43, 'M', u'暑'), - (0xFA44, 'M', u'梅'), - (0xFA45, 'M', u'海'), - (0xFA46, 'M', u'渚'), - (0xFA47, 'M', u'漢'), - (0xFA48, 'M', u'煮'), - (0xFA49, 'M', u'爫'), - (0xFA4A, 'M', u'琢'), - (0xFA4B, 'M', u'碑'), - (0xFA4C, 'M', u'社'), - (0xFA4D, 'M', u'祉'), - (0xFA4E, 'M', u'祈'), - (0xFA4F, 'M', u'祐'), - (0xFA50, 'M', u'祖'), - (0xFA51, 'M', u'祝'), - (0xFA52, 'M', u'禍'), - (0xFA53, 'M', u'禎'), - (0xFA54, 'M', u'穀'), - (0xFA55, 'M', u'突'), - (0xFA56, 'M', u'節'), - (0xFA57, 'M', u'練'), - (0xFA58, 'M', u'縉'), - (0xFA59, 'M', u'繁'), - (0xFA5A, 'M', u'署'), - (0xFA5B, 'M', u'者'), - (0xFA5C, 'M', u'臭'), - (0xFA5D, 'M', u'艹'), - (0xFA5F, 'M', u'著'), - ] - -def _seg_41(): - return [ - (0xFA60, 'M', u'褐'), - (0xFA61, 'M', u'視'), - (0xFA62, 'M', u'謁'), - (0xFA63, 'M', u'謹'), - (0xFA64, 'M', u'賓'), - (0xFA65, 'M', u'贈'), - (0xFA66, 'M', u'辶'), - (0xFA67, 'M', u'逸'), - (0xFA68, 'M', u'難'), - (0xFA69, 'M', u'響'), - (0xFA6A, 'M', u'頻'), - (0xFA6B, 'M', u'恵'), - (0xFA6C, 'M', u'𤋮'), - (0xFA6D, 'M', u'舘'), - (0xFA6E, 'X'), - (0xFA70, 'M', u'並'), - (0xFA71, 'M', u'况'), - (0xFA72, 'M', u'全'), - (0xFA73, 'M', u'侀'), - (0xFA74, 'M', u'充'), - (0xFA75, 'M', u'冀'), - (0xFA76, 'M', u'勇'), - (0xFA77, 'M', u'勺'), - (0xFA78, 'M', u'喝'), - (0xFA79, 'M', u'啕'), - (0xFA7A, 'M', u'喙'), - (0xFA7B, 'M', u'嗢'), - (0xFA7C, 'M', u'塚'), - (0xFA7D, 'M', u'墳'), - (0xFA7E, 'M', u'奄'), - (0xFA7F, 'M', u'奔'), - (0xFA80, 'M', u'婢'), - (0xFA81, 'M', u'嬨'), - (0xFA82, 'M', u'廒'), - (0xFA83, 'M', u'廙'), - (0xFA84, 'M', u'彩'), - (0xFA85, 'M', u'徭'), - (0xFA86, 'M', u'惘'), - (0xFA87, 'M', u'慎'), - (0xFA88, 'M', u'愈'), - (0xFA89, 'M', u'憎'), - (0xFA8A, 'M', u'慠'), - (0xFA8B, 'M', u'懲'), - (0xFA8C, 'M', u'戴'), - (0xFA8D, 'M', u'揄'), - (0xFA8E, 'M', u'搜'), - (0xFA8F, 'M', u'摒'), - (0xFA90, 'M', u'敖'), - (0xFA91, 'M', u'晴'), - (0xFA92, 'M', u'朗'), - (0xFA93, 'M', u'望'), - (0xFA94, 'M', u'杖'), - (0xFA95, 'M', u'歹'), - (0xFA96, 'M', u'殺'), - (0xFA97, 'M', u'流'), - (0xFA98, 'M', u'滛'), - (0xFA99, 'M', u'滋'), - (0xFA9A, 'M', u'漢'), - (0xFA9B, 'M', u'瀞'), - (0xFA9C, 'M', u'煮'), - (0xFA9D, 'M', u'瞧'), - (0xFA9E, 'M', u'爵'), - (0xFA9F, 'M', u'犯'), - (0xFAA0, 'M', u'猪'), - (0xFAA1, 'M', u'瑱'), - (0xFAA2, 'M', u'甆'), - (0xFAA3, 'M', u'画'), - (0xFAA4, 'M', u'瘝'), - (0xFAA5, 'M', u'瘟'), - (0xFAA6, 'M', u'益'), - (0xFAA7, 'M', u'盛'), - (0xFAA8, 'M', u'直'), - (0xFAA9, 'M', u'睊'), - (0xFAAA, 'M', u'着'), - (0xFAAB, 'M', u'磌'), - (0xFAAC, 'M', u'窱'), - (0xFAAD, 'M', u'節'), - (0xFAAE, 'M', u'类'), - (0xFAAF, 'M', u'絛'), - (0xFAB0, 'M', u'練'), - (0xFAB1, 'M', u'缾'), - (0xFAB2, 'M', u'者'), - (0xFAB3, 'M', u'荒'), - (0xFAB4, 'M', u'華'), - (0xFAB5, 'M', u'蝹'), - (0xFAB6, 'M', u'襁'), - (0xFAB7, 'M', u'覆'), - (0xFAB8, 'M', u'視'), - (0xFAB9, 'M', u'調'), - (0xFABA, 'M', u'諸'), - (0xFABB, 'M', u'請'), - (0xFABC, 'M', u'謁'), - (0xFABD, 'M', u'諾'), - (0xFABE, 'M', u'諭'), - (0xFABF, 'M', u'謹'), - (0xFAC0, 'M', u'變'), - (0xFAC1, 'M', u'贈'), - (0xFAC2, 'M', u'輸'), - (0xFAC3, 'M', u'遲'), - (0xFAC4, 'M', u'醙'), - ] - -def _seg_42(): - return [ - (0xFAC5, 'M', u'鉶'), - (0xFAC6, 'M', u'陼'), - (0xFAC7, 'M', u'難'), - (0xFAC8, 'M', u'靖'), - (0xFAC9, 'M', u'韛'), - (0xFACA, 'M', u'響'), - (0xFACB, 'M', u'頋'), - (0xFACC, 'M', u'頻'), - (0xFACD, 'M', u'鬒'), - (0xFACE, 'M', u'龜'), - (0xFACF, 'M', u'𢡊'), - (0xFAD0, 'M', u'𢡄'), - (0xFAD1, 'M', u'𣏕'), - (0xFAD2, 'M', u'㮝'), - (0xFAD3, 'M', u'䀘'), - (0xFAD4, 'M', u'䀹'), - (0xFAD5, 'M', u'𥉉'), - (0xFAD6, 'M', u'𥳐'), - (0xFAD7, 'M', u'𧻓'), - (0xFAD8, 'M', u'齃'), - (0xFAD9, 'M', u'龎'), - (0xFADA, 'X'), - (0xFB00, 'M', u'ff'), - (0xFB01, 'M', u'fi'), - (0xFB02, 'M', u'fl'), - (0xFB03, 'M', u'ffi'), - (0xFB04, 'M', u'ffl'), - (0xFB05, 'M', u'st'), - (0xFB07, 'X'), - (0xFB13, 'M', u'մն'), - (0xFB14, 'M', u'մե'), - (0xFB15, 'M', u'մի'), - (0xFB16, 'M', u'վն'), - (0xFB17, 'M', u'մխ'), - (0xFB18, 'X'), - (0xFB1D, 'M', u'יִ'), - (0xFB1E, 'V'), - (0xFB1F, 'M', u'ײַ'), - (0xFB20, 'M', u'ע'), - (0xFB21, 'M', u'א'), - (0xFB22, 'M', u'ד'), - (0xFB23, 'M', u'ה'), - (0xFB24, 'M', u'כ'), - (0xFB25, 'M', u'ל'), - (0xFB26, 'M', u'ם'), - (0xFB27, 'M', u'ר'), - (0xFB28, 'M', u'ת'), - (0xFB29, '3', u'+'), - (0xFB2A, 'M', u'שׁ'), - (0xFB2B, 'M', u'שׂ'), - (0xFB2C, 'M', u'שּׁ'), - (0xFB2D, 'M', u'שּׂ'), - (0xFB2E, 'M', u'אַ'), - (0xFB2F, 'M', u'אָ'), - (0xFB30, 'M', u'אּ'), - (0xFB31, 'M', u'בּ'), - (0xFB32, 'M', u'גּ'), - (0xFB33, 'M', u'דּ'), - (0xFB34, 'M', u'הּ'), - (0xFB35, 'M', u'וּ'), - (0xFB36, 'M', u'זּ'), - (0xFB37, 'X'), - (0xFB38, 'M', u'טּ'), - (0xFB39, 'M', u'יּ'), - (0xFB3A, 'M', u'ךּ'), - (0xFB3B, 'M', u'כּ'), - (0xFB3C, 'M', u'לּ'), - (0xFB3D, 'X'), - (0xFB3E, 'M', u'מּ'), - (0xFB3F, 'X'), - (0xFB40, 'M', u'נּ'), - (0xFB41, 'M', u'סּ'), - (0xFB42, 'X'), - (0xFB43, 'M', u'ףּ'), - (0xFB44, 'M', u'פּ'), - (0xFB45, 'X'), - (0xFB46, 'M', u'צּ'), - (0xFB47, 'M', u'קּ'), - (0xFB48, 'M', u'רּ'), - (0xFB49, 'M', u'שּ'), - (0xFB4A, 'M', u'תּ'), - (0xFB4B, 'M', u'וֹ'), - (0xFB4C, 'M', u'בֿ'), - (0xFB4D, 'M', u'כֿ'), - (0xFB4E, 'M', u'פֿ'), - (0xFB4F, 'M', u'אל'), - (0xFB50, 'M', u'ٱ'), - (0xFB52, 'M', u'ٻ'), - (0xFB56, 'M', u'پ'), - (0xFB5A, 'M', u'ڀ'), - (0xFB5E, 'M', u'ٺ'), - (0xFB62, 'M', u'ٿ'), - (0xFB66, 'M', u'ٹ'), - (0xFB6A, 'M', u'ڤ'), - (0xFB6E, 'M', u'ڦ'), - (0xFB72, 'M', u'ڄ'), - (0xFB76, 'M', u'ڃ'), - (0xFB7A, 'M', u'چ'), - (0xFB7E, 'M', u'ڇ'), - (0xFB82, 'M', u'ڍ'), - ] - -def _seg_43(): - return [ - (0xFB84, 'M', u'ڌ'), - (0xFB86, 'M', u'ڎ'), - (0xFB88, 'M', u'ڈ'), - (0xFB8A, 'M', u'ژ'), - (0xFB8C, 'M', u'ڑ'), - (0xFB8E, 'M', u'ک'), - (0xFB92, 'M', u'گ'), - (0xFB96, 'M', u'ڳ'), - (0xFB9A, 'M', u'ڱ'), - (0xFB9E, 'M', u'ں'), - (0xFBA0, 'M', u'ڻ'), - (0xFBA4, 'M', u'ۀ'), - (0xFBA6, 'M', u'ہ'), - (0xFBAA, 'M', u'ھ'), - (0xFBAE, 'M', u'ے'), - (0xFBB0, 'M', u'ۓ'), - (0xFBB2, 'V'), - (0xFBC2, 'X'), - (0xFBD3, 'M', u'ڭ'), - (0xFBD7, 'M', u'ۇ'), - (0xFBD9, 'M', u'ۆ'), - (0xFBDB, 'M', u'ۈ'), - (0xFBDD, 'M', u'ۇٴ'), - (0xFBDE, 'M', u'ۋ'), - (0xFBE0, 'M', u'ۅ'), - (0xFBE2, 'M', u'ۉ'), - (0xFBE4, 'M', u'ې'), - (0xFBE8, 'M', u'ى'), - (0xFBEA, 'M', u'ئا'), - (0xFBEC, 'M', u'ئە'), - (0xFBEE, 'M', u'ئو'), - (0xFBF0, 'M', u'ئۇ'), - (0xFBF2, 'M', u'ئۆ'), - (0xFBF4, 'M', u'ئۈ'), - (0xFBF6, 'M', u'ئې'), - (0xFBF9, 'M', u'ئى'), - (0xFBFC, 'M', u'ی'), - (0xFC00, 'M', u'ئج'), - (0xFC01, 'M', u'ئح'), - (0xFC02, 'M', u'ئم'), - (0xFC03, 'M', u'ئى'), - (0xFC04, 'M', u'ئي'), - (0xFC05, 'M', u'بج'), - (0xFC06, 'M', u'بح'), - (0xFC07, 'M', u'بخ'), - (0xFC08, 'M', u'بم'), - (0xFC09, 'M', u'بى'), - (0xFC0A, 'M', u'بي'), - (0xFC0B, 'M', u'تج'), - (0xFC0C, 'M', u'تح'), - (0xFC0D, 'M', u'تخ'), - (0xFC0E, 'M', u'تم'), - (0xFC0F, 'M', u'تى'), - (0xFC10, 'M', u'تي'), - (0xFC11, 'M', u'ثج'), - (0xFC12, 'M', u'ثم'), - (0xFC13, 'M', u'ثى'), - (0xFC14, 'M', u'ثي'), - (0xFC15, 'M', u'جح'), - (0xFC16, 'M', u'جم'), - (0xFC17, 'M', u'حج'), - (0xFC18, 'M', u'حم'), - (0xFC19, 'M', u'خج'), - (0xFC1A, 'M', u'خح'), - (0xFC1B, 'M', u'خم'), - (0xFC1C, 'M', u'سج'), - (0xFC1D, 'M', u'سح'), - (0xFC1E, 'M', u'سخ'), - (0xFC1F, 'M', u'سم'), - (0xFC20, 'M', u'صح'), - (0xFC21, 'M', u'صم'), - (0xFC22, 'M', u'ضج'), - (0xFC23, 'M', u'ضح'), - (0xFC24, 'M', u'ضخ'), - (0xFC25, 'M', u'ضم'), - (0xFC26, 'M', u'طح'), - (0xFC27, 'M', u'طم'), - (0xFC28, 'M', u'ظم'), - (0xFC29, 'M', u'عج'), - (0xFC2A, 'M', u'عم'), - (0xFC2B, 'M', u'غج'), - (0xFC2C, 'M', u'غم'), - (0xFC2D, 'M', u'فج'), - (0xFC2E, 'M', u'فح'), - (0xFC2F, 'M', u'فخ'), - (0xFC30, 'M', u'فم'), - (0xFC31, 'M', u'فى'), - (0xFC32, 'M', u'في'), - (0xFC33, 'M', u'قح'), - (0xFC34, 'M', u'قم'), - (0xFC35, 'M', u'قى'), - (0xFC36, 'M', u'قي'), - (0xFC37, 'M', u'كا'), - (0xFC38, 'M', u'كج'), - (0xFC39, 'M', u'كح'), - (0xFC3A, 'M', u'كخ'), - (0xFC3B, 'M', u'كل'), - (0xFC3C, 'M', u'كم'), - (0xFC3D, 'M', u'كى'), - (0xFC3E, 'M', u'كي'), - ] - -def _seg_44(): - return [ - (0xFC3F, 'M', u'لج'), - (0xFC40, 'M', u'لح'), - (0xFC41, 'M', u'لخ'), - (0xFC42, 'M', u'لم'), - (0xFC43, 'M', u'لى'), - (0xFC44, 'M', u'لي'), - (0xFC45, 'M', u'مج'), - (0xFC46, 'M', u'مح'), - (0xFC47, 'M', u'مخ'), - (0xFC48, 'M', u'مم'), - (0xFC49, 'M', u'مى'), - (0xFC4A, 'M', u'مي'), - (0xFC4B, 'M', u'نج'), - (0xFC4C, 'M', u'نح'), - (0xFC4D, 'M', u'نخ'), - (0xFC4E, 'M', u'نم'), - (0xFC4F, 'M', u'نى'), - (0xFC50, 'M', u'ني'), - (0xFC51, 'M', u'هج'), - (0xFC52, 'M', u'هم'), - (0xFC53, 'M', u'هى'), - (0xFC54, 'M', u'هي'), - (0xFC55, 'M', u'يج'), - (0xFC56, 'M', u'يح'), - (0xFC57, 'M', u'يخ'), - (0xFC58, 'M', u'يم'), - (0xFC59, 'M', u'يى'), - (0xFC5A, 'M', u'يي'), - (0xFC5B, 'M', u'ذٰ'), - (0xFC5C, 'M', u'رٰ'), - (0xFC5D, 'M', u'ىٰ'), - (0xFC5E, '3', u' ٌّ'), - (0xFC5F, '3', u' ٍّ'), - (0xFC60, '3', u' َّ'), - (0xFC61, '3', u' ُّ'), - (0xFC62, '3', u' ِّ'), - (0xFC63, '3', u' ّٰ'), - (0xFC64, 'M', u'ئر'), - (0xFC65, 'M', u'ئز'), - (0xFC66, 'M', u'ئم'), - (0xFC67, 'M', u'ئن'), - (0xFC68, 'M', u'ئى'), - (0xFC69, 'M', u'ئي'), - (0xFC6A, 'M', u'بر'), - (0xFC6B, 'M', u'بز'), - (0xFC6C, 'M', u'بم'), - (0xFC6D, 'M', u'بن'), - (0xFC6E, 'M', u'بى'), - (0xFC6F, 'M', u'بي'), - (0xFC70, 'M', u'تر'), - (0xFC71, 'M', u'تز'), - (0xFC72, 'M', u'تم'), - (0xFC73, 'M', u'تن'), - (0xFC74, 'M', u'تى'), - (0xFC75, 'M', u'تي'), - (0xFC76, 'M', u'ثر'), - (0xFC77, 'M', u'ثز'), - (0xFC78, 'M', u'ثم'), - (0xFC79, 'M', u'ثن'), - (0xFC7A, 'M', u'ثى'), - (0xFC7B, 'M', u'ثي'), - (0xFC7C, 'M', u'فى'), - (0xFC7D, 'M', u'في'), - (0xFC7E, 'M', u'قى'), - (0xFC7F, 'M', u'قي'), - (0xFC80, 'M', u'كا'), - (0xFC81, 'M', u'كل'), - (0xFC82, 'M', u'كم'), - (0xFC83, 'M', u'كى'), - (0xFC84, 'M', u'كي'), - (0xFC85, 'M', u'لم'), - (0xFC86, 'M', u'لى'), - (0xFC87, 'M', u'لي'), - (0xFC88, 'M', u'ما'), - (0xFC89, 'M', u'مم'), - (0xFC8A, 'M', u'نر'), - (0xFC8B, 'M', u'نز'), - (0xFC8C, 'M', u'نم'), - (0xFC8D, 'M', u'نن'), - (0xFC8E, 'M', u'نى'), - (0xFC8F, 'M', u'ني'), - (0xFC90, 'M', u'ىٰ'), - (0xFC91, 'M', u'ير'), - (0xFC92, 'M', u'يز'), - (0xFC93, 'M', u'يم'), - (0xFC94, 'M', u'ين'), - (0xFC95, 'M', u'يى'), - (0xFC96, 'M', u'يي'), - (0xFC97, 'M', u'ئج'), - (0xFC98, 'M', u'ئح'), - (0xFC99, 'M', u'ئخ'), - (0xFC9A, 'M', u'ئم'), - (0xFC9B, 'M', u'ئه'), - (0xFC9C, 'M', u'بج'), - (0xFC9D, 'M', u'بح'), - (0xFC9E, 'M', u'بخ'), - (0xFC9F, 'M', u'بم'), - (0xFCA0, 'M', u'به'), - (0xFCA1, 'M', u'تج'), - (0xFCA2, 'M', u'تح'), - ] - -def _seg_45(): - return [ - (0xFCA3, 'M', u'تخ'), - (0xFCA4, 'M', u'تم'), - (0xFCA5, 'M', u'ته'), - (0xFCA6, 'M', u'ثم'), - (0xFCA7, 'M', u'جح'), - (0xFCA8, 'M', u'جم'), - (0xFCA9, 'M', u'حج'), - (0xFCAA, 'M', u'حم'), - (0xFCAB, 'M', u'خج'), - (0xFCAC, 'M', u'خم'), - (0xFCAD, 'M', u'سج'), - (0xFCAE, 'M', u'سح'), - (0xFCAF, 'M', u'سخ'), - (0xFCB0, 'M', u'سم'), - (0xFCB1, 'M', u'صح'), - (0xFCB2, 'M', u'صخ'), - (0xFCB3, 'M', u'صم'), - (0xFCB4, 'M', u'ضج'), - (0xFCB5, 'M', u'ضح'), - (0xFCB6, 'M', u'ضخ'), - (0xFCB7, 'M', u'ضم'), - (0xFCB8, 'M', u'طح'), - (0xFCB9, 'M', u'ظم'), - (0xFCBA, 'M', u'عج'), - (0xFCBB, 'M', u'عم'), - (0xFCBC, 'M', u'غج'), - (0xFCBD, 'M', u'غم'), - (0xFCBE, 'M', u'فج'), - (0xFCBF, 'M', u'فح'), - (0xFCC0, 'M', u'فخ'), - (0xFCC1, 'M', u'فم'), - (0xFCC2, 'M', u'قح'), - (0xFCC3, 'M', u'قم'), - (0xFCC4, 'M', u'كج'), - (0xFCC5, 'M', u'كح'), - (0xFCC6, 'M', u'كخ'), - (0xFCC7, 'M', u'كل'), - (0xFCC8, 'M', u'كم'), - (0xFCC9, 'M', u'لج'), - (0xFCCA, 'M', u'لح'), - (0xFCCB, 'M', u'لخ'), - (0xFCCC, 'M', u'لم'), - (0xFCCD, 'M', u'له'), - (0xFCCE, 'M', u'مج'), - (0xFCCF, 'M', u'مح'), - (0xFCD0, 'M', u'مخ'), - (0xFCD1, 'M', u'مم'), - (0xFCD2, 'M', u'نج'), - (0xFCD3, 'M', u'نح'), - (0xFCD4, 'M', u'نخ'), - (0xFCD5, 'M', u'نم'), - (0xFCD6, 'M', u'نه'), - (0xFCD7, 'M', u'هج'), - (0xFCD8, 'M', u'هم'), - (0xFCD9, 'M', u'هٰ'), - (0xFCDA, 'M', u'يج'), - (0xFCDB, 'M', u'يح'), - (0xFCDC, 'M', u'يخ'), - (0xFCDD, 'M', u'يم'), - (0xFCDE, 'M', u'يه'), - (0xFCDF, 'M', u'ئم'), - (0xFCE0, 'M', u'ئه'), - (0xFCE1, 'M', u'بم'), - (0xFCE2, 'M', u'به'), - (0xFCE3, 'M', u'تم'), - (0xFCE4, 'M', u'ته'), - (0xFCE5, 'M', u'ثم'), - (0xFCE6, 'M', u'ثه'), - (0xFCE7, 'M', u'سم'), - (0xFCE8, 'M', u'سه'), - (0xFCE9, 'M', u'شم'), - (0xFCEA, 'M', u'شه'), - (0xFCEB, 'M', u'كل'), - (0xFCEC, 'M', u'كم'), - (0xFCED, 'M', u'لم'), - (0xFCEE, 'M', u'نم'), - (0xFCEF, 'M', u'نه'), - (0xFCF0, 'M', u'يم'), - (0xFCF1, 'M', u'يه'), - (0xFCF2, 'M', u'ـَّ'), - (0xFCF3, 'M', u'ـُّ'), - (0xFCF4, 'M', u'ـِّ'), - (0xFCF5, 'M', u'طى'), - (0xFCF6, 'M', u'طي'), - (0xFCF7, 'M', u'عى'), - (0xFCF8, 'M', u'عي'), - (0xFCF9, 'M', u'غى'), - (0xFCFA, 'M', u'غي'), - (0xFCFB, 'M', u'سى'), - (0xFCFC, 'M', u'سي'), - (0xFCFD, 'M', u'شى'), - (0xFCFE, 'M', u'شي'), - (0xFCFF, 'M', u'حى'), - (0xFD00, 'M', u'حي'), - (0xFD01, 'M', u'جى'), - (0xFD02, 'M', u'جي'), - (0xFD03, 'M', u'خى'), - (0xFD04, 'M', u'خي'), - (0xFD05, 'M', u'صى'), - (0xFD06, 'M', u'صي'), - ] - -def _seg_46(): - return [ - (0xFD07, 'M', u'ضى'), - (0xFD08, 'M', u'ضي'), - (0xFD09, 'M', u'شج'), - (0xFD0A, 'M', u'شح'), - (0xFD0B, 'M', u'شخ'), - (0xFD0C, 'M', u'شم'), - (0xFD0D, 'M', u'شر'), - (0xFD0E, 'M', u'سر'), - (0xFD0F, 'M', u'صر'), - (0xFD10, 'M', u'ضر'), - (0xFD11, 'M', u'طى'), - (0xFD12, 'M', u'طي'), - (0xFD13, 'M', u'عى'), - (0xFD14, 'M', u'عي'), - (0xFD15, 'M', u'غى'), - (0xFD16, 'M', u'غي'), - (0xFD17, 'M', u'سى'), - (0xFD18, 'M', u'سي'), - (0xFD19, 'M', u'شى'), - (0xFD1A, 'M', u'شي'), - (0xFD1B, 'M', u'حى'), - (0xFD1C, 'M', u'حي'), - (0xFD1D, 'M', u'جى'), - (0xFD1E, 'M', u'جي'), - (0xFD1F, 'M', u'خى'), - (0xFD20, 'M', u'خي'), - (0xFD21, 'M', u'صى'), - (0xFD22, 'M', u'صي'), - (0xFD23, 'M', u'ضى'), - (0xFD24, 'M', u'ضي'), - (0xFD25, 'M', u'شج'), - (0xFD26, 'M', u'شح'), - (0xFD27, 'M', u'شخ'), - (0xFD28, 'M', u'شم'), - (0xFD29, 'M', u'شر'), - (0xFD2A, 'M', u'سر'), - (0xFD2B, 'M', u'صر'), - (0xFD2C, 'M', u'ضر'), - (0xFD2D, 'M', u'شج'), - (0xFD2E, 'M', u'شح'), - (0xFD2F, 'M', u'شخ'), - (0xFD30, 'M', u'شم'), - (0xFD31, 'M', u'سه'), - (0xFD32, 'M', u'شه'), - (0xFD33, 'M', u'طم'), - (0xFD34, 'M', u'سج'), - (0xFD35, 'M', u'سح'), - (0xFD36, 'M', u'سخ'), - (0xFD37, 'M', u'شج'), - (0xFD38, 'M', u'شح'), - (0xFD39, 'M', u'شخ'), - (0xFD3A, 'M', u'طم'), - (0xFD3B, 'M', u'ظم'), - (0xFD3C, 'M', u'اً'), - (0xFD3E, 'V'), - (0xFD40, 'X'), - (0xFD50, 'M', u'تجم'), - (0xFD51, 'M', u'تحج'), - (0xFD53, 'M', u'تحم'), - (0xFD54, 'M', u'تخم'), - (0xFD55, 'M', u'تمج'), - (0xFD56, 'M', u'تمح'), - (0xFD57, 'M', u'تمخ'), - (0xFD58, 'M', u'جمح'), - (0xFD5A, 'M', u'حمي'), - (0xFD5B, 'M', u'حمى'), - (0xFD5C, 'M', u'سحج'), - (0xFD5D, 'M', u'سجح'), - (0xFD5E, 'M', u'سجى'), - (0xFD5F, 'M', u'سمح'), - (0xFD61, 'M', u'سمج'), - (0xFD62, 'M', u'سمم'), - (0xFD64, 'M', u'صحح'), - (0xFD66, 'M', u'صمم'), - (0xFD67, 'M', u'شحم'), - (0xFD69, 'M', u'شجي'), - (0xFD6A, 'M', u'شمخ'), - (0xFD6C, 'M', u'شمم'), - (0xFD6E, 'M', u'ضحى'), - (0xFD6F, 'M', u'ضخم'), - (0xFD71, 'M', u'طمح'), - (0xFD73, 'M', u'طمم'), - (0xFD74, 'M', u'طمي'), - (0xFD75, 'M', u'عجم'), - (0xFD76, 'M', u'عمم'), - (0xFD78, 'M', u'عمى'), - (0xFD79, 'M', u'غمم'), - (0xFD7A, 'M', u'غمي'), - (0xFD7B, 'M', u'غمى'), - (0xFD7C, 'M', u'فخم'), - (0xFD7E, 'M', u'قمح'), - (0xFD7F, 'M', u'قمم'), - (0xFD80, 'M', u'لحم'), - (0xFD81, 'M', u'لحي'), - (0xFD82, 'M', u'لحى'), - (0xFD83, 'M', u'لجج'), - (0xFD85, 'M', u'لخم'), - (0xFD87, 'M', u'لمح'), - (0xFD89, 'M', u'محج'), - (0xFD8A, 'M', u'محم'), - ] - -def _seg_47(): - return [ - (0xFD8B, 'M', u'محي'), - (0xFD8C, 'M', u'مجح'), - (0xFD8D, 'M', u'مجم'), - (0xFD8E, 'M', u'مخج'), - (0xFD8F, 'M', u'مخم'), - (0xFD90, 'X'), - (0xFD92, 'M', u'مجخ'), - (0xFD93, 'M', u'همج'), - (0xFD94, 'M', u'همم'), - (0xFD95, 'M', u'نحم'), - (0xFD96, 'M', u'نحى'), - (0xFD97, 'M', u'نجم'), - (0xFD99, 'M', u'نجى'), - (0xFD9A, 'M', u'نمي'), - (0xFD9B, 'M', u'نمى'), - (0xFD9C, 'M', u'يمم'), - (0xFD9E, 'M', u'بخي'), - (0xFD9F, 'M', u'تجي'), - (0xFDA0, 'M', u'تجى'), - (0xFDA1, 'M', u'تخي'), - (0xFDA2, 'M', u'تخى'), - (0xFDA3, 'M', u'تمي'), - (0xFDA4, 'M', u'تمى'), - (0xFDA5, 'M', u'جمي'), - (0xFDA6, 'M', u'جحى'), - (0xFDA7, 'M', u'جمى'), - (0xFDA8, 'M', u'سخى'), - (0xFDA9, 'M', u'صحي'), - (0xFDAA, 'M', u'شحي'), - (0xFDAB, 'M', u'ضحي'), - (0xFDAC, 'M', u'لجي'), - (0xFDAD, 'M', u'لمي'), - (0xFDAE, 'M', u'يحي'), - (0xFDAF, 'M', u'يجي'), - (0xFDB0, 'M', u'يمي'), - (0xFDB1, 'M', u'ممي'), - (0xFDB2, 'M', u'قمي'), - (0xFDB3, 'M', u'نحي'), - (0xFDB4, 'M', u'قمح'), - (0xFDB5, 'M', u'لحم'), - (0xFDB6, 'M', u'عمي'), - (0xFDB7, 'M', u'كمي'), - (0xFDB8, 'M', u'نجح'), - (0xFDB9, 'M', u'مخي'), - (0xFDBA, 'M', u'لجم'), - (0xFDBB, 'M', u'كمم'), - (0xFDBC, 'M', u'لجم'), - (0xFDBD, 'M', u'نجح'), - (0xFDBE, 'M', u'جحي'), - (0xFDBF, 'M', u'حجي'), - (0xFDC0, 'M', u'مجي'), - (0xFDC1, 'M', u'فمي'), - (0xFDC2, 'M', u'بحي'), - (0xFDC3, 'M', u'كمم'), - (0xFDC4, 'M', u'عجم'), - (0xFDC5, 'M', u'صمم'), - (0xFDC6, 'M', u'سخي'), - (0xFDC7, 'M', u'نجي'), - (0xFDC8, 'X'), - (0xFDF0, 'M', u'صلے'), - (0xFDF1, 'M', u'قلے'), - (0xFDF2, 'M', u'الله'), - (0xFDF3, 'M', u'اكبر'), - (0xFDF4, 'M', u'محمد'), - (0xFDF5, 'M', u'صلعم'), - (0xFDF6, 'M', u'رسول'), - (0xFDF7, 'M', u'عليه'), - (0xFDF8, 'M', u'وسلم'), - (0xFDF9, 'M', u'صلى'), - (0xFDFA, '3', u'صلى الله عليه وسلم'), - (0xFDFB, '3', u'جل جلاله'), - (0xFDFC, 'M', u'ریال'), - (0xFDFD, 'V'), - (0xFDFE, 'X'), - (0xFE00, 'I'), - (0xFE10, '3', u','), - (0xFE11, 'M', u'、'), - (0xFE12, 'X'), - (0xFE13, '3', u':'), - (0xFE14, '3', u';'), - (0xFE15, '3', u'!'), - (0xFE16, '3', u'?'), - (0xFE17, 'M', u'〖'), - (0xFE18, 'M', u'〗'), - (0xFE19, 'X'), - (0xFE20, 'V'), - (0xFE27, 'X'), - (0xFE31, 'M', u'—'), - (0xFE32, 'M', u'–'), - (0xFE33, '3', u'_'), - (0xFE35, '3', u'('), - (0xFE36, '3', u')'), - (0xFE37, '3', u'{'), - (0xFE38, '3', u'}'), - (0xFE39, 'M', u'〔'), - (0xFE3A, 'M', u'〕'), - (0xFE3B, 'M', u'【'), - (0xFE3C, 'M', u'】'), - (0xFE3D, 'M', u'《'), - (0xFE3E, 'M', u'》'), - ] - -def _seg_48(): - return [ - (0xFE3F, 'M', u'〈'), - (0xFE40, 'M', u'〉'), - (0xFE41, 'M', u'「'), - (0xFE42, 'M', u'」'), - (0xFE43, 'M', u'『'), - (0xFE44, 'M', u'』'), - (0xFE45, 'V'), - (0xFE47, '3', u'['), - (0xFE48, '3', u']'), - (0xFE49, '3', u' ̅'), - (0xFE4D, '3', u'_'), - (0xFE50, '3', u','), - (0xFE51, 'M', u'、'), - (0xFE52, 'X'), - (0xFE54, '3', u';'), - (0xFE55, '3', u':'), - (0xFE56, '3', u'?'), - (0xFE57, '3', u'!'), - (0xFE58, 'M', u'—'), - (0xFE59, '3', u'('), - (0xFE5A, '3', u')'), - (0xFE5B, '3', u'{'), - (0xFE5C, '3', u'}'), - (0xFE5D, 'M', u'〔'), - (0xFE5E, 'M', u'〕'), - (0xFE5F, '3', u'#'), - (0xFE60, '3', u'&'), - (0xFE61, '3', u'*'), - (0xFE62, '3', u'+'), - (0xFE63, 'M', u'-'), - (0xFE64, '3', u'<'), - (0xFE65, '3', u'>'), - (0xFE66, '3', u'='), - (0xFE67, 'X'), - (0xFE68, '3', u'\\'), - (0xFE69, '3', u'$'), - (0xFE6A, '3', u'%'), - (0xFE6B, '3', u'@'), - (0xFE6C, 'X'), - (0xFE70, '3', u' ً'), - (0xFE71, 'M', u'ـً'), - (0xFE72, '3', u' ٌ'), - (0xFE73, 'V'), - (0xFE74, '3', u' ٍ'), - (0xFE75, 'X'), - (0xFE76, '3', u' َ'), - (0xFE77, 'M', u'ـَ'), - (0xFE78, '3', u' ُ'), - (0xFE79, 'M', u'ـُ'), - (0xFE7A, '3', u' ِ'), - (0xFE7B, 'M', u'ـِ'), - (0xFE7C, '3', u' ّ'), - (0xFE7D, 'M', u'ـّ'), - (0xFE7E, '3', u' ْ'), - (0xFE7F, 'M', u'ـْ'), - (0xFE80, 'M', u'ء'), - (0xFE81, 'M', u'آ'), - (0xFE83, 'M', u'أ'), - (0xFE85, 'M', u'ؤ'), - (0xFE87, 'M', u'إ'), - (0xFE89, 'M', u'ئ'), - (0xFE8D, 'M', u'ا'), - (0xFE8F, 'M', u'ب'), - (0xFE93, 'M', u'ة'), - (0xFE95, 'M', u'ت'), - (0xFE99, 'M', u'ث'), - (0xFE9D, 'M', u'ج'), - (0xFEA1, 'M', u'ح'), - (0xFEA5, 'M', u'خ'), - (0xFEA9, 'M', u'د'), - (0xFEAB, 'M', u'ذ'), - (0xFEAD, 'M', u'ر'), - (0xFEAF, 'M', u'ز'), - (0xFEB1, 'M', u'س'), - (0xFEB5, 'M', u'ش'), - (0xFEB9, 'M', u'ص'), - (0xFEBD, 'M', u'ض'), - (0xFEC1, 'M', u'ط'), - (0xFEC5, 'M', u'ظ'), - (0xFEC9, 'M', u'ع'), - (0xFECD, 'M', u'غ'), - (0xFED1, 'M', u'ف'), - (0xFED5, 'M', u'ق'), - (0xFED9, 'M', u'ك'), - (0xFEDD, 'M', u'ل'), - (0xFEE1, 'M', u'م'), - (0xFEE5, 'M', u'ن'), - (0xFEE9, 'M', u'ه'), - (0xFEED, 'M', u'و'), - (0xFEEF, 'M', u'ى'), - (0xFEF1, 'M', u'ي'), - (0xFEF5, 'M', u'لآ'), - (0xFEF7, 'M', u'لأ'), - (0xFEF9, 'M', u'لإ'), - (0xFEFB, 'M', u'لا'), - (0xFEFD, 'X'), - (0xFEFF, 'I'), - (0xFF00, 'X'), - (0xFF01, '3', u'!'), - (0xFF02, '3', u'"'), - ] - -def _seg_49(): - return [ - (0xFF03, '3', u'#'), - (0xFF04, '3', u'$'), - (0xFF05, '3', u'%'), - (0xFF06, '3', u'&'), - (0xFF07, '3', u'\''), - (0xFF08, '3', u'('), - (0xFF09, '3', u')'), - (0xFF0A, '3', u'*'), - (0xFF0B, '3', u'+'), - (0xFF0C, '3', u','), - (0xFF0D, 'M', u'-'), - (0xFF0E, 'M', u'.'), - (0xFF0F, '3', u'/'), - (0xFF10, 'M', u'0'), - (0xFF11, 'M', u'1'), - (0xFF12, 'M', u'2'), - (0xFF13, 'M', u'3'), - (0xFF14, 'M', u'4'), - (0xFF15, 'M', u'5'), - (0xFF16, 'M', u'6'), - (0xFF17, 'M', u'7'), - (0xFF18, 'M', u'8'), - (0xFF19, 'M', u'9'), - (0xFF1A, '3', u':'), - (0xFF1B, '3', u';'), - (0xFF1C, '3', u'<'), - (0xFF1D, '3', u'='), - (0xFF1E, '3', u'>'), - (0xFF1F, '3', u'?'), - (0xFF20, '3', u'@'), - (0xFF21, 'M', u'a'), - (0xFF22, 'M', u'b'), - (0xFF23, 'M', u'c'), - (0xFF24, 'M', u'd'), - (0xFF25, 'M', u'e'), - (0xFF26, 'M', u'f'), - (0xFF27, 'M', u'g'), - (0xFF28, 'M', u'h'), - (0xFF29, 'M', u'i'), - (0xFF2A, 'M', u'j'), - (0xFF2B, 'M', u'k'), - (0xFF2C, 'M', u'l'), - (0xFF2D, 'M', u'm'), - (0xFF2E, 'M', u'n'), - (0xFF2F, 'M', u'o'), - (0xFF30, 'M', u'p'), - (0xFF31, 'M', u'q'), - (0xFF32, 'M', u'r'), - (0xFF33, 'M', u's'), - (0xFF34, 'M', u't'), - (0xFF35, 'M', u'u'), - (0xFF36, 'M', u'v'), - (0xFF37, 'M', u'w'), - (0xFF38, 'M', u'x'), - (0xFF39, 'M', u'y'), - (0xFF3A, 'M', u'z'), - (0xFF3B, '3', u'['), - (0xFF3C, '3', u'\\'), - (0xFF3D, '3', u']'), - (0xFF3E, '3', u'^'), - (0xFF3F, '3', u'_'), - (0xFF40, '3', u'`'), - (0xFF41, 'M', u'a'), - (0xFF42, 'M', u'b'), - (0xFF43, 'M', u'c'), - (0xFF44, 'M', u'd'), - (0xFF45, 'M', u'e'), - (0xFF46, 'M', u'f'), - (0xFF47, 'M', u'g'), - (0xFF48, 'M', u'h'), - (0xFF49, 'M', u'i'), - (0xFF4A, 'M', u'j'), - (0xFF4B, 'M', u'k'), - (0xFF4C, 'M', u'l'), - (0xFF4D, 'M', u'm'), - (0xFF4E, 'M', u'n'), - (0xFF4F, 'M', u'o'), - (0xFF50, 'M', u'p'), - (0xFF51, 'M', u'q'), - (0xFF52, 'M', u'r'), - (0xFF53, 'M', u's'), - (0xFF54, 'M', u't'), - (0xFF55, 'M', u'u'), - (0xFF56, 'M', u'v'), - (0xFF57, 'M', u'w'), - (0xFF58, 'M', u'x'), - (0xFF59, 'M', u'y'), - (0xFF5A, 'M', u'z'), - (0xFF5B, '3', u'{'), - (0xFF5C, '3', u'|'), - (0xFF5D, '3', u'}'), - (0xFF5E, '3', u'~'), - (0xFF5F, 'M', u'⦅'), - (0xFF60, 'M', u'⦆'), - (0xFF61, 'M', u'.'), - (0xFF62, 'M', u'「'), - (0xFF63, 'M', u'」'), - (0xFF64, 'M', u'、'), - (0xFF65, 'M', u'・'), - (0xFF66, 'M', u'ヲ'), - ] - -def _seg_50(): - return [ - (0xFF67, 'M', u'ァ'), - (0xFF68, 'M', u'ィ'), - (0xFF69, 'M', u'ゥ'), - (0xFF6A, 'M', u'ェ'), - (0xFF6B, 'M', u'ォ'), - (0xFF6C, 'M', u'ャ'), - (0xFF6D, 'M', u'ュ'), - (0xFF6E, 'M', u'ョ'), - (0xFF6F, 'M', u'ッ'), - (0xFF70, 'M', u'ー'), - (0xFF71, 'M', u'ア'), - (0xFF72, 'M', u'イ'), - (0xFF73, 'M', u'ウ'), - (0xFF74, 'M', u'エ'), - (0xFF75, 'M', u'オ'), - (0xFF76, 'M', u'カ'), - (0xFF77, 'M', u'キ'), - (0xFF78, 'M', u'ク'), - (0xFF79, 'M', u'ケ'), - (0xFF7A, 'M', u'コ'), - (0xFF7B, 'M', u'サ'), - (0xFF7C, 'M', u'シ'), - (0xFF7D, 'M', u'ス'), - (0xFF7E, 'M', u'セ'), - (0xFF7F, 'M', u'ソ'), - (0xFF80, 'M', u'タ'), - (0xFF81, 'M', u'チ'), - (0xFF82, 'M', u'ツ'), - (0xFF83, 'M', u'テ'), - (0xFF84, 'M', u'ト'), - (0xFF85, 'M', u'ナ'), - (0xFF86, 'M', u'ニ'), - (0xFF87, 'M', u'ヌ'), - (0xFF88, 'M', u'ネ'), - (0xFF89, 'M', u'ノ'), - (0xFF8A, 'M', u'ハ'), - (0xFF8B, 'M', u'ヒ'), - (0xFF8C, 'M', u'フ'), - (0xFF8D, 'M', u'ヘ'), - (0xFF8E, 'M', u'ホ'), - (0xFF8F, 'M', u'マ'), - (0xFF90, 'M', u'ミ'), - (0xFF91, 'M', u'ム'), - (0xFF92, 'M', u'メ'), - (0xFF93, 'M', u'モ'), - (0xFF94, 'M', u'ヤ'), - (0xFF95, 'M', u'ユ'), - (0xFF96, 'M', u'ヨ'), - (0xFF97, 'M', u'ラ'), - (0xFF98, 'M', u'リ'), - (0xFF99, 'M', u'ル'), - (0xFF9A, 'M', u'レ'), - (0xFF9B, 'M', u'ロ'), - (0xFF9C, 'M', u'ワ'), - (0xFF9D, 'M', u'ン'), - (0xFF9E, 'M', u'゙'), - (0xFF9F, 'M', u'゚'), - (0xFFA0, 'X'), - (0xFFA1, 'M', u'ᄀ'), - (0xFFA2, 'M', u'ᄁ'), - (0xFFA3, 'M', u'ᆪ'), - (0xFFA4, 'M', u'ᄂ'), - (0xFFA5, 'M', u'ᆬ'), - (0xFFA6, 'M', u'ᆭ'), - (0xFFA7, 'M', u'ᄃ'), - (0xFFA8, 'M', u'ᄄ'), - (0xFFA9, 'M', u'ᄅ'), - (0xFFAA, 'M', u'ᆰ'), - (0xFFAB, 'M', u'ᆱ'), - (0xFFAC, 'M', u'ᆲ'), - (0xFFAD, 'M', u'ᆳ'), - (0xFFAE, 'M', u'ᆴ'), - (0xFFAF, 'M', u'ᆵ'), - (0xFFB0, 'M', u'ᄚ'), - (0xFFB1, 'M', u'ᄆ'), - (0xFFB2, 'M', u'ᄇ'), - (0xFFB3, 'M', u'ᄈ'), - (0xFFB4, 'M', u'ᄡ'), - (0xFFB5, 'M', u'ᄉ'), - (0xFFB6, 'M', u'ᄊ'), - (0xFFB7, 'M', u'ᄋ'), - (0xFFB8, 'M', u'ᄌ'), - (0xFFB9, 'M', u'ᄍ'), - (0xFFBA, 'M', u'ᄎ'), - (0xFFBB, 'M', u'ᄏ'), - (0xFFBC, 'M', u'ᄐ'), - (0xFFBD, 'M', u'ᄑ'), - (0xFFBE, 'M', u'ᄒ'), - (0xFFBF, 'X'), - (0xFFC2, 'M', u'ᅡ'), - (0xFFC3, 'M', u'ᅢ'), - (0xFFC4, 'M', u'ᅣ'), - (0xFFC5, 'M', u'ᅤ'), - (0xFFC6, 'M', u'ᅥ'), - (0xFFC7, 'M', u'ᅦ'), - (0xFFC8, 'X'), - (0xFFCA, 'M', u'ᅧ'), - (0xFFCB, 'M', u'ᅨ'), - (0xFFCC, 'M', u'ᅩ'), - (0xFFCD, 'M', u'ᅪ'), - ] - -def _seg_51(): - return [ - (0xFFCE, 'M', u'ᅫ'), - (0xFFCF, 'M', u'ᅬ'), - (0xFFD0, 'X'), - (0xFFD2, 'M', u'ᅭ'), - (0xFFD3, 'M', u'ᅮ'), - (0xFFD4, 'M', u'ᅯ'), - (0xFFD5, 'M', u'ᅰ'), - (0xFFD6, 'M', u'ᅱ'), - (0xFFD7, 'M', u'ᅲ'), - (0xFFD8, 'X'), - (0xFFDA, 'M', u'ᅳ'), - (0xFFDB, 'M', u'ᅴ'), - (0xFFDC, 'M', u'ᅵ'), - (0xFFDD, 'X'), - (0xFFE0, 'M', u'¢'), - (0xFFE1, 'M', u'£'), - (0xFFE2, 'M', u'¬'), - (0xFFE3, '3', u' ̄'), - (0xFFE4, 'M', u'¦'), - (0xFFE5, 'M', u'¥'), - (0xFFE6, 'M', u'₩'), - (0xFFE7, 'X'), - (0xFFE8, 'M', u'│'), - (0xFFE9, 'M', u'←'), - (0xFFEA, 'M', u'↑'), - (0xFFEB, 'M', u'→'), - (0xFFEC, 'M', u'↓'), - (0xFFED, 'M', u'■'), - (0xFFEE, 'M', u'○'), - (0xFFEF, 'X'), - (0x10000, 'V'), - (0x1000C, 'X'), - (0x1000D, 'V'), - (0x10027, 'X'), - (0x10028, 'V'), - (0x1003B, 'X'), - (0x1003C, 'V'), - (0x1003E, 'X'), - (0x1003F, 'V'), - (0x1004E, 'X'), - (0x10050, 'V'), - (0x1005E, 'X'), - (0x10080, 'V'), - (0x100FB, 'X'), - (0x10100, 'V'), - (0x10103, 'X'), - (0x10107, 'V'), - (0x10134, 'X'), - (0x10137, 'V'), - (0x1018B, 'X'), - (0x10190, 'V'), - (0x1019C, 'X'), - (0x101D0, 'V'), - (0x101FE, 'X'), - (0x10280, 'V'), - (0x1029D, 'X'), - (0x102A0, 'V'), - (0x102D1, 'X'), - (0x10300, 'V'), - (0x1031F, 'X'), - (0x10320, 'V'), - (0x10324, 'X'), - (0x10330, 'V'), - (0x1034B, 'X'), - (0x10380, 'V'), - (0x1039E, 'X'), - (0x1039F, 'V'), - (0x103C4, 'X'), - (0x103C8, 'V'), - (0x103D6, 'X'), - (0x10400, 'M', u'𐐨'), - (0x10401, 'M', u'𐐩'), - (0x10402, 'M', u'𐐪'), - (0x10403, 'M', u'𐐫'), - (0x10404, 'M', u'𐐬'), - (0x10405, 'M', u'𐐭'), - (0x10406, 'M', u'𐐮'), - (0x10407, 'M', u'𐐯'), - (0x10408, 'M', u'𐐰'), - (0x10409, 'M', u'𐐱'), - (0x1040A, 'M', u'𐐲'), - (0x1040B, 'M', u'𐐳'), - (0x1040C, 'M', u'𐐴'), - (0x1040D, 'M', u'𐐵'), - (0x1040E, 'M', u'𐐶'), - (0x1040F, 'M', u'𐐷'), - (0x10410, 'M', u'𐐸'), - (0x10411, 'M', u'𐐹'), - (0x10412, 'M', u'𐐺'), - (0x10413, 'M', u'𐐻'), - (0x10414, 'M', u'𐐼'), - (0x10415, 'M', u'𐐽'), - (0x10416, 'M', u'𐐾'), - (0x10417, 'M', u'𐐿'), - (0x10418, 'M', u'𐑀'), - (0x10419, 'M', u'𐑁'), - (0x1041A, 'M', u'𐑂'), - (0x1041B, 'M', u'𐑃'), - (0x1041C, 'M', u'𐑄'), - (0x1041D, 'M', u'𐑅'), - ] - -def _seg_52(): - return [ - (0x1041E, 'M', u'𐑆'), - (0x1041F, 'M', u'𐑇'), - (0x10420, 'M', u'𐑈'), - (0x10421, 'M', u'𐑉'), - (0x10422, 'M', u'𐑊'), - (0x10423, 'M', u'𐑋'), - (0x10424, 'M', u'𐑌'), - (0x10425, 'M', u'𐑍'), - (0x10426, 'M', u'𐑎'), - (0x10427, 'M', u'𐑏'), - (0x10428, 'V'), - (0x1049E, 'X'), - (0x104A0, 'V'), - (0x104AA, 'X'), - (0x10800, 'V'), - (0x10806, 'X'), - (0x10808, 'V'), - (0x10809, 'X'), - (0x1080A, 'V'), - (0x10836, 'X'), - (0x10837, 'V'), - (0x10839, 'X'), - (0x1083C, 'V'), - (0x1083D, 'X'), - (0x1083F, 'V'), - (0x10856, 'X'), - (0x10857, 'V'), - (0x10860, 'X'), - (0x10900, 'V'), - (0x1091C, 'X'), - (0x1091F, 'V'), - (0x1093A, 'X'), - (0x1093F, 'V'), - (0x10940, 'X'), - (0x10980, 'V'), - (0x109B8, 'X'), - (0x109BE, 'V'), - (0x109C0, 'X'), - (0x10A00, 'V'), - (0x10A04, 'X'), - (0x10A05, 'V'), - (0x10A07, 'X'), - (0x10A0C, 'V'), - (0x10A14, 'X'), - (0x10A15, 'V'), - (0x10A18, 'X'), - (0x10A19, 'V'), - (0x10A34, 'X'), - (0x10A38, 'V'), - (0x10A3B, 'X'), - (0x10A3F, 'V'), - (0x10A48, 'X'), - (0x10A50, 'V'), - (0x10A59, 'X'), - (0x10A60, 'V'), - (0x10A80, 'X'), - (0x10B00, 'V'), - (0x10B36, 'X'), - (0x10B39, 'V'), - (0x10B56, 'X'), - (0x10B58, 'V'), - (0x10B73, 'X'), - (0x10B78, 'V'), - (0x10B80, 'X'), - (0x10C00, 'V'), - (0x10C49, 'X'), - (0x10E60, 'V'), - (0x10E7F, 'X'), - (0x11000, 'V'), - (0x1104E, 'X'), - (0x11052, 'V'), - (0x11070, 'X'), - (0x11080, 'V'), - (0x110BD, 'X'), - (0x110BE, 'V'), - (0x110C2, 'X'), - (0x110D0, 'V'), - (0x110E9, 'X'), - (0x110F0, 'V'), - (0x110FA, 'X'), - (0x11100, 'V'), - (0x11135, 'X'), - (0x11136, 'V'), - (0x11144, 'X'), - (0x11180, 'V'), - (0x111C9, 'X'), - (0x111D0, 'V'), - (0x111DA, 'X'), - (0x11680, 'V'), - (0x116B8, 'X'), - (0x116C0, 'V'), - (0x116CA, 'X'), - (0x12000, 'V'), - (0x1236F, 'X'), - (0x12400, 'V'), - (0x12463, 'X'), - (0x12470, 'V'), - (0x12474, 'X'), - (0x13000, 'V'), - (0x1342F, 'X'), - ] - -def _seg_53(): - return [ - (0x16800, 'V'), - (0x16A39, 'X'), - (0x16F00, 'V'), - (0x16F45, 'X'), - (0x16F50, 'V'), - (0x16F7F, 'X'), - (0x16F8F, 'V'), - (0x16FA0, 'X'), - (0x1B000, 'V'), - (0x1B002, 'X'), - (0x1D000, 'V'), - (0x1D0F6, 'X'), - (0x1D100, 'V'), - (0x1D127, 'X'), - (0x1D129, 'V'), - (0x1D15E, 'M', u'𝅗𝅥'), - (0x1D15F, 'M', u'𝅘𝅥'), - (0x1D160, 'M', u'𝅘𝅥𝅮'), - (0x1D161, 'M', u'𝅘𝅥𝅯'), - (0x1D162, 'M', u'𝅘𝅥𝅰'), - (0x1D163, 'M', u'𝅘𝅥𝅱'), - (0x1D164, 'M', u'𝅘𝅥𝅲'), - (0x1D165, 'V'), - (0x1D173, 'X'), - (0x1D17B, 'V'), - (0x1D1BB, 'M', u'𝆹𝅥'), - (0x1D1BC, 'M', u'𝆺𝅥'), - (0x1D1BD, 'M', u'𝆹𝅥𝅮'), - (0x1D1BE, 'M', u'𝆺𝅥𝅮'), - (0x1D1BF, 'M', u'𝆹𝅥𝅯'), - (0x1D1C0, 'M', u'𝆺𝅥𝅯'), - (0x1D1C1, 'V'), - (0x1D1DE, 'X'), - (0x1D200, 'V'), - (0x1D246, 'X'), - (0x1D300, 'V'), - (0x1D357, 'X'), - (0x1D360, 'V'), - (0x1D372, 'X'), - (0x1D400, 'M', u'a'), - (0x1D401, 'M', u'b'), - (0x1D402, 'M', u'c'), - (0x1D403, 'M', u'd'), - (0x1D404, 'M', u'e'), - (0x1D405, 'M', u'f'), - (0x1D406, 'M', u'g'), - (0x1D407, 'M', u'h'), - (0x1D408, 'M', u'i'), - (0x1D409, 'M', u'j'), - (0x1D40A, 'M', u'k'), - (0x1D40B, 'M', u'l'), - (0x1D40C, 'M', u'm'), - (0x1D40D, 'M', u'n'), - (0x1D40E, 'M', u'o'), - (0x1D40F, 'M', u'p'), - (0x1D410, 'M', u'q'), - (0x1D411, 'M', u'r'), - (0x1D412, 'M', u's'), - (0x1D413, 'M', u't'), - (0x1D414, 'M', u'u'), - (0x1D415, 'M', u'v'), - (0x1D416, 'M', u'w'), - (0x1D417, 'M', u'x'), - (0x1D418, 'M', u'y'), - (0x1D419, 'M', u'z'), - (0x1D41A, 'M', u'a'), - (0x1D41B, 'M', u'b'), - (0x1D41C, 'M', u'c'), - (0x1D41D, 'M', u'd'), - (0x1D41E, 'M', u'e'), - (0x1D41F, 'M', u'f'), - (0x1D420, 'M', u'g'), - (0x1D421, 'M', u'h'), - (0x1D422, 'M', u'i'), - (0x1D423, 'M', u'j'), - (0x1D424, 'M', u'k'), - (0x1D425, 'M', u'l'), - (0x1D426, 'M', u'm'), - (0x1D427, 'M', u'n'), - (0x1D428, 'M', u'o'), - (0x1D429, 'M', u'p'), - (0x1D42A, 'M', u'q'), - (0x1D42B, 'M', u'r'), - (0x1D42C, 'M', u's'), - (0x1D42D, 'M', u't'), - (0x1D42E, 'M', u'u'), - (0x1D42F, 'M', u'v'), - (0x1D430, 'M', u'w'), - (0x1D431, 'M', u'x'), - (0x1D432, 'M', u'y'), - (0x1D433, 'M', u'z'), - (0x1D434, 'M', u'a'), - (0x1D435, 'M', u'b'), - (0x1D436, 'M', u'c'), - (0x1D437, 'M', u'd'), - (0x1D438, 'M', u'e'), - (0x1D439, 'M', u'f'), - (0x1D43A, 'M', u'g'), - (0x1D43B, 'M', u'h'), - (0x1D43C, 'M', u'i'), - ] - -def _seg_54(): - return [ - (0x1D43D, 'M', u'j'), - (0x1D43E, 'M', u'k'), - (0x1D43F, 'M', u'l'), - (0x1D440, 'M', u'm'), - (0x1D441, 'M', u'n'), - (0x1D442, 'M', u'o'), - (0x1D443, 'M', u'p'), - (0x1D444, 'M', u'q'), - (0x1D445, 'M', u'r'), - (0x1D446, 'M', u's'), - (0x1D447, 'M', u't'), - (0x1D448, 'M', u'u'), - (0x1D449, 'M', u'v'), - (0x1D44A, 'M', u'w'), - (0x1D44B, 'M', u'x'), - (0x1D44C, 'M', u'y'), - (0x1D44D, 'M', u'z'), - (0x1D44E, 'M', u'a'), - (0x1D44F, 'M', u'b'), - (0x1D450, 'M', u'c'), - (0x1D451, 'M', u'd'), - (0x1D452, 'M', u'e'), - (0x1D453, 'M', u'f'), - (0x1D454, 'M', u'g'), - (0x1D455, 'X'), - (0x1D456, 'M', u'i'), - (0x1D457, 'M', u'j'), - (0x1D458, 'M', u'k'), - (0x1D459, 'M', u'l'), - (0x1D45A, 'M', u'm'), - (0x1D45B, 'M', u'n'), - (0x1D45C, 'M', u'o'), - (0x1D45D, 'M', u'p'), - (0x1D45E, 'M', u'q'), - (0x1D45F, 'M', u'r'), - (0x1D460, 'M', u's'), - (0x1D461, 'M', u't'), - (0x1D462, 'M', u'u'), - (0x1D463, 'M', u'v'), - (0x1D464, 'M', u'w'), - (0x1D465, 'M', u'x'), - (0x1D466, 'M', u'y'), - (0x1D467, 'M', u'z'), - (0x1D468, 'M', u'a'), - (0x1D469, 'M', u'b'), - (0x1D46A, 'M', u'c'), - (0x1D46B, 'M', u'd'), - (0x1D46C, 'M', u'e'), - (0x1D46D, 'M', u'f'), - (0x1D46E, 'M', u'g'), - (0x1D46F, 'M', u'h'), - (0x1D470, 'M', u'i'), - (0x1D471, 'M', u'j'), - (0x1D472, 'M', u'k'), - (0x1D473, 'M', u'l'), - (0x1D474, 'M', u'm'), - (0x1D475, 'M', u'n'), - (0x1D476, 'M', u'o'), - (0x1D477, 'M', u'p'), - (0x1D478, 'M', u'q'), - (0x1D479, 'M', u'r'), - (0x1D47A, 'M', u's'), - (0x1D47B, 'M', u't'), - (0x1D47C, 'M', u'u'), - (0x1D47D, 'M', u'v'), - (0x1D47E, 'M', u'w'), - (0x1D47F, 'M', u'x'), - (0x1D480, 'M', u'y'), - (0x1D481, 'M', u'z'), - (0x1D482, 'M', u'a'), - (0x1D483, 'M', u'b'), - (0x1D484, 'M', u'c'), - (0x1D485, 'M', u'd'), - (0x1D486, 'M', u'e'), - (0x1D487, 'M', u'f'), - (0x1D488, 'M', u'g'), - (0x1D489, 'M', u'h'), - (0x1D48A, 'M', u'i'), - (0x1D48B, 'M', u'j'), - (0x1D48C, 'M', u'k'), - (0x1D48D, 'M', u'l'), - (0x1D48E, 'M', u'm'), - (0x1D48F, 'M', u'n'), - (0x1D490, 'M', u'o'), - (0x1D491, 'M', u'p'), - (0x1D492, 'M', u'q'), - (0x1D493, 'M', u'r'), - (0x1D494, 'M', u's'), - (0x1D495, 'M', u't'), - (0x1D496, 'M', u'u'), - (0x1D497, 'M', u'v'), - (0x1D498, 'M', u'w'), - (0x1D499, 'M', u'x'), - (0x1D49A, 'M', u'y'), - (0x1D49B, 'M', u'z'), - (0x1D49C, 'M', u'a'), - (0x1D49D, 'X'), - (0x1D49E, 'M', u'c'), - (0x1D49F, 'M', u'd'), - (0x1D4A0, 'X'), - ] - -def _seg_55(): - return [ - (0x1D4A2, 'M', u'g'), - (0x1D4A3, 'X'), - (0x1D4A5, 'M', u'j'), - (0x1D4A6, 'M', u'k'), - (0x1D4A7, 'X'), - (0x1D4A9, 'M', u'n'), - (0x1D4AA, 'M', u'o'), - (0x1D4AB, 'M', u'p'), - (0x1D4AC, 'M', u'q'), - (0x1D4AD, 'X'), - (0x1D4AE, 'M', u's'), - (0x1D4AF, 'M', u't'), - (0x1D4B0, 'M', u'u'), - (0x1D4B1, 'M', u'v'), - (0x1D4B2, 'M', u'w'), - (0x1D4B3, 'M', u'x'), - (0x1D4B4, 'M', u'y'), - (0x1D4B5, 'M', u'z'), - (0x1D4B6, 'M', u'a'), - (0x1D4B7, 'M', u'b'), - (0x1D4B8, 'M', u'c'), - (0x1D4B9, 'M', u'd'), - (0x1D4BA, 'X'), - (0x1D4BB, 'M', u'f'), - (0x1D4BC, 'X'), - (0x1D4BD, 'M', u'h'), - (0x1D4BE, 'M', u'i'), - (0x1D4BF, 'M', u'j'), - (0x1D4C0, 'M', u'k'), - (0x1D4C1, 'M', u'l'), - (0x1D4C2, 'M', u'm'), - (0x1D4C3, 'M', u'n'), - (0x1D4C4, 'X'), - (0x1D4C5, 'M', u'p'), - (0x1D4C6, 'M', u'q'), - (0x1D4C7, 'M', u'r'), - (0x1D4C8, 'M', u's'), - (0x1D4C9, 'M', u't'), - (0x1D4CA, 'M', u'u'), - (0x1D4CB, 'M', u'v'), - (0x1D4CC, 'M', u'w'), - (0x1D4CD, 'M', u'x'), - (0x1D4CE, 'M', u'y'), - (0x1D4CF, 'M', u'z'), - (0x1D4D0, 'M', u'a'), - (0x1D4D1, 'M', u'b'), - (0x1D4D2, 'M', u'c'), - (0x1D4D3, 'M', u'd'), - (0x1D4D4, 'M', u'e'), - (0x1D4D5, 'M', u'f'), - (0x1D4D6, 'M', u'g'), - (0x1D4D7, 'M', u'h'), - (0x1D4D8, 'M', u'i'), - (0x1D4D9, 'M', u'j'), - (0x1D4DA, 'M', u'k'), - (0x1D4DB, 'M', u'l'), - (0x1D4DC, 'M', u'm'), - (0x1D4DD, 'M', u'n'), - (0x1D4DE, 'M', u'o'), - (0x1D4DF, 'M', u'p'), - (0x1D4E0, 'M', u'q'), - (0x1D4E1, 'M', u'r'), - (0x1D4E2, 'M', u's'), - (0x1D4E3, 'M', u't'), - (0x1D4E4, 'M', u'u'), - (0x1D4E5, 'M', u'v'), - (0x1D4E6, 'M', u'w'), - (0x1D4E7, 'M', u'x'), - (0x1D4E8, 'M', u'y'), - (0x1D4E9, 'M', u'z'), - (0x1D4EA, 'M', u'a'), - (0x1D4EB, 'M', u'b'), - (0x1D4EC, 'M', u'c'), - (0x1D4ED, 'M', u'd'), - (0x1D4EE, 'M', u'e'), - (0x1D4EF, 'M', u'f'), - (0x1D4F0, 'M', u'g'), - (0x1D4F1, 'M', u'h'), - (0x1D4F2, 'M', u'i'), - (0x1D4F3, 'M', u'j'), - (0x1D4F4, 'M', u'k'), - (0x1D4F5, 'M', u'l'), - (0x1D4F6, 'M', u'm'), - (0x1D4F7, 'M', u'n'), - (0x1D4F8, 'M', u'o'), - (0x1D4F9, 'M', u'p'), - (0x1D4FA, 'M', u'q'), - (0x1D4FB, 'M', u'r'), - (0x1D4FC, 'M', u's'), - (0x1D4FD, 'M', u't'), - (0x1D4FE, 'M', u'u'), - (0x1D4FF, 'M', u'v'), - (0x1D500, 'M', u'w'), - (0x1D501, 'M', u'x'), - (0x1D502, 'M', u'y'), - (0x1D503, 'M', u'z'), - (0x1D504, 'M', u'a'), - (0x1D505, 'M', u'b'), - (0x1D506, 'X'), - (0x1D507, 'M', u'd'), - ] - -def _seg_56(): - return [ - (0x1D508, 'M', u'e'), - (0x1D509, 'M', u'f'), - (0x1D50A, 'M', u'g'), - (0x1D50B, 'X'), - (0x1D50D, 'M', u'j'), - (0x1D50E, 'M', u'k'), - (0x1D50F, 'M', u'l'), - (0x1D510, 'M', u'm'), - (0x1D511, 'M', u'n'), - (0x1D512, 'M', u'o'), - (0x1D513, 'M', u'p'), - (0x1D514, 'M', u'q'), - (0x1D515, 'X'), - (0x1D516, 'M', u's'), - (0x1D517, 'M', u't'), - (0x1D518, 'M', u'u'), - (0x1D519, 'M', u'v'), - (0x1D51A, 'M', u'w'), - (0x1D51B, 'M', u'x'), - (0x1D51C, 'M', u'y'), - (0x1D51D, 'X'), - (0x1D51E, 'M', u'a'), - (0x1D51F, 'M', u'b'), - (0x1D520, 'M', u'c'), - (0x1D521, 'M', u'd'), - (0x1D522, 'M', u'e'), - (0x1D523, 'M', u'f'), - (0x1D524, 'M', u'g'), - (0x1D525, 'M', u'h'), - (0x1D526, 'M', u'i'), - (0x1D527, 'M', u'j'), - (0x1D528, 'M', u'k'), - (0x1D529, 'M', u'l'), - (0x1D52A, 'M', u'm'), - (0x1D52B, 'M', u'n'), - (0x1D52C, 'M', u'o'), - (0x1D52D, 'M', u'p'), - (0x1D52E, 'M', u'q'), - (0x1D52F, 'M', u'r'), - (0x1D530, 'M', u's'), - (0x1D531, 'M', u't'), - (0x1D532, 'M', u'u'), - (0x1D533, 'M', u'v'), - (0x1D534, 'M', u'w'), - (0x1D535, 'M', u'x'), - (0x1D536, 'M', u'y'), - (0x1D537, 'M', u'z'), - (0x1D538, 'M', u'a'), - (0x1D539, 'M', u'b'), - (0x1D53A, 'X'), - (0x1D53B, 'M', u'd'), - (0x1D53C, 'M', u'e'), - (0x1D53D, 'M', u'f'), - (0x1D53E, 'M', u'g'), - (0x1D53F, 'X'), - (0x1D540, 'M', u'i'), - (0x1D541, 'M', u'j'), - (0x1D542, 'M', u'k'), - (0x1D543, 'M', u'l'), - (0x1D544, 'M', u'm'), - (0x1D545, 'X'), - (0x1D546, 'M', u'o'), - (0x1D547, 'X'), - (0x1D54A, 'M', u's'), - (0x1D54B, 'M', u't'), - (0x1D54C, 'M', u'u'), - (0x1D54D, 'M', u'v'), - (0x1D54E, 'M', u'w'), - (0x1D54F, 'M', u'x'), - (0x1D550, 'M', u'y'), - (0x1D551, 'X'), - (0x1D552, 'M', u'a'), - (0x1D553, 'M', u'b'), - (0x1D554, 'M', u'c'), - (0x1D555, 'M', u'd'), - (0x1D556, 'M', u'e'), - (0x1D557, 'M', u'f'), - (0x1D558, 'M', u'g'), - (0x1D559, 'M', u'h'), - (0x1D55A, 'M', u'i'), - (0x1D55B, 'M', u'j'), - (0x1D55C, 'M', u'k'), - (0x1D55D, 'M', u'l'), - (0x1D55E, 'M', u'm'), - (0x1D55F, 'M', u'n'), - (0x1D560, 'M', u'o'), - (0x1D561, 'M', u'p'), - (0x1D562, 'M', u'q'), - (0x1D563, 'M', u'r'), - (0x1D564, 'M', u's'), - (0x1D565, 'M', u't'), - (0x1D566, 'M', u'u'), - (0x1D567, 'M', u'v'), - (0x1D568, 'M', u'w'), - (0x1D569, 'M', u'x'), - (0x1D56A, 'M', u'y'), - (0x1D56B, 'M', u'z'), - (0x1D56C, 'M', u'a'), - (0x1D56D, 'M', u'b'), - (0x1D56E, 'M', u'c'), - ] - -def _seg_57(): - return [ - (0x1D56F, 'M', u'd'), - (0x1D570, 'M', u'e'), - (0x1D571, 'M', u'f'), - (0x1D572, 'M', u'g'), - (0x1D573, 'M', u'h'), - (0x1D574, 'M', u'i'), - (0x1D575, 'M', u'j'), - (0x1D576, 'M', u'k'), - (0x1D577, 'M', u'l'), - (0x1D578, 'M', u'm'), - (0x1D579, 'M', u'n'), - (0x1D57A, 'M', u'o'), - (0x1D57B, 'M', u'p'), - (0x1D57C, 'M', u'q'), - (0x1D57D, 'M', u'r'), - (0x1D57E, 'M', u's'), - (0x1D57F, 'M', u't'), - (0x1D580, 'M', u'u'), - (0x1D581, 'M', u'v'), - (0x1D582, 'M', u'w'), - (0x1D583, 'M', u'x'), - (0x1D584, 'M', u'y'), - (0x1D585, 'M', u'z'), - (0x1D586, 'M', u'a'), - (0x1D587, 'M', u'b'), - (0x1D588, 'M', u'c'), - (0x1D589, 'M', u'd'), - (0x1D58A, 'M', u'e'), - (0x1D58B, 'M', u'f'), - (0x1D58C, 'M', u'g'), - (0x1D58D, 'M', u'h'), - (0x1D58E, 'M', u'i'), - (0x1D58F, 'M', u'j'), - (0x1D590, 'M', u'k'), - (0x1D591, 'M', u'l'), - (0x1D592, 'M', u'm'), - (0x1D593, 'M', u'n'), - (0x1D594, 'M', u'o'), - (0x1D595, 'M', u'p'), - (0x1D596, 'M', u'q'), - (0x1D597, 'M', u'r'), - (0x1D598, 'M', u's'), - (0x1D599, 'M', u't'), - (0x1D59A, 'M', u'u'), - (0x1D59B, 'M', u'v'), - (0x1D59C, 'M', u'w'), - (0x1D59D, 'M', u'x'), - (0x1D59E, 'M', u'y'), - (0x1D59F, 'M', u'z'), - (0x1D5A0, 'M', u'a'), - (0x1D5A1, 'M', u'b'), - (0x1D5A2, 'M', u'c'), - (0x1D5A3, 'M', u'd'), - (0x1D5A4, 'M', u'e'), - (0x1D5A5, 'M', u'f'), - (0x1D5A6, 'M', u'g'), - (0x1D5A7, 'M', u'h'), - (0x1D5A8, 'M', u'i'), - (0x1D5A9, 'M', u'j'), - (0x1D5AA, 'M', u'k'), - (0x1D5AB, 'M', u'l'), - (0x1D5AC, 'M', u'm'), - (0x1D5AD, 'M', u'n'), - (0x1D5AE, 'M', u'o'), - (0x1D5AF, 'M', u'p'), - (0x1D5B0, 'M', u'q'), - (0x1D5B1, 'M', u'r'), - (0x1D5B2, 'M', u's'), - (0x1D5B3, 'M', u't'), - (0x1D5B4, 'M', u'u'), - (0x1D5B5, 'M', u'v'), - (0x1D5B6, 'M', u'w'), - (0x1D5B7, 'M', u'x'), - (0x1D5B8, 'M', u'y'), - (0x1D5B9, 'M', u'z'), - (0x1D5BA, 'M', u'a'), - (0x1D5BB, 'M', u'b'), - (0x1D5BC, 'M', u'c'), - (0x1D5BD, 'M', u'd'), - (0x1D5BE, 'M', u'e'), - (0x1D5BF, 'M', u'f'), - (0x1D5C0, 'M', u'g'), - (0x1D5C1, 'M', u'h'), - (0x1D5C2, 'M', u'i'), - (0x1D5C3, 'M', u'j'), - (0x1D5C4, 'M', u'k'), - (0x1D5C5, 'M', u'l'), - (0x1D5C6, 'M', u'm'), - (0x1D5C7, 'M', u'n'), - (0x1D5C8, 'M', u'o'), - (0x1D5C9, 'M', u'p'), - (0x1D5CA, 'M', u'q'), - (0x1D5CB, 'M', u'r'), - (0x1D5CC, 'M', u's'), - (0x1D5CD, 'M', u't'), - (0x1D5CE, 'M', u'u'), - (0x1D5CF, 'M', u'v'), - (0x1D5D0, 'M', u'w'), - (0x1D5D1, 'M', u'x'), - (0x1D5D2, 'M', u'y'), - ] - -def _seg_58(): - return [ - (0x1D5D3, 'M', u'z'), - (0x1D5D4, 'M', u'a'), - (0x1D5D5, 'M', u'b'), - (0x1D5D6, 'M', u'c'), - (0x1D5D7, 'M', u'd'), - (0x1D5D8, 'M', u'e'), - (0x1D5D9, 'M', u'f'), - (0x1D5DA, 'M', u'g'), - (0x1D5DB, 'M', u'h'), - (0x1D5DC, 'M', u'i'), - (0x1D5DD, 'M', u'j'), - (0x1D5DE, 'M', u'k'), - (0x1D5DF, 'M', u'l'), - (0x1D5E0, 'M', u'm'), - (0x1D5E1, 'M', u'n'), - (0x1D5E2, 'M', u'o'), - (0x1D5E3, 'M', u'p'), - (0x1D5E4, 'M', u'q'), - (0x1D5E5, 'M', u'r'), - (0x1D5E6, 'M', u's'), - (0x1D5E7, 'M', u't'), - (0x1D5E8, 'M', u'u'), - (0x1D5E9, 'M', u'v'), - (0x1D5EA, 'M', u'w'), - (0x1D5EB, 'M', u'x'), - (0x1D5EC, 'M', u'y'), - (0x1D5ED, 'M', u'z'), - (0x1D5EE, 'M', u'a'), - (0x1D5EF, 'M', u'b'), - (0x1D5F0, 'M', u'c'), - (0x1D5F1, 'M', u'd'), - (0x1D5F2, 'M', u'e'), - (0x1D5F3, 'M', u'f'), - (0x1D5F4, 'M', u'g'), - (0x1D5F5, 'M', u'h'), - (0x1D5F6, 'M', u'i'), - (0x1D5F7, 'M', u'j'), - (0x1D5F8, 'M', u'k'), - (0x1D5F9, 'M', u'l'), - (0x1D5FA, 'M', u'm'), - (0x1D5FB, 'M', u'n'), - (0x1D5FC, 'M', u'o'), - (0x1D5FD, 'M', u'p'), - (0x1D5FE, 'M', u'q'), - (0x1D5FF, 'M', u'r'), - (0x1D600, 'M', u's'), - (0x1D601, 'M', u't'), - (0x1D602, 'M', u'u'), - (0x1D603, 'M', u'v'), - (0x1D604, 'M', u'w'), - (0x1D605, 'M', u'x'), - (0x1D606, 'M', u'y'), - (0x1D607, 'M', u'z'), - (0x1D608, 'M', u'a'), - (0x1D609, 'M', u'b'), - (0x1D60A, 'M', u'c'), - (0x1D60B, 'M', u'd'), - (0x1D60C, 'M', u'e'), - (0x1D60D, 'M', u'f'), - (0x1D60E, 'M', u'g'), - (0x1D60F, 'M', u'h'), - (0x1D610, 'M', u'i'), - (0x1D611, 'M', u'j'), - (0x1D612, 'M', u'k'), - (0x1D613, 'M', u'l'), - (0x1D614, 'M', u'm'), - (0x1D615, 'M', u'n'), - (0x1D616, 'M', u'o'), - (0x1D617, 'M', u'p'), - (0x1D618, 'M', u'q'), - (0x1D619, 'M', u'r'), - (0x1D61A, 'M', u's'), - (0x1D61B, 'M', u't'), - (0x1D61C, 'M', u'u'), - (0x1D61D, 'M', u'v'), - (0x1D61E, 'M', u'w'), - (0x1D61F, 'M', u'x'), - (0x1D620, 'M', u'y'), - (0x1D621, 'M', u'z'), - (0x1D622, 'M', u'a'), - (0x1D623, 'M', u'b'), - (0x1D624, 'M', u'c'), - (0x1D625, 'M', u'd'), - (0x1D626, 'M', u'e'), - (0x1D627, 'M', u'f'), - (0x1D628, 'M', u'g'), - (0x1D629, 'M', u'h'), - (0x1D62A, 'M', u'i'), - (0x1D62B, 'M', u'j'), - (0x1D62C, 'M', u'k'), - (0x1D62D, 'M', u'l'), - (0x1D62E, 'M', u'm'), - (0x1D62F, 'M', u'n'), - (0x1D630, 'M', u'o'), - (0x1D631, 'M', u'p'), - (0x1D632, 'M', u'q'), - (0x1D633, 'M', u'r'), - (0x1D634, 'M', u's'), - (0x1D635, 'M', u't'), - (0x1D636, 'M', u'u'), - ] - -def _seg_59(): - return [ - (0x1D637, 'M', u'v'), - (0x1D638, 'M', u'w'), - (0x1D639, 'M', u'x'), - (0x1D63A, 'M', u'y'), - (0x1D63B, 'M', u'z'), - (0x1D63C, 'M', u'a'), - (0x1D63D, 'M', u'b'), - (0x1D63E, 'M', u'c'), - (0x1D63F, 'M', u'd'), - (0x1D640, 'M', u'e'), - (0x1D641, 'M', u'f'), - (0x1D642, 'M', u'g'), - (0x1D643, 'M', u'h'), - (0x1D644, 'M', u'i'), - (0x1D645, 'M', u'j'), - (0x1D646, 'M', u'k'), - (0x1D647, 'M', u'l'), - (0x1D648, 'M', u'm'), - (0x1D649, 'M', u'n'), - (0x1D64A, 'M', u'o'), - (0x1D64B, 'M', u'p'), - (0x1D64C, 'M', u'q'), - (0x1D64D, 'M', u'r'), - (0x1D64E, 'M', u's'), - (0x1D64F, 'M', u't'), - (0x1D650, 'M', u'u'), - (0x1D651, 'M', u'v'), - (0x1D652, 'M', u'w'), - (0x1D653, 'M', u'x'), - (0x1D654, 'M', u'y'), - (0x1D655, 'M', u'z'), - (0x1D656, 'M', u'a'), - (0x1D657, 'M', u'b'), - (0x1D658, 'M', u'c'), - (0x1D659, 'M', u'd'), - (0x1D65A, 'M', u'e'), - (0x1D65B, 'M', u'f'), - (0x1D65C, 'M', u'g'), - (0x1D65D, 'M', u'h'), - (0x1D65E, 'M', u'i'), - (0x1D65F, 'M', u'j'), - (0x1D660, 'M', u'k'), - (0x1D661, 'M', u'l'), - (0x1D662, 'M', u'm'), - (0x1D663, 'M', u'n'), - (0x1D664, 'M', u'o'), - (0x1D665, 'M', u'p'), - (0x1D666, 'M', u'q'), - (0x1D667, 'M', u'r'), - (0x1D668, 'M', u's'), - (0x1D669, 'M', u't'), - (0x1D66A, 'M', u'u'), - (0x1D66B, 'M', u'v'), - (0x1D66C, 'M', u'w'), - (0x1D66D, 'M', u'x'), - (0x1D66E, 'M', u'y'), - (0x1D66F, 'M', u'z'), - (0x1D670, 'M', u'a'), - (0x1D671, 'M', u'b'), - (0x1D672, 'M', u'c'), - (0x1D673, 'M', u'd'), - (0x1D674, 'M', u'e'), - (0x1D675, 'M', u'f'), - (0x1D676, 'M', u'g'), - (0x1D677, 'M', u'h'), - (0x1D678, 'M', u'i'), - (0x1D679, 'M', u'j'), - (0x1D67A, 'M', u'k'), - (0x1D67B, 'M', u'l'), - (0x1D67C, 'M', u'm'), - (0x1D67D, 'M', u'n'), - (0x1D67E, 'M', u'o'), - (0x1D67F, 'M', u'p'), - (0x1D680, 'M', u'q'), - (0x1D681, 'M', u'r'), - (0x1D682, 'M', u's'), - (0x1D683, 'M', u't'), - (0x1D684, 'M', u'u'), - (0x1D685, 'M', u'v'), - (0x1D686, 'M', u'w'), - (0x1D687, 'M', u'x'), - (0x1D688, 'M', u'y'), - (0x1D689, 'M', u'z'), - (0x1D68A, 'M', u'a'), - (0x1D68B, 'M', u'b'), - (0x1D68C, 'M', u'c'), - (0x1D68D, 'M', u'd'), - (0x1D68E, 'M', u'e'), - (0x1D68F, 'M', u'f'), - (0x1D690, 'M', u'g'), - (0x1D691, 'M', u'h'), - (0x1D692, 'M', u'i'), - (0x1D693, 'M', u'j'), - (0x1D694, 'M', u'k'), - (0x1D695, 'M', u'l'), - (0x1D696, 'M', u'm'), - (0x1D697, 'M', u'n'), - (0x1D698, 'M', u'o'), - (0x1D699, 'M', u'p'), - (0x1D69A, 'M', u'q'), - ] - -def _seg_60(): - return [ - (0x1D69B, 'M', u'r'), - (0x1D69C, 'M', u's'), - (0x1D69D, 'M', u't'), - (0x1D69E, 'M', u'u'), - (0x1D69F, 'M', u'v'), - (0x1D6A0, 'M', u'w'), - (0x1D6A1, 'M', u'x'), - (0x1D6A2, 'M', u'y'), - (0x1D6A3, 'M', u'z'), - (0x1D6A4, 'M', u'ı'), - (0x1D6A5, 'M', u'ȷ'), - (0x1D6A6, 'X'), - (0x1D6A8, 'M', u'α'), - (0x1D6A9, 'M', u'β'), - (0x1D6AA, 'M', u'γ'), - (0x1D6AB, 'M', u'δ'), - (0x1D6AC, 'M', u'ε'), - (0x1D6AD, 'M', u'ζ'), - (0x1D6AE, 'M', u'η'), - (0x1D6AF, 'M', u'θ'), - (0x1D6B0, 'M', u'ι'), - (0x1D6B1, 'M', u'κ'), - (0x1D6B2, 'M', u'λ'), - (0x1D6B3, 'M', u'μ'), - (0x1D6B4, 'M', u'ν'), - (0x1D6B5, 'M', u'ξ'), - (0x1D6B6, 'M', u'ο'), - (0x1D6B7, 'M', u'π'), - (0x1D6B8, 'M', u'ρ'), - (0x1D6B9, 'M', u'θ'), - (0x1D6BA, 'M', u'σ'), - (0x1D6BB, 'M', u'τ'), - (0x1D6BC, 'M', u'υ'), - (0x1D6BD, 'M', u'φ'), - (0x1D6BE, 'M', u'χ'), - (0x1D6BF, 'M', u'ψ'), - (0x1D6C0, 'M', u'ω'), - (0x1D6C1, 'M', u'∇'), - (0x1D6C2, 'M', u'α'), - (0x1D6C3, 'M', u'β'), - (0x1D6C4, 'M', u'γ'), - (0x1D6C5, 'M', u'δ'), - (0x1D6C6, 'M', u'ε'), - (0x1D6C7, 'M', u'ζ'), - (0x1D6C8, 'M', u'η'), - (0x1D6C9, 'M', u'θ'), - (0x1D6CA, 'M', u'ι'), - (0x1D6CB, 'M', u'κ'), - (0x1D6CC, 'M', u'λ'), - (0x1D6CD, 'M', u'μ'), - (0x1D6CE, 'M', u'ν'), - (0x1D6CF, 'M', u'ξ'), - (0x1D6D0, 'M', u'ο'), - (0x1D6D1, 'M', u'π'), - (0x1D6D2, 'M', u'ρ'), - (0x1D6D3, 'M', u'σ'), - (0x1D6D5, 'M', u'τ'), - (0x1D6D6, 'M', u'υ'), - (0x1D6D7, 'M', u'φ'), - (0x1D6D8, 'M', u'χ'), - (0x1D6D9, 'M', u'ψ'), - (0x1D6DA, 'M', u'ω'), - (0x1D6DB, 'M', u'∂'), - (0x1D6DC, 'M', u'ε'), - (0x1D6DD, 'M', u'θ'), - (0x1D6DE, 'M', u'κ'), - (0x1D6DF, 'M', u'φ'), - (0x1D6E0, 'M', u'ρ'), - (0x1D6E1, 'M', u'π'), - (0x1D6E2, 'M', u'α'), - (0x1D6E3, 'M', u'β'), - (0x1D6E4, 'M', u'γ'), - (0x1D6E5, 'M', u'δ'), - (0x1D6E6, 'M', u'ε'), - (0x1D6E7, 'M', u'ζ'), - (0x1D6E8, 'M', u'η'), - (0x1D6E9, 'M', u'θ'), - (0x1D6EA, 'M', u'ι'), - (0x1D6EB, 'M', u'κ'), - (0x1D6EC, 'M', u'λ'), - (0x1D6ED, 'M', u'μ'), - (0x1D6EE, 'M', u'ν'), - (0x1D6EF, 'M', u'ξ'), - (0x1D6F0, 'M', u'ο'), - (0x1D6F1, 'M', u'π'), - (0x1D6F2, 'M', u'ρ'), - (0x1D6F3, 'M', u'θ'), - (0x1D6F4, 'M', u'σ'), - (0x1D6F5, 'M', u'τ'), - (0x1D6F6, 'M', u'υ'), - (0x1D6F7, 'M', u'φ'), - (0x1D6F8, 'M', u'χ'), - (0x1D6F9, 'M', u'ψ'), - (0x1D6FA, 'M', u'ω'), - (0x1D6FB, 'M', u'∇'), - (0x1D6FC, 'M', u'α'), - (0x1D6FD, 'M', u'β'), - (0x1D6FE, 'M', u'γ'), - (0x1D6FF, 'M', u'δ'), - (0x1D700, 'M', u'ε'), - ] - -def _seg_61(): - return [ - (0x1D701, 'M', u'ζ'), - (0x1D702, 'M', u'η'), - (0x1D703, 'M', u'θ'), - (0x1D704, 'M', u'ι'), - (0x1D705, 'M', u'κ'), - (0x1D706, 'M', u'λ'), - (0x1D707, 'M', u'μ'), - (0x1D708, 'M', u'ν'), - (0x1D709, 'M', u'ξ'), - (0x1D70A, 'M', u'ο'), - (0x1D70B, 'M', u'π'), - (0x1D70C, 'M', u'ρ'), - (0x1D70D, 'M', u'σ'), - (0x1D70F, 'M', u'τ'), - (0x1D710, 'M', u'υ'), - (0x1D711, 'M', u'φ'), - (0x1D712, 'M', u'χ'), - (0x1D713, 'M', u'ψ'), - (0x1D714, 'M', u'ω'), - (0x1D715, 'M', u'∂'), - (0x1D716, 'M', u'ε'), - (0x1D717, 'M', u'θ'), - (0x1D718, 'M', u'κ'), - (0x1D719, 'M', u'φ'), - (0x1D71A, 'M', u'ρ'), - (0x1D71B, 'M', u'π'), - (0x1D71C, 'M', u'α'), - (0x1D71D, 'M', u'β'), - (0x1D71E, 'M', u'γ'), - (0x1D71F, 'M', u'δ'), - (0x1D720, 'M', u'ε'), - (0x1D721, 'M', u'ζ'), - (0x1D722, 'M', u'η'), - (0x1D723, 'M', u'θ'), - (0x1D724, 'M', u'ι'), - (0x1D725, 'M', u'κ'), - (0x1D726, 'M', u'λ'), - (0x1D727, 'M', u'μ'), - (0x1D728, 'M', u'ν'), - (0x1D729, 'M', u'ξ'), - (0x1D72A, 'M', u'ο'), - (0x1D72B, 'M', u'π'), - (0x1D72C, 'M', u'ρ'), - (0x1D72D, 'M', u'θ'), - (0x1D72E, 'M', u'σ'), - (0x1D72F, 'M', u'τ'), - (0x1D730, 'M', u'υ'), - (0x1D731, 'M', u'φ'), - (0x1D732, 'M', u'χ'), - (0x1D733, 'M', u'ψ'), - (0x1D734, 'M', u'ω'), - (0x1D735, 'M', u'∇'), - (0x1D736, 'M', u'α'), - (0x1D737, 'M', u'β'), - (0x1D738, 'M', u'γ'), - (0x1D739, 'M', u'δ'), - (0x1D73A, 'M', u'ε'), - (0x1D73B, 'M', u'ζ'), - (0x1D73C, 'M', u'η'), - (0x1D73D, 'M', u'θ'), - (0x1D73E, 'M', u'ι'), - (0x1D73F, 'M', u'κ'), - (0x1D740, 'M', u'λ'), - (0x1D741, 'M', u'μ'), - (0x1D742, 'M', u'ν'), - (0x1D743, 'M', u'ξ'), - (0x1D744, 'M', u'ο'), - (0x1D745, 'M', u'π'), - (0x1D746, 'M', u'ρ'), - (0x1D747, 'M', u'σ'), - (0x1D749, 'M', u'τ'), - (0x1D74A, 'M', u'υ'), - (0x1D74B, 'M', u'φ'), - (0x1D74C, 'M', u'χ'), - (0x1D74D, 'M', u'ψ'), - (0x1D74E, 'M', u'ω'), - (0x1D74F, 'M', u'∂'), - (0x1D750, 'M', u'ε'), - (0x1D751, 'M', u'θ'), - (0x1D752, 'M', u'κ'), - (0x1D753, 'M', u'φ'), - (0x1D754, 'M', u'ρ'), - (0x1D755, 'M', u'π'), - (0x1D756, 'M', u'α'), - (0x1D757, 'M', u'β'), - (0x1D758, 'M', u'γ'), - (0x1D759, 'M', u'δ'), - (0x1D75A, 'M', u'ε'), - (0x1D75B, 'M', u'ζ'), - (0x1D75C, 'M', u'η'), - (0x1D75D, 'M', u'θ'), - (0x1D75E, 'M', u'ι'), - (0x1D75F, 'M', u'κ'), - (0x1D760, 'M', u'λ'), - (0x1D761, 'M', u'μ'), - (0x1D762, 'M', u'ν'), - (0x1D763, 'M', u'ξ'), - (0x1D764, 'M', u'ο'), - (0x1D765, 'M', u'π'), - (0x1D766, 'M', u'ρ'), - ] - -def _seg_62(): - return [ - (0x1D767, 'M', u'θ'), - (0x1D768, 'M', u'σ'), - (0x1D769, 'M', u'τ'), - (0x1D76A, 'M', u'υ'), - (0x1D76B, 'M', u'φ'), - (0x1D76C, 'M', u'χ'), - (0x1D76D, 'M', u'ψ'), - (0x1D76E, 'M', u'ω'), - (0x1D76F, 'M', u'∇'), - (0x1D770, 'M', u'α'), - (0x1D771, 'M', u'β'), - (0x1D772, 'M', u'γ'), - (0x1D773, 'M', u'δ'), - (0x1D774, 'M', u'ε'), - (0x1D775, 'M', u'ζ'), - (0x1D776, 'M', u'η'), - (0x1D777, 'M', u'θ'), - (0x1D778, 'M', u'ι'), - (0x1D779, 'M', u'κ'), - (0x1D77A, 'M', u'λ'), - (0x1D77B, 'M', u'μ'), - (0x1D77C, 'M', u'ν'), - (0x1D77D, 'M', u'ξ'), - (0x1D77E, 'M', u'ο'), - (0x1D77F, 'M', u'π'), - (0x1D780, 'M', u'ρ'), - (0x1D781, 'M', u'σ'), - (0x1D783, 'M', u'τ'), - (0x1D784, 'M', u'υ'), - (0x1D785, 'M', u'φ'), - (0x1D786, 'M', u'χ'), - (0x1D787, 'M', u'ψ'), - (0x1D788, 'M', u'ω'), - (0x1D789, 'M', u'∂'), - (0x1D78A, 'M', u'ε'), - (0x1D78B, 'M', u'θ'), - (0x1D78C, 'M', u'κ'), - (0x1D78D, 'M', u'φ'), - (0x1D78E, 'M', u'ρ'), - (0x1D78F, 'M', u'π'), - (0x1D790, 'M', u'α'), - (0x1D791, 'M', u'β'), - (0x1D792, 'M', u'γ'), - (0x1D793, 'M', u'δ'), - (0x1D794, 'M', u'ε'), - (0x1D795, 'M', u'ζ'), - (0x1D796, 'M', u'η'), - (0x1D797, 'M', u'θ'), - (0x1D798, 'M', u'ι'), - (0x1D799, 'M', u'κ'), - (0x1D79A, 'M', u'λ'), - (0x1D79B, 'M', u'μ'), - (0x1D79C, 'M', u'ν'), - (0x1D79D, 'M', u'ξ'), - (0x1D79E, 'M', u'ο'), - (0x1D79F, 'M', u'π'), - (0x1D7A0, 'M', u'ρ'), - (0x1D7A1, 'M', u'θ'), - (0x1D7A2, 'M', u'σ'), - (0x1D7A3, 'M', u'τ'), - (0x1D7A4, 'M', u'υ'), - (0x1D7A5, 'M', u'φ'), - (0x1D7A6, 'M', u'χ'), - (0x1D7A7, 'M', u'ψ'), - (0x1D7A8, 'M', u'ω'), - (0x1D7A9, 'M', u'∇'), - (0x1D7AA, 'M', u'α'), - (0x1D7AB, 'M', u'β'), - (0x1D7AC, 'M', u'γ'), - (0x1D7AD, 'M', u'δ'), - (0x1D7AE, 'M', u'ε'), - (0x1D7AF, 'M', u'ζ'), - (0x1D7B0, 'M', u'η'), - (0x1D7B1, 'M', u'θ'), - (0x1D7B2, 'M', u'ι'), - (0x1D7B3, 'M', u'κ'), - (0x1D7B4, 'M', u'λ'), - (0x1D7B5, 'M', u'μ'), - (0x1D7B6, 'M', u'ν'), - (0x1D7B7, 'M', u'ξ'), - (0x1D7B8, 'M', u'ο'), - (0x1D7B9, 'M', u'π'), - (0x1D7BA, 'M', u'ρ'), - (0x1D7BB, 'M', u'σ'), - (0x1D7BD, 'M', u'τ'), - (0x1D7BE, 'M', u'υ'), - (0x1D7BF, 'M', u'φ'), - (0x1D7C0, 'M', u'χ'), - (0x1D7C1, 'M', u'ψ'), - (0x1D7C2, 'M', u'ω'), - (0x1D7C3, 'M', u'∂'), - (0x1D7C4, 'M', u'ε'), - (0x1D7C5, 'M', u'θ'), - (0x1D7C6, 'M', u'κ'), - (0x1D7C7, 'M', u'φ'), - (0x1D7C8, 'M', u'ρ'), - (0x1D7C9, 'M', u'π'), - (0x1D7CA, 'M', u'ϝ'), - (0x1D7CC, 'X'), - (0x1D7CE, 'M', u'0'), - ] - -def _seg_63(): - return [ - (0x1D7CF, 'M', u'1'), - (0x1D7D0, 'M', u'2'), - (0x1D7D1, 'M', u'3'), - (0x1D7D2, 'M', u'4'), - (0x1D7D3, 'M', u'5'), - (0x1D7D4, 'M', u'6'), - (0x1D7D5, 'M', u'7'), - (0x1D7D6, 'M', u'8'), - (0x1D7D7, 'M', u'9'), - (0x1D7D8, 'M', u'0'), - (0x1D7D9, 'M', u'1'), - (0x1D7DA, 'M', u'2'), - (0x1D7DB, 'M', u'3'), - (0x1D7DC, 'M', u'4'), - (0x1D7DD, 'M', u'5'), - (0x1D7DE, 'M', u'6'), - (0x1D7DF, 'M', u'7'), - (0x1D7E0, 'M', u'8'), - (0x1D7E1, 'M', u'9'), - (0x1D7E2, 'M', u'0'), - (0x1D7E3, 'M', u'1'), - (0x1D7E4, 'M', u'2'), - (0x1D7E5, 'M', u'3'), - (0x1D7E6, 'M', u'4'), - (0x1D7E7, 'M', u'5'), - (0x1D7E8, 'M', u'6'), - (0x1D7E9, 'M', u'7'), - (0x1D7EA, 'M', u'8'), - (0x1D7EB, 'M', u'9'), - (0x1D7EC, 'M', u'0'), - (0x1D7ED, 'M', u'1'), - (0x1D7EE, 'M', u'2'), - (0x1D7EF, 'M', u'3'), - (0x1D7F0, 'M', u'4'), - (0x1D7F1, 'M', u'5'), - (0x1D7F2, 'M', u'6'), - (0x1D7F3, 'M', u'7'), - (0x1D7F4, 'M', u'8'), - (0x1D7F5, 'M', u'9'), - (0x1D7F6, 'M', u'0'), - (0x1D7F7, 'M', u'1'), - (0x1D7F8, 'M', u'2'), - (0x1D7F9, 'M', u'3'), - (0x1D7FA, 'M', u'4'), - (0x1D7FB, 'M', u'5'), - (0x1D7FC, 'M', u'6'), - (0x1D7FD, 'M', u'7'), - (0x1D7FE, 'M', u'8'), - (0x1D7FF, 'M', u'9'), - (0x1D800, 'X'), - (0x1EE00, 'M', u'ا'), - (0x1EE01, 'M', u'ب'), - (0x1EE02, 'M', u'ج'), - (0x1EE03, 'M', u'د'), - (0x1EE04, 'X'), - (0x1EE05, 'M', u'و'), - (0x1EE06, 'M', u'ز'), - (0x1EE07, 'M', u'ح'), - (0x1EE08, 'M', u'ط'), - (0x1EE09, 'M', u'ي'), - (0x1EE0A, 'M', u'ك'), - (0x1EE0B, 'M', u'ل'), - (0x1EE0C, 'M', u'م'), - (0x1EE0D, 'M', u'ن'), - (0x1EE0E, 'M', u'س'), - (0x1EE0F, 'M', u'ع'), - (0x1EE10, 'M', u'ف'), - (0x1EE11, 'M', u'ص'), - (0x1EE12, 'M', u'ق'), - (0x1EE13, 'M', u'ر'), - (0x1EE14, 'M', u'ش'), - (0x1EE15, 'M', u'ت'), - (0x1EE16, 'M', u'ث'), - (0x1EE17, 'M', u'خ'), - (0x1EE18, 'M', u'ذ'), - (0x1EE19, 'M', u'ض'), - (0x1EE1A, 'M', u'ظ'), - (0x1EE1B, 'M', u'غ'), - (0x1EE1C, 'M', u'ٮ'), - (0x1EE1D, 'M', u'ں'), - (0x1EE1E, 'M', u'ڡ'), - (0x1EE1F, 'M', u'ٯ'), - (0x1EE20, 'X'), - (0x1EE21, 'M', u'ب'), - (0x1EE22, 'M', u'ج'), - (0x1EE23, 'X'), - (0x1EE24, 'M', u'ه'), - (0x1EE25, 'X'), - (0x1EE27, 'M', u'ح'), - (0x1EE28, 'X'), - (0x1EE29, 'M', u'ي'), - (0x1EE2A, 'M', u'ك'), - (0x1EE2B, 'M', u'ل'), - (0x1EE2C, 'M', u'م'), - (0x1EE2D, 'M', u'ن'), - (0x1EE2E, 'M', u'س'), - (0x1EE2F, 'M', u'ع'), - (0x1EE30, 'M', u'ف'), - (0x1EE31, 'M', u'ص'), - (0x1EE32, 'M', u'ق'), - ] - -def _seg_64(): - return [ - (0x1EE33, 'X'), - (0x1EE34, 'M', u'ش'), - (0x1EE35, 'M', u'ت'), - (0x1EE36, 'M', u'ث'), - (0x1EE37, 'M', u'خ'), - (0x1EE38, 'X'), - (0x1EE39, 'M', u'ض'), - (0x1EE3A, 'X'), - (0x1EE3B, 'M', u'غ'), - (0x1EE3C, 'X'), - (0x1EE42, 'M', u'ج'), - (0x1EE43, 'X'), - (0x1EE47, 'M', u'ح'), - (0x1EE48, 'X'), - (0x1EE49, 'M', u'ي'), - (0x1EE4A, 'X'), - (0x1EE4B, 'M', u'ل'), - (0x1EE4C, 'X'), - (0x1EE4D, 'M', u'ن'), - (0x1EE4E, 'M', u'س'), - (0x1EE4F, 'M', u'ع'), - (0x1EE50, 'X'), - (0x1EE51, 'M', u'ص'), - (0x1EE52, 'M', u'ق'), - (0x1EE53, 'X'), - (0x1EE54, 'M', u'ش'), - (0x1EE55, 'X'), - (0x1EE57, 'M', u'خ'), - (0x1EE58, 'X'), - (0x1EE59, 'M', u'ض'), - (0x1EE5A, 'X'), - (0x1EE5B, 'M', u'غ'), - (0x1EE5C, 'X'), - (0x1EE5D, 'M', u'ں'), - (0x1EE5E, 'X'), - (0x1EE5F, 'M', u'ٯ'), - (0x1EE60, 'X'), - (0x1EE61, 'M', u'ب'), - (0x1EE62, 'M', u'ج'), - (0x1EE63, 'X'), - (0x1EE64, 'M', u'ه'), - (0x1EE65, 'X'), - (0x1EE67, 'M', u'ح'), - (0x1EE68, 'M', u'ط'), - (0x1EE69, 'M', u'ي'), - (0x1EE6A, 'M', u'ك'), - (0x1EE6B, 'X'), - (0x1EE6C, 'M', u'م'), - (0x1EE6D, 'M', u'ن'), - (0x1EE6E, 'M', u'س'), - (0x1EE6F, 'M', u'ع'), - (0x1EE70, 'M', u'ف'), - (0x1EE71, 'M', u'ص'), - (0x1EE72, 'M', u'ق'), - (0x1EE73, 'X'), - (0x1EE74, 'M', u'ش'), - (0x1EE75, 'M', u'ت'), - (0x1EE76, 'M', u'ث'), - (0x1EE77, 'M', u'خ'), - (0x1EE78, 'X'), - (0x1EE79, 'M', u'ض'), - (0x1EE7A, 'M', u'ظ'), - (0x1EE7B, 'M', u'غ'), - (0x1EE7C, 'M', u'ٮ'), - (0x1EE7D, 'X'), - (0x1EE7E, 'M', u'ڡ'), - (0x1EE7F, 'X'), - (0x1EE80, 'M', u'ا'), - (0x1EE81, 'M', u'ب'), - (0x1EE82, 'M', u'ج'), - (0x1EE83, 'M', u'د'), - (0x1EE84, 'M', u'ه'), - (0x1EE85, 'M', u'و'), - (0x1EE86, 'M', u'ز'), - (0x1EE87, 'M', u'ح'), - (0x1EE88, 'M', u'ط'), - (0x1EE89, 'M', u'ي'), - (0x1EE8A, 'X'), - (0x1EE8B, 'M', u'ل'), - (0x1EE8C, 'M', u'م'), - (0x1EE8D, 'M', u'ن'), - (0x1EE8E, 'M', u'س'), - (0x1EE8F, 'M', u'ع'), - (0x1EE90, 'M', u'ف'), - (0x1EE91, 'M', u'ص'), - (0x1EE92, 'M', u'ق'), - (0x1EE93, 'M', u'ر'), - (0x1EE94, 'M', u'ش'), - (0x1EE95, 'M', u'ت'), - (0x1EE96, 'M', u'ث'), - (0x1EE97, 'M', u'خ'), - (0x1EE98, 'M', u'ذ'), - (0x1EE99, 'M', u'ض'), - (0x1EE9A, 'M', u'ظ'), - (0x1EE9B, 'M', u'غ'), - (0x1EE9C, 'X'), - (0x1EEA1, 'M', u'ب'), - (0x1EEA2, 'M', u'ج'), - (0x1EEA3, 'M', u'د'), - (0x1EEA4, 'X'), - ] - -def _seg_65(): - return [ - (0x1EEA5, 'M', u'و'), - (0x1EEA6, 'M', u'ز'), - (0x1EEA7, 'M', u'ح'), - (0x1EEA8, 'M', u'ط'), - (0x1EEA9, 'M', u'ي'), - (0x1EEAA, 'X'), - (0x1EEAB, 'M', u'ل'), - (0x1EEAC, 'M', u'م'), - (0x1EEAD, 'M', u'ن'), - (0x1EEAE, 'M', u'س'), - (0x1EEAF, 'M', u'ع'), - (0x1EEB0, 'M', u'ف'), - (0x1EEB1, 'M', u'ص'), - (0x1EEB2, 'M', u'ق'), - (0x1EEB3, 'M', u'ر'), - (0x1EEB4, 'M', u'ش'), - (0x1EEB5, 'M', u'ت'), - (0x1EEB6, 'M', u'ث'), - (0x1EEB7, 'M', u'خ'), - (0x1EEB8, 'M', u'ذ'), - (0x1EEB9, 'M', u'ض'), - (0x1EEBA, 'M', u'ظ'), - (0x1EEBB, 'M', u'غ'), - (0x1EEBC, 'X'), - (0x1EEF0, 'V'), - (0x1EEF2, 'X'), - (0x1F000, 'V'), - (0x1F02C, 'X'), - (0x1F030, 'V'), - (0x1F094, 'X'), - (0x1F0A0, 'V'), - (0x1F0AF, 'X'), - (0x1F0B1, 'V'), - (0x1F0BF, 'X'), - (0x1F0C1, 'V'), - (0x1F0D0, 'X'), - (0x1F0D1, 'V'), - (0x1F0E0, 'X'), - (0x1F101, '3', u'0,'), - (0x1F102, '3', u'1,'), - (0x1F103, '3', u'2,'), - (0x1F104, '3', u'3,'), - (0x1F105, '3', u'4,'), - (0x1F106, '3', u'5,'), - (0x1F107, '3', u'6,'), - (0x1F108, '3', u'7,'), - (0x1F109, '3', u'8,'), - (0x1F10A, '3', u'9,'), - (0x1F10B, 'X'), - (0x1F110, '3', u'(a)'), - (0x1F111, '3', u'(b)'), - (0x1F112, '3', u'(c)'), - (0x1F113, '3', u'(d)'), - (0x1F114, '3', u'(e)'), - (0x1F115, '3', u'(f)'), - (0x1F116, '3', u'(g)'), - (0x1F117, '3', u'(h)'), - (0x1F118, '3', u'(i)'), - (0x1F119, '3', u'(j)'), - (0x1F11A, '3', u'(k)'), - (0x1F11B, '3', u'(l)'), - (0x1F11C, '3', u'(m)'), - (0x1F11D, '3', u'(n)'), - (0x1F11E, '3', u'(o)'), - (0x1F11F, '3', u'(p)'), - (0x1F120, '3', u'(q)'), - (0x1F121, '3', u'(r)'), - (0x1F122, '3', u'(s)'), - (0x1F123, '3', u'(t)'), - (0x1F124, '3', u'(u)'), - (0x1F125, '3', u'(v)'), - (0x1F126, '3', u'(w)'), - (0x1F127, '3', u'(x)'), - (0x1F128, '3', u'(y)'), - (0x1F129, '3', u'(z)'), - (0x1F12A, 'M', u'〔s〕'), - (0x1F12B, 'M', u'c'), - (0x1F12C, 'M', u'r'), - (0x1F12D, 'M', u'cd'), - (0x1F12E, 'M', u'wz'), - (0x1F12F, 'X'), - (0x1F130, 'M', u'a'), - (0x1F131, 'M', u'b'), - (0x1F132, 'M', u'c'), - (0x1F133, 'M', u'd'), - (0x1F134, 'M', u'e'), - (0x1F135, 'M', u'f'), - (0x1F136, 'M', u'g'), - (0x1F137, 'M', u'h'), - (0x1F138, 'M', u'i'), - (0x1F139, 'M', u'j'), - (0x1F13A, 'M', u'k'), - (0x1F13B, 'M', u'l'), - (0x1F13C, 'M', u'm'), - (0x1F13D, 'M', u'n'), - (0x1F13E, 'M', u'o'), - (0x1F13F, 'M', u'p'), - (0x1F140, 'M', u'q'), - (0x1F141, 'M', u'r'), - (0x1F142, 'M', u's'), - ] - -def _seg_66(): - return [ - (0x1F143, 'M', u't'), - (0x1F144, 'M', u'u'), - (0x1F145, 'M', u'v'), - (0x1F146, 'M', u'w'), - (0x1F147, 'M', u'x'), - (0x1F148, 'M', u'y'), - (0x1F149, 'M', u'z'), - (0x1F14A, 'M', u'hv'), - (0x1F14B, 'M', u'mv'), - (0x1F14C, 'M', u'sd'), - (0x1F14D, 'M', u'ss'), - (0x1F14E, 'M', u'ppv'), - (0x1F14F, 'M', u'wc'), - (0x1F150, 'V'), - (0x1F16A, 'M', u'mc'), - (0x1F16B, 'M', u'md'), - (0x1F16C, 'X'), - (0x1F170, 'V'), - (0x1F190, 'M', u'dj'), - (0x1F191, 'V'), - (0x1F19B, 'X'), - (0x1F1E6, 'V'), - (0x1F200, 'M', u'ほか'), - (0x1F201, 'M', u'ココ'), - (0x1F202, 'M', u'サ'), - (0x1F203, 'X'), - (0x1F210, 'M', u'手'), - (0x1F211, 'M', u'字'), - (0x1F212, 'M', u'双'), - (0x1F213, 'M', u'デ'), - (0x1F214, 'M', u'二'), - (0x1F215, 'M', u'多'), - (0x1F216, 'M', u'解'), - (0x1F217, 'M', u'天'), - (0x1F218, 'M', u'交'), - (0x1F219, 'M', u'映'), - (0x1F21A, 'M', u'無'), - (0x1F21B, 'M', u'料'), - (0x1F21C, 'M', u'前'), - (0x1F21D, 'M', u'後'), - (0x1F21E, 'M', u'再'), - (0x1F21F, 'M', u'新'), - (0x1F220, 'M', u'初'), - (0x1F221, 'M', u'終'), - (0x1F222, 'M', u'生'), - (0x1F223, 'M', u'販'), - (0x1F224, 'M', u'声'), - (0x1F225, 'M', u'吹'), - (0x1F226, 'M', u'演'), - (0x1F227, 'M', u'投'), - (0x1F228, 'M', u'捕'), - (0x1F229, 'M', u'一'), - (0x1F22A, 'M', u'三'), - (0x1F22B, 'M', u'遊'), - (0x1F22C, 'M', u'左'), - (0x1F22D, 'M', u'中'), - (0x1F22E, 'M', u'右'), - (0x1F22F, 'M', u'指'), - (0x1F230, 'M', u'走'), - (0x1F231, 'M', u'打'), - (0x1F232, 'M', u'禁'), - (0x1F233, 'M', u'空'), - (0x1F234, 'M', u'合'), - (0x1F235, 'M', u'満'), - (0x1F236, 'M', u'有'), - (0x1F237, 'M', u'月'), - (0x1F238, 'M', u'申'), - (0x1F239, 'M', u'割'), - (0x1F23A, 'M', u'営'), - (0x1F23B, 'X'), - (0x1F240, 'M', u'〔本〕'), - (0x1F241, 'M', u'〔三〕'), - (0x1F242, 'M', u'〔二〕'), - (0x1F243, 'M', u'〔安〕'), - (0x1F244, 'M', u'〔点〕'), - (0x1F245, 'M', u'〔打〕'), - (0x1F246, 'M', u'〔盗〕'), - (0x1F247, 'M', u'〔勝〕'), - (0x1F248, 'M', u'〔敗〕'), - (0x1F249, 'X'), - (0x1F250, 'M', u'得'), - (0x1F251, 'M', u'可'), - (0x1F252, 'X'), - (0x1F300, 'V'), - (0x1F321, 'X'), - (0x1F330, 'V'), - (0x1F336, 'X'), - (0x1F337, 'V'), - (0x1F37D, 'X'), - (0x1F380, 'V'), - (0x1F394, 'X'), - (0x1F3A0, 'V'), - (0x1F3C5, 'X'), - (0x1F3C6, 'V'), - (0x1F3CB, 'X'), - (0x1F3E0, 'V'), - (0x1F3F1, 'X'), - (0x1F400, 'V'), - (0x1F43F, 'X'), - (0x1F440, 'V'), - ] - -def _seg_67(): - return [ - (0x1F441, 'X'), - (0x1F442, 'V'), - (0x1F4F8, 'X'), - (0x1F4F9, 'V'), - (0x1F4FD, 'X'), - (0x1F500, 'V'), - (0x1F53E, 'X'), - (0x1F540, 'V'), - (0x1F544, 'X'), - (0x1F550, 'V'), - (0x1F568, 'X'), - (0x1F5FB, 'V'), - (0x1F641, 'X'), - (0x1F645, 'V'), - (0x1F650, 'X'), - (0x1F680, 'V'), - (0x1F6C6, 'X'), - (0x1F700, 'V'), - (0x1F774, 'X'), - (0x20000, 'V'), - (0x2A6D7, 'X'), - (0x2A700, 'V'), - (0x2B735, 'X'), - (0x2B740, 'V'), - (0x2B81E, 'X'), - (0x2F800, 'M', u'丽'), - (0x2F801, 'M', u'丸'), - (0x2F802, 'M', u'乁'), - (0x2F803, 'M', u'𠄢'), - (0x2F804, 'M', u'你'), - (0x2F805, 'M', u'侮'), - (0x2F806, 'M', u'侻'), - (0x2F807, 'M', u'倂'), - (0x2F808, 'M', u'偺'), - (0x2F809, 'M', u'備'), - (0x2F80A, 'M', u'僧'), - (0x2F80B, 'M', u'像'), - (0x2F80C, 'M', u'㒞'), - (0x2F80D, 'M', u'𠘺'), - (0x2F80E, 'M', u'免'), - (0x2F80F, 'M', u'兔'), - (0x2F810, 'M', u'兤'), - (0x2F811, 'M', u'具'), - (0x2F812, 'M', u'𠔜'), - (0x2F813, 'M', u'㒹'), - (0x2F814, 'M', u'內'), - (0x2F815, 'M', u'再'), - (0x2F816, 'M', u'𠕋'), - (0x2F817, 'M', u'冗'), - (0x2F818, 'M', u'冤'), - (0x2F819, 'M', u'仌'), - (0x2F81A, 'M', u'冬'), - (0x2F81B, 'M', u'况'), - (0x2F81C, 'M', u'𩇟'), - (0x2F81D, 'M', u'凵'), - (0x2F81E, 'M', u'刃'), - (0x2F81F, 'M', u'㓟'), - (0x2F820, 'M', u'刻'), - (0x2F821, 'M', u'剆'), - (0x2F822, 'M', u'割'), - (0x2F823, 'M', u'剷'), - (0x2F824, 'M', u'㔕'), - (0x2F825, 'M', u'勇'), - (0x2F826, 'M', u'勉'), - (0x2F827, 'M', u'勤'), - (0x2F828, 'M', u'勺'), - (0x2F829, 'M', u'包'), - (0x2F82A, 'M', u'匆'), - (0x2F82B, 'M', u'北'), - (0x2F82C, 'M', u'卉'), - (0x2F82D, 'M', u'卑'), - (0x2F82E, 'M', u'博'), - (0x2F82F, 'M', u'即'), - (0x2F830, 'M', u'卽'), - (0x2F831, 'M', u'卿'), - (0x2F834, 'M', u'𠨬'), - (0x2F835, 'M', u'灰'), - (0x2F836, 'M', u'及'), - (0x2F837, 'M', u'叟'), - (0x2F838, 'M', u'𠭣'), - (0x2F839, 'M', u'叫'), - (0x2F83A, 'M', u'叱'), - (0x2F83B, 'M', u'吆'), - (0x2F83C, 'M', u'咞'), - (0x2F83D, 'M', u'吸'), - (0x2F83E, 'M', u'呈'), - (0x2F83F, 'M', u'周'), - (0x2F840, 'M', u'咢'), - (0x2F841, 'M', u'哶'), - (0x2F842, 'M', u'唐'), - (0x2F843, 'M', u'啓'), - (0x2F844, 'M', u'啣'), - (0x2F845, 'M', u'善'), - (0x2F847, 'M', u'喙'), - (0x2F848, 'M', u'喫'), - (0x2F849, 'M', u'喳'), - (0x2F84A, 'M', u'嗂'), - (0x2F84B, 'M', u'圖'), - (0x2F84C, 'M', u'嘆'), - (0x2F84D, 'M', u'圗'), - ] - -def _seg_68(): - return [ - (0x2F84E, 'M', u'噑'), - (0x2F84F, 'M', u'噴'), - (0x2F850, 'M', u'切'), - (0x2F851, 'M', u'壮'), - (0x2F852, 'M', u'城'), - (0x2F853, 'M', u'埴'), - (0x2F854, 'M', u'堍'), - (0x2F855, 'M', u'型'), - (0x2F856, 'M', u'堲'), - (0x2F857, 'M', u'報'), - (0x2F858, 'M', u'墬'), - (0x2F859, 'M', u'𡓤'), - (0x2F85A, 'M', u'売'), - (0x2F85B, 'M', u'壷'), - (0x2F85C, 'M', u'夆'), - (0x2F85D, 'M', u'多'), - (0x2F85E, 'M', u'夢'), - (0x2F85F, 'M', u'奢'), - (0x2F860, 'M', u'𡚨'), - (0x2F861, 'M', u'𡛪'), - (0x2F862, 'M', u'姬'), - (0x2F863, 'M', u'娛'), - (0x2F864, 'M', u'娧'), - (0x2F865, 'M', u'姘'), - (0x2F866, 'M', u'婦'), - (0x2F867, 'M', u'㛮'), - (0x2F868, 'X'), - (0x2F869, 'M', u'嬈'), - (0x2F86A, 'M', u'嬾'), - (0x2F86C, 'M', u'𡧈'), - (0x2F86D, 'M', u'寃'), - (0x2F86E, 'M', u'寘'), - (0x2F86F, 'M', u'寧'), - (0x2F870, 'M', u'寳'), - (0x2F871, 'M', u'𡬘'), - (0x2F872, 'M', u'寿'), - (0x2F873, 'M', u'将'), - (0x2F874, 'X'), - (0x2F875, 'M', u'尢'), - (0x2F876, 'M', u'㞁'), - (0x2F877, 'M', u'屠'), - (0x2F878, 'M', u'屮'), - (0x2F879, 'M', u'峀'), - (0x2F87A, 'M', u'岍'), - (0x2F87B, 'M', u'𡷤'), - (0x2F87C, 'M', u'嵃'), - (0x2F87D, 'M', u'𡷦'), - (0x2F87E, 'M', u'嵮'), - (0x2F87F, 'M', u'嵫'), - (0x2F880, 'M', u'嵼'), - (0x2F881, 'M', u'巡'), - (0x2F882, 'M', u'巢'), - (0x2F883, 'M', u'㠯'), - (0x2F884, 'M', u'巽'), - (0x2F885, 'M', u'帨'), - (0x2F886, 'M', u'帽'), - (0x2F887, 'M', u'幩'), - (0x2F888, 'M', u'㡢'), - (0x2F889, 'M', u'𢆃'), - (0x2F88A, 'M', u'㡼'), - (0x2F88B, 'M', u'庰'), - (0x2F88C, 'M', u'庳'), - (0x2F88D, 'M', u'庶'), - (0x2F88E, 'M', u'廊'), - (0x2F88F, 'M', u'𪎒'), - (0x2F890, 'M', u'廾'), - (0x2F891, 'M', u'𢌱'), - (0x2F893, 'M', u'舁'), - (0x2F894, 'M', u'弢'), - (0x2F896, 'M', u'㣇'), - (0x2F897, 'M', u'𣊸'), - (0x2F898, 'M', u'𦇚'), - (0x2F899, 'M', u'形'), - (0x2F89A, 'M', u'彫'), - (0x2F89B, 'M', u'㣣'), - (0x2F89C, 'M', u'徚'), - (0x2F89D, 'M', u'忍'), - (0x2F89E, 'M', u'志'), - (0x2F89F, 'M', u'忹'), - (0x2F8A0, 'M', u'悁'), - (0x2F8A1, 'M', u'㤺'), - (0x2F8A2, 'M', u'㤜'), - (0x2F8A3, 'M', u'悔'), - (0x2F8A4, 'M', u'𢛔'), - (0x2F8A5, 'M', u'惇'), - (0x2F8A6, 'M', u'慈'), - (0x2F8A7, 'M', u'慌'), - (0x2F8A8, 'M', u'慎'), - (0x2F8A9, 'M', u'慌'), - (0x2F8AA, 'M', u'慺'), - (0x2F8AB, 'M', u'憎'), - (0x2F8AC, 'M', u'憲'), - (0x2F8AD, 'M', u'憤'), - (0x2F8AE, 'M', u'憯'), - (0x2F8AF, 'M', u'懞'), - (0x2F8B0, 'M', u'懲'), - (0x2F8B1, 'M', u'懶'), - (0x2F8B2, 'M', u'成'), - (0x2F8B3, 'M', u'戛'), - (0x2F8B4, 'M', u'扝'), - ] - -def _seg_69(): - return [ - (0x2F8B5, 'M', u'抱'), - (0x2F8B6, 'M', u'拔'), - (0x2F8B7, 'M', u'捐'), - (0x2F8B8, 'M', u'𢬌'), - (0x2F8B9, 'M', u'挽'), - (0x2F8BA, 'M', u'拼'), - (0x2F8BB, 'M', u'捨'), - (0x2F8BC, 'M', u'掃'), - (0x2F8BD, 'M', u'揤'), - (0x2F8BE, 'M', u'𢯱'), - (0x2F8BF, 'M', u'搢'), - (0x2F8C0, 'M', u'揅'), - (0x2F8C1, 'M', u'掩'), - (0x2F8C2, 'M', u'㨮'), - (0x2F8C3, 'M', u'摩'), - (0x2F8C4, 'M', u'摾'), - (0x2F8C5, 'M', u'撝'), - (0x2F8C6, 'M', u'摷'), - (0x2F8C7, 'M', u'㩬'), - (0x2F8C8, 'M', u'敏'), - (0x2F8C9, 'M', u'敬'), - (0x2F8CA, 'M', u'𣀊'), - (0x2F8CB, 'M', u'旣'), - (0x2F8CC, 'M', u'書'), - (0x2F8CD, 'M', u'晉'), - (0x2F8CE, 'M', u'㬙'), - (0x2F8CF, 'M', u'暑'), - (0x2F8D0, 'M', u'㬈'), - (0x2F8D1, 'M', u'㫤'), - (0x2F8D2, 'M', u'冒'), - (0x2F8D3, 'M', u'冕'), - (0x2F8D4, 'M', u'最'), - (0x2F8D5, 'M', u'暜'), - (0x2F8D6, 'M', u'肭'), - (0x2F8D7, 'M', u'䏙'), - (0x2F8D8, 'M', u'朗'), - (0x2F8D9, 'M', u'望'), - (0x2F8DA, 'M', u'朡'), - (0x2F8DB, 'M', u'杞'), - (0x2F8DC, 'M', u'杓'), - (0x2F8DD, 'M', u'𣏃'), - (0x2F8DE, 'M', u'㭉'), - (0x2F8DF, 'M', u'柺'), - (0x2F8E0, 'M', u'枅'), - (0x2F8E1, 'M', u'桒'), - (0x2F8E2, 'M', u'梅'), - (0x2F8E3, 'M', u'𣑭'), - (0x2F8E4, 'M', u'梎'), - (0x2F8E5, 'M', u'栟'), - (0x2F8E6, 'M', u'椔'), - (0x2F8E7, 'M', u'㮝'), - (0x2F8E8, 'M', u'楂'), - (0x2F8E9, 'M', u'榣'), - (0x2F8EA, 'M', u'槪'), - (0x2F8EB, 'M', u'檨'), - (0x2F8EC, 'M', u'𣚣'), - (0x2F8ED, 'M', u'櫛'), - (0x2F8EE, 'M', u'㰘'), - (0x2F8EF, 'M', u'次'), - (0x2F8F0, 'M', u'𣢧'), - (0x2F8F1, 'M', u'歔'), - (0x2F8F2, 'M', u'㱎'), - (0x2F8F3, 'M', u'歲'), - (0x2F8F4, 'M', u'殟'), - (0x2F8F5, 'M', u'殺'), - (0x2F8F6, 'M', u'殻'), - (0x2F8F7, 'M', u'𣪍'), - (0x2F8F8, 'M', u'𡴋'), - (0x2F8F9, 'M', u'𣫺'), - (0x2F8FA, 'M', u'汎'), - (0x2F8FB, 'M', u'𣲼'), - (0x2F8FC, 'M', u'沿'), - (0x2F8FD, 'M', u'泍'), - (0x2F8FE, 'M', u'汧'), - (0x2F8FF, 'M', u'洖'), - (0x2F900, 'M', u'派'), - (0x2F901, 'M', u'海'), - (0x2F902, 'M', u'流'), - (0x2F903, 'M', u'浩'), - (0x2F904, 'M', u'浸'), - (0x2F905, 'M', u'涅'), - (0x2F906, 'M', u'𣴞'), - (0x2F907, 'M', u'洴'), - (0x2F908, 'M', u'港'), - (0x2F909, 'M', u'湮'), - (0x2F90A, 'M', u'㴳'), - (0x2F90B, 'M', u'滋'), - (0x2F90C, 'M', u'滇'), - (0x2F90D, 'M', u'𣻑'), - (0x2F90E, 'M', u'淹'), - (0x2F90F, 'M', u'潮'), - (0x2F910, 'M', u'𣽞'), - (0x2F911, 'M', u'𣾎'), - (0x2F912, 'M', u'濆'), - (0x2F913, 'M', u'瀹'), - (0x2F914, 'M', u'瀞'), - (0x2F915, 'M', u'瀛'), - (0x2F916, 'M', u'㶖'), - (0x2F917, 'M', u'灊'), - (0x2F918, 'M', u'災'), - ] - -def _seg_70(): - return [ - (0x2F919, 'M', u'灷'), - (0x2F91A, 'M', u'炭'), - (0x2F91B, 'M', u'𠔥'), - (0x2F91C, 'M', u'煅'), - (0x2F91D, 'M', u'𤉣'), - (0x2F91E, 'M', u'熜'), - (0x2F91F, 'X'), - (0x2F920, 'M', u'爨'), - (0x2F921, 'M', u'爵'), - (0x2F922, 'M', u'牐'), - (0x2F923, 'M', u'𤘈'), - (0x2F924, 'M', u'犀'), - (0x2F925, 'M', u'犕'), - (0x2F926, 'M', u'𤜵'), - (0x2F927, 'M', u'𤠔'), - (0x2F928, 'M', u'獺'), - (0x2F929, 'M', u'王'), - (0x2F92A, 'M', u'㺬'), - (0x2F92B, 'M', u'玥'), - (0x2F92C, 'M', u'㺸'), - (0x2F92E, 'M', u'瑇'), - (0x2F92F, 'M', u'瑜'), - (0x2F930, 'M', u'瑱'), - (0x2F931, 'M', u'璅'), - (0x2F932, 'M', u'瓊'), - (0x2F933, 'M', u'㼛'), - (0x2F934, 'M', u'甤'), - (0x2F935, 'M', u'𤰶'), - (0x2F936, 'M', u'甾'), - (0x2F937, 'M', u'𤲒'), - (0x2F938, 'M', u'異'), - (0x2F939, 'M', u'𢆟'), - (0x2F93A, 'M', u'瘐'), - (0x2F93B, 'M', u'𤾡'), - (0x2F93C, 'M', u'𤾸'), - (0x2F93D, 'M', u'𥁄'), - (0x2F93E, 'M', u'㿼'), - (0x2F93F, 'M', u'䀈'), - (0x2F940, 'M', u'直'), - (0x2F941, 'M', u'𥃳'), - (0x2F942, 'M', u'𥃲'), - (0x2F943, 'M', u'𥄙'), - (0x2F944, 'M', u'𥄳'), - (0x2F945, 'M', u'眞'), - (0x2F946, 'M', u'真'), - (0x2F948, 'M', u'睊'), - (0x2F949, 'M', u'䀹'), - (0x2F94A, 'M', u'瞋'), - (0x2F94B, 'M', u'䁆'), - (0x2F94C, 'M', u'䂖'), - (0x2F94D, 'M', u'𥐝'), - (0x2F94E, 'M', u'硎'), - (0x2F94F, 'M', u'碌'), - (0x2F950, 'M', u'磌'), - (0x2F951, 'M', u'䃣'), - (0x2F952, 'M', u'𥘦'), - (0x2F953, 'M', u'祖'), - (0x2F954, 'M', u'𥚚'), - (0x2F955, 'M', u'𥛅'), - (0x2F956, 'M', u'福'), - (0x2F957, 'M', u'秫'), - (0x2F958, 'M', u'䄯'), - (0x2F959, 'M', u'穀'), - (0x2F95A, 'M', u'穊'), - (0x2F95B, 'M', u'穏'), - (0x2F95C, 'M', u'𥥼'), - (0x2F95D, 'M', u'𥪧'), - (0x2F95F, 'X'), - (0x2F960, 'M', u'䈂'), - (0x2F961, 'M', u'𥮫'), - (0x2F962, 'M', u'篆'), - (0x2F963, 'M', u'築'), - (0x2F964, 'M', u'䈧'), - (0x2F965, 'M', u'𥲀'), - (0x2F966, 'M', u'糒'), - (0x2F967, 'M', u'䊠'), - (0x2F968, 'M', u'糨'), - (0x2F969, 'M', u'糣'), - (0x2F96A, 'M', u'紀'), - (0x2F96B, 'M', u'𥾆'), - (0x2F96C, 'M', u'絣'), - (0x2F96D, 'M', u'䌁'), - (0x2F96E, 'M', u'緇'), - (0x2F96F, 'M', u'縂'), - (0x2F970, 'M', u'繅'), - (0x2F971, 'M', u'䌴'), - (0x2F972, 'M', u'𦈨'), - (0x2F973, 'M', u'𦉇'), - (0x2F974, 'M', u'䍙'), - (0x2F975, 'M', u'𦋙'), - (0x2F976, 'M', u'罺'), - (0x2F977, 'M', u'𦌾'), - (0x2F978, 'M', u'羕'), - (0x2F979, 'M', u'翺'), - (0x2F97A, 'M', u'者'), - (0x2F97B, 'M', u'𦓚'), - (0x2F97C, 'M', u'𦔣'), - (0x2F97D, 'M', u'聠'), - (0x2F97E, 'M', u'𦖨'), - (0x2F97F, 'M', u'聰'), - ] - -def _seg_71(): - return [ - (0x2F980, 'M', u'𣍟'), - (0x2F981, 'M', u'䏕'), - (0x2F982, 'M', u'育'), - (0x2F983, 'M', u'脃'), - (0x2F984, 'M', u'䐋'), - (0x2F985, 'M', u'脾'), - (0x2F986, 'M', u'媵'), - (0x2F987, 'M', u'𦞧'), - (0x2F988, 'M', u'𦞵'), - (0x2F989, 'M', u'𣎓'), - (0x2F98A, 'M', u'𣎜'), - (0x2F98B, 'M', u'舁'), - (0x2F98C, 'M', u'舄'), - (0x2F98D, 'M', u'辞'), - (0x2F98E, 'M', u'䑫'), - (0x2F98F, 'M', u'芑'), - (0x2F990, 'M', u'芋'), - (0x2F991, 'M', u'芝'), - (0x2F992, 'M', u'劳'), - (0x2F993, 'M', u'花'), - (0x2F994, 'M', u'芳'), - (0x2F995, 'M', u'芽'), - (0x2F996, 'M', u'苦'), - (0x2F997, 'M', u'𦬼'), - (0x2F998, 'M', u'若'), - (0x2F999, 'M', u'茝'), - (0x2F99A, 'M', u'荣'), - (0x2F99B, 'M', u'莭'), - (0x2F99C, 'M', u'茣'), - (0x2F99D, 'M', u'莽'), - (0x2F99E, 'M', u'菧'), - (0x2F99F, 'M', u'著'), - (0x2F9A0, 'M', u'荓'), - (0x2F9A1, 'M', u'菊'), - (0x2F9A2, 'M', u'菌'), - (0x2F9A3, 'M', u'菜'), - (0x2F9A4, 'M', u'𦰶'), - (0x2F9A5, 'M', u'𦵫'), - (0x2F9A6, 'M', u'𦳕'), - (0x2F9A7, 'M', u'䔫'), - (0x2F9A8, 'M', u'蓱'), - (0x2F9A9, 'M', u'蓳'), - (0x2F9AA, 'M', u'蔖'), - (0x2F9AB, 'M', u'𧏊'), - (0x2F9AC, 'M', u'蕤'), - (0x2F9AD, 'M', u'𦼬'), - (0x2F9AE, 'M', u'䕝'), - (0x2F9AF, 'M', u'䕡'), - (0x2F9B0, 'M', u'𦾱'), - (0x2F9B1, 'M', u'𧃒'), - (0x2F9B2, 'M', u'䕫'), - (0x2F9B3, 'M', u'虐'), - (0x2F9B4, 'M', u'虜'), - (0x2F9B5, 'M', u'虧'), - (0x2F9B6, 'M', u'虩'), - (0x2F9B7, 'M', u'蚩'), - (0x2F9B8, 'M', u'蚈'), - (0x2F9B9, 'M', u'蜎'), - (0x2F9BA, 'M', u'蛢'), - (0x2F9BB, 'M', u'蝹'), - (0x2F9BC, 'M', u'蜨'), - (0x2F9BD, 'M', u'蝫'), - (0x2F9BE, 'M', u'螆'), - (0x2F9BF, 'X'), - (0x2F9C0, 'M', u'蟡'), - (0x2F9C1, 'M', u'蠁'), - (0x2F9C2, 'M', u'䗹'), - (0x2F9C3, 'M', u'衠'), - (0x2F9C4, 'M', u'衣'), - (0x2F9C5, 'M', u'𧙧'), - (0x2F9C6, 'M', u'裗'), - (0x2F9C7, 'M', u'裞'), - (0x2F9C8, 'M', u'䘵'), - (0x2F9C9, 'M', u'裺'), - (0x2F9CA, 'M', u'㒻'), - (0x2F9CB, 'M', u'𧢮'), - (0x2F9CC, 'M', u'𧥦'), - (0x2F9CD, 'M', u'䚾'), - (0x2F9CE, 'M', u'䛇'), - (0x2F9CF, 'M', u'誠'), - (0x2F9D0, 'M', u'諭'), - (0x2F9D1, 'M', u'變'), - (0x2F9D2, 'M', u'豕'), - (0x2F9D3, 'M', u'𧲨'), - (0x2F9D4, 'M', u'貫'), - (0x2F9D5, 'M', u'賁'), - (0x2F9D6, 'M', u'贛'), - (0x2F9D7, 'M', u'起'), - (0x2F9D8, 'M', u'𧼯'), - (0x2F9D9, 'M', u'𠠄'), - (0x2F9DA, 'M', u'跋'), - (0x2F9DB, 'M', u'趼'), - (0x2F9DC, 'M', u'跰'), - (0x2F9DD, 'M', u'𠣞'), - (0x2F9DE, 'M', u'軔'), - (0x2F9DF, 'M', u'輸'), - (0x2F9E0, 'M', u'𨗒'), - (0x2F9E1, 'M', u'𨗭'), - (0x2F9E2, 'M', u'邔'), - (0x2F9E3, 'M', u'郱'), - ] - -def _seg_72(): - return [ - (0x2F9E4, 'M', u'鄑'), - (0x2F9E5, 'M', u'𨜮'), - (0x2F9E6, 'M', u'鄛'), - (0x2F9E7, 'M', u'鈸'), - (0x2F9E8, 'M', u'鋗'), - (0x2F9E9, 'M', u'鋘'), - (0x2F9EA, 'M', u'鉼'), - (0x2F9EB, 'M', u'鏹'), - (0x2F9EC, 'M', u'鐕'), - (0x2F9ED, 'M', u'𨯺'), - (0x2F9EE, 'M', u'開'), - (0x2F9EF, 'M', u'䦕'), - (0x2F9F0, 'M', u'閷'), - (0x2F9F1, 'M', u'𨵷'), - (0x2F9F2, 'M', u'䧦'), - (0x2F9F3, 'M', u'雃'), - (0x2F9F4, 'M', u'嶲'), - (0x2F9F5, 'M', u'霣'), - (0x2F9F6, 'M', u'𩅅'), - (0x2F9F7, 'M', u'𩈚'), - (0x2F9F8, 'M', u'䩮'), - (0x2F9F9, 'M', u'䩶'), - (0x2F9FA, 'M', u'韠'), - (0x2F9FB, 'M', u'𩐊'), - (0x2F9FC, 'M', u'䪲'), - (0x2F9FD, 'M', u'𩒖'), - (0x2F9FE, 'M', u'頋'), - (0x2FA00, 'M', u'頩'), - (0x2FA01, 'M', u'𩖶'), - (0x2FA02, 'M', u'飢'), - (0x2FA03, 'M', u'䬳'), - (0x2FA04, 'M', u'餩'), - (0x2FA05, 'M', u'馧'), - (0x2FA06, 'M', u'駂'), - (0x2FA07, 'M', u'駾'), - (0x2FA08, 'M', u'䯎'), - (0x2FA09, 'M', u'𩬰'), - (0x2FA0A, 'M', u'鬒'), - (0x2FA0B, 'M', u'鱀'), - (0x2FA0C, 'M', u'鳽'), - (0x2FA0D, 'M', u'䳎'), - (0x2FA0E, 'M', u'䳭'), - (0x2FA0F, 'M', u'鵧'), - (0x2FA10, 'M', u'𪃎'), - (0x2FA11, 'M', u'䳸'), - (0x2FA12, 'M', u'𪄅'), - (0x2FA13, 'M', u'𪈎'), - (0x2FA14, 'M', u'𪊑'), - (0x2FA15, 'M', u'麻'), - (0x2FA16, 'M', u'䵖'), - (0x2FA17, 'M', u'黹'), - (0x2FA18, 'M', u'黾'), - (0x2FA19, 'M', u'鼅'), - (0x2FA1A, 'M', u'鼏'), - (0x2FA1B, 'M', u'鼖'), - (0x2FA1C, 'M', u'鼻'), - (0x2FA1D, 'M', u'𪘀'), - (0x2FA1E, 'X'), - (0xE0100, 'I'), - (0xE01F0, 'X'), - ] - -uts46data = tuple( - _seg_0() - + _seg_1() - + _seg_2() - + _seg_3() - + _seg_4() - + _seg_5() - + _seg_6() - + _seg_7() - + _seg_8() - + _seg_9() - + _seg_10() - + _seg_11() - + _seg_12() - + _seg_13() - + _seg_14() - + _seg_15() - + _seg_16() - + _seg_17() - + _seg_18() - + _seg_19() - + _seg_20() - + _seg_21() - + _seg_22() - + _seg_23() - + _seg_24() - + _seg_25() - + _seg_26() - + _seg_27() - + _seg_28() - + _seg_29() - + _seg_30() - + _seg_31() - + _seg_32() - + _seg_33() - + _seg_34() - + _seg_35() - + _seg_36() - + _seg_37() - + _seg_38() - + _seg_39() - + _seg_40() - + _seg_41() - + _seg_42() - + _seg_43() - + _seg_44() - + _seg_45() - + _seg_46() - + _seg_47() - + _seg_48() - + _seg_49() - + _seg_50() - + _seg_51() - + _seg_52() - + _seg_53() - + _seg_54() - + _seg_55() - + _seg_56() - + _seg_57() - + _seg_58() - + _seg_59() - + _seg_60() - + _seg_61() - + _seg_62() - + _seg_63() - + _seg_64() - + _seg_65() - + _seg_66() - + _seg_67() - + _seg_68() - + _seg_69() - + _seg_70() - + _seg_71() - + _seg_72() -) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/ipaddress.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/ipaddress.py deleted file mode 100644 index 8cfdd58..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/ipaddress.py +++ /dev/null @@ -1,2419 +0,0 @@ -# Copyright 2007 Google Inc. -# Licensed to PSF under a Contributor Agreement. - -"""A fast, lightweight IPv4/IPv6 manipulation library in Python. - -This library is used to create/poke/manipulate IPv4 and IPv6 addresses -and networks. - -""" - -from __future__ import unicode_literals - - -import itertools -import struct - -__version__ = '1.0.19' - -# Compatibility functions -_compat_int_types = (int,) -try: - _compat_int_types = (int, long) -except NameError: - pass -try: - _compat_str = unicode -except NameError: - _compat_str = str - assert bytes != str -if b'\0'[0] == 0: # Python 3 semantics - def _compat_bytes_to_byte_vals(byt): - return byt -else: - def _compat_bytes_to_byte_vals(byt): - return [struct.unpack(b'!B', b)[0] for b in byt] -try: - _compat_int_from_byte_vals = int.from_bytes -except AttributeError: - def _compat_int_from_byte_vals(bytvals, endianess): - assert endianess == 'big' - res = 0 - for bv in bytvals: - assert isinstance(bv, _compat_int_types) - res = (res << 8) + bv - return res - - -def _compat_to_bytes(intval, length, endianess): - assert isinstance(intval, _compat_int_types) - assert endianess == 'big' - if length == 4: - if intval < 0 or intval >= 2 ** 32: - raise struct.error("integer out of range for 'I' format code") - return struct.pack(b'!I', intval) - elif length == 16: - if intval < 0 or intval >= 2 ** 128: - raise struct.error("integer out of range for 'QQ' format code") - return struct.pack(b'!QQ', intval >> 64, intval & 0xffffffffffffffff) - else: - raise NotImplementedError() - - -if hasattr(int, 'bit_length'): - # Not int.bit_length , since that won't work in 2.7 where long exists - def _compat_bit_length(i): - return i.bit_length() -else: - def _compat_bit_length(i): - for res in itertools.count(): - if i >> res == 0: - return res - - -def _compat_range(start, end, step=1): - assert step > 0 - i = start - while i < end: - yield i - i += step - - -class _TotalOrderingMixin(object): - __slots__ = () - - # Helper that derives the other comparison operations from - # __lt__ and __eq__ - # We avoid functools.total_ordering because it doesn't handle - # NotImplemented correctly yet (http://bugs.python.org/issue10042) - def __eq__(self, other): - raise NotImplementedError - - def __ne__(self, other): - equal = self.__eq__(other) - if equal is NotImplemented: - return NotImplemented - return not equal - - def __lt__(self, other): - raise NotImplementedError - - def __le__(self, other): - less = self.__lt__(other) - if less is NotImplemented or not less: - return self.__eq__(other) - return less - - def __gt__(self, other): - less = self.__lt__(other) - if less is NotImplemented: - return NotImplemented - equal = self.__eq__(other) - if equal is NotImplemented: - return NotImplemented - return not (less or equal) - - def __ge__(self, other): - less = self.__lt__(other) - if less is NotImplemented: - return NotImplemented - return not less - - -IPV4LENGTH = 32 -IPV6LENGTH = 128 - - -class AddressValueError(ValueError): - """A Value Error related to the address.""" - - -class NetmaskValueError(ValueError): - """A Value Error related to the netmask.""" - - -def ip_address(address): - """Take an IP string/int and return an object of the correct type. - - Args: - address: A string or integer, the IP address. Either IPv4 or - IPv6 addresses may be supplied; integers less than 2**32 will - be considered to be IPv4 by default. - - Returns: - An IPv4Address or IPv6Address object. - - Raises: - ValueError: if the *address* passed isn't either a v4 or a v6 - address - - """ - try: - return IPv4Address(address) - except (AddressValueError, NetmaskValueError): - pass - - try: - return IPv6Address(address) - except (AddressValueError, NetmaskValueError): - pass - - if isinstance(address, bytes): - raise AddressValueError( - '%r does not appear to be an IPv4 or IPv6 address. ' - 'Did you pass in a bytes (str in Python 2) instead of' - ' a unicode object?' % address) - - raise ValueError('%r does not appear to be an IPv4 or IPv6 address' % - address) - - -def ip_network(address, strict=True): - """Take an IP string/int and return an object of the correct type. - - Args: - address: A string or integer, the IP network. Either IPv4 or - IPv6 networks may be supplied; integers less than 2**32 will - be considered to be IPv4 by default. - - Returns: - An IPv4Network or IPv6Network object. - - Raises: - ValueError: if the string passed isn't either a v4 or a v6 - address. Or if the network has host bits set. - - """ - try: - return IPv4Network(address, strict) - except (AddressValueError, NetmaskValueError): - pass - - try: - return IPv6Network(address, strict) - except (AddressValueError, NetmaskValueError): - pass - - if isinstance(address, bytes): - raise AddressValueError( - '%r does not appear to be an IPv4 or IPv6 network. ' - 'Did you pass in a bytes (str in Python 2) instead of' - ' a unicode object?' % address) - - raise ValueError('%r does not appear to be an IPv4 or IPv6 network' % - address) - - -def ip_interface(address): - """Take an IP string/int and return an object of the correct type. - - Args: - address: A string or integer, the IP address. Either IPv4 or - IPv6 addresses may be supplied; integers less than 2**32 will - be considered to be IPv4 by default. - - Returns: - An IPv4Interface or IPv6Interface object. - - Raises: - ValueError: if the string passed isn't either a v4 or a v6 - address. - - Notes: - The IPv?Interface classes describe an Address on a particular - Network, so they're basically a combination of both the Address - and Network classes. - - """ - try: - return IPv4Interface(address) - except (AddressValueError, NetmaskValueError): - pass - - try: - return IPv6Interface(address) - except (AddressValueError, NetmaskValueError): - pass - - raise ValueError('%r does not appear to be an IPv4 or IPv6 interface' % - address) - - -def v4_int_to_packed(address): - """Represent an address as 4 packed bytes in network (big-endian) order. - - Args: - address: An integer representation of an IPv4 IP address. - - Returns: - The integer address packed as 4 bytes in network (big-endian) order. - - Raises: - ValueError: If the integer is negative or too large to be an - IPv4 IP address. - - """ - try: - return _compat_to_bytes(address, 4, 'big') - except (struct.error, OverflowError): - raise ValueError("Address negative or too large for IPv4") - - -def v6_int_to_packed(address): - """Represent an address as 16 packed bytes in network (big-endian) order. - - Args: - address: An integer representation of an IPv6 IP address. - - Returns: - The integer address packed as 16 bytes in network (big-endian) order. - - """ - try: - return _compat_to_bytes(address, 16, 'big') - except (struct.error, OverflowError): - raise ValueError("Address negative or too large for IPv6") - - -def _split_optional_netmask(address): - """Helper to split the netmask and raise AddressValueError if needed""" - addr = _compat_str(address).split('/') - if len(addr) > 2: - raise AddressValueError("Only one '/' permitted in %r" % address) - return addr - - -def _find_address_range(addresses): - """Find a sequence of sorted deduplicated IPv#Address. - - Args: - addresses: a list of IPv#Address objects. - - Yields: - A tuple containing the first and last IP addresses in the sequence. - - """ - it = iter(addresses) - first = last = next(it) - for ip in it: - if ip._ip != last._ip + 1: - yield first, last - first = ip - last = ip - yield first, last - - -def _count_righthand_zero_bits(number, bits): - """Count the number of zero bits on the right hand side. - - Args: - number: an integer. - bits: maximum number of bits to count. - - Returns: - The number of zero bits on the right hand side of the number. - - """ - if number == 0: - return bits - return min(bits, _compat_bit_length(~number & (number - 1))) - - -def summarize_address_range(first, last): - """Summarize a network range given the first and last IP addresses. - - Example: - >>> list(summarize_address_range(IPv4Address('192.0.2.0'), - ... IPv4Address('192.0.2.130'))) - ... #doctest: +NORMALIZE_WHITESPACE - [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), - IPv4Network('192.0.2.130/32')] - - Args: - first: the first IPv4Address or IPv6Address in the range. - last: the last IPv4Address or IPv6Address in the range. - - Returns: - An iterator of the summarized IPv(4|6) network objects. - - Raise: - TypeError: - If the first and last objects are not IP addresses. - If the first and last objects are not the same version. - ValueError: - If the last object is not greater than the first. - If the version of the first address is not 4 or 6. - - """ - if (not (isinstance(first, _BaseAddress) and - isinstance(last, _BaseAddress))): - raise TypeError('first and last must be IP addresses, not networks') - if first.version != last.version: - raise TypeError("%s and %s are not of the same version" % ( - first, last)) - if first > last: - raise ValueError('last IP address must be greater than first') - - if first.version == 4: - ip = IPv4Network - elif first.version == 6: - ip = IPv6Network - else: - raise ValueError('unknown IP version') - - ip_bits = first._max_prefixlen - first_int = first._ip - last_int = last._ip - while first_int <= last_int: - nbits = min(_count_righthand_zero_bits(first_int, ip_bits), - _compat_bit_length(last_int - first_int + 1) - 1) - net = ip((first_int, ip_bits - nbits)) - yield net - first_int += 1 << nbits - if first_int - 1 == ip._ALL_ONES: - break - - -def _collapse_addresses_internal(addresses): - """Loops through the addresses, collapsing concurrent netblocks. - - Example: - - ip1 = IPv4Network('192.0.2.0/26') - ip2 = IPv4Network('192.0.2.64/26') - ip3 = IPv4Network('192.0.2.128/26') - ip4 = IPv4Network('192.0.2.192/26') - - _collapse_addresses_internal([ip1, ip2, ip3, ip4]) -> - [IPv4Network('192.0.2.0/24')] - - This shouldn't be called directly; it is called via - collapse_addresses([]). - - Args: - addresses: A list of IPv4Network's or IPv6Network's - - Returns: - A list of IPv4Network's or IPv6Network's depending on what we were - passed. - - """ - # First merge - to_merge = list(addresses) - subnets = {} - while to_merge: - net = to_merge.pop() - supernet = net.supernet() - existing = subnets.get(supernet) - if existing is None: - subnets[supernet] = net - elif existing != net: - # Merge consecutive subnets - del subnets[supernet] - to_merge.append(supernet) - # Then iterate over resulting networks, skipping subsumed subnets - last = None - for net in sorted(subnets.values()): - if last is not None: - # Since they are sorted, - # last.network_address <= net.network_address is a given. - if last.broadcast_address >= net.broadcast_address: - continue - yield net - last = net - - -def collapse_addresses(addresses): - """Collapse a list of IP objects. - - Example: - collapse_addresses([IPv4Network('192.0.2.0/25'), - IPv4Network('192.0.2.128/25')]) -> - [IPv4Network('192.0.2.0/24')] - - Args: - addresses: An iterator of IPv4Network or IPv6Network objects. - - Returns: - An iterator of the collapsed IPv(4|6)Network objects. - - Raises: - TypeError: If passed a list of mixed version objects. - - """ - addrs = [] - ips = [] - nets = [] - - # split IP addresses and networks - for ip in addresses: - if isinstance(ip, _BaseAddress): - if ips and ips[-1]._version != ip._version: - raise TypeError("%s and %s are not of the same version" % ( - ip, ips[-1])) - ips.append(ip) - elif ip._prefixlen == ip._max_prefixlen: - if ips and ips[-1]._version != ip._version: - raise TypeError("%s and %s are not of the same version" % ( - ip, ips[-1])) - try: - ips.append(ip.ip) - except AttributeError: - ips.append(ip.network_address) - else: - if nets and nets[-1]._version != ip._version: - raise TypeError("%s and %s are not of the same version" % ( - ip, nets[-1])) - nets.append(ip) - - # sort and dedup - ips = sorted(set(ips)) - - # find consecutive address ranges in the sorted sequence and summarize them - if ips: - for first, last in _find_address_range(ips): - addrs.extend(summarize_address_range(first, last)) - - return _collapse_addresses_internal(addrs + nets) - - -def get_mixed_type_key(obj): - """Return a key suitable for sorting between networks and addresses. - - Address and Network objects are not sortable by default; they're - fundamentally different so the expression - - IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24') - - doesn't make any sense. There are some times however, where you may wish - to have ipaddress sort these for you anyway. If you need to do this, you - can use this function as the key= argument to sorted(). - - Args: - obj: either a Network or Address object. - Returns: - appropriate key. - - """ - if isinstance(obj, _BaseNetwork): - return obj._get_networks_key() - elif isinstance(obj, _BaseAddress): - return obj._get_address_key() - return NotImplemented - - -class _IPAddressBase(_TotalOrderingMixin): - - """The mother class.""" - - __slots__ = () - - @property - def exploded(self): - """Return the longhand version of the IP address as a string.""" - return self._explode_shorthand_ip_string() - - @property - def compressed(self): - """Return the shorthand version of the IP address as a string.""" - return _compat_str(self) - - @property - def reverse_pointer(self): - """The name of the reverse DNS pointer for the IP address, e.g.: - >>> ipaddress.ip_address("127.0.0.1").reverse_pointer - '1.0.0.127.in-addr.arpa' - >>> ipaddress.ip_address("2001:db8::1").reverse_pointer - '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa' - - """ - return self._reverse_pointer() - - @property - def version(self): - msg = '%200s has no version specified' % (type(self),) - raise NotImplementedError(msg) - - def _check_int_address(self, address): - if address < 0: - msg = "%d (< 0) is not permitted as an IPv%d address" - raise AddressValueError(msg % (address, self._version)) - if address > self._ALL_ONES: - msg = "%d (>= 2**%d) is not permitted as an IPv%d address" - raise AddressValueError(msg % (address, self._max_prefixlen, - self._version)) - - def _check_packed_address(self, address, expected_len): - address_len = len(address) - if address_len != expected_len: - msg = ( - '%r (len %d != %d) is not permitted as an IPv%d address. ' - 'Did you pass in a bytes (str in Python 2) instead of' - ' a unicode object?') - raise AddressValueError(msg % (address, address_len, - expected_len, self._version)) - - @classmethod - def _ip_int_from_prefix(cls, prefixlen): - """Turn the prefix length into a bitwise netmask - - Args: - prefixlen: An integer, the prefix length. - - Returns: - An integer. - - """ - return cls._ALL_ONES ^ (cls._ALL_ONES >> prefixlen) - - @classmethod - def _prefix_from_ip_int(cls, ip_int): - """Return prefix length from the bitwise netmask. - - Args: - ip_int: An integer, the netmask in expanded bitwise format - - Returns: - An integer, the prefix length. - - Raises: - ValueError: If the input intermingles zeroes & ones - """ - trailing_zeroes = _count_righthand_zero_bits(ip_int, - cls._max_prefixlen) - prefixlen = cls._max_prefixlen - trailing_zeroes - leading_ones = ip_int >> trailing_zeroes - all_ones = (1 << prefixlen) - 1 - if leading_ones != all_ones: - byteslen = cls._max_prefixlen // 8 - details = _compat_to_bytes(ip_int, byteslen, 'big') - msg = 'Netmask pattern %r mixes zeroes & ones' - raise ValueError(msg % details) - return prefixlen - - @classmethod - def _report_invalid_netmask(cls, netmask_str): - msg = '%r is not a valid netmask' % netmask_str - raise NetmaskValueError(msg) - - @classmethod - def _prefix_from_prefix_string(cls, prefixlen_str): - """Return prefix length from a numeric string - - Args: - prefixlen_str: The string to be converted - - Returns: - An integer, the prefix length. - - Raises: - NetmaskValueError: If the input is not a valid netmask - """ - # int allows a leading +/- as well as surrounding whitespace, - # so we ensure that isn't the case - if not _BaseV4._DECIMAL_DIGITS.issuperset(prefixlen_str): - cls._report_invalid_netmask(prefixlen_str) - try: - prefixlen = int(prefixlen_str) - except ValueError: - cls._report_invalid_netmask(prefixlen_str) - if not (0 <= prefixlen <= cls._max_prefixlen): - cls._report_invalid_netmask(prefixlen_str) - return prefixlen - - @classmethod - def _prefix_from_ip_string(cls, ip_str): - """Turn a netmask/hostmask string into a prefix length - - Args: - ip_str: The netmask/hostmask to be converted - - Returns: - An integer, the prefix length. - - Raises: - NetmaskValueError: If the input is not a valid netmask/hostmask - """ - # Parse the netmask/hostmask like an IP address. - try: - ip_int = cls._ip_int_from_string(ip_str) - except AddressValueError: - cls._report_invalid_netmask(ip_str) - - # Try matching a netmask (this would be /1*0*/ as a bitwise regexp). - # Note that the two ambiguous cases (all-ones and all-zeroes) are - # treated as netmasks. - try: - return cls._prefix_from_ip_int(ip_int) - except ValueError: - pass - - # Invert the bits, and try matching a /0+1+/ hostmask instead. - ip_int ^= cls._ALL_ONES - try: - return cls._prefix_from_ip_int(ip_int) - except ValueError: - cls._report_invalid_netmask(ip_str) - - def __reduce__(self): - return self.__class__, (_compat_str(self),) - - -class _BaseAddress(_IPAddressBase): - - """A generic IP object. - - This IP class contains the version independent methods which are - used by single IP addresses. - """ - - __slots__ = () - - def __int__(self): - return self._ip - - def __eq__(self, other): - try: - return (self._ip == other._ip and - self._version == other._version) - except AttributeError: - return NotImplemented - - def __lt__(self, other): - if not isinstance(other, _IPAddressBase): - return NotImplemented - if not isinstance(other, _BaseAddress): - raise TypeError('%s and %s are not of the same type' % ( - self, other)) - if self._version != other._version: - raise TypeError('%s and %s are not of the same version' % ( - self, other)) - if self._ip != other._ip: - return self._ip < other._ip - return False - - # Shorthand for Integer addition and subtraction. This is not - # meant to ever support addition/subtraction of addresses. - def __add__(self, other): - if not isinstance(other, _compat_int_types): - return NotImplemented - return self.__class__(int(self) + other) - - def __sub__(self, other): - if not isinstance(other, _compat_int_types): - return NotImplemented - return self.__class__(int(self) - other) - - def __repr__(self): - return '%s(%r)' % (self.__class__.__name__, _compat_str(self)) - - def __str__(self): - return _compat_str(self._string_from_ip_int(self._ip)) - - def __hash__(self): - return hash(hex(int(self._ip))) - - def _get_address_key(self): - return (self._version, self) - - def __reduce__(self): - return self.__class__, (self._ip,) - - -class _BaseNetwork(_IPAddressBase): - - """A generic IP network object. - - This IP class contains the version independent methods which are - used by networks. - - """ - def __init__(self, address): - self._cache = {} - - def __repr__(self): - return '%s(%r)' % (self.__class__.__name__, _compat_str(self)) - - def __str__(self): - return '%s/%d' % (self.network_address, self.prefixlen) - - def hosts(self): - """Generate Iterator over usable hosts in a network. - - This is like __iter__ except it doesn't return the network - or broadcast addresses. - - """ - network = int(self.network_address) - broadcast = int(self.broadcast_address) - for x in _compat_range(network + 1, broadcast): - yield self._address_class(x) - - def __iter__(self): - network = int(self.network_address) - broadcast = int(self.broadcast_address) - for x in _compat_range(network, broadcast + 1): - yield self._address_class(x) - - def __getitem__(self, n): - network = int(self.network_address) - broadcast = int(self.broadcast_address) - if n >= 0: - if network + n > broadcast: - raise IndexError('address out of range') - return self._address_class(network + n) - else: - n += 1 - if broadcast + n < network: - raise IndexError('address out of range') - return self._address_class(broadcast + n) - - def __lt__(self, other): - if not isinstance(other, _IPAddressBase): - return NotImplemented - if not isinstance(other, _BaseNetwork): - raise TypeError('%s and %s are not of the same type' % ( - self, other)) - if self._version != other._version: - raise TypeError('%s and %s are not of the same version' % ( - self, other)) - if self.network_address != other.network_address: - return self.network_address < other.network_address - if self.netmask != other.netmask: - return self.netmask < other.netmask - return False - - def __eq__(self, other): - try: - return (self._version == other._version and - self.network_address == other.network_address and - int(self.netmask) == int(other.netmask)) - except AttributeError: - return NotImplemented - - def __hash__(self): - return hash(int(self.network_address) ^ int(self.netmask)) - - def __contains__(self, other): - # always false if one is v4 and the other is v6. - if self._version != other._version: - return False - # dealing with another network. - if isinstance(other, _BaseNetwork): - return False - # dealing with another address - else: - # address - return (int(self.network_address) <= int(other._ip) <= - int(self.broadcast_address)) - - def overlaps(self, other): - """Tell if self is partly contained in other.""" - return self.network_address in other or ( - self.broadcast_address in other or ( - other.network_address in self or ( - other.broadcast_address in self))) - - @property - def broadcast_address(self): - x = self._cache.get('broadcast_address') - if x is None: - x = self._address_class(int(self.network_address) | - int(self.hostmask)) - self._cache['broadcast_address'] = x - return x - - @property - def hostmask(self): - x = self._cache.get('hostmask') - if x is None: - x = self._address_class(int(self.netmask) ^ self._ALL_ONES) - self._cache['hostmask'] = x - return x - - @property - def with_prefixlen(self): - return '%s/%d' % (self.network_address, self._prefixlen) - - @property - def with_netmask(self): - return '%s/%s' % (self.network_address, self.netmask) - - @property - def with_hostmask(self): - return '%s/%s' % (self.network_address, self.hostmask) - - @property - def num_addresses(self): - """Number of hosts in the current subnet.""" - return int(self.broadcast_address) - int(self.network_address) + 1 - - @property - def _address_class(self): - # Returning bare address objects (rather than interfaces) allows for - # more consistent behaviour across the network address, broadcast - # address and individual host addresses. - msg = '%200s has no associated address class' % (type(self),) - raise NotImplementedError(msg) - - @property - def prefixlen(self): - return self._prefixlen - - def address_exclude(self, other): - """Remove an address from a larger block. - - For example: - - addr1 = ip_network('192.0.2.0/28') - addr2 = ip_network('192.0.2.1/32') - list(addr1.address_exclude(addr2)) = - [IPv4Network('192.0.2.0/32'), IPv4Network('192.0.2.2/31'), - IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.8/29')] - - or IPv6: - - addr1 = ip_network('2001:db8::1/32') - addr2 = ip_network('2001:db8::1/128') - list(addr1.address_exclude(addr2)) = - [ip_network('2001:db8::1/128'), - ip_network('2001:db8::2/127'), - ip_network('2001:db8::4/126'), - ip_network('2001:db8::8/125'), - ... - ip_network('2001:db8:8000::/33')] - - Args: - other: An IPv4Network or IPv6Network object of the same type. - - Returns: - An iterator of the IPv(4|6)Network objects which is self - minus other. - - Raises: - TypeError: If self and other are of differing address - versions, or if other is not a network object. - ValueError: If other is not completely contained by self. - - """ - if not self._version == other._version: - raise TypeError("%s and %s are not of the same version" % ( - self, other)) - - if not isinstance(other, _BaseNetwork): - raise TypeError("%s is not a network object" % other) - - if not other.subnet_of(self): - raise ValueError('%s not contained in %s' % (other, self)) - if other == self: - return - - # Make sure we're comparing the network of other. - other = other.__class__('%s/%s' % (other.network_address, - other.prefixlen)) - - s1, s2 = self.subnets() - while s1 != other and s2 != other: - if other.subnet_of(s1): - yield s2 - s1, s2 = s1.subnets() - elif other.subnet_of(s2): - yield s1 - s1, s2 = s2.subnets() - else: - # If we got here, there's a bug somewhere. - raise AssertionError('Error performing exclusion: ' - 's1: %s s2: %s other: %s' % - (s1, s2, other)) - if s1 == other: - yield s2 - elif s2 == other: - yield s1 - else: - # If we got here, there's a bug somewhere. - raise AssertionError('Error performing exclusion: ' - 's1: %s s2: %s other: %s' % - (s1, s2, other)) - - def compare_networks(self, other): - """Compare two IP objects. - - This is only concerned about the comparison of the integer - representation of the network addresses. This means that the - host bits aren't considered at all in this method. If you want - to compare host bits, you can easily enough do a - 'HostA._ip < HostB._ip' - - Args: - other: An IP object. - - Returns: - If the IP versions of self and other are the same, returns: - - -1 if self < other: - eg: IPv4Network('192.0.2.0/25') < IPv4Network('192.0.2.128/25') - IPv6Network('2001:db8::1000/124') < - IPv6Network('2001:db8::2000/124') - 0 if self == other - eg: IPv4Network('192.0.2.0/24') == IPv4Network('192.0.2.0/24') - IPv6Network('2001:db8::1000/124') == - IPv6Network('2001:db8::1000/124') - 1 if self > other - eg: IPv4Network('192.0.2.128/25') > IPv4Network('192.0.2.0/25') - IPv6Network('2001:db8::2000/124') > - IPv6Network('2001:db8::1000/124') - - Raises: - TypeError if the IP versions are different. - - """ - # does this need to raise a ValueError? - if self._version != other._version: - raise TypeError('%s and %s are not of the same type' % ( - self, other)) - # self._version == other._version below here: - if self.network_address < other.network_address: - return -1 - if self.network_address > other.network_address: - return 1 - # self.network_address == other.network_address below here: - if self.netmask < other.netmask: - return -1 - if self.netmask > other.netmask: - return 1 - return 0 - - def _get_networks_key(self): - """Network-only key function. - - Returns an object that identifies this address' network and - netmask. This function is a suitable "key" argument for sorted() - and list.sort(). - - """ - return (self._version, self.network_address, self.netmask) - - def subnets(self, prefixlen_diff=1, new_prefix=None): - """The subnets which join to make the current subnet. - - In the case that self contains only one IP - (self._prefixlen == 32 for IPv4 or self._prefixlen == 128 - for IPv6), yield an iterator with just ourself. - - Args: - prefixlen_diff: An integer, the amount the prefix length - should be increased by. This should not be set if - new_prefix is also set. - new_prefix: The desired new prefix length. This must be a - larger number (smaller prefix) than the existing prefix. - This should not be set if prefixlen_diff is also set. - - Returns: - An iterator of IPv(4|6) objects. - - Raises: - ValueError: The prefixlen_diff is too small or too large. - OR - prefixlen_diff and new_prefix are both set or new_prefix - is a smaller number than the current prefix (smaller - number means a larger network) - - """ - if self._prefixlen == self._max_prefixlen: - yield self - return - - if new_prefix is not None: - if new_prefix < self._prefixlen: - raise ValueError('new prefix must be longer') - if prefixlen_diff != 1: - raise ValueError('cannot set prefixlen_diff and new_prefix') - prefixlen_diff = new_prefix - self._prefixlen - - if prefixlen_diff < 0: - raise ValueError('prefix length diff must be > 0') - new_prefixlen = self._prefixlen + prefixlen_diff - - if new_prefixlen > self._max_prefixlen: - raise ValueError( - 'prefix length diff %d is invalid for netblock %s' % ( - new_prefixlen, self)) - - start = int(self.network_address) - end = int(self.broadcast_address) + 1 - step = (int(self.hostmask) + 1) >> prefixlen_diff - for new_addr in _compat_range(start, end, step): - current = self.__class__((new_addr, new_prefixlen)) - yield current - - def supernet(self, prefixlen_diff=1, new_prefix=None): - """The supernet containing the current network. - - Args: - prefixlen_diff: An integer, the amount the prefix length of - the network should be decreased by. For example, given a - /24 network and a prefixlen_diff of 3, a supernet with a - /21 netmask is returned. - - Returns: - An IPv4 network object. - - Raises: - ValueError: If self.prefixlen - prefixlen_diff < 0. I.e., you have - a negative prefix length. - OR - If prefixlen_diff and new_prefix are both set or new_prefix is a - larger number than the current prefix (larger number means a - smaller network) - - """ - if self._prefixlen == 0: - return self - - if new_prefix is not None: - if new_prefix > self._prefixlen: - raise ValueError('new prefix must be shorter') - if prefixlen_diff != 1: - raise ValueError('cannot set prefixlen_diff and new_prefix') - prefixlen_diff = self._prefixlen - new_prefix - - new_prefixlen = self.prefixlen - prefixlen_diff - if new_prefixlen < 0: - raise ValueError( - 'current prefixlen is %d, cannot have a prefixlen_diff of %d' % - (self.prefixlen, prefixlen_diff)) - return self.__class__(( - int(self.network_address) & (int(self.netmask) << prefixlen_diff), - new_prefixlen)) - - @property - def is_multicast(self): - """Test if the address is reserved for multicast use. - - Returns: - A boolean, True if the address is a multicast address. - See RFC 2373 2.7 for details. - - """ - return (self.network_address.is_multicast and - self.broadcast_address.is_multicast) - - @staticmethod - def _is_subnet_of(a, b): - try: - # Always false if one is v4 and the other is v6. - if a._version != b._version: - raise TypeError("%s and %s are not of the same version" (a, b)) - return (b.network_address <= a.network_address and - b.broadcast_address >= a.broadcast_address) - except AttributeError: - raise TypeError("Unable to test subnet containment " - "between %s and %s" % (a, b)) - - def subnet_of(self, other): - """Return True if this network is a subnet of other.""" - return self._is_subnet_of(self, other) - - def supernet_of(self, other): - """Return True if this network is a supernet of other.""" - return self._is_subnet_of(other, self) - - @property - def is_reserved(self): - """Test if the address is otherwise IETF reserved. - - Returns: - A boolean, True if the address is within one of the - reserved IPv6 Network ranges. - - """ - return (self.network_address.is_reserved and - self.broadcast_address.is_reserved) - - @property - def is_link_local(self): - """Test if the address is reserved for link-local. - - Returns: - A boolean, True if the address is reserved per RFC 4291. - - """ - return (self.network_address.is_link_local and - self.broadcast_address.is_link_local) - - @property - def is_private(self): - """Test if this address is allocated for private networks. - - Returns: - A boolean, True if the address is reserved per - iana-ipv4-special-registry or iana-ipv6-special-registry. - - """ - return (self.network_address.is_private and - self.broadcast_address.is_private) - - @property - def is_global(self): - """Test if this address is allocated for public networks. - - Returns: - A boolean, True if the address is not reserved per - iana-ipv4-special-registry or iana-ipv6-special-registry. - - """ - return not self.is_private - - @property - def is_unspecified(self): - """Test if the address is unspecified. - - Returns: - A boolean, True if this is the unspecified address as defined in - RFC 2373 2.5.2. - - """ - return (self.network_address.is_unspecified and - self.broadcast_address.is_unspecified) - - @property - def is_loopback(self): - """Test if the address is a loopback address. - - Returns: - A boolean, True if the address is a loopback address as defined in - RFC 2373 2.5.3. - - """ - return (self.network_address.is_loopback and - self.broadcast_address.is_loopback) - - -class _BaseV4(object): - - """Base IPv4 object. - - The following methods are used by IPv4 objects in both single IP - addresses and networks. - - """ - - __slots__ = () - _version = 4 - # Equivalent to 255.255.255.255 or 32 bits of 1's. - _ALL_ONES = (2 ** IPV4LENGTH) - 1 - _DECIMAL_DIGITS = frozenset('0123456789') - - # the valid octets for host and netmasks. only useful for IPv4. - _valid_mask_octets = frozenset([255, 254, 252, 248, 240, 224, 192, 128, 0]) - - _max_prefixlen = IPV4LENGTH - # There are only a handful of valid v4 netmasks, so we cache them all - # when constructed (see _make_netmask()). - _netmask_cache = {} - - def _explode_shorthand_ip_string(self): - return _compat_str(self) - - @classmethod - def _make_netmask(cls, arg): - """Make a (netmask, prefix_len) tuple from the given argument. - - Argument can be: - - an integer (the prefix length) - - a string representing the prefix length (e.g. "24") - - a string representing the prefix netmask (e.g. "255.255.255.0") - """ - if arg not in cls._netmask_cache: - if isinstance(arg, _compat_int_types): - prefixlen = arg - else: - try: - # Check for a netmask in prefix length form - prefixlen = cls._prefix_from_prefix_string(arg) - except NetmaskValueError: - # Check for a netmask or hostmask in dotted-quad form. - # This may raise NetmaskValueError. - prefixlen = cls._prefix_from_ip_string(arg) - netmask = IPv4Address(cls._ip_int_from_prefix(prefixlen)) - cls._netmask_cache[arg] = netmask, prefixlen - return cls._netmask_cache[arg] - - @classmethod - def _ip_int_from_string(cls, ip_str): - """Turn the given IP string into an integer for comparison. - - Args: - ip_str: A string, the IP ip_str. - - Returns: - The IP ip_str as an integer. - - Raises: - AddressValueError: if ip_str isn't a valid IPv4 Address. - - """ - if not ip_str: - raise AddressValueError('Address cannot be empty') - - octets = ip_str.split('.') - if len(octets) != 4: - raise AddressValueError("Expected 4 octets in %r" % ip_str) - - try: - return _compat_int_from_byte_vals( - map(cls._parse_octet, octets), 'big') - except ValueError as exc: - raise AddressValueError("%s in %r" % (exc, ip_str)) - - @classmethod - def _parse_octet(cls, octet_str): - """Convert a decimal octet into an integer. - - Args: - octet_str: A string, the number to parse. - - Returns: - The octet as an integer. - - Raises: - ValueError: if the octet isn't strictly a decimal from [0..255]. - - """ - if not octet_str: - raise ValueError("Empty octet not permitted") - # Whitelist the characters, since int() allows a lot of bizarre stuff. - if not cls._DECIMAL_DIGITS.issuperset(octet_str): - msg = "Only decimal digits permitted in %r" - raise ValueError(msg % octet_str) - # We do the length check second, since the invalid character error - # is likely to be more informative for the user - if len(octet_str) > 3: - msg = "At most 3 characters permitted in %r" - raise ValueError(msg % octet_str) - # Convert to integer (we know digits are legal) - octet_int = int(octet_str, 10) - # Any octets that look like they *might* be written in octal, - # and which don't look exactly the same in both octal and - # decimal are rejected as ambiguous - if octet_int > 7 and octet_str[0] == '0': - msg = "Ambiguous (octal/decimal) value in %r not permitted" - raise ValueError(msg % octet_str) - if octet_int > 255: - raise ValueError("Octet %d (> 255) not permitted" % octet_int) - return octet_int - - @classmethod - def _string_from_ip_int(cls, ip_int): - """Turns a 32-bit integer into dotted decimal notation. - - Args: - ip_int: An integer, the IP address. - - Returns: - The IP address as a string in dotted decimal notation. - - """ - return '.'.join(_compat_str(struct.unpack(b'!B', b)[0] - if isinstance(b, bytes) - else b) - for b in _compat_to_bytes(ip_int, 4, 'big')) - - def _is_hostmask(self, ip_str): - """Test if the IP string is a hostmask (rather than a netmask). - - Args: - ip_str: A string, the potential hostmask. - - Returns: - A boolean, True if the IP string is a hostmask. - - """ - bits = ip_str.split('.') - try: - parts = [x for x in map(int, bits) if x in self._valid_mask_octets] - except ValueError: - return False - if len(parts) != len(bits): - return False - if parts[0] < parts[-1]: - return True - return False - - def _reverse_pointer(self): - """Return the reverse DNS pointer name for the IPv4 address. - - This implements the method described in RFC1035 3.5. - - """ - reverse_octets = _compat_str(self).split('.')[::-1] - return '.'.join(reverse_octets) + '.in-addr.arpa' - - @property - def max_prefixlen(self): - return self._max_prefixlen - - @property - def version(self): - return self._version - - -class IPv4Address(_BaseV4, _BaseAddress): - - """Represent and manipulate single IPv4 Addresses.""" - - __slots__ = ('_ip', '__weakref__') - - def __init__(self, address): - - """ - Args: - address: A string or integer representing the IP - - Additionally, an integer can be passed, so - IPv4Address('192.0.2.1') == IPv4Address(3221225985). - or, more generally - IPv4Address(int(IPv4Address('192.0.2.1'))) == - IPv4Address('192.0.2.1') - - Raises: - AddressValueError: If ipaddress isn't a valid IPv4 address. - - """ - # Efficient constructor from integer. - if isinstance(address, _compat_int_types): - self._check_int_address(address) - self._ip = address - return - - # Constructing from a packed address - if isinstance(address, bytes): - self._check_packed_address(address, 4) - bvs = _compat_bytes_to_byte_vals(address) - self._ip = _compat_int_from_byte_vals(bvs, 'big') - return - - # Assume input argument to be string or any object representation - # which converts into a formatted IP string. - addr_str = _compat_str(address) - if '/' in addr_str: - raise AddressValueError("Unexpected '/' in %r" % address) - self._ip = self._ip_int_from_string(addr_str) - - @property - def packed(self): - """The binary representation of this address.""" - return v4_int_to_packed(self._ip) - - @property - def is_reserved(self): - """Test if the address is otherwise IETF reserved. - - Returns: - A boolean, True if the address is within the - reserved IPv4 Network range. - - """ - return self in self._constants._reserved_network - - @property - def is_private(self): - """Test if this address is allocated for private networks. - - Returns: - A boolean, True if the address is reserved per - iana-ipv4-special-registry. - - """ - return any(self in net for net in self._constants._private_networks) - - @property - def is_global(self): - return ( - self not in self._constants._public_network and - not self.is_private) - - @property - def is_multicast(self): - """Test if the address is reserved for multicast use. - - Returns: - A boolean, True if the address is multicast. - See RFC 3171 for details. - - """ - return self in self._constants._multicast_network - - @property - def is_unspecified(self): - """Test if the address is unspecified. - - Returns: - A boolean, True if this is the unspecified address as defined in - RFC 5735 3. - - """ - return self == self._constants._unspecified_address - - @property - def is_loopback(self): - """Test if the address is a loopback address. - - Returns: - A boolean, True if the address is a loopback per RFC 3330. - - """ - return self in self._constants._loopback_network - - @property - def is_link_local(self): - """Test if the address is reserved for link-local. - - Returns: - A boolean, True if the address is link-local per RFC 3927. - - """ - return self in self._constants._linklocal_network - - -class IPv4Interface(IPv4Address): - - def __init__(self, address): - if isinstance(address, (bytes, _compat_int_types)): - IPv4Address.__init__(self, address) - self.network = IPv4Network(self._ip) - self._prefixlen = self._max_prefixlen - return - - if isinstance(address, tuple): - IPv4Address.__init__(self, address[0]) - if len(address) > 1: - self._prefixlen = int(address[1]) - else: - self._prefixlen = self._max_prefixlen - - self.network = IPv4Network(address, strict=False) - self.netmask = self.network.netmask - self.hostmask = self.network.hostmask - return - - addr = _split_optional_netmask(address) - IPv4Address.__init__(self, addr[0]) - - self.network = IPv4Network(address, strict=False) - self._prefixlen = self.network._prefixlen - - self.netmask = self.network.netmask - self.hostmask = self.network.hostmask - - def __str__(self): - return '%s/%d' % (self._string_from_ip_int(self._ip), - self.network.prefixlen) - - def __eq__(self, other): - address_equal = IPv4Address.__eq__(self, other) - if not address_equal or address_equal is NotImplemented: - return address_equal - try: - return self.network == other.network - except AttributeError: - # An interface with an associated network is NOT the - # same as an unassociated address. That's why the hash - # takes the extra info into account. - return False - - def __lt__(self, other): - address_less = IPv4Address.__lt__(self, other) - if address_less is NotImplemented: - return NotImplemented - try: - return (self.network < other.network or - self.network == other.network and address_less) - except AttributeError: - # We *do* allow addresses and interfaces to be sorted. The - # unassociated address is considered less than all interfaces. - return False - - def __hash__(self): - return self._ip ^ self._prefixlen ^ int(self.network.network_address) - - __reduce__ = _IPAddressBase.__reduce__ - - @property - def ip(self): - return IPv4Address(self._ip) - - @property - def with_prefixlen(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self._prefixlen) - - @property - def with_netmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.netmask) - - @property - def with_hostmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.hostmask) - - -class IPv4Network(_BaseV4, _BaseNetwork): - - """This class represents and manipulates 32-bit IPv4 network + addresses.. - - Attributes: [examples for IPv4Network('192.0.2.0/27')] - .network_address: IPv4Address('192.0.2.0') - .hostmask: IPv4Address('0.0.0.31') - .broadcast_address: IPv4Address('192.0.2.32') - .netmask: IPv4Address('255.255.255.224') - .prefixlen: 27 - - """ - # Class to use when creating address objects - _address_class = IPv4Address - - def __init__(self, address, strict=True): - - """Instantiate a new IPv4 network object. - - Args: - address: A string or integer representing the IP [& network]. - '192.0.2.0/24' - '192.0.2.0/255.255.255.0' - '192.0.0.2/0.0.0.255' - are all functionally the same in IPv4. Similarly, - '192.0.2.1' - '192.0.2.1/255.255.255.255' - '192.0.2.1/32' - are also functionally equivalent. That is to say, failing to - provide a subnetmask will create an object with a mask of /32. - - If the mask (portion after the / in the argument) is given in - dotted quad form, it is treated as a netmask if it starts with a - non-zero field (e.g. /255.0.0.0 == /8) and as a hostmask if it - starts with a zero field (e.g. 0.255.255.255 == /8), with the - single exception of an all-zero mask which is treated as a - netmask == /0. If no mask is given, a default of /32 is used. - - Additionally, an integer can be passed, so - IPv4Network('192.0.2.1') == IPv4Network(3221225985) - or, more generally - IPv4Interface(int(IPv4Interface('192.0.2.1'))) == - IPv4Interface('192.0.2.1') - - Raises: - AddressValueError: If ipaddress isn't a valid IPv4 address. - NetmaskValueError: If the netmask isn't valid for - an IPv4 address. - ValueError: If strict is True and a network address is not - supplied. - - """ - _BaseNetwork.__init__(self, address) - - # Constructing from a packed address or integer - if isinstance(address, (_compat_int_types, bytes)): - self.network_address = IPv4Address(address) - self.netmask, self._prefixlen = self._make_netmask( - self._max_prefixlen) - # fixme: address/network test here. - return - - if isinstance(address, tuple): - if len(address) > 1: - arg = address[1] - else: - # We weren't given an address[1] - arg = self._max_prefixlen - self.network_address = IPv4Address(address[0]) - self.netmask, self._prefixlen = self._make_netmask(arg) - packed = int(self.network_address) - if packed & int(self.netmask) != packed: - if strict: - raise ValueError('%s has host bits set' % self) - else: - self.network_address = IPv4Address(packed & - int(self.netmask)) - return - - # Assume input argument to be string or any object representation - # which converts into a formatted IP prefix string. - addr = _split_optional_netmask(address) - self.network_address = IPv4Address(self._ip_int_from_string(addr[0])) - - if len(addr) == 2: - arg = addr[1] - else: - arg = self._max_prefixlen - self.netmask, self._prefixlen = self._make_netmask(arg) - - if strict: - if (IPv4Address(int(self.network_address) & int(self.netmask)) != - self.network_address): - raise ValueError('%s has host bits set' % self) - self.network_address = IPv4Address(int(self.network_address) & - int(self.netmask)) - - if self._prefixlen == (self._max_prefixlen - 1): - self.hosts = self.__iter__ - - @property - def is_global(self): - """Test if this address is allocated for public networks. - - Returns: - A boolean, True if the address is not reserved per - iana-ipv4-special-registry. - - """ - return (not (self.network_address in IPv4Network('100.64.0.0/10') and - self.broadcast_address in IPv4Network('100.64.0.0/10')) and - not self.is_private) - - -class _IPv4Constants(object): - - _linklocal_network = IPv4Network('169.254.0.0/16') - - _loopback_network = IPv4Network('127.0.0.0/8') - - _multicast_network = IPv4Network('224.0.0.0/4') - - _public_network = IPv4Network('100.64.0.0/10') - - _private_networks = [ - IPv4Network('0.0.0.0/8'), - IPv4Network('10.0.0.0/8'), - IPv4Network('127.0.0.0/8'), - IPv4Network('169.254.0.0/16'), - IPv4Network('172.16.0.0/12'), - IPv4Network('192.0.0.0/29'), - IPv4Network('192.0.0.170/31'), - IPv4Network('192.0.2.0/24'), - IPv4Network('192.168.0.0/16'), - IPv4Network('198.18.0.0/15'), - IPv4Network('198.51.100.0/24'), - IPv4Network('203.0.113.0/24'), - IPv4Network('240.0.0.0/4'), - IPv4Network('255.255.255.255/32'), - ] - - _reserved_network = IPv4Network('240.0.0.0/4') - - _unspecified_address = IPv4Address('0.0.0.0') - - -IPv4Address._constants = _IPv4Constants - - -class _BaseV6(object): - - """Base IPv6 object. - - The following methods are used by IPv6 objects in both single IP - addresses and networks. - - """ - - __slots__ = () - _version = 6 - _ALL_ONES = (2 ** IPV6LENGTH) - 1 - _HEXTET_COUNT = 8 - _HEX_DIGITS = frozenset('0123456789ABCDEFabcdef') - _max_prefixlen = IPV6LENGTH - - # There are only a bunch of valid v6 netmasks, so we cache them all - # when constructed (see _make_netmask()). - _netmask_cache = {} - - @classmethod - def _make_netmask(cls, arg): - """Make a (netmask, prefix_len) tuple from the given argument. - - Argument can be: - - an integer (the prefix length) - - a string representing the prefix length (e.g. "24") - - a string representing the prefix netmask (e.g. "255.255.255.0") - """ - if arg not in cls._netmask_cache: - if isinstance(arg, _compat_int_types): - prefixlen = arg - else: - prefixlen = cls._prefix_from_prefix_string(arg) - netmask = IPv6Address(cls._ip_int_from_prefix(prefixlen)) - cls._netmask_cache[arg] = netmask, prefixlen - return cls._netmask_cache[arg] - - @classmethod - def _ip_int_from_string(cls, ip_str): - """Turn an IPv6 ip_str into an integer. - - Args: - ip_str: A string, the IPv6 ip_str. - - Returns: - An int, the IPv6 address - - Raises: - AddressValueError: if ip_str isn't a valid IPv6 Address. - - """ - if not ip_str: - raise AddressValueError('Address cannot be empty') - - parts = ip_str.split(':') - - # An IPv6 address needs at least 2 colons (3 parts). - _min_parts = 3 - if len(parts) < _min_parts: - msg = "At least %d parts expected in %r" % (_min_parts, ip_str) - raise AddressValueError(msg) - - # If the address has an IPv4-style suffix, convert it to hexadecimal. - if '.' in parts[-1]: - try: - ipv4_int = IPv4Address(parts.pop())._ip - except AddressValueError as exc: - raise AddressValueError("%s in %r" % (exc, ip_str)) - parts.append('%x' % ((ipv4_int >> 16) & 0xFFFF)) - parts.append('%x' % (ipv4_int & 0xFFFF)) - - # An IPv6 address can't have more than 8 colons (9 parts). - # The extra colon comes from using the "::" notation for a single - # leading or trailing zero part. - _max_parts = cls._HEXTET_COUNT + 1 - if len(parts) > _max_parts: - msg = "At most %d colons permitted in %r" % ( - _max_parts - 1, ip_str) - raise AddressValueError(msg) - - # Disregarding the endpoints, find '::' with nothing in between. - # This indicates that a run of zeroes has been skipped. - skip_index = None - for i in _compat_range(1, len(parts) - 1): - if not parts[i]: - if skip_index is not None: - # Can't have more than one '::' - msg = "At most one '::' permitted in %r" % ip_str - raise AddressValueError(msg) - skip_index = i - - # parts_hi is the number of parts to copy from above/before the '::' - # parts_lo is the number of parts to copy from below/after the '::' - if skip_index is not None: - # If we found a '::', then check if it also covers the endpoints. - parts_hi = skip_index - parts_lo = len(parts) - skip_index - 1 - if not parts[0]: - parts_hi -= 1 - if parts_hi: - msg = "Leading ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # ^: requires ^:: - if not parts[-1]: - parts_lo -= 1 - if parts_lo: - msg = "Trailing ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # :$ requires ::$ - parts_skipped = cls._HEXTET_COUNT - (parts_hi + parts_lo) - if parts_skipped < 1: - msg = "Expected at most %d other parts with '::' in %r" - raise AddressValueError(msg % (cls._HEXTET_COUNT - 1, ip_str)) - else: - # Otherwise, allocate the entire address to parts_hi. The - # endpoints could still be empty, but _parse_hextet() will check - # for that. - if len(parts) != cls._HEXTET_COUNT: - msg = "Exactly %d parts expected without '::' in %r" - raise AddressValueError(msg % (cls._HEXTET_COUNT, ip_str)) - if not parts[0]: - msg = "Leading ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # ^: requires ^:: - if not parts[-1]: - msg = "Trailing ':' only permitted as part of '::' in %r" - raise AddressValueError(msg % ip_str) # :$ requires ::$ - parts_hi = len(parts) - parts_lo = 0 - parts_skipped = 0 - - try: - # Now, parse the hextets into a 128-bit integer. - ip_int = 0 - for i in range(parts_hi): - ip_int <<= 16 - ip_int |= cls._parse_hextet(parts[i]) - ip_int <<= 16 * parts_skipped - for i in range(-parts_lo, 0): - ip_int <<= 16 - ip_int |= cls._parse_hextet(parts[i]) - return ip_int - except ValueError as exc: - raise AddressValueError("%s in %r" % (exc, ip_str)) - - @classmethod - def _parse_hextet(cls, hextet_str): - """Convert an IPv6 hextet string into an integer. - - Args: - hextet_str: A string, the number to parse. - - Returns: - The hextet as an integer. - - Raises: - ValueError: if the input isn't strictly a hex number from - [0..FFFF]. - - """ - # Whitelist the characters, since int() allows a lot of bizarre stuff. - if not cls._HEX_DIGITS.issuperset(hextet_str): - raise ValueError("Only hex digits permitted in %r" % hextet_str) - # We do the length check second, since the invalid character error - # is likely to be more informative for the user - if len(hextet_str) > 4: - msg = "At most 4 characters permitted in %r" - raise ValueError(msg % hextet_str) - # Length check means we can skip checking the integer value - return int(hextet_str, 16) - - @classmethod - def _compress_hextets(cls, hextets): - """Compresses a list of hextets. - - Compresses a list of strings, replacing the longest continuous - sequence of "0" in the list with "" and adding empty strings at - the beginning or at the end of the string such that subsequently - calling ":".join(hextets) will produce the compressed version of - the IPv6 address. - - Args: - hextets: A list of strings, the hextets to compress. - - Returns: - A list of strings. - - """ - best_doublecolon_start = -1 - best_doublecolon_len = 0 - doublecolon_start = -1 - doublecolon_len = 0 - for index, hextet in enumerate(hextets): - if hextet == '0': - doublecolon_len += 1 - if doublecolon_start == -1: - # Start of a sequence of zeros. - doublecolon_start = index - if doublecolon_len > best_doublecolon_len: - # This is the longest sequence of zeros so far. - best_doublecolon_len = doublecolon_len - best_doublecolon_start = doublecolon_start - else: - doublecolon_len = 0 - doublecolon_start = -1 - - if best_doublecolon_len > 1: - best_doublecolon_end = (best_doublecolon_start + - best_doublecolon_len) - # For zeros at the end of the address. - if best_doublecolon_end == len(hextets): - hextets += [''] - hextets[best_doublecolon_start:best_doublecolon_end] = [''] - # For zeros at the beginning of the address. - if best_doublecolon_start == 0: - hextets = [''] + hextets - - return hextets - - @classmethod - def _string_from_ip_int(cls, ip_int=None): - """Turns a 128-bit integer into hexadecimal notation. - - Args: - ip_int: An integer, the IP address. - - Returns: - A string, the hexadecimal representation of the address. - - Raises: - ValueError: The address is bigger than 128 bits of all ones. - - """ - if ip_int is None: - ip_int = int(cls._ip) - - if ip_int > cls._ALL_ONES: - raise ValueError('IPv6 address is too large') - - hex_str = '%032x' % ip_int - hextets = ['%x' % int(hex_str[x:x + 4], 16) for x in range(0, 32, 4)] - - hextets = cls._compress_hextets(hextets) - return ':'.join(hextets) - - def _explode_shorthand_ip_string(self): - """Expand a shortened IPv6 address. - - Args: - ip_str: A string, the IPv6 address. - - Returns: - A string, the expanded IPv6 address. - - """ - if isinstance(self, IPv6Network): - ip_str = _compat_str(self.network_address) - elif isinstance(self, IPv6Interface): - ip_str = _compat_str(self.ip) - else: - ip_str = _compat_str(self) - - ip_int = self._ip_int_from_string(ip_str) - hex_str = '%032x' % ip_int - parts = [hex_str[x:x + 4] for x in range(0, 32, 4)] - if isinstance(self, (_BaseNetwork, IPv6Interface)): - return '%s/%d' % (':'.join(parts), self._prefixlen) - return ':'.join(parts) - - def _reverse_pointer(self): - """Return the reverse DNS pointer name for the IPv6 address. - - This implements the method described in RFC3596 2.5. - - """ - reverse_chars = self.exploded[::-1].replace(':', '') - return '.'.join(reverse_chars) + '.ip6.arpa' - - @property - def max_prefixlen(self): - return self._max_prefixlen - - @property - def version(self): - return self._version - - -class IPv6Address(_BaseV6, _BaseAddress): - - """Represent and manipulate single IPv6 Addresses.""" - - __slots__ = ('_ip', '__weakref__') - - def __init__(self, address): - """Instantiate a new IPv6 address object. - - Args: - address: A string or integer representing the IP - - Additionally, an integer can be passed, so - IPv6Address('2001:db8::') == - IPv6Address(42540766411282592856903984951653826560) - or, more generally - IPv6Address(int(IPv6Address('2001:db8::'))) == - IPv6Address('2001:db8::') - - Raises: - AddressValueError: If address isn't a valid IPv6 address. - - """ - # Efficient constructor from integer. - if isinstance(address, _compat_int_types): - self._check_int_address(address) - self._ip = address - return - - # Constructing from a packed address - if isinstance(address, bytes): - self._check_packed_address(address, 16) - bvs = _compat_bytes_to_byte_vals(address) - self._ip = _compat_int_from_byte_vals(bvs, 'big') - return - - # Assume input argument to be string or any object representation - # which converts into a formatted IP string. - addr_str = _compat_str(address) - if '/' in addr_str: - raise AddressValueError("Unexpected '/' in %r" % address) - self._ip = self._ip_int_from_string(addr_str) - - @property - def packed(self): - """The binary representation of this address.""" - return v6_int_to_packed(self._ip) - - @property - def is_multicast(self): - """Test if the address is reserved for multicast use. - - Returns: - A boolean, True if the address is a multicast address. - See RFC 2373 2.7 for details. - - """ - return self in self._constants._multicast_network - - @property - def is_reserved(self): - """Test if the address is otherwise IETF reserved. - - Returns: - A boolean, True if the address is within one of the - reserved IPv6 Network ranges. - - """ - return any(self in x for x in self._constants._reserved_networks) - - @property - def is_link_local(self): - """Test if the address is reserved for link-local. - - Returns: - A boolean, True if the address is reserved per RFC 4291. - - """ - return self in self._constants._linklocal_network - - @property - def is_site_local(self): - """Test if the address is reserved for site-local. - - Note that the site-local address space has been deprecated by RFC 3879. - Use is_private to test if this address is in the space of unique local - addresses as defined by RFC 4193. - - Returns: - A boolean, True if the address is reserved per RFC 3513 2.5.6. - - """ - return self in self._constants._sitelocal_network - - @property - def is_private(self): - """Test if this address is allocated for private networks. - - Returns: - A boolean, True if the address is reserved per - iana-ipv6-special-registry. - - """ - return any(self in net for net in self._constants._private_networks) - - @property - def is_global(self): - """Test if this address is allocated for public networks. - - Returns: - A boolean, true if the address is not reserved per - iana-ipv6-special-registry. - - """ - return not self.is_private - - @property - def is_unspecified(self): - """Test if the address is unspecified. - - Returns: - A boolean, True if this is the unspecified address as defined in - RFC 2373 2.5.2. - - """ - return self._ip == 0 - - @property - def is_loopback(self): - """Test if the address is a loopback address. - - Returns: - A boolean, True if the address is a loopback address as defined in - RFC 2373 2.5.3. - - """ - return self._ip == 1 - - @property - def ipv4_mapped(self): - """Return the IPv4 mapped address. - - Returns: - If the IPv6 address is a v4 mapped address, return the - IPv4 mapped address. Return None otherwise. - - """ - if (self._ip >> 32) != 0xFFFF: - return None - return IPv4Address(self._ip & 0xFFFFFFFF) - - @property - def teredo(self): - """Tuple of embedded teredo IPs. - - Returns: - Tuple of the (server, client) IPs or None if the address - doesn't appear to be a teredo address (doesn't start with - 2001::/32) - - """ - if (self._ip >> 96) != 0x20010000: - return None - return (IPv4Address((self._ip >> 64) & 0xFFFFFFFF), - IPv4Address(~self._ip & 0xFFFFFFFF)) - - @property - def sixtofour(self): - """Return the IPv4 6to4 embedded address. - - Returns: - The IPv4 6to4-embedded address if present or None if the - address doesn't appear to contain a 6to4 embedded address. - - """ - if (self._ip >> 112) != 0x2002: - return None - return IPv4Address((self._ip >> 80) & 0xFFFFFFFF) - - -class IPv6Interface(IPv6Address): - - def __init__(self, address): - if isinstance(address, (bytes, _compat_int_types)): - IPv6Address.__init__(self, address) - self.network = IPv6Network(self._ip) - self._prefixlen = self._max_prefixlen - return - if isinstance(address, tuple): - IPv6Address.__init__(self, address[0]) - if len(address) > 1: - self._prefixlen = int(address[1]) - else: - self._prefixlen = self._max_prefixlen - self.network = IPv6Network(address, strict=False) - self.netmask = self.network.netmask - self.hostmask = self.network.hostmask - return - - addr = _split_optional_netmask(address) - IPv6Address.__init__(self, addr[0]) - self.network = IPv6Network(address, strict=False) - self.netmask = self.network.netmask - self._prefixlen = self.network._prefixlen - self.hostmask = self.network.hostmask - - def __str__(self): - return '%s/%d' % (self._string_from_ip_int(self._ip), - self.network.prefixlen) - - def __eq__(self, other): - address_equal = IPv6Address.__eq__(self, other) - if not address_equal or address_equal is NotImplemented: - return address_equal - try: - return self.network == other.network - except AttributeError: - # An interface with an associated network is NOT the - # same as an unassociated address. That's why the hash - # takes the extra info into account. - return False - - def __lt__(self, other): - address_less = IPv6Address.__lt__(self, other) - if address_less is NotImplemented: - return NotImplemented - try: - return (self.network < other.network or - self.network == other.network and address_less) - except AttributeError: - # We *do* allow addresses and interfaces to be sorted. The - # unassociated address is considered less than all interfaces. - return False - - def __hash__(self): - return self._ip ^ self._prefixlen ^ int(self.network.network_address) - - __reduce__ = _IPAddressBase.__reduce__ - - @property - def ip(self): - return IPv6Address(self._ip) - - @property - def with_prefixlen(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self._prefixlen) - - @property - def with_netmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.netmask) - - @property - def with_hostmask(self): - return '%s/%s' % (self._string_from_ip_int(self._ip), - self.hostmask) - - @property - def is_unspecified(self): - return self._ip == 0 and self.network.is_unspecified - - @property - def is_loopback(self): - return self._ip == 1 and self.network.is_loopback - - -class IPv6Network(_BaseV6, _BaseNetwork): - - """This class represents and manipulates 128-bit IPv6 networks. - - Attributes: [examples for IPv6('2001:db8::1000/124')] - .network_address: IPv6Address('2001:db8::1000') - .hostmask: IPv6Address('::f') - .broadcast_address: IPv6Address('2001:db8::100f') - .netmask: IPv6Address('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0') - .prefixlen: 124 - - """ - - # Class to use when creating address objects - _address_class = IPv6Address - - def __init__(self, address, strict=True): - """Instantiate a new IPv6 Network object. - - Args: - address: A string or integer representing the IPv6 network or the - IP and prefix/netmask. - '2001:db8::/128' - '2001:db8:0000:0000:0000:0000:0000:0000/128' - '2001:db8::' - are all functionally the same in IPv6. That is to say, - failing to provide a subnetmask will create an object with - a mask of /128. - - Additionally, an integer can be passed, so - IPv6Network('2001:db8::') == - IPv6Network(42540766411282592856903984951653826560) - or, more generally - IPv6Network(int(IPv6Network('2001:db8::'))) == - IPv6Network('2001:db8::') - - strict: A boolean. If true, ensure that we have been passed - A true network address, eg, 2001:db8::1000/124 and not an - IP address on a network, eg, 2001:db8::1/124. - - Raises: - AddressValueError: If address isn't a valid IPv6 address. - NetmaskValueError: If the netmask isn't valid for - an IPv6 address. - ValueError: If strict was True and a network address was not - supplied. - - """ - _BaseNetwork.__init__(self, address) - - # Efficient constructor from integer or packed address - if isinstance(address, (bytes, _compat_int_types)): - self.network_address = IPv6Address(address) - self.netmask, self._prefixlen = self._make_netmask( - self._max_prefixlen) - return - - if isinstance(address, tuple): - if len(address) > 1: - arg = address[1] - else: - arg = self._max_prefixlen - self.netmask, self._prefixlen = self._make_netmask(arg) - self.network_address = IPv6Address(address[0]) - packed = int(self.network_address) - if packed & int(self.netmask) != packed: - if strict: - raise ValueError('%s has host bits set' % self) - else: - self.network_address = IPv6Address(packed & - int(self.netmask)) - return - - # Assume input argument to be string or any object representation - # which converts into a formatted IP prefix string. - addr = _split_optional_netmask(address) - - self.network_address = IPv6Address(self._ip_int_from_string(addr[0])) - - if len(addr) == 2: - arg = addr[1] - else: - arg = self._max_prefixlen - self.netmask, self._prefixlen = self._make_netmask(arg) - - if strict: - if (IPv6Address(int(self.network_address) & int(self.netmask)) != - self.network_address): - raise ValueError('%s has host bits set' % self) - self.network_address = IPv6Address(int(self.network_address) & - int(self.netmask)) - - if self._prefixlen == (self._max_prefixlen - 1): - self.hosts = self.__iter__ - - def hosts(self): - """Generate Iterator over usable hosts in a network. - - This is like __iter__ except it doesn't return the - Subnet-Router anycast address. - - """ - network = int(self.network_address) - broadcast = int(self.broadcast_address) - for x in _compat_range(network + 1, broadcast + 1): - yield self._address_class(x) - - @property - def is_site_local(self): - """Test if the address is reserved for site-local. - - Note that the site-local address space has been deprecated by RFC 3879. - Use is_private to test if this address is in the space of unique local - addresses as defined by RFC 4193. - - Returns: - A boolean, True if the address is reserved per RFC 3513 2.5.6. - - """ - return (self.network_address.is_site_local and - self.broadcast_address.is_site_local) - - -class _IPv6Constants(object): - - _linklocal_network = IPv6Network('fe80::/10') - - _multicast_network = IPv6Network('ff00::/8') - - _private_networks = [ - IPv6Network('::1/128'), - IPv6Network('::/128'), - IPv6Network('::ffff:0:0/96'), - IPv6Network('100::/64'), - IPv6Network('2001::/23'), - IPv6Network('2001:2::/48'), - IPv6Network('2001:db8::/32'), - IPv6Network('2001:10::/28'), - IPv6Network('fc00::/7'), - IPv6Network('fe80::/10'), - ] - - _reserved_networks = [ - IPv6Network('::/8'), IPv6Network('100::/8'), - IPv6Network('200::/7'), IPv6Network('400::/6'), - IPv6Network('800::/5'), IPv6Network('1000::/4'), - IPv6Network('4000::/3'), IPv6Network('6000::/3'), - IPv6Network('8000::/3'), IPv6Network('A000::/3'), - IPv6Network('C000::/3'), IPv6Network('E000::/4'), - IPv6Network('F000::/5'), IPv6Network('F800::/6'), - IPv6Network('FE00::/9'), - ] - - _sitelocal_network = IPv6Network('fec0::/10') - - -IPv6Address._constants = _IPv6Constants diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/__init__.py deleted file mode 100644 index a6f44a5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/__init__.py +++ /dev/null @@ -1,347 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -lockfile.py - Platform-independent advisory file locks. - -Requires Python 2.5 unless you apply 2.4.diff -Locking is done on a per-thread basis instead of a per-process basis. - -Usage: - ->>> lock = LockFile('somefile') ->>> try: -... lock.acquire() -... except AlreadyLocked: -... print 'somefile', 'is locked already.' -... except LockFailed: -... print 'somefile', 'can\\'t be locked.' -... else: -... print 'got lock' -got lock ->>> print lock.is_locked() -True ->>> lock.release() - ->>> lock = LockFile('somefile') ->>> print lock.is_locked() -False ->>> with lock: -... print lock.is_locked() -True ->>> print lock.is_locked() -False - ->>> lock = LockFile('somefile') ->>> # It is okay to lock twice from the same thread... ->>> with lock: -... lock.acquire() -... ->>> # Though no counter is kept, so you can't unlock multiple times... ->>> print lock.is_locked() -False - -Exceptions: - - Error - base class for other exceptions - LockError - base class for all locking exceptions - AlreadyLocked - Another thread or process already holds the lock - LockFailed - Lock failed for some other reason - UnlockError - base class for all unlocking exceptions - AlreadyUnlocked - File was not locked. - NotMyLock - File was locked but not by the current thread/process -""" - -from __future__ import absolute_import - -import functools -import os -import socket -import threading -import warnings - -# Work with PEP8 and non-PEP8 versions of threading module. -if not hasattr(threading, "current_thread"): - threading.current_thread = threading.currentThread -if not hasattr(threading.Thread, "get_name"): - threading.Thread.get_name = threading.Thread.getName - -__all__ = ['Error', 'LockError', 'LockTimeout', 'AlreadyLocked', - 'LockFailed', 'UnlockError', 'NotLocked', 'NotMyLock', - 'LinkFileLock', 'MkdirFileLock', 'SQLiteFileLock', - 'LockBase', 'locked'] - - -class Error(Exception): - """ - Base class for other exceptions. - - >>> try: - ... raise Error - ... except Exception: - ... pass - """ - pass - - -class LockError(Error): - """ - Base class for error arising from attempts to acquire the lock. - - >>> try: - ... raise LockError - ... except Error: - ... pass - """ - pass - - -class LockTimeout(LockError): - """Raised when lock creation fails within a user-defined period of time. - - >>> try: - ... raise LockTimeout - ... except LockError: - ... pass - """ - pass - - -class AlreadyLocked(LockError): - """Some other thread/process is locking the file. - - >>> try: - ... raise AlreadyLocked - ... except LockError: - ... pass - """ - pass - - -class LockFailed(LockError): - """Lock file creation failed for some other reason. - - >>> try: - ... raise LockFailed - ... except LockError: - ... pass - """ - pass - - -class UnlockError(Error): - """ - Base class for errors arising from attempts to release the lock. - - >>> try: - ... raise UnlockError - ... except Error: - ... pass - """ - pass - - -class NotLocked(UnlockError): - """Raised when an attempt is made to unlock an unlocked file. - - >>> try: - ... raise NotLocked - ... except UnlockError: - ... pass - """ - pass - - -class NotMyLock(UnlockError): - """Raised when an attempt is made to unlock a file someone else locked. - - >>> try: - ... raise NotMyLock - ... except UnlockError: - ... pass - """ - pass - - -class _SharedBase(object): - def __init__(self, path): - self.path = path - - def acquire(self, timeout=None): - """ - Acquire the lock. - - * If timeout is omitted (or None), wait forever trying to lock the - file. - - * If timeout > 0, try to acquire the lock for that many seconds. If - the lock period expires and the file is still locked, raise - LockTimeout. - - * If timeout <= 0, raise AlreadyLocked immediately if the file is - already locked. - """ - raise NotImplemented("implement in subclass") - - def release(self): - """ - Release the lock. - - If the file is not locked, raise NotLocked. - """ - raise NotImplemented("implement in subclass") - - def __enter__(self): - """ - Context manager support. - """ - self.acquire() - return self - - def __exit__(self, *_exc): - """ - Context manager support. - """ - self.release() - - def __repr__(self): - return "<%s: %r>" % (self.__class__.__name__, self.path) - - -class LockBase(_SharedBase): - """Base class for platform-specific lock classes.""" - def __init__(self, path, threaded=True, timeout=None): - """ - >>> lock = LockBase('somefile') - >>> lock = LockBase('somefile', threaded=False) - """ - super(LockBase, self).__init__(path) - self.lock_file = os.path.abspath(path) + ".lock" - self.hostname = socket.gethostname() - self.pid = os.getpid() - if threaded: - t = threading.current_thread() - # Thread objects in Python 2.4 and earlier do not have ident - # attrs. Worm around that. - ident = getattr(t, "ident", hash(t)) - self.tname = "-%x" % (ident & 0xffffffff) - else: - self.tname = "" - dirname = os.path.dirname(self.lock_file) - - # unique name is mostly about the current process, but must - # also contain the path -- otherwise, two adjacent locked - # files conflict (one file gets locked, creating lock-file and - # unique file, the other one gets locked, creating lock-file - # and overwriting the already existing lock-file, then one - # gets unlocked, deleting both lock-file and unique file, - # finally the last lock errors out upon releasing. - self.unique_name = os.path.join(dirname, - "%s%s.%s%s" % (self.hostname, - self.tname, - self.pid, - hash(self.path))) - self.timeout = timeout - - def is_locked(self): - """ - Tell whether or not the file is locked. - """ - raise NotImplemented("implement in subclass") - - def i_am_locking(self): - """ - Return True if this object is locking the file. - """ - raise NotImplemented("implement in subclass") - - def break_lock(self): - """ - Remove a lock. Useful if a locking thread failed to unlock. - """ - raise NotImplemented("implement in subclass") - - def __repr__(self): - return "<%s: %r -- %r>" % (self.__class__.__name__, self.unique_name, - self.path) - - -def _fl_helper(cls, mod, *args, **kwds): - warnings.warn("Import from %s module instead of lockfile package" % mod, - DeprecationWarning, stacklevel=2) - # This is a bit funky, but it's only for awhile. The way the unit tests - # are constructed this function winds up as an unbound method, so it - # actually takes three args, not two. We want to toss out self. - if not isinstance(args[0], str): - # We are testing, avoid the first arg - args = args[1:] - if len(args) == 1 and not kwds: - kwds["threaded"] = True - return cls(*args, **kwds) - - -def LinkFileLock(*args, **kwds): - """Factory function provided for backwards compatibility. - - Do not use in new code. Instead, import LinkLockFile from the - lockfile.linklockfile module. - """ - from . import linklockfile - return _fl_helper(linklockfile.LinkLockFile, "lockfile.linklockfile", - *args, **kwds) - - -def MkdirFileLock(*args, **kwds): - """Factory function provided for backwards compatibility. - - Do not use in new code. Instead, import MkdirLockFile from the - lockfile.mkdirlockfile module. - """ - from . import mkdirlockfile - return _fl_helper(mkdirlockfile.MkdirLockFile, "lockfile.mkdirlockfile", - *args, **kwds) - - -def SQLiteFileLock(*args, **kwds): - """Factory function provided for backwards compatibility. - - Do not use in new code. Instead, import SQLiteLockFile from the - lockfile.mkdirlockfile module. - """ - from . import sqlitelockfile - return _fl_helper(sqlitelockfile.SQLiteLockFile, "lockfile.sqlitelockfile", - *args, **kwds) - - -def locked(path, timeout=None): - """Decorator which enables locks for decorated function. - - Arguments: - - path: path for lockfile. - - timeout (optional): Timeout for acquiring lock. - - Usage: - @locked('/var/run/myname', timeout=0) - def myname(...): - ... - """ - def decor(func): - @functools.wraps(func) - def wrapper(*args, **kwargs): - lock = FileLock(path, timeout=timeout) - lock.acquire() - try: - return func(*args, **kwargs) - finally: - lock.release() - return wrapper - return decor - - -if hasattr(os, "link"): - from . import linklockfile as _llf - LockFile = _llf.LinkLockFile -else: - from . import mkdirlockfile as _mlf - LockFile = _mlf.MkdirLockFile - -FileLock = LockFile diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/linklockfile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/linklockfile.py deleted file mode 100644 index 2ca9be0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/linklockfile.py +++ /dev/null @@ -1,73 +0,0 @@ -from __future__ import absolute_import - -import time -import os - -from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout, - AlreadyLocked) - - -class LinkLockFile(LockBase): - """Lock access to a file using atomic property of link(2). - - >>> lock = LinkLockFile('somefile') - >>> lock = LinkLockFile('somefile', threaded=False) - """ - - def acquire(self, timeout=None): - try: - open(self.unique_name, "wb").close() - except IOError: - raise LockFailed("failed to create %s" % self.unique_name) - - timeout = timeout if timeout is not None else self.timeout - end_time = time.time() - if timeout is not None and timeout > 0: - end_time += timeout - - while True: - # Try and create a hard link to it. - try: - os.link(self.unique_name, self.lock_file) - except OSError: - # Link creation failed. Maybe we've double-locked? - nlinks = os.stat(self.unique_name).st_nlink - if nlinks == 2: - # The original link plus the one I created == 2. We're - # good to go. - return - else: - # Otherwise the lock creation failed. - if timeout is not None and time.time() > end_time: - os.unlink(self.unique_name) - if timeout > 0: - raise LockTimeout("Timeout waiting to acquire" - " lock for %s" % - self.path) - else: - raise AlreadyLocked("%s is already locked" % - self.path) - time.sleep(timeout is not None and timeout / 10 or 0.1) - else: - # Link creation succeeded. We're good to go. - return - - def release(self): - if not self.is_locked(): - raise NotLocked("%s is not locked" % self.path) - elif not os.path.exists(self.unique_name): - raise NotMyLock("%s is locked, but not by me" % self.path) - os.unlink(self.unique_name) - os.unlink(self.lock_file) - - def is_locked(self): - return os.path.exists(self.lock_file) - - def i_am_locking(self): - return (self.is_locked() and - os.path.exists(self.unique_name) and - os.stat(self.unique_name).st_nlink == 2) - - def break_lock(self): - if os.path.exists(self.lock_file): - os.unlink(self.lock_file) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/mkdirlockfile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/mkdirlockfile.py deleted file mode 100644 index 05a8c96..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/mkdirlockfile.py +++ /dev/null @@ -1,84 +0,0 @@ -from __future__ import absolute_import, division - -import time -import os -import sys -import errno - -from . import (LockBase, LockFailed, NotLocked, NotMyLock, LockTimeout, - AlreadyLocked) - - -class MkdirLockFile(LockBase): - """Lock file by creating a directory.""" - def __init__(self, path, threaded=True, timeout=None): - """ - >>> lock = MkdirLockFile('somefile') - >>> lock = MkdirLockFile('somefile', threaded=False) - """ - LockBase.__init__(self, path, threaded, timeout) - # Lock file itself is a directory. Place the unique file name into - # it. - self.unique_name = os.path.join(self.lock_file, - "%s.%s%s" % (self.hostname, - self.tname, - self.pid)) - - def acquire(self, timeout=None): - timeout = timeout if timeout is not None else self.timeout - end_time = time.time() - if timeout is not None and timeout > 0: - end_time += timeout - - if timeout is None: - wait = 0.1 - else: - wait = max(0, timeout / 10) - - while True: - try: - os.mkdir(self.lock_file) - except OSError: - err = sys.exc_info()[1] - if err.errno == errno.EEXIST: - # Already locked. - if os.path.exists(self.unique_name): - # Already locked by me. - return - if timeout is not None and time.time() > end_time: - if timeout > 0: - raise LockTimeout("Timeout waiting to acquire" - " lock for %s" % - self.path) - else: - # Someone else has the lock. - raise AlreadyLocked("%s is already locked" % - self.path) - time.sleep(wait) - else: - # Couldn't create the lock for some other reason - raise LockFailed("failed to create %s" % self.lock_file) - else: - open(self.unique_name, "wb").close() - return - - def release(self): - if not self.is_locked(): - raise NotLocked("%s is not locked" % self.path) - elif not os.path.exists(self.unique_name): - raise NotMyLock("%s is locked, but not by me" % self.path) - os.unlink(self.unique_name) - os.rmdir(self.lock_file) - - def is_locked(self): - return os.path.exists(self.lock_file) - - def i_am_locking(self): - return (self.is_locked() and - os.path.exists(self.unique_name)) - - def break_lock(self): - if os.path.exists(self.lock_file): - for name in os.listdir(self.lock_file): - os.unlink(os.path.join(self.lock_file, name)) - os.rmdir(self.lock_file) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/pidlockfile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/pidlockfile.py deleted file mode 100644 index 069e85b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/pidlockfile.py +++ /dev/null @@ -1,190 +0,0 @@ -# -*- coding: utf-8 -*- - -# pidlockfile.py -# -# Copyright © 2008–2009 Ben Finney <ben+python@benfinney.id.au> -# -# This is free software: you may copy, modify, and/or distribute this work -# under the terms of the Python Software Foundation License, version 2 or -# later as published by the Python Software Foundation. -# No warranty expressed or implied. See the file LICENSE.PSF-2 for details. - -""" Lockfile behaviour implemented via Unix PID files. - """ - -from __future__ import absolute_import - -import errno -import os -import time - -from . import (LockBase, AlreadyLocked, LockFailed, NotLocked, NotMyLock, - LockTimeout) - - -class PIDLockFile(LockBase): - """ Lockfile implemented as a Unix PID file. - - The lock file is a normal file named by the attribute `path`. - A lock's PID file contains a single line of text, containing - the process ID (PID) of the process that acquired the lock. - - >>> lock = PIDLockFile('somefile') - >>> lock = PIDLockFile('somefile') - """ - - def __init__(self, path, threaded=False, timeout=None): - # pid lockfiles don't support threaded operation, so always force - # False as the threaded arg. - LockBase.__init__(self, path, False, timeout) - self.unique_name = self.path - - def read_pid(self): - """ Get the PID from the lock file. - """ - return read_pid_from_pidfile(self.path) - - def is_locked(self): - """ Test if the lock is currently held. - - The lock is held if the PID file for this lock exists. - - """ - return os.path.exists(self.path) - - def i_am_locking(self): - """ Test if the lock is held by the current process. - - Returns ``True`` if the current process ID matches the - number stored in the PID file. - """ - return self.is_locked() and os.getpid() == self.read_pid() - - def acquire(self, timeout=None): - """ Acquire the lock. - - Creates the PID file for this lock, or raises an error if - the lock could not be acquired. - """ - - timeout = timeout if timeout is not None else self.timeout - end_time = time.time() - if timeout is not None and timeout > 0: - end_time += timeout - - while True: - try: - write_pid_to_pidfile(self.path) - except OSError as exc: - if exc.errno == errno.EEXIST: - # The lock creation failed. Maybe sleep a bit. - if time.time() > end_time: - if timeout is not None and timeout > 0: - raise LockTimeout("Timeout waiting to acquire" - " lock for %s" % - self.path) - else: - raise AlreadyLocked("%s is already locked" % - self.path) - time.sleep(timeout is not None and timeout / 10 or 0.1) - else: - raise LockFailed("failed to create %s" % self.path) - else: - return - - def release(self): - """ Release the lock. - - Removes the PID file to release the lock, or raises an - error if the current process does not hold the lock. - - """ - if not self.is_locked(): - raise NotLocked("%s is not locked" % self.path) - if not self.i_am_locking(): - raise NotMyLock("%s is locked, but not by me" % self.path) - remove_existing_pidfile(self.path) - - def break_lock(self): - """ Break an existing lock. - - Removes the PID file if it already exists, otherwise does - nothing. - - """ - remove_existing_pidfile(self.path) - - -def read_pid_from_pidfile(pidfile_path): - """ Read the PID recorded in the named PID file. - - Read and return the numeric PID recorded as text in the named - PID file. If the PID file cannot be read, or if the content is - not a valid PID, return ``None``. - - """ - pid = None - try: - pidfile = open(pidfile_path, 'r') - except IOError: - pass - else: - # According to the FHS 2.3 section on PID files in /var/run: - # - # The file must consist of the process identifier in - # ASCII-encoded decimal, followed by a newline character. - # - # Programs that read PID files should be somewhat flexible - # in what they accept; i.e., they should ignore extra - # whitespace, leading zeroes, absence of the trailing - # newline, or additional lines in the PID file. - - line = pidfile.readline().strip() - try: - pid = int(line) - except ValueError: - pass - pidfile.close() - - return pid - - -def write_pid_to_pidfile(pidfile_path): - """ Write the PID in the named PID file. - - Get the numeric process ID (“PID”) of the current process - and write it to the named file as a line of text. - - """ - open_flags = (os.O_CREAT | os.O_EXCL | os.O_WRONLY) - open_mode = 0o644 - pidfile_fd = os.open(pidfile_path, open_flags, open_mode) - pidfile = os.fdopen(pidfile_fd, 'w') - - # According to the FHS 2.3 section on PID files in /var/run: - # - # The file must consist of the process identifier in - # ASCII-encoded decimal, followed by a newline character. For - # example, if crond was process number 25, /var/run/crond.pid - # would contain three characters: two, five, and newline. - - pid = os.getpid() - pidfile.write("%s\n" % pid) - pidfile.close() - - -def remove_existing_pidfile(pidfile_path): - """ Remove the named PID file if it exists. - - Removing a PID file that doesn't already exist puts us in the - desired state, so we ignore the condition if the file does not - exist. - - """ - try: - os.remove(pidfile_path) - except OSError as exc: - if exc.errno == errno.ENOENT: - pass - else: - raise diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/sqlitelockfile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/sqlitelockfile.py deleted file mode 100644 index f997e24..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/sqlitelockfile.py +++ /dev/null @@ -1,156 +0,0 @@ -from __future__ import absolute_import, division - -import time -import os - -try: - unicode -except NameError: - unicode = str - -from . import LockBase, NotLocked, NotMyLock, LockTimeout, AlreadyLocked - - -class SQLiteLockFile(LockBase): - "Demonstrate SQL-based locking." - - testdb = None - - def __init__(self, path, threaded=True, timeout=None): - """ - >>> lock = SQLiteLockFile('somefile') - >>> lock = SQLiteLockFile('somefile', threaded=False) - """ - LockBase.__init__(self, path, threaded, timeout) - self.lock_file = unicode(self.lock_file) - self.unique_name = unicode(self.unique_name) - - if SQLiteLockFile.testdb is None: - import tempfile - _fd, testdb = tempfile.mkstemp() - os.close(_fd) - os.unlink(testdb) - del _fd, tempfile - SQLiteLockFile.testdb = testdb - - import sqlite3 - self.connection = sqlite3.connect(SQLiteLockFile.testdb) - - c = self.connection.cursor() - try: - c.execute("create table locks" - "(" - " lock_file varchar(32)," - " unique_name varchar(32)" - ")") - except sqlite3.OperationalError: - pass - else: - self.connection.commit() - import atexit - atexit.register(os.unlink, SQLiteLockFile.testdb) - - def acquire(self, timeout=None): - timeout = timeout if timeout is not None else self.timeout - end_time = time.time() - if timeout is not None and timeout > 0: - end_time += timeout - - if timeout is None: - wait = 0.1 - elif timeout <= 0: - wait = 0 - else: - wait = timeout / 10 - - cursor = self.connection.cursor() - - while True: - if not self.is_locked(): - # Not locked. Try to lock it. - cursor.execute("insert into locks" - " (lock_file, unique_name)" - " values" - " (?, ?)", - (self.lock_file, self.unique_name)) - self.connection.commit() - - # Check to see if we are the only lock holder. - cursor.execute("select * from locks" - " where unique_name = ?", - (self.unique_name,)) - rows = cursor.fetchall() - if len(rows) > 1: - # Nope. Someone else got there. Remove our lock. - cursor.execute("delete from locks" - " where unique_name = ?", - (self.unique_name,)) - self.connection.commit() - else: - # Yup. We're done, so go home. - return - else: - # Check to see if we are the only lock holder. - cursor.execute("select * from locks" - " where unique_name = ?", - (self.unique_name,)) - rows = cursor.fetchall() - if len(rows) == 1: - # We're the locker, so go home. - return - - # Maybe we should wait a bit longer. - if timeout is not None and time.time() > end_time: - if timeout > 0: - # No more waiting. - raise LockTimeout("Timeout waiting to acquire" - " lock for %s" % - self.path) - else: - # Someone else has the lock and we are impatient.. - raise AlreadyLocked("%s is already locked" % self.path) - - # Well, okay. We'll give it a bit longer. - time.sleep(wait) - - def release(self): - if not self.is_locked(): - raise NotLocked("%s is not locked" % self.path) - if not self.i_am_locking(): - raise NotMyLock("%s is locked, but not by me (by %s)" % - (self.unique_name, self._who_is_locking())) - cursor = self.connection.cursor() - cursor.execute("delete from locks" - " where unique_name = ?", - (self.unique_name,)) - self.connection.commit() - - def _who_is_locking(self): - cursor = self.connection.cursor() - cursor.execute("select unique_name from locks" - " where lock_file = ?", - (self.lock_file,)) - return cursor.fetchone()[0] - - def is_locked(self): - cursor = self.connection.cursor() - cursor.execute("select * from locks" - " where lock_file = ?", - (self.lock_file,)) - rows = cursor.fetchall() - return not not rows - - def i_am_locking(self): - cursor = self.connection.cursor() - cursor.execute("select * from locks" - " where lock_file = ?" - " and unique_name = ?", - (self.lock_file, self.unique_name)) - return not not cursor.fetchall() - - def break_lock(self): - cursor = self.connection.cursor() - cursor.execute("delete from locks" - " where lock_file = ?", - (self.lock_file,)) - self.connection.commit() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/symlinklockfile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/symlinklockfile.py deleted file mode 100644 index 23b41f5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/lockfile/symlinklockfile.py +++ /dev/null @@ -1,70 +0,0 @@ -from __future__ import absolute_import - -import os -import time - -from . import (LockBase, NotLocked, NotMyLock, LockTimeout, - AlreadyLocked) - - -class SymlinkLockFile(LockBase): - """Lock access to a file using symlink(2).""" - - def __init__(self, path, threaded=True, timeout=None): - # super(SymlinkLockFile).__init(...) - LockBase.__init__(self, path, threaded, timeout) - # split it back! - self.unique_name = os.path.split(self.unique_name)[1] - - def acquire(self, timeout=None): - # Hopefully unnecessary for symlink. - # try: - # open(self.unique_name, "wb").close() - # except IOError: - # raise LockFailed("failed to create %s" % self.unique_name) - timeout = timeout if timeout is not None else self.timeout - end_time = time.time() - if timeout is not None and timeout > 0: - end_time += timeout - - while True: - # Try and create a symbolic link to it. - try: - os.symlink(self.unique_name, self.lock_file) - except OSError: - # Link creation failed. Maybe we've double-locked? - if self.i_am_locking(): - # Linked to out unique name. Proceed. - return - else: - # Otherwise the lock creation failed. - if timeout is not None and time.time() > end_time: - if timeout > 0: - raise LockTimeout("Timeout waiting to acquire" - " lock for %s" % - self.path) - else: - raise AlreadyLocked("%s is already locked" % - self.path) - time.sleep(timeout / 10 if timeout is not None else 0.1) - else: - # Link creation succeeded. We're good to go. - return - - def release(self): - if not self.is_locked(): - raise NotLocked("%s is not locked" % self.path) - elif not self.i_am_locking(): - raise NotMyLock("%s is locked, but not by me" % self.path) - os.unlink(self.lock_file) - - def is_locked(self): - return os.path.islink(self.lock_file) - - def i_am_locking(self): - return (os.path.islink(self.lock_file) - and os.readlink(self.lock_file) == self.unique_name) - - def break_lock(self): - if os.path.islink(self.lock_file): # exists && link - os.unlink(self.lock_file) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/__init__.py deleted file mode 100644 index 2afca5a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/__init__.py +++ /dev/null @@ -1,66 +0,0 @@ -# coding: utf-8 -from pip._vendor.msgpack._version import version -from pip._vendor.msgpack.exceptions import * - -from collections import namedtuple - - -class ExtType(namedtuple('ExtType', 'code data')): - """ExtType represents ext type in msgpack.""" - def __new__(cls, code, data): - if not isinstance(code, int): - raise TypeError("code must be int") - if not isinstance(data, bytes): - raise TypeError("data must be bytes") - if not 0 <= code <= 127: - raise ValueError("code must be 0~127") - return super(ExtType, cls).__new__(cls, code, data) - - -import os -if os.environ.get('MSGPACK_PUREPYTHON'): - from pip._vendor.msgpack.fallback import Packer, unpackb, Unpacker -else: - try: - from pip._vendor.msgpack._packer import Packer - from pip._vendor.msgpack._unpacker import unpackb, Unpacker - except ImportError: - from pip._vendor.msgpack.fallback import Packer, unpackb, Unpacker - - -def pack(o, stream, **kwargs): - """ - Pack object `o` and write it to `stream` - - See :class:`Packer` for options. - """ - packer = Packer(**kwargs) - stream.write(packer.pack(o)) - - -def packb(o, **kwargs): - """ - Pack object `o` and return packed bytes - - See :class:`Packer` for options. - """ - return Packer(**kwargs).pack(o) - - -def unpack(stream, **kwargs): - """ - Unpack an object from `stream`. - - Raises `ExtraData` when `stream` contains extra bytes. - See :class:`Unpacker` for options. - """ - data = stream.read() - return unpackb(data, **kwargs) - - -# alias for compatibility to simplejson/marshal/pickle. -load = unpack -loads = unpackb - -dump = pack -dumps = packb diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/_version.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/_version.py deleted file mode 100644 index d28f0de..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/_version.py +++ /dev/null @@ -1 +0,0 @@ -version = (0, 5, 6) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/exceptions.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/exceptions.py deleted file mode 100644 index 9766881..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/exceptions.py +++ /dev/null @@ -1,41 +0,0 @@ -class UnpackException(Exception): - """Deprecated. Use Exception instead to catch all exception during unpacking.""" - - -class BufferFull(UnpackException): - pass - - -class OutOfData(UnpackException): - pass - - -class UnpackValueError(UnpackException, ValueError): - """Deprecated. Use ValueError instead.""" - - -class ExtraData(UnpackValueError): - def __init__(self, unpacked, extra): - self.unpacked = unpacked - self.extra = extra - - def __str__(self): - return "unpack(b) received extra data." - - -class PackException(Exception): - """Deprecated. Use Exception instead to catch all exception during packing.""" - - -class PackValueError(PackException, ValueError): - """PackValueError is raised when type of input data is supported but it's value is unsupported. - - Deprecated. Use ValueError instead. - """ - - -class PackOverflowError(PackValueError, OverflowError): - """PackOverflowError is raised when integer value is out of range of msgpack support [-2**31, 2**32). - - Deprecated. Use ValueError instead. - """ diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/fallback.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/fallback.py deleted file mode 100644 index 9418421..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/msgpack/fallback.py +++ /dev/null @@ -1,977 +0,0 @@ -"""Fallback pure Python implementation of msgpack""" - -import sys -import struct -import warnings - -if sys.version_info[0] == 3: - PY3 = True - int_types = int - Unicode = str - xrange = range - def dict_iteritems(d): - return d.items() -else: - PY3 = False - int_types = (int, long) - Unicode = unicode - def dict_iteritems(d): - return d.iteritems() - - -if hasattr(sys, 'pypy_version_info'): - # cStringIO is slow on PyPy, StringIO is faster. However: PyPy's own - # StringBuilder is fastest. - from __pypy__ import newlist_hint - try: - from __pypy__.builders import BytesBuilder as StringBuilder - except ImportError: - from __pypy__.builders import StringBuilder - USING_STRINGBUILDER = True - class StringIO(object): - def __init__(self, s=b''): - if s: - self.builder = StringBuilder(len(s)) - self.builder.append(s) - else: - self.builder = StringBuilder() - def write(self, s): - if isinstance(s, memoryview): - s = s.tobytes() - elif isinstance(s, bytearray): - s = bytes(s) - self.builder.append(s) - def getvalue(self): - return self.builder.build() -else: - USING_STRINGBUILDER = False - from io import BytesIO as StringIO - newlist_hint = lambda size: [] - - -from pip._vendor.msgpack.exceptions import ( - BufferFull, - OutOfData, - UnpackValueError, - PackValueError, - PackOverflowError, - ExtraData) - -from pip._vendor.msgpack import ExtType - - -EX_SKIP = 0 -EX_CONSTRUCT = 1 -EX_READ_ARRAY_HEADER = 2 -EX_READ_MAP_HEADER = 3 - -TYPE_IMMEDIATE = 0 -TYPE_ARRAY = 1 -TYPE_MAP = 2 -TYPE_RAW = 3 -TYPE_BIN = 4 -TYPE_EXT = 5 - -DEFAULT_RECURSE_LIMIT = 511 - - -def _check_type_strict(obj, t, type=type, tuple=tuple): - if type(t) is tuple: - return type(obj) in t - else: - return type(obj) is t - - -def _get_data_from_buffer(obj): - try: - view = memoryview(obj) - except TypeError: - # try to use legacy buffer protocol if 2.7, otherwise re-raise - if not PY3: - view = memoryview(buffer(obj)) - warnings.warn("using old buffer interface to unpack %s; " - "this leads to unpacking errors if slicing is used and " - "will be removed in a future version" % type(obj), - RuntimeWarning) - else: - raise - if view.itemsize != 1: - raise ValueError("cannot unpack from multi-byte object") - return view - - -def unpack(stream, **kwargs): - warnings.warn( - "Direct calling implementation's unpack() is deprecated, Use msgpack.unpack() or unpackb() instead.", - PendingDeprecationWarning) - data = stream.read() - return unpackb(data, **kwargs) - - -def unpackb(packed, **kwargs): - """ - Unpack an object from `packed`. - - Raises `ExtraData` when `packed` contains extra bytes. - See :class:`Unpacker` for options. - """ - unpacker = Unpacker(None, **kwargs) - unpacker.feed(packed) - try: - ret = unpacker._unpack() - except OutOfData: - raise UnpackValueError("Data is not enough.") - if unpacker._got_extradata(): - raise ExtraData(ret, unpacker._get_extradata()) - return ret - - -class Unpacker(object): - """Streaming unpacker. - - arguments: - - :param file_like: - File-like object having `.read(n)` method. - If specified, unpacker reads serialized data from it and :meth:`feed()` is not usable. - - :param int read_size: - Used as `file_like.read(read_size)`. (default: `min(16*1024, max_buffer_size)`) - - :param bool use_list: - If true, unpack msgpack array to Python list. - Otherwise, unpack to Python tuple. (default: True) - - :param bool raw: - If true, unpack msgpack raw to Python bytes (default). - Otherwise, unpack to Python str (or unicode on Python 2) by decoding - with UTF-8 encoding (recommended). - Currently, the default is true, but it will be changed to false in - near future. So you must specify it explicitly for keeping backward - compatibility. - - *encoding* option which is deprecated overrides this option. - - :param callable object_hook: - When specified, it should be callable. - Unpacker calls it with a dict argument after unpacking msgpack map. - (See also simplejson) - - :param callable object_pairs_hook: - When specified, it should be callable. - Unpacker calls it with a list of key-value pairs after unpacking msgpack map. - (See also simplejson) - - :param str encoding: - Encoding used for decoding msgpack raw. - If it is None (default), msgpack raw is deserialized to Python bytes. - - :param str unicode_errors: - (deprecated) Used for decoding msgpack raw with *encoding*. - (default: `'strict'`) - - :param int max_buffer_size: - Limits size of data waiting unpacked. 0 means system's INT_MAX (default). - Raises `BufferFull` exception when it is insufficient. - You should set this parameter when unpacking data from untrusted source. - - :param int max_str_len: - Limits max length of str. (default: 2**31-1) - - :param int max_bin_len: - Limits max length of bin. (default: 2**31-1) - - :param int max_array_len: - Limits max length of array. (default: 2**31-1) - - :param int max_map_len: - Limits max length of map. (default: 2**31-1) - - - example of streaming deserialize from file-like object:: - - unpacker = Unpacker(file_like, raw=False) - for o in unpacker: - process(o) - - example of streaming deserialize from socket:: - - unpacker = Unpacker(raw=False) - while True: - buf = sock.recv(1024**2) - if not buf: - break - unpacker.feed(buf) - for o in unpacker: - process(o) - """ - - def __init__(self, file_like=None, read_size=0, use_list=True, raw=True, - object_hook=None, object_pairs_hook=None, list_hook=None, - encoding=None, unicode_errors=None, max_buffer_size=0, - ext_hook=ExtType, - max_str_len=2147483647, # 2**32-1 - max_bin_len=2147483647, - max_array_len=2147483647, - max_map_len=2147483647, - max_ext_len=2147483647): - - if encoding is not None: - warnings.warn( - "encoding is deprecated, Use raw=False instead.", - PendingDeprecationWarning) - - if unicode_errors is None: - unicode_errors = 'strict' - - if file_like is None: - self._feeding = True - else: - if not callable(file_like.read): - raise TypeError("`file_like.read` must be callable") - self.file_like = file_like - self._feeding = False - - #: array of bytes fed. - self._buffer = bytearray() - # Some very old pythons don't support `struct.unpack_from()` with a - # `bytearray`. So we wrap it in a `buffer()` there. - if sys.version_info < (2, 7, 6): - self._buffer_view = buffer(self._buffer) - else: - self._buffer_view = self._buffer - #: Which position we currently reads - self._buff_i = 0 - - # When Unpacker is used as an iterable, between the calls to next(), - # the buffer is not "consumed" completely, for efficiency sake. - # Instead, it is done sloppily. To make sure we raise BufferFull at - # the correct moments, we have to keep track of how sloppy we were. - # Furthermore, when the buffer is incomplete (that is: in the case - # we raise an OutOfData) we need to rollback the buffer to the correct - # state, which _buf_checkpoint records. - self._buf_checkpoint = 0 - - self._max_buffer_size = max_buffer_size or 2**31-1 - if read_size > self._max_buffer_size: - raise ValueError("read_size must be smaller than max_buffer_size") - self._read_size = read_size or min(self._max_buffer_size, 16*1024) - self._raw = bool(raw) - self._encoding = encoding - self._unicode_errors = unicode_errors - self._use_list = use_list - self._list_hook = list_hook - self._object_hook = object_hook - self._object_pairs_hook = object_pairs_hook - self._ext_hook = ext_hook - self._max_str_len = max_str_len - self._max_bin_len = max_bin_len - self._max_array_len = max_array_len - self._max_map_len = max_map_len - self._max_ext_len = max_ext_len - self._stream_offset = 0 - - if list_hook is not None and not callable(list_hook): - raise TypeError('`list_hook` is not callable') - if object_hook is not None and not callable(object_hook): - raise TypeError('`object_hook` is not callable') - if object_pairs_hook is not None and not callable(object_pairs_hook): - raise TypeError('`object_pairs_hook` is not callable') - if object_hook is not None and object_pairs_hook is not None: - raise TypeError("object_pairs_hook and object_hook are mutually " - "exclusive") - if not callable(ext_hook): - raise TypeError("`ext_hook` is not callable") - - def feed(self, next_bytes): - assert self._feeding - view = _get_data_from_buffer(next_bytes) - if (len(self._buffer) - self._buff_i + len(view) > self._max_buffer_size): - raise BufferFull - - # Strip buffer before checkpoint before reading file. - if self._buf_checkpoint > 0: - del self._buffer[:self._buf_checkpoint] - self._buff_i -= self._buf_checkpoint - self._buf_checkpoint = 0 - - self._buffer += view - - def _consume(self): - """ Gets rid of the used parts of the buffer. """ - self._stream_offset += self._buff_i - self._buf_checkpoint - self._buf_checkpoint = self._buff_i - - def _got_extradata(self): - return self._buff_i < len(self._buffer) - - def _get_extradata(self): - return self._buffer[self._buff_i:] - - def read_bytes(self, n): - return self._read(n) - - def _read(self, n): - # (int) -> bytearray - self._reserve(n) - i = self._buff_i - self._buff_i = i+n - return self._buffer[i:i+n] - - def _reserve(self, n): - remain_bytes = len(self._buffer) - self._buff_i - n - - # Fast path: buffer has n bytes already - if remain_bytes >= 0: - return - - if self._feeding: - self._buff_i = self._buf_checkpoint - raise OutOfData - - # Strip buffer before checkpoint before reading file. - if self._buf_checkpoint > 0: - del self._buffer[:self._buf_checkpoint] - self._buff_i -= self._buf_checkpoint - self._buf_checkpoint = 0 - - # Read from file - remain_bytes = -remain_bytes - while remain_bytes > 0: - to_read_bytes = max(self._read_size, remain_bytes) - read_data = self.file_like.read(to_read_bytes) - if not read_data: - break - assert isinstance(read_data, bytes) - self._buffer += read_data - remain_bytes -= len(read_data) - - if len(self._buffer) < n + self._buff_i: - self._buff_i = 0 # rollback - raise OutOfData - - def _read_header(self, execute=EX_CONSTRUCT): - typ = TYPE_IMMEDIATE - n = 0 - obj = None - self._reserve(1) - b = self._buffer[self._buff_i] - self._buff_i += 1 - if b & 0b10000000 == 0: - obj = b - elif b & 0b11100000 == 0b11100000: - obj = -1 - (b ^ 0xff) - elif b & 0b11100000 == 0b10100000: - n = b & 0b00011111 - typ = TYPE_RAW - if n > self._max_str_len: - raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) - obj = self._read(n) - elif b & 0b11110000 == 0b10010000: - n = b & 0b00001111 - typ = TYPE_ARRAY - if n > self._max_array_len: - raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len) - elif b & 0b11110000 == 0b10000000: - n = b & 0b00001111 - typ = TYPE_MAP - if n > self._max_map_len: - raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len) - elif b == 0xc0: - obj = None - elif b == 0xc2: - obj = False - elif b == 0xc3: - obj = True - elif b == 0xc4: - typ = TYPE_BIN - self._reserve(1) - n = self._buffer[self._buff_i] - self._buff_i += 1 - if n > self._max_bin_len: - raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) - obj = self._read(n) - elif b == 0xc5: - typ = TYPE_BIN - self._reserve(2) - n = struct.unpack_from(">H", self._buffer_view, self._buff_i)[0] - self._buff_i += 2 - if n > self._max_bin_len: - raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) - obj = self._read(n) - elif b == 0xc6: - typ = TYPE_BIN - self._reserve(4) - n = struct.unpack_from(">I", self._buffer_view, self._buff_i)[0] - self._buff_i += 4 - if n > self._max_bin_len: - raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len)) - obj = self._read(n) - elif b == 0xc7: # ext 8 - typ = TYPE_EXT - self._reserve(2) - L, n = struct.unpack_from('Bb', self._buffer_view, self._buff_i) - self._buff_i += 2 - if L > self._max_ext_len: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) - obj = self._read(L) - elif b == 0xc8: # ext 16 - typ = TYPE_EXT - self._reserve(3) - L, n = struct.unpack_from('>Hb', self._buffer_view, self._buff_i) - self._buff_i += 3 - if L > self._max_ext_len: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) - obj = self._read(L) - elif b == 0xc9: # ext 32 - typ = TYPE_EXT - self._reserve(5) - L, n = struct.unpack_from('>Ib', self._buffer_view, self._buff_i) - self._buff_i += 5 - if L > self._max_ext_len: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (L, self._max_ext_len)) - obj = self._read(L) - elif b == 0xca: - self._reserve(4) - obj = struct.unpack_from(">f", self._buffer_view, self._buff_i)[0] - self._buff_i += 4 - elif b == 0xcb: - self._reserve(8) - obj = struct.unpack_from(">d", self._buffer_view, self._buff_i)[0] - self._buff_i += 8 - elif b == 0xcc: - self._reserve(1) - obj = self._buffer[self._buff_i] - self._buff_i += 1 - elif b == 0xcd: - self._reserve(2) - obj = struct.unpack_from(">H", self._buffer_view, self._buff_i)[0] - self._buff_i += 2 - elif b == 0xce: - self._reserve(4) - obj = struct.unpack_from(">I", self._buffer_view, self._buff_i)[0] - self._buff_i += 4 - elif b == 0xcf: - self._reserve(8) - obj = struct.unpack_from(">Q", self._buffer_view, self._buff_i)[0] - self._buff_i += 8 - elif b == 0xd0: - self._reserve(1) - obj = struct.unpack_from("b", self._buffer_view, self._buff_i)[0] - self._buff_i += 1 - elif b == 0xd1: - self._reserve(2) - obj = struct.unpack_from(">h", self._buffer_view, self._buff_i)[0] - self._buff_i += 2 - elif b == 0xd2: - self._reserve(4) - obj = struct.unpack_from(">i", self._buffer_view, self._buff_i)[0] - self._buff_i += 4 - elif b == 0xd3: - self._reserve(8) - obj = struct.unpack_from(">q", self._buffer_view, self._buff_i)[0] - self._buff_i += 8 - elif b == 0xd4: # fixext 1 - typ = TYPE_EXT - if self._max_ext_len < 1: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (1, self._max_ext_len)) - self._reserve(2) - n, obj = struct.unpack_from("b1s", self._buffer_view, self._buff_i) - self._buff_i += 2 - elif b == 0xd5: # fixext 2 - typ = TYPE_EXT - if self._max_ext_len < 2: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (2, self._max_ext_len)) - self._reserve(3) - n, obj = struct.unpack_from("b2s", self._buffer_view, self._buff_i) - self._buff_i += 3 - elif b == 0xd6: # fixext 4 - typ = TYPE_EXT - if self._max_ext_len < 4: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (4, self._max_ext_len)) - self._reserve(5) - n, obj = struct.unpack_from("b4s", self._buffer_view, self._buff_i) - self._buff_i += 5 - elif b == 0xd7: # fixext 8 - typ = TYPE_EXT - if self._max_ext_len < 8: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (8, self._max_ext_len)) - self._reserve(9) - n, obj = struct.unpack_from("b8s", self._buffer_view, self._buff_i) - self._buff_i += 9 - elif b == 0xd8: # fixext 16 - typ = TYPE_EXT - if self._max_ext_len < 16: - raise UnpackValueError("%s exceeds max_ext_len(%s)" % (16, self._max_ext_len)) - self._reserve(17) - n, obj = struct.unpack_from("b16s", self._buffer_view, self._buff_i) - self._buff_i += 17 - elif b == 0xd9: - typ = TYPE_RAW - self._reserve(1) - n = self._buffer[self._buff_i] - self._buff_i += 1 - if n > self._max_str_len: - raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) - obj = self._read(n) - elif b == 0xda: - typ = TYPE_RAW - self._reserve(2) - n, = struct.unpack_from(">H", self._buffer_view, self._buff_i) - self._buff_i += 2 - if n > self._max_str_len: - raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) - obj = self._read(n) - elif b == 0xdb: - typ = TYPE_RAW - self._reserve(4) - n, = struct.unpack_from(">I", self._buffer_view, self._buff_i) - self._buff_i += 4 - if n > self._max_str_len: - raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len) - obj = self._read(n) - elif b == 0xdc: - typ = TYPE_ARRAY - self._reserve(2) - n, = struct.unpack_from(">H", self._buffer_view, self._buff_i) - self._buff_i += 2 - if n > self._max_array_len: - raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len) - elif b == 0xdd: - typ = TYPE_ARRAY - self._reserve(4) - n, = struct.unpack_from(">I", self._buffer_view, self._buff_i) - self._buff_i += 4 - if n > self._max_array_len: - raise UnpackValueError("%s exceeds max_array_len(%s)", n, self._max_array_len) - elif b == 0xde: - self._reserve(2) - n, = struct.unpack_from(">H", self._buffer_view, self._buff_i) - self._buff_i += 2 - if n > self._max_map_len: - raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len) - typ = TYPE_MAP - elif b == 0xdf: - self._reserve(4) - n, = struct.unpack_from(">I", self._buffer_view, self._buff_i) - self._buff_i += 4 - if n > self._max_map_len: - raise UnpackValueError("%s exceeds max_map_len(%s)", n, self._max_map_len) - typ = TYPE_MAP - else: - raise UnpackValueError("Unknown header: 0x%x" % b) - return typ, n, obj - - def _unpack(self, execute=EX_CONSTRUCT): - typ, n, obj = self._read_header(execute) - - if execute == EX_READ_ARRAY_HEADER: - if typ != TYPE_ARRAY: - raise UnpackValueError("Expected array") - return n - if execute == EX_READ_MAP_HEADER: - if typ != TYPE_MAP: - raise UnpackValueError("Expected map") - return n - # TODO should we eliminate the recursion? - if typ == TYPE_ARRAY: - if execute == EX_SKIP: - for i in xrange(n): - # TODO check whether we need to call `list_hook` - self._unpack(EX_SKIP) - return - ret = newlist_hint(n) - for i in xrange(n): - ret.append(self._unpack(EX_CONSTRUCT)) - if self._list_hook is not None: - ret = self._list_hook(ret) - # TODO is the interaction between `list_hook` and `use_list` ok? - return ret if self._use_list else tuple(ret) - if typ == TYPE_MAP: - if execute == EX_SKIP: - for i in xrange(n): - # TODO check whether we need to call hooks - self._unpack(EX_SKIP) - self._unpack(EX_SKIP) - return - if self._object_pairs_hook is not None: - ret = self._object_pairs_hook( - (self._unpack(EX_CONSTRUCT), - self._unpack(EX_CONSTRUCT)) - for _ in xrange(n)) - else: - ret = {} - for _ in xrange(n): - key = self._unpack(EX_CONSTRUCT) - ret[key] = self._unpack(EX_CONSTRUCT) - if self._object_hook is not None: - ret = self._object_hook(ret) - return ret - if execute == EX_SKIP: - return - if typ == TYPE_RAW: - if self._encoding is not None: - obj = obj.decode(self._encoding, self._unicode_errors) - elif self._raw: - obj = bytes(obj) - else: - obj = obj.decode('utf_8') - return obj - if typ == TYPE_EXT: - return self._ext_hook(n, bytes(obj)) - if typ == TYPE_BIN: - return bytes(obj) - assert typ == TYPE_IMMEDIATE - return obj - - def __iter__(self): - return self - - def __next__(self): - try: - ret = self._unpack(EX_CONSTRUCT) - self._consume() - return ret - except OutOfData: - self._consume() - raise StopIteration - - next = __next__ - - def skip(self, write_bytes=None): - self._unpack(EX_SKIP) - if write_bytes is not None: - warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) - write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) - self._consume() - - def unpack(self, write_bytes=None): - ret = self._unpack(EX_CONSTRUCT) - if write_bytes is not None: - warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) - write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) - self._consume() - return ret - - def read_array_header(self, write_bytes=None): - ret = self._unpack(EX_READ_ARRAY_HEADER) - if write_bytes is not None: - warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) - write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) - self._consume() - return ret - - def read_map_header(self, write_bytes=None): - ret = self._unpack(EX_READ_MAP_HEADER) - if write_bytes is not None: - warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning) - write_bytes(self._buffer[self._buf_checkpoint:self._buff_i]) - self._consume() - return ret - - def tell(self): - return self._stream_offset - - -class Packer(object): - """ - MessagePack Packer - - usage: - - packer = Packer() - astream.write(packer.pack(a)) - astream.write(packer.pack(b)) - - Packer's constructor has some keyword arguments: - - :param callable default: - Convert user type to builtin type that Packer supports. - See also simplejson's document. - - :param bool use_single_float: - Use single precision float type for float. (default: False) - - :param bool autoreset: - Reset buffer after each pack and return its content as `bytes`. (default: True). - If set this to false, use `bytes()` to get content and `.reset()` to clear buffer. - - :param bool use_bin_type: - Use bin type introduced in msgpack spec 2.0 for bytes. - It also enables str8 type for unicode. - - :param bool strict_types: - If set to true, types will be checked to be exact. Derived classes - from serializeable types will not be serialized and will be - treated as unsupported type and forwarded to default. - Additionally tuples will not be serialized as lists. - This is useful when trying to implement accurate serialization - for python types. - - :param str encoding: - (deprecated) Convert unicode to bytes with this encoding. (default: 'utf-8') - - :param str unicode_errors: - Error handler for encoding unicode. (default: 'strict') - """ - def __init__(self, default=None, encoding=None, unicode_errors=None, - use_single_float=False, autoreset=True, use_bin_type=False, - strict_types=False): - if encoding is None: - encoding = 'utf_8' - else: - warnings.warn( - "encoding is deprecated, Use raw=False instead.", - PendingDeprecationWarning) - - if unicode_errors is None: - unicode_errors = 'strict' - - self._strict_types = strict_types - self._use_float = use_single_float - self._autoreset = autoreset - self._use_bin_type = use_bin_type - self._encoding = encoding - self._unicode_errors = unicode_errors - self._buffer = StringIO() - if default is not None: - if not callable(default): - raise TypeError("default must be callable") - self._default = default - - def _pack(self, obj, nest_limit=DEFAULT_RECURSE_LIMIT, - check=isinstance, check_type_strict=_check_type_strict): - default_used = False - if self._strict_types: - check = check_type_strict - list_types = list - else: - list_types = (list, tuple) - while True: - if nest_limit < 0: - raise PackValueError("recursion limit exceeded") - if obj is None: - return self._buffer.write(b"\xc0") - if check(obj, bool): - if obj: - return self._buffer.write(b"\xc3") - return self._buffer.write(b"\xc2") - if check(obj, int_types): - if 0 <= obj < 0x80: - return self._buffer.write(struct.pack("B", obj)) - if -0x20 <= obj < 0: - return self._buffer.write(struct.pack("b", obj)) - if 0x80 <= obj <= 0xff: - return self._buffer.write(struct.pack("BB", 0xcc, obj)) - if -0x80 <= obj < 0: - return self._buffer.write(struct.pack(">Bb", 0xd0, obj)) - if 0xff < obj <= 0xffff: - return self._buffer.write(struct.pack(">BH", 0xcd, obj)) - if -0x8000 <= obj < -0x80: - return self._buffer.write(struct.pack(">Bh", 0xd1, obj)) - if 0xffff < obj <= 0xffffffff: - return self._buffer.write(struct.pack(">BI", 0xce, obj)) - if -0x80000000 <= obj < -0x8000: - return self._buffer.write(struct.pack(">Bi", 0xd2, obj)) - if 0xffffffff < obj <= 0xffffffffffffffff: - return self._buffer.write(struct.pack(">BQ", 0xcf, obj)) - if -0x8000000000000000 <= obj < -0x80000000: - return self._buffer.write(struct.pack(">Bq", 0xd3, obj)) - if not default_used and self._default is not None: - obj = self._default(obj) - default_used = True - continue - raise PackOverflowError("Integer value out of range") - if check(obj, (bytes, bytearray)): - n = len(obj) - if n >= 2**32: - raise PackValueError("%s is too large" % type(obj).__name__) - self._pack_bin_header(n) - return self._buffer.write(obj) - if check(obj, Unicode): - if self._encoding is None: - raise TypeError( - "Can't encode unicode string: " - "no encoding is specified") - obj = obj.encode(self._encoding, self._unicode_errors) - n = len(obj) - if n >= 2**32: - raise PackValueError("String is too large") - self._pack_raw_header(n) - return self._buffer.write(obj) - if check(obj, memoryview): - n = len(obj) * obj.itemsize - if n >= 2**32: - raise PackValueError("Memoryview is too large") - self._pack_bin_header(n) - return self._buffer.write(obj) - if check(obj, float): - if self._use_float: - return self._buffer.write(struct.pack(">Bf", 0xca, obj)) - return self._buffer.write(struct.pack(">Bd", 0xcb, obj)) - if check(obj, ExtType): - code = obj.code - data = obj.data - assert isinstance(code, int) - assert isinstance(data, bytes) - L = len(data) - if L == 1: - self._buffer.write(b'\xd4') - elif L == 2: - self._buffer.write(b'\xd5') - elif L == 4: - self._buffer.write(b'\xd6') - elif L == 8: - self._buffer.write(b'\xd7') - elif L == 16: - self._buffer.write(b'\xd8') - elif L <= 0xff: - self._buffer.write(struct.pack(">BB", 0xc7, L)) - elif L <= 0xffff: - self._buffer.write(struct.pack(">BH", 0xc8, L)) - else: - self._buffer.write(struct.pack(">BI", 0xc9, L)) - self._buffer.write(struct.pack("b", code)) - self._buffer.write(data) - return - if check(obj, list_types): - n = len(obj) - self._pack_array_header(n) - for i in xrange(n): - self._pack(obj[i], nest_limit - 1) - return - if check(obj, dict): - return self._pack_map_pairs(len(obj), dict_iteritems(obj), - nest_limit - 1) - if not default_used and self._default is not None: - obj = self._default(obj) - default_used = 1 - continue - raise TypeError("Cannot serialize %r" % (obj, )) - - def pack(self, obj): - try: - self._pack(obj) - except: - self._buffer = StringIO() # force reset - raise - ret = self._buffer.getvalue() - if self._autoreset: - self._buffer = StringIO() - elif USING_STRINGBUILDER: - self._buffer = StringIO(ret) - return ret - - def pack_map_pairs(self, pairs): - self._pack_map_pairs(len(pairs), pairs) - ret = self._buffer.getvalue() - if self._autoreset: - self._buffer = StringIO() - elif USING_STRINGBUILDER: - self._buffer = StringIO(ret) - return ret - - def pack_array_header(self, n): - if n >= 2**32: - raise PackValueError - self._pack_array_header(n) - ret = self._buffer.getvalue() - if self._autoreset: - self._buffer = StringIO() - elif USING_STRINGBUILDER: - self._buffer = StringIO(ret) - return ret - - def pack_map_header(self, n): - if n >= 2**32: - raise PackValueError - self._pack_map_header(n) - ret = self._buffer.getvalue() - if self._autoreset: - self._buffer = StringIO() - elif USING_STRINGBUILDER: - self._buffer = StringIO(ret) - return ret - - def pack_ext_type(self, typecode, data): - if not isinstance(typecode, int): - raise TypeError("typecode must have int type.") - if not 0 <= typecode <= 127: - raise ValueError("typecode should be 0-127") - if not isinstance(data, bytes): - raise TypeError("data must have bytes type") - L = len(data) - if L > 0xffffffff: - raise PackValueError("Too large data") - if L == 1: - self._buffer.write(b'\xd4') - elif L == 2: - self._buffer.write(b'\xd5') - elif L == 4: - self._buffer.write(b'\xd6') - elif L == 8: - self._buffer.write(b'\xd7') - elif L == 16: - self._buffer.write(b'\xd8') - elif L <= 0xff: - self._buffer.write(b'\xc7' + struct.pack('B', L)) - elif L <= 0xffff: - self._buffer.write(b'\xc8' + struct.pack('>H', L)) - else: - self._buffer.write(b'\xc9' + struct.pack('>I', L)) - self._buffer.write(struct.pack('B', typecode)) - self._buffer.write(data) - - def _pack_array_header(self, n): - if n <= 0x0f: - return self._buffer.write(struct.pack('B', 0x90 + n)) - if n <= 0xffff: - return self._buffer.write(struct.pack(">BH", 0xdc, n)) - if n <= 0xffffffff: - return self._buffer.write(struct.pack(">BI", 0xdd, n)) - raise PackValueError("Array is too large") - - def _pack_map_header(self, n): - if n <= 0x0f: - return self._buffer.write(struct.pack('B', 0x80 + n)) - if n <= 0xffff: - return self._buffer.write(struct.pack(">BH", 0xde, n)) - if n <= 0xffffffff: - return self._buffer.write(struct.pack(">BI", 0xdf, n)) - raise PackValueError("Dict is too large") - - def _pack_map_pairs(self, n, pairs, nest_limit=DEFAULT_RECURSE_LIMIT): - self._pack_map_header(n) - for (k, v) in pairs: - self._pack(k, nest_limit - 1) - self._pack(v, nest_limit - 1) - - def _pack_raw_header(self, n): - if n <= 0x1f: - self._buffer.write(struct.pack('B', 0xa0 + n)) - elif self._use_bin_type and n <= 0xff: - self._buffer.write(struct.pack('>BB', 0xd9, n)) - elif n <= 0xffff: - self._buffer.write(struct.pack(">BH", 0xda, n)) - elif n <= 0xffffffff: - self._buffer.write(struct.pack(">BI", 0xdb, n)) - else: - raise PackValueError('Raw is too large') - - def _pack_bin_header(self, n): - if not self._use_bin_type: - return self._pack_raw_header(n) - elif n <= 0xff: - return self._buffer.write(struct.pack('>BB', 0xc4, n)) - elif n <= 0xffff: - return self._buffer.write(struct.pack(">BH", 0xc5, n)) - elif n <= 0xffffffff: - return self._buffer.write(struct.pack(">BI", 0xc6, n)) - else: - raise PackValueError('Bin is too large') - - def bytes(self): - return self._buffer.getvalue() - - def reset(self): - self._buffer = StringIO() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__about__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__about__.py deleted file mode 100644 index 4255c5b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__about__.py +++ /dev/null @@ -1,21 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -__all__ = [ - "__title__", "__summary__", "__uri__", "__version__", "__author__", - "__email__", "__license__", "__copyright__", -] - -__title__ = "packaging" -__summary__ = "Core utilities for Python packages" -__uri__ = "https://github.com/pypa/packaging" - -__version__ = "17.1" - -__author__ = "Donald Stufft and individual contributors" -__email__ = "donald@stufft.io" - -__license__ = "BSD or Apache License, Version 2.0" -__copyright__ = "Copyright 2014-2016 %s" % __author__ diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__init__.py deleted file mode 100644 index 5ee6220..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -from .__about__ import ( - __author__, __copyright__, __email__, __license__, __summary__, __title__, - __uri__, __version__ -) - -__all__ = [ - "__title__", "__summary__", "__uri__", "__version__", "__author__", - "__email__", "__license__", "__copyright__", -] diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_compat.py deleted file mode 100644 index 210bb80..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_compat.py +++ /dev/null @@ -1,30 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -import sys - - -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 - -# flake8: noqa - -if PY3: - string_types = str, -else: - string_types = basestring, - - -def with_metaclass(meta, *bases): - """ - Create a base class with a metaclass. - """ - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(meta): - def __new__(cls, name, this_bases, d): - return meta(name, bases, d) - return type.__new__(metaclass, 'temporary_class', (), {}) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_structures.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_structures.py deleted file mode 100644 index e9fc4a0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/_structures.py +++ /dev/null @@ -1,70 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - - -class Infinity(object): - - def __repr__(self): - return "Infinity" - - def __hash__(self): - return hash(repr(self)) - - def __lt__(self, other): - return False - - def __le__(self, other): - return False - - def __eq__(self, other): - return isinstance(other, self.__class__) - - def __ne__(self, other): - return not isinstance(other, self.__class__) - - def __gt__(self, other): - return True - - def __ge__(self, other): - return True - - def __neg__(self): - return NegativeInfinity - - -Infinity = Infinity() - - -class NegativeInfinity(object): - - def __repr__(self): - return "-Infinity" - - def __hash__(self): - return hash(repr(self)) - - def __lt__(self, other): - return True - - def __le__(self, other): - return True - - def __eq__(self, other): - return isinstance(other, self.__class__) - - def __ne__(self, other): - return not isinstance(other, self.__class__) - - def __gt__(self, other): - return False - - def __ge__(self, other): - return False - - def __neg__(self): - return Infinity - - -NegativeInfinity = NegativeInfinity() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/markers.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/markers.py deleted file mode 100644 index e5834ce..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/markers.py +++ /dev/null @@ -1,301 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -import operator -import os -import platform -import sys - -from pip._vendor.pyparsing import ParseException, ParseResults, stringStart, stringEnd -from pip._vendor.pyparsing import ZeroOrMore, Group, Forward, QuotedString -from pip._vendor.pyparsing import Literal as L # noqa - -from ._compat import string_types -from .specifiers import Specifier, InvalidSpecifier - - -__all__ = [ - "InvalidMarker", "UndefinedComparison", "UndefinedEnvironmentName", - "Marker", "default_environment", -] - - -class InvalidMarker(ValueError): - """ - An invalid marker was found, users should refer to PEP 508. - """ - - -class UndefinedComparison(ValueError): - """ - An invalid operation was attempted on a value that doesn't support it. - """ - - -class UndefinedEnvironmentName(ValueError): - """ - A name was attempted to be used that does not exist inside of the - environment. - """ - - -class Node(object): - - def __init__(self, value): - self.value = value - - def __str__(self): - return str(self.value) - - def __repr__(self): - return "<{0}({1!r})>".format(self.__class__.__name__, str(self)) - - def serialize(self): - raise NotImplementedError - - -class Variable(Node): - - def serialize(self): - return str(self) - - -class Value(Node): - - def serialize(self): - return '"{0}"'.format(self) - - -class Op(Node): - - def serialize(self): - return str(self) - - -VARIABLE = ( - L("implementation_version") | - L("platform_python_implementation") | - L("implementation_name") | - L("python_full_version") | - L("platform_release") | - L("platform_version") | - L("platform_machine") | - L("platform_system") | - L("python_version") | - L("sys_platform") | - L("os_name") | - L("os.name") | # PEP-345 - L("sys.platform") | # PEP-345 - L("platform.version") | # PEP-345 - L("platform.machine") | # PEP-345 - L("platform.python_implementation") | # PEP-345 - L("python_implementation") | # undocumented setuptools legacy - L("extra") -) -ALIASES = { - 'os.name': 'os_name', - 'sys.platform': 'sys_platform', - 'platform.version': 'platform_version', - 'platform.machine': 'platform_machine', - 'platform.python_implementation': 'platform_python_implementation', - 'python_implementation': 'platform_python_implementation' -} -VARIABLE.setParseAction(lambda s, l, t: Variable(ALIASES.get(t[0], t[0]))) - -VERSION_CMP = ( - L("===") | - L("==") | - L(">=") | - L("<=") | - L("!=") | - L("~=") | - L(">") | - L("<") -) - -MARKER_OP = VERSION_CMP | L("not in") | L("in") -MARKER_OP.setParseAction(lambda s, l, t: Op(t[0])) - -MARKER_VALUE = QuotedString("'") | QuotedString('"') -MARKER_VALUE.setParseAction(lambda s, l, t: Value(t[0])) - -BOOLOP = L("and") | L("or") - -MARKER_VAR = VARIABLE | MARKER_VALUE - -MARKER_ITEM = Group(MARKER_VAR + MARKER_OP + MARKER_VAR) -MARKER_ITEM.setParseAction(lambda s, l, t: tuple(t[0])) - -LPAREN = L("(").suppress() -RPAREN = L(")").suppress() - -MARKER_EXPR = Forward() -MARKER_ATOM = MARKER_ITEM | Group(LPAREN + MARKER_EXPR + RPAREN) -MARKER_EXPR << MARKER_ATOM + ZeroOrMore(BOOLOP + MARKER_EXPR) - -MARKER = stringStart + MARKER_EXPR + stringEnd - - -def _coerce_parse_result(results): - if isinstance(results, ParseResults): - return [_coerce_parse_result(i) for i in results] - else: - return results - - -def _format_marker(marker, first=True): - assert isinstance(marker, (list, tuple, string_types)) - - # Sometimes we have a structure like [[...]] which is a single item list - # where the single item is itself it's own list. In that case we want skip - # the rest of this function so that we don't get extraneous () on the - # outside. - if (isinstance(marker, list) and len(marker) == 1 and - isinstance(marker[0], (list, tuple))): - return _format_marker(marker[0]) - - if isinstance(marker, list): - inner = (_format_marker(m, first=False) for m in marker) - if first: - return " ".join(inner) - else: - return "(" + " ".join(inner) + ")" - elif isinstance(marker, tuple): - return " ".join([m.serialize() for m in marker]) - else: - return marker - - -_operators = { - "in": lambda lhs, rhs: lhs in rhs, - "not in": lambda lhs, rhs: lhs not in rhs, - "<": operator.lt, - "<=": operator.le, - "==": operator.eq, - "!=": operator.ne, - ">=": operator.ge, - ">": operator.gt, -} - - -def _eval_op(lhs, op, rhs): - try: - spec = Specifier("".join([op.serialize(), rhs])) - except InvalidSpecifier: - pass - else: - return spec.contains(lhs) - - oper = _operators.get(op.serialize()) - if oper is None: - raise UndefinedComparison( - "Undefined {0!r} on {1!r} and {2!r}.".format(op, lhs, rhs) - ) - - return oper(lhs, rhs) - - -_undefined = object() - - -def _get_env(environment, name): - value = environment.get(name, _undefined) - - if value is _undefined: - raise UndefinedEnvironmentName( - "{0!r} does not exist in evaluation environment.".format(name) - ) - - return value - - -def _evaluate_markers(markers, environment): - groups = [[]] - - for marker in markers: - assert isinstance(marker, (list, tuple, string_types)) - - if isinstance(marker, list): - groups[-1].append(_evaluate_markers(marker, environment)) - elif isinstance(marker, tuple): - lhs, op, rhs = marker - - if isinstance(lhs, Variable): - lhs_value = _get_env(environment, lhs.value) - rhs_value = rhs.value - else: - lhs_value = lhs.value - rhs_value = _get_env(environment, rhs.value) - - groups[-1].append(_eval_op(lhs_value, op, rhs_value)) - else: - assert marker in ["and", "or"] - if marker == "or": - groups.append([]) - - return any(all(item) for item in groups) - - -def format_full_version(info): - version = '{0.major}.{0.minor}.{0.micro}'.format(info) - kind = info.releaselevel - if kind != 'final': - version += kind[0] + str(info.serial) - return version - - -def default_environment(): - if hasattr(sys, 'implementation'): - iver = format_full_version(sys.implementation.version) - implementation_name = sys.implementation.name - else: - iver = '0' - implementation_name = '' - - return { - "implementation_name": implementation_name, - "implementation_version": iver, - "os_name": os.name, - "platform_machine": platform.machine(), - "platform_release": platform.release(), - "platform_system": platform.system(), - "platform_version": platform.version(), - "python_full_version": platform.python_version(), - "platform_python_implementation": platform.python_implementation(), - "python_version": platform.python_version()[:3], - "sys_platform": sys.platform, - } - - -class Marker(object): - - def __init__(self, marker): - try: - self._markers = _coerce_parse_result(MARKER.parseString(marker)) - except ParseException as e: - err_str = "Invalid marker: {0!r}, parse error at {1!r}".format( - marker, marker[e.loc:e.loc + 8]) - raise InvalidMarker(err_str) - - def __str__(self): - return _format_marker(self._markers) - - def __repr__(self): - return "<Marker({0!r})>".format(str(self)) - - def evaluate(self, environment=None): - """Evaluate a marker. - - Return the boolean from evaluating the given marker against the - environment. environment is an optional argument to override all or - part of the determined environment. - - The environment is determined from the current Python process. - """ - current_environment = default_environment() - if environment is not None: - current_environment.update(environment) - - return _evaluate_markers(self._markers, current_environment) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/requirements.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/requirements.py deleted file mode 100644 index 2760483..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/requirements.py +++ /dev/null @@ -1,130 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -import string -import re - -from pip._vendor.pyparsing import stringStart, stringEnd, originalTextFor, ParseException -from pip._vendor.pyparsing import ZeroOrMore, Word, Optional, Regex, Combine -from pip._vendor.pyparsing import Literal as L # noqa -from pip._vendor.six.moves.urllib import parse as urlparse - -from .markers import MARKER_EXPR, Marker -from .specifiers import LegacySpecifier, Specifier, SpecifierSet - - -class InvalidRequirement(ValueError): - """ - An invalid requirement was found, users should refer to PEP 508. - """ - - -ALPHANUM = Word(string.ascii_letters + string.digits) - -LBRACKET = L("[").suppress() -RBRACKET = L("]").suppress() -LPAREN = L("(").suppress() -RPAREN = L(")").suppress() -COMMA = L(",").suppress() -SEMICOLON = L(";").suppress() -AT = L("@").suppress() - -PUNCTUATION = Word("-_.") -IDENTIFIER_END = ALPHANUM | (ZeroOrMore(PUNCTUATION) + ALPHANUM) -IDENTIFIER = Combine(ALPHANUM + ZeroOrMore(IDENTIFIER_END)) - -NAME = IDENTIFIER("name") -EXTRA = IDENTIFIER - -URI = Regex(r'[^ ]+')("url") -URL = (AT + URI) - -EXTRAS_LIST = EXTRA + ZeroOrMore(COMMA + EXTRA) -EXTRAS = (LBRACKET + Optional(EXTRAS_LIST) + RBRACKET)("extras") - -VERSION_PEP440 = Regex(Specifier._regex_str, re.VERBOSE | re.IGNORECASE) -VERSION_LEGACY = Regex(LegacySpecifier._regex_str, re.VERBOSE | re.IGNORECASE) - -VERSION_ONE = VERSION_PEP440 ^ VERSION_LEGACY -VERSION_MANY = Combine(VERSION_ONE + ZeroOrMore(COMMA + VERSION_ONE), - joinString=",", adjacent=False)("_raw_spec") -_VERSION_SPEC = Optional(((LPAREN + VERSION_MANY + RPAREN) | VERSION_MANY)) -_VERSION_SPEC.setParseAction(lambda s, l, t: t._raw_spec or '') - -VERSION_SPEC = originalTextFor(_VERSION_SPEC)("specifier") -VERSION_SPEC.setParseAction(lambda s, l, t: t[1]) - -MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker") -MARKER_EXPR.setParseAction( - lambda s, l, t: Marker(s[t._original_start:t._original_end]) -) -MARKER_SEPARATOR = SEMICOLON -MARKER = MARKER_SEPARATOR + MARKER_EXPR - -VERSION_AND_MARKER = VERSION_SPEC + Optional(MARKER) -URL_AND_MARKER = URL + Optional(MARKER) - -NAMED_REQUIREMENT = \ - NAME + Optional(EXTRAS) + (URL_AND_MARKER | VERSION_AND_MARKER) - -REQUIREMENT = stringStart + NAMED_REQUIREMENT + stringEnd -# pyparsing isn't thread safe during initialization, so we do it eagerly, see -# issue #104 -REQUIREMENT.parseString("x[]") - - -class Requirement(object): - """Parse a requirement. - - Parse a given requirement string into its parts, such as name, specifier, - URL, and extras. Raises InvalidRequirement on a badly-formed requirement - string. - """ - - # TODO: Can we test whether something is contained within a requirement? - # If so how do we do that? Do we need to test against the _name_ of - # the thing as well as the version? What about the markers? - # TODO: Can we normalize the name and extra name? - - def __init__(self, requirement_string): - try: - req = REQUIREMENT.parseString(requirement_string) - except ParseException as e: - raise InvalidRequirement( - "Invalid requirement, parse error at \"{0!r}\"".format( - requirement_string[e.loc:e.loc + 8])) - - self.name = req.name - if req.url: - parsed_url = urlparse.urlparse(req.url) - if not (parsed_url.scheme and parsed_url.netloc) or ( - not parsed_url.scheme and not parsed_url.netloc): - raise InvalidRequirement("Invalid URL given") - self.url = req.url - else: - self.url = None - self.extras = set(req.extras.asList() if req.extras else []) - self.specifier = SpecifierSet(req.specifier) - self.marker = req.marker if req.marker else None - - def __str__(self): - parts = [self.name] - - if self.extras: - parts.append("[{0}]".format(",".join(sorted(self.extras)))) - - if self.specifier: - parts.append(str(self.specifier)) - - if self.url: - parts.append("@ {0}".format(self.url)) - - if self.marker: - parts.append("; {0}".format(self.marker)) - - return "".join(parts) - - def __repr__(self): - return "<Requirement({0!r})>".format(str(self)) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/specifiers.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/specifiers.py deleted file mode 100644 index 9b6353f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/specifiers.py +++ /dev/null @@ -1,774 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -import abc -import functools -import itertools -import re - -from ._compat import string_types, with_metaclass -from .version import Version, LegacyVersion, parse - - -class InvalidSpecifier(ValueError): - """ - An invalid specifier was found, users should refer to PEP 440. - """ - - -class BaseSpecifier(with_metaclass(abc.ABCMeta, object)): - - @abc.abstractmethod - def __str__(self): - """ - Returns the str representation of this Specifier like object. This - should be representative of the Specifier itself. - """ - - @abc.abstractmethod - def __hash__(self): - """ - Returns a hash value for this Specifier like object. - """ - - @abc.abstractmethod - def __eq__(self, other): - """ - Returns a boolean representing whether or not the two Specifier like - objects are equal. - """ - - @abc.abstractmethod - def __ne__(self, other): - """ - Returns a boolean representing whether or not the two Specifier like - objects are not equal. - """ - - @abc.abstractproperty - def prereleases(self): - """ - Returns whether or not pre-releases as a whole are allowed by this - specifier. - """ - - @prereleases.setter - def prereleases(self, value): - """ - Sets whether or not pre-releases as a whole are allowed by this - specifier. - """ - - @abc.abstractmethod - def contains(self, item, prereleases=None): - """ - Determines if the given item is contained within this specifier. - """ - - @abc.abstractmethod - def filter(self, iterable, prereleases=None): - """ - Takes an iterable of items and filters them so that only items which - are contained within this specifier are allowed in it. - """ - - -class _IndividualSpecifier(BaseSpecifier): - - _operators = {} - - def __init__(self, spec="", prereleases=None): - match = self._regex.search(spec) - if not match: - raise InvalidSpecifier("Invalid specifier: '{0}'".format(spec)) - - self._spec = ( - match.group("operator").strip(), - match.group("version").strip(), - ) - - # Store whether or not this Specifier should accept prereleases - self._prereleases = prereleases - - def __repr__(self): - pre = ( - ", prereleases={0!r}".format(self.prereleases) - if self._prereleases is not None - else "" - ) - - return "<{0}({1!r}{2})>".format( - self.__class__.__name__, - str(self), - pre, - ) - - def __str__(self): - return "{0}{1}".format(*self._spec) - - def __hash__(self): - return hash(self._spec) - - def __eq__(self, other): - if isinstance(other, string_types): - try: - other = self.__class__(other) - except InvalidSpecifier: - return NotImplemented - elif not isinstance(other, self.__class__): - return NotImplemented - - return self._spec == other._spec - - def __ne__(self, other): - if isinstance(other, string_types): - try: - other = self.__class__(other) - except InvalidSpecifier: - return NotImplemented - elif not isinstance(other, self.__class__): - return NotImplemented - - return self._spec != other._spec - - def _get_operator(self, op): - return getattr(self, "_compare_{0}".format(self._operators[op])) - - def _coerce_version(self, version): - if not isinstance(version, (LegacyVersion, Version)): - version = parse(version) - return version - - @property - def operator(self): - return self._spec[0] - - @property - def version(self): - return self._spec[1] - - @property - def prereleases(self): - return self._prereleases - - @prereleases.setter - def prereleases(self, value): - self._prereleases = value - - def __contains__(self, item): - return self.contains(item) - - def contains(self, item, prereleases=None): - # Determine if prereleases are to be allowed or not. - if prereleases is None: - prereleases = self.prereleases - - # Normalize item to a Version or LegacyVersion, this allows us to have - # a shortcut for ``"2.0" in Specifier(">=2") - item = self._coerce_version(item) - - # Determine if we should be supporting prereleases in this specifier - # or not, if we do not support prereleases than we can short circuit - # logic if this version is a prereleases. - if item.is_prerelease and not prereleases: - return False - - # Actually do the comparison to determine if this item is contained - # within this Specifier or not. - return self._get_operator(self.operator)(item, self.version) - - def filter(self, iterable, prereleases=None): - yielded = False - found_prereleases = [] - - kw = {"prereleases": prereleases if prereleases is not None else True} - - # Attempt to iterate over all the values in the iterable and if any of - # them match, yield them. - for version in iterable: - parsed_version = self._coerce_version(version) - - if self.contains(parsed_version, **kw): - # If our version is a prerelease, and we were not set to allow - # prereleases, then we'll store it for later incase nothing - # else matches this specifier. - if (parsed_version.is_prerelease and not - (prereleases or self.prereleases)): - found_prereleases.append(version) - # Either this is not a prerelease, or we should have been - # accepting prereleases from the beginning. - else: - yielded = True - yield version - - # Now that we've iterated over everything, determine if we've yielded - # any values, and if we have not and we have any prereleases stored up - # then we will go ahead and yield the prereleases. - if not yielded and found_prereleases: - for version in found_prereleases: - yield version - - -class LegacySpecifier(_IndividualSpecifier): - - _regex_str = ( - r""" - (?P<operator>(==|!=|<=|>=|<|>)) - \s* - (?P<version> - [^,;\s)]* # Since this is a "legacy" specifier, and the version - # string can be just about anything, we match everything - # except for whitespace, a semi-colon for marker support, - # a closing paren since versions can be enclosed in - # them, and a comma since it's a version separator. - ) - """ - ) - - _regex = re.compile( - r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) - - _operators = { - "==": "equal", - "!=": "not_equal", - "<=": "less_than_equal", - ">=": "greater_than_equal", - "<": "less_than", - ">": "greater_than", - } - - def _coerce_version(self, version): - if not isinstance(version, LegacyVersion): - version = LegacyVersion(str(version)) - return version - - def _compare_equal(self, prospective, spec): - return prospective == self._coerce_version(spec) - - def _compare_not_equal(self, prospective, spec): - return prospective != self._coerce_version(spec) - - def _compare_less_than_equal(self, prospective, spec): - return prospective <= self._coerce_version(spec) - - def _compare_greater_than_equal(self, prospective, spec): - return prospective >= self._coerce_version(spec) - - def _compare_less_than(self, prospective, spec): - return prospective < self._coerce_version(spec) - - def _compare_greater_than(self, prospective, spec): - return prospective > self._coerce_version(spec) - - -def _require_version_compare(fn): - @functools.wraps(fn) - def wrapped(self, prospective, spec): - if not isinstance(prospective, Version): - return False - return fn(self, prospective, spec) - return wrapped - - -class Specifier(_IndividualSpecifier): - - _regex_str = ( - r""" - (?P<operator>(~=|==|!=|<=|>=|<|>|===)) - (?P<version> - (?: - # The identity operators allow for an escape hatch that will - # do an exact string match of the version you wish to install. - # This will not be parsed by PEP 440 and we cannot determine - # any semantic meaning from it. This operator is discouraged - # but included entirely as an escape hatch. - (?<====) # Only match for the identity operator - \s* - [^\s]* # We just match everything, except for whitespace - # since we are only testing for strict identity. - ) - | - (?: - # The (non)equality operators allow for wild card and local - # versions to be specified so we have to define these two - # operators separately to enable that. - (?<===|!=) # Only match for equals and not equals - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)* # release - (?: # pre release - [-_\.]? - (a|b|c|rc|alpha|beta|pre|preview) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - - # You cannot use a wild card and a dev or local version - # together so group them with a | and make them optional. - (?: - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - (?:\+[a-z0-9]+(?:[-_\.][a-z0-9]+)*)? # local - | - \.\* # Wild card syntax of .* - )? - ) - | - (?: - # The compatible operator requires at least two digits in the - # release segment. - (?<=~=) # Only match for the compatible operator - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)+ # release (We have a + instead of a *) - (?: # pre release - [-_\.]? - (a|b|c|rc|alpha|beta|pre|preview) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - ) - | - (?: - # All other operators only allow a sub set of what the - # (non)equality operators do. Specifically they do not allow - # local versions to be specified nor do they allow the prefix - # matching wild cards. - (?<!==|!=|~=) # We have special cases for these - # operators so we want to make sure they - # don't match here. - - \s* - v? - (?:[0-9]+!)? # epoch - [0-9]+(?:\.[0-9]+)* # release - (?: # pre release - [-_\.]? - (a|b|c|rc|alpha|beta|pre|preview) - [-_\.]? - [0-9]* - )? - (?: # post release - (?:-[0-9]+)|(?:[-_\.]?(post|rev|r)[-_\.]?[0-9]*) - )? - (?:[-_\.]?dev[-_\.]?[0-9]*)? # dev release - ) - ) - """ - ) - - _regex = re.compile( - r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE) - - _operators = { - "~=": "compatible", - "==": "equal", - "!=": "not_equal", - "<=": "less_than_equal", - ">=": "greater_than_equal", - "<": "less_than", - ">": "greater_than", - "===": "arbitrary", - } - - @_require_version_compare - def _compare_compatible(self, prospective, spec): - # Compatible releases have an equivalent combination of >= and ==. That - # is that ~=2.2 is equivalent to >=2.2,==2.*. This allows us to - # implement this in terms of the other specifiers instead of - # implementing it ourselves. The only thing we need to do is construct - # the other specifiers. - - # We want everything but the last item in the version, but we want to - # ignore post and dev releases and we want to treat the pre-release as - # it's own separate segment. - prefix = ".".join( - list( - itertools.takewhile( - lambda x: (not x.startswith("post") and not - x.startswith("dev")), - _version_split(spec), - ) - )[:-1] - ) - - # Add the prefix notation to the end of our string - prefix += ".*" - - return (self._get_operator(">=")(prospective, spec) and - self._get_operator("==")(prospective, prefix)) - - @_require_version_compare - def _compare_equal(self, prospective, spec): - # We need special logic to handle prefix matching - if spec.endswith(".*"): - # In the case of prefix matching we want to ignore local segment. - prospective = Version(prospective.public) - # Split the spec out by dots, and pretend that there is an implicit - # dot in between a release segment and a pre-release segment. - spec = _version_split(spec[:-2]) # Remove the trailing .* - - # Split the prospective version out by dots, and pretend that there - # is an implicit dot in between a release segment and a pre-release - # segment. - prospective = _version_split(str(prospective)) - - # Shorten the prospective version to be the same length as the spec - # so that we can determine if the specifier is a prefix of the - # prospective version or not. - prospective = prospective[:len(spec)] - - # Pad out our two sides with zeros so that they both equal the same - # length. - spec, prospective = _pad_version(spec, prospective) - else: - # Convert our spec string into a Version - spec = Version(spec) - - # If the specifier does not have a local segment, then we want to - # act as if the prospective version also does not have a local - # segment. - if not spec.local: - prospective = Version(prospective.public) - - return prospective == spec - - @_require_version_compare - def _compare_not_equal(self, prospective, spec): - return not self._compare_equal(prospective, spec) - - @_require_version_compare - def _compare_less_than_equal(self, prospective, spec): - return prospective <= Version(spec) - - @_require_version_compare - def _compare_greater_than_equal(self, prospective, spec): - return prospective >= Version(spec) - - @_require_version_compare - def _compare_less_than(self, prospective, spec): - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = Version(spec) - - # Check to see if the prospective version is less than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective < spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a pre-release version, that we do not accept pre-release - # versions for the version mentioned in the specifier (e.g. <3.1 should - # not match 3.1.dev0, but should match 3.0.dev0). - if not spec.is_prerelease and prospective.is_prerelease: - if Version(prospective.base_version) == Version(spec.base_version): - return False - - # If we've gotten to here, it means that prospective version is both - # less than the spec version *and* it's not a pre-release of the same - # version in the spec. - return True - - @_require_version_compare - def _compare_greater_than(self, prospective, spec): - # Convert our spec to a Version instance, since we'll want to work with - # it as a version. - spec = Version(spec) - - # Check to see if the prospective version is greater than the spec - # version. If it's not we can short circuit and just return False now - # instead of doing extra unneeded work. - if not prospective > spec: - return False - - # This special case is here so that, unless the specifier itself - # includes is a post-release version, that we do not accept - # post-release versions for the version mentioned in the specifier - # (e.g. >3.1 should not match 3.0.post0, but should match 3.2.post0). - if not spec.is_postrelease and prospective.is_postrelease: - if Version(prospective.base_version) == Version(spec.base_version): - return False - - # Ensure that we do not allow a local version of the version mentioned - # in the specifier, which is techincally greater than, to match. - if prospective.local is not None: - if Version(prospective.base_version) == Version(spec.base_version): - return False - - # If we've gotten to here, it means that prospective version is both - # greater than the spec version *and* it's not a pre-release of the - # same version in the spec. - return True - - def _compare_arbitrary(self, prospective, spec): - return str(prospective).lower() == str(spec).lower() - - @property - def prereleases(self): - # If there is an explicit prereleases set for this, then we'll just - # blindly use that. - if self._prereleases is not None: - return self._prereleases - - # Look at all of our specifiers and determine if they are inclusive - # operators, and if they are if they are including an explicit - # prerelease. - operator, version = self._spec - if operator in ["==", ">=", "<=", "~=", "==="]: - # The == specifier can include a trailing .*, if it does we - # want to remove before parsing. - if operator == "==" and version.endswith(".*"): - version = version[:-2] - - # Parse the version, and if it is a pre-release than this - # specifier allows pre-releases. - if parse(version).is_prerelease: - return True - - return False - - @prereleases.setter - def prereleases(self, value): - self._prereleases = value - - -_prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") - - -def _version_split(version): - result = [] - for item in version.split("."): - match = _prefix_regex.search(item) - if match: - result.extend(match.groups()) - else: - result.append(item) - return result - - -def _pad_version(left, right): - left_split, right_split = [], [] - - # Get the release segment of our versions - left_split.append(list(itertools.takewhile(lambda x: x.isdigit(), left))) - right_split.append(list(itertools.takewhile(lambda x: x.isdigit(), right))) - - # Get the rest of our versions - left_split.append(left[len(left_split[0]):]) - right_split.append(right[len(right_split[0]):]) - - # Insert our padding - left_split.insert( - 1, - ["0"] * max(0, len(right_split[0]) - len(left_split[0])), - ) - right_split.insert( - 1, - ["0"] * max(0, len(left_split[0]) - len(right_split[0])), - ) - - return ( - list(itertools.chain(*left_split)), - list(itertools.chain(*right_split)), - ) - - -class SpecifierSet(BaseSpecifier): - - def __init__(self, specifiers="", prereleases=None): - # Split on , to break each indidivual specifier into it's own item, and - # strip each item to remove leading/trailing whitespace. - specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] - - # Parsed each individual specifier, attempting first to make it a - # Specifier and falling back to a LegacySpecifier. - parsed = set() - for specifier in specifiers: - try: - parsed.add(Specifier(specifier)) - except InvalidSpecifier: - parsed.add(LegacySpecifier(specifier)) - - # Turn our parsed specifiers into a frozen set and save them for later. - self._specs = frozenset(parsed) - - # Store our prereleases value so we can use it later to determine if - # we accept prereleases or not. - self._prereleases = prereleases - - def __repr__(self): - pre = ( - ", prereleases={0!r}".format(self.prereleases) - if self._prereleases is not None - else "" - ) - - return "<SpecifierSet({0!r}{1})>".format(str(self), pre) - - def __str__(self): - return ",".join(sorted(str(s) for s in self._specs)) - - def __hash__(self): - return hash(self._specs) - - def __and__(self, other): - if isinstance(other, string_types): - other = SpecifierSet(other) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - specifier = SpecifierSet() - specifier._specs = frozenset(self._specs | other._specs) - - if self._prereleases is None and other._prereleases is not None: - specifier._prereleases = other._prereleases - elif self._prereleases is not None and other._prereleases is None: - specifier._prereleases = self._prereleases - elif self._prereleases == other._prereleases: - specifier._prereleases = self._prereleases - else: - raise ValueError( - "Cannot combine SpecifierSets with True and False prerelease " - "overrides." - ) - - return specifier - - def __eq__(self, other): - if isinstance(other, string_types): - other = SpecifierSet(other) - elif isinstance(other, _IndividualSpecifier): - other = SpecifierSet(str(other)) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - return self._specs == other._specs - - def __ne__(self, other): - if isinstance(other, string_types): - other = SpecifierSet(other) - elif isinstance(other, _IndividualSpecifier): - other = SpecifierSet(str(other)) - elif not isinstance(other, SpecifierSet): - return NotImplemented - - return self._specs != other._specs - - def __len__(self): - return len(self._specs) - - def __iter__(self): - return iter(self._specs) - - @property - def prereleases(self): - # If we have been given an explicit prerelease modifier, then we'll - # pass that through here. - if self._prereleases is not None: - return self._prereleases - - # If we don't have any specifiers, and we don't have a forced value, - # then we'll just return None since we don't know if this should have - # pre-releases or not. - if not self._specs: - return None - - # Otherwise we'll see if any of the given specifiers accept - # prereleases, if any of them do we'll return True, otherwise False. - return any(s.prereleases for s in self._specs) - - @prereleases.setter - def prereleases(self, value): - self._prereleases = value - - def __contains__(self, item): - return self.contains(item) - - def contains(self, item, prereleases=None): - # Ensure that our item is a Version or LegacyVersion instance. - if not isinstance(item, (LegacyVersion, Version)): - item = parse(item) - - # Determine if we're forcing a prerelease or not, if we're not forcing - # one for this particular filter call, then we'll use whatever the - # SpecifierSet thinks for whether or not we should support prereleases. - if prereleases is None: - prereleases = self.prereleases - - # We can determine if we're going to allow pre-releases by looking to - # see if any of the underlying items supports them. If none of them do - # and this item is a pre-release then we do not allow it and we can - # short circuit that here. - # Note: This means that 1.0.dev1 would not be contained in something - # like >=1.0.devabc however it would be in >=1.0.debabc,>0.0.dev0 - if not prereleases and item.is_prerelease: - return False - - # We simply dispatch to the underlying specs here to make sure that the - # given version is contained within all of them. - # Note: This use of all() here means that an empty set of specifiers - # will always return True, this is an explicit design decision. - return all( - s.contains(item, prereleases=prereleases) - for s in self._specs - ) - - def filter(self, iterable, prereleases=None): - # Determine if we're forcing a prerelease or not, if we're not forcing - # one for this particular filter call, then we'll use whatever the - # SpecifierSet thinks for whether or not we should support prereleases. - if prereleases is None: - prereleases = self.prereleases - - # If we have any specifiers, then we want to wrap our iterable in the - # filter method for each one, this will act as a logical AND amongst - # each specifier. - if self._specs: - for spec in self._specs: - iterable = spec.filter(iterable, prereleases=bool(prereleases)) - return iterable - # If we do not have any specifiers, then we need to have a rough filter - # which will filter out any pre-releases, unless there are no final - # releases, and which will filter out LegacyVersion in general. - else: - filtered = [] - found_prereleases = [] - - for item in iterable: - # Ensure that we some kind of Version class for this item. - if not isinstance(item, (LegacyVersion, Version)): - parsed_version = parse(item) - else: - parsed_version = item - - # Filter out any item which is parsed as a LegacyVersion - if isinstance(parsed_version, LegacyVersion): - continue - - # Store any item which is a pre-release for later unless we've - # already found a final version or we are accepting prereleases - if parsed_version.is_prerelease and not prereleases: - if not filtered: - found_prereleases.append(item) - else: - filtered.append(item) - - # If we've found no items except for pre-releases, then we'll go - # ahead and use the pre-releases - if not filtered and found_prereleases and prereleases is None: - return found_prereleases - - return filtered diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/utils.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/utils.py deleted file mode 100644 index 4b94a82..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/utils.py +++ /dev/null @@ -1,63 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -import re - -from .version import InvalidVersion, Version - - -_canonicalize_regex = re.compile(r"[-_.]+") - - -def canonicalize_name(name): - # This is taken from PEP 503. - return _canonicalize_regex.sub("-", name).lower() - - -def canonicalize_version(version): - """ - This is very similar to Version.__str__, but has one subtle differences - with the way it handles the release segment. - """ - - try: - version = Version(version) - except InvalidVersion: - # Legacy versions cannot be normalized - return version - - parts = [] - - # Epoch - if version.epoch != 0: - parts.append("{0}!".format(version.epoch)) - - # Release segment - # NB: This strips trailing '.0's to normalize - parts.append( - re.sub( - r'(\.0)+$', - '', - ".".join(str(x) for x in version.release) - ) - ) - - # Pre-release - if version.pre is not None: - parts.append("".join(str(x) for x in version.pre)) - - # Post-release - if version.post is not None: - parts.append(".post{0}".format(version.post)) - - # Development release - if version.dev is not None: - parts.append(".dev{0}".format(version.dev)) - - # Local version segment - if version.local is not None: - parts.append("+{0}".format(version.local)) - - return "".join(parts) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/version.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/version.py deleted file mode 100644 index 6ed5cbb..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/packaging/version.py +++ /dev/null @@ -1,441 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. -from __future__ import absolute_import, division, print_function - -import collections -import itertools -import re - -from ._structures import Infinity - - -__all__ = [ - "parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN" -] - - -_Version = collections.namedtuple( - "_Version", - ["epoch", "release", "dev", "pre", "post", "local"], -) - - -def parse(version): - """ - Parse the given version string and return either a :class:`Version` object - or a :class:`LegacyVersion` object depending on if the given version is - a valid PEP 440 version or a legacy version. - """ - try: - return Version(version) - except InvalidVersion: - return LegacyVersion(version) - - -class InvalidVersion(ValueError): - """ - An invalid version was found, users should refer to PEP 440. - """ - - -class _BaseVersion(object): - - def __hash__(self): - return hash(self._key) - - def __lt__(self, other): - return self._compare(other, lambda s, o: s < o) - - def __le__(self, other): - return self._compare(other, lambda s, o: s <= o) - - def __eq__(self, other): - return self._compare(other, lambda s, o: s == o) - - def __ge__(self, other): - return self._compare(other, lambda s, o: s >= o) - - def __gt__(self, other): - return self._compare(other, lambda s, o: s > o) - - def __ne__(self, other): - return self._compare(other, lambda s, o: s != o) - - def _compare(self, other, method): - if not isinstance(other, _BaseVersion): - return NotImplemented - - return method(self._key, other._key) - - -class LegacyVersion(_BaseVersion): - - def __init__(self, version): - self._version = str(version) - self._key = _legacy_cmpkey(self._version) - - def __str__(self): - return self._version - - def __repr__(self): - return "<LegacyVersion({0})>".format(repr(str(self))) - - @property - def public(self): - return self._version - - @property - def base_version(self): - return self._version - - @property - def epoch(self): - return -1 - - @property - def release(self): - return None - - @property - def pre(self): - return None - - @property - def post(self): - return None - - @property - def dev(self): - return None - - @property - def local(self): - return None - - @property - def is_prerelease(self): - return False - - @property - def is_postrelease(self): - return False - - @property - def is_devrelease(self): - return False - - -_legacy_version_component_re = re.compile( - r"(\d+ | [a-z]+ | \.| -)", re.VERBOSE, -) - -_legacy_version_replacement_map = { - "pre": "c", "preview": "c", "-": "final-", "rc": "c", "dev": "@", -} - - -def _parse_version_parts(s): - for part in _legacy_version_component_re.split(s): - part = _legacy_version_replacement_map.get(part, part) - - if not part or part == ".": - continue - - if part[:1] in "0123456789": - # pad for numeric comparison - yield part.zfill(8) - else: - yield "*" + part - - # ensure that alpha/beta/candidate are before final - yield "*final" - - -def _legacy_cmpkey(version): - # We hardcode an epoch of -1 here. A PEP 440 version can only have a epoch - # greater than or equal to 0. This will effectively put the LegacyVersion, - # which uses the defacto standard originally implemented by setuptools, - # as before all PEP 440 versions. - epoch = -1 - - # This scheme is taken from pkg_resources.parse_version setuptools prior to - # it's adoption of the packaging library. - parts = [] - for part in _parse_version_parts(version.lower()): - if part.startswith("*"): - # remove "-" before a prerelease tag - if part < "*final": - while parts and parts[-1] == "*final-": - parts.pop() - - # remove trailing zeros from each series of numeric parts - while parts and parts[-1] == "00000000": - parts.pop() - - parts.append(part) - parts = tuple(parts) - - return epoch, parts - - -# Deliberately not anchored to the start and end of the string, to make it -# easier for 3rd party code to reuse -VERSION_PATTERN = r""" - v? - (?: - (?:(?P<epoch>[0-9]+)!)? # epoch - (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment - (?P<pre> # pre-release - [-_\.]? - (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) - [-_\.]? - (?P<pre_n>[0-9]+)? - )? - (?P<post> # post release - (?:-(?P<post_n1>[0-9]+)) - | - (?: - [-_\.]? - (?P<post_l>post|rev|r) - [-_\.]? - (?P<post_n2>[0-9]+)? - ) - )? - (?P<dev> # dev release - [-_\.]? - (?P<dev_l>dev) - [-_\.]? - (?P<dev_n>[0-9]+)? - )? - ) - (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))? # local version -""" - - -class Version(_BaseVersion): - - _regex = re.compile( - r"^\s*" + VERSION_PATTERN + r"\s*$", - re.VERBOSE | re.IGNORECASE, - ) - - def __init__(self, version): - # Validate the version and parse it into pieces - match = self._regex.search(version) - if not match: - raise InvalidVersion("Invalid version: '{0}'".format(version)) - - # Store the parsed out pieces of the version - self._version = _Version( - epoch=int(match.group("epoch")) if match.group("epoch") else 0, - release=tuple(int(i) for i in match.group("release").split(".")), - pre=_parse_letter_version( - match.group("pre_l"), - match.group("pre_n"), - ), - post=_parse_letter_version( - match.group("post_l"), - match.group("post_n1") or match.group("post_n2"), - ), - dev=_parse_letter_version( - match.group("dev_l"), - match.group("dev_n"), - ), - local=_parse_local_version(match.group("local")), - ) - - # Generate a key which will be used for sorting - self._key = _cmpkey( - self._version.epoch, - self._version.release, - self._version.pre, - self._version.post, - self._version.dev, - self._version.local, - ) - - def __repr__(self): - return "<Version({0})>".format(repr(str(self))) - - def __str__(self): - parts = [] - - # Epoch - if self.epoch != 0: - parts.append("{0}!".format(self.epoch)) - - # Release segment - parts.append(".".join(str(x) for x in self.release)) - - # Pre-release - if self.pre is not None: - parts.append("".join(str(x) for x in self.pre)) - - # Post-release - if self.post is not None: - parts.append(".post{0}".format(self.post)) - - # Development release - if self.dev is not None: - parts.append(".dev{0}".format(self.dev)) - - # Local version segment - if self.local is not None: - parts.append("+{0}".format(self.local)) - - return "".join(parts) - - @property - def epoch(self): - return self._version.epoch - - @property - def release(self): - return self._version.release - - @property - def pre(self): - return self._version.pre - - @property - def post(self): - return self._version.post[1] if self._version.post else None - - @property - def dev(self): - return self._version.dev[1] if self._version.dev else None - - @property - def local(self): - if self._version.local: - return ".".join(str(x) for x in self._version.local) - else: - return None - - @property - def public(self): - return str(self).split("+", 1)[0] - - @property - def base_version(self): - parts = [] - - # Epoch - if self.epoch != 0: - parts.append("{0}!".format(self.epoch)) - - # Release segment - parts.append(".".join(str(x) for x in self.release)) - - return "".join(parts) - - @property - def is_prerelease(self): - return self.dev is not None or self.pre is not None - - @property - def is_postrelease(self): - return self.post is not None - - @property - def is_devrelease(self): - return self.dev is not None - - -def _parse_letter_version(letter, number): - if letter: - # We consider there to be an implicit 0 in a pre-release if there is - # not a numeral associated with it. - if number is None: - number = 0 - - # We normalize any letters to their lower case form - letter = letter.lower() - - # We consider some words to be alternate spellings of other words and - # in those cases we want to normalize the spellings to our preferred - # spelling. - if letter == "alpha": - letter = "a" - elif letter == "beta": - letter = "b" - elif letter in ["c", "pre", "preview"]: - letter = "rc" - elif letter in ["rev", "r"]: - letter = "post" - - return letter, int(number) - if not letter and number: - # We assume if we are given a number, but we are not given a letter - # then this is using the implicit post release syntax (e.g. 1.0-1) - letter = "post" - - return letter, int(number) - - -_local_version_separators = re.compile(r"[\._-]") - - -def _parse_local_version(local): - """ - Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). - """ - if local is not None: - return tuple( - part.lower() if not part.isdigit() else int(part) - for part in _local_version_separators.split(local) - ) - - -def _cmpkey(epoch, release, pre, post, dev, local): - # When we compare a release version, we want to compare it with all of the - # trailing zeros removed. So we'll use a reverse the list, drop all the now - # leading zeros until we come to something non zero, then take the rest - # re-reverse it back into the correct order and make it a tuple and use - # that for our sorting key. - release = tuple( - reversed(list( - itertools.dropwhile( - lambda x: x == 0, - reversed(release), - ) - )) - ) - - # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0. - # We'll do this by abusing the pre segment, but we _only_ want to do this - # if there is not a pre or a post segment. If we have one of those then - # the normal sorting rules will handle this case correctly. - if pre is None and post is None and dev is not None: - pre = -Infinity - # Versions without a pre-release (except as noted above) should sort after - # those with one. - elif pre is None: - pre = Infinity - - # Versions without a post segment should sort before those with one. - if post is None: - post = -Infinity - - # Versions without a development segment should sort after those with one. - if dev is None: - dev = Infinity - - if local is None: - # Versions without a local segment should sort before those with one. - local = -Infinity - else: - # Versions with a local segment need that segment parsed to implement - # the sorting rules in PEP440. - # - Alpha numeric segments sort before numeric segments - # - Alpha numeric segments sort lexicographically - # - Numeric segments sort numerically - # - Shorter versions sort before longer versions when the prefixes - # match exactly - local = tuple( - (i, "") if isinstance(i, int) else (-Infinity, i) - for i in local - ) - - return epoch, release, pre, post, dev, local diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/__init__.py deleted file mode 100644 index 19d3d05..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/__init__.py +++ /dev/null @@ -1,3125 +0,0 @@ -# coding: utf-8 -""" -Package resource API --------------------- - -A resource is a logical file contained within a package, or a logical -subdirectory thereof. The package resource API expects resource names -to have their path parts separated with ``/``, *not* whatever the local -path separator is. Do not use os.path operations to manipulate resource -names being passed into the API. - -The package resource API is designed to work with normal filesystem packages, -.egg files, and unpacked .egg files. It can also work in a limited way with -.zip files and with custom PEP 302 loaders that support the ``get_data()`` -method. -""" - -from __future__ import absolute_import - -import sys -import os -import io -import time -import re -import types -import zipfile -import zipimport -import warnings -import stat -import functools -import pkgutil -import operator -import platform -import collections -import plistlib -import email.parser -import errno -import tempfile -import textwrap -import itertools -import inspect -from pkgutil import get_importer - -try: - import _imp -except ImportError: - # Python 3.2 compatibility - import imp as _imp - -from pip._vendor import six -from pip._vendor.six.moves import urllib, map, filter - -# capture these to bypass sandboxing -from os import utime -try: - from os import mkdir, rename, unlink - WRITE_SUPPORT = True -except ImportError: - # no write support, probably under GAE - WRITE_SUPPORT = False - -from os import open as os_open -from os.path import isdir, split - -try: - import importlib.machinery as importlib_machinery - # access attribute to force import under delayed import mechanisms. - importlib_machinery.__name__ -except ImportError: - importlib_machinery = None - -from . import py31compat -from pip._vendor import appdirs -from pip._vendor import packaging -__import__('pip._vendor.packaging.version') -__import__('pip._vendor.packaging.specifiers') -__import__('pip._vendor.packaging.requirements') -__import__('pip._vendor.packaging.markers') - - -if (3, 0) < sys.version_info < (3, 3): - raise RuntimeError("Python 3.3 or later is required") - -if six.PY2: - # Those builtin exceptions are only defined in Python 3 - PermissionError = None - NotADirectoryError = None - -# declare some globals that will be defined later to -# satisfy the linters. -require = None -working_set = None -add_activation_listener = None -resources_stream = None -cleanup_resources = None -resource_dir = None -resource_stream = None -set_extraction_path = None -resource_isdir = None -resource_string = None -iter_entry_points = None -resource_listdir = None -resource_filename = None -resource_exists = None -_distribution_finders = None -_namespace_handlers = None -_namespace_packages = None - - -class PEP440Warning(RuntimeWarning): - """ - Used when there is an issue with a version or specifier not complying with - PEP 440. - """ - - -def parse_version(v): - try: - return packaging.version.Version(v) - except packaging.version.InvalidVersion: - return packaging.version.LegacyVersion(v) - - -_state_vars = {} - - -def _declare_state(vartype, **kw): - globals().update(kw) - _state_vars.update(dict.fromkeys(kw, vartype)) - - -def __getstate__(): - state = {} - g = globals() - for k, v in _state_vars.items(): - state[k] = g['_sget_' + v](g[k]) - return state - - -def __setstate__(state): - g = globals() - for k, v in state.items(): - g['_sset_' + _state_vars[k]](k, g[k], v) - return state - - -def _sget_dict(val): - return val.copy() - - -def _sset_dict(key, ob, state): - ob.clear() - ob.update(state) - - -def _sget_object(val): - return val.__getstate__() - - -def _sset_object(key, ob, state): - ob.__setstate__(state) - - -_sget_none = _sset_none = lambda *args: None - - -def get_supported_platform(): - """Return this platform's maximum compatible version. - - distutils.util.get_platform() normally reports the minimum version - of Mac OS X that would be required to *use* extensions produced by - distutils. But what we want when checking compatibility is to know the - version of Mac OS X that we are *running*. To allow usage of packages that - explicitly require a newer version of Mac OS X, we must also know the - current version of the OS. - - If this condition occurs for any other platform with a version in its - platform strings, this function should be extended accordingly. - """ - plat = get_build_platform() - m = macosVersionString.match(plat) - if m is not None and sys.platform == "darwin": - try: - plat = 'macosx-%s-%s' % ('.'.join(_macosx_vers()[:2]), m.group(3)) - except ValueError: - # not Mac OS X - pass - return plat - - -__all__ = [ - # Basic resource access and distribution/entry point discovery - 'require', 'run_script', 'get_provider', 'get_distribution', - 'load_entry_point', 'get_entry_map', 'get_entry_info', - 'iter_entry_points', - 'resource_string', 'resource_stream', 'resource_filename', - 'resource_listdir', 'resource_exists', 'resource_isdir', - - # Environmental control - 'declare_namespace', 'working_set', 'add_activation_listener', - 'find_distributions', 'set_extraction_path', 'cleanup_resources', - 'get_default_cache', - - # Primary implementation classes - 'Environment', 'WorkingSet', 'ResourceManager', - 'Distribution', 'Requirement', 'EntryPoint', - - # Exceptions - 'ResolutionError', 'VersionConflict', 'DistributionNotFound', - 'UnknownExtra', 'ExtractionError', - - # Warnings - 'PEP440Warning', - - # Parsing functions and string utilities - 'parse_requirements', 'parse_version', 'safe_name', 'safe_version', - 'get_platform', 'compatible_platforms', 'yield_lines', 'split_sections', - 'safe_extra', 'to_filename', 'invalid_marker', 'evaluate_marker', - - # filesystem utilities - 'ensure_directory', 'normalize_path', - - # Distribution "precedence" constants - 'EGG_DIST', 'BINARY_DIST', 'SOURCE_DIST', 'CHECKOUT_DIST', 'DEVELOP_DIST', - - # "Provider" interfaces, implementations, and registration/lookup APIs - 'IMetadataProvider', 'IResourceProvider', 'FileMetadata', - 'PathMetadata', 'EggMetadata', 'EmptyProvider', 'empty_provider', - 'NullProvider', 'EggProvider', 'DefaultProvider', 'ZipProvider', - 'register_finder', 'register_namespace_handler', 'register_loader_type', - 'fixup_namespace_packages', 'get_importer', - - # Deprecated/backward compatibility only - 'run_main', 'AvailableDistributions', -] - - -class ResolutionError(Exception): - """Abstract base for dependency resolution errors""" - - def __repr__(self): - return self.__class__.__name__ + repr(self.args) - - -class VersionConflict(ResolutionError): - """ - An already-installed version conflicts with the requested version. - - Should be initialized with the installed Distribution and the requested - Requirement. - """ - - _template = "{self.dist} is installed but {self.req} is required" - - @property - def dist(self): - return self.args[0] - - @property - def req(self): - return self.args[1] - - def report(self): - return self._template.format(**locals()) - - def with_context(self, required_by): - """ - If required_by is non-empty, return a version of self that is a - ContextualVersionConflict. - """ - if not required_by: - return self - args = self.args + (required_by,) - return ContextualVersionConflict(*args) - - -class ContextualVersionConflict(VersionConflict): - """ - A VersionConflict that accepts a third parameter, the set of the - requirements that required the installed Distribution. - """ - - _template = VersionConflict._template + ' by {self.required_by}' - - @property - def required_by(self): - return self.args[2] - - -class DistributionNotFound(ResolutionError): - """A requested distribution was not found""" - - _template = ("The '{self.req}' distribution was not found " - "and is required by {self.requirers_str}") - - @property - def req(self): - return self.args[0] - - @property - def requirers(self): - return self.args[1] - - @property - def requirers_str(self): - if not self.requirers: - return 'the application' - return ', '.join(self.requirers) - - def report(self): - return self._template.format(**locals()) - - def __str__(self): - return self.report() - - -class UnknownExtra(ResolutionError): - """Distribution doesn't have an "extra feature" of the given name""" - - -_provider_factories = {} - -PY_MAJOR = sys.version[:3] -EGG_DIST = 3 -BINARY_DIST = 2 -SOURCE_DIST = 1 -CHECKOUT_DIST = 0 -DEVELOP_DIST = -1 - - -def register_loader_type(loader_type, provider_factory): - """Register `provider_factory` to make providers for `loader_type` - - `loader_type` is the type or class of a PEP 302 ``module.__loader__``, - and `provider_factory` is a function that, passed a *module* object, - returns an ``IResourceProvider`` for that module. - """ - _provider_factories[loader_type] = provider_factory - - -def get_provider(moduleOrReq): - """Return an IResourceProvider for the named module or requirement""" - if isinstance(moduleOrReq, Requirement): - return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] - try: - module = sys.modules[moduleOrReq] - except KeyError: - __import__(moduleOrReq) - module = sys.modules[moduleOrReq] - loader = getattr(module, '__loader__', None) - return _find_adapter(_provider_factories, loader)(module) - - -def _macosx_vers(_cache=[]): - if not _cache: - version = platform.mac_ver()[0] - # fallback for MacPorts - if version == '': - plist = '/System/Library/CoreServices/SystemVersion.plist' - if os.path.exists(plist): - if hasattr(plistlib, 'readPlist'): - plist_content = plistlib.readPlist(plist) - if 'ProductVersion' in plist_content: - version = plist_content['ProductVersion'] - - _cache.append(version.split('.')) - return _cache[0] - - -def _macosx_arch(machine): - return {'PowerPC': 'ppc', 'Power_Macintosh': 'ppc'}.get(machine, machine) - - -def get_build_platform(): - """Return this platform's string for platform-specific distributions - - XXX Currently this is the same as ``distutils.util.get_platform()``, but it - needs some hacks for Linux and Mac OS X. - """ - try: - # Python 2.7 or >=3.2 - from sysconfig import get_platform - except ImportError: - from distutils.util import get_platform - - plat = get_platform() - if sys.platform == "darwin" and not plat.startswith('macosx-'): - try: - version = _macosx_vers() - machine = os.uname()[4].replace(" ", "_") - return "macosx-%d.%d-%s" % ( - int(version[0]), int(version[1]), - _macosx_arch(machine), - ) - except ValueError: - # if someone is running a non-Mac darwin system, this will fall - # through to the default implementation - pass - return plat - - -macosVersionString = re.compile(r"macosx-(\d+)\.(\d+)-(.*)") -darwinVersionString = re.compile(r"darwin-(\d+)\.(\d+)\.(\d+)-(.*)") -# XXX backward compat -get_platform = get_build_platform - - -def compatible_platforms(provided, required): - """Can code for the `provided` platform run on the `required` platform? - - Returns true if either platform is ``None``, or the platforms are equal. - - XXX Needs compatibility checks for Linux and other unixy OSes. - """ - if provided is None or required is None or provided == required: - # easy case - return True - - # Mac OS X special cases - reqMac = macosVersionString.match(required) - if reqMac: - provMac = macosVersionString.match(provided) - - # is this a Mac package? - if not provMac: - # this is backwards compatibility for packages built before - # setuptools 0.6. All packages built after this point will - # use the new macosx designation. - provDarwin = darwinVersionString.match(provided) - if provDarwin: - dversion = int(provDarwin.group(1)) - macosversion = "%s.%s" % (reqMac.group(1), reqMac.group(2)) - if dversion == 7 and macosversion >= "10.3" or \ - dversion == 8 and macosversion >= "10.4": - return True - # egg isn't macosx or legacy darwin - return False - - # are they the same major version and machine type? - if provMac.group(1) != reqMac.group(1) or \ - provMac.group(3) != reqMac.group(3): - return False - - # is the required OS major update >= the provided one? - if int(provMac.group(2)) > int(reqMac.group(2)): - return False - - return True - - # XXX Linux and other platforms' special cases should go here - return False - - -def run_script(dist_spec, script_name): - """Locate distribution `dist_spec` and run its `script_name` script""" - ns = sys._getframe(1).f_globals - name = ns['__name__'] - ns.clear() - ns['__name__'] = name - require(dist_spec)[0].run_script(script_name, ns) - - -# backward compatibility -run_main = run_script - - -def get_distribution(dist): - """Return a current distribution object for a Requirement or string""" - if isinstance(dist, six.string_types): - dist = Requirement.parse(dist) - if isinstance(dist, Requirement): - dist = get_provider(dist) - if not isinstance(dist, Distribution): - raise TypeError("Expected string, Requirement, or Distribution", dist) - return dist - - -def load_entry_point(dist, group, name): - """Return `name` entry point of `group` for `dist` or raise ImportError""" - return get_distribution(dist).load_entry_point(group, name) - - -def get_entry_map(dist, group=None): - """Return the entry point map for `group`, or the full entry map""" - return get_distribution(dist).get_entry_map(group) - - -def get_entry_info(dist, group, name): - """Return the EntryPoint object for `group`+`name`, or ``None``""" - return get_distribution(dist).get_entry_info(group, name) - - -class IMetadataProvider: - def has_metadata(name): - """Does the package's distribution contain the named metadata?""" - - def get_metadata(name): - """The named metadata resource as a string""" - - def get_metadata_lines(name): - """Yield named metadata resource as list of non-blank non-comment lines - - Leading and trailing whitespace is stripped from each line, and lines - with ``#`` as the first non-blank character are omitted.""" - - def metadata_isdir(name): - """Is the named metadata a directory? (like ``os.path.isdir()``)""" - - def metadata_listdir(name): - """List of metadata names in the directory (like ``os.listdir()``)""" - - def run_script(script_name, namespace): - """Execute the named script in the supplied namespace dictionary""" - - -class IResourceProvider(IMetadataProvider): - """An object that provides access to package resources""" - - def get_resource_filename(manager, resource_name): - """Return a true filesystem path for `resource_name` - - `manager` must be an ``IResourceManager``""" - - def get_resource_stream(manager, resource_name): - """Return a readable file-like object for `resource_name` - - `manager` must be an ``IResourceManager``""" - - def get_resource_string(manager, resource_name): - """Return a string containing the contents of `resource_name` - - `manager` must be an ``IResourceManager``""" - - def has_resource(resource_name): - """Does the package contain the named resource?""" - - def resource_isdir(resource_name): - """Is the named resource a directory? (like ``os.path.isdir()``)""" - - def resource_listdir(resource_name): - """List of resource names in the directory (like ``os.listdir()``)""" - - -class WorkingSet(object): - """A collection of active distributions on sys.path (or a similar list)""" - - def __init__(self, entries=None): - """Create working set from list of path entries (default=sys.path)""" - self.entries = [] - self.entry_keys = {} - self.by_key = {} - self.callbacks = [] - - if entries is None: - entries = sys.path - - for entry in entries: - self.add_entry(entry) - - @classmethod - def _build_master(cls): - """ - Prepare the master working set. - """ - ws = cls() - try: - from __main__ import __requires__ - except ImportError: - # The main program does not list any requirements - return ws - - # ensure the requirements are met - try: - ws.require(__requires__) - except VersionConflict: - return cls._build_from_requirements(__requires__) - - return ws - - @classmethod - def _build_from_requirements(cls, req_spec): - """ - Build a working set from a requirement spec. Rewrites sys.path. - """ - # try it without defaults already on sys.path - # by starting with an empty path - ws = cls([]) - reqs = parse_requirements(req_spec) - dists = ws.resolve(reqs, Environment()) - for dist in dists: - ws.add(dist) - - # add any missing entries from sys.path - for entry in sys.path: - if entry not in ws.entries: - ws.add_entry(entry) - - # then copy back to sys.path - sys.path[:] = ws.entries - return ws - - def add_entry(self, entry): - """Add a path item to ``.entries``, finding any distributions on it - - ``find_distributions(entry, True)`` is used to find distributions - corresponding to the path entry, and they are added. `entry` is - always appended to ``.entries``, even if it is already present. - (This is because ``sys.path`` can contain the same value more than - once, and the ``.entries`` of the ``sys.path`` WorkingSet should always - equal ``sys.path``.) - """ - self.entry_keys.setdefault(entry, []) - self.entries.append(entry) - for dist in find_distributions(entry, True): - self.add(dist, entry, False) - - def __contains__(self, dist): - """True if `dist` is the active distribution for its project""" - return self.by_key.get(dist.key) == dist - - def find(self, req): - """Find a distribution matching requirement `req` - - If there is an active distribution for the requested project, this - returns it as long as it meets the version requirement specified by - `req`. But, if there is an active distribution for the project and it - does *not* meet the `req` requirement, ``VersionConflict`` is raised. - If there is no active distribution for the requested project, ``None`` - is returned. - """ - dist = self.by_key.get(req.key) - if dist is not None and dist not in req: - # XXX add more info - raise VersionConflict(dist, req) - return dist - - def iter_entry_points(self, group, name=None): - """Yield entry point objects from `group` matching `name` - - If `name` is None, yields all entry points in `group` from all - distributions in the working set, otherwise only ones matching - both `group` and `name` are yielded (in distribution order). - """ - for dist in self: - entries = dist.get_entry_map(group) - if name is None: - for ep in entries.values(): - yield ep - elif name in entries: - yield entries[name] - - def run_script(self, requires, script_name): - """Locate distribution for `requires` and run `script_name` script""" - ns = sys._getframe(1).f_globals - name = ns['__name__'] - ns.clear() - ns['__name__'] = name - self.require(requires)[0].run_script(script_name, ns) - - def __iter__(self): - """Yield distributions for non-duplicate projects in the working set - - The yield order is the order in which the items' path entries were - added to the working set. - """ - seen = {} - for item in self.entries: - if item not in self.entry_keys: - # workaround a cache issue - continue - - for key in self.entry_keys[item]: - if key not in seen: - seen[key] = 1 - yield self.by_key[key] - - def add(self, dist, entry=None, insert=True, replace=False): - """Add `dist` to working set, associated with `entry` - - If `entry` is unspecified, it defaults to the ``.location`` of `dist`. - On exit from this routine, `entry` is added to the end of the working - set's ``.entries`` (if it wasn't already present). - - `dist` is only added to the working set if it's for a project that - doesn't already have a distribution in the set, unless `replace=True`. - If it's added, any callbacks registered with the ``subscribe()`` method - will be called. - """ - if insert: - dist.insert_on(self.entries, entry, replace=replace) - - if entry is None: - entry = dist.location - keys = self.entry_keys.setdefault(entry, []) - keys2 = self.entry_keys.setdefault(dist.location, []) - if not replace and dist.key in self.by_key: - # ignore hidden distros - return - - self.by_key[dist.key] = dist - if dist.key not in keys: - keys.append(dist.key) - if dist.key not in keys2: - keys2.append(dist.key) - self._added_new(dist) - - def resolve(self, requirements, env=None, installer=None, - replace_conflicting=False, extras=None): - """List all distributions needed to (recursively) meet `requirements` - - `requirements` must be a sequence of ``Requirement`` objects. `env`, - if supplied, should be an ``Environment`` instance. If - not supplied, it defaults to all distributions available within any - entry or distribution in the working set. `installer`, if supplied, - will be invoked with each requirement that cannot be met by an - already-installed distribution; it should return a ``Distribution`` or - ``None``. - - Unless `replace_conflicting=True`, raises a VersionConflict exception - if - any requirements are found on the path that have the correct name but - the wrong version. Otherwise, if an `installer` is supplied it will be - invoked to obtain the correct version of the requirement and activate - it. - - `extras` is a list of the extras to be used with these requirements. - This is important because extra requirements may look like `my_req; - extra = "my_extra"`, which would otherwise be interpreted as a purely - optional requirement. Instead, we want to be able to assert that these - requirements are truly required. - """ - - # set up the stack - requirements = list(requirements)[::-1] - # set of processed requirements - processed = {} - # key -> dist - best = {} - to_activate = [] - - req_extras = _ReqExtras() - - # Mapping of requirement to set of distributions that required it; - # useful for reporting info about conflicts. - required_by = collections.defaultdict(set) - - while requirements: - # process dependencies breadth-first - req = requirements.pop(0) - if req in processed: - # Ignore cyclic or redundant dependencies - continue - - if not req_extras.markers_pass(req, extras): - continue - - dist = best.get(req.key) - if dist is None: - # Find the best distribution and add it to the map - dist = self.by_key.get(req.key) - if dist is None or (dist not in req and replace_conflicting): - ws = self - if env is None: - if dist is None: - env = Environment(self.entries) - else: - # Use an empty environment and workingset to avoid - # any further conflicts with the conflicting - # distribution - env = Environment([]) - ws = WorkingSet([]) - dist = best[req.key] = env.best_match( - req, ws, installer, - replace_conflicting=replace_conflicting - ) - if dist is None: - requirers = required_by.get(req, None) - raise DistributionNotFound(req, requirers) - to_activate.append(dist) - if dist not in req: - # Oops, the "best" so far conflicts with a dependency - dependent_req = required_by[req] - raise VersionConflict(dist, req).with_context(dependent_req) - - # push the new requirements onto the stack - new_requirements = dist.requires(req.extras)[::-1] - requirements.extend(new_requirements) - - # Register the new requirements needed by req - for new_requirement in new_requirements: - required_by[new_requirement].add(req.project_name) - req_extras[new_requirement] = req.extras - - processed[req] = True - - # return list of distros to activate - return to_activate - - def find_plugins( - self, plugin_env, full_env=None, installer=None, fallback=True): - """Find all activatable distributions in `plugin_env` - - Example usage:: - - distributions, errors = working_set.find_plugins( - Environment(plugin_dirlist) - ) - # add plugins+libs to sys.path - map(working_set.add, distributions) - # display errors - print('Could not load', errors) - - The `plugin_env` should be an ``Environment`` instance that contains - only distributions that are in the project's "plugin directory" or - directories. The `full_env`, if supplied, should be an ``Environment`` - contains all currently-available distributions. If `full_env` is not - supplied, one is created automatically from the ``WorkingSet`` this - method is called on, which will typically mean that every directory on - ``sys.path`` will be scanned for distributions. - - `installer` is a standard installer callback as used by the - ``resolve()`` method. The `fallback` flag indicates whether we should - attempt to resolve older versions of a plugin if the newest version - cannot be resolved. - - This method returns a 2-tuple: (`distributions`, `error_info`), where - `distributions` is a list of the distributions found in `plugin_env` - that were loadable, along with any other distributions that are needed - to resolve their dependencies. `error_info` is a dictionary mapping - unloadable plugin distributions to an exception instance describing the - error that occurred. Usually this will be a ``DistributionNotFound`` or - ``VersionConflict`` instance. - """ - - plugin_projects = list(plugin_env) - # scan project names in alphabetic order - plugin_projects.sort() - - error_info = {} - distributions = {} - - if full_env is None: - env = Environment(self.entries) - env += plugin_env - else: - env = full_env + plugin_env - - shadow_set = self.__class__([]) - # put all our entries in shadow_set - list(map(shadow_set.add, self)) - - for project_name in plugin_projects: - - for dist in plugin_env[project_name]: - - req = [dist.as_requirement()] - - try: - resolvees = shadow_set.resolve(req, env, installer) - - except ResolutionError as v: - # save error info - error_info[dist] = v - if fallback: - # try the next older version of project - continue - else: - # give up on this project, keep going - break - - else: - list(map(shadow_set.add, resolvees)) - distributions.update(dict.fromkeys(resolvees)) - - # success, no need to try any more versions of this project - break - - distributions = list(distributions) - distributions.sort() - - return distributions, error_info - - def require(self, *requirements): - """Ensure that distributions matching `requirements` are activated - - `requirements` must be a string or a (possibly-nested) sequence - thereof, specifying the distributions and versions required. The - return value is a sequence of the distributions that needed to be - activated to fulfill the requirements; all relevant distributions are - included, even if they were already activated in this working set. - """ - needed = self.resolve(parse_requirements(requirements)) - - for dist in needed: - self.add(dist) - - return needed - - def subscribe(self, callback, existing=True): - """Invoke `callback` for all distributions - - If `existing=True` (default), - call on all existing ones, as well. - """ - if callback in self.callbacks: - return - self.callbacks.append(callback) - if not existing: - return - for dist in self: - callback(dist) - - def _added_new(self, dist): - for callback in self.callbacks: - callback(dist) - - def __getstate__(self): - return ( - self.entries[:], self.entry_keys.copy(), self.by_key.copy(), - self.callbacks[:] - ) - - def __setstate__(self, e_k_b_c): - entries, keys, by_key, callbacks = e_k_b_c - self.entries = entries[:] - self.entry_keys = keys.copy() - self.by_key = by_key.copy() - self.callbacks = callbacks[:] - - -class _ReqExtras(dict): - """ - Map each requirement to the extras that demanded it. - """ - - def markers_pass(self, req, extras=None): - """ - Evaluate markers for req against each extra that - demanded it. - - Return False if the req has a marker and fails - evaluation. Otherwise, return True. - """ - extra_evals = ( - req.marker.evaluate({'extra': extra}) - for extra in self.get(req, ()) + (extras or (None,)) - ) - return not req.marker or any(extra_evals) - - -class Environment(object): - """Searchable snapshot of distributions on a search path""" - - def __init__( - self, search_path=None, platform=get_supported_platform(), - python=PY_MAJOR): - """Snapshot distributions available on a search path - - Any distributions found on `search_path` are added to the environment. - `search_path` should be a sequence of ``sys.path`` items. If not - supplied, ``sys.path`` is used. - - `platform` is an optional string specifying the name of the platform - that platform-specific distributions must be compatible with. If - unspecified, it defaults to the current platform. `python` is an - optional string naming the desired version of Python (e.g. ``'3.3'``); - it defaults to the current version. - - You may explicitly set `platform` (and/or `python`) to ``None`` if you - wish to map *all* distributions, not just those compatible with the - running platform or Python version. - """ - self._distmap = {} - self.platform = platform - self.python = python - self.scan(search_path) - - def can_add(self, dist): - """Is distribution `dist` acceptable for this environment? - - The distribution must match the platform and python version - requirements specified when this environment was created, or False - is returned. - """ - py_compat = ( - self.python is None - or dist.py_version is None - or dist.py_version == self.python - ) - return py_compat and compatible_platforms(dist.platform, self.platform) - - def remove(self, dist): - """Remove `dist` from the environment""" - self._distmap[dist.key].remove(dist) - - def scan(self, search_path=None): - """Scan `search_path` for distributions usable in this environment - - Any distributions found are added to the environment. - `search_path` should be a sequence of ``sys.path`` items. If not - supplied, ``sys.path`` is used. Only distributions conforming to - the platform/python version defined at initialization are added. - """ - if search_path is None: - search_path = sys.path - - for item in search_path: - for dist in find_distributions(item): - self.add(dist) - - def __getitem__(self, project_name): - """Return a newest-to-oldest list of distributions for `project_name` - - Uses case-insensitive `project_name` comparison, assuming all the - project's distributions use their project's name converted to all - lowercase as their key. - - """ - distribution_key = project_name.lower() - return self._distmap.get(distribution_key, []) - - def add(self, dist): - """Add `dist` if we ``can_add()`` it and it has not already been added - """ - if self.can_add(dist) and dist.has_version(): - dists = self._distmap.setdefault(dist.key, []) - if dist not in dists: - dists.append(dist) - dists.sort(key=operator.attrgetter('hashcmp'), reverse=True) - - def best_match( - self, req, working_set, installer=None, replace_conflicting=False): - """Find distribution best matching `req` and usable on `working_set` - - This calls the ``find(req)`` method of the `working_set` to see if a - suitable distribution is already active. (This may raise - ``VersionConflict`` if an unsuitable version of the project is already - active in the specified `working_set`.) If a suitable distribution - isn't active, this method returns the newest distribution in the - environment that meets the ``Requirement`` in `req`. If no suitable - distribution is found, and `installer` is supplied, then the result of - calling the environment's ``obtain(req, installer)`` method will be - returned. - """ - try: - dist = working_set.find(req) - except VersionConflict: - if not replace_conflicting: - raise - dist = None - if dist is not None: - return dist - for dist in self[req.key]: - if dist in req: - return dist - # try to download/install - return self.obtain(req, installer) - - def obtain(self, requirement, installer=None): - """Obtain a distribution matching `requirement` (e.g. via download) - - Obtain a distro that matches requirement (e.g. via download). In the - base ``Environment`` class, this routine just returns - ``installer(requirement)``, unless `installer` is None, in which case - None is returned instead. This method is a hook that allows subclasses - to attempt other ways of obtaining a distribution before falling back - to the `installer` argument.""" - if installer is not None: - return installer(requirement) - - def __iter__(self): - """Yield the unique project names of the available distributions""" - for key in self._distmap.keys(): - if self[key]: - yield key - - def __iadd__(self, other): - """In-place addition of a distribution or environment""" - if isinstance(other, Distribution): - self.add(other) - elif isinstance(other, Environment): - for project in other: - for dist in other[project]: - self.add(dist) - else: - raise TypeError("Can't add %r to environment" % (other,)) - return self - - def __add__(self, other): - """Add an environment or distribution to an environment""" - new = self.__class__([], platform=None, python=None) - for env in self, other: - new += env - return new - - -# XXX backward compatibility -AvailableDistributions = Environment - - -class ExtractionError(RuntimeError): - """An error occurred extracting a resource - - The following attributes are available from instances of this exception: - - manager - The resource manager that raised this exception - - cache_path - The base directory for resource extraction - - original_error - The exception instance that caused extraction to fail - """ - - -class ResourceManager: - """Manage resource extraction and packages""" - extraction_path = None - - def __init__(self): - self.cached_files = {} - - def resource_exists(self, package_or_requirement, resource_name): - """Does the named resource exist?""" - return get_provider(package_or_requirement).has_resource(resource_name) - - def resource_isdir(self, package_or_requirement, resource_name): - """Is the named resource an existing directory?""" - return get_provider(package_or_requirement).resource_isdir( - resource_name - ) - - def resource_filename(self, package_or_requirement, resource_name): - """Return a true filesystem path for specified resource""" - return get_provider(package_or_requirement).get_resource_filename( - self, resource_name - ) - - def resource_stream(self, package_or_requirement, resource_name): - """Return a readable file-like object for specified resource""" - return get_provider(package_or_requirement).get_resource_stream( - self, resource_name - ) - - def resource_string(self, package_or_requirement, resource_name): - """Return specified resource as a string""" - return get_provider(package_or_requirement).get_resource_string( - self, resource_name - ) - - def resource_listdir(self, package_or_requirement, resource_name): - """List the contents of the named resource directory""" - return get_provider(package_or_requirement).resource_listdir( - resource_name - ) - - def extraction_error(self): - """Give an error message for problems extracting file(s)""" - - old_exc = sys.exc_info()[1] - cache_path = self.extraction_path or get_default_cache() - - tmpl = textwrap.dedent(""" - Can't extract file(s) to egg cache - - The following error occurred while trying to extract file(s) - to the Python egg cache: - - {old_exc} - - The Python egg cache directory is currently set to: - - {cache_path} - - Perhaps your account does not have write access to this directory? - You can change the cache directory by setting the PYTHON_EGG_CACHE - environment variable to point to an accessible directory. - """).lstrip() - err = ExtractionError(tmpl.format(**locals())) - err.manager = self - err.cache_path = cache_path - err.original_error = old_exc - raise err - - def get_cache_path(self, archive_name, names=()): - """Return absolute location in cache for `archive_name` and `names` - - The parent directory of the resulting path will be created if it does - not already exist. `archive_name` should be the base filename of the - enclosing egg (which may not be the name of the enclosing zipfile!), - including its ".egg" extension. `names`, if provided, should be a - sequence of path name parts "under" the egg's extraction location. - - This method should only be called by resource providers that need to - obtain an extraction location, and only for names they intend to - extract, as it tracks the generated names for possible cleanup later. - """ - extract_path = self.extraction_path or get_default_cache() - target_path = os.path.join(extract_path, archive_name + '-tmp', *names) - try: - _bypass_ensure_directory(target_path) - except Exception: - self.extraction_error() - - self._warn_unsafe_extraction_path(extract_path) - - self.cached_files[target_path] = 1 - return target_path - - @staticmethod - def _warn_unsafe_extraction_path(path): - """ - If the default extraction path is overridden and set to an insecure - location, such as /tmp, it opens up an opportunity for an attacker to - replace an extracted file with an unauthorized payload. Warn the user - if a known insecure location is used. - - See Distribute #375 for more details. - """ - if os.name == 'nt' and not path.startswith(os.environ['windir']): - # On Windows, permissions are generally restrictive by default - # and temp directories are not writable by other users, so - # bypass the warning. - return - mode = os.stat(path).st_mode - if mode & stat.S_IWOTH or mode & stat.S_IWGRP: - msg = ( - "%s is writable by group/others and vulnerable to attack " - "when " - "used with get_resource_filename. Consider a more secure " - "location (set with .set_extraction_path or the " - "PYTHON_EGG_CACHE environment variable)." % path - ) - warnings.warn(msg, UserWarning) - - def postprocess(self, tempname, filename): - """Perform any platform-specific postprocessing of `tempname` - - This is where Mac header rewrites should be done; other platforms don't - have anything special they should do. - - Resource providers should call this method ONLY after successfully - extracting a compressed resource. They must NOT call it on resources - that are already in the filesystem. - - `tempname` is the current (temporary) name of the file, and `filename` - is the name it will be renamed to by the caller after this routine - returns. - """ - - if os.name == 'posix': - # Make the resource executable - mode = ((os.stat(tempname).st_mode) | 0o555) & 0o7777 - os.chmod(tempname, mode) - - def set_extraction_path(self, path): - """Set the base path where resources will be extracted to, if needed. - - If you do not call this routine before any extractions take place, the - path defaults to the return value of ``get_default_cache()``. (Which - is based on the ``PYTHON_EGG_CACHE`` environment variable, with various - platform-specific fallbacks. See that routine's documentation for more - details.) - - Resources are extracted to subdirectories of this path based upon - information given by the ``IResourceProvider``. You may set this to a - temporary directory, but then you must call ``cleanup_resources()`` to - delete the extracted files when done. There is no guarantee that - ``cleanup_resources()`` will be able to remove all extracted files. - - (Note: you may not change the extraction path for a given resource - manager once resources have been extracted, unless you first call - ``cleanup_resources()``.) - """ - if self.cached_files: - raise ValueError( - "Can't change extraction path, files already extracted" - ) - - self.extraction_path = path - - def cleanup_resources(self, force=False): - """ - Delete all extracted resource files and directories, returning a list - of the file and directory names that could not be successfully removed. - This function does not have any concurrency protection, so it should - generally only be called when the extraction path is a temporary - directory exclusive to a single process. This method is not - automatically called; you must call it explicitly or register it as an - ``atexit`` function if you wish to ensure cleanup of a temporary - directory used for extractions. - """ - # XXX - - -def get_default_cache(): - """ - Return the ``PYTHON_EGG_CACHE`` environment variable - or a platform-relevant user cache dir for an app - named "Python-Eggs". - """ - return ( - os.environ.get('PYTHON_EGG_CACHE') - or appdirs.user_cache_dir(appname='Python-Eggs') - ) - - -def safe_name(name): - """Convert an arbitrary string to a standard distribution name - - Any runs of non-alphanumeric/. characters are replaced with a single '-'. - """ - return re.sub('[^A-Za-z0-9.]+', '-', name) - - -def safe_version(version): - """ - Convert an arbitrary string to a standard version string - """ - try: - # normalize the version - return str(packaging.version.Version(version)) - except packaging.version.InvalidVersion: - version = version.replace(' ', '.') - return re.sub('[^A-Za-z0-9.]+', '-', version) - - -def safe_extra(extra): - """Convert an arbitrary string to a standard 'extra' name - - Any runs of non-alphanumeric characters are replaced with a single '_', - and the result is always lowercased. - """ - return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower() - - -def to_filename(name): - """Convert a project or version name to its filename-escaped form - - Any '-' characters are currently replaced with '_'. - """ - return name.replace('-', '_') - - -def invalid_marker(text): - """ - Validate text as a PEP 508 environment marker; return an exception - if invalid or False otherwise. - """ - try: - evaluate_marker(text) - except SyntaxError as e: - e.filename = None - e.lineno = None - return e - return False - - -def evaluate_marker(text, extra=None): - """ - Evaluate a PEP 508 environment marker. - Return a boolean indicating the marker result in this environment. - Raise SyntaxError if marker is invalid. - - This implementation uses the 'pyparsing' module. - """ - try: - marker = packaging.markers.Marker(text) - return marker.evaluate() - except packaging.markers.InvalidMarker as e: - raise SyntaxError(e) - - -class NullProvider: - """Try to implement resources and metadata for arbitrary PEP 302 loaders""" - - egg_name = None - egg_info = None - loader = None - - def __init__(self, module): - self.loader = getattr(module, '__loader__', None) - self.module_path = os.path.dirname(getattr(module, '__file__', '')) - - def get_resource_filename(self, manager, resource_name): - return self._fn(self.module_path, resource_name) - - def get_resource_stream(self, manager, resource_name): - return io.BytesIO(self.get_resource_string(manager, resource_name)) - - def get_resource_string(self, manager, resource_name): - return self._get(self._fn(self.module_path, resource_name)) - - def has_resource(self, resource_name): - return self._has(self._fn(self.module_path, resource_name)) - - def has_metadata(self, name): - return self.egg_info and self._has(self._fn(self.egg_info, name)) - - def get_metadata(self, name): - if not self.egg_info: - return "" - value = self._get(self._fn(self.egg_info, name)) - return value.decode('utf-8') if six.PY3 else value - - def get_metadata_lines(self, name): - return yield_lines(self.get_metadata(name)) - - def resource_isdir(self, resource_name): - return self._isdir(self._fn(self.module_path, resource_name)) - - def metadata_isdir(self, name): - return self.egg_info and self._isdir(self._fn(self.egg_info, name)) - - def resource_listdir(self, resource_name): - return self._listdir(self._fn(self.module_path, resource_name)) - - def metadata_listdir(self, name): - if self.egg_info: - return self._listdir(self._fn(self.egg_info, name)) - return [] - - def run_script(self, script_name, namespace): - script = 'scripts/' + script_name - if not self.has_metadata(script): - raise ResolutionError( - "Script {script!r} not found in metadata at {self.egg_info!r}" - .format(**locals()), - ) - script_text = self.get_metadata(script).replace('\r\n', '\n') - script_text = script_text.replace('\r', '\n') - script_filename = self._fn(self.egg_info, script) - namespace['__file__'] = script_filename - if os.path.exists(script_filename): - source = open(script_filename).read() - code = compile(source, script_filename, 'exec') - exec(code, namespace, namespace) - else: - from linecache import cache - cache[script_filename] = ( - len(script_text), 0, script_text.split('\n'), script_filename - ) - script_code = compile(script_text, script_filename, 'exec') - exec(script_code, namespace, namespace) - - def _has(self, path): - raise NotImplementedError( - "Can't perform this operation for unregistered loader type" - ) - - def _isdir(self, path): - raise NotImplementedError( - "Can't perform this operation for unregistered loader type" - ) - - def _listdir(self, path): - raise NotImplementedError( - "Can't perform this operation for unregistered loader type" - ) - - def _fn(self, base, resource_name): - if resource_name: - return os.path.join(base, *resource_name.split('/')) - return base - - def _get(self, path): - if hasattr(self.loader, 'get_data'): - return self.loader.get_data(path) - raise NotImplementedError( - "Can't perform this operation for loaders without 'get_data()'" - ) - - -register_loader_type(object, NullProvider) - - -class EggProvider(NullProvider): - """Provider based on a virtual filesystem""" - - def __init__(self, module): - NullProvider.__init__(self, module) - self._setup_prefix() - - def _setup_prefix(self): - # we assume here that our metadata may be nested inside a "basket" - # of multiple eggs; that's why we use module_path instead of .archive - path = self.module_path - old = None - while path != old: - if _is_egg_path(path): - self.egg_name = os.path.basename(path) - self.egg_info = os.path.join(path, 'EGG-INFO') - self.egg_root = path - break - old = path - path, base = os.path.split(path) - - -class DefaultProvider(EggProvider): - """Provides access to package resources in the filesystem""" - - def _has(self, path): - return os.path.exists(path) - - def _isdir(self, path): - return os.path.isdir(path) - - def _listdir(self, path): - return os.listdir(path) - - def get_resource_stream(self, manager, resource_name): - return open(self._fn(self.module_path, resource_name), 'rb') - - def _get(self, path): - with open(path, 'rb') as stream: - return stream.read() - - @classmethod - def _register(cls): - loader_cls = getattr( - importlib_machinery, - 'SourceFileLoader', - type(None), - ) - register_loader_type(loader_cls, cls) - - -DefaultProvider._register() - - -class EmptyProvider(NullProvider): - """Provider that returns nothing for all requests""" - - module_path = None - - _isdir = _has = lambda self, path: False - - def _get(self, path): - return '' - - def _listdir(self, path): - return [] - - def __init__(self): - pass - - -empty_provider = EmptyProvider() - - -class ZipManifests(dict): - """ - zip manifest builder - """ - - @classmethod - def build(cls, path): - """ - Build a dictionary similar to the zipimport directory - caches, except instead of tuples, store ZipInfo objects. - - Use a platform-specific path separator (os.sep) for the path keys - for compatibility with pypy on Windows. - """ - with zipfile.ZipFile(path) as zfile: - items = ( - ( - name.replace('/', os.sep), - zfile.getinfo(name), - ) - for name in zfile.namelist() - ) - return dict(items) - - load = build - - -class MemoizedZipManifests(ZipManifests): - """ - Memoized zipfile manifests. - """ - manifest_mod = collections.namedtuple('manifest_mod', 'manifest mtime') - - def load(self, path): - """ - Load a manifest at path or return a suitable manifest already loaded. - """ - path = os.path.normpath(path) - mtime = os.stat(path).st_mtime - - if path not in self or self[path].mtime != mtime: - manifest = self.build(path) - self[path] = self.manifest_mod(manifest, mtime) - - return self[path].manifest - - -class ZipProvider(EggProvider): - """Resource support for zips and eggs""" - - eagers = None - _zip_manifests = MemoizedZipManifests() - - def __init__(self, module): - EggProvider.__init__(self, module) - self.zip_pre = self.loader.archive + os.sep - - def _zipinfo_name(self, fspath): - # Convert a virtual filename (full path to file) into a zipfile subpath - # usable with the zipimport directory cache for our target archive - fspath = fspath.rstrip(os.sep) - if fspath == self.loader.archive: - return '' - if fspath.startswith(self.zip_pre): - return fspath[len(self.zip_pre):] - raise AssertionError( - "%s is not a subpath of %s" % (fspath, self.zip_pre) - ) - - def _parts(self, zip_path): - # Convert a zipfile subpath into an egg-relative path part list. - # pseudo-fs path - fspath = self.zip_pre + zip_path - if fspath.startswith(self.egg_root + os.sep): - return fspath[len(self.egg_root) + 1:].split(os.sep) - raise AssertionError( - "%s is not a subpath of %s" % (fspath, self.egg_root) - ) - - @property - def zipinfo(self): - return self._zip_manifests.load(self.loader.archive) - - def get_resource_filename(self, manager, resource_name): - if not self.egg_name: - raise NotImplementedError( - "resource_filename() only supported for .egg, not .zip" - ) - # no need to lock for extraction, since we use temp names - zip_path = self._resource_to_zip(resource_name) - eagers = self._get_eager_resources() - if '/'.join(self._parts(zip_path)) in eagers: - for name in eagers: - self._extract_resource(manager, self._eager_to_zip(name)) - return self._extract_resource(manager, zip_path) - - @staticmethod - def _get_date_and_size(zip_stat): - size = zip_stat.file_size - # ymdhms+wday, yday, dst - date_time = zip_stat.date_time + (0, 0, -1) - # 1980 offset already done - timestamp = time.mktime(date_time) - return timestamp, size - - def _extract_resource(self, manager, zip_path): - - if zip_path in self._index(): - for name in self._index()[zip_path]: - last = self._extract_resource( - manager, os.path.join(zip_path, name) - ) - # return the extracted directory name - return os.path.dirname(last) - - timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) - - if not WRITE_SUPPORT: - raise IOError('"os.rename" and "os.unlink" are not supported ' - 'on this platform') - try: - - real_path = manager.get_cache_path( - self.egg_name, self._parts(zip_path) - ) - - if self._is_current(real_path, zip_path): - return real_path - - outf, tmpnam = _mkstemp( - ".$extract", - dir=os.path.dirname(real_path), - ) - os.write(outf, self.loader.get_data(zip_path)) - os.close(outf) - utime(tmpnam, (timestamp, timestamp)) - manager.postprocess(tmpnam, real_path) - - try: - rename(tmpnam, real_path) - - except os.error: - if os.path.isfile(real_path): - if self._is_current(real_path, zip_path): - # the file became current since it was checked above, - # so proceed. - return real_path - # Windows, del old file and retry - elif os.name == 'nt': - unlink(real_path) - rename(tmpnam, real_path) - return real_path - raise - - except os.error: - # report a user-friendly error - manager.extraction_error() - - return real_path - - def _is_current(self, file_path, zip_path): - """ - Return True if the file_path is current for this zip_path - """ - timestamp, size = self._get_date_and_size(self.zipinfo[zip_path]) - if not os.path.isfile(file_path): - return False - stat = os.stat(file_path) - if stat.st_size != size or stat.st_mtime != timestamp: - return False - # check that the contents match - zip_contents = self.loader.get_data(zip_path) - with open(file_path, 'rb') as f: - file_contents = f.read() - return zip_contents == file_contents - - def _get_eager_resources(self): - if self.eagers is None: - eagers = [] - for name in ('native_libs.txt', 'eager_resources.txt'): - if self.has_metadata(name): - eagers.extend(self.get_metadata_lines(name)) - self.eagers = eagers - return self.eagers - - def _index(self): - try: - return self._dirindex - except AttributeError: - ind = {} - for path in self.zipinfo: - parts = path.split(os.sep) - while parts: - parent = os.sep.join(parts[:-1]) - if parent in ind: - ind[parent].append(parts[-1]) - break - else: - ind[parent] = [parts.pop()] - self._dirindex = ind - return ind - - def _has(self, fspath): - zip_path = self._zipinfo_name(fspath) - return zip_path in self.zipinfo or zip_path in self._index() - - def _isdir(self, fspath): - return self._zipinfo_name(fspath) in self._index() - - def _listdir(self, fspath): - return list(self._index().get(self._zipinfo_name(fspath), ())) - - def _eager_to_zip(self, resource_name): - return self._zipinfo_name(self._fn(self.egg_root, resource_name)) - - def _resource_to_zip(self, resource_name): - return self._zipinfo_name(self._fn(self.module_path, resource_name)) - - -register_loader_type(zipimport.zipimporter, ZipProvider) - - -class FileMetadata(EmptyProvider): - """Metadata handler for standalone PKG-INFO files - - Usage:: - - metadata = FileMetadata("/path/to/PKG-INFO") - - This provider rejects all data and metadata requests except for PKG-INFO, - which is treated as existing, and will be the contents of the file at - the provided location. - """ - - def __init__(self, path): - self.path = path - - def has_metadata(self, name): - return name == 'PKG-INFO' and os.path.isfile(self.path) - - def get_metadata(self, name): - if name != 'PKG-INFO': - raise KeyError("No metadata except PKG-INFO is available") - - with io.open(self.path, encoding='utf-8', errors="replace") as f: - metadata = f.read() - self._warn_on_replacement(metadata) - return metadata - - def _warn_on_replacement(self, metadata): - # Python 2.7 compat for: replacement_char = '�' - replacement_char = b'\xef\xbf\xbd'.decode('utf-8') - if replacement_char in metadata: - tmpl = "{self.path} could not be properly decoded in UTF-8" - msg = tmpl.format(**locals()) - warnings.warn(msg) - - def get_metadata_lines(self, name): - return yield_lines(self.get_metadata(name)) - - -class PathMetadata(DefaultProvider): - """Metadata provider for egg directories - - Usage:: - - # Development eggs: - - egg_info = "/path/to/PackageName.egg-info" - base_dir = os.path.dirname(egg_info) - metadata = PathMetadata(base_dir, egg_info) - dist_name = os.path.splitext(os.path.basename(egg_info))[0] - dist = Distribution(basedir, project_name=dist_name, metadata=metadata) - - # Unpacked egg directories: - - egg_path = "/path/to/PackageName-ver-pyver-etc.egg" - metadata = PathMetadata(egg_path, os.path.join(egg_path,'EGG-INFO')) - dist = Distribution.from_filename(egg_path, metadata=metadata) - """ - - def __init__(self, path, egg_info): - self.module_path = path - self.egg_info = egg_info - - -class EggMetadata(ZipProvider): - """Metadata provider for .egg files""" - - def __init__(self, importer): - """Create a metadata provider from a zipimporter""" - - self.zip_pre = importer.archive + os.sep - self.loader = importer - if importer.prefix: - self.module_path = os.path.join(importer.archive, importer.prefix) - else: - self.module_path = importer.archive - self._setup_prefix() - - -_declare_state('dict', _distribution_finders={}) - - -def register_finder(importer_type, distribution_finder): - """Register `distribution_finder` to find distributions in sys.path items - - `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item - handler), and `distribution_finder` is a callable that, passed a path - item and the importer instance, yields ``Distribution`` instances found on - that path item. See ``pkg_resources.find_on_path`` for an example.""" - _distribution_finders[importer_type] = distribution_finder - - -def find_distributions(path_item, only=False): - """Yield distributions accessible via `path_item`""" - importer = get_importer(path_item) - finder = _find_adapter(_distribution_finders, importer) - return finder(importer, path_item, only) - - -def find_eggs_in_zip(importer, path_item, only=False): - """ - Find eggs in zip files; possibly multiple nested eggs. - """ - if importer.archive.endswith('.whl'): - # wheels are not supported with this finder - # they don't have PKG-INFO metadata, and won't ever contain eggs - return - metadata = EggMetadata(importer) - if metadata.has_metadata('PKG-INFO'): - yield Distribution.from_filename(path_item, metadata=metadata) - if only: - # don't yield nested distros - return - for subitem in metadata.resource_listdir('/'): - if _is_egg_path(subitem): - subpath = os.path.join(path_item, subitem) - dists = find_eggs_in_zip(zipimport.zipimporter(subpath), subpath) - for dist in dists: - yield dist - elif subitem.lower().endswith('.dist-info'): - subpath = os.path.join(path_item, subitem) - submeta = EggMetadata(zipimport.zipimporter(subpath)) - submeta.egg_info = subpath - yield Distribution.from_location(path_item, subitem, submeta) - - -register_finder(zipimport.zipimporter, find_eggs_in_zip) - - -def find_nothing(importer, path_item, only=False): - return () - - -register_finder(object, find_nothing) - - -def _by_version_descending(names): - """ - Given a list of filenames, return them in descending order - by version number. - - >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg' - >>> _by_version_descending(names) - ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar'] - >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg' - >>> _by_version_descending(names) - ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg'] - >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.post1.egg' - >>> _by_version_descending(names) - ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg'] - """ - def _by_version(name): - """ - Parse each component of the filename - """ - name, ext = os.path.splitext(name) - parts = itertools.chain(name.split('-'), [ext]) - return [packaging.version.parse(part) for part in parts] - - return sorted(names, key=_by_version, reverse=True) - - -def find_on_path(importer, path_item, only=False): - """Yield distributions accessible on a sys.path directory""" - path_item = _normalize_cached(path_item) - - if _is_unpacked_egg(path_item): - yield Distribution.from_filename( - path_item, metadata=PathMetadata( - path_item, os.path.join(path_item, 'EGG-INFO') - ) - ) - return - - entries = safe_listdir(path_item) - - # for performance, before sorting by version, - # screen entries for only those that will yield - # distributions - filtered = ( - entry - for entry in entries - if dist_factory(path_item, entry, only) - ) - - # scan for .egg and .egg-info in directory - path_item_entries = _by_version_descending(filtered) - for entry in path_item_entries: - fullpath = os.path.join(path_item, entry) - factory = dist_factory(path_item, entry, only) - for dist in factory(fullpath): - yield dist - - -def dist_factory(path_item, entry, only): - """ - Return a dist_factory for a path_item and entry - """ - lower = entry.lower() - is_meta = any(map(lower.endswith, ('.egg-info', '.dist-info'))) - return ( - distributions_from_metadata - if is_meta else - find_distributions - if not only and _is_egg_path(entry) else - resolve_egg_link - if not only and lower.endswith('.egg-link') else - NoDists() - ) - - -class NoDists: - """ - >>> bool(NoDists()) - False - - >>> list(NoDists()('anything')) - [] - """ - def __bool__(self): - return False - if six.PY2: - __nonzero__ = __bool__ - - def __call__(self, fullpath): - return iter(()) - - -def safe_listdir(path): - """ - Attempt to list contents of path, but suppress some exceptions. - """ - try: - return os.listdir(path) - except (PermissionError, NotADirectoryError): - pass - except OSError as e: - # Ignore the directory if does not exist, not a directory or - # permission denied - ignorable = ( - e.errno in (errno.ENOTDIR, errno.EACCES, errno.ENOENT) - # Python 2 on Windows needs to be handled this way :( - or getattr(e, "winerror", None) == 267 - ) - if not ignorable: - raise - return () - - -def distributions_from_metadata(path): - root = os.path.dirname(path) - if os.path.isdir(path): - if len(os.listdir(path)) == 0: - # empty metadata dir; skip - return - metadata = PathMetadata(root, path) - else: - metadata = FileMetadata(path) - entry = os.path.basename(path) - yield Distribution.from_location( - root, entry, metadata, precedence=DEVELOP_DIST, - ) - - -def non_empty_lines(path): - """ - Yield non-empty lines from file at path - """ - with open(path) as f: - for line in f: - line = line.strip() - if line: - yield line - - -def resolve_egg_link(path): - """ - Given a path to an .egg-link, resolve distributions - present in the referenced path. - """ - referenced_paths = non_empty_lines(path) - resolved_paths = ( - os.path.join(os.path.dirname(path), ref) - for ref in referenced_paths - ) - dist_groups = map(find_distributions, resolved_paths) - return next(dist_groups, ()) - - -register_finder(pkgutil.ImpImporter, find_on_path) - -if hasattr(importlib_machinery, 'FileFinder'): - register_finder(importlib_machinery.FileFinder, find_on_path) - -_declare_state('dict', _namespace_handlers={}) -_declare_state('dict', _namespace_packages={}) - - -def register_namespace_handler(importer_type, namespace_handler): - """Register `namespace_handler` to declare namespace packages - - `importer_type` is the type or class of a PEP 302 "Importer" (sys.path item - handler), and `namespace_handler` is a callable like this:: - - def namespace_handler(importer, path_entry, moduleName, module): - # return a path_entry to use for child packages - - Namespace handlers are only called if the importer object has already - agreed that it can handle the relevant path item, and they should only - return a subpath if the module __path__ does not already contain an - equivalent subpath. For an example namespace handler, see - ``pkg_resources.file_ns_handler``. - """ - _namespace_handlers[importer_type] = namespace_handler - - -def _handle_ns(packageName, path_item): - """Ensure that named package includes a subpath of path_item (if needed)""" - - importer = get_importer(path_item) - if importer is None: - return None - loader = importer.find_module(packageName) - if loader is None: - return None - module = sys.modules.get(packageName) - if module is None: - module = sys.modules[packageName] = types.ModuleType(packageName) - module.__path__ = [] - _set_parent_ns(packageName) - elif not hasattr(module, '__path__'): - raise TypeError("Not a package:", packageName) - handler = _find_adapter(_namespace_handlers, importer) - subpath = handler(importer, path_item, packageName, module) - if subpath is not None: - path = module.__path__ - path.append(subpath) - loader.load_module(packageName) - _rebuild_mod_path(path, packageName, module) - return subpath - - -def _rebuild_mod_path(orig_path, package_name, module): - """ - Rebuild module.__path__ ensuring that all entries are ordered - corresponding to their sys.path order - """ - sys_path = [_normalize_cached(p) for p in sys.path] - - def safe_sys_path_index(entry): - """ - Workaround for #520 and #513. - """ - try: - return sys_path.index(entry) - except ValueError: - return float('inf') - - def position_in_sys_path(path): - """ - Return the ordinal of the path based on its position in sys.path - """ - path_parts = path.split(os.sep) - module_parts = package_name.count('.') + 1 - parts = path_parts[:-module_parts] - return safe_sys_path_index(_normalize_cached(os.sep.join(parts))) - - if not isinstance(orig_path, list): - # Is this behavior useful when module.__path__ is not a list? - return - - orig_path.sort(key=position_in_sys_path) - module.__path__[:] = [_normalize_cached(p) for p in orig_path] - - -def declare_namespace(packageName): - """Declare that package 'packageName' is a namespace package""" - - _imp.acquire_lock() - try: - if packageName in _namespace_packages: - return - - path, parent = sys.path, None - if '.' in packageName: - parent = '.'.join(packageName.split('.')[:-1]) - declare_namespace(parent) - if parent not in _namespace_packages: - __import__(parent) - try: - path = sys.modules[parent].__path__ - except AttributeError: - raise TypeError("Not a package:", parent) - - # Track what packages are namespaces, so when new path items are added, - # they can be updated - _namespace_packages.setdefault(parent, []).append(packageName) - _namespace_packages.setdefault(packageName, []) - - for path_item in path: - # Ensure all the parent's path items are reflected in the child, - # if they apply - _handle_ns(packageName, path_item) - - finally: - _imp.release_lock() - - -def fixup_namespace_packages(path_item, parent=None): - """Ensure that previously-declared namespace packages include path_item""" - _imp.acquire_lock() - try: - for package in _namespace_packages.get(parent, ()): - subpath = _handle_ns(package, path_item) - if subpath: - fixup_namespace_packages(subpath, package) - finally: - _imp.release_lock() - - -def file_ns_handler(importer, path_item, packageName, module): - """Compute an ns-package subpath for a filesystem or zipfile importer""" - - subpath = os.path.join(path_item, packageName.split('.')[-1]) - normalized = _normalize_cached(subpath) - for item in module.__path__: - if _normalize_cached(item) == normalized: - break - else: - # Only return the path if it's not already there - return subpath - - -register_namespace_handler(pkgutil.ImpImporter, file_ns_handler) -register_namespace_handler(zipimport.zipimporter, file_ns_handler) - -if hasattr(importlib_machinery, 'FileFinder'): - register_namespace_handler(importlib_machinery.FileFinder, file_ns_handler) - - -def null_ns_handler(importer, path_item, packageName, module): - return None - - -register_namespace_handler(object, null_ns_handler) - - -def normalize_path(filename): - """Normalize a file/dir name for comparison purposes""" - return os.path.normcase(os.path.realpath(filename)) - - -def _normalize_cached(filename, _cache={}): - try: - return _cache[filename] - except KeyError: - _cache[filename] = result = normalize_path(filename) - return result - - -def _is_egg_path(path): - """ - Determine if given path appears to be an egg. - """ - return path.lower().endswith('.egg') - - -def _is_unpacked_egg(path): - """ - Determine if given path appears to be an unpacked egg. - """ - return ( - _is_egg_path(path) and - os.path.isfile(os.path.join(path, 'EGG-INFO', 'PKG-INFO')) - ) - - -def _set_parent_ns(packageName): - parts = packageName.split('.') - name = parts.pop() - if parts: - parent = '.'.join(parts) - setattr(sys.modules[parent], name, sys.modules[packageName]) - - -def yield_lines(strs): - """Yield non-empty/non-comment lines of a string or sequence""" - if isinstance(strs, six.string_types): - for s in strs.splitlines(): - s = s.strip() - # skip blank lines/comments - if s and not s.startswith('#'): - yield s - else: - for ss in strs: - for s in yield_lines(ss): - yield s - - -MODULE = re.compile(r"\w+(\.\w+)*$").match -EGG_NAME = re.compile( - r""" - (?P<name>[^-]+) ( - -(?P<ver>[^-]+) ( - -py(?P<pyver>[^-]+) ( - -(?P<plat>.+) - )? - )? - )? - """, - re.VERBOSE | re.IGNORECASE, -).match - - -class EntryPoint(object): - """Object representing an advertised importable object""" - - def __init__(self, name, module_name, attrs=(), extras=(), dist=None): - if not MODULE(module_name): - raise ValueError("Invalid module name", module_name) - self.name = name - self.module_name = module_name - self.attrs = tuple(attrs) - self.extras = tuple(extras) - self.dist = dist - - def __str__(self): - s = "%s = %s" % (self.name, self.module_name) - if self.attrs: - s += ':' + '.'.join(self.attrs) - if self.extras: - s += ' [%s]' % ','.join(self.extras) - return s - - def __repr__(self): - return "EntryPoint.parse(%r)" % str(self) - - def load(self, require=True, *args, **kwargs): - """ - Require packages for this EntryPoint, then resolve it. - """ - if not require or args or kwargs: - warnings.warn( - "Parameters to load are deprecated. Call .resolve and " - ".require separately.", - DeprecationWarning, - stacklevel=2, - ) - if require: - self.require(*args, **kwargs) - return self.resolve() - - def resolve(self): - """ - Resolve the entry point from its module and attrs. - """ - module = __import__(self.module_name, fromlist=['__name__'], level=0) - try: - return functools.reduce(getattr, self.attrs, module) - except AttributeError as exc: - raise ImportError(str(exc)) - - def require(self, env=None, installer=None): - if self.extras and not self.dist: - raise UnknownExtra("Can't require() without a distribution", self) - - # Get the requirements for this entry point with all its extras and - # then resolve them. We have to pass `extras` along when resolving so - # that the working set knows what extras we want. Otherwise, for - # dist-info distributions, the working set will assume that the - # requirements for that extra are purely optional and skip over them. - reqs = self.dist.requires(self.extras) - items = working_set.resolve(reqs, env, installer, extras=self.extras) - list(map(working_set.add, items)) - - pattern = re.compile( - r'\s*' - r'(?P<name>.+?)\s*' - r'=\s*' - r'(?P<module>[\w.]+)\s*' - r'(:\s*(?P<attr>[\w.]+))?\s*' - r'(?P<extras>\[.*\])?\s*$' - ) - - @classmethod - def parse(cls, src, dist=None): - """Parse a single entry point from string `src` - - Entry point syntax follows the form:: - - name = some.module:some.attr [extra1, extra2] - - The entry name and module name are required, but the ``:attrs`` and - ``[extras]`` parts are optional - """ - m = cls.pattern.match(src) - if not m: - msg = "EntryPoint must be in 'name=module:attrs [extras]' format" - raise ValueError(msg, src) - res = m.groupdict() - extras = cls._parse_extras(res['extras']) - attrs = res['attr'].split('.') if res['attr'] else () - return cls(res['name'], res['module'], attrs, extras, dist) - - @classmethod - def _parse_extras(cls, extras_spec): - if not extras_spec: - return () - req = Requirement.parse('x' + extras_spec) - if req.specs: - raise ValueError() - return req.extras - - @classmethod - def parse_group(cls, group, lines, dist=None): - """Parse an entry point group""" - if not MODULE(group): - raise ValueError("Invalid group name", group) - this = {} - for line in yield_lines(lines): - ep = cls.parse(line, dist) - if ep.name in this: - raise ValueError("Duplicate entry point", group, ep.name) - this[ep.name] = ep - return this - - @classmethod - def parse_map(cls, data, dist=None): - """Parse a map of entry point groups""" - if isinstance(data, dict): - data = data.items() - else: - data = split_sections(data) - maps = {} - for group, lines in data: - if group is None: - if not lines: - continue - raise ValueError("Entry points must be listed in groups") - group = group.strip() - if group in maps: - raise ValueError("Duplicate group name", group) - maps[group] = cls.parse_group(group, lines, dist) - return maps - - -def _remove_md5_fragment(location): - if not location: - return '' - parsed = urllib.parse.urlparse(location) - if parsed[-1].startswith('md5='): - return urllib.parse.urlunparse(parsed[:-1] + ('',)) - return location - - -def _version_from_file(lines): - """ - Given an iterable of lines from a Metadata file, return - the value of the Version field, if present, or None otherwise. - """ - def is_version_line(line): - return line.lower().startswith('version:') - version_lines = filter(is_version_line, lines) - line = next(iter(version_lines), '') - _, _, value = line.partition(':') - return safe_version(value.strip()) or None - - -class Distribution(object): - """Wrap an actual or potential sys.path entry w/metadata""" - PKG_INFO = 'PKG-INFO' - - def __init__( - self, location=None, metadata=None, project_name=None, - version=None, py_version=PY_MAJOR, platform=None, - precedence=EGG_DIST): - self.project_name = safe_name(project_name or 'Unknown') - if version is not None: - self._version = safe_version(version) - self.py_version = py_version - self.platform = platform - self.location = location - self.precedence = precedence - self._provider = metadata or empty_provider - - @classmethod - def from_location(cls, location, basename, metadata=None, **kw): - project_name, version, py_version, platform = [None] * 4 - basename, ext = os.path.splitext(basename) - if ext.lower() in _distributionImpl: - cls = _distributionImpl[ext.lower()] - - match = EGG_NAME(basename) - if match: - project_name, version, py_version, platform = match.group( - 'name', 'ver', 'pyver', 'plat' - ) - return cls( - location, metadata, project_name=project_name, version=version, - py_version=py_version, platform=platform, **kw - )._reload_version() - - def _reload_version(self): - return self - - @property - def hashcmp(self): - return ( - self.parsed_version, - self.precedence, - self.key, - _remove_md5_fragment(self.location), - self.py_version or '', - self.platform or '', - ) - - def __hash__(self): - return hash(self.hashcmp) - - def __lt__(self, other): - return self.hashcmp < other.hashcmp - - def __le__(self, other): - return self.hashcmp <= other.hashcmp - - def __gt__(self, other): - return self.hashcmp > other.hashcmp - - def __ge__(self, other): - return self.hashcmp >= other.hashcmp - - def __eq__(self, other): - if not isinstance(other, self.__class__): - # It's not a Distribution, so they are not equal - return False - return self.hashcmp == other.hashcmp - - def __ne__(self, other): - return not self == other - - # These properties have to be lazy so that we don't have to load any - # metadata until/unless it's actually needed. (i.e., some distributions - # may not know their name or version without loading PKG-INFO) - - @property - def key(self): - try: - return self._key - except AttributeError: - self._key = key = self.project_name.lower() - return key - - @property - def parsed_version(self): - if not hasattr(self, "_parsed_version"): - self._parsed_version = parse_version(self.version) - - return self._parsed_version - - def _warn_legacy_version(self): - LV = packaging.version.LegacyVersion - is_legacy = isinstance(self._parsed_version, LV) - if not is_legacy: - return - - # While an empty version is technically a legacy version and - # is not a valid PEP 440 version, it's also unlikely to - # actually come from someone and instead it is more likely that - # it comes from setuptools attempting to parse a filename and - # including it in the list. So for that we'll gate this warning - # on if the version is anything at all or not. - if not self.version: - return - - tmpl = textwrap.dedent(""" - '{project_name} ({version})' is being parsed as a legacy, - non PEP 440, - version. You may find odd behavior and sort order. - In particular it will be sorted as less than 0.0. It - is recommended to migrate to PEP 440 compatible - versions. - """).strip().replace('\n', ' ') - - warnings.warn(tmpl.format(**vars(self)), PEP440Warning) - - @property - def version(self): - try: - return self._version - except AttributeError: - version = _version_from_file(self._get_metadata(self.PKG_INFO)) - if version is None: - tmpl = "Missing 'Version:' header and/or %s file" - raise ValueError(tmpl % self.PKG_INFO, self) - return version - - @property - def _dep_map(self): - """ - A map of extra to its list of (direct) requirements - for this distribution, including the null extra. - """ - try: - return self.__dep_map - except AttributeError: - self.__dep_map = self._filter_extras(self._build_dep_map()) - return self.__dep_map - - @staticmethod - def _filter_extras(dm): - """ - Given a mapping of extras to dependencies, strip off - environment markers and filter out any dependencies - not matching the markers. - """ - for extra in list(filter(None, dm)): - new_extra = extra - reqs = dm.pop(extra) - new_extra, _, marker = extra.partition(':') - fails_marker = marker and ( - invalid_marker(marker) - or not evaluate_marker(marker) - ) - if fails_marker: - reqs = [] - new_extra = safe_extra(new_extra) or None - - dm.setdefault(new_extra, []).extend(reqs) - return dm - - def _build_dep_map(self): - dm = {} - for name in 'requires.txt', 'depends.txt': - for extra, reqs in split_sections(self._get_metadata(name)): - dm.setdefault(extra, []).extend(parse_requirements(reqs)) - return dm - - def requires(self, extras=()): - """List of Requirements needed for this distro if `extras` are used""" - dm = self._dep_map - deps = [] - deps.extend(dm.get(None, ())) - for ext in extras: - try: - deps.extend(dm[safe_extra(ext)]) - except KeyError: - raise UnknownExtra( - "%s has no such extra feature %r" % (self, ext) - ) - return deps - - def _get_metadata(self, name): - if self.has_metadata(name): - for line in self.get_metadata_lines(name): - yield line - - def activate(self, path=None, replace=False): - """Ensure distribution is importable on `path` (default=sys.path)""" - if path is None: - path = sys.path - self.insert_on(path, replace=replace) - if path is sys.path: - fixup_namespace_packages(self.location) - for pkg in self._get_metadata('namespace_packages.txt'): - if pkg in sys.modules: - declare_namespace(pkg) - - def egg_name(self): - """Return what this distribution's standard .egg filename should be""" - filename = "%s-%s-py%s" % ( - to_filename(self.project_name), to_filename(self.version), - self.py_version or PY_MAJOR - ) - - if self.platform: - filename += '-' + self.platform - return filename - - def __repr__(self): - if self.location: - return "%s (%s)" % (self, self.location) - else: - return str(self) - - def __str__(self): - try: - version = getattr(self, 'version', None) - except ValueError: - version = None - version = version or "[unknown version]" - return "%s %s" % (self.project_name, version) - - def __getattr__(self, attr): - """Delegate all unrecognized public attributes to .metadata provider""" - if attr.startswith('_'): - raise AttributeError(attr) - return getattr(self._provider, attr) - - @classmethod - def from_filename(cls, filename, metadata=None, **kw): - return cls.from_location( - _normalize_cached(filename), os.path.basename(filename), metadata, - **kw - ) - - def as_requirement(self): - """Return a ``Requirement`` that matches this distribution exactly""" - if isinstance(self.parsed_version, packaging.version.Version): - spec = "%s==%s" % (self.project_name, self.parsed_version) - else: - spec = "%s===%s" % (self.project_name, self.parsed_version) - - return Requirement.parse(spec) - - def load_entry_point(self, group, name): - """Return the `name` entry point of `group` or raise ImportError""" - ep = self.get_entry_info(group, name) - if ep is None: - raise ImportError("Entry point %r not found" % ((group, name),)) - return ep.load() - - def get_entry_map(self, group=None): - """Return the entry point map for `group`, or the full entry map""" - try: - ep_map = self._ep_map - except AttributeError: - ep_map = self._ep_map = EntryPoint.parse_map( - self._get_metadata('entry_points.txt'), self - ) - if group is not None: - return ep_map.get(group, {}) - return ep_map - - def get_entry_info(self, group, name): - """Return the EntryPoint object for `group`+`name`, or ``None``""" - return self.get_entry_map(group).get(name) - - def insert_on(self, path, loc=None, replace=False): - """Ensure self.location is on path - - If replace=False (default): - - If location is already in path anywhere, do nothing. - - Else: - - If it's an egg and its parent directory is on path, - insert just ahead of the parent. - - Else: add to the end of path. - If replace=True: - - If location is already on path anywhere (not eggs) - or higher priority than its parent (eggs) - do nothing. - - Else: - - If it's an egg and its parent directory is on path, - insert just ahead of the parent, - removing any lower-priority entries. - - Else: add it to the front of path. - """ - - loc = loc or self.location - if not loc: - return - - nloc = _normalize_cached(loc) - bdir = os.path.dirname(nloc) - npath = [(p and _normalize_cached(p) or p) for p in path] - - for p, item in enumerate(npath): - if item == nloc: - if replace: - break - else: - # don't modify path (even removing duplicates) if - # found and not replace - return - elif item == bdir and self.precedence == EGG_DIST: - # if it's an .egg, give it precedence over its directory - # UNLESS it's already been added to sys.path and replace=False - if (not replace) and nloc in npath[p:]: - return - if path is sys.path: - self.check_version_conflict() - path.insert(p, loc) - npath.insert(p, nloc) - break - else: - if path is sys.path: - self.check_version_conflict() - if replace: - path.insert(0, loc) - else: - path.append(loc) - return - - # p is the spot where we found or inserted loc; now remove duplicates - while True: - try: - np = npath.index(nloc, p + 1) - except ValueError: - break - else: - del npath[np], path[np] - # ha! - p = np - - return - - def check_version_conflict(self): - if self.key == 'setuptools': - # ignore the inevitable setuptools self-conflicts :( - return - - nsp = dict.fromkeys(self._get_metadata('namespace_packages.txt')) - loc = normalize_path(self.location) - for modname in self._get_metadata('top_level.txt'): - if (modname not in sys.modules or modname in nsp - or modname in _namespace_packages): - continue - if modname in ('pkg_resources', 'setuptools', 'site'): - continue - fn = getattr(sys.modules[modname], '__file__', None) - if fn and (normalize_path(fn).startswith(loc) or - fn.startswith(self.location)): - continue - issue_warning( - "Module %s was already imported from %s, but %s is being added" - " to sys.path" % (modname, fn, self.location), - ) - - def has_version(self): - try: - self.version - except ValueError: - issue_warning("Unbuilt egg for " + repr(self)) - return False - return True - - def clone(self, **kw): - """Copy this distribution, substituting in any changed keyword args""" - names = 'project_name version py_version platform location precedence' - for attr in names.split(): - kw.setdefault(attr, getattr(self, attr, None)) - kw.setdefault('metadata', self._provider) - return self.__class__(**kw) - - @property - def extras(self): - return [dep for dep in self._dep_map if dep] - - -class EggInfoDistribution(Distribution): - def _reload_version(self): - """ - Packages installed by distutils (e.g. numpy or scipy), - which uses an old safe_version, and so - their version numbers can get mangled when - converted to filenames (e.g., 1.11.0.dev0+2329eae to - 1.11.0.dev0_2329eae). These distributions will not be - parsed properly - downstream by Distribution and safe_version, so - take an extra step and try to get the version number from - the metadata file itself instead of the filename. - """ - md_version = _version_from_file(self._get_metadata(self.PKG_INFO)) - if md_version: - self._version = md_version - return self - - -class DistInfoDistribution(Distribution): - """ - Wrap an actual or potential sys.path entry - w/metadata, .dist-info style. - """ - PKG_INFO = 'METADATA' - EQEQ = re.compile(r"([\(,])\s*(\d.*?)\s*([,\)])") - - @property - def _parsed_pkg_info(self): - """Parse and cache metadata""" - try: - return self._pkg_info - except AttributeError: - metadata = self.get_metadata(self.PKG_INFO) - self._pkg_info = email.parser.Parser().parsestr(metadata) - return self._pkg_info - - @property - def _dep_map(self): - try: - return self.__dep_map - except AttributeError: - self.__dep_map = self._compute_dependencies() - return self.__dep_map - - def _compute_dependencies(self): - """Recompute this distribution's dependencies.""" - dm = self.__dep_map = {None: []} - - reqs = [] - # Including any condition expressions - for req in self._parsed_pkg_info.get_all('Requires-Dist') or []: - reqs.extend(parse_requirements(req)) - - def reqs_for_extra(extra): - for req in reqs: - if not req.marker or req.marker.evaluate({'extra': extra}): - yield req - - common = frozenset(reqs_for_extra(None)) - dm[None].extend(common) - - for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: - s_extra = safe_extra(extra.strip()) - dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) - - return dm - - -_distributionImpl = { - '.egg': Distribution, - '.egg-info': EggInfoDistribution, - '.dist-info': DistInfoDistribution, -} - - -def issue_warning(*args, **kw): - level = 1 - g = globals() - try: - # find the first stack frame that is *not* code in - # the pkg_resources module, to use for the warning - while sys._getframe(level).f_globals is g: - level += 1 - except ValueError: - pass - warnings.warn(stacklevel=level + 1, *args, **kw) - - -class RequirementParseError(ValueError): - def __str__(self): - return ' '.join(self.args) - - -def parse_requirements(strs): - """Yield ``Requirement`` objects for each specification in `strs` - - `strs` must be a string, or a (possibly-nested) iterable thereof. - """ - # create a steppable iterator, so we can handle \-continuations - lines = iter(yield_lines(strs)) - - for line in lines: - # Drop comments -- a hash without a space may be in a URL. - if ' #' in line: - line = line[:line.find(' #')] - # If there is a line continuation, drop it, and append the next line. - if line.endswith('\\'): - line = line[:-2].strip() - try: - line += next(lines) - except StopIteration: - return - yield Requirement(line) - - -class Requirement(packaging.requirements.Requirement): - def __init__(self, requirement_string): - """DO NOT CALL THIS UNDOCUMENTED METHOD; use Requirement.parse()!""" - try: - super(Requirement, self).__init__(requirement_string) - except packaging.requirements.InvalidRequirement as e: - raise RequirementParseError(str(e)) - self.unsafe_name = self.name - project_name = safe_name(self.name) - self.project_name, self.key = project_name, project_name.lower() - self.specs = [ - (spec.operator, spec.version) for spec in self.specifier] - self.extras = tuple(map(safe_extra, self.extras)) - self.hashCmp = ( - self.key, - self.specifier, - frozenset(self.extras), - str(self.marker) if self.marker else None, - ) - self.__hash = hash(self.hashCmp) - - def __eq__(self, other): - return ( - isinstance(other, Requirement) and - self.hashCmp == other.hashCmp - ) - - def __ne__(self, other): - return not self == other - - def __contains__(self, item): - if isinstance(item, Distribution): - if item.key != self.key: - return False - - item = item.version - - # Allow prereleases always in order to match the previous behavior of - # this method. In the future this should be smarter and follow PEP 440 - # more accurately. - return self.specifier.contains(item, prereleases=True) - - def __hash__(self): - return self.__hash - - def __repr__(self): - return "Requirement.parse(%r)" % str(self) - - @staticmethod - def parse(s): - req, = parse_requirements(s) - return req - - -def _always_object(classes): - """ - Ensure object appears in the mro even - for old-style classes. - """ - if object not in classes: - return classes + (object,) - return classes - - -def _find_adapter(registry, ob): - """Return an adapter factory for `ob` from `registry`""" - types = _always_object(inspect.getmro(getattr(ob, '__class__', type(ob)))) - for t in types: - if t in registry: - return registry[t] - - -def ensure_directory(path): - """Ensure that the parent directory of `path` exists""" - dirname = os.path.dirname(path) - py31compat.makedirs(dirname, exist_ok=True) - - -def _bypass_ensure_directory(path): - """Sandbox-bypassing version of ensure_directory()""" - if not WRITE_SUPPORT: - raise IOError('"os.mkdir" not supported on this platform.') - dirname, filename = split(path) - if dirname and filename and not isdir(dirname): - _bypass_ensure_directory(dirname) - mkdir(dirname, 0o755) - - -def split_sections(s): - """Split a string or iterable thereof into (section, content) pairs - - Each ``section`` is a stripped version of the section header ("[section]") - and each ``content`` is a list of stripped lines excluding blank lines and - comment-only lines. If there are any such lines before the first section - header, they're returned in a first ``section`` of ``None``. - """ - section = None - content = [] - for line in yield_lines(s): - if line.startswith("["): - if line.endswith("]"): - if section or content: - yield section, content - section = line[1:-1].strip() - content = [] - else: - raise ValueError("Invalid section heading", line) - else: - content.append(line) - - # wrap up last segment - yield section, content - - -def _mkstemp(*args, **kw): - old_open = os.open - try: - # temporarily bypass sandboxing - os.open = os_open - return tempfile.mkstemp(*args, **kw) - finally: - # and then put it back - os.open = old_open - - -# Silence the PEP440Warning by default, so that end users don't get hit by it -# randomly just because they use pkg_resources. We want to append the rule -# because we want earlier uses of filterwarnings to take precedence over this -# one. -warnings.filterwarnings("ignore", category=PEP440Warning, append=True) - - -# from jaraco.functools 1.3 -def _call_aside(f, *args, **kwargs): - f(*args, **kwargs) - return f - - -@_call_aside -def _initialize(g=globals()): - "Set up global resource manager (deliberately not state-saved)" - manager = ResourceManager() - g['_manager'] = manager - g.update( - (name, getattr(manager, name)) - for name in dir(manager) - if not name.startswith('_') - ) - - -@_call_aside -def _initialize_master_working_set(): - """ - Prepare the master working set and make the ``require()`` - API available. - - This function has explicit effects on the global state - of pkg_resources. It is intended to be invoked once at - the initialization of this module. - - Invocation by other packages is unsupported and done - at their own risk. - """ - working_set = WorkingSet._build_master() - _declare_state('object', working_set=working_set) - - require = working_set.require - iter_entry_points = working_set.iter_entry_points - add_activation_listener = working_set.subscribe - run_script = working_set.run_script - # backward compatibility - run_main = run_script - # Activate all distributions already on sys.path with replace=False and - # ensure that all distributions added to the working set in the future - # (e.g. by calling ``require()``) will get activated as well, - # with higher priority (replace=True). - tuple( - dist.activate(replace=False) - for dist in working_set - ) - add_activation_listener( - lambda dist: dist.activate(replace=True), - existing=False, - ) - working_set.entries = [] - # match order - list(map(working_set.add_entry, sys.path)) - globals().update(locals()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/py31compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/py31compat.py deleted file mode 100644 index 331a51b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pkg_resources/py31compat.py +++ /dev/null @@ -1,22 +0,0 @@ -import os -import errno -import sys - - -def _makedirs_31(path, exist_ok=False): - try: - os.makedirs(path) - except OSError as exc: - if not exist_ok or exc.errno != errno.EEXIST: - raise - - -# rely on compatibility behavior until mode considerations -# and exists_ok considerations are disentangled. -# See https://github.com/pypa/setuptools/pull/1083#issuecomment-315168663 -needs_makedirs = ( - sys.version_info < (3, 2, 5) or - (3, 3) <= sys.version_info < (3, 3, 6) or - (3, 4) <= sys.version_info < (3, 4, 1) -) -makedirs = _makedirs_31 if needs_makedirs else os.makedirs diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/__init__.py deleted file mode 100644 index 09dfc1e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/__init__.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import division - -from collections import deque -from datetime import timedelta -from math import ceil -from sys import stderr -from time import time - - -__version__ = '1.3' - - -class Infinite(object): - file = stderr - sma_window = 10 # Simple Moving Average window - - def __init__(self, *args, **kwargs): - self.index = 0 - self.start_ts = time() - self.avg = 0 - self._ts = self.start_ts - self._xput = deque(maxlen=self.sma_window) - for key, val in kwargs.items(): - setattr(self, key, val) - - def __getitem__(self, key): - if key.startswith('_'): - return None - return getattr(self, key, None) - - @property - def elapsed(self): - return int(time() - self.start_ts) - - @property - def elapsed_td(self): - return timedelta(seconds=self.elapsed) - - def update_avg(self, n, dt): - if n > 0: - self._xput.append(dt / n) - self.avg = sum(self._xput) / len(self._xput) - - def update(self): - pass - - def start(self): - pass - - def finish(self): - pass - - def next(self, n=1): - now = time() - dt = now - self._ts - self.update_avg(n, dt) - self._ts = now - self.index = self.index + n - self.update() - - def iter(self, it): - try: - for x in it: - yield x - self.next() - finally: - self.finish() - - -class Progress(Infinite): - def __init__(self, *args, **kwargs): - super(Progress, self).__init__(*args, **kwargs) - self.max = kwargs.get('max', 100) - - @property - def eta(self): - return int(ceil(self.avg * self.remaining)) - - @property - def eta_td(self): - return timedelta(seconds=self.eta) - - @property - def percent(self): - return self.progress * 100 - - @property - def progress(self): - return min(1, self.index / self.max) - - @property - def remaining(self): - return max(self.max - self.index, 0) - - def start(self): - self.update() - - def goto(self, index): - incr = index - self.index - self.next(incr) - - def iter(self, it): - try: - self.max = len(it) - except TypeError: - pass - - try: - for x in it: - yield x - self.next() - finally: - self.finish() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/bar.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/bar.py deleted file mode 100644 index 5ee968f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/bar.py +++ /dev/null @@ -1,88 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import unicode_literals -from . import Progress -from .helpers import WritelnMixin - - -class Bar(WritelnMixin, Progress): - width = 32 - message = '' - suffix = '%(index)d/%(max)d' - bar_prefix = ' |' - bar_suffix = '| ' - empty_fill = ' ' - fill = '#' - hide_cursor = True - - def update(self): - filled_length = int(self.width * self.progress) - empty_length = self.width - filled_length - - message = self.message % self - bar = self.fill * filled_length - empty = self.empty_fill * empty_length - suffix = self.suffix % self - line = ''.join([message, self.bar_prefix, bar, empty, self.bar_suffix, - suffix]) - self.writeln(line) - - -class ChargingBar(Bar): - suffix = '%(percent)d%%' - bar_prefix = ' ' - bar_suffix = ' ' - empty_fill = '∙' - fill = '█' - - -class FillingSquaresBar(ChargingBar): - empty_fill = '▢' - fill = '▣' - - -class FillingCirclesBar(ChargingBar): - empty_fill = '◯' - fill = '◉' - - -class IncrementalBar(Bar): - phases = (' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█') - - def update(self): - nphases = len(self.phases) - filled_len = self.width * self.progress - nfull = int(filled_len) # Number of full chars - phase = int((filled_len - nfull) * nphases) # Phase of last char - nempty = self.width - nfull # Number of empty chars - - message = self.message % self - bar = self.phases[-1] * nfull - current = self.phases[phase] if phase > 0 else '' - empty = self.empty_fill * max(0, nempty - len(current)) - suffix = self.suffix % self - line = ''.join([message, self.bar_prefix, bar, current, empty, - self.bar_suffix, suffix]) - self.writeln(line) - - -class PixelBar(IncrementalBar): - phases = ('⡀', '⡄', '⡆', '⡇', '⣇', '⣧', '⣷', '⣿') - - -class ShadyBar(IncrementalBar): - phases = (' ', '░', '▒', '▓', '█') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/counter.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/counter.py deleted file mode 100644 index 6b45a1e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/counter.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import unicode_literals -from . import Infinite, Progress -from .helpers import WriteMixin - - -class Counter(WriteMixin, Infinite): - message = '' - hide_cursor = True - - def update(self): - self.write(str(self.index)) - - -class Countdown(WriteMixin, Progress): - hide_cursor = True - - def update(self): - self.write(str(self.remaining)) - - -class Stack(WriteMixin, Progress): - phases = (' ', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█') - hide_cursor = True - - def update(self): - nphases = len(self.phases) - i = min(nphases - 1, int(self.progress * nphases)) - self.write(self.phases[i]) - - -class Pie(Stack): - phases = ('○', '◔', '◑', '◕', '●') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/helpers.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/helpers.py deleted file mode 100644 index 9ed90b2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/helpers.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import print_function - - -HIDE_CURSOR = '\x1b[?25l' -SHOW_CURSOR = '\x1b[?25h' - - -class WriteMixin(object): - hide_cursor = False - - def __init__(self, message=None, **kwargs): - super(WriteMixin, self).__init__(**kwargs) - self._width = 0 - if message: - self.message = message - - if self.file.isatty(): - if self.hide_cursor: - print(HIDE_CURSOR, end='', file=self.file) - print(self.message, end='', file=self.file) - self.file.flush() - - def write(self, s): - if self.file.isatty(): - b = '\b' * self._width - c = s.ljust(self._width) - print(b + c, end='', file=self.file) - self._width = max(self._width, len(s)) - self.file.flush() - - def finish(self): - if self.file.isatty() and self.hide_cursor: - print(SHOW_CURSOR, end='', file=self.file) - - -class WritelnMixin(object): - hide_cursor = False - - def __init__(self, message=None, **kwargs): - super(WritelnMixin, self).__init__(**kwargs) - if message: - self.message = message - - if self.file.isatty() and self.hide_cursor: - print(HIDE_CURSOR, end='', file=self.file) - - def clearln(self): - if self.file.isatty(): - print('\r\x1b[K', end='', file=self.file) - - def writeln(self, line): - if self.file.isatty(): - self.clearln() - print(line, end='', file=self.file) - self.file.flush() - - def finish(self): - if self.file.isatty(): - print(file=self.file) - if self.hide_cursor: - print(SHOW_CURSOR, end='', file=self.file) - - -from signal import signal, SIGINT -from sys import exit - - -class SigIntMixin(object): - """Registers a signal handler that calls finish on SIGINT""" - - def __init__(self, *args, **kwargs): - super(SigIntMixin, self).__init__(*args, **kwargs) - signal(SIGINT, self._sigint_handler) - - def _sigint_handler(self, signum, frame): - self.finish() - exit(0) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/spinner.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/spinner.py deleted file mode 100644 index 464c7b2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/progress/spinner.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import unicode_literals -from . import Infinite -from .helpers import WriteMixin - - -class Spinner(WriteMixin, Infinite): - message = '' - phases = ('-', '\\', '|', '/') - hide_cursor = True - - def update(self): - i = self.index % len(self.phases) - self.write(self.phases[i]) - - -class PieSpinner(Spinner): - phases = ['◷', '◶', '◵', '◴'] - - -class MoonSpinner(Spinner): - phases = ['◑', '◒', '◐', '◓'] - - -class LineSpinner(Spinner): - phases = ['⎺', '⎻', '⎼', '⎽', '⎼', '⎻'] - -class PixelSpinner(Spinner): - phases = ['⣾','⣷', '⣯', '⣟', '⡿', '⢿', '⣻', '⣽'] diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pyparsing.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pyparsing.py deleted file mode 100644 index ba2619c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pyparsing.py +++ /dev/null @@ -1,5720 +0,0 @@ -# module pyparsing.py -# -# Copyright (c) 2003-2016 Paul T. McGuire -# -# 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. -# - -__doc__ = \ -""" -pyparsing module - Classes and methods to define and execute parsing grammars - -The pyparsing module is an alternative approach to creating and executing simple grammars, -vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you -don't need to learn a new syntax for defining grammars or matching expressions - the parsing module -provides a library of classes that you use to construct the grammar directly in Python. - -Here is a program to parse "Hello, World!" (or any greeting of the form -C{"<salutation>, <addressee>!"}), built up using L{Word}, L{Literal}, and L{And} elements -(L{'+'<ParserElement.__add__>} operator gives L{And} expressions, strings are auto-converted to -L{Literal} expressions):: - - from pip._vendor.pyparsing import Word, alphas - - # define grammar of a greeting - greet = Word(alphas) + "," + Word(alphas) + "!" - - hello = "Hello, World!" - print (hello, "->", greet.parseString(hello)) - -The program outputs the following:: - - Hello, World! -> ['Hello', ',', 'World', '!'] - -The Python representation of the grammar is quite readable, owing to the self-explanatory -class names, and the use of '+', '|' and '^' operators. - -The L{ParseResults} object returned from L{ParserElement.parseString<ParserElement.parseString>} can be accessed as a nested list, a dictionary, or an -object with named attributes. - -The pyparsing module handles some of the problems that are typically vexing when writing text parsers: - - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) - - quoted strings - - embedded comments -""" - -__version__ = "2.2.0" -__versionTime__ = "06 Mar 2017 02:06 UTC" -__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" - -import string -from weakref import ref as wkref -import copy -import sys -import warnings -import re -import sre_constants -import collections -import pprint -import traceback -import types -from datetime import datetime - -try: - from _thread import RLock -except ImportError: - from threading import RLock - -try: - from collections import OrderedDict as _OrderedDict -except ImportError: - try: - from ordereddict import OrderedDict as _OrderedDict - except ImportError: - _OrderedDict = None - -#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) - -__all__ = [ -'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', -'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', -'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', -'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', -'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', -'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', -'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', -'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', -'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', -'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', -'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', -'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', -'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', -'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', -'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', -'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', -'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation','locatedExpr', 'withClass', -'CloseMatch', 'tokenMap', 'pyparsing_common', -] - -system_version = tuple(sys.version_info)[:3] -PY_3 = system_version[0] == 3 -if PY_3: - _MAX_INT = sys.maxsize - basestring = str - unichr = chr - _ustr = str - - # build list of single arg builtins, that can be used as parse actions - singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] - -else: - _MAX_INT = sys.maxint - range = xrange - - def _ustr(obj): - """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries - str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It - then < returns the unicode object | encodes it with the default encoding | ... >. - """ - if isinstance(obj,unicode): - return obj - - try: - # If this works, then _ustr(obj) has the same behaviour as str(obj), so - # it won't break any existing code. - return str(obj) - - except UnicodeEncodeError: - # Else encode it - ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') - xmlcharref = Regex(r'&#\d+;') - xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) - return xmlcharref.transformString(ret) - - # build list of single arg builtins, tolerant of Python version, that can be used as parse actions - singleArgBuiltins = [] - import __builtin__ - for fname in "sum len sorted reversed list tuple set any all min max".split(): - try: - singleArgBuiltins.append(getattr(__builtin__,fname)) - except AttributeError: - continue - -_generatorType = type((y for y in range(1))) - -def _xml_escape(data): - """Escape &, <, >, ", ', etc. in a string of data.""" - - # ampersand must be replaced first - from_symbols = '&><"\'' - to_symbols = ('&'+s+';' for s in "amp gt lt quot apos".split()) - for from_,to_ in zip(from_symbols, to_symbols): - data = data.replace(from_, to_) - return data - -class _Constants(object): - pass - -alphas = string.ascii_uppercase + string.ascii_lowercase -nums = "0123456789" -hexnums = nums + "ABCDEFabcdef" -alphanums = alphas + nums -_bslash = chr(92) -printables = "".join(c for c in string.printable if c not in string.whitespace) - -class ParseBaseException(Exception): - """base exception class for all parsing runtime exceptions""" - # Performance tuning: we construct a *lot* of these, so keep this - # constructor as small and fast as possible - def __init__( self, pstr, loc=0, msg=None, elem=None ): - self.loc = loc - if msg is None: - self.msg = pstr - self.pstr = "" - else: - self.msg = msg - self.pstr = pstr - self.parserElement = elem - self.args = (pstr, loc, msg) - - @classmethod - def _from_exception(cls, pe): - """ - internal factory method to simplify creating one type of ParseException - from another - avoids having __init__ signature conflicts among subclasses - """ - return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) - - def __getattr__( self, aname ): - """supported attributes by name are: - - lineno - returns the line number of the exception text - - col - returns the column number of the exception text - - line - returns the line containing the exception text - """ - if( aname == "lineno" ): - return lineno( self.loc, self.pstr ) - elif( aname in ("col", "column") ): - return col( self.loc, self.pstr ) - elif( aname == "line" ): - return line( self.loc, self.pstr ) - else: - raise AttributeError(aname) - - def __str__( self ): - return "%s (at char %d), (line:%d, col:%d)" % \ - ( self.msg, self.loc, self.lineno, self.column ) - def __repr__( self ): - return _ustr(self) - def markInputline( self, markerString = ">!<" ): - """Extracts the exception line from the input string, and marks - the location of the exception with a special symbol. - """ - line_str = self.line - line_column = self.column - 1 - if markerString: - line_str = "".join((line_str[:line_column], - markerString, line_str[line_column:])) - return line_str.strip() - def __dir__(self): - return "lineno col line".split() + dir(type(self)) - -class ParseException(ParseBaseException): - """ - Exception thrown when parse expressions don't match class; - supported attributes by name are: - - lineno - returns the line number of the exception text - - col - returns the column number of the exception text - - line - returns the line containing the exception text - - Example:: - try: - Word(nums).setName("integer").parseString("ABC") - except ParseException as pe: - print(pe) - print("column: {}".format(pe.col)) - - prints:: - Expected integer (at char 0), (line:1, col:1) - column: 1 - """ - pass - -class ParseFatalException(ParseBaseException): - """user-throwable exception thrown when inconsistent parse content - is found; stops all parsing immediately""" - pass - -class ParseSyntaxException(ParseFatalException): - """just like L{ParseFatalException}, but thrown internally when an - L{ErrorStop<And._ErrorStop>} ('-' operator) indicates that parsing is to stop - immediately because an unbacktrackable syntax error has been found""" - pass - -#~ class ReparseException(ParseBaseException): - #~ """Experimental class - parse actions can raise this exception to cause - #~ pyparsing to reparse the input string: - #~ - with a modified input string, and/or - #~ - with a modified start location - #~ Set the values of the ReparseException in the constructor, and raise the - #~ exception in a parse action to cause pyparsing to use the new string/location. - #~ Setting the values as None causes no change to be made. - #~ """ - #~ def __init_( self, newstring, restartLoc ): - #~ self.newParseText = newstring - #~ self.reparseLoc = restartLoc - -class RecursiveGrammarException(Exception): - """exception thrown by L{ParserElement.validate} if the grammar could be improperly recursive""" - def __init__( self, parseElementList ): - self.parseElementTrace = parseElementList - - def __str__( self ): - return "RecursiveGrammarException: %s" % self.parseElementTrace - -class _ParseResultsWithOffset(object): - def __init__(self,p1,p2): - self.tup = (p1,p2) - def __getitem__(self,i): - return self.tup[i] - def __repr__(self): - return repr(self.tup[0]) - def setOffset(self,i): - self.tup = (self.tup[0],i) - -class ParseResults(object): - """ - Structured parse results, to provide multiple means of access to the parsed data: - - as a list (C{len(results)}) - - by list index (C{results[0], results[1]}, etc.) - - by attribute (C{results.<resultsName>} - see L{ParserElement.setResultsName}) - - Example:: - integer = Word(nums) - date_str = (integer.setResultsName("year") + '/' - + integer.setResultsName("month") + '/' - + integer.setResultsName("day")) - # equivalent form: - # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - # parseString returns a ParseResults object - result = date_str.parseString("1999/12/31") - - def test(s, fn=repr): - print("%s -> %s" % (s, fn(eval(s)))) - test("list(result)") - test("result[0]") - test("result['month']") - test("result.day") - test("'month' in result") - test("'minutes' in result") - test("result.dump()", str) - prints:: - list(result) -> ['1999', '/', '12', '/', '31'] - result[0] -> '1999' - result['month'] -> '12' - result.day -> '31' - 'month' in result -> True - 'minutes' in result -> False - result.dump() -> ['1999', '/', '12', '/', '31'] - - day: 31 - - month: 12 - - year: 1999 - """ - def __new__(cls, toklist=None, name=None, asList=True, modal=True ): - if isinstance(toklist, cls): - return toklist - retobj = object.__new__(cls) - retobj.__doinit = True - return retobj - - # Performance tuning: we construct a *lot* of these, so keep this - # constructor as small and fast as possible - def __init__( self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance ): - if self.__doinit: - self.__doinit = False - self.__name = None - self.__parent = None - self.__accumNames = {} - self.__asList = asList - self.__modal = modal - if toklist is None: - toklist = [] - if isinstance(toklist, list): - self.__toklist = toklist[:] - elif isinstance(toklist, _generatorType): - self.__toklist = list(toklist) - else: - self.__toklist = [toklist] - self.__tokdict = dict() - - if name is not None and name: - if not modal: - self.__accumNames[name] = 0 - if isinstance(name,int): - name = _ustr(name) # will always return a str, but use _ustr for consistency - self.__name = name - if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None,'',[])): - if isinstance(toklist,basestring): - toklist = [ toklist ] - if asList: - if isinstance(toklist,ParseResults): - self[name] = _ParseResultsWithOffset(toklist.copy(),0) - else: - self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),0) - self[name].__name = name - else: - try: - self[name] = toklist[0] - except (KeyError,TypeError,IndexError): - self[name] = toklist - - def __getitem__( self, i ): - if isinstance( i, (int,slice) ): - return self.__toklist[i] - else: - if i not in self.__accumNames: - return self.__tokdict[i][-1][0] - else: - return ParseResults([ v[0] for v in self.__tokdict[i] ]) - - def __setitem__( self, k, v, isinstance=isinstance ): - if isinstance(v,_ParseResultsWithOffset): - self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] - sub = v[0] - elif isinstance(k,(int,slice)): - self.__toklist[k] = v - sub = v - else: - self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] - sub = v - if isinstance(sub,ParseResults): - sub.__parent = wkref(self) - - def __delitem__( self, i ): - if isinstance(i,(int,slice)): - mylen = len( self.__toklist ) - del self.__toklist[i] - - # convert int to slice - if isinstance(i, int): - if i < 0: - i += mylen - i = slice(i, i+1) - # get removed indices - removed = list(range(*i.indices(mylen))) - removed.reverse() - # fixup indices in token dictionary - for name,occurrences in self.__tokdict.items(): - for j in removed: - for k, (value, position) in enumerate(occurrences): - occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) - else: - del self.__tokdict[i] - - def __contains__( self, k ): - return k in self.__tokdict - - def __len__( self ): return len( self.__toklist ) - def __bool__(self): return ( not not self.__toklist ) - __nonzero__ = __bool__ - def __iter__( self ): return iter( self.__toklist ) - def __reversed__( self ): return iter( self.__toklist[::-1] ) - def _iterkeys( self ): - if hasattr(self.__tokdict, "iterkeys"): - return self.__tokdict.iterkeys() - else: - return iter(self.__tokdict) - - def _itervalues( self ): - return (self[k] for k in self._iterkeys()) - - def _iteritems( self ): - return ((k, self[k]) for k in self._iterkeys()) - - if PY_3: - keys = _iterkeys - """Returns an iterator of all named result keys (Python 3.x only).""" - - values = _itervalues - """Returns an iterator of all named result values (Python 3.x only).""" - - items = _iteritems - """Returns an iterator of all named result key-value tuples (Python 3.x only).""" - - else: - iterkeys = _iterkeys - """Returns an iterator of all named result keys (Python 2.x only).""" - - itervalues = _itervalues - """Returns an iterator of all named result values (Python 2.x only).""" - - iteritems = _iteritems - """Returns an iterator of all named result key-value tuples (Python 2.x only).""" - - def keys( self ): - """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" - return list(self.iterkeys()) - - def values( self ): - """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" - return list(self.itervalues()) - - def items( self ): - """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" - return list(self.iteritems()) - - def haskeys( self ): - """Since keys() returns an iterator, this method is helpful in bypassing - code that looks for the existence of any defined results names.""" - return bool(self.__tokdict) - - def pop( self, *args, **kwargs): - """ - Removes and returns item at specified index (default=C{last}). - Supports both C{list} and C{dict} semantics for C{pop()}. If passed no - argument or an integer argument, it will use C{list} semantics - and pop tokens from the list of parsed tokens. If passed a - non-integer argument (most likely a string), it will use C{dict} - semantics and pop the corresponding value from any defined - results names. A second default return value argument is - supported, just as in C{dict.pop()}. - - Example:: - def remove_first(tokens): - tokens.pop(0) - print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] - print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] - - label = Word(alphas) - patt = label("LABEL") + OneOrMore(Word(nums)) - print(patt.parseString("AAB 123 321").dump()) - - # Use pop() in a parse action to remove named result (note that corresponding value is not - # removed from list form of results) - def remove_LABEL(tokens): - tokens.pop("LABEL") - return tokens - patt.addParseAction(remove_LABEL) - print(patt.parseString("AAB 123 321").dump()) - prints:: - ['AAB', '123', '321'] - - LABEL: AAB - - ['AAB', '123', '321'] - """ - if not args: - args = [-1] - for k,v in kwargs.items(): - if k == 'default': - args = (args[0], v) - else: - raise TypeError("pop() got an unexpected keyword argument '%s'" % k) - if (isinstance(args[0], int) or - len(args) == 1 or - args[0] in self): - index = args[0] - ret = self[index] - del self[index] - return ret - else: - defaultvalue = args[1] - return defaultvalue - - def get(self, key, defaultValue=None): - """ - Returns named result matching the given key, or if there is no - such name, then returns the given C{defaultValue} or C{None} if no - C{defaultValue} is specified. - - Similar to C{dict.get()}. - - Example:: - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - result = date_str.parseString("1999/12/31") - print(result.get("year")) # -> '1999' - print(result.get("hour", "not specified")) # -> 'not specified' - print(result.get("hour")) # -> None - """ - if key in self: - return self[key] - else: - return defaultValue - - def insert( self, index, insStr ): - """ - Inserts new element at location index in the list of parsed tokens. - - Similar to C{list.insert()}. - - Example:: - print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] - - # use a parse action to insert the parse location in the front of the parsed results - def insert_locn(locn, tokens): - tokens.insert(0, locn) - print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] - """ - self.__toklist.insert(index, insStr) - # fixup indices in token dictionary - for name,occurrences in self.__tokdict.items(): - for k, (value, position) in enumerate(occurrences): - occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) - - def append( self, item ): - """ - Add single element to end of ParseResults list of elements. - - Example:: - print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] - - # use a parse action to compute the sum of the parsed integers, and add it to the end - def append_sum(tokens): - tokens.append(sum(map(int, tokens))) - print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] - """ - self.__toklist.append(item) - - def extend( self, itemseq ): - """ - Add sequence of elements to end of ParseResults list of elements. - - Example:: - patt = OneOrMore(Word(alphas)) - - # use a parse action to append the reverse of the matched strings, to make a palindrome - def make_palindrome(tokens): - tokens.extend(reversed([t[::-1] for t in tokens])) - return ''.join(tokens) - print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' - """ - if isinstance(itemseq, ParseResults): - self += itemseq - else: - self.__toklist.extend(itemseq) - - def clear( self ): - """ - Clear all elements and results names. - """ - del self.__toklist[:] - self.__tokdict.clear() - - def __getattr__( self, name ): - try: - return self[name] - except KeyError: - return "" - - if name in self.__tokdict: - if name not in self.__accumNames: - return self.__tokdict[name][-1][0] - else: - return ParseResults([ v[0] for v in self.__tokdict[name] ]) - else: - return "" - - def __add__( self, other ): - ret = self.copy() - ret += other - return ret - - def __iadd__( self, other ): - if other.__tokdict: - offset = len(self.__toklist) - addoffset = lambda a: offset if a<0 else a+offset - otheritems = other.__tokdict.items() - otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) - for (k,vlist) in otheritems for v in vlist] - for k,v in otherdictitems: - self[k] = v - if isinstance(v[0],ParseResults): - v[0].__parent = wkref(self) - - self.__toklist += other.__toklist - self.__accumNames.update( other.__accumNames ) - return self - - def __radd__(self, other): - if isinstance(other,int) and other == 0: - # useful for merging many ParseResults using sum() builtin - return self.copy() - else: - # this may raise a TypeError - so be it - return other + self - - def __repr__( self ): - return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) - - def __str__( self ): - return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' - - def _asStringList( self, sep='' ): - out = [] - for item in self.__toklist: - if out and sep: - out.append(sep) - if isinstance( item, ParseResults ): - out += item._asStringList() - else: - out.append( _ustr(item) ) - return out - - def asList( self ): - """ - Returns the parse results as a nested list of matching tokens, all converted to strings. - - Example:: - patt = OneOrMore(Word(alphas)) - result = patt.parseString("sldkj lsdkj sldkj") - # even though the result prints in string-like form, it is actually a pyparsing ParseResults - print(type(result), result) # -> <class 'pyparsing.ParseResults'> ['sldkj', 'lsdkj', 'sldkj'] - - # Use asList() to create an actual list - result_list = result.asList() - print(type(result_list), result_list) # -> <class 'list'> ['sldkj', 'lsdkj', 'sldkj'] - """ - return [res.asList() if isinstance(res,ParseResults) else res for res in self.__toklist] - - def asDict( self ): - """ - Returns the named parse results as a nested dictionary. - - Example:: - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - result = date_str.parseString('12/31/1999') - print(type(result), repr(result)) # -> <class 'pyparsing.ParseResults'> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) - - result_dict = result.asDict() - print(type(result_dict), repr(result_dict)) # -> <class 'dict'> {'day': '1999', 'year': '12', 'month': '31'} - - # even though a ParseResults supports dict-like access, sometime you just need to have a dict - import json - print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable - print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} - """ - if PY_3: - item_fn = self.items - else: - item_fn = self.iteritems - - def toItem(obj): - if isinstance(obj, ParseResults): - if obj.haskeys(): - return obj.asDict() - else: - return [toItem(v) for v in obj] - else: - return obj - - return dict((k,toItem(v)) for k,v in item_fn()) - - def copy( self ): - """ - Returns a new copy of a C{ParseResults} object. - """ - ret = ParseResults( self.__toklist ) - ret.__tokdict = self.__tokdict.copy() - ret.__parent = self.__parent - ret.__accumNames.update( self.__accumNames ) - ret.__name = self.__name - return ret - - def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): - """ - (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. - """ - nl = "\n" - out = [] - namedItems = dict((v[1],k) for (k,vlist) in self.__tokdict.items() - for v in vlist) - nextLevelIndent = indent + " " - - # collapse out indents if formatting is not desired - if not formatted: - indent = "" - nextLevelIndent = "" - nl = "" - - selfTag = None - if doctag is not None: - selfTag = doctag - else: - if self.__name: - selfTag = self.__name - - if not selfTag: - if namedItemsOnly: - return "" - else: - selfTag = "ITEM" - - out += [ nl, indent, "<", selfTag, ">" ] - - for i,res in enumerate(self.__toklist): - if isinstance(res,ParseResults): - if i in namedItems: - out += [ res.asXML(namedItems[i], - namedItemsOnly and doctag is None, - nextLevelIndent, - formatted)] - else: - out += [ res.asXML(None, - namedItemsOnly and doctag is None, - nextLevelIndent, - formatted)] - else: - # individual token, see if there is a name for it - resTag = None - if i in namedItems: - resTag = namedItems[i] - if not resTag: - if namedItemsOnly: - continue - else: - resTag = "ITEM" - xmlBodyText = _xml_escape(_ustr(res)) - out += [ nl, nextLevelIndent, "<", resTag, ">", - xmlBodyText, - "</", resTag, ">" ] - - out += [ nl, indent, "</", selfTag, ">" ] - return "".join(out) - - def __lookup(self,sub): - for k,vlist in self.__tokdict.items(): - for v,loc in vlist: - if sub is v: - return k - return None - - def getName(self): - r""" - Returns the results name for this token expression. Useful when several - different expressions might match at a particular location. - - Example:: - integer = Word(nums) - ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") - house_number_expr = Suppress('#') + Word(nums, alphanums) - user_data = (Group(house_number_expr)("house_number") - | Group(ssn_expr)("ssn") - | Group(integer)("age")) - user_info = OneOrMore(user_data) - - result = user_info.parseString("22 111-22-3333 #221B") - for item in result: - print(item.getName(), ':', item[0]) - prints:: - age : 22 - ssn : 111-22-3333 - house_number : 221B - """ - if self.__name: - return self.__name - elif self.__parent: - par = self.__parent() - if par: - return par.__lookup(self) - else: - return None - elif (len(self) == 1 and - len(self.__tokdict) == 1 and - next(iter(self.__tokdict.values()))[0][1] in (0,-1)): - return next(iter(self.__tokdict.keys())) - else: - return None - - def dump(self, indent='', depth=0, full=True): - """ - Diagnostic method for listing out the contents of a C{ParseResults}. - Accepts an optional C{indent} argument so that this string can be embedded - in a nested display of other data. - - Example:: - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - result = date_str.parseString('12/31/1999') - print(result.dump()) - prints:: - ['12', '/', '31', '/', '1999'] - - day: 1999 - - month: 31 - - year: 12 - """ - out = [] - NL = '\n' - out.append( indent+_ustr(self.asList()) ) - if full: - if self.haskeys(): - items = sorted((str(k), v) for k,v in self.items()) - for k,v in items: - if out: - out.append(NL) - out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) - if isinstance(v,ParseResults): - if v: - out.append( v.dump(indent,depth+1) ) - else: - out.append(_ustr(v)) - else: - out.append(repr(v)) - elif any(isinstance(vv,ParseResults) for vv in self): - v = self - for i,vv in enumerate(v): - if isinstance(vv,ParseResults): - out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),vv.dump(indent,depth+1) )) - else: - out.append("\n%s%s[%d]:\n%s%s%s" % (indent,(' '*(depth)),i,indent,(' '*(depth+1)),_ustr(vv))) - - return "".join(out) - - def pprint(self, *args, **kwargs): - """ - Pretty-printer for parsed results as a list, using the C{pprint} module. - Accepts additional positional or keyword args as defined for the - C{pprint.pprint} method. (U{http://docs.python.org/3/library/pprint.html#pprint.pprint}) - - Example:: - ident = Word(alphas, alphanums) - num = Word(nums) - func = Forward() - term = ident | num | Group('(' + func + ')') - func <<= ident + Group(Optional(delimitedList(term))) - result = func.parseString("fna a,b,(fnb c,d,200),100") - result.pprint(width=40) - prints:: - ['fna', - ['a', - 'b', - ['(', 'fnb', ['c', 'd', '200'], ')'], - '100']] - """ - pprint.pprint(self.asList(), *args, **kwargs) - - # add support for pickle protocol - def __getstate__(self): - return ( self.__toklist, - ( self.__tokdict.copy(), - self.__parent is not None and self.__parent() or None, - self.__accumNames, - self.__name ) ) - - def __setstate__(self,state): - self.__toklist = state[0] - (self.__tokdict, - par, - inAccumNames, - self.__name) = state[1] - self.__accumNames = {} - self.__accumNames.update(inAccumNames) - if par is not None: - self.__parent = wkref(par) - else: - self.__parent = None - - def __getnewargs__(self): - return self.__toklist, self.__name, self.__asList, self.__modal - - def __dir__(self): - return (dir(type(self)) + list(self.keys())) - -collections.MutableMapping.register(ParseResults) - -def col (loc,strg): - """Returns current column within a string, counting newlines as line separators. - The first column is number 1. - - Note: the default parsing behavior is to expand tabs in the input string - before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information - on parsing strings containing C{<TAB>}s, and suggested methods to maintain a - consistent view of the parsed string, the parse location, and line and column - positions within the parsed string. - """ - s = strg - return 1 if 0<loc<len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) - -def lineno(loc,strg): - """Returns current line number within a string, counting newlines as line separators. - The first line is number 1. - - Note: the default parsing behavior is to expand tabs in the input string - before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information - on parsing strings containing C{<TAB>}s, and suggested methods to maintain a - consistent view of the parsed string, the parse location, and line and column - positions within the parsed string. - """ - return strg.count("\n",0,loc) + 1 - -def line( loc, strg ): - """Returns the line of text containing loc within a string, counting newlines as line separators. - """ - lastCR = strg.rfind("\n", 0, loc) - nextCR = strg.find("\n", loc) - if nextCR >= 0: - return strg[lastCR+1:nextCR] - else: - return strg[lastCR+1:] - -def _defaultStartDebugAction( instring, loc, expr ): - print (("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) ))) - -def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): - print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) - -def _defaultExceptionDebugAction( instring, loc, expr, exc ): - print ("Exception raised:" + _ustr(exc)) - -def nullDebugAction(*args): - """'Do-nothing' debug action, to suppress debugging output during parsing.""" - pass - -# Only works on Python 3.x - nonlocal is toxic to Python 2 installs -#~ 'decorator to trim function calls to match the arity of the target' -#~ def _trim_arity(func, maxargs=3): - #~ if func in singleArgBuiltins: - #~ return lambda s,l,t: func(t) - #~ limit = 0 - #~ foundArity = False - #~ def wrapper(*args): - #~ nonlocal limit,foundArity - #~ while 1: - #~ try: - #~ ret = func(*args[limit:]) - #~ foundArity = True - #~ return ret - #~ except TypeError: - #~ if limit == maxargs or foundArity: - #~ raise - #~ limit += 1 - #~ continue - #~ return wrapper - -# this version is Python 2.x-3.x cross-compatible -'decorator to trim function calls to match the arity of the target' -def _trim_arity(func, maxargs=2): - if func in singleArgBuiltins: - return lambda s,l,t: func(t) - limit = [0] - foundArity = [False] - - # traceback return data structure changed in Py3.5 - normalize back to plain tuples - if system_version[:2] >= (3,5): - def extract_stack(limit=0): - # special handling for Python 3.5.0 - extra deep call stack by 1 - offset = -3 if system_version == (3,5,0) else -2 - frame_summary = traceback.extract_stack(limit=-offset+limit-1)[offset] - return [(frame_summary.filename, frame_summary.lineno)] - def extract_tb(tb, limit=0): - frames = traceback.extract_tb(tb, limit=limit) - frame_summary = frames[-1] - return [(frame_summary.filename, frame_summary.lineno)] - else: - extract_stack = traceback.extract_stack - extract_tb = traceback.extract_tb - - # synthesize what would be returned by traceback.extract_stack at the call to - # user's parse action 'func', so that we don't incur call penalty at parse time - - LINE_DIFF = 6 - # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND - # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! - this_line = extract_stack(limit=2)[-1] - pa_call_line_synth = (this_line[0], this_line[1]+LINE_DIFF) - - def wrapper(*args): - while 1: - try: - ret = func(*args[limit[0]:]) - foundArity[0] = True - return ret - except TypeError: - # re-raise TypeErrors if they did not come from our arity testing - if foundArity[0]: - raise - else: - try: - tb = sys.exc_info()[-1] - if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: - raise - finally: - del tb - - if limit[0] <= maxargs: - limit[0] += 1 - continue - raise - - # copy func name to wrapper for sensible debug output - func_name = "<parse action>" - try: - func_name = getattr(func, '__name__', - getattr(func, '__class__').__name__) - except Exception: - func_name = str(func) - wrapper.__name__ = func_name - - return wrapper - -class ParserElement(object): - """Abstract base level parser element class.""" - DEFAULT_WHITE_CHARS = " \n\t\r" - verbose_stacktrace = False - - @staticmethod - def setDefaultWhitespaceChars( chars ): - r""" - Overrides the default whitespace chars - - Example:: - # default whitespace chars are space, <TAB> and newline - OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] - - # change to just treat newline as significant - ParserElement.setDefaultWhitespaceChars(" \t") - OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] - """ - ParserElement.DEFAULT_WHITE_CHARS = chars - - @staticmethod - def inlineLiteralsUsing(cls): - """ - Set class to be used for inclusion of string literals into a parser. - - Example:: - # default literal class used is Literal - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] - - - # change to Suppress - ParserElement.inlineLiteralsUsing(Suppress) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] - """ - ParserElement._literalStringClass = cls - - def __init__( self, savelist=False ): - self.parseAction = list() - self.failAction = None - #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall - self.strRepr = None - self.resultsName = None - self.saveAsList = savelist - self.skipWhitespace = True - self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS - self.copyDefaultWhiteChars = True - self.mayReturnEmpty = False # used when checking for left-recursion - self.keepTabs = False - self.ignoreExprs = list() - self.debug = False - self.streamlined = False - self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index - self.errmsg = "" - self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) - self.debugActions = ( None, None, None ) #custom debug actions - self.re = None - self.callPreparse = True # used to avoid redundant calls to preParse - self.callDuringTry = False - - def copy( self ): - """ - Make a copy of this C{ParserElement}. Useful for defining different parse actions - for the same parsing pattern, using copies of the original parse element. - - Example:: - integer = Word(nums).setParseAction(lambda toks: int(toks[0])) - integerK = integer.copy().addParseAction(lambda toks: toks[0]*1024) + Suppress("K") - integerM = integer.copy().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") - - print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) - prints:: - [5120, 100, 655360, 268435456] - Equivalent form of C{expr.copy()} is just C{expr()}:: - integerM = integer().addParseAction(lambda toks: toks[0]*1024*1024) + Suppress("M") - """ - cpy = copy.copy( self ) - cpy.parseAction = self.parseAction[:] - cpy.ignoreExprs = self.ignoreExprs[:] - if self.copyDefaultWhiteChars: - cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS - return cpy - - def setName( self, name ): - """ - Define name for this expression, makes debugging and exception messages clearer. - - Example:: - Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) - Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) - """ - self.name = name - self.errmsg = "Expected " + self.name - if hasattr(self,"exception"): - self.exception.msg = self.errmsg - return self - - def setResultsName( self, name, listAllMatches=False ): - """ - Define name for referencing matching tokens as a nested attribute - of the returned parse results. - NOTE: this returns a *copy* of the original C{ParserElement} object; - this is so that the client can define a basic element, such as an - integer, and reference it in multiple places with different names. - - You can also set results names using the abbreviated syntax, - C{expr("name")} in place of C{expr.setResultsName("name")} - - see L{I{__call__}<__call__>}. - - Example:: - date_str = (integer.setResultsName("year") + '/' - + integer.setResultsName("month") + '/' - + integer.setResultsName("day")) - - # equivalent form: - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - """ - newself = self.copy() - if name.endswith("*"): - name = name[:-1] - listAllMatches=True - newself.resultsName = name - newself.modalResults = not listAllMatches - return newself - - def setBreak(self,breakFlag = True): - """Method to invoke the Python pdb debugger when this element is - about to be parsed. Set C{breakFlag} to True to enable, False to - disable. - """ - if breakFlag: - _parseMethod = self._parse - def breaker(instring, loc, doActions=True, callPreParse=True): - import pdb - pdb.set_trace() - return _parseMethod( instring, loc, doActions, callPreParse ) - breaker._originalParseMethod = _parseMethod - self._parse = breaker - else: - if hasattr(self._parse,"_originalParseMethod"): - self._parse = self._parse._originalParseMethod - return self - - def setParseAction( self, *fns, **kwargs ): - """ - Define one or more actions to perform when successfully matching parse element definition. - Parse action fn is a callable method with 0-3 arguments, called as C{fn(s,loc,toks)}, - C{fn(loc,toks)}, C{fn(toks)}, or just C{fn()}, where: - - s = the original string being parsed (see note below) - - loc = the location of the matching substring - - toks = a list of the matched tokens, packaged as a C{L{ParseResults}} object - If the functions in fns modify the tokens, they can return them as the return - value from fn, and the modified list of tokens will replace the original. - Otherwise, fn does not need to return any value. - - Optional keyword arguments: - - callDuringTry = (default=C{False}) indicate if parse action should be run during lookaheads and alternate testing - - Note: the default parsing behavior is to expand tabs in the input string - before starting the parsing process. See L{I{parseString}<parseString>} for more information - on parsing strings containing C{<TAB>}s, and suggested methods to maintain a - consistent view of the parsed string, the parse location, and line and column - positions within the parsed string. - - Example:: - integer = Word(nums) - date_str = integer + '/' + integer + '/' + integer - - date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] - - # use parse action to convert to ints at parse time - integer = Word(nums).setParseAction(lambda toks: int(toks[0])) - date_str = integer + '/' + integer + '/' + integer - - # note that integer fields are now ints, not strings - date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] - """ - self.parseAction = list(map(_trim_arity, list(fns))) - self.callDuringTry = kwargs.get("callDuringTry", False) - return self - - def addParseAction( self, *fns, **kwargs ): - """ - Add one or more parse actions to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}. - - See examples in L{I{copy}<copy>}. - """ - self.parseAction += list(map(_trim_arity, list(fns))) - self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) - return self - - def addCondition(self, *fns, **kwargs): - """Add a boolean predicate function to expression's list of parse actions. See - L{I{setParseAction}<setParseAction>} for function call signatures. Unlike C{setParseAction}, - functions passed to C{addCondition} need to return boolean success/fail of the condition. - - Optional keyword arguments: - - message = define a custom message to be used in the raised exception - - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException - - Example:: - integer = Word(nums).setParseAction(lambda toks: int(toks[0])) - year_int = integer.copy() - year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") - date_str = year_int + '/' + integer + '/' + integer - - result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) - """ - msg = kwargs.get("message", "failed user-defined condition") - exc_type = ParseFatalException if kwargs.get("fatal", False) else ParseException - for fn in fns: - def pa(s,l,t): - if not bool(_trim_arity(fn)(s,l,t)): - raise exc_type(s,l,msg) - self.parseAction.append(pa) - self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) - return self - - def setFailAction( self, fn ): - """Define action to perform if parsing fails at this expression. - Fail acton fn is a callable function that takes the arguments - C{fn(s,loc,expr,err)} where: - - s = string being parsed - - loc = location where expression match was attempted and failed - - expr = the parse expression that failed - - err = the exception thrown - The function returns no value. It may throw C{L{ParseFatalException}} - if it is desired to stop parsing immediately.""" - self.failAction = fn - return self - - def _skipIgnorables( self, instring, loc ): - exprsFound = True - while exprsFound: - exprsFound = False - for e in self.ignoreExprs: - try: - while 1: - loc,dummy = e._parse( instring, loc ) - exprsFound = True - except ParseException: - pass - return loc - - def preParse( self, instring, loc ): - if self.ignoreExprs: - loc = self._skipIgnorables( instring, loc ) - - if self.skipWhitespace: - wt = self.whiteChars - instrlen = len(instring) - while loc < instrlen and instring[loc] in wt: - loc += 1 - - return loc - - def parseImpl( self, instring, loc, doActions=True ): - return loc, [] - - def postParse( self, instring, loc, tokenlist ): - return tokenlist - - #~ @profile - def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): - debugging = ( self.debug ) #and doActions ) - - if debugging or self.failAction: - #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) - if (self.debugActions[0] ): - self.debugActions[0]( instring, loc, self ) - if callPreParse and self.callPreparse: - preloc = self.preParse( instring, loc ) - else: - preloc = loc - tokensStart = preloc - try: - try: - loc,tokens = self.parseImpl( instring, preloc, doActions ) - except IndexError: - raise ParseException( instring, len(instring), self.errmsg, self ) - except ParseBaseException as err: - #~ print ("Exception raised:", err) - if self.debugActions[2]: - self.debugActions[2]( instring, tokensStart, self, err ) - if self.failAction: - self.failAction( instring, tokensStart, self, err ) - raise - else: - if callPreParse and self.callPreparse: - preloc = self.preParse( instring, loc ) - else: - preloc = loc - tokensStart = preloc - if self.mayIndexError or loc >= len(instring): - try: - loc,tokens = self.parseImpl( instring, preloc, doActions ) - except IndexError: - raise ParseException( instring, len(instring), self.errmsg, self ) - else: - loc,tokens = self.parseImpl( instring, preloc, doActions ) - - tokens = self.postParse( instring, loc, tokens ) - - retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) - if self.parseAction and (doActions or self.callDuringTry): - if debugging: - try: - for fn in self.parseAction: - tokens = fn( instring, tokensStart, retTokens ) - if tokens is not None: - retTokens = ParseResults( tokens, - self.resultsName, - asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), - modal=self.modalResults ) - except ParseBaseException as err: - #~ print "Exception raised in user parse action:", err - if (self.debugActions[2] ): - self.debugActions[2]( instring, tokensStart, self, err ) - raise - else: - for fn in self.parseAction: - tokens = fn( instring, tokensStart, retTokens ) - if tokens is not None: - retTokens = ParseResults( tokens, - self.resultsName, - asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), - modal=self.modalResults ) - - if debugging: - #~ print ("Matched",self,"->",retTokens.asList()) - if (self.debugActions[1] ): - self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) - - return loc, retTokens - - def tryParse( self, instring, loc ): - try: - return self._parse( instring, loc, doActions=False )[0] - except ParseFatalException: - raise ParseException( instring, loc, self.errmsg, self) - - def canParseNext(self, instring, loc): - try: - self.tryParse(instring, loc) - except (ParseException, IndexError): - return False - else: - return True - - class _UnboundedCache(object): - def __init__(self): - cache = {} - self.not_in_cache = not_in_cache = object() - - def get(self, key): - return cache.get(key, not_in_cache) - - def set(self, key, value): - cache[key] = value - - def clear(self): - cache.clear() - - def cache_len(self): - return len(cache) - - self.get = types.MethodType(get, self) - self.set = types.MethodType(set, self) - self.clear = types.MethodType(clear, self) - self.__len__ = types.MethodType(cache_len, self) - - if _OrderedDict is not None: - class _FifoCache(object): - def __init__(self, size): - self.not_in_cache = not_in_cache = object() - - cache = _OrderedDict() - - def get(self, key): - return cache.get(key, not_in_cache) - - def set(self, key, value): - cache[key] = value - while len(cache) > size: - try: - cache.popitem(False) - except KeyError: - pass - - def clear(self): - cache.clear() - - def cache_len(self): - return len(cache) - - self.get = types.MethodType(get, self) - self.set = types.MethodType(set, self) - self.clear = types.MethodType(clear, self) - self.__len__ = types.MethodType(cache_len, self) - - else: - class _FifoCache(object): - def __init__(self, size): - self.not_in_cache = not_in_cache = object() - - cache = {} - key_fifo = collections.deque([], size) - - def get(self, key): - return cache.get(key, not_in_cache) - - def set(self, key, value): - cache[key] = value - while len(key_fifo) > size: - cache.pop(key_fifo.popleft(), None) - key_fifo.append(key) - - def clear(self): - cache.clear() - key_fifo.clear() - - def cache_len(self): - return len(cache) - - self.get = types.MethodType(get, self) - self.set = types.MethodType(set, self) - self.clear = types.MethodType(clear, self) - self.__len__ = types.MethodType(cache_len, self) - - # argument cache for optimizing repeated calls when backtracking through recursive expressions - packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail - packrat_cache_lock = RLock() - packrat_cache_stats = [0, 0] - - # this method gets repeatedly called during backtracking with the same arguments - - # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression - def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): - HIT, MISS = 0, 1 - lookup = (self, instring, loc, callPreParse, doActions) - with ParserElement.packrat_cache_lock: - cache = ParserElement.packrat_cache - value = cache.get(lookup) - if value is cache.not_in_cache: - ParserElement.packrat_cache_stats[MISS] += 1 - try: - value = self._parseNoCache(instring, loc, doActions, callPreParse) - except ParseBaseException as pe: - # cache a copy of the exception, without the traceback - cache.set(lookup, pe.__class__(*pe.args)) - raise - else: - cache.set(lookup, (value[0], value[1].copy())) - return value - else: - ParserElement.packrat_cache_stats[HIT] += 1 - if isinstance(value, Exception): - raise value - return (value[0], value[1].copy()) - - _parse = _parseNoCache - - @staticmethod - def resetCache(): - ParserElement.packrat_cache.clear() - ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) - - _packratEnabled = False - @staticmethod - def enablePackrat(cache_size_limit=128): - """Enables "packrat" parsing, which adds memoizing to the parsing logic. - Repeated parse attempts at the same string location (which happens - often in many complex grammars) can immediately return a cached value, - instead of re-executing parsing/validating code. Memoizing is done of - both valid results and parsing exceptions. - - Parameters: - - cache_size_limit - (default=C{128}) - if an integer value is provided - will limit the size of the packrat cache; if None is passed, then - the cache size will be unbounded; if 0 is passed, the cache will - be effectively disabled. - - This speedup may break existing programs that use parse actions that - have side-effects. For this reason, packrat parsing is disabled when - you first import pyparsing. To activate the packrat feature, your - program must call the class method C{ParserElement.enablePackrat()}. If - your program uses C{psyco} to "compile as you go", you must call - C{enablePackrat} before calling C{psyco.full()}. If you do not do this, - Python will crash. For best results, call C{enablePackrat()} immediately - after importing pyparsing. - - Example:: - from pip._vendor import pyparsing - pyparsing.ParserElement.enablePackrat() - """ - if not ParserElement._packratEnabled: - ParserElement._packratEnabled = True - if cache_size_limit is None: - ParserElement.packrat_cache = ParserElement._UnboundedCache() - else: - ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) - ParserElement._parse = ParserElement._parseCache - - def parseString( self, instring, parseAll=False ): - """ - Execute the parse expression with the given string. - This is the main interface to the client code, once the complete - expression has been built. - - If you want the grammar to require that the entire input string be - successfully parsed, then set C{parseAll} to True (equivalent to ending - the grammar with C{L{StringEnd()}}). - - Note: C{parseString} implicitly calls C{expandtabs()} on the input string, - in order to report proper column numbers in parse actions. - If the input string contains tabs and - the grammar uses parse actions that use the C{loc} argument to index into the - string being parsed, you can ensure you have a consistent view of the input - string by: - - calling C{parseWithTabs} on your grammar before calling C{parseString} - (see L{I{parseWithTabs}<parseWithTabs>}) - - define your parse action using the full C{(s,loc,toks)} signature, and - reference the input string using the parse action's C{s} argument - - explictly expand the tabs in your input string before calling - C{parseString} - - Example:: - Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] - Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text - """ - ParserElement.resetCache() - if not self.streamlined: - self.streamline() - #~ self.saveAsList = True - for e in self.ignoreExprs: - e.streamline() - if not self.keepTabs: - instring = instring.expandtabs() - try: - loc, tokens = self._parse( instring, 0 ) - if parseAll: - loc = self.preParse( instring, loc ) - se = Empty() + StringEnd() - se._parse( instring, loc ) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clears out pyparsing internal stack trace - raise exc - else: - return tokens - - def scanString( self, instring, maxMatches=_MAX_INT, overlap=False ): - """ - Scan the input string for expression matches. Each match will return the - matching tokens, start location, and end location. May be called with optional - C{maxMatches} argument, to clip scanning after 'n' matches are found. If - C{overlap} is specified, then overlapping matches will be reported. - - Note that the start and end locations are reported relative to the string - being parsed. See L{I{parseString}<parseString>} for more information on parsing - strings with embedded tabs. - - Example:: - source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" - print(source) - for tokens,start,end in Word(alphas).scanString(source): - print(' '*start + '^'*(end-start)) - print(' '*start + tokens[0]) - - prints:: - - sldjf123lsdjjkf345sldkjf879lkjsfd987 - ^^^^^ - sldjf - ^^^^^^^ - lsdjjkf - ^^^^^^ - sldkjf - ^^^^^^ - lkjsfd - """ - if not self.streamlined: - self.streamline() - for e in self.ignoreExprs: - e.streamline() - - if not self.keepTabs: - instring = _ustr(instring).expandtabs() - instrlen = len(instring) - loc = 0 - preparseFn = self.preParse - parseFn = self._parse - ParserElement.resetCache() - matches = 0 - try: - while loc <= instrlen and matches < maxMatches: - try: - preloc = preparseFn( instring, loc ) - nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) - except ParseException: - loc = preloc+1 - else: - if nextLoc > loc: - matches += 1 - yield tokens, preloc, nextLoc - if overlap: - nextloc = preparseFn( instring, loc ) - if nextloc > loc: - loc = nextLoc - else: - loc += 1 - else: - loc = nextLoc - else: - loc = preloc+1 - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clears out pyparsing internal stack trace - raise exc - - def transformString( self, instring ): - """ - Extension to C{L{scanString}}, to modify matching text with modified tokens that may - be returned from a parse action. To use C{transformString}, define a grammar and - attach a parse action to it that modifies the returned token list. - Invoking C{transformString()} on a target string will then scan for matches, - and replace the matched text patterns according to the logic in the parse - action. C{transformString()} returns the resulting transformed string. - - Example:: - wd = Word(alphas) - wd.setParseAction(lambda toks: toks[0].title()) - - print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) - Prints:: - Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. - """ - out = [] - lastE = 0 - # force preservation of <TAB>s, to minimize unwanted transformation of string, and to - # keep string locs straight between transformString and scanString - self.keepTabs = True - try: - for t,s,e in self.scanString( instring ): - out.append( instring[lastE:s] ) - if t: - if isinstance(t,ParseResults): - out += t.asList() - elif isinstance(t,list): - out += t - else: - out.append(t) - lastE = e - out.append(instring[lastE:]) - out = [o for o in out if o] - return "".join(map(_ustr,_flatten(out))) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clears out pyparsing internal stack trace - raise exc - - def searchString( self, instring, maxMatches=_MAX_INT ): - """ - Another extension to C{L{scanString}}, simplifying the access to the tokens found - to match the given parse expression. May be called with optional - C{maxMatches} argument, to clip searching after 'n' matches are found. - - Example:: - # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters - cap_word = Word(alphas.upper(), alphas.lower()) - - print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) - - # the sum() builtin can be used to merge results into a single ParseResults object - print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))) - prints:: - [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']] - ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity'] - """ - try: - return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clears out pyparsing internal stack trace - raise exc - - def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): - """ - Generator method to split a string using the given expression as a separator. - May be called with optional C{maxsplit} argument, to limit the number of splits; - and the optional C{includeSeparators} argument (default=C{False}), if the separating - matching text should be included in the split results. - - Example:: - punc = oneOf(list(".,;:/-!?")) - print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) - prints:: - ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] - """ - splits = 0 - last = 0 - for t,s,e in self.scanString(instring, maxMatches=maxsplit): - yield instring[last:s] - if includeSeparators: - yield t[0] - last = e - yield instring[last:] - - def __add__(self, other ): - """ - Implementation of + operator - returns C{L{And}}. Adding strings to a ParserElement - converts them to L{Literal}s by default. - - Example:: - greet = Word(alphas) + "," + Word(alphas) + "!" - hello = "Hello, World!" - print (hello, "->", greet.parseString(hello)) - Prints:: - Hello, World! -> ['Hello', ',', 'World', '!'] - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return And( [ self, other ] ) - - def __radd__(self, other ): - """ - Implementation of + operator when left operand is not a C{L{ParserElement}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other + self - - def __sub__(self, other): - """ - Implementation of - operator, returns C{L{And}} with error stop - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return self + And._ErrorStop() + other - - def __rsub__(self, other ): - """ - Implementation of - operator when left operand is not a C{L{ParserElement}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other - self - - def __mul__(self,other): - """ - Implementation of * operator, allows use of C{expr * 3} in place of - C{expr + expr + expr}. Expressions may also me multiplied by a 2-integer - tuple, similar to C{{min,max}} multipliers in regular expressions. Tuples - may also include C{None} as in: - - C{expr*(n,None)} or C{expr*(n,)} is equivalent - to C{expr*n + L{ZeroOrMore}(expr)} - (read as "at least n instances of C{expr}") - - C{expr*(None,n)} is equivalent to C{expr*(0,n)} - (read as "0 to n instances of C{expr}") - - C{expr*(None,None)} is equivalent to C{L{ZeroOrMore}(expr)} - - C{expr*(1,None)} is equivalent to C{L{OneOrMore}(expr)} - - Note that C{expr*(None,n)} does not raise an exception if - more than n exprs exist in the input stream; that is, - C{expr*(None,n)} does not enforce a maximum number of expr - occurrences. If this behavior is desired, then write - C{expr*(None,n) + ~expr} - """ - if isinstance(other,int): - minElements, optElements = other,0 - elif isinstance(other,tuple): - other = (other + (None, None))[:2] - if other[0] is None: - other = (0, other[1]) - if isinstance(other[0],int) and other[1] is None: - if other[0] == 0: - return ZeroOrMore(self) - if other[0] == 1: - return OneOrMore(self) - else: - return self*other[0] + ZeroOrMore(self) - elif isinstance(other[0],int) and isinstance(other[1],int): - minElements, optElements = other - optElements -= minElements - else: - raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) - else: - raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) - - if minElements < 0: - raise ValueError("cannot multiply ParserElement by negative value") - if optElements < 0: - raise ValueError("second tuple value must be greater or equal to first tuple value") - if minElements == optElements == 0: - raise ValueError("cannot multiply ParserElement by 0 or (0,0)") - - if (optElements): - def makeOptionalList(n): - if n>1: - return Optional(self + makeOptionalList(n-1)) - else: - return Optional(self) - if minElements: - if minElements == 1: - ret = self + makeOptionalList(optElements) - else: - ret = And([self]*minElements) + makeOptionalList(optElements) - else: - ret = makeOptionalList(optElements) - else: - if minElements == 1: - ret = self - else: - ret = And([self]*minElements) - return ret - - def __rmul__(self, other): - return self.__mul__(other) - - def __or__(self, other ): - """ - Implementation of | operator - returns C{L{MatchFirst}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return MatchFirst( [ self, other ] ) - - def __ror__(self, other ): - """ - Implementation of | operator when left operand is not a C{L{ParserElement}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other | self - - def __xor__(self, other ): - """ - Implementation of ^ operator - returns C{L{Or}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return Or( [ self, other ] ) - - def __rxor__(self, other ): - """ - Implementation of ^ operator when left operand is not a C{L{ParserElement}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other ^ self - - def __and__(self, other ): - """ - Implementation of & operator - returns C{L{Each}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return Each( [ self, other ] ) - - def __rand__(self, other ): - """ - Implementation of & operator when left operand is not a C{L{ParserElement}} - """ - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - if not isinstance( other, ParserElement ): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other & self - - def __invert__( self ): - """ - Implementation of ~ operator - returns C{L{NotAny}} - """ - return NotAny( self ) - - def __call__(self, name=None): - """ - Shortcut for C{L{setResultsName}}, with C{listAllMatches=False}. - - If C{name} is given with a trailing C{'*'} character, then C{listAllMatches} will be - passed as C{True}. - - If C{name} is omitted, same as calling C{L{copy}}. - - Example:: - # these are equivalent - userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") - userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") - """ - if name is not None: - return self.setResultsName(name) - else: - return self.copy() - - def suppress( self ): - """ - Suppresses the output of this C{ParserElement}; useful to keep punctuation from - cluttering up returned output. - """ - return Suppress( self ) - - def leaveWhitespace( self ): - """ - Disables the skipping of whitespace before matching the characters in the - C{ParserElement}'s defined pattern. This is normally only used internally by - the pyparsing module, but may be needed in some whitespace-sensitive grammars. - """ - self.skipWhitespace = False - return self - - def setWhitespaceChars( self, chars ): - """ - Overrides the default whitespace chars - """ - self.skipWhitespace = True - self.whiteChars = chars - self.copyDefaultWhiteChars = False - return self - - def parseWithTabs( self ): - """ - Overrides default behavior to expand C{<TAB>}s to spaces before parsing the input string. - Must be called before C{parseString} when the input grammar contains elements that - match C{<TAB>} characters. - """ - self.keepTabs = True - return self - - def ignore( self, other ): - """ - Define expression to be ignored (e.g., comments) while doing pattern - matching; may be called repeatedly, to define multiple comment or other - ignorable patterns. - - Example:: - patt = OneOrMore(Word(alphas)) - patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] - - patt.ignore(cStyleComment) - patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] - """ - if isinstance(other, basestring): - other = Suppress(other) - - if isinstance( other, Suppress ): - if other not in self.ignoreExprs: - self.ignoreExprs.append(other) - else: - self.ignoreExprs.append( Suppress( other.copy() ) ) - return self - - def setDebugActions( self, startAction, successAction, exceptionAction ): - """ - Enable display of debugging messages while doing pattern matching. - """ - self.debugActions = (startAction or _defaultStartDebugAction, - successAction or _defaultSuccessDebugAction, - exceptionAction or _defaultExceptionDebugAction) - self.debug = True - return self - - def setDebug( self, flag=True ): - """ - Enable display of debugging messages while doing pattern matching. - Set C{flag} to True to enable, False to disable. - - Example:: - wd = Word(alphas).setName("alphaword") - integer = Word(nums).setName("numword") - term = wd | integer - - # turn on debugging for wd - wd.setDebug() - - OneOrMore(term).parseString("abc 123 xyz 890") - - prints:: - Match alphaword at loc 0(1,1) - Matched alphaword -> ['abc'] - Match alphaword at loc 3(1,4) - Exception raised:Expected alphaword (at char 4), (line:1, col:5) - Match alphaword at loc 7(1,8) - Matched alphaword -> ['xyz'] - Match alphaword at loc 11(1,12) - Exception raised:Expected alphaword (at char 12), (line:1, col:13) - Match alphaword at loc 15(1,16) - Exception raised:Expected alphaword (at char 15), (line:1, col:16) - - The output shown is that produced by the default debug actions - custom debug actions can be - specified using L{setDebugActions}. Prior to attempting - to match the C{wd} expression, the debugging message C{"Match <exprname> at loc <n>(<line>,<col>)"} - is shown. Then if the parse succeeds, a C{"Matched"} message is shown, or an C{"Exception raised"} - message is shown. Also note the use of L{setName} to assign a human-readable name to the expression, - which makes debugging and exception messages easier to understand - for instance, the default - name created for the C{Word} expression without calling C{setName} is C{"W:(ABCD...)"}. - """ - if flag: - self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) - else: - self.debug = False - return self - - def __str__( self ): - return self.name - - def __repr__( self ): - return _ustr(self) - - def streamline( self ): - self.streamlined = True - self.strRepr = None - return self - - def checkRecursion( self, parseElementList ): - pass - - def validate( self, validateTrace=[] ): - """ - Check defined expressions for valid structure, check for infinite recursive definitions. - """ - self.checkRecursion( [] ) - - def parseFile( self, file_or_filename, parseAll=False ): - """ - Execute the parse expression on the given file or filename. - If a filename is specified (instead of a file object), - the entire file is opened, read, and closed before parsing. - """ - try: - file_contents = file_or_filename.read() - except AttributeError: - with open(file_or_filename, "r") as f: - file_contents = f.read() - try: - return self.parseString(file_contents, parseAll) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clears out pyparsing internal stack trace - raise exc - - def __eq__(self,other): - if isinstance(other, ParserElement): - return self is other or vars(self) == vars(other) - elif isinstance(other, basestring): - return self.matches(other) - else: - return super(ParserElement,self)==other - - def __ne__(self,other): - return not (self == other) - - def __hash__(self): - return hash(id(self)) - - def __req__(self,other): - return self == other - - def __rne__(self,other): - return not (self == other) - - def matches(self, testString, parseAll=True): - """ - Method for quick testing of a parser against a test string. Good for simple - inline microtests of sub expressions while building up larger parser. - - Parameters: - - testString - to test against this expression for a match - - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests - - Example:: - expr = Word(nums) - assert expr.matches("100") - """ - try: - self.parseString(_ustr(testString), parseAll=parseAll) - return True - except ParseBaseException: - return False - - def runTests(self, tests, parseAll=True, comment='#', fullDump=True, printResults=True, failureTests=False): - """ - Execute the parse expression on a series of test strings, showing each - test, the parsed results or where the parse failed. Quick and easy way to - run a parse expression against a list of sample strings. - - Parameters: - - tests - a list of separate test strings, or a multiline string of test strings - - parseAll - (default=C{True}) - flag to pass to C{L{parseString}} when running tests - - comment - (default=C{'#'}) - expression for indicating embedded comments in the test - string; pass None to disable comment filtering - - fullDump - (default=C{True}) - dump results as list followed by results names in nested outline; - if False, only dump nested list - - printResults - (default=C{True}) prints test output to stdout - - failureTests - (default=C{False}) indicates if these tests are expected to fail parsing - - Returns: a (success, results) tuple, where success indicates that all tests succeeded - (or failed if C{failureTests} is True), and the results contain a list of lines of each - test's output - - Example:: - number_expr = pyparsing_common.number.copy() - - result = number_expr.runTests(''' - # unsigned integer - 100 - # negative integer - -100 - # float with scientific notation - 6.02e23 - # integer with scientific notation - 1e-12 - ''') - print("Success" if result[0] else "Failed!") - - result = number_expr.runTests(''' - # stray character - 100Z - # missing leading digit before '.' - -.100 - # too many '.' - 3.14.159 - ''', failureTests=True) - print("Success" if result[0] else "Failed!") - prints:: - # unsigned integer - 100 - [100] - - # negative integer - -100 - [-100] - - # float with scientific notation - 6.02e23 - [6.02e+23] - - # integer with scientific notation - 1e-12 - [1e-12] - - Success - - # stray character - 100Z - ^ - FAIL: Expected end of text (at char 3), (line:1, col:4) - - # missing leading digit before '.' - -.100 - ^ - FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) - - # too many '.' - 3.14.159 - ^ - FAIL: Expected end of text (at char 4), (line:1, col:5) - - Success - - Each test string must be on a single line. If you want to test a string that spans multiple - lines, create a test like this:: - - expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") - - (Note that this is a raw string literal, you must include the leading 'r'.) - """ - if isinstance(tests, basestring): - tests = list(map(str.strip, tests.rstrip().splitlines())) - if isinstance(comment, basestring): - comment = Literal(comment) - allResults = [] - comments = [] - success = True - for t in tests: - if comment is not None and comment.matches(t, False) or comments and not t: - comments.append(t) - continue - if not t: - continue - out = ['\n'.join(comments), t] - comments = [] - try: - t = t.replace(r'\n','\n') - result = self.parseString(t, parseAll=parseAll) - out.append(result.dump(full=fullDump)) - success = success and not failureTests - except ParseBaseException as pe: - fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" - if '\n' in t: - out.append(line(pe.loc, t)) - out.append(' '*(col(pe.loc,t)-1) + '^' + fatal) - else: - out.append(' '*pe.loc + '^' + fatal) - out.append("FAIL: " + str(pe)) - success = success and failureTests - result = pe - except Exception as exc: - out.append("FAIL-EXCEPTION: " + str(exc)) - success = success and failureTests - result = exc - - if printResults: - if fullDump: - out.append('') - print('\n'.join(out)) - - allResults.append((t, result)) - - return success, allResults - - -class Token(ParserElement): - """ - Abstract C{ParserElement} subclass, for defining atomic matching patterns. - """ - def __init__( self ): - super(Token,self).__init__( savelist=False ) - - -class Empty(Token): - """ - An empty token, will always match. - """ - def __init__( self ): - super(Empty,self).__init__() - self.name = "Empty" - self.mayReturnEmpty = True - self.mayIndexError = False - - -class NoMatch(Token): - """ - A token that will never match. - """ - def __init__( self ): - super(NoMatch,self).__init__() - self.name = "NoMatch" - self.mayReturnEmpty = True - self.mayIndexError = False - self.errmsg = "Unmatchable token" - - def parseImpl( self, instring, loc, doActions=True ): - raise ParseException(instring, loc, self.errmsg, self) - - -class Literal(Token): - """ - Token to exactly match a specified string. - - Example:: - Literal('blah').parseString('blah') # -> ['blah'] - Literal('blah').parseString('blahfooblah') # -> ['blah'] - Literal('blah').parseString('bla') # -> Exception: Expected "blah" - - For case-insensitive matching, use L{CaselessLiteral}. - - For keyword matching (force word break before and after the matched string), - use L{Keyword} or L{CaselessKeyword}. - """ - def __init__( self, matchString ): - super(Literal,self).__init__() - self.match = matchString - self.matchLen = len(matchString) - try: - self.firstMatchChar = matchString[0] - except IndexError: - warnings.warn("null string passed to Literal; use Empty() instead", - SyntaxWarning, stacklevel=2) - self.__class__ = Empty - self.name = '"%s"' % _ustr(self.match) - self.errmsg = "Expected " + self.name - self.mayReturnEmpty = False - self.mayIndexError = False - - # Performance tuning: this routine gets called a *lot* - # if this is a single character match string and the first character matches, - # short-circuit as quickly as possible, and avoid calling startswith - #~ @profile - def parseImpl( self, instring, loc, doActions=True ): - if (instring[loc] == self.firstMatchChar and - (self.matchLen==1 or instring.startswith(self.match,loc)) ): - return loc+self.matchLen, self.match - raise ParseException(instring, loc, self.errmsg, self) -_L = Literal -ParserElement._literalStringClass = Literal - -class Keyword(Token): - """ - Token to exactly match a specified string as a keyword, that is, it must be - immediately followed by a non-keyword character. Compare with C{L{Literal}}: - - C{Literal("if")} will match the leading C{'if'} in C{'ifAndOnlyIf'}. - - C{Keyword("if")} will not; it will only match the leading C{'if'} in C{'if x=1'}, or C{'if(y==2)'} - Accepts two optional constructor arguments in addition to the keyword string: - - C{identChars} is a string of characters that would be valid identifier characters, - defaulting to all alphanumerics + "_" and "$" - - C{caseless} allows case-insensitive matching, default is C{False}. - - Example:: - Keyword("start").parseString("start") # -> ['start'] - Keyword("start").parseString("starting") # -> Exception - - For case-insensitive matching, use L{CaselessKeyword}. - """ - DEFAULT_KEYWORD_CHARS = alphanums+"_$" - - def __init__( self, matchString, identChars=None, caseless=False ): - super(Keyword,self).__init__() - if identChars is None: - identChars = Keyword.DEFAULT_KEYWORD_CHARS - self.match = matchString - self.matchLen = len(matchString) - try: - self.firstMatchChar = matchString[0] - except IndexError: - warnings.warn("null string passed to Keyword; use Empty() instead", - SyntaxWarning, stacklevel=2) - self.name = '"%s"' % self.match - self.errmsg = "Expected " + self.name - self.mayReturnEmpty = False - self.mayIndexError = False - self.caseless = caseless - if caseless: - self.caselessmatch = matchString.upper() - identChars = identChars.upper() - self.identChars = set(identChars) - - def parseImpl( self, instring, loc, doActions=True ): - if self.caseless: - if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and - (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and - (loc == 0 or instring[loc-1].upper() not in self.identChars) ): - return loc+self.matchLen, self.match - else: - if (instring[loc] == self.firstMatchChar and - (self.matchLen==1 or instring.startswith(self.match,loc)) and - (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and - (loc == 0 or instring[loc-1] not in self.identChars) ): - return loc+self.matchLen, self.match - raise ParseException(instring, loc, self.errmsg, self) - - def copy(self): - c = super(Keyword,self).copy() - c.identChars = Keyword.DEFAULT_KEYWORD_CHARS - return c - - @staticmethod - def setDefaultKeywordChars( chars ): - """Overrides the default Keyword chars - """ - Keyword.DEFAULT_KEYWORD_CHARS = chars - -class CaselessLiteral(Literal): - """ - Token to match a specified string, ignoring case of letters. - Note: the matched results will always be in the case of the given - match string, NOT the case of the input text. - - Example:: - OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] - - (Contrast with example for L{CaselessKeyword}.) - """ - def __init__( self, matchString ): - super(CaselessLiteral,self).__init__( matchString.upper() ) - # Preserve the defining literal. - self.returnString = matchString - self.name = "'%s'" % self.returnString - self.errmsg = "Expected " + self.name - - def parseImpl( self, instring, loc, doActions=True ): - if instring[ loc:loc+self.matchLen ].upper() == self.match: - return loc+self.matchLen, self.returnString - raise ParseException(instring, loc, self.errmsg, self) - -class CaselessKeyword(Keyword): - """ - Caseless version of L{Keyword}. - - Example:: - OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] - - (Contrast with example for L{CaselessLiteral}.) - """ - def __init__( self, matchString, identChars=None ): - super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) - - def parseImpl( self, instring, loc, doActions=True ): - if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and - (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): - return loc+self.matchLen, self.match - raise ParseException(instring, loc, self.errmsg, self) - -class CloseMatch(Token): - """ - A variation on L{Literal} which matches "close" matches, that is, - strings with at most 'n' mismatching characters. C{CloseMatch} takes parameters: - - C{match_string} - string to be matched - - C{maxMismatches} - (C{default=1}) maximum number of mismatches allowed to count as a match - - The results from a successful parse will contain the matched text from the input string and the following named results: - - C{mismatches} - a list of the positions within the match_string where mismatches were found - - C{original} - the original match_string used to compare against the input string - - If C{mismatches} is an empty list, then the match was an exact match. - - Example:: - patt = CloseMatch("ATCATCGAATGGA") - patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) - patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) - - # exact match - patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) - - # close match allowing up to 2 mismatches - patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) - patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) - """ - def __init__(self, match_string, maxMismatches=1): - super(CloseMatch,self).__init__() - self.name = match_string - self.match_string = match_string - self.maxMismatches = maxMismatches - self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) - self.mayIndexError = False - self.mayReturnEmpty = False - - def parseImpl( self, instring, loc, doActions=True ): - start = loc - instrlen = len(instring) - maxloc = start + len(self.match_string) - - if maxloc <= instrlen: - match_string = self.match_string - match_stringloc = 0 - mismatches = [] - maxMismatches = self.maxMismatches - - for match_stringloc,s_m in enumerate(zip(instring[loc:maxloc], self.match_string)): - src,mat = s_m - if src != mat: - mismatches.append(match_stringloc) - if len(mismatches) > maxMismatches: - break - else: - loc = match_stringloc + 1 - results = ParseResults([instring[start:loc]]) - results['original'] = self.match_string - results['mismatches'] = mismatches - return loc, results - - raise ParseException(instring, loc, self.errmsg, self) - - -class Word(Token): - """ - Token for matching words composed of allowed character sets. - Defined with string containing all allowed initial characters, - an optional string containing allowed body characters (if omitted, - defaults to the initial character set), and an optional minimum, - maximum, and/or exact length. The default value for C{min} is 1 (a - minimum value < 1 is not valid); the default values for C{max} and C{exact} - are 0, meaning no maximum or exact length restriction. An optional - C{excludeChars} parameter can list characters that might be found in - the input C{bodyChars} string; useful to define a word of all printables - except for one or two characters, for instance. - - L{srange} is useful for defining custom character set strings for defining - C{Word} expressions, using range notation from regular expression character sets. - - A common mistake is to use C{Word} to match a specific literal string, as in - C{Word("Address")}. Remember that C{Word} uses the string argument to define - I{sets} of matchable characters. This expression would match "Add", "AAA", - "dAred", or any other word made up of the characters 'A', 'd', 'r', 'e', and 's'. - To match an exact literal string, use L{Literal} or L{Keyword}. - - pyparsing includes helper strings for building Words: - - L{alphas} - - L{nums} - - L{alphanums} - - L{hexnums} - - L{alphas8bit} (alphabetic characters in ASCII range 128-255 - accented, tilded, umlauted, etc.) - - L{punc8bit} (non-alphabetic characters in ASCII range 128-255 - currency, symbols, superscripts, diacriticals, etc.) - - L{printables} (any non-whitespace character) - - Example:: - # a word composed of digits - integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) - - # a word with a leading capital, and zero or more lowercase - capital_word = Word(alphas.upper(), alphas.lower()) - - # hostnames are alphanumeric, with leading alpha, and '-' - hostname = Word(alphas, alphanums+'-') - - # roman numeral (not a strict parser, accepts invalid mix of characters) - roman = Word("IVXLCDM") - - # any string of non-whitespace characters, except for ',' - csv_value = Word(printables, excludeChars=",") - """ - def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None ): - super(Word,self).__init__() - if excludeChars: - initChars = ''.join(c for c in initChars if c not in excludeChars) - if bodyChars: - bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) - self.initCharsOrig = initChars - self.initChars = set(initChars) - if bodyChars : - self.bodyCharsOrig = bodyChars - self.bodyChars = set(bodyChars) - else: - self.bodyCharsOrig = initChars - self.bodyChars = set(initChars) - - self.maxSpecified = max > 0 - - if min < 1: - raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") - - self.minLen = min - - if max > 0: - self.maxLen = max - else: - self.maxLen = _MAX_INT - - if exact > 0: - self.maxLen = exact - self.minLen = exact - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayIndexError = False - self.asKeyword = asKeyword - - if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): - if self.bodyCharsOrig == self.initCharsOrig: - self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) - elif len(self.initCharsOrig) == 1: - self.reString = "%s[%s]*" % \ - (re.escape(self.initCharsOrig), - _escapeRegexRangeChars(self.bodyCharsOrig),) - else: - self.reString = "[%s][%s]*" % \ - (_escapeRegexRangeChars(self.initCharsOrig), - _escapeRegexRangeChars(self.bodyCharsOrig),) - if self.asKeyword: - self.reString = r"\b"+self.reString+r"\b" - try: - self.re = re.compile( self.reString ) - except Exception: - self.re = None - - def parseImpl( self, instring, loc, doActions=True ): - if self.re: - result = self.re.match(instring,loc) - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - return loc, result.group() - - if not(instring[ loc ] in self.initChars): - raise ParseException(instring, loc, self.errmsg, self) - - start = loc - loc += 1 - instrlen = len(instring) - bodychars = self.bodyChars - maxloc = start + self.maxLen - maxloc = min( maxloc, instrlen ) - while loc < maxloc and instring[loc] in bodychars: - loc += 1 - - throwException = False - if loc - start < self.minLen: - throwException = True - if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: - throwException = True - if self.asKeyword: - if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): - throwException = True - - if throwException: - raise ParseException(instring, loc, self.errmsg, self) - - return loc, instring[start:loc] - - def __str__( self ): - try: - return super(Word,self).__str__() - except Exception: - pass - - - if self.strRepr is None: - - def charsAsStr(s): - if len(s)>4: - return s[:4]+"..." - else: - return s - - if ( self.initCharsOrig != self.bodyCharsOrig ): - self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) - else: - self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) - - return self.strRepr - - -class Regex(Token): - r""" - Token for matching strings that match a given regular expression. - Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. - If the given regex contains named groups (defined using C{(?P<name>...)}), these will be preserved as - named parse results. - - Example:: - realnum = Regex(r"[+-]?\d+\.\d*") - date = Regex(r'(?P<year>\d{4})-(?P<month>\d\d?)-(?P<day>\d\d?)') - # ref: http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression - roman = Regex(r"M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") - """ - compiledREtype = type(re.compile("[A-Z]")) - def __init__( self, pattern, flags=0): - """The parameters C{pattern} and C{flags} are passed to the C{re.compile()} function as-is. See the Python C{re} module for an explanation of the acceptable patterns and flags.""" - super(Regex,self).__init__() - - if isinstance(pattern, basestring): - if not pattern: - warnings.warn("null string passed to Regex; use Empty() instead", - SyntaxWarning, stacklevel=2) - - self.pattern = pattern - self.flags = flags - - try: - self.re = re.compile(self.pattern, self.flags) - self.reString = self.pattern - except sre_constants.error: - warnings.warn("invalid pattern (%s) passed to Regex" % pattern, - SyntaxWarning, stacklevel=2) - raise - - elif isinstance(pattern, Regex.compiledREtype): - self.re = pattern - self.pattern = \ - self.reString = str(pattern) - self.flags = flags - - else: - raise ValueError("Regex may only be constructed with a string or a compiled RE object") - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayIndexError = False - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - result = self.re.match(instring,loc) - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - d = result.groupdict() - ret = ParseResults(result.group()) - if d: - for k in d: - ret[k] = d[k] - return loc,ret - - def __str__( self ): - try: - return super(Regex,self).__str__() - except Exception: - pass - - if self.strRepr is None: - self.strRepr = "Re:(%s)" % repr(self.pattern) - - return self.strRepr - - -class QuotedString(Token): - r""" - Token for matching strings that are delimited by quoting characters. - - Defined with the following parameters: - - quoteChar - string of one or more characters defining the quote delimiting string - - escChar - character to escape quotes, typically backslash (default=C{None}) - - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=C{None}) - - multiline - boolean indicating whether quotes can span multiple lines (default=C{False}) - - unquoteResults - boolean indicating whether the matched text should be unquoted (default=C{True}) - - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=C{None} => same as quoteChar) - - convertWhitespaceEscapes - convert escaped whitespace (C{'\t'}, C{'\n'}, etc.) to actual whitespace (default=C{True}) - - Example:: - qs = QuotedString('"') - print(qs.searchString('lsjdf "This is the quote" sldjf')) - complex_qs = QuotedString('{{', endQuoteChar='}}') - print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) - sql_qs = QuotedString('"', escQuote='""') - print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) - prints:: - [['This is the quote']] - [['This is the "quote"']] - [['This is the quote with "embedded" quotes']] - """ - def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): - super(QuotedString,self).__init__() - - # remove white space from quote chars - wont work anyway - quoteChar = quoteChar.strip() - if not quoteChar: - warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) - raise SyntaxError() - - if endQuoteChar is None: - endQuoteChar = quoteChar - else: - endQuoteChar = endQuoteChar.strip() - if not endQuoteChar: - warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) - raise SyntaxError() - - self.quoteChar = quoteChar - self.quoteCharLen = len(quoteChar) - self.firstQuoteChar = quoteChar[0] - self.endQuoteChar = endQuoteChar - self.endQuoteCharLen = len(endQuoteChar) - self.escChar = escChar - self.escQuote = escQuote - self.unquoteResults = unquoteResults - self.convertWhitespaceEscapes = convertWhitespaceEscapes - - if multiline: - self.flags = re.MULTILINE | re.DOTALL - self.pattern = r'%s(?:[^%s%s]' % \ - ( re.escape(self.quoteChar), - _escapeRegexRangeChars(self.endQuoteChar[0]), - (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) - else: - self.flags = 0 - self.pattern = r'%s(?:[^%s\n\r%s]' % \ - ( re.escape(self.quoteChar), - _escapeRegexRangeChars(self.endQuoteChar[0]), - (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) - if len(self.endQuoteChar) > 1: - self.pattern += ( - '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), - _escapeRegexRangeChars(self.endQuoteChar[i])) - for i in range(len(self.endQuoteChar)-1,0,-1)) + ')' - ) - if escQuote: - self.pattern += (r'|(?:%s)' % re.escape(escQuote)) - if escChar: - self.pattern += (r'|(?:%s.)' % re.escape(escChar)) - self.escCharReplacePattern = re.escape(self.escChar)+"(.)" - self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) - - try: - self.re = re.compile(self.pattern, self.flags) - self.reString = self.pattern - except sre_constants.error: - warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, - SyntaxWarning, stacklevel=2) - raise - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayIndexError = False - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - ret = result.group() - - if self.unquoteResults: - - # strip off quotes - ret = ret[self.quoteCharLen:-self.endQuoteCharLen] - - if isinstance(ret,basestring): - # replace escaped whitespace - if '\\' in ret and self.convertWhitespaceEscapes: - ws_map = { - r'\t' : '\t', - r'\n' : '\n', - r'\f' : '\f', - r'\r' : '\r', - } - for wslit,wschar in ws_map.items(): - ret = ret.replace(wslit, wschar) - - # replace escaped characters - if self.escChar: - ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret) - - # replace escaped quotes - if self.escQuote: - ret = ret.replace(self.escQuote, self.endQuoteChar) - - return loc, ret - - def __str__( self ): - try: - return super(QuotedString,self).__str__() - except Exception: - pass - - if self.strRepr is None: - self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) - - return self.strRepr - - -class CharsNotIn(Token): - """ - Token for matching words composed of characters I{not} in a given set (will - include whitespace in matched characters if not listed in the provided exclusion set - see example). - Defined with string containing all disallowed characters, and an optional - minimum, maximum, and/or exact length. The default value for C{min} is 1 (a - minimum value < 1 is not valid); the default values for C{max} and C{exact} - are 0, meaning no maximum or exact length restriction. - - Example:: - # define a comma-separated-value as anything that is not a ',' - csv_value = CharsNotIn(',') - print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) - prints:: - ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] - """ - def __init__( self, notChars, min=1, max=0, exact=0 ): - super(CharsNotIn,self).__init__() - self.skipWhitespace = False - self.notChars = notChars - - if min < 1: - raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") - - self.minLen = min - - if max > 0: - self.maxLen = max - else: - self.maxLen = _MAX_INT - - if exact > 0: - self.maxLen = exact - self.minLen = exact - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayReturnEmpty = ( self.minLen == 0 ) - self.mayIndexError = False - - def parseImpl( self, instring, loc, doActions=True ): - if instring[loc] in self.notChars: - raise ParseException(instring, loc, self.errmsg, self) - - start = loc - loc += 1 - notchars = self.notChars - maxlen = min( start+self.maxLen, len(instring) ) - while loc < maxlen and \ - (instring[loc] not in notchars): - loc += 1 - - if loc - start < self.minLen: - raise ParseException(instring, loc, self.errmsg, self) - - return loc, instring[start:loc] - - def __str__( self ): - try: - return super(CharsNotIn, self).__str__() - except Exception: - pass - - if self.strRepr is None: - if len(self.notChars) > 4: - self.strRepr = "!W:(%s...)" % self.notChars[:4] - else: - self.strRepr = "!W:(%s)" % self.notChars - - return self.strRepr - -class White(Token): - """ - Special matching class for matching whitespace. Normally, whitespace is ignored - by pyparsing grammars. This class is included when some whitespace structures - are significant. Define with a string containing the whitespace characters to be - matched; default is C{" \\t\\r\\n"}. Also takes optional C{min}, C{max}, and C{exact} arguments, - as defined for the C{L{Word}} class. - """ - whiteStrs = { - " " : "<SPC>", - "\t": "<TAB>", - "\n": "<LF>", - "\r": "<CR>", - "\f": "<FF>", - } - def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): - super(White,self).__init__() - self.matchWhite = ws - self.setWhitespaceChars( "".join(c for c in self.whiteChars if c not in self.matchWhite) ) - #~ self.leaveWhitespace() - self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) - self.mayReturnEmpty = True - self.errmsg = "Expected " + self.name - - self.minLen = min - - if max > 0: - self.maxLen = max - else: - self.maxLen = _MAX_INT - - if exact > 0: - self.maxLen = exact - self.minLen = exact - - def parseImpl( self, instring, loc, doActions=True ): - if not(instring[ loc ] in self.matchWhite): - raise ParseException(instring, loc, self.errmsg, self) - start = loc - loc += 1 - maxloc = start + self.maxLen - maxloc = min( maxloc, len(instring) ) - while loc < maxloc and instring[loc] in self.matchWhite: - loc += 1 - - if loc - start < self.minLen: - raise ParseException(instring, loc, self.errmsg, self) - - return loc, instring[start:loc] - - -class _PositionToken(Token): - def __init__( self ): - super(_PositionToken,self).__init__() - self.name=self.__class__.__name__ - self.mayReturnEmpty = True - self.mayIndexError = False - -class GoToColumn(_PositionToken): - """ - Token to advance to a specific column of input text; useful for tabular report scraping. - """ - def __init__( self, colno ): - super(GoToColumn,self).__init__() - self.col = colno - - def preParse( self, instring, loc ): - if col(loc,instring) != self.col: - instrlen = len(instring) - if self.ignoreExprs: - loc = self._skipIgnorables( instring, loc ) - while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : - loc += 1 - return loc - - def parseImpl( self, instring, loc, doActions=True ): - thiscol = col( loc, instring ) - if thiscol > self.col: - raise ParseException( instring, loc, "Text not in expected column", self ) - newloc = loc + self.col - thiscol - ret = instring[ loc: newloc ] - return newloc, ret - - -class LineStart(_PositionToken): - """ - Matches if current position is at the beginning of a line within the parse string - - Example:: - - test = '''\ - AAA this line - AAA and this line - AAA but not this one - B AAA and definitely not this one - ''' - - for t in (LineStart() + 'AAA' + restOfLine).searchString(test): - print(t) - - Prints:: - ['AAA', ' this line'] - ['AAA', ' and this line'] - - """ - def __init__( self ): - super(LineStart,self).__init__() - self.errmsg = "Expected start of line" - - def parseImpl( self, instring, loc, doActions=True ): - if col(loc, instring) == 1: - return loc, [] - raise ParseException(instring, loc, self.errmsg, self) - -class LineEnd(_PositionToken): - """ - Matches if current position is at the end of a line within the parse string - """ - def __init__( self ): - super(LineEnd,self).__init__() - self.setWhitespaceChars( ParserElement.DEFAULT_WHITE_CHARS.replace("\n","") ) - self.errmsg = "Expected end of line" - - def parseImpl( self, instring, loc, doActions=True ): - if loc<len(instring): - if instring[loc] == "\n": - return loc+1, "\n" - else: - raise ParseException(instring, loc, self.errmsg, self) - elif loc == len(instring): - return loc+1, [] - else: - raise ParseException(instring, loc, self.errmsg, self) - -class StringStart(_PositionToken): - """ - Matches if current position is at the beginning of the parse string - """ - def __init__( self ): - super(StringStart,self).__init__() - self.errmsg = "Expected start of text" - - def parseImpl( self, instring, loc, doActions=True ): - if loc != 0: - # see if entire string up to here is just whitespace and ignoreables - if loc != self.preParse( instring, 0 ): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - -class StringEnd(_PositionToken): - """ - Matches if current position is at the end of the parse string - """ - def __init__( self ): - super(StringEnd,self).__init__() - self.errmsg = "Expected end of text" - - def parseImpl( self, instring, loc, doActions=True ): - if loc < len(instring): - raise ParseException(instring, loc, self.errmsg, self) - elif loc == len(instring): - return loc+1, [] - elif loc > len(instring): - return loc, [] - else: - raise ParseException(instring, loc, self.errmsg, self) - -class WordStart(_PositionToken): - """ - Matches if the current position is at the beginning of a Word, and - is not preceded by any character in a given set of C{wordChars} - (default=C{printables}). To emulate the C{\b} behavior of regular expressions, - use C{WordStart(alphanums)}. C{WordStart} will also match at the beginning of - the string being parsed, or at the beginning of a line. - """ - def __init__(self, wordChars = printables): - super(WordStart,self).__init__() - self.wordChars = set(wordChars) - self.errmsg = "Not at the start of a word" - - def parseImpl(self, instring, loc, doActions=True ): - if loc != 0: - if (instring[loc-1] in self.wordChars or - instring[loc] not in self.wordChars): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - -class WordEnd(_PositionToken): - """ - Matches if the current position is at the end of a Word, and - is not followed by any character in a given set of C{wordChars} - (default=C{printables}). To emulate the C{\b} behavior of regular expressions, - use C{WordEnd(alphanums)}. C{WordEnd} will also match at the end of - the string being parsed, or at the end of a line. - """ - def __init__(self, wordChars = printables): - super(WordEnd,self).__init__() - self.wordChars = set(wordChars) - self.skipWhitespace = False - self.errmsg = "Not at the end of a word" - - def parseImpl(self, instring, loc, doActions=True ): - instrlen = len(instring) - if instrlen>0 and loc<instrlen: - if (instring[loc] in self.wordChars or - instring[loc-1] not in self.wordChars): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - - -class ParseExpression(ParserElement): - """ - Abstract subclass of ParserElement, for combining and post-processing parsed tokens. - """ - def __init__( self, exprs, savelist = False ): - super(ParseExpression,self).__init__(savelist) - if isinstance( exprs, _generatorType ): - exprs = list(exprs) - - if isinstance( exprs, basestring ): - self.exprs = [ ParserElement._literalStringClass( exprs ) ] - elif isinstance( exprs, collections.Iterable ): - exprs = list(exprs) - # if sequence of strings provided, wrap with Literal - if all(isinstance(expr, basestring) for expr in exprs): - exprs = map(ParserElement._literalStringClass, exprs) - self.exprs = list(exprs) - else: - try: - self.exprs = list( exprs ) - except TypeError: - self.exprs = [ exprs ] - self.callPreparse = False - - def __getitem__( self, i ): - return self.exprs[i] - - def append( self, other ): - self.exprs.append( other ) - self.strRepr = None - return self - - def leaveWhitespace( self ): - """Extends C{leaveWhitespace} defined in base class, and also invokes C{leaveWhitespace} on - all contained expressions.""" - self.skipWhitespace = False - self.exprs = [ e.copy() for e in self.exprs ] - for e in self.exprs: - e.leaveWhitespace() - return self - - def ignore( self, other ): - if isinstance( other, Suppress ): - if other not in self.ignoreExprs: - super( ParseExpression, self).ignore( other ) - for e in self.exprs: - e.ignore( self.ignoreExprs[-1] ) - else: - super( ParseExpression, self).ignore( other ) - for e in self.exprs: - e.ignore( self.ignoreExprs[-1] ) - return self - - def __str__( self ): - try: - return super(ParseExpression,self).__str__() - except Exception: - pass - - if self.strRepr is None: - self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) - return self.strRepr - - def streamline( self ): - super(ParseExpression,self).streamline() - - for e in self.exprs: - e.streamline() - - # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) - # but only if there are no parse actions or resultsNames on the nested And's - # (likewise for Or's and MatchFirst's) - if ( len(self.exprs) == 2 ): - other = self.exprs[0] - if ( isinstance( other, self.__class__ ) and - not(other.parseAction) and - other.resultsName is None and - not other.debug ): - self.exprs = other.exprs[:] + [ self.exprs[1] ] - self.strRepr = None - self.mayReturnEmpty |= other.mayReturnEmpty - self.mayIndexError |= other.mayIndexError - - other = self.exprs[-1] - if ( isinstance( other, self.__class__ ) and - not(other.parseAction) and - other.resultsName is None and - not other.debug ): - self.exprs = self.exprs[:-1] + other.exprs[:] - self.strRepr = None - self.mayReturnEmpty |= other.mayReturnEmpty - self.mayIndexError |= other.mayIndexError - - self.errmsg = "Expected " + _ustr(self) - - return self - - def setResultsName( self, name, listAllMatches=False ): - ret = super(ParseExpression,self).setResultsName(name,listAllMatches) - return ret - - def validate( self, validateTrace=[] ): - tmp = validateTrace[:]+[self] - for e in self.exprs: - e.validate(tmp) - self.checkRecursion( [] ) - - def copy(self): - ret = super(ParseExpression,self).copy() - ret.exprs = [e.copy() for e in self.exprs] - return ret - -class And(ParseExpression): - """ - Requires all given C{ParseExpression}s to be found in the given order. - Expressions may be separated by whitespace. - May be constructed using the C{'+'} operator. - May also be constructed using the C{'-'} operator, which will suppress backtracking. - - Example:: - integer = Word(nums) - name_expr = OneOrMore(Word(alphas)) - - expr = And([integer("id"),name_expr("name"),integer("age")]) - # more easily written as: - expr = integer("id") + name_expr("name") + integer("age") - """ - - class _ErrorStop(Empty): - def __init__(self, *args, **kwargs): - super(And._ErrorStop,self).__init__(*args, **kwargs) - self.name = '-' - self.leaveWhitespace() - - def __init__( self, exprs, savelist = True ): - super(And,self).__init__(exprs, savelist) - self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) - self.setWhitespaceChars( self.exprs[0].whiteChars ) - self.skipWhitespace = self.exprs[0].skipWhitespace - self.callPreparse = True - - def parseImpl( self, instring, loc, doActions=True ): - # pass False as last arg to _parse for first element, since we already - # pre-parsed the string as part of our And pre-parsing - loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) - errorStop = False - for e in self.exprs[1:]: - if isinstance(e, And._ErrorStop): - errorStop = True - continue - if errorStop: - try: - loc, exprtokens = e._parse( instring, loc, doActions ) - except ParseSyntaxException: - raise - except ParseBaseException as pe: - pe.__traceback__ = None - raise ParseSyntaxException._from_exception(pe) - except IndexError: - raise ParseSyntaxException(instring, len(instring), self.errmsg, self) - else: - loc, exprtokens = e._parse( instring, loc, doActions ) - if exprtokens or exprtokens.haskeys(): - resultlist += exprtokens - return loc, resultlist - - def __iadd__(self, other ): - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - return self.append( other ) #And( [ self, other ] ) - - def checkRecursion( self, parseElementList ): - subRecCheckList = parseElementList[:] + [ self ] - for e in self.exprs: - e.checkRecursion( subRecCheckList ) - if not e.mayReturnEmpty: - break - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - -class Or(ParseExpression): - """ - Requires that at least one C{ParseExpression} is found. - If two expressions match, the expression that matches the longest string will be used. - May be constructed using the C{'^'} operator. - - Example:: - # construct Or using '^' operator - - number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) - print(number.searchString("123 3.1416 789")) - prints:: - [['123'], ['3.1416'], ['789']] - """ - def __init__( self, exprs, savelist = False ): - super(Or,self).__init__(exprs, savelist) - if self.exprs: - self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) - else: - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - maxExcLoc = -1 - maxException = None - matches = [] - for e in self.exprs: - try: - loc2 = e.tryParse( instring, loc ) - except ParseException as err: - err.__traceback__ = None - if err.loc > maxExcLoc: - maxException = err - maxExcLoc = err.loc - except IndexError: - if len(instring) > maxExcLoc: - maxException = ParseException(instring,len(instring),e.errmsg,self) - maxExcLoc = len(instring) - else: - # save match among all matches, to retry longest to shortest - matches.append((loc2, e)) - - if matches: - matches.sort(key=lambda x: -x[0]) - for _,e in matches: - try: - return e._parse( instring, loc, doActions ) - except ParseException as err: - err.__traceback__ = None - if err.loc > maxExcLoc: - maxException = err - maxExcLoc = err.loc - - if maxException is not None: - maxException.msg = self.errmsg - raise maxException - else: - raise ParseException(instring, loc, "no defined alternatives to match", self) - - - def __ixor__(self, other ): - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - return self.append( other ) #Or( [ self, other ] ) - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - def checkRecursion( self, parseElementList ): - subRecCheckList = parseElementList[:] + [ self ] - for e in self.exprs: - e.checkRecursion( subRecCheckList ) - - -class MatchFirst(ParseExpression): - """ - Requires that at least one C{ParseExpression} is found. - If two expressions match, the first one listed is the one that will match. - May be constructed using the C{'|'} operator. - - Example:: - # construct MatchFirst using '|' operator - - # watch the order of expressions to match - number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) - print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] - - # put more selective expression first - number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) - print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] - """ - def __init__( self, exprs, savelist = False ): - super(MatchFirst,self).__init__(exprs, savelist) - if self.exprs: - self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) - else: - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - maxExcLoc = -1 - maxException = None - for e in self.exprs: - try: - ret = e._parse( instring, loc, doActions ) - return ret - except ParseException as err: - if err.loc > maxExcLoc: - maxException = err - maxExcLoc = err.loc - except IndexError: - if len(instring) > maxExcLoc: - maxException = ParseException(instring,len(instring),e.errmsg,self) - maxExcLoc = len(instring) - - # only got here if no expression matched, raise exception for match that made it the furthest - else: - if maxException is not None: - maxException.msg = self.errmsg - raise maxException - else: - raise ParseException(instring, loc, "no defined alternatives to match", self) - - def __ior__(self, other ): - if isinstance( other, basestring ): - other = ParserElement._literalStringClass( other ) - return self.append( other ) #MatchFirst( [ self, other ] ) - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - def checkRecursion( self, parseElementList ): - subRecCheckList = parseElementList[:] + [ self ] - for e in self.exprs: - e.checkRecursion( subRecCheckList ) - - -class Each(ParseExpression): - """ - Requires all given C{ParseExpression}s to be found, but in any order. - Expressions may be separated by whitespace. - May be constructed using the C{'&'} operator. - - Example:: - color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") - shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") - integer = Word(nums) - shape_attr = "shape:" + shape_type("shape") - posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") - color_attr = "color:" + color("color") - size_attr = "size:" + integer("size") - - # use Each (using operator '&') to accept attributes in any order - # (shape and posn are required, color and size are optional) - shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) - - shape_spec.runTests(''' - shape: SQUARE color: BLACK posn: 100, 120 - shape: CIRCLE size: 50 color: BLUE posn: 50,80 - color:GREEN size:20 shape:TRIANGLE posn:20,40 - ''' - ) - prints:: - shape: SQUARE color: BLACK posn: 100, 120 - ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] - - color: BLACK - - posn: ['100', ',', '120'] - - x: 100 - - y: 120 - - shape: SQUARE - - - shape: CIRCLE size: 50 color: BLUE posn: 50,80 - ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] - - color: BLUE - - posn: ['50', ',', '80'] - - x: 50 - - y: 80 - - shape: CIRCLE - - size: 50 - - - color: GREEN size: 20 shape: TRIANGLE posn: 20,40 - ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] - - color: GREEN - - posn: ['20', ',', '40'] - - x: 20 - - y: 40 - - shape: TRIANGLE - - size: 20 - """ - def __init__( self, exprs, savelist = True ): - super(Each,self).__init__(exprs, savelist) - self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) - self.skipWhitespace = True - self.initExprGroups = True - - def parseImpl( self, instring, loc, doActions=True ): - if self.initExprGroups: - self.opt1map = dict((id(e.expr),e) for e in self.exprs if isinstance(e,Optional)) - opt1 = [ e.expr for e in self.exprs if isinstance(e,Optional) ] - opt2 = [ e for e in self.exprs if e.mayReturnEmpty and not isinstance(e,Optional)] - self.optionals = opt1 + opt2 - self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] - self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] - self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] - self.required += self.multirequired - self.initExprGroups = False - tmpLoc = loc - tmpReqd = self.required[:] - tmpOpt = self.optionals[:] - matchOrder = [] - - keepMatching = True - while keepMatching: - tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired - failed = [] - for e in tmpExprs: - try: - tmpLoc = e.tryParse( instring, tmpLoc ) - except ParseException: - failed.append(e) - else: - matchOrder.append(self.opt1map.get(id(e),e)) - if e in tmpReqd: - tmpReqd.remove(e) - elif e in tmpOpt: - tmpOpt.remove(e) - if len(failed) == len(tmpExprs): - keepMatching = False - - if tmpReqd: - missing = ", ".join(_ustr(e) for e in tmpReqd) - raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) - - # add any unmatched Optionals, in case they have default values defined - matchOrder += [e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt] - - resultlist = [] - for e in matchOrder: - loc,results = e._parse(instring,loc,doActions) - resultlist.append(results) - - finalResults = sum(resultlist, ParseResults([])) - return loc, finalResults - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - def checkRecursion( self, parseElementList ): - subRecCheckList = parseElementList[:] + [ self ] - for e in self.exprs: - e.checkRecursion( subRecCheckList ) - - -class ParseElementEnhance(ParserElement): - """ - Abstract subclass of C{ParserElement}, for combining and post-processing parsed tokens. - """ - def __init__( self, expr, savelist=False ): - super(ParseElementEnhance,self).__init__(savelist) - if isinstance( expr, basestring ): - if issubclass(ParserElement._literalStringClass, Token): - expr = ParserElement._literalStringClass(expr) - else: - expr = ParserElement._literalStringClass(Literal(expr)) - self.expr = expr - self.strRepr = None - if expr is not None: - self.mayIndexError = expr.mayIndexError - self.mayReturnEmpty = expr.mayReturnEmpty - self.setWhitespaceChars( expr.whiteChars ) - self.skipWhitespace = expr.skipWhitespace - self.saveAsList = expr.saveAsList - self.callPreparse = expr.callPreparse - self.ignoreExprs.extend(expr.ignoreExprs) - - def parseImpl( self, instring, loc, doActions=True ): - if self.expr is not None: - return self.expr._parse( instring, loc, doActions, callPreParse=False ) - else: - raise ParseException("",loc,self.errmsg,self) - - def leaveWhitespace( self ): - self.skipWhitespace = False - self.expr = self.expr.copy() - if self.expr is not None: - self.expr.leaveWhitespace() - return self - - def ignore( self, other ): - if isinstance( other, Suppress ): - if other not in self.ignoreExprs: - super( ParseElementEnhance, self).ignore( other ) - if self.expr is not None: - self.expr.ignore( self.ignoreExprs[-1] ) - else: - super( ParseElementEnhance, self).ignore( other ) - if self.expr is not None: - self.expr.ignore( self.ignoreExprs[-1] ) - return self - - def streamline( self ): - super(ParseElementEnhance,self).streamline() - if self.expr is not None: - self.expr.streamline() - return self - - def checkRecursion( self, parseElementList ): - if self in parseElementList: - raise RecursiveGrammarException( parseElementList+[self] ) - subRecCheckList = parseElementList[:] + [ self ] - if self.expr is not None: - self.expr.checkRecursion( subRecCheckList ) - - def validate( self, validateTrace=[] ): - tmp = validateTrace[:]+[self] - if self.expr is not None: - self.expr.validate(tmp) - self.checkRecursion( [] ) - - def __str__( self ): - try: - return super(ParseElementEnhance,self).__str__() - except Exception: - pass - - if self.strRepr is None and self.expr is not None: - self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) - return self.strRepr - - -class FollowedBy(ParseElementEnhance): - """ - Lookahead matching of the given parse expression. C{FollowedBy} - does I{not} advance the parsing position within the input string, it only - verifies that the specified parse expression matches at the current - position. C{FollowedBy} always returns a null token list. - - Example:: - # use FollowedBy to match a label only if it is followed by a ':' - data_word = Word(alphas) - label = data_word + FollowedBy(':') - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - - OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() - prints:: - [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] - """ - def __init__( self, expr ): - super(FollowedBy,self).__init__(expr) - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - self.expr.tryParse( instring, loc ) - return loc, [] - - -class NotAny(ParseElementEnhance): - """ - Lookahead to disallow matching with the given parse expression. C{NotAny} - does I{not} advance the parsing position within the input string, it only - verifies that the specified parse expression does I{not} match at the current - position. Also, C{NotAny} does I{not} skip over leading whitespace. C{NotAny} - always returns a null token list. May be constructed using the '~' operator. - - Example:: - - """ - def __init__( self, expr ): - super(NotAny,self).__init__(expr) - #~ self.leaveWhitespace() - self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs - self.mayReturnEmpty = True - self.errmsg = "Found unwanted token, "+_ustr(self.expr) - - def parseImpl( self, instring, loc, doActions=True ): - if self.expr.canParseNext(instring, loc): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "~{" + _ustr(self.expr) + "}" - - return self.strRepr - -class _MultipleMatch(ParseElementEnhance): - def __init__( self, expr, stopOn=None): - super(_MultipleMatch, self).__init__(expr) - self.saveAsList = True - ender = stopOn - if isinstance(ender, basestring): - ender = ParserElement._literalStringClass(ender) - self.not_ender = ~ender if ender is not None else None - - def parseImpl( self, instring, loc, doActions=True ): - self_expr_parse = self.expr._parse - self_skip_ignorables = self._skipIgnorables - check_ender = self.not_ender is not None - if check_ender: - try_not_ender = self.not_ender.tryParse - - # must be at least one (but first see if we are the stopOn sentinel; - # if so, fail) - if check_ender: - try_not_ender(instring, loc) - loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False ) - try: - hasIgnoreExprs = (not not self.ignoreExprs) - while 1: - if check_ender: - try_not_ender(instring, loc) - if hasIgnoreExprs: - preloc = self_skip_ignorables( instring, loc ) - else: - preloc = loc - loc, tmptokens = self_expr_parse( instring, preloc, doActions ) - if tmptokens or tmptokens.haskeys(): - tokens += tmptokens - except (ParseException,IndexError): - pass - - return loc, tokens - -class OneOrMore(_MultipleMatch): - """ - Repetition of one or more of the given expression. - - Parameters: - - expr - expression that must match one or more times - - stopOn - (default=C{None}) - expression for a terminating sentinel - (only required if the sentinel would ordinarily match the repetition - expression) - - Example:: - data_word = Word(alphas) - label = data_word + FollowedBy(':') - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) - - text = "shape: SQUARE posn: upper left color: BLACK" - OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] - - # use stopOn attribute for OneOrMore to avoid reading label string as part of the data - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] - - # could also be written as - (attr_expr * (1,)).parseString(text).pprint() - """ - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + _ustr(self.expr) + "}..." - - return self.strRepr - -class ZeroOrMore(_MultipleMatch): - """ - Optional repetition of zero or more of the given expression. - - Parameters: - - expr - expression that must match zero or more times - - stopOn - (default=C{None}) - expression for a terminating sentinel - (only required if the sentinel would ordinarily match the repetition - expression) - - Example: similar to L{OneOrMore} - """ - def __init__( self, expr, stopOn=None): - super(ZeroOrMore,self).__init__(expr, stopOn=stopOn) - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - try: - return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) - except (ParseException,IndexError): - return loc, [] - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "[" + _ustr(self.expr) + "]..." - - return self.strRepr - -class _NullToken(object): - def __bool__(self): - return False - __nonzero__ = __bool__ - def __str__(self): - return "" - -_optionalNotMatched = _NullToken() -class Optional(ParseElementEnhance): - """ - Optional matching of the given expression. - - Parameters: - - expr - expression that must match zero or more times - - default (optional) - value to be returned if the optional expression is not found. - - Example:: - # US postal code can be a 5-digit zip, plus optional 4-digit qualifier - zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) - zip.runTests(''' - # traditional ZIP code - 12345 - - # ZIP+4 form - 12101-0001 - - # invalid ZIP - 98765- - ''') - prints:: - # traditional ZIP code - 12345 - ['12345'] - - # ZIP+4 form - 12101-0001 - ['12101-0001'] - - # invalid ZIP - 98765- - ^ - FAIL: Expected end of text (at char 5), (line:1, col:6) - """ - def __init__( self, expr, default=_optionalNotMatched ): - super(Optional,self).__init__( expr, savelist=False ) - self.saveAsList = self.expr.saveAsList - self.defaultValue = default - self.mayReturnEmpty = True - - def parseImpl( self, instring, loc, doActions=True ): - try: - loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) - except (ParseException,IndexError): - if self.defaultValue is not _optionalNotMatched: - if self.expr.resultsName: - tokens = ParseResults([ self.defaultValue ]) - tokens[self.expr.resultsName] = self.defaultValue - else: - tokens = [ self.defaultValue ] - else: - tokens = [] - return loc, tokens - - def __str__( self ): - if hasattr(self,"name"): - return self.name - - if self.strRepr is None: - self.strRepr = "[" + _ustr(self.expr) + "]" - - return self.strRepr - -class SkipTo(ParseElementEnhance): - """ - Token for skipping over all undefined text until the matched expression is found. - - Parameters: - - expr - target expression marking the end of the data to be skipped - - include - (default=C{False}) if True, the target expression is also parsed - (the skipped text and target expression are returned as a 2-element list). - - ignore - (default=C{None}) used to define grammars (typically quoted strings and - comments) that might contain false matches to the target expression - - failOn - (default=C{None}) define expressions that are not allowed to be - included in the skipped test; if found before the target expression is found, - the SkipTo is not a match - - Example:: - report = ''' - Outstanding Issues Report - 1 Jan 2000 - - # | Severity | Description | Days Open - -----+----------+-------------------------------------------+----------- - 101 | Critical | Intermittent system crash | 6 - 94 | Cosmetic | Spelling error on Login ('log|n') | 14 - 79 | Minor | System slow when running too many reports | 47 - ''' - integer = Word(nums) - SEP = Suppress('|') - # use SkipTo to simply match everything up until the next SEP - # - ignore quoted strings, so that a '|' character inside a quoted string does not match - # - parse action will call token.strip() for each matched token, i.e., the description body - string_data = SkipTo(SEP, ignore=quotedString) - string_data.setParseAction(tokenMap(str.strip)) - ticket_expr = (integer("issue_num") + SEP - + string_data("sev") + SEP - + string_data("desc") + SEP - + integer("days_open")) - - for tkt in ticket_expr.searchString(report): - print tkt.dump() - prints:: - ['101', 'Critical', 'Intermittent system crash', '6'] - - days_open: 6 - - desc: Intermittent system crash - - issue_num: 101 - - sev: Critical - ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] - - days_open: 14 - - desc: Spelling error on Login ('log|n') - - issue_num: 94 - - sev: Cosmetic - ['79', 'Minor', 'System slow when running too many reports', '47'] - - days_open: 47 - - desc: System slow when running too many reports - - issue_num: 79 - - sev: Minor - """ - def __init__( self, other, include=False, ignore=None, failOn=None ): - super( SkipTo, self ).__init__( other ) - self.ignoreExpr = ignore - self.mayReturnEmpty = True - self.mayIndexError = False - self.includeMatch = include - self.asList = False - if isinstance(failOn, basestring): - self.failOn = ParserElement._literalStringClass(failOn) - else: - self.failOn = failOn - self.errmsg = "No match found for "+_ustr(self.expr) - - def parseImpl( self, instring, loc, doActions=True ): - startloc = loc - instrlen = len(instring) - expr = self.expr - expr_parse = self.expr._parse - self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None - self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None - - tmploc = loc - while tmploc <= instrlen: - if self_failOn_canParseNext is not None: - # break if failOn expression matches - if self_failOn_canParseNext(instring, tmploc): - break - - if self_ignoreExpr_tryParse is not None: - # advance past ignore expressions - while 1: - try: - tmploc = self_ignoreExpr_tryParse(instring, tmploc) - except ParseBaseException: - break - - try: - expr_parse(instring, tmploc, doActions=False, callPreParse=False) - except (ParseException, IndexError): - # no match, advance loc in string - tmploc += 1 - else: - # matched skipto expr, done - break - - else: - # ran off the end of the input string without matching skipto expr, fail - raise ParseException(instring, loc, self.errmsg, self) - - # build up return values - loc = tmploc - skiptext = instring[startloc:loc] - skipresult = ParseResults(skiptext) - - if self.includeMatch: - loc, mat = expr_parse(instring,loc,doActions,callPreParse=False) - skipresult += mat - - return loc, skipresult - -class Forward(ParseElementEnhance): - """ - Forward declaration of an expression to be defined later - - used for recursive grammars, such as algebraic infix notation. - When the expression is known, it is assigned to the C{Forward} variable using the '<<' operator. - - Note: take care when assigning to C{Forward} not to overlook precedence of operators. - Specifically, '|' has a lower precedence than '<<', so that:: - fwdExpr << a | b | c - will actually be evaluated as:: - (fwdExpr << a) | b | c - thereby leaving b and c out as parseable alternatives. It is recommended that you - explicitly group the values inserted into the C{Forward}:: - fwdExpr << (a | b | c) - Converting to use the '<<=' operator instead will avoid this problem. - - See L{ParseResults.pprint} for an example of a recursive parser created using - C{Forward}. - """ - def __init__( self, other=None ): - super(Forward,self).__init__( other, savelist=False ) - - def __lshift__( self, other ): - if isinstance( other, basestring ): - other = ParserElement._literalStringClass(other) - self.expr = other - self.strRepr = None - self.mayIndexError = self.expr.mayIndexError - self.mayReturnEmpty = self.expr.mayReturnEmpty - self.setWhitespaceChars( self.expr.whiteChars ) - self.skipWhitespace = self.expr.skipWhitespace - self.saveAsList = self.expr.saveAsList - self.ignoreExprs.extend(self.expr.ignoreExprs) - return self - - def __ilshift__(self, other): - return self << other - - def leaveWhitespace( self ): - self.skipWhitespace = False - return self - - def streamline( self ): - if not self.streamlined: - self.streamlined = True - if self.expr is not None: - self.expr.streamline() - return self - - def validate( self, validateTrace=[] ): - if self not in validateTrace: - tmp = validateTrace[:]+[self] - if self.expr is not None: - self.expr.validate(tmp) - self.checkRecursion([]) - - def __str__( self ): - if hasattr(self,"name"): - return self.name - return self.__class__.__name__ + ": ..." - - # stubbed out for now - creates awful memory and perf issues - self._revertClass = self.__class__ - self.__class__ = _ForwardNoRecurse - try: - if self.expr is not None: - retString = _ustr(self.expr) - else: - retString = "None" - finally: - self.__class__ = self._revertClass - return self.__class__.__name__ + ": " + retString - - def copy(self): - if self.expr is not None: - return super(Forward,self).copy() - else: - ret = Forward() - ret <<= self - return ret - -class _ForwardNoRecurse(Forward): - def __str__( self ): - return "..." - -class TokenConverter(ParseElementEnhance): - """ - Abstract subclass of C{ParseExpression}, for converting parsed results. - """ - def __init__( self, expr, savelist=False ): - super(TokenConverter,self).__init__( expr )#, savelist ) - self.saveAsList = False - -class Combine(TokenConverter): - """ - Converter to concatenate all matching tokens to a single string. - By default, the matching patterns must also be contiguous in the input string; - this can be disabled by specifying C{'adjacent=False'} in the constructor. - - Example:: - real = Word(nums) + '.' + Word(nums) - print(real.parseString('3.1416')) # -> ['3', '.', '1416'] - # will also erroneously match the following - print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] - - real = Combine(Word(nums) + '.' + Word(nums)) - print(real.parseString('3.1416')) # -> ['3.1416'] - # no match when there are internal spaces - print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) - """ - def __init__( self, expr, joinString="", adjacent=True ): - super(Combine,self).__init__( expr ) - # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself - if adjacent: - self.leaveWhitespace() - self.adjacent = adjacent - self.skipWhitespace = True - self.joinString = joinString - self.callPreparse = True - - def ignore( self, other ): - if self.adjacent: - ParserElement.ignore(self, other) - else: - super( Combine, self).ignore( other ) - return self - - def postParse( self, instring, loc, tokenlist ): - retToks = tokenlist.copy() - del retToks[:] - retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) - - if self.resultsName and retToks.haskeys(): - return [ retToks ] - else: - return retToks - -class Group(TokenConverter): - """ - Converter to return the matched tokens as a list - useful for returning tokens of C{L{ZeroOrMore}} and C{L{OneOrMore}} expressions. - - Example:: - ident = Word(alphas) - num = Word(nums) - term = ident | num - func = ident + Optional(delimitedList(term)) - print(func.parseString("fn a,b,100")) # -> ['fn', 'a', 'b', '100'] - - func = ident + Group(Optional(delimitedList(term))) - print(func.parseString("fn a,b,100")) # -> ['fn', ['a', 'b', '100']] - """ - def __init__( self, expr ): - super(Group,self).__init__( expr ) - self.saveAsList = True - - def postParse( self, instring, loc, tokenlist ): - return [ tokenlist ] - -class Dict(TokenConverter): - """ - Converter to return a repetitive expression as a list, but also as a dictionary. - Each element can also be referenced using the first token in the expression as its key. - Useful for tabular report scraping when the first column can be used as a item key. - - Example:: - data_word = Word(alphas) - label = data_word + FollowedBy(':') - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) - - text = "shape: SQUARE posn: upper left color: light blue texture: burlap" - attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - - # print attributes as plain groups - print(OneOrMore(attr_expr).parseString(text).dump()) - - # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names - result = Dict(OneOrMore(Group(attr_expr))).parseString(text) - print(result.dump()) - - # access named fields as dict entries, or output as dict - print(result['shape']) - print(result.asDict()) - prints:: - ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] - - [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] - - color: light blue - - posn: upper left - - shape: SQUARE - - texture: burlap - SQUARE - {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} - See more examples at L{ParseResults} of accessing fields by results name. - """ - def __init__( self, expr ): - super(Dict,self).__init__( expr ) - self.saveAsList = True - - def postParse( self, instring, loc, tokenlist ): - for i,tok in enumerate(tokenlist): - if len(tok) == 0: - continue - ikey = tok[0] - if isinstance(ikey,int): - ikey = _ustr(tok[0]).strip() - if len(tok)==1: - tokenlist[ikey] = _ParseResultsWithOffset("",i) - elif len(tok)==2 and not isinstance(tok[1],ParseResults): - tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) - else: - dictvalue = tok.copy() #ParseResults(i) - del dictvalue[0] - if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.haskeys()): - tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) - else: - tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) - - if self.resultsName: - return [ tokenlist ] - else: - return tokenlist - - -class Suppress(TokenConverter): - """ - Converter for ignoring the results of a parsed expression. - - Example:: - source = "a, b, c,d" - wd = Word(alphas) - wd_list1 = wd + ZeroOrMore(',' + wd) - print(wd_list1.parseString(source)) - - # often, delimiters that are useful during parsing are just in the - # way afterward - use Suppress to keep them out of the parsed output - wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) - print(wd_list2.parseString(source)) - prints:: - ['a', ',', 'b', ',', 'c', ',', 'd'] - ['a', 'b', 'c', 'd'] - (See also L{delimitedList}.) - """ - def postParse( self, instring, loc, tokenlist ): - return [] - - def suppress( self ): - return self - - -class OnlyOnce(object): - """ - Wrapper for parse actions, to ensure they are only called once. - """ - def __init__(self, methodCall): - self.callable = _trim_arity(methodCall) - self.called = False - def __call__(self,s,l,t): - if not self.called: - results = self.callable(s,l,t) - self.called = True - return results - raise ParseException(s,l,"") - def reset(self): - self.called = False - -def traceParseAction(f): - """ - Decorator for debugging parse actions. - - When the parse action is called, this decorator will print C{">> entering I{method-name}(line:I{current_source_line}, I{parse_location}, I{matched_tokens})".} - When the parse action completes, the decorator will print C{"<<"} followed by the returned value, or any exception that the parse action raised. - - Example:: - wd = Word(alphas) - - @traceParseAction - def remove_duplicate_chars(tokens): - return ''.join(sorted(set(''.join(tokens))) - - wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) - print(wds.parseString("slkdjs sld sldd sdlf sdljf")) - prints:: - >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) - <<leaving remove_duplicate_chars (ret: 'dfjkls') - ['dfjkls'] - """ - f = _trim_arity(f) - def z(*paArgs): - thisFunc = f.__name__ - s,l,t = paArgs[-3:] - if len(paArgs)>3: - thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc - sys.stderr.write( ">>entering %s(line: '%s', %d, %r)\n" % (thisFunc,line(l,s),l,t) ) - try: - ret = f(*paArgs) - except Exception as exc: - sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) - raise - sys.stderr.write( "<<leaving %s (ret: %r)\n" % (thisFunc,ret) ) - return ret - try: - z.__name__ = f.__name__ - except AttributeError: - pass - return z - -# -# global helpers -# -def delimitedList( expr, delim=",", combine=False ): - """ - Helper to define a delimited list of expressions - the delimiter defaults to ','. - By default, the list elements and delimiters can have intervening whitespace, and - comments, but this can be overridden by passing C{combine=True} in the constructor. - If C{combine} is set to C{True}, the matching tokens are returned as a single token - string, with the delimiters included; otherwise, the matching tokens are returned - as a list of tokens, with the delimiters suppressed. - - Example:: - delimitedList(Word(alphas)).parseString("aa,bb,cc") # -> ['aa', 'bb', 'cc'] - delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] - """ - dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." - if combine: - return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) - else: - return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) - -def countedArray( expr, intExpr=None ): - """ - Helper to define a counted list of expressions. - This helper defines a pattern of the form:: - integer expr expr expr... - where the leading integer tells how many expr expressions follow. - The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. - - If C{intExpr} is specified, it should be a pyparsing expression that produces an integer value. - - Example:: - countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] - - # in this parser, the leading integer value is given in binary, - # '10' indicating that 2 values are in the array - binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) - countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] - """ - arrayExpr = Forward() - def countFieldParseAction(s,l,t): - n = t[0] - arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) - return [] - if intExpr is None: - intExpr = Word(nums).setParseAction(lambda t:int(t[0])) - else: - intExpr = intExpr.copy() - intExpr.setName("arrayLen") - intExpr.addParseAction(countFieldParseAction, callDuringTry=True) - return ( intExpr + arrayExpr ).setName('(len) ' + _ustr(expr) + '...') - -def _flatten(L): - ret = [] - for i in L: - if isinstance(i,list): - ret.extend(_flatten(i)) - else: - ret.append(i) - return ret - -def matchPreviousLiteral(expr): - """ - Helper to define an expression that is indirectly defined from - the tokens matched in a previous expression, that is, it looks - for a 'repeat' of a previous expression. For example:: - first = Word(nums) - second = matchPreviousLiteral(first) - matchExpr = first + ":" + second - will match C{"1:1"}, but not C{"1:2"}. Because this matches a - previous literal, will also match the leading C{"1:1"} in C{"1:10"}. - If this is not desired, use C{matchPreviousExpr}. - Do I{not} use with packrat parsing enabled. - """ - rep = Forward() - def copyTokenToRepeater(s,l,t): - if t: - if len(t) == 1: - rep << t[0] - else: - # flatten t tokens - tflat = _flatten(t.asList()) - rep << And(Literal(tt) for tt in tflat) - else: - rep << Empty() - expr.addParseAction(copyTokenToRepeater, callDuringTry=True) - rep.setName('(prev) ' + _ustr(expr)) - return rep - -def matchPreviousExpr(expr): - """ - Helper to define an expression that is indirectly defined from - the tokens matched in a previous expression, that is, it looks - for a 'repeat' of a previous expression. For example:: - first = Word(nums) - second = matchPreviousExpr(first) - matchExpr = first + ":" + second - will match C{"1:1"}, but not C{"1:2"}. Because this matches by - expressions, will I{not} match the leading C{"1:1"} in C{"1:10"}; - the expressions are evaluated first, and then compared, so - C{"1"} is compared with C{"10"}. - Do I{not} use with packrat parsing enabled. - """ - rep = Forward() - e2 = expr.copy() - rep <<= e2 - def copyTokenToRepeater(s,l,t): - matchTokens = _flatten(t.asList()) - def mustMatchTheseTokens(s,l,t): - theseTokens = _flatten(t.asList()) - if theseTokens != matchTokens: - raise ParseException("",0,"") - rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) - expr.addParseAction(copyTokenToRepeater, callDuringTry=True) - rep.setName('(prev) ' + _ustr(expr)) - return rep - -def _escapeRegexRangeChars(s): - #~ escape these chars: ^-] - for c in r"\^-]": - s = s.replace(c,_bslash+c) - s = s.replace("\n",r"\n") - s = s.replace("\t",r"\t") - return _ustr(s) - -def oneOf( strs, caseless=False, useRegex=True ): - """ - Helper to quickly define a set of alternative Literals, and makes sure to do - longest-first testing when there is a conflict, regardless of the input order, - but returns a C{L{MatchFirst}} for best performance. - - Parameters: - - strs - a string of space-delimited literals, or a collection of string literals - - caseless - (default=C{False}) - treat all literals as caseless - - useRegex - (default=C{True}) - as an optimization, will generate a Regex - object; otherwise, will generate a C{MatchFirst} object (if C{caseless=True}, or - if creating a C{Regex} raises an exception) - - Example:: - comp_oper = oneOf("< = > <= >= !=") - var = Word(alphas) - number = Word(nums) - term = var | number - comparison_expr = term + comp_oper + term - print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) - prints:: - [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] - """ - if caseless: - isequal = ( lambda a,b: a.upper() == b.upper() ) - masks = ( lambda a,b: b.upper().startswith(a.upper()) ) - parseElementClass = CaselessLiteral - else: - isequal = ( lambda a,b: a == b ) - masks = ( lambda a,b: b.startswith(a) ) - parseElementClass = Literal - - symbols = [] - if isinstance(strs,basestring): - symbols = strs.split() - elif isinstance(strs, collections.Iterable): - symbols = list(strs) - else: - warnings.warn("Invalid argument to oneOf, expected string or iterable", - SyntaxWarning, stacklevel=2) - if not symbols: - return NoMatch() - - i = 0 - while i < len(symbols)-1: - cur = symbols[i] - for j,other in enumerate(symbols[i+1:]): - if ( isequal(other, cur) ): - del symbols[i+j+1] - break - elif ( masks(cur, other) ): - del symbols[i+j+1] - symbols.insert(i,other) - cur = other - break - else: - i += 1 - - if not caseless and useRegex: - #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) - try: - if len(symbols)==len("".join(symbols)): - return Regex( "[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols) ).setName(' | '.join(symbols)) - else: - return Regex( "|".join(re.escape(sym) for sym in symbols) ).setName(' | '.join(symbols)) - except Exception: - warnings.warn("Exception creating Regex for oneOf, building MatchFirst", - SyntaxWarning, stacklevel=2) - - - # last resort, just use MatchFirst - return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) - -def dictOf( key, value ): - """ - Helper to easily and clearly define a dictionary by specifying the respective patterns - for the key and value. Takes care of defining the C{L{Dict}}, C{L{ZeroOrMore}}, and C{L{Group}} tokens - in the proper order. The key pattern can include delimiting markers or punctuation, - as long as they are suppressed, thereby leaving the significant key text. The value - pattern can include named results, so that the C{Dict} results can include named token - fields. - - Example:: - text = "shape: SQUARE posn: upper left color: light blue texture: burlap" - attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - print(OneOrMore(attr_expr).parseString(text).dump()) - - attr_label = label - attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) - - # similar to Dict, but simpler call format - result = dictOf(attr_label, attr_value).parseString(text) - print(result.dump()) - print(result['shape']) - print(result.shape) # object attribute access works too - print(result.asDict()) - prints:: - [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] - - color: light blue - - posn: upper left - - shape: SQUARE - - texture: burlap - SQUARE - SQUARE - {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} - """ - return Dict( ZeroOrMore( Group ( key + value ) ) ) - -def originalTextFor(expr, asString=True): - """ - Helper to return the original, untokenized text for a given expression. Useful to - restore the parsed fields of an HTML start tag into the raw tag text itself, or to - revert separate tokens with intervening whitespace back to the original matching - input text. By default, returns astring containing the original parsed text. - - If the optional C{asString} argument is passed as C{False}, then the return value is a - C{L{ParseResults}} containing any results names that were originally matched, and a - single token containing the original matched text from the input string. So if - the expression passed to C{L{originalTextFor}} contains expressions with defined - results names, you must set C{asString} to C{False} if you want to preserve those - results name values. - - Example:: - src = "this is test <b> bold <i>text</i> </b> normal text " - for tag in ("b","i"): - opener,closer = makeHTMLTags(tag) - patt = originalTextFor(opener + SkipTo(closer) + closer) - print(patt.searchString(src)[0]) - prints:: - ['<b> bold <i>text</i> </b>'] - ['<i>text</i>'] - """ - locMarker = Empty().setParseAction(lambda s,loc,t: loc) - endlocMarker = locMarker.copy() - endlocMarker.callPreparse = False - matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") - if asString: - extractText = lambda s,l,t: s[t._original_start:t._original_end] - else: - def extractText(s,l,t): - t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] - matchExpr.setParseAction(extractText) - matchExpr.ignoreExprs = expr.ignoreExprs - return matchExpr - -def ungroup(expr): - """ - Helper to undo pyparsing's default grouping of And expressions, even - if all but one are non-empty. - """ - return TokenConverter(expr).setParseAction(lambda t:t[0]) - -def locatedExpr(expr): - """ - Helper to decorate a returned token with its starting and ending locations in the input string. - This helper adds the following results names: - - locn_start = location where matched expression begins - - locn_end = location where matched expression ends - - value = the actual parsed results - - Be careful if the input text contains C{<TAB>} characters, you may want to call - C{L{ParserElement.parseWithTabs}} - - Example:: - wd = Word(alphas) - for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): - print(match) - prints:: - [[0, 'ljsdf', 5]] - [[8, 'lksdjjf', 15]] - [[18, 'lkkjj', 23]] - """ - locator = Empty().setParseAction(lambda s,l,t: l) - return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) - - -# convenience constants for positional expressions -empty = Empty().setName("empty") -lineStart = LineStart().setName("lineStart") -lineEnd = LineEnd().setName("lineEnd") -stringStart = StringStart().setName("stringStart") -stringEnd = StringEnd().setName("stringEnd") - -_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) -_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s,l,t:unichr(int(t[0].lstrip(r'\0x'),16))) -_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s,l,t:unichr(int(t[0][1:],8))) -_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(printables, excludeChars=r'\]', exact=1) | Regex(r"\w", re.UNICODE) -_charRange = Group(_singleChar + Suppress("-") + _singleChar) -_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" - -def srange(s): - r""" - Helper to easily define string ranges for use in Word construction. Borrows - syntax from regexp '[]' string range definitions:: - srange("[0-9]") -> "0123456789" - srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" - srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" - The input string must be enclosed in []'s, and the returned string is the expanded - character set joined into a single string. - The values enclosed in the []'s may be: - - a single character - - an escaped character with a leading backslash (such as C{\-} or C{\]}) - - an escaped hex character with a leading C{'\x'} (C{\x21}, which is a C{'!'} character) - (C{\0x##} is also supported for backwards compatibility) - - an escaped octal character with a leading C{'\0'} (C{\041}, which is a C{'!'} character) - - a range of any of the above, separated by a dash (C{'a-z'}, etc.) - - any combination of the above (C{'aeiouy'}, C{'a-zA-Z0-9_$'}, etc.) - """ - _expanded = lambda p: p if not isinstance(p,ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]),ord(p[1])+1)) - try: - return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) - except Exception: - return "" - -def matchOnlyAtCol(n): - """ - Helper method for defining parse actions that require matching at a specific - column in the input text. - """ - def verifyCol(strg,locn,toks): - if col(locn,strg) != n: - raise ParseException(strg,locn,"matched token not at column %d" % n) - return verifyCol - -def replaceWith(replStr): - """ - Helper method for common parse actions that simply return a literal value. Especially - useful when used with C{L{transformString<ParserElement.transformString>}()}. - - Example:: - num = Word(nums).setParseAction(lambda toks: int(toks[0])) - na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) - term = na | num - - OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] - """ - return lambda s,l,t: [replStr] - -def removeQuotes(s,l,t): - """ - Helper parse action for removing quotation marks from parsed quoted strings. - - Example:: - # by default, quotation marks are included in parsed results - quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] - - # use removeQuotes to strip quotation marks from parsed results - quotedString.setParseAction(removeQuotes) - quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] - """ - return t[0][1:-1] - -def tokenMap(func, *args): - """ - Helper to define a parse action by mapping a function to all elements of a ParseResults list.If any additional - args are passed, they are forwarded to the given function as additional arguments after - the token, as in C{hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))}, which will convert the - parsed data to an integer using base 16. - - Example (compare the last to example in L{ParserElement.transformString}:: - hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) - hex_ints.runTests(''' - 00 11 22 aa FF 0a 0d 1a - ''') - - upperword = Word(alphas).setParseAction(tokenMap(str.upper)) - OneOrMore(upperword).runTests(''' - my kingdom for a horse - ''') - - wd = Word(alphas).setParseAction(tokenMap(str.title)) - OneOrMore(wd).setParseAction(' '.join).runTests(''' - now is the winter of our discontent made glorious summer by this sun of york - ''') - prints:: - 00 11 22 aa FF 0a 0d 1a - [0, 17, 34, 170, 255, 10, 13, 26] - - my kingdom for a horse - ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] - - now is the winter of our discontent made glorious summer by this sun of york - ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] - """ - def pa(s,l,t): - return [func(tokn, *args) for tokn in t] - - try: - func_name = getattr(func, '__name__', - getattr(func, '__class__').__name__) - except Exception: - func_name = str(func) - pa.__name__ = func_name - - return pa - -upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) -"""(Deprecated) Helper parse action to convert tokens to upper case. Deprecated in favor of L{pyparsing_common.upcaseTokens}""" - -downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) -"""(Deprecated) Helper parse action to convert tokens to lower case. Deprecated in favor of L{pyparsing_common.downcaseTokens}""" - -def _makeTags(tagStr, xml): - """Internal helper to construct opening and closing tag expressions, given a tag name""" - if isinstance(tagStr,basestring): - resname = tagStr - tagStr = Keyword(tagStr, caseless=not xml) - else: - resname = tagStr.name - - tagAttrName = Word(alphas,alphanums+"_-:") - if (xml): - tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) - openTag = Suppress("<") + tagStr("tag") + \ - Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ - Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") - else: - printablesLessRAbrack = "".join(c for c in printables if c not in ">") - tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) - openTag = Suppress("<") + tagStr("tag") + \ - Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ - Optional( Suppress("=") + tagAttrValue ) ))) + \ - Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") - closeTag = Combine(_L("</") + tagStr + ">") - - openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % resname) - closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % resname) - openTag.tag = resname - closeTag.tag = resname - return openTag, closeTag - -def makeHTMLTags(tagStr): - """ - Helper to construct opening and closing tag expressions for HTML, given a tag name. Matches - tags in either upper or lower case, attributes with namespaces and with quoted or unquoted values. - - Example:: - text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' - # makeHTMLTags returns pyparsing expressions for the opening and closing tags as a 2-tuple - a,a_end = makeHTMLTags("A") - link_expr = a + SkipTo(a_end)("link_text") + a_end - - for link in link_expr.searchString(text): - # attributes in the <A> tag (like "href" shown here) are also accessible as named results - print(link.link_text, '->', link.href) - prints:: - pyparsing -> http://pyparsing.wikispaces.com - """ - return _makeTags( tagStr, False ) - -def makeXMLTags(tagStr): - """ - Helper to construct opening and closing tag expressions for XML, given a tag name. Matches - tags only in the given upper/lower case. - - Example: similar to L{makeHTMLTags} - """ - return _makeTags( tagStr, True ) - -def withAttribute(*args,**attrDict): - """ - Helper to create a validating parse action to be used with start tags created - with C{L{makeXMLTags}} or C{L{makeHTMLTags}}. Use C{withAttribute} to qualify a starting tag - with a required attribute value, to avoid false matches on common tags such as - C{<TD>} or C{<DIV>}. - - Call C{withAttribute} with a series of attribute names and values. Specify the list - of filter attributes names and values as: - - keyword arguments, as in C{(align="right")}, or - - as an explicit dict with C{**} operator, when an attribute name is also a Python - reserved word, as in C{**{"class":"Customer", "align":"right"}} - - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) - For attribute names with a namespace prefix, you must use the second form. Attribute - names are matched insensitive to upper/lower case. - - If just testing for C{class} (with or without a namespace), use C{L{withClass}}. - - To verify that the attribute exists, but without specifying a value, pass - C{withAttribute.ANY_VALUE} as the value. - - Example:: - html = ''' - <div> - Some text - <div type="grid">1 4 0 1 0</div> - <div type="graph">1,3 2,3 1,1</div> - <div>this has no type</div> - </div> - - ''' - div,div_end = makeHTMLTags("div") - - # only match div tag having a type attribute with value "grid" - div_grid = div().setParseAction(withAttribute(type="grid")) - grid_expr = div_grid + SkipTo(div | div_end)("body") - for grid_header in grid_expr.searchString(html): - print(grid_header.body) - - # construct a match with any div tag having a type attribute, regardless of the value - div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) - div_expr = div_any_type + SkipTo(div | div_end)("body") - for div_header in div_expr.searchString(html): - print(div_header.body) - prints:: - 1 4 0 1 0 - - 1 4 0 1 0 - 1,3 2,3 1,1 - """ - if args: - attrs = args[:] - else: - attrs = attrDict.items() - attrs = [(k,v) for k,v in attrs] - def pa(s,l,tokens): - for attrName,attrValue in attrs: - if attrName not in tokens: - raise ParseException(s,l,"no matching attribute " + attrName) - if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: - raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % - (attrName, tokens[attrName], attrValue)) - return pa -withAttribute.ANY_VALUE = object() - -def withClass(classname, namespace=''): - """ - Simplified version of C{L{withAttribute}} when matching on a div class - made - difficult because C{class} is a reserved word in Python. - - Example:: - html = ''' - <div> - Some text - <div class="grid">1 4 0 1 0</div> - <div class="graph">1,3 2,3 1,1</div> - <div>this <div> has no class</div> - </div> - - ''' - div,div_end = makeHTMLTags("div") - div_grid = div().setParseAction(withClass("grid")) - - grid_expr = div_grid + SkipTo(div | div_end)("body") - for grid_header in grid_expr.searchString(html): - print(grid_header.body) - - div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) - div_expr = div_any_type + SkipTo(div | div_end)("body") - for div_header in div_expr.searchString(html): - print(div_header.body) - prints:: - 1 4 0 1 0 - - 1 4 0 1 0 - 1,3 2,3 1,1 - """ - classattr = "%s:class" % namespace if namespace else "class" - return withAttribute(**{classattr : classname}) - -opAssoc = _Constants() -opAssoc.LEFT = object() -opAssoc.RIGHT = object() - -def infixNotation( baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')') ): - """ - Helper method for constructing grammars of expressions made up of - operators working in a precedence hierarchy. Operators may be unary or - binary, left- or right-associative. Parse actions can also be attached - to operator expressions. The generated parser will also recognize the use - of parentheses to override operator precedences (see example below). - - Note: if you define a deep operator list, you may see performance issues - when using infixNotation. See L{ParserElement.enablePackrat} for a - mechanism to potentially improve your parser performance. - - Parameters: - - baseExpr - expression representing the most basic element for the nested - - opList - list of tuples, one for each operator precedence level in the - expression grammar; each tuple is of the form - (opExpr, numTerms, rightLeftAssoc, parseAction), where: - - opExpr is the pyparsing expression for the operator; - may also be a string, which will be converted to a Literal; - if numTerms is 3, opExpr is a tuple of two expressions, for the - two operators separating the 3 terms - - numTerms is the number of terms for this operator (must - be 1, 2, or 3) - - rightLeftAssoc is the indicator whether the operator is - right or left associative, using the pyparsing-defined - constants C{opAssoc.RIGHT} and C{opAssoc.LEFT}. - - parseAction is the parse action to be associated with - expressions matching this operator expression (the - parse action tuple member may be omitted); if the parse action - is passed a tuple or list of functions, this is equivalent to - calling C{setParseAction(*fn)} (L{ParserElement.setParseAction}) - - lpar - expression for matching left-parentheses (default=C{Suppress('(')}) - - rpar - expression for matching right-parentheses (default=C{Suppress(')')}) - - Example:: - # simple example of four-function arithmetic with ints and variable names - integer = pyparsing_common.signed_integer - varname = pyparsing_common.identifier - - arith_expr = infixNotation(integer | varname, - [ - ('-', 1, opAssoc.RIGHT), - (oneOf('* /'), 2, opAssoc.LEFT), - (oneOf('+ -'), 2, opAssoc.LEFT), - ]) - - arith_expr.runTests(''' - 5+3*6 - (5+3)*6 - -2--11 - ''', fullDump=False) - prints:: - 5+3*6 - [[5, '+', [3, '*', 6]]] - - (5+3)*6 - [[[5, '+', 3], '*', 6]] - - -2--11 - [[['-', 2], '-', ['-', 11]]] - """ - ret = Forward() - lastExpr = baseExpr | ( lpar + ret + rpar ) - for i,operDef in enumerate(opList): - opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] - termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr - if arity == 3: - if opExpr is None or len(opExpr) != 2: - raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") - opExpr1, opExpr2 = opExpr - thisExpr = Forward().setName(termName) - if rightLeftAssoc == opAssoc.LEFT: - if arity == 1: - matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) - elif arity == 2: - if opExpr is not None: - matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) - else: - matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) - elif arity == 3: - matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ - Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) - else: - raise ValueError("operator must be unary (1), binary (2), or ternary (3)") - elif rightLeftAssoc == opAssoc.RIGHT: - if arity == 1: - # try to avoid LR with this extra test - if not isinstance(opExpr, Optional): - opExpr = Optional(opExpr) - matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) - elif arity == 2: - if opExpr is not None: - matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) - else: - matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) - elif arity == 3: - matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ - Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) - else: - raise ValueError("operator must be unary (1), binary (2), or ternary (3)") - else: - raise ValueError("operator must indicate right or left associativity") - if pa: - if isinstance(pa, (tuple, list)): - matchExpr.setParseAction(*pa) - else: - matchExpr.setParseAction(pa) - thisExpr <<= ( matchExpr.setName(termName) | lastExpr ) - lastExpr = thisExpr - ret <<= lastExpr - return ret - -operatorPrecedence = infixNotation -"""(Deprecated) Former name of C{L{infixNotation}}, will be dropped in a future release.""" - -dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"').setName("string enclosed in double quotes") -sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("string enclosed in single quotes") -quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*')+'"'| - Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*")+"'").setName("quotedString using single or double quotes") -unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") - -def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): - """ - Helper method for defining nested lists enclosed in opening and closing - delimiters ("(" and ")" are the default). - - Parameters: - - opener - opening character for a nested list (default=C{"("}); can also be a pyparsing expression - - closer - closing character for a nested list (default=C{")"}); can also be a pyparsing expression - - content - expression for items within the nested lists (default=C{None}) - - ignoreExpr - expression for ignoring opening and closing delimiters (default=C{quotedString}) - - If an expression is not provided for the content argument, the nested - expression will capture all whitespace-delimited content between delimiters - as a list of separate values. - - Use the C{ignoreExpr} argument to define expressions that may contain - opening or closing characters that should not be treated as opening - or closing characters for nesting, such as quotedString or a comment - expression. Specify multiple expressions using an C{L{Or}} or C{L{MatchFirst}}. - The default is L{quotedString}, but if no expressions are to be ignored, - then pass C{None} for this argument. - - Example:: - data_type = oneOf("void int short long char float double") - decl_data_type = Combine(data_type + Optional(Word('*'))) - ident = Word(alphas+'_', alphanums+'_') - number = pyparsing_common.number - arg = Group(decl_data_type + ident) - LPAR,RPAR = map(Suppress, "()") - - code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) - - c_function = (decl_data_type("type") - + ident("name") - + LPAR + Optional(delimitedList(arg), [])("args") + RPAR - + code_body("body")) - c_function.ignore(cStyleComment) - - source_code = ''' - int is_odd(int x) { - return (x%2); - } - - int dec_to_hex(char hchar) { - if (hchar >= '0' && hchar <= '9') { - return (ord(hchar)-ord('0')); - } else { - return (10+ord(hchar)-ord('A')); - } - } - ''' - for func in c_function.searchString(source_code): - print("%(name)s (%(type)s) args: %(args)s" % func) - - prints:: - is_odd (int) args: [['int', 'x']] - dec_to_hex (int) args: [['char', 'hchar']] - """ - if opener == closer: - raise ValueError("opening and closing strings cannot be the same") - if content is None: - if isinstance(opener,basestring) and isinstance(closer,basestring): - if len(opener) == 1 and len(closer)==1: - if ignoreExpr is not None: - content = (Combine(OneOrMore(~ignoreExpr + - CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) - ).setParseAction(lambda t:t[0].strip())) - else: - content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS - ).setParseAction(lambda t:t[0].strip())) - else: - if ignoreExpr is not None: - content = (Combine(OneOrMore(~ignoreExpr + - ~Literal(opener) + ~Literal(closer) + - CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) - ).setParseAction(lambda t:t[0].strip())) - else: - content = (Combine(OneOrMore(~Literal(opener) + ~Literal(closer) + - CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS,exact=1)) - ).setParseAction(lambda t:t[0].strip())) - else: - raise ValueError("opening and closing arguments must be strings if no content expression is given") - ret = Forward() - if ignoreExpr is not None: - ret <<= Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) - else: - ret <<= Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) - ret.setName('nested %s%s expression' % (opener,closer)) - return ret - -def indentedBlock(blockStatementExpr, indentStack, indent=True): - """ - Helper method for defining space-delimited indentation blocks, such as - those used to define block statements in Python source code. - - Parameters: - - blockStatementExpr - expression defining syntax of statement that - is repeated within the indented block - - indentStack - list created by caller to manage indentation stack - (multiple statementWithIndentedBlock expressions within a single grammar - should share a common indentStack) - - indent - boolean indicating whether block must be indented beyond the - the current level; set to False for block of left-most statements - (default=C{True}) - - A valid block must contain at least one C{blockStatement}. - - Example:: - data = ''' - def A(z): - A1 - B = 100 - G = A2 - A2 - A3 - B - def BB(a,b,c): - BB1 - def BBA(): - bba1 - bba2 - bba3 - C - D - def spam(x,y): - def eggs(z): - pass - ''' - - - indentStack = [1] - stmt = Forward() - - identifier = Word(alphas, alphanums) - funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":") - func_body = indentedBlock(stmt, indentStack) - funcDef = Group( funcDecl + func_body ) - - rvalue = Forward() - funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") - rvalue << (funcCall | identifier | Word(nums)) - assignment = Group(identifier + "=" + rvalue) - stmt << ( funcDef | assignment | identifier ) - - module_body = OneOrMore(stmt) - - parseTree = module_body.parseString(data) - parseTree.pprint() - prints:: - [['def', - 'A', - ['(', 'z', ')'], - ':', - [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], - 'B', - ['def', - 'BB', - ['(', 'a', 'b', 'c', ')'], - ':', - [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], - 'C', - 'D', - ['def', - 'spam', - ['(', 'x', 'y', ')'], - ':', - [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] - """ - def checkPeerIndent(s,l,t): - if l >= len(s): return - curCol = col(l,s) - if curCol != indentStack[-1]: - if curCol > indentStack[-1]: - raise ParseFatalException(s,l,"illegal nesting") - raise ParseException(s,l,"not a peer entry") - - def checkSubIndent(s,l,t): - curCol = col(l,s) - if curCol > indentStack[-1]: - indentStack.append( curCol ) - else: - raise ParseException(s,l,"not a subentry") - - def checkUnindent(s,l,t): - if l >= len(s): return - curCol = col(l,s) - if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): - raise ParseException(s,l,"not an unindent") - indentStack.pop() - - NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) - INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') - PEER = Empty().setParseAction(checkPeerIndent).setName('') - UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') - if indent: - smExpr = Group( Optional(NL) + - #~ FollowedBy(blockStatementExpr) + - INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) - else: - smExpr = Group( Optional(NL) + - (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) - blockStatementExpr.ignore(_bslash + LineEnd()) - return smExpr.setName('indented block') - -alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") -punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") - -anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:").setName('any tag')) -_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(),'><& "\'')) -commonHTMLEntity = Regex('&(?P<entity>' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") -def replaceHTMLEntity(t): - """Helper parser action to replace common HTML entities with their special characters""" - return _htmlEntityMap.get(t.entity) - -# it's easy to get these comment structures wrong - they're very common, so may as well make them available -cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") -"Comment of the form C{/* ... */}" - -htmlComment = Regex(r"<!--[\s\S]*?-->").setName("HTML comment") -"Comment of the form C{<!-- ... -->}" - -restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") -dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") -"Comment of the form C{// ... (to end of line)}" - -cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/'| dblSlashComment).setName("C++ style comment") -"Comment of either form C{L{cStyleComment}} or C{L{dblSlashComment}}" - -javaStyleComment = cppStyleComment -"Same as C{L{cppStyleComment}}" - -pythonStyleComment = Regex(r"#.*").setName("Python style comment") -"Comment of the form C{# ... (to end of line)}" - -_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') + - Optional( Word(" \t") + - ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") -commaSeparatedList = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("commaSeparatedList") -"""(Deprecated) Predefined expression of 1 or more printable words or quoted strings, separated by commas. - This expression is deprecated in favor of L{pyparsing_common.comma_separated_list}.""" - -# some other useful expressions - using lower-case class name since we are really using this as a namespace -class pyparsing_common: - """ - Here are some common low-level expressions that may be useful in jump-starting parser development: - - numeric forms (L{integers<integer>}, L{reals<real>}, L{scientific notation<sci_real>}) - - common L{programming identifiers<identifier>} - - network addresses (L{MAC<mac_address>}, L{IPv4<ipv4_address>}, L{IPv6<ipv6_address>}) - - ISO8601 L{dates<iso8601_date>} and L{datetime<iso8601_datetime>} - - L{UUID<uuid>} - - L{comma-separated list<comma_separated_list>} - Parse actions: - - C{L{convertToInteger}} - - C{L{convertToFloat}} - - C{L{convertToDate}} - - C{L{convertToDatetime}} - - C{L{stripHTMLTags}} - - C{L{upcaseTokens}} - - C{L{downcaseTokens}} - - Example:: - pyparsing_common.number.runTests(''' - # any int or real number, returned as the appropriate type - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - ''') - - pyparsing_common.fnumber.runTests(''' - # any int or real number, returned as float - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - ''') - - pyparsing_common.hex_integer.runTests(''' - # hex numbers - 100 - FF - ''') - - pyparsing_common.fraction.runTests(''' - # fractions - 1/2 - -3/4 - ''') - - pyparsing_common.mixed_integer.runTests(''' - # mixed fractions - 1 - 1/2 - -3/4 - 1-3/4 - ''') - - import uuid - pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) - pyparsing_common.uuid.runTests(''' - # uuid - 12345678-1234-5678-1234-567812345678 - ''') - prints:: - # any int or real number, returned as the appropriate type - 100 - [100] - - -100 - [-100] - - +100 - [100] - - 3.14159 - [3.14159] - - 6.02e23 - [6.02e+23] - - 1e-12 - [1e-12] - - # any int or real number, returned as float - 100 - [100.0] - - -100 - [-100.0] - - +100 - [100.0] - - 3.14159 - [3.14159] - - 6.02e23 - [6.02e+23] - - 1e-12 - [1e-12] - - # hex numbers - 100 - [256] - - FF - [255] - - # fractions - 1/2 - [0.5] - - -3/4 - [-0.75] - - # mixed fractions - 1 - [1] - - 1/2 - [0.5] - - -3/4 - [-0.75] - - 1-3/4 - [1.75] - - # uuid - 12345678-1234-5678-1234-567812345678 - [UUID('12345678-1234-5678-1234-567812345678')] - """ - - convertToInteger = tokenMap(int) - """ - Parse action for converting parsed integers to Python int - """ - - convertToFloat = tokenMap(float) - """ - Parse action for converting parsed numbers to Python float - """ - - integer = Word(nums).setName("integer").setParseAction(convertToInteger) - """expression that parses an unsigned integer, returns an int""" - - hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int,16)) - """expression that parses a hexadecimal integer, returns an int""" - - signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) - """expression that parses an integer with optional leading sign, returns an int""" - - fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") - """fractional expression of an integer divided by an integer, returns a float""" - fraction.addParseAction(lambda t: t[0]/t[-1]) - - mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") - """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" - mixed_integer.addParseAction(sum) - - real = Regex(r'[+-]?\d+\.\d*').setName("real number").setParseAction(convertToFloat) - """expression that parses a floating point number and returns a float""" - - sci_real = Regex(r'[+-]?\d+([eE][+-]?\d+|\.\d*([eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) - """expression that parses a floating point number with optional scientific notation and returns a float""" - - # streamlining this expression makes the docs nicer-looking - number = (sci_real | real | signed_integer).streamline() - """any numeric expression, returns the corresponding Python type""" - - fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) - """any int or real number, returned as float""" - - identifier = Word(alphas+'_', alphanums+'_').setName("identifier") - """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" - - ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") - "IPv4 address (C{0.0.0.0 - 255.255.255.255})" - - _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") - _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part)*7).setName("full IPv6 address") - _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part)*(0,6)) + "::" + Optional(_ipv6_part + (':' + _ipv6_part)*(0,6))).setName("short IPv6 address") - _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) - _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") - ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") - "IPv6 address (long, short, or mixed form)" - - mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") - "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" - - @staticmethod - def convertToDate(fmt="%Y-%m-%d"): - """ - Helper to create a parse action for converting parsed date string to Python datetime.date - - Params - - - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%d"}) - - Example:: - date_expr = pyparsing_common.iso8601_date.copy() - date_expr.setParseAction(pyparsing_common.convertToDate()) - print(date_expr.parseString("1999-12-31")) - prints:: - [datetime.date(1999, 12, 31)] - """ - def cvt_fn(s,l,t): - try: - return datetime.strptime(t[0], fmt).date() - except ValueError as ve: - raise ParseException(s, l, str(ve)) - return cvt_fn - - @staticmethod - def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): - """ - Helper to create a parse action for converting parsed datetime string to Python datetime.datetime - - Params - - - fmt - format to be passed to datetime.strptime (default=C{"%Y-%m-%dT%H:%M:%S.%f"}) - - Example:: - dt_expr = pyparsing_common.iso8601_datetime.copy() - dt_expr.setParseAction(pyparsing_common.convertToDatetime()) - print(dt_expr.parseString("1999-12-31T23:59:59.999")) - prints:: - [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] - """ - def cvt_fn(s,l,t): - try: - return datetime.strptime(t[0], fmt) - except ValueError as ve: - raise ParseException(s, l, str(ve)) - return cvt_fn - - iso8601_date = Regex(r'(?P<year>\d{4})(?:-(?P<month>\d\d)(?:-(?P<day>\d\d))?)?').setName("ISO8601 date") - "ISO8601 date (C{yyyy-mm-dd})" - - iso8601_datetime = Regex(r'(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d)[T ](?P<hour>\d\d):(?P<minute>\d\d)(:(?P<second>\d\d(\.\d*)?)?)?(?P<tz>Z|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") - "ISO8601 datetime (C{yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)}) - trailing seconds, milliseconds, and timezone optional; accepts separating C{'T'} or C{' '}" - - uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") - "UUID (C{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})" - - _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() - @staticmethod - def stripHTMLTags(s, l, tokens): - """ - Parse action to remove HTML tags from web page HTML source - - Example:: - # strip HTML links from normal text - text = '<td>More info at the <a href="http://pyparsing.wikispaces.com">pyparsing</a> wiki page</td>' - td,td_end = makeHTMLTags("TD") - table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end - - print(table_text.parseString(text).body) # -> 'More info at the pyparsing wiki page' - """ - return pyparsing_common._html_stripper.transformString(tokens[0]) - - _commasepitem = Combine(OneOrMore(~Literal(",") + ~LineEnd() + Word(printables, excludeChars=',') - + Optional( White(" \t") ) ) ).streamline().setName("commaItem") - comma_separated_list = delimitedList( Optional( quotedString.copy() | _commasepitem, default="") ).setName("comma separated list") - """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" - - upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) - """Parse action to convert tokens to upper case.""" - - downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) - """Parse action to convert tokens to lower case.""" - - -if __name__ == "__main__": - - selectToken = CaselessLiteral("select") - fromToken = CaselessLiteral("from") - - ident = Word(alphas, alphanums + "_$") - - columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) - columnNameList = Group(delimitedList(columnName)).setName("columns") - columnSpec = ('*' | columnNameList) - - tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) - tableNameList = Group(delimitedList(tableName)).setName("tables") - - simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") - - # demo runTests method, including embedded comments in test string - simpleSQL.runTests(""" - # '*' as column list and dotted table name - select * from SYS.XYZZY - - # caseless match on "SELECT", and casts back to "select" - SELECT * from XYZZY, ABC - - # list of column names, and mixed case SELECT keyword - Select AA,BB,CC from Sys.dual - - # multiple tables - Select A, B, C from Sys.dual, Table2 - - # invalid SELECT keyword - should fail - Xelect A, B, C from Sys.dual - - # incomplete command - should fail - Select - - # invalid column name - should fail - Select ^^^ frox Sys.dual - - """) - - pyparsing_common.number.runTests(""" - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - """) - - # any int or real number, returned as float - pyparsing_common.fnumber.runTests(""" - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - """) - - pyparsing_common.hex_integer.runTests(""" - 100 - FF - """) - - import uuid - pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) - pyparsing_common.uuid.runTests(""" - 12345678-1234-5678-1234-567812345678 - """) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/__init__.py deleted file mode 100644 index 8dc7315..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .core import TomlError -from .parser import load, loads -from .writer import dump, dumps diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/core.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/core.py deleted file mode 100644 index c182734..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/core.py +++ /dev/null @@ -1,13 +0,0 @@ -class TomlError(RuntimeError): - def __init__(self, message, line, col, filename): - RuntimeError.__init__(self, message, line, col, filename) - self.message = message - self.line = line - self.col = col - self.filename = filename - - def __str__(self): - return '{}({}, {}): {}'.format(self.filename, self.line, self.col, self.message) - - def __repr__(self): - return 'TomlError({!r}, {!r}, {!r}, {!r})'.format(self.message, self.line, self.col, self.filename) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/parser.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/parser.py deleted file mode 100644 index 7fc3d34..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/parser.py +++ /dev/null @@ -1,374 +0,0 @@ -import string, re, sys, datetime -from .core import TomlError - -if sys.version_info[0] == 2: - _chr = unichr -else: - _chr = chr - -def load(fin, translate=lambda t, x, v: v): - return loads(fin.read(), translate=translate, filename=getattr(fin, 'name', repr(fin))) - -def loads(s, filename='<string>', translate=lambda t, x, v: v): - if isinstance(s, bytes): - s = s.decode('utf-8') - - s = s.replace('\r\n', '\n') - - root = {} - tables = {} - scope = root - - src = _Source(s, filename=filename) - ast = _p_toml(src) - - def error(msg): - raise TomlError(msg, pos[0], pos[1], filename) - - def process_value(v): - kind, text, value, pos = v - if kind == 'str' and value.startswith('\n'): - value = value[1:] - if kind == 'array': - if value and any(k != value[0][0] for k, t, v, p in value[1:]): - error('array-type-mismatch') - value = [process_value(item) for item in value] - elif kind == 'table': - value = dict([(k, process_value(value[k])) for k in value]) - return translate(kind, text, value) - - for kind, value, pos in ast: - if kind == 'kv': - k, v = value - if k in scope: - error('duplicate_keys. Key "{0}" was used more than once.'.format(k)) - scope[k] = process_value(v) - else: - is_table_array = (kind == 'table_array') - cur = tables - for name in value[:-1]: - if isinstance(cur.get(name), list): - d, cur = cur[name][-1] - else: - d, cur = cur.setdefault(name, (None, {})) - - scope = {} - name = value[-1] - if name not in cur: - if is_table_array: - cur[name] = [(scope, {})] - else: - cur[name] = (scope, {}) - elif isinstance(cur[name], list): - if not is_table_array: - error('table_type_mismatch') - cur[name].append((scope, {})) - else: - if is_table_array: - error('table_type_mismatch') - old_scope, next_table = cur[name] - if old_scope is not None: - error('duplicate_tables') - cur[name] = (scope, next_table) - - def merge_tables(scope, tables): - if scope is None: - scope = {} - for k in tables: - if k in scope: - error('key_table_conflict') - v = tables[k] - if isinstance(v, list): - scope[k] = [merge_tables(sc, tbl) for sc, tbl in v] - else: - scope[k] = merge_tables(v[0], v[1]) - return scope - - return merge_tables(root, tables) - -class _Source: - def __init__(self, s, filename=None): - self.s = s - self._pos = (1, 1) - self._last = None - self._filename = filename - self.backtrack_stack = [] - - def last(self): - return self._last - - def pos(self): - return self._pos - - def fail(self): - return self._expect(None) - - def consume_dot(self): - if self.s: - self._last = self.s[0] - self.s = self[1:] - self._advance(self._last) - return self._last - return None - - def expect_dot(self): - return self._expect(self.consume_dot()) - - def consume_eof(self): - if not self.s: - self._last = '' - return True - return False - - def expect_eof(self): - return self._expect(self.consume_eof()) - - def consume(self, s): - if self.s.startswith(s): - self.s = self.s[len(s):] - self._last = s - self._advance(s) - return True - return False - - def expect(self, s): - return self._expect(self.consume(s)) - - def consume_re(self, re): - m = re.match(self.s) - if m: - self.s = self.s[len(m.group(0)):] - self._last = m - self._advance(m.group(0)) - return m - return None - - def expect_re(self, re): - return self._expect(self.consume_re(re)) - - def __enter__(self): - self.backtrack_stack.append((self.s, self._pos)) - - def __exit__(self, type, value, traceback): - if type is None: - self.backtrack_stack.pop() - else: - self.s, self._pos = self.backtrack_stack.pop() - return type == TomlError - - def commit(self): - self.backtrack_stack[-1] = (self.s, self._pos) - - def _expect(self, r): - if not r: - raise TomlError('msg', self._pos[0], self._pos[1], self._filename) - return r - - def _advance(self, s): - suffix_pos = s.rfind('\n') - if suffix_pos == -1: - self._pos = (self._pos[0], self._pos[1] + len(s)) - else: - self._pos = (self._pos[0] + s.count('\n'), len(s) - suffix_pos) - -_ews_re = re.compile(r'(?:[ \t]|#[^\n]*\n|#[^\n]*\Z|\n)*') -def _p_ews(s): - s.expect_re(_ews_re) - -_ws_re = re.compile(r'[ \t]*') -def _p_ws(s): - s.expect_re(_ws_re) - -_escapes = { 'b': '\b', 'n': '\n', 'r': '\r', 't': '\t', '"': '"', '\'': '\'', - '\\': '\\', '/': '/', 'f': '\f' } - -_basicstr_re = re.compile(r'[^"\\\000-\037]*') -_short_uni_re = re.compile(r'u([0-9a-fA-F]{4})') -_long_uni_re = re.compile(r'U([0-9a-fA-F]{8})') -_escapes_re = re.compile('[bnrt"\'\\\\/f]') -_newline_esc_re = re.compile('\n[ \t\n]*') -def _p_basicstr_content(s, content=_basicstr_re): - res = [] - while True: - res.append(s.expect_re(content).group(0)) - if not s.consume('\\'): - break - if s.consume_re(_newline_esc_re): - pass - elif s.consume_re(_short_uni_re) or s.consume_re(_long_uni_re): - res.append(_chr(int(s.last().group(1), 16))) - else: - s.expect_re(_escapes_re) - res.append(_escapes[s.last().group(0)]) - return ''.join(res) - -_key_re = re.compile(r'[0-9a-zA-Z-_]+') -def _p_key(s): - with s: - s.expect('"') - r = _p_basicstr_content(s, _basicstr_re) - s.expect('"') - return r - if s.consume('\''): - if s.consume('\'\''): - r = s.expect_re(_litstr_ml_re).group(0) - s.expect('\'\'\'') - else: - r = s.expect_re(_litstr_re).group(0) - s.expect('\'') - return r - return s.expect_re(_key_re).group(0) - -_float_re = re.compile(r'[+-]?(?:0|[1-9](?:_?\d)*)(?:\.\d(?:_?\d)*)?(?:[eE][+-]?(?:\d(?:_?\d)*))?') -_datetime_re = re.compile(r'(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(?:Z|([+-]\d{2}):(\d{2}))') - -_basicstr_ml_re = re.compile(r'(?:(?:|"|"")[^"\\\000-\011\013-\037])*') -_litstr_re = re.compile(r"[^'\000-\037]*") -_litstr_ml_re = re.compile(r"(?:(?:|'|'')(?:[^'\000-\011\013-\037]))*") -def _p_value(s): - pos = s.pos() - - if s.consume('true'): - return 'bool', s.last(), True, pos - if s.consume('false'): - return 'bool', s.last(), False, pos - - if s.consume('"'): - if s.consume('""'): - r = _p_basicstr_content(s, _basicstr_ml_re) - s.expect('"""') - else: - r = _p_basicstr_content(s, _basicstr_re) - s.expect('"') - return 'str', r, r, pos - - if s.consume('\''): - if s.consume('\'\''): - r = s.expect_re(_litstr_ml_re).group(0) - s.expect('\'\'\'') - else: - r = s.expect_re(_litstr_re).group(0) - s.expect('\'') - return 'str', r, r, pos - - if s.consume_re(_datetime_re): - m = s.last() - s0 = m.group(0) - r = map(int, m.groups()[:6]) - if m.group(7): - micro = float(m.group(7)) - else: - micro = 0 - - if m.group(8): - g = int(m.group(8), 10) * 60 + int(m.group(9), 10) - tz = _TimeZone(datetime.timedelta(0, g * 60)) - else: - tz = _TimeZone(datetime.timedelta(0, 0)) - - y, m, d, H, M, S = r - dt = datetime.datetime(y, m, d, H, M, S, int(micro * 1000000), tz) - return 'datetime', s0, dt, pos - - if s.consume_re(_float_re): - m = s.last().group(0) - r = m.replace('_','') - if '.' in m or 'e' in m or 'E' in m: - return 'float', m, float(r), pos - else: - return 'int', m, int(r, 10), pos - - if s.consume('['): - items = [] - with s: - while True: - _p_ews(s) - items.append(_p_value(s)) - s.commit() - _p_ews(s) - s.expect(',') - s.commit() - _p_ews(s) - s.expect(']') - return 'array', None, items, pos - - if s.consume('{'): - _p_ws(s) - items = {} - if not s.consume('}'): - k = _p_key(s) - _p_ws(s) - s.expect('=') - _p_ws(s) - items[k] = _p_value(s) - _p_ws(s) - while s.consume(','): - _p_ws(s) - k = _p_key(s) - _p_ws(s) - s.expect('=') - _p_ws(s) - items[k] = _p_value(s) - _p_ws(s) - s.expect('}') - return 'table', None, items, pos - - s.fail() - -def _p_stmt(s): - pos = s.pos() - if s.consume( '['): - is_array = s.consume('[') - _p_ws(s) - keys = [_p_key(s)] - _p_ws(s) - while s.consume('.'): - _p_ws(s) - keys.append(_p_key(s)) - _p_ws(s) - s.expect(']') - if is_array: - s.expect(']') - return 'table_array' if is_array else 'table', keys, pos - - key = _p_key(s) - _p_ws(s) - s.expect('=') - _p_ws(s) - value = _p_value(s) - return 'kv', (key, value), pos - -_stmtsep_re = re.compile(r'(?:[ \t]*(?:#[^\n]*)?\n)+[ \t]*') -def _p_toml(s): - stmts = [] - _p_ews(s) - with s: - stmts.append(_p_stmt(s)) - while True: - s.commit() - s.expect_re(_stmtsep_re) - stmts.append(_p_stmt(s)) - _p_ews(s) - s.expect_eof() - return stmts - -class _TimeZone(datetime.tzinfo): - def __init__(self, offset): - self._offset = offset - - def utcoffset(self, dt): - return self._offset - - def dst(self, dt): - return None - - def tzname(self, dt): - m = self._offset.total_seconds() // 60 - if m < 0: - res = '-' - m = -m - else: - res = '+' - h = m // 60 - m = m - h * 60 - return '{}{:.02}{:.02}'.format(res, h, m) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/writer.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/writer.py deleted file mode 100644 index 6eaf5d7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/pytoml/writer.py +++ /dev/null @@ -1,127 +0,0 @@ -from __future__ import unicode_literals -import io, datetime, math, sys - -if sys.version_info[0] == 3: - long = int - unicode = str - - -def dumps(obj, sort_keys=False): - fout = io.StringIO() - dump(obj, fout, sort_keys=sort_keys) - return fout.getvalue() - - -_escapes = {'\n': 'n', '\r': 'r', '\\': '\\', '\t': 't', '\b': 'b', '\f': 'f', '"': '"'} - - -def _escape_string(s): - res = [] - start = 0 - - def flush(): - if start != i: - res.append(s[start:i]) - return i + 1 - - i = 0 - while i < len(s): - c = s[i] - if c in '"\\\n\r\t\b\f': - start = flush() - res.append('\\' + _escapes[c]) - elif ord(c) < 0x20: - start = flush() - res.append('\\u%04x' % ord(c)) - i += 1 - - flush() - return '"' + ''.join(res) + '"' - - -def _escape_id(s): - if any(not c.isalnum() and c not in '-_' for c in s): - return _escape_string(s) - return s - - -def _format_list(v): - return '[{0}]'.format(', '.join(_format_value(obj) for obj in v)) - -# Formula from: -# https://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds -# Once support for py26 is dropped, this can be replaced by td.total_seconds() -def _total_seconds(td): - return ((td.microseconds - + (td.seconds + td.days * 24 * 3600) * 10**6) / 10.0**6) - -def _format_value(v): - if isinstance(v, bool): - return 'true' if v else 'false' - if isinstance(v, int) or isinstance(v, long): - return unicode(v) - if isinstance(v, float): - if math.isnan(v) or math.isinf(v): - raise ValueError("{0} is not a valid TOML value".format(v)) - else: - return repr(v) - elif isinstance(v, unicode) or isinstance(v, bytes): - return _escape_string(v) - elif isinstance(v, datetime.datetime): - offs = v.utcoffset() - offs = _total_seconds(offs) // 60 if offs is not None else 0 - - if offs == 0: - suffix = 'Z' - else: - if offs > 0: - suffix = '+' - else: - suffix = '-' - offs = -offs - suffix = '{0}{1:.02}{2:.02}'.format(suffix, offs // 60, offs % 60) - - if v.microsecond: - return v.strftime('%Y-%m-%dT%H:%M:%S.%f') + suffix - else: - return v.strftime('%Y-%m-%dT%H:%M:%S') + suffix - elif isinstance(v, list): - return _format_list(v) - else: - raise RuntimeError(v) - - -def dump(obj, fout, sort_keys=False): - tables = [((), obj, False)] - - while tables: - name, table, is_array = tables.pop() - if name: - section_name = '.'.join(_escape_id(c) for c in name) - if is_array: - fout.write('[[{0}]]\n'.format(section_name)) - else: - fout.write('[{0}]\n'.format(section_name)) - - table_keys = sorted(table.keys()) if sort_keys else table.keys() - new_tables = [] - has_kv = False - for k in table_keys: - v = table[k] - if isinstance(v, dict): - new_tables.append((name + (k,), v, False)) - elif isinstance(v, list) and v and all(isinstance(o, dict) for o in v): - new_tables.extend((name + (k,), d, True) for d in v) - elif v is None: - # based on mojombo's comment: https://github.com/toml-lang/toml/issues/146#issuecomment-25019344 - fout.write( - '#{} = null # To use: uncomment and replace null with value\n'.format(_escape_id(k))) - has_kv = True - else: - fout.write('{0} = {1}\n'.format(_escape_id(k), _format_value(v))) - has_kv = True - - tables.extend(reversed(new_tables)) - - if (name or has_kv) and tables: - fout.write('\n') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__init__.py deleted file mode 100644 index ccd361a..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__init__.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- - -# __ -# /__) _ _ _ _ _/ _ -# / ( (- (/ (/ (- _) / _) -# / - -""" -Requests HTTP Library -~~~~~~~~~~~~~~~~~~~~~ - -Requests is an HTTP library, written in Python, for human beings. Basic GET -usage: - - >>> import requests - >>> r = requests.get('https://www.python.org') - >>> r.status_code - 200 - >>> 'Python is a programming language' in r.content - True - -... or POST: - - >>> payload = dict(key1='value1', key2='value2') - >>> r = requests.post('http://httpbin.org/post', data=payload) - >>> print(r.text) - { - ... - "form": { - "key2": "value2", - "key1": "value1" - }, - ... - } - -The other HTTP methods are supported - see `requests.api`. Full documentation -is at <http://python-requests.org>. - -:copyright: (c) 2017 by Kenneth Reitz. -:license: Apache 2.0, see LICENSE for more details. -""" - -from pip._vendor import urllib3 -from pip._vendor import chardet -import warnings -from .exceptions import RequestsDependencyWarning - - -def check_compatibility(urllib3_version, chardet_version): - urllib3_version = urllib3_version.split('.') - assert urllib3_version != ['dev'] # Verify urllib3 isn't installed from git. - - # Sometimes, urllib3 only reports its version as 16.1. - if len(urllib3_version) == 2: - urllib3_version.append('0') - - # Check urllib3 for compatibility. - major, minor, patch = urllib3_version # noqa: F811 - major, minor, patch = int(major), int(minor), int(patch) - # urllib3 >= 1.21.1, <= 1.22 - assert major == 1 - assert minor >= 21 - assert minor <= 22 - - # Check chardet for compatibility. - major, minor, patch = chardet_version.split('.')[:3] - major, minor, patch = int(major), int(minor), int(patch) - # chardet >= 3.0.2, < 3.1.0 - assert major == 3 - assert minor < 1 - assert patch >= 2 - - -# Check imported dependencies for compatibility. -try: - check_compatibility(urllib3.__version__, chardet.__version__) -except (AssertionError, ValueError): - warnings.warn("urllib3 ({0}) or chardet ({1}) doesn't match a supported " - "version!".format(urllib3.__version__, chardet.__version__), - RequestsDependencyWarning) - -# Attempt to enable urllib3's SNI support, if possible -from pip._internal.compat import WINDOWS -if not WINDOWS: - try: - from pip._vendor.urllib3.contrib import pyopenssl - pyopenssl.inject_into_urllib3() - except ImportError: - pass - -# urllib3's DependencyWarnings should be silenced. -from pip._vendor.urllib3.exceptions import DependencyWarning -warnings.simplefilter('ignore', DependencyWarning) - -from .__version__ import __title__, __description__, __url__, __version__ -from .__version__ import __build__, __author__, __author_email__, __license__ -from .__version__ import __copyright__, __cake__ - -from . import utils -from . import packages -from .models import Request, Response, PreparedRequest -from .api import request, get, head, post, patch, put, delete, options -from .sessions import session, Session -from .status_codes import codes -from .exceptions import ( - RequestException, Timeout, URLRequired, - TooManyRedirects, HTTPError, ConnectionError, - FileModeWarning, ConnectTimeout, ReadTimeout -) - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -logging.getLogger(__name__).addHandler(NullHandler()) - -# FileModeWarnings go off per the default. -warnings.simplefilter('default', FileModeWarning, append=True) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__version__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__version__.py deleted file mode 100644 index dc33eef..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/__version__.py +++ /dev/null @@ -1,14 +0,0 @@ -# .-. .-. .-. . . .-. .-. .-. .-. -# |( |- |.| | | |- `-. | `-. -# ' ' `-' `-`.`-' `-' `-' ' `-' - -__title__ = 'requests' -__description__ = 'Python HTTP for Humans.' -__url__ = 'http://python-requests.org' -__version__ = '2.18.4' -__build__ = 0x021804 -__author__ = 'Kenneth Reitz' -__author_email__ = 'me@kennethreitz.org' -__license__ = 'Apache 2.0' -__copyright__ = 'Copyright 2017 Kenneth Reitz' -__cake__ = u'\u2728 \U0001f370 \u2728' diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/_internal_utils.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/_internal_utils.py deleted file mode 100644 index 759d9a5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/_internal_utils.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests._internal_utils -~~~~~~~~~~~~~~ - -Provides utility functions that are consumed internally by Requests -which depend on extremely few external helpers (such as compat) -""" - -from .compat import is_py2, builtin_str, str - - -def to_native_string(string, encoding='ascii'): - """Given a string object, regardless of type, returns a representation of - that string in the native string type, encoding and decoding where - necessary. This assumes ASCII unless told otherwise. - """ - if isinstance(string, builtin_str): - out = string - else: - if is_py2: - out = string.encode(encoding) - else: - out = string.decode(encoding) - - return out - - -def unicode_is_ascii(u_string): - """Determine if unicode string only contains ASCII characters. - - :param str u_string: unicode string to check. Must be unicode - and not Python 2 `str`. - :rtype: bool - """ - assert isinstance(u_string, str) - try: - u_string.encode('ascii') - return True - except UnicodeEncodeError: - return False diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/adapters.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/adapters.py deleted file mode 100644 index 5787638..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/adapters.py +++ /dev/null @@ -1,525 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.adapters -~~~~~~~~~~~~~~~~~ - -This module contains the transport adapters that Requests uses to define -and maintain connections. -""" - -import os.path -import socket - -from pip._vendor.urllib3.poolmanager import PoolManager, proxy_from_url -from pip._vendor.urllib3.response import HTTPResponse -from pip._vendor.urllib3.util import Timeout as TimeoutSauce -from pip._vendor.urllib3.util.retry import Retry -from pip._vendor.urllib3.exceptions import ClosedPoolError -from pip._vendor.urllib3.exceptions import ConnectTimeoutError -from pip._vendor.urllib3.exceptions import HTTPError as _HTTPError -from pip._vendor.urllib3.exceptions import MaxRetryError -from pip._vendor.urllib3.exceptions import NewConnectionError -from pip._vendor.urllib3.exceptions import ProxyError as _ProxyError -from pip._vendor.urllib3.exceptions import ProtocolError -from pip._vendor.urllib3.exceptions import ReadTimeoutError -from pip._vendor.urllib3.exceptions import SSLError as _SSLError -from pip._vendor.urllib3.exceptions import ResponseError - -from .models import Response -from .compat import urlparse, basestring -from .utils import (DEFAULT_CA_BUNDLE_PATH, get_encoding_from_headers, - prepend_scheme_if_needed, get_auth_from_url, urldefragauth, - select_proxy) -from .structures import CaseInsensitiveDict -from .cookies import extract_cookies_to_jar -from .exceptions import (ConnectionError, ConnectTimeout, ReadTimeout, SSLError, - ProxyError, RetryError, InvalidSchema) -from .auth import _basic_auth_str - -try: - from pip._vendor.urllib3.contrib.socks import SOCKSProxyManager -except ImportError: - def SOCKSProxyManager(*args, **kwargs): - raise InvalidSchema("Missing dependencies for SOCKS support.") - -DEFAULT_POOLBLOCK = False -DEFAULT_POOLSIZE = 10 -DEFAULT_RETRIES = 0 -DEFAULT_POOL_TIMEOUT = None - - -class BaseAdapter(object): - """The Base Transport Adapter""" - - def __init__(self): - super(BaseAdapter, self).__init__() - - def send(self, request, stream=False, timeout=None, verify=True, - cert=None, proxies=None): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - """ - raise NotImplementedError - - def close(self): - """Cleans up adapter specific items.""" - raise NotImplementedError - - -class HTTPAdapter(BaseAdapter): - """The built-in HTTP Adapter for urllib3. - - Provides a general-case interface for Requests sessions to contact HTTP and - HTTPS urls by implementing the Transport Adapter interface. This class will - usually be created by the :class:`Session <Session>` class under the - covers. - - :param pool_connections: The number of urllib3 connection pools to cache. - :param pool_maxsize: The maximum number of connections to save in the pool. - :param max_retries: The maximum number of retries each connection - should attempt. Note, this applies only to failed DNS lookups, socket - connections and connection timeouts, never to requests where data has - made it to the server. By default, Requests does not retry failed - connections. If you need granular control over the conditions under - which we retry a request, import urllib3's ``Retry`` class and pass - that instead. - :param pool_block: Whether the connection pool should block for connections. - - Usage:: - - >>> import requests - >>> s = requests.Session() - >>> a = requests.adapters.HTTPAdapter(max_retries=3) - >>> s.mount('http://', a) - """ - __attrs__ = ['max_retries', 'config', '_pool_connections', '_pool_maxsize', - '_pool_block'] - - def __init__(self, pool_connections=DEFAULT_POOLSIZE, - pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_RETRIES, - pool_block=DEFAULT_POOLBLOCK): - if max_retries == DEFAULT_RETRIES: - self.max_retries = Retry(0, read=False) - else: - self.max_retries = Retry.from_int(max_retries) - self.config = {} - self.proxy_manager = {} - - super(HTTPAdapter, self).__init__() - - self._pool_connections = pool_connections - self._pool_maxsize = pool_maxsize - self._pool_block = pool_block - - self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) - - def __getstate__(self): - return dict((attr, getattr(self, attr, None)) for attr in - self.__attrs__) - - def __setstate__(self, state): - # Can't handle by adding 'proxy_manager' to self.__attrs__ because - # self.poolmanager uses a lambda function, which isn't pickleable. - self.proxy_manager = {} - self.config = {} - - for attr, value in state.items(): - setattr(self, attr, value) - - self.init_poolmanager(self._pool_connections, self._pool_maxsize, - block=self._pool_block) - - def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs): - """Initializes a urllib3 PoolManager. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param connections: The number of urllib3 connection pools to cache. - :param maxsize: The maximum number of connections to save in the pool. - :param block: Block when no free connections are available. - :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. - """ - # save these values for pickling - self._pool_connections = connections - self._pool_maxsize = maxsize - self._pool_block = block - - self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, - block=block, strict=True, **pool_kwargs) - - def proxy_manager_for(self, proxy, **proxy_kwargs): - """Return urllib3 ProxyManager for the given proxy. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param proxy: The proxy to return a urllib3 ProxyManager for. - :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. - :returns: ProxyManager - :rtype: urllib3.ProxyManager - """ - if proxy in self.proxy_manager: - manager = self.proxy_manager[proxy] - elif proxy.lower().startswith('socks'): - username, password = get_auth_from_url(proxy) - manager = self.proxy_manager[proxy] = SOCKSProxyManager( - proxy, - username=username, - password=password, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs - ) - else: - proxy_headers = self.proxy_headers(proxy) - manager = self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs) - - return manager - - def cert_verify(self, conn, url, verify, cert): - """Verify a SSL certificate. This method should not be called from user - code, and is only exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param conn: The urllib3 connection object associated with the cert. - :param url: The requested URL. - :param verify: Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: The SSL certificate to verify. - """ - if url.lower().startswith('https') and verify: - - cert_loc = None - - # Allow self-specified cert location. - if verify is not True: - cert_loc = verify - - if not cert_loc: - cert_loc = DEFAULT_CA_BUNDLE_PATH - - if not cert_loc or not os.path.exists(cert_loc): - raise IOError("Could not find a suitable TLS CA certificate bundle, " - "invalid path: {0}".format(cert_loc)) - - conn.cert_reqs = 'CERT_REQUIRED' - - if not os.path.isdir(cert_loc): - conn.ca_certs = cert_loc - else: - conn.ca_cert_dir = cert_loc - else: - conn.cert_reqs = 'CERT_NONE' - conn.ca_certs = None - conn.ca_cert_dir = None - - if cert: - if not isinstance(cert, basestring): - conn.cert_file = cert[0] - conn.key_file = cert[1] - else: - conn.cert_file = cert - conn.key_file = None - if conn.cert_file and not os.path.exists(conn.cert_file): - raise IOError("Could not find the TLS certificate file, " - "invalid path: {0}".format(conn.cert_file)) - if conn.key_file and not os.path.exists(conn.key_file): - raise IOError("Could not find the TLS key file, " - "invalid path: {0}".format(conn.key_file)) - - def build_response(self, req, resp): - """Builds a :class:`Response <requests.Response>` object from a urllib3 - response. This should not be called from user code, and is only exposed - for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>` - - :param req: The :class:`PreparedRequest <PreparedRequest>` used to generate the response. - :param resp: The urllib3 response object. - :rtype: requests.Response - """ - response = Response() - - # Fallback to None if there's no status_code, for whatever reason. - response.status_code = getattr(resp, 'status', None) - - # Make headers case-insensitive. - response.headers = CaseInsensitiveDict(getattr(resp, 'headers', {})) - - # Set encoding. - response.encoding = get_encoding_from_headers(response.headers) - response.raw = resp - response.reason = response.raw.reason - - if isinstance(req.url, bytes): - response.url = req.url.decode('utf-8') - else: - response.url = req.url - - # Add new cookies from the server. - extract_cookies_to_jar(response.cookies, req, resp) - - # Give the Response some context. - response.request = req - response.connection = self - - return response - - def get_connection(self, url, proxies=None): - """Returns a urllib3 connection for the given URL. This should not be - called from user code, and is only exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param url: The URL to connect to. - :param proxies: (optional) A Requests-style dictionary of proxies used on this request. - :rtype: urllib3.ConnectionPool - """ - proxy = select_proxy(url, proxies) - - if proxy: - proxy = prepend_scheme_if_needed(proxy, 'http') - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_url(url) - else: - # Only scheme should be lower case - parsed = urlparse(url) - url = parsed.geturl() - conn = self.poolmanager.connection_from_url(url) - - return conn - - def close(self): - """Disposes of any internal state. - - Currently, this closes the PoolManager and any active ProxyManager, - which closes any pooled connections. - """ - self.poolmanager.clear() - for proxy in self.proxy_manager.values(): - proxy.clear() - - def request_url(self, request, proxies): - """Obtain the url to use when making the final request. - - If the message is being sent through a HTTP proxy, the full URL has to - be used. Otherwise, we should only use the path portion of the URL. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs. - :rtype: str - """ - proxy = select_proxy(request.url, proxies) - scheme = urlparse(request.url).scheme - - is_proxied_http_request = (proxy and scheme != 'https') - using_socks_proxy = False - if proxy: - proxy_scheme = urlparse(proxy).scheme.lower() - using_socks_proxy = proxy_scheme.startswith('socks') - - url = request.path_url - if is_proxied_http_request and not using_socks_proxy: - url = urldefragauth(request.url) - - return url - - def add_headers(self, request, **kwargs): - """Add any headers needed by the connection. As of v2.0 this does - nothing by default, but is left for overriding by users that subclass - the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: The :class:`PreparedRequest <PreparedRequest>` to add headers to. - :param kwargs: The keyword arguments from the call to send(). - """ - pass - - def proxy_headers(self, proxy): - """Returns a dictionary of the headers to add to any request sent - through a proxy. This works with urllib3 magic to ensure that they are - correctly sent to the proxy, rather than in a tunnelled request if - CONNECT is being used. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param proxies: The url of the proxy being used for this request. - :rtype: dict - """ - headers = {} - username, password = get_auth_from_url(proxy) - - if username: - headers['Proxy-Authorization'] = _basic_auth_str(username, - password) - - return headers - - def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple or urllib3 Timeout object - :param verify: (optional) Either a boolean, in which case it controls whether - we verify the server's TLS certificate, or a string, in which case it - must be a path to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - :rtype: requests.Response - """ - - conn = self.get_connection(request.url, proxies) - - self.cert_verify(conn, request.url, verify, cert) - url = self.request_url(request, proxies) - self.add_headers(request) - - chunked = not (request.body is None or 'Content-Length' in request.headers) - - if isinstance(timeout, tuple): - try: - connect, read = timeout - timeout = TimeoutSauce(connect=connect, read=read) - except ValueError as e: - # this may raise a string formatting error. - err = ("Invalid timeout {0}. Pass a (connect, read) " - "timeout tuple, or a single float to set " - "both timeouts to the same value".format(timeout)) - raise ValueError(err) - elif isinstance(timeout, TimeoutSauce): - pass - else: - timeout = TimeoutSauce(connect=timeout, read=timeout) - - try: - if not chunked: - resp = conn.urlopen( - method=request.method, - url=url, - body=request.body, - headers=request.headers, - redirect=False, - assert_same_host=False, - preload_content=False, - decode_content=False, - retries=self.max_retries, - timeout=timeout - ) - - # Send the request. - else: - if hasattr(conn, 'proxy_pool'): - conn = conn.proxy_pool - - low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT) - - try: - low_conn.putrequest(request.method, - url, - skip_accept_encoding=True) - - for header, value in request.headers.items(): - low_conn.putheader(header, value) - - low_conn.endheaders() - - for i in request.body: - low_conn.send(hex(len(i))[2:].encode('utf-8')) - low_conn.send(b'\r\n') - low_conn.send(i) - low_conn.send(b'\r\n') - low_conn.send(b'0\r\n\r\n') - - # Receive the response from the server - try: - # For Python 2.7+ versions, use buffering of HTTP - # responses - r = low_conn.getresponse(buffering=True) - except TypeError: - # For compatibility with Python 2.6 versions and back - r = low_conn.getresponse() - - resp = HTTPResponse.from_httplib( - r, - pool=conn, - connection=low_conn, - preload_content=False, - decode_content=False - ) - except: - # If we hit any problems here, clean up the connection. - # Then, reraise so that we can handle the actual exception. - low_conn.close() - raise - - except (ProtocolError, socket.error) as err: - raise ConnectionError(err, request=request) - - except MaxRetryError as e: - if isinstance(e.reason, ConnectTimeoutError): - # TODO: Remove this in 3.0.0: see #2811 - if not isinstance(e.reason, NewConnectionError): - raise ConnectTimeout(e, request=request) - - if isinstance(e.reason, ResponseError): - raise RetryError(e, request=request) - - if isinstance(e.reason, _ProxyError): - raise ProxyError(e, request=request) - - if isinstance(e.reason, _SSLError): - # This branch is for urllib3 v1.22 and later. - raise SSLError(e, request=request) - - raise ConnectionError(e, request=request) - - except ClosedPoolError as e: - raise ConnectionError(e, request=request) - - except _ProxyError as e: - raise ProxyError(e) - - except (_SSLError, _HTTPError) as e: - if isinstance(e, _SSLError): - # This branch is for urllib3 versions earlier than v1.22 - raise SSLError(e, request=request) - elif isinstance(e, ReadTimeoutError): - raise ReadTimeout(e, request=request) - else: - raise - - return self.build_response(request, resp) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/api.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/api.py deleted file mode 100644 index bc2115c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/api.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.api -~~~~~~~~~~~~ - -This module implements the Requests API. - -:copyright: (c) 2012 by Kenneth Reitz. -:license: Apache2, see LICENSE for more details. -""" - -from . import sessions - - -def request(method, url, **kwargs): - """Constructs and sends a :class:`Request <Request>`. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param data: (optional) Dictionary or list of tuples ``[(key, value)]`` (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. - :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. - ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` - or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string - defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers - to add for the file. - :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send data - before giving up, as a float, or a :ref:`(connect timeout, read - timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param stream: (optional) if ``False``, the response content will be immediately downloaded. - :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. - :return: :class:`Response <Response>` object - :rtype: requests.Response - - Usage:: - - >>> import requests - >>> req = requests.request('GET', 'http://httpbin.org/get') - <Response [200]> - """ - - # By using the 'with' statement we are sure the session is closed, thus we - # avoid leaving sockets open which can trigger a ResourceWarning in some - # cases, and look like a memory leak in others. - with sessions.Session() as session: - return session.request(method=method, url=url, **kwargs) - - -def get(url, params=None, **kwargs): - r"""Sends a GET request. - - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return request('get', url, params=params, **kwargs) - - -def options(url, **kwargs): - r"""Sends an OPTIONS request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return request('options', url, **kwargs) - - -def head(url, **kwargs): - r"""Sends a HEAD request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', False) - return request('head', url, **kwargs) - - -def post(url, data=None, json=None, **kwargs): - r"""Sends a POST request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('post', url, data=data, json=json, **kwargs) - - -def put(url, data=None, **kwargs): - r"""Sends a PUT request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('put', url, data=data, **kwargs) - - -def patch(url, data=None, **kwargs): - r"""Sends a PATCH request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('patch', url, data=data, **kwargs) - - -def delete(url, **kwargs): - r"""Sends a DELETE request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('delete', url, **kwargs) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/auth.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/auth.py deleted file mode 100644 index 1a182df..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/auth.py +++ /dev/null @@ -1,293 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.auth -~~~~~~~~~~~~~ - -This module contains the authentication handlers for Requests. -""" - -import os -import re -import time -import hashlib -import threading -import warnings - -from base64 import b64encode - -from .compat import urlparse, str, basestring -from .cookies import extract_cookies_to_jar -from ._internal_utils import to_native_string -from .utils import parse_dict_header - -CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded' -CONTENT_TYPE_MULTI_PART = 'multipart/form-data' - - -def _basic_auth_str(username, password): - """Returns a Basic Auth string.""" - - # "I want us to put a big-ol' comment on top of it that - # says that this behaviour is dumb but we need to preserve - # it because people are relying on it." - # - Lukasa - # - # These are here solely to maintain backwards compatibility - # for things like ints. This will be removed in 3.0.0. - if not isinstance(username, basestring): - warnings.warn( - "Non-string usernames will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({0!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(username), - category=DeprecationWarning, - ) - username = str(username) - - if not isinstance(password, basestring): - warnings.warn( - "Non-string passwords will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({0!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(password), - category=DeprecationWarning, - ) - password = str(password) - # -- End Removal -- - - if isinstance(username, str): - username = username.encode('latin1') - - if isinstance(password, str): - password = password.encode('latin1') - - authstr = 'Basic ' + to_native_string( - b64encode(b':'.join((username, password))).strip() - ) - - return authstr - - -class AuthBase(object): - """Base class that all auth implementations derive from""" - - def __call__(self, r): - raise NotImplementedError('Auth hooks must be callable.') - - -class HTTPBasicAuth(AuthBase): - """Attaches HTTP Basic Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - - def __eq__(self, other): - return all([ - self.username == getattr(other, 'username', None), - self.password == getattr(other, 'password', None) - ]) - - def __ne__(self, other): - return not self == other - - def __call__(self, r): - r.headers['Authorization'] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPProxyAuth(HTTPBasicAuth): - """Attaches HTTP Proxy Authentication to a given Request object.""" - - def __call__(self, r): - r.headers['Proxy-Authorization'] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPDigestAuth(AuthBase): - """Attaches HTTP Digest Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - # Keep state in per-thread local storage - self._thread_local = threading.local() - - def init_per_thread_state(self): - # Ensure state is initialized just once per-thread - if not hasattr(self._thread_local, 'init'): - self._thread_local.init = True - self._thread_local.last_nonce = '' - self._thread_local.nonce_count = 0 - self._thread_local.chal = {} - self._thread_local.pos = None - self._thread_local.num_401_calls = None - - def build_digest_header(self, method, url): - """ - :rtype: str - """ - - realm = self._thread_local.chal['realm'] - nonce = self._thread_local.chal['nonce'] - qop = self._thread_local.chal.get('qop') - algorithm = self._thread_local.chal.get('algorithm') - opaque = self._thread_local.chal.get('opaque') - hash_utf8 = None - - if algorithm is None: - _algorithm = 'MD5' - else: - _algorithm = algorithm.upper() - # lambdas assume digest modules are imported at the top level - if _algorithm == 'MD5' or _algorithm == 'MD5-SESS': - def md5_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.md5(x).hexdigest() - hash_utf8 = md5_utf8 - elif _algorithm == 'SHA': - def sha_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.sha1(x).hexdigest() - hash_utf8 = sha_utf8 - - KD = lambda s, d: hash_utf8("%s:%s" % (s, d)) - - if hash_utf8 is None: - return None - - # XXX not implemented yet - entdig = None - p_parsed = urlparse(url) - #: path is request-uri defined in RFC 2616 which should not be empty - path = p_parsed.path or "/" - if p_parsed.query: - path += '?' + p_parsed.query - - A1 = '%s:%s:%s' % (self.username, realm, self.password) - A2 = '%s:%s' % (method, path) - - HA1 = hash_utf8(A1) - HA2 = hash_utf8(A2) - - if nonce == self._thread_local.last_nonce: - self._thread_local.nonce_count += 1 - else: - self._thread_local.nonce_count = 1 - ncvalue = '%08x' % self._thread_local.nonce_count - s = str(self._thread_local.nonce_count).encode('utf-8') - s += nonce.encode('utf-8') - s += time.ctime().encode('utf-8') - s += os.urandom(8) - - cnonce = (hashlib.sha1(s).hexdigest()[:16]) - if _algorithm == 'MD5-SESS': - HA1 = hash_utf8('%s:%s:%s' % (HA1, nonce, cnonce)) - - if not qop: - respdig = KD(HA1, "%s:%s" % (nonce, HA2)) - elif qop == 'auth' or 'auth' in qop.split(','): - noncebit = "%s:%s:%s:%s:%s" % ( - nonce, ncvalue, cnonce, 'auth', HA2 - ) - respdig = KD(HA1, noncebit) - else: - # XXX handle auth-int. - return None - - self._thread_local.last_nonce = nonce - - # XXX should the partial digests be encoded too? - base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \ - 'response="%s"' % (self.username, realm, nonce, path, respdig) - if opaque: - base += ', opaque="%s"' % opaque - if algorithm: - base += ', algorithm="%s"' % algorithm - if entdig: - base += ', digest="%s"' % entdig - if qop: - base += ', qop="auth", nc=%s, cnonce="%s"' % (ncvalue, cnonce) - - return 'Digest %s' % (base) - - def handle_redirect(self, r, **kwargs): - """Reset num_401_calls counter on redirects.""" - if r.is_redirect: - self._thread_local.num_401_calls = 1 - - def handle_401(self, r, **kwargs): - """ - Takes the given response and tries digest-auth, if needed. - - :rtype: requests.Response - """ - - # If response is not 4xx, do not auth - # See https://github.com/requests/requests/issues/3772 - if not 400 <= r.status_code < 500: - self._thread_local.num_401_calls = 1 - return r - - if self._thread_local.pos is not None: - # Rewind the file position indicator of the body to where - # it was to resend the request. - r.request.body.seek(self._thread_local.pos) - s_auth = r.headers.get('www-authenticate', '') - - if 'digest' in s_auth.lower() and self._thread_local.num_401_calls < 2: - - self._thread_local.num_401_calls += 1 - pat = re.compile(r'digest ', flags=re.IGNORECASE) - self._thread_local.chal = parse_dict_header(pat.sub('', s_auth, count=1)) - - # Consume content and release the original connection - # to allow our new request to reuse the same one. - r.content - r.close() - prep = r.request.copy() - extract_cookies_to_jar(prep._cookies, r.request, r.raw) - prep.prepare_cookies(prep._cookies) - - prep.headers['Authorization'] = self.build_digest_header( - prep.method, prep.url) - _r = r.connection.send(prep, **kwargs) - _r.history.append(r) - _r.request = prep - - return _r - - self._thread_local.num_401_calls = 1 - return r - - def __call__(self, r): - # Initialize per-thread state, if needed - self.init_per_thread_state() - # If we have a saved nonce, skip the 401 - if self._thread_local.last_nonce: - r.headers['Authorization'] = self.build_digest_header(r.method, r.url) - try: - self._thread_local.pos = r.body.tell() - except AttributeError: - # In the case of HTTPDigestAuth being reused and the body of - # the previous request was a file-like object, pos has the - # file position of the previous body. Ensure it's set to - # None. - self._thread_local.pos = None - r.register_hook('response', self.handle_401) - r.register_hook('response', self.handle_redirect) - self._thread_local.num_401_calls = 1 - - return r - - def __eq__(self, other): - return all([ - self.username == getattr(other, 'username', None), - self.password == getattr(other, 'password', None) - ]) - - def __ne__(self, other): - return not self == other diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/certs.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/certs.py deleted file mode 100644 index 06a594e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/certs.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -requests.certs -~~~~~~~~~~~~~~ - -This module returns the preferred default CA certificate bundle. There is -only one — the one from the certifi package. - -If you are packaging Requests, e.g., for a Linux distribution or a managed -environment, you can change the definition of where() to return a separately -packaged CA bundle. -""" -from pip._vendor.certifi import where - -if __name__ == '__main__': - print(where()) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/compat.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/compat.py deleted file mode 100644 index 20da3e0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/compat.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.compat -~~~~~~~~~~~~~~~ - -This module handles import compatibility issues between Python 2 and -Python 3. -""" - -from pip._vendor import chardet - -import sys - -# ------- -# Pythons -# ------- - -# Syntax sugar. -_ver = sys.version_info - -#: Python 2.x? -is_py2 = (_ver[0] == 2) - -#: Python 3.x? -is_py3 = (_ver[0] == 3) - -# Note: We've patched out simplejson support in pip because it prevents -# upgrading simplejson on Windows. -# try: -# import simplejson as json -# except (ImportError, SyntaxError): -# # simplejson does not support Python 3.2, it throws a SyntaxError -# # because of u'...' Unicode literals. -import json - -# --------- -# Specifics -# --------- - -if is_py2: - from urllib import ( - quote, unquote, quote_plus, unquote_plus, urlencode, getproxies, - proxy_bypass, proxy_bypass_environment, getproxies_environment) - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag - from urllib2 import parse_http_list - import cookielib - from Cookie import Morsel - from StringIO import StringIO - - from pip._vendor.urllib3.packages.ordered_dict import OrderedDict - - builtin_str = str - bytes = str - str = unicode - basestring = basestring - numeric_types = (int, long, float) - integer_types = (int, long) - -elif is_py3: - from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag - from urllib.request import parse_http_list, getproxies, proxy_bypass, proxy_bypass_environment, getproxies_environment - from http import cookiejar as cookielib - from http.cookies import Morsel - from io import StringIO - from collections import OrderedDict - - builtin_str = str - str = str - bytes = bytes - basestring = (str, bytes) - numeric_types = (int, float) - integer_types = (int,) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/cookies.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/cookies.py deleted file mode 100644 index ab3c88b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/cookies.py +++ /dev/null @@ -1,542 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.cookies -~~~~~~~~~~~~~~~~ - -Compatibility code to be able to use `cookielib.CookieJar` with requests. - -requests.utils imports from here, so be careful with imports. -""" - -import copy -import time -import calendar -import collections - -from ._internal_utils import to_native_string -from .compat import cookielib, urlparse, urlunparse, Morsel - -try: - import threading -except ImportError: - import dummy_threading as threading - - -class MockRequest(object): - """Wraps a `requests.Request` to mimic a `urllib2.Request`. - - The code in `cookielib.CookieJar` expects this interface in order to correctly - manage cookie policies, i.e., determine whether a cookie can be set, given the - domains of the request and the cookie. - - The original request object is read-only. The client is responsible for collecting - the new headers via `get_new_headers()` and interpreting them appropriately. You - probably want `get_cookie_header`, defined below. - """ - - def __init__(self, request): - self._r = request - self._new_headers = {} - self.type = urlparse(self._r.url).scheme - - def get_type(self): - return self.type - - def get_host(self): - return urlparse(self._r.url).netloc - - def get_origin_req_host(self): - return self.get_host() - - def get_full_url(self): - # Only return the response's URL if the user hadn't set the Host - # header - if not self._r.headers.get('Host'): - return self._r.url - # If they did set it, retrieve it and reconstruct the expected domain - host = to_native_string(self._r.headers['Host'], encoding='utf-8') - parsed = urlparse(self._r.url) - # Reconstruct the URL as we expect it - return urlunparse([ - parsed.scheme, host, parsed.path, parsed.params, parsed.query, - parsed.fragment - ]) - - def is_unverifiable(self): - return True - - def has_header(self, name): - return name in self._r.headers or name in self._new_headers - - def get_header(self, name, default=None): - return self._r.headers.get(name, self._new_headers.get(name, default)) - - def add_header(self, key, val): - """cookielib has no legitimate use for this method; add it back if you find one.""" - raise NotImplementedError("Cookie headers should be added with add_unredirected_header()") - - def add_unredirected_header(self, name, value): - self._new_headers[name] = value - - def get_new_headers(self): - return self._new_headers - - @property - def unverifiable(self): - return self.is_unverifiable() - - @property - def origin_req_host(self): - return self.get_origin_req_host() - - @property - def host(self): - return self.get_host() - - -class MockResponse(object): - """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. - - ...what? Basically, expose the parsed HTTP headers from the server response - the way `cookielib` expects to see them. - """ - - def __init__(self, headers): - """Make a MockResponse for `cookielib` to read. - - :param headers: a httplib.HTTPMessage or analogous carrying the headers - """ - self._headers = headers - - def info(self): - return self._headers - - def getheaders(self, name): - self._headers.getheaders(name) - - -def extract_cookies_to_jar(jar, request, response): - """Extract the cookies from the response into a CookieJar. - - :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar) - :param request: our own requests.Request object - :param response: urllib3.HTTPResponse object - """ - if not (hasattr(response, '_original_response') and - response._original_response): - return - # the _original_response field is the wrapped httplib.HTTPResponse object, - req = MockRequest(request) - # pull out the HTTPMessage with the headers and put it in the mock: - res = MockResponse(response._original_response.msg) - jar.extract_cookies(res, req) - - -def get_cookie_header(jar, request): - """ - Produce an appropriate Cookie header string to be sent with `request`, or None. - - :rtype: str - """ - r = MockRequest(request) - jar.add_cookie_header(r) - return r.get_new_headers().get('Cookie') - - -def remove_cookie_by_name(cookiejar, name, domain=None, path=None): - """Unsets a cookie by name, by default over all domains and paths. - - Wraps CookieJar.clear(), is O(n). - """ - clearables = [] - for cookie in cookiejar: - if cookie.name != name: - continue - if domain is not None and domain != cookie.domain: - continue - if path is not None and path != cookie.path: - continue - clearables.append((cookie.domain, cookie.path, cookie.name)) - - for domain, path, name in clearables: - cookiejar.clear(domain, path, name) - - -class CookieConflictError(RuntimeError): - """There are two cookies that meet the criteria specified in the cookie jar. - Use .get and .set and include domain and path args in order to be more specific. - """ - - -class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping): - """Compatibility class; is a cookielib.CookieJar, but exposes a dict - interface. - - This is the CookieJar we create by default for requests and sessions that - don't specify one, since some clients may expect response.cookies and - session.cookies to support dict operations. - - Requests does not use the dict interface internally; it's just for - compatibility with external client code. All requests code should work - out of the box with externally provided instances of ``CookieJar``, e.g. - ``LWPCookieJar`` and ``FileCookieJar``. - - Unlike a regular CookieJar, this class is pickleable. - - .. warning:: dictionary operations that are normally O(1) may be O(n). - """ - - def get(self, name, default=None, domain=None, path=None): - """Dict-like get() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - - .. warning:: operation is O(n), not O(1). - """ - try: - return self._find_no_duplicates(name, domain, path) - except KeyError: - return default - - def set(self, name, value, **kwargs): - """Dict-like set() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - """ - # support client code that unsets cookies by assignment of a None value: - if value is None: - remove_cookie_by_name(self, name, domain=kwargs.get('domain'), path=kwargs.get('path')) - return - - if isinstance(value, Morsel): - c = morsel_to_cookie(value) - else: - c = create_cookie(name, value, **kwargs) - self.set_cookie(c) - return c - - def iterkeys(self): - """Dict-like iterkeys() that returns an iterator of names of cookies - from the jar. - - .. seealso:: itervalues() and iteritems(). - """ - for cookie in iter(self): - yield cookie.name - - def keys(self): - """Dict-like keys() that returns a list of names of cookies from the - jar. - - .. seealso:: values() and items(). - """ - return list(self.iterkeys()) - - def itervalues(self): - """Dict-like itervalues() that returns an iterator of values of cookies - from the jar. - - .. seealso:: iterkeys() and iteritems(). - """ - for cookie in iter(self): - yield cookie.value - - def values(self): - """Dict-like values() that returns a list of values of cookies from the - jar. - - .. seealso:: keys() and items(). - """ - return list(self.itervalues()) - - def iteritems(self): - """Dict-like iteritems() that returns an iterator of name-value tuples - from the jar. - - .. seealso:: iterkeys() and itervalues(). - """ - for cookie in iter(self): - yield cookie.name, cookie.value - - def items(self): - """Dict-like items() that returns a list of name-value tuples from the - jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a - vanilla python dict of key value pairs. - - .. seealso:: keys() and values(). - """ - return list(self.iteritems()) - - def list_domains(self): - """Utility method to list all the domains in the jar.""" - domains = [] - for cookie in iter(self): - if cookie.domain not in domains: - domains.append(cookie.domain) - return domains - - def list_paths(self): - """Utility method to list all the paths in the jar.""" - paths = [] - for cookie in iter(self): - if cookie.path not in paths: - paths.append(cookie.path) - return paths - - def multiple_domains(self): - """Returns True if there are multiple domains in the jar. - Returns False otherwise. - - :rtype: bool - """ - domains = [] - for cookie in iter(self): - if cookie.domain is not None and cookie.domain in domains: - return True - domains.append(cookie.domain) - return False # there is only one domain in jar - - def get_dict(self, domain=None, path=None): - """Takes as an argument an optional domain and path and returns a plain - old Python dict of name-value pairs of cookies that meet the - requirements. - - :rtype: dict - """ - dictionary = {} - for cookie in iter(self): - if ( - (domain is None or cookie.domain == domain) and - (path is None or cookie.path == path) - ): - dictionary[cookie.name] = cookie.value - return dictionary - - def __contains__(self, name): - try: - return super(RequestsCookieJar, self).__contains__(name) - except CookieConflictError: - return True - - def __getitem__(self, name): - """Dict-like __getitem__() for compatibility with client code. Throws - exception if there are more than one cookie with name. In that case, - use the more explicit get() method instead. - - .. warning:: operation is O(n), not O(1). - """ - return self._find_no_duplicates(name) - - def __setitem__(self, name, value): - """Dict-like __setitem__ for compatibility with client code. Throws - exception if there is already a cookie of that name in the jar. In that - case, use the more explicit set() method instead. - """ - self.set(name, value) - - def __delitem__(self, name): - """Deletes a cookie given a name. Wraps ``cookielib.CookieJar``'s - ``remove_cookie_by_name()``. - """ - remove_cookie_by_name(self, name) - - def set_cookie(self, cookie, *args, **kwargs): - if hasattr(cookie.value, 'startswith') and cookie.value.startswith('"') and cookie.value.endswith('"'): - cookie.value = cookie.value.replace('\\"', '') - return super(RequestsCookieJar, self).set_cookie(cookie, *args, **kwargs) - - def update(self, other): - """Updates this jar with cookies from another CookieJar or dict-like""" - if isinstance(other, cookielib.CookieJar): - for cookie in other: - self.set_cookie(copy.copy(cookie)) - else: - super(RequestsCookieJar, self).update(other) - - def _find(self, name, domain=None, path=None): - """Requests uses this method internally to get cookie values. - - If there are conflicting cookies, _find arbitrarily chooses one. - See _find_no_duplicates if you want an exception thrown if there are - conflicting cookies. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :return: cookie.value - """ - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - return cookie.value - - raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) - - def _find_no_duplicates(self, name, domain=None, path=None): - """Both ``__get_item__`` and ``get`` call this function: it's never - used elsewhere in Requests. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :raises KeyError: if cookie is not found - :raises CookieConflictError: if there are multiple cookies - that match name and optionally domain and path - :return: cookie.value - """ - toReturn = None - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - if toReturn is not None: # if there are multiple cookies that meet passed in criteria - raise CookieConflictError('There are multiple cookies with name, %r' % (name)) - toReturn = cookie.value # we will eventually return this as long as no cookie conflict - - if toReturn: - return toReturn - raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) - - def __getstate__(self): - """Unlike a normal CookieJar, this class is pickleable.""" - state = self.__dict__.copy() - # remove the unpickleable RLock object - state.pop('_cookies_lock') - return state - - def __setstate__(self, state): - """Unlike a normal CookieJar, this class is pickleable.""" - self.__dict__.update(state) - if '_cookies_lock' not in self.__dict__: - self._cookies_lock = threading.RLock() - - def copy(self): - """Return a copy of this RequestsCookieJar.""" - new_cj = RequestsCookieJar() - new_cj.update(self) - return new_cj - - -def _copy_cookie_jar(jar): - if jar is None: - return None - - if hasattr(jar, 'copy'): - # We're dealing with an instance of RequestsCookieJar - return jar.copy() - # We're dealing with a generic CookieJar instance - new_jar = copy.copy(jar) - new_jar.clear() - for cookie in jar: - new_jar.set_cookie(copy.copy(cookie)) - return new_jar - - -def create_cookie(name, value, **kwargs): - """Make a cookie from underspecified parameters. - - By default, the pair of `name` and `value` will be set for the domain '' - and sent on every request (this is sometimes called a "supercookie"). - """ - result = dict( - version=0, - name=name, - value=value, - port=None, - domain='', - path='/', - secure=False, - expires=None, - discard=True, - comment=None, - comment_url=None, - rest={'HttpOnly': None}, - rfc2109=False,) - - badargs = set(kwargs) - set(result) - if badargs: - err = 'create_cookie() got unexpected keyword arguments: %s' - raise TypeError(err % list(badargs)) - - result.update(kwargs) - result['port_specified'] = bool(result['port']) - result['domain_specified'] = bool(result['domain']) - result['domain_initial_dot'] = result['domain'].startswith('.') - result['path_specified'] = bool(result['path']) - - return cookielib.Cookie(**result) - - -def morsel_to_cookie(morsel): - """Convert a Morsel object into a Cookie containing the one k/v pair.""" - - expires = None - if morsel['max-age']: - try: - expires = int(time.time() + int(morsel['max-age'])) - except ValueError: - raise TypeError('max-age: %s must be integer' % morsel['max-age']) - elif morsel['expires']: - time_template = '%a, %d-%b-%Y %H:%M:%S GMT' - expires = calendar.timegm( - time.strptime(morsel['expires'], time_template) - ) - return create_cookie( - comment=morsel['comment'], - comment_url=bool(morsel['comment']), - discard=False, - domain=morsel['domain'], - expires=expires, - name=morsel.key, - path=morsel['path'], - port=None, - rest={'HttpOnly': morsel['httponly']}, - rfc2109=False, - secure=bool(morsel['secure']), - value=morsel.value, - version=morsel['version'] or 0, - ) - - -def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): - """Returns a CookieJar from a key/value dictionary. - - :param cookie_dict: Dict of key/values to insert into CookieJar. - :param cookiejar: (optional) A cookiejar to add the cookies to. - :param overwrite: (optional) If False, will not replace cookies - already in the jar with new ones. - """ - if cookiejar is None: - cookiejar = RequestsCookieJar() - - if cookie_dict is not None: - names_from_jar = [cookie.name for cookie in cookiejar] - for name in cookie_dict: - if overwrite or (name not in names_from_jar): - cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) - - return cookiejar - - -def merge_cookies(cookiejar, cookies): - """Add cookies to cookiejar and returns a merged CookieJar. - - :param cookiejar: CookieJar object to add the cookies to. - :param cookies: Dictionary or CookieJar object to be added. - """ - if not isinstance(cookiejar, cookielib.CookieJar): - raise ValueError('You can only merge into CookieJar') - - if isinstance(cookies, dict): - cookiejar = cookiejar_from_dict( - cookies, cookiejar=cookiejar, overwrite=False) - elif isinstance(cookies, cookielib.CookieJar): - try: - cookiejar.update(cookies) - except AttributeError: - for cookie_in_jar in cookies: - cookiejar.set_cookie(cookie_in_jar) - - return cookiejar diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/exceptions.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/exceptions.py deleted file mode 100644 index 3e5d0b2..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/exceptions.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.exceptions -~~~~~~~~~~~~~~~~~~~ - -This module contains the set of Requests' exceptions. -""" -from pip._vendor.urllib3.exceptions import HTTPError as BaseHTTPError - - -class RequestException(IOError): - """There was an ambiguous exception that occurred while handling your - request. - """ - - def __init__(self, *args, **kwargs): - """Initialize RequestException with `request` and `response` objects.""" - response = kwargs.pop('response', None) - self.response = response - self.request = kwargs.pop('request', None) - if (response is not None and not self.request and - hasattr(response, 'request')): - self.request = self.response.request - super(RequestException, self).__init__(*args, **kwargs) - - -class HTTPError(RequestException): - """An HTTP error occurred.""" - - -class ConnectionError(RequestException): - """A Connection error occurred.""" - - -class ProxyError(ConnectionError): - """A proxy error occurred.""" - - -class SSLError(ConnectionError): - """An SSL error occurred.""" - - -class Timeout(RequestException): - """The request timed out. - - Catching this error will catch both - :exc:`~requests.exceptions.ConnectTimeout` and - :exc:`~requests.exceptions.ReadTimeout` errors. - """ - - -class ConnectTimeout(ConnectionError, Timeout): - """The request timed out while trying to connect to the remote server. - - Requests that produced this error are safe to retry. - """ - - -class ReadTimeout(Timeout): - """The server did not send any data in the allotted amount of time.""" - - -class URLRequired(RequestException): - """A valid URL is required to make a request.""" - - -class TooManyRedirects(RequestException): - """Too many redirects.""" - - -class MissingSchema(RequestException, ValueError): - """The URL schema (e.g. http or https) is missing.""" - - -class InvalidSchema(RequestException, ValueError): - """See defaults.py for valid schemas.""" - - -class InvalidURL(RequestException, ValueError): - """The URL provided was somehow invalid.""" - - -class InvalidHeader(RequestException, ValueError): - """The header value provided was somehow invalid.""" - - -class ChunkedEncodingError(RequestException): - """The server declared chunked encoding but sent an invalid chunk.""" - - -class ContentDecodingError(RequestException, BaseHTTPError): - """Failed to decode response content""" - - -class StreamConsumedError(RequestException, TypeError): - """The content for this response was already consumed""" - - -class RetryError(RequestException): - """Custom retries logic failed""" - - -class UnrewindableBodyError(RequestException): - """Requests encountered an error when trying to rewind a body""" - -# Warnings - - -class RequestsWarning(Warning): - """Base warning for Requests.""" - pass - - -class FileModeWarning(RequestsWarning, DeprecationWarning): - """A file was opened in text mode, but Requests determined its binary length.""" - pass - - -class RequestsDependencyWarning(RequestsWarning): - """An imported dependency doesn't match the expected version range.""" - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/help.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/help.py deleted file mode 100644 index 7c4b193..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/help.py +++ /dev/null @@ -1,120 +0,0 @@ -"""Module containing bug report helper(s).""" -from __future__ import print_function - -import json -import platform -import sys -import ssl - -from pip._vendor import idna -from pip._vendor import urllib3 -from pip._vendor import chardet - -from . import __version__ as requests_version - -try: - from .packages.urllib3.contrib import pyopenssl -except ImportError: - pyopenssl = None - OpenSSL = None - cryptography = None -else: - import OpenSSL - import cryptography - - -def _implementation(): - """Return a dict with the Python implementation and version. - - Provide both the name and the version of the Python implementation - currently running. For example, on CPython 2.7.5 it will return - {'name': 'CPython', 'version': '2.7.5'}. - - This function works best on CPython and PyPy: in particular, it probably - doesn't work for Jython or IronPython. Future investigation should be done - to work out the correct shape of the code for those platforms. - """ - implementation = platform.python_implementation() - - if implementation == 'CPython': - implementation_version = platform.python_version() - elif implementation == 'PyPy': - implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major, - sys.pypy_version_info.minor, - sys.pypy_version_info.micro) - if sys.pypy_version_info.releaselevel != 'final': - implementation_version = ''.join([ - implementation_version, sys.pypy_version_info.releaselevel - ]) - elif implementation == 'Jython': - implementation_version = platform.python_version() # Complete Guess - elif implementation == 'IronPython': - implementation_version = platform.python_version() # Complete Guess - else: - implementation_version = 'Unknown' - - return {'name': implementation, 'version': implementation_version} - - -def info(): - """Generate information for a bug report.""" - try: - platform_info = { - 'system': platform.system(), - 'release': platform.release(), - } - except IOError: - platform_info = { - 'system': 'Unknown', - 'release': 'Unknown', - } - - implementation_info = _implementation() - urllib3_info = {'version': urllib3.__version__} - chardet_info = {'version': chardet.__version__} - - pyopenssl_info = { - 'version': None, - 'openssl_version': '', - } - if OpenSSL: - pyopenssl_info = { - 'version': OpenSSL.__version__, - 'openssl_version': '%x' % OpenSSL.SSL.OPENSSL_VERSION_NUMBER, - } - cryptography_info = { - 'version': getattr(cryptography, '__version__', ''), - } - idna_info = { - 'version': getattr(idna, '__version__', ''), - } - - # OPENSSL_VERSION_NUMBER doesn't exist in the Python 2.6 ssl module. - system_ssl = getattr(ssl, 'OPENSSL_VERSION_NUMBER', None) - system_ssl_info = { - 'version': '%x' % system_ssl if system_ssl is not None else '' - } - - return { - 'platform': platform_info, - 'implementation': implementation_info, - 'system_ssl': system_ssl_info, - 'using_pyopenssl': pyopenssl is not None, - 'pyOpenSSL': pyopenssl_info, - 'urllib3': urllib3_info, - 'chardet': chardet_info, - 'cryptography': cryptography_info, - 'idna': idna_info, - 'requests': { - 'version': requests_version, - }, - } - - -def main(): - """Pretty-print the bug information as JSON.""" - print(json.dumps(info(), sort_keys=True, indent=2)) - - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/hooks.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/hooks.py deleted file mode 100644 index 32b32de..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/hooks.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.hooks -~~~~~~~~~~~~~~ - -This module provides the capabilities for the Requests hooks system. - -Available hooks: - -``response``: - The response generated from a Request. -""" -HOOKS = ['response'] - - -def default_hooks(): - return dict((event, []) for event in HOOKS) - -# TODO: response is the only one - - -def dispatch_hook(key, hooks, hook_data, **kwargs): - """Dispatches a hook dictionary on a given piece of data.""" - hooks = hooks or dict() - hooks = hooks.get(key) - if hooks: - if hasattr(hooks, '__call__'): - hooks = [hooks] - for hook in hooks: - _hook_data = hook(hook_data, **kwargs) - if _hook_data is not None: - hook_data = _hook_data - return hook_data diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/models.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/models.py deleted file mode 100644 index 4ab4fec..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/models.py +++ /dev/null @@ -1,948 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.models -~~~~~~~~~~~~~~~ - -This module contains the primary objects that power Requests. -""" - -import collections -import datetime -import sys - -# Import encoding now, to avoid implicit import later. -# Implicit import within threads may cause LookupError when standard library is in a ZIP, -# such as in Embedded Python. See https://github.com/requests/requests/issues/3578. -import encodings.idna - -from pip._vendor.urllib3.fields import RequestField -from pip._vendor.urllib3.filepost import encode_multipart_formdata -from pip._vendor.urllib3.util import parse_url -from pip._vendor.urllib3.exceptions import ( - DecodeError, ReadTimeoutError, ProtocolError, LocationParseError) - -from io import UnsupportedOperation -from .hooks import default_hooks -from .structures import CaseInsensitiveDict - -from .auth import HTTPBasicAuth -from .cookies import cookiejar_from_dict, get_cookie_header, _copy_cookie_jar -from .exceptions import ( - HTTPError, MissingSchema, InvalidURL, ChunkedEncodingError, - ContentDecodingError, ConnectionError, StreamConsumedError) -from ._internal_utils import to_native_string, unicode_is_ascii -from .utils import ( - guess_filename, get_auth_from_url, requote_uri, - stream_decode_response_unicode, to_key_val_list, parse_header_links, - iter_slices, guess_json_utf, super_len, check_header_validity) -from .compat import ( - cookielib, urlunparse, urlsplit, urlencode, str, bytes, - is_py2, chardet, builtin_str, basestring) -from .compat import json as complexjson -from .status_codes import codes - -#: The set of HTTP status codes that indicate an automatically -#: processable redirect. -REDIRECT_STATI = ( - codes.moved, # 301 - codes.found, # 302 - codes.other, # 303 - codes.temporary_redirect, # 307 - codes.permanent_redirect, # 308 -) - -DEFAULT_REDIRECT_LIMIT = 30 -CONTENT_CHUNK_SIZE = 10 * 1024 -ITER_CHUNK_SIZE = 512 - - -class RequestEncodingMixin(object): - @property - def path_url(self): - """Build the path URL to use.""" - - url = [] - - p = urlsplit(self.url) - - path = p.path - if not path: - path = '/' - - url.append(path) - - query = p.query - if query: - url.append('?') - url.append(query) - - return ''.join(url) - - @staticmethod - def _encode_params(data): - """Encode parameters in a piece of data. - - Will successfully encode parameters when passed as a dict or a list of - 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary - if parameters are supplied as a dict. - """ - - if isinstance(data, (str, bytes)): - return data - elif hasattr(data, 'read'): - return data - elif hasattr(data, '__iter__'): - result = [] - for k, vs in to_key_val_list(data): - if isinstance(vs, basestring) or not hasattr(vs, '__iter__'): - vs = [vs] - for v in vs: - if v is not None: - result.append( - (k.encode('utf-8') if isinstance(k, str) else k, - v.encode('utf-8') if isinstance(v, str) else v)) - return urlencode(result, doseq=True) - else: - return data - - @staticmethod - def _encode_files(files, data): - """Build the body for a multipart/form-data request. - - Will successfully encode files when passed as a dict or a list of - tuples. Order is retained if data is a list of tuples but arbitrary - if parameters are supplied as a dict. - The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) - or 4-tuples (filename, fileobj, contentype, custom_headers). - """ - if (not files): - raise ValueError("Files must be provided.") - elif isinstance(data, basestring): - raise ValueError("Data must not be a string.") - - new_fields = [] - fields = to_key_val_list(data or {}) - files = to_key_val_list(files or {}) - - for field, val in fields: - if isinstance(val, basestring) or not hasattr(val, '__iter__'): - val = [val] - for v in val: - if v is not None: - # Don't call str() on bytestrings: in Py3 it all goes wrong. - if not isinstance(v, bytes): - v = str(v) - - new_fields.append( - (field.decode('utf-8') if isinstance(field, bytes) else field, - v.encode('utf-8') if isinstance(v, str) else v)) - - for (k, v) in files: - # support for explicit filename - ft = None - fh = None - if isinstance(v, (tuple, list)): - if len(v) == 2: - fn, fp = v - elif len(v) == 3: - fn, fp, ft = v - else: - fn, fp, ft, fh = v - else: - fn = guess_filename(v) or k - fp = v - - if isinstance(fp, (str, bytes, bytearray)): - fdata = fp - else: - fdata = fp.read() - - rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) - rf.make_multipart(content_type=ft) - new_fields.append(rf) - - body, content_type = encode_multipart_formdata(new_fields) - - return body, content_type - - -class RequestHooksMixin(object): - def register_hook(self, event, hook): - """Properly register a hook.""" - - if event not in self.hooks: - raise ValueError('Unsupported event specified, with event name "%s"' % (event)) - - if isinstance(hook, collections.Callable): - self.hooks[event].append(hook) - elif hasattr(hook, '__iter__'): - self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable)) - - def deregister_hook(self, event, hook): - """Deregister a previously registered hook. - Returns True if the hook existed, False if not. - """ - - try: - self.hooks[event].remove(hook) - return True - except ValueError: - return False - - -class Request(RequestHooksMixin): - """A user-created :class:`Request <Request>` object. - - Used to prepare a :class:`PreparedRequest <PreparedRequest>`, which is sent to the server. - - :param method: HTTP method to use. - :param url: URL to send. - :param headers: dictionary of headers to send. - :param files: dictionary of {filename: fileobject} files to multipart upload. - :param data: the body to attach to the request. If a dictionary is provided, form-encoding will take place. - :param json: json for the body to attach to the request (if files or data is not specified). - :param params: dictionary of URL parameters to append to the URL. - :param auth: Auth handler or (user, pass) tuple. - :param cookies: dictionary or CookieJar of cookies to attach to this request. - :param hooks: dictionary of callback hooks, for internal usage. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') - >>> req.prepare() - <PreparedRequest [GET]> - """ - - def __init__(self, - method=None, url=None, headers=None, files=None, data=None, - params=None, auth=None, cookies=None, hooks=None, json=None): - - # Default empty dicts for dict params. - data = [] if data is None else data - files = [] if files is None else files - headers = {} if headers is None else headers - params = {} if params is None else params - hooks = {} if hooks is None else hooks - - self.hooks = default_hooks() - for (k, v) in list(hooks.items()): - self.register_hook(event=k, hook=v) - - self.method = method - self.url = url - self.headers = headers - self.files = files - self.data = data - self.json = json - self.params = params - self.auth = auth - self.cookies = cookies - - def __repr__(self): - return '<Request [%s]>' % (self.method) - - def prepare(self): - """Constructs a :class:`PreparedRequest <PreparedRequest>` for transmission and returns it.""" - p = PreparedRequest() - p.prepare( - method=self.method, - url=self.url, - headers=self.headers, - files=self.files, - data=self.data, - json=self.json, - params=self.params, - auth=self.auth, - cookies=self.cookies, - hooks=self.hooks, - ) - return p - - -class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): - """The fully mutable :class:`PreparedRequest <PreparedRequest>` object, - containing the exact bytes that will be sent to the server. - - Generated from either a :class:`Request <Request>` object or manually. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') - >>> r = req.prepare() - <PreparedRequest [GET]> - - >>> s = requests.Session() - >>> s.send(r) - <Response [200]> - """ - - def __init__(self): - #: HTTP verb to send to the server. - self.method = None - #: HTTP URL to send the request to. - self.url = None - #: dictionary of HTTP headers. - self.headers = None - # The `CookieJar` used to create the Cookie header will be stored here - # after prepare_cookies is called - self._cookies = None - #: request body to send to the server. - self.body = None - #: dictionary of callback hooks, for internal usage. - self.hooks = default_hooks() - #: integer denoting starting position of a readable file-like body. - self._body_position = None - - def prepare(self, - method=None, url=None, headers=None, files=None, data=None, - params=None, auth=None, cookies=None, hooks=None, json=None): - """Prepares the entire request with the given parameters.""" - - self.prepare_method(method) - self.prepare_url(url, params) - self.prepare_headers(headers) - self.prepare_cookies(cookies) - self.prepare_body(data, files, json) - self.prepare_auth(auth, url) - - # Note that prepare_auth must be last to enable authentication schemes - # such as OAuth to work on a fully prepared request. - - # This MUST go after prepare_auth. Authenticators could add a hook - self.prepare_hooks(hooks) - - def __repr__(self): - return '<PreparedRequest [%s]>' % (self.method) - - def copy(self): - p = PreparedRequest() - p.method = self.method - p.url = self.url - p.headers = self.headers.copy() if self.headers is not None else None - p._cookies = _copy_cookie_jar(self._cookies) - p.body = self.body - p.hooks = self.hooks - p._body_position = self._body_position - return p - - def prepare_method(self, method): - """Prepares the given HTTP method.""" - self.method = method - if self.method is not None: - self.method = to_native_string(self.method.upper()) - - @staticmethod - def _get_idna_encoded_host(host): - from pip._vendor import idna - - try: - host = idna.encode(host, uts46=True).decode('utf-8') - except idna.IDNAError: - raise UnicodeError - return host - - def prepare_url(self, url, params): - """Prepares the given HTTP URL.""" - #: Accept objects that have string representations. - #: We're unable to blindly call unicode/str functions - #: as this will include the bytestring indicator (b'') - #: on python 3.x. - #: https://github.com/requests/requests/pull/2238 - if isinstance(url, bytes): - url = url.decode('utf8') - else: - url = unicode(url) if is_py2 else str(url) - - # Remove leading whitespaces from url - url = url.lstrip() - - # Don't do any URL preparation for non-HTTP schemes like `mailto`, - # `data` etc to work around exceptions from `url_parse`, which - # handles RFC 3986 only. - if ':' in url and not url.lower().startswith('http'): - self.url = url - return - - # Support for unicode domain names and paths. - try: - scheme, auth, host, port, path, query, fragment = parse_url(url) - except LocationParseError as e: - raise InvalidURL(*e.args) - - if not scheme: - error = ("Invalid URL {0!r}: No schema supplied. Perhaps you meant http://{0}?") - error = error.format(to_native_string(url, 'utf8')) - - raise MissingSchema(error) - - if not host: - raise InvalidURL("Invalid URL %r: No host supplied" % url) - - # In general, we want to try IDNA encoding the hostname if the string contains - # non-ASCII characters. This allows users to automatically get the correct IDNA - # behaviour. For strings containing only ASCII characters, we need to also verify - # it doesn't start with a wildcard (*), before allowing the unencoded hostname. - if not unicode_is_ascii(host): - try: - host = self._get_idna_encoded_host(host) - except UnicodeError: - raise InvalidURL('URL has an invalid label.') - elif host.startswith(u'*'): - raise InvalidURL('URL has an invalid label.') - - # Carefully reconstruct the network location - netloc = auth or '' - if netloc: - netloc += '@' - netloc += host - if port: - netloc += ':' + str(port) - - # Bare domains aren't valid URLs. - if not path: - path = '/' - - if is_py2: - if isinstance(scheme, str): - scheme = scheme.encode('utf-8') - if isinstance(netloc, str): - netloc = netloc.encode('utf-8') - if isinstance(path, str): - path = path.encode('utf-8') - if isinstance(query, str): - query = query.encode('utf-8') - if isinstance(fragment, str): - fragment = fragment.encode('utf-8') - - if isinstance(params, (str, bytes)): - params = to_native_string(params) - - enc_params = self._encode_params(params) - if enc_params: - if query: - query = '%s&%s' % (query, enc_params) - else: - query = enc_params - - url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) - self.url = url - - def prepare_headers(self, headers): - """Prepares the given HTTP headers.""" - - self.headers = CaseInsensitiveDict() - if headers: - for header in headers.items(): - # Raise exception on invalid header value. - check_header_validity(header) - name, value = header - self.headers[to_native_string(name)] = value - - def prepare_body(self, data, files, json=None): - """Prepares the given HTTP body data.""" - - # Check if file, fo, generator, iterator. - # If not, run through normal process. - - # Nottin' on you. - body = None - content_type = None - - if not data and json is not None: - # urllib3 requires a bytes-like body. Python 2's json.dumps - # provides this natively, but Python 3 gives a Unicode string. - content_type = 'application/json' - body = complexjson.dumps(json) - if not isinstance(body, bytes): - body = body.encode('utf-8') - - is_stream = all([ - hasattr(data, '__iter__'), - not isinstance(data, (basestring, list, tuple, collections.Mapping)) - ]) - - try: - length = super_len(data) - except (TypeError, AttributeError, UnsupportedOperation): - length = None - - if is_stream: - body = data - - if getattr(body, 'tell', None) is not None: - # Record the current file position before reading. - # This will allow us to rewind a file in the event - # of a redirect. - try: - self._body_position = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body - self._body_position = object() - - if files: - raise NotImplementedError('Streamed bodies and files are mutually exclusive.') - - if length: - self.headers['Content-Length'] = builtin_str(length) - else: - self.headers['Transfer-Encoding'] = 'chunked' - else: - # Multi-part file uploads. - if files: - (body, content_type) = self._encode_files(files, data) - else: - if data: - body = self._encode_params(data) - if isinstance(data, basestring) or hasattr(data, 'read'): - content_type = None - else: - content_type = 'application/x-www-form-urlencoded' - - self.prepare_content_length(body) - - # Add content-type if it wasn't explicitly provided. - if content_type and ('content-type' not in self.headers): - self.headers['Content-Type'] = content_type - - self.body = body - - def prepare_content_length(self, body): - """Prepare Content-Length header based on request method and body""" - if body is not None: - length = super_len(body) - if length: - # If length exists, set it. Otherwise, we fallback - # to Transfer-Encoding: chunked. - self.headers['Content-Length'] = builtin_str(length) - elif self.method not in ('GET', 'HEAD') and self.headers.get('Content-Length') is None: - # Set Content-Length to 0 for methods that can have a body - # but don't provide one. (i.e. not GET or HEAD) - self.headers['Content-Length'] = '0' - - def prepare_auth(self, auth, url=''): - """Prepares the given HTTP auth data.""" - - # If no Auth is explicitly provided, extract it from the URL first. - if auth is None: - url_auth = get_auth_from_url(self.url) - auth = url_auth if any(url_auth) else None - - if auth: - if isinstance(auth, tuple) and len(auth) == 2: - # special-case basic HTTP auth - auth = HTTPBasicAuth(*auth) - - # Allow auth to make its changes. - r = auth(self) - - # Update self to reflect the auth changes. - self.__dict__.update(r.__dict__) - - # Recompute Content-Length - self.prepare_content_length(self.body) - - def prepare_cookies(self, cookies): - """Prepares the given HTTP cookie data. - - This function eventually generates a ``Cookie`` header from the - given cookies using cookielib. Due to cookielib's design, the header - will not be regenerated if it already exists, meaning this function - can only be called once for the life of the - :class:`PreparedRequest <PreparedRequest>` object. Any subsequent calls - to ``prepare_cookies`` will have no actual effect, unless the "Cookie" - header is removed beforehand. - """ - if isinstance(cookies, cookielib.CookieJar): - self._cookies = cookies - else: - self._cookies = cookiejar_from_dict(cookies) - - cookie_header = get_cookie_header(self._cookies, self) - if cookie_header is not None: - self.headers['Cookie'] = cookie_header - - def prepare_hooks(self, hooks): - """Prepares the given hooks.""" - # hooks can be passed as None to the prepare method and to this - # method. To prevent iterating over None, simply use an empty list - # if hooks is False-y - hooks = hooks or [] - for event in hooks: - self.register_hook(event, hooks[event]) - - -class Response(object): - """The :class:`Response <Response>` object, which contains a - server's response to an HTTP request. - """ - - __attrs__ = [ - '_content', 'status_code', 'headers', 'url', 'history', - 'encoding', 'reason', 'cookies', 'elapsed', 'request' - ] - - def __init__(self): - self._content = False - self._content_consumed = False - self._next = None - - #: Integer Code of responded HTTP Status, e.g. 404 or 200. - self.status_code = None - - #: Case-insensitive Dictionary of Response Headers. - #: For example, ``headers['content-encoding']`` will return the - #: value of a ``'Content-Encoding'`` response header. - self.headers = CaseInsensitiveDict() - - #: File-like object representation of response (for advanced usage). - #: Use of ``raw`` requires that ``stream=True`` be set on the request. - # This requirement does not apply for use internally to Requests. - self.raw = None - - #: Final URL location of Response. - self.url = None - - #: Encoding to decode with when accessing r.text. - self.encoding = None - - #: A list of :class:`Response <Response>` objects from - #: the history of the Request. Any redirect responses will end - #: up here. The list is sorted from the oldest to the most recent request. - self.history = [] - - #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". - self.reason = None - - #: A CookieJar of Cookies the server sent back. - self.cookies = cookiejar_from_dict({}) - - #: The amount of time elapsed between sending the request - #: and the arrival of the response (as a timedelta). - #: This property specifically measures the time taken between sending - #: the first byte of the request and finishing parsing the headers. It - #: is therefore unaffected by consuming the response content or the - #: value of the ``stream`` keyword argument. - self.elapsed = datetime.timedelta(0) - - #: The :class:`PreparedRequest <PreparedRequest>` object to which this - #: is a response. - self.request = None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def __getstate__(self): - # Consume everything; accessing the content attribute makes - # sure the content has been fully read. - if not self._content_consumed: - self.content - - return dict( - (attr, getattr(self, attr, None)) - for attr in self.__attrs__ - ) - - def __setstate__(self, state): - for name, value in state.items(): - setattr(self, name, value) - - # pickled objects do not have .raw - setattr(self, '_content_consumed', True) - setattr(self, 'raw', None) - - def __repr__(self): - return '<Response [%s]>' % (self.status_code) - - def __bool__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __nonzero__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __iter__(self): - """Allows you to use a response as an iterator.""" - return self.iter_content(128) - - @property - def ok(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - try: - self.raise_for_status() - except HTTPError: - return False - return True - - @property - def is_redirect(self): - """True if this Response is a well-formed HTTP redirect that could have - been processed automatically (by :meth:`Session.resolve_redirects`). - """ - return ('location' in self.headers and self.status_code in REDIRECT_STATI) - - @property - def is_permanent_redirect(self): - """True if this Response one of the permanent versions of redirect.""" - return ('location' in self.headers and self.status_code in (codes.moved_permanently, codes.permanent_redirect)) - - @property - def next(self): - """Returns a PreparedRequest for the next request in a redirect chain, if there is one.""" - return self._next - - @property - def apparent_encoding(self): - """The apparent encoding, provided by the chardet library.""" - return chardet.detect(self.content)['encoding'] - - def iter_content(self, chunk_size=1, decode_unicode=False): - """Iterates over the response data. When stream=True is set on the - request, this avoids reading the content at once into memory for - large responses. The chunk size is the number of bytes it should - read into memory. This is not necessarily the length of each item - returned as decoding can take place. - - chunk_size must be of type int or None. A value of None will - function differently depending on the value of `stream`. - stream=True will read data as it arrives in whatever size the - chunks are received. If stream=False, data is returned as - a single chunk. - - If decode_unicode is True, content will be decoded using the best - available encoding based on the response. - """ - - def generate(): - # Special case for urllib3. - if hasattr(self.raw, 'stream'): - try: - for chunk in self.raw.stream(chunk_size, decode_content=True): - yield chunk - except ProtocolError as e: - raise ChunkedEncodingError(e) - except DecodeError as e: - raise ContentDecodingError(e) - except ReadTimeoutError as e: - raise ConnectionError(e) - else: - # Standard file-like object. - while True: - chunk = self.raw.read(chunk_size) - if not chunk: - break - yield chunk - - self._content_consumed = True - - if self._content_consumed and isinstance(self._content, bool): - raise StreamConsumedError() - elif chunk_size is not None and not isinstance(chunk_size, int): - raise TypeError("chunk_size must be an int, it is instead a %s." % type(chunk_size)) - # simulate reading small chunks of the content - reused_chunks = iter_slices(self._content, chunk_size) - - stream_chunks = generate() - - chunks = reused_chunks if self._content_consumed else stream_chunks - - if decode_unicode: - chunks = stream_decode_response_unicode(chunks, self) - - return chunks - - def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None, delimiter=None): - """Iterates over the response data, one line at a time. When - stream=True is set on the request, this avoids reading the - content at once into memory for large responses. - - .. note:: This method is not reentrant safe. - """ - - pending = None - - for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode): - - if pending is not None: - chunk = pending + chunk - - if delimiter: - lines = chunk.split(delimiter) - else: - lines = chunk.splitlines() - - if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: - pending = lines.pop() - else: - pending = None - - for line in lines: - yield line - - if pending is not None: - yield pending - - @property - def content(self): - """Content of the response, in bytes.""" - - if self._content is False: - # Read the contents. - if self._content_consumed: - raise RuntimeError( - 'The content for this response was already consumed') - - if self.status_code == 0 or self.raw is None: - self._content = None - else: - self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes() - - self._content_consumed = True - # don't need to release the connection; that's been handled by urllib3 - # since we exhausted the data. - return self._content - - @property - def text(self): - """Content of the response, in unicode. - - If Response.encoding is None, encoding will be guessed using - ``chardet``. - - The encoding of the response content is determined based solely on HTTP - headers, following RFC 2616 to the letter. If you can take advantage of - non-HTTP knowledge to make a better guess at the encoding, you should - set ``r.encoding`` appropriately before accessing this property. - """ - - # Try charset from content-type - content = None - encoding = self.encoding - - if not self.content: - return str('') - - # Fallback to auto-detected encoding. - if self.encoding is None: - encoding = self.apparent_encoding - - # Decode unicode from given encoding. - try: - content = str(self.content, encoding, errors='replace') - except (LookupError, TypeError): - # A LookupError is raised if the encoding was not found which could - # indicate a misspelling or similar mistake. - # - # A TypeError can be raised if encoding is None - # - # So we try blindly encoding. - content = str(self.content, errors='replace') - - return content - - def json(self, **kwargs): - r"""Returns the json-encoded content of a response, if any. - - :param \*\*kwargs: Optional arguments that ``json.loads`` takes. - :raises ValueError: If the response body does not contain valid json. - """ - - if not self.encoding and self.content and len(self.content) > 3: - # No encoding set. JSON RFC 4627 section 3 states we should expect - # UTF-8, -16 or -32. Detect which one to use; If the detection or - # decoding fails, fall back to `self.text` (using chardet to make - # a best guess). - encoding = guess_json_utf(self.content) - if encoding is not None: - try: - return complexjson.loads( - self.content.decode(encoding), **kwargs - ) - except UnicodeDecodeError: - # Wrong UTF codec detected; usually because it's not UTF-8 - # but some other 8-bit codec. This is an RFC violation, - # and the server didn't bother to tell us what codec *was* - # used. - pass - return complexjson.loads(self.text, **kwargs) - - @property - def links(self): - """Returns the parsed header links of the response, if any.""" - - header = self.headers.get('link') - - # l = MultiDict() - l = {} - - if header: - links = parse_header_links(header) - - for link in links: - key = link.get('rel') or link.get('url') - l[key] = link - - return l - - def raise_for_status(self): - """Raises stored :class:`HTTPError`, if one occurred.""" - - http_error_msg = '' - if isinstance(self.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. (See PR #3538) - try: - reason = self.reason.decode('utf-8') - except UnicodeDecodeError: - reason = self.reason.decode('iso-8859-1') - else: - reason = self.reason - - if 400 <= self.status_code < 500: - http_error_msg = u'%s Client Error: %s for url: %s' % (self.status_code, reason, self.url) - - elif 500 <= self.status_code < 600: - http_error_msg = u'%s Server Error: %s for url: %s' % (self.status_code, reason, self.url) - - if http_error_msg: - raise HTTPError(http_error_msg, response=self) - - def close(self): - """Releases the connection back to the pool. Once this method has been - called the underlying ``raw`` object must not be accessed again. - - *Note: Should not normally need to be called explicitly.* - """ - if not self._content_consumed: - self.raw.close() - - release_conn = getattr(self.raw, 'release_conn', None) - if release_conn is not None: - release_conn() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/packages.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/packages.py deleted file mode 100644 index 9582fa7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/packages.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -# This code exists for backwards compatibility reasons. -# I don't like it either. Just look the other way. :) - -for package in ('urllib3', 'idna', 'chardet'): - vendored_package = "pip._vendor." + package - locals()[package] = __import__(vendored_package) - # This traversal is apparently necessary such that the identities are - # preserved (requests.packages.urllib3.* is urllib3.*) - for mod in list(sys.modules): - if mod == vendored_package or mod.startswith(vendored_package + '.'): - unprefixed_mod = mod[len("pip._vendor."):] - sys.modules['pip._vendor.requests.packages.' + unprefixed_mod] = sys.modules[mod] - -# Kinda cool, though, right? diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/sessions.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/sessions.py deleted file mode 100644 index 6570e73..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/sessions.py +++ /dev/null @@ -1,737 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.session -~~~~~~~~~~~~~~~~ - -This module provides a Session object to manage and persist settings across -requests (cookies, auth, proxies). -""" -import os -import platform -import time -from collections import Mapping -from datetime import timedelta - -from .auth import _basic_auth_str -from .compat import cookielib, is_py3, OrderedDict, urljoin, urlparse -from .cookies import ( - cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_cookies) -from .models import Request, PreparedRequest, DEFAULT_REDIRECT_LIMIT -from .hooks import default_hooks, dispatch_hook -from ._internal_utils import to_native_string -from .utils import to_key_val_list, default_headers -from .exceptions import ( - TooManyRedirects, InvalidSchema, ChunkedEncodingError, ContentDecodingError) - -from .structures import CaseInsensitiveDict -from .adapters import HTTPAdapter - -from .utils import ( - requote_uri, get_environ_proxies, get_netrc_auth, should_bypass_proxies, - get_auth_from_url, rewind_body -) - -from .status_codes import codes - -# formerly defined here, reexposed here for backward compatibility -from .models import REDIRECT_STATI - -# Preferred clock, based on which one is more accurate on a given system. -if platform.system() == 'Windows': - try: # Python 3.3+ - preferred_clock = time.perf_counter - except AttributeError: # Earlier than Python 3. - preferred_clock = time.clock -else: - preferred_clock = time.time - - -def merge_setting(request_setting, session_setting, dict_class=OrderedDict): - """Determines appropriate setting for a given request, taking into account - the explicit setting on that request, and the setting in the session. If a - setting is a dictionary, they will be merged together using `dict_class` - """ - - if session_setting is None: - return request_setting - - if request_setting is None: - return session_setting - - # Bypass if not a dictionary (e.g. verify) - if not ( - isinstance(session_setting, Mapping) and - isinstance(request_setting, Mapping) - ): - return request_setting - - merged_setting = dict_class(to_key_val_list(session_setting)) - merged_setting.update(to_key_val_list(request_setting)) - - # Remove keys that are set to None. Extract keys first to avoid altering - # the dictionary during iteration. - none_keys = [k for (k, v) in merged_setting.items() if v is None] - for key in none_keys: - del merged_setting[key] - - return merged_setting - - -def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): - """Properly merges both requests and session hooks. - - This is necessary because when request_hooks == {'response': []}, the - merge breaks Session hooks entirely. - """ - if session_hooks is None or session_hooks.get('response') == []: - return request_hooks - - if request_hooks is None or request_hooks.get('response') == []: - return session_hooks - - return merge_setting(request_hooks, session_hooks, dict_class) - - -class SessionRedirectMixin(object): - - def get_redirect_target(self, resp): - """Receives a Response. Returns a redirect URI or ``None``""" - # Due to the nature of how requests processes redirects this method will - # be called at least once upon the original response and at least twice - # on each subsequent redirect response (if any). - # If a custom mixin is used to handle this logic, it may be advantageous - # to cache the redirect location onto the response object as a private - # attribute. - if resp.is_redirect: - location = resp.headers['location'] - # Currently the underlying http module on py3 decode headers - # in latin1, but empirical evidence suggests that latin1 is very - # rarely used with non-ASCII characters in HTTP headers. - # It is more likely to get UTF8 header rather than latin1. - # This causes incorrect handling of UTF8 encoded location headers. - # To solve this, we re-encode the location in latin1. - if is_py3: - location = location.encode('latin1') - return to_native_string(location, 'utf8') - return None - - def resolve_redirects(self, resp, req, stream=False, timeout=None, - verify=True, cert=None, proxies=None, yield_requests=False, **adapter_kwargs): - """Receives a Response. Returns a generator of Responses or Requests.""" - - hist = [] # keep track of history - - url = self.get_redirect_target(resp) - while url: - prepared_request = req.copy() - - # Update history and keep track of redirects. - # resp.history must ignore the original request in this loop - hist.append(resp) - resp.history = hist[1:] - - try: - resp.content # Consume socket so it can be released - except (ChunkedEncodingError, ContentDecodingError, RuntimeError): - resp.raw.read(decode_content=False) - - if len(resp.history) >= self.max_redirects: - raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, response=resp) - - # Release the connection back into the pool. - resp.close() - - # Handle redirection without scheme (see: RFC 1808 Section 4) - if url.startswith('//'): - parsed_rurl = urlparse(resp.url) - url = '%s:%s' % (to_native_string(parsed_rurl.scheme), url) - - # The scheme should be lower case... - parsed = urlparse(url) - url = parsed.geturl() - - # Facilitate relative 'location' headers, as allowed by RFC 7231. - # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') - # Compliant with RFC3986, we percent encode the url. - if not parsed.netloc: - url = urljoin(resp.url, requote_uri(url)) - else: - url = requote_uri(url) - - prepared_request.url = to_native_string(url) - - self.rebuild_method(prepared_request, resp) - - # https://github.com/requests/requests/issues/1084 - if resp.status_code not in (codes.temporary_redirect, codes.permanent_redirect): - # https://github.com/requests/requests/issues/3490 - purged_headers = ('Content-Length', 'Content-Type', 'Transfer-Encoding') - for header in purged_headers: - prepared_request.headers.pop(header, None) - prepared_request.body = None - - headers = prepared_request.headers - try: - del headers['Cookie'] - except KeyError: - pass - - # Extract any cookies sent on the response to the cookiejar - # in the new request. Because we've mutated our copied prepared - # request, use the old one that we haven't yet touched. - extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) - merge_cookies(prepared_request._cookies, self.cookies) - prepared_request.prepare_cookies(prepared_request._cookies) - - # Rebuild auth and proxy information. - proxies = self.rebuild_proxies(prepared_request, proxies) - self.rebuild_auth(prepared_request, resp) - - # A failed tell() sets `_body_position` to `object()`. This non-None - # value ensures `rewindable` will be True, allowing us to raise an - # UnrewindableBodyError, instead of hanging the connection. - rewindable = ( - prepared_request._body_position is not None and - ('Content-Length' in headers or 'Transfer-Encoding' in headers) - ) - - # Attempt to rewind consumed file-like object. - if rewindable: - rewind_body(prepared_request) - - # Override the original request. - req = prepared_request - - if yield_requests: - yield req - else: - - resp = self.send( - req, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - allow_redirects=False, - **adapter_kwargs - ) - - extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) - - # extract redirect url, if any, for the next loop - url = self.get_redirect_target(resp) - yield resp - - def rebuild_auth(self, prepared_request, response): - """When being redirected we may want to strip authentication from the - request to avoid leaking credentials. This method intelligently removes - and reapplies authentication where possible to avoid credential loss. - """ - headers = prepared_request.headers - url = prepared_request.url - - if 'Authorization' in headers: - # If we get redirected to a new host, we should strip out any - # authentication headers. - original_parsed = urlparse(response.request.url) - redirect_parsed = urlparse(url) - - if (original_parsed.hostname != redirect_parsed.hostname): - del headers['Authorization'] - - # .netrc might have more auth for us on our new host. - new_auth = get_netrc_auth(url) if self.trust_env else None - if new_auth is not None: - prepared_request.prepare_auth(new_auth) - - return - - def rebuild_proxies(self, prepared_request, proxies): - """This method re-evaluates the proxy configuration by considering the - environment variables. If we are redirected to a URL covered by - NO_PROXY, we strip the proxy configuration. Otherwise, we set missing - proxy keys for this URL (in case they were stripped by a previous - redirect). - - This method also replaces the Proxy-Authorization header where - necessary. - - :rtype: dict - """ - proxies = proxies if proxies is not None else {} - headers = prepared_request.headers - url = prepared_request.url - scheme = urlparse(url).scheme - new_proxies = proxies.copy() - no_proxy = proxies.get('no_proxy') - - bypass_proxy = should_bypass_proxies(url, no_proxy=no_proxy) - if self.trust_env and not bypass_proxy: - environ_proxies = get_environ_proxies(url, no_proxy=no_proxy) - - proxy = environ_proxies.get(scheme, environ_proxies.get('all')) - - if proxy: - new_proxies.setdefault(scheme, proxy) - - if 'Proxy-Authorization' in headers: - del headers['Proxy-Authorization'] - - try: - username, password = get_auth_from_url(new_proxies[scheme]) - except KeyError: - username, password = None, None - - if username and password: - headers['Proxy-Authorization'] = _basic_auth_str(username, password) - - return new_proxies - - def rebuild_method(self, prepared_request, response): - """When being redirected we may want to change the method of the request - based on certain specs or browser behavior. - """ - method = prepared_request.method - - # http://tools.ietf.org/html/rfc7231#section-6.4.4 - if response.status_code == codes.see_other and method != 'HEAD': - method = 'GET' - - # Do what the browsers do, despite standards... - # First, turn 302s into GETs. - if response.status_code == codes.found and method != 'HEAD': - method = 'GET' - - # Second, if a POST is responded to with a 301, turn it into a GET. - # This bizarre behaviour is explained in Issue 1704. - if response.status_code == codes.moved and method == 'POST': - method = 'GET' - - prepared_request.method = method - - -class Session(SessionRedirectMixin): - """A Requests session. - - Provides cookie persistence, connection-pooling, and configuration. - - Basic Usage:: - - >>> import requests - >>> s = requests.Session() - >>> s.get('http://httpbin.org/get') - <Response [200]> - - Or as a context manager:: - - >>> with requests.Session() as s: - >>> s.get('http://httpbin.org/get') - <Response [200]> - """ - - __attrs__ = [ - 'headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify', - 'cert', 'prefetch', 'adapters', 'stream', 'trust_env', - 'max_redirects', - ] - - def __init__(self): - - #: A case-insensitive dictionary of headers to be sent on each - #: :class:`Request <Request>` sent from this - #: :class:`Session <Session>`. - self.headers = default_headers() - - #: Default Authentication tuple or object to attach to - #: :class:`Request <Request>`. - self.auth = None - - #: Dictionary mapping protocol or protocol and host to the URL of the proxy - #: (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to - #: be used on each :class:`Request <Request>`. - self.proxies = {} - - #: Event-handling hooks. - self.hooks = default_hooks() - - #: Dictionary of querystring data to attach to each - #: :class:`Request <Request>`. The dictionary values may be lists for - #: representing multivalued query parameters. - self.params = {} - - #: Stream response content default. - self.stream = False - - #: SSL Verification default. - self.verify = True - - #: SSL client certificate default, if String, path to ssl client - #: cert file (.pem). If Tuple, ('cert', 'key') pair. - self.cert = None - - #: Maximum number of redirects allowed. If the request exceeds this - #: limit, a :class:`TooManyRedirects` exception is raised. - #: This defaults to requests.models.DEFAULT_REDIRECT_LIMIT, which is - #: 30. - self.max_redirects = DEFAULT_REDIRECT_LIMIT - - #: Trust environment settings for proxy configuration, default - #: authentication and similar. - self.trust_env = True - - #: A CookieJar containing all currently outstanding cookies set on this - #: session. By default it is a - #: :class:`RequestsCookieJar <requests.cookies.RequestsCookieJar>`, but - #: may be any other ``cookielib.CookieJar`` compatible object. - self.cookies = cookiejar_from_dict({}) - - # Default connection adapters. - self.adapters = OrderedDict() - self.mount('https://', HTTPAdapter()) - self.mount('http://', HTTPAdapter()) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def prepare_request(self, request): - """Constructs a :class:`PreparedRequest <PreparedRequest>` for - transmission and returns it. The :class:`PreparedRequest` has settings - merged from the :class:`Request <Request>` instance and those of the - :class:`Session`. - - :param request: :class:`Request` instance to prepare with this - session's settings. - :rtype: requests.PreparedRequest - """ - cookies = request.cookies or {} - - # Bootstrap CookieJar. - if not isinstance(cookies, cookielib.CookieJar): - cookies = cookiejar_from_dict(cookies) - - # Merge with session cookies - merged_cookies = merge_cookies( - merge_cookies(RequestsCookieJar(), self.cookies), cookies) - - # Set environment's basic authentication if not explicitly set. - auth = request.auth - if self.trust_env and not auth and not self.auth: - auth = get_netrc_auth(request.url) - - p = PreparedRequest() - p.prepare( - method=request.method.upper(), - url=request.url, - files=request.files, - data=request.data, - json=request.json, - headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict), - params=merge_setting(request.params, self.params), - auth=merge_setting(auth, self.auth), - cookies=merged_cookies, - hooks=merge_hooks(request.hooks, self.hooks), - ) - return p - - def request(self, method, url, - params=None, data=None, headers=None, cookies=None, files=None, - auth=None, timeout=None, allow_redirects=True, proxies=None, - hooks=None, stream=None, verify=None, cert=None, json=None): - """Constructs a :class:`Request <Request>`, prepares it and sends it. - Returns :class:`Response <Response>` object. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query - string for the :class:`Request`. - :param data: (optional) Dictionary, bytes, or file-like object to send - in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the - :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the - :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the - :class:`Request`. - :param files: (optional) Dictionary of ``'filename': file-like-objects`` - for multipart encoding upload. - :param auth: (optional) Auth tuple or callable to enable - Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Set to True by default. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol or protocol and - hostname to the URL of the proxy. - :param stream: (optional) whether to immediately download the response - content. Defaults to ``False``. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param cert: (optional) if String, path to ssl client cert file (.pem). - If Tuple, ('cert', 'key') pair. - :rtype: requests.Response - """ - # Create the Request. - req = Request( - method=method.upper(), - url=url, - headers=headers, - files=files, - data=data or {}, - json=json, - params=params or {}, - auth=auth, - cookies=cookies, - hooks=hooks, - ) - prep = self.prepare_request(req) - - proxies = proxies or {} - - settings = self.merge_environment_settings( - prep.url, proxies, stream, verify, cert - ) - - # Send the request. - send_kwargs = { - 'timeout': timeout, - 'allow_redirects': allow_redirects, - } - send_kwargs.update(settings) - resp = self.send(prep, **send_kwargs) - - return resp - - def get(self, url, **kwargs): - r"""Sends a GET request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return self.request('GET', url, **kwargs) - - def options(self, url, **kwargs): - r"""Sends a OPTIONS request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return self.request('OPTIONS', url, **kwargs) - - def head(self, url, **kwargs): - r"""Sends a HEAD request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', False) - return self.request('HEAD', url, **kwargs) - - def post(self, url, data=None, json=None, **kwargs): - r"""Sends a POST request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('POST', url, data=data, json=json, **kwargs) - - def put(self, url, data=None, **kwargs): - r"""Sends a PUT request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('PUT', url, data=data, **kwargs) - - def patch(self, url, data=None, **kwargs): - r"""Sends a PATCH request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('PATCH', url, data=data, **kwargs) - - def delete(self, url, **kwargs): - r"""Sends a DELETE request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('DELETE', url, **kwargs) - - def send(self, request, **kwargs): - """Send a given PreparedRequest. - - :rtype: requests.Response - """ - # Set defaults that the hooks can utilize to ensure they always have - # the correct parameters to reproduce the previous request. - kwargs.setdefault('stream', self.stream) - kwargs.setdefault('verify', self.verify) - kwargs.setdefault('cert', self.cert) - kwargs.setdefault('proxies', self.proxies) - - # It's possible that users might accidentally send a Request object. - # Guard against that specific failure case. - if isinstance(request, Request): - raise ValueError('You can only send PreparedRequests.') - - # Set up variables needed for resolve_redirects and dispatching of hooks - allow_redirects = kwargs.pop('allow_redirects', True) - stream = kwargs.get('stream') - hooks = request.hooks - - # Get the appropriate adapter to use - adapter = self.get_adapter(url=request.url) - - # Start time (approximately) of the request - start = preferred_clock() - - # Send the request - r = adapter.send(request, **kwargs) - - # Total elapsed time of the request (approximately) - elapsed = preferred_clock() - start - r.elapsed = timedelta(seconds=elapsed) - - # Response manipulation hooks - r = dispatch_hook('response', hooks, r, **kwargs) - - # Persist cookies - if r.history: - - # If the hooks create history then we want those cookies too - for resp in r.history: - extract_cookies_to_jar(self.cookies, resp.request, resp.raw) - - extract_cookies_to_jar(self.cookies, request, r.raw) - - # Redirect resolving generator. - gen = self.resolve_redirects(r, request, **kwargs) - - # Resolve redirects if allowed. - history = [resp for resp in gen] if allow_redirects else [] - - # Shuffle things around if there's history. - if history: - # Insert the first (original) request at the start - history.insert(0, r) - # Get the last request made - r = history.pop() - r.history = history - - # If redirects aren't being followed, store the response on the Request for Response.next(). - if not allow_redirects: - try: - r._next = next(self.resolve_redirects(r, request, yield_requests=True, **kwargs)) - except StopIteration: - pass - - if not stream: - r.content - - return r - - def merge_environment_settings(self, url, proxies, stream, verify, cert): - """ - Check the environment and merge it with some settings. - - :rtype: dict - """ - # Gather clues from the surrounding environment. - if self.trust_env: - # Set environment's proxies. - no_proxy = proxies.get('no_proxy') if proxies is not None else None - env_proxies = get_environ_proxies(url, no_proxy=no_proxy) - for (k, v) in env_proxies.items(): - proxies.setdefault(k, v) - - # Look for requests environment configuration and be compatible - # with cURL. - if verify is True or verify is None: - verify = (os.environ.get('REQUESTS_CA_BUNDLE') or - os.environ.get('CURL_CA_BUNDLE')) - - # Merge all the kwargs. - proxies = merge_setting(proxies, self.proxies) - stream = merge_setting(stream, self.stream) - verify = merge_setting(verify, self.verify) - cert = merge_setting(cert, self.cert) - - return {'verify': verify, 'proxies': proxies, 'stream': stream, - 'cert': cert} - - def get_adapter(self, url): - """ - Returns the appropriate connection adapter for the given URL. - - :rtype: requests.adapters.BaseAdapter - """ - for (prefix, adapter) in self.adapters.items(): - - if url.lower().startswith(prefix): - return adapter - - # Nothing matches :-/ - raise InvalidSchema("No connection adapters were found for '%s'" % url) - - def close(self): - """Closes all adapters and as such the session""" - for v in self.adapters.values(): - v.close() - - def mount(self, prefix, adapter): - """Registers a connection adapter to a prefix. - - Adapters are sorted in descending order by prefix length. - """ - self.adapters[prefix] = adapter - keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] - - for key in keys_to_move: - self.adapters[key] = self.adapters.pop(key) - - def __getstate__(self): - state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__) - return state - - def __setstate__(self, state): - for attr, value in state.items(): - setattr(self, attr, value) - - -def session(): - """ - Returns a :class:`Session` for context-management. - - :rtype: Session - """ - - return Session() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/status_codes.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/status_codes.py deleted file mode 100644 index dee8919..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/status_codes.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- - -from .structures import LookupDict - -_codes = { - - # Informational. - 100: ('continue',), - 101: ('switching_protocols',), - 102: ('processing',), - 103: ('checkpoint',), - 122: ('uri_too_long', 'request_uri_too_long'), - 200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'), - 201: ('created',), - 202: ('accepted',), - 203: ('non_authoritative_info', 'non_authoritative_information'), - 204: ('no_content',), - 205: ('reset_content', 'reset'), - 206: ('partial_content', 'partial'), - 207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'), - 208: ('already_reported',), - 226: ('im_used',), - - # Redirection. - 300: ('multiple_choices',), - 301: ('moved_permanently', 'moved', '\\o-'), - 302: ('found',), - 303: ('see_other', 'other'), - 304: ('not_modified',), - 305: ('use_proxy',), - 306: ('switch_proxy',), - 307: ('temporary_redirect', 'temporary_moved', 'temporary'), - 308: ('permanent_redirect', - 'resume_incomplete', 'resume',), # These 2 to be removed in 3.0 - - # Client Error. - 400: ('bad_request', 'bad'), - 401: ('unauthorized',), - 402: ('payment_required', 'payment'), - 403: ('forbidden',), - 404: ('not_found', '-o-'), - 405: ('method_not_allowed', 'not_allowed'), - 406: ('not_acceptable',), - 407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'), - 408: ('request_timeout', 'timeout'), - 409: ('conflict',), - 410: ('gone',), - 411: ('length_required',), - 412: ('precondition_failed', 'precondition'), - 413: ('request_entity_too_large',), - 414: ('request_uri_too_large',), - 415: ('unsupported_media_type', 'unsupported_media', 'media_type'), - 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'), - 417: ('expectation_failed',), - 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'), - 421: ('misdirected_request',), - 422: ('unprocessable_entity', 'unprocessable'), - 423: ('locked',), - 424: ('failed_dependency', 'dependency'), - 425: ('unordered_collection', 'unordered'), - 426: ('upgrade_required', 'upgrade'), - 428: ('precondition_required', 'precondition'), - 429: ('too_many_requests', 'too_many'), - 431: ('header_fields_too_large', 'fields_too_large'), - 444: ('no_response', 'none'), - 449: ('retry_with', 'retry'), - 450: ('blocked_by_windows_parental_controls', 'parental_controls'), - 451: ('unavailable_for_legal_reasons', 'legal_reasons'), - 499: ('client_closed_request',), - - # Server Error. - 500: ('internal_server_error', 'server_error', '/o\\', '✗'), - 501: ('not_implemented',), - 502: ('bad_gateway',), - 503: ('service_unavailable', 'unavailable'), - 504: ('gateway_timeout',), - 505: ('http_version_not_supported', 'http_version'), - 506: ('variant_also_negotiates',), - 507: ('insufficient_storage',), - 509: ('bandwidth_limit_exceeded', 'bandwidth'), - 510: ('not_extended',), - 511: ('network_authentication_required', 'network_auth', 'network_authentication'), -} - -codes = LookupDict(name='status_codes') - -for code, titles in _codes.items(): - for title in titles: - setattr(codes, title, code) - if not title.startswith(('\\', '/')): - setattr(codes, title.upper(), code) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/structures.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/structures.py deleted file mode 100644 index 05d2b3f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/structures.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.structures -~~~~~~~~~~~~~~~~~~~ - -Data structures that power Requests. -""" - -import collections - -from .compat import OrderedDict - - -class CaseInsensitiveDict(collections.MutableMapping): - """A case-insensitive ``dict``-like object. - - Implements all methods and operations of - ``collections.MutableMapping`` as well as dict's ``copy``. Also - provides ``lower_items``. - - All keys are expected to be strings. The structure remembers the - case of the last key to be set, and ``iter(instance)``, - ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` - will contain case-sensitive keys. However, querying and contains - testing is case insensitive:: - - cid = CaseInsensitiveDict() - cid['Accept'] = 'application/json' - cid['aCCEPT'] == 'application/json' # True - list(cid) == ['Accept'] # True - - For example, ``headers['content-encoding']`` will return the - value of a ``'Content-Encoding'`` response header, regardless - of how the header name was originally stored. - - If the constructor, ``.update``, or equality comparison - operations are given keys that have equal ``.lower()``s, the - behavior is undefined. - """ - - def __init__(self, data=None, **kwargs): - self._store = OrderedDict() - if data is None: - data = {} - self.update(data, **kwargs) - - def __setitem__(self, key, value): - # Use the lowercased key for lookups, but store the actual - # key alongside the value. - self._store[key.lower()] = (key, value) - - def __getitem__(self, key): - return self._store[key.lower()][1] - - def __delitem__(self, key): - del self._store[key.lower()] - - def __iter__(self): - return (casedkey for casedkey, mappedvalue in self._store.values()) - - def __len__(self): - return len(self._store) - - def lower_items(self): - """Like iteritems(), but with all lowercase keys.""" - return ( - (lowerkey, keyval[1]) - for (lowerkey, keyval) - in self._store.items() - ) - - def __eq__(self, other): - if isinstance(other, collections.Mapping): - other = CaseInsensitiveDict(other) - else: - return NotImplemented - # Compare insensitively - return dict(self.lower_items()) == dict(other.lower_items()) - - # Copy is required - def copy(self): - return CaseInsensitiveDict(self._store.values()) - - def __repr__(self): - return str(dict(self.items())) - - -class LookupDict(dict): - """Dictionary lookup object.""" - - def __init__(self, name=None): - self.name = name - super(LookupDict, self).__init__() - - def __repr__(self): - return '<lookup \'%s\'>' % (self.name) - - def __getitem__(self, key): - # We allow fall-through here, so values default to None - - return self.__dict__.get(key, None) - - def get(self, key, default=None): - return self.__dict__.get(key, default) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/utils.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/utils.py deleted file mode 100644 index 5c47de9..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/requests/utils.py +++ /dev/null @@ -1,904 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.utils -~~~~~~~~~~~~~~ - -This module provides utility functions that are used within Requests -that are also useful for external consumption. -""" - -import cgi -import codecs -import collections -import contextlib -import io -import os -import platform -import re -import socket -import struct -import warnings - -from .__version__ import __version__ -from . import certs -# to_native_string is unused here, but imported here for backwards compatibility -from ._internal_utils import to_native_string -from .compat import parse_http_list as _parse_list_header -from .compat import ( - quote, urlparse, bytes, str, OrderedDict, unquote, getproxies, - proxy_bypass, urlunparse, basestring, integer_types, is_py3, - proxy_bypass_environment, getproxies_environment) -from .cookies import cookiejar_from_dict -from .structures import CaseInsensitiveDict -from .exceptions import ( - InvalidURL, InvalidHeader, FileModeWarning, UnrewindableBodyError) - -NETRC_FILES = ('.netrc', '_netrc') - -DEFAULT_CA_BUNDLE_PATH = certs.where() - - -if platform.system() == 'Windows': - # provide a proxy_bypass version on Windows without DNS lookups - - def proxy_bypass_registry(host): - if is_py3: - import winreg - else: - import _winreg as winreg - try: - internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER, - r'Software\Microsoft\Windows\CurrentVersion\Internet Settings') - proxyEnable = winreg.QueryValueEx(internetSettings, - 'ProxyEnable')[0] - proxyOverride = winreg.QueryValueEx(internetSettings, - 'ProxyOverride')[0] - except OSError: - return False - if not proxyEnable or not proxyOverride: - return False - - # make a check value list from the registry entry: replace the - # '<local>' string by the localhost entry and the corresponding - # canonical entry. - proxyOverride = proxyOverride.split(';') - # now check if we match one of the registry values. - for test in proxyOverride: - if test == '<local>': - if '.' not in host: - return True - test = test.replace(".", r"\.") # mask dots - test = test.replace("*", r".*") # change glob sequence - test = test.replace("?", r".") # change glob char - if re.match(test, host, re.I): - return True - return False - - def proxy_bypass(host): # noqa - """Return True, if the host should be bypassed. - - Checks proxy settings gathered from the environment, if specified, - or the registry. - """ - if getproxies_environment(): - return proxy_bypass_environment(host) - else: - return proxy_bypass_registry(host) - - -def dict_to_sequence(d): - """Returns an internal sequence dictionary update.""" - - if hasattr(d, 'items'): - d = d.items() - - return d - - -def super_len(o): - total_length = None - current_position = 0 - - if hasattr(o, '__len__'): - total_length = len(o) - - elif hasattr(o, 'len'): - total_length = o.len - - elif hasattr(o, 'fileno'): - try: - fileno = o.fileno() - except io.UnsupportedOperation: - pass - else: - total_length = os.fstat(fileno).st_size - - # Having used fstat to determine the file length, we need to - # confirm that this file was opened up in binary mode. - if 'b' not in o.mode: - warnings.warn(( - "Requests has determined the content-length for this " - "request using the binary size of the file: however, the " - "file has been opened in text mode (i.e. without the 'b' " - "flag in the mode). This may lead to an incorrect " - "content-length. In Requests 3.0, support will be removed " - "for files in text mode."), - FileModeWarning - ) - - if hasattr(o, 'tell'): - try: - current_position = o.tell() - except (OSError, IOError): - # This can happen in some weird situations, such as when the file - # is actually a special file descriptor like stdin. In this - # instance, we don't know what the length is, so set it to zero and - # let requests chunk it instead. - if total_length is not None: - current_position = total_length - else: - if hasattr(o, 'seek') and total_length is None: - # StringIO and BytesIO have seek but no useable fileno - try: - # seek to end of file - o.seek(0, 2) - total_length = o.tell() - - # seek back to current position to support - # partially read file-like objects - o.seek(current_position or 0) - except (OSError, IOError): - total_length = 0 - - if total_length is None: - total_length = 0 - - return max(0, total_length - current_position) - - -def get_netrc_auth(url, raise_errors=False): - """Returns the Requests tuple auth for a given url from netrc.""" - - try: - from netrc import netrc, NetrcParseError - - netrc_path = None - - for f in NETRC_FILES: - try: - loc = os.path.expanduser('~/{0}'.format(f)) - except KeyError: - # os.path.expanduser can fail when $HOME is undefined and - # getpwuid fails. See http://bugs.python.org/issue20164 & - # https://github.com/requests/requests/issues/1846 - return - - if os.path.exists(loc): - netrc_path = loc - break - - # Abort early if there isn't one. - if netrc_path is None: - return - - ri = urlparse(url) - - # Strip port numbers from netloc. This weird `if...encode`` dance is - # used for Python 3.2, which doesn't support unicode literals. - splitstr = b':' - if isinstance(url, str): - splitstr = splitstr.decode('ascii') - host = ri.netloc.split(splitstr)[0] - - try: - _netrc = netrc(netrc_path).authenticators(host) - if _netrc: - # Return with login / password - login_i = (0 if _netrc[0] else 1) - return (_netrc[login_i], _netrc[2]) - except (NetrcParseError, IOError): - # If there was a parsing error or a permissions issue reading the file, - # we'll just skip netrc auth unless explicitly asked to raise errors. - if raise_errors: - raise - - # AppEngine hackiness. - except (ImportError, AttributeError): - pass - - -def guess_filename(obj): - """Tries to guess the filename of the given object.""" - name = getattr(obj, 'name', None) - if (name and isinstance(name, basestring) and name[0] != '<' and - name[-1] != '>'): - return os.path.basename(name) - - -def from_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. Unless it can not be represented as such, return an - OrderedDict, e.g., - - :: - - >>> from_key_val_list([('key', 'val')]) - OrderedDict([('key', 'val')]) - >>> from_key_val_list('string') - ValueError: need more than 1 value to unpack - >>> from_key_val_list({'key': 'val'}) - OrderedDict([('key', 'val')]) - - :rtype: OrderedDict - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError('cannot encode objects that are not 2-tuples') - - return OrderedDict(value) - - -def to_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. If it can be, return a list of tuples, e.g., - - :: - - >>> to_key_val_list([('key', 'val')]) - [('key', 'val')] - >>> to_key_val_list({'key': 'val'}) - [('key', 'val')] - >>> to_key_val_list('string') - ValueError: cannot encode objects that are not 2-tuples. - - :rtype: list - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError('cannot encode objects that are not 2-tuples') - - if isinstance(value, collections.Mapping): - value = value.items() - - return list(value) - - -# From mitsuhiko/werkzeug (used with permission). -def parse_list_header(value): - """Parse lists as described by RFC 2068 Section 2. - - In particular, parse comma-separated lists where the elements of - the list may include quoted-strings. A quoted-string could - contain a comma. A non-quoted string could have quotes in the - middle. Quotes are removed automatically after parsing. - - It basically works like :func:`parse_set_header` just that items - may appear multiple times and case sensitivity is preserved. - - The return value is a standard :class:`list`: - - >>> parse_list_header('token, "quoted value"') - ['token', 'quoted value'] - - To create a header from the :class:`list` again, use the - :func:`dump_header` function. - - :param value: a string with a list header. - :return: :class:`list` - :rtype: list - """ - result = [] - for item in _parse_list_header(value): - if item[:1] == item[-1:] == '"': - item = unquote_header_value(item[1:-1]) - result.append(item) - return result - - -# From mitsuhiko/werkzeug (used with permission). -def parse_dict_header(value): - """Parse lists of key, value pairs as described by RFC 2068 Section 2 and - convert them into a python dict: - - >>> d = parse_dict_header('foo="is a fish", bar="as well"') - >>> type(d) is dict - True - >>> sorted(d.items()) - [('bar', 'as well'), ('foo', 'is a fish')] - - If there is no value for a key it will be `None`: - - >>> parse_dict_header('key_without_value') - {'key_without_value': None} - - To create a header from the :class:`dict` again, use the - :func:`dump_header` function. - - :param value: a string with a dict header. - :return: :class:`dict` - :rtype: dict - """ - result = {} - for item in _parse_list_header(value): - if '=' not in item: - result[item] = None - continue - name, value = item.split('=', 1) - if value[:1] == value[-1:] == '"': - value = unquote_header_value(value[1:-1]) - result[name] = value - return result - - -# From mitsuhiko/werkzeug (used with permission). -def unquote_header_value(value, is_filename=False): - r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). - This does not use the real unquoting but what browsers are actually - using for quoting. - - :param value: the header value to unquote. - :rtype: str - """ - if value and value[0] == value[-1] == '"': - # this is not the real unquoting, but fixing this so that the - # RFC is met will result in bugs with internet explorer and - # probably some other browsers as well. IE for example is - # uploading files with "C:\foo\bar.txt" as filename - value = value[1:-1] - - # if this is a filename and the starting characters look like - # a UNC path, then just return the value without quotes. Using the - # replace sequence below on a UNC path has the effect of turning - # the leading double slash into a single slash and then - # _fix_ie_filename() doesn't work correctly. See #458. - if not is_filename or value[:2] != '\\\\': - return value.replace('\\\\', '\\').replace('\\"', '"') - return value - - -def dict_from_cookiejar(cj): - """Returns a key/value dictionary from a CookieJar. - - :param cj: CookieJar object to extract cookies from. - :rtype: dict - """ - - cookie_dict = {} - - for cookie in cj: - cookie_dict[cookie.name] = cookie.value - - return cookie_dict - - -def add_dict_to_cookiejar(cj, cookie_dict): - """Returns a CookieJar from a key/value dictionary. - - :param cj: CookieJar to insert cookies into. - :param cookie_dict: Dict of key/values to insert into CookieJar. - :rtype: CookieJar - """ - - return cookiejar_from_dict(cookie_dict, cj) - - -def get_encodings_from_content(content): - """Returns encodings from given content string. - - :param content: bytestring to extract encodings from. - """ - warnings.warn(( - 'In requests 3.0, get_encodings_from_content will be removed. For ' - 'more information, please see the discussion on issue #2266. (This' - ' warning should only appear once.)'), - DeprecationWarning) - - charset_re = re.compile(r'<meta.*?charset=["\']*(.+?)["\'>]', flags=re.I) - pragma_re = re.compile(r'<meta.*?content=["\']*;?charset=(.+?)["\'>]', flags=re.I) - xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') - - return (charset_re.findall(content) + - pragma_re.findall(content) + - xml_re.findall(content)) - - -def get_encoding_from_headers(headers): - """Returns encodings from given HTTP Header Dict. - - :param headers: dictionary to extract encoding from. - :rtype: str - """ - - content_type = headers.get('content-type') - - if not content_type: - return None - - content_type, params = cgi.parse_header(content_type) - - if 'charset' in params: - return params['charset'].strip("'\"") - - if 'text' in content_type: - return 'ISO-8859-1' - - -def stream_decode_response_unicode(iterator, r): - """Stream decodes a iterator.""" - - if r.encoding is None: - for item in iterator: - yield item - return - - decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace') - for chunk in iterator: - rv = decoder.decode(chunk) - if rv: - yield rv - rv = decoder.decode(b'', final=True) - if rv: - yield rv - - -def iter_slices(string, slice_length): - """Iterate over slices of a string.""" - pos = 0 - if slice_length is None or slice_length <= 0: - slice_length = len(string) - while pos < len(string): - yield string[pos:pos + slice_length] - pos += slice_length - - -def get_unicode_from_response(r): - """Returns the requested content back in unicode. - - :param r: Response object to get unicode content from. - - Tried: - - 1. charset from content-type - 2. fall back and replace all unicode characters - - :rtype: str - """ - warnings.warn(( - 'In requests 3.0, get_unicode_from_response will be removed. For ' - 'more information, please see the discussion on issue #2266. (This' - ' warning should only appear once.)'), - DeprecationWarning) - - tried_encodings = [] - - # Try charset from content-type - encoding = get_encoding_from_headers(r.headers) - - if encoding: - try: - return str(r.content, encoding) - except UnicodeError: - tried_encodings.append(encoding) - - # Fall back: - try: - return str(r.content, encoding, errors='replace') - except TypeError: - return r.content - - -# The unreserved URI characters (RFC 3986) -UNRESERVED_SET = frozenset( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789-._~") - - -def unquote_unreserved(uri): - """Un-escape any percent-escape sequences in a URI that are unreserved - characters. This leaves all reserved, illegal and non-ASCII bytes encoded. - - :rtype: str - """ - parts = uri.split('%') - for i in range(1, len(parts)): - h = parts[i][0:2] - if len(h) == 2 and h.isalnum(): - try: - c = chr(int(h, 16)) - except ValueError: - raise InvalidURL("Invalid percent-escape sequence: '%s'" % h) - - if c in UNRESERVED_SET: - parts[i] = c + parts[i][2:] - else: - parts[i] = '%' + parts[i] - else: - parts[i] = '%' + parts[i] - return ''.join(parts) - - -def requote_uri(uri): - """Re-quote the given URI. - - This function passes the given URI through an unquote/quote cycle to - ensure that it is fully and consistently quoted. - - :rtype: str - """ - safe_with_percent = "!#$%&'()*+,/:;=?@[]~" - safe_without_percent = "!#$&'()*+,/:;=?@[]~" - try: - # Unquote only the unreserved characters - # Then quote only illegal characters (do not quote reserved, - # unreserved, or '%') - return quote(unquote_unreserved(uri), safe=safe_with_percent) - except InvalidURL: - # We couldn't unquote the given URI, so let's try quoting it, but - # there may be unquoted '%'s in the URI. We need to make sure they're - # properly quoted so they do not cause issues elsewhere. - return quote(uri, safe=safe_without_percent) - - -def address_in_network(ip, net): - """This function allows you to check if an IP belongs to a network subnet - - Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 - returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 - - :rtype: bool - """ - ipaddr = struct.unpack('=L', socket.inet_aton(ip))[0] - netaddr, bits = net.split('/') - netmask = struct.unpack('=L', socket.inet_aton(dotted_netmask(int(bits))))[0] - network = struct.unpack('=L', socket.inet_aton(netaddr))[0] & netmask - return (ipaddr & netmask) == (network & netmask) - - -def dotted_netmask(mask): - """Converts mask from /xx format to xxx.xxx.xxx.xxx - - Example: if mask is 24 function returns 255.255.255.0 - - :rtype: str - """ - bits = 0xffffffff ^ (1 << 32 - mask) - 1 - return socket.inet_ntoa(struct.pack('>I', bits)) - - -def is_ipv4_address(string_ip): - """ - :rtype: bool - """ - try: - socket.inet_aton(string_ip) - except socket.error: - return False - return True - - -def is_valid_cidr(string_network): - """ - Very simple check of the cidr format in no_proxy variable. - - :rtype: bool - """ - if string_network.count('/') == 1: - try: - mask = int(string_network.split('/')[1]) - except ValueError: - return False - - if mask < 1 or mask > 32: - return False - - try: - socket.inet_aton(string_network.split('/')[0]) - except socket.error: - return False - else: - return False - return True - - -@contextlib.contextmanager -def set_environ(env_name, value): - """Set the environment variable 'env_name' to 'value' - - Save previous value, yield, and then restore the previous value stored in - the environment variable 'env_name'. - - If 'value' is None, do nothing""" - value_changed = value is not None - if value_changed: - old_value = os.environ.get(env_name) - os.environ[env_name] = value - try: - yield - finally: - if value_changed: - if old_value is None: - del os.environ[env_name] - else: - os.environ[env_name] = old_value - - -def should_bypass_proxies(url, no_proxy): - """ - Returns whether we should bypass proxies or not. - - :rtype: bool - """ - get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper()) - - # First check whether no_proxy is defined. If it is, check that the URL - # we're getting isn't in the no_proxy list. - no_proxy_arg = no_proxy - if no_proxy is None: - no_proxy = get_proxy('no_proxy') - netloc = urlparse(url).netloc - - if no_proxy: - # We need to check whether we match here. We need to see if we match - # the end of the netloc, both with and without the port. - no_proxy = ( - host for host in no_proxy.replace(' ', '').split(',') if host - ) - - ip = netloc.split(':')[0] - if is_ipv4_address(ip): - for proxy_ip in no_proxy: - if is_valid_cidr(proxy_ip): - if address_in_network(ip, proxy_ip): - return True - elif ip == proxy_ip: - # If no_proxy ip was defined in plain IP notation instead of cidr notation & - # matches the IP of the index - return True - else: - for host in no_proxy: - if netloc.endswith(host) or netloc.split(':')[0].endswith(host): - # The URL does match something in no_proxy, so we don't want - # to apply the proxies on this URL. - return True - - # If the system proxy settings indicate that this URL should be bypassed, - # don't proxy. - # The proxy_bypass function is incredibly buggy on OS X in early versions - # of Python 2.6, so allow this call to fail. Only catch the specific - # exceptions we've seen, though: this call failing in other ways can reveal - # legitimate problems. - with set_environ('no_proxy', no_proxy_arg): - try: - bypass = proxy_bypass(netloc) - except (TypeError, socket.gaierror): - bypass = False - - if bypass: - return True - - return False - - -def get_environ_proxies(url, no_proxy=None): - """ - Return a dict of environment proxies. - - :rtype: dict - """ - if should_bypass_proxies(url, no_proxy=no_proxy): - return {} - else: - return getproxies() - - -def select_proxy(url, proxies): - """Select a proxy for the url, if applicable. - - :param url: The url being for the request - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs - """ - proxies = proxies or {} - urlparts = urlparse(url) - if urlparts.hostname is None: - return proxies.get(urlparts.scheme, proxies.get('all')) - - proxy_keys = [ - urlparts.scheme + '://' + urlparts.hostname, - urlparts.scheme, - 'all://' + urlparts.hostname, - 'all', - ] - proxy = None - for proxy_key in proxy_keys: - if proxy_key in proxies: - proxy = proxies[proxy_key] - break - - return proxy - - -def default_user_agent(name="python-requests"): - """ - Return a string representing the default user agent. - - :rtype: str - """ - return '%s/%s' % (name, __version__) - - -def default_headers(): - """ - :rtype: requests.structures.CaseInsensitiveDict - """ - return CaseInsensitiveDict({ - 'User-Agent': default_user_agent(), - 'Accept-Encoding': ', '.join(('gzip', 'deflate')), - 'Accept': '*/*', - 'Connection': 'keep-alive', - }) - - -def parse_header_links(value): - """Return a dict of parsed link headers proxies. - - i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg" - - :rtype: list - """ - - links = [] - - replace_chars = ' \'"' - - for val in re.split(', *<', value): - try: - url, params = val.split(';', 1) - except ValueError: - url, params = val, '' - - link = {'url': url.strip('<> \'"')} - - for param in params.split(';'): - try: - key, value = param.split('=') - except ValueError: - break - - link[key.strip(replace_chars)] = value.strip(replace_chars) - - links.append(link) - - return links - - -# Null bytes; no need to recreate these on each call to guess_json_utf -_null = '\x00'.encode('ascii') # encoding to ASCII for Python 3 -_null2 = _null * 2 -_null3 = _null * 3 - - -def guess_json_utf(data): - """ - :rtype: str - """ - # JSON always starts with two ASCII characters, so detection is as - # easy as counting the nulls and from their location and count - # determine the encoding. Also detect a BOM, if present. - sample = data[:4] - if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): - return 'utf-32' # BOM included - if sample[:3] == codecs.BOM_UTF8: - return 'utf-8-sig' # BOM included, MS style (discouraged) - if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): - return 'utf-16' # BOM included - nullcount = sample.count(_null) - if nullcount == 0: - return 'utf-8' - if nullcount == 2: - if sample[::2] == _null2: # 1st and 3rd are null - return 'utf-16-be' - if sample[1::2] == _null2: # 2nd and 4th are null - return 'utf-16-le' - # Did not detect 2 valid UTF-16 ascii-range characters - if nullcount == 3: - if sample[:3] == _null3: - return 'utf-32-be' - if sample[1:] == _null3: - return 'utf-32-le' - # Did not detect a valid UTF-32 ascii-range character - return None - - -def prepend_scheme_if_needed(url, new_scheme): - """Given a URL that may or may not have a scheme, prepend the given scheme. - Does not replace a present scheme with the one provided as an argument. - - :rtype: str - """ - scheme, netloc, path, params, query, fragment = urlparse(url, new_scheme) - - # urlparse is a finicky beast, and sometimes decides that there isn't a - # netloc present. Assume that it's being over-cautious, and switch netloc - # and path if urlparse decided there was no netloc. - if not netloc: - netloc, path = path, netloc - - return urlunparse((scheme, netloc, path, params, query, fragment)) - - -def get_auth_from_url(url): - """Given a url with authentication components, extract them into a tuple of - username,password. - - :rtype: (str,str) - """ - parsed = urlparse(url) - - try: - auth = (unquote(parsed.username), unquote(parsed.password)) - except (AttributeError, TypeError): - auth = ('', '') - - return auth - - -# Moved outside of function to avoid recompile every call -_CLEAN_HEADER_REGEX_BYTE = re.compile(b'^\\S[^\\r\\n]*$|^$') -_CLEAN_HEADER_REGEX_STR = re.compile(r'^\S[^\r\n]*$|^$') - - -def check_header_validity(header): - """Verifies that header value is a string which doesn't contain - leading whitespace or return characters. This prevents unintended - header injection. - - :param header: tuple, in the format (name, value). - """ - name, value = header - - if isinstance(value, bytes): - pat = _CLEAN_HEADER_REGEX_BYTE - else: - pat = _CLEAN_HEADER_REGEX_STR - try: - if not pat.match(value): - raise InvalidHeader("Invalid return character or leading space in header: %s" % name) - except TypeError: - raise InvalidHeader("Value for header {%s: %s} must be of type str or " - "bytes, not %s" % (name, value, type(value))) - - -def urldefragauth(url): - """ - Given a url remove the fragment and the authentication part. - - :rtype: str - """ - scheme, netloc, path, params, query, fragment = urlparse(url) - - # see func:`prepend_scheme_if_needed` - if not netloc: - netloc, path = path, netloc - - netloc = netloc.rsplit('@', 1)[-1] - - return urlunparse((scheme, netloc, path, params, query, '')) - - -def rewind_body(prepared_request): - """Move file pointer back to its recorded starting position - so it can be read again on redirect. - """ - body_seek = getattr(prepared_request.body, 'seek', None) - if body_seek is not None and isinstance(prepared_request._body_position, integer_types): - try: - body_seek(prepared_request._body_position) - except (IOError, OSError): - raise UnrewindableBodyError("An error occurred when rewinding request " - "body for redirect.") - else: - raise UnrewindableBodyError("Unable to rewind request body for redirect.") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/retrying.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/retrying.py deleted file mode 100644 index 6d1e627..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/retrying.py +++ /dev/null @@ -1,267 +0,0 @@ -## Copyright 2013-2014 Ray Holder -## -## 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. - -import random -from pip._vendor import six -import sys -import time -import traceback - - -# sys.maxint / 2, since Python 3.2 doesn't have a sys.maxint... -MAX_WAIT = 1073741823 - - -def retry(*dargs, **dkw): - """ - Decorator function that instantiates the Retrying object - @param *dargs: positional arguments passed to Retrying object - @param **dkw: keyword arguments passed to the Retrying object - """ - # support both @retry and @retry() as valid syntax - if len(dargs) == 1 and callable(dargs[0]): - def wrap_simple(f): - - @six.wraps(f) - def wrapped_f(*args, **kw): - return Retrying().call(f, *args, **kw) - - return wrapped_f - - return wrap_simple(dargs[0]) - - else: - def wrap(f): - - @six.wraps(f) - def wrapped_f(*args, **kw): - return Retrying(*dargs, **dkw).call(f, *args, **kw) - - return wrapped_f - - return wrap - - -class Retrying(object): - - def __init__(self, - stop=None, wait=None, - stop_max_attempt_number=None, - stop_max_delay=None, - wait_fixed=None, - wait_random_min=None, wait_random_max=None, - wait_incrementing_start=None, wait_incrementing_increment=None, - wait_exponential_multiplier=None, wait_exponential_max=None, - retry_on_exception=None, - retry_on_result=None, - wrap_exception=False, - stop_func=None, - wait_func=None, - wait_jitter_max=None): - - self._stop_max_attempt_number = 5 if stop_max_attempt_number is None else stop_max_attempt_number - self._stop_max_delay = 100 if stop_max_delay is None else stop_max_delay - self._wait_fixed = 1000 if wait_fixed is None else wait_fixed - self._wait_random_min = 0 if wait_random_min is None else wait_random_min - self._wait_random_max = 1000 if wait_random_max is None else wait_random_max - self._wait_incrementing_start = 0 if wait_incrementing_start is None else wait_incrementing_start - self._wait_incrementing_increment = 100 if wait_incrementing_increment is None else wait_incrementing_increment - self._wait_exponential_multiplier = 1 if wait_exponential_multiplier is None else wait_exponential_multiplier - self._wait_exponential_max = MAX_WAIT if wait_exponential_max is None else wait_exponential_max - self._wait_jitter_max = 0 if wait_jitter_max is None else wait_jitter_max - - # TODO add chaining of stop behaviors - # stop behavior - stop_funcs = [] - if stop_max_attempt_number is not None: - stop_funcs.append(self.stop_after_attempt) - - if stop_max_delay is not None: - stop_funcs.append(self.stop_after_delay) - - if stop_func is not None: - self.stop = stop_func - - elif stop is None: - self.stop = lambda attempts, delay: any(f(attempts, delay) for f in stop_funcs) - - else: - self.stop = getattr(self, stop) - - # TODO add chaining of wait behaviors - # wait behavior - wait_funcs = [lambda *args, **kwargs: 0] - if wait_fixed is not None: - wait_funcs.append(self.fixed_sleep) - - if wait_random_min is not None or wait_random_max is not None: - wait_funcs.append(self.random_sleep) - - if wait_incrementing_start is not None or wait_incrementing_increment is not None: - wait_funcs.append(self.incrementing_sleep) - - if wait_exponential_multiplier is not None or wait_exponential_max is not None: - wait_funcs.append(self.exponential_sleep) - - if wait_func is not None: - self.wait = wait_func - - elif wait is None: - self.wait = lambda attempts, delay: max(f(attempts, delay) for f in wait_funcs) - - else: - self.wait = getattr(self, wait) - - # retry on exception filter - if retry_on_exception is None: - self._retry_on_exception = self.always_reject - else: - self._retry_on_exception = retry_on_exception - - # TODO simplify retrying by Exception types - # retry on result filter - if retry_on_result is None: - self._retry_on_result = self.never_reject - else: - self._retry_on_result = retry_on_result - - self._wrap_exception = wrap_exception - - def stop_after_attempt(self, previous_attempt_number, delay_since_first_attempt_ms): - """Stop after the previous attempt >= stop_max_attempt_number.""" - return previous_attempt_number >= self._stop_max_attempt_number - - def stop_after_delay(self, previous_attempt_number, delay_since_first_attempt_ms): - """Stop after the time from the first attempt >= stop_max_delay.""" - return delay_since_first_attempt_ms >= self._stop_max_delay - - def no_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): - """Don't sleep at all before retrying.""" - return 0 - - def fixed_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): - """Sleep a fixed amount of time between each retry.""" - return self._wait_fixed - - def random_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): - """Sleep a random amount of time between wait_random_min and wait_random_max""" - return random.randint(self._wait_random_min, self._wait_random_max) - - def incrementing_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): - """ - Sleep an incremental amount of time after each attempt, starting at - wait_incrementing_start and incrementing by wait_incrementing_increment - """ - result = self._wait_incrementing_start + (self._wait_incrementing_increment * (previous_attempt_number - 1)) - if result < 0: - result = 0 - return result - - def exponential_sleep(self, previous_attempt_number, delay_since_first_attempt_ms): - exp = 2 ** previous_attempt_number - result = self._wait_exponential_multiplier * exp - if result > self._wait_exponential_max: - result = self._wait_exponential_max - if result < 0: - result = 0 - return result - - def never_reject(self, result): - return False - - def always_reject(self, result): - return True - - def should_reject(self, attempt): - reject = False - if attempt.has_exception: - reject |= self._retry_on_exception(attempt.value[1]) - else: - reject |= self._retry_on_result(attempt.value) - - return reject - - def call(self, fn, *args, **kwargs): - start_time = int(round(time.time() * 1000)) - attempt_number = 1 - while True: - try: - attempt = Attempt(fn(*args, **kwargs), attempt_number, False) - except: - tb = sys.exc_info() - attempt = Attempt(tb, attempt_number, True) - - if not self.should_reject(attempt): - return attempt.get(self._wrap_exception) - - delay_since_first_attempt_ms = int(round(time.time() * 1000)) - start_time - if self.stop(attempt_number, delay_since_first_attempt_ms): - if not self._wrap_exception and attempt.has_exception: - # get() on an attempt with an exception should cause it to be raised, but raise just in case - raise attempt.get() - else: - raise RetryError(attempt) - else: - sleep = self.wait(attempt_number, delay_since_first_attempt_ms) - if self._wait_jitter_max: - jitter = random.random() * self._wait_jitter_max - sleep = sleep + max(0, jitter) - time.sleep(sleep / 1000.0) - - attempt_number += 1 - - -class Attempt(object): - """ - An Attempt encapsulates a call to a target function that may end as a - normal return value from the function or an Exception depending on what - occurred during the execution. - """ - - def __init__(self, value, attempt_number, has_exception): - self.value = value - self.attempt_number = attempt_number - self.has_exception = has_exception - - def get(self, wrap_exception=False): - """ - Return the return value of this Attempt instance or raise an Exception. - If wrap_exception is true, this Attempt is wrapped inside of a - RetryError before being raised. - """ - if self.has_exception: - if wrap_exception: - raise RetryError(self) - else: - six.reraise(self.value[0], self.value[1], self.value[2]) - else: - return self.value - - def __repr__(self): - if self.has_exception: - return "Attempts: {0}, Error:\n{1}".format(self.attempt_number, "".join(traceback.format_tb(self.value[2]))) - else: - return "Attempts: {0}, Value: {1}".format(self.attempt_number, self.value) - - -class RetryError(Exception): - """ - A RetryError encapsulates the last Attempt instance right before giving up. - """ - - def __init__(self, last_attempt): - self.last_attempt = last_attempt - - def __str__(self): - return "RetryError[{0}]".format(self.last_attempt) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/six.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/six.py deleted file mode 100644 index 6bf4fd3..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/six.py +++ /dev/null @@ -1,891 +0,0 @@ -# Copyright (c) 2010-2017 Benjamin Peterson -# -# 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. - -"""Utilities for writing code that runs on Python 2 and 3""" - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.11.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("getoutput", "commands", "subprocess"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("splitvalue", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), - MovedAttribute("parse_http_list", "urllib2", "urllib.request"), - MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - try: - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None - tb = None - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - try: - raise tp, value, tb - finally: - tb = None -""") - - -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - try: - if from_value is None: - raise value - raise value from from_value - finally: - value = None -""") -elif sys.version_info[:2] > (3, 2): - exec_("""def raise_from(value, from_value): - try: - raise value from from_value - finally: - value = None -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(type): - - def __new__(cls, name, this_bases, d): - return meta(name, bases, d) - - @classmethod - def __prepare__(cls, name, this_bases): - return meta.__prepare__(name, bases) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def python_2_unicode_compatible(klass): - """ - A decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/__init__.py deleted file mode 100644 index aaa6b1c..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/__init__.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -urllib3 - Thread-safe connection pooling and re-using. -""" - -from __future__ import absolute_import -import warnings - -from .connectionpool import ( - HTTPConnectionPool, - HTTPSConnectionPool, - connection_from_url -) - -from . import exceptions -from .filepost import encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import HTTPResponse -from .util.request import make_headers -from .util.url import get_host -from .util.timeout import Timeout -from .util.retry import Retry - - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -__author__ = 'Andrey Petrov (andrey.petrov@shazow.net)' -__license__ = 'MIT' -__version__ = '1.22' - -__all__ = ( - 'HTTPConnectionPool', - 'HTTPSConnectionPool', - 'PoolManager', - 'ProxyManager', - 'HTTPResponse', - 'Retry', - 'Timeout', - 'add_stderr_logger', - 'connection_from_url', - 'disable_warnings', - 'encode_multipart_formdata', - 'get_host', - 'make_headers', - 'proxy_from_url', -) - -logging.getLogger(__name__).addHandler(NullHandler()) - - -def add_stderr_logger(level=logging.DEBUG): - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s')) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug('Added a stderr logging handler to logger: %s', __name__) - return handler - - -# ... Clean up. -del NullHandler - - -# All warning filters *must* be appended unless you're really certain that they -# shouldn't be: otherwise, it's very hard for users to use most Python -# mechanisms to silence them. -# SecurityWarning's always go off by default. -warnings.simplefilter('always', exceptions.SecurityWarning, append=True) -# SubjectAltNameWarning's should go off once per host -warnings.simplefilter('default', exceptions.SubjectAltNameWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter('default', exceptions.InsecurePlatformWarning, - append=True) -# SNIMissingWarnings should go off only once. -warnings.simplefilter('default', exceptions.SNIMissingWarning, append=True) - - -def disable_warnings(category=exceptions.HTTPWarning): - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter('ignore', category) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/_collections.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/_collections.py deleted file mode 100644 index 5df2372..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/_collections.py +++ /dev/null @@ -1,319 +0,0 @@ -from __future__ import absolute_import -from collections import Mapping, MutableMapping -try: - from threading import RLock -except ImportError: # Platform-specific: No threads available - class RLock: - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - - -try: # Python 2.7+ - from collections import OrderedDict -except ImportError: - from .packages.ordered_dict import OrderedDict -from .packages.six import iterkeys, itervalues, PY3 - - -__all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict'] - - -_Null = object() - - -class RecentlyUsedContainer(MutableMapping): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - ContainerCls = OrderedDict - - def __init__(self, maxsize=10, dispose_func=None): - self._maxsize = maxsize - self.dispose_func = dispose_func - - self._container = self.ContainerCls() - self.lock = RLock() - - def __getitem__(self, key): - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key, value): - evicted_value = _Null - with self.lock: - # Possibly evict the existing value of 'key' - evicted_value = self._container.get(key, _Null) - self._container[key] = value - - # If we didn't evict an existing value, we might have to evict the - # least recently used item from the beginning of the container. - if len(self._container) > self._maxsize: - _key, evicted_value = self._container.popitem(last=False) - - if self.dispose_func and evicted_value is not _Null: - self.dispose_func(evicted_value) - - def __delitem__(self, key): - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self): - with self.lock: - return len(self._container) - - def __iter__(self): - raise NotImplementedError('Iteration over this class is unlikely to be threadsafe.') - - def clear(self): - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(itervalues(self._container)) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self): - with self.lock: - return list(iterkeys(self._container)) - - -class HTTPHeaderDict(MutableMapping): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - def __init__(self, headers=None, **kwargs): - super(HTTPHeaderDict, self).__init__() - self._container = OrderedDict() - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key, val): - self._container[key.lower()] = [key, val] - return self._container[key.lower()] - - def __getitem__(self, key): - val = self._container[key.lower()] - return ', '.join(val[1:]) - - def __delitem__(self, key): - del self._container[key.lower()] - - def __contains__(self, key): - return key.lower() in self._container - - def __eq__(self, other): - if not isinstance(other, Mapping) and not hasattr(other, 'keys'): - return False - if not isinstance(other, type(self)): - other = type(self)(other) - return (dict((k.lower(), v) for k, v in self.itermerged()) == - dict((k.lower(), v) for k, v in other.itermerged())) - - def __ne__(self, other): - return not self.__eq__(other) - - if not PY3: # Python 2 - iterkeys = MutableMapping.iterkeys - itervalues = MutableMapping.itervalues - - __marker = object() - - def __len__(self): - return len(self._container) - - def __iter__(self): - # Only provide the originally cased names - for vals in self._container.values(): - yield vals[0] - - def pop(self, key, default=__marker): - '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - ''' - # Using the MutableMapping function directly fails due to the private marker. - # Using ordinary dict.pop would expose the internal structures. - # So let's reinvent the wheel. - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def discard(self, key): - try: - del self[key] - except KeyError: - pass - - def add(self, key, val): - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - """ - key_lower = key.lower() - new_vals = [key, val] - # Keep the common case aka no item present as fast as possible - vals = self._container.setdefault(key_lower, new_vals) - if new_vals is not vals: - vals.append(val) - - def extend(self, *args, **kwargs): - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError("extend() takes at most 1 positional " - "arguments ({0} given)".format(len(args))) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, Mapping): - for key in other: - self.add(key, other[key]) - elif hasattr(other, "keys"): - for key in other.keys(): - self.add(key, other[key]) - else: - for key, value in other: - self.add(key, value) - - for key, value in kwargs.items(): - self.add(key, value) - - def getlist(self, key, default=__marker): - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - try: - vals = self._container[key.lower()] - except KeyError: - if default is self.__marker: - return [] - return default - else: - return vals[1:] - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - # Backwards compatibility for http.cookiejar - get_all = getlist - - def __repr__(self): - return "%s(%s)" % (type(self).__name__, dict(self.itermerged())) - - def _copy_from(self, other): - for key in other: - val = other.getlist(key) - if isinstance(val, list): - # Don't need to convert tuples - val = list(val) - self._container[key.lower()] = [key] + val - - def copy(self): - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self): - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = self._container[key.lower()] - for val in vals[1:]: - yield vals[0], val - - def itermerged(self): - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = self._container[key.lower()] - yield val[0], ', '.join(val[1:]) - - def items(self): - return list(self.iteritems()) - - @classmethod - def from_httplib(cls, message): # Python 2 - """Read headers from a Python 2 httplib message object.""" - # python2.7 does not expose a proper API for exporting multiheaders - # efficiently. This function re-reads raw lines from the message - # object and extracts the multiheaders properly. - headers = [] - - for line in message.headers: - if line.startswith((' ', '\t')): - key, value = headers[-1] - headers[-1] = (key, value + '\r\n' + line.rstrip()) - continue - - key, value = line.split(':', 1) - headers.append((key, value.strip())) - - return cls(headers) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connection.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connection.py deleted file mode 100644 index c0d8329..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connection.py +++ /dev/null @@ -1,373 +0,0 @@ -from __future__ import absolute_import -import datetime -import logging -import os -import sys -import socket -from socket import error as SocketError, timeout as SocketTimeout -import warnings -from .packages import six -from .packages.six.moves.http_client import HTTPConnection as _HTTPConnection -from .packages.six.moves.http_client import HTTPException # noqa: F401 - -try: # Compiled with SSL? - import ssl - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): # Platform-specific: No SSL. - ssl = None - - class BaseSSLError(BaseException): - pass - - -try: # Python 3: - # Not a no-op, we're adding this to the namespace so it can be imported. - ConnectionError = ConnectionError -except NameError: # Python 2: - class ConnectionError(Exception): - pass - - -from .exceptions import ( - NewConnectionError, - ConnectTimeoutError, - SubjectAltNameWarning, - SystemTimeWarning, -) -from .packages.ssl_match_hostname import match_hostname, CertificateError - -from .util.ssl_ import ( - resolve_cert_reqs, - resolve_ssl_version, - assert_fingerprint, - create_urllib3_context, - ssl_wrap_socket -) - - -from .util import connection - -from ._collections import HTTPHeaderDict - -log = logging.getLogger(__name__) - -port_by_scheme = { - 'http': 80, - 'https': 443, -} - -# When updating RECENT_DATE, move it to -# within two years of the current date, and no -# earlier than 6 months ago. -RECENT_DATE = datetime.date(2016, 1, 1) - - -class DummyConnection(object): - """Used to detect a failed ConnectionCls import.""" - pass - - -class HTTPConnection(_HTTPConnection, object): - """ - Based on httplib.HTTPConnection but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool` - - ``source_address``: Set the source address for the current connection. - - .. note:: This is ignored for Python 2.6. It is only applied for 2.7 and 3.x - - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass:: - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port = port_by_scheme['http'] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] - - #: Whether this connection verifies the host's certificate. - is_verified = False - - def __init__(self, *args, **kw): - if six.PY3: # Python 3 - kw.pop('strict', None) - - # Pre-set source_address in case we have an older Python like 2.6. - self.source_address = kw.get('source_address') - - if sys.version_info < (2, 7): # Python 2.6 - # _HTTPConnection on Python 2.6 will balk at this keyword arg, but - # not newer versions. We can still use it when creating a - # connection though, so we pop it *after* we have saved it as - # self.source_address. - kw.pop('source_address', None) - - #: The socket options provided by the user. If no options are - #: provided, we use the default options. - self.socket_options = kw.pop('socket_options', self.default_socket_options) - - # Superclass also sets self.source_address in Python 2.7+. - _HTTPConnection.__init__(self, *args, **kw) - - def _new_conn(self): - """ Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = connection.create_connection( - (self.host, self.port), self.timeout, **extra_kw) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - except SocketError as e: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e) - - return conn - - def _prepare_conn(self, conn): - self.sock = conn - # the _tunnel_host attribute was added in python 2.6.3 (via - # http://hg.python.org/cpython/rev/0f57b30a152f) so pythons 2.6(0-2) do - # not have them. - if getattr(self, '_tunnel_host', None): - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - def request_chunked(self, method, url, body=None, headers=None): - """ - Alternative to the common request method, which sends the - body with chunked encoding and not as one block - """ - headers = HTTPHeaderDict(headers if headers is not None else {}) - skip_accept_encoding = 'accept-encoding' in headers - skip_host = 'host' in headers - self.putrequest( - method, - url, - skip_accept_encoding=skip_accept_encoding, - skip_host=skip_host - ) - for header, value in headers.items(): - self.putheader(header, value) - if 'transfer-encoding' not in headers: - self.putheader('Transfer-Encoding', 'chunked') - self.endheaders() - - if body is not None: - stringish_types = six.string_types + (six.binary_type,) - if isinstance(body, stringish_types): - body = (body,) - for chunk in body: - if not chunk: - continue - if not isinstance(chunk, six.binary_type): - chunk = chunk.encode('utf8') - len_str = hex(len(chunk))[2:] - self.send(len_str.encode('utf-8')) - self.send(b'\r\n') - self.send(chunk) - self.send(b'\r\n') - - # After the if clause, to always have a closed body - self.send(b'0\r\n\r\n') - - -class HTTPSConnection(HTTPConnection): - default_port = port_by_scheme['https'] - - ssl_version = None - - def __init__(self, host, port=None, key_file=None, cert_file=None, - strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - ssl_context=None, **kw): - - HTTPConnection.__init__(self, host, port, strict=strict, - timeout=timeout, **kw) - - self.key_file = key_file - self.cert_file = cert_file - self.ssl_context = ssl_context - - # Required property for Google AppEngine 1.9.0 which otherwise causes - # HTTPS requests to go out as HTTP. (See Issue #356) - self._protocol = 'https' - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - if self.ssl_context is None: - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(None), - cert_reqs=resolve_cert_reqs(None), - ) - - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - ssl_context=self.ssl_context, - ) - - -class VerifiedHTTPSConnection(HTTPSConnection): - """ - Based on httplib.HTTPSConnection but wraps the socket with - SSL certification. - """ - cert_reqs = None - ca_certs = None - ca_cert_dir = None - ssl_version = None - assert_fingerprint = None - - def set_cert(self, key_file=None, cert_file=None, - cert_reqs=None, ca_certs=None, - assert_hostname=None, assert_fingerprint=None, - ca_cert_dir=None): - """ - This method should only be called once, before the connection is used. - """ - # If cert_reqs is not provided, we can try to guess. If the user gave - # us a cert database, we assume they want to use it: otherwise, if - # they gave us an SSL Context object we should use whatever is set for - # it. - if cert_reqs is None: - if ca_certs or ca_cert_dir: - cert_reqs = 'CERT_REQUIRED' - elif self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - - def connect(self): - # Add certificate verification - conn = self._new_conn() - - hostname = self.host - if getattr(self, '_tunnel_host', None): - # _tunnel_host was added in Python 2.6.3 - # (See: http://hg.python.org/cpython/rev/0f57b30a152f) - - self.sock = conn - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn(( - 'System time is way off (before {0}). This will probably ' - 'lead to SSL verification errors').format(RECENT_DATE), - SystemTimeWarning - ) - - # Wrap socket using verification with the root certs in - # trusted_root_certs - if self.ssl_context is None: - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(self.ssl_version), - cert_reqs=resolve_cert_reqs(self.cert_reqs), - ) - - context = self.ssl_context - context.verify_mode = resolve_cert_reqs(self.cert_reqs) - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - server_hostname=hostname, - ssl_context=context) - - if self.assert_fingerprint: - assert_fingerprint(self.sock.getpeercert(binary_form=True), - self.assert_fingerprint) - elif context.verify_mode != ssl.CERT_NONE \ - and not getattr(context, 'check_hostname', False) \ - and self.assert_hostname is not False: - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = self.sock.getpeercert() - if not cert.get('subjectAltName', ()): - warnings.warn(( - 'Certificate for {0} has no `subjectAltName`, falling back to check for a ' - '`commonName` for now. This feature is being removed by major browsers and ' - 'deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 ' - 'for details.)'.format(hostname)), - SubjectAltNameWarning - ) - _match_hostname(cert, self.assert_hostname or hostname) - - self.is_verified = ( - context.verify_mode == ssl.CERT_REQUIRED or - self.assert_fingerprint is not None - ) - - -def _match_hostname(cert, asserted_hostname): - try: - match_hostname(cert, asserted_hostname) - except CertificateError as e: - log.error( - 'Certificate did not match expected hostname: %s. ' - 'Certificate: %s', asserted_hostname, cert - ) - # Add cert to exception and reraise so client code can inspect - # the cert when catching the exception, if they want to - e._peer_cert = cert - raise - - -if ssl: - # Make a copy for testing. - UnverifiedHTTPSConnection = HTTPSConnection - HTTPSConnection = VerifiedHTTPSConnection -else: - HTTPSConnection = DummyConnection diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connectionpool.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connectionpool.py deleted file mode 100644 index ec9600f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/connectionpool.py +++ /dev/null @@ -1,905 +0,0 @@ -from __future__ import absolute_import -import errno -import logging -import sys -import warnings - -from socket import error as SocketError, timeout as SocketTimeout -import socket - - -from .exceptions import ( - ClosedPoolError, - ProtocolError, - EmptyPoolError, - HeaderParsingError, - HostChangedError, - LocationValueError, - MaxRetryError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, - InsecureRequestWarning, - NewConnectionError, -) -from .packages.ssl_match_hostname import CertificateError -from .packages import six -from .packages.six.moves import queue -from .connection import ( - port_by_scheme, - DummyConnection, - HTTPConnection, HTTPSConnection, VerifiedHTTPSConnection, - HTTPException, BaseSSLError, -) -from .request import RequestMethods -from .response import HTTPResponse - -from .util.connection import is_connection_dropped -from .util.request import set_file_position -from .util.response import assert_header_parsing -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import get_host, Url - - -if six.PY2: - # Queue is imported for side effects on MS Windows - import Queue as _unused_module_Queue # noqa: F401 - -xrange = six.moves.xrange - -log = logging.getLogger(__name__) - -_Default = object() - - -# Pool objects -class ConnectionPool(object): - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - """ - - scheme = None - QueueCls = queue.LifoQueue - - def __init__(self, host, port=None): - if not host: - raise LocationValueError("No host specified.") - - self.host = _ipv6_host(host).lower() - self._proxy_host = host.lower() - self.port = port - - def __str__(self): - return '%s(host=%r, port=%r)' % (type(self).__name__, - self.host, self.port) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - pass - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = set([errno.EAGAIN, errno.EWOULDBLOCK]) - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`httplib.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`httplib.HTTPConnection`. - - :param strict: - Causes BadStatusLine to be raised if the status line can't be parsed - as a valid HTTP/1.0 or 1.1 status line, passed into - :class:`httplib.HTTPConnection`. - - .. note:: - Only works in Python 2. This parameter is ignored in Python 3. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to False, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.connectionpool.ProxyManager`" - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.connectionpool.ProxyManager`" - - :param \\**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = 'http' - ConnectionCls = HTTPConnection - ResponseCls = HTTPResponse - - def __init__(self, host, port=None, strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, block=False, - headers=None, retries=None, - _proxy=None, _proxy_headers=None, - **conn_kw): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - self.strict = strict - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - - # Fill the queue up so that doing get() on it will block properly - for _ in xrange(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault('socket_options', []) - - def _new_conn(self): - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.debug("Starting new HTTP connection (%d): %s", - self.num_connections, self.host) - - conn = self.ConnectionCls(host=self.host, port=self.port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - return conn - - def _get_conn(self, timeout=None): - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") - - except queue.Empty: - if self.block: - raise EmptyPoolError(self, - "Pool reached maximum size and no more " - "connections are allowed.") - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.debug("Resetting dropped connection: %s", self.host) - conn.close() - if getattr(conn, 'auto_open', 1) == 0: - # This is a proxied connection that has been mutated by - # httplib._tunnel() and cannot be reused (since it would - # attempt to bypass the proxy) - conn = None - - return conn or self._new_conn() - - def _put_conn(self, conn): - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except queue.Full: - # This should never happen if self.block == True - log.warning( - "Connection pool is full, discarding connection: %s", - self.host) - - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - pass - - def _prepare_proxy(self, conn): - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout): - """ Helper that always returns a :class:`urllib3.util.Timeout` """ - if timeout is _Default: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout(self, err, url, timeout_value): - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # See the above comment about EAGAIN in Python 3. In Python 2 we have - # to specifically catch it and throw the timeout error - if hasattr(err, 'errno') and err.errno in _blocking_errnos: - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # Catch possible read timeouts thrown as SSL errors. If not the - # case, rethrow the original. We need to do this because of: - # http://bugs.python.org/issue10272 - if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6 - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - def _make_request(self, conn, method, url, timeout=_Default, chunked=False, - **httplib_request_kw): - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param timeout: - Socket timeout in seconds for the request. This can be a - float or integer, which will set the same timeout value for - the socket connect and the socket read, or an instance of - :class:`urllib3.util.Timeout`, which gives you more fine-grained - control over your timeouts. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = timeout_obj.connect_timeout - - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # conn.request() calls httplib.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - if chunked: - conn.request_chunked(method, url, **httplib_request_kw) - else: - conn.request(method, url, **httplib_request_kw) - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - # App Engine doesn't have a sock attr - if getattr(conn, 'sock', None): - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % read_timeout) - if read_timeout is Timeout.DEFAULT_TIMEOUT: - conn.sock.settimeout(socket.getdefaulttimeout()) - else: # None or a value - conn.sock.settimeout(read_timeout) - - # Receive the response from the server - try: - try: # Python 2.7, use buffering of HTTP responses - httplib_response = conn.getresponse(buffering=True) - except TypeError: # Python 2.6 and older, Python 3 - try: - httplib_response = conn.getresponse() - except Exception as e: - # Remove the TypeError from the exception chain in Python 3; - # otherwise it looks like a programming error was the cause. - six.raise_from(e, None) - except (SocketTimeout, BaseSSLError, SocketError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # AppEngine doesn't have a version attr. - http_version = getattr(conn, '_http_vsn_str', 'HTTP/?') - log.debug("%s://%s:%s \"%s %s %s\" %s %s", self.scheme, self.host, self.port, - method, url, http_version, httplib_response.status, - httplib_response.length) - - try: - assert_header_parsing(httplib_response.msg) - except (HeaderParsingError, TypeError) as hpe: # Platform-specific: Python 3 - log.warning( - 'Failed to parse headers (url=%s): %s', - self._absolute_url(url), hpe, exc_info=True) - - return httplib_response - - def _absolute_url(self, path): - return Url(scheme=self.scheme, host=self.host, port=self.port, path=path).url - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - # Disable access to the pool - old_pool, self.pool = self.pool, None - - try: - while True: - conn = old_pool.get(block=False) - if conn: - conn.close() - - except queue.Empty: - pass # Done. - - def is_same_host(self, url): - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith('/'): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, host, port = get_host(url) - - host = _ipv6_host(host).lower() - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen(self, method, url, body=None, headers=None, retries=None, - redirect=True, assert_same_host=True, timeout=_Default, - pool_timeout=None, release_conn=None, chunked=False, - body_pos=None, **response_kw): - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method provided - by :class:`.RequestMethods`, such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param body: - Data to send in the request body (useful for creating - POST requests, see HTTPConnectionPool.post_url for - more convenience). - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When False, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of - ``response_kw.get('preload_content', True)``. - - :param chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param int body_pos: - Position to seek to in file-like body in the event of a retry or - redirect. Typically this won't need to be set because urllib3 will - auto-populate the value when needed. - - :param \\**response_kw: - Additional parameters are passed to - :meth:`urllib3.response.HTTPResponse.from_httplib` - """ - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = response_kw.get('preload_content', True) - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - conn = None - - # Track whether `conn` needs to be released before - # returning/raising/recursing. Update this variable if necessary, and - # leave `release_conn` constant throughout the function. That way, if - # the function recurses, the original value of `release_conn` will be - # passed down into the recursive call, and its value will be respected. - # - # See issue #651 [1] for details. - # - # [1] <https://github.com/shazow/urllib3/issues/651> - release_this_conn = release_conn - - # Merge the proxy headers. Only do this in HTTP. We have to copy the - # headers dict so we can safely change it without those changes being - # reflected in anyone else's copy. - if self.scheme == 'http': - headers = headers.copy() - headers.update(self.proxy_headers) - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - # Keep track of whether we cleanly exited the except block. This - # ensures we do proper cleanup in finally. - clean_exit = False - - # Rewind body position, if needed. Record current position - # for future rewinds in the event of a redirect/retry. - body_pos = set_file_position(body, body_pos) - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout - - is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None) - if is_new_proxy_conn: - self._prepare_proxy(conn) - - # Make the request on the httplib connection object. - httplib_response = self._make_request(conn, method, url, - timeout=timeout_obj, - body=body, headers=headers, - chunked=chunked) - - # If we're going to release the connection in ``finally:``, then - # the response doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = conn if not release_conn else None - - # Pass method to Response for length checking - response_kw['request_method'] = method - - # Import httplib's response into our own wrapper object - response = self.ResponseCls.from_httplib(httplib_response, - pool=self, - connection=response_conn, - retries=retries, - **response_kw) - - # Everything went great! - clean_exit = True - - except queue.Empty: - # Timed out by queue. - raise EmptyPoolError(self, "No pool connections are available.") - - except (TimeoutError, HTTPException, SocketError, ProtocolError, - BaseSSLError, SSLError, CertificateError) as e: - # Discard the connection for these exceptions. It will be - # replaced during the next _get_conn() call. - clean_exit = False - if isinstance(e, (BaseSSLError, CertificateError)): - e = SSLError(e) - elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy: - e = ProxyError('Cannot connect to proxy.', e) - elif isinstance(e, (SocketError, HTTPException)): - e = ProtocolError('Connection aborted.', e) - - retries = retries.increment(method, url, error=e, _pool=self, - _stacktrace=sys.exc_info()[2]) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if not clean_exit: - # We hit some kind of exception, handled or otherwise. We need - # to throw the connection away unless explicitly told not to. - # Close the connection, set the variable to None, and make sure - # we put the None back in the pool to avoid leaking it. - conn = conn and conn.close() - release_this_conn = True - - if release_this_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning("Retrying (%r) after connection " - "broken by '%r': %s", retries, err, url) - return self.urlopen(method, url, body, headers, retries, - redirect, assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, body_pos=body_pos, - **response_kw) - - def drain_and_release_conn(response): - try: - # discard any remaining response body, the connection will be - # released back to the pool once the entire response is read - response.read() - except (TimeoutError, HTTPException, SocketError, ProtocolError, - BaseSSLError, SSLError) as e: - pass - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - # Drain and release the connection for this response, since - # we're not returning it to be released manually. - drain_and_release_conn(response) - raise - return response - - # drain and return the connection to the pool before recursing - drain_and_release_conn(response) - - retries.sleep_for_retry(response) - log.debug("Redirecting %s -> %s", url, redirect_location) - return self.urlopen( - method, redirect_location, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, body_pos=body_pos, - **response_kw) - - # Check if we should retry the HTTP response. - has_retry_after = bool(response.getheader('Retry-After')) - if retries.is_retry(method, response.status, has_retry_after): - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_status: - # Drain and release the connection for this response, since - # we're not returning it to be released manually. - drain_and_release_conn(response) - raise - return response - - # drain and return the connection to the pool before recursing - drain_and_release_conn(response) - - retries.sleep(response) - log.debug("Retry: %s", url) - return self.urlopen( - method, url, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, - body_pos=body_pos, **response_kw) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - When Python is compiled with the :mod:`ssl` module, then - :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates, - instead of :class:`.HTTPSConnection`. - - :class:`.VerifiedHTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, - ``ca_cert_dir``, and ``ssl_version`` are only used if :mod:`ssl` is - available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade - the connection socket into an SSL socket. - """ - - scheme = 'https' - ConnectionCls = HTTPSConnection - - def __init__(self, host, port=None, - strict=False, timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, - block=False, headers=None, retries=None, - _proxy=None, _proxy_headers=None, - key_file=None, cert_file=None, cert_reqs=None, - ca_certs=None, ssl_version=None, - assert_hostname=None, assert_fingerprint=None, - ca_cert_dir=None, **conn_kw): - - HTTPConnectionPool.__init__(self, host, port, strict, timeout, maxsize, - block, headers, retries, _proxy, _proxy_headers, - **conn_kw) - - if ca_certs and cert_reqs is None: - cert_reqs = 'CERT_REQUIRED' - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.ca_certs = ca_certs - self.ca_cert_dir = ca_cert_dir - self.ssl_version = ssl_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_conn(self, conn): - """ - Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket` - and establish the tunnel if proxy is used. - """ - - if isinstance(conn, VerifiedHTTPSConnection): - conn.set_cert(key_file=self.key_file, - cert_file=self.cert_file, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint) - conn.ssl_version = self.ssl_version - return conn - - def _prepare_proxy(self, conn): - """ - Establish tunnel connection early, because otherwise httplib - would improperly set Host: header to proxy's IP:port. - """ - # Python 2.7+ - try: - set_tunnel = conn.set_tunnel - except AttributeError: # Platform-specific: Python 2.6 - set_tunnel = conn._set_tunnel - - if sys.version_info <= (2, 6, 4) and not self.proxy_headers: # Python 2.6.4 and older - set_tunnel(self._proxy_host, self.port) - else: - set_tunnel(self._proxy_host, self.port, self.proxy_headers) - - conn.connect() - - def _new_conn(self): - """ - Return a fresh :class:`httplib.HTTPSConnection`. - """ - self.num_connections += 1 - log.debug("Starting new HTTPS connection (%d): %s", - self.num_connections, self.host) - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: - raise SSLError("Can't connect to HTTPS URL because the SSL " - "module is not available.") - - actual_host = self.host - actual_port = self.port - if self.proxy is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - conn = self.ConnectionCls(host=actual_host, port=actual_port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - - return self._prepare_conn(conn) - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - super(HTTPSConnectionPool, self)._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if not getattr(conn, 'sock', None): # AppEngine might not have `.sock` - conn.connect() - - if not conn.is_verified: - warnings.warn(( - 'Unverified HTTPS request is being made. ' - 'Adding certificate verification is strongly advised. See: ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings'), - InsecureRequestWarning) - - -def connection_from_url(url, **kw): - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \\**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, host, port = get_host(url) - port = port or port_by_scheme.get(scheme, 80) - if scheme == 'https': - return HTTPSConnectionPool(host, port=port, **kw) - else: - return HTTPConnectionPool(host, port=port, **kw) - - -def _ipv6_host(host): - """ - Process IPv6 address literals - """ - - # httplib doesn't like it when we include brackets in IPv6 addresses - # Specifically, if we include brackets but also pass the port then - # httplib crazily doubles up the square brackets on the Host header. - # Instead, we need to make sure we never pass ``None`` as the port. - # However, for backward compatibility reasons we can't actually - # *assert* that. See http://bugs.python.org/issue28539 - # - # Also if an IPv6 address literal has a zone identifier, the - # percent sign might be URIencoded, convert it back into ASCII - if host.startswith('[') and host.endswith(']'): - host = host.replace('%25', '%').strip('[]') - return host diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/bindings.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/bindings.py deleted file mode 100644 index bcf41c0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/bindings.py +++ /dev/null @@ -1,593 +0,0 @@ -""" -This module uses ctypes to bind a whole bunch of functions and constants from -SecureTransport. The goal here is to provide the low-level API to -SecureTransport. These are essentially the C-level functions and constants, and -they're pretty gross to work with. - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - - Copyright (c) 2015-2016 Will Bond <will@wbond.net> - - 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. -""" -from __future__ import absolute_import - -import platform -from ctypes.util import find_library -from ctypes import ( - c_void_p, c_int32, c_char_p, c_size_t, c_byte, c_uint32, c_ulong, c_long, - c_bool -) -from ctypes import CDLL, POINTER, CFUNCTYPE - - -security_path = find_library('Security') -if not security_path: - raise ImportError('The library Security could not be found') - - -core_foundation_path = find_library('CoreFoundation') -if not core_foundation_path: - raise ImportError('The library CoreFoundation could not be found') - - -version = platform.mac_ver()[0] -version_info = tuple(map(int, version.split('.'))) -if version_info < (10, 8): - raise OSError( - 'Only OS X 10.8 and newer are supported, not %s.%s' % ( - version_info[0], version_info[1] - ) - ) - -Security = CDLL(security_path, use_errno=True) -CoreFoundation = CDLL(core_foundation_path, use_errno=True) - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFDictionary = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong - -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFDictionaryRef = POINTER(CFDictionary) -CFArrayCallBacks = c_void_p -CFDictionaryKeyCallBacks = c_void_p -CFDictionaryValueCallBacks = c_void_p - -SecCertificateRef = POINTER(c_void_p) -SecExternalFormat = c_uint32 -SecExternalItemType = c_uint32 -SecIdentityRef = POINTER(c_void_p) -SecItemImportExportFlags = c_uint32 -SecItemImportExportKeyParameters = c_void_p -SecKeychainRef = POINTER(c_void_p) -SSLProtocol = c_uint32 -SSLCipherSuite = c_uint32 -SSLContextRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SSLConnectionRef = c_uint32 -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 -SSLProtocolSide = c_uint32 -SSLConnectionType = c_uint32 -SSLSessionOption = c_uint32 - - -try: - Security.SecItemImport.argtypes = [ - CFDataRef, - CFStringRef, - POINTER(SecExternalFormat), - POINTER(SecExternalItemType), - SecItemImportExportFlags, - POINTER(SecItemImportExportKeyParameters), - SecKeychainRef, - POINTER(CFArrayRef), - ] - Security.SecItemImport.restype = OSStatus - - Security.SecCertificateGetTypeID.argtypes = [] - Security.SecCertificateGetTypeID.restype = CFTypeID - - Security.SecIdentityGetTypeID.argtypes = [] - Security.SecIdentityGetTypeID.restype = CFTypeID - - Security.SecKeyGetTypeID.argtypes = [] - Security.SecKeyGetTypeID.restype = CFTypeID - - Security.SecCertificateCreateWithData.argtypes = [ - CFAllocatorRef, - CFDataRef - ] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [ - SecCertificateRef - ] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [ - OSStatus, - c_void_p - ] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecIdentityCreateWithCertificate.argtypes = [ - CFTypeRef, - SecCertificateRef, - POINTER(SecIdentityRef) - ] - Security.SecIdentityCreateWithCertificate.restype = OSStatus - - Security.SecKeychainCreate.argtypes = [ - c_char_p, - c_uint32, - c_void_p, - Boolean, - c_void_p, - POINTER(SecKeychainRef) - ] - Security.SecKeychainCreate.restype = OSStatus - - Security.SecKeychainDelete.argtypes = [ - SecKeychainRef - ] - Security.SecKeychainDelete.restype = OSStatus - - Security.SecPKCS12Import.argtypes = [ - CFDataRef, - CFDictionaryRef, - POINTER(CFArrayRef) - ] - Security.SecPKCS12Import.restype = OSStatus - - SSLReadFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, c_void_p, POINTER(c_size_t)) - SSLWriteFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, POINTER(c_byte), POINTER(c_size_t)) - - Security.SSLSetIOFuncs.argtypes = [ - SSLContextRef, - SSLReadFunc, - SSLWriteFunc - ] - Security.SSLSetIOFuncs.restype = OSStatus - - Security.SSLSetPeerID.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t - ] - Security.SSLSetPeerID.restype = OSStatus - - Security.SSLSetCertificate.argtypes = [ - SSLContextRef, - CFArrayRef - ] - Security.SSLSetCertificate.restype = OSStatus - - Security.SSLSetCertificateAuthorities.argtypes = [ - SSLContextRef, - CFTypeRef, - Boolean - ] - Security.SSLSetCertificateAuthorities.restype = OSStatus - - Security.SSLSetConnection.argtypes = [ - SSLContextRef, - SSLConnectionRef - ] - Security.SSLSetConnection.restype = OSStatus - - Security.SSLSetPeerDomainName.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t - ] - Security.SSLSetPeerDomainName.restype = OSStatus - - Security.SSLHandshake.argtypes = [ - SSLContextRef - ] - Security.SSLHandshake.restype = OSStatus - - Security.SSLRead.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t, - POINTER(c_size_t) - ] - Security.SSLRead.restype = OSStatus - - Security.SSLWrite.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t, - POINTER(c_size_t) - ] - Security.SSLWrite.restype = OSStatus - - Security.SSLClose.argtypes = [ - SSLContextRef - ] - Security.SSLClose.restype = OSStatus - - Security.SSLGetNumberSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(c_size_t) - ] - Security.SSLGetNumberSupportedCiphers.restype = OSStatus - - Security.SSLGetSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t) - ] - Security.SSLGetSupportedCiphers.restype = OSStatus - - Security.SSLSetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - c_size_t - ] - Security.SSLSetEnabledCiphers.restype = OSStatus - - Security.SSLGetNumberEnabledCiphers.argtype = [ - SSLContextRef, - POINTER(c_size_t) - ] - Security.SSLGetNumberEnabledCiphers.restype = OSStatus - - Security.SSLGetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t) - ] - Security.SSLGetEnabledCiphers.restype = OSStatus - - Security.SSLGetNegotiatedCipher.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite) - ] - Security.SSLGetNegotiatedCipher.restype = OSStatus - - Security.SSLGetNegotiatedProtocolVersion.argtypes = [ - SSLContextRef, - POINTER(SSLProtocol) - ] - Security.SSLGetNegotiatedProtocolVersion.restype = OSStatus - - Security.SSLCopyPeerTrust.argtypes = [ - SSLContextRef, - POINTER(SecTrustRef) - ] - Security.SSLCopyPeerTrust.restype = OSStatus - - Security.SecTrustSetAnchorCertificates.argtypes = [ - SecTrustRef, - CFArrayRef - ] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argstypes = [ - SecTrustRef, - Boolean - ] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType) - ] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustGetCertificateCount.argtypes = [ - SecTrustRef - ] - Security.SecTrustGetCertificateCount.restype = CFIndex - - Security.SecTrustGetCertificateAtIndex.argtypes = [ - SecTrustRef, - CFIndex - ] - Security.SecTrustGetCertificateAtIndex.restype = SecCertificateRef - - Security.SSLCreateContext.argtypes = [ - CFAllocatorRef, - SSLProtocolSide, - SSLConnectionType - ] - Security.SSLCreateContext.restype = SSLContextRef - - Security.SSLSetSessionOption.argtypes = [ - SSLContextRef, - SSLSessionOption, - Boolean - ] - Security.SSLSetSessionOption.restype = OSStatus - - Security.SSLSetProtocolVersionMin.argtypes = [ - SSLContextRef, - SSLProtocol - ] - Security.SSLSetProtocolVersionMin.restype = OSStatus - - Security.SSLSetProtocolVersionMax.argtypes = [ - SSLContextRef, - SSLProtocol - ] - Security.SSLSetProtocolVersionMax.restype = OSStatus - - Security.SecCopyErrorMessageString.argtypes = [ - OSStatus, - c_void_p - ] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SSLReadFunc = SSLReadFunc - Security.SSLWriteFunc = SSLWriteFunc - Security.SSLContextRef = SSLContextRef - Security.SSLProtocol = SSLProtocol - Security.SSLCipherSuite = SSLCipherSuite - Security.SecIdentityRef = SecIdentityRef - Security.SecKeychainRef = SecKeychainRef - Security.SecTrustRef = SecTrustRef - Security.SecTrustResultType = SecTrustResultType - Security.SecExternalFormat = SecExternalFormat - Security.OSStatus = OSStatus - - Security.kSecImportExportPassphrase = CFStringRef.in_dll( - Security, 'kSecImportExportPassphrase' - ) - Security.kSecImportItemIdentity = CFStringRef.in_dll( - Security, 'kSecImportItemIdentity' - ) - - # CoreFoundation time! - CoreFoundation.CFRetain.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFRetain.restype = CFTypeRef - - CoreFoundation.CFRelease.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [ - CFStringRef, - CFStringEncoding - ] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [ - CFAllocatorRef, - c_char_p, - CFIndex - ] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [ - CFDataRef - ] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [ - CFDataRef - ] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFDictionaryCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - POINTER(CFTypeRef), - CFIndex, - CFDictionaryKeyCallBacks, - CFDictionaryValueCallBacks - ] - CoreFoundation.CFDictionaryCreate.restype = CFDictionaryRef - - CoreFoundation.CFDictionaryGetValue.argtypes = [ - CFDictionaryRef, - CFTypeRef - ] - CoreFoundation.CFDictionaryGetValue.restype = CFTypeRef - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [ - CFMutableArrayRef, - c_void_p - ] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [ - CFArrayRef - ] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [ - CFArrayRef, - CFIndex - ] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( - CoreFoundation, 'kCFAllocatorDefault' - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll(CoreFoundation, 'kCFTypeArrayCallBacks') - CoreFoundation.kCFTypeDictionaryKeyCallBacks = c_void_p.in_dll( - CoreFoundation, 'kCFTypeDictionaryKeyCallBacks' - ) - CoreFoundation.kCFTypeDictionaryValueCallBacks = c_void_p.in_dll( - CoreFoundation, 'kCFTypeDictionaryValueCallBacks' - ) - - CoreFoundation.CFTypeRef = CFTypeRef - CoreFoundation.CFArrayRef = CFArrayRef - CoreFoundation.CFStringRef = CFStringRef - CoreFoundation.CFDictionaryRef = CFDictionaryRef - -except (AttributeError): - raise ImportError('Error initializing ctypes') - - -class CFConst(object): - """ - A class object that acts as essentially a namespace for CoreFoundation - constants. - """ - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - -class SecurityConst(object): - """ - A class object that acts as essentially a namespace for Security constants. - """ - kSSLSessionOptionBreakOnServerAuth = 0 - - kSSLProtocol2 = 1 - kSSLProtocol3 = 2 - kTLSProtocol1 = 4 - kTLSProtocol11 = 7 - kTLSProtocol12 = 8 - - kSSLClientSide = 1 - kSSLStreamType = 0 - - kSecFormatPEMSequence = 10 - - kSecTrustResultInvalid = 0 - kSecTrustResultProceed = 1 - # This gap is present on purpose: this was kSecTrustResultConfirm, which - # is deprecated. - kSecTrustResultDeny = 3 - kSecTrustResultUnspecified = 4 - kSecTrustResultRecoverableTrustFailure = 5 - kSecTrustResultFatalTrustFailure = 6 - kSecTrustResultOtherError = 7 - - errSSLProtocol = -9800 - errSSLWouldBlock = -9803 - errSSLClosedGraceful = -9805 - errSSLClosedNoNotify = -9816 - errSSLClosedAbort = -9806 - - errSSLXCertChainInvalid = -9807 - errSSLCrypto = -9809 - errSSLInternal = -9810 - errSSLCertExpired = -9814 - errSSLCertNotYetValid = -9815 - errSSLUnknownRootCert = -9812 - errSSLNoRootCert = -9813 - errSSLHostNameMismatch = -9843 - errSSLPeerHandshakeFail = -9824 - errSSLPeerUserCancelled = -9839 - errSSLWeakPeerEphemeralDHKey = -9850 - errSSLServerAuthCompleted = -9841 - errSSLRecordOverflow = -9847 - - errSecVerifyFailed = -67808 - errSecNoTrustSettings = -25263 - errSecItemNotFound = -25300 - errSecInvalidTrustSettings = -25262 - - # Cipher suites. We only pick the ones our default cipher string allows. - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F - TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3 - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F - TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2 - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 - TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B - TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x006A - TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 - TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 - TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x0040 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 - TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032 - TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D - TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C - TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D - TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C - TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F - TLS_AES_128_GCM_SHA256 = 0x1301 - TLS_AES_256_GCM_SHA384 = 0x1302 - TLS_CHACHA20_POLY1305_SHA256 = 0x1303 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/low_level.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/low_level.py deleted file mode 100644 index 5e3494b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/_securetransport/low_level.py +++ /dev/null @@ -1,343 +0,0 @@ -""" -Low-level helpers for the SecureTransport bindings. - -These are Python functions that are not directly related to the high-level APIs -but are necessary to get them to work. They include a whole bunch of low-level -CoreFoundation messing about and memory management. The concerns in this module -are almost entirely about trying to avoid memory leaks and providing -appropriate and useful assistance to the higher-level code. -""" -import base64 -import ctypes -import itertools -import re -import os -import ssl -import tempfile - -from .bindings import Security, CoreFoundation, CFConst - - -# This regular expression is used to grab PEM data out of a PEM bundle. -_PEM_CERTS_RE = re.compile( - b"-----BEGIN CERTIFICATE-----\n(.*?)\n-----END CERTIFICATE-----", re.DOTALL -) - - -def _cf_data_from_bytes(bytestring): - """ - Given a bytestring, create a CFData object from it. This CFData object must - be CFReleased by the caller. - """ - return CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, bytestring, len(bytestring) - ) - - -def _cf_dictionary_from_tuples(tuples): - """ - Given a list of Python tuples, create an associated CFDictionary. - """ - dictionary_size = len(tuples) - - # We need to get the dictionary keys and values out in the same order. - keys = (t[0] for t in tuples) - values = (t[1] for t in tuples) - cf_keys = (CoreFoundation.CFTypeRef * dictionary_size)(*keys) - cf_values = (CoreFoundation.CFTypeRef * dictionary_size)(*values) - - return CoreFoundation.CFDictionaryCreate( - CoreFoundation.kCFAllocatorDefault, - cf_keys, - cf_values, - dictionary_size, - CoreFoundation.kCFTypeDictionaryKeyCallBacks, - CoreFoundation.kCFTypeDictionaryValueCallBacks, - ) - - -def _cf_string_to_unicode(value): - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - - Yes, it annoys me quite a lot that this function is this complex. - """ - value_as_void_p = ctypes.cast(value, ctypes.POINTER(ctypes.c_void_p)) - - string = CoreFoundation.CFStringGetCStringPtr( - value_as_void_p, - CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - value_as_void_p, - buffer, - 1024, - CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError('Error copying C string from CFStringRef') - string = buffer.value - if string is not None: - string = string.decode('utf-8') - return string - - -def _assert_no_error(error, exception_class=None): - """ - Checks the return code and throws an exception if there is an error to - report - """ - if error == 0: - return - - cf_error_string = Security.SecCopyErrorMessageString(error, None) - output = _cf_string_to_unicode(cf_error_string) - CoreFoundation.CFRelease(cf_error_string) - - if output is None or output == u'': - output = u'OSStatus %s' % error - - if exception_class is None: - exception_class = ssl.SSLError - - raise exception_class(output) - - -def _cert_array_from_pem(pem_bundle): - """ - Given a bundle of certs in PEM format, turns them into a CFArray of certs - that can be used to validate a cert chain. - """ - der_certs = [ - base64.b64decode(match.group(1)) - for match in _PEM_CERTS_RE.finditer(pem_bundle) - ] - if not der_certs: - raise ssl.SSLError("No root certificates specified") - - cert_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks) - ) - if not cert_array: - raise ssl.SSLError("Unable to allocate memory!") - - try: - for der_bytes in der_certs: - certdata = _cf_data_from_bytes(der_bytes) - if not certdata: - raise ssl.SSLError("Unable to allocate memory!") - cert = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, certdata - ) - CoreFoundation.CFRelease(certdata) - if not cert: - raise ssl.SSLError("Unable to build cert object!") - - CoreFoundation.CFArrayAppendValue(cert_array, cert) - CoreFoundation.CFRelease(cert) - except Exception: - # We need to free the array before the exception bubbles further. - # We only want to do that if an error occurs: otherwise, the caller - # should free. - CoreFoundation.CFRelease(cert_array) - - return cert_array - - -def _is_cert(item): - """ - Returns True if a given CFTypeRef is a certificate. - """ - expected = Security.SecCertificateGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _is_identity(item): - """ - Returns True if a given CFTypeRef is an identity. - """ - expected = Security.SecIdentityGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _temporary_keychain(): - """ - This function creates a temporary Mac keychain that we can use to work with - credentials. This keychain uses a one-time password and a temporary file to - store the data. We expect to have one keychain per socket. The returned - SecKeychainRef must be freed by the caller, including calling - SecKeychainDelete. - - Returns a tuple of the SecKeychainRef and the path to the temporary - directory that contains it. - """ - # Unfortunately, SecKeychainCreate requires a path to a keychain. This - # means we cannot use mkstemp to use a generic temporary file. Instead, - # we're going to create a temporary directory and a filename to use there. - # This filename will be 8 random bytes expanded into base64. We also need - # some random bytes to password-protect the keychain we're creating, so we - # ask for 40 random bytes. - random_bytes = os.urandom(40) - filename = base64.b64encode(random_bytes[:8]).decode('utf-8') - password = base64.b64encode(random_bytes[8:]) # Must be valid UTF-8 - tempdirectory = tempfile.mkdtemp() - - keychain_path = os.path.join(tempdirectory, filename).encode('utf-8') - - # We now want to create the keychain itself. - keychain = Security.SecKeychainRef() - status = Security.SecKeychainCreate( - keychain_path, - len(password), - password, - False, - None, - ctypes.byref(keychain) - ) - _assert_no_error(status) - - # Having created the keychain, we want to pass it off to the caller. - return keychain, tempdirectory - - -def _load_items_from_file(keychain, path): - """ - Given a single file, loads all the trust objects from it into arrays and - the keychain. - Returns a tuple of lists: the first list is a list of identities, the - second a list of certs. - """ - certificates = [] - identities = [] - result_array = None - - with open(path, 'rb') as f: - raw_filedata = f.read() - - try: - filedata = CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, - raw_filedata, - len(raw_filedata) - ) - result_array = CoreFoundation.CFArrayRef() - result = Security.SecItemImport( - filedata, # cert data - None, # Filename, leaving it out for now - None, # What the type of the file is, we don't care - None, # what's in the file, we don't care - 0, # import flags - None, # key params, can include passphrase in the future - keychain, # The keychain to insert into - ctypes.byref(result_array) # Results - ) - _assert_no_error(result) - - # A CFArray is not very useful to us as an intermediary - # representation, so we are going to extract the objects we want - # and then free the array. We don't need to keep hold of keys: the - # keychain already has them! - result_count = CoreFoundation.CFArrayGetCount(result_array) - for index in range(result_count): - item = CoreFoundation.CFArrayGetValueAtIndex( - result_array, index - ) - item = ctypes.cast(item, CoreFoundation.CFTypeRef) - - if _is_cert(item): - CoreFoundation.CFRetain(item) - certificates.append(item) - elif _is_identity(item): - CoreFoundation.CFRetain(item) - identities.append(item) - finally: - if result_array: - CoreFoundation.CFRelease(result_array) - - CoreFoundation.CFRelease(filedata) - - return (identities, certificates) - - -def _load_client_cert_chain(keychain, *paths): - """ - Load certificates and maybe keys from a number of files. Has the end goal - of returning a CFArray containing one SecIdentityRef, and then zero or more - SecCertificateRef objects, suitable for use as a client certificate trust - chain. - """ - # Ok, the strategy. - # - # This relies on knowing that macOS will not give you a SecIdentityRef - # unless you have imported a key into a keychain. This is a somewhat - # artificial limitation of macOS (for example, it doesn't necessarily - # affect iOS), but there is nothing inside Security.framework that lets you - # get a SecIdentityRef without having a key in a keychain. - # - # So the policy here is we take all the files and iterate them in order. - # Each one will use SecItemImport to have one or more objects loaded from - # it. We will also point at a keychain that macOS can use to work with the - # private key. - # - # Once we have all the objects, we'll check what we actually have. If we - # already have a SecIdentityRef in hand, fab: we'll use that. Otherwise, - # we'll take the first certificate (which we assume to be our leaf) and - # ask the keychain to give us a SecIdentityRef with that cert's associated - # key. - # - # We'll then return a CFArray containing the trust chain: one - # SecIdentityRef and then zero-or-more SecCertificateRef objects. The - # responsibility for freeing this CFArray will be with the caller. This - # CFArray must remain alive for the entire connection, so in practice it - # will be stored with a single SSLSocket, along with the reference to the - # keychain. - certificates = [] - identities = [] - - # Filter out bad paths. - paths = (path for path in paths if path) - - try: - for file_path in paths: - new_identities, new_certs = _load_items_from_file( - keychain, file_path - ) - identities.extend(new_identities) - certificates.extend(new_certs) - - # Ok, we have everything. The question is: do we have an identity? If - # not, we want to grab one from the first cert we have. - if not identities: - new_identity = Security.SecIdentityRef() - status = Security.SecIdentityCreateWithCertificate( - keychain, - certificates[0], - ctypes.byref(new_identity) - ) - _assert_no_error(status) - identities.append(new_identity) - - # We now want to release the original certificate, as we no longer - # need it. - CoreFoundation.CFRelease(certificates.pop(0)) - - # We now need to build a new CFArray that holds the trust chain. - trust_chain = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - for item in itertools.chain(identities, certificates): - # ArrayAppendValue does a CFRetain on the item. That's fine, - # because the finally block will release our other refs to them. - CoreFoundation.CFArrayAppendValue(trust_chain, item) - - return trust_chain - finally: - for obj in itertools.chain(identities, certificates): - CoreFoundation.CFRelease(obj) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/appengine.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/appengine.py deleted file mode 100644 index ce17e83..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/appengine.py +++ /dev/null @@ -1,296 +0,0 @@ -""" -This module provides a pool manager that uses Google App Engine's -`URLFetch Service <https://cloud.google.com/appengine/docs/python/urlfetch>`_. - -Example usage:: - - from pip._vendor.urllib3 import PoolManager - from pip._vendor.urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox - - if is_appengine_sandbox(): - # AppEngineManager uses AppEngine's URLFetch API behind the scenes - http = AppEngineManager() - else: - # PoolManager uses a socket-level API behind the scenes - http = PoolManager() - - r = http.request('GET', 'https://google.com/') - -There are `limitations <https://cloud.google.com/appengine/docs/python/\ -urlfetch/#Python_Quotas_and_limits>`_ to the URLFetch service and it may not be -the best choice for your application. There are three options for using -urllib3 on Google App Engine: - -1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is - cost-effective in many circumstances as long as your usage is within the - limitations. -2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets. - Sockets also have `limitations and restrictions - <https://cloud.google.com/appengine/docs/python/sockets/\ - #limitations-and-restrictions>`_ and have a lower free quota than URLFetch. - To use sockets, be sure to specify the following in your ``app.yaml``:: - - env_variables: - GAE_USE_SOCKETS_HTTPLIB : 'true' - -3. If you are using `App Engine Flexible -<https://cloud.google.com/appengine/docs/flexible/>`_, you can use the standard -:class:`PoolManager` without any configuration or special environment variables. -""" - -from __future__ import absolute_import -import logging -import os -import warnings -from ..packages.six.moves.urllib.parse import urljoin - -from ..exceptions import ( - HTTPError, - HTTPWarning, - MaxRetryError, - ProtocolError, - TimeoutError, - SSLError -) - -from ..packages.six import BytesIO -from ..request import RequestMethods -from ..response import HTTPResponse -from ..util.timeout import Timeout -from ..util.retry import Retry - -try: - from google.appengine.api import urlfetch -except ImportError: - urlfetch = None - - -log = logging.getLogger(__name__) - - -class AppEnginePlatformWarning(HTTPWarning): - pass - - -class AppEnginePlatformError(HTTPError): - pass - - -class AppEngineManager(RequestMethods): - """ - Connection manager for Google App Engine sandbox applications. - - This manager uses the URLFetch service directly instead of using the - emulated httplib, and is subject to URLFetch limitations as described in - the App Engine documentation `here - <https://cloud.google.com/appengine/docs/python/urlfetch>`_. - - Notably it will raise an :class:`AppEnginePlatformError` if: - * URLFetch is not available. - * If you attempt to use this on App Engine Flexible, as full socket - support is available. - * If a request size is more than 10 megabytes. - * If a response size is more than 32 megabtyes. - * If you use an unsupported request method such as OPTIONS. - - Beyond those cases, it will raise normal urllib3 errors. - """ - - def __init__(self, headers=None, retries=None, validate_certificate=True, - urlfetch_retries=True): - if not urlfetch: - raise AppEnginePlatformError( - "URLFetch is not available in this environment.") - - if is_prod_appengine_mvms(): - raise AppEnginePlatformError( - "Use normal urllib3.PoolManager instead of AppEngineManager" - "on Managed VMs, as using URLFetch is not necessary in " - "this environment.") - - warnings.warn( - "urllib3 is using URLFetch on Google App Engine sandbox instead " - "of sockets. To use sockets directly instead of URLFetch see " - "https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html.", - AppEnginePlatformWarning) - - RequestMethods.__init__(self, headers) - self.validate_certificate = validate_certificate - self.urlfetch_retries = urlfetch_retries - - self.retries = retries or Retry.DEFAULT - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - # Return False to re-raise any potential exceptions - return False - - def urlopen(self, method, url, body=None, headers=None, - retries=None, redirect=True, timeout=Timeout.DEFAULT_TIMEOUT, - **response_kw): - - retries = self._get_retries(retries, redirect) - - try: - follow_redirects = ( - redirect and - retries.redirect != 0 and - retries.total) - response = urlfetch.fetch( - url, - payload=body, - method=method, - headers=headers or {}, - allow_truncated=False, - follow_redirects=self.urlfetch_retries and follow_redirects, - deadline=self._get_absolute_timeout(timeout), - validate_certificate=self.validate_certificate, - ) - except urlfetch.DeadlineExceededError as e: - raise TimeoutError(self, e) - - except urlfetch.InvalidURLError as e: - if 'too large' in str(e): - raise AppEnginePlatformError( - "URLFetch request too large, URLFetch only " - "supports requests up to 10mb in size.", e) - raise ProtocolError(e) - - except urlfetch.DownloadError as e: - if 'Too many redirects' in str(e): - raise MaxRetryError(self, url, reason=e) - raise ProtocolError(e) - - except urlfetch.ResponseTooLargeError as e: - raise AppEnginePlatformError( - "URLFetch response too large, URLFetch only supports" - "responses up to 32mb in size.", e) - - except urlfetch.SSLCertificateError as e: - raise SSLError(e) - - except urlfetch.InvalidMethodError as e: - raise AppEnginePlatformError( - "URLFetch does not support method: %s" % method, e) - - http_response = self._urlfetch_response_to_http_response( - response, retries=retries, **response_kw) - - # Handle redirect? - redirect_location = redirect and http_response.get_redirect_location() - if redirect_location: - # Check for redirect response - if (self.urlfetch_retries and retries.raise_on_redirect): - raise MaxRetryError(self, url, "too many redirects") - else: - if http_response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=http_response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - return http_response - - retries.sleep_for_retry(http_response) - log.debug("Redirecting %s -> %s", url, redirect_location) - redirect_url = urljoin(url, redirect_location) - return self.urlopen( - method, redirect_url, body, headers, - retries=retries, redirect=redirect, - timeout=timeout, **response_kw) - - # Check if we should retry the HTTP response. - has_retry_after = bool(http_response.getheader('Retry-After')) - if retries.is_retry(method, http_response.status, has_retry_after): - retries = retries.increment( - method, url, response=http_response, _pool=self) - log.debug("Retry: %s", url) - retries.sleep(http_response) - return self.urlopen( - method, url, - body=body, headers=headers, - retries=retries, redirect=redirect, - timeout=timeout, **response_kw) - - return http_response - - def _urlfetch_response_to_http_response(self, urlfetch_resp, **response_kw): - - if is_prod_appengine(): - # Production GAE handles deflate encoding automatically, but does - # not remove the encoding header. - content_encoding = urlfetch_resp.headers.get('content-encoding') - - if content_encoding == 'deflate': - del urlfetch_resp.headers['content-encoding'] - - transfer_encoding = urlfetch_resp.headers.get('transfer-encoding') - # We have a full response's content, - # so let's make sure we don't report ourselves as chunked data. - if transfer_encoding == 'chunked': - encodings = transfer_encoding.split(",") - encodings.remove('chunked') - urlfetch_resp.headers['transfer-encoding'] = ','.join(encodings) - - return HTTPResponse( - # In order for decoding to work, we must present the content as - # a file-like object. - body=BytesIO(urlfetch_resp.content), - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - **response_kw - ) - - def _get_absolute_timeout(self, timeout): - if timeout is Timeout.DEFAULT_TIMEOUT: - return None # Defer to URLFetch's default. - if isinstance(timeout, Timeout): - if timeout._read is not None or timeout._connect is not None: - warnings.warn( - "URLFetch does not support granular timeout settings, " - "reverting to total or default URLFetch timeout.", - AppEnginePlatformWarning) - return timeout.total - return timeout - - def _get_retries(self, retries, redirect): - if not isinstance(retries, Retry): - retries = Retry.from_int( - retries, redirect=redirect, default=self.retries) - - if retries.connect or retries.read or retries.redirect: - warnings.warn( - "URLFetch only supports total retries and does not " - "recognize connect, read, or redirect retry parameters.", - AppEnginePlatformWarning) - - return retries - - -def is_appengine(): - return (is_local_appengine() or - is_prod_appengine() or - is_prod_appengine_mvms()) - - -def is_appengine_sandbox(): - return is_appengine() and not is_prod_appengine_mvms() - - -def is_local_appengine(): - return ('APPENGINE_RUNTIME' in os.environ and - 'Development/' in os.environ['SERVER_SOFTWARE']) - - -def is_prod_appengine(): - return ('APPENGINE_RUNTIME' in os.environ and - 'Google App Engine/' in os.environ['SERVER_SOFTWARE'] and - not is_prod_appengine_mvms()) - - -def is_prod_appengine_mvms(): - return os.environ.get('GAE_VM', False) == 'true' diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/ntlmpool.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/ntlmpool.py deleted file mode 100644 index 642e99e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/ntlmpool.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -NTLM authenticating pool, contributed by erikcederstran - -Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 -""" -from __future__ import absolute_import - -from logging import getLogger -from ntlm import ntlm - -from .. import HTTPSConnectionPool -from ..packages.six.moves.http_client import HTTPSConnection - - -log = getLogger(__name__) - - -class NTLMConnectionPool(HTTPSConnectionPool): - """ - Implements an NTLM authentication version of an urllib3 connection pool - """ - - scheme = 'https' - - def __init__(self, user, pw, authurl, *args, **kwargs): - """ - authurl is a random URL on the server that is protected by NTLM. - user is the Windows user, probably in the DOMAIN\\username format. - pw is the password for the user. - """ - super(NTLMConnectionPool, self).__init__(*args, **kwargs) - self.authurl = authurl - self.rawuser = user - user_parts = user.split('\\', 1) - self.domain = user_parts[0].upper() - self.user = user_parts[1] - self.pw = pw - - def _new_conn(self): - # Performs the NTLM handshake that secures the connection. The socket - # must be kept open while requests are performed. - self.num_connections += 1 - log.debug('Starting NTLM HTTPS connection no. %d: https://%s%s', - self.num_connections, self.host, self.authurl) - - headers = {} - headers['Connection'] = 'Keep-Alive' - req_header = 'Authorization' - resp_header = 'www-authenticate' - - conn = HTTPSConnection(host=self.host, port=self.port) - - # Send negotiation message - headers[req_header] = ( - 'NTLM %s' % ntlm.create_NTLM_NEGOTIATE_MESSAGE(self.rawuser)) - log.debug('Request headers: %s', headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - reshdr = dict(res.getheaders()) - log.debug('Response status: %s %s', res.status, res.reason) - log.debug('Response headers: %s', reshdr) - log.debug('Response data: %s [...]', res.read(100)) - - # Remove the reference to the socket, so that it can not be closed by - # the response object (we want to keep the socket open) - res.fp = None - - # Server should respond with a challenge message - auth_header_values = reshdr[resp_header].split(', ') - auth_header_value = None - for s in auth_header_values: - if s[:5] == 'NTLM ': - auth_header_value = s[5:] - if auth_header_value is None: - raise Exception('Unexpected %s response header: %s' % - (resp_header, reshdr[resp_header])) - - # Send authentication message - ServerChallenge, NegotiateFlags = \ - ntlm.parse_NTLM_CHALLENGE_MESSAGE(auth_header_value) - auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(ServerChallenge, - self.user, - self.domain, - self.pw, - NegotiateFlags) - headers[req_header] = 'NTLM %s' % auth_msg - log.debug('Request headers: %s', headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - log.debug('Response status: %s %s', res.status, res.reason) - log.debug('Response headers: %s', dict(res.getheaders())) - log.debug('Response data: %s [...]', res.read()[:100]) - if res.status != 200: - if res.status == 401: - raise Exception('Server rejected request: wrong ' - 'username or password') - raise Exception('Wrong server response: %s %s' % - (res.status, res.reason)) - - res.fp = None - log.debug('Connection established') - return conn - - def urlopen(self, method, url, body=None, headers=None, retries=3, - redirect=True, assert_same_host=True): - if headers is None: - headers = {} - headers['Connection'] = 'Keep-Alive' - return super(NTLMConnectionPool, self).urlopen(method, url, body, - headers, retries, - redirect, - assert_same_host) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/pyopenssl.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/pyopenssl.py deleted file mode 100644 index 1bb3787..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/pyopenssl.py +++ /dev/null @@ -1,455 +0,0 @@ -""" -SSL with SNI_-support for Python 2. Follow these instructions if you would -like to verify SSL certificates in Python 2. Note, the default libraries do -*not* do certificate checking; you need to do additional work to validate -certificates yourself. - -This needs the following packages installed: - -* pyOpenSSL (tested with 16.0.0) -* cryptography (minimum 1.3.4, from pyopenssl) -* idna (minimum 2.0, from cryptography) - -However, pyopenssl depends on cryptography, which depends on idna, so while we -use all three directly here we end up having relatively few packages required. - -You can install them with the following command: - - pip install pyopenssl cryptography idna - -To activate certificate checking, call -:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code -before you begin making HTTP requests. This can be done in a ``sitecustomize`` -module, or at any other time before your application begins using ``urllib3``, -like this:: - - try: - import urllib3.contrib.pyopenssl - urllib3.contrib.pyopenssl.inject_into_urllib3() - except ImportError: - pass - -Now you can use :mod:`urllib3` as you normally would, and it will support SNI -when the required modules are installed. - -Activating this module also has the positive side effect of disabling SSL/TLS -compression in Python 2 (see `CRIME attack`_). - -If you want to configure the default list of supported cipher suites, you can -set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable. - -.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication -.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit) -""" -from __future__ import absolute_import - -import OpenSSL.SSL -from cryptography import x509 -from cryptography.hazmat.backends.openssl import backend as openssl_backend -from cryptography.hazmat.backends.openssl.x509 import _Certificate - -from socket import timeout, error as SocketError -from io import BytesIO - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -import logging -import ssl -from ..packages import six -import sys - -from .. import util - -__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] - -# SNI always works. -HAS_SNI = True - -# Map from urllib3 to PyOpenSSL compatible parameter-values. -_openssl_versions = { - ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD, - ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, -} - -if hasattr(ssl, 'PROTOCOL_TLSv1_1') and hasattr(OpenSSL.SSL, 'TLSv1_1_METHOD'): - _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD - -if hasattr(ssl, 'PROTOCOL_TLSv1_2') and hasattr(OpenSSL.SSL, 'TLSv1_2_METHOD'): - _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD - -try: - _openssl_versions.update({ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD}) -except AttributeError: - pass - -_stdlib_to_openssl_verify = { - ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, - ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, - ssl.CERT_REQUIRED: - OpenSSL.SSL.VERIFY_PEER + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, -} -_openssl_to_stdlib_verify = dict( - (v, k) for k, v in _stdlib_to_openssl_verify.items() -) - -# OpenSSL will only write 16K at a time -SSL_WRITE_BLOCKSIZE = 16384 - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - - -log = logging.getLogger(__name__) - - -def inject_into_urllib3(): - 'Monkey-patch urllib3 with PyOpenSSL-backed SSL-support.' - - _validate_dependencies_met() - - util.ssl_.SSLContext = PyOpenSSLContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_PYOPENSSL = True - util.ssl_.IS_PYOPENSSL = True - - -def extract_from_urllib3(): - 'Undo monkey-patching by :func:`inject_into_urllib3`.' - - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_PYOPENSSL = False - util.ssl_.IS_PYOPENSSL = False - - -def _validate_dependencies_met(): - """ - Verifies that PyOpenSSL's package-level dependencies have been met. - Throws `ImportError` if they are not met. - """ - # Method added in `cryptography==1.1`; not available in older versions - from cryptography.x509.extensions import Extensions - if getattr(Extensions, "get_extension_for_class", None) is None: - raise ImportError("'cryptography' module missing required functionality. " - "Try upgrading to v1.3.4 or newer.") - - # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 - # attribute is only present on those versions. - from OpenSSL.crypto import X509 - x509 = X509() - if getattr(x509, "_x509", None) is None: - raise ImportError("'pyOpenSSL' module missing required functionality. " - "Try upgrading to v0.14 or newer.") - - -def _dnsname_to_stdlib(name): - """ - Converts a dNSName SubjectAlternativeName field to the form used by the - standard library on the given Python version. - - Cryptography produces a dNSName as a unicode string that was idna-decoded - from ASCII bytes. We need to idna-encode that string to get it back, and - then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib - uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). - """ - def idna_encode(name): - """ - Borrowed wholesale from the Python Cryptography Project. It turns out - that we can't just safely call `idna.encode`: it can explode for - wildcard names. This avoids that problem. - """ - from pip._vendor import idna - - for prefix in [u'*.', u'.']: - if name.startswith(prefix): - name = name[len(prefix):] - return prefix.encode('ascii') + idna.encode(name) - return idna.encode(name) - - name = idna_encode(name) - if sys.version_info >= (3, 0): - name = name.decode('utf-8') - return name - - -def get_subj_alt_name(peer_cert): - """ - Given an PyOpenSSL certificate, provides all the subject alternative names. - """ - # Pass the cert to cryptography, which has much better APIs for this. - if hasattr(peer_cert, "to_cryptography"): - cert = peer_cert.to_cryptography() - else: - # This is technically using private APIs, but should work across all - # relevant versions before PyOpenSSL got a proper API for this. - cert = _Certificate(openssl_backend, peer_cert._x509) - - # We want to find the SAN extension. Ask Cryptography to locate it (it's - # faster than looping in Python) - try: - ext = cert.extensions.get_extension_for_class( - x509.SubjectAlternativeName - ).value - except x509.ExtensionNotFound: - # No such extension, return the empty list. - return [] - except (x509.DuplicateExtension, x509.UnsupportedExtension, - x509.UnsupportedGeneralNameType, UnicodeError) as e: - # A problem has been found with the quality of the certificate. Assume - # no SAN field is present. - log.warning( - "A problem was encountered with the certificate that prevented " - "urllib3 from finding the SubjectAlternativeName field. This can " - "affect certificate validation. The error was %s", - e, - ) - return [] - - # We want to return dNSName and iPAddress fields. We need to cast the IPs - # back to strings because the match_hostname function wants them as - # strings. - # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 - # decoded. This is pretty frustrating, but that's what the standard library - # does with certificates, and so we need to attempt to do the same. - names = [ - ('DNS', _dnsname_to_stdlib(name)) - for name in ext.get_values_for_type(x509.DNSName) - ] - names.extend( - ('IP Address', str(name)) - for name in ext.get_values_for_type(x509.IPAddress) - ) - - return names - - -class WrappedSocket(object): - '''API-compatibility wrapper for Python OpenSSL's Connection-class. - - Note: _makefile_refs, _drop() and _reuse() are needed for the garbage - collector of pypy. - ''' - - def __init__(self, connection, socket, suppress_ragged_eofs=True): - self.connection = connection - self.socket = socket - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 - self._closed = False - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, *args, **kwargs): - try: - data = self.connection.recv(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): - return b'' - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError as e: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return b'' - else: - raise - except OpenSSL.SSL.WantReadError: - rd = util.wait_for_read(self.socket, self.socket.gettimeout()) - if not rd: - raise timeout('The read operation timed out') - else: - return self.recv(*args, **kwargs) - else: - return data - - def recv_into(self, *args, **kwargs): - try: - return self.connection.recv_into(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): - return 0 - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError as e: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return 0 - else: - raise - except OpenSSL.SSL.WantReadError: - rd = util.wait_for_read(self.socket, self.socket.gettimeout()) - if not rd: - raise timeout('The read operation timed out') - else: - return self.recv_into(*args, **kwargs) - - def settimeout(self, timeout): - return self.socket.settimeout(timeout) - - def _send_until_done(self, data): - while True: - try: - return self.connection.send(data) - except OpenSSL.SSL.WantWriteError: - wr = util.wait_for_write(self.socket, self.socket.gettimeout()) - if not wr: - raise timeout() - continue - except OpenSSL.SSL.SysCallError as e: - raise SocketError(str(e)) - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self._send_until_done(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - # FIXME rethrow compatible exceptions should we ever use this - self.connection.shutdown() - - def close(self): - if self._makefile_refs < 1: - try: - self._closed = True - return self.connection.close() - except OpenSSL.SSL.Error: - return - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - x509 = self.connection.get_peer_certificate() - - if not x509: - return x509 - - if binary_form: - return OpenSSL.crypto.dump_certificate( - OpenSSL.crypto.FILETYPE_ASN1, - x509) - - return { - 'subject': ( - (('commonName', x509.get_subject().CN),), - ), - 'subjectAltName': get_subj_alt_name(x509) - } - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) -else: # Platform-specific: Python 3 - makefile = backport_makefile - -WrappedSocket.makefile = makefile - - -class PyOpenSSLContext(object): - """ - I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible - for translating the interface of the standard library ``SSLContext`` object - to calls into PyOpenSSL. - """ - def __init__(self, protocol): - self.protocol = _openssl_versions[protocol] - self._ctx = OpenSSL.SSL.Context(self.protocol) - self._options = 0 - self.check_hostname = False - - @property - def options(self): - return self._options - - @options.setter - def options(self, value): - self._options = value - self._ctx.set_options(value) - - @property - def verify_mode(self): - return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] - - @verify_mode.setter - def verify_mode(self, value): - self._ctx.set_verify( - _stdlib_to_openssl_verify[value], - _verify_callback - ) - - def set_default_verify_paths(self): - self._ctx.set_default_verify_paths() - - def set_ciphers(self, ciphers): - if isinstance(ciphers, six.text_type): - ciphers = ciphers.encode('utf-8') - self._ctx.set_cipher_list(ciphers) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - if cafile is not None: - cafile = cafile.encode('utf-8') - if capath is not None: - capath = capath.encode('utf-8') - self._ctx.load_verify_locations(cafile, capath) - if cadata is not None: - self._ctx.load_verify_locations(BytesIO(cadata)) - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._ctx.use_certificate_file(certfile) - if password is not None: - self._ctx.set_passwd_cb(lambda max_length, prompt_twice, userdata: password) - self._ctx.use_privatekey_file(keyfile or certfile) - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, suppress_ragged_eofs=True, - server_hostname=None): - cnx = OpenSSL.SSL.Connection(self._ctx, sock) - - if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3 - server_hostname = server_hostname.encode('utf-8') - - if server_hostname is not None: - cnx.set_tlsext_host_name(server_hostname) - - cnx.set_connect_state() - - while True: - try: - cnx.do_handshake() - except OpenSSL.SSL.WantReadError: - rd = util.wait_for_read(sock, sock.gettimeout()) - if not rd: - raise timeout('select timed out') - continue - except OpenSSL.SSL.Error as e: - raise ssl.SSLError('bad handshake: %r' % e) - break - - return WrappedSocket(cnx, sock) - - -def _verify_callback(cnx, x509, err_no, err_depth, return_code): - return err_no == 0 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/securetransport.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/securetransport.py deleted file mode 100644 index 2cac70f..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/securetransport.py +++ /dev/null @@ -1,810 +0,0 @@ -""" -SecureTranport support for urllib3 via ctypes. - -This makes platform-native TLS available to urllib3 users on macOS without the -use of a compiler. This is an important feature because the Python Package -Index is moving to become a TLSv1.2-or-higher server, and the default OpenSSL -that ships with macOS is not capable of doing TLSv1.2. The only way to resolve -this is to give macOS users an alternative solution to the problem, and that -solution is to use SecureTransport. - -We use ctypes here because this solution must not require a compiler. That's -because pip is not allowed to require a compiler either. - -This is not intended to be a seriously long-term solution to this problem. -The hope is that PEP 543 will eventually solve this issue for us, at which -point we can retire this contrib module. But in the short term, we need to -solve the impending tire fire that is Python on Mac without this kind of -contrib module. So...here we are. - -To use this module, simply import and inject it:: - - import urllib3.contrib.securetransport - urllib3.contrib.securetransport.inject_into_urllib3() - -Happy TLSing! -""" -from __future__ import absolute_import - -import contextlib -import ctypes -import errno -import os.path -import shutil -import socket -import ssl -import threading -import weakref - -from .. import util -from ._securetransport.bindings import ( - Security, SecurityConst, CoreFoundation -) -from ._securetransport.low_level import ( - _assert_no_error, _cert_array_from_pem, _temporary_keychain, - _load_client_cert_chain -) - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -try: - memoryview(b'') -except NameError: - raise ImportError("SecureTransport only works on Pythons with memoryview") - -__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] - -# SNI always works -HAS_SNI = True - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - -# This dictionary is used by the read callback to obtain a handle to the -# calling wrapped socket. This is a pretty silly approach, but for now it'll -# do. I feel like I should be able to smuggle a handle to the wrapped socket -# directly in the SSLConnectionRef, but for now this approach will work I -# guess. -# -# We need to lock around this structure for inserts, but we don't do it for -# reads/writes in the callbacks. The reasoning here goes as follows: -# -# 1. It is not possible to call into the callbacks before the dictionary is -# populated, so once in the callback the id must be in the dictionary. -# 2. The callbacks don't mutate the dictionary, they only read from it, and -# so cannot conflict with any of the insertions. -# -# This is good: if we had to lock in the callbacks we'd drastically slow down -# the performance of this code. -_connection_refs = weakref.WeakValueDictionary() -_connection_ref_lock = threading.Lock() - -# Limit writes to 16kB. This is OpenSSL's limit, but we'll cargo-cult it over -# for no better reason than we need *a* limit, and this one is right there. -SSL_WRITE_BLOCKSIZE = 16384 - -# This is our equivalent of util.ssl_.DEFAULT_CIPHERS, but expanded out to -# individual cipher suites. We need to do this becuase this is how -# SecureTransport wants them. -CIPHER_SUITES = [ - SecurityConst.TLS_AES_256_GCM_SHA384, - SecurityConst.TLS_CHACHA20_POLY1305_SHA256, - SecurityConst.TLS_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA, -] - -# Basically this is simple: for PROTOCOL_SSLv23 we turn it into a low of -# TLSv1 and a high of TLSv1.2. For everything else, we pin to that version. -_protocol_to_min_max = { - ssl.PROTOCOL_SSLv23: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), -} - -if hasattr(ssl, "PROTOCOL_SSLv2"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv2] = ( - SecurityConst.kSSLProtocol2, SecurityConst.kSSLProtocol2 - ) -if hasattr(ssl, "PROTOCOL_SSLv3"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv3] = ( - SecurityConst.kSSLProtocol3, SecurityConst.kSSLProtocol3 - ) -if hasattr(ssl, "PROTOCOL_TLSv1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1] = ( - SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol1 - ) -if hasattr(ssl, "PROTOCOL_TLSv1_1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_1] = ( - SecurityConst.kTLSProtocol11, SecurityConst.kTLSProtocol11 - ) -if hasattr(ssl, "PROTOCOL_TLSv1_2"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_2] = ( - SecurityConst.kTLSProtocol12, SecurityConst.kTLSProtocol12 - ) -if hasattr(ssl, "PROTOCOL_TLS"): - _protocol_to_min_max[ssl.PROTOCOL_TLS] = _protocol_to_min_max[ssl.PROTOCOL_SSLv23] - - -def inject_into_urllib3(): - """ - Monkey-patch urllib3 with SecureTransport-backed SSL-support. - """ - util.ssl_.SSLContext = SecureTransportContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_SECURETRANSPORT = True - util.ssl_.IS_SECURETRANSPORT = True - - -def extract_from_urllib3(): - """ - Undo monkey-patching by :func:`inject_into_urllib3`. - """ - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_SECURETRANSPORT = False - util.ssl_.IS_SECURETRANSPORT = False - - -def _read_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport read callback. This is called by ST to request that data - be returned from the socket. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - requested_length = data_length_pointer[0] - - timeout = wrapped_socket.gettimeout() - error = None - read_count = 0 - buffer = (ctypes.c_char * requested_length).from_address(data_buffer) - buffer_view = memoryview(buffer) - - try: - while read_count < requested_length: - if timeout is None or timeout >= 0: - readables = util.wait_for_read([base_socket], timeout) - if not readables: - raise socket.error(errno.EAGAIN, 'timed out') - - # We need to tell ctypes that we have a buffer that can be - # written to. Upsettingly, we do that like this: - chunk_size = base_socket.recv_into( - buffer_view[read_count:requested_length] - ) - read_count += chunk_size - if not chunk_size: - if not read_count: - return SecurityConst.errSSLClosedGraceful - break - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - if error == errno.ECONNRESET: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = read_count - - if read_count != requested_length: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -def _write_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport write callback. This is called by ST to request that data - actually be sent on the network. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - bytes_to_write = data_length_pointer[0] - data = ctypes.string_at(data_buffer, bytes_to_write) - - timeout = wrapped_socket.gettimeout() - error = None - sent = 0 - - try: - while sent < bytes_to_write: - if timeout is None or timeout >= 0: - writables = util.wait_for_write([base_socket], timeout) - if not writables: - raise socket.error(errno.EAGAIN, 'timed out') - chunk_sent = base_socket.send(data) - sent += chunk_sent - - # This has some needless copying here, but I'm not sure there's - # much value in optimising this data path. - data = data[chunk_sent:] - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - if error == errno.ECONNRESET: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = sent - if sent != bytes_to_write: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -# We need to keep these two objects references alive: if they get GC'd while -# in use then SecureTransport could attempt to call a function that is in freed -# memory. That would be...uh...bad. Yeah, that's the word. Bad. -_read_callback_pointer = Security.SSLReadFunc(_read_callback) -_write_callback_pointer = Security.SSLWriteFunc(_write_callback) - - -class WrappedSocket(object): - """ - API-compatibility wrapper for Python's OpenSSL wrapped socket object. - - Note: _makefile_refs, _drop(), and _reuse() are needed for the garbage - collector of PyPy. - """ - def __init__(self, socket): - self.socket = socket - self.context = None - self._makefile_refs = 0 - self._closed = False - self._exception = None - self._keychain = None - self._keychain_dir = None - self._client_cert_chain = None - - # We save off the previously-configured timeout and then set it to - # zero. This is done because we use select and friends to handle the - # timeouts, but if we leave the timeout set on the lower socket then - # Python will "kindly" call select on that socket again for us. Avoid - # that by forcing the timeout to zero. - self._timeout = self.socket.gettimeout() - self.socket.settimeout(0) - - @contextlib.contextmanager - def _raise_on_error(self): - """ - A context manager that can be used to wrap calls that do I/O from - SecureTransport. If any of the I/O callbacks hit an exception, this - context manager will correctly propagate the exception after the fact. - This avoids silently swallowing those exceptions. - - It also correctly forces the socket closed. - """ - self._exception = None - - # We explicitly don't catch around this yield because in the unlikely - # event that an exception was hit in the block we don't want to swallow - # it. - yield - if self._exception is not None: - exception, self._exception = self._exception, None - self.close() - raise exception - - def _set_ciphers(self): - """ - Sets up the allowed ciphers. By default this matches the set in - util.ssl_.DEFAULT_CIPHERS, at least as supported by macOS. This is done - custom and doesn't allow changing at this time, mostly because parsing - OpenSSL cipher strings is going to be a freaking nightmare. - """ - ciphers = (Security.SSLCipherSuite * len(CIPHER_SUITES))(*CIPHER_SUITES) - result = Security.SSLSetEnabledCiphers( - self.context, ciphers, len(CIPHER_SUITES) - ) - _assert_no_error(result) - - def _custom_validate(self, verify, trust_bundle): - """ - Called when we have set custom validation. We do this in two cases: - first, when cert validation is entirely disabled; and second, when - using a custom trust DB. - """ - # If we disabled cert validation, just say: cool. - if not verify: - return - - # We want data in memory, so load it up. - if os.path.isfile(trust_bundle): - with open(trust_bundle, 'rb') as f: - trust_bundle = f.read() - - cert_array = None - trust = Security.SecTrustRef() - - try: - # Get a CFArray that contains the certs we want. - cert_array = _cert_array_from_pem(trust_bundle) - - # Ok, now the hard part. We want to get the SecTrustRef that ST has - # created for this connection, shove our CAs into it, tell ST to - # ignore everything else it knows, and then ask if it can build a - # chain. This is a buuuunch of code. - result = Security.SSLCopyPeerTrust( - self.context, ctypes.byref(trust) - ) - _assert_no_error(result) - if not trust: - raise ssl.SSLError("Failed to copy trust reference") - - result = Security.SecTrustSetAnchorCertificates(trust, cert_array) - _assert_no_error(result) - - result = Security.SecTrustSetAnchorCertificatesOnly(trust, True) - _assert_no_error(result) - - trust_result = Security.SecTrustResultType() - result = Security.SecTrustEvaluate( - trust, ctypes.byref(trust_result) - ) - _assert_no_error(result) - finally: - if trust: - CoreFoundation.CFRelease(trust) - - if cert_array is None: - CoreFoundation.CFRelease(cert_array) - - # Ok, now we can look at what the result was. - successes = ( - SecurityConst.kSecTrustResultUnspecified, - SecurityConst.kSecTrustResultProceed - ) - if trust_result.value not in successes: - raise ssl.SSLError( - "certificate verify failed, error code: %d" % - trust_result.value - ) - - def handshake(self, - server_hostname, - verify, - trust_bundle, - min_version, - max_version, - client_cert, - client_key, - client_key_passphrase): - """ - Actually performs the TLS handshake. This is run automatically by - wrapped socket, and shouldn't be needed in user code. - """ - # First, we do the initial bits of connection setup. We need to create - # a context, set its I/O funcs, and set the connection reference. - self.context = Security.SSLCreateContext( - None, SecurityConst.kSSLClientSide, SecurityConst.kSSLStreamType - ) - result = Security.SSLSetIOFuncs( - self.context, _read_callback_pointer, _write_callback_pointer - ) - _assert_no_error(result) - - # Here we need to compute the handle to use. We do this by taking the - # id of self modulo 2**31 - 1. If this is already in the dictionary, we - # just keep incrementing by one until we find a free space. - with _connection_ref_lock: - handle = id(self) % 2147483647 - while handle in _connection_refs: - handle = (handle + 1) % 2147483647 - _connection_refs[handle] = self - - result = Security.SSLSetConnection(self.context, handle) - _assert_no_error(result) - - # If we have a server hostname, we should set that too. - if server_hostname: - if not isinstance(server_hostname, bytes): - server_hostname = server_hostname.encode('utf-8') - - result = Security.SSLSetPeerDomainName( - self.context, server_hostname, len(server_hostname) - ) - _assert_no_error(result) - - # Setup the ciphers. - self._set_ciphers() - - # Set the minimum and maximum TLS versions. - result = Security.SSLSetProtocolVersionMin(self.context, min_version) - _assert_no_error(result) - result = Security.SSLSetProtocolVersionMax(self.context, max_version) - _assert_no_error(result) - - # If there's a trust DB, we need to use it. We do that by telling - # SecureTransport to break on server auth. We also do that if we don't - # want to validate the certs at all: we just won't actually do any - # authing in that case. - if not verify or trust_bundle is not None: - result = Security.SSLSetSessionOption( - self.context, - SecurityConst.kSSLSessionOptionBreakOnServerAuth, - True - ) - _assert_no_error(result) - - # If there's a client cert, we need to use it. - if client_cert: - self._keychain, self._keychain_dir = _temporary_keychain() - self._client_cert_chain = _load_client_cert_chain( - self._keychain, client_cert, client_key - ) - result = Security.SSLSetCertificate( - self.context, self._client_cert_chain - ) - _assert_no_error(result) - - while True: - with self._raise_on_error(): - result = Security.SSLHandshake(self.context) - - if result == SecurityConst.errSSLWouldBlock: - raise socket.timeout("handshake timed out") - elif result == SecurityConst.errSSLServerAuthCompleted: - self._custom_validate(verify, trust_bundle) - continue - else: - _assert_no_error(result) - break - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, bufsiz): - buffer = ctypes.create_string_buffer(bufsiz) - bytes_read = self.recv_into(buffer, bufsiz) - data = buffer[:bytes_read] - return data - - def recv_into(self, buffer, nbytes=None): - # Read short on EOF. - if self._closed: - return 0 - - if nbytes is None: - nbytes = len(buffer) - - buffer = (ctypes.c_char * nbytes).from_buffer(buffer) - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLRead( - self.context, buffer, nbytes, ctypes.byref(processed_bytes) - ) - - # There are some result codes that we want to treat as "not always - # errors". Specifically, those are errSSLWouldBlock, - # errSSLClosedGraceful, and errSSLClosedNoNotify. - if (result == SecurityConst.errSSLWouldBlock): - # If we didn't process any bytes, then this was just a time out. - # However, we can get errSSLWouldBlock in situations when we *did* - # read some data, and in those cases we should just read "short" - # and return. - if processed_bytes.value == 0: - # Timed out, no data read. - raise socket.timeout("recv timed out") - elif result in (SecurityConst.errSSLClosedGraceful, SecurityConst.errSSLClosedNoNotify): - # The remote peer has closed this connection. We should do so as - # well. Note that we don't actually return here because in - # principle this could actually be fired along with return data. - # It's unlikely though. - self.close() - else: - _assert_no_error(result) - - # Ok, we read and probably succeeded. We should return whatever data - # was actually read. - return processed_bytes.value - - def settimeout(self, timeout): - self._timeout = timeout - - def gettimeout(self): - return self._timeout - - def send(self, data): - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLWrite( - self.context, data, len(data), ctypes.byref(processed_bytes) - ) - - if result == SecurityConst.errSSLWouldBlock and processed_bytes.value == 0: - # Timed out - raise socket.timeout("send timed out") - else: - _assert_no_error(result) - - # We sent, and probably succeeded. Tell them how much we sent. - return processed_bytes.value - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self.send(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - with self._raise_on_error(): - Security.SSLClose(self.context) - - def close(self): - # TODO: should I do clean shutdown here? Do I have to? - if self._makefile_refs < 1: - self._closed = True - if self.context: - CoreFoundation.CFRelease(self.context) - self.context = None - if self._client_cert_chain: - CoreFoundation.CFRelease(self._client_cert_chain) - self._client_cert_chain = None - if self._keychain: - Security.SecKeychainDelete(self._keychain) - CoreFoundation.CFRelease(self._keychain) - shutil.rmtree(self._keychain_dir) - self._keychain = self._keychain_dir = None - return self.socket.close() - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - # Urgh, annoying. - # - # Here's how we do this: - # - # 1. Call SSLCopyPeerTrust to get hold of the trust object for this - # connection. - # 2. Call SecTrustGetCertificateAtIndex for index 0 to get the leaf. - # 3. To get the CN, call SecCertificateCopyCommonName and process that - # string so that it's of the appropriate type. - # 4. To get the SAN, we need to do something a bit more complex: - # a. Call SecCertificateCopyValues to get the data, requesting - # kSecOIDSubjectAltName. - # b. Mess about with this dictionary to try to get the SANs out. - # - # This is gross. Really gross. It's going to be a few hundred LoC extra - # just to repeat something that SecureTransport can *already do*. So my - # operating assumption at this time is that what we want to do is - # instead to just flag to urllib3 that it shouldn't do its own hostname - # validation when using SecureTransport. - if not binary_form: - raise ValueError( - "SecureTransport only supports dumping binary certs" - ) - trust = Security.SecTrustRef() - certdata = None - der_bytes = None - - try: - # Grab the trust store. - result = Security.SSLCopyPeerTrust( - self.context, ctypes.byref(trust) - ) - _assert_no_error(result) - if not trust: - # Probably we haven't done the handshake yet. No biggie. - return None - - cert_count = Security.SecTrustGetCertificateCount(trust) - if not cert_count: - # Also a case that might happen if we haven't handshaked. - # Handshook? Handshaken? - return None - - leaf = Security.SecTrustGetCertificateAtIndex(trust, 0) - assert leaf - - # Ok, now we want the DER bytes. - certdata = Security.SecCertificateCopyData(leaf) - assert certdata - - data_length = CoreFoundation.CFDataGetLength(certdata) - data_buffer = CoreFoundation.CFDataGetBytePtr(certdata) - der_bytes = ctypes.string_at(data_buffer, data_length) - finally: - if certdata: - CoreFoundation.CFRelease(certdata) - if trust: - CoreFoundation.CFRelease(trust) - - return der_bytes - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) -else: # Platform-specific: Python 3 - def makefile(self, mode="r", buffering=None, *args, **kwargs): - # We disable buffering with SecureTransport because it conflicts with - # the buffering that ST does internally (see issue #1153 for more). - buffering = 0 - return backport_makefile(self, mode, buffering, *args, **kwargs) - -WrappedSocket.makefile = makefile - - -class SecureTransportContext(object): - """ - I am a wrapper class for the SecureTransport library, to translate the - interface of the standard library ``SSLContext`` object to calls into - SecureTransport. - """ - def __init__(self, protocol): - self._min_version, self._max_version = _protocol_to_min_max[protocol] - self._options = 0 - self._verify = False - self._trust_bundle = None - self._client_cert = None - self._client_key = None - self._client_key_passphrase = None - - @property - def check_hostname(self): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - return True - - @check_hostname.setter - def check_hostname(self, value): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - pass - - @property - def options(self): - # TODO: Well, crap. - # - # So this is the bit of the code that is the most likely to cause us - # trouble. Essentially we need to enumerate all of the SSL options that - # users might want to use and try to see if we can sensibly translate - # them, or whether we should just ignore them. - return self._options - - @options.setter - def options(self, value): - # TODO: Update in line with above. - self._options = value - - @property - def verify_mode(self): - return ssl.CERT_REQUIRED if self._verify else ssl.CERT_NONE - - @verify_mode.setter - def verify_mode(self, value): - self._verify = True if value == ssl.CERT_REQUIRED else False - - def set_default_verify_paths(self): - # So, this has to do something a bit weird. Specifically, what it does - # is nothing. - # - # This means that, if we had previously had load_verify_locations - # called, this does not undo that. We need to do that because it turns - # out that the rest of the urllib3 code will attempt to load the - # default verify paths if it hasn't been told about any paths, even if - # the context itself was sometime earlier. We resolve that by just - # ignoring it. - pass - - def load_default_certs(self): - return self.set_default_verify_paths() - - def set_ciphers(self, ciphers): - # For now, we just require the default cipher string. - if ciphers != util.ssl_.DEFAULT_CIPHERS: - raise ValueError( - "SecureTransport doesn't support custom cipher strings" - ) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - # OK, we only really support cadata and cafile. - if capath is not None: - raise ValueError( - "SecureTransport does not support cert directories" - ) - - self._trust_bundle = cafile or cadata - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._client_cert = certfile - self._client_key = keyfile - self._client_cert_passphrase = password - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, suppress_ragged_eofs=True, - server_hostname=None): - # So, what do we do here? Firstly, we assert some properties. This is a - # stripped down shim, so there is some functionality we don't support. - # See PEP 543 for the real deal. - assert not server_side - assert do_handshake_on_connect - assert suppress_ragged_eofs - - # Ok, we're good to go. Now we want to create the wrapped socket object - # and store it in the appropriate place. - wrapped_socket = WrappedSocket(sock) - - # Now we can handshake - wrapped_socket.handshake( - server_hostname, self._verify, self._trust_bundle, - self._min_version, self._max_version, self._client_cert, - self._client_key, self._client_key_passphrase - ) - return wrapped_socket diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/socks.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/socks.py deleted file mode 100644 index 39e92fd..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/contrib/socks.py +++ /dev/null @@ -1,188 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module contains provisional support for SOCKS proxies from within -urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and -SOCKS5. To enable its functionality, either install PySocks or install this -module with the ``socks`` extra. - -The SOCKS implementation supports the full range of urllib3 features. It also -supports the following SOCKS features: - -- SOCKS4 -- SOCKS4a -- SOCKS5 -- Usernames and passwords for the SOCKS proxy - -Known Limitations: - -- Currently PySocks does not support contacting remote websites via literal - IPv6 addresses. Any such connection attempt will fail. You must use a domain - name. -- Currently PySocks does not support IPv6 connections to the SOCKS proxy. Any - such connection attempt will fail. -""" -from __future__ import absolute_import - -try: - import socks -except ImportError: - import warnings - from ..exceptions import DependencyWarning - - warnings.warn(( - 'SOCKS support in urllib3 requires the installation of optional ' - 'dependencies: specifically, PySocks. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies' - ), - DependencyWarning - ) - raise - -from socket import error as SocketError, timeout as SocketTimeout - -from ..connection import ( - HTTPConnection, HTTPSConnection -) -from ..connectionpool import ( - HTTPConnectionPool, HTTPSConnectionPool -) -from ..exceptions import ConnectTimeoutError, NewConnectionError -from ..poolmanager import PoolManager -from ..util.url import parse_url - -try: - import ssl -except ImportError: - ssl = None - - -class SOCKSConnection(HTTPConnection): - """ - A plain-text HTTP connection that connects via a SOCKS proxy. - """ - def __init__(self, *args, **kwargs): - self._socks_options = kwargs.pop('_socks_options') - super(SOCKSConnection, self).__init__(*args, **kwargs) - - def _new_conn(self): - """ - Establish a new connection via the SOCKS proxy. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = socks.create_connection( - (self.host, self.port), - proxy_type=self._socks_options['socks_version'], - proxy_addr=self._socks_options['proxy_host'], - proxy_port=self._socks_options['proxy_port'], - proxy_username=self._socks_options['username'], - proxy_password=self._socks_options['password'], - proxy_rdns=self._socks_options['rdns'], - timeout=self.timeout, - **extra_kw - ) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - except socks.ProxyError as e: - # This is fragile as hell, but it seems to be the only way to raise - # useful errors here. - if e.socket_err: - error = e.socket_err - if isinstance(error, SocketTimeout): - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout) - ) - else: - raise NewConnectionError( - self, - "Failed to establish a new connection: %s" % error - ) - else: - raise NewConnectionError( - self, - "Failed to establish a new connection: %s" % e - ) - - except SocketError as e: # Defensive: PySocks should catch all these. - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e) - - return conn - - -# We don't need to duplicate the Verified/Unverified distinction from -# urllib3/connection.py here because the HTTPSConnection will already have been -# correctly set to either the Verified or Unverified form by that module. This -# means the SOCKSHTTPSConnection will automatically be the correct type. -class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): - pass - - -class SOCKSHTTPConnectionPool(HTTPConnectionPool): - ConnectionCls = SOCKSConnection - - -class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): - ConnectionCls = SOCKSHTTPSConnection - - -class SOCKSProxyManager(PoolManager): - """ - A version of the urllib3 ProxyManager that routes connections via the - defined SOCKS proxy. - """ - pool_classes_by_scheme = { - 'http': SOCKSHTTPConnectionPool, - 'https': SOCKSHTTPSConnectionPool, - } - - def __init__(self, proxy_url, username=None, password=None, - num_pools=10, headers=None, **connection_pool_kw): - parsed = parse_url(proxy_url) - - if parsed.scheme == 'socks5': - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = False - elif parsed.scheme == 'socks5h': - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = True - elif parsed.scheme == 'socks4': - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = False - elif parsed.scheme == 'socks4a': - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = True - else: - raise ValueError( - "Unable to determine SOCKS version from %s" % proxy_url - ) - - self.proxy_url = proxy_url - - socks_options = { - 'socks_version': socks_version, - 'proxy_host': parsed.host, - 'proxy_port': parsed.port, - 'username': username, - 'password': password, - 'rdns': rdns - } - connection_pool_kw['_socks_options'] = socks_options - - super(SOCKSProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw - ) - - self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/exceptions.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/exceptions.py deleted file mode 100644 index 6c4be58..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/exceptions.py +++ /dev/null @@ -1,246 +0,0 @@ -from __future__ import absolute_import -from .packages.six.moves.http_client import ( - IncompleteRead as httplib_IncompleteRead -) -# Base Exceptions - - -class HTTPError(Exception): - "Base exception used by this module." - pass - - -class HTTPWarning(Warning): - "Base warning used by this module." - pass - - -class PoolError(HTTPError): - "Base exception for errors caused within a pool." - def __init__(self, pool, message): - self.pool = pool - HTTPError.__init__(self, "%s: %s" % (pool, message)) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, None) - - -class RequestError(PoolError): - "Base exception for PoolErrors that have associated URLs." - def __init__(self, pool, url, message): - self.url = url - PoolError.__init__(self, pool, message) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, self.url, None) - - -class SSLError(HTTPError): - "Raised when SSL certificate fails in an HTTPS connection." - pass - - -class ProxyError(HTTPError): - "Raised when the connection to a proxy fails." - pass - - -class DecodeError(HTTPError): - "Raised when automatic decoding based on Content-Type fails." - pass - - -class ProtocolError(HTTPError): - "Raised when something unexpected happens mid-request/response." - pass - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -# Leaf Exceptions - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param string url: The requested Url - :param exceptions.Exception reason: The underlying error - - """ - - def __init__(self, pool, url, reason=None): - self.reason = reason - - message = "Max retries exceeded with url: %s (Caused by %r)" % ( - url, reason) - - RequestError.__init__(self, pool, url, message) - - -class HostChangedError(RequestError): - "Raised when an existing pool gets a request for a foreign host." - - def __init__(self, pool, url, retries=3): - message = "Tried to open a foreign host with url: %s" % url - RequestError.__init__(self, pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """ Raised when passing an invalid state to a timeout """ - pass - - -class TimeoutError(HTTPError): - """ Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`. - """ - pass - - -class ReadTimeoutError(TimeoutError, RequestError): - "Raised when a socket timeout occurs while receiving data from a server" - pass - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - "Raised when a socket timeout occurs while connecting to a server" - pass - - -class NewConnectionError(ConnectTimeoutError, PoolError): - "Raised when we fail to establish a new connection. Usually ECONNREFUSED." - pass - - -class EmptyPoolError(PoolError): - "Raised when a pool runs out of connections and no more are allowed." - pass - - -class ClosedPoolError(PoolError): - "Raised when a request enters a pool after the pool has been closed." - pass - - -class LocationValueError(ValueError, HTTPError): - "Raised when there is something wrong with a given URL input." - pass - - -class LocationParseError(LocationValueError): - "Raised when get_host or similar fails to parse the URL input." - - def __init__(self, location): - message = "Failed to parse: %s" % location - HTTPError.__init__(self, message) - - self.location = location - - -class ResponseError(HTTPError): - "Used as a container for an error reason supplied in a MaxRetryError." - GENERIC_ERROR = 'too many error responses' - SPECIFIC_ERROR = 'too many {status_code} error responses' - - -class SecurityWarning(HTTPWarning): - "Warned when perfoming security reducing actions" - pass - - -class SubjectAltNameWarning(SecurityWarning): - "Warned when connecting to a host with a certificate missing a SAN." - pass - - -class InsecureRequestWarning(SecurityWarning): - "Warned when making an unverified HTTPS request." - pass - - -class SystemTimeWarning(SecurityWarning): - "Warned when system time is suspected to be wrong" - pass - - -class InsecurePlatformWarning(SecurityWarning): - "Warned when certain SSL configuration is not available on a platform." - pass - - -class SNIMissingWarning(HTTPWarning): - "Warned when making a HTTPS request without SNI available." - pass - - -class DependencyWarning(HTTPWarning): - """ - Warned when an attempt is made to import a module with missing optional - dependencies. - """ - pass - - -class ResponseNotChunked(ProtocolError, ValueError): - "Response needs to be chunked in order to read it as chunks." - pass - - -class BodyNotHttplibCompatible(HTTPError): - """ - Body should be httplib.HTTPResponse like (have an fp attribute which - returns raw chunks) for read_chunked(). - """ - pass - - -class IncompleteRead(HTTPError, httplib_IncompleteRead): - """ - Response length doesn't match expected Content-Length - - Subclass of http_client.IncompleteRead to allow int value - for `partial` to avoid creating large objects on streamed - reads. - """ - def __init__(self, partial, expected): - super(IncompleteRead, self).__init__(partial, expected) - - def __repr__(self): - return ('IncompleteRead(%i bytes read, ' - '%i more expected)' % (self.partial, self.expected)) - - -class InvalidHeader(HTTPError): - "The header provided was somehow invalid." - pass - - -class ProxySchemeUnknown(AssertionError, ValueError): - "ProxyManager does not support the supplied scheme" - # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. - - def __init__(self, scheme): - message = "Not supported proxy scheme %s" % scheme - super(ProxySchemeUnknown, self).__init__(message) - - -class HeaderParsingError(HTTPError): - "Raised by assert_header_parsing, but we convert it to a log.warning statement." - def __init__(self, defects, unparsed_data): - message = '%s, unparsed data: %r' % (defects or 'Unknown', unparsed_data) - super(HeaderParsingError, self).__init__(message) - - -class UnrewindableBodyError(HTTPError): - "urllib3 encountered an error when trying to rewind a body" - pass diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/fields.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/fields.py deleted file mode 100644 index 19b0ae0..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/fields.py +++ /dev/null @@ -1,178 +0,0 @@ -from __future__ import absolute_import -import email.utils -import mimetypes - -from .packages import six - - -def guess_content_type(filename, default='application/octet-stream'): - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param(name, value): - """ - Helper function to format and quote a single header parameter. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows RFC 2231, as - suggested by RFC 2388 Section 4.4. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - if not any(ch in value for ch in '"\\\r\n'): - result = '%s="%s"' % (name, value) - try: - result.encode('ascii') - except (UnicodeEncodeError, UnicodeDecodeError): - pass - else: - return result - if not six.PY3 and isinstance(value, six.text_type): # Python 2: - value = value.encode('utf-8') - value = email.utils.encode_rfc2231(value, 'utf-8') - value = '%s*=%s' % (name, value) - return value - - -class RequestField(object): - """ - A data container for request body parameters. - - :param name: - The name of this request field. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. - :param headers: - An optional dict-like object of headers to initially use for the field. - """ - def __init__(self, name, data, filename=None, headers=None): - self._name = name - self._filename = filename - self.data = data - self.headers = {} - if headers: - self.headers = dict(headers) - - @classmethod - def from_tuples(cls, fieldname, value): - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls(fieldname, data, filename=filename) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name, value): - """ - Overridable helper function to format a single header parameter. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - return format_header_param(name, value) - - def _render_parts(self, header_parts): - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) typles or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - parts = [] - iterable = header_parts - if isinstance(header_parts, dict): - iterable = header_parts.items() - - for name, value in iterable: - if value is not None: - parts.append(self._render_part(name, value)) - - return '; '.join(parts) - - def render_headers(self): - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ['Content-Disposition', 'Content-Type', 'Content-Location'] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append('%s: %s' % (sort_key, self.headers[sort_key])) - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append('%s: %s' % (header_name, header_value)) - - lines.append('\r\n') - return '\r\n'.join(lines) - - def make_multipart(self, content_disposition=None, content_type=None, - content_location=None): - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - self.headers['Content-Disposition'] = content_disposition or 'form-data' - self.headers['Content-Disposition'] += '; '.join([ - '', self._render_parts( - (('name', self._name), ('filename', self._filename)) - ) - ]) - self.headers['Content-Type'] = content_type - self.headers['Content-Location'] = content_location diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/filepost.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/filepost.py deleted file mode 100644 index cd11cee..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/filepost.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import absolute_import -import codecs - -from uuid import uuid4 -from io import BytesIO - -from .packages import six -from .packages.six import b -from .fields import RequestField - -writer = codecs.lookup('utf-8')[3] - - -def choose_boundary(): - """ - Our embarrassingly-simple replacement for mimetools.choose_boundary. - """ - return uuid4().hex - - -def iter_field_objects(fields): - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - if isinstance(fields, dict): - i = six.iteritems(fields) - else: - i = iter(fields) - - for field in i: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def iter_fields(fields): - """ - .. deprecated:: 1.6 - - Iterate over fields. - - The addition of :class:`~urllib3.fields.RequestField` makes this function - obsolete. Instead, use :func:`iter_field_objects`, which returns - :class:`~urllib3.fields.RequestField` objects. - - Supports list of (k, v) tuples and dicts. - """ - if isinstance(fields, dict): - return ((k, v) for k, v in six.iteritems(fields)) - - return ((k, v) for k, v in fields) - - -def encode_multipart_formdata(fields, boundary=None): - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`mimetools.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(b('--%s\r\n' % (boundary))) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, six.text_type): - writer(body).write(data) - else: - body.write(data) - - body.write(b'\r\n') - - body.write(b('--%s--\r\n' % (boundary))) - - content_type = str('multipart/form-data; boundary=%s' % boundary) - - return body.getvalue(), content_type diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/__init__.py deleted file mode 100644 index 170e974..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import absolute_import - -from . import ssl_match_hostname - -__all__ = ('ssl_match_hostname', ) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/makefile.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/makefile.py deleted file mode 100644 index 75b80dc..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/backports/makefile.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.makefile -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``socket.makefile`` method for use with anything that -wants to create a "fake" socket object. -""" -import io - -from socket import SocketIO - - -def backport_makefile(self, mode="r", buffering=None, encoding=None, - errors=None, newline=None): - """ - Backport of ``socket.makefile`` from Python 3.5. - """ - if not set(mode) <= set(["r", "w", "b"]): - raise ValueError( - "invalid mode %r (only r, w, b allowed)" % (mode,) - ) - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = SocketIO(self, rawmode) - self._makefile_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ordered_dict.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ordered_dict.py deleted file mode 100644 index 4479363..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ordered_dict.py +++ /dev/null @@ -1,259 +0,0 @@ -# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. -# Passes Python2.7's test suite and incorporates all the latest updates. -# Copyright 2009 Raymond Hettinger, released under the MIT License. -# http://code.activestate.com/recipes/576693/ -try: - from thread import get_ident as _get_ident -except ImportError: - from dummy_thread import get_ident as _get_ident - -try: - from _abcoll import KeysView, ValuesView, ItemsView -except ImportError: - pass - - -class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args),)) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running={}): - 'od.__repr__() <==> repr(od)' - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/six.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/six.py deleted file mode 100644 index 190c023..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/six.py +++ /dev/null @@ -1,868 +0,0 @@ -"""Utilities for writing code that runs on Python 2 and 3""" - -# Copyright (c) 2010-2015 Benjamin Peterson -# -# 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. - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.10.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - raise tp, value, tb -""") - - -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - if from_value is None: - raise value - raise value from from_value -""") -elif sys.version_info[:2] > (3, 2): - exec_("""def raise_from(value, from_value): - raise value from from_value -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(meta): - - def __new__(cls, name, this_bases, d): - return meta(name, bases, d) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def python_2_unicode_compatible(klass): - """ - A decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py deleted file mode 100644 index d6594eb..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -import sys - -try: - # Our match_hostname function is the same as 3.5's, so we only want to - # import the match_hostname function if it's at least that good. - if sys.version_info < (3, 5): - raise ImportError("Fallback to vendored code") - - from ssl import CertificateError, match_hostname -except ImportError: - try: - # Backport of the function from a pypi module - from backports.ssl_match_hostname import CertificateError, match_hostname - except ImportError: - # Our vendored copy - from ._implementation import CertificateError, match_hostname - -# Not needed, but documenting what we provide. -__all__ = ('CertificateError', 'match_hostname') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py deleted file mode 100644 index 92c9bc7..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/packages/ssl_match_hostname/_implementation.py +++ /dev/null @@ -1,157 +0,0 @@ -"""The match_hostname() function from Python 3.3.3, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html - -import re -import sys - -# ipaddress has been backported to 2.6+ in pypi. If it is installed on the -# system, use it to handle IPAddress ServerAltnames (this was added in -# python-3.5) otherwise only do DNS matching. This allows -# backports.ssl_match_hostname to continue to be used all the way back to -# python-2.4. -try: - from pip._vendor import ipaddress -except ImportError: - ipaddress = None - -__version__ = '3.5.0.1' - - -class CertificateError(ValueError): - pass - - -def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r'.') - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - -def _to_unicode(obj): - if isinstance(obj, str) and sys.version_info < (3,): - obj = unicode(obj, encoding='ascii', errors='strict') - return obj - -def _ipaddress_match(ipname, host_ip): - """Exact matching of IP addresses. - - RFC 6125 explicitly doesn't define an algorithm for this - (section 1.7.2 - "Out of Scope"). - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address - # Divergence from upstream: ipaddress can't handle byte str - ip = ipaddress.ip_address(_to_unicode(ipname).rstrip()) - return ip == host_ip - - -def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - try: - # Divergence from upstream: ipaddress can't handle byte str - host_ip = ipaddress.ip_address(_to_unicode(hostname)) - except ValueError: - # Not an IP address (common case) - host_ip = None - except UnicodeError: - # Divergence from upstream: Have to deal with ipaddress not taking - # byte strings. addresses should be all ascii, so we consider it not - # an ipaddress in this case - host_ip = None - except AttributeError: - # Divergence from upstream: Make ipaddress library optional - if ipaddress is None: - host_ip = None - else: - raise - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if host_ip is None and _dnsname_match(value, hostname): - return - dnsnames.append(value) - elif key == 'IP Address': - if host_ip is not None and _ipaddress_match(value, host_ip): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" - % (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" - % (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/poolmanager.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/poolmanager.py deleted file mode 100644 index 4ae9174..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/poolmanager.py +++ /dev/null @@ -1,440 +0,0 @@ -from __future__ import absolute_import -import collections -import functools -import logging - -from ._collections import RecentlyUsedContainer -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from .connectionpool import port_by_scheme -from .exceptions import LocationValueError, MaxRetryError, ProxySchemeUnknown -from .packages.six.moves.urllib.parse import urljoin -from .request import RequestMethods -from .util.url import parse_url -from .util.retry import Retry - - -__all__ = ['PoolManager', 'ProxyManager', 'proxy_from_url'] - - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ('key_file', 'cert_file', 'cert_reqs', 'ca_certs', - 'ssl_version', 'ca_cert_dir', 'ssl_context') - -# All known keyword arguments that could be provided to the pool manager, its -# pools, or the underlying connections. This is used to construct a pool key. -_key_fields = ( - 'key_scheme', # str - 'key_host', # str - 'key_port', # int - 'key_timeout', # int or float or Timeout - 'key_retries', # int or Retry - 'key_strict', # bool - 'key_block', # bool - 'key_source_address', # str - 'key_key_file', # str - 'key_cert_file', # str - 'key_cert_reqs', # str - 'key_ca_certs', # str - 'key_ssl_version', # str - 'key_ca_cert_dir', # str - 'key_ssl_context', # instance of ssl.SSLContext or urllib3.util.ssl_.SSLContext - 'key_maxsize', # int - 'key_headers', # dict - 'key__proxy', # parsed proxy url - 'key__proxy_headers', # dict - 'key_socket_options', # list of (level (int), optname (int), value (int or str)) tuples - 'key__socks_options', # dict - 'key_assert_hostname', # bool or string - 'key_assert_fingerprint', # str -) - -#: The namedtuple class used to construct keys for the connection pool. -#: All custom key schemes should include the fields in this key at a minimum. -PoolKey = collections.namedtuple('PoolKey', _key_fields) - - -def _default_key_normalizer(key_class, request_context): - """ - Create a pool key out of a request context dictionary. - - According to RFC 3986, both the scheme and host are case-insensitive. - Therefore, this function normalizes both before constructing the pool - key for an HTTPS request. If you wish to change this behaviour, provide - alternate callables to ``key_fn_by_scheme``. - - :param key_class: - The class to use when constructing the key. This should be a namedtuple - with the ``scheme`` and ``host`` keys at a minimum. - :type key_class: namedtuple - :param request_context: - A dictionary-like object that contain the context for a request. - :type request_context: dict - - :return: A namedtuple that can be used as a connection pool key. - :rtype: PoolKey - """ - # Since we mutate the dictionary, make a copy first - context = request_context.copy() - context['scheme'] = context['scheme'].lower() - context['host'] = context['host'].lower() - - # These are both dictionaries and need to be transformed into frozensets - for key in ('headers', '_proxy_headers', '_socks_options'): - if key in context and context[key] is not None: - context[key] = frozenset(context[key].items()) - - # The socket_options key may be a list and needs to be transformed into a - # tuple. - socket_opts = context.get('socket_options') - if socket_opts is not None: - context['socket_options'] = tuple(socket_opts) - - # Map the kwargs to the names in the namedtuple - this is necessary since - # namedtuples can't have fields starting with '_'. - for key in list(context.keys()): - context['key_' + key] = context.pop(key) - - # Default to ``None`` for keys missing from the context - for field in key_class._fields: - if field not in context: - context[field] = None - - return key_class(**context) - - -#: A dictionary that maps a scheme to a callable that creates a pool key. -#: This can be used to alter the way pool keys are constructed, if desired. -#: Each PoolManager makes a copy of this dictionary so they can be configured -#: globally here, or individually on the instance. -key_fn_by_scheme = { - 'http': functools.partial(_default_key_normalizer, PoolKey), - 'https': functools.partial(_default_key_normalizer, PoolKey), -} - -pool_classes_by_scheme = { - 'http': HTTPConnectionPool, - 'https': HTTPSConnectionPool, -} - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \\**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example:: - - >>> manager = PoolManager(num_pools=2) - >>> r = manager.request('GET', 'http://google.com/') - >>> r = manager.request('GET', 'http://google.com/mail') - >>> r = manager.request('GET', 'http://yahoo.com/') - >>> len(manager.pools) - 2 - - """ - - proxy = None - - def __init__(self, num_pools=10, headers=None, **connection_pool_kw): - RequestMethods.__init__(self, headers) - self.connection_pool_kw = connection_pool_kw - self.pools = RecentlyUsedContainer(num_pools, - dispose_func=lambda p: p.close()) - - # Locally set the pool classes and keys so other PoolManagers can - # override them. - self.pool_classes_by_scheme = pool_classes_by_scheme - self.key_fn_by_scheme = key_fn_by_scheme.copy() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool(self, scheme, host, port, request_context=None): - """ - Create a new :class:`ConnectionPool` based on host, port, scheme, and - any additional pool keyword arguments. - - If ``request_context`` is provided, it is provided as keyword arguments - to the pool class used. This method is used to actually create the - connection pools handed out by :meth:`connection_from_url` and - companion methods. It is intended to be overridden for customization. - """ - pool_cls = self.pool_classes_by_scheme[scheme] - if request_context is None: - request_context = self.connection_pool_kw.copy() - - # Although the context has everything necessary to create the pool, - # this function has historically only used the scheme, host, and port - # in the positional args. When an API change is acceptable these can - # be removed. - for key in ('scheme', 'host', 'port'): - request_context.pop(key, None) - - if scheme == 'http': - for kw in SSL_KEYWORDS: - request_context.pop(kw, None) - - return pool_cls(host, port, **request_context) - - def clear(self): - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host(self, host, port=None, scheme='http', pool_kwargs=None): - """ - Get a :class:`ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is - provided, it is merged with the instance's ``connection_pool_kw`` - variable and used to create the new connection pool, if one is - needed. - """ - - if not host: - raise LocationValueError("No host specified.") - - request_context = self._merge_pool_kwargs(pool_kwargs) - request_context['scheme'] = scheme or 'http' - if not port: - port = port_by_scheme.get(request_context['scheme'].lower(), 80) - request_context['port'] = port - request_context['host'] = host - - return self.connection_from_context(request_context) - - def connection_from_context(self, request_context): - """ - Get a :class:`ConnectionPool` based on the request context. - - ``request_context`` must at least contain the ``scheme`` key and its - value must be a key in ``key_fn_by_scheme`` instance variable. - """ - scheme = request_context['scheme'].lower() - pool_key_constructor = self.key_fn_by_scheme[scheme] - pool_key = pool_key_constructor(request_context) - - return self.connection_from_pool_key(pool_key, request_context=request_context) - - def connection_from_pool_key(self, pool_key, request_context=None): - """ - Get a :class:`ConnectionPool` based on the provided pool key. - - ``pool_key`` should be a namedtuple that only contains immutable - objects. At a minimum it must have the ``scheme``, ``host``, and - ``port`` fields. - """ - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - scheme = request_context['scheme'] - host = request_context['host'] - port = request_context['port'] - pool = self._new_pool(scheme, host, port, request_context=request_context) - self.pools[pool_key] = pool - - return pool - - def connection_from_url(self, url, pool_kwargs=None): - """ - Similar to :func:`urllib3.connectionpool.connection_from_url`. - - If ``pool_kwargs`` is not provided and a new pool needs to be - constructed, ``self.connection_pool_kw`` is used to initialize - the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` - is provided, it is used instead. Note that if a new pool does not - need to be created for the request, the provided ``pool_kwargs`` are - not used. - """ - u = parse_url(url) - return self.connection_from_host(u.host, port=u.port, scheme=u.scheme, - pool_kwargs=pool_kwargs) - - def _merge_pool_kwargs(self, override): - """ - Merge a dictionary of override values for self.connection_pool_kw. - - This does not modify self.connection_pool_kw and returns a new dict. - Any keys in the override dictionary with a value of ``None`` are - removed from the merged dictionary. - """ - base_pool_kwargs = self.connection_pool_kw.copy() - if override: - for key, value in override.items(): - if value is None: - try: - del base_pool_kwargs[key] - except KeyError: - pass - else: - base_pool_kwargs[key] = value - return base_pool_kwargs - - def urlopen(self, method, url, redirect=True, **kw): - """ - Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw['assert_same_host'] = False - kw['redirect'] = False - if 'headers' not in kw: - kw['headers'] = self.headers - - if self.proxy is not None and u.scheme == "http": - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - # RFC 7231, Section 6.4.4 - if response.status == 303: - method = 'GET' - - retries = kw.get('retries') - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - raise - return response - - kw['retries'] = retries - kw['redirect'] = redirect - - log.info("Redirecting %s -> %s", url, redirect_location) - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary contaning headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - Example: - >>> proxy = urllib3.ProxyManager('http://localhost:3128/') - >>> r1 = proxy.request('GET', 'http://google.com/') - >>> r2 = proxy.request('GET', 'http://httpbin.org/') - >>> len(proxy.pools) - 1 - >>> r3 = proxy.request('GET', 'https://httpbin.org/') - >>> r4 = proxy.request('GET', 'https://twitter.com/') - >>> len(proxy.pools) - 3 - - """ - - def __init__(self, proxy_url, num_pools=10, headers=None, - proxy_headers=None, **connection_pool_kw): - - if isinstance(proxy_url, HTTPConnectionPool): - proxy_url = '%s://%s:%i' % (proxy_url.scheme, proxy_url.host, - proxy_url.port) - proxy = parse_url(proxy_url) - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - if proxy.scheme not in ("http", "https"): - raise ProxySchemeUnknown(proxy.scheme) - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - - connection_pool_kw['_proxy'] = self.proxy - connection_pool_kw['_proxy_headers'] = self.proxy_headers - - super(ProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw) - - def connection_from_host(self, host, port=None, scheme='http', pool_kwargs=None): - if scheme == "https": - return super(ProxyManager, self).connection_from_host( - host, port, scheme, pool_kwargs=pool_kwargs) - - return super(ProxyManager, self).connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs) - - def _set_proxy_headers(self, url, headers=None): - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {'Accept': '*/*'} - - netloc = parse_url(url).netloc - if netloc: - headers_['Host'] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen(self, method, url, redirect=True, **kw): - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - - if u.scheme == "http": - # For proxied HTTPS requests, httplib sets the necessary headers - # on the CONNECT to the proxy. For HTTP, we'll definitely - # need to set 'Host' at the very least. - headers = kw.get('headers', self.headers) - kw['headers'] = self._set_proxy_headers(url, headers) - - return super(ProxyManager, self).urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url, **kw): - return ProxyManager(proxy_url=url, **kw) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/request.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/request.py deleted file mode 100644 index c0fddff..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/request.py +++ /dev/null @@ -1,148 +0,0 @@ -from __future__ import absolute_import - -from .filepost import encode_multipart_formdata -from .packages.six.moves.urllib.parse import urlencode - - -__all__ = ['RequestMethods'] - - -class RequestMethods(object): - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`~urllib3.connectionpool.HTTPConnectionPool` and - :class:`~urllib3.poolmanager.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = set(['DELETE', 'GET', 'HEAD', 'OPTIONS']) - - def __init__(self, headers=None): - self.headers = headers or {} - - def urlopen(self, method, url, body=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **kw): # Abstract - raise NotImplemented("Classes extending RequestMethods must implement " - "their own ``urlopen`` method.") - - def request(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - """ - method = method.upper() - - if method in self._encode_url_methods: - return self.request_encode_url(method, url, fields=fields, - headers=headers, - **urlopen_kw) - else: - return self.request_encode_body(method, url, fields=fields, - headers=headers, - **urlopen_kw) - - def request_encode_url(self, method, url, fields=None, headers=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': headers} - extra_kw.update(urlopen_kw) - - if fields: - url += '?' + urlencode(fields) - - return self.urlopen(method, url, **extra_kw) - - def request_encode_body(self, method, url, fields=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :meth:`urllib.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimick behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': {}} - - if fields: - if 'body' in urlopen_kw: - raise TypeError( - "request got values for both 'fields' and 'body', can only specify one.") - - if encode_multipart: - body, content_type = encode_multipart_formdata(fields, boundary=multipart_boundary) - else: - body, content_type = urlencode(fields), 'application/x-www-form-urlencoded' - - extra_kw['body'] = body - extra_kw['headers'] = {'Content-Type': content_type} - - extra_kw['headers'].update(headers) - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/response.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/response.py deleted file mode 100644 index d3e5a1e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/response.py +++ /dev/null @@ -1,626 +0,0 @@ -from __future__ import absolute_import -from contextlib import contextmanager -import zlib -import io -import logging -from socket import timeout as SocketTimeout -from socket import error as SocketError - -from ._collections import HTTPHeaderDict -from .exceptions import ( - BodyNotHttplibCompatible, ProtocolError, DecodeError, ReadTimeoutError, - ResponseNotChunked, IncompleteRead, InvalidHeader -) -from .packages.six import string_types as basestring, binary_type, PY3 -from .packages.six.moves import http_client as httplib -from .connection import HTTPException, BaseSSLError -from .util.response import is_fp_closed, is_response_to_head - -log = logging.getLogger(__name__) - - -class DeflateDecoder(object): - - def __init__(self): - self._first_try = True - self._data = binary_type() - self._obj = zlib.decompressobj() - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - - if not self._first_try: - return self._obj.decompress(data) - - self._data += data - try: - decompressed = self._obj.decompress(data) - if decompressed: - self._first_try = False - self._data = None - return decompressed - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress(self._data) - finally: - self._data = None - - -class GzipDecoder(object): - - def __init__(self): - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - return self._obj.decompress(data) - - -def _get_decoder(mode): - if mode == 'gzip': - return GzipDecoder() - - return DeflateDecoder() - - -class HTTPResponse(io.IOBase): - """ - HTTP Response container. - - Backwards-compatible to httplib's HTTPResponse but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in httplib.HTTPResponse: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, attempts to decode specific content-encoding's based on headers - (like 'gzip' and 'deflate') will be skipped and raw data will be used - instead. - - :param original_response: - When this HTTPResponse wrapper is generated from an httplib.HTTPResponse - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - - :param retries: - The retries contains the last :class:`~urllib3.util.retry.Retry` that - was used during the request. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - - CONTENT_DECODERS = ['gzip', 'deflate'] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - def __init__(self, body='', headers=None, status=0, version=0, reason=None, - strict=0, preload_content=True, decode_content=True, - original_response=None, pool=None, connection=None, - retries=None, enforce_content_length=False, request_method=None): - - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) - self.status = status - self.version = version - self.reason = reason - self.strict = strict - self.decode_content = decode_content - self.retries = retries - self.enforce_content_length = enforce_content_length - - self._decoder = None - self._body = None - self._fp = None - self._original_response = original_response - self._fp_bytes_read = 0 - - if body and isinstance(body, (basestring, binary_type)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, 'read'): - self._fp = body - - # Are we using the chunked-style of transfer encoding? - self.chunked = False - self.chunk_left = None - tr_enc = self.headers.get('transfer-encoding', '').lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - # Determine length of response - self.length_remaining = self._init_length(request_method) - - # If requested, preload the body. - if preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def get_redirect_location(self): - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get('location') - - return False - - def release_conn(self): - if not self._pool or not self._connection: - return - - self._pool._put_conn(self._connection) - self._connection = None - - @property - def data(self): - # For backwords-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body - - if self._fp: - return self.read(cache_content=True) - - @property - def connection(self): - return self._connection - - def tell(self): - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``HTTPResponse.read`` if bytes - are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_length(self, request_method): - """ - Set initial length value for Response content if available. - """ - length = self.headers.get('content-length') - - if length is not None and self.chunked: - # This Response will fail with an IncompleteRead if it can't be - # received as chunked. This method falls back to attempt reading - # the response before raising an exception. - log.warning("Received response with both Content-Length and " - "Transfer-Encoding set. This is expressly forbidden " - "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " - "attempting to process response as Transfer-Encoding: " - "chunked.") - return None - - elif length is not None: - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = set([int(val) for val in length.split(',')]) - if len(lengths) > 1: - raise InvalidHeader("Content-Length contained multiple " - "unmatching values (%s)" % length) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - # Convert status to int for comparison - # In some cases, httplib returns a status of "_UNKNOWN" - try: - status = int(self.status) - except ValueError: - status = 0 - - # Check for responses that shouldn't include a body - if status in (204, 304) or 100 <= status < 200 or request_method == 'HEAD': - length = 0 - - return length - - def _init_decoder(self): - """ - Set-up the _decoder attribute if necessary. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get('content-encoding', '').lower() - if self._decoder is None and content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - - def _decode(self, data, decode_content, flush_decoder): - """ - Decode the data passed in and potentially flush the decoder. - """ - try: - if decode_content and self._decoder: - data = self._decoder.decompress(data) - except (IOError, zlib.error) as e: - content_encoding = self.headers.get('content-encoding', '').lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, e) - - if flush_decoder and decode_content: - data += self._flush_decoder() - - return data - - def _flush_decoder(self): - """ - Flushes the decoder. Should only be called if the decoder is actually - being used. - """ - if self._decoder: - buf = self._decoder.decompress(b'') - return buf + self._decoder.flush() - - return b'' - - @contextmanager - def _error_catcher(self): - """ - Catch low-level python exceptions, instead re-raising urllib3 - variants, so that low-level exceptions are not leaked in the - high-level api. - - On exit, release the connection back to the pool. - """ - clean_exit = False - - try: - try: - yield - - except SocketTimeout: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if 'read operation timed out' not in str(e): # Defensive: - # This shouldn't happen but just in case we're missing an edge - # case, let's avoid swallowing SSL errors. - raise - - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except (HTTPException, SocketError) as e: - # This includes IncompleteRead. - raise ProtocolError('Connection broken: %r' % e, e) - - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now to ensure that the connection is - # released back to the pool. - if self._original_response: - self._original_response.close() - - # Closing the response may not actually be sufficient to close - # everything, so if we have a hold of the connection close that - # too. - if self._connection: - self._connection.close() - - # If we hold the original response but it's closed now, we should - # return the connection back to the pool. - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def read(self, amt=None, decode_content=None, cache_content=False): - """ - Similar to :meth:`httplib.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if self._fp is None: - return - - flush_decoder = False - data = None - - with self._error_catcher(): - if amt is None: - # cStringIO doesn't like amt=None - data = self._fp.read() - flush_decoder = True - else: - cache_content = False - data = self._fp.read(amt) - if amt != 0 and not data: # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - flush_decoder = True - if self.enforce_content_length and self.length_remaining not in (0, None): - # This is an edge case that httplib failed to cover due - # to concerns of backward compatibility. We're - # addressing it here to make sure IncompleteRead is - # raised during streaming, so all calls with incorrect - # Content-Length are caught. - raise IncompleteRead(self._fp_bytes_read, self.length_remaining) - - if data: - self._fp_bytes_read += len(data) - if self.length_remaining is not None: - self.length_remaining -= len(data) - - data = self._decode(data, decode_content, flush_decoder) - - if cache_content: - self._body = data - - return data - - def stream(self, amt=2**16, decode_content=None): - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked and self.supports_chunked_reads(): - for line in self.read_chunked(amt, decode_content=decode_content): - yield line - else: - while not is_fp_closed(self._fp): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - @classmethod - def from_httplib(ResponseCls, r, **response_kw): - """ - Given an :class:`httplib.HTTPResponse` instance ``r``, return a - corresponding :class:`urllib3.response.HTTPResponse` object. - - Remaining parameters are passed to the HTTPResponse constructor, along - with ``original_response=r``. - """ - headers = r.msg - - if not isinstance(headers, HTTPHeaderDict): - if PY3: # Python 3 - headers = HTTPHeaderDict(headers.items()) - else: # Python 2 - headers = HTTPHeaderDict.from_httplib(headers) - - # HTTPResponse objects in Python 3 don't have a .strict attribute - strict = getattr(r, 'strict', 0) - resp = ResponseCls(body=r, - headers=headers, - status=r.status, - version=r.version, - reason=r.reason, - strict=strict, - original_response=r, - **response_kw) - return resp - - # Backwards-compatibility methods for httplib.HTTPResponse - def getheaders(self): - return self.headers - - def getheader(self, name, default=None): - return self.headers.get(name, default) - - # Backwards compatibility for http.cookiejar - def info(self): - return self.headers - - # Overrides from io.IOBase - def close(self): - if not self.closed: - self._fp.close() - - if self._connection: - self._connection.close() - - @property - def closed(self): - if self._fp is None: - return True - elif hasattr(self._fp, 'isclosed'): - return self._fp.isclosed() - elif hasattr(self._fp, 'closed'): - return self._fp.closed - else: - return True - - def fileno(self): - if self._fp is None: - raise IOError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise IOError("The file-like object this HTTPResponse is wrapped " - "around has no file descriptor") - - def flush(self): - if self._fp is not None and hasattr(self._fp, 'flush'): - return self._fp.flush() - - def readable(self): - # This method is required for `io` module compatibility. - return True - - def readinto(self, b): - # This method is required for `io` module compatibility. - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[:len(temp)] = temp - return len(temp) - - def supports_chunked_reads(self): - """ - Checks if the underlying file-like object looks like a - httplib.HTTPResponse object. We do this by testing for the fp - attribute. If it is present we assume it returns raw chunks as - processed by read_chunked(). - """ - return hasattr(self._fp, 'fp') - - def _update_chunk_length(self): - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return - line = self._fp.fp.readline() - line = line.split(b';', 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - # Invalid chunked protocol response, abort. - self.close() - raise httplib.IncompleteRead(line) - - def _handle_chunk(self, amt): - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) - returned_chunk = chunk - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif amt < self.chunk_left: - value = self._fp._safe_read(amt) - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk - - def read_chunked(self, amt=None, decode_content=None): - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked( - "Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing.") - if not self.supports_chunked_reads(): - raise BodyNotHttplibCompatible( - "Body should be httplib.HTTPResponse like. " - "It should have have an fp attribute which returns raw chunks.") - - # Don't bother reading the body of a HEAD request. - if self._original_response and is_response_to_head(self._original_response): - self._original_response.close() - return - - with self._error_catcher(): - while True: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - decoded = self._decode(chunk, decode_content=decode_content, - flush_decoder=False) - if decoded: - yield decoded - - if decode_content: - # On CPython and PyPy, we should never need to flush the - # decoder. However, on Jython we *might* need to, so - # lets defensively do it anyway. - decoded = self._flush_decoder() - if decoded: # Platform-specific: Jython. - yield decoded - - # Chunk content ends with \r\n: discard it. - while True: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b'\r\n': - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/__init__.py deleted file mode 100644 index 2f2770b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import absolute_import -# For backwards compatibility, provide imports that used to be here. -from .connection import is_connection_dropped -from .request import make_headers -from .response import is_fp_closed -from .ssl_ import ( - SSLContext, - HAS_SNI, - IS_PYOPENSSL, - IS_SECURETRANSPORT, - assert_fingerprint, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import ( - current_time, - Timeout, -) - -from .retry import Retry -from .url import ( - get_host, - parse_url, - split_first, - Url, -) -from .wait import ( - wait_for_read, - wait_for_write -) - -__all__ = ( - 'HAS_SNI', - 'IS_PYOPENSSL', - 'IS_SECURETRANSPORT', - 'SSLContext', - 'Retry', - 'Timeout', - 'Url', - 'assert_fingerprint', - 'current_time', - 'is_connection_dropped', - 'is_fp_closed', - 'get_host', - 'parse_url', - 'make_headers', - 'resolve_cert_reqs', - 'resolve_ssl_version', - 'split_first', - 'ssl_wrap_socket', - 'wait_for_read', - 'wait_for_write' -) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/connection.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/connection.py deleted file mode 100644 index bf699cf..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/connection.py +++ /dev/null @@ -1,130 +0,0 @@ -from __future__ import absolute_import -import socket -from .wait import wait_for_read -from .selectors import HAS_SELECT, SelectorError - - -def is_connection_dropped(conn): # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - - :param conn: - :class:`httplib.HTTPConnection` object. - - Note: For platforms like AppEngine, this will always return ``False`` to - let the platform handle connection recycling transparently for us. - """ - sock = getattr(conn, 'sock', False) - if sock is False: # Platform-specific: AppEngine - return False - if sock is None: # Connection already closed (such as by httplib). - return True - - if not HAS_SELECT: - return False - - try: - return bool(wait_for_read(sock, timeout=0.0)) - except SelectorError: - return True - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -# One additional modification is that we avoid binding to IPv6 servers -# discovered in DNS if the system doesn't have IPv6 functionality. -def create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, socket_options=None): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - if host.startswith('['): - host = host.strip('[]') - err = None - - # Using the value from allowed_gai_family() in the context of getaddrinfo lets - # us select whether to work with IPv4 DNS records, IPv6 records, or both. - # The original create_connection function always returns all records. - family = allowed_gai_family() - - for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - _set_socket_options(sock, socket_options) - - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error as e: - err = e - if sock is not None: - sock.close() - sock = None - - if err is not None: - raise err - - raise socket.error("getaddrinfo returns an empty list") - - -def _set_socket_options(sock, options): - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) - - -def allowed_gai_family(): - """This function is designed to work in the context of - getaddrinfo, where family=socket.AF_UNSPEC is the default and - will perform a DNS search for both IPv6 and IPv4 records.""" - - family = socket.AF_INET - if HAS_IPV6: - family = socket.AF_UNSPEC - return family - - -def _has_ipv6(host): - """ Returns True if the system can bind an IPv6 address. """ - sock = None - has_ipv6 = False - - if socket.has_ipv6: - # has_ipv6 returns true if cPython was compiled with IPv6 support. - # It does not tell us if the system has IPv6 support enabled. To - # determine that we must bind to an IPv6 address. - # https://github.com/shazow/urllib3/pull/611 - # https://bugs.python.org/issue658327 - try: - sock = socket.socket(socket.AF_INET6) - sock.bind((host, 0)) - has_ipv6 = True - except Exception: - pass - - if sock: - sock.close() - return has_ipv6 - - -HAS_IPV6 = _has_ipv6('::1') diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/request.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/request.py deleted file mode 100644 index 3ddfcd5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/request.py +++ /dev/null @@ -1,118 +0,0 @@ -from __future__ import absolute_import -from base64 import b64encode - -from ..packages.six import b, integer_types -from ..exceptions import UnrewindableBodyError - -ACCEPT_ENCODING = 'gzip,deflate' -_FAILEDTELL = object() - - -def make_headers(keep_alive=None, accept_encoding=None, user_agent=None, - basic_auth=None, proxy_basic_auth=None, disable_cache=None): - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example:: - - >>> make_headers(keep_alive=True, user_agent="Batman/1.0") - {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - >>> make_headers(accept_encoding=True) - {'accept-encoding': 'gzip,deflate'} - """ - headers = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ','.join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers['accept-encoding'] = accept_encoding - - if user_agent: - headers['user-agent'] = user_agent - - if keep_alive: - headers['connection'] = 'keep-alive' - - if basic_auth: - headers['authorization'] = 'Basic ' + \ - b64encode(b(basic_auth)).decode('utf-8') - - if proxy_basic_auth: - headers['proxy-authorization'] = 'Basic ' + \ - b64encode(b(proxy_basic_auth)).decode('utf-8') - - if disable_cache: - headers['cache-control'] = 'no-cache' - - return headers - - -def set_file_position(body, pos): - """ - If a position is provided, move file to that point. - Otherwise, we'll attempt to record a position for future use. - """ - if pos is not None: - rewind_body(body, pos) - elif getattr(body, 'tell', None) is not None: - try: - pos = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body. - pos = _FAILEDTELL - - return pos - - -def rewind_body(body, body_pos): - """ - Attempt to rewind body to a certain position. - Primarily used for request redirects and retries. - - :param body: - File-like object that supports seek. - - :param int pos: - Position to seek to in file. - """ - body_seek = getattr(body, 'seek', None) - if body_seek is not None and isinstance(body_pos, integer_types): - try: - body_seek(body_pos) - except (IOError, OSError): - raise UnrewindableBodyError("An error occurred when rewinding request " - "body for redirect/retry.") - elif body_pos is _FAILEDTELL: - raise UnrewindableBodyError("Unable to record file position for rewinding " - "request body during a redirect/retry.") - else: - raise ValueError("body_pos must be of type integer, " - "instead it was %s." % type(body_pos)) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/response.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/response.py deleted file mode 100644 index 67cf730..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/response.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import absolute_import -from ..packages.six.moves import http_client as httplib - -from ..exceptions import HeaderParsingError - - -def is_fp_closed(obj): - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check `isclosed()` first, in case Python3 doesn't set `closed`. - # GH Issue #928 - return obj.isclosed() - except AttributeError: - pass - - try: - # Check via the official file-like-object way. - return obj.closed - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") - - -def assert_header_parsing(headers): - """ - Asserts whether all headers have been successfully parsed. - Extracts encountered errors from the result of parsing headers. - - Only works on Python 3. - - :param headers: Headers to verify. - :type headers: `httplib.HTTPMessage`. - - :raises urllib3.exceptions.HeaderParsingError: - If parsing errors are found. - """ - - # This will fail silently if we pass in the wrong kind of parameter. - # To make debugging easier add an explicit check. - if not isinstance(headers, httplib.HTTPMessage): - raise TypeError('expected httplib.Message, got {0}.'.format( - type(headers))) - - defects = getattr(headers, 'defects', None) - get_payload = getattr(headers, 'get_payload', None) - - unparsed_data = None - if get_payload: # Platform-specific: Python 3. - unparsed_data = get_payload() - - if defects or unparsed_data: - raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) - - -def is_response_to_head(response): - """ - Checks whether the request of a response has been a HEAD-request. - Handles the quirks of AppEngine. - - :param conn: - :type conn: :class:`httplib.HTTPResponse` - """ - # FIXME: Can we do this somehow without accessing private httplib _method? - method = response._method - if isinstance(method, int): # Platform-specific: Appengine - return method == 3 - return method.upper() == 'HEAD' diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/retry.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/retry.py deleted file mode 100644 index c603cb4..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/retry.py +++ /dev/null @@ -1,401 +0,0 @@ -from __future__ import absolute_import -import time -import logging -from collections import namedtuple -from itertools import takewhile -import email -import re - -from ..exceptions import ( - ConnectTimeoutError, - MaxRetryError, - ProtocolError, - ReadTimeoutError, - ResponseError, - InvalidHeader, -) -from ..packages import six - - -log = logging.getLogger(__name__) - -# Data structure for representing the metadata of requests that result in a retry. -RequestHistory = namedtuple('RequestHistory', ["method", "url", "error", - "status", "redirect_location"]) - - -class Retry(object): - """ Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool:: - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', retries=Retry(10)) - - Retries can be disabled by passing ``False``:: - - response = http.request('GET', 'http://example.com/', retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. It's a good idea to set this to some sensibly-high value to - account for unexpected edge cases and avoid infinite retry loops. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int status: - How many times to retry on bad status codes. - - These are retries made on responses, where status code matches - ``status_forcelist``. - - Set to ``0`` to fail on the first retry of this type. - - :param iterable method_whitelist: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - idempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_METHOD_WHITELIST`. - - Set to a ``False`` value to retry on any verb. - - :param iterable status_forcelist: - A set of integer HTTP status codes that we should force a retry on. - A retry is initiated if the request method is in ``method_whitelist`` - and the response status code is in ``status_forcelist``. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts after the second try - (most errors are resolved immediately by a second try without a - delay). urllib3 will sleep for:: - - {backoff factor} * (2 ^ ({number of total retries} - 1)) - - seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep - for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer - than :attr:`Retry.BACKOFF_MAX`. - - By default, backoff is disabled (set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - - :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: - whether we should raise an exception, or return a response, - if status falls in ``status_forcelist`` range and retries have - been exhausted. - - :param tuple history: The history of the request encountered during - each call to :meth:`~Retry.increment`. The list is in the order - the requests occurred. Each list item is of class :class:`RequestHistory`. - - :param bool respect_retry_after_header: - Whether to respect Retry-After header on status codes defined as - :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. - - """ - - DEFAULT_METHOD_WHITELIST = frozenset([ - 'HEAD', 'GET', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']) - - RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) - - #: Maximum backoff time. - BACKOFF_MAX = 120 - - def __init__(self, total=10, connect=None, read=None, redirect=None, status=None, - method_whitelist=DEFAULT_METHOD_WHITELIST, status_forcelist=None, - backoff_factor=0, raise_on_redirect=True, raise_on_status=True, - history=None, respect_retry_after_header=True): - - self.total = total - self.connect = connect - self.read = read - self.status = status - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.method_whitelist = method_whitelist - self.backoff_factor = backoff_factor - self.raise_on_redirect = raise_on_redirect - self.raise_on_status = raise_on_status - self.history = history or tuple() - self.respect_retry_after_header = respect_retry_after_header - - def new(self, **kw): - params = dict( - total=self.total, - connect=self.connect, read=self.read, redirect=self.redirect, status=self.status, - method_whitelist=self.method_whitelist, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - raise_on_redirect=self.raise_on_redirect, - raise_on_status=self.raise_on_status, - history=self.history, - ) - params.update(kw) - return type(self)(**params) - - @classmethod - def from_int(cls, retries, redirect=True, default=None): - """ Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r", retries, new_retries) - return new_retries - - def get_backoff_time(self): - """ Formula for computing the current backoff - - :rtype: float - """ - # We want to consider only the last consecutive errors sequence (Ignore redirects). - consecutive_errors_len = len(list(takewhile(lambda x: x.redirect_location is None, - reversed(self.history)))) - if consecutive_errors_len <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) - return min(self.BACKOFF_MAX, backoff_value) - - def parse_retry_after(self, retry_after): - # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 - if re.match(r"^\s*[0-9]+\s*$", retry_after): - seconds = int(retry_after) - else: - retry_date_tuple = email.utils.parsedate(retry_after) - if retry_date_tuple is None: - raise InvalidHeader("Invalid Retry-After header: %s" % retry_after) - retry_date = time.mktime(retry_date_tuple) - seconds = retry_date - time.time() - - if seconds < 0: - seconds = 0 - - return seconds - - def get_retry_after(self, response): - """ Get the value of Retry-After in seconds. """ - - retry_after = response.getheader("Retry-After") - - if retry_after is None: - return None - - return self.parse_retry_after(retry_after) - - def sleep_for_retry(self, response=None): - retry_after = self.get_retry_after(response) - if retry_after: - time.sleep(retry_after) - return True - - return False - - def _sleep_backoff(self): - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def sleep(self, response=None): - """ Sleep between retry attempts. - - This method will respect a server's ``Retry-After`` response header - and sleep the duration of the time requested. If that is not present, it - will use an exponential backoff. By default, the backoff factor is 0 and - this method will return immediately. - """ - - if response: - slept = self.sleep_for_retry(response) - if slept: - return - - self._sleep_backoff() - - def _is_connection_error(self, err): - """ Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err): - """ Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def _is_method_retryable(self, method): - """ Checks if a given HTTP method should be retried upon, depending if - it is included on the method whitelist. - """ - if self.method_whitelist and method.upper() not in self.method_whitelist: - return False - - return True - - def is_retry(self, method, status_code, has_retry_after=False): - """ Is this method/status code retryable? (Based on whitelists and control - variables such as the number of total retries to allow, whether to - respect the Retry-After header, whether this header is present, and - whether the returned status code is on the list of status codes to - be retried upon on the presence of the aforementioned header) - """ - if not self._is_method_retryable(method): - return False - - if self.status_forcelist and status_code in self.status_forcelist: - return True - - return (self.total and self.respect_retry_after_header and - has_retry_after and (status_code in self.RETRY_AFTER_STATUS_CODES)) - - def is_exhausted(self): - """ Are we out of retries? """ - retry_counts = (self.total, self.connect, self.read, self.redirect, self.status) - retry_counts = list(filter(None, retry_counts)) - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment(self, method=None, url=None, response=None, error=None, - _pool=None, _stacktrace=None): - """ Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.HTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise six.reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - connect = self.connect - read = self.read - redirect = self.redirect - status_count = self.status - cause = 'unknown' - status = None - redirect_location = None - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise six.reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False or not self._is_method_retryable(method): - raise six.reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = 'too many redirects' - redirect_location = response.get_redirect_location() - status = response.status - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and a the given method is in the whitelist - cause = ResponseError.GENERIC_ERROR - if response and response.status: - if status_count is not None: - status_count -= 1 - cause = ResponseError.SPECIFIC_ERROR.format( - status_code=response.status) - status = response.status - - history = self.history + (RequestHistory(method, url, error, status, redirect_location),) - - new_retry = self.new( - total=total, - connect=connect, read=read, redirect=redirect, status=status_count, - history=history) - - if new_retry.is_exhausted(): - raise MaxRetryError(_pool, url, error or ResponseError(cause)) - - log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) - - return new_retry - - def __repr__(self): - return ('{cls.__name__}(total={self.total}, connect={self.connect}, ' - 'read={self.read}, redirect={self.redirect}, status={self.status})').format( - cls=type(self), self=self) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/selectors.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/selectors.py deleted file mode 100644 index d75cb26..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/selectors.py +++ /dev/null @@ -1,581 +0,0 @@ -# Backport of selectors.py from Python 3.5+ to support Python < 3.4 -# Also has the behavior specified in PEP 475 which is to retry syscalls -# in the case of an EINTR error. This module is required because selectors34 -# does not follow this behavior and instead returns that no dile descriptor -# events have occurred rather than retry the syscall. The decision to drop -# support for select.devpoll is made to maintain 100% test coverage. - -import errno -import math -import select -import socket -import sys -import time -from collections import namedtuple, Mapping - -try: - monotonic = time.monotonic -except (AttributeError, ImportError): # Python 3.3< - monotonic = time.time - -EVENT_READ = (1 << 0) -EVENT_WRITE = (1 << 1) - -HAS_SELECT = True # Variable that shows whether the platform has a selector. -_SYSCALL_SENTINEL = object() # Sentinel in case a system call returns None. -_DEFAULT_SELECTOR = None - - -class SelectorError(Exception): - def __init__(self, errcode): - super(SelectorError, self).__init__() - self.errno = errcode - - def __repr__(self): - return "<SelectorError errno={0}>".format(self.errno) - - def __str__(self): - return self.__repr__() - - -def _fileobj_to_fd(fileobj): - """ Return a file descriptor from a file object. If - given an integer will simply return that integer back. """ - if isinstance(fileobj, int): - fd = fileobj - else: - try: - fd = int(fileobj.fileno()) - except (AttributeError, TypeError, ValueError): - raise ValueError("Invalid file object: {0!r}".format(fileobj)) - if fd < 0: - raise ValueError("Invalid file descriptor: {0}".format(fd)) - return fd - - -# Determine which function to use to wrap system calls because Python 3.5+ -# already handles the case when system calls are interrupted. -if sys.version_info >= (3, 5): - def _syscall_wrapper(func, _, *args, **kwargs): - """ This is the short-circuit version of the below logic - because in Python 3.5+ all system calls automatically restart - and recalculate their timeouts. """ - try: - return func(*args, **kwargs) - except (OSError, IOError, select.error) as e: - errcode = None - if hasattr(e, "errno"): - errcode = e.errno - raise SelectorError(errcode) -else: - def _syscall_wrapper(func, recalc_timeout, *args, **kwargs): - """ Wrapper function for syscalls that could fail due to EINTR. - All functions should be retried if there is time left in the timeout - in accordance with PEP 475. """ - timeout = kwargs.get("timeout", None) - if timeout is None: - expires = None - recalc_timeout = False - else: - timeout = float(timeout) - if timeout < 0.0: # Timeout less than 0 treated as no timeout. - expires = None - else: - expires = monotonic() + timeout - - args = list(args) - if recalc_timeout and "timeout" not in kwargs: - raise ValueError( - "Timeout must be in args or kwargs to be recalculated") - - result = _SYSCALL_SENTINEL - while result is _SYSCALL_SENTINEL: - try: - result = func(*args, **kwargs) - # OSError is thrown by select.select - # IOError is thrown by select.epoll.poll - # select.error is thrown by select.poll.poll - # Aren't we thankful for Python 3.x rework for exceptions? - except (OSError, IOError, select.error) as e: - # select.error wasn't a subclass of OSError in the past. - errcode = None - if hasattr(e, "errno"): - errcode = e.errno - elif hasattr(e, "args"): - errcode = e.args[0] - - # Also test for the Windows equivalent of EINTR. - is_interrupt = (errcode == errno.EINTR or (hasattr(errno, "WSAEINTR") and - errcode == errno.WSAEINTR)) - - if is_interrupt: - if expires is not None: - current_time = monotonic() - if current_time > expires: - raise OSError(errno=errno.ETIMEDOUT) - if recalc_timeout: - if "timeout" in kwargs: - kwargs["timeout"] = expires - current_time - continue - if errcode: - raise SelectorError(errcode) - else: - raise - return result - - -SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data']) - - -class _SelectorMapping(Mapping): - """ Mapping of file objects to selector keys """ - - def __init__(self, selector): - self._selector = selector - - def __len__(self): - return len(self._selector._fd_to_key) - - def __getitem__(self, fileobj): - try: - fd = self._selector._fileobj_lookup(fileobj) - return self._selector._fd_to_key[fd] - except KeyError: - raise KeyError("{0!r} is not registered.".format(fileobj)) - - def __iter__(self): - return iter(self._selector._fd_to_key) - - -class BaseSelector(object): - """ Abstract Selector class - - A selector supports registering file objects to be monitored - for specific I/O events. - - A file object is a file descriptor or any object with a - `fileno()` method. An arbitrary object can be attached to the - file object which can be used for example to store context info, - a callback, etc. - - A selector can use various implementations (select(), poll(), epoll(), - and kqueue()) depending on the platform. The 'DefaultSelector' class uses - the most efficient implementation for the current platform. - """ - def __init__(self): - # Maps file descriptors to keys. - self._fd_to_key = {} - - # Read-only mapping returned by get_map() - self._map = _SelectorMapping(self) - - def _fileobj_lookup(self, fileobj): - """ Return a file descriptor from a file object. - This wraps _fileobj_to_fd() to do an exhaustive - search in case the object is invalid but we still - have it in our map. Used by unregister() so we can - unregister an object that was previously registered - even if it is closed. It is also used by _SelectorMapping - """ - try: - return _fileobj_to_fd(fileobj) - except ValueError: - - # Search through all our mapped keys. - for key in self._fd_to_key.values(): - if key.fileobj is fileobj: - return key.fd - - # Raise ValueError after all. - raise - - def register(self, fileobj, events, data=None): - """ Register a file object for a set of events to monitor. """ - if (not events) or (events & ~(EVENT_READ | EVENT_WRITE)): - raise ValueError("Invalid events: {0!r}".format(events)) - - key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data) - - if key.fd in self._fd_to_key: - raise KeyError("{0!r} (FD {1}) is already registered" - .format(fileobj, key.fd)) - - self._fd_to_key[key.fd] = key - return key - - def unregister(self, fileobj): - """ Unregister a file object from being monitored. """ - try: - key = self._fd_to_key.pop(self._fileobj_lookup(fileobj)) - except KeyError: - raise KeyError("{0!r} is not registered".format(fileobj)) - - # Getting the fileno of a closed socket on Windows errors with EBADF. - except socket.error as e: # Platform-specific: Windows. - if e.errno != errno.EBADF: - raise - else: - for key in self._fd_to_key.values(): - if key.fileobj is fileobj: - self._fd_to_key.pop(key.fd) - break - else: - raise KeyError("{0!r} is not registered".format(fileobj)) - return key - - def modify(self, fileobj, events, data=None): - """ Change a registered file object monitored events and data. """ - # NOTE: Some subclasses optimize this operation even further. - try: - key = self._fd_to_key[self._fileobj_lookup(fileobj)] - except KeyError: - raise KeyError("{0!r} is not registered".format(fileobj)) - - if events != key.events: - self.unregister(fileobj) - key = self.register(fileobj, events, data) - - elif data != key.data: - # Use a shortcut to update the data. - key = key._replace(data=data) - self._fd_to_key[key.fd] = key - - return key - - def select(self, timeout=None): - """ Perform the actual selection until some monitored file objects - are ready or the timeout expires. """ - raise NotImplementedError() - - def close(self): - """ Close the selector. This must be called to ensure that all - underlying resources are freed. """ - self._fd_to_key.clear() - self._map = None - - def get_key(self, fileobj): - """ Return the key associated with a registered file object. """ - mapping = self.get_map() - if mapping is None: - raise RuntimeError("Selector is closed") - try: - return mapping[fileobj] - except KeyError: - raise KeyError("{0!r} is not registered".format(fileobj)) - - def get_map(self): - """ Return a mapping of file objects to selector keys """ - return self._map - - def _key_from_fd(self, fd): - """ Return the key associated to a given file descriptor - Return None if it is not found. """ - try: - return self._fd_to_key[fd] - except KeyError: - return None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - -# Almost all platforms have select.select() -if hasattr(select, "select"): - class SelectSelector(BaseSelector): - """ Select-based selector. """ - def __init__(self): - super(SelectSelector, self).__init__() - self._readers = set() - self._writers = set() - - def register(self, fileobj, events, data=None): - key = super(SelectSelector, self).register(fileobj, events, data) - if events & EVENT_READ: - self._readers.add(key.fd) - if events & EVENT_WRITE: - self._writers.add(key.fd) - return key - - def unregister(self, fileobj): - key = super(SelectSelector, self).unregister(fileobj) - self._readers.discard(key.fd) - self._writers.discard(key.fd) - return key - - def _select(self, r, w, timeout=None): - """ Wrapper for select.select because timeout is a positional arg """ - return select.select(r, w, [], timeout) - - def select(self, timeout=None): - # Selecting on empty lists on Windows errors out. - if not len(self._readers) and not len(self._writers): - return [] - - timeout = None if timeout is None else max(timeout, 0.0) - ready = [] - r, w, _ = _syscall_wrapper(self._select, True, self._readers, - self._writers, timeout) - r = set(r) - w = set(w) - for fd in r | w: - events = 0 - if fd in r: - events |= EVENT_READ - if fd in w: - events |= EVENT_WRITE - - key = self._key_from_fd(fd) - if key: - ready.append((key, events & key.events)) - return ready - - -if hasattr(select, "poll"): - class PollSelector(BaseSelector): - """ Poll-based selector """ - def __init__(self): - super(PollSelector, self).__init__() - self._poll = select.poll() - - def register(self, fileobj, events, data=None): - key = super(PollSelector, self).register(fileobj, events, data) - event_mask = 0 - if events & EVENT_READ: - event_mask |= select.POLLIN - if events & EVENT_WRITE: - event_mask |= select.POLLOUT - self._poll.register(key.fd, event_mask) - return key - - def unregister(self, fileobj): - key = super(PollSelector, self).unregister(fileobj) - self._poll.unregister(key.fd) - return key - - def _wrap_poll(self, timeout=None): - """ Wrapper function for select.poll.poll() so that - _syscall_wrapper can work with only seconds. """ - if timeout is not None: - if timeout <= 0: - timeout = 0 - else: - # select.poll.poll() has a resolution of 1 millisecond, - # round away from zero to wait *at least* timeout seconds. - timeout = math.ceil(timeout * 1e3) - - result = self._poll.poll(timeout) - return result - - def select(self, timeout=None): - ready = [] - fd_events = _syscall_wrapper(self._wrap_poll, True, timeout=timeout) - for fd, event_mask in fd_events: - events = 0 - if event_mask & ~select.POLLIN: - events |= EVENT_WRITE - if event_mask & ~select.POLLOUT: - events |= EVENT_READ - - key = self._key_from_fd(fd) - if key: - ready.append((key, events & key.events)) - - return ready - - -if hasattr(select, "epoll"): - class EpollSelector(BaseSelector): - """ Epoll-based selector """ - def __init__(self): - super(EpollSelector, self).__init__() - self._epoll = select.epoll() - - def fileno(self): - return self._epoll.fileno() - - def register(self, fileobj, events, data=None): - key = super(EpollSelector, self).register(fileobj, events, data) - events_mask = 0 - if events & EVENT_READ: - events_mask |= select.EPOLLIN - if events & EVENT_WRITE: - events_mask |= select.EPOLLOUT - _syscall_wrapper(self._epoll.register, False, key.fd, events_mask) - return key - - def unregister(self, fileobj): - key = super(EpollSelector, self).unregister(fileobj) - try: - _syscall_wrapper(self._epoll.unregister, False, key.fd) - except SelectorError: - # This can occur when the fd was closed since registry. - pass - return key - - def select(self, timeout=None): - if timeout is not None: - if timeout <= 0: - timeout = 0.0 - else: - # select.epoll.poll() has a resolution of 1 millisecond - # but luckily takes seconds so we don't need a wrapper - # like PollSelector. Just for better rounding. - timeout = math.ceil(timeout * 1e3) * 1e-3 - timeout = float(timeout) - else: - timeout = -1.0 # epoll.poll() must have a float. - - # We always want at least 1 to ensure that select can be called - # with no file descriptors registered. Otherwise will fail. - max_events = max(len(self._fd_to_key), 1) - - ready = [] - fd_events = _syscall_wrapper(self._epoll.poll, True, - timeout=timeout, - maxevents=max_events) - for fd, event_mask in fd_events: - events = 0 - if event_mask & ~select.EPOLLIN: - events |= EVENT_WRITE - if event_mask & ~select.EPOLLOUT: - events |= EVENT_READ - - key = self._key_from_fd(fd) - if key: - ready.append((key, events & key.events)) - return ready - - def close(self): - self._epoll.close() - super(EpollSelector, self).close() - - -if hasattr(select, "kqueue"): - class KqueueSelector(BaseSelector): - """ Kqueue / Kevent-based selector """ - def __init__(self): - super(KqueueSelector, self).__init__() - self._kqueue = select.kqueue() - - def fileno(self): - return self._kqueue.fileno() - - def register(self, fileobj, events, data=None): - key = super(KqueueSelector, self).register(fileobj, events, data) - if events & EVENT_READ: - kevent = select.kevent(key.fd, - select.KQ_FILTER_READ, - select.KQ_EV_ADD) - - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - - if events & EVENT_WRITE: - kevent = select.kevent(key.fd, - select.KQ_FILTER_WRITE, - select.KQ_EV_ADD) - - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - - return key - - def unregister(self, fileobj): - key = super(KqueueSelector, self).unregister(fileobj) - if key.events & EVENT_READ: - kevent = select.kevent(key.fd, - select.KQ_FILTER_READ, - select.KQ_EV_DELETE) - try: - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - except SelectorError: - pass - if key.events & EVENT_WRITE: - kevent = select.kevent(key.fd, - select.KQ_FILTER_WRITE, - select.KQ_EV_DELETE) - try: - _syscall_wrapper(self._kqueue.control, False, [kevent], 0, 0) - except SelectorError: - pass - - return key - - def select(self, timeout=None): - if timeout is not None: - timeout = max(timeout, 0) - - max_events = len(self._fd_to_key) * 2 - ready_fds = {} - - kevent_list = _syscall_wrapper(self._kqueue.control, True, - None, max_events, timeout) - - for kevent in kevent_list: - fd = kevent.ident - event_mask = kevent.filter - events = 0 - if event_mask == select.KQ_FILTER_READ: - events |= EVENT_READ - if event_mask == select.KQ_FILTER_WRITE: - events |= EVENT_WRITE - - key = self._key_from_fd(fd) - if key: - if key.fd not in ready_fds: - ready_fds[key.fd] = (key, events & key.events) - else: - old_events = ready_fds[key.fd][1] - ready_fds[key.fd] = (key, (events | old_events) & key.events) - - return list(ready_fds.values()) - - def close(self): - self._kqueue.close() - super(KqueueSelector, self).close() - - -if not hasattr(select, 'select'): # Platform-specific: AppEngine - HAS_SELECT = False - - -def _can_allocate(struct): - """ Checks that select structs can be allocated by the underlying - operating system, not just advertised by the select module. We don't - check select() because we'll be hopeful that most platforms that - don't have it available will not advertise it. (ie: GAE) """ - try: - # select.poll() objects won't fail until used. - if struct == 'poll': - p = select.poll() - p.poll(0) - - # All others will fail on allocation. - else: - getattr(select, struct)().close() - return True - except (OSError, AttributeError) as e: - return False - - -# Choose the best implementation, roughly: -# kqueue == epoll > poll > select. Devpoll not supported. (See above) -# select() also can't accept a FD > FD_SETSIZE (usually around 1024) -def DefaultSelector(): - """ This function serves as a first call for DefaultSelector to - detect if the select module is being monkey-patched incorrectly - by eventlet, greenlet, and preserve proper behavior. """ - global _DEFAULT_SELECTOR - if _DEFAULT_SELECTOR is None: - if _can_allocate('kqueue'): - _DEFAULT_SELECTOR = KqueueSelector - elif _can_allocate('epoll'): - _DEFAULT_SELECTOR = EpollSelector - elif _can_allocate('poll'): - _DEFAULT_SELECTOR = PollSelector - elif hasattr(select, 'select'): - _DEFAULT_SELECTOR = SelectSelector - else: # Platform-specific: AppEngine - raise ValueError('Platform does not have a selector') - return _DEFAULT_SELECTOR() diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/ssl_.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/ssl_.py deleted file mode 100644 index dafc75b..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/ssl_.py +++ /dev/null @@ -1,341 +0,0 @@ -from __future__ import absolute_import -import errno -import warnings -import hmac - -from binascii import hexlify, unhexlify -from hashlib import md5, sha1, sha256 - -from ..exceptions import SSLError, InsecurePlatformWarning, SNIMissingWarning - - -SSLContext = None -HAS_SNI = False -IS_PYOPENSSL = False -IS_SECURETRANSPORT = False - -# Maps the length of a digest to a possible hash function producing this digest -HASHFUNC_MAP = { - 32: md5, - 40: sha1, - 64: sha256, -} - - -def _const_compare_digest_backport(a, b): - """ - Compare two digests of equal length in constant time. - - The digests must be of type str/bytes. - Returns True if the digests match, and False otherwise. - """ - result = abs(len(a) - len(b)) - for l, r in zip(bytearray(a), bytearray(b)): - result |= l ^ r - return result == 0 - - -_const_compare_digest = getattr(hmac, 'compare_digest', - _const_compare_digest_backport) - - -try: # Test for SSL features - import ssl - from ssl import wrap_socket, CERT_NONE, PROTOCOL_SSLv23 - from ssl import HAS_SNI # Has SNI? -except ImportError: - pass - - -try: - from ssl import OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION -except ImportError: - OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 - OP_NO_COMPRESSION = 0x20000 - -# A secure default. -# Sources for more information on TLS ciphers: -# -# - https://wiki.mozilla.org/Security/Server_Side_TLS -# - https://www.ssllabs.com/projects/best-practices/index.html -# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ -# -# The general intent is: -# - Prefer TLS 1.3 cipher suites -# - prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE), -# - prefer ECDHE over DHE for better performance, -# - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and -# security, -# - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common, -# - disable NULL authentication, MD5 MACs and DSS for security reasons. -DEFAULT_CIPHERS = ':'.join([ - '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', - 'RSA+AESGCM', - 'RSA+AES', - '!aNULL', - '!eNULL', - '!MD5', -]) - -try: - from ssl import SSLContext # Modern SSL? -except ImportError: - import sys - - class SSLContext(object): # Platform-specific: Python 2 & 3.1 - supports_set_ciphers = ((2, 7) <= sys.version_info < (3,) or - (3, 2) <= sys.version_info) - - def __init__(self, protocol_version): - self.protocol = protocol_version - # Use default values from a real SSLContext - self.check_hostname = False - self.verify_mode = ssl.CERT_NONE - self.ca_certs = None - self.options = 0 - self.certfile = None - self.keyfile = None - self.ciphers = None - - def load_cert_chain(self, certfile, keyfile): - self.certfile = certfile - self.keyfile = keyfile - - def load_verify_locations(self, cafile=None, capath=None): - self.ca_certs = cafile - - if capath is not None: - raise SSLError("CA directories not supported in older Pythons") - - def set_ciphers(self, cipher_suite): - if not self.supports_set_ciphers: - raise TypeError( - 'Your version of Python does not support setting ' - 'a custom cipher suite. Please upgrade to Python ' - '2.7, 3.2, or later if you need this functionality.' - ) - self.ciphers = cipher_suite - - def wrap_socket(self, socket, server_hostname=None, server_side=False): - warnings.warn( - 'A true SSLContext object is not available. This prevents ' - 'urllib3 from configuring SSL appropriately and may cause ' - 'certain SSL connections to fail. You can upgrade to a newer ' - 'version of Python to solve this. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings', - InsecurePlatformWarning - ) - kwargs = { - 'keyfile': self.keyfile, - 'certfile': self.certfile, - 'ca_certs': self.ca_certs, - 'cert_reqs': self.verify_mode, - 'ssl_version': self.protocol, - 'server_side': server_side, - } - if self.supports_set_ciphers: # Platform-specific: Python 2.7+ - return wrap_socket(socket, ciphers=self.ciphers, **kwargs) - else: # Platform-specific: Python 2.6 - return wrap_socket(socket, **kwargs) - - -def assert_fingerprint(cert, fingerprint): - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - fingerprint = fingerprint.replace(':', '').lower() - digest_length = len(fingerprint) - hashfunc = HASHFUNC_MAP.get(digest_length) - if not hashfunc: - raise SSLError( - 'Fingerprint of invalid length: {0}'.format(fingerprint)) - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - cert_digest = hashfunc(cert).digest() - - if not _const_compare_digest(cert_digest, fingerprint_bytes): - raise SSLError('Fingerprints did not match. Expected "{0}", got "{1}".' - .format(fingerprint, hexlify(cert_digest))) - - -def resolve_cert_reqs(candidate): - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_NONE`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbrevation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_NONE - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'CERT_' + candidate) - return res - - return candidate - - -def resolve_ssl_version(candidate): - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_SSLv23 - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'PROTOCOL_' + candidate) - return res - - return candidate - - -def create_urllib3_context(ssl_version=None, cert_reqs=None, - options=None, ciphers=None): - """All arguments have the same meaning as ``ssl_wrap_socket``. - - By default, this function does a lot of the same work that - ``ssl.create_default_context`` does on Python 3.4+. It: - - - Disables SSLv2, SSLv3, and compression - - Sets a restricted set of server ciphers - - If you wish to enable SSLv3, you can do:: - - from pip._vendor.urllib3.util import ssl_ - context = ssl_.create_urllib3_context() - context.options &= ~ssl_.OP_NO_SSLv3 - - You can do the same to enable compression (substituting ``COMPRESSION`` - for ``SSLv3`` in the last line above). - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``. - :param ciphers: - Which cipher suites to allow the server to select. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - context = SSLContext(ssl_version or ssl.PROTOCOL_SSLv23) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - - context.options |= options - - if getattr(context, 'supports_set_ciphers', True): # Platform-specific: Python 2.6 - context.set_ciphers(ciphers or DEFAULT_CIPHERS) - - context.verify_mode = cert_reqs - if getattr(context, 'check_hostname', None) is not None: # Platform-specific: Python 3.2 - # We do our own verification, including fingerprints and alternative - # hostnames. So disable it here - context.check_hostname = False - return context - - -def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, - ca_certs=None, server_hostname=None, - ssl_version=None, ciphers=None, ssl_context=None, - ca_cert_dir=None): - """ - All arguments except for server_hostname, ssl_context, and ca_cert_dir have - the same meaning as they do when using :func:`ssl.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. This is not - supported on Python 2.6 as the ssl module does not support it. - :param ca_cert_dir: - A directory containing CA certificates in multiple separate files, as - supported by OpenSSL's -CApath flag or the capath argument to - SSLContext.load_verify_locations(). - """ - context = ssl_context - if context is None: - # Note: This branch of code and all the variables in it are no longer - # used by urllib3 itself. We should consider deprecating and removing - # this code. - context = create_urllib3_context(ssl_version, cert_reqs, - ciphers=ciphers) - - if ca_certs or ca_cert_dir: - try: - context.load_verify_locations(ca_certs, ca_cert_dir) - except IOError as e: # Platform-specific: Python 2.6, 2.7, 3.2 - raise SSLError(e) - # Py33 raises FileNotFoundError which subclasses OSError - # These are not equivalent unless we check the errno attribute - except OSError as e: # Platform-specific: Python 3.3 and beyond - if e.errno == errno.ENOENT: - raise SSLError(e) - raise - elif getattr(context, 'load_default_certs', None) is not None: - # try to load OS default certs; works well on Windows (require Python3.4+) - context.load_default_certs() - - if certfile: - context.load_cert_chain(certfile, keyfile) - if HAS_SNI: # Platform-specific: OpenSSL with enabled SNI - return context.wrap_socket(sock, server_hostname=server_hostname) - - warnings.warn( - 'An HTTPS request has been made, but the SNI (Subject Name ' - 'Indication) extension to TLS is not available on this platform. ' - 'This may cause the server to present an incorrect TLS ' - 'certificate, which can cause validation failures. You can upgrade to ' - 'a newer version of Python to solve this. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings', - SNIMissingWarning - ) - return context.wrap_socket(sock) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/timeout.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/timeout.py deleted file mode 100644 index cec817e..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/timeout.py +++ /dev/null @@ -1,242 +0,0 @@ -from __future__ import absolute_import -# The default socket timeout, used by httplib to indicate that no timeout was -# specified by the user -from socket import _GLOBAL_DEFAULT_TIMEOUT -import time - -from ..exceptions import TimeoutStateError - -# A sentinel value to indicate that no timeout was specified by the user in -# urllib3 -_Default = object() - - -# Use time.monotonic if available. -current_time = getattr(time, "monotonic", time.time) - - -class Timeout(object): - """ Timeout configuration. - - Timeouts can be defined as a default for a pool:: - - timeout = Timeout(connect=2.0, read=7.0) - http = PoolManager(timeout=timeout) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``:: - - no_timeout = Timeout(connect=None, read=None) - response = http.request('GET', 'http://example.com/, timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: integer, float, or None - - :param connect: - The maximum amount of time to wait for a connection attempt to a server - to succeed. Omitting the parameter will default the connect timeout to - the system default, probably `the global default timeout in socket.py - <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_. - None will set an infinite timeout for connection attempts. - - :type connect: integer, float, or None - - :param read: - The maximum amount of time to wait between consecutive - read operations for a response from the server. Omitting - the parameter will default the read timeout to the system - default, probably `the global default timeout in socket.py - <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_. - None will set an infinite timeout. - - :type read: integer, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - - If your goal is to cut off any request after a set amount of wall clock - time, consider having a second "watcher" thread to cut off a slow - request. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT - - def __init__(self, total=None, connect=_Default, read=_Default): - self._connect = self._validate_timeout(connect, 'connect') - self._read = self._validate_timeout(read, 'read') - self.total = self._validate_timeout(total, 'total') - self._start_connect = None - - def __str__(self): - return '%s(connect=%r, read=%r, total=%r)' % ( - type(self).__name__, self._connect, self._read, self.total) - - @classmethod - def _validate_timeout(cls, value, name): - """ Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If it is a numeric value less than or equal to - zero, or the type is not an integer, float, or None. - """ - if value is _Default: - return cls.DEFAULT_TIMEOUT - - if value is None or value is cls.DEFAULT_TIMEOUT: - return value - - if isinstance(value, bool): - raise ValueError("Timeout cannot be a boolean value. It must " - "be an int, float or None.") - try: - float(value) - except (TypeError, ValueError): - raise ValueError("Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value)) - - try: - if value <= 0: - raise ValueError("Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than or equal to 0." % (name, value)) - except TypeError: # Python 3 - raise ValueError("Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value)) - - return value - - @classmethod - def from_float(cls, timeout): - """ Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, sentinel default object, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self): - """ Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, - total=self.total) - - def start_connect(self): - """ Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = current_time() - return self._start_connect - - def get_connect_duration(self): - """ Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError("Can't get connect duration for timer " - "that has not started.") - return current_time() - self._start_connect - - @property - def connect_timeout(self): - """ Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is self.DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) - - @property - def read_timeout(self): - """ Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if (self.total is not None and - self.total is not self.DEFAULT_TIMEOUT and - self._read is not None and - self._read is not self.DEFAULT_TIMEOUT): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), - self._read)) - elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self._read diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/url.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/url.py deleted file mode 100644 index 6b6f996..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/url.py +++ /dev/null @@ -1,230 +0,0 @@ -from __future__ import absolute_import -from collections import namedtuple - -from ..exceptions import LocationParseError - - -url_attrs = ['scheme', 'auth', 'host', 'port', 'path', 'query', 'fragment'] - -# We only want to normalize urls with an HTTP(S) scheme. -# urllib3 infers URLs without a scheme (None) to be http. -NORMALIZABLE_SCHEMES = ('http', 'https', None) - - -class Url(namedtuple('Url', url_attrs)): - """ - Datastructure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. Both the scheme and host are normalized as they are - both case-insensitive according to RFC 3986. - """ - __slots__ = () - - def __new__(cls, scheme=None, auth=None, host=None, port=None, path=None, - query=None, fragment=None): - if path and not path.startswith('/'): - path = '/' + path - if scheme: - scheme = scheme.lower() - if host and scheme in NORMALIZABLE_SCHEMES: - host = host.lower() - return super(Url, cls).__new__(cls, scheme, auth, host, port, path, - query, fragment) - - @property - def hostname(self): - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self): - """Absolute path including the query string.""" - uri = self.path or '/' - - if self.query is not None: - uri += '?' + self.query - - return uri - - @property - def netloc(self): - """Network location including host and port""" - if self.port: - return '%s:%d' % (self.host, self.port) - return self.host - - @property - def url(self): - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: :: - - >>> U = parse_url('http://google.com/mail/') - >>> U.url - 'http://google.com/mail/' - >>> Url('http', 'username:password', 'host.com', 80, - ... '/path', 'query', 'fragment').url - 'http://username:password@host.com:80/path?query#fragment' - """ - scheme, auth, host, port, path, query, fragment = self - url = '' - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + '://' - if auth is not None: - url += auth + '@' - if host is not None: - url += host - if port is not None: - url += ':' + str(port) - if path is not None: - url += path - if query is not None: - url += '?' + query - if fragment is not None: - url += '#' + fragment - - return url - - def __str__(self): - return self.url - - -def split_first(s, delims): - """ - Given a string and an iterable of delimiters, split on the first found - delimiter. Return two split parts and the matched delimiter. - - If not found, then the first part is the full input string. - - Example:: - - >>> split_first('foo/bar?baz', '?/=') - ('foo', 'bar?baz', '/') - >>> split_first('foo/bar?baz', '123') - ('foo/bar?baz', '', None) - - Scales linearly with number of delims. Not ideal for large number of delims. - """ - min_idx = None - min_delim = None - for d in delims: - idx = s.find(d) - if idx < 0: - continue - - if min_idx is None or idx < min_idx: - min_idx = idx - min_delim = d - - if min_idx is None or min_idx < 0: - return s, '', None - - return s[:min_idx], s[min_idx + 1:], min_delim - - -def parse_url(url): - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - - Partly backwards-compatible with :mod:`urlparse`. - - Example:: - - >>> parse_url('http://google.com/mail/') - Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - >>> parse_url('google.com:80') - Url(scheme=None, host='google.com', port=80, path=None, ...) - >>> parse_url('/foo?bar') - Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - - # While this code has overlap with stdlib's urlparse, it is much - # simplified for our needs and less annoying. - # Additionally, this implementations does silly things to be optimal - # on CPython. - - if not url: - # Empty - return Url() - - scheme = None - auth = None - host = None - port = None - path = None - fragment = None - query = None - - # Scheme - if '://' in url: - scheme, url = url.split('://', 1) - - # Find the earliest Authority Terminator - # (http://tools.ietf.org/html/rfc3986#section-3.2) - url, path_, delim = split_first(url, ['/', '?', '#']) - - if delim: - # Reassemble the path - path = delim + path_ - - # Auth - if '@' in url: - # Last '@' denotes end of auth part - auth, url = url.rsplit('@', 1) - - # IPv6 - if url and url[0] == '[': - host, url = url.split(']', 1) - host += ']' - - # Port - if ':' in url: - _host, port = url.split(':', 1) - - if not host: - host = _host - - if port: - # If given, ports must be integers. No whitespace, no plus or - # minus prefixes, no non-integer digits such as ^2 (superscript). - if not port.isdigit(): - raise LocationParseError(url) - try: - port = int(port) - except ValueError: - raise LocationParseError(url) - else: - # Blank ports are cool, too. (rfc3986#section-3.2.3) - port = None - - elif not host and url: - host = url - - if not path: - return Url(scheme, auth, host, port, path, query, fragment) - - # Fragment - if '#' in path: - path, fragment = path.split('#', 1) - - # Query - if '?' in path: - path, query = path.split('?', 1) - - return Url(scheme, auth, host, port, path, query, fragment) - - -def get_host(url): - """ - Deprecated. Use :func:`parse_url` instead. - """ - p = parse_url(url) - return p.scheme or 'http', p.hostname, p.port diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/wait.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/wait.py deleted file mode 100644 index cb396e5..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/urllib3/util/wait.py +++ /dev/null @@ -1,40 +0,0 @@ -from .selectors import ( - HAS_SELECT, - DefaultSelector, - EVENT_READ, - EVENT_WRITE -) - - -def _wait_for_io_events(socks, events, timeout=None): - """ Waits for IO events to be available from a list of sockets - or optionally a single socket if passed in. Returns a list of - sockets that can be interacted with immediately. """ - if not HAS_SELECT: - raise ValueError('Platform does not have a selector') - if not isinstance(socks, list): - # Probably just a single socket. - if hasattr(socks, "fileno"): - socks = [socks] - # Otherwise it might be a non-list iterable. - else: - socks = list(socks) - with DefaultSelector() as selector: - for sock in socks: - selector.register(sock, events) - return [key[0].fileobj for key in - selector.select(timeout) if key[1] & events] - - -def wait_for_read(socks, timeout=None): - """ Waits for reading to be available from a list of sockets - or optionally a single socket if passed in. Returns a list of - sockets that can be read from immediately. """ - return _wait_for_io_events(socks, EVENT_READ, timeout) - - -def wait_for_write(socks, timeout=None): - """ Waits for writing to be available from a list of sockets - or optionally a single socket if passed in. Returns a list of - sockets that can be written to immediately. """ - return _wait_for_io_events(socks, EVENT_WRITE, timeout) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/__init__.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/__init__.py deleted file mode 100644 index d21d697..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/__init__.py +++ /dev/null @@ -1,342 +0,0 @@ -# coding: utf-8 -""" - - webencodings - ~~~~~~~~~~~~ - - This is a Python implementation of the `WHATWG Encoding standard - <http://encoding.spec.whatwg.org/>`. See README for details. - - :copyright: Copyright 2012 by Simon Sapin - :license: BSD, see LICENSE for details. - -""" - -from __future__ import unicode_literals - -import codecs - -from .labels import LABELS - - -VERSION = '0.5.1' - - -# Some names in Encoding are not valid Python aliases. Remap these. -PYTHON_NAMES = { - 'iso-8859-8-i': 'iso-8859-8', - 'x-mac-cyrillic': 'mac-cyrillic', - 'macintosh': 'mac-roman', - 'windows-874': 'cp874'} - -CACHE = {} - - -def ascii_lower(string): - r"""Transform (only) ASCII letters to lower case: A-Z is mapped to a-z. - - :param string: An Unicode string. - :returns: A new Unicode string. - - This is used for `ASCII case-insensitive - <http://encoding.spec.whatwg.org/#ascii-case-insensitive>`_ - matching of encoding labels. - The same matching is also used, among other things, - for `CSS keywords <http://dev.w3.org/csswg/css-values/#keywords>`_. - - This is different from the :meth:`~py:str.lower` method of Unicode strings - which also affect non-ASCII characters, - sometimes mapping them into the ASCII range: - - >>> keyword = u'Bac\N{KELVIN SIGN}ground' - >>> assert keyword.lower() == u'background' - >>> assert ascii_lower(keyword) != keyword.lower() - >>> assert ascii_lower(keyword) == u'bac\N{KELVIN SIGN}ground' - - """ - # This turns out to be faster than unicode.translate() - return string.encode('utf8').lower().decode('utf8') - - -def lookup(label): - """ - Look for an encoding by its label. - This is the spec’s `get an encoding - <http://encoding.spec.whatwg.org/#concept-encoding-get>`_ algorithm. - Supported labels are listed there. - - :param label: A string. - :returns: - An :class:`Encoding` object, or :obj:`None` for an unknown label. - - """ - # Only strip ASCII whitespace: U+0009, U+000A, U+000C, U+000D, and U+0020. - label = ascii_lower(label.strip('\t\n\f\r ')) - name = LABELS.get(label) - if name is None: - return None - encoding = CACHE.get(name) - if encoding is None: - if name == 'x-user-defined': - from .x_user_defined import codec_info - else: - python_name = PYTHON_NAMES.get(name, name) - # Any python_name value that gets to here should be valid. - codec_info = codecs.lookup(python_name) - encoding = Encoding(name, codec_info) - CACHE[name] = encoding - return encoding - - -def _get_encoding(encoding_or_label): - """ - Accept either an encoding object or label. - - :param encoding: An :class:`Encoding` object or a label string. - :returns: An :class:`Encoding` object. - :raises: :exc:`~exceptions.LookupError` for an unknown label. - - """ - if hasattr(encoding_or_label, 'codec_info'): - return encoding_or_label - - encoding = lookup(encoding_or_label) - if encoding is None: - raise LookupError('Unknown encoding label: %r' % encoding_or_label) - return encoding - - -class Encoding(object): - """Reresents a character encoding such as UTF-8, - that can be used for decoding or encoding. - - .. attribute:: name - - Canonical name of the encoding - - .. attribute:: codec_info - - The actual implementation of the encoding, - a stdlib :class:`~codecs.CodecInfo` object. - See :func:`codecs.register`. - - """ - def __init__(self, name, codec_info): - self.name = name - self.codec_info = codec_info - - def __repr__(self): - return '<Encoding %s>' % self.name - - -#: The UTF-8 encoding. Should be used for new content and formats. -UTF8 = lookup('utf-8') - -_UTF16LE = lookup('utf-16le') -_UTF16BE = lookup('utf-16be') - - -def decode(input, fallback_encoding, errors='replace'): - """ - Decode a single string. - - :param input: A byte string - :param fallback_encoding: - An :class:`Encoding` object or a label string. - The encoding to use if :obj:`input` does note have a BOM. - :param errors: Type of error handling. See :func:`codecs.register`. - :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. - :return: - A ``(output, encoding)`` tuple of an Unicode string - and an :obj:`Encoding`. - - """ - # Fail early if `encoding` is an invalid label. - fallback_encoding = _get_encoding(fallback_encoding) - bom_encoding, input = _detect_bom(input) - encoding = bom_encoding or fallback_encoding - return encoding.codec_info.decode(input, errors)[0], encoding - - -def _detect_bom(input): - """Return (bom_encoding, input), with any BOM removed from the input.""" - if input.startswith(b'\xFF\xFE'): - return _UTF16LE, input[2:] - if input.startswith(b'\xFE\xFF'): - return _UTF16BE, input[2:] - if input.startswith(b'\xEF\xBB\xBF'): - return UTF8, input[3:] - return None, input - - -def encode(input, encoding=UTF8, errors='strict'): - """ - Encode a single string. - - :param input: An Unicode string. - :param encoding: An :class:`Encoding` object or a label string. - :param errors: Type of error handling. See :func:`codecs.register`. - :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. - :return: A byte string. - - """ - return _get_encoding(encoding).codec_info.encode(input, errors)[0] - - -def iter_decode(input, fallback_encoding, errors='replace'): - """ - "Pull"-based decoder. - - :param input: - An iterable of byte strings. - - The input is first consumed just enough to determine the encoding - based on the precense of a BOM, - then consumed on demand when the return value is. - :param fallback_encoding: - An :class:`Encoding` object or a label string. - The encoding to use if :obj:`input` does note have a BOM. - :param errors: Type of error handling. See :func:`codecs.register`. - :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. - :returns: - An ``(output, encoding)`` tuple. - :obj:`output` is an iterable of Unicode strings, - :obj:`encoding` is the :obj:`Encoding` that is being used. - - """ - - decoder = IncrementalDecoder(fallback_encoding, errors) - generator = _iter_decode_generator(input, decoder) - encoding = next(generator) - return generator, encoding - - -def _iter_decode_generator(input, decoder): - """Return a generator that first yields the :obj:`Encoding`, - then yields output chukns as Unicode strings. - - """ - decode = decoder.decode - input = iter(input) - for chunck in input: - output = decode(chunck) - if output: - assert decoder.encoding is not None - yield decoder.encoding - yield output - break - else: - # Input exhausted without determining the encoding - output = decode(b'', final=True) - assert decoder.encoding is not None - yield decoder.encoding - if output: - yield output - return - - for chunck in input: - output = decode(chunck) - if output: - yield output - output = decode(b'', final=True) - if output: - yield output - - -def iter_encode(input, encoding=UTF8, errors='strict'): - """ - “Pull”-based encoder. - - :param input: An iterable of Unicode strings. - :param encoding: An :class:`Encoding` object or a label string. - :param errors: Type of error handling. See :func:`codecs.register`. - :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. - :returns: An iterable of byte strings. - - """ - # Fail early if `encoding` is an invalid label. - encode = IncrementalEncoder(encoding, errors).encode - return _iter_encode_generator(input, encode) - - -def _iter_encode_generator(input, encode): - for chunck in input: - output = encode(chunck) - if output: - yield output - output = encode('', final=True) - if output: - yield output - - -class IncrementalDecoder(object): - """ - “Push”-based decoder. - - :param fallback_encoding: - An :class:`Encoding` object or a label string. - The encoding to use if :obj:`input` does note have a BOM. - :param errors: Type of error handling. See :func:`codecs.register`. - :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. - - """ - def __init__(self, fallback_encoding, errors='replace'): - # Fail early if `encoding` is an invalid label. - self._fallback_encoding = _get_encoding(fallback_encoding) - self._errors = errors - self._buffer = b'' - self._decoder = None - #: The actual :class:`Encoding` that is being used, - #: or :obj:`None` if that is not determined yet. - #: (Ie. if there is not enough input yet to determine - #: if there is a BOM.) - self.encoding = None # Not known yet. - - def decode(self, input, final=False): - """Decode one chunk of the input. - - :param input: A byte string. - :param final: - Indicate that no more input is available. - Must be :obj:`True` if this is the last call. - :returns: An Unicode string. - - """ - decoder = self._decoder - if decoder is not None: - return decoder(input, final) - - input = self._buffer + input - encoding, input = _detect_bom(input) - if encoding is None: - if len(input) < 3 and not final: # Not enough data yet. - self._buffer = input - return '' - else: # No BOM - encoding = self._fallback_encoding - decoder = encoding.codec_info.incrementaldecoder(self._errors).decode - self._decoder = decoder - self.encoding = encoding - return decoder(input, final) - - -class IncrementalEncoder(object): - """ - “Push”-based encoder. - - :param encoding: An :class:`Encoding` object or a label string. - :param errors: Type of error handling. See :func:`codecs.register`. - :raises: :exc:`~exceptions.LookupError` for an unknown encoding label. - - .. method:: encode(input, final=False) - - :param input: An Unicode string. - :param final: - Indicate that no more input is available. - Must be :obj:`True` if this is the last call. - :returns: A byte string. - - """ - def __init__(self, encoding=UTF8, errors='strict'): - encoding = _get_encoding(encoding) - self.encode = encoding.codec_info.incrementalencoder(errors).encode diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/labels.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/labels.py deleted file mode 100644 index 29cbf91..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/labels.py +++ /dev/null @@ -1,231 +0,0 @@ -""" - - webencodings.labels - ~~~~~~~~~~~~~~~~~~~ - - Map encoding labels to their name. - - :copyright: Copyright 2012 by Simon Sapin - :license: BSD, see LICENSE for details. - -""" - -# XXX Do not edit! -# This file is automatically generated by mklabels.py - -LABELS = { - 'unicode-1-1-utf-8': 'utf-8', - 'utf-8': 'utf-8', - 'utf8': 'utf-8', - '866': 'ibm866', - 'cp866': 'ibm866', - 'csibm866': 'ibm866', - 'ibm866': 'ibm866', - 'csisolatin2': 'iso-8859-2', - 'iso-8859-2': 'iso-8859-2', - 'iso-ir-101': 'iso-8859-2', - 'iso8859-2': 'iso-8859-2', - 'iso88592': 'iso-8859-2', - 'iso_8859-2': 'iso-8859-2', - 'iso_8859-2:1987': 'iso-8859-2', - 'l2': 'iso-8859-2', - 'latin2': 'iso-8859-2', - 'csisolatin3': 'iso-8859-3', - 'iso-8859-3': 'iso-8859-3', - 'iso-ir-109': 'iso-8859-3', - 'iso8859-3': 'iso-8859-3', - 'iso88593': 'iso-8859-3', - 'iso_8859-3': 'iso-8859-3', - 'iso_8859-3:1988': 'iso-8859-3', - 'l3': 'iso-8859-3', - 'latin3': 'iso-8859-3', - 'csisolatin4': 'iso-8859-4', - 'iso-8859-4': 'iso-8859-4', - 'iso-ir-110': 'iso-8859-4', - 'iso8859-4': 'iso-8859-4', - 'iso88594': 'iso-8859-4', - 'iso_8859-4': 'iso-8859-4', - 'iso_8859-4:1988': 'iso-8859-4', - 'l4': 'iso-8859-4', - 'latin4': 'iso-8859-4', - 'csisolatincyrillic': 'iso-8859-5', - 'cyrillic': 'iso-8859-5', - 'iso-8859-5': 'iso-8859-5', - 'iso-ir-144': 'iso-8859-5', - 'iso8859-5': 'iso-8859-5', - 'iso88595': 'iso-8859-5', - 'iso_8859-5': 'iso-8859-5', - 'iso_8859-5:1988': 'iso-8859-5', - 'arabic': 'iso-8859-6', - 'asmo-708': 'iso-8859-6', - 'csiso88596e': 'iso-8859-6', - 'csiso88596i': 'iso-8859-6', - 'csisolatinarabic': 'iso-8859-6', - 'ecma-114': 'iso-8859-6', - 'iso-8859-6': 'iso-8859-6', - 'iso-8859-6-e': 'iso-8859-6', - 'iso-8859-6-i': 'iso-8859-6', - 'iso-ir-127': 'iso-8859-6', - 'iso8859-6': 'iso-8859-6', - 'iso88596': 'iso-8859-6', - 'iso_8859-6': 'iso-8859-6', - 'iso_8859-6:1987': 'iso-8859-6', - 'csisolatingreek': 'iso-8859-7', - 'ecma-118': 'iso-8859-7', - 'elot_928': 'iso-8859-7', - 'greek': 'iso-8859-7', - 'greek8': 'iso-8859-7', - 'iso-8859-7': 'iso-8859-7', - 'iso-ir-126': 'iso-8859-7', - 'iso8859-7': 'iso-8859-7', - 'iso88597': 'iso-8859-7', - 'iso_8859-7': 'iso-8859-7', - 'iso_8859-7:1987': 'iso-8859-7', - 'sun_eu_greek': 'iso-8859-7', - 'csiso88598e': 'iso-8859-8', - 'csisolatinhebrew': 'iso-8859-8', - 'hebrew': 'iso-8859-8', - 'iso-8859-8': 'iso-8859-8', - 'iso-8859-8-e': 'iso-8859-8', - 'iso-ir-138': 'iso-8859-8', - 'iso8859-8': 'iso-8859-8', - 'iso88598': 'iso-8859-8', - 'iso_8859-8': 'iso-8859-8', - 'iso_8859-8:1988': 'iso-8859-8', - 'visual': 'iso-8859-8', - 'csiso88598i': 'iso-8859-8-i', - 'iso-8859-8-i': 'iso-8859-8-i', - 'logical': 'iso-8859-8-i', - 'csisolatin6': 'iso-8859-10', - 'iso-8859-10': 'iso-8859-10', - 'iso-ir-157': 'iso-8859-10', - 'iso8859-10': 'iso-8859-10', - 'iso885910': 'iso-8859-10', - 'l6': 'iso-8859-10', - 'latin6': 'iso-8859-10', - 'iso-8859-13': 'iso-8859-13', - 'iso8859-13': 'iso-8859-13', - 'iso885913': 'iso-8859-13', - 'iso-8859-14': 'iso-8859-14', - 'iso8859-14': 'iso-8859-14', - 'iso885914': 'iso-8859-14', - 'csisolatin9': 'iso-8859-15', - 'iso-8859-15': 'iso-8859-15', - 'iso8859-15': 'iso-8859-15', - 'iso885915': 'iso-8859-15', - 'iso_8859-15': 'iso-8859-15', - 'l9': 'iso-8859-15', - 'iso-8859-16': 'iso-8859-16', - 'cskoi8r': 'koi8-r', - 'koi': 'koi8-r', - 'koi8': 'koi8-r', - 'koi8-r': 'koi8-r', - 'koi8_r': 'koi8-r', - 'koi8-u': 'koi8-u', - 'csmacintosh': 'macintosh', - 'mac': 'macintosh', - 'macintosh': 'macintosh', - 'x-mac-roman': 'macintosh', - 'dos-874': 'windows-874', - 'iso-8859-11': 'windows-874', - 'iso8859-11': 'windows-874', - 'iso885911': 'windows-874', - 'tis-620': 'windows-874', - 'windows-874': 'windows-874', - 'cp1250': 'windows-1250', - 'windows-1250': 'windows-1250', - 'x-cp1250': 'windows-1250', - 'cp1251': 'windows-1251', - 'windows-1251': 'windows-1251', - 'x-cp1251': 'windows-1251', - 'ansi_x3.4-1968': 'windows-1252', - 'ascii': 'windows-1252', - 'cp1252': 'windows-1252', - 'cp819': 'windows-1252', - 'csisolatin1': 'windows-1252', - 'ibm819': 'windows-1252', - 'iso-8859-1': 'windows-1252', - 'iso-ir-100': 'windows-1252', - 'iso8859-1': 'windows-1252', - 'iso88591': 'windows-1252', - 'iso_8859-1': 'windows-1252', - 'iso_8859-1:1987': 'windows-1252', - 'l1': 'windows-1252', - 'latin1': 'windows-1252', - 'us-ascii': 'windows-1252', - 'windows-1252': 'windows-1252', - 'x-cp1252': 'windows-1252', - 'cp1253': 'windows-1253', - 'windows-1253': 'windows-1253', - 'x-cp1253': 'windows-1253', - 'cp1254': 'windows-1254', - 'csisolatin5': 'windows-1254', - 'iso-8859-9': 'windows-1254', - 'iso-ir-148': 'windows-1254', - 'iso8859-9': 'windows-1254', - 'iso88599': 'windows-1254', - 'iso_8859-9': 'windows-1254', - 'iso_8859-9:1989': 'windows-1254', - 'l5': 'windows-1254', - 'latin5': 'windows-1254', - 'windows-1254': 'windows-1254', - 'x-cp1254': 'windows-1254', - 'cp1255': 'windows-1255', - 'windows-1255': 'windows-1255', - 'x-cp1255': 'windows-1255', - 'cp1256': 'windows-1256', - 'windows-1256': 'windows-1256', - 'x-cp1256': 'windows-1256', - 'cp1257': 'windows-1257', - 'windows-1257': 'windows-1257', - 'x-cp1257': 'windows-1257', - 'cp1258': 'windows-1258', - 'windows-1258': 'windows-1258', - 'x-cp1258': 'windows-1258', - 'x-mac-cyrillic': 'x-mac-cyrillic', - 'x-mac-ukrainian': 'x-mac-cyrillic', - 'chinese': 'gbk', - 'csgb2312': 'gbk', - 'csiso58gb231280': 'gbk', - 'gb2312': 'gbk', - 'gb_2312': 'gbk', - 'gb_2312-80': 'gbk', - 'gbk': 'gbk', - 'iso-ir-58': 'gbk', - 'x-gbk': 'gbk', - 'gb18030': 'gb18030', - 'hz-gb-2312': 'hz-gb-2312', - 'big5': 'big5', - 'big5-hkscs': 'big5', - 'cn-big5': 'big5', - 'csbig5': 'big5', - 'x-x-big5': 'big5', - 'cseucpkdfmtjapanese': 'euc-jp', - 'euc-jp': 'euc-jp', - 'x-euc-jp': 'euc-jp', - 'csiso2022jp': 'iso-2022-jp', - 'iso-2022-jp': 'iso-2022-jp', - 'csshiftjis': 'shift_jis', - 'ms_kanji': 'shift_jis', - 'shift-jis': 'shift_jis', - 'shift_jis': 'shift_jis', - 'sjis': 'shift_jis', - 'windows-31j': 'shift_jis', - 'x-sjis': 'shift_jis', - 'cseuckr': 'euc-kr', - 'csksc56011987': 'euc-kr', - 'euc-kr': 'euc-kr', - 'iso-ir-149': 'euc-kr', - 'korean': 'euc-kr', - 'ks_c_5601-1987': 'euc-kr', - 'ks_c_5601-1989': 'euc-kr', - 'ksc5601': 'euc-kr', - 'ksc_5601': 'euc-kr', - 'windows-949': 'euc-kr', - 'csiso2022kr': 'iso-2022-kr', - 'iso-2022-kr': 'iso-2022-kr', - 'utf-16be': 'utf-16be', - 'utf-16': 'utf-16le', - 'utf-16le': 'utf-16le', - 'x-user-defined': 'x-user-defined', -} diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/mklabels.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/mklabels.py deleted file mode 100644 index 295dc92..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/mklabels.py +++ /dev/null @@ -1,59 +0,0 @@ -""" - - webencodings.mklabels - ~~~~~~~~~~~~~~~~~~~~~ - - Regenarate the webencodings.labels module. - - :copyright: Copyright 2012 by Simon Sapin - :license: BSD, see LICENSE for details. - -""" - -import json -try: - from urllib import urlopen -except ImportError: - from urllib.request import urlopen - - -def assert_lower(string): - assert string == string.lower() - return string - - -def generate(url): - parts = ['''\ -""" - - webencodings.labels - ~~~~~~~~~~~~~~~~~~~ - - Map encoding labels to their name. - - :copyright: Copyright 2012 by Simon Sapin - :license: BSD, see LICENSE for details. - -""" - -# XXX Do not edit! -# This file is automatically generated by mklabels.py - -LABELS = { -'''] - labels = [ - (repr(assert_lower(label)).lstrip('u'), - repr(encoding['name']).lstrip('u')) - for category in json.loads(urlopen(url).read().decode('ascii')) - for encoding in category['encodings'] - for label in encoding['labels']] - max_len = max(len(label) for label, name in labels) - parts.extend( - ' %s:%s %s,\n' % (label, ' ' * (max_len - len(label)), name) - for label, name in labels) - parts.append('}') - return ''.join(parts) - - -if __name__ == '__main__': - print(generate('http://encoding.spec.whatwg.org/encodings.json')) diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/tests.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/tests.py deleted file mode 100644 index e12c10d..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/tests.py +++ /dev/null @@ -1,153 +0,0 @@ -# coding: utf-8 -""" - - webencodings.tests - ~~~~~~~~~~~~~~~~~~ - - A basic test suite for Encoding. - - :copyright: Copyright 2012 by Simon Sapin - :license: BSD, see LICENSE for details. - -""" - -from __future__ import unicode_literals - -from . import (lookup, LABELS, decode, encode, iter_decode, iter_encode, - IncrementalDecoder, IncrementalEncoder, UTF8) - - -def assert_raises(exception, function, *args, **kwargs): - try: - function(*args, **kwargs) - except exception: - return - else: # pragma: no cover - raise AssertionError('Did not raise %s.' % exception) - - -def test_labels(): - assert lookup('utf-8').name == 'utf-8' - assert lookup('Utf-8').name == 'utf-8' - assert lookup('UTF-8').name == 'utf-8' - assert lookup('utf8').name == 'utf-8' - assert lookup('utf8').name == 'utf-8' - assert lookup('utf8 ').name == 'utf-8' - assert lookup(' \r\nutf8\t').name == 'utf-8' - assert lookup('u8') is None # Python label. - assert lookup('utf-8 ') is None # Non-ASCII white space. - - assert lookup('US-ASCII').name == 'windows-1252' - assert lookup('iso-8859-1').name == 'windows-1252' - assert lookup('latin1').name == 'windows-1252' - assert lookup('LATIN1').name == 'windows-1252' - assert lookup('latin-1') is None - assert lookup('LATİN1') is None # ASCII-only case insensitivity. - - -def test_all_labels(): - for label in LABELS: - assert decode(b'', label) == ('', lookup(label)) - assert encode('', label) == b'' - for repeat in [0, 1, 12]: - output, _ = iter_decode([b''] * repeat, label) - assert list(output) == [] - assert list(iter_encode([''] * repeat, label)) == [] - decoder = IncrementalDecoder(label) - assert decoder.decode(b'') == '' - assert decoder.decode(b'', final=True) == '' - encoder = IncrementalEncoder(label) - assert encoder.encode('') == b'' - assert encoder.encode('', final=True) == b'' - # All encoding names are valid labels too: - for name in set(LABELS.values()): - assert lookup(name).name == name - - -def test_invalid_label(): - assert_raises(LookupError, decode, b'\xEF\xBB\xBF\xc3\xa9', 'invalid') - assert_raises(LookupError, encode, 'é', 'invalid') - assert_raises(LookupError, iter_decode, [], 'invalid') - assert_raises(LookupError, iter_encode, [], 'invalid') - assert_raises(LookupError, IncrementalDecoder, 'invalid') - assert_raises(LookupError, IncrementalEncoder, 'invalid') - - -def test_decode(): - assert decode(b'\x80', 'latin1') == ('€', lookup('latin1')) - assert decode(b'\x80', lookup('latin1')) == ('€', lookup('latin1')) - assert decode(b'\xc3\xa9', 'utf8') == ('é', lookup('utf8')) - assert decode(b'\xc3\xa9', UTF8) == ('é', lookup('utf8')) - assert decode(b'\xc3\xa9', 'ascii') == ('é', lookup('ascii')) - assert decode(b'\xEF\xBB\xBF\xc3\xa9', 'ascii') == ('é', lookup('utf8')) # UTF-8 with BOM - - assert decode(b'\xFE\xFF\x00\xe9', 'ascii') == ('é', lookup('utf-16be')) # UTF-16-BE with BOM - assert decode(b'\xFF\xFE\xe9\x00', 'ascii') == ('é', lookup('utf-16le')) # UTF-16-LE with BOM - assert decode(b'\xFE\xFF\xe9\x00', 'ascii') == ('\ue900', lookup('utf-16be')) - assert decode(b'\xFF\xFE\x00\xe9', 'ascii') == ('\ue900', lookup('utf-16le')) - - assert decode(b'\x00\xe9', 'UTF-16BE') == ('é', lookup('utf-16be')) - assert decode(b'\xe9\x00', 'UTF-16LE') == ('é', lookup('utf-16le')) - assert decode(b'\xe9\x00', 'UTF-16') == ('é', lookup('utf-16le')) - - assert decode(b'\xe9\x00', 'UTF-16BE') == ('\ue900', lookup('utf-16be')) - assert decode(b'\x00\xe9', 'UTF-16LE') == ('\ue900', lookup('utf-16le')) - assert decode(b'\x00\xe9', 'UTF-16') == ('\ue900', lookup('utf-16le')) - - -def test_encode(): - assert encode('é', 'latin1') == b'\xe9' - assert encode('é', 'utf8') == b'\xc3\xa9' - assert encode('é', 'utf8') == b'\xc3\xa9' - assert encode('é', 'utf-16') == b'\xe9\x00' - assert encode('é', 'utf-16le') == b'\xe9\x00' - assert encode('é', 'utf-16be') == b'\x00\xe9' - - -def test_iter_decode(): - def iter_decode_to_string(input, fallback_encoding): - output, _encoding = iter_decode(input, fallback_encoding) - return ''.join(output) - assert iter_decode_to_string([], 'latin1') == '' - assert iter_decode_to_string([b''], 'latin1') == '' - assert iter_decode_to_string([b'\xe9'], 'latin1') == 'é' - assert iter_decode_to_string([b'hello'], 'latin1') == 'hello' - assert iter_decode_to_string([b'he', b'llo'], 'latin1') == 'hello' - assert iter_decode_to_string([b'hell', b'o'], 'latin1') == 'hello' - assert iter_decode_to_string([b'\xc3\xa9'], 'latin1') == 'é' - assert iter_decode_to_string([b'\xEF\xBB\xBF\xc3\xa9'], 'latin1') == 'é' - assert iter_decode_to_string([ - b'\xEF\xBB\xBF', b'\xc3', b'\xa9'], 'latin1') == 'é' - assert iter_decode_to_string([ - b'\xEF\xBB\xBF', b'a', b'\xc3'], 'latin1') == 'a\uFFFD' - assert iter_decode_to_string([ - b'', b'\xEF', b'', b'', b'\xBB\xBF\xc3', b'\xa9'], 'latin1') == 'é' - assert iter_decode_to_string([b'\xEF\xBB\xBF'], 'latin1') == '' - assert iter_decode_to_string([b'\xEF\xBB'], 'latin1') == 'ï»' - assert iter_decode_to_string([b'\xFE\xFF\x00\xe9'], 'latin1') == 'é' - assert iter_decode_to_string([b'\xFF\xFE\xe9\x00'], 'latin1') == 'é' - assert iter_decode_to_string([ - b'', b'\xFF', b'', b'', b'\xFE\xe9', b'\x00'], 'latin1') == 'é' - assert iter_decode_to_string([ - b'', b'h\xe9', b'llo'], 'x-user-defined') == 'h\uF7E9llo' - - -def test_iter_encode(): - assert b''.join(iter_encode([], 'latin1')) == b'' - assert b''.join(iter_encode([''], 'latin1')) == b'' - assert b''.join(iter_encode(['é'], 'latin1')) == b'\xe9' - assert b''.join(iter_encode(['', 'é', '', ''], 'latin1')) == b'\xe9' - assert b''.join(iter_encode(['', 'é', '', ''], 'utf-16')) == b'\xe9\x00' - assert b''.join(iter_encode(['', 'é', '', ''], 'utf-16le')) == b'\xe9\x00' - assert b''.join(iter_encode(['', 'é', '', ''], 'utf-16be')) == b'\x00\xe9' - assert b''.join(iter_encode([ - '', 'h\uF7E9', '', 'llo'], 'x-user-defined')) == b'h\xe9llo' - - -def test_x_user_defined(): - encoded = b'2,\x0c\x0b\x1aO\xd9#\xcb\x0f\xc9\xbbt\xcf\xa8\xca' - decoded = '2,\x0c\x0b\x1aO\uf7d9#\uf7cb\x0f\uf7c9\uf7bbt\uf7cf\uf7a8\uf7ca' - encoded = b'aa' - decoded = 'aa' - assert decode(encoded, 'x-user-defined') == (decoded, lookup('x-user-defined')) - assert encode(decoded, 'x-user-defined') == encoded diff --git a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/x_user_defined.py b/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/x_user_defined.py deleted file mode 100644 index d16e326..0000000 --- a/venv/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip/_vendor/webencodings/x_user_defined.py +++ /dev/null @@ -1,325 +0,0 @@ -# coding: utf-8 -""" - - webencodings.x_user_defined - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - An implementation of the x-user-defined encoding. - - :copyright: Copyright 2012 by Simon Sapin - :license: BSD, see LICENSE for details. - -""" - -from __future__ import unicode_literals - -import codecs - - -### Codec APIs - -class Codec(codecs.Codec): - - def encode(self, input, errors='strict'): - return codecs.charmap_encode(input, errors, encoding_table) - - def decode(self, input, errors='strict'): - return codecs.charmap_decode(input, errors, decoding_table) - - -class IncrementalEncoder(codecs.IncrementalEncoder): - def encode(self, input, final=False): - return codecs.charmap_encode(input, self.errors, encoding_table)[0] - - -class IncrementalDecoder(codecs.IncrementalDecoder): - def decode(self, input, final=False): - return codecs.charmap_decode(input, self.errors, decoding_table)[0] - - -class StreamWriter(Codec, codecs.StreamWriter): - pass - - -class StreamReader(Codec, codecs.StreamReader): - pass - - -### encodings module API - -codec_info = codecs.CodecInfo( - name='x-user-defined', - encode=Codec().encode, - decode=Codec().decode, - incrementalencoder=IncrementalEncoder, - incrementaldecoder=IncrementalDecoder, - streamreader=StreamReader, - streamwriter=StreamWriter, -) - - -### Decoding Table - -# Python 3: -# for c in range(256): print(' %r' % chr(c if c < 128 else c + 0xF700)) -decoding_table = ( - '\x00' - '\x01' - '\x02' - '\x03' - '\x04' - '\x05' - '\x06' - '\x07' - '\x08' - '\t' - '\n' - '\x0b' - '\x0c' - '\r' - '\x0e' - '\x0f' - '\x10' - '\x11' - '\x12' - '\x13' - '\x14' - '\x15' - '\x16' - '\x17' - '\x18' - '\x19' - '\x1a' - '\x1b' - '\x1c' - '\x1d' - '\x1e' - '\x1f' - ' ' - '!' - '"' - '#' - '$' - '%' - '&' - "'" - '(' - ')' - '*' - '+' - ',' - '-' - '.' - '/' - '0' - '1' - '2' - '3' - '4' - '5' - '6' - '7' - '8' - '9' - ':' - ';' - '<' - '=' - '>' - '?' - '@' - 'A' - 'B' - 'C' - 'D' - 'E' - 'F' - 'G' - 'H' - 'I' - 'J' - 'K' - 'L' - 'M' - 'N' - 'O' - 'P' - 'Q' - 'R' - 'S' - 'T' - 'U' - 'V' - 'W' - 'X' - 'Y' - 'Z' - '[' - '\\' - ']' - '^' - '_' - '`' - 'a' - 'b' - 'c' - 'd' - 'e' - 'f' - 'g' - 'h' - 'i' - 'j' - 'k' - 'l' - 'm' - 'n' - 'o' - 'p' - 'q' - 'r' - 's' - 't' - 'u' - 'v' - 'w' - 'x' - 'y' - 'z' - '{' - '|' - '}' - '~' - '\x7f' - '\uf780' - '\uf781' - '\uf782' - '\uf783' - '\uf784' - '\uf785' - '\uf786' - '\uf787' - '\uf788' - '\uf789' - '\uf78a' - '\uf78b' - '\uf78c' - '\uf78d' - '\uf78e' - '\uf78f' - '\uf790' - '\uf791' - '\uf792' - '\uf793' - '\uf794' - '\uf795' - '\uf796' - '\uf797' - '\uf798' - '\uf799' - '\uf79a' - '\uf79b' - '\uf79c' - '\uf79d' - '\uf79e' - '\uf79f' - '\uf7a0' - '\uf7a1' - '\uf7a2' - '\uf7a3' - '\uf7a4' - '\uf7a5' - '\uf7a6' - '\uf7a7' - '\uf7a8' - '\uf7a9' - '\uf7aa' - '\uf7ab' - '\uf7ac' - '\uf7ad' - '\uf7ae' - '\uf7af' - '\uf7b0' - '\uf7b1' - '\uf7b2' - '\uf7b3' - '\uf7b4' - '\uf7b5' - '\uf7b6' - '\uf7b7' - '\uf7b8' - '\uf7b9' - '\uf7ba' - '\uf7bb' - '\uf7bc' - '\uf7bd' - '\uf7be' - '\uf7bf' - '\uf7c0' - '\uf7c1' - '\uf7c2' - '\uf7c3' - '\uf7c4' - '\uf7c5' - '\uf7c6' - '\uf7c7' - '\uf7c8' - '\uf7c9' - '\uf7ca' - '\uf7cb' - '\uf7cc' - '\uf7cd' - '\uf7ce' - '\uf7cf' - '\uf7d0' - '\uf7d1' - '\uf7d2' - '\uf7d3' - '\uf7d4' - '\uf7d5' - '\uf7d6' - '\uf7d7' - '\uf7d8' - '\uf7d9' - '\uf7da' - '\uf7db' - '\uf7dc' - '\uf7dd' - '\uf7de' - '\uf7df' - '\uf7e0' - '\uf7e1' - '\uf7e2' - '\uf7e3' - '\uf7e4' - '\uf7e5' - '\uf7e6' - '\uf7e7' - '\uf7e8' - '\uf7e9' - '\uf7ea' - '\uf7eb' - '\uf7ec' - '\uf7ed' - '\uf7ee' - '\uf7ef' - '\uf7f0' - '\uf7f1' - '\uf7f2' - '\uf7f3' - '\uf7f4' - '\uf7f5' - '\uf7f6' - '\uf7f7' - '\uf7f8' - '\uf7f9' - '\uf7fa' - '\uf7fb' - '\uf7fc' - '\uf7fd' - '\uf7fe' - '\uf7ff' -) - -### Encoding table -encoding_table = codecs.charmap_build(decoding_table) diff --git a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/PKG-INFO b/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/PKG-INFO deleted file mode 100644 index bb2d1f5..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/PKG-INFO +++ /dev/null @@ -1,10 +0,0 @@ -Metadata-Version: 1.0 -Name: pkcs7 -Version: 0.1.2 -Summary: extension class for argparse with json configuration -Home-page: http://github.com/jeppeter/extargsparse -Author: jeppeter Wang -Author-email: jeppeter@gmail.com -License: MIT -Description: UNKNOWN -Platform: UNKNOWN diff --git a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/SOURCES.txt b/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/SOURCES.txt deleted file mode 100644 index bf2b21c..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/SOURCES.txt +++ /dev/null @@ -1,8 +0,0 @@ -setup.cfg -setup.py -pkcs7/__init__.py -pkcs7.egg-info/PKG-INFO -pkcs7.egg-info/SOURCES.txt -pkcs7.egg-info/dependency_links.txt -pkcs7.egg-info/not-zip-safe -pkcs7.egg-info/top_level.txt \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/dependency_links.txt b/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/installed-files.txt b/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/installed-files.txt deleted file mode 100644 index 922947b..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/installed-files.txt +++ /dev/null @@ -1,7 +0,0 @@ -../pkcs7/__init__.py -../pkcs7/__pycache__/__init__.cpython-36.pyc -PKG-INFO -SOURCES.txt -dependency_links.txt -not-zip-safe -top_level.txt diff --git a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/not-zip-safe b/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/not-zip-safe deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/not-zip-safe +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/top_level.txt b/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/top_level.txt deleted file mode 100644 index 2a7ea4f..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7-0.1.2-py3.6.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pkcs7 diff --git a/venv/lib/python3.6/site-packages/pkcs7/__init__.py b/venv/lib/python3.6/site-packages/pkcs7/__init__.py deleted file mode 100644 index d149ca7..0000000 --- a/venv/lib/python3.6/site-packages/pkcs7/__init__.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python - -import os -import sys - -__version__ = "0.1.2" -__version_info__ = ( 0, 1, 2) - - -class PKCS7Encoder(object): - ''' - RFC 2315: PKCS#7 page 21 - Some content-encryption algorithms assume the - input length is a multiple of k octets, where k > 1, and - let the application define a method for handling inputs - whose lengths are not a multiple of k octets. For such - algorithms, the method shall be to pad the input at the - trailing end with k - (l mod k) octets all having value k - - (l mod k), where l is the length of the input. In other - words, the input is padded at the trailing end with one of - the following strings: - 01 -- if l mod k = k-1 - 02 02 -- if l mod k = k-2 - . - . - . - k k ... k k -- if l mod k = 0 - The padding can be removed unambiguously since all input is - padded and no padding string is a suffix of another. This - padding method is well-defined if and only if k < 256; - methods for larger k are an open issue for further study. - but we have the value - ''' - def __init__(self, k=16): - assert(k <= 256) - assert(k > 1) - self.__klen = k - - ## @param text The padded text for which the padding is to be removed. - # @exception ValueError Raised when the input padding is missing or corrupt. - def decode(self, text): - dectext = '' - if (len(text) % self.__klen) != 0: - raise Exception('text not %d align'%(self.__klen)) - lastch = ord(text[-1]) - if lastch <= self.__klen and lastch != 0 : - trimlen = lastch - textlen = len(text) - for i in range(lastch): - if ord(text[textlen - i - 1]) != lastch: - trimlen = 0 - break - if trimlen == 0: - dectext = text - else: - dectext = text[:(textlen-trimlen)] - else: - dectext = text - return dectext - - def get_bytes(self,text): - outbytes = [] - for c in text: - outbytes.append(ord(c)) - return outbytes - - def get_text(self,inbytes): - s = '' - for i in inbytes: - s += chr((i % 256)) - return s - - def __encode_inner(self,text): - ''' - Pad an input string according to PKCS#7 - if the real text is bits same ,just expand the text - ''' - totallen = len(text) - passlen = 0 - enctext = '' - if (len(text) % self.__klen) != 0: - enctext = text - leftlen = self.__klen - (len(text) % self.__klen) - lastch = chr(leftlen) - enctext += lastch * leftlen - else: - lastch = ord(text[-1]) - if lastch <= self.__klen and lastch != 0: - trimlen = self.__klen - textlen = len(text) - for i in range(lastch): - if lastch != ord(text[(textlen-i-1)]): - trimlen = 0 - break - if trimlen == 0: - enctext = text - else: - enctext = text - enctext += chr(self.__klen) * self.__klen - else: - enctext = text - - return enctext - - ## @param text The text to encode. - def encode(self, text): - return self.__encode_inner(text) - - diff --git a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/PKG-INFO b/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/PKG-INFO deleted file mode 100644 index 06f89c1..0000000 --- a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/PKG-INFO +++ /dev/null @@ -1,150 +0,0 @@ -Metadata-Version: 1.1 -Name: progress -Version: 1.4 -Summary: Easy to use progress bars -Home-page: http://github.com/verigak/progress/ -Author: Giorgos Verigakis -Author-email: verigak@gmail.com -License: ISC -Description: Easy progress reporting for Python - ================================== - - |pypi| - - |demo| - - .. |pypi| image:: https://img.shields.io/pypi/v/progress.svg - .. |demo| image:: https://raw.github.com/verigak/progress/master/demo.gif - :alt: Demo - - Bars - ---- - - There are 7 progress bars to choose from: - - - ``Bar`` - - ``ChargingBar`` - - ``FillingSquaresBar`` - - ``FillingCirclesBar`` - - ``IncrementalBar`` - - ``PixelBar`` - - ``ShadyBar`` - - To use them, just call ``next`` to advance and ``finish`` to finish: - - .. code-block:: python - - from progress.bar import Bar - - bar = Bar('Processing', max=20) - for i in range(20): - # Do some work - bar.next() - bar.finish() - - The result will be a bar like the following: :: - - Processing |############# | 42/100 - - To simplify the common case where the work is done in an iterator, you can - use the ``iter`` method: - - .. code-block:: python - - for i in Bar('Processing').iter(it): - # Do some work - - Progress bars are very customizable, you can change their width, their fill - character, their suffix and more: - - .. code-block:: python - - bar = Bar('Loading', fill='@', suffix='%(percent)d%%') - - This will produce a bar like the following: :: - - Loading |@@@@@@@@@@@@@ | 42% - - You can use a number of template arguments in ``message`` and ``suffix``: - - ========== ================================ - Name Value - ========== ================================ - index current value - max maximum value - remaining max - index - progress index / max - percent progress * 100 - avg simple moving average time per item (in seconds) - elapsed elapsed time in seconds - elapsed_td elapsed as a timedelta (useful for printing as a string) - eta avg * remaining - eta_td eta as a timedelta (useful for printing as a string) - ========== ================================ - - Instead of passing all configuration options on instatiation, you can create - your custom subclass: - - .. code-block:: python - - class FancyBar(Bar): - message = 'Loading' - fill = '*' - suffix = '%(percent).1f%% - %(eta)ds' - - You can also override any of the arguments or create your own: - - .. code-block:: python - - class SlowBar(Bar): - suffix = '%(remaining_hours)d hours remaining' - @property - def remaining_hours(self): - return self.eta // 3600 - - - Spinners - ======== - - For actions with an unknown number of steps you can use a spinner: - - .. code-block:: python - - from progress.spinner import Spinner - - spinner = Spinner('Loading ') - while state != 'FINISHED': - # Do some work - spinner.next() - - There are 5 predefined spinners: - - - ``Spinner`` - - ``PieSpinner`` - - ``MoonSpinner`` - - ``LineSpinner`` - - ``PixelSpinner`` - - - Other - ===== - - There are a number of other classes available too, please check the source or - subclass one of them to create your own. - - - License - ======= - - progress is licensed under ISC - -Platform: UNKNOWN -Classifier: Environment :: Console -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: ISC License (ISCL) -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3.3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 diff --git a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/SOURCES.txt b/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/SOURCES.txt deleted file mode 100644 index 10a3df8..0000000 --- a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/SOURCES.txt +++ /dev/null @@ -1,14 +0,0 @@ -LICENSE -MANIFEST.in -README.rst -setup.cfg -setup.py -progress/__init__.py -progress/bar.py -progress/counter.py -progress/helpers.py -progress/spinner.py -progress.egg-info/PKG-INFO -progress.egg-info/SOURCES.txt -progress.egg-info/dependency_links.txt -progress.egg-info/top_level.txt \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/dependency_links.txt b/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/installed-files.txt b/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/installed-files.txt deleted file mode 100644 index 685c6f3..0000000 --- a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/installed-files.txt +++ /dev/null @@ -1,14 +0,0 @@ -../progress/__init__.py -../progress/__pycache__/__init__.cpython-36.pyc -../progress/__pycache__/bar.cpython-36.pyc -../progress/__pycache__/counter.cpython-36.pyc -../progress/__pycache__/helpers.cpython-36.pyc -../progress/__pycache__/spinner.cpython-36.pyc -../progress/bar.py -../progress/counter.py -../progress/helpers.py -../progress/spinner.py -PKG-INFO -SOURCES.txt -dependency_links.txt -top_level.txt diff --git a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/top_level.txt b/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/top_level.txt deleted file mode 100644 index 81fae44..0000000 --- a/venv/lib/python3.6/site-packages/progress-1.4-py3.6.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -progress diff --git a/venv/lib/python3.6/site-packages/progress/__init__.py b/venv/lib/python3.6/site-packages/progress/__init__.py deleted file mode 100644 index a41f65d..0000000 --- a/venv/lib/python3.6/site-packages/progress/__init__.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import division - -from collections import deque -from datetime import timedelta -from math import ceil -from sys import stderr -from time import time - - -__version__ = '1.4' - - -class Infinite(object): - file = stderr - sma_window = 10 # Simple Moving Average window - - def __init__(self, *args, **kwargs): - self.index = 0 - self.start_ts = time() - self.avg = 0 - self._ts = self.start_ts - self._xput = deque(maxlen=self.sma_window) - for key, val in kwargs.items(): - setattr(self, key, val) - - def __getitem__(self, key): - if key.startswith('_'): - return None - return getattr(self, key, None) - - @property - def elapsed(self): - return int(time() - self.start_ts) - - @property - def elapsed_td(self): - return timedelta(seconds=self.elapsed) - - def update_avg(self, n, dt): - if n > 0: - self._xput.append(dt / n) - self.avg = sum(self._xput) / len(self._xput) - - def update(self): - pass - - def start(self): - pass - - def finish(self): - pass - - def next(self, n=1): - now = time() - dt = now - self._ts - self.update_avg(n, dt) - self._ts = now - self.index = self.index + n - self.update() - - def iter(self, it): - try: - for x in it: - yield x - self.next() - finally: - self.finish() - - -class Progress(Infinite): - def __init__(self, *args, **kwargs): - super(Progress, self).__init__(*args, **kwargs) - self.max = kwargs.get('max', 100) - - @property - def eta(self): - return int(ceil(self.avg * self.remaining)) - - @property - def eta_td(self): - return timedelta(seconds=self.eta) - - @property - def percent(self): - return self.progress * 100 - - @property - def progress(self): - return min(1, self.index / self.max) - - @property - def remaining(self): - return max(self.max - self.index, 0) - - def start(self): - self.update() - - def goto(self, index): - incr = index - self.index - self.next(incr) - - def iter(self, it): - try: - self.max = len(it) - except TypeError: - pass - - try: - for x in it: - yield x - self.next() - finally: - self.finish() diff --git a/venv/lib/python3.6/site-packages/progress/bar.py b/venv/lib/python3.6/site-packages/progress/bar.py deleted file mode 100644 index 025e61c..0000000 --- a/venv/lib/python3.6/site-packages/progress/bar.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import unicode_literals - -import sys - -from . import Progress -from .helpers import WritelnMixin - - -class Bar(WritelnMixin, Progress): - width = 32 - message = '' - suffix = '%(index)d/%(max)d' - bar_prefix = ' |' - bar_suffix = '| ' - empty_fill = ' ' - fill = '#' - hide_cursor = True - - def update(self): - filled_length = int(self.width * self.progress) - empty_length = self.width - filled_length - - message = self.message % self - bar = self.fill * filled_length - empty = self.empty_fill * empty_length - suffix = self.suffix % self - line = ''.join([message, self.bar_prefix, bar, empty, self.bar_suffix, - suffix]) - self.writeln(line) - - -class ChargingBar(Bar): - suffix = '%(percent)d%%' - bar_prefix = ' ' - bar_suffix = ' ' - empty_fill = '∙' - fill = '█' - - -class FillingSquaresBar(ChargingBar): - empty_fill = '▢' - fill = '▣' - - -class FillingCirclesBar(ChargingBar): - empty_fill = '◯' - fill = '◉' - - -class IncrementalBar(Bar): - if sys.platform.startswith('win'): - phases = (u' ', u'▌', u'█') - else: - phases = (' ', '▏', '▎', '▍', '▌', '▋', '▊', '▉', '█') - - def update(self): - nphases = len(self.phases) - filled_len = self.width * self.progress - nfull = int(filled_len) # Number of full chars - phase = int((filled_len - nfull) * nphases) # Phase of last char - nempty = self.width - nfull # Number of empty chars - - message = self.message % self - bar = self.phases[-1] * nfull - current = self.phases[phase] if phase > 0 else '' - empty = self.empty_fill * max(0, nempty - len(current)) - suffix = self.suffix % self - line = ''.join([message, self.bar_prefix, bar, current, empty, - self.bar_suffix, suffix]) - self.writeln(line) - - -class PixelBar(IncrementalBar): - phases = ('⡀', '⡄', '⡆', '⡇', '⣇', '⣧', '⣷', '⣿') - - -class ShadyBar(IncrementalBar): - phases = (' ', '░', '▒', '▓', '█') diff --git a/venv/lib/python3.6/site-packages/progress/counter.py b/venv/lib/python3.6/site-packages/progress/counter.py deleted file mode 100644 index 6b45a1e..0000000 --- a/venv/lib/python3.6/site-packages/progress/counter.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import unicode_literals -from . import Infinite, Progress -from .helpers import WriteMixin - - -class Counter(WriteMixin, Infinite): - message = '' - hide_cursor = True - - def update(self): - self.write(str(self.index)) - - -class Countdown(WriteMixin, Progress): - hide_cursor = True - - def update(self): - self.write(str(self.remaining)) - - -class Stack(WriteMixin, Progress): - phases = (' ', '▁', '▂', '▃', '▄', '▅', '▆', '▇', '█') - hide_cursor = True - - def update(self): - nphases = len(self.phases) - i = min(nphases - 1, int(self.progress * nphases)) - self.write(self.phases[i]) - - -class Pie(Stack): - phases = ('○', '◔', '◑', '◕', '●') diff --git a/venv/lib/python3.6/site-packages/progress/helpers.py b/venv/lib/python3.6/site-packages/progress/helpers.py deleted file mode 100644 index 0cde44e..0000000 --- a/venv/lib/python3.6/site-packages/progress/helpers.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import print_function - - -HIDE_CURSOR = '\x1b[?25l' -SHOW_CURSOR = '\x1b[?25h' - - -class WriteMixin(object): - hide_cursor = False - - def __init__(self, message=None, **kwargs): - super(WriteMixin, self).__init__(**kwargs) - self._width = 0 - if message: - self.message = message - - if self.file and self.file.isatty(): - if self.hide_cursor: - print(HIDE_CURSOR, end='', file=self.file) - print(self.message, end='', file=self.file) - self.file.flush() - - def write(self, s): - if self.file and self.file.isatty(): - b = '\b' * self._width - c = s.ljust(self._width) - print(b + c, end='', file=self.file) - self._width = max(self._width, len(s)) - self.file.flush() - - def finish(self): - if self.file and self.file.isatty() and self.hide_cursor: - print(SHOW_CURSOR, end='', file=self.file) - - -class WritelnMixin(object): - hide_cursor = False - - def __init__(self, message=None, **kwargs): - super(WritelnMixin, self).__init__(**kwargs) - if message: - self.message = message - - if self.file and self.file.isatty() and self.hide_cursor: - print(HIDE_CURSOR, end='', file=self.file) - - def clearln(self): - if self.file and self.file.isatty(): - print('\r\x1b[K', end='', file=self.file) - - def writeln(self, line): - if self.file and self.file.isatty(): - self.clearln() - print(line, end='', file=self.file) - self.file.flush() - - def finish(self): - if self.file and self.file.isatty(): - print(file=self.file) - if self.hide_cursor: - print(SHOW_CURSOR, end='', file=self.file) - - -from signal import signal, SIGINT -from sys import exit - - -class SigIntMixin(object): - """Registers a signal handler that calls finish on SIGINT""" - - def __init__(self, *args, **kwargs): - super(SigIntMixin, self).__init__(*args, **kwargs) - signal(SIGINT, self._sigint_handler) - - def _sigint_handler(self, signum, frame): - self.finish() - exit(0) diff --git a/venv/lib/python3.6/site-packages/progress/spinner.py b/venv/lib/python3.6/site-packages/progress/spinner.py deleted file mode 100644 index 464c7b2..0000000 --- a/venv/lib/python3.6/site-packages/progress/spinner.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (c) 2012 Giorgos Verigakis <verigak@gmail.com> -# -# 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" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -from __future__ import unicode_literals -from . import Infinite -from .helpers import WriteMixin - - -class Spinner(WriteMixin, Infinite): - message = '' - phases = ('-', '\\', '|', '/') - hide_cursor = True - - def update(self): - i = self.index % len(self.phases) - self.write(self.phases[i]) - - -class PieSpinner(Spinner): - phases = ['◷', '◶', '◵', '◴'] - - -class MoonSpinner(Spinner): - phases = ['◑', '◒', '◐', '◓'] - - -class LineSpinner(Spinner): - phases = ['⎺', '⎻', '⎼', '⎽', '⎼', '⎻'] - -class PixelSpinner(Spinner): - phases = ['⣾','⣷', '⣯', '⣟', '⡿', '⢿', '⣻', '⣽'] diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/DESCRIPTION.rst deleted file mode 100644 index 2a58be5..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,1684 +0,0 @@ -Requests: HTTP for Humans -========================= - -.. image:: https://img.shields.io/pypi/v/requests.svg - :target: https://pypi.org/project/requests/ - -.. image:: https://img.shields.io/pypi/l/requests.svg - :target: https://pypi.org/project/requests/ - -.. image:: https://img.shields.io/pypi/pyversions/requests.svg - :target: https://pypi.org/project/requests/ - -.. image:: https://codecov.io/github/requests/requests/coverage.svg?branch=master - :target: https://codecov.io/github/requests/requests - :alt: codecov.io - -.. image:: https://img.shields.io/github/contributors/requests/requests.svg - :target: https://github.com/requests/requests/graphs/contributors - -.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg - :target: https://saythanks.io/to/kennethreitz - -Requests is the only *Non-GMO* HTTP library for Python, safe for human -consumption. - -.. image:: https://farm5.staticflickr.com/4317/35198386374_1939af3de6_k_d.jpg - -Behold, the power of Requests: - -.. code-block:: python - - >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) - >>> r.status_code - 200 - >>> r.headers['content-type'] - 'application/json; charset=utf8' - >>> r.encoding - 'utf-8' - >>> r.text - u'{"type":"User"...' - >>> r.json() - {u'disk_usage': 368627, u'private_gists': 484, ...} - -See `the similar code, sans Requests <https://gist.github.com/973705>`_. - -.. image:: https://raw.githubusercontent.com/requests/requests/master/docs/_static/requests-logo-small.png - :target: http://docs.python-requests.org/ - - -Requests allows you to send *organic, grass-fed* HTTP/1.1 requests, without the -need for manual labor. There's no need to manually add query strings to your -URLs, or to form-encode your POST data. Keep-alive and HTTP connection pooling -are 100% automatic, thanks to `urllib3 <https://github.com/shazow/urllib3>`_. - -Besides, all the cool kids are doing it. Requests is one of the most -downloaded Python packages of all time, pulling in over 11,000,000 downloads -every month. You don't want to be left out! - -Feature Support ---------------- - -Requests is ready for today's web. - -- International Domains and URLs -- Keep-Alive & Connection Pooling -- Sessions with Cookie Persistence -- Browser-style SSL Verification -- Basic/Digest Authentication -- Elegant Key/Value Cookies -- Automatic Decompression -- Automatic Content Decoding -- Unicode Response Bodies -- Multipart File Uploads -- HTTP(S) Proxy Support -- Connection Timeouts -- Streaming Downloads -- ``.netrc`` Support -- Chunked Requests - -Requests officially supports Python 2.7 & 3.4–3.6, and runs great on PyPy. - -Installation ------------- - -To install Requests, simply use `pipenv <http://pipenv.org/>`_ (or pip, of course): - -.. code-block:: bash - - $ pipenv install requests - ✨🍰✨ - -Satisfaction guaranteed. - -Documentation -------------- - -Fantastic documentation is available at http://docs.python-requests.org/, for a limited time only. - - -How to Contribute ------------------ - -#. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. There is a `Contributor Friendly`_ tag for issues that should be ideal for people who are not very familiar with the codebase yet. -#. Fork `the repository`_ on GitHub to start making your changes to the **master** branch (or branch off of it). -#. Write a test which shows that the bug was fixed or that the feature works as expected. -#. Send a pull request and bug the maintainer until it gets merged and published. :) Make sure to add yourself to AUTHORS_. - -.. _`the repository`: https://github.com/requests/requests -.. _AUTHORS: https://github.com/requests/requests/blob/master/AUTHORS.rst -.. _Contributor Friendly: https://github.com/requests/requests/issues?direction=desc&labels=Contributor+Friendly&page=1&sort=updated&state=open - - -.. :changelog: - -Release History ---------------- - -dev -+++ - -- [Short description of non-trivial change.] - -2.19.1 (2018-06-14) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed issue where status_codes.py's ``init`` function failed trying to append to - a ``__doc__`` value of ``None``. - -2.19.0 (2018-06-12) -+++++++++++++++++++ - -**Improvements** - -- Warn user about possible slowdown when using cryptography version < 1.3.4 -- Check for invalid host in proxy URL, before forwarding request to adapter. -- Fragments are now properly maintained across redirects. (RFC7231 7.1.2) -- Removed use of cgi module to expedite library load time. -- Added support for SHA-256 and SHA-512 digest auth algorithms. -- Minor performance improvement to ``Request.content``. -- Migrate to using collections.abc for 3.7 compatibility. - -**Bugfixes** - -- Parsing empty ``Link`` headers with ``parse_header_links()`` no longer return one bogus entry. -- Fixed issue where loading the default certificate bundle from a zip archive - would raise an ``IOError``. -- Fixed issue with unexpected ``ImportError`` on windows system which do not support ``winreg`` module. -- DNS resolution in proxy bypass no longer includes the username and password in - the request. This also fixes the issue of DNS queries failing on macOS. -- Properly normalize adapter prefixes for url comparison. -- Passing ``None`` as a file pointer to the ``files`` param no longer raises an exception. -- Calling ``copy`` on a ``RequestsCookieJar`` will now preserve the cookie policy correctly. - -**Dependencies** - -- We now support idna v2.7. -- We now support urllib3 v1.23. - -2.18.4 (2017-08-15) -+++++++++++++++++++ - -**Improvements** - -- Error messages for invalid headers now include the header name for easier debugging - -**Dependencies** - -- We now support idna v2.6. - -2.18.3 (2017-08-02) -+++++++++++++++++++ - -**Improvements** - -- Running ``$ python -m requests.help`` now includes the installed version of idna. - -**Bugfixes** - -- Fixed issue where Requests would raise ``ConnectionError`` instead of - ``SSLError`` when encountering SSL problems when using urllib3 v1.22. - -2.18.2 (2017-07-25) -+++++++++++++++++++ - -**Bugfixes** - -- ``requests.help`` no longer fails on Python 2.6 due to the absence of - ``ssl.OPENSSL_VERSION_NUMBER``. - -**Dependencies** - -- We now support urllib3 v1.22. - -2.18.1 (2017-06-14) -+++++++++++++++++++ - -**Bugfixes** - -- Fix an error in the packaging whereby the ``*.whl`` contained incorrect data - that regressed the fix in v2.17.3. - -2.18.0 (2017-06-14) -+++++++++++++++++++ - -**Improvements** - -- ``Response`` is now a context manager, so can be used directly in a ``with`` statement - without first having to be wrapped by ``contextlib.closing()``. - -**Bugfixes** - -- Resolve installation failure if multiprocessing is not available -- Resolve tests crash if multiprocessing is not able to determine the number of CPU cores -- Resolve error swallowing in utils set_environ generator - - -2.17.3 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Improved ``packages`` namespace identity support, for monkeypatching libraries. - - -2.17.2 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Improved ``packages`` namespace identity support, for monkeypatching libraries. - - -2.17.1 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Improved ``packages`` namespace identity support, for monkeypatching libraries. - - -2.17.0 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Removal of the 301 redirect cache. This improves thread-safety. - - -2.16.5 (2017-05-28) -+++++++++++++++++++ - -- Improvements to ``$ python -m requests.help``. - -2.16.4 (2017-05-27) -+++++++++++++++++++ - -- Introduction of the ``$ python -m requests.help`` command, for debugging with maintainers! - -2.16.3 (2017-05-27) -+++++++++++++++++++ - -- Further restored the ``requests.packages`` namespace for compatibility reasons. - -2.16.2 (2017-05-27) -+++++++++++++++++++ - -- Further restored the ``requests.packages`` namespace for compatibility reasons. - -No code modification (noted below) should be necessary any longer. - -2.16.1 (2017-05-27) -+++++++++++++++++++ - -- Restored the ``requests.packages`` namespace for compatibility reasons. -- Bugfix for ``urllib3`` version parsing. - -**Note**: code that was written to import against the ``requests.packages`` -namespace previously will have to import code that rests at this module-level -now. - -For example:: - - from requests.packages.urllib3.poolmanager import PoolManager - -Will need to be re-written to be:: - - from requests.packages import urllib3 - urllib3.poolmanager.PoolManager - -Or, even better:: - - from urllib3.poolmanager import PoolManager - -2.16.0 (2017-05-26) -+++++++++++++++++++ - -- Unvendor ALL the things! - -2.15.1 (2017-05-26) -+++++++++++++++++++ - -- Everyone makes mistakes. - -2.15.0 (2017-05-26) -+++++++++++++++++++ - -**Improvements** - -- Introduction of the ``Response.next`` property, for getting the next - ``PreparedResponse`` from a redirect chain (when ``allow_redirects=False``). -- Internal refactoring of ``__version__`` module. - -**Bugfixes** - -- Restored once-optional parameter for ``requests.utils.get_environ_proxies()``. - -2.14.2 (2017-05-10) -+++++++++++++++++++ - -**Bugfixes** - -- Changed a less-than to an equal-to and an or in the dependency markers to - widen compatibility with older setuptools releases. - -2.14.1 (2017-05-09) -+++++++++++++++++++ - -**Bugfixes** - -- Changed the dependency markers to widen compatibility with older pip - releases. - -2.14.0 (2017-05-09) -+++++++++++++++++++ - -**Improvements** - -- It is now possible to pass ``no_proxy`` as a key to the ``proxies`` - dictionary to provide handling similar to the ``NO_PROXY`` environment - variable. -- When users provide invalid paths to certificate bundle files or directories - Requests now raises ``IOError``, rather than failing at the time of the HTTPS - request with a fairly inscrutable certificate validation error. -- The behavior of ``SessionRedirectMixin`` was slightly altered. - ``resolve_redirects`` will now detect a redirect by calling - ``get_redirect_target(response)`` instead of directly - querying ``Response.is_redirect`` and ``Response.headers['location']``. - Advanced users will be able to process malformed redirects more easily. -- Changed the internal calculation of elapsed request time to have higher - resolution on Windows. -- Added ``win_inet_pton`` as conditional dependency for the ``[socks]`` extra - on Windows with Python 2.7. -- Changed the proxy bypass implementation on Windows: the proxy bypass - check doesn't use forward and reverse DNS requests anymore -- URLs with schemes that begin with ``http`` but are not ``http`` or ``https`` - no longer have their host parts forced to lowercase. - -**Bugfixes** - -- Much improved handling of non-ASCII ``Location`` header values in redirects. - Fewer ``UnicodeDecodeErrors`` are encountered on Python 2, and Python 3 now - correctly understands that Latin-1 is unlikely to be the correct encoding. -- If an attempt to ``seek`` file to find out its length fails, we now - appropriately handle that by aborting our content-length calculations. -- Restricted ``HTTPDigestAuth`` to only respond to auth challenges made on 4XX - responses, rather than to all auth challenges. -- Fixed some code that was firing ``DeprecationWarning`` on Python 3.6. -- The dismayed person emoticon (``/o\\``) no longer has a big head. I'm sure - this is what you were all worrying about most. - - -**Miscellaneous** - -- Updated bundled urllib3 to v1.21.1. -- Updated bundled chardet to v3.0.2. -- Updated bundled idna to v2.5. -- Updated bundled certifi to 2017.4.17. - -2.13.0 (2017-01-24) -+++++++++++++++++++ - -**Features** - -- Only load the ``idna`` library when we've determined we need it. This will - save some memory for users. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.20. -- Updated bundled idna to 2.2. - -2.12.5 (2017-01-18) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed an issue with JSON encoding detection, specifically detecting - big-endian UTF-32 with BOM. - -2.12.4 (2016-12-14) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed regression from 2.12.2 where non-string types were rejected in the - basic auth parameters. While support for this behaviour has been readded, - the behaviour is deprecated and will be removed in the future. - -2.12.3 (2016-12-01) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed regression from v2.12.1 for URLs with schemes that begin with "http". - These URLs have historically been processed as though they were HTTP-schemed - URLs, and so have had parameters added. This was removed in v2.12.2 in an - overzealous attempt to resolve problems with IDNA-encoding those URLs. This - change was reverted: the other fixes for IDNA-encoding have been judged to - be sufficient to return to the behaviour Requests had before v2.12.0. - -2.12.2 (2016-11-30) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed several issues with IDNA-encoding URLs that are technically invalid but - which are widely accepted. Requests will now attempt to IDNA-encode a URL if - it can but, if it fails, and the host contains only ASCII characters, it will - be passed through optimistically. This will allow users to opt-in to using - IDNA2003 themselves if they want to, and will also allow technically invalid - but still common hostnames. -- Fixed an issue where URLs with leading whitespace would raise - ``InvalidSchema`` errors. -- Fixed an issue where some URLs without the HTTP or HTTPS schemes would still - have HTTP URL preparation applied to them. -- Fixed an issue where Unicode strings could not be used in basic auth. -- Fixed an issue encountered by some Requests plugins where constructing a - Response object would cause ``Response.content`` to raise an - ``AttributeError``. - -2.12.1 (2016-11-16) -+++++++++++++++++++ - -**Bugfixes** - -- Updated setuptools 'security' extra for the new PyOpenSSL backend in urllib3. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.19.1. - -2.12.0 (2016-11-15) -+++++++++++++++++++ - -**Improvements** - -- Updated support for internationalized domain names from IDNA2003 to IDNA2008. - This updated support is required for several forms of IDNs and is mandatory - for .de domains. -- Much improved heuristics for guessing content lengths: Requests will no - longer read an entire ``StringIO`` into memory. -- Much improved logic for recalculating ``Content-Length`` headers for - ``PreparedRequest`` objects. -- Improved tolerance for file-like objects that have no ``tell`` method but - do have a ``seek`` method. -- Anything that is a subclass of ``Mapping`` is now treated like a dictionary - by the ``data=`` keyword argument. -- Requests now tolerates empty passwords in proxy credentials, rather than - stripping the credentials. -- If a request is made with a file-like object as the body and that request is - redirected with a 307 or 308 status code, Requests will now attempt to - rewind the body object so it can be replayed. - -**Bugfixes** - -- When calling ``response.close``, the call to ``close`` will be propagated - through to non-urllib3 backends. -- Fixed issue where the ``ALL_PROXY`` environment variable would be preferred - over scheme-specific variables like ``HTTP_PROXY``. -- Fixed issue where non-UTF8 reason phrases got severely mangled by falling - back to decoding using ISO 8859-1 instead. -- Fixed a bug where Requests would not correctly correlate cookies set when - using custom Host headers if those Host headers did not use the native - string type for the platform. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.19. -- Updated bundled certifi certs to 2016.09.26. - -2.11.1 (2016-08-17) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed a bug when using ``iter_content`` with ``decode_unicode=True`` for - streamed bodies would raise ``AttributeError``. This bug was introduced in - 2.11. -- Strip Content-Type and Transfer-Encoding headers from the header block when - following a redirect that transforms the verb from POST/PUT to GET. - -2.11.0 (2016-08-08) -+++++++++++++++++++ - -**Improvements** - -- Added support for the ``ALL_PROXY`` environment variable. -- Reject header values that contain leading whitespace or newline characters to - reduce risk of header smuggling. - -**Bugfixes** - -- Fixed occasional ``TypeError`` when attempting to decode a JSON response that - occurred in an error case. Now correctly returns a ``ValueError``. -- Requests would incorrectly ignore a non-CIDR IP address in the ``NO_PROXY`` - environment variables: Requests now treats it as a specific IP. -- Fixed a bug when sending JSON data that could cause us to encounter obscure - OpenSSL errors in certain network conditions (yes, really). -- Added type checks to ensure that ``iter_content`` only accepts integers and - ``None`` for chunk sizes. -- Fixed issue where responses whose body had not been fully consumed would have - the underlying connection closed but not returned to the connection pool, - which could cause Requests to hang in situations where the ``HTTPAdapter`` - had been configured to use a blocking connection pool. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.16. -- Some previous releases accidentally accepted non-strings as acceptable header values. This release does not. - -2.10.0 (2016-04-29) -+++++++++++++++++++ - -**New Features** - -- SOCKS Proxy Support! (requires PySocks; ``$ pip install requests[socks]``) - -**Miscellaneous** - -- Updated bundled urllib3 to 1.15.1. - -2.9.2 (2016-04-29) -++++++++++++++++++ - -**Improvements** - -- Change built-in CaseInsensitiveDict (used for headers) to use OrderedDict - as its underlying datastore. - -**Bugfixes** - -- Don't use redirect_cache if allow_redirects=False -- When passed objects that throw exceptions from ``tell()``, send them via - chunked transfer encoding instead of failing. -- Raise a ProxyError for proxy related connection issues. - -2.9.1 (2015-12-21) -++++++++++++++++++ - -**Bugfixes** - -- Resolve regression introduced in 2.9.0 that made it impossible to send binary - strings as bodies in Python 3. -- Fixed errors when calculating cookie expiration dates in certain locales. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.13.1. - -2.9.0 (2015-12-15) -++++++++++++++++++ - -**Minor Improvements** (Backwards compatible) - -- The ``verify`` keyword argument now supports being passed a path to a - directory of CA certificates, not just a single-file bundle. -- Warnings are now emitted when sending files opened in text mode. -- Added the 511 Network Authentication Required status code to the status code - registry. - -**Bugfixes** - -- For file-like objects that are not seeked to the very beginning, we now - send the content length for the number of bytes we will actually read, rather - than the total size of the file, allowing partial file uploads. -- When uploading file-like objects, if they are empty or have no obvious - content length we set ``Transfer-Encoding: chunked`` rather than - ``Content-Length: 0``. -- We correctly receive the response in buffered mode when uploading chunked - bodies. -- We now handle being passed a query string as a bytestring on Python 3, by - decoding it as UTF-8. -- Sessions are now closed in all cases (exceptional and not) when using the - functional API rather than leaking and waiting for the garbage collector to - clean them up. -- Correctly handle digest auth headers with a malformed ``qop`` directive that - contains no token, by treating it the same as if no ``qop`` directive was - provided at all. -- Minor performance improvements when removing specific cookies by name. - -**Miscellaneous** - -- Updated urllib3 to 1.13. - -2.8.1 (2015-10-13) -++++++++++++++++++ - -**Bugfixes** - -- Update certificate bundle to match ``certifi`` 2015.9.6.2's weak certificate - bundle. -- Fix a bug in 2.8.0 where requests would raise ``ConnectTimeout`` instead of - ``ConnectionError`` -- When using the PreparedRequest flow, requests will now correctly respect the - ``json`` parameter. Broken in 2.8.0. -- When using the PreparedRequest flow, requests will now correctly handle a - Unicode-string method name on Python 2. Broken in 2.8.0. - -2.8.0 (2015-10-05) -++++++++++++++++++ - -**Minor Improvements** (Backwards Compatible) - -- Requests now supports per-host proxies. This allows the ``proxies`` - dictionary to have entries of the form - ``{'<scheme>://<hostname>': '<proxy>'}``. Host-specific proxies will be used - in preference to the previously-supported scheme-specific ones, but the - previous syntax will continue to work. -- ``Response.raise_for_status`` now prints the URL that failed as part of the - exception message. -- ``requests.utils.get_netrc_auth`` now takes an ``raise_errors`` kwarg, - defaulting to ``False``. When ``True``, errors parsing ``.netrc`` files cause - exceptions to be thrown. -- Change to bundled projects import logic to make it easier to unbundle - requests downstream. -- Changed the default User-Agent string to avoid leaking data on Linux: now - contains only the requests version. - -**Bugfixes** - -- The ``json`` parameter to ``post()`` and friends will now only be used if - neither ``data`` nor ``files`` are present, consistent with the - documentation. -- We now ignore empty fields in the ``NO_PROXY`` environment variable. -- Fixed problem where ``httplib.BadStatusLine`` would get raised if combining - ``stream=True`` with ``contextlib.closing``. -- Prevented bugs where we would attempt to return the same connection back to - the connection pool twice when sending a Chunked body. -- Miscellaneous minor internal changes. -- Digest Auth support is now thread safe. - -**Updates** - -- Updated urllib3 to 1.12. - -2.7.0 (2015-05-03) -++++++++++++++++++ - -This is the first release that follows our new release process. For more, see -`our documentation -<http://docs.python-requests.org/en/latest/community/release-process/>`_. - -**Bugfixes** - -- Updated urllib3 to 1.10.4, resolving several bugs involving chunked transfer - encoding and response framing. - -2.6.2 (2015-04-23) -++++++++++++++++++ - -**Bugfixes** - -- Fix regression where compressed data that was sent as chunked data was not - properly decompressed. (#2561) - -2.6.1 (2015-04-22) -++++++++++++++++++ - -**Bugfixes** - -- Remove VendorAlias import machinery introduced in v2.5.2. - -- Simplify the PreparedRequest.prepare API: We no longer require the user to - pass an empty list to the hooks keyword argument. (c.f. #2552) - -- Resolve redirects now receives and forwards all of the original arguments to - the adapter. (#2503) - -- Handle UnicodeDecodeErrors when trying to deal with a unicode URL that - cannot be encoded in ASCII. (#2540) - -- Populate the parsed path of the URI field when performing Digest - Authentication. (#2426) - -- Copy a PreparedRequest's CookieJar more reliably when it is not an instance - of RequestsCookieJar. (#2527) - -2.6.0 (2015-03-14) -++++++++++++++++++ - -**Bugfixes** - -- CVE-2015-2296: Fix handling of cookies on redirect. Previously a cookie - without a host value set would use the hostname for the redirected URL - exposing requests users to session fixation attacks and potentially cookie - stealing. This was disclosed privately by Matthew Daley of - `BugFuzz <https://bugfuzz.com>`_. This affects all versions of requests from - v2.1.0 to v2.5.3 (inclusive on both ends). - -- Fix error when requests is an ``install_requires`` dependency and ``python - setup.py test`` is run. (#2462) - -- Fix error when urllib3 is unbundled and requests continues to use the - vendored import location. - -- Include fixes to ``urllib3``'s header handling. - -- Requests' handling of unvendored dependencies is now more restrictive. - -**Features and Improvements** - -- Support bytearrays when passed as parameters in the ``files`` argument. - (#2468) - -- Avoid data duplication when creating a request with ``str``, ``bytes``, or - ``bytearray`` input to the ``files`` argument. - -2.5.3 (2015-02-24) -++++++++++++++++++ - -**Bugfixes** - -- Revert changes to our vendored certificate bundle. For more context see - (#2455, #2456, and http://bugs.python.org/issue23476) - -2.5.2 (2015-02-23) -++++++++++++++++++ - -**Features and Improvements** - -- Add sha256 fingerprint support. (`shazow/urllib3#540`_) - -- Improve the performance of headers. (`shazow/urllib3#544`_) - -**Bugfixes** - -- Copy pip's import machinery. When downstream redistributors remove - requests.packages.urllib3 the import machinery will continue to let those - same symbols work. Example usage in requests' documentation and 3rd-party - libraries relying on the vendored copies of urllib3 will work without having - to fallback to the system urllib3. - -- Attempt to quote parts of the URL on redirect if unquoting and then quoting - fails. (#2356) - -- Fix filename type check for multipart form-data uploads. (#2411) - -- Properly handle the case where a server issuing digest authentication - challenges provides both auth and auth-int qop-values. (#2408) - -- Fix a socket leak. (`shazow/urllib3#549`_) - -- Fix multiple ``Set-Cookie`` headers properly. (`shazow/urllib3#534`_) - -- Disable the built-in hostname verification. (`shazow/urllib3#526`_) - -- Fix the behaviour of decoding an exhausted stream. (`shazow/urllib3#535`_) - -**Security** - -- Pulled in an updated ``cacert.pem``. - -- Drop RC4 from the default cipher list. (`shazow/urllib3#551`_) - -.. _shazow/urllib3#551: https://github.com/shazow/urllib3/pull/551 -.. _shazow/urllib3#549: https://github.com/shazow/urllib3/pull/549 -.. _shazow/urllib3#544: https://github.com/shazow/urllib3/pull/544 -.. _shazow/urllib3#540: https://github.com/shazow/urllib3/pull/540 -.. _shazow/urllib3#535: https://github.com/shazow/urllib3/pull/535 -.. _shazow/urllib3#534: https://github.com/shazow/urllib3/pull/534 -.. _shazow/urllib3#526: https://github.com/shazow/urllib3/pull/526 - -2.5.1 (2014-12-23) -++++++++++++++++++ - -**Behavioural Changes** - -- Only catch HTTPErrors in raise_for_status (#2382) - -**Bugfixes** - -- Handle LocationParseError from urllib3 (#2344) -- Handle file-like object filenames that are not strings (#2379) -- Unbreak HTTPDigestAuth handler. Allow new nonces to be negotiated (#2389) - -2.5.0 (2014-12-01) -++++++++++++++++++ - -**Improvements** - -- Allow usage of urllib3's Retry object with HTTPAdapters (#2216) -- The ``iter_lines`` method on a response now accepts a delimiter with which - to split the content (#2295) - -**Behavioural Changes** - -- Add deprecation warnings to functions in requests.utils that will be removed - in 3.0 (#2309) -- Sessions used by the functional API are always closed (#2326) -- Restrict requests to HTTP/1.1 and HTTP/1.0 (stop accepting HTTP/0.9) (#2323) - -**Bugfixes** - -- Only parse the URL once (#2353) -- Allow Content-Length header to always be overridden (#2332) -- Properly handle files in HTTPDigestAuth (#2333) -- Cap redirect_cache size to prevent memory abuse (#2299) -- Fix HTTPDigestAuth handling of redirects after authenticating successfully - (#2253) -- Fix crash with custom method parameter to Session.request (#2317) -- Fix how Link headers are parsed using the regular expression library (#2271) - -**Documentation** - -- Add more references for interlinking (#2348) -- Update CSS for theme (#2290) -- Update width of buttons and sidebar (#2289) -- Replace references of Gittip with Gratipay (#2282) -- Add link to changelog in sidebar (#2273) - -2.4.3 (2014-10-06) -++++++++++++++++++ - -**Bugfixes** - -- Unicode URL improvements for Python 2. -- Re-order JSON param for backwards compat. -- Automatically defrag authentication schemes from host/pass URIs. (`#2249 <https://github.com/requests/requests/issues/2249>`_) - - -2.4.2 (2014-10-05) -++++++++++++++++++ - -**Improvements** - -- FINALLY! Add json parameter for uploads! (`#2258 <https://github.com/requests/requests/pull/2258>`_) -- Support for bytestring URLs on Python 3.x (`#2238 <https://github.com/requests/requests/pull/2238>`_) - -**Bugfixes** - -- Avoid getting stuck in a loop (`#2244 <https://github.com/requests/requests/pull/2244>`_) -- Multiple calls to iter* fail with unhelpful error. (`#2240 <https://github.com/requests/requests/issues/2240>`_, `#2241 <https://github.com/requests/requests/issues/2241>`_) - -**Documentation** - -- Correct redirection introduction (`#2245 <https://github.com/requests/requests/pull/2245/>`_) -- Added example of how to send multiple files in one request. (`#2227 <https://github.com/requests/requests/pull/2227/>`_) -- Clarify how to pass a custom set of CAs (`#2248 <https://github.com/requests/requests/pull/2248/>`_) - - - -2.4.1 (2014-09-09) -++++++++++++++++++ - -- Now has a "security" package extras set, ``$ pip install requests[security]`` -- Requests will now use Certifi if it is available. -- Capture and re-raise urllib3 ProtocolError -- Bugfix for responses that attempt to redirect to themselves forever (wtf?). - - -2.4.0 (2014-08-29) -++++++++++++++++++ - -**Behavioral Changes** - -- ``Connection: keep-alive`` header is now sent automatically. - -**Improvements** - -- Support for connect timeouts! Timeout now accepts a tuple (connect, read) which is used to set individual connect and read timeouts. -- Allow copying of PreparedRequests without headers/cookies. -- Updated bundled urllib3 version. -- Refactored settings loading from environment -- new `Session.merge_environment_settings`. -- Handle socket errors in iter_content. - - -2.3.0 (2014-05-16) -++++++++++++++++++ - -**API Changes** - -- New ``Response`` property ``is_redirect``, which is true when the - library could have processed this response as a redirection (whether - or not it actually did). -- The ``timeout`` parameter now affects requests with both ``stream=True`` and - ``stream=False`` equally. -- The change in v2.0.0 to mandate explicit proxy schemes has been reverted. - Proxy schemes now default to ``http://``. -- The ``CaseInsensitiveDict`` used for HTTP headers now behaves like a normal - dictionary when references as string or viewed in the interpreter. - -**Bugfixes** - -- No longer expose Authorization or Proxy-Authorization headers on redirect. - Fix CVE-2014-1829 and CVE-2014-1830 respectively. -- Authorization is re-evaluated each redirect. -- On redirect, pass url as native strings. -- Fall-back to autodetected encoding for JSON when Unicode detection fails. -- Headers set to ``None`` on the ``Session`` are now correctly not sent. -- Correctly honor ``decode_unicode`` even if it wasn't used earlier in the same - response. -- Stop advertising ``compress`` as a supported Content-Encoding. -- The ``Response.history`` parameter is now always a list. -- Many, many ``urllib3`` bugfixes. - -2.2.1 (2014-01-23) -++++++++++++++++++ - -**Bugfixes** - -- Fixes incorrect parsing of proxy credentials that contain a literal or encoded '#' character. -- Assorted urllib3 fixes. - -2.2.0 (2014-01-09) -++++++++++++++++++ - -**API Changes** - -- New exception: ``ContentDecodingError``. Raised instead of ``urllib3`` - ``DecodeError`` exceptions. - -**Bugfixes** - -- Avoid many many exceptions from the buggy implementation of ``proxy_bypass`` on OS X in Python 2.6. -- Avoid crashing when attempting to get authentication credentials from ~/.netrc when running as a user without a home directory. -- Use the correct pool size for pools of connections to proxies. -- Fix iteration of ``CookieJar`` objects. -- Ensure that cookies are persisted over redirect. -- Switch back to using chardet, since it has merged with charade. - -2.1.0 (2013-12-05) -++++++++++++++++++ - -- Updated CA Bundle, of course. -- Cookies set on individual Requests through a ``Session`` (e.g. via ``Session.get()``) are no longer persisted to the ``Session``. -- Clean up connections when we hit problems during chunked upload, rather than leaking them. -- Return connections to the pool when a chunked upload is successful, rather than leaking it. -- Match the HTTPbis recommendation for HTTP 301 redirects. -- Prevent hanging when using streaming uploads and Digest Auth when a 401 is received. -- Values of headers set by Requests are now always the native string type. -- Fix previously broken SNI support. -- Fix accessing HTTP proxies using proxy authentication. -- Unencode HTTP Basic usernames and passwords extracted from URLs. -- Support for IP address ranges for no_proxy environment variable -- Parse headers correctly when users override the default ``Host:`` header. -- Avoid munging the URL in case of case-sensitive servers. -- Looser URL handling for non-HTTP/HTTPS urls. -- Accept unicode methods in Python 2.6 and 2.7. -- More resilient cookie handling. -- Make ``Response`` objects pickleable. -- Actually added MD5-sess to Digest Auth instead of pretending to like last time. -- Updated internal urllib3. -- Fixed @Lukasa's lack of taste. - -2.0.1 (2013-10-24) -++++++++++++++++++ - -- Updated included CA Bundle with new mistrusts and automated process for the future -- Added MD5-sess to Digest Auth -- Accept per-file headers in multipart file POST messages. -- Fixed: Don't send the full URL on CONNECT messages. -- Fixed: Correctly lowercase a redirect scheme. -- Fixed: Cookies not persisted when set via functional API. -- Fixed: Translate urllib3 ProxyError into a requests ProxyError derived from ConnectionError. -- Updated internal urllib3 and chardet. - -2.0.0 (2013-09-24) -++++++++++++++++++ - -**API Changes:** - -- Keys in the Headers dictionary are now native strings on all Python versions, - i.e. bytestrings on Python 2, unicode on Python 3. -- Proxy URLs now *must* have an explicit scheme. A ``MissingSchema`` exception - will be raised if they don't. -- Timeouts now apply to read time if ``Stream=False``. -- ``RequestException`` is now a subclass of ``IOError``, not ``RuntimeError``. -- Added new method to ``PreparedRequest`` objects: ``PreparedRequest.copy()``. -- Added new method to ``Session`` objects: ``Session.update_request()``. This - method updates a ``Request`` object with the data (e.g. cookies) stored on - the ``Session``. -- Added new method to ``Session`` objects: ``Session.prepare_request()``. This - method updates and prepares a ``Request`` object, and returns the - corresponding ``PreparedRequest`` object. -- Added new method to ``HTTPAdapter`` objects: ``HTTPAdapter.proxy_headers()``. - This should not be called directly, but improves the subclass interface. -- ``httplib.IncompleteRead`` exceptions caused by incorrect chunked encoding - will now raise a Requests ``ChunkedEncodingError`` instead. -- Invalid percent-escape sequences now cause a Requests ``InvalidURL`` - exception to be raised. -- HTTP 208 no longer uses reason phrase ``"im_used"``. Correctly uses - ``"already_reported"``. -- HTTP 226 reason added (``"im_used"``). - -**Bugfixes:** - -- Vastly improved proxy support, including the CONNECT verb. Special thanks to - the many contributors who worked towards this improvement. -- Cookies are now properly managed when 401 authentication responses are - received. -- Chunked encoding fixes. -- Support for mixed case schemes. -- Better handling of streaming downloads. -- Retrieve environment proxies from more locations. -- Minor cookies fixes. -- Improved redirect behaviour. -- Improved streaming behaviour, particularly for compressed data. -- Miscellaneous small Python 3 text encoding bugs. -- ``.netrc`` no longer overrides explicit auth. -- Cookies set by hooks are now correctly persisted on Sessions. -- Fix problem with cookies that specify port numbers in their host field. -- ``BytesIO`` can be used to perform streaming uploads. -- More generous parsing of the ``no_proxy`` environment variable. -- Non-string objects can be passed in data values alongside files. - -1.2.3 (2013-05-25) -++++++++++++++++++ - -- Simple packaging fix - - -1.2.2 (2013-05-23) -++++++++++++++++++ - -- Simple packaging fix - - -1.2.1 (2013-05-20) -++++++++++++++++++ - -- 301 and 302 redirects now change the verb to GET for all verbs, not just - POST, improving browser compatibility. -- Python 3.3.2 compatibility -- Always percent-encode location headers -- Fix connection adapter matching to be most-specific first -- new argument to the default connection adapter for passing a block argument -- prevent a KeyError when there's no link headers - -1.2.0 (2013-03-31) -++++++++++++++++++ - -- Fixed cookies on sessions and on requests -- Significantly change how hooks are dispatched - hooks now receive all the - arguments specified by the user when making a request so hooks can make a - secondary request with the same parameters. This is especially necessary for - authentication handler authors -- certifi support was removed -- Fixed bug where using OAuth 1 with body ``signature_type`` sent no data -- Major proxy work thanks to @Lukasa including parsing of proxy authentication - from the proxy url -- Fix DigestAuth handling too many 401s -- Update vendored urllib3 to include SSL bug fixes -- Allow keyword arguments to be passed to ``json.loads()`` via the - ``Response.json()`` method -- Don't send ``Content-Length`` header by default on ``GET`` or ``HEAD`` - requests -- Add ``elapsed`` attribute to ``Response`` objects to time how long a request - took. -- Fix ``RequestsCookieJar`` -- Sessions and Adapters are now picklable, i.e., can be used with the - multiprocessing library -- Update charade to version 1.0.3 - -The change in how hooks are dispatched will likely cause a great deal of -issues. - -1.1.0 (2013-01-10) -++++++++++++++++++ - -- CHUNKED REQUESTS -- Support for iterable response bodies -- Assume servers persist redirect params -- Allow explicit content types to be specified for file data -- Make merge_kwargs case-insensitive when looking up keys - -1.0.3 (2012-12-18) -++++++++++++++++++ - -- Fix file upload encoding bug -- Fix cookie behavior - -1.0.2 (2012-12-17) -++++++++++++++++++ - -- Proxy fix for HTTPAdapter. - -1.0.1 (2012-12-17) -++++++++++++++++++ - -- Cert verification exception bug. -- Proxy fix for HTTPAdapter. - -1.0.0 (2012-12-17) -++++++++++++++++++ - -- Massive Refactor and Simplification -- Switch to Apache 2.0 license -- Swappable Connection Adapters -- Mountable Connection Adapters -- Mutable ProcessedRequest chain -- /s/prefetch/stream -- Removal of all configuration -- Standard library logging -- Make Response.json() callable, not property. -- Usage of new charade project, which provides python 2 and 3 simultaneous chardet. -- Removal of all hooks except 'response' -- Removal of all authentication helpers (OAuth, Kerberos) - -This is not a backwards compatible change. - -0.14.2 (2012-10-27) -+++++++++++++++++++ - -- Improved mime-compatible JSON handling -- Proxy fixes -- Path hack fixes -- Case-Insensitive Content-Encoding headers -- Support for CJK parameters in form posts - - -0.14.1 (2012-10-01) -+++++++++++++++++++ - -- Python 3.3 Compatibility -- Simply default accept-encoding -- Bugfixes - - -0.14.0 (2012-09-02) -++++++++++++++++++++ - -- No more iter_content errors if already downloaded. - -0.13.9 (2012-08-25) -+++++++++++++++++++ - -- Fix for OAuth + POSTs -- Remove exception eating from dispatch_hook -- General bugfixes - -0.13.8 (2012-08-21) -+++++++++++++++++++ - -- Incredible Link header support :) - -0.13.7 (2012-08-19) -+++++++++++++++++++ - -- Support for (key, value) lists everywhere. -- Digest Authentication improvements. -- Ensure proxy exclusions work properly. -- Clearer UnicodeError exceptions. -- Automatic casting of URLs to strings (fURL and such) -- Bugfixes. - -0.13.6 (2012-08-06) -+++++++++++++++++++ - -- Long awaited fix for hanging connections! - -0.13.5 (2012-07-27) -+++++++++++++++++++ - -- Packaging fix - -0.13.4 (2012-07-27) -+++++++++++++++++++ - -- GSSAPI/Kerberos authentication! -- App Engine 2.7 Fixes! -- Fix leaking connections (from urllib3 update) -- OAuthlib path hack fix -- OAuthlib URL parameters fix. - -0.13.3 (2012-07-12) -+++++++++++++++++++ - -- Use simplejson if available. -- Do not hide SSLErrors behind Timeouts. -- Fixed param handling with urls containing fragments. -- Significantly improved information in User Agent. -- client certificates are ignored when verify=False - -0.13.2 (2012-06-28) -+++++++++++++++++++ - -- Zero dependencies (once again)! -- New: Response.reason -- Sign querystring parameters in OAuth 1.0 -- Client certificates no longer ignored when verify=False -- Add openSUSE certificate support - -0.13.1 (2012-06-07) -+++++++++++++++++++ - -- Allow passing a file or file-like object as data. -- Allow hooks to return responses that indicate errors. -- Fix Response.text and Response.json for body-less responses. - -0.13.0 (2012-05-29) -+++++++++++++++++++ - -- Removal of Requests.async in favor of `grequests <https://github.com/kennethreitz/grequests>`_ -- Allow disabling of cookie persistence. -- New implementation of safe_mode -- cookies.get now supports default argument -- Session cookies not saved when Session.request is called with return_response=False -- Env: no_proxy support. -- RequestsCookieJar improvements. -- Various bug fixes. - -0.12.1 (2012-05-08) -+++++++++++++++++++ - -- New ``Response.json`` property. -- Ability to add string file uploads. -- Fix out-of-range issue with iter_lines. -- Fix iter_content default size. -- Fix POST redirects containing files. - -0.12.0 (2012-05-02) -+++++++++++++++++++ - -- EXPERIMENTAL OAUTH SUPPORT! -- Proper CookieJar-backed cookies interface with awesome dict-like interface. -- Speed fix for non-iterated content chunks. -- Move ``pre_request`` to a more usable place. -- New ``pre_send`` hook. -- Lazily encode data, params, files. -- Load system Certificate Bundle if ``certify`` isn't available. -- Cleanups, fixes. - -0.11.2 (2012-04-22) -+++++++++++++++++++ - -- Attempt to use the OS's certificate bundle if ``certifi`` isn't available. -- Infinite digest auth redirect fix. -- Multi-part file upload improvements. -- Fix decoding of invalid %encodings in URLs. -- If there is no content in a response don't throw an error the second time that content is attempted to be read. -- Upload data on redirects. - -0.11.1 (2012-03-30) -+++++++++++++++++++ - -* POST redirects now break RFC to do what browsers do: Follow up with a GET. -* New ``strict_mode`` configuration to disable new redirect behavior. - - -0.11.0 (2012-03-14) -+++++++++++++++++++ - -* Private SSL Certificate support -* Remove select.poll from Gevent monkeypatching -* Remove redundant generator for chunked transfer encoding -* Fix: Response.ok raises Timeout Exception in safe_mode - -0.10.8 (2012-03-09) -+++++++++++++++++++ - -* Generate chunked ValueError fix -* Proxy configuration by environment variables -* Simplification of iter_lines. -* New `trust_env` configuration for disabling system/environment hints. -* Suppress cookie errors. - -0.10.7 (2012-03-07) -+++++++++++++++++++ - -* `encode_uri` = False - -0.10.6 (2012-02-25) -+++++++++++++++++++ - -* Allow '=' in cookies. - -0.10.5 (2012-02-25) -+++++++++++++++++++ - -* Response body with 0 content-length fix. -* New async.imap. -* Don't fail on netrc. - - -0.10.4 (2012-02-20) -+++++++++++++++++++ - -* Honor netrc. - -0.10.3 (2012-02-20) -+++++++++++++++++++ - -* HEAD requests don't follow redirects anymore. -* raise_for_status() doesn't raise for 3xx anymore. -* Make Session objects picklable. -* ValueError for invalid schema URLs. - -0.10.2 (2012-01-15) -+++++++++++++++++++ - -* Vastly improved URL quoting. -* Additional allowed cookie key values. -* Attempted fix for "Too many open files" Error -* Replace unicode errors on first pass, no need for second pass. -* Append '/' to bare-domain urls before query insertion. -* Exceptions now inherit from RuntimeError. -* Binary uploads + auth fix. -* Bugfixes. - - -0.10.1 (2012-01-23) -+++++++++++++++++++ - -* PYTHON 3 SUPPORT! -* Dropped 2.5 Support. (*Backwards Incompatible*) - -0.10.0 (2012-01-21) -+++++++++++++++++++ - -* ``Response.content`` is now bytes-only. (*Backwards Incompatible*) -* New ``Response.text`` is unicode-only. -* If no ``Response.encoding`` is specified and ``chardet`` is available, ``Response.text`` will guess an encoding. -* Default to ISO-8859-1 (Western) encoding for "text" subtypes. -* Removal of `decode_unicode`. (*Backwards Incompatible*) -* New multiple-hooks system. -* New ``Response.register_hook`` for registering hooks within the pipeline. -* ``Response.url`` is now Unicode. - -0.9.3 (2012-01-18) -++++++++++++++++++ - -* SSL verify=False bugfix (apparent on windows machines). - -0.9.2 (2012-01-18) -++++++++++++++++++ - -* Asynchronous async.send method. -* Support for proper chunk streams with boundaries. -* session argument for Session classes. -* Print entire hook tracebacks, not just exception instance. -* Fix response.iter_lines from pending next line. -* Fix but in HTTP-digest auth w/ URI having query strings. -* Fix in Event Hooks section. -* Urllib3 update. - - -0.9.1 (2012-01-06) -++++++++++++++++++ - -* danger_mode for automatic Response.raise_for_status() -* Response.iter_lines refactor - -0.9.0 (2011-12-28) -++++++++++++++++++ - -* verify ssl is default. - - -0.8.9 (2011-12-28) -++++++++++++++++++ - -* Packaging fix. - - -0.8.8 (2011-12-28) -++++++++++++++++++ - -* SSL CERT VERIFICATION! -* Release of Cerifi: Mozilla's cert list. -* New 'verify' argument for SSL requests. -* Urllib3 update. - -0.8.7 (2011-12-24) -++++++++++++++++++ - -* iter_lines last-line truncation fix -* Force safe_mode for async requests -* Handle safe_mode exceptions more consistently -* Fix iteration on null responses in safe_mode - -0.8.6 (2011-12-18) -++++++++++++++++++ - -* Socket timeout fixes. -* Proxy Authorization support. - -0.8.5 (2011-12-14) -++++++++++++++++++ - -* Response.iter_lines! - -0.8.4 (2011-12-11) -++++++++++++++++++ - -* Prefetch bugfix. -* Added license to installed version. - -0.8.3 (2011-11-27) -++++++++++++++++++ - -* Converted auth system to use simpler callable objects. -* New session parameter to API methods. -* Display full URL while logging. - -0.8.2 (2011-11-19) -++++++++++++++++++ - -* New Unicode decoding system, based on over-ridable `Response.encoding`. -* Proper URL slash-quote handling. -* Cookies with ``[``, ``]``, and ``_`` allowed. - -0.8.1 (2011-11-15) -++++++++++++++++++ - -* URL Request path fix -* Proxy fix. -* Timeouts fix. - -0.8.0 (2011-11-13) -++++++++++++++++++ - -* Keep-alive support! -* Complete removal of Urllib2 -* Complete removal of Poster -* Complete removal of CookieJars -* New ConnectionError raising -* Safe_mode for error catching -* prefetch parameter for request methods -* OPTION method -* Async pool size throttling -* File uploads send real names -* Vendored in urllib3 - -0.7.6 (2011-11-07) -++++++++++++++++++ - -* Digest authentication bugfix (attach query data to path) - -0.7.5 (2011-11-04) -++++++++++++++++++ - -* Response.content = None if there was an invalid response. -* Redirection auth handling. - -0.7.4 (2011-10-26) -++++++++++++++++++ - -* Session Hooks fix. - -0.7.3 (2011-10-23) -++++++++++++++++++ - -* Digest Auth fix. - - -0.7.2 (2011-10-23) -++++++++++++++++++ - -* PATCH Fix. - - -0.7.1 (2011-10-23) -++++++++++++++++++ - -* Move away from urllib2 authentication handling. -* Fully Remove AuthManager, AuthObject, &c. -* New tuple-based auth system with handler callbacks. - - -0.7.0 (2011-10-22) -++++++++++++++++++ - -* Sessions are now the primary interface. -* Deprecated InvalidMethodException. -* PATCH fix. -* New config system (no more global settings). - - -0.6.6 (2011-10-19) -++++++++++++++++++ - -* Session parameter bugfix (params merging). - - -0.6.5 (2011-10-18) -++++++++++++++++++ - -* Offline (fast) test suite. -* Session dictionary argument merging. - - -0.6.4 (2011-10-13) -++++++++++++++++++ - -* Automatic decoding of unicode, based on HTTP Headers. -* New ``decode_unicode`` setting. -* Removal of ``r.read/close`` methods. -* New ``r.faw`` interface for advanced response usage.* -* Automatic expansion of parameterized headers. - - -0.6.3 (2011-10-13) -++++++++++++++++++ - -* Beautiful ``requests.async`` module, for making async requests w/ gevent. - - -0.6.2 (2011-10-09) -++++++++++++++++++ - -* GET/HEAD obeys allow_redirects=False. - - -0.6.1 (2011-08-20) -++++++++++++++++++ - -* Enhanced status codes experience ``\o/`` -* Set a maximum number of redirects (``settings.max_redirects``) -* Full Unicode URL support -* Support for protocol-less redirects. -* Allow for arbitrary request types. -* Bugfixes - - -0.6.0 (2011-08-17) -++++++++++++++++++ - -* New callback hook system -* New persistent sessions object and context manager -* Transparent Dict-cookie handling -* Status code reference object -* Removed Response.cached -* Added Response.request -* All args are kwargs -* Relative redirect support -* HTTPError handling improvements -* Improved https testing -* Bugfixes - - -0.5.1 (2011-07-23) -++++++++++++++++++ - -* International Domain Name Support! -* Access headers without fetching entire body (``read()``) -* Use lists as dicts for parameters -* Add Forced Basic Authentication -* Forced Basic is default authentication type -* ``python-requests.org`` default User-Agent header -* CaseInsensitiveDict lower-case caching -* Response.history bugfix - - -0.5.0 (2011-06-21) -++++++++++++++++++ - -* PATCH Support -* Support for Proxies -* HTTPBin Test Suite -* Redirect Fixes -* settings.verbose stream writing -* Querystrings for all methods -* URLErrors (Connection Refused, Timeout, Invalid URLs) are treated as explicitly raised - ``r.requests.get('hwe://blah'); r.raise_for_status()`` - - -0.4.1 (2011-05-22) -++++++++++++++++++ - -* Improved Redirection Handling -* New 'allow_redirects' param for following non-GET/HEAD Redirects -* Settings module refactoring - - -0.4.0 (2011-05-15) -++++++++++++++++++ - -* Response.history: list of redirected responses -* Case-Insensitive Header Dictionaries! -* Unicode URLs - - -0.3.4 (2011-05-14) -++++++++++++++++++ - -* Urllib2 HTTPAuthentication Recursion fix (Basic/Digest) -* Internal Refactor -* Bytes data upload Bugfix - - - -0.3.3 (2011-05-12) -++++++++++++++++++ - -* Request timeouts -* Unicode url-encoded data -* Settings context manager and module - - -0.3.2 (2011-04-15) -++++++++++++++++++ - -* Automatic Decompression of GZip Encoded Content -* AutoAuth Support for Tupled HTTP Auth - - -0.3.1 (2011-04-01) -++++++++++++++++++ - -* Cookie Changes -* Response.read() -* Poster fix - - -0.3.0 (2011-02-25) -++++++++++++++++++ - -* Automatic Authentication API Change -* Smarter Query URL Parameterization -* Allow file uploads and POST data together -* New Authentication Manager System - - Simpler Basic HTTP System - - Supports all build-in urllib2 Auths - - Allows for custom Auth Handlers - - -0.2.4 (2011-02-19) -++++++++++++++++++ - -* Python 2.5 Support -* PyPy-c v1.4 Support -* Auto-Authentication tests -* Improved Request object constructor - -0.2.3 (2011-02-15) -++++++++++++++++++ - -* New HTTPHandling Methods - - Response.__nonzero__ (false if bad HTTP Status) - - Response.ok (True if expected HTTP Status) - - Response.error (Logged HTTPError if bad HTTP Status) - - Response.raise_for_status() (Raises stored HTTPError) - - -0.2.2 (2011-02-14) -++++++++++++++++++ - -* Still handles request in the event of an HTTPError. (Issue #2) -* Eventlet and Gevent Monkeypatch support. -* Cookie Support (Issue #1) - - -0.2.1 (2011-02-14) -++++++++++++++++++ - -* Added file attribute to POST and PUT requests for multipart-encode file uploads. -* Added Request.url attribute for context and redirects - - -0.2.0 (2011-02-14) -++++++++++++++++++ - -* Birth! - - -0.0.1 (2011-02-13) -++++++++++++++++++ - -* Frustration -* Conception - - diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/LICENSE.txt b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/LICENSE.txt deleted file mode 100644 index 2e68b82..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/LICENSE.txt +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2018 Kenneth Reitz - - 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. diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/METADATA b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/METADATA deleted file mode 100644 index ba21618..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/METADATA +++ /dev/null @@ -1,1721 +0,0 @@ -Metadata-Version: 2.0 -Name: requests -Version: 2.19.1 -Summary: Python HTTP for Humans. -Home-page: http://python-requests.org -Author: Kenneth Reitz -Author-email: me@kennethreitz.org -License: Apache 2.0 -Description-Content-Type: text/x-rst -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* -Requires-Dist: chardet (<3.1.0,>=3.0.2) -Requires-Dist: idna (<2.8,>=2.5) -Requires-Dist: urllib3 (<1.24,>=1.21.1) -Requires-Dist: certifi (>=2017.4.17) -Provides-Extra: security -Requires-Dist: pyOpenSSL (>=0.14); extra == 'security' -Requires-Dist: cryptography (>=1.3.4); extra == 'security' -Requires-Dist: idna (>=2.0.0); extra == 'security' -Provides-Extra: socks -Requires-Dist: PySocks (!=1.5.7,>=1.5.6); extra == 'socks' -Provides-Extra: socks -Requires-Dist: win-inet-pton; sys_platform == "win32" and (python_version == "2.7" or python_version == "2.6") and extra == 'socks' - -Requests: HTTP for Humans -========================= - -.. image:: https://img.shields.io/pypi/v/requests.svg - :target: https://pypi.org/project/requests/ - -.. image:: https://img.shields.io/pypi/l/requests.svg - :target: https://pypi.org/project/requests/ - -.. image:: https://img.shields.io/pypi/pyversions/requests.svg - :target: https://pypi.org/project/requests/ - -.. image:: https://codecov.io/github/requests/requests/coverage.svg?branch=master - :target: https://codecov.io/github/requests/requests - :alt: codecov.io - -.. image:: https://img.shields.io/github/contributors/requests/requests.svg - :target: https://github.com/requests/requests/graphs/contributors - -.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg - :target: https://saythanks.io/to/kennethreitz - -Requests is the only *Non-GMO* HTTP library for Python, safe for human -consumption. - -.. image:: https://farm5.staticflickr.com/4317/35198386374_1939af3de6_k_d.jpg - -Behold, the power of Requests: - -.. code-block:: python - - >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) - >>> r.status_code - 200 - >>> r.headers['content-type'] - 'application/json; charset=utf8' - >>> r.encoding - 'utf-8' - >>> r.text - u'{"type":"User"...' - >>> r.json() - {u'disk_usage': 368627, u'private_gists': 484, ...} - -See `the similar code, sans Requests <https://gist.github.com/973705>`_. - -.. image:: https://raw.githubusercontent.com/requests/requests/master/docs/_static/requests-logo-small.png - :target: http://docs.python-requests.org/ - - -Requests allows you to send *organic, grass-fed* HTTP/1.1 requests, without the -need for manual labor. There's no need to manually add query strings to your -URLs, or to form-encode your POST data. Keep-alive and HTTP connection pooling -are 100% automatic, thanks to `urllib3 <https://github.com/shazow/urllib3>`_. - -Besides, all the cool kids are doing it. Requests is one of the most -downloaded Python packages of all time, pulling in over 11,000,000 downloads -every month. You don't want to be left out! - -Feature Support ---------------- - -Requests is ready for today's web. - -- International Domains and URLs -- Keep-Alive & Connection Pooling -- Sessions with Cookie Persistence -- Browser-style SSL Verification -- Basic/Digest Authentication -- Elegant Key/Value Cookies -- Automatic Decompression -- Automatic Content Decoding -- Unicode Response Bodies -- Multipart File Uploads -- HTTP(S) Proxy Support -- Connection Timeouts -- Streaming Downloads -- ``.netrc`` Support -- Chunked Requests - -Requests officially supports Python 2.7 & 3.4–3.6, and runs great on PyPy. - -Installation ------------- - -To install Requests, simply use `pipenv <http://pipenv.org/>`_ (or pip, of course): - -.. code-block:: bash - - $ pipenv install requests - ✨🍰✨ - -Satisfaction guaranteed. - -Documentation -------------- - -Fantastic documentation is available at http://docs.python-requests.org/, for a limited time only. - - -How to Contribute ------------------ - -#. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. There is a `Contributor Friendly`_ tag for issues that should be ideal for people who are not very familiar with the codebase yet. -#. Fork `the repository`_ on GitHub to start making your changes to the **master** branch (or branch off of it). -#. Write a test which shows that the bug was fixed or that the feature works as expected. -#. Send a pull request and bug the maintainer until it gets merged and published. :) Make sure to add yourself to AUTHORS_. - -.. _`the repository`: https://github.com/requests/requests -.. _AUTHORS: https://github.com/requests/requests/blob/master/AUTHORS.rst -.. _Contributor Friendly: https://github.com/requests/requests/issues?direction=desc&labels=Contributor+Friendly&page=1&sort=updated&state=open - - -.. :changelog: - -Release History ---------------- - -dev -+++ - -- [Short description of non-trivial change.] - -2.19.1 (2018-06-14) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed issue where status_codes.py's ``init`` function failed trying to append to - a ``__doc__`` value of ``None``. - -2.19.0 (2018-06-12) -+++++++++++++++++++ - -**Improvements** - -- Warn user about possible slowdown when using cryptography version < 1.3.4 -- Check for invalid host in proxy URL, before forwarding request to adapter. -- Fragments are now properly maintained across redirects. (RFC7231 7.1.2) -- Removed use of cgi module to expedite library load time. -- Added support for SHA-256 and SHA-512 digest auth algorithms. -- Minor performance improvement to ``Request.content``. -- Migrate to using collections.abc for 3.7 compatibility. - -**Bugfixes** - -- Parsing empty ``Link`` headers with ``parse_header_links()`` no longer return one bogus entry. -- Fixed issue where loading the default certificate bundle from a zip archive - would raise an ``IOError``. -- Fixed issue with unexpected ``ImportError`` on windows system which do not support ``winreg`` module. -- DNS resolution in proxy bypass no longer includes the username and password in - the request. This also fixes the issue of DNS queries failing on macOS. -- Properly normalize adapter prefixes for url comparison. -- Passing ``None`` as a file pointer to the ``files`` param no longer raises an exception. -- Calling ``copy`` on a ``RequestsCookieJar`` will now preserve the cookie policy correctly. - -**Dependencies** - -- We now support idna v2.7. -- We now support urllib3 v1.23. - -2.18.4 (2017-08-15) -+++++++++++++++++++ - -**Improvements** - -- Error messages for invalid headers now include the header name for easier debugging - -**Dependencies** - -- We now support idna v2.6. - -2.18.3 (2017-08-02) -+++++++++++++++++++ - -**Improvements** - -- Running ``$ python -m requests.help`` now includes the installed version of idna. - -**Bugfixes** - -- Fixed issue where Requests would raise ``ConnectionError`` instead of - ``SSLError`` when encountering SSL problems when using urllib3 v1.22. - -2.18.2 (2017-07-25) -+++++++++++++++++++ - -**Bugfixes** - -- ``requests.help`` no longer fails on Python 2.6 due to the absence of - ``ssl.OPENSSL_VERSION_NUMBER``. - -**Dependencies** - -- We now support urllib3 v1.22. - -2.18.1 (2017-06-14) -+++++++++++++++++++ - -**Bugfixes** - -- Fix an error in the packaging whereby the ``*.whl`` contained incorrect data - that regressed the fix in v2.17.3. - -2.18.0 (2017-06-14) -+++++++++++++++++++ - -**Improvements** - -- ``Response`` is now a context manager, so can be used directly in a ``with`` statement - without first having to be wrapped by ``contextlib.closing()``. - -**Bugfixes** - -- Resolve installation failure if multiprocessing is not available -- Resolve tests crash if multiprocessing is not able to determine the number of CPU cores -- Resolve error swallowing in utils set_environ generator - - -2.17.3 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Improved ``packages`` namespace identity support, for monkeypatching libraries. - - -2.17.2 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Improved ``packages`` namespace identity support, for monkeypatching libraries. - - -2.17.1 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Improved ``packages`` namespace identity support, for monkeypatching libraries. - - -2.17.0 (2017-05-29) -+++++++++++++++++++ - -**Improvements** - -- Removal of the 301 redirect cache. This improves thread-safety. - - -2.16.5 (2017-05-28) -+++++++++++++++++++ - -- Improvements to ``$ python -m requests.help``. - -2.16.4 (2017-05-27) -+++++++++++++++++++ - -- Introduction of the ``$ python -m requests.help`` command, for debugging with maintainers! - -2.16.3 (2017-05-27) -+++++++++++++++++++ - -- Further restored the ``requests.packages`` namespace for compatibility reasons. - -2.16.2 (2017-05-27) -+++++++++++++++++++ - -- Further restored the ``requests.packages`` namespace for compatibility reasons. - -No code modification (noted below) should be necessary any longer. - -2.16.1 (2017-05-27) -+++++++++++++++++++ - -- Restored the ``requests.packages`` namespace for compatibility reasons. -- Bugfix for ``urllib3`` version parsing. - -**Note**: code that was written to import against the ``requests.packages`` -namespace previously will have to import code that rests at this module-level -now. - -For example:: - - from requests.packages.urllib3.poolmanager import PoolManager - -Will need to be re-written to be:: - - from requests.packages import urllib3 - urllib3.poolmanager.PoolManager - -Or, even better:: - - from urllib3.poolmanager import PoolManager - -2.16.0 (2017-05-26) -+++++++++++++++++++ - -- Unvendor ALL the things! - -2.15.1 (2017-05-26) -+++++++++++++++++++ - -- Everyone makes mistakes. - -2.15.0 (2017-05-26) -+++++++++++++++++++ - -**Improvements** - -- Introduction of the ``Response.next`` property, for getting the next - ``PreparedResponse`` from a redirect chain (when ``allow_redirects=False``). -- Internal refactoring of ``__version__`` module. - -**Bugfixes** - -- Restored once-optional parameter for ``requests.utils.get_environ_proxies()``. - -2.14.2 (2017-05-10) -+++++++++++++++++++ - -**Bugfixes** - -- Changed a less-than to an equal-to and an or in the dependency markers to - widen compatibility with older setuptools releases. - -2.14.1 (2017-05-09) -+++++++++++++++++++ - -**Bugfixes** - -- Changed the dependency markers to widen compatibility with older pip - releases. - -2.14.0 (2017-05-09) -+++++++++++++++++++ - -**Improvements** - -- It is now possible to pass ``no_proxy`` as a key to the ``proxies`` - dictionary to provide handling similar to the ``NO_PROXY`` environment - variable. -- When users provide invalid paths to certificate bundle files or directories - Requests now raises ``IOError``, rather than failing at the time of the HTTPS - request with a fairly inscrutable certificate validation error. -- The behavior of ``SessionRedirectMixin`` was slightly altered. - ``resolve_redirects`` will now detect a redirect by calling - ``get_redirect_target(response)`` instead of directly - querying ``Response.is_redirect`` and ``Response.headers['location']``. - Advanced users will be able to process malformed redirects more easily. -- Changed the internal calculation of elapsed request time to have higher - resolution on Windows. -- Added ``win_inet_pton`` as conditional dependency for the ``[socks]`` extra - on Windows with Python 2.7. -- Changed the proxy bypass implementation on Windows: the proxy bypass - check doesn't use forward and reverse DNS requests anymore -- URLs with schemes that begin with ``http`` but are not ``http`` or ``https`` - no longer have their host parts forced to lowercase. - -**Bugfixes** - -- Much improved handling of non-ASCII ``Location`` header values in redirects. - Fewer ``UnicodeDecodeErrors`` are encountered on Python 2, and Python 3 now - correctly understands that Latin-1 is unlikely to be the correct encoding. -- If an attempt to ``seek`` file to find out its length fails, we now - appropriately handle that by aborting our content-length calculations. -- Restricted ``HTTPDigestAuth`` to only respond to auth challenges made on 4XX - responses, rather than to all auth challenges. -- Fixed some code that was firing ``DeprecationWarning`` on Python 3.6. -- The dismayed person emoticon (``/o\\``) no longer has a big head. I'm sure - this is what you were all worrying about most. - - -**Miscellaneous** - -- Updated bundled urllib3 to v1.21.1. -- Updated bundled chardet to v3.0.2. -- Updated bundled idna to v2.5. -- Updated bundled certifi to 2017.4.17. - -2.13.0 (2017-01-24) -+++++++++++++++++++ - -**Features** - -- Only load the ``idna`` library when we've determined we need it. This will - save some memory for users. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.20. -- Updated bundled idna to 2.2. - -2.12.5 (2017-01-18) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed an issue with JSON encoding detection, specifically detecting - big-endian UTF-32 with BOM. - -2.12.4 (2016-12-14) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed regression from 2.12.2 where non-string types were rejected in the - basic auth parameters. While support for this behaviour has been readded, - the behaviour is deprecated and will be removed in the future. - -2.12.3 (2016-12-01) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed regression from v2.12.1 for URLs with schemes that begin with "http". - These URLs have historically been processed as though they were HTTP-schemed - URLs, and so have had parameters added. This was removed in v2.12.2 in an - overzealous attempt to resolve problems with IDNA-encoding those URLs. This - change was reverted: the other fixes for IDNA-encoding have been judged to - be sufficient to return to the behaviour Requests had before v2.12.0. - -2.12.2 (2016-11-30) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed several issues with IDNA-encoding URLs that are technically invalid but - which are widely accepted. Requests will now attempt to IDNA-encode a URL if - it can but, if it fails, and the host contains only ASCII characters, it will - be passed through optimistically. This will allow users to opt-in to using - IDNA2003 themselves if they want to, and will also allow technically invalid - but still common hostnames. -- Fixed an issue where URLs with leading whitespace would raise - ``InvalidSchema`` errors. -- Fixed an issue where some URLs without the HTTP or HTTPS schemes would still - have HTTP URL preparation applied to them. -- Fixed an issue where Unicode strings could not be used in basic auth. -- Fixed an issue encountered by some Requests plugins where constructing a - Response object would cause ``Response.content`` to raise an - ``AttributeError``. - -2.12.1 (2016-11-16) -+++++++++++++++++++ - -**Bugfixes** - -- Updated setuptools 'security' extra for the new PyOpenSSL backend in urllib3. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.19.1. - -2.12.0 (2016-11-15) -+++++++++++++++++++ - -**Improvements** - -- Updated support for internationalized domain names from IDNA2003 to IDNA2008. - This updated support is required for several forms of IDNs and is mandatory - for .de domains. -- Much improved heuristics for guessing content lengths: Requests will no - longer read an entire ``StringIO`` into memory. -- Much improved logic for recalculating ``Content-Length`` headers for - ``PreparedRequest`` objects. -- Improved tolerance for file-like objects that have no ``tell`` method but - do have a ``seek`` method. -- Anything that is a subclass of ``Mapping`` is now treated like a dictionary - by the ``data=`` keyword argument. -- Requests now tolerates empty passwords in proxy credentials, rather than - stripping the credentials. -- If a request is made with a file-like object as the body and that request is - redirected with a 307 or 308 status code, Requests will now attempt to - rewind the body object so it can be replayed. - -**Bugfixes** - -- When calling ``response.close``, the call to ``close`` will be propagated - through to non-urllib3 backends. -- Fixed issue where the ``ALL_PROXY`` environment variable would be preferred - over scheme-specific variables like ``HTTP_PROXY``. -- Fixed issue where non-UTF8 reason phrases got severely mangled by falling - back to decoding using ISO 8859-1 instead. -- Fixed a bug where Requests would not correctly correlate cookies set when - using custom Host headers if those Host headers did not use the native - string type for the platform. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.19. -- Updated bundled certifi certs to 2016.09.26. - -2.11.1 (2016-08-17) -+++++++++++++++++++ - -**Bugfixes** - -- Fixed a bug when using ``iter_content`` with ``decode_unicode=True`` for - streamed bodies would raise ``AttributeError``. This bug was introduced in - 2.11. -- Strip Content-Type and Transfer-Encoding headers from the header block when - following a redirect that transforms the verb from POST/PUT to GET. - -2.11.0 (2016-08-08) -+++++++++++++++++++ - -**Improvements** - -- Added support for the ``ALL_PROXY`` environment variable. -- Reject header values that contain leading whitespace or newline characters to - reduce risk of header smuggling. - -**Bugfixes** - -- Fixed occasional ``TypeError`` when attempting to decode a JSON response that - occurred in an error case. Now correctly returns a ``ValueError``. -- Requests would incorrectly ignore a non-CIDR IP address in the ``NO_PROXY`` - environment variables: Requests now treats it as a specific IP. -- Fixed a bug when sending JSON data that could cause us to encounter obscure - OpenSSL errors in certain network conditions (yes, really). -- Added type checks to ensure that ``iter_content`` only accepts integers and - ``None`` for chunk sizes. -- Fixed issue where responses whose body had not been fully consumed would have - the underlying connection closed but not returned to the connection pool, - which could cause Requests to hang in situations where the ``HTTPAdapter`` - had been configured to use a blocking connection pool. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.16. -- Some previous releases accidentally accepted non-strings as acceptable header values. This release does not. - -2.10.0 (2016-04-29) -+++++++++++++++++++ - -**New Features** - -- SOCKS Proxy Support! (requires PySocks; ``$ pip install requests[socks]``) - -**Miscellaneous** - -- Updated bundled urllib3 to 1.15.1. - -2.9.2 (2016-04-29) -++++++++++++++++++ - -**Improvements** - -- Change built-in CaseInsensitiveDict (used for headers) to use OrderedDict - as its underlying datastore. - -**Bugfixes** - -- Don't use redirect_cache if allow_redirects=False -- When passed objects that throw exceptions from ``tell()``, send them via - chunked transfer encoding instead of failing. -- Raise a ProxyError for proxy related connection issues. - -2.9.1 (2015-12-21) -++++++++++++++++++ - -**Bugfixes** - -- Resolve regression introduced in 2.9.0 that made it impossible to send binary - strings as bodies in Python 3. -- Fixed errors when calculating cookie expiration dates in certain locales. - -**Miscellaneous** - -- Updated bundled urllib3 to 1.13.1. - -2.9.0 (2015-12-15) -++++++++++++++++++ - -**Minor Improvements** (Backwards compatible) - -- The ``verify`` keyword argument now supports being passed a path to a - directory of CA certificates, not just a single-file bundle. -- Warnings are now emitted when sending files opened in text mode. -- Added the 511 Network Authentication Required status code to the status code - registry. - -**Bugfixes** - -- For file-like objects that are not seeked to the very beginning, we now - send the content length for the number of bytes we will actually read, rather - than the total size of the file, allowing partial file uploads. -- When uploading file-like objects, if they are empty or have no obvious - content length we set ``Transfer-Encoding: chunked`` rather than - ``Content-Length: 0``. -- We correctly receive the response in buffered mode when uploading chunked - bodies. -- We now handle being passed a query string as a bytestring on Python 3, by - decoding it as UTF-8. -- Sessions are now closed in all cases (exceptional and not) when using the - functional API rather than leaking and waiting for the garbage collector to - clean them up. -- Correctly handle digest auth headers with a malformed ``qop`` directive that - contains no token, by treating it the same as if no ``qop`` directive was - provided at all. -- Minor performance improvements when removing specific cookies by name. - -**Miscellaneous** - -- Updated urllib3 to 1.13. - -2.8.1 (2015-10-13) -++++++++++++++++++ - -**Bugfixes** - -- Update certificate bundle to match ``certifi`` 2015.9.6.2's weak certificate - bundle. -- Fix a bug in 2.8.0 where requests would raise ``ConnectTimeout`` instead of - ``ConnectionError`` -- When using the PreparedRequest flow, requests will now correctly respect the - ``json`` parameter. Broken in 2.8.0. -- When using the PreparedRequest flow, requests will now correctly handle a - Unicode-string method name on Python 2. Broken in 2.8.0. - -2.8.0 (2015-10-05) -++++++++++++++++++ - -**Minor Improvements** (Backwards Compatible) - -- Requests now supports per-host proxies. This allows the ``proxies`` - dictionary to have entries of the form - ``{'<scheme>://<hostname>': '<proxy>'}``. Host-specific proxies will be used - in preference to the previously-supported scheme-specific ones, but the - previous syntax will continue to work. -- ``Response.raise_for_status`` now prints the URL that failed as part of the - exception message. -- ``requests.utils.get_netrc_auth`` now takes an ``raise_errors`` kwarg, - defaulting to ``False``. When ``True``, errors parsing ``.netrc`` files cause - exceptions to be thrown. -- Change to bundled projects import logic to make it easier to unbundle - requests downstream. -- Changed the default User-Agent string to avoid leaking data on Linux: now - contains only the requests version. - -**Bugfixes** - -- The ``json`` parameter to ``post()`` and friends will now only be used if - neither ``data`` nor ``files`` are present, consistent with the - documentation. -- We now ignore empty fields in the ``NO_PROXY`` environment variable. -- Fixed problem where ``httplib.BadStatusLine`` would get raised if combining - ``stream=True`` with ``contextlib.closing``. -- Prevented bugs where we would attempt to return the same connection back to - the connection pool twice when sending a Chunked body. -- Miscellaneous minor internal changes. -- Digest Auth support is now thread safe. - -**Updates** - -- Updated urllib3 to 1.12. - -2.7.0 (2015-05-03) -++++++++++++++++++ - -This is the first release that follows our new release process. For more, see -`our documentation -<http://docs.python-requests.org/en/latest/community/release-process/>`_. - -**Bugfixes** - -- Updated urllib3 to 1.10.4, resolving several bugs involving chunked transfer - encoding and response framing. - -2.6.2 (2015-04-23) -++++++++++++++++++ - -**Bugfixes** - -- Fix regression where compressed data that was sent as chunked data was not - properly decompressed. (#2561) - -2.6.1 (2015-04-22) -++++++++++++++++++ - -**Bugfixes** - -- Remove VendorAlias import machinery introduced in v2.5.2. - -- Simplify the PreparedRequest.prepare API: We no longer require the user to - pass an empty list to the hooks keyword argument. (c.f. #2552) - -- Resolve redirects now receives and forwards all of the original arguments to - the adapter. (#2503) - -- Handle UnicodeDecodeErrors when trying to deal with a unicode URL that - cannot be encoded in ASCII. (#2540) - -- Populate the parsed path of the URI field when performing Digest - Authentication. (#2426) - -- Copy a PreparedRequest's CookieJar more reliably when it is not an instance - of RequestsCookieJar. (#2527) - -2.6.0 (2015-03-14) -++++++++++++++++++ - -**Bugfixes** - -- CVE-2015-2296: Fix handling of cookies on redirect. Previously a cookie - without a host value set would use the hostname for the redirected URL - exposing requests users to session fixation attacks and potentially cookie - stealing. This was disclosed privately by Matthew Daley of - `BugFuzz <https://bugfuzz.com>`_. This affects all versions of requests from - v2.1.0 to v2.5.3 (inclusive on both ends). - -- Fix error when requests is an ``install_requires`` dependency and ``python - setup.py test`` is run. (#2462) - -- Fix error when urllib3 is unbundled and requests continues to use the - vendored import location. - -- Include fixes to ``urllib3``'s header handling. - -- Requests' handling of unvendored dependencies is now more restrictive. - -**Features and Improvements** - -- Support bytearrays when passed as parameters in the ``files`` argument. - (#2468) - -- Avoid data duplication when creating a request with ``str``, ``bytes``, or - ``bytearray`` input to the ``files`` argument. - -2.5.3 (2015-02-24) -++++++++++++++++++ - -**Bugfixes** - -- Revert changes to our vendored certificate bundle. For more context see - (#2455, #2456, and http://bugs.python.org/issue23476) - -2.5.2 (2015-02-23) -++++++++++++++++++ - -**Features and Improvements** - -- Add sha256 fingerprint support. (`shazow/urllib3#540`_) - -- Improve the performance of headers. (`shazow/urllib3#544`_) - -**Bugfixes** - -- Copy pip's import machinery. When downstream redistributors remove - requests.packages.urllib3 the import machinery will continue to let those - same symbols work. Example usage in requests' documentation and 3rd-party - libraries relying on the vendored copies of urllib3 will work without having - to fallback to the system urllib3. - -- Attempt to quote parts of the URL on redirect if unquoting and then quoting - fails. (#2356) - -- Fix filename type check for multipart form-data uploads. (#2411) - -- Properly handle the case where a server issuing digest authentication - challenges provides both auth and auth-int qop-values. (#2408) - -- Fix a socket leak. (`shazow/urllib3#549`_) - -- Fix multiple ``Set-Cookie`` headers properly. (`shazow/urllib3#534`_) - -- Disable the built-in hostname verification. (`shazow/urllib3#526`_) - -- Fix the behaviour of decoding an exhausted stream. (`shazow/urllib3#535`_) - -**Security** - -- Pulled in an updated ``cacert.pem``. - -- Drop RC4 from the default cipher list. (`shazow/urllib3#551`_) - -.. _shazow/urllib3#551: https://github.com/shazow/urllib3/pull/551 -.. _shazow/urllib3#549: https://github.com/shazow/urllib3/pull/549 -.. _shazow/urllib3#544: https://github.com/shazow/urllib3/pull/544 -.. _shazow/urllib3#540: https://github.com/shazow/urllib3/pull/540 -.. _shazow/urllib3#535: https://github.com/shazow/urllib3/pull/535 -.. _shazow/urllib3#534: https://github.com/shazow/urllib3/pull/534 -.. _shazow/urllib3#526: https://github.com/shazow/urllib3/pull/526 - -2.5.1 (2014-12-23) -++++++++++++++++++ - -**Behavioural Changes** - -- Only catch HTTPErrors in raise_for_status (#2382) - -**Bugfixes** - -- Handle LocationParseError from urllib3 (#2344) -- Handle file-like object filenames that are not strings (#2379) -- Unbreak HTTPDigestAuth handler. Allow new nonces to be negotiated (#2389) - -2.5.0 (2014-12-01) -++++++++++++++++++ - -**Improvements** - -- Allow usage of urllib3's Retry object with HTTPAdapters (#2216) -- The ``iter_lines`` method on a response now accepts a delimiter with which - to split the content (#2295) - -**Behavioural Changes** - -- Add deprecation warnings to functions in requests.utils that will be removed - in 3.0 (#2309) -- Sessions used by the functional API are always closed (#2326) -- Restrict requests to HTTP/1.1 and HTTP/1.0 (stop accepting HTTP/0.9) (#2323) - -**Bugfixes** - -- Only parse the URL once (#2353) -- Allow Content-Length header to always be overridden (#2332) -- Properly handle files in HTTPDigestAuth (#2333) -- Cap redirect_cache size to prevent memory abuse (#2299) -- Fix HTTPDigestAuth handling of redirects after authenticating successfully - (#2253) -- Fix crash with custom method parameter to Session.request (#2317) -- Fix how Link headers are parsed using the regular expression library (#2271) - -**Documentation** - -- Add more references for interlinking (#2348) -- Update CSS for theme (#2290) -- Update width of buttons and sidebar (#2289) -- Replace references of Gittip with Gratipay (#2282) -- Add link to changelog in sidebar (#2273) - -2.4.3 (2014-10-06) -++++++++++++++++++ - -**Bugfixes** - -- Unicode URL improvements for Python 2. -- Re-order JSON param for backwards compat. -- Automatically defrag authentication schemes from host/pass URIs. (`#2249 <https://github.com/requests/requests/issues/2249>`_) - - -2.4.2 (2014-10-05) -++++++++++++++++++ - -**Improvements** - -- FINALLY! Add json parameter for uploads! (`#2258 <https://github.com/requests/requests/pull/2258>`_) -- Support for bytestring URLs on Python 3.x (`#2238 <https://github.com/requests/requests/pull/2238>`_) - -**Bugfixes** - -- Avoid getting stuck in a loop (`#2244 <https://github.com/requests/requests/pull/2244>`_) -- Multiple calls to iter* fail with unhelpful error. (`#2240 <https://github.com/requests/requests/issues/2240>`_, `#2241 <https://github.com/requests/requests/issues/2241>`_) - -**Documentation** - -- Correct redirection introduction (`#2245 <https://github.com/requests/requests/pull/2245/>`_) -- Added example of how to send multiple files in one request. (`#2227 <https://github.com/requests/requests/pull/2227/>`_) -- Clarify how to pass a custom set of CAs (`#2248 <https://github.com/requests/requests/pull/2248/>`_) - - - -2.4.1 (2014-09-09) -++++++++++++++++++ - -- Now has a "security" package extras set, ``$ pip install requests[security]`` -- Requests will now use Certifi if it is available. -- Capture and re-raise urllib3 ProtocolError -- Bugfix for responses that attempt to redirect to themselves forever (wtf?). - - -2.4.0 (2014-08-29) -++++++++++++++++++ - -**Behavioral Changes** - -- ``Connection: keep-alive`` header is now sent automatically. - -**Improvements** - -- Support for connect timeouts! Timeout now accepts a tuple (connect, read) which is used to set individual connect and read timeouts. -- Allow copying of PreparedRequests without headers/cookies. -- Updated bundled urllib3 version. -- Refactored settings loading from environment -- new `Session.merge_environment_settings`. -- Handle socket errors in iter_content. - - -2.3.0 (2014-05-16) -++++++++++++++++++ - -**API Changes** - -- New ``Response`` property ``is_redirect``, which is true when the - library could have processed this response as a redirection (whether - or not it actually did). -- The ``timeout`` parameter now affects requests with both ``stream=True`` and - ``stream=False`` equally. -- The change in v2.0.0 to mandate explicit proxy schemes has been reverted. - Proxy schemes now default to ``http://``. -- The ``CaseInsensitiveDict`` used for HTTP headers now behaves like a normal - dictionary when references as string or viewed in the interpreter. - -**Bugfixes** - -- No longer expose Authorization or Proxy-Authorization headers on redirect. - Fix CVE-2014-1829 and CVE-2014-1830 respectively. -- Authorization is re-evaluated each redirect. -- On redirect, pass url as native strings. -- Fall-back to autodetected encoding for JSON when Unicode detection fails. -- Headers set to ``None`` on the ``Session`` are now correctly not sent. -- Correctly honor ``decode_unicode`` even if it wasn't used earlier in the same - response. -- Stop advertising ``compress`` as a supported Content-Encoding. -- The ``Response.history`` parameter is now always a list. -- Many, many ``urllib3`` bugfixes. - -2.2.1 (2014-01-23) -++++++++++++++++++ - -**Bugfixes** - -- Fixes incorrect parsing of proxy credentials that contain a literal or encoded '#' character. -- Assorted urllib3 fixes. - -2.2.0 (2014-01-09) -++++++++++++++++++ - -**API Changes** - -- New exception: ``ContentDecodingError``. Raised instead of ``urllib3`` - ``DecodeError`` exceptions. - -**Bugfixes** - -- Avoid many many exceptions from the buggy implementation of ``proxy_bypass`` on OS X in Python 2.6. -- Avoid crashing when attempting to get authentication credentials from ~/.netrc when running as a user without a home directory. -- Use the correct pool size for pools of connections to proxies. -- Fix iteration of ``CookieJar`` objects. -- Ensure that cookies are persisted over redirect. -- Switch back to using chardet, since it has merged with charade. - -2.1.0 (2013-12-05) -++++++++++++++++++ - -- Updated CA Bundle, of course. -- Cookies set on individual Requests through a ``Session`` (e.g. via ``Session.get()``) are no longer persisted to the ``Session``. -- Clean up connections when we hit problems during chunked upload, rather than leaking them. -- Return connections to the pool when a chunked upload is successful, rather than leaking it. -- Match the HTTPbis recommendation for HTTP 301 redirects. -- Prevent hanging when using streaming uploads and Digest Auth when a 401 is received. -- Values of headers set by Requests are now always the native string type. -- Fix previously broken SNI support. -- Fix accessing HTTP proxies using proxy authentication. -- Unencode HTTP Basic usernames and passwords extracted from URLs. -- Support for IP address ranges for no_proxy environment variable -- Parse headers correctly when users override the default ``Host:`` header. -- Avoid munging the URL in case of case-sensitive servers. -- Looser URL handling for non-HTTP/HTTPS urls. -- Accept unicode methods in Python 2.6 and 2.7. -- More resilient cookie handling. -- Make ``Response`` objects pickleable. -- Actually added MD5-sess to Digest Auth instead of pretending to like last time. -- Updated internal urllib3. -- Fixed @Lukasa's lack of taste. - -2.0.1 (2013-10-24) -++++++++++++++++++ - -- Updated included CA Bundle with new mistrusts and automated process for the future -- Added MD5-sess to Digest Auth -- Accept per-file headers in multipart file POST messages. -- Fixed: Don't send the full URL on CONNECT messages. -- Fixed: Correctly lowercase a redirect scheme. -- Fixed: Cookies not persisted when set via functional API. -- Fixed: Translate urllib3 ProxyError into a requests ProxyError derived from ConnectionError. -- Updated internal urllib3 and chardet. - -2.0.0 (2013-09-24) -++++++++++++++++++ - -**API Changes:** - -- Keys in the Headers dictionary are now native strings on all Python versions, - i.e. bytestrings on Python 2, unicode on Python 3. -- Proxy URLs now *must* have an explicit scheme. A ``MissingSchema`` exception - will be raised if they don't. -- Timeouts now apply to read time if ``Stream=False``. -- ``RequestException`` is now a subclass of ``IOError``, not ``RuntimeError``. -- Added new method to ``PreparedRequest`` objects: ``PreparedRequest.copy()``. -- Added new method to ``Session`` objects: ``Session.update_request()``. This - method updates a ``Request`` object with the data (e.g. cookies) stored on - the ``Session``. -- Added new method to ``Session`` objects: ``Session.prepare_request()``. This - method updates and prepares a ``Request`` object, and returns the - corresponding ``PreparedRequest`` object. -- Added new method to ``HTTPAdapter`` objects: ``HTTPAdapter.proxy_headers()``. - This should not be called directly, but improves the subclass interface. -- ``httplib.IncompleteRead`` exceptions caused by incorrect chunked encoding - will now raise a Requests ``ChunkedEncodingError`` instead. -- Invalid percent-escape sequences now cause a Requests ``InvalidURL`` - exception to be raised. -- HTTP 208 no longer uses reason phrase ``"im_used"``. Correctly uses - ``"already_reported"``. -- HTTP 226 reason added (``"im_used"``). - -**Bugfixes:** - -- Vastly improved proxy support, including the CONNECT verb. Special thanks to - the many contributors who worked towards this improvement. -- Cookies are now properly managed when 401 authentication responses are - received. -- Chunked encoding fixes. -- Support for mixed case schemes. -- Better handling of streaming downloads. -- Retrieve environment proxies from more locations. -- Minor cookies fixes. -- Improved redirect behaviour. -- Improved streaming behaviour, particularly for compressed data. -- Miscellaneous small Python 3 text encoding bugs. -- ``.netrc`` no longer overrides explicit auth. -- Cookies set by hooks are now correctly persisted on Sessions. -- Fix problem with cookies that specify port numbers in their host field. -- ``BytesIO`` can be used to perform streaming uploads. -- More generous parsing of the ``no_proxy`` environment variable. -- Non-string objects can be passed in data values alongside files. - -1.2.3 (2013-05-25) -++++++++++++++++++ - -- Simple packaging fix - - -1.2.2 (2013-05-23) -++++++++++++++++++ - -- Simple packaging fix - - -1.2.1 (2013-05-20) -++++++++++++++++++ - -- 301 and 302 redirects now change the verb to GET for all verbs, not just - POST, improving browser compatibility. -- Python 3.3.2 compatibility -- Always percent-encode location headers -- Fix connection adapter matching to be most-specific first -- new argument to the default connection adapter for passing a block argument -- prevent a KeyError when there's no link headers - -1.2.0 (2013-03-31) -++++++++++++++++++ - -- Fixed cookies on sessions and on requests -- Significantly change how hooks are dispatched - hooks now receive all the - arguments specified by the user when making a request so hooks can make a - secondary request with the same parameters. This is especially necessary for - authentication handler authors -- certifi support was removed -- Fixed bug where using OAuth 1 with body ``signature_type`` sent no data -- Major proxy work thanks to @Lukasa including parsing of proxy authentication - from the proxy url -- Fix DigestAuth handling too many 401s -- Update vendored urllib3 to include SSL bug fixes -- Allow keyword arguments to be passed to ``json.loads()`` via the - ``Response.json()`` method -- Don't send ``Content-Length`` header by default on ``GET`` or ``HEAD`` - requests -- Add ``elapsed`` attribute to ``Response`` objects to time how long a request - took. -- Fix ``RequestsCookieJar`` -- Sessions and Adapters are now picklable, i.e., can be used with the - multiprocessing library -- Update charade to version 1.0.3 - -The change in how hooks are dispatched will likely cause a great deal of -issues. - -1.1.0 (2013-01-10) -++++++++++++++++++ - -- CHUNKED REQUESTS -- Support for iterable response bodies -- Assume servers persist redirect params -- Allow explicit content types to be specified for file data -- Make merge_kwargs case-insensitive when looking up keys - -1.0.3 (2012-12-18) -++++++++++++++++++ - -- Fix file upload encoding bug -- Fix cookie behavior - -1.0.2 (2012-12-17) -++++++++++++++++++ - -- Proxy fix for HTTPAdapter. - -1.0.1 (2012-12-17) -++++++++++++++++++ - -- Cert verification exception bug. -- Proxy fix for HTTPAdapter. - -1.0.0 (2012-12-17) -++++++++++++++++++ - -- Massive Refactor and Simplification -- Switch to Apache 2.0 license -- Swappable Connection Adapters -- Mountable Connection Adapters -- Mutable ProcessedRequest chain -- /s/prefetch/stream -- Removal of all configuration -- Standard library logging -- Make Response.json() callable, not property. -- Usage of new charade project, which provides python 2 and 3 simultaneous chardet. -- Removal of all hooks except 'response' -- Removal of all authentication helpers (OAuth, Kerberos) - -This is not a backwards compatible change. - -0.14.2 (2012-10-27) -+++++++++++++++++++ - -- Improved mime-compatible JSON handling -- Proxy fixes -- Path hack fixes -- Case-Insensitive Content-Encoding headers -- Support for CJK parameters in form posts - - -0.14.1 (2012-10-01) -+++++++++++++++++++ - -- Python 3.3 Compatibility -- Simply default accept-encoding -- Bugfixes - - -0.14.0 (2012-09-02) -++++++++++++++++++++ - -- No more iter_content errors if already downloaded. - -0.13.9 (2012-08-25) -+++++++++++++++++++ - -- Fix for OAuth + POSTs -- Remove exception eating from dispatch_hook -- General bugfixes - -0.13.8 (2012-08-21) -+++++++++++++++++++ - -- Incredible Link header support :) - -0.13.7 (2012-08-19) -+++++++++++++++++++ - -- Support for (key, value) lists everywhere. -- Digest Authentication improvements. -- Ensure proxy exclusions work properly. -- Clearer UnicodeError exceptions. -- Automatic casting of URLs to strings (fURL and such) -- Bugfixes. - -0.13.6 (2012-08-06) -+++++++++++++++++++ - -- Long awaited fix for hanging connections! - -0.13.5 (2012-07-27) -+++++++++++++++++++ - -- Packaging fix - -0.13.4 (2012-07-27) -+++++++++++++++++++ - -- GSSAPI/Kerberos authentication! -- App Engine 2.7 Fixes! -- Fix leaking connections (from urllib3 update) -- OAuthlib path hack fix -- OAuthlib URL parameters fix. - -0.13.3 (2012-07-12) -+++++++++++++++++++ - -- Use simplejson if available. -- Do not hide SSLErrors behind Timeouts. -- Fixed param handling with urls containing fragments. -- Significantly improved information in User Agent. -- client certificates are ignored when verify=False - -0.13.2 (2012-06-28) -+++++++++++++++++++ - -- Zero dependencies (once again)! -- New: Response.reason -- Sign querystring parameters in OAuth 1.0 -- Client certificates no longer ignored when verify=False -- Add openSUSE certificate support - -0.13.1 (2012-06-07) -+++++++++++++++++++ - -- Allow passing a file or file-like object as data. -- Allow hooks to return responses that indicate errors. -- Fix Response.text and Response.json for body-less responses. - -0.13.0 (2012-05-29) -+++++++++++++++++++ - -- Removal of Requests.async in favor of `grequests <https://github.com/kennethreitz/grequests>`_ -- Allow disabling of cookie persistence. -- New implementation of safe_mode -- cookies.get now supports default argument -- Session cookies not saved when Session.request is called with return_response=False -- Env: no_proxy support. -- RequestsCookieJar improvements. -- Various bug fixes. - -0.12.1 (2012-05-08) -+++++++++++++++++++ - -- New ``Response.json`` property. -- Ability to add string file uploads. -- Fix out-of-range issue with iter_lines. -- Fix iter_content default size. -- Fix POST redirects containing files. - -0.12.0 (2012-05-02) -+++++++++++++++++++ - -- EXPERIMENTAL OAUTH SUPPORT! -- Proper CookieJar-backed cookies interface with awesome dict-like interface. -- Speed fix for non-iterated content chunks. -- Move ``pre_request`` to a more usable place. -- New ``pre_send`` hook. -- Lazily encode data, params, files. -- Load system Certificate Bundle if ``certify`` isn't available. -- Cleanups, fixes. - -0.11.2 (2012-04-22) -+++++++++++++++++++ - -- Attempt to use the OS's certificate bundle if ``certifi`` isn't available. -- Infinite digest auth redirect fix. -- Multi-part file upload improvements. -- Fix decoding of invalid %encodings in URLs. -- If there is no content in a response don't throw an error the second time that content is attempted to be read. -- Upload data on redirects. - -0.11.1 (2012-03-30) -+++++++++++++++++++ - -* POST redirects now break RFC to do what browsers do: Follow up with a GET. -* New ``strict_mode`` configuration to disable new redirect behavior. - - -0.11.0 (2012-03-14) -+++++++++++++++++++ - -* Private SSL Certificate support -* Remove select.poll from Gevent monkeypatching -* Remove redundant generator for chunked transfer encoding -* Fix: Response.ok raises Timeout Exception in safe_mode - -0.10.8 (2012-03-09) -+++++++++++++++++++ - -* Generate chunked ValueError fix -* Proxy configuration by environment variables -* Simplification of iter_lines. -* New `trust_env` configuration for disabling system/environment hints. -* Suppress cookie errors. - -0.10.7 (2012-03-07) -+++++++++++++++++++ - -* `encode_uri` = False - -0.10.6 (2012-02-25) -+++++++++++++++++++ - -* Allow '=' in cookies. - -0.10.5 (2012-02-25) -+++++++++++++++++++ - -* Response body with 0 content-length fix. -* New async.imap. -* Don't fail on netrc. - - -0.10.4 (2012-02-20) -+++++++++++++++++++ - -* Honor netrc. - -0.10.3 (2012-02-20) -+++++++++++++++++++ - -* HEAD requests don't follow redirects anymore. -* raise_for_status() doesn't raise for 3xx anymore. -* Make Session objects picklable. -* ValueError for invalid schema URLs. - -0.10.2 (2012-01-15) -+++++++++++++++++++ - -* Vastly improved URL quoting. -* Additional allowed cookie key values. -* Attempted fix for "Too many open files" Error -* Replace unicode errors on first pass, no need for second pass. -* Append '/' to bare-domain urls before query insertion. -* Exceptions now inherit from RuntimeError. -* Binary uploads + auth fix. -* Bugfixes. - - -0.10.1 (2012-01-23) -+++++++++++++++++++ - -* PYTHON 3 SUPPORT! -* Dropped 2.5 Support. (*Backwards Incompatible*) - -0.10.0 (2012-01-21) -+++++++++++++++++++ - -* ``Response.content`` is now bytes-only. (*Backwards Incompatible*) -* New ``Response.text`` is unicode-only. -* If no ``Response.encoding`` is specified and ``chardet`` is available, ``Response.text`` will guess an encoding. -* Default to ISO-8859-1 (Western) encoding for "text" subtypes. -* Removal of `decode_unicode`. (*Backwards Incompatible*) -* New multiple-hooks system. -* New ``Response.register_hook`` for registering hooks within the pipeline. -* ``Response.url`` is now Unicode. - -0.9.3 (2012-01-18) -++++++++++++++++++ - -* SSL verify=False bugfix (apparent on windows machines). - -0.9.2 (2012-01-18) -++++++++++++++++++ - -* Asynchronous async.send method. -* Support for proper chunk streams with boundaries. -* session argument for Session classes. -* Print entire hook tracebacks, not just exception instance. -* Fix response.iter_lines from pending next line. -* Fix but in HTTP-digest auth w/ URI having query strings. -* Fix in Event Hooks section. -* Urllib3 update. - - -0.9.1 (2012-01-06) -++++++++++++++++++ - -* danger_mode for automatic Response.raise_for_status() -* Response.iter_lines refactor - -0.9.0 (2011-12-28) -++++++++++++++++++ - -* verify ssl is default. - - -0.8.9 (2011-12-28) -++++++++++++++++++ - -* Packaging fix. - - -0.8.8 (2011-12-28) -++++++++++++++++++ - -* SSL CERT VERIFICATION! -* Release of Cerifi: Mozilla's cert list. -* New 'verify' argument for SSL requests. -* Urllib3 update. - -0.8.7 (2011-12-24) -++++++++++++++++++ - -* iter_lines last-line truncation fix -* Force safe_mode for async requests -* Handle safe_mode exceptions more consistently -* Fix iteration on null responses in safe_mode - -0.8.6 (2011-12-18) -++++++++++++++++++ - -* Socket timeout fixes. -* Proxy Authorization support. - -0.8.5 (2011-12-14) -++++++++++++++++++ - -* Response.iter_lines! - -0.8.4 (2011-12-11) -++++++++++++++++++ - -* Prefetch bugfix. -* Added license to installed version. - -0.8.3 (2011-11-27) -++++++++++++++++++ - -* Converted auth system to use simpler callable objects. -* New session parameter to API methods. -* Display full URL while logging. - -0.8.2 (2011-11-19) -++++++++++++++++++ - -* New Unicode decoding system, based on over-ridable `Response.encoding`. -* Proper URL slash-quote handling. -* Cookies with ``[``, ``]``, and ``_`` allowed. - -0.8.1 (2011-11-15) -++++++++++++++++++ - -* URL Request path fix -* Proxy fix. -* Timeouts fix. - -0.8.0 (2011-11-13) -++++++++++++++++++ - -* Keep-alive support! -* Complete removal of Urllib2 -* Complete removal of Poster -* Complete removal of CookieJars -* New ConnectionError raising -* Safe_mode for error catching -* prefetch parameter for request methods -* OPTION method -* Async pool size throttling -* File uploads send real names -* Vendored in urllib3 - -0.7.6 (2011-11-07) -++++++++++++++++++ - -* Digest authentication bugfix (attach query data to path) - -0.7.5 (2011-11-04) -++++++++++++++++++ - -* Response.content = None if there was an invalid response. -* Redirection auth handling. - -0.7.4 (2011-10-26) -++++++++++++++++++ - -* Session Hooks fix. - -0.7.3 (2011-10-23) -++++++++++++++++++ - -* Digest Auth fix. - - -0.7.2 (2011-10-23) -++++++++++++++++++ - -* PATCH Fix. - - -0.7.1 (2011-10-23) -++++++++++++++++++ - -* Move away from urllib2 authentication handling. -* Fully Remove AuthManager, AuthObject, &c. -* New tuple-based auth system with handler callbacks. - - -0.7.0 (2011-10-22) -++++++++++++++++++ - -* Sessions are now the primary interface. -* Deprecated InvalidMethodException. -* PATCH fix. -* New config system (no more global settings). - - -0.6.6 (2011-10-19) -++++++++++++++++++ - -* Session parameter bugfix (params merging). - - -0.6.5 (2011-10-18) -++++++++++++++++++ - -* Offline (fast) test suite. -* Session dictionary argument merging. - - -0.6.4 (2011-10-13) -++++++++++++++++++ - -* Automatic decoding of unicode, based on HTTP Headers. -* New ``decode_unicode`` setting. -* Removal of ``r.read/close`` methods. -* New ``r.faw`` interface for advanced response usage.* -* Automatic expansion of parameterized headers. - - -0.6.3 (2011-10-13) -++++++++++++++++++ - -* Beautiful ``requests.async`` module, for making async requests w/ gevent. - - -0.6.2 (2011-10-09) -++++++++++++++++++ - -* GET/HEAD obeys allow_redirects=False. - - -0.6.1 (2011-08-20) -++++++++++++++++++ - -* Enhanced status codes experience ``\o/`` -* Set a maximum number of redirects (``settings.max_redirects``) -* Full Unicode URL support -* Support for protocol-less redirects. -* Allow for arbitrary request types. -* Bugfixes - - -0.6.0 (2011-08-17) -++++++++++++++++++ - -* New callback hook system -* New persistent sessions object and context manager -* Transparent Dict-cookie handling -* Status code reference object -* Removed Response.cached -* Added Response.request -* All args are kwargs -* Relative redirect support -* HTTPError handling improvements -* Improved https testing -* Bugfixes - - -0.5.1 (2011-07-23) -++++++++++++++++++ - -* International Domain Name Support! -* Access headers without fetching entire body (``read()``) -* Use lists as dicts for parameters -* Add Forced Basic Authentication -* Forced Basic is default authentication type -* ``python-requests.org`` default User-Agent header -* CaseInsensitiveDict lower-case caching -* Response.history bugfix - - -0.5.0 (2011-06-21) -++++++++++++++++++ - -* PATCH Support -* Support for Proxies -* HTTPBin Test Suite -* Redirect Fixes -* settings.verbose stream writing -* Querystrings for all methods -* URLErrors (Connection Refused, Timeout, Invalid URLs) are treated as explicitly raised - ``r.requests.get('hwe://blah'); r.raise_for_status()`` - - -0.4.1 (2011-05-22) -++++++++++++++++++ - -* Improved Redirection Handling -* New 'allow_redirects' param for following non-GET/HEAD Redirects -* Settings module refactoring - - -0.4.0 (2011-05-15) -++++++++++++++++++ - -* Response.history: list of redirected responses -* Case-Insensitive Header Dictionaries! -* Unicode URLs - - -0.3.4 (2011-05-14) -++++++++++++++++++ - -* Urllib2 HTTPAuthentication Recursion fix (Basic/Digest) -* Internal Refactor -* Bytes data upload Bugfix - - - -0.3.3 (2011-05-12) -++++++++++++++++++ - -* Request timeouts -* Unicode url-encoded data -* Settings context manager and module - - -0.3.2 (2011-04-15) -++++++++++++++++++ - -* Automatic Decompression of GZip Encoded Content -* AutoAuth Support for Tupled HTTP Auth - - -0.3.1 (2011-04-01) -++++++++++++++++++ - -* Cookie Changes -* Response.read() -* Poster fix - - -0.3.0 (2011-02-25) -++++++++++++++++++ - -* Automatic Authentication API Change -* Smarter Query URL Parameterization -* Allow file uploads and POST data together -* New Authentication Manager System - - Simpler Basic HTTP System - - Supports all build-in urllib2 Auths - - Allows for custom Auth Handlers - - -0.2.4 (2011-02-19) -++++++++++++++++++ - -* Python 2.5 Support -* PyPy-c v1.4 Support -* Auto-Authentication tests -* Improved Request object constructor - -0.2.3 (2011-02-15) -++++++++++++++++++ - -* New HTTPHandling Methods - - Response.__nonzero__ (false if bad HTTP Status) - - Response.ok (True if expected HTTP Status) - - Response.error (Logged HTTPError if bad HTTP Status) - - Response.raise_for_status() (Raises stored HTTPError) - - -0.2.2 (2011-02-14) -++++++++++++++++++ - -* Still handles request in the event of an HTTPError. (Issue #2) -* Eventlet and Gevent Monkeypatch support. -* Cookie Support (Issue #1) - - -0.2.1 (2011-02-14) -++++++++++++++++++ - -* Added file attribute to POST and PUT requests for multipart-encode file uploads. -* Added Request.url attribute for context and redirects - - -0.2.0 (2011-02-14) -++++++++++++++++++ - -* Birth! - - -0.0.1 (2011-02-13) -++++++++++++++++++ - -* Frustration -* Conception - - diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/RECORD b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/RECORD deleted file mode 100644 index 46eda00..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/RECORD +++ /dev/null @@ -1,44 +0,0 @@ -requests/__init__.py,sha256=CfBVrS2i2DRqW4l_YWg0amv2aE40uzKipJOhl5f_ym4,4056 -requests/__version__.py,sha256=rJ2xgNOLhjspGkNPfgXTBctqqvsf2uJMFTaE0rlVtbI,436 -requests/_internal_utils.py,sha256=Zx3PnEUccyfsB-ie11nZVAW8qClJy0gx1qNME7rgT18,1096 -requests/adapters.py,sha256=i3hSRejv346malcOuw46ivOBDxCyip0SBuMy3sylvmA,21236 -requests/api.py,sha256=zub9ENcEUT2m9gwgBgqH5RIRDfrx2kwRpZ7L6hX3mcw,6261 -requests/auth.py,sha256=oRSQkBYcLkTEssudkzoR1UW1Glb1ts3p1RWusgHf1YU,10208 -requests/certs.py,sha256=dOB5rV2DZ13dEhq9BUa_4hd5kAqg59e_zUZB00faYz8,453 -requests/compat.py,sha256=aY4WEIpX7kYXzD4h4RhcO5QwkurS79Ssg5m0fWEflMc,1723 -requests/cookies.py,sha256=olUaLeNci_z1K-Bn5PeEKllSspmQqN9-s8Ug7CasaPE,18346 -requests/exceptions.py,sha256=Q8YeWWxiHHXhkEynLpMgC_6_r_ZTYw2aITs9wCSAZNY,3185 -requests/help.py,sha256=vKOUvN6TMonwqumMjRaG9BgsYw7-Ei6aMWY71vtHCx8,3606 -requests/hooks.py,sha256=HXAHoC1FNTFRZX6-lNdvPM7Tst4kvGwYTN-AOKRxoRU,767 -requests/models.py,sha256=Eus9H6VuYZ3hkvFqpK6chs5HsU4Uhubm2k7015AeRII,34095 -requests/packages.py,sha256=Q2rF0L5mc3wQAvc6q_lAVtPTDOaOeFgD-7kWSQLkjEQ,542 -requests/sessions.py,sha256=71MK2HCadovka1vAx9dyDFWAuw69KgRPRBpd0HWSEAo,27829 -requests/status_codes.py,sha256=pgw-xlnxO5zHQWn3fKps2cxwQehKzPxEbdhIrMQe6Ec,4128 -requests/structures.py,sha256=zoP8qly2Jak5e89HwpqjN1z2diztI-_gaqts1raJJBc,2981 -requests/utils.py,sha256=3OxbbLUQFVdm84fdBD9nduXvhw6hIzj59mhvBomKuJI,30156 -requests-2.19.1.dist-info/DESCRIPTION.rst,sha256=n_VLfuLN3E966vObL5yznSnEemZi9-mN_NYciEbtu1U,50439 -requests-2.19.1.dist-info/LICENSE.txt,sha256=gqhp_k6WdEmVbSalRq3HYqys4CiFLOgboWw8Wx12sVs,581 -requests-2.19.1.dist-info/METADATA,sha256=xyt8lFsqw5Ub6FgGyQi_zaONQ6uCh8ULkonZeblqHzg,52012 -requests-2.19.1.dist-info/RECORD,, -requests-2.19.1.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110 -requests-2.19.1.dist-info/metadata.json,sha256=aoLNiq-pX6UqPnwJr037D19kMMoHnl8qHmS1HFmI-zw,1768 -requests-2.19.1.dist-info/top_level.txt,sha256=fMSVmHfb5rbGOo6xv-O_tUX6j-WyixssE-SnwcDRxNQ,9 -requests-2.19.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -requests/__pycache__/_internal_utils.cpython-36.pyc,, -requests/__pycache__/packages.cpython-36.pyc,, -requests/__pycache__/compat.cpython-36.pyc,, -requests/__pycache__/certs.cpython-36.pyc,, -requests/__pycache__/__init__.cpython-36.pyc,, -requests/__pycache__/help.cpython-36.pyc,, -requests/__pycache__/api.cpython-36.pyc,, -requests/__pycache__/__version__.cpython-36.pyc,, -requests/__pycache__/exceptions.cpython-36.pyc,, -requests/__pycache__/structures.cpython-36.pyc,, -requests/__pycache__/utils.cpython-36.pyc,, -requests/__pycache__/hooks.cpython-36.pyc,, -requests/__pycache__/status_codes.cpython-36.pyc,, -requests/__pycache__/adapters.cpython-36.pyc,, -requests/__pycache__/sessions.cpython-36.pyc,, -requests/__pycache__/auth.cpython-36.pyc,, -requests/__pycache__/models.cpython-36.pyc,, -requests/__pycache__/cookies.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/WHEEL b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/WHEEL deleted file mode 100644 index 7332a41..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.30.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/metadata.json b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/metadata.json deleted file mode 100644 index c844f60..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy"], "description_content_type": "text/x-rst", "extensions": {"python.details": {"contacts": [{"email": "me@kennethreitz.org", "name": "Kenneth Reitz", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}, "project_urls": {"Home": "http://python-requests.org"}}}, "extras": ["security", "socks"], "generator": "bdist_wheel (0.30.0)", "license": "Apache 2.0", "metadata_version": "2.0", "name": "requests", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "run_requires": [{"extra": "socks", "requires": ["PySocks (!=1.5.7,>=1.5.6)"]}, {"requires": ["certifi (>=2017.4.17)", "chardet (<3.1.0,>=3.0.2)", "idna (<2.8,>=2.5)", "urllib3 (<1.24,>=1.21.1)"]}, {"extra": "security", "requires": ["cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)"]}, {"environment": "sys_platform == \"win32\" and (python_version == \"2.7\" or python_version == \"2.6\")", "extra": "socks", "requires": ["win-inet-pton"]}], "summary": "Python HTTP for Humans.", "test_requires": [{"requires": ["PySocks (!=1.5.7,>=1.5.6)", "pytest (>=2.8.0)", "pytest-cov", "pytest-httpbin (==0.0.7)", "pytest-mock", "pytest-xdist"]}], "version": "2.19.1"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/top_level.txt deleted file mode 100644 index f229360..0000000 --- a/venv/lib/python3.6/site-packages/requests-2.19.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -requests diff --git a/venv/lib/python3.6/site-packages/requests/__init__.py b/venv/lib/python3.6/site-packages/requests/__init__.py deleted file mode 100644 index a5b3c9c..0000000 --- a/venv/lib/python3.6/site-packages/requests/__init__.py +++ /dev/null @@ -1,136 +0,0 @@ -# -*- coding: utf-8 -*- - -# __ -# /__) _ _ _ _ _/ _ -# / ( (- (/ (/ (- _) / _) -# / - -""" -Requests HTTP Library -~~~~~~~~~~~~~~~~~~~~~ - -Requests is an HTTP library, written in Python, for human beings. Basic GET -usage: - - >>> import requests - >>> r = requests.get('https://www.python.org') - >>> r.status_code - 200 - >>> 'Python is a programming language' in r.content - True - -... or POST: - - >>> payload = dict(key1='value1', key2='value2') - >>> r = requests.post('http://httpbin.org/post', data=payload) - >>> print(r.text) - { - ... - "form": { - "key2": "value2", - "key1": "value1" - }, - ... - } - -The other HTTP methods are supported - see `requests.api`. Full documentation -is at <http://python-requests.org>. - -:copyright: (c) 2017 by Kenneth Reitz. -:license: Apache 2.0, see LICENSE for more details. -""" - -import urllib3 -import chardet -import warnings -from .exceptions import RequestsDependencyWarning - - -def check_compatibility(urllib3_version, chardet_version): - urllib3_version = urllib3_version.split('.') - assert urllib3_version != ['dev'] # Verify urllib3 isn't installed from git. - - # Sometimes, urllib3 only reports its version as 16.1. - if len(urllib3_version) == 2: - urllib3_version.append('0') - - # Check urllib3 for compatibility. - major, minor, patch = urllib3_version # noqa: F811 - major, minor, patch = int(major), int(minor), int(patch) - # urllib3 >= 1.21.1, <= 1.23 - assert major == 1 - assert minor >= 21 - assert minor <= 23 - - # Check chardet for compatibility. - major, minor, patch = chardet_version.split('.')[:3] - major, minor, patch = int(major), int(minor), int(patch) - # chardet >= 3.0.2, < 3.1.0 - assert major == 3 - assert minor < 1 - assert patch >= 2 - - -def _check_cryptography(cryptography_version): - # cryptography < 1.3.4 - try: - cryptography_version = list(map(int, cryptography_version.split('.'))) - except ValueError: - return - - if cryptography_version < [1, 3, 4]: - warning = 'Old version of cryptography ({0}) may cause slowdown.'.format(cryptography_version) - warnings.warn(warning, RequestsDependencyWarning) - -# Check imported dependencies for compatibility. -try: - check_compatibility(urllib3.__version__, chardet.__version__) -except (AssertionError, ValueError): - warnings.warn("urllib3 ({0}) or chardet ({1}) doesn't match a supported " - "version!".format(urllib3.__version__, chardet.__version__), - RequestsDependencyWarning) - -# Attempt to enable urllib3's SNI support, if possible -try: - from urllib3.contrib import pyopenssl - pyopenssl.inject_into_urllib3() - - # Check cryptography version - from cryptography import __version__ as cryptography_version - _check_cryptography(cryptography_version) -except ImportError: - pass - -# urllib3's DependencyWarnings should be silenced. -from urllib3.exceptions import DependencyWarning -warnings.simplefilter('ignore', DependencyWarning) - -from .__version__ import __title__, __description__, __url__, __version__ -from .__version__ import __build__, __author__, __author_email__, __license__ -from .__version__ import __copyright__, __cake__ - -from . import utils -from . import packages -from .models import Request, Response, PreparedRequest -from .api import request, get, head, post, patch, put, delete, options -from .sessions import session, Session -from .status_codes import codes -from .exceptions import ( - RequestException, Timeout, URLRequired, - TooManyRedirects, HTTPError, ConnectionError, - FileModeWarning, ConnectTimeout, ReadTimeout -) - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -logging.getLogger(__name__).addHandler(NullHandler()) - -# FileModeWarnings go off per the default. -warnings.simplefilter('default', FileModeWarning, append=True) diff --git a/venv/lib/python3.6/site-packages/requests/__version__.py b/venv/lib/python3.6/site-packages/requests/__version__.py deleted file mode 100644 index ef61ec0..0000000 --- a/venv/lib/python3.6/site-packages/requests/__version__.py +++ /dev/null @@ -1,14 +0,0 @@ -# .-. .-. .-. . . .-. .-. .-. .-. -# |( |- |.| | | |- `-. | `-. -# ' ' `-' `-`.`-' `-' `-' ' `-' - -__title__ = 'requests' -__description__ = 'Python HTTP for Humans.' -__url__ = 'http://python-requests.org' -__version__ = '2.19.1' -__build__ = 0x021901 -__author__ = 'Kenneth Reitz' -__author_email__ = 'me@kennethreitz.org' -__license__ = 'Apache 2.0' -__copyright__ = 'Copyright 2018 Kenneth Reitz' -__cake__ = u'\u2728 \U0001f370 \u2728' diff --git a/venv/lib/python3.6/site-packages/requests/_internal_utils.py b/venv/lib/python3.6/site-packages/requests/_internal_utils.py deleted file mode 100644 index 759d9a5..0000000 --- a/venv/lib/python3.6/site-packages/requests/_internal_utils.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests._internal_utils -~~~~~~~~~~~~~~ - -Provides utility functions that are consumed internally by Requests -which depend on extremely few external helpers (such as compat) -""" - -from .compat import is_py2, builtin_str, str - - -def to_native_string(string, encoding='ascii'): - """Given a string object, regardless of type, returns a representation of - that string in the native string type, encoding and decoding where - necessary. This assumes ASCII unless told otherwise. - """ - if isinstance(string, builtin_str): - out = string - else: - if is_py2: - out = string.encode(encoding) - else: - out = string.decode(encoding) - - return out - - -def unicode_is_ascii(u_string): - """Determine if unicode string only contains ASCII characters. - - :param str u_string: unicode string to check. Must be unicode - and not Python 2 `str`. - :rtype: bool - """ - assert isinstance(u_string, str) - try: - u_string.encode('ascii') - return True - except UnicodeEncodeError: - return False diff --git a/venv/lib/python3.6/site-packages/requests/adapters.py b/venv/lib/python3.6/site-packages/requests/adapters.py deleted file mode 100644 index a4b0284..0000000 --- a/venv/lib/python3.6/site-packages/requests/adapters.py +++ /dev/null @@ -1,530 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.adapters -~~~~~~~~~~~~~~~~~ - -This module contains the transport adapters that Requests uses to define -and maintain connections. -""" - -import os.path -import socket - -from urllib3.poolmanager import PoolManager, proxy_from_url -from urllib3.response import HTTPResponse -from urllib3.util import parse_url -from urllib3.util import Timeout as TimeoutSauce -from urllib3.util.retry import Retry -from urllib3.exceptions import ClosedPoolError -from urllib3.exceptions import ConnectTimeoutError -from urllib3.exceptions import HTTPError as _HTTPError -from urllib3.exceptions import MaxRetryError -from urllib3.exceptions import NewConnectionError -from urllib3.exceptions import ProxyError as _ProxyError -from urllib3.exceptions import ProtocolError -from urllib3.exceptions import ReadTimeoutError -from urllib3.exceptions import SSLError as _SSLError -from urllib3.exceptions import ResponseError - -from .models import Response -from .compat import urlparse, basestring -from .utils import (DEFAULT_CA_BUNDLE_PATH, extract_zipped_paths, - get_encoding_from_headers, prepend_scheme_if_needed, - get_auth_from_url, urldefragauth, select_proxy) -from .structures import CaseInsensitiveDict -from .cookies import extract_cookies_to_jar -from .exceptions import (ConnectionError, ConnectTimeout, ReadTimeout, SSLError, - ProxyError, RetryError, InvalidSchema, InvalidProxyURL) -from .auth import _basic_auth_str - -try: - from urllib3.contrib.socks import SOCKSProxyManager -except ImportError: - def SOCKSProxyManager(*args, **kwargs): - raise InvalidSchema("Missing dependencies for SOCKS support.") - -DEFAULT_POOLBLOCK = False -DEFAULT_POOLSIZE = 10 -DEFAULT_RETRIES = 0 -DEFAULT_POOL_TIMEOUT = None - - -class BaseAdapter(object): - """The Base Transport Adapter""" - - def __init__(self): - super(BaseAdapter, self).__init__() - - def send(self, request, stream=False, timeout=None, verify=True, - cert=None, proxies=None): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - """ - raise NotImplementedError - - def close(self): - """Cleans up adapter specific items.""" - raise NotImplementedError - - -class HTTPAdapter(BaseAdapter): - """The built-in HTTP Adapter for urllib3. - - Provides a general-case interface for Requests sessions to contact HTTP and - HTTPS urls by implementing the Transport Adapter interface. This class will - usually be created by the :class:`Session <Session>` class under the - covers. - - :param pool_connections: The number of urllib3 connection pools to cache. - :param pool_maxsize: The maximum number of connections to save in the pool. - :param max_retries: The maximum number of retries each connection - should attempt. Note, this applies only to failed DNS lookups, socket - connections and connection timeouts, never to requests where data has - made it to the server. By default, Requests does not retry failed - connections. If you need granular control over the conditions under - which we retry a request, import urllib3's ``Retry`` class and pass - that instead. - :param pool_block: Whether the connection pool should block for connections. - - Usage:: - - >>> import requests - >>> s = requests.Session() - >>> a = requests.adapters.HTTPAdapter(max_retries=3) - >>> s.mount('http://', a) - """ - __attrs__ = ['max_retries', 'config', '_pool_connections', '_pool_maxsize', - '_pool_block'] - - def __init__(self, pool_connections=DEFAULT_POOLSIZE, - pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_RETRIES, - pool_block=DEFAULT_POOLBLOCK): - if max_retries == DEFAULT_RETRIES: - self.max_retries = Retry(0, read=False) - else: - self.max_retries = Retry.from_int(max_retries) - self.config = {} - self.proxy_manager = {} - - super(HTTPAdapter, self).__init__() - - self._pool_connections = pool_connections - self._pool_maxsize = pool_maxsize - self._pool_block = pool_block - - self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) - - def __getstate__(self): - return dict((attr, getattr(self, attr, None)) for attr in - self.__attrs__) - - def __setstate__(self, state): - # Can't handle by adding 'proxy_manager' to self.__attrs__ because - # self.poolmanager uses a lambda function, which isn't pickleable. - self.proxy_manager = {} - self.config = {} - - for attr, value in state.items(): - setattr(self, attr, value) - - self.init_poolmanager(self._pool_connections, self._pool_maxsize, - block=self._pool_block) - - def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs): - """Initializes a urllib3 PoolManager. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param connections: The number of urllib3 connection pools to cache. - :param maxsize: The maximum number of connections to save in the pool. - :param block: Block when no free connections are available. - :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. - """ - # save these values for pickling - self._pool_connections = connections - self._pool_maxsize = maxsize - self._pool_block = block - - self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, - block=block, strict=True, **pool_kwargs) - - def proxy_manager_for(self, proxy, **proxy_kwargs): - """Return urllib3 ProxyManager for the given proxy. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param proxy: The proxy to return a urllib3 ProxyManager for. - :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. - :returns: ProxyManager - :rtype: urllib3.ProxyManager - """ - if proxy in self.proxy_manager: - manager = self.proxy_manager[proxy] - elif proxy.lower().startswith('socks'): - username, password = get_auth_from_url(proxy) - manager = self.proxy_manager[proxy] = SOCKSProxyManager( - proxy, - username=username, - password=password, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs - ) - else: - proxy_headers = self.proxy_headers(proxy) - manager = self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs) - - return manager - - def cert_verify(self, conn, url, verify, cert): - """Verify a SSL certificate. This method should not be called from user - code, and is only exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param conn: The urllib3 connection object associated with the cert. - :param url: The requested URL. - :param verify: Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use - :param cert: The SSL certificate to verify. - """ - if url.lower().startswith('https') and verify: - - cert_loc = None - - # Allow self-specified cert location. - if verify is not True: - cert_loc = verify - - if not cert_loc: - cert_loc = extract_zipped_paths(DEFAULT_CA_BUNDLE_PATH) - - if not cert_loc or not os.path.exists(cert_loc): - raise IOError("Could not find a suitable TLS CA certificate bundle, " - "invalid path: {0}".format(cert_loc)) - - conn.cert_reqs = 'CERT_REQUIRED' - - if not os.path.isdir(cert_loc): - conn.ca_certs = cert_loc - else: - conn.ca_cert_dir = cert_loc - else: - conn.cert_reqs = 'CERT_NONE' - conn.ca_certs = None - conn.ca_cert_dir = None - - if cert: - if not isinstance(cert, basestring): - conn.cert_file = cert[0] - conn.key_file = cert[1] - else: - conn.cert_file = cert - conn.key_file = None - if conn.cert_file and not os.path.exists(conn.cert_file): - raise IOError("Could not find the TLS certificate file, " - "invalid path: {0}".format(conn.cert_file)) - if conn.key_file and not os.path.exists(conn.key_file): - raise IOError("Could not find the TLS key file, " - "invalid path: {0}".format(conn.key_file)) - - def build_response(self, req, resp): - """Builds a :class:`Response <requests.Response>` object from a urllib3 - response. This should not be called from user code, and is only exposed - for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>` - - :param req: The :class:`PreparedRequest <PreparedRequest>` used to generate the response. - :param resp: The urllib3 response object. - :rtype: requests.Response - """ - response = Response() - - # Fallback to None if there's no status_code, for whatever reason. - response.status_code = getattr(resp, 'status', None) - - # Make headers case-insensitive. - response.headers = CaseInsensitiveDict(getattr(resp, 'headers', {})) - - # Set encoding. - response.encoding = get_encoding_from_headers(response.headers) - response.raw = resp - response.reason = response.raw.reason - - if isinstance(req.url, bytes): - response.url = req.url.decode('utf-8') - else: - response.url = req.url - - # Add new cookies from the server. - extract_cookies_to_jar(response.cookies, req, resp) - - # Give the Response some context. - response.request = req - response.connection = self - - return response - - def get_connection(self, url, proxies=None): - """Returns a urllib3 connection for the given URL. This should not be - called from user code, and is only exposed for use when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param url: The URL to connect to. - :param proxies: (optional) A Requests-style dictionary of proxies used on this request. - :rtype: urllib3.ConnectionPool - """ - proxy = select_proxy(url, proxies) - - if proxy: - proxy = prepend_scheme_if_needed(proxy, 'http') - proxy_url = parse_url(proxy) - if not proxy_url.host: - raise InvalidProxyURL("Please check proxy URL. It is malformed" - " and could be missing the host.") - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_url(url) - else: - # Only scheme should be lower case - parsed = urlparse(url) - url = parsed.geturl() - conn = self.poolmanager.connection_from_url(url) - - return conn - - def close(self): - """Disposes of any internal state. - - Currently, this closes the PoolManager and any active ProxyManager, - which closes any pooled connections. - """ - self.poolmanager.clear() - for proxy in self.proxy_manager.values(): - proxy.clear() - - def request_url(self, request, proxies): - """Obtain the url to use when making the final request. - - If the message is being sent through a HTTP proxy, the full URL has to - be used. Otherwise, we should only use the path portion of the URL. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs. - :rtype: str - """ - proxy = select_proxy(request.url, proxies) - scheme = urlparse(request.url).scheme - - is_proxied_http_request = (proxy and scheme != 'https') - using_socks_proxy = False - if proxy: - proxy_scheme = urlparse(proxy).scheme.lower() - using_socks_proxy = proxy_scheme.startswith('socks') - - url = request.path_url - if is_proxied_http_request and not using_socks_proxy: - url = urldefragauth(request.url) - - return url - - def add_headers(self, request, **kwargs): - """Add any headers needed by the connection. As of v2.0 this does - nothing by default, but is left for overriding by users that subclass - the :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param request: The :class:`PreparedRequest <PreparedRequest>` to add headers to. - :param kwargs: The keyword arguments from the call to send(). - """ - pass - - def proxy_headers(self, proxy): - """Returns a dictionary of the headers to add to any request sent - through a proxy. This works with urllib3 magic to ensure that they are - correctly sent to the proxy, rather than in a tunnelled request if - CONNECT is being used. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter <requests.adapters.HTTPAdapter>`. - - :param proxies: The url of the proxy being used for this request. - :rtype: dict - """ - headers = {} - username, password = get_auth_from_url(proxy) - - if username: - headers['Proxy-Authorization'] = _basic_auth_str(username, - password) - - return headers - - def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest <PreparedRequest>` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple or urllib3 Timeout object - :param verify: (optional) Either a boolean, in which case it controls whether - we verify the server's TLS certificate, or a string, in which case it - must be a path to a CA bundle to use - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - :rtype: requests.Response - """ - - conn = self.get_connection(request.url, proxies) - - self.cert_verify(conn, request.url, verify, cert) - url = self.request_url(request, proxies) - self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies) - - chunked = not (request.body is None or 'Content-Length' in request.headers) - - if isinstance(timeout, tuple): - try: - connect, read = timeout - timeout = TimeoutSauce(connect=connect, read=read) - except ValueError as e: - # this may raise a string formatting error. - err = ("Invalid timeout {0}. Pass a (connect, read) " - "timeout tuple, or a single float to set " - "both timeouts to the same value".format(timeout)) - raise ValueError(err) - elif isinstance(timeout, TimeoutSauce): - pass - else: - timeout = TimeoutSauce(connect=timeout, read=timeout) - - try: - if not chunked: - resp = conn.urlopen( - method=request.method, - url=url, - body=request.body, - headers=request.headers, - redirect=False, - assert_same_host=False, - preload_content=False, - decode_content=False, - retries=self.max_retries, - timeout=timeout - ) - - # Send the request. - else: - if hasattr(conn, 'proxy_pool'): - conn = conn.proxy_pool - - low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT) - - try: - low_conn.putrequest(request.method, - url, - skip_accept_encoding=True) - - for header, value in request.headers.items(): - low_conn.putheader(header, value) - - low_conn.endheaders() - - for i in request.body: - low_conn.send(hex(len(i))[2:].encode('utf-8')) - low_conn.send(b'\r\n') - low_conn.send(i) - low_conn.send(b'\r\n') - low_conn.send(b'0\r\n\r\n') - - # Receive the response from the server - try: - # For Python 2.7+ versions, use buffering of HTTP - # responses - r = low_conn.getresponse(buffering=True) - except TypeError: - # For compatibility with Python 2.6 versions and back - r = low_conn.getresponse() - - resp = HTTPResponse.from_httplib( - r, - pool=conn, - connection=low_conn, - preload_content=False, - decode_content=False - ) - except: - # If we hit any problems here, clean up the connection. - # Then, reraise so that we can handle the actual exception. - low_conn.close() - raise - - except (ProtocolError, socket.error) as err: - raise ConnectionError(err, request=request) - - except MaxRetryError as e: - if isinstance(e.reason, ConnectTimeoutError): - # TODO: Remove this in 3.0.0: see #2811 - if not isinstance(e.reason, NewConnectionError): - raise ConnectTimeout(e, request=request) - - if isinstance(e.reason, ResponseError): - raise RetryError(e, request=request) - - if isinstance(e.reason, _ProxyError): - raise ProxyError(e, request=request) - - if isinstance(e.reason, _SSLError): - # This branch is for urllib3 v1.22 and later. - raise SSLError(e, request=request) - - raise ConnectionError(e, request=request) - - except ClosedPoolError as e: - raise ConnectionError(e, request=request) - - except _ProxyError as e: - raise ProxyError(e) - - except (_SSLError, _HTTPError) as e: - if isinstance(e, _SSLError): - # This branch is for urllib3 versions earlier than v1.22 - raise SSLError(e, request=request) - elif isinstance(e, ReadTimeoutError): - raise ReadTimeout(e, request=request) - else: - raise - - return self.build_response(request, resp) diff --git a/venv/lib/python3.6/site-packages/requests/api.py b/venv/lib/python3.6/site-packages/requests/api.py deleted file mode 100644 index a2cc84d..0000000 --- a/venv/lib/python3.6/site-packages/requests/api.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.api -~~~~~~~~~~~~ - -This module implements the Requests API. - -:copyright: (c) 2012 by Kenneth Reitz. -:license: Apache2, see LICENSE for more details. -""" - -from . import sessions - - -def request(method, url, **kwargs): - """Constructs and sends a :class:`Request <Request>`. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param data: (optional) Dictionary or list of tuples ``[(key, value)]`` (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. - :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. - ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` - or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string - defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers - to add for the file. - :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send data - before giving up, as a float, or a :ref:`(connect timeout, read - timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param stream: (optional) if ``False``, the response content will be immediately downloaded. - :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. - :return: :class:`Response <Response>` object - :rtype: requests.Response - - Usage:: - - >>> import requests - >>> req = requests.request('GET', 'http://httpbin.org/get') - <Response [200]> - """ - - # By using the 'with' statement we are sure the session is closed, thus we - # avoid leaving sockets open which can trigger a ResourceWarning in some - # cases, and look like a memory leak in others. - with sessions.Session() as session: - return session.request(method=method, url=url, **kwargs) - - -def get(url, params=None, **kwargs): - r"""Sends a GET request. - - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return request('get', url, params=params, **kwargs) - - -def options(url, **kwargs): - r"""Sends an OPTIONS request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return request('options', url, **kwargs) - - -def head(url, **kwargs): - r"""Sends a HEAD request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', False) - return request('head', url, **kwargs) - - -def post(url, data=None, json=None, **kwargs): - r"""Sends a POST request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('post', url, data=data, json=json, **kwargs) - - -def put(url, data=None, **kwargs): - r"""Sends a PUT request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('put', url, data=data, **kwargs) - - -def patch(url, data=None, **kwargs): - r"""Sends a PATCH request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('patch', url, data=data, **kwargs) - - -def delete(url, **kwargs): - r"""Sends a DELETE request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response <Response>` object - :rtype: requests.Response - """ - - return request('delete', url, **kwargs) diff --git a/venv/lib/python3.6/site-packages/requests/auth.py b/venv/lib/python3.6/site-packages/requests/auth.py deleted file mode 100644 index 4ae4594..0000000 --- a/venv/lib/python3.6/site-packages/requests/auth.py +++ /dev/null @@ -1,305 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.auth -~~~~~~~~~~~~~ - -This module contains the authentication handlers for Requests. -""" - -import os -import re -import time -import hashlib -import threading -import warnings - -from base64 import b64encode - -from .compat import urlparse, str, basestring -from .cookies import extract_cookies_to_jar -from ._internal_utils import to_native_string -from .utils import parse_dict_header - -CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded' -CONTENT_TYPE_MULTI_PART = 'multipart/form-data' - - -def _basic_auth_str(username, password): - """Returns a Basic Auth string.""" - - # "I want us to put a big-ol' comment on top of it that - # says that this behaviour is dumb but we need to preserve - # it because people are relying on it." - # - Lukasa - # - # These are here solely to maintain backwards compatibility - # for things like ints. This will be removed in 3.0.0. - if not isinstance(username, basestring): - warnings.warn( - "Non-string usernames will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({0!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(username), - category=DeprecationWarning, - ) - username = str(username) - - if not isinstance(password, basestring): - warnings.warn( - "Non-string passwords will no longer be supported in Requests " - "3.0.0. Please convert the object you've passed in ({0!r}) to " - "a string or bytes object in the near future to avoid " - "problems.".format(password), - category=DeprecationWarning, - ) - password = str(password) - # -- End Removal -- - - if isinstance(username, str): - username = username.encode('latin1') - - if isinstance(password, str): - password = password.encode('latin1') - - authstr = 'Basic ' + to_native_string( - b64encode(b':'.join((username, password))).strip() - ) - - return authstr - - -class AuthBase(object): - """Base class that all auth implementations derive from""" - - def __call__(self, r): - raise NotImplementedError('Auth hooks must be callable.') - - -class HTTPBasicAuth(AuthBase): - """Attaches HTTP Basic Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - - def __eq__(self, other): - return all([ - self.username == getattr(other, 'username', None), - self.password == getattr(other, 'password', None) - ]) - - def __ne__(self, other): - return not self == other - - def __call__(self, r): - r.headers['Authorization'] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPProxyAuth(HTTPBasicAuth): - """Attaches HTTP Proxy Authentication to a given Request object.""" - - def __call__(self, r): - r.headers['Proxy-Authorization'] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPDigestAuth(AuthBase): - """Attaches HTTP Digest Authentication to the given Request object.""" - - def __init__(self, username, password): - self.username = username - self.password = password - # Keep state in per-thread local storage - self._thread_local = threading.local() - - def init_per_thread_state(self): - # Ensure state is initialized just once per-thread - if not hasattr(self._thread_local, 'init'): - self._thread_local.init = True - self._thread_local.last_nonce = '' - self._thread_local.nonce_count = 0 - self._thread_local.chal = {} - self._thread_local.pos = None - self._thread_local.num_401_calls = None - - def build_digest_header(self, method, url): - """ - :rtype: str - """ - - realm = self._thread_local.chal['realm'] - nonce = self._thread_local.chal['nonce'] - qop = self._thread_local.chal.get('qop') - algorithm = self._thread_local.chal.get('algorithm') - opaque = self._thread_local.chal.get('opaque') - hash_utf8 = None - - if algorithm is None: - _algorithm = 'MD5' - else: - _algorithm = algorithm.upper() - # lambdas assume digest modules are imported at the top level - if _algorithm == 'MD5' or _algorithm == 'MD5-SESS': - def md5_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.md5(x).hexdigest() - hash_utf8 = md5_utf8 - elif _algorithm == 'SHA': - def sha_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.sha1(x).hexdigest() - hash_utf8 = sha_utf8 - elif _algorithm == 'SHA-256': - def sha256_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.sha256(x).hexdigest() - hash_utf8 = sha256_utf8 - elif _algorithm == 'SHA-512': - def sha512_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.sha512(x).hexdigest() - hash_utf8 = sha512_utf8 - - KD = lambda s, d: hash_utf8("%s:%s" % (s, d)) - - if hash_utf8 is None: - return None - - # XXX not implemented yet - entdig = None - p_parsed = urlparse(url) - #: path is request-uri defined in RFC 2616 which should not be empty - path = p_parsed.path or "/" - if p_parsed.query: - path += '?' + p_parsed.query - - A1 = '%s:%s:%s' % (self.username, realm, self.password) - A2 = '%s:%s' % (method, path) - - HA1 = hash_utf8(A1) - HA2 = hash_utf8(A2) - - if nonce == self._thread_local.last_nonce: - self._thread_local.nonce_count += 1 - else: - self._thread_local.nonce_count = 1 - ncvalue = '%08x' % self._thread_local.nonce_count - s = str(self._thread_local.nonce_count).encode('utf-8') - s += nonce.encode('utf-8') - s += time.ctime().encode('utf-8') - s += os.urandom(8) - - cnonce = (hashlib.sha1(s).hexdigest()[:16]) - if _algorithm == 'MD5-SESS': - HA1 = hash_utf8('%s:%s:%s' % (HA1, nonce, cnonce)) - - if not qop: - respdig = KD(HA1, "%s:%s" % (nonce, HA2)) - elif qop == 'auth' or 'auth' in qop.split(','): - noncebit = "%s:%s:%s:%s:%s" % ( - nonce, ncvalue, cnonce, 'auth', HA2 - ) - respdig = KD(HA1, noncebit) - else: - # XXX handle auth-int. - return None - - self._thread_local.last_nonce = nonce - - # XXX should the partial digests be encoded too? - base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \ - 'response="%s"' % (self.username, realm, nonce, path, respdig) - if opaque: - base += ', opaque="%s"' % opaque - if algorithm: - base += ', algorithm="%s"' % algorithm - if entdig: - base += ', digest="%s"' % entdig - if qop: - base += ', qop="auth", nc=%s, cnonce="%s"' % (ncvalue, cnonce) - - return 'Digest %s' % (base) - - def handle_redirect(self, r, **kwargs): - """Reset num_401_calls counter on redirects.""" - if r.is_redirect: - self._thread_local.num_401_calls = 1 - - def handle_401(self, r, **kwargs): - """ - Takes the given response and tries digest-auth, if needed. - - :rtype: requests.Response - """ - - # If response is not 4xx, do not auth - # See https://github.com/requests/requests/issues/3772 - if not 400 <= r.status_code < 500: - self._thread_local.num_401_calls = 1 - return r - - if self._thread_local.pos is not None: - # Rewind the file position indicator of the body to where - # it was to resend the request. - r.request.body.seek(self._thread_local.pos) - s_auth = r.headers.get('www-authenticate', '') - - if 'digest' in s_auth.lower() and self._thread_local.num_401_calls < 2: - - self._thread_local.num_401_calls += 1 - pat = re.compile(r'digest ', flags=re.IGNORECASE) - self._thread_local.chal = parse_dict_header(pat.sub('', s_auth, count=1)) - - # Consume content and release the original connection - # to allow our new request to reuse the same one. - r.content - r.close() - prep = r.request.copy() - extract_cookies_to_jar(prep._cookies, r.request, r.raw) - prep.prepare_cookies(prep._cookies) - - prep.headers['Authorization'] = self.build_digest_header( - prep.method, prep.url) - _r = r.connection.send(prep, **kwargs) - _r.history.append(r) - _r.request = prep - - return _r - - self._thread_local.num_401_calls = 1 - return r - - def __call__(self, r): - # Initialize per-thread state, if needed - self.init_per_thread_state() - # If we have a saved nonce, skip the 401 - if self._thread_local.last_nonce: - r.headers['Authorization'] = self.build_digest_header(r.method, r.url) - try: - self._thread_local.pos = r.body.tell() - except AttributeError: - # In the case of HTTPDigestAuth being reused and the body of - # the previous request was a file-like object, pos has the - # file position of the previous body. Ensure it's set to - # None. - self._thread_local.pos = None - r.register_hook('response', self.handle_401) - r.register_hook('response', self.handle_redirect) - self._thread_local.num_401_calls = 1 - - return r - - def __eq__(self, other): - return all([ - self.username == getattr(other, 'username', None), - self.password == getattr(other, 'password', None) - ]) - - def __ne__(self, other): - return not self == other diff --git a/venv/lib/python3.6/site-packages/requests/certs.py b/venv/lib/python3.6/site-packages/requests/certs.py deleted file mode 100644 index d1a378d..0000000 --- a/venv/lib/python3.6/site-packages/requests/certs.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -requests.certs -~~~~~~~~~~~~~~ - -This module returns the preferred default CA certificate bundle. There is -only one — the one from the certifi package. - -If you are packaging Requests, e.g., for a Linux distribution or a managed -environment, you can change the definition of where() to return a separately -packaged CA bundle. -""" -from certifi import where - -if __name__ == '__main__': - print(where()) diff --git a/venv/lib/python3.6/site-packages/requests/compat.py b/venv/lib/python3.6/site-packages/requests/compat.py deleted file mode 100644 index 6b9c6fa..0000000 --- a/venv/lib/python3.6/site-packages/requests/compat.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.compat -~~~~~~~~~~~~~~~ - -This module handles import compatibility issues between Python 2 and -Python 3. -""" - -import chardet - -import sys - -# ------- -# Pythons -# ------- - -# Syntax sugar. -_ver = sys.version_info - -#: Python 2.x? -is_py2 = (_ver[0] == 2) - -#: Python 3.x? -is_py3 = (_ver[0] == 3) - -try: - import simplejson as json -except ImportError: - import json - -# --------- -# Specifics -# --------- - -if is_py2: - from urllib import ( - quote, unquote, quote_plus, unquote_plus, urlencode, getproxies, - proxy_bypass, proxy_bypass_environment, getproxies_environment) - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag - from urllib2 import parse_http_list - import cookielib - from Cookie import Morsel - from StringIO import StringIO - from collections import Callable, Mapping, MutableMapping - - from urllib3.packages.ordered_dict import OrderedDict - - builtin_str = str - bytes = str - str = unicode - basestring = basestring - numeric_types = (int, long, float) - integer_types = (int, long) - -elif is_py3: - from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag - from urllib.request import parse_http_list, getproxies, proxy_bypass, proxy_bypass_environment, getproxies_environment - from http import cookiejar as cookielib - from http.cookies import Morsel - from io import StringIO - from collections import OrderedDict - from collections.abc import Callable, Mapping, MutableMapping - - builtin_str = str - str = str - bytes = bytes - basestring = (str, bytes) - numeric_types = (int, float) - integer_types = (int,) diff --git a/venv/lib/python3.6/site-packages/requests/cookies.py b/venv/lib/python3.6/site-packages/requests/cookies.py deleted file mode 100644 index 50883a8..0000000 --- a/venv/lib/python3.6/site-packages/requests/cookies.py +++ /dev/null @@ -1,546 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.cookies -~~~~~~~~~~~~~~~~ - -Compatibility code to be able to use `cookielib.CookieJar` with requests. - -requests.utils imports from here, so be careful with imports. -""" - -import copy -import time -import calendar - -from ._internal_utils import to_native_string -from .compat import cookielib, urlparse, urlunparse, Morsel, MutableMapping - -try: - import threading -except ImportError: - import dummy_threading as threading - - -class MockRequest(object): - """Wraps a `requests.Request` to mimic a `urllib2.Request`. - - The code in `cookielib.CookieJar` expects this interface in order to correctly - manage cookie policies, i.e., determine whether a cookie can be set, given the - domains of the request and the cookie. - - The original request object is read-only. The client is responsible for collecting - the new headers via `get_new_headers()` and interpreting them appropriately. You - probably want `get_cookie_header`, defined below. - """ - - def __init__(self, request): - self._r = request - self._new_headers = {} - self.type = urlparse(self._r.url).scheme - - def get_type(self): - return self.type - - def get_host(self): - return urlparse(self._r.url).netloc - - def get_origin_req_host(self): - return self.get_host() - - def get_full_url(self): - # Only return the response's URL if the user hadn't set the Host - # header - if not self._r.headers.get('Host'): - return self._r.url - # If they did set it, retrieve it and reconstruct the expected domain - host = to_native_string(self._r.headers['Host'], encoding='utf-8') - parsed = urlparse(self._r.url) - # Reconstruct the URL as we expect it - return urlunparse([ - parsed.scheme, host, parsed.path, parsed.params, parsed.query, - parsed.fragment - ]) - - def is_unverifiable(self): - return True - - def has_header(self, name): - return name in self._r.headers or name in self._new_headers - - def get_header(self, name, default=None): - return self._r.headers.get(name, self._new_headers.get(name, default)) - - def add_header(self, key, val): - """cookielib has no legitimate use for this method; add it back if you find one.""" - raise NotImplementedError("Cookie headers should be added with add_unredirected_header()") - - def add_unredirected_header(self, name, value): - self._new_headers[name] = value - - def get_new_headers(self): - return self._new_headers - - @property - def unverifiable(self): - return self.is_unverifiable() - - @property - def origin_req_host(self): - return self.get_origin_req_host() - - @property - def host(self): - return self.get_host() - - -class MockResponse(object): - """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. - - ...what? Basically, expose the parsed HTTP headers from the server response - the way `cookielib` expects to see them. - """ - - def __init__(self, headers): - """Make a MockResponse for `cookielib` to read. - - :param headers: a httplib.HTTPMessage or analogous carrying the headers - """ - self._headers = headers - - def info(self): - return self._headers - - def getheaders(self, name): - self._headers.getheaders(name) - - -def extract_cookies_to_jar(jar, request, response): - """Extract the cookies from the response into a CookieJar. - - :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar) - :param request: our own requests.Request object - :param response: urllib3.HTTPResponse object - """ - if not (hasattr(response, '_original_response') and - response._original_response): - return - # the _original_response field is the wrapped httplib.HTTPResponse object, - req = MockRequest(request) - # pull out the HTTPMessage with the headers and put it in the mock: - res = MockResponse(response._original_response.msg) - jar.extract_cookies(res, req) - - -def get_cookie_header(jar, request): - """ - Produce an appropriate Cookie header string to be sent with `request`, or None. - - :rtype: str - """ - r = MockRequest(request) - jar.add_cookie_header(r) - return r.get_new_headers().get('Cookie') - - -def remove_cookie_by_name(cookiejar, name, domain=None, path=None): - """Unsets a cookie by name, by default over all domains and paths. - - Wraps CookieJar.clear(), is O(n). - """ - clearables = [] - for cookie in cookiejar: - if cookie.name != name: - continue - if domain is not None and domain != cookie.domain: - continue - if path is not None and path != cookie.path: - continue - clearables.append((cookie.domain, cookie.path, cookie.name)) - - for domain, path, name in clearables: - cookiejar.clear(domain, path, name) - - -class CookieConflictError(RuntimeError): - """There are two cookies that meet the criteria specified in the cookie jar. - Use .get and .set and include domain and path args in order to be more specific. - """ - - -class RequestsCookieJar(cookielib.CookieJar, MutableMapping): - """Compatibility class; is a cookielib.CookieJar, but exposes a dict - interface. - - This is the CookieJar we create by default for requests and sessions that - don't specify one, since some clients may expect response.cookies and - session.cookies to support dict operations. - - Requests does not use the dict interface internally; it's just for - compatibility with external client code. All requests code should work - out of the box with externally provided instances of ``CookieJar``, e.g. - ``LWPCookieJar`` and ``FileCookieJar``. - - Unlike a regular CookieJar, this class is pickleable. - - .. warning:: dictionary operations that are normally O(1) may be O(n). - """ - - def get(self, name, default=None, domain=None, path=None): - """Dict-like get() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - - .. warning:: operation is O(n), not O(1). - """ - try: - return self._find_no_duplicates(name, domain, path) - except KeyError: - return default - - def set(self, name, value, **kwargs): - """Dict-like set() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - """ - # support client code that unsets cookies by assignment of a None value: - if value is None: - remove_cookie_by_name(self, name, domain=kwargs.get('domain'), path=kwargs.get('path')) - return - - if isinstance(value, Morsel): - c = morsel_to_cookie(value) - else: - c = create_cookie(name, value, **kwargs) - self.set_cookie(c) - return c - - def iterkeys(self): - """Dict-like iterkeys() that returns an iterator of names of cookies - from the jar. - - .. seealso:: itervalues() and iteritems(). - """ - for cookie in iter(self): - yield cookie.name - - def keys(self): - """Dict-like keys() that returns a list of names of cookies from the - jar. - - .. seealso:: values() and items(). - """ - return list(self.iterkeys()) - - def itervalues(self): - """Dict-like itervalues() that returns an iterator of values of cookies - from the jar. - - .. seealso:: iterkeys() and iteritems(). - """ - for cookie in iter(self): - yield cookie.value - - def values(self): - """Dict-like values() that returns a list of values of cookies from the - jar. - - .. seealso:: keys() and items(). - """ - return list(self.itervalues()) - - def iteritems(self): - """Dict-like iteritems() that returns an iterator of name-value tuples - from the jar. - - .. seealso:: iterkeys() and itervalues(). - """ - for cookie in iter(self): - yield cookie.name, cookie.value - - def items(self): - """Dict-like items() that returns a list of name-value tuples from the - jar. Allows client-code to call ``dict(RequestsCookieJar)`` and get a - vanilla python dict of key value pairs. - - .. seealso:: keys() and values(). - """ - return list(self.iteritems()) - - def list_domains(self): - """Utility method to list all the domains in the jar.""" - domains = [] - for cookie in iter(self): - if cookie.domain not in domains: - domains.append(cookie.domain) - return domains - - def list_paths(self): - """Utility method to list all the paths in the jar.""" - paths = [] - for cookie in iter(self): - if cookie.path not in paths: - paths.append(cookie.path) - return paths - - def multiple_domains(self): - """Returns True if there are multiple domains in the jar. - Returns False otherwise. - - :rtype: bool - """ - domains = [] - for cookie in iter(self): - if cookie.domain is not None and cookie.domain in domains: - return True - domains.append(cookie.domain) - return False # there is only one domain in jar - - def get_dict(self, domain=None, path=None): - """Takes as an argument an optional domain and path and returns a plain - old Python dict of name-value pairs of cookies that meet the - requirements. - - :rtype: dict - """ - dictionary = {} - for cookie in iter(self): - if ( - (domain is None or cookie.domain == domain) and - (path is None or cookie.path == path) - ): - dictionary[cookie.name] = cookie.value - return dictionary - - def __contains__(self, name): - try: - return super(RequestsCookieJar, self).__contains__(name) - except CookieConflictError: - return True - - def __getitem__(self, name): - """Dict-like __getitem__() for compatibility with client code. Throws - exception if there are more than one cookie with name. In that case, - use the more explicit get() method instead. - - .. warning:: operation is O(n), not O(1). - """ - return self._find_no_duplicates(name) - - def __setitem__(self, name, value): - """Dict-like __setitem__ for compatibility with client code. Throws - exception if there is already a cookie of that name in the jar. In that - case, use the more explicit set() method instead. - """ - self.set(name, value) - - def __delitem__(self, name): - """Deletes a cookie given a name. Wraps ``cookielib.CookieJar``'s - ``remove_cookie_by_name()``. - """ - remove_cookie_by_name(self, name) - - def set_cookie(self, cookie, *args, **kwargs): - if hasattr(cookie.value, 'startswith') and cookie.value.startswith('"') and cookie.value.endswith('"'): - cookie.value = cookie.value.replace('\\"', '') - return super(RequestsCookieJar, self).set_cookie(cookie, *args, **kwargs) - - def update(self, other): - """Updates this jar with cookies from another CookieJar or dict-like""" - if isinstance(other, cookielib.CookieJar): - for cookie in other: - self.set_cookie(copy.copy(cookie)) - else: - super(RequestsCookieJar, self).update(other) - - def _find(self, name, domain=None, path=None): - """Requests uses this method internally to get cookie values. - - If there are conflicting cookies, _find arbitrarily chooses one. - See _find_no_duplicates if you want an exception thrown if there are - conflicting cookies. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :return: cookie.value - """ - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - return cookie.value - - raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) - - def _find_no_duplicates(self, name, domain=None, path=None): - """Both ``__get_item__`` and ``get`` call this function: it's never - used elsewhere in Requests. - - :param name: a string containing name of cookie - :param domain: (optional) string containing domain of cookie - :param path: (optional) string containing path of cookie - :raises KeyError: if cookie is not found - :raises CookieConflictError: if there are multiple cookies - that match name and optionally domain and path - :return: cookie.value - """ - toReturn = None - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - if toReturn is not None: # if there are multiple cookies that meet passed in criteria - raise CookieConflictError('There are multiple cookies with name, %r' % (name)) - toReturn = cookie.value # we will eventually return this as long as no cookie conflict - - if toReturn: - return toReturn - raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) - - def __getstate__(self): - """Unlike a normal CookieJar, this class is pickleable.""" - state = self.__dict__.copy() - # remove the unpickleable RLock object - state.pop('_cookies_lock') - return state - - def __setstate__(self, state): - """Unlike a normal CookieJar, this class is pickleable.""" - self.__dict__.update(state) - if '_cookies_lock' not in self.__dict__: - self._cookies_lock = threading.RLock() - - def copy(self): - """Return a copy of this RequestsCookieJar.""" - new_cj = RequestsCookieJar() - new_cj.set_policy(self.get_policy()) - new_cj.update(self) - return new_cj - - def get_policy(self): - """Return the CookiePolicy instance used.""" - return self._policy - - -def _copy_cookie_jar(jar): - if jar is None: - return None - - if hasattr(jar, 'copy'): - # We're dealing with an instance of RequestsCookieJar - return jar.copy() - # We're dealing with a generic CookieJar instance - new_jar = copy.copy(jar) - new_jar.clear() - for cookie in jar: - new_jar.set_cookie(copy.copy(cookie)) - return new_jar - - -def create_cookie(name, value, **kwargs): - """Make a cookie from underspecified parameters. - - By default, the pair of `name` and `value` will be set for the domain '' - and sent on every request (this is sometimes called a "supercookie"). - """ - result = dict( - version=0, - name=name, - value=value, - port=None, - domain='', - path='/', - secure=False, - expires=None, - discard=True, - comment=None, - comment_url=None, - rest={'HttpOnly': None}, - rfc2109=False,) - - badargs = set(kwargs) - set(result) - if badargs: - err = 'create_cookie() got unexpected keyword arguments: %s' - raise TypeError(err % list(badargs)) - - result.update(kwargs) - result['port_specified'] = bool(result['port']) - result['domain_specified'] = bool(result['domain']) - result['domain_initial_dot'] = result['domain'].startswith('.') - result['path_specified'] = bool(result['path']) - - return cookielib.Cookie(**result) - - -def morsel_to_cookie(morsel): - """Convert a Morsel object into a Cookie containing the one k/v pair.""" - - expires = None - if morsel['max-age']: - try: - expires = int(time.time() + int(morsel['max-age'])) - except ValueError: - raise TypeError('max-age: %s must be integer' % morsel['max-age']) - elif morsel['expires']: - time_template = '%a, %d-%b-%Y %H:%M:%S GMT' - expires = calendar.timegm( - time.strptime(morsel['expires'], time_template) - ) - return create_cookie( - comment=morsel['comment'], - comment_url=bool(morsel['comment']), - discard=False, - domain=morsel['domain'], - expires=expires, - name=morsel.key, - path=morsel['path'], - port=None, - rest={'HttpOnly': morsel['httponly']}, - rfc2109=False, - secure=bool(morsel['secure']), - value=morsel.value, - version=morsel['version'] or 0, - ) - - -def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): - """Returns a CookieJar from a key/value dictionary. - - :param cookie_dict: Dict of key/values to insert into CookieJar. - :param cookiejar: (optional) A cookiejar to add the cookies to. - :param overwrite: (optional) If False, will not replace cookies - already in the jar with new ones. - """ - if cookiejar is None: - cookiejar = RequestsCookieJar() - - if cookie_dict is not None: - names_from_jar = [cookie.name for cookie in cookiejar] - for name in cookie_dict: - if overwrite or (name not in names_from_jar): - cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) - - return cookiejar - - -def merge_cookies(cookiejar, cookies): - """Add cookies to cookiejar and returns a merged CookieJar. - - :param cookiejar: CookieJar object to add the cookies to. - :param cookies: Dictionary or CookieJar object to be added. - """ - if not isinstance(cookiejar, cookielib.CookieJar): - raise ValueError('You can only merge into CookieJar') - - if isinstance(cookies, dict): - cookiejar = cookiejar_from_dict( - cookies, cookiejar=cookiejar, overwrite=False) - elif isinstance(cookies, cookielib.CookieJar): - try: - cookiejar.update(cookies) - except AttributeError: - for cookie_in_jar in cookies: - cookiejar.set_cookie(cookie_in_jar) - - return cookiejar diff --git a/venv/lib/python3.6/site-packages/requests/exceptions.py b/venv/lib/python3.6/site-packages/requests/exceptions.py deleted file mode 100644 index a80cad8..0000000 --- a/venv/lib/python3.6/site-packages/requests/exceptions.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.exceptions -~~~~~~~~~~~~~~~~~~~ - -This module contains the set of Requests' exceptions. -""" -from urllib3.exceptions import HTTPError as BaseHTTPError - - -class RequestException(IOError): - """There was an ambiguous exception that occurred while handling your - request. - """ - - def __init__(self, *args, **kwargs): - """Initialize RequestException with `request` and `response` objects.""" - response = kwargs.pop('response', None) - self.response = response - self.request = kwargs.pop('request', None) - if (response is not None and not self.request and - hasattr(response, 'request')): - self.request = self.response.request - super(RequestException, self).__init__(*args, **kwargs) - - -class HTTPError(RequestException): - """An HTTP error occurred.""" - - -class ConnectionError(RequestException): - """A Connection error occurred.""" - - -class ProxyError(ConnectionError): - """A proxy error occurred.""" - - -class SSLError(ConnectionError): - """An SSL error occurred.""" - - -class Timeout(RequestException): - """The request timed out. - - Catching this error will catch both - :exc:`~requests.exceptions.ConnectTimeout` and - :exc:`~requests.exceptions.ReadTimeout` errors. - """ - - -class ConnectTimeout(ConnectionError, Timeout): - """The request timed out while trying to connect to the remote server. - - Requests that produced this error are safe to retry. - """ - - -class ReadTimeout(Timeout): - """The server did not send any data in the allotted amount of time.""" - - -class URLRequired(RequestException): - """A valid URL is required to make a request.""" - - -class TooManyRedirects(RequestException): - """Too many redirects.""" - - -class MissingSchema(RequestException, ValueError): - """The URL schema (e.g. http or https) is missing.""" - - -class InvalidSchema(RequestException, ValueError): - """See defaults.py for valid schemas.""" - - -class InvalidURL(RequestException, ValueError): - """The URL provided was somehow invalid.""" - - -class InvalidHeader(RequestException, ValueError): - """The header value provided was somehow invalid.""" - - -class InvalidProxyURL(InvalidURL): - """The proxy URL provided is invalid.""" - - -class ChunkedEncodingError(RequestException): - """The server declared chunked encoding but sent an invalid chunk.""" - - -class ContentDecodingError(RequestException, BaseHTTPError): - """Failed to decode response content""" - - -class StreamConsumedError(RequestException, TypeError): - """The content for this response was already consumed""" - - -class RetryError(RequestException): - """Custom retries logic failed""" - - -class UnrewindableBodyError(RequestException): - """Requests encountered an error when trying to rewind a body""" - -# Warnings - - -class RequestsWarning(Warning): - """Base warning for Requests.""" - pass - - -class FileModeWarning(RequestsWarning, DeprecationWarning): - """A file was opened in text mode, but Requests determined its binary length.""" - pass - - -class RequestsDependencyWarning(RequestsWarning): - """An imported dependency doesn't match the expected version range.""" - pass diff --git a/venv/lib/python3.6/site-packages/requests/help.py b/venv/lib/python3.6/site-packages/requests/help.py deleted file mode 100644 index 06e06b2..0000000 --- a/venv/lib/python3.6/site-packages/requests/help.py +++ /dev/null @@ -1,120 +0,0 @@ -"""Module containing bug report helper(s).""" -from __future__ import print_function - -import json -import platform -import sys -import ssl - -import idna -import urllib3 -import chardet - -from . import __version__ as requests_version - -try: - from urllib3.contrib import pyopenssl -except ImportError: - pyopenssl = None - OpenSSL = None - cryptography = None -else: - import OpenSSL - import cryptography - - -def _implementation(): - """Return a dict with the Python implementation and version. - - Provide both the name and the version of the Python implementation - currently running. For example, on CPython 2.7.5 it will return - {'name': 'CPython', 'version': '2.7.5'}. - - This function works best on CPython and PyPy: in particular, it probably - doesn't work for Jython or IronPython. Future investigation should be done - to work out the correct shape of the code for those platforms. - """ - implementation = platform.python_implementation() - - if implementation == 'CPython': - implementation_version = platform.python_version() - elif implementation == 'PyPy': - implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major, - sys.pypy_version_info.minor, - sys.pypy_version_info.micro) - if sys.pypy_version_info.releaselevel != 'final': - implementation_version = ''.join([ - implementation_version, sys.pypy_version_info.releaselevel - ]) - elif implementation == 'Jython': - implementation_version = platform.python_version() # Complete Guess - elif implementation == 'IronPython': - implementation_version = platform.python_version() # Complete Guess - else: - implementation_version = 'Unknown' - - return {'name': implementation, 'version': implementation_version} - - -def info(): - """Generate information for a bug report.""" - try: - platform_info = { - 'system': platform.system(), - 'release': platform.release(), - } - except IOError: - platform_info = { - 'system': 'Unknown', - 'release': 'Unknown', - } - - implementation_info = _implementation() - urllib3_info = {'version': urllib3.__version__} - chardet_info = {'version': chardet.__version__} - - pyopenssl_info = { - 'version': None, - 'openssl_version': '', - } - if OpenSSL: - pyopenssl_info = { - 'version': OpenSSL.__version__, - 'openssl_version': '%x' % OpenSSL.SSL.OPENSSL_VERSION_NUMBER, - } - cryptography_info = { - 'version': getattr(cryptography, '__version__', ''), - } - idna_info = { - 'version': getattr(idna, '__version__', ''), - } - - # OPENSSL_VERSION_NUMBER doesn't exist in the Python 2.6 ssl module. - system_ssl = getattr(ssl, 'OPENSSL_VERSION_NUMBER', None) - system_ssl_info = { - 'version': '%x' % system_ssl if system_ssl is not None else '' - } - - return { - 'platform': platform_info, - 'implementation': implementation_info, - 'system_ssl': system_ssl_info, - 'using_pyopenssl': pyopenssl is not None, - 'pyOpenSSL': pyopenssl_info, - 'urllib3': urllib3_info, - 'chardet': chardet_info, - 'cryptography': cryptography_info, - 'idna': idna_info, - 'requests': { - 'version': requests_version, - }, - } - - -def main(): - """Pretty-print the bug information as JSON.""" - print(json.dumps(info(), sort_keys=True, indent=2)) - - -if __name__ == '__main__': - main() diff --git a/venv/lib/python3.6/site-packages/requests/hooks.py b/venv/lib/python3.6/site-packages/requests/hooks.py deleted file mode 100644 index 32b32de..0000000 --- a/venv/lib/python3.6/site-packages/requests/hooks.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.hooks -~~~~~~~~~~~~~~ - -This module provides the capabilities for the Requests hooks system. - -Available hooks: - -``response``: - The response generated from a Request. -""" -HOOKS = ['response'] - - -def default_hooks(): - return dict((event, []) for event in HOOKS) - -# TODO: response is the only one - - -def dispatch_hook(key, hooks, hook_data, **kwargs): - """Dispatches a hook dictionary on a given piece of data.""" - hooks = hooks or dict() - hooks = hooks.get(key) - if hooks: - if hasattr(hooks, '__call__'): - hooks = [hooks] - for hook in hooks: - _hook_data = hook(hook_data, **kwargs) - if _hook_data is not None: - hook_data = _hook_data - return hook_data diff --git a/venv/lib/python3.6/site-packages/requests/models.py b/venv/lib/python3.6/site-packages/requests/models.py deleted file mode 100644 index 3d0e1f4..0000000 --- a/venv/lib/python3.6/site-packages/requests/models.py +++ /dev/null @@ -1,952 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.models -~~~~~~~~~~~~~~~ - -This module contains the primary objects that power Requests. -""" - -import datetime -import sys - -# Import encoding now, to avoid implicit import later. -# Implicit import within threads may cause LookupError when standard library is in a ZIP, -# such as in Embedded Python. See https://github.com/requests/requests/issues/3578. -import encodings.idna - -from urllib3.fields import RequestField -from urllib3.filepost import encode_multipart_formdata -from urllib3.util import parse_url -from urllib3.exceptions import ( - DecodeError, ReadTimeoutError, ProtocolError, LocationParseError) - -from io import UnsupportedOperation -from .hooks import default_hooks -from .structures import CaseInsensitiveDict - -from .auth import HTTPBasicAuth -from .cookies import cookiejar_from_dict, get_cookie_header, _copy_cookie_jar -from .exceptions import ( - HTTPError, MissingSchema, InvalidURL, ChunkedEncodingError, - ContentDecodingError, ConnectionError, StreamConsumedError) -from ._internal_utils import to_native_string, unicode_is_ascii -from .utils import ( - guess_filename, get_auth_from_url, requote_uri, - stream_decode_response_unicode, to_key_val_list, parse_header_links, - iter_slices, guess_json_utf, super_len, check_header_validity) -from .compat import ( - Callable, Mapping, - cookielib, urlunparse, urlsplit, urlencode, str, bytes, - is_py2, chardet, builtin_str, basestring) -from .compat import json as complexjson -from .status_codes import codes - -#: The set of HTTP status codes that indicate an automatically -#: processable redirect. -REDIRECT_STATI = ( - codes.moved, # 301 - codes.found, # 302 - codes.other, # 303 - codes.temporary_redirect, # 307 - codes.permanent_redirect, # 308 -) - -DEFAULT_REDIRECT_LIMIT = 30 -CONTENT_CHUNK_SIZE = 10 * 1024 -ITER_CHUNK_SIZE = 512 - - -class RequestEncodingMixin(object): - @property - def path_url(self): - """Build the path URL to use.""" - - url = [] - - p = urlsplit(self.url) - - path = p.path - if not path: - path = '/' - - url.append(path) - - query = p.query - if query: - url.append('?') - url.append(query) - - return ''.join(url) - - @staticmethod - def _encode_params(data): - """Encode parameters in a piece of data. - - Will successfully encode parameters when passed as a dict or a list of - 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary - if parameters are supplied as a dict. - """ - - if isinstance(data, (str, bytes)): - return data - elif hasattr(data, 'read'): - return data - elif hasattr(data, '__iter__'): - result = [] - for k, vs in to_key_val_list(data): - if isinstance(vs, basestring) or not hasattr(vs, '__iter__'): - vs = [vs] - for v in vs: - if v is not None: - result.append( - (k.encode('utf-8') if isinstance(k, str) else k, - v.encode('utf-8') if isinstance(v, str) else v)) - return urlencode(result, doseq=True) - else: - return data - - @staticmethod - def _encode_files(files, data): - """Build the body for a multipart/form-data request. - - Will successfully encode files when passed as a dict or a list of - tuples. Order is retained if data is a list of tuples but arbitrary - if parameters are supplied as a dict. - The tuples may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) - or 4-tuples (filename, fileobj, contentype, custom_headers). - """ - if (not files): - raise ValueError("Files must be provided.") - elif isinstance(data, basestring): - raise ValueError("Data must not be a string.") - - new_fields = [] - fields = to_key_val_list(data or {}) - files = to_key_val_list(files or {}) - - for field, val in fields: - if isinstance(val, basestring) or not hasattr(val, '__iter__'): - val = [val] - for v in val: - if v is not None: - # Don't call str() on bytestrings: in Py3 it all goes wrong. - if not isinstance(v, bytes): - v = str(v) - - new_fields.append( - (field.decode('utf-8') if isinstance(field, bytes) else field, - v.encode('utf-8') if isinstance(v, str) else v)) - - for (k, v) in files: - # support for explicit filename - ft = None - fh = None - if isinstance(v, (tuple, list)): - if len(v) == 2: - fn, fp = v - elif len(v) == 3: - fn, fp, ft = v - else: - fn, fp, ft, fh = v - else: - fn = guess_filename(v) or k - fp = v - - if isinstance(fp, (str, bytes, bytearray)): - fdata = fp - elif hasattr(fp, 'read'): - fdata = fp.read() - elif fp is None: - continue - else: - fdata = fp - - rf = RequestField(name=k, data=fdata, filename=fn, headers=fh) - rf.make_multipart(content_type=ft) - new_fields.append(rf) - - body, content_type = encode_multipart_formdata(new_fields) - - return body, content_type - - -class RequestHooksMixin(object): - def register_hook(self, event, hook): - """Properly register a hook.""" - - if event not in self.hooks: - raise ValueError('Unsupported event specified, with event name "%s"' % (event)) - - if isinstance(hook, Callable): - self.hooks[event].append(hook) - elif hasattr(hook, '__iter__'): - self.hooks[event].extend(h for h in hook if isinstance(h, Callable)) - - def deregister_hook(self, event, hook): - """Deregister a previously registered hook. - Returns True if the hook existed, False if not. - """ - - try: - self.hooks[event].remove(hook) - return True - except ValueError: - return False - - -class Request(RequestHooksMixin): - """A user-created :class:`Request <Request>` object. - - Used to prepare a :class:`PreparedRequest <PreparedRequest>`, which is sent to the server. - - :param method: HTTP method to use. - :param url: URL to send. - :param headers: dictionary of headers to send. - :param files: dictionary of {filename: fileobject} files to multipart upload. - :param data: the body to attach to the request. If a dictionary is provided, form-encoding will take place. - :param json: json for the body to attach to the request (if files or data is not specified). - :param params: dictionary of URL parameters to append to the URL. - :param auth: Auth handler or (user, pass) tuple. - :param cookies: dictionary or CookieJar of cookies to attach to this request. - :param hooks: dictionary of callback hooks, for internal usage. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') - >>> req.prepare() - <PreparedRequest [GET]> - """ - - def __init__(self, - method=None, url=None, headers=None, files=None, data=None, - params=None, auth=None, cookies=None, hooks=None, json=None): - - # Default empty dicts for dict params. - data = [] if data is None else data - files = [] if files is None else files - headers = {} if headers is None else headers - params = {} if params is None else params - hooks = {} if hooks is None else hooks - - self.hooks = default_hooks() - for (k, v) in list(hooks.items()): - self.register_hook(event=k, hook=v) - - self.method = method - self.url = url - self.headers = headers - self.files = files - self.data = data - self.json = json - self.params = params - self.auth = auth - self.cookies = cookies - - def __repr__(self): - return '<Request [%s]>' % (self.method) - - def prepare(self): - """Constructs a :class:`PreparedRequest <PreparedRequest>` for transmission and returns it.""" - p = PreparedRequest() - p.prepare( - method=self.method, - url=self.url, - headers=self.headers, - files=self.files, - data=self.data, - json=self.json, - params=self.params, - auth=self.auth, - cookies=self.cookies, - hooks=self.hooks, - ) - return p - - -class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): - """The fully mutable :class:`PreparedRequest <PreparedRequest>` object, - containing the exact bytes that will be sent to the server. - - Generated from either a :class:`Request <Request>` object or manually. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') - >>> r = req.prepare() - <PreparedRequest [GET]> - - >>> s = requests.Session() - >>> s.send(r) - <Response [200]> - """ - - def __init__(self): - #: HTTP verb to send to the server. - self.method = None - #: HTTP URL to send the request to. - self.url = None - #: dictionary of HTTP headers. - self.headers = None - # The `CookieJar` used to create the Cookie header will be stored here - # after prepare_cookies is called - self._cookies = None - #: request body to send to the server. - self.body = None - #: dictionary of callback hooks, for internal usage. - self.hooks = default_hooks() - #: integer denoting starting position of a readable file-like body. - self._body_position = None - - def prepare(self, - method=None, url=None, headers=None, files=None, data=None, - params=None, auth=None, cookies=None, hooks=None, json=None): - """Prepares the entire request with the given parameters.""" - - self.prepare_method(method) - self.prepare_url(url, params) - self.prepare_headers(headers) - self.prepare_cookies(cookies) - self.prepare_body(data, files, json) - self.prepare_auth(auth, url) - - # Note that prepare_auth must be last to enable authentication schemes - # such as OAuth to work on a fully prepared request. - - # This MUST go after prepare_auth. Authenticators could add a hook - self.prepare_hooks(hooks) - - def __repr__(self): - return '<PreparedRequest [%s]>' % (self.method) - - def copy(self): - p = PreparedRequest() - p.method = self.method - p.url = self.url - p.headers = self.headers.copy() if self.headers is not None else None - p._cookies = _copy_cookie_jar(self._cookies) - p.body = self.body - p.hooks = self.hooks - p._body_position = self._body_position - return p - - def prepare_method(self, method): - """Prepares the given HTTP method.""" - self.method = method - if self.method is not None: - self.method = to_native_string(self.method.upper()) - - @staticmethod - def _get_idna_encoded_host(host): - import idna - - try: - host = idna.encode(host, uts46=True).decode('utf-8') - except idna.IDNAError: - raise UnicodeError - return host - - def prepare_url(self, url, params): - """Prepares the given HTTP URL.""" - #: Accept objects that have string representations. - #: We're unable to blindly call unicode/str functions - #: as this will include the bytestring indicator (b'') - #: on python 3.x. - #: https://github.com/requests/requests/pull/2238 - if isinstance(url, bytes): - url = url.decode('utf8') - else: - url = unicode(url) if is_py2 else str(url) - - # Remove leading whitespaces from url - url = url.lstrip() - - # Don't do any URL preparation for non-HTTP schemes like `mailto`, - # `data` etc to work around exceptions from `url_parse`, which - # handles RFC 3986 only. - if ':' in url and not url.lower().startswith('http'): - self.url = url - return - - # Support for unicode domain names and paths. - try: - scheme, auth, host, port, path, query, fragment = parse_url(url) - except LocationParseError as e: - raise InvalidURL(*e.args) - - if not scheme: - error = ("Invalid URL {0!r}: No schema supplied. Perhaps you meant http://{0}?") - error = error.format(to_native_string(url, 'utf8')) - - raise MissingSchema(error) - - if not host: - raise InvalidURL("Invalid URL %r: No host supplied" % url) - - # In general, we want to try IDNA encoding the hostname if the string contains - # non-ASCII characters. This allows users to automatically get the correct IDNA - # behaviour. For strings containing only ASCII characters, we need to also verify - # it doesn't start with a wildcard (*), before allowing the unencoded hostname. - if not unicode_is_ascii(host): - try: - host = self._get_idna_encoded_host(host) - except UnicodeError: - raise InvalidURL('URL has an invalid label.') - elif host.startswith(u'*'): - raise InvalidURL('URL has an invalid label.') - - # Carefully reconstruct the network location - netloc = auth or '' - if netloc: - netloc += '@' - netloc += host - if port: - netloc += ':' + str(port) - - # Bare domains aren't valid URLs. - if not path: - path = '/' - - if is_py2: - if isinstance(scheme, str): - scheme = scheme.encode('utf-8') - if isinstance(netloc, str): - netloc = netloc.encode('utf-8') - if isinstance(path, str): - path = path.encode('utf-8') - if isinstance(query, str): - query = query.encode('utf-8') - if isinstance(fragment, str): - fragment = fragment.encode('utf-8') - - if isinstance(params, (str, bytes)): - params = to_native_string(params) - - enc_params = self._encode_params(params) - if enc_params: - if query: - query = '%s&%s' % (query, enc_params) - else: - query = enc_params - - url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) - self.url = url - - def prepare_headers(self, headers): - """Prepares the given HTTP headers.""" - - self.headers = CaseInsensitiveDict() - if headers: - for header in headers.items(): - # Raise exception on invalid header value. - check_header_validity(header) - name, value = header - self.headers[to_native_string(name)] = value - - def prepare_body(self, data, files, json=None): - """Prepares the given HTTP body data.""" - - # Check if file, fo, generator, iterator. - # If not, run through normal process. - - # Nottin' on you. - body = None - content_type = None - - if not data and json is not None: - # urllib3 requires a bytes-like body. Python 2's json.dumps - # provides this natively, but Python 3 gives a Unicode string. - content_type = 'application/json' - body = complexjson.dumps(json) - if not isinstance(body, bytes): - body = body.encode('utf-8') - - is_stream = all([ - hasattr(data, '__iter__'), - not isinstance(data, (basestring, list, tuple, Mapping)) - ]) - - try: - length = super_len(data) - except (TypeError, AttributeError, UnsupportedOperation): - length = None - - if is_stream: - body = data - - if getattr(body, 'tell', None) is not None: - # Record the current file position before reading. - # This will allow us to rewind a file in the event - # of a redirect. - try: - self._body_position = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body - self._body_position = object() - - if files: - raise NotImplementedError('Streamed bodies and files are mutually exclusive.') - - if length: - self.headers['Content-Length'] = builtin_str(length) - else: - self.headers['Transfer-Encoding'] = 'chunked' - else: - # Multi-part file uploads. - if files: - (body, content_type) = self._encode_files(files, data) - else: - if data: - body = self._encode_params(data) - if isinstance(data, basestring) or hasattr(data, 'read'): - content_type = None - else: - content_type = 'application/x-www-form-urlencoded' - - self.prepare_content_length(body) - - # Add content-type if it wasn't explicitly provided. - if content_type and ('content-type' not in self.headers): - self.headers['Content-Type'] = content_type - - self.body = body - - def prepare_content_length(self, body): - """Prepare Content-Length header based on request method and body""" - if body is not None: - length = super_len(body) - if length: - # If length exists, set it. Otherwise, we fallback - # to Transfer-Encoding: chunked. - self.headers['Content-Length'] = builtin_str(length) - elif self.method not in ('GET', 'HEAD') and self.headers.get('Content-Length') is None: - # Set Content-Length to 0 for methods that can have a body - # but don't provide one. (i.e. not GET or HEAD) - self.headers['Content-Length'] = '0' - - def prepare_auth(self, auth, url=''): - """Prepares the given HTTP auth data.""" - - # If no Auth is explicitly provided, extract it from the URL first. - if auth is None: - url_auth = get_auth_from_url(self.url) - auth = url_auth if any(url_auth) else None - - if auth: - if isinstance(auth, tuple) and len(auth) == 2: - # special-case basic HTTP auth - auth = HTTPBasicAuth(*auth) - - # Allow auth to make its changes. - r = auth(self) - - # Update self to reflect the auth changes. - self.__dict__.update(r.__dict__) - - # Recompute Content-Length - self.prepare_content_length(self.body) - - def prepare_cookies(self, cookies): - """Prepares the given HTTP cookie data. - - This function eventually generates a ``Cookie`` header from the - given cookies using cookielib. Due to cookielib's design, the header - will not be regenerated if it already exists, meaning this function - can only be called once for the life of the - :class:`PreparedRequest <PreparedRequest>` object. Any subsequent calls - to ``prepare_cookies`` will have no actual effect, unless the "Cookie" - header is removed beforehand. - """ - if isinstance(cookies, cookielib.CookieJar): - self._cookies = cookies - else: - self._cookies = cookiejar_from_dict(cookies) - - cookie_header = get_cookie_header(self._cookies, self) - if cookie_header is not None: - self.headers['Cookie'] = cookie_header - - def prepare_hooks(self, hooks): - """Prepares the given hooks.""" - # hooks can be passed as None to the prepare method and to this - # method. To prevent iterating over None, simply use an empty list - # if hooks is False-y - hooks = hooks or [] - for event in hooks: - self.register_hook(event, hooks[event]) - - -class Response(object): - """The :class:`Response <Response>` object, which contains a - server's response to an HTTP request. - """ - - __attrs__ = [ - '_content', 'status_code', 'headers', 'url', 'history', - 'encoding', 'reason', 'cookies', 'elapsed', 'request' - ] - - def __init__(self): - self._content = False - self._content_consumed = False - self._next = None - - #: Integer Code of responded HTTP Status, e.g. 404 or 200. - self.status_code = None - - #: Case-insensitive Dictionary of Response Headers. - #: For example, ``headers['content-encoding']`` will return the - #: value of a ``'Content-Encoding'`` response header. - self.headers = CaseInsensitiveDict() - - #: File-like object representation of response (for advanced usage). - #: Use of ``raw`` requires that ``stream=True`` be set on the request. - # This requirement does not apply for use internally to Requests. - self.raw = None - - #: Final URL location of Response. - self.url = None - - #: Encoding to decode with when accessing r.text. - self.encoding = None - - #: A list of :class:`Response <Response>` objects from - #: the history of the Request. Any redirect responses will end - #: up here. The list is sorted from the oldest to the most recent request. - self.history = [] - - #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". - self.reason = None - - #: A CookieJar of Cookies the server sent back. - self.cookies = cookiejar_from_dict({}) - - #: The amount of time elapsed between sending the request - #: and the arrival of the response (as a timedelta). - #: This property specifically measures the time taken between sending - #: the first byte of the request and finishing parsing the headers. It - #: is therefore unaffected by consuming the response content or the - #: value of the ``stream`` keyword argument. - self.elapsed = datetime.timedelta(0) - - #: The :class:`PreparedRequest <PreparedRequest>` object to which this - #: is a response. - self.request = None - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def __getstate__(self): - # Consume everything; accessing the content attribute makes - # sure the content has been fully read. - if not self._content_consumed: - self.content - - return dict( - (attr, getattr(self, attr, None)) - for attr in self.__attrs__ - ) - - def __setstate__(self, state): - for name, value in state.items(): - setattr(self, name, value) - - # pickled objects do not have .raw - setattr(self, '_content_consumed', True) - setattr(self, 'raw', None) - - def __repr__(self): - return '<Response [%s]>' % (self.status_code) - - def __bool__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __nonzero__(self): - """Returns True if :attr:`status_code` is less than 400. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code, is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - return self.ok - - def __iter__(self): - """Allows you to use a response as an iterator.""" - return self.iter_content(128) - - @property - def ok(self): - """Returns True if :attr:`status_code` is less than 400, False if not. - - This attribute checks if the status code of the response is between - 400 and 600 to see if there was a client error or a server error. If - the status code is between 200 and 400, this will return True. This - is **not** a check to see if the response code is ``200 OK``. - """ - try: - self.raise_for_status() - except HTTPError: - return False - return True - - @property - def is_redirect(self): - """True if this Response is a well-formed HTTP redirect that could have - been processed automatically (by :meth:`Session.resolve_redirects`). - """ - return ('location' in self.headers and self.status_code in REDIRECT_STATI) - - @property - def is_permanent_redirect(self): - """True if this Response one of the permanent versions of redirect.""" - return ('location' in self.headers and self.status_code in (codes.moved_permanently, codes.permanent_redirect)) - - @property - def next(self): - """Returns a PreparedRequest for the next request in a redirect chain, if there is one.""" - return self._next - - @property - def apparent_encoding(self): - """The apparent encoding, provided by the chardet library.""" - return chardet.detect(self.content)['encoding'] - - def iter_content(self, chunk_size=1, decode_unicode=False): - """Iterates over the response data. When stream=True is set on the - request, this avoids reading the content at once into memory for - large responses. The chunk size is the number of bytes it should - read into memory. This is not necessarily the length of each item - returned as decoding can take place. - - chunk_size must be of type int or None. A value of None will - function differently depending on the value of `stream`. - stream=True will read data as it arrives in whatever size the - chunks are received. If stream=False, data is returned as - a single chunk. - - If decode_unicode is True, content will be decoded using the best - available encoding based on the response. - """ - - def generate(): - # Special case for urllib3. - if hasattr(self.raw, 'stream'): - try: - for chunk in self.raw.stream(chunk_size, decode_content=True): - yield chunk - except ProtocolError as e: - raise ChunkedEncodingError(e) - except DecodeError as e: - raise ContentDecodingError(e) - except ReadTimeoutError as e: - raise ConnectionError(e) - else: - # Standard file-like object. - while True: - chunk = self.raw.read(chunk_size) - if not chunk: - break - yield chunk - - self._content_consumed = True - - if self._content_consumed and isinstance(self._content, bool): - raise StreamConsumedError() - elif chunk_size is not None and not isinstance(chunk_size, int): - raise TypeError("chunk_size must be an int, it is instead a %s." % type(chunk_size)) - # simulate reading small chunks of the content - reused_chunks = iter_slices(self._content, chunk_size) - - stream_chunks = generate() - - chunks = reused_chunks if self._content_consumed else stream_chunks - - if decode_unicode: - chunks = stream_decode_response_unicode(chunks, self) - - return chunks - - def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None, delimiter=None): - """Iterates over the response data, one line at a time. When - stream=True is set on the request, this avoids reading the - content at once into memory for large responses. - - .. note:: This method is not reentrant safe. - """ - - pending = None - - for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode): - - if pending is not None: - chunk = pending + chunk - - if delimiter: - lines = chunk.split(delimiter) - else: - lines = chunk.splitlines() - - if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: - pending = lines.pop() - else: - pending = None - - for line in lines: - yield line - - if pending is not None: - yield pending - - @property - def content(self): - """Content of the response, in bytes.""" - - if self._content is False: - # Read the contents. - if self._content_consumed: - raise RuntimeError( - 'The content for this response was already consumed') - - if self.status_code == 0 or self.raw is None: - self._content = None - else: - self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b'' - - self._content_consumed = True - # don't need to release the connection; that's been handled by urllib3 - # since we exhausted the data. - return self._content - - @property - def text(self): - """Content of the response, in unicode. - - If Response.encoding is None, encoding will be guessed using - ``chardet``. - - The encoding of the response content is determined based solely on HTTP - headers, following RFC 2616 to the letter. If you can take advantage of - non-HTTP knowledge to make a better guess at the encoding, you should - set ``r.encoding`` appropriately before accessing this property. - """ - - # Try charset from content-type - content = None - encoding = self.encoding - - if not self.content: - return str('') - - # Fallback to auto-detected encoding. - if self.encoding is None: - encoding = self.apparent_encoding - - # Decode unicode from given encoding. - try: - content = str(self.content, encoding, errors='replace') - except (LookupError, TypeError): - # A LookupError is raised if the encoding was not found which could - # indicate a misspelling or similar mistake. - # - # A TypeError can be raised if encoding is None - # - # So we try blindly encoding. - content = str(self.content, errors='replace') - - return content - - def json(self, **kwargs): - r"""Returns the json-encoded content of a response, if any. - - :param \*\*kwargs: Optional arguments that ``json.loads`` takes. - :raises ValueError: If the response body does not contain valid json. - """ - - if not self.encoding and self.content and len(self.content) > 3: - # No encoding set. JSON RFC 4627 section 3 states we should expect - # UTF-8, -16 or -32. Detect which one to use; If the detection or - # decoding fails, fall back to `self.text` (using chardet to make - # a best guess). - encoding = guess_json_utf(self.content) - if encoding is not None: - try: - return complexjson.loads( - self.content.decode(encoding), **kwargs - ) - except UnicodeDecodeError: - # Wrong UTF codec detected; usually because it's not UTF-8 - # but some other 8-bit codec. This is an RFC violation, - # and the server didn't bother to tell us what codec *was* - # used. - pass - return complexjson.loads(self.text, **kwargs) - - @property - def links(self): - """Returns the parsed header links of the response, if any.""" - - header = self.headers.get('link') - - # l = MultiDict() - l = {} - - if header: - links = parse_header_links(header) - - for link in links: - key = link.get('rel') or link.get('url') - l[key] = link - - return l - - def raise_for_status(self): - """Raises stored :class:`HTTPError`, if one occurred.""" - - http_error_msg = '' - if isinstance(self.reason, bytes): - # We attempt to decode utf-8 first because some servers - # choose to localize their reason strings. If the string - # isn't utf-8, we fall back to iso-8859-1 for all other - # encodings. (See PR #3538) - try: - reason = self.reason.decode('utf-8') - except UnicodeDecodeError: - reason = self.reason.decode('iso-8859-1') - else: - reason = self.reason - - if 400 <= self.status_code < 500: - http_error_msg = u'%s Client Error: %s for url: %s' % (self.status_code, reason, self.url) - - elif 500 <= self.status_code < 600: - http_error_msg = u'%s Server Error: %s for url: %s' % (self.status_code, reason, self.url) - - if http_error_msg: - raise HTTPError(http_error_msg, response=self) - - def close(self): - """Releases the connection back to the pool. Once this method has been - called the underlying ``raw`` object must not be accessed again. - - *Note: Should not normally need to be called explicitly.* - """ - if not self._content_consumed: - self.raw.close() - - release_conn = getattr(self.raw, 'release_conn', None) - if release_conn is not None: - release_conn() diff --git a/venv/lib/python3.6/site-packages/requests/packages.py b/venv/lib/python3.6/site-packages/requests/packages.py deleted file mode 100644 index 7232fe0..0000000 --- a/venv/lib/python3.6/site-packages/requests/packages.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -# This code exists for backwards compatibility reasons. -# I don't like it either. Just look the other way. :) - -for package in ('urllib3', 'idna', 'chardet'): - locals()[package] = __import__(package) - # This traversal is apparently necessary such that the identities are - # preserved (requests.packages.urllib3.* is urllib3.*) - for mod in list(sys.modules): - if mod == package or mod.startswith(package + '.'): - sys.modules['requests.packages.' + mod] = sys.modules[mod] - -# Kinda cool, though, right? diff --git a/venv/lib/python3.6/site-packages/requests/sessions.py b/venv/lib/python3.6/site-packages/requests/sessions.py deleted file mode 100644 index ba13526..0000000 --- a/venv/lib/python3.6/site-packages/requests/sessions.py +++ /dev/null @@ -1,741 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.session -~~~~~~~~~~~~~~~~ - -This module provides a Session object to manage and persist settings across -requests (cookies, auth, proxies). -""" -import os -import sys -import time -from datetime import timedelta - -from .auth import _basic_auth_str -from .compat import cookielib, is_py3, OrderedDict, urljoin, urlparse, Mapping -from .cookies import ( - cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_cookies) -from .models import Request, PreparedRequest, DEFAULT_REDIRECT_LIMIT -from .hooks import default_hooks, dispatch_hook -from ._internal_utils import to_native_string -from .utils import to_key_val_list, default_headers -from .exceptions import ( - TooManyRedirects, InvalidSchema, ChunkedEncodingError, ContentDecodingError) - -from .structures import CaseInsensitiveDict -from .adapters import HTTPAdapter - -from .utils import ( - requote_uri, get_environ_proxies, get_netrc_auth, should_bypass_proxies, - get_auth_from_url, rewind_body -) - -from .status_codes import codes - -# formerly defined here, reexposed here for backward compatibility -from .models import REDIRECT_STATI - -# Preferred clock, based on which one is more accurate on a given system. -if sys.platform == 'win32': - try: # Python 3.4+ - preferred_clock = time.perf_counter - except AttributeError: # Earlier than Python 3. - preferred_clock = time.clock -else: - preferred_clock = time.time - - -def merge_setting(request_setting, session_setting, dict_class=OrderedDict): - """Determines appropriate setting for a given request, taking into account - the explicit setting on that request, and the setting in the session. If a - setting is a dictionary, they will be merged together using `dict_class` - """ - - if session_setting is None: - return request_setting - - if request_setting is None: - return session_setting - - # Bypass if not a dictionary (e.g. verify) - if not ( - isinstance(session_setting, Mapping) and - isinstance(request_setting, Mapping) - ): - return request_setting - - merged_setting = dict_class(to_key_val_list(session_setting)) - merged_setting.update(to_key_val_list(request_setting)) - - # Remove keys that are set to None. Extract keys first to avoid altering - # the dictionary during iteration. - none_keys = [k for (k, v) in merged_setting.items() if v is None] - for key in none_keys: - del merged_setting[key] - - return merged_setting - - -def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): - """Properly merges both requests and session hooks. - - This is necessary because when request_hooks == {'response': []}, the - merge breaks Session hooks entirely. - """ - if session_hooks is None or session_hooks.get('response') == []: - return request_hooks - - if request_hooks is None or request_hooks.get('response') == []: - return session_hooks - - return merge_setting(request_hooks, session_hooks, dict_class) - - -class SessionRedirectMixin(object): - - def get_redirect_target(self, resp): - """Receives a Response. Returns a redirect URI or ``None``""" - # Due to the nature of how requests processes redirects this method will - # be called at least once upon the original response and at least twice - # on each subsequent redirect response (if any). - # If a custom mixin is used to handle this logic, it may be advantageous - # to cache the redirect location onto the response object as a private - # attribute. - if resp.is_redirect: - location = resp.headers['location'] - # Currently the underlying http module on py3 decode headers - # in latin1, but empirical evidence suggests that latin1 is very - # rarely used with non-ASCII characters in HTTP headers. - # It is more likely to get UTF8 header rather than latin1. - # This causes incorrect handling of UTF8 encoded location headers. - # To solve this, we re-encode the location in latin1. - if is_py3: - location = location.encode('latin1') - return to_native_string(location, 'utf8') - return None - - def resolve_redirects(self, resp, req, stream=False, timeout=None, - verify=True, cert=None, proxies=None, yield_requests=False, **adapter_kwargs): - """Receives a Response. Returns a generator of Responses or Requests.""" - - hist = [] # keep track of history - - url = self.get_redirect_target(resp) - previous_fragment = urlparse(req.url).fragment - while url: - prepared_request = req.copy() - - # Update history and keep track of redirects. - # resp.history must ignore the original request in this loop - hist.append(resp) - resp.history = hist[1:] - - try: - resp.content # Consume socket so it can be released - except (ChunkedEncodingError, ContentDecodingError, RuntimeError): - resp.raw.read(decode_content=False) - - if len(resp.history) >= self.max_redirects: - raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, response=resp) - - # Release the connection back into the pool. - resp.close() - - # Handle redirection without scheme (see: RFC 1808 Section 4) - if url.startswith('//'): - parsed_rurl = urlparse(resp.url) - url = '%s:%s' % (to_native_string(parsed_rurl.scheme), url) - - # Normalize url case and attach previous fragment if needed (RFC 7231 7.1.2) - parsed = urlparse(url) - if parsed.fragment == '' and previous_fragment: - parsed = parsed._replace(fragment=previous_fragment) - elif parsed.fragment: - previous_fragment = parsed.fragment - url = parsed.geturl() - - # Facilitate relative 'location' headers, as allowed by RFC 7231. - # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') - # Compliant with RFC3986, we percent encode the url. - if not parsed.netloc: - url = urljoin(resp.url, requote_uri(url)) - else: - url = requote_uri(url) - - prepared_request.url = to_native_string(url) - - self.rebuild_method(prepared_request, resp) - - # https://github.com/requests/requests/issues/1084 - if resp.status_code not in (codes.temporary_redirect, codes.permanent_redirect): - # https://github.com/requests/requests/issues/3490 - purged_headers = ('Content-Length', 'Content-Type', 'Transfer-Encoding') - for header in purged_headers: - prepared_request.headers.pop(header, None) - prepared_request.body = None - - headers = prepared_request.headers - try: - del headers['Cookie'] - except KeyError: - pass - - # Extract any cookies sent on the response to the cookiejar - # in the new request. Because we've mutated our copied prepared - # request, use the old one that we haven't yet touched. - extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) - merge_cookies(prepared_request._cookies, self.cookies) - prepared_request.prepare_cookies(prepared_request._cookies) - - # Rebuild auth and proxy information. - proxies = self.rebuild_proxies(prepared_request, proxies) - self.rebuild_auth(prepared_request, resp) - - # A failed tell() sets `_body_position` to `object()`. This non-None - # value ensures `rewindable` will be True, allowing us to raise an - # UnrewindableBodyError, instead of hanging the connection. - rewindable = ( - prepared_request._body_position is not None and - ('Content-Length' in headers or 'Transfer-Encoding' in headers) - ) - - # Attempt to rewind consumed file-like object. - if rewindable: - rewind_body(prepared_request) - - # Override the original request. - req = prepared_request - - if yield_requests: - yield req - else: - - resp = self.send( - req, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - allow_redirects=False, - **adapter_kwargs - ) - - extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) - - # extract redirect url, if any, for the next loop - url = self.get_redirect_target(resp) - yield resp - - def rebuild_auth(self, prepared_request, response): - """When being redirected we may want to strip authentication from the - request to avoid leaking credentials. This method intelligently removes - and reapplies authentication where possible to avoid credential loss. - """ - headers = prepared_request.headers - url = prepared_request.url - - if 'Authorization' in headers: - # If we get redirected to a new host, we should strip out any - # authentication headers. - original_parsed = urlparse(response.request.url) - redirect_parsed = urlparse(url) - - if (original_parsed.hostname != redirect_parsed.hostname): - del headers['Authorization'] - - # .netrc might have more auth for us on our new host. - new_auth = get_netrc_auth(url) if self.trust_env else None - if new_auth is not None: - prepared_request.prepare_auth(new_auth) - - return - - def rebuild_proxies(self, prepared_request, proxies): - """This method re-evaluates the proxy configuration by considering the - environment variables. If we are redirected to a URL covered by - NO_PROXY, we strip the proxy configuration. Otherwise, we set missing - proxy keys for this URL (in case they were stripped by a previous - redirect). - - This method also replaces the Proxy-Authorization header where - necessary. - - :rtype: dict - """ - proxies = proxies if proxies is not None else {} - headers = prepared_request.headers - url = prepared_request.url - scheme = urlparse(url).scheme - new_proxies = proxies.copy() - no_proxy = proxies.get('no_proxy') - - bypass_proxy = should_bypass_proxies(url, no_proxy=no_proxy) - if self.trust_env and not bypass_proxy: - environ_proxies = get_environ_proxies(url, no_proxy=no_proxy) - - proxy = environ_proxies.get(scheme, environ_proxies.get('all')) - - if proxy: - new_proxies.setdefault(scheme, proxy) - - if 'Proxy-Authorization' in headers: - del headers['Proxy-Authorization'] - - try: - username, password = get_auth_from_url(new_proxies[scheme]) - except KeyError: - username, password = None, None - - if username and password: - headers['Proxy-Authorization'] = _basic_auth_str(username, password) - - return new_proxies - - def rebuild_method(self, prepared_request, response): - """When being redirected we may want to change the method of the request - based on certain specs or browser behavior. - """ - method = prepared_request.method - - # http://tools.ietf.org/html/rfc7231#section-6.4.4 - if response.status_code == codes.see_other and method != 'HEAD': - method = 'GET' - - # Do what the browsers do, despite standards... - # First, turn 302s into GETs. - if response.status_code == codes.found and method != 'HEAD': - method = 'GET' - - # Second, if a POST is responded to with a 301, turn it into a GET. - # This bizarre behaviour is explained in Issue 1704. - if response.status_code == codes.moved and method == 'POST': - method = 'GET' - - prepared_request.method = method - - -class Session(SessionRedirectMixin): - """A Requests session. - - Provides cookie persistence, connection-pooling, and configuration. - - Basic Usage:: - - >>> import requests - >>> s = requests.Session() - >>> s.get('http://httpbin.org/get') - <Response [200]> - - Or as a context manager:: - - >>> with requests.Session() as s: - >>> s.get('http://httpbin.org/get') - <Response [200]> - """ - - __attrs__ = [ - 'headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify', - 'cert', 'prefetch', 'adapters', 'stream', 'trust_env', - 'max_redirects', - ] - - def __init__(self): - - #: A case-insensitive dictionary of headers to be sent on each - #: :class:`Request <Request>` sent from this - #: :class:`Session <Session>`. - self.headers = default_headers() - - #: Default Authentication tuple or object to attach to - #: :class:`Request <Request>`. - self.auth = None - - #: Dictionary mapping protocol or protocol and host to the URL of the proxy - #: (e.g. {'http': 'foo.bar:3128', 'http://host.name': 'foo.bar:4012'}) to - #: be used on each :class:`Request <Request>`. - self.proxies = {} - - #: Event-handling hooks. - self.hooks = default_hooks() - - #: Dictionary of querystring data to attach to each - #: :class:`Request <Request>`. The dictionary values may be lists for - #: representing multivalued query parameters. - self.params = {} - - #: Stream response content default. - self.stream = False - - #: SSL Verification default. - self.verify = True - - #: SSL client certificate default, if String, path to ssl client - #: cert file (.pem). If Tuple, ('cert', 'key') pair. - self.cert = None - - #: Maximum number of redirects allowed. If the request exceeds this - #: limit, a :class:`TooManyRedirects` exception is raised. - #: This defaults to requests.models.DEFAULT_REDIRECT_LIMIT, which is - #: 30. - self.max_redirects = DEFAULT_REDIRECT_LIMIT - - #: Trust environment settings for proxy configuration, default - #: authentication and similar. - self.trust_env = True - - #: A CookieJar containing all currently outstanding cookies set on this - #: session. By default it is a - #: :class:`RequestsCookieJar <requests.cookies.RequestsCookieJar>`, but - #: may be any other ``cookielib.CookieJar`` compatible object. - self.cookies = cookiejar_from_dict({}) - - # Default connection adapters. - self.adapters = OrderedDict() - self.mount('https://', HTTPAdapter()) - self.mount('http://', HTTPAdapter()) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def prepare_request(self, request): - """Constructs a :class:`PreparedRequest <PreparedRequest>` for - transmission and returns it. The :class:`PreparedRequest` has settings - merged from the :class:`Request <Request>` instance and those of the - :class:`Session`. - - :param request: :class:`Request` instance to prepare with this - session's settings. - :rtype: requests.PreparedRequest - """ - cookies = request.cookies or {} - - # Bootstrap CookieJar. - if not isinstance(cookies, cookielib.CookieJar): - cookies = cookiejar_from_dict(cookies) - - # Merge with session cookies - merged_cookies = merge_cookies( - merge_cookies(RequestsCookieJar(), self.cookies), cookies) - - # Set environment's basic authentication if not explicitly set. - auth = request.auth - if self.trust_env and not auth and not self.auth: - auth = get_netrc_auth(request.url) - - p = PreparedRequest() - p.prepare( - method=request.method.upper(), - url=request.url, - files=request.files, - data=request.data, - json=request.json, - headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict), - params=merge_setting(request.params, self.params), - auth=merge_setting(auth, self.auth), - cookies=merged_cookies, - hooks=merge_hooks(request.hooks, self.hooks), - ) - return p - - def request(self, method, url, - params=None, data=None, headers=None, cookies=None, files=None, - auth=None, timeout=None, allow_redirects=True, proxies=None, - hooks=None, stream=None, verify=None, cert=None, json=None): - """Constructs a :class:`Request <Request>`, prepares it and sends it. - Returns :class:`Response <Response>` object. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query - string for the :class:`Request`. - :param data: (optional) Dictionary, bytes, or file-like object to send - in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the - :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the - :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the - :class:`Request`. - :param files: (optional) Dictionary of ``'filename': file-like-objects`` - for multipart encoding upload. - :param auth: (optional) Auth tuple or callable to enable - Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a :ref:`(connect timeout, - read timeout) <timeouts>` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Set to True by default. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol or protocol and - hostname to the URL of the proxy. - :param stream: (optional) whether to immediately download the response - content. Defaults to ``False``. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param cert: (optional) if String, path to ssl client cert file (.pem). - If Tuple, ('cert', 'key') pair. - :rtype: requests.Response - """ - # Create the Request. - req = Request( - method=method.upper(), - url=url, - headers=headers, - files=files, - data=data or {}, - json=json, - params=params or {}, - auth=auth, - cookies=cookies, - hooks=hooks, - ) - prep = self.prepare_request(req) - - proxies = proxies or {} - - settings = self.merge_environment_settings( - prep.url, proxies, stream, verify, cert - ) - - # Send the request. - send_kwargs = { - 'timeout': timeout, - 'allow_redirects': allow_redirects, - } - send_kwargs.update(settings) - resp = self.send(prep, **send_kwargs) - - return resp - - def get(self, url, **kwargs): - r"""Sends a GET request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return self.request('GET', url, **kwargs) - - def options(self, url, **kwargs): - r"""Sends a OPTIONS request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return self.request('OPTIONS', url, **kwargs) - - def head(self, url, **kwargs): - r"""Sends a HEAD request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', False) - return self.request('HEAD', url, **kwargs) - - def post(self, url, data=None, json=None, **kwargs): - r"""Sends a POST request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('POST', url, data=data, json=json, **kwargs) - - def put(self, url, data=None, **kwargs): - r"""Sends a PUT request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('PUT', url, data=data, **kwargs) - - def patch(self, url, data=None, **kwargs): - r"""Sends a PATCH request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('PATCH', url, data=data, **kwargs) - - def delete(self, url, **kwargs): - r"""Sends a DELETE request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :rtype: requests.Response - """ - - return self.request('DELETE', url, **kwargs) - - def send(self, request, **kwargs): - """Send a given PreparedRequest. - - :rtype: requests.Response - """ - # Set defaults that the hooks can utilize to ensure they always have - # the correct parameters to reproduce the previous request. - kwargs.setdefault('stream', self.stream) - kwargs.setdefault('verify', self.verify) - kwargs.setdefault('cert', self.cert) - kwargs.setdefault('proxies', self.proxies) - - # It's possible that users might accidentally send a Request object. - # Guard against that specific failure case. - if isinstance(request, Request): - raise ValueError('You can only send PreparedRequests.') - - # Set up variables needed for resolve_redirects and dispatching of hooks - allow_redirects = kwargs.pop('allow_redirects', True) - stream = kwargs.get('stream') - hooks = request.hooks - - # Get the appropriate adapter to use - adapter = self.get_adapter(url=request.url) - - # Start time (approximately) of the request - start = preferred_clock() - - # Send the request - r = adapter.send(request, **kwargs) - - # Total elapsed time of the request (approximately) - elapsed = preferred_clock() - start - r.elapsed = timedelta(seconds=elapsed) - - # Response manipulation hooks - r = dispatch_hook('response', hooks, r, **kwargs) - - # Persist cookies - if r.history: - - # If the hooks create history then we want those cookies too - for resp in r.history: - extract_cookies_to_jar(self.cookies, resp.request, resp.raw) - - extract_cookies_to_jar(self.cookies, request, r.raw) - - # Redirect resolving generator. - gen = self.resolve_redirects(r, request, **kwargs) - - # Resolve redirects if allowed. - history = [resp for resp in gen] if allow_redirects else [] - - # Shuffle things around if there's history. - if history: - # Insert the first (original) request at the start - history.insert(0, r) - # Get the last request made - r = history.pop() - r.history = history - - # If redirects aren't being followed, store the response on the Request for Response.next(). - if not allow_redirects: - try: - r._next = next(self.resolve_redirects(r, request, yield_requests=True, **kwargs)) - except StopIteration: - pass - - if not stream: - r.content - - return r - - def merge_environment_settings(self, url, proxies, stream, verify, cert): - """ - Check the environment and merge it with some settings. - - :rtype: dict - """ - # Gather clues from the surrounding environment. - if self.trust_env: - # Set environment's proxies. - no_proxy = proxies.get('no_proxy') if proxies is not None else None - env_proxies = get_environ_proxies(url, no_proxy=no_proxy) - for (k, v) in env_proxies.items(): - proxies.setdefault(k, v) - - # Look for requests environment configuration and be compatible - # with cURL. - if verify is True or verify is None: - verify = (os.environ.get('REQUESTS_CA_BUNDLE') or - os.environ.get('CURL_CA_BUNDLE')) - - # Merge all the kwargs. - proxies = merge_setting(proxies, self.proxies) - stream = merge_setting(stream, self.stream) - verify = merge_setting(verify, self.verify) - cert = merge_setting(cert, self.cert) - - return {'verify': verify, 'proxies': proxies, 'stream': stream, - 'cert': cert} - - def get_adapter(self, url): - """ - Returns the appropriate connection adapter for the given URL. - - :rtype: requests.adapters.BaseAdapter - """ - for (prefix, adapter) in self.adapters.items(): - - if url.lower().startswith(prefix.lower()): - return adapter - - # Nothing matches :-/ - raise InvalidSchema("No connection adapters were found for '%s'" % url) - - def close(self): - """Closes all adapters and as such the session""" - for v in self.adapters.values(): - v.close() - - def mount(self, prefix, adapter): - """Registers a connection adapter to a prefix. - - Adapters are sorted in descending order by prefix length. - """ - self.adapters[prefix] = adapter - keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] - - for key in keys_to_move: - self.adapters[key] = self.adapters.pop(key) - - def __getstate__(self): - state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__) - return state - - def __setstate__(self, state): - for attr, value in state.items(): - setattr(self, attr, value) - - -def session(): - """ - Returns a :class:`Session` for context-management. - - :rtype: Session - """ - - return Session() diff --git a/venv/lib/python3.6/site-packages/requests/status_codes.py b/venv/lib/python3.6/site-packages/requests/status_codes.py deleted file mode 100644 index ff462c6..0000000 --- a/venv/lib/python3.6/site-packages/requests/status_codes.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -The ``codes`` object defines a mapping from common names for HTTP statuses -to their numerical codes, accessible either as attributes or as dictionary -items. - ->>> requests.codes['temporary_redirect'] -307 ->>> requests.codes.teapot -418 ->>> requests.codes['\o/'] -200 - -Some codes have multiple names, and both upper- and lower-case versions of -the names are allowed. For example, ``codes.ok``, ``codes.OK``, and -``codes.okay`` all correspond to the HTTP status code 200. -""" - -from .structures import LookupDict - -_codes = { - - # Informational. - 100: ('continue',), - 101: ('switching_protocols',), - 102: ('processing',), - 103: ('checkpoint',), - 122: ('uri_too_long', 'request_uri_too_long'), - 200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'), - 201: ('created',), - 202: ('accepted',), - 203: ('non_authoritative_info', 'non_authoritative_information'), - 204: ('no_content',), - 205: ('reset_content', 'reset'), - 206: ('partial_content', 'partial'), - 207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'), - 208: ('already_reported',), - 226: ('im_used',), - - # Redirection. - 300: ('multiple_choices',), - 301: ('moved_permanently', 'moved', '\\o-'), - 302: ('found',), - 303: ('see_other', 'other'), - 304: ('not_modified',), - 305: ('use_proxy',), - 306: ('switch_proxy',), - 307: ('temporary_redirect', 'temporary_moved', 'temporary'), - 308: ('permanent_redirect', - 'resume_incomplete', 'resume',), # These 2 to be removed in 3.0 - - # Client Error. - 400: ('bad_request', 'bad'), - 401: ('unauthorized',), - 402: ('payment_required', 'payment'), - 403: ('forbidden',), - 404: ('not_found', '-o-'), - 405: ('method_not_allowed', 'not_allowed'), - 406: ('not_acceptable',), - 407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'), - 408: ('request_timeout', 'timeout'), - 409: ('conflict',), - 410: ('gone',), - 411: ('length_required',), - 412: ('precondition_failed', 'precondition'), - 413: ('request_entity_too_large',), - 414: ('request_uri_too_large',), - 415: ('unsupported_media_type', 'unsupported_media', 'media_type'), - 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'), - 417: ('expectation_failed',), - 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'), - 421: ('misdirected_request',), - 422: ('unprocessable_entity', 'unprocessable'), - 423: ('locked',), - 424: ('failed_dependency', 'dependency'), - 425: ('unordered_collection', 'unordered'), - 426: ('upgrade_required', 'upgrade'), - 428: ('precondition_required', 'precondition'), - 429: ('too_many_requests', 'too_many'), - 431: ('header_fields_too_large', 'fields_too_large'), - 444: ('no_response', 'none'), - 449: ('retry_with', 'retry'), - 450: ('blocked_by_windows_parental_controls', 'parental_controls'), - 451: ('unavailable_for_legal_reasons', 'legal_reasons'), - 499: ('client_closed_request',), - - # Server Error. - 500: ('internal_server_error', 'server_error', '/o\\', '✗'), - 501: ('not_implemented',), - 502: ('bad_gateway',), - 503: ('service_unavailable', 'unavailable'), - 504: ('gateway_timeout',), - 505: ('http_version_not_supported', 'http_version'), - 506: ('variant_also_negotiates',), - 507: ('insufficient_storage',), - 509: ('bandwidth_limit_exceeded', 'bandwidth'), - 510: ('not_extended',), - 511: ('network_authentication_required', 'network_auth', 'network_authentication'), -} - -codes = LookupDict(name='status_codes') - -def _init(): - for code, titles in _codes.items(): - for title in titles: - setattr(codes, title, code) - if not title.startswith(('\\', '/')): - setattr(codes, title.upper(), code) - - def doc(code): - names = ', '.join('``%s``' % n for n in _codes[code]) - return '* %d: %s' % (code, names) - - global __doc__ - __doc__ = (__doc__ + '\n' + - '\n'.join(doc(code) for code in sorted(_codes)) - if __doc__ is not None else None) - -_init() diff --git a/venv/lib/python3.6/site-packages/requests/structures.py b/venv/lib/python3.6/site-packages/requests/structures.py deleted file mode 100644 index da930e2..0000000 --- a/venv/lib/python3.6/site-packages/requests/structures.py +++ /dev/null @@ -1,103 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.structures -~~~~~~~~~~~~~~~~~~~ - -Data structures that power Requests. -""" - -from .compat import OrderedDict, Mapping, MutableMapping - - -class CaseInsensitiveDict(MutableMapping): - """A case-insensitive ``dict``-like object. - - Implements all methods and operations of - ``MutableMapping`` as well as dict's ``copy``. Also - provides ``lower_items``. - - All keys are expected to be strings. The structure remembers the - case of the last key to be set, and ``iter(instance)``, - ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` - will contain case-sensitive keys. However, querying and contains - testing is case insensitive:: - - cid = CaseInsensitiveDict() - cid['Accept'] = 'application/json' - cid['aCCEPT'] == 'application/json' # True - list(cid) == ['Accept'] # True - - For example, ``headers['content-encoding']`` will return the - value of a ``'Content-Encoding'`` response header, regardless - of how the header name was originally stored. - - If the constructor, ``.update``, or equality comparison - operations are given keys that have equal ``.lower()``s, the - behavior is undefined. - """ - - def __init__(self, data=None, **kwargs): - self._store = OrderedDict() - if data is None: - data = {} - self.update(data, **kwargs) - - def __setitem__(self, key, value): - # Use the lowercased key for lookups, but store the actual - # key alongside the value. - self._store[key.lower()] = (key, value) - - def __getitem__(self, key): - return self._store[key.lower()][1] - - def __delitem__(self, key): - del self._store[key.lower()] - - def __iter__(self): - return (casedkey for casedkey, mappedvalue in self._store.values()) - - def __len__(self): - return len(self._store) - - def lower_items(self): - """Like iteritems(), but with all lowercase keys.""" - return ( - (lowerkey, keyval[1]) - for (lowerkey, keyval) - in self._store.items() - ) - - def __eq__(self, other): - if isinstance(other, Mapping): - other = CaseInsensitiveDict(other) - else: - return NotImplemented - # Compare insensitively - return dict(self.lower_items()) == dict(other.lower_items()) - - # Copy is required - def copy(self): - return CaseInsensitiveDict(self._store.values()) - - def __repr__(self): - return str(dict(self.items())) - - -class LookupDict(dict): - """Dictionary lookup object.""" - - def __init__(self, name=None): - self.name = name - super(LookupDict, self).__init__() - - def __repr__(self): - return '<lookup \'%s\'>' % (self.name) - - def __getitem__(self, key): - # We allow fall-through here, so values default to None - - return self.__dict__.get(key, None) - - def get(self, key, default=None): - return self.__dict__.get(key, default) diff --git a/venv/lib/python3.6/site-packages/requests/utils.py b/venv/lib/python3.6/site-packages/requests/utils.py deleted file mode 100644 index 431f6be..0000000 --- a/venv/lib/python3.6/site-packages/requests/utils.py +++ /dev/null @@ -1,976 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.utils -~~~~~~~~~~~~~~ - -This module provides utility functions that are used within Requests -that are also useful for external consumption. -""" - -import codecs -import contextlib -import io -import os -import re -import socket -import struct -import sys -import tempfile -import warnings -import zipfile - -from .__version__ import __version__ -from . import certs -# to_native_string is unused here, but imported here for backwards compatibility -from ._internal_utils import to_native_string -from .compat import parse_http_list as _parse_list_header -from .compat import ( - quote, urlparse, bytes, str, OrderedDict, unquote, getproxies, - proxy_bypass, urlunparse, basestring, integer_types, is_py3, - proxy_bypass_environment, getproxies_environment, Mapping) -from .cookies import cookiejar_from_dict -from .structures import CaseInsensitiveDict -from .exceptions import ( - InvalidURL, InvalidHeader, FileModeWarning, UnrewindableBodyError) - -NETRC_FILES = ('.netrc', '_netrc') - -DEFAULT_CA_BUNDLE_PATH = certs.where() - - -if sys.platform == 'win32': - # provide a proxy_bypass version on Windows without DNS lookups - - def proxy_bypass_registry(host): - try: - if is_py3: - import winreg - else: - import _winreg as winreg - except ImportError: - return False - - try: - internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER, - r'Software\Microsoft\Windows\CurrentVersion\Internet Settings') - # ProxyEnable could be REG_SZ or REG_DWORD, normalizing it - proxyEnable = int(winreg.QueryValueEx(internetSettings, - 'ProxyEnable')[0]) - # ProxyOverride is almost always a string - proxyOverride = winreg.QueryValueEx(internetSettings, - 'ProxyOverride')[0] - except OSError: - return False - if not proxyEnable or not proxyOverride: - return False - - # make a check value list from the registry entry: replace the - # '<local>' string by the localhost entry and the corresponding - # canonical entry. - proxyOverride = proxyOverride.split(';') - # now check if we match one of the registry values. - for test in proxyOverride: - if test == '<local>': - if '.' not in host: - return True - test = test.replace(".", r"\.") # mask dots - test = test.replace("*", r".*") # change glob sequence - test = test.replace("?", r".") # change glob char - if re.match(test, host, re.I): - return True - return False - - def proxy_bypass(host): # noqa - """Return True, if the host should be bypassed. - - Checks proxy settings gathered from the environment, if specified, - or the registry. - """ - if getproxies_environment(): - return proxy_bypass_environment(host) - else: - return proxy_bypass_registry(host) - - -def dict_to_sequence(d): - """Returns an internal sequence dictionary update.""" - - if hasattr(d, 'items'): - d = d.items() - - return d - - -def super_len(o): - total_length = None - current_position = 0 - - if hasattr(o, '__len__'): - total_length = len(o) - - elif hasattr(o, 'len'): - total_length = o.len - - elif hasattr(o, 'fileno'): - try: - fileno = o.fileno() - except io.UnsupportedOperation: - pass - else: - total_length = os.fstat(fileno).st_size - - # Having used fstat to determine the file length, we need to - # confirm that this file was opened up in binary mode. - if 'b' not in o.mode: - warnings.warn(( - "Requests has determined the content-length for this " - "request using the binary size of the file: however, the " - "file has been opened in text mode (i.e. without the 'b' " - "flag in the mode). This may lead to an incorrect " - "content-length. In Requests 3.0, support will be removed " - "for files in text mode."), - FileModeWarning - ) - - if hasattr(o, 'tell'): - try: - current_position = o.tell() - except (OSError, IOError): - # This can happen in some weird situations, such as when the file - # is actually a special file descriptor like stdin. In this - # instance, we don't know what the length is, so set it to zero and - # let requests chunk it instead. - if total_length is not None: - current_position = total_length - else: - if hasattr(o, 'seek') and total_length is None: - # StringIO and BytesIO have seek but no useable fileno - try: - # seek to end of file - o.seek(0, 2) - total_length = o.tell() - - # seek back to current position to support - # partially read file-like objects - o.seek(current_position or 0) - except (OSError, IOError): - total_length = 0 - - if total_length is None: - total_length = 0 - - return max(0, total_length - current_position) - - -def get_netrc_auth(url, raise_errors=False): - """Returns the Requests tuple auth for a given url from netrc.""" - - try: - from netrc import netrc, NetrcParseError - - netrc_path = None - - for f in NETRC_FILES: - try: - loc = os.path.expanduser('~/{0}'.format(f)) - except KeyError: - # os.path.expanduser can fail when $HOME is undefined and - # getpwuid fails. See http://bugs.python.org/issue20164 & - # https://github.com/requests/requests/issues/1846 - return - - if os.path.exists(loc): - netrc_path = loc - break - - # Abort early if there isn't one. - if netrc_path is None: - return - - ri = urlparse(url) - - # Strip port numbers from netloc. This weird `if...encode`` dance is - # used for Python 3.2, which doesn't support unicode literals. - splitstr = b':' - if isinstance(url, str): - splitstr = splitstr.decode('ascii') - host = ri.netloc.split(splitstr)[0] - - try: - _netrc = netrc(netrc_path).authenticators(host) - if _netrc: - # Return with login / password - login_i = (0 if _netrc[0] else 1) - return (_netrc[login_i], _netrc[2]) - except (NetrcParseError, IOError): - # If there was a parsing error or a permissions issue reading the file, - # we'll just skip netrc auth unless explicitly asked to raise errors. - if raise_errors: - raise - - # AppEngine hackiness. - except (ImportError, AttributeError): - pass - - -def guess_filename(obj): - """Tries to guess the filename of the given object.""" - name = getattr(obj, 'name', None) - if (name and isinstance(name, basestring) and name[0] != '<' and - name[-1] != '>'): - return os.path.basename(name) - - -def extract_zipped_paths(path): - """Replace nonexistent paths that look like they refer to a member of a zip - archive with the location of an extracted copy of the target, or else - just return the provided path unchanged. - """ - if os.path.exists(path): - # this is already a valid path, no need to do anything further - return path - - # find the first valid part of the provided path and treat that as a zip archive - # assume the rest of the path is the name of a member in the archive - archive, member = os.path.split(path) - while archive and not os.path.exists(archive): - archive, prefix = os.path.split(archive) - member = '/'.join([prefix, member]) - - if not zipfile.is_zipfile(archive): - return path - - zip_file = zipfile.ZipFile(archive) - if member not in zip_file.namelist(): - return path - - # we have a valid zip archive and a valid member of that archive - tmp = tempfile.gettempdir() - extracted_path = os.path.join(tmp, *member.split('/')) - if not os.path.exists(extracted_path): - extracted_path = zip_file.extract(member, path=tmp) - - return extracted_path - - -def from_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. Unless it can not be represented as such, return an - OrderedDict, e.g., - - :: - - >>> from_key_val_list([('key', 'val')]) - OrderedDict([('key', 'val')]) - >>> from_key_val_list('string') - ValueError: need more than 1 value to unpack - >>> from_key_val_list({'key': 'val'}) - OrderedDict([('key', 'val')]) - - :rtype: OrderedDict - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError('cannot encode objects that are not 2-tuples') - - return OrderedDict(value) - - -def to_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. If it can be, return a list of tuples, e.g., - - :: - - >>> to_key_val_list([('key', 'val')]) - [('key', 'val')] - >>> to_key_val_list({'key': 'val'}) - [('key', 'val')] - >>> to_key_val_list('string') - ValueError: cannot encode objects that are not 2-tuples. - - :rtype: list - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError('cannot encode objects that are not 2-tuples') - - if isinstance(value, Mapping): - value = value.items() - - return list(value) - - -# From mitsuhiko/werkzeug (used with permission). -def parse_list_header(value): - """Parse lists as described by RFC 2068 Section 2. - - In particular, parse comma-separated lists where the elements of - the list may include quoted-strings. A quoted-string could - contain a comma. A non-quoted string could have quotes in the - middle. Quotes are removed automatically after parsing. - - It basically works like :func:`parse_set_header` just that items - may appear multiple times and case sensitivity is preserved. - - The return value is a standard :class:`list`: - - >>> parse_list_header('token, "quoted value"') - ['token', 'quoted value'] - - To create a header from the :class:`list` again, use the - :func:`dump_header` function. - - :param value: a string with a list header. - :return: :class:`list` - :rtype: list - """ - result = [] - for item in _parse_list_header(value): - if item[:1] == item[-1:] == '"': - item = unquote_header_value(item[1:-1]) - result.append(item) - return result - - -# From mitsuhiko/werkzeug (used with permission). -def parse_dict_header(value): - """Parse lists of key, value pairs as described by RFC 2068 Section 2 and - convert them into a python dict: - - >>> d = parse_dict_header('foo="is a fish", bar="as well"') - >>> type(d) is dict - True - >>> sorted(d.items()) - [('bar', 'as well'), ('foo', 'is a fish')] - - If there is no value for a key it will be `None`: - - >>> parse_dict_header('key_without_value') - {'key_without_value': None} - - To create a header from the :class:`dict` again, use the - :func:`dump_header` function. - - :param value: a string with a dict header. - :return: :class:`dict` - :rtype: dict - """ - result = {} - for item in _parse_list_header(value): - if '=' not in item: - result[item] = None - continue - name, value = item.split('=', 1) - if value[:1] == value[-1:] == '"': - value = unquote_header_value(value[1:-1]) - result[name] = value - return result - - -# From mitsuhiko/werkzeug (used with permission). -def unquote_header_value(value, is_filename=False): - r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). - This does not use the real unquoting but what browsers are actually - using for quoting. - - :param value: the header value to unquote. - :rtype: str - """ - if value and value[0] == value[-1] == '"': - # this is not the real unquoting, but fixing this so that the - # RFC is met will result in bugs with internet explorer and - # probably some other browsers as well. IE for example is - # uploading files with "C:\foo\bar.txt" as filename - value = value[1:-1] - - # if this is a filename and the starting characters look like - # a UNC path, then just return the value without quotes. Using the - # replace sequence below on a UNC path has the effect of turning - # the leading double slash into a single slash and then - # _fix_ie_filename() doesn't work correctly. See #458. - if not is_filename or value[:2] != '\\\\': - return value.replace('\\\\', '\\').replace('\\"', '"') - return value - - -def dict_from_cookiejar(cj): - """Returns a key/value dictionary from a CookieJar. - - :param cj: CookieJar object to extract cookies from. - :rtype: dict - """ - - cookie_dict = {} - - for cookie in cj: - cookie_dict[cookie.name] = cookie.value - - return cookie_dict - - -def add_dict_to_cookiejar(cj, cookie_dict): - """Returns a CookieJar from a key/value dictionary. - - :param cj: CookieJar to insert cookies into. - :param cookie_dict: Dict of key/values to insert into CookieJar. - :rtype: CookieJar - """ - - return cookiejar_from_dict(cookie_dict, cj) - - -def get_encodings_from_content(content): - """Returns encodings from given content string. - - :param content: bytestring to extract encodings from. - """ - warnings.warn(( - 'In requests 3.0, get_encodings_from_content will be removed. For ' - 'more information, please see the discussion on issue #2266. (This' - ' warning should only appear once.)'), - DeprecationWarning) - - charset_re = re.compile(r'<meta.*?charset=["\']*(.+?)["\'>]', flags=re.I) - pragma_re = re.compile(r'<meta.*?content=["\']*;?charset=(.+?)["\'>]', flags=re.I) - xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') - - return (charset_re.findall(content) + - pragma_re.findall(content) + - xml_re.findall(content)) - - -def _parse_content_type_header(header): - """Returns content type and parameters from given header - - :param header: string - :return: tuple containing content type and dictionary of - parameters - """ - - tokens = header.split(';') - content_type, params = tokens[0].strip(), tokens[1:] - params_dict = {} - items_to_strip = "\"' " - - for param in params: - param = param.strip() - if param: - key, value = param, True - index_of_equals = param.find("=") - if index_of_equals != -1: - key = param[:index_of_equals].strip(items_to_strip) - value = param[index_of_equals + 1:].strip(items_to_strip) - params_dict[key] = value - return content_type, params_dict - - -def get_encoding_from_headers(headers): - """Returns encodings from given HTTP Header Dict. - - :param headers: dictionary to extract encoding from. - :rtype: str - """ - - content_type = headers.get('content-type') - - if not content_type: - return None - - content_type, params = _parse_content_type_header(content_type) - - if 'charset' in params: - return params['charset'].strip("'\"") - - if 'text' in content_type: - return 'ISO-8859-1' - - -def stream_decode_response_unicode(iterator, r): - """Stream decodes a iterator.""" - - if r.encoding is None: - for item in iterator: - yield item - return - - decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace') - for chunk in iterator: - rv = decoder.decode(chunk) - if rv: - yield rv - rv = decoder.decode(b'', final=True) - if rv: - yield rv - - -def iter_slices(string, slice_length): - """Iterate over slices of a string.""" - pos = 0 - if slice_length is None or slice_length <= 0: - slice_length = len(string) - while pos < len(string): - yield string[pos:pos + slice_length] - pos += slice_length - - -def get_unicode_from_response(r): - """Returns the requested content back in unicode. - - :param r: Response object to get unicode content from. - - Tried: - - 1. charset from content-type - 2. fall back and replace all unicode characters - - :rtype: str - """ - warnings.warn(( - 'In requests 3.0, get_unicode_from_response will be removed. For ' - 'more information, please see the discussion on issue #2266. (This' - ' warning should only appear once.)'), - DeprecationWarning) - - tried_encodings = [] - - # Try charset from content-type - encoding = get_encoding_from_headers(r.headers) - - if encoding: - try: - return str(r.content, encoding) - except UnicodeError: - tried_encodings.append(encoding) - - # Fall back: - try: - return str(r.content, encoding, errors='replace') - except TypeError: - return r.content - - -# The unreserved URI characters (RFC 3986) -UNRESERVED_SET = frozenset( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + "0123456789-._~") - - -def unquote_unreserved(uri): - """Un-escape any percent-escape sequences in a URI that are unreserved - characters. This leaves all reserved, illegal and non-ASCII bytes encoded. - - :rtype: str - """ - parts = uri.split('%') - for i in range(1, len(parts)): - h = parts[i][0:2] - if len(h) == 2 and h.isalnum(): - try: - c = chr(int(h, 16)) - except ValueError: - raise InvalidURL("Invalid percent-escape sequence: '%s'" % h) - - if c in UNRESERVED_SET: - parts[i] = c + parts[i][2:] - else: - parts[i] = '%' + parts[i] - else: - parts[i] = '%' + parts[i] - return ''.join(parts) - - -def requote_uri(uri): - """Re-quote the given URI. - - This function passes the given URI through an unquote/quote cycle to - ensure that it is fully and consistently quoted. - - :rtype: str - """ - safe_with_percent = "!#$%&'()*+,/:;=?@[]~" - safe_without_percent = "!#$&'()*+,/:;=?@[]~" - try: - # Unquote only the unreserved characters - # Then quote only illegal characters (do not quote reserved, - # unreserved, or '%') - return quote(unquote_unreserved(uri), safe=safe_with_percent) - except InvalidURL: - # We couldn't unquote the given URI, so let's try quoting it, but - # there may be unquoted '%'s in the URI. We need to make sure they're - # properly quoted so they do not cause issues elsewhere. - return quote(uri, safe=safe_without_percent) - - -def address_in_network(ip, net): - """This function allows you to check if an IP belongs to a network subnet - - Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 - returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 - - :rtype: bool - """ - ipaddr = struct.unpack('=L', socket.inet_aton(ip))[0] - netaddr, bits = net.split('/') - netmask = struct.unpack('=L', socket.inet_aton(dotted_netmask(int(bits))))[0] - network = struct.unpack('=L', socket.inet_aton(netaddr))[0] & netmask - return (ipaddr & netmask) == (network & netmask) - - -def dotted_netmask(mask): - """Converts mask from /xx format to xxx.xxx.xxx.xxx - - Example: if mask is 24 function returns 255.255.255.0 - - :rtype: str - """ - bits = 0xffffffff ^ (1 << 32 - mask) - 1 - return socket.inet_ntoa(struct.pack('>I', bits)) - - -def is_ipv4_address(string_ip): - """ - :rtype: bool - """ - try: - socket.inet_aton(string_ip) - except socket.error: - return False - return True - - -def is_valid_cidr(string_network): - """ - Very simple check of the cidr format in no_proxy variable. - - :rtype: bool - """ - if string_network.count('/') == 1: - try: - mask = int(string_network.split('/')[1]) - except ValueError: - return False - - if mask < 1 or mask > 32: - return False - - try: - socket.inet_aton(string_network.split('/')[0]) - except socket.error: - return False - else: - return False - return True - - -@contextlib.contextmanager -def set_environ(env_name, value): - """Set the environment variable 'env_name' to 'value' - - Save previous value, yield, and then restore the previous value stored in - the environment variable 'env_name'. - - If 'value' is None, do nothing""" - value_changed = value is not None - if value_changed: - old_value = os.environ.get(env_name) - os.environ[env_name] = value - try: - yield - finally: - if value_changed: - if old_value is None: - del os.environ[env_name] - else: - os.environ[env_name] = old_value - - -def should_bypass_proxies(url, no_proxy): - """ - Returns whether we should bypass proxies or not. - - :rtype: bool - """ - # Prioritize lowercase environment variables over uppercase - # to keep a consistent behaviour with other http projects (curl, wget). - get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper()) - - # First check whether no_proxy is defined. If it is, check that the URL - # we're getting isn't in the no_proxy list. - no_proxy_arg = no_proxy - if no_proxy is None: - no_proxy = get_proxy('no_proxy') - parsed = urlparse(url) - - if no_proxy: - # We need to check whether we match here. We need to see if we match - # the end of the hostname, both with and without the port. - no_proxy = ( - host for host in no_proxy.replace(' ', '').split(',') if host - ) - - if is_ipv4_address(parsed.hostname): - for proxy_ip in no_proxy: - if is_valid_cidr(proxy_ip): - if address_in_network(parsed.hostname, proxy_ip): - return True - elif parsed.hostname == proxy_ip: - # If no_proxy ip was defined in plain IP notation instead of cidr notation & - # matches the IP of the index - return True - else: - host_with_port = parsed.hostname - if parsed.port: - host_with_port += ':{0}'.format(parsed.port) - - for host in no_proxy: - if parsed.hostname.endswith(host) or host_with_port.endswith(host): - # The URL does match something in no_proxy, so we don't want - # to apply the proxies on this URL. - return True - - # If the system proxy settings indicate that this URL should be bypassed, - # don't proxy. - # The proxy_bypass function is incredibly buggy on OS X in early versions - # of Python 2.6, so allow this call to fail. Only catch the specific - # exceptions we've seen, though: this call failing in other ways can reveal - # legitimate problems. - with set_environ('no_proxy', no_proxy_arg): - try: - bypass = proxy_bypass(parsed.hostname) - except (TypeError, socket.gaierror): - bypass = False - - if bypass: - return True - - return False - - -def get_environ_proxies(url, no_proxy=None): - """ - Return a dict of environment proxies. - - :rtype: dict - """ - if should_bypass_proxies(url, no_proxy=no_proxy): - return {} - else: - return getproxies() - - -def select_proxy(url, proxies): - """Select a proxy for the url, if applicable. - - :param url: The url being for the request - :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs - """ - proxies = proxies or {} - urlparts = urlparse(url) - if urlparts.hostname is None: - return proxies.get(urlparts.scheme, proxies.get('all')) - - proxy_keys = [ - urlparts.scheme + '://' + urlparts.hostname, - urlparts.scheme, - 'all://' + urlparts.hostname, - 'all', - ] - proxy = None - for proxy_key in proxy_keys: - if proxy_key in proxies: - proxy = proxies[proxy_key] - break - - return proxy - - -def default_user_agent(name="python-requests"): - """ - Return a string representing the default user agent. - - :rtype: str - """ - return '%s/%s' % (name, __version__) - - -def default_headers(): - """ - :rtype: requests.structures.CaseInsensitiveDict - """ - return CaseInsensitiveDict({ - 'User-Agent': default_user_agent(), - 'Accept-Encoding': ', '.join(('gzip', 'deflate')), - 'Accept': '*/*', - 'Connection': 'keep-alive', - }) - - -def parse_header_links(value): - """Return a list of parsed link headers proxies. - - i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg" - - :rtype: list - """ - - links = [] - - replace_chars = ' \'"' - - value = value.strip(replace_chars) - if not value: - return links - - for val in re.split(', *<', value): - try: - url, params = val.split(';', 1) - except ValueError: - url, params = val, '' - - link = {'url': url.strip('<> \'"')} - - for param in params.split(';'): - try: - key, value = param.split('=') - except ValueError: - break - - link[key.strip(replace_chars)] = value.strip(replace_chars) - - links.append(link) - - return links - - -# Null bytes; no need to recreate these on each call to guess_json_utf -_null = '\x00'.encode('ascii') # encoding to ASCII for Python 3 -_null2 = _null * 2 -_null3 = _null * 3 - - -def guess_json_utf(data): - """ - :rtype: str - """ - # JSON always starts with two ASCII characters, so detection is as - # easy as counting the nulls and from their location and count - # determine the encoding. Also detect a BOM, if present. - sample = data[:4] - if sample in (codecs.BOM_UTF32_LE, codecs.BOM_UTF32_BE): - return 'utf-32' # BOM included - if sample[:3] == codecs.BOM_UTF8: - return 'utf-8-sig' # BOM included, MS style (discouraged) - if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): - return 'utf-16' # BOM included - nullcount = sample.count(_null) - if nullcount == 0: - return 'utf-8' - if nullcount == 2: - if sample[::2] == _null2: # 1st and 3rd are null - return 'utf-16-be' - if sample[1::2] == _null2: # 2nd and 4th are null - return 'utf-16-le' - # Did not detect 2 valid UTF-16 ascii-range characters - if nullcount == 3: - if sample[:3] == _null3: - return 'utf-32-be' - if sample[1:] == _null3: - return 'utf-32-le' - # Did not detect a valid UTF-32 ascii-range character - return None - - -def prepend_scheme_if_needed(url, new_scheme): - """Given a URL that may or may not have a scheme, prepend the given scheme. - Does not replace a present scheme with the one provided as an argument. - - :rtype: str - """ - scheme, netloc, path, params, query, fragment = urlparse(url, new_scheme) - - # urlparse is a finicky beast, and sometimes decides that there isn't a - # netloc present. Assume that it's being over-cautious, and switch netloc - # and path if urlparse decided there was no netloc. - if not netloc: - netloc, path = path, netloc - - return urlunparse((scheme, netloc, path, params, query, fragment)) - - -def get_auth_from_url(url): - """Given a url with authentication components, extract them into a tuple of - username,password. - - :rtype: (str,str) - """ - parsed = urlparse(url) - - try: - auth = (unquote(parsed.username), unquote(parsed.password)) - except (AttributeError, TypeError): - auth = ('', '') - - return auth - - -# Moved outside of function to avoid recompile every call -_CLEAN_HEADER_REGEX_BYTE = re.compile(b'^\\S[^\\r\\n]*$|^$') -_CLEAN_HEADER_REGEX_STR = re.compile(r'^\S[^\r\n]*$|^$') - - -def check_header_validity(header): - """Verifies that header value is a string which doesn't contain - leading whitespace or return characters. This prevents unintended - header injection. - - :param header: tuple, in the format (name, value). - """ - name, value = header - - if isinstance(value, bytes): - pat = _CLEAN_HEADER_REGEX_BYTE - else: - pat = _CLEAN_HEADER_REGEX_STR - try: - if not pat.match(value): - raise InvalidHeader("Invalid return character or leading space in header: %s" % name) - except TypeError: - raise InvalidHeader("Value for header {%s: %s} must be of type str or " - "bytes, not %s" % (name, value, type(value))) - - -def urldefragauth(url): - """ - Given a url remove the fragment and the authentication part. - - :rtype: str - """ - scheme, netloc, path, params, query, fragment = urlparse(url) - - # see func:`prepend_scheme_if_needed` - if not netloc: - netloc, path = path, netloc - - netloc = netloc.rsplit('@', 1)[-1] - - return urlunparse((scheme, netloc, path, params, query, '')) - - -def rewind_body(prepared_request): - """Move file pointer back to its recorded starting position - so it can be read again on redirect. - """ - body_seek = getattr(prepared_request.body, 'seek', None) - if body_seek is not None and isinstance(prepared_request._body_position, integer_types): - try: - body_seek(prepared_request._body_position) - except (IOError, OSError): - raise UnrewindableBodyError("An error occurred when rewinding request " - "body for redirect.") - else: - raise UnrewindableBodyError("Unable to rewind request body for redirect.") diff --git a/venv/lib/python3.6/site-packages/setuptools-39.1.0-py3.6.egg b/venv/lib/python3.6/site-packages/setuptools-39.1.0-py3.6.egg deleted file mode 100644 index b21d63b2df52df20813d1fc2d29caa375dbc2e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563197 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%0DvrH`b*o~p0=JY@)*QQl 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�^jtA9dZi8ZXrbWH&`Z-cUbZbMQa_S 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 diff --git a/venv/lib/python3.6/site-packages/setuptools.pth b/venv/lib/python3.6/site-packages/setuptools.pth deleted file mode 100644 index 355ae82..0000000 --- a/venv/lib/python3.6/site-packages/setuptools.pth +++ /dev/null @@ -1 +0,0 @@ -./setuptools-39.1.0-py3.6.egg diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/DESCRIPTION.rst deleted file mode 100644 index a711315..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,83 +0,0 @@ -Source Repository: https://github.com/chrissimpkins/shellescape - -Description ------------ - -The shellescape Python module defines the ``shellescape.quote()`` function that returns a shell-escaped version of a Python string. This is a backport of the ``shlex.quote()`` function from Python 3.4.3 that makes it accessible to users of Python 3 versions < 3.3 and all Python 2.x versions. - -quote(s) --------- - ->From the Python documentation: - -Return a shell-escaped version of the string s. The returned value is a string that can safely be used as one token in a shell command line, for cases where you cannot use a list. - -This idiom would be unsafe: - -.. code-block:: python - - >>> filename = 'somefile; rm -rf ~' - >>> command = 'ls -l {}'.format(filename) - >>> print(command) # executed by a shell: boom! - ls -l somefile; rm -rf ~ - - -``quote()`` lets you plug the security hole: - -.. code-block:: python - - >>> command = 'ls -l {}'.format(quote(filename)) - >>> print(command) - ls -l 'somefile; rm -rf ~' - >>> remote_command = 'ssh home {}'.format(quote(command)) - >>> print(remote_command) - ssh home 'ls -l '"'"'somefile; rm -rf ~'"'"'' - - -The quoting is compatible with UNIX shells and with ``shlex.split()``: - -.. code-block:: python - - >>> remote_command = split(remote_command) - >>> remote_command - ['ssh', 'home', "ls -l 'somefile; rm -rf ~'"] - >>> command = split(remote_command[-1]) - >>> command - ['ls', '-l', 'somefile; rm -rf ~'] - - -Usage ------ - -Include ``shellescape`` in your project setup.py file ``install_requires`` dependency definition list: - -.. code-block:: python - - setup( - ... - install_requires=['shellescape'], - ... - ) - - -Then import the ``quote`` function into your module(s) and use it as needed: - -.. code-block:: python - - #!/usr/bin/env python - # -*- coding: utf-8 -*- - - from shellescape import quote - - filename = "somefile; rm -rf ~" - escaped_shell_command = 'ls -l {}'.format(quote(filename)) - - -Issue Reporting ---------------- - -Issue reporting is available on the `GitHub repository <https://github.com/chrissimpkins/shellescape/issues>`_ - - - - diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/METADATA b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/METADATA deleted file mode 100644 index 87a6c68..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/METADATA +++ /dev/null @@ -1,105 +0,0 @@ -Metadata-Version: 2.0 -Name: shellescape -Version: 3.4.1 -Summary: Shell escape a string to safely use it as a token in a shell command (backport of Python shlex.quote for Python versions 2.x & < 3.3) -Home-page: https://github.com/chrissimpkins/shellescape -Author: Christopher Simpkins -Author-email: git.simpkins@gmail.com -License: MIT license -Keywords: shell,quote,escape,backport,command line,command,subprocess -Platform: any -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 -Classifier: Operating System :: MacOS :: MacOS X -Classifier: Operating System :: POSIX -Classifier: Operating System :: Unix -Classifier: Operating System :: Microsoft :: Windows - -Source Repository: https://github.com/chrissimpkins/shellescape - -Description ------------ - -The shellescape Python module defines the ``shellescape.quote()`` function that returns a shell-escaped version of a Python string. This is a backport of the ``shlex.quote()`` function from Python 3.4.3 that makes it accessible to users of Python 3 versions < 3.3 and all Python 2.x versions. - -quote(s) --------- - ->From the Python documentation: - -Return a shell-escaped version of the string s. The returned value is a string that can safely be used as one token in a shell command line, for cases where you cannot use a list. - -This idiom would be unsafe: - -.. code-block:: python - - >>> filename = 'somefile; rm -rf ~' - >>> command = 'ls -l {}'.format(filename) - >>> print(command) # executed by a shell: boom! - ls -l somefile; rm -rf ~ - - -``quote()`` lets you plug the security hole: - -.. code-block:: python - - >>> command = 'ls -l {}'.format(quote(filename)) - >>> print(command) - ls -l 'somefile; rm -rf ~' - >>> remote_command = 'ssh home {}'.format(quote(command)) - >>> print(remote_command) - ssh home 'ls -l '"'"'somefile; rm -rf ~'"'"'' - - -The quoting is compatible with UNIX shells and with ``shlex.split()``: - -.. code-block:: python - - >>> remote_command = split(remote_command) - >>> remote_command - ['ssh', 'home', "ls -l 'somefile; rm -rf ~'"] - >>> command = split(remote_command[-1]) - >>> command - ['ls', '-l', 'somefile; rm -rf ~'] - - -Usage ------ - -Include ``shellescape`` in your project setup.py file ``install_requires`` dependency definition list: - -.. code-block:: python - - setup( - ... - install_requires=['shellescape'], - ... - ) - - -Then import the ``quote`` function into your module(s) and use it as needed: - -.. code-block:: python - - #!/usr/bin/env python - # -*- coding: utf-8 -*- - - from shellescape import quote - - filename = "somefile; rm -rf ~" - escaped_shell_command = 'ls -l {}'.format(quote(filename)) - - -Issue Reporting ---------------- - -Issue reporting is available on the `GitHub repository <https://github.com/chrissimpkins/shellescape/issues>`_ - - - - diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/RECORD b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/RECORD deleted file mode 100644 index 3a4a8d3..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/RECORD +++ /dev/null @@ -1,13 +0,0 @@ -shellescape/__init__.py,sha256=J9YVVI_M1jo_ZSqrPd7v379OhwJdfj65HyyrDTIGwAU,71 -shellescape/main.py,sha256=lye2s6O1vNxsip3XQjL2Gm77P4yBxWLEiyVor08jgVM,445 -shellescape/settings.py,sha256=mFMflcPTepXT-K4i1KHvLcuqb8l7kxcPHk6gGLXjBAs,494 -shellescape-3.4.1.dist-info/DESCRIPTION.rst,sha256=aB9VBOy7sf9eMyrs4sg5c5uNPJmb49BcSd-n1jJwWeo,2068 -shellescape-3.4.1.dist-info/METADATA,sha256=noDkRegp4dg9nDBZNeFKVfnWGaxg8Hq1tk-5Ry5O1S0,3001 -shellescape-3.4.1.dist-info/pydist.json,sha256=4sXXfmbxvZraNOnVXGGwo8XXQmVfNIcXUsd-1oHKF6M,1029 -shellescape-3.4.1.dist-info/RECORD,, -shellescape-3.4.1.dist-info/top_level.txt,sha256=1nR_M9ikLI5pRQ3rfRuYjdDB9AjP3V9GAQITd5ohg98,12 -shellescape-3.4.1.dist-info/WHEEL,sha256=SXYYsi-y-rEGIva8sB8iKF6bAFD6YDhmqHX5hI3fc0o,110 -shellescape-3.4.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -shellescape/__pycache__/__init__.cpython-36.pyc,, -shellescape/__pycache__/settings.cpython-36.pyc,, -shellescape/__pycache__/main.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/WHEEL b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/WHEEL deleted file mode 100644 index f2ddc35..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.22.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/pydist.json b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/pydist.json deleted file mode 100644 index ad6b5d4..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/pydist.json +++ /dev/null @@ -1 +0,0 @@ -{"license": "MIT license", "document_names": {"description": "DESCRIPTION.rst"}, "name": "shellescape", "metadata_version": "2.0", "contacts": [{"role": "author", "email": "git.simpkins@gmail.com", "name": "Christopher Simpkins"}], "generator": "bdist_wheel (0.22.0)", "summary": "Shell escape a string to safely use it as a token in a shell command (backport of Python shlex.quote for Python versions 2.x & < 3.3)", "project_urls": {"Home": "https://github.com/chrissimpkins/shellescape"}, "platform": "any", "version": "3.4.1", "keywords": "shell,quote,escape,backport,command line,command,subprocess", "classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Natural Language :: English", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: Unix", "Operating System :: Microsoft :: Windows"]} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/top_level.txt deleted file mode 100644 index 0d98e3a..0000000 --- a/venv/lib/python3.6/site-packages/shellescape-3.4.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -shellescape diff --git a/venv/lib/python3.6/site-packages/shellescape/__init__.py b/venv/lib/python3.6/site-packages/shellescape/__init__.py deleted file mode 100644 index 00ba358..0000000 --- a/venv/lib/python3.6/site-packages/shellescape/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -from .main import quote diff --git a/venv/lib/python3.6/site-packages/shellescape/main.py b/venv/lib/python3.6/site-packages/shellescape/main.py deleted file mode 100644 index 0d06b7a..0000000 --- a/venv/lib/python3.6/site-packages/shellescape/main.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import re - - -_find_unsafe = re.compile(r'[a-zA-Z0-9_^@%+=:,./-]').search - - -def quote(s): - """Return a shell-escaped version of the string *s*.""" - if not s: - return "''" - - if _find_unsafe(s) is None: - return s - - # use single quotes, and put single quotes into double quotes - # the string $'b is then quoted as '$'"'"'b' - - return "'" + s.replace("'", "'\"'\"'") + "'" diff --git a/venv/lib/python3.6/site-packages/shellescape/settings.py b/venv/lib/python3.6/site-packages/shellescape/settings.py deleted file mode 100644 index c39e436..0000000 --- a/venv/lib/python3.6/site-packages/shellescape/settings.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# ------------------------------------------------------------------------------ -# Application Name -# ------------------------------------------------------------------------------ -app_name = 'shellescape' - -# ------------------------------------------------------------------------------ -# Version Number -# ------------------------------------------------------------------------------ -major_version = "3" -minor_version = "4" -patch_version = "1" - diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/DESCRIPTION.rst deleted file mode 100644 index 09c2c99..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. image:: http://img.shields.io/pypi/v/six.svg - :target: https://pypi.python.org/pypi/six - -.. image:: https://travis-ci.org/benjaminp/six.svg?branch=master - :target: https://travis-ci.org/benjaminp/six - -.. image:: http://img.shields.io/badge/license-MIT-green.svg - :target: https://github.com/benjaminp/six/blob/master/LICENSE - -Six is a Python 2 and 3 compatibility library. It provides utility functions -for smoothing over the differences between the Python versions with the goal of -writing Python code that is compatible on both Python versions. See the -documentation for more information on what is provided. - -Six supports every Python version since 2.6. It is contained in only one Python -file, so it can be easily copied into your project. (The copyright and license -notice must be retained.) - -Online documentation is at http://six.rtfd.org. - -Bugs can be reported to https://github.com/benjaminp/six. The code can also -be found there. - -For questions about six or porting in general, email the python-porting mailing -list: https://mail.python.org/mailman/listinfo/python-porting - - diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/METADATA b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/METADATA deleted file mode 100644 index 04e93dc..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/METADATA +++ /dev/null @@ -1,43 +0,0 @@ -Metadata-Version: 2.0 -Name: six -Version: 1.11.0 -Summary: Python 2 and 3 compatibility utilities -Home-page: http://pypi.python.org/pypi/six/ -Author: Benjamin Peterson -Author-email: benjamin@python.org -License: MIT -Platform: UNKNOWN -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 3 -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Topic :: Software Development :: Libraries -Classifier: Topic :: Utilities - -.. image:: http://img.shields.io/pypi/v/six.svg - :target: https://pypi.python.org/pypi/six - -.. image:: https://travis-ci.org/benjaminp/six.svg?branch=master - :target: https://travis-ci.org/benjaminp/six - -.. image:: http://img.shields.io/badge/license-MIT-green.svg - :target: https://github.com/benjaminp/six/blob/master/LICENSE - -Six is a Python 2 and 3 compatibility library. It provides utility functions -for smoothing over the differences between the Python versions with the goal of -writing Python code that is compatible on both Python versions. See the -documentation for more information on what is provided. - -Six supports every Python version since 2.6. It is contained in only one Python -file, so it can be easily copied into your project. (The copyright and license -notice must be retained.) - -Online documentation is at http://six.rtfd.org. - -Bugs can be reported to https://github.com/benjaminp/six. The code can also -be found there. - -For questions about six or porting in general, email the python-porting mailing -list: https://mail.python.org/mailman/listinfo/python-porting - - diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/RECORD b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/RECORD deleted file mode 100644 index 551ae0e..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/RECORD +++ /dev/null @@ -1,9 +0,0 @@ -six.py,sha256=A08MPb-Gi9FfInI3IW7HimXFmEH2T2IPzHgDvdhZPRA,30888 -six-1.11.0.dist-info/DESCRIPTION.rst,sha256=gPBoq1Ruc1QDWyLeXPlieL3F-XZz1_WXB-5gctCfg-A,1098 -six-1.11.0.dist-info/METADATA,sha256=06nZXaDYN3vnC-pmUjhkECYFH_a--ywvcPIpUdNeH1o,1607 -six-1.11.0.dist-info/RECORD,, -six-1.11.0.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110 -six-1.11.0.dist-info/metadata.json,sha256=ac3f4f7MpSHSnZ1SqhHCwsL7FGWMG0gBEb0hhS2eSSM,703 -six-1.11.0.dist-info/top_level.txt,sha256=_iVH_iYEtEXnD8nYGQYpYFUvkUW9sEO1GYbkeKSAais,4 -six-1.11.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -__pycache__/six.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/WHEEL b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/WHEEL deleted file mode 100644 index 8b6dd1b..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.29.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/metadata.json b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/metadata.json deleted file mode 100644 index 2c7fcea..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Topic :: Software Development :: Libraries", "Topic :: Utilities"], "extensions": {"python.details": {"contacts": [{"email": "benjamin@python.org", "name": "Benjamin Peterson", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://pypi.python.org/pypi/six/"}}}, "generator": "bdist_wheel (0.29.0)", "license": "MIT", "metadata_version": "2.0", "name": "six", "summary": "Python 2 and 3 compatibility utilities", "test_requires": [{"requires": ["pytest"]}], "version": "1.11.0"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/top_level.txt deleted file mode 100644 index ffe2fce..0000000 --- a/venv/lib/python3.6/site-packages/six-1.11.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -six diff --git a/venv/lib/python3.6/site-packages/six.py b/venv/lib/python3.6/site-packages/six.py deleted file mode 100644 index 6bf4fd3..0000000 --- a/venv/lib/python3.6/site-packages/six.py +++ /dev/null @@ -1,891 +0,0 @@ -# Copyright (c) 2010-2017 Benjamin Peterson -# -# 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. - -"""Utilities for writing code that runs on Python 2 and 3""" - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.11.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("getoutput", "commands", "subprocess"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("splitvalue", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), - MovedAttribute("parse_http_list", "urllib2", "urllib.request"), - MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - try: - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None - tb = None - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - try: - raise tp, value, tb - finally: - tb = None -""") - - -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - try: - if from_value is None: - raise value - raise value from from_value - finally: - value = None -""") -elif sys.version_info[:2] > (3, 2): - exec_("""def raise_from(value, from_value): - try: - raise value from from_value - finally: - value = None -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(type): - - def __new__(cls, name, this_bases, d): - return meta(name, bases, d) - - @classmethod - def __prepare__(cls, name, this_bases): - return meta.__prepare__(name, bases) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def python_2_unicode_compatible(klass): - """ - A decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/DESCRIPTION.rst b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/DESCRIPTION.rst deleted file mode 100755 index 5654511..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/DESCRIPTION.rst +++ /dev/null @@ -1,1040 +0,0 @@ -urllib3 -======= - -.. image:: https://travis-ci.org/urllib3/urllib3.svg?branch=master - :alt: Build status on Travis - :target: https://travis-ci.org/urllib3/urllib3 - -.. image:: https://img.shields.io/appveyor/ci/urllib3/urllib3/master.svg - :alt: Build status on AppVeyor - :target: https://ci.appveyor.com/project/urllib3/urllib3 - -.. image:: https://readthedocs.org/projects/urllib3/badge/?version=latest - :alt: Documentation Status - :target: https://urllib3.readthedocs.io/en/latest/ - -.. image:: https://img.shields.io/codecov/c/github/urllib3/urllib3.svg - :alt: Coverage Status - :target: https://codecov.io/gh/urllib3/urllib3 - -.. image:: https://img.shields.io/pypi/v/urllib3.svg?maxAge=86400 - :alt: PyPI version - :target: https://pypi.org/project/urllib3/ - -.. image:: https://www.bountysource.com/badge/tracker?tracker_id=192525 - :alt: Bountysource - :target: https://www.bountysource.com/trackers/192525-urllib3?utm_source=192525&utm_medium=shield&utm_campaign=TRACKER_BADGE - -.. image:: https://badges.gitter.im/python-urllib3/Lobby.svg - :alt: Gitter - :target: https://gitter.im/python-urllib3/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - -urllib3 is a powerful, *sanity-friendly* HTTP client for Python. Much of the -Python ecosystem already uses urllib3 and you should too. -urllib3 brings many critical features that are missing from the Python -standard libraries: - -- Thread safety. -- Connection pooling. -- Client-side SSL/TLS verification. -- File uploads with multipart encoding. -- Helpers for retrying requests and dealing with HTTP redirects. -- Support for gzip and deflate encoding. -- Proxy support for HTTP and SOCKS. -- 100% test coverage. - -urllib3 is powerful and easy to use:: - - >>> import urllib3 - >>> http = urllib3.PoolManager() - >>> r = http.request('GET', 'http://httpbin.org/robots.txt') - >>> r.status - 200 - >>> r.data - 'User-agent: *\nDisallow: /deny\n' - - -Installing ----------- - -urllib3 can be installed with `pip <https://pip.pypa.io>`_:: - - $ pip install urllib3 - -Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_:: - - $ git clone git://github.com/urllib3/urllib3.git - $ python setup.py install - - -Documentation -------------- - -urllib3 has usage and reference documentation at `urllib3.readthedocs.io <https://urllib3.readthedocs.io>`_. - - -Contributing ------------- - -urllib3 happily accepts contributions. Please see our -`contributing documentation <https://urllib3.readthedocs.io/en/latest/contributing.html>`_ -for some tips on getting started. - - -Maintainers ------------ - -- `@theacodes <https://github.com/theacodes>`_ (Thea Flowers) -- `@SethMichaelLarson <https://github.com/SethMichaelLarson>`_ (Seth M. Larson) -- `@haikuginger <https://github.com/haikuginger>`_ (Jesse Shapiro) -- `@lukasa <https://github.com/lukasa>`_ (Cory Benfield) -- `@sigmavirus24 <https://github.com/sigmavirus24>`_ (Ian Cordasco) -- `@shazow <https://github.com/shazow>`_ (Andrey Petrov) - -👋 - - -Sponsorship ------------ - -If your company benefits from this library, please consider `sponsoring its -development <https://urllib3.readthedocs.io/en/latest/contributing.html#sponsorship>`_. - -Sponsors include: - -- Google Cloud Platform (2018-present), sponsors `@theacodes <https://github.com/theacodes>`_'s work on an ongoing basis -- Abbott (2018-present), sponsors `@SethMichaelLarson <https://github.com/SethMichaelLarson>`_'s work on an ongoing basis -- Akamai (2017-present), sponsors `@haikuginger <https://github.com/haikuginger>`_'s work on an ongoing basis -- Hewlett Packard Enterprise (2016-2017), sponsored `@Lukasa’s <https://github.com/Lukasa>`_ work on urllib3 - - -Changes -======= - -1.23 (2018-06-04) ------------------ - -* Allow providing a list of headers to strip from requests when redirecting - to a different host. Defaults to the ``Authorization`` header. Different - headers can be set via ``Retry.remove_headers_on_redirect``. (Issue #1316) - -* Fix ``util.selectors._fileobj_to_fd`` to accept ``long`` (Issue #1247). - -* Dropped Python 3.3 support. (Pull #1242) - -* Put the connection back in the pool when calling stream() or read_chunked() on - a chunked HEAD response. (Issue #1234) - -* Fixed pyOpenSSL-specific ssl client authentication issue when clients - attempted to auth via certificate + chain (Issue #1060) - -* Add the port to the connectionpool connect print (Pull #1251) - -* Don't use the ``uuid`` module to create multipart data boundaries. (Pull #1380) - -* ``read_chunked()`` on a closed response returns no chunks. (Issue #1088) - -* Add Python 2.6 support to ``contrib.securetransport`` (Pull #1359) - -* Added support for auth info in url for SOCKS proxy (Pull #1363) - - -1.22 (2017-07-20) ------------------ - -* Fixed missing brackets in ``HTTP CONNECT`` when connecting to IPv6 address via - IPv6 proxy. (Issue #1222) - -* Made the connection pool retry on ``SSLError``. The original ``SSLError`` - is available on ``MaxRetryError.reason``. (Issue #1112) - -* Drain and release connection before recursing on retry/redirect. Fixes - deadlocks with a blocking connectionpool. (Issue #1167) - -* Fixed compatibility for cookiejar. (Issue #1229) - -* pyopenssl: Use vendored version of ``six``. (Issue #1231) - - -1.21.1 (2017-05-02) -------------------- - -* Fixed SecureTransport issue that would cause long delays in response body - delivery. (Pull #1154) - -* Fixed regression in 1.21 that threw exceptions when users passed the - ``socket_options`` flag to the ``PoolManager``. (Issue #1165) - -* Fixed regression in 1.21 that threw exceptions when users passed the - ``assert_hostname`` or ``assert_fingerprint`` flag to the ``PoolManager``. - (Pull #1157) - - -1.21 (2017-04-25) ------------------ - -* Improved performance of certain selector system calls on Python 3.5 and - later. (Pull #1095) - -* Resolved issue where the PyOpenSSL backend would not wrap SysCallError - exceptions appropriately when sending data. (Pull #1125) - -* Selectors now detects a monkey-patched select module after import for modules - that patch the select module like eventlet, greenlet. (Pull #1128) - -* Reduced memory consumption when streaming zlib-compressed responses - (as opposed to raw deflate streams). (Pull #1129) - -* Connection pools now use the entire request context when constructing the - pool key. (Pull #1016) - -* ``PoolManager.connection_from_*`` methods now accept a new keyword argument, - ``pool_kwargs``, which are merged with the existing ``connection_pool_kw``. - (Pull #1016) - -* Add retry counter for ``status_forcelist``. (Issue #1147) - -* Added ``contrib`` module for using SecureTransport on macOS: - ``urllib3.contrib.securetransport``. (Pull #1122) - -* urllib3 now only normalizes the case of ``http://`` and ``https://`` schemes: - for schemes it does not recognise, it assumes they are case-sensitive and - leaves them unchanged. - (Issue #1080) - - -1.20 (2017-01-19) ------------------ - -* Added support for waiting for I/O using selectors other than select, - improving urllib3's behaviour with large numbers of concurrent connections. - (Pull #1001) - -* Updated the date for the system clock check. (Issue #1005) - -* ConnectionPools now correctly consider hostnames to be case-insensitive. - (Issue #1032) - -* Outdated versions of PyOpenSSL now cause the PyOpenSSL contrib module - to fail when it is injected, rather than at first use. (Pull #1063) - -* Outdated versions of cryptography now cause the PyOpenSSL contrib module - to fail when it is injected, rather than at first use. (Issue #1044) - -* Automatically attempt to rewind a file-like body object when a request is - retried or redirected. (Pull #1039) - -* Fix some bugs that occur when modules incautiously patch the queue module. - (Pull #1061) - -* Prevent retries from occurring on read timeouts for which the request method - was not in the method whitelist. (Issue #1059) - -* Changed the PyOpenSSL contrib module to lazily load idna to avoid - unnecessarily bloating the memory of programs that don't need it. (Pull - #1076) - -* Add support for IPv6 literals with zone identifiers. (Pull #1013) - -* Added support for socks5h:// and socks4a:// schemes when working with SOCKS - proxies, and controlled remote DNS appropriately. (Issue #1035) - - -1.19.1 (2016-11-16) -------------------- - -* Fixed AppEngine import that didn't function on Python 3.5. (Pull #1025) - - -1.19 (2016-11-03) ------------------ - -* urllib3 now respects Retry-After headers on 413, 429, and 503 responses when - using the default retry logic. (Pull #955) - -* Remove markers from setup.py to assist ancient setuptools versions. (Issue - #986) - -* Disallow superscripts and other integerish things in URL ports. (Issue #989) - -* Allow urllib3's HTTPResponse.stream() method to continue to work with - non-httplib underlying FPs. (Pull #990) - -* Empty filenames in multipart headers are now emitted as such, rather than - being suppressed. (Issue #1015) - -* Prefer user-supplied Host headers on chunked uploads. (Issue #1009) - - -1.18.1 (2016-10-27) -------------------- - -* CVE-2016-9015. Users who are using urllib3 version 1.17 or 1.18 along with - PyOpenSSL injection and OpenSSL 1.1.0 *must* upgrade to this version. This - release fixes a vulnerability whereby urllib3 in the above configuration - would silently fail to validate TLS certificates due to erroneously setting - invalid flags in OpenSSL's ``SSL_CTX_set_verify`` function. These erroneous - flags do not cause a problem in OpenSSL versions before 1.1.0, which - interprets the presence of any flag as requesting certificate validation. - - There is no PR for this patch, as it was prepared for simultaneous disclosure - and release. The master branch received the same fix in PR #1010. - - -1.18 (2016-09-26) ------------------ - -* Fixed incorrect message for IncompleteRead exception. (PR #973) - -* Accept ``iPAddress`` subject alternative name fields in TLS certificates. - (Issue #258) - -* Fixed consistency of ``HTTPResponse.closed`` between Python 2 and 3. - (Issue #977) - -* Fixed handling of wildcard certificates when using PyOpenSSL. (Issue #979) - - -1.17 (2016-09-06) ------------------ - -* Accept ``SSLContext`` objects for use in SSL/TLS negotiation. (Issue #835) - -* ConnectionPool debug log now includes scheme, host, and port. (Issue #897) - -* Substantially refactored documentation. (Issue #887) - -* Used URLFetch default timeout on AppEngine, rather than hardcoding our own. - (Issue #858) - -* Normalize the scheme and host in the URL parser (Issue #833) - -* ``HTTPResponse`` contains the last ``Retry`` object, which now also - contains retries history. (Issue #848) - -* Timeout can no longer be set as boolean, and must be greater than zero. - (PR #924) - -* Removed pyasn1 and ndg-httpsclient from dependencies used for PyOpenSSL. We - now use cryptography and idna, both of which are already dependencies of - PyOpenSSL. (PR #930) - -* Fixed infinite loop in ``stream`` when amt=None. (Issue #928) - -* Try to use the operating system's certificates when we are using an - ``SSLContext``. (PR #941) - -* Updated cipher suite list to allow ChaCha20+Poly1305. AES-GCM is preferred to - ChaCha20, but ChaCha20 is then preferred to everything else. (PR #947) - -* Updated cipher suite list to remove 3DES-based cipher suites. (PR #958) - -* Removed the cipher suite fallback to allow HIGH ciphers. (PR #958) - -* Implemented ``length_remaining`` to determine remaining content - to be read. (PR #949) - -* Implemented ``enforce_content_length`` to enable exceptions when - incomplete data chunks are received. (PR #949) - -* Dropped connection start, dropped connection reset, redirect, forced retry, - and new HTTPS connection log levels to DEBUG, from INFO. (PR #967) - - -1.16 (2016-06-11) ------------------ - -* Disable IPv6 DNS when IPv6 connections are not possible. (Issue #840) - -* Provide ``key_fn_by_scheme`` pool keying mechanism that can be - overridden. (Issue #830) - -* Normalize scheme and host to lowercase for pool keys, and include - ``source_address``. (Issue #830) - -* Cleaner exception chain in Python 3 for ``_make_request``. - (Issue #861) - -* Fixed installing ``urllib3[socks]`` extra. (Issue #864) - -* Fixed signature of ``ConnectionPool.close`` so it can actually safely be - called by subclasses. (Issue #873) - -* Retain ``release_conn`` state across retries. (Issues #651, #866) - -* Add customizable ``HTTPConnectionPool.ResponseCls``, which defaults to - ``HTTPResponse`` but can be replaced with a subclass. (Issue #879) - - -1.15.1 (2016-04-11) -------------------- - -* Fix packaging to include backports module. (Issue #841) - - -1.15 (2016-04-06) ------------------ - -* Added Retry(raise_on_status=False). (Issue #720) - -* Always use setuptools, no more distutils fallback. (Issue #785) - -* Dropped support for Python 3.2. (Issue #786) - -* Chunked transfer encoding when requesting with ``chunked=True``. - (Issue #790) - -* Fixed regression with IPv6 port parsing. (Issue #801) - -* Append SNIMissingWarning messages to allow users to specify it in - the PYTHONWARNINGS environment variable. (Issue #816) - -* Handle unicode headers in Py2. (Issue #818) - -* Log certificate when there is a hostname mismatch. (Issue #820) - -* Preserve order of request/response headers. (Issue #821) - - -1.14 (2015-12-29) ------------------ - -* contrib: SOCKS proxy support! (Issue #762) - -* Fixed AppEngine handling of transfer-encoding header and bug - in Timeout defaults checking. (Issue #763) - - -1.13.1 (2015-12-18) -------------------- - -* Fixed regression in IPv6 + SSL for match_hostname. (Issue #761) - - -1.13 (2015-12-14) ------------------ - -* Fixed ``pip install urllib3[secure]`` on modern pip. (Issue #706) - -* pyopenssl: Fixed SSL3_WRITE_PENDING error. (Issue #717) - -* pyopenssl: Support for TLSv1.1 and TLSv1.2. (Issue #696) - -* Close connections more defensively on exception. (Issue #734) - -* Adjusted ``read_chunked`` to handle gzipped, chunk-encoded bodies without - repeatedly flushing the decoder, to function better on Jython. (Issue #743) - -* Accept ``ca_cert_dir`` for SSL-related PoolManager configuration. (Issue #758) - - -1.12 (2015-09-03) ------------------ - -* Rely on ``six`` for importing ``httplib`` to work around - conflicts with other Python 3 shims. (Issue #688) - -* Add support for directories of certificate authorities, as supported by - OpenSSL. (Issue #701) - -* New exception: ``NewConnectionError``, raised when we fail to establish - a new connection, usually ``ECONNREFUSED`` socket error. - - -1.11 (2015-07-21) ------------------ - -* When ``ca_certs`` is given, ``cert_reqs`` defaults to - ``'CERT_REQUIRED'``. (Issue #650) - -* ``pip install urllib3[secure]`` will install Certifi and - PyOpenSSL as dependencies. (Issue #678) - -* Made ``HTTPHeaderDict`` usable as a ``headers`` input value - (Issues #632, #679) - -* Added `urllib3.contrib.appengine <https://urllib3.readthedocs.io/en/latest/contrib.html#google-app-engine>`_ - which has an ``AppEngineManager`` for using ``URLFetch`` in a - Google AppEngine environment. (Issue #664) - -* Dev: Added test suite for AppEngine. (Issue #631) - -* Fix performance regression when using PyOpenSSL. (Issue #626) - -* Passing incorrect scheme (e.g. ``foo://``) will raise - ``ValueError`` instead of ``AssertionError`` (backwards - compatible for now, but please migrate). (Issue #640) - -* Fix pools not getting replenished when an error occurs during a - request using ``release_conn=False``. (Issue #644) - -* Fix pool-default headers not applying for url-encoded requests - like GET. (Issue #657) - -* log.warning in Python 3 when headers are skipped due to parsing - errors. (Issue #642) - -* Close and discard connections if an error occurs during read. - (Issue #660) - -* Fix host parsing for IPv6 proxies. (Issue #668) - -* Separate warning type SubjectAltNameWarning, now issued once - per host. (Issue #671) - -* Fix ``httplib.IncompleteRead`` not getting converted to - ``ProtocolError`` when using ``HTTPResponse.stream()`` - (Issue #674) - -1.10.4 (2015-05-03) -------------------- - -* Migrate tests to Tornado 4. (Issue #594) - -* Append default warning configuration rather than overwrite. - (Issue #603) - -* Fix streaming decoding regression. (Issue #595) - -* Fix chunked requests losing state across keep-alive connections. - (Issue #599) - -* Fix hanging when chunked HEAD response has no body. (Issue #605) - - -1.10.3 (2015-04-21) -------------------- - -* Emit ``InsecurePlatformWarning`` when SSLContext object is missing. - (Issue #558) - -* Fix regression of duplicate header keys being discarded. - (Issue #563) - -* ``Response.stream()`` returns a generator for chunked responses. - (Issue #560) - -* Set upper-bound timeout when waiting for a socket in PyOpenSSL. - (Issue #585) - -* Work on platforms without `ssl` module for plain HTTP requests. - (Issue #587) - -* Stop relying on the stdlib's default cipher list. (Issue #588) - - -1.10.2 (2015-02-25) -------------------- - -* Fix file descriptor leakage on retries. (Issue #548) - -* Removed RC4 from default cipher list. (Issue #551) - -* Header performance improvements. (Issue #544) - -* Fix PoolManager not obeying redirect retry settings. (Issue #553) - - -1.10.1 (2015-02-10) -------------------- - -* Pools can be used as context managers. (Issue #545) - -* Don't re-use connections which experienced an SSLError. (Issue #529) - -* Don't fail when gzip decoding an empty stream. (Issue #535) - -* Add sha256 support for fingerprint verification. (Issue #540) - -* Fixed handling of header values containing commas. (Issue #533) - - -1.10 (2014-12-14) ------------------ - -* Disabled SSLv3. (Issue #473) - -* Add ``Url.url`` property to return the composed url string. (Issue #394) - -* Fixed PyOpenSSL + gevent ``WantWriteError``. (Issue #412) - -* ``MaxRetryError.reason`` will always be an exception, not string. - (Issue #481) - -* Fixed SSL-related timeouts not being detected as timeouts. (Issue #492) - -* Py3: Use ``ssl.create_default_context()`` when available. (Issue #473) - -* Emit ``InsecureRequestWarning`` for *every* insecure HTTPS request. - (Issue #496) - -* Emit ``SecurityWarning`` when certificate has no ``subjectAltName``. - (Issue #499) - -* Close and discard sockets which experienced SSL-related errors. - (Issue #501) - -* Handle ``body`` param in ``.request(...)``. (Issue #513) - -* Respect timeout with HTTPS proxy. (Issue #505) - -* PyOpenSSL: Handle ZeroReturnError exception. (Issue #520) - - -1.9.1 (2014-09-13) ------------------- - -* Apply socket arguments before binding. (Issue #427) - -* More careful checks if fp-like object is closed. (Issue #435) - -* Fixed packaging issues of some development-related files not - getting included. (Issue #440) - -* Allow performing *only* fingerprint verification. (Issue #444) - -* Emit ``SecurityWarning`` if system clock is waaay off. (Issue #445) - -* Fixed PyOpenSSL compatibility with PyPy. (Issue #450) - -* Fixed ``BrokenPipeError`` and ``ConnectionError`` handling in Py3. - (Issue #443) - - - -1.9 (2014-07-04) ----------------- - -* Shuffled around development-related files. If you're maintaining a distro - package of urllib3, you may need to tweak things. (Issue #415) - -* Unverified HTTPS requests will trigger a warning on the first request. See - our new `security documentation - <https://urllib3.readthedocs.io/en/latest/security.html>`_ for details. - (Issue #426) - -* New retry logic and ``urllib3.util.retry.Retry`` configuration object. - (Issue #326) - -* All raised exceptions should now wrapped in a - ``urllib3.exceptions.HTTPException``-extending exception. (Issue #326) - -* All errors during a retry-enabled request should be wrapped in - ``urllib3.exceptions.MaxRetryError``, including timeout-related exceptions - which were previously exempt. Underlying error is accessible from the - ``.reason`` property. (Issue #326) - -* ``urllib3.exceptions.ConnectionError`` renamed to - ``urllib3.exceptions.ProtocolError``. (Issue #326) - -* Errors during response read (such as IncompleteRead) are now wrapped in - ``urllib3.exceptions.ProtocolError``. (Issue #418) - -* Requesting an empty host will raise ``urllib3.exceptions.LocationValueError``. - (Issue #417) - -* Catch read timeouts over SSL connections as - ``urllib3.exceptions.ReadTimeoutError``. (Issue #419) - -* Apply socket arguments before connecting. (Issue #427) - - -1.8.3 (2014-06-23) ------------------- - -* Fix TLS verification when using a proxy in Python 3.4.1. (Issue #385) - -* Add ``disable_cache`` option to ``urllib3.util.make_headers``. (Issue #393) - -* Wrap ``socket.timeout`` exception with - ``urllib3.exceptions.ReadTimeoutError``. (Issue #399) - -* Fixed proxy-related bug where connections were being reused incorrectly. - (Issues #366, #369) - -* Added ``socket_options`` keyword parameter which allows to define - ``setsockopt`` configuration of new sockets. (Issue #397) - -* Removed ``HTTPConnection.tcp_nodelay`` in favor of - ``HTTPConnection.default_socket_options``. (Issue #397) - -* Fixed ``TypeError`` bug in Python 2.6.4. (Issue #411) - - -1.8.2 (2014-04-17) ------------------- - -* Fix ``urllib3.util`` not being included in the package. - - -1.8.1 (2014-04-17) ------------------- - -* Fix AppEngine bug of HTTPS requests going out as HTTP. (Issue #356) - -* Don't install ``dummyserver`` into ``site-packages`` as it's only needed - for the test suite. (Issue #362) - -* Added support for specifying ``source_address``. (Issue #352) - - -1.8 (2014-03-04) ----------------- - -* Improved url parsing in ``urllib3.util.parse_url`` (properly parse '@' in - username, and blank ports like 'hostname:'). - -* New ``urllib3.connection`` module which contains all the HTTPConnection - objects. - -* Several ``urllib3.util.Timeout``-related fixes. Also changed constructor - signature to a more sensible order. [Backwards incompatible] - (Issues #252, #262, #263) - -* Use ``backports.ssl_match_hostname`` if it's installed. (Issue #274) - -* Added ``.tell()`` method to ``urllib3.response.HTTPResponse`` which - returns the number of bytes read so far. (Issue #277) - -* Support for platforms without threading. (Issue #289) - -* Expand default-port comparison in ``HTTPConnectionPool.is_same_host`` - to allow a pool with no specified port to be considered equal to to an - HTTP/HTTPS url with port 80/443 explicitly provided. (Issue #305) - -* Improved default SSL/TLS settings to avoid vulnerabilities. - (Issue #309) - -* Fixed ``urllib3.poolmanager.ProxyManager`` not retrying on connect errors. - (Issue #310) - -* Disable Nagle's Algorithm on the socket for non-proxies. A subset of requests - will send the entire HTTP request ~200 milliseconds faster; however, some of - the resulting TCP packets will be smaller. (Issue #254) - -* Increased maximum number of SubjectAltNames in ``urllib3.contrib.pyopenssl`` - from the default 64 to 1024 in a single certificate. (Issue #318) - -* Headers are now passed and stored as a custom - ``urllib3.collections_.HTTPHeaderDict`` object rather than a plain ``dict``. - (Issue #329, #333) - -* Headers no longer lose their case on Python 3. (Issue #236) - -* ``urllib3.contrib.pyopenssl`` now uses the operating system's default CA - certificates on inject. (Issue #332) - -* Requests with ``retries=False`` will immediately raise any exceptions without - wrapping them in ``MaxRetryError``. (Issue #348) - -* Fixed open socket leak with SSL-related failures. (Issue #344, #348) - - -1.7.1 (2013-09-25) ------------------- - -* Added granular timeout support with new ``urllib3.util.Timeout`` class. - (Issue #231) - -* Fixed Python 3.4 support. (Issue #238) - - -1.7 (2013-08-14) ----------------- - -* More exceptions are now pickle-able, with tests. (Issue #174) - -* Fixed redirecting with relative URLs in Location header. (Issue #178) - -* Support for relative urls in ``Location: ...`` header. (Issue #179) - -* ``urllib3.response.HTTPResponse`` now inherits from ``io.IOBase`` for bonus - file-like functionality. (Issue #187) - -* Passing ``assert_hostname=False`` when creating a HTTPSConnectionPool will - skip hostname verification for SSL connections. (Issue #194) - -* New method ``urllib3.response.HTTPResponse.stream(...)`` which acts as a - generator wrapped around ``.read(...)``. (Issue #198) - -* IPv6 url parsing enforces brackets around the hostname. (Issue #199) - -* Fixed thread race condition in - ``urllib3.poolmanager.PoolManager.connection_from_host(...)`` (Issue #204) - -* ``ProxyManager`` requests now include non-default port in ``Host: ...`` - header. (Issue #217) - -* Added HTTPS proxy support in ``ProxyManager``. (Issue #170 #139) - -* New ``RequestField`` object can be passed to the ``fields=...`` param which - can specify headers. (Issue #220) - -* Raise ``urllib3.exceptions.ProxyError`` when connecting to proxy fails. - (Issue #221) - -* Use international headers when posting file names. (Issue #119) - -* Improved IPv6 support. (Issue #203) - - -1.6 (2013-04-25) ----------------- - -* Contrib: Optional SNI support for Py2 using PyOpenSSL. (Issue #156) - -* ``ProxyManager`` automatically adds ``Host: ...`` header if not given. - -* Improved SSL-related code. ``cert_req`` now optionally takes a string like - "REQUIRED" or "NONE". Same with ``ssl_version`` takes strings like "SSLv23" - The string values reflect the suffix of the respective constant variable. - (Issue #130) - -* Vendored ``socksipy`` now based on Anorov's fork which handles unexpectedly - closed proxy connections and larger read buffers. (Issue #135) - -* Ensure the connection is closed if no data is received, fixes connection leak - on some platforms. (Issue #133) - -* Added SNI support for SSL/TLS connections on Py32+. (Issue #89) - -* Tests fixed to be compatible with Py26 again. (Issue #125) - -* Added ability to choose SSL version by passing an ``ssl.PROTOCOL_*`` constant - to the ``ssl_version`` parameter of ``HTTPSConnectionPool``. (Issue #109) - -* Allow an explicit content type to be specified when encoding file fields. - (Issue #126) - -* Exceptions are now pickleable, with tests. (Issue #101) - -* Fixed default headers not getting passed in some cases. (Issue #99) - -* Treat "content-encoding" header value as case-insensitive, per RFC 2616 - Section 3.5. (Issue #110) - -* "Connection Refused" SocketErrors will get retried rather than raised. - (Issue #92) - -* Updated vendored ``six``, no longer overrides the global ``six`` module - namespace. (Issue #113) - -* ``urllib3.exceptions.MaxRetryError`` contains a ``reason`` property holding - the exception that prompted the final retry. If ``reason is None`` then it - was due to a redirect. (Issue #92, #114) - -* Fixed ``PoolManager.urlopen()`` from not redirecting more than once. - (Issue #149) - -* Don't assume ``Content-Type: text/plain`` for multi-part encoding parameters - that are not files. (Issue #111) - -* Pass `strict` param down to ``httplib.HTTPConnection``. (Issue #122) - -* Added mechanism to verify SSL certificates by fingerprint (md5, sha1) or - against an arbitrary hostname (when connecting by IP or for misconfigured - servers). (Issue #140) - -* Streaming decompression support. (Issue #159) - - -1.5 (2012-08-02) ----------------- - -* Added ``urllib3.add_stderr_logger()`` for quickly enabling STDERR debug - logging in urllib3. - -* Native full URL parsing (including auth, path, query, fragment) available in - ``urllib3.util.parse_url(url)``. - -* Built-in redirect will switch method to 'GET' if status code is 303. - (Issue #11) - -* ``urllib3.PoolManager`` strips the scheme and host before sending the request - uri. (Issue #8) - -* New ``urllib3.exceptions.DecodeError`` exception for when automatic decoding, - based on the Content-Type header, fails. - -* Fixed bug with pool depletion and leaking connections (Issue #76). Added - explicit connection closing on pool eviction. Added - ``urllib3.PoolManager.clear()``. - -* 99% -> 100% unit test coverage. - - -1.4 (2012-06-16) ----------------- - -* Minor AppEngine-related fixes. - -* Switched from ``mimetools.choose_boundary`` to ``uuid.uuid4()``. - -* Improved url parsing. (Issue #73) - -* IPv6 url support. (Issue #72) - - -1.3 (2012-03-25) ----------------- - -* Removed pre-1.0 deprecated API. - -* Refactored helpers into a ``urllib3.util`` submodule. - -* Fixed multipart encoding to support list-of-tuples for keys with multiple - values. (Issue #48) - -* Fixed multiple Set-Cookie headers in response not getting merged properly in - Python 3. (Issue #53) - -* AppEngine support with Py27. (Issue #61) - -* Minor ``encode_multipart_formdata`` fixes related to Python 3 strings vs - bytes. - - -1.2.2 (2012-02-06) ------------------- - -* Fixed packaging bug of not shipping ``test-requirements.txt``. (Issue #47) - - -1.2.1 (2012-02-05) ------------------- - -* Fixed another bug related to when ``ssl`` module is not available. (Issue #41) - -* Location parsing errors now raise ``urllib3.exceptions.LocationParseError`` - which inherits from ``ValueError``. - - -1.2 (2012-01-29) ----------------- - -* Added Python 3 support (tested on 3.2.2) - -* Dropped Python 2.5 support (tested on 2.6.7, 2.7.2) - -* Use ``select.poll`` instead of ``select.select`` for platforms that support - it. - -* Use ``Queue.LifoQueue`` instead of ``Queue.Queue`` for more aggressive - connection reusing. Configurable by overriding ``ConnectionPool.QueueCls``. - -* Fixed ``ImportError`` during install when ``ssl`` module is not available. - (Issue #41) - -* Fixed ``PoolManager`` redirects between schemes (such as HTTP -> HTTPS) not - completing properly. (Issue #28, uncovered by Issue #10 in v1.1) - -* Ported ``dummyserver`` to use ``tornado`` instead of ``webob`` + - ``eventlet``. Removed extraneous unsupported dummyserver testing backends. - Added socket-level tests. - -* More tests. Achievement Unlocked: 99% Coverage. - - -1.1 (2012-01-07) ----------------- - -* Refactored ``dummyserver`` to its own root namespace module (used for - testing). - -* Added hostname verification for ``VerifiedHTTPSConnection`` by vendoring in - Py32's ``ssl_match_hostname``. (Issue #25) - -* Fixed cross-host HTTP redirects when using ``PoolManager``. (Issue #10) - -* Fixed ``decode_content`` being ignored when set through ``urlopen``. (Issue - #27) - -* Fixed timeout-related bugs. (Issues #17, #23) - - -1.0.2 (2011-11-04) ------------------- - -* Fixed typo in ``VerifiedHTTPSConnection`` which would only present as a bug if - you're using the object manually. (Thanks pyos) - -* Made RecentlyUsedContainer (and consequently PoolManager) more thread-safe by - wrapping the access log in a mutex. (Thanks @christer) - -* Made RecentlyUsedContainer more dict-like (corrected ``__delitem__`` and - ``__getitem__`` behaviour), with tests. Shouldn't affect core urllib3 code. - - -1.0.1 (2011-10-10) ------------------- - -* Fixed a bug where the same connection would get returned into the pool twice, - causing extraneous "HttpConnectionPool is full" log warnings. - - -1.0 (2011-10-08) ----------------- - -* Added ``PoolManager`` with LRU expiration of connections (tested and - documented). -* Added ``ProxyManager`` (needs tests, docs, and confirmation that it works - with HTTPS proxies). -* Added optional partial-read support for responses when - ``preload_content=False``. You can now make requests and just read the headers - without loading the content. -* Made response decoding optional (default on, same as before). -* Added optional explicit boundary string for ``encode_multipart_formdata``. -* Convenience request methods are now inherited from ``RequestMethods``. Old - helpers like ``get_url`` and ``post_url`` should be abandoned in favour of - the new ``request(method, url, ...)``. -* Refactored code to be even more decoupled, reusable, and extendable. -* License header added to ``.py`` files. -* Embiggened the documentation: Lots of Sphinx-friendly docstrings in the code - and docs in ``docs/`` and on https://urllib3.readthedocs.io/. -* Embettered all the things! -* Started writing this file. - - -0.4.1 (2011-07-17) ------------------- - -* Minor bug fixes, code cleanup. - - -0.4 (2011-03-01) ----------------- - -* Better unicode support. -* Added ``VerifiedHTTPSConnection``. -* Added ``NTLMConnectionPool`` in contrib. -* Minor improvements. - - -0.3.1 (2010-07-13) ------------------- - -* Added ``assert_host_name`` optional parameter. Now compatible with proxies. - - -0.3 (2009-12-10) ----------------- - -* Added HTTPS support. -* Minor bug fixes. -* Refactored, broken backwards compatibility with 0.2. -* API to be treated as stable from this version forward. - - -0.2 (2008-11-17) ----------------- - -* Added unit tests. -* Bug fixes. - - -0.1 (2008-11-16) ----------------- - -* First release. - - diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/INSTALLER b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/INSTALLER deleted file mode 100644 index a1b589e..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/LICENSE.txt b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/LICENSE.txt deleted file mode 100755 index 1c3283e..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -This is the MIT license: http://www.opensource.org/licenses/mit-license.php - -Copyright 2008-2016 Andrey Petrov and contributors (see CONTRIBUTORS.txt) - -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. diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/METADATA b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/METADATA deleted file mode 100755 index a04dd38..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/METADATA +++ /dev/null @@ -1,1077 +0,0 @@ -Metadata-Version: 2.0 -Name: urllib3 -Version: 1.23 -Summary: HTTP library with thread-safe connection pooling, file post, and more. -Home-page: https://urllib3.readthedocs.io/ -Author: Andrey Petrov -Author-email: andrey.petrov@shazow.net -License: MIT -Keywords: urllib httplib threadsafe filepost http https ssl pooling -Platform: UNKNOWN -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Topic :: Software Development :: Libraries -Requires-Python: >=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4 -Provides-Extra: secure -Provides-Extra: socks -Requires-Dist: pyOpenSSL>=0.14,<18.0.0; python_version=="2.6" and extra == 'secure' -Requires-Dist: pyOpenSSL>=0.14; python_version=="2.7" and extra == 'secure' -Requires-Dist: cryptography>=1.3.4; python_version<="2.7" and extra == 'secure' -Requires-Dist: idna>=2.0.0; python_version<="2.7" and extra == 'secure' -Requires-Dist: certifi; extra == 'secure' -Requires-Dist: ipaddress; python_version<="2.7" and extra == 'secure' -Requires-Dist: PySocks>=1.5.6,<2.0,!=1.5.7; extra == 'socks' - -urllib3 -======= - -.. image:: https://travis-ci.org/urllib3/urllib3.svg?branch=master - :alt: Build status on Travis - :target: https://travis-ci.org/urllib3/urllib3 - -.. image:: https://img.shields.io/appveyor/ci/urllib3/urllib3/master.svg - :alt: Build status on AppVeyor - :target: https://ci.appveyor.com/project/urllib3/urllib3 - -.. image:: https://readthedocs.org/projects/urllib3/badge/?version=latest - :alt: Documentation Status - :target: https://urllib3.readthedocs.io/en/latest/ - -.. image:: https://img.shields.io/codecov/c/github/urllib3/urllib3.svg - :alt: Coverage Status - :target: https://codecov.io/gh/urllib3/urllib3 - -.. image:: https://img.shields.io/pypi/v/urllib3.svg?maxAge=86400 - :alt: PyPI version - :target: https://pypi.org/project/urllib3/ - -.. image:: https://www.bountysource.com/badge/tracker?tracker_id=192525 - :alt: Bountysource - :target: https://www.bountysource.com/trackers/192525-urllib3?utm_source=192525&utm_medium=shield&utm_campaign=TRACKER_BADGE - -.. image:: https://badges.gitter.im/python-urllib3/Lobby.svg - :alt: Gitter - :target: https://gitter.im/python-urllib3/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge - -urllib3 is a powerful, *sanity-friendly* HTTP client for Python. Much of the -Python ecosystem already uses urllib3 and you should too. -urllib3 brings many critical features that are missing from the Python -standard libraries: - -- Thread safety. -- Connection pooling. -- Client-side SSL/TLS verification. -- File uploads with multipart encoding. -- Helpers for retrying requests and dealing with HTTP redirects. -- Support for gzip and deflate encoding. -- Proxy support for HTTP and SOCKS. -- 100% test coverage. - -urllib3 is powerful and easy to use:: - - >>> import urllib3 - >>> http = urllib3.PoolManager() - >>> r = http.request('GET', 'http://httpbin.org/robots.txt') - >>> r.status - 200 - >>> r.data - 'User-agent: *\nDisallow: /deny\n' - - -Installing ----------- - -urllib3 can be installed with `pip <https://pip.pypa.io>`_:: - - $ pip install urllib3 - -Alternatively, you can grab the latest source code from `GitHub <https://github.com/urllib3/urllib3>`_:: - - $ git clone git://github.com/urllib3/urllib3.git - $ python setup.py install - - -Documentation -------------- - -urllib3 has usage and reference documentation at `urllib3.readthedocs.io <https://urllib3.readthedocs.io>`_. - - -Contributing ------------- - -urllib3 happily accepts contributions. Please see our -`contributing documentation <https://urllib3.readthedocs.io/en/latest/contributing.html>`_ -for some tips on getting started. - - -Maintainers ------------ - -- `@theacodes <https://github.com/theacodes>`_ (Thea Flowers) -- `@SethMichaelLarson <https://github.com/SethMichaelLarson>`_ (Seth M. Larson) -- `@haikuginger <https://github.com/haikuginger>`_ (Jesse Shapiro) -- `@lukasa <https://github.com/lukasa>`_ (Cory Benfield) -- `@sigmavirus24 <https://github.com/sigmavirus24>`_ (Ian Cordasco) -- `@shazow <https://github.com/shazow>`_ (Andrey Petrov) - -👋 - - -Sponsorship ------------ - -If your company benefits from this library, please consider `sponsoring its -development <https://urllib3.readthedocs.io/en/latest/contributing.html#sponsorship>`_. - -Sponsors include: - -- Google Cloud Platform (2018-present), sponsors `@theacodes <https://github.com/theacodes>`_'s work on an ongoing basis -- Abbott (2018-present), sponsors `@SethMichaelLarson <https://github.com/SethMichaelLarson>`_'s work on an ongoing basis -- Akamai (2017-present), sponsors `@haikuginger <https://github.com/haikuginger>`_'s work on an ongoing basis -- Hewlett Packard Enterprise (2016-2017), sponsored `@Lukasa’s <https://github.com/Lukasa>`_ work on urllib3 - - -Changes -======= - -1.23 (2018-06-04) ------------------ - -* Allow providing a list of headers to strip from requests when redirecting - to a different host. Defaults to the ``Authorization`` header. Different - headers can be set via ``Retry.remove_headers_on_redirect``. (Issue #1316) - -* Fix ``util.selectors._fileobj_to_fd`` to accept ``long`` (Issue #1247). - -* Dropped Python 3.3 support. (Pull #1242) - -* Put the connection back in the pool when calling stream() or read_chunked() on - a chunked HEAD response. (Issue #1234) - -* Fixed pyOpenSSL-specific ssl client authentication issue when clients - attempted to auth via certificate + chain (Issue #1060) - -* Add the port to the connectionpool connect print (Pull #1251) - -* Don't use the ``uuid`` module to create multipart data boundaries. (Pull #1380) - -* ``read_chunked()`` on a closed response returns no chunks. (Issue #1088) - -* Add Python 2.6 support to ``contrib.securetransport`` (Pull #1359) - -* Added support for auth info in url for SOCKS proxy (Pull #1363) - - -1.22 (2017-07-20) ------------------ - -* Fixed missing brackets in ``HTTP CONNECT`` when connecting to IPv6 address via - IPv6 proxy. (Issue #1222) - -* Made the connection pool retry on ``SSLError``. The original ``SSLError`` - is available on ``MaxRetryError.reason``. (Issue #1112) - -* Drain and release connection before recursing on retry/redirect. Fixes - deadlocks with a blocking connectionpool. (Issue #1167) - -* Fixed compatibility for cookiejar. (Issue #1229) - -* pyopenssl: Use vendored version of ``six``. (Issue #1231) - - -1.21.1 (2017-05-02) -------------------- - -* Fixed SecureTransport issue that would cause long delays in response body - delivery. (Pull #1154) - -* Fixed regression in 1.21 that threw exceptions when users passed the - ``socket_options`` flag to the ``PoolManager``. (Issue #1165) - -* Fixed regression in 1.21 that threw exceptions when users passed the - ``assert_hostname`` or ``assert_fingerprint`` flag to the ``PoolManager``. - (Pull #1157) - - -1.21 (2017-04-25) ------------------ - -* Improved performance of certain selector system calls on Python 3.5 and - later. (Pull #1095) - -* Resolved issue where the PyOpenSSL backend would not wrap SysCallError - exceptions appropriately when sending data. (Pull #1125) - -* Selectors now detects a monkey-patched select module after import for modules - that patch the select module like eventlet, greenlet. (Pull #1128) - -* Reduced memory consumption when streaming zlib-compressed responses - (as opposed to raw deflate streams). (Pull #1129) - -* Connection pools now use the entire request context when constructing the - pool key. (Pull #1016) - -* ``PoolManager.connection_from_*`` methods now accept a new keyword argument, - ``pool_kwargs``, which are merged with the existing ``connection_pool_kw``. - (Pull #1016) - -* Add retry counter for ``status_forcelist``. (Issue #1147) - -* Added ``contrib`` module for using SecureTransport on macOS: - ``urllib3.contrib.securetransport``. (Pull #1122) - -* urllib3 now only normalizes the case of ``http://`` and ``https://`` schemes: - for schemes it does not recognise, it assumes they are case-sensitive and - leaves them unchanged. - (Issue #1080) - - -1.20 (2017-01-19) ------------------ - -* Added support for waiting for I/O using selectors other than select, - improving urllib3's behaviour with large numbers of concurrent connections. - (Pull #1001) - -* Updated the date for the system clock check. (Issue #1005) - -* ConnectionPools now correctly consider hostnames to be case-insensitive. - (Issue #1032) - -* Outdated versions of PyOpenSSL now cause the PyOpenSSL contrib module - to fail when it is injected, rather than at first use. (Pull #1063) - -* Outdated versions of cryptography now cause the PyOpenSSL contrib module - to fail when it is injected, rather than at first use. (Issue #1044) - -* Automatically attempt to rewind a file-like body object when a request is - retried or redirected. (Pull #1039) - -* Fix some bugs that occur when modules incautiously patch the queue module. - (Pull #1061) - -* Prevent retries from occurring on read timeouts for which the request method - was not in the method whitelist. (Issue #1059) - -* Changed the PyOpenSSL contrib module to lazily load idna to avoid - unnecessarily bloating the memory of programs that don't need it. (Pull - #1076) - -* Add support for IPv6 literals with zone identifiers. (Pull #1013) - -* Added support for socks5h:// and socks4a:// schemes when working with SOCKS - proxies, and controlled remote DNS appropriately. (Issue #1035) - - -1.19.1 (2016-11-16) -------------------- - -* Fixed AppEngine import that didn't function on Python 3.5. (Pull #1025) - - -1.19 (2016-11-03) ------------------ - -* urllib3 now respects Retry-After headers on 413, 429, and 503 responses when - using the default retry logic. (Pull #955) - -* Remove markers from setup.py to assist ancient setuptools versions. (Issue - #986) - -* Disallow superscripts and other integerish things in URL ports. (Issue #989) - -* Allow urllib3's HTTPResponse.stream() method to continue to work with - non-httplib underlying FPs. (Pull #990) - -* Empty filenames in multipart headers are now emitted as such, rather than - being suppressed. (Issue #1015) - -* Prefer user-supplied Host headers on chunked uploads. (Issue #1009) - - -1.18.1 (2016-10-27) -------------------- - -* CVE-2016-9015. Users who are using urllib3 version 1.17 or 1.18 along with - PyOpenSSL injection and OpenSSL 1.1.0 *must* upgrade to this version. This - release fixes a vulnerability whereby urllib3 in the above configuration - would silently fail to validate TLS certificates due to erroneously setting - invalid flags in OpenSSL's ``SSL_CTX_set_verify`` function. These erroneous - flags do not cause a problem in OpenSSL versions before 1.1.0, which - interprets the presence of any flag as requesting certificate validation. - - There is no PR for this patch, as it was prepared for simultaneous disclosure - and release. The master branch received the same fix in PR #1010. - - -1.18 (2016-09-26) ------------------ - -* Fixed incorrect message for IncompleteRead exception. (PR #973) - -* Accept ``iPAddress`` subject alternative name fields in TLS certificates. - (Issue #258) - -* Fixed consistency of ``HTTPResponse.closed`` between Python 2 and 3. - (Issue #977) - -* Fixed handling of wildcard certificates when using PyOpenSSL. (Issue #979) - - -1.17 (2016-09-06) ------------------ - -* Accept ``SSLContext`` objects for use in SSL/TLS negotiation. (Issue #835) - -* ConnectionPool debug log now includes scheme, host, and port. (Issue #897) - -* Substantially refactored documentation. (Issue #887) - -* Used URLFetch default timeout on AppEngine, rather than hardcoding our own. - (Issue #858) - -* Normalize the scheme and host in the URL parser (Issue #833) - -* ``HTTPResponse`` contains the last ``Retry`` object, which now also - contains retries history. (Issue #848) - -* Timeout can no longer be set as boolean, and must be greater than zero. - (PR #924) - -* Removed pyasn1 and ndg-httpsclient from dependencies used for PyOpenSSL. We - now use cryptography and idna, both of which are already dependencies of - PyOpenSSL. (PR #930) - -* Fixed infinite loop in ``stream`` when amt=None. (Issue #928) - -* Try to use the operating system's certificates when we are using an - ``SSLContext``. (PR #941) - -* Updated cipher suite list to allow ChaCha20+Poly1305. AES-GCM is preferred to - ChaCha20, but ChaCha20 is then preferred to everything else. (PR #947) - -* Updated cipher suite list to remove 3DES-based cipher suites. (PR #958) - -* Removed the cipher suite fallback to allow HIGH ciphers. (PR #958) - -* Implemented ``length_remaining`` to determine remaining content - to be read. (PR #949) - -* Implemented ``enforce_content_length`` to enable exceptions when - incomplete data chunks are received. (PR #949) - -* Dropped connection start, dropped connection reset, redirect, forced retry, - and new HTTPS connection log levels to DEBUG, from INFO. (PR #967) - - -1.16 (2016-06-11) ------------------ - -* Disable IPv6 DNS when IPv6 connections are not possible. (Issue #840) - -* Provide ``key_fn_by_scheme`` pool keying mechanism that can be - overridden. (Issue #830) - -* Normalize scheme and host to lowercase for pool keys, and include - ``source_address``. (Issue #830) - -* Cleaner exception chain in Python 3 for ``_make_request``. - (Issue #861) - -* Fixed installing ``urllib3[socks]`` extra. (Issue #864) - -* Fixed signature of ``ConnectionPool.close`` so it can actually safely be - called by subclasses. (Issue #873) - -* Retain ``release_conn`` state across retries. (Issues #651, #866) - -* Add customizable ``HTTPConnectionPool.ResponseCls``, which defaults to - ``HTTPResponse`` but can be replaced with a subclass. (Issue #879) - - -1.15.1 (2016-04-11) -------------------- - -* Fix packaging to include backports module. (Issue #841) - - -1.15 (2016-04-06) ------------------ - -* Added Retry(raise_on_status=False). (Issue #720) - -* Always use setuptools, no more distutils fallback. (Issue #785) - -* Dropped support for Python 3.2. (Issue #786) - -* Chunked transfer encoding when requesting with ``chunked=True``. - (Issue #790) - -* Fixed regression with IPv6 port parsing. (Issue #801) - -* Append SNIMissingWarning messages to allow users to specify it in - the PYTHONWARNINGS environment variable. (Issue #816) - -* Handle unicode headers in Py2. (Issue #818) - -* Log certificate when there is a hostname mismatch. (Issue #820) - -* Preserve order of request/response headers. (Issue #821) - - -1.14 (2015-12-29) ------------------ - -* contrib: SOCKS proxy support! (Issue #762) - -* Fixed AppEngine handling of transfer-encoding header and bug - in Timeout defaults checking. (Issue #763) - - -1.13.1 (2015-12-18) -------------------- - -* Fixed regression in IPv6 + SSL for match_hostname. (Issue #761) - - -1.13 (2015-12-14) ------------------ - -* Fixed ``pip install urllib3[secure]`` on modern pip. (Issue #706) - -* pyopenssl: Fixed SSL3_WRITE_PENDING error. (Issue #717) - -* pyopenssl: Support for TLSv1.1 and TLSv1.2. (Issue #696) - -* Close connections more defensively on exception. (Issue #734) - -* Adjusted ``read_chunked`` to handle gzipped, chunk-encoded bodies without - repeatedly flushing the decoder, to function better on Jython. (Issue #743) - -* Accept ``ca_cert_dir`` for SSL-related PoolManager configuration. (Issue #758) - - -1.12 (2015-09-03) ------------------ - -* Rely on ``six`` for importing ``httplib`` to work around - conflicts with other Python 3 shims. (Issue #688) - -* Add support for directories of certificate authorities, as supported by - OpenSSL. (Issue #701) - -* New exception: ``NewConnectionError``, raised when we fail to establish - a new connection, usually ``ECONNREFUSED`` socket error. - - -1.11 (2015-07-21) ------------------ - -* When ``ca_certs`` is given, ``cert_reqs`` defaults to - ``'CERT_REQUIRED'``. (Issue #650) - -* ``pip install urllib3[secure]`` will install Certifi and - PyOpenSSL as dependencies. (Issue #678) - -* Made ``HTTPHeaderDict`` usable as a ``headers`` input value - (Issues #632, #679) - -* Added `urllib3.contrib.appengine <https://urllib3.readthedocs.io/en/latest/contrib.html#google-app-engine>`_ - which has an ``AppEngineManager`` for using ``URLFetch`` in a - Google AppEngine environment. (Issue #664) - -* Dev: Added test suite for AppEngine. (Issue #631) - -* Fix performance regression when using PyOpenSSL. (Issue #626) - -* Passing incorrect scheme (e.g. ``foo://``) will raise - ``ValueError`` instead of ``AssertionError`` (backwards - compatible for now, but please migrate). (Issue #640) - -* Fix pools not getting replenished when an error occurs during a - request using ``release_conn=False``. (Issue #644) - -* Fix pool-default headers not applying for url-encoded requests - like GET. (Issue #657) - -* log.warning in Python 3 when headers are skipped due to parsing - errors. (Issue #642) - -* Close and discard connections if an error occurs during read. - (Issue #660) - -* Fix host parsing for IPv6 proxies. (Issue #668) - -* Separate warning type SubjectAltNameWarning, now issued once - per host. (Issue #671) - -* Fix ``httplib.IncompleteRead`` not getting converted to - ``ProtocolError`` when using ``HTTPResponse.stream()`` - (Issue #674) - -1.10.4 (2015-05-03) -------------------- - -* Migrate tests to Tornado 4. (Issue #594) - -* Append default warning configuration rather than overwrite. - (Issue #603) - -* Fix streaming decoding regression. (Issue #595) - -* Fix chunked requests losing state across keep-alive connections. - (Issue #599) - -* Fix hanging when chunked HEAD response has no body. (Issue #605) - - -1.10.3 (2015-04-21) -------------------- - -* Emit ``InsecurePlatformWarning`` when SSLContext object is missing. - (Issue #558) - -* Fix regression of duplicate header keys being discarded. - (Issue #563) - -* ``Response.stream()`` returns a generator for chunked responses. - (Issue #560) - -* Set upper-bound timeout when waiting for a socket in PyOpenSSL. - (Issue #585) - -* Work on platforms without `ssl` module for plain HTTP requests. - (Issue #587) - -* Stop relying on the stdlib's default cipher list. (Issue #588) - - -1.10.2 (2015-02-25) -------------------- - -* Fix file descriptor leakage on retries. (Issue #548) - -* Removed RC4 from default cipher list. (Issue #551) - -* Header performance improvements. (Issue #544) - -* Fix PoolManager not obeying redirect retry settings. (Issue #553) - - -1.10.1 (2015-02-10) -------------------- - -* Pools can be used as context managers. (Issue #545) - -* Don't re-use connections which experienced an SSLError. (Issue #529) - -* Don't fail when gzip decoding an empty stream. (Issue #535) - -* Add sha256 support for fingerprint verification. (Issue #540) - -* Fixed handling of header values containing commas. (Issue #533) - - -1.10 (2014-12-14) ------------------ - -* Disabled SSLv3. (Issue #473) - -* Add ``Url.url`` property to return the composed url string. (Issue #394) - -* Fixed PyOpenSSL + gevent ``WantWriteError``. (Issue #412) - -* ``MaxRetryError.reason`` will always be an exception, not string. - (Issue #481) - -* Fixed SSL-related timeouts not being detected as timeouts. (Issue #492) - -* Py3: Use ``ssl.create_default_context()`` when available. (Issue #473) - -* Emit ``InsecureRequestWarning`` for *every* insecure HTTPS request. - (Issue #496) - -* Emit ``SecurityWarning`` when certificate has no ``subjectAltName``. - (Issue #499) - -* Close and discard sockets which experienced SSL-related errors. - (Issue #501) - -* Handle ``body`` param in ``.request(...)``. (Issue #513) - -* Respect timeout with HTTPS proxy. (Issue #505) - -* PyOpenSSL: Handle ZeroReturnError exception. (Issue #520) - - -1.9.1 (2014-09-13) ------------------- - -* Apply socket arguments before binding. (Issue #427) - -* More careful checks if fp-like object is closed. (Issue #435) - -* Fixed packaging issues of some development-related files not - getting included. (Issue #440) - -* Allow performing *only* fingerprint verification. (Issue #444) - -* Emit ``SecurityWarning`` if system clock is waaay off. (Issue #445) - -* Fixed PyOpenSSL compatibility with PyPy. (Issue #450) - -* Fixed ``BrokenPipeError`` and ``ConnectionError`` handling in Py3. - (Issue #443) - - - -1.9 (2014-07-04) ----------------- - -* Shuffled around development-related files. If you're maintaining a distro - package of urllib3, you may need to tweak things. (Issue #415) - -* Unverified HTTPS requests will trigger a warning on the first request. See - our new `security documentation - <https://urllib3.readthedocs.io/en/latest/security.html>`_ for details. - (Issue #426) - -* New retry logic and ``urllib3.util.retry.Retry`` configuration object. - (Issue #326) - -* All raised exceptions should now wrapped in a - ``urllib3.exceptions.HTTPException``-extending exception. (Issue #326) - -* All errors during a retry-enabled request should be wrapped in - ``urllib3.exceptions.MaxRetryError``, including timeout-related exceptions - which were previously exempt. Underlying error is accessible from the - ``.reason`` property. (Issue #326) - -* ``urllib3.exceptions.ConnectionError`` renamed to - ``urllib3.exceptions.ProtocolError``. (Issue #326) - -* Errors during response read (such as IncompleteRead) are now wrapped in - ``urllib3.exceptions.ProtocolError``. (Issue #418) - -* Requesting an empty host will raise ``urllib3.exceptions.LocationValueError``. - (Issue #417) - -* Catch read timeouts over SSL connections as - ``urllib3.exceptions.ReadTimeoutError``. (Issue #419) - -* Apply socket arguments before connecting. (Issue #427) - - -1.8.3 (2014-06-23) ------------------- - -* Fix TLS verification when using a proxy in Python 3.4.1. (Issue #385) - -* Add ``disable_cache`` option to ``urllib3.util.make_headers``. (Issue #393) - -* Wrap ``socket.timeout`` exception with - ``urllib3.exceptions.ReadTimeoutError``. (Issue #399) - -* Fixed proxy-related bug where connections were being reused incorrectly. - (Issues #366, #369) - -* Added ``socket_options`` keyword parameter which allows to define - ``setsockopt`` configuration of new sockets. (Issue #397) - -* Removed ``HTTPConnection.tcp_nodelay`` in favor of - ``HTTPConnection.default_socket_options``. (Issue #397) - -* Fixed ``TypeError`` bug in Python 2.6.4. (Issue #411) - - -1.8.2 (2014-04-17) ------------------- - -* Fix ``urllib3.util`` not being included in the package. - - -1.8.1 (2014-04-17) ------------------- - -* Fix AppEngine bug of HTTPS requests going out as HTTP. (Issue #356) - -* Don't install ``dummyserver`` into ``site-packages`` as it's only needed - for the test suite. (Issue #362) - -* Added support for specifying ``source_address``. (Issue #352) - - -1.8 (2014-03-04) ----------------- - -* Improved url parsing in ``urllib3.util.parse_url`` (properly parse '@' in - username, and blank ports like 'hostname:'). - -* New ``urllib3.connection`` module which contains all the HTTPConnection - objects. - -* Several ``urllib3.util.Timeout``-related fixes. Also changed constructor - signature to a more sensible order. [Backwards incompatible] - (Issues #252, #262, #263) - -* Use ``backports.ssl_match_hostname`` if it's installed. (Issue #274) - -* Added ``.tell()`` method to ``urllib3.response.HTTPResponse`` which - returns the number of bytes read so far. (Issue #277) - -* Support for platforms without threading. (Issue #289) - -* Expand default-port comparison in ``HTTPConnectionPool.is_same_host`` - to allow a pool with no specified port to be considered equal to to an - HTTP/HTTPS url with port 80/443 explicitly provided. (Issue #305) - -* Improved default SSL/TLS settings to avoid vulnerabilities. - (Issue #309) - -* Fixed ``urllib3.poolmanager.ProxyManager`` not retrying on connect errors. - (Issue #310) - -* Disable Nagle's Algorithm on the socket for non-proxies. A subset of requests - will send the entire HTTP request ~200 milliseconds faster; however, some of - the resulting TCP packets will be smaller. (Issue #254) - -* Increased maximum number of SubjectAltNames in ``urllib3.contrib.pyopenssl`` - from the default 64 to 1024 in a single certificate. (Issue #318) - -* Headers are now passed and stored as a custom - ``urllib3.collections_.HTTPHeaderDict`` object rather than a plain ``dict``. - (Issue #329, #333) - -* Headers no longer lose their case on Python 3. (Issue #236) - -* ``urllib3.contrib.pyopenssl`` now uses the operating system's default CA - certificates on inject. (Issue #332) - -* Requests with ``retries=False`` will immediately raise any exceptions without - wrapping them in ``MaxRetryError``. (Issue #348) - -* Fixed open socket leak with SSL-related failures. (Issue #344, #348) - - -1.7.1 (2013-09-25) ------------------- - -* Added granular timeout support with new ``urllib3.util.Timeout`` class. - (Issue #231) - -* Fixed Python 3.4 support. (Issue #238) - - -1.7 (2013-08-14) ----------------- - -* More exceptions are now pickle-able, with tests. (Issue #174) - -* Fixed redirecting with relative URLs in Location header. (Issue #178) - -* Support for relative urls in ``Location: ...`` header. (Issue #179) - -* ``urllib3.response.HTTPResponse`` now inherits from ``io.IOBase`` for bonus - file-like functionality. (Issue #187) - -* Passing ``assert_hostname=False`` when creating a HTTPSConnectionPool will - skip hostname verification for SSL connections. (Issue #194) - -* New method ``urllib3.response.HTTPResponse.stream(...)`` which acts as a - generator wrapped around ``.read(...)``. (Issue #198) - -* IPv6 url parsing enforces brackets around the hostname. (Issue #199) - -* Fixed thread race condition in - ``urllib3.poolmanager.PoolManager.connection_from_host(...)`` (Issue #204) - -* ``ProxyManager`` requests now include non-default port in ``Host: ...`` - header. (Issue #217) - -* Added HTTPS proxy support in ``ProxyManager``. (Issue #170 #139) - -* New ``RequestField`` object can be passed to the ``fields=...`` param which - can specify headers. (Issue #220) - -* Raise ``urllib3.exceptions.ProxyError`` when connecting to proxy fails. - (Issue #221) - -* Use international headers when posting file names. (Issue #119) - -* Improved IPv6 support. (Issue #203) - - -1.6 (2013-04-25) ----------------- - -* Contrib: Optional SNI support for Py2 using PyOpenSSL. (Issue #156) - -* ``ProxyManager`` automatically adds ``Host: ...`` header if not given. - -* Improved SSL-related code. ``cert_req`` now optionally takes a string like - "REQUIRED" or "NONE". Same with ``ssl_version`` takes strings like "SSLv23" - The string values reflect the suffix of the respective constant variable. - (Issue #130) - -* Vendored ``socksipy`` now based on Anorov's fork which handles unexpectedly - closed proxy connections and larger read buffers. (Issue #135) - -* Ensure the connection is closed if no data is received, fixes connection leak - on some platforms. (Issue #133) - -* Added SNI support for SSL/TLS connections on Py32+. (Issue #89) - -* Tests fixed to be compatible with Py26 again. (Issue #125) - -* Added ability to choose SSL version by passing an ``ssl.PROTOCOL_*`` constant - to the ``ssl_version`` parameter of ``HTTPSConnectionPool``. (Issue #109) - -* Allow an explicit content type to be specified when encoding file fields. - (Issue #126) - -* Exceptions are now pickleable, with tests. (Issue #101) - -* Fixed default headers not getting passed in some cases. (Issue #99) - -* Treat "content-encoding" header value as case-insensitive, per RFC 2616 - Section 3.5. (Issue #110) - -* "Connection Refused" SocketErrors will get retried rather than raised. - (Issue #92) - -* Updated vendored ``six``, no longer overrides the global ``six`` module - namespace. (Issue #113) - -* ``urllib3.exceptions.MaxRetryError`` contains a ``reason`` property holding - the exception that prompted the final retry. If ``reason is None`` then it - was due to a redirect. (Issue #92, #114) - -* Fixed ``PoolManager.urlopen()`` from not redirecting more than once. - (Issue #149) - -* Don't assume ``Content-Type: text/plain`` for multi-part encoding parameters - that are not files. (Issue #111) - -* Pass `strict` param down to ``httplib.HTTPConnection``. (Issue #122) - -* Added mechanism to verify SSL certificates by fingerprint (md5, sha1) or - against an arbitrary hostname (when connecting by IP or for misconfigured - servers). (Issue #140) - -* Streaming decompression support. (Issue #159) - - -1.5 (2012-08-02) ----------------- - -* Added ``urllib3.add_stderr_logger()`` for quickly enabling STDERR debug - logging in urllib3. - -* Native full URL parsing (including auth, path, query, fragment) available in - ``urllib3.util.parse_url(url)``. - -* Built-in redirect will switch method to 'GET' if status code is 303. - (Issue #11) - -* ``urllib3.PoolManager`` strips the scheme and host before sending the request - uri. (Issue #8) - -* New ``urllib3.exceptions.DecodeError`` exception for when automatic decoding, - based on the Content-Type header, fails. - -* Fixed bug with pool depletion and leaking connections (Issue #76). Added - explicit connection closing on pool eviction. Added - ``urllib3.PoolManager.clear()``. - -* 99% -> 100% unit test coverage. - - -1.4 (2012-06-16) ----------------- - -* Minor AppEngine-related fixes. - -* Switched from ``mimetools.choose_boundary`` to ``uuid.uuid4()``. - -* Improved url parsing. (Issue #73) - -* IPv6 url support. (Issue #72) - - -1.3 (2012-03-25) ----------------- - -* Removed pre-1.0 deprecated API. - -* Refactored helpers into a ``urllib3.util`` submodule. - -* Fixed multipart encoding to support list-of-tuples for keys with multiple - values. (Issue #48) - -* Fixed multiple Set-Cookie headers in response not getting merged properly in - Python 3. (Issue #53) - -* AppEngine support with Py27. (Issue #61) - -* Minor ``encode_multipart_formdata`` fixes related to Python 3 strings vs - bytes. - - -1.2.2 (2012-02-06) ------------------- - -* Fixed packaging bug of not shipping ``test-requirements.txt``. (Issue #47) - - -1.2.1 (2012-02-05) ------------------- - -* Fixed another bug related to when ``ssl`` module is not available. (Issue #41) - -* Location parsing errors now raise ``urllib3.exceptions.LocationParseError`` - which inherits from ``ValueError``. - - -1.2 (2012-01-29) ----------------- - -* Added Python 3 support (tested on 3.2.2) - -* Dropped Python 2.5 support (tested on 2.6.7, 2.7.2) - -* Use ``select.poll`` instead of ``select.select`` for platforms that support - it. - -* Use ``Queue.LifoQueue`` instead of ``Queue.Queue`` for more aggressive - connection reusing. Configurable by overriding ``ConnectionPool.QueueCls``. - -* Fixed ``ImportError`` during install when ``ssl`` module is not available. - (Issue #41) - -* Fixed ``PoolManager`` redirects between schemes (such as HTTP -> HTTPS) not - completing properly. (Issue #28, uncovered by Issue #10 in v1.1) - -* Ported ``dummyserver`` to use ``tornado`` instead of ``webob`` + - ``eventlet``. Removed extraneous unsupported dummyserver testing backends. - Added socket-level tests. - -* More tests. Achievement Unlocked: 99% Coverage. - - -1.1 (2012-01-07) ----------------- - -* Refactored ``dummyserver`` to its own root namespace module (used for - testing). - -* Added hostname verification for ``VerifiedHTTPSConnection`` by vendoring in - Py32's ``ssl_match_hostname``. (Issue #25) - -* Fixed cross-host HTTP redirects when using ``PoolManager``. (Issue #10) - -* Fixed ``decode_content`` being ignored when set through ``urlopen``. (Issue - #27) - -* Fixed timeout-related bugs. (Issues #17, #23) - - -1.0.2 (2011-11-04) ------------------- - -* Fixed typo in ``VerifiedHTTPSConnection`` which would only present as a bug if - you're using the object manually. (Thanks pyos) - -* Made RecentlyUsedContainer (and consequently PoolManager) more thread-safe by - wrapping the access log in a mutex. (Thanks @christer) - -* Made RecentlyUsedContainer more dict-like (corrected ``__delitem__`` and - ``__getitem__`` behaviour), with tests. Shouldn't affect core urllib3 code. - - -1.0.1 (2011-10-10) ------------------- - -* Fixed a bug where the same connection would get returned into the pool twice, - causing extraneous "HttpConnectionPool is full" log warnings. - - -1.0 (2011-10-08) ----------------- - -* Added ``PoolManager`` with LRU expiration of connections (tested and - documented). -* Added ``ProxyManager`` (needs tests, docs, and confirmation that it works - with HTTPS proxies). -* Added optional partial-read support for responses when - ``preload_content=False``. You can now make requests and just read the headers - without loading the content. -* Made response decoding optional (default on, same as before). -* Added optional explicit boundary string for ``encode_multipart_formdata``. -* Convenience request methods are now inherited from ``RequestMethods``. Old - helpers like ``get_url`` and ``post_url`` should be abandoned in favour of - the new ``request(method, url, ...)``. -* Refactored code to be even more decoupled, reusable, and extendable. -* License header added to ``.py`` files. -* Embiggened the documentation: Lots of Sphinx-friendly docstrings in the code - and docs in ``docs/`` and on https://urllib3.readthedocs.io/. -* Embettered all the things! -* Started writing this file. - - -0.4.1 (2011-07-17) ------------------- - -* Minor bug fixes, code cleanup. - - -0.4 (2011-03-01) ----------------- - -* Better unicode support. -* Added ``VerifiedHTTPSConnection``. -* Added ``NTLMConnectionPool`` in contrib. -* Minor improvements. - - -0.3.1 (2010-07-13) ------------------- - -* Added ``assert_host_name`` optional parameter. Now compatible with proxies. - - -0.3 (2009-12-10) ----------------- - -* Added HTTPS support. -* Minor bug fixes. -* Refactored, broken backwards compatibility with 0.2. -* API to be treated as stable from this version forward. - - -0.2 (2008-11-17) ----------------- - -* Added unit tests. -* Bug fixes. - - -0.1 (2008-11-16) ----------------- - -* First release. - - diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/RECORD b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/RECORD deleted file mode 100644 index f9c3df2..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/RECORD +++ /dev/null @@ -1,80 +0,0 @@ -urllib3/__init__.py,sha256=DZucS8tlzGYKmK5FIsyUViMghpCq_0_0Ouvm_Jp9GNc,2853 -urllib3/_collections.py,sha256=iNeAU_we9L3lMGRUKKdq24Mf7o050TXP5U4Jm9AzAY4,10841 -urllib3/connection.py,sha256=My76qeWMDkV-KP1l3iChXHOE7J-ZCaUdP3sPIiLA2uE,14485 -urllib3/connectionpool.py,sha256=w20OwKdIqk6f8FIl6QGgn6jf9gZ0-tmgH7VPxnpEgkQ,35464 -urllib3/exceptions.py,sha256=rFeIfBNKC8KJ61ux-MtJyJlEC9G9ggkmCeF751JwVR4,6604 -urllib3/fields.py,sha256=D_TE_SK15YatdbhWDMN0OE3X6UCJn1RTkANINCYOobE,5943 -urllib3/filepost.py,sha256=40CROlpRKVBpFUkD0R6wJf_PpvbcRQRFUu0OOQlFkKM,2436 -urllib3/poolmanager.py,sha256=FHBjb7odbP2LyQRzeitgpuh1AQAPyegzmrm2b3gSZlY,16821 -urllib3/request.py,sha256=fwjlq5nQfcUa7aoncR25z6-fJAX_oNTcPksKKGjBm38,5996 -urllib3/response.py,sha256=uAuOTZSuTodzvQWIDCZghDoKmZ2bKbgIRCfaVIIZfn8,24667 -urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -urllib3/contrib/appengine.py,sha256=GwC8G9RhBHMsW_szXCUj0Fxg-s58fwaUy1I9QWdsn6o,11173 -urllib3/contrib/ntlmpool.py,sha256=Q9-rO5Rh2-IqyEd4ZicpTDfMnOlf0IPPCkjhChBCjV4,4478 -urllib3/contrib/pyopenssl.py,sha256=NRLCyMHt-POP6ZajpsyH4BrJQy2DaevXWVXZlebcSxE,15463 -urllib3/contrib/securetransport.py,sha256=BqXSlChN9_hjCWgyN6JdcgvBUdc37QCCX4u3_8zE_9o,30309 -urllib3/contrib/socks.py,sha256=Iom0snbHkCuZbZ7Sle2Kueha1W0jYAJ0SyCOtePLaio,6391 -urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -urllib3/contrib/_securetransport/bindings.py,sha256=x2kLSh-ASZKsun0FxtraBuLVe3oHuth4YW6yZ5Vof-w,17560 -urllib3/contrib/_securetransport/low_level.py,sha256=Umy5u-3Z957GirdapnicXVOpHaM4xdOZABJuJxfaeJA,12162 -urllib3/packages/__init__.py,sha256=nlChrGzkjCkmhCX9HrF_qHPUgosfsPQkVIJxiiLhk9g,109 -urllib3/packages/ordered_dict.py,sha256=VQaPONfhVMsb8B63Xg7ZOydJqIE_jzeMhVN3Pec6ogw,8935 -urllib3/packages/six.py,sha256=A6hdJZVjI3t_geebZ9BzUvwRrIXo0lfwzQlM2LcKyas,30098 -urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -urllib3/packages/backports/makefile.py,sha256=r1IADol_pBBq2Y1ub4CPyuS2hXuShK47nfFngZRcRhI,1461 -urllib3/packages/ssl_match_hostname/__init__.py,sha256=WBVbxQBojNAxfZwNavkox3BgJiMA9BJmm-_fwd0jD_o,688 -urllib3/packages/ssl_match_hostname/_implementation.py,sha256=lAj7qGCZLOldhn8gZDY6Tqp4mvgkbTfy4k4gDIDRo8g,5702 -urllib3/util/__init__.py,sha256=6Ran4oAVIy40Cu_oEPWnNV9bwF5rXx6G1DUZ7oehjPY,1044 -urllib3/util/connection.py,sha256=8K1VXm8BHsM3QATJJGBNRa_MStkzDy1Da2IaPAaCU8c,4279 -urllib3/util/queue.py,sha256=myTX3JDHntglKQNBf3b6dasHH-uF-W59vzGSQiFdAfI,497 -urllib3/util/request.py,sha256=H5_lrHvtwl2U2BbT1UYN9HpruNc1gsNFlz2njQmhPrQ,3705 -urllib3/util/response.py,sha256=SSNL888W-MQ8t3HAi44kNGgF682p6H__ytEXzBYxV_M,2343 -urllib3/util/retry.py,sha256=tlxiEq8OU2BSenPpPjYYO1URne8A-qTEgaykam6rZPg,15104 -urllib3/util/ssl_.py,sha256=ZGaPQcKYMqza6vUl54JygUD5XcI0p9dxFwUx8k7sCBw,13993 -urllib3/util/timeout.py,sha256=7lHNrgL5YH2cI1j-yZnzV_J8jBlRVdmFhQaNyM1_2b8,9757 -urllib3/util/url.py,sha256=qCY_HHUXvo05wAsEERALgExtlgxLnAHSQ7ce1b-g3SM,6487 -urllib3/util/wait.py,sha256=_4vvsT1BTTpqxQYK-2kXVfGsUsVRiuc4R4F-0Bf5BPc,5468 -urllib3-1.23.dist-info/DESCRIPTION.rst,sha256=wO8oxz5hJse8PFH1eQZYnHHZqjsEGFRoHEsfUVbhYJQ,32311 -urllib3-1.23.dist-info/LICENSE.txt,sha256=EdtWlDDKWteT8TmSl7jfUEGiITerr5BkLqcdoh1ZEhw,1175 -urllib3-1.23.dist-info/METADATA,sha256=9Vnr4PogOR0NNBWZRy4LcVITPbFmvbaM-p5jDjKVjLA,34050 -urllib3-1.23.dist-info/RECORD,, -urllib3-1.23.dist-info/WHEEL,sha256=o2k-Qa-RMNIJmUdIc7KU6VWR_ErNRbWNlxDIpl7lm34,110 -urllib3-1.23.dist-info/metadata.json,sha256=84gnKX3kpTNkp5zA5zaidVW3qHwJaE3YFJbbdKCPTNg,1879 -urllib3-1.23.dist-info/top_level.txt,sha256=EMiXL2sKrTcmrMxIHTqdc3ET54pQI2Y072LexFEemvo,8 -urllib3-1.23.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -urllib3/util/__pycache__/url.cpython-36.pyc,, -urllib3/util/__pycache__/request.cpython-36.pyc,, -urllib3/util/__pycache__/__init__.cpython-36.pyc,, -urllib3/util/__pycache__/connection.cpython-36.pyc,, -urllib3/util/__pycache__/response.cpython-36.pyc,, -urllib3/util/__pycache__/retry.cpython-36.pyc,, -urllib3/util/__pycache__/ssl_.cpython-36.pyc,, -urllib3/util/__pycache__/timeout.cpython-36.pyc,, -urllib3/util/__pycache__/wait.cpython-36.pyc,, -urllib3/util/__pycache__/queue.cpython-36.pyc,, -urllib3/packages/ssl_match_hostname/__pycache__/_implementation.cpython-36.pyc,, -urllib3/packages/ssl_match_hostname/__pycache__/__init__.cpython-36.pyc,, -urllib3/packages/backports/__pycache__/__init__.cpython-36.pyc,, -urllib3/packages/backports/__pycache__/makefile.cpython-36.pyc,, -urllib3/packages/__pycache__/ordered_dict.cpython-36.pyc,, -urllib3/packages/__pycache__/__init__.cpython-36.pyc,, -urllib3/packages/__pycache__/six.cpython-36.pyc,, -urllib3/__pycache__/request.cpython-36.pyc,, -urllib3/__pycache__/fields.cpython-36.pyc,, -urllib3/__pycache__/__init__.cpython-36.pyc,, -urllib3/__pycache__/connection.cpython-36.pyc,, -urllib3/__pycache__/response.cpython-36.pyc,, -urllib3/__pycache__/_collections.cpython-36.pyc,, -urllib3/__pycache__/connectionpool.cpython-36.pyc,, -urllib3/__pycache__/exceptions.cpython-36.pyc,, -urllib3/__pycache__/poolmanager.cpython-36.pyc,, -urllib3/__pycache__/filepost.cpython-36.pyc,, -urllib3/contrib/_securetransport/__pycache__/low_level.cpython-36.pyc,, -urllib3/contrib/_securetransport/__pycache__/__init__.cpython-36.pyc,, -urllib3/contrib/_securetransport/__pycache__/bindings.cpython-36.pyc,, -urllib3/contrib/__pycache__/ntlmpool.cpython-36.pyc,, -urllib3/contrib/__pycache__/__init__.cpython-36.pyc,, -urllib3/contrib/__pycache__/socks.cpython-36.pyc,, -urllib3/contrib/__pycache__/securetransport.cpython-36.pyc,, -urllib3/contrib/__pycache__/appengine.cpython-36.pyc,, -urllib3/contrib/__pycache__/pyopenssl.cpython-36.pyc,, diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/WHEEL b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/WHEEL deleted file mode 100755 index 8b6dd1b..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.29.0) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/metadata.json b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/metadata.json deleted file mode 100755 index 5bf347c..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/metadata.json +++ /dev/null @@ -1 +0,0 @@ -{"classifiers": ["Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries"], "extensions": {"python.details": {"contacts": [{"email": "andrey.petrov@shazow.net", "name": "Andrey Petrov", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}, "project_urls": {"Home": "https://urllib3.readthedocs.io/"}}}, "extras": ["secure", "socks"], "generator": "bdist_wheel (0.29.0)", "keywords": ["urllib", "httplib", "threadsafe", "filepost", "http", "https", "ssl", "pooling"], "license": "MIT", "metadata_version": "2.0", "name": "urllib3", "requires_python": ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "run_requires": [{"extra": "socks", "requires": ["PySocks>=1.5.6,<2.0,!=1.5.7"]}, {"extra": "secure", "requires": ["certifi"]}, {"environment": "python_version<=\"2.7\"", "extra": "secure", "requires": ["cryptography>=1.3.4", "idna>=2.0.0", "ipaddress"]}, {"environment": "python_version==\"2.6\"", "extra": "secure", "requires": ["pyOpenSSL>=0.14,<18.0.0"]}, {"environment": "python_version==\"2.7\"", "extra": "secure", "requires": ["pyOpenSSL>=0.14"]}], "summary": "HTTP library with thread-safe connection pooling, file post, and more.", "test_requires": [{"requires": ["mock", "pytest", "tornado"]}], "version": "1.23"} \ No newline at end of file diff --git a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/top_level.txt b/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/top_level.txt deleted file mode 100755 index a42590b..0000000 --- a/venv/lib/python3.6/site-packages/urllib3-1.23.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -urllib3 diff --git a/venv/lib/python3.6/site-packages/urllib3/__init__.py b/venv/lib/python3.6/site-packages/urllib3/__init__.py deleted file mode 100755 index 4bd533b..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/__init__.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -urllib3 - Thread-safe connection pooling and re-using. -""" - -from __future__ import absolute_import -import warnings - -from .connectionpool import ( - HTTPConnectionPool, - HTTPSConnectionPool, - connection_from_url -) - -from . import exceptions -from .filepost import encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import HTTPResponse -from .util.request import make_headers -from .util.url import get_host -from .util.timeout import Timeout -from .util.retry import Retry - - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -__author__ = 'Andrey Petrov (andrey.petrov@shazow.net)' -__license__ = 'MIT' -__version__ = '1.23' - -__all__ = ( - 'HTTPConnectionPool', - 'HTTPSConnectionPool', - 'PoolManager', - 'ProxyManager', - 'HTTPResponse', - 'Retry', - 'Timeout', - 'add_stderr_logger', - 'connection_from_url', - 'disable_warnings', - 'encode_multipart_formdata', - 'get_host', - 'make_headers', - 'proxy_from_url', -) - -logging.getLogger(__name__).addHandler(NullHandler()) - - -def add_stderr_logger(level=logging.DEBUG): - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s')) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug('Added a stderr logging handler to logger: %s', __name__) - return handler - - -# ... Clean up. -del NullHandler - - -# All warning filters *must* be appended unless you're really certain that they -# shouldn't be: otherwise, it's very hard for users to use most Python -# mechanisms to silence them. -# SecurityWarning's always go off by default. -warnings.simplefilter('always', exceptions.SecurityWarning, append=True) -# SubjectAltNameWarning's should go off once per host -warnings.simplefilter('default', exceptions.SubjectAltNameWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter('default', exceptions.InsecurePlatformWarning, - append=True) -# SNIMissingWarnings should go off only once. -warnings.simplefilter('default', exceptions.SNIMissingWarning, append=True) - - -def disable_warnings(category=exceptions.HTTPWarning): - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter('ignore', category) diff --git a/venv/lib/python3.6/site-packages/urllib3/_collections.py b/venv/lib/python3.6/site-packages/urllib3/_collections.py deleted file mode 100755 index 6e36b84..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/_collections.py +++ /dev/null @@ -1,332 +0,0 @@ -from __future__ import absolute_import -try: - from collections.abc import Mapping, MutableMapping -except ImportError: - from collections import Mapping, MutableMapping -try: - from threading import RLock -except ImportError: # Platform-specific: No threads available - class RLock: - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - - -try: # Python 2.7+ - from collections import OrderedDict -except ImportError: - from .packages.ordered_dict import OrderedDict -from .exceptions import InvalidHeader -from .packages.six import iterkeys, itervalues, PY3 - - -__all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict'] - - -_Null = object() - - -class RecentlyUsedContainer(MutableMapping): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - ContainerCls = OrderedDict - - def __init__(self, maxsize=10, dispose_func=None): - self._maxsize = maxsize - self.dispose_func = dispose_func - - self._container = self.ContainerCls() - self.lock = RLock() - - def __getitem__(self, key): - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key, value): - evicted_value = _Null - with self.lock: - # Possibly evict the existing value of 'key' - evicted_value = self._container.get(key, _Null) - self._container[key] = value - - # If we didn't evict an existing value, we might have to evict the - # least recently used item from the beginning of the container. - if len(self._container) > self._maxsize: - _key, evicted_value = self._container.popitem(last=False) - - if self.dispose_func and evicted_value is not _Null: - self.dispose_func(evicted_value) - - def __delitem__(self, key): - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self): - with self.lock: - return len(self._container) - - def __iter__(self): - raise NotImplementedError('Iteration over this class is unlikely to be threadsafe.') - - def clear(self): - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(itervalues(self._container)) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self): - with self.lock: - return list(iterkeys(self._container)) - - -class HTTPHeaderDict(MutableMapping): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - def __init__(self, headers=None, **kwargs): - super(HTTPHeaderDict, self).__init__() - self._container = OrderedDict() - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key, val): - self._container[key.lower()] = [key, val] - return self._container[key.lower()] - - def __getitem__(self, key): - val = self._container[key.lower()] - return ', '.join(val[1:]) - - def __delitem__(self, key): - del self._container[key.lower()] - - def __contains__(self, key): - return key.lower() in self._container - - def __eq__(self, other): - if not isinstance(other, Mapping) and not hasattr(other, 'keys'): - return False - if not isinstance(other, type(self)): - other = type(self)(other) - return (dict((k.lower(), v) for k, v in self.itermerged()) == - dict((k.lower(), v) for k, v in other.itermerged())) - - def __ne__(self, other): - return not self.__eq__(other) - - if not PY3: # Python 2 - iterkeys = MutableMapping.iterkeys - itervalues = MutableMapping.itervalues - - __marker = object() - - def __len__(self): - return len(self._container) - - def __iter__(self): - # Only provide the originally cased names - for vals in self._container.values(): - yield vals[0] - - def pop(self, key, default=__marker): - '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - ''' - # Using the MutableMapping function directly fails due to the private marker. - # Using ordinary dict.pop would expose the internal structures. - # So let's reinvent the wheel. - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def discard(self, key): - try: - del self[key] - except KeyError: - pass - - def add(self, key, val): - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - """ - key_lower = key.lower() - new_vals = [key, val] - # Keep the common case aka no item present as fast as possible - vals = self._container.setdefault(key_lower, new_vals) - if new_vals is not vals: - vals.append(val) - - def extend(self, *args, **kwargs): - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError("extend() takes at most 1 positional " - "arguments ({0} given)".format(len(args))) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, Mapping): - for key in other: - self.add(key, other[key]) - elif hasattr(other, "keys"): - for key in other.keys(): - self.add(key, other[key]) - else: - for key, value in other: - self.add(key, value) - - for key, value in kwargs.items(): - self.add(key, value) - - def getlist(self, key, default=__marker): - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - try: - vals = self._container[key.lower()] - except KeyError: - if default is self.__marker: - return [] - return default - else: - return vals[1:] - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - # Backwards compatibility for http.cookiejar - get_all = getlist - - def __repr__(self): - return "%s(%s)" % (type(self).__name__, dict(self.itermerged())) - - def _copy_from(self, other): - for key in other: - val = other.getlist(key) - if isinstance(val, list): - # Don't need to convert tuples - val = list(val) - self._container[key.lower()] = [key] + val - - def copy(self): - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self): - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = self._container[key.lower()] - for val in vals[1:]: - yield vals[0], val - - def itermerged(self): - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = self._container[key.lower()] - yield val[0], ', '.join(val[1:]) - - def items(self): - return list(self.iteritems()) - - @classmethod - def from_httplib(cls, message): # Python 2 - """Read headers from a Python 2 httplib message object.""" - # python2.7 does not expose a proper API for exporting multiheaders - # efficiently. This function re-reads raw lines from the message - # object and extracts the multiheaders properly. - obs_fold_continued_leaders = (' ', '\t') - headers = [] - - for line in message.headers: - if line.startswith(obs_fold_continued_leaders): - if not headers: - # We received a header line that starts with OWS as described - # in RFC-7230 S3.2.4. This indicates a multiline header, but - # there exists no previous header to which we can attach it. - raise InvalidHeader( - 'Header continuation with no previous header: %s' % line - ) - else: - key, value = headers[-1] - headers[-1] = (key, value + ' ' + line.strip()) - continue - - key, value = line.split(':', 1) - headers.append((key, value.strip())) - - return cls(headers) diff --git a/venv/lib/python3.6/site-packages/urllib3/connection.py b/venv/lib/python3.6/site-packages/urllib3/connection.py deleted file mode 100755 index a03b573..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/connection.py +++ /dev/null @@ -1,403 +0,0 @@ -from __future__ import absolute_import -import datetime -import logging -import os -import sys -import socket -from socket import error as SocketError, timeout as SocketTimeout -import warnings -from .packages import six -from .packages.six.moves.http_client import HTTPConnection as _HTTPConnection -from .packages.six.moves.http_client import HTTPException # noqa: F401 - -try: # Compiled with SSL? - import ssl - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): # Platform-specific: No SSL. - ssl = None - - class BaseSSLError(BaseException): - pass - - -try: # Python 3: - # Not a no-op, we're adding this to the namespace so it can be imported. - ConnectionError = ConnectionError -except NameError: # Python 2: - class ConnectionError(Exception): - pass - - -from .exceptions import ( - NewConnectionError, - ConnectTimeoutError, - SubjectAltNameWarning, - SystemTimeWarning, -) -from .packages.ssl_match_hostname import match_hostname, CertificateError - -from .util.ssl_ import ( - resolve_cert_reqs, - resolve_ssl_version, - assert_fingerprint, - create_urllib3_context, - ssl_wrap_socket -) - - -from .util import connection - -from ._collections import HTTPHeaderDict - -log = logging.getLogger(__name__) - -port_by_scheme = { - 'http': 80, - 'https': 443, -} - -# When updating RECENT_DATE, move it to within two years of the current date, -# and not less than 6 months ago. -# Example: if Today is 2018-01-01, then RECENT_DATE should be any date on or -# after 2016-01-01 (today - 2 years) AND before 2017-07-01 (today - 6 months) -RECENT_DATE = datetime.date(2017, 6, 30) - - -class DummyConnection(object): - """Used to detect a failed ConnectionCls import.""" - pass - - -class HTTPConnection(_HTTPConnection, object): - """ - Based on httplib.HTTPConnection but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool` - - ``source_address``: Set the source address for the current connection. - - .. note:: This is ignored for Python 2.6. It is only applied for 2.7 and 3.x - - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass:: - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port = port_by_scheme['http'] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] - - #: Whether this connection verifies the host's certificate. - is_verified = False - - def __init__(self, *args, **kw): - if six.PY3: # Python 3 - kw.pop('strict', None) - - # Pre-set source_address in case we have an older Python like 2.6. - self.source_address = kw.get('source_address') - - if sys.version_info < (2, 7): # Python 2.6 - # _HTTPConnection on Python 2.6 will balk at this keyword arg, but - # not newer versions. We can still use it when creating a - # connection though, so we pop it *after* we have saved it as - # self.source_address. - kw.pop('source_address', None) - - #: The socket options provided by the user. If no options are - #: provided, we use the default options. - self.socket_options = kw.pop('socket_options', self.default_socket_options) - - # Superclass also sets self.source_address in Python 2.7+. - _HTTPConnection.__init__(self, *args, **kw) - - @property - def host(self): - """ - Getter method to remove any trailing dots that indicate the hostname is an FQDN. - - In general, SSL certificates don't include the trailing dot indicating a - fully-qualified domain name, and thus, they don't validate properly when - checked against a domain name that includes the dot. In addition, some - servers may not expect to receive the trailing dot when provided. - - However, the hostname with trailing dot is critical to DNS resolution; doing a - lookup with the trailing dot will properly only resolve the appropriate FQDN, - whereas a lookup without a trailing dot will search the system's search domain - list. Thus, it's important to keep the original host around for use only in - those cases where it's appropriate (i.e., when doing DNS lookup to establish the - actual TCP connection across which we're going to send HTTP requests). - """ - return self._dns_host.rstrip('.') - - @host.setter - def host(self, value): - """ - Setter for the `host` property. - - We assume that only urllib3 uses the _dns_host attribute; httplib itself - only uses `host`, and it seems reasonable that other libraries follow suit. - """ - self._dns_host = value - - def _new_conn(self): - """ Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = connection.create_connection( - (self._dns_host, self.port), self.timeout, **extra_kw) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - except SocketError as e: - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e) - - return conn - - def _prepare_conn(self, conn): - self.sock = conn - # the _tunnel_host attribute was added in python 2.6.3 (via - # http://hg.python.org/cpython/rev/0f57b30a152f) so pythons 2.6(0-2) do - # not have them. - if getattr(self, '_tunnel_host', None): - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - def request_chunked(self, method, url, body=None, headers=None): - """ - Alternative to the common request method, which sends the - body with chunked encoding and not as one block - """ - headers = HTTPHeaderDict(headers if headers is not None else {}) - skip_accept_encoding = 'accept-encoding' in headers - skip_host = 'host' in headers - self.putrequest( - method, - url, - skip_accept_encoding=skip_accept_encoding, - skip_host=skip_host - ) - for header, value in headers.items(): - self.putheader(header, value) - if 'transfer-encoding' not in headers: - self.putheader('Transfer-Encoding', 'chunked') - self.endheaders() - - if body is not None: - stringish_types = six.string_types + (six.binary_type,) - if isinstance(body, stringish_types): - body = (body,) - for chunk in body: - if not chunk: - continue - if not isinstance(chunk, six.binary_type): - chunk = chunk.encode('utf8') - len_str = hex(len(chunk))[2:] - self.send(len_str.encode('utf-8')) - self.send(b'\r\n') - self.send(chunk) - self.send(b'\r\n') - - # After the if clause, to always have a closed body - self.send(b'0\r\n\r\n') - - -class HTTPSConnection(HTTPConnection): - default_port = port_by_scheme['https'] - - ssl_version = None - - def __init__(self, host, port=None, key_file=None, cert_file=None, - strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - ssl_context=None, **kw): - - HTTPConnection.__init__(self, host, port, strict=strict, - timeout=timeout, **kw) - - self.key_file = key_file - self.cert_file = cert_file - self.ssl_context = ssl_context - - # Required property for Google AppEngine 1.9.0 which otherwise causes - # HTTPS requests to go out as HTTP. (See Issue #356) - self._protocol = 'https' - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - if self.ssl_context is None: - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(None), - cert_reqs=resolve_cert_reqs(None), - ) - - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - ssl_context=self.ssl_context, - ) - - -class VerifiedHTTPSConnection(HTTPSConnection): - """ - Based on httplib.HTTPSConnection but wraps the socket with - SSL certification. - """ - cert_reqs = None - ca_certs = None - ca_cert_dir = None - ssl_version = None - assert_fingerprint = None - - def set_cert(self, key_file=None, cert_file=None, - cert_reqs=None, ca_certs=None, - assert_hostname=None, assert_fingerprint=None, - ca_cert_dir=None): - """ - This method should only be called once, before the connection is used. - """ - # If cert_reqs is not provided, we can try to guess. If the user gave - # us a cert database, we assume they want to use it: otherwise, if - # they gave us an SSL Context object we should use whatever is set for - # it. - if cert_reqs is None: - if ca_certs or ca_cert_dir: - cert_reqs = 'CERT_REQUIRED' - elif self.ssl_context is not None: - cert_reqs = self.ssl_context.verify_mode - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - self.ca_certs = ca_certs and os.path.expanduser(ca_certs) - self.ca_cert_dir = ca_cert_dir and os.path.expanduser(ca_cert_dir) - - def connect(self): - # Add certificate verification - conn = self._new_conn() - - hostname = self.host - if getattr(self, '_tunnel_host', None): - # _tunnel_host was added in Python 2.6.3 - # (See: http://hg.python.org/cpython/rev/0f57b30a152f) - - self.sock = conn - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn(( - 'System time is way off (before {0}). This will probably ' - 'lead to SSL verification errors').format(RECENT_DATE), - SystemTimeWarning - ) - - # Wrap socket using verification with the root certs in - # trusted_root_certs - if self.ssl_context is None: - self.ssl_context = create_urllib3_context( - ssl_version=resolve_ssl_version(self.ssl_version), - cert_reqs=resolve_cert_reqs(self.cert_reqs), - ) - - context = self.ssl_context - context.verify_mode = resolve_cert_reqs(self.cert_reqs) - self.sock = ssl_wrap_socket( - sock=conn, - keyfile=self.key_file, - certfile=self.cert_file, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - server_hostname=hostname, - ssl_context=context) - - if self.assert_fingerprint: - assert_fingerprint(self.sock.getpeercert(binary_form=True), - self.assert_fingerprint) - elif context.verify_mode != ssl.CERT_NONE \ - and not getattr(context, 'check_hostname', False) \ - and self.assert_hostname is not False: - # While urllib3 attempts to always turn off hostname matching from - # the TLS library, this cannot always be done. So we check whether - # the TLS Library still thinks it's matching hostnames. - cert = self.sock.getpeercert() - if not cert.get('subjectAltName', ()): - warnings.warn(( - 'Certificate for {0} has no `subjectAltName`, falling back to check for a ' - '`commonName` for now. This feature is being removed by major browsers and ' - 'deprecated by RFC 2818. (See https://github.com/shazow/urllib3/issues/497 ' - 'for details.)'.format(hostname)), - SubjectAltNameWarning - ) - _match_hostname(cert, self.assert_hostname or hostname) - - self.is_verified = ( - context.verify_mode == ssl.CERT_REQUIRED or - self.assert_fingerprint is not None - ) - - -def _match_hostname(cert, asserted_hostname): - try: - match_hostname(cert, asserted_hostname) - except CertificateError as e: - log.error( - 'Certificate did not match expected hostname: %s. ' - 'Certificate: %s', asserted_hostname, cert - ) - # Add cert to exception and reraise so client code can inspect - # the cert when catching the exception, if they want to - e._peer_cert = cert - raise - - -if ssl: - # Make a copy for testing. - UnverifiedHTTPSConnection = HTTPSConnection - HTTPSConnection = VerifiedHTTPSConnection -else: - HTTPSConnection = DummyConnection diff --git a/venv/lib/python3.6/site-packages/urllib3/connectionpool.py b/venv/lib/python3.6/site-packages/urllib3/connectionpool.py deleted file mode 100755 index 8fcb0bc..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/connectionpool.py +++ /dev/null @@ -1,906 +0,0 @@ -from __future__ import absolute_import -import errno -import logging -import sys -import warnings - -from socket import error as SocketError, timeout as SocketTimeout -import socket - - -from .exceptions import ( - ClosedPoolError, - ProtocolError, - EmptyPoolError, - HeaderParsingError, - HostChangedError, - LocationValueError, - MaxRetryError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, - InsecureRequestWarning, - NewConnectionError, -) -from .packages.ssl_match_hostname import CertificateError -from .packages import six -from .packages.six.moves import queue -from .connection import ( - port_by_scheme, - DummyConnection, - HTTPConnection, HTTPSConnection, VerifiedHTTPSConnection, - HTTPException, BaseSSLError, -) -from .request import RequestMethods -from .response import HTTPResponse - -from .util.connection import is_connection_dropped -from .util.request import set_file_position -from .util.response import assert_header_parsing -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import get_host, Url, NORMALIZABLE_SCHEMES -from .util.queue import LifoQueue - - -xrange = six.moves.xrange - -log = logging.getLogger(__name__) - -_Default = object() - - -# Pool objects -class ConnectionPool(object): - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - """ - - scheme = None - QueueCls = LifoQueue - - def __init__(self, host, port=None): - if not host: - raise LocationValueError("No host specified.") - - self.host = _ipv6_host(host, self.scheme) - self._proxy_host = host.lower() - self.port = port - - def __str__(self): - return '%s(host=%r, port=%r)' % (type(self).__name__, - self.host, self.port) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - pass - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = set([errno.EAGAIN, errno.EWOULDBLOCK]) - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`httplib.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`httplib.HTTPConnection`. - - :param strict: - Causes BadStatusLine to be raised if the status line can't be parsed - as a valid HTTP/1.0 or 1.1 status line, passed into - :class:`httplib.HTTPConnection`. - - .. note:: - Only works in Python 2. This parameter is ignored in Python 3. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to False, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.connectionpool.ProxyManager`" - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.connectionpool.ProxyManager`" - - :param \\**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = 'http' - ConnectionCls = HTTPConnection - ResponseCls = HTTPResponse - - def __init__(self, host, port=None, strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, block=False, - headers=None, retries=None, - _proxy=None, _proxy_headers=None, - **conn_kw): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - self.strict = strict - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - - # Fill the queue up so that doing get() on it will block properly - for _ in xrange(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault('socket_options', []) - - def _new_conn(self): - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.debug("Starting new HTTP connection (%d): %s:%s", - self.num_connections, self.host, self.port or "80") - - conn = self.ConnectionCls(host=self.host, port=self.port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - return conn - - def _get_conn(self, timeout=None): - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") - - except queue.Empty: - if self.block: - raise EmptyPoolError(self, - "Pool reached maximum size and no more " - "connections are allowed.") - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.debug("Resetting dropped connection: %s", self.host) - conn.close() - if getattr(conn, 'auto_open', 1) == 0: - # This is a proxied connection that has been mutated by - # httplib._tunnel() and cannot be reused (since it would - # attempt to bypass the proxy) - conn = None - - return conn or self._new_conn() - - def _put_conn(self, conn): - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except queue.Full: - # This should never happen if self.block == True - log.warning( - "Connection pool is full, discarding connection: %s", - self.host) - - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - pass - - def _prepare_proxy(self, conn): - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout): - """ Helper that always returns a :class:`urllib3.util.Timeout` """ - if timeout is _Default: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout(self, err, url, timeout_value): - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # See the above comment about EAGAIN in Python 3. In Python 2 we have - # to specifically catch it and throw the timeout error - if hasattr(err, 'errno') and err.errno in _blocking_errnos: - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # Catch possible read timeouts thrown as SSL errors. If not the - # case, rethrow the original. We need to do this because of: - # http://bugs.python.org/issue10272 - if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6 - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - def _make_request(self, conn, method, url, timeout=_Default, chunked=False, - **httplib_request_kw): - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param timeout: - Socket timeout in seconds for the request. This can be a - float or integer, which will set the same timeout value for - the socket connect and the socket read, or an instance of - :class:`urllib3.util.Timeout`, which gives you more fine-grained - control over your timeouts. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = timeout_obj.connect_timeout - - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # conn.request() calls httplib.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - if chunked: - conn.request_chunked(method, url, **httplib_request_kw) - else: - conn.request(method, url, **httplib_request_kw) - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - # App Engine doesn't have a sock attr - if getattr(conn, 'sock', None): - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % read_timeout) - if read_timeout is Timeout.DEFAULT_TIMEOUT: - conn.sock.settimeout(socket.getdefaulttimeout()) - else: # None or a value - conn.sock.settimeout(read_timeout) - - # Receive the response from the server - try: - try: # Python 2.7, use buffering of HTTP responses - httplib_response = conn.getresponse(buffering=True) - except TypeError: # Python 2.6 and older, Python 3 - try: - httplib_response = conn.getresponse() - except Exception as e: - # Remove the TypeError from the exception chain in Python 3; - # otherwise it looks like a programming error was the cause. - six.raise_from(e, None) - except (SocketTimeout, BaseSSLError, SocketError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # AppEngine doesn't have a version attr. - http_version = getattr(conn, '_http_vsn_str', 'HTTP/?') - log.debug("%s://%s:%s \"%s %s %s\" %s %s", self.scheme, self.host, self.port, - method, url, http_version, httplib_response.status, - httplib_response.length) - - try: - assert_header_parsing(httplib_response.msg) - except (HeaderParsingError, TypeError) as hpe: # Platform-specific: Python 3 - log.warning( - 'Failed to parse headers (url=%s): %s', - self._absolute_url(url), hpe, exc_info=True) - - return httplib_response - - def _absolute_url(self, path): - return Url(scheme=self.scheme, host=self.host, port=self.port, path=path).url - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - if self.pool is None: - return - # Disable access to the pool - old_pool, self.pool = self.pool, None - - try: - while True: - conn = old_pool.get(block=False) - if conn: - conn.close() - - except queue.Empty: - pass # Done. - - def is_same_host(self, url): - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith('/'): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, host, port = get_host(url) - - host = _ipv6_host(host, self.scheme) - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen(self, method, url, body=None, headers=None, retries=None, - redirect=True, assert_same_host=True, timeout=_Default, - pool_timeout=None, release_conn=None, chunked=False, - body_pos=None, **response_kw): - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method provided - by :class:`.RequestMethods`, such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param body: - Data to send in the request body (useful for creating - POST requests, see HTTPConnectionPool.post_url for - more convenience). - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When False, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of - ``response_kw.get('preload_content', True)``. - - :param chunked: - If True, urllib3 will send the body using chunked transfer - encoding. Otherwise, urllib3 will send the body using the standard - content-length form. Defaults to False. - - :param int body_pos: - Position to seek to in file-like body in the event of a retry or - redirect. Typically this won't need to be set because urllib3 will - auto-populate the value when needed. - - :param \\**response_kw: - Additional parameters are passed to - :meth:`urllib3.response.HTTPResponse.from_httplib` - """ - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = response_kw.get('preload_content', True) - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - conn = None - - # Track whether `conn` needs to be released before - # returning/raising/recursing. Update this variable if necessary, and - # leave `release_conn` constant throughout the function. That way, if - # the function recurses, the original value of `release_conn` will be - # passed down into the recursive call, and its value will be respected. - # - # See issue #651 [1] for details. - # - # [1] <https://github.com/shazow/urllib3/issues/651> - release_this_conn = release_conn - - # Merge the proxy headers. Only do this in HTTP. We have to copy the - # headers dict so we can safely change it without those changes being - # reflected in anyone else's copy. - if self.scheme == 'http': - headers = headers.copy() - headers.update(self.proxy_headers) - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - # Keep track of whether we cleanly exited the except block. This - # ensures we do proper cleanup in finally. - clean_exit = False - - # Rewind body position, if needed. Record current position - # for future rewinds in the event of a redirect/retry. - body_pos = set_file_position(body, body_pos) - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout - - is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None) - if is_new_proxy_conn: - self._prepare_proxy(conn) - - # Make the request on the httplib connection object. - httplib_response = self._make_request(conn, method, url, - timeout=timeout_obj, - body=body, headers=headers, - chunked=chunked) - - # If we're going to release the connection in ``finally:``, then - # the response doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = conn if not release_conn else None - - # Pass method to Response for length checking - response_kw['request_method'] = method - - # Import httplib's response into our own wrapper object - response = self.ResponseCls.from_httplib(httplib_response, - pool=self, - connection=response_conn, - retries=retries, - **response_kw) - - # Everything went great! - clean_exit = True - - except queue.Empty: - # Timed out by queue. - raise EmptyPoolError(self, "No pool connections are available.") - - except (TimeoutError, HTTPException, SocketError, ProtocolError, - BaseSSLError, SSLError, CertificateError) as e: - # Discard the connection for these exceptions. It will be - # replaced during the next _get_conn() call. - clean_exit = False - if isinstance(e, (BaseSSLError, CertificateError)): - e = SSLError(e) - elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy: - e = ProxyError('Cannot connect to proxy.', e) - elif isinstance(e, (SocketError, HTTPException)): - e = ProtocolError('Connection aborted.', e) - - retries = retries.increment(method, url, error=e, _pool=self, - _stacktrace=sys.exc_info()[2]) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if not clean_exit: - # We hit some kind of exception, handled or otherwise. We need - # to throw the connection away unless explicitly told not to. - # Close the connection, set the variable to None, and make sure - # we put the None back in the pool to avoid leaking it. - conn = conn and conn.close() - release_this_conn = True - - if release_this_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning("Retrying (%r) after connection " - "broken by '%r': %s", retries, err, url) - return self.urlopen(method, url, body, headers, retries, - redirect, assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, body_pos=body_pos, - **response_kw) - - def drain_and_release_conn(response): - try: - # discard any remaining response body, the connection will be - # released back to the pool once the entire response is read - response.read() - except (TimeoutError, HTTPException, SocketError, ProtocolError, - BaseSSLError, SSLError) as e: - pass - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - # Drain and release the connection for this response, since - # we're not returning it to be released manually. - drain_and_release_conn(response) - raise - return response - - # drain and return the connection to the pool before recursing - drain_and_release_conn(response) - - retries.sleep_for_retry(response) - log.debug("Redirecting %s -> %s", url, redirect_location) - return self.urlopen( - method, redirect_location, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, body_pos=body_pos, - **response_kw) - - # Check if we should retry the HTTP response. - has_retry_after = bool(response.getheader('Retry-After')) - if retries.is_retry(method, response.status, has_retry_after): - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_status: - # Drain and release the connection for this response, since - # we're not returning it to be released manually. - drain_and_release_conn(response) - raise - return response - - # drain and return the connection to the pool before recursing - drain_and_release_conn(response) - - retries.sleep(response) - log.debug("Retry: %s", url) - return self.urlopen( - method, url, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, - body_pos=body_pos, **response_kw) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - When Python is compiled with the :mod:`ssl` module, then - :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates, - instead of :class:`.HTTPSConnection`. - - :class:`.VerifiedHTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs``, - ``ca_cert_dir``, and ``ssl_version`` are only used if :mod:`ssl` is - available and are fed into :meth:`urllib3.util.ssl_wrap_socket` to upgrade - the connection socket into an SSL socket. - """ - - scheme = 'https' - ConnectionCls = HTTPSConnection - - def __init__(self, host, port=None, - strict=False, timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, - block=False, headers=None, retries=None, - _proxy=None, _proxy_headers=None, - key_file=None, cert_file=None, cert_reqs=None, - ca_certs=None, ssl_version=None, - assert_hostname=None, assert_fingerprint=None, - ca_cert_dir=None, **conn_kw): - - HTTPConnectionPool.__init__(self, host, port, strict, timeout, maxsize, - block, headers, retries, _proxy, _proxy_headers, - **conn_kw) - - if ca_certs and cert_reqs is None: - cert_reqs = 'CERT_REQUIRED' - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.ca_certs = ca_certs - self.ca_cert_dir = ca_cert_dir - self.ssl_version = ssl_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_conn(self, conn): - """ - Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket` - and establish the tunnel if proxy is used. - """ - - if isinstance(conn, VerifiedHTTPSConnection): - conn.set_cert(key_file=self.key_file, - cert_file=self.cert_file, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - ca_cert_dir=self.ca_cert_dir, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint) - conn.ssl_version = self.ssl_version - return conn - - def _prepare_proxy(self, conn): - """ - Establish tunnel connection early, because otherwise httplib - would improperly set Host: header to proxy's IP:port. - """ - # Python 2.7+ - try: - set_tunnel = conn.set_tunnel - except AttributeError: # Platform-specific: Python 2.6 - set_tunnel = conn._set_tunnel - - if sys.version_info <= (2, 6, 4) and not self.proxy_headers: # Python 2.6.4 and older - set_tunnel(self._proxy_host, self.port) - else: - set_tunnel(self._proxy_host, self.port, self.proxy_headers) - - conn.connect() - - def _new_conn(self): - """ - Return a fresh :class:`httplib.HTTPSConnection`. - """ - self.num_connections += 1 - log.debug("Starting new HTTPS connection (%d): %s:%s", - self.num_connections, self.host, self.port or "443") - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: - raise SSLError("Can't connect to HTTPS URL because the SSL " - "module is not available.") - - actual_host = self.host - actual_port = self.port - if self.proxy is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - conn = self.ConnectionCls(host=actual_host, port=actual_port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - - return self._prepare_conn(conn) - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - super(HTTPSConnectionPool, self)._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if not getattr(conn, 'sock', None): # AppEngine might not have `.sock` - conn.connect() - - if not conn.is_verified: - warnings.warn(( - 'Unverified HTTPS request is being made. ' - 'Adding certificate verification is strongly advised. See: ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings'), - InsecureRequestWarning) - - -def connection_from_url(url, **kw): - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \\**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, host, port = get_host(url) - port = port or port_by_scheme.get(scheme, 80) - if scheme == 'https': - return HTTPSConnectionPool(host, port=port, **kw) - else: - return HTTPConnectionPool(host, port=port, **kw) - - -def _ipv6_host(host, scheme): - """ - Process IPv6 address literals - """ - - # httplib doesn't like it when we include brackets in IPv6 addresses - # Specifically, if we include brackets but also pass the port then - # httplib crazily doubles up the square brackets on the Host header. - # Instead, we need to make sure we never pass ``None`` as the port. - # However, for backward compatibility reasons we can't actually - # *assert* that. See http://bugs.python.org/issue28539 - # - # Also if an IPv6 address literal has a zone identifier, the - # percent sign might be URIencoded, convert it back into ASCII - if host.startswith('[') and host.endswith(']'): - host = host.replace('%25', '%').strip('[]') - if scheme in NORMALIZABLE_SCHEMES: - host = host.lower() - return host diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/__init__.py b/venv/lib/python3.6/site-packages/urllib3/contrib/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/__init__.py b/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/bindings.py b/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/bindings.py deleted file mode 100755 index bcf41c0..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/bindings.py +++ /dev/null @@ -1,593 +0,0 @@ -""" -This module uses ctypes to bind a whole bunch of functions and constants from -SecureTransport. The goal here is to provide the low-level API to -SecureTransport. These are essentially the C-level functions and constants, and -they're pretty gross to work with. - -This code is a bastardised version of the code found in Will Bond's oscrypto -library. An enormous debt is owed to him for blazing this trail for us. For -that reason, this code should be considered to be covered both by urllib3's -license and by oscrypto's: - - Copyright (c) 2015-2016 Will Bond <will@wbond.net> - - 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. -""" -from __future__ import absolute_import - -import platform -from ctypes.util import find_library -from ctypes import ( - c_void_p, c_int32, c_char_p, c_size_t, c_byte, c_uint32, c_ulong, c_long, - c_bool -) -from ctypes import CDLL, POINTER, CFUNCTYPE - - -security_path = find_library('Security') -if not security_path: - raise ImportError('The library Security could not be found') - - -core_foundation_path = find_library('CoreFoundation') -if not core_foundation_path: - raise ImportError('The library CoreFoundation could not be found') - - -version = platform.mac_ver()[0] -version_info = tuple(map(int, version.split('.'))) -if version_info < (10, 8): - raise OSError( - 'Only OS X 10.8 and newer are supported, not %s.%s' % ( - version_info[0], version_info[1] - ) - ) - -Security = CDLL(security_path, use_errno=True) -CoreFoundation = CDLL(core_foundation_path, use_errno=True) - -Boolean = c_bool -CFIndex = c_long -CFStringEncoding = c_uint32 -CFData = c_void_p -CFString = c_void_p -CFArray = c_void_p -CFMutableArray = c_void_p -CFDictionary = c_void_p -CFError = c_void_p -CFType = c_void_p -CFTypeID = c_ulong - -CFTypeRef = POINTER(CFType) -CFAllocatorRef = c_void_p - -OSStatus = c_int32 - -CFDataRef = POINTER(CFData) -CFStringRef = POINTER(CFString) -CFArrayRef = POINTER(CFArray) -CFMutableArrayRef = POINTER(CFMutableArray) -CFDictionaryRef = POINTER(CFDictionary) -CFArrayCallBacks = c_void_p -CFDictionaryKeyCallBacks = c_void_p -CFDictionaryValueCallBacks = c_void_p - -SecCertificateRef = POINTER(c_void_p) -SecExternalFormat = c_uint32 -SecExternalItemType = c_uint32 -SecIdentityRef = POINTER(c_void_p) -SecItemImportExportFlags = c_uint32 -SecItemImportExportKeyParameters = c_void_p -SecKeychainRef = POINTER(c_void_p) -SSLProtocol = c_uint32 -SSLCipherSuite = c_uint32 -SSLContextRef = POINTER(c_void_p) -SecTrustRef = POINTER(c_void_p) -SSLConnectionRef = c_uint32 -SecTrustResultType = c_uint32 -SecTrustOptionFlags = c_uint32 -SSLProtocolSide = c_uint32 -SSLConnectionType = c_uint32 -SSLSessionOption = c_uint32 - - -try: - Security.SecItemImport.argtypes = [ - CFDataRef, - CFStringRef, - POINTER(SecExternalFormat), - POINTER(SecExternalItemType), - SecItemImportExportFlags, - POINTER(SecItemImportExportKeyParameters), - SecKeychainRef, - POINTER(CFArrayRef), - ] - Security.SecItemImport.restype = OSStatus - - Security.SecCertificateGetTypeID.argtypes = [] - Security.SecCertificateGetTypeID.restype = CFTypeID - - Security.SecIdentityGetTypeID.argtypes = [] - Security.SecIdentityGetTypeID.restype = CFTypeID - - Security.SecKeyGetTypeID.argtypes = [] - Security.SecKeyGetTypeID.restype = CFTypeID - - Security.SecCertificateCreateWithData.argtypes = [ - CFAllocatorRef, - CFDataRef - ] - Security.SecCertificateCreateWithData.restype = SecCertificateRef - - Security.SecCertificateCopyData.argtypes = [ - SecCertificateRef - ] - Security.SecCertificateCopyData.restype = CFDataRef - - Security.SecCopyErrorMessageString.argtypes = [ - OSStatus, - c_void_p - ] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SecIdentityCreateWithCertificate.argtypes = [ - CFTypeRef, - SecCertificateRef, - POINTER(SecIdentityRef) - ] - Security.SecIdentityCreateWithCertificate.restype = OSStatus - - Security.SecKeychainCreate.argtypes = [ - c_char_p, - c_uint32, - c_void_p, - Boolean, - c_void_p, - POINTER(SecKeychainRef) - ] - Security.SecKeychainCreate.restype = OSStatus - - Security.SecKeychainDelete.argtypes = [ - SecKeychainRef - ] - Security.SecKeychainDelete.restype = OSStatus - - Security.SecPKCS12Import.argtypes = [ - CFDataRef, - CFDictionaryRef, - POINTER(CFArrayRef) - ] - Security.SecPKCS12Import.restype = OSStatus - - SSLReadFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, c_void_p, POINTER(c_size_t)) - SSLWriteFunc = CFUNCTYPE(OSStatus, SSLConnectionRef, POINTER(c_byte), POINTER(c_size_t)) - - Security.SSLSetIOFuncs.argtypes = [ - SSLContextRef, - SSLReadFunc, - SSLWriteFunc - ] - Security.SSLSetIOFuncs.restype = OSStatus - - Security.SSLSetPeerID.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t - ] - Security.SSLSetPeerID.restype = OSStatus - - Security.SSLSetCertificate.argtypes = [ - SSLContextRef, - CFArrayRef - ] - Security.SSLSetCertificate.restype = OSStatus - - Security.SSLSetCertificateAuthorities.argtypes = [ - SSLContextRef, - CFTypeRef, - Boolean - ] - Security.SSLSetCertificateAuthorities.restype = OSStatus - - Security.SSLSetConnection.argtypes = [ - SSLContextRef, - SSLConnectionRef - ] - Security.SSLSetConnection.restype = OSStatus - - Security.SSLSetPeerDomainName.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t - ] - Security.SSLSetPeerDomainName.restype = OSStatus - - Security.SSLHandshake.argtypes = [ - SSLContextRef - ] - Security.SSLHandshake.restype = OSStatus - - Security.SSLRead.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t, - POINTER(c_size_t) - ] - Security.SSLRead.restype = OSStatus - - Security.SSLWrite.argtypes = [ - SSLContextRef, - c_char_p, - c_size_t, - POINTER(c_size_t) - ] - Security.SSLWrite.restype = OSStatus - - Security.SSLClose.argtypes = [ - SSLContextRef - ] - Security.SSLClose.restype = OSStatus - - Security.SSLGetNumberSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(c_size_t) - ] - Security.SSLGetNumberSupportedCiphers.restype = OSStatus - - Security.SSLGetSupportedCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t) - ] - Security.SSLGetSupportedCiphers.restype = OSStatus - - Security.SSLSetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - c_size_t - ] - Security.SSLSetEnabledCiphers.restype = OSStatus - - Security.SSLGetNumberEnabledCiphers.argtype = [ - SSLContextRef, - POINTER(c_size_t) - ] - Security.SSLGetNumberEnabledCiphers.restype = OSStatus - - Security.SSLGetEnabledCiphers.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite), - POINTER(c_size_t) - ] - Security.SSLGetEnabledCiphers.restype = OSStatus - - Security.SSLGetNegotiatedCipher.argtypes = [ - SSLContextRef, - POINTER(SSLCipherSuite) - ] - Security.SSLGetNegotiatedCipher.restype = OSStatus - - Security.SSLGetNegotiatedProtocolVersion.argtypes = [ - SSLContextRef, - POINTER(SSLProtocol) - ] - Security.SSLGetNegotiatedProtocolVersion.restype = OSStatus - - Security.SSLCopyPeerTrust.argtypes = [ - SSLContextRef, - POINTER(SecTrustRef) - ] - Security.SSLCopyPeerTrust.restype = OSStatus - - Security.SecTrustSetAnchorCertificates.argtypes = [ - SecTrustRef, - CFArrayRef - ] - Security.SecTrustSetAnchorCertificates.restype = OSStatus - - Security.SecTrustSetAnchorCertificatesOnly.argstypes = [ - SecTrustRef, - Boolean - ] - Security.SecTrustSetAnchorCertificatesOnly.restype = OSStatus - - Security.SecTrustEvaluate.argtypes = [ - SecTrustRef, - POINTER(SecTrustResultType) - ] - Security.SecTrustEvaluate.restype = OSStatus - - Security.SecTrustGetCertificateCount.argtypes = [ - SecTrustRef - ] - Security.SecTrustGetCertificateCount.restype = CFIndex - - Security.SecTrustGetCertificateAtIndex.argtypes = [ - SecTrustRef, - CFIndex - ] - Security.SecTrustGetCertificateAtIndex.restype = SecCertificateRef - - Security.SSLCreateContext.argtypes = [ - CFAllocatorRef, - SSLProtocolSide, - SSLConnectionType - ] - Security.SSLCreateContext.restype = SSLContextRef - - Security.SSLSetSessionOption.argtypes = [ - SSLContextRef, - SSLSessionOption, - Boolean - ] - Security.SSLSetSessionOption.restype = OSStatus - - Security.SSLSetProtocolVersionMin.argtypes = [ - SSLContextRef, - SSLProtocol - ] - Security.SSLSetProtocolVersionMin.restype = OSStatus - - Security.SSLSetProtocolVersionMax.argtypes = [ - SSLContextRef, - SSLProtocol - ] - Security.SSLSetProtocolVersionMax.restype = OSStatus - - Security.SecCopyErrorMessageString.argtypes = [ - OSStatus, - c_void_p - ] - Security.SecCopyErrorMessageString.restype = CFStringRef - - Security.SSLReadFunc = SSLReadFunc - Security.SSLWriteFunc = SSLWriteFunc - Security.SSLContextRef = SSLContextRef - Security.SSLProtocol = SSLProtocol - Security.SSLCipherSuite = SSLCipherSuite - Security.SecIdentityRef = SecIdentityRef - Security.SecKeychainRef = SecKeychainRef - Security.SecTrustRef = SecTrustRef - Security.SecTrustResultType = SecTrustResultType - Security.SecExternalFormat = SecExternalFormat - Security.OSStatus = OSStatus - - Security.kSecImportExportPassphrase = CFStringRef.in_dll( - Security, 'kSecImportExportPassphrase' - ) - Security.kSecImportItemIdentity = CFStringRef.in_dll( - Security, 'kSecImportItemIdentity' - ) - - # CoreFoundation time! - CoreFoundation.CFRetain.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFRetain.restype = CFTypeRef - - CoreFoundation.CFRelease.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFRelease.restype = None - - CoreFoundation.CFGetTypeID.argtypes = [ - CFTypeRef - ] - CoreFoundation.CFGetTypeID.restype = CFTypeID - - CoreFoundation.CFStringCreateWithCString.argtypes = [ - CFAllocatorRef, - c_char_p, - CFStringEncoding - ] - CoreFoundation.CFStringCreateWithCString.restype = CFStringRef - - CoreFoundation.CFStringGetCStringPtr.argtypes = [ - CFStringRef, - CFStringEncoding - ] - CoreFoundation.CFStringGetCStringPtr.restype = c_char_p - - CoreFoundation.CFStringGetCString.argtypes = [ - CFStringRef, - c_char_p, - CFIndex, - CFStringEncoding - ] - CoreFoundation.CFStringGetCString.restype = c_bool - - CoreFoundation.CFDataCreate.argtypes = [ - CFAllocatorRef, - c_char_p, - CFIndex - ] - CoreFoundation.CFDataCreate.restype = CFDataRef - - CoreFoundation.CFDataGetLength.argtypes = [ - CFDataRef - ] - CoreFoundation.CFDataGetLength.restype = CFIndex - - CoreFoundation.CFDataGetBytePtr.argtypes = [ - CFDataRef - ] - CoreFoundation.CFDataGetBytePtr.restype = c_void_p - - CoreFoundation.CFDictionaryCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - POINTER(CFTypeRef), - CFIndex, - CFDictionaryKeyCallBacks, - CFDictionaryValueCallBacks - ] - CoreFoundation.CFDictionaryCreate.restype = CFDictionaryRef - - CoreFoundation.CFDictionaryGetValue.argtypes = [ - CFDictionaryRef, - CFTypeRef - ] - CoreFoundation.CFDictionaryGetValue.restype = CFTypeRef - - CoreFoundation.CFArrayCreate.argtypes = [ - CFAllocatorRef, - POINTER(CFTypeRef), - CFIndex, - CFArrayCallBacks, - ] - CoreFoundation.CFArrayCreate.restype = CFArrayRef - - CoreFoundation.CFArrayCreateMutable.argtypes = [ - CFAllocatorRef, - CFIndex, - CFArrayCallBacks - ] - CoreFoundation.CFArrayCreateMutable.restype = CFMutableArrayRef - - CoreFoundation.CFArrayAppendValue.argtypes = [ - CFMutableArrayRef, - c_void_p - ] - CoreFoundation.CFArrayAppendValue.restype = None - - CoreFoundation.CFArrayGetCount.argtypes = [ - CFArrayRef - ] - CoreFoundation.CFArrayGetCount.restype = CFIndex - - CoreFoundation.CFArrayGetValueAtIndex.argtypes = [ - CFArrayRef, - CFIndex - ] - CoreFoundation.CFArrayGetValueAtIndex.restype = c_void_p - - CoreFoundation.kCFAllocatorDefault = CFAllocatorRef.in_dll( - CoreFoundation, 'kCFAllocatorDefault' - ) - CoreFoundation.kCFTypeArrayCallBacks = c_void_p.in_dll(CoreFoundation, 'kCFTypeArrayCallBacks') - CoreFoundation.kCFTypeDictionaryKeyCallBacks = c_void_p.in_dll( - CoreFoundation, 'kCFTypeDictionaryKeyCallBacks' - ) - CoreFoundation.kCFTypeDictionaryValueCallBacks = c_void_p.in_dll( - CoreFoundation, 'kCFTypeDictionaryValueCallBacks' - ) - - CoreFoundation.CFTypeRef = CFTypeRef - CoreFoundation.CFArrayRef = CFArrayRef - CoreFoundation.CFStringRef = CFStringRef - CoreFoundation.CFDictionaryRef = CFDictionaryRef - -except (AttributeError): - raise ImportError('Error initializing ctypes') - - -class CFConst(object): - """ - A class object that acts as essentially a namespace for CoreFoundation - constants. - """ - kCFStringEncodingUTF8 = CFStringEncoding(0x08000100) - - -class SecurityConst(object): - """ - A class object that acts as essentially a namespace for Security constants. - """ - kSSLSessionOptionBreakOnServerAuth = 0 - - kSSLProtocol2 = 1 - kSSLProtocol3 = 2 - kTLSProtocol1 = 4 - kTLSProtocol11 = 7 - kTLSProtocol12 = 8 - - kSSLClientSide = 1 - kSSLStreamType = 0 - - kSecFormatPEMSequence = 10 - - kSecTrustResultInvalid = 0 - kSecTrustResultProceed = 1 - # This gap is present on purpose: this was kSecTrustResultConfirm, which - # is deprecated. - kSecTrustResultDeny = 3 - kSecTrustResultUnspecified = 4 - kSecTrustResultRecoverableTrustFailure = 5 - kSecTrustResultFatalTrustFailure = 6 - kSecTrustResultOtherError = 7 - - errSSLProtocol = -9800 - errSSLWouldBlock = -9803 - errSSLClosedGraceful = -9805 - errSSLClosedNoNotify = -9816 - errSSLClosedAbort = -9806 - - errSSLXCertChainInvalid = -9807 - errSSLCrypto = -9809 - errSSLInternal = -9810 - errSSLCertExpired = -9814 - errSSLCertNotYetValid = -9815 - errSSLUnknownRootCert = -9812 - errSSLNoRootCert = -9813 - errSSLHostNameMismatch = -9843 - errSSLPeerHandshakeFail = -9824 - errSSLPeerUserCancelled = -9839 - errSSLWeakPeerEphemeralDHKey = -9850 - errSSLServerAuthCompleted = -9841 - errSSLRecordOverflow = -9847 - - errSecVerifyFailed = -67808 - errSecNoTrustSettings = -25263 - errSecItemNotFound = -25300 - errSecInvalidTrustSettings = -25262 - - # Cipher suites. We only pick the ones our default cipher string allows. - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 0xC02C - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 0xC030 - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 0xC02B - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 0xC02F - TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = 0x00A3 - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 0x009F - TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = 0x00A2 - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 0x009E - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = 0xC024 - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = 0xC028 - TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = 0xC00A - TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = 0xC014 - TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 0x006B - TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 0x006A - TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 0x0039 - TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 0x0038 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = 0xC023 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = 0xC027 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = 0xC009 - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = 0xC013 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 0x0067 - TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 0x0040 - TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 0x0033 - TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 0x0032 - TLS_RSA_WITH_AES_256_GCM_SHA384 = 0x009D - TLS_RSA_WITH_AES_128_GCM_SHA256 = 0x009C - TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x003D - TLS_RSA_WITH_AES_128_CBC_SHA256 = 0x003C - TLS_RSA_WITH_AES_256_CBC_SHA = 0x0035 - TLS_RSA_WITH_AES_128_CBC_SHA = 0x002F - TLS_AES_128_GCM_SHA256 = 0x1301 - TLS_AES_256_GCM_SHA384 = 0x1302 - TLS_CHACHA20_POLY1305_SHA256 = 0x1303 diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/low_level.py b/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/low_level.py deleted file mode 100755 index b13cd9e..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/_securetransport/low_level.py +++ /dev/null @@ -1,346 +0,0 @@ -""" -Low-level helpers for the SecureTransport bindings. - -These are Python functions that are not directly related to the high-level APIs -but are necessary to get them to work. They include a whole bunch of low-level -CoreFoundation messing about and memory management. The concerns in this module -are almost entirely about trying to avoid memory leaks and providing -appropriate and useful assistance to the higher-level code. -""" -import base64 -import ctypes -import itertools -import re -import os -import ssl -import tempfile - -from .bindings import Security, CoreFoundation, CFConst - - -# This regular expression is used to grab PEM data out of a PEM bundle. -_PEM_CERTS_RE = re.compile( - b"-----BEGIN CERTIFICATE-----\n(.*?)\n-----END CERTIFICATE-----", re.DOTALL -) - - -def _cf_data_from_bytes(bytestring): - """ - Given a bytestring, create a CFData object from it. This CFData object must - be CFReleased by the caller. - """ - return CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, bytestring, len(bytestring) - ) - - -def _cf_dictionary_from_tuples(tuples): - """ - Given a list of Python tuples, create an associated CFDictionary. - """ - dictionary_size = len(tuples) - - # We need to get the dictionary keys and values out in the same order. - keys = (t[0] for t in tuples) - values = (t[1] for t in tuples) - cf_keys = (CoreFoundation.CFTypeRef * dictionary_size)(*keys) - cf_values = (CoreFoundation.CFTypeRef * dictionary_size)(*values) - - return CoreFoundation.CFDictionaryCreate( - CoreFoundation.kCFAllocatorDefault, - cf_keys, - cf_values, - dictionary_size, - CoreFoundation.kCFTypeDictionaryKeyCallBacks, - CoreFoundation.kCFTypeDictionaryValueCallBacks, - ) - - -def _cf_string_to_unicode(value): - """ - Creates a Unicode string from a CFString object. Used entirely for error - reporting. - - Yes, it annoys me quite a lot that this function is this complex. - """ - value_as_void_p = ctypes.cast(value, ctypes.POINTER(ctypes.c_void_p)) - - string = CoreFoundation.CFStringGetCStringPtr( - value_as_void_p, - CFConst.kCFStringEncodingUTF8 - ) - if string is None: - buffer = ctypes.create_string_buffer(1024) - result = CoreFoundation.CFStringGetCString( - value_as_void_p, - buffer, - 1024, - CFConst.kCFStringEncodingUTF8 - ) - if not result: - raise OSError('Error copying C string from CFStringRef') - string = buffer.value - if string is not None: - string = string.decode('utf-8') - return string - - -def _assert_no_error(error, exception_class=None): - """ - Checks the return code and throws an exception if there is an error to - report - """ - if error == 0: - return - - cf_error_string = Security.SecCopyErrorMessageString(error, None) - output = _cf_string_to_unicode(cf_error_string) - CoreFoundation.CFRelease(cf_error_string) - - if output is None or output == u'': - output = u'OSStatus %s' % error - - if exception_class is None: - exception_class = ssl.SSLError - - raise exception_class(output) - - -def _cert_array_from_pem(pem_bundle): - """ - Given a bundle of certs in PEM format, turns them into a CFArray of certs - that can be used to validate a cert chain. - """ - # Normalize the PEM bundle's line endings. - pem_bundle = pem_bundle.replace(b"\r\n", b"\n") - - der_certs = [ - base64.b64decode(match.group(1)) - for match in _PEM_CERTS_RE.finditer(pem_bundle) - ] - if not der_certs: - raise ssl.SSLError("No root certificates specified") - - cert_array = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks) - ) - if not cert_array: - raise ssl.SSLError("Unable to allocate memory!") - - try: - for der_bytes in der_certs: - certdata = _cf_data_from_bytes(der_bytes) - if not certdata: - raise ssl.SSLError("Unable to allocate memory!") - cert = Security.SecCertificateCreateWithData( - CoreFoundation.kCFAllocatorDefault, certdata - ) - CoreFoundation.CFRelease(certdata) - if not cert: - raise ssl.SSLError("Unable to build cert object!") - - CoreFoundation.CFArrayAppendValue(cert_array, cert) - CoreFoundation.CFRelease(cert) - except Exception: - # We need to free the array before the exception bubbles further. - # We only want to do that if an error occurs: otherwise, the caller - # should free. - CoreFoundation.CFRelease(cert_array) - - return cert_array - - -def _is_cert(item): - """ - Returns True if a given CFTypeRef is a certificate. - """ - expected = Security.SecCertificateGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _is_identity(item): - """ - Returns True if a given CFTypeRef is an identity. - """ - expected = Security.SecIdentityGetTypeID() - return CoreFoundation.CFGetTypeID(item) == expected - - -def _temporary_keychain(): - """ - This function creates a temporary Mac keychain that we can use to work with - credentials. This keychain uses a one-time password and a temporary file to - store the data. We expect to have one keychain per socket. The returned - SecKeychainRef must be freed by the caller, including calling - SecKeychainDelete. - - Returns a tuple of the SecKeychainRef and the path to the temporary - directory that contains it. - """ - # Unfortunately, SecKeychainCreate requires a path to a keychain. This - # means we cannot use mkstemp to use a generic temporary file. Instead, - # we're going to create a temporary directory and a filename to use there. - # This filename will be 8 random bytes expanded into base64. We also need - # some random bytes to password-protect the keychain we're creating, so we - # ask for 40 random bytes. - random_bytes = os.urandom(40) - filename = base64.b16encode(random_bytes[:8]).decode('utf-8') - password = base64.b16encode(random_bytes[8:]) # Must be valid UTF-8 - tempdirectory = tempfile.mkdtemp() - - keychain_path = os.path.join(tempdirectory, filename).encode('utf-8') - - # We now want to create the keychain itself. - keychain = Security.SecKeychainRef() - status = Security.SecKeychainCreate( - keychain_path, - len(password), - password, - False, - None, - ctypes.byref(keychain) - ) - _assert_no_error(status) - - # Having created the keychain, we want to pass it off to the caller. - return keychain, tempdirectory - - -def _load_items_from_file(keychain, path): - """ - Given a single file, loads all the trust objects from it into arrays and - the keychain. - Returns a tuple of lists: the first list is a list of identities, the - second a list of certs. - """ - certificates = [] - identities = [] - result_array = None - - with open(path, 'rb') as f: - raw_filedata = f.read() - - try: - filedata = CoreFoundation.CFDataCreate( - CoreFoundation.kCFAllocatorDefault, - raw_filedata, - len(raw_filedata) - ) - result_array = CoreFoundation.CFArrayRef() - result = Security.SecItemImport( - filedata, # cert data - None, # Filename, leaving it out for now - None, # What the type of the file is, we don't care - None, # what's in the file, we don't care - 0, # import flags - None, # key params, can include passphrase in the future - keychain, # The keychain to insert into - ctypes.byref(result_array) # Results - ) - _assert_no_error(result) - - # A CFArray is not very useful to us as an intermediary - # representation, so we are going to extract the objects we want - # and then free the array. We don't need to keep hold of keys: the - # keychain already has them! - result_count = CoreFoundation.CFArrayGetCount(result_array) - for index in range(result_count): - item = CoreFoundation.CFArrayGetValueAtIndex( - result_array, index - ) - item = ctypes.cast(item, CoreFoundation.CFTypeRef) - - if _is_cert(item): - CoreFoundation.CFRetain(item) - certificates.append(item) - elif _is_identity(item): - CoreFoundation.CFRetain(item) - identities.append(item) - finally: - if result_array: - CoreFoundation.CFRelease(result_array) - - CoreFoundation.CFRelease(filedata) - - return (identities, certificates) - - -def _load_client_cert_chain(keychain, *paths): - """ - Load certificates and maybe keys from a number of files. Has the end goal - of returning a CFArray containing one SecIdentityRef, and then zero or more - SecCertificateRef objects, suitable for use as a client certificate trust - chain. - """ - # Ok, the strategy. - # - # This relies on knowing that macOS will not give you a SecIdentityRef - # unless you have imported a key into a keychain. This is a somewhat - # artificial limitation of macOS (for example, it doesn't necessarily - # affect iOS), but there is nothing inside Security.framework that lets you - # get a SecIdentityRef without having a key in a keychain. - # - # So the policy here is we take all the files and iterate them in order. - # Each one will use SecItemImport to have one or more objects loaded from - # it. We will also point at a keychain that macOS can use to work with the - # private key. - # - # Once we have all the objects, we'll check what we actually have. If we - # already have a SecIdentityRef in hand, fab: we'll use that. Otherwise, - # we'll take the first certificate (which we assume to be our leaf) and - # ask the keychain to give us a SecIdentityRef with that cert's associated - # key. - # - # We'll then return a CFArray containing the trust chain: one - # SecIdentityRef and then zero-or-more SecCertificateRef objects. The - # responsibility for freeing this CFArray will be with the caller. This - # CFArray must remain alive for the entire connection, so in practice it - # will be stored with a single SSLSocket, along with the reference to the - # keychain. - certificates = [] - identities = [] - - # Filter out bad paths. - paths = (path for path in paths if path) - - try: - for file_path in paths: - new_identities, new_certs = _load_items_from_file( - keychain, file_path - ) - identities.extend(new_identities) - certificates.extend(new_certs) - - # Ok, we have everything. The question is: do we have an identity? If - # not, we want to grab one from the first cert we have. - if not identities: - new_identity = Security.SecIdentityRef() - status = Security.SecIdentityCreateWithCertificate( - keychain, - certificates[0], - ctypes.byref(new_identity) - ) - _assert_no_error(status) - identities.append(new_identity) - - # We now want to release the original certificate, as we no longer - # need it. - CoreFoundation.CFRelease(certificates.pop(0)) - - # We now need to build a new CFArray that holds the trust chain. - trust_chain = CoreFoundation.CFArrayCreateMutable( - CoreFoundation.kCFAllocatorDefault, - 0, - ctypes.byref(CoreFoundation.kCFTypeArrayCallBacks), - ) - for item in itertools.chain(identities, certificates): - # ArrayAppendValue does a CFRetain on the item. That's fine, - # because the finally block will release our other refs to them. - CoreFoundation.CFArrayAppendValue(trust_chain, item) - - return trust_chain - finally: - for obj in itertools.chain(identities, certificates): - CoreFoundation.CFRelease(obj) diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/appengine.py b/venv/lib/python3.6/site-packages/urllib3/contrib/appengine.py deleted file mode 100755 index 66922e0..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/appengine.py +++ /dev/null @@ -1,305 +0,0 @@ -""" -This module provides a pool manager that uses Google App Engine's -`URLFetch Service <https://cloud.google.com/appengine/docs/python/urlfetch>`_. - -Example usage:: - - from urllib3 import PoolManager - from urllib3.contrib.appengine import AppEngineManager, is_appengine_sandbox - - if is_appengine_sandbox(): - # AppEngineManager uses AppEngine's URLFetch API behind the scenes - http = AppEngineManager() - else: - # PoolManager uses a socket-level API behind the scenes - http = PoolManager() - - r = http.request('GET', 'https://google.com/') - -There are `limitations <https://cloud.google.com/appengine/docs/python/\ -urlfetch/#Python_Quotas_and_limits>`_ to the URLFetch service and it may not be -the best choice for your application. There are three options for using -urllib3 on Google App Engine: - -1. You can use :class:`AppEngineManager` with URLFetch. URLFetch is - cost-effective in many circumstances as long as your usage is within the - limitations. -2. You can use a normal :class:`~urllib3.PoolManager` by enabling sockets. - Sockets also have `limitations and restrictions - <https://cloud.google.com/appengine/docs/python/sockets/\ - #limitations-and-restrictions>`_ and have a lower free quota than URLFetch. - To use sockets, be sure to specify the following in your ``app.yaml``:: - - env_variables: - GAE_USE_SOCKETS_HTTPLIB : 'true' - -3. If you are using `App Engine Flexible -<https://cloud.google.com/appengine/docs/flexible/>`_, you can use the standard -:class:`PoolManager` without any configuration or special environment variables. -""" - -from __future__ import absolute_import -import logging -import os -import warnings -from ..packages.six.moves.urllib.parse import urljoin - -from ..exceptions import ( - HTTPError, - HTTPWarning, - MaxRetryError, - ProtocolError, - TimeoutError, - SSLError -) - -from ..packages.six import BytesIO -from ..request import RequestMethods -from ..response import HTTPResponse -from ..util.timeout import Timeout -from ..util.retry import Retry - -try: - from google.appengine.api import urlfetch -except ImportError: - urlfetch = None - - -log = logging.getLogger(__name__) - - -class AppEnginePlatformWarning(HTTPWarning): - pass - - -class AppEnginePlatformError(HTTPError): - pass - - -class AppEngineManager(RequestMethods): - """ - Connection manager for Google App Engine sandbox applications. - - This manager uses the URLFetch service directly instead of using the - emulated httplib, and is subject to URLFetch limitations as described in - the App Engine documentation `here - <https://cloud.google.com/appengine/docs/python/urlfetch>`_. - - Notably it will raise an :class:`AppEnginePlatformError` if: - * URLFetch is not available. - * If you attempt to use this on App Engine Flexible, as full socket - support is available. - * If a request size is more than 10 megabytes. - * If a response size is more than 32 megabtyes. - * If you use an unsupported request method such as OPTIONS. - - Beyond those cases, it will raise normal urllib3 errors. - """ - - def __init__(self, headers=None, retries=None, validate_certificate=True, - urlfetch_retries=True): - if not urlfetch: - raise AppEnginePlatformError( - "URLFetch is not available in this environment.") - - if is_prod_appengine_mvms(): - raise AppEnginePlatformError( - "Use normal urllib3.PoolManager instead of AppEngineManager" - "on Managed VMs, as using URLFetch is not necessary in " - "this environment.") - - warnings.warn( - "urllib3 is using URLFetch on Google App Engine sandbox instead " - "of sockets. To use sockets directly instead of URLFetch see " - "https://urllib3.readthedocs.io/en/latest/reference/urllib3.contrib.html.", - AppEnginePlatformWarning) - - RequestMethods.__init__(self, headers) - self.validate_certificate = validate_certificate - self.urlfetch_retries = urlfetch_retries - - self.retries = retries or Retry.DEFAULT - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - # Return False to re-raise any potential exceptions - return False - - def urlopen(self, method, url, body=None, headers=None, - retries=None, redirect=True, timeout=Timeout.DEFAULT_TIMEOUT, - **response_kw): - - retries = self._get_retries(retries, redirect) - - try: - follow_redirects = ( - redirect and - retries.redirect != 0 and - retries.total) - response = urlfetch.fetch( - url, - payload=body, - method=method, - headers=headers or {}, - allow_truncated=False, - follow_redirects=self.urlfetch_retries and follow_redirects, - deadline=self._get_absolute_timeout(timeout), - validate_certificate=self.validate_certificate, - ) - except urlfetch.DeadlineExceededError as e: - raise TimeoutError(self, e) - - except urlfetch.InvalidURLError as e: - if 'too large' in str(e): - raise AppEnginePlatformError( - "URLFetch request too large, URLFetch only " - "supports requests up to 10mb in size.", e) - raise ProtocolError(e) - - except urlfetch.DownloadError as e: - if 'Too many redirects' in str(e): - raise MaxRetryError(self, url, reason=e) - raise ProtocolError(e) - - except urlfetch.ResponseTooLargeError as e: - raise AppEnginePlatformError( - "URLFetch response too large, URLFetch only supports" - "responses up to 32mb in size.", e) - - except urlfetch.SSLCertificateError as e: - raise SSLError(e) - - except urlfetch.InvalidMethodError as e: - raise AppEnginePlatformError( - "URLFetch does not support method: %s" % method, e) - - http_response = self._urlfetch_response_to_http_response( - response, retries=retries, **response_kw) - - # Handle redirect? - redirect_location = redirect and http_response.get_redirect_location() - if redirect_location: - # Check for redirect response - if (self.urlfetch_retries and retries.raise_on_redirect): - raise MaxRetryError(self, url, "too many redirects") - else: - if http_response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=http_response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - raise MaxRetryError(self, url, "too many redirects") - return http_response - - retries.sleep_for_retry(http_response) - log.debug("Redirecting %s -> %s", url, redirect_location) - redirect_url = urljoin(url, redirect_location) - return self.urlopen( - method, redirect_url, body, headers, - retries=retries, redirect=redirect, - timeout=timeout, **response_kw) - - # Check if we should retry the HTTP response. - has_retry_after = bool(http_response.getheader('Retry-After')) - if retries.is_retry(method, http_response.status, has_retry_after): - retries = retries.increment( - method, url, response=http_response, _pool=self) - log.debug("Retry: %s", url) - retries.sleep(http_response) - return self.urlopen( - method, url, - body=body, headers=headers, - retries=retries, redirect=redirect, - timeout=timeout, **response_kw) - - return http_response - - def _urlfetch_response_to_http_response(self, urlfetch_resp, **response_kw): - - if is_prod_appengine(): - # Production GAE handles deflate encoding automatically, but does - # not remove the encoding header. - content_encoding = urlfetch_resp.headers.get('content-encoding') - - if content_encoding == 'deflate': - del urlfetch_resp.headers['content-encoding'] - - transfer_encoding = urlfetch_resp.headers.get('transfer-encoding') - # We have a full response's content, - # so let's make sure we don't report ourselves as chunked data. - if transfer_encoding == 'chunked': - encodings = transfer_encoding.split(",") - encodings.remove('chunked') - urlfetch_resp.headers['transfer-encoding'] = ','.join(encodings) - - original_response = HTTPResponse( - # In order for decoding to work, we must present the content as - # a file-like object. - body=BytesIO(urlfetch_resp.content), - msg=urlfetch_resp.header_msg, - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - **response_kw - ) - - return HTTPResponse( - body=BytesIO(urlfetch_resp.content), - headers=urlfetch_resp.headers, - status=urlfetch_resp.status_code, - original_response=original_response, - **response_kw - ) - - def _get_absolute_timeout(self, timeout): - if timeout is Timeout.DEFAULT_TIMEOUT: - return None # Defer to URLFetch's default. - if isinstance(timeout, Timeout): - if timeout._read is not None or timeout._connect is not None: - warnings.warn( - "URLFetch does not support granular timeout settings, " - "reverting to total or default URLFetch timeout.", - AppEnginePlatformWarning) - return timeout.total - return timeout - - def _get_retries(self, retries, redirect): - if not isinstance(retries, Retry): - retries = Retry.from_int( - retries, redirect=redirect, default=self.retries) - - if retries.connect or retries.read or retries.redirect: - warnings.warn( - "URLFetch only supports total retries and does not " - "recognize connect, read, or redirect retry parameters.", - AppEnginePlatformWarning) - - return retries - - -def is_appengine(): - return (is_local_appengine() or - is_prod_appengine() or - is_prod_appengine_mvms()) - - -def is_appengine_sandbox(): - return is_appengine() and not is_prod_appengine_mvms() - - -def is_local_appengine(): - return ('APPENGINE_RUNTIME' in os.environ and - 'Development/' in os.environ['SERVER_SOFTWARE']) - - -def is_prod_appengine(): - return ('APPENGINE_RUNTIME' in os.environ and - 'Google App Engine/' in os.environ['SERVER_SOFTWARE'] and - not is_prod_appengine_mvms()) - - -def is_prod_appengine_mvms(): - return os.environ.get('GAE_VM', False) == 'true' diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/ntlmpool.py b/venv/lib/python3.6/site-packages/urllib3/contrib/ntlmpool.py deleted file mode 100755 index 642e99e..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/ntlmpool.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -NTLM authenticating pool, contributed by erikcederstran - -Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 -""" -from __future__ import absolute_import - -from logging import getLogger -from ntlm import ntlm - -from .. import HTTPSConnectionPool -from ..packages.six.moves.http_client import HTTPSConnection - - -log = getLogger(__name__) - - -class NTLMConnectionPool(HTTPSConnectionPool): - """ - Implements an NTLM authentication version of an urllib3 connection pool - """ - - scheme = 'https' - - def __init__(self, user, pw, authurl, *args, **kwargs): - """ - authurl is a random URL on the server that is protected by NTLM. - user is the Windows user, probably in the DOMAIN\\username format. - pw is the password for the user. - """ - super(NTLMConnectionPool, self).__init__(*args, **kwargs) - self.authurl = authurl - self.rawuser = user - user_parts = user.split('\\', 1) - self.domain = user_parts[0].upper() - self.user = user_parts[1] - self.pw = pw - - def _new_conn(self): - # Performs the NTLM handshake that secures the connection. The socket - # must be kept open while requests are performed. - self.num_connections += 1 - log.debug('Starting NTLM HTTPS connection no. %d: https://%s%s', - self.num_connections, self.host, self.authurl) - - headers = {} - headers['Connection'] = 'Keep-Alive' - req_header = 'Authorization' - resp_header = 'www-authenticate' - - conn = HTTPSConnection(host=self.host, port=self.port) - - # Send negotiation message - headers[req_header] = ( - 'NTLM %s' % ntlm.create_NTLM_NEGOTIATE_MESSAGE(self.rawuser)) - log.debug('Request headers: %s', headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - reshdr = dict(res.getheaders()) - log.debug('Response status: %s %s', res.status, res.reason) - log.debug('Response headers: %s', reshdr) - log.debug('Response data: %s [...]', res.read(100)) - - # Remove the reference to the socket, so that it can not be closed by - # the response object (we want to keep the socket open) - res.fp = None - - # Server should respond with a challenge message - auth_header_values = reshdr[resp_header].split(', ') - auth_header_value = None - for s in auth_header_values: - if s[:5] == 'NTLM ': - auth_header_value = s[5:] - if auth_header_value is None: - raise Exception('Unexpected %s response header: %s' % - (resp_header, reshdr[resp_header])) - - # Send authentication message - ServerChallenge, NegotiateFlags = \ - ntlm.parse_NTLM_CHALLENGE_MESSAGE(auth_header_value) - auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(ServerChallenge, - self.user, - self.domain, - self.pw, - NegotiateFlags) - headers[req_header] = 'NTLM %s' % auth_msg - log.debug('Request headers: %s', headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - log.debug('Response status: %s %s', res.status, res.reason) - log.debug('Response headers: %s', dict(res.getheaders())) - log.debug('Response data: %s [...]', res.read()[:100]) - if res.status != 200: - if res.status == 401: - raise Exception('Server rejected request: wrong ' - 'username or password') - raise Exception('Wrong server response: %s %s' % - (res.status, res.reason)) - - res.fp = None - log.debug('Connection established') - return conn - - def urlopen(self, method, url, body=None, headers=None, retries=3, - redirect=True, assert_same_host=True): - if headers is None: - headers = {} - headers['Connection'] = 'Keep-Alive' - return super(NTLMConnectionPool, self).urlopen(method, url, body, - headers, retries, - redirect, - assert_same_host) diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py b/venv/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py deleted file mode 100755 index 4d4b1af..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/pyopenssl.py +++ /dev/null @@ -1,457 +0,0 @@ -""" -SSL with SNI_-support for Python 2. Follow these instructions if you would -like to verify SSL certificates in Python 2. Note, the default libraries do -*not* do certificate checking; you need to do additional work to validate -certificates yourself. - -This needs the following packages installed: - -* pyOpenSSL (tested with 16.0.0) -* cryptography (minimum 1.3.4, from pyopenssl) -* idna (minimum 2.0, from cryptography) - -However, pyopenssl depends on cryptography, which depends on idna, so while we -use all three directly here we end up having relatively few packages required. - -You can install them with the following command: - - pip install pyopenssl cryptography idna - -To activate certificate checking, call -:func:`~urllib3.contrib.pyopenssl.inject_into_urllib3` from your Python code -before you begin making HTTP requests. This can be done in a ``sitecustomize`` -module, or at any other time before your application begins using ``urllib3``, -like this:: - - try: - import urllib3.contrib.pyopenssl - urllib3.contrib.pyopenssl.inject_into_urllib3() - except ImportError: - pass - -Now you can use :mod:`urllib3` as you normally would, and it will support SNI -when the required modules are installed. - -Activating this module also has the positive side effect of disabling SSL/TLS -compression in Python 2 (see `CRIME attack`_). - -If you want to configure the default list of supported cipher suites, you can -set the ``urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST`` variable. - -.. _sni: https://en.wikipedia.org/wiki/Server_Name_Indication -.. _crime attack: https://en.wikipedia.org/wiki/CRIME_(security_exploit) -""" -from __future__ import absolute_import - -import OpenSSL.SSL -from cryptography import x509 -from cryptography.hazmat.backends.openssl import backend as openssl_backend -from cryptography.hazmat.backends.openssl.x509 import _Certificate -try: - from cryptography.x509 import UnsupportedExtension -except ImportError: - # UnsupportedExtension is gone in cryptography >= 2.1.0 - class UnsupportedExtension(Exception): - pass - -from socket import timeout, error as SocketError -from io import BytesIO - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -import logging -import ssl -from ..packages import six -import sys - -from .. import util - -__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] - -# SNI always works. -HAS_SNI = True - -# Map from urllib3 to PyOpenSSL compatible parameter-values. -_openssl_versions = { - ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD, - ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, -} - -if hasattr(ssl, 'PROTOCOL_TLSv1_1') and hasattr(OpenSSL.SSL, 'TLSv1_1_METHOD'): - _openssl_versions[ssl.PROTOCOL_TLSv1_1] = OpenSSL.SSL.TLSv1_1_METHOD - -if hasattr(ssl, 'PROTOCOL_TLSv1_2') and hasattr(OpenSSL.SSL, 'TLSv1_2_METHOD'): - _openssl_versions[ssl.PROTOCOL_TLSv1_2] = OpenSSL.SSL.TLSv1_2_METHOD - -try: - _openssl_versions.update({ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD}) -except AttributeError: - pass - -_stdlib_to_openssl_verify = { - ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, - ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, - ssl.CERT_REQUIRED: - OpenSSL.SSL.VERIFY_PEER + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, -} -_openssl_to_stdlib_verify = dict( - (v, k) for k, v in _stdlib_to_openssl_verify.items() -) - -# OpenSSL will only write 16K at a time -SSL_WRITE_BLOCKSIZE = 16384 - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - - -log = logging.getLogger(__name__) - - -def inject_into_urllib3(): - 'Monkey-patch urllib3 with PyOpenSSL-backed SSL-support.' - - _validate_dependencies_met() - - util.ssl_.SSLContext = PyOpenSSLContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_PYOPENSSL = True - util.ssl_.IS_PYOPENSSL = True - - -def extract_from_urllib3(): - 'Undo monkey-patching by :func:`inject_into_urllib3`.' - - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_PYOPENSSL = False - util.ssl_.IS_PYOPENSSL = False - - -def _validate_dependencies_met(): - """ - Verifies that PyOpenSSL's package-level dependencies have been met. - Throws `ImportError` if they are not met. - """ - # Method added in `cryptography==1.1`; not available in older versions - from cryptography.x509.extensions import Extensions - if getattr(Extensions, "get_extension_for_class", None) is None: - raise ImportError("'cryptography' module missing required functionality. " - "Try upgrading to v1.3.4 or newer.") - - # pyOpenSSL 0.14 and above use cryptography for OpenSSL bindings. The _x509 - # attribute is only present on those versions. - from OpenSSL.crypto import X509 - x509 = X509() - if getattr(x509, "_x509", None) is None: - raise ImportError("'pyOpenSSL' module missing required functionality. " - "Try upgrading to v0.14 or newer.") - - -def _dnsname_to_stdlib(name): - """ - Converts a dNSName SubjectAlternativeName field to the form used by the - standard library on the given Python version. - - Cryptography produces a dNSName as a unicode string that was idna-decoded - from ASCII bytes. We need to idna-encode that string to get it back, and - then on Python 3 we also need to convert to unicode via UTF-8 (the stdlib - uses PyUnicode_FromStringAndSize on it, which decodes via UTF-8). - """ - def idna_encode(name): - """ - Borrowed wholesale from the Python Cryptography Project. It turns out - that we can't just safely call `idna.encode`: it can explode for - wildcard names. This avoids that problem. - """ - import idna - - for prefix in [u'*.', u'.']: - if name.startswith(prefix): - name = name[len(prefix):] - return prefix.encode('ascii') + idna.encode(name) - return idna.encode(name) - - name = idna_encode(name) - if sys.version_info >= (3, 0): - name = name.decode('utf-8') - return name - - -def get_subj_alt_name(peer_cert): - """ - Given an PyOpenSSL certificate, provides all the subject alternative names. - """ - # Pass the cert to cryptography, which has much better APIs for this. - if hasattr(peer_cert, "to_cryptography"): - cert = peer_cert.to_cryptography() - else: - # This is technically using private APIs, but should work across all - # relevant versions before PyOpenSSL got a proper API for this. - cert = _Certificate(openssl_backend, peer_cert._x509) - - # We want to find the SAN extension. Ask Cryptography to locate it (it's - # faster than looping in Python) - try: - ext = cert.extensions.get_extension_for_class( - x509.SubjectAlternativeName - ).value - except x509.ExtensionNotFound: - # No such extension, return the empty list. - return [] - except (x509.DuplicateExtension, UnsupportedExtension, - x509.UnsupportedGeneralNameType, UnicodeError) as e: - # A problem has been found with the quality of the certificate. Assume - # no SAN field is present. - log.warning( - "A problem was encountered with the certificate that prevented " - "urllib3 from finding the SubjectAlternativeName field. This can " - "affect certificate validation. The error was %s", - e, - ) - return [] - - # We want to return dNSName and iPAddress fields. We need to cast the IPs - # back to strings because the match_hostname function wants them as - # strings. - # Sadly the DNS names need to be idna encoded and then, on Python 3, UTF-8 - # decoded. This is pretty frustrating, but that's what the standard library - # does with certificates, and so we need to attempt to do the same. - names = [ - ('DNS', _dnsname_to_stdlib(name)) - for name in ext.get_values_for_type(x509.DNSName) - ] - names.extend( - ('IP Address', str(name)) - for name in ext.get_values_for_type(x509.IPAddress) - ) - - return names - - -class WrappedSocket(object): - '''API-compatibility wrapper for Python OpenSSL's Connection-class. - - Note: _makefile_refs, _drop() and _reuse() are needed for the garbage - collector of pypy. - ''' - - def __init__(self, connection, socket, suppress_ragged_eofs=True): - self.connection = connection - self.socket = socket - self.suppress_ragged_eofs = suppress_ragged_eofs - self._makefile_refs = 0 - self._closed = False - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, *args, **kwargs): - try: - data = self.connection.recv(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): - return b'' - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError as e: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return b'' - else: - raise - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout('The read operation timed out') - else: - return self.recv(*args, **kwargs) - else: - return data - - def recv_into(self, *args, **kwargs): - try: - return self.connection.recv_into(*args, **kwargs) - except OpenSSL.SSL.SysCallError as e: - if self.suppress_ragged_eofs and e.args == (-1, 'Unexpected EOF'): - return 0 - else: - raise SocketError(str(e)) - except OpenSSL.SSL.ZeroReturnError as e: - if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: - return 0 - else: - raise - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(self.socket, self.socket.gettimeout()): - raise timeout('The read operation timed out') - else: - return self.recv_into(*args, **kwargs) - - def settimeout(self, timeout): - return self.socket.settimeout(timeout) - - def _send_until_done(self, data): - while True: - try: - return self.connection.send(data) - except OpenSSL.SSL.WantWriteError: - if not util.wait_for_write(self.socket, self.socket.gettimeout()): - raise timeout() - continue - except OpenSSL.SSL.SysCallError as e: - raise SocketError(str(e)) - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self._send_until_done(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - # FIXME rethrow compatible exceptions should we ever use this - self.connection.shutdown() - - def close(self): - if self._makefile_refs < 1: - try: - self._closed = True - return self.connection.close() - except OpenSSL.SSL.Error: - return - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - x509 = self.connection.get_peer_certificate() - - if not x509: - return x509 - - if binary_form: - return OpenSSL.crypto.dump_certificate( - OpenSSL.crypto.FILETYPE_ASN1, - x509) - - return { - 'subject': ( - (('commonName', x509.get_subject().CN),), - ), - 'subjectAltName': get_subj_alt_name(x509) - } - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) -else: # Platform-specific: Python 3 - makefile = backport_makefile - -WrappedSocket.makefile = makefile - - -class PyOpenSSLContext(object): - """ - I am a wrapper class for the PyOpenSSL ``Context`` object. I am responsible - for translating the interface of the standard library ``SSLContext`` object - to calls into PyOpenSSL. - """ - def __init__(self, protocol): - self.protocol = _openssl_versions[protocol] - self._ctx = OpenSSL.SSL.Context(self.protocol) - self._options = 0 - self.check_hostname = False - - @property - def options(self): - return self._options - - @options.setter - def options(self, value): - self._options = value - self._ctx.set_options(value) - - @property - def verify_mode(self): - return _openssl_to_stdlib_verify[self._ctx.get_verify_mode()] - - @verify_mode.setter - def verify_mode(self, value): - self._ctx.set_verify( - _stdlib_to_openssl_verify[value], - _verify_callback - ) - - def set_default_verify_paths(self): - self._ctx.set_default_verify_paths() - - def set_ciphers(self, ciphers): - if isinstance(ciphers, six.text_type): - ciphers = ciphers.encode('utf-8') - self._ctx.set_cipher_list(ciphers) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - if cafile is not None: - cafile = cafile.encode('utf-8') - if capath is not None: - capath = capath.encode('utf-8') - self._ctx.load_verify_locations(cafile, capath) - if cadata is not None: - self._ctx.load_verify_locations(BytesIO(cadata)) - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._ctx.use_certificate_chain_file(certfile) - if password is not None: - self._ctx.set_passwd_cb(lambda max_length, prompt_twice, userdata: password) - self._ctx.use_privatekey_file(keyfile or certfile) - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, suppress_ragged_eofs=True, - server_hostname=None): - cnx = OpenSSL.SSL.Connection(self._ctx, sock) - - if isinstance(server_hostname, six.text_type): # Platform-specific: Python 3 - server_hostname = server_hostname.encode('utf-8') - - if server_hostname is not None: - cnx.set_tlsext_host_name(server_hostname) - - cnx.set_connect_state() - - while True: - try: - cnx.do_handshake() - except OpenSSL.SSL.WantReadError: - if not util.wait_for_read(sock, sock.gettimeout()): - raise timeout('select timed out') - continue - except OpenSSL.SSL.Error as e: - raise ssl.SSLError('bad handshake: %r' % e) - break - - return WrappedSocket(cnx, sock) - - -def _verify_callback(cnx, x509, err_no, err_depth, return_code): - return err_no == 0 diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/securetransport.py b/venv/lib/python3.6/site-packages/urllib3/contrib/securetransport.py deleted file mode 100755 index 77cb59e..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/securetransport.py +++ /dev/null @@ -1,804 +0,0 @@ -""" -SecureTranport support for urllib3 via ctypes. - -This makes platform-native TLS available to urllib3 users on macOS without the -use of a compiler. This is an important feature because the Python Package -Index is moving to become a TLSv1.2-or-higher server, and the default OpenSSL -that ships with macOS is not capable of doing TLSv1.2. The only way to resolve -this is to give macOS users an alternative solution to the problem, and that -solution is to use SecureTransport. - -We use ctypes here because this solution must not require a compiler. That's -because pip is not allowed to require a compiler either. - -This is not intended to be a seriously long-term solution to this problem. -The hope is that PEP 543 will eventually solve this issue for us, at which -point we can retire this contrib module. But in the short term, we need to -solve the impending tire fire that is Python on Mac without this kind of -contrib module. So...here we are. - -To use this module, simply import and inject it:: - - import urllib3.contrib.securetransport - urllib3.contrib.securetransport.inject_into_urllib3() - -Happy TLSing! -""" -from __future__ import absolute_import - -import contextlib -import ctypes -import errno -import os.path -import shutil -import socket -import ssl -import threading -import weakref - -from .. import util -from ._securetransport.bindings import ( - Security, SecurityConst, CoreFoundation -) -from ._securetransport.low_level import ( - _assert_no_error, _cert_array_from_pem, _temporary_keychain, - _load_client_cert_chain -) - -try: # Platform-specific: Python 2 - from socket import _fileobject -except ImportError: # Platform-specific: Python 3 - _fileobject = None - from ..packages.backports.makefile import backport_makefile - -__all__ = ['inject_into_urllib3', 'extract_from_urllib3'] - -# SNI always works -HAS_SNI = True - -orig_util_HAS_SNI = util.HAS_SNI -orig_util_SSLContext = util.ssl_.SSLContext - -# This dictionary is used by the read callback to obtain a handle to the -# calling wrapped socket. This is a pretty silly approach, but for now it'll -# do. I feel like I should be able to smuggle a handle to the wrapped socket -# directly in the SSLConnectionRef, but for now this approach will work I -# guess. -# -# We need to lock around this structure for inserts, but we don't do it for -# reads/writes in the callbacks. The reasoning here goes as follows: -# -# 1. It is not possible to call into the callbacks before the dictionary is -# populated, so once in the callback the id must be in the dictionary. -# 2. The callbacks don't mutate the dictionary, they only read from it, and -# so cannot conflict with any of the insertions. -# -# This is good: if we had to lock in the callbacks we'd drastically slow down -# the performance of this code. -_connection_refs = weakref.WeakValueDictionary() -_connection_ref_lock = threading.Lock() - -# Limit writes to 16kB. This is OpenSSL's limit, but we'll cargo-cult it over -# for no better reason than we need *a* limit, and this one is right there. -SSL_WRITE_BLOCKSIZE = 16384 - -# This is our equivalent of util.ssl_.DEFAULT_CIPHERS, but expanded out to -# individual cipher suites. We need to do this because this is how -# SecureTransport wants them. -CIPHER_SUITES = [ - SecurityConst.TLS_AES_256_GCM_SHA384, - SecurityConst.TLS_CHACHA20_POLY1305_SHA256, - SecurityConst.TLS_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_DHE_DSS_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_DHE_RSA_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_DHE_DSS_WITH_AES_128_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_256_GCM_SHA384, - SecurityConst.TLS_RSA_WITH_AES_128_GCM_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA256, - SecurityConst.TLS_RSA_WITH_AES_256_CBC_SHA, - SecurityConst.TLS_RSA_WITH_AES_128_CBC_SHA, -] - -# Basically this is simple: for PROTOCOL_SSLv23 we turn it into a low of -# TLSv1 and a high of TLSv1.2. For everything else, we pin to that version. -_protocol_to_min_max = { - ssl.PROTOCOL_SSLv23: (SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol12), -} - -if hasattr(ssl, "PROTOCOL_SSLv2"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv2] = ( - SecurityConst.kSSLProtocol2, SecurityConst.kSSLProtocol2 - ) -if hasattr(ssl, "PROTOCOL_SSLv3"): - _protocol_to_min_max[ssl.PROTOCOL_SSLv3] = ( - SecurityConst.kSSLProtocol3, SecurityConst.kSSLProtocol3 - ) -if hasattr(ssl, "PROTOCOL_TLSv1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1] = ( - SecurityConst.kTLSProtocol1, SecurityConst.kTLSProtocol1 - ) -if hasattr(ssl, "PROTOCOL_TLSv1_1"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_1] = ( - SecurityConst.kTLSProtocol11, SecurityConst.kTLSProtocol11 - ) -if hasattr(ssl, "PROTOCOL_TLSv1_2"): - _protocol_to_min_max[ssl.PROTOCOL_TLSv1_2] = ( - SecurityConst.kTLSProtocol12, SecurityConst.kTLSProtocol12 - ) -if hasattr(ssl, "PROTOCOL_TLS"): - _protocol_to_min_max[ssl.PROTOCOL_TLS] = _protocol_to_min_max[ssl.PROTOCOL_SSLv23] - - -def inject_into_urllib3(): - """ - Monkey-patch urllib3 with SecureTransport-backed SSL-support. - """ - util.ssl_.SSLContext = SecureTransportContext - util.HAS_SNI = HAS_SNI - util.ssl_.HAS_SNI = HAS_SNI - util.IS_SECURETRANSPORT = True - util.ssl_.IS_SECURETRANSPORT = True - - -def extract_from_urllib3(): - """ - Undo monkey-patching by :func:`inject_into_urllib3`. - """ - util.ssl_.SSLContext = orig_util_SSLContext - util.HAS_SNI = orig_util_HAS_SNI - util.ssl_.HAS_SNI = orig_util_HAS_SNI - util.IS_SECURETRANSPORT = False - util.ssl_.IS_SECURETRANSPORT = False - - -def _read_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport read callback. This is called by ST to request that data - be returned from the socket. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - requested_length = data_length_pointer[0] - - timeout = wrapped_socket.gettimeout() - error = None - read_count = 0 - - try: - while read_count < requested_length: - if timeout is None or timeout >= 0: - if not util.wait_for_read(base_socket, timeout): - raise socket.error(errno.EAGAIN, 'timed out') - - remaining = requested_length - read_count - buffer = (ctypes.c_char * remaining).from_address( - data_buffer + read_count - ) - chunk_size = base_socket.recv_into(buffer, remaining) - read_count += chunk_size - if not chunk_size: - if not read_count: - return SecurityConst.errSSLClosedGraceful - break - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - data_length_pointer[0] = read_count - if error == errno.ECONNRESET or error == errno.EPIPE: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = read_count - - if read_count != requested_length: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -def _write_callback(connection_id, data_buffer, data_length_pointer): - """ - SecureTransport write callback. This is called by ST to request that data - actually be sent on the network. - """ - wrapped_socket = None - try: - wrapped_socket = _connection_refs.get(connection_id) - if wrapped_socket is None: - return SecurityConst.errSSLInternal - base_socket = wrapped_socket.socket - - bytes_to_write = data_length_pointer[0] - data = ctypes.string_at(data_buffer, bytes_to_write) - - timeout = wrapped_socket.gettimeout() - error = None - sent = 0 - - try: - while sent < bytes_to_write: - if timeout is None or timeout >= 0: - if not util.wait_for_write(base_socket, timeout): - raise socket.error(errno.EAGAIN, 'timed out') - chunk_sent = base_socket.send(data) - sent += chunk_sent - - # This has some needless copying here, but I'm not sure there's - # much value in optimising this data path. - data = data[chunk_sent:] - except (socket.error) as e: - error = e.errno - - if error is not None and error != errno.EAGAIN: - data_length_pointer[0] = sent - if error == errno.ECONNRESET or error == errno.EPIPE: - return SecurityConst.errSSLClosedAbort - raise - - data_length_pointer[0] = sent - - if sent != bytes_to_write: - return SecurityConst.errSSLWouldBlock - - return 0 - except Exception as e: - if wrapped_socket is not None: - wrapped_socket._exception = e - return SecurityConst.errSSLInternal - - -# We need to keep these two objects references alive: if they get GC'd while -# in use then SecureTransport could attempt to call a function that is in freed -# memory. That would be...uh...bad. Yeah, that's the word. Bad. -_read_callback_pointer = Security.SSLReadFunc(_read_callback) -_write_callback_pointer = Security.SSLWriteFunc(_write_callback) - - -class WrappedSocket(object): - """ - API-compatibility wrapper for Python's OpenSSL wrapped socket object. - - Note: _makefile_refs, _drop(), and _reuse() are needed for the garbage - collector of PyPy. - """ - def __init__(self, socket): - self.socket = socket - self.context = None - self._makefile_refs = 0 - self._closed = False - self._exception = None - self._keychain = None - self._keychain_dir = None - self._client_cert_chain = None - - # We save off the previously-configured timeout and then set it to - # zero. This is done because we use select and friends to handle the - # timeouts, but if we leave the timeout set on the lower socket then - # Python will "kindly" call select on that socket again for us. Avoid - # that by forcing the timeout to zero. - self._timeout = self.socket.gettimeout() - self.socket.settimeout(0) - - @contextlib.contextmanager - def _raise_on_error(self): - """ - A context manager that can be used to wrap calls that do I/O from - SecureTransport. If any of the I/O callbacks hit an exception, this - context manager will correctly propagate the exception after the fact. - This avoids silently swallowing those exceptions. - - It also correctly forces the socket closed. - """ - self._exception = None - - # We explicitly don't catch around this yield because in the unlikely - # event that an exception was hit in the block we don't want to swallow - # it. - yield - if self._exception is not None: - exception, self._exception = self._exception, None - self.close() - raise exception - - def _set_ciphers(self): - """ - Sets up the allowed ciphers. By default this matches the set in - util.ssl_.DEFAULT_CIPHERS, at least as supported by macOS. This is done - custom and doesn't allow changing at this time, mostly because parsing - OpenSSL cipher strings is going to be a freaking nightmare. - """ - ciphers = (Security.SSLCipherSuite * len(CIPHER_SUITES))(*CIPHER_SUITES) - result = Security.SSLSetEnabledCiphers( - self.context, ciphers, len(CIPHER_SUITES) - ) - _assert_no_error(result) - - def _custom_validate(self, verify, trust_bundle): - """ - Called when we have set custom validation. We do this in two cases: - first, when cert validation is entirely disabled; and second, when - using a custom trust DB. - """ - # If we disabled cert validation, just say: cool. - if not verify: - return - - # We want data in memory, so load it up. - if os.path.isfile(trust_bundle): - with open(trust_bundle, 'rb') as f: - trust_bundle = f.read() - - cert_array = None - trust = Security.SecTrustRef() - - try: - # Get a CFArray that contains the certs we want. - cert_array = _cert_array_from_pem(trust_bundle) - - # Ok, now the hard part. We want to get the SecTrustRef that ST has - # created for this connection, shove our CAs into it, tell ST to - # ignore everything else it knows, and then ask if it can build a - # chain. This is a buuuunch of code. - result = Security.SSLCopyPeerTrust( - self.context, ctypes.byref(trust) - ) - _assert_no_error(result) - if not trust: - raise ssl.SSLError("Failed to copy trust reference") - - result = Security.SecTrustSetAnchorCertificates(trust, cert_array) - _assert_no_error(result) - - result = Security.SecTrustSetAnchorCertificatesOnly(trust, True) - _assert_no_error(result) - - trust_result = Security.SecTrustResultType() - result = Security.SecTrustEvaluate( - trust, ctypes.byref(trust_result) - ) - _assert_no_error(result) - finally: - if trust: - CoreFoundation.CFRelease(trust) - - if cert_array is not None: - CoreFoundation.CFRelease(cert_array) - - # Ok, now we can look at what the result was. - successes = ( - SecurityConst.kSecTrustResultUnspecified, - SecurityConst.kSecTrustResultProceed - ) - if trust_result.value not in successes: - raise ssl.SSLError( - "certificate verify failed, error code: %d" % - trust_result.value - ) - - def handshake(self, - server_hostname, - verify, - trust_bundle, - min_version, - max_version, - client_cert, - client_key, - client_key_passphrase): - """ - Actually performs the TLS handshake. This is run automatically by - wrapped socket, and shouldn't be needed in user code. - """ - # First, we do the initial bits of connection setup. We need to create - # a context, set its I/O funcs, and set the connection reference. - self.context = Security.SSLCreateContext( - None, SecurityConst.kSSLClientSide, SecurityConst.kSSLStreamType - ) - result = Security.SSLSetIOFuncs( - self.context, _read_callback_pointer, _write_callback_pointer - ) - _assert_no_error(result) - - # Here we need to compute the handle to use. We do this by taking the - # id of self modulo 2**31 - 1. If this is already in the dictionary, we - # just keep incrementing by one until we find a free space. - with _connection_ref_lock: - handle = id(self) % 2147483647 - while handle in _connection_refs: - handle = (handle + 1) % 2147483647 - _connection_refs[handle] = self - - result = Security.SSLSetConnection(self.context, handle) - _assert_no_error(result) - - # If we have a server hostname, we should set that too. - if server_hostname: - if not isinstance(server_hostname, bytes): - server_hostname = server_hostname.encode('utf-8') - - result = Security.SSLSetPeerDomainName( - self.context, server_hostname, len(server_hostname) - ) - _assert_no_error(result) - - # Setup the ciphers. - self._set_ciphers() - - # Set the minimum and maximum TLS versions. - result = Security.SSLSetProtocolVersionMin(self.context, min_version) - _assert_no_error(result) - result = Security.SSLSetProtocolVersionMax(self.context, max_version) - _assert_no_error(result) - - # If there's a trust DB, we need to use it. We do that by telling - # SecureTransport to break on server auth. We also do that if we don't - # want to validate the certs at all: we just won't actually do any - # authing in that case. - if not verify or trust_bundle is not None: - result = Security.SSLSetSessionOption( - self.context, - SecurityConst.kSSLSessionOptionBreakOnServerAuth, - True - ) - _assert_no_error(result) - - # If there's a client cert, we need to use it. - if client_cert: - self._keychain, self._keychain_dir = _temporary_keychain() - self._client_cert_chain = _load_client_cert_chain( - self._keychain, client_cert, client_key - ) - result = Security.SSLSetCertificate( - self.context, self._client_cert_chain - ) - _assert_no_error(result) - - while True: - with self._raise_on_error(): - result = Security.SSLHandshake(self.context) - - if result == SecurityConst.errSSLWouldBlock: - raise socket.timeout("handshake timed out") - elif result == SecurityConst.errSSLServerAuthCompleted: - self._custom_validate(verify, trust_bundle) - continue - else: - _assert_no_error(result) - break - - def fileno(self): - return self.socket.fileno() - - # Copy-pasted from Python 3.5 source code - def _decref_socketios(self): - if self._makefile_refs > 0: - self._makefile_refs -= 1 - if self._closed: - self.close() - - def recv(self, bufsiz): - buffer = ctypes.create_string_buffer(bufsiz) - bytes_read = self.recv_into(buffer, bufsiz) - data = buffer[:bytes_read] - return data - - def recv_into(self, buffer, nbytes=None): - # Read short on EOF. - if self._closed: - return 0 - - if nbytes is None: - nbytes = len(buffer) - - buffer = (ctypes.c_char * nbytes).from_buffer(buffer) - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLRead( - self.context, buffer, nbytes, ctypes.byref(processed_bytes) - ) - - # There are some result codes that we want to treat as "not always - # errors". Specifically, those are errSSLWouldBlock, - # errSSLClosedGraceful, and errSSLClosedNoNotify. - if (result == SecurityConst.errSSLWouldBlock): - # If we didn't process any bytes, then this was just a time out. - # However, we can get errSSLWouldBlock in situations when we *did* - # read some data, and in those cases we should just read "short" - # and return. - if processed_bytes.value == 0: - # Timed out, no data read. - raise socket.timeout("recv timed out") - elif result in (SecurityConst.errSSLClosedGraceful, SecurityConst.errSSLClosedNoNotify): - # The remote peer has closed this connection. We should do so as - # well. Note that we don't actually return here because in - # principle this could actually be fired along with return data. - # It's unlikely though. - self.close() - else: - _assert_no_error(result) - - # Ok, we read and probably succeeded. We should return whatever data - # was actually read. - return processed_bytes.value - - def settimeout(self, timeout): - self._timeout = timeout - - def gettimeout(self): - return self._timeout - - def send(self, data): - processed_bytes = ctypes.c_size_t(0) - - with self._raise_on_error(): - result = Security.SSLWrite( - self.context, data, len(data), ctypes.byref(processed_bytes) - ) - - if result == SecurityConst.errSSLWouldBlock and processed_bytes.value == 0: - # Timed out - raise socket.timeout("send timed out") - else: - _assert_no_error(result) - - # We sent, and probably succeeded. Tell them how much we sent. - return processed_bytes.value - - def sendall(self, data): - total_sent = 0 - while total_sent < len(data): - sent = self.send(data[total_sent:total_sent + SSL_WRITE_BLOCKSIZE]) - total_sent += sent - - def shutdown(self): - with self._raise_on_error(): - Security.SSLClose(self.context) - - def close(self): - # TODO: should I do clean shutdown here? Do I have to? - if self._makefile_refs < 1: - self._closed = True - if self.context: - CoreFoundation.CFRelease(self.context) - self.context = None - if self._client_cert_chain: - CoreFoundation.CFRelease(self._client_cert_chain) - self._client_cert_chain = None - if self._keychain: - Security.SecKeychainDelete(self._keychain) - CoreFoundation.CFRelease(self._keychain) - shutil.rmtree(self._keychain_dir) - self._keychain = self._keychain_dir = None - return self.socket.close() - else: - self._makefile_refs -= 1 - - def getpeercert(self, binary_form=False): - # Urgh, annoying. - # - # Here's how we do this: - # - # 1. Call SSLCopyPeerTrust to get hold of the trust object for this - # connection. - # 2. Call SecTrustGetCertificateAtIndex for index 0 to get the leaf. - # 3. To get the CN, call SecCertificateCopyCommonName and process that - # string so that it's of the appropriate type. - # 4. To get the SAN, we need to do something a bit more complex: - # a. Call SecCertificateCopyValues to get the data, requesting - # kSecOIDSubjectAltName. - # b. Mess about with this dictionary to try to get the SANs out. - # - # This is gross. Really gross. It's going to be a few hundred LoC extra - # just to repeat something that SecureTransport can *already do*. So my - # operating assumption at this time is that what we want to do is - # instead to just flag to urllib3 that it shouldn't do its own hostname - # validation when using SecureTransport. - if not binary_form: - raise ValueError( - "SecureTransport only supports dumping binary certs" - ) - trust = Security.SecTrustRef() - certdata = None - der_bytes = None - - try: - # Grab the trust store. - result = Security.SSLCopyPeerTrust( - self.context, ctypes.byref(trust) - ) - _assert_no_error(result) - if not trust: - # Probably we haven't done the handshake yet. No biggie. - return None - - cert_count = Security.SecTrustGetCertificateCount(trust) - if not cert_count: - # Also a case that might happen if we haven't handshaked. - # Handshook? Handshaken? - return None - - leaf = Security.SecTrustGetCertificateAtIndex(trust, 0) - assert leaf - - # Ok, now we want the DER bytes. - certdata = Security.SecCertificateCopyData(leaf) - assert certdata - - data_length = CoreFoundation.CFDataGetLength(certdata) - data_buffer = CoreFoundation.CFDataGetBytePtr(certdata) - der_bytes = ctypes.string_at(data_buffer, data_length) - finally: - if certdata: - CoreFoundation.CFRelease(certdata) - if trust: - CoreFoundation.CFRelease(trust) - - return der_bytes - - def _reuse(self): - self._makefile_refs += 1 - - def _drop(self): - if self._makefile_refs < 1: - self.close() - else: - self._makefile_refs -= 1 - - -if _fileobject: # Platform-specific: Python 2 - def makefile(self, mode, bufsize=-1): - self._makefile_refs += 1 - return _fileobject(self, mode, bufsize, close=True) -else: # Platform-specific: Python 3 - def makefile(self, mode="r", buffering=None, *args, **kwargs): - # We disable buffering with SecureTransport because it conflicts with - # the buffering that ST does internally (see issue #1153 for more). - buffering = 0 - return backport_makefile(self, mode, buffering, *args, **kwargs) - -WrappedSocket.makefile = makefile - - -class SecureTransportContext(object): - """ - I am a wrapper class for the SecureTransport library, to translate the - interface of the standard library ``SSLContext`` object to calls into - SecureTransport. - """ - def __init__(self, protocol): - self._min_version, self._max_version = _protocol_to_min_max[protocol] - self._options = 0 - self._verify = False - self._trust_bundle = None - self._client_cert = None - self._client_key = None - self._client_key_passphrase = None - - @property - def check_hostname(self): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - return True - - @check_hostname.setter - def check_hostname(self, value): - """ - SecureTransport cannot have its hostname checking disabled. For more, - see the comment on getpeercert() in this file. - """ - pass - - @property - def options(self): - # TODO: Well, crap. - # - # So this is the bit of the code that is the most likely to cause us - # trouble. Essentially we need to enumerate all of the SSL options that - # users might want to use and try to see if we can sensibly translate - # them, or whether we should just ignore them. - return self._options - - @options.setter - def options(self, value): - # TODO: Update in line with above. - self._options = value - - @property - def verify_mode(self): - return ssl.CERT_REQUIRED if self._verify else ssl.CERT_NONE - - @verify_mode.setter - def verify_mode(self, value): - self._verify = True if value == ssl.CERT_REQUIRED else False - - def set_default_verify_paths(self): - # So, this has to do something a bit weird. Specifically, what it does - # is nothing. - # - # This means that, if we had previously had load_verify_locations - # called, this does not undo that. We need to do that because it turns - # out that the rest of the urllib3 code will attempt to load the - # default verify paths if it hasn't been told about any paths, even if - # the context itself was sometime earlier. We resolve that by just - # ignoring it. - pass - - def load_default_certs(self): - return self.set_default_verify_paths() - - def set_ciphers(self, ciphers): - # For now, we just require the default cipher string. - if ciphers != util.ssl_.DEFAULT_CIPHERS: - raise ValueError( - "SecureTransport doesn't support custom cipher strings" - ) - - def load_verify_locations(self, cafile=None, capath=None, cadata=None): - # OK, we only really support cadata and cafile. - if capath is not None: - raise ValueError( - "SecureTransport does not support cert directories" - ) - - self._trust_bundle = cafile or cadata - - def load_cert_chain(self, certfile, keyfile=None, password=None): - self._client_cert = certfile - self._client_key = keyfile - self._client_cert_passphrase = password - - def wrap_socket(self, sock, server_side=False, - do_handshake_on_connect=True, suppress_ragged_eofs=True, - server_hostname=None): - # So, what do we do here? Firstly, we assert some properties. This is a - # stripped down shim, so there is some functionality we don't support. - # See PEP 543 for the real deal. - assert not server_side - assert do_handshake_on_connect - assert suppress_ragged_eofs - - # Ok, we're good to go. Now we want to create the wrapped socket object - # and store it in the appropriate place. - wrapped_socket = WrappedSocket(sock) - - # Now we can handshake - wrapped_socket.handshake( - server_hostname, self._verify, self._trust_bundle, - self._min_version, self._max_version, self._client_cert, - self._client_key, self._client_key_passphrase - ) - return wrapped_socket diff --git a/venv/lib/python3.6/site-packages/urllib3/contrib/socks.py b/venv/lib/python3.6/site-packages/urllib3/contrib/socks.py deleted file mode 100755 index 811e312..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/contrib/socks.py +++ /dev/null @@ -1,192 +0,0 @@ -# -*- coding: utf-8 -*- -""" -This module contains provisional support for SOCKS proxies from within -urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and -SOCKS5. To enable its functionality, either install PySocks or install this -module with the ``socks`` extra. - -The SOCKS implementation supports the full range of urllib3 features. It also -supports the following SOCKS features: - -- SOCKS4 -- SOCKS4a -- SOCKS5 -- Usernames and passwords for the SOCKS proxy - -Known Limitations: - -- Currently PySocks does not support contacting remote websites via literal - IPv6 addresses. Any such connection attempt will fail. You must use a domain - name. -- Currently PySocks does not support IPv6 connections to the SOCKS proxy. Any - such connection attempt will fail. -""" -from __future__ import absolute_import - -try: - import socks -except ImportError: - import warnings - from ..exceptions import DependencyWarning - - warnings.warn(( - 'SOCKS support in urllib3 requires the installation of optional ' - 'dependencies: specifically, PySocks. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies' - ), - DependencyWarning - ) - raise - -from socket import error as SocketError, timeout as SocketTimeout - -from ..connection import ( - HTTPConnection, HTTPSConnection -) -from ..connectionpool import ( - HTTPConnectionPool, HTTPSConnectionPool -) -from ..exceptions import ConnectTimeoutError, NewConnectionError -from ..poolmanager import PoolManager -from ..util.url import parse_url - -try: - import ssl -except ImportError: - ssl = None - - -class SOCKSConnection(HTTPConnection): - """ - A plain-text HTTP connection that connects via a SOCKS proxy. - """ - def __init__(self, *args, **kwargs): - self._socks_options = kwargs.pop('_socks_options') - super(SOCKSConnection, self).__init__(*args, **kwargs) - - def _new_conn(self): - """ - Establish a new connection via the SOCKS proxy. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = socks.create_connection( - (self.host, self.port), - proxy_type=self._socks_options['socks_version'], - proxy_addr=self._socks_options['proxy_host'], - proxy_port=self._socks_options['proxy_port'], - proxy_username=self._socks_options['username'], - proxy_password=self._socks_options['password'], - proxy_rdns=self._socks_options['rdns'], - timeout=self.timeout, - **extra_kw - ) - - except SocketTimeout as e: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - except socks.ProxyError as e: - # This is fragile as hell, but it seems to be the only way to raise - # useful errors here. - if e.socket_err: - error = e.socket_err - if isinstance(error, SocketTimeout): - raise ConnectTimeoutError( - self, - "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout) - ) - else: - raise NewConnectionError( - self, - "Failed to establish a new connection: %s" % error - ) - else: - raise NewConnectionError( - self, - "Failed to establish a new connection: %s" % e - ) - - except SocketError as e: # Defensive: PySocks should catch all these. - raise NewConnectionError( - self, "Failed to establish a new connection: %s" % e) - - return conn - - -# We don't need to duplicate the Verified/Unverified distinction from -# urllib3/connection.py here because the HTTPSConnection will already have been -# correctly set to either the Verified or Unverified form by that module. This -# means the SOCKSHTTPSConnection will automatically be the correct type. -class SOCKSHTTPSConnection(SOCKSConnection, HTTPSConnection): - pass - - -class SOCKSHTTPConnectionPool(HTTPConnectionPool): - ConnectionCls = SOCKSConnection - - -class SOCKSHTTPSConnectionPool(HTTPSConnectionPool): - ConnectionCls = SOCKSHTTPSConnection - - -class SOCKSProxyManager(PoolManager): - """ - A version of the urllib3 ProxyManager that routes connections via the - defined SOCKS proxy. - """ - pool_classes_by_scheme = { - 'http': SOCKSHTTPConnectionPool, - 'https': SOCKSHTTPSConnectionPool, - } - - def __init__(self, proxy_url, username=None, password=None, - num_pools=10, headers=None, **connection_pool_kw): - parsed = parse_url(proxy_url) - - if username is None and password is None and parsed.auth is not None: - split = parsed.auth.split(':') - if len(split) == 2: - username, password = split - if parsed.scheme == 'socks5': - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = False - elif parsed.scheme == 'socks5h': - socks_version = socks.PROXY_TYPE_SOCKS5 - rdns = True - elif parsed.scheme == 'socks4': - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = False - elif parsed.scheme == 'socks4a': - socks_version = socks.PROXY_TYPE_SOCKS4 - rdns = True - else: - raise ValueError( - "Unable to determine SOCKS version from %s" % proxy_url - ) - - self.proxy_url = proxy_url - - socks_options = { - 'socks_version': socks_version, - 'proxy_host': parsed.host, - 'proxy_port': parsed.port, - 'username': username, - 'password': password, - 'rdns': rdns - } - connection_pool_kw['_socks_options'] = socks_options - - super(SOCKSProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw - ) - - self.pool_classes_by_scheme = SOCKSProxyManager.pool_classes_by_scheme diff --git a/venv/lib/python3.6/site-packages/urllib3/exceptions.py b/venv/lib/python3.6/site-packages/urllib3/exceptions.py deleted file mode 100755 index 7bbaa98..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/exceptions.py +++ /dev/null @@ -1,246 +0,0 @@ -from __future__ import absolute_import -from .packages.six.moves.http_client import ( - IncompleteRead as httplib_IncompleteRead -) -# Base Exceptions - - -class HTTPError(Exception): - "Base exception used by this module." - pass - - -class HTTPWarning(Warning): - "Base warning used by this module." - pass - - -class PoolError(HTTPError): - "Base exception for errors caused within a pool." - def __init__(self, pool, message): - self.pool = pool - HTTPError.__init__(self, "%s: %s" % (pool, message)) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, None) - - -class RequestError(PoolError): - "Base exception for PoolErrors that have associated URLs." - def __init__(self, pool, url, message): - self.url = url - PoolError.__init__(self, pool, message) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, self.url, None) - - -class SSLError(HTTPError): - "Raised when SSL certificate fails in an HTTPS connection." - pass - - -class ProxyError(HTTPError): - "Raised when the connection to a proxy fails." - pass - - -class DecodeError(HTTPError): - "Raised when automatic decoding based on Content-Type fails." - pass - - -class ProtocolError(HTTPError): - "Raised when something unexpected happens mid-request/response." - pass - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -# Leaf Exceptions - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param string url: The requested Url - :param exceptions.Exception reason: The underlying error - - """ - - def __init__(self, pool, url, reason=None): - self.reason = reason - - message = "Max retries exceeded with url: %s (Caused by %r)" % ( - url, reason) - - RequestError.__init__(self, pool, url, message) - - -class HostChangedError(RequestError): - "Raised when an existing pool gets a request for a foreign host." - - def __init__(self, pool, url, retries=3): - message = "Tried to open a foreign host with url: %s" % url - RequestError.__init__(self, pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """ Raised when passing an invalid state to a timeout """ - pass - - -class TimeoutError(HTTPError): - """ Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - <ReadTimeoutError>` and :exc:`ConnectTimeoutErrors <ConnectTimeoutError>`. - """ - pass - - -class ReadTimeoutError(TimeoutError, RequestError): - "Raised when a socket timeout occurs while receiving data from a server" - pass - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - "Raised when a socket timeout occurs while connecting to a server" - pass - - -class NewConnectionError(ConnectTimeoutError, PoolError): - "Raised when we fail to establish a new connection. Usually ECONNREFUSED." - pass - - -class EmptyPoolError(PoolError): - "Raised when a pool runs out of connections and no more are allowed." - pass - - -class ClosedPoolError(PoolError): - "Raised when a request enters a pool after the pool has been closed." - pass - - -class LocationValueError(ValueError, HTTPError): - "Raised when there is something wrong with a given URL input." - pass - - -class LocationParseError(LocationValueError): - "Raised when get_host or similar fails to parse the URL input." - - def __init__(self, location): - message = "Failed to parse: %s" % location - HTTPError.__init__(self, message) - - self.location = location - - -class ResponseError(HTTPError): - "Used as a container for an error reason supplied in a MaxRetryError." - GENERIC_ERROR = 'too many error responses' - SPECIFIC_ERROR = 'too many {status_code} error responses' - - -class SecurityWarning(HTTPWarning): - "Warned when performing security reducing actions" - pass - - -class SubjectAltNameWarning(SecurityWarning): - "Warned when connecting to a host with a certificate missing a SAN." - pass - - -class InsecureRequestWarning(SecurityWarning): - "Warned when making an unverified HTTPS request." - pass - - -class SystemTimeWarning(SecurityWarning): - "Warned when system time is suspected to be wrong" - pass - - -class InsecurePlatformWarning(SecurityWarning): - "Warned when certain SSL configuration is not available on a platform." - pass - - -class SNIMissingWarning(HTTPWarning): - "Warned when making a HTTPS request without SNI available." - pass - - -class DependencyWarning(HTTPWarning): - """ - Warned when an attempt is made to import a module with missing optional - dependencies. - """ - pass - - -class ResponseNotChunked(ProtocolError, ValueError): - "Response needs to be chunked in order to read it as chunks." - pass - - -class BodyNotHttplibCompatible(HTTPError): - """ - Body should be httplib.HTTPResponse like (have an fp attribute which - returns raw chunks) for read_chunked(). - """ - pass - - -class IncompleteRead(HTTPError, httplib_IncompleteRead): - """ - Response length doesn't match expected Content-Length - - Subclass of http_client.IncompleteRead to allow int value - for `partial` to avoid creating large objects on streamed - reads. - """ - def __init__(self, partial, expected): - super(IncompleteRead, self).__init__(partial, expected) - - def __repr__(self): - return ('IncompleteRead(%i bytes read, ' - '%i more expected)' % (self.partial, self.expected)) - - -class InvalidHeader(HTTPError): - "The header provided was somehow invalid." - pass - - -class ProxySchemeUnknown(AssertionError, ValueError): - "ProxyManager does not support the supplied scheme" - # TODO(t-8ch): Stop inheriting from AssertionError in v2.0. - - def __init__(self, scheme): - message = "Not supported proxy scheme %s" % scheme - super(ProxySchemeUnknown, self).__init__(message) - - -class HeaderParsingError(HTTPError): - "Raised by assert_header_parsing, but we convert it to a log.warning statement." - def __init__(self, defects, unparsed_data): - message = '%s, unparsed data: %r' % (defects or 'Unknown', unparsed_data) - super(HeaderParsingError, self).__init__(message) - - -class UnrewindableBodyError(HTTPError): - "urllib3 encountered an error when trying to rewind a body" - pass diff --git a/venv/lib/python3.6/site-packages/urllib3/fields.py b/venv/lib/python3.6/site-packages/urllib3/fields.py deleted file mode 100755 index 37fe64a..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/fields.py +++ /dev/null @@ -1,178 +0,0 @@ -from __future__ import absolute_import -import email.utils -import mimetypes - -from .packages import six - - -def guess_content_type(filename, default='application/octet-stream'): - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param(name, value): - """ - Helper function to format and quote a single header parameter. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows RFC 2231, as - suggested by RFC 2388 Section 4.4. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - if not any(ch in value for ch in '"\\\r\n'): - result = '%s="%s"' % (name, value) - try: - result.encode('ascii') - except (UnicodeEncodeError, UnicodeDecodeError): - pass - else: - return result - if not six.PY3 and isinstance(value, six.text_type): # Python 2: - value = value.encode('utf-8') - value = email.utils.encode_rfc2231(value, 'utf-8') - value = '%s*=%s' % (name, value) - return value - - -class RequestField(object): - """ - A data container for request body parameters. - - :param name: - The name of this request field. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. - :param headers: - An optional dict-like object of headers to initially use for the field. - """ - def __init__(self, name, data, filename=None, headers=None): - self._name = name - self._filename = filename - self.data = data - self.headers = {} - if headers: - self.headers = dict(headers) - - @classmethod - def from_tuples(cls, fieldname, value): - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls(fieldname, data, filename=filename) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name, value): - """ - Overridable helper function to format a single header parameter. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - return format_header_param(name, value) - - def _render_parts(self, header_parts): - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) tuples or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - parts = [] - iterable = header_parts - if isinstance(header_parts, dict): - iterable = header_parts.items() - - for name, value in iterable: - if value is not None: - parts.append(self._render_part(name, value)) - - return '; '.join(parts) - - def render_headers(self): - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ['Content-Disposition', 'Content-Type', 'Content-Location'] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append('%s: %s' % (sort_key, self.headers[sort_key])) - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append('%s: %s' % (header_name, header_value)) - - lines.append('\r\n') - return '\r\n'.join(lines) - - def make_multipart(self, content_disposition=None, content_type=None, - content_location=None): - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - self.headers['Content-Disposition'] = content_disposition or 'form-data' - self.headers['Content-Disposition'] += '; '.join([ - '', self._render_parts( - (('name', self._name), ('filename', self._filename)) - ) - ]) - self.headers['Content-Type'] = content_type - self.headers['Content-Location'] = content_location diff --git a/venv/lib/python3.6/site-packages/urllib3/filepost.py b/venv/lib/python3.6/site-packages/urllib3/filepost.py deleted file mode 100755 index 78f1e19..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/filepost.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import absolute_import -import binascii -import codecs -import os - -from io import BytesIO - -from .packages import six -from .packages.six import b -from .fields import RequestField - -writer = codecs.lookup('utf-8')[3] - - -def choose_boundary(): - """ - Our embarrassingly-simple replacement for mimetools.choose_boundary. - """ - boundary = binascii.hexlify(os.urandom(16)) - if six.PY3: - boundary = boundary.decode('ascii') - return boundary - - -def iter_field_objects(fields): - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - if isinstance(fields, dict): - i = six.iteritems(fields) - else: - i = iter(fields) - - for field in i: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def iter_fields(fields): - """ - .. deprecated:: 1.6 - - Iterate over fields. - - The addition of :class:`~urllib3.fields.RequestField` makes this function - obsolete. Instead, use :func:`iter_field_objects`, which returns - :class:`~urllib3.fields.RequestField` objects. - - Supports list of (k, v) tuples and dicts. - """ - if isinstance(fields, dict): - return ((k, v) for k, v in six.iteritems(fields)) - - return ((k, v) for k, v in fields) - - -def encode_multipart_formdata(fields, boundary=None): - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`urllib3.filepost.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(b('--%s\r\n' % (boundary))) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, six.text_type): - writer(body).write(data) - else: - body.write(data) - - body.write(b'\r\n') - - body.write(b('--%s--\r\n' % (boundary))) - - content_type = str('multipart/form-data; boundary=%s' % boundary) - - return body.getvalue(), content_type diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/__init__.py b/venv/lib/python3.6/site-packages/urllib3/packages/__init__.py deleted file mode 100755 index 170e974..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/packages/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import absolute_import - -from . import ssl_match_hostname - -__all__ = ('ssl_match_hostname', ) diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/backports/__init__.py b/venv/lib/python3.6/site-packages/urllib3/packages/backports/__init__.py deleted file mode 100755 index e69de29..0000000 diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/backports/makefile.py b/venv/lib/python3.6/site-packages/urllib3/packages/backports/makefile.py deleted file mode 100755 index 75b80dc..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/packages/backports/makefile.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -""" -backports.makefile -~~~~~~~~~~~~~~~~~~ - -Backports the Python 3 ``socket.makefile`` method for use with anything that -wants to create a "fake" socket object. -""" -import io - -from socket import SocketIO - - -def backport_makefile(self, mode="r", buffering=None, encoding=None, - errors=None, newline=None): - """ - Backport of ``socket.makefile`` from Python 3.5. - """ - if not set(mode) <= set(["r", "w", "b"]): - raise ValueError( - "invalid mode %r (only r, w, b allowed)" % (mode,) - ) - writing = "w" in mode - reading = "r" in mode or not writing - assert reading or writing - binary = "b" in mode - rawmode = "" - if reading: - rawmode += "r" - if writing: - rawmode += "w" - raw = SocketIO(self, rawmode) - self._makefile_refs += 1 - if buffering is None: - buffering = -1 - if buffering < 0: - buffering = io.DEFAULT_BUFFER_SIZE - if buffering == 0: - if not binary: - raise ValueError("unbuffered streams must be binary") - return raw - if reading and writing: - buffer = io.BufferedRWPair(raw, raw, buffering) - elif reading: - buffer = io.BufferedReader(raw, buffering) - else: - assert writing - buffer = io.BufferedWriter(raw, buffering) - if binary: - return buffer - text = io.TextIOWrapper(buffer, encoding, errors, newline) - text.mode = mode - return text diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/ordered_dict.py b/venv/lib/python3.6/site-packages/urllib3/packages/ordered_dict.py deleted file mode 100755 index 4479363..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/packages/ordered_dict.py +++ /dev/null @@ -1,259 +0,0 @@ -# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. -# Passes Python2.7's test suite and incorporates all the latest updates. -# Copyright 2009 Raymond Hettinger, released under the MIT License. -# http://code.activestate.com/recipes/576693/ -try: - from thread import get_ident as _get_ident -except ImportError: - from dummy_thread import get_ident as _get_ident - -try: - from _abcoll import KeysView, ValuesView, ItemsView -except ImportError: - pass - - -class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args),)) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running={}): - 'od.__repr__() <==> repr(od)' - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/six.py b/venv/lib/python3.6/site-packages/urllib3/packages/six.py deleted file mode 100755 index 190c023..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/packages/six.py +++ /dev/null @@ -1,868 +0,0 @@ -"""Utilities for writing code that runs on Python 2 and 3""" - -# Copyright (c) 2010-2015 Benjamin Peterson -# -# 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. - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson <benjamin@python.org>" -__version__ = "1.10.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - raise tp, value, tb -""") - - -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - if from_value is None: - raise value - raise value from from_value -""") -elif sys.version_info[:2] > (3, 2): - exec_("""def raise_from(value, from_value): - raise value from from_value -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(meta): - - def __new__(cls, name, this_bases, d): - return meta(name, bases, d) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def python_2_unicode_compatible(klass): - """ - A decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/__init__.py b/venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/__init__.py deleted file mode 100755 index d6594eb..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -import sys - -try: - # Our match_hostname function is the same as 3.5's, so we only want to - # import the match_hostname function if it's at least that good. - if sys.version_info < (3, 5): - raise ImportError("Fallback to vendored code") - - from ssl import CertificateError, match_hostname -except ImportError: - try: - # Backport of the function from a pypi module - from backports.ssl_match_hostname import CertificateError, match_hostname - except ImportError: - # Our vendored copy - from ._implementation import CertificateError, match_hostname - -# Not needed, but documenting what we provide. -__all__ = ('CertificateError', 'match_hostname') diff --git a/venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py b/venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py deleted file mode 100755 index 1fd42f3..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/packages/ssl_match_hostname/_implementation.py +++ /dev/null @@ -1,157 +0,0 @@ -"""The match_hostname() function from Python 3.3.3, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html - -import re -import sys - -# ipaddress has been backported to 2.6+ in pypi. If it is installed on the -# system, use it to handle IPAddress ServerAltnames (this was added in -# python-3.5) otherwise only do DNS matching. This allows -# backports.ssl_match_hostname to continue to be used all the way back to -# python-2.4. -try: - import ipaddress -except ImportError: - ipaddress = None - -__version__ = '3.5.0.1' - - -class CertificateError(ValueError): - pass - - -def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r'.') - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - -def _to_unicode(obj): - if isinstance(obj, str) and sys.version_info < (3,): - obj = unicode(obj, encoding='ascii', errors='strict') - return obj - -def _ipaddress_match(ipname, host_ip): - """Exact matching of IP addresses. - - RFC 6125 explicitly doesn't define an algorithm for this - (section 1.7.2 - "Out of Scope"). - """ - # OpenSSL may add a trailing newline to a subjectAltName's IP address - # Divergence from upstream: ipaddress can't handle byte str - ip = ipaddress.ip_address(_to_unicode(ipname).rstrip()) - return ip == host_ip - - -def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate, match_hostname needs a " - "SSL socket or SSL context with either " - "CERT_OPTIONAL or CERT_REQUIRED") - try: - # Divergence from upstream: ipaddress can't handle byte str - host_ip = ipaddress.ip_address(_to_unicode(hostname)) - except ValueError: - # Not an IP address (common case) - host_ip = None - except UnicodeError: - # Divergence from upstream: Have to deal with ipaddress not taking - # byte strings. addresses should be all ascii, so we consider it not - # an ipaddress in this case - host_ip = None - except AttributeError: - # Divergence from upstream: Make ipaddress library optional - if ipaddress is None: - host_ip = None - else: - raise - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if host_ip is None and _dnsname_match(value, hostname): - return - dnsnames.append(value) - elif key == 'IP Address': - if host_ip is not None and _ipaddress_match(value, host_ip): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" - % (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" - % (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") diff --git a/venv/lib/python3.6/site-packages/urllib3/poolmanager.py b/venv/lib/python3.6/site-packages/urllib3/poolmanager.py deleted file mode 100755 index 506a3c9..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/poolmanager.py +++ /dev/null @@ -1,449 +0,0 @@ -from __future__ import absolute_import -import collections -import functools -import logging - -from ._collections import RecentlyUsedContainer -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from .connectionpool import port_by_scheme -from .exceptions import LocationValueError, MaxRetryError, ProxySchemeUnknown -from .packages.six.moves.urllib.parse import urljoin -from .request import RequestMethods -from .util.url import parse_url -from .util.retry import Retry - - -__all__ = ['PoolManager', 'ProxyManager', 'proxy_from_url'] - - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ('key_file', 'cert_file', 'cert_reqs', 'ca_certs', - 'ssl_version', 'ca_cert_dir', 'ssl_context') - -# All known keyword arguments that could be provided to the pool manager, its -# pools, or the underlying connections. This is used to construct a pool key. -_key_fields = ( - 'key_scheme', # str - 'key_host', # str - 'key_port', # int - 'key_timeout', # int or float or Timeout - 'key_retries', # int or Retry - 'key_strict', # bool - 'key_block', # bool - 'key_source_address', # str - 'key_key_file', # str - 'key_cert_file', # str - 'key_cert_reqs', # str - 'key_ca_certs', # str - 'key_ssl_version', # str - 'key_ca_cert_dir', # str - 'key_ssl_context', # instance of ssl.SSLContext or urllib3.util.ssl_.SSLContext - 'key_maxsize', # int - 'key_headers', # dict - 'key__proxy', # parsed proxy url - 'key__proxy_headers', # dict - 'key_socket_options', # list of (level (int), optname (int), value (int or str)) tuples - 'key__socks_options', # dict - 'key_assert_hostname', # bool or string - 'key_assert_fingerprint', # str -) - -#: The namedtuple class used to construct keys for the connection pool. -#: All custom key schemes should include the fields in this key at a minimum. -PoolKey = collections.namedtuple('PoolKey', _key_fields) - - -def _default_key_normalizer(key_class, request_context): - """ - Create a pool key out of a request context dictionary. - - According to RFC 3986, both the scheme and host are case-insensitive. - Therefore, this function normalizes both before constructing the pool - key for an HTTPS request. If you wish to change this behaviour, provide - alternate callables to ``key_fn_by_scheme``. - - :param key_class: - The class to use when constructing the key. This should be a namedtuple - with the ``scheme`` and ``host`` keys at a minimum. - :type key_class: namedtuple - :param request_context: - A dictionary-like object that contain the context for a request. - :type request_context: dict - - :return: A namedtuple that can be used as a connection pool key. - :rtype: PoolKey - """ - # Since we mutate the dictionary, make a copy first - context = request_context.copy() - context['scheme'] = context['scheme'].lower() - context['host'] = context['host'].lower() - - # These are both dictionaries and need to be transformed into frozensets - for key in ('headers', '_proxy_headers', '_socks_options'): - if key in context and context[key] is not None: - context[key] = frozenset(context[key].items()) - - # The socket_options key may be a list and needs to be transformed into a - # tuple. - socket_opts = context.get('socket_options') - if socket_opts is not None: - context['socket_options'] = tuple(socket_opts) - - # Map the kwargs to the names in the namedtuple - this is necessary since - # namedtuples can't have fields starting with '_'. - for key in list(context.keys()): - context['key_' + key] = context.pop(key) - - # Default to ``None`` for keys missing from the context - for field in key_class._fields: - if field not in context: - context[field] = None - - return key_class(**context) - - -#: A dictionary that maps a scheme to a callable that creates a pool key. -#: This can be used to alter the way pool keys are constructed, if desired. -#: Each PoolManager makes a copy of this dictionary so they can be configured -#: globally here, or individually on the instance. -key_fn_by_scheme = { - 'http': functools.partial(_default_key_normalizer, PoolKey), - 'https': functools.partial(_default_key_normalizer, PoolKey), -} - -pool_classes_by_scheme = { - 'http': HTTPConnectionPool, - 'https': HTTPSConnectionPool, -} - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \\**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example:: - - >>> manager = PoolManager(num_pools=2) - >>> r = manager.request('GET', 'http://google.com/') - >>> r = manager.request('GET', 'http://google.com/mail') - >>> r = manager.request('GET', 'http://yahoo.com/') - >>> len(manager.pools) - 2 - - """ - - proxy = None - - def __init__(self, num_pools=10, headers=None, **connection_pool_kw): - RequestMethods.__init__(self, headers) - self.connection_pool_kw = connection_pool_kw - self.pools = RecentlyUsedContainer(num_pools, - dispose_func=lambda p: p.close()) - - # Locally set the pool classes and keys so other PoolManagers can - # override them. - self.pool_classes_by_scheme = pool_classes_by_scheme - self.key_fn_by_scheme = key_fn_by_scheme.copy() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool(self, scheme, host, port, request_context=None): - """ - Create a new :class:`ConnectionPool` based on host, port, scheme, and - any additional pool keyword arguments. - - If ``request_context`` is provided, it is provided as keyword arguments - to the pool class used. This method is used to actually create the - connection pools handed out by :meth:`connection_from_url` and - companion methods. It is intended to be overridden for customization. - """ - pool_cls = self.pool_classes_by_scheme[scheme] - if request_context is None: - request_context = self.connection_pool_kw.copy() - - # Although the context has everything necessary to create the pool, - # this function has historically only used the scheme, host, and port - # in the positional args. When an API change is acceptable these can - # be removed. - for key in ('scheme', 'host', 'port'): - request_context.pop(key, None) - - if scheme == 'http': - for kw in SSL_KEYWORDS: - request_context.pop(kw, None) - - return pool_cls(host, port, **request_context) - - def clear(self): - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host(self, host, port=None, scheme='http', pool_kwargs=None): - """ - Get a :class:`ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. If ``pool_kwargs`` is - provided, it is merged with the instance's ``connection_pool_kw`` - variable and used to create the new connection pool, if one is - needed. - """ - - if not host: - raise LocationValueError("No host specified.") - - request_context = self._merge_pool_kwargs(pool_kwargs) - request_context['scheme'] = scheme or 'http' - if not port: - port = port_by_scheme.get(request_context['scheme'].lower(), 80) - request_context['port'] = port - request_context['host'] = host - - return self.connection_from_context(request_context) - - def connection_from_context(self, request_context): - """ - Get a :class:`ConnectionPool` based on the request context. - - ``request_context`` must at least contain the ``scheme`` key and its - value must be a key in ``key_fn_by_scheme`` instance variable. - """ - scheme = request_context['scheme'].lower() - pool_key_constructor = self.key_fn_by_scheme[scheme] - pool_key = pool_key_constructor(request_context) - - return self.connection_from_pool_key(pool_key, request_context=request_context) - - def connection_from_pool_key(self, pool_key, request_context=None): - """ - Get a :class:`ConnectionPool` based on the provided pool key. - - ``pool_key`` should be a namedtuple that only contains immutable - objects. At a minimum it must have the ``scheme``, ``host``, and - ``port`` fields. - """ - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - scheme = request_context['scheme'] - host = request_context['host'] - port = request_context['port'] - pool = self._new_pool(scheme, host, port, request_context=request_context) - self.pools[pool_key] = pool - - return pool - - def connection_from_url(self, url, pool_kwargs=None): - """ - Similar to :func:`urllib3.connectionpool.connection_from_url`. - - If ``pool_kwargs`` is not provided and a new pool needs to be - constructed, ``self.connection_pool_kw`` is used to initialize - the :class:`urllib3.connectionpool.ConnectionPool`. If ``pool_kwargs`` - is provided, it is used instead. Note that if a new pool does not - need to be created for the request, the provided ``pool_kwargs`` are - not used. - """ - u = parse_url(url) - return self.connection_from_host(u.host, port=u.port, scheme=u.scheme, - pool_kwargs=pool_kwargs) - - def _merge_pool_kwargs(self, override): - """ - Merge a dictionary of override values for self.connection_pool_kw. - - This does not modify self.connection_pool_kw and returns a new dict. - Any keys in the override dictionary with a value of ``None`` are - removed from the merged dictionary. - """ - base_pool_kwargs = self.connection_pool_kw.copy() - if override: - for key, value in override.items(): - if value is None: - try: - del base_pool_kwargs[key] - except KeyError: - pass - else: - base_pool_kwargs[key] = value - return base_pool_kwargs - - def urlopen(self, method, url, redirect=True, **kw): - """ - Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw['assert_same_host'] = False - kw['redirect'] = False - - if 'headers' not in kw: - kw['headers'] = self.headers.copy() - - if self.proxy is not None and u.scheme == "http": - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - # RFC 7231, Section 6.4.4 - if response.status == 303: - method = 'GET' - - retries = kw.get('retries') - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - # Strip headers marked as unsafe to forward to the redirected location. - # Check remove_headers_on_redirect to avoid a potential network call within - # conn.is_same_host() which may use socket.gethostbyname() in the future. - if (retries.remove_headers_on_redirect - and not conn.is_same_host(redirect_location)): - for header in retries.remove_headers_on_redirect: - kw['headers'].pop(header, None) - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - raise - return response - - kw['retries'] = retries - kw['redirect'] = redirect - - log.info("Redirecting %s -> %s", url, redirect_location) - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary containing headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - Example: - >>> proxy = urllib3.ProxyManager('http://localhost:3128/') - >>> r1 = proxy.request('GET', 'http://google.com/') - >>> r2 = proxy.request('GET', 'http://httpbin.org/') - >>> len(proxy.pools) - 1 - >>> r3 = proxy.request('GET', 'https://httpbin.org/') - >>> r4 = proxy.request('GET', 'https://twitter.com/') - >>> len(proxy.pools) - 3 - - """ - - def __init__(self, proxy_url, num_pools=10, headers=None, - proxy_headers=None, **connection_pool_kw): - - if isinstance(proxy_url, HTTPConnectionPool): - proxy_url = '%s://%s:%i' % (proxy_url.scheme, proxy_url.host, - proxy_url.port) - proxy = parse_url(proxy_url) - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - if proxy.scheme not in ("http", "https"): - raise ProxySchemeUnknown(proxy.scheme) - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - - connection_pool_kw['_proxy'] = self.proxy - connection_pool_kw['_proxy_headers'] = self.proxy_headers - - super(ProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw) - - def connection_from_host(self, host, port=None, scheme='http', pool_kwargs=None): - if scheme == "https": - return super(ProxyManager, self).connection_from_host( - host, port, scheme, pool_kwargs=pool_kwargs) - - return super(ProxyManager, self).connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme, pool_kwargs=pool_kwargs) - - def _set_proxy_headers(self, url, headers=None): - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {'Accept': '*/*'} - - netloc = parse_url(url).netloc - if netloc: - headers_['Host'] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen(self, method, url, redirect=True, **kw): - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - - if u.scheme == "http": - # For proxied HTTPS requests, httplib sets the necessary headers - # on the CONNECT to the proxy. For HTTP, we'll definitely - # need to set 'Host' at the very least. - headers = kw.get('headers', self.headers) - kw['headers'] = self._set_proxy_headers(url, headers) - - return super(ProxyManager, self).urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url, **kw): - return ProxyManager(proxy_url=url, **kw) diff --git a/venv/lib/python3.6/site-packages/urllib3/request.py b/venv/lib/python3.6/site-packages/urllib3/request.py deleted file mode 100755 index 1be3334..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/request.py +++ /dev/null @@ -1,150 +0,0 @@ -from __future__ import absolute_import - -from .filepost import encode_multipart_formdata -from .packages.six.moves.urllib.parse import urlencode - - -__all__ = ['RequestMethods'] - - -class RequestMethods(object): - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`~urllib3.connectionpool.HTTPConnectionPool` and - :class:`~urllib3.poolmanager.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = set(['DELETE', 'GET', 'HEAD', 'OPTIONS']) - - def __init__(self, headers=None): - self.headers = headers or {} - - def urlopen(self, method, url, body=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **kw): # Abstract - raise NotImplementedError("Classes extending RequestMethods must implement " - "their own ``urlopen`` method.") - - def request(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - """ - method = method.upper() - - urlopen_kw['request_url'] = url - - if method in self._encode_url_methods: - return self.request_encode_url(method, url, fields=fields, - headers=headers, - **urlopen_kw) - else: - return self.request_encode_body(method, url, fields=fields, - headers=headers, - **urlopen_kw) - - def request_encode_url(self, method, url, fields=None, headers=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': headers} - extra_kw.update(urlopen_kw) - - if fields: - url += '?' + urlencode(fields) - - return self.urlopen(method, url, **extra_kw) - - def request_encode_body(self, method, url, fields=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :meth:`urllib.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimic behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': {}} - - if fields: - if 'body' in urlopen_kw: - raise TypeError( - "request got values for both 'fields' and 'body', can only specify one.") - - if encode_multipart: - body, content_type = encode_multipart_formdata(fields, boundary=multipart_boundary) - else: - body, content_type = urlencode(fields), 'application/x-www-form-urlencoded' - - extra_kw['body'] = body - extra_kw['headers'] = {'Content-Type': content_type} - - extra_kw['headers'].update(headers) - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) diff --git a/venv/lib/python3.6/site-packages/urllib3/response.py b/venv/lib/python3.6/site-packages/urllib3/response.py deleted file mode 100755 index 9873cb9..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/response.py +++ /dev/null @@ -1,676 +0,0 @@ -from __future__ import absolute_import -from contextlib import contextmanager -import zlib -import io -import logging -from socket import timeout as SocketTimeout -from socket import error as SocketError - -from ._collections import HTTPHeaderDict -from .exceptions import ( - BodyNotHttplibCompatible, ProtocolError, DecodeError, ReadTimeoutError, - ResponseNotChunked, IncompleteRead, InvalidHeader -) -from .packages.six import string_types as basestring, binary_type, PY3 -from .packages.six.moves import http_client as httplib -from .connection import HTTPException, BaseSSLError -from .util.response import is_fp_closed, is_response_to_head - -log = logging.getLogger(__name__) - - -class DeflateDecoder(object): - - def __init__(self): - self._first_try = True - self._data = binary_type() - self._obj = zlib.decompressobj() - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - - if not self._first_try: - return self._obj.decompress(data) - - self._data += data - try: - decompressed = self._obj.decompress(data) - if decompressed: - self._first_try = False - self._data = None - return decompressed - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress(self._data) - finally: - self._data = None - - -class GzipDecoderState(object): - - FIRST_MEMBER = 0 - OTHER_MEMBERS = 1 - SWALLOW_DATA = 2 - - -class GzipDecoder(object): - - def __init__(self): - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - self._state = GzipDecoderState.FIRST_MEMBER - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - ret = binary_type() - if self._state == GzipDecoderState.SWALLOW_DATA or not data: - return ret - while True: - try: - ret += self._obj.decompress(data) - except zlib.error: - previous_state = self._state - # Ignore data after the first error - self._state = GzipDecoderState.SWALLOW_DATA - if previous_state == GzipDecoderState.OTHER_MEMBERS: - # Allow trailing garbage acceptable in other gzip clients - return ret - raise - data = self._obj.unused_data - if not data: - return ret - self._state = GzipDecoderState.OTHER_MEMBERS - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - -def _get_decoder(mode): - if mode == 'gzip': - return GzipDecoder() - - return DeflateDecoder() - - -class HTTPResponse(io.IOBase): - """ - HTTP Response container. - - Backwards-compatible to httplib's HTTPResponse but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in httplib.HTTPResponse: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param original_response: - When this HTTPResponse wrapper is generated from an httplib.HTTPResponse - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - - :param retries: - The retries contains the last :class:`~urllib3.util.retry.Retry` that - was used during the request. - - :param enforce_content_length: - Enforce content length checking. Body returned by server must match - value of Content-Length header, if present. Otherwise, raise error. - """ - - CONTENT_DECODERS = ['gzip', 'deflate'] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - def __init__(self, body='', headers=None, status=0, version=0, reason=None, - strict=0, preload_content=True, decode_content=True, - original_response=None, pool=None, connection=None, msg=None, - retries=None, enforce_content_length=False, - request_method=None, request_url=None): - - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) - self.status = status - self.version = version - self.reason = reason - self.strict = strict - self.decode_content = decode_content - self.retries = retries - self.enforce_content_length = enforce_content_length - - self._decoder = None - self._body = None - self._fp = None - self._original_response = original_response - self._fp_bytes_read = 0 - self.msg = msg - self._request_url = request_url - - if body and isinstance(body, (basestring, binary_type)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, 'read'): - self._fp = body - - # Are we using the chunked-style of transfer encoding? - self.chunked = False - self.chunk_left = None - tr_enc = self.headers.get('transfer-encoding', '').lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - # Determine length of response - self.length_remaining = self._init_length(request_method) - - # If requested, preload the body. - if preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def get_redirect_location(self): - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get('location') - - return False - - def release_conn(self): - if not self._pool or not self._connection: - return - - self._pool._put_conn(self._connection) - self._connection = None - - @property - def data(self): - # For backwords-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body - - if self._fp: - return self.read(cache_content=True) - - @property - def connection(self): - return self._connection - - def isclosed(self): - return is_fp_closed(self._fp) - - def tell(self): - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``HTTPResponse.read`` if bytes - are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_length(self, request_method): - """ - Set initial length value for Response content if available. - """ - length = self.headers.get('content-length') - - if length is not None: - if self.chunked: - # This Response will fail with an IncompleteRead if it can't be - # received as chunked. This method falls back to attempt reading - # the response before raising an exception. - log.warning("Received response with both Content-Length and " - "Transfer-Encoding set. This is expressly forbidden " - "by RFC 7230 sec 3.3.2. Ignoring Content-Length and " - "attempting to process response as Transfer-Encoding: " - "chunked.") - return None - - try: - # RFC 7230 section 3.3.2 specifies multiple content lengths can - # be sent in a single Content-Length header - # (e.g. Content-Length: 42, 42). This line ensures the values - # are all valid ints and that as long as the `set` length is 1, - # all values are the same. Otherwise, the header is invalid. - lengths = set([int(val) for val in length.split(',')]) - if len(lengths) > 1: - raise InvalidHeader("Content-Length contained multiple " - "unmatching values (%s)" % length) - length = lengths.pop() - except ValueError: - length = None - else: - if length < 0: - length = None - - # Convert status to int for comparison - # In some cases, httplib returns a status of "_UNKNOWN" - try: - status = int(self.status) - except ValueError: - status = 0 - - # Check for responses that shouldn't include a body - if status in (204, 304) or 100 <= status < 200 or request_method == 'HEAD': - length = 0 - - return length - - def _init_decoder(self): - """ - Set-up the _decoder attribute if necessary. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get('content-encoding', '').lower() - if self._decoder is None and content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - - def _decode(self, data, decode_content, flush_decoder): - """ - Decode the data passed in and potentially flush the decoder. - """ - try: - if decode_content and self._decoder: - data = self._decoder.decompress(data) - except (IOError, zlib.error) as e: - content_encoding = self.headers.get('content-encoding', '').lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, e) - - if flush_decoder and decode_content: - data += self._flush_decoder() - - return data - - def _flush_decoder(self): - """ - Flushes the decoder. Should only be called if the decoder is actually - being used. - """ - if self._decoder: - buf = self._decoder.decompress(b'') - return buf + self._decoder.flush() - - return b'' - - @contextmanager - def _error_catcher(self): - """ - Catch low-level python exceptions, instead re-raising urllib3 - variants, so that low-level exceptions are not leaked in the - high-level api. - - On exit, release the connection back to the pool. - """ - clean_exit = False - - try: - try: - yield - - except SocketTimeout: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if 'read operation timed out' not in str(e): # Defensive: - # This shouldn't happen but just in case we're missing an edge - # case, let's avoid swallowing SSL errors. - raise - - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except (HTTPException, SocketError) as e: - # This includes IncompleteRead. - raise ProtocolError('Connection broken: %r' % e, e) - - # If no exception is thrown, we should avoid cleaning up - # unnecessarily. - clean_exit = True - finally: - # If we didn't terminate cleanly, we need to throw away our - # connection. - if not clean_exit: - # The response may not be closed but we're not going to use it - # anymore so close it now to ensure that the connection is - # released back to the pool. - if self._original_response: - self._original_response.close() - - # Closing the response may not actually be sufficient to close - # everything, so if we have a hold of the connection close that - # too. - if self._connection: - self._connection.close() - - # If we hold the original response but it's closed now, we should - # return the connection back to the pool. - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def read(self, amt=None, decode_content=None, cache_content=False): - """ - Similar to :meth:`httplib.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if self._fp is None: - return - - flush_decoder = False - data = None - - with self._error_catcher(): - if amt is None: - # cStringIO doesn't like amt=None - data = self._fp.read() - flush_decoder = True - else: - cache_content = False - data = self._fp.read(amt) - if amt != 0 and not data: # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - flush_decoder = True - if self.enforce_content_length and self.length_remaining not in (0, None): - # This is an edge case that httplib failed to cover due - # to concerns of backward compatibility. We're - # addressing it here to make sure IncompleteRead is - # raised during streaming, so all calls with incorrect - # Content-Length are caught. - raise IncompleteRead(self._fp_bytes_read, self.length_remaining) - - if data: - self._fp_bytes_read += len(data) - if self.length_remaining is not None: - self.length_remaining -= len(data) - - data = self._decode(data, decode_content, flush_decoder) - - if cache_content: - self._body = data - - return data - - def stream(self, amt=2**16, decode_content=None): - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked and self.supports_chunked_reads(): - for line in self.read_chunked(amt, decode_content=decode_content): - yield line - else: - while not is_fp_closed(self._fp): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - @classmethod - def from_httplib(ResponseCls, r, **response_kw): - """ - Given an :class:`httplib.HTTPResponse` instance ``r``, return a - corresponding :class:`urllib3.response.HTTPResponse` object. - - Remaining parameters are passed to the HTTPResponse constructor, along - with ``original_response=r``. - """ - headers = r.msg - - if not isinstance(headers, HTTPHeaderDict): - if PY3: # Python 3 - headers = HTTPHeaderDict(headers.items()) - else: # Python 2 - headers = HTTPHeaderDict.from_httplib(headers) - - # HTTPResponse objects in Python 3 don't have a .strict attribute - strict = getattr(r, 'strict', 0) - resp = ResponseCls(body=r, - headers=headers, - status=r.status, - version=r.version, - reason=r.reason, - strict=strict, - original_response=r, - **response_kw) - return resp - - # Backwards-compatibility methods for httplib.HTTPResponse - def getheaders(self): - return self.headers - - def getheader(self, name, default=None): - return self.headers.get(name, default) - - # Backwards compatibility for http.cookiejar - def info(self): - return self.headers - - # Overrides from io.IOBase - def close(self): - if not self.closed: - self._fp.close() - - if self._connection: - self._connection.close() - - @property - def closed(self): - if self._fp is None: - return True - elif hasattr(self._fp, 'isclosed'): - return self._fp.isclosed() - elif hasattr(self._fp, 'closed'): - return self._fp.closed - else: - return True - - def fileno(self): - if self._fp is None: - raise IOError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise IOError("The file-like object this HTTPResponse is wrapped " - "around has no file descriptor") - - def flush(self): - if self._fp is not None and hasattr(self._fp, 'flush'): - return self._fp.flush() - - def readable(self): - # This method is required for `io` module compatibility. - return True - - def readinto(self, b): - # This method is required for `io` module compatibility. - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[:len(temp)] = temp - return len(temp) - - def supports_chunked_reads(self): - """ - Checks if the underlying file-like object looks like a - httplib.HTTPResponse object. We do this by testing for the fp - attribute. If it is present we assume it returns raw chunks as - processed by read_chunked(). - """ - return hasattr(self._fp, 'fp') - - def _update_chunk_length(self): - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return - line = self._fp.fp.readline() - line = line.split(b';', 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - # Invalid chunked protocol response, abort. - self.close() - raise httplib.IncompleteRead(line) - - def _handle_chunk(self, amt): - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) - returned_chunk = chunk - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif amt < self.chunk_left: - value = self._fp._safe_read(amt) - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk - - def read_chunked(self, amt=None, decode_content=None): - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked( - "Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing.") - if not self.supports_chunked_reads(): - raise BodyNotHttplibCompatible( - "Body should be httplib.HTTPResponse like. " - "It should have have an fp attribute which returns raw chunks.") - - with self._error_catcher(): - # Don't bother reading the body of a HEAD request. - if self._original_response and is_response_to_head(self._original_response): - self._original_response.close() - return - - # If a response is already read and closed - # then return immediately. - if self._fp.fp is None: - return - - while True: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - decoded = self._decode(chunk, decode_content=decode_content, - flush_decoder=False) - if decoded: - yield decoded - - if decode_content: - # On CPython and PyPy, we should never need to flush the - # decoder. However, on Jython we *might* need to, so - # lets defensively do it anyway. - decoded = self._flush_decoder() - if decoded: # Platform-specific: Jython. - yield decoded - - # Chunk content ends with \r\n: discard it. - while True: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b'\r\n': - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() - - def geturl(self): - """ - Returns the URL that was the source of this response. - If the request that generated this response redirected, this method - will return the final redirect location. - """ - if self.retries is not None and len(self.retries.history): - return self.retries.history[-1].redirect_location - else: - return self._request_url diff --git a/venv/lib/python3.6/site-packages/urllib3/util/__init__.py b/venv/lib/python3.6/site-packages/urllib3/util/__init__.py deleted file mode 100755 index 2f2770b..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/__init__.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import absolute_import -# For backwards compatibility, provide imports that used to be here. -from .connection import is_connection_dropped -from .request import make_headers -from .response import is_fp_closed -from .ssl_ import ( - SSLContext, - HAS_SNI, - IS_PYOPENSSL, - IS_SECURETRANSPORT, - assert_fingerprint, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import ( - current_time, - Timeout, -) - -from .retry import Retry -from .url import ( - get_host, - parse_url, - split_first, - Url, -) -from .wait import ( - wait_for_read, - wait_for_write -) - -__all__ = ( - 'HAS_SNI', - 'IS_PYOPENSSL', - 'IS_SECURETRANSPORT', - 'SSLContext', - 'Retry', - 'Timeout', - 'Url', - 'assert_fingerprint', - 'current_time', - 'is_connection_dropped', - 'is_fp_closed', - 'get_host', - 'parse_url', - 'make_headers', - 'resolve_cert_reqs', - 'resolve_ssl_version', - 'split_first', - 'ssl_wrap_socket', - 'wait_for_read', - 'wait_for_write' -) diff --git a/venv/lib/python3.6/site-packages/urllib3/util/connection.py b/venv/lib/python3.6/site-packages/urllib3/util/connection.py deleted file mode 100755 index 5cf488f..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/connection.py +++ /dev/null @@ -1,126 +0,0 @@ -from __future__ import absolute_import -import socket -from .wait import NoWayToWaitForSocketError, wait_for_read - - -def is_connection_dropped(conn): # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - - :param conn: - :class:`httplib.HTTPConnection` object. - - Note: For platforms like AppEngine, this will always return ``False`` to - let the platform handle connection recycling transparently for us. - """ - sock = getattr(conn, 'sock', False) - if sock is False: # Platform-specific: AppEngine - return False - if sock is None: # Connection already closed (such as by httplib). - return True - try: - # Returns True if readable, which here means it's been dropped - return wait_for_read(sock, timeout=0.0) - except NoWayToWaitForSocketError: # Platform-specific: AppEngine - return False - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -# One additional modification is that we avoid binding to IPv6 servers -# discovered in DNS if the system doesn't have IPv6 functionality. -def create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, socket_options=None): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - if host.startswith('['): - host = host.strip('[]') - err = None - - # Using the value from allowed_gai_family() in the context of getaddrinfo lets - # us select whether to work with IPv4 DNS records, IPv6 records, or both. - # The original create_connection function always returns all records. - family = allowed_gai_family() - - for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - _set_socket_options(sock, socket_options) - - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error as e: - err = e - if sock is not None: - sock.close() - sock = None - - if err is not None: - raise err - - raise socket.error("getaddrinfo returns an empty list") - - -def _set_socket_options(sock, options): - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) - - -def allowed_gai_family(): - """This function is designed to work in the context of - getaddrinfo, where family=socket.AF_UNSPEC is the default and - will perform a DNS search for both IPv6 and IPv4 records.""" - - family = socket.AF_INET - if HAS_IPV6: - family = socket.AF_UNSPEC - return family - - -def _has_ipv6(host): - """ Returns True if the system can bind an IPv6 address. """ - sock = None - has_ipv6 = False - - if socket.has_ipv6: - # has_ipv6 returns true if cPython was compiled with IPv6 support. - # It does not tell us if the system has IPv6 support enabled. To - # determine that we must bind to an IPv6 address. - # https://github.com/shazow/urllib3/pull/611 - # https://bugs.python.org/issue658327 - try: - sock = socket.socket(socket.AF_INET6) - sock.bind((host, 0)) - has_ipv6 = True - except Exception: - pass - - if sock: - sock.close() - return has_ipv6 - - -HAS_IPV6 = _has_ipv6('::1') diff --git a/venv/lib/python3.6/site-packages/urllib3/util/queue.py b/venv/lib/python3.6/site-packages/urllib3/util/queue.py deleted file mode 100755 index d3d379a..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/queue.py +++ /dev/null @@ -1,21 +0,0 @@ -import collections -from ..packages import six -from ..packages.six.moves import queue - -if six.PY2: - # Queue is imported for side effects on MS Windows. See issue #229. - import Queue as _unused_module_Queue # noqa: F401 - - -class LifoQueue(queue.Queue): - def _init(self, _): - self.queue = collections.deque() - - def _qsize(self, len=len): - return len(self.queue) - - def _put(self, item): - self.queue.append(item) - - def _get(self): - return self.queue.pop() diff --git a/venv/lib/python3.6/site-packages/urllib3/util/request.py b/venv/lib/python3.6/site-packages/urllib3/util/request.py deleted file mode 100755 index 3ddfcd5..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/request.py +++ /dev/null @@ -1,118 +0,0 @@ -from __future__ import absolute_import -from base64 import b64encode - -from ..packages.six import b, integer_types -from ..exceptions import UnrewindableBodyError - -ACCEPT_ENCODING = 'gzip,deflate' -_FAILEDTELL = object() - - -def make_headers(keep_alive=None, accept_encoding=None, user_agent=None, - basic_auth=None, proxy_basic_auth=None, disable_cache=None): - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example:: - - >>> make_headers(keep_alive=True, user_agent="Batman/1.0") - {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - >>> make_headers(accept_encoding=True) - {'accept-encoding': 'gzip,deflate'} - """ - headers = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ','.join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers['accept-encoding'] = accept_encoding - - if user_agent: - headers['user-agent'] = user_agent - - if keep_alive: - headers['connection'] = 'keep-alive' - - if basic_auth: - headers['authorization'] = 'Basic ' + \ - b64encode(b(basic_auth)).decode('utf-8') - - if proxy_basic_auth: - headers['proxy-authorization'] = 'Basic ' + \ - b64encode(b(proxy_basic_auth)).decode('utf-8') - - if disable_cache: - headers['cache-control'] = 'no-cache' - - return headers - - -def set_file_position(body, pos): - """ - If a position is provided, move file to that point. - Otherwise, we'll attempt to record a position for future use. - """ - if pos is not None: - rewind_body(body, pos) - elif getattr(body, 'tell', None) is not None: - try: - pos = body.tell() - except (IOError, OSError): - # This differentiates from None, allowing us to catch - # a failed `tell()` later when trying to rewind the body. - pos = _FAILEDTELL - - return pos - - -def rewind_body(body, body_pos): - """ - Attempt to rewind body to a certain position. - Primarily used for request redirects and retries. - - :param body: - File-like object that supports seek. - - :param int pos: - Position to seek to in file. - """ - body_seek = getattr(body, 'seek', None) - if body_seek is not None and isinstance(body_pos, integer_types): - try: - body_seek(body_pos) - except (IOError, OSError): - raise UnrewindableBodyError("An error occurred when rewinding request " - "body for redirect/retry.") - elif body_pos is _FAILEDTELL: - raise UnrewindableBodyError("Unable to record file position for rewinding " - "request body during a redirect/retry.") - else: - raise ValueError("body_pos must be of type integer, " - "instead it was %s." % type(body_pos)) diff --git a/venv/lib/python3.6/site-packages/urllib3/util/response.py b/venv/lib/python3.6/site-packages/urllib3/util/response.py deleted file mode 100755 index 67cf730..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/response.py +++ /dev/null @@ -1,81 +0,0 @@ -from __future__ import absolute_import -from ..packages.six.moves import http_client as httplib - -from ..exceptions import HeaderParsingError - - -def is_fp_closed(obj): - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check `isclosed()` first, in case Python3 doesn't set `closed`. - # GH Issue #928 - return obj.isclosed() - except AttributeError: - pass - - try: - # Check via the official file-like-object way. - return obj.closed - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") - - -def assert_header_parsing(headers): - """ - Asserts whether all headers have been successfully parsed. - Extracts encountered errors from the result of parsing headers. - - Only works on Python 3. - - :param headers: Headers to verify. - :type headers: `httplib.HTTPMessage`. - - :raises urllib3.exceptions.HeaderParsingError: - If parsing errors are found. - """ - - # This will fail silently if we pass in the wrong kind of parameter. - # To make debugging easier add an explicit check. - if not isinstance(headers, httplib.HTTPMessage): - raise TypeError('expected httplib.Message, got {0}.'.format( - type(headers))) - - defects = getattr(headers, 'defects', None) - get_payload = getattr(headers, 'get_payload', None) - - unparsed_data = None - if get_payload: # Platform-specific: Python 3. - unparsed_data = get_payload() - - if defects or unparsed_data: - raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data) - - -def is_response_to_head(response): - """ - Checks whether the request of a response has been a HEAD-request. - Handles the quirks of AppEngine. - - :param conn: - :type conn: :class:`httplib.HTTPResponse` - """ - # FIXME: Can we do this somehow without accessing private httplib _method? - method = response._method - if isinstance(method, int): # Platform-specific: Appengine - return method == 3 - return method.upper() == 'HEAD' diff --git a/venv/lib/python3.6/site-packages/urllib3/util/retry.py b/venv/lib/python3.6/site-packages/urllib3/util/retry.py deleted file mode 100755 index 7ad3dc6..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/retry.py +++ /dev/null @@ -1,411 +0,0 @@ -from __future__ import absolute_import -import time -import logging -from collections import namedtuple -from itertools import takewhile -import email -import re - -from ..exceptions import ( - ConnectTimeoutError, - MaxRetryError, - ProtocolError, - ReadTimeoutError, - ResponseError, - InvalidHeader, -) -from ..packages import six - - -log = logging.getLogger(__name__) - - -# Data structure for representing the metadata of requests that result in a retry. -RequestHistory = namedtuple('RequestHistory', ["method", "url", "error", - "status", "redirect_location"]) - - -class Retry(object): - """ Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool:: - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', retries=Retry(10)) - - Retries can be disabled by passing ``False``:: - - response = http.request('GET', 'http://example.com/', retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. It's a good idea to set this to some sensibly-high value to - account for unexpected edge cases and avoid infinite retry loops. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int status: - How many times to retry on bad status codes. - - These are retries made on responses, where status code matches - ``status_forcelist``. - - Set to ``0`` to fail on the first retry of this type. - - :param iterable method_whitelist: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - idempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_METHOD_WHITELIST`. - - Set to a ``False`` value to retry on any verb. - - :param iterable status_forcelist: - A set of integer HTTP status codes that we should force a retry on. - A retry is initiated if the request method is in ``method_whitelist`` - and the response status code is in ``status_forcelist``. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts after the second try - (most errors are resolved immediately by a second try without a - delay). urllib3 will sleep for:: - - {backoff factor} * (2 ^ ({number of total retries} - 1)) - - seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep - for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer - than :attr:`Retry.BACKOFF_MAX`. - - By default, backoff is disabled (set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - - :param bool raise_on_status: Similar meaning to ``raise_on_redirect``: - whether we should raise an exception, or return a response, - if status falls in ``status_forcelist`` range and retries have - been exhausted. - - :param tuple history: The history of the request encountered during - each call to :meth:`~Retry.increment`. The list is in the order - the requests occurred. Each list item is of class :class:`RequestHistory`. - - :param bool respect_retry_after_header: - Whether to respect Retry-After header on status codes defined as - :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not. - - :param iterable remove_headers_on_redirect: - Sequence of headers to remove from the request when a response - indicating a redirect is returned before firing off the redirected - request. - """ - - DEFAULT_METHOD_WHITELIST = frozenset([ - 'HEAD', 'GET', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']) - - RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503]) - - DEFAULT_REDIRECT_HEADERS_BLACKLIST = frozenset(['Authorization']) - - #: Maximum backoff time. - BACKOFF_MAX = 120 - - def __init__(self, total=10, connect=None, read=None, redirect=None, status=None, - method_whitelist=DEFAULT_METHOD_WHITELIST, status_forcelist=None, - backoff_factor=0, raise_on_redirect=True, raise_on_status=True, - history=None, respect_retry_after_header=True, - remove_headers_on_redirect=DEFAULT_REDIRECT_HEADERS_BLACKLIST): - - self.total = total - self.connect = connect - self.read = read - self.status = status - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.method_whitelist = method_whitelist - self.backoff_factor = backoff_factor - self.raise_on_redirect = raise_on_redirect - self.raise_on_status = raise_on_status - self.history = history or tuple() - self.respect_retry_after_header = respect_retry_after_header - self.remove_headers_on_redirect = remove_headers_on_redirect - - def new(self, **kw): - params = dict( - total=self.total, - connect=self.connect, read=self.read, redirect=self.redirect, status=self.status, - method_whitelist=self.method_whitelist, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - raise_on_redirect=self.raise_on_redirect, - raise_on_status=self.raise_on_status, - history=self.history, - remove_headers_on_redirect=self.remove_headers_on_redirect - ) - params.update(kw) - return type(self)(**params) - - @classmethod - def from_int(cls, retries, redirect=True, default=None): - """ Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r", retries, new_retries) - return new_retries - - def get_backoff_time(self): - """ Formula for computing the current backoff - - :rtype: float - """ - # We want to consider only the last consecutive errors sequence (Ignore redirects). - consecutive_errors_len = len(list(takewhile(lambda x: x.redirect_location is None, - reversed(self.history)))) - if consecutive_errors_len <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1)) - return min(self.BACKOFF_MAX, backoff_value) - - def parse_retry_after(self, retry_after): - # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4 - if re.match(r"^\s*[0-9]+\s*$", retry_after): - seconds = int(retry_after) - else: - retry_date_tuple = email.utils.parsedate(retry_after) - if retry_date_tuple is None: - raise InvalidHeader("Invalid Retry-After header: %s" % retry_after) - retry_date = time.mktime(retry_date_tuple) - seconds = retry_date - time.time() - - if seconds < 0: - seconds = 0 - - return seconds - - def get_retry_after(self, response): - """ Get the value of Retry-After in seconds. """ - - retry_after = response.getheader("Retry-After") - - if retry_after is None: - return None - - return self.parse_retry_after(retry_after) - - def sleep_for_retry(self, response=None): - retry_after = self.get_retry_after(response) - if retry_after: - time.sleep(retry_after) - return True - - return False - - def _sleep_backoff(self): - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def sleep(self, response=None): - """ Sleep between retry attempts. - - This method will respect a server's ``Retry-After`` response header - and sleep the duration of the time requested. If that is not present, it - will use an exponential backoff. By default, the backoff factor is 0 and - this method will return immediately. - """ - - if response: - slept = self.sleep_for_retry(response) - if slept: - return - - self._sleep_backoff() - - def _is_connection_error(self, err): - """ Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err): - """ Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def _is_method_retryable(self, method): - """ Checks if a given HTTP method should be retried upon, depending if - it is included on the method whitelist. - """ - if self.method_whitelist and method.upper() not in self.method_whitelist: - return False - - return True - - def is_retry(self, method, status_code, has_retry_after=False): - """ Is this method/status code retryable? (Based on whitelists and control - variables such as the number of total retries to allow, whether to - respect the Retry-After header, whether this header is present, and - whether the returned status code is on the list of status codes to - be retried upon on the presence of the aforementioned header) - """ - if not self._is_method_retryable(method): - return False - - if self.status_forcelist and status_code in self.status_forcelist: - return True - - return (self.total and self.respect_retry_after_header and - has_retry_after and (status_code in self.RETRY_AFTER_STATUS_CODES)) - - def is_exhausted(self): - """ Are we out of retries? """ - retry_counts = (self.total, self.connect, self.read, self.redirect, self.status) - retry_counts = list(filter(None, retry_counts)) - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment(self, method=None, url=None, response=None, error=None, - _pool=None, _stacktrace=None): - """ Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.HTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise six.reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - connect = self.connect - read = self.read - redirect = self.redirect - status_count = self.status - cause = 'unknown' - status = None - redirect_location = None - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise six.reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False or not self._is_method_retryable(method): - raise six.reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = 'too many redirects' - redirect_location = response.get_redirect_location() - status = response.status - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and a the given method is in the whitelist - cause = ResponseError.GENERIC_ERROR - if response and response.status: - if status_count is not None: - status_count -= 1 - cause = ResponseError.SPECIFIC_ERROR.format( - status_code=response.status) - status = response.status - - history = self.history + (RequestHistory(method, url, error, status, redirect_location),) - - new_retry = self.new( - total=total, - connect=connect, read=read, redirect=redirect, status=status_count, - history=history) - - if new_retry.is_exhausted(): - raise MaxRetryError(_pool, url, error or ResponseError(cause)) - - log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) - - return new_retry - - def __repr__(self): - return ('{cls.__name__}(total={self.total}, connect={self.connect}, ' - 'read={self.read}, redirect={self.redirect}, status={self.status})').format( - cls=type(self), self=self) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/venv/lib/python3.6/site-packages/urllib3/util/ssl_.py b/venv/lib/python3.6/site-packages/urllib3/util/ssl_.py deleted file mode 100755 index 2893752..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/ssl_.py +++ /dev/null @@ -1,396 +0,0 @@ -from __future__ import absolute_import -import errno -import warnings -import hmac -import socket - -from binascii import hexlify, unhexlify -from hashlib import md5, sha1, sha256 - -from ..exceptions import SSLError, InsecurePlatformWarning, SNIMissingWarning -from ..packages import six - - -SSLContext = None -HAS_SNI = False -IS_PYOPENSSL = False -IS_SECURETRANSPORT = False - -# Maps the length of a digest to a possible hash function producing this digest -HASHFUNC_MAP = { - 32: md5, - 40: sha1, - 64: sha256, -} - - -def _const_compare_digest_backport(a, b): - """ - Compare two digests of equal length in constant time. - - The digests must be of type str/bytes. - Returns True if the digests match, and False otherwise. - """ - result = abs(len(a) - len(b)) - for l, r in zip(bytearray(a), bytearray(b)): - result |= l ^ r - return result == 0 - - -_const_compare_digest = getattr(hmac, 'compare_digest', - _const_compare_digest_backport) - - -try: # Test for SSL features - import ssl - from ssl import wrap_socket, CERT_NONE, PROTOCOL_SSLv23 - from ssl import HAS_SNI # Has SNI? -except ImportError: - pass - - -try: - from ssl import OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION -except ImportError: - OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 - OP_NO_COMPRESSION = 0x20000 - - -# Python 2.7 and earlier didn't have inet_pton on non-Linux -# so we fallback on inet_aton in those cases. This means that -# we can only detect IPv4 addresses in this case. -if hasattr(socket, 'inet_pton'): - inet_pton = socket.inet_pton -else: - # Maybe we can use ipaddress if the user has urllib3[secure]? - try: - import ipaddress - - def inet_pton(_, host): - if isinstance(host, six.binary_type): - host = host.decode('ascii') - return ipaddress.ip_address(host) - - except ImportError: # Platform-specific: Non-Linux - def inet_pton(_, host): - return socket.inet_aton(host) - - -# A secure default. -# Sources for more information on TLS ciphers: -# -# - https://wiki.mozilla.org/Security/Server_Side_TLS -# - https://www.ssllabs.com/projects/best-practices/index.html -# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ -# -# The general intent is: -# - Prefer TLS 1.3 cipher suites -# - prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE), -# - prefer ECDHE over DHE for better performance, -# - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and -# security, -# - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common, -# - disable NULL authentication, MD5 MACs and DSS for security reasons. -DEFAULT_CIPHERS = ':'.join([ - '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', - 'RSA+AESGCM', - 'RSA+AES', - '!aNULL', - '!eNULL', - '!MD5', -]) - -try: - from ssl import SSLContext # Modern SSL? -except ImportError: - import sys - - class SSLContext(object): # Platform-specific: Python 2 & 3.1 - supports_set_ciphers = ((2, 7) <= sys.version_info < (3,) or - (3, 2) <= sys.version_info) - - def __init__(self, protocol_version): - self.protocol = protocol_version - # Use default values from a real SSLContext - self.check_hostname = False - self.verify_mode = ssl.CERT_NONE - self.ca_certs = None - self.options = 0 - self.certfile = None - self.keyfile = None - self.ciphers = None - - def load_cert_chain(self, certfile, keyfile): - self.certfile = certfile - self.keyfile = keyfile - - def load_verify_locations(self, cafile=None, capath=None): - self.ca_certs = cafile - - if capath is not None: - raise SSLError("CA directories not supported in older Pythons") - - def set_ciphers(self, cipher_suite): - if not self.supports_set_ciphers: - raise TypeError( - 'Your version of Python does not support setting ' - 'a custom cipher suite. Please upgrade to Python ' - '2.7, 3.2, or later if you need this functionality.' - ) - self.ciphers = cipher_suite - - def wrap_socket(self, socket, server_hostname=None, server_side=False): - warnings.warn( - 'A true SSLContext object is not available. This prevents ' - 'urllib3 from configuring SSL appropriately and may cause ' - 'certain SSL connections to fail. You can upgrade to a newer ' - 'version of Python to solve this. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings', - InsecurePlatformWarning - ) - kwargs = { - 'keyfile': self.keyfile, - 'certfile': self.certfile, - 'ca_certs': self.ca_certs, - 'cert_reqs': self.verify_mode, - 'ssl_version': self.protocol, - 'server_side': server_side, - } - if self.supports_set_ciphers: # Platform-specific: Python 2.7+ - return wrap_socket(socket, ciphers=self.ciphers, **kwargs) - else: # Platform-specific: Python 2.6 - return wrap_socket(socket, **kwargs) - - -def assert_fingerprint(cert, fingerprint): - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - fingerprint = fingerprint.replace(':', '').lower() - digest_length = len(fingerprint) - hashfunc = HASHFUNC_MAP.get(digest_length) - if not hashfunc: - raise SSLError( - 'Fingerprint of invalid length: {0}'.format(fingerprint)) - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - cert_digest = hashfunc(cert).digest() - - if not _const_compare_digest(cert_digest, fingerprint_bytes): - raise SSLError('Fingerprints did not match. Expected "{0}", got "{1}".' - .format(fingerprint, hexlify(cert_digest))) - - -def resolve_cert_reqs(candidate): - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_NONE`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbreviation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_NONE - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'CERT_' + candidate) - return res - - return candidate - - -def resolve_ssl_version(candidate): - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_SSLv23 - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'PROTOCOL_' + candidate) - return res - - return candidate - - -def create_urllib3_context(ssl_version=None, cert_reqs=None, - options=None, ciphers=None): - """All arguments have the same meaning as ``ssl_wrap_socket``. - - By default, this function does a lot of the same work that - ``ssl.create_default_context`` does on Python 3.4+. It: - - - Disables SSLv2, SSLv3, and compression - - Sets a restricted set of server ciphers - - If you wish to enable SSLv3, you can do:: - - from urllib3.util import ssl_ - context = ssl_.create_urllib3_context() - context.options &= ~ssl_.OP_NO_SSLv3 - - You can do the same to enable compression (substituting ``COMPRESSION`` - for ``SSLv3`` in the last line above). - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``. - :param ciphers: - Which cipher suites to allow the server to select. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - context = SSLContext(ssl_version or ssl.PROTOCOL_SSLv23) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - - context.options |= options - - if getattr(context, 'supports_set_ciphers', True): # Platform-specific: Python 2.6 - context.set_ciphers(ciphers or DEFAULT_CIPHERS) - - context.verify_mode = cert_reqs - if getattr(context, 'check_hostname', None) is not None: # Platform-specific: Python 3.2 - # We do our own verification, including fingerprints and alternative - # hostnames. So disable it here - context.check_hostname = False - return context - - -def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, - ca_certs=None, server_hostname=None, - ssl_version=None, ciphers=None, ssl_context=None, - ca_cert_dir=None): - """ - All arguments except for server_hostname, ssl_context, and ca_cert_dir have - the same meaning as they do when using :func:`ssl.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. This is not - supported on Python 2.6 as the ssl module does not support it. - :param ca_cert_dir: - A directory containing CA certificates in multiple separate files, as - supported by OpenSSL's -CApath flag or the capath argument to - SSLContext.load_verify_locations(). - """ - context = ssl_context - if context is None: - # Note: This branch of code and all the variables in it are no longer - # used by urllib3 itself. We should consider deprecating and removing - # this code. - context = create_urllib3_context(ssl_version, cert_reqs, - ciphers=ciphers) - - if ca_certs or ca_cert_dir: - try: - context.load_verify_locations(ca_certs, ca_cert_dir) - except IOError as e: # Platform-specific: Python 2.6, 2.7, 3.2 - raise SSLError(e) - # Py33 raises FileNotFoundError which subclasses OSError - # These are not equivalent unless we check the errno attribute - except OSError as e: # Platform-specific: Python 3.3 and beyond - if e.errno == errno.ENOENT: - raise SSLError(e) - raise - elif getattr(context, 'load_default_certs', None) is not None: - # try to load OS default certs; works well on Windows (require Python3.4+) - context.load_default_certs() - - if certfile: - context.load_cert_chain(certfile, keyfile) - - # If we detect server_hostname is an IP address then the SNI - # extension should not be used according to RFC3546 Section 3.1 - # We shouldn't warn the user if SNI isn't available but we would - # not be using SNI anyways due to IP address for server_hostname. - if ((server_hostname is not None and not is_ipaddress(server_hostname)) - or IS_SECURETRANSPORT): - if HAS_SNI and server_hostname is not None: - return context.wrap_socket(sock, server_hostname=server_hostname) - - warnings.warn( - 'An HTTPS request has been made, but the SNI (Server Name ' - 'Indication) extension to TLS is not available on this platform. ' - 'This may cause the server to present an incorrect TLS ' - 'certificate, which can cause validation failures. You can upgrade to ' - 'a newer version of Python to solve this. For more information, see ' - 'https://urllib3.readthedocs.io/en/latest/advanced-usage.html' - '#ssl-warnings', - SNIMissingWarning - ) - - return context.wrap_socket(sock) - - -def is_ipaddress(hostname): - """Detects whether the hostname given is an IP address. - - :param str hostname: Hostname to examine. - :return: True if the hostname is an IP address, False otherwise. - """ - if six.PY3 and isinstance(hostname, six.binary_type): - # IDN A-label bytes are ASCII compatible. - hostname = hostname.decode('ascii') - - families = [socket.AF_INET] - if hasattr(socket, 'AF_INET6'): - families.append(socket.AF_INET6) - - for af in families: - try: - inet_pton(af, hostname) - except (socket.error, ValueError, OSError): - pass - else: - return True - return False diff --git a/venv/lib/python3.6/site-packages/urllib3/util/timeout.py b/venv/lib/python3.6/site-packages/urllib3/util/timeout.py deleted file mode 100755 index cec817e..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/timeout.py +++ /dev/null @@ -1,242 +0,0 @@ -from __future__ import absolute_import -# The default socket timeout, used by httplib to indicate that no timeout was -# specified by the user -from socket import _GLOBAL_DEFAULT_TIMEOUT -import time - -from ..exceptions import TimeoutStateError - -# A sentinel value to indicate that no timeout was specified by the user in -# urllib3 -_Default = object() - - -# Use time.monotonic if available. -current_time = getattr(time, "monotonic", time.time) - - -class Timeout(object): - """ Timeout configuration. - - Timeouts can be defined as a default for a pool:: - - timeout = Timeout(connect=2.0, read=7.0) - http = PoolManager(timeout=timeout) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``:: - - no_timeout = Timeout(connect=None, read=None) - response = http.request('GET', 'http://example.com/, timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: integer, float, or None - - :param connect: - The maximum amount of time to wait for a connection attempt to a server - to succeed. Omitting the parameter will default the connect timeout to - the system default, probably `the global default timeout in socket.py - <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_. - None will set an infinite timeout for connection attempts. - - :type connect: integer, float, or None - - :param read: - The maximum amount of time to wait between consecutive - read operations for a response from the server. Omitting - the parameter will default the read timeout to the system - default, probably `the global default timeout in socket.py - <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_. - None will set an infinite timeout. - - :type read: integer, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - - If your goal is to cut off any request after a set amount of wall clock - time, consider having a second "watcher" thread to cut off a slow - request. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT - - def __init__(self, total=None, connect=_Default, read=_Default): - self._connect = self._validate_timeout(connect, 'connect') - self._read = self._validate_timeout(read, 'read') - self.total = self._validate_timeout(total, 'total') - self._start_connect = None - - def __str__(self): - return '%s(connect=%r, read=%r, total=%r)' % ( - type(self).__name__, self._connect, self._read, self.total) - - @classmethod - def _validate_timeout(cls, value, name): - """ Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If it is a numeric value less than or equal to - zero, or the type is not an integer, float, or None. - """ - if value is _Default: - return cls.DEFAULT_TIMEOUT - - if value is None or value is cls.DEFAULT_TIMEOUT: - return value - - if isinstance(value, bool): - raise ValueError("Timeout cannot be a boolean value. It must " - "be an int, float or None.") - try: - float(value) - except (TypeError, ValueError): - raise ValueError("Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value)) - - try: - if value <= 0: - raise ValueError("Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than or equal to 0." % (name, value)) - except TypeError: # Python 3 - raise ValueError("Timeout value %s was %s, but it must be an " - "int, float or None." % (name, value)) - - return value - - @classmethod - def from_float(cls, timeout): - """ Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, sentinel default object, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self): - """ Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, - total=self.total) - - def start_connect(self): - """ Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = current_time() - return self._start_connect - - def get_connect_duration(self): - """ Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError("Can't get connect duration for timer " - "that has not started.") - return current_time() - self._start_connect - - @property - def connect_timeout(self): - """ Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is self.DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) - - @property - def read_timeout(self): - """ Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if (self.total is not None and - self.total is not self.DEFAULT_TIMEOUT and - self._read is not None and - self._read is not self.DEFAULT_TIMEOUT): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), - self._read)) - elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self._read diff --git a/venv/lib/python3.6/site-packages/urllib3/util/url.py b/venv/lib/python3.6/site-packages/urllib3/util/url.py deleted file mode 100755 index 6b6f996..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/url.py +++ /dev/null @@ -1,230 +0,0 @@ -from __future__ import absolute_import -from collections import namedtuple - -from ..exceptions import LocationParseError - - -url_attrs = ['scheme', 'auth', 'host', 'port', 'path', 'query', 'fragment'] - -# We only want to normalize urls with an HTTP(S) scheme. -# urllib3 infers URLs without a scheme (None) to be http. -NORMALIZABLE_SCHEMES = ('http', 'https', None) - - -class Url(namedtuple('Url', url_attrs)): - """ - Datastructure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. Both the scheme and host are normalized as they are - both case-insensitive according to RFC 3986. - """ - __slots__ = () - - def __new__(cls, scheme=None, auth=None, host=None, port=None, path=None, - query=None, fragment=None): - if path and not path.startswith('/'): - path = '/' + path - if scheme: - scheme = scheme.lower() - if host and scheme in NORMALIZABLE_SCHEMES: - host = host.lower() - return super(Url, cls).__new__(cls, scheme, auth, host, port, path, - query, fragment) - - @property - def hostname(self): - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self): - """Absolute path including the query string.""" - uri = self.path or '/' - - if self.query is not None: - uri += '?' + self.query - - return uri - - @property - def netloc(self): - """Network location including host and port""" - if self.port: - return '%s:%d' % (self.host, self.port) - return self.host - - @property - def url(self): - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: :: - - >>> U = parse_url('http://google.com/mail/') - >>> U.url - 'http://google.com/mail/' - >>> Url('http', 'username:password', 'host.com', 80, - ... '/path', 'query', 'fragment').url - 'http://username:password@host.com:80/path?query#fragment' - """ - scheme, auth, host, port, path, query, fragment = self - url = '' - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + '://' - if auth is not None: - url += auth + '@' - if host is not None: - url += host - if port is not None: - url += ':' + str(port) - if path is not None: - url += path - if query is not None: - url += '?' + query - if fragment is not None: - url += '#' + fragment - - return url - - def __str__(self): - return self.url - - -def split_first(s, delims): - """ - Given a string and an iterable of delimiters, split on the first found - delimiter. Return two split parts and the matched delimiter. - - If not found, then the first part is the full input string. - - Example:: - - >>> split_first('foo/bar?baz', '?/=') - ('foo', 'bar?baz', '/') - >>> split_first('foo/bar?baz', '123') - ('foo/bar?baz', '', None) - - Scales linearly with number of delims. Not ideal for large number of delims. - """ - min_idx = None - min_delim = None - for d in delims: - idx = s.find(d) - if idx < 0: - continue - - if min_idx is None or idx < min_idx: - min_idx = idx - min_delim = d - - if min_idx is None or min_idx < 0: - return s, '', None - - return s[:min_idx], s[min_idx + 1:], min_delim - - -def parse_url(url): - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - - Partly backwards-compatible with :mod:`urlparse`. - - Example:: - - >>> parse_url('http://google.com/mail/') - Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - >>> parse_url('google.com:80') - Url(scheme=None, host='google.com', port=80, path=None, ...) - >>> parse_url('/foo?bar') - Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - - # While this code has overlap with stdlib's urlparse, it is much - # simplified for our needs and less annoying. - # Additionally, this implementations does silly things to be optimal - # on CPython. - - if not url: - # Empty - return Url() - - scheme = None - auth = None - host = None - port = None - path = None - fragment = None - query = None - - # Scheme - if '://' in url: - scheme, url = url.split('://', 1) - - # Find the earliest Authority Terminator - # (http://tools.ietf.org/html/rfc3986#section-3.2) - url, path_, delim = split_first(url, ['/', '?', '#']) - - if delim: - # Reassemble the path - path = delim + path_ - - # Auth - if '@' in url: - # Last '@' denotes end of auth part - auth, url = url.rsplit('@', 1) - - # IPv6 - if url and url[0] == '[': - host, url = url.split(']', 1) - host += ']' - - # Port - if ':' in url: - _host, port = url.split(':', 1) - - if not host: - host = _host - - if port: - # If given, ports must be integers. No whitespace, no plus or - # minus prefixes, no non-integer digits such as ^2 (superscript). - if not port.isdigit(): - raise LocationParseError(url) - try: - port = int(port) - except ValueError: - raise LocationParseError(url) - else: - # Blank ports are cool, too. (rfc3986#section-3.2.3) - port = None - - elif not host and url: - host = url - - if not path: - return Url(scheme, auth, host, port, path, query, fragment) - - # Fragment - if '#' in path: - path, fragment = path.split('#', 1) - - # Query - if '?' in path: - path, query = path.split('?', 1) - - return Url(scheme, auth, host, port, path, query, fragment) - - -def get_host(url): - """ - Deprecated. Use :func:`parse_url` instead. - """ - p = parse_url(url) - return p.scheme or 'http', p.hostname, p.port diff --git a/venv/lib/python3.6/site-packages/urllib3/util/wait.py b/venv/lib/python3.6/site-packages/urllib3/util/wait.py deleted file mode 100755 index fa686ef..0000000 --- a/venv/lib/python3.6/site-packages/urllib3/util/wait.py +++ /dev/null @@ -1,153 +0,0 @@ -import errno -from functools import partial -import select -import sys -try: - from time import monotonic -except ImportError: - from time import time as monotonic - -__all__ = ["NoWayToWaitForSocketError", "wait_for_read", "wait_for_write"] - - -class NoWayToWaitForSocketError(Exception): - pass - - -# How should we wait on sockets? -# -# There are two types of APIs you can use for waiting on sockets: the fancy -# modern stateful APIs like epoll/kqueue, and the older stateless APIs like -# select/poll. The stateful APIs are more efficient when you have a lots of -# sockets to keep track of, because you can set them up once and then use them -# lots of times. But we only ever want to wait on a single socket at a time -# and don't want to keep track of state, so the stateless APIs are actually -# more efficient. So we want to use select() or poll(). -# -# Now, how do we choose between select() and poll()? On traditional Unixes, -# select() has a strange calling convention that makes it slow, or fail -# altogether, for high-numbered file descriptors. The point of poll() is to fix -# that, so on Unixes, we prefer poll(). -# -# On Windows, there is no poll() (or at least Python doesn't provide a wrapper -# for it), but that's OK, because on Windows, select() doesn't have this -# strange calling convention; plain select() works fine. -# -# So: on Windows we use select(), and everywhere else we use poll(). We also -# fall back to select() in case poll() is somehow broken or missing. - -if sys.version_info >= (3, 5): - # Modern Python, that retries syscalls by default - def _retry_on_intr(fn, timeout): - return fn(timeout) -else: - # Old and broken Pythons. - def _retry_on_intr(fn, timeout): - if timeout is not None and timeout <= 0: - return fn(timeout) - - if timeout is None: - deadline = float("inf") - else: - deadline = monotonic() + timeout - - while True: - try: - return fn(timeout) - # OSError for 3 <= pyver < 3.5, select.error for pyver <= 2.7 - except (OSError, select.error) as e: - # 'e.args[0]' incantation works for both OSError and select.error - if e.args[0] != errno.EINTR: - raise - else: - timeout = deadline - monotonic() - if timeout < 0: - timeout = 0 - if timeout == float("inf"): - timeout = None - continue - - -def select_wait_for_socket(sock, read=False, write=False, timeout=None): - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - rcheck = [] - wcheck = [] - if read: - rcheck.append(sock) - if write: - wcheck.append(sock) - # When doing a non-blocking connect, most systems signal success by - # marking the socket writable. Windows, though, signals success by marked - # it as "exceptional". We paper over the difference by checking the write - # sockets for both conditions. (The stdlib selectors module does the same - # thing.) - fn = partial(select.select, rcheck, wcheck, wcheck) - rready, wready, xready = _retry_on_intr(fn, timeout) - return bool(rready or wready or xready) - - -def poll_wait_for_socket(sock, read=False, write=False, timeout=None): - if not read and not write: - raise RuntimeError("must specify at least one of read=True, write=True") - mask = 0 - if read: - mask |= select.POLLIN - if write: - mask |= select.POLLOUT - poll_obj = select.poll() - poll_obj.register(sock, mask) - - # For some reason, poll() takes timeout in milliseconds - def do_poll(t): - if t is not None: - t *= 1000 - return poll_obj.poll(t) - - return bool(_retry_on_intr(do_poll, timeout)) - - -def null_wait_for_socket(*args, **kwargs): - raise NoWayToWaitForSocketError("no select-equivalent available") - - -def _have_working_poll(): - # Apparently some systems have a select.poll that fails as soon as you try - # to use it, either due to strange configuration or broken monkeypatching - # from libraries like eventlet/greenlet. - try: - poll_obj = select.poll() - poll_obj.poll(0) - except (AttributeError, OSError): - return False - else: - return True - - -def wait_for_socket(*args, **kwargs): - # We delay choosing which implementation to use until the first time we're - # called. We could do it at import time, but then we might make the wrong - # decision if someone goes wild with monkeypatching select.poll after - # we're imported. - global wait_for_socket - if _have_working_poll(): - wait_for_socket = poll_wait_for_socket - elif hasattr(select, "select"): - wait_for_socket = select_wait_for_socket - else: # Platform-specific: Appengine. - wait_for_socket = null_wait_for_socket - return wait_for_socket(*args, **kwargs) - - -def wait_for_read(sock, timeout=None): - """ Waits for reading to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, read=True, timeout=timeout) - - -def wait_for_write(sock, timeout=None): - """ Waits for writing to be available on a given socket. - Returns True if the socket is readable, or False if the timeout expired. - """ - return wait_for_socket(sock, write=True, timeout=timeout) diff --git a/venv/lib/python3.6/site-packages/yaml/__init__.py b/venv/lib/python3.6/site-packages/yaml/__init__.py deleted file mode 100644 index 9e35fe2..0000000 --- a/venv/lib/python3.6/site-packages/yaml/__init__.py +++ /dev/null @@ -1,312 +0,0 @@ - -from .error import * - -from .tokens import * -from .events import * -from .nodes import * - -from .loader import * -from .dumper import * - -__version__ = '3.13' -try: - from .cyaml import * - __with_libyaml__ = True -except ImportError: - __with_libyaml__ = False - -import io - -def scan(stream, Loader=Loader): - """ - Scan a YAML stream and produce scanning tokens. - """ - loader = Loader(stream) - try: - while loader.check_token(): - yield loader.get_token() - finally: - loader.dispose() - -def parse(stream, Loader=Loader): - """ - Parse a YAML stream and produce parsing events. - """ - loader = Loader(stream) - try: - while loader.check_event(): - yield loader.get_event() - finally: - loader.dispose() - -def compose(stream, Loader=Loader): - """ - Parse the first YAML document in a stream - and produce the corresponding representation tree. - """ - loader = Loader(stream) - try: - return loader.get_single_node() - finally: - loader.dispose() - -def compose_all(stream, Loader=Loader): - """ - Parse all YAML documents in a stream - and produce corresponding representation trees. - """ - loader = Loader(stream) - try: - while loader.check_node(): - yield loader.get_node() - finally: - loader.dispose() - -def load(stream, Loader=Loader): - """ - Parse the first YAML document in a stream - and produce the corresponding Python object. - """ - loader = Loader(stream) - try: - return loader.get_single_data() - finally: - loader.dispose() - -def load_all(stream, Loader=Loader): - """ - Parse all YAML documents in a stream - and produce corresponding Python objects. - """ - loader = Loader(stream) - try: - while loader.check_data(): - yield loader.get_data() - finally: - loader.dispose() - -def safe_load(stream): - """ - Parse the first YAML document in a stream - and produce the corresponding Python object. - Resolve only basic YAML tags. - """ - return load(stream, SafeLoader) - -def safe_load_all(stream): - """ - Parse all YAML documents in a stream - and produce corresponding Python objects. - Resolve only basic YAML tags. - """ - return load_all(stream, SafeLoader) - -def emit(events, stream=None, Dumper=Dumper, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None): - """ - Emit YAML parsing events into a stream. - If stream is None, return the produced string instead. - """ - getvalue = None - if stream is None: - stream = io.StringIO() - getvalue = stream.getvalue - dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, - allow_unicode=allow_unicode, line_break=line_break) - try: - for event in events: - dumper.emit(event) - finally: - dumper.dispose() - if getvalue: - return getvalue() - -def serialize_all(nodes, stream=None, Dumper=Dumper, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - """ - Serialize a sequence of representation trees into a YAML stream. - If stream is None, return the produced string instead. - """ - getvalue = None - if stream is None: - if encoding is None: - stream = io.StringIO() - else: - stream = io.BytesIO() - getvalue = stream.getvalue - dumper = Dumper(stream, canonical=canonical, indent=indent, width=width, - allow_unicode=allow_unicode, line_break=line_break, - encoding=encoding, version=version, tags=tags, - explicit_start=explicit_start, explicit_end=explicit_end) - try: - dumper.open() - for node in nodes: - dumper.serialize(node) - dumper.close() - finally: - dumper.dispose() - if getvalue: - return getvalue() - -def serialize(node, stream=None, Dumper=Dumper, **kwds): - """ - Serialize a representation tree into a YAML stream. - If stream is None, return the produced string instead. - """ - return serialize_all([node], stream, Dumper=Dumper, **kwds) - -def dump_all(documents, stream=None, Dumper=Dumper, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - """ - Serialize a sequence of Python objects into a YAML stream. - If stream is None, return the produced string instead. - """ - getvalue = None - if stream is None: - if encoding is None: - stream = io.StringIO() - else: - stream = io.BytesIO() - getvalue = stream.getvalue - dumper = Dumper(stream, default_style=default_style, - default_flow_style=default_flow_style, - canonical=canonical, indent=indent, width=width, - allow_unicode=allow_unicode, line_break=line_break, - encoding=encoding, version=version, tags=tags, - explicit_start=explicit_start, explicit_end=explicit_end) - try: - dumper.open() - for data in documents: - dumper.represent(data) - dumper.close() - finally: - dumper.dispose() - if getvalue: - return getvalue() - -def dump(data, stream=None, Dumper=Dumper, **kwds): - """ - Serialize a Python object into a YAML stream. - If stream is None, return the produced string instead. - """ - return dump_all([data], stream, Dumper=Dumper, **kwds) - -def safe_dump_all(documents, stream=None, **kwds): - """ - Serialize a sequence of Python objects into a YAML stream. - Produce only basic YAML tags. - If stream is None, return the produced string instead. - """ - return dump_all(documents, stream, Dumper=SafeDumper, **kwds) - -def safe_dump(data, stream=None, **kwds): - """ - Serialize a Python object into a YAML stream. - Produce only basic YAML tags. - If stream is None, return the produced string instead. - """ - return dump_all([data], stream, Dumper=SafeDumper, **kwds) - -def add_implicit_resolver(tag, regexp, first=None, - Loader=Loader, Dumper=Dumper): - """ - Add an implicit scalar detector. - If an implicit scalar value matches the given regexp, - the corresponding tag is assigned to the scalar. - first is a sequence of possible initial characters or None. - """ - Loader.add_implicit_resolver(tag, regexp, first) - Dumper.add_implicit_resolver(tag, regexp, first) - -def add_path_resolver(tag, path, kind=None, Loader=Loader, Dumper=Dumper): - """ - Add a path based resolver for the given tag. - A path is a list of keys that forms a path - to a node in the representation tree. - Keys can be string values, integers, or None. - """ - Loader.add_path_resolver(tag, path, kind) - Dumper.add_path_resolver(tag, path, kind) - -def add_constructor(tag, constructor, Loader=Loader): - """ - Add a constructor for the given tag. - Constructor is a function that accepts a Loader instance - and a node object and produces the corresponding Python object. - """ - Loader.add_constructor(tag, constructor) - -def add_multi_constructor(tag_prefix, multi_constructor, Loader=Loader): - """ - Add a multi-constructor for the given tag prefix. - Multi-constructor is called for a node if its tag starts with tag_prefix. - Multi-constructor accepts a Loader instance, a tag suffix, - and a node object and produces the corresponding Python object. - """ - Loader.add_multi_constructor(tag_prefix, multi_constructor) - -def add_representer(data_type, representer, Dumper=Dumper): - """ - Add a representer for the given type. - Representer is a function accepting a Dumper instance - and an instance of the given data type - and producing the corresponding representation node. - """ - Dumper.add_representer(data_type, representer) - -def add_multi_representer(data_type, multi_representer, Dumper=Dumper): - """ - Add a representer for the given type. - Multi-representer is a function accepting a Dumper instance - and an instance of the given data type or subtype - and producing the corresponding representation node. - """ - Dumper.add_multi_representer(data_type, multi_representer) - -class YAMLObjectMetaclass(type): - """ - The metaclass for YAMLObject. - """ - def __init__(cls, name, bases, kwds): - super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds) - if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None: - cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml) - cls.yaml_dumper.add_representer(cls, cls.to_yaml) - -class YAMLObject(metaclass=YAMLObjectMetaclass): - """ - An object that can dump itself to a YAML stream - and load itself from a YAML stream. - """ - - __slots__ = () # no direct instantiation, so allow immutable subclasses - - yaml_loader = Loader - yaml_dumper = Dumper - - yaml_tag = None - yaml_flow_style = None - - @classmethod - def from_yaml(cls, loader, node): - """ - Convert a representation node to a Python object. - """ - return loader.construct_yaml_object(node, cls) - - @classmethod - def to_yaml(cls, dumper, data): - """ - Convert a Python object to a representation node. - """ - return dumper.represent_yaml_object(cls.yaml_tag, data, cls, - flow_style=cls.yaml_flow_style) - diff --git a/venv/lib/python3.6/site-packages/yaml/composer.py b/venv/lib/python3.6/site-packages/yaml/composer.py deleted file mode 100644 index d5c6a7a..0000000 --- a/venv/lib/python3.6/site-packages/yaml/composer.py +++ /dev/null @@ -1,139 +0,0 @@ - -__all__ = ['Composer', 'ComposerError'] - -from .error import MarkedYAMLError -from .events import * -from .nodes import * - -class ComposerError(MarkedYAMLError): - pass - -class Composer: - - def __init__(self): - self.anchors = {} - - def check_node(self): - # Drop the STREAM-START event. - if self.check_event(StreamStartEvent): - self.get_event() - - # If there are more documents available? - return not self.check_event(StreamEndEvent) - - def get_node(self): - # Get the root node of the next document. - if not self.check_event(StreamEndEvent): - return self.compose_document() - - def get_single_node(self): - # Drop the STREAM-START event. - self.get_event() - - # Compose a document if the stream is not empty. - document = None - if not self.check_event(StreamEndEvent): - document = self.compose_document() - - # Ensure that the stream contains no more documents. - if not self.check_event(StreamEndEvent): - event = self.get_event() - raise ComposerError("expected a single document in the stream", - document.start_mark, "but found another document", - event.start_mark) - - # Drop the STREAM-END event. - self.get_event() - - return document - - def compose_document(self): - # Drop the DOCUMENT-START event. - self.get_event() - - # Compose the root node. - node = self.compose_node(None, None) - - # Drop the DOCUMENT-END event. - self.get_event() - - self.anchors = {} - return node - - def compose_node(self, parent, index): - if self.check_event(AliasEvent): - event = self.get_event() - anchor = event.anchor - if anchor not in self.anchors: - raise ComposerError(None, None, "found undefined alias %r" - % anchor, event.start_mark) - return self.anchors[anchor] - event = self.peek_event() - anchor = event.anchor - if anchor is not None: - if anchor in self.anchors: - raise ComposerError("found duplicate anchor %r; first occurence" - % anchor, self.anchors[anchor].start_mark, - "second occurence", event.start_mark) - self.descend_resolver(parent, index) - if self.check_event(ScalarEvent): - node = self.compose_scalar_node(anchor) - elif self.check_event(SequenceStartEvent): - node = self.compose_sequence_node(anchor) - elif self.check_event(MappingStartEvent): - node = self.compose_mapping_node(anchor) - self.ascend_resolver() - return node - - def compose_scalar_node(self, anchor): - event = self.get_event() - tag = event.tag - if tag is None or tag == '!': - tag = self.resolve(ScalarNode, event.value, event.implicit) - node = ScalarNode(tag, event.value, - event.start_mark, event.end_mark, style=event.style) - if anchor is not None: - self.anchors[anchor] = node - return node - - def compose_sequence_node(self, anchor): - start_event = self.get_event() - tag = start_event.tag - if tag is None or tag == '!': - tag = self.resolve(SequenceNode, None, start_event.implicit) - node = SequenceNode(tag, [], - start_event.start_mark, None, - flow_style=start_event.flow_style) - if anchor is not None: - self.anchors[anchor] = node - index = 0 - while not self.check_event(SequenceEndEvent): - node.value.append(self.compose_node(node, index)) - index += 1 - end_event = self.get_event() - node.end_mark = end_event.end_mark - return node - - def compose_mapping_node(self, anchor): - start_event = self.get_event() - tag = start_event.tag - if tag is None or tag == '!': - tag = self.resolve(MappingNode, None, start_event.implicit) - node = MappingNode(tag, [], - start_event.start_mark, None, - flow_style=start_event.flow_style) - if anchor is not None: - self.anchors[anchor] = node - while not self.check_event(MappingEndEvent): - #key_event = self.peek_event() - item_key = self.compose_node(node, None) - #if item_key in node.value: - # raise ComposerError("while composing a mapping", start_event.start_mark, - # "found duplicate key", key_event.start_mark) - item_value = self.compose_node(node, item_key) - #node.value[item_key] = item_value - node.value.append((item_key, item_value)) - end_event = self.get_event() - node.end_mark = end_event.end_mark - return node - diff --git a/venv/lib/python3.6/site-packages/yaml/constructor.py b/venv/lib/python3.6/site-packages/yaml/constructor.py deleted file mode 100644 index 981543a..0000000 --- a/venv/lib/python3.6/site-packages/yaml/constructor.py +++ /dev/null @@ -1,686 +0,0 @@ - -__all__ = ['BaseConstructor', 'SafeConstructor', 'Constructor', - 'ConstructorError'] - -from .error import * -from .nodes import * - -import collections, datetime, base64, binascii, re, sys, types - -class ConstructorError(MarkedYAMLError): - pass - -class BaseConstructor: - - yaml_constructors = {} - yaml_multi_constructors = {} - - def __init__(self): - self.constructed_objects = {} - self.recursive_objects = {} - self.state_generators = [] - self.deep_construct = False - - def check_data(self): - # If there are more documents available? - return self.check_node() - - def get_data(self): - # Construct and return the next document. - if self.check_node(): - return self.construct_document(self.get_node()) - - def get_single_data(self): - # Ensure that the stream contains a single document and construct it. - node = self.get_single_node() - if node is not None: - return self.construct_document(node) - return None - - def construct_document(self, node): - data = self.construct_object(node) - while self.state_generators: - state_generators = self.state_generators - self.state_generators = [] - for generator in state_generators: - for dummy in generator: - pass - self.constructed_objects = {} - self.recursive_objects = {} - self.deep_construct = False - return data - - def construct_object(self, node, deep=False): - if node in self.constructed_objects: - return self.constructed_objects[node] - if deep: - old_deep = self.deep_construct - self.deep_construct = True - if node in self.recursive_objects: - raise ConstructorError(None, None, - "found unconstructable recursive node", node.start_mark) - self.recursive_objects[node] = None - constructor = None - tag_suffix = None - if node.tag in self.yaml_constructors: - constructor = self.yaml_constructors[node.tag] - else: - for tag_prefix in self.yaml_multi_constructors: - if node.tag.startswith(tag_prefix): - tag_suffix = node.tag[len(tag_prefix):] - constructor = self.yaml_multi_constructors[tag_prefix] - break - else: - if None in self.yaml_multi_constructors: - tag_suffix = node.tag - constructor = self.yaml_multi_constructors[None] - elif None in self.yaml_constructors: - constructor = self.yaml_constructors[None] - elif isinstance(node, ScalarNode): - constructor = self.__class__.construct_scalar - elif isinstance(node, SequenceNode): - constructor = self.__class__.construct_sequence - elif isinstance(node, MappingNode): - constructor = self.__class__.construct_mapping - if tag_suffix is None: - data = constructor(self, node) - else: - data = constructor(self, tag_suffix, node) - if isinstance(data, types.GeneratorType): - generator = data - data = next(generator) - if self.deep_construct: - for dummy in generator: - pass - else: - self.state_generators.append(generator) - self.constructed_objects[node] = data - del self.recursive_objects[node] - if deep: - self.deep_construct = old_deep - return data - - def construct_scalar(self, node): - if not isinstance(node, ScalarNode): - raise ConstructorError(None, None, - "expected a scalar node, but found %s" % node.id, - node.start_mark) - return node.value - - def construct_sequence(self, node, deep=False): - if not isinstance(node, SequenceNode): - raise ConstructorError(None, None, - "expected a sequence node, but found %s" % node.id, - node.start_mark) - return [self.construct_object(child, deep=deep) - for child in node.value] - - def construct_mapping(self, node, deep=False): - if not isinstance(node, MappingNode): - raise ConstructorError(None, None, - "expected a mapping node, but found %s" % node.id, - node.start_mark) - mapping = {} - for key_node, value_node in node.value: - key = self.construct_object(key_node, deep=deep) - if not isinstance(key, collections.Hashable): - raise ConstructorError("while constructing a mapping", node.start_mark, - "found unhashable key", key_node.start_mark) - value = self.construct_object(value_node, deep=deep) - mapping[key] = value - return mapping - - def construct_pairs(self, node, deep=False): - if not isinstance(node, MappingNode): - raise ConstructorError(None, None, - "expected a mapping node, but found %s" % node.id, - node.start_mark) - pairs = [] - for key_node, value_node in node.value: - key = self.construct_object(key_node, deep=deep) - value = self.construct_object(value_node, deep=deep) - pairs.append((key, value)) - return pairs - - @classmethod - def add_constructor(cls, tag, constructor): - if not 'yaml_constructors' in cls.__dict__: - cls.yaml_constructors = cls.yaml_constructors.copy() - cls.yaml_constructors[tag] = constructor - - @classmethod - def add_multi_constructor(cls, tag_prefix, multi_constructor): - if not 'yaml_multi_constructors' in cls.__dict__: - cls.yaml_multi_constructors = cls.yaml_multi_constructors.copy() - cls.yaml_multi_constructors[tag_prefix] = multi_constructor - -class SafeConstructor(BaseConstructor): - - def construct_scalar(self, node): - if isinstance(node, MappingNode): - for key_node, value_node in node.value: - if key_node.tag == 'tag:yaml.org,2002:value': - return self.construct_scalar(value_node) - return super().construct_scalar(node) - - def flatten_mapping(self, node): - merge = [] - index = 0 - while index < len(node.value): - key_node, value_node = node.value[index] - if key_node.tag == 'tag:yaml.org,2002:merge': - del node.value[index] - if isinstance(value_node, MappingNode): - self.flatten_mapping(value_node) - merge.extend(value_node.value) - elif isinstance(value_node, SequenceNode): - submerge = [] - for subnode in value_node.value: - if not isinstance(subnode, MappingNode): - raise ConstructorError("while constructing a mapping", - node.start_mark, - "expected a mapping for merging, but found %s" - % subnode.id, subnode.start_mark) - self.flatten_mapping(subnode) - submerge.append(subnode.value) - submerge.reverse() - for value in submerge: - merge.extend(value) - else: - raise ConstructorError("while constructing a mapping", node.start_mark, - "expected a mapping or list of mappings for merging, but found %s" - % value_node.id, value_node.start_mark) - elif key_node.tag == 'tag:yaml.org,2002:value': - key_node.tag = 'tag:yaml.org,2002:str' - index += 1 - else: - index += 1 - if merge: - node.value = merge + node.value - - def construct_mapping(self, node, deep=False): - if isinstance(node, MappingNode): - self.flatten_mapping(node) - return super().construct_mapping(node, deep=deep) - - def construct_yaml_null(self, node): - self.construct_scalar(node) - return None - - bool_values = { - 'yes': True, - 'no': False, - 'true': True, - 'false': False, - 'on': True, - 'off': False, - } - - def construct_yaml_bool(self, node): - value = self.construct_scalar(node) - return self.bool_values[value.lower()] - - def construct_yaml_int(self, node): - value = self.construct_scalar(node) - value = value.replace('_', '') - sign = +1 - if value[0] == '-': - sign = -1 - if value[0] in '+-': - value = value[1:] - if value == '0': - return 0 - elif value.startswith('0b'): - return sign*int(value[2:], 2) - elif value.startswith('0x'): - return sign*int(value[2:], 16) - elif value[0] == '0': - return sign*int(value, 8) - elif ':' in value: - digits = [int(part) for part in value.split(':')] - digits.reverse() - base = 1 - value = 0 - for digit in digits: - value += digit*base - base *= 60 - return sign*value - else: - return sign*int(value) - - inf_value = 1e300 - while inf_value != inf_value*inf_value: - inf_value *= inf_value - nan_value = -inf_value/inf_value # Trying to make a quiet NaN (like C99). - - def construct_yaml_float(self, node): - value = self.construct_scalar(node) - value = value.replace('_', '').lower() - sign = +1 - if value[0] == '-': - sign = -1 - if value[0] in '+-': - value = value[1:] - if value == '.inf': - return sign*self.inf_value - elif value == '.nan': - return self.nan_value - elif ':' in value: - digits = [float(part) for part in value.split(':')] - digits.reverse() - base = 1 - value = 0.0 - for digit in digits: - value += digit*base - base *= 60 - return sign*value - else: - return sign*float(value) - - def construct_yaml_binary(self, node): - try: - value = self.construct_scalar(node).encode('ascii') - except UnicodeEncodeError as exc: - raise ConstructorError(None, None, - "failed to convert base64 data into ascii: %s" % exc, - node.start_mark) - try: - if hasattr(base64, 'decodebytes'): - return base64.decodebytes(value) - else: - return base64.decodestring(value) - except binascii.Error as exc: - raise ConstructorError(None, None, - "failed to decode base64 data: %s" % exc, node.start_mark) - - timestamp_regexp = re.compile( - r'''^(?P<year>[0-9][0-9][0-9][0-9]) - -(?P<month>[0-9][0-9]?) - -(?P<day>[0-9][0-9]?) - (?:(?:[Tt]|[ \t]+) - (?P<hour>[0-9][0-9]?) - :(?P<minute>[0-9][0-9]) - :(?P<second>[0-9][0-9]) - (?:\.(?P<fraction>[0-9]*))? - (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?) - (?::(?P<tz_minute>[0-9][0-9]))?))?)?$''', re.X) - - def construct_yaml_timestamp(self, node): - value = self.construct_scalar(node) - match = self.timestamp_regexp.match(node.value) - values = match.groupdict() - year = int(values['year']) - month = int(values['month']) - day = int(values['day']) - if not values['hour']: - return datetime.date(year, month, day) - hour = int(values['hour']) - minute = int(values['minute']) - second = int(values['second']) - fraction = 0 - if values['fraction']: - fraction = values['fraction'][:6] - while len(fraction) < 6: - fraction += '0' - fraction = int(fraction) - delta = None - if values['tz_sign']: - tz_hour = int(values['tz_hour']) - tz_minute = int(values['tz_minute'] or 0) - delta = datetime.timedelta(hours=tz_hour, minutes=tz_minute) - if values['tz_sign'] == '-': - delta = -delta - data = datetime.datetime(year, month, day, hour, minute, second, fraction) - if delta: - data -= delta - return data - - def construct_yaml_omap(self, node): - # Note: we do not check for duplicate keys, because it's too - # CPU-expensive. - omap = [] - yield omap - if not isinstance(node, SequenceNode): - raise ConstructorError("while constructing an ordered map", node.start_mark, - "expected a sequence, but found %s" % node.id, node.start_mark) - for subnode in node.value: - if not isinstance(subnode, MappingNode): - raise ConstructorError("while constructing an ordered map", node.start_mark, - "expected a mapping of length 1, but found %s" % subnode.id, - subnode.start_mark) - if len(subnode.value) != 1: - raise ConstructorError("while constructing an ordered map", node.start_mark, - "expected a single mapping item, but found %d items" % len(subnode.value), - subnode.start_mark) - key_node, value_node = subnode.value[0] - key = self.construct_object(key_node) - value = self.construct_object(value_node) - omap.append((key, value)) - - def construct_yaml_pairs(self, node): - # Note: the same code as `construct_yaml_omap`. - pairs = [] - yield pairs - if not isinstance(node, SequenceNode): - raise ConstructorError("while constructing pairs", node.start_mark, - "expected a sequence, but found %s" % node.id, node.start_mark) - for subnode in node.value: - if not isinstance(subnode, MappingNode): - raise ConstructorError("while constructing pairs", node.start_mark, - "expected a mapping of length 1, but found %s" % subnode.id, - subnode.start_mark) - if len(subnode.value) != 1: - raise ConstructorError("while constructing pairs", node.start_mark, - "expected a single mapping item, but found %d items" % len(subnode.value), - subnode.start_mark) - key_node, value_node = subnode.value[0] - key = self.construct_object(key_node) - value = self.construct_object(value_node) - pairs.append((key, value)) - - def construct_yaml_set(self, node): - data = set() - yield data - value = self.construct_mapping(node) - data.update(value) - - def construct_yaml_str(self, node): - return self.construct_scalar(node) - - def construct_yaml_seq(self, node): - data = [] - yield data - data.extend(self.construct_sequence(node)) - - def construct_yaml_map(self, node): - data = {} - yield data - value = self.construct_mapping(node) - data.update(value) - - def construct_yaml_object(self, node, cls): - data = cls.__new__(cls) - yield data - if hasattr(data, '__setstate__'): - state = self.construct_mapping(node, deep=True) - data.__setstate__(state) - else: - state = self.construct_mapping(node) - data.__dict__.update(state) - - def construct_undefined(self, node): - raise ConstructorError(None, None, - "could not determine a constructor for the tag %r" % node.tag, - node.start_mark) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:null', - SafeConstructor.construct_yaml_null) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:bool', - SafeConstructor.construct_yaml_bool) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:int', - SafeConstructor.construct_yaml_int) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:float', - SafeConstructor.construct_yaml_float) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:binary', - SafeConstructor.construct_yaml_binary) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:timestamp', - SafeConstructor.construct_yaml_timestamp) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:omap', - SafeConstructor.construct_yaml_omap) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:pairs', - SafeConstructor.construct_yaml_pairs) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:set', - SafeConstructor.construct_yaml_set) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:str', - SafeConstructor.construct_yaml_str) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:seq', - SafeConstructor.construct_yaml_seq) - -SafeConstructor.add_constructor( - 'tag:yaml.org,2002:map', - SafeConstructor.construct_yaml_map) - -SafeConstructor.add_constructor(None, - SafeConstructor.construct_undefined) - -class Constructor(SafeConstructor): - - def construct_python_str(self, node): - return self.construct_scalar(node) - - def construct_python_unicode(self, node): - return self.construct_scalar(node) - - def construct_python_bytes(self, node): - try: - value = self.construct_scalar(node).encode('ascii') - except UnicodeEncodeError as exc: - raise ConstructorError(None, None, - "failed to convert base64 data into ascii: %s" % exc, - node.start_mark) - try: - if hasattr(base64, 'decodebytes'): - return base64.decodebytes(value) - else: - return base64.decodestring(value) - except binascii.Error as exc: - raise ConstructorError(None, None, - "failed to decode base64 data: %s" % exc, node.start_mark) - - def construct_python_long(self, node): - return self.construct_yaml_int(node) - - def construct_python_complex(self, node): - return complex(self.construct_scalar(node)) - - def construct_python_tuple(self, node): - return tuple(self.construct_sequence(node)) - - def find_python_module(self, name, mark): - if not name: - raise ConstructorError("while constructing a Python module", mark, - "expected non-empty name appended to the tag", mark) - try: - __import__(name) - except ImportError as exc: - raise ConstructorError("while constructing a Python module", mark, - "cannot find module %r (%s)" % (name, exc), mark) - return sys.modules[name] - - def find_python_name(self, name, mark): - if not name: - raise ConstructorError("while constructing a Python object", mark, - "expected non-empty name appended to the tag", mark) - if '.' in name: - module_name, object_name = name.rsplit('.', 1) - else: - module_name = 'builtins' - object_name = name - try: - __import__(module_name) - except ImportError as exc: - raise ConstructorError("while constructing a Python object", mark, - "cannot find module %r (%s)" % (module_name, exc), mark) - module = sys.modules[module_name] - if not hasattr(module, object_name): - raise ConstructorError("while constructing a Python object", mark, - "cannot find %r in the module %r" - % (object_name, module.__name__), mark) - return getattr(module, object_name) - - def construct_python_name(self, suffix, node): - value = self.construct_scalar(node) - if value: - raise ConstructorError("while constructing a Python name", node.start_mark, - "expected the empty value, but found %r" % value, node.start_mark) - return self.find_python_name(suffix, node.start_mark) - - def construct_python_module(self, suffix, node): - value = self.construct_scalar(node) - if value: - raise ConstructorError("while constructing a Python module", node.start_mark, - "expected the empty value, but found %r" % value, node.start_mark) - return self.find_python_module(suffix, node.start_mark) - - def make_python_instance(self, suffix, node, - args=None, kwds=None, newobj=False): - if not args: - args = [] - if not kwds: - kwds = {} - cls = self.find_python_name(suffix, node.start_mark) - if newobj and isinstance(cls, type): - return cls.__new__(cls, *args, **kwds) - else: - return cls(*args, **kwds) - - def set_python_instance_state(self, instance, state): - if hasattr(instance, '__setstate__'): - instance.__setstate__(state) - else: - slotstate = {} - if isinstance(state, tuple) and len(state) == 2: - state, slotstate = state - if hasattr(instance, '__dict__'): - instance.__dict__.update(state) - elif state: - slotstate.update(state) - for key, value in slotstate.items(): - setattr(object, key, value) - - def construct_python_object(self, suffix, node): - # Format: - # !!python/object:module.name { ... state ... } - instance = self.make_python_instance(suffix, node, newobj=True) - yield instance - deep = hasattr(instance, '__setstate__') - state = self.construct_mapping(node, deep=deep) - self.set_python_instance_state(instance, state) - - def construct_python_object_apply(self, suffix, node, newobj=False): - # Format: - # !!python/object/apply # (or !!python/object/new) - # args: [ ... arguments ... ] - # kwds: { ... keywords ... } - # state: ... state ... - # listitems: [ ... listitems ... ] - # dictitems: { ... dictitems ... } - # or short format: - # !!python/object/apply [ ... arguments ... ] - # The difference between !!python/object/apply and !!python/object/new - # is how an object is created, check make_python_instance for details. - if isinstance(node, SequenceNode): - args = self.construct_sequence(node, deep=True) - kwds = {} - state = {} - listitems = [] - dictitems = {} - else: - value = self.construct_mapping(node, deep=True) - args = value.get('args', []) - kwds = value.get('kwds', {}) - state = value.get('state', {}) - listitems = value.get('listitems', []) - dictitems = value.get('dictitems', {}) - instance = self.make_python_instance(suffix, node, args, kwds, newobj) - if state: - self.set_python_instance_state(instance, state) - if listitems: - instance.extend(listitems) - if dictitems: - for key in dictitems: - instance[key] = dictitems[key] - return instance - - def construct_python_object_new(self, suffix, node): - return self.construct_python_object_apply(suffix, node, newobj=True) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/none', - Constructor.construct_yaml_null) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/bool', - Constructor.construct_yaml_bool) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/str', - Constructor.construct_python_str) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/unicode', - Constructor.construct_python_unicode) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/bytes', - Constructor.construct_python_bytes) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/int', - Constructor.construct_yaml_int) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/long', - Constructor.construct_python_long) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/float', - Constructor.construct_yaml_float) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/complex', - Constructor.construct_python_complex) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/list', - Constructor.construct_yaml_seq) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/tuple', - Constructor.construct_python_tuple) - -Constructor.add_constructor( - 'tag:yaml.org,2002:python/dict', - Constructor.construct_yaml_map) - -Constructor.add_multi_constructor( - 'tag:yaml.org,2002:python/name:', - Constructor.construct_python_name) - -Constructor.add_multi_constructor( - 'tag:yaml.org,2002:python/module:', - Constructor.construct_python_module) - -Constructor.add_multi_constructor( - 'tag:yaml.org,2002:python/object:', - Constructor.construct_python_object) - -Constructor.add_multi_constructor( - 'tag:yaml.org,2002:python/object/apply:', - Constructor.construct_python_object_apply) - -Constructor.add_multi_constructor( - 'tag:yaml.org,2002:python/object/new:', - Constructor.construct_python_object_new) - diff --git a/venv/lib/python3.6/site-packages/yaml/cyaml.py b/venv/lib/python3.6/site-packages/yaml/cyaml.py deleted file mode 100644 index d5cb87e..0000000 --- a/venv/lib/python3.6/site-packages/yaml/cyaml.py +++ /dev/null @@ -1,85 +0,0 @@ - -__all__ = ['CBaseLoader', 'CSafeLoader', 'CLoader', - 'CBaseDumper', 'CSafeDumper', 'CDumper'] - -from _yaml import CParser, CEmitter - -from .constructor import * - -from .serializer import * -from .representer import * - -from .resolver import * - -class CBaseLoader(CParser, BaseConstructor, BaseResolver): - - def __init__(self, stream): - CParser.__init__(self, stream) - BaseConstructor.__init__(self) - BaseResolver.__init__(self) - -class CSafeLoader(CParser, SafeConstructor, Resolver): - - def __init__(self, stream): - CParser.__init__(self, stream) - SafeConstructor.__init__(self) - Resolver.__init__(self) - -class CLoader(CParser, Constructor, Resolver): - - def __init__(self, stream): - CParser.__init__(self, stream) - Constructor.__init__(self) - Resolver.__init__(self) - -class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver): - - def __init__(self, stream, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - CEmitter.__init__(self, stream, canonical=canonical, - indent=indent, width=width, encoding=encoding, - allow_unicode=allow_unicode, line_break=line_break, - explicit_start=explicit_start, explicit_end=explicit_end, - version=version, tags=tags) - Representer.__init__(self, default_style=default_style, - default_flow_style=default_flow_style) - Resolver.__init__(self) - -class CSafeDumper(CEmitter, SafeRepresenter, Resolver): - - def __init__(self, stream, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - CEmitter.__init__(self, stream, canonical=canonical, - indent=indent, width=width, encoding=encoding, - allow_unicode=allow_unicode, line_break=line_break, - explicit_start=explicit_start, explicit_end=explicit_end, - version=version, tags=tags) - SafeRepresenter.__init__(self, default_style=default_style, - default_flow_style=default_flow_style) - Resolver.__init__(self) - -class CDumper(CEmitter, Serializer, Representer, Resolver): - - def __init__(self, stream, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - CEmitter.__init__(self, stream, canonical=canonical, - indent=indent, width=width, encoding=encoding, - allow_unicode=allow_unicode, line_break=line_break, - explicit_start=explicit_start, explicit_end=explicit_end, - version=version, tags=tags) - Representer.__init__(self, default_style=default_style, - default_flow_style=default_flow_style) - Resolver.__init__(self) - diff --git a/venv/lib/python3.6/site-packages/yaml/dumper.py b/venv/lib/python3.6/site-packages/yaml/dumper.py deleted file mode 100644 index 0b69128..0000000 --- a/venv/lib/python3.6/site-packages/yaml/dumper.py +++ /dev/null @@ -1,62 +0,0 @@ - -__all__ = ['BaseDumper', 'SafeDumper', 'Dumper'] - -from .emitter import * -from .serializer import * -from .representer import * -from .resolver import * - -class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver): - - def __init__(self, stream, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - Emitter.__init__(self, stream, canonical=canonical, - indent=indent, width=width, - allow_unicode=allow_unicode, line_break=line_break) - Serializer.__init__(self, encoding=encoding, - explicit_start=explicit_start, explicit_end=explicit_end, - version=version, tags=tags) - Representer.__init__(self, default_style=default_style, - default_flow_style=default_flow_style) - Resolver.__init__(self) - -class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver): - - def __init__(self, stream, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - Emitter.__init__(self, stream, canonical=canonical, - indent=indent, width=width, - allow_unicode=allow_unicode, line_break=line_break) - Serializer.__init__(self, encoding=encoding, - explicit_start=explicit_start, explicit_end=explicit_end, - version=version, tags=tags) - SafeRepresenter.__init__(self, default_style=default_style, - default_flow_style=default_flow_style) - Resolver.__init__(self) - -class Dumper(Emitter, Serializer, Representer, Resolver): - - def __init__(self, stream, - default_style=None, default_flow_style=None, - canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None, - encoding=None, explicit_start=None, explicit_end=None, - version=None, tags=None): - Emitter.__init__(self, stream, canonical=canonical, - indent=indent, width=width, - allow_unicode=allow_unicode, line_break=line_break) - Serializer.__init__(self, encoding=encoding, - explicit_start=explicit_start, explicit_end=explicit_end, - version=version, tags=tags) - Representer.__init__(self, default_style=default_style, - default_flow_style=default_flow_style) - Resolver.__init__(self) - diff --git a/venv/lib/python3.6/site-packages/yaml/emitter.py b/venv/lib/python3.6/site-packages/yaml/emitter.py deleted file mode 100644 index 34cb145..0000000 --- a/venv/lib/python3.6/site-packages/yaml/emitter.py +++ /dev/null @@ -1,1137 +0,0 @@ - -# Emitter expects events obeying the following grammar: -# stream ::= STREAM-START document* STREAM-END -# document ::= DOCUMENT-START node DOCUMENT-END -# node ::= SCALAR | sequence | mapping -# sequence ::= SEQUENCE-START node* SEQUENCE-END -# mapping ::= MAPPING-START (node node)* MAPPING-END - -__all__ = ['Emitter', 'EmitterError'] - -from .error import YAMLError -from .events import * - -class EmitterError(YAMLError): - pass - -class ScalarAnalysis: - def __init__(self, scalar, empty, multiline, - allow_flow_plain, allow_block_plain, - allow_single_quoted, allow_double_quoted, - allow_block): - self.scalar = scalar - self.empty = empty - self.multiline = multiline - self.allow_flow_plain = allow_flow_plain - self.allow_block_plain = allow_block_plain - self.allow_single_quoted = allow_single_quoted - self.allow_double_quoted = allow_double_quoted - self.allow_block = allow_block - -class Emitter: - - DEFAULT_TAG_PREFIXES = { - '!' : '!', - 'tag:yaml.org,2002:' : '!!', - } - - def __init__(self, stream, canonical=None, indent=None, width=None, - allow_unicode=None, line_break=None): - - # The stream should have the methods `write` and possibly `flush`. - self.stream = stream - - # Encoding can be overriden by STREAM-START. - self.encoding = None - - # Emitter is a state machine with a stack of states to handle nested - # structures. - self.states = [] - self.state = self.expect_stream_start - - # Current event and the event queue. - self.events = [] - self.event = None - - # The current indentation level and the stack of previous indents. - self.indents = [] - self.indent = None - - # Flow level. - self.flow_level = 0 - - # Contexts. - self.root_context = False - self.sequence_context = False - self.mapping_context = False - self.simple_key_context = False - - # Characteristics of the last emitted character: - # - current position. - # - is it a whitespace? - # - is it an indention character - # (indentation space, '-', '?', or ':')? - self.line = 0 - self.column = 0 - self.whitespace = True - self.indention = True - - # Whether the document requires an explicit document indicator - self.open_ended = False - - # Formatting details. - self.canonical = canonical - self.allow_unicode = allow_unicode - self.best_indent = 2 - if indent and 1 < indent < 10: - self.best_indent = indent - self.best_width = 80 - if width and width > self.best_indent*2: - self.best_width = width - self.best_line_break = '\n' - if line_break in ['\r', '\n', '\r\n']: - self.best_line_break = line_break - - # Tag prefixes. - self.tag_prefixes = None - - # Prepared anchor and tag. - self.prepared_anchor = None - self.prepared_tag = None - - # Scalar analysis and style. - self.analysis = None - self.style = None - - def dispose(self): - # Reset the state attributes (to clear self-references) - self.states = [] - self.state = None - - def emit(self, event): - self.events.append(event) - while not self.need_more_events(): - self.event = self.events.pop(0) - self.state() - self.event = None - - # In some cases, we wait for a few next events before emitting. - - def need_more_events(self): - if not self.events: - return True - event = self.events[0] - if isinstance(event, DocumentStartEvent): - return self.need_events(1) - elif isinstance(event, SequenceStartEvent): - return self.need_events(2) - elif isinstance(event, MappingStartEvent): - return self.need_events(3) - else: - return False - - def need_events(self, count): - level = 0 - for event in self.events[1:]: - if isinstance(event, (DocumentStartEvent, CollectionStartEvent)): - level += 1 - elif isinstance(event, (DocumentEndEvent, CollectionEndEvent)): - level -= 1 - elif isinstance(event, StreamEndEvent): - level = -1 - if level < 0: - return False - return (len(self.events) < count+1) - - def increase_indent(self, flow=False, indentless=False): - self.indents.append(self.indent) - if self.indent is None: - if flow: - self.indent = self.best_indent - else: - self.indent = 0 - elif not indentless: - self.indent += self.best_indent - - # States. - - # Stream handlers. - - def expect_stream_start(self): - if isinstance(self.event, StreamStartEvent): - if self.event.encoding and not hasattr(self.stream, 'encoding'): - self.encoding = self.event.encoding - self.write_stream_start() - self.state = self.expect_first_document_start - else: - raise EmitterError("expected StreamStartEvent, but got %s" - % self.event) - - def expect_nothing(self): - raise EmitterError("expected nothing, but got %s" % self.event) - - # Document handlers. - - def expect_first_document_start(self): - return self.expect_document_start(first=True) - - def expect_document_start(self, first=False): - if isinstance(self.event, DocumentStartEvent): - if (self.event.version or self.event.tags) and self.open_ended: - self.write_indicator('...', True) - self.write_indent() - if self.event.version: - version_text = self.prepare_version(self.event.version) - self.write_version_directive(version_text) - self.tag_prefixes = self.DEFAULT_TAG_PREFIXES.copy() - if self.event.tags: - handles = sorted(self.event.tags.keys()) - for handle in handles: - prefix = self.event.tags[handle] - self.tag_prefixes[prefix] = handle - handle_text = self.prepare_tag_handle(handle) - prefix_text = self.prepare_tag_prefix(prefix) - self.write_tag_directive(handle_text, prefix_text) - implicit = (first and not self.event.explicit and not self.canonical - and not self.event.version and not self.event.tags - and not self.check_empty_document()) - if not implicit: - self.write_indent() - self.write_indicator('---', True) - if self.canonical: - self.write_indent() - self.state = self.expect_document_root - elif isinstance(self.event, StreamEndEvent): - if self.open_ended: - self.write_indicator('...', True) - self.write_indent() - self.write_stream_end() - self.state = self.expect_nothing - else: - raise EmitterError("expected DocumentStartEvent, but got %s" - % self.event) - - def expect_document_end(self): - if isinstance(self.event, DocumentEndEvent): - self.write_indent() - if self.event.explicit: - self.write_indicator('...', True) - self.write_indent() - self.flush_stream() - self.state = self.expect_document_start - else: - raise EmitterError("expected DocumentEndEvent, but got %s" - % self.event) - - def expect_document_root(self): - self.states.append(self.expect_document_end) - self.expect_node(root=True) - - # Node handlers. - - def expect_node(self, root=False, sequence=False, mapping=False, - simple_key=False): - self.root_context = root - self.sequence_context = sequence - self.mapping_context = mapping - self.simple_key_context = simple_key - if isinstance(self.event, AliasEvent): - self.expect_alias() - elif isinstance(self.event, (ScalarEvent, CollectionStartEvent)): - self.process_anchor('&') - self.process_tag() - if isinstance(self.event, ScalarEvent): - self.expect_scalar() - elif isinstance(self.event, SequenceStartEvent): - if self.flow_level or self.canonical or self.event.flow_style \ - or self.check_empty_sequence(): - self.expect_flow_sequence() - else: - self.expect_block_sequence() - elif isinstance(self.event, MappingStartEvent): - if self.flow_level or self.canonical or self.event.flow_style \ - or self.check_empty_mapping(): - self.expect_flow_mapping() - else: - self.expect_block_mapping() - else: - raise EmitterError("expected NodeEvent, but got %s" % self.event) - - def expect_alias(self): - if self.event.anchor is None: - raise EmitterError("anchor is not specified for alias") - self.process_anchor('*') - self.state = self.states.pop() - - def expect_scalar(self): - self.increase_indent(flow=True) - self.process_scalar() - self.indent = self.indents.pop() - self.state = self.states.pop() - - # Flow sequence handlers. - - def expect_flow_sequence(self): - self.write_indicator('[', True, whitespace=True) - self.flow_level += 1 - self.increase_indent(flow=True) - self.state = self.expect_first_flow_sequence_item - - def expect_first_flow_sequence_item(self): - if isinstance(self.event, SequenceEndEvent): - self.indent = self.indents.pop() - self.flow_level -= 1 - self.write_indicator(']', False) - self.state = self.states.pop() - else: - if self.canonical or self.column > self.best_width: - self.write_indent() - self.states.append(self.expect_flow_sequence_item) - self.expect_node(sequence=True) - - def expect_flow_sequence_item(self): - if isinstance(self.event, SequenceEndEvent): - self.indent = self.indents.pop() - self.flow_level -= 1 - if self.canonical: - self.write_indicator(',', False) - self.write_indent() - self.write_indicator(']', False) - self.state = self.states.pop() - else: - self.write_indicator(',', False) - if self.canonical or self.column > self.best_width: - self.write_indent() - self.states.append(self.expect_flow_sequence_item) - self.expect_node(sequence=True) - - # Flow mapping handlers. - - def expect_flow_mapping(self): - self.write_indicator('{', True, whitespace=True) - self.flow_level += 1 - self.increase_indent(flow=True) - self.state = self.expect_first_flow_mapping_key - - def expect_first_flow_mapping_key(self): - if isinstance(self.event, MappingEndEvent): - self.indent = self.indents.pop() - self.flow_level -= 1 - self.write_indicator('}', False) - self.state = self.states.pop() - else: - if self.canonical or self.column > self.best_width: - self.write_indent() - if not self.canonical and self.check_simple_key(): - self.states.append(self.expect_flow_mapping_simple_value) - self.expect_node(mapping=True, simple_key=True) - else: - self.write_indicator('?', True) - self.states.append(self.expect_flow_mapping_value) - self.expect_node(mapping=True) - - def expect_flow_mapping_key(self): - if isinstance(self.event, MappingEndEvent): - self.indent = self.indents.pop() - self.flow_level -= 1 - if self.canonical: - self.write_indicator(',', False) - self.write_indent() - self.write_indicator('}', False) - self.state = self.states.pop() - else: - self.write_indicator(',', False) - if self.canonical or self.column > self.best_width: - self.write_indent() - if not self.canonical and self.check_simple_key(): - self.states.append(self.expect_flow_mapping_simple_value) - self.expect_node(mapping=True, simple_key=True) - else: - self.write_indicator('?', True) - self.states.append(self.expect_flow_mapping_value) - self.expect_node(mapping=True) - - def expect_flow_mapping_simple_value(self): - self.write_indicator(':', False) - self.states.append(self.expect_flow_mapping_key) - self.expect_node(mapping=True) - - def expect_flow_mapping_value(self): - if self.canonical or self.column > self.best_width: - self.write_indent() - self.write_indicator(':', True) - self.states.append(self.expect_flow_mapping_key) - self.expect_node(mapping=True) - - # Block sequence handlers. - - def expect_block_sequence(self): - indentless = (self.mapping_context and not self.indention) - self.increase_indent(flow=False, indentless=indentless) - self.state = self.expect_first_block_sequence_item - - def expect_first_block_sequence_item(self): - return self.expect_block_sequence_item(first=True) - - def expect_block_sequence_item(self, first=False): - if not first and isinstance(self.event, SequenceEndEvent): - self.indent = self.indents.pop() - self.state = self.states.pop() - else: - self.write_indent() - self.write_indicator('-', True, indention=True) - self.states.append(self.expect_block_sequence_item) - self.expect_node(sequence=True) - - # Block mapping handlers. - - def expect_block_mapping(self): - self.increase_indent(flow=False) - self.state = self.expect_first_block_mapping_key - - def expect_first_block_mapping_key(self): - return self.expect_block_mapping_key(first=True) - - def expect_block_mapping_key(self, first=False): - if not first and isinstance(self.event, MappingEndEvent): - self.indent = self.indents.pop() - self.state = self.states.pop() - else: - self.write_indent() - if self.check_simple_key(): - self.states.append(self.expect_block_mapping_simple_value) - self.expect_node(mapping=True, simple_key=True) - else: - self.write_indicator('?', True, indention=True) - self.states.append(self.expect_block_mapping_value) - self.expect_node(mapping=True) - - def expect_block_mapping_simple_value(self): - self.write_indicator(':', False) - self.states.append(self.expect_block_mapping_key) - self.expect_node(mapping=True) - - def expect_block_mapping_value(self): - self.write_indent() - self.write_indicator(':', True, indention=True) - self.states.append(self.expect_block_mapping_key) - self.expect_node(mapping=True) - - # Checkers. - - def check_empty_sequence(self): - return (isinstance(self.event, SequenceStartEvent) and self.events - and isinstance(self.events[0], SequenceEndEvent)) - - def check_empty_mapping(self): - return (isinstance(self.event, MappingStartEvent) and self.events - and isinstance(self.events[0], MappingEndEvent)) - - def check_empty_document(self): - if not isinstance(self.event, DocumentStartEvent) or not self.events: - return False - event = self.events[0] - return (isinstance(event, ScalarEvent) and event.anchor is None - and event.tag is None and event.implicit and event.value == '') - - def check_simple_key(self): - length = 0 - if isinstance(self.event, NodeEvent) and self.event.anchor is not None: - if self.prepared_anchor is None: - self.prepared_anchor = self.prepare_anchor(self.event.anchor) - length += len(self.prepared_anchor) - if isinstance(self.event, (ScalarEvent, CollectionStartEvent)) \ - and self.event.tag is not None: - if self.prepared_tag is None: - self.prepared_tag = self.prepare_tag(self.event.tag) - length += len(self.prepared_tag) - if isinstance(self.event, ScalarEvent): - if self.analysis is None: - self.analysis = self.analyze_scalar(self.event.value) - length += len(self.analysis.scalar) - return (length < 128 and (isinstance(self.event, AliasEvent) - or (isinstance(self.event, ScalarEvent) - and not self.analysis.empty and not self.analysis.multiline) - or self.check_empty_sequence() or self.check_empty_mapping())) - - # Anchor, Tag, and Scalar processors. - - def process_anchor(self, indicator): - if self.event.anchor is None: - self.prepared_anchor = None - return - if self.prepared_anchor is None: - self.prepared_anchor = self.prepare_anchor(self.event.anchor) - if self.prepared_anchor: - self.write_indicator(indicator+self.prepared_anchor, True) - self.prepared_anchor = None - - def process_tag(self): - tag = self.event.tag - if isinstance(self.event, ScalarEvent): - if self.style is None: - self.style = self.choose_scalar_style() - if ((not self.canonical or tag is None) and - ((self.style == '' and self.event.implicit[0]) - or (self.style != '' and self.event.implicit[1]))): - self.prepared_tag = None - return - if self.event.implicit[0] and tag is None: - tag = '!' - self.prepared_tag = None - else: - if (not self.canonical or tag is None) and self.event.implicit: - self.prepared_tag = None - return - if tag is None: - raise EmitterError("tag is not specified") - if self.prepared_tag is None: - self.prepared_tag = self.prepare_tag(tag) - if self.prepared_tag: - self.write_indicator(self.prepared_tag, True) - self.prepared_tag = None - - def choose_scalar_style(self): - if self.analysis is None: - self.analysis = self.analyze_scalar(self.event.value) - if self.event.style == '"' or self.canonical: - return '"' - if not self.event.style and self.event.implicit[0]: - if (not (self.simple_key_context and - (self.analysis.empty or self.analysis.multiline)) - and (self.flow_level and self.analysis.allow_flow_plain - or (not self.flow_level and self.analysis.allow_block_plain))): - return '' - if self.event.style and self.event.style in '|>': - if (not self.flow_level and not self.simple_key_context - and self.analysis.allow_block): - return self.event.style - if not self.event.style or self.event.style == '\'': - if (self.analysis.allow_single_quoted and - not (self.simple_key_context and self.analysis.multiline)): - return '\'' - return '"' - - def process_scalar(self): - if self.analysis is None: - self.analysis = self.analyze_scalar(self.event.value) - if self.style is None: - self.style = self.choose_scalar_style() - split = (not self.simple_key_context) - #if self.analysis.multiline and split \ - # and (not self.style or self.style in '\'\"'): - # self.write_indent() - if self.style == '"': - self.write_double_quoted(self.analysis.scalar, split) - elif self.style == '\'': - self.write_single_quoted(self.analysis.scalar, split) - elif self.style == '>': - self.write_folded(self.analysis.scalar) - elif self.style == '|': - self.write_literal(self.analysis.scalar) - else: - self.write_plain(self.analysis.scalar, split) - self.analysis = None - self.style = None - - # Analyzers. - - def prepare_version(self, version): - major, minor = version - if major != 1: - raise EmitterError("unsupported YAML version: %d.%d" % (major, minor)) - return '%d.%d' % (major, minor) - - def prepare_tag_handle(self, handle): - if not handle: - raise EmitterError("tag handle must not be empty") - if handle[0] != '!' or handle[-1] != '!': - raise EmitterError("tag handle must start and end with '!': %r" % handle) - for ch in handle[1:-1]: - if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-_'): - raise EmitterError("invalid character %r in the tag handle: %r" - % (ch, handle)) - return handle - - def prepare_tag_prefix(self, prefix): - if not prefix: - raise EmitterError("tag prefix must not be empty") - chunks = [] - start = end = 0 - if prefix[0] == '!': - end = 1 - while end < len(prefix): - ch = prefix[end] - if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-;/?!:@&=+$,_.~*\'()[]': - end += 1 - else: - if start < end: - chunks.append(prefix[start:end]) - start = end = end+1 - data = ch.encode('utf-8') - for ch in data: - chunks.append('%%%02X' % ord(ch)) - if start < end: - chunks.append(prefix[start:end]) - return ''.join(chunks) - - def prepare_tag(self, tag): - if not tag: - raise EmitterError("tag must not be empty") - if tag == '!': - return tag - handle = None - suffix = tag - prefixes = sorted(self.tag_prefixes.keys()) - for prefix in prefixes: - if tag.startswith(prefix) \ - and (prefix == '!' or len(prefix) < len(tag)): - handle = self.tag_prefixes[prefix] - suffix = tag[len(prefix):] - chunks = [] - start = end = 0 - while end < len(suffix): - ch = suffix[end] - if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-;/?:@&=+$,_.~*\'()[]' \ - or (ch == '!' and handle != '!'): - end += 1 - else: - if start < end: - chunks.append(suffix[start:end]) - start = end = end+1 - data = ch.encode('utf-8') - for ch in data: - chunks.append('%%%02X' % ord(ch)) - if start < end: - chunks.append(suffix[start:end]) - suffix_text = ''.join(chunks) - if handle: - return '%s%s' % (handle, suffix_text) - else: - return '!<%s>' % suffix_text - - def prepare_anchor(self, anchor): - if not anchor: - raise EmitterError("anchor must not be empty") - for ch in anchor: - if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-_'): - raise EmitterError("invalid character %r in the anchor: %r" - % (ch, anchor)) - return anchor - - def analyze_scalar(self, scalar): - - # Empty scalar is a special case. - if not scalar: - return ScalarAnalysis(scalar=scalar, empty=True, multiline=False, - allow_flow_plain=False, allow_block_plain=True, - allow_single_quoted=True, allow_double_quoted=True, - allow_block=False) - - # Indicators and special characters. - block_indicators = False - flow_indicators = False - line_breaks = False - special_characters = False - - # Important whitespace combinations. - leading_space = False - leading_break = False - trailing_space = False - trailing_break = False - break_space = False - space_break = False - - # Check document indicators. - if scalar.startswith('---') or scalar.startswith('...'): - block_indicators = True - flow_indicators = True - - # First character or preceded by a whitespace. - preceeded_by_whitespace = True - - # Last character or followed by a whitespace. - followed_by_whitespace = (len(scalar) == 1 or - scalar[1] in '\0 \t\r\n\x85\u2028\u2029') - - # The previous character is a space. - previous_space = False - - # The previous character is a break. - previous_break = False - - index = 0 - while index < len(scalar): - ch = scalar[index] - - # Check for indicators. - if index == 0: - # Leading indicators are special characters. - if ch in '#,[]{}&*!|>\'\"%@`': - flow_indicators = True - block_indicators = True - if ch in '?:': - flow_indicators = True - if followed_by_whitespace: - block_indicators = True - if ch == '-' and followed_by_whitespace: - flow_indicators = True - block_indicators = True - else: - # Some indicators cannot appear within a scalar as well. - if ch in ',?[]{}': - flow_indicators = True - if ch == ':': - flow_indicators = True - if followed_by_whitespace: - block_indicators = True - if ch == '#' and preceeded_by_whitespace: - flow_indicators = True - block_indicators = True - - # Check for line breaks, special, and unicode characters. - if ch in '\n\x85\u2028\u2029': - line_breaks = True - if not (ch == '\n' or '\x20' <= ch <= '\x7E'): - if (ch == '\x85' or '\xA0' <= ch <= '\uD7FF' - or '\uE000' <= ch <= '\uFFFD') and ch != '\uFEFF': - unicode_characters = True - if not self.allow_unicode: - special_characters = True - else: - special_characters = True - - # Detect important whitespace combinations. - if ch == ' ': - if index == 0: - leading_space = True - if index == len(scalar)-1: - trailing_space = True - if previous_break: - break_space = True - previous_space = True - previous_break = False - elif ch in '\n\x85\u2028\u2029': - if index == 0: - leading_break = True - if index == len(scalar)-1: - trailing_break = True - if previous_space: - space_break = True - previous_space = False - previous_break = True - else: - previous_space = False - previous_break = False - - # Prepare for the next character. - index += 1 - preceeded_by_whitespace = (ch in '\0 \t\r\n\x85\u2028\u2029') - followed_by_whitespace = (index+1 >= len(scalar) or - scalar[index+1] in '\0 \t\r\n\x85\u2028\u2029') - - # Let's decide what styles are allowed. - allow_flow_plain = True - allow_block_plain = True - allow_single_quoted = True - allow_double_quoted = True - allow_block = True - - # Leading and trailing whitespaces are bad for plain scalars. - if (leading_space or leading_break - or trailing_space or trailing_break): - allow_flow_plain = allow_block_plain = False - - # We do not permit trailing spaces for block scalars. - if trailing_space: - allow_block = False - - # Spaces at the beginning of a new line are only acceptable for block - # scalars. - if break_space: - allow_flow_plain = allow_block_plain = allow_single_quoted = False - - # Spaces followed by breaks, as well as special character are only - # allowed for double quoted scalars. - if space_break or special_characters: - allow_flow_plain = allow_block_plain = \ - allow_single_quoted = allow_block = False - - # Although the plain scalar writer supports breaks, we never emit - # multiline plain scalars. - if line_breaks: - allow_flow_plain = allow_block_plain = False - - # Flow indicators are forbidden for flow plain scalars. - if flow_indicators: - allow_flow_plain = False - - # Block indicators are forbidden for block plain scalars. - if block_indicators: - allow_block_plain = False - - return ScalarAnalysis(scalar=scalar, - empty=False, multiline=line_breaks, - allow_flow_plain=allow_flow_plain, - allow_block_plain=allow_block_plain, - allow_single_quoted=allow_single_quoted, - allow_double_quoted=allow_double_quoted, - allow_block=allow_block) - - # Writers. - - def flush_stream(self): - if hasattr(self.stream, 'flush'): - self.stream.flush() - - def write_stream_start(self): - # Write BOM if needed. - if self.encoding and self.encoding.startswith('utf-16'): - self.stream.write('\uFEFF'.encode(self.encoding)) - - def write_stream_end(self): - self.flush_stream() - - def write_indicator(self, indicator, need_whitespace, - whitespace=False, indention=False): - if self.whitespace or not need_whitespace: - data = indicator - else: - data = ' '+indicator - self.whitespace = whitespace - self.indention = self.indention and indention - self.column += len(data) - self.open_ended = False - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - - def write_indent(self): - indent = self.indent or 0 - if not self.indention or self.column > indent \ - or (self.column == indent and not self.whitespace): - self.write_line_break() - if self.column < indent: - self.whitespace = True - data = ' '*(indent-self.column) - self.column = indent - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - - def write_line_break(self, data=None): - if data is None: - data = self.best_line_break - self.whitespace = True - self.indention = True - self.line += 1 - self.column = 0 - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - - def write_version_directive(self, version_text): - data = '%%YAML %s' % version_text - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - self.write_line_break() - - def write_tag_directive(self, handle_text, prefix_text): - data = '%%TAG %s %s' % (handle_text, prefix_text) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - self.write_line_break() - - # Scalar streams. - - def write_single_quoted(self, text, split=True): - self.write_indicator('\'', True) - spaces = False - breaks = False - start = end = 0 - while end <= len(text): - ch = None - if end < len(text): - ch = text[end] - if spaces: - if ch is None or ch != ' ': - if start+1 == end and self.column > self.best_width and split \ - and start != 0 and end != len(text): - self.write_indent() - else: - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end - elif breaks: - if ch is None or ch not in '\n\x85\u2028\u2029': - if text[start] == '\n': - self.write_line_break() - for br in text[start:end]: - if br == '\n': - self.write_line_break() - else: - self.write_line_break(br) - self.write_indent() - start = end - else: - if ch is None or ch in ' \n\x85\u2028\u2029' or ch == '\'': - if start < end: - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end - if ch == '\'': - data = '\'\'' - self.column += 2 - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end + 1 - if ch is not None: - spaces = (ch == ' ') - breaks = (ch in '\n\x85\u2028\u2029') - end += 1 - self.write_indicator('\'', False) - - ESCAPE_REPLACEMENTS = { - '\0': '0', - '\x07': 'a', - '\x08': 'b', - '\x09': 't', - '\x0A': 'n', - '\x0B': 'v', - '\x0C': 'f', - '\x0D': 'r', - '\x1B': 'e', - '\"': '\"', - '\\': '\\', - '\x85': 'N', - '\xA0': '_', - '\u2028': 'L', - '\u2029': 'P', - } - - def write_double_quoted(self, text, split=True): - self.write_indicator('"', True) - start = end = 0 - while end <= len(text): - ch = None - if end < len(text): - ch = text[end] - if ch is None or ch in '"\\\x85\u2028\u2029\uFEFF' \ - or not ('\x20' <= ch <= '\x7E' - or (self.allow_unicode - and ('\xA0' <= ch <= '\uD7FF' - or '\uE000' <= ch <= '\uFFFD'))): - if start < end: - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end - if ch is not None: - if ch in self.ESCAPE_REPLACEMENTS: - data = '\\'+self.ESCAPE_REPLACEMENTS[ch] - elif ch <= '\xFF': - data = '\\x%02X' % ord(ch) - elif ch <= '\uFFFF': - data = '\\u%04X' % ord(ch) - else: - data = '\\U%08X' % ord(ch) - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end+1 - if 0 < end < len(text)-1 and (ch == ' ' or start >= end) \ - and self.column+(end-start) > self.best_width and split: - data = text[start:end]+'\\' - if start < end: - start = end - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - self.write_indent() - self.whitespace = False - self.indention = False - if text[start] == ' ': - data = '\\' - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - end += 1 - self.write_indicator('"', False) - - def determine_block_hints(self, text): - hints = '' - if text: - if text[0] in ' \n\x85\u2028\u2029': - hints += str(self.best_indent) - if text[-1] not in '\n\x85\u2028\u2029': - hints += '-' - elif len(text) == 1 or text[-2] in '\n\x85\u2028\u2029': - hints += '+' - return hints - - def write_folded(self, text): - hints = self.determine_block_hints(text) - self.write_indicator('>'+hints, True) - if hints[-1:] == '+': - self.open_ended = True - self.write_line_break() - leading_space = True - spaces = False - breaks = True - start = end = 0 - while end <= len(text): - ch = None - if end < len(text): - ch = text[end] - if breaks: - if ch is None or ch not in '\n\x85\u2028\u2029': - if not leading_space and ch is not None and ch != ' ' \ - and text[start] == '\n': - self.write_line_break() - leading_space = (ch == ' ') - for br in text[start:end]: - if br == '\n': - self.write_line_break() - else: - self.write_line_break(br) - if ch is not None: - self.write_indent() - start = end - elif spaces: - if ch != ' ': - if start+1 == end and self.column > self.best_width: - self.write_indent() - else: - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end - else: - if ch is None or ch in ' \n\x85\u2028\u2029': - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - if ch is None: - self.write_line_break() - start = end - if ch is not None: - breaks = (ch in '\n\x85\u2028\u2029') - spaces = (ch == ' ') - end += 1 - - def write_literal(self, text): - hints = self.determine_block_hints(text) - self.write_indicator('|'+hints, True) - if hints[-1:] == '+': - self.open_ended = True - self.write_line_break() - breaks = True - start = end = 0 - while end <= len(text): - ch = None - if end < len(text): - ch = text[end] - if breaks: - if ch is None or ch not in '\n\x85\u2028\u2029': - for br in text[start:end]: - if br == '\n': - self.write_line_break() - else: - self.write_line_break(br) - if ch is not None: - self.write_indent() - start = end - else: - if ch is None or ch in '\n\x85\u2028\u2029': - data = text[start:end] - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - if ch is None: - self.write_line_break() - start = end - if ch is not None: - breaks = (ch in '\n\x85\u2028\u2029') - end += 1 - - def write_plain(self, text, split=True): - if self.root_context: - self.open_ended = True - if not text: - return - if not self.whitespace: - data = ' ' - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - self.whitespace = False - self.indention = False - spaces = False - breaks = False - start = end = 0 - while end <= len(text): - ch = None - if end < len(text): - ch = text[end] - if spaces: - if ch != ' ': - if start+1 == end and self.column > self.best_width and split: - self.write_indent() - self.whitespace = False - self.indention = False - else: - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end - elif breaks: - if ch not in '\n\x85\u2028\u2029': - if text[start] == '\n': - self.write_line_break() - for br in text[start:end]: - if br == '\n': - self.write_line_break() - else: - self.write_line_break(br) - self.write_indent() - self.whitespace = False - self.indention = False - start = end - else: - if ch is None or ch in ' \n\x85\u2028\u2029': - data = text[start:end] - self.column += len(data) - if self.encoding: - data = data.encode(self.encoding) - self.stream.write(data) - start = end - if ch is not None: - spaces = (ch == ' ') - breaks = (ch in '\n\x85\u2028\u2029') - end += 1 - diff --git a/venv/lib/python3.6/site-packages/yaml/error.py b/venv/lib/python3.6/site-packages/yaml/error.py deleted file mode 100644 index b796b4d..0000000 --- a/venv/lib/python3.6/site-packages/yaml/error.py +++ /dev/null @@ -1,75 +0,0 @@ - -__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError'] - -class Mark: - - def __init__(self, name, index, line, column, buffer, pointer): - self.name = name - self.index = index - self.line = line - self.column = column - self.buffer = buffer - self.pointer = pointer - - def get_snippet(self, indent=4, max_length=75): - if self.buffer is None: - return None - head = '' - start = self.pointer - while start > 0 and self.buffer[start-1] not in '\0\r\n\x85\u2028\u2029': - start -= 1 - if self.pointer-start > max_length/2-1: - head = ' ... ' - start += 5 - break - tail = '' - end = self.pointer - while end < len(self.buffer) and self.buffer[end] not in '\0\r\n\x85\u2028\u2029': - end += 1 - if end-self.pointer > max_length/2-1: - tail = ' ... ' - end -= 5 - break - snippet = self.buffer[start:end] - return ' '*indent + head + snippet + tail + '\n' \ - + ' '*(indent+self.pointer-start+len(head)) + '^' - - def __str__(self): - snippet = self.get_snippet() - where = " in \"%s\", line %d, column %d" \ - % (self.name, self.line+1, self.column+1) - if snippet is not None: - where += ":\n"+snippet - return where - -class YAMLError(Exception): - pass - -class MarkedYAMLError(YAMLError): - - def __init__(self, context=None, context_mark=None, - problem=None, problem_mark=None, note=None): - self.context = context - self.context_mark = context_mark - self.problem = problem - self.problem_mark = problem_mark - self.note = note - - def __str__(self): - lines = [] - if self.context is not None: - lines.append(self.context) - if self.context_mark is not None \ - and (self.problem is None or self.problem_mark is None - or self.context_mark.name != self.problem_mark.name - or self.context_mark.line != self.problem_mark.line - or self.context_mark.column != self.problem_mark.column): - lines.append(str(self.context_mark)) - if self.problem is not None: - lines.append(self.problem) - if self.problem_mark is not None: - lines.append(str(self.problem_mark)) - if self.note is not None: - lines.append(self.note) - return '\n'.join(lines) - diff --git a/venv/lib/python3.6/site-packages/yaml/events.py b/venv/lib/python3.6/site-packages/yaml/events.py deleted file mode 100644 index f79ad38..0000000 --- a/venv/lib/python3.6/site-packages/yaml/events.py +++ /dev/null @@ -1,86 +0,0 @@ - -# Abstract classes. - -class Event(object): - def __init__(self, start_mark=None, end_mark=None): - self.start_mark = start_mark - self.end_mark = end_mark - def __repr__(self): - attributes = [key for key in ['anchor', 'tag', 'implicit', 'value'] - if hasattr(self, key)] - arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) - for key in attributes]) - return '%s(%s)' % (self.__class__.__name__, arguments) - -class NodeEvent(Event): - def __init__(self, anchor, start_mark=None, end_mark=None): - self.anchor = anchor - self.start_mark = start_mark - self.end_mark = end_mark - -class CollectionStartEvent(NodeEvent): - def __init__(self, anchor, tag, implicit, start_mark=None, end_mark=None, - flow_style=None): - self.anchor = anchor - self.tag = tag - self.implicit = implicit - self.start_mark = start_mark - self.end_mark = end_mark - self.flow_style = flow_style - -class CollectionEndEvent(Event): - pass - -# Implementations. - -class StreamStartEvent(Event): - def __init__(self, start_mark=None, end_mark=None, encoding=None): - self.start_mark = start_mark - self.end_mark = end_mark - self.encoding = encoding - -class StreamEndEvent(Event): - pass - -class DocumentStartEvent(Event): - def __init__(self, start_mark=None, end_mark=None, - explicit=None, version=None, tags=None): - self.start_mark = start_mark - self.end_mark = end_mark - self.explicit = explicit - self.version = version - self.tags = tags - -class DocumentEndEvent(Event): - def __init__(self, start_mark=None, end_mark=None, - explicit=None): - self.start_mark = start_mark - self.end_mark = end_mark - self.explicit = explicit - -class AliasEvent(NodeEvent): - pass - -class ScalarEvent(NodeEvent): - def __init__(self, anchor, tag, implicit, value, - start_mark=None, end_mark=None, style=None): - self.anchor = anchor - self.tag = tag - self.implicit = implicit - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - self.style = style - -class SequenceStartEvent(CollectionStartEvent): - pass - -class SequenceEndEvent(CollectionEndEvent): - pass - -class MappingStartEvent(CollectionStartEvent): - pass - -class MappingEndEvent(CollectionEndEvent): - pass - diff --git a/venv/lib/python3.6/site-packages/yaml/loader.py b/venv/lib/python3.6/site-packages/yaml/loader.py deleted file mode 100644 index 08c8f01..0000000 --- a/venv/lib/python3.6/site-packages/yaml/loader.py +++ /dev/null @@ -1,40 +0,0 @@ - -__all__ = ['BaseLoader', 'SafeLoader', 'Loader'] - -from .reader import * -from .scanner import * -from .parser import * -from .composer import * -from .constructor import * -from .resolver import * - -class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver): - - def __init__(self, stream): - Reader.__init__(self, stream) - Scanner.__init__(self) - Parser.__init__(self) - Composer.__init__(self) - BaseConstructor.__init__(self) - BaseResolver.__init__(self) - -class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver): - - def __init__(self, stream): - Reader.__init__(self, stream) - Scanner.__init__(self) - Parser.__init__(self) - Composer.__init__(self) - SafeConstructor.__init__(self) - Resolver.__init__(self) - -class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver): - - def __init__(self, stream): - Reader.__init__(self, stream) - Scanner.__init__(self) - Parser.__init__(self) - Composer.__init__(self) - Constructor.__init__(self) - Resolver.__init__(self) - diff --git a/venv/lib/python3.6/site-packages/yaml/nodes.py b/venv/lib/python3.6/site-packages/yaml/nodes.py deleted file mode 100644 index c4f070c..0000000 --- a/venv/lib/python3.6/site-packages/yaml/nodes.py +++ /dev/null @@ -1,49 +0,0 @@ - -class Node(object): - def __init__(self, tag, value, start_mark, end_mark): - self.tag = tag - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - def __repr__(self): - value = self.value - #if isinstance(value, list): - # if len(value) == 0: - # value = '<empty>' - # elif len(value) == 1: - # value = '<1 item>' - # else: - # value = '<%d items>' % len(value) - #else: - # if len(value) > 75: - # value = repr(value[:70]+u' ... ') - # else: - # value = repr(value) - value = repr(value) - return '%s(tag=%r, value=%s)' % (self.__class__.__name__, self.tag, value) - -class ScalarNode(Node): - id = 'scalar' - def __init__(self, tag, value, - start_mark=None, end_mark=None, style=None): - self.tag = tag - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - self.style = style - -class CollectionNode(Node): - def __init__(self, tag, value, - start_mark=None, end_mark=None, flow_style=None): - self.tag = tag - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - self.flow_style = flow_style - -class SequenceNode(CollectionNode): - id = 'sequence' - -class MappingNode(CollectionNode): - id = 'mapping' - diff --git a/venv/lib/python3.6/site-packages/yaml/parser.py b/venv/lib/python3.6/site-packages/yaml/parser.py deleted file mode 100644 index 13a5995..0000000 --- a/venv/lib/python3.6/site-packages/yaml/parser.py +++ /dev/null @@ -1,589 +0,0 @@ - -# The following YAML grammar is LL(1) and is parsed by a recursive descent -# parser. -# -# stream ::= STREAM-START implicit_document? explicit_document* STREAM-END -# implicit_document ::= block_node DOCUMENT-END* -# explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* -# block_node_or_indentless_sequence ::= -# ALIAS -# | properties (block_content | indentless_block_sequence)? -# | block_content -# | indentless_block_sequence -# block_node ::= ALIAS -# | properties block_content? -# | block_content -# flow_node ::= ALIAS -# | properties flow_content? -# | flow_content -# properties ::= TAG ANCHOR? | ANCHOR TAG? -# block_content ::= block_collection | flow_collection | SCALAR -# flow_content ::= flow_collection | SCALAR -# block_collection ::= block_sequence | block_mapping -# flow_collection ::= flow_sequence | flow_mapping -# block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END -# indentless_sequence ::= (BLOCK-ENTRY block_node?)+ -# block_mapping ::= BLOCK-MAPPING_START -# ((KEY block_node_or_indentless_sequence?)? -# (VALUE block_node_or_indentless_sequence?)?)* -# BLOCK-END -# flow_sequence ::= FLOW-SEQUENCE-START -# (flow_sequence_entry FLOW-ENTRY)* -# flow_sequence_entry? -# FLOW-SEQUENCE-END -# flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -# flow_mapping ::= FLOW-MAPPING-START -# (flow_mapping_entry FLOW-ENTRY)* -# flow_mapping_entry? -# FLOW-MAPPING-END -# flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? -# -# FIRST sets: -# -# stream: { STREAM-START } -# explicit_document: { DIRECTIVE DOCUMENT-START } -# implicit_document: FIRST(block_node) -# block_node: { ALIAS TAG ANCHOR SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START } -# flow_node: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START } -# block_content: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR } -# flow_content: { FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR } -# block_collection: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START } -# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START } -# block_sequence: { BLOCK-SEQUENCE-START } -# block_mapping: { BLOCK-MAPPING-START } -# block_node_or_indentless_sequence: { ALIAS ANCHOR TAG SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START BLOCK-ENTRY } -# indentless_sequence: { ENTRY } -# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START } -# flow_sequence: { FLOW-SEQUENCE-START } -# flow_mapping: { FLOW-MAPPING-START } -# flow_sequence_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY } -# flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY } - -__all__ = ['Parser', 'ParserError'] - -from .error import MarkedYAMLError -from .tokens import * -from .events import * -from .scanner import * - -class ParserError(MarkedYAMLError): - pass - -class Parser: - # Since writing a recursive-descendant parser is a straightforward task, we - # do not give many comments here. - - DEFAULT_TAGS = { - '!': '!', - '!!': 'tag:yaml.org,2002:', - } - - def __init__(self): - self.current_event = None - self.yaml_version = None - self.tag_handles = {} - self.states = [] - self.marks = [] - self.state = self.parse_stream_start - - def dispose(self): - # Reset the state attributes (to clear self-references) - self.states = [] - self.state = None - - def check_event(self, *choices): - # Check the type of the next event. - if self.current_event is None: - if self.state: - self.current_event = self.state() - if self.current_event is not None: - if not choices: - return True - for choice in choices: - if isinstance(self.current_event, choice): - return True - return False - - def peek_event(self): - # Get the next event. - if self.current_event is None: - if self.state: - self.current_event = self.state() - return self.current_event - - def get_event(self): - # Get the next event and proceed further. - if self.current_event is None: - if self.state: - self.current_event = self.state() - value = self.current_event - self.current_event = None - return value - - # stream ::= STREAM-START implicit_document? explicit_document* STREAM-END - # implicit_document ::= block_node DOCUMENT-END* - # explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END* - - def parse_stream_start(self): - - # Parse the stream start. - token = self.get_token() - event = StreamStartEvent(token.start_mark, token.end_mark, - encoding=token.encoding) - - # Prepare the next state. - self.state = self.parse_implicit_document_start - - return event - - def parse_implicit_document_start(self): - - # Parse an implicit document. - if not self.check_token(DirectiveToken, DocumentStartToken, - StreamEndToken): - self.tag_handles = self.DEFAULT_TAGS - token = self.peek_token() - start_mark = end_mark = token.start_mark - event = DocumentStartEvent(start_mark, end_mark, - explicit=False) - - # Prepare the next state. - self.states.append(self.parse_document_end) - self.state = self.parse_block_node - - return event - - else: - return self.parse_document_start() - - def parse_document_start(self): - - # Parse any extra document end indicators. - while self.check_token(DocumentEndToken): - self.get_token() - - # Parse an explicit document. - if not self.check_token(StreamEndToken): - token = self.peek_token() - start_mark = token.start_mark - version, tags = self.process_directives() - if not self.check_token(DocumentStartToken): - raise ParserError(None, None, - "expected '<document start>', but found %r" - % self.peek_token().id, - self.peek_token().start_mark) - token = self.get_token() - end_mark = token.end_mark - event = DocumentStartEvent(start_mark, end_mark, - explicit=True, version=version, tags=tags) - self.states.append(self.parse_document_end) - self.state = self.parse_document_content - else: - # Parse the end of the stream. - token = self.get_token() - event = StreamEndEvent(token.start_mark, token.end_mark) - assert not self.states - assert not self.marks - self.state = None - return event - - def parse_document_end(self): - - # Parse the document end. - token = self.peek_token() - start_mark = end_mark = token.start_mark - explicit = False - if self.check_token(DocumentEndToken): - token = self.get_token() - end_mark = token.end_mark - explicit = True - event = DocumentEndEvent(start_mark, end_mark, - explicit=explicit) - - # Prepare the next state. - self.state = self.parse_document_start - - return event - - def parse_document_content(self): - if self.check_token(DirectiveToken, - DocumentStartToken, DocumentEndToken, StreamEndToken): - event = self.process_empty_scalar(self.peek_token().start_mark) - self.state = self.states.pop() - return event - else: - return self.parse_block_node() - - def process_directives(self): - self.yaml_version = None - self.tag_handles = {} - while self.check_token(DirectiveToken): - token = self.get_token() - if token.name == 'YAML': - if self.yaml_version is not None: - raise ParserError(None, None, - "found duplicate YAML directive", token.start_mark) - major, minor = token.value - if major != 1: - raise ParserError(None, None, - "found incompatible YAML document (version 1.* is required)", - token.start_mark) - self.yaml_version = token.value - elif token.name == 'TAG': - handle, prefix = token.value - if handle in self.tag_handles: - raise ParserError(None, None, - "duplicate tag handle %r" % handle, - token.start_mark) - self.tag_handles[handle] = prefix - if self.tag_handles: - value = self.yaml_version, self.tag_handles.copy() - else: - value = self.yaml_version, None - for key in self.DEFAULT_TAGS: - if key not in self.tag_handles: - self.tag_handles[key] = self.DEFAULT_TAGS[key] - return value - - # block_node_or_indentless_sequence ::= ALIAS - # | properties (block_content | indentless_block_sequence)? - # | block_content - # | indentless_block_sequence - # block_node ::= ALIAS - # | properties block_content? - # | block_content - # flow_node ::= ALIAS - # | properties flow_content? - # | flow_content - # properties ::= TAG ANCHOR? | ANCHOR TAG? - # block_content ::= block_collection | flow_collection | SCALAR - # flow_content ::= flow_collection | SCALAR - # block_collection ::= block_sequence | block_mapping - # flow_collection ::= flow_sequence | flow_mapping - - def parse_block_node(self): - return self.parse_node(block=True) - - def parse_flow_node(self): - return self.parse_node() - - def parse_block_node_or_indentless_sequence(self): - return self.parse_node(block=True, indentless_sequence=True) - - def parse_node(self, block=False, indentless_sequence=False): - if self.check_token(AliasToken): - token = self.get_token() - event = AliasEvent(token.value, token.start_mark, token.end_mark) - self.state = self.states.pop() - else: - anchor = None - tag = None - start_mark = end_mark = tag_mark = None - if self.check_token(AnchorToken): - token = self.get_token() - start_mark = token.start_mark - end_mark = token.end_mark - anchor = token.value - if self.check_token(TagToken): - token = self.get_token() - tag_mark = token.start_mark - end_mark = token.end_mark - tag = token.value - elif self.check_token(TagToken): - token = self.get_token() - start_mark = tag_mark = token.start_mark - end_mark = token.end_mark - tag = token.value - if self.check_token(AnchorToken): - token = self.get_token() - end_mark = token.end_mark - anchor = token.value - if tag is not None: - handle, suffix = tag - if handle is not None: - if handle not in self.tag_handles: - raise ParserError("while parsing a node", start_mark, - "found undefined tag handle %r" % handle, - tag_mark) - tag = self.tag_handles[handle]+suffix - else: - tag = suffix - #if tag == '!': - # raise ParserError("while parsing a node", start_mark, - # "found non-specific tag '!'", tag_mark, - # "Please check 'http://pyyaml.org/wiki/YAMLNonSpecificTag' and share your opinion.") - if start_mark is None: - start_mark = end_mark = self.peek_token().start_mark - event = None - implicit = (tag is None or tag == '!') - if indentless_sequence and self.check_token(BlockEntryToken): - end_mark = self.peek_token().end_mark - event = SequenceStartEvent(anchor, tag, implicit, - start_mark, end_mark) - self.state = self.parse_indentless_sequence_entry - else: - if self.check_token(ScalarToken): - token = self.get_token() - end_mark = token.end_mark - if (token.plain and tag is None) or tag == '!': - implicit = (True, False) - elif tag is None: - implicit = (False, True) - else: - implicit = (False, False) - event = ScalarEvent(anchor, tag, implicit, token.value, - start_mark, end_mark, style=token.style) - self.state = self.states.pop() - elif self.check_token(FlowSequenceStartToken): - end_mark = self.peek_token().end_mark - event = SequenceStartEvent(anchor, tag, implicit, - start_mark, end_mark, flow_style=True) - self.state = self.parse_flow_sequence_first_entry - elif self.check_token(FlowMappingStartToken): - end_mark = self.peek_token().end_mark - event = MappingStartEvent(anchor, tag, implicit, - start_mark, end_mark, flow_style=True) - self.state = self.parse_flow_mapping_first_key - elif block and self.check_token(BlockSequenceStartToken): - end_mark = self.peek_token().start_mark - event = SequenceStartEvent(anchor, tag, implicit, - start_mark, end_mark, flow_style=False) - self.state = self.parse_block_sequence_first_entry - elif block and self.check_token(BlockMappingStartToken): - end_mark = self.peek_token().start_mark - event = MappingStartEvent(anchor, tag, implicit, - start_mark, end_mark, flow_style=False) - self.state = self.parse_block_mapping_first_key - elif anchor is not None or tag is not None: - # Empty scalars are allowed even if a tag or an anchor is - # specified. - event = ScalarEvent(anchor, tag, (implicit, False), '', - start_mark, end_mark) - self.state = self.states.pop() - else: - if block: - node = 'block' - else: - node = 'flow' - token = self.peek_token() - raise ParserError("while parsing a %s node" % node, start_mark, - "expected the node content, but found %r" % token.id, - token.start_mark) - return event - - # block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END - - def parse_block_sequence_first_entry(self): - token = self.get_token() - self.marks.append(token.start_mark) - return self.parse_block_sequence_entry() - - def parse_block_sequence_entry(self): - if self.check_token(BlockEntryToken): - token = self.get_token() - if not self.check_token(BlockEntryToken, BlockEndToken): - self.states.append(self.parse_block_sequence_entry) - return self.parse_block_node() - else: - self.state = self.parse_block_sequence_entry - return self.process_empty_scalar(token.end_mark) - if not self.check_token(BlockEndToken): - token = self.peek_token() - raise ParserError("while parsing a block collection", self.marks[-1], - "expected <block end>, but found %r" % token.id, token.start_mark) - token = self.get_token() - event = SequenceEndEvent(token.start_mark, token.end_mark) - self.state = self.states.pop() - self.marks.pop() - return event - - # indentless_sequence ::= (BLOCK-ENTRY block_node?)+ - - def parse_indentless_sequence_entry(self): - if self.check_token(BlockEntryToken): - token = self.get_token() - if not self.check_token(BlockEntryToken, - KeyToken, ValueToken, BlockEndToken): - self.states.append(self.parse_indentless_sequence_entry) - return self.parse_block_node() - else: - self.state = self.parse_indentless_sequence_entry - return self.process_empty_scalar(token.end_mark) - token = self.peek_token() - event = SequenceEndEvent(token.start_mark, token.start_mark) - self.state = self.states.pop() - return event - - # block_mapping ::= BLOCK-MAPPING_START - # ((KEY block_node_or_indentless_sequence?)? - # (VALUE block_node_or_indentless_sequence?)?)* - # BLOCK-END - - def parse_block_mapping_first_key(self): - token = self.get_token() - self.marks.append(token.start_mark) - return self.parse_block_mapping_key() - - def parse_block_mapping_key(self): - if self.check_token(KeyToken): - token = self.get_token() - if not self.check_token(KeyToken, ValueToken, BlockEndToken): - self.states.append(self.parse_block_mapping_value) - return self.parse_block_node_or_indentless_sequence() - else: - self.state = self.parse_block_mapping_value - return self.process_empty_scalar(token.end_mark) - if not self.check_token(BlockEndToken): - token = self.peek_token() - raise ParserError("while parsing a block mapping", self.marks[-1], - "expected <block end>, but found %r" % token.id, token.start_mark) - token = self.get_token() - event = MappingEndEvent(token.start_mark, token.end_mark) - self.state = self.states.pop() - self.marks.pop() - return event - - def parse_block_mapping_value(self): - if self.check_token(ValueToken): - token = self.get_token() - if not self.check_token(KeyToken, ValueToken, BlockEndToken): - self.states.append(self.parse_block_mapping_key) - return self.parse_block_node_or_indentless_sequence() - else: - self.state = self.parse_block_mapping_key - return self.process_empty_scalar(token.end_mark) - else: - self.state = self.parse_block_mapping_key - token = self.peek_token() - return self.process_empty_scalar(token.start_mark) - - # flow_sequence ::= FLOW-SEQUENCE-START - # (flow_sequence_entry FLOW-ENTRY)* - # flow_sequence_entry? - # FLOW-SEQUENCE-END - # flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - # - # Note that while production rules for both flow_sequence_entry and - # flow_mapping_entry are equal, their interpretations are different. - # For `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?` - # generate an inline mapping (set syntax). - - def parse_flow_sequence_first_entry(self): - token = self.get_token() - self.marks.append(token.start_mark) - return self.parse_flow_sequence_entry(first=True) - - def parse_flow_sequence_entry(self, first=False): - if not self.check_token(FlowSequenceEndToken): - if not first: - if self.check_token(FlowEntryToken): - self.get_token() - else: - token = self.peek_token() - raise ParserError("while parsing a flow sequence", self.marks[-1], - "expected ',' or ']', but got %r" % token.id, token.start_mark) - - if self.check_token(KeyToken): - token = self.peek_token() - event = MappingStartEvent(None, None, True, - token.start_mark, token.end_mark, - flow_style=True) - self.state = self.parse_flow_sequence_entry_mapping_key - return event - elif not self.check_token(FlowSequenceEndToken): - self.states.append(self.parse_flow_sequence_entry) - return self.parse_flow_node() - token = self.get_token() - event = SequenceEndEvent(token.start_mark, token.end_mark) - self.state = self.states.pop() - self.marks.pop() - return event - - def parse_flow_sequence_entry_mapping_key(self): - token = self.get_token() - if not self.check_token(ValueToken, - FlowEntryToken, FlowSequenceEndToken): - self.states.append(self.parse_flow_sequence_entry_mapping_value) - return self.parse_flow_node() - else: - self.state = self.parse_flow_sequence_entry_mapping_value - return self.process_empty_scalar(token.end_mark) - - def parse_flow_sequence_entry_mapping_value(self): - if self.check_token(ValueToken): - token = self.get_token() - if not self.check_token(FlowEntryToken, FlowSequenceEndToken): - self.states.append(self.parse_flow_sequence_entry_mapping_end) - return self.parse_flow_node() - else: - self.state = self.parse_flow_sequence_entry_mapping_end - return self.process_empty_scalar(token.end_mark) - else: - self.state = self.parse_flow_sequence_entry_mapping_end - token = self.peek_token() - return self.process_empty_scalar(token.start_mark) - - def parse_flow_sequence_entry_mapping_end(self): - self.state = self.parse_flow_sequence_entry - token = self.peek_token() - return MappingEndEvent(token.start_mark, token.start_mark) - - # flow_mapping ::= FLOW-MAPPING-START - # (flow_mapping_entry FLOW-ENTRY)* - # flow_mapping_entry? - # FLOW-MAPPING-END - # flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)? - - def parse_flow_mapping_first_key(self): - token = self.get_token() - self.marks.append(token.start_mark) - return self.parse_flow_mapping_key(first=True) - - def parse_flow_mapping_key(self, first=False): - if not self.check_token(FlowMappingEndToken): - if not first: - if self.check_token(FlowEntryToken): - self.get_token() - else: - token = self.peek_token() - raise ParserError("while parsing a flow mapping", self.marks[-1], - "expected ',' or '}', but got %r" % token.id, token.start_mark) - if self.check_token(KeyToken): - token = self.get_token() - if not self.check_token(ValueToken, - FlowEntryToken, FlowMappingEndToken): - self.states.append(self.parse_flow_mapping_value) - return self.parse_flow_node() - else: - self.state = self.parse_flow_mapping_value - return self.process_empty_scalar(token.end_mark) - elif not self.check_token(FlowMappingEndToken): - self.states.append(self.parse_flow_mapping_empty_value) - return self.parse_flow_node() - token = self.get_token() - event = MappingEndEvent(token.start_mark, token.end_mark) - self.state = self.states.pop() - self.marks.pop() - return event - - def parse_flow_mapping_value(self): - if self.check_token(ValueToken): - token = self.get_token() - if not self.check_token(FlowEntryToken, FlowMappingEndToken): - self.states.append(self.parse_flow_mapping_key) - return self.parse_flow_node() - else: - self.state = self.parse_flow_mapping_key - return self.process_empty_scalar(token.end_mark) - else: - self.state = self.parse_flow_mapping_key - token = self.peek_token() - return self.process_empty_scalar(token.start_mark) - - def parse_flow_mapping_empty_value(self): - self.state = self.parse_flow_mapping_key - return self.process_empty_scalar(self.peek_token().start_mark) - - def process_empty_scalar(self, mark): - return ScalarEvent(None, None, (True, False), '', mark, mark) - diff --git a/venv/lib/python3.6/site-packages/yaml/reader.py b/venv/lib/python3.6/site-packages/yaml/reader.py deleted file mode 100644 index f70e920..0000000 --- a/venv/lib/python3.6/site-packages/yaml/reader.py +++ /dev/null @@ -1,192 +0,0 @@ -# This module contains abstractions for the input stream. You don't have to -# looks further, there are no pretty code. -# -# We define two classes here. -# -# Mark(source, line, column) -# It's just a record and its only use is producing nice error messages. -# Parser does not use it for any other purposes. -# -# Reader(source, data) -# Reader determines the encoding of `data` and converts it to unicode. -# Reader provides the following methods and attributes: -# reader.peek(length=1) - return the next `length` characters -# reader.forward(length=1) - move the current position to `length` characters. -# reader.index - the number of the current character. -# reader.line, stream.column - the line and the column of the current character. - -__all__ = ['Reader', 'ReaderError'] - -from .error import YAMLError, Mark - -import codecs, re - -class ReaderError(YAMLError): - - def __init__(self, name, position, character, encoding, reason): - self.name = name - self.character = character - self.position = position - self.encoding = encoding - self.reason = reason - - def __str__(self): - if isinstance(self.character, bytes): - return "'%s' codec can't decode byte #x%02x: %s\n" \ - " in \"%s\", position %d" \ - % (self.encoding, ord(self.character), self.reason, - self.name, self.position) - else: - return "unacceptable character #x%04x: %s\n" \ - " in \"%s\", position %d" \ - % (self.character, self.reason, - self.name, self.position) - -class Reader(object): - # Reader: - # - determines the data encoding and converts it to a unicode string, - # - checks if characters are in allowed range, - # - adds '\0' to the end. - - # Reader accepts - # - a `bytes` object, - # - a `str` object, - # - a file-like object with its `read` method returning `str`, - # - a file-like object with its `read` method returning `unicode`. - - # Yeah, it's ugly and slow. - - def __init__(self, stream): - self.name = None - self.stream = None - self.stream_pointer = 0 - self.eof = True - self.buffer = '' - self.pointer = 0 - self.raw_buffer = None - self.raw_decode = None - self.encoding = None - self.index = 0 - self.line = 0 - self.column = 0 - if isinstance(stream, str): - self.name = "<unicode string>" - self.check_printable(stream) - self.buffer = stream+'\0' - elif isinstance(stream, bytes): - self.name = "<byte string>" - self.raw_buffer = stream - self.determine_encoding() - else: - self.stream = stream - self.name = getattr(stream, 'name', "<file>") - self.eof = False - self.raw_buffer = None - self.determine_encoding() - - def peek(self, index=0): - try: - return self.buffer[self.pointer+index] - except IndexError: - self.update(index+1) - return self.buffer[self.pointer+index] - - def prefix(self, length=1): - if self.pointer+length >= len(self.buffer): - self.update(length) - return self.buffer[self.pointer:self.pointer+length] - - def forward(self, length=1): - if self.pointer+length+1 >= len(self.buffer): - self.update(length+1) - while length: - ch = self.buffer[self.pointer] - self.pointer += 1 - self.index += 1 - if ch in '\n\x85\u2028\u2029' \ - or (ch == '\r' and self.buffer[self.pointer] != '\n'): - self.line += 1 - self.column = 0 - elif ch != '\uFEFF': - self.column += 1 - length -= 1 - - def get_mark(self): - if self.stream is None: - return Mark(self.name, self.index, self.line, self.column, - self.buffer, self.pointer) - else: - return Mark(self.name, self.index, self.line, self.column, - None, None) - - def determine_encoding(self): - while not self.eof and (self.raw_buffer is None or len(self.raw_buffer) < 2): - self.update_raw() - if isinstance(self.raw_buffer, bytes): - if self.raw_buffer.startswith(codecs.BOM_UTF16_LE): - self.raw_decode = codecs.utf_16_le_decode - self.encoding = 'utf-16-le' - elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE): - self.raw_decode = codecs.utf_16_be_decode - self.encoding = 'utf-16-be' - else: - self.raw_decode = codecs.utf_8_decode - self.encoding = 'utf-8' - self.update(1) - - NON_PRINTABLE = re.compile('[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uD7FF\uE000-\uFFFD]') - def check_printable(self, data): - match = self.NON_PRINTABLE.search(data) - if match: - character = match.group() - position = self.index+(len(self.buffer)-self.pointer)+match.start() - raise ReaderError(self.name, position, ord(character), - 'unicode', "special characters are not allowed") - - def update(self, length): - if self.raw_buffer is None: - return - self.buffer = self.buffer[self.pointer:] - self.pointer = 0 - while len(self.buffer) < length: - if not self.eof: - self.update_raw() - if self.raw_decode is not None: - try: - data, converted = self.raw_decode(self.raw_buffer, - 'strict', self.eof) - except UnicodeDecodeError as exc: - character = self.raw_buffer[exc.start] - if self.stream is not None: - position = self.stream_pointer-len(self.raw_buffer)+exc.start - else: - position = exc.start - raise ReaderError(self.name, position, character, - exc.encoding, exc.reason) - else: - data = self.raw_buffer - converted = len(data) - self.check_printable(data) - self.buffer += data - self.raw_buffer = self.raw_buffer[converted:] - if self.eof: - self.buffer += '\0' - self.raw_buffer = None - break - - def update_raw(self, size=4096): - data = self.stream.read(size) - if self.raw_buffer is None: - self.raw_buffer = data - else: - self.raw_buffer += data - self.stream_pointer += len(data) - if not data: - self.eof = True - -#try: -# import psyco -# psyco.bind(Reader) -#except ImportError: -# pass - diff --git a/venv/lib/python3.6/site-packages/yaml/representer.py b/venv/lib/python3.6/site-packages/yaml/representer.py deleted file mode 100644 index b9e65c5..0000000 --- a/venv/lib/python3.6/site-packages/yaml/representer.py +++ /dev/null @@ -1,387 +0,0 @@ - -__all__ = ['BaseRepresenter', 'SafeRepresenter', 'Representer', - 'RepresenterError'] - -from .error import * -from .nodes import * - -import datetime, sys, copyreg, types, base64, collections - -class RepresenterError(YAMLError): - pass - -class BaseRepresenter: - - yaml_representers = {} - yaml_multi_representers = {} - - def __init__(self, default_style=None, default_flow_style=None): - self.default_style = default_style - self.default_flow_style = default_flow_style - self.represented_objects = {} - self.object_keeper = [] - self.alias_key = None - - def represent(self, data): - node = self.represent_data(data) - self.serialize(node) - self.represented_objects = {} - self.object_keeper = [] - self.alias_key = None - - def represent_data(self, data): - if self.ignore_aliases(data): - self.alias_key = None - else: - self.alias_key = id(data) - if self.alias_key is not None: - if self.alias_key in self.represented_objects: - node = self.represented_objects[self.alias_key] - #if node is None: - # raise RepresenterError("recursive objects are not allowed: %r" % data) - return node - #self.represented_objects[alias_key] = None - self.object_keeper.append(data) - data_types = type(data).__mro__ - if data_types[0] in self.yaml_representers: - node = self.yaml_representers[data_types[0]](self, data) - else: - for data_type in data_types: - if data_type in self.yaml_multi_representers: - node = self.yaml_multi_representers[data_type](self, data) - break - else: - if None in self.yaml_multi_representers: - node = self.yaml_multi_representers[None](self, data) - elif None in self.yaml_representers: - node = self.yaml_representers[None](self, data) - else: - node = ScalarNode(None, str(data)) - #if alias_key is not None: - # self.represented_objects[alias_key] = node - return node - - @classmethod - def add_representer(cls, data_type, representer): - if not 'yaml_representers' in cls.__dict__: - cls.yaml_representers = cls.yaml_representers.copy() - cls.yaml_representers[data_type] = representer - - @classmethod - def add_multi_representer(cls, data_type, representer): - if not 'yaml_multi_representers' in cls.__dict__: - cls.yaml_multi_representers = cls.yaml_multi_representers.copy() - cls.yaml_multi_representers[data_type] = representer - - def represent_scalar(self, tag, value, style=None): - if style is None: - style = self.default_style - node = ScalarNode(tag, value, style=style) - if self.alias_key is not None: - self.represented_objects[self.alias_key] = node - return node - - def represent_sequence(self, tag, sequence, flow_style=None): - value = [] - node = SequenceNode(tag, value, flow_style=flow_style) - if self.alias_key is not None: - self.represented_objects[self.alias_key] = node - best_style = True - for item in sequence: - node_item = self.represent_data(item) - if not (isinstance(node_item, ScalarNode) and not node_item.style): - best_style = False - value.append(node_item) - if flow_style is None: - if self.default_flow_style is not None: - node.flow_style = self.default_flow_style - else: - node.flow_style = best_style - return node - - def represent_mapping(self, tag, mapping, flow_style=None): - value = [] - node = MappingNode(tag, value, flow_style=flow_style) - if self.alias_key is not None: - self.represented_objects[self.alias_key] = node - best_style = True - if hasattr(mapping, 'items'): - mapping = list(mapping.items()) - try: - mapping = sorted(mapping) - except TypeError: - pass - for item_key, item_value in mapping: - node_key = self.represent_data(item_key) - node_value = self.represent_data(item_value) - if not (isinstance(node_key, ScalarNode) and not node_key.style): - best_style = False - if not (isinstance(node_value, ScalarNode) and not node_value.style): - best_style = False - value.append((node_key, node_value)) - if flow_style is None: - if self.default_flow_style is not None: - node.flow_style = self.default_flow_style - else: - node.flow_style = best_style - return node - - def ignore_aliases(self, data): - return False - -class SafeRepresenter(BaseRepresenter): - - def ignore_aliases(self, data): - if data is None: - return True - if isinstance(data, tuple) and data == (): - return True - if isinstance(data, (str, bytes, bool, int, float)): - return True - - def represent_none(self, data): - return self.represent_scalar('tag:yaml.org,2002:null', 'null') - - def represent_str(self, data): - return self.represent_scalar('tag:yaml.org,2002:str', data) - - def represent_binary(self, data): - if hasattr(base64, 'encodebytes'): - data = base64.encodebytes(data).decode('ascii') - else: - data = base64.encodestring(data).decode('ascii') - return self.represent_scalar('tag:yaml.org,2002:binary', data, style='|') - - def represent_bool(self, data): - if data: - value = 'true' - else: - value = 'false' - return self.represent_scalar('tag:yaml.org,2002:bool', value) - - def represent_int(self, data): - return self.represent_scalar('tag:yaml.org,2002:int', str(data)) - - inf_value = 1e300 - while repr(inf_value) != repr(inf_value*inf_value): - inf_value *= inf_value - - def represent_float(self, data): - if data != data or (data == 0.0 and data == 1.0): - value = '.nan' - elif data == self.inf_value: - value = '.inf' - elif data == -self.inf_value: - value = '-.inf' - else: - value = repr(data).lower() - # Note that in some cases `repr(data)` represents a float number - # without the decimal parts. For instance: - # >>> repr(1e17) - # '1e17' - # Unfortunately, this is not a valid float representation according - # to the definition of the `!!float` tag. We fix this by adding - # '.0' before the 'e' symbol. - if '.' not in value and 'e' in value: - value = value.replace('e', '.0e', 1) - return self.represent_scalar('tag:yaml.org,2002:float', value) - - def represent_list(self, data): - #pairs = (len(data) > 0 and isinstance(data, list)) - #if pairs: - # for item in data: - # if not isinstance(item, tuple) or len(item) != 2: - # pairs = False - # break - #if not pairs: - return self.represent_sequence('tag:yaml.org,2002:seq', data) - #value = [] - #for item_key, item_value in data: - # value.append(self.represent_mapping(u'tag:yaml.org,2002:map', - # [(item_key, item_value)])) - #return SequenceNode(u'tag:yaml.org,2002:pairs', value) - - def represent_dict(self, data): - return self.represent_mapping('tag:yaml.org,2002:map', data) - - def represent_set(self, data): - value = {} - for key in data: - value[key] = None - return self.represent_mapping('tag:yaml.org,2002:set', value) - - def represent_date(self, data): - value = data.isoformat() - return self.represent_scalar('tag:yaml.org,2002:timestamp', value) - - def represent_datetime(self, data): - value = data.isoformat(' ') - return self.represent_scalar('tag:yaml.org,2002:timestamp', value) - - def represent_yaml_object(self, tag, data, cls, flow_style=None): - if hasattr(data, '__getstate__'): - state = data.__getstate__() - else: - state = data.__dict__.copy() - return self.represent_mapping(tag, state, flow_style=flow_style) - - def represent_undefined(self, data): - raise RepresenterError("cannot represent an object: %s" % data) - -SafeRepresenter.add_representer(type(None), - SafeRepresenter.represent_none) - -SafeRepresenter.add_representer(str, - SafeRepresenter.represent_str) - -SafeRepresenter.add_representer(bytes, - SafeRepresenter.represent_binary) - -SafeRepresenter.add_representer(bool, - SafeRepresenter.represent_bool) - -SafeRepresenter.add_representer(int, - SafeRepresenter.represent_int) - -SafeRepresenter.add_representer(float, - SafeRepresenter.represent_float) - -SafeRepresenter.add_representer(list, - SafeRepresenter.represent_list) - -SafeRepresenter.add_representer(tuple, - SafeRepresenter.represent_list) - -SafeRepresenter.add_representer(dict, - SafeRepresenter.represent_dict) - -SafeRepresenter.add_representer(set, - SafeRepresenter.represent_set) - -SafeRepresenter.add_representer(datetime.date, - SafeRepresenter.represent_date) - -SafeRepresenter.add_representer(datetime.datetime, - SafeRepresenter.represent_datetime) - -SafeRepresenter.add_representer(None, - SafeRepresenter.represent_undefined) - -class Representer(SafeRepresenter): - - def represent_complex(self, data): - if data.imag == 0.0: - data = '%r' % data.real - elif data.real == 0.0: - data = '%rj' % data.imag - elif data.imag > 0: - data = '%r+%rj' % (data.real, data.imag) - else: - data = '%r%rj' % (data.real, data.imag) - return self.represent_scalar('tag:yaml.org,2002:python/complex', data) - - def represent_tuple(self, data): - return self.represent_sequence('tag:yaml.org,2002:python/tuple', data) - - def represent_name(self, data): - name = '%s.%s' % (data.__module__, data.__name__) - return self.represent_scalar('tag:yaml.org,2002:python/name:'+name, '') - - def represent_module(self, data): - return self.represent_scalar( - 'tag:yaml.org,2002:python/module:'+data.__name__, '') - - def represent_object(self, data): - # We use __reduce__ API to save the data. data.__reduce__ returns - # a tuple of length 2-5: - # (function, args, state, listitems, dictitems) - - # For reconstructing, we calls function(*args), then set its state, - # listitems, and dictitems if they are not None. - - # A special case is when function.__name__ == '__newobj__'. In this - # case we create the object with args[0].__new__(*args). - - # Another special case is when __reduce__ returns a string - we don't - # support it. - - # We produce a !!python/object, !!python/object/new or - # !!python/object/apply node. - - cls = type(data) - if cls in copyreg.dispatch_table: - reduce = copyreg.dispatch_table[cls](data) - elif hasattr(data, '__reduce_ex__'): - reduce = data.__reduce_ex__(2) - elif hasattr(data, '__reduce__'): - reduce = data.__reduce__() - else: - raise RepresenterError("cannot represent object: %r" % data) - reduce = (list(reduce)+[None]*5)[:5] - function, args, state, listitems, dictitems = reduce - args = list(args) - if state is None: - state = {} - if listitems is not None: - listitems = list(listitems) - if dictitems is not None: - dictitems = dict(dictitems) - if function.__name__ == '__newobj__': - function = args[0] - args = args[1:] - tag = 'tag:yaml.org,2002:python/object/new:' - newobj = True - else: - tag = 'tag:yaml.org,2002:python/object/apply:' - newobj = False - function_name = '%s.%s' % (function.__module__, function.__name__) - if not args and not listitems and not dictitems \ - and isinstance(state, dict) and newobj: - return self.represent_mapping( - 'tag:yaml.org,2002:python/object:'+function_name, state) - if not listitems and not dictitems \ - and isinstance(state, dict) and not state: - return self.represent_sequence(tag+function_name, args) - value = {} - if args: - value['args'] = args - if state or not isinstance(state, dict): - value['state'] = state - if listitems: - value['listitems'] = listitems - if dictitems: - value['dictitems'] = dictitems - return self.represent_mapping(tag+function_name, value) - - def represent_ordered_dict(self, data): - # Provide uniform representation across different Python versions. - data_type = type(data) - tag = 'tag:yaml.org,2002:python/object/apply:%s.%s' \ - % (data_type.__module__, data_type.__name__) - items = [[key, value] for key, value in data.items()] - return self.represent_sequence(tag, [items]) - -Representer.add_representer(complex, - Representer.represent_complex) - -Representer.add_representer(tuple, - Representer.represent_tuple) - -Representer.add_representer(type, - Representer.represent_name) - -Representer.add_representer(collections.OrderedDict, - Representer.represent_ordered_dict) - -Representer.add_representer(types.FunctionType, - Representer.represent_name) - -Representer.add_representer(types.BuiltinFunctionType, - Representer.represent_name) - -Representer.add_representer(types.ModuleType, - Representer.represent_module) - -Representer.add_multi_representer(object, - Representer.represent_object) - diff --git a/venv/lib/python3.6/site-packages/yaml/resolver.py b/venv/lib/python3.6/site-packages/yaml/resolver.py deleted file mode 100644 index 02b82e7..0000000 --- a/venv/lib/python3.6/site-packages/yaml/resolver.py +++ /dev/null @@ -1,227 +0,0 @@ - -__all__ = ['BaseResolver', 'Resolver'] - -from .error import * -from .nodes import * - -import re - -class ResolverError(YAMLError): - pass - -class BaseResolver: - - DEFAULT_SCALAR_TAG = 'tag:yaml.org,2002:str' - DEFAULT_SEQUENCE_TAG = 'tag:yaml.org,2002:seq' - DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map' - - yaml_implicit_resolvers = {} - yaml_path_resolvers = {} - - def __init__(self): - self.resolver_exact_paths = [] - self.resolver_prefix_paths = [] - - @classmethod - def add_implicit_resolver(cls, tag, regexp, first): - if not 'yaml_implicit_resolvers' in cls.__dict__: - implicit_resolvers = {} - for key in cls.yaml_implicit_resolvers: - implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:] - cls.yaml_implicit_resolvers = implicit_resolvers - if first is None: - first = [None] - for ch in first: - cls.yaml_implicit_resolvers.setdefault(ch, []).append((tag, regexp)) - - @classmethod - def add_path_resolver(cls, tag, path, kind=None): - # Note: `add_path_resolver` is experimental. The API could be changed. - # `new_path` is a pattern that is matched against the path from the - # root to the node that is being considered. `node_path` elements are - # tuples `(node_check, index_check)`. `node_check` is a node class: - # `ScalarNode`, `SequenceNode`, `MappingNode` or `None`. `None` - # matches any kind of a node. `index_check` could be `None`, a boolean - # value, a string value, or a number. `None` and `False` match against - # any _value_ of sequence and mapping nodes. `True` matches against - # any _key_ of a mapping node. A string `index_check` matches against - # a mapping value that corresponds to a scalar key which content is - # equal to the `index_check` value. An integer `index_check` matches - # against a sequence value with the index equal to `index_check`. - if not 'yaml_path_resolvers' in cls.__dict__: - cls.yaml_path_resolvers = cls.yaml_path_resolvers.copy() - new_path = [] - for element in path: - if isinstance(element, (list, tuple)): - if len(element) == 2: - node_check, index_check = element - elif len(element) == 1: - node_check = element[0] - index_check = True - else: - raise ResolverError("Invalid path element: %s" % element) - else: - node_check = None - index_check = element - if node_check is str: - node_check = ScalarNode - elif node_check is list: - node_check = SequenceNode - elif node_check is dict: - node_check = MappingNode - elif node_check not in [ScalarNode, SequenceNode, MappingNode] \ - and not isinstance(node_check, str) \ - and node_check is not None: - raise ResolverError("Invalid node checker: %s" % node_check) - if not isinstance(index_check, (str, int)) \ - and index_check is not None: - raise ResolverError("Invalid index checker: %s" % index_check) - new_path.append((node_check, index_check)) - if kind is str: - kind = ScalarNode - elif kind is list: - kind = SequenceNode - elif kind is dict: - kind = MappingNode - elif kind not in [ScalarNode, SequenceNode, MappingNode] \ - and kind is not None: - raise ResolverError("Invalid node kind: %s" % kind) - cls.yaml_path_resolvers[tuple(new_path), kind] = tag - - def descend_resolver(self, current_node, current_index): - if not self.yaml_path_resolvers: - return - exact_paths = {} - prefix_paths = [] - if current_node: - depth = len(self.resolver_prefix_paths) - for path, kind in self.resolver_prefix_paths[-1]: - if self.check_resolver_prefix(depth, path, kind, - current_node, current_index): - if len(path) > depth: - prefix_paths.append((path, kind)) - else: - exact_paths[kind] = self.yaml_path_resolvers[path, kind] - else: - for path, kind in self.yaml_path_resolvers: - if not path: - exact_paths[kind] = self.yaml_path_resolvers[path, kind] - else: - prefix_paths.append((path, kind)) - self.resolver_exact_paths.append(exact_paths) - self.resolver_prefix_paths.append(prefix_paths) - - def ascend_resolver(self): - if not self.yaml_path_resolvers: - return - self.resolver_exact_paths.pop() - self.resolver_prefix_paths.pop() - - def check_resolver_prefix(self, depth, path, kind, - current_node, current_index): - node_check, index_check = path[depth-1] - if isinstance(node_check, str): - if current_node.tag != node_check: - return - elif node_check is not None: - if not isinstance(current_node, node_check): - return - if index_check is True and current_index is not None: - return - if (index_check is False or index_check is None) \ - and current_index is None: - return - if isinstance(index_check, str): - if not (isinstance(current_index, ScalarNode) - and index_check == current_index.value): - return - elif isinstance(index_check, int) and not isinstance(index_check, bool): - if index_check != current_index: - return - return True - - def resolve(self, kind, value, implicit): - if kind is ScalarNode and implicit[0]: - if value == '': - resolvers = self.yaml_implicit_resolvers.get('', []) - else: - resolvers = self.yaml_implicit_resolvers.get(value[0], []) - resolvers += self.yaml_implicit_resolvers.get(None, []) - for tag, regexp in resolvers: - if regexp.match(value): - return tag - implicit = implicit[1] - if self.yaml_path_resolvers: - exact_paths = self.resolver_exact_paths[-1] - if kind in exact_paths: - return exact_paths[kind] - if None in exact_paths: - return exact_paths[None] - if kind is ScalarNode: - return self.DEFAULT_SCALAR_TAG - elif kind is SequenceNode: - return self.DEFAULT_SEQUENCE_TAG - elif kind is MappingNode: - return self.DEFAULT_MAPPING_TAG - -class Resolver(BaseResolver): - pass - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:bool', - re.compile(r'''^(?:yes|Yes|YES|no|No|NO - |true|True|TRUE|false|False|FALSE - |on|On|ON|off|Off|OFF)$''', re.X), - list('yYnNtTfFoO')) - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:float', - re.compile(r'''^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)? - |\.[0-9_]+(?:[eE][-+][0-9]+)? - |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]* - |[-+]?\.(?:inf|Inf|INF) - |\.(?:nan|NaN|NAN))$''', re.X), - list('-+0123456789.')) - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:int', - re.compile(r'''^(?:[-+]?0b[0-1_]+ - |[-+]?0[0-7_]+ - |[-+]?(?:0|[1-9][0-9_]*) - |[-+]?0x[0-9a-fA-F_]+ - |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X), - list('-+0123456789')) - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:merge', - re.compile(r'^(?:<<)$'), - ['<']) - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:null', - re.compile(r'''^(?: ~ - |null|Null|NULL - | )$''', re.X), - ['~', 'n', 'N', '']) - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:timestamp', - re.compile(r'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] - |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]? - (?:[Tt]|[ \t]+)[0-9][0-9]? - :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)? - (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X), - list('0123456789')) - -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:value', - re.compile(r'^(?:=)$'), - ['=']) - -# The following resolver is only for documentation purposes. It cannot work -# because plain scalars cannot start with '!', '&', or '*'. -Resolver.add_implicit_resolver( - 'tag:yaml.org,2002:yaml', - re.compile(r'^(?:!|&|\*)$'), - list('!&*')) - diff --git a/venv/lib/python3.6/site-packages/yaml/scanner.py b/venv/lib/python3.6/site-packages/yaml/scanner.py deleted file mode 100644 index c8d127b..0000000 --- a/venv/lib/python3.6/site-packages/yaml/scanner.py +++ /dev/null @@ -1,1444 +0,0 @@ - -# Scanner produces tokens of the following types: -# STREAM-START -# STREAM-END -# DIRECTIVE(name, value) -# DOCUMENT-START -# DOCUMENT-END -# BLOCK-SEQUENCE-START -# BLOCK-MAPPING-START -# BLOCK-END -# FLOW-SEQUENCE-START -# FLOW-MAPPING-START -# FLOW-SEQUENCE-END -# FLOW-MAPPING-END -# BLOCK-ENTRY -# FLOW-ENTRY -# KEY -# VALUE -# ALIAS(value) -# ANCHOR(value) -# TAG(value) -# SCALAR(value, plain, style) -# -# Read comments in the Scanner code for more details. -# - -__all__ = ['Scanner', 'ScannerError'] - -from .error import MarkedYAMLError -from .tokens import * - -class ScannerError(MarkedYAMLError): - pass - -class SimpleKey: - # See below simple keys treatment. - - def __init__(self, token_number, required, index, line, column, mark): - self.token_number = token_number - self.required = required - self.index = index - self.line = line - self.column = column - self.mark = mark - -class Scanner: - - def __init__(self): - """Initialize the scanner.""" - # It is assumed that Scanner and Reader will have a common descendant. - # Reader do the dirty work of checking for BOM and converting the - # input data to Unicode. It also adds NUL to the end. - # - # Reader supports the following methods - # self.peek(i=0) # peek the next i-th character - # self.prefix(l=1) # peek the next l characters - # self.forward(l=1) # read the next l characters and move the pointer. - - # Had we reached the end of the stream? - self.done = False - - # The number of unclosed '{' and '['. `flow_level == 0` means block - # context. - self.flow_level = 0 - - # List of processed tokens that are not yet emitted. - self.tokens = [] - - # Add the STREAM-START token. - self.fetch_stream_start() - - # Number of tokens that were emitted through the `get_token` method. - self.tokens_taken = 0 - - # The current indentation level. - self.indent = -1 - - # Past indentation levels. - self.indents = [] - - # Variables related to simple keys treatment. - - # A simple key is a key that is not denoted by the '?' indicator. - # Example of simple keys: - # --- - # block simple key: value - # ? not a simple key: - # : { flow simple key: value } - # We emit the KEY token before all keys, so when we find a potential - # simple key, we try to locate the corresponding ':' indicator. - # Simple keys should be limited to a single line and 1024 characters. - - # Can a simple key start at the current position? A simple key may - # start: - # - at the beginning of the line, not counting indentation spaces - # (in block context), - # - after '{', '[', ',' (in the flow context), - # - after '?', ':', '-' (in the block context). - # In the block context, this flag also signifies if a block collection - # may start at the current position. - self.allow_simple_key = True - - # Keep track of possible simple keys. This is a dictionary. The key - # is `flow_level`; there can be no more that one possible simple key - # for each level. The value is a SimpleKey record: - # (token_number, required, index, line, column, mark) - # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow), - # '[', or '{' tokens. - self.possible_simple_keys = {} - - # Public methods. - - def check_token(self, *choices): - # Check if the next token is one of the given types. - while self.need_more_tokens(): - self.fetch_more_tokens() - if self.tokens: - if not choices: - return True - for choice in choices: - if isinstance(self.tokens[0], choice): - return True - return False - - def peek_token(self): - # Return the next token, but do not delete if from the queue. - while self.need_more_tokens(): - self.fetch_more_tokens() - if self.tokens: - return self.tokens[0] - - def get_token(self): - # Return the next token. - while self.need_more_tokens(): - self.fetch_more_tokens() - if self.tokens: - self.tokens_taken += 1 - return self.tokens.pop(0) - - # Private methods. - - def need_more_tokens(self): - if self.done: - return False - if not self.tokens: - return True - # The current token may be a potential simple key, so we - # need to look further. - self.stale_possible_simple_keys() - if self.next_possible_simple_key() == self.tokens_taken: - return True - - def fetch_more_tokens(self): - - # Eat whitespaces and comments until we reach the next token. - self.scan_to_next_token() - - # Remove obsolete possible simple keys. - self.stale_possible_simple_keys() - - # Compare the current indentation and column. It may add some tokens - # and decrease the current indentation level. - self.unwind_indent(self.column) - - # Peek the next character. - ch = self.peek() - - # Is it the end of stream? - if ch == '\0': - return self.fetch_stream_end() - - # Is it a directive? - if ch == '%' and self.check_directive(): - return self.fetch_directive() - - # Is it the document start? - if ch == '-' and self.check_document_start(): - return self.fetch_document_start() - - # Is it the document end? - if ch == '.' and self.check_document_end(): - return self.fetch_document_end() - - # TODO: support for BOM within a stream. - #if ch == '\uFEFF': - # return self.fetch_bom() <-- issue BOMToken - - # Note: the order of the following checks is NOT significant. - - # Is it the flow sequence start indicator? - if ch == '[': - return self.fetch_flow_sequence_start() - - # Is it the flow mapping start indicator? - if ch == '{': - return self.fetch_flow_mapping_start() - - # Is it the flow sequence end indicator? - if ch == ']': - return self.fetch_flow_sequence_end() - - # Is it the flow mapping end indicator? - if ch == '}': - return self.fetch_flow_mapping_end() - - # Is it the flow entry indicator? - if ch == ',': - return self.fetch_flow_entry() - - # Is it the block entry indicator? - if ch == '-' and self.check_block_entry(): - return self.fetch_block_entry() - - # Is it the key indicator? - if ch == '?' and self.check_key(): - return self.fetch_key() - - # Is it the value indicator? - if ch == ':' and self.check_value(): - return self.fetch_value() - - # Is it an alias? - if ch == '*': - return self.fetch_alias() - - # Is it an anchor? - if ch == '&': - return self.fetch_anchor() - - # Is it a tag? - if ch == '!': - return self.fetch_tag() - - # Is it a literal scalar? - if ch == '|' and not self.flow_level: - return self.fetch_literal() - - # Is it a folded scalar? - if ch == '>' and not self.flow_level: - return self.fetch_folded() - - # Is it a single quoted scalar? - if ch == '\'': - return self.fetch_single() - - # Is it a double quoted scalar? - if ch == '\"': - return self.fetch_double() - - # It must be a plain scalar then. - if self.check_plain(): - return self.fetch_plain() - - # No? It's an error. Let's produce a nice error message. - raise ScannerError("while scanning for the next token", None, - "found character %r that cannot start any token" % ch, - self.get_mark()) - - # Simple keys treatment. - - def next_possible_simple_key(self): - # Return the number of the nearest possible simple key. Actually we - # don't need to loop through the whole dictionary. We may replace it - # with the following code: - # if not self.possible_simple_keys: - # return None - # return self.possible_simple_keys[ - # min(self.possible_simple_keys.keys())].token_number - min_token_number = None - for level in self.possible_simple_keys: - key = self.possible_simple_keys[level] - if min_token_number is None or key.token_number < min_token_number: - min_token_number = key.token_number - return min_token_number - - def stale_possible_simple_keys(self): - # Remove entries that are no longer possible simple keys. According to - # the YAML specification, simple keys - # - should be limited to a single line, - # - should be no longer than 1024 characters. - # Disabling this procedure will allow simple keys of any length and - # height (may cause problems if indentation is broken though). - for level in list(self.possible_simple_keys): - key = self.possible_simple_keys[level] - if key.line != self.line \ - or self.index-key.index > 1024: - if key.required: - raise ScannerError("while scanning a simple key", key.mark, - "could not find expected ':'", self.get_mark()) - del self.possible_simple_keys[level] - - def save_possible_simple_key(self): - # The next token may start a simple key. We check if it's possible - # and save its position. This function is called for - # ALIAS, ANCHOR, TAG, SCALAR(flow), '[', and '{'. - - # Check if a simple key is required at the current position. - required = not self.flow_level and self.indent == self.column - - # The next token might be a simple key. Let's save it's number and - # position. - if self.allow_simple_key: - self.remove_possible_simple_key() - token_number = self.tokens_taken+len(self.tokens) - key = SimpleKey(token_number, required, - self.index, self.line, self.column, self.get_mark()) - self.possible_simple_keys[self.flow_level] = key - - def remove_possible_simple_key(self): - # Remove the saved possible key position at the current flow level. - if self.flow_level in self.possible_simple_keys: - key = self.possible_simple_keys[self.flow_level] - - if key.required: - raise ScannerError("while scanning a simple key", key.mark, - "could not find expected ':'", self.get_mark()) - - del self.possible_simple_keys[self.flow_level] - - # Indentation functions. - - def unwind_indent(self, column): - - ## In flow context, tokens should respect indentation. - ## Actually the condition should be `self.indent >= column` according to - ## the spec. But this condition will prohibit intuitively correct - ## constructions such as - ## key : { - ## } - #if self.flow_level and self.indent > column: - # raise ScannerError(None, None, - # "invalid intendation or unclosed '[' or '{'", - # self.get_mark()) - - # In the flow context, indentation is ignored. We make the scanner less - # restrictive then specification requires. - if self.flow_level: - return - - # In block context, we may need to issue the BLOCK-END tokens. - while self.indent > column: - mark = self.get_mark() - self.indent = self.indents.pop() - self.tokens.append(BlockEndToken(mark, mark)) - - def add_indent(self, column): - # Check if we need to increase indentation. - if self.indent < column: - self.indents.append(self.indent) - self.indent = column - return True - return False - - # Fetchers. - - def fetch_stream_start(self): - # We always add STREAM-START as the first token and STREAM-END as the - # last token. - - # Read the token. - mark = self.get_mark() - - # Add STREAM-START. - self.tokens.append(StreamStartToken(mark, mark, - encoding=self.encoding)) - - - def fetch_stream_end(self): - - # Set the current intendation to -1. - self.unwind_indent(-1) - - # Reset simple keys. - self.remove_possible_simple_key() - self.allow_simple_key = False - self.possible_simple_keys = {} - - # Read the token. - mark = self.get_mark() - - # Add STREAM-END. - self.tokens.append(StreamEndToken(mark, mark)) - - # The steam is finished. - self.done = True - - def fetch_directive(self): - - # Set the current intendation to -1. - self.unwind_indent(-1) - - # Reset simple keys. - self.remove_possible_simple_key() - self.allow_simple_key = False - - # Scan and add DIRECTIVE. - self.tokens.append(self.scan_directive()) - - def fetch_document_start(self): - self.fetch_document_indicator(DocumentStartToken) - - def fetch_document_end(self): - self.fetch_document_indicator(DocumentEndToken) - - def fetch_document_indicator(self, TokenClass): - - # Set the current intendation to -1. - self.unwind_indent(-1) - - # Reset simple keys. Note that there could not be a block collection - # after '---'. - self.remove_possible_simple_key() - self.allow_simple_key = False - - # Add DOCUMENT-START or DOCUMENT-END. - start_mark = self.get_mark() - self.forward(3) - end_mark = self.get_mark() - self.tokens.append(TokenClass(start_mark, end_mark)) - - def fetch_flow_sequence_start(self): - self.fetch_flow_collection_start(FlowSequenceStartToken) - - def fetch_flow_mapping_start(self): - self.fetch_flow_collection_start(FlowMappingStartToken) - - def fetch_flow_collection_start(self, TokenClass): - - # '[' and '{' may start a simple key. - self.save_possible_simple_key() - - # Increase the flow level. - self.flow_level += 1 - - # Simple keys are allowed after '[' and '{'. - self.allow_simple_key = True - - # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START. - start_mark = self.get_mark() - self.forward() - end_mark = self.get_mark() - self.tokens.append(TokenClass(start_mark, end_mark)) - - def fetch_flow_sequence_end(self): - self.fetch_flow_collection_end(FlowSequenceEndToken) - - def fetch_flow_mapping_end(self): - self.fetch_flow_collection_end(FlowMappingEndToken) - - def fetch_flow_collection_end(self, TokenClass): - - # Reset possible simple key on the current level. - self.remove_possible_simple_key() - - # Decrease the flow level. - self.flow_level -= 1 - - # No simple keys after ']' or '}'. - self.allow_simple_key = False - - # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END. - start_mark = self.get_mark() - self.forward() - end_mark = self.get_mark() - self.tokens.append(TokenClass(start_mark, end_mark)) - - def fetch_flow_entry(self): - - # Simple keys are allowed after ','. - self.allow_simple_key = True - - # Reset possible simple key on the current level. - self.remove_possible_simple_key() - - # Add FLOW-ENTRY. - start_mark = self.get_mark() - self.forward() - end_mark = self.get_mark() - self.tokens.append(FlowEntryToken(start_mark, end_mark)) - - def fetch_block_entry(self): - - # Block context needs additional checks. - if not self.flow_level: - - # Are we allowed to start a new entry? - if not self.allow_simple_key: - raise ScannerError(None, None, - "sequence entries are not allowed here", - self.get_mark()) - - # We may need to add BLOCK-SEQUENCE-START. - if self.add_indent(self.column): - mark = self.get_mark() - self.tokens.append(BlockSequenceStartToken(mark, mark)) - - # It's an error for the block entry to occur in the flow context, - # but we let the parser detect this. - else: - pass - - # Simple keys are allowed after '-'. - self.allow_simple_key = True - - # Reset possible simple key on the current level. - self.remove_possible_simple_key() - - # Add BLOCK-ENTRY. - start_mark = self.get_mark() - self.forward() - end_mark = self.get_mark() - self.tokens.append(BlockEntryToken(start_mark, end_mark)) - - def fetch_key(self): - - # Block context needs additional checks. - if not self.flow_level: - - # Are we allowed to start a key (not nessesary a simple)? - if not self.allow_simple_key: - raise ScannerError(None, None, - "mapping keys are not allowed here", - self.get_mark()) - - # We may need to add BLOCK-MAPPING-START. - if self.add_indent(self.column): - mark = self.get_mark() - self.tokens.append(BlockMappingStartToken(mark, mark)) - - # Simple keys are allowed after '?' in the block context. - self.allow_simple_key = not self.flow_level - - # Reset possible simple key on the current level. - self.remove_possible_simple_key() - - # Add KEY. - start_mark = self.get_mark() - self.forward() - end_mark = self.get_mark() - self.tokens.append(KeyToken(start_mark, end_mark)) - - def fetch_value(self): - - # Do we determine a simple key? - if self.flow_level in self.possible_simple_keys: - - # Add KEY. - key = self.possible_simple_keys[self.flow_level] - del self.possible_simple_keys[self.flow_level] - self.tokens.insert(key.token_number-self.tokens_taken, - KeyToken(key.mark, key.mark)) - - # If this key starts a new block mapping, we need to add - # BLOCK-MAPPING-START. - if not self.flow_level: - if self.add_indent(key.column): - self.tokens.insert(key.token_number-self.tokens_taken, - BlockMappingStartToken(key.mark, key.mark)) - - # There cannot be two simple keys one after another. - self.allow_simple_key = False - - # It must be a part of a complex key. - else: - - # Block context needs additional checks. - # (Do we really need them? They will be catched by the parser - # anyway.) - if not self.flow_level: - - # We are allowed to start a complex value if and only if - # we can start a simple key. - if not self.allow_simple_key: - raise ScannerError(None, None, - "mapping values are not allowed here", - self.get_mark()) - - # If this value starts a new block mapping, we need to add - # BLOCK-MAPPING-START. It will be detected as an error later by - # the parser. - if not self.flow_level: - if self.add_indent(self.column): - mark = self.get_mark() - self.tokens.append(BlockMappingStartToken(mark, mark)) - - # Simple keys are allowed after ':' in the block context. - self.allow_simple_key = not self.flow_level - - # Reset possible simple key on the current level. - self.remove_possible_simple_key() - - # Add VALUE. - start_mark = self.get_mark() - self.forward() - end_mark = self.get_mark() - self.tokens.append(ValueToken(start_mark, end_mark)) - - def fetch_alias(self): - - # ALIAS could be a simple key. - self.save_possible_simple_key() - - # No simple keys after ALIAS. - self.allow_simple_key = False - - # Scan and add ALIAS. - self.tokens.append(self.scan_anchor(AliasToken)) - - def fetch_anchor(self): - - # ANCHOR could start a simple key. - self.save_possible_simple_key() - - # No simple keys after ANCHOR. - self.allow_simple_key = False - - # Scan and add ANCHOR. - self.tokens.append(self.scan_anchor(AnchorToken)) - - def fetch_tag(self): - - # TAG could start a simple key. - self.save_possible_simple_key() - - # No simple keys after TAG. - self.allow_simple_key = False - - # Scan and add TAG. - self.tokens.append(self.scan_tag()) - - def fetch_literal(self): - self.fetch_block_scalar(style='|') - - def fetch_folded(self): - self.fetch_block_scalar(style='>') - - def fetch_block_scalar(self, style): - - # A simple key may follow a block scalar. - self.allow_simple_key = True - - # Reset possible simple key on the current level. - self.remove_possible_simple_key() - - # Scan and add SCALAR. - self.tokens.append(self.scan_block_scalar(style)) - - def fetch_single(self): - self.fetch_flow_scalar(style='\'') - - def fetch_double(self): - self.fetch_flow_scalar(style='"') - - def fetch_flow_scalar(self, style): - - # A flow scalar could be a simple key. - self.save_possible_simple_key() - - # No simple keys after flow scalars. - self.allow_simple_key = False - - # Scan and add SCALAR. - self.tokens.append(self.scan_flow_scalar(style)) - - def fetch_plain(self): - - # A plain scalar could be a simple key. - self.save_possible_simple_key() - - # No simple keys after plain scalars. But note that `scan_plain` will - # change this flag if the scan is finished at the beginning of the - # line. - self.allow_simple_key = False - - # Scan and add SCALAR. May change `allow_simple_key`. - self.tokens.append(self.scan_plain()) - - # Checkers. - - def check_directive(self): - - # DIRECTIVE: ^ '%' ... - # The '%' indicator is already checked. - if self.column == 0: - return True - - def check_document_start(self): - - # DOCUMENT-START: ^ '---' (' '|'\n') - if self.column == 0: - if self.prefix(3) == '---' \ - and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': - return True - - def check_document_end(self): - - # DOCUMENT-END: ^ '...' (' '|'\n') - if self.column == 0: - if self.prefix(3) == '...' \ - and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': - return True - - def check_block_entry(self): - - # BLOCK-ENTRY: '-' (' '|'\n') - return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029' - - def check_key(self): - - # KEY(flow context): '?' - if self.flow_level: - return True - - # KEY(block context): '?' (' '|'\n') - else: - return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029' - - def check_value(self): - - # VALUE(flow context): ':' - if self.flow_level: - return True - - # VALUE(block context): ':' (' '|'\n') - else: - return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029' - - def check_plain(self): - - # A plain scalar may start with any non-space character except: - # '-', '?', ':', ',', '[', ']', '{', '}', - # '#', '&', '*', '!', '|', '>', '\'', '\"', - # '%', '@', '`'. - # - # It may also start with - # '-', '?', ':' - # if it is followed by a non-space character. - # - # Note that we limit the last rule to the block context (except the - # '-' character) because we want the flow context to be space - # independent. - ch = self.peek() - return ch not in '\0 \t\r\n\x85\u2028\u2029-?:,[]{}#&*!|>\'\"%@`' \ - or (self.peek(1) not in '\0 \t\r\n\x85\u2028\u2029' - and (ch == '-' or (not self.flow_level and ch in '?:'))) - - # Scanners. - - def scan_to_next_token(self): - # We ignore spaces, line breaks and comments. - # If we find a line break in the block context, we set the flag - # `allow_simple_key` on. - # The byte order mark is stripped if it's the first character in the - # stream. We do not yet support BOM inside the stream as the - # specification requires. Any such mark will be considered as a part - # of the document. - # - # TODO: We need to make tab handling rules more sane. A good rule is - # Tabs cannot precede tokens - # BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, BLOCK-END, - # KEY(block), VALUE(block), BLOCK-ENTRY - # So the checking code is - # if <TAB>: - # self.allow_simple_keys = False - # We also need to add the check for `allow_simple_keys == True` to - # `unwind_indent` before issuing BLOCK-END. - # Scanners for block, flow, and plain scalars need to be modified. - - if self.index == 0 and self.peek() == '\uFEFF': - self.forward() - found = False - while not found: - while self.peek() == ' ': - self.forward() - if self.peek() == '#': - while self.peek() not in '\0\r\n\x85\u2028\u2029': - self.forward() - if self.scan_line_break(): - if not self.flow_level: - self.allow_simple_key = True - else: - found = True - - def scan_directive(self): - # See the specification for details. - start_mark = self.get_mark() - self.forward() - name = self.scan_directive_name(start_mark) - value = None - if name == 'YAML': - value = self.scan_yaml_directive_value(start_mark) - end_mark = self.get_mark() - elif name == 'TAG': - value = self.scan_tag_directive_value(start_mark) - end_mark = self.get_mark() - else: - end_mark = self.get_mark() - while self.peek() not in '\0\r\n\x85\u2028\u2029': - self.forward() - self.scan_directive_ignored_line(start_mark) - return DirectiveToken(name, value, start_mark, end_mark) - - def scan_directive_name(self, start_mark): - # See the specification for details. - length = 0 - ch = self.peek(length) - while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-_': - length += 1 - ch = self.peek(length) - if not length: - raise ScannerError("while scanning a directive", start_mark, - "expected alphabetic or numeric character, but found %r" - % ch, self.get_mark()) - value = self.prefix(length) - self.forward(length) - ch = self.peek() - if ch not in '\0 \r\n\x85\u2028\u2029': - raise ScannerError("while scanning a directive", start_mark, - "expected alphabetic or numeric character, but found %r" - % ch, self.get_mark()) - return value - - def scan_yaml_directive_value(self, start_mark): - # See the specification for details. - while self.peek() == ' ': - self.forward() - major = self.scan_yaml_directive_number(start_mark) - if self.peek() != '.': - raise ScannerError("while scanning a directive", start_mark, - "expected a digit or '.', but found %r" % self.peek(), - self.get_mark()) - self.forward() - minor = self.scan_yaml_directive_number(start_mark) - if self.peek() not in '\0 \r\n\x85\u2028\u2029': - raise ScannerError("while scanning a directive", start_mark, - "expected a digit or ' ', but found %r" % self.peek(), - self.get_mark()) - return (major, minor) - - def scan_yaml_directive_number(self, start_mark): - # See the specification for details. - ch = self.peek() - if not ('0' <= ch <= '9'): - raise ScannerError("while scanning a directive", start_mark, - "expected a digit, but found %r" % ch, self.get_mark()) - length = 0 - while '0' <= self.peek(length) <= '9': - length += 1 - value = int(self.prefix(length)) - self.forward(length) - return value - - def scan_tag_directive_value(self, start_mark): - # See the specification for details. - while self.peek() == ' ': - self.forward() - handle = self.scan_tag_directive_handle(start_mark) - while self.peek() == ' ': - self.forward() - prefix = self.scan_tag_directive_prefix(start_mark) - return (handle, prefix) - - def scan_tag_directive_handle(self, start_mark): - # See the specification for details. - value = self.scan_tag_handle('directive', start_mark) - ch = self.peek() - if ch != ' ': - raise ScannerError("while scanning a directive", start_mark, - "expected ' ', but found %r" % ch, self.get_mark()) - return value - - def scan_tag_directive_prefix(self, start_mark): - # See the specification for details. - value = self.scan_tag_uri('directive', start_mark) - ch = self.peek() - if ch not in '\0 \r\n\x85\u2028\u2029': - raise ScannerError("while scanning a directive", start_mark, - "expected ' ', but found %r" % ch, self.get_mark()) - return value - - def scan_directive_ignored_line(self, start_mark): - # See the specification for details. - while self.peek() == ' ': - self.forward() - if self.peek() == '#': - while self.peek() not in '\0\r\n\x85\u2028\u2029': - self.forward() - ch = self.peek() - if ch not in '\0\r\n\x85\u2028\u2029': - raise ScannerError("while scanning a directive", start_mark, - "expected a comment or a line break, but found %r" - % ch, self.get_mark()) - self.scan_line_break() - - def scan_anchor(self, TokenClass): - # The specification does not restrict characters for anchors and - # aliases. This may lead to problems, for instance, the document: - # [ *alias, value ] - # can be interpteted in two ways, as - # [ "value" ] - # and - # [ *alias , "value" ] - # Therefore we restrict aliases to numbers and ASCII letters. - start_mark = self.get_mark() - indicator = self.peek() - if indicator == '*': - name = 'alias' - else: - name = 'anchor' - self.forward() - length = 0 - ch = self.peek(length) - while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-_': - length += 1 - ch = self.peek(length) - if not length: - raise ScannerError("while scanning an %s" % name, start_mark, - "expected alphabetic or numeric character, but found %r" - % ch, self.get_mark()) - value = self.prefix(length) - self.forward(length) - ch = self.peek() - if ch not in '\0 \t\r\n\x85\u2028\u2029?:,]}%@`': - raise ScannerError("while scanning an %s" % name, start_mark, - "expected alphabetic or numeric character, but found %r" - % ch, self.get_mark()) - end_mark = self.get_mark() - return TokenClass(value, start_mark, end_mark) - - def scan_tag(self): - # See the specification for details. - start_mark = self.get_mark() - ch = self.peek(1) - if ch == '<': - handle = None - self.forward(2) - suffix = self.scan_tag_uri('tag', start_mark) - if self.peek() != '>': - raise ScannerError("while parsing a tag", start_mark, - "expected '>', but found %r" % self.peek(), - self.get_mark()) - self.forward() - elif ch in '\0 \t\r\n\x85\u2028\u2029': - handle = None - suffix = '!' - self.forward() - else: - length = 1 - use_handle = False - while ch not in '\0 \r\n\x85\u2028\u2029': - if ch == '!': - use_handle = True - break - length += 1 - ch = self.peek(length) - handle = '!' - if use_handle: - handle = self.scan_tag_handle('tag', start_mark) - else: - handle = '!' - self.forward() - suffix = self.scan_tag_uri('tag', start_mark) - ch = self.peek() - if ch not in '\0 \r\n\x85\u2028\u2029': - raise ScannerError("while scanning a tag", start_mark, - "expected ' ', but found %r" % ch, self.get_mark()) - value = (handle, suffix) - end_mark = self.get_mark() - return TagToken(value, start_mark, end_mark) - - def scan_block_scalar(self, style): - # See the specification for details. - - if style == '>': - folded = True - else: - folded = False - - chunks = [] - start_mark = self.get_mark() - - # Scan the header. - self.forward() - chomping, increment = self.scan_block_scalar_indicators(start_mark) - self.scan_block_scalar_ignored_line(start_mark) - - # Determine the indentation level and go to the first non-empty line. - min_indent = self.indent+1 - if min_indent < 1: - min_indent = 1 - if increment is None: - breaks, max_indent, end_mark = self.scan_block_scalar_indentation() - indent = max(min_indent, max_indent) - else: - indent = min_indent+increment-1 - breaks, end_mark = self.scan_block_scalar_breaks(indent) - line_break = '' - - # Scan the inner part of the block scalar. - while self.column == indent and self.peek() != '\0': - chunks.extend(breaks) - leading_non_space = self.peek() not in ' \t' - length = 0 - while self.peek(length) not in '\0\r\n\x85\u2028\u2029': - length += 1 - chunks.append(self.prefix(length)) - self.forward(length) - line_break = self.scan_line_break() - breaks, end_mark = self.scan_block_scalar_breaks(indent) - if self.column == indent and self.peek() != '\0': - - # Unfortunately, folding rules are ambiguous. - # - # This is the folding according to the specification: - - if folded and line_break == '\n' \ - and leading_non_space and self.peek() not in ' \t': - if not breaks: - chunks.append(' ') - else: - chunks.append(line_break) - - # This is Clark Evans's interpretation (also in the spec - # examples): - # - #if folded and line_break == '\n': - # if not breaks: - # if self.peek() not in ' \t': - # chunks.append(' ') - # else: - # chunks.append(line_break) - #else: - # chunks.append(line_break) - else: - break - - # Chomp the tail. - if chomping is not False: - chunks.append(line_break) - if chomping is True: - chunks.extend(breaks) - - # We are done. - return ScalarToken(''.join(chunks), False, start_mark, end_mark, - style) - - def scan_block_scalar_indicators(self, start_mark): - # See the specification for details. - chomping = None - increment = None - ch = self.peek() - if ch in '+-': - if ch == '+': - chomping = True - else: - chomping = False - self.forward() - ch = self.peek() - if ch in '0123456789': - increment = int(ch) - if increment == 0: - raise ScannerError("while scanning a block scalar", start_mark, - "expected indentation indicator in the range 1-9, but found 0", - self.get_mark()) - self.forward() - elif ch in '0123456789': - increment = int(ch) - if increment == 0: - raise ScannerError("while scanning a block scalar", start_mark, - "expected indentation indicator in the range 1-9, but found 0", - self.get_mark()) - self.forward() - ch = self.peek() - if ch in '+-': - if ch == '+': - chomping = True - else: - chomping = False - self.forward() - ch = self.peek() - if ch not in '\0 \r\n\x85\u2028\u2029': - raise ScannerError("while scanning a block scalar", start_mark, - "expected chomping or indentation indicators, but found %r" - % ch, self.get_mark()) - return chomping, increment - - def scan_block_scalar_ignored_line(self, start_mark): - # See the specification for details. - while self.peek() == ' ': - self.forward() - if self.peek() == '#': - while self.peek() not in '\0\r\n\x85\u2028\u2029': - self.forward() - ch = self.peek() - if ch not in '\0\r\n\x85\u2028\u2029': - raise ScannerError("while scanning a block scalar", start_mark, - "expected a comment or a line break, but found %r" % ch, - self.get_mark()) - self.scan_line_break() - - def scan_block_scalar_indentation(self): - # See the specification for details. - chunks = [] - max_indent = 0 - end_mark = self.get_mark() - while self.peek() in ' \r\n\x85\u2028\u2029': - if self.peek() != ' ': - chunks.append(self.scan_line_break()) - end_mark = self.get_mark() - else: - self.forward() - if self.column > max_indent: - max_indent = self.column - return chunks, max_indent, end_mark - - def scan_block_scalar_breaks(self, indent): - # See the specification for details. - chunks = [] - end_mark = self.get_mark() - while self.column < indent and self.peek() == ' ': - self.forward() - while self.peek() in '\r\n\x85\u2028\u2029': - chunks.append(self.scan_line_break()) - end_mark = self.get_mark() - while self.column < indent and self.peek() == ' ': - self.forward() - return chunks, end_mark - - def scan_flow_scalar(self, style): - # See the specification for details. - # Note that we loose indentation rules for quoted scalars. Quoted - # scalars don't need to adhere indentation because " and ' clearly - # mark the beginning and the end of them. Therefore we are less - # restrictive then the specification requires. We only need to check - # that document separators are not included in scalars. - if style == '"': - double = True - else: - double = False - chunks = [] - start_mark = self.get_mark() - quote = self.peek() - self.forward() - chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark)) - while self.peek() != quote: - chunks.extend(self.scan_flow_scalar_spaces(double, start_mark)) - chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark)) - self.forward() - end_mark = self.get_mark() - return ScalarToken(''.join(chunks), False, start_mark, end_mark, - style) - - ESCAPE_REPLACEMENTS = { - '0': '\0', - 'a': '\x07', - 'b': '\x08', - 't': '\x09', - '\t': '\x09', - 'n': '\x0A', - 'v': '\x0B', - 'f': '\x0C', - 'r': '\x0D', - 'e': '\x1B', - ' ': '\x20', - '\"': '\"', - '\\': '\\', - 'N': '\x85', - '_': '\xA0', - 'L': '\u2028', - 'P': '\u2029', - } - - ESCAPE_CODES = { - 'x': 2, - 'u': 4, - 'U': 8, - } - - def scan_flow_scalar_non_spaces(self, double, start_mark): - # See the specification for details. - chunks = [] - while True: - length = 0 - while self.peek(length) not in '\'\"\\\0 \t\r\n\x85\u2028\u2029': - length += 1 - if length: - chunks.append(self.prefix(length)) - self.forward(length) - ch = self.peek() - if not double and ch == '\'' and self.peek(1) == '\'': - chunks.append('\'') - self.forward(2) - elif (double and ch == '\'') or (not double and ch in '\"\\'): - chunks.append(ch) - self.forward() - elif double and ch == '\\': - self.forward() - ch = self.peek() - if ch in self.ESCAPE_REPLACEMENTS: - chunks.append(self.ESCAPE_REPLACEMENTS[ch]) - self.forward() - elif ch in self.ESCAPE_CODES: - length = self.ESCAPE_CODES[ch] - self.forward() - for k in range(length): - if self.peek(k) not in '0123456789ABCDEFabcdef': - raise ScannerError("while scanning a double-quoted scalar", start_mark, - "expected escape sequence of %d hexdecimal numbers, but found %r" % - (length, self.peek(k)), self.get_mark()) - code = int(self.prefix(length), 16) - chunks.append(chr(code)) - self.forward(length) - elif ch in '\r\n\x85\u2028\u2029': - self.scan_line_break() - chunks.extend(self.scan_flow_scalar_breaks(double, start_mark)) - else: - raise ScannerError("while scanning a double-quoted scalar", start_mark, - "found unknown escape character %r" % ch, self.get_mark()) - else: - return chunks - - def scan_flow_scalar_spaces(self, double, start_mark): - # See the specification for details. - chunks = [] - length = 0 - while self.peek(length) in ' \t': - length += 1 - whitespaces = self.prefix(length) - self.forward(length) - ch = self.peek() - if ch == '\0': - raise ScannerError("while scanning a quoted scalar", start_mark, - "found unexpected end of stream", self.get_mark()) - elif ch in '\r\n\x85\u2028\u2029': - line_break = self.scan_line_break() - breaks = self.scan_flow_scalar_breaks(double, start_mark) - if line_break != '\n': - chunks.append(line_break) - elif not breaks: - chunks.append(' ') - chunks.extend(breaks) - else: - chunks.append(whitespaces) - return chunks - - def scan_flow_scalar_breaks(self, double, start_mark): - # See the specification for details. - chunks = [] - while True: - # Instead of checking indentation, we check for document - # separators. - prefix = self.prefix(3) - if (prefix == '---' or prefix == '...') \ - and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': - raise ScannerError("while scanning a quoted scalar", start_mark, - "found unexpected document separator", self.get_mark()) - while self.peek() in ' \t': - self.forward() - if self.peek() in '\r\n\x85\u2028\u2029': - chunks.append(self.scan_line_break()) - else: - return chunks - - def scan_plain(self): - # See the specification for details. - # We add an additional restriction for the flow context: - # plain scalars in the flow context cannot contain ',', ':' and '?'. - # We also keep track of the `allow_simple_key` flag here. - # Indentation rules are loosed for the flow context. - chunks = [] - start_mark = self.get_mark() - end_mark = start_mark - indent = self.indent+1 - # We allow zero indentation for scalars, but then we need to check for - # document separators at the beginning of the line. - #if indent == 0: - # indent = 1 - spaces = [] - while True: - length = 0 - if self.peek() == '#': - break - while True: - ch = self.peek(length) - if ch in '\0 \t\r\n\x85\u2028\u2029' \ - or (not self.flow_level and ch == ':' and - self.peek(length+1) in '\0 \t\r\n\x85\u2028\u2029') \ - or (self.flow_level and ch in ',:?[]{}'): - break - length += 1 - # It's not clear what we should do with ':' in the flow context. - if (self.flow_level and ch == ':' - and self.peek(length+1) not in '\0 \t\r\n\x85\u2028\u2029,[]{}'): - self.forward(length) - raise ScannerError("while scanning a plain scalar", start_mark, - "found unexpected ':'", self.get_mark(), - "Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.") - if length == 0: - break - self.allow_simple_key = False - chunks.extend(spaces) - chunks.append(self.prefix(length)) - self.forward(length) - end_mark = self.get_mark() - spaces = self.scan_plain_spaces(indent, start_mark) - if not spaces or self.peek() == '#' \ - or (not self.flow_level and self.column < indent): - break - return ScalarToken(''.join(chunks), True, start_mark, end_mark) - - def scan_plain_spaces(self, indent, start_mark): - # See the specification for details. - # The specification is really confusing about tabs in plain scalars. - # We just forbid them completely. Do not use tabs in YAML! - chunks = [] - length = 0 - while self.peek(length) in ' ': - length += 1 - whitespaces = self.prefix(length) - self.forward(length) - ch = self.peek() - if ch in '\r\n\x85\u2028\u2029': - line_break = self.scan_line_break() - self.allow_simple_key = True - prefix = self.prefix(3) - if (prefix == '---' or prefix == '...') \ - and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': - return - breaks = [] - while self.peek() in ' \r\n\x85\u2028\u2029': - if self.peek() == ' ': - self.forward() - else: - breaks.append(self.scan_line_break()) - prefix = self.prefix(3) - if (prefix == '---' or prefix == '...') \ - and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029': - return - if line_break != '\n': - chunks.append(line_break) - elif not breaks: - chunks.append(' ') - chunks.extend(breaks) - elif whitespaces: - chunks.append(whitespaces) - return chunks - - def scan_tag_handle(self, name, start_mark): - # See the specification for details. - # For some strange reasons, the specification does not allow '_' in - # tag handles. I have allowed it anyway. - ch = self.peek() - if ch != '!': - raise ScannerError("while scanning a %s" % name, start_mark, - "expected '!', but found %r" % ch, self.get_mark()) - length = 1 - ch = self.peek(length) - if ch != ' ': - while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-_': - length += 1 - ch = self.peek(length) - if ch != '!': - self.forward(length) - raise ScannerError("while scanning a %s" % name, start_mark, - "expected '!', but found %r" % ch, self.get_mark()) - length += 1 - value = self.prefix(length) - self.forward(length) - return value - - def scan_tag_uri(self, name, start_mark): - # See the specification for details. - # Note: we do not check if URI is well-formed. - chunks = [] - length = 0 - ch = self.peek(length) - while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \ - or ch in '-;/?:@&=+$,_.!~*\'()[]%': - if ch == '%': - chunks.append(self.prefix(length)) - self.forward(length) - length = 0 - chunks.append(self.scan_uri_escapes(name, start_mark)) - else: - length += 1 - ch = self.peek(length) - if length: - chunks.append(self.prefix(length)) - self.forward(length) - length = 0 - if not chunks: - raise ScannerError("while parsing a %s" % name, start_mark, - "expected URI, but found %r" % ch, self.get_mark()) - return ''.join(chunks) - - def scan_uri_escapes(self, name, start_mark): - # See the specification for details. - codes = [] - mark = self.get_mark() - while self.peek() == '%': - self.forward() - for k in range(2): - if self.peek(k) not in '0123456789ABCDEFabcdef': - raise ScannerError("while scanning a %s" % name, start_mark, - "expected URI escape sequence of 2 hexdecimal numbers, but found %r" - % self.peek(k), self.get_mark()) - codes.append(int(self.prefix(2), 16)) - self.forward(2) - try: - value = bytes(codes).decode('utf-8') - except UnicodeDecodeError as exc: - raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark) - return value - - def scan_line_break(self): - # Transforms: - # '\r\n' : '\n' - # '\r' : '\n' - # '\n' : '\n' - # '\x85' : '\n' - # '\u2028' : '\u2028' - # '\u2029 : '\u2029' - # default : '' - ch = self.peek() - if ch in '\r\n\x85': - if self.prefix(2) == '\r\n': - self.forward(2) - else: - self.forward() - return '\n' - elif ch in '\u2028\u2029': - self.forward() - return ch - return '' - -#try: -# import psyco -# psyco.bind(Scanner) -#except ImportError: -# pass - diff --git a/venv/lib/python3.6/site-packages/yaml/serializer.py b/venv/lib/python3.6/site-packages/yaml/serializer.py deleted file mode 100644 index fe911e6..0000000 --- a/venv/lib/python3.6/site-packages/yaml/serializer.py +++ /dev/null @@ -1,111 +0,0 @@ - -__all__ = ['Serializer', 'SerializerError'] - -from .error import YAMLError -from .events import * -from .nodes import * - -class SerializerError(YAMLError): - pass - -class Serializer: - - ANCHOR_TEMPLATE = 'id%03d' - - def __init__(self, encoding=None, - explicit_start=None, explicit_end=None, version=None, tags=None): - self.use_encoding = encoding - self.use_explicit_start = explicit_start - self.use_explicit_end = explicit_end - self.use_version = version - self.use_tags = tags - self.serialized_nodes = {} - self.anchors = {} - self.last_anchor_id = 0 - self.closed = None - - def open(self): - if self.closed is None: - self.emit(StreamStartEvent(encoding=self.use_encoding)) - self.closed = False - elif self.closed: - raise SerializerError("serializer is closed") - else: - raise SerializerError("serializer is already opened") - - def close(self): - if self.closed is None: - raise SerializerError("serializer is not opened") - elif not self.closed: - self.emit(StreamEndEvent()) - self.closed = True - - #def __del__(self): - # self.close() - - def serialize(self, node): - if self.closed is None: - raise SerializerError("serializer is not opened") - elif self.closed: - raise SerializerError("serializer is closed") - self.emit(DocumentStartEvent(explicit=self.use_explicit_start, - version=self.use_version, tags=self.use_tags)) - self.anchor_node(node) - self.serialize_node(node, None, None) - self.emit(DocumentEndEvent(explicit=self.use_explicit_end)) - self.serialized_nodes = {} - self.anchors = {} - self.last_anchor_id = 0 - - def anchor_node(self, node): - if node in self.anchors: - if self.anchors[node] is None: - self.anchors[node] = self.generate_anchor(node) - else: - self.anchors[node] = None - if isinstance(node, SequenceNode): - for item in node.value: - self.anchor_node(item) - elif isinstance(node, MappingNode): - for key, value in node.value: - self.anchor_node(key) - self.anchor_node(value) - - def generate_anchor(self, node): - self.last_anchor_id += 1 - return self.ANCHOR_TEMPLATE % self.last_anchor_id - - def serialize_node(self, node, parent, index): - alias = self.anchors[node] - if node in self.serialized_nodes: - self.emit(AliasEvent(alias)) - else: - self.serialized_nodes[node] = True - self.descend_resolver(parent, index) - if isinstance(node, ScalarNode): - detected_tag = self.resolve(ScalarNode, node.value, (True, False)) - default_tag = self.resolve(ScalarNode, node.value, (False, True)) - implicit = (node.tag == detected_tag), (node.tag == default_tag) - self.emit(ScalarEvent(alias, node.tag, implicit, node.value, - style=node.style)) - elif isinstance(node, SequenceNode): - implicit = (node.tag - == self.resolve(SequenceNode, node.value, True)) - self.emit(SequenceStartEvent(alias, node.tag, implicit, - flow_style=node.flow_style)) - index = 0 - for item in node.value: - self.serialize_node(item, node, index) - index += 1 - self.emit(SequenceEndEvent()) - elif isinstance(node, MappingNode): - implicit = (node.tag - == self.resolve(MappingNode, node.value, True)) - self.emit(MappingStartEvent(alias, node.tag, implicit, - flow_style=node.flow_style)) - for key, value in node.value: - self.serialize_node(key, node, None) - self.serialize_node(value, node, key) - self.emit(MappingEndEvent()) - self.ascend_resolver() - diff --git a/venv/lib/python3.6/site-packages/yaml/tokens.py b/venv/lib/python3.6/site-packages/yaml/tokens.py deleted file mode 100644 index 4d0b48a..0000000 --- a/venv/lib/python3.6/site-packages/yaml/tokens.py +++ /dev/null @@ -1,104 +0,0 @@ - -class Token(object): - def __init__(self, start_mark, end_mark): - self.start_mark = start_mark - self.end_mark = end_mark - def __repr__(self): - attributes = [key for key in self.__dict__ - if not key.endswith('_mark')] - attributes.sort() - arguments = ', '.join(['%s=%r' % (key, getattr(self, key)) - for key in attributes]) - return '%s(%s)' % (self.__class__.__name__, arguments) - -#class BOMToken(Token): -# id = '<byte order mark>' - -class DirectiveToken(Token): - id = '<directive>' - def __init__(self, name, value, start_mark, end_mark): - self.name = name - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - -class DocumentStartToken(Token): - id = '<document start>' - -class DocumentEndToken(Token): - id = '<document end>' - -class StreamStartToken(Token): - id = '<stream start>' - def __init__(self, start_mark=None, end_mark=None, - encoding=None): - self.start_mark = start_mark - self.end_mark = end_mark - self.encoding = encoding - -class StreamEndToken(Token): - id = '<stream end>' - -class BlockSequenceStartToken(Token): - id = '<block sequence start>' - -class BlockMappingStartToken(Token): - id = '<block mapping start>' - -class BlockEndToken(Token): - id = '<block end>' - -class FlowSequenceStartToken(Token): - id = '[' - -class FlowMappingStartToken(Token): - id = '{' - -class FlowSequenceEndToken(Token): - id = ']' - -class FlowMappingEndToken(Token): - id = '}' - -class KeyToken(Token): - id = '?' - -class ValueToken(Token): - id = ':' - -class BlockEntryToken(Token): - id = '-' - -class FlowEntryToken(Token): - id = ',' - -class AliasToken(Token): - id = '<alias>' - def __init__(self, value, start_mark, end_mark): - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - -class AnchorToken(Token): - id = '<anchor>' - def __init__(self, value, start_mark, end_mark): - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - -class TagToken(Token): - id = '<tag>' - def __init__(self, value, start_mark, end_mark): - self.value = value - self.start_mark = start_mark - self.end_mark = end_mark - -class ScalarToken(Token): - id = '<scalar>' - def __init__(self, value, plain, start_mark, end_mark, style=None): - self.value = value - self.plain = plain - self.start_mark = start_mark - self.end_mark = end_mark - self.style = style - diff --git a/venv/lib64 b/venv/lib64 deleted file mode 120000 index 7951405..0000000 --- a/venv/lib64 +++ /dev/null @@ -1 +0,0 @@ -lib \ No newline at end of file diff --git a/venv/pip-selfcheck.json b/venv/pip-selfcheck.json deleted file mode 100644 index 2176cba..0000000 --- a/venv/pip-selfcheck.json +++ /dev/null @@ -1 +0,0 @@ -{"last_check":"2018-09-26T17:15:24Z","pypi_version":"18.0"} \ No newline at end of file diff --git a/venv/pyvenv.cfg b/venv/pyvenv.cfg deleted file mode 100644 index 99a78fb..0000000 --- a/venv/pyvenv.cfg +++ /dev/null @@ -1,3 +0,0 @@ -home = /usr/bin -include-system-site-packages = false -version = 3.6.5